diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 1f0abbe738264b..76029d152c69c8 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -1008,6 +1008,7 @@ PODS: - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety + - React-Codegen - React-Core - React-CoreModules - React-debug @@ -1481,7 +1482,7 @@ SPEC CHECKSUMS: NativeCxxModuleExample: 64d8720a77e8c9ff9383f9a98af7045c510092c0 OCMock: 9491e4bec59e0b267d52a9184ff5605995e74be8 RCT-Folly: 045d6ecaa59d826c5736dfba0b2f4083ff8d79df - RCTDeprecation: 3808e36294137f9ee5668f4df2e73dc079cd1dcf + RCTDeprecation: 0b553223b100fafbf79ee298786e336949bfaf8f RCTRequired: 82c56a03b3efd524bfdb581a906add903f78f978 RCTTypeSafety: 5f57d4ae5dfafc85a0f575d756c909b584722c52 React: cb6dc75e09f32aeddb4d8fb58a394a67219a92fe @@ -1536,4 +1537,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 60b84dd598fc04e9ed84dbc82e2cb3b99b1d7adf -COCOAPODS: 1.14.3 +COCOAPODS: 1.11.3 diff --git a/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj b/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj index 4e7c3b9024ae7f..4988f268c72fc1 100644 --- a/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj +++ b/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 2DDEF0101F84BF7B00DBDF73 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2DDEF00F1F84BF7B00DBDF73 /* Images.xcassets */; }; 383889DA23A7398900D06C3E /* RCTConvert_UIColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 383889D923A7398900D06C3E /* RCTConvert_UIColorTests.m */; }; 3D2AFAF51D646CF80089D1A3 /* legacy_image@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D2AFAF41D646CF80089D1A3 /* legacy_image@2x.png */; }; + 563FE88552B2EA3FEE3C081B /* libPods-RNTesterUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FBD65C9CC99BC5EB88AA5ADF /* libPods-RNTesterUnitTests.a */; }; 5C60EB1C226440DB0018C04F /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C60EB1B226440DB0018C04F /* AppDelegate.mm */; }; 8145AE06241172D900A3F8DA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8145AE05241172D900A3F8DA /* LaunchScreen.storyboard */; }; 832F45BB2A8A6E1F0097B4E6 /* SwiftTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832F45BA2A8A6E1F0097B4E6 /* SwiftTest.swift */; }; @@ -89,6 +90,7 @@ 359825B9A5AE4A3F4AA612DD /* Pods-RNTesterUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterUnitTests.debug.xcconfig"; path = "Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests.debug.xcconfig"; sourceTree = ""; }; 383889D923A7398900D06C3E /* RCTConvert_UIColorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTConvert_UIColorTests.m; sourceTree = ""; }; 3D2AFAF41D646CF80089D1A3 /* legacy_image@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "legacy_image@2x.png"; path = "RNTester/legacy_image@2x.png"; sourceTree = ""; }; + 42588C9784836C074AC45A89 /* libPods-RNTesterIntegrationTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTesterIntegrationTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5C60EB1B226440DB0018C04F /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = RNTester/AppDelegate.mm; sourceTree = ""; }; 66C3087F2D5BF762FE9E6422 /* Pods-RNTesterIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests.debug.xcconfig"; sourceTree = ""; }; 77E101C7D8E22A8E70EE76DF /* libPods-RNTesterIntegrationTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTesterIntegrationTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; diff --git a/packages/rn-tester/js/examples/Alert/AlertExample.js b/packages/rn-tester/js/examples/Alert/AlertExample.js index 895c9529faddbd..9ed172a175e4f6 100644 --- a/packages/rn-tester/js/examples/Alert/AlertExample.js +++ b/packages/rn-tester/js/examples/Alert/AlertExample.js @@ -35,7 +35,10 @@ const AlertWithDefaultButton = () => { Alert.alert('Alert', alertMessage)}> + onPress={() => { + debugger; + Alert.alert('Alert', alertMessage); + }}> Tap to view alert diff --git a/packages/rn-tester/stderr b/packages/rn-tester/stderr new file mode 100644 index 00000000000000..ecb867975cd6c0 --- /dev/null +++ b/packages/rn-tester/stderr @@ -0,0 +1,302 @@ +Tue, 20 Feb 2024 12:31:03 GMT Metro:FileMap Cache loaded (1 clock(s)) +Tue, 20 Feb 2024 12:31:03 GMT Metro:Watcher Beginning crawl with "watchman". +Tue, 20 Feb 2024 12:31:03 GMT Metro:Watcher Crawler "watchman" returned 0 added/modified, 0 removed, 1 clock(s). +Tue, 20 Feb 2024 12:31:03 GMT Metro:FileMap Visiting 0 added/modified files. +Tue, 20 Feb 2024 12:31:03 GMT Metro:FileMap Finished mapping files (0 changes, 0 removed). +Tue, 20 Feb 2024 12:31:03 GMT Metro:Watcher Using watcher: watchman +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/rn-tester +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/node_modules +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/community-cli-plugin +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/assets +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/dev-middleware +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/normalize-color +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/polyfills +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/react-native +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-node_modules-fd7b896fe8c76acfaeac3c8c74bdd224 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-dev-middleware-13991765a3c88d28b1dd321ee593a7b2 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-community-cli-plugin-6fa9c1b768f6c27f95ee8dd0c9d0763c +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received watch-project response: xplat/js/react-native-github/packages/virtualized-lists +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-assets-055558b25b31fe6943580b29d76b1ae1 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received clock response: c:1708425580:1404:531818194386812929:913037 +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-normalize-color-c2192b3c17965483cf169934fc6ab63e +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-polyfills-8d84a9e12ef951d9a85527c77d36d82d +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-react-native-a4413e32b37529ed7119d80aef02572b +Tue, 20 Feb 2024 12:31:03 GMT Metro:WatchmanWatcher Received subscribe response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-virtualized-lists-43c2cf6c0414defc675f1af4f45fee0b +Tue, 20 Feb 2024 12:31:05 GMT Metro:Server Handling request: http://localhost:8081/js/RNTesterApp.ios.bundle?platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment +Tue, 20 Feb 2024 12:31:06 GMT Metro:DeltaCalculator Calculating delta (reset: true, shallow: false) +Tue, 20 Feb 2024 12:31:09 GMT Metro:DeltaCalculator Calculating delta (reset: true, shallow: false) +Tue, 20 Feb 2024 12:31:09 GMT Metro:InspectorProxy Got new connection: name=iPhone 15 Pro, app=com.meta.RNTester.localDevelopment, device=02bc6e7c5a7857fd8c0ec13cf1bee1d6efe88e48 +Tue, 20 Feb 2024 12:31:09 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:31:09 GMT Metro:Server Handling request: http://localhost:8081/assets/js/assets/search-icon.png?platform=ios&hash=fcabc066ba15fb752b755a2b89913b51 +Tue, 20 Feb 2024 12:31:09 GMT Metro:Server Handling request: http://localhost:8081/assets/js/assets/bottom-nav-components-icon-active.png?platform=ios&hash=40b81f6ff9fc225d33fa501761a0cccd +Tue, 20 Feb 2024 12:31:09 GMT Metro:Server Handling request: http://localhost:8081/assets/js/assets/bottom-nav-apis-icon-inactive.png?platform=ios&hash=875572ed8afafed87f73c4c597b11835 +Tue, 20 Feb 2024 12:31:10 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device), getPages ping has changed: {"event":"getPages","payload":[{"app":"com.meta.RNTester.localDevelopment","id":"5","title":"Hermes React Native","vm":"Hermes"}]} +Tue, 20 Feb 2024 12:31:10 GMT Metro:InspectorProxy React Native page updated to 5 +Tue, 20 Feb 2024 12:31:10 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 2, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:10 GMT Metro:WatchmanWatcher Handling change to: stdout (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:10 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:12 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:12 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy Got new debugger connection for page -1 of iPhone 15 Pro +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"connect","payload":{"pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":1,"method":"Network.enable","params":{"maxPostDataSize":65536}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":1,\"method\":\"Network.enable\",\"params\":{\"maxPostDataSize\":65536}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":2,"method":"Network.setAttachDebugStack","params":{"enabled":true}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":2,\"method\":\"Network.setAttachDebugStack\",\"params\":{\"enabled\":true}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":3,"method":"Page.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":3,\"method\":\"Page.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":4,"method":"Page.getResourceTree","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":4,\"method\":\"Page.getResourceTree\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":5,"method":"Runtime.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":5,\"method\":\"Runtime.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":6,"method":"DOM.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":6,\"method\":\"DOM.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":7,"method":"CSS.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":7,\"method\":\"CSS.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":8,"method":"Debugger.enable","params":{"maxScriptsCacheSize":10000000}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":8,\"method\":\"Debugger.enable\",\"params\":{\"maxScriptsCacheSize\":10000000}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":9,"method":"Debugger.setPauseOnExceptions","params":{"state":"none"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":9,\"method\":\"Debugger.setPauseOnExceptions\",\"params\":{\"state\":\"none\"}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":10,"method":"Debugger.setAsyncCallStackDepth","params":{"maxDepth":32}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":10,\"method\":\"Debugger.setAsyncCallStackDepth\",\"params\":{\"maxDepth\":32}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":11,"method":"Overlay.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":11,\"method\":\"Overlay.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":12,"method":"Overlay.setShowViewportSizeOnResize","params":{"show":true}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":12,\"method\":\"Overlay.setShowViewportSizeOnResize\",\"params\":{\"show\":true}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":13,"method":"Profiler.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":13,\"method\":\"Profiler.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":14,"method":"Log.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":14,\"method\":\"Log.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":15,"method":"Log.startViolationsReport","params":{"config":[{"name":"longTask","threshold":200},{"name":"longLayout","threshold":30},{"name":"blockedEvent","threshold":100},{"name":"blockedParser","threshold":-1},{"name":"handler","threshold":150},{"name":"recurringHandler","threshold":50},{"name":"discouragedAPIUse","threshold":-1}]}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":15,\"method\":\"Log.startViolationsReport\",\"params\":{\"config\":[{\"name\":\"longTask\",\"threshold\":200},{\"name\":\"longLayout\",\"threshold\":30},{\"name\":\"blockedEvent\",\"threshold\":100},{\"name\":\"blockedParser\",\"threshold\":-1},{\"name\":\"handler\",\"threshold\":150},{\"name\":\"recurringHandler\",\"threshold\":50},{\"name\":\"discouragedAPIUse\",\"threshold\":-1}]}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":16,"method":"Emulation.setEmulatedMedia","params":{"media":"","features":[{"name":"color-gamut","value":""},{"name":"prefers-color-scheme","value":""},{"name":"forced-colors","value":""},{"name":"prefers-contrast","value":""},{"name":"prefers-reduced-data","value":""},{"name":"prefers-reduced-motion","value":""}]}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":16,\"method\":\"Emulation.setEmulatedMedia\",\"params\":{\"media\":\"\",\"features\":[{\"name\":\"color-gamut\",\"value\":\"\"},{\"name\":\"prefers-color-scheme\",\"value\":\"\"},{\"name\":\"forced-colors\",\"value\":\"\"},{\"name\":\"prefers-contrast\",\"value\":\"\"},{\"name\":\"prefers-reduced-data\",\"value\":\"\"},{\"name\":\"prefers-reduced-motion\",\"value\":\"\"}]}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":17,"method":"Emulation.setEmulatedVisionDeficiency","params":{"type":"none"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":17,\"method\":\"Emulation.setEmulatedVisionDeficiency\",\"params\":{\"type\":\"none\"}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":18,"method":"Audits.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":18,\"method\":\"Audits.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":19,"method":"ServiceWorker.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":19,\"method\":\"ServiceWorker.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":20,"method":"Inspector.enable","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":20,\"method\":\"Inspector.enable\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":21,"method":"Target.setAutoAttach","params":{"autoAttach":true,"waitForDebuggerOnStart":true,"flatten":true}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":21,\"method\":\"Target.setAutoAttach\",\"params\":{\"autoAttach\":true,\"waitForDebuggerOnStart\":true,\"flatten\":true}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":22,"method":"Target.setDiscoverTargets","params":{"discover":true}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":22,\"method\":\"Target.setDiscoverTargets\",\"params\":{\"discover\":true}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":23,"method":"Target.setRemoteLocations","params":{"locations":[{"host":"localhost","port":9229}]}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":23,\"method\":\"Target.setRemoteLocations\",\"params\":{\"locations\":[{\"host\":\"localhost\",\"port\":9229}]}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":24,"method":"Network.clearAcceptedEncodingsOverride","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":24,\"method\":\"Network.clearAcceptedEncodingsOverride\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":25,"method":"Debugger.setBlackboxPatterns","params":{"patterns":[]}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":25,\"method\":\"Debugger.setBlackboxPatterns\",\"params\":{\"patterns\":[]}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":26,"method":"DOMDebugger.setBreakOnCSPViolation","params":{"violationTypes":[]}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":26,\"method\":\"DOMDebugger.setBreakOnCSPViolation\",\"params\":{\"violationTypes\":[]}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":27,"method":"Runtime.runIfWaitingForDebugger","params":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":27,\"method\":\"Runtime.runIfWaitingForDebugger\",\"params\":{}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":28,"method":"Page.setAdBlockingEnabled","params":{"enabled":false}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":28,\"method\":\"Page.setAdBlockingEnabled\",\"params\":{\"enabled\":false}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":29,"method":"Emulation.setFocusEmulationEnabled","params":{"enabled":false}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":29,\"method\":\"Emulation.setFocusEmulationEnabled\",\"params\":{\"enabled\":false}}"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Network.enable wasn't found\"},\"id\":1}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Network.setAttachDebugStack wasn't found\"},\"id\":2}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Page.enable wasn't found\"},\"id\":3}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Page.getResourceTree wasn't found\"},\"id\":4}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"id\":5,\"result\":{}}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"id\":1,\"name\":\"hermes\",\"origin\":\"\"}}}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Runtime.consoleAPICalled\",\"params\":{\"args\":[{\"type\":\"string\",\"value\":\"Running \"}],\"executionContextId\":1,\"timestamp\":1708432269579.163,\"type\":\"log\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"DOM.enable wasn't found\"},\"id\":6}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"CSS.enable wasn't found\"},\"id\":7}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"id\":8,\"result\":{}}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endColumn\":0,\"endLine\":0,\"executionContextId\":1,\"hash\":\"\",\"scriptId\":\"3\",\"sourceMapURL\":\"http:\\\/\\\/localhost:8081\\\/js\\\/RNTesterApp.ios.map?platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment\",\"startColumn\":0,\"startLine\":0,\"url\":\"http:\\\/\\\/localhost:8081\\\/js\\\/RNTesterApp.ios.bundle\\\/\\\/&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"id\":9,\"result\":{}}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Debugger.setAsyncCallStackDepth wasn't found\"},\"id\":10}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Overlay.enable wasn't found\"},\"id\":11}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Overlay.setShowViewportSizeOnResize wasn't found\"},\"id\":12}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Profiler.enable wasn't found\"},\"id\":13}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Log.enable wasn't found\"},\"id\":14}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Log.startViolationsReport wasn't found\"},\"id\":15}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Emulation.setEmulatedMedia wasn't found\"},\"id\":16}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Emulation.setEmulatedVisionDeficiency wasn't found\"},\"id\":17}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Audits.enable wasn't found\"},\"id\":18}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"ServiceWorker.enable wasn't found\"},\"id\":19}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Inspector.enable wasn't found\"},\"id\":20}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Target.setAutoAttach wasn't found\"},\"id\":21}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Target.setDiscoverTargets wasn't found\"},\"id\":22}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Target.setRemoteLocations wasn't found\"},\"id\":23}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Network.clearAcceptedEncodingsOverride wasn't found\"},\"id\":24}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Network.enable wasn't found"},"id":1} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Network.setAttachDebugStack wasn't found"},"id":2} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Page.enable wasn't found"},"id":3} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Page.getResourceTree wasn't found"},"id":4} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"id":5,"result":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Runtime.executionContextCreated","params":{"context":{"id":1,"name":"hermes","origin":""}}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Runtime.consoleAPICalled","params":{"args":[{"type":"string","value":"Running "}],"executionContextId":1,"timestamp":1708432269579.163,"type":"log"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"DOM.enable wasn't found"},"id":6} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"CSS.enable wasn't found"},"id":7} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"id":8,"result":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"id":9,"result":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Debugger.setAsyncCallStackDepth wasn't found"},"id":10} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Overlay.enable wasn't found"},"id":11} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Overlay.setShowViewportSizeOnResize wasn't found"},"id":12} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Profiler.enable wasn't found"},"id":13} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Log.enable wasn't found"},"id":14} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Log.startViolationsReport wasn't found"},"id":15} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Emulation.setEmulatedMedia wasn't found"},"id":16} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Emulation.setEmulatedVisionDeficiency wasn't found"},"id":17} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Audits.enable wasn't found"},"id":18} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"ServiceWorker.enable wasn't found"},"id":19} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Inspector.enable wasn't found"},"id":20} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Target.setAutoAttach wasn't found"},"id":21} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Target.setDiscoverTargets wasn't found"},"id":22} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Target.setRemoteLocations wasn't found"},"id":23} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Network.clearAcceptedEncodingsOverride wasn't found"},"id":24} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Debugger.setBlackboxPatterns wasn't found\"},\"id\":25}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"DOMDebugger.setBreakOnCSPViolation wasn't found\"},\"id\":26}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Debugger.setBlackboxPatterns wasn't found"},"id":25} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"DOMDebugger.setBreakOnCSPViolation wasn't found"},"id":26} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"id\":27,\"result\":{}}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Page.setAdBlockingEnabled wasn't found\"},\"id\":28}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Emulation.setFocusEmulationEnabled wasn't found\"},\"id\":29}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"id":27,"result":{}} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Page.setAdBlockingEnabled wasn't found"},"id":28} +Tue, 20 Feb 2024 12:31:13 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Emulation.setFocusEmulationEnabled wasn't found"},"id":29} +Tue, 20 Feb 2024 12:31:13 GMT Metro:Server Handling request: http://localhost:8081/js/RNTesterApp.ios.map?platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment +Tue, 20 Feb 2024 12:31:13 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:31:14 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:14 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:14 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Debugger.scriptParsed","params":{"endColumn":0,"endLine":0,"executionContextId":1,"hash":"","scriptId":"3","sourceMapURL":"data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9fcHJlbHVkZV9fIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL21ldHJvLXJ1bnRpbWUvc3JjL3BvbHlmaWxscy9yZXF1aXJlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcG9seWZpbGxzL2NvbnNvbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9wb2x5ZmlsbHMvZXJyb3ItZ3VhcmQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvUk5UZXN0ZXJBcHAuaW9zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1ByaW1pdGl2ZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvY29tcG9uZW50cy9STlRlc3Rlck1vZHVsZUNvbnRhaW5lci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9jb21wb25lbnRzL1JOVFByZXNzYWJsZVJvdy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9jb21wb25lbnRzL1JOVGVzdGVyQ29tcG9uZW50VGl0bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL2luZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3JlZ2lzdGVyQ2FsbGFibGVNb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0JhdGNoZWRCcmlkZ2UvQmF0Y2hlZEJyaWRnZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQmF0Y2hlZEJyaWRnZS9NZXNzYWdlUXVldWUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy93YXJuT25jZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL3N0cmluZ2lmeVNhZmUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9kZWVwRnJlZXplQW5kVGhyb3dPbk11dGF0aW9uSW5EZXYuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1BlcmZvcm1hbmNlL1N5c3RyYWNlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy92ZW5kb3IvY29yZS9FcnJvclV0aWxzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL0FjY2Vzc2liaWxpdHlJbmZvL0FjY2Vzc2liaWxpdHlJbmZvLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9FdmVudEVtaXR0ZXIvUkNURGV2aWNlRXZlbnRFbWl0dGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc3VwZXJQcm9wQmFzZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvdmVuZG9yL2VtaXR0ZXIvRXZlbnRFbWl0dGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NQcml2YXRlRmllbGRMb29zZUJhc2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc1ByaXZhdGVGaWVsZExvb3NlS2V5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvUGxhdGZvcm0uaW9zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvTmF0aXZlUGxhdGZvcm1Db25zdGFudHNJT1MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVQbGF0Zm9ybUNvbnN0YW50c0lPUy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQmF0Y2hlZEJyaWRnZS9OYXRpdmVNb2R1bGVzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9kZWZpbmVMYXp5T2JqZWN0UHJvcGVydHkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvQWNjZXNzaWJpbGl0eUluZm8vbGVnYWN5U2VuZEFjY2Vzc2liaWxpdHlFdmVudC5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvQWNjZXNzaWJpbGl0eUluZm8vTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9BY2Nlc3NpYmlsaXR5SW5mby9OYXRpdmVBY2Nlc3NpYmlsaXR5SW5mby5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9SZW5kZXJlclByb3h5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9SZW5kZXJlckltcGxlbWVudGF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdEZhYnJpYy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVuZGVyZXIvaW1wbGVtZW50YXRpb25zL1JlYWN0RmFicmljLWRldi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3RQcml2YXRlL1JlYWN0TmF0aXZlUHJpdmF0ZUluaXRpYWxpemVDb3JlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL0luaXRpYWxpemVDb3JlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwR2xvYmFscy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9jb3JlL3NldFVwRE9NLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL2dlb21ldHJ5L0RPTVJlY3QuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vZ2VvbWV0cnkvRE9NUmVjdFJlYWRPbmx5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwUGVyZm9ybWFuY2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9wZXJmb3JtYW5jZS9OYXRpdmVQZXJmb3JtYW5jZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvcGVyZm9ybWFuY2UvRXZlbnRDb3VudHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9wZXJmb3JtYW5jZS9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VPYnNlcnZlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlRXZlbnRUaW1pbmcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZUVudHJ5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvcGVyZm9ybWFuY2UvUmF3UGVyZm9ybWFuY2VFbnRyeS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL3BlcmZvcm1hbmNlL01lbW9yeUluZm8uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9wZXJmb3JtYW5jZS9SZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvc2V0VXBFcnJvckhhbmRsaW5nLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL0V4Y2VwdGlvbnNNYW5hZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvd3JhcE5hdGl2ZVN1cGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXNOYXRpdmVGdW5jdGlvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NvbnN0cnVjdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9EZXZ0b29scy9wYXJzZUVycm9yU3RhY2suanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1wYXJzZXIvZGlzdC9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL0RldnRvb2xzL3BhcnNlSGVybWVzU3RhY2suanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9Mb2dCb3guanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9SQ1RMb2cuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9EYXRhL0xvZ0JveERhdGEuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05hdGl2ZU1vZHVsZXMvc3BlY3MvTmF0aXZlTG9nQm94LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlTG9nQm94LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvRGF0YS9Mb2dCb3hMb2cuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9EYXRhL0xvZ0JveFN5bWJvbGljYXRpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvRGV2dG9vbHMvc3ltYm9saWNhdGVTdGFja1RyYWNlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9EZXZ0b29scy9nZXREZXZTZXJ2ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05hdGl2ZU1vZHVsZXMvc3BlY3MvTmF0aXZlU291cmNlQ29kZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVNvdXJjZUNvZGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05ldHdvcmsvZmV0Y2guanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2Rpc3QvZmV0Y2gudW1kLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvRGF0YS9wYXJzZUxvZ0JveExvZy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVVRGU2VxdWVuY2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9OYXRpdmVFeGNlcHRpb25zTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUV4Y2VwdGlvbnNNYW5hZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3BvbHlmaWxsUHJvbWlzZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvcHJvbWlzZVJlamVjdGlvblRyYWNraW5nT3B0aW9ucy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2luZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvY29sb3ItbmFtZS9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L3JvdXRlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L2J1aWxkL3BsdWdpbnMvQXN5bW1ldHJpY01hdGNoZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvY29sbGVjdGlvbnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9Db252ZXJ0QW5zaS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL0RPTUNvbGxlY3Rpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9ET01FbGVtZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L2J1aWxkL3BsdWdpbnMvbGliL21hcmt1cC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL2xpYi9lc2NhcGVIVE1MLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L2J1aWxkL3BsdWdpbnMvSW1tdXRhYmxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L2J1aWxkL3BsdWdpbnMvUmVhY3RFbGVtZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9SZWFjdFRlc3RDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9Qb2x5ZmlsbEZ1bmN0aW9ucy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUHJvbWlzZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9wcm9taXNlL3NldGltbWVkaWF0ZS9maW5hbGx5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL3Byb21pc2Uvc2V0aW1tZWRpYXRlL2NvcmUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvcHJvbWlzZS9zZXRpbW1lZGlhdGUvcmVqZWN0aW9uLXRyYWNraW5nLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL3Byb21pc2Uvc2V0aW1tZWRpYXRlL2VzNi1leHRlbnNpb25zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwUmVnZW5lcmF0b3JSdW50aW1lLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvRmVhdHVyZURldGVjdGlvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvc2V0VXBUaW1lcnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvVGltZXJzL0pTVGltZXJzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL1RpbWVycy9OYXRpdmVUaW1pbmcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVUaW1pbmcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvVGltZXJzL2ltbWVkaWF0ZVNoaW0uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvVGltZXJzL3F1ZXVlTWljcm90YXNrLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwWEhSLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9OZXR3b3JrL1hNTEh0dHBSZXF1ZXN0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL2V2ZW50LXRhcmdldC1zaGltL2Rpc3QvZXZlbnQtdGFyZ2V0LXNoaW0uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0Jsb2IvQmxvYk1hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0Jsb2IvTmF0aXZlQmxvYk1vZHVsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUJsb2JNb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0Jsb2IvQmxvYi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQmxvYi9CbG9iUmVnaXN0cnkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9HbG9iYWxQZXJmb3JtYW5jZUxvZ2dlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL2NyZWF0ZVBlcmZvcm1hbmNlTG9nZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvaW5mb0xvZy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05ldHdvcmsvUkNUTmV0d29ya2luZy5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05ldHdvcmsvY29udmVydFJlcXVlc3RCb2R5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9OZXR3b3JrL0Zvcm1EYXRhLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvYmluYXJ5VG9CYXNlNjQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05ldHdvcmsvTmF0aXZlTmV0d29ya2luZ0lPUy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZU5ldHdvcmtpbmdJT1MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1dlYlNvY2tldC9XZWJTb2NrZXQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0V2ZW50RW1pdHRlci9OYXRpdmVFdmVudEVtaXR0ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1dlYlNvY2tldC9OYXRpdmVXZWJTb2NrZXRNb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVXZWJTb2NrZXRNb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1dlYlNvY2tldC9XZWJTb2NrZXRFdmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQmxvYi9GaWxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9CbG9iL0ZpbGVSZWFkZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0Jsb2IvTmF0aXZlRmlsZVJlYWRlck1vZHVsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUZpbGVSZWFkZXJNb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0Jsb2IvVVJMLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9hYm9ydC1jb250cm9sbGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwQWxlcnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FsZXJ0L0FsZXJ0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbGVydC9SQ1RBbGVydE1hbmFnZXIuaW9zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbGVydC9OYXRpdmVBbGVydE1hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBbGVydE1hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05hdGl2ZU1vZHVsZXMvc3BlY3MvTmF0aXZlRGlhbG9nTWFuYWdlckFuZHJvaWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9zZXRVcE5hdmlnYXRvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9zZXRVcEJhdGNoZWRCcmlkZ2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0hlYXBDYXB0dXJlL0hlYXBDYXB0dXJlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9IZWFwQ2FwdHVyZS9OYXRpdmVKU0NIZWFwQ2FwdHVyZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUpTQ0hlYXBDYXB0dXJlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9QZXJmb3JtYW5jZS9TYW1wbGluZ1Byb2ZpbGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9QZXJmb3JtYW5jZS9OYXRpdmVKU0NTYW1wbGluZ1Byb2ZpbGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSlNDU2FtcGxpbmdQcm9maWxlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvRXZlbnRFbWl0dGVyL1JDVE5hdGl2ZUFwcEV2ZW50RW1pdHRlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL0hNUkNsaWVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVSZWRCb3guanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVSZWRCb3guanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9Mb2FkaW5nVmlldy5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L25vcm1hbGl6ZUNvbG9yLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvbm9ybWFsaXplLWNvbG9yL2luZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L1BsYXRmb3JtQ29sb3JWYWx1ZVR5cGVzLmlvcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL0FwcGVhcmFuY2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9OYXRpdmVBcHBlYXJhbmNlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQXBwZWFyYW5jZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL0RlYnVnRW52aXJvbm1lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9OYXRpdmVEZXZMb2FkaW5nVmlldy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZURldkxvYWRpbmdWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL21ldHJvLXJ1bnRpbWUvc3JjL21vZHVsZXMvSE1SQ2xpZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL21ldHJvLXJ1bnRpbWUvc3JjL21vZHVsZXMvdmVuZG9yL2V2ZW50ZW1pdHRlcjMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9EZXZTZXR0aW5ncy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVEZXZTZXR0aW5ncy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZURldlNldHRpbmdzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvSE1SQ2xpZW50UHJvZFNoaW0uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvc2V0VXBTZWdtZW50RmV0Y2hlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9TZWdtZW50RmV0Y2hlci9OYXRpdmVTZWdtZW50RmV0Y2hlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVNlZ21lbnRGZXRjaGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL2NoZWNrTmF0aXZlVmVyc2lvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9SZWFjdE5hdGl2ZVZlcnNpb25DaGVjay5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9SZWFjdE5hdGl2ZVZlcnNpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvc2V0VXBEZXZlbG9wZXJUb29scy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9zZXRVcFJlYWN0RGV2VG9vbHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvcmVhY3QtZGV2dG9vbHMtY29yZS9kaXN0L2JhY2tlbmQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FwcFN0YXRlL0FwcFN0YXRlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvbG9nRXJyb3IuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FwcFN0YXRlL05hdGl2ZUFwcFN0YXRlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQXBwU3RhdGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVmlldy9SZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvU3R5bGVTaGVldC9wcm9jZXNzQXNwZWN0UmF0aW8uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvcHJvY2Vzc0ZvbnRWYXJpYW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L3Byb2Nlc3NUcmFuc2Zvcm0uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvU3R5bGVTaGVldC9wcm9jZXNzVHJhbnNmb3JtT3JpZ2luLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvZGlmZmVyL3NpemVzRGlmZmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9EZXZUb29sc1NldHRpbmdzL0RldlRvb2xzU2V0dGluZ3NNYW5hZ2VyLmlvcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvU2V0dGluZ3MvU2V0dGluZ3MuaW9zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TZXR0aW5ncy9OYXRpdmVTZXR0aW5nc01hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTZXR0aW5nc01hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvZmxhdHRlblN0eWxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9KU0luc3BlY3Rvci9KU0luc3BlY3Rvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSlNJbnNwZWN0b3IvTmV0d29ya0FnZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9KU0luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9zZXRVcFJlYWN0UmVmcmVzaC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL25vZGVfbW9kdWxlcy9yZWFjdC1yZWZyZXNoL3J1bnRpbWUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvcmVhY3QtcmVmcmVzaC9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZnJlc2gvY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9EZXZ0b29scy9sb2FkQnVuZGxlRnJvbVNlcnZlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvQXBwUmVnaXN0cnkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0J1Z1JlcG9ydGluZy9CdWdSZXBvcnRpbmcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0J1Z1JlcG9ydGluZy9OYXRpdmVCdWdSZXBvcnRpbmcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVCdWdSZXBvcnRpbmcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0J1Z1JlcG9ydGluZy9kdW1wUmVhY3RUcmVlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvU2NlbmVUcmFja2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9IZWFkbGVzc0pzVGFza0Vycm9yLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9OYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0TmF0aXZlL3JlbmRlckFwcGxpY2F0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvUGVyZm9ybWFuY2VMb2dnZXJDb250ZXh0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9BcHBDb250YWluZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0TmF0aXZlL0FwcENvbnRhaW5lci1kZXYuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVmlldy9WaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UZXh0L1RleHRBbmNlc3Rvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05hdGl2ZUNvbXBvbmVudC9OYXRpdmVDb21wb25lbnRSZWdpc3RyeS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvVUlNYW5hZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL251bGx0aHJvd3MvbnVsbHRocm93cy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvQnJpZGdlbGVzc1VJTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvRmFicmljVUlNYW5hZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9OYXRpdmVDb21wb25lbnQvTmF0aXZlQ29tcG9uZW50UmVnaXN0cnlVbnN0YWJsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUGFwZXJVSU1hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0TmF0aXZlL05hdGl2ZVVJTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVVJTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvVUlNYW5hZ2VyUHJvcGVydGllcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL2RpZmZlci9tYXRyaWNlc0RpZmZlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL2RpZmZlci9wb2ludHNEaWZmZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9kaWZmZXIvaW5zZXRzRGlmZmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvckFycmF5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbWFnZS9yZXNvbHZlQXNzZXRTb3VyY2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9hc3NldHMvcmVnaXN0cnkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ltYWdlL0Fzc2V0U291cmNlUmVzb2x2ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ltYWdlL0Fzc2V0VXRpbHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9QaXhlbFJhdGlvLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvRGltZW5zaW9ucy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL05hdGl2ZURldmljZUluZm8uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVEZXZpY2VJbmZvLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvYXNzZXRzL3BhdGgtc3VwcG9ydC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy92ZXJpZnlDb21wb25lbnRBdHRyaWJ1dGVFcXVpdmFsZW5jZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmF0aXZlQ29tcG9uZW50L1BsYXRmb3JtQmFzZVZpZXdDb25maWcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05hdGl2ZUNvbXBvbmVudC9CYXNlVmlld0NvbmZpZy5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05hdGl2ZUNvbXBvbmVudC9WaWV3Q29uZmlnSWdub3JlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9OYXRpdmVDb21wb25lbnQvU3RhdGljVmlld0NvbmZpZ1ZhbGlkYXRvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmF0aXZlQ29tcG9uZW50L1ZpZXdDb25maWcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9jb2RlZ2VuTmF0aXZlQ29tbWFuZHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0RlYnVnZ2luZy9EZWJ1Z2dpbmdPdmVybGF5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0RlYnVnZ2luZy9EZWJ1Z2dpbmdPdmVybGF5TmF0aXZlQ29tcG9uZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0TmF0aXZlL3JlcXVpcmVOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL2NyZWF0ZVJlYWN0TmF0aXZlQ29tcG9uZW50Q2xhc3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0UHJpdmF0ZS9SZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0V2ZW50RW1pdHRlci9SQ1RFdmVudEVtaXR0ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dFN0YXRlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1RleHRJbnB1dC9SQ1RTaW5nZWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVGV4dElucHV0L1JDVFRleHRJbnB1dFZpZXdDb25maWcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVGV4dElucHV0L0FuZHJvaWRUZXh0SW5wdXROYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9kaWZmZXIvZGVlcERpZmZlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29yZS9SZWFjdEZpYmVyRXJyb3JEaWFsb2cuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvUmF3RXZlbnRFbWl0dGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9FdmVudHMvQ3VzdG9tRXZlbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0V2ZW50cy9FdmVudFBvbHlmaWxsLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlL1JlYWN0TmF0aXZlQXR0cmlidXRlUGF5bG9hZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL2ZlYXR1cmVmbGFncy9SZWFjdE5hdGl2ZUZlYXR1cmVGbGFncy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9mZWF0dXJlZmxhZ3MvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NCYXNlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL2ZlYXR1cmVmbGFncy9OYXRpdmVSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFjdE5hdGl2ZUVsZW1lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0TmF0aXZlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2Uvd2FybkZvclN0eWxlUHJvcHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhZE9ubHlFbGVtZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL25vZGVzL1JlYWRPbmx5Tm9kZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9vbGRzdHlsZWNvbGxlY3Rpb25zL05vZGVMaXN0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL29sZHN0eWxlY29sbGVjdGlvbnMvQXJyYXlMaWtlVXRpbHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vb2xkc3R5bGVjb2xsZWN0aW9ucy9IVE1MQ29sbGVjdGlvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy91dGlsaXRpZXMvVHJhdmVyc2FsLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlL1JlYWN0RmFicmljSG9zdENvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFkT25seVRleHQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhZE9ubHlDaGFyYWN0ZXJEYXRhLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9EZWJ1Z2dpbmcvdXNlU3Vic2NyaWJlVG9EZWJ1Z2dpbmdPdmVybGF5UmVnaXN0cnkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0RlYnVnZ2luZy9EZWJ1Z2dpbmdPdmVybGF5UmVnaXN0cnkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0luc3BlY3Rvci9SZWFjdERldlRvb2xzT3ZlcmxheS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0luc3BlY3Rvci9FbGVtZW50Qm94LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnNwZWN0b3IvcmVzb2x2ZUJveFN0eWxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9JMThuTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvTmF0aXZlSTE4bk1hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVJMThuTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW5zcGVjdG9yL0JvcmRlckJveC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW5zcGVjdG9yL2dldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L0xvZ0JveE5vdGlmaWNhdGlvbkNvbnRhaW5lci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L1VJL0xvZ0JveE5vdGlmaWNhdGlvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW1hZ2UvSW1hZ2UuaW9zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbWFnZS9JbWFnZUFuYWx5dGljc1RhZ0NvbnRleHQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ltYWdlL0ltYWdlVmlld05hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW1hZ2UvTmF0aXZlSW1hZ2VMb2FkZXJJT1MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVJbWFnZUxvYWRlcklPUy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUm9vdFRhZy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW1hZ2UvSW1hZ2VTb3VyY2VVdGlscy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW1hZ2UvSW1hZ2VVdGlscy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW1hZ2UvSW1hZ2VJbmplY3Rpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy91c2VNZXJnZVJlZnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1RleHQvVGV4dC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUHJlc3NhYmlsaXR5L1ByZXNzYWJpbGl0eURlYnVnLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L1JlY3QuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1ByZXNzYWJpbGl0eS91c2VQcmVzc2FiaWxpdHkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1ByZXNzYWJpbGl0eS9QcmVzc2FiaWxpdHkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvU291bmQvU291bmRNYW5hZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1NvdW5kL05hdGl2ZVNvdW5kTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVNvdW5kTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUHJlc3NhYmlsaXR5L1ByZXNzYWJpbGl0eVBlcmZvcm1hbmNlRXZlbnRFbWl0dGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9QcmVzc2FiaWxpdHkvSG92ZXJTdGF0ZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVGV4dC9UZXh0TmF0aXZlQ29tcG9uZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvVUkvTG9nQm94QnV0dG9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1RvdWNoYWJsZS9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2suanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9VSS9Mb2dCb3hTdHlsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L1VJL0xvZ0JveE1lc3NhZ2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xpbmtpbmcvTGlua2luZy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGlua2luZy9OYXRpdmVJbnRlbnRBbmRyb2lkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSW50ZW50QW5kcm9pZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGlua2luZy9OYXRpdmVMaW5raW5nTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUxpbmtpbmdNYW5hZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvVUkvTG9nQm94SW1hZ2VzL2Nsb3NlLnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW1hZ2UvQXNzZXRSZWdpc3RyeS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW5zcGVjdG9yL0luc3BlY3Rvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0luc3BlY3Rvci9JbnNwZWN0b3JQYW5lbC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9TYWZlQXJlYVZpZXcvU2FmZUFyZWFWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1NhZmVBcmVhVmlldy9SQ1RTYWZlQXJlYVZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9SQ1RTYWZlQXJlYVZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9BbmltYXRlZEltcGxlbWVudGF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9hbmltYXRpb25zL0RlY2F5QW5pbWF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9OYXRpdmVBbmltYXRlZEhlbHBlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvTmF0aXZlQW5pbWF0ZWRNb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBbmltYXRlZE1vZHVsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvc2hvdWxkVXNlVHVyYm9BbmltYXRlZE1vZHVsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvTmF0aXZlQW5pbWF0ZWRUdXJib01vZHVsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUFuaW1hdGVkVHVyYm9Nb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL2FuaW1hdGlvbnMvQW5pbWF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZFByb3BzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZE5vZGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL25vZGVzL0FuaW1hdGVkT2JqZWN0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZFdpdGhDaGlsZHJlbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvbm9kZXMvQW5pbWF0ZWRTdHlsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvbm9kZXMvQW5pbWF0ZWRUcmFuc2Zvcm0uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL0FuaW1hdGVkRXZlbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL25vZGVzL0FuaW1hdGVkVmFsdWUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ludGVyYWN0aW9uL0ludGVyYWN0aW9uTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW50ZXJhY3Rpb24vVGFza1F1ZXVlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZEludGVycG9sYXRpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL0Vhc2luZy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvYmV6aWVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZFZhbHVlWFkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL2FuaW1hdGlvbnMvU3ByaW5nQW5pbWF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZENvbG9yLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9TcHJpbmdDb25maWcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL2FuaW1hdGlvbnMvVGltaW5nQW5pbWF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9jcmVhdGVBbmltYXRlZENvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvdXNlQW5pbWF0ZWRQcm9wcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL3VzZVJlZkVmZmVjdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlVXRpbHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL25vZGVzL0FuaW1hdGVkQWRkaXRpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL25vZGVzL0FuaW1hdGVkRGlmZkNsYW1wLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZERpdmlzaW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9ub2Rlcy9BbmltYXRlZE1vZHVsby5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvbm9kZXMvQW5pbWF0ZWRNdWx0aXBsaWNhdGlvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvbm9kZXMvQW5pbWF0ZWRTdWJ0cmFjdGlvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvbm9kZXMvQW5pbWF0ZWRUcmFja2luZy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW50ZXJhY3Rpb24vRnJhbWVSYXRlTG9nZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnRlcmFjdGlvbi9OYXRpdmVGcmFtZVJhdGVMb2dnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVGcmFtZVJhdGVMb2dnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvc3BsaXRMYXlvdXRQcm9wcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL2Rpc21pc3NLZXlib2FyZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9LZXlib2FyZC9LZXlib2FyZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGF5b3V0QW5pbWF0aW9uL0xheW91dEFuaW1hdGlvbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9LZXlib2FyZC9OYXRpdmVLZXlib2FyZE9ic2VydmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlS2V5Ym9hcmRPYnNlcnZlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9TY3JvbGxWaWV3L0FuZHJvaWRIb3Jpem9udGFsU2Nyb2xsQ29udGVudFZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9BbmRyb2lkSG9yaXpvbnRhbFNjcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1Njcm9sbFZpZXcvQW5kcm9pZEhvcml6b250YWxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1Njcm9sbFZpZXcvcHJvY2Vzc0RlY2VsZXJhdGlvblJhdGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvU2Nyb2xsVmlldy9TY3JvbGxDb250ZW50Vmlld05hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9TY3JvbGxWaWV3L1Njcm9sbFZpZXdDb21tYW5kcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9TY3JvbGxWaWV3L1Njcm9sbFZpZXdDb250ZXh0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1Njcm9sbFZpZXcvU2Nyb2xsVmlld05hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9TY3JvbGxWaWV3L1Njcm9sbFZpZXdTdGlja3lIZWFkZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL0FuaW1hdGVkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9BbmltYXRlZE1vY2suanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL2NvbXBvbmVudHMvQW5pbWF0ZWRGbGF0TGlzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGlzdHMvRmxhdExpc3QuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5janMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy92aXJ0dWFsaXplZC1saXN0cy9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3ZpcnR1YWxpemVkLWxpc3RzL0xpc3RzL1ZpcnR1YWxpemVVdGlscy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3ZpcnR1YWxpemVkLWxpc3RzL0xpc3RzL1ZpcnR1YWxpemVkTGlzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3ZpcnR1YWxpemVkLWxpc3RzL0ludGVyYWN0aW9uL0JhdGNoaW5hdG9yLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvdmlydHVhbGl6ZWQtbGlzdHMvVXRpbGl0aWVzL2NsYW1wLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvdmlydHVhbGl6ZWQtbGlzdHMvVXRpbGl0aWVzL2luZm9Mb2cuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy92aXJ0dWFsaXplZC1saXN0cy9MaXN0cy9DaGlsZExpc3RDb2xsZWN0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvdmlydHVhbGl6ZWQtbGlzdHMvTGlzdHMvRmlsbFJhdGVIZWxwZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy92aXJ0dWFsaXplZC1saXN0cy9MaXN0cy9MaXN0TWV0cmljc0FnZ3JlZ2F0b3IuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy92aXJ0dWFsaXplZC1saXN0cy9MaXN0cy9TdGF0ZVNhZmVQdXJlQ29tcG9uZW50LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvdmlydHVhbGl6ZWQtbGlzdHMvTGlzdHMvVmlld2FiaWxpdHlIZWxwZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy92aXJ0dWFsaXplZC1saXN0cy9MaXN0cy9WaXJ0dWFsaXplZExpc3RDZWxsUmVuZGVyZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy92aXJ0dWFsaXplZC1saXN0cy9MaXN0cy9WaXJ0dWFsaXplZExpc3RDb250ZXh0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvdmlydHVhbGl6ZWQtbGlzdHMvTGlzdHMvVmlydHVhbGl6ZWRMaXN0UHJvcHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy92aXJ0dWFsaXplZC1saXN0cy9MaXN0cy9DZWxsUmVuZGVyTWFzay5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3ZpcnR1YWxpemVkLWxpc3RzL0xpc3RzL1ZpcnR1YWxpemVkU2VjdGlvbkxpc3QuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL2NvbXBvbmVudHMvQW5pbWF0ZWRJbWFnZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvY29tcG9uZW50cy9BbmltYXRlZFNjcm9sbFZpZXcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvUmVmcmVzaENvbnRyb2wvUmVmcmVzaENvbnRyb2wuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvUmVmcmVzaENvbnRyb2wvQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dE5hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL0FuZHJvaWRTd2lwZVJlZnJlc2hMYXlvdXROYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvUmVmcmVzaENvbnRyb2wvUHVsbFRvUmVmcmVzaFZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9QdWxsVG9SZWZyZXNoVmlld05hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvY29tcG9uZW50cy9BbmltYXRlZFNlY3Rpb25MaXN0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9MaXN0cy9TZWN0aW9uTGlzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvY29tcG9uZW50cy9BbmltYXRlZFRleHQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL2NvbXBvbmVudHMvQW5pbWF0ZWRWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVuZGVyZXIvaW1wbGVtZW50YXRpb25zL1JlYWN0TmF0aXZlUmVuZGVyZXItZGV2LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5uYXRpdmUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIubmF0aXZlLnByb2R1Y3Rpb24ubWluLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLm5hdGl2ZS5kZXZlbG9wbWVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVuZGVyZXIvaW1wbGVtZW50YXRpb25zL1JlYWN0TmF0aXZlUmVuZGVyZXItcHJvZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW5zcGVjdG9yL0VsZW1lbnRQcm9wZXJ0aWVzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvbWFwV2l0aFNlcGFyYXRvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9Ub3VjaGFibGUvVG91Y2hhYmxlSGlnaGxpZ2h0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnNwZWN0b3IvU3R5bGVJbnNwZWN0b3IuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0luc3BlY3Rvci9Cb3hJbnNwZWN0b3IuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0luc3BlY3Rvci9QZXJmb3JtYW5jZU92ZXJsYXkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0luc3BlY3Rvci9OZXR3b3JrT3ZlcmxheS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmV0d29yay9YSFJJbnRlcmNlcHRvci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvV2ViU29ja2V0L1dlYlNvY2tldEludGVyY2VwdG9yLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9BcHBDb250YWluZXItcHJvZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvRGlzcGxheU1vZGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0TmF0aXZlL2dldENhY2hlZENvbXBvbmVudFdpdGhEZWJ1Z05hbWUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9CYWNrSGFuZGxlci5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVW5pbXBsZW1lbnRlZFZpZXdzL1VuaW1wbGVtZW50ZWRWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvTG9nQm94SW5zcGVjdG9yQ29udGFpbmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvVUkvTG9nQm94SW5zcGVjdG9yLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvVUkvTG9nQm94SW5zcGVjdG9yQ29kZUZyYW1lLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL0RldnRvb2xzL29wZW5GaWxlSW5FZGl0b3IuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9VSS9BbnNpSGlnaGxpZ2h0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvbm9kZV9tb2R1bGVzL2Fuc2VyL2xpYi9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L1VJL0xvZ0JveEluc3BlY3RvclNlY3Rpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9VSS9Mb2dCb3hJbnNwZWN0b3JGb290ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9VSS9Mb2dCb3hJbnNwZWN0b3JIZWFkZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvU3RhdHVzQmFyL1N0YXR1c0Jhci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9TdGF0dXNCYXIvTmF0aXZlU3RhdHVzQmFyTWFuYWdlckFuZHJvaWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTdGF0dXNCYXJNYW5hZ2VyQW5kcm9pZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9TdGF0dXNCYXIvTmF0aXZlU3RhdHVzQmFyTWFuYWdlcklPUy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVN0YXR1c0Jhck1hbmFnZXJJT1MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9VSS9Mb2dCb3hJbWFnZXMvY2hldnJvbi1sZWZ0LnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L1VJL0xvZ0JveEltYWdlcy9jaGV2cm9uLXJpZ2h0LnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L1VJL0xvZ0JveEluc3BlY3Rvck1lc3NhZ2VIZWFkZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xvZ0JveC9VSS9Mb2dCb3hJbnNwZWN0b3JSZWFjdEZyYW1lcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L1VJL0xvZ0JveEluc3BlY3RvclN0YWNrRnJhbWVzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvVUkvTG9nQm94SW5zcGVjdG9yU291cmNlTWFwU3RhdHVzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvVUkvTG9nQm94SW1hZ2VzL2FsZXJ0LXRyaWFuZ2xlLnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTG9nQm94L1VJL0xvZ0JveEltYWdlcy9sb2FkZXIucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Mb2dCb3gvVUkvTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVuZGVyZXIvaW1wbGVtZW50YXRpb25zL1JlYWN0RmFicmljLXByb2QuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvQWN0aXZpdHlJbmRpY2F0b3IvQWN0aXZpdHlJbmRpY2F0b3IuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvUHJvZ3Jlc3NCYXJBbmRyb2lkL1Byb2dyZXNzQmFyQW5kcm9pZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9BY3Rpdml0eUluZGljYXRvci9BY3Rpdml0eUluZGljYXRvclZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9BY3Rpdml0eUluZGljYXRvclZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvQnV0dG9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1RvdWNoYWJsZS9Ub3VjaGFibGVOYXRpdmVGZWVkYmFjay5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9Ub3VjaGFibGUvVG91Y2hhYmxlT3BhY2l0eS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9EcmF3ZXJBbmRyb2lkL0RyYXdlckxheW91dEFuZHJvaWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ltYWdlL0ltYWdlQmFja2dyb3VuZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9UZXh0SW5wdXQvSW5wdXRBY2Nlc3NvcnlWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1RleHRJbnB1dC9SQ1RJbnB1dEFjY2Vzc29yeVZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9SQ1RJbnB1dEFjY2Vzc29yeVZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvS2V5Ym9hcmQvS2V5Ym9hcmRBdm9pZGluZ1ZpZXcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvUG9wdXBNZW51QW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Nb2RhbC9Nb2RhbC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTW9kYWwvTW9kYWxJbmplY3Rpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL01vZGFsL05hdGl2ZU1vZGFsTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZU1vZGFsTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTW9kYWwvUkNUTW9kYWxIb3N0Vmlld05hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL1JDVE1vZGFsSG9zdFZpZXdOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvUHJlc3NhYmxlL1ByZXNzYWJsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9QcmVzc2FibGUvdXNlQW5kcm9pZFJpcHBsZUZvclZpZXcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvU3dpdGNoL1N3aXRjaC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9Td2l0Y2gvQW5kcm9pZFN3aXRjaE5hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL0FuZHJvaWRTd2l0Y2hOYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvU3dpdGNoL1N3aXRjaE5hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL1N3aXRjaE5hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1RleHRJbnB1dC9SQ1RNdWx0aWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9Ub3VjaGFibGUvQm91bmRpbmdEaW1lbnNpb25zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1RvdWNoYWJsZS9Qb29sZWRDbGFzcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9Ub3VjaGFibGUvUG9zaXRpb24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xpc3RzL1ZpcnR1YWxpemVkTGlzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGlzdHMvVmlydHVhbGl6ZWRTZWN0aW9uTGlzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQWN0aW9uU2hlZXRJT1MvQWN0aW9uU2hlZXRJT1MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FjdGlvblNoZWV0SU9TL05hdGl2ZUFjdGlvblNoZWV0TWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUFjdGlvblNoZWV0TWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9DbGlwYm9hcmQvQ2xpcGJvYXJkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL0NsaXBib2FyZC9OYXRpdmVDbGlwYm9hcmQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVDbGlwYm9hcmQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9EZXZpY2VJbmZvLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnRlcmFjdGlvbi9QYW5SZXNwb25kZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ludGVyYWN0aW9uL1RvdWNoSGlzdG9yeU1hdGguanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1Blcm1pc3Npb25zQW5kcm9pZC9QZXJtaXNzaW9uc0FuZHJvaWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1Blcm1pc3Npb25zQW5kcm9pZC9OYXRpdmVQZXJtaXNzaW9uc0FuZHJvaWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVQZXJtaXNzaW9uc0FuZHJvaWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1B1c2hOb3RpZmljYXRpb25JT1MvUHVzaE5vdGlmaWNhdGlvbklPUy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUHVzaE5vdGlmaWNhdGlvbklPUy9OYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TaGFyZS9TaGFyZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvU2hhcmUvTmF0aXZlU2hhcmVNb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTaGFyZU1vZHVsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9Ub2FzdEFuZHJvaWQvVG9hc3RBbmRyb2lkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC91c2VBbmltYXRlZFZhbHVlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvdXNlQ29sb3JTY2hlbWUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy91c2VXaW5kb3dEaW1lbnNpb25zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9WaWJyYXRpb24vVmlicmF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9WaWJyYXRpb24vTmF0aXZlVmlicmF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlVmlicmF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9ZZWxsb3dCb3gvWWVsbG93Qm94RGVwcmVjYXRlZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvU3R5bGVTaGVldC9QbGF0Zm9ybUNvbG9yVmFsdWVUeXBlc0lPUy5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvY29tcG9uZW50cy9STlRlc3RlclRoZW1lLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UVGVzdERldGFpbHMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvY29tcG9uZW50cy9STlRlc3RlckJsb2NrLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UZXN0ZXJFeGFtcGxlRmlsdGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9zZWFyY2gtaWNvbi5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvY29tcG9uZW50cy9STlRlc3Rlckxpc3RGaWx0ZXJzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1NuYXBzaG90L1NuYXBzaG90Vmlld0lPUy5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvUkNUVGVzdC9SQ1RTbmFwc2hvdE5hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9STlRlc3RlckFwcFNoYXJlZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9jb21wb25lbnRzL1JOVGVzdGVyTW9kdWxlTGlzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9jb21wb25lbnRzL1JOVGVzdGVyTmF2YmFyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9ib3R0b20tbmF2LWNvbXBvbmVudHMtaWNvbi1hY3RpdmUucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9ib3R0b20tbmF2LWNvbXBvbmVudHMtaWNvbi1pbmFjdGl2ZS5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL2JvdHRvbS1uYXYtYXBpcy1pY29uLWFjdGl2ZS5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL2JvdHRvbS1uYXYtYXBpcy1pY29uLWluYWN0aXZlLnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9jb21wb25lbnRzL1JOVFRpdGxlQmFyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UZXN0ZXJEb2N1bWVudGF0aW9uVVJMLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL0RldnRvb2xzL29wZW5VUkxJbkJyb3dzZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL2RvY3VtZW50YXRpb24ucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL3V0aWxzL1JOVGVzdGVyTGlzdC5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQWN0aXZpdHlJbmRpY2F0b3IvQWN0aXZpdHlJbmRpY2F0b3JFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0J1dHRvbi9CdXR0b25FeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0ZsYXRMaXN0L0ZsYXRMaXN0RXhhbXBsZUluZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0ZsYXRMaXN0L0ZsYXRMaXN0LWJhc2ljLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UZXN0ZXJQYWdlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UZXN0ZXJUaXRsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9jb21wb25lbnRzL0xpc3RFeGFtcGxlU2hhcmVkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9saWtlLnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9hc3NldHMvZGlzbGlrZS5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL2NhbGwucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9maXN0LnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9hc3NldHMvYmFuZGFnZWQucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9mbG93ZXJzLnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9hc3NldHMvaGVhcnQucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9saWtpbmcucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9wYXJ0eS5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL3Bva2UucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9zdXBlcmxpa2UucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy92aWN0b3J5LnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9GbGF0TGlzdC9GbGF0TGlzdC1jb250ZW50SW5zZXQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRmxhdExpc3QvQmFzZUZsYXRMaXN0RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9GbGF0TGlzdC9GbGF0TGlzdC1pbnZlcnRlZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9GbGF0TGlzdC9GbGF0TGlzdC1tdWx0aUNvbHVtbi5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9GbGF0TGlzdC9GbGF0TGlzdC1uZXN0ZWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRmxhdExpc3QvRmxhdExpc3Qtb25FbmRSZWFjaGVkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0ZsYXRMaXN0L0ZsYXRMaXN0LW9uU3RhcnRSZWFjaGVkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0ZsYXRMaXN0L0ZsYXRMaXN0LW9uVmlld2FibGVJdGVtc0NoYW5nZWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRmxhdExpc3QvRmxhdExpc3Qtc3RpY2t5SGVhZGVycy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9GbGF0TGlzdC9GbGF0TGlzdC13aXRoU2VwYXJhdG9ycy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9JbWFnZS9JbWFnZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL3VpZV90aHVtYl9ub3JtYWxAMngucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy91aWVfdGh1bWJfc2VsZWN0ZWRAMngucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy91aWVfY29tbWVudF9ub3JtYWxAMngucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy91aWVfY29tbWVudF9oaWdobGlnaHRlZEAyeC5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL2J1bm55LnBuZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9hc3NldHMvdHVtYmxyX21mcWVrcE1rdHcxcm45MHVtbzFfNTAwLmdpZiIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9JbWFnZS9JbWFnZUNhcEluc2V0c0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ltYWdlL25hdGl2ZUltYWdlU291cmNlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0pTUmVzcG9uZGVySGFuZGxlckV4YW1wbGUvSlNSZXNwb25kZXJIYW5kbGVyRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9JbnB1dEFjY2Vzc29yeVZpZXcvSW5wdXRBY2Nlc3NvcnlWaWV3RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9LZXlib2FyZEF2b2lkaW5nVmlldy9LZXlib2FyZEF2b2lkaW5nVmlld0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvTGF5b3V0L0xheW91dEV2ZW50c0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvTW9kYWwvTW9kYWxFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL01vZGFsL01vZGFsT25TaG93LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL01vZGFsL01vZGFsUHJlc2VudGF0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UT3B0aW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UZXN0ZXJCdXR0b24uanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvTmV3QXBwU2NyZWVuL05ld0FwcFNjcmVlbkV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05ld0FwcFNjcmVlbi9pbmRleC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmV3QXBwU2NyZWVuL2NvbXBvbmVudHMvQ29sb3JzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9OZXdBcHBTY3JlZW4vY29tcG9uZW50cy9EZWJ1Z0luc3RydWN0aW9ucy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmV3QXBwU2NyZWVuL2NvbXBvbmVudHMvSGVhZGVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9OZXdBcHBTY3JlZW4vY29tcG9uZW50cy9IZXJtZXNCYWRnZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmV3QXBwU2NyZWVuL2NvbXBvbmVudHMvbG9nby5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL05ld0FwcFNjcmVlbi9jb21wb25lbnRzL0xlYXJuTW9yZUxpbmtzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9OZXdBcHBTY3JlZW4vY29tcG9uZW50cy9SZWxvYWRJbnN0cnVjdGlvbnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUHJlc3NhYmxlL1ByZXNzYWJsZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUmVmcmVzaENvbnRyb2wvUmVmcmVzaENvbnRyb2xFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1Njcm9sbFZpZXcvU2Nyb2xsVmlld1NpbXBsZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvU2FmZUFyZWFWaWV3L1NhZmVBcmVhVmlld0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9TY3JvbGxWaWV3L1Njcm9sbFZpZXdQcmVzc2FibGVTdGlja3lIZWFkZXJFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1Njcm9sbFZpZXcvU2Nyb2xsVmlld0FuaW1hdGVkRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9TY3JvbGxWaWV3L1Njcm9sbFZpZXdJbmRpY2F0b3JJbnNldHNJT1NFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1Njcm9sbFZpZXcvU2Nyb2xsVmlld0tleWJvYXJkSW5zZXRzSU9TRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9TZWN0aW9uTGlzdC9TZWN0aW9uTGlzdEluZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1NlY3Rpb25MaXN0L1NlY3Rpb25MaXN0LWNvbnRlbnRJbnNldC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9TZWN0aW9uTGlzdC9TZWN0aW9uTGlzdEJhc2VFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1NlY3Rpb25MaXN0L1NlY3Rpb25MaXN0LWludmVydGVkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1NlY3Rpb25MaXN0L1NlY3Rpb25MaXN0LW9uRW5kUmVhY2hlZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9TZWN0aW9uTGlzdC9TZWN0aW9uTGlzdC1vblZpZXdhYmxlSXRlbXNDaGFuZ2VkLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1NlY3Rpb25MaXN0L1NlY3Rpb25MaXN0LXNjcm9sbGFibGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvU2VjdGlvbkxpc3QvU2VjdGlvbkxpc3Qtc3RpY2t5SGVhZGVyc0VuYWJsZWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvU2VjdGlvbkxpc3QvU2VjdGlvbkxpc3Qtd2l0aFNlcGFyYXRvcnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvU3RhdHVzQmFyL1N0YXR1c0JhckV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvU3dpcGVhYmxlQ2FyZEV4YW1wbGUvU3dpcGVhYmxlQ2FyZEV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvU3dpdGNoL1N3aXRjaEV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVGV4dC9UZXh0RXhhbXBsZS5pb3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvY29tcG9uZW50cy9UZXh0TGVnZW5kLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvVGV4dElubGluZVZpZXcuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL2ZsdXhAM3gucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1RleHRJbnB1dC9UZXh0SW5wdXRFeGFtcGxlLmlvcy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9UZXh0SW5wdXQvVGV4dElucHV0U2hhcmVkRXhhbXBsZXMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVG91Y2hhYmxlL1RvdWNoYWJsZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVHJhbnNwYXJlbnRIaXRUZXN0L1RyYW5zcGFyZW50SGl0VGVzdEV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVmlldy9WaWV3RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9OZXdBcmNoaXRlY3R1cmUvTmV3QXJjaGl0ZWN0dXJlRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9OYXRpdmVDb21wb25lbnRFeGFtcGxlL2pzL015TmF0aXZlVmlldy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9OYXRpdmVDb21wb25lbnRFeGFtcGxlL2pzL015TGVnYWN5Vmlld05hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9OYXRpdmVDb21wb25lbnRFeGFtcGxlL2pzL015TmF0aXZlVmlld05hdGl2ZUNvbXBvbmVudC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9QZXJmb3JtYW5jZS9QZXJmb3JtYW5jZUNvbXBhcmlzb25FeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlQ29tcGFyaXNvbkV4YW1wbGVzL2luZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlQ29tcGFyaXNvbkV4YW1wbGVzL1JlUmVuZGVyV2l0aE5vblB1cmVDaGlsZEV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUGVyZm9ybWFuY2UvY29tcG9uZW50cy9JdGVtTGlzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9QZXJmb3JtYW5jZS9jb21wb25lbnRzL2l0ZW1EYXRhLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlQ29tcGFyaXNvbkV4YW1wbGVzL1JlUmVuZGVyV2l0aE9iamVjdFByb3BFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlQ29tcGFyaXNvbkV4YW1wbGVzL1NldFN0YXRlSW5Xcm9uZ0VmZmVjdEV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUGVyZm9ybWFuY2UvcGVyZm9ybWFuY2VDb21wYXJpc29uRXhhbXBsZXMvUmVuZGVyT2Zmc2NyZWVuQ29udGVudEV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUGVyZm9ybWFuY2UvcGVyZm9ybWFuY2VDb21wYXJpc29uRXhhbXBsZXMvTm90TWVtb2l6ZUV4cGVuc2l2ZVRhc2tFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlQ29tcGFyaXNvbkV4YW1wbGVzL0VmZmVjdEluUmVuZGVyRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FjY2Vzc2liaWxpdHkvbWl4ZWQucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FjY2Vzc2liaWxpdHkvY2hlY2sucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FjY2Vzc2liaWxpdHkvdW5jaGVjay5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL3RyZWVzLmpwZyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJT1NFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FjdGlvblNoZWV0SU9TL0FjdGlvblNoZWV0SU9TRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9OYXRpdmVNb2R1bGVFeGFtcGxlL05hdGl2ZVNjcmVlbnNob3RNYW5hZ2VyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FsZXJ0L0FsZXJ0RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZC9BbmltYXRlZEluZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FuaW1hdGVkL0NvbG9yU3R5bGVzRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9jb21wb25lbnRzL1JOVENvbmZpZ3VyYXRpb25CbG9jay5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZC91dGlscy9Ub2dnbGVOYXRpdmVEcml2ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQW5pbWF0ZWQvQ29tcG9zZUFuaW1hdGlvbnNXaXRoRWFzaW5nRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZC9Db21wb3NpbmdFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FuaW1hdGVkL0NvbnRpbnVvdXNJbnRlcmFjdGlvbnNFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FuaW1hdGVkL0Vhc2luZ0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQW5pbWF0ZWQvRmFkZUluVmlld0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQW5pbWF0ZWQvTG9vcGluZ0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQW5pbWF0ZWQvTW92aW5nQm94RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZC9Sb3RhdGluZ0ltYWdlc0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQW5pbWF0ZWQvVHJhbnNmb3JtQm91bmNlRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZC9UcmFuc2Zvcm1TdHlsZXNFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FuaW1hdGVkR3JhdHVpdG91c0FwcC9BbkV4QXBwLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FuaW1hdGVkR3JhdHVpdG91c0FwcC9BbkV4U2V0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0FuaW1hdGVkR3JhdHVpdG91c0FwcC9BbkV4VGlsdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZEdyYXR1aXRvdXNBcHAvQW5FeEJvYmJsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZEdyYXR1aXRvdXNBcHAvQW5FeFNjcm9sbC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BbmltYXRlZEdyYXR1aXRvdXNBcHAvQW5FeENoYWluZWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvYXNzZXRzL2hhd2sucG5nIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2Fzc2V0cy9yZWxheUAzeC5wbmciLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQXBwZWFyYW5jZS9BcHBlYXJhbmNlRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BcHBTdGF0ZS9BcHBTdGF0ZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQm9yZGVyL0JvcmRlckV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQm94U2hhZG93L0JveFNoYWRvd0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvQ3Jhc2gvQ3Jhc2hFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0RldlNldHRpbmdzL0RldlNldHRpbmdzRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9EaW1lbnNpb25zL0RpbWVuc2lvbnNFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0ludGVyc2VjdGlvbk9ic2VydmVyL0ludGVyc2VjdGlvbk9ic2VydmVySW5kZXguanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvSW50ZXJzZWN0aW9uT2JzZXJ2ZXJCZW5jaG1hcmsuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNRE5FeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0ludmFsaWRQcm9wcy9JbnZhbGlkUHJvcHNFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0tleWJvYXJkL0tleWJvYXJkRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9MYXlvdXQvTGF5b3V0QW5pbWF0aW9uRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9MYXlvdXQvTGF5b3V0RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9MaW5raW5nL0xpbmtpbmdFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL011dGF0aW9uT2JzZXJ2ZXIvTXV0YXRpb25PYnNlcnZlckluZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL011dGF0aW9uT2JzZXJ2ZXIvTXV0YXRpb25PYnNlcnZlckV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL011dGF0aW9uT2JzZXJ2ZXIvTXV0YXRpb25PYnNlcnZlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTXV0YXRpb25PYnNlcnZlci9NdXRhdGlvbk9ic2VydmVyTWFuYWdlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTXV0YXRpb25PYnNlcnZlci9OYXRpdmVNdXRhdGlvbk9ic2VydmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlTXV0YXRpb25PYnNlcnZlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTXV0YXRpb25PYnNlcnZlci9NdXRhdGlvblJlY29yZC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9NdXRhdGlvbk9ic2VydmVyL1Zpc3VhbENvbXBsZXRpb25FeGFtcGxlL1Zpc3VhbENvbXBsZXRpb25FeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL011dGF0aW9uT2JzZXJ2ZXIvVmlzdWFsQ29tcGxldGlvbkV4YW1wbGUvVkNPdmVybGF5RXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9NdXRhdGlvbk9ic2VydmVyL1Zpc3VhbENvbXBsZXRpb25FeGFtcGxlL1ZDVHJhY2tlckV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ludGVyc2VjdGlvbk9ic2VydmVyL0ludGVyc2VjdGlvbk9ic2VydmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnRlcnNlY3Rpb25PYnNlcnZlci9JbnRlcnNlY3Rpb25PYnNlcnZlck1hbmFnZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ludGVyc2VjdGlvbk9ic2VydmVyL05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ludGVyc2VjdGlvbk9ic2VydmVyL0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvTmF0aXZlQW5pbWF0aW9uL05hdGl2ZUFuaW1hdGlvbnNFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2NvbXBvbmVudHMvUk5UZXN0ZXJTZXR0aW5nU3dpdGNoUm93LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL3V0aWxzL3VzZUpzU3RhbGxzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnRlcmFjdGlvbi9KU0V2ZW50TG9vcFdhdGNoZG9nLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL09yaWVudGF0aW9uQ2hhbmdlL09yaWVudGF0aW9uQ2hhbmdlRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9QYW5SZXNwb25kZXIvUGFuUmVzcG9uZGVyRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9QbGF0Zm9ybUNvbG9yL1BsYXRmb3JtQ29sb3JFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1BvaW50ZXJFdmVudHMvUG9pbnRlckV2ZW50c0V4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUkNUUm9vdFZpZXcvUkNUUm9vdFZpZXdJT1NFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1JUTC9SVExFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1NoYXJlL1NoYXJlRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9TbmFwc2hvdC9TbmFwc2hvdEV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVGltZXIvVGltZXJFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1RyYW5zZm9ybS9UcmFuc2Zvcm1FeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9UdXJib01vZHVsZS9TYW1wbGVUdXJib01vZHVsZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVFeGFtcGxlQ29tbW9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UdXJib01vZHVsZS9zYW1wbGVzL05hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9ub2RlX21vZHVsZXMvZmxvdy1lbnVtcy1ydW50aW1lL2luZGV4LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1R1cmJvTW9kdWxlL0xlZ2FjeU1vZHVsZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVHVyYm9Nb2R1bGUvU2FtcGxlTGVnYWN5TW9kdWxlRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9UdXJib01vZHVsZS9UdXJib0N4eE1vZHVsZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvVHVyYm9Nb2R1bGUvTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZUV4YW1wbGUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZS9OYXRpdmVDeHhNb2R1bGVFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1ZpYnJhdGlvbi9WaWJyYXRpb25FeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1dlYlNvY2tldC9XZWJTb2NrZXRFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1hIUi9YSFJFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1hIUi9YSFJFeGFtcGxlRG93bmxvYWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvWEhSL1hIUkV4YW1wbGVCaW5hcnlVcGxvYWQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvWEhSL1hIUkV4YW1wbGVGZXRjaC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9YSFIvWEhSRXhhbXBsZUhlYWRlcnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvWEhSL1hIUkV4YW1wbGVPblRpbWVPdXQuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvWEhSL1hIUkV4YW1wbGVBYm9ydENvbnRyb2xsZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VBcGlFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRzRXhhbXBsZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvQ29tcGF0aWJpbGl0eS9Db21wYXRpYmlsaXR5QW5pbWF0ZWRQb2ludGVyTW92ZS5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvQ29tcGF0aWJpbGl0eS9Db21wYXRpYmlsaXR5TmF0aXZlR2VzdHVyZUhhbmRsaW5nLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRzRXZlbnRmdWxWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9Db21wYXRpYmlsaXR5L01hbnlQb2ludGVyc1Byb3BlcnRpZXNFeGFtcGxlLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudEFjY2Vzc2liaWxpdHkuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50U3VwcG9ydC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRBdHRyaWJ1dGVzSG92ZXJhYmxlUG9pbnRlcnMuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0SW5zdHJ1Y3Rpb25zLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RNaW5pbWl6ZWRSZXN1bHRWaWV3LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRzVGV4dC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvUGxhdGZvcm1UZXN0L3VzZVBsYXRmb3JtVGVzdEhhcm5lc3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50QXR0cmlidXRlc05vSG92ZXJQb2ludGVycy5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRDYXB0dXJlTW91c2UuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50Q2xpY2tUb3VjaC5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudENsaWNrVG91Y2hIaWVyYXJjaHlQb2ludGVyRXZlbnRzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudExheW91dENoYW5nZVNob3VsZEZpcmVQb2ludGVyT3Zlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRQb2ludGVyQ2FuY2VsVG91Y2guanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50UG9pbnRlck1vdmUuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50UG9pbnRlck1vdmVBY3Jvc3MuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdEV2ZW50UmVjb3JkZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvRXhwZXJpbWVudGFsL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50UG9pbnRlck1vdmVCZXR3ZWVuLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudFBvaW50ZXJNb3ZlRXZlbnRPcmRlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9FeHBlcmltZW50YWwvVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRQb2ludGVyTW92ZU9uQ2hvcmRlZE1vdXNlQnV0dG9uLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudFBvaW50ZXJPdmVyT3V0LmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL0V4cGVyaW1lbnRhbC9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudFByaW1hcnlUb3VjaFBvaW50ZXIuanMiLCIvVXNlcnMvcm9iaG9nYW4vZmJzb3VyY2UveHBsYXQvanMvcmVhY3QtbmF0aXZlLWdpdGh1Yi9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvdXRpbHMvUk5UZXN0ZXJOYXZpZ2F0aW9uUmVkdWNlci5qcyIsIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy91dGlscy90ZXN0ZXJTdGF0ZVV0aWxzLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1NldFByb3BlcnRpZXNFeGFtcGxlL1NldFByb3BlcnRpZXNFeGFtcGxlQXBwLmpzIiwiL1VzZXJzL3JvYmhvZ2FuL2Zic291cmNlL3hwbGF0L2pzL3JlYWN0LW5hdGl2ZS1naXRodWIvcGFja2FnZXMvcm4tdGVzdGVyL2pzL2V4YW1wbGVzL1Jvb3RWaWV3U2l6ZUZsZXhpYmlsaXR5RXhhbXBsZS9Sb290Vmlld1NpemVGbGV4aWJpbGl0eUV4YW1wbGVBcHAuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fQlVORExFX1NUQVJUX1RJTUVfXz10aGlzLm5hdGl2ZVBlcmZvcm1hbmNlTm93P25hdGl2ZVBlcmZvcm1hbmNlTm93KCk6RGF0ZS5ub3coKSxfX0RFVl9fPXRydWUscHJvY2Vzcz10aGlzLnByb2Nlc3N8fHt9LF9fTUVUUk9fR0xPQkFMX1BSRUZJWF9fPScnLF9fcmVxdWlyZUN5Y2xlSWdub3JlUGF0dGVybnM9Wy8oXnxcXC98XFxcXClub2RlX21vZHVsZXMoJHxcXC98XFxcXCkvXTtwcm9jZXNzLmVudj1wcm9jZXNzLmVudnx8e307cHJvY2Vzcy5lbnYuTk9ERV9FTlY9cHJvY2Vzcy5lbnYuTk9ERV9FTlZ8fFwiZGV2ZWxvcG1lbnRcIjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICpcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKiBAcG9seWZpbGxcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuLy8gQSBzaW1wbGVyICRBcnJheUxpa2U8VD4uIE5vdCBpdGVyYWJsZSBhbmQgZG9lc24ndCBoYXZlIGEgYGxlbmd0aGAuXG4vLyBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBhY3R1YWwgYXJyYXlzIGFzIHdlbGwgYXMgd2l0aCBvYmplY3RzIHRoYXQgbG9vayBsaWtlXG4vLyB7MDogJ3ZhbHVlJywgMTogJy4uLid9XG5nbG9iYWwuX19yID0gbWV0cm9SZXF1aXJlO1xuZ2xvYmFsW2Ake19fTUVUUk9fR0xPQkFMX1BSRUZJWF9ffV9fZGBdID0gZGVmaW5lO1xuZ2xvYmFsLl9fYyA9IGNsZWFyO1xuZ2xvYmFsLl9fcmVnaXN0ZXJTZWdtZW50ID0gcmVnaXN0ZXJTZWdtZW50O1xudmFyIG1vZHVsZXMgPSBjbGVhcigpO1xuXG4vLyBEb24ndCB1c2UgYSBTeW1ib2wgaGVyZSwgaXQgd291bGQgcHVsbCBpbiBhbiBleHRyYSBwb2x5ZmlsbCB3aXRoIGFsbCBzb3J0cyBvZlxuLy8gYWRkaXRpb25hbCBzdHVmZiAoZS5nLiBBcnJheS5mcm9tKS5cbmNvbnN0IEVNUFRZID0ge307XG5jb25zdCBDWUNMRV9ERVRFQ1RFRCA9IHt9O1xuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0ge307XG5pZiAoX19ERVZfXykge1xuICBnbG9iYWwuJFJlZnJlc2hSZWckID0gKCkgPT4ge307XG4gIGdsb2JhbC4kUmVmcmVzaFNpZyQgPSAoKSA9PiAodHlwZSkgPT4gdHlwZTtcbn1cbmZ1bmN0aW9uIGNsZWFyKCkge1xuICBtb2R1bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBXZSByZXR1cm4gbW9kdWxlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIGFzc2lnbiBhbiBpbml0aWFsIHZhbHVlIHRvIG1vZHVsZXNcbiAgLy8gd2hlbiBkZWZpbmluZyBpdC4gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBoYXZlIHRvIGRvIFwibGV0IG1vZHVsZXMgPSBudWxsXCIsXG4gIC8vIHdoaWNoIHdpbGwgZm9yY2UgdXMgdG8gYWRkIFwibnVsbHRocm93c1wiIGV2ZXJ5d2hlcmUuXG4gIHJldHVybiBtb2R1bGVzO1xufVxuaWYgKF9fREVWX18pIHtcbiAgdmFyIHZlcmJvc2VOYW1lc1RvTW9kdWxlSWRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGluaXRpYWxpemluZ01vZHVsZUlkcyA9IFtdO1xufVxuZnVuY3Rpb24gZGVmaW5lKGZhY3RvcnksIG1vZHVsZUlkLCBkZXBlbmRlbmN5TWFwKSB7XG4gIGlmIChtb2R1bGVzW21vZHVsZUlkXSAhPSBudWxsKSB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIC8vIChXZSB0YWtlIGBpbnZlcnNlRGVwZW5kZW5jaWVzYCBmcm9tIGBhcmd1bWVudHNgIHRvIGF2b2lkIGFuIHVudXNlZFxuICAgICAgLy8gbmFtZWQgcGFyYW1ldGVyIGluIGBkZWZpbmVgIGluIHByb2R1Y3Rpb24uXG4gICAgICBjb25zdCBpbnZlcnNlRGVwZW5kZW5jaWVzID0gYXJndW1lbnRzWzRdO1xuXG4gICAgICAvLyBJZiB0aGUgbW9kdWxlIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhbmQgdGhlIGRlZmluZSBtZXRob2QgaGFzIGJlZW5cbiAgICAgIC8vIGNhbGxlZCB3aXRoIGludmVyc2VEZXBlbmRlbmNpZXMsIHdlIGNhbiBob3QgcmVsb2FkIGl0LlxuICAgICAgaWYgKGludmVyc2VEZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgZ2xvYmFsLl9fYWNjZXB0KG1vZHVsZUlkLCBmYWN0b3J5LCBkZXBlbmRlbmN5TWFwLCBpbnZlcnNlRGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IHJlcGVhdGVkIGNhbGxzIHRvIGBnbG9iYWwubmF0aXZlUmVxdWlyZWAgdG8gb3ZlcndyaXRlIG1vZHVsZXNcbiAgICAvLyB0aGF0IGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtb2QgPSB7XG4gICAgZGVwZW5kZW5jeU1hcCxcbiAgICBmYWN0b3J5LFxuICAgIGhhc0Vycm9yOiBmYWxzZSxcbiAgICBpbXBvcnRlZEFsbDogRU1QVFksXG4gICAgaW1wb3J0ZWREZWZhdWx0OiBFTVBUWSxcbiAgICBpc0luaXRpYWxpemVkOiBmYWxzZSxcbiAgICBwdWJsaWNNb2R1bGU6IHtcbiAgICAgIGV4cG9ydHM6IHt9LFxuICAgIH0sXG4gIH07XG4gIG1vZHVsZXNbbW9kdWxlSWRdID0gbW9kO1xuICBpZiAoX19ERVZfXykge1xuICAgIC8vIEhNUlxuICAgIG1vZC5ob3QgPSBjcmVhdGVIb3RSZWxvYWRpbmdPYmplY3QoKTtcblxuICAgIC8vIERFQlVHR0FCTEUgTU9EVUxFUyBOQU1FU1xuICAgIC8vIHdlIHRha2UgYHZlcmJvc2VOYW1lYCBmcm9tIGBhcmd1bWVudHNgIHRvIGF2b2lkIGFuIHVudXNlZCBuYW1lZCBwYXJhbWV0ZXJcbiAgICAvLyBpbiBgZGVmaW5lYCBpbiBwcm9kdWN0aW9uLlxuICAgIGNvbnN0IHZlcmJvc2VOYW1lID0gYXJndW1lbnRzWzNdO1xuICAgIGlmICh2ZXJib3NlTmFtZSkge1xuICAgICAgbW9kLnZlcmJvc2VOYW1lID0gdmVyYm9zZU5hbWU7XG4gICAgICB2ZXJib3NlTmFtZXNUb01vZHVsZUlkc1t2ZXJib3NlTmFtZV0gPSBtb2R1bGVJZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1ldHJvUmVxdWlyZShtb2R1bGVJZCkge1xuICBpZiAoX19ERVZfXyAmJiB0eXBlb2YgbW9kdWxlSWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCB2ZXJib3NlTmFtZSA9IG1vZHVsZUlkO1xuICAgIG1vZHVsZUlkID0gdmVyYm9zZU5hbWVzVG9Nb2R1bGVJZHNbdmVyYm9zZU5hbWVdO1xuICAgIGlmIChtb2R1bGVJZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbmFtZWQgbW9kdWxlOiBcIiR7dmVyYm9zZU5hbWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgUmVxdWlyaW5nIG1vZHVsZSBcIiR7dmVyYm9zZU5hbWV9XCIgYnkgbmFtZSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYCArXG4gICAgICAgICAgXCJkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kIHdpbGwgQlJFQUsgSU4gUFJPRFVDVElPTiFcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyRGbG93Rml4TWU6IGF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IG1vZHVsZUlkIGlzIGEgbnVtYmVyXG4gIGNvbnN0IG1vZHVsZUlkUmVhbGx5SXNOdW1iZXIgPSBtb2R1bGVJZDtcbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zdCBpbml0aWFsaXppbmdJbmRleCA9IGluaXRpYWxpemluZ01vZHVsZUlkcy5pbmRleE9mKFxuICAgICAgbW9kdWxlSWRSZWFsbHlJc051bWJlclxuICAgICk7XG4gICAgaWYgKGluaXRpYWxpemluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgY3ljbGUgPSBpbml0aWFsaXppbmdNb2R1bGVJZHNcbiAgICAgICAgLnNsaWNlKGluaXRpYWxpemluZ0luZGV4KVxuICAgICAgICAubWFwKChpZCkgPT4gKG1vZHVsZXNbaWRdID8gbW9kdWxlc1tpZF0udmVyYm9zZU5hbWUgOiBcIlt1bmtub3duXVwiKSk7XG4gICAgICBpZiAoc2hvdWxkUHJpbnRSZXF1aXJlQ3ljbGUoY3ljbGUpKSB7XG4gICAgICAgIGN5Y2xlLnB1c2goY3ljbGVbMF0pOyAvLyBXZSB3YW50IHRvIHByaW50IEEgLT4gQiAtPiBBOlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFJlcXVpcmUgY3ljbGU6ICR7Y3ljbGUuam9pbihcIiAtPiBcIil9XFxuXFxuYCArXG4gICAgICAgICAgICBcIlJlcXVpcmUgY3ljbGVzIGFyZSBhbGxvd2VkLCBidXQgY2FuIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gXCIgK1xuICAgICAgICAgICAgXCJDb25zaWRlciByZWZhY3RvcmluZyB0byByZW1vdmUgdGhlIG5lZWQgZm9yIGEgY3ljbGUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gbW9kdWxlc1ttb2R1bGVJZFJlYWxseUlzTnVtYmVyXTtcbiAgcmV0dXJuIG1vZHVsZSAmJiBtb2R1bGUuaXNJbml0aWFsaXplZFxuICAgID8gbW9kdWxlLnB1YmxpY01vZHVsZS5leHBvcnRzXG4gICAgOiBndWFyZGVkTG9hZE1vZHVsZShtb2R1bGVJZFJlYWxseUlzTnVtYmVyLCBtb2R1bGUpO1xufVxuXG4vLyBXZSBwcmludCByZXF1aXJlIGN5Y2xlcyB1bmxlc3MgdGhleSBtYXRjaCBhIHBhdHRlcm4gaW4gdGhlXG4vLyBgcmVxdWlyZUN5Y2xlSWdub3JlUGF0dGVybnNgIGNvbmZpZ3VyYXRpb24uXG5mdW5jdGlvbiBzaG91bGRQcmludFJlcXVpcmVDeWNsZShtb2R1bGVzKSB7XG4gIGNvbnN0IHJlZ0V4cHMgPVxuICAgIGdsb2JhbFtfX01FVFJPX0dMT0JBTF9QUkVGSVhfXyArIFwiX19yZXF1aXJlQ3ljbGVJZ25vcmVQYXR0ZXJuc1wiXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlZ0V4cHMpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgaXNJZ25vcmVkID0gKG1vZHVsZSkgPT5cbiAgICBtb2R1bGUgIT0gbnVsbCAmJiByZWdFeHBzLnNvbWUoKHJlZ0V4cCkgPT4gcmVnRXhwLnRlc3QobW9kdWxlKSk7XG5cbiAgLy8gUHJpbnQgdGhlIGN5Y2xlIHVubGVzcyBhbnkgcGFydCBvZiBpdCBpcyBpZ25vcmVkXG4gIHJldHVybiBtb2R1bGVzLmV2ZXJ5KChtb2R1bGUpID0+ICFpc0lnbm9yZWQobW9kdWxlKSk7XG59XG5mdW5jdGlvbiBtZXRyb0ltcG9ydERlZmF1bHQobW9kdWxlSWQpIHtcbiAgaWYgKF9fREVWX18gJiYgdHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgdmVyYm9zZU5hbWUgPSBtb2R1bGVJZDtcbiAgICBtb2R1bGVJZCA9IHZlcmJvc2VOYW1lc1RvTW9kdWxlSWRzW3ZlcmJvc2VOYW1lXTtcbiAgfVxuXG4gIC8vJEZsb3dGaXhNZTogYXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgbW9kdWxlSWQgaXMgYSBudW1iZXJcbiAgY29uc3QgbW9kdWxlSWRSZWFsbHlJc051bWJlciA9IG1vZHVsZUlkO1xuICBpZiAoXG4gICAgbW9kdWxlc1ttb2R1bGVJZFJlYWxseUlzTnVtYmVyXSAmJlxuICAgIG1vZHVsZXNbbW9kdWxlSWRSZWFsbHlJc051bWJlcl0uaW1wb3J0ZWREZWZhdWx0ICE9PSBFTVBUWVxuICApIHtcbiAgICByZXR1cm4gbW9kdWxlc1ttb2R1bGVJZFJlYWxseUlzTnVtYmVyXS5pbXBvcnRlZERlZmF1bHQ7XG4gIH1cbiAgY29uc3QgZXhwb3J0cyA9IG1ldHJvUmVxdWlyZShtb2R1bGVJZFJlYWxseUlzTnVtYmVyKTtcbiAgY29uc3QgaW1wb3J0ZWREZWZhdWx0ID1cbiAgICBleHBvcnRzICYmIGV4cG9ydHMuX19lc01vZHVsZSA/IGV4cG9ydHMuZGVmYXVsdCA6IGV4cG9ydHM7XG5cbiAgLy8gJEZsb3dGaXhNZSBUaGUgbWV0cm9SZXF1aXJlIGNhbGwgYWJvdmUgd2lsbCB0aHJvdyBpZiBtb2R1bGVzW2lkXSBpcyBudWxsXG4gIHJldHVybiAobW9kdWxlc1ttb2R1bGVJZFJlYWxseUlzTnVtYmVyXS5pbXBvcnRlZERlZmF1bHQgPSBpbXBvcnRlZERlZmF1bHQpO1xufVxubWV0cm9SZXF1aXJlLmltcG9ydERlZmF1bHQgPSBtZXRyb0ltcG9ydERlZmF1bHQ7XG5mdW5jdGlvbiBtZXRyb0ltcG9ydEFsbChtb2R1bGVJZCkge1xuICBpZiAoX19ERVZfXyAmJiB0eXBlb2YgbW9kdWxlSWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCB2ZXJib3NlTmFtZSA9IG1vZHVsZUlkO1xuICAgIG1vZHVsZUlkID0gdmVyYm9zZU5hbWVzVG9Nb2R1bGVJZHNbdmVyYm9zZU5hbWVdO1xuICB9XG5cbiAgLy8kRmxvd0ZpeE1lOiBhdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBtb2R1bGVJZCBpcyBhIG51bWJlclxuICBjb25zdCBtb2R1bGVJZFJlYWxseUlzTnVtYmVyID0gbW9kdWxlSWQ7XG4gIGlmIChcbiAgICBtb2R1bGVzW21vZHVsZUlkUmVhbGx5SXNOdW1iZXJdICYmXG4gICAgbW9kdWxlc1ttb2R1bGVJZFJlYWxseUlzTnVtYmVyXS5pbXBvcnRlZEFsbCAhPT0gRU1QVFlcbiAgKSB7XG4gICAgcmV0dXJuIG1vZHVsZXNbbW9kdWxlSWRSZWFsbHlJc051bWJlcl0uaW1wb3J0ZWRBbGw7XG4gIH1cbiAgY29uc3QgZXhwb3J0cyA9IG1ldHJvUmVxdWlyZShtb2R1bGVJZFJlYWxseUlzTnVtYmVyKTtcbiAgbGV0IGltcG9ydGVkQWxsO1xuICBpZiAoZXhwb3J0cyAmJiBleHBvcnRzLl9fZXNNb2R1bGUpIHtcbiAgICBpbXBvcnRlZEFsbCA9IGV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgaW1wb3J0ZWRBbGwgPSB7fTtcblxuICAgIC8vIFJlZnJhaW4gZnJvbSB1c2luZyBPYmplY3QuYXNzaWduLCBpdCBoYXMgdG8gd29yayBpbiBFUzMgZW52aXJvbm1lbnRzLlxuICAgIGlmIChleHBvcnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBleHBvcnRzKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIGtleSkpIHtcbiAgICAgICAgICBpbXBvcnRlZEFsbFtrZXldID0gZXhwb3J0c1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGltcG9ydGVkQWxsLmRlZmF1bHQgPSBleHBvcnRzO1xuICB9XG5cbiAgLy8gJEZsb3dGaXhNZSBUaGUgbWV0cm9SZXF1aXJlIGNhbGwgYWJvdmUgd2lsbCB0aHJvdyBpZiBtb2R1bGVzW2lkXSBpcyBudWxsXG4gIHJldHVybiAobW9kdWxlc1ttb2R1bGVJZFJlYWxseUlzTnVtYmVyXS5pbXBvcnRlZEFsbCA9IGltcG9ydGVkQWxsKTtcbn1cbm1ldHJvUmVxdWlyZS5pbXBvcnRBbGwgPSBtZXRyb0ltcG9ydEFsbDtcblxuLy8gVGhlIGByZXF1aXJlLmNvbnRleHQoKWAgc3ludGF4IGlzIG5ldmVyIGV4ZWN1dGVkIGluIHRoZSBydW50aW1lIGJlY2F1c2UgaXQgaXMgY29udmVydGVkXG4vLyB0byBgcmVxdWlyZSgpYCBpbiBgbWV0cm8vc3JjL01vZHVsZUdyYXBoL3dvcmtlci9jb2xsZWN0RGVwZW5kZW5jaWVzLmpzYCBhZnRlciBjb2xsZWN0aW5nXG4vLyBkZXBlbmRlbmNpZXMuIElmIHRoZSBmZWF0dXJlIGZsYWcgaXMgbm90IGVuYWJsZWQgdGhlbiB0aGUgY29udmVyc2lvbiBuZXZlciB0YWtlcyBwbGFjZSBhbmQgdGhpcyBlcnJvciBpcyB0aHJvd24gKGRldmVsb3BtZW50IG9ubHkpLlxubWV0cm9SZXF1aXJlLmNvbnRleHQgPSBmdW5jdGlvbiBmYWxsYmFja1JlcXVpcmVDb250ZXh0KCkge1xuICBpZiAoX19ERVZfXykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVGhlIGV4cGVyaW1lbnRhbCBNZXRybyBmZWF0dXJlIGByZXF1aXJlLmNvbnRleHRgIGlzIG5vdCBlbmFibGVkIGluIHlvdXIgcHJvamVjdC5cXG5UaGlzIGNhbiBiZSBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIGB0cmFuc2Zvcm1lci51bnN0YWJsZV9hbGxvd1JlcXVpcmVDb250ZXh0YCBwcm9wZXJ0eSB0byBgdHJ1ZWAgaW4geW91ciBNZXRybyBjb25maWd1cmF0aW9uLlwiXG4gICAgKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgXCJUaGUgZXhwZXJpbWVudGFsIE1ldHJvIGZlYXR1cmUgYHJlcXVpcmUuY29udGV4dGAgaXMgbm90IGVuYWJsZWQgaW4geW91ciBwcm9qZWN0LlwiXG4gICk7XG59O1xuXG4vLyBgcmVxdWlyZS5yZXNvbHZlV2VhaygpYCBpcyBhIGNvbXBpbGUtdGltZSBwcmltaXRpdmUgKHNlZSBjb2xsZWN0RGVwZW5kZW5jaWVzLmpzKVxubWV0cm9SZXF1aXJlLnJlc29sdmVXZWFrID0gZnVuY3Rpb24gZmFsbGJhY2tSZXF1aXJlUmVzb2x2ZVdlYWsoKSB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJyZXF1aXJlLnJlc29sdmVXZWFrIGNhbm5vdCBiZSBjYWxsZWQgZHluYW1pY2FsbHkuIEVuc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBzYW1lIHZlcnNpb24gb2YgYG1ldHJvYCBhbmQgYG1ldHJvLXJ1bnRpbWVgLlwiXG4gICAgKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJyZXF1aXJlLnJlc29sdmVXZWFrIGNhbm5vdCBiZSBjYWxsZWQgZHluYW1pY2FsbHkuXCIpO1xufTtcbmxldCBpbkd1YXJkID0gZmFsc2U7XG5mdW5jdGlvbiBndWFyZGVkTG9hZE1vZHVsZShtb2R1bGVJZCwgbW9kdWxlKSB7XG4gIGlmICghaW5HdWFyZCAmJiBnbG9iYWwuRXJyb3JVdGlscykge1xuICAgIGluR3VhcmQgPSB0cnVlO1xuICAgIGxldCByZXR1cm5WYWx1ZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBsb2FkTW9kdWxlSW1wbGVtZW50YXRpb24obW9kdWxlSWQsIG1vZHVsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gVE9ETzogKG1vdGkpIFQ0ODIwNDY5MiBUeXBlIHRoaXMgdXNlIG9mIEVycm9yVXRpbHMuXG4gICAgICBnbG9iYWwuRXJyb3JVdGlscy5yZXBvcnRGYXRhbEVycm9yKGUpO1xuICAgIH1cbiAgICBpbkd1YXJkID0gZmFsc2U7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2FkTW9kdWxlSW1wbGVtZW50YXRpb24obW9kdWxlSWQsIG1vZHVsZSk7XG4gIH1cbn1cbmNvbnN0IElEX01BU0tfU0hJRlQgPSAxNjtcbmNvbnN0IExPQ0FMX0lEX01BU0sgPSB+MCA+Pj4gSURfTUFTS19TSElGVDtcbmZ1bmN0aW9uIHVucGFja01vZHVsZUlkKG1vZHVsZUlkKSB7XG4gIGNvbnN0IHNlZ21lbnRJZCA9IG1vZHVsZUlkID4+PiBJRF9NQVNLX1NISUZUO1xuICBjb25zdCBsb2NhbElkID0gbW9kdWxlSWQgJiBMT0NBTF9JRF9NQVNLO1xuICByZXR1cm4ge1xuICAgIHNlZ21lbnRJZCxcbiAgICBsb2NhbElkLFxuICB9O1xufVxubWV0cm9SZXF1aXJlLnVucGFja01vZHVsZUlkID0gdW5wYWNrTW9kdWxlSWQ7XG5mdW5jdGlvbiBwYWNrTW9kdWxlSWQodmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZS5zZWdtZW50SWQgPDwgSURfTUFTS19TSElGVCkgKyB2YWx1ZS5sb2NhbElkO1xufVxubWV0cm9SZXF1aXJlLnBhY2tNb2R1bGVJZCA9IHBhY2tNb2R1bGVJZDtcbmNvbnN0IG1vZHVsZURlZmluZXJzQnlTZWdtZW50SUQgPSBbXTtcbmNvbnN0IGRlZmluaW5nU2VnbWVudEJ5TW9kdWxlSUQgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiByZWdpc3RlclNlZ21lbnQoc2VnbWVudElkLCBtb2R1bGVEZWZpbmVyLCBtb2R1bGVJZHMpIHtcbiAgbW9kdWxlRGVmaW5lcnNCeVNlZ21lbnRJRFtzZWdtZW50SWRdID0gbW9kdWxlRGVmaW5lcjtcbiAgaWYgKF9fREVWX18pIHtcbiAgICBpZiAoc2VnbWVudElkID09PSAwICYmIG1vZHVsZUlkcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInJlZ2lzdGVyU2VnbWVudDogRXhwZWN0ZWQgbW9kdWxlSWRzIHRvIGJlIG51bGwgZm9yIG1haW4gc2VnbWVudFwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc2VnbWVudElkICE9PSAwICYmICFtb2R1bGVJZHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJyZWdpc3RlclNlZ21lbnQ6IEV4cGVjdGVkIG1vZHVsZUlkcyB0byBiZSBwYXNzZWQgZm9yIHNlZ21lbnQgI1wiICtcbiAgICAgICAgICBzZWdtZW50SWRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChtb2R1bGVJZHMpIHtcbiAgICBtb2R1bGVJZHMuZm9yRWFjaCgobW9kdWxlSWQpID0+IHtcbiAgICAgIGlmICghbW9kdWxlc1ttb2R1bGVJZF0gJiYgIWRlZmluaW5nU2VnbWVudEJ5TW9kdWxlSUQuaGFzKG1vZHVsZUlkKSkge1xuICAgICAgICBkZWZpbmluZ1NlZ21lbnRCeU1vZHVsZUlELnNldChtb2R1bGVJZCwgc2VnbWVudElkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gbG9hZE1vZHVsZUltcGxlbWVudGF0aW9uKG1vZHVsZUlkLCBtb2R1bGUpIHtcbiAgaWYgKCFtb2R1bGUgJiYgbW9kdWxlRGVmaW5lcnNCeVNlZ21lbnRJRC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2VnbWVudElkID0gZGVmaW5pbmdTZWdtZW50QnlNb2R1bGVJRC5nZXQobW9kdWxlSWQpID8/IDA7XG4gICAgY29uc3QgZGVmaW5lciA9IG1vZHVsZURlZmluZXJzQnlTZWdtZW50SURbc2VnbWVudElkXTtcbiAgICBpZiAoZGVmaW5lciAhPSBudWxsKSB7XG4gICAgICBkZWZpbmVyKG1vZHVsZUlkKTtcbiAgICAgIG1vZHVsZSA9IG1vZHVsZXNbbW9kdWxlSWRdO1xuICAgICAgZGVmaW5pbmdTZWdtZW50QnlNb2R1bGVJRC5kZWxldGUobW9kdWxlSWQpO1xuICAgIH1cbiAgfVxuICBjb25zdCBuYXRpdmVSZXF1aXJlID0gZ2xvYmFsLm5hdGl2ZVJlcXVpcmU7XG4gIGlmICghbW9kdWxlICYmIG5hdGl2ZVJlcXVpcmUpIHtcbiAgICBjb25zdCB7IHNlZ21lbnRJZCwgbG9jYWxJZCB9ID0gdW5wYWNrTW9kdWxlSWQobW9kdWxlSWQpO1xuICAgIG5hdGl2ZVJlcXVpcmUobG9jYWxJZCwgc2VnbWVudElkKTtcbiAgICBtb2R1bGUgPSBtb2R1bGVzW21vZHVsZUlkXTtcbiAgfVxuICBpZiAoIW1vZHVsZSkge1xuICAgIHRocm93IHVua25vd25Nb2R1bGVFcnJvcihtb2R1bGVJZCk7XG4gIH1cbiAgaWYgKG1vZHVsZS5oYXNFcnJvcikge1xuICAgIHRocm93IG1vZHVsZS5lcnJvcjtcbiAgfVxuICBpZiAoX19ERVZfXykge1xuICAgIHZhciBTeXN0cmFjZSA9IHJlcXVpcmVTeXN0cmFjZSgpO1xuICAgIHZhciBSZWZyZXNoID0gcmVxdWlyZVJlZnJlc2goKTtcbiAgfVxuXG4gIC8vIFdlIG11c3Qgb3B0aW1pc3RpY2FsbHkgbWFyayBtb2R1bGUgYXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHJ1bm5pbmcgdGhlXG4gIC8vIGZhY3RvcnkgdG8ga2VlcCBhbnkgcmVxdWlyZSBjeWNsZXMgaW5zaWRlIHRoZSBmYWN0b3J5IGZyb20gY2F1c2luZyBhblxuICAvLyBpbmZpbml0ZSByZXF1aXJlIGxvb3AuXG4gIG1vZHVsZS5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgY29uc3QgeyBmYWN0b3J5LCBkZXBlbmRlbmN5TWFwIH0gPSBtb2R1bGU7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaW5pdGlhbGl6aW5nTW9kdWxlSWRzLnB1c2gobW9kdWxlSWQpO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIC8vICRGbG93SWdub3JlOiB3ZSBrbm93IHRoYXQgX19ERVZfXyBpcyBjb25zdCBhbmQgYFN5c3RyYWNlYCBleGlzdHNcbiAgICAgIFN5c3RyYWNlLmJlZ2luRXZlbnQoXCJKU19yZXF1aXJlX1wiICsgKG1vZHVsZS52ZXJib3NlTmFtZSB8fCBtb2R1bGVJZCkpO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVPYmplY3QgPSBtb2R1bGUucHVibGljTW9kdWxlO1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtb2R1bGVPYmplY3QuaG90ID0gbW9kdWxlLmhvdDtcbiAgICAgIHZhciBwcmV2UmVmcmVzaFJlZyA9IGdsb2JhbC4kUmVmcmVzaFJlZyQ7XG4gICAgICB2YXIgcHJldlJlZnJlc2hTaWcgPSBnbG9iYWwuJFJlZnJlc2hTaWckO1xuICAgICAgaWYgKFJlZnJlc2ggIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBSZWZyZXNoUnVudGltZSA9IFJlZnJlc2g7XG4gICAgICAgIGdsb2JhbC4kUmVmcmVzaFJlZyQgPSAodHlwZSwgaWQpID0+IHtcbiAgICAgICAgICBSZWZyZXNoUnVudGltZS5yZWdpc3Rlcih0eXBlLCBtb2R1bGVJZCArIFwiIFwiICsgaWQpO1xuICAgICAgICB9O1xuICAgICAgICBnbG9iYWwuJFJlZnJlc2hTaWckID1cbiAgICAgICAgICBSZWZyZXNoUnVudGltZS5jcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kdWxlT2JqZWN0LmlkID0gbW9kdWxlSWQ7XG5cbiAgICAvLyBrZWVwIGFyZ3MgaW4gc3luYyB3aXRoIHdpdGggZGVmaW5lTW9kdWxlQ29kZSBpblxuICAgIC8vIG1ldHJvL3NyYy9SZXNvbHZlci9pbmRleC5qc1xuICAgIC8vIGFuZCBtZXRyby9zcmMvTW9kdWxlR3JhcGgvd29ya2VyLmpzXG4gICAgZmFjdG9yeShcbiAgICAgIGdsb2JhbCxcbiAgICAgIG1ldHJvUmVxdWlyZSxcbiAgICAgIG1ldHJvSW1wb3J0RGVmYXVsdCxcbiAgICAgIG1ldHJvSW1wb3J0QWxsLFxuICAgICAgbW9kdWxlT2JqZWN0LFxuICAgICAgbW9kdWxlT2JqZWN0LmV4cG9ydHMsXG4gICAgICBkZXBlbmRlbmN5TWFwXG4gICAgKTtcblxuICAgIC8vIGF2b2lkIHJlbW92aW5nIGZhY3RvcnkgaW4gREVWIG1vZGUgYXMgaXQgYnJlYWtzIEhNUlxuICAgIGlmICghX19ERVZfXykge1xuICAgICAgLy8gJEZsb3dGaXhNZTogVGhpcyBpcyBvbmx5IHNvdW5kIGJlY2F1c2Ugd2UgbmV2ZXIgYWNjZXNzIGBmYWN0b3J5YCBhZ2FpblxuICAgICAgbW9kdWxlLmZhY3RvcnkgPSB1bmRlZmluZWQ7XG4gICAgICBtb2R1bGUuZGVwZW5kZW5jeU1hcCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIC8vICRGbG93SWdub3JlOiB3ZSBrbm93IHRoYXQgX19ERVZfXyBpcyBjb25zdCBhbmQgYFN5c3RyYWNlYCBleGlzdHNcbiAgICAgIFN5c3RyYWNlLmVuZEV2ZW50KCk7XG4gICAgICBpZiAoUmVmcmVzaCAhPSBudWxsKSB7XG4gICAgICAgIHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaChSZWZyZXNoLCBtb2R1bGVPYmplY3QuZXhwb3J0cywgbW9kdWxlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kdWxlT2JqZWN0LmV4cG9ydHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBtb2R1bGUuaGFzRXJyb3IgPSB0cnVlO1xuICAgIG1vZHVsZS5lcnJvciA9IGU7XG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBtb2R1bGUucHVibGljTW9kdWxlLmV4cG9ydHMgPSB1bmRlZmluZWQ7XG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgaWYgKGluaXRpYWxpemluZ01vZHVsZUlkcy5wb3AoKSAhPT0gbW9kdWxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiaW5pdGlhbGl6aW5nTW9kdWxlSWRzIGlzIGNvcnJ1cHQ7IHNvbWV0aGluZyBpcyB0ZXJyaWJseSB3cm9uZ1wiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBnbG9iYWwuJFJlZnJlc2hSZWckID0gcHJldlJlZnJlc2hSZWc7XG4gICAgICBnbG9iYWwuJFJlZnJlc2hTaWckID0gcHJldlJlZnJlc2hTaWc7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bmtub3duTW9kdWxlRXJyb3IoaWQpIHtcbiAgbGV0IG1lc3NhZ2UgPSAnUmVxdWlyaW5nIHVua25vd24gbW9kdWxlIFwiJyArIGlkICsgJ1wiLic7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgbWVzc2FnZSArPVxuICAgICAgXCIgSWYgeW91IGFyZSBzdXJlIHRoZSBtb2R1bGUgZXhpc3RzLCB0cnkgcmVzdGFydGluZyBNZXRyby4gXCIgK1xuICAgICAgXCJZb3UgbWF5IGFsc28gd2FudCB0byBydW4gYHlhcm5gIG9yIGBucG0gaW5zdGFsbGAuXCI7XG4gIH1cbiAgcmV0dXJuIEVycm9yKG1lc3NhZ2UpO1xufVxuaWYgKF9fREVWX18pIHtcbiAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIG1ldHJvUmVxdWlyZS5TeXN0cmFjZSA9IHtcbiAgICBiZWdpbkV2ZW50OiAoKSA9PiB7fSxcbiAgICBlbmRFdmVudDogKCkgPT4ge30sXG4gIH07XG4gIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBtZXRyb1JlcXVpcmUuZ2V0TW9kdWxlcyA9ICgpID0+IHtcbiAgICByZXR1cm4gbW9kdWxlcztcbiAgfTtcblxuICAvLyBIT1QgTU9EVUxFIFJFTE9BRElOR1xuICB2YXIgY3JlYXRlSG90UmVsb2FkaW5nT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGhvdCA9IHtcbiAgICAgIF9hY2NlcHRDYWxsYmFjazogbnVsbCxcbiAgICAgIF9kaXNwb3NlQ2FsbGJhY2s6IG51bGwsXG4gICAgICBfZGlkQWNjZXB0OiBmYWxzZSxcbiAgICAgIGFjY2VwdDogKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGhvdC5fZGlkQWNjZXB0ID0gdHJ1ZTtcbiAgICAgICAgaG90Ll9hY2NlcHRDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgfSxcbiAgICAgIGRpc3Bvc2U6IChjYWxsYmFjaykgPT4ge1xuICAgICAgICBob3QuX2Rpc3Bvc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBob3Q7XG4gIH07XG4gIGxldCByZWFjdFJlZnJlc2hUaW1lb3V0ID0gbnVsbDtcbiAgY29uc3QgbWV0cm9Ib3RVcGRhdGVNb2R1bGUgPSBmdW5jdGlvbiAoXG4gICAgaWQsXG4gICAgZmFjdG9yeSxcbiAgICBkZXBlbmRlbmN5TWFwLFxuICAgIGludmVyc2VEZXBlbmRlbmNpZXNcbiAgKSB7XG4gICAgY29uc3QgbW9kID0gbW9kdWxlc1tpZF07XG4gICAgaWYgKCFtb2QpIHtcbiAgICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgIC8vIE5ldyBtb2R1bGVzIGFyZSBnb2luZyB0byBiZSBoYW5kbGVkIGJ5IHRoZSBkZWZpbmUoKSBtZXRob2QuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IHVua25vd25Nb2R1bGVFcnJvcihpZCk7XG4gICAgfVxuICAgIGlmICghbW9kLmhhc0Vycm9yICYmICFtb2QuaXNJbml0aWFsaXplZCkge1xuICAgICAgLy8gVGhlIG1vZHVsZSBoYXNuJ3QgYWN0dWFsbHkgYmVlbiBleGVjdXRlZCB5ZXQsXG4gICAgICAvLyBzbyB3ZSBjYW4gYWx3YXlzIHNhZmVseSByZXBsYWNlIGl0LlxuICAgICAgbW9kLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgICAgbW9kLmRlcGVuZGVuY3lNYXAgPSBkZXBlbmRlbmN5TWFwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBSZWZyZXNoID0gcmVxdWlyZVJlZnJlc2goKTtcbiAgICBjb25zdCByZWZyZXNoQm91bmRhcnlJRHMgPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBJbiB0aGlzIGxvb3AsIHdlIHdpbGwgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgdHJlZSB1cHdhcmRzIGZyb20gdGhlXG4gICAgLy8gY2hhbmdlZCBtb2R1bGUuIFVwZGF0ZXMgXCJidWJibGVcIiB1cCB0byB0aGUgY2xvc2VzdCBhY2NlcHRlZCBwYXJlbnQuXG4gICAgLy9cbiAgICAvLyBJZiB3ZSByZWFjaCB0aGUgbW9kdWxlIHJvb3QgYW5kIG5vdGhpbmcgYWxvbmcgdGhlIHdheSBhY2NlcHRlZCB0aGUgdXBkYXRlLFxuICAgIC8vIHdlIGtub3cgaG90IHJlbG9hZCBpcyBnb2luZyB0byBmYWlsLiBJbiB0aGF0IGNhc2Ugd2UgcmV0dXJuIGZhbHNlLlxuICAgIC8vXG4gICAgLy8gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGxvb3AgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIGl0J3Mgc2FmZSB0byBhcHBseVxuICAgIC8vIGEgaG90IHVwZGF0ZS4gSXQgaXMgb25seSBzYWZlIHdoZW4gdGhlIHVwZGF0ZSB3YXMgYWNjZXB0ZWQgc29tZXdoZXJlXG4gICAgLy8gYWxvbmcgdGhlIHdheSB1cHdhcmRzIGZvciBlYWNoIG9mIGl0cyBwYXJlbnQgZGVwZW5kZW5jeSBtb2R1bGUgY2hhaW5zLlxuICAgIC8vXG4gICAgLy8gV2UgcGVyZm9ybSBhIHRvcG9sb2dpY2FsIHNvcnQgYmVjYXVzZSB3ZSBtYXkgZGlzY292ZXIgdGhlIHNhbWVcbiAgICAvLyBtb2R1bGUgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRvIHJlLWV4ZWN1dGUsIGFuZFxuICAgIC8vIHdlIHdhbnQgdG8gZXhlY3V0ZSBtb2R1bGVzIGJlZm9yZSBtb2R1bGVzIHRoYXQgZGVwZW5kIG9uIHRoZW0uXG4gICAgLy9cbiAgICAvLyBJZiB3ZSBkaWRuJ3QgaGF2ZSB0aGlzIGNoZWNrLCB3ZSdkIHJpc2sgcmUtZXZhbHVhdGluZyBtb2R1bGVzIHRoYXRcbiAgICAvLyBoYXZlIHNpZGUgZWZmZWN0cyBhbmQgbGVhZCB0byBjb25mdXNpbmcgYW5kIG1lYW5pbmdsZXNzIGNyYXNoZXMuXG5cbiAgICBsZXQgZGlkQmFpbE91dCA9IGZhbHNlO1xuICAgIGxldCB1cGRhdGVkTW9kdWxlSURzO1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGVkTW9kdWxlSURzID0gdG9wb2xvZ2ljYWxTb3J0KFxuICAgICAgICBbaWRdLFxuICAgICAgICAvLyBTdGFydCB3aXRoIHRoZSBjaGFuZ2VkIG1vZHVsZSBhbmQgZ28gdXB3YXJkc1xuICAgICAgICAocGVuZGluZ0lEKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGVuZGluZ01vZHVsZSA9IG1vZHVsZXNbcGVuZGluZ0lEXTtcbiAgICAgICAgICBpZiAocGVuZGluZ01vZHVsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLlxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwZW5kaW5nSG90ID0gcGVuZGluZ01vZHVsZS5ob3Q7XG4gICAgICAgICAgaWYgKHBlbmRpbmdIb3QgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIltSZWZyZXNoXSBFeHBlY3RlZCBtb2R1bGUuaG90IHRvIGFsd2F5cyBleGlzdCBpbiBERVYuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEEgbW9kdWxlIGNhbiBiZSBhY2NlcHRlZCBtYW51YWxseSBmcm9tIHdpdGhpbiBpdHNlbGYuXG4gICAgICAgICAgbGV0IGNhbkFjY2VwdCA9IHBlbmRpbmdIb3QuX2RpZEFjY2VwdDtcbiAgICAgICAgICBpZiAoIWNhbkFjY2VwdCAmJiBSZWZyZXNoICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIE9yIFJlYWN0IFJlZnJlc2ggbWF5IG1hcmsgaXQgYWNjZXB0ZWQgYmFzZWQgb24gZXhwb3J0cy5cbiAgICAgICAgICAgIGNvbnN0IGlzQm91bmRhcnkgPSBpc1JlYWN0UmVmcmVzaEJvdW5kYXJ5KFxuICAgICAgICAgICAgICBSZWZyZXNoLFxuICAgICAgICAgICAgICBwZW5kaW5nTW9kdWxlLnB1YmxpY01vZHVsZS5leHBvcnRzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGlzQm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgY2FuQWNjZXB0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmVmcmVzaEJvdW5kYXJ5SURzLmFkZChwZW5kaW5nSUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2FuQWNjZXB0KSB7XG4gICAgICAgICAgICAvLyBEb24ndCBsb29rIGF0IHBhcmVudHMuXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElmIHdlIGJ1YmJsZSB0aHJvdWdoIHRoZSByb29mLCB0aGVyZSBpcyBubyB3YXkgdG8gZG8gYSBob3QgdXBkYXRlLlxuICAgICAgICAgIC8vIEJhaWwgb3V0IGFsdG9nZXRoZXIuIFRoaXMgaXMgdGhlIGZhaWx1cmUgY2FzZS5cbiAgICAgICAgICBjb25zdCBwYXJlbnRJRHMgPSBpbnZlcnNlRGVwZW5kZW5jaWVzW3BlbmRpbmdJRF07XG4gICAgICAgICAgaWYgKHBhcmVudElEcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIFJlbG9hZCB0aGUgYXBwIGJlY2F1c2UgdGhlIGhvdCByZWxvYWQgY2FuJ3Qgc3VjY2VlZC5cbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIHdvcmsgYm90aCBvbiB3ZWIgYW5kIFJlYWN0IE5hdGl2ZS5cbiAgICAgICAgICAgIHBlcmZvcm1GdWxsUmVmcmVzaChcIk5vIHJvb3QgYm91bmRhcnlcIiwge1xuICAgICAgICAgICAgICBzb3VyY2U6IG1vZCxcbiAgICAgICAgICAgICAgZmFpbGVkOiBwZW5kaW5nTW9kdWxlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaWRCYWlsT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhpcyBtb2R1bGUgY2FuJ3QgaGFuZGxlIHRoZSB1cGRhdGUgYnV0IG1heWJlIGFsbCBpdHMgcGFyZW50cyBjYW4/XG4gICAgICAgICAgLy8gUHV0IHRoZW0gYWxsIGluIHRoZSBxdWV1ZSB0byBydW4gdGhlIHNhbWUgc2V0IG9mIGNoZWNrcy5cbiAgICAgICAgICByZXR1cm4gcGFyZW50SURzO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiBkaWRCYWlsT3V0IC8vIFNob3VsZCB3ZSBzdG9wP1xuICAgICAgKS5yZXZlcnNlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgPT09IENZQ0xFX0RFVEVDVEVEKSB7XG4gICAgICAgIHBlcmZvcm1GdWxsUmVmcmVzaChcIkRlcGVuZGVuY3kgY3ljbGVcIiwge1xuICAgICAgICAgIHNvdXJjZTogbW9kLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgaWYgKGRpZEJhaWxPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIGhlcmUsIGl0IGlzIGxpa2VseSB0aGF0IGhvdCByZWxvYWQgd2lsbCBiZSBzdWNjZXNzZnVsLlxuICAgIC8vIFJ1biB0aGUgYWN0dWFsIGZhY3Rvcmllcy5cbiAgICBjb25zdCBzZWVuTW9kdWxlSURzID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXBkYXRlZE1vZHVsZUlEcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXBkYXRlZElEID0gdXBkYXRlZE1vZHVsZUlEc1tpXTtcbiAgICAgIGlmIChzZWVuTW9kdWxlSURzLmhhcyh1cGRhdGVkSUQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2Vlbk1vZHVsZUlEcy5hZGQodXBkYXRlZElEKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRNb2QgPSBtb2R1bGVzW3VwZGF0ZWRJRF07XG4gICAgICBpZiAodXBkYXRlZE1vZCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIltSZWZyZXNoXSBFeHBlY3RlZCB0byBmaW5kIHRoZSB1cGRhdGVkIG1vZHVsZS5cIik7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2RXhwb3J0cyA9IHVwZGF0ZWRNb2QucHVibGljTW9kdWxlLmV4cG9ydHM7XG4gICAgICBjb25zdCBkaWRFcnJvciA9IHJ1blVwZGF0ZWRNb2R1bGUoXG4gICAgICAgIHVwZGF0ZWRJRCxcbiAgICAgICAgdXBkYXRlZElEID09PSBpZCA/IGZhY3RvcnkgOiB1bmRlZmluZWQsXG4gICAgICAgIHVwZGF0ZWRJRCA9PT0gaWQgPyBkZXBlbmRlbmN5TWFwIDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgY29uc3QgbmV4dEV4cG9ydHMgPSB1cGRhdGVkTW9kLnB1YmxpY01vZHVsZS5leHBvcnRzO1xuICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgIC8vIFRoZSB1c2VyIHdhcyBzaG93biBhIHJlZGJveCBhYm91dCBtb2R1bGUgaW5pdGlhbGl6YXRpb24uXG4gICAgICAgIC8vIFRoZXJlJ3Mgbm90aGluZyBmb3IgdXMgdG8gZG8gaGVyZSB1bnRpbCBpdCdzIGZpeGVkLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmVmcmVzaEJvdW5kYXJ5SURzLmhhcyh1cGRhdGVkSUQpKSB7XG4gICAgICAgIC8vIFNpbmNlIHdlIGp1c3QgZXhlY3V0ZWQgdGhlIGNvZGUgZm9yIGl0LCBpdCdzIHBvc3NpYmxlXG4gICAgICAgIC8vIHRoYXQgdGhlIG5ldyBleHBvcnRzIG1ha2UgaXQgaW5lbGlnaWJsZSBmb3IgYmVpbmcgYSBib3VuZGFyeS5cbiAgICAgICAgY29uc3QgaXNOb0xvbmdlckFCb3VuZGFyeSA9ICFpc1JlYWN0UmVmcmVzaEJvdW5kYXJ5KFxuICAgICAgICAgIFJlZnJlc2gsXG4gICAgICAgICAgbmV4dEV4cG9ydHNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gSXQgY2FuIGFsc28gYmVjb21lIGluZWxpZ2libGUgaWYgaXRzIGV4cG9ydHMgYXJlIGluY29tcGF0aWJsZVxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBleHBvcnRzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgaWYgeW91IGFkZC9yZW1vdmUvY2hhbmdlIGV4cG9ydHMsIHdlJ2xsIHdhbnRcbiAgICAgICAgLy8gdG8gcmUtZXhlY3V0ZSB0aGUgaW1wb3J0aW5nIG1vZHVsZXMsIGFuZCBmb3JjZSB0aG9zZSBjb21wb25lbnRzXG4gICAgICAgIC8vIHRvIHJlLXJlbmRlci4gU2ltaWxhcmx5LCBpZiB5b3UgY29udmVydCBhIGNsYXNzIGNvbXBvbmVudFxuICAgICAgICAvLyB0byBhIGZ1bmN0aW9uLCB3ZSB3YW50IHRvIGludmFsaWRhdGUgdGhlIGJvdW5kYXJ5LlxuICAgICAgICBjb25zdCBkaWRJbnZhbGlkYXRlID0gc2hvdWxkSW52YWxpZGF0ZVJlYWN0UmVmcmVzaEJvdW5kYXJ5KFxuICAgICAgICAgIFJlZnJlc2gsXG4gICAgICAgICAgcHJldkV4cG9ydHMsXG4gICAgICAgICAgbmV4dEV4cG9ydHNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzTm9Mb25nZXJBQm91bmRhcnkgfHwgZGlkSW52YWxpZGF0ZSkge1xuICAgICAgICAgIC8vIFdlJ2xsIGJlIGNvbnNlcnZhdGl2ZS4gVGhlIG9ubHkgY2FzZSBpbiB3aGljaCB3ZSB3b24ndCBkbyBhIGZ1bGxcbiAgICAgICAgICAvLyByZWxvYWQgaXMgaWYgYWxsIHBhcmVudCBtb2R1bGVzIGFyZSBhbHNvIHJlZnJlc2ggYm91bmRhcmllcy5cbiAgICAgICAgICAvLyBJbiB0aGF0IGNhc2Ugd2UnbGwgYWRkIHRoZW0gdG8gdGhlIGN1cnJlbnQgcXVldWUuXG4gICAgICAgICAgY29uc3QgcGFyZW50SURzID0gaW52ZXJzZURlcGVuZGVuY2llc1t1cGRhdGVkSURdO1xuICAgICAgICAgIGlmIChwYXJlbnRJRHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBMb29rcyBsaWtlIHdlIGJ1YmJsZWQgdG8gdGhlIHJvb3QuIENhbid0IHJlY292ZXIgZnJvbSB0aGF0LlxuICAgICAgICAgICAgcGVyZm9ybUZ1bGxSZWZyZXNoKFxuICAgICAgICAgICAgICBpc05vTG9uZ2VyQUJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgPyBcIk5vIGxvbmdlciBhIGJvdW5kYXJ5XCJcbiAgICAgICAgICAgICAgICA6IFwiSW52YWxpZGF0ZWQgYm91bmRhcnlcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogbW9kLFxuICAgICAgICAgICAgICAgIGZhaWxlZDogdXBkYXRlZE1vZCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2NoZWR1bGUgYWxsIHBhcmVudCByZWZyZXNoIGJvdW5kYXJpZXMgdG8gcmUtcnVuIGluIHRoaXMgbG9vcC5cbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcmVudElEcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50SUQgPSBwYXJlbnRJRHNbal07XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRNb2QgPSBtb2R1bGVzW3BhcmVudElEXTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRNb2QgPT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbUmVmcmVzaF0gRXhwZWN0ZWQgdG8gZmluZCBwYXJlbnQgbW9kdWxlLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbkFjY2VwdFBhcmVudCA9IGlzUmVhY3RSZWZyZXNoQm91bmRhcnkoXG4gICAgICAgICAgICAgIFJlZnJlc2gsXG4gICAgICAgICAgICAgIHBhcmVudE1vZC5wdWJsaWNNb2R1bGUuZXhwb3J0c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjYW5BY2NlcHRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgLy8gQWxsIHBhcmVudHMgd2lsbCBoYXZlIHRvIHJlLXJ1biB0b28uXG4gICAgICAgICAgICAgIHJlZnJlc2hCb3VuZGFyeUlEcy5hZGQocGFyZW50SUQpO1xuICAgICAgICAgICAgICB1cGRhdGVkTW9kdWxlSURzLnB1c2gocGFyZW50SUQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVyZm9ybUZ1bGxSZWZyZXNoKFwiSW52YWxpZGF0ZWQgYm91bmRhcnlcIiwge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogbW9kLFxuICAgICAgICAgICAgICAgIGZhaWxlZDogcGFyZW50TW9kLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoUmVmcmVzaCAhPSBudWxsKSB7XG4gICAgICAvLyBEZWJvdW5jZSBhIGxpdHRsZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSB1cGRhdGVzIHF1ZXVlZCB1cC5cbiAgICAgIC8vIFRoaXMgaXMgYWxzbyB1c2VmdWwgYmVjYXVzZSBfX2FjY2VwdCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgaWYgKHJlYWN0UmVmcmVzaFRpbWVvdXQgPT0gbnVsbCkge1xuICAgICAgICByZWFjdFJlZnJlc2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVhY3RSZWZyZXNoVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgLy8gVXBkYXRlIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgICAgICAgUmVmcmVzaC5wZXJmb3JtUmVhY3RSZWZyZXNoKCk7XG4gICAgICAgIH0sIDMwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IHRvcG9sb2dpY2FsU29ydCA9IGZ1bmN0aW9uIChyb290cywgZ2V0RWRnZXMsIGVhcmx5U3RvcCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU2V0KCk7XG4gICAgZnVuY3Rpb24gdHJhdmVyc2VEZXBlbmRlbnROb2Rlcyhub2RlKSB7XG4gICAgICBpZiAoc3RhY2suaGFzKG5vZGUpKSB7XG4gICAgICAgIHRocm93IENZQ0xFX0RFVEVDVEVEO1xuICAgICAgfVxuICAgICAgaWYgKHZpc2l0ZWQuaGFzKG5vZGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICAgICAgc3RhY2suYWRkKG5vZGUpO1xuICAgICAgY29uc3QgZGVwZW5kZW50Tm9kZXMgPSBnZXRFZGdlcyhub2RlKTtcbiAgICAgIGlmIChlYXJseVN0b3Aobm9kZSkpIHtcbiAgICAgICAgc3RhY2suZGVsZXRlKG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkZXBlbmRlbnROb2Rlcy5mb3JFYWNoKChkZXBlbmRlbnQpID0+IHtcbiAgICAgICAgdHJhdmVyc2VEZXBlbmRlbnROb2RlcyhkZXBlbmRlbnQpO1xuICAgICAgfSk7XG4gICAgICBzdGFjay5kZWxldGUobm9kZSk7XG4gICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICB9XG4gICAgcm9vdHMuZm9yRWFjaCgocm9vdCkgPT4ge1xuICAgICAgdHJhdmVyc2VEZXBlbmRlbnROb2Rlcyhyb290KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBjb25zdCBydW5VcGRhdGVkTW9kdWxlID0gZnVuY3Rpb24gKGlkLCBmYWN0b3J5LCBkZXBlbmRlbmN5TWFwKSB7XG4gICAgY29uc3QgbW9kID0gbW9kdWxlc1tpZF07XG4gICAgaWYgKG1vZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbUmVmcmVzaF0gRXhwZWN0ZWQgdG8gZmluZCB0aGUgbW9kdWxlLlwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBob3QgfSA9IG1vZDtcbiAgICBpZiAoIWhvdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW1JlZnJlc2hdIEV4cGVjdGVkIG1vZHVsZS5ob3QgdG8gYWx3YXlzIGV4aXN0IGluIERFVi5cIik7XG4gICAgfVxuICAgIGlmIChob3QuX2Rpc3Bvc2VDYWxsYmFjaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaG90Ll9kaXNwb3NlQ2FsbGJhY2soKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYEVycm9yIHdoaWxlIGNhbGxpbmcgZGlzcG9zZSBoYW5kbGVyIGZvciBtb2R1bGUgJHtpZH06IGAsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhY3RvcnkpIHtcbiAgICAgIG1vZC5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICB9XG4gICAgaWYgKGRlcGVuZGVuY3lNYXApIHtcbiAgICAgIG1vZC5kZXBlbmRlbmN5TWFwID0gZGVwZW5kZW5jeU1hcDtcbiAgICB9XG4gICAgbW9kLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgbW9kLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIG1vZC5pbXBvcnRlZEFsbCA9IEVNUFRZO1xuICAgIG1vZC5pbXBvcnRlZERlZmF1bHQgPSBFTVBUWTtcbiAgICBtb2QuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGNvbnN0IHByZXZFeHBvcnRzID0gbW9kLnB1YmxpY01vZHVsZS5leHBvcnRzO1xuICAgIG1vZC5wdWJsaWNNb2R1bGUuZXhwb3J0cyA9IHt9O1xuICAgIGhvdC5fZGlkQWNjZXB0ID0gZmFsc2U7XG4gICAgaG90Ll9hY2NlcHRDYWxsYmFjayA9IG51bGw7XG4gICAgaG90Ll9kaXNwb3NlQ2FsbGJhY2sgPSBudWxsO1xuICAgIG1ldHJvUmVxdWlyZShpZCk7XG4gICAgaWYgKG1vZC5oYXNFcnJvcikge1xuICAgICAgLy8gVGhpcyBlcnJvciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkIHZpYSBhIHJlZGJveC5cbiAgICAgIC8vIFdlIGtub3cgaXQncyBsaWtlbHkgYSB0eXBvIG9yIHNvbWUgbWlzdGFrZSB0aGF0IHdhcyBqdXN0IGludHJvZHVjZWQuXG4gICAgICAvLyBPdXIgZ29hbCBub3cgaXMgdG8ga2VlcCB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24gd29ya2luZyBzbyB0aGF0IGJ5XG4gICAgICAvLyB0aGUgdGltZSB1c2VyIGZpeGVzIHRoZSBlcnJvciwgdGhlIGFwcCBpc24ndCBjb21wbGV0ZWx5IGRlc3Ryb3llZFxuICAgICAgLy8gdW5kZXJuZWF0aCB0aGUgcmVkYm94LiBTbyB3ZSdsbCByZXZlcnQgdGhlIG1vZHVsZSBvYmplY3QgdG8gdGhlIGxhc3RcbiAgICAgIC8vIHN1Y2Nlc3NmdWwgZXhwb3J0IGFuZCBzdG9wIHByb3BhZ2F0aW5nIHRoaXMgdXBkYXRlLlxuICAgICAgbW9kLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICBtb2QuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBtb2QuZXJyb3IgPSBudWxsO1xuICAgICAgbW9kLnB1YmxpY01vZHVsZS5leHBvcnRzID0gcHJldkV4cG9ydHM7XG4gICAgICAvLyBXZSBlcnJvcmVkLiBTdG9wIHRoZSB1cGRhdGUuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGhvdC5fYWNjZXB0Q2FsbGJhY2spIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhvdC5fYWNjZXB0Q2FsbGJhY2soKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYEVycm9yIHdoaWxlIGNhbGxpbmcgYWNjZXB0IGhhbmRsZXIgZm9yIG1vZHVsZSAke2lkfTogYCxcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBObyBlcnJvci5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG4gIGNvbnN0IHBlcmZvcm1GdWxsUmVmcmVzaCA9IChyZWFzb24sIG1vZHVsZXMpID0+IHtcbiAgICAvKiBnbG9iYWwgd2luZG93ICovXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgd2luZG93LmxvY2F0aW9uICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB3aW5kb3cubG9jYXRpb24ucmVsb2FkID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgUmVmcmVzaCA9IHJlcXVpcmVSZWZyZXNoKCk7XG4gICAgICBpZiAoUmVmcmVzaCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5hbWUgPSBtb2R1bGVzLnNvdXJjZT8udmVyYm9zZU5hbWUgPz8gXCJ1bmtub3duXCI7XG4gICAgICAgIGNvbnN0IGZhaWxlZE5hbWUgPSBtb2R1bGVzLmZhaWxlZD8udmVyYm9zZU5hbWUgPz8gXCJ1bmtub3duXCI7XG4gICAgICAgIFJlZnJlc2gucGVyZm9ybUZ1bGxSZWZyZXNoKFxuICAgICAgICAgIGBGYXN0IFJlZnJlc2ggLSAke3JlYXNvbn0gPCR7c291cmNlTmFtZX0+IDwke2ZhaWxlZE5hbWV9PmBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkNvdWxkIG5vdCByZWxvYWQgdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGFuIGVkaXQuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBNb2R1bGVzIHRoYXQgb25seSBleHBvcnQgY29tcG9uZW50cyBiZWNvbWUgUmVhY3QgUmVmcmVzaCBib3VuZGFyaWVzLlxuICB2YXIgaXNSZWFjdFJlZnJlc2hCb3VuZGFyeSA9IGZ1bmN0aW9uIChSZWZyZXNoLCBtb2R1bGVFeHBvcnRzKSB7XG4gICAgaWYgKFJlZnJlc2guaXNMaWtlbHlDb21wb25lbnRUeXBlKG1vZHVsZUV4cG9ydHMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG1vZHVsZUV4cG9ydHMgPT0gbnVsbCB8fCB0eXBlb2YgbW9kdWxlRXhwb3J0cyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gRXhpdCBpZiB3ZSBjYW4ndCBpdGVyYXRlIG92ZXIgZXhwb3J0cy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IGhhc0V4cG9ydHMgPSBmYWxzZTtcbiAgICBsZXQgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHMgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgIGhhc0V4cG9ydHMgPSB0cnVlO1xuICAgICAgaWYgKGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtb2R1bGVFeHBvcnRzLCBrZXkpO1xuICAgICAgaWYgKGRlc2MgJiYgZGVzYy5nZXQpIHtcbiAgICAgICAgLy8gRG9uJ3QgaW52b2tlIGdldHRlcnMgYXMgdGhleSBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gbW9kdWxlRXhwb3J0c1trZXldO1xuICAgICAgaWYgKCFSZWZyZXNoLmlzTGlrZWx5Q29tcG9uZW50VHlwZShleHBvcnRWYWx1ZSkpIHtcbiAgICAgICAgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc0V4cG9ydHMgJiYgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHM7XG4gIH07XG4gIHZhciBzaG91bGRJbnZhbGlkYXRlUmVhY3RSZWZyZXNoQm91bmRhcnkgPSAoXG4gICAgUmVmcmVzaCxcbiAgICBwcmV2RXhwb3J0cyxcbiAgICBuZXh0RXhwb3J0c1xuICApID0+IHtcbiAgICBjb25zdCBwcmV2U2lnbmF0dXJlID0gZ2V0UmVmcmVzaEJvdW5kYXJ5U2lnbmF0dXJlKFJlZnJlc2gsIHByZXZFeHBvcnRzKTtcbiAgICBjb25zdCBuZXh0U2lnbmF0dXJlID0gZ2V0UmVmcmVzaEJvdW5kYXJ5U2lnbmF0dXJlKFJlZnJlc2gsIG5leHRFeHBvcnRzKTtcbiAgICBpZiAocHJldlNpZ25hdHVyZS5sZW5ndGggIT09IG5leHRTaWduYXR1cmUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXh0U2lnbmF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJldlNpZ25hdHVyZVtpXSAhPT0gbmV4dFNpZ25hdHVyZVtpXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIFdoZW4gdGhpcyBzaWduYXR1cmUgY2hhbmdlcywgaXQncyB1bnNhZmUgdG8gc3RvcCBhdCB0aGlzIHJlZnJlc2ggYm91bmRhcnkuXG4gIHZhciBnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmUgPSAoUmVmcmVzaCwgbW9kdWxlRXhwb3J0cykgPT4ge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IFtdO1xuICAgIHNpZ25hdHVyZS5wdXNoKFJlZnJlc2guZ2V0RmFtaWx5QnlUeXBlKG1vZHVsZUV4cG9ydHMpKTtcbiAgICBpZiAobW9kdWxlRXhwb3J0cyA9PSBudWxsIHx8IHR5cGVvZiBtb2R1bGVFeHBvcnRzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBFeGl0IGlmIHdlIGNhbid0IGl0ZXJhdGUgb3ZlciBleHBvcnRzLlxuICAgICAgLy8gKFRoaXMgaXMgaW1wb3J0YW50IGZvciBsZWdhY3kgZW52aXJvbm1lbnRzLilcbiAgICAgIHJldHVybiBzaWduYXR1cmU7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiX19lc01vZHVsZVwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobW9kdWxlRXhwb3J0cywga2V5KTtcbiAgICAgIGlmIChkZXNjICYmIGRlc2MuZ2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwb3J0VmFsdWUgPSBtb2R1bGVFeHBvcnRzW2tleV07XG4gICAgICBzaWduYXR1cmUucHVzaChrZXkpO1xuICAgICAgc2lnbmF0dXJlLnB1c2goUmVmcmVzaC5nZXRGYW1pbHlCeVR5cGUoZXhwb3J0VmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgfTtcbiAgdmFyIHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaCA9IChSZWZyZXNoLCBtb2R1bGVFeHBvcnRzLCBtb2R1bGVJRCkgPT4ge1xuICAgIFJlZnJlc2gucmVnaXN0ZXIobW9kdWxlRXhwb3J0cywgbW9kdWxlSUQgKyBcIiAlZXhwb3J0cyVcIik7XG4gICAgaWYgKG1vZHVsZUV4cG9ydHMgPT0gbnVsbCB8fCB0eXBlb2YgbW9kdWxlRXhwb3J0cyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gRXhpdCBpZiB3ZSBjYW4ndCBpdGVyYXRlIG92ZXIgZXhwb3J0cy5cbiAgICAgIC8vIChUaGlzIGlzIGltcG9ydGFudCBmb3IgbGVnYWN5IGVudmlyb25tZW50cy4pXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG1vZHVsZUV4cG9ydHMsIGtleSk7XG4gICAgICBpZiAoZGVzYyAmJiBkZXNjLmdldCkge1xuICAgICAgICAvLyBEb24ndCBpbnZva2UgZ2V0dGVycyBhcyB0aGV5IG1heSBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBleHBvcnRWYWx1ZSA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgIGNvbnN0IHR5cGVJRCA9IG1vZHVsZUlEICsgXCIgJWV4cG9ydHMlIFwiICsga2V5O1xuICAgICAgUmVmcmVzaC5yZWdpc3RlcihleHBvcnRWYWx1ZSwgdHlwZUlEKTtcbiAgICB9XG4gIH07XG4gIGdsb2JhbC5fX2FjY2VwdCA9IG1ldHJvSG90VXBkYXRlTW9kdWxlO1xufVxuaWYgKF9fREVWX18pIHtcbiAgLy8gVGhlIG1ldHJvIHJlcXVpcmUgcG9seWZpbGwgY2FuIG5vdCBoYXZlIG1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gIC8vIFRoZSBTeXN0cmFjZSBhbmQgUmVhY3RSZWZyZXNoIGRlcGVuZGVuY2llcyBhcmUsIHRoZXJlZm9yZSwgbWFkZSBwdWJsaWNseVxuICAvLyBhdmFpbGFibGUuIElkZWFsbHksIHRoZSBkZXBlbmRlbmN5IHdvdWxkIGJlIGludmVyc2VkIGluIGEgd2F5IHRoYXRcbiAgLy8gU3lzdHJhY2UgLyBSZWFjdFJlZnJlc2ggY291bGQgaW50ZWdyYXRlIGludG8gTWV0cm8gcmF0aGVyIHRoYW5cbiAgLy8gaGF2aW5nIHRvIG1ha2UgdGhlbSBwdWJsaWNseSBhdmFpbGFibGUuXG5cbiAgdmFyIHJlcXVpcmVTeXN0cmFjZSA9IGZ1bmN0aW9uIHJlcXVpcmVTeXN0cmFjZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBnbG9iYWxbX19NRVRST19HTE9CQUxfUFJFRklYX18gKyBcIl9fU1lTVFJBQ0VcIl0gfHwgbWV0cm9SZXF1aXJlLlN5c3RyYWNlXG4gICAgKTtcbiAgfTtcbiAgdmFyIHJlcXVpcmVSZWZyZXNoID0gZnVuY3Rpb24gcmVxdWlyZVJlZnJlc2goKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgZ2xvYmFsW19fTUVUUk9fR0xPQkFMX1BSRUZJWF9fICsgXCJfX1JlYWN0UmVmcmVzaFwiXSB8fCBtZXRyb1JlcXVpcmUuUmVmcmVzaFxuICAgICk7XG4gIH07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQHBvbHlmaWxsXG4gKiBAbm9saW50XG4gKiBAZm9ybWF0XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tc2hhZG93LCBlcWVxZXEsIGN1cmx5LCBuby11bnVzZWQtdmFycywgbm8tdm9pZCwgbm8tY29udHJvbC1yZWdleCAgKi9cblxuLyoqXG4gKiBUaGlzIHBpcGVzIGFsbCBvZiBvdXIgY29uc29sZSBsb2dnaW5nIGZ1bmN0aW9ucyB0byBuYXRpdmUgbG9nZ2luZyBzbyB0aGF0XG4gKiBKYXZhU2NyaXB0IGVycm9ycyBpbiByZXF1aXJlZCBtb2R1bGVzIHNob3cgdXAgaW4gWGNvZGUgdmlhIE5TTG9nLlxuICovXG5jb25zdCBpbnNwZWN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4gIC8vXG4gIC8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4gIC8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbiAgLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gIC8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbiAgLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuICAvLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbiAgLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gIC8vXG4gIC8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4gIC8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICAvL1xuICAvLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4gIC8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuICAvLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbiAgLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4gIC8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbiAgLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAgLy9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2Jsb2IvbWFzdGVyL2xpYi91dGlsLmpzXG5cbiAgZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgICB2YXIgY3R4ID0ge1xuICAgICAgc2VlbjogW10sXG4gICAgICBmb3JtYXRWYWx1ZUNhbGxzOiAwLFxuICAgICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3IsXG4gICAgfTtcbiAgICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIG9wdHMuZGVwdGgpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgICB2YXIgaGFzaCA9IHt9O1xuXG4gICAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbiAodmFsLCBpZHgpIHtcbiAgICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGFzaDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAgIGN0eC5mb3JtYXRWYWx1ZUNhbGxzKys7XG4gICAgaWYgKGN0eC5mb3JtYXRWYWx1ZUNhbGxzID4gMjAwKSB7XG4gICAgICByZXR1cm4gYFtUT08gQklHIGZvcm1hdFZhbHVlQ2FsbHMgJHtjdHguZm9ybWF0VmFsdWVDYWxsc30gZXhjZWVkZWQgbGltaXQgb2YgMjAwXWA7XG4gICAgfVxuXG4gICAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICAgIGlmIChwcmltaXRpdmUpIHtcbiAgICAgIHJldHVybiBwcmltaXRpdmU7XG4gICAgfVxuXG4gICAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICAgIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gICAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gICAgaWYgKFxuICAgICAgaXNFcnJvcih2YWx1ZSkgJiZcbiAgICAgIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlID0gJycsXG4gICAgICBhcnJheSA9IGZhbHNlLFxuICAgICAgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAgIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGFycmF5ID0gdHJ1ZTtcbiAgICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gICAgfVxuXG4gICAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgICB9XG5cbiAgICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgICB2YXIgb3V0cHV0O1xuICAgIGlmIChhcnJheSkge1xuICAgICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KFxuICAgICAgICAgIGN0eCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByZWN1cnNlVGltZXMsXG4gICAgICAgICAgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGFycmF5LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICB2YXIgc2ltcGxlID1cbiAgICAgICAgXCInXCIgK1xuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICAgICAgICAucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArXG4gICAgICAgIFwiJ1wiO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIodmFsdWUpKSByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICAgIGlmIChpc0Jvb2xlYW4odmFsdWUpKSByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gICAgaWYgKGlzTnVsbCh2YWx1ZSkpIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICAgIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goXG4gICAgICAgICAgZm9ybWF0UHJvcGVydHkoXG4gICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHJlY3Vyc2VUaW1lcyxcbiAgICAgICAgICAgIHZpc2libGVLZXlzLFxuICAgICAgICAgICAgU3RyaW5nKGkpLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfVxuICAgIH1cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKFxuICAgICAgICAgIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgdHJ1ZSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICAgIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHt2YWx1ZTogdmFsdWVba2V5XX07XG4gICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgICB9XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgICBzdHIgPSBzdHJcbiAgICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignXFxuJylcbiAgICAgICAgICAgICAgLnNsaWNlKDIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHIgPVxuICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgIHN0clxuICAgICAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgICB9XG4gICAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIG5hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IG5hbWVcbiAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gICAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3VyKSB7XG4gICAgICBudW1MaW5lc0VzdCsrO1xuICAgICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICAgIH0sIDApO1xuXG4gICAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBicmFjZXNbMF0gK1xuICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgJyAnICtcbiAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgJyAnICtcbiAgICAgICAgYnJhY2VzWzFdXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG4gIH1cblxuICAvLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbiAgLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG4gIGZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgICByZXR1cm4gYXJnID09PSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG4gIH1cblxuICBmdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICAgIHJldHVybiAoXG4gICAgICBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcilcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xuICB9XG5cbiAgcmV0dXJuIGluc3BlY3Q7XG59KSgpO1xuXG5jb25zdCBPQkpFQ1RfQ09MVU1OX05BTUUgPSAnKGluZGV4KSc7XG5jb25zdCBMT0dfTEVWRUxTID0ge1xuICB0cmFjZTogMCxcbiAgaW5mbzogMSxcbiAgd2FybjogMixcbiAgZXJyb3I6IDMsXG59O1xuY29uc3QgSU5TUEVDVE9SX0xFVkVMUyA9IFtdO1xuSU5TUEVDVE9SX0xFVkVMU1tMT0dfTEVWRUxTLnRyYWNlXSA9ICdkZWJ1Zyc7XG5JTlNQRUNUT1JfTEVWRUxTW0xPR19MRVZFTFMuaW5mb10gPSAnbG9nJztcbklOU1BFQ1RPUl9MRVZFTFNbTE9HX0xFVkVMUy53YXJuXSA9ICd3YXJuaW5nJztcbklOU1BFQ1RPUl9MRVZFTFNbTE9HX0xFVkVMUy5lcnJvcl0gPSAnZXJyb3InO1xuXG4vLyBTdHJpcCB0aGUgaW5uZXIgZnVuY3Rpb24gaW4gZ2V0TmF0aXZlTG9nRnVuY3Rpb24oKSwgaWYgaW4gZGV2IGFsc29cbi8vIHN0cmlwIG1ldGhvZCBwcmludGluZyB0byBvcmlnaW5hbENvbnNvbGUuXG5jb25zdCBJTlNQRUNUT1JfRlJBTUVTX1RPX1NLSVAgPSBfX0RFVl9fID8gMiA6IDE7XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZUxvZ0Z1bmN0aW9uKGxldmVsKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHN0cjtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgc3RyID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBBcnJheS5wcm90b3R5cGUubWFwXG4gICAgICAgIC5jYWxsKGFyZ3VtZW50cywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHJldHVybiBpbnNwZWN0KGFyZywge2RlcHRoOiAxMH0pO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICAvLyBUUklDS1lcbiAgICAvLyBJZiBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGUgY29kZSBhYm92ZSBjb2xsYXBzZXMgdGhlbSBhbGxcbiAgICAvLyBpbnRvIGEgc2luZ2xlIGZvcm1hdHRlZCBzdHJpbmcuIFRoaXMgdHJhbnNmb3JtIHdyYXBzIHN0cmluZyBhcmd1bWVudHMgaW5cbiAgICAvLyBzaW5nbGUgcXVvdGVzIChlLmcuIFwiZm9vXCIgLT4gXCInZm9vJ1wiKSB3aGljaCB0aGVuIGJyZWFrcyB0aGUgXCJXYXJuaW5nOlwiXG4gICAgLy8gY2hlY2sgYmVsb3cuIFNvIGl0J3MgaW1wb3J0YW50IHRoYXQgd2UgbG9vayBhdCB0aGUgZmlyc3QgYXJndW1lbnQsIHJhdGhlclxuICAgIC8vIHRoYW4gdGhlIGZvcm1hdHRlZCBhcmd1bWVudCBzdHJpbmcuXG4gICAgY29uc3QgZmlyc3RBcmcgPSBhcmd1bWVudHNbMF07XG5cbiAgICBsZXQgbG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgZmlyc3RBcmcgPT09ICdzdHJpbmcnICYmXG4gICAgICBmaXJzdEFyZy5zbGljZSgwLCA5KSA9PT0gJ1dhcm5pbmc6ICcgJiZcbiAgICAgIGxvZ0xldmVsID49IExPR19MRVZFTFMuZXJyb3JcbiAgICApIHtcbiAgICAgIC8vIFJlYWN0IHdhcm5pbmdzIHVzZSBjb25zb2xlLmVycm9yIHNvIHRoYXQgYSBzdGFjayB0cmFjZSBpcyBzaG93bixcbiAgICAgIC8vIGJ1dCB3ZSBkb24ndCAoY3VycmVudGx5KSB3YW50IHRoZXNlIHRvIHNob3cgYSByZWRib3hcbiAgICAgIC8vIChOb3RlOiBMb2dpYyBkdXBsaWNhdGVkIGluIEV4Y2VwdGlvbnNNYW5hZ2VyLmpzLilcbiAgICAgIGxvZ0xldmVsID0gTE9HX0xFVkVMUy53YXJuO1xuICAgIH1cbiAgICBpZiAoZ2xvYmFsLl9faW5zcGVjdG9yTG9nKSB7XG4gICAgICBnbG9iYWwuX19pbnNwZWN0b3JMb2coXG4gICAgICAgIElOU1BFQ1RPUl9MRVZFTFNbbG9nTGV2ZWxdLFxuICAgICAgICBzdHIsXG4gICAgICAgIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICAgICAgSU5TUEVDVE9SX0ZSQU1FU19UT19TS0lQLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGdyb3VwU3RhY2subGVuZ3RoKSB7XG4gICAgICBzdHIgPSBncm91cEZvcm1hdCgnJywgc3RyKTtcbiAgICB9XG4gICAgZ2xvYmFsLm5hdGl2ZUxvZ2dpbmdIb29rKHN0ciwgbG9nTGV2ZWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXBlYXQoZWxlbWVudCwgbikge1xuICByZXR1cm4gQXJyYXkuYXBwbHkobnVsbCwgQXJyYXkobikpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25zb2xlVGFibGVQb2x5ZmlsbChyb3dzKSB7XG4gIC8vIGNvbnZlcnQgb2JqZWN0IC0+IGFycmF5XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSkge1xuICAgIHZhciBkYXRhID0gcm93cztcbiAgICByb3dzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgdmFyIHJvdyA9IGRhdGFba2V5XTtcbiAgICAgICAgcm93W09CSkVDVF9DT0xVTU5fTkFNRV0gPSBrZXk7XG4gICAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICBnbG9iYWwubmF0aXZlTG9nZ2luZ0hvb2soJycsIExPR19MRVZFTFMuaW5mbyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNvbHVtbnMgPSBPYmplY3Qua2V5cyhyb3dzWzBdKS5zb3J0KCk7XG4gIHZhciBzdHJpbmdSb3dzID0gW107XG4gIHZhciBjb2x1bW5XaWR0aHMgPSBbXTtcblxuICAvLyBDb252ZXJ0IGVhY2ggY2VsbCB0byBhIHN0cmluZy4gQWxzb1xuICAvLyBmaWd1cmUgb3V0IG1heCBjZWxsIHdpZHRoIGZvciBlYWNoIGNvbHVtblxuICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGssIGkpIHtcbiAgICBjb2x1bW5XaWR0aHNbaV0gPSBrLmxlbmd0aDtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvd3MubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBjZWxsU3RyID0gKHJvd3Nbal1ba10gfHwgJz8nKS50b1N0cmluZygpO1xuICAgICAgc3RyaW5nUm93c1tqXSA9IHN0cmluZ1Jvd3Nbal0gfHwgW107XG4gICAgICBzdHJpbmdSb3dzW2pdW2ldID0gY2VsbFN0cjtcbiAgICAgIGNvbHVtbldpZHRoc1tpXSA9IE1hdGgubWF4KGNvbHVtbldpZHRoc1tpXSwgY2VsbFN0ci5sZW5ndGgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSm9pbiBhbGwgZWxlbWVudHMgaW4gdGhlIHJvdyBpbnRvIGEgc2luZ2xlIHN0cmluZyB3aXRoIHwgc2VwYXJhdG9yc1xuICAvLyAoYXBwZW5kcyBleHRyYSBzcGFjZXMgdG8gZWFjaCBjZWxsIHRvIG1ha2Ugc2VwYXJhdG9ycyAgfCBhbGlnbmVkKVxuICBmdW5jdGlvbiBqb2luUm93KHJvdywgc3BhY2UpIHtcbiAgICB2YXIgY2VsbHMgPSByb3cubWFwKGZ1bmN0aW9uIChjZWxsLCBpKSB7XG4gICAgICB2YXIgZXh0cmFTcGFjZXMgPSByZXBlYXQoJyAnLCBjb2x1bW5XaWR0aHNbaV0gLSBjZWxsLmxlbmd0aCkuam9pbignJyk7XG4gICAgICByZXR1cm4gY2VsbCArIGV4dHJhU3BhY2VzO1xuICAgIH0pO1xuICAgIHNwYWNlID0gc3BhY2UgfHwgJyAnO1xuICAgIHJldHVybiBjZWxscy5qb2luKHNwYWNlICsgJ3wnICsgc3BhY2UpO1xuICB9XG5cbiAgdmFyIHNlcGFyYXRvcnMgPSBjb2x1bW5XaWR0aHMubWFwKGZ1bmN0aW9uIChjb2x1bW5XaWR0aCkge1xuICAgIHJldHVybiByZXBlYXQoJy0nLCBjb2x1bW5XaWR0aCkuam9pbignJyk7XG4gIH0pO1xuICB2YXIgc2VwYXJhdG9yUm93ID0gam9pblJvdyhzZXBhcmF0b3JzLCAnLScpO1xuICB2YXIgaGVhZGVyID0gam9pblJvdyhjb2x1bW5zKTtcbiAgdmFyIHRhYmxlID0gW2hlYWRlciwgc2VwYXJhdG9yUm93XTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICB0YWJsZS5wdXNoKGpvaW5Sb3coc3RyaW5nUm93c1tpXSkpO1xuICB9XG5cbiAgLy8gTm90aWNlIGV4dHJhIGVtcHR5IGxpbmUgYXQgdGhlIGJlZ2lubmluZy5cbiAgLy8gTmF0aXZlIGxvZ2dpbmcgaG9vayBhZGRzIFwiUkNUTG9nID5cIiBhdCB0aGUgZnJvbnQgb2YgZXZlcnlcbiAgLy8gbG9nZ2VkIHN0cmluZywgd2hpY2ggd291bGQgc2hpZnQgdGhlIGhlYWRlciBhbmQgc2NyZXcgdXBcbiAgLy8gdGhlIHRhYmxlXG4gIGdsb2JhbC5uYXRpdmVMb2dnaW5nSG9vaygnXFxuJyArIHRhYmxlLmpvaW4oJ1xcbicpLCBMT0dfTEVWRUxTLmluZm8pO1xufVxuXG5jb25zdCBHUk9VUF9QQUQgPSAnXFx1MjUwMic7IC8vIEJveCBsaWdodCB2ZXJ0aWNhbFxuY29uc3QgR1JPVVBfT1BFTiA9ICdcXHUyNTEwJzsgLy8gQm94IGxpZ2h0IGRvd24rbGVmdFxuY29uc3QgR1JPVVBfQ0xPU0UgPSAnXFx1MjUxOCc7IC8vIEJveCBsaWdodCB1cCtsZWZ0XG5cbmNvbnN0IGdyb3VwU3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gZ3JvdXBGb3JtYXQocHJlZml4LCBtc2cpIHtcbiAgLy8gSW5zZXJ0IGdyb3VwIGZvcm1hdHRpbmcgYmVmb3JlIHRoZSBjb25zb2xlIG1lc3NhZ2VcbiAgcmV0dXJuIGdyb3VwU3RhY2suam9pbignJykgKyBwcmVmaXggKyAnICcgKyAobXNnIHx8ICcnKTtcbn1cblxuZnVuY3Rpb24gY29uc29sZUdyb3VwUG9seWZpbGwobGFiZWwpIHtcbiAgZ2xvYmFsLm5hdGl2ZUxvZ2dpbmdIb29rKGdyb3VwRm9ybWF0KEdST1VQX09QRU4sIGxhYmVsKSwgTE9HX0xFVkVMUy5pbmZvKTtcbiAgZ3JvdXBTdGFjay5wdXNoKEdST1VQX1BBRCk7XG59XG5cbmZ1bmN0aW9uIGNvbnNvbGVHcm91cENvbGxhcHNlZFBvbHlmaWxsKGxhYmVsKSB7XG4gIGdsb2JhbC5uYXRpdmVMb2dnaW5nSG9vayhncm91cEZvcm1hdChHUk9VUF9DTE9TRSwgbGFiZWwpLCBMT0dfTEVWRUxTLmluZm8pO1xuICBncm91cFN0YWNrLnB1c2goR1JPVVBfUEFEKTtcbn1cblxuZnVuY3Rpb24gY29uc29sZUdyb3VwRW5kUG9seWZpbGwoKSB7XG4gIGdyb3VwU3RhY2sucG9wKCk7XG4gIGdsb2JhbC5uYXRpdmVMb2dnaW5nSG9vayhncm91cEZvcm1hdChHUk9VUF9DTE9TRSksIExPR19MRVZFTFMuaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGNvbnNvbGVBc3NlcnRQb2x5ZmlsbChleHByZXNzaW9uLCBsYWJlbCkge1xuICBpZiAoIWV4cHJlc3Npb24pIHtcbiAgICBnbG9iYWwubmF0aXZlTG9nZ2luZ0hvb2soJ0Fzc2VydGlvbiBmYWlsZWQ6ICcgKyBsYWJlbCwgTE9HX0xFVkVMUy5lcnJvcik7XG4gIH1cbn1cblxuaWYgKGdsb2JhbC5uYXRpdmVMb2dnaW5nSG9vaykge1xuICBjb25zdCBvcmlnaW5hbENvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGBjb25zb2xlYCBhcyBgb3JpZ2luYWxDb25zb2xlYFxuICBpZiAoX19ERVZfXyAmJiBvcmlnaW5hbENvbnNvbGUpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdjb25zb2xlJyk7XG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdvcmlnaW5hbENvbnNvbGUnLCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICBnbG9iYWwuY29uc29sZSA9IHtcbiAgICBlcnJvcjogZ2V0TmF0aXZlTG9nRnVuY3Rpb24oTE9HX0xFVkVMUy5lcnJvciksXG4gICAgaW5mbzogZ2V0TmF0aXZlTG9nRnVuY3Rpb24oTE9HX0xFVkVMUy5pbmZvKSxcbiAgICBsb2c6IGdldE5hdGl2ZUxvZ0Z1bmN0aW9uKExPR19MRVZFTFMuaW5mbyksXG4gICAgd2FybjogZ2V0TmF0aXZlTG9nRnVuY3Rpb24oTE9HX0xFVkVMUy53YXJuKSxcbiAgICB0cmFjZTogZ2V0TmF0aXZlTG9nRnVuY3Rpb24oTE9HX0xFVkVMUy50cmFjZSksXG4gICAgZGVidWc6IGdldE5hdGl2ZUxvZ0Z1bmN0aW9uKExPR19MRVZFTFMudHJhY2UpLFxuICAgIHRhYmxlOiBjb25zb2xlVGFibGVQb2x5ZmlsbCxcbiAgICBncm91cDogY29uc29sZUdyb3VwUG9seWZpbGwsXG4gICAgZ3JvdXBFbmQ6IGNvbnNvbGVHcm91cEVuZFBvbHlmaWxsLFxuICAgIGdyb3VwQ29sbGFwc2VkOiBjb25zb2xlR3JvdXBDb2xsYXBzZWRQb2x5ZmlsbCxcbiAgICBhc3NlcnQ6IGNvbnNvbGVBc3NlcnRQb2x5ZmlsbCxcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc29sZSwgJ19pc1BvbHlmaWxsZWQnLCB7XG4gICAgdmFsdWU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIElmIGF2YWlsYWJsZSwgYWxzbyBjYWxsIHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWV0aG9kIHNpbmNlIHRoYXQgaXNcbiAgLy8gc29tZXRpbWVzIHVzZWZ1bC4gRXg6IG9uIE9TIFgsIHRoaXMgd2lsbCBsZXQgeW91IHNlZSByaWNoIG91dHB1dCBpblxuICAvLyB0aGUgU2FmYXJpIFdlYiBJbnNwZWN0b3IgY29uc29sZS5cbiAgaWYgKF9fREVWX18gJiYgb3JpZ2luYWxDb25zb2xlKSB7XG4gICAgT2JqZWN0LmtleXMoY29uc29sZSkuZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICAgIGNvbnN0IHJlYWN0TmF0aXZlTWV0aG9kID0gY29uc29sZVttZXRob2ROYW1lXTtcbiAgICAgIGlmIChvcmlnaW5hbENvbnNvbGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgICAgY29uc29sZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBvcmlnaW5hbENvbnNvbGVbbWV0aG9kTmFtZV0oLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICByZWFjdE5hdGl2ZU1ldGhvZC5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcG9seWZpbGwgYnV0XG4gICAgLy8gd2Ugc3RpbGwgc2hvdWxkIHBhc3MgdGhlbSB0byBvcmlnaW5hbCBjb25zb2xlIGlmIHRoZXkgYXJlXG4gICAgLy8gc3VwcG9ydGVkIGJ5IGl0LlxuICAgIFsnY2xlYXInLCAnZGlyJywgJ2RpcnhtbCcsICdwcm9maWxlJywgJ3Byb2ZpbGVFbmQnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbENvbnNvbGVbbWV0aG9kTmFtZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc29sZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBvcmlnaW5hbENvbnNvbGVbbWV0aG9kTmFtZV0oLi4uYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSBlbHNlIGlmICghZ2xvYmFsLmNvbnNvbGUpIHtcbiAgZnVuY3Rpb24gc3R1YigpIHt9XG4gIGNvbnN0IGxvZyA9IGdsb2JhbC5wcmludCB8fCBzdHViO1xuXG4gIGdsb2JhbC5jb25zb2xlID0ge1xuICAgIGRlYnVnOiBsb2csXG4gICAgZXJyb3I6IGxvZyxcbiAgICBpbmZvOiBsb2csXG4gICAgbG9nOiBsb2csXG4gICAgdHJhY2U6IGxvZyxcbiAgICB3YXJuOiBsb2csXG4gICAgYXNzZXJ0KGV4cHJlc3Npb24sIGxhYmVsKSB7XG4gICAgICBpZiAoIWV4cHJlc3Npb24pIHtcbiAgICAgICAgbG9nKCdBc3NlcnRpb24gZmFpbGVkOiAnICsgbGFiZWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXI6IHN0dWIsXG4gICAgZGlyOiBzdHViLFxuICAgIGRpcnhtbDogc3R1YixcbiAgICBncm91cDogc3R1YixcbiAgICBncm91cENvbGxhcHNlZDogc3R1YixcbiAgICBncm91cEVuZDogc3R1YixcbiAgICBwcm9maWxlOiBzdHViLFxuICAgIHByb2ZpbGVFbmQ6IHN0dWIsXG4gICAgdGFibGU6IHN0dWIsXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnNvbGUsICdfaXNQb2x5ZmlsbGVkJywge1xuICAgIHZhbHVlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBwb2x5ZmlsbFxuICovXG5cbmxldCBfaW5HdWFyZCA9IDA7XG5cbnR5cGUgRXJyb3JIYW5kbGVyID0gKGVycm9yOiBtaXhlZCwgaXNGYXRhbDogYm9vbGVhbikgPT4gdm9pZDtcbnR5cGUgRm48QXJncywgUmV0dXJuPiA9ICguLi5BcmdzKSA9PiBSZXR1cm47XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgZXJyb3IgaGFuZGxlciB0aGF0IGlzIGNhbGxlZCB3aGVuIHdlIGVuY291bnRlciBhbiBleGNlcHRpb25cbiAqIHdoZW4gbG9hZGluZyBhIG1vZHVsZS4gVGhpcyB3aWxsIHJlcG9ydCBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGJlZm9yZVxuICogRXhjZXB0aW9uc01hbmFnZXIgaXMgY29uZmlndXJlZC5cbiAqL1xubGV0IF9nbG9iYWxIYW5kbGVyOiBFcnJvckhhbmRsZXIgPSBmdW5jdGlvbiBvbkVycm9yKFxuICBlOiBtaXhlZCxcbiAgaXNGYXRhbDogYm9vbGVhbixcbikge1xuICB0aHJvdyBlO1xufTtcblxuLyoqXG4gKiBUaGUgcGFydGljdWxhciByZXF1aXJlIHJ1bnRpbWUgdGhhdCB3ZSBhcmUgdXNpbmcgbG9va3MgZm9yIGEgZ2xvYmFsXG4gKiBgRXJyb3JVdGlsc2Agb2JqZWN0IGFuZCBpZiBpdCBleGlzdHMsIHRoZW4gaXQgcmVxdWlyZXMgbW9kdWxlcyB3aXRoIHRoZVxuICogZXJyb3IgaGFuZGxlciBzcGVjaWZpZWQgdmlhIEVycm9yVXRpbHMuc2V0R2xvYmFsSGFuZGxlciBieSBjYWxsaW5nIHRoZVxuICogcmVxdWlyZSBmdW5jdGlvbiB3aXRoIGFwcGx5V2l0aEd1YXJkLiBTaW5jZSB0aGUgcmVxdWlyZSBtb2R1bGUgaXMgbG9hZGVkXG4gKiBiZWZvcmUgYW55IG9mIHRoZSBtb2R1bGVzLCB0aGlzIEVycm9yVXRpbHMgbXVzdCBiZSBkZWZpbmVkIChhbmQgdGhlIGhhbmRsZXJcbiAqIHNldCkgZ2xvYmFsbHkgYmVmb3JlIHJlcXVpcmluZyBhbnl0aGluZy5cbiAqL1xuY29uc3QgRXJyb3JVdGlscyA9IHtcbiAgc2V0R2xvYmFsSGFuZGxlcihmdW46IEVycm9ySGFuZGxlcik6IHZvaWQge1xuICAgIF9nbG9iYWxIYW5kbGVyID0gZnVuO1xuICB9LFxuICBnZXRHbG9iYWxIYW5kbGVyKCk6IEVycm9ySGFuZGxlciB7XG4gICAgcmV0dXJuIF9nbG9iYWxIYW5kbGVyO1xuICB9LFxuICByZXBvcnRFcnJvcihlcnJvcjogbWl4ZWQpOiB2b2lkIHtcbiAgICBfZ2xvYmFsSGFuZGxlciAmJiBfZ2xvYmFsSGFuZGxlcihlcnJvciwgZmFsc2UpO1xuICB9LFxuICByZXBvcnRGYXRhbEVycm9yKGVycm9yOiBtaXhlZCk6IHZvaWQge1xuICAgIC8vIE5PVEU6IFRoaXMgaGFzIGFuIHVudHlwZWQgY2FsbCBzaXRlIGluIE1ldHJvLlxuICAgIF9nbG9iYWxIYW5kbGVyICYmIF9nbG9iYWxIYW5kbGVyKGVycm9yLCB0cnVlKTtcbiAgfSxcbiAgYXBwbHlXaXRoR3VhcmQ8VEFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgVE91dD4oXG4gICAgZnVuOiBGbjxUQXJncywgVE91dD4sXG4gICAgY29udGV4dD86ID9taXhlZCxcbiAgICBhcmdzPzogP1RBcmdzLFxuICAgIC8vIFVudXNlZCwgYnV0IHNvbWUgY29kZSBzeW5jZWQgZnJvbSB3d3cgc2V0cyBpdCB0byBudWxsLlxuICAgIHVudXNlZF9vbkVycm9yPzogbnVsbCxcbiAgICAvLyBTb21lIGNhbGxlcnMgcGFzcyBhIG5hbWUgaGVyZSwgd2hpY2ggd2UgaWdub3JlLlxuICAgIHVudXNlZF9uYW1lPzogP3N0cmluZyxcbiAgKTogP1RPdXQge1xuICAgIHRyeSB7XG4gICAgICBfaW5HdWFyZCsrO1xuICAgICAgLyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gOiBUT0RPIFQ0ODIwNDc0NSAoMSkgYXBwbHkoY29udGV4dCxcbiAgICAgICAqIG51bGwpIGlzIGZpbmUuICgyKSBhcnJheSAtPiByZXN0IGFycmF5IHNob3VsZCB3b3JrICovXG4gICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSA6IFRPRE8gVDQ4MjA0NzQ1ICgxKSBhcHBseShjb250ZXh0LFxuICAgICAgICogbnVsbCkgaXMgZmluZS4gKDIpIGFycmF5IC0+IHJlc3QgYXJyYXkgc2hvdWxkIHdvcmsgKi9cbiAgICAgIHJldHVybiBmdW4uYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRXJyb3JVdGlscy5yZXBvcnRFcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgX2luR3VhcmQtLTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGFwcGx5V2l0aEd1YXJkSWZOZWVkZWQ8VEFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgVE91dD4oXG4gICAgZnVuOiBGbjxUQXJncywgVE91dD4sXG4gICAgY29udGV4dD86ID9taXhlZCxcbiAgICBhcmdzPzogP1RBcmdzLFxuICApOiA/VE91dCB7XG4gICAgaWYgKEVycm9yVXRpbHMuaW5HdWFyZCgpKSB7XG4gICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSA6IFRPRE8gVDQ4MjA0NzQ1ICgxKSBhcHBseShjb250ZXh0LFxuICAgICAgICogbnVsbCkgaXMgZmluZS4gKDIpIGFycmF5IC0+IHJlc3QgYXJyYXkgc2hvdWxkIHdvcmsgKi9cbiAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIDogVE9ETyBUNDgyMDQ3NDUgKDEpIGFwcGx5KGNvbnRleHQsXG4gICAgICAgKiBudWxsKSBpcyBmaW5lLiAoMikgYXJyYXkgLT4gcmVzdCBhcnJheSBzaG91bGQgd29yayAqL1xuICAgICAgcmV0dXJuIGZ1bi5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgRXJyb3JVdGlscy5hcHBseVdpdGhHdWFyZChmdW4sIGNvbnRleHQsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgaW5HdWFyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFfaW5HdWFyZDtcbiAgfSxcbiAgZ3VhcmQ8VEFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgVE91dD4oXG4gICAgZnVuOiBGbjxUQXJncywgVE91dD4sXG4gICAgbmFtZT86ID9zdHJpbmcsXG4gICAgY29udGV4dD86ID9taXhlZCxcbiAgKTogPyguLi5UQXJncykgPT4gP1RPdXQge1xuICAgIC8vIFRPRE86IChtb3RpKSBUNDgyMDQ3NTMgTWFrZSBzdXJlIHRoaXMgd2FybmluZyBpcyBuZXZlciBoaXQgYW5kIHJlbW92ZSBpdCAtIHR5cGVzXG4gICAgLy8gc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG4gICAgaWYgKHR5cGVvZiBmdW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybignQSBmdW5jdGlvbiBtdXN0IGJlIHBhc3NlZCB0byBFcnJvclV0aWxzLmd1YXJkLCBnb3QgJywgZnVuKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBndWFyZE5hbWUgPSBuYW1lID8/IGZ1bi5uYW1lID8/ICc8Z2VuZXJhdGVkIGd1YXJkPic7XG4gICAgLyogJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIFRoZSAndGhpcycgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gICAgZnVuY3Rpb24gZ3VhcmRlZCguLi5hcmdzOiBUQXJncyk6ID9UT3V0IHtcbiAgICAgIHJldHVybiBFcnJvclV0aWxzLmFwcGx5V2l0aEd1YXJkKFxuICAgICAgICBmdW4sXG4gICAgICAgIGNvbnRleHQgPz8gdGhpcyxcbiAgICAgICAgYXJncyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZ3VhcmROYW1lLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3VhcmRlZDtcbiAgfSxcbn07XG5cbmdsb2JhbC5FcnJvclV0aWxzID0gRXJyb3JVdGlscztcblxuZXhwb3J0IHR5cGUgRXJyb3JVdGlsc1QgPSB0eXBlb2YgRXJyb3JVdGlscztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUluZm99IGZyb20gJy4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5pbXBvcnQgdHlwZSB7Tm9kZX0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgUk5UZXN0ZXJNb2R1bGVDb250YWluZXIgZnJvbSAnLi9jb21wb25lbnRzL1JOVGVzdGVyTW9kdWxlQ29udGFpbmVyJztcbmltcG9ydCBTbmFwc2hvdFZpZXdJT1MgZnJvbSAnLi9leGFtcGxlcy9TbmFwc2hvdC9TbmFwc2hvdFZpZXdJT1MuaW9zJztcbmltcG9ydCBSTlRlc3RlckFwcCBmcm9tICcuL1JOVGVzdGVyQXBwU2hhcmVkJztcbmltcG9ydCBSTlRlc3Rlckxpc3QgZnJvbSAnLi91dGlscy9STlRlc3Rlckxpc3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QXBwUmVnaXN0cnl9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbkFwcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29tcG9uZW50KCdTZXRQcm9wZXJ0aWVzRXhhbXBsZUFwcCcsICgpID0+XG4gIHJlcXVpcmUoJy4vZXhhbXBsZXMvU2V0UHJvcGVydGllc0V4YW1wbGUvU2V0UHJvcGVydGllc0V4YW1wbGVBcHAnKSxcbik7XG5BcHBSZWdpc3RyeS5yZWdpc3RlckNvbXBvbmVudCgnUm9vdFZpZXdTaXplRmxleGliaWxpdHlFeGFtcGxlQXBwJywgKCkgPT5cbiAgcmVxdWlyZSgnLi9leGFtcGxlcy9Sb290Vmlld1NpemVGbGV4aWJpbGl0eUV4YW1wbGUvUm9vdFZpZXdTaXplRmxleGliaWxpdHlFeGFtcGxlQXBwJyksXG4pO1xuQXBwUmVnaXN0cnkucmVnaXN0ZXJDb21wb25lbnQoJ1JOVGVzdGVyQXBwJywgKCkgPT4gUk5UZXN0ZXJBcHApO1xuXG4vLyBSZWdpc3RlciBzdWl0YWJsZSBleGFtcGxlcyBmb3Igc25hcHNob3QgdGVzdHNcblJOVGVzdGVyTGlzdC5Db21wb25lbnRzLmNvbmNhdChSTlRlc3Rlckxpc3QuQVBJcykuZm9yRWFjaChcbiAgKEV4YW1wbGU6IFJOVGVzdGVyTW9kdWxlSW5mbykgPT4ge1xuICAgIGNvbnN0IEV4YW1wbGVNb2R1bGUgPSBFeGFtcGxlLm1vZHVsZTtcbiAgICBpZiAoRXhhbXBsZU1vZHVsZS5kaXNwbGF5TmFtZSkge1xuICAgICAgY2xhc3MgU25hcHNob3R0ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0+IHtcbiAgICAgICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U25hcHNob3RWaWV3SU9TPlxuICAgICAgICAgICAgICA8Uk5UZXN0ZXJNb2R1bGVDb250YWluZXJcbiAgICAgICAgICAgICAgICBtb2R1bGU9e0V4YW1wbGVNb2R1bGV9XG4gICAgICAgICAgICAgICAgb25FeGFtcGxlQ2FyZFByZXNzPXsoKSA9PiB7fX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU25hcHNob3RWaWV3SU9TPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQXBwUmVnaXN0cnkucmVnaXN0ZXJDb21wb25lbnQoXG4gICAgICAgIEV4YW1wbGVNb2R1bGUuZGlzcGxheU5hbWUsXG4gICAgICAgICgpID0+IFNuYXBzaG90dGVyLFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG4pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJOVGVzdGVyQXBwO1xuIiwiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJOVGVzdGVyTW9kdWxlLFxuICBSTlRlc3Rlck1vZHVsZUV4YW1wbGUsXG59IGZyb20gJy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQge3R5cGUgUk5UZXN0ZXJUaGVtZSwgUk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgUk5UUHJlc3NhYmxlUm93IGZyb20gJy4vUk5UUHJlc3NhYmxlUm93JztcbmltcG9ydCBSTlRUZXN0RGV0YWlscyBmcm9tICcuL1JOVFRlc3REZXRhaWxzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7UGxhdGZvcm0sIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IFJOVGVzdGVyQmxvY2sgPSByZXF1aXJlKCcuL1JOVGVzdGVyQmxvY2snKTtcbmNvbnN0IFJOVGVzdGVyRXhhbXBsZUZpbHRlciA9IHJlcXVpcmUoJy4vUk5UZXN0ZXJFeGFtcGxlRmlsdGVyJyk7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG1vZHVsZTogUk5UZXN0ZXJNb2R1bGUsXG4gIGV4YW1wbGU/OiA/Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlLFxuICBvbkV4YW1wbGVDYXJkUHJlc3M/OiA/KGV4YW1wbGVOYW1lOiBzdHJpbmcpID0+IG1peGVkLFxufTtcblxuZnVuY3Rpb24gZ2V0RXhhbXBsZVRpdGxlKHRpdGxlOiAkRmxvd0ZpeE1lLCBwbGF0Zm9ybTogJEZsb3dGaXhNZSkge1xuICByZXR1cm4gcGxhdGZvcm0gIT0gbnVsbCA/IGAke3RpdGxlfSAoJHtwbGF0Zm9ybX0gb25seSlgIDogdGl0bGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJOVGVzdGVyTW9kdWxlQ29udGFpbmVyKHByb3BzOiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB7bW9kdWxlLCBleGFtcGxlLCBvbkV4YW1wbGVDYXJkUHJlc3N9ID0gcHJvcHM7XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChSTlRlc3RlclRoZW1lQ29udGV4dCk7XG4gIGNvbnN0IHJlbmRlckV4YW1wbGUgPSAoZTogJEZsb3dGaXhNZSwgaTogJEZsb3dGaXhNZSkgPT4ge1xuICAgIC8vIEZpbHRlciBwbGF0Zm9ybS1zcGVjaWZpYyBlc1xuICAgIGNvbnN0IHt0aXRsZSwgZGVzY3JpcHRpb24sIHBsYXRmb3JtLCByZW5kZXI6IEV4YW1wbGVDb21wb25lbnR9ID0gZTtcbiAgICBpZiAocGxhdGZvcm0gIT0gbnVsbCAmJiBQbGF0Zm9ybS5PUyAhPT0gcGxhdGZvcm0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbW9kdWxlLnNob3dJbmRpdmlkdWFsRXhhbXBsZXMgPT09IHRydWUgPyAoXG4gICAgICA8Uk5UUHJlc3NhYmxlUm93XG4gICAgICAgIGtleT17ZS5uYW1lfVxuICAgICAgICBvblByZXNzPXsoKSA9PiBvbkV4YW1wbGVDYXJkUHJlc3M/LihlLm5hbWUpfVxuICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPXtlLm5hbWUgKyAnICcgKyBkZXNjcmlwdGlvbn1cbiAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMuc2VwYXJhdG9yLCB7XG4gICAgICAgICAgYm9yZGVyQm90dG9tQ29sb3I6IHRoZW1lLlNlcGFyYXRvckNvbG9yLFxuICAgICAgICB9KX1cbiAgICAgIC8+XG4gICAgKSA6IChcbiAgICAgIDxSTlRlc3RlckJsb2NrXG4gICAgICAgIGtleT17aX1cbiAgICAgICAgdGl0bGU9e2dldEV4YW1wbGVUaXRsZSh0aXRsZSwgcGxhdGZvcm0pfVxuICAgICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259PlxuICAgICAgICA8RXhhbXBsZUNvbXBvbmVudCAvPlxuICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICk7XG4gIH07XG5cbiAgLy8gVE9ETyByZW1vdmUgdGhpcyBjYXNlXG4gIGlmIChtb2R1bGUuZXhhbXBsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBtb2R1bGUuZXhhbXBsZXNbMF0uZGVzY3JpcHRpb24gPz8gbW9kdWxlLmRlc2NyaXB0aW9uO1xuICAgIGNvbnN0IE1vZHVsZVNpbmdsZUV4YW1wbGUgPSBtb2R1bGUuZXhhbXBsZXNbMF0ucmVuZGVyO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8SGVhZGVyIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gdGhlbWU9e3RoZW1lfSAvPlxuICAgICAgICA8TW9kdWxlU2luZ2xlRXhhbXBsZSAvPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9ICh7ZXhhbXBsZTogZSwgZmlsdGVyUmVnZXh9OiAkRmxvd0ZpeE1lKSA9PlxuICAgIGZpbHRlclJlZ2V4LnRlc3QoZS50aXRsZSk7XG5cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgZGF0YTogbW9kdWxlLmV4YW1wbGVzLFxuICAgICAgdGl0bGU6ICdFWEFNUExFUycsXG4gICAgICBrZXk6ICdlJyxcbiAgICB9LFxuICBdO1xuXG4gIHJldHVybiBleGFtcGxlICE9IG51bGwgPyAoXG4gICAgPD5cbiAgICAgIDxSTlRUZXN0RGV0YWlsc1xuICAgICAgICB0aXRsZT17ZXhhbXBsZS50aXRsZX1cbiAgICAgICAgZGVzY3JpcHRpb249e2V4YW1wbGUuZGVzY3JpcHRpb259XG4gICAgICAgIGV4cGVjdD17ZXhhbXBsZS5leHBlY3R9XG4gICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgIC8+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmV4YW1wbGVzQ29udGFpbmVyfSB0ZXN0SUQ9XCJleGFtcGxlLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZXhhbXBsZS5yZW5kZXIgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8Lz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAgPEhlYWRlciBkZXNjcmlwdGlvbj17bW9kdWxlLmRlc2NyaXB0aW9ufSBub0JvdHRvbVBhZGRpbmcgdGhlbWU9e3RoZW1lfSAvPlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5leGFtcGxlc0NvbnRhaW5lcn0+XG4gICAgICAgIDxSTlRlc3RlckV4YW1wbGVGaWx0ZXJcbiAgICAgICAgICB0ZXN0SUQ9XCJleGFtcGxlX3NlYXJjaFwiXG4gICAgICAgICAgcGFnZT1cImV4YW1wbGVzX3BhZ2VcIlxuICAgICAgICAgIGhpZGVGaWx0ZXJQaWxscz17dHJ1ZX1cbiAgICAgICAgICBzZWN0aW9ucz17c2VjdGlvbnN9XG4gICAgICAgICAgZmlsdGVyPXtmaWx0ZXJ9XG4gICAgICAgICAgcmVuZGVyPXsoe2ZpbHRlcmVkU2VjdGlvbnN9KSA9PlxuICAgICAgICAgICAgbW9kdWxlLnNob3dJbmRpdmlkdWFsRXhhbXBsZXMgPT09IHRydWUgPyAoXG4gICAgICAgICAgICAgIGZpbHRlcmVkU2VjdGlvbnNbMF0uZGF0YS5tYXAocmVuZGVyRXhhbXBsZSlcbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VjdGlvbkNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkU2VjdGlvbnNbMF0uZGF0YS5tYXAocmVuZGVyRXhhbXBsZSl9XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEhlYWRlcihwcm9wczoge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICB0aGVtZTogUk5UZXN0ZXJUaGVtZSxcbiAgbm9Cb3R0b21QYWRkaW5nPzogP2Jvb2xlYW4sXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIHN0eWxlPXtbXG4gICAgICAgIHN0eWxlcy5oZWFkZXJDb250YWluZXIsXG4gICAgICAgIHByb3BzLm5vQm90dG9tUGFkZGluZyA9PT0gdHJ1ZSA/IHN0eWxlcy5oZWFkZXJOb0JvdHRvbVBhZGRpbmcgOiBudWxsLFxuICAgICAgICB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOlxuICAgICAgICAgICAgUGxhdGZvcm0uT1MgPT09ICdpb3MnXG4gICAgICAgICAgICAgID8gcHJvcHMudGhlbWUuU3lzdGVtQmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgICAgIDogcHJvcHMudGhlbWUuQmFja2dyb3VuZENvbG9yLFxuICAgICAgICB9LFxuICAgICAgXX0+XG4gICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5oZWFkZXJEZXNjcmlwdGlvbiwge2NvbG9yOiBwcm9wcy50aGVtZS5MYWJlbENvbG9yfV19PlxuICAgICAgICB7cHJvcHMuZGVzY3JpcHRpb259XG4gICAgICA8L1RleHQ+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGhlYWRlckNvbnRhaW5lcjoge1xuICAgIHBhZGRpbmdIb3Jpem9udGFsOiBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnID8gMTUgOiA2LFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogNixcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgaGVhZGVyRGVzY3JpcHRpb246IHtcbiAgICBmb250U2l6ZTogMTQsXG4gIH0sXG4gIGhlYWRlck5vQm90dG9tUGFkZGluZzoge1xuICAgIHBhZGRpbmdCb3R0b206IDAsXG4gIH0sXG4gIGV4YW1wbGVzQ29udGFpbmVyOiB7XG4gICAgZmxleEdyb3c6IDEsXG4gICAgZmxleDogMSxcbiAgfSxcbiAgc2VwYXJhdG9yOiB7XG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IFBsYXRmb3JtLnNlbGVjdCh7XG4gICAgICBpb3M6IFN0eWxlU2hlZXQuaGFpcmxpbmVXaWR0aCxcbiAgICAgIGFuZHJvaWQ6IDAsXG4gICAgfSksXG4gICAgbWFyZ2luSG9yaXpvbnRhbDogMTUsXG4gIH0sXG4gIHNlY3Rpb25Db250YWluZXI6IHtcbiAgICByb3dHYXA6IDMwLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogMzAsXG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgUk5UZXN0ZXJDb21wb25lbnRUaXRsZSBmcm9tICcuL1JOVGVzdGVyQ29tcG9uZW50VGl0bGUnO1xuaW1wb3J0IHtSTlRlc3RlclRoZW1lQ29udGV4dH0gZnJvbSAnLi9STlRlc3RlclRoZW1lJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7UGxhdGZvcm0sIFByZXNzYWJsZSwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBWaWV3U3R5bGVQcm9wID0gJEVsZW1lbnRUeXBlPFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFZpZXc+LCAnc3R5bGUnPjtcbnR5cGUgUHJvcHMgPSB7XG4gIGFjY2Vzc2liaWxpdHlMYWJlbD86ID9zdHJpbmcsXG4gIHRlc3RJRD86ID9zdHJpbmcsXG4gIG9uUHJlc3NJbj86ID8oKSA9PiBtaXhlZCxcbiAgb25QcmVzc091dD86ID8oKSA9PiBtaXhlZCxcbiAgYm90dG9tQWRkT24/OiA/UmVhY3QuTm9kZSxcbiAgY2hpbGRyZW4/OiA/UmVhY3QuTm9kZSxcbiAgdGl0bGU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb24/OiA/c3RyaW5nLFxuICBvblByZXNzOiAoKSA9PiBtaXhlZCxcbiAgc3R5bGU/OiBWaWV3U3R5bGVQcm9wIHwgKChwcmVzc2VkOiBib29sZWFuKSA9PiBWaWV3U3R5bGVQcm9wKSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJOVFByZXNzYWJsZVJvdyh7XG4gIG9uUHJlc3NJbixcbiAgb25QcmVzc091dCxcbiAgdGl0bGUsXG4gIGRlc2NyaXB0aW9uLFxuICBib3R0b21BZGRPbixcbiAgb25QcmVzcyxcbiAgc3R5bGUsXG4gIGFjY2Vzc2liaWxpdHlMYWJlbCxcbn06IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChSTlRlc3RlclRoZW1lQ29udGV4dCk7XG4gIGNvbnN0IGxhYmVsID0gYWNjZXNzaWJpbGl0eUxhYmVsID8/IGAke3RpdGxlfSAke2Rlc2NyaXB0aW9uID8/ICcnfWA7XG4gIHJldHVybiAoXG4gICAgPFByZXNzYWJsZVxuICAgICAgdGVzdElEPXt0aXRsZX1cbiAgICAgIG9uUHJlc3NJbj17b25QcmVzc0lufVxuICAgICAgb25QcmVzc091dD17b25QcmVzc091dH1cbiAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17bGFiZWx9XG4gICAgICBzdHlsZT17KHtwcmVzc2VkfSkgPT4gW1xuICAgICAgICBzdHlsZXMucm93LFxuICAgICAgICB0eXBlb2Ygc3R5bGUgPT09ICdmdW5jdGlvbicgPyBzdHlsZShwcmVzc2VkKSA6IHN0eWxlLFxuICAgICAgICBwcmVzc2VkXG4gICAgICAgICAgPyB7YmFja2dyb3VuZENvbG9yOiB0aGVtZS5TZWNvbmRhcnlTeXN0ZW1GaWxsQ29sb3J9XG4gICAgICAgICAgOiB7YmFja2dyb3VuZENvbG9yOiB0aGVtZS5TZWNvbmRhcnlHcm91cGVkQmFja2dyb3VuZENvbG9yfSxcbiAgICAgIF19XG4gICAgICBvblByZXNzPXtvblByZXNzfT5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudG9wUm93U3R5bGV9PlxuICAgICAgICA8Uk5UZXN0ZXJDb21wb25lbnRUaXRsZT57dGl0bGV9PC9STlRlc3RlckNvbXBvbmVudFRpdGxlPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFRleHRcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuZGVzY3JpcHRpb25UZXh0LCB7Y29sb3I6IHRoZW1lLlNlY29uZGFyeUxhYmVsQ29sb3J9XX0+XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvVGV4dD5cbiAgICAgIHtib3R0b21BZGRPbn1cbiAgICA8L1ByZXNzYWJsZT5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb3c6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDE1LFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogMTIsXG4gICAgbWFyZ2luVmVydGljYWw6IFBsYXRmb3JtLnNlbGVjdCh7aW9zOiA0LCBhbmRyb2lkOiA4fSksXG4gICAgbWFyZ2luSG9yaXpvbnRhbDogMTUsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGVsZXZhdGlvbjogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFBsYXRmb3JtLnNlbGVjdCh7aW9zOiAnI0ZGRkZGRicsIGFuZHJvaWQ6ICcjRjNGOEZGJ30pLFxuICB9LFxuICBkZXNjcmlwdGlvblRleHQ6IHtcbiAgICBmb250U2l6ZTogMTIsXG4gICAgbGluZUhlaWdodDogMjAsXG4gICAgbWFyZ2luQm90dG9tOiA1LFxuICB9LFxuICBwcmVzc2VkOiB7XG4gICAgZWxldmF0aW9uOiAzLFxuICB9LFxuICB0b3BSb3dTdHlsZToge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgZmxleDogMSxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtTdHlsZVNoZWV0LCBUZXh0fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIGNoaWxkcmVuOiBzdHJpbmcsXG58fT47XG5cbmNsYXNzIFJOVGVzdGVyQ29tcG9uZW50VGl0bGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHt0aGVtZSA9PiAoXG4gICAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMudGl0bGVUZXh0LCB7Y29sb3I6IHRoZW1lLkxhYmVsQ29sb3J9XX0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICA8L1JOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICB0aXRsZVRleHQ6IHtcbiAgICBmb250U2l6ZTogMjAsXG4gICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgbWFyZ2luQm90dG9tOiA1LFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUk5UZXN0ZXJDb21wb25lbnRUaXRsZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBmPXJlcXVpcmUoXCJyZWFjdFwiKSxrPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxuPWYuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuUmVhY3RDdXJyZW50T3duZXIscD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gcShjLGEsZyl7dmFyIGIsZD17fSxlPW51bGwsaD1udWxsO3ZvaWQgMCE9PWcmJihlPVwiXCIrZyk7dm9pZCAwIT09YS5rZXkmJihlPVwiXCIrYS5rZXkpO3ZvaWQgMCE9PWEucmVmJiYoaD1hLnJlZik7Zm9yKGIgaW4gYSltLmNhbGwoYSxiKSYmIXAuaGFzT3duUHJvcGVydHkoYikmJihkW2JdPWFbYl0pO2lmKGMmJmMuZGVmYXVsdFByb3BzKWZvcihiIGluIGE9Yy5kZWZhdWx0UHJvcHMsYSl2b2lkIDA9PT1kW2JdJiYoZFtiXT1hW2JdKTtyZXR1cm57JCR0eXBlb2Y6ayx0eXBlOmMsa2V5OmUscmVmOmgscHJvcHM6ZCxfb3duZXI6bi5jdXJyZW50fX1leHBvcnRzLkZyYWdtZW50PWw7ZXhwb3J0cy5qc3g9cTtleHBvcnRzLmpzeHM9cTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBsPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxyPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSx0PVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSx1PVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLHY9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLHc9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLHg9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIikseT1TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSx6PVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBBKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT16JiZhW3pdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9XG52YXIgQj17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sQz1PYmplY3QuYXNzaWduLEQ9e307ZnVuY3Rpb24gRShhLGIsZSl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1EO3RoaXMudXBkYXRlcj1lfHxCfUUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e307XG5FLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihhLGIpe2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJm51bGwhPWEpdGhyb3cgRXJyb3IoXCJzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy5cIik7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtFLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtmdW5jdGlvbiBGKCl7fUYucHJvdG90eXBlPUUucHJvdG90eXBlO2Z1bmN0aW9uIEcoYSxiLGUpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9RDt0aGlzLnVwZGF0ZXI9ZXx8Qn12YXIgSD1HLnByb3RvdHlwZT1uZXcgRjtcbkguY29uc3RydWN0b3I9RztDKEgsRS5wcm90b3R5cGUpO0guaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEk9QXJyYXkuaXNBcnJheSxKPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksSz17Y3VycmVudDpudWxsfSxMPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBNKGEsYixlKXt2YXIgZCxjPXt9LGs9bnVsbCxoPW51bGw7aWYobnVsbCE9Yilmb3IoZCBpbiB2b2lkIDAhPT1iLnJlZiYmKGg9Yi5yZWYpLHZvaWQgMCE9PWIua2V5JiYoaz1cIlwiK2Iua2V5KSxiKUouY2FsbChiLGQpJiYhTC5oYXNPd25Qcm9wZXJ0eShkKSYmKGNbZF09YltkXSk7dmFyIGc9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1nKWMuY2hpbGRyZW49ZTtlbHNlIGlmKDE8Zyl7Zm9yKHZhciBmPUFycmF5KGcpLG09MDttPGc7bSsrKWZbbV09YXJndW1lbnRzW20rMl07Yy5jaGlsZHJlbj1mfWlmKGEmJmEuZGVmYXVsdFByb3BzKWZvcihkIGluIGc9YS5kZWZhdWx0UHJvcHMsZyl2b2lkIDA9PT1jW2RdJiYoY1tkXT1nW2RdKTtyZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEsa2V5OmsscmVmOmgscHJvcHM6Yyxfb3duZXI6Sy5jdXJyZW50fX1cbmZ1bmN0aW9uIE4oYSxiKXtyZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEudHlwZSxrZXk6YixyZWY6YS5yZWYscHJvcHM6YS5wcm9wcyxfb3duZXI6YS5fb3duZXJ9fWZ1bmN0aW9uIE8oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWx9ZnVuY3Rpb24gZXNjYXBlKGEpe3ZhciBiPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIithLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXX0pfXZhciBQPS9cXC8rL2c7ZnVuY3Rpb24gUShhLGIpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJm51bGwhPWEua2V5P2VzY2FwZShcIlwiK2Eua2V5KTpiLnRvU3RyaW5nKDM2KX1cbmZ1bmN0aW9uIFIoYSxiLGUsZCxjKXt2YXIgaz10eXBlb2YgYTtpZihcInVuZGVmaW5lZFwiPT09a3x8XCJib29sZWFuXCI9PT1rKWE9bnVsbDt2YXIgaD0hMTtpZihudWxsPT09YSloPSEwO2Vsc2Ugc3dpdGNoKGspe2Nhc2UgXCJzdHJpbmdcIjpjYXNlIFwibnVtYmVyXCI6aD0hMDticmVhaztjYXNlIFwib2JqZWN0XCI6c3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgbDpjYXNlIG46aD0hMH19aWYoaClyZXR1cm4gaD1hLGM9YyhoKSxhPVwiXCI9PT1kP1wiLlwiK1EoaCwwKTpkLEkoYyk/KGU9XCJcIixudWxsIT1hJiYoZT1hLnJlcGxhY2UoUCxcIiQmL1wiKStcIi9cIiksUihjLGIsZSxcIlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfSkpOm51bGwhPWMmJihPKGMpJiYoYz1OKGMsZSsoIWMua2V5fHxoJiZoLmtleT09PWMua2V5P1wiXCI6KFwiXCIrYy5rZXkpLnJlcGxhY2UoUCxcIiQmL1wiKStcIi9cIikrYSkpLGIucHVzaChjKSksMTtoPTA7ZD1cIlwiPT09ZD9cIi5cIjpkK1wiOlwiO2lmKEkoYSkpZm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe2s9XG5hW2ddO3ZhciBmPWQrUShrLGcpO2grPVIoayxiLGUsZixjKX1lbHNlIGlmKGY9QShhKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZilmb3IoYT1mLmNhbGwoYSksZz0wOyEoaz1hLm5leHQoKSkuZG9uZTspaz1rLnZhbHVlLGY9ZCtRKGssZysrKSxoKz1SKGssYixlLGYsYyk7ZWxzZSBpZihcIm9iamVjdFwiPT09ayl0aHJvdyBiPVN0cmluZyhhKSxFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIrKFwiW29iamVjdCBPYmplY3RdXCI9PT1iP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoYSkuam9pbihcIiwgXCIpK1wifVwiOmIpK1wiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiKTtyZXR1cm4gaH1cbmZ1bmN0aW9uIFMoYSxiLGUpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGQ9W10sYz0wO1IoYSxkLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGUsYSxjKyspfSk7cmV0dXJuIGR9ZnVuY3Rpb24gVChhKXtpZigtMT09PWEuX3N0YXR1cyl7dmFyIGI9YS5fcmVzdWx0O2I9YigpO2IudGhlbihmdW5jdGlvbihiKXtpZigwPT09YS5fc3RhdHVzfHwtMT09PWEuX3N0YXR1cylhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yn0sZnVuY3Rpb24oYil7aWYoMD09PWEuX3N0YXR1c3x8LTE9PT1hLl9zdGF0dXMpYS5fc3RhdHVzPTIsYS5fcmVzdWx0PWJ9KTstMT09PWEuX3N0YXR1cyYmKGEuX3N0YXR1cz0wLGEuX3Jlc3VsdD1iKX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQuZGVmYXVsdDt0aHJvdyBhLl9yZXN1bHQ7fVxudmFyIFU9e2N1cnJlbnQ6bnVsbH0sVj17dHJhbnNpdGlvbjpudWxsfSxXPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOlUsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6VixSZWFjdEN1cnJlbnRPd25lcjpLfTtleHBvcnRzLkNoaWxkcmVuPXttYXA6Uyxmb3JFYWNoOmZ1bmN0aW9uKGEsYixlKXtTKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZSl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UyhhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFMoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTyhhKSl0aHJvdyBFcnJvcihcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiKTtyZXR1cm4gYX19O2V4cG9ydHMuQ29tcG9uZW50PUU7ZXhwb3J0cy5GcmFnbWVudD1wO1xuZXhwb3J0cy5Qcm9maWxlcj1yO2V4cG9ydHMuUHVyZUNvbXBvbmVudD1HO2V4cG9ydHMuU3RyaWN0TW9kZT1xO2V4cG9ydHMuU3VzcGVuc2U9dztleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVc7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsZSl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIithK1wiLlwiKTt2YXIgZD1DKHt9LGEucHJvcHMpLGM9YS5rZXksaz1hLnJlZixoPWEuX293bmVyO2lmKG51bGwhPWIpe3ZvaWQgMCE9PWIucmVmJiYoaz1iLnJlZixoPUsuY3VycmVudCk7dm9pZCAwIT09Yi5rZXkmJihjPVwiXCIrYi5rZXkpO2lmKGEudHlwZSYmYS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgZz1hLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihmIGluIGIpSi5jYWxsKGIsZikmJiFMLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT12b2lkIDA9PT1iW2ZdJiZ2b2lkIDAhPT1nP2dbZl06YltmXSl9dmFyIGY9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1mKWQuY2hpbGRyZW49ZTtlbHNlIGlmKDE8Zil7Zz1BcnJheShmKTtcbmZvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOmwsdHlwZTphLnR5cGUsa2V5OmMscmVmOmsscHJvcHM6ZCxfb3duZXI6aH19O2V4cG9ydHMuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihhKXthPXskJHR5cGVvZjp1LF9jdXJyZW50VmFsdWU6YSxfY3VycmVudFZhbHVlMjphLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbCxfZGVmYXVsdFZhbHVlOm51bGwsX2dsb2JhbE5hbWU6bnVsbH07YS5Qcm92aWRlcj17JCR0eXBlb2Y6dCxfY29udGV4dDphfTtyZXR1cm4gYS5Db25zdW1lcj1hfTtleHBvcnRzLmNyZWF0ZUVsZW1lbnQ9TTtleHBvcnRzLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oYSl7dmFyIGI9TS5iaW5kKG51bGwsYSk7Yi50eXBlPWE7cmV0dXJuIGJ9O2V4cG9ydHMuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O1xuZXhwb3J0cy5mb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp2LHJlbmRlcjphfX07ZXhwb3J0cy5pc1ZhbGlkRWxlbWVudD1PO2V4cG9ydHMubGF6eT1mdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6eSxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmF9LF9pbml0OlR9fTtleHBvcnRzLm1lbW89ZnVuY3Rpb24oYSxiKXtyZXR1cm57JCR0eXBlb2Y6eCx0eXBlOmEsY29tcGFyZTp2b2lkIDA9PT1iP251bGw6Yn19O2V4cG9ydHMuc3RhcnRUcmFuc2l0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPVYudHJhbnNpdGlvbjtWLnRyYW5zaXRpb249e307dHJ5e2EoKX1maW5hbGx5e1YudHJhbnNpdGlvbj1ifX07ZXhwb3J0cy51bnN0YWJsZV9hY3Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuXCIpO307XG5leHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFUuY3VycmVudC51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIFUuY3VycmVudC51c2VDb250ZXh0KGEpfTtleHBvcnRzLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O2V4cG9ydHMudXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZURlZmVycmVkVmFsdWUoYSl9O2V4cG9ydHMudXNlRWZmZWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFUuY3VycmVudC51c2VFZmZlY3QoYSxiKX07ZXhwb3J0cy51c2VJZD1mdW5jdGlvbigpe3JldHVybiBVLmN1cnJlbnQudXNlSWQoKX07ZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGEsYixlKXtyZXR1cm4gVS5jdXJyZW50LnVzZUltcGVyYXRpdmVIYW5kbGUoYSxiLGUpfTtcbmV4cG9ydHMudXNlSW5zZXJ0aW9uRWZmZWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFUuY3VycmVudC51c2VJbnNlcnRpb25FZmZlY3QoYSxiKX07ZXhwb3J0cy51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZUxheW91dEVmZmVjdChhLGIpfTtleHBvcnRzLnVzZU1lbW89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZU1lbW8oYSxiKX07ZXhwb3J0cy51c2VSZWR1Y2VyPWZ1bmN0aW9uKGEsYixlKXtyZXR1cm4gVS5jdXJyZW50LnVzZVJlZHVjZXIoYSxiLGUpfTtleHBvcnRzLnVzZVJlZj1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZVJlZihhKX07ZXhwb3J0cy51c2VTdGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZVN0YXRlKGEpfTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGEsYixlKXtyZXR1cm4gVS5jdXJyZW50LnVzZVN5bmNFeHRlcm5hbFN0b3JlKGEsYixlKX07XG5leHBvcnRzLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gVS5jdXJyZW50LnVzZVRyYW5zaXRpb24oKX07ZXhwb3J0cy52ZXJzaW9uPVwiMTguMi4wXCI7XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbmlmIChcbiAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgPT09XG4gICAgJ2Z1bmN0aW9uJ1xuKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQobmV3IEVycm9yKCkpO1xufVxuICAgICAgICAgIHZhciBSZWFjdFZlcnNpb24gPSAnMTguMi4wJztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBkaXNwYXRjaGVyLlxuICovXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGJhdGNoJ3MgY29uZmlndXJhdGlvbiBzdWNoIGFzIGhvdyBsb25nIGFuIHVwZGF0ZVxuICogc2hvdWxkIHN1c3BlbmQgZm9yIGlmIGl0IG5lZWRzIHRvLlxuICovXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSB7XG4gIHRyYW5zaXRpb246IG51bGxcbn07XG5cbnZhciBSZWFjdEN1cnJlbnRBY3RRdWV1ZSA9IHtcbiAgY3VycmVudDogbnVsbCxcbiAgLy8gVXNlZCB0byByZXByb2R1Y2UgYmVoYXZpb3Igb2YgYGJhdGNoZWRVcGRhdGVzYCBpbiBsZWdhY3kgbW9kZS5cbiAgaXNCYXRjaGluZ0xlZ2FjeTogZmFsc2UsXG4gIGRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlOiBmYWxzZVxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IHt9O1xudmFyIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBudWxsO1xuZnVuY3Rpb24gc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKSB7XG4gIHtcbiAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gIH1cbn1cblxue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZSA9IGZ1bmN0aW9uIChzdGFjaykge1xuICAgIHtcbiAgICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgICB9XG4gIH07IC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuXG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhY2sgPSAnJzsgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuXG4gICAgaWYgKGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUpIHtcbiAgICAgIHN0YWNrICs9IGN1cnJlbnRFeHRyYVN0YWNrRnJhbWU7XG4gICAgfSAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cblxuXG4gICAgdmFyIGltcGwgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjaztcblxuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzogUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsXG4gIFJlYWN0Q3VycmVudE93bmVyOiBSZWFjdEN1cnJlbnRPd25lclxufTtcblxue1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0pO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OyAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cblxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIHBhcnRpYWxTdGF0ZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHBhcnRpYWxTdGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiBwYXJ0aWFsU3RhdGUgIT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSAnICsgJ2Z1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nKTtcbiAgfVxuXG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG59O1xuLyoqXG4gKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAqXG4gKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICpcbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuXG5Db21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xufTtcbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5cblxue1xuICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcsICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiddLFxuICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddXG4gIH07XG5cbiAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKCclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGluZm9bMV0pO1xuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9XG5cbkNvbXBvbmVudER1bW15LnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4vKipcbiAqIENvbnZlbmllbmNlIGNvbXBvbmVudCB3aXRoIGRlZmF1bHQgc2hhbGxvdyBlcXVhbGl0eSBjaGVjayBmb3Igc0NVLlxuICovXG5cbmZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAvLyBJZiBhIGNvbXBvbmVudCBoYXMgc3RyaW5nIHJlZnMsIHdlIHdpbGwgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCBsYXRlci5cblxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxudmFyIHB1cmVDb21wb25lbnRQcm90b3R5cGUgPSBQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpO1xucHVyZUNvbXBvbmVudFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7IC8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuXG5hc3NpZ24ocHVyZUNvbXBvbmVudFByb3RvdHlwZSwgQ29tcG9uZW50LnByb3RvdHlwZSk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblxuLy8gYW4gaW1tdXRhYmxlIG9iamVjdCB3aXRoIGEgc2luZ2xlIG11dGFibGUgdmFsdWVcbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgdmFyIHJlZk9iamVjdCA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gIH1cblxuICByZXR1cm4gcmVmT2JqZWN0O1xufVxuXG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYSkge1xuICByZXR1cm4gaXNBcnJheUltcGwoYSk7XG59XG5cbi8qXG4gKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcbiAqIGFuZCBUZW1wb3JhbC4qIHR5cGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMjIwNjQuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxuICogZWFzaWVyLXRvLWRlYnVnIGV4Y2VwdGlvbiB3aXRoIGEgY2xlYXIgZXJyb3JzIG1lc3NhZ2UgbWVzc2FnZSBleHBsYWluaW5nIHRoZVxuICogcHJvYmxlbS4gKEluc3RlYWQgb2YgYSBjb25mdXNpbmcgZXhjZXB0aW9uIHRocm93biBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uXG4gKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxuICovXG4vLyAkRmxvd0ZpeE1lIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAge1xuICAgIC8vIHRvU3RyaW5nVGFnIGlzIG5lZWRlZCBmb3IgbmFtZXNwYWNlZCB0eXBlcyBsaWtlIFRlbXBvcmFsLkluc3RhbnRcbiAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZztcbiAgICB2YXIgdHlwZSA9IGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fCAnT2JqZWN0JztcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn0gLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24sIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIGNvbmZpZy5fX3NlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IGNvbmZpZy5fX3NlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBzZWxmID0gY29uZmlnLl9fc2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NlbGY7XG4gICAgc291cmNlID0gY29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc291cmNlOyAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuXG5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH0gLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG5cblxuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG59XG5mdW5jdGlvbiBjbG9uZUFuZFJlcGxhY2VLZXkob2xkRWxlbWVudCwgbmV3S2V5KSB7XG4gIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBvbGRFbGVtZW50LnJlZiwgb2xkRWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRFbGVtZW50Ll9vd25lciwgb2xkRWxlbWVudC5wcm9wcyk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuLyoqXG4gKiBDbG9uZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCB1c2luZyBlbGVtZW50IGFzIHRoZSBzdGFydGluZyBwb2ludC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY2xvbmVlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgaWYgKGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBlbGVtZW50ICsgXCIuXCIpO1xuICB9XG5cbiAgdmFyIHByb3BOYW1lOyAvLyBPcmlnaW5hbCBwcm9wcyBhcmUgY29waWVkXG5cbiAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmOyAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuXG4gIHZhciBzZWxmID0gZWxlbWVudC5fc2VsZjsgLy8gU291cmNlIGlzIHByZXNlcnZlZCBzaW5jZSBjbG9uZUVsZW1lbnQgaXMgdW5saWtlbHkgdG8gYmUgdGFyZ2V0ZWQgYnkgYVxuICAvLyB0cmFuc3BpbGVyLCBhbmQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBwcm9iYWJseSBhIGJldHRlciBpbmRpY2F0b3Igb2YgdGhlXG4gIC8vIHRydWUgb3duZXIuXG5cbiAgdmFyIHNvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTsgLy8gT3duZXIgd2lsbCBiZSBwcmVzZXJ2ZWQsIHVubGVzcyByZWYgaXMgb3ZlcnJpZGRlblxuXG4gIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICAvLyBTaWxlbnRseSBzdGVhbCB0aGUgcmVmIGZyb20gdGhlIHBhcmVudC5cbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHNcblxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcblxuICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcztcbiAgICB9XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9IGtleS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5cbmZ1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGVsZW1lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBBIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCcgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAge1xuICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihlbGVtZW50LmtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVzY2FwZSgnJyArIGVsZW1lbnQua2V5KTtcbiAgfSAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuXG5cbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gbWFwSW50b0FycmF5KGNoaWxkcmVuLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmFtZVNvRmFyLCBjYWxsYmFjaykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgdmFyIGludm9rZUNhbGxiYWNrID0gZmFsc2U7XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsKSB7XG4gICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHN3aXRjaCAoY2hpbGRyZW4uJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW47XG4gICAgdmFyIG1hcHBlZENoaWxkID0gY2FsbGJhY2soX2NoaWxkKTsgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzOlxuXG4gICAgdmFyIGNoaWxkS2V5ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldEVsZW1lbnRLZXkoX2NoaWxkLCAwKSA6IG5hbWVTb0ZhcjtcblxuICAgIGlmIChpc0FycmF5KG1hcHBlZENoaWxkKSkge1xuICAgICAgdmFyIGVzY2FwZWRDaGlsZEtleSA9ICcnO1xuXG4gICAgICBpZiAoY2hpbGRLZXkgIT0gbnVsbCkge1xuICAgICAgICBlc2NhcGVkQ2hpbGRLZXkgPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoY2hpbGRLZXkpICsgJy8nO1xuICAgICAgfVxuXG4gICAgICBtYXBJbnRvQXJyYXkobWFwcGVkQ2hpbGQsIGFycmF5LCBlc2NhcGVkQ2hpbGRLZXksICcnLCBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkge1xuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGBpZmAgc3RhdGVtZW50IGhlcmUgcHJldmVudHMgYXV0by1kaXNhYmxpbmcgb2YgdGhlIHNhZmVcbiAgICAgICAgICAvLyBjb2VyY2lvbiBFU0xpbnQgcnVsZSwgc28gd2UgbXVzdCBtYW51YWxseSBkaXNhYmxlIGl0IGJlbG93LlxuICAgICAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgUmVhY3QuUG9ydGFsIGRvZXNuJ3QgaGF2ZSBhIGtleVxuICAgICAgICAgIGlmIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFfY2hpbGQgfHwgX2NoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSkge1xuICAgICAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXBwZWRDaGlsZC5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICAgICAgZXNjYXBlVXNlclByb3ZpZGVkS2V5KCcnICsgbWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICAgIH1cblxuICAgICAgYXJyYXkucHVzaChtYXBwZWRDaGlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQ7XG4gIHZhciBuZXh0TmFtZTtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBpdGVyYWJsZUNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChpdGVyYXRvckZuID09PSBpdGVyYWJsZUNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgIHdhcm4oJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChpdGVyYWJsZUNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGlpID0gMDtcblxuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcpICsgXCIpLiBcIiArICdJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5ICcgKyAnaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3VidHJlZUNvdW50O1xufVxuXG4vKipcbiAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmdW5jIFRoZSBtYXAgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGNvdW50ID0gMDtcbiAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsICcnLCAnJywgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgY291bnQrKyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuY291bnRcbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIG4gPSAwO1xuICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgIG4rKzsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nXG4gIH0pO1xuICByZXR1cm4gbjtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5mb3JlYWNoXG4gKlxuICogVGhlIHByb3ZpZGVkIGZvckVhY2hGdW5jKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZvckVhY2hGdW5jXG4gKiBAcGFyYW0geyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgZm9yIGZvckVhY2hDb250ZXh0LlxuICovXG5mdW5jdGlvbiBmb3JFYWNoQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgIGZvckVhY2hGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIERvbid0IHJldHVybiBhbnl0aGluZy5cbiAgfSwgZm9yRWFjaENvbnRleHQpO1xufVxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW50b2FycmF5XG4gKi9cblxuXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHJldHVybiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KSB8fCBbXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2ZXJpZmllcyB0aGF0IHRoZXJlXG4gKiBpcyBvbmx5IG9uZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5vbmx5XG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0c1xuICogcGFzc2VkIHdpdGhvdXQgYSB3cmFwcGVyLCBidXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdG9cbiAqIGFic3RyYWN0IGF3YXkgdGhlIHBhcnRpY3VsYXIgc3RydWN0dXJlIG9mIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29sbGVjdGlvbiBzdHJ1Y3R1cmUuXG4gKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IFRoZSBmaXJzdCBhbmQgb25seSBgUmVhY3RFbGVtZW50YCBjb250YWluZWQgaW4gdGhlXG4gKiBzdHJ1Y3R1cmUuXG4gKi9cblxuXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLicpO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSkge1xuICAvLyBUT0RPOiBTZWNvbmQgYXJndW1lbnQgdXNlZCB0byBiZSBhbiBvcHRpb25hbCBgY2FsY3VsYXRlQ2hhbmdlZEJpdHNgXG4gIC8vIGZ1bmN0aW9uLiBXYXJuIHRvIHJlc2VydmUgZm9yIGZ1dHVyZSB1c2U/XG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgLy8gQXMgYSB3b3JrYXJvdW5kIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29uY3VycmVudCByZW5kZXJlcnMsIHdlIGNhdGVnb3JpemVcbiAgICAvLyBzb21lIHJlbmRlcmVycyBhcyBwcmltYXJ5IGFuZCBvdGhlcnMgYXMgc2Vjb25kYXJ5LiBXZSBvbmx5IGV4cGVjdFxuICAgIC8vIHRoZXJlIHRvIGJlIHR3byBjb25jdXJyZW50IHJlbmRlcmVycyBhdCBtb3N0OiBSZWFjdCBOYXRpdmUgKHByaW1hcnkpIGFuZFxuICAgIC8vIEZhYnJpYyAoc2Vjb25kYXJ5KTsgUmVhY3QgRE9NIChwcmltYXJ5KSBhbmQgUmVhY3QgQVJUIChzZWNvbmRhcnkpLlxuICAgIC8vIFNlY29uZGFyeSByZW5kZXJlcnMgc3RvcmUgdGhlaXIgY29udGV4dCB2YWx1ZXMgb24gc2VwYXJhdGUgZmllbGRzLlxuICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgIC8vIFVzZWQgdG8gdHJhY2sgaG93IG1hbnkgY29uY3VycmVudCByZW5kZXJlcnMgdGhpcyBjb250ZXh0IGN1cnJlbnRseVxuICAgIC8vIHN1cHBvcnRzIHdpdGhpbiBpbiBhIHNpbmdsZSByZW5kZXJlci4gU3VjaCBhcyBwYXJhbGxlbCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAvLyBUaGVzZSBhcmUgY2lyY3VsYXJcbiAgICBQcm92aWRlcjogbnVsbCxcbiAgICBDb25zdW1lcjogbnVsbCxcbiAgICAvLyBBZGQgdGhlc2UgdG8gdXNlIHNhbWUgaGlkZGVuIGNsYXNzIGluIFZNIGFzIFNlcnZlckNvbnRleHRcbiAgICBfZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIF9nbG9iYWxOYW1lOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dFxuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG4gICAgLy8gVGhpcyBtaWdodCB0aHJvdyBlaXRoZXIgYmVjYXVzZSBpdCdzIG1pc3Npbmcgb3IgdGhyb3dzLiBJZiBzbywgd2UgdHJlYXQgaXRcbiAgICAvLyBhcyBzdGlsbCB1bmluaXRpYWxpemVkIGFuZCB0cnkgYWdhaW4gbmV4dCB0aW1lLiBXaGljaCBpcyB0aGUgc2FtZSBhcyB3aGF0XG4gICAgLy8gaGFwcGVucyBpZiB0aGUgY3RvciBvciBhbnkgd3JhcHBlcnMgcHJvY2Vzc2luZyB0aGUgY3RvciB0aHJvd3MuIFRoaXMgbWlnaHRcbiAgICAvLyBlbmQgdXAgZml4aW5nIGl0IGlmIHRoZSByZXNvbHV0aW9uIHdhcyBhIGNvbmN1cnJlbmN5IGJ1Zy5cblxuICAgIHRoZW5hYmxlLnRoZW4oZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZyB8fCBwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAgICAgdmFyIHJlc29sdmVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVzb2x2ZWQuX3N0YXR1cyA9IFJlc29sdmVkO1xuICAgICAgICByZXNvbHZlZC5fcmVzdWx0ID0gbW9kdWxlT2JqZWN0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZyB8fCBwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAgICAgdmFyIHJlamVjdGVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVqZWN0ZWQuX3N0YXR1cyA9IFJlamVjdGVkO1xuICAgICAgICByZWplY3RlZC5fcmVzdWx0ID0gZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgICAvLyBJbiBjYXNlLCB3ZSdyZSBzdGlsbCB1bmluaXRpYWxpemVkLCB0aGVuIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSB0aGVuYWJsZVxuICAgICAgLy8gdG8gcmVzb2x2ZS4gU2V0IGl0IGFzIHBlbmRpbmcgaW4gdGhlIG1lYW50aW1lLlxuICAgICAgdmFyIHBlbmRpbmcgPSBwYXlsb2FkO1xuICAgICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICAgIHBlbmRpbmcuX3Jlc3VsdCA9IHRoZW5hYmxlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgdmFyIG1vZHVsZU9iamVjdCA9IHBheWxvYWQuX3Jlc3VsdDtcblxuICAgIHtcbiAgICAgIGlmIChtb2R1bGVPYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcignbGF6eTogRXhwZWN0ZWQgdGhlIHJlc3VsdCBvZiBhIGR5bmFtaWMgaW1wJyArICdvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXFxuXFxuXCIgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcHV0IGN1cmx5IGJyYWNlcyBhcm91bmQgdGhlIGltcG9ydD8nLCBtb2R1bGVPYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICghKCdkZWZhdWx0JyBpbiBtb2R1bGVPYmplY3QpKSB7XG4gICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXAnICsgJ29ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2NvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXAnICsgXCJvcnQoJy4vTXlDb21wb25lbnQnKSlcIiwgbW9kdWxlT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhenkoY3Rvcikge1xuICB2YXIgcGF5bG9hZCA9IHtcbiAgICAvLyBXZSB1c2UgdGhlc2UgZmllbGRzIHRvIHN0b3JlIHRoZSByZXN1bHQuXG4gICAgX3N0YXR1czogVW5pbml0aWFsaXplZCxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lOyAvLyBUaGUgaW5uZXIgY29tcG9uZW50IHNob3VsZG4ndCBpbmhlcml0IHRoaXMgZGlzcGxheSBuYW1lIGluIG1vc3QgY2FzZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBtYXkgYmUgdXNlZCBlbHNld2hlcmUuXG4gICAgICAgIC8vIEJ1dCBpdCdzIG5pY2UgZm9yIGFub255bW91cyBmdW5jdGlvbnMgdG8gaW5oZXJpdCB0aGUgbmFtZSxcbiAgICAgICAgLy8gc28gdGhhdCBvdXIgY29tcG9uZW50LXN0YWNrIGdlbmVyYXRpb24gbG9naWMgd2lsbCBkaXNwbGF5IHRoZWlyIGZyYW1lcy5cbiAgICAgICAgLy8gQW4gYW5vbnltb3VzIGZ1bmN0aW9uIGdlbmVyYWxseSBzdWdnZXN0cyBhIHBhdHRlcm4gbGlrZTpcbiAgICAgICAgLy8gICBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7Li4ufSk7XG4gICAgICAgIC8vIFRoaXMga2luZCBvZiBpbm5lciBmdW5jdGlvbiBpcyBub3QgdXNlZCBlbHNld2hlcmUgc28gdGhlIHNpZGUgZWZmZWN0IGlzIG9rYXkuXG5cbiAgICAgICAgaWYgKCFyZW5kZXIubmFtZSAmJiAhcmVuZGVyLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgcmVuZGVyLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG52YXIgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRTtcblxue1xuICBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QubW9kdWxlLnJlZmVyZW5jZScpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgZW5hYmxlRGVidWdUcmFjaW5nICB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IGVuYWJsZUxlZ2FjeUhpZGRlbiAgfHwgdHlwZSA9PT0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgIHx8IGVuYWJsZUNhY2hlRWxlbWVudCAgfHwgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIFRoaXMgbmVlZHMgdG8gaW5jbHVkZSBhbGwgcG9zc2libGUgbW9kdWxlIHJlZmVyZW5jZSBvYmplY3RcbiAgICAvLyB0eXBlcyBzdXBwb3J0ZWQgYnkgYW55IEZsaWdodCBjb25maWd1cmF0aW9uIGFueXdoZXJlIHNpbmNlXG4gICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBGbGlnaHQgYnVpbGQgdGhpcyB3aWxsIGVuZCB1cCBiZWluZyB1c2VkXG4gICAgLy8gd2l0aC5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFIHx8IHR5cGUuZ2V0TW9kdWxlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtZW1vKHR5cGUsIGNvbXBhcmUpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICBlcnJvcignbWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgJyArICdyZWNlaXZlZDogJXMnLCB0eXBlID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTUVNT19UWVBFLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29tcGFyZTogY29tcGFyZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbXBhcmVcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lOyAvLyBUaGUgaW5uZXIgY29tcG9uZW50IHNob3VsZG4ndCBpbmhlcml0IHRoaXMgZGlzcGxheSBuYW1lIGluIG1vc3QgY2FzZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBtYXkgYmUgdXNlZCBlbHNld2hlcmUuXG4gICAgICAgIC8vIEJ1dCBpdCdzIG5pY2UgZm9yIGFub255bW91cyBmdW5jdGlvbnMgdG8gaW5oZXJpdCB0aGUgbmFtZSxcbiAgICAgICAgLy8gc28gdGhhdCBvdXIgY29tcG9uZW50LXN0YWNrIGdlbmVyYXRpb24gbG9naWMgd2lsbCBkaXNwbGF5IHRoZWlyIGZyYW1lcy5cbiAgICAgICAgLy8gQW4gYW5vbnltb3VzIGZ1bmN0aW9uIGdlbmVyYWxseSBzdWdnZXN0cyBhIHBhdHRlcm4gbGlrZTpcbiAgICAgICAgLy8gICBSZWFjdC5tZW1vKChwcm9wcykgPT4gey4uLn0pO1xuICAgICAgICAvLyBUaGlzIGtpbmQgb2YgaW5uZXIgZnVuY3Rpb24gaXMgbm90IHVzZWQgZWxzZXdoZXJlIHNvIHRoZSBzaWRlIGVmZmVjdCBpcyBva2F5LlxuXG4gICAgICAgIGlmICghdHlwZS5uYW1lICYmICF0eXBlLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIHtcbiAgICBpZiAoZGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3InICsgJyBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbicgKyAnMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuJyArICcyLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuJyArICczLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS4nKTtcbiAgICB9XG4gIH0gLy8gV2lsbCByZXN1bHQgaW4gYSBudWxsIGFjY2VzcyBlcnJvciBpZiBhY2Nlc3NlZCBvdXRzaWRlIHJlbmRlciBwaGFzZS4gV2VcbiAgLy8gaW50ZW50aW9uYWxseSBkb24ndCB0aHJvdyBvdXIgb3duIGVycm9yIGJlY2F1c2UgdGhpcyBpcyBpbiBhIGhvdCBwYXRoLlxuICAvLyBBbHNvIGhlbHBzIGVuc3VyZSB0aGlzIGlzIGlubGluZWQuXG5cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG5cbiAge1xuICAgIC8vIFRPRE86IGFkZCBhIG1vcmUgZ2VuZXJpYyB3YXJuaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCk7XG59XG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbn1cbmZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuZnVuY3Rpb24gdXNlVHJhbnNpdGlvbigpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VUcmFuc2l0aW9uKCk7XG59XG5mdW5jdGlvbiB1c2VEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG59XG5mdW5jdGlvbiB1c2VJZCgpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJZCgpO1xufVxuZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCk7XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICggIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTsgLy8gSWYgb3VyIGNvbXBvbmVudCBmcmFtZSBpcyBsYWJlbGVkIFwiPGFub255bW91cz5cIlxuICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIGEgdXNlci1wcm92aWRlZCBcImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgICAgICAvLyBzcGxpY2UgaXQgaW4gdG8gbWFrZSB0aGUgc3RhY2sgbW9yZSByZWFkYWJsZS5cblxuXG4gICAgICAgICAgICAgICAgaWYgKGZuLmRpc3BsYXlOYW1lICYmIF9mcmFtZS5pbmNsdWRlcygnPGFub255bW91cz4nKSkge1xuICAgICAgICAgICAgICAgICAgX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoJzxhbm9ueW1vdXM+JywgZm4uZGlzcGxheU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XG4gIH1cblxuICB7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcbiAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXG5cbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9IC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUgaXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljXG4gIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpc1xuICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICBpZiAodmFsaWRUeXBlKSB7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IGZhbHNlO1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uKHR5cGUpIHtcbiAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24uYmluZChudWxsLCB0eXBlKTtcbiAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTtcblxuICB7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSkge1xuICAgICAgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdSZWFjdC5jcmVhdGVGYWN0b3J5KCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gQ29uc2lkZXIgdXNpbmcgSlNYICcgKyAnb3IgdXNlIFJlYWN0LmNyZWF0ZUVsZW1lbnQoKSBkaXJlY3RseSBpbnN0ZWFkLicpO1xuICAgIH0gLy8gTGVnYWN5IGhvb2s6IHJlbW92ZSBpdFxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdGVkRmFjdG9yeSwgJ3R5cGUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKCdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICsgJ2JlZm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3RvcnkuJyk7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eXBlJywge1xuICAgICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZWRGYWN0b3J5O1xufVxuZnVuY3Rpb24gY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24oZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciBuZXdFbGVtZW50ID0gY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7XG4gIH1cblxuICB2YWxpZGF0ZVByb3BUeXBlcyhuZXdFbGVtZW50KTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzY29wZSwgb3B0aW9ucykge1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0ge307XG4gIHZhciBjdXJyZW50VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICB0cnkge1xuICAgIHNjb3BlKCk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuXG4gICAge1xuICAgICAgaWYgKHByZXZUcmFuc2l0aW9uID09PSBudWxsICYmIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzKSB7XG4gICAgICAgIHZhciB1cGRhdGVkRmliZXJzQ291bnQgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplO1xuXG4gICAgICAgIGlmICh1cGRhdGVkRmliZXJzQ291bnQgPiAxMCkge1xuICAgICAgICAgIHdhcm4oJ0RldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gJyArICdJZiB0aGlzIGlzIGR1ZSB0byBhIHN1YnNjcmlwdGlvbiBwbGVhc2UgcmUtd3JpdGUgaXQgdG8gdXNlIFJlYWN0IHByb3ZpZGVkIGhvb2tzLiAnICsgJ090aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9IGZhbHNlO1xudmFyIGVucXVldWVUYXNrSW1wbCA9IG51bGw7XG5mdW5jdGlvbiBlbnF1ZXVlVGFzayh0YXNrKSB7XG4gIGlmIChlbnF1ZXVlVGFza0ltcGwgPT09IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgLy8gcmVhZCByZXF1aXJlIG9mZiB0aGUgbW9kdWxlIG9iamVjdCB0byBnZXQgYXJvdW5kIHRoZSBidW5kbGVycy5cbiAgICAgIC8vIHdlIGRvbid0IHdhbnQgdGhlbSB0byBkZXRlY3QgYSByZXF1aXJlIGFuZCBidW5kbGUgYSBOb2RlIHBvbHlmaWxsLlxuICAgICAgdmFyIHJlcXVpcmVTdHJpbmcgPSAoJ3JlcXVpcmUnICsgTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNyk7XG4gICAgICB2YXIgbm9kZVJlcXVpcmUgPSBtb2R1bGUgJiYgbW9kdWxlW3JlcXVpcmVTdHJpbmddOyAvLyBhc3N1bWluZyB3ZSdyZSBpbiBub2RlLCBsZXQncyB0cnkgdG8gZ2V0IG5vZGUnc1xuICAgICAgLy8gdmVyc2lvbiBvZiBzZXRJbW1lZGlhdGUsIGJ5cGFzc2luZyBmYWtlIHRpbWVycyBpZiBhbnkuXG5cbiAgICAgIGVucXVldWVUYXNrSW1wbCA9IG5vZGVSZXF1aXJlLmNhbGwobW9kdWxlLCAndGltZXJzJykuc2V0SW1tZWRpYXRlO1xuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIC8vIHdlJ3JlIGluIGEgYnJvd3NlclxuICAgICAgLy8gd2UgY2FuJ3QgdXNlIHJlZ3VsYXIgdGltZXJzIGJlY2F1c2UgdGhleSBtYXkgc3RpbGwgYmUgZmFrZWRcbiAgICAgIC8vIHNvIHdlIHRyeSBNZXNzYWdlQ2hhbm5lbCtwb3N0TWVzc2FnZSBpbnN0ZWFkXG4gICAgICBlbnF1ZXVlVGFza0ltcGwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBoYXZlIGEgTWVzc2FnZUNoYW5uZWwgaW1wbGVtZW50YXRpb24sICcgKyAnc28gZW5xdWV1aW5nIHRhc2tzIHZpYSBhd2FpdCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aWxsIGZhaWwuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3VlcyAnICsgJ2lmIHlvdSBlbmNvdW50ZXIgdGhpcyB3YXJuaW5nLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7XG4gICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UodW5kZWZpbmVkKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVucXVldWVUYXNrSW1wbCh0YXNrKTtcbn1cblxudmFyIGFjdFNjb3BlRGVwdGggPSAwO1xudmFyIGRpZFdhcm5Ob0F3YWl0QWN0ID0gZmFsc2U7XG5mdW5jdGlvbiBhY3QoY2FsbGJhY2spIHtcbiAge1xuICAgIC8vIGBhY3RgIGNhbGxzIGNhbiBiZSBuZXN0ZWQsIHNvIHdlIHRyYWNrIHRoZSBkZXB0aC4gVGhpcyByZXByZXNlbnRzIHRoZVxuICAgIC8vIG51bWJlciBvZiBgYWN0YCBzY29wZXMgb24gdGhlIHN0YWNrLlxuICAgIHZhciBwcmV2QWN0U2NvcGVEZXB0aCA9IGFjdFNjb3BlRGVwdGg7XG4gICAgYWN0U2NvcGVEZXB0aCsrO1xuXG4gICAgaWYgKFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIG91dGVybW9zdCBgYWN0YCBzY29wZS4gSW5pdGlhbGl6ZSB0aGUgcXVldWUuIFRoZSByZWNvbmNpbGVyXG4gICAgICAvLyB3aWxsIGRldGVjdCB0aGUgcXVldWUgYW5kIHVzZSBpdCBpbnN0ZWFkIG9mIFNjaGVkdWxlci5cbiAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgcHJldklzQmF0Y2hpbmdMZWdhY3kgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5O1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVXNlZCB0byByZXByb2R1Y2UgYmVoYXZpb3Igb2YgYGJhdGNoZWRVcGRhdGVzYCBpbiBsZWdhY3kgbW9kZS4gT25seVxuICAgICAgLy8gc2V0IHRvIGB0cnVlYCB3aGlsZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgaXMgZXhlY3V0ZWQsIG5vdCBmb3IgdXBkYXRlc1xuICAgICAgLy8gdHJpZ2dlcmVkIGR1cmluZyBhbiBhc3luYyBldmVudCwgYmVjYXVzZSB0aGlzIGlzIGhvdyB0aGUgbGVnYWN5XG4gICAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiBgYWN0YCBiZWhhdmVkLlxuICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeSA9IHRydWU7XG4gICAgICByZXN1bHQgPSBjYWxsYmFjaygpOyAvLyBSZXBsaWNhdGUgYmVoYXZpb3Igb2Ygb3JpZ2luYWwgYGFjdGAgaW1wbGVtZW50YXRpb24gaW4gbGVnYWN5IG1vZGUsXG4gICAgICAvLyB3aGljaCBmbHVzaGVkIHVwZGF0ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNjb3BlIGZ1bmN0aW9uIGV4aXRzLCBldmVuXG4gICAgICAvLyBpZiBpdCdzIGFuIGFzeW5jIGZ1bmN0aW9uLlxuXG4gICAgICBpZiAoIXByZXZJc0JhdGNoaW5nTGVnYWN5ICYmIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlKSB7XG4gICAgICAgIHZhciBxdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwb3BBY3RTY29wZShwcmV2QWN0U2NvcGVEZXB0aCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeSA9IHByZXZJc0JhdGNoaW5nTGVnYWN5O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdGhlbmFibGVSZXN1bHQgPSByZXN1bHQ7IC8vIFRoZSBjYWxsYmFjayBpcyBhbiBhc3luYyBmdW5jdGlvbiAoaS5lLiByZXR1cm5lZCBhIHByb21pc2UpLiBXYWl0XG4gICAgICAvLyBmb3IgaXQgdG8gcmVzb2x2ZSBiZWZvcmUgZXhpdGluZyB0aGUgY3VycmVudCBzY29wZS5cblxuICAgICAgdmFyIHdhc0F3YWl0ZWQgPSBmYWxzZTtcbiAgICAgIHZhciB0aGVuYWJsZSA9IHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIHdhc0F3YWl0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoZW5hYmxlUmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJldHVyblZhbHVlKSB7XG4gICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0U2NvcGVEZXB0aCk7XG5cbiAgICAgICAgICAgIGlmIChhY3RTY29wZURlcHRoID09PSAwKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3ZlIGV4aXRlZCB0aGUgb3V0ZXJtb3N0IGFjdCBzY29wZS4gUmVjdXJzaXZlbHkgZmx1c2ggdGhlXG4gICAgICAgICAgICAgIC8vIHF1ZXVlIHVudGlsIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsuXG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayB0aHJldyBhbiBlcnJvci5cbiAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuTm9Bd2FpdEFjdCAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHt9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghd2FzQXdhaXRlZCkge1xuICAgICAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgZXJyb3IoJ1lvdSBjYWxsZWQgYWN0KGFzeW5jICgpID0+IC4uLikgd2l0aG91dCBhd2FpdC4gJyArICdUaGlzIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCB0ZXN0aW5nIGJlaGF2aW91ciwgJyArICdpbnRlcmxlYXZpbmcgbXVsdGlwbGUgYWN0IGNhbGxzIGFuZCBtaXhpbmcgdGhlaXIgJyArICdzY29wZXMuICcgKyAnWW91IHNob3VsZCAtIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pOycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJldHVyblZhbHVlID0gcmVzdWx0OyAvLyBUaGUgY2FsbGJhY2sgaXMgbm90IGFuIGFzeW5jIGZ1bmN0aW9uLiBFeGl0IHRoZSBjdXJyZW50IHNjb3BlXG4gICAgICAvLyBpbW1lZGlhdGVseSwgd2l0aG91dCBhd2FpdGluZy5cblxuICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFNjb3BlRGVwdGgpO1xuXG4gICAgICBpZiAoYWN0U2NvcGVEZXB0aCA9PT0gMCkge1xuICAgICAgICAvLyBFeGl0aW5nIHRoZSBvdXRlcm1vc3QgYWN0IHNjb3BlLiBGbHVzaCB0aGUgcXVldWUuXG4gICAgICAgIHZhciBfcXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50O1xuXG4gICAgICAgIGlmIChfcXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBmbHVzaEFjdFF1ZXVlKF9xdWV1ZSk7XG4gICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0gLy8gUmV0dXJuIGEgdGhlbmFibGUuIElmIHRoZSB1c2VyIGF3YWl0cyBpdCwgd2UnbGwgZmx1c2ggYWdhaW4gaW5cbiAgICAgICAgLy8gY2FzZSBhZGRpdGlvbmFsIHdvcmsgd2FzIHNjaGVkdWxlZCBieSBhIG1pY3JvdGFzay5cblxuXG4gICAgICAgIHZhciBfdGhlbmFibGUgPSB7XG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgLy8gQ29uZmlybSB3ZSBoYXZlbid0IHJlLWVudGVyZWQgYW5vdGhlciBgYWN0YCBzY29wZSwgaW4gY2FzZVxuICAgICAgICAgICAgLy8gdGhlIHVzZXIgZG9lcyBzb21ldGhpbmcgd2VpcmQgbGlrZSBhd2FpdCB0aGUgdGhlbmFibGVcbiAgICAgICAgICAgIC8vIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgICAgaWYgKFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmx1c2ggdGhlIHF1ZXVlIHVudGlsIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsuXG4gICAgICAgICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGVuYWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGluc2lkZSBhIG5lc3RlZCBgYWN0YCBzY29wZSwgdGhlIHJldHVybmVkIHRoZW5hYmxlXG4gICAgICAgIC8vIGltbWVkaWF0ZWx5IHJlc29sdmVzLiBUaGUgb3V0ZXIgc2NvcGUgd2lsbCBmbHVzaCB0aGUgcXVldWUuXG4gICAgICAgIHZhciBfdGhlbmFibGUyID0ge1xuICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGVuYWJsZTI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvcEFjdFNjb3BlKHByZXZBY3RTY29wZURlcHRoKSB7XG4gIHtcbiAgICBpZiAocHJldkFjdFNjb3BlRGVwdGggIT09IGFjdFNjb3BlRGVwdGggLSAxKSB7XG4gICAgICBlcnJvcignWW91IHNlZW0gdG8gaGF2ZSBvdmVybGFwcGluZyBhY3QoKSBjYWxscywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0JlIHN1cmUgdG8gYXdhaXQgcHJldmlvdXMgYWN0KCkgY2FsbHMgYmVmb3JlIG1ha2luZyBhIG5ldyBvbmUuICcpO1xuICAgIH1cblxuICAgIGFjdFNjb3BlRGVwdGggPSBwcmV2QWN0U2NvcGVEZXB0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpIHtcbiAge1xuICAgIHZhciBxdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQ7XG5cbiAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpO1xuICAgICAgICBlbnF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gTm8gYWRkaXRpb25hbCB3b3JrIHdhcyBzY2hlZHVsZWQuIEZpbmlzaC5cbiAgICAgICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEtlZXAgZmx1c2hpbmcgd29yayB1bnRpbCB0aGVyZSdzIG5vbmUgbGVmdC5cbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgaXNGbHVzaGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbHVzaEFjdFF1ZXVlKHF1ZXVlKSB7XG4gIHtcbiAgICBpZiAoIWlzRmx1c2hpbmcpIHtcbiAgICAgIC8vIFByZXZlbnQgcmUtZW50cmFuY2UuXG4gICAgICBpc0ZsdXNoaW5nID0gdHJ1ZTtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ldO1xuXG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICB9IHdoaWxlIChjYWxsYmFjayAhPT0gbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc29tZXRoaW5nIHRocm93cywgbGVhdmUgdGhlIHJlbWFpbmluZyBjYWxsYmFja3Mgb24gdGhlIHF1ZXVlLlxuICAgICAgICBxdWV1ZSA9IHF1ZXVlLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0ZsdXNoaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBjcmVhdGVFbGVtZW50JDEgPSAgY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjbG9uZUVsZW1lbnQkMSA9ICBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY3JlYXRlRmFjdG9yeSA9ICBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24gO1xudmFyIENoaWxkcmVuID0ge1xuICBtYXA6IG1hcENoaWxkcmVuLFxuICBmb3JFYWNoOiBmb3JFYWNoQ2hpbGRyZW4sXG4gIGNvdW50OiBjb3VudENoaWxkcmVuLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBvbmx5OiBvbmx5Q2hpbGRcbn07XG5cbmV4cG9ydHMuQ2hpbGRyZW4gPSBDaGlsZHJlbjtcbmV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG5leHBvcnRzLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMuc3RhcnRUcmFuc2l0aW9uID0gc3RhcnRUcmFuc2l0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9hY3QgPSBhY3Q7XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gdXNlQ2FsbGJhY2s7XG5leHBvcnRzLnVzZUNvbnRleHQgPSB1c2VDb250ZXh0O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gdXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlRGVmZXJyZWRWYWx1ZSA9IHVzZURlZmVycmVkVmFsdWU7XG5leHBvcnRzLnVzZUVmZmVjdCA9IHVzZUVmZmVjdDtcbmV4cG9ydHMudXNlSWQgPSB1c2VJZDtcbmV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IHVzZUltcGVyYXRpdmVIYW5kbGU7XG5leHBvcnRzLnVzZUluc2VydGlvbkVmZmVjdCA9IHVzZUluc2VydGlvbkVmZmVjdDtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gdXNlTGF5b3V0RWZmZWN0O1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlUmVkdWNlciA9IHVzZVJlZHVjZXI7XG5leHBvcnRzLnVzZVJlZiA9IHVzZVJlZjtcbmV4cG9ydHMudXNlU3RhdGUgPSB1c2VTdGF0ZTtcbmV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmUgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZTtcbmV4cG9ydHMudXNlVHJhbnNpdGlvbiA9IHVzZVRyYW5zaXRpb247XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gICAgICAgICAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AobmV3IEVycm9yKCkpO1xufVxuICAgICAgICBcbiAgfSkoKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0pO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcbnZhciBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyA9IGZhbHNlOyAvLyBObyBrbm93biBidWdzLCBidXQgbmVlZHMgcGVyZm9ybWFuY2UgdGVzdGluZ1xuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXG5cbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTsgLy8gVHJhY2sgd2hpY2ggRmliZXIocykgc2NoZWR1bGUgcmVuZGVyIHdvcmsuXG5cbnZhciBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFO1xuXG57XG4gIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKCdyZWFjdC5tb2R1bGUucmVmZXJlbmNlJyk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgfHwgdHlwZS5nZXRNb2R1bGVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCAhZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYSkge1xuICByZXR1cm4gaXNBcnJheUltcGwoYSk7XG59XG5cbi8qXG4gKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcbiAqIGFuZCBUZW1wb3JhbC4qIHR5cGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMjIwNjQuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxuICogZWFzaWVyLXRvLWRlYnVnIGV4Y2VwdGlvbiB3aXRoIGEgY2xlYXIgZXJyb3JzIG1lc3NhZ2UgbWVzc2FnZSBleHBsYWluaW5nIHRoZVxuICogcHJvYmxlbS4gKEluc3RlYWQgb2YgYSBjb25mdXNpbmcgZXhjZXB0aW9uIHRocm93biBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uXG4gKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxuICovXG4vLyAkRmxvd0ZpeE1lIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAge1xuICAgIC8vIHRvU3RyaW5nVGFnIGlzIG5lZWRlZCBmb3IgbmFtZXNwYWNlZCB0eXBlcyBsaWtlIFRlbXBvcmFsLkluc3RhbnRcbiAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZztcbiAgICB2YXIgdHlwZSA9IGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fCAnT2JqZWN0JztcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8xMDdcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cblxuZnVuY3Rpb24ganN4REVWKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXG4gICAgLy8gaXNzdWUgaWYga2V5IGlzIGFsc28gZXhwbGljaXRseSBkZWNsYXJlZCAoaWUuIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+XG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcbiAgICAvLyA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPiwgYmVjYXVzZSB3ZSBhcmVuJ3QgY3VycmVudGx5IGFibGUgdG8gdGVsbCBpZlxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXG5cbiAgICBpZiAobWF5YmVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAge1xuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAge1xuICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB7XG4gICAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICAgIGlmICghaW5mbykge1xuICAgICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50KSB7XG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcblxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xuXG4gICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZVN0cmluZztcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFVih0eXBlLCBwcm9wcywga2V5LCBzb3VyY2UsIHNlbGYpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gICAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgICBpZiAodmFsaWRUeXBlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59IC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgZXhpc3QgdG8gc3RpbGwgZ2V0IGNoaWxkIHdhcm5pbmdzIGluIGRldlxuLy8gZXZlbiB3aXRoIHRoZSBwcm9kIHRyYW5zZm9ybS4gVGhpcyBtZWFucyB0aGF0IGpzeERFViBpcyBwdXJlbHlcbi8vIG9wdC1pbiBiZWhhdmlvciBmb3IgYmV0dGVyIG1lc3NhZ2VzIGJ1dCB0aGF0IHdlIHdvbid0IHN0b3Bcbi8vIGdpdmluZyB5b3Ugd2FybmluZ3MgaWYgeW91IHVzZSBwcm9kdWN0aW9uIGFwaXMuXG5cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25EeW5hbWljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGpzeCA9ICBqc3hXaXRoVmFsaWRhdGlvbkR5bmFtaWMgOyAvLyB3ZSBtYXkgd2FudCB0byBzcGVjaWFsIGNhc2UganN4cyBpbnRlcm5hbGx5IHRvIHRha2UgYWR2YW50YWdlIG9mIHN0YXRpYyBjaGlsZHJlbi5cbi8vIGZvciBub3cgd2UgY2FuIHNoaXAgaWRlbnRpY2FsIHByb2QgZnVuY3Rpb25zXG5cbnZhciBqc3hzID0gIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljIDtcblxuZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG5leHBvcnRzLmpzeCA9IGpzeDtcbmV4cG9ydHMuanN4cyA9IGpzeHM7XG4gIH0pKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8vIEFQSXNcbmltcG9ydCB0eXBlb2YgQWN0aW9uU2hlZXRJT1MgZnJvbSAnLi9MaWJyYXJpZXMvQWN0aW9uU2hlZXRJT1MvQWN0aW9uU2hlZXRJT1MnO1xuaW1wb3J0IHR5cGVvZiBBbGVydCBmcm9tICcuL0xpYnJhcmllcy9BbGVydC9BbGVydCc7XG5pbXBvcnQgdHlwZW9mIEFuaW1hdGVkIGZyb20gJy4vTGlicmFyaWVzL0FuaW1hdGVkL0FuaW1hdGVkJztcbmltcG9ydCB0eXBlb2YgKiBhcyBBbmltYXRlZE1vZHVsZSBmcm9tICcuL0xpYnJhcmllcy9BbmltYXRlZC9BbmltYXRlZCc7XG5pbXBvcnQgdHlwZW9mIEVhc2luZyBmcm9tICcuL0xpYnJhcmllcy9BbmltYXRlZC9FYXNpbmcnO1xuaW1wb3J0IHR5cGVvZiB1c2VBbmltYXRlZFZhbHVlIGZyb20gJy4vTGlicmFyaWVzL0FuaW1hdGVkL3VzZUFuaW1hdGVkVmFsdWUnO1xuaW1wb3J0IHR5cGVvZiBBcHBTdGF0ZSBmcm9tICcuL0xpYnJhcmllcy9BcHBTdGF0ZS9BcHBTdGF0ZSc7XG5pbXBvcnQgdHlwZW9mIE5hdGl2ZU1vZHVsZXMgZnJvbSAnLi9MaWJyYXJpZXMvQmF0Y2hlZEJyaWRnZS9OYXRpdmVNb2R1bGVzJztcbi8vIENvbXBvbmVudHNcbmltcG9ydCB0eXBlb2YgQWNjZXNzaWJpbGl0eUluZm8gZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9BY2Nlc3NpYmlsaXR5SW5mby9BY2Nlc3NpYmlsaXR5SW5mbyc7XG5pbXBvcnQgdHlwZW9mIEFjdGl2aXR5SW5kaWNhdG9yIGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvQWN0aXZpdHlJbmRpY2F0b3IvQWN0aXZpdHlJbmRpY2F0b3InO1xuaW1wb3J0IHR5cGVvZiBCdXR0b24gZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9CdXR0b24nO1xuaW1wb3J0IHR5cGVvZiBDbGlwYm9hcmQgZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9DbGlwYm9hcmQvQ2xpcGJvYXJkJztcbmltcG9ydCB0eXBlb2YgRHJhd2VyTGF5b3V0QW5kcm9pZCBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL0RyYXdlckFuZHJvaWQvRHJhd2VyTGF5b3V0QW5kcm9pZCc7XG5pbXBvcnQgdHlwZW9mIEtleWJvYXJkIGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvS2V5Ym9hcmQvS2V5Ym9hcmQnO1xuaW1wb3J0IHR5cGVvZiBLZXlib2FyZEF2b2lkaW5nVmlldyBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL0tleWJvYXJkL0tleWJvYXJkQXZvaWRpbmdWaWV3JztcbmltcG9ydCB0eXBlb2YgUG9wdXBNZW51QW5kcm9pZCBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL1BvcHVwTWVudUFuZHJvaWQvUG9wdXBNZW51QW5kcm9pZCc7XG5pbXBvcnQgdHlwZW9mIFByZXNzYWJsZSBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL1ByZXNzYWJsZS9QcmVzc2FibGUnO1xuaW1wb3J0IHR5cGVvZiBQcm9ncmVzc0JhckFuZHJvaWQgZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9Qcm9ncmVzc0JhckFuZHJvaWQvUHJvZ3Jlc3NCYXJBbmRyb2lkJztcbmltcG9ydCB0eXBlb2YgUmVmcmVzaENvbnRyb2wgZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9SZWZyZXNoQ29udHJvbC9SZWZyZXNoQ29udHJvbCc7XG5pbXBvcnQgdHlwZW9mIFNhZmVBcmVhVmlldyBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL1NhZmVBcmVhVmlldy9TYWZlQXJlYVZpZXcnO1xuaW1wb3J0IHR5cGVvZiBTY3JvbGxWaWV3IGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3JztcbmltcG9ydCB0eXBlb2YgU3RhdHVzQmFyIGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvU3RhdHVzQmFyL1N0YXR1c0Jhcic7XG5pbXBvcnQgdHlwZW9mIFN3aXRjaCBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL1N3aXRjaC9Td2l0Y2gnO1xuaW1wb3J0IHR5cGVvZiBJbnB1dEFjY2Vzc29yeVZpZXcgZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9UZXh0SW5wdXQvSW5wdXRBY2Nlc3NvcnlWaWV3JztcbmltcG9ydCB0eXBlb2YgVGV4dElucHV0IGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dCc7XG5pbXBvcnQgdHlwZW9mIFRvYXN0QW5kcm9pZCBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL1RvYXN0QW5kcm9pZC9Ub2FzdEFuZHJvaWQnO1xuaW1wb3J0IHR5cGVvZiBUb3VjaGFibGUgZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9Ub3VjaGFibGUvVG91Y2hhYmxlJztcbmltcG9ydCB0eXBlb2YgVG91Y2hhYmxlSGlnaGxpZ2h0IGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZUhpZ2hsaWdodCc7XG5pbXBvcnQgdHlwZW9mIFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrIGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrJztcbmltcG9ydCB0eXBlb2YgVG91Y2hhYmxlT3BhY2l0eSBmcm9tICcuL0xpYnJhcmllcy9Db21wb25lbnRzL1RvdWNoYWJsZS9Ub3VjaGFibGVPcGFjaXR5JztcbmltcG9ydCB0eXBlb2YgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIGZyb20gJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayc7XG5pbXBvcnQgdHlwZW9mIFZpZXcgZnJvbSAnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IHR5cGVvZiBSZWdpc3RlckNhbGxhYmxlTW9kdWxlIGZyb20gJy4vTGlicmFyaWVzL0NvcmUvcmVnaXN0ZXJDYWxsYWJsZU1vZHVsZSc7XG5pbXBvcnQgdHlwZW9mIE5hdGl2ZUV2ZW50RW1pdHRlciBmcm9tICcuL0xpYnJhcmllcy9FdmVudEVtaXR0ZXIvTmF0aXZlRXZlbnRFbWl0dGVyJztcbmltcG9ydCB0eXBlb2YgUkNURGV2aWNlRXZlbnRFbWl0dGVyIGZyb20gJy4vTGlicmFyaWVzL0V2ZW50RW1pdHRlci9SQ1REZXZpY2VFdmVudEVtaXR0ZXInO1xuaW1wb3J0IHR5cGVvZiBSQ1ROYXRpdmVBcHBFdmVudEVtaXR0ZXIgZnJvbSAnLi9MaWJyYXJpZXMvRXZlbnRFbWl0dGVyL1JDVE5hdGl2ZUFwcEV2ZW50RW1pdHRlcic7XG5pbXBvcnQgdHlwZW9mIEltYWdlIGZyb20gJy4vTGlicmFyaWVzL0ltYWdlL0ltYWdlJztcbmltcG9ydCB0eXBlb2YgSW1hZ2VCYWNrZ3JvdW5kIGZyb20gJy4vTGlicmFyaWVzL0ltYWdlL0ltYWdlQmFja2dyb3VuZCc7XG5pbXBvcnQgdHlwZW9mIEludGVyYWN0aW9uTWFuYWdlciBmcm9tICcuL0xpYnJhcmllcy9JbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXInO1xuaW1wb3J0IHR5cGVvZiBQYW5SZXNwb25kZXIgZnJvbSAnLi9MaWJyYXJpZXMvSW50ZXJhY3Rpb24vUGFuUmVzcG9uZGVyJztcbmltcG9ydCB0eXBlb2YgTGF5b3V0QW5pbWF0aW9uIGZyb20gJy4vTGlicmFyaWVzL0xheW91dEFuaW1hdGlvbi9MYXlvdXRBbmltYXRpb24nO1xuaW1wb3J0IHR5cGVvZiBMaW5raW5nIGZyb20gJy4vTGlicmFyaWVzL0xpbmtpbmcvTGlua2luZyc7XG5pbXBvcnQgdHlwZW9mIEZsYXRMaXN0IGZyb20gJy4vTGlicmFyaWVzL0xpc3RzL0ZsYXRMaXN0JztcbmltcG9ydCB0eXBlb2YgU2VjdGlvbkxpc3QgZnJvbSAnLi9MaWJyYXJpZXMvTGlzdHMvU2VjdGlvbkxpc3QnO1xuaW1wb3J0IHR5cGVvZiBWaXJ0dWFsaXplZExpc3QgZnJvbSAnLi9MaWJyYXJpZXMvTGlzdHMvVmlydHVhbGl6ZWRMaXN0JztcbmltcG9ydCB0eXBlb2YgVmlydHVhbGl6ZWRTZWN0aW9uTGlzdCBmcm9tICcuL0xpYnJhcmllcy9MaXN0cy9WaXJ0dWFsaXplZFNlY3Rpb25MaXN0JztcbmltcG9ydCB0eXBlb2YgTG9nQm94IGZyb20gJy4vTGlicmFyaWVzL0xvZ0JveC9Mb2dCb3gnO1xuaW1wb3J0IHR5cGVvZiBNb2RhbCBmcm9tICcuL0xpYnJhcmllcy9Nb2RhbC9Nb2RhbCc7XG5pbXBvcnQgdHlwZW9mIE5hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkIGZyb20gJy4vTGlicmFyaWVzL05hdGl2ZU1vZHVsZXMvc3BlY3MvTmF0aXZlRGlhbG9nTWFuYWdlckFuZHJvaWQnO1xuaW1wb3J0IHR5cGVvZiBOZXR3b3JraW5nIGZyb20gJy4vTGlicmFyaWVzL05ldHdvcmsvUkNUTmV0d29ya2luZyc7XG5pbXBvcnQgdHlwZW9mICogYXMgU3lzdHJhY2UgZnJvbSAnLi9MaWJyYXJpZXMvUGVyZm9ybWFuY2UvU3lzdHJhY2UnO1xuaW1wb3J0IHR5cGVvZiBQZXJtaXNzaW9uc0FuZHJvaWQgZnJvbSAnLi9MaWJyYXJpZXMvUGVybWlzc2lvbnNBbmRyb2lkL1Blcm1pc3Npb25zQW5kcm9pZCc7XG5pbXBvcnQgdHlwZW9mIFB1c2hOb3RpZmljYXRpb25JT1MgZnJvbSAnLi9MaWJyYXJpZXMvUHVzaE5vdGlmaWNhdGlvbklPUy9QdXNoTm90aWZpY2F0aW9uSU9TJztcbmltcG9ydCB0eXBlb2YgQXBwUmVnaXN0cnkgZnJvbSAnLi9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvQXBwUmVnaXN0cnknO1xuaW1wb3J0IHR5cGVvZiBJMThuTWFuYWdlciBmcm9tICcuL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9JMThuTWFuYWdlcic7XG5pbXBvcnQgdHlwZW9mIHtSb290VGFnQ29udGV4dH0gZnJvbSAnLi9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUm9vdFRhZyc7XG5pbXBvcnQgdHlwZW9mIFVJTWFuYWdlciBmcm9tICcuL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9VSU1hbmFnZXInO1xuaW1wb3J0IHR5cGVvZiBSZWFjdE5hdGl2ZSBmcm9tICcuL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZSc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudCBhcyBfSG9zdENvbXBvbmVudEludGVybmFsfSBmcm9tICcuL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlb2YgU2V0dGluZ3MgZnJvbSAnLi9MaWJyYXJpZXMvU2V0dGluZ3MvU2V0dGluZ3MnO1xuaW1wb3J0IHR5cGVvZiBTaGFyZSBmcm9tICcuL0xpYnJhcmllcy9TaGFyZS9TaGFyZSc7XG5pbXBvcnQgdHlwZW9mIHtQbGF0Zm9ybUNvbG9yfSBmcm9tICcuL0xpYnJhcmllcy9TdHlsZVNoZWV0L1BsYXRmb3JtQ29sb3JWYWx1ZVR5cGVzJztcbi8vIFBsdWdpbnNcbmltcG9ydCB0eXBlb2Yge0R5bmFtaWNDb2xvcklPU30gZnJvbSAnLi9MaWJyYXJpZXMvU3R5bGVTaGVldC9QbGF0Zm9ybUNvbG9yVmFsdWVUeXBlc0lPUyc7XG5pbXBvcnQgdHlwZW9mIHByb2Nlc3NDb2xvciBmcm9tICcuL0xpYnJhcmllcy9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcic7XG5pbXBvcnQgdHlwZW9mIFN0eWxlU2hlZXQgZnJvbSAnLi9MaWJyYXJpZXMvU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlb2YgVGV4dCBmcm9tICcuL0xpYnJhcmllcy9UZXh0L1RleHQnO1xuaW1wb3J0IHR5cGVvZiAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5pbXBvcnQgdHlwZW9mIFVURlNlcXVlbmNlIGZyb20gJy4vTGlicmFyaWVzL1VURlNlcXVlbmNlJztcbmltcG9ydCB0eXBlb2YgQXBwZWFyYW5jZSBmcm9tICcuL0xpYnJhcmllcy9VdGlsaXRpZXMvQXBwZWFyYW5jZSc7XG5pbXBvcnQgdHlwZW9mIEJhY2tIYW5kbGVyIGZyb20gJy4vTGlicmFyaWVzL1V0aWxpdGllcy9CYWNrSGFuZGxlcic7XG5pbXBvcnQgdHlwZW9mIERldmljZUluZm8gZnJvbSAnLi9MaWJyYXJpZXMvVXRpbGl0aWVzL0RldmljZUluZm8nO1xuaW1wb3J0IHR5cGVvZiBEZXZTZXR0aW5ncyBmcm9tICcuL0xpYnJhcmllcy9VdGlsaXRpZXMvRGV2U2V0dGluZ3MnO1xuaW1wb3J0IHR5cGVvZiBEaW1lbnNpb25zIGZyb20gJy4vTGlicmFyaWVzL1V0aWxpdGllcy9EaW1lbnNpb25zJztcbmltcG9ydCB0eXBlb2YgUGl4ZWxSYXRpbyBmcm9tICcuL0xpYnJhcmllcy9VdGlsaXRpZXMvUGl4ZWxSYXRpbyc7XG5pbXBvcnQgdHlwZW9mIFBsYXRmb3JtIGZyb20gJy4vTGlicmFyaWVzL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgdHlwZW9mIHVzZUNvbG9yU2NoZW1lIGZyb20gJy4vTGlicmFyaWVzL1V0aWxpdGllcy91c2VDb2xvclNjaGVtZSc7XG5pbXBvcnQgdHlwZW9mIHVzZVdpbmRvd0RpbWVuc2lvbnMgZnJvbSAnLi9MaWJyYXJpZXMvVXRpbGl0aWVzL3VzZVdpbmRvd0RpbWVuc2lvbnMnO1xuaW1wb3J0IHR5cGVvZiBWaWJyYXRpb24gZnJvbSAnLi9MaWJyYXJpZXMvVmlicmF0aW9uL1ZpYnJhdGlvbic7XG5pbXBvcnQgdHlwZW9mIFllbGxvd0JveCBmcm9tICcuL0xpYnJhcmllcy9ZZWxsb3dCb3gvWWVsbG93Qm94RGVwcmVjYXRlZCc7XG5cbmNvbnN0IHdhcm5PbmNlID0gcmVxdWlyZSgnLi9MaWJyYXJpZXMvVXRpbGl0aWVzL3dhcm5PbmNlJyk7XG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxuZXhwb3J0IHR5cGUgSG9zdENvbXBvbmVudDxUPiA9IF9Ib3N0Q29tcG9uZW50SW50ZXJuYWw8VD47XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXQgcmVnaXN0ZXJDYWxsYWJsZU1vZHVsZSgpOiBSZWdpc3RlckNhbGxhYmxlTW9kdWxlIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29yZS9yZWdpc3RlckNhbGxhYmxlTW9kdWxlJykuZGVmYXVsdDtcbiAgfSxcbiAgLy8gQ29tcG9uZW50c1xuICBnZXQgQWNjZXNzaWJpbGl0eUluZm8oKTogQWNjZXNzaWJpbGl0eUluZm8ge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL0FjY2Vzc2liaWxpdHlJbmZvL0FjY2Vzc2liaWxpdHlJbmZvJylcbiAgICAgIC5kZWZhdWx0O1xuICB9LFxuICBnZXQgQWN0aXZpdHlJbmRpY2F0b3IoKTogQWN0aXZpdHlJbmRpY2F0b3Ige1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL0FjdGl2aXR5SW5kaWNhdG9yL0FjdGl2aXR5SW5kaWNhdG9yJylcbiAgICAgIC5kZWZhdWx0O1xuICB9LFxuICBnZXQgQnV0dG9uKCk6IEJ1dHRvbiB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvQnV0dG9uJykuZGVmYXVsdDtcbiAgfSxcbiAgLy8gJEZsb3dGaXhNZVt2YWx1ZS1hcy10eXBlXVxuICBnZXQgRHJhd2VyTGF5b3V0QW5kcm9pZCgpOiBEcmF3ZXJMYXlvdXRBbmRyb2lkIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9EcmF3ZXJBbmRyb2lkL0RyYXdlckxheW91dEFuZHJvaWQnKTtcbiAgfSxcbiAgZ2V0IEZsYXRMaXN0KCk6IEZsYXRMaXN0IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvTGlzdHMvRmxhdExpc3QnKTtcbiAgfSxcbiAgZ2V0IEltYWdlKCk6IEltYWdlIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvSW1hZ2UvSW1hZ2UnKTtcbiAgfSxcbiAgZ2V0IEltYWdlQmFja2dyb3VuZCgpOiBJbWFnZUJhY2tncm91bmQge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9JbWFnZS9JbWFnZUJhY2tncm91bmQnKTtcbiAgfSxcbiAgZ2V0IElucHV0QWNjZXNzb3J5VmlldygpOiBJbnB1dEFjY2Vzc29yeVZpZXcge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL1RleHRJbnB1dC9JbnB1dEFjY2Vzc29yeVZpZXcnKVxuICAgICAgLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBLZXlib2FyZEF2b2lkaW5nVmlldygpOiBLZXlib2FyZEF2b2lkaW5nVmlldyB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvS2V5Ym9hcmQvS2V5Ym9hcmRBdm9pZGluZ1ZpZXcnKVxuICAgICAgLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBQb3B1cE1lbnVBbmRyb2lkKCk6IFBvcHVwTWVudUFuZHJvaWQge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL1BvcHVwTWVudUFuZHJvaWQvUG9wdXBNZW51QW5kcm9pZCcpXG4gICAgICAuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IE1vZGFsKCk6IE1vZGFsIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvTW9kYWwvTW9kYWwnKTtcbiAgfSxcbiAgZ2V0IFByZXNzYWJsZSgpOiBQcmVzc2FibGUge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL1ByZXNzYWJsZS9QcmVzc2FibGUnKS5kZWZhdWx0O1xuICB9LFxuICAvLyAkRmxvd0ZpeE1lW3ZhbHVlLWFzLXR5cGVdXG4gIGdldCBQcm9ncmVzc0JhckFuZHJvaWQoKTogUHJvZ3Jlc3NCYXJBbmRyb2lkIHtcbiAgICB3YXJuT25jZShcbiAgICAgICdwcm9ncmVzcy1iYXItYW5kcm9pZC1tb3ZlZCcsXG4gICAgICAnUHJvZ3Jlc3NCYXJBbmRyb2lkIGhhcyBiZWVuIGV4dHJhY3RlZCBmcm9tIHJlYWN0LW5hdGl2ZSBjb3JlIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gJyArXG4gICAgICAgIFwiSXQgY2FuIG5vdyBiZSBpbnN0YWxsZWQgYW5kIGltcG9ydGVkIGZyb20gJ0ByZWFjdC1uYXRpdmUtY29tbXVuaXR5L3Byb2dyZXNzLWJhci1hbmRyb2lkJyBpbnN0ZWFkIG9mICdyZWFjdC1uYXRpdmUnLiBcIiArXG4gICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1wcm9ncmVzcy12aWV3L3Byb2dyZXNzLWJhci1hbmRyb2lkJyxcbiAgICApO1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL1Byb2dyZXNzQmFyQW5kcm9pZC9Qcm9ncmVzc0JhckFuZHJvaWQnKTtcbiAgfSxcbiAgZ2V0IFJlZnJlc2hDb250cm9sKCk6IFJlZnJlc2hDb250cm9sIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9SZWZyZXNoQ29udHJvbC9SZWZyZXNoQ29udHJvbCcpO1xuICB9LFxuICBnZXQgU2FmZUFyZWFWaWV3KCk6IFNhZmVBcmVhVmlldyB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvU2FmZUFyZWFWaWV3L1NhZmVBcmVhVmlldycpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBTY3JvbGxWaWV3KCk6IFNjcm9sbFZpZXcge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL1Njcm9sbFZpZXcvU2Nyb2xsVmlldycpO1xuICB9LFxuICBnZXQgU2VjdGlvbkxpc3QoKTogU2VjdGlvbkxpc3Qge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9MaXN0cy9TZWN0aW9uTGlzdCcpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBTdGF0dXNCYXIoKTogU3RhdHVzQmFyIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9TdGF0dXNCYXIvU3RhdHVzQmFyJyk7XG4gIH0sXG4gIGdldCBTd2l0Y2goKTogU3dpdGNoIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9Td2l0Y2gvU3dpdGNoJykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IFRleHQoKTogVGV4dCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1RleHQvVGV4dCcpO1xuICB9LFxuICBnZXQgVGV4dElucHV0KCk6IFRleHRJbnB1dCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dCcpO1xuICB9LFxuICBnZXQgVG91Y2hhYmxlKCk6IFRvdWNoYWJsZSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZScpO1xuICB9LFxuICBnZXQgVG91Y2hhYmxlSGlnaGxpZ2h0KCk6IFRvdWNoYWJsZUhpZ2hsaWdodCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZUhpZ2hsaWdodCcpO1xuICB9LFxuICBnZXQgVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2soKTogVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2sge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL1RvdWNoYWJsZS9Ub3VjaGFibGVOYXRpdmVGZWVkYmFjaycpO1xuICB9LFxuICBnZXQgVG91Y2hhYmxlT3BhY2l0eSgpOiBUb3VjaGFibGVPcGFjaXR5IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9Ub3VjaGFibGUvVG91Y2hhYmxlT3BhY2l0eScpO1xuICB9LFxuICBnZXQgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrKCk6IFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaycpO1xuICB9LFxuICBnZXQgVmlldygpOiBWaWV3IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXcnKTtcbiAgfSxcbiAgZ2V0IFZpcnR1YWxpemVkTGlzdCgpOiBWaXJ0dWFsaXplZExpc3Qge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9MaXN0cy9WaXJ0dWFsaXplZExpc3QnKTtcbiAgfSxcbiAgZ2V0IFZpcnR1YWxpemVkU2VjdGlvbkxpc3QoKTogVmlydHVhbGl6ZWRTZWN0aW9uTGlzdCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0xpc3RzL1ZpcnR1YWxpemVkU2VjdGlvbkxpc3QnKTtcbiAgfSxcblxuICAvLyBBUElzXG4gIGdldCBBY3Rpb25TaGVldElPUygpOiBBY3Rpb25TaGVldElPUyB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0FjdGlvblNoZWV0SU9TL0FjdGlvblNoZWV0SU9TJyk7XG4gIH0sXG4gIGdldCBBbGVydCgpOiBBbGVydCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0FsZXJ0L0FsZXJ0Jyk7XG4gIH0sXG4gIC8vIEluY2x1ZGUgYW55IHR5cGVzIGV4cG9ydGVkIGluIHRoZSBBbmltYXRlZCBtb2R1bGUgdG9nZXRoZXIgd2l0aCBpdHMgZGVmYXVsdCBleHBvcnQsIHNvXG4gIC8vIHlvdSBjYW4gcmVmZXJlbmNlcyB0eXBlcyBzdWNoIGFzIEFuaW1hdGVkLk51bWVyaWNcbiAgZ2V0IEFuaW1hdGVkKCk6IHsuLi4kRGlmZjxBbmltYXRlZE1vZHVsZSwge2RlZmF1bHQ6IGFueX0+LCAuLi5BbmltYXRlZH0ge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltwcm9wLW1pc3NpbmddOiB3ZSBvbmx5IHJldHVybiB0aGUgZGVmYXVsdCBleHBvcnQsIGFsbCBvdGhlciBleHBvcnRzIGFyZSB0eXBlc1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9BbmltYXRlZC9BbmltYXRlZCcpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBBcHBlYXJhbmNlKCk6IEFwcGVhcmFuY2Uge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9VdGlsaXRpZXMvQXBwZWFyYW5jZScpO1xuICB9LFxuICBnZXQgQXBwUmVnaXN0cnkoKTogQXBwUmVnaXN0cnkge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9BcHBSZWdpc3RyeScpO1xuICB9LFxuICBnZXQgQXBwU3RhdGUoKTogQXBwU3RhdGUge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9BcHBTdGF0ZS9BcHBTdGF0ZScpO1xuICB9LFxuICBnZXQgQmFja0hhbmRsZXIoKTogQmFja0hhbmRsZXIge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9VdGlsaXRpZXMvQmFja0hhbmRsZXInKTtcbiAgfSxcbiAgZ2V0IENsaXBib2FyZCgpOiBDbGlwYm9hcmQge1xuICAgIHdhcm5PbmNlKFxuICAgICAgJ2NsaXBib2FyZC1tb3ZlZCcsXG4gICAgICAnQ2xpcGJvYXJkIGhhcyBiZWVuIGV4dHJhY3RlZCBmcm9tIHJlYWN0LW5hdGl2ZSBjb3JlIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gJyArXG4gICAgICAgIFwiSXQgY2FuIG5vdyBiZSBpbnN0YWxsZWQgYW5kIGltcG9ydGVkIGZyb20gJ0ByZWFjdC1uYXRpdmUtY2xpcGJvYXJkL2NsaXBib2FyZCcgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1uYXRpdmUtY2xpcGJvYXJkL2NsaXBib2FyZCcsXG4gICAgKTtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9DbGlwYm9hcmQvQ2xpcGJvYXJkJyk7XG4gIH0sXG4gIGdldCBEZXZpY2VJbmZvKCk6IERldmljZUluZm8ge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9VdGlsaXRpZXMvRGV2aWNlSW5mbycpO1xuICB9LFxuICBnZXQgRGV2U2V0dGluZ3MoKTogRGV2U2V0dGluZ3Mge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9VdGlsaXRpZXMvRGV2U2V0dGluZ3MnKTtcbiAgfSxcbiAgZ2V0IERpbWVuc2lvbnMoKTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1V0aWxpdGllcy9EaW1lbnNpb25zJykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IEVhc2luZygpOiBFYXNpbmcge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9BbmltYXRlZC9FYXNpbmcnKS5kZWZhdWx0O1xuICB9LFxuICBnZXQgZmluZE5vZGVIYW5kbGUoKTogJFByb3BlcnR5VHlwZTxSZWFjdE5hdGl2ZSwgJ2ZpbmROb2RlSGFuZGxlJz4ge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9SZW5kZXJlclByb3h5JykuZmluZE5vZGVIYW5kbGU7XG4gIH0sXG4gIGdldCBJMThuTWFuYWdlcigpOiBJMThuTWFuYWdlciB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1JlYWN0TmF0aXZlL0kxOG5NYW5hZ2VyJyk7XG4gIH0sXG4gIGdldCBJbnRlcmFjdGlvbk1hbmFnZXIoKTogSW50ZXJhY3Rpb25NYW5hZ2VyIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvSW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyJyk7XG4gIH0sXG4gIGdldCBLZXlib2FyZCgpOiBLZXlib2FyZCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0NvbXBvbmVudHMvS2V5Ym9hcmQvS2V5Ym9hcmQnKTtcbiAgfSxcbiAgZ2V0IExheW91dEFuaW1hdGlvbigpOiBMYXlvdXRBbmltYXRpb24ge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9MYXlvdXRBbmltYXRpb24vTGF5b3V0QW5pbWF0aW9uJyk7XG4gIH0sXG4gIGdldCBMaW5raW5nKCk6IExpbmtpbmcge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9MaW5raW5nL0xpbmtpbmcnKTtcbiAgfSxcbiAgZ2V0IExvZ0JveCgpOiBMb2dCb3gge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Mb2dCb3gvTG9nQm94JykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IE5hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkKCk6IE5hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZCcpXG4gICAgICAuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IE5hdGl2ZUV2ZW50RW1pdHRlcigpOiBOYXRpdmVFdmVudEVtaXR0ZXIge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9FdmVudEVtaXR0ZXIvTmF0aXZlRXZlbnRFbWl0dGVyJykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IE5ldHdvcmtpbmcoKTogTmV0d29ya2luZyB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL05ldHdvcmsvUkNUTmV0d29ya2luZycpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBQYW5SZXNwb25kZXIoKTogUGFuUmVzcG9uZGVyIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvSW50ZXJhY3Rpb24vUGFuUmVzcG9uZGVyJykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IFBlcm1pc3Npb25zQW5kcm9pZCgpOiBQZXJtaXNzaW9uc0FuZHJvaWQge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9QZXJtaXNzaW9uc0FuZHJvaWQvUGVybWlzc2lvbnNBbmRyb2lkJyk7XG4gIH0sXG4gIGdldCBQaXhlbFJhdGlvKCk6IFBpeGVsUmF0aW8ge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9VdGlsaXRpZXMvUGl4ZWxSYXRpbycpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBQdXNoTm90aWZpY2F0aW9uSU9TKCk6IFB1c2hOb3RpZmljYXRpb25JT1Mge1xuICAgIHdhcm5PbmNlKFxuICAgICAgJ3B1c2hOb3RpZmljYXRpb25JT1MtbW92ZWQnLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25JT1MgaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20gcmVhY3QtbmF0aXZlIGNvcmUgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAnICtcbiAgICAgICAgXCJJdCBjYW4gbm93IGJlIGluc3RhbGxlZCBhbmQgaW1wb3J0ZWQgZnJvbSAnQHJlYWN0LW5hdGl2ZS1jb21tdW5pdHkvcHVzaC1ub3RpZmljYXRpb24taW9zJyBpbnN0ZWFkIG9mICdyZWFjdC1uYXRpdmUnLiBcIiArXG4gICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1wdXNoLW5vdGlmaWNhdGlvbi9pb3MnLFxuICAgICk7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1B1c2hOb3RpZmljYXRpb25JT1MvUHVzaE5vdGlmaWNhdGlvbklPUycpO1xuICB9LFxuICBnZXQgU2V0dGluZ3MoKTogU2V0dGluZ3Mge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9TZXR0aW5ncy9TZXR0aW5ncycpO1xuICB9LFxuICBnZXQgU2hhcmUoKTogU2hhcmUge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9TaGFyZS9TaGFyZScpO1xuICB9LFxuICBnZXQgU3R5bGVTaGVldCgpOiBTdHlsZVNoZWV0IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvU3R5bGVTaGVldC9TdHlsZVNoZWV0Jyk7XG4gIH0sXG4gIGdldCBTeXN0cmFjZSgpOiBTeXN0cmFjZSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1BlcmZvcm1hbmNlL1N5c3RyYWNlJyk7XG4gIH0sXG4gIC8vICRGbG93Rml4TWVbdmFsdWUtYXMtdHlwZV1cbiAgZ2V0IFRvYXN0QW5kcm9pZCgpOiBUb2FzdEFuZHJvaWQge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9Db21wb25lbnRzL1RvYXN0QW5kcm9pZC9Ub2FzdEFuZHJvaWQnKTtcbiAgfSxcbiAgZ2V0IFR1cmJvTW9kdWxlUmVnaXN0cnkoKTogVHVyYm9Nb2R1bGVSZWdpc3RyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknKTtcbiAgfSxcbiAgZ2V0IFVJTWFuYWdlcigpOiBVSU1hbmFnZXIge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9VSU1hbmFnZXInKTtcbiAgfSxcbiAgZ2V0IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKCk6ICRQcm9wZXJ0eVR5cGU8XG4gICAgUmVhY3ROYXRpdmUsXG4gICAgJ3Vuc3RhYmxlX2JhdGNoZWRVcGRhdGVzJyxcbiAgPiB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1JlYWN0TmF0aXZlL1JlbmRlcmVyUHJveHknKVxuICAgICAgLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzO1xuICB9LFxuICBnZXQgdXNlQW5pbWF0ZWRWYWx1ZSgpOiB1c2VBbmltYXRlZFZhbHVlIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvQW5pbWF0ZWQvdXNlQW5pbWF0ZWRWYWx1ZScpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCB1c2VDb2xvclNjaGVtZSgpOiB1c2VDb2xvclNjaGVtZSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1V0aWxpdGllcy91c2VDb2xvclNjaGVtZScpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCB1c2VXaW5kb3dEaW1lbnNpb25zKCk6IHVzZVdpbmRvd0RpbWVuc2lvbnMge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9VdGlsaXRpZXMvdXNlV2luZG93RGltZW5zaW9ucycpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBVVEZTZXF1ZW5jZSgpOiBVVEZTZXF1ZW5jZSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1VURlNlcXVlbmNlJykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IFZpYnJhdGlvbigpOiBWaWJyYXRpb24ge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9WaWJyYXRpb24vVmlicmF0aW9uJyk7XG4gIH0sXG4gIGdldCBZZWxsb3dCb3goKTogWWVsbG93Qm94IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvWWVsbG93Qm94L1llbGxvd0JveERlcHJlY2F0ZWQnKTtcbiAgfSxcblxuICAvLyBQbHVnaW5zXG4gIGdldCBEZXZpY2VFdmVudEVtaXR0ZXIoKTogUkNURGV2aWNlRXZlbnRFbWl0dGVyIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvRXZlbnRFbWl0dGVyL1JDVERldmljZUV2ZW50RW1pdHRlcicpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBEeW5hbWljQ29sb3JJT1MoKTogRHluYW1pY0NvbG9ySU9TIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvU3R5bGVTaGVldC9QbGF0Zm9ybUNvbG9yVmFsdWVUeXBlc0lPUycpXG4gICAgICAuRHluYW1pY0NvbG9ySU9TO1xuICB9LFxuICBnZXQgTmF0aXZlQXBwRXZlbnRFbWl0dGVyKCk6IFJDVE5hdGl2ZUFwcEV2ZW50RW1pdHRlciB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0V2ZW50RW1pdHRlci9SQ1ROYXRpdmVBcHBFdmVudEVtaXR0ZXInKTtcbiAgfSxcbiAgZ2V0IE5hdGl2ZU1vZHVsZXMoKTogTmF0aXZlTW9kdWxlcyB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL0JhdGNoZWRCcmlkZ2UvTmF0aXZlTW9kdWxlcycpO1xuICB9LFxuICBnZXQgUGxhdGZvcm0oKTogUGxhdGZvcm0ge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9VdGlsaXRpZXMvUGxhdGZvcm0nKTtcbiAgfSxcbiAgZ2V0IFBsYXRmb3JtQ29sb3IoKTogUGxhdGZvcm1Db2xvciB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1N0eWxlU2hlZXQvUGxhdGZvcm1Db2xvclZhbHVlVHlwZXMnKVxuICAgICAgLlBsYXRmb3JtQ29sb3I7XG4gIH0sXG4gIGdldCBwcm9jZXNzQ29sb3IoKTogcHJvY2Vzc0NvbG9yIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaWJyYXJpZXMvU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0O1xuICB9LFxuICBnZXQgcmVxdWlyZU5hdGl2ZUNvbXBvbmVudCgpOiA8VD4oXG4gICAgdWlWaWV3Q2xhc3NOYW1lOiBzdHJpbmcsXG4gICkgPT4gSG9zdENvbXBvbmVudDxUPiB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlicmFyaWVzL1JlYWN0TmF0aXZlL3JlcXVpcmVOYXRpdmVDb21wb25lbnQnKS5kZWZhdWx0O1xuICB9LFxuICBnZXQgUm9vdFRhZ0NvbnRleHQoKTogUm9vdFRhZ0NvbnRleHQge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9Sb290VGFnJykuUm9vdFRhZ0NvbnRleHQ7XG4gIH0sXG4gIGdldCB1bnN0YWJsZV9lbmFibGVMb2dCb3goKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuICgpID0+XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdMb2dCb3ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCB1bnN0YWJsZV9lbmFibGVMb2dCb3goKSBhbnltb3JlLiBUaGlzIGlzIGEgbm8gb3AgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCB2ZXJzaW9uLicsXG4gICAgICApO1xuICB9LFxufTtcblxuaWYgKF9fREVWX18pIHtcbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIEFSVC4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgQVJULiAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdBUlQnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdBUlQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgXCJQbGVhc2UgdXBncmFkZSB0byB1c2UgZWl0aGVyICdyZWFjdC1uYXRpdmUtc3ZnJyBvciBhIHNpbWlsYXIgcGFja2FnZS4gXCIgK1xuICAgICAgICAgIFwiSWYgeW91IGNhbm5vdCB1cGdyYWRlIHRvIGEgZGlmZmVyZW50IGxpYnJhcnksIHBsZWFzZSBpbnN0YWxsIHRoZSBkZXByZWNhdGVkICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9hcnQnIHBhY2thZ2UuIFwiICtcbiAgICAgICAgICAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1uYXRpdmUtYXJ0L2FydCcsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBMaXN0Vmlldy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgTGlzdFZpZXcuICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ0xpc3RWaWV3Jywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnTGlzdFZpZXcgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2ZiLm1lL25vbGlzdHZpZXcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb3IgdXNlICcgK1xuICAgICAgICAgICdgZGVwcmVjYXRlZC1yZWFjdC1uYXRpdmUtbGlzdHZpZXdgLicsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBTd2lwZWFibGVMaXN0Vmlldy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgU3dpcGVhYmxlTGlzdFZpZXcuICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1N3aXBlYWJsZUxpc3RWaWV3Jywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnU3dpcGVhYmxlTGlzdFZpZXcgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2ZiLm1lL25vbGlzdHZpZXcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb3IgdXNlICcgK1xuICAgICAgICAgICdgZGVwcmVjYXRlZC1yZWFjdC1uYXRpdmUtc3dpcGVhYmxlLWxpc3R2aWV3YC4nLFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcblxuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgV2ViVmlldy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgV2ViVmlldy4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnV2ViVmlldycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ1dlYlZpZXcgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgXCJJdCBjYW4gbm93IGJlIGluc3RhbGxlZCBhbmQgaW1wb3J0ZWQgZnJvbSAncmVhY3QtbmF0aXZlLXdlYnZpZXcnIGluc3RlYWQgb2YgJ3JlYWN0LW5hdGl2ZScuIFwiICtcbiAgICAgICAgICAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1uYXRpdmUtd2Vidmlldy9yZWFjdC1uYXRpdmUtd2VidmlldycsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBOZXRJbmZvLiAqL1xuICAvKiAkRmxvd0ZpeE1lW2ludmFsaWQtZXhwb3J0XSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBOZXRJbmZvLiAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdOZXRJbmZvJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnTmV0SW5mbyBoYXMgYmVlbiByZW1vdmVkIGZyb20gUmVhY3QgTmF0aXZlLiAnICtcbiAgICAgICAgICBcIkl0IGNhbiBub3cgYmUgaW5zdGFsbGVkIGFuZCBpbXBvcnRlZCBmcm9tICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9uZXRpbmZvJyBpbnN0ZWFkIG9mICdyZWFjdC1uYXRpdmUnLiBcIiArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtbmF0aXZlLW5ldGluZm8vcmVhY3QtbmF0aXZlLW5ldGluZm8nLFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcblxuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgQ2FtZXJhUm9sbC4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgQ2FtZXJhUm9sbC4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnQ2FtZXJhUm9sbCcsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0NhbWVyYVJvbGwgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgXCJJdCBjYW4gbm93IGJlIGluc3RhbGxlZCBhbmQgaW1wb3J0ZWQgZnJvbSAnQHJlYWN0LW5hdGl2ZS1jYW1lcmEtcm9sbC9jYW1lcmEtcm9sbCcgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1jYW1lcmFyb2xsL3JlYWN0LW5hdGl2ZS1jYW1lcmFyb2xsJyxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIEltYWdlU3RvcmUuICovXG4gIC8qICRGbG93Rml4TWVbaW52YWxpZC1leHBvcnRdIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIEltYWdlU3RvcmUuICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ0ltYWdlU3RvcmUnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdJbWFnZVN0b3JlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBSZWFjdCBOYXRpdmUuICcgK1xuICAgICAgICAgICdUbyBnZXQgYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgZnJvbSBhIGxvY2FsIGltYWdlIHVzZSBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXM6JyArXG4gICAgICAgICAgXCIqIGV4cG8tZmlsZS1zeXN0ZW06IGByZWFkQXNTdHJpbmdBc3luYyhmaWxlcGF0aCwgJ2Jhc2U2NCcpYFwiICtcbiAgICAgICAgICBcIiogcmVhY3QtbmF0aXZlLWZzOiBgcmVhZEZpbGUoZmlsZXBhdGgsICdiYXNlNjQnKWBcIixcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIEltYWdlRWRpdG9yLiAqL1xuICAvKiAkRmxvd0ZpeE1lW2ludmFsaWQtZXhwb3J0XSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBJbWFnZUVkaXRvci4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnSW1hZ2VFZGl0b3InLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdJbWFnZUVkaXRvciBoYXMgYmVlbiByZW1vdmVkIGZyb20gUmVhY3QgTmF0aXZlLiAnICtcbiAgICAgICAgICBcIkl0IGNhbiBub3cgYmUgaW5zdGFsbGVkIGFuZCBpbXBvcnRlZCBmcm9tICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9pbWFnZS1lZGl0b3InIGluc3RlYWQgb2YgJ3JlYWN0LW5hdGl2ZScuIFwiICtcbiAgICAgICAgICAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jYWxsc3RhY2svcmVhY3QtbmF0aXZlLWltYWdlLWVkaXRvcicsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBUaW1lUGlja2VyQW5kcm9pZC4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgVGltZVBpY2tlckFuZHJvaWQuICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1RpbWVQaWNrZXJBbmRyb2lkJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnVGltZVBpY2tlckFuZHJvaWQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgXCJJdCBjYW4gbm93IGJlIGluc3RhbGxlZCBhbmQgaW1wb3J0ZWQgZnJvbSAnQHJlYWN0LW5hdGl2ZS1jb21tdW5pdHkvZGF0ZXRpbWVwaWNrZXInIGluc3RlYWQgb2YgJ3JlYWN0LW5hdGl2ZScuIFwiICtcbiAgICAgICAgICAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1uYXRpdmUtZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXInLFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcblxuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgVG9vbGJhckFuZHJvaWQuICovXG4gIC8qICRGbG93Rml4TWVbaW52YWxpZC1leHBvcnRdIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIFRvb2xiYXJBbmRyb2lkLiAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdUb29sYmFyQW5kcm9pZCcsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ1Rvb2xiYXJBbmRyb2lkIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBSZWFjdCBOYXRpdmUuICcgK1xuICAgICAgICAgIFwiSXQgY2FuIG5vdyBiZSBpbnN0YWxsZWQgYW5kIGltcG9ydGVkIGZyb20gJ0ByZWFjdC1uYXRpdmUtY29tbXVuaXR5L3Rvb2xiYXItYW5kcm9pZCcgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS10b29sYmFyLWFuZHJvaWQvdG9vbGJhci1hbmRyb2lkJyxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIFZpZXdQYWdlckFuZHJvaWQuICovXG4gIC8qICRGbG93Rml4TWVbaW52YWxpZC1leHBvcnRdIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIFZpZXdQYWdlckFuZHJvaWQuICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1ZpZXdQYWdlckFuZHJvaWQnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdWaWV3UGFnZXJBbmRyb2lkIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBSZWFjdCBOYXRpdmUuICcgK1xuICAgICAgICAgIFwiSXQgY2FuIG5vdyBiZSBpbnN0YWxsZWQgYW5kIGltcG9ydGVkIGZyb20gJ3JlYWN0LW5hdGl2ZS1wYWdlci12aWV3JyBpbnN0ZWFkIG9mICdyZWFjdC1uYXRpdmUnLiBcIiArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vY2FsbHN0YWNrL3JlYWN0LW5hdGl2ZS1wYWdlci12aWV3JyxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIENoZWNrQm94LiAqL1xuICAvKiAkRmxvd0ZpeE1lW2ludmFsaWQtZXhwb3J0XSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBDaGVja0JveC4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnQ2hlY2tCb3gnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdDaGVja0JveCBoYXMgYmVlbiByZW1vdmVkIGZyb20gUmVhY3QgTmF0aXZlLiAnICtcbiAgICAgICAgICBcIkl0IGNhbiBub3cgYmUgaW5zdGFsbGVkIGFuZCBpbXBvcnRlZCBmcm9tICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9jaGVja2JveCcgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1jaGVja2JveC9yZWFjdC1uYXRpdmUtY2hlY2tib3gnLFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcblxuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgU2VnbWVudGVkQ29udHJvbElPUy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgU2VnbWVudGVkQ29udHJvbElPUy4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnU2VnbWVudGVkQ29udHJvbElPUycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ1NlZ21lbnRlZENvbnRyb2xJT1MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgXCJJdCBjYW4gbm93IGJlIGluc3RhbGxlZCBhbmQgaW1wb3J0ZWQgZnJvbSAnQHJlYWN0LW5hdGl2ZS1zZWdtZW50ZWQtY29udHJvbC9zZWdtZW50ZWQtY29udHJvbCcgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy5cIiArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtbmF0aXZlLXNlZ21lbnRlZC1jb250cm9sL3NlZ21lbnRlZC1jb250cm9sJyxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIFN0YXR1c0JhcklPUy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgU3RhdHVzQmFySU9TLiAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdTdGF0dXNCYXJJT1MnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdTdGF0dXNCYXJJT1MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgJ0hhcyBiZWVuIG1lcmdlZCB3aXRoIFN0YXR1c0Jhci4gJyArXG4gICAgICAgICAgJ1NlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3N0YXR1c2JhcicsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBQaWNrZXJJT1MuICovXG4gIC8qICRGbG93Rml4TWVbaW52YWxpZC1leHBvcnRdIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIFBpY2tlcklPUy4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnUGlja2VySU9TJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnUGlja2VySU9TIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBSZWFjdCBOYXRpdmUuICcgK1xuICAgICAgICAgIFwiSXQgY2FuIG5vdyBiZSBpbnN0YWxsZWQgYW5kIGltcG9ydGVkIGZyb20gJ0ByZWFjdC1uYXRpdmUtcGlja2VyL3BpY2tlcicgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1waWNrZXIvcGlja2VyJyxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIFBpY2tlci4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgUGlja2VyLiAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdQaWNrZXInLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdQaWNrZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgXCJJdCBjYW4gbm93IGJlIGluc3RhbGxlZCBhbmQgaW1wb3J0ZWQgZnJvbSAnQHJlYWN0LW5hdGl2ZS1waWNrZXIvcGlja2VyJyBpbnN0ZWFkIG9mICdyZWFjdC1uYXRpdmUnLiBcIiArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtbmF0aXZlLXBpY2tlci9waWNrZXInLFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIERhdGVQaWNrZXJBbmRyb2lkLiAqL1xuICAvKiAkRmxvd0ZpeE1lW2ludmFsaWQtZXhwb3J0XSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBEYXRlUGlja2VyQW5kcm9pZC4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnRGF0ZVBpY2tlckFuZHJvaWQnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdEYXRlUGlja2VyQW5kcm9pZCBoYXMgYmVlbiByZW1vdmVkIGZyb20gUmVhY3QgTmF0aXZlLiAnICtcbiAgICAgICAgICBcIkl0IGNhbiBub3cgYmUgaW5zdGFsbGVkIGFuZCBpbXBvcnRlZCBmcm9tICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9kYXRldGltZXBpY2tlcicgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1kYXRldGltZXBpY2tlci9kYXRldGltZXBpY2tlcicsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgTWFza2VkVmlld0lPUy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgTWFza2VkVmlld0lPUy4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnTWFza2VkVmlld0lPUycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ01hc2tlZFZpZXdJT1MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0IE5hdGl2ZS4gJyArXG4gICAgICAgICAgXCJJdCBjYW4gbm93IGJlIGluc3RhbGxlZCBhbmQgaW1wb3J0ZWQgZnJvbSAnQHJlYWN0LW5hdGl2ZS1tYXNrZWQtdmlldy9tYXNrZWQtdmlldycgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1tYXNrZWQtdmlldy9tYXNrZWQtdmlldycsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgQXN5bmNTdG9yYWdlLiAqL1xuICAvKiAkRmxvd0ZpeE1lW2ludmFsaWQtZXhwb3J0XSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBBc3luY1N0b3JhZ2UuICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ0FzeW5jU3RvcmFnZScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0FzeW5jU3RvcmFnZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gcmVhY3QtbmF0aXZlIGNvcmUuICcgK1xuICAgICAgICAgIFwiSXQgY2FuIG5vdyBiZSBpbnN0YWxsZWQgYW5kIGltcG9ydGVkIGZyb20gJ0ByZWFjdC1uYXRpdmUtYXN5bmMtc3RvcmFnZS9hc3luYy1zdG9yYWdlJyBpbnN0ZWFkIG9mICdyZWFjdC1uYXRpdmUnLiBcIiArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtbmF0aXZlLWFzeW5jLXN0b3JhZ2UvYXN5bmMtc3RvcmFnZScsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgSW1hZ2VQaWNrZXJJT1MuICovXG4gIC8qICRGbG93Rml4TWVbaW52YWxpZC1leHBvcnRdIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIEltYWdlUGlja2VySU9TLiAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdJbWFnZVBpY2tlcklPUycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0ltYWdlUGlja2VySU9TIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBSZWFjdCBOYXRpdmUuICcgK1xuICAgICAgICAgIFwiUGxlYXNlIHVwZ3JhZGUgdG8gdXNlIGVpdGhlciAncmVhY3QtbmF0aXZlLWltYWdlLXBpY2tlcicgb3IgJ2V4cG8taW1hZ2UtcGlja2VyJy4gXCIgK1xuICAgICAgICAgIFwiSWYgeW91IGNhbm5vdCB1cGdyYWRlIHRvIGEgZGlmZmVyZW50IGxpYnJhcnksIHBsZWFzZSBpbnN0YWxsIHRoZSBkZXByZWNhdGVkICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9pbWFnZS1waWNrZXItaW9zJyBwYWNrYWdlLiBcIiArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vcm5jLWFyY2hpdmUvcmVhY3QtbmF0aXZlLWltYWdlLXBpY2tlci1pb3MnLFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbiAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFRoaXMgaXMgaW50ZW50aW9uYWw6IEZsb3cgd2lsbCBlcnJvciB3aGVuXG4gICAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIFByb2dyZXNzVmlld0lPUy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgUHJvZ3Jlc3NWaWV3SU9TLiAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdQcm9ncmVzc1ZpZXdJT1MnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdQcm9ncmVzc1ZpZXdJT1MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHJlYWN0LW5hdGl2ZSBjb3JlLiAnICtcbiAgICAgICAgICBcIkl0IGNhbiBub3cgYmUgaW5zdGFsbGVkIGFuZCBpbXBvcnRlZCBmcm9tICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9wcm9ncmVzcy12aWV3JyBpbnN0ZWFkIG9mICdyZWFjdC1uYXRpdmUnLiBcIiArXG4gICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtbmF0aXZlLXByb2dyZXNzLXZpZXcvcHJvZ3Jlc3MtdmlldycsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgRGF0ZVBpY2tlcklPUy4gKi9cbiAgLyogJEZsb3dGaXhNZVtpbnZhbGlkLWV4cG9ydF0gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgRGF0ZVBpY2tlcklPUy4gKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnRGF0ZVBpY2tlcklPUycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0RhdGVQaWNrZXJJT1MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHJlYWN0LW5hdGl2ZSBjb3JlLiAnICtcbiAgICAgICAgICBcIkl0IGNhbiBub3cgYmUgaW5zdGFsbGVkIGFuZCBpbXBvcnRlZCBmcm9tICdAcmVhY3QtbmF0aXZlLWNvbW11bml0eS9kYXRldGltZXBpY2tlcicgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LW5hdGl2ZS1kYXRldGltZXBpY2tlci9kYXRldGltZXBpY2tlcicsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gVGhpcyBpcyBpbnRlbnRpb25hbDogRmxvdyB3aWxsIGVycm9yIHdoZW5cbiAgICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgU2xpZGVyLiAqL1xuICAvKiAkRmxvd0ZpeE1lW2ludmFsaWQtZXhwb3J0XSBUaGlzIGlzIGludGVudGlvbmFsOiBGbG93IHdpbGwgZXJyb3Igd2hlblxuICAgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBTbGlkZXIuICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1NsaWRlcicsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ1NsaWRlciBoYXMgYmVlbiByZW1vdmVkIGZyb20gcmVhY3QtbmF0aXZlIGNvcmUuICcgK1xuICAgICAgICAgIFwiSXQgY2FuIG5vdyBiZSBpbnN0YWxsZWQgYW5kIGltcG9ydGVkIGZyb20gJ0ByZWFjdC1uYXRpdmUtY29tbXVuaXR5L3NsaWRlcicgaW5zdGVhZCBvZiAncmVhY3QtbmF0aXZlJy4gXCIgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhbGxzdGFjay9yZWFjdC1uYXRpdmUtc2xpZGVyJyxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG50eXBlIE1vZHVsZSA9IHsuLi59O1xudHlwZSBSZWdpc3RlckNhbGxhYmxlTW9kdWxlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIG1vZHVsZU9yRmFjdG9yeTogTW9kdWxlIHwgKHZvaWQgPT4gTW9kdWxlKSxcbikgPT4gdm9pZDtcblxuY29uc3QgcmVnaXN0ZXJDYWxsYWJsZU1vZHVsZTogUmVnaXN0ZXJDYWxsYWJsZU1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmIChnbG9iYWwuUk4kQnJpZGdlbGVzcyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiAobmFtZSwgbW9kdWxlT3JGYWN0b3J5KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG1vZHVsZU9yRmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBnbG9iYWwuUk4kcmVnaXN0ZXJDYWxsYWJsZU1vZHVsZShuYW1lLCBtb2R1bGVPckZhY3RvcnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGdsb2JhbC5STiRyZWdpc3RlckNhbGxhYmxlTW9kdWxlKG5hbWUsICgpID0+IG1vZHVsZU9yRmFjdG9yeSk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IEJhdGNoZWRCcmlkZ2UgPSByZXF1aXJlKCcuLi9CYXRjaGVkQnJpZGdlL0JhdGNoZWRCcmlkZ2UnKTtcbiAgcmV0dXJuIChuYW1lLCBtb2R1bGVPckZhY3RvcnkpID0+IHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZU9yRmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgQmF0Y2hlZEJyaWRnZS5yZWdpc3RlckxhenlDYWxsYWJsZU1vZHVsZShuYW1lLCBtb2R1bGVPckZhY3RvcnkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEJhdGNoZWRCcmlkZ2UucmVnaXN0ZXJDYWxsYWJsZU1vZHVsZShuYW1lLCBtb2R1bGVPckZhY3RvcnkpO1xuICB9O1xufSkoKTtcblxuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXJDYWxsYWJsZU1vZHVsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IE1lc3NhZ2VRdWV1ZSA9IHJlcXVpcmUoJy4vTWVzc2FnZVF1ZXVlJyk7XG5cbmNvbnN0IEJhdGNoZWRCcmlkZ2U6IE1lc3NhZ2VRdWV1ZSA9IG5ldyBNZXNzYWdlUXVldWUoKTtcblxuLy8gV2lyZSB1cCB0aGUgYmF0Y2hlZCBicmlkZ2Ugb24gdGhlIGdsb2JhbCBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gY2FsbCBpbnRvIGl0LlxuLy8gSWRlYWxseSwgdGhpcyB3b3VsZCBiZSB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXAuIEkuZS4gdGhlIG5hdGl2ZSBlbnZpcm9ubWVudFxuLy8gcHJvdmlkZXMgdGhpcyBnbG9iYWwgZGlyZWN0bHkgd2l0aCBpdHMgc2NyaXB0IGVtYmVkZGVkLiBUaGVuIHRoaXMgbW9kdWxlXG4vLyB3b3VsZCBleHBvcnQgaXQuIEEgcG9zc2libGUgZml4IHdvdWxkIGJlIHRvIHRyaW0gdGhlIGRlcGVuZGVuY2llcyBpblxuLy8gTWVzc2FnZVF1ZXVlIHRvIGl0cyBtaW5pbWFsIGZlYXR1cmVzIGFuZCBlbWJlZCB0aGF0IGluIHRoZSBuYXRpdmUgcnVudGltZS5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fZmJCYXRjaGVkQnJpZGdlJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIHZhbHVlOiBCYXRjaGVkQnJpZGdlLFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQmF0Y2hlZEJyaWRnZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFN5c3RyYWNlID0gcmVxdWlyZSgnLi4vUGVyZm9ybWFuY2UvU3lzdHJhY2UnKTtcbmNvbnN0IGRlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldiA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9kZWVwRnJlZXplQW5kVGhyb3dPbk11dGF0aW9uSW5EZXYnKTtcbmNvbnN0IHN0cmluZ2lmeVNhZmUgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvc3RyaW5naWZ5U2FmZScpLmRlZmF1bHQ7XG5jb25zdCB3YXJuT25jZSA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy93YXJuT25jZScpO1xuY29uc3QgRXJyb3JVdGlscyA9IHJlcXVpcmUoJy4uL3ZlbmRvci9jb3JlL0Vycm9yVXRpbHMnKTtcbmNvbnN0IGludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG5leHBvcnQgdHlwZSBTcHlEYXRhID0ge1xuICB0eXBlOiBudW1iZXIsXG4gIG1vZHVsZTogP3N0cmluZyxcbiAgbWV0aG9kOiBzdHJpbmcgfCBudW1iZXIsXG4gIGFyZ3M6IG1peGVkW10sXG4gIC4uLlxufTtcblxuY29uc3QgVE9fSlMgPSAwO1xuY29uc3QgVE9fTkFUSVZFID0gMTtcblxuY29uc3QgTU9EVUxFX0lEUyA9IDA7XG5jb25zdCBNRVRIT0RfSURTID0gMTtcbmNvbnN0IFBBUkFNUyA9IDI7XG5jb25zdCBNSU5fVElNRV9CRVRXRUVOX0ZMVVNIRVNfTVMgPSA1O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuY29uc3QgVFJBQ0VfVEFHX1JFQUNUX0FQUFMgPSAxIDw8IDE3O1xuXG5jb25zdCBERUJVR19JTkZPX0xJTUlUID0gMzI7XG5cbmNsYXNzIE1lc3NhZ2VRdWV1ZSB7XG4gIF9sYXp5Q2FsbGFibGVNb2R1bGVzOiB7W2tleTogc3RyaW5nXTogKHZvaWQpID0+IHsuLi59LCAuLi59O1xuICBfcXVldWU6IFtudW1iZXJbXSwgbnVtYmVyW10sIG1peGVkW10sIG51bWJlcl07XG4gIF9zdWNjZXNzQ2FsbGJhY2tzOiBNYXA8bnVtYmVyLCA/KC4uLm1peGVkW10pID0+IHZvaWQ+O1xuICBfZmFpbHVyZUNhbGxiYWNrczogTWFwPG51bWJlciwgPyguLi5taXhlZFtdKSA9PiB2b2lkPjtcbiAgX2NhbGxJRDogbnVtYmVyO1xuICBfbGFzdEZsdXNoOiBudW1iZXI7XG4gIF9ldmVudExvb3BTdGFydFRpbWU6IG51bWJlcjtcbiAgX3JlYWN0TmF0aXZlTWljcm90YXNrc0NhbGxiYWNrOiA/KCkgPT4gdm9pZDtcblxuICBfZGVidWdJbmZvOiB7W251bWJlcl06IFtudW1iZXIsIG51bWJlcl0sIC4uLn07XG4gIF9yZW1vdGVNb2R1bGVUYWJsZToge1tudW1iZXJdOiBzdHJpbmcsIC4uLn07XG4gIF9yZW1vdGVNZXRob2RUYWJsZToge1tudW1iZXJdOiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LCAuLi59O1xuXG4gIF9fc3B5OiA/KGRhdGE6IFNweURhdGEpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbGF6eUNhbGxhYmxlTW9kdWxlcyA9IHt9O1xuICAgIHRoaXMuX3F1ZXVlID0gW1tdLCBbXSwgW10sIDBdO1xuICAgIHRoaXMuX3N1Y2Nlc3NDYWxsYmFja3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fZmFpbHVyZUNhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9jYWxsSUQgPSAwO1xuICAgIHRoaXMuX2xhc3RGbHVzaCA9IDA7XG4gICAgdGhpcy5fZXZlbnRMb29wU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFjdE5hdGl2ZU1pY3JvdGFza3NDYWxsYmFjayA9IG51bGw7XG5cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgdGhpcy5fZGVidWdJbmZvID0ge307XG4gICAgICB0aGlzLl9yZW1vdGVNb2R1bGVUYWJsZSA9IHt9O1xuICAgICAgdGhpcy5fcmVtb3RlTWV0aG9kVGFibGUgPSB7fTtcbiAgICB9XG5cbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cbiAgICB0aGlzLmNhbGxGdW5jdGlvblJldHVybkZsdXNoZWRRdWV1ZSA9XG4gICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3IgdGhpcyBwYXJhbWV0ZXJzXG4gICAgICB0aGlzLmNhbGxGdW5jdGlvblJldHVybkZsdXNoZWRRdWV1ZS5iaW5kKHRoaXMpO1xuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICB0aGlzLmZsdXNoZWRRdWV1ZSA9IHRoaXMuZmx1c2hlZFF1ZXVlLmJpbmQodGhpcyk7XG5cbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cbiAgICB0aGlzLmludm9rZUNhbGxiYWNrQW5kUmV0dXJuRmx1c2hlZFF1ZXVlID1cbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tBbmRSZXR1cm5GbHVzaGVkUXVldWUuYmluZCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWMgQVBJc1xuICAgKi9cblxuICBzdGF0aWMgc3B5KHNweU9yVG9nZ2xlOiBib29sZWFuIHwgKChkYXRhOiBTcHlEYXRhKSA9PiB2b2lkKSkge1xuICAgIGlmIChzcHlPclRvZ2dsZSA9PT0gdHJ1ZSkge1xuICAgICAgTWVzc2FnZVF1ZXVlLnByb3RvdHlwZS5fX3NweSA9IGluZm8gPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtpbmZvLnR5cGUgPT09IFRPX0pTID8gJ04tPkpTJyA6ICdKUy0+Tid9IDogYCArXG4gICAgICAgICAgICBgJHtpbmZvLm1vZHVsZSAhPSBudWxsID8gaW5mby5tb2R1bGUgKyAnLicgOiAnJ30ke2luZm8ubWV0aG9kfWAgK1xuICAgICAgICAgICAgYCgke0pTT04uc3RyaW5naWZ5KGluZm8uYXJncyl9KWAsXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoc3B5T3JUb2dnbGUgPT09IGZhbHNlKSB7XG4gICAgICBNZXNzYWdlUXVldWUucHJvdG90eXBlLl9fc3B5ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgTWVzc2FnZVF1ZXVlLnByb3RvdHlwZS5fX3NweSA9IHNweU9yVG9nZ2xlO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxGdW5jdGlvblJldHVybkZsdXNoZWRRdWV1ZShcbiAgICBtb2R1bGU6IHN0cmluZyxcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBhcmdzOiBtaXhlZFtdLFxuICApOiBudWxsIHwgW0FycmF5PG51bWJlcj4sIEFycmF5PG51bWJlcj4sIEFycmF5PG1peGVkPiwgbnVtYmVyXSB7XG4gICAgdGhpcy5fX2d1YXJkKCgpID0+IHtcbiAgICAgIHRoaXMuX19jYWxsRnVuY3Rpb24obW9kdWxlLCBtZXRob2QsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZmx1c2hlZFF1ZXVlKCk7XG4gIH1cblxuICBpbnZva2VDYWxsYmFja0FuZFJldHVybkZsdXNoZWRRdWV1ZShcbiAgICBjYklEOiBudW1iZXIsXG4gICAgYXJnczogbWl4ZWRbXSxcbiAgKTogbnVsbCB8IFtBcnJheTxudW1iZXI+LCBBcnJheTxudW1iZXI+LCBBcnJheTxtaXhlZD4sIG51bWJlcl0ge1xuICAgIHRoaXMuX19ndWFyZCgoKSA9PiB7XG4gICAgICB0aGlzLl9faW52b2tlQ2FsbGJhY2soY2JJRCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5mbHVzaGVkUXVldWUoKTtcbiAgfVxuXG4gIGZsdXNoZWRRdWV1ZSgpOiBudWxsIHwgW0FycmF5PG51bWJlcj4sIEFycmF5PG51bWJlcj4sIEFycmF5PG1peGVkPiwgbnVtYmVyXSB7XG4gICAgdGhpcy5fX2d1YXJkKCgpID0+IHtcbiAgICAgIHRoaXMuX19jYWxsUmVhY3ROYXRpdmVNaWNyb3Rhc2tzKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX3F1ZXVlO1xuICAgIHRoaXMuX3F1ZXVlID0gW1tdLCBbXSwgW10sIHRoaXMuX2NhbGxJRF07XG4gICAgcmV0dXJuIHF1ZXVlWzBdLmxlbmd0aCA/IHF1ZXVlIDogbnVsbDtcbiAgfVxuXG4gIGdldEV2ZW50TG9vcFJ1bm5pbmdUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl9ldmVudExvb3BTdGFydFRpbWU7XG4gIH1cblxuICByZWdpc3RlckNhbGxhYmxlTW9kdWxlKG5hbWU6IHN0cmluZywgbW9kdWxlOiB7Li4ufSkge1xuICAgIHRoaXMuX2xhenlDYWxsYWJsZU1vZHVsZXNbbmFtZV0gPSAoKSA9PiBtb2R1bGU7XG4gIH1cblxuICByZWdpc3RlckxhenlDYWxsYWJsZU1vZHVsZShuYW1lOiBzdHJpbmcsIGZhY3Rvcnk6IHZvaWQgPT4gaW50ZXJmYWNlIHt9KSB7XG4gICAgbGV0IG1vZHVsZTogaW50ZXJmYWNlIHt9O1xuICAgIGxldCBnZXRWYWx1ZTogPyh2b2lkKSA9PiBpbnRlcmZhY2Uge30gPSBmYWN0b3J5O1xuICAgIHRoaXMuX2xhenlDYWxsYWJsZU1vZHVsZXNbbmFtZV0gPSAoKSA9PiB7XG4gICAgICBpZiAoZ2V0VmFsdWUpIHtcbiAgICAgICAgbW9kdWxlID0gZ2V0VmFsdWUoKTtcbiAgICAgICAgZ2V0VmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgICAgLyogJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yXG4gICAgICAgKiB0aGlzIHBhcmFtZXRlcnMgKi9cbiAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfTtcbiAgfVxuXG4gIGdldENhbGxhYmxlTW9kdWxlKG5hbWU6IHN0cmluZyk6IHsuLi59IHwgbnVsbCB7XG4gICAgY29uc3QgZ2V0VmFsdWUgPSB0aGlzLl9sYXp5Q2FsbGFibGVNb2R1bGVzW25hbWVdO1xuICAgIHJldHVybiBnZXRWYWx1ZSA/IGdldFZhbHVlKCkgOiBudWxsO1xuICB9XG5cbiAgY2FsbE5hdGl2ZVN5bmNIb29rKFxuICAgIG1vZHVsZUlEOiBudW1iZXIsXG4gICAgbWV0aG9kSUQ6IG51bWJlcixcbiAgICBwYXJhbXM6IG1peGVkW10sXG4gICAgb25GYWlsOiA/KC4uLm1peGVkW10pID0+IHZvaWQsXG4gICAgb25TdWNjOiA/KC4uLm1peGVkW10pID0+IHZvaWQsXG4gICk6IG1peGVkIHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBnbG9iYWwubmF0aXZlQ2FsbFN5bmNIb29rLFxuICAgICAgICAnQ2FsbGluZyBzeW5jaHJvbm91cyBtZXRob2RzIG9uIG5hdGl2ZSAnICtcbiAgICAgICAgICAnbW9kdWxlcyBpcyBub3Qgc3VwcG9ydGVkIGluIENocm9tZS5cXG5cXG4gQ29uc2lkZXIgcHJvdmlkaW5nIGFsdGVybmF0aXZlICcgK1xuICAgICAgICAgICdtZXRob2RzIHRvIGV4cG9zZSB0aGlzIG1ldGhvZCBpbiBkZWJ1ZyBtb2RlLCBlLmcuIGJ5IGV4cG9zaW5nIGNvbnN0YW50cyAnICtcbiAgICAgICAgICAnYWhlYWQtb2YtdGltZS4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzQ2FsbGJhY2tzKG1vZHVsZUlELCBtZXRob2RJRCwgcGFyYW1zLCBvbkZhaWwsIG9uU3VjYyk7XG4gICAgcmV0dXJuIGdsb2JhbC5uYXRpdmVDYWxsU3luY0hvb2sobW9kdWxlSUQsIG1ldGhvZElELCBwYXJhbXMpO1xuICB9XG5cbiAgcHJvY2Vzc0NhbGxiYWNrcyhcbiAgICBtb2R1bGVJRDogbnVtYmVyLFxuICAgIG1ldGhvZElEOiBudW1iZXIsXG4gICAgcGFyYW1zOiBtaXhlZFtdLFxuICAgIG9uRmFpbDogPyguLi5taXhlZFtdKSA9PiB2b2lkLFxuICAgIG9uU3VjYzogPyguLi5taXhlZFtdKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBpZiAob25GYWlsIHx8IG9uU3VjYykge1xuICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgdGhpcy5fZGVidWdJbmZvW3RoaXMuX2NhbGxJRF0gPSBbbW9kdWxlSUQsIG1ldGhvZElEXTtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxJRCA+IERFQlVHX0lORk9fTElNSVQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5fZGVidWdJbmZvW3RoaXMuX2NhbGxJRCAtIERFQlVHX0lORk9fTElNSVRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zdWNjZXNzQ2FsbGJhY2tzLnNpemUgPiA1MDApIHtcbiAgICAgICAgICBjb25zdCBpbmZvOiB7W251bWJlcl06IHttZXRob2Q6IHN0cmluZywgbW9kdWxlOiBzdHJpbmd9fSA9IHt9O1xuICAgICAgICAgIHRoaXMuX3N1Y2Nlc3NDYWxsYmFja3MuZm9yRWFjaCgoXywgY2FsbElEKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWJ1ZyA9IHRoaXMuX2RlYnVnSW5mb1tjYWxsSURdO1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gZGVidWcgJiYgdGhpcy5fcmVtb3RlTW9kdWxlVGFibGVbZGVidWdbMF1dO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gZGVidWcgJiYgdGhpcy5fcmVtb3RlTWV0aG9kVGFibGVbZGVidWdbMF1dW2RlYnVnWzFdXTtcbiAgICAgICAgICAgIGluZm9bY2FsbElEXSA9IHttb2R1bGUsIG1ldGhvZH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAnZXhjZXNzaXZlLW51bWJlci1vZi1wZW5kaW5nLWNhbGxiYWNrcycsXG4gICAgICAgICAgICBgRXhjZXNzaXZlIG51bWJlciBvZiBwZW5kaW5nIGNhbGxiYWNrczogJHtcbiAgICAgICAgICAgICAgdGhpcy5fc3VjY2Vzc0NhbGxiYWNrcy5zaXplXG4gICAgICAgICAgICB9LiBTb21lIHBlbmRpbmcgY2FsbGJhY2tzIHRoYXQgbWlnaHQgaGF2ZSBsZWFrZWQgYnkgbmV2ZXIgYmVpbmcgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGU6ICR7c3RyaW5naWZ5U2FmZShcbiAgICAgICAgICAgICAgaW5mbyxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBFbmNvZGUgY2FsbElEcyBpbnRvIHBhaXJzIG9mIGNhbGxiYWNrIGlkZW50aWZpZXJzIGJ5IHNoaWZ0aW5nIGxlZnQgYW5kIHVzaW5nIHRoZSByaWdodG1vc3QgYml0XG4gICAgICAvLyB0byBpbmRpY2F0ZSBmYWlsICgwKSBvciBzdWNjZXNzICgxKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIG9uRmFpbCAmJiBwYXJhbXMucHVzaCh0aGlzLl9jYWxsSUQgPDwgMSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgb25TdWNjICYmIHBhcmFtcy5wdXNoKCh0aGlzLl9jYWxsSUQgPDwgMSkgfCAxKTtcbiAgICAgIHRoaXMuX3N1Y2Nlc3NDYWxsYmFja3Muc2V0KHRoaXMuX2NhbGxJRCwgb25TdWNjKTtcbiAgICAgIHRoaXMuX2ZhaWx1cmVDYWxsYmFja3Muc2V0KHRoaXMuX2NhbGxJRCwgb25GYWlsKTtcbiAgICB9XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGdsb2JhbC5uYXRpdmVUcmFjZUJlZ2luQXN5bmNGbG93ICYmXG4gICAgICAgIGdsb2JhbC5uYXRpdmVUcmFjZUJlZ2luQXN5bmNGbG93KFxuICAgICAgICAgIFRSQUNFX1RBR19SRUFDVF9BUFBTLFxuICAgICAgICAgICduYXRpdmUnLFxuICAgICAgICAgIHRoaXMuX2NhbGxJRCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fY2FsbElEKys7XG4gIH1cblxuICBlbnF1ZXVlTmF0aXZlQ2FsbChcbiAgICBtb2R1bGVJRDogbnVtYmVyLFxuICAgIG1ldGhvZElEOiBudW1iZXIsXG4gICAgcGFyYW1zOiBtaXhlZFtdLFxuICAgIG9uRmFpbDogPyguLi5taXhlZFtdKSA9PiB2b2lkLFxuICAgIG9uU3VjYzogPyguLi5taXhlZFtdKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NDYWxsYmFja3MobW9kdWxlSUQsIG1ldGhvZElELCBwYXJhbXMsIG9uRmFpbCwgb25TdWNjKTtcblxuICAgIHRoaXMuX3F1ZXVlW01PRFVMRV9JRFNdLnB1c2gobW9kdWxlSUQpO1xuICAgIHRoaXMuX3F1ZXVlW01FVEhPRF9JRFNdLnB1c2gobWV0aG9kSUQpO1xuXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgcGFyYW1ldGVycyBwYXNzZWQgb3ZlciB0aGUgYnJpZGdlIGFyZVxuICAgICAgLy8gZm9sbHktY29udmVydGlibGUuICBBcyBhIHNwZWNpYWwgY2FzZSwgaWYgYSBwcm9wIHZhbHVlIGlzIGFcbiAgICAgIC8vIGZ1bmN0aW9uIGl0IGlzIHBlcm1pdHRlZCBoZXJlLCBhbmQgc3BlY2lhbC1jYXNlZCBpbiB0aGVcbiAgICAgIC8vIGNvbnZlcnNpb24uXG4gICAgICBjb25zdCBpc1ZhbGlkQXJndW1lbnQgPSAodmFsOiBtaXhlZCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcbiAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbCk7XG4gICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsLmV2ZXJ5KGlzVmFsaWRBcmd1bWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgayBpbiB2YWwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxba10gIT09ICdmdW5jdGlvbicgJiYgIWlzVmFsaWRBcmd1bWVudCh2YWxba10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXBsYWNlbWVudCBhbGxvd3Mgbm9ybWFsbHkgbm9uLUpTT04tY29udmVydGlibGUgdmFsdWVzIHRvIGJlXG4gICAgICAvLyBzZWVuLiAgVGhlcmUgaXMgYW1iaWd1aXR5IHdpdGggc3RyaW5nIHZhbHVlcywgYnV0IGluIGNvbnRleHQsXG4gICAgICAvLyBpdCBzaG91bGQgYXQgbGVhc3QgYmUgYSBzdHJvbmcgaGludC5cbiAgICAgIGNvbnN0IHJlcGxhY2VyID0gKGtleTogc3RyaW5nLCB2YWw6ICRGbG93Rml4TWUpID0+IHtcbiAgICAgICAgY29uc3QgdCA9IHR5cGVvZiB2YWw7XG4gICAgICAgIGlmICh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuICc8PEZ1bmN0aW9uICcgKyB2YWwubmFtZSArICc+Pic7XG4gICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gJzw8JyArIHZhbC50b1N0cmluZygpICsgJz4+JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBOb3RlIHRoYXQgSlNPTi5zdHJpbmdpZnlcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgaXNWYWxpZEFyZ3VtZW50KHBhcmFtcyksXG4gICAgICAgICclcyBpcyBub3QgdXNhYmxlIGFzIGEgbmF0aXZlIG1ldGhvZCBhcmd1bWVudCcsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHBhcmFtcywgcmVwbGFjZXIpLFxuICAgICAgKTtcblxuICAgICAgLy8gVGhlIHBhcmFtcyBvYmplY3Qgc2hvdWxkIG5vdCBiZSBtdXRhdGVkIGFmdGVyIGJlaW5nIHF1ZXVlZFxuICAgICAgZGVlcEZyZWV6ZUFuZFRocm93T25NdXRhdGlvbkluRGV2KHBhcmFtcyk7XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlW1BBUkFNU10ucHVzaChwYXJhbXMpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoXG4gICAgICBnbG9iYWwubmF0aXZlRmx1c2hRdWV1ZUltbWVkaWF0ZSAmJlxuICAgICAgbm93IC0gdGhpcy5fbGFzdEZsdXNoID49IE1JTl9USU1FX0JFVFdFRU5fRkxVU0hFU19NU1xuICAgICkge1xuICAgICAgY29uc3QgcXVldWUgPSB0aGlzLl9xdWV1ZTtcbiAgICAgIHRoaXMuX3F1ZXVlID0gW1tdLCBbXSwgW10sIHRoaXMuX2NhbGxJRF07XG4gICAgICB0aGlzLl9sYXN0Rmx1c2ggPSBub3c7XG4gICAgICBnbG9iYWwubmF0aXZlRmx1c2hRdWV1ZUltbWVkaWF0ZShxdWV1ZSk7XG4gICAgfVxuICAgIFN5c3RyYWNlLmNvdW50ZXJFdmVudCgncGVuZGluZ19qc190b19uYXRpdmVfcXVldWUnLCB0aGlzLl9xdWV1ZVswXS5sZW5ndGgpO1xuICAgIGlmIChfX0RFVl9fICYmIHRoaXMuX19zcHkgJiYgaXNGaW5pdGUobW9kdWxlSUQpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW25vdC1hLWZ1bmN0aW9uXVxuICAgICAgdGhpcy5fX3NweSh7XG4gICAgICAgIHR5cGU6IFRPX05BVElWRSxcbiAgICAgICAgbW9kdWxlOiB0aGlzLl9yZW1vdGVNb2R1bGVUYWJsZVttb2R1bGVJRF0sXG4gICAgICAgIG1ldGhvZDogdGhpcy5fcmVtb3RlTWV0aG9kVGFibGVbbW9kdWxlSURdW21ldGhvZElEXSxcbiAgICAgICAgYXJnczogcGFyYW1zLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9fc3B5KSB7XG4gICAgICB0aGlzLl9fc3B5KHtcbiAgICAgICAgdHlwZTogVE9fTkFUSVZFLFxuICAgICAgICBtb2R1bGU6IG1vZHVsZUlEICsgJycsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kSUQsXG4gICAgICAgIGFyZ3M6IHBhcmFtcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZURlYnVnTG9va3VwKFxuICAgIG1vZHVsZUlEOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG1ldGhvZHM6ID8kUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICApIHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgdGhpcy5fcmVtb3RlTW9kdWxlVGFibGVbbW9kdWxlSURdID0gbmFtZTtcbiAgICAgIHRoaXMuX3JlbW90ZU1ldGhvZFRhYmxlW21vZHVsZUlEXSA9IG1ldGhvZHMgfHwgW107XG4gICAgfVxuICB9XG5cbiAgLy8gRm9yIEpTVGltZXJzIHRvIHJlZ2lzdGVyIGl0cyBjYWxsYmFjay4gT3RoZXJ3aXNlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAvLyBiZXR3ZWVuIG1vZHVsZXMgaXMgaW50cm9kdWNlZC4gTm90ZSB0aGF0IG9ubHkgb25lIGNhbGxiYWNrIG1heSBiZVxuICAvLyByZWdpc3RlcmVkIGF0IGEgdGltZS5cbiAgc2V0UmVhY3ROYXRpdmVNaWNyb3Rhc2tzQ2FsbGJhY2soZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9yZWFjdE5hdGl2ZU1pY3JvdGFza3NDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kc1xuICAgKi9cblxuICBfX2d1YXJkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuX19zaG91bGRQYXVzZU9uVGhyb3coKSkge1xuICAgICAgZm4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIEVycm9yVXRpbHMucmVwb3J0RmF0YWxFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWVzc2FnZVF1ZXVlIGluc3RhbGxzIGEgZ2xvYmFsIGhhbmRsZXIgdG8gY2F0Y2ggYWxsIGV4Y2VwdGlvbnMgd2hlcmUgSlMgdXNlcnMgY2FuIHJlZ2lzdGVyIHRoZWlyIG93biBiZWhhdmlvclxuICAvLyBUaGlzIGhhbmRsZXIgbWFrZXMgYWxsIGV4Y2VwdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCBmcm9tIGluc2lkZSBNZXNzYWdlUXVldWUgcmF0aGVyIHRoYW4gYnkgdGhlIFZNIGF0IHRoZWlyIG9yaWdpblxuICAvLyBUaGlzIG1ha2VzIHN0YWNrdHJhY2VzIHRvIGJlIHBsYWNlZCBhdCBNZXNzYWdlUXVldWUgcmF0aGVyIHRoYW4gYXQgd2hlcmUgdGhleSB3ZXJlIGxhdW5jaGVkXG4gIC8vIFRoZSBwYXJhbWV0ZXIgRGVidWdnZXJJbnRlcm5hbC5zaG91bGRQYXVzZU9uVGhyb3cgaXMgdXNlZCB0byBjaGVjayBiZWZvcmUgY2F0Y2hpbmcgYWxsIGV4Y2VwdGlvbnMgYW5kXG4gIC8vIGNhbiBiZSBjb25maWd1cmVkIGJ5IHRoZSBWTSBvciBhbnkgSW5zcGVjdG9yXG4gIF9fc2hvdWxkUGF1c2VPblRocm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdXG4gICAgICB0eXBlb2YgRGVidWdnZXJJbnRlcm5hbCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV1cbiAgICAgIERlYnVnZ2VySW50ZXJuYWwuc2hvdWxkUGF1c2VPblRocm93ID09PSB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIF9fY2FsbFJlYWN0TmF0aXZlTWljcm90YXNrcygpIHtcbiAgICBTeXN0cmFjZS5iZWdpbkV2ZW50KCdKU1RpbWVycy5jYWxsUmVhY3ROYXRpdmVNaWNyb3Rhc2tzKCknKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX3JlYWN0TmF0aXZlTWljcm90YXNrc0NhbGxiYWNrICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcmVhY3ROYXRpdmVNaWNyb3Rhc2tzQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgU3lzdHJhY2UuZW5kRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBfX2NhbGxGdW5jdGlvbihtb2R1bGU6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGFyZ3M6IG1peGVkW10pOiB2b2lkIHtcbiAgICB0aGlzLl9sYXN0Rmx1c2ggPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX2V2ZW50TG9vcFN0YXJ0VGltZSA9IHRoaXMuX2xhc3RGbHVzaDtcbiAgICBpZiAoX19ERVZfXyB8fCB0aGlzLl9fc3B5KSB7XG4gICAgICBTeXN0cmFjZS5iZWdpbkV2ZW50KGAke21vZHVsZX0uJHttZXRob2R9KCR7c3RyaW5naWZ5U2FmZShhcmdzKX0pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFN5c3RyYWNlLmJlZ2luRXZlbnQoYCR7bW9kdWxlfS4ke21ldGhvZH0oLi4uKWApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX19zcHkpIHtcbiAgICAgICAgdGhpcy5fX3NweSh7dHlwZTogVE9fSlMsIG1vZHVsZSwgbWV0aG9kLCBhcmdzfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtb2R1bGVNZXRob2RzID0gdGhpcy5nZXRDYWxsYWJsZU1vZHVsZShtb2R1bGUpO1xuICAgICAgaWYgKCFtb2R1bGVNZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNhbGxhYmxlTW9kdWxlTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9sYXp5Q2FsbGFibGVNb2R1bGVzKTtcbiAgICAgICAgY29uc3QgbiA9IGNhbGxhYmxlTW9kdWxlTmFtZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBjYWxsYWJsZU1vZHVsZU5hbWVMaXN0ID0gY2FsbGFibGVNb2R1bGVOYW1lcy5qb2luKCcsICcpO1xuXG4gICAgICAgIC8vIFRPRE8oVDEyMjIyNTkzOSk6IFJlbW92ZSBhZnRlciBpbnZlc3RpZ2F0aW9uOiBXaHkgYXJlIHdlIGdldHRpbmcgdG8gdGhpcyBsaW5lIGluIGJyaWRnZWxlc3MgbW9kZT9cbiAgICAgICAgY29uc3QgaXNCcmlkZ2VsZXNzTW9kZSA9XG4gICAgICAgICAgZ2xvYmFsLlJOJEJyaWRnZWxlc3MgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgYEZhaWxlZCB0byBjYWxsIGludG8gSmF2YVNjcmlwdCBtb2R1bGUgbWV0aG9kICR7bW9kdWxlfS4ke21ldGhvZH0oKS4gTW9kdWxlIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIGFzIGNhbGxhYmxlLiBCcmlkZ2VsZXNzIE1vZGU6ICR7aXNCcmlkZ2VsZXNzTW9kZX0uIFJlZ2lzdGVyZWQgY2FsbGFibGUgSmF2YVNjcmlwdCBtb2R1bGVzIChuID0gJHtufSk6ICR7Y2FsbGFibGVNb2R1bGVOYW1lTGlzdH0uXG4gICAgICAgICAgQSBmcmVxdWVudCBjYXVzZSBvZiB0aGUgZXJyb3IgaXMgdGhhdCB0aGUgYXBwbGljYXRpb24gZW50cnkgZmlsZSBwYXRoIGlzIGluY29ycmVjdC4gVGhpcyBjYW4gYWxzbyBoYXBwZW4gd2hlbiB0aGUgSlMgYnVuZGxlIGlzIGNvcnJ1cHQgb3IgdGhlcmUgaXMgYW4gZWFybHkgaW5pdGlhbGl6YXRpb24gZXJyb3Igd2hlbiBsb2FkaW5nIFJlYWN0IE5hdGl2ZS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFtb2R1bGVNZXRob2RzW21ldGhvZF0pIHtcbiAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGBGYWlsZWQgdG8gY2FsbCBpbnRvIEphdmFTY3JpcHQgbW9kdWxlIG1ldGhvZCAke21vZHVsZX0uJHttZXRob2R9KCkuIE1vZHVsZSBleGlzdHMsIGJ1dCB0aGUgbWV0aG9kIGlzIHVuZGVmaW5lZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbW9kdWxlTWV0aG9kc1ttZXRob2RdLmFwcGx5KG1vZHVsZU1ldGhvZHMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBTeXN0cmFjZS5lbmRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIF9faW52b2tlQ2FsbGJhY2soY2JJRDogbnVtYmVyLCBhcmdzOiBtaXhlZFtdKTogdm9pZCB7XG4gICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9ldmVudExvb3BTdGFydFRpbWUgPSB0aGlzLl9sYXN0Rmx1c2g7XG5cbiAgICAvLyBUaGUgcmlnaHRtb3N0IGJpdCBvZiBjYklEIGluZGljYXRlcyBmYWlsICgwKSBvciBzdWNjZXNzICgxKSwgdGhlIG90aGVyIGJpdHMgYXJlIHRoZSBjYWxsSUQgc2hpZnRlZCBsZWZ0LlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgY29uc3QgY2FsbElEID0gY2JJRCA+Pj4gMTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGNvbnN0IGlzU3VjY2VzcyA9IGNiSUQgJiAxO1xuICAgIGNvbnN0IGNhbGxiYWNrID0gaXNTdWNjZXNzXG4gICAgICA/IHRoaXMuX3N1Y2Nlc3NDYWxsYmFja3MuZ2V0KGNhbGxJRClcbiAgICAgIDogdGhpcy5fZmFpbHVyZUNhbGxiYWNrcy5nZXQoY2FsbElEKTtcblxuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBjb25zdCBkZWJ1ZyA9IHRoaXMuX2RlYnVnSW5mb1tjYWxsSURdO1xuICAgICAgY29uc3QgbW9kdWxlID0gZGVidWcgJiYgdGhpcy5fcmVtb3RlTW9kdWxlVGFibGVbZGVidWdbMF1dO1xuICAgICAgY29uc3QgbWV0aG9kID0gZGVidWcgJiYgdGhpcy5fcmVtb3RlTWV0aG9kVGFibGVbZGVidWdbMF1dW2RlYnVnWzFdXTtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGBObyBjYWxsYmFjayBmb3VuZCB3aXRoIGNiSUQgJHtjYklEfSBhbmQgY2FsbElEICR7Y2FsbElEfSBmb3IgYCArXG4gICAgICAgICAgKG1ldGhvZFxuICAgICAgICAgICAgPyBgICR7bW9kdWxlfS4ke21ldGhvZH0gLSBtb3N0IGxpa2VseSB0aGUgY2FsbGJhY2sgd2FzIGFscmVhZHkgaW52b2tlZGBcbiAgICAgICAgICAgIDogYG1vZHVsZSAke21vZHVsZSB8fCAnPHVua25vd24+J31gKSArXG4gICAgICAgICAgYC4gQXJnczogJyR7c3RyaW5naWZ5U2FmZShhcmdzKX0nYCxcbiAgICAgICk7XG4gICAgICBjb25zdCBwcm9maWxlTmFtZSA9IGRlYnVnXG4gICAgICAgID8gJzxjYWxsYmFjayBmb3IgJyArIG1vZHVsZSArICcuJyArIG1ldGhvZCArICc+J1xuICAgICAgICA6IGNiSUQ7XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgdGhpcy5fX3NweSkge1xuICAgICAgICB0aGlzLl9fc3B5KHt0eXBlOiBUT19KUywgbW9kdWxlOiBudWxsLCBtZXRob2Q6IHByb2ZpbGVOYW1lLCBhcmdzfSk7XG4gICAgICB9XG4gICAgICBTeXN0cmFjZS5iZWdpbkV2ZW50KFxuICAgICAgICBgTWVzc2FnZVF1ZXVlLmludm9rZUNhbGxiYWNrKCR7cHJvZmlsZU5hbWV9LCAke3N0cmluZ2lmeVNhZmUoYXJncyl9KWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3VjY2Vzc0NhbGxiYWNrcy5kZWxldGUoY2FsbElEKTtcbiAgICAgIHRoaXMuX2ZhaWx1cmVDYWxsYmFja3MuZGVsZXRlKGNhbGxJRCk7XG4gICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgU3lzdHJhY2UuZW5kRXZlbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNZXNzYWdlUXVldWU7XG4iLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qgd2FybmVkS2V5czoge1tzdHJpbmddOiBib29sZWFuLCAuLi59ID0ge307XG5cbi8qKlxuICogQSBzaW1wbGUgZnVuY3Rpb24gdGhhdCBwcmludHMgYSB3YXJuaW5nIG1lc3NhZ2Ugb25jZSBwZXIgc2Vzc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB1c2VkIHRvIGVuc3VyZSB0aGUgbWVzc2FnZSBpcyBwcmludGVkIG9uY2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzaG91bGQgYmUgdW5pcXVlIHRvIHRoZSBjYWxsc2l0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gcHJpbnRcbiAqL1xuZnVuY3Rpb24gd2Fybk9uY2Uoa2V5OiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICBpZiAod2FybmVkS2V5c1trZXldKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuXG4gIHdhcm5lZEtleXNba2V5XSA9IHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2Fybk9uY2U7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG4vKipcbiAqIFRyaWVzIHRvIHN0cmluZ2lmeSB3aXRoIEpTT04uc3RyaW5naWZ5IGFuZCB0b1N0cmluZywgYnV0IGNhdGNoZXMgZXhjZXB0aW9uc1xuICogKGUuZy4gZnJvbSBjaXJjdWxhciBvYmplY3RzKSBhbmQgYWx3YXlzIHJldHVybnMgYSBzdHJpbmcgYW5kIG5ldmVyIHRocm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0cmluZ2lmeVNhZmVXaXRoTGltaXRzKGxpbWl0czoge3xcbiAgbWF4RGVwdGg/OiBudW1iZXIsXG4gIG1heFN0cmluZ0xpbWl0PzogbnVtYmVyLFxuICBtYXhBcnJheUxpbWl0PzogbnVtYmVyLFxuICBtYXhPYmplY3RLZXlzTGltaXQ/OiBudW1iZXIsXG58fSk6IG1peGVkID0+IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBtYXhEZXB0aCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICBtYXhTdHJpbmdMaW1pdCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICBtYXhBcnJheUxpbWl0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgIG1heE9iamVjdEtleXNMaW1pdCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgfSA9IGxpbWl0cztcbiAgY29uc3Qgc3RhY2s6IEFycmF5PG1peGVkPiA9IFtdO1xuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VyKGtleTogc3RyaW5nLCB2YWx1ZTogbWl4ZWQpOiBtaXhlZCB7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCAmJiB0aGlzICE9PSBzdGFja1swXSkge1xuICAgICAgc3RhY2suc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJ1bmNhdGVkU3RyaW5nID0gJy4uLih0cnVuY2F0ZWQpLi4uJztcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBtYXhTdHJpbmdMaW1pdCArIHRydW5jYXRlZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBtYXhTdHJpbmdMaW1pdCkgKyB0cnVuY2F0ZWRTdHJpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IHJldHZhbDogbWl4ZWQgPSB2YWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmIChzdGFjay5sZW5ndGggPj0gbWF4RGVwdGgpIHtcbiAgICAgICAgcmV0dmFsID0gYFsgLi4uIGFycmF5IHdpdGggJHt2YWx1ZS5sZW5ndGh9IHZhbHVlcyAuLi4gXWA7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IG1heEFycmF5TGltaXQpIHtcbiAgICAgICAgcmV0dmFsID0gdmFsdWVcbiAgICAgICAgICAuc2xpY2UoMCwgbWF4QXJyYXlMaW1pdClcbiAgICAgICAgICAuY29uY2F0KFtcbiAgICAgICAgICAgIGAuLi4gZXh0cmEgJHt2YWx1ZS5sZW5ndGggLSBtYXhBcnJheUxpbWl0fSB2YWx1ZXMgdHJ1bmNhdGVkIC4uLmAsXG4gICAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCByZWZpbmVtZW50IGFmdGVyIEFycmF5LmlzQXJyYXkgY2FsbC5cbiAgICAgIGludmFyaWFudCh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnLCAnVGhpcyB3YXMgYWxyZWFkeSBmb3VuZCBlYXJsaWVyJyk7XG4gICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgIGlmIChzdGFjay5sZW5ndGggPj0gbWF4RGVwdGgpIHtcbiAgICAgICAgcmV0dmFsID0gYHsgLi4uIG9iamVjdCB3aXRoICR7a2V5cy5sZW5ndGh9IGtleXMgLi4uIH1gO1xuICAgICAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+IG1heE9iamVjdEtleXNMaW1pdCkge1xuICAgICAgICAvLyBSZXR1cm4gYSBzYW1wbGUgb2YgdGhlIGtleXMuXG4gICAgICAgIHJldHZhbCA9ICh7fToge1tzdHJpbmddOiBtaXhlZH0pO1xuICAgICAgICBmb3IgKGxldCBrIG9mIGtleXMuc2xpY2UoMCwgbWF4T2JqZWN0S2V5c0xpbWl0KSkge1xuICAgICAgICAgIHJldHZhbFtrXSA9IHZhbHVlW2tdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRydW5jYXRlZEtleSA9ICcuLi4odHJ1bmNhdGVkIGtleXMpLi4uJztcbiAgICAgICAgcmV0dmFsW3RydW5jYXRlZEtleV0gPSBrZXlzLmxlbmd0aCAtIG1heE9iamVjdEtleXNMaW1pdDtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sudW5zaGlmdChyZXR2YWwpO1xuICAgIHJldHVybiByZXR2YWw7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gc3RyaW5naWZ5U2FmZShhcmc6IG1peGVkKTogc3RyaW5nIHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhcmcudG9TdHJpbmcoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICdbZnVuY3Rpb24gdW5rbm93bl0nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiBhcmcubmFtZSArICc6ICcgKyBhcmcubWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGVyZm9ybSBhIHRyeSBjYXRjaCwganVzdCBpbiBjYXNlIHRoZSBvYmplY3QgaGFzIGEgY2lyY3VsYXJcbiAgICAgIC8vIHJlZmVyZW5jZSBvciBzdHJpbmdpZnkgdGhyb3dzIGZvciBzb21lIG90aGVyIHJlYXNvbi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJldCA9IEpTT04uc3RyaW5naWZ5KGFyZywgcmVwbGFjZXIpO1xuICAgICAgICBpZiAocmV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gJ1tcIicgKyB0eXBlb2YgYXJnICsgJ1wiIGZhaWxlZCB0byBzdHJpbmdpZnldJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAodHlwZW9mIGFyZy50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIDogdG9TdHJpbmcgc2hvdWxkbid0IHRha2UgYW55IGFyZ3VtZW50cyBpbiBnZW5lcmFsLlxuICAgICAgICAgICAgcmV0dXJuIGFyZy50b1N0cmluZygpO1xuICAgICAgICAgIH0gY2F0Y2ggKEUpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdbXCInICsgdHlwZW9mIGFyZyArICdcIiBmYWlsZWQgdG8gc3RyaW5naWZ5XSc7XG4gIH07XG59XG5cbmNvbnN0IHN0cmluZ2lmeVNhZmU6IG1peGVkID0+IHN0cmluZyA9IGNyZWF0ZVN0cmluZ2lmeVNhZmVXaXRoTGltaXRzKHtcbiAgbWF4RGVwdGg6IDEwLFxuICBtYXhTdHJpbmdMaW1pdDogMTAwLFxuICBtYXhBcnJheUxpbWl0OiA1MCxcbiAgbWF4T2JqZWN0S2V5c0xpbWl0OiA1MCxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnlTYWZlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBJZiB5b3VyIGFwcGxpY2F0aW9uIGlzIGFjY2VwdGluZyBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgc2FtZSBmaWVsZCBvdmVyXG4gKiB0aW1lIGFuZCBpcyBkb2luZyBhIGRpZmYgb24gdGhlbSwgeW91IGNhbiBlaXRoZXIgKDEpIGNyZWF0ZSBhIGNvcHkgb3JcbiAqICgyKSBlbnN1cmUgdGhhdCB0aG9zZSB2YWx1ZXMgYXJlIG5vdCBtdXRhdGVkIGJlaGluZCB0d28gcGFzc2VzLlxuICogVGhpcyBmdW5jdGlvbiBoZWxwcyB5b3Ugd2l0aCAoMikgYnkgZnJlZXppbmcgdGhlIG9iamVjdCBhbmQgdGhyb3dpbmcgaWZcbiAqIHRoZSB1c2VyIHN1YnNlcXVlbnRseSBtb2RpZmllcyB0aGUgdmFsdWUuXG4gKlxuICogVGhlcmUgYXJlIHR3byBjYXZlYXRzIHdpdGggdGhpcyBmdW5jdGlvbjpcbiAqICAgLSBJZiB0aGUgY2FsbCBzaXRlIGlzIG5vdCBpbiBzdHJpY3QgbW9kZSwgaXQgd2lsbCBvbmx5IHRocm93IHdoZW5cbiAqICAgICBtdXRhdGluZyBleGlzdGluZyBmaWVsZHMsIGFkZGluZyBhIG5ldyBvbmVcbiAqICAgICB3aWxsIHVuZm9ydHVuYXRlbHkgZmFpbCBzaWxlbnRseSA6KFxuICogICAtIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBmcm96ZW4gb3Igc2VhbGVkLCBpdCB3aWxsIG5vdCBjb250aW51ZSB0aGVcbiAqICAgICBkZWVwIHRyYXZlcnNhbCBhbmQgd2lsbCBsZWF2ZSBsZWFmIG5vZGVzIHVuZnJvemVuLlxuICpcbiAqIEZyZWV6aW5nIHRoZSBvYmplY3QgYW5kIGFkZGluZyB0aGUgdGhyb3cgbWVjaGFuaXNtIGlzIGV4cGVuc2l2ZSBhbmQgd2lsbFxuICogb25seSBiZSB1c2VkIGluIERFVi5cbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZUFuZFRocm93T25NdXRhdGlvbkluRGV2PFQ6IHsuLi59IHwgQXJyYXk8bWl4ZWQ+PihcbiAgb2JqZWN0OiBULFxuKTogVCB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIG9iamVjdCA9PT0gbnVsbCB8fFxuICAgICAgT2JqZWN0LmlzRnJvemVuKG9iamVjdCkgfHxcbiAgICAgIE9iamVjdC5pc1NlYWxlZChvYmplY3QpXG4gICAgKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8vICRGbG93Rml4TWVbbm90LWFuLW9iamVjdF0gYG9iamVjdGAgY2FuIGJlIGFuIGFycmF5LCBidXQgT2JqZWN0LmtleXMgd29ya3Mgd2l0aCBhcnJheXMgdG9vXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKChvYmplY3Q6IHsuLi59IHwgQXJyYXk8bWl4ZWQ+KSk7XG4gICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgICBnZXQ6IGlkZW50aXR5LmJpbmQobnVsbCwgb2JqZWN0W2tleV0pLFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAgICAgc2V0OiB0aHJvd09uSW1tdXRhYmxlTXV0YXRpb24uYmluZChudWxsLCBrZXkpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3QuZnJlZXplKG9iamVjdCk7XG4gICAgT2JqZWN0LnNlYWwob2JqZWN0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICBkZWVwRnJlZXplQW5kVGhyb3dPbk11dGF0aW9uSW5EZXYob2JqZWN0W2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuZnVuY3Rpb24gdGhyb3dPbkltbXV0YWJsZU11dGF0aW9uKGtleTogZW1wdHksIHZhbHVlKSB7XG4gIHRocm93IEVycm9yKFxuICAgICdZb3UgYXR0ZW1wdGVkIHRvIHNldCB0aGUga2V5IGAnICtcbiAgICAgIGtleSArXG4gICAgICAnYCB3aXRoIHRoZSB2YWx1ZSBgJyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgK1xuICAgICAgJ2Agb24gYW4gb2JqZWN0IHRoYXQgaXMgbWVhbnQgdG8gYmUgaW1tdXRhYmxlICcgK1xuICAgICAgJ2FuZCBoYXMgYmVlbiBmcm96ZW4uJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWU6IG1peGVkKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWVwRnJlZXplQW5kVGhyb3dPbk11dGF0aW9uSW5EZXY7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGVvZiAqIGFzIFN5c3RyYWNlTW9kdWxlIGZyb20gJy4vU3lzdHJhY2UnO1xuXG5jb25zdCBUUkFDRV9UQUdfUkVBQ1RfQVBQUyA9IDEgPDwgMTc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYml0d2lzZVxuXG5sZXQgX2FzeW5jQ29va2llID0gMDtcblxudHlwZSBFdmVudE5hbWUgPSBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKTtcbnR5cGUgRXZlbnRBcmdzID0gP3tbc3RyaW5nXTogc3RyaW5nfTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGN1cnJlbnRseSBiZWluZyB0cmFjZWQuXG4gKlxuICogQ2FsbGluZyBtZXRob2RzIG9uIHRoaXMgbW9kdWxlIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzbid0IGJlaW5nIHRyYWNlZCBpc1xuICogY2hlYXAsIGJ1dCB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhdm9pZCBjb21wdXRpbmcgZXhwZW5zaXZlIHZhbHVlcyBmb3JcbiAqIHRob3NlIGZ1bmN0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogaWYgKFN5c3RyYWNlLmlzRW5hYmxlZCgpKSB7XG4gKiAgIGNvbnN0IGV4cGVuc2l2ZUFyZ3MgPSBjb21wdXRlRXhwZW5zaXZlQXJncygpO1xuICogICBTeXN0cmFjZS5iZWdpbkV2ZW50KCdteUV2ZW50JywgZXhwZW5zaXZlQXJncyk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBnbG9iYWwubmF0aXZlVHJhY2VJc1RyYWNpbmdcbiAgICA/IGdsb2JhbC5uYXRpdmVUcmFjZUlzVHJhY2luZyhUUkFDRV9UQUdfUkVBQ1RfQVBQUylcbiAgICA6IEJvb2xlYW4oZ2xvYmFsLl9fUkNUUHJvZmlsZUlzUHJvZmlsaW5nKTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIG5vdyBhIG5vLW9wIGJ1dCBpdCdzIGxlZnQgZm9yIGJhY2t3YXJkc1xuICogY29tcGF0aWJpbGl0eS4gYGlzRW5hYmxlZGAgd2lsbCBub3cgc3luY2hyb25vdXNseSBjaGVjayBpZiB3ZSdyZSBhY3RpdmVseVxuICogcHJvZmlsaW5nIG9yIG5vdC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNhbGxiYWNrcyB0byBrbm93XG4gKiB3aGVuIHByb2ZpbGluZyBoYXMgc3RhcnRlZC9zdG9wcGVkIG9uIEFuZHJvaWQgQVBJcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVuYWJsZWQoX2RvRW5hYmxlOiBib29sZWFuKTogdm9pZCB7fVxuXG4vKipcbiAqIE1hcmtzIHRoZSBzdGFydCBvZiBhIHN5bmNocm9ub3VzIGV2ZW50IHRoYXQgc2hvdWxkIGVuZCBpbiB0aGUgc2FtZSBzdGFja1xuICogZnJhbWUuIFRoZSBlbmQgb2YgdGhpcyBldmVudCBzaG91bGQgYmUgbWFya2VkIHVzaW5nIHRoZSBgZW5kRXZlbnRgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmVnaW5FdmVudChldmVudE5hbWU6IEV2ZW50TmFtZSwgYXJncz86IEV2ZW50QXJncyk6IHZvaWQge1xuICBpZiAoaXNFbmFibGVkKCkpIHtcbiAgICBjb25zdCBldmVudE5hbWVTdHJpbmcgPVxuICAgICAgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IGV2ZW50TmFtZSgpIDogZXZlbnROYW1lO1xuICAgIGdsb2JhbC5uYXRpdmVUcmFjZUJlZ2luU2VjdGlvbihUUkFDRV9UQUdfUkVBQ1RfQVBQUywgZXZlbnROYW1lU3RyaW5nLCBhcmdzKTtcbiAgfVxufVxuXG4vKipcbiAqIE1hcmtzIHRoZSBlbmQgb2YgYSBzeW5jaHJvbm91cyBldmVudCBzdGFydGVkIGluIHRoZSBzYW1lIHN0YWNrIGZyYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kRXZlbnQoYXJncz86IEV2ZW50QXJncyk6IHZvaWQge1xuICBpZiAoaXNFbmFibGVkKCkpIHtcbiAgICBnbG9iYWwubmF0aXZlVHJhY2VFbmRTZWN0aW9uKFRSQUNFX1RBR19SRUFDVF9BUFBTLCBhcmdzKTtcbiAgfVxufVxuXG4vKipcbiAqIE1hcmtzIHRoZSBzdGFydCBvZiBhIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cyBldmVudC4gVGhlIGVuZCBvZiB0aGlzIGV2ZW50XG4gKiBzaG91bGQgYmUgbWFya2VkIGNhbGxpbmcgdGhlIGBlbmRBc3luY0V2ZW50YCBmdW5jdGlvbiB3aXRoIHRoZSBjb29raWVcbiAqIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZWdpbkFzeW5jRXZlbnQoXG4gIGV2ZW50TmFtZTogRXZlbnROYW1lLFxuICBhcmdzPzogRXZlbnRBcmdzLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgY29va2llID0gX2FzeW5jQ29va2llO1xuICBpZiAoaXNFbmFibGVkKCkpIHtcbiAgICBfYXN5bmNDb29raWUrKztcbiAgICBjb25zdCBldmVudE5hbWVTdHJpbmcgPVxuICAgICAgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IGV2ZW50TmFtZSgpIDogZXZlbnROYW1lO1xuICAgIGdsb2JhbC5uYXRpdmVUcmFjZUJlZ2luQXN5bmNTZWN0aW9uKFxuICAgICAgVFJBQ0VfVEFHX1JFQUNUX0FQUFMsXG4gICAgICBldmVudE5hbWVTdHJpbmcsXG4gICAgICBjb29raWUsXG4gICAgICBhcmdzLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNvb2tpZTtcbn1cblxuLyoqXG4gKiBNYXJrcyB0aGUgZW5kIG9mIGEgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzIGV2ZW50LCB3aGljaCB3YXMgc3RhcnRlZCB3aXRoXG4gKiB0aGUgZ2l2ZW4gY29va2llLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kQXN5bmNFdmVudChcbiAgZXZlbnROYW1lOiBFdmVudE5hbWUsXG4gIGNvb2tpZTogbnVtYmVyLFxuICBhcmdzPzogRXZlbnRBcmdzLFxuKTogdm9pZCB7XG4gIGlmIChpc0VuYWJsZWQoKSkge1xuICAgIGNvbnN0IGV2ZW50TmFtZVN0cmluZyA9XG4gICAgICB0eXBlb2YgZXZlbnROYW1lID09PSAnZnVuY3Rpb24nID8gZXZlbnROYW1lKCkgOiBldmVudE5hbWU7XG4gICAgZ2xvYmFsLm5hdGl2ZVRyYWNlRW5kQXN5bmNTZWN0aW9uKFxuICAgICAgVFJBQ0VfVEFHX1JFQUNUX0FQUFMsXG4gICAgICBldmVudE5hbWVTdHJpbmcsXG4gICAgICBjb29raWUsXG4gICAgICBhcmdzLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBuZXcgdmFsdWUgZm9yIGEgY291bnRlciBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvdW50ZXJFdmVudChldmVudE5hbWU6IEV2ZW50TmFtZSwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICBpZiAoaXNFbmFibGVkKCkpIHtcbiAgICBjb25zdCBldmVudE5hbWVTdHJpbmcgPVxuICAgICAgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IGV2ZW50TmFtZSgpIDogZXZlbnROYW1lO1xuICAgIGdsb2JhbC5uYXRpdmVUcmFjZUNvdW50ZXIgJiZcbiAgICAgIGdsb2JhbC5uYXRpdmVUcmFjZUNvdW50ZXIoVFJBQ0VfVEFHX1JFQUNUX0FQUFMsIGV2ZW50TmFtZVN0cmluZywgdmFsdWUpO1xuICB9XG59XG5cbmlmIChfX0RFVl9fKSB7XG4gIGNvbnN0IFN5c3RyYWNlOiBTeXN0cmFjZU1vZHVsZSA9IHtcbiAgICBpc0VuYWJsZWQsXG4gICAgc2V0RW5hYmxlZCxcbiAgICBiZWdpbkV2ZW50LFxuICAgIGVuZEV2ZW50LFxuICAgIGJlZ2luQXN5bmNFdmVudCxcbiAgICBlbmRBc3luY0V2ZW50LFxuICAgIGNvdW50ZXJFdmVudCxcbiAgfTtcblxuICAvLyBUaGUgbWV0cm8gcmVxdWlyZSBwb2x5ZmlsbCBjYW4gbm90IGhhdmUgZGVwZW5kZW5jaWVzICh0cnVlIGZvciBhbGwgcG9seWZpbGxzKS5cbiAgLy8gRW5zdXJlIHRoYXQgYFN5c3RyYWNlYCBpcyBhdmFpbGFibGUgaW4gcG9seWZpbGwgYnkgZXhwb3NpbmcgaXQgZ2xvYmFsbHkuXG4gIGdsb2JhbFsoZ2xvYmFsLl9fTUVUUk9fR0xPQkFMX1BSRUZJWF9fIHx8ICcnKSArICdfX1NZU1RSQUNFJ10gPSBTeXN0cmFjZTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RXJyb3JVdGlsc1R9IGZyb20gJ0ByZWFjdC1uYXRpdmUvanMtcG9seWZpbGxzL2Vycm9yLWd1YXJkJztcblxuLyoqXG4gKiBUaGUgcGFydGljdWxhciByZXF1aXJlIHJ1bnRpbWUgdGhhdCB3ZSBhcmUgdXNpbmcgbG9va3MgZm9yIGEgZ2xvYmFsXG4gKiBgRXJyb3JVdGlsc2Agb2JqZWN0IGFuZCBpZiBpdCBleGlzdHMsIHRoZW4gaXQgcmVxdWlyZXMgbW9kdWxlcyB3aXRoIHRoZVxuICogZXJyb3IgaGFuZGxlciBzcGVjaWZpZWQgdmlhIEVycm9yVXRpbHMuc2V0R2xvYmFsSGFuZGxlciBieSBjYWxsaW5nIHRoZVxuICogcmVxdWlyZSBmdW5jdGlvbiB3aXRoIGFwcGx5V2l0aEd1YXJkLiBTaW5jZSB0aGUgcmVxdWlyZSBtb2R1bGUgaXMgbG9hZGVkXG4gKiBiZWZvcmUgYW55IG9mIHRoZSBtb2R1bGVzLCB0aGlzIEVycm9yVXRpbHMgbXVzdCBiZSBkZWZpbmVkIChhbmQgdGhlIGhhbmRsZXJcbiAqIHNldCkgZ2xvYmFsbHkgYmVmb3JlIHJlcXVpcmluZyBhbnl0aGluZy5cbiAqXG4gKiBIb3dldmVyLCB3ZSBzdGlsbCB3YW50IHRvIHRyZWF0IEVycm9yVXRpbHMgYXMgYSBtb2R1bGUgc28gdGhhdCBvdGhlciBtb2R1bGVzXG4gKiB0aGF0IHVzZSBpdCBhcmVuJ3QganVzdCB1c2luZyBhIGdsb2JhbCB2YXJpYWJsZSwgc28gc2ltcGx5IGV4cG9ydCB0aGUgZ2xvYmFsXG4gKiB2YXJpYWJsZSBoZXJlLiBFcnJvclV0aWxzIGlzIG9yaWdpbmFsbHkgZGVmaW5lZCBpbiBhIGZpbGUgbmFtZWQgZXJyb3ItZ3VhcmQuanMuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGdsb2JhbC5FcnJvclV0aWxzOiBFcnJvclV0aWxzVCk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge0V2ZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi8uLi92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuaW1wb3J0IHR5cGUge0VsZW1lbnRSZWZ9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IFJDVERldmljZUV2ZW50RW1pdHRlciBmcm9tICcuLi8uLi9FdmVudEVtaXR0ZXIvUkNURGV2aWNlRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7c2VuZEFjY2Vzc2liaWxpdHlFdmVudH0gZnJvbSAnLi4vLi4vUmVhY3ROYXRpdmUvUmVuZGVyZXJQcm94eSc7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCBsZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50IGZyb20gJy4vbGVnYWN5U2VuZEFjY2Vzc2liaWxpdHlFdmVudCc7XG5pbXBvcnQgTmF0aXZlQWNjZXNzaWJpbGl0eUluZm9BbmRyb2lkIGZyb20gJy4vTmF0aXZlQWNjZXNzaWJpbGl0eUluZm8nO1xuaW1wb3J0IE5hdGl2ZUFjY2Vzc2liaWxpdHlNYW5hZ2VySU9TIGZyb20gJy4vTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXInO1xuXG4vLyBFdmVudHMgdGhhdCBhcmUgb25seSBzdXBwb3J0ZWQgb24gQW5kcm9pZC5cbnR5cGUgQWNjZXNzaWJpbGl0eUV2ZW50RGVmaW5pdGlvbnNBbmRyb2lkID0ge1xuICBhY2Nlc3NpYmlsaXR5U2VydmljZUNoYW5nZWQ6IFtib29sZWFuXSxcbn07XG5cbi8vIEV2ZW50cyB0aGF0IGFyZSBvbmx5IHN1cHBvcnRlZCBvbiBpT1MuXG50eXBlIEFjY2Vzc2liaWxpdHlFdmVudERlZmluaXRpb25zSU9TID0ge1xuICBhbm5vdW5jZW1lbnRGaW5pc2hlZDogW3thbm5vdW5jZW1lbnQ6IHN0cmluZywgc3VjY2VzczogYm9vbGVhbn1dLFxuICBib2xkVGV4dENoYW5nZWQ6IFtib29sZWFuXSxcbiAgZ3JheXNjYWxlQ2hhbmdlZDogW2Jvb2xlYW5dLFxuICBpbnZlcnRDb2xvcnNDaGFuZ2VkOiBbYm9vbGVhbl0sXG4gIHJlZHVjZVRyYW5zcGFyZW5jeUNoYW5nZWQ6IFtib29sZWFuXSxcbn07XG5cbnR5cGUgQWNjZXNzaWJpbGl0eUV2ZW50RGVmaW5pdGlvbnMgPSB7XG4gIC4uLkFjY2Vzc2liaWxpdHlFdmVudERlZmluaXRpb25zQW5kcm9pZCxcbiAgLi4uQWNjZXNzaWJpbGl0eUV2ZW50RGVmaW5pdGlvbnNJT1MsXG4gIGNoYW5nZTogW2Jvb2xlYW5dLCAvLyBzY3JlZW5SZWFkZXJDaGFuZ2VkXG4gIHJlZHVjZU1vdGlvbkNoYW5nZWQ6IFtib29sZWFuXSxcbiAgc2NyZWVuUmVhZGVyQ2hhbmdlZDogW2Jvb2xlYW5dLFxufTtcblxudHlwZSBBY2Nlc3NpYmlsaXR5RXZlbnRUeXBlcyA9ICdjbGljaycgfCAnZm9jdXMnIHwgJ3ZpZXdIb3ZlckVudGVyJztcblxuLy8gTWFwcGluZyBvZiBwdWJsaWMgZXZlbnQgbmFtZXMgdG8gcGxhdGZvcm0tc3BlY2lmaWMgZXZlbnQgbmFtZXMuXG5jb25zdCBFdmVudE5hbWVzOiBNYXA8XG4gICRLZXlzPEFjY2Vzc2liaWxpdHlFdmVudERlZmluaXRpb25zPixcbiAgc3RyaW5nLFxuPiA9IFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCdcbiAgPyBuZXcgTWFwKFtcbiAgICAgIFsnY2hhbmdlJywgJ3RvdWNoRXhwbG9yYXRpb25EaWRDaGFuZ2UnXSxcbiAgICAgIFsncmVkdWNlTW90aW9uQ2hhbmdlZCcsICdyZWR1Y2VNb3Rpb25EaWRDaGFuZ2UnXSxcbiAgICAgIFsnc2NyZWVuUmVhZGVyQ2hhbmdlZCcsICd0b3VjaEV4cGxvcmF0aW9uRGlkQ2hhbmdlJ10sXG4gICAgICBbJ2FjY2Vzc2liaWxpdHlTZXJ2aWNlQ2hhbmdlZCcsICdhY2Nlc3NpYmlsaXR5U2VydmljZURpZENoYW5nZSddLFxuICAgIF0pXG4gIDogbmV3IE1hcChbXG4gICAgICBbJ2Fubm91bmNlbWVudEZpbmlzaGVkJywgJ2Fubm91bmNlbWVudEZpbmlzaGVkJ10sXG4gICAgICBbJ2JvbGRUZXh0Q2hhbmdlZCcsICdib2xkVGV4dENoYW5nZWQnXSxcbiAgICAgIFsnY2hhbmdlJywgJ3NjcmVlblJlYWRlckNoYW5nZWQnXSxcbiAgICAgIFsnZ3JheXNjYWxlQ2hhbmdlZCcsICdncmF5c2NhbGVDaGFuZ2VkJ10sXG4gICAgICBbJ2ludmVydENvbG9yc0NoYW5nZWQnLCAnaW52ZXJ0Q29sb3JzQ2hhbmdlZCddLFxuICAgICAgWydyZWR1Y2VNb3Rpb25DaGFuZ2VkJywgJ3JlZHVjZU1vdGlvbkNoYW5nZWQnXSxcbiAgICAgIFsncmVkdWNlVHJhbnNwYXJlbmN5Q2hhbmdlZCcsICdyZWR1Y2VUcmFuc3BhcmVuY3lDaGFuZ2VkJ10sXG4gICAgICBbJ3NjcmVlblJlYWRlckNoYW5nZWQnLCAnc2NyZWVuUmVhZGVyQ2hhbmdlZCddLFxuICAgIF0pO1xuXG4vKipcbiAqIFNvbWV0aW1lcyBpdCdzIHVzZWZ1bCB0byBrbm93IHdoZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgaGFzIGEgc2NyZWVuIHJlYWRlclxuICogdGhhdCBpcyBjdXJyZW50bHkgYWN0aXZlLiBUaGUgYEFjY2Vzc2liaWxpdHlJbmZvYCBBUEkgaXMgZGVzaWduZWQgZm9yIHRoaXNcbiAqIHB1cnBvc2UuIFlvdSBjYW4gdXNlIGl0IHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzY3JlZW4gcmVhZGVyIGFzXG4gKiB3ZWxsIGFzIHRvIHJlZ2lzdGVyIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBzY3JlZW4gcmVhZGVyXG4gKiBjaGFuZ2VzLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjY2Vzc2liaWxpdHlpbmZvXG4gKi9cbmNvbnN0IEFjY2Vzc2liaWxpdHlJbmZvID0ge1xuICAvKipcbiAgICogUXVlcnkgd2hldGhlciBib2xkIHRleHQgaXMgY3VycmVudGx5IGVuYWJsZWQuXG4gICAqXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgYm9vbGVhbi5cbiAgICogVGhlIHJlc3VsdCBpcyBgdHJ1ZWAgd2hlbiBib2xkIHRleHQgaXMgZW5hYmxlZCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjY2Vzc2liaWxpdHlpbmZvI2lzQm9sZFRleHRFbmFibGVkXG4gICAqL1xuICBpc0JvbGRUZXh0RW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcklPUyAhPSBudWxsKSB7XG4gICAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1MuZ2V0Q3VycmVudEJvbGRUZXh0U3RhdGUoXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHdoZXRoZXIgZ3JheXNjYWxlIGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBhIGJvb2xlYW4uXG4gICAqIFRoZSByZXN1bHQgaXMgYHRydWVgIHdoZW4gZ3JheXNjYWxlIGlzIGVuYWJsZWQgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY2Nlc3NpYmlsaXR5aW5mbyNpc0dyYXlzY2FsZUVuYWJsZWRcbiAgICovXG4gIGlzR3JheXNjYWxlRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcklPUyAhPSBudWxsKSB7XG4gICAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1MuZ2V0Q3VycmVudEdyYXlzY2FsZVN0YXRlKFxuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBRdWVyeSB3aGV0aGVyIGludmVydGVkIGNvbG9ycyBhcmUgY3VycmVudGx5IGVuYWJsZWQuXG4gICAqXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgYm9vbGVhbi5cbiAgICogVGhlIHJlc3VsdCBpcyBgdHJ1ZWAgd2hlbiBpbnZlcnQgY29sb3IgaXMgZW5hYmxlZCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjY2Vzc2liaWxpdHlpbmZvI2lzSW52ZXJ0Q29sb3JzRW5hYmxlZFxuICAgKi9cbiAgaXNJbnZlcnRDb2xvcnNFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKE5hdGl2ZUFjY2Vzc2liaWxpdHlNYW5hZ2VySU9TICE9IG51bGwpIHtcbiAgICAgICAgICBOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcklPUy5nZXRDdXJyZW50SW52ZXJ0Q29sb3JzU3RhdGUoXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHdoZXRoZXIgcmVkdWNlZCBtb3Rpb24gaXMgY3VycmVudGx5IGVuYWJsZWQuXG4gICAqXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgYm9vbGVhbi5cbiAgICogVGhlIHJlc3VsdCBpcyBgdHJ1ZWAgd2hlbiBhIHJlZHVjZSBtb3Rpb24gaXMgZW5hYmxlZCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjY2Vzc2liaWxpdHlpbmZvI2lzUmVkdWNlTW90aW9uRW5hYmxlZFxuICAgKi9cbiAgaXNSZWR1Y2VNb3Rpb25FbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgICBpZiAoTmF0aXZlQWNjZXNzaWJpbGl0eUluZm9BbmRyb2lkICE9IG51bGwpIHtcbiAgICAgICAgICBOYXRpdmVBY2Nlc3NpYmlsaXR5SW5mb0FuZHJvaWQuaXNSZWR1Y2VNb3Rpb25FbmFibGVkKHJlc29sdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKE5hdGl2ZUFjY2Vzc2liaWxpdHlNYW5hZ2VySU9TICE9IG51bGwpIHtcbiAgICAgICAgICBOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcklPUy5nZXRDdXJyZW50UmVkdWNlTW90aW9uU3RhdGUoXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHdoZXRoZXIgcmVkdWNlIG1vdGlvbiBhbmQgcHJlZmVyIGNyb3NzLWZhZGUgdHJhbnNpdGlvbnMgc2V0dGluZ3MgYXJlIGN1cnJlbnRseSBlbmFibGVkLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBhIGJvb2xlYW4uXG4gICAqIFRoZSByZXN1bHQgaXMgYHRydWVgIHdoZW4gIHByZWZlciBjcm9zcy1mYWRlIHRyYW5zaXRpb25zIGlzIGVuYWJsZWQgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY2Nlc3NpYmlsaXR5aW5mbyNwcmVmZXJzQ3Jvc3NGYWRlVHJhbnNpdGlvbnNcbiAgICovXG4gIHByZWZlcnNDcm9zc0ZhZGVUcmFuc2l0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1M/LmdldEN1cnJlbnRQcmVmZXJzQ3Jvc3NGYWRlVHJhbnNpdGlvbnNTdGF0ZSAhPVxuICAgICAgICAgIG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1MuZ2V0Q3VycmVudFByZWZlcnNDcm9zc0ZhZGVUcmFuc2l0aW9uc1N0YXRlKFxuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBRdWVyeSB3aGV0aGVyIHJlZHVjZWQgdHJhbnNwYXJlbmN5IGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBhIGJvb2xlYW4uXG4gICAqIFRoZSByZXN1bHQgaXMgYHRydWVgIHdoZW4gYSByZWR1Y2UgdHJhbnNwYXJlbmN5IGlzIGVuYWJsZWQgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY2Nlc3NpYmlsaXR5aW5mbyNpc1JlZHVjZVRyYW5zcGFyZW5jeUVuYWJsZWRcbiAgICovXG4gIGlzUmVkdWNlVHJhbnNwYXJlbmN5RW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcklPUyAhPSBudWxsKSB7XG4gICAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1MuZ2V0Q3VycmVudFJlZHVjZVRyYW5zcGFyZW5jeVN0YXRlKFxuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBRdWVyeSB3aGV0aGVyIGEgc2NyZWVuIHJlYWRlciBpcyBjdXJyZW50bHkgZW5hYmxlZC5cbiAgICpcbiAgICogUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYSBib29sZWFuLlxuICAgKiBUaGUgcmVzdWx0IGlzIGB0cnVlYCB3aGVuIGEgc2NyZWVuIHJlYWRlciBpcyBlbmFibGVkIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWNjZXNzaWJpbGl0eWluZm8jaXNTY3JlZW5SZWFkZXJFbmFibGVkXG4gICAqL1xuICBpc1NjcmVlblJlYWRlckVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICAgIGlmIChOYXRpdmVBY2Nlc3NpYmlsaXR5SW5mb0FuZHJvaWQgIT0gbnVsbCkge1xuICAgICAgICAgIE5hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvQW5kcm9pZC5pc1RvdWNoRXhwbG9yYXRpb25FbmFibGVkKHJlc29sdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKE5hdGl2ZUFjY2Vzc2liaWxpdHlNYW5hZ2VySU9TICE9IG51bGwpIHtcbiAgICAgICAgICBOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcklPUy5nZXRDdXJyZW50Vm9pY2VPdmVyU3RhdGUoXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHdoZXRoZXIgQWNjZXNzaWJpbGl0eSBTZXJ2aWNlIGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBhIGJvb2xlYW4uXG4gICAqIFRoZSByZXN1bHQgaXMgYHRydWVgIHdoZW4gYW55IHNlcnZpY2UgaXMgZW5hYmxlZCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwbGF0Zm9ybSBhbmRyb2lkXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjY2Vzc2liaWxpdHlpbmZvLyNpc2FjY2Vzc2liaWxpdHlzZXJ2aWNlZW5hYmxlZC1hbmRyb2lkXG4gICAqL1xuICBpc0FjY2Vzc2liaWxpdHlTZXJ2aWNlRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE5hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvQW5kcm9pZCAhPSBudWxsICYmXG4gICAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eUluZm9BbmRyb2lkLmlzQWNjZXNzaWJpbGl0eVNlcnZpY2VFbmFibGVkICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eUluZm9BbmRyb2lkLmlzQWNjZXNzaWJpbGl0eVNlcnZpY2VFbmFibGVkKHJlc29sdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgaGFuZGxlci4gU3VwcG9ydGVkIGV2ZW50czpcbiAgICpcbiAgICogLSBgcmVkdWNlTW90aW9uQ2hhbmdlZGA6IEZpcmVzIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSByZWR1Y2UgbW90aW9uIHRvZ2dsZSBjaGFuZ2VzLlxuICAgKiAgIFRoZSBhcmd1bWVudCB0byB0aGUgZXZlbnQgaGFuZGxlciBpcyBhIGJvb2xlYW4uIFRoZSBib29sZWFuIGlzIGB0cnVlYCB3aGVuIGEgcmVkdWNlXG4gICAqICAgbW90aW9uIGlzIGVuYWJsZWQgKG9yIHdoZW4gXCJUcmFuc2l0aW9uIEFuaW1hdGlvbiBTY2FsZVwiIGluIFwiRGV2ZWxvcGVyIG9wdGlvbnNcIiBpc1xuICAgKiAgIFwiQW5pbWF0aW9uIG9mZlwiKSBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqIC0gYHNjcmVlblJlYWRlckNoYW5nZWRgOiBGaXJlcyB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgc2NyZWVuIHJlYWRlciBjaGFuZ2VzLiBUaGUgYXJndW1lbnRcbiAgICogICB0byB0aGUgZXZlbnQgaGFuZGxlciBpcyBhIGJvb2xlYW4uIFRoZSBib29sZWFuIGlzIGB0cnVlYCB3aGVuIGEgc2NyZWVuXG4gICAqICAgcmVhZGVyIGlzIGVuYWJsZWQgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGVzZSBldmVudHMgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIGlPUzpcbiAgICpcbiAgICogLSBgYm9sZFRleHRDaGFuZ2VkYDogaU9TLW9ubHkgZXZlbnQuIEZpcmVzIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBib2xkIHRleHQgdG9nZ2xlIGNoYW5nZXMuXG4gICAqICAgVGhlIGFyZ3VtZW50IHRvIHRoZSBldmVudCBoYW5kbGVyIGlzIGEgYm9vbGVhbi4gVGhlIGJvb2xlYW4gaXMgYHRydWVgIHdoZW4gYSBib2xkIHRleHRcbiAgICogICBpcyBlbmFibGVkIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogLSBgZ3JheXNjYWxlQ2hhbmdlZGA6IGlPUy1vbmx5IGV2ZW50LiBGaXJlcyB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgZ3JheSBzY2FsZSB0b2dnbGUgY2hhbmdlcy5cbiAgICogICBUaGUgYXJndW1lbnQgdG8gdGhlIGV2ZW50IGhhbmRsZXIgaXMgYSBib29sZWFuLiBUaGUgYm9vbGVhbiBpcyBgdHJ1ZWAgd2hlbiBhIGdyYXkgc2NhbGVcbiAgICogICBpcyBlbmFibGVkIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogLSBgaW52ZXJ0Q29sb3JzQ2hhbmdlZGA6IGlPUy1vbmx5IGV2ZW50LiBGaXJlcyB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgaW52ZXJ0IGNvbG9ycyB0b2dnbGVcbiAgICogICBjaGFuZ2VzLiBUaGUgYXJndW1lbnQgdG8gdGhlIGV2ZW50IGhhbmRsZXIgaXMgYSBib29sZWFuLiBUaGUgYm9vbGVhbiBpcyBgdHJ1ZWAgd2hlbiBhIGludmVydFxuICAgKiAgIGNvbG9ycyBpcyBlbmFibGVkIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogLSBgcmVkdWNlVHJhbnNwYXJlbmN5Q2hhbmdlZGA6IGlPUy1vbmx5IGV2ZW50LiBGaXJlcyB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcmVkdWNlIHRyYW5zcGFyZW5jeVxuICAgKiAgIHRvZ2dsZSBjaGFuZ2VzLiAgVGhlIGFyZ3VtZW50IHRvIHRoZSBldmVudCBoYW5kbGVyIGlzIGEgYm9vbGVhbi4gVGhlIGJvb2xlYW4gaXMgYHRydWVgXG4gICAqICAgd2hlbiBhIHJlZHVjZSB0cmFuc3BhcmVuY3kgaXMgZW5hYmxlZCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqIC0gYGFubm91bmNlbWVudEZpbmlzaGVkYDogaU9TLW9ubHkgZXZlbnQuIEZpcmVzIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIgaGFzXG4gICAqICAgZmluaXNoZWQgbWFraW5nIGFuIGFubm91bmNlbWVudC4gVGhlIGFyZ3VtZW50IHRvIHRoZSBldmVudCBoYW5kbGVyIGlzIGFcbiAgICogICBkaWN0aW9uYXJ5IHdpdGggdGhlc2Uga2V5czpcbiAgICogICAgIC0gYGFubm91bmNlbWVudGA6IFRoZSBzdHJpbmcgYW5ub3VuY2VkIGJ5IHRoZSBzY3JlZW4gcmVhZGVyLlxuICAgKiAgICAgLSBgc3VjY2Vzc2A6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGFubm91bmNlbWVudCB3YXNcbiAgICogICAgICAgc3VjY2Vzc2Z1bGx5IG1hZGUuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjY2Vzc2liaWxpdHlpbmZvI2FkZGV2ZW50bGlzdGVuZXJcbiAgICovXG4gIGFkZEV2ZW50TGlzdGVuZXI8SzogJEtleXM8QWNjZXNzaWJpbGl0eUV2ZW50RGVmaW5pdGlvbnM+PihcbiAgICBldmVudE5hbWU6IEssXG4gICAgLy8gJEZsb3dJc3N1ZVtpbmNvbXBhdGlibGUtdHlwZV0gLSBGbG93IGJ1ZyB3aXRoIHVuaW9ucyBhbmQgZ2VuZXJpY3MgKFQxMjgwOTk0MjMpXG4gICAgaGFuZGxlcjogKC4uLiRFbGVtZW50VHlwZTxBY2Nlc3NpYmlsaXR5RXZlbnREZWZpbml0aW9ucywgSz4pID0+IHZvaWQsXG4gICk6IEV2ZW50U3Vic2NyaXB0aW9uIHtcbiAgICBjb25zdCBkZXZpY2VFdmVudE5hbWUgPSBFdmVudE5hbWVzLmdldChldmVudE5hbWUpO1xuICAgIHJldHVybiBkZXZpY2VFdmVudE5hbWUgPT0gbnVsbFxuICAgICAgPyB7cmVtb3ZlKCk6IHZvaWQge319XG4gICAgICA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgIFJDVERldmljZUV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lcihkZXZpY2VFdmVudE5hbWUsIGhhbmRsZXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXQgYWNjZXNzaWJpbGl0eSBmb2N1cyB0byBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWNjZXNzaWJpbGl0eWluZm8jc2V0YWNjZXNzaWJpbGl0eWZvY3VzXG4gICAqL1xuICBzZXRBY2Nlc3NpYmlsaXR5Rm9jdXMocmVhY3RUYWc6IG51bWJlcik6IHZvaWQge1xuICAgIGxlZ2FjeVNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQocmVhY3RUYWcsICdmb2N1cycpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbmFtZWQgYWNjZXNzaWJpbGl0eSBldmVudCB0byBhIEhvc3RDb21wb25lbnQuXG4gICAqL1xuICBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KFxuICAgIGhhbmRsZTogRWxlbWVudFJlZjxIb3N0Q29tcG9uZW50PG1peGVkPj4sXG4gICAgZXZlbnRUeXBlOiBBY2Nlc3NpYmlsaXR5RXZlbnRUeXBlcyxcbiAgKSB7XG4gICAgLy8gaU9TIG9ubHkgc3VwcG9ydHMgJ2ZvY3VzJyBldmVudCB0eXBlc1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgJiYgZXZlbnRUeXBlID09PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHJvdXRlIHRocm91Z2ggUmVhY3QgcmVuZGVyZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBGYWJyaWMgYW5kIG5vbi1GYWJyaWMgaGFuZGxlc1xuICAgIHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoaGFuZGxlLCBldmVudFR5cGUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQb3N0IGEgc3RyaW5nIHRvIGJlIGFubm91bmNlZCBieSB0aGUgc2NyZWVuIHJlYWRlci5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWNjZXNzaWJpbGl0eWluZm8jYW5ub3VuY2Vmb3JhY2Nlc3NpYmlsaXR5XG4gICAqL1xuICBhbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkoYW5ub3VuY2VtZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eUluZm9BbmRyb2lkPy5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkoYW5ub3VuY2VtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1M/LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShhbm5vdW5jZW1lbnQpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUG9zdCBhIHN0cmluZyB0byBiZSBhbm5vdW5jZWQgYnkgdGhlIHNjcmVlbiByZWFkZXIuXG4gICAqIC0gYGFubm91bmNlbWVudGA6IFRoZSBzdHJpbmcgYW5ub3VuY2VkIGJ5IHRoZSBzY3JlZW4gcmVhZGVyLlxuICAgKiAtIGBvcHRpb25zYDogQW4gb2JqZWN0IHRoYXQgY29uZmlndXJlcyB0aGUgcmVhZGluZyBvcHRpb25zLlxuICAgKiAgIC0gYHF1ZXVlYDogVGhlIGFubm91bmNlbWVudCB3aWxsIGJlIHF1ZXVlZCBiZWhpbmQgZXhpc3RpbmcgYW5ub3VuY2VtZW50cy4gaU9TIG9ubHkuXG4gICAqL1xuICBhbm5vdW5jZUZvckFjY2Vzc2liaWxpdHlXaXRoT3B0aW9ucyhcbiAgICBhbm5vdW5jZW1lbnQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7cXVldWU/OiBib29sZWFufSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIE5hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvQW5kcm9pZD8uYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5KGFubm91bmNlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcklPUz8uYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5V2l0aE9wdGlvbnMpIHtcbiAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1M/LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eVdpdGhPcHRpb25zKFxuICAgICAgICAgIGFubm91bmNlbWVudCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1M/LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShhbm5vdW5jZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogR2V0IHRoZSByZWNvbW1lbmRlZCB0aW1lb3V0IGZvciBjaGFuZ2VzIHRvIHRoZSBVSSBuZWVkZWQgYnkgdGhpcyB1c2VyLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY2Nlc3NpYmlsaXR5aW5mbyNnZXRyZWNvbW1lbmRlZHRpbWVvdXRtaWxsaXNcbiAgICovXG4gIGdldFJlY29tbWVuZGVkVGltZW91dE1pbGxpcyhvcmlnaW5hbFRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChOYXRpdmVBY2Nlc3NpYmlsaXR5SW5mb0FuZHJvaWQ/LmdldFJlY29tbWVuZGVkVGltZW91dE1pbGxpcykge1xuICAgICAgICAgIE5hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvQW5kcm9pZC5nZXRSZWNvbW1lbmRlZFRpbWVvdXRNaWxsaXMoXG4gICAgICAgICAgICBvcmlnaW5hbFRpbWVvdXQsXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShvcmlnaW5hbFRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvcmlnaW5hbFRpbWVvdXQpO1xuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFjY2Vzc2liaWxpdHlJbmZvO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtJRXZlbnRFbWl0dGVyfSBmcm9tICcuLi92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuXG5pbXBvcnQge2JlZ2luRXZlbnQsIGVuZEV2ZW50fSBmcm9tICcuLi9QZXJmb3JtYW5jZS9TeXN0cmFjZSc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbi8vIEZJWE1FOiB1c2UgdHlwZWQgZXZlbnRzXG50eXBlIFJDVERldmljZUV2ZW50RGVmaW5pdGlvbnMgPSAkRmxvd0ZpeE1lO1xuXG4vKipcbiAqIEdsb2JhbCBFdmVudEVtaXR0ZXIgdXNlZCBieSB0aGUgbmF0aXZlIHBsYXRmb3JtIHRvIGVtaXQgZXZlbnRzIHRvIEphdmFTY3JpcHQuXG4gKiBFdmVudHMgYXJlIGlkZW50aWZpZWQgYnkgZ2xvYmFsbHkgdW5pcXVlIGV2ZW50IG5hbWVzLlxuICpcbiAqIE5hdGl2ZU1vZHVsZXMgdGhhdCBlbWl0IGV2ZW50cyBzaG91bGQgaW5zdGVhZCBzdWJjbGFzcyBgTmF0aXZlRXZlbnRFbWl0dGVyYC5cbiAqL1xuY2xhc3MgUkNURGV2aWNlRXZlbnRFbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPFJDVERldmljZUV2ZW50RGVmaW5pdGlvbnM+IHtcbiAgLy8gQWRkIHN5c3RyYWNlIHRvIFJDVERldmljZUV2ZW50RW1pdHRlci5lbWl0IG1ldGhvZCBmb3IgZGVidWdnaW5nXG4gIGVtaXQ8VEV2ZW50OiAkS2V5czxSQ1REZXZpY2VFdmVudERlZmluaXRpb25zPj4oXG4gICAgZXZlbnRUeXBlOiBURXZlbnQsXG4gICAgLi4uYXJnczogUkNURGV2aWNlRXZlbnREZWZpbml0aW9uc1tURXZlbnRdXG4gICk6IHZvaWQge1xuICAgIGJlZ2luRXZlbnQoKCkgPT4gYFJDVERldmljZUV2ZW50RW1pdHRlci5lbWl0IyR7ZXZlbnRUeXBlfWApO1xuICAgIHN1cGVyLmVtaXQoZXZlbnRUeXBlLCAuLi5hcmdzKTtcbiAgICBlbmRFdmVudCgpO1xuICB9XG59XG5jb25zdCBpbnN0YW5jZSA9IG5ldyBSQ1REZXZpY2VFdmVudEVtaXR0ZXIoKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fcmN0RGV2aWNlRXZlbnRFbWl0dGVyJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIHZhbHVlOiBpbnN0YW5jZSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCAoaW5zdGFuY2U6IElFdmVudEVtaXR0ZXI8UkNURGV2aWNlRXZlbnREZWZpbml0aW9ucz4pO1xuIiwidmFyIHN1cGVyUHJvcEJhc2UgPSByZXF1aXJlKFwiLi9zdXBlclByb3BCYXNlLmpzXCIpO1xuZnVuY3Rpb24gX2dldCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0ID0gUmVmbGVjdC5nZXQuYmluZCgpLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgdmFyIGJhc2UgPSBzdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogcmVjZWl2ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB9XG4gIHJldHVybiBfZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zdXBlclByb3BCYXNlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRTdWJzY3JpcHRpb24ge1xuICByZW1vdmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXZlbnRFbWl0dGVyPFRFdmVudFRvQXJnc01hcDogey4uLn0+IHtcbiAgYWRkTGlzdGVuZXI8VEV2ZW50OiAkS2V5czxURXZlbnRUb0FyZ3NNYXA+PihcbiAgICBldmVudFR5cGU6IFRFdmVudCxcbiAgICBsaXN0ZW5lcjogKC4uLmFyZ3M6IFRFdmVudFRvQXJnc01hcFtURXZlbnRdKSA9PiBtaXhlZCxcbiAgICBjb250ZXh0PzogbWl4ZWQsXG4gICk6IEV2ZW50U3Vic2NyaXB0aW9uO1xuXG4gIGVtaXQ8VEV2ZW50OiAkS2V5czxURXZlbnRUb0FyZ3NNYXA+PihcbiAgICBldmVudFR5cGU6IFRFdmVudCxcbiAgICAuLi5hcmdzOiBURXZlbnRUb0FyZ3NNYXBbVEV2ZW50XVxuICApOiB2b2lkO1xuXG4gIHJlbW92ZUFsbExpc3RlbmVyczxURXZlbnQ6ICRLZXlzPFRFdmVudFRvQXJnc01hcD4+KGV2ZW50VHlwZT86ID9URXZlbnQpOiB2b2lkO1xuXG4gIGxpc3RlbmVyQ291bnQ8VEV2ZW50OiAkS2V5czxURXZlbnRUb0FyZ3NNYXA+PihldmVudFR5cGU6IFRFdmVudCk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbjxUQXJncz4ge1xuICArY29udGV4dDogbWl4ZWQ7XG4gICtsaXN0ZW5lcjogKC4uLmFyZ3M6IFRBcmdzKSA9PiBtaXhlZDtcbiAgK3JlbW92ZTogKCkgPT4gdm9pZDtcbn1cblxuLy8gJEZsb3dGaXhNZVtkZXByZWNhdGVkLXR5cGVdXG50eXBlIFJlZ2lzdHJ5PFRFdmVudFRvQXJnc01hcDogey4uLn0+ID0gJE9iak1hcDxcbiAgVEV2ZW50VG9BcmdzTWFwLFxuICA8VEFyZ3M+KFRBcmdzKSA9PiBTZXQ8UmVnaXN0cmF0aW9uPFRBcmdzPj4sXG4+O1xuXG4vKipcbiAqIEV2ZW50RW1pdHRlciBtYW5hZ2VzIGxpc3RlbmVycyBhbmQgcHVibGlzaGVzIGV2ZW50cyB0byB0aGVtLlxuICpcbiAqIEV2ZW50RW1pdHRlciBhY2NlcHRzIGEgc2luZ2xlIHR5cGUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgdmFsaWQgZXZlbnRzXG4gKiBhbmQgYXNzb2NpYXRlZCBsaXN0ZW5lciBhcmd1bWVudChzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICogICAgIHN1Y2Nlc3M6IFtudW1iZXIsIHN0cmluZ10sXG4gKiAgICAgZXJyb3I6IFtFcnJvcl0sXG4gKiAgIH0+KCk7XG4gKlxuICogICBlbWl0dGVyLm9uKCdzdWNjZXNzJywgKHN0YXR1c0NvZGUsIHJlc3BvbnNlVGV4dCkgPT4gey4uLn0pO1xuICogICBlbWl0dGVyLmVtaXQoJ3N1Y2Nlc3MnLCAyMDAsICcuLi4nKTtcbiAqXG4gKiAgIGVtaXR0ZXIub24oJ2Vycm9yJywgZXJyb3IgPT4gey4uLn0pO1xuICogICBlbWl0dGVyLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdSZXNvdXJjZSBub3QgZm91bmQnKSk7XG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudEVtaXR0ZXI8VEV2ZW50VG9BcmdzTWFwOiB7Li4ufT5cbiAgaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyPFRFdmVudFRvQXJnc01hcD5cbntcbiAgI3JlZ2lzdHJ5OiBSZWdpc3RyeTxURXZlbnRUb0FyZ3NNYXA+ID0ge307XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxpc3RlbmVyIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHN1cHBsaWVkIGV2ZW50IGlzIGVtaXR0ZWQuXG4gICAqIFJldHVybnMgYSBzdWJzY3JpcHRpb24gdGhhdCBoYXMgYSBgcmVtb3ZlYCBtZXRob2QgdG8gdW5kbyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBhZGRMaXN0ZW5lcjxURXZlbnQ6ICRLZXlzPFRFdmVudFRvQXJnc01hcD4+KFxuICAgIGV2ZW50VHlwZTogVEV2ZW50LFxuICAgIGxpc3RlbmVyOiAoLi4uYXJnczogVEV2ZW50VG9BcmdzTWFwW1RFdmVudF0pID0+IG1peGVkLFxuICAgIGNvbnRleHQ6IG1peGVkLFxuICApOiBFdmVudFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0V2ZW50RW1pdHRlci5hZGRMaXN0ZW5lciguLi4pOiAybmQgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uLicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCByZWdpc3RyYXRpb25zID0gYWxsb2NhdGU8XG4gICAgICBURXZlbnRUb0FyZ3NNYXAsXG4gICAgICBURXZlbnQsXG4gICAgICBURXZlbnRUb0FyZ3NNYXBbVEV2ZW50XSxcbiAgICA+KHRoaXMuI3JlZ2lzdHJ5LCBldmVudFR5cGUpO1xuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbjogUmVnaXN0cmF0aW9uPFRFdmVudFRvQXJnc01hcFtURXZlbnRdPiA9IHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHJlbW92ZSgpOiB2b2lkIHtcbiAgICAgICAgcmVnaXN0cmF0aW9ucy5kZWxldGUocmVnaXN0cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICByZWdpc3RyYXRpb25zLmFkZChyZWdpc3RyYXRpb24pO1xuICAgIHJldHVybiByZWdpc3RyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHN1cHBsaWVkIGV2ZW50LiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBzdXBwbGllZCB0byBgZW1pdGAgd2lsbCBiZVxuICAgKiBwYXNzZWQgdGhyb3VnaCB0byBlYWNoIG9mIHRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAgICpcbiAgICogSWYgYSBsaXN0ZW5lciBtb2RpZmllcyB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBzYW1lIGV2ZW50LCB0aG9zZVxuICAgKiBjaGFuZ2VzIHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGUgY3VycmVudCBpbnZvY2F0aW9uIG9mIGBlbWl0YC5cbiAgICovXG4gIGVtaXQ8VEV2ZW50OiAkS2V5czxURXZlbnRUb0FyZ3NNYXA+PihcbiAgICBldmVudFR5cGU6IFRFdmVudCxcbiAgICAuLi5hcmdzOiBURXZlbnRUb0FyZ3NNYXBbVEV2ZW50XVxuICApOiB2b2lkIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25zOiA/U2V0PFJlZ2lzdHJhdGlvbjxURXZlbnRUb0FyZ3NNYXBbVEV2ZW50XT4+ID1cbiAgICAgIHRoaXMuI3JlZ2lzdHJ5W2V2ZW50VHlwZV07XG4gICAgaWYgKHJlZ2lzdHJhdGlvbnMgIT0gbnVsbCkge1xuICAgICAgLy8gQ29weSBgcmVnaXN0cmF0aW9uc2AgdG8gdGFrZSBhIHNuYXBzaG90IHdoZW4gd2UgaW52b2tlIGBlbWl0YCwgaW4gY2FzZVxuICAgICAgLy8gcmVnaXN0cmF0aW9ucyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCB3aGVuIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbiAgICAgIGZvciAoY29uc3QgcmVnaXN0cmF0aW9uIG9mIEFycmF5LmZyb20ocmVnaXN0cmF0aW9ucykpIHtcbiAgICAgICAgcmVnaXN0cmF0aW9uLmxpc3RlbmVyLmFwcGx5KHJlZ2lzdHJhdGlvbi5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gICAqL1xuICByZW1vdmVBbGxMaXN0ZW5lcnM8VEV2ZW50OiAkS2V5czxURXZlbnRUb0FyZ3NNYXA+PihcbiAgICBldmVudFR5cGU/OiA/VEV2ZW50LFxuICApOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUeXBlID09IG51bGwpIHtcbiAgICAgIHRoaXMuI3JlZ2lzdHJ5ID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLiNyZWdpc3RyeVtldmVudFR5cGVdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgZm9yIHRoZSBzdXBwbGllZCBldmVudC5cbiAgICovXG4gIGxpc3RlbmVyQ291bnQ8VEV2ZW50OiAkS2V5czxURXZlbnRUb0FyZ3NNYXA+PihldmVudFR5cGU6IFRFdmVudCk6IG51bWJlciB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uczogP1NldDxSZWdpc3RyYXRpb248bWl4ZWQ+PiA9IHRoaXMuI3JlZ2lzdHJ5W2V2ZW50VHlwZV07XG4gICAgcmV0dXJuIHJlZ2lzdHJhdGlvbnMgPT0gbnVsbCA/IDAgOiByZWdpc3RyYXRpb25zLnNpemU7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2NhdGU8XG4gIFRFdmVudFRvQXJnc01hcDogey4uLn0sXG4gIFRFdmVudDogJEtleXM8VEV2ZW50VG9BcmdzTWFwPixcbiAgVEV2ZW50QXJnczogVEV2ZW50VG9BcmdzTWFwW1RFdmVudF0sXG4+KFxuICByZWdpc3RyeTogUmVnaXN0cnk8VEV2ZW50VG9BcmdzTWFwPixcbiAgZXZlbnRUeXBlOiBURXZlbnQsXG4pOiBTZXQ8UmVnaXN0cmF0aW9uPFRFdmVudEFyZ3M+PiB7XG4gIGxldCByZWdpc3RyYXRpb25zOiA/U2V0PFJlZ2lzdHJhdGlvbjxURXZlbnRBcmdzPj4gPSByZWdpc3RyeVtldmVudFR5cGVdO1xuICBpZiAocmVnaXN0cmF0aW9ucyA9PSBudWxsKSB7XG4gICAgcmVnaXN0cmF0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICByZWdpc3RyeVtldmVudFR5cGVdID0gcmVnaXN0cmF0aW9ucztcbiAgfVxuICByZXR1cm4gcmVnaXN0cmF0aW9ucztcbn1cbiIsImZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEJhc2UocmVjZWl2ZXIsIHByaXZhdGVLZXkpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjZWl2ZXIsIHByaXZhdGVLZXkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gIH1cbiAgcmV0dXJuIHJlY2VpdmVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NQcml2YXRlRmllbGRCYXNlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGlkID0gMDtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEtleShuYW1lKSB7XG4gIHJldHVybiBcIl9fcHJpdmF0ZV9cIiArIGlkKysgKyBcIl9cIiArIG5hbWU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc1ByaXZhdGVGaWVsZEtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBsYXRmb3JtIGFzIFBsYXRmb3JtVHlwZSxcbiAgUGxhdGZvcm1TZWxlY3RTcGVjLFxufSBmcm9tICcuL1BsYXRmb3JtLmZsb3cnO1xuXG5pbXBvcnQgTmF0aXZlUGxhdGZvcm1Db25zdGFudHNJT1MgZnJvbSAnLi9OYXRpdmVQbGF0Zm9ybUNvbnN0YW50c0lPUyc7XG5cbmNvbnN0IFBsYXRmb3JtOiBQbGF0Zm9ybVR5cGUgPSB7XG4gIF9fY29uc3RhbnRzOiBudWxsLFxuICBPUzogJ2lvcycsXG4gIC8vICRGbG93Rml4TWVbdW5zYWZlLWdldHRlcnMtc2V0dGVyc11cbiAgZ2V0IFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV1cbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMub3NWZXJzaW9uO1xuICB9LFxuICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1nZXR0ZXJzLXNldHRlcnNdXG4gIGdldCBjb25zdGFudHMoKToge3xcbiAgICBmb3JjZVRvdWNoQXZhaWxhYmxlOiBib29sZWFuLFxuICAgIGludGVyZmFjZUlkaW9tOiBzdHJpbmcsXG4gICAgaXNUZXN0aW5nOiBib29sZWFuLFxuICAgIGlzRGlzYWJsZUFuaW1hdGlvbnM/OiBib29sZWFuLFxuICAgIG9zVmVyc2lvbjogc3RyaW5nLFxuICAgIHJlYWN0TmF0aXZlVmVyc2lvbjoge3xcbiAgICAgIG1ham9yOiBudW1iZXIsXG4gICAgICBtaW5vcjogbnVtYmVyLFxuICAgICAgcGF0Y2g6IG51bWJlcixcbiAgICAgIHByZXJlbGVhc2U6ID9udW1iZXIsXG4gICAgfH0sXG4gICAgc3lzdGVtTmFtZTogc3RyaW5nLFxuICAgIGlzTWFjQ2F0YWx5c3Q/OiBib29sZWFuLFxuICB8fSB7XG4gICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdXG4gICAgaWYgKHRoaXMuX19jb25zdGFudHMgPT0gbnVsbCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdXG4gICAgICB0aGlzLl9fY29uc3RhbnRzID0gTmF0aXZlUGxhdGZvcm1Db25zdGFudHNJT1MuZ2V0Q29uc3RhbnRzKCk7XG4gICAgfVxuICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXVxuICAgIHJldHVybiB0aGlzLl9fY29uc3RhbnRzO1xuICB9LFxuICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1nZXR0ZXJzLXNldHRlcnNdXG4gIGdldCBpc1BhZCgpOiBib29sZWFuIHtcbiAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV1cbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMuaW50ZXJmYWNlSWRpb20gPT09ICdwYWQnO1xuICB9LFxuICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1nZXR0ZXJzLXNldHRlcnNdXG4gIGdldCBpc1RWKCk6IGJvb2xlYW4ge1xuICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXVxuICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5pbnRlcmZhY2VJZGlvbSA9PT0gJ3R2JztcbiAgfSxcbiAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtZ2V0dGVycy1zZXR0ZXJzXVxuICBnZXQgaXNWaXNpb24oKTogYm9vbGVhbiB7XG4gICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdXG4gICAgcmV0dXJuIHRoaXMuY29uc3RhbnRzLmludGVyZmFjZUlkaW9tID09PSAndmlzaW9uJztcbiAgfSxcbiAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtZ2V0dGVycy1zZXR0ZXJzXVxuICBnZXQgaXNUZXN0aW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV1cbiAgICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5pc1Rlc3Rpbmc7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtZ2V0dGVycy1zZXR0ZXJzXVxuICBnZXQgaXNEaXNhYmxlQW5pbWF0aW9ucygpOiBib29sZWFuIHtcbiAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV1cbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMuaXNEaXNhYmxlQW5pbWF0aW9ucyA/PyB0aGlzLmlzVGVzdGluZztcbiAgfSxcbiAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtZ2V0dGVycy1zZXR0ZXJzXVxuICBnZXQgaXNNYWNDYXRhbHlzdCgpOiBib29sZWFuIHtcbiAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV1cbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMuaXNNYWNDYXRhbHlzdCA/PyBmYWxzZTtcbiAgfSxcbiAgc2VsZWN0OiA8VD4oc3BlYzogUGxhdGZvcm1TZWxlY3RTcGVjPFQ+KTogVCA9PlxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAnaW9zJyBpbiBzcGVjID8gc3BlYy5pb3MgOiAnbmF0aXZlJyBpbiBzcGVjID8gc3BlYy5uYXRpdmUgOiBzcGVjLmRlZmF1bHQsXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBsYXRmb3JtO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlUGxhdGZvcm1Db25zdGFudHNJT1MnO1xuaW1wb3J0IE5hdGl2ZVBsYXRmb3JtQ29uc3RhbnRzSU9TIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlUGxhdGZvcm1Db25zdGFudHNJT1MnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlUGxhdGZvcm1Db25zdGFudHNJT1M7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIFBsYXRmb3JtQ29uc3RhbnRzSU9TID0ge3xcbiAgaXNUZXN0aW5nOiBib29sZWFuLFxuICBpc0Rpc2FibGVBbmltYXRpb25zPzogYm9vbGVhbixcbiAgcmVhY3ROYXRpdmVWZXJzaW9uOiB7fFxuICAgIG1ham9yOiBudW1iZXIsXG4gICAgbWlub3I6IG51bWJlcixcbiAgICBwYXRjaDogbnVtYmVyLFxuICAgIHByZXJlbGVhc2U6ID9udW1iZXIsXG4gIHx9LFxuICBmb3JjZVRvdWNoQXZhaWxhYmxlOiBib29sZWFuLFxuICBvc1ZlcnNpb246IHN0cmluZyxcbiAgc3lzdGVtTmFtZTogc3RyaW5nLFxuICBpbnRlcmZhY2VJZGlvbTogc3RyaW5nLFxuICBpc01hY0NhdGFseXN0PzogYm9vbGVhbixcbnx9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IFBsYXRmb3JtQ29uc3RhbnRzSU9TO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXRFbmZvcmNpbmc8U3BlYz4oXG4gICdQbGF0Zm9ybUNvbnN0YW50cycsXG4pOiBTcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4vUkNURXhwb3J0JztcblxuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG5jb25zdCBOYXRpdmVNb2R1bGVzID0gcmVxdWlyZSgnLi4vQmF0Y2hlZEJyaWRnZS9OYXRpdmVNb2R1bGVzJyk7XG5cbmNvbnN0IHR1cmJvTW9kdWxlUHJveHkgPSBnbG9iYWwuX190dXJib01vZHVsZVByb3h5O1xuXG5jb25zdCBtb2R1bGVMb2FkSGlzdG9yeSA9IHtcbiAgTmF0aXZlTW9kdWxlczogKFtdOiBBcnJheTxzdHJpbmc+KSxcbiAgVHVyYm9Nb2R1bGVzOiAoW106IEFycmF5PHN0cmluZz4pLFxuICBOb3RGb3VuZDogKFtdOiBBcnJheTxzdHJpbmc+KSxcbn07XG5cbmZ1bmN0aW9uIGlzQnJpZGdlbGVzcygpIHtcbiAgcmV0dXJuIGdsb2JhbC5STiRCcmlkZ2VsZXNzID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1R1cmJvTW9kdWxlSW50ZXJvcEVuYWJsZWQoKSB7XG4gIHJldHVybiBnbG9iYWwuUk4kVHVyYm9JbnRlcm9wID09PSB0cnVlO1xufVxuXG4vLyBUT0RPKDE1NDMwODU4NSk6IFJlbW92ZSBcIm1vZHVsZSBub3QgZm91bmRcIiBkZWJ1ZyBpbmZvIGxvZ2dpbmdcbmZ1bmN0aW9uIHNob3VsZFJlcG9ydERlYnVnSW5mbygpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFRPRE8oMTQ4OTQzOTcwKTogQ29uc2lkZXIgcmV2ZXJzaW5nIHRoZSBsb29rdXAgaGVyZTpcbi8vIExvb2t1cCBvbiBfX3R1cmJvTW9kdWxlUHJveHksIHRoZW4gbG9va3VwIG9uIG5hdGl2ZU1vZHVsZVByb3h5XG5mdW5jdGlvbiByZXF1aXJlTW9kdWxlPFQ6IFR1cmJvTW9kdWxlPihuYW1lOiBzdHJpbmcpOiA/VCB7XG4gIGlmICghaXNCcmlkZ2VsZXNzKCkgfHwgaXNUdXJib01vZHVsZUludGVyb3BFbmFibGVkKCkpIHtcbiAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGxheWVyIGR1cmluZyBtaWdyYXRpb24uXG4gICAgY29uc3QgbGVnYWN5TW9kdWxlID0gTmF0aXZlTW9kdWxlc1tuYW1lXTtcbiAgICBpZiAobGVnYWN5TW9kdWxlICE9IG51bGwpIHtcbiAgICAgIGlmIChzaG91bGRSZXBvcnREZWJ1Z0luZm8oKSkge1xuICAgICAgICBtb2R1bGVMb2FkSGlzdG9yeS5OYXRpdmVNb2R1bGVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKChsZWdhY3lNb2R1bGU6ICRGbG93Rml4TWUpOiBUKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHVyYm9Nb2R1bGVQcm94eSAhPSBudWxsKSB7XG4gICAgY29uc3QgbW9kdWxlOiA/VCA9IHR1cmJvTW9kdWxlUHJveHkobmFtZSk7XG4gICAgaWYgKG1vZHVsZSAhPSBudWxsKSB7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0RGVidWdJbmZvKCkpIHtcbiAgICAgICAgbW9kdWxlTG9hZEhpc3RvcnkuVHVyYm9Nb2R1bGVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaG91bGRSZXBvcnREZWJ1Z0luZm8oKSAmJiAhbW9kdWxlTG9hZEhpc3RvcnkuTm90Rm91bmQuaW5jbHVkZXMobmFtZSkpIHtcbiAgICBtb2R1bGVMb2FkSGlzdG9yeS5Ob3RGb3VuZC5wdXNoKG5hbWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0PFQ6IFR1cmJvTW9kdWxlPihuYW1lOiBzdHJpbmcpOiA/VCB7XG4gIHJldHVybiByZXF1aXJlTW9kdWxlPFQ+KG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5mb3JjaW5nPFQ6IFR1cmJvTW9kdWxlPihuYW1lOiBzdHJpbmcpOiBUIHtcbiAgY29uc3QgbW9kdWxlID0gcmVxdWlyZU1vZHVsZTxUPihuYW1lKTtcbiAgbGV0IG1lc3NhZ2UgPVxuICAgIGBUdXJib01vZHVsZVJlZ2lzdHJ5LmdldEVuZm9yY2luZyguLi4pOiAnJHtuYW1lfScgY291bGQgbm90IGJlIGZvdW5kLiBgICtcbiAgICAnVmVyaWZ5IHRoYXQgYSBtb2R1bGUgYnkgdGhpcyBuYW1lIGlzIHJlZ2lzdGVyZWQgaW4gdGhlIG5hdGl2ZSBiaW5hcnkuJztcblxuICBpZiAoc2hvdWxkUmVwb3J0RGVidWdJbmZvKCkpIHtcbiAgICBtZXNzYWdlICs9ICdCcmlkZ2VsZXNzIG1vZGU6ICcgKyAoaXNCcmlkZ2VsZXNzKCkgPyAndHJ1ZScgOiAnZmFsc2UnKSArICcuICc7XG4gICAgbWVzc2FnZSArPVxuICAgICAgJ1R1cmJvTW9kdWxlIGludGVyb3A6ICcgK1xuICAgICAgKGlzVHVyYm9Nb2R1bGVJbnRlcm9wRW5hYmxlZCgpID8gJ3RydWUnIDogJ2ZhbHNlJykgK1xuICAgICAgJy4gJztcbiAgICBtZXNzYWdlICs9ICdNb2R1bGVzIGxvYWRlZDogJyArIEpTT04uc3RyaW5naWZ5KG1vZHVsZUxvYWRIaXN0b3J5KTtcbiAgfVxuXG4gIGludmFyaWFudChtb2R1bGUgIT0gbnVsbCwgbWVzc2FnZSk7XG4gIHJldHVybiBtb2R1bGU7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7RXh0ZW5kZWRFcnJvcn0gZnJvbSAnLi4vQ29yZS9FeHRlbmRlZEVycm9yJztcblxuY29uc3QgQmF0Y2hlZEJyaWRnZSA9IHJlcXVpcmUoJy4vQmF0Y2hlZEJyaWRnZScpO1xuY29uc3QgaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbmV4cG9ydCB0eXBlIE1vZHVsZUNvbmZpZyA9IFtcbiAgc3RyaW5nIC8qIG5hbWUgKi8sXG4gID97Li4ufSAvKiBjb25zdGFudHMgKi8sXG4gID8kUmVhZE9ubHlBcnJheTxzdHJpbmc+IC8qIGZ1bmN0aW9ucyAqLyxcbiAgPyRSZWFkT25seUFycmF5PG51bWJlcj4gLyogcHJvbWlzZSBtZXRob2QgSURzICovLFxuICA/JFJlYWRPbmx5QXJyYXk8bnVtYmVyPiAvKiBzeW5jIG1ldGhvZCBJRHMgKi8sXG5dO1xuXG5leHBvcnQgdHlwZSBNZXRob2RUeXBlID0gJ2FzeW5jJyB8ICdwcm9taXNlJyB8ICdzeW5jJztcblxuZnVuY3Rpb24gZ2VuTW9kdWxlKFxuICBjb25maWc6ID9Nb2R1bGVDb25maWcsXG4gIG1vZHVsZUlEOiBudW1iZXIsXG4pOiA/e1xuICBuYW1lOiBzdHJpbmcsXG4gIG1vZHVsZT86IHsuLi59LFxuICAuLi5cbn0ge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgW21vZHVsZU5hbWUsIGNvbnN0YW50cywgbWV0aG9kcywgcHJvbWlzZU1ldGhvZHMsIHN5bmNNZXRob2RzXSA9IGNvbmZpZztcbiAgaW52YXJpYW50KFxuICAgICFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoJ1JDVCcpICYmICFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoJ1JLJyksXG4gICAgXCJNb2R1bGUgbmFtZSBwcmVmaXhlcyBzaG91bGQndmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgbmF0aXZlIHNpZGUgXCIgK1xuICAgICAgXCJidXQgd2Fzbid0IGZvciBcIiArXG4gICAgICBtb2R1bGVOYW1lLFxuICApO1xuXG4gIGlmICghY29uc3RhbnRzICYmICFtZXRob2RzKSB7XG4gICAgLy8gTW9kdWxlIGNvbnRlbnRzIHdpbGwgYmUgZmlsbGVkIGluIGxhemlseSBsYXRlclxuICAgIHJldHVybiB7bmFtZTogbW9kdWxlTmFtZX07XG4gIH1cblxuICBjb25zdCBtb2R1bGU6IHtbc3RyaW5nXTogbWl4ZWR9ID0ge307XG4gIG1ldGhvZHMgJiZcbiAgICBtZXRob2RzLmZvckVhY2goKG1ldGhvZE5hbWUsIG1ldGhvZElEKSA9PiB7XG4gICAgICBjb25zdCBpc1Byb21pc2UgPVxuICAgICAgICAocHJvbWlzZU1ldGhvZHMgJiYgYXJyYXlDb250YWlucyhwcm9taXNlTWV0aG9kcywgbWV0aG9kSUQpKSB8fCBmYWxzZTtcbiAgICAgIGNvbnN0IGlzU3luYyA9XG4gICAgICAgIChzeW5jTWV0aG9kcyAmJiBhcnJheUNvbnRhaW5zKHN5bmNNZXRob2RzLCBtZXRob2RJRCkpIHx8IGZhbHNlO1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICAhaXNQcm9taXNlIHx8ICFpc1N5bmMsXG4gICAgICAgICdDYW5ub3QgaGF2ZSBhIG1ldGhvZCB0aGF0IGlzIGJvdGggYXN5bmMgYW5kIGEgc3luYyBob29rJyxcbiAgICAgICk7XG4gICAgICBjb25zdCBtZXRob2RUeXBlID0gaXNQcm9taXNlID8gJ3Byb21pc2UnIDogaXNTeW5jID8gJ3N5bmMnIDogJ2FzeW5jJztcbiAgICAgIG1vZHVsZVttZXRob2ROYW1lXSA9IGdlbk1ldGhvZChtb2R1bGVJRCwgbWV0aG9kSUQsIG1ldGhvZFR5cGUpO1xuICAgIH0pO1xuXG4gIE9iamVjdC5hc3NpZ24obW9kdWxlLCBjb25zdGFudHMpO1xuXG4gIGlmIChtb2R1bGUuZ2V0Q29uc3RhbnRzID09IG51bGwpIHtcbiAgICBtb2R1bGUuZ2V0Q29uc3RhbnRzID0gKCkgPT4gY29uc3RhbnRzIHx8IE9iamVjdC5mcmVlemUoe30pO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBVbmFibGUgdG8gZGVmaW5lIG1ldGhvZCAnZ2V0Q29uc3RhbnRzKCknIG9uIE5hdGl2ZU1vZHVsZSAnJHttb2R1bGVOYW1lfScuIE5hdGl2ZU1vZHVsZSAnJHttb2R1bGVOYW1lfScgYWxyZWFkeSBoYXMgYSBjb25zdGFudCBvciBtZXRob2QgY2FsbGVkICdnZXRDb25zdGFudHMnLiBQbGVhc2UgcmVtb3ZlIGl0LmAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgQmF0Y2hlZEJyaWRnZS5jcmVhdGVEZWJ1Z0xvb2t1cChtb2R1bGVJRCwgbW9kdWxlTmFtZSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4ge25hbWU6IG1vZHVsZU5hbWUsIG1vZHVsZX07XG59XG5cbi8vIGV4cG9ydCB0aGlzIG1ldGhvZCBhcyBhIGdsb2JhbCBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIG5hdGl2ZVxuZ2xvYmFsLl9fZmJHZW5OYXRpdmVNb2R1bGUgPSBnZW5Nb2R1bGU7XG5cbmZ1bmN0aW9uIGxvYWRNb2R1bGUobmFtZTogc3RyaW5nLCBtb2R1bGVJRDogbnVtYmVyKTogP3suLi59IHtcbiAgaW52YXJpYW50KFxuICAgIGdsb2JhbC5uYXRpdmVSZXF1aXJlTW9kdWxlQ29uZmlnLFxuICAgIFwiQ2FuJ3QgbGF6aWx5IGNyZWF0ZSBtb2R1bGUgd2l0aG91dCBuYXRpdmVSZXF1aXJlTW9kdWxlQ29uZmlnXCIsXG4gICk7XG4gIGNvbnN0IGNvbmZpZyA9IGdsb2JhbC5uYXRpdmVSZXF1aXJlTW9kdWxlQ29uZmlnKG5hbWUpO1xuICBjb25zdCBpbmZvID0gZ2VuTW9kdWxlKGNvbmZpZywgbW9kdWxlSUQpO1xuICByZXR1cm4gaW5mbyAmJiBpbmZvLm1vZHVsZTtcbn1cblxuZnVuY3Rpb24gZ2VuTWV0aG9kKG1vZHVsZUlEOiBudW1iZXIsIG1ldGhvZElEOiBudW1iZXIsIHR5cGU6IE1ldGhvZFR5cGUpIHtcbiAgbGV0IGZuID0gbnVsbDtcbiAgaWYgKHR5cGUgPT09ICdwcm9taXNlJykge1xuICAgIGZuID0gZnVuY3Rpb24gcHJvbWlzZU1ldGhvZFdyYXBwZXIoLi4uYXJnczogQXJyYXk8bWl4ZWQ+KSB7XG4gICAgICAvLyBJbiBjYXNlIHdlIHJlamVjdCwgY2FwdHVyZSBhIHVzZWZ1bCBzdGFjayB0cmFjZSBoZXJlLlxuICAgICAgLyogJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yXG4gICAgICAgKiB0aGlzIHBhcmFtZXRlcnMgKi9cbiAgICAgIGNvbnN0IGVucXVldWVpbmdGcmFtZUVycm9yOiBFeHRlbmRlZEVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBCYXRjaGVkQnJpZGdlLmVucXVldWVOYXRpdmVDYWxsKFxuICAgICAgICAgIG1vZHVsZUlELFxuICAgICAgICAgIG1ldGhvZElELFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgZGF0YSA9PiByZXNvbHZlKGRhdGEpLFxuICAgICAgICAgIGVycm9yRGF0YSA9PlxuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICB1cGRhdGVFcnJvcldpdGhFcnJvckRhdGEoXG4gICAgICAgICAgICAgICAgKGVycm9yRGF0YTogJEZsb3dGaXhNZSksXG4gICAgICAgICAgICAgICAgZW5xdWV1ZWluZ0ZyYW1lRXJyb3IsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmbiA9IGZ1bmN0aW9uIG5vblByb21pc2VNZXRob2RXcmFwcGVyKC4uLmFyZ3M6IEFycmF5PG1peGVkPikge1xuICAgICAgY29uc3QgbGFzdEFyZyA9IGFyZ3MubGVuZ3RoID4gMCA/IGFyZ3NbYXJncy5sZW5ndGggLSAxXSA6IG51bGw7XG4gICAgICBjb25zdCBzZWNvbmRMYXN0QXJnID0gYXJncy5sZW5ndGggPiAxID8gYXJnc1thcmdzLmxlbmd0aCAtIDJdIDogbnVsbDtcbiAgICAgIGNvbnN0IGhhc1N1Y2Nlc3NDYWxsYmFjayA9IHR5cGVvZiBsYXN0QXJnID09PSAnZnVuY3Rpb24nO1xuICAgICAgY29uc3QgaGFzRXJyb3JDYWxsYmFjayA9IHR5cGVvZiBzZWNvbmRMYXN0QXJnID09PSAnZnVuY3Rpb24nO1xuICAgICAgaGFzRXJyb3JDYWxsYmFjayAmJlxuICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgaGFzU3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICdDYW5ub3QgaGF2ZSBhIG5vbi1mdW5jdGlvbiBhcmcgYWZ0ZXIgYSBmdW5jdGlvbiBhcmcuJyxcbiAgICAgICAgKTtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICBjb25zdCBvblN1Y2Nlc3M6ID8obWl4ZWQpID0+IHZvaWQgPSBoYXNTdWNjZXNzQ2FsbGJhY2sgPyBsYXN0QXJnIDogbnVsbDtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICBjb25zdCBvbkZhaWw6ID8obWl4ZWQpID0+IHZvaWQgPSBoYXNFcnJvckNhbGxiYWNrID8gc2Vjb25kTGFzdEFyZyA6IG51bGw7XG4gICAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hZGRpdGlvbl1cbiAgICAgIGNvbnN0IGNhbGxiYWNrQ291bnQgPSBoYXNTdWNjZXNzQ2FsbGJhY2sgKyBoYXNFcnJvckNhbGxiYWNrO1xuICAgICAgY29uc3QgbmV3QXJncyA9IGFyZ3Muc2xpY2UoMCwgYXJncy5sZW5ndGggLSBjYWxsYmFja0NvdW50KTtcbiAgICAgIGlmICh0eXBlID09PSAnc3luYycpIHtcbiAgICAgICAgcmV0dXJuIEJhdGNoZWRCcmlkZ2UuY2FsbE5hdGl2ZVN5bmNIb29rKFxuICAgICAgICAgIG1vZHVsZUlELFxuICAgICAgICAgIG1ldGhvZElELFxuICAgICAgICAgIG5ld0FyZ3MsXG4gICAgICAgICAgb25GYWlsLFxuICAgICAgICAgIG9uU3VjY2VzcyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEJhdGNoZWRCcmlkZ2UuZW5xdWV1ZU5hdGl2ZUNhbGwoXG4gICAgICAgICAgbW9kdWxlSUQsXG4gICAgICAgICAgbWV0aG9kSUQsXG4gICAgICAgICAgbmV3QXJncyxcbiAgICAgICAgICBvbkZhaWwsXG4gICAgICAgICAgb25TdWNjZXNzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGZuLnR5cGUgPSB0eXBlO1xuICByZXR1cm4gZm47XG59XG5cbmZ1bmN0aW9uIGFycmF5Q29udGFpbnM8VD4oYXJyYXk6ICRSZWFkT25seUFycmF5PFQ+LCB2YWx1ZTogVCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFcnJvcldpdGhFcnJvckRhdGEoXG4gIGVycm9yRGF0YToge21lc3NhZ2U6IHN0cmluZywgLi4ufSxcbiAgZXJyb3I6IEV4dGVuZGVkRXJyb3IsXG4pOiBFeHRlbmRlZEVycm9yIHtcbiAgLyogJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXNcbiAgICogcGFyYW1ldGVycyAqL1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgZXJyb3JEYXRhIHx8IHt9KTtcbn1cblxubGV0IE5hdGl2ZU1vZHVsZXM6IHtbbW9kdWxlTmFtZTogc3RyaW5nXTogJEZsb3dGaXhNZSwgLi4ufSA9IHt9O1xuaWYgKGdsb2JhbC5uYXRpdmVNb2R1bGVQcm94eSkge1xuICBOYXRpdmVNb2R1bGVzID0gZ2xvYmFsLm5hdGl2ZU1vZHVsZVByb3h5O1xufSBlbHNlIHtcbiAgY29uc3QgYnJpZGdlQ29uZmlnID0gZ2xvYmFsLl9fZmJCYXRjaGVkQnJpZGdlQ29uZmlnO1xuICBpbnZhcmlhbnQoXG4gICAgYnJpZGdlQ29uZmlnLFxuICAgICdfX2ZiQmF0Y2hlZEJyaWRnZUNvbmZpZyBpcyBub3Qgc2V0LCBjYW5ub3QgaW52b2tlIG5hdGl2ZSBtb2R1bGVzJyxcbiAgKTtcblxuICBjb25zdCBkZWZpbmVMYXp5T2JqZWN0UHJvcGVydHkgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5Jyk7XG4gIChicmlkZ2VDb25maWcucmVtb3RlTW9kdWxlQ29uZmlnIHx8IFtdKS5mb3JFYWNoKFxuICAgIChjb25maWc6IE1vZHVsZUNvbmZpZywgbW9kdWxlSUQ6IG51bWJlcikgPT4ge1xuICAgICAgLy8gSW5pdGlhbGx5IHRoaXMgY29uZmlnIHdpbGwgb25seSBjb250YWluIHRoZSBtb2R1bGUgbmFtZSB3aGVuIHJ1bm5pbmcgaW4gSlNDLiBUaGUgYWN0dWFsXG4gICAgICAvLyBjb25maWd1cmF0aW9uIG9mIHRoZSBtb2R1bGUgd2lsbCBiZSBsYXppbHkgbG9hZGVkLlxuICAgICAgY29uc3QgaW5mbyA9IGdlbk1vZHVsZShjb25maWcsIG1vZHVsZUlEKTtcbiAgICAgIGlmICghaW5mbykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmZvLm1vZHVsZSkge1xuICAgICAgICBOYXRpdmVNb2R1bGVzW2luZm8ubmFtZV0gPSBpbmZvLm1vZHVsZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbW9kdWxlIGNvbmZpZywgZGVmaW5lIGEgbGF6eSBnZXR0ZXJcbiAgICAgIGVsc2Uge1xuICAgICAgICBkZWZpbmVMYXp5T2JqZWN0UHJvcGVydHkoTmF0aXZlTW9kdWxlcywgaW5mby5uYW1lLCB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBsb2FkTW9kdWxlKGluZm8ubmFtZSwgbW9kdWxlSUQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE5hdGl2ZU1vZHVsZXM7XG4iLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gbnVsbCA9PSBhcnIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IF9pKSB7XG4gICAgdmFyIF9zLFxuICAgICAgX2UsXG4gICAgICBfeCxcbiAgICAgIF9yLFxuICAgICAgX2FyciA9IFtdLFxuICAgICAgX24gPSAhMCxcbiAgICAgIF9kID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChfeCA9IChfaSA9IF9pLmNhbGwoYXJyKSkubmV4dCwgMCA9PT0gaSkge1xuICAgICAgICBpZiAoT2JqZWN0KF9pKSAhPT0gX2kpIHJldHVybjtcbiAgICAgICAgX24gPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShfbiA9IChfcyA9IF94LmNhbGwoX2kpKS5kb25lKSAmJiAoX2Fyci5wdXNoKF9zLnZhbHVlKSwgX2Fyci5sZW5ndGggIT09IGkpOyBfbiA9ICEwKSB7XG4gICAgICAgIDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gITAsIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIG51bGwgIT0gX2lbXCJyZXR1cm5cIl0gJiYgKF9yID0gX2lbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KF9yKSAhPT0gX3IpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2FycjtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZWZpbmVzIGEgbGF6aWx5IGV2YWx1YXRlZCBwcm9wZXJ0eSBvbiB0aGUgc3VwcGxpZWQgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUxhenlPYmplY3RQcm9wZXJ0eTxUPihcbiAgb2JqZWN0OiBpbnRlcmZhY2Uge30sXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRvcjoge1xuICAgIGdldDogKCkgPT4gVCxcbiAgICBlbnVtZXJhYmxlPzogYm9vbGVhbixcbiAgICB3cml0YWJsZT86IGJvb2xlYW4sXG4gICAgLi4uXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3Qge2dldH0gPSBkZXNjcmlwdG9yO1xuICBjb25zdCBlbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSBmYWxzZTtcbiAgY29uc3Qgd3JpdGFibGUgPSBkZXNjcmlwdG9yLndyaXRhYmxlICE9PSBmYWxzZTtcblxuICBsZXQgdmFsdWU7XG4gIGxldCB2YWx1ZVNldCA9IGZhbHNlO1xuICBmdW5jdGlvbiBnZXRWYWx1ZSgpOiBUIHtcbiAgICAvLyBXT1JLQVJPVU5EOiBBIHdlaXJkIGluZmluaXRlIGxvb3Agb2NjdXJzIHdoZXJlIGNhbGxpbmcgYGdldFZhbHVlYCBjYWxsc1xuICAgIC8vIGBzZXRWYWx1ZWAgd2hpY2ggY2FsbHMgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgd2hpY2ggc29tZWhvdyB0cmlnZ2Vyc1xuICAgIC8vIGBnZXRWYWx1ZWAgYWdhaW4uIEFkZGluZyBgdmFsdWVTZXRgIGJyZWFrcyB0aGlzIGxvb3AuXG4gICAgaWYgKCF2YWx1ZVNldCkge1xuICAgICAgLy8gQ2FsbGluZyBgZ2V0KClgIGhlcmUgY2FuIHRyaWdnZXIgYW4gaW5maW5pdGUgbG9vcCBpZiBpdCBmYWlscyB0b1xuICAgICAgLy8gcmVtb3ZlIHRoZSBnZXR0ZXIgb24gdGhlIHByb3BlcnR5LCB3aGljaCBjYW4gaGFwcGVuIHdoZW4gZXhlY3V0aW5nXG4gICAgICAvLyBKUyBpbiBhIFY4IGNvbnRleHQuICBgdmFsdWVTZXQgPSB0cnVlYCB3aWxsIGJyZWFrIHRoaXMgbG9vcCwgYW5kXG4gICAgICAvLyBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gdW5kZWZpbmVkLCB1bnRpbCB0aGUgY29kZSBpbiBgZ2V0KClgXG4gICAgICAvLyBmaW5pc2hlcywgYXQgd2hpY2ggcG9pbnQgdGhlIHByb3BlcnR5IGlzIHNldCB0byB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICAgIHZhbHVlU2V0ID0gdHJ1ZTtcbiAgICAgIHNldFZhbHVlKGdldCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlOiBUKTogdm9pZCB7XG4gICAgdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB2YWx1ZVNldCA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZSxcbiAgICAgIHdyaXRhYmxlLFxuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuICAgIGdldDogZ2V0VmFsdWUsXG4gICAgc2V0OiBzZXRWYWx1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZSxcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCBOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlciBmcm9tICcuL05hdGl2ZUFjY2Vzc2liaWxpdHlNYW5hZ2VyJztcblxuLyoqXG4gKiBUaGlzIGlzIGEgZnVuY3Rpb24gZXhwb3NlZCB0byB0aGUgUmVhY3QgUmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGVcbiAqIHByZS1GYWJyaWMgcmVuZGVyZXIgdG8gZW1pdCBhY2Nlc3NpYmlsaXR5IGV2ZW50cyB0byBwcmUtRmFicmljIG5vZGVzLlxuICovXG5mdW5jdGlvbiBsZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50KFxuICByZWFjdFRhZzogbnVtYmVyLFxuICBldmVudFR5cGU6IHN0cmluZyxcbik6IHZvaWQge1xuICBpZiAoZXZlbnRUeXBlID09PSAnZm9jdXMnICYmIE5hdGl2ZUFjY2Vzc2liaWxpdHlNYW5hZ2VyKSB7XG4gICAgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXIuc2V0QWNjZXNzaWJpbGl0eUZvY3VzKHJlYWN0VGFnKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcic7XG5pbXBvcnQgTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXIgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcic7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDdXJyZW50Qm9sZFRleHRTdGF0ZTogKFxuICAgIG9uU3VjY2VzczogKGlzQm9sZFRleHRFbmFibGVkOiBib29sZWFuKSA9PiB2b2lkLFxuICAgIG9uRXJyb3I6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG4gICtnZXRDdXJyZW50R3JheXNjYWxlU3RhdGU6IChcbiAgICBvblN1Y2Nlc3M6IChpc0dyYXlzY2FsZUVuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQsXG4gICAgb25FcnJvcjogKGVycm9yOiBPYmplY3QpID0+IHZvaWQsXG4gICkgPT4gdm9pZDtcbiAgK2dldEN1cnJlbnRJbnZlcnRDb2xvcnNTdGF0ZTogKFxuICAgIG9uU3VjY2VzczogKGlzSW52ZXJ0Q29sb3JzRW5hYmxlZDogYm9vbGVhbikgPT4gdm9pZCxcbiAgICBvbkVycm9yOiAoZXJyb3I6IE9iamVjdCkgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArZ2V0Q3VycmVudFJlZHVjZU1vdGlvblN0YXRlOiAoXG4gICAgb25TdWNjZXNzOiAoaXNSZWR1Y2VNb3Rpb25FbmFibGVkOiBib29sZWFuKSA9PiB2b2lkLFxuICAgIG9uRXJyb3I6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG4gICtnZXRDdXJyZW50UHJlZmVyc0Nyb3NzRmFkZVRyYW5zaXRpb25zU3RhdGU/OiAoXG4gICAgb25TdWNjZXNzOiAocHJlZmVyc0Nyb3NzRmFkZVRyYW5zaXRpb25zOiBib29sZWFuKSA9PiB2b2lkLFxuICAgIG9uRXJyb3I6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG4gICtnZXRDdXJyZW50UmVkdWNlVHJhbnNwYXJlbmN5U3RhdGU6IChcbiAgICBvblN1Y2Nlc3M6IChpc1JlZHVjZVRyYW5zcGFyZW5jeUVuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQsXG4gICAgb25FcnJvcjogKGVycm9yOiBPYmplY3QpID0+IHZvaWQsXG4gICkgPT4gdm9pZDtcbiAgK2dldEN1cnJlbnRWb2ljZU92ZXJTdGF0ZTogKFxuICAgIG9uU3VjY2VzczogKGlzU2NyZWVuUmVhZGVyRW5hYmxlZDogYm9vbGVhbikgPT4gdm9pZCxcbiAgICBvbkVycm9yOiAoZXJyb3I6IE9iamVjdCkgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArc2V0QWNjZXNzaWJpbGl0eUNvbnRlbnRTaXplTXVsdGlwbGllcnM6IChKU011bHRpcGxpZXJzOiB7fFxuICAgICtleHRyYVNtYWxsPzogP251bWJlcixcbiAgICArc21hbGw/OiA/bnVtYmVyLFxuICAgICttZWRpdW0/OiA/bnVtYmVyLFxuICAgICtsYXJnZT86ID9udW1iZXIsXG4gICAgK2V4dHJhTGFyZ2U/OiA/bnVtYmVyLFxuICAgICtleHRyYUV4dHJhTGFyZ2U/OiA/bnVtYmVyLFxuICAgICtleHRyYUV4dHJhRXh0cmFMYXJnZT86ID9udW1iZXIsXG4gICAgK2FjY2Vzc2liaWxpdHlNZWRpdW0/OiA/bnVtYmVyLFxuICAgICthY2Nlc3NpYmlsaXR5TGFyZ2U/OiA/bnVtYmVyLFxuICAgICthY2Nlc3NpYmlsaXR5RXh0cmFMYXJnZT86ID9udW1iZXIsXG4gICAgK2FjY2Vzc2liaWxpdHlFeHRyYUV4dHJhTGFyZ2U/OiA/bnVtYmVyLFxuICAgICthY2Nlc3NpYmlsaXR5RXh0cmFFeHRyYUV4dHJhTGFyZ2U/OiA/bnVtYmVyLFxuICB8fSkgPT4gdm9pZDtcbiAgK3NldEFjY2Vzc2liaWxpdHlGb2N1czogKHJlYWN0VGFnOiBudW1iZXIpID0+IHZvaWQ7XG4gICthbm5vdW5jZUZvckFjY2Vzc2liaWxpdHk6IChhbm5vdW5jZW1lbnQ6IHN0cmluZykgPT4gdm9pZDtcbiAgK2Fubm91bmNlRm9yQWNjZXNzaWJpbGl0eVdpdGhPcHRpb25zPzogKFxuICAgIGFubm91bmNlbWVudDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtxdWV1ZT86IGJvb2xlYW59LFxuICApID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPignQWNjZXNzaWJpbGl0eU1hbmFnZXInKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQWNjZXNzaWJpbGl0eUluZm8nO1xuaW1wb3J0IE5hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQWNjZXNzaWJpbGl0eUluZm8nO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlQWNjZXNzaWJpbGl0eUluZm87XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK2lzUmVkdWNlTW90aW9uRW5hYmxlZDogKFxuICAgIG9uU3VjY2VzczogKGlzUmVkdWNlTW90aW9uRW5hYmxlZDogYm9vbGVhbikgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICAraXNUb3VjaEV4cGxvcmF0aW9uRW5hYmxlZDogKFxuICAgIG9uU3VjY2VzczogKGlzU2NyZWVuUmVhZGVyRW5hYmxlZDogYm9vbGVhbikgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICAraXNBY2Nlc3NpYmlsaXR5U2VydmljZUVuYWJsZWQ/OiA/KFxuICAgIG9uU3VjY2VzczogKGlzQWNjZXNzaWJpbGl0eVNlcnZpY2VFbmFibGVkOiBib29sZWFuKSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG4gICtzZXRBY2Nlc3NpYmlsaXR5Rm9jdXM6IChyZWFjdFRhZzogbnVtYmVyKSA9PiB2b2lkO1xuICArYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5OiAoYW5ub3VuY2VtZW50OiBzdHJpbmcpID0+IHZvaWQ7XG4gICtnZXRSZWNvbW1lbmRlZFRpbWVvdXRNaWxsaXM/OiAoXG4gICAgbVNlYzogbnVtYmVyLFxuICAgIG9uU3VjY2VzczogKHJlY29tbWVuZGVkVGltZW91dE1pbGxpczogbnVtYmVyKSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPignQWNjZXNzaWJpbGl0eUluZm8nKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgZXhpc3RzIHRvIGFsbG93IGFwcHMgdG8gc2VsZWN0IHRoZWlyIHJlbmRlcmVyIGltcGxlbWVudGF0aW9uXG4gKiAoZS5nLjogRmFicmljLW9ubHksIFBhcGVyLW9ubHkpIHdpdGhvdXQgaGF2aW5nIHRvIHB1bGwgYWxsIHRoZSByZW5kZXJlclxuICogaW1wbGVtZW50YXRpb25zIGludG8gdGhlaXIgYXBwIGJ1bmRsZSwgd2hpY2ggYWZmZWN0cyBhcHAgc2l6ZS5cbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgc2V0dXAgd2lsbCBiZTpcbiAqICAgLT4gUmVuZGVyZXJQcm94eVxuICogICAgIC0+IFJlbmRlcmVySW1wbGVtZW50YXRpb24gKHdoaWNoIHVzZXMgRmFicmljIG9yIFBhcGVyIGRlcGVuZGluZyBvbiBhIGZsYWcgYXQgcnVudGltZSlcbiAqXG4gKiBCdXQgdGhpcyB3aWxsIGFsbG93IGEgc2V0dXAgbGlrZSB0aGlzIHdpdGhvdXQgZHVwbGljYXRpbmcgbG9naWM6XG4gKiAgIC0+IFJlbmRlcmVyUHJveHkgKGZvcmspXG4gKiAgICAgLT4gUmVuZGVyZXJJbXBsZW1lbnRhdGlvbiAod2hpY2ggdXNlcyBGYWJyaWMgb3IgUGFwZXIgZGVwZW5kaW5nIG9uIGEgZmxhZyBhdCBydW50aW1lKVxuICogICAgIG9yIC0+IE90aGVySW1wbGVtZW50YXRpb24gKHdoaWNoIHVzZXMgRmFicmljIG9ubHkpXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9SZW5kZXJlckltcGxlbWVudGF0aW9uJztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSBSZWFjdEZhYnJpY0hvc3RDb21wb25lbnQgZnJvbSAnLi9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlL1JlYWN0RmFicmljSG9zdENvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7RWxlbWVudCwgRWxlbWVudFJlZiwgRWxlbWVudFR5cGV9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHt0eXBlIFJvb3RUYWd9IGZyb20gJy4vUm9vdFRhZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFbGVtZW50KHtcbiAgZWxlbWVudCxcbiAgcm9vdFRhZyxcbiAgdXNlRmFicmljLFxuICB1c2VDb25jdXJyZW50Um9vdCxcbn06IHtcbiAgZWxlbWVudDogRWxlbWVudDxFbGVtZW50VHlwZT4sXG4gIHJvb3RUYWc6IG51bWJlcixcbiAgdXNlRmFicmljOiBib29sZWFuLFxuICB1c2VDb25jdXJyZW50Um9vdDogYm9vbGVhbixcbn0pOiB2b2lkIHtcbiAgaWYgKHVzZUZhYnJpYykge1xuICAgIHJlcXVpcmUoJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0RmFicmljJykucmVuZGVyKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHJvb3RUYWcsXG4gICAgICBudWxsLFxuICAgICAgdXNlQ29uY3VycmVudFJvb3QsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXF1aXJlKCcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZScpLnJlbmRlcihlbGVtZW50LCByb290VGFnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZV9ERVBSRUNBVEVEPFRFbGVtZW50VHlwZTogRWxlbWVudFR5cGU+KFxuICBjb21wb25lbnRPckhhbmRsZTogPyhFbGVtZW50UmVmPFRFbGVtZW50VHlwZT4gfCBudW1iZXIpLFxuKTogP0VsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+IHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlJykuZmluZEhvc3RJbnN0YW5jZV9ERVBSRUNBVEVEKFxuICAgIGNvbXBvbmVudE9ySGFuZGxlLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGVIYW5kbGU8VEVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZT4oXG4gIGNvbXBvbmVudE9ySGFuZGxlOiA/KEVsZW1lbnRSZWY8VEVsZW1lbnRUeXBlPiB8IG51bWJlciksXG4pOiA/bnVtYmVyIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlJykuZmluZE5vZGVIYW5kbGUoXG4gICAgY29tcG9uZW50T3JIYW5kbGUsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaENvbW1hbmQoXG4gIGhhbmRsZTogRWxlbWVudFJlZjxIb3N0Q29tcG9uZW50PG1peGVkPj4sXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogQXJyYXk8bWl4ZWQ+LFxuKTogdm9pZCB7XG4gIGlmIChnbG9iYWwuUk4kQnJpZGdlbGVzcyA9PT0gdHJ1ZSkge1xuICAgIC8vIE5vdGU6IHRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGluIHRoZSBsZWdhY3kgYW5kIG5ldyByZW5kZXJlci5cbiAgICAvLyBIb3dldmVyLCBldmFsdWF0aW5nIHRoZSBvbGQgcmVuZGVyZXIgY29tZXMgd2l0aCBzb21lIHNpZGUgZWZmZWN0cy5cbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3RGYWJyaWMnKS5kaXNwYXRjaENvbW1hbmQoXG4gICAgICBoYW5kbGUsXG4gICAgICBjb21tYW5kLFxuICAgICAgYXJncyxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZScpLmRpc3BhdGNoQ29tbWFuZChcbiAgICAgIGhhbmRsZSxcbiAgICAgIGNvbW1hbmQsXG4gICAgICBhcmdzLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoXG4gIGhhbmRsZTogRWxlbWVudFJlZjxIb3N0Q29tcG9uZW50PG1peGVkPj4sXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuKTogdm9pZCB7XG4gIHJldHVybiByZXF1aXJlKCcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZScpLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoXG4gICAgaGFuZGxlLFxuICAgIGV2ZW50VHlwZSxcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IEFwcFJlZ2lzdHJ5IHRvIHVubW91bnQgYSByb290IHdoZW4gdXNpbmcgdGhlIG9sZFxuICogUmVhY3QgTmF0aXZlIHJlbmRlcmVyIChQYXBlcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlQW5kUmVtb3ZlQ29udGFpbmVyKHJvb3RUYWc6IFJvb3RUYWcpIHtcbiAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS10eXBlXSByb290VGFnIGlzIGFuIG9wYXF1ZSB0eXBlIHNvIHdlIGNhbid0IHJlYWxseSBjYXN0IGl0IGFzIGlzLlxuICBjb25zdCByb290VGFnQXNOdW1iZXI6IG51bWJlciA9IHJvb3RUYWc7XG4gIHJlcXVpcmUoJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlJykudW5tb3VudENvbXBvbmVudEF0Tm9kZUFuZFJlbW92ZUNvbnRhaW5lcihcbiAgICByb290VGFnQXNOdW1iZXIsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczxUPihcbiAgZm46IFQgPT4gdm9pZCxcbiAgYm9va2tlZXBpbmc6IFQsXG4pOiB2b2lkIHtcbiAgLy8gVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHdoZW4gYmF0Y2hpbmcgdXBkYXRlcyBmb3IgYSBGYWJyaWMgcm9vdC5cbiAgcmV0dXJuIHJlcXVpcmUoJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlJykudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoXG4gICAgZm4sXG4gICAgYm9va2tlZXBpbmcsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2ZpbGluZ1JlbmRlcmVyKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihfX0RFVl9fKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hpbGRQdWJsaWNJbnN0YW5jZShcbiAgcGFyZW50SW5zdGFuY2U6IFJlYWN0RmFicmljSG9zdENvbXBvbmVudCB8IEhvc3RDb21wb25lbnQ8bWl4ZWQ+LFxuICBjaGlsZEluc3RhbmNlOiBSZWFjdEZhYnJpY0hvc3RDb21wb25lbnQgfCBIb3N0Q29tcG9uZW50PG1peGVkPixcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVxdWlyZSgnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmUnKS5pc0NoaWxkUHVibGljSW5zdGFuY2UoXG4gICAgcGFyZW50SW5zdGFuY2UsXG4gICAgY2hpbGRJbnN0YW5jZSxcbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbm9mb3JtYXRcbiAqIEBmbG93XG4gKiBAbm9saW50XG4gKiBAZ2VuZXJhdGVkIFNpZ25lZFNvdXJjZTw8YzFjYzE5N2MxMTBlM2E0OWE1ZThmNmJkNWQzMmIyM2Y+PlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtCYXRjaGVkQnJpZGdlfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0UHJpdmF0ZS9SZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UnO1xuXG5pbXBvcnQgdHlwZSB7UmVhY3RGYWJyaWNUeXBlfSBmcm9tICcuL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5sZXQgUmVhY3RGYWJyaWM7XG5cbmlmIChfX0RFVl9fKSB7XG4gIFJlYWN0RmFicmljID0gcmVxdWlyZSgnLi4vaW1wbGVtZW50YXRpb25zL1JlYWN0RmFicmljLWRldicpO1xufSBlbHNlIHtcbiAgUmVhY3RGYWJyaWMgPSByZXF1aXJlKCcuLi9pbXBsZW1lbnRhdGlvbnMvUmVhY3RGYWJyaWMtcHJvZCcpO1xufVxuXG5nbG9iYWwuUk4kc3RvcFN1cmZhY2UgPSBSZWFjdEZhYnJpYy5zdG9wU3VyZmFjZTtcblxuaWYgKGdsb2JhbC5STiRCcmlkZ2VsZXNzICE9PSB0cnVlKSB7XG4gIEJhdGNoZWRCcmlkZ2UucmVnaXN0ZXJDYWxsYWJsZU1vZHVsZSgnUmVhY3RGYWJyaWMnLCBSZWFjdEZhYnJpYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKFJlYWN0RmFicmljOiBSZWFjdEZhYnJpY1R5cGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBub2Zsb3dcbiAqIEBub2xpbnRcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEZhYnJpYy1kZXZcbiAqIEBwcmV2ZW50TXVuZ2VcbiAqIEBnZW5lcmF0ZWQgU2lnbmVkU291cmNlPDxmNTNjZGJiMGI5Yzk5OGZhODUwOTMzNDkzYjY4M2MxZj4+XG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmlmIChfX0RFVl9fKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgPT09XG4gICAgICAgIFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChuZXcgRXJyb3IoKSk7XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbiAgICByZXF1aXJlKFwicmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdFByaXZhdGUvUmVhY3ROYXRpdmVQcml2YXRlSW5pdGlhbGl6ZUNvcmVcIik7XG4gICAgdmFyIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZSA9IHJlcXVpcmUoXCJyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0UHJpdmF0ZS9SZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2VcIik7XG4gICAgdmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoXCJzY2hlZHVsZXJcIik7XG5cbiAgICB2YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbiAgICAvLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuICAgIC8vXG4gICAgLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbiAgICAvLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbiAgICBmdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksXG4gICAgICAgICAgICAgIF9rZXkgPSAxO1xuICAgICAgICAgICAgX2tleSA8IF9sZW47XG4gICAgICAgICAgICBfa2V5KytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByaW50V2FybmluZyhcIndhcm5cIiwgZm9ybWF0LCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgICBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLFxuICAgICAgICAgICAgICBfa2V5MiA9IDE7XG4gICAgICAgICAgICBfa2V5MiA8IF9sZW4yO1xuICAgICAgICAgICAgX2tleTIrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXCJlcnJvclwiLCBmb3JtYXQsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICAgIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAgICAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gICAgICB7XG4gICAgICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID1cbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgICAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgICAgICBpZiAoc3RhY2sgIT09IFwiXCIpIHtcbiAgICAgICAgICBmb3JtYXQgKz0gXCIlc1wiO1xuICAgICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICAgICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuICAgICAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoXCJXYXJuaW5nOiBcIiArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZha2VOb2RlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIGZha2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInJlYWN0XCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwobmFtZSwgZnVuYywgY29udGV4dCkge1xuICAgICAge1xuICAgICAgICAvLyBJbiBERVYgbW9kZSwgd2UgdXNlIGEgc3BlY2lhbCB2ZXJzaW9uXG4gICAgICAgIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAgICAgICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAgICAgICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAgICAgICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAgICAgICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gICAgICAgIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gICAgICAgIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgICAgICAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgICAgICAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gICAgICAgIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gICAgICAgIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgICAgICAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gICAgICAgIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gICAgICAgIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgICAgICAgLy8gZmFrZU5vZGUgc2lnbmlmaWVzIHdlIGFyZSBpbiBhbiBlbnZpcm9ubWVudCB3aXRoIGEgZG9jdW1lbnQgYW5kIHdpbmRvdyBvYmplY3RcbiAgICAgICAgaWYgKGZha2VOb2RlKSB7XG4gICAgICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgICAgICAgdmFyIGRpZENhbGwgPSBmYWxzZTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAgICAgLy8gY2FsbGluZyB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBlcnJvcnMsIGBkaWRFcnJvcmAgd2lsbCBuZXZlciBiZVxuICAgICAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgICAgIC8vIHRoZSBlcnJvciBldmVudCBhdCBhbGwuXG5cbiAgICAgICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAgICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LlxuXG4gICAgICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgICAgICB2YXIgd2luZG93RXZlbnREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgIHdpbmRvdyxcbiAgICAgICAgICAgIFwiZXZlbnRcIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB2YXIgcmVzdG9yZUFmdGVyRGlzcGF0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgICAgIC8vIG5lc3RlZCBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBjYWxscyBkbyBub3QgY2xhc2guIE90aGVyd2lzZSwgYVxuICAgICAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFdlIGNoZWNrIGZvciB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykgdG8gcHJldmVudCB0aGVcbiAgICAgICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgICAgICAvLyBzdXBwb3J0IHdpbmRvdy5ldmVudC5cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eShcImV2ZW50XCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgd2luZG93LmV2ZW50ID0gd2luZG93RXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTsgLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgICAgICAvLyBkaXNwYXRjaCBvdXIgZmFrZSBldmVudCB1c2luZyBgZGlzcGF0Y2hFdmVudGAuIEluc2lkZSB0aGUgaGFuZGxlciwgd2VcbiAgICAgICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuICAgICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cblxuICAgICAgICAgIHZhciBfZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgICAgICAgdmFyIGNhbGxDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRpZENhbGwgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gRmxvdyBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIGFyZ3VtZW50cyBzcGxpY2luZy5cblxuICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBfZnVuY0FyZ3MpO1xuICAgICAgICAgICAgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICB9OyAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgICAgICAvLyB0aGF0IHdhcyB0aHJvd24uIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGVycm9yIGhhbmRsZXIgd2lsbCBmaXJlIG1vcmVcbiAgICAgICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgICAgICAvLyB0aG9zZSBjYXNlcy4gRXZlbiBpZiBvdXIgZXJyb3IgZXZlbnQgaGFuZGxlciBmaXJlcyBtb3JlIHRoYW4gb25jZSwgdGhlXG4gICAgICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgICAgIC8vIHBvc3NpYmxlIGZvciBhbnl0aGluZyBlbHNlIHRvIGhhdmUgaGFwcGVuZWQgaW4gYmV0d2VlbiBvdXIgY2FsbGJhY2tcbiAgICAgICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgICAgICAvLyBpZ25vcmUgaXQgYmVjYXVzZSBgZGlkRXJyb3JgIHdpbGwgYmUgZmFsc2UsIGFzIGRlc2NyaWJlZCBhYm92ZS5cblxuICAgICAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgICAgICB2YXIgZGlkU2V0RXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICB2YXIgaXNDcm9zc09yaWdpbkVycm9yID0gZmFsc2U7XG5cbiAgICAgICAgICB2YXIgaGFuZGxlV2luZG93RXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGVycm9yID0gZXZlbnQuZXJyb3I7XG4gICAgICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICAgICAgaXNDcm9zc09yaWdpbkVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtZW1iZXIgdGhpcyB0byBsYXRlciBkZWNpZGUgd2hldGhlciB0byBsb2cgaXQgb3Igbm90LlxuICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIpIHtcbiAgICAgICAgICAgICAgICAgIC8vIElnbm9yZS5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9OyAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cbiAgICAgICAgICB2YXIgZXZ0VHlwZSA9IFwicmVhY3QtXCIgKyAobmFtZSA/IG5hbWUgOiBcImludm9rZWd1YXJkZWRjYWxsYmFja1wiKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaCBvdXIgZmFrZSBldmVudC4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZnVuY3Rpb25cbiAgICAgICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgZmFrZU5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xuXG4gICAgICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgXCJldmVudFwiLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaWRDYWxsICYmIGRpZEVycm9yKSB7XG4gICAgICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkFuIGVycm9yIHdhcyB0aHJvd24gaW5zaWRlIG9uZSBvZiB5b3VyIGNvbXBvbmVudHMsIGJ1dCBSZWFjdCBcIiArXG4gICAgICAgICAgICAgICAgICBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgK1xuICAgICAgICAgICAgICAgICAgJ2ZsYWtpbmVzcy4gUmVhY3QgZG9lcyBpdHMgYmVzdCB0byBwcmVzZXJ2ZSB0aGUgXCJQYXVzZSBvbiAnICtcbiAgICAgICAgICAgICAgICAgICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgK1xuICAgICAgICAgICAgICAgICAgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsIFwiICtcbiAgICAgICAgICAgICAgICAgIFwib3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyBcIiArXG4gICAgICAgICAgICAgICAgICBcImFjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkEgY3Jvc3Mtb3JpZ2luIGVycm9yIHdhcyB0aHJvd24uIFJlYWN0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICAgICAgfSAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgICAgICBpZiAoZGlkQ2FsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjczNFxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjU4NVxuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTsgLy8gd2UgZmFsbCB0aHJvdWdoIGFuZCBjYWxsIHRoZSBwcm9kIHZlcnNpb24gaW5zdGVhZFxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXZSBvbmx5IGdldCBoZXJlIGlmIHdlIGFyZSBpbiBhbiBlbnZpcm9ubWVudCB0aGF0IGVpdGhlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBicm93c2VyXG4gICAgICAgIC8vIHZhcmlhbnQgb3Igd2UgaGFkIHRyb3VibGUgZ2V0dGluZyB0aGUgYnJvd3NlciB0byBlbWl0IHRoZSBlcnJvci5cbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG4gICAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBGbG93IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgYXJndW1lbnRzIHNwbGljaW5nLlxuICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG4gICAgdmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHZhciByZXRocm93RXJyb3IgPSBudWxsO1xuICAgIHZhciByZXBvcnRlciA9IHtcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAgICAgKiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IHRocm93cywgb3RoZXJ3aXNlIG51bGwuXG4gICAgICpcbiAgICAgKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gICAgICogdXNlIGEgdHJ5LWNhdGNoIGRpcmVjdGx5IGlzIHNvIHRoYXQgd2UgY2FuIHN3YXAgb3V0IGEgZGlmZmVyZW50XG4gICAgICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICAgICAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwuYXBwbHkocmVwb3J0ZXIsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMgaW52b2tlR3VhcmRlZENhbGxiYWNrLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IsIGl0IHN0b3Jlc1xuICAgICAqIGl0IGluIGEgZ2xvYmFsIHNvIGl0IGNhbiBiZSByZXRocm93biBieSBgcmV0aHJvd0NhdWdodEVycm9yYCBsYXRlci5cbiAgICAgKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gICAgICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihcbiAgICAgIG5hbWUsXG4gICAgICBmdW5jLFxuICAgICAgY29udGV4dCxcbiAgICAgIGEsXG4gICAgICBiLFxuICAgICAgYyxcbiAgICAgIGQsXG4gICAgICBlLFxuICAgICAgZlxuICAgICkge1xuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgICAgICBoYXNSZXRocm93RXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHJldGhyb3dFcnJvciA9IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIER1cmluZyBleGVjdXRpb24gb2YgZ3VhcmRlZCBmdW5jdGlvbnMgd2Ugd2lsbCBjYXB0dXJlIHRoZSBmaXJzdCBlcnJvciB3aGljaFxuICAgICAqIHdlIHdpbGwgcmV0aHJvdyB0byBiZSBoYW5kbGVkIGJ5IHRoZSB0b3AgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJldGhyb3dDYXVnaHRFcnJvcigpIHtcbiAgICAgIGlmIChoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgICAgICBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbiAgICAgICAgcmV0aHJvd0Vycm9yID0gbnVsbDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICAgICAgcmV0dXJuIGhhc0Vycm9yO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgICAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIFwiICtcbiAgICAgICAgICAgIFwiaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgICAgIHJldHVybiBpc0FycmF5SW1wbChhKTtcbiAgICB9XG5cbiAgICB2YXIgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxID0gbnVsbDtcbiAgICB2YXIgZ2V0SW5zdGFuY2VGcm9tTm9kZSQxID0gbnVsbDtcbiAgICB2YXIgZ2V0Tm9kZUZyb21JbnN0YW5jZSQxID0gbnVsbDtcbiAgICBmdW5jdGlvbiBzZXRDb21wb25lbnRUcmVlKFxuICAgICAgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZUltcGwsXG4gICAgICBnZXRJbnN0YW5jZUZyb21Ob2RlSW1wbCxcbiAgICAgIGdldE5vZGVGcm9tSW5zdGFuY2VJbXBsXG4gICAgKSB7XG4gICAgICBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlJDEgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlSW1wbDtcbiAgICAgIGdldEluc3RhbmNlRnJvbU5vZGUkMSA9IGdldEluc3RhbmNlRnJvbU5vZGVJbXBsO1xuICAgICAgZ2V0Tm9kZUZyb21JbnN0YW5jZSQxID0gZ2V0Tm9kZUZyb21JbnN0YW5jZUltcGw7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCFnZXROb2RlRnJvbUluc3RhbmNlJDEgfHwgIWdldEluc3RhbmNlRnJvbU5vZGUkMSkge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJFdmVudFBsdWdpblV0aWxzLnNldENvbXBvbmVudFRyZWUoLi4uKTogSW5qZWN0ZWQgXCIgK1xuICAgICAgICAgICAgICBcIm1vZHVsZSBpcyBtaXNzaW5nIGdldE5vZGVGcm9tSW5zdGFuY2Ugb3IgZ2V0SW5zdGFuY2VGcm9tTm9kZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCkge1xuICAgICAge1xuICAgICAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgICAgIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgICAgICAgdmFyIGxpc3RlbmVyc0lzQXJyID0gaXNBcnJheShkaXNwYXRjaExpc3RlbmVycyk7XG4gICAgICAgIHZhciBsaXN0ZW5lcnNMZW4gPSBsaXN0ZW5lcnNJc0FyclxuICAgICAgICAgID8gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAgICAgOiBkaXNwYXRjaExpc3RlbmVyc1xuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcbiAgICAgICAgdmFyIGluc3RhbmNlc0lzQXJyID0gaXNBcnJheShkaXNwYXRjaEluc3RhbmNlcyk7XG4gICAgICAgIHZhciBpbnN0YW5jZXNMZW4gPSBpbnN0YW5jZXNJc0FyclxuICAgICAgICAgID8gZGlzcGF0Y2hJbnN0YW5jZXMubGVuZ3RoXG4gICAgICAgICAgOiBkaXNwYXRjaEluc3RhbmNlc1xuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5zdGFuY2VzSXNBcnIgIT09IGxpc3RlbmVyc0lzQXJyIHx8XG4gICAgICAgICAgaW5zdGFuY2VzTGVuICE9PSBsaXN0ZW5lcnNMZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgZXJyb3IoXCJFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoIHRoZSBldmVudCB0byB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQgU3ludGhldGljRXZlbnQgdG8gaGFuZGxlXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0geyp9IGluc3QgSW50ZXJuYWwgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBpbnN0KSB7XG4gICAgICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgXCJ1bmtub3duLWV2ZW50XCI7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSQxKGluc3QpO1xuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBjb2xsZWN0ZWQgZGlzcGF0Y2hlcy5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCkge1xuICAgICAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgICAgdmFyIGRpc3BhdGNoSW5zdGFuY2VzID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSAvLyBMaXN0ZW5lcnMgYW5kIEluc3RhbmNlcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cblxuICAgICAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sIGRpc3BhdGNoSW5zdGFuY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkaXNwYXRjaExpc3RlbmVycykge1xuICAgICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaEluc3RhbmNlcyk7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBjb2xsZWN0ZWQgZGlzcGF0Y2hlcywgYnV0IHN0b3BzXG4gICAgICogYXQgdGhlIGZpcnN0IGRpc3BhdGNoIGV4ZWN1dGlvbiByZXR1cm5pbmcgdHJ1ZSwgYW5kIHJldHVybnMgdGhhdCBpZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gez9zdHJpbmd9IGlkIG9mIHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gd2hvJ3MgbGlzdGVuZXIgcmV0dXJuc1xuICAgICAqIHRydWUsIG9yIG51bGwgaWYgbm8gbGlzdGVuZXIgcmV0dXJuZWQgdHJ1ZS5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsKGV2ZW50KSB7XG4gICAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgICB2YXIgZGlzcGF0Y2hJbnN0YW5jZXMgPSBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXM7XG5cbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIExpc3RlbmVycyBhbmQgSW5zdGFuY2VzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuXG4gICAgICAgICAgaWYgKGRpc3BhdGNoTGlzdGVuZXJzW2ldKGV2ZW50LCBkaXNwYXRjaEluc3RhbmNlc1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaEluc3RhbmNlc1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHtcbiAgICAgICAgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKGV2ZW50LCBkaXNwYXRjaEluc3RhbmNlcykpIHtcbiAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hJbnN0YW5jZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzZWUgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGxcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUoZXZlbnQpIHtcbiAgICAgIHZhciByZXQgPSBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCk7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGlvbiBvZiBhIFwiZGlyZWN0XCIgZGlzcGF0Y2ggLSB0aGVyZSBtdXN0IGJlIGF0IG1vc3Qgb25lIGRpc3BhdGNoXG4gICAgICogYWNjdW11bGF0ZWQgb24gdGhlIGV2ZW50IG9yIGl0IGlzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIEl0IGRvZXNuJ3QgcmVhbGx5IG1ha2VcbiAgICAgKiBzZW5zZSBmb3IgYW4gZXZlbnQgd2l0aCBtdWx0aXBsZSBkaXNwYXRjaGVzIChidWJibGVkKSB0byBrZWVwIHRyYWNrIG9mIHRoZVxuICAgICAqIHJldHVybiB2YWx1ZXMgYXQgZWFjaCBkaXNwYXRjaCBleGVjdXRpb24sIGJ1dCBpdCBkb2VzIHRlbmQgdG8gbWFrZSBzZW5zZSB3aGVuXG4gICAgICogZGVhbGluZyB3aXRoIFwiZGlyZWN0XCIgZGlzcGF0Y2hlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4geyp9IFRoZSByZXR1cm4gdmFsdWUgb2YgZXhlY3V0aW5nIHRoZSBzaW5nbGUgZGlzcGF0Y2guXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZXZlbnQpIHtcbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lciA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgICAgIHZhciBkaXNwYXRjaEluc3RhbmNlID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuXG4gICAgICBpZiAoaXNBcnJheShkaXNwYXRjaExpc3RlbmVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleGVjdXRlRGlyZWN0RGlzcGF0Y2goLi4uKTogSW52YWxpZCBgZXZlbnRgLlwiKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IGRpc3BhdGNoTGlzdGVuZXJcbiAgICAgICAgPyBnZXROb2RlRnJvbUluc3RhbmNlJDEoZGlzcGF0Y2hJbnN0YW5jZSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgdmFyIHJlcyA9IGRpc3BhdGNoTGlzdGVuZXIgPyBkaXNwYXRjaExpc3RlbmVyKGV2ZW50KSA6IG51bGw7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmZiBudW1iZXIgb2YgZGlzcGF0Y2hlcyBhY2N1bXVsYXRlZCBpcyBncmVhdGVyIHRoYW4gMC5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGhhc0Rpc3BhdGNoZXMoZXZlbnQpIHtcbiAgICAgIHJldHVybiAhIWV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgICB9XG5cbiAgICB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuICAgIHZhciBFVkVOVF9QT09MX1NJWkUgPSAxMDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJmYWNlIEV2ZW50XG4gICAgICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gICAgICovXG5cbiAgICB2YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gICAgICB0eXBlOiBudWxsLFxuICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgLy8gY3VycmVudFRhcmdldCBpcyBzZXQgd2hlbiBkaXNwYXRjaGluZzsgbm8gdXNlIGluIGNvcHlpbmcgaXQgaGVyZVxuICAgICAgY3VycmVudFRhcmdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICBldmVudFBoYXNlOiBudWxsLFxuICAgICAgYnViYmxlczogbnVsbCxcbiAgICAgIGNhbmNlbGFibGU6IG51bGwsXG4gICAgICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gICAgICB9LFxuICAgICAgZGVmYXVsdFByZXZlbnRlZDogbnVsbCxcbiAgICAgIGlzVHJ1c3RlZDogbnVsbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICAgICAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICAgICAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICAgICAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAgICAgKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICAgICAqXG4gICAgICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICAgICAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gICAgICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gdGFyZ2V0SW5zdCBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gbmF0aXZlRXZlbnRUYXJnZXQgVGFyZ2V0IG5vZGUuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBTeW50aGV0aWNFdmVudChcbiAgICAgIGRpc3BhdGNoQ29uZmlnLFxuICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgLy8gdGhlc2UgaGF2ZSBhIGdldHRlci9zZXR0ZXIgZm9yIHdhcm5pbmdzXG4gICAgICAgIGRlbGV0ZSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgICAgICBkZWxldGUgdGhpcy5wcmV2ZW50RGVmYXVsdDtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RvcFByb3BhZ2F0aW9uO1xuICAgICAgICBkZWxldGUgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gZGlzcGF0Y2hDb25maWc7XG4gICAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICAgIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbiAgICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcblxuICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzW3Byb3BOYW1lXTsgLy8gdGhpcyBoYXMgYSBnZXR0ZXIvc2V0dGVyIGZvciB3YXJuaW5nc1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFtZV07XG5cbiAgICAgICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgICAgIHRoaXNbcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocHJvcE5hbWUgPT09IFwidGFyZ2V0XCIpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXNbcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbcHJvcE5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9XG4gICAgICAgIG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbFxuICAgICAgICAgID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgIDogbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuXG4gICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBhc3NpZ24oU3ludGhldGljRXZlbnQucHJvdG90eXBlLCB7XG4gICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gXCJ1bmtub3duXCIpIHtcbiAgICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICAgIH0sXG4gICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgIT09IFwidW5rbm93blwiKSB7XG4gICAgICAgICAgLy8gVGhlIENoYW5nZUV2ZW50UGx1Z2luIHJlZ2lzdGVycyBhIFwicHJvcGVydHljaGFuZ2VcIiBldmVudCBmb3JcbiAgICAgICAgICAvLyBJRS4gVGhpcyBldmVudCBkb2VzIG5vdCBzdXBwb3J0IGJ1YmJsaW5nIG9yIGNhbmNlbGxpbmcsIGFuZFxuICAgICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgICAvLyB0eXBlb2YgY2hlY2sgb2YgXCJ1bmtub3duXCIgY2lyY3VtdmVudHMgdGhpcyBpc3N1ZSAoYW5kIGlzIGFsc29cbiAgICAgICAgICAvLyBJRSBzcGVjaWZpYykuXG4gICAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZ1xuICAgICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICAgKi9cbiAgICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1BlcnNpc3RlbnQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAgICovXG4gICAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciBgZGVzdHJ1Y3RvcmAgb24gZWFjaCBpbnN0YW5jZSBpdCByZWxlYXNlcy5cbiAgICAgICAqL1xuICAgICAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG5cbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihwcm9wTmFtZSwgSW50ZXJmYWNlW3Byb3BOYW1lXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaENvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3RhcmdldEluc3QgPSBudWxsO1xuICAgICAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgXCJuYXRpdmVFdmVudFwiLFxuICAgICAgICAgICAgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihcIm5hdGl2ZUV2ZW50XCIsIG51bGwpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgXCJpc0RlZmF1bHRQcmV2ZW50ZWRcIixcbiAgICAgICAgICAgIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oXG4gICAgICAgICAgICAgIFwiaXNEZWZhdWx0UHJldmVudGVkXCIsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIFwiaXNQcm9wYWdhdGlvblN0b3BwZWRcIixcbiAgICAgICAgICAgIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oXG4gICAgICAgICAgICAgIFwiaXNQcm9wYWdhdGlvblN0b3BwZWRcIixcbiAgICAgICAgICAgICAgZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgXCJwcmV2ZW50RGVmYXVsdFwiLFxuICAgICAgICAgICAgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihcInByZXZlbnREZWZhdWx0XCIsIGZ1bmN0aW9uICgpIHt9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIFwic3RvcFByb3BhZ2F0aW9uXCIsXG4gICAgICAgICAgICBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKFxuICAgICAgICAgICAgICBcInN0b3BQcm9wYWdhdGlvblwiLFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBTeW50aGV0aWNFdmVudC5JbnRlcmZhY2UgPSBFdmVudEludGVyZmFjZTtcbiAgICAvKipcbiAgICAgKiBIZWxwZXIgdG8gcmVkdWNlIGJvaWxlcnBsYXRlIHdoZW4gY3JlYXRpbmcgc3ViY2xhc3Nlcy5cbiAgICAgKi9cblxuICAgIFN5bnRoZXRpY0V2ZW50LmV4dGVuZCA9IGZ1bmN0aW9uIChJbnRlcmZhY2UpIHtcbiAgICAgIHZhciBTdXBlciA9IHRoaXM7XG5cbiAgICAgIHZhciBFID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgIEUucHJvdG90eXBlID0gU3VwZXIucHJvdG90eXBlO1xuICAgICAgdmFyIHByb3RvdHlwZSA9IG5ldyBFKCk7XG5cbiAgICAgIGZ1bmN0aW9uIENsYXNzKCkge1xuICAgICAgICByZXR1cm4gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgYXNzaWduKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIENsYXNzLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICAgIENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzO1xuICAgICAgQ2xhc3MuSW50ZXJmYWNlID0gYXNzaWduKHt9LCBTdXBlci5JbnRlcmZhY2UsIEludGVyZmFjZSk7XG4gICAgICBDbGFzcy5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gICAgICBhZGRFdmVudFBvb2xpbmdUbyhDbGFzcyk7XG4gICAgICByZXR1cm4gQ2xhc3M7XG4gICAgfTtcblxuICAgIGFkZEV2ZW50UG9vbGluZ1RvKFN5bnRoZXRpY0V2ZW50KTtcbiAgICAvKipcbiAgICAgKiBIZWxwZXIgdG8gbnVsbGlmeSBzeW50aGV0aWNFdmVudCBpbnN0YW5jZSBwcm9wZXJ0aWVzIHdoZW4gZGVzdHJ1Y3RpbmdcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wTmFtZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gZ2V0VmFsXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBkZWZpbmVQcm9wZXJ0eSBvYmplY3RcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJvcE5hbWUsIGdldFZhbCkge1xuICAgICAgZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgICB2YXIgYWN0aW9uID0gaXNGdW5jdGlvbiA/IFwic2V0dGluZyB0aGUgbWV0aG9kXCIgOiBcInNldHRpbmcgdGhlIHByb3BlcnR5XCI7XG4gICAgICAgIHdhcm4oYWN0aW9uLCBcIlRoaXMgaXMgZWZmZWN0aXZlbHkgYSBuby1vcFwiKTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICB2YXIgYWN0aW9uID0gaXNGdW5jdGlvblxuICAgICAgICAgID8gXCJhY2Nlc3NpbmcgdGhlIG1ldGhvZFwiXG4gICAgICAgICAgOiBcImFjY2Vzc2luZyB0aGUgcHJvcGVydHlcIjtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGlzRnVuY3Rpb25cbiAgICAgICAgICA/IFwiVGhpcyBpcyBhIG5vLW9wIGZ1bmN0aW9uXCJcbiAgICAgICAgICA6IFwiVGhpcyBpcyBzZXQgdG8gbnVsbFwiO1xuICAgICAgICB3YXJuKGFjdGlvbiwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIGdldFZhbDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gd2FybihhY3Rpb24sIHJlc3VsdCkge1xuICAgICAgICB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIlRoaXMgc3ludGhldGljIGV2ZW50IGlzIHJldXNlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBcIiArXG4gICAgICAgICAgICAgIFwieW91J3JlICVzIGAlc2Agb24gYSByZWxlYXNlZC9udWxsaWZpZWQgc3ludGhldGljIGV2ZW50LiAlcy4gXCIgK1xuICAgICAgICAgICAgICBcIklmIHlvdSBtdXN0IGtlZXAgdGhlIG9yaWdpbmFsIHN5bnRoZXRpYyBldmVudCBhcm91bmQsIHVzZSBldmVudC5wZXJzaXN0KCkuIFwiICtcbiAgICAgICAgICAgICAgXCJTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2V2ZW50LXBvb2xpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIsXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgZ2V0VmFsID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHNldDogc2V0LFxuICAgICAgICBnZXQ6IGdldFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVPckdldFBvb2xlZEV2ZW50KFxuICAgICAgZGlzcGF0Y2hDb25maWcsXG4gICAgICB0YXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVJbnN0XG4gICAgKSB7XG4gICAgICB2YXIgRXZlbnRDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIGlmIChFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbC5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gRXZlbnRDb25zdHJ1Y3Rvci5ldmVudFBvb2wucG9wKCk7XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IuY2FsbChcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBkaXNwYXRjaENvbmZpZyxcbiAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUluc3RcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEV2ZW50Q29uc3RydWN0b3IoXG4gICAgICAgIGRpc3BhdGNoQ29uZmlnLFxuICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgbmF0aXZlSW5zdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxlYXNlUG9vbGVkRXZlbnQoZXZlbnQpIHtcbiAgICAgIHZhciBFdmVudENvbnN0cnVjdG9yID0gdGhpcztcblxuICAgICAgaWYgKCEoZXZlbnQgaW5zdGFuY2VvZiBFdmVudENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUcnlpbmcgdG8gcmVsZWFzZSBhbiBldmVudCBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LmRlc3RydWN0b3IoKTtcblxuICAgICAgaWYgKEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sLmxlbmd0aCA8IEVWRU5UX1BPT0xfU0laRSkge1xuICAgICAgICBFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbC5wdXNoKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRFdmVudFBvb2xpbmdUbyhFdmVudENvbnN0cnVjdG9yKSB7XG4gICAgICBFdmVudENvbnN0cnVjdG9yLmdldFBvb2xlZCA9IGNyZWF0ZU9yR2V0UG9vbGVkRXZlbnQ7XG4gICAgICBFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbCA9IFtdO1xuICAgICAgRXZlbnRDb25zdHJ1Y3Rvci5yZWxlYXNlID0gcmVsZWFzZVBvb2xlZEV2ZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGB0b3VjaEhpc3RvcnlgIGlzbid0IGFjdHVhbGx5IG9uIHRoZSBuYXRpdmUgZXZlbnQsIGJ1dCBwdXR0aW5nIGl0IGluIHRoZVxuICAgICAqIGludGVyZmFjZSB3aWxsIGVuc3VyZSB0aGF0IGl0IGlzIGNsZWFuZWQgdXAgd2hlbiBwb29sZWQvZGVzdHJveWVkLiBUaGVcbiAgICAgKiBgUmVzcG9uZGVyRXZlbnRQbHVnaW5gIHdpbGwgcG9wdWxhdGUgaXQgYXBwcm9wcmlhdGVseS5cbiAgICAgKi9cblxuICAgIHZhciBSZXNwb25kZXJTeW50aGV0aWNFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmV4dGVuZCh7XG4gICAgICB0b3VjaEhpc3Rvcnk6IGZ1bmN0aW9uIChuYXRpdmVFdmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDsgLy8gQWN0dWFsbHkgZG9lc24ndCBldmVuIGxvb2sgYXQgdGhlIG5hdGl2ZSBldmVudC5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBUT1BfVE9VQ0hfU1RBUlQgPSBcInRvcFRvdWNoU3RhcnRcIjtcbiAgICB2YXIgVE9QX1RPVUNIX01PVkUgPSBcInRvcFRvdWNoTW92ZVwiO1xuICAgIHZhciBUT1BfVE9VQ0hfRU5EID0gXCJ0b3BUb3VjaEVuZFwiO1xuICAgIHZhciBUT1BfVE9VQ0hfQ0FOQ0VMID0gXCJ0b3BUb3VjaENhbmNlbFwiO1xuICAgIHZhciBUT1BfU0NST0xMID0gXCJ0b3BTY3JvbGxcIjtcbiAgICB2YXIgVE9QX1NFTEVDVElPTl9DSEFOR0UgPSBcInRvcFNlbGVjdGlvbkNoYW5nZVwiO1xuICAgIGZ1bmN0aW9uIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSB7XG4gICAgICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSBUT1BfVE9VQ0hfU1RBUlQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgICAgIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IFRPUF9UT1VDSF9NT1ZFO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VuZGlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRvcExldmVsVHlwZSA9PT0gVE9QX1RPVUNIX0VORCB8fCB0b3BMZXZlbFR5cGUgPT09IFRPUF9UT1VDSF9DQU5DRUxcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBzdGFydERlcGVuZGVuY2llcyA9IFtUT1BfVE9VQ0hfU1RBUlRdO1xuICAgIHZhciBtb3ZlRGVwZW5kZW5jaWVzID0gW1RPUF9UT1VDSF9NT1ZFXTtcbiAgICB2YXIgZW5kRGVwZW5kZW5jaWVzID0gW1RPUF9UT1VDSF9DQU5DRUwsIFRPUF9UT1VDSF9FTkRdO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBwb3NpdGlvbiBhbmQgdGltZSBvZiBlYWNoIGFjdGl2ZSB0b3VjaCBieSBgdG91Y2guaWRlbnRpZmllcmAuIFdlXG4gICAgICogc2hvdWxkIHR5cGljYWxseSBvbmx5IHNlZSBJRHMgaW4gdGhlIHJhbmdlIG9mIDEtMjAgYmVjYXVzZSBJRHMgZ2V0IHJlY3ljbGVkXG4gICAgICogd2hlbiB0b3VjaGVzIGVuZCBhbmQgc3RhcnQgYWdhaW4uXG4gICAgICovXG5cbiAgICB2YXIgTUFYX1RPVUNIX0JBTksgPSAyMDtcbiAgICB2YXIgdG91Y2hCYW5rID0gW107XG4gICAgdmFyIHRvdWNoSGlzdG9yeSA9IHtcbiAgICAgIHRvdWNoQmFuazogdG91Y2hCYW5rLFxuICAgICAgbnVtYmVyQWN0aXZlVG91Y2hlczogMCxcbiAgICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGFjdGl2ZSB0b3VjaCwgd2UgcmVtZW1iZXIgaXRzIGxvY2F0aW9uLiBUaGlzIHByZXZlbnRzXG4gICAgICAvLyB1cyBoYXZpbmcgdG8gbG9vcCB0aHJvdWdoIGFsbCBvZiB0aGUgdG91Y2hlcyBhbGwgdGhlIHRpbWUgaW4gdGhlIG1vc3RcbiAgICAgIC8vIGNvbW1vbiBjYXNlLlxuICAgICAgaW5kZXhPZlNpbmdsZUFjdGl2ZVRvdWNoOiAtMSxcbiAgICAgIG1vc3RSZWNlbnRUaW1lU3RhbXA6IDBcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpIHtcbiAgICAgIC8vIFRoZSBsZWdhY3kgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgXCJ0aW1lU3RhbXBcIiwgd2hpY2ggaGFzIGJlZW5cbiAgICAgIC8vIHJlbmFtZWQgdG8gXCJ0aW1lc3RhbXBcIi4gTGV0IGJvdGggd29yayBmb3Igbm93IHdoaWxlIHdlIGlyb24gaXQgb3V0XG4gICAgICAvLyBUT0RPIChldnYpOiByZW5hbWUgdGltZVN0YW1wIHRvIHRpbWVzdGFtcCBpbiBpbnRlcm5hbCBjb2RlXG4gICAgICByZXR1cm4gdG91Y2gudGltZVN0YW1wIHx8IHRvdWNoLnRpbWVzdGFtcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVE9ETzogSW5zdGVhZCBvZiBtYWtpbmcgZ2VzdHVyZXMgcmVjb21wdXRlIGZpbHRlcmVkIHZlbG9jaXR5LCB3ZSBjb3VsZFxuICAgICAqIGluY2x1ZGUgYSBidWlsdCBpbiB2ZWxvY2l0eSBjb21wdXRhdGlvbiB0aGF0IGNhbiBiZSByZXVzZWQgZ2xvYmFsbHkuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUb3VjaFJlY29yZCh0b3VjaCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG91Y2hBY3RpdmU6IHRydWUsXG4gICAgICAgIHN0YXJ0UGFnZVg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICBzdGFydFBhZ2VZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgc3RhcnRUaW1lU3RhbXA6IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKSxcbiAgICAgICAgY3VycmVudFBhZ2VYOiB0b3VjaC5wYWdlWCxcbiAgICAgICAgY3VycmVudFBhZ2VZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgY3VycmVudFRpbWVTdGFtcDogdGltZXN0YW1wRm9yVG91Y2godG91Y2gpLFxuICAgICAgICBwcmV2aW91c1BhZ2VYOiB0b3VjaC5wYWdlWCxcbiAgICAgICAgcHJldmlvdXNQYWdlWTogdG91Y2gucGFnZVksXG4gICAgICAgIHByZXZpb3VzVGltZVN0YW1wOiB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRUb3VjaFJlY29yZCh0b3VjaFJlY29yZCwgdG91Y2gpIHtcbiAgICAgIHRvdWNoUmVjb3JkLnRvdWNoQWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRvdWNoUmVjb3JkLnN0YXJ0UGFnZVggPSB0b3VjaC5wYWdlWDtcbiAgICAgIHRvdWNoUmVjb3JkLnN0YXJ0UGFnZVkgPSB0b3VjaC5wYWdlWTtcbiAgICAgIHRvdWNoUmVjb3JkLnN0YXJ0VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpO1xuICAgICAgdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VYID0gdG91Y2gucGFnZVg7XG4gICAgICB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVkgPSB0b3VjaC5wYWdlWTtcbiAgICAgIHRvdWNoUmVjb3JkLmN1cnJlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCk7XG4gICAgICB0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VYID0gdG91Y2gucGFnZVg7XG4gICAgICB0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VZID0gdG91Y2gucGFnZVk7XG4gICAgICB0b3VjaFJlY29yZC5wcmV2aW91c1RpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRUb3VjaElkZW50aWZpZXIoX3JlZikge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBfcmVmLmlkZW50aWZpZXI7XG5cbiAgICAgIGlmIChpZGVudGlmaWVyID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVG91Y2ggb2JqZWN0IGlzIG1pc3NpbmcgaWRlbnRpZmllci5cIik7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGlkZW50aWZpZXIgPiBNQVhfVE9VQ0hfQkFOSykge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJUb3VjaCBpZGVudGlmaWVyICVzIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIHN1cHBvcnRlZCAlcyB3aGljaCBjYXVzZXMgXCIgK1xuICAgICAgICAgICAgICBcInBlcmZvcm1hbmNlIGlzc3VlcyBiYWNrZmlsbGluZyBhcnJheSBsb2NhdGlvbnMgZm9yIGFsbCBvZiB0aGUgaW5kaWNlcy5cIixcbiAgICAgICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgICAgICBNQVhfVE9VQ0hfQkFOS1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3JkVG91Y2hTdGFydCh0b3VjaCkge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBnZXRUb3VjaElkZW50aWZpZXIodG91Y2gpO1xuICAgICAgdmFyIHRvdWNoUmVjb3JkID0gdG91Y2hCYW5rW2lkZW50aWZpZXJdO1xuXG4gICAgICBpZiAodG91Y2hSZWNvcmQpIHtcbiAgICAgICAgcmVzZXRUb3VjaFJlY29yZCh0b3VjaFJlY29yZCwgdG91Y2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG91Y2hCYW5rW2lkZW50aWZpZXJdID0gY3JlYXRlVG91Y2hSZWNvcmQodG91Y2gpO1xuICAgICAgfVxuXG4gICAgICB0b3VjaEhpc3RvcnkubW9zdFJlY2VudFRpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWNvcmRUb3VjaE1vdmUodG91Y2gpIHtcbiAgICAgIHZhciB0b3VjaFJlY29yZCA9IHRvdWNoQmFua1tnZXRUb3VjaElkZW50aWZpZXIodG91Y2gpXTtcblxuICAgICAgaWYgKHRvdWNoUmVjb3JkKSB7XG4gICAgICAgIHRvdWNoUmVjb3JkLnRvdWNoQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWCA9IHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWDtcbiAgICAgICAgdG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWSA9IHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWTtcbiAgICAgICAgdG91Y2hSZWNvcmQucHJldmlvdXNUaW1lU3RhbXAgPSB0b3VjaFJlY29yZC5jdXJyZW50VGltZVN0YW1wO1xuICAgICAgICB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVggPSB0b3VjaC5wYWdlWDtcbiAgICAgICAgdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZID0gdG91Y2gucGFnZVk7XG4gICAgICAgIHRvdWNoUmVjb3JkLmN1cnJlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCk7XG4gICAgICAgIHRvdWNoSGlzdG9yeS5tb3N0UmVjZW50VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIkNhbm5vdCByZWNvcmQgdG91Y2ggbW92ZSB3aXRob3V0IGEgdG91Y2ggc3RhcnQuXFxuXCIgK1xuICAgICAgICAgICAgICBcIlRvdWNoIE1vdmU6ICVzXFxuXCIgK1xuICAgICAgICAgICAgICBcIlRvdWNoIEJhbms6ICVzXCIsXG4gICAgICAgICAgICBwcmludFRvdWNoKHRvdWNoKSxcbiAgICAgICAgICAgIHByaW50VG91Y2hCYW5rKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3JkVG91Y2hFbmQodG91Y2gpIHtcbiAgICAgIHZhciB0b3VjaFJlY29yZCA9IHRvdWNoQmFua1tnZXRUb3VjaElkZW50aWZpZXIodG91Y2gpXTtcblxuICAgICAgaWYgKHRvdWNoUmVjb3JkKSB7XG4gICAgICAgIHRvdWNoUmVjb3JkLnRvdWNoQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRvdWNoUmVjb3JkLnByZXZpb3VzUGFnZVggPSB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVg7XG4gICAgICAgIHRvdWNoUmVjb3JkLnByZXZpb3VzUGFnZVkgPSB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVk7XG4gICAgICAgIHRvdWNoUmVjb3JkLnByZXZpb3VzVGltZVN0YW1wID0gdG91Y2hSZWNvcmQuY3VycmVudFRpbWVTdGFtcDtcbiAgICAgICAgdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VYID0gdG91Y2gucGFnZVg7XG4gICAgICAgIHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWSA9IHRvdWNoLnBhZ2VZO1xuICAgICAgICB0b3VjaFJlY29yZC5jdXJyZW50VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpO1xuICAgICAgICB0b3VjaEhpc3RvcnkubW9zdFJlY2VudFRpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJDYW5ub3QgcmVjb3JkIHRvdWNoIGVuZCB3aXRob3V0IGEgdG91Y2ggc3RhcnQuXFxuXCIgK1xuICAgICAgICAgICAgICBcIlRvdWNoIEVuZDogJXNcXG5cIiArXG4gICAgICAgICAgICAgIFwiVG91Y2ggQmFuazogJXNcIixcbiAgICAgICAgICAgIHByaW50VG91Y2godG91Y2gpLFxuICAgICAgICAgICAgcHJpbnRUb3VjaEJhbmsoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmludFRvdWNoKHRvdWNoKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZGVudGlmaWVyOiB0b3VjaC5pZGVudGlmaWVyLFxuICAgICAgICBwYWdlWDogdG91Y2gucGFnZVgsXG4gICAgICAgIHBhZ2VZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByaW50VG91Y2hCYW5rKCkge1xuICAgICAgdmFyIHByaW50ZWQgPSBKU09OLnN0cmluZ2lmeSh0b3VjaEJhbmsuc2xpY2UoMCwgTUFYX1RPVUNIX0JBTkspKTtcblxuICAgICAgaWYgKHRvdWNoQmFuay5sZW5ndGggPiBNQVhfVE9VQ0hfQkFOSykge1xuICAgICAgICBwcmludGVkICs9IFwiIChvcmlnaW5hbCBzaXplOiBcIiArIHRvdWNoQmFuay5sZW5ndGggKyBcIilcIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByaW50ZWQ7XG4gICAgfVxuXG4gICAgdmFyIGluc3RydW1lbnRhdGlvbkNhbGxiYWNrO1xuICAgIHZhciBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZSA9IHtcbiAgICAgIC8qKlxuICAgICAgICogUmVnaXN0ZXJzIGEgbGlzdGVuZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaW5zdHJ1bWVudCBldmVyeSB0b3VjaCBldmVudC5cbiAgICAgICAqL1xuICAgICAgaW5zdHJ1bWVudDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB9LFxuICAgICAgcmVjb3JkVG91Y2hUcmFjazogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbkNhbGxiYWNrICE9IG51bGwpIHtcbiAgICAgICAgICBpbnN0cnVtZW50YXRpb25DYWxsYmFjayh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vdmVpc2godG9wTGV2ZWxUeXBlKSkge1xuICAgICAgICAgIG5hdGl2ZUV2ZW50LmNoYW5nZWRUb3VjaGVzLmZvckVhY2gocmVjb3JkVG91Y2hNb3ZlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkpIHtcbiAgICAgICAgICBuYXRpdmVFdmVudC5jaGFuZ2VkVG91Y2hlcy5mb3JFYWNoKHJlY29yZFRvdWNoU3RhcnQpO1xuICAgICAgICAgIHRvdWNoSGlzdG9yeS5udW1iZXJBY3RpdmVUb3VjaGVzID0gbmF0aXZlRXZlbnQudG91Y2hlcy5sZW5ndGg7XG5cbiAgICAgICAgICBpZiAodG91Y2hIaXN0b3J5Lm51bWJlckFjdGl2ZVRvdWNoZXMgPT09IDEpIHtcbiAgICAgICAgICAgIHRvdWNoSGlzdG9yeS5pbmRleE9mU2luZ2xlQWN0aXZlVG91Y2ggPVxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC50b3VjaGVzWzBdLmlkZW50aWZpZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzRW5kaXNoKHRvcExldmVsVHlwZSkpIHtcbiAgICAgICAgICBuYXRpdmVFdmVudC5jaGFuZ2VkVG91Y2hlcy5mb3JFYWNoKHJlY29yZFRvdWNoRW5kKTtcbiAgICAgICAgICB0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcyA9IG5hdGl2ZUV2ZW50LnRvdWNoZXMubGVuZ3RoO1xuXG4gICAgICAgICAgaWYgKHRvdWNoSGlzdG9yeS5udW1iZXJBY3RpdmVUb3VjaGVzID09PSAxKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdWNoQmFuay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgdG91Y2hUcmFja1RvQ2hlY2sgPSB0b3VjaEJhbmtbaV07XG5cbiAgICAgICAgICAgICAgaWYgKHRvdWNoVHJhY2tUb0NoZWNrICE9IG51bGwgJiYgdG91Y2hUcmFja1RvQ2hlY2sudG91Y2hBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0b3VjaEhpc3RvcnkuaW5kZXhPZlNpbmdsZUFjdGl2ZVRvdWNoID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBhY3RpdmVSZWNvcmQgPVxuICAgICAgICAgICAgICAgIHRvdWNoQmFua1t0b3VjaEhpc3RvcnkuaW5kZXhPZlNpbmdsZUFjdGl2ZVRvdWNoXTtcblxuICAgICAgICAgICAgICBpZiAoYWN0aXZlUmVjb3JkID09IG51bGwgfHwgIWFjdGl2ZVJlY29yZC50b3VjaEFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yKFwiQ2Fubm90IGZpbmQgc2luZ2xlIGFjdGl2ZSB0b3VjaC5cIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b3VjaEhpc3Rvcnk6IHRvdWNoSGlzdG9yeVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBY2N1bXVsYXRlcyBpdGVtcyB0aGF0IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGNvbnNlcnZlIG1lbW9yeSBieSBhdm9pZGluZyBhcnJheSBhbGxvY2F0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4geyp8YXJyYXk8Kj59IEFuIGFjY3VtdWxhdGlvbiBvZiBpdGVtcy5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGUoY3VycmVudCwgbmV4dCkge1xuICAgICAgaWYgKG5leHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJhY2N1bXVsYXRlKC4uLik6IEFjY3VtdWxhdGVkIGl0ZW1zIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICB9IC8vIEJvdGggYXJlIG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUgbm90XG4gICAgICAvLyBjZXJ0YWluIHRoYXQgeCBpcyBhbiBBcnJheSAoeCBjb3VsZCBiZSBhIHN0cmluZyB3aXRoIGNvbmNhdCBtZXRob2QpLlxuXG4gICAgICBpZiAoaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIGlmIGBjdXJyZW50YCBpcyBgVGAgYW5kIGBUYCBhbiBhcnJheSxcbiAgICAgICAgICogYGlzQXJyYXlgIG1pZ2h0IHJlZmluZSB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlIG9mIGBUYCAqL1xuICAgICAgICByZXR1cm4gY3VycmVudC5jb25jYXQobmV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KG5leHQpKSB7XG4gICAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gdW5zb3VuZCBpZiBgbmV4dGAgaXMgYFRgIGFuZCBgVGAgYW4gYXJyYXksXG4gICAgICAgICAqIGBpc0FycmF5YCBtaWdodCByZWZpbmUgdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSBvZiBgVGAgKi9cbiAgICAgICAgcmV0dXJuIFtjdXJyZW50XS5jb25jYXQobmV4dCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbY3VycmVudCwgbmV4dF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWNjdW11bGF0ZXMgaXRlbXMgdGhhdCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbnRvIHRoZSBmaXJzdCBvbmUuIFRoaXNcbiAgICAgKiBpcyB1c2VkIHRvIGNvbnNlcnZlIG1lbW9yeSBieSBhdm9pZGluZyBhcnJheSBhbGxvY2F0aW9ucywgYW5kIHRodXMgc2FjcmlmaWNlc1xuICAgICAqIEFQSSBjbGVhbm5lc3MuIFNpbmNlIGBjdXJyZW50YCBjYW4gYmUgbnVsbCBiZWZvcmUgYmVpbmcgcGFzc2VkIGluIGFuZCBub3RcbiAgICAgKiBudWxsIGFmdGVyIHRoaXMgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBhc3NpZ24gaXQgYmFjayB0byBgY3VycmVudGA6XG4gICAgICpcbiAgICAgKiBgYSA9IGFjY3VtdWxhdGVJbnRvKGEsIGIpO2BcbiAgICAgKlxuICAgICAqIFRoaXMgQVBJIHNob3VsZCBiZSBzcGFyaW5nbHkgdXNlZC4gVHJ5IGBhY2N1bXVsYXRlYCBmb3Igc29tZXRoaW5nIGNsZWFuZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHsqfGFycmF5PCo+fSBBbiBhY2N1bXVsYXRpb24gb2YgaXRlbXMuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlSW50byhjdXJyZW50LCBuZXh0KSB7XG4gICAgICBpZiAobmV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImFjY3VtdWxhdGVJbnRvKC4uLik6IEFjY3VtdWxhdGVkIGl0ZW1zIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICB9IC8vIEJvdGggYXJlIG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUgbm90XG4gICAgICAvLyBjZXJ0YWluIHRoYXQgeCBpcyBhbiBBcnJheSAoeCBjb3VsZCBiZSBhIHN0cmluZyB3aXRoIGNvbmNhdCBtZXRob2QpLlxuXG4gICAgICBpZiAoaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICBpZiAoaXNBcnJheShuZXh0KSkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBgaXNBcnJheWAgZG9lcyBub3QgZW5zdXJlIGFycmF5IGlzIG11dGFibGVcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICAgICAgY3VycmVudC5wdXNoLmFwcGx5KGN1cnJlbnQsIG5leHQpO1xuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBgaXNBcnJheWAgZG9lcyBub3QgZW5zdXJlIGFycmF5IGlzIG11dGFibGVcblxuICAgICAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShuZXh0KSkge1xuICAgICAgICAvLyBBIGJpdCB0b28gZGFuZ2Vyb3VzIHRvIG11dGF0ZSBgbmV4dGAuXG5cbiAgICAgICAgLyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSB1bnNvdW5kIGlmIGBuZXh0YCBpcyBgVGAgYW5kIGBUYCBhbiBhcnJheSxcbiAgICAgICAgICogYGlzQXJyYXlgIG1pZ2h0IHJlZmluZSB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlIG9mIGBUYCAqL1xuICAgICAgICByZXR1cm4gW2N1cnJlbnRdLmNvbmNhdChuZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtjdXJyZW50LCBuZXh0XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgYW4gXCJhY2N1bXVsYXRpb25cIiBvZiBpdGVtcyB3aGljaCBpcyBlaXRoZXIgYW4gQXJyYXkgb3JcbiAgICAgKiBhIHNpbmdsZSBpdGVtLiBVc2VmdWwgd2hlbiBwYWlyZWQgd2l0aCB0aGUgYGFjY3VtdWxhdGVgIG1vZHVsZS4gVGhpcyBpcyBhXG4gICAgICogc2ltcGxlIHV0aWxpdHkgdGhhdCBhbGxvd3MgdXMgdG8gcmVhc29uIGFib3V0IGEgY29sbGVjdGlvbiBvZiBpdGVtcywgYnV0XG4gICAgICogaGFuZGxpbmcgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBleGFjdGx5IG9uZSBpdGVtIChhbmQgd2UgZG8gbm90IG5lZWQgdG9cbiAgICAgKiBhbGxvY2F0ZSBhbiBhcnJheSkuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgaW52b2tlZCB3aXRoIGVhY2ggZWxlbWVudCBvciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHBhcmFtIHs/fSBbc2NvcGVdIFNjb3BlIHVzZWQgYXMgYHRoaXNgIGluIGEgY2FsbGJhY2suXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yRWFjaEFjY3VtdWxhdGVkKGFyciwgY2IsIHNjb3BlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIGlmIGBUYCBpcyBhbiBhcnJheSwgYGNiYCBjYW5ub3QgYmUgY2FsbGVkXG4gICAgICAgIGFyci5mb3JFYWNoKGNiLCBzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKGFycikge1xuICAgICAgICBjYi5jYWxsKHNjb3BlLCBhcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBGdW5jdGlvbkNvbXBvbmVudCA9IDA7XG4gICAgdmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbiAgICB2YXIgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IDI7IC8vIEJlZm9yZSB3ZSBrbm93IHdoZXRoZXIgaXQgaXMgZnVuY3Rpb24gb3IgY2xhc3NcblxuICAgIHZhciBIb3N0Um9vdCA9IDM7IC8vIFJvb3Qgb2YgYSBob3N0IHRyZWUuIENvdWxkIGJlIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBub2RlLlxuXG4gICAgdmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG4gICAgdmFyIEhvc3RDb21wb25lbnQgPSA1O1xuICAgIHZhciBIb3N0VGV4dCA9IDY7XG4gICAgdmFyIEZyYWdtZW50ID0gNztcbiAgICB2YXIgTW9kZSA9IDg7XG4gICAgdmFyIENvbnRleHRDb25zdW1lciA9IDk7XG4gICAgdmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xuICAgIHZhciBGb3J3YXJkUmVmID0gMTE7XG4gICAgdmFyIFByb2ZpbGVyID0gMTI7XG4gICAgdmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG4gICAgdmFyIE1lbW9Db21wb25lbnQgPSAxNDtcbiAgICB2YXIgU2ltcGxlTWVtb0NvbXBvbmVudCA9IDE1O1xuICAgIHZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG4gICAgdmFyIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IDE3O1xuICAgIHZhciBEZWh5ZHJhdGVkRnJhZ21lbnQgPSAxODtcbiAgICB2YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG4gICAgdmFyIFNjb3BlQ29tcG9uZW50ID0gMjE7XG4gICAgdmFyIE9mZnNjcmVlbkNvbXBvbmVudCA9IDIyO1xuICAgIHZhciBMZWdhY3lIaWRkZW5Db21wb25lbnQgPSAyMztcbiAgICB2YXIgQ2FjaGVDb21wb25lbnQgPSAyNDtcbiAgICB2YXIgVHJhY2luZ01hcmtlckNvbXBvbmVudCA9IDI1O1xuICAgIHZhciBIb3N0SG9pc3RhYmxlID0gMjY7XG4gICAgdmFyIEhvc3RTaW5nbGV0b24gPSAyNztcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGVsZW1lbnQgdGhhdCBzaG91bGQgcmVzcG9uZCB0byB0b3VjaC9tb3ZlIHR5cGVzIG9mIGludGVyYWN0aW9ucyxcbiAgICAgKiBhcyBpbmRpY2F0ZWQgZXhwbGljaXRseSBieSByZWxldmFudCBjYWxsYmFja3MuXG4gICAgICovXG5cbiAgICB2YXIgcmVzcG9uZGVySW5zdCA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQ291bnQgb2YgY3VycmVudCB0b3VjaGVzLiBBIHRleHRJbnB1dCBzaG91bGQgYmVjb21lIHJlc3BvbmRlciBpZmYgdGhlXG4gICAgICogc2VsZWN0aW9uIGNoYW5nZXMgd2hpbGUgdGhlcmUgaXMgYSB0b3VjaCBvbiB0aGUgc2NyZWVuLlxuICAgICAqL1xuXG4gICAgdmFyIHRyYWNrZWRUb3VjaENvdW50ID0gMDtcblxuICAgIGZ1bmN0aW9uIGNoYW5nZVJlc3BvbmRlcihuZXh0UmVzcG9uZGVySW5zdCwgYmxvY2tIb3N0UmVzcG9uZGVyKSB7XG4gICAgICB2YXIgb2xkUmVzcG9uZGVySW5zdCA9IHJlc3BvbmRlckluc3Q7XG4gICAgICByZXNwb25kZXJJbnN0ID0gbmV4dFJlc3BvbmRlckluc3Q7XG5cbiAgICAgIGlmIChSZXNwb25kZXJFdmVudFBsdWdpbi5HbG9iYWxSZXNwb25kZXJIYW5kbGVyICE9PSBudWxsKSB7XG4gICAgICAgIFJlc3BvbmRlckV2ZW50UGx1Z2luLkdsb2JhbFJlc3BvbmRlckhhbmRsZXIub25DaGFuZ2UoXG4gICAgICAgICAgb2xkUmVzcG9uZGVySW5zdCxcbiAgICAgICAgICBuZXh0UmVzcG9uZGVySW5zdCxcbiAgICAgICAgICBibG9ja0hvc3RSZXNwb25kZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXZlbnRUeXBlcyA9IHtcbiAgICAgIC8qKlxuICAgICAgICogT24gYSBgdG91Y2hTdGFydGAvYG1vdXNlRG93bmAsIGlzIGl0IGRlc2lyZWQgdGhhdCB0aGlzIGVsZW1lbnQgYmVjb21lIHRoZVxuICAgICAgICogcmVzcG9uZGVyP1xuICAgICAgICovXG4gICAgICBzdGFydFNob3VsZFNldFJlc3BvbmRlcjoge1xuICAgICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICAgIGJ1YmJsZWQ6IFwib25TdGFydFNob3VsZFNldFJlc3BvbmRlclwiLFxuICAgICAgICAgIGNhcHR1cmVkOiBcIm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlXCJcbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBzdGFydERlcGVuZGVuY2llc1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBPbiBhIGBzY3JvbGxgLCBpcyBpdCBkZXNpcmVkIHRoYXQgdGhpcyBlbGVtZW50IGJlY29tZSB0aGUgcmVzcG9uZGVyPyBUaGlzXG4gICAgICAgKiBpcyB1c3VhbGx5IG5vdCBuZWVkZWQsIGJ1dCBzaG91bGQgYmUgdXNlZCB0byByZXRyb2FjdGl2ZWx5IGluZmVyIHRoYXQgYVxuICAgICAgICogYHRvdWNoU3RhcnRgIGhhZCBvY2N1cnJlZCBkdXJpbmcgbW9tZW50dW0gc2Nyb2xsLiBEdXJpbmcgYSBtb21lbnR1bSBzY3JvbGwsXG4gICAgICAgKiBhIHRvdWNoIHN0YXJ0IHdpbGwgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBzY3JvbGwgZXZlbnQgaWYgdGhlIHZpZXcgaXNcbiAgICAgICAqIGN1cnJlbnRseSBzY3JvbGxpbmcuXG4gICAgICAgKlxuICAgICAgICogVE9ETzogVGhpcyBzaG91bGRuJ3QgYnViYmxlLlxuICAgICAgICovXG4gICAgICBzY3JvbGxTaG91bGRTZXRSZXNwb25kZXI6IHtcbiAgICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgICBidWJibGVkOiBcIm9uU2Nyb2xsU2hvdWxkU2V0UmVzcG9uZGVyXCIsXG4gICAgICAgICAgY2FwdHVyZWQ6IFwib25TY3JvbGxTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlXCJcbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbVE9QX1NDUk9MTF1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogT24gdGV4dCBzZWxlY3Rpb24gY2hhbmdlLCBzaG91bGQgdGhpcyBlbGVtZW50IGJlY29tZSB0aGUgcmVzcG9uZGVyPyBUaGlzXG4gICAgICAgKiBpcyBuZWVkZWQgZm9yIHRleHQgaW5wdXRzIG9yIG90aGVyIHZpZXdzIHdpdGggbmF0aXZlIHNlbGVjdGlvbiwgc28gdGhlXG4gICAgICAgKiBKUyB2aWV3IGNhbiBjbGFpbSB0aGUgcmVzcG9uZGVyLlxuICAgICAgICpcbiAgICAgICAqIFRPRE86IFRoaXMgc2hvdWxkbid0IGJ1YmJsZS5cbiAgICAgICAqL1xuICAgICAgc2VsZWN0aW9uQ2hhbmdlU2hvdWxkU2V0UmVzcG9uZGVyOiB7XG4gICAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICAgICAgYnViYmxlZDogXCJvblNlbGVjdGlvbkNoYW5nZVNob3VsZFNldFJlc3BvbmRlclwiLFxuICAgICAgICAgIGNhcHR1cmVkOiBcIm9uU2VsZWN0aW9uQ2hhbmdlU2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIGRlcGVuZGVuY2llczogW1RPUF9TRUxFQ1RJT05fQ0hBTkdFXVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBPbiBhIGB0b3VjaE1vdmVgL2Btb3VzZU1vdmVgLCBpcyBpdCBkZXNpcmVkIHRoYXQgdGhpcyBlbGVtZW50IGJlY29tZSB0aGVcbiAgICAgICAqIHJlc3BvbmRlcj9cbiAgICAgICAqL1xuICAgICAgbW92ZVNob3VsZFNldFJlc3BvbmRlcjoge1xuICAgICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICAgIGJ1YmJsZWQ6IFwib25Nb3ZlU2hvdWxkU2V0UmVzcG9uZGVyXCIsXG4gICAgICAgICAgY2FwdHVyZWQ6IFwib25Nb3ZlU2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIGRlcGVuZGVuY2llczogbW92ZURlcGVuZGVuY2llc1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBEaXJlY3QgcmVzcG9uZGVyIGV2ZW50cyBkaXNwYXRjaGVkIGRpcmVjdGx5IHRvIHJlc3BvbmRlci4gRG8gbm90IGJ1YmJsZS5cbiAgICAgICAqL1xuICAgICAgcmVzcG9uZGVyU3RhcnQ6IHtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlclN0YXJ0XCIsXG4gICAgICAgIGRlcGVuZGVuY2llczogc3RhcnREZXBlbmRlbmNpZXNcbiAgICAgIH0sXG4gICAgICByZXNwb25kZXJNb3ZlOiB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJNb3ZlXCIsXG4gICAgICAgIGRlcGVuZGVuY2llczogbW92ZURlcGVuZGVuY2llc1xuICAgICAgfSxcbiAgICAgIHJlc3BvbmRlckVuZDoge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyRW5kXCIsXG4gICAgICAgIGRlcGVuZGVuY2llczogZW5kRGVwZW5kZW5jaWVzXG4gICAgICB9LFxuICAgICAgcmVzcG9uZGVyUmVsZWFzZToge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyUmVsZWFzZVwiLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IGVuZERlcGVuZGVuY2llc1xuICAgICAgfSxcbiAgICAgIHJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdDoge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0XCIsXG4gICAgICAgIGRlcGVuZGVuY2llczogW11cbiAgICAgIH0sXG4gICAgICByZXNwb25kZXJHcmFudDoge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyR3JhbnRcIixcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXVxuICAgICAgfSxcbiAgICAgIHJlc3BvbmRlclJlamVjdDoge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyUmVqZWN0XCIsXG4gICAgICAgIGRlcGVuZGVuY2llczogW11cbiAgICAgIH0sXG4gICAgICByZXNwb25kZXJUZXJtaW5hdGU6IHtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlclRlcm1pbmF0ZVwiLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtdXG4gICAgICB9XG4gICAgfTsgLy8gU3RhcnQgb2YgaW5saW5lOiB0aGUgYmVsb3cgZnVuY3Rpb25zIHdlcmUgaW5saW5lZCBmcm9tXG4gICAgLy8gRXZlbnRQcm9wYWdhdG9yLmpzLCBhcyB0aGV5IGRldmlhdGVkIGZyb20gUmVhY3RET00ncyBuZXdlclxuICAgIC8vIGltcGxlbWVudGF0aW9ucy5cblxuICAgIGZ1bmN0aW9uIGdldFBhcmVudCQxKGluc3QpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaW5zdCA9IGluc3QucmV0dXJuOyAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAgICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgICAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgICAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gICAgICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICAgICAgaWYgKGluc3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgQSBhbmQgQiwgb3IgbnVsbCBpZiB0aGV5IGFyZSBpblxuICAgICAqIGRpZmZlcmVudCB0cmVlcy5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICAgICAgdmFyIGRlcHRoQSA9IDA7XG5cbiAgICAgIGZvciAodmFyIHRlbXBBID0gaW5zdEE7IHRlbXBBOyB0ZW1wQSA9IGdldFBhcmVudCQxKHRlbXBBKSkge1xuICAgICAgICBkZXB0aEErKztcbiAgICAgIH1cblxuICAgICAgdmFyIGRlcHRoQiA9IDA7XG5cbiAgICAgIGZvciAodmFyIHRlbXBCID0gaW5zdEI7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCQxKHRlbXBCKSkge1xuICAgICAgICBkZXB0aEIrKztcbiAgICAgIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG4gICAgICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgICAgICBpbnN0QSA9IGdldFBhcmVudCQxKGluc3RBKTtcbiAgICAgICAgZGVwdGhBLS07XG4gICAgICB9IC8vIElmIEIgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuICAgICAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICAgICAgaW5zdEIgPSBnZXRQYXJlbnQkMShpbnN0Qik7XG4gICAgICAgIGRlcHRoQi0tO1xuICAgICAgfSAvLyBXYWxrIGluIGxvY2tzdGVwIHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cblxuICAgICAgdmFyIGRlcHRoID0gZGVwdGhBO1xuXG4gICAgICB3aGlsZSAoZGVwdGgtLSkge1xuICAgICAgICBpZiAoaW5zdEEgPT09IGluc3RCIHx8IGluc3RBID09PSBpbnN0Qi5hbHRlcm5hdGUpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdEE7XG4gICAgICAgIH1cblxuICAgICAgICBpbnN0QSA9IGdldFBhcmVudCQxKGluc3RBKTtcbiAgICAgICAgaW5zdEIgPSBnZXRQYXJlbnQkMShpbnN0Qik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gaWYgQSBpcyBhbiBhbmNlc3RvciBvZiBCLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gaXNBbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgICAgIHdoaWxlIChpbnN0Qikge1xuICAgICAgICBpZiAoaW5zdEEgPT09IGluc3RCIHx8IGluc3RBID09PSBpbnN0Qi5hbHRlcm5hdGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc3RCID0gZ2V0UGFyZW50JDEoaW5zdEIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXVsYXRlcyB0aGUgdHJhdmVyc2FsIG9mIGEgdHdvLXBoYXNlLCBjYXB0dXJlL2J1YmJsZSBldmVudCBkaXNwYXRjaC5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlVHdvUGhhc2UkMShpbnN0LCBmbiwgYXJnKSB7XG4gICAgICB2YXIgcGF0aCA9IFtdO1xuXG4gICAgICB3aGlsZSAoaW5zdCkge1xuICAgICAgICBwYXRoLnB1c2goaW5zdCk7XG4gICAgICAgIGluc3QgPSBnZXRQYXJlbnQkMShpbnN0KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGk7XG5cbiAgICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoOyBpLS0gPiAwOyApIHtcbiAgICAgICAgZm4ocGF0aFtpXSwgXCJjYXB0dXJlZFwiLCBhcmcpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICBmbihwYXRoW2ldLCBcImJ1YmJsZWRcIiwgYXJnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRMaXN0ZW5lciQxKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMShzdGF0ZU5vZGUpO1xuXG4gICAgICBpZiAocHJvcHMgPT09IG51bGwpIHtcbiAgICAgICAgLy8gV29yayBpbiBwcm9ncmVzcy5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBsaXN0ZW5lciA9IHByb3BzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gICAgICBpZiAobGlzdGVuZXIgJiYgdHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgYFwiICtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgK1xuICAgICAgICAgICAgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICtcbiAgICAgICAgICAgIHR5cGVvZiBsaXN0ZW5lciArXG4gICAgICAgICAgICBcImAgdHlwZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdGVuZXJBdFBoYXNlJDEoaW5zdCwgZXZlbnQsIHByb3BhZ2F0aW9uUGhhc2UpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID1cbiAgICAgICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcHJvcGFnYXRpb25QaGFzZV07XG4gICAgICByZXR1cm4gZ2V0TGlzdGVuZXIkMShpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEoaW5zdCwgcGhhc2UsIGV2ZW50KSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaW5zdCkge1xuICAgICAgICAgIGVycm9yKFwiRGlzcGF0Y2hpbmcgaW5zdCBtdXN0IG5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyQXRQaGFzZSQxKGluc3QsIGV2ZW50LCBwaGFzZSk7XG5cbiAgICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgICAgICAgbGlzdGVuZXJcbiAgICAgICAgKTtcbiAgICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzLFxuICAgICAgICAgIGluc3RcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWNjdW11bGF0ZXMgd2l0aG91dCByZWdhcmQgdG8gZGlyZWN0aW9uLCBkb2VzIG5vdCBsb29rIGZvciBwaGFzZWRcbiAgICAgKiByZWdpc3RyYXRpb24gbmFtZXMuIFNhbWUgYXMgYGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlYCBidXQgd2l0aG91dFxuICAgICAqIHJlcXVpcmluZyB0aGF0IHRoZSBgZGlzcGF0Y2hNYXJrZXJgIGJlIHRoZSBzYW1lIGFzIHRoZSBkaXNwYXRjaGVkIElELlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZURpc3BhdGNoZXMkMShpbnN0LCBpZ25vcmVkRGlyZWN0aW9uLCBldmVudCkge1xuICAgICAgaWYgKGluc3QgJiYgZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyJDEoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICAgICk7XG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY2N1bXVsYXRlcyBkaXNwYXRjaGVzIG9uIGFuIGBTeW50aGV0aWNFdmVudGAsIGJ1dCBvbmx5IGZvciB0aGVcbiAgICAgKiBgZGlzcGF0Y2hNYXJrZXJgLlxuICAgICAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgICBhY2N1bXVsYXRlRGlzcGF0Y2hlcyQxKGV2ZW50Ll90YXJnZXRJbnN0LCBudWxsLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMkMShldmVudHMpIHtcbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlJDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgICAgdmFyIHRhcmdldEluc3QgPSBldmVudC5fdGFyZ2V0SW5zdDtcbiAgICAgICAgdmFyIHBhcmVudEluc3QgPSB0YXJnZXRJbnN0ID8gZ2V0UGFyZW50JDEodGFyZ2V0SW5zdCkgOiBudWxsO1xuICAgICAgICB0cmF2ZXJzZVR3b1BoYXNlJDEoXG4gICAgICAgICAgcGFyZW50SW5zdCxcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEsXG4gICAgICAgICAgZXZlbnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2tpcFRhcmdldChldmVudHMpIHtcbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlJDEoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgICB0cmF2ZXJzZVR3b1BoYXNlJDEoXG4gICAgICAgICAgZXZlbnQuX3RhcmdldEluc3QsXG4gICAgICAgICAgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyQxLFxuICAgICAgICAgIGV2ZW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyQxKGV2ZW50cykge1xuICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSQxKTtcbiAgICB9IC8vIEVuZCBvZiBpbmxpbmVcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogUmVzcG9uZGVyIFN5c3RlbTpcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tXG4gICAgICpcbiAgICAgKiAtIEEgZ2xvYmFsLCBzb2xpdGFyeSBcImludGVyYWN0aW9uIGxvY2tcIiBvbiBhIHZpZXcuXG4gICAgICogLSBJZiBhIG5vZGUgYmVjb21lcyB0aGUgcmVzcG9uZGVyLCBpdCBzaG91bGQgY29udmV5IHZpc3VhbCBmZWVkYmFja1xuICAgICAqICAgaW1tZWRpYXRlbHkgdG8gaW5kaWNhdGUgc28sIGVpdGhlciBieSBoaWdobGlnaHRpbmcgb3IgbW92aW5nIGFjY29yZGluZ2x5LlxuICAgICAqIC0gVG8gYmUgdGhlIHJlc3BvbmRlciBtZWFucywgdGhhdCB0b3VjaGVzIGFyZSBleGNsdXNpdmVseSBpbXBvcnRhbnQgdG8gdGhhdFxuICAgICAqICAgcmVzcG9uZGVyIHZpZXcsIGFuZCBubyBvdGhlciB2aWV3LlxuICAgICAqIC0gV2hpbGUgdG91Y2hlcyBhcmUgc3RpbGwgb2NjdXJyaW5nLCB0aGUgcmVzcG9uZGVyIGxvY2sgY2FuIGJlIHRyYW5zZmVycmVkIHRvXG4gICAgICogICBhIG5ldyB2aWV3LCBidXQgb25seSB0byBpbmNyZWFzaW5nbHkgXCJoaWdoZXJcIiB2aWV3cyAobWVhbmluZyBhbmNlc3RvcnMgb2ZcbiAgICAgKiAgIHRoZSBjdXJyZW50IHJlc3BvbmRlcikuXG4gICAgICpcbiAgICAgKiBSZXNwb25kZXIgYmVpbmcgZ3JhbnRlZDpcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKlxuICAgICAqIC0gVG91Y2ggc3RhcnRzLCBtb3ZlcywgYW5kIHNjcm9sbHMgY2FuIGNhdXNlIGFuIElEIHRvIGJlY29tZSB0aGUgcmVzcG9uZGVyLlxuICAgICAqIC0gV2UgY2FwdHVyZS9idWJibGUgYHN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyYC9gbW92ZVNob3VsZFNldFJlc3BvbmRlcmAgdG9cbiAgICAgKiAgIHRoZSBcImFwcHJvcHJpYXRlIHBsYWNlXCIuXG4gICAgICogLSBJZiBub3RoaW5nIGlzIGN1cnJlbnRseSB0aGUgcmVzcG9uZGVyLCB0aGUgXCJhcHByb3ByaWF0ZSBwbGFjZVwiIGlzIHRoZVxuICAgICAqICAgaW5pdGlhdGluZyBldmVudCdzIGB0YXJnZXRJRGAuXG4gICAgICogLSBJZiBzb21ldGhpbmcgKmlzKiBhbHJlYWR5IHRoZSByZXNwb25kZXIsIHRoZSBcImFwcHJvcHJpYXRlIHBsYWNlXCIgaXMgdGhlXG4gICAgICogICBmaXJzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGV2ZW50IHRhcmdldCBhbmQgdGhlIGN1cnJlbnQgYHJlc3BvbmRlckluc3RgLlxuICAgICAqIC0gU29tZSBuZWdvdGlhdGlvbiBoYXBwZW5zOiBTZWUgdGhlIHRpbWluZyBkaWFncmFtIGJlbG93LlxuICAgICAqIC0gU2Nyb2xsZWQgdmlld3MgYXV0b21hdGljYWxseSBiZWNvbWUgcmVzcG9uZGVyLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgYVxuICAgICAqICAgcGxhdGZvcm0gc2Nyb2xsIHZpZXcgdGhhdCBpc24ndCBidWlsdCBvbiB0b3Agb2YgdGhlIHJlc3BvbmRlciBzeXN0ZW0gaGFzXG4gICAgICogICBiZWdhbiBzY3JvbGxpbmcsIGFuZCB0aGUgYWN0aXZlIHJlc3BvbmRlciBtdXN0IG5vdyBiZSBub3RpZmllZCB0aGF0IHRoZVxuICAgICAqICAgaW50ZXJhY3Rpb24gaXMgbm8gbG9uZ2VyIGxvY2tlZCB0byBpdCAtIHRoZSBzeXN0ZW0gaGFzIHRha2VuIG92ZXIuXG4gICAgICpcbiAgICAgKiAtIFJlc3BvbmRlciBiZWluZyByZWxlYXNlZDpcbiAgICAgKiAgIEFzIHNvb24gYXMgbm8gbW9yZSB0b3VjaGVzIHRoYXQgKnN0YXJ0ZWQqIGluc2lkZSBvZiBkZXNjZW5kYW50cyBvZiB0aGVcbiAgICAgKiAgICpjdXJyZW50KiByZXNwb25kZXJJbnN0LCBhbiBgb25SZXNwb25kZXJSZWxlYXNlYCBldmVudCBpcyBkaXNwYXRjaGVkIHRvIHRoZVxuICAgICAqICAgY3VycmVudCByZXNwb25kZXIsIGFuZCB0aGUgcmVzcG9uZGVyIGxvY2sgaXMgcmVsZWFzZWQuXG4gICAgICpcbiAgICAgKiBUT0RPOlxuICAgICAqIC0gb24gXCJlbmRcIiwgYSBjYWxsYmFjayBob29rIGZvciBgb25SZXNwb25kZXJFbmRTaG91bGRSZW1haW5SZXNwb25kZXJgIHRoYXRcbiAgICAgKiAgIGRldGVybWluZXMgaWYgdGhlIHJlc3BvbmRlciBsb2NrIHNob3VsZCByZW1haW4uXG4gICAgICogLSBJZiBhIHZpZXcgc2hvdWxkbid0IFwicmVtYWluXCIgdGhlIHJlc3BvbmRlciwgYW55IGFjdGl2ZSB0b3VjaGVzIHNob3VsZCBieVxuICAgICAqICAgZGVmYXVsdCBiZSBjb25zaWRlcmVkIFwiZGVhZFwiIGFuZCBkbyBub3QgaW5mbHVlbmNlIGZ1dHVyZSBuZWdvdGlhdGlvbnMgb3JcbiAgICAgKiAgIGJ1YmJsZSBwYXRocy4gSXQgc2hvdWxkIGJlIGFzIGlmIHRob3NlIHRvdWNoZXMgZG8gbm90IGV4aXN0LlxuICAgICAqIC0tIEZvciBtdWx0aXRvdWNoOiBVc3VhbGx5IGEgdHJhbnNsYXRlLXogd2lsbCBjaG9vc2UgdG8gXCJyZW1haW5cIiByZXNwb25kZXJcbiAgICAgKiAgYWZ0ZXIgb25lIG91dCBvZiBtYW55IHRvdWNoZXMgZW5kZWQuIEZvciB0cmFuc2xhdGUteSwgdXN1YWxseSB0aGUgdmlld1xuICAgICAqICBkb2Vzbid0IHdpc2ggdG8gXCJyZW1haW5cIiByZXNwb25kZXIgYWZ0ZXIgb25lIG9mIG1hbnkgdG91Y2hlcyBlbmQuXG4gICAgICogLSBDb25zaWRlciBidWlsZGluZyB0aGlzIG9uIHRvcCBvZiBhIGBzdG9wUHJvcGFnYXRpb25gIG1vZGVsIHNpbWlsYXIgdG9cbiAgICAgKiAgIGBXM0NgIGV2ZW50cy5cbiAgICAgKiAtIEVuc3VyZSB0aGF0IGBvblJlc3BvbmRlclRlcm1pbmF0ZWAgaXMgY2FsbGVkIG9uIHRvdWNoIGNhbmNlbHMsIHdoZXRoZXIgb3JcbiAgICAgKiAgIG5vdCBgb25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3RgIHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKi9cblxuICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmVnb3RpYXRpb24gUGVyZm9ybWVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgXFxcblByb2Nlc3MgbG93IGxldmVsIGV2ZW50cyB0byAgICArICAgICBDdXJyZW50IFJlc3BvbmRlciAgICAgICsgICB3YW50c1Jlc3BvbmRlcklEXG5kZXRlcm1pbmUgd2hvIHRvIHBlcmZvcm0gbmVnb3QtfCAgIChpZiBhbnkgZXhpc3RzIGF0IGFsbCkgICB8XG5pYXRpb24vdHJhbnNpdGlvbiAgICAgICAgICAgICAgfCBPdGhlcndpc2UganVzdCBwYXNzIHRocm91Z2h8XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tK1xuQnViYmxlIHRvIGZpbmQgZmlyc3QgSUQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxudG8gcmV0dXJuIHRydWU6d2FudHNSZXNwb25kZXJJRHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICArLS0tLS0tLS0tLS0tLSsgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICB8IG9uVG91Y2hTdGFydHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICArLS0tLS0tKy0tLS0tLSsgICAgIG5vbmUgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgfCAgICAgICAgICAgIHJldHVybnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tdi0tLS0tLS0tLS0tLS0rdHJ1ZXwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfFxufG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXJ8LS0tLS0+fG9uUmVzcG9uZGVyU3RhcnQgKGN1cikgIHw8LS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgIHxcbiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tKy0tLS0tLS0rXG4gICAgICAgICAgICB8IHJldHVybmVkIHRydWUgZm9yfCAgICAgICBmYWxzZTpSRUpFQ1QgKy0tLS0tLS0tPnxvblJlc3BvbmRlclJlamVjdFxuICAgICAgICAgICAgfCB3YW50c1Jlc3BvbmRlcklEIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLStcbiAgICAgICAgICAgIHwgKG5vdyBhdHRlbXB0ICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rIHxcbiAgICAgICAgICAgIHwgIGhhbmRvZmYpICAgICAgICB8IHwgICBvblJlc3BvbmRlciAgICAgICAgICB8IHxcbiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICBUZXJtaW5hdGlvblJlcXVlc3R8IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHRydWU6R1JBTlQgKy0tLS0tLS0tPnxvblJlc3BvbmRlckdyYW50fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0rLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgIG9uUmVzcG9uZGVyVGVybWluYXRlIHw8LS0tLS0tLS0tLS0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tKyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLT58b25SZXNwb25kZXJTdGFydHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0rXG5CdWJibGUgdG8gZmluZCBmaXJzdCBJRCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG50byByZXR1cm4gdHJ1ZTp3YW50c1Jlc3BvbmRlcklEfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICstLS0tLS0tLS0tLS0tKyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgIHwgb25Ub3VjaE1vdmUgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICstLS0tLS0rLS0tLS0tKyAgICAgbm9uZSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICB8ICAgICAgICAgICAgcmV0dXJufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS12LS0tLS0tLS0tLS0tLSt0cnVlfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8XG58b25Nb3ZlU2hvdWxkU2V0UmVzcG9uZGVyIHwtLS0tLT58b25SZXNwb25kZXJNb3ZlIChjdXIpICAgfDwtLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKyAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICAgICAgICAgfFxuICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0rLS0tLS0tLStcbiAgICAgICAgICAgIHwgcmV0dXJuZWQgdHJ1ZSBmb3J8ICAgICAgIGZhbHNlOlJFSkVDVCArLS0tLS0tLS0+fG9uUmVzcG9uZGVyUmVqZWN8XG4gICAgICAgICAgICB8IHdhbnRzUmVzcG9uZGVySUQgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tK1xuICAgICAgICAgICAgfCAobm93IGF0dGVtcHQgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSsgfFxuICAgICAgICAgICAgfCAgaGFuZG9mZikgICAgICAgIHwgfCAgIG9uUmVzcG9uZGVyICAgICAgICAgIHwgfFxuICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgIFRlcm1pbmF0aW9uUmVxdWVzdHwgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSsgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgdHJ1ZTpHUkFOVCArLS0tLS0tLS0+fG9uUmVzcG9uZGVyR3JhbnR8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLSstLS0tLS0tK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgb25SZXNwb25kZXJUZXJtaW5hdGUgfDwtLS0tLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tPnxvblJlc3BvbmRlck1vdmUgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgIFNvbWUgYWN0aXZlIHRvdWNoIHN0YXJ0ZWR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgIGluc2lkZSBjdXJyZW50IHJlc3BvbmRlciB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICBvblJlc3BvbmRlckVuZCAgICB8IHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHxcbiAgKy0tLSstLS0tLS0tLS0rICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgfCBvblRvdWNoRW5kICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgKy0tLSstLS0tLS0tLS0rICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgIG9uUmVzcG9uZGVyRW5kICAgICB8IHxcbiAgICAgIE5vIGFjdGl2ZSB0b3VjaGVzIHN0YXJ0ZWR8ICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rIHxcbiAgICAgIGluc2lkZSBjdXJyZW50IHJlc3BvbmRlciB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHYgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgb25SZXNwb25kZXJSZWxlYXNlICB8IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKi9cblxuICAgIC8qKlxuICAgICAqIEEgbm90ZSBhYm91dCBldmVudCBvcmRlcmluZyBpbiB0aGUgYEV2ZW50UGx1Z2luUmVnaXN0cnlgLlxuICAgICAqXG4gICAgICogU3VwcG9zZSBwbHVnaW5zIGFyZSBpbmplY3RlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOlxuICAgICAqXG4gICAgICogYFtSLCBTLCBDXWBcbiAgICAgKlxuICAgICAqIFRvIGhlbHAgaWxsdXN0cmF0ZSB0aGUgZXhhbXBsZSwgYXNzdW1lIGBTYCBpcyBgU2ltcGxlRXZlbnRQbHVnaW5gIChmb3JcbiAgICAgKiBgb25DbGlja2AgZXRjKSBhbmQgYFJgIGlzIGBSZXNwb25kZXJFdmVudFBsdWdpbmAuXG4gICAgICpcbiAgICAgKiBcIkRlZmVycmVkLURpc3BhdGNoZWQgRXZlbnRzXCI6XG4gICAgICpcbiAgICAgKiAtIFRoZSBjdXJyZW50IGV2ZW50IHBsdWdpbiBzeXN0ZW0gd2lsbCB0cmF2ZXJzZSB0aGUgbGlzdCBvZiBpbmplY3RlZCBwbHVnaW5zLFxuICAgICAqICAgaW4gb3JkZXIsIGFuZCBleHRyYWN0IGV2ZW50cyBieSBjb2xsZWN0aW5nIHRoZSBwbHVnaW4ncyByZXR1cm4gdmFsdWUgb2ZcbiAgICAgKiAgIGBleHRyYWN0RXZlbnRzKClgLlxuICAgICAqIC0gVGhlc2UgZXZlbnRzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gYGV4dHJhY3RFdmVudHNgIGFyZSBcImRlZmVycmVkXG4gICAgICogICBkaXNwYXRjaGVkIGV2ZW50c1wiLlxuICAgICAqIC0gV2hlbiByZXR1cm5lZCBmcm9tIGBleHRyYWN0RXZlbnRzYCwgZGVmZXJyZWQtZGlzcGF0Y2hlZCBldmVudHMgY29udGFpbiBhblxuICAgICAqICAgXCJhY2N1bXVsYXRpb25cIiBvZiBkZWZlcnJlZCBkaXNwYXRjaGVzLlxuICAgICAqIC0gVGhlc2UgZGVmZXJyZWQgZGlzcGF0Y2hlcyBhcmUgYWNjdW11bGF0ZWQvY29sbGVjdGVkIGJlZm9yZSB0aGV5IGFyZVxuICAgICAqICAgcmV0dXJuZWQsIGJ1dCBwcm9jZXNzZWQgYXQgYSBsYXRlciB0aW1lIGJ5IHRoZSBgRXZlbnRQbHVnaW5SZWdpc3RyeWAgKGhlbmNlIHRoZVxuICAgICAqICAgbmFtZSBkZWZlcnJlZCkuXG4gICAgICpcbiAgICAgKiBJbiB0aGUgcHJvY2VzcyBvZiByZXR1cm5pbmcgdGhlaXIgZGVmZXJyZWQtZGlzcGF0Y2hlZCBldmVudHMsIGV2ZW50IHBsdWdpbnNcbiAgICAgKiB0aGVtc2VsdmVzIGNhbiBkaXNwYXRjaCBldmVudHMgb24tZGVtYW5kIHdpdGhvdXQgcmV0dXJuaW5nIHRoZW0gZnJvbVxuICAgICAqIGBleHRyYWN0RXZlbnRzYC4gUGx1Z2lucyBtaWdodCB3YW50IHRvIGRvIHRoaXMsIHNvIHRoYXQgdGhleSBjYW4gdXNlIGV2ZW50XG4gICAgICogZGlzcGF0Y2hpbmcgYXMgYSB0b29sIHRoYXQgaGVscHMgdGhlbSBkZWNpZGUgd2hpY2ggZXZlbnRzIHNob3VsZCBiZSBleHRyYWN0ZWRcbiAgICAgKiBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgICpcbiAgICAgKiBcIk9uLURlbWFuZC1EaXNwYXRjaGVkIEV2ZW50c1wiOlxuICAgICAqXG4gICAgICogLSBPbi1kZW1hbmQtZGlzcGF0Y2hlZCBldmVudHMgYXJlIG5vdCByZXR1cm5lZCBmcm9tIGBleHRyYWN0RXZlbnRzYC5cbiAgICAgKiAtIE9uLWRlbWFuZC1kaXNwYXRjaGVkIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgcmV0dXJuaW5nXG4gICAgICogICB0aGUgZGVmZXJyZWQtZGlzcGF0Y2hlZCBldmVudHMuXG4gICAgICogLSBUaGV5IHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuXG4gICAgICogLSBUaGV5IHNob3VsZCBiZSBhdm9pZGVkLCBhbmQvb3IgZXZlbnR1YWxseSBiZSByZXBsYWNlZCB3aXRoIGFub3RoZXJcbiAgICAgKiAgIGFic3RyYWN0aW9uIHRoYXQgYWxsb3dzIGV2ZW50IHBsdWdpbnMgdG8gcGVyZm9ybSBtdWx0aXBsZSBcInJvdW5kc1wiIG9mIGV2ZW50XG4gICAgICogICBleHRyYWN0aW9uLlxuICAgICAqXG4gICAgICogVGhlcmVmb3JlLCB0aGUgc2VxdWVuY2Ugb2YgZXZlbnQgZGlzcGF0Y2hlcyBiZWNvbWVzOlxuICAgICAqXG4gICAgICogLSBgUmBzIG9uLWRlbWFuZCBldmVudHMgKGlmIGFueSkgICAoZGlzcGF0Y2hlZCBieSBgUmAgb24tZGVtYW5kKVxuICAgICAqIC0gYFNgcyBvbi1kZW1hbmQgZXZlbnRzIChpZiBhbnkpICAgKGRpc3BhdGNoZWQgYnkgYFNgIG9uLWRlbWFuZClcbiAgICAgKiAtIGBDYHMgb24tZGVtYW5kIGV2ZW50cyAoaWYgYW55KSAgIChkaXNwYXRjaGVkIGJ5IGBDYCBvbi1kZW1hbmQpXG4gICAgICogLSBgUmBzIGV4dHJhY3RlZCBldmVudHMgKGlmIGFueSkgICAoZGlzcGF0Y2hlZCBieSBgRXZlbnRQbHVnaW5SZWdpc3RyeWApXG4gICAgICogLSBgU2BzIGV4dHJhY3RlZCBldmVudHMgKGlmIGFueSkgICAoZGlzcGF0Y2hlZCBieSBgRXZlbnRQbHVnaW5SZWdpc3RyeWApXG4gICAgICogLSBgQ2BzIGV4dHJhY3RlZCBldmVudHMgKGlmIGFueSkgICAoZGlzcGF0Y2hlZCBieSBgRXZlbnRQbHVnaW5SZWdpc3RyeWApXG4gICAgICpcbiAgICAgKiBJbiB0aGUgY2FzZSBvZiBgUmVzcG9uZGVyRXZlbnRQbHVnaW5gOiBJZiB0aGUgYHN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyYFxuICAgICAqIG9uLWRlbWFuZCBkaXNwYXRjaCByZXR1cm5zIGB0cnVlYCAoYW5kIHNvbWUgb3RoZXIgZGV0YWlscyBhcmUgc2F0aXNmaWVkKSB0aGVcbiAgICAgKiBgb25SZXNwb25kZXJHcmFudGAgZGVmZXJyZWQgZGlzcGF0Y2hlZCBldmVudCBpcyByZXR1cm5lZCBmcm9tXG4gICAgICogYGV4dHJhY3RFdmVudHNgLiBUaGUgc2VxdWVuY2Ugb2YgZGlzcGF0Y2ggZXhlY3V0aW9ucyBpbiB0aGlzIGNhc2VcbiAgICAgKiB3aWxsIGFwcGVhciBhcyBmb2xsb3dzOlxuICAgICAqXG4gICAgICogLSBgc3RhcnRTaG91bGRTZXRSZXNwb25kZXJgIChgUmVzcG9uZGVyRXZlbnRQbHVnaW5gIGRpc3BhdGNoZXMgb24tZGVtYW5kKVxuICAgICAqIC0gYHRvdWNoU3RhcnRDYXB0dXJlYCAgICAgICAoYEV2ZW50UGx1Z2luUmVnaXN0cnlgIGRpc3BhdGNoZXMgYXMgdXN1YWwpXG4gICAgICogLSBgdG91Y2hTdGFydGAgICAgICAgICAgICAgIChgRXZlbnRQbHVnaW5SZWdpc3RyeWAgZGlzcGF0Y2hlcyBhcyB1c3VhbClcbiAgICAgKiAtIGByZXNwb25kZXJHcmFudC9SZWplY3RgICAgKGBFdmVudFBsdWdpblJlZ2lzdHJ5YCBkaXNwYXRjaGVzIGFzIHVzdWFsKVxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gc2V0UmVzcG9uZGVyQW5kRXh0cmFjdFRyYW5zZmVyKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHZhciBzaG91bGRTZXRFdmVudFR5cGUgPSBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSlcbiAgICAgICAgPyBldmVudFR5cGVzLnN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyXG4gICAgICAgIDogaXNNb3ZlaXNoKHRvcExldmVsVHlwZSlcbiAgICAgICAgPyBldmVudFR5cGVzLm1vdmVTaG91bGRTZXRSZXNwb25kZXJcbiAgICAgICAgOiB0b3BMZXZlbFR5cGUgPT09IFRPUF9TRUxFQ1RJT05fQ0hBTkdFXG4gICAgICAgID8gZXZlbnRUeXBlcy5zZWxlY3Rpb25DaGFuZ2VTaG91bGRTZXRSZXNwb25kZXJcbiAgICAgICAgOiBldmVudFR5cGVzLnNjcm9sbFNob3VsZFNldFJlc3BvbmRlcjsgLy8gVE9ETzogc3RvcCBvbmUgc2hvcnQgb2YgdGhlIGN1cnJlbnQgcmVzcG9uZGVyLlxuXG4gICAgICB2YXIgYnViYmxlU2hvdWxkU2V0RnJvbSA9ICFyZXNwb25kZXJJbnN0XG4gICAgICAgID8gdGFyZ2V0SW5zdFxuICAgICAgICA6IGdldExvd2VzdENvbW1vbkFuY2VzdG9yKHJlc3BvbmRlckluc3QsIHRhcmdldEluc3QpOyAvLyBXaGVuIGNhcHR1cmluZy9idWJibGluZyB0aGUgXCJzaG91bGRTZXRcIiBldmVudCwgd2Ugd2FudCB0byBza2lwIHRoZSB0YXJnZXRcbiAgICAgIC8vIChkZWVwZXN0IElEKSBpZiBpdCBoYXBwZW5zIHRvIGJlIHRoZSBjdXJyZW50IHJlc3BvbmRlci4gVGhlIHJlYXNvbmluZzpcbiAgICAgIC8vIEl0J3Mgc3RyYW5nZSB0byBnZXQgYW4gYG9uTW92ZVNob3VsZFNldFJlc3BvbmRlcmAgd2hlbiB5b3UncmUgKmFscmVhZHkqXG4gICAgICAvLyB0aGUgcmVzcG9uZGVyLlxuXG4gICAgICB2YXIgc2tpcE92ZXJCdWJibGVTaG91bGRTZXRGcm9tID0gYnViYmxlU2hvdWxkU2V0RnJvbSA9PT0gcmVzcG9uZGVySW5zdDtcbiAgICAgIHZhciBzaG91bGRTZXRFdmVudCA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLFxuICAgICAgICBidWJibGVTaG91bGRTZXRGcm9tLFxuICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICk7XG4gICAgICBzaG91bGRTZXRFdmVudC50b3VjaEhpc3RvcnkgPSBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS50b3VjaEhpc3Rvcnk7XG5cbiAgICAgIGlmIChza2lwT3ZlckJ1YmJsZVNob3VsZFNldEZyb20pIHtcbiAgICAgICAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQoc2hvdWxkU2V0RXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyQxKHNob3VsZFNldEV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHdhbnRzUmVzcG9uZGVySW5zdCA9XG4gICAgICAgIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUoc2hvdWxkU2V0RXZlbnQpO1xuXG4gICAgICBpZiAoIXNob3VsZFNldEV2ZW50LmlzUGVyc2lzdGVudCgpKSB7XG4gICAgICAgIHNob3VsZFNldEV2ZW50LmNvbnN0cnVjdG9yLnJlbGVhc2Uoc2hvdWxkU2V0RXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXdhbnRzUmVzcG9uZGVySW5zdCB8fCB3YW50c1Jlc3BvbmRlckluc3QgPT09IHJlc3BvbmRlckluc3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBleHRyYWN0ZWQ7XG4gICAgICB2YXIgZ3JhbnRFdmVudCA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgZXZlbnRUeXBlcy5yZXNwb25kZXJHcmFudCxcbiAgICAgICAgd2FudHNSZXNwb25kZXJJbnN0LFxuICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICk7XG4gICAgICBncmFudEV2ZW50LnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzJDEoZ3JhbnRFdmVudCk7XG4gICAgICB2YXIgYmxvY2tIb3N0UmVzcG9uZGVyID0gZXhlY3V0ZURpcmVjdERpc3BhdGNoKGdyYW50RXZlbnQpID09PSB0cnVlO1xuXG4gICAgICBpZiAocmVzcG9uZGVySW5zdCkge1xuICAgICAgICB2YXIgdGVybWluYXRpb25SZXF1ZXN0RXZlbnQgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgZXZlbnRUeXBlcy5yZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3QsXG4gICAgICAgICAgcmVzcG9uZGVySW5zdCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICApO1xuICAgICAgICB0ZXJtaW5hdGlvblJlcXVlc3RFdmVudC50b3VjaEhpc3RvcnkgPVxuICAgICAgICAgIFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgICAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMkMSh0ZXJtaW5hdGlvblJlcXVlc3RFdmVudCk7XG4gICAgICAgIHZhciBzaG91bGRTd2l0Y2ggPVxuICAgICAgICAgICFoYXNEaXNwYXRjaGVzKHRlcm1pbmF0aW9uUmVxdWVzdEV2ZW50KSB8fFxuICAgICAgICAgIGV4ZWN1dGVEaXJlY3REaXNwYXRjaCh0ZXJtaW5hdGlvblJlcXVlc3RFdmVudCk7XG5cbiAgICAgICAgaWYgKCF0ZXJtaW5hdGlvblJlcXVlc3RFdmVudC5pc1BlcnNpc3RlbnQoKSkge1xuICAgICAgICAgIHRlcm1pbmF0aW9uUmVxdWVzdEV2ZW50LmNvbnN0cnVjdG9yLnJlbGVhc2UodGVybWluYXRpb25SZXF1ZXN0RXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFN3aXRjaCkge1xuICAgICAgICAgIHZhciB0ZXJtaW5hdGVFdmVudCA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICAgIGV2ZW50VHlwZXMucmVzcG9uZGVyVGVybWluYXRlLFxuICAgICAgICAgICAgcmVzcG9uZGVySW5zdCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRlcm1pbmF0ZUV2ZW50LnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyQxKHRlcm1pbmF0ZUV2ZW50KTtcbiAgICAgICAgICBleHRyYWN0ZWQgPSBhY2N1bXVsYXRlKGV4dHJhY3RlZCwgW2dyYW50RXZlbnQsIHRlcm1pbmF0ZUV2ZW50XSk7XG4gICAgICAgICAgY2hhbmdlUmVzcG9uZGVyKHdhbnRzUmVzcG9uZGVySW5zdCwgYmxvY2tIb3N0UmVzcG9uZGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcmVqZWN0RXZlbnQgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgICBldmVudFR5cGVzLnJlc3BvbmRlclJlamVjdCxcbiAgICAgICAgICAgIHdhbnRzUmVzcG9uZGVySW5zdCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlamVjdEV2ZW50LnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyQxKHJlamVjdEV2ZW50KTtcbiAgICAgICAgICBleHRyYWN0ZWQgPSBhY2N1bXVsYXRlKGV4dHJhY3RlZCwgcmVqZWN0RXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRyYWN0ZWQgPSBhY2N1bXVsYXRlKGV4dHJhY3RlZCwgZ3JhbnRFdmVudCk7XG4gICAgICAgIGNoYW5nZVJlc3BvbmRlcih3YW50c1Jlc3BvbmRlckluc3QsIGJsb2NrSG9zdFJlc3BvbmRlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleHRyYWN0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgdHJhbnNmZXIgaXMgYSBuZWdvdGlhdGlvbiBiZXR3ZWVuIGEgY3VycmVudGx5IHNldCByZXNwb25kZXIgYW5kIHRoZSBuZXh0XG4gICAgICogZWxlbWVudCB0byBjbGFpbSByZXNwb25kZXIgc3RhdHVzLiBBbnkgc3RhcnQgZXZlbnQgY291bGQgdHJpZ2dlciBhIHRyYW5zZmVyXG4gICAgICogb2YgcmVzcG9uZGVySW5zdC4gQW55IG1vdmUgZXZlbnQgY291bGQgdHJpZ2dlciBhIHRyYW5zZmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgQnJvd3NlckV2ZW50Q29uc3RhbnRzYC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGEgdHJhbnNmZXIgb2YgcmVzcG9uZGVyIGNvdWxkIHBvc3NpYmx5IG9jY3VyLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gY2FuVHJpZ2dlclRyYW5zZmVyKHRvcExldmVsVHlwZSwgdG9wTGV2ZWxJbnN0LCBuYXRpdmVFdmVudCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdG9wTGV2ZWxJbnN0ICYmIC8vIHJlc3BvbmRlcklnbm9yZVNjcm9sbDogV2UgYXJlIHRyeWluZyB0byBtaWdyYXRlIGF3YXkgZnJvbSBzcGVjaWZpY2FsbHlcbiAgICAgICAgLy8gdHJhY2tpbmcgbmF0aXZlIHNjcm9sbCBldmVudHMgaGVyZSBhbmQgcmVzcG9uZGVySWdub3JlU2Nyb2xsIGluZGljYXRlcyB3ZVxuICAgICAgICAvLyB3aWxsIHNlbmQgdG9wVG91Y2hDYW5jZWwgdG8gaGFuZGxlIGNhbmNlbGluZyB0b3VjaCBldmVudHMgaW5zdGVhZFxuICAgICAgICAoKHRvcExldmVsVHlwZSA9PT0gVE9QX1NDUk9MTCAmJiAhbmF0aXZlRXZlbnQucmVzcG9uZGVySWdub3JlU2Nyb2xsKSB8fFxuICAgICAgICAgICh0cmFja2VkVG91Y2hDb3VudCA+IDAgJiYgdG9wTGV2ZWxUeXBlID09PSBUT1BfU0VMRUNUSU9OX0NIQU5HRSkgfHxcbiAgICAgICAgICBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkgfHxcbiAgICAgICAgICBpc01vdmVpc2godG9wTGV2ZWxUeXBlKSlcbiAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhpcyB0b3VjaCBlbmQgZXZlbnQgbWFrZXMgaXQgc3VjaCB0aGF0IHRoZXJlIGFyZSBub1xuICAgICAqIGxvbmdlciBhbnkgdG91Y2hlcyB0aGF0IHN0YXJ0ZWQgaW5zaWRlIG9mIHRoZSBjdXJyZW50IGByZXNwb25kZXJJbnN0YC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TmF0aXZlRXZlbnR9IG5hdGl2ZUV2ZW50IE5hdGl2ZSB0b3VjaCBlbmQgZXZlbnQuXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhpcyB0b3VjaCBlbmQgZXZlbnQgZW5kcyB0aGUgcmVzcG9uZGVyLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gbm9SZXNwb25kZXJUb3VjaGVzKG5hdGl2ZUV2ZW50KSB7XG4gICAgICB2YXIgdG91Y2hlcyA9IG5hdGl2ZUV2ZW50LnRvdWNoZXM7XG5cbiAgICAgIGlmICghdG91Y2hlcyB8fCB0b3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhY3RpdmVUb3VjaCA9IHRvdWNoZXNbaV07XG4gICAgICAgIHZhciB0YXJnZXQgPSBhY3RpdmVUb3VjaC50YXJnZXQ7XG5cbiAgICAgICAgaWYgKHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IDApIHtcbiAgICAgICAgICAvLyBJcyB0aGUgb3JpZ2luYWwgdG91Y2ggbG9jYXRpb24gaW5zaWRlIG9mIHRoZSBjdXJyZW50IHJlc3BvbmRlcj9cbiAgICAgICAgICB2YXIgdGFyZ2V0SW5zdCA9IGdldEluc3RhbmNlRnJvbU5vZGUkMSh0YXJnZXQpO1xuXG4gICAgICAgICAgaWYgKGlzQW5jZXN0b3IocmVzcG9uZGVySW5zdCwgdGFyZ2V0SW5zdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIFJlc3BvbmRlckV2ZW50UGx1Z2luID0ge1xuICAgICAgLyogRm9yIHVuaXQgdGVzdGluZyBvbmx5ICovXG4gICAgICBfZ2V0UmVzcG9uZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXNwb25kZXJJbnN0O1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgICAgIC8qKlxuICAgICAgICogV2UgbXVzdCBiZSByZXNpbGllbnQgdG8gYHRhcmdldEluc3RgIGJlaW5nIGBudWxsYCBvbiBgdG91Y2hNb3ZlYCBvclxuICAgICAgICogYHRvdWNoRW5kYC4gT24gY2VydGFpbiBwbGF0Zm9ybXMsIHRoaXMgbWVhbnMgdGhhdCBhIG5hdGl2ZSBzY3JvbGwgaGFzXG4gICAgICAgKiBhc3N1bWVkIGNvbnRyb2wgYW5kIHRoZSBvcmlnaW5hbCB0b3VjaCB0YXJnZXRzIGFyZSBkZXN0cm95ZWQuXG4gICAgICAgKi9cbiAgICAgIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uIChcbiAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50U3lzdGVtRmxhZ3NcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpKSB7XG4gICAgICAgICAgdHJhY2tlZFRvdWNoQ291bnQgKz0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0VuZGlzaCh0b3BMZXZlbFR5cGUpKSB7XG4gICAgICAgICAgaWYgKHRyYWNrZWRUb3VjaENvdW50ID49IDApIHtcbiAgICAgICAgICAgIHRyYWNrZWRUb3VjaENvdW50IC09IDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICBcIkVuZGVkIGEgdG91Y2ggZXZlbnQgd2hpY2ggd2FzIG5vdCBjb3VudGVkIGluIGB0cmFja2VkVG91Y2hDb3VudGAuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUucmVjb3JkVG91Y2hUcmFjayh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgdmFyIGV4dHJhY3RlZCA9IGNhblRyaWdnZXJUcmFuc2ZlcihcbiAgICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICApXG4gICAgICAgICAgPyBzZXRSZXNwb25kZXJBbmRFeHRyYWN0VHJhbnNmZXIoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBudWxsOyAvLyBSZXNwb25kZXIgbWF5IG9yIG1heSBub3QgaGF2ZSB0cmFuc2ZlcnJlZCBvbiBhIG5ldyB0b3VjaCBzdGFydC9tb3ZlLlxuICAgICAgICAvLyBSZWdhcmRsZXNzLCB3aG9ldmVyIGlzIHRoZSByZXNwb25kZXIgYWZ0ZXIgYW55IHBvdGVudGlhbCB0cmFuc2Zlciwgd2VcbiAgICAgICAgLy8gZGlyZWN0IGFsbCB0b3VjaCBzdGFydC9tb3ZlL2VuZHMgdG8gdGhlbSBpbiB0aGUgZm9ybSBvZlxuICAgICAgICAvLyBgb25SZXNwb25kZXJNb3ZlL1N0YXJ0L0VuZGAuIFRoZXNlIHdpbGwgYmUgY2FsbGVkIGZvciAqZXZlcnkqIGFkZGl0aW9uYWxcbiAgICAgICAgLy8gZmluZ2VyIHRoYXQgbW92ZS9zdGFydC9lbmQsIGRpc3BhdGNoZWQgZGlyZWN0bHkgdG8gd2hvZXZlciBpcyB0aGVcbiAgICAgICAgLy8gY3VycmVudCByZXNwb25kZXIgYXQgdGhhdCBtb21lbnQsIHVudGlsIHRoZSByZXNwb25kZXIgaXMgXCJyZWxlYXNlZFwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVzZSBtdWx0aXBsZSBpbmRpdmlkdWFsIGNoYW5nZSB0b3VjaCBldmVudHMgYXJlIGFyZSBhbHdheXMgYm9va2VuZGVkXG4gICAgICAgIC8vIGJ5IGBvblJlc3BvbmRlckdyYW50YCwgYW5kIG9uZSBvZlxuICAgICAgICAvLyAoYG9uUmVzcG9uZGVyUmVsZWFzZS9vblJlc3BvbmRlclRlcm1pbmF0ZWApLlxuXG4gICAgICAgIHZhciBpc1Jlc3BvbmRlclRvdWNoU3RhcnQgPSByZXNwb25kZXJJbnN0ICYmIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKTtcbiAgICAgICAgdmFyIGlzUmVzcG9uZGVyVG91Y2hNb3ZlID0gcmVzcG9uZGVySW5zdCAmJiBpc01vdmVpc2godG9wTGV2ZWxUeXBlKTtcbiAgICAgICAgdmFyIGlzUmVzcG9uZGVyVG91Y2hFbmQgPSByZXNwb25kZXJJbnN0ICYmIGlzRW5kaXNoKHRvcExldmVsVHlwZSk7XG4gICAgICAgIHZhciBpbmNyZW1lbnRhbFRvdWNoID0gaXNSZXNwb25kZXJUb3VjaFN0YXJ0XG4gICAgICAgICAgPyBldmVudFR5cGVzLnJlc3BvbmRlclN0YXJ0XG4gICAgICAgICAgOiBpc1Jlc3BvbmRlclRvdWNoTW92ZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJNb3ZlXG4gICAgICAgICAgOiBpc1Jlc3BvbmRlclRvdWNoRW5kXG4gICAgICAgICAgPyBldmVudFR5cGVzLnJlc3BvbmRlckVuZFxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBpZiAoaW5jcmVtZW50YWxUb3VjaCkge1xuICAgICAgICAgIHZhciBnZXN0dXJlID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgICAgaW5jcmVtZW50YWxUb3VjaCxcbiAgICAgICAgICAgIHJlc3BvbmRlckluc3QsXG4gICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBnZXN0dXJlLnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyQxKGdlc3R1cmUpO1xuICAgICAgICAgIGV4dHJhY3RlZCA9IGFjY3VtdWxhdGUoZXh0cmFjdGVkLCBnZXN0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpc1Jlc3BvbmRlclRlcm1pbmF0ZSA9XG4gICAgICAgICAgcmVzcG9uZGVySW5zdCAmJiB0b3BMZXZlbFR5cGUgPT09IFRPUF9UT1VDSF9DQU5DRUw7XG4gICAgICAgIHZhciBpc1Jlc3BvbmRlclJlbGVhc2UgPVxuICAgICAgICAgIHJlc3BvbmRlckluc3QgJiZcbiAgICAgICAgICAhaXNSZXNwb25kZXJUZXJtaW5hdGUgJiZcbiAgICAgICAgICBpc0VuZGlzaCh0b3BMZXZlbFR5cGUpICYmXG4gICAgICAgICAgbm9SZXNwb25kZXJUb3VjaGVzKG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgdmFyIGZpbmFsVG91Y2ggPSBpc1Jlc3BvbmRlclRlcm1pbmF0ZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJUZXJtaW5hdGVcbiAgICAgICAgICA6IGlzUmVzcG9uZGVyUmVsZWFzZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJSZWxlYXNlXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmIChmaW5hbFRvdWNoKSB7XG4gICAgICAgICAgdmFyIGZpbmFsRXZlbnQgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgICBmaW5hbFRvdWNoLFxuICAgICAgICAgICAgcmVzcG9uZGVySW5zdCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApO1xuICAgICAgICAgIGZpbmFsRXZlbnQudG91Y2hIaXN0b3J5ID0gUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5O1xuICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzJDEoZmluYWxFdmVudCk7XG4gICAgICAgICAgZXh0cmFjdGVkID0gYWNjdW11bGF0ZShleHRyYWN0ZWQsIGZpbmFsRXZlbnQpO1xuICAgICAgICAgIGNoYW5nZVJlc3BvbmRlcihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHRyYWN0ZWQ7XG4gICAgICB9LFxuICAgICAgR2xvYmFsUmVzcG9uZGVySGFuZGxlcjogbnVsbCxcbiAgICAgIGluamVjdGlvbjoge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHt7b25DaGFuZ2U6IChSZWFjdElELCBSZWFjdElEKSA9PiB2b2lkfSBHbG9iYWxSZXNwb25kZXJIYW5kbGVyXG4gICAgICAgICAqIE9iamVjdCB0aGF0IGhhbmRsZXMgYW55IGNoYW5nZSBpbiByZXNwb25kZXIuIFVzZSB0aGlzIHRvIGluamVjdFxuICAgICAgICAgKiBpbnRlZ3JhdGlvbiB3aXRoIGFuIGV4aXN0aW5nIHRvdWNoIGhhbmRsaW5nIHN5c3RlbSBldGMuXG4gICAgICAgICAqL1xuICAgICAgICBpbmplY3RHbG9iYWxSZXNwb25kZXJIYW5kbGVyOiBmdW5jdGlvbiAoR2xvYmFsUmVzcG9uZGVySGFuZGxlcikge1xuICAgICAgICAgIFJlc3BvbmRlckV2ZW50UGx1Z2luLkdsb2JhbFJlc3BvbmRlckhhbmRsZXIgPSBHbG9iYWxSZXNwb25kZXJIYW5kbGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluamVjdGFibGUgb3JkZXJpbmcgb2YgZXZlbnQgcGx1Z2lucy5cbiAgICAgKi9cbiAgICB2YXIgZXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG4gICAgLyoqXG4gICAgICogSW5qZWN0YWJsZSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gICAgICovXG5cbiAgICB2YXIgbmFtZXNUb1BsdWdpbnMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBSZWNvbXB1dGVzIHRoZSBwbHVnaW4gbGlzdCB1c2luZyB0aGUgaW5qZWN0ZWQgcGx1Z2lucyBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCkge1xuICAgICAgaWYgKCFldmVudFBsdWdpbk9yZGVyKSB7XG4gICAgICAgIC8vIFdhaXQgdW50aWwgYW4gYGV2ZW50UGx1Z2luT3JkZXJgIGlzIGluamVjdGVkLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgICAgdmFyIHBsdWdpbk1vZHVsZSA9IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICB2YXIgcGx1Z2luSW5kZXggPSBldmVudFBsdWdpbk9yZGVyLmluZGV4T2YocGx1Z2luTmFtZSk7XG5cbiAgICAgICAgaWYgKHBsdWdpbkluZGV4IDw9IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gXCIgK1xuICAgICAgICAgICAgICAoXCJ0aGUgcGx1Z2luIG9yZGVyaW5nLCBgXCIgKyBwbHVnaW5OYW1lICsgXCJgLlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGx1Z2luc1twbHVnaW5JbmRleF0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IEV2ZW50IHBsdWdpbnMgbXVzdCBpbXBsZW1lbnQgYW4gYGV4dHJhY3RFdmVudHNgIFwiICtcbiAgICAgICAgICAgICAgKFwibWV0aG9kLCBidXQgYFwiICsgcGx1Z2luTmFtZSArIFwiYCBkb2VzIG5vdC5cIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcGx1Z2luc1twbHVnaW5JbmRleF0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgICAgIHZhciBwdWJsaXNoZWRFdmVudHMgPSBwbHVnaW5Nb2R1bGUuZXZlbnRUeXBlcztcblxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcHVibGlzaGVkRXZlbnRzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXB1Ymxpc2hFdmVudEZvclBsdWdpbihcbiAgICAgICAgICAgICAgcHVibGlzaGVkRXZlbnRzW2V2ZW50TmFtZV0sXG4gICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSxcbiAgICAgICAgICAgICAgZXZlbnROYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogRmFpbGVkIHRvIHB1Ymxpc2ggZXZlbnQgYFwiICtcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgK1xuICAgICAgICAgICAgICAgIFwiYCBmb3IgcGx1Z2luIGBcIiArXG4gICAgICAgICAgICAgICAgcGx1Z2luTmFtZSArXG4gICAgICAgICAgICAgICAgXCJgLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBieSB0aGUgc3VwcGxpZWQgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIERpc3BhdGNoIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBldmVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmlnLCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICAgICAgaWYgKGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lIFwiICtcbiAgICAgICAgICAgIChcImV2ZW50IG5hbWUsIGBcIiArIGV2ZW50TmFtZSArIFwiYC5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV0gPSBkaXNwYXRjaENvbmZpZztcbiAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgICAgZm9yICh2YXIgcGhhc2VOYW1lIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgICAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlTmFtZSkpIHtcbiAgICAgICAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lID0gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcGhhc2VOYW1lXTtcbiAgICAgICAgICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVibGlzaGVzIGEgcmVnaXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGRpc3BhdGNoZWQgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgUmVnaXN0cmF0aW9uIG5hbWUgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICBwbHVnaW5Nb2R1bGUsXG4gICAgICBldmVudE5hbWVcbiAgICApIHtcbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSBcIiArXG4gICAgICAgICAgICAoXCJyZWdpc3RyYXRpb24gbmFtZSwgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYC5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBwbHVnaW5Nb2R1bGU7XG5cbiAgICAgIHtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgcGx1Z2lucyBzbyB0aGF0IHRoZXkgY2FuIGV4dHJhY3QgYW5kIGRpc3BhdGNoIGV2ZW50cy5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIE9yZGVyZWQgbGlzdCBvZiBpbmplY3RlZCBwbHVnaW5zLlxuICAgICAqL1xuXG4gICAgdmFyIHBsdWdpbnMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBNYXBwaW5nIGZyb20gZXZlbnQgbmFtZSB0byBkaXNwYXRjaCBjb25maWdcbiAgICAgKi9cblxuICAgIHZhciBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MgPSB7fTtcbiAgICAvKipcbiAgICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gcGx1Z2luIG1vZHVsZVxuICAgICAqL1xuXG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3RzIGFuIG9yZGVyaW5nIG9mIHBsdWdpbnMgKGJ5IHBsdWdpbiBuYW1lKS4gVGhpcyBhbGxvd3MgdGhlIG9yZGVyaW5nXG4gICAgICogdG8gYmUgZGVjb3VwbGVkIGZyb20gaW5qZWN0aW9uIG9mIHRoZSBhY3R1YWwgcGx1Z2lucyBzbyB0aGF0IG9yZGVyaW5nIGlzXG4gICAgICogYWx3YXlzIGRldGVybWluaXN0aWMgcmVnYXJkbGVzcyBvZiBwYWNrYWdpbmcsIG9uLXRoZS1mbHkgaW5qZWN0aW9uLCBldGMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGluamVjdEV2ZW50UGx1Z2luT3JkZXIoaW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyKSB7XG4gICAgICBpZiAoZXZlbnRQbHVnaW5PcmRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbiBvcmRlcmluZyBtb3JlIHRoYW4gXCIgK1xuICAgICAgICAgICAgXCJvbmNlLiBZb3UgYXJlIGxpa2VseSB0cnlpbmcgdG8gbG9hZCBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIH0gLy8gQ2xvbmUgdGhlIG9yZGVyaW5nIHNvIGl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBtdXRhdGVkLlxuICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgIGV2ZW50UGx1Z2luT3JkZXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpO1xuICAgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgcGx1Z2luIGV2ZW50IHN5c3RlbS4gVGhlIHBsdWdpbiBuYW1lcyBtdXN0IGJlXG4gICAgICogaW4gdGhlIG9yZGVyaW5nIGluamVjdGVkIGJ5IGBpbmplY3RFdmVudFBsdWdpbk9yZGVyYC5cbiAgICAgKlxuICAgICAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVkIGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1Z2luIG1vZHVsZXMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgICAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIGluamVjdGVkTmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgICAgaWYgKCFpbmplY3RlZE5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGx1Z2luTW9kdWxlID0gaW5qZWN0ZWROYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpIHx8XG4gICAgICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gIT09IHBsdWdpbk1vZHVsZVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAobmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IHR3byBkaWZmZXJlbnQgZXZlbnQgcGx1Z2lucyBcIiArXG4gICAgICAgICAgICAgICAgKFwidXNpbmcgdGhlIHNhbWUgbmFtZSwgYFwiICsgcGx1Z2luTmFtZSArIFwiYC5cIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgICAgICAgaXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNPcmRlcmluZ0RpcnR5KSB7XG4gICAgICAgIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxKHN0YXRlTm9kZSk7XG5cbiAgICAgIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgICAgIGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBgXCIgK1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSArXG4gICAgICAgICAgICBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgK1xuICAgICAgICAgICAgdHlwZW9mIGxpc3RlbmVyICtcbiAgICAgICAgICAgIFwiYCB0eXBlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgICB9XG5cbiAgICB2YXIgY3VzdG9tQnViYmxpbmdFdmVudFR5cGVzID1cbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0TmF0aXZlVmlld0NvbmZpZ1JlZ2lzdHJ5XG4gICAgICAgICAgLmN1c3RvbUJ1YmJsaW5nRXZlbnRUeXBlcyxcbiAgICAgIGN1c3RvbURpcmVjdEV2ZW50VHlwZXMgPVxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnlcbiAgICAgICAgICAuY3VzdG9tRGlyZWN0RXZlbnRUeXBlczsgLy8gU3RhcnQgb2YgaW5saW5lOiB0aGUgYmVsb3cgZnVuY3Rpb25zIHdlcmUgaW5saW5lZCBmcm9tXG4gICAgLy8gRXZlbnRQcm9wYWdhdG9yLmpzLCBhcyB0aGV5IGRldmlhdGVkIGZyb20gUmVhY3RET00ncyBuZXdlclxuICAgIC8vIGltcGxlbWVudGF0aW9ucy5cbiAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHByb3BhZ2F0aW9uUGhhc2UpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID1cbiAgICAgICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcHJvcGFnYXRpb25QaGFzZV07XG4gICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzKGluc3QsIHBoYXNlLCBldmVudCkge1xuICAgICAge1xuICAgICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAgICBlcnJvcihcIkRpc3BhdGNoaW5nIGluc3QgbXVzdCBub3QgYmUgbnVsbFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHBoYXNlKTtcblxuICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IGFjY3VtdWxhdGVJbnRvKFxuICAgICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICApO1xuICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgICAgaW5zdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaW5zdCA9IGluc3QucmV0dXJuOyAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAgICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgICAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgICAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gICAgICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICAgICAgaWYgKGluc3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW11bGF0ZXMgdGhlIHRyYXZlcnNhbCBvZiBhIHR3by1waGFzZSwgY2FwdHVyZS9idWJibGUgZXZlbnQgZGlzcGF0Y2guXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZVR3b1BoYXNlKGluc3QsIGZuLCBhcmcsIHNraXBCdWJibGluZykge1xuICAgICAgdmFyIHBhdGggPSBbXTtcblxuICAgICAgd2hpbGUgKGluc3QpIHtcbiAgICAgICAgcGF0aC5wdXNoKGluc3QpO1xuICAgICAgICBpbnN0ID0gZ2V0UGFyZW50KGluc3QpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaTtcblxuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGg7IGktLSA+IDA7ICkge1xuICAgICAgICBmbihwYXRoW2ldLCBcImNhcHR1cmVkXCIsIGFyZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChza2lwQnViYmxpbmcpIHtcbiAgICAgICAgLy8gRGlzcGF0Y2ggb24gdGFyZ2V0IG9ubHlcbiAgICAgICAgZm4ocGF0aFswXSwgXCJidWJibGVkXCIsIGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZuKHBhdGhbaV0sIFwiYnViYmxlZFwiLCBhcmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgICAgdHJhdmVyc2VUd29QaGFzZShcbiAgICAgICAgICBldmVudC5fdGFyZ2V0SW5zdCxcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50cykge1xuICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlQ2FwdHVyZVBoYXNlRGlzcGF0Y2hlcyhldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIHRyYXZlcnNlVHdvUGhhc2UoXG4gICAgICAgICAgZXZlbnQuX3RhcmdldEluc3QsXG4gICAgICAgICAgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFjY3VtdWxhdGVzIHdpdGhvdXQgcmVnYXJkIHRvIGRpcmVjdGlvbiwgZG9lcyBub3QgbG9vayBmb3IgcGhhc2VkXG4gICAgICogcmVnaXN0cmF0aW9uIG5hbWVzLiBTYW1lIGFzIGBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZWAgYnV0IHdpdGhvdXRcbiAgICAgKiByZXF1aXJpbmcgdGhhdCB0aGUgYGRpc3BhdGNoTWFya2VyYCBiZSB0aGUgc2FtZSBhcyB0aGUgZGlzcGF0Y2hlZCBJRC5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGluc3QsIGlnbm9yZWREaXJlY3Rpb24sIGV2ZW50KSB7XG4gICAgICBpZiAoaW5zdCAmJiBldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZTtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICAgICk7XG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY2N1bXVsYXRlcyBkaXNwYXRjaGVzIG9uIGFuIGBTeW50aGV0aWNFdmVudGAsIGJ1dCBvbmx5IGZvciB0aGVcbiAgICAgKiBgZGlzcGF0Y2hNYXJrZXJgLlxuICAgICAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgICAgYWNjdW11bGF0ZURpc3BhdGNoZXMoZXZlbnQuX3RhcmdldEluc3QsIG51bGwsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKTtcbiAgICB9IC8vIEVuZCBvZiBpbmxpbmVcblxuICAgIHZhciBSZWFjdE5hdGl2ZUJyaWRnZUV2ZW50UGx1Z2luID0ge1xuICAgICAgZXZlbnRUeXBlczoge30sXG4gICAgICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApIHtcbiAgICAgICAgaWYgKHRhcmdldEluc3QgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFByb2JhYmx5IGEgbm9kZSBiZWxvbmdpbmcgdG8gYW5vdGhlciByZW5kZXJlcidzIHRyZWUuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnViYmxlRGlzcGF0Y2hDb25maWcgPSBjdXN0b21CdWJibGluZ0V2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXTtcbiAgICAgICAgdmFyIGRpcmVjdERpc3BhdGNoQ29uZmlnID0gY3VzdG9tRGlyZWN0RXZlbnRUeXBlc1t0b3BMZXZlbFR5cGVdO1xuXG4gICAgICAgIGlmICghYnViYmxlRGlzcGF0Y2hDb25maWcgJiYgIWRpcmVjdERpc3BhdGNoQ29uZmlnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSAtIEZsb3cgZG9lc24ndCBsaWtlIHRoaXMgc3RyaW5nIGNvZXJjaW9uIGJlY2F1c2UgRE9NVG9wTGV2ZWxFdmVudFR5cGUgaXMgb3BhcXVlXG4gICAgICAgICAgICAnVW5zdXBwb3J0ZWQgdG9wIGxldmVsIGV2ZW50IHR5cGUgXCInICsgdG9wTGV2ZWxUeXBlICsgJ1wiIGRpc3BhdGNoZWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBldmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICBidWJibGVEaXNwYXRjaENvbmZpZyB8fCBkaXJlY3REaXNwYXRjaENvbmZpZyxcbiAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGJ1YmJsZURpc3BhdGNoQ29uZmlnKSB7XG4gICAgICAgICAgdmFyIHNraXBCdWJibGluZyA9XG4gICAgICAgICAgICBldmVudCAhPSBudWxsICYmXG4gICAgICAgICAgICBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyAhPSBudWxsICYmXG4gICAgICAgICAgICBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcy5za2lwQnViYmxpbmc7XG5cbiAgICAgICAgICBpZiAoc2tpcEJ1YmJsaW5nKSB7XG4gICAgICAgICAgICBhY2N1bXVsYXRlQ2FwdHVyZVBoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3REaXNwYXRjaENvbmZpZykge1xuICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIFJlYWN0TmF0aXZlRXZlbnRQbHVnaW5PcmRlciA9IFtcbiAgICAgIFwiUmVzcG9uZGVyRXZlbnRQbHVnaW5cIixcbiAgICAgIFwiUmVhY3ROYXRpdmVCcmlkZ2VFdmVudFBsdWdpblwiXG4gICAgXTtcblxuICAgIC8qKlxuICAgICAqIE1ha2Ugc3VyZSBlc3NlbnRpYWwgZ2xvYmFscyBhcmUgYXZhaWxhYmxlIGFuZCBhcmUgcGF0Y2hlZCBjb3JyZWN0bHkuIFBsZWFzZSBkb24ndCByZW1vdmUgdGhpc1xuICAgICAqIGxpbmUuIEJ1bmRsZXMgY3JlYXRlZCBieSByZWFjdC1wYWNrYWdlciBgcmVxdWlyZWAgaXQgYmVmb3JlIGV4ZWN1dGluZyBhbnkgYXBwbGljYXRpb24gY29kZS4gVGhpc1xuICAgICAqIGVuc3VyZXMgaXQgZXhpc3RzIGluIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBjYW4gYmUgYHJlcXVpcmVgZC5cbiAgICAgKiBUT0RPOiByZXF1aXJlIHRoaXMgaW4gcGFja2FnZXIsIG5vdCBpbiBSZWFjdCAjMTA5MzI1MTdcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBJbmplY3QgbW9kdWxlIGZvciByZXNvbHZpbmcgRE9NIGhpZXJhcmNoeSBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICAgICAqL1xuXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcihSZWFjdE5hdGl2ZUV2ZW50UGx1Z2luT3JkZXIpO1xuICAgIC8qKlxuICAgICAqIFNvbWUgaW1wb3J0YW50IGV2ZW50IHBsdWdpbnMgaW5jbHVkZWQgYnkgZGVmYXVsdCAod2l0aG91dCBoYXZpbmcgdG8gcmVxdWlyZVxuICAgICAqIHRoZW0pLlxuICAgICAqL1xuXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtcbiAgICAgIFJlc3BvbmRlckV2ZW50UGx1Z2luOiBSZXNwb25kZXJFdmVudFBsdWdpbixcbiAgICAgIFJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW46IFJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW5cbiAgICB9KTtcblxuICAgIC8vIE1vZHVsZXMgcHJvdmlkZWQgYnkgUk46XG4gICAgdmFyIGVtcHR5T2JqZWN0JDEgPSB7fTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBwYXlsb2FkIHRoYXQgY29udGFpbnMgYWxsIHRoZSB1cGRhdGVzIGJldHdlZW4gdHdvIHNldHMgb2YgcHJvcHMuXG4gICAgICpcbiAgICAgKiBUaGVzZSBoZWxwZXJzIGFyZSBhbGwgZW5jYXBzdWxhdGVkIGludG8gYSBzaW5nbGUgbW9kdWxlLCBiZWNhdXNlIHRoZXkgdXNlXG4gICAgICogbXV0YXRpb24gYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2hpY2ggbGVhZHMgdG8gc3VidGxlIHNoYXJlZFxuICAgICAqIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBjb2RlIHBhdGhzLiBUbyBhdm9pZCB0aGlzIG11dGFibGUgc3RhdGUgbGVha2luZ1xuICAgICAqIGFjcm9zcyBtb2R1bGVzLCBJJ3ZlIGtlcHQgdGhlbSBpc29sYXRlZCB0byB0aGlzIG1vZHVsZS5cbiAgICAgKi9cbiAgICAvLyBUcmFja3MgcmVtb3ZlZCBrZXlzXG5cbiAgICB2YXIgcmVtb3ZlZEtleXMgPSBudWxsO1xuICAgIHZhciByZW1vdmVkS2V5Q291bnQgPSAwO1xuICAgIHZhciBkZWVwRGlmZmVyT3B0aW9ucyA9IHtcbiAgICAgIHVuc2FmZWx5SWdub3JlRnVuY3Rpb25zOiB0cnVlXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGRlZmF1bHREaWZmZXIocHJldlByb3AsIG5leHRQcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wICE9PSBcIm9iamVjdFwiIHx8IG5leHRQcm9wID09PSBudWxsKSB7XG4gICAgICAgIC8vIFNjYWxhcnMgaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tlZCBmb3IgZXF1YWxpdHlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2JqZWN0cyBhbmQgYXJyYXlzLCB0aGUgZGVmYXVsdCBkaWZmaW5nIGFsZ29yaXRobSBpcyBhIGRlZXAgY29tcGFyZVxuICAgICAgICByZXR1cm4gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmRlZXBEaWZmZXIoXG4gICAgICAgICAgcHJldlByb3AsXG4gICAgICAgICAgbmV4dFByb3AsXG4gICAgICAgICAgZGVlcERpZmZlck9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXN0b3JlRGVsZXRlZFZhbHVlc0luTmVzdGVkQXJyYXkoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgbm9kZSxcbiAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICkge1xuICAgICAgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgdmFyIGkgPSBub2RlLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaS0tICYmIHJlbW92ZWRLZXlDb3VudCA+IDApIHtcbiAgICAgICAgICByZXN0b3JlRGVsZXRlZFZhbHVlc0luTmVzdGVkQXJyYXkoXG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgbm9kZVtpXSxcbiAgICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZSAmJiByZW1vdmVkS2V5Q291bnQgPiAwKSB7XG4gICAgICAgIHZhciBvYmogPSBub2RlO1xuXG4gICAgICAgIGZvciAodmFyIHByb3BLZXkgaW4gcmVtb3ZlZEtleXMpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICBpZiAoIXJlbW92ZWRLZXlzW3Byb3BLZXldKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV4dFByb3AgPSBvYmpbcHJvcEtleV07XG5cbiAgICAgICAgICBpZiAobmV4dFByb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1twcm9wS2V5XTtcblxuICAgICAgICAgIGlmICghYXR0cmlidXRlQ29uZmlnKSB7XG4gICAgICAgICAgICBjb250aW51ZTsgLy8gbm90IGEgdmFsaWQgbmF0aXZlIHByb3BcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICAgIG5leHRQcm9wID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICBuZXh0UHJvcCA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVDb25maWcgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIC8vIGNhc2U6ICFPYmplY3QgaXMgdGhlIGRlZmF1bHQgY2FzZVxuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFtwcm9wS2V5XSA9IG5leHRQcm9wO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmRpZmYgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGNhc2U6IEN1c3RvbUF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHZhciBuZXh0VmFsdWUgPVxuICAgICAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MobmV4dFByb3ApXG4gICAgICAgICAgICAgICAgOiBuZXh0UHJvcDtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWRbcHJvcEtleV0gPSBuZXh0VmFsdWU7XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgIHJlbW92ZWRLZXlzW3Byb3BLZXldID0gZmFsc2U7XG4gICAgICAgICAgcmVtb3ZlZEtleUNvdW50LS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmTmVzdGVkQXJyYXlQcm9wZXJ0eShcbiAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICBwcmV2QXJyYXksXG4gICAgICBuZXh0QXJyYXksXG4gICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICApIHtcbiAgICAgIHZhciBtaW5MZW5ndGggPVxuICAgICAgICBwcmV2QXJyYXkubGVuZ3RoIDwgbmV4dEFycmF5Lmxlbmd0aFxuICAgICAgICAgID8gcHJldkFycmF5Lmxlbmd0aFxuICAgICAgICAgIDogbmV4dEFycmF5Lmxlbmd0aDtcbiAgICAgIHZhciBpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbWluTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gRGlmZiBhbnkgaXRlbXMgaW4gdGhlIGFycmF5IGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4gUmVwZWF0ZWQga2V5c1xuICAgICAgICAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGxhdGVyIHZhbHVlcy5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IGRpZmZOZXN0ZWRQcm9wZXJ0eShcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgIHByZXZBcnJheVtpXSxcbiAgICAgICAgICBuZXh0QXJyYXlbaV0sXG4gICAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBpIDwgcHJldkFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIENsZWFyIG91dCBhbGwgcmVtYWluaW5nIHByb3BlcnRpZXMuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBjbGVhck5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgcHJldkFycmF5W2ldLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IG5leHRBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBBZGQgYWxsIHJlbWFpbmluZyBwcm9wZXJ0aWVzLlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gYWRkTmVzdGVkUHJvcGVydHkoXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICBuZXh0QXJyYXlbaV0sXG4gICAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmZOZXN0ZWRQcm9wZXJ0eShcbiAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICBwcmV2UHJvcCxcbiAgICAgIG5leHRQcm9wLFxuICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgKSB7XG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgcHJldlByb3AgPT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIElmIG5vIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGFkZGVkLCB0aGVuIHdlIGNhbiBiYWlsIG91dCBxdWlja2x5IG9uIG9iamVjdFxuICAgICAgICAvLyBlcXVhbGl0eS5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHJldlByb3AgfHwgIW5leHRQcm9wKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIHJldHVybiBhZGROZXN0ZWRQcm9wZXJ0eSh1cGRhdGVQYXlsb2FkLCBuZXh0UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2UHJvcCkge1xuICAgICAgICAgIHJldHVybiBjbGVhck5lc3RlZFByb3BlcnR5KHVwZGF0ZVBheWxvYWQsIHByZXZQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBcnJheShwcmV2UHJvcCkgJiYgIWlzQXJyYXkobmV4dFByb3ApKSB7XG4gICAgICAgIC8vIEJvdGggYXJlIGxlYXZlcywgd2UgY2FuIGRpZmYgdGhlIGxlYXZlcy5cbiAgICAgICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgcHJldlByb3AsXG4gICAgICAgICAgbmV4dFByb3AsXG4gICAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KHByZXZQcm9wKSAmJiBpc0FycmF5KG5leHRQcm9wKSkge1xuICAgICAgICAvLyBCb3RoIGFyZSBhcnJheXMsIHdlIGNhbiBkaWZmIHRoZSBhcnJheXMuXG4gICAgICAgIHJldHVybiBkaWZmTmVzdGVkQXJyYXlQcm9wZXJ0eShcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgIHByZXZQcm9wLFxuICAgICAgICAgIG5leHRQcm9wLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShwcmV2UHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmZsYXR0ZW5TdHlsZShwcmV2UHJvcCksXG4gICAgICAgICAgbmV4dFByb3AsXG4gICAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgcHJldlByb3AsXG4gICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5mbGF0dGVuU3R5bGUobmV4dFByb3ApLFxuICAgICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGFkZE5lc3RlZFByb3BlcnR5IHRha2VzIGEgc2luZ2xlIHNldCBvZiBwcm9wcyBhbmQgdmFsaWQgYXR0cmlidXRlXG4gICAgICogYXR0cmlidXRlIGNvbmZpZ3VyYXRpb25zLiBJdCBwcm9jZXNzZXMgZWFjaCBwcm9wIGFuZCBhZGRzIGl0IHRvIHRoZVxuICAgICAqIHVwZGF0ZVBheWxvYWQuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBhZGROZXN0ZWRQcm9wZXJ0eSh1cGRhdGVQYXlsb2FkLCBuZXh0UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoIW5leHRQcm9wKSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXJyYXkobmV4dFByb3ApKSB7XG4gICAgICAgIC8vIEFkZCBlYWNoIHByb3BlcnR5IG9mIHRoZSBsZWFmLlxuICAgICAgICByZXR1cm4gYWRkUHJvcGVydGllcyh1cGRhdGVQYXlsb2FkLCBuZXh0UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0UHJvcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBBZGQgYWxsIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhcnJheS5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IGFkZE5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgbmV4dFByb3BbaV0sXG4gICAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjbGVhck5lc3RlZFByb3BlcnR5IHRha2VzIGEgc2luZ2xlIHNldCBvZiBwcm9wcyBhbmQgdmFsaWQgYXR0cmlidXRlcy4gSXRcbiAgICAgKiBhZGRzIGEgbnVsbCBzZW50aW5lbCB0byB0aGUgdXBkYXRlUGF5bG9hZCwgZm9yIGVhY2ggcHJvcCBrZXkuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBjbGVhck5lc3RlZFByb3BlcnR5KHVwZGF0ZVBheWxvYWQsIHByZXZQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmICghcHJldlByb3ApIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBcnJheShwcmV2UHJvcCkpIHtcbiAgICAgICAgLy8gQWRkIGVhY2ggcHJvcGVydHkgb2YgdGhlIGxlYWYuXG4gICAgICAgIHJldHVybiBjbGVhclByb3BlcnRpZXModXBkYXRlUGF5bG9hZCwgcHJldlByb3AsIHZhbGlkQXR0cmlidXRlcyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldlByb3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gQWRkIGFsbCB0aGUgcHJvcGVydGllcyBvZiB0aGUgYXJyYXkuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBjbGVhck5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgcHJldlByb3BbaV0sXG4gICAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBkaWZmUHJvcGVydGllcyB0YWtlcyB0d28gc2V0cyBvZiBwcm9wcyBhbmQgYSBzZXQgb2YgdmFsaWQgYXR0cmlidXRlc1xuICAgICAqIGFuZCB3cml0ZSB0byB1cGRhdGVQYXlsb2FkIHRoZSB2YWx1ZXMgdGhhdCBjaGFuZ2VkIG9yIHdlcmUgZGVsZXRlZC5cbiAgICAgKiBJZiBubyB1cGRhdGVQYXlsb2FkIGlzIHByb3ZpZGVkLCBhIG5ldyBvbmUgaXMgY3JlYXRlZCBhbmQgcmV0dXJuZWQgaWZcbiAgICAgKiBhbnl0aGluZyBjaGFuZ2VkLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldlByb3BzLFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgKSB7XG4gICAgICB2YXIgYXR0cmlidXRlQ29uZmlnO1xuICAgICAgdmFyIG5leHRQcm9wO1xuICAgICAgdmFyIHByZXZQcm9wO1xuXG4gICAgICBmb3IgKHZhciBwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgICAgICBhdHRyaWJ1dGVDb25maWcgPSB2YWxpZEF0dHJpYnV0ZXNbcHJvcEtleV07XG5cbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVDb25maWcpIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gbm90IGEgdmFsaWQgbmF0aXZlIHByb3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZQcm9wID0gcHJldlByb3BzW3Byb3BLZXldO1xuICAgICAgICBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTsgLy8gZnVuY3Rpb25zIGFyZSBjb252ZXJ0ZWQgdG8gYm9vbGVhbnMgYXMgbWFya2VycyB0aGF0IHRoZSBhc3NvY2lhdGVkXG4gICAgICAgIC8vIGV2ZW50cyBzaG91bGQgYmUgc2VudCBmcm9tIG5hdGl2ZS5cblxuICAgICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBuZXh0UHJvcCA9IHRydWU7IC8vIElmIG5leHRQcm9wIGlzIG5vdCBhIGZ1bmN0aW9uLCB0aGVuIGRvbid0IGJvdGhlciBjaGFuZ2luZyBwcmV2UHJvcFxuICAgICAgICAgIC8vIHNpbmNlIG5leHRQcm9wIHdpbGwgd2luIGFuZCBnbyBpbnRvIHRoZSB1cGRhdGVQYXlsb2FkIHJlZ2FyZGxlc3MuXG5cbiAgICAgICAgICBpZiAodHlwZW9mIHByZXZQcm9wID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHByZXZQcm9wID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQW4gZXhwbGljaXQgdmFsdWUgb2YgdW5kZWZpbmVkIGlzIHRyZWF0ZWQgYXMgYSBudWxsIGJlY2F1c2UgaXQgb3ZlcnJpZGVzXG4gICAgICAgIC8vIGFueSBvdGhlciBwcmVjZWRpbmcgdmFsdWUuXG5cbiAgICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIG5leHRQcm9wID0gbnVsbDtcblxuICAgICAgICAgIGlmICh0eXBlb2YgcHJldlByb3AgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHByZXZQcm9wID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVtb3ZlZEtleXMpIHtcbiAgICAgICAgICByZW1vdmVkS2V5c1twcm9wS2V5XSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgJiYgdXBkYXRlUGF5bG9hZFtwcm9wS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIGVsc2UgYWxyZWFkeSB0cmlnZ2VyZWQgYW4gdXBkYXRlIHRvIHRoaXMga2V5IGJlY2F1c2UgYW5vdGhlclxuICAgICAgICAgIC8vIHZhbHVlIGRpZmZlZC4gU2luY2Ugd2UncmUgbm93IGxhdGVyIGluIHRoZSBuZXN0ZWQgYXJyYXlzIG91ciB2YWx1ZSBpc1xuICAgICAgICAgIC8vIG1vcmUgaW1wb3J0YW50IHNvIHdlIG5lZWQgdG8gY2FsY3VsYXRlIGl0IGFuZCBvdmVycmlkZSB0aGUgZXhpc3RpbmdcbiAgICAgICAgICAvLyB2YWx1ZS4gSXQgZG9lc24ndCBtYXR0ZXIgaWYgbm90aGluZyBjaGFuZ2VkLCB3ZSdsbCBzZXQgaXQgYW55d2F5LlxuICAgICAgICAgIC8vIFBhdHRlcm4gbWF0Y2ggb246IGF0dHJpYnV0ZUNvbmZpZ1xuICAgICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBjYXNlOiAhT2JqZWN0IGlzIHRoZSBkZWZhdWx0IGNhc2VcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWRbcHJvcEtleV0gPSBuZXh0UHJvcDtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBjYXNlOiBDdXN0b21BdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gICAgICAgICAgICB2YXIgbmV4dFZhbHVlID1cbiAgICAgICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzKG5leHRQcm9wKVxuICAgICAgICAgICAgICAgIDogbmV4dFByb3A7XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gbmV4dFZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZQcm9wID09PSBuZXh0UHJvcCkge1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3RoaW5nIGNoYW5nZWRcbiAgICAgICAgfSAvLyBQYXR0ZXJuIG1hdGNoIG9uOiBhdHRyaWJ1dGVDb25maWdcblxuICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZUNvbmZpZyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIC8vIGNhc2U6ICFPYmplY3QgaXMgdGhlIGRlZmF1bHQgY2FzZVxuICAgICAgICAgIGlmIChkZWZhdWx0RGlmZmVyKHByZXZQcm9wLCBuZXh0UHJvcCkpIHtcbiAgICAgICAgICAgIC8vIGEgbm9ybWFsIGxlYWYgaGFzIGNoYW5nZWRcbiAgICAgICAgICAgICh1cGRhdGVQYXlsb2FkIHx8ICh1cGRhdGVQYXlsb2FkID0ge30pKVtwcm9wS2V5XSA9IG5leHRQcm9wO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmRpZmYgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGNhc2U6IEN1c3RvbUF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cbiAgICAgICAgICB2YXIgc2hvdWxkVXBkYXRlID1cbiAgICAgICAgICAgIHByZXZQcm9wID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmRpZmYgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5kaWZmKHByZXZQcm9wLCBuZXh0UHJvcClcbiAgICAgICAgICAgICAgOiBkZWZhdWx0RGlmZmVyKHByZXZQcm9wLCBuZXh0UHJvcCkpO1xuXG4gICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgICAgICAgdmFyIF9uZXh0VmFsdWUgPVxuICAgICAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09IFwiZnVuY3Rpb25cIiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzKG5leHRQcm9wKVxuICAgICAgICAgICAgICAgIDogbmV4dFByb3A7XG5cbiAgICAgICAgICAgICh1cGRhdGVQYXlsb2FkIHx8ICh1cGRhdGVQYXlsb2FkID0ge30pKVtwcm9wS2V5XSA9IF9uZXh0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRlZmF1bHQ6IGZhbGx0aHJvdWdoIGNhc2Ugd2hlbiBuZXN0ZWQgcHJvcGVydGllcyBhcmUgZGVmaW5lZFxuICAgICAgICAgIHJlbW92ZWRLZXlzID0gbnVsbDtcbiAgICAgICAgICByZW1vdmVkS2V5Q291bnQgPSAwOyAvLyBXZSB0aGluayB0aGF0IGF0dHJpYnV0ZUNvbmZpZyBpcyBub3QgQ3VzdG9tQXR0cmlidXRlQ29uZmlndXJhdGlvbiBhdFxuICAgICAgICAgIC8vIHRoaXMgcG9pbnQgc28gd2UgYXNzdW1lIGl0IG11c3QgYmUgQXR0cmlidXRlQ29uZmlndXJhdGlvbi5cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBkaWZmTmVzdGVkUHJvcGVydHkoXG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgcHJldlByb3AsXG4gICAgICAgICAgICBuZXh0UHJvcCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZUNvbmZpZ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVtb3ZlZEtleUNvdW50ID4gMCAmJiB1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgICAgICByZXN0b3JlRGVsZXRlZFZhbHVlc0luTmVzdGVkQXJyYXkoXG4gICAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgICAgIG5leHRQcm9wLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVDb25maWdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZW1vdmVkS2V5cyA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIEFsc28gaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgcHJldmlvdXMgcHJvcHMgdG8gY2F0Y2ggYW55IHRoYXQgaGF2ZSBiZWVuXG4gICAgICAvLyByZW1vdmVkIGFuZCBtYWtlIHN1cmUgbmF0aXZlIGdldHMgdGhlIHNpZ25hbCBzbyBpdCBjYW4gcmVzZXQgdGhlbSB0byB0aGVcbiAgICAgIC8vIGRlZmF1bHQuXG5cbiAgICAgIGZvciAodmFyIF9wcm9wS2V5IGluIHByZXZQcm9wcykge1xuICAgICAgICBpZiAobmV4dFByb3BzW19wcm9wS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29udGludWU7IC8vIHdlJ3ZlIGFscmVhZHkgY292ZXJlZCB0aGlzIGtleSBpbiB0aGUgcHJldmlvdXMgcGFzc1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0cmlidXRlQ29uZmlnID0gdmFsaWRBdHRyaWJ1dGVzW19wcm9wS2V5XTtcblxuICAgICAgICBpZiAoIWF0dHJpYnV0ZUNvbmZpZykge1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3QgYSB2YWxpZCBuYXRpdmUgcHJvcFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgJiYgdXBkYXRlUGF5bG9hZFtfcHJvcEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFRoaXMgd2FzIGFscmVhZHkgdXBkYXRlZCB0byBhIGRpZmYgcmVzdWx0IGVhcmxpZXIuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2UHJvcCA9IHByZXZQcm9wc1tfcHJvcEtleV07XG5cbiAgICAgICAgaWYgKHByZXZQcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gd2FzIGFscmVhZHkgZW1wdHkgYW55d2F5XG4gICAgICAgIH0gLy8gUGF0dGVybiBtYXRjaCBvbjogYXR0cmlidXRlQ29uZmlnXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmRpZmYgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGNhc2U6IEN1c3RvbUF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gfCAhT2JqZWN0XG4gICAgICAgICAgLy8gRmxhZyB0aGUgbGVhZiBwcm9wZXJ0eSBmb3IgcmVtb3ZhbCBieSBzZW5kaW5nIGEgc2VudGluZWwuXG4gICAgICAgICAgKHVwZGF0ZVBheWxvYWQgfHwgKHVwZGF0ZVBheWxvYWQgPSB7fSkpW19wcm9wS2V5XSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoIXJlbW92ZWRLZXlzKSB7XG4gICAgICAgICAgICByZW1vdmVkS2V5cyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcmVtb3ZlZEtleXNbX3Byb3BLZXldKSB7XG4gICAgICAgICAgICByZW1vdmVkS2V5c1tfcHJvcEtleV0gPSB0cnVlO1xuICAgICAgICAgICAgcmVtb3ZlZEtleUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIG5lc3RlZCBhdHRyaWJ1dGUgY29uZmlndXJhdGlvbiB3aGVyZSBhbGwgdGhlIHByb3BlcnRpZXNcbiAgICAgICAgICAvLyB3ZXJlIHJlbW92ZWQgc28gd2UgbmVlZCB0byBnbyB0aHJvdWdoIGFuZCBjbGVhciBvdXQgYWxsIG9mIHRoZW0uXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IGNsZWFyTmVzdGVkUHJvcGVydHkoXG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgcHJldlByb3AsXG4gICAgICAgICAgICBhdHRyaWJ1dGVDb25maWdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBhZGRQcm9wZXJ0aWVzIGFkZHMgYWxsIHRoZSB2YWxpZCBwcm9wcyB0byB0aGUgcGF5bG9hZCBhZnRlciBiZWluZyBwcm9jZXNzZWQuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBhZGRQcm9wZXJ0aWVzKHVwZGF0ZVBheWxvYWQsIHByb3BzLCB2YWxpZEF0dHJpYnV0ZXMpIHtcbiAgICAgIC8vIFRPRE86IEZhc3QgcGF0aFxuICAgICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICBlbXB0eU9iamVjdCQxLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjbGVhclByb3BlcnRpZXMgY2xlYXJzIGFsbCB0aGUgcHJldmlvdXMgcHJvcHMgYnkgYWRkaW5nIGEgbnVsbCBzZW50aW5lbFxuICAgICAqIHRvIHRoZSBwYXlsb2FkIGZvciBlYWNoIHZhbGlkIGtleS5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGNsZWFyUHJvcGVydGllcyh1cGRhdGVQYXlsb2FkLCBwcmV2UHJvcHMsIHZhbGlkQXR0cmlidXRlcykge1xuICAgICAgLy8gVE9ETzogRmFzdCBwYXRoXG4gICAgICByZXR1cm4gZGlmZlByb3BlcnRpZXMoXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgZW1wdHlPYmplY3QkMSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZShwcm9wcywgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gYWRkUHJvcGVydGllcyhcbiAgICAgICAgbnVsbCwgLy8gdXBkYXRlUGF5bG9hZFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmKHByZXZQcm9wcywgbmV4dFByb3BzLCB2YWxpZEF0dHJpYnV0ZXMpIHtcbiAgICAgIHJldHVybiBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgbnVsbCwgLy8gdXBkYXRlUGF5bG9hZFxuICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFVzZWQgYXMgYSB3YXkgdG8gY2FsbCBiYXRjaGVkVXBkYXRlcyB3aGVuIHdlIGRvbid0IGhhdmUgYSByZWZlcmVuY2UgdG9cbiAgICAvLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbiAgICAvLyBsaWJyYXJpZXMgbmVlZCB0byBjYWxsIGJhdGNoZWRVcGRhdGVzLiBFdmVudHVhbGx5LCB0aGlzIEFQSSB3aWxsIGdvIGF3YXkgd2hlblxuICAgIC8vIGV2ZXJ5dGhpbmcgaXMgYmF0Y2hlZCBieSBkZWZhdWx0LiBXZSdsbCB0aGVuIGhhdmUgYSBzaW1pbGFyIEFQSSB0byBvcHQtb3V0IG9mXG4gICAgLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cbiAgICAvLyBEZWZhdWx0c1xuICAgIHZhciBiYXRjaGVkVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGJvb2trZWVwaW5nKSB7XG4gICAgICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xuICAgIH07XG5cbiAgICB2YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBib29ra2VlcGluZykge1xuICAgICAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgICAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICAgICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgICAgIH1cblxuICAgICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYmF0Y2hlZFVwZGF0ZXNJbXBsKGZuLCBib29ra2VlcGluZyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKFxuICAgICAgX2JhdGNoZWRVcGRhdGVzSW1wbCxcbiAgICAgIF9kaXNjcmV0ZVVwZGF0ZXNJbXBsXG4gICAgKSB7XG4gICAgICBiYXRjaGVkVXBkYXRlc0ltcGwgPSBfYmF0Y2hlZFVwZGF0ZXNJbXBsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHF1ZXVlIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdGhlaXIgZGlzcGF0Y2hlcyBhbmQgYXJlXG4gICAgICogd2FpdGluZyB0byBoYXZlIHRoZWlyIGRpc3BhdGNoZXMgZXhlY3V0ZWQuXG4gICAgICovXG5cbiAgICB2YXIgZXZlbnRRdWV1ZSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogRGlzcGF0Y2hlcyBhbiBldmVudCBhbmQgcmVsZWFzZXMgaXQgYmFjayBpbnRvIHRoZSBwb29sLCB1bmxlc3MgcGVyc2lzdGVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gZXZlbnQgU3ludGhldGljIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZShldmVudCkge1xuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5pc1BlcnNpc3RlbnQoKSkge1xuICAgICAgICAgIGV2ZW50LmNvbnN0cnVjdG9yLnJlbGVhc2UoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2VUb3BMZXZlbChlKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bkV2ZW50c0luQmF0Y2goZXZlbnRzKSB7XG4gICAgICBpZiAoZXZlbnRzICE9PSBudWxsKSB7XG4gICAgICAgIGV2ZW50UXVldWUgPSBhY2N1bXVsYXRlSW50byhldmVudFF1ZXVlLCBldmVudHMpO1xuICAgICAgfSAvLyBTZXQgYGV2ZW50UXVldWVgIHRvIG51bGwgYmVmb3JlIHByb2Nlc3NpbmcgaXQgc28gdGhhdCB3ZSBjYW4gdGVsbCBpZiBtb3JlXG4gICAgICAvLyBldmVudHMgZ2V0IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG5cbiAgICAgIHZhciBwcm9jZXNzaW5nRXZlbnRRdWV1ZSA9IGV2ZW50UXVldWU7XG4gICAgICBldmVudFF1ZXVlID0gbnVsbDtcblxuICAgICAgaWYgKCFwcm9jZXNzaW5nRXZlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChcbiAgICAgICAgcHJvY2Vzc2luZ0V2ZW50UXVldWUsXG4gICAgICAgIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVRvcExldmVsXG4gICAgICApO1xuXG4gICAgICBpZiAoZXZlbnRRdWV1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJwcm9jZXNzRXZlbnRRdWV1ZSgpOiBBZGRpdGlvbmFsIGV2ZW50cyB3ZXJlIGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcgXCIgK1xuICAgICAgICAgICAgXCJhbiBldmVudCBxdWV1ZS4gU3VwcG9ydCBmb3IgdGhpcyBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkLlwiXG4gICAgICAgICk7XG4gICAgICB9IC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBpZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuXG4gICAgICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgcmVnaXN0ZXJlZCBwbHVnaW5zIGFuIG9wcG9ydHVuaXR5IHRvIGV4dHJhY3QgZXZlbnRzIGZyb20gdG9wLWxldmVsXG4gICAgICogbmF0aXZlIGJyb3dzZXIgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleHRyYWN0UGx1Z2luRXZlbnRzKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHZhciBldmVudHMgPSBudWxsO1xuICAgICAgdmFyIGxlZ2FjeVBsdWdpbnMgPSBwbHVnaW5zO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlZ2FjeVBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gTm90IGV2ZXJ5IHBsdWdpbiBpbiB0aGUgb3JkZXJpbmcgbWF5IGJlIGxvYWRlZCBhdCBydW50aW1lLlxuICAgICAgICB2YXIgcG9zc2libGVQbHVnaW4gPSBsZWdhY3lQbHVnaW5zW2ldO1xuXG4gICAgICAgIGlmIChwb3NzaWJsZVBsdWdpbikge1xuICAgICAgICAgIHZhciBleHRyYWN0ZWRFdmVudHMgPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKFxuICAgICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGV4dHJhY3RlZEV2ZW50cykge1xuICAgICAgICAgICAgZXZlbnRzID0gYWNjdW11bGF0ZUludG8oZXZlbnRzLCBleHRyYWN0ZWRFdmVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bkV4dHJhY3RlZFBsdWdpbkV2ZW50c0luQmF0Y2goXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0YXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICkge1xuICAgICAgdmFyIGV2ZW50cyA9IGV4dHJhY3RQbHVnaW5FdmVudHMoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApO1xuICAgICAgcnVuRXZlbnRzSW5CYXRjaChldmVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQodGFyZ2V0LCB0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gICAgICB2YXIgdGFyZ2V0RmliZXIgPSB0YXJnZXQ7XG4gICAgICB2YXIgZXZlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgICBpZiAodGFyZ2V0RmliZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgc3RhdGVOb2RlID0gdGFyZ2V0RmliZXIuc3RhdGVOb2RlOyAvLyBHdWFyZCBhZ2FpbnN0IEZpYmVyIGJlaW5nIHVubW91bnRlZFxuXG4gICAgICAgIGlmIChzdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtY2FzdF0gcHVibGljIGluc3RhbmNlcyBpbiBGYWJyaWMgZG8gbm90IGltcGxlbWVudCBgRXZlbnRUYXJnZXRgIHlldC5cbiAgICAgICAgICBldmVudFRhcmdldCA9IGdldFB1YmxpY0luc3RhbmNlKHN0YXRlTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYmF0Y2hlZFVwZGF0ZXMkMShmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEVtaXQgZXZlbnQgdG8gdGhlIFJhd0V2ZW50RW1pdHRlci4gVGhpcyBpcyBhbiB1bnVzZWQtYnktZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiAgICAgICAgLy8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnN0cnVtZW50IGV2ZW50IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgKHByaW1hcmlseSAtIGNvdWxkIGJlIHVzZWZ1bFxuICAgICAgICAvLyBmb3Igb3RoZXIgdGhpbmdzIHRvbykuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5PVEU6IHRoaXMgbWVyZWx5IGVtaXRzIGV2ZW50cyBpbnRvIHRoZSBFdmVudEVtaXR0ZXIgYmVsb3cuXG4gICAgICAgIC8vIElmICp5b3UqIGRvIG5vdCBhZGQgbGlzdGVuZXJzIHRvIHRoZSBgUmF3RXZlbnRFbWl0dGVyYCxcbiAgICAgICAgLy8gdGhlbiBhbGwgb2YgdGhlc2UgZW1pdHRlZCBldmVudHMgd2lsbCBqdXN0IGJsYWNraG9sZSBhbmQgYXJlIG5vLW9wcy5cbiAgICAgICAgLy8gSXQgaXMgYXZhaWxhYmxlIChhbHRob3VnaCBub3Qgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuLi4geWV0KSBpZiB5b3Ugd2FudCB0byBjb2xsZWN0XG4gICAgICAgIC8vIHBlcmYgZGF0YSBvbiBldmVudCBsYXRlbmN5IGluIHlvdXIgYXBwbGljYXRpb24sIGFuZCBjb3VsZCBhbHNvIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nXG4gICAgICAgIC8vIGxvdy1sZXZlbCBldmVudHMgaXNzdWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB5b3UgZG8gbm90IGhhdmUgYW55IGV2ZW50IHBlcmYgbW9uaXRvcmluZyBhbmQgYXJlIGV4dHJlbWVseSBjb25jZXJuZWQgYWJvdXQgZXZlbnQgcGVyZixcbiAgICAgICAgLy8gaXQgaXMgc2FmZSB0byBkaXNhYmxlIHRoZXNlIFwiZW1pdFwiIHN0YXRlbWVudHM7IGl0IHdpbGwgcHJldmVudCBjaGVja2luZyB0aGUgc2l6ZSBvZlxuICAgICAgICAvLyBhbiBlbXB0eSBhcnJheSB0d2ljZSBhbmQgcHJldmVudCB0d28gbm8tb3BzLiBQcmFjdGljYWxseSB0aGUgb3ZlcmhlYWQgaXMgc28gbG93IHRoYXRcbiAgICAgICAgLy8gd2UgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGlua2luZyBhYm91dCBpbiBwcm9kOyB5b3VyIHBlcmYgaXNzdWVzIHByb2JhYmx5IGxpZSBlbHNld2hlcmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGVtaXQgdHdvIGV2ZW50cyBoZXJlOiBvbmUgZm9yIGxpc3RlbmVycyB0byB0aGlzIHNwZWNpZmljIGV2ZW50LFxuICAgICAgICAvLyBhbmQgb25lIGZvciB0aGUgY2F0Y2hhbGwgbGlzdGVuZXIgJyonLCBmb3IgYW55IGxpc3RlbmVycyB0aGF0IHdhbnRcbiAgICAgICAgLy8gdG8gYmUgbm90aWZpZWQgZm9yIGFsbCBldmVudHMuXG4gICAgICAgIC8vIE5vdGUgdGhhdCBleHRyYWN0ZWQgZXZlbnRzIGFyZSAqbm90KiBlbWl0dGVkLFxuICAgICAgICAvLyBvbmx5IGV2ZW50cyB0aGF0IGhhdmUgYSAxOjEgbWFwcGluZyB3aXRoIGEgbmF0aXZlIGV2ZW50LCBhdCBsZWFzdCBmb3Igbm93LlxuICAgICAgICB2YXIgZXZlbnQgPSB7XG4gICAgICAgICAgZXZlbnROYW1lOiB0b3BMZXZlbFR5cGUsXG4gICAgICAgICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50XG4gICAgICAgIH07IC8vICRGbG93Rml4TWVbY2xhc3Mtb2JqZWN0LXN1YnR5cGluZ10gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5SYXdFdmVudEVtaXR0ZXIuZW1pdCh0b3BMZXZlbFR5cGUsIGV2ZW50KTsgLy8gJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJhd0V2ZW50RW1pdHRlci5lbWl0KFwiKlwiLCBldmVudCk7IC8vIEhlcml0YWdlIHBsdWdpbiBldmVudCBzeXN0ZW1cblxuICAgICAgICBydW5FeHRyYWN0ZWRQbHVnaW5FdmVudHNJbkJhdGNoKFxuICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgICB0YXJnZXRGaWJlcixcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICBldmVudFRhcmdldFxuICAgICAgICApO1xuICAgICAgfSk7IC8vIFJlYWN0IE5hdGl2ZSBkb2Vzbid0IHVzZSBSZWFjdENvbnRyb2xsZWRDb21wb25lbnQgYnV0IGlmIGl0IGRpZCwgaGVyZSdzXG4gICAgICAvLyB3aGVyZSBpdCB3b3VsZCBkbyBpdC5cbiAgICB9XG5cbiAgICB2YXIgZW5hYmxlU2NoZWR1bGluZ1Byb2ZpbGVyID0gZmFsc2U7XG4gICAgdmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlO1xuICAgIHZhciBlbmFibGVQcm9maWxlckNvbW1pdEhvb2tzID0gdHJ1ZTtcbiAgICB2YXIgZW5hYmxlUHJvZmlsZXJOZXN0ZWRVcGRhdGVQaGFzZSA9IHRydWU7XG4gICAgdmFyIHN5bmNMYW5lRXhwaXJhdGlvbk1zID0gMjUwO1xuICAgIHZhciB0cmFuc2l0aW9uTGFuZUV4cGlyYXRpb25NcyA9IDUwMDA7XG4gICAgdmFyIGVuYWJsZUxhenlDb250ZXh0UHJvcGFnYXRpb24gPSBmYWxzZTtcbiAgICB2YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7XG4gICAgdmFyIGVuYWJsZUFzeW5jQWN0aW9ucyA9IGZhbHNlO1xuICAgIHZhciBwYXNzQ2hpbGRyZW5XaGVuQ2xvbmluZ1BlcnNpc3RlZE5vZGVzID0gZmFsc2U7XG5cbiAgICB2YXIgTm9GbGFncyQxID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAwO1xuICAgIHZhciBQZXJmb3JtZWRXb3JrID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICovXG4gICAgICAxO1xuICAgIHZhciBQbGFjZW1lbnQgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyO1xuICAgIHZhciBEaWRDYXB0dXJlID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxMjg7XG4gICAgdmFyIEh5ZHJhdGluZyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQwOTY7IC8vIFlvdSBjYW4gY2hhbmdlIHRoZSByZXN0IChhbmQgYWRkIG1vcmUpLlxuXG4gICAgdmFyIFVwZGF0ZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQ7XG4gICAgLyogU2tpcHBlZCB2YWx1ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDA7ICovXG5cbiAgICB2YXIgQ2hpbGREZWxldGlvbiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAqL1xuICAgICAgMTY7XG4gICAgdmFyIENvbnRlbnRSZXNldCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDMyO1xuICAgIHZhciBDYWxsYmFjayA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICA2NDtcbiAgICAvKiBVc2VkIGJ5IERpZENhcHR1cmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDsgKi9cblxuICAgIHZhciBGb3JjZUNsaWVudFJlbmRlciA9XG4gICAgICAvKiAgICAgICAgICAgICovXG4gICAgICAyNTY7XG4gICAgdmFyIFJlZiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDUxMjtcbiAgICB2YXIgU25hcHNob3QgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMTAyNDtcbiAgICB2YXIgUGFzc2l2ZSQxID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyMDQ4O1xuICAgIC8qIFVzZWQgYnkgSHlkcmF0aW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMGIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwOyAqL1xuXG4gICAgdmFyIFZpc2liaWxpdHkgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDgxOTI7XG4gICAgdmFyIFN0b3JlQ29uc2lzdGVuY3kgPVxuICAgICAgLyogICAgICAgICAgICAgKi9cbiAgICAgIDE2Mzg0OyAvLyBJdCdzIE9LIHRvIHJldXNlIHRoZXNlIGJpdHMgYmVjYXVzZSB0aGVzZSBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZvclxuICAgIC8vIGRpZmZlcmVudCBmaWJlciB0eXBlcy4gV2Ugc2hvdWxkIHJlYWxseSBiZSBkb2luZyB0aGlzIGZvciBhcyBtYW55IGZsYWdzIGFzXG4gICAgLy8gcG9zc2libGUsIGJlY2F1c2Ugd2UncmUgYWJvdXQgdG8gcnVuIG91dCBvZiBiaXRzLlxuXG4gICAgdmFyIFNjaGVkdWxlUmV0cnkgPSBTdG9yZUNvbnNpc3RlbmN5O1xuICAgIHZhciBTaG91bGRTdXNwZW5kQ29tbWl0ID0gVmlzaWJpbGl0eTtcbiAgICB2YXIgRGlkRGVmZXIgPSBDb250ZW50UmVzZXQ7XG4gICAgdmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuICAgICAgUGFzc2l2ZSQxIHwgVXBkYXRlIHwgQ2FsbGJhY2sgfCBSZWYgfCBTbmFwc2hvdCB8IFN0b3JlQ29uc2lzdGVuY3k7IC8vIFVuaW9uIG9mIGFsbCBjb21taXQgZmxhZ3MgKGZsYWdzIHdpdGggdGhlIGxpZmV0aW1lIG9mIGEgcGFydGljdWxhciBjb21taXQpXG5cbiAgICB2YXIgSG9zdEVmZmVjdE1hc2sgPVxuICAgICAgLyogICAgICAgICAgICAgICAqL1xuICAgICAgMzI3Njc7IC8vIFRoZXNlIGFyZSBub3QgcmVhbGx5IHNpZGUgZWZmZWN0cywgYnV0IHdlIHN0aWxsIHJldXNlIHRoaXMgZmllbGQuXG5cbiAgICB2YXIgSW5jb21wbGV0ZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMzI3Njg7XG4gICAgdmFyIFNob3VsZENhcHR1cmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgKi9cbiAgICAgIDY1NTM2O1xuICAgIHZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbiAgICAgIC8qICovXG4gICAgICAxMzEwNzI7XG4gICAgdmFyIEZvcmtlZCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDEwNDg1NzY7IC8vIFN0YXRpYyB0YWdzIGRlc2NyaWJlIGFzcGVjdHMgb2YgYSBmaWJlciB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIsXG4gICAgLy8gZS5nLiBhIGZpYmVyIHVzZXMgYSBwYXNzaXZlIGVmZmVjdCAoZXZlbiBpZiB0aGVyZSBhcmUgbm8gdXBkYXRlcyBvbiB0aGlzIHBhcnRpY3VsYXIgcmVuZGVyKS5cbiAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gZGVmZXIgbW9yZSB3b3JrIGluIHRoZSB1bm1vdW50IGNhc2UsXG4gICAgLy8gc2luY2Ugd2UgY2FuIGRlZmVyIHRyYXZlcnNpbmcgdGhlIHRyZWUgZHVyaW5nIGxheW91dCB0byBsb29rIGZvciBQYXNzaXZlIGVmZmVjdHMsXG4gICAgLy8gYW5kIGluc3RlYWQgcmVseSBvbiB0aGUgc3RhdGljIGZsYWcgYXMgYSBzaWduYWwgdGhhdCB0aGVyZSBtYXkgYmUgY2xlYW51cCB3b3JrLlxuXG4gICAgdmFyIFJlZlN0YXRpYyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDIwOTcxNTI7XG4gICAgdmFyIExheW91dFN0YXRpYyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQxOTQzMDQ7XG4gICAgdmFyIFBhc3NpdmVTdGF0aWMgPVxuICAgICAgLyogICAgICAgICAgICAgICAgKi9cbiAgICAgIDgzODg2MDg7XG4gICAgdmFyIE1heVN1c3BlbmRDb21taXQgPVxuICAgICAgLyogICAgICAgICAgICAgKi9cbiAgICAgIDE2Nzc3MjE2OyAvLyBGbGFnIHVzZWQgdG8gaWRlbnRpZnkgbmV3bHkgaW5zZXJ0ZWQgZmliZXJzLiBJdCBpc24ndCByZXNldCBhZnRlciBjb21taXQgdW5saWtlIGBQbGFjZW1lbnRgLlxuXG4gICAgdmFyIFBsYWNlbWVudERFViA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDMzNTU0NDMyO1xuICAgIHZhciBNb3VudExheW91dERldiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICovXG4gICAgICA2NzEwODg2NDtcbiAgICB2YXIgTW91bnRQYXNzaXZlRGV2ID1cbiAgICAgIC8qICAgICAgICAgICAgICAqL1xuICAgICAgMTM0MjE3NzI4OyAvLyBHcm91cHMgb2YgZmxhZ3MgdGhhdCBhcmUgdXNlZCBpbiB0aGUgY29tbWl0IHBoYXNlIHRvIHNraXAgb3ZlciB0cmVlcyB0aGF0XG4gICAgLy8gZG9uJ3QgY29udGFpbiBlZmZlY3RzLCBieSBjaGVja2luZyBzdWJ0cmVlRmxhZ3MuXG5cbiAgICB2YXIgQmVmb3JlTXV0YXRpb25NYXNrID0gLy8gVE9ETzogUmVtb3ZlIFVwZGF0ZSBmbGFnIGZyb20gYmVmb3JlIG11dGF0aW9uIHBoYXNlIGJ5IHJlLWxhbmRpbmcgVmlzaWJpbGl0eVxuICAgICAgLy8gZmxhZyBsb2dpYyAoc2VlICMyMDA0MylcbiAgICAgIFVwZGF0ZSB8IFNuYXBzaG90IHwgMDtcbiAgICB2YXIgTXV0YXRpb25NYXNrID1cbiAgICAgIFBsYWNlbWVudCB8XG4gICAgICBVcGRhdGUgfFxuICAgICAgQ2hpbGREZWxldGlvbiB8XG4gICAgICBDb250ZW50UmVzZXQgfFxuICAgICAgUmVmIHxcbiAgICAgIEh5ZHJhdGluZyB8XG4gICAgICBWaXNpYmlsaXR5O1xuICAgIHZhciBMYXlvdXRNYXNrID0gVXBkYXRlIHwgQ2FsbGJhY2sgfCBSZWYgfCBWaXNpYmlsaXR5OyAvLyBUT0RPOiBTcGxpdCBpbnRvIFBhc3NpdmVNb3VudE1hc2sgYW5kIFBhc3NpdmVVbm1vdW50TWFza1xuXG4gICAgdmFyIFBhc3NpdmVNYXNrID0gUGFzc2l2ZSQxIHwgVmlzaWJpbGl0eSB8IENoaWxkRGVsZXRpb247IC8vIFVuaW9uIG9mIHRhZ3MgdGhhdCBkb24ndCBnZXQgcmVzZXQgb24gY2xvbmVzLlxuICAgIC8vIFRoaXMgYWxsb3dzIGNlcnRhaW4gY29uY2VwdHMgdG8gcGVyc2lzdCB3aXRob3V0IHJlY2FsY3VsYXRpbmcgdGhlbSxcbiAgICAvLyBlLmcuIHdoZXRoZXIgYSBzdWJ0cmVlIGNvbnRhaW5zIHBhc3NpdmUgZWZmZWN0cyBvciBwb3J0YWxzLlxuXG4gICAgdmFyIFN0YXRpY01hc2sgPVxuICAgICAgTGF5b3V0U3RhdGljIHwgUGFzc2l2ZVN0YXRpYyB8IFJlZlN0YXRpYyB8IE1heVN1c3BlbmRDb21taXQ7XG5cbiAgICAvLyBUaGlzIG1vZHVsZSBvbmx5IGV4aXN0cyBhcyBhbiBFU00gd3JhcHBlciBhcm91bmQgdGhlIGV4dGVybmFsIENvbW1vbkpTXG4gICAgdmFyIHNjaGVkdWxlQ2FsbGJhY2skMiA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xuICAgIHZhciBjYW5jZWxDYWxsYmFjayQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrO1xuICAgIHZhciBzaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZDtcbiAgICB2YXIgcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludDtcbiAgICB2YXIgbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xuICAgIHZhciBJbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eTtcbiAgICB2YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk7XG4gICAgdmFyIE5vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5O1xuICAgIHZhciBJZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5OyAvLyB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3Qgb24gdGhlIHNjaGVkdWxlciwgYnV0IGl0ICpkb2VzKlxuXG4gICAgLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuICAgIC8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4gICAgLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuICAgIC8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxuICAgIHZhciBkaXNhYmxlZERlcHRoID0gMDtcbiAgICB2YXIgcHJldkxvZztcbiAgICB2YXIgcHJldkluZm87XG4gICAgdmFyIHByZXZXYXJuO1xuICAgIHZhciBwcmV2RXJyb3I7XG4gICAgdmFyIHByZXZHcm91cDtcbiAgICB2YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xuICAgIHZhciBwcmV2R3JvdXBFbmQ7XG5cbiAgICBmdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbiAgICBkaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICAgICAge1xuICAgICAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICAgIH1cblxuICAgICAgICBkaXNhYmxlZERlcHRoKys7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAgICAgIHtcbiAgICAgICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZW5kZXJlcklEID0gbnVsbDtcbiAgICB2YXIgaW5qZWN0ZWRIb29rID0gbnVsbDtcbiAgICB2YXIgaGFzTG9nZ2VkRXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgaXNEZXZUb29sc1ByZXNlbnQgPVxuICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBmdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gICAgICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBObyBEZXZUb29sc1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gICAgICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM4NzdcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgXCIgK1xuICAgICAgICAgICAgICBcIndpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gXCIgK1xuICAgICAgICAgICAgICBcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29sc1wiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSAvLyBEZXZUb29scyBleGlzdHMsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc3VwcG9ydCBGaWJlci5cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGVuYWJsZVNjaGVkdWxpbmdQcm9maWxlcik7XG5cbiAgICAgICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICAgICAgaW5qZWN0ZWRIb29rID0gaG9vaztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy5cIiwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaG9vay5jaGVja0RDRSkge1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWFsIERldlRvb2xzLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgbGlrZWx5IGEgaG9vayBpbnN0YWxsZWQgYnkgRmFzdCBSZWZyZXNoIHJ1bnRpbWUuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBlcnJvcihcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIiwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25Db21taXRSb290KHJvb3QsIGV2ZW50UHJpb3JpdHkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaW5qZWN0ZWRIb29rICYmXG4gICAgICAgIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgICAgICAgIHZhciBzY2hlZHVsZXJQcmlvcml0eTtcblxuICAgICAgICAgICAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgICAgICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBDb250aW51b3VzRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgRGVmYXVsdEV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIElkbGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gSWRsZVByaW9yaXR5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KFxuICAgICAgICAgICAgICByZW5kZXJlcklELFxuICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSxcbiAgICAgICAgICAgICAgZGlkRXJyb3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBlcnJvcihcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIiwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25Qb3N0Q29tbWl0Um9vdChyb290KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uUG9zdENvbW1pdEZpYmVyUm9vdCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBlcnJvcihcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIiwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25Db21taXRVbm1vdW50KGZpYmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBmaWJlcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGVycm9yKFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhuZXdJc1N0cmljdE1vZGUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5ld0lzU3RyaWN0TW9kZSkge1xuICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFByb2ZpbGVyIEFQSSBob29rc1xuXG4gICAgZnVuY3Rpb24gaW5qZWN0UHJvZmlsaW5nSG9va3MocHJvZmlsaW5nSG9va3MpIHt9XG5cbiAgICBmdW5jdGlvbiBnZXRMYW5lTGFiZWxNYXAoKSB7XG4gICAgICB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBOb01vZGUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDA7IC8vIFRPRE86IFJlbW92ZSBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3QgdGFnIGluc3RlYWRcblxuICAgIHZhciBDb25jdXJyZW50TW9kZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDE7XG4gICAgdmFyIFByb2ZpbGVNb2RlID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMjtcbiAgICB2YXIgU3RyaWN0TGVnYWN5TW9kZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICovXG4gICAgICA4O1xuICAgIHZhciBTdHJpY3RFZmZlY3RzTW9kZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgKi9cbiAgICAgIDE2O1xuICAgIHZhciBOb1N0cmljdFBhc3NpdmVFZmZlY3RzTW9kZSA9XG4gICAgICAvKiAgICAgKi9cbiAgICAgIDY0O1xuXG4gICAgLy8gVE9ETzogVGhpcyBpcyBwcmV0dHkgd2VsbCBzdXBwb3J0ZWQgYnkgYnJvd3NlcnMuIE1heWJlIHdlIGNhbiBkcm9wIGl0LlxuICAgIHZhciBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjazsgLy8gQ291bnQgbGVhZGluZyB6ZXJvcy5cbiAgICAvLyBCYXNlZCBvbjpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXG5cbiAgICB2YXIgbG9nID0gTWF0aC5sb2c7XG4gICAgdmFyIExOMiA9IE1hdGguTE4yO1xuXG4gICAgZnVuY3Rpb24gY2x6MzJGYWxsYmFjayh4KSB7XG4gICAgICB2YXIgYXNVaW50ID0geCA+Pj4gMDtcblxuICAgICAgaWYgKGFzVWludCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMzI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMzEgLSAoKGxvZyhhc1VpbnQpIC8gTE4yKSB8IDApKSB8IDA7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhvc2UgdmFsdWVzIGFyZSBjaGFuZ2VkIHRoYXQgcGFja2FnZSBzaG91bGQgYmUgcmVidWlsdCBhbmQgcmVkZXBsb3llZC5cblxuICAgIHZhciBUb3RhbExhbmVzID0gMzE7XG4gICAgdmFyIE5vTGFuZXMgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMDtcbiAgICB2YXIgTm9MYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMDtcbiAgICB2YXIgU3luY0h5ZHJhdGlvbkxhbmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAqL1xuICAgICAgMTtcbiAgICB2YXIgU3luY0xhbmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMjtcbiAgICB2YXIgU3luY0xhbmVJbmRleCA9IDE7XG4gICAgdmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUgPVxuICAgICAgLyogICAgKi9cbiAgICAgIDQ7XG4gICAgdmFyIElucHV0Q29udGludW91c0xhbmUgPVxuICAgICAgLyogICAgICAgICAgICAgKi9cbiAgICAgIDg7XG4gICAgdmFyIERlZmF1bHRIeWRyYXRpb25MYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgKi9cbiAgICAgIDE2O1xuICAgIHZhciBEZWZhdWx0TGFuZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAzMjtcbiAgICB2YXIgU3luY1VwZGF0ZUxhbmVzID0gU3luY0xhbmUgfCBJbnB1dENvbnRpbnVvdXNMYW5lIHwgRGVmYXVsdExhbmU7XG4gICAgdmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICovXG4gICAgICA2NDtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmVzID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgNDE5NDE3NjtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmUxID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDEyODtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmUyID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDI1NjtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmUzID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDUxMjtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmU0ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDEwMjQ7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lNSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyMDQ4O1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTYgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgNDA5NjtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmU3ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDgxOTI7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lOCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxNjM4NDtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmU5ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDMyNzY4O1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTEwID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgNjU1MzY7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lMTEgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxMzEwNzI7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lMTIgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyNjIxNDQ7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lMTMgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICA1MjQyODg7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lMTQgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxMDQ4NTc2O1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTE1ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMjA5NzE1MjtcbiAgICB2YXIgUmV0cnlMYW5lcyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgNjI5MTQ1NjA7XG4gICAgdmFyIFJldHJ5TGFuZTEgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICA0MTk0MzA0O1xuICAgIHZhciBSZXRyeUxhbmUyID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgODM4ODYwODtcbiAgICB2YXIgUmV0cnlMYW5lMyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDE2Nzc3MjE2O1xuICAgIHZhciBSZXRyeUxhbmU0ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMzM1NTQ0MzI7XG4gICAgdmFyIFNvbWVSZXRyeUxhbmUgPSBSZXRyeUxhbmUxO1xuICAgIHZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbiAgICAgIC8qICAgICAgICAgICovXG4gICAgICA2NzEwODg2NDtcbiAgICB2YXIgTm9uSWRsZUxhbmVzID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMTM0MjE3NzI3O1xuICAgIHZhciBJZGxlSHlkcmF0aW9uTGFuZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICovXG4gICAgICAxMzQyMTc3Mjg7XG4gICAgdmFyIElkbGVMYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDI2ODQzNTQ1NjtcbiAgICB2YXIgT2Zmc2NyZWVuTGFuZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgNTM2ODcwOTEyO1xuICAgIHZhciBEZWZlcnJlZExhbmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxMDczNzQxODI0OyAvLyBBbnkgbGFuZSB0aGF0IG1pZ2h0IHNjaGVkdWxlIGFuIHVwZGF0ZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVjdCBpbmZpbml0ZVxuICAgIC8vIHVwZGF0ZSBsb29wcywgc28gaXQgZG9lc24ndCBpbmNsdWRlIGh5ZHJhdGlvbiBsYW5lcyBvciByZXRyaWVzLlxuXG4gICAgdmFyIFVwZGF0ZUxhbmVzID1cbiAgICAgIFN5bmNMYW5lIHwgSW5wdXRDb250aW51b3VzTGFuZSB8IERlZmF1bHRMYW5lIHwgVHJhbnNpdGlvbkxhbmVzOyAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoZSBleHBlcmltZW50YWwgdGltZWxpbmUgKHJlYWN0LWRldnRvb2xzLXRpbWVsaW5lKVxuICAgIHZhciBOb1RpbWVzdGFtcCA9IC0xO1xuICAgIHZhciBuZXh0VHJhbnNpdGlvbkxhbmUgPSBUcmFuc2l0aW9uTGFuZTE7XG4gICAgdmFyIG5leHRSZXRyeUxhbmUgPSBSZXRyeUxhbmUxO1xuXG4gICAgZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIHBlbmRpbmdTeW5jTGFuZXMgPSBsYW5lcyAmIFN5bmNVcGRhdGVMYW5lcztcblxuICAgICAgICBpZiAocGVuZGluZ1N5bmNMYW5lcyAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBwZW5kaW5nU3luY0xhbmVzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcykpIHtcbiAgICAgICAgY2FzZSBTeW5jSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgICByZXR1cm4gU3luY0h5ZHJhdGlvbkxhbmU7XG5cbiAgICAgICAgY2FzZSBTeW5jTGFuZTpcbiAgICAgICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICAgICAgY2FzZSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lOlxuICAgICAgICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lO1xuXG4gICAgICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZTpcbiAgICAgICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzTGFuZTtcblxuICAgICAgICBjYXNlIERlZmF1bHRIeWRyYXRpb25MYW5lOlxuICAgICAgICAgIHJldHVybiBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcblxuICAgICAgICBjYXNlIERlZmF1bHRMYW5lOlxuICAgICAgICAgIHJldHVybiBEZWZhdWx0TGFuZTtcblxuICAgICAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lOlxuICAgICAgICAgIHJldHVybiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcblxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTI6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUzOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNDpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTU6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU2OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNzpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTg6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU5OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTA6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEyOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTM6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNDpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE1OlxuICAgICAgICAgIHJldHVybiBsYW5lcyAmIFRyYW5zaXRpb25MYW5lcztcblxuICAgICAgICBjYXNlIFJldHJ5TGFuZTE6XG4gICAgICAgIGNhc2UgUmV0cnlMYW5lMjpcbiAgICAgICAgY2FzZSBSZXRyeUxhbmUzOlxuICAgICAgICBjYXNlIFJldHJ5TGFuZTQ6XG4gICAgICAgICAgcmV0dXJuIGxhbmVzICYgUmV0cnlMYW5lcztcblxuICAgICAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU6XG4gICAgICAgICAgcmV0dXJuIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG5cbiAgICAgICAgY2FzZSBJZGxlSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgICByZXR1cm4gSWRsZUh5ZHJhdGlvbkxhbmU7XG5cbiAgICAgICAgY2FzZSBJZGxlTGFuZTpcbiAgICAgICAgICByZXR1cm4gSWRsZUxhbmU7XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5MYW5lOlxuICAgICAgICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuXG4gICAgICAgIGNhc2UgRGVmZXJyZWRMYW5lOlxuICAgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHJlYWNoYWJsZSBiZWNhdXNlIGRlZmVycmVkIHdvcmsgaXMgYWx3YXlzIGVudGFuZ2xlZFxuICAgICAgICAgIC8vIHdpdGggc29tZXRoaW5nIGVsc2UuXG4gICAgICAgICAgcmV0dXJuIE5vTGFuZXM7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcihcIlNob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICB9IC8vIFRoaXMgc2hvdWxkbid0IGJlIHJlYWNoYWJsZSwgYnV0IGFzIGEgZmFsbGJhY2ssIHJldHVybiB0aGUgZW50aXJlIGJpdG1hc2suXG5cbiAgICAgICAgICByZXR1cm4gbGFuZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TmV4dExhbmVzKHJvb3QsIHdpcExhbmVzKSB7XG4gICAgICAvLyBFYXJseSBiYWlsb3V0IGlmIHRoZXJlJ3Mgbm8gcGVuZGluZyB3b3JrIGxlZnQuXG4gICAgICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG5cbiAgICAgIGlmIChwZW5kaW5nTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgcmV0dXJuIE5vTGFuZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0TGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgICAgIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7IC8vIERvIG5vdCB3b3JrIG9uIGFueSBpZGxlIHdvcmsgdW50aWwgYWxsIHRoZSBub24taWRsZSB3b3JrIGhhcyBmaW5pc2hlZCxcbiAgICAgIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuXG4gICAgICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIE5vbklkbGVMYW5lcztcblxuICAgICAgaWYgKG5vbklkbGVQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgdmFyIG5vbklkbGVVbmJsb2NrZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgICAgaWYgKG5vbklkbGVVbmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVVbmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG5vbklkbGVQaW5nZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiBwaW5nZWRMYW5lcztcblxuICAgICAgICAgIGlmIChub25JZGxlUGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgd29yayBpcyBJZGxlLlxuICAgICAgICB2YXIgdW5ibG9ja2VkTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgICAgaWYgKHVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXModW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hhYmxlIGlmIHdlJ3JlIHN1c3BlbmRlZFxuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGluIHRoaXMgcGF0aCBpZiBhIGZhbGxiYWNrIHRpbWVyIGlzIG5vdCBzY2hlZHVsZWQuXG4gICAgICAgIHJldHVybiBOb0xhbmVzO1xuICAgICAgfSAvLyBJZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIsIHN3aXRjaGluZyBsYW5lcyB3aWxsIGludGVycnVwdFxuICAgICAgLy8gaXQgYW5kIHdlJ2xsIGxvc2Ugb3VyIHByb2dyZXNzLiBXZSBzaG91bGQgb25seSBkbyB0aGlzIGlmIHRoZSBuZXcgbGFuZXMgYXJlXG4gICAgICAvLyBoaWdoZXIgcHJpb3JpdHkuXG5cbiAgICAgIGlmIChcbiAgICAgICAgd2lwTGFuZXMgIT09IE5vTGFuZXMgJiZcbiAgICAgICAgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJiAvLyBJZiB3ZSBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHRoZW4gaW50ZXJydXB0aW5nIGlzIGZpbmUuIERvbid0XG4gICAgICAgIC8vIGJvdGhlciB3YWl0aW5nIHVudGlsIHRoZSByb290IGlzIGNvbXBsZXRlLlxuICAgICAgICAod2lwTGFuZXMgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXNcbiAgICAgICkge1xuICAgICAgICB2YXIgbmV4dExhbmUgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKG5leHRMYW5lcyk7XG4gICAgICAgIHZhciB3aXBMYW5lID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSh3aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhlIG5leHQgbGFuZSBpcyBlcXVhbCBvciBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSB3aXBcbiAgICAgICAgICAvLyBvbmUuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0cyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgICAgICAgICBuZXh0TGFuZSA+PSB3aXBMYW5lIHx8IC8vIERlZmF1bHQgcHJpb3JpdHkgdXBkYXRlcyBzaG91bGQgbm90IGludGVycnVwdCB0cmFuc2l0aW9uIHVwZGF0ZXMuIFRoZVxuICAgICAgICAgIC8vIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGRlZmF1bHQgdXBkYXRlcyBhbmQgdHJhbnNpdGlvbiB1cGRhdGVzIGlzIHRoYXRcbiAgICAgICAgICAvLyBkZWZhdWx0IHVwZGF0ZXMgZG8gbm90IHN1cHBvcnQgcmVmcmVzaCB0cmFuc2l0aW9ucy5cbiAgICAgICAgICAobmV4dExhbmUgPT09IERlZmF1bHRMYW5lICYmICh3aXBMYW5lICYgVHJhbnNpdGlvbkxhbmVzKSAhPT0gTm9MYW5lcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gS2VlcCB3b3JraW5nIG9uIHRoZSBleGlzdGluZyBpbi1wcm9ncmVzcyB0cmVlLiBEbyBub3QgaW50ZXJydXB0LlxuICAgICAgICAgIHJldHVybiB3aXBMYW5lcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV4dExhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFbnRhbmdsZWRMYW5lcyhyb290LCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIGVudGFuZ2xlZExhbmVzID0gcmVuZGVyTGFuZXM7XG5cbiAgICAgIGlmICgoZW50YW5nbGVkTGFuZXMgJiBJbnB1dENvbnRpbnVvdXNMYW5lKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBXaGVuIHVwZGF0ZXMgYXJlIHN5bmMgYnkgZGVmYXVsdCwgd2UgZW50YW5nbGUgY29udGludW91cyBwcmlvcml0eSB1cGRhdGVzXG4gICAgICAgIC8vIGFuZCBkZWZhdWx0IHVwZGF0ZXMsIHNvIHRoZXkgcmVuZGVyIGluIHRoZSBzYW1lIGJhdGNoLiBUaGUgb25seSByZWFzb25cbiAgICAgICAgLy8gdGhleSB1c2Ugc2VwYXJhdGUgbGFuZXMgaXMgYmVjYXVzZSBjb250aW51b3VzIHVwZGF0ZXMgc2hvdWxkIGludGVycnVwdFxuICAgICAgICAvLyB0cmFuc2l0aW9ucywgYnV0IGRlZmF1bHQgdXBkYXRlcyBzaG91bGQgbm90LlxuICAgICAgICBlbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcyAmIERlZmF1bHRMYW5lO1xuICAgICAgfSAvLyBDaGVjayBmb3IgZW50YW5nbGVkIGxhbmVzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmF0Y2guXG4gICAgICAvL1xuICAgICAgLy8gQSBsYW5lIGlzIHNhaWQgdG8gYmUgZW50YW5nbGVkIHdpdGggYW5vdGhlciB3aGVuIGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVuZGVyXG4gICAgICAvLyBpbiBhIGJhdGNoIHRoYXQgZG9lcyBub3QgYWxzbyBpbmNsdWRlIHRoZSBvdGhlciBsYW5lLiBUeXBpY2FsbHkgd2UgZG8gdGhpc1xuICAgICAgLy8gd2hlbiBtdWx0aXBsZSB1cGRhdGVzIGhhdmUgdGhlIHNhbWUgc291cmNlLCBhbmQgd2Ugb25seSB3YW50IHRvIHJlc3BvbmQgdG9cbiAgICAgIC8vIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIHRoYXQgc291cmNlLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhhdCB3ZSBhcHBseSBlbnRhbmdsZW1lbnRzICphZnRlciogY2hlY2tpbmcgZm9yIHBhcnRpYWwgd29yayBhYm92ZS5cbiAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxhbmUgaXMgZW50YW5nbGVkIGR1cmluZyBhbiBpbnRlcmxlYXZlZCBldmVudCB3aGlsZVxuICAgICAgLy8gaXQncyBhbHJlYWR5IHJlbmRlcmluZywgd2Ugd29uJ3QgaW50ZXJydXB0IGl0LiBUaGlzIGlzIGludGVudGlvbmFsLCBzaW5jZVxuICAgICAgLy8gZW50YW5nbGVtZW50IGlzIHVzdWFsbHkgXCJiZXN0IGVmZm9ydFwiOiB3ZSdsbCB0cnkgb3VyIGJlc3QgdG8gcmVuZGVyIHRoZVxuICAgICAgLy8gbGFuZXMgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBpdCdzIG5vdCB3b3J0aCB0aHJvd2luZyBvdXQgcGFydGlhbGx5XG4gICAgICAvLyBjb21wbGV0ZWQgd29yayBpbiBvcmRlciB0byBkbyBpdC5cbiAgICAgIC8vIFRPRE86IFJlY29uc2lkZXIgdGhpcy4gVGhlIGNvdW50ZXItYXJndW1lbnQgaXMgdGhhdCB0aGUgcGFydGlhbCB3b3JrXG4gICAgICAvLyByZXByZXNlbnRzIGFuIGludGVybWVkaWF0ZSBzdGF0ZSwgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBzaG93IHRvIHRoZSB1c2VyLlxuICAgICAgLy8gQW5kIGJ5IHNwZW5kaW5nIGV4dHJhIHRpbWUgZmluaXNoaW5nIGl0LCB3ZSdyZSBpbmNyZWFzaW5nIHRoZSBhbW91bnQgb2ZcbiAgICAgIC8vIHRpbWUgaXQgdGFrZXMgdG8gc2hvdyB0aGUgZmluYWwgc3RhdGUsIHdoaWNoIGlzIHdoYXQgdGhleSBhcmUgYWN0dWFsbHlcbiAgICAgIC8vIHdhaXRpbmcgZm9yLlxuICAgICAgLy9cbiAgICAgIC8vIEZvciB0aG9zZSBleGNlcHRpb25zIHdoZXJlIGVudGFuZ2xlbWVudCBpcyBzZW1hbnRpY2FsbHkgaW1wb3J0YW50LFxuICAgICAgLy8gd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBhcnRpYWwgd29yayBhdCB0aGVcbiAgICAgIC8vIHRpbWUgd2UgYXBwbHkgdGhlIGVudGFuZ2xlbWVudC5cblxuICAgICAgdmFyIGFsbEVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcblxuICAgICAgaWYgKGFsbEVudGFuZ2xlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgICAgICB2YXIgbGFuZXMgPSBlbnRhbmdsZWRMYW5lcyAmIGFsbEVudGFuZ2xlZExhbmVzO1xuXG4gICAgICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgICAgZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudGFuZ2xlZExhbmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAgICAgc3dpdGNoIChsYW5lKSB7XG4gICAgICAgIGNhc2UgU3luY0h5ZHJhdGlvbkxhbmU6XG4gICAgICAgIGNhc2UgU3luY0xhbmU6XG4gICAgICAgIGNhc2UgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lOlxuICAgICAgICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLlxuICAgICAgICAgIC8vIFdoZW4gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZ1xuICAgICAgICAgIC8vIHRoZXJlJ3MgYSB1c2VyIGludGVyYWN0aW9uIHRoYXQncyBiZWluZyBzdGFydmVkIGJ5IGEgc2VyaWVzIG9mXG4gICAgICAgICAgLy8gc3luY2hyb25vdXMgdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpc1xuICAgICAgICAgIC8vIHRvIGZpeCB0aGUgc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0XG4gICAgICAgICAgLy8gZXhwaXJhdGlvbiB0aW1lcyBhcmUgYW4gaW1wb3J0YW50IHNhZmVndWFyZCB3aGVuIHN0YXJ2YXRpb25cbiAgICAgICAgICAvLyBkb2VzIGhhcHBlbi5cbiAgICAgICAgICByZXR1cm4gY3VycmVudFRpbWUgKyBzeW5jTGFuZUV4cGlyYXRpb25NcztcblxuICAgICAgICBjYXNlIERlZmF1bHRIeWRyYXRpb25MYW5lOlxuICAgICAgICBjYXNlIERlZmF1bHRMYW5lOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTI6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUzOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNDpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTU6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU2OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNzpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTg6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU5OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTA6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEyOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTM6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNDpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE1OlxuICAgICAgICAgIHJldHVybiBjdXJyZW50VGltZSArIHRyYW5zaXRpb25MYW5lRXhwaXJhdGlvbk1zO1xuXG4gICAgICAgIGNhc2UgUmV0cnlMYW5lMTpcbiAgICAgICAgY2FzZSBSZXRyeUxhbmUyOlxuICAgICAgICBjYXNlIFJldHJ5TGFuZTM6XG4gICAgICAgIGNhc2UgUmV0cnlMYW5lNDpcbiAgICAgICAgICAvLyBUT0RPOiBSZXRyaWVzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGV4cGlyZSBpZiB0aGV5IGFyZSBDUFUgYm91bmQgZm9yXG4gICAgICAgICAgLy8gdG9vIGxvbmcsIGJ1dCB3aGVuIEkgbWFkZSB0aGlzIGNoYW5nZSBpdCBjYXVzZWQgYSBzcGlrZSBpbiBicm93c2VyXG4gICAgICAgICAgLy8gY3Jhc2hlcy4gVGhlcmUgbXVzdCBiZSBzb21lIG90aGVyIHVuZGVybHlpbmcgYnVnOyBub3Qgc3VwZXIgdXJnZW50IGJ1dFxuICAgICAgICAgIC8vIGlkZWFsbHkgc2hvdWxkIGZpZ3VyZSBvdXQgd2h5IGFuZCBmaXggaXQuIFVuZm9ydHVuYXRlbHkgd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAgIC8vIGEgcmVwcm8gZm9yIHRoZSBjcmFzaGVzLCBvbmx5IGRldGVjdGVkIHZpYSBwcm9kdWN0aW9uIG1ldHJpY3MuXG4gICAgICAgICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuXG4gICAgICAgIGNhc2UgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgY2FzZSBJZGxlSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgY2FzZSBJZGxlTGFuZTpcbiAgICAgICAgY2FzZSBPZmZzY3JlZW5MYW5lOlxuICAgICAgICBjYXNlIERlZmVycmVkTGFuZTpcbiAgICAgICAgICAvLyBBbnl0aGluZyBpZGxlIHByaW9yaXR5IG9yIGxvd2VyIHNob3VsZCBuZXZlciBleHBpcmUuXG4gICAgICAgICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3IoXCJTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRPRE86IFRoaXMgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB3ZSB5aWVsZC4gV2UgY2FuIG9wdGltaXplIGJ5IHN0b3JpbmdcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAgICAgLy8gb2YgdGhpcyBmdW5jdGlvbi5cbiAgICAgIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gICAgICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICAgICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHBlbmRpbmcgbGFuZXMgYW5kIGNoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlaXJcbiAgICAgIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgICAgIC8vIGl0IGFzIGV4cGlyZWQgdG8gZm9yY2UgaXQgdG8gZmluaXNoLlxuICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIHdpdGggdXBncmFkZVBlbmRpbmdMYW5lc1RvU3luY1xuICAgICAgLy9cbiAgICAgIC8vIFdlIGV4Y2x1ZGUgcmV0cnkgbGFuZXMgYmVjYXVzZSB0aG9zZSBtdXN0IGFsd2F5cyBiZSB0aW1lIHNsaWNlZCwgaW4gb3JkZXJcbiAgICAgIC8vIHRvIHVud3JhcCB1bmNhY2hlZCBwcm9taXNlcy5cbiAgICAgIC8vIFRPRE86IFdyaXRlIGEgdGVzdCBmb3IgdGhpc1xuXG4gICAgICB2YXIgbGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+UmV0cnlMYW5lcztcblxuICAgICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZXNbaW5kZXhdO1xuXG4gICAgICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgICAgICAvLyBGb3VuZCBhIHBlbmRpbmcgbGFuZSB3aXRoIG5vIGV4cGlyYXRpb24gdGltZS4gSWYgaXQncyBub3Qgc3VzcGVuZGVkLCBvclxuICAgICAgICAgIC8vIGlmIGl0J3MgcGluZ2VkLCBhc3N1bWUgaXQncyBDUFUtYm91bmQuIENvbXB1dGUgYSBuZXcgZXhwaXJhdGlvbiB0aW1lXG4gICAgICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fFxuICAgICAgICAgICAgKGxhbmUgJiBwaW5nZWRMYW5lcykgIT09IE5vTGFuZXNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEFzc3VtZXMgdGltZXN0YW1wcyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuICAgICAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgICAgICByb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgfSAvLyBUaGlzIHJldHVybnMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBsYW5lcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleVxuICAgIGZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKFxuICAgICAgcm9vdCxcbiAgICAgIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lc1xuICAgICkge1xuICAgICAgaWYgKHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJiBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMpIHtcbiAgICAgICAgLy8gVGhlIGVycm9yIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBkaXNhYmxlZCB1bnRpbCB0aGVzZSBsYW5lcyBhcmUgY2xlYXJlZC5cbiAgICAgICAgcmV0dXJuIE5vTGFuZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+T2Zmc2NyZWVuTGFuZTtcblxuICAgICAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gIT09IE5vTGFuZXMpIHtcbiAgICAgICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICYgT2Zmc2NyZWVuTGFuZSkge1xuICAgICAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE5vTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzU3luY0xhbmUobGFuZXMpIHtcbiAgICAgIHJldHVybiAobGFuZXMgJiAoU3luY0xhbmUgfCBTeW5jSHlkcmF0aW9uTGFuZSkpICE9PSBOb0xhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmNsdWRlc05vbklkbGVXb3JrKGxhbmVzKSB7XG4gICAgICByZXR1cm4gKGxhbmVzICYgTm9uSWRsZUxhbmVzKSAhPT0gTm9MYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykge1xuICAgICAgcmV0dXJuIChsYW5lcyAmIFJldHJ5TGFuZXMpID09PSBsYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5jbHVkZXNPbmx5Tm9uVXJnZW50TGFuZXMobGFuZXMpIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCBoeWRyYXRpb24gbGFuZXMgYmUgaW5jbHVkZWQgaGVyZT8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5XG4gICAgICAvLyB1c2VkIGluIGB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbGAuXG4gICAgICB2YXIgVXJnZW50TGFuZXMgPSBTeW5jTGFuZSB8IElucHV0Q29udGludW91c0xhbmUgfCBEZWZhdWx0TGFuZTtcbiAgICAgIHJldHVybiAobGFuZXMgJiBVcmdlbnRMYW5lcykgPT09IE5vTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSB7XG4gICAgICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIGxhbmVzKSB7XG4gICAgICB2YXIgU3luY0RlZmF1bHRMYW5lcyA9XG4gICAgICAgIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUgfFxuICAgICAgICBJbnB1dENvbnRpbnVvdXNMYW5lIHxcbiAgICAgICAgRGVmYXVsdEh5ZHJhdGlvbkxhbmUgfFxuICAgICAgICBEZWZhdWx0TGFuZTtcbiAgICAgIHJldHVybiAobGFuZXMgJiBTeW5jRGVmYXVsdExhbmVzKSAhPT0gTm9MYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5jbHVkZXNFeHBpcmVkTGFuZShyb290LCBsYW5lcykge1xuICAgICAgLy8gVGhpcyBpcyBhIHNlcGFyYXRlIGNoZWNrIGZyb20gaW5jbHVkZXNCbG9ja2luZ0xhbmUgYmVjYXVzZSBhIGxhbmUgY2FuXG4gICAgICAvLyBleHBpcmUgYWZ0ZXIgYSByZW5kZXIgaGFzIGFscmVhZHkgc3RhcnRlZC5cbiAgICAgIHJldHVybiAobGFuZXMgJiByb290LmV4cGlyZWRMYW5lcykgIT09IE5vTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVHJhbnNpdGlvbkxhbmUobGFuZSkge1xuICAgICAgcmV0dXJuIChsYW5lICYgVHJhbnNpdGlvbkxhbmVzKSAhPT0gTm9MYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSB7XG4gICAgICAvLyBDeWNsZSB0aHJvdWdoIHRoZSBsYW5lcywgYXNzaWduaW5nIGVhY2ggbmV3IHRyYW5zaXRpb24gdG8gdGhlIG5leHQgbGFuZS5cbiAgICAgIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgbWVhbnMgZXZlcnkgdHJhbnNpdGlvbiBnZXRzIGl0cyBvd24gbGFuZSwgdW50aWwgd2VcbiAgICAgIC8vIHJ1biBvdXQgb2YgbGFuZXMgYW5kIGN5Y2xlIGJhY2sgdG8gdGhlIGJlZ2lubmluZy5cbiAgICAgIHZhciBsYW5lID0gbmV4dFRyYW5zaXRpb25MYW5lO1xuICAgICAgbmV4dFRyYW5zaXRpb25MYW5lIDw8PSAxO1xuXG4gICAgICBpZiAoKG5leHRUcmFuc2l0aW9uTGFuZSAmIFRyYW5zaXRpb25MYW5lcykgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dFRyYW5zaXRpb25MYW5lID0gVHJhbnNpdGlvbkxhbmUxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xhaW1OZXh0UmV0cnlMYW5lKCkge1xuICAgICAgdmFyIGxhbmUgPSBuZXh0UmV0cnlMYW5lO1xuICAgICAgbmV4dFJldHJ5TGFuZSA8PD0gMTtcblxuICAgICAgaWYgKChuZXh0UmV0cnlMYW5lICYgUmV0cnlMYW5lcykgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dFJldHJ5TGFuZSA9IFJldHJ5TGFuZTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gICAgICByZXR1cm4gbGFuZXMgJiAtbGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lKGxhbmVzKSB7XG4gICAgICAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZ2V0cyBpbmxpbmVkLiBPbmx5IGV4aXN0cyBzbyB0byBjb21tdW5pY2F0ZSB0aGF0IGl0XG4gICAgICAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBiaXQgaXMgc2VsZWN0ZWQ7IHlvdSBjYW4gcGljayBhbnkgYml0IHdpdGhvdXRcbiAgICAgIC8vIGFmZmVjdGluZyB0aGUgYWxnb3JpdGhtcyB3aGVyZSBpdHMgdXNlZC4gSGVyZSBJJ20gdXNpbmdcbiAgICAgIC8vIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgZmV3ZXN0IG9wZXJhdGlvbnMuXG4gICAgICByZXR1cm4gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcykge1xuICAgICAgcmV0dXJuIDMxIC0gY2x6MzIobGFuZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxhbmVUb0luZGV4KGxhbmUpIHtcbiAgICAgIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzU29tZUxhbmUoYSwgYikge1xuICAgICAgcmV0dXJuIChhICYgYikgIT09IE5vTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU3Vic2V0T2ZMYW5lcyhzZXQsIHN1YnNldCkge1xuICAgICAgcmV0dXJuIChzZXQgJiBzdWJzZXQpID09PSBzdWJzZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1lcmdlTGFuZXMoYSwgYikge1xuICAgICAgcmV0dXJuIGEgfCBiO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVMYW5lcyhzZXQsIHN1YnNldCkge1xuICAgICAgcmV0dXJuIHNldCAmIH5zdWJzZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGludGVyc2VjdExhbmVzKGEsIGIpIHtcbiAgICAgIHJldHVybiBhICYgYjtcbiAgICB9IC8vIFNlZW1zIHJlZHVuZGFudCwgYnV0IGl0IGNoYW5nZXMgdGhlIHR5cGUgZnJvbSBhIHNpbmdsZSBsYW5lICh1c2VkIGZvclxuICAgIC8vIHVwZGF0ZXMpIHRvIGEgZ3JvdXAgb2YgbGFuZXMgKHVzZWQgZm9yIGZsdXNoaW5nIHdvcmspLlxuXG4gICAgZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBwdXNoaW5nIG9uZSBieSBvbmUuXG4gICAgICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gICAgICB2YXIgbGFuZU1hcCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFRvdGFsTGFuZXM7IGkrKykge1xuICAgICAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gSWYgdGhlcmUgYXJlIGFueSBzdXNwZW5kZWQgdHJhbnNpdGlvbnMsIGl0J3MgcG9zc2libGUgdGhpcyBuZXcgdXBkYXRlXG4gICAgICAvLyBjb3VsZCB1bmJsb2NrIHRoZW0uIENsZWFyIHRoZSBzdXNwZW5kZWQgbGFuZXMgc28gdGhhdCB3ZSBjYW4gdHJ5IHJlbmRlcmluZ1xuICAgICAgLy8gdGhlbSBhZ2Fpbi5cbiAgICAgIC8vXG4gICAgICAvLyBUT0RPOiBXZSByZWFsbHkgb25seSBuZWVkIHRvIHVuc3VzcGVuZCBvbmx5IGxhbmVzIHRoYXQgYXJlIGluIHRoZVxuICAgICAgLy8gYHN1YnRyZWVMYW5lc2Agb2YgdGhlIHVwZGF0ZWQgZmliZXIsIG9yIHRoZSB1cGRhdGUgbGFuZXMgb2YgdGhlIHJldHVyblxuICAgICAgLy8gcGF0aC4gVGhpcyB3b3VsZCBleGNsdWRlIHN1c3BlbmRlZCB1cGRhdGVzIGluIGFuIHVucmVsYXRlZCBzaWJsaW5nIHRyZWUsXG4gICAgICAvLyBzaW5jZSB0aGVyZSdzIG5vIHdheSBmb3IgdGhpcyB1cGRhdGUgdG8gdW5ibG9jayBpdC5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBkb24ndCBkbyB0aGlzIGlmIHRoZSBpbmNvbWluZyB1cGRhdGUgaXMgaWRsZSwgYmVjYXVzZSB3ZSBuZXZlciBwcm9jZXNzXG4gICAgICAvLyBpZGxlIHVwZGF0ZXMgdW50aWwgYWZ0ZXIgYWxsIHRoZSByZWd1bGFyIHVwZGF0ZXMgaGF2ZSBmaW5pc2hlZDsgdGhlcmUncyBub1xuICAgICAgLy8gd2F5IGl0IGNvdWxkIHVuYmxvY2sgYSB0cmFuc2l0aW9uLlxuXG4gICAgICBpZiAodXBkYXRlTGFuZSAhPT0gSWRsZUxhbmUpIHtcbiAgICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHJvb3QucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzLCBzcGF3bmVkTGFuZSkge1xuICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzOyAvLyBUaGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBubyBsb25nZXIgQ1BVLWJvdW5kLiBDbGVhciB0aGVpciBleHBpcmF0aW9uIHRpbWVzLlxuXG4gICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gICAgICB2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcblxuICAgICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3Bhd25lZExhbmUgIT09IE5vTGFuZSkge1xuICAgICAgICBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgc3VzcGVuZGVkTGFuZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcykge1xuICAgICAgcm9vdC5waW5nZWRMYW5lcyB8PSByb290LnN1c3BlbmRlZExhbmVzICYgcGluZ2VkTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMsIHNwYXduZWRMYW5lKSB7XG4gICAgICB2YXIgbm9Mb25nZXJQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7IC8vIExldCdzIHRyeSBldmVyeXRoaW5nIGFnYWluXG5cbiAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgcm9vdC5waW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICAgICAgdmFyIGhpZGRlblVwZGF0ZXMgPSByb290LmhpZGRlblVwZGF0ZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gICAgICB2YXIgbGFuZXMgPSBub0xvbmdlclBlbmRpbmdMYW5lcztcblxuICAgICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSA9IE5vTGFuZXM7XG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICAgICAgdmFyIGhpZGRlblVwZGF0ZXNGb3JMYW5lID0gaGlkZGVuVXBkYXRlc1tpbmRleF07XG5cbiAgICAgICAgaWYgKGhpZGRlblVwZGF0ZXNGb3JMYW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgaGlkZGVuVXBkYXRlc1tpbmRleF0gPSBudWxsOyAvLyBcIkhpZGRlblwiIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYSBoaWRkZW4gY29tcG9uZW50LiBUaGV5XG4gICAgICAgICAgLy8gaGF2ZSBzcGVjaWFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGJlY2F1c2UgdGhleSBtYXkgYmUgZW50YW5nbGVkXG4gICAgICAgICAgLy8gd2l0aCB1cGRhdGVzIHRoYXQgb2NjdXIgb3V0c2lkZSB0aGF0IHRyZWUuIEJ1dCBvbmNlIHRoZSBvdXRlciB0cmVlXG4gICAgICAgICAgLy8gY29tbWl0cywgdGhleSBiZWhhdmUgbGlrZSByZWd1bGFyIHVwZGF0ZXMuXG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlblVwZGF0ZXNGb3JMYW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gaGlkZGVuVXBkYXRlc0ZvckxhbmVbaV07XG5cbiAgICAgICAgICAgIGlmICh1cGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdXBkYXRlLmxhbmUgJj0gfk9mZnNjcmVlbkxhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGF3bmVkTGFuZSAhPT0gTm9MYW5lKSB7XG4gICAgICAgIG1hcmtTcGF3bmVkRGVmZXJyZWRMYW5lKFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgc3Bhd25lZExhbmUsIC8vIFRoaXMgcmVuZGVyIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSB3aXRob3V0IHN1c3BlbmRpbmcsIHNvIHdlIGRvbid0IG5lZWRcbiAgICAgICAgICAvLyB0byBlbnRhbmdsZSB0aGUgc3Bhd25lZCB0YXNrIHdpdGggdGhlIHBhcmVudCB0YXNrLlxuICAgICAgICAgIE5vTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgZW50YW5nbGVkTGFuZXMpIHtcbiAgICAgIC8vIFRoaXMgcmVuZGVyIHNwYXduZWQgYSBkZWZlcnJlZCB0YXNrLiBNYXJrIGl0IGFzIHBlbmRpbmcuXG4gICAgICByb290LnBlbmRpbmdMYW5lcyB8PSBzcGF3bmVkTGFuZTtcbiAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgJj0gfnNwYXduZWRMYW5lOyAvLyBFbnRhbmdsZSB0aGUgc3Bhd25lZCBsYW5lIHdpdGggdGhlIERlZmVycmVkTGFuZSBiaXQgc28gdGhhdCB3ZSBrbm93IGl0XG4gICAgICAvLyB3YXMgdGhlIHJlc3VsdCBvZiBhbm90aGVyIHJlbmRlci4gVGhpcyBsZXRzIHVzIGF2b2lkIGEgdXNlRGVmZXJyZWRWYWx1ZVxuICAgICAgLy8gd2F0ZXJmYWxsIOKAlCBvbmx5IHRoZSBmaXJzdCBsZXZlbCB3aWxsIGRlZmVyLlxuXG4gICAgICB2YXIgc3Bhd25lZExhbmVJbmRleCA9IGxhbmVUb0luZGV4KHNwYXduZWRMYW5lKTtcbiAgICAgIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gc3Bhd25lZExhbmU7XG4gICAgICByb290LmVudGFuZ2xlbWVudHNbc3Bhd25lZExhbmVJbmRleF0gfD1cbiAgICAgICAgRGVmZXJyZWRMYW5lIHwgLy8gSWYgdGhlIHBhcmVudCByZW5kZXIgdGFzayBzdXNwZW5kZWQsIHdlIG11c3QgYWxzbyBlbnRhbmdsZSB0aG9zZSBsYW5lc1xuICAgICAgICAvLyB3aXRoIHRoZSBzcGF3bmVkIHRhc2ssIHNvIHRoYXQgdGhlIGRlZmVycmVkIHRhc2sgaW5jbHVkZXMgYWxsIHRoZSBzYW1lXG4gICAgICAgIC8vIHVwZGF0ZXMgdGhhdCB0aGUgcGFyZW50IHRhc2sgZGlkLiBXZSBjYW4gZXhjbHVkZSBhbnkgbGFuZSB0aGF0IGlzIG5vdFxuICAgICAgICAvLyB1c2VkIGZvciB1cGRhdGVzIChlLmcuIE9mZnNjcmVlbikuXG4gICAgICAgIChlbnRhbmdsZWRMYW5lcyAmIFVwZGF0ZUxhbmVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICAgICAgLy8gSW4gYWRkaXRpb24gdG8gZW50YW5nbGluZyBlYWNoIG9mIHRoZSBnaXZlbiBsYW5lcyB3aXRoIGVhY2ggb3RoZXIsIHdlIGFsc29cbiAgICAgIC8vIGhhdmUgdG8gY29uc2lkZXIgX3RyYW5zaXRpdmVfIGVudGFuZ2xlbWVudHMuIEZvciBlYWNoIGxhbmUgdGhhdCBpcyBhbHJlYWR5XG4gICAgICAvLyBlbnRhbmdsZWQgd2l0aCAqYW55KiBvZiB0aGUgZ2l2ZW4gbGFuZXMsIHRoYXQgbGFuZSBpcyBub3cgdHJhbnNpdGl2ZWx5XG4gICAgICAvLyBlbnRhbmdsZWQgd2l0aCAqYWxsKiB0aGUgZ2l2ZW4gbGFuZXMuXG4gICAgICAvL1xuICAgICAgLy8gVHJhbnNsYXRlZDogSWYgQyBpcyBlbnRhbmdsZWQgd2l0aCBBLCB0aGVuIGVudGFuZ2xpbmcgQSB3aXRoIEIgYWxzb1xuICAgICAgLy8gZW50YW5nbGVzIEMgd2l0aCBCLlxuICAgICAgLy9cbiAgICAgIC8vIElmIHRoaXMgaXMgaGFyZCB0byBncmFzcCwgaXQgbWlnaHQgaGVscCB0byBpbnRlbnRpb25hbGx5IGJyZWFrIHRoaXNcbiAgICAgIC8vIGZ1bmN0aW9uIGFuZCBsb29rIGF0IHRoZSB0ZXN0cyB0aGF0IGZhaWwgaW4gUmVhY3RUcmFuc2l0aW9uLXRlc3QuanMuIFRyeVxuICAgICAgLy8gY29tbWVudGluZyBvdXQgb25lIG9mIHRoZSBjb25kaXRpb25zIGJlbG93LlxuICAgICAgdmFyIHJvb3RFbnRhbmdsZWRMYW5lcyA9IChyb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzKTtcbiAgICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgICAgdmFyIGxhbmVzID0gcm9vdEVudGFuZ2xlZExhbmVzO1xuXG4gICAgICB3aGlsZSAobGFuZXMpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gSXMgdGhpcyBvbmUgb2YgdGhlIG5ld2x5IGVudGFuZ2xlZCBsYW5lcz9cbiAgICAgICAgICAobGFuZSAmIGVudGFuZ2xlZExhbmVzKSB8IC8vIElzIHRoaXMgbGFuZSB0cmFuc2l0aXZlbHkgZW50YW5nbGVkIHdpdGggdGhlIG5ld2x5IGVudGFuZ2xlZCBsYW5lcz9cbiAgICAgICAgICAoZW50YW5nbGVtZW50c1tpbmRleF0gJiBlbnRhbmdsZWRMYW5lcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgZW50YW5nbGVtZW50c1tpbmRleF0gfD0gZW50YW5nbGVkTGFuZXM7XG4gICAgICAgIH1cblxuICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdXBncmFkZVBlbmRpbmdMYW5lVG9TeW5jKHJvb3QsIGxhbmUpIHtcbiAgICAgIC8vIFNpbmNlIHdlJ3JlIHVwZ3JhZGluZyB0aGUgcHJpb3JpdHkgb2YgdGhlIGdpdmVuIGxhbmUsIHRoZXJlIGlzIG5vdyBwZW5kaW5nXG4gICAgICAvLyBzeW5jIHdvcmsuXG4gICAgICByb290LnBlbmRpbmdMYW5lcyB8PSBTeW5jTGFuZTsgLy8gRW50YW5nbGUgdGhlIHN5bmMgbGFuZSB3aXRoIHRoZSBsYW5lIHdlJ3JlIHVwZ3JhZGluZy4gVGhpcyBtZWFucyBTeW5jTGFuZVxuICAgICAgLy8gd2lsbCBub3QgYmUgYWxsb3dlZCB0byBmaW5pc2ggd2l0aG91dCBhbHNvIGZpbmlzaGluZyB0aGUgZ2l2ZW4gbGFuZS5cblxuICAgICAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBTeW5jTGFuZTtcbiAgICAgIHJvb3QuZW50YW5nbGVtZW50c1tTeW5jTGFuZUluZGV4XSB8PSBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrSGlkZGVuVXBkYXRlKHJvb3QsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgobGFuZSk7XG4gICAgICB2YXIgaGlkZGVuVXBkYXRlcyA9IHJvb3QuaGlkZGVuVXBkYXRlcztcbiAgICAgIHZhciBoaWRkZW5VcGRhdGVzRm9yTGFuZSA9IGhpZGRlblVwZGF0ZXNbaW5kZXhdO1xuXG4gICAgICBpZiAoaGlkZGVuVXBkYXRlc0ZvckxhbmUgPT09IG51bGwpIHtcbiAgICAgICAgaGlkZGVuVXBkYXRlc1tpbmRleF0gPSBbdXBkYXRlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZGRlblVwZGF0ZXNGb3JMYW5lLnB1c2godXBkYXRlKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmxhbmUgPSBsYW5lIHwgT2Zmc2NyZWVuTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbihyb290LCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIHJlbmRlckxhbmUgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBsYW5lO1xuXG4gICAgICBpZiAoKHJlbmRlckxhbmUgJiBTeW5jVXBkYXRlTGFuZXMpICE9PSBOb0xhbmUpIHtcbiAgICAgICAgbGFuZSA9IFN5bmNIeWRyYXRpb25MYW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoIChyZW5kZXJMYW5lKSB7XG4gICAgICAgICAgY2FzZSBTeW5jTGFuZTpcbiAgICAgICAgICAgIGxhbmUgPSBTeW5jSHlkcmF0aW9uTGFuZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lOlxuICAgICAgICAgICAgbGFuZSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgRGVmYXVsdExhbmU6XG4gICAgICAgICAgICBsYW5lID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxOlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUyOlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUzOlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU0OlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU1OlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU2OlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU3OlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU4OlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU5OlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMDpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTE6XG4gICAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEyOlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMzpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTQ6XG4gICAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE1OlxuICAgICAgICAgIGNhc2UgUmV0cnlMYW5lMTpcbiAgICAgICAgICBjYXNlIFJldHJ5TGFuZTI6XG4gICAgICAgICAgY2FzZSBSZXRyeUxhbmUzOlxuICAgICAgICAgIGNhc2UgUmV0cnlMYW5lNDpcbiAgICAgICAgICAgIGxhbmUgPSBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBJZGxlTGFuZTpcbiAgICAgICAgICAgIGxhbmUgPSBJZGxlSHlkcmF0aW9uTGFuZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBhbHJlYWR5IGVpdGhlciBhIGh5ZHJhdGlvbiBsYW5lLCBvciBzaG91bGRuJ3RcbiAgICAgICAgICAgIC8vIGJlIHJldHJpZWQgYXQgYSBoeWRyYXRpb24gbGFuZS5cbiAgICAgICAgICAgIGxhbmUgPSBOb0xhbmU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSAvLyBDaGVjayBpZiB0aGUgbGFuZSB3ZSBjaG9zZSBpcyBzdXNwZW5kZWQuIElmIHNvLCB0aGF0IGluZGljYXRlcyB0aGF0IHdlXG4gICAgICAvLyBhbHJlYWR5IGF0dGVtcHRlZCBhbmQgZmFpbGVkIHRvIGh5ZHJhdGUgYXQgdGhhdCBsZXZlbC4gQWxzbyBjaGVjayBpZiB3ZSdyZVxuICAgICAgLy8gYWxyZWFkeSByZW5kZXJpbmcgdGhhdCBsYW5lLCB3aGljaCBpcyByYXJlIGJ1dCBjb3VsZCBoYXBwZW4uXG5cbiAgICAgIGlmICgobGFuZSAmIChyb290LnN1c3BlbmRlZExhbmVzIHwgcmVuZGVyTGFuZXMpKSAhPT0gTm9MYW5lKSB7XG4gICAgICAgIC8vIEdpdmUgdXAgdHJ5aW5nIHRvIGh5ZHJhdGUgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgcmVuZGVyLlxuICAgICAgICByZXR1cm4gTm9MYW5lO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lcykge1xuICAgICAgaWYgKCFpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gcm9vdC5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwO1xuXG4gICAgICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KGxhbmVzKTtcbiAgICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICB2YXIgdXBkYXRlcnMgPSBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwW2luZGV4XTtcbiAgICAgICAgdXBkYXRlcnMuYWRkKGZpYmVyKTtcbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcykge1xuICAgICAgaWYgKCFpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gcm9vdC5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwO1xuICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG5cbiAgICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgobGFuZXMpO1xuICAgICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgIHZhciB1cGRhdGVycyA9IHBlbmRpbmdVcGRhdGVyc0xhbmVNYXBbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cGRhdGVycy5zaXplID4gMCkge1xuICAgICAgICAgIHVwZGF0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsIHx8ICFtZW1vaXplZFVwZGF0ZXJzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuYWRkKGZpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1cGRhdGVycy5jbGVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRyYW5zaXRpb25zRm9yTGFuZXMocm9vdCwgbGFuZXMpIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIERpc2NyZXRlRXZlbnRQcmlvcml0eSA9IFN5bmNMYW5lO1xuICAgIHZhciBDb250aW51b3VzRXZlbnRQcmlvcml0eSA9IElucHV0Q29udGludW91c0xhbmU7XG4gICAgdmFyIERlZmF1bHRFdmVudFByaW9yaXR5ID0gRGVmYXVsdExhbmU7XG4gICAgdmFyIElkbGVFdmVudFByaW9yaXR5ID0gSWRsZUxhbmU7XG4gICAgdmFyIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IE5vTGFuZTtcbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVwZGF0ZVByaW9yaXR5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkobmV3UHJpb3JpdHkpIHtcbiAgICAgIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IG5ld1ByaW9yaXR5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBoaWdoZXJFdmVudFByaW9yaXR5KGEsIGIpIHtcbiAgICAgIHJldHVybiBhICE9PSAwICYmIGEgPCBiID8gYSA6IGI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvd2VyRXZlbnRQcmlvcml0eShhLCBiKSB7XG4gICAgICByZXR1cm4gYSA9PT0gMCB8fCBhID4gYiA/IGEgOiBiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0hpZ2hlckV2ZW50UHJpb3JpdHkoYSwgYikge1xuICAgICAgcmV0dXJuIGEgIT09IDAgJiYgYSA8IGI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKSB7XG4gICAgICB2YXIgbGFuZSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpO1xuXG4gICAgICBpZiAoIWlzSGlnaGVyRXZlbnRQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHksIGxhbmUpKSB7XG4gICAgICAgIHJldHVybiBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNIaWdoZXJFdmVudFByaW9yaXR5KENvbnRpbnVvdXNFdmVudFByaW9yaXR5LCBsYW5lKSkge1xuICAgICAgICByZXR1cm4gQ29udGludW91c0V2ZW50UHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmNsdWRlc05vbklkbGVXb3JrKGxhbmUpKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIElkbGVFdmVudFByaW9yaXR5O1xuICAgIH1cblxuICAgIC8vIFJlbmRlcmVycyB0aGF0IGRvbid0IHN1cHBvcnQgbXV0YXRpb25cbiAgICAvLyBjYW4gcmUtZXhwb3J0IGV2ZXJ5dGhpbmcgZnJvbSB0aGlzIG1vZHVsZS5cbiAgICBmdW5jdGlvbiBzaGltJDIoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIGN1cnJlbnQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBtdXRhdGlvbi4gXCIgK1xuICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBcIiArXG4gICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9IC8vIE11dGF0aW9uICh3aGVuIHVuc3VwcG9ydGVkKVxuICAgIHZhciBjb21taXRNb3VudCA9IHNoaW0kMjtcblxuICAgIC8vIFJlbmRlcmVycyB0aGF0IGRvbid0IHN1cHBvcnQgaHlkcmF0aW9uXG4gICAgLy8gY2FuIHJlLWV4cG9ydCBldmVyeXRoaW5nIGZyb20gdGhpcyBtb2R1bGUuXG4gICAgZnVuY3Rpb24gc2hpbSQxKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjdXJyZW50IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgaHlkcmF0aW9uLiBcIiArXG4gICAgICAgICAgXCJUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFwiICtcbiAgICAgICAgICBcIlBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIH0gLy8gSHlkcmF0aW9uICh3aGVuIHVuc3VwcG9ydGVkKVxuICAgIHZhciBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nID0gc2hpbSQxO1xuICAgIHZhciBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayA9IHNoaW0kMTtcbiAgICB2YXIgZ2V0U3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrRXJyb3JEZXRhaWxzID0gc2hpbSQxO1xuICAgIHZhciByZWdpc3RlclN1c3BlbnNlSW5zdGFuY2VSZXRyeSA9IHNoaW0kMTtcbiAgICB2YXIgZXJyb3JIeWRyYXRpbmdDb250YWluZXIgPSBzaGltJDE7XG5cbiAgICAvLyBSZW5kZXJlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGh5ZHJhdGlvblxuICAgIC8vIGNhbiByZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHRoaXMgbW9kdWxlLlxuICAgIGZ1bmN0aW9uIHNoaW0oKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIGN1cnJlbnQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBSZXNvdXJjZXMuIFwiICtcbiAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gXCIgK1xuICAgICAgICAgIFwiUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfSAvLyBSZXNvdXJjZXMgKHdoZW4gdW5zdXBwb3J0ZWQpXG4gICAgdmFyIHN1c3BlbmRSZXNvdXJjZSA9IHNoaW07XG5cbiAgICB2YXIgX25hdGl2ZUZhYnJpY1VJTWFuYWdlID0gbmF0aXZlRmFicmljVUlNYW5hZ2VyLFxuICAgICAgY3JlYXRlTm9kZSA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5jcmVhdGVOb2RlLFxuICAgICAgY2xvbmVOb2RlV2l0aE5ld0NoaWxkcmVuID0gX25hdGl2ZUZhYnJpY1VJTWFuYWdlLmNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbixcbiAgICAgIGNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbkFuZFByb3BzID1cbiAgICAgICAgX25hdGl2ZUZhYnJpY1VJTWFuYWdlLmNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbkFuZFByb3BzLFxuICAgICAgY2xvbmVOb2RlV2l0aE5ld1Byb3BzID0gX25hdGl2ZUZhYnJpY1VJTWFuYWdlLmNsb25lTm9kZVdpdGhOZXdQcm9wcyxcbiAgICAgIGNyZWF0ZUNoaWxkTm9kZVNldCA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5jcmVhdGVDaGlsZFNldCxcbiAgICAgIGFwcGVuZENoaWxkTm9kZSA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5hcHBlbmRDaGlsZCxcbiAgICAgIGFwcGVuZENoaWxkTm9kZVRvU2V0ID0gX25hdGl2ZUZhYnJpY1VJTWFuYWdlLmFwcGVuZENoaWxkVG9TZXQsXG4gICAgICBjb21wbGV0ZVJvb3QgPSBfbmF0aXZlRmFicmljVUlNYW5hZ2UuY29tcGxldGVSb290LFxuICAgICAgcmVnaXN0ZXJFdmVudEhhbmRsZXIgPSBfbmF0aXZlRmFicmljVUlNYW5hZ2UucmVnaXN0ZXJFdmVudEhhbmRsZXIsXG4gICAgICBGYWJyaWNEZWZhdWx0UHJpb3JpdHkgPVxuICAgICAgICBfbmF0aXZlRmFicmljVUlNYW5hZ2UudW5zdGFibGVfRGVmYXVsdEV2ZW50UHJpb3JpdHksXG4gICAgICBGYWJyaWNEaXNjcmV0ZVByaW9yaXR5ID1cbiAgICAgICAgX25hdGl2ZUZhYnJpY1VJTWFuYWdlLnVuc3RhYmxlX0Rpc2NyZXRlRXZlbnRQcmlvcml0eSxcbiAgICAgIGZhYnJpY0dldEN1cnJlbnRFdmVudFByaW9yaXR5ID1cbiAgICAgICAgX25hdGl2ZUZhYnJpY1VJTWFuYWdlLnVuc3RhYmxlX2dldEN1cnJlbnRFdmVudFByaW9yaXR5O1xuICAgIHZhciBnZXRWaWV3Q29uZmlnRm9yVHlwZSA9XG4gICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkuZ2V0OyAvLyBDb3VudGVyIGZvciB1bmlxdWVseSBpZGVudGlmeWluZyB2aWV3cy5cbiAgICAvLyAlIDEwID09PSAxIG1lYW5zIGl0IGlzIGEgcm9vdFRhZy5cbiAgICAvLyAlIDIgPT09IDAgbWVhbnMgaXQgaXMgYSBGYWJyaWMgdGFnLlxuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGV5IG5ldmVyIG92ZXJsYXAuXG5cbiAgICB2YXIgbmV4dFJlYWN0VGFnID0gMjsgLy8gVE9ETzogUmVtb3ZlIHRoaXMgY29uZGl0aW9uYWwgb25jZSBhbGwgY2hhbmdlcyBoYXZlIHByb3BhZ2F0ZWQuXG5cbiAgICBpZiAocmVnaXN0ZXJFdmVudEhhbmRsZXIpIHtcbiAgICAgIC8qKlxuICAgICAgICogUmVnaXN0ZXIgdGhlIGV2ZW50IGVtaXR0ZXIgd2l0aCB0aGUgbmF0aXZlIGJyaWRnZVxuICAgICAgICovXG4gICAgICByZWdpc3RlckV2ZW50SGFuZGxlcihkaXNwYXRjaEV2ZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICAgICAgYXBwZW5kQ2hpbGROb2RlKHBhcmVudEluc3RhbmNlLm5vZGUsIGNoaWxkLm5vZGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIHJvb3RDb250YWluZXJJbnN0YW5jZSxcbiAgICAgIGhvc3RDb250ZXh0LFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICkge1xuICAgICAgdmFyIHRhZyA9IG5leHRSZWFjdFRhZztcbiAgICAgIG5leHRSZWFjdFRhZyArPSAyO1xuICAgICAgdmFyIHZpZXdDb25maWcgPSBnZXRWaWV3Q29uZmlnRm9yVHlwZSh0eXBlKTtcblxuICAgICAge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmRlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldihcbiAgICAgICAgICAgICAgcHJvcHNba2V5XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBjcmVhdGUocHJvcHMsIHZpZXdDb25maWcudmFsaWRBdHRyaWJ1dGVzKTtcbiAgICAgIHZhciBub2RlID0gY3JlYXRlTm9kZShcbiAgICAgICAgdGFnLCAvLyByZWFjdFRhZ1xuICAgICAgICB2aWV3Q29uZmlnLnVpVmlld0NsYXNzTmFtZSwgLy8gdmlld05hbWVcbiAgICAgICAgcm9vdENvbnRhaW5lckluc3RhbmNlLCAvLyByb290VGFnXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsIC8vIHByb3BzXG4gICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUgLy8gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICAgKTtcbiAgICAgIHZhciBjb21wb25lbnQgPSBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuY3JlYXRlUHVibGljSW5zdGFuY2UoXG4gICAgICAgIHRhZyxcbiAgICAgICAgdmlld0NvbmZpZyxcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIGNhbm9uaWNhbDoge1xuICAgICAgICAgIG5hdGl2ZVRhZzogdGFnLFxuICAgICAgICAgIHZpZXdDb25maWc6IHZpZXdDb25maWcsXG4gICAgICAgICAgY3VycmVudFByb3BzOiBwcm9wcyxcbiAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlSGFuZGxlOiBpbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuICAgICAgICAgIHB1YmxpY0luc3RhbmNlOiBjb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlVGV4dEluc3RhbmNlKFxuICAgICAgdGV4dCxcbiAgICAgIHJvb3RDb250YWluZXJJbnN0YW5jZSxcbiAgICAgIGhvc3RDb250ZXh0LFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICkge1xuICAgICAge1xuICAgICAgICBpZiAoIWhvc3RDb250ZXh0LmlzSW5BUGFyZW50VGV4dCkge1xuICAgICAgICAgIGVycm9yKFwiVGV4dCBzdHJpbmdzIG11c3QgYmUgcmVuZGVyZWQgd2l0aGluIGEgPFRleHQ+IGNvbXBvbmVudC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHRhZyA9IG5leHRSZWFjdFRhZztcbiAgICAgIG5leHRSZWFjdFRhZyArPSAyO1xuICAgICAgdmFyIG5vZGUgPSBjcmVhdGVOb2RlKFxuICAgICAgICB0YWcsIC8vIHJlYWN0VGFnXG4gICAgICAgIFwiUkNUUmF3VGV4dFwiLCAvLyB2aWV3TmFtZVxuICAgICAgICByb290Q29udGFpbmVySW5zdGFuY2UsIC8vIHJvb3RUYWdcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgfSwgLy8gcHJvcHNcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSAvLyBpbnN0YW5jZSBoYW5kbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBub2RlXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSb290SG9zdENvbnRleHQocm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0luQVBhcmVudFRleHQ6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0KHBhcmVudEhvc3RDb250ZXh0LCB0eXBlKSB7XG4gICAgICB2YXIgcHJldklzSW5BUGFyZW50VGV4dCA9IHBhcmVudEhvc3RDb250ZXh0LmlzSW5BUGFyZW50VGV4dDtcbiAgICAgIHZhciBpc0luQVBhcmVudFRleHQgPVxuICAgICAgICB0eXBlID09PSBcIkFuZHJvaWRUZXh0SW5wdXRcIiB8fCAvLyBBbmRyb2lkXG4gICAgICAgIHR5cGUgPT09IFwiUkNUTXVsdGlsaW5lVGV4dElucHV0Vmlld1wiIHx8IC8vIGlPU1xuICAgICAgICB0eXBlID09PSBcIlJDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3XCIgfHwgLy8gaU9TXG4gICAgICAgIHR5cGUgPT09IFwiUkNUVGV4dFwiIHx8XG4gICAgICAgIHR5cGUgPT09IFwiUkNUVmlydHVhbFRleHRcIjsgLy8gVE9ETzogSWYgdGhpcyBpcyBhbiBvZmZzY3JlZW4gaG9zdCBjb250YWluZXIsIHdlIHNob3VsZCByZXVzZSB0aGVcbiAgICAgIC8vIHBhcmVudCBjb250ZXh0LlxuXG4gICAgICBpZiAocHJldklzSW5BUGFyZW50VGV4dCAhPT0gaXNJbkFQYXJlbnRUZXh0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNJbkFQYXJlbnRUZXh0OiBpc0luQVBhcmVudFRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRIb3N0Q29udGV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaW5zdGFuY2UuY2Fub25pY2FsICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UuY2Fub25pY2FsLnB1YmxpY0luc3RhbmNlICE9IG51bGxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UuY2Fub25pY2FsLnB1YmxpY0luc3RhbmNlO1xuICAgICAgfSAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBsZWdhY3kgcmVuZGVyZXIsIGluIGNhc2UgaXQncyB1c2VkIHdpdGggRmFicmljXG4gICAgICAvLyBpbiB0aGUgc2FtZSBhcHAuXG4gICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbcHJvcC1taXNzaW5nXVxuXG4gICAgICBpZiAoaW5zdGFuY2UuX25hdGl2ZVRhZyAhPSBudWxsKSB7XG4gICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFB1YmxpY1RleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgICAgIGlmICh0ZXh0SW5zdGFuY2UucHVibGljSW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgICB0ZXh0SW5zdGFuY2UucHVibGljSW5zdGFuY2UgPVxuICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5jcmVhdGVQdWJsaWNUZXh0SW5zdGFuY2UoXG4gICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlSGFuZGxlXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleHRJbnN0YW5jZS5wdWJsaWNJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlKFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICkge1xuICAgICAgdmFyIGluc3RhbmNlID0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGU7IC8vIFJlYWN0IHJlc2V0cyBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgZmliZXIgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVubW91bnRlZFxuICAgICAgLy8gdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXG5cbiAgICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgcmV0dXJuIGdldFB1YmxpY1RleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudEluc3RhbmNlID0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGU7XG4gICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoZWxlbWVudEluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgICAgIC8vIFRPRE8gKGJ2YXVnaG4pIFJldmlzaXQgdGhpcyBkZWNpc2lvbi5cbiAgICAgIC8vIEFsd2F5cyByZXR1cm5pbmcgZmFsc2Ugc2ltcGxpZmllcyB0aGUgY3JlYXRlSW5zdGFuY2UoKSBpbXBsZW1lbnRhdGlvbixcbiAgICAgIC8vIEJ1dCBjcmVhdGVzIGFuIGFkZGl0aW9uYWwgY2hpbGQgRmliZXIgZm9yIHJhdyB0ZXh0IGNoaWxkcmVuLlxuICAgICAgLy8gTm8gYWRkaXRpb25hbCBuYXRpdmUgdmlld3MgYXJlIGNyZWF0ZWQgdGhvdWdoLlxuICAgICAgLy8gSXQncyBub3QgY2xlYXIgdG8gbWUgd2hpY2ggaXMgYmV0dGVyIHNvIEknbSBkZWZlcnJpbmcgZm9yIG5vdy5cbiAgICAgIC8vIE1vcmUgY29udGV4dCBAIGdpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC84NTYwI2Rpc2N1c3Npb25fcjkyMTExMzAzXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRFdmVudFByaW9yaXR5KCkge1xuICAgICAgdmFyIGN1cnJlbnRFdmVudFByaW9yaXR5ID0gZmFicmljR2V0Q3VycmVudEV2ZW50UHJpb3JpdHlcbiAgICAgICAgPyBmYWJyaWNHZXRDdXJyZW50RXZlbnRQcmlvcml0eSgpXG4gICAgICAgIDogbnVsbDtcblxuICAgICAgaWYgKGN1cnJlbnRFdmVudFByaW9yaXR5ICE9IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50RXZlbnRQcmlvcml0eSkge1xuICAgICAgICAgIGNhc2UgRmFicmljRGlzY3JldGVQcmlvcml0eTpcbiAgICAgICAgICAgIHJldHVybiBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG5cbiAgICAgICAgICBjYXNlIEZhYnJpY0RlZmF1bHRQcmlvcml0eTpcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkQXR0ZW1wdEVhZ2VyVHJhbnNpdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFRoZSBGYWJyaWMgcmVuZGVyZXIgaXMgc2Vjb25kYXJ5IHRvIHRoZSBleGlzdGluZyBSZWFjdCBOYXRpdmUgcmVuZGVyZXIuXG5cbiAgICB2YXIgd2FybnNJZk5vdEFjdGluZyA9IGZhbHNlO1xuICAgIHZhciBzY2hlZHVsZVRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgIHZhciBjYW5jZWxUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgIHZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGZ1bmN0aW9uIGNsb25lSW5zdGFuY2UoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIHR5cGUsXG4gICAgICBvbGRQcm9wcyxcbiAgICAgIG5ld1Byb3BzLFxuICAgICAga2VlcENoaWxkcmVuLFxuICAgICAgbmV3Q2hpbGRTZXRcbiAgICApIHtcbiAgICAgIHZhciB2aWV3Q29uZmlnID0gaW5zdGFuY2UuY2Fub25pY2FsLnZpZXdDb25maWc7XG4gICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGRpZmYob2xkUHJvcHMsIG5ld1Byb3BzLCB2aWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcyk7IC8vIFRPRE86IElmIHRoZSBldmVudCBoYW5kbGVycyBoYXZlIGNoYW5nZWQsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjdXJyZW50IHByb3BzXG4gICAgICAvLyBpbiB0aGUgY29tbWl0IHBoYXNlIGJ1dCB0aGVyZSBpcyBubyBob3N0IGNvbmZpZyBob29rIHRvIGRvIGl0IHlldC5cbiAgICAgIC8vIFNvIGluc3RlYWQgd2UgaGFjayBpdCBieSB1cGRhdGluZyBpdCBpbiB0aGUgcmVuZGVyIHBoYXNlLlxuXG4gICAgICBpbnN0YW5jZS5jYW5vbmljYWwuY3VycmVudFByb3BzID0gbmV3UHJvcHM7XG4gICAgICB2YXIgbm9kZSA9IGluc3RhbmNlLm5vZGU7XG4gICAgICB2YXIgY2xvbmU7XG5cbiAgICAgIGlmIChrZWVwQ2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbG9uZSA9IGNsb25lTm9kZVdpdGhOZXdQcm9wcyhub2RlLCB1cGRhdGVQYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBjaGFuZ2VzXG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBwYXNzQ2hpbGRyZW5XaGVuQ2xvbmluZ1BlcnNpc3RlZE5vZGVzIGlzIGVuYWJsZWQsIGNoaWxkcmVuIHdpbGwgYmUgbm9uLW51bGxcbiAgICAgICAgaWYgKG5ld0NoaWxkU2V0ICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xvbmUgPSBjbG9uZU5vZGVXaXRoTmV3Q2hpbGRyZW5BbmRQcm9wcyhcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbmV3Q2hpbGRTZXQsXG4gICAgICAgICAgICAgIHVwZGF0ZVBheWxvYWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb25lID0gY2xvbmVOb2RlV2l0aE5ld0NoaWxkcmVuKG5vZGUsIG5ld0NoaWxkU2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNsb25lID0gY2xvbmVOb2RlV2l0aE5ld0NoaWxkcmVuQW5kUHJvcHMobm9kZSwgdXBkYXRlUGF5bG9hZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb25lID0gY2xvbmVOb2RlV2l0aE5ld0NoaWxkcmVuKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBjbG9uZSxcbiAgICAgICAgY2Fub25pY2FsOiBpbnN0YW5jZS5jYW5vbmljYWxcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lSGlkZGVuSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gICAgICB2YXIgdmlld0NvbmZpZyA9IGluc3RhbmNlLmNhbm9uaWNhbC52aWV3Q29uZmlnO1xuICAgICAgdmFyIG5vZGUgPSBpbnN0YW5jZS5ub2RlO1xuICAgICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBjcmVhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpZXdDb25maWcudmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZTogY2xvbmVOb2RlV2l0aE5ld1Byb3BzKG5vZGUsIHVwZGF0ZVBheWxvYWQpLFxuICAgICAgICBjYW5vbmljYWw6IGluc3RhbmNlLmNhbm9uaWNhbFxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVIaWRkZW5UZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb250YWluZXJDaGlsZFNldCgpIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkTm9kZVNldCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBlbmRDaGlsZFRvQ29udGFpbmVyQ2hpbGRTZXQoY2hpbGRTZXQsIGNoaWxkKSB7XG4gICAgICB7XG4gICAgICAgIGFwcGVuZENoaWxkTm9kZVRvU2V0KGNoaWxkU2V0LCBjaGlsZC5ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZmluYWxpemVDb250YWluZXJDaGlsZHJlbihjb250YWluZXIsIG5ld0NoaWxkcmVuKSB7XG4gICAgICBjb21wbGV0ZVJvb3QoY29udGFpbmVyLCBuZXdDaGlsZHJlbik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxhY2VDb250YWluZXJDaGlsZHJlbihjb250YWluZXIsIG5ld0NoaWxkcmVuKSB7XG4gICAgICAvLyBOb29wIC0gY2hpbGRyZW4gd2lsbCBiZSByZXBsYWNlZCBpbiBmaW5hbGl6ZUNvbnRhaW5lckNoaWxkcmVuXG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRJbnN0YW5jZSh0eXBlLCBwcm9wcykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhaXRGb3JDb21taXRUb0JlUmVhZHkoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIG9rIGluIERPTSBiZWNhdXNlIHRoZXkgdHlwZXMgYXJlIGludGVyY2hhbmdlYWJsZSwgYnV0IGluIFJlYWN0IE5hdGl2ZVxuICAgIC8vIHRoZXkgYXJlbid0LlxuXG4gICAgZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBub2RlOyAvLyBJbiBSZWFjdCBOYXRpdmUsIG5vZGUgaXMgbmV2ZXIgYSB0ZXh0IGluc3RhbmNlXG5cbiAgICAgIGlmIChcbiAgICAgICAgaW5zdGFuY2UuY2Fub25pY2FsICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UuY2Fub25pY2FsLmludGVybmFsSW5zdGFuY2VIYW5kbGUgIT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5jYW5vbmljYWwuaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBEZXZUb29scyBpbmNvcnJlY3RseSBwYXNzZXMgYSBmaWJlciBpbiBSZWFjdCBOYXRpdmUuXG5cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoZmliZXIpIHtcbiAgICAgIHZhciBwdWJsaWNJbnN0YW5jZSA9IGdldFB1YmxpY0luc3RhbmNlKGZpYmVyLnN0YXRlTm9kZSk7XG5cbiAgICAgIGlmIChwdWJsaWNJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGhvc3QgaW5zdGFuY2UgZnJvbSBmaWJlclwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHB1YmxpY0luc3RhbmNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5jYW5vbmljYWwuY3VycmVudFByb3BzO1xuICAgIH1cblxuICAgIHZhciBSZWFjdEZhYnJpY0dsb2JhbFJlc3BvbmRlckhhbmRsZXIgPSB7XG4gICAgICBvbkNoYW5nZTogZnVuY3Rpb24gKGZyb20sIHRvLCBibG9ja05hdGl2ZVJlc3BvbmRlcikge1xuICAgICAgICBpZiAoZnJvbSAmJiBmcm9tLnN0YXRlTm9kZSkge1xuICAgICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gY2xlYXJKU1Jlc3BvbmRlclxuICAgICAgICAgIG5hdGl2ZUZhYnJpY1VJTWFuYWdlci5zZXRJc0pTUmVzcG9uZGVyKFxuICAgICAgICAgICAgZnJvbS5zdGF0ZU5vZGUubm9kZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgYmxvY2tOYXRpdmVSZXNwb25kZXIgfHwgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvICYmIHRvLnN0YXRlTm9kZSkge1xuICAgICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gc2V0SlNSZXNwb25kZXJcbiAgICAgICAgICBuYXRpdmVGYWJyaWNVSU1hbmFnZXIuc2V0SXNKU1Jlc3BvbmRlcihcbiAgICAgICAgICAgIHRvLnN0YXRlTm9kZS5ub2RlLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIGJsb2NrTmF0aXZlUmVzcG9uZGVyIHx8IGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRDb21wb25lbnRUcmVlKFxuICAgICAgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSxcbiAgICAgIGdldEluc3RhbmNlRnJvbU5vZGUsXG4gICAgICBnZXROb2RlRnJvbUluc3RhbmNlXG4gICAgKTtcbiAgICBSZXNwb25kZXJFdmVudFBsdWdpbi5pbmplY3Rpb24uaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlcihcbiAgICAgIFJlYWN0RmFicmljR2xvYmFsUmVzcG9uZGVySGFuZGxlclxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICAgICAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gICAgICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gICAgICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAgICAgKiBJZiB0aGlzIGJlY29tZXMgYW4gYWN0dWFsIE1hcCwgdGhhdCB3aWxsIGJyZWFrLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAga2V5Ll9yZWFjdEludGVybmFscyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEFUVEVOVElPTlxuICAgIC8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbiAgICAvLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4gICAgLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG4gICAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpO1xuICAgIHZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik7XG4gICAgdmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik7XG4gICAgdmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik7XG4gICAgdmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG4gICAgdmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG4gICAgdmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpO1xuICAgIHZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpO1xuICAgIHZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpO1xuICAgIHZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTtcbiAgICB2YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik7XG4gICAgdmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1xuICAgIHZhciBSRUFDVF9TQ09QRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO1xuICAgIHZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO1xuICAgIHZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5vZmZzY3JlZW5cIik7XG4gICAgdmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpO1xuICAgIHZhciBSRUFDVF9DQUNIRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNhY2hlXCIpO1xuICAgIHZhciBSRUFDVF9UUkFDSU5HX01BUktFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYWNpbmdfbWFya2VyXCIpO1xuICAgIHZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG4gICAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gXCJAQGl0ZXJhdG9yXCI7XG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIG1heWJlSXRlcmF0b3IgPVxuICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgICAgIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXcmFwcGVkTmFtZSQxKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xuXG4gICAgICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8IFwiXCI7XG4gICAgICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSBcIlwiXG4gICAgICAgID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiXG4gICAgICAgIDogd3JhcHBlck5hbWU7XG4gICAgfSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuICAgIGZ1bmN0aW9uIGdldENvbnRleHROYW1lJDEodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCI7XG4gICAgfVxuXG4gICAgdmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKTsgLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAgICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSkge1xuICAgICAgICAgIC8vIFRPRE86IENyZWF0ZSBhIGNvbnZlbnRpb24gZm9yIG5hbWluZyBjbGllbnQgcmVmZXJlbmNlcyB3aXRoIGRlYnVnIGluZm8uXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcblxuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcblxuICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3RyaWN0TW9kZVwiO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUkMShjb250ZXh0KSArIFwiLkNvbnN1bWVyXCI7XG5cbiAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lJDEocHJvdmlkZXIuX2NvbnRleHQpICsgXCIuUHJvdmlkZXJcIjtcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSQxKHR5cGUsIHR5cGUucmVuZGVyLCBcIkZvcndhcmRSZWZcIik7XG5cbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6IHtcbiAgICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgIChmdW5jdGlvbk5hbWUgIT09IFwiXCJcbiAgICAgICAgICA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIlxuICAgICAgICAgIDogd3JhcHBlck5hbWUpXG4gICAgICApO1xuICAgIH0gLy8gS2VlcCBpbiBzeW5jIHdpdGggc2hhcmVkL2dldENvbXBvbmVudE5hbWVGcm9tVHlwZVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikge1xuICAgICAgdmFyIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG5cbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFwiQ2FjaGVcIjtcblxuICAgICAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgXCIuQ29uc3VtZXJcIjtcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyBcIi5Qcm92aWRlclwiO1xuXG4gICAgICAgIGNhc2UgRGVoeWRyYXRlZEZyYWdtZW50OlxuICAgICAgICAgIHJldHVybiBcIkRlaHlkcmF0ZWRGcmFnbWVudFwiO1xuXG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsIFwiRm9yd2FyZFJlZlwiKTtcblxuICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG5cbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAvLyBIb3N0IGNvbXBvbmVudCB0eXBlIGlzIHRoZSBkaXNwbGF5IG5hbWUgKGUuZy4gXCJkaXZcIiwgXCJWaWV3XCIpXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcmV0dXJuIFwiUm9vdFwiO1xuXG4gICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgcmV0dXJuIFwiVGV4dFwiO1xuXG4gICAgICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgICAgICAvLyBOYW1lIGNvbWVzIGZyb20gdGhlIHR5cGUgaW4gdGhpcyBjYXNlOyB3ZSBkb24ndCBoYXZlIGEgdGFnLlxuICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgICAgY2FzZSBNb2RlOlxuICAgICAgICAgIGlmICh0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFKSB7XG4gICAgICAgICAgICAvLyBEb24ndCBiZSBsZXNzIHNwZWNpZmljIHRoYW4gc2hhcmVkL2dldENvbXBvbmVudE5hbWVGcm9tVHlwZVxuICAgICAgICAgICAgcmV0dXJuIFwiU3RyaWN0TW9kZVwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBcIk1vZGVcIjtcblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gXCJPZmZzY3JlZW5cIjtcblxuICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG5cbiAgICAgICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gXCJTY29wZVwiO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcblxuICAgICAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFwiVHJhY2luZ01hcmtlclwiO1xuICAgICAgICAvLyBUaGUgZGlzcGxheSBuYW1lIGZvciB0aGlzIHRhZ3MgY29tZSBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIHR5cGU6XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG4gICAgZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICAgICAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gICAgICBpZiAoIWZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoaXMgbWlnaHQgYmUgYSBuZXcgdHJlZSB0aGF0IGlzbid0IGluc2VydGVkXG4gICAgICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgICAgICB2YXIgbmV4dE5vZGUgPSBub2RlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgICAgICBpZiAoKG5vZGUuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24gb3IgaW4tcHJvZ3Jlc3MgaHlkcmF0aW9uLiBUaGUgbmVhcmVzdCBwb3NzaWJsZVxuICAgICAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgICAgIC8vIGlmIHRoYXQgb25lIGlzIHN0aWxsIG1vdW50ZWQuXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuO1xuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAobm9kZS5yZXR1cm4pIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgICAgICAvLyByZW5kZXJDb250YWluZXJJbnRvU3VidHJlZS5cbiAgICAgICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICAgICAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgICAgIC8vIHRoYXQgaGFzIGJlZW4gdW5tb3VudGVkLlxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNGaWJlck1vdW50ZWQoZmliZXIpIHtcbiAgICAgIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzTW91bnRlZChjb21wb25lbnQpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmICghaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uIFwiICtcbiAgICAgICAgICAgICAgICBcInJlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgXCIgK1xuICAgICAgICAgICAgICAgIFwibmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgXCIgK1xuICAgICAgICAgICAgICAgIFwicmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgXCIgK1xuICAgICAgICAgICAgICAgIFwiY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIob3duZXJGaWJlcikgfHwgXCJBIGNvbXBvbmVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgICAgIGlmICghZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICAgICAgaWYgKGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpICE9PSBmaWJlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoIWFsdGVybmF0ZSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpO1xuXG4gICAgICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAgICAgLy8gdG8gc2VlIHdoYXQgcGF0aCB0aGUgcm9vdCBwb2ludHMgdG8uIE9uIHRoZSB3YXkgd2UgbWF5IGhpdCBvbmUgb2YgdGhlXG4gICAgICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cblxuICAgICAgdmFyIGEgPSBmaWJlcjtcbiAgICAgIHZhciBiID0gYWx0ZXJuYXRlO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuXG4gICAgICAgIGlmIChwYXJlbnRBID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChwYXJlbnRCID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gYWx0ZXJuYXRlLiBUaGlzIGlzIGFuIHVudXN1YWwgY2FzZS4gQ3VycmVudGx5LCBpdCBvbmx5XG4gICAgICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgICAgICAvLyBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBTdXNwZW5zZSBmaWJlciBhbmQgaXRzIGNoaWxkcmVuLiBTa2lwXG4gICAgICAgICAgLy8gb3ZlciB0aGlzIGV4dHJhIGZyYWdtZW50IGZpYmVyIGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBhcmVudC5cbiAgICAgICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICAgICAgaWYgKG5leHRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGEgPSBiID0gbmV4dFBhcmVudDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gLy8gSWYgdGhlcmUncyBubyBwYXJlbnQsIHdlJ3JlIGF0IHRoZSByb290LlxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gSWYgYm90aCBjb3BpZXMgb2YgdGhlIHBhcmVudCBmaWJlciBwb2ludCB0byB0aGUgc2FtZSBjaGlsZCwgd2UgY2FuXG4gICAgICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgICAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cbiAgICAgICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBCIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgfSAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBhbHRlcm5hdGUgZm9yIGFueSBtb3VudGluZyBub2RlLiBTbyB0aGUgb25seVxuICAgICAgICAgIC8vIHdheSB0aGlzIGNvdWxkIHBvc3NpYmx5IGhhcHBlbiBpcyBpZiB0aGlzIHdhcyB1bm1vdW50ZWQsIGlmIGF0IGFsbC5cblxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgICAgIC8vIGZpYmVycy4gV2UgYXNzdW1lIHRoYXQgcmV0dXJuIHBvaW50ZXJzIG5ldmVyIGNyaXNzLWNyb3NzLCBzbyBBIG11c3RcbiAgICAgICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgZmliZXIuIFdlJ2xsIGhhdmUgdG8gdXNlIHRoZVxuICAgICAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICAgICAgdmFyIF9jaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQidzIGNoaWxkIHNldFxuICAgICAgICAgICAgX2NoaWxkID0gcGFyZW50Qi5jaGlsZDtcblxuICAgICAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNoaWxkIHdhcyBub3QgZm91bmQgaW4gZWl0aGVyIHBhcmVudCBzZXQuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGEuYWx0ZXJuYXRlICE9PSBiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAgICAgLy8gdW5tb3VudGVkLlxuXG4gICAgICBpZiAoYS50YWcgIT09IEhvc3RSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgfSAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG5cbiAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyKHBhcmVudCkge1xuICAgICAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuICAgICAgcmV0dXJuIGN1cnJlbnRQYXJlbnQgIT09IG51bGxcbiAgICAgICAgPyBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwoY3VycmVudFBhcmVudClcbiAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChub2RlKSB7XG4gICAgICAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fFxuICAgICAgICB0YWcgPT09IEhvc3RIb2lzdGFibGUgfHxcbiAgICAgICAgdGFnID09PSBIb3N0U2luZ2xldG9uIHx8XG4gICAgICAgIHRhZyA9PT0gSG9zdFRleHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChjaGlsZCk7XG5cbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9lc0ZpYmVyQ29udGFpbihwYXJlbnRGaWJlciwgY2hpbGRGaWJlcikge1xuICAgICAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuICAgICAgdmFyIHBhcmVudEZpYmVyQWx0ZXJuYXRlID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50RmliZXJBbHRlcm5hdGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIG93bmVyRm4pIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIG93bmVyTmFtZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKG93bmVyRm4pIHtcbiAgICAgICAgICBvd25lck5hbWUgPSBvd25lckZuLmRpc3BsYXlOYW1lIHx8IG93bmVyRm4ubmFtZSB8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgUG9zc2libHlXZWFrTWFwJDEgPSB0eXBlb2YgV2Vha01hcCA9PT0gXCJmdW5jdGlvblwiID8gV2Vha01hcCA6IE1hcDtcbiAgICAgIG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJOYW1lKSB7XG4gICAgICB2YXIgc291cmNlSW5mbyA9IFwiXCI7XG5cbiAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgc291cmNlSW5mbyA9IFwiIChjcmVhdGVkIGJ5IFwiICsgb3duZXJOYW1lICsgXCIpXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcIlxcbiAgICBpbiBcIiArIChuYW1lIHx8IFwiVW5rbm93blwiKSArIHNvdXJjZUluZm87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGN0b3IsIG93bmVyRm4pIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShjdG9yLCBvd25lckZuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBvd25lckZuKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghZm4pIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lID0gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSB8fCBudWxsO1xuICAgICAgICB2YXIgb3duZXJOYW1lID0gbnVsbDtcblxuICAgICAgICBpZiAob3duZXJGbikge1xuICAgICAgICAgIG93bmVyTmFtZSA9IG93bmVyRm4uZGlzcGxheU5hbWUgfHwgb3duZXJGbi5uYW1lIHx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBvd25lck5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBvd25lckZuKSB7XG4gICAgICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLCBvd25lckZuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUsIG93bmVyRm4pO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIsIG93bmVyRm4pO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiLCBvd25lckZuKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIsIG93bmVyRm4pO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIG93bmVyRm4pO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6IHtcbiAgICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihcbiAgICAgICAgICAgICAgICBpbml0KHBheWxvYWQpLFxuICAgICAgICAgICAgICAgIG93bmVyRm5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4gICAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG4gICAgZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAge1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihcbiAgICAgICAgICAgIGVsZW1lbnQudHlwZSxcbiAgICAgICAgICAgIG93bmVyID8gb3duZXIudHlwZSA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1Byb3BUeXBlcyhcbiAgICAgIHR5cGVTcGVjcyxcbiAgICAgIHZhbHVlcyxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgIGVsZW1lbnRcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgICAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcblxuICAgICAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8IFwiUmVhY3QgY2xhc3NcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIjogXCIgK1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiArXG4gICAgICAgICAgICAgICAgICAgIFwiIHR5cGUgYFwiICtcbiAgICAgICAgICAgICAgICAgICAgdHlwZVNwZWNOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgXCJgIGlzIGludmFsaWQ7IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gK1xuICAgICAgICAgICAgICAgICAgICBcImAuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlRoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlcnIubmFtZSA9IFwiSW52YXJpYW50IFZpb2xhdGlvblwiO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXShcbiAgICAgICAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgdHlwZVNwZWNOYW1lLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBcIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlc1wiICtcbiAgICAgICAgICAgICAgICAgIFwiIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciBcIiArXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICBcInNoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS5cIixcbiAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lIHx8IFwiUmVhY3QgY2xhc3NcIixcbiAgICAgICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgICAgICB0eXBlU3BlY05hbWUsXG4gICAgICAgICAgICAgICAgdHlwZW9mIGVycm9yJDFcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgICAgICAgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgIGVycm9yKFwiRmFpbGVkICVzIHR5cGU6ICVzXCIsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB2YWx1ZVN0YWNrID0gW107XG4gICAgdmFyIGZpYmVyU3RhY2s7XG5cbiAgICB7XG4gICAgICBmaWJlclN0YWNrID0gW107XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gLTE7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKFwiVW5leHBlY3RlZCBwb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgICAgICBlcnJvcihcIlVuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICAgICAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaW5kZXgtLTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICAgICAge1xuICAgICAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICAgICAgfVxuXG4gICAgICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbiAgICB7XG4gICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgZW1wdHlDb250ZXh0T2JqZWN0ID0ge307XG5cbiAgICB7XG4gICAgICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG4gICAgfSAvLyBBIGN1cnNvciB0byB0aGUgY3VycmVudCBtZXJnZWQgY29udGV4dCBvYmplY3Qgb24gdGhlIHN0YWNrLlxuXG4gICAgdmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbiAgICB2YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbiAgICAvLyBXZSB1c2UgdGhpcyB0byBnZXQgYWNjZXNzIHRvIHRoZSBwYXJlbnQgY29udGV4dCBhZnRlciB3ZSBoYXZlIGFscmVhZHlcbiAgICAvLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICAgIGZ1bmN0aW9uIGdldFVubWFza2VkQ29udGV4dChcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIgJiYgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgICAgICAvLyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHB1c2hlZCBpdHMgb3duIGNoaWxkIGNvbnRleHQgb24gdGhlIHN0YWNrLiBBIGNvbnRleHRcbiAgICAgICAgICAvLyBwcm92aWRlciBzaG91bGQgbm90IFwic2VlXCIgaXRzIG93biBjaGlsZCBjb250ZXh0LiBUaGVyZWZvcmUgd2UgcmVhZCB0aGVcbiAgICAgICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgICAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIG1hc2tlZENvbnRleHQpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgICAgICAgLy8gVGhpcyBtYXkgdHJpZ2dlciBpbmZpbml0ZSBsb29wcyBpZiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGNhbGxzIHNldFN0YXRlLlxuXG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5zdGFuY2UgJiZcbiAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PVxuICAgICAgICAgICAgdW5tYXNrZWRDb250ZXh0XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIGNvbnRleHRUeXBlcykge1xuICAgICAgICAgIGNvbnRleHRba2V5XSA9IHVubWFza2VkQ29udGV4dFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJVbmtub3duXCI7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCBcImNvbnRleHRcIiwgbmFtZSk7XG4gICAgICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgICAgICAvLyBDb250ZXh0IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjbGFzcyBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHNvIGNoZWNrIGZvciBpbnN0YW5jZS5cblxuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgICAgIHJldHVybiBjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICAgICAge1xuICAgICAgICBpZiAoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIGNvbnRleHQsIGZpYmVyKTtcbiAgICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlczsgLy8gVE9ETyAoYnZhdWdobikgUmVwbGFjZSB0aGlzIGJlaGF2aW9yIHdpdGggYW4gaW52YXJpYW50KCkgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgLy8gSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCBpbiBGaWJlciB0byBtYXRjaCB0aGUgKHVuaW50ZW50aW9uYWwpIGJlaGF2aW9yIGluIFN0YWNrLlxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiO1xuXG4gICAgICAgICAgICBpZiAoIXdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpO1xuXG4gICAgICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiKSArXG4gICAgICAgICAgICAgICAgJy5nZXRDaGlsZENvbnRleHQoKToga2V5IFwiJyArXG4gICAgICAgICAgICAgICAgY29udGV4dEtleSArXG4gICAgICAgICAgICAgICAgJ1wiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJVbmtub3duXCI7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICBjaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgICAgIGNoaWxkQ29udGV4dCxcbiAgICAgICAgICAgIFwiY2hpbGQgY29udGV4dFwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBXZSBwdXNoIHRoZSBjb250ZXh0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBzdGFjayBpbnRlZ3JpdHkuXG4gICAgICAgIC8vIElmIHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIHdpbGwgcHVzaCBudWxsIGF0IGZpcnN0LFxuICAgICAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICAgICAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID1cbiAgICAgICAgICAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQpIHx8XG4gICAgICAgICAgZW1wdHlDb250ZXh0T2JqZWN0OyAvLyBSZW1lbWJlciB0aGUgcGFyZW50IGNvbnRleHQgc28gd2UgY2FuIG1lcmdlIHdpdGggaXQgbGF0ZXIuXG4gICAgICAgIC8vIEluaGVyaXQgdGhlIHBhcmVudCdzIGRpZC1wZXJmb3JtLXdvcmsgdmFsdWUgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBibG9ja2luZyB1cGRhdGVzLlxuXG4gICAgICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQ7XG4gICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHB1c2goXG4gICAgICAgICAgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvcixcbiAgICAgICAgICBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBoYXZlIGFuIGluc3RhbmNlIGJ5IHRoaXMgcG9pbnQuIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgICAgICAvLyBNZXJnZSBwYXJlbnQgYW5kIG93biBjb250ZXh0LlxuICAgICAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgICAgICB2YXIgbWVyZ2VkQ29udGV4dCA9IHByb2Nlc3NDaGlsZENvbnRleHQoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcmV2aW91c0NvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB1bndpbmQgdGhlIGNvbnRleHQgaW4gdGhlIHJldmVyc2Ugb3JkZXIuXG5cbiAgICAgICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgICAgICAvLyBtYWtlcyBzZW5zZSBlbHNld2hlcmVcbiAgICAgICAgaWYgKCFpc0ZpYmVyTW91bnRlZChmaWJlcikgfHwgZmliZXIudGFnICE9PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IG5vZGUudHlwZTtcblxuICAgICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFwiICtcbiAgICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBMZWdhY3lSb290ID0gMDtcbiAgICB2YXIgQ29uY3VycmVudFJvb3QgPSAxO1xuXG4gICAgLy8gV2UgdXNlIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHN0YXRlIG9iamVjdCBhcyBhbiBpbmRpY2F0b3IgdGhhdCB0aGUgY29tcG9uZW50XG4gICAgLy8gaXMgaGlkZGVuLlxuICAgIHZhciBPZmZzY3JlZW5WaXNpYmxlID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDE7XG4gICAgdmFyIE9mZnNjcmVlbkRldGFjaGVkID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMjtcbiAgICB2YXIgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQgPVxuICAgICAgLyogICAgICovXG4gICAgICA0O1xuICAgIGZ1bmN0aW9uIGlzT2Zmc2NyZWVuTWFudWFsKG9mZnNjcmVlbkZpYmVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBvZmZzY3JlZW5GaWJlci5tZW1vaXplZFByb3BzICE9PSBudWxsICYmXG4gICAgICAgIG9mZnNjcmVlbkZpYmVyLm1lbW9pemVkUHJvcHMubW9kZSA9PT0gXCJtYW51YWxcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIG9iamVjdElzID0gdHlwZW9mIE9iamVjdC5pcyA9PT0gXCJmdW5jdGlvblwiID8gT2JqZWN0LmlzIDogaXM7IC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cblxuICAgIC8vIFRoaXMgaXMgaW1wb3J0ZWQgYnkgdGhlIGV2ZW50IHJlcGxheWluZyBpbXBsZW1lbnRhdGlvbiBpbiBSZWFjdCBET00uIEl0J3NcbiAgICAvLyBpbiBhIHNlcGFyYXRlIGZpbGUgdG8gYnJlYWsgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFuZFxuICAgIC8vIHRoZSByZWNvbmNpbGVyLlxuICAgIGZ1bmN0aW9uIGlzUm9vdERlaHlkcmF0ZWQocm9vdCkge1xuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHJvb3QuY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZS5pc0RlaHlkcmF0ZWQ7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbiAgICB2YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG4gICAgdmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpOyAvLyBSZXByZXNlbnRzIHRoZSBuZWFyZXN0IGhvc3QgdHJhbnNpdGlvbiBwcm92aWRlciAoaW4gUmVhY3QgRE9NLCBhIDxmb3JtIC8+KVxuXG4gICAgZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGMgPT09IG51bGwpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgXCIgK1xuICAgICAgICAgICAgICBcImluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gICAgICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAgICAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICAgICAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gICAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgICAgIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7IC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgICAgIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gICAgICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAgICAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAgICAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbnVsbCwgZmliZXIpO1xuICAgICAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dCgpOyAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB0aHJvdywgcmVwbGFjZSBpdC5cblxuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gICAgICBpZiAoY29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgICAgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAgICAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gICAgICAgIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBuZXh0Q29udGV4dCwgZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gICAgICBpZiAoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZmliZXIpIHtcbiAgICAgICAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgICAgICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTsgLy8gVGhpcyBmbGFnIGFsbG93cyBmb3Igd2FybmluZyBzdXByZXNzaW9uIHdoZW4gd2UgZXhwZWN0IHRoZXJlIHRvIGJlIG1pc21hdGNoZXNcbiAgICAvLyBkdWUgdG8gZWFybGllciBtaXNtYXRjaGVzIG9yIGEgc3VzcGVuZGVkIGZpYmVyLlxuXG4gICAgdmFyIGRpZFN1c3BlbmRPckVycm9yREVWID0gZmFsc2U7IC8vIEh5ZHJhdGlvbiBlcnJvcnMgdGhhdCB3ZXJlIHRocm93biBpbnNpZGUgdGhpcyBib3VuZGFyeVxuXG4gICAgdmFyIGh5ZHJhdGlvbkVycm9ycyA9IG51bGw7XG4gICAgZnVuY3Rpb24gZGlkU3VzcGVuZE9yRXJyb3JXaGlsZUh5ZHJhdGluZ0RFVigpIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGRpZFN1c3BlbmRPckVycm9yREVWO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIGhvc3RDb250ZXh0KSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoKSB0byBuZXZlciBiZSBjYWxsZWQuIFwiICtcbiAgICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBcIiArXG4gICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RTdXNwZW5zZUluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBcIiArXG4gICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuICAgICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKSB7XG4gICAgICBpZiAoaHlkcmF0aW9uRXJyb3JzICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYSBmb3JjZWQgY2xpZW50IHJlbmRlci4gVGhlIGVycm9ycyB0aGF0IG9jY3VycmVkXG4gICAgICAgIC8vIGR1cmluZyB0aGUgaHlkcmF0aW9uIGF0dGVtcHQgYXJlIG5vdyByZWNvdmVyZWQuIFdlIHdpbGwgbG9nIHRoZW0gaW5cbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLCBvbmNlIHRoZSBlbnRpcmUgdHJlZSBoYXMgZmluaXNoZWQuXG4gICAgICAgIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoaHlkcmF0aW9uRXJyb3JzKTtcbiAgICAgICAgaHlkcmF0aW9uRXJyb3JzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJc0h5ZHJhdGluZygpIHtcbiAgICAgIHJldHVybiBpc0h5ZHJhdGluZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWV1ZUh5ZHJhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgICBpZiAoaHlkcmF0aW9uRXJyb3JzID09PSBudWxsKSB7XG4gICAgICAgIGh5ZHJhdGlvbkVycm9ycyA9IFtlcnJvcl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoeWRyYXRpb25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2Ugd2FpdCB1bnRpbCB0aGUgY3VycmVudCByZW5kZXIgaXMgb3ZlciAoZWl0aGVyIGZpbmlzaGVkIG9yIGludGVycnVwdGVkKVxuICAgIC8vIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGZpYmVyL2hvb2sgcXVldWUuIFB1c2ggdG8gdGhpcyBhcnJheSBzbyB3ZSBjYW5cbiAgICAvLyBhY2Nlc3MgdGhlIHF1ZXVlLCBmaWJlciwgdXBkYXRlLCBldCBhbCBsYXRlci5cblxuICAgIHZhciBjb25jdXJyZW50UXVldWVzID0gW107XG4gICAgdmFyIGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDA7XG4gICAgdmFyIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgZnVuY3Rpb24gZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpIHtcbiAgICAgIHZhciBlbmRJbmRleCA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleDtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDA7XG4gICAgICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA8IGVuZEluZGV4KSB7XG4gICAgICAgIHZhciBmaWJlciA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciBxdWV1ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICB2YXIgbGFuZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHF1ZXVlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICAgICAgICAgIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgICAgICAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgICAgICAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYW5lICE9PSBOb0xhbmUpIHtcbiAgICAgICAgICBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb25jdXJyZW50bHlVcGRhdGVkTGFuZXMoKSB7XG4gICAgICByZXR1cm4gY29uY3VycmVudGx5VXBkYXRlZExhbmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBgY2hpbGRMYW5lc2Agb24gdGhlIHJldHVybiBwYXRoIHlldC4gSWYgd2UgYWxyZWFkeSBpblxuICAgICAgLy8gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcsIHdhaXQgdW50aWwgYWZ0ZXIgaXQgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gZmliZXI7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IHF1ZXVlO1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSB1cGRhdGU7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IGxhbmU7XG4gICAgICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcywgbGFuZSk7IC8vIFRoZSBmaWJlcidzIGBsYW5lYCBmaWVsZCBpcyB1c2VkIGluIHNvbWUgcGxhY2VzIHRvIGNoZWNrIGlmIGFueSB3b3JrIGlzXG4gICAgICAvLyBzY2hlZHVsZWQsIHRvIHBlcmZvcm0gYW4gZWFnZXIgYmFpbG91dCwgc28gd2UgbmVlZCB0byB1cGRhdGUgaXQgaW1tZWRpYXRlbHkuXG4gICAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgbW92ZSB0aGlzIHRvIHRoZSBcInNoYXJlZFwiIHF1ZXVlIGluc3RlYWQuXG5cbiAgICAgIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgbGFuZSk7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIHZhciBjb25jdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgIHZhciBjb25jdXJyZW50VXBkYXRlID0gdXBkYXRlO1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBjb25jdXJyZW50UXVldWUsIGNvbmN1cnJlbnRVcGRhdGUsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGVBbmRFYWdlcmx5QmFpbG91dChcbiAgICAgIGZpYmVyLFxuICAgICAgcXVldWUsXG4gICAgICB1cGRhdGVcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBxdWV1ZSBhbiB1cGRhdGUgdGhhdCBkb2Vzbid0IG5lZWQgYSByZXJlbmRlci4gVGhlXG4gICAgICAvLyBvbmx5IHJlYXNvbiB3ZSBxdWV1ZSBpdCBpcyBpbiBjYXNlIHRoZXJlJ3MgYSBzdWJzZXF1ZW50IGhpZ2hlciBwcmlvcml0eVxuICAgICAgLy8gdXBkYXRlIHRoYXQgY2F1c2VzIGl0IHRvIGJlIHJlYmFzZWQuXG4gICAgICB2YXIgbGFuZSA9IE5vTGFuZTtcbiAgICAgIHZhciBjb25jdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgIHZhciBjb25jdXJyZW50VXBkYXRlID0gdXBkYXRlO1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBjb25jdXJyZW50UXVldWUsIGNvbmN1cnJlbnRVcGRhdGUsIGxhbmUpOyAvLyBVc3VhbGx5IHdlIGNhbiByZWx5IG9uIHRoZSB1cGNvbWluZyByZW5kZXIgcGhhc2UgdG8gcHJvY2VzcyB0aGUgY29uY3VycmVudFxuICAgICAgLy8gcXVldWUuIEhvd2V2ZXIsIHNpbmNlIHRoaXMgaXMgYSBiYWlsIG91dCwgd2UncmUgbm90IHNjaGVkdWxpbmcgYW55IHdvcmtcbiAgICAgIC8vIGhlcmUuIFNvIHRoZSB1cGRhdGUgd2UganVzdCBxdWV1ZWQgd2lsbCBsZWFrIHVudGlsIHNvbWV0aGluZyBlbHNlIGhhcHBlbnNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgKGlmIGV2ZXIpLlxuICAgICAgLy9cbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZyBhIHRyZWUsIGFuZCBpZiBub3QsXG4gICAgICAvLyBwcm9jZXNzIHRoZSBxdWV1ZSBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGEgbGVhay5cblxuICAgICAgdmFyIGlzQ29uY3VycmVudGx5UmVuZGVyaW5nID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkgIT09IG51bGw7XG5cbiAgICAgIGlmICghaXNDb25jdXJyZW50bHlSZW5kZXJpbmcpIHtcbiAgICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudENsYXNzVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICB2YXIgY29uY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICB2YXIgY29uY3VycmVudFVwZGF0ZSA9IHVwZGF0ZTtcbiAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgY29uY3VycmVudFF1ZXVlLCBjb25jdXJyZW50VXBkYXRlLCBsYW5lKTtcbiAgICAgIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKSB7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIG51bGwsIG51bGwsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH0gLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgYmUgZG9uZSBmb3IgYmFja3dhcmRzXG4gICAgLy8gY29tcGF0aWJpbGl0eSBhbmQgc2hvdWxkIGFsd2F5cyBiZSBhY2NvbXBhbmllZCBieSBhIHdhcm5pbmcuXG5cbiAgICBmdW5jdGlvbiB1bnNhZmVfbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIGxhbmUpIHtcbiAgICAgIC8vIE5PVEU6IEZvciBIeXJ1bSdzIExhdyByZWFzb25zLCBpZiBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCBpcyBkZXRlY3RlZCwgaXRcbiAgICAgIC8vIHNob3VsZCB0aHJvdyBiZWZvcmUgYG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290YCBpcyBjYWxsZWQuIEJ1dCB0aGlzIGlzXG4gICAgICAvLyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHdlIGNhbiBjaGFuZ2UgaXQgaWYgd2UgbmVlZCB0bzsgaXQganVzdCBzbyBoYXBwZW5zXG4gICAgICAvLyB0aGF0LCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIHRoZXJlJ3MgYW4gaW50ZXJuYWwgcHJvZHVjdCB0ZXN0IHRoYXRcbiAgICAgIC8vIGhhcHBlbnMgdG8gcmVseSBvbiB0aGlzLlxuICAgICAgdmFyIHJvb3QgPSBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKHNvdXJjZUZpYmVyKTtcbiAgICAgIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBudWxsLCBsYW5lKTtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgc291cmNlIGZpYmVyJ3MgbGFuZXNcbiAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgICAgIH0gLy8gV2FsayB0aGUgcGFyZW50IHBhdGggdG8gdGhlIHJvb3QgYW5kIHVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMuXG5cbiAgICAgIHZhciBpc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcbiAgICAgIHZhciBub2RlID0gc291cmNlRmliZXI7XG5cbiAgICAgIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICAgICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnQudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9mZnNjcmVlbiBib3VuZGFyeSBpcyBjdXJyZW50bHkgaGlkZGVuLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIGluc3RhbmNlIG1heSBiZSBudWxsIGlmIHRoZSBPZmZzY3JlZW4gcGFyZW50IHdhcyB1bm1vdW50ZWQuIFVzdWFsbHlcbiAgICAgICAgICAvLyB0aGUgcGFyZW50IHdvdWxkbid0IGJlIHJlYWNoYWJsZSBpbiB0aGF0IGNhc2UgYmVjYXVzZSB3ZSBkaXNjb25uZWN0XG4gICAgICAgICAgLy8gZmliZXJzIGZyb20gdGhlIHRyZWUgd2hlbiB0aGV5IGFyZSBkZWxldGVkLiBIb3dldmVyLCB0aGVyZSdzIGEgd2VpcmRcbiAgICAgICAgICAvLyBlZGdlIGNhc2Ugd2hlcmUgc2V0U3RhdGUgaXMgY2FsbGVkIG9uIGEgZmliZXIgdGhhdCB3YXMgaW50ZXJydXB0ZWRcbiAgICAgICAgICAvLyBiZWZvcmUgaXQgZXZlciBtb3VudGVkLiBCZWNhdXNlIGl0IG5ldmVyIG1vdW50cywgaXQgYWxzbyBuZXZlciBnZXRzXG4gICAgICAgICAgLy8gZGVsZXRlZC4gQmVjYXVzZSBpdCBuZXZlciBnZXRzIGRlbGV0ZWQsIGl0cyByZXR1cm4gcG9pbnRlciBuZXZlciBnZXRzXG4gICAgICAgICAgLy8gZGlzY29ubmVjdGVkLiBXaGljaCBtZWFucyBpdCBtYXkgYmUgYXR0YWNoZWQgdG8gYSBkZWxldGVkIE9mZnNjcmVlblxuICAgICAgICAgIC8vIHBhcmVudCBub2RlLiAoVGhpcyBkaXNjb3Zlcnkgc3VnZ2VzdHMgaXQgbWF5IGJlIGJldHRlciBmb3IgbWVtb3J5IHVzYWdlXG4gICAgICAgICAgLy8gaWYgd2UgZG9uJ3QgYXR0YWNoIHRoZSBgcmV0dXJuYCBwb2ludGVyIHVudGlsIHRoZSBjb21taXQgcGhhc2UsIHRob3VnaFxuICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGRvIHRoYXQgd2UnZCBuZWVkIHNvbWUgb3RoZXIgd2F5IHRvIHRyYWNrIHRoZSByZXR1cm5cbiAgICAgICAgICAvLyBwb2ludGVyIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIsIGxpa2Ugb24gdGhlIHN0YWNrLilcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgY2FzZSBpcyBhbHdheXMgYWNjb21wYW5pZWQgYnkgYSB3YXJuaW5nLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgICAgICAgIC8vIGFjY291bnQgZm9yIGl0LiAoVGhlcmUgbWF5IGJlIG90aGVyIGNhc2VzIHRoYXQgd2UgaGF2ZW4ndCBkaXNjb3ZlcmVkLFxuICAgICAgICAgIC8vIHRvby4pXG4gICAgICAgICAgdmFyIG9mZnNjcmVlbkluc3RhbmNlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9mZnNjcmVlbkluc3RhbmNlICE9PSBudWxsICYmXG4gICAgICAgICAgICAhKG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuVmlzaWJsZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNIaWRkZW4gJiYgdXBkYXRlICE9PSBudWxsICYmIG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICBtYXJrSGlkZGVuVXBkYXRlKHJvb3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihzb3VyY2VGaWJlcikge1xuICAgICAgLy8gVE9ETzogV2Ugd2lsbCBkZXRlY3QgYW5kIGluZmluaXRlIHVwZGF0ZSBsb29wIGFuZCB0aHJvdyBldmVuIGlmIHRoaXMgZmliZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHVubW91bnRlZC4gVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGJ1dCBpdCBoYXBwZW5zIHRvIGJlIHRoZVxuICAgICAgLy8gY3VycmVudCBiZWhhdmlvciB3ZSd2ZSB1c2VkIGZvciBzZXZlcmFsIHJlbGVhc2UgY3ljbGVzLiBDb25zaWRlciBub3RcbiAgICAgIC8vIHBlcmZvcm1pbmcgdGhpcyBjaGVjayBpZiB0aGUgdXBkYXRlZCBmaWJlciBhbHJlYWR5IHVubW91bnRlZCwgc2luY2UgaXQnc1xuICAgICAgLy8gbm90IHBvc3NpYmxlIGZvciB0aGF0IHRvIGNhdXNlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuICAgICAgdGhyb3dJZkluZmluaXRlVXBkYXRlTG9vcERldGVjdGVkKCk7IC8vIFdoZW4gYSBzZXRTdGF0ZSBoYXBwZW5zLCB3ZSBtdXN0IGVuc3VyZSB0aGUgcm9vdCBpcyBzY2hlZHVsZWQuIEJlY2F1c2VcbiAgICAgIC8vIHVwZGF0ZSBxdWV1ZXMgZG8gbm90IGhhdmUgYSBiYWNrcG9pbnRlciB0byB0aGUgcm9vdCwgdGhlIG9ubHkgd2F5IHRvIGRvXG4gICAgICAvLyB0aGlzIGN1cnJlbnRseSBpcyB0byB3YWxrIHVwIHRoZSByZXR1cm4gcGF0aC4gVGhpcyB1c2VkIHRvIG5vdCBiZSBhIGJpZ1xuICAgICAgLy8gZGVhbCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FsayB1cCB0aGUgcmV0dXJuIHBhdGggdG8gc2V0XG4gICAgICAvLyB0aGUgYGNoaWxkTGFuZXNgLCBhbnl3YXksIGJ1dCBub3cgdGhvc2UgdHdvIHRyYXZlcnNhbHMgaGFwcGVuIGF0XG4gICAgICAvLyBkaWZmZXJlbnQgdGltZXMuXG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBhZGRpbmcgYSBgcm9vdGAgYmFja3BvaW50ZXIgb24gdGhlIHVwZGF0ZSBxdWV1ZS5cblxuICAgICAgZGV0ZWN0VXBkYXRlT25Vbm1vdW50ZWRGaWJlcihzb3VyY2VGaWJlciwgc291cmNlRmliZXIpO1xuICAgICAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBkZXRlY3RVcGRhdGVPblVubW91bnRlZEZpYmVyKHNvdXJjZUZpYmVyLCBub2RlKTtcbiAgICAgICAgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgcGFyZW50ID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlLnRhZyA9PT0gSG9zdFJvb3QgPyBub2RlLnN0YXRlTm9kZSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGV0ZWN0VXBkYXRlT25Vbm1vdW50ZWRGaWJlcihzb3VyY2VGaWJlciwgcGFyZW50KSB7XG4gICAgICB7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBhbHRlcm5hdGUgPT09IG51bGwgJiZcbiAgICAgICAgICAocGFyZW50LmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzJDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUmVhY3RDdXJyZW50QWN0UXVldWUkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEFjdFF1ZXVlOyAvLyBBIGxpbmtlZCBsaXN0IG9mIGFsbCB0aGUgcm9vdHMgd2l0aCBwZW5kaW5nIHdvcmsuIEluIGFuIGlkaW9tYXRpYyBhcHAsXG4gICAgLy8gdGhlcmUncyBvbmx5IGEgc2luZ2xlIHJvb3QsIGJ1dCB3ZSBkbyBzdXBwb3J0IG11bHRpIHJvb3QgYXBwcywgaGVuY2UgdGhpc1xuICAgIC8vIGV4dHJhIGNvbXBsZXhpdHkuIEJ1dCB0aGlzIG1vZHVsZSBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBzaW5nbGUgcm9vdCBjYXNlLlxuXG4gICAgdmFyIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGw7XG4gICAgdmFyIGxhc3RTY2hlZHVsZWRSb290ID0gbnVsbDsgLy8gVXNlZCB0byBwcmV2ZW50IHJlZHVuZGFudCBtaXJjb3Rhc2tzIGZyb20gYmVpbmcgc2NoZWR1bGVkLlxuXG4gICAgdmFyIGRpZFNjaGVkdWxlTWljcm90YXNrID0gZmFsc2U7IC8vIGBhY3RgIFwibWljcm90YXNrc1wiIGFyZSBzY2hlZHVsZWQgb24gdGhlIGBhY3RgIHF1ZXVlIGluc3RlYWQgb2YgYW4gYWN0dWFsXG4gICAgLy8gbWljcm90YXNrLCBzbyB3ZSBoYXZlIHRvIGRlZHVwZSB0aG9zZSBzZXBhcmF0ZWx5LiBUaGlzIHdvdWxkbid0IGJlIGFuIGlzc3VlXG4gICAgLy8gaWYgd2UgcmVxdWlyZWQgYWxsIGBhY3RgIGNhbGxzIHRvIGJlIGF3YWl0ZWQsIHdoaWNoIHdlIG1pZ2h0IGluIHRoZSBmdXR1cmUuXG5cbiAgICB2YXIgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID0gZmFsc2U7IC8vIFVzZWQgdG8gcXVpY2tseSBiYWlsIG91dCBvZiBmbHVzaFN5bmMgaWYgdGhlcmUncyBubyBzeW5jIHdvcmsgdG8gZG8uXG5cbiAgICB2YXIgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gZmFsc2U7XG4gICAgdmFyIGlzRmx1c2hpbmdXb3JrID0gZmFsc2U7XG4gICAgdmFyIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gTm9MYW5lO1xuICAgIGZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIHJvb3QgcmVjZWl2ZXMgYW4gdXBkYXRlLiBJdCBkb2VzIHR3b1xuICAgICAgLy8gdGhpbmdzIDEpIGl0IGVuc3VyZXMgdGhlIHJvb3QgaXMgaW4gdGhlIHJvb3Qgc2NoZWR1bGUsIGFuZCAyKSBpdCBlbnN1cmVzXG4gICAgICAvLyB0aGVyZSdzIGEgcGVuZGluZyBtaWNyb3Rhc2sgdG8gcHJvY2VzcyB0aGUgcm9vdCBzY2hlZHVsZS5cbiAgICAgIC8vXG4gICAgICAvLyBNb3N0IG9mIHRoZSBhY3R1YWwgc2NoZWR1bGluZyBsb2dpYyBkb2VzIG5vdCBoYXBwZW4gdW50aWxcbiAgICAgIC8vIGBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrYCBydW5zLlxuICAgICAgLy8gQWRkIHRoZSByb290IHRvIHRoZSBzY2hlZHVsZVxuICAgICAgaWYgKHJvb3QgPT09IGxhc3RTY2hlZHVsZWRSb290IHx8IHJvb3QubmV4dCAhPT0gbnVsbCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGxhc3RTY2hlZHVsZWRSb290ID09PSBudWxsKSB7XG4gICAgICAgICAgZmlyc3RTY2hlZHVsZWRSb290ID0gbGFzdFNjaGVkdWxlZFJvb3QgPSByb290O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RTY2hlZHVsZWRSb290Lm5leHQgPSByb290O1xuICAgICAgICAgIGxhc3RTY2hlZHVsZWRSb290ID0gcm9vdDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbnkgdGltZSBhIHJvb3QgcmVjZWl2ZWQgYW4gdXBkYXRlLCB3ZSBzZXQgdGhpcyB0byB0cnVlIHVudGlsIHRoZSBuZXh0IHRpbWVcbiAgICAgIC8vIHdlIHByb2Nlc3MgdGhlIHNjaGVkdWxlLiBJZiBpdCdzIGZhbHNlLCB0aGVuIHdlIGNhbiBxdWlja2x5IGV4aXQgZmx1c2hTeW5jXG4gICAgICAvLyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIHNjaGVkdWxlLlxuXG4gICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSB0cnVlOyAvLyBBdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGV2ZW50LCBnbyB0aHJvdWdoIGVhY2ggb2YgdGhlIHJvb3RzIGFuZCBlbnN1cmVcbiAgICAgIC8vIHRoZXJlJ3MgYSB0YXNrIHNjaGVkdWxlZCBmb3IgZWFjaCBvbmUgYXQgdGhlIGNvcnJlY3QgcHJpb3JpdHkuXG5cbiAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgaW5zaWRlIGFuIGBhY3RgIHNjb3BlLlxuICAgICAgICBpZiAoIWRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCkge1xuICAgICAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9IHRydWU7XG4gICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZGlkU2NoZWR1bGVNaWNyb3Rhc2spIHtcbiAgICAgICAgICBkaWRTY2hlZHVsZU1pY3JvdGFzayA9IHRydWU7XG4gICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICAvLyBXaGlsZSB0aGlzIGZsYWcgaXMgZGlzYWJsZWQsIHdlIHNjaGVkdWxlIHRoZSByZW5kZXIgdGFzayBpbW1lZGlhdGVseVxuICAgICAgICAvLyBpbnN0ZWFkIG9mIHdhaXRpbmcgYSBtaWNyb3Rhc2suXG4gICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gbGFuZCBlbmFibGVEZWZlclJvb3RTY2hlZHVsaW5nVG9NaWNyb3Rhc2sgQVNBUCB0b1xuICAgICAgICAvLyB1bmJsb2NrIGFkZGl0aW9uYWwgZmVhdHVyZXMgd2UgaGF2ZSBwbGFubmVkLlxuICAgICAgICBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIG5vdyQxKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUkMy5pc0JhdGNoaW5nTGVnYWN5ICYmIHJvb3QudGFnID09PSBMZWdhY3lSb290KSB7XG4gICAgICAgIC8vIFNwZWNpYWwgYGFjdGAgY2FzZTogUmVjb3JkIHdoZW5ldmVyIGEgbGVnYWN5IHVwZGF0ZSBpcyBzY2hlZHVsZWQuXG4gICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDMuZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFN5bmNXb3JrT25BbGxSb290cygpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB0byBiZSBjYWxsZWQgc3luY2hyb25vdXNseSwgYnV0IHRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrXG4gICAgICAvLyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgZmlyc3QuXG4gICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChmYWxzZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoU3luY1dvcmtPbkxlZ2FjeVJvb3RzT25seSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB0byBiZSBjYWxsZWQgc3luY2hyb25vdXNseSwgYnV0IHRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrXG4gICAgICAvLyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgZmlyc3QuXG4gICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCh0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChvbmx5TGVnYWN5KSB7XG4gICAgICBpZiAoaXNGbHVzaGluZ1dvcmspIHtcbiAgICAgICAgLy8gUHJldmVudCByZWVudHJhbmN5LlxuICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIG92ZXJseSBkZWZlbnNpdmU/IFRoZSBjYWxsZXJzIG11c3QgY2hlY2sgdGhlIGV4ZWN1dGlvblxuICAgICAgICAvLyBjb250ZXh0IGZpcnN0IHJlZ2FyZGxlc3MuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFtaWdodEhhdmVQZW5kaW5nU3luY1dvcmspIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoLiBUaGVyZSdzIG5vIHN5bmMgd29yayB0byBkby5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGVyZSBtYXkgb3IgbWF5IG5vdCBiZSBzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxlZC4gTGV0J3MgY2hlY2suXG5cbiAgICAgIHZhciBkaWRQZXJmb3JtU29tZVdvcms7XG4gICAgICB2YXIgZXJyb3JzID0gbnVsbDtcbiAgICAgIGlzRmx1c2hpbmdXb3JrID0gdHJ1ZTtcblxuICAgICAgZG8ge1xuICAgICAgICBkaWRQZXJmb3JtU29tZVdvcmsgPSBmYWxzZTtcbiAgICAgICAgdmFyIHJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG5cbiAgICAgICAgd2hpbGUgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAob25seUxlZ2FjeSAmJiByb290LnRhZyAhPT0gTGVnYWN5Um9vdCk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG4gICAgICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPVxuICAgICAgICAgICAgICBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpO1xuICAgICAgICAgICAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290XG4gICAgICAgICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgIDogTm9MYW5lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGluY2x1ZGVzU3luY0xhbmUobmV4dExhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIHJvb3QgaGFzIHBlbmRpbmcgc3luYyB3b3JrLiBGbHVzaCBpdCBub3cuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGlkUGVyZm9ybVNvbWVXb3JrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCwgbmV4dExhbmVzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBDb2xsZWN0IGVycm9ycyBzbyB3ZSBjYW4gcmV0aHJvdyB0aGVtIGF0IHRoZSBlbmRcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcnMgPSBbZXJyb3JdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm9vdCA9IHJvb3QubmV4dDtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoZGlkUGVyZm9ybVNvbWVXb3JrKTtcblxuICAgICAgaXNGbHVzaGluZ1dvcmsgPSBmYWxzZTsgLy8gSWYgYW55IGVycm9ycyB3ZXJlIHRocm93biwgcmV0aHJvdyB0aGVtIHJpZ2h0IGJlZm9yZSBleGl0aW5nLlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgcmV0dXJuaW5nIHRoZXNlIHRvIHRoZSBjYWxsZXIsIHRvIGFsbG93IHRoZW0gdG8gZGVjaWRlXG4gICAgICAvLyBob3cvd2hlbiB0byByZXRocm93LlxuXG4gICAgICBpZiAoZXJyb3JzICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRocm93RXJyb3IuYmluZChudWxsLCBlcnJvcnNbaV0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZpcnN0RXJyb3IgPSBlcnJvcnNbMF07XG4gICAgICAgICAgICB0aHJvdyBmaXJzdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSBlcnJvcnNbMF07XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2soKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWxsZWQgaW5zaWRlIGEgbWljcm90YXNrLiBJdCBzaG91bGQgbmV2ZXIgYmVcbiAgICAgIC8vIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSBmYWxzZTtcblxuICAgICAge1xuICAgICAgICBkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QgPSBmYWxzZTtcbiAgICAgIH0gLy8gV2UnbGwgcmVjb21wdXRlIHRoaXMgYXMgd2UgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgcm9vdHMgYW5kIHNjaGVkdWxlIHRoZW0uXG5cbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9IGZhbHNlO1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gbm93JDEoKTtcbiAgICAgIHZhciBwcmV2ID0gbnVsbDtcbiAgICAgIHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290O1xuXG4gICAgICB3aGlsZSAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbmV4dCA9IHJvb3QubmV4dDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgIT09IE5vTGFuZSAmJlxuICAgICAgICAgIHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBBIHRyYW5zaXRpb24gd2FzIHNjaGVkdWxlZCBkdXJpbmcgYW4gZXZlbnQsIGJ1dCB3ZSdyZSBnb2luZyB0byB0cnkgdG9cbiAgICAgICAgICAvLyByZW5kZXIgaXQgc3luY2hyb25vdXNseSBhbnl3YXkuIFdlIGRvIHRoaXMgZHVyaW5nIGEgcG9wc3RhdGUgZXZlbnQgdG9cbiAgICAgICAgICAvLyBwcmVzZXJ2ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBwcmV2aW91cyBwYWdlLlxuICAgICAgICAgIHVwZ3JhZGVQZW5kaW5nTGFuZVRvU3luYyhyb290LCBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dExhbmVzID0gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gVGhpcyByb290IGhhcyBubyBtb3JlIHBlbmRpbmcgd29yay4gUmVtb3ZlIGl0IGZyb20gdGhlIHNjaGVkdWxlLiBUb1xuICAgICAgICAgIC8vIGd1YXJkIGFnYWluc3Qgc3VidGxlIHJlZW50cmFuY3kgYnVncywgdGhpcyBtaWNyb3Rhc2sgaXMgdGhlIG9ubHkgcGxhY2VcbiAgICAgICAgICAvLyB3ZSBkbyB0aGlzIOKAlCB5b3UgY2FuIGFkZCByb290cyB0byB0aGUgc2NoZWR1bGUgd2hlbmV2ZXIsIGJ1dCB5b3UgY2FuXG4gICAgICAgICAgLy8gb25seSByZW1vdmUgdGhlbSBoZXJlLlxuICAgICAgICAgIC8vIE51bGwgdGhpcyBvdXQgc28gd2Uga25vdyBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzY2hlZHVsZS5cbiAgICAgICAgICByb290Lm5leHQgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG5ldyBoZWFkIG9mIHRoZSBsaXN0XG4gICAgICAgICAgICBmaXJzdFNjaGVkdWxlZFJvb3QgPSBuZXh0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBuZXcgdGFpbCBvZiB0aGUgbGlzdFxuICAgICAgICAgICAgbGFzdFNjaGVkdWxlZFJvb3QgPSBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIHJvb3Qgc3RpbGwgaGFzIHdvcmsuIEtlZXAgaXQgaW4gdGhlIGxpc3QuXG4gICAgICAgICAgcHJldiA9IHJvb3Q7XG5cbiAgICAgICAgICBpZiAoaW5jbHVkZXNTeW5jTGFuZShuZXh0TGFuZXMpKSB7XG4gICAgICAgICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QgPSBuZXh0O1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IE5vTGFuZTsgLy8gQXQgdGhlIGVuZCBvZiB0aGUgbWljcm90YXNrLCBmbHVzaCBhbnkgcGVuZGluZyBzeW5jaHJvbm91cyB3b3JrLiBUaGlzIGhhc1xuICAgICAgLy8gdG8gY29tZSBhdCB0aGUgZW5kLCBiZWNhdXNlIGl0IGRvZXMgYWN0dWFsIHJlbmRlcmluZyB3b3JrIHRoYXQgbWlnaHQgdGhyb3cuXG5cbiAgICAgIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkIGluc2lkZSBhIG1pY3JvdGFzaywgb3IgYXQgdGhlIHZlcnkgZW5kIG9mIGFcbiAgICAgIC8vIHJlbmRlcmluZyB0YXNrIHJpZ2h0IGJlZm9yZSB3ZSB5aWVsZCB0byB0aGUgbWFpbiB0aHJlYWQuIEl0IHNob3VsZCBuZXZlciBiZVxuICAgICAgLy8gY2FsbGVkIHN5bmNocm9ub3VzbHkuXG4gICAgICAvL1xuICAgICAgLy8gVE9ETzogVW5sZXNzIGVuYWJsZURlZmVyUm9vdFNjaGVkdWxpbmdUb01pY3JvdGFzayBpcyBvZmYuIFdlIG5lZWQgdG8gbGFuZFxuICAgICAgLy8gdGhhdCBBU0FQIHRvIHVuYmxvY2sgYWRkaXRpb25hbCBmZWF0dXJlcyB3ZSBoYXZlIHBsYW5uZWQuXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIG5ldmVyIHBlcmZvcm1zIFJlYWN0IHdvcmsgc3luY2hyb25vdXNseTsgaXQgc2hvdWxkXG4gICAgICAvLyBvbmx5IHNjaGVkdWxlIHdvcmsgdG8gYmUgcGVyZm9ybWVkIGxhdGVyLCBpbiBhIHNlcGFyYXRlIHRhc2sgb3IgbWljcm90YXNrLlxuICAgICAgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgICAgIC8vIGV4cGlyZWQgc28gd2Uga25vdyB0byB3b3JrIG9uIHRob3NlIG5leHQuXG4gICAgICBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKTsgLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIGFuZCB0aGVpciBwcmlvcml0eS5cblxuICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMoKTtcbiAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lc1xuICAgICAgKTtcbiAgICAgIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uXG4gICAgICAgIG5leHRMYW5lcyA9PT0gTm9MYW5lcyB8fCAvLyBJZiB0aGlzIHJvb3QgaXMgY3VycmVudGx5IHN1c3BlbmRlZCBhbmQgd2FpdGluZyBmb3IgZGF0YSB0byByZXNvbHZlLCBkb24ndFxuICAgICAgICAvLyBzY2hlZHVsZSBhIHRhc2sgdG8gcmVuZGVyIGl0LiBXZSdsbCBlaXRoZXIgd2FpdCBmb3IgYSBwaW5nLCBvciB3YWl0IHRvXG4gICAgICAgIC8vIHJlY2VpdmUgYW4gdXBkYXRlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTdXNwZW5kZWQgcmVuZGVyIHBoYXNlXG4gICAgICAgIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgaXNXb3JrTG9vcFN1c3BlbmRlZE9uRGF0YSgpKSB8fCAvLyBTdXNwZW5kZWQgY29tbWl0IHBoYXNlXG4gICAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lO1xuICAgICAgICByZXR1cm4gTm9MYW5lO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjayBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudC5cblxuICAgICAgaWYgKGluY2x1ZGVzU3luY0xhbmUobmV4dExhbmVzKSkge1xuICAgICAgICAvLyBTeW5jaHJvbm91cyB3b3JrIGlzIGFsd2F5cyBmbHVzaGVkIGF0IHRoZSBlbmQgb2YgdGhlIG1pY3JvdGFzaywgc28gd2VcbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBzY2hlZHVsZSBhbiBhZGRpdGlvbmFsIHRhc2suXG4gICAgICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IFN5bmNMYW5lO1xuICAgICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBTeW5jTGFuZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIHVzZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBsYW5lIHRvIHJlcHJlc2VudCB0aGUgcHJpb3JpdHkgb2YgdGhlIGNhbGxiYWNrLlxuICAgICAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuICAgICAgICB2YXIgbmV3Q2FsbGJhY2tQcmlvcml0eSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobmV4dExhbmVzKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ICYmIC8vIFNwZWNpYWwgY2FzZSByZWxhdGVkIHRvIGBhY3RgLiBJZiB0aGUgY3VycmVudGx5IHNjaGVkdWxlZCB0YXNrIGlzIGFcbiAgICAgICAgICAvLyBTY2hlZHVsZXIgdGFzaywgcmF0aGVyIHRoYW4gYW4gYGFjdGAgdGFzaywgY2FuY2VsIGl0IGFuZCByZS1zY2hlZHVsZVxuICAgICAgICAgIC8vIG9uIHRoZSBgYWN0YCBxdWV1ZS5cbiAgICAgICAgICAhKFxuICAgICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMy5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgICAgICAgICBleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gZmFrZUFjdENhbGxiYWNrTm9kZSQxXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUaGUgcHJpb3JpdHkgaGFzbid0IGNoYW5nZWQuIFdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdGFzay5cbiAgICAgICAgICByZXR1cm4gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDYW5jZWwgdGhlIGV4aXN0aW5nIGNhbGxiYWNrLiBXZSdsbCBzY2hlZHVsZSBhIG5ldyBvbmUgYmVsb3cuXG4gICAgICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNjaGVkdWxlclByaW9yaXR5TGV2ZWw7XG5cbiAgICAgICAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShuZXh0TGFuZXMpKSB7XG4gICAgICAgICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgRGVmYXVsdEV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gSWRsZVByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayQxKFxuICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwsXG4gICAgICAgICAgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdClcbiAgICAgICAgKTtcbiAgICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBuZXdDYWxsYmFja05vZGU7XG4gICAgICAgIHJldHVybiBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbnRpbnVhdGlvbkZvclJvb3Qocm9vdCwgb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdGAgdG8gZGV0ZXJtaW5lXG4gICAgICAvLyBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY29udGludWF0aW9uIHRhc2suXG4gICAgICAvL1xuICAgICAgLy8gVXN1YWxseSBgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFza2Agb25seSBydW5zIGluc2lkZSBhIG1pY3JvdGFzaztcbiAgICAgIC8vIGhvd2V2ZXIsIHNpbmNlIG1vc3Qgb2YgdGhlIGxvZ2ljIGZvciBkZXRlcm1pbmluZyBpZiB3ZSBuZWVkIGEgY29udGludWF0aW9uXG4gICAgICAvLyB2ZXJzdXMgYSBuZXcgdGFzayBpcyB0aGUgc2FtZSwgd2UgY2hlYXQgYSBiaXQgYW5kIGNhbGwgaXQgaGVyZS4gVGhpcyBpc1xuICAgICAgLy8gb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ugd2Uga25vdyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBicm93c2VyIHRhc2suXG4gICAgICAvLyBTbyBhbHRob3VnaCBpdCdzIG5vdCBhbiBhY3R1YWwgbWljcm90YXNrLCBpdCBtaWdodCBhcyB3ZWxsIGJlLlxuICAgICAgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBub3ckMSgpKTtcblxuICAgICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgICAvLyBUaGUgdGFzayBub2RlIHNjaGVkdWxlZCBmb3IgdGhpcyByb290IGlzIHRoZSBzYW1lIG9uZSB0aGF0J3NcbiAgICAgICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICAgICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGZha2VBY3RDYWxsYmFja05vZGUkMSA9IHt9O1xuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayQxKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUkMy5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogV2UncmUgaW5zaWRlIGFuIGBhY3RgIHNjb3BlIChhIHRlc3RpbmcgdXRpbGl0eSkuXG4gICAgICAgIC8vIEluc3RlYWQgb2Ygc2NoZWR1bGluZyB3b3JrIGluIHRoZSBob3N0IGVudmlyb25tZW50LCBhZGQgaXQgdG8gYVxuICAgICAgICAvLyBmYWtlIGludGVybmFsIHF1ZXVlIHRoYXQncyBtYW5hZ2VkIGJ5IHRoZSBgYWN0YCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMy5jdXJyZW50LnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gZmFrZUFjdENhbGxiYWNrTm9kZSQxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2skMihwcmlvcml0eUxldmVsLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gICAgICBpZiAoY2FsbGJhY2tOb2RlID09PSBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEpO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbENhbGxiYWNrJDEoY2FsbGJhY2tOb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUltbWVkaWF0ZVRhc2soY2IpIHtcbiAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBJbnNpZGUgYW4gYGFjdGAgc2NvcGUsIHdlIHB1c2ggbWljcm90YXNrcyB0byB0aGUgZmFrZSBgYWN0YFxuICAgICAgICAvLyBjYWxsYmFjayBxdWV1ZS4gVGhpcyBpcyBiZWNhdXNlIHdlIGN1cnJlbnRseSBzdXBwb3J0IGNhbGxpbmcgYGFjdGBcbiAgICAgICAgLy8gd2l0aG91dCBhd2FpdGluZyB0aGUgcmVzdWx0LiBUaGUgcGxhbiBpcyB0byBkZXByZWNhdGUgdGhhdCwgYW5kIHJlcXVpcmVcbiAgICAgICAgLy8gdGhhdCB5b3UgYWx3YXlzIGF3YWl0IHRoZSByZXN1bHQgc28gdGhhdCB0aGUgbWljcm90YXNrcyBoYXZlIGEgY2hhbmNlIHRvXG4gICAgICAgIC8vIHJ1bi4gQnV0IGl0IGhhc24ndCBoYXBwZW5lZCB5ZXQuXG4gICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDMuY3VycmVudC5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYigpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gVE9ETzogQ2FuIHdlIGxhbmQgc3VwcG9ydHNNaWNyb3Rhc2tzPyBXaGljaCBlbnZpcm9ubWVudHMgZG9uJ3Qgc3VwcG9ydCBpdD9cbiAgICAgIC8vIEFsdGVybmF0aXZlbHksIGNhbiB3ZSBtb3ZlIHRoaXMgY2hlY2sgdG8gdGhlIGhvc3QgY29uZmlnP1xuXG4gICAgICB7XG4gICAgICAgIC8vIElmIG1pY3JvdGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQsIHVzZSBTY2hlZHVsZXIuXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMihJbW1lZGlhdGVQcmlvcml0eSwgY2IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSggLy8gVGhpcyBhcmd1bWVudCBpc24ndCB1c2VkLCBpdCdzIG9ubHkgaGVyZSB0byBlbmNvdXJhZ2UgdGhlIGNhbGxlciB0b1xuICAgICAgLy8gY2hlY2sgdGhhdCBpdCdzIGluc2lkZSBhIHRyYW5zaXRpb24gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBub24tbnVsbGFibGUuIFJlcXVpcmVzIGEgdHdlYWsgdG8gdXNlT3B0aW1pc3RpYy5cbiAgICAgIHRyYW5zaXRpb25cbiAgICApIHtcbiAgICAgIC8vIFRoZSBhbGdvcml0aG0gZm9yIGFzc2lnbmluZyBhbiB1cGRhdGUgdG8gYSBsYW5lIHNob3VsZCBiZSBzdGFibGUgZm9yIGFsbFxuICAgICAgLy8gdXBkYXRlcyBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoaW4gdGhlIHNhbWUgZXZlbnQuIFRvIGRvIHRoaXMsIHRoZVxuICAgICAgLy8gaW5wdXRzIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgdHJpY2sgd2UgdXNlIGlzIHRvIGNhY2hlIHRoZSBmaXJzdCBvZiBlYWNoIG9mIHRoZXNlIGlucHV0cyB3aXRoaW4gYW5cbiAgICAgIC8vIGV2ZW50LiBUaGVuIHJlc2V0IHRoZSBjYWNoZWQgdmFsdWVzIG9uY2Ugd2UgY2FuIGJlIHN1cmUgdGhlIGV2ZW50IGlzXG4gICAgICAvLyBvdmVyLiBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gICAgICBpZiAoY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAvLyBBbGwgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBzYW1lIGV2ZW50IGFyZSBhc3NpZ25lZCB0aGUgc2FtZSBsYW5lLlxuICAgICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEVudGFuZ2xlZExhbmUgPSBOb0xhbmU7IC8vIEEgdGhlbmFibGUgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbnRhbmdsZWQgc2NvcGUgY29tcGxldGVzLiBJdCBkb2VzIG5vdFxuICAgIC8vIHJlc29sdmUgdG8gYSBwYXJ0aWN1bGFyIHZhbHVlIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgZm9yIHN1c3BlbmRpbmcgdGhlIFVJXG4gICAgLy8gdW50aWwgdGhlIGFzeW5jIGFjdGlvbiBzY29wZSBoYXMgY29tcGxldGVkLlxuXG4gICAgdmFyIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBjaGFpblRoZW5hYmxlVmFsdWUodGhlbmFibGUsIHJlc3VsdCkge1xuICAgICAgLy8gRXF1aXZhbGVudCB0bzogUHJvbWlzZS5yZXNvbHZlKHRoZW5hYmxlKS50aGVuKCgpID0+IHJlc3VsdCksIGV4Y2VwdCB3ZSBjYW5cbiAgICAgIC8vIGNoZWF0IGEgYml0IHNpbmNlIHdlIGtub3cgdGhhdCB0aGF0IHRoaXMgdGhlbmFibGUgaXMgb25seSBldmVyIGNvbnN1bWVkXG4gICAgICAvLyBieSBSZWFjdC5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBkb24ndCB0ZWNobmljYWxseSByZXF1aXJlIHByb21pc2Ugc3VwcG9ydCBvbiB0aGUgY2xpZW50IHlldCwgaGVuY2UgdGhpc1xuICAgICAgLy8gZXh0cmEgY29kZS5cbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgIHZhciB0aGVuYWJsZVdpdGhPdmVycmlkZSA9IHtcbiAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHJlYXNvbjogbnVsbCxcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciBmdWxmaWxsZWRUaGVuYWJsZSA9IHRoZW5hYmxlV2l0aE92ZXJyaWRlO1xuICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUudmFsdWUgPSByZXN1bHQ7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgICAgICAgbGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGVXaXRoT3ZlcnJpZGU7XG4gICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb24gPSBlcnJvcjtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07IC8vIFRoaXMgaXMgYSBwZXJmIGhhY2sgd2hlcmUgd2UgY2FsbCB0aGUgYG9uRnVsZmlsbGAgcGluZyBmdW5jdGlvblxuICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBgb25SZWplY3RgLCBiZWNhdXNlIHdlIGtub3cgdGhhdCBSZWFjdCBpcyB0aGUgb25seVxuICAgICAgICAgICAgLy8gY29uc3VtZXIgb2YgdGhlc2UgcHJvbWlzZXMsIGFuZCBpdCBwYXNzZXMgdGhlIHNhbWUgbGlzdGVuZXIgdG8gYm90aC5cbiAgICAgICAgICAgIC8vIFdlIGFsc28ga25vdyB0aGF0IGl0IHdpbGwgcmVhZCB0aGUgZXJyb3IgZGlyZWN0bHkgb2ZmIHRoZVxuICAgICAgICAgICAgLy8gYC5yZWFzb25gIGZpZWxkLlxuXG4gICAgICAgICAgICBsaXN0ZW5lcih1bmRlZmluZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZVdpdGhPdmVycmlkZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVla0VudGFuZ2xlZEFjdGlvbkxhbmUoKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVudGFuZ2xlZExhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZWtFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGU7XG4gICAgfVxuXG4gICAgdmFyIFVwZGF0ZVN0YXRlID0gMDtcbiAgICB2YXIgUmVwbGFjZVN0YXRlID0gMTtcbiAgICB2YXIgRm9yY2VVcGRhdGUgPSAyO1xuICAgIHZhciBDYXB0dXJlVXBkYXRlID0gMzsgLy8gR2xvYmFsIHN0YXRlIHRoYXQgaXMgcmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLlxuICAgIC8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4gICAgLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG4gICAgdmFyIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG4gICAgdmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGU7XG4gICAgdmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gICAgICB2YXIgcXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICAgICAgc2hhcmVkOiB7XG4gICAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgICBoaWRkZW5DYWxsYmFja3M6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgICB9O1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICAgIGNhbGxiYWNrczogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVVcGRhdGUobGFuZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgICAgbGFuZTogbGFuZSxcbiAgICAgICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICAgICAgcGF5bG9hZDogbnVsbCxcbiAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcblxuICAgICAge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBzaGFyZWRRdWV1ZSAmJlxuICAgICAgICAgICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcik7XG5cbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQW4gdXBkYXRlIChzZXRTdGF0ZSwgcmVwbGFjZVN0YXRlLCBvciBmb3JjZVVwZGF0ZSkgd2FzIHNjaGVkdWxlZCBcIiArXG4gICAgICAgICAgICAgIFwiZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCBcIiArXG4gICAgICAgICAgICAgIFwid2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgXCIgK1xuICAgICAgICAgICAgICBcImNhbGxiYWNrLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnQ6ICVzXCIsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUoKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIHVuc2FmZSByZW5kZXIgcGhhc2UgdXBkYXRlLiBBZGQgZGlyZWN0bHkgdG8gdGhlIHVwZGF0ZVxuICAgICAgICAvLyBxdWV1ZSBzbyB3ZSBjYW4gcHJvY2VzcyBpdCBpbW1lZGlhdGVseSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLlxuICAgICAgICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgICAgICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgICAgICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTsgLy8gVXBkYXRlIHRoZSBjaGlsZExhbmVzIGV2ZW4gdGhvdWdoIHdlJ3JlIG1vc3QgbGlrZWx5IGFscmVhZHkgcmVuZGVyaW5nXG4gICAgICAgIC8vIHRoaXMgZmliZXIuIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIHRoZSBjYXNlIHdoZXJlIHlvdVxuICAgICAgICAvLyB1cGRhdGUgYSBkaWZmZXJlbnQgY29tcG9uZW50IGR1cmluZyByZW5kZXIgcGhhc2UgdGhhbiB0aGUgb25lIHRoYXQgaXNcbiAgICAgICAgLy8gY3VycmVudGx5IHJlbmRlcmluZ3MgKGEgcGF0dGVybiB0aGF0IGlzIGFjY29tcGFuaWVkIGJ5IGEgd2FybmluZykuXG5cbiAgICAgICAgcmV0dXJuIHVuc2FmZV9tYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5xdWV1ZUNvbmN1cnJlbnRDbGFzc1VwZGF0ZShmaWJlciwgc2hhcmVkUXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG5cbiAgICAgIGlmIChpc1RyYW5zaXRpb25MYW5lKGxhbmUpKSB7XG4gICAgICAgIHZhciBxdWV1ZUxhbmVzID0gc2hhcmVkUXVldWUubGFuZXM7IC8vIElmIGFueSBlbnRhbmdsZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBwZW5kaW5nIG9uIHRoZSByb290LCB0aGVuIHRoZXkgbXVzdFxuICAgICAgICAvLyBoYXZlIGZpbmlzaGVkLiBXZSBjYW4gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc2hhcmVkIHF1ZXVlLCB3aGljaCByZXByZXNlbnRzXG4gICAgICAgIC8vIGEgc3VwZXJzZXQgb2YgdGhlIGFjdHVhbGx5IHBlbmRpbmcgbGFuZXMuIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVudGFuZ2xlXG4gICAgICAgIC8vIG1vcmUgdGhhbiB3ZSBuZWVkIHRvLCBidXQgdGhhdCdzIE9LLiBJbiBmYWN0IGl0J3Mgd29yc2UgaWYgd2UgKmRvbid0KlxuICAgICAgICAvLyBlbnRhbmdsZSB3aGVuIHdlIHNob3VsZC5cblxuICAgICAgICBxdWV1ZUxhbmVzID0gaW50ZXJzZWN0TGFuZXMocXVldWVMYW5lcywgcm9vdC5wZW5kaW5nTGFuZXMpOyAvLyBFbnRhbmdsZSB0aGUgbmV3IHRyYW5zaXRpb24gbGFuZSB3aXRoIHRoZSBvdGhlciB0cmFuc2l0aW9uIGxhbmVzLlxuXG4gICAgICAgIHZhciBuZXdRdWV1ZUxhbmVzID0gbWVyZ2VMYW5lcyhxdWV1ZUxhbmVzLCBsYW5lKTtcbiAgICAgICAgc2hhcmVkUXVldWUubGFuZXMgPSBuZXdRdWV1ZUxhbmVzOyAvLyBFdmVuIGlmIHF1ZXVlLmxhbmVzIGFscmVhZHkgaW5jbHVkZSBsYW5lLCB3ZSBkb24ndCBrbm93IGZvciBjZXJ0YWluIGlmXG4gICAgICAgIC8vIHRoZSBsYW5lIGZpbmlzaGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgZW50YW5nbGVkIGl0LiBTbyB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIGVudGFuZ2xlIGl0IGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuXG5cbiAgICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbmV3UXVldWVMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgICAgIC8vIENhcHR1cmVkIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCBhcmUgdGhyb3duIGJ5IGEgY2hpbGQgZHVyaW5nIHRoZSByZW5kZXJcbiAgICAgIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gICAgICAvLyB3ZSBzaG91bGQgb25seSBwdXQgdGhlbSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSwgbm90IHRoZSBjdXJyZW50IG9uZS5cbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBDaGVjayBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBhIGNsb25lLlxuXG4gICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyB0aGUgc2FtZSBhcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlblxuICAgICAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIGEgcGFyZW50IGZpYmVyIHRoYXQgdGhlbiBjYXB0dXJlcyBhbiBlcnJvciB0aHJvd24gYnlcbiAgICAgICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgICAgICAvLyAtcHJvZ3Jlc3MgcXVldWUsIHdlIG5lZWQgdG8gY2xvbmUgdGhlIHVwZGF0ZXMuIFdlIHVzdWFsbHkgY2xvbmUgZHVyaW5nXG4gICAgICAgICAgLy8gcHJvY2Vzc1VwZGF0ZVF1ZXVlLCBidXQgdGhhdCBkaWRuJ3QgaGFwcGVuIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgICAgIHZhciBuZXdGaXJzdCA9IG51bGw7XG4gICAgICAgICAgdmFyIG5ld0xhc3QgPSBudWxsO1xuICAgICAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVwZGF0ZXMgYW5kIGNsb25lIHRoZW0uXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIHVwZGF0ZSBpcyByZWJhc2VkLCB3ZSBzaG91bGQgbm90IGZpcmUgaXRzXG4gICAgICAgICAgICAgICAgLy8gY2FsbGJhY2sgYWdhaW4uXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgICAgICAgICAgbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cbiAgICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHF1ZXVlID0ge1xuICAgICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICAgICAgY2FsbGJhY2tzOiBjdXJyZW50UXVldWUuY2FsbGJhY2tzXG4gICAgICAgICAgfTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gICAgICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcXVldWUsXG4gICAgICB1cGRhdGUsXG4gICAgICBwcmV2U3RhdGUsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgICAgIGNhc2UgUmVwbGFjZVN0YXRlOiB7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcblxuICAgICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDYXB0dXJlVXBkYXRlOiB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPVxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUpIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgVXBkYXRlU3RhdGU6IHtcbiAgICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBQYXJ0aWFsIHN0YXRlIG9iamVjdFxuICAgICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICAgICAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG4gICAgICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBGb3JjZVVwZGF0ZToge1xuICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSBmYWxzZTsgLy8gRWFjaCBjYWxsIHRvIHByb2Nlc3NVcGRhdGVRdWV1ZSBzaG91bGQgYmUgYWNjb21wYW5pZWQgYnkgYSBjYWxsIHRvIHRoaXMuIEl0J3NcbiAgICAvLyBvbmx5IGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSBpbiB1cGRhdGVIb3N0Um9vdCwgaXQgbXVzdCBoYXBwZW4gYWZ0ZXJcbiAgICAvLyBhbGwgdGhlIGNvbnRleHQgc3RhY2tzIGhhdmUgYmVlbiBwdXNoZWQgdG8sIHRvIHByZXZlbnQgYSBzdGFjayBtaXNtYXRjaC4gQVxuICAgIC8vIGJpdCB1bmZvcnR1bmF0ZS5cblxuICAgIGZ1bmN0aW9uIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSBpcyBwYXJ0IG9mIGEgcGVuZGluZyBhc3luYyBhY3Rpb24uIElmIHNvLCB3ZSdsbFxuICAgICAgLy8gbmVlZCB0byBzdXNwZW5kIHVudGlsIHRoZSBhY3Rpb24gaGFzIGZpbmlzaGVkLCBzbyB0aGF0IGl0J3MgYmF0Y2hlZFxuICAgICAgLy8gdG9nZXRoZXIgd2l0aCBmdXR1cmUgdXBkYXRlcyBpbiB0aGUgc2FtZSBhY3Rpb24uXG4gICAgICAvLyBUT0RPOiBPbmNlIHdlIHN1cHBvcnQgaG9va3MgaW5zaWRlIHVzZU1lbW8gKG9yIGFuIGVxdWl2YWxlbnRcbiAgICAgIC8vIG1lbW9pemF0aW9uIGJvdW5kYXJ5IGxpa2UgRm9yZ2V0KSwgaG9pc3QgdGhpcyBsb2dpYyBzbyB0aGF0IGl0IG9ubHlcbiAgICAgIC8vIHN1c3BlbmRzIGlmIHRoZSBtZW1vIGJvdW5kYXJ5IHByb2R1Y2VzIGEgbmV3IHZhbHVlLlxuICAgICAgaWYgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24pIHtcbiAgICAgICAgdmFyIGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gcGVla0VudGFuZ2xlZEFjdGlvblRoZW5hYmxlKCk7XG5cbiAgICAgICAgaWYgKGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogSW5zdGVhZCBvZiB0aGUgdGhyb3dpbmcgdGhlIHRoZW5hYmxlIGRpcmVjdGx5LCB0aHJvdyBhXG4gICAgICAgICAgLy8gc3BlY2lhbCBvYmplY3QgbGlrZSBgdXNlYCBkb2VzIHNvIHdlIGNhbiBkZXRlY3QgaWYgaXQncyBjYXB0dXJlZFxuICAgICAgICAgIC8vIGJ5IHVzZXJzcGFjZS5cbiAgICAgICAgICB0aHJvdyBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSBmYWxzZTsgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuXG4gICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIHtcbiAgICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuICAgICAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICAgICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgICAgIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHVwZGF0ZXMgdG8gdGhhdCBxdWV1ZSwgdG9vLiBCZWNhdXNlIHRoZSBiYXNlXG4gICAgICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAgICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAgICAgLy8gVE9ETzogUGFzcyBgY3VycmVudGAgYXMgYXJndW1lbnRcblxuICAgICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgICAgICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSAhPT0gbGFzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhlc2UgdmFsdWVzIG1heSBjaGFuZ2UgYXMgd2UgcHJvY2VzcyB0aGUgcXVldWUuXG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHVwZGF0ZXMgdG8gY29tcHV0ZSB0aGUgcmVzdWx0LlxuICAgICAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgICAgIHZhciBuZXdMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgICAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICAgICAgdmFyIG5ld0xhc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gQW4gZXh0cmEgT2Zmc2NyZWVuTGFuZSBiaXQgaXMgYWRkZWQgdG8gdXBkYXRlcyB0aGF0IHdlcmUgbWFkZSB0b1xuICAgICAgICAgIC8vIGEgaGlkZGVuIHRyZWUsIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB1cGRhdGVzIHRoYXQgd2VyZVxuICAgICAgICAgIC8vIGFscmVhZHkgdGhlcmUgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLlxuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gcmVtb3ZlTGFuZXModXBkYXRlLmxhbmUsIE9mZnNjcmVlbkxhbmUpO1xuICAgICAgICAgIHZhciBpc0hpZGRlblVwZGF0ZSA9IHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lOyAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSB3YXMgbWFkZSB3aGlsZSB0aGUgdHJlZSB3YXMgaGlkZGVuLiBJZiBzbywgdGhlblxuICAgICAgICAgIC8vIGl0J3Mgbm90IGEgXCJiYXNlXCIgdXBkYXRlIGFuZCB3ZSBzaG91bGQgZGlzcmVnYXJkIHRoZSBleHRyYSBiYXNlIGxhbmVzXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlIGFkZGVkIHRvIHJlbmRlckxhbmVzIHdoZW4gd2UgZW50ZXJlZCB0aGUgT2Zmc2NyZWVuIHRyZWUuXG5cbiAgICAgICAgICB2YXIgc2hvdWxkU2tpcFVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICA/ICFpc1N1YnNldE9mTGFuZXMoZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMoKSwgdXBkYXRlTGFuZSlcbiAgICAgICAgICAgIDogIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkU2tpcFVwZGF0ZSkge1xuICAgICAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG5cbiAgICAgICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyB1cGRhdGUgaXMgcGFydCBvZiBhIHBlbmRpbmcgYXN5bmMgYWN0aW9uLiBJZiBzbyxcbiAgICAgICAgICAgIC8vIHdlJ2xsIG5lZWQgdG8gc3VzcGVuZCB1bnRpbCB0aGUgYWN0aW9uIGhhcyBmaW5pc2hlZCwgc28gdGhhdCBpdCdzXG4gICAgICAgICAgICAvLyBiYXRjaGVkIHRvZ2V0aGVyIHdpdGggZnV0dXJlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgYWN0aW9uLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB1cGRhdGVMYW5lICE9PSBOb0xhbmUgJiZcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gcGVla0VudGFuZ2xlZEFjdGlvbkxhbmUoKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgdXBkYXRlIGlzIHJlYmFzZWQsIHdlIHNob3VsZCBub3QgZmlyZSBpdHNcbiAgICAgICAgICAgICAgICAvLyBjYWxsYmFjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuICAgICAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG5cbiAgICAgICAgICAgICAgaWYgKGlzSGlkZGVuVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBxdWV1ZS5jYWxsYmFja3M7XG5cbiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLmNhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSB3ZSBiYWlsIG91dCB3aGVuIHdlIGdldCBhIG51bGxcblxuICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgICAgIC8vIHBlbmRpbmcgdXBkYXRlcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCBrZWVwIHByb2Nlc3NpbmcuXG4gICAgICAgICAgICAgIHZhciBfbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7IC8vIEludGVudGlvbmFsbHkgdW5zb3VuZC4gUGVuZGluZyB1cGRhdGVzIGZvcm0gYSBjaXJjdWxhciBsaXN0LCBidXQgd2VcbiAgICAgICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICAgICAgdmFyIF9maXJzdFBlbmRpbmdVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgICAgICAgX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IG5ld0ZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gYHF1ZXVlLmxhbmVzYCBpcyB1c2VkIGZvciBlbnRhbmdsaW5nIHRyYW5zaXRpb25zLiBXZSBjYW4gc2V0IGl0IGJhY2sgdG9cbiAgICAgICAgICAvLyB6ZXJvIG9uY2UgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIH0gLy8gU2V0IHRoZSByZW1haW5pbmcgZXhwaXJhdGlvbiB0aW1lIHRvIGJlIHdoYXRldmVyIGlzIHJlbWFpbmluZyBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgICAgICAvLyBleHBpcmF0aW9uIHRpbWUgYXJlIHByb3BzIGFuZCBjb250ZXh0LiBXZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgdGhlXG4gICAgICAgIC8vIGJlZ2luIHBoYXNlIGJ5IHRoZSB0aW1lIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHF1ZXVlLCBzbyB3ZSd2ZSBhbHJlYWR5XG4gICAgICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB0cmlja3k7IGJ1dCB3ZSdsbCBoYXZlIHRvIGFjY291bnQgZm9yXG4gICAgICAgIC8vIHRoYXQgcmVnYXJkbGVzcy5cblxuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBuZXdMYW5lcztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgXCIgK1xuICAgICAgICAgICAgKFwicmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2spXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gICAgICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkge1xuICAgICAgcmV0dXJuIGhhc0ZvcmNlVXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZlckhpZGRlbkNhbGxiYWNrcyh1cGRhdGVRdWV1ZSkge1xuICAgICAgLy8gV2hlbiBhbiB1cGRhdGUgZmluaXNoZXMgb24gYSBoaWRkZW4gY29tcG9uZW50LCBpdHMgY2FsbGJhY2sgc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgZmlyZWQgdW50aWwvdW5sZXNzIHRoZSBjb21wb25lbnQgaXMgbWFkZSB2aXNpYmxlIGFnYWluLiBTdGFzaCB0aGVcbiAgICAgIC8vIGNhbGxiYWNrIG9uIHRoZSBzaGFyZWQgcXVldWUgb2JqZWN0IHNvIGl0IGNhbiBiZSBmaXJlZCBsYXRlci5cbiAgICAgIHZhciBuZXdIaWRkZW5DYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5jYWxsYmFja3M7XG5cbiAgICAgIGlmIChuZXdIaWRkZW5DYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nSGlkZGVuQ2FsbGJhY2tzID0gdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcztcblxuICAgICAgICBpZiAoZXhpc3RpbmdIaWRkZW5DYWxsYmFja3MgPT09IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID0gbmV3SGlkZGVuQ2FsbGJhY2tzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MgPVxuICAgICAgICAgICAgZXhpc3RpbmdIaWRkZW5DYWxsYmFja3MuY29uY2F0KG5ld0hpZGRlbkNhbGxiYWNrcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SGlkZGVuQ2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBjb250ZXh0KSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBzd2l0Y2hpbmcgZnJvbSBoaWRkZW4gLT4gdmlzaWJsZS4gQ29tbWl0IGFueSBjYWxsYmFja3NcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IGRlZmVycmVkLlxuICAgICAgdmFyIGhpZGRlbkNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7XG5cbiAgICAgIGlmIChoaWRkZW5DYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5DYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBoaWRkZW5DYWxsYmFja3NbaV07XG4gICAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5jYWxsYmFja3M7XG5cbiAgICAgIGlmIChjYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgdXBkYXRlUXVldWUuY2FsbGJhY2tzID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXTtcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICAgICAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICAgICAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgICAgIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb2JqQSAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICBvYmpBID09PSBudWxsIHx8XG4gICAgICAgIHR5cGVvZiBvYmpCICE9PSBcIm9iamVjdFwiIHx8XG4gICAgICAgIG9iakIgPT09IG51bGxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzQVtpXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwgY3VycmVudEtleSkgfHwgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBsb3N0IHJlZmluZW1lbnQgb2YgYG9iakJgXG4gICAgICAgICAgIW9iamVjdElzKG9iakFbY3VycmVudEtleV0sIG9iakJbY3VycmVudEtleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBmaWJlci5fZGVidWdPd25lciA/IGZpYmVyLl9kZWJ1Z093bmVyLnR5cGUgOiBudWxsO1xuXG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmaWJlci50eXBlLCBvd25lcik7XG5cbiAgICAgICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIkxhenlcIiwgb3duZXIpO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIiwgb3duZXIpO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiLCBvd25lcik7XG5cbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLCBvd25lcik7XG5cbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIsIG93bmVyKTtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSwgb3duZXIpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaW5mbyA9IFwiXCI7XG4gICAgICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH0gd2hpbGUgKG5vZGUpO1xuXG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gXCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIiArIHgubWVzc2FnZSArIFwiXFxuXCIgKyB4LnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgY3VycmVudCA9IG51bGw7XG4gICAgdmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihvd25lcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfSAvLyBTYWZlIGJlY2F1c2UgaWYgY3VycmVudCBmaWJlciBleGlzdHMsIHdlIGFyZSByZWNvbmNpbGluZyxcbiAgICAgICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cblxuICAgICAgICByZXR1cm4gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0Q3VycmVudEZpYmVyKCkge1xuICAgICAge1xuICAgICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDdXJyZW50RmliZXIoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPVxuICAgICAgICAgIGZpYmVyID09PSBudWxsID8gbnVsbCA6IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICAgICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyKCkge1xuICAgICAge1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SXNSZW5kZXJpbmcocmVuZGVyaW5nKSB7XG4gICAgICB7XG4gICAgICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgICAgIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgICAgIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgICAgIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbiAgICB9O1xuXG4gICAge1xuICAgICAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHZhciBtYXliZVN0cmljdFJvb3QgPSBudWxsO1xuICAgICAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKG5vZGUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgIG1heWJlU3RyaWN0Um9vdCA9IG5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoKS5qb2luKFwiLCBcIik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgICAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICAgIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICAgIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gICAgICB2YXIgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcblxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoXG4gICAgICAgIGZpYmVyLFxuICAgICAgICBpbnN0YW5jZVxuICAgICAgKSB7XG4gICAgICAgIC8vIERlZHVwZSBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG4gICAgICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIgJiYgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09XG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPVxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICAgICAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgICAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgICAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgICAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICAgICAgICB9IC8vIEZpbmFsbHksIHdlIGZsdXNoIGFsbCB0aGUgd2FybmluZ3NcbiAgICAgICAgICAvLyBVTlNBRkVfIG9uZXMgYmVmb3JlIHRoZSBkZXByZWNhdGVkIG9uZXMsIHNpbmNlIHRoZXknbGwgYmUgJ2xvdWRlcidcblxuICAgICAgICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlVzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuIFwiICtcbiAgICAgICAgICAgICAgICBcIlNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgXCIgK1xuICAgICAgICAgICAgICAgIFwiYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgK1xuICAgICAgICAgICAgICAgIFwicmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gXCIgK1xuICAgICAgICAgICAgICAgIFwic3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICAgICAgX3NvcnRlZE5hbWVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnRlZE5hbWVzMiA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgXCIgK1xuICAgICAgICAgICAgICAgIFwiYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgICAgICBfc29ydGVkTmFtZXMyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdmFyIF9zb3J0ZWROYW1lczMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgXCIgK1xuICAgICAgICAgICAgICAgIFwidGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBcIiArXG4gICAgICAgICAgICAgICAgXCJgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICAgICAgX3NvcnRlZE5hbWVzM1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnRlZE5hbWVzNCA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuIFwiICtcbiAgICAgICAgICAgICAgICBcIlNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgK1xuICAgICAgICAgICAgICAgIFwiY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvIFwiICtcbiAgICAgICAgICAgICAgICBcInN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyBcIiArXG4gICAgICAgICAgICAgICAgXCJ0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIFwiICtcbiAgICAgICAgICAgICAgICBcImBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgICAgICBfc29ydGVkTmFtZXM0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgXCJjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgXCIgK1xuICAgICAgICAgICAgICAgIFwidGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBcIiArXG4gICAgICAgICAgICAgICAgXCJgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICAgICAgX3NvcnRlZE5hbWVzNVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgICAgIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuXG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChcbiAgICAgICAgZmliZXIsXG4gICAgICAgIGluc3RhbmNlXG4gICAgICApIHtcbiAgICAgICAgdmFyIHN0cmljdFJvb3QgPSBmaW5kU3RyaWN0Um9vdChmaWJlcik7XG5cbiAgICAgICAgaWYgKHN0cmljdFJvb3QgPT09IG51bGwpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cblxuICAgICAgICBpZiAoZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2FybmluZ3NGb3JSb290ID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmliZXIudHlwZS5jb250ZXh0VHlwZXMgIT0gbnVsbCB8fFxuICAgICAgICAgIGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgIT0gbnVsbCB8fFxuICAgICAgICAgIChpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd2FybmluZ3NGb3JSb290ID0gW107XG4gICAgICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIHdhcm5pbmdzRm9yUm9vdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSwgc3RyaWN0Um9vdCkge1xuICAgICAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgZmliZXJBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCIpO1xuICAgICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaXJzdEZpYmVyKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgXCIgK1xuICAgICAgICAgICAgICAgIFwidXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLlwiICtcbiAgICAgICAgICAgICAgICBcIlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiICtcbiAgICAgICAgICAgICAgICBcIlxcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dFwiLFxuICAgICAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcbiAgICAgKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxuICAgICAqXG4gICAgICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxuICAgICAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcbiAgICAgKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAgICAgKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxuICAgICAqL1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG4gICAgZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgICAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgICAgICB2YXIgdHlwZSA9XG4gICAgICAgICAgKGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIFwiT2JqZWN0XCI7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cblxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cbiAgICBmdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICAgICAge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAgICAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcbiAgICAgIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgICAgIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAgICAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgICAgIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xuICAgICAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gICAgICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgICAgIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXG4gICAgICAvL1xuICAgICAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAgICAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxuICAgICAgLy9cbiAgICAgIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gICAgICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcbiAgICAgIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgICAgIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gICAgICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXG4gICAgICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gICAgICAvL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICB7XG4gICAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLlwiICtcbiAgICAgICAgICAgICAgXCIgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICB0eXBlTmFtZSh2YWx1ZSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BOYW1lKSB7XG4gICAgICB7XG4gICAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGAlc2AgcHJvcCBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLlwiICtcbiAgICAgICAgICAgICAgXCIgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgIHR5cGVOYW1lKHZhbHVlKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7XG5cbiAgICBmdW5jdGlvbiBnZXRUaGVuYWJsZXNGcm9tU3RhdGUoc3RhdGUpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGRldlN0YXRlID0gc3RhdGU7XG4gICAgICAgIHJldHVybiBkZXZTdGF0ZS50aGVuYWJsZXM7XG4gICAgICB9XG4gICAgfSAvLyBBbiBlcnJvciB0aGF0IGlzIHRocm93biAoZS5nLiBieSBgdXNlYCkgdG8gdHJpZ2dlciBTdXNwZW5zZS4gSWYgd2VcbiAgICAvLyBkZXRlY3QgdGhpcyBpcyBjYXVnaHQgYnkgdXNlcnNwYWNlLCB3ZSdsbCBsb2cgYSB3YXJuaW5nIGluIGRldmVsb3BtZW50LlxuXG4gICAgdmFyIFN1c3BlbnNlRXhjZXB0aW9uID0gbmV3IEVycm9yKFxuICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciEgSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBcIiArXG4gICAgICAgIFwiZGV0YWlsIG9mIGB1c2VgIHRvIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuIFlvdSBtdXN0IGVpdGhlciBcIiArXG4gICAgICAgIFwicmV0aHJvdyBpdCBpbW1lZGlhdGVseSwgb3IgbW92ZSB0aGUgYHVzZWAgY2FsbCBvdXRzaWRlIG9mIHRoZSBcIiArXG4gICAgICAgIFwiYHRyeS9jYXRjaGAgYmxvY2suIENhcHR1cmluZyB3aXRob3V0IHJldGhyb3dpbmcgd2lsbCBsZWFkIHRvIFwiICtcbiAgICAgICAgXCJ1bmV4cGVjdGVkIGJlaGF2aW9yLlxcblxcblwiICtcbiAgICAgICAgXCJUbyBoYW5kbGUgYXN5bmMgZXJyb3JzLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGFuIGVycm9yIGJvdW5kYXJ5LCBvciBcIiArXG4gICAgICAgIFwiY2FsbCB0aGUgcHJvbWlzZSdzIGAuY2F0Y2hgIG1ldGhvZCBhbmQgcGFzcyB0aGUgcmVzdWx0IHRvIGB1c2VgXCJcbiAgICApO1xuICAgIHZhciBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24gPSBuZXcgRXJyb3IoXG4gICAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLCBhbmQgc2hvdWxkIG5vdCBsZWFrIGludG8gXCIgK1xuICAgICAgICBcInVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICk7IC8vIFRoaXMgaXMgYSBub29wIHRoZW5hYmxlIHRoYXQgd2UgdXNlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBpbiB0aHJvd0V4Y2VwdGlvbi5cbiAgICAvLyBUT0RPOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmVmYWN0b3IgdGhyb3dFeGNlcHRpb24gaW50byBtdWx0aXBsZSBmdW5jdGlvbnNcbiAgICAvLyBzbyB3ZSBjYW4gdHJpZ2dlciBhIGZhbGxiYWNrIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIGNoZWNrIHRoZSB0eXBlLiBCdXRcbiAgICAvLyBmb3Igbm93IHRoaXMgd2lsbCBkby5cblxuICAgIHZhciBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUgPSB7XG4gICAgICB0aGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEEgbGlzdGVuZXIgd2FzIHVuZXhwZWN0ZWRseSBhdHRhY2hlZCB0byBhIFwiICtcbiAgICAgICAgICAgICAgJ1wibm9vcFwiIHRoZW5hYmxlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlVGhlbmFibGVTdGF0ZSgpIHtcbiAgICAgIC8vIFRoZSBUaGVuYWJsZVN0YXRlIGlzIGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYSBjb21wb25lbnQgc3VzcGVuZHMuIElmIGl0XG4gICAgICAvLyBzdXNwZW5kcyBhZ2Fpbiwgd2UnbGwgcmV1c2UgdGhlIHNhbWUgc3RhdGUuXG4gICAgICB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlOiBmYWxzZSxcbiAgICAgICAgICB0aGVuYWJsZXM6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVGhlbmFibGVSZXNvbHZlZCh0aGVuYWJsZSkge1xuICAgICAgdmFyIHN0YXR1cyA9IHRoZW5hYmxlLnN0YXR1cztcbiAgICAgIHJldHVybiBzdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgfHwgc3RhdHVzID09PSBcInJlamVjdGVkXCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG5cbiAgICBmdW5jdGlvbiB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpIHtcbiAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQyLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMi5kaWRVc2VQcm9taXNlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRyYWNrZWRUaGVuYWJsZXMgPSBnZXRUaGVuYWJsZXNGcm9tU3RhdGUodGhlbmFibGVTdGF0ZSk7XG4gICAgICB2YXIgcHJldmlvdXMgPSB0cmFja2VkVGhlbmFibGVzW2luZGV4XTtcblxuICAgICAgaWYgKHByZXZpb3VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJhY2tlZFRoZW5hYmxlcy5wdXNoKHRoZW5hYmxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2aW91cyAhPT0gdGhlbmFibGUpIHtcbiAgICAgICAgICAvLyBSZXVzZSB0aGUgcHJldmlvdXMgdGhlbmFibGUsIGFuZCBkcm9wIHRoZSBuZXcgb25lLiBXZSBjYW4gYXNzdW1lXG4gICAgICAgICAgLy8gdGhleSByZXByZXNlbnQgdGhlIHNhbWUgdmFsdWUsIGJlY2F1c2UgY29tcG9uZW50cyBhcmUgaWRlbXBvdGVudC5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdGhlbmFibGVTdGF0ZURldiA9IHRoZW5hYmxlU3RhdGU7XG5cbiAgICAgICAgICAgIGlmICghdGhlbmFibGVTdGF0ZURldi5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgd2FybiB0aGUgZmlyc3QgdGltZSBhbiB1bmNhY2hlZCB0aGVuYWJsZSBpc1xuICAgICAgICAgICAgICAvLyBkaXNjb3ZlcmVkIHBlciBjb21wb25lbnQsIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG11bHRpcGxlLCB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2VxdWVudCBvbmVzIGFyZSBsaWtlbHkgZGVyaXZlZCBmcm9tIHRoZSBmaXJzdC5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gV2UgdHJhY2sgdGhpcyBvbiB0aGUgdGhlbmFibGVTdGF0ZSBpbnN0ZWFkIG9mIGRlZHVwaW5nIHVzaW5nIHRoZVxuICAgICAgICAgICAgICAvLyBjb21wb25lbnQgbmFtZSBsaWtlIHdlIHVzdWFsbHkgZG8sIGJlY2F1c2UgaW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAgICAgICAvLyBwcm9taXNlLWFzLVJlYWN0LW5vZGUsIHRoZSBvd25lciBjb21wb25lbnQgaXMgbGlrZWx5IGRpZmZlcmVudCBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgdGhhdCdzIGN1cnJlbnRseSBiZWluZyByZWNvbmNpbGVkLiBXZSdkIGhhdmUgdG8gdHJhY2tcbiAgICAgICAgICAgICAgLy8gdGhlIG93bmVyIHVzaW5nIHN0YXRlLCB3aGljaCB3ZSdyZSB0cnlpbmcgdG8gbW92ZSBhd2F5IGZyb20uIFRob3VnaFxuICAgICAgICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGRldi1vbmx5LCBtYXliZSB0aGF0J2QgYmUgT0suXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGFub3RoZXIgYmVuZWZpdCBvZiBkb2luZyBpdCB0aGlzIHdheSBpcyB3ZSBtaWdodFxuICAgICAgICAgICAgICAvLyBldmVudHVhbGx5IGhhdmUgYSB0aGVuYWJsZVN0YXRlIHBlciBtZW1vL0ZvcmdldCBib3VuZGFyeSBpbnN0ZWFkXG4gICAgICAgICAgICAgIC8vIG9mIHBlciBjb21wb25lbnQsIHNvIHRoaXMgd291bGQgYWxsb3cgdXMgdG8gaGF2ZSBtb3JlXG4gICAgICAgICAgICAgIC8vIGdyYW51bGFyIHdhcm5pbmdzLlxuICAgICAgICAgICAgICB0aGVuYWJsZVN0YXRlRGV2LmRpZFdhcm5BYm91dFVuY2FjaGVkUHJvbWlzZSA9IHRydWU7IC8vIFRPRE86IFRoaXMgd2FybmluZyBzaG91bGQgbGluayB0byBhIGNvcnJlc3BvbmRpbmcgZG9jcyBwYWdlLlxuXG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgd2FzIHN1c3BlbmRlZCBieSBhbiB1bmNhY2hlZCBwcm9taXNlLiBDcmVhdGluZyBcIiArXG4gICAgICAgICAgICAgICAgICBcInByb21pc2VzIGluc2lkZSBhIENsaWVudCBDb21wb25lbnQgb3IgaG9vayBpcyBub3QgeWV0IFwiICtcbiAgICAgICAgICAgICAgICAgIFwic3VwcG9ydGVkLCBleGNlcHQgdmlhIGEgU3VzcGVuc2UtY29tcGF0aWJsZSBsaWJyYXJ5IG9yIGZyYW1ld29yay5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gQXZvaWQgYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBlcnJvcnMgZm9yIHRoZSBQcm9taXNlcyB0aGF0IHdlJ2xsXG4gICAgICAgICAgLy8gaW50ZW50aW9uYWxseSBpZ25vcmUuXG5cbiAgICAgICAgICB0aGVuYWJsZS50aGVuKG5vb3AsIG5vb3ApO1xuICAgICAgICAgIHRoZW5hYmxlID0gcHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UgdXNlIGFuIGV4cGFuZG8gdG8gdHJhY2sgdGhlIHN0YXR1cyBhbmQgcmVzdWx0IG9mIGEgdGhlbmFibGUgc28gdGhhdCB3ZVxuICAgICAgLy8gY2FuIHN5bmNocm9ub3VzbHkgdW53cmFwIHRoZSB2YWx1ZS4gVGhpbmsgb2YgdGhpcyBhcyBhbiBleHRlbnNpb24gb2YgdGhlXG4gICAgICAvLyBQcm9taXNlIEFQSSwgb3IgYSBjdXN0b20gaW50ZXJmYWNlIHRoYXQgaXMgYSBzdXBlcnNldCBvZiBUaGVuYWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB0aGUgdGhlbmFibGUgZG9lc24ndCBoYXZlIGEgc3RhdHVzLCBzZXQgaXQgdG8gXCJwZW5kaW5nXCIgYW5kIGF0dGFjaFxuICAgICAgLy8gYSBsaXN0ZW5lciB0aGF0IHdpbGwgdXBkYXRlIGl0cyBzdGF0dXMgYW5kIHJlc3VsdCB3aGVuIGl0IHJlc29sdmVzLlxuXG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6IHtcbiAgICAgICAgICB2YXIgZnVsZmlsbGVkVmFsdWUgPSB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjoge1xuICAgICAgICAgIHZhciByZWplY3RlZEVycm9yID0gdGhlbmFibGUucmVhc29uO1xuICAgICAgICAgIGNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoKHJlamVjdGVkRXJyb3IpO1xuICAgICAgICAgIHRocm93IHJlamVjdGVkRXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGVuYWJsZS5zdGF0dXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgaW5zdHJ1bWVudCB0aGUgdGhlbmFibGUgaWYgdGhlIHN0YXR1cyBpZiBub3QgZGVmaW5lZC4gSWZcbiAgICAgICAgICAgIC8vIGl0J3MgZGVmaW5lZCwgYnV0IGFuIHVua25vd24gdmFsdWUsIGFzc3VtZSBpdCdzIGJlZW4gaW5zdHJ1bWVudGVkIGJ5XG4gICAgICAgICAgICAvLyBzb21lIGN1c3RvbSB1c2Vyc3BhY2UgaW1wbGVtZW50YXRpb24uIFdlIHRyZWF0IGl0IGFzIFwicGVuZGluZ1wiLlxuICAgICAgICAgICAgLy8gQXR0YWNoIGEgZHVtbXkgbGlzdGVuZXIsIHRvIGVuc3VyZSB0aGF0IGFueSBsYXp5IGluaXRpYWxpemF0aW9uIGNhblxuICAgICAgICAgICAgLy8gaGFwcGVuLiBGbGlnaHQgbGF6aWx5IHBhcnNlcyBKU09OIHdoZW4gdGhlIHZhbHVlIGlzIGFjdHVhbGx5IGF3YWl0ZWQuXG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKG5vb3AsIG5vb3ApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIHVuY2FjaGVkIHRoZW5hYmxlIHRoYXQgd2UgaGF2ZW4ndCBzZWVuIGJlZm9yZS5cbiAgICAgICAgICAgIC8vIERldGVjdCBpbmZpbml0ZSBwaW5nIGxvb3BzIGNhdXNlZCBieSB1bmNhY2hlZCBwcm9taXNlcy5cbiAgICAgICAgICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICAgICAgICAgIGlmIChyb290ICE9PSBudWxsICYmIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlciA+IDEwMCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIHJvb3QgaGFzIHN1c3BlbmRlZCByZXBlYXRlZGx5IGluIHRoZSBzaGVsbCB3aXRob3V0IG1ha2luZyBhbnlcbiAgICAgICAgICAgICAgLy8gcHJvZ3Jlc3MgKGkuZS4gY29tbWl0dGluZyBzb21ldGhpbmcpLiBUaGlzIGlzIGhpZ2hseSBzdWdnZXN0aXZlIG9mXG4gICAgICAgICAgICAgIC8vIGFuIGluZmluaXRlIHBpbmcgbG9vcCwgb2Z0ZW4gY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgQXN5bmMgQ2xpZW50XG4gICAgICAgICAgICAgIC8vIENvbXBvbmVudC5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gRHVyaW5nIGEgdHJhbnNpdGlvbiwgd2UgY2FuIHN1c3BlbmQgdGhlIHdvcmsgbG9vcCB1bnRpbCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAvLyB0byByZXNvbHZlLCBidXQgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB0aGF0J3Mgbm90IGFuIG9wdGlvbi4gV2VcbiAgICAgICAgICAgICAgLy8gYWxzbyBjYW4ndCBzaG93IGEgZmFsbGJhY2ssIGJlY2F1c2Ugbm9uZSB3YXMgcHJvdmlkZWQuIFNvIG91ciBsYXN0XG4gICAgICAgICAgICAgIC8vIHJlc29ydCBpcyB0byB0aHJvdyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgZXJyb3IgaW4gYSBmdXR1cmUgcmVsZWFzZS4gT3RoZXIgd2F5cyBvZiBoYW5kbGluZ1xuICAgICAgICAgICAgICAvLyB0aGlzIGNhc2UgaW5jbHVkZSBmb3JjaW5nIGEgY29uY3VycmVudCByZW5kZXIsIG9yIHB1dHRpbmcgdGhlIHdob2xlXG4gICAgICAgICAgICAgIC8vIHJvb3QgaW50byBvZmZzY3JlZW4gbW9kZS5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiYXN5bmMvYXdhaXQgaXMgbm90IHlldCBzdXBwb3J0ZWQgaW4gQ2xpZW50IENvbXBvbmVudHMsIG9ubHkgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJTZXJ2ZXIgQ29tcG9uZW50cy4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IFwiICtcbiAgICAgICAgICAgICAgICAgIFwiYWRkaW5nIGAndXNlIGNsaWVudCdgIHRvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBcIiArXG4gICAgICAgICAgICAgICAgICBcImZvciB0aGUgc2VydmVyLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwZW5kaW5nVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgIHBlbmRpbmdUaGVuYWJsZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgICAgICAgICAgIHBlbmRpbmdUaGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZnVsZmlsbGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhlbmFibGUuc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICAgICAgICAgICAgdmFyIGZ1bGZpbGxlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgICBmdWxmaWxsZWRUaGVuYWJsZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUudmFsdWUgPSBmdWxmaWxsZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGVuYWJsZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnJlYXNvbiA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTsgLy8gQ2hlY2sgb25lIG1vcmUgdGltZSBpbiBjYXNlIHRoZSB0aGVuYWJsZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6IHtcbiAgICAgICAgICAgICAgICB2YXIgZnVsZmlsbGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkVGhlbmFibGUudmFsdWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjoge1xuICAgICAgICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgdmFyIF9yZWplY3RlZEVycm9yID0gcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2goX3JlamVjdGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgIHRocm93IF9yZWplY3RlZEVycm9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBTdXNwZW5kLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhyb3dpbmcgaGVyZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdCBhbGxvd3MgdXMgdG8gdW53aW5kIHRoZVxuICAgICAgICAgIC8vIGNhbGwgc3RhY2suIEJ1dCB3ZSBzaG91bGRuJ3QgYWxsb3cgaXQgdG8gbGVhayBpbnRvIHVzZXJzcGFjZS4gVGhyb3cgYW5cbiAgICAgICAgICAvLyBvcGFxdWUgcGxhY2Vob2xkZXIgdmFsdWUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHRoZW5hYmxlLiBJZiBpdCBkb2Vzbid0XG4gICAgICAgICAgLy8gZ2V0IGNhcHR1cmVkIGJ5IHRoZSB3b3JrIGxvb3AsIGxvZyBhIHdhcm5pbmcsIGJlY2F1c2UgdGhhdCBtZWFuc1xuICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB1c2Vyc3BhY2UgbXVzdCBoYXZlIGNhdWdodCBpdC5cblxuICAgICAgICAgIHN1c3BlbmRlZFRoZW5hYmxlID0gdGhlbmFibGU7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgU3VzcGVuc2VFeGNlcHRpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcGFzc2VkIHRvIHRoZSByZXN0IG9mIHRoZSBTdXNwZW5zZSBpbXBsZW1lbnRhdGlvbiDigJQgd2hpY2gsIGZvciBoaXN0b3JpY2FsXG4gICAgLy8gcmVhc29ucywgZXhwZWN0cyB0byByZWNlaXZlIGEgdGhlbmFibGUuXG5cbiAgICB2YXIgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuICAgIHZhciBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZFRoZW5hYmxlKCkge1xuICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgYHVzZWAgc3VzcGVuZHMgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLiBgdXNlYFxuICAgICAgLy8gdGhyb3dzIGFuIG9wYXF1ZSB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSB0aGVuYWJsZSBpdHNlbGYgc28gdGhhdCBpdCBjYW4ndCBiZVxuICAgICAgLy8gY2F1Z2h0IGluIHVzZXJzcGFjZS4gVGhlbiB0aGUgd29yayBsb29wIGFjY2Vzc2VzIHRoZSBhY3R1YWwgdGhlbmFibGUgdXNpbmdcbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24uXG4gICAgICBpZiAoc3VzcGVuZGVkVGhlbmFibGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgYSBzdXNwZW5kZWQgdGhlbmFibGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIFwiICtcbiAgICAgICAgICAgIFwiYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRoZW5hYmxlID0gc3VzcGVuZGVkVGhlbmFibGU7XG4gICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmVXNlV3JhcHBlZEluVHJ5Q2F0Y2goKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFRoaXMgd2FzIHNldCByaWdodCBiZWZvcmUgU3VzcGVuc2VFeGNlcHRpb24gd2FzIHRocm93biwgYW5kIGl0IHNob3VsZFxuICAgICAgICAvLyBoYXZlIGJlZW4gY2xlYXJlZCB3aGVuIHRoZSBleGNlcHRpb24gd2FzIGhhbmRsZWQuIElmIGl0IHdhc24ndCxcbiAgICAgICAgLy8gaXQgbXVzdCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IHVzZXJzcGFjZS5cbiAgICAgICAgaWYgKG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWKSB7XG4gICAgICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoKHJlamVjdGVkUmVhc29uKSB7XG4gICAgICAvLyBUaGlzIGNoZWNrIHJ1bnMgaW4gcHJvZCwgdG9vLCBiZWNhdXNlIGl0IHByZXZlbnRzIGEgbW9yZSBjb25mdXNpbmdcbiAgICAgIC8vIGRvd25zdHJlYW0gZXJyb3IsIHdoZXJlIFN1c3BlbnNlRXhjZXB0aW9uIGlzIGNhdWdodCBieSBhIHByb21pc2UgYW5kXG4gICAgICAvLyB0aHJvd24gYXN5bmNocm9ub3VzbHkuXG4gICAgICAvLyBUT0RPOiBBbm90aGVyIHdheSB0byBwcmV2ZW50IFN1c3BlbnNlRXhjZXB0aW9uIGZyb20gbGVha2luZyBpbnRvIGFuIGFzeW5jXG4gICAgICAvLyBleGVjdXRpb24gY29udGV4dCBpcyB0byBjaGVjayB0aGUgZGlzcGF0Y2hlciBldmVyeSB0aW1lIGB1c2VgIGlzIGNhbGxlZCxcbiAgICAgIC8vIG9yIHNvbWUgZXF1aXZhbGVudC4gVGhhdCBtaWdodCBiZSBwcmVmZXJhYmxlIGZvciBvdGhlciByZWFzb25zLCB0b28sIHNpbmNlXG4gICAgICAvLyBpdCBtYXRjaGVzIGhvdyB3ZSBwcmV2ZW50IHNpbWlsYXIgbWlzdGFrZXMgZm9yIG90aGVyIGhvb2tzLlxuICAgICAgaWYgKHJlamVjdGVkUmVhc29uID09PSBTdXNwZW5zZUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJIb29rcyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYW4gYXN5bmMgY29tcG9uZW50LiBUaGlzIFwiICtcbiAgICAgICAgICAgIFwiZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgXCIgK1xuICAgICAgICAgICAgXCJ0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdGhlbmFibGVTdGF0ZSQxID0gbnVsbDtcbiAgICB2YXIgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgdmFyIGRpZFdhcm5BYm91dE1hcHM7XG4gICAgdmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnM7XG4gICAgdmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG4gICAgdmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbiAgICB2YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nO1xuXG4gICAgdmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge307XG5cbiAgICB7XG4gICAgICBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG4gICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gZmFsc2U7XG4gICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gICAgICAvKipcbiAgICAgICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICAgICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgICAgICogdXBkYXRlcy5cbiAgICAgICAqL1xuXG4gICAgICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuXG4gICAgICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLl9zdG9yZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBcIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIHVuYWJsZSB0byBuYXJyb3cgdHlwZSBmcm9tIG1peGVkIHRvIHdyaXRhYmxlIG9iamVjdFxuXG4gICAgICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkVhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwiICtcbiAgICAgICAgICAgICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciAnICtcbiAgICAgICAgICAgIFwibW9yZSBpbmZvcm1hdGlvbi5cIlxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1JlYWN0Q2xhc3ModHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUucHJvdG90eXBlICYmIHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW53cmFwVGhlbmFibGUodGhlbmFibGUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoZW5hYmxlSW5kZXhDb3VudGVyJDE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxICs9IDE7XG5cbiAgICAgIGlmICh0aGVuYWJsZVN0YXRlJDEgPT09IG51bGwpIHtcbiAgICAgICAgdGhlbmFibGVTdGF0ZSQxID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSQxLCB0aGVuYWJsZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1peGVkUmVmID0gZWxlbWVudC5yZWY7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWl4ZWRSZWYgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG1peGVkUmVmICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdHlwZW9mIG1peGVkUmVmICE9PSBcIm9iamVjdFwiXG4gICAgICApIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIFdpbGwgYWxyZWFkeSB0aHJvdyB3aXRoIFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmc1wiXG4gICAgICAgICAgICAhKGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyLnRhZyAhPT0gQ2xhc3NDb21wb25lbnQpICYmIC8vIFdpbGwgYWxyZWFkeSB3YXJuIHdpdGggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzXCJcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnR5cGUgPT09IFwiZnVuY3Rpb25cIiAmJiAhaXNSZWFjdENsYXNzKGVsZW1lbnQudHlwZSlcbiAgICAgICAgICAgICkgJiYgLy8gV2lsbCBhbHJlYWR5IHRocm93IHdpdGggXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChzb21lU3RyaW5nUmVmKSBidXQgbm8gb3duZXIgd2FzIHNldFwiXG4gICAgICAgICAgICBlbGVtZW50Ll9vd25lclxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPVxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCBcIkNvbXBvbmVudFwiO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiBTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyAnICtcbiAgICAgICAgICAgICAgICAgIFwid2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCB1c2luZyBcIiArXG4gICAgICAgICAgICAgICAgICBcInVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBcIiArXG4gICAgICAgICAgICAgICAgICBcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCIsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICBtaXhlZFJlZlxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgIHZhciBpbnN0O1xuXG4gICAgICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgICAgICBpZiAob3duZXJGaWJlci50YWcgIT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkZ1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgc3RyaW5nIHJlZnMuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBcIiArXG4gICAgICAgICAgICAgICAgICBcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5zdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgK1xuICAgICAgICAgICAgICAgIG1peGVkUmVmICtcbiAgICAgICAgICAgICAgICBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgXCIgK1xuICAgICAgICAgICAgICAgIFwiYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IC8vIEFzc2lnbmluZyB0aGlzIHRvIGEgY29uc3Qgc28gRmxvdyBrbm93cyBpdCB3b24ndCBjaGFuZ2UgaW4gdGhlIGNsb3N1cmVcblxuICAgICAgICAgIHZhciByZXNvbHZlZEluc3QgPSBpbnN0O1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24obWl4ZWRSZWYsIFwicmVmXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHJpbmdSZWYgPSBcIlwiICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3VycmVudCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgY3VycmVudC5yZWYgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjdXJyZW50LnJlZiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICBjdXJyZW50LnJlZi5fc3RyaW5nUmVmID09PSBzdHJpbmdSZWZcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmVmID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVmcyA9IHJlc29sdmVkSW5zdC5yZWZzO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbWl4ZWRSZWYgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoXCIgK1xuICAgICAgICAgICAgICAgIG1peGVkUmVmICtcbiAgICAgICAgICAgICAgICBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2ZcIiArXG4gICAgICAgICAgICAgICAgXCIgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcblwiICtcbiAgICAgICAgICAgICAgICBcIjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcblwiICtcbiAgICAgICAgICAgICAgICBcIjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWl4ZWRSZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgdmFyIGNoaWxkU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICtcbiAgICAgICAgICAoY2hpbGRTdHJpbmcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgOiBjaGlsZFN0cmluZykgK1xuICAgICAgICAgIFwiKS4gXCIgK1xuICAgICAgICAgIFwiSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBcIiArXG4gICAgICAgICAgXCJpbnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcikge1xuICAgICAge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkZ1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiBcIiArXG4gICAgICAgICAgICBcInlvdSByZXR1cm4gYSBDb21wb25lbnQgaW5zdGVhZCBvZiA8Q29tcG9uZW50IC8+IGZyb20gcmVuZGVyLiBcIiArXG4gICAgICAgICAgICBcIk9yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZUxhenkobGF6eVR5cGUpIHtcbiAgICAgIHZhciBwYXlsb2FkID0gbGF6eVR5cGUuX3BheWxvYWQ7XG4gICAgICB2YXIgaW5pdCA9IGxhenlUeXBlLl9pbml0O1xuICAgICAgcmV0dXJuIGluaXQocGF5bG9hZCk7XG4gICAgfSAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZXhpc3RzIGJlY2F1c2UgSSBleHBlY3QgdG8gY2xvbmUgdGhlIGNvZGUgaW4gZWFjaCBwYXRoXG4gICAgLy8gdG8gYmUgYWJsZSB0byBvcHRpbWl6ZSBlYWNoIHBhdGggaW5kaXZpZHVhbGx5IGJ5IGJyYW5jaGluZyBlYXJseS4gVGhpcyBuZWVkc1xuICAgIC8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuICAgIC8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIC8vIE5vb3AuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcblxuICAgICAgICBpZiAoZGVsZXRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2NoaWxkVG9EZWxldGVdO1xuICAgICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IENoaWxkRGVsZXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRpb25zLnB1c2goY2hpbGRUb0RlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIC8vIE5vb3AuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgICAgICAvLyBhc3N1bWluZyB0aGF0IGFmdGVyIHRoZSBmaXJzdCBjaGlsZCB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGV2ZXJ5dGhpbmcuXG5cbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGRUb0RlbGV0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgICAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyBjaGlsZHJlbiB0byBhIHRlbXBvcmFyeSBtYXAgc28gdGhhdCB3ZSBjYW4gZmluZCB0aGVtIGJ5XG4gICAgICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAgICAgLy8gaW5zdGVhZC5cbiAgICAgICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdDaGlsZC5rZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5pbmRleCwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXhpc3RpbmdDaGlsZCA9IGV4aXN0aW5nQ2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgICAgIHZhciBjbG9uZSA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgICAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgICAgIGNsb25lLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICAgICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcblxuICAgICAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAvLyBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgdXNlSWQgYWxnb3JpdGhtIG5lZWRzIHRvIGtub3cgd2hpY2ggZmliZXJzIGFyZVxuICAgICAgICAgIC8vIHBhcnQgb2YgYSBsaXN0IG9mIGNoaWxkcmVuIChhcnJheXMsIGl0ZXJhdG9ycykuXG4gICAgICAgICAgbmV3RmliZXIuZmxhZ3MgfD0gRm9ya2VkO1xuICAgICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgICAgICBpZiAob2xkSW5kZXggPCBsYXN0UGxhY2VkSW5kZXgpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICAgICAgbmV3RmliZXIuZmxhZ3MgfD0gUGxhY2VtZW50IHwgUGxhY2VtZW50REVWO1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpdGVtIGNhbiBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgcmV0dXJuIG9sZEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbi5cbiAgICAgICAgICBuZXdGaWJlci5mbGFncyB8PSBQbGFjZW1lbnQgfCBQbGFjZW1lbnRERVY7XG4gICAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgICAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IFBsYWNlbWVudCB8IFBsYWNlbWVudERFVjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAvLyBJbnNlcnRcbiAgICAgICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoXG4gICAgICAgICAgICB0ZXh0Q29udGVudCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVcGRhdGVcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICBlbGVtZW50LmtleVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8IC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpIHx8IC8vIExhenkgdHlwZXMgc2hvdWxkIHJlY29uY2lsZSB0aGVpciByZXNvbHZlZCB0eXBlLlxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGFmdGVyIHRoZSBIb3QgUmVsb2FkaW5nIGNoZWNrIGFib3ZlLFxuICAgICAgICAgICAgLy8gYmVjYXVzZSBob3QgcmVsb2FkaW5nIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIHRoYW4gcHJvZCBiZWNhdXNlXG4gICAgICAgICAgICAvLyBpdCBkb2Vzbid0IHJlc3VzcGVuZC4gU28gd2UgY2FuJ3QgbGV0IHRoZSBjYWxsIGJlbG93IHN1c3BlbmQuXG4gICAgICAgICAgICAodHlwZW9mIGVsZW1lbnRUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgcmVzb2x2ZUxhenkoZWxlbWVudFR5cGUpID09PSBjdXJyZW50LnR5cGUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBNb3ZlIGJhc2VkIG9uIGluZGV4XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKTtcbiAgICAgICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEluc2VydFxuXG4gICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudCA9PT0gbnVsbCB8fFxuICAgICAgICAgIGN1cnJlbnQudGFnICE9PSBIb3N0UG9ydGFsIHx8XG4gICAgICAgICAgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHxcbiAgICAgICAgICBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEluc2VydFxuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXBkYXRlXG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBGcmFnbWVudCkge1xuICAgICAgICAgIC8vIEluc2VydFxuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIGtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVcGRhdGVcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwic3RyaW5nXCIgJiYgbmV3Q2hpbGQgIT09IFwiXCIpIHx8XG4gICAgICAgICAgdHlwZW9mIG5ld0NoaWxkID09PSBcIm51bWJlclwiXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgICAgICAvLyBub2RlLlxuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgIFwiXCIgKyBuZXdDaGlsZCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgX2NyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOiB7XG4gICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbmV3Q2hpbGQuX3BheWxvYWQ7XG4gICAgICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgaW5pdChwYXlsb2FkKSwgbGFuZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkMyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICAgICAgfSAvLyBVc2FibGUgbm9kZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVW53cmFwIHRoZSBpbm5lciB2YWx1ZSBhbmQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLlxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciB0aGVuYWJsZSA9IG5ld0NoaWxkO1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSksIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihyZXR1cm5GaWJlciwgY29udGV4dCwgbGFuZXMpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuICAgICAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAodHlwZW9mIG5ld0NoaWxkID09PSBcInN0cmluZ1wiICYmIG5ld0NoaWxkICE9PSBcIlwiKSB8fFxuICAgICAgICAgIHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJudW1iZXJcIlxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAgICAgLy8gbm9kZS5cbiAgICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBcIlwiICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRToge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRToge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IG5ld0NoaWxkLl9wYXlsb2FkO1xuICAgICAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0O1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIGluaXQocGF5bG9hZCksIGxhbmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICAgICAgfSAvLyBVc2FibGUgbm9kZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVW53cmFwIHRoZSBpbm5lciB2YWx1ZSBhbmQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLlxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciB0aGVuYWJsZSA9IG5ld0NoaWxkO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUodGhlbmFibGUpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVTbG90KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihyZXR1cm5GaWJlciwgY29udGV4dCwgbGFuZXMpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBuZXdJZHgsXG4gICAgICAgIG5ld0NoaWxkLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodHlwZW9mIG5ld0NoaWxkID09PSBcInN0cmluZ1wiICYmIG5ld0NoaWxkICE9PSBcIlwiKSB8fFxuICAgICAgICAgIHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJudW1iZXJcIlxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cywgc28gd2UgbmVpdGhlciBoYXZlIHRvIGNoZWNrIHRoZSBvbGQgbm9yXG4gICAgICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICAgICAgdmFyIG1hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG1hdGNoZWRGaWJlcixcbiAgICAgICAgICAgIFwiXCIgKyBuZXdDaGlsZCxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5nZXQoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICApIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6IHtcbiAgICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID1cbiAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICAgICkgfHwgbnVsbDtcblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbmV3Q2hpbGQuX3BheWxvYWQ7XG4gICAgICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIGluaXQocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgX21hdGNoZWRGaWJlcjMsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IC8vIFVzYWJsZSBub2RlIHR5cGVzXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBVbndyYXAgdGhlIGlubmVyIHZhbHVlIGFuZCByZWN1cnNpdmVseSBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uXG5cbiAgICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkLnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIHRoZW5hYmxlID0gbmV3Q2hpbGQ7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUodGhlbmFibGUpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24ocmV0dXJuRmliZXIsIGNvbnRleHQsIGxhbmVzKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBXYXJucyBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBvciBtaXNzaW5nIGtleVxuICAgICAgICovXG5cbiAgICAgIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09IFwib2JqZWN0XCIgfHwgY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShjaGlsZCwgcmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSBcIiArXG4gICAgICAgICAgICAgICAgICBcImFjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCDigJQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICBcImNvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlwiLFxuICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBjaGlsZC5fcGF5bG9hZDtcbiAgICAgICAgICAgICAgdmFyIGluaXQgPSBjaGlsZC5faW5pdDtcbiAgICAgICAgICAgICAgd2Fybk9uSW52YWxpZEtleShpbml0KHBheWxvYWQpLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtub3duS2V5cztcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZHJlbixcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGFsZ29yaXRobSBjYW4ndCBvcHRpbWl6ZSBieSBzZWFyY2hpbmcgZnJvbSBib3RoIGVuZHMgc2luY2Ugd2VcbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAgICAgLy8gd2l0aCB0aGF0IG1vZGVsLiBJZiBpdCBlbmRzIHVwIG5vdCBiZWluZyB3b3J0aCB0aGUgdHJhZGVvZmZzLCB3ZSBjYW5cbiAgICAgICAgLy8gYWRkIGl0IGxhdGVyLlxuICAgICAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgICAgIC8vIHdoZXJlIHRoZXJlIGFyZSBmZXcgY2hhbmdlcyBhbmQgYnJ1dGUgZm9yY2UgdGhlIGNvbXBhcmlzb24gaW5zdGVhZCBvZlxuICAgICAgICAvLyBnb2luZyBmb3IgdGhlIE1hcC4gSXQnZCBsaWtlIHRvIGV4cGxvcmUgaGl0dGluZyB0aGF0IHBhdGggZmlyc3QgaW5cbiAgICAgICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgICAgIC8vIGxvdHMgb2YgbG9vayBhaGVhZC4gVGhpcyBkb2Vzbid0IGhhbmRsZSByZXZlcnNhbCBhcyB3ZWxsIGFzIHR3byBlbmRlZFxuICAgICAgICAvLyBzZWFyY2ggYnV0IHRoYXQncyB1bnVzdWFsLiBCZXNpZGVzLCBmb3IgdGhlIHR3byBlbmRlZCBvcHRpbWl6YXRpb24gdG9cbiAgICAgICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgICAgICAvLyAoYWRkaW5nIGV2ZXJ5dGhpbmcgdG8gYSBNYXApIGluIGZvciBldmVyeSBpbnNlcnQvbW92ZS5cbiAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgICAgICAvLyB1c2VzIHRoZSBzYW1lIGFsZ29yaXRobS5cbiAgICAgICAge1xuICAgICAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgICAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICAgICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICAgICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcblxuICAgICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICAgICAgdmFyIF9uZXdGaWJlciA9IGNyZWF0ZUNoaWxkKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuICAgICAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICAgIHZhciBfbmV3RmliZXIyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAgICAgaWYgKF9uZXdGaWJlcjIuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShcbiAgICAgICAgICAgICAgICAgIF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGUsXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyByZWNvbmNpbGVDaGlsZHJlbkFycmF5KCksXG4gICAgICAgIC8vIGJ1dCB1c2luZyB0aGUgaXRlcmF0b3IgaW5zdGVhZC5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gXCIgK1xuICAgICAgICAgICAgICBcIlJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjk5NVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gXCJHZW5lcmF0b3JcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiBcIiArXG4gICAgICAgICAgICAgICAgICBcIllvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImBbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kIFwiICtcbiAgICAgICAgICAgICAgICAgIFwieW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgICAgIH0gLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgICB9IC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuICAgICAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICAgICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgICAgICAgdmFyIF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgICAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgICAgICBpZiAobmV3Q2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgICAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICAgICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgO1xuICAgICAgICAgIG9sZEZpYmVyICE9PSBudWxsICYmICFzdGVwLmRvbmU7XG4gICAgICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcblxuICAgICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICAgICAgaWYgKF9uZXdGaWJlcjMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMywgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cbiAgICAgICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChfbmV3RmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKFxuICAgICAgICAgICAgICAgICAgX25ld0ZpYmVyNC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXI0LmtleVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXI0LCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVRleHROb2RlKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIHRleHRDb250ZW50LFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayBmb3Iga2V5cyBvbiB0ZXh0IG5vZGVzIHNpbmNlIHdlIGRvbid0IGhhdmUgYVxuICAgICAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZCAhPT0gbnVsbCAmJiBjdXJyZW50Rmlyc3RDaGlsZC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG5vZGUgc28gbGV0J3MganVzdCB1cGRhdGUgaXQgYW5kIGRlbGV0ZVxuICAgICAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSAvLyBUaGUgZXhpc3RpbmcgZmlyc3QgY2hpbGQgaXMgbm90IGEgdGV4dCBub2RlIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgICAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlRWxlbWVudChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICAgICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnRUeXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IEZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8IC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjaGlsZCwgZWxlbWVudCkgfHwgLy8gTGF6eSB0eXBlcyBzaG91bGQgcmVjb25jaWxlIHRoZWlyIHJlc29sdmVkIHR5cGUuXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGFmdGVyIHRoZSBIb3QgUmVsb2FkaW5nIGNoZWNrIGFib3ZlLFxuICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaG90IHJlbG9hZGluZyBoYXMgZGlmZmVyZW50IHNlbWFudGljcyB0aGFuIHByb2QgYmVjYXVzZVxuICAgICAgICAgICAgICAgIC8vIGl0IGRvZXNuJ3QgcmVzdXNwZW5kLiBTbyB3ZSBjYW4ndCBsZXQgdGhlIGNhbGwgYmVsb3cgc3VzcGVuZC5cbiAgICAgICAgICAgICAgICAodHlwZW9mIGVsZW1lbnRUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICBlbGVtZW50VHlwZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgZWxlbWVudFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUxhenkoZWxlbWVudFR5cGUpID09PSBjaGlsZC50eXBlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gRGlkbid0IG1hdGNoLlxuXG4gICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgZWxlbWVudC5rZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIF9jcmVhdGVkNC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgcG9ydGFsLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIHZhciBrZXkgPSBwb3J0YWwua2V5O1xuICAgICAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiZcbiAgICAgICAgICAgICAgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmXG4gICAgICAgICAgICAgIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgIH0gLy8gVGhpcyBBUEkgd2lsbCB0YWcgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSByZWNvbmNpbGlhdGlvblxuICAgICAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAgICAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgICAgIC8vIElmIHRoZSB0b3AgbGV2ZWwgaXRlbSBpcyBhbiBhcnJheSwgd2UgdHJlYXQgaXQgYXMgYSBzZXQgb2YgY2hpbGRyZW4sXG4gICAgICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgICAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuICAgICAgICAvLyBIYW5kbGUgdG9wIGxldmVsIHVua2V5ZWQgZnJhZ21lbnRzIGFzIGlmIHRoZXkgd2VyZSBhcnJheXMuXG4gICAgICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAgICAgLy8gV2UgdHJlYXQgdGhlIGFtYmlndW91cyBjYXNlcyBhYm92ZSB0aGUgc2FtZS5cbiAgICAgICAgLy8gVE9ETzogTGV0J3MgdXNlIHJlY3Vyc2lvbiBsaWtlIHdlIGRvIGZvciBVc2FibGUgbm9kZXM/XG4gICAgICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID1cbiAgICAgICAgICB0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICBuZXdDaGlsZCAhPT0gbnVsbCAmJlxuICAgICAgICAgIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiZcbiAgICAgICAgICBuZXdDaGlsZC5rZXkgPT09IG51bGw7XG5cbiAgICAgICAgaWYgKGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgICAgICB9IC8vIEhhbmRsZSBvYmplY3QgdHlwZXNcblxuICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSBcIm9iamVjdFwiICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKFxuICAgICAgICAgICAgICAgIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQoXG4gICAgICAgICAgICAgICAgcmVjb25jaWxlU2luZ2xlUG9ydGFsKFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IG5ld0NoaWxkLl9wYXlsb2FkO1xuICAgICAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0OyAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIG5vbi1yZWN1cnNpdmUuXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIGluaXQocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IC8vIFVzYWJsZXMgYXJlIGEgdmFsaWQgUmVhY3Qgbm9kZSB0eXBlLiBXaGVuIFJlYWN0IGVuY291bnRlcnMgYSBVc2FibGUgaW5cbiAgICAgICAgICAvLyBhIGNoaWxkIHBvc2l0aW9uLCBpdCB1bndyYXBzIGl0IHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobSBhcyBgdXNlYC4gRm9yXG4gICAgICAgICAgLy8gZXhhbXBsZSwgZm9yIHByb21pc2VzLCBSZWFjdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiB0byB1bndpbmQgdGhlXG4gICAgICAgICAgLy8gc3RhY2ssIHRoZW4gcmVwbGF5IHRoZSBjb21wb25lbnQgb25jZSB0aGUgcHJvbWlzZSByZXNvbHZlcy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEEgZGlmZmVyZW5jZSBmcm9tIGB1c2VgIGlzIHRoYXQgUmVhY3Qgd2lsbCBrZWVwIHVud3JhcHBpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgLy8gdW50aWwgaXQgcmVhY2hlcyBhIG5vbi1Vc2FibGUgdHlwZS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIGUuZy4gVXNhYmxlPFVzYWJsZTxVc2FibGU8VD4+PiBzaG91bGQgcmVzb2x2ZSB0byBUXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgc3RydWN0dXJlIGlzIGEgYml0IHVuZm9ydHVuYXRlLiBJZGVhbGx5LCB3ZSBzaG91bGRuJ3QgbmVlZCB0b1xuICAgICAgICAgIC8vIHJlcGxheSB0aGUgZW50aXJlIGJlZ2luIHBoYXNlIG9mIHRoZSBwYXJlbnQgZmliZXIgaW4gb3JkZXIgdG8gcmVjb25jaWxlXG4gICAgICAgICAgLy8gdGhlIGNoaWxkcmVuIGFnYWluLiBUaGlzIHdvdWxkIHJlcXVpcmUgYSBzb21ld2hhdCBzaWduaWZpY2FudCByZWZhY3RvcixcbiAgICAgICAgICAvLyBiZWNhdXNlIHJlY29uY2lsYXRpb24gaGFwcGVucyBkZWVwIHdpdGhpbiB0aGUgYmVnaW4gcGhhc2UsIGFuZFxuICAgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB3b3JrLCBub3QgYWx3YXlzIGF0IHRoZSBlbmQuIFdlIHNob3VsZFxuICAgICAgICAgIC8vIGNvbnNpZGVyIGFzIGFuIGZ1dHVyZSBpbXByb3ZlbWVudC5cblxuICAgICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQudGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YXIgdGhlbmFibGUgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUodGhlbmFibGUpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKHJldHVybkZpYmVyLCBjb250ZXh0LCBsYW5lcyksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwic3RyaW5nXCIgJiYgbmV3Q2hpbGQgIT09IFwiXCIpIHx8XG4gICAgICAgICAgdHlwZW9mIG5ld0NoaWxkID09PSBcIm51bWJlclwiXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKFxuICAgICAgICAgICAgcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgXCJcIiArIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG4gICAgICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGluZGlyZWN0aW9uIG9ubHkgZXhpc3RzIHNvIHdlIGNhbiByZXNldCBgdGhlbmFibGVTdGF0ZWAgYXQgdGhlIGVuZC5cbiAgICAgICAgLy8gSXQgc2hvdWxkIGdldCBpbmxpbmVkIGJ5IENsb3N1cmUuXG4gICAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuICAgICAgICB2YXIgZmlyc3RDaGlsZEZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7IC8vIERvbid0IGJvdGhlciB0byByZXNldCBgdGhlbmFibGVJbmRleENvdW50ZXJgIHRvIDAgYmVjYXVzZSBpdCBhbHdheXMgZ2V0c1xuICAgICAgICAvLyBzZXQgYXQgdGhlIGJlZ2lubmluZy5cblxuICAgICAgICByZXR1cm4gZmlyc3RDaGlsZEZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnM7XG4gICAgfVxuXG4gICAgdmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xuICAgIHZhciBtb3VudENoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKGZhbHNlKTtcbiAgICBmdW5jdGlvbiByZXNldENoaWxkUmVjb25jaWxlck9uVW53aW5kKCkge1xuICAgICAgLy8gT24gdW53aW5kLCBjbGVhciBhbnkgcGVuZGluZyB0aGVuYWJsZXMgdGhhdCB3ZXJlIHVzZWQuXG4gICAgICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICBjdXJyZW50Q2hpbGQsXG4gICAgICAgIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHNcbiAgICAgICk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICAgICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICAgIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQuc2libGluZztcbiAgICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgY3VycmVudENoaWxkLFxuICAgICAgICAgIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xuICAgIH0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuICAgIGZ1bmN0aW9uIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gICAgICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3MoY2hpbGQsIGxhbmVzKTtcbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFRoaXMgaXNuJ3QgYmVpbmcgdXNlZCB5ZXQsIGJ1dCBpdCdzIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlXG4gICAgLy8gSW52aXNpYmxlUGFyZW50Q29udGV4dCB0aGF0IGlzIGN1cnJlbnRseSBtYW5hZ2VkIGJ5IFN1c3BlbnNlQ29udGV4dC5cblxuICAgIHZhciBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTm9MYW5lcyk7XG4gICAgZnVuY3Rpb24gcHVzaEhpZGRlbkNvbnRleHQoZmliZXIsIGNvbnRleHQpIHtcbiAgICAgIHZhciBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMgPSBnZXRFbnRhbmdsZWRSZW5kZXJMYW5lcygpO1xuICAgICAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcywgZmliZXIpO1xuICAgICAgcHVzaChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7IC8vIFdoZW4gcmVuZGVyaW5nIGEgc3VidHJlZSB0aGF0J3MgY3VycmVudGx5IGhpZGRlbiwgd2UgbXVzdCBpbmNsdWRlIGFsbFxuICAgICAgLy8gbGFuZXMgdGhhdCB3b3VsZCBoYXZlIHJlbmRlcmVkIGlmIHRoZSBoaWRkZW4gc3VidHJlZSBoYWRuJ3QgYmVlbiBkZWZlcnJlZC5cbiAgICAgIC8vIFRoYXQgaXMsIGluIG9yZGVyIHRvIHJldmVhbCBjb250ZW50IGZyb20gaGlkZGVuIC0+IHZpc2libGUsIHdlIG11c3QgY29tbWl0XG4gICAgICAvLyBhbGwgdGhlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHdoZW4gd2Ugb3JpZ2luYWxseSBoaWQgdGhlIHRyZWUuXG5cbiAgICAgIHNldEVudGFuZ2xlZFJlbmRlckxhbmVzKFxuICAgICAgICBtZXJnZUxhbmVzKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcywgY29udGV4dC5iYXNlTGFuZXMpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKGZpYmVyKSB7XG4gICAgICAvLyBUaGlzIHN1YnRyZWUgaXMgbm90IGN1cnJlbnRseSBoaWRkZW4sIHNvIHdlIGRvbid0IG5lZWQgdG8gYWRkIGFueSBsYW5lc1xuICAgICAgLy8gdG8gdGhlIHJlbmRlciBsYW5lcy4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gcHVzaCBzb21ldGhpbmcgdG8gYXZvaWQgYVxuICAgICAgLy8gY29udGV4dCBtaXNtYXRjaC4gUmV1c2UgdGhlIGV4aXN0aW5nIGNvbnRleHQgb24gdGhlIHN0YWNrLlxuICAgICAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGdldEVudGFuZ2xlZFJlbmRlckxhbmVzKCksIGZpYmVyKTtcbiAgICAgIHB1c2goXG4gICAgICAgIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsXG4gICAgICAgIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgZmliZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhpZGRlbkNvbnRleHQoZmliZXIpIHtcbiAgICAgIC8vIFJlc3RvcmUgdGhlIHByZXZpb3VzIHJlbmRlciBsYW5lcyBmcm9tIHRoZSBzdGFja1xuICAgICAgc2V0RW50YW5nbGVkUmVuZGVyTGFuZXMocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgcG9wKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDdXJyZW50VHJlZUhpZGRlbigpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IG51bGw7XG4gICAgfVxuXG4gICAgLy8gc3VzcGVuZHMsIGkuZS4gaXQncyB0aGUgbmVhcmVzdCBgY2F0Y2hgIGJsb2NrIG9uIHRoZSBzdGFjay5cblxuICAgIHZhciBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTsgLy8gUmVwcmVzZW50cyB0aGUgb3V0ZXJtb3N0IGJvdW5kYXJ5IHRoYXQgaXMgbm90IHZpc2libGUgaW4gdGhlIGN1cnJlbnQgdHJlZS5cbiAgICAvLyBFdmVyeXRoaW5nIGFib3ZlIHRoaXMgaXMgdGhlIFwic2hlbGxcIi4gV2hlbiB0aGlzIGlzIG51bGwsIGl0IG1lYW5zIHdlJ3JlXG4gICAgLy8gcmVuZGVyaW5nIGluIHRoZSBzaGVsbCBvZiB0aGUgYXBwLiBJZiBpdCdzIG5vbi1udWxsLCBpdCBtZWFucyB3ZSdyZSByZW5kZXJpbmdcbiAgICAvLyBkZWVwZXIgdGhhbiB0aGUgc2hlbGwsIGluc2lkZSBhIG5ldyB0cmVlIHRoYXQgd2Fzbid0IGFscmVhZHkgdmlzaWJsZS5cbiAgICAvL1xuICAgIC8vIFRoZSBtYWluIHdheSB3ZSB1c2UgdGhpcyBjb25jZXB0IGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHNob3dpbmcgYSBmYWxsYmFja1xuICAgIC8vIHdvdWxkIHJlc3VsdCBpbiBhIGRlc2lyYWJsZSBvciB1bmRlc2lyYWJsZSBsb2FkaW5nIHN0YXRlLiBBY3RpdmluZyBhIGZhbGxiYWNrXG4gICAgLy8gaW4gdGhlIHNoZWxsIGlzIGNvbnNpZGVyZWQgYW4gdW5kZXJzaXJhYmxlIGxvYWRpbmcgc3RhdGUsIGJlY2F1c2UgaXQgd291bGRcbiAgICAvLyBtZWFuIGhpZGluZyB2aXNpYmxlIChhbGJlaXQgc3RhbGUpIGNvbnRlbnQgaW4gdGhlIGN1cnJlbnQgdHJlZSDigJQgd2UgcHJlZmVyIHRvXG4gICAgLy8gc2hvdyB0aGUgc3RhbGUgY29udGVudCwgcmF0aGVyIHRoYW4gc3dpdGNoIHRvIGEgZmFsbGJhY2suIEJ1dCBzaG93aW5nIGFcbiAgICAvLyBmYWxsYmFjayBpbiBhIG5ldyB0cmVlIGlzIGZpbmUsIGJlY2F1c2UgdGhlcmUncyBubyBzdGFsZSBjb250ZW50IHRvXG4gICAgLy8gcHJlZmVyIGluc3RlYWQuXG5cbiAgICB2YXIgc2hlbGxCb3VuZGFyeSA9IG51bGw7XG4gICAgZnVuY3Rpb24gZ2V0U2hlbGxCb3VuZGFyeSgpIHtcbiAgICAgIHJldHVybiBzaGVsbEJvdW5kYXJ5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgLy8gVE9ETzogUGFzcyBhcyBhcmd1bWVudFxuICAgICAgdmFyIGN1cnJlbnQgPSBoYW5kbGVyLmFsdGVybmF0ZTtcbiAgICAgIC8vIHByb3BhZ2F0ZWQgYSBzaW5nbGUgbGV2ZWwuIEZvciBleGFtcGxlLCB3aGVuIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBpcyBzZXQsXG4gICAgICAvLyBpdCBzaG91bGQgb25seSBmb3JjZSB0aGUgbmVhcmVzdCBTdXNwZW5zZSBib3VuZGFyeSBpbnRvIGZhbGxiYWNrIG1vZGUuXG5cbiAgICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgICBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KVxuICAgICAgKTsgLy8gRXhwZXJpbWVudGFsIGZlYXR1cmU6IFNvbWUgU3VzcGVuc2UgYm91bmRhcmllcyBhcmUgbWFya2VkIGFzIGhhdmluZyBhblxuICAgICAgLy8gdG8gcHVzaCBhIG5lc3RlZCBTdXNwZW5zZSBoYW5kbGVyLCBiZWNhdXNlIGl0IHdpbGwgZ2V0IHJlcGxhY2VkIGJ5IHRoZVxuICAgICAgLy8gb3V0ZXIgZmFsbGJhY2ssIGFueXdheS4gQ29uc2lkZXIgdGhpcyBhcyBhIGZ1dHVyZSBvcHRpbWl6YXRpb24uXG5cbiAgICAgIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGhhbmRsZXIsIGhhbmRsZXIpO1xuXG4gICAgICBpZiAoc2hlbGxCb3VuZGFyeSA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBpc0N1cnJlbnRUcmVlSGlkZGVuKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIG5vdCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IFVJLlxuICAgICAgICAgIHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIHNob3dpbmcgYSBmYWxsYmFjayBpbiB0aGUgY3VycmVudCBVSS5cbiAgICAgICAgICAgIHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoRmFsbGJhY2tUcmVlU3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gICAgICAvLyBXZSdyZSBhYm91dCB0byByZW5kZXIgdGhlIGZhbGxiYWNrLiBJZiBzb21ldGhpbmcgaW4gdGhlIGZhbGxiYWNrIHN1c3BlbmRzLFxuICAgICAgLy8gaXQncyBha2luIHRvIHRocm93aW5nIGluc2lkZSBvZiBhIGBjYXRjaGAgYmxvY2suIFRoaXMgYm91bmRhcnkgc2hvdWxkIG5vdFxuICAgICAgLy8gY2FwdHVyZS4gUmV1c2UgdGhlIGV4aXN0aW5nIGhhbmRsZXIgb24gdGhlIHN0YWNrLlxuICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIEEgU3VzcGVuc2VMaXN0IGNvbnRleHQgaXMgb25seSBwdXNoZWQgaGVyZSB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc21hdGNoLlxuICAgICAgICAvLyBSZXVzZSB0aGUgY3VycmVudCB2YWx1ZSBvbiB0aGUgc3RhY2suXG4gICAgICAgIC8vIFRPRE86IFdlIGNhbiBhdm9pZCBuZWVkaW5nIHRvIHB1c2ggaGVyZSBieSBieSBmb3JraW5nIHBvcFN1c3BlbnNlSGFuZGxlclxuICAgICAgICAvLyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgU3VzcGVuc2UgYW5kIE9mZnNjcmVlbi5cbiAgICAgICAgcHVzaFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICAgIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG5cbiAgICAgICAgaWYgKHNoZWxsQm91bmRhcnkgIT09IG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGJvdW5kYXJ5IGluIHRoZSBzdGFjayB0aGF0J3MgYWxyZWFkeSBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIGEgZmFsbGJhY2suIFNvIGV2ZXJ5dGhpbmcgb3V0c2lkZSBpcyBjb25zaWRlcmVkIHRoZSBzaGVsbC5cbiAgICAgICAgICAgICAgc2hlbGxCb3VuZGFyeSA9IGZpYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIExlZ2FjeUhpZGRlbiBjb21wb25lbnQuXG4gICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayhmaWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayhmaWJlcikge1xuICAgICAgcHVzaFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBnZXRTdXNwZW5zZUhhbmRsZXIoKSwgZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5zZUhhbmRsZXIoKSB7XG4gICAgICByZXR1cm4gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wU3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gICAgICBwb3Aoc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcblxuICAgICAgaWYgKHNoZWxsQm91bmRhcnkgPT09IGZpYmVyKSB7XG4gICAgICAgIC8vIFBvcHBpbmcgYmFjayBpbnRvIHRoZSBzaGVsbC5cbiAgICAgICAgc2hlbGxCb3VuZGFyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHBvcFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIpO1xuICAgIH0gLy8gU3VzcGVuc2VMaXN0IGNvbnRleHRcbiAgICAvLyBUT0RPOiBNb3ZlIHRvIGEgc2VwYXJhdGUgbW9kdWxlPyBXZSBtYXkgY2hhbmdlIHRoZSBTdXNwZW5zZUxpc3RcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiB0byBoaWRlL3Nob3cgaW4gdGhlIGNvbW1pdCBwaGFzZSwgYW55d2F5LlxuXG4gICAgdmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwO1xuICAgIHZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBjYW4gYmUgdXNlZCBieSBTdXNwZW5zZUxpc3QgdG8gZm9yY2UgbmV3bHkgYWRkZWRcbiAgICAvLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbiAgICB2YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbiAgICB2YXIgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihEZWZhdWx0U3VzcGVuc2VDb250ZXh0KTtcbiAgICBmdW5jdGlvbiBoYXNTdXNwZW5zZUxpc3RDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgICAgIHJldHVybiAocGFyZW50Q29udGV4dCAmIGZsYWcpICE9PSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgICAgIHJldHVybiAocGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSB8IHNoYWxsb3dDb250ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoU3VzcGVuc2VMaXN0Q29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIpIHtcbiAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuXG4gICAgLy8gQSBub24tbnVsbCBTdXNwZW5zZVN0YXRlIG1lYW5zIHRoYXQgaXQgaXMgYmxvY2tlZCBmb3Igb25lIHJlYXNvbiBvciBhbm90aGVyLlxuICAgIC8vIC0gQSBub24tbnVsbCBkZWh5ZHJhdGVkIGZpZWxkIG1lYW5zIGl0J3MgYmxvY2tlZCBwZW5kaW5nIGh5ZHJhdGlvbi5cbiAgICAvLyAgIC0gQSBub24tbnVsbCBkZWh5ZHJhdGVkIGZpZWxkIGNhbiB1c2UgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyBvclxuICAgIC8vICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayB0byBxdWVyeSB0aGUgcmVhc29uIGZvciBiZWluZyBkZWh5ZHJhdGVkLlxuICAgIC8vIC0gQSBudWxsIGRlaHlkcmF0ZWQgZmllbGQgbWVhbnMgaXQncyBibG9ja2VkIGJ5IHNvbWV0aGluZyBzdXNwZW5kaW5nIGFuZFxuICAgIC8vICAgd2UncmUgY3VycmVudGx5IHNob3dpbmcgYSBmYWxsYmFjayBpbnN0ZWFkLlxuXG4gICAgZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICAgICAgdmFyIG5vZGUgPSByb3c7XG5cbiAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkZWh5ZHJhdGVkID09PSBudWxsIHx8XG4gICAgICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoKSB8fFxuICAgICAgICAgICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjaygpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQgJiYgLy8gcmV2ZWFsT3JkZXIgdW5kZWZpbmVkIGNhbid0IGJlIHRydXN0ZWQgYmVjYXVzZSBpdCBkb24ndFxuICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpdCBzdXNwZW5kZWQgb3Igbm90LlxuICAgICAgICAgIG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHJvdykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBOb0ZsYWdzID1cbiAgICAgIC8qICAgKi9cbiAgICAgIDA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbiAgICB2YXIgSGFzRWZmZWN0ID1cbiAgICAgIC8qICovXG4gICAgICAxOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxuICAgIHZhciBJbnNlcnRpb24gPVxuICAgICAgLyogKi9cbiAgICAgIDI7XG4gICAgdmFyIExheW91dCA9XG4gICAgICAvKiAgICAqL1xuICAgICAgNDtcbiAgICB2YXIgUGFzc2l2ZSA9XG4gICAgICAvKiAgICovXG4gICAgICA4O1xuXG4gICAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG4gICAgdmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcbiAgICB2YXIgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3Q7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoO1xuICAgIHZhciBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudDtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICAgIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoID0gbmV3IFNldCgpO1xuICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgfSAvLyBUaGUgZWZmZWN0IFwiaW5zdGFuY2VcIiBpcyBhIHNoYXJlZCBvYmplY3QgdGhhdCByZW1haW5zIHRoZSBzYW1lIGZvciB0aGUgZW50aXJlXG4gICAgLy8gbGlmZXRpbWUgb2YgYW4gZWZmZWN0LiBJbiBSdXN0IHRlcm1zLCBhIFJlZkNlbGwuIFdlIHVzZSBpdCB0byBzdG9yZSB0aGVcbiAgICAvLyBcImRlc3Ryb3lcIiBmdW5jdGlvbiB0aGF0IGlzIHJldHVybmVkIGZyb20gYW4gZWZmZWN0LCBiZWNhdXNlIHRoYXQgaXMgc3RhdGVmdWwuXG4gICAgLy8gVGhlIGZpZWxkIGlzIGB1bmRlZmluZWRgIGlmIHRoZSBlZmZlY3QgaXMgdW5tb3VudGVkLCBvciBpZiB0aGUgZWZmZWN0IHJhblxuICAgIC8vIGJ1dCBpcyBub3Qgc3RhdGVmdWwuIFdlIGRvbid0IGV4cGxpY2l0bHkgdHJhY2sgd2hldGhlciB0aGUgZWZmZWN0IGlzIG1vdW50ZWRcbiAgICAvLyBvciB1bm1vdW50ZWQgYmVjYXVzZSB0aGF0IGNhbiBiZSBpbmZlcnJlZCBieSB0aGUgaGlkZGVubmVzcyBvZiB0aGUgZmliZXIgaW5cbiAgICAvLyB0aGUgdHJlZSwgaS5lLiB3aGV0aGVyIHRoZXJlIGlzIGEgaGlkZGVuIE9mZnNjcmVlbiBmaWJlciBhYm92ZSBpdC5cbiAgICAvL1xuICAgIC8vIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB0aGlzIGlzIHN0b3JlZCBvbiBhIHNlcGFyYXRlIG9iamVjdCwgYmVjYXVzZSBpdCBhZGRzXG4gICAgLy8gbW9yZSBtZW1vcnkgcGVyIGVmZmVjdCBpbnN0YW5jZSwgYnV0IGl0J3MgY29uY2VwdHVhbGx5IHNvdW5kLiBJIHRoaW5rIHRoZXJlJ3NcbiAgICAvLyBsaWtlbHkgYSBiZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUgd2UgY291bGQgdXNlIGZvciBlZmZlY3RzOyBwZXJoYXBzIGp1c3Qgb25lXG4gICAgLy8gYXJyYXkgb2YgZWZmZWN0IGluc3RhbmNlcyBwZXIgZmliZXIuIEJ1dCBJIHRoaW5rIHRoaXMgaXMgT0sgZm9yIG5vdyBkZXNwaXRlXG4gICAgLy8gdGhlIGFkZGl0aW9uYWwgbWVtb3J5IGFuZCB3ZSBjYW4gZm9sbG93IHVwIHdpdGggcGVyZm9ybWFuY2VcbiAgICAvLyBvcHRpbWl6YXRpb25zIGxhdGVyLlxuICAgIC8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cblxuICAgIHZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbiAgICAvLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG4gICAgdmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsOyAvLyBIb29rcyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIGZpYmVyJ3MgbWVtb2l6ZWRTdGF0ZSBmaWVsZC4gVGhlXG4gICAgLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbiAgICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgICAvLyB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDsgLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXNcbiAgICAvLyBkb2VzIG5vdCBnZXQgcmVzZXQgaWYgd2UgZG8gYW5vdGhlciByZW5kZXIgcGFzczsgb25seSB3aGVuIHdlJ3JlIGNvbXBsZXRlbHlcbiAgICAvLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4gICAgLy8gd2hldGhlciB3ZSBuZWVkIHRvIGNsZWFyIHJlbmRlciBwaGFzZSB1cGRhdGVzIGFmdGVyIGEgdGhyb3cuXG5cbiAgICB2YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBXaGVyZSBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbmx5IGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcy4gVGhpc1xuICAgIC8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3Mgc29tZSB3YXkgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoXG4gICAgLy8gYGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVgLiBPciB3aXRoIGBudW1iZXJPZlJlUmVuZGVyc2AuXG5cbiAgICB2YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG4gICAgdmFyIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gZmFsc2U7IC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIHVzZUlkIGhvb2tzIGluIHRoaXMgY29tcG9uZW50LlxuXG4gICAgdmFyIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICB2YXIgdGhlbmFibGVTdGF0ZSA9IG51bGw7IC8vIFVzZWQgZm9yIGlkcyB0aGF0IGFyZSBnZW5lcmF0ZWQgY29tcGxldGVseSBjbGllbnQtc2lkZSAoaS5lLiBub3QgZHVyaW5nXG4gICAgLy8gaHlkcmF0aW9uKS4gVGhpcyBjb3VudGVyIGlzIGdsb2JhbCwgc28gY2xpZW50IGlkcyBhcmUgbm90IHN0YWJsZSBhY3Jvc3NcbiAgICAvLyByZW5kZXIgYXR0ZW1wdHMuXG5cbiAgICB2YXIgZ2xvYmFsQ2xpZW50SWRDb3VudGVyID0gMDtcbiAgICB2YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG4gICAgdmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuICAgIC8vIFRoZSBsaXN0IHN0b3JlcyB0aGUgb3JkZXIgb2YgaG9va3MgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmVuZGVyIChtb3VudCkuXG4gICAgLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG4gICAgdmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgdmFyIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIEluIERFViwgdGhpcyB0cmFja3Mgd2hldGhlciBjdXJyZW50bHkgcmVuZGVyaW5nIGNvbXBvbmVudCBuZWVkcyB0byBpZ25vcmVcbiAgICAvLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4gICAgLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxuICAgIHZhciBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2Kys7XG5cbiAgICAgICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChkZXBzICE9PSB1bmRlZmluZWQgJiYgZGVwcyAhPT0gbnVsbCAmJiAhaXNBcnJheShkZXBzKSkge1xuICAgICAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgdGhhdCBpcyBub3QgYW4gYXJyYXkgKGluc3RlYWQsIHJlY2VpdmVkIGAlc2ApLiBXaGVuIFwiICtcbiAgICAgICAgICAgICAgXCJzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LlwiLFxuICAgICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYsXG4gICAgICAgICAgICB0eXBlb2YgZGVwc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihjdXJyZW50SG9va05hbWUpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKFxuICAgICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDFcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHRhYmxlID0gXCJcIjtcbiAgICAgICAgICAgIHZhciBzZWNvbmRDb2x1bW5TdGFydCA9IDMwO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICAgICAgdmFyIG5ld0hvb2tOYW1lID1cbiAgICAgICAgICAgICAgICBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgICAgICB2YXIgcm93ID0gaSArIDEgKyBcIi4gXCIgKyBvbGRIb29rTmFtZTsgLy8gRXh0cmEgc3BhY2Ugc28gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cFxuICAgICAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgICAgIHJvdyArPSBcIiBcIjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArIFwiXFxuXCI7XG4gICAgICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuIFwiICtcbiAgICAgICAgICAgICAgICBcIkZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG5cIiArXG4gICAgICAgICAgICAgICAgXCIgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cIiArXG4gICAgICAgICAgICAgICAgXCIlc1wiICtcbiAgICAgICAgICAgICAgICBcIiAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcblwiLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICB0YWJsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuSWZBc3luY0NsaWVudENvbXBvbmVudChDb21wb25lbnQpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gVGhpcyBkZXYtb25seSBjaGVjayBvbmx5IHdvcmtzIGZvciBkZXRlY3RpbmcgbmF0aXZlIGFzeW5jIGZ1bmN0aW9ucyxcbiAgICAgICAgLy8gbm90IHRyYW5zcGlsZWQgb25lcy4gVGhlcmUncyBhbHNvIGEgcHJvZCBjaGVjayB0aGF0IHdlIHVzZSB0byBwcmV2ZW50XG4gICAgICAgIC8vIGFzeW5jIGNsaWVudCBjb21wb25lbnRzIGZyb20gY3Jhc2hpbmcgdGhlIGFwcDsgdGhlIHByb2Qgb25lIHdvcmtzIGV2ZW5cbiAgICAgICAgLy8gZm9yIHRyYW5zcGlsZWQgYXN5bmMgZnVuY3Rpb25zLiBOZWl0aGVyIG1lY2hhbmlzbSBpcyBjb21wbGV0ZWx5XG4gICAgICAgIC8vIGJ1bGxldHByb29mIGJ1dCB0b2dldGhlciB0aGV5IGNvdmVyIHRoZSBtb3N0IGNvbW1vbiBjYXNlcy5cbiAgICAgICAgdmFyIGlzQXN5bmNGdW5jdGlvbiA9IC8vICRGbG93SWdub3JlW21ldGhvZC11bmJpbmRpbmddXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENvbXBvbmVudCkgPT09XG4gICAgICAgICAgXCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCI7XG5cbiAgICAgICAgaWYgKGlzQXN5bmNGdW5jdGlvbikge1xuICAgICAgICAgIC8vIEVuY291bnRlcmVkIGFuIGFzeW5jIENsaWVudCBDb21wb25lbnQuIFRoaXMgaXMgbm90IHlldCBzdXBwb3J0ZWQuXG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKFxuICAgICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJhc3luYy9hd2FpdCBpcyBub3QgeWV0IHN1cHBvcnRlZCBpbiBDbGllbnQgQ29tcG9uZW50cywgb25seSBcIiArXG4gICAgICAgICAgICAgICAgXCJTZXJ2ZXIgQ29tcG9uZW50cy4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IFwiICtcbiAgICAgICAgICAgICAgICBcImFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gXCIgK1xuICAgICAgICAgICAgICAgIFwiZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3JcIiArXG4gICAgICAgICAgXCIgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG5cIiArXG4gICAgICAgICAgXCIxLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG5cIiArXG4gICAgICAgICAgXCIyLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuXCIgK1xuICAgICAgICAgIFwiMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblwiICtcbiAgICAgICAgICBcIlNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgLy8gT25seSB0cnVlIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgYmVpbmcgaG90IHJlbG9hZGVkLlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCIlcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgXCIgK1xuICAgICAgICAgICAgICBcInRoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgXCIgK1xuICAgICAgICAgICAgICBcIml0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLlwiLFxuICAgICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXZcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgICAgICAvLyBwYXNzZWQgaW5saW5lLlxuICAgICAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgXCIgK1xuICAgICAgICAgICAgICBcIm9yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBcIlByZXZpb3VzOiAlc1xcblwiICtcbiAgICAgICAgICAgICAgXCJJbmNvbWluZzogJXNcIixcbiAgICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2LFxuICAgICAgICAgICAgXCJbXCIgKyBwcmV2RGVwcy5qb2luKFwiLCBcIikgKyBcIl1cIixcbiAgICAgICAgICAgIFwiW1wiICsgbmV4dERlcHMuam9pbihcIiwgXCIpICsgXCJdXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgIGlmIChvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgc2Vjb25kQXJnLFxuICAgICAgbmV4dFJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgICAge1xuICAgICAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID1cbiAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgd2FybklmQXN5bmNDbGllbnRDb21wb25lbnQoQ29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0XG4gICAgICAvLyBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgLy8gbG9jYWxJZENvdW50ZXIgPSAwO1xuICAgICAgLy8gdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgLy8gdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gICAgICAvLyBDdXJyZW50bHkgd2Ugd2lsbCBpZGVudGlmeSB0aGUgdXBkYXRlIHJlbmRlciBhcyBhIG1vdW50IGJlY2F1c2UgbWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbC5cbiAgICAgIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gICAgICAvLyBVc2luZyBtZW1vaXplZFN0YXRlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb3VudC91cGRhdGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgc3RhdGVmdWwgaG9vayBpcyB1c2VkLlxuICAgICAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAgICAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBoYW5kbGVzIGFuIGVkZ2UgY2FzZSB3aGVyZSBhIGNvbXBvbmVudCBpcyB1cGRhdGluZyxcbiAgICAgICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgICAgICAvLyBidXQgd2l0aCB0aGUgZXh0cmEgREVWIHZhbGlkYXRpb24gdG8gZW5zdXJlIGhvb2tzIG9yZGVyaW5nIGhhc24ndCBjaGFuZ2VkLlxuICAgICAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBJbiBTdHJpY3QgTW9kZSwgZHVyaW5nIGRldmVsb3BtZW50LCB1c2VyIGZ1bmN0aW9ucyBhcmUgZG91YmxlIGludm9rZWQgdG9cbiAgICAgIC8vIGhlbHAgZGV0ZWN0IHNpZGUgZWZmZWN0cy4gVGhlIGxvZ2ljIGZvciBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZCBmb3IgaW5cbiAgICAgIC8vIGhvb2sgY29tcG9uZW50cyBpcyBhIGJpdCBjb21wbGV4IHNvIGxldCdzIGJyZWFrIGl0IGRvd24uXG4gICAgICAvL1xuICAgICAgLy8gV2Ugd2lsbCBpbnZva2UgdGhlIGVudGlyZSBjb21wb25lbnQgZnVuY3Rpb24gdHdpY2UuIEhvd2V2ZXIsIGR1cmluZyB0aGVcbiAgICAgIC8vIHNlY29uZCBpbnZvY2F0aW9uIG9mIHRoZSBjb21wb25lbnQsIHRoZSBob29rIHN0YXRlIGZyb20gdGhlIGZpcnN0XG4gICAgICAvLyBpbnZvY2F0aW9uIHdpbGwgYmUgcmV1c2VkLiBUaGF0IG1lYW5zIHRoaW5ncyBsaWtlIGB1c2VNZW1vYCBmdW5jdGlvbnMgd29uJ3RcbiAgICAgIC8vIHJ1biBhZ2FpbiwgYmVjYXVzZSB0aGUgZGVwcyB3aWxsIG1hdGNoIGFuZCB0aGUgbWVtb2l6ZWQgcmVzdWx0IHdpbGxcbiAgICAgIC8vIGJlIHJldXNlZC5cbiAgICAgIC8vXG4gICAgICAvLyBXZSB3YW50IG1lbW9pemVkIGZ1bmN0aW9ucyB0byBydW4gdHdpY2UsIHRvbywgc28gYWNjb3VudCBmb3IgdGhpcywgdXNlclxuICAgICAgLy8gZnVuY3Rpb25zIGFyZSBkb3VibGUgaW52b2tlZCBkdXJpbmcgdGhlICpmaXJzdCogaW52b2NhdGlvbiBvZiB0aGUgY29tcG9uZW50XG4gICAgICAvLyBmdW5jdGlvbiwgYW5kIGFyZSAqbm90KiBkb3VibGUgaW52b2tlZCBkdXJpbmcgdGhlIHNlY29uZCBpbmNvdmF0aW9uOlxuICAgICAgLy9cbiAgICAgIC8vIC0gRmlyc3QgZXhlY3V0aW9uIG9mIGNvbXBvbmVudCBmdW5jdGlvbjogdXNlciBmdW5jdGlvbnMgYXJlIGRvdWJsZSBpbnZva2VkXG4gICAgICAvLyAtIFNlY29uZCBleGVjdXRpb24gb2YgY29tcG9uZW50IGZ1bmN0aW9uIChpbiBTdHJpY3QgTW9kZSwgZHVyaW5nXG4gICAgICAvLyAgIGRldmVsb3BtZW50KTogdXNlciBmdW5jdGlvbnMgYXJlIG5vdCBkb3VibGUgaW52b2tlZC5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsIGZvciBhIGZldyByZWFzb25zOyBtb3N0IGltcG9ydGFudGx5LCBpdCdzIGJlY2F1c2Ugb2ZcbiAgICAgIC8vIGhvdyBgdXNlYCB3b3JrcyB3aGVuIHNvbWV0aGluZyBzdXNwZW5kczogaXQgcmV1c2VzIHRoZSBwcm9taXNlIHRoYXQgd2FzXG4gICAgICAvLyBwYXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBhdHRlbXB0LiBUaGlzIGlzIGl0c2VsZiBhIGZvcm0gb2YgbWVtb2l6YXRpb24uXG4gICAgICAvLyBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbWVtb2l6ZSB0aGUgcmVhY3RpdmUgaW5wdXRzIHRvIHRoZSBgdXNlYCBjYWxsIHVzaW5nXG4gICAgICAvLyBhIGhvb2sgKGkuZS4gYHVzZU1lbW9gKSwgd2hpY2ggbWVhbnMsIHRoZSByZWFjdGl2ZSBpbnB1dHMgdG8gYHVzZWAgbXVzdFxuICAgICAgLy8gY29tZSBmcm9tIHRoZSBzYW1lIGNvbXBvbmVudCBpbnZvY2F0aW9uIGFzIHRoZSBvdXRwdXQuXG4gICAgICAvL1xuICAgICAgLy8gVGhlcmUgYXJlIHBsZW50eSBvZiB0ZXN0cyB0byBlbnN1cmUgdGhpcyBiZWhhdmlvciBpcyBjb3JyZWN0LlxuXG4gICAgICB2YXIgc2hvdWxkRG91YmxlUmVuZGVyREVWID1cbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSBzaG91bGREb3VibGVSZW5kZXJERVY7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9IGZhbHNlOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlXG5cbiAgICAgIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAgICAgLy8gS2VlcCByZW5kZXJpbmcgdW50aWwgdGhlIGNvbXBvbmVudCBzdGFiaWxpemVzICh0aGVyZSBhcmUgbm8gbW9yZSByZW5kZXJcbiAgICAgICAgLy8gcGhhc2UgdXBkYXRlcykuXG4gICAgICAgIGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkRG91YmxlUmVuZGVyREVWKSB7XG4gICAgICAgIC8vIEluIGRldmVsb3BtZW50LCBjb21wb25lbnRzIGFyZSBpbnZva2VkIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUgZWZmZWN0cy5cbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgICAgIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAgICAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmNlLlxuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjsgLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gICAgICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuICAgICAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID1cbiAgICAgICAgY3VycmVudEhvb2sgIT09IG51bGwgJiYgY3VycmVudEhvb2submV4dCAhPT0gbnVsbDtcbiAgICAgIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIENvbmZpcm0gdGhhdCBhIHN0YXRpYyBmbGFnIHdhcyBub3QgYWRkZWQgb3IgcmVtb3ZlZCBzaW5jZSB0aGUgbGFzdFxuICAgICAgICAvLyByZW5kZXIuIElmIHRoaXMgZmlyZXMsIGl0IHN1Z2dlc3RzIHRoYXQgd2UgaW5jb3JyZWN0bHkgcmVzZXQgdGhlIHN0YXRpY1xuICAgICAgICAvLyBmbGFncyBpbiBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBUaGlzIGhhcyBoYXBwZW5lZCBiZWZvcmUsIGZvclxuICAgICAgICAvLyBleGFtcGxlLCBpbiB0aGUgU3VzcGVuc2VMaXN0IGltcGxlbWVudGF0aW9uLlxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmXG4gICAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiBTdGF0aWNNYXNrKSAhPT1cbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIFN0YXRpY01hc2spICYmIC8vIERpc2FibGUgdGhpcyB3YXJuaW5nIGluIGxlZ2FjeSBtb2RlLCBiZWNhdXNlIGxlZ2FjeSBTdXNwZW5zZSBpcyB3ZWlyZFxuICAgICAgICAgIC8vIGFuZCBjcmVhdGVzIGZhbHNlIHBvc2l0aXZlcy4gVG8gbWFrZSB0aGlzIHdvcmsgaW4gbGVnYWN5IG1vZGUsIHdlJ2RcbiAgICAgICAgICAvLyBuZWVkIHRvIG1hcmsgZmliZXJzIHRoYXQgY29tbWl0IGluIGFuIGluY29tcGxldGUgc3RhdGUsIHNvbWVob3cuIEZvclxuICAgICAgICAgIC8vIG5vdyBJJ2xsIGRpc2FibGUgdGhlIHdhcm5pbmcgdGhhdCBtb3N0IG9mIHRoZSBidWdzIHRoYXQgd291bGQgdHJpZ2dlclxuICAgICAgICAgIC8vIGl0IGFyZSBlaXRoZXIgZXhjbHVzaXZlIHRvIGNvbmN1cnJlbnQgbW9kZSBvciBleGlzdCBpbiBib3RoLlxuICAgICAgICAgIChjdXJyZW50Lm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZVxuICAgICAgICApIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEV4cGVjdGVkIHN0YXRpYyBmbGFnIHdhcyBtaXNzaW5nLiBQbGVhc2UgXCIgK1xuICAgICAgICAgICAgICBcIm5vdGlmeSB0aGUgUmVhY3QgdGVhbS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGlzIGlzIHJlc2V0IGJ5IGNoZWNrRGlkUmVuZGVySWRIb29rXG4gICAgICAvLyBsb2NhbElkQ291bnRlciA9IDA7XG5cbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgXCIgK1xuICAgICAgICAgICAgXCJlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGNoZWNrSWZVc2VXcmFwcGVkSW5UcnlDYXRjaCgpKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPVxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJVbmtub3duXCI7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZGlkV2FybkFib3V0VXNlV3JhcHBlZEluVHJ5Q2F0Y2guaGFzKGNvbXBvbmVudE5hbWUpICYmIC8vIFRoaXMgd2FybmluZyBhbHNvIGZpcmVzIGlmIHlvdSBzdXNwZW5kIHdpdGggYHVzZWAgaW5zaWRlIGFuXG4gICAgICAgICAgICAvLyBhc3luYyBjb21wb25lbnQuIFNpbmNlIHdlIHdhcm4gZm9yIHRoYXQgYWJvdmUsIHdlJ2xsIHNpbGVuY2UgdGhpc1xuICAgICAgICAgICAgLy8gc2Vjb25kIHdhcm5pbmcgYnkgY2hlY2tpbmcgaGVyZS5cbiAgICAgICAgICAgICFkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiYHVzZWAgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIHRyeS9jYXRjaCBibG9jay4gVGhpcyBpcyBub3QgYWxsb3dlZCBcIiArXG4gICAgICAgICAgICAgICAgXCJhbmQgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gVG8gaGFuZGxlIGVycm9ycyB0cmlnZ2VyZWQgXCIgK1xuICAgICAgICAgICAgICAgIFwiYnkgYHVzZWAsIHdyYXAgeW91ciBjb21wb25lbnQgaW4gYSBlcnJvciBib3VuZGFyeS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYXlTdXNwZW5kZWRDb21wb25lbnRXaXRoSG9va3MoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBwcm9wcyxcbiAgICAgIHNlY29uZEFyZ1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlcGxheSBhIGNvbXBvbmVudCB0aGF0IHByZXZpb3VzbHkgc3VzcGVuZGVkLFxuICAgICAgLy8gYWZ0ZXIgaXRzIGRhdGEgcmVzb2x2ZXMuXG4gICAgICAvL1xuICAgICAgLy8gSXQncyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiByZW5kZXJXaXRoSG9va3MsIGJ1dCBpdCBkb2Vzbid0IG5lZWQgdG8gZG9cbiAgICAgIC8vIG1vc3Qgb2YgdGhlIHNldCB1cCB3b3JrIGJlY2F1c2UgdGhleSB3ZXJlbid0IHJlc2V0IHdoZW4gd2Ugc3VzcGVuZGVkOyB0aGV5XG4gICAgICAvLyBvbmx5IGdldCByZXNldCB3aGVuIHRoZSBjb21wb25lbnQgZWl0aGVyIGNvbXBsZXRlcyAoZmluaXNoUmVuZGVyaW5nSG9va3MpXG4gICAgICAvLyBvciB1bndpbmRzIChyZXNldEhvb2tzT25VbndpbmQpLlxuICAgICAge1xuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID1cbiAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHByb3BzLFxuICAgICAgICBzZWNvbmRBcmdcbiAgICAgICk7XG4gICAgICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzQWdhaW4od29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZykge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIHBlcmZvcm0gYW5vdGhlciByZW5kZXIgcGFzcy4gSXQncyB1c2VkIHdoZW4gc2V0U3RhdGUgaXNcbiAgICAgIC8vIGNhbGxlZCBkdXJpbmcgcmVuZGVyLCBhbmQgZm9yIGRvdWJsZSBpbnZva2luZyBjb21wb25lbnRzIGluIFN0cmljdCBNb2RlXG4gICAgICAvLyBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIHBhc3MgaXMgcmV1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLiBTbywgc3RhdGVcbiAgICAgIC8vIHVwZGF0ZXMgdGhhdCB3ZXJlIGFscmVhZHkgcHJvY2Vzc2VkIGFyZSBub3QgcHJvY2Vzc2VkIGFnYWluLCBhbmQgbWVtb2l6ZWRcbiAgICAgIC8vIGZ1bmN0aW9ucyAoYHVzZU1lbW9gKSBhcmUgbm90IGludm9rZWQgYWdhaW4uXG4gICAgICAvL1xuICAgICAgLy8gS2VlcCByZW5kZXJpbmcgaW4gYSBsb29wIGZvciBhcyBsb25nIGFzIHJlbmRlciBwaGFzZSB1cGRhdGVzIGNvbnRpbnVlIHRvXG4gICAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG4gICAgICB2YXIgY2hpbGRyZW47XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcykge1xuICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBhIHVzZSgpIHZhbHVlIGRlcGVuZGVkIG9uIGEgc3RhdGUgdGhhdCB3YXMgdXBkYXRlZCBpblxuICAgICAgICAgIC8vIHRoaXMgcmVyZW5kZXIsIHNvIHdlIG5lZWQgdG8gd2F0Y2ggZm9yIGRpZmZlcmVudCB0aGVuYWJsZXMgdGhpcyB0aW1lLlxuICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcblxuICAgICAgICBpZiAobnVtYmVyT2ZSZVJlbmRlcnMgPj0gUkVfUkVOREVSX0xJTUlUKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgXCIgK1xuICAgICAgICAgICAgICBcImFuIGluZmluaXRlIGxvb3AuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcblxuICAgICAgICB7XG4gICAgICAgICAgLy8gRXZlbiB3aGVuIGhvdCByZWxvYWRpbmcsIGFsbG93IGRlcGVuZGVuY2llcyB0byBzdGFiaWxpemVcbiAgICAgICAgICAvLyBhZnRlciBmaXJzdCByZW5kZXIgdG8gcHJldmVudCBpbmZpbml0ZSByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgICB9IC8vIFN0YXJ0IG92ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cbiAgICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIEFsc28gdmFsaWRhdGUgaG9vayBvcmRlciBmb3IgY2FzY2FkaW5nIHVwZGF0ZXMuXG4gICAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG5cbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBmbGFncyBoZXJlLCBiZWNhdXNlIHRoZXkncmUgcmVzZXQgaW4gdGhlXG4gICAgICAvLyBjb21wbGV0ZSBwaGFzZSAoYnViYmxlUHJvcGVydGllcykuXG5cbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oXG4gICAgICAgICAgTW91bnRQYXNzaXZlRGV2IHxcbiAgICAgICAgICBNb3VudExheW91dERldiB8XG4gICAgICAgICAgUGFzc2l2ZSQxIHxcbiAgICAgICAgICBVcGRhdGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oUGFzc2l2ZSQxIHwgVXBkYXRlKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gICAgICAvLyBUaGlzIGlzIGNhbGxlZCBpbW1lZGlhZXRseSBhZnRlciBhIHRocm93LiBJdCBzaG91bGRuJ3QgcmVzZXQgdGhlIGVudGlyZVxuICAgICAgLy8gbW9kdWxlIHN0YXRlLCBiZWNhdXNlIHRoZSB3b3JrIGxvb3AgbWlnaHQgZGVjaWRlIHRvIHJlcGxheSB0aGUgY29tcG9uZW50XG4gICAgICAvLyBhZ2FpbiB3aXRob3V0IHJld2luZGluZy5cbiAgICAgIC8vXG4gICAgICAvLyBJdCBzaG91bGQgb25seSByZXNldCB0aGluZ3MgbGlrZSB0aGUgY3VycmVudCBkaXNwYXRjaGVyLCB0byBwcmV2ZW50IGhvb2tzXG4gICAgICAvLyBmcm9tIGJlaW5nIGNhbGxlZCBvdXRzaWRlIG9mIGEgY29tcG9uZW50LlxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgICAgIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jZS5cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0SG9va3NPblVud2luZCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAgICAgLy8gVGhlcmUgd2VyZSByZW5kZXIgcGhhc2UgdXBkYXRlcy4gVGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIHRoaXMgcmVuZGVyXG4gICAgICAgIC8vIHBoYXNlLCB3aGljaCB3ZSBhcmUgbm93IGFib3J0aW5nLiBSZW1vdmUgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWVzIHNvXG4gICAgICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgcHJvY2Vzc2VkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgICAgIC8vIG5vdCBoYXZlIGEgY2xvbmUsIHRoYXQgbWVhbnMgaXQgd2Fzbid0IHByb2Nlc3NlZCwgYW5kIHRoZSB1cGRhdGVzIHdlcmVcbiAgICAgICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIHZhciBob29rID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICB3aGlsZSAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhvb2sgPSBob29rLm5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gICAgICB2YXIgaG9vayA9IHtcbiAgICAgICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICAgICAgYmFzZVN0YXRlOiBudWxsLFxuICAgICAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgICAgIHF1ZXVlOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYm90aCBmb3IgdXBkYXRlcyBhbmQgZm9yIHJlLXJlbmRlcnMgdHJpZ2dlcmVkIGJ5IGFcbiAgICAgIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAgICAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAgICAgLy8gdXNlIGFzIGEgYmFzZS5cbiAgICAgIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgICAgIGlmIChjdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgICAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgICAgICBpZiAobmV4dEN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRGaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW5pdGlhbCByZW5kZXIuIFRoaXMgYnJhbmNoIGlzIHJlYWNoZWQgd2hlbiB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAvLyBzdXNwZW5kcywgcmVzdW1lcywgdGhlbiByZW5kZXJzIGFuIGFkZGl0aW9uYWwgaG9vay5cbiAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBiZSByZWFjaGVkIGJlY2F1c2Ugd2Ugc2hvdWxkIHN3aXRjaCB0byB0aGUgbW91bnQgZGlzcGF0Y2hlciBmaXJzdC5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJVcGRhdGUgaG9vayBjYWxsZWQgb24gaW5pdGlhbCByZW5kZXIuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuIFdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIGN1cnJlbnQgaG9vay5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICAgICAgbmV3SG9vaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5ld0hvb2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbiAgICB9IC8vIE5PVEU6IGRlZmluaW5nIHR3byB2ZXJzaW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHRvIGF2b2lkIHNpemUgaW1wYWN0IHdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLlxuICAgIC8vIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlvbiB3YXMgaW5saW5lZCwgdGhlIGFkZGl0aW9uYWwgYG1lbW9DYWNoZWAgcHJvcGVydHkgbWFrZXMgaXQgbm90IGlubGluZWQuXG5cbiAgICB2YXIgY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZTtcblxuICAgIHtcbiAgICAgIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFzdEVmZmVjdDogbnVsbCxcbiAgICAgICAgICBldmVudHM6IG51bGwsXG4gICAgICAgICAgc3RvcmVzOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVzZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICAvLyBUcmFjayB0aGUgcG9zaXRpb24gb2YgdGhlIHRoZW5hYmxlIHdpdGhpbiB0aGlzIGZpYmVyLlxuICAgICAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXI7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciArPSAxO1xuXG4gICAgICBpZiAodGhlbmFibGVTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGVuYWJsZVN0YXRlID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KTtcblxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZSA9PT0gbnVsbCAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsXG4gICAgICAgICAgPyBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPT09IG51bGxcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID09PSBudWxsKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEluaXRpYWwgcmVuZGVyLCBhbmQgZWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIGNvbXBvbmVudCBpc1xuICAgICAgICAvLyBjYWxsZWQsIG9yIHRoZXJlIHdlcmUgbm8gSG9va3MgY2FsbGVkIGFmdGVyIHRoaXMgdXNlKCkgdGhlIHByZXZpb3VzXG4gICAgICAgIC8vIHRpbWUgKHBlcmhhcHMgYmVjYXVzZSBpdCB0aHJldykuIFN1YnNlcXVlbnQgSG9vayBjYWxscyBzaG91bGQgdXNlIHRoZVxuICAgICAgICAvLyBtb3VudCBkaXNwYXRjaGVyLlxuICAgICAgICB7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1c2UodXNhYmxlKSB7XG4gICAgICBpZiAodXNhYmxlICE9PSBudWxsICYmIHR5cGVvZiB1c2FibGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICBpZiAodHlwZW9mIHVzYWJsZS50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgdGhlbmFibGUuXG4gICAgICAgICAgdmFyIHRoZW5hYmxlID0gdXNhYmxlO1xuICAgICAgICAgIHJldHVybiB1c2VUaGVuYWJsZSh0aGVuYWJsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodXNhYmxlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpIHtcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHVzYWJsZTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBbiB1bnN1cHBvcnRlZCB0eXBlIHdhcyBwYXNzZWQgdG8gdXNlKCk6IFwiICsgU3RyaW5nKHVzYWJsZSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgICAgIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gICAgICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG5cbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG4gICAgICAgICAgaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gICAgICB9XG5cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgICAgdmFyIHF1ZXVlID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gcXVldWU7XG4gICAgICB2YXIgZGlzcGF0Y2ggPSAocXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaFJlZHVjZXJBY3Rpb24uYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgcXVldWVcbiAgICAgICkpO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVkdWNlckltcGwoaG9vaywgY3VycmVudEhvb2ssIHJlZHVjZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXJJbXBsKGhvb2ssIGN1cnJlbnQsIHJlZHVjZXIpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICAgICAgdmFyIGJhc2VRdWV1ZSA9IGhvb2suYmFzZVF1ZXVlOyAvLyBUaGUgbGFzdCBwZW5kaW5nIHVwZGF0ZSB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG5cbiAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gICAgICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGhhdmUgbmV3IHVwZGF0ZXMgdGhhdCBoYXZlbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cbiAgICAgICAgLy8gV2UnbGwgYWRkIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG4gICAgICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBNZXJnZSB0aGUgcGVuZGluZyBxdWV1ZSBhbmQgdGhlIGJhc2UgcXVldWUuXG4gICAgICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdGaXJzdDtcbiAgICAgICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgICAgICAvLyB0aGUgZnV0dXJlIGlmIHdlIGltcGxlbWVudCByZXN1bWluZywgb3Igc29tZSBmb3JtIG9mIHRoYXQuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGJhc2VTdGF0ZSA9IGhvb2suYmFzZVN0YXRlO1xuXG4gICAgICBpZiAoYmFzZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHVwZGF0ZXMsIHRoZW4gdGhlIG1lbW9pemVkIHN0YXRlIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gc2FtZSBhcyB0aGUgYmFzZSBzdGF0ZS4gQ3VycmVudGx5IHRoZXNlIG9ubHkgZGl2ZXJnZSBpbiB0aGUgY2FzZSBvZlxuICAgICAgICAvLyB1c2VPcHRpbWlzdGljLCBiZWNhdXNlIHVzZU9wdGltaXN0aWMgYWNjZXB0cyBhIG5ldyBiYXNlU3RhdGUgb25cbiAgICAgICAgLy8gZXZlcnkgcmVuZGVyLlxuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBiYXNlU3RhdGU7IC8vIFdlIGRvbid0IG5lZWQgdG8gY2FsbCBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSBiZWNhdXNlXG4gICAgICAgIC8vIGJhc2VTdGF0ZSBpcyBkZXJpdmVkIGZyb20gb3RoZXIgcmVhY3RpdmUgdmFsdWVzLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgICAgIHZhciBmaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBiYXNlU3RhdGU7XG4gICAgICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgICAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgICAgICB2YXIgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSBmaXJzdDtcbiAgICAgICAgdmFyIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSBmYWxzZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gQW4gZXh0cmEgT2Zmc2NyZWVuTGFuZSBiaXQgaXMgYWRkZWQgdG8gdXBkYXRlcyB0aGF0IHdlcmUgbWFkZSB0b1xuICAgICAgICAgIC8vIGEgaGlkZGVuIHRyZWUsIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB1cGRhdGVzIHRoYXQgd2VyZVxuICAgICAgICAgIC8vIGFscmVhZHkgdGhlcmUgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLlxuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gcmVtb3ZlTGFuZXModXBkYXRlLmxhbmUsIE9mZnNjcmVlbkxhbmUpO1xuICAgICAgICAgIHZhciBpc0hpZGRlblVwZGF0ZSA9IHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lOyAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSB3YXMgbWFkZSB3aGlsZSB0aGUgdHJlZSB3YXMgaGlkZGVuLiBJZiBzbywgdGhlblxuICAgICAgICAgIC8vIGl0J3Mgbm90IGEgXCJiYXNlXCIgdXBkYXRlIGFuZCB3ZSBzaG91bGQgZGlzcmVnYXJkIHRoZSBleHRyYSBiYXNlIGxhbmVzXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlIGFkZGVkIHRvIHJlbmRlckxhbmVzIHdoZW4gd2UgZW50ZXJlZCB0aGUgT2Zmc2NyZWVuIHRyZWUuXG5cbiAgICAgICAgICB2YXIgc2hvdWxkU2tpcFVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICA/ICFpc1N1YnNldE9mTGFuZXMoZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMoKSwgdXBkYXRlTGFuZSlcbiAgICAgICAgICAgIDogIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkU2tpcFVwZGF0ZSkge1xuICAgICAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHJldmVydExhbmU6IHVwZGF0ZS5yZXZlcnRMYW5lLFxuICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgbmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAgICAgLy8gcmVuZGVyTGFuZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICAgICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLFxuICAgICAgICAgICAgICB1cGRhdGVMYW5lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh1cGRhdGVMYW5lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhbiBvcHRpbWlzdGljIHVwZGF0ZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIGFwcGx5IGl0IG5vdy5cbiAgICAgICAgICAgICAgLy8gQnV0LCBpZiB0aGVyZSB3ZXJlIGVhcmxpZXIgdXBkYXRlcyB0aGF0IHdlcmUgc2tpcHBlZCwgd2UgbmVlZCB0b1xuICAgICAgICAgICAgICAvLyBsZWF2ZSB0aGlzIHVwZGF0ZSBpbiB0aGUgcXVldWUgc28gaXQgY2FuIGJlIHJlYmFzZWQgbGF0ZXIuXG4gICAgICAgICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICAgICAgICByZXZlcnRMYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgICAgICAgfSAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSBpcyBwYXJ0IG9mIGEgcGVuZGluZyBhc3luYyBhY3Rpb24uIElmIHNvLFxuICAgICAgICAgICAgICAvLyB3ZSdsbCBuZWVkIHRvIHN1c3BlbmQgdW50aWwgdGhlIGFjdGlvbiBoYXMgZmluaXNoZWQsIHNvIHRoYXQgaXQnc1xuICAgICAgICAgICAgICAvLyBiYXRjaGVkIHRvZ2V0aGVyIHdpdGggZnV0dXJlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgYWN0aW9uLlxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVMYW5lID09PSBwZWVrRW50YW5nbGVkQWN0aW9uTGFuZSgpKSB7XG4gICAgICAgICAgICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG5cbiAgICAgICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgICAgICByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlLmhhc0VhZ2VyU3RhdGUpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgaXMgYSBzdGF0ZSB1cGRhdGUgKG5vdCBhIHJlZHVjZXIpIGFuZCB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksXG4gICAgICAgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGVcbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSB1cGRhdGUuZWFnZXJTdGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gZmlyc3QpO1xuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3Q7XG4gICAgICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuICAgICAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTsgLy8gQ2hlY2sgaWYgdGhpcyB1cGRhdGUgaXMgcGFydCBvZiBhIHBlbmRpbmcgYXN5bmMgYWN0aW9uLiBJZiBzbywgd2UnbGxcbiAgICAgICAgICAvLyBuZWVkIHRvIHN1c3BlbmQgdW50aWwgdGhlIGFjdGlvbiBoYXMgZmluaXNoZWQsIHNvIHRoYXQgaXQncyBiYXRjaGVkXG4gICAgICAgICAgLy8gdG9nZXRoZXIgd2l0aCBmdXR1cmUgdXBkYXRlcyBpbiB0aGUgc2FtZSBhY3Rpb24uXG4gICAgICAgICAgLy8gVE9ETzogT25jZSB3ZSBzdXBwb3J0IGhvb2tzIGluc2lkZSB1c2VNZW1vIChvciBhbiBlcXVpdmFsZW50XG4gICAgICAgICAgLy8gbWVtb2l6YXRpb24gYm91bmRhcnkgbGlrZSBGb3JnZXQpLCBob2lzdCB0aGlzIGxvZ2ljIHNvIHRoYXQgaXQgb25seVxuICAgICAgICAgIC8vIHN1c3BlbmRzIGlmIHRoZSBtZW1vIGJvdW5kYXJ5IHByb2R1Y2VzIGEgbmV3IHZhbHVlLlxuXG4gICAgICAgICAgaWYgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IHBlZWtFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSgpO1xuXG4gICAgICAgICAgICBpZiAoZW50YW5nbGVkQWN0aW9uVGhlbmFibGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogSW5zdGVhZCBvZiB0aGUgdGhyb3dpbmcgdGhlIHRoZW5hYmxlIGRpcmVjdGx5LCB0aHJvdyBhXG4gICAgICAgICAgICAgIC8vIHNwZWNpYWwgb2JqZWN0IGxpa2UgYHVzZWAgZG9lcyBzbyB3ZSBjYW4gZGV0ZWN0IGlmIGl0J3MgY2FwdHVyZWRcbiAgICAgICAgICAgICAgLy8gYnkgdXNlcnNwYWNlLlxuICAgICAgICAgICAgICB0aHJvdyBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICAgICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBgcXVldWUubGFuZXNgIGlzIHVzZWQgZm9yIGVudGFuZ2xpbmcgdHJhbnNpdGlvbnMuIFdlIGNhbiBzZXQgaXQgYmFjayB0b1xuICAgICAgICAvLyB6ZXJvIG9uY2UgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICBxdWV1ZS5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gICAgICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbiAgICAgIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICAgICAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0O1xuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuICAgICAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlOyAvLyBEb24ndCBwZXJzaXN0IHRoZSBzdGF0ZSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgICAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgICAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuXG4gICAgICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICAgICAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBuZXh0U25hcHNob3Q7XG5cbiAgICAgIHtcbiAgICAgICAgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIGNhY2hlZFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0U25hcHNob3QsIGNhY2hlZFNuYXBzaG90KSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVubGVzcyB3ZSdyZSByZW5kZXJpbmcgYSBibG9ja2luZyBsYW5lLCBzY2hlZHVsZSBhIGNvbnNpc3RlbmN5IGNoZWNrLlxuICAgICAgICAvLyBSaWdodCBiZWZvcmUgY29tbWl0dGluZywgd2Ugd2lsbCB3YWxrIHRoZSB0cmVlIGFuZCBjaGVjayBpZiBhbnkgb2YgdGhlXG4gICAgICAgIC8vIHN0b3JlcyB3ZXJlIG11dGF0ZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHdvbid0IGRvIHRoaXMgaWYgd2UncmUgaHlkcmF0aW5nIHNlcnZlci1yZW5kZXJlZCBjb250ZW50LCBiZWNhdXNlIGlmXG4gICAgICAgIC8vIHRoZSBjb250ZW50IGlzIHN0YWxlLCBpdCdzIGFscmVhZHkgdmlzaWJsZSBhbnl3YXkuIEluc3RlYWQgd2UnbGwgcGF0Y2hcbiAgICAgICAgLy8gaXQgdXAgaW4gYSBwYXNzaXZlIGVmZmVjdC5cblxuICAgICAgICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gICAgICAgIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJvb3RSZW5kZXJMYW5lcyA9IGdldFdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKCk7XG5cbiAgICAgICAgaWYgKCFpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCByb290UmVuZGVyTGFuZXMpKSB7XG4gICAgICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIG5leHRTbmFwc2hvdCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGUgY3VycmVudCBzbmFwc2hvdCBmcm9tIHRoZSBzdG9yZSBvbiBldmVyeSByZW5kZXIuIFRoaXMgYnJlYWtzIHRoZVxuICAgICAgLy8gbm9ybWFsIHJ1bGVzIG9mIFJlYWN0LCBhbmQgb25seSB3b3JrcyBiZWNhdXNlIHN0b3JlIHVwZGF0ZXMgYXJlXG4gICAgICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5leHRTbmFwc2hvdDtcbiAgICAgIHZhciBpbnN0ID0ge1xuICAgICAgICB2YWx1ZTogbmV4dFNuYXBzaG90LFxuICAgICAgICBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3RcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gaW5zdDsgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIHN1YnNjcmliZSB0byB0aGUgc3RvcmUuXG5cbiAgICAgIG1vdW50RWZmZWN0KHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSwgW1xuICAgICAgICBzdWJzY3JpYmVcbiAgICAgIF0pOyAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gdXBkYXRlIHRoZSBtdXRhYmxlIGluc3RhbmNlIGZpZWxkcy4gV2Ugd2lsbCB1cGRhdGVcbiAgICAgIC8vIHRoaXMgd2hlbmV2ZXIgc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgb3IgdmFsdWUgY2hhbmdlcy4gQmVjYXVzZSB0aGVyZSdzIG5vXG4gICAgICAvLyBjbGVhbi11cCBmdW5jdGlvbiwgYW5kIHdlIHRyYWNrIHRoZSBkZXBzIGNvcnJlY3RseSwgd2UgY2FuIGNhbGwgcHVzaEVmZmVjdFxuICAgICAgLy8gZGlyZWN0bHksIHdpdGhvdXQgc3RvcmluZyBhbnkgYWRkaXRpb25hbCBzdGF0ZS4gRm9yIHRoZSBzYW1lIHJlYXNvbiwgd2VcbiAgICAgIC8vIGRvbid0IG5lZWQgdG8gc2V0IGEgc3RhdGljIGZsYWcsIGVpdGhlci5cblxuICAgICAgZmliZXIuZmxhZ3MgfD0gUGFzc2l2ZSQxO1xuICAgICAgcHVzaEVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKG51bGwsIGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSxcbiAgICAgICAgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXh0U25hcHNob3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBnZXRTbmFwc2hvdCxcbiAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTsgLy8gUmVhZCB0aGUgY3VycmVudCBzbmFwc2hvdCBmcm9tIHRoZSBzdG9yZSBvbiBldmVyeSByZW5kZXIuIFRoaXMgYnJlYWtzIHRoZVxuICAgICAgLy8gbm9ybWFsIHJ1bGVzIG9mIFJlYWN0LCBhbmQgb25seSB3b3JrcyBiZWNhdXNlIHN0b3JlIHVwZGF0ZXMgYXJlXG4gICAgICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cbiAgICAgIHZhciBuZXh0U25hcHNob3Q7XG5cbiAgICAgIHtcbiAgICAgICAgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIGNhY2hlZFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0U25hcHNob3QsIGNhY2hlZFNuYXBzaG90KSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2U25hcHNob3QgPSAoY3VycmVudEhvb2sgfHwgaG9vaykubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHZhciBzbmFwc2hvdENoYW5nZWQgPSAhb2JqZWN0SXMocHJldlNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuXG4gICAgICBpZiAoc25hcHNob3RDaGFuZ2VkKSB7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5leHRTbmFwc2hvdDtcbiAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3QgPSBob29rLnF1ZXVlO1xuICAgICAgdXBkYXRlRWZmZWN0KHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSwgW1xuICAgICAgICBzdWJzY3JpYmVcbiAgICAgIF0pOyAvLyBXaGVuZXZlciBnZXRTbmFwc2hvdCBvciBzdWJzY3JpYmUgY2hhbmdlcywgd2UgbmVlZCB0byBjaGVjayBpbiB0aGVcbiAgICAgIC8vIGNvbW1pdCBwaGFzZSBpZiB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgbXV0YXRpb24uIEluIGNvbmN1cnJlbnQgbW9kZVxuICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGFsbCB0aGUgdGltZSwgYnV0IGV2ZW4gaW4gc3luY2hyb25vdXMgbW9kZSwgYW4gZWFybGllclxuICAgICAgLy8gZWZmZWN0IG1heSBoYXZlIG11dGF0ZWQgdGhlIHN0b3JlLlxuXG4gICAgICBpZiAoXG4gICAgICAgIGluc3QuZ2V0U25hcHNob3QgIT09IGdldFNuYXBzaG90IHx8XG4gICAgICAgIHNuYXBzaG90Q2hhbmdlZCB8fCAvLyBDaGVjayBpZiB0aGUgc3Vic2NyaWJlIGZ1bmN0aW9uIGNoYW5nZWQuIFdlIGNhbiBzYXZlIHNvbWUgbWVtb3J5IGJ5XG4gICAgICAgIC8vIGNoZWNraW5nIHdoZXRoZXIgd2Ugc2NoZWR1bGVkIGEgc3Vic2NyaXB0aW9uIGVmZmVjdCBhYm92ZS5cbiAgICAgICAgKHdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzSG9vay5tZW1vaXplZFN0YXRlLnRhZyAmIEhhc0VmZmVjdClcbiAgICAgICkge1xuICAgICAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlJDE7XG4gICAgICAgIHB1c2hFZmZlY3QoXG4gICAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgICB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgbmV4dFNuYXBzaG90LFxuICAgICAgICAgICAgZ2V0U25hcHNob3RcbiAgICAgICAgICApLFxuICAgICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgICAgbnVsbFxuICAgICAgICApOyAvLyBVbmxlc3Mgd2UncmUgcmVuZGVyaW5nIGEgYmxvY2tpbmcgbGFuZSwgc2NoZWR1bGUgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiAgICAgICAgLy8gUmlnaHQgYmVmb3JlIGNvbW1pdHRpbmcsIHdlIHdpbGwgd2FsayB0aGUgdHJlZSBhbmQgY2hlY2sgaWYgYW55IG9mIHRoZVxuICAgICAgICAvLyBzdG9yZXMgd2VyZSBtdXRhdGVkLlxuXG4gICAgICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICAgICAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0U25hcHNob3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIHJlbmRlcmVkU25hcHNob3QpIHtcbiAgICAgIGZpYmVyLmZsYWdzIHw9IFN0b3JlQ29uc2lzdGVuY3k7XG4gICAgICB2YXIgY2hlY2sgPSB7XG4gICAgICAgIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCxcbiAgICAgICAgdmFsdWU6IHJlbmRlcmVkU25hcHNob3RcbiAgICAgIH07XG4gICAgICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUuc3RvcmVzID0gW2NoZWNrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzdG9yZXMgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5zdG9yZXM7XG5cbiAgICAgICAgaWYgKHN0b3JlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLnN0b3JlcyA9IFtjaGVja107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RvcmVzLnB1c2goY2hlY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3RvcmVJbnN0YW5jZShmaWJlciwgaW5zdCwgbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdCkge1xuICAgICAgLy8gVGhlc2UgYXJlIHVwZGF0ZWQgaW4gdGhlIHBhc3NpdmUgcGhhc2VcbiAgICAgIGluc3QudmFsdWUgPSBuZXh0U25hcHNob3Q7XG4gICAgICBpbnN0LmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIFNvbWV0aGluZyBtYXkgaGF2ZSBiZWVuIG11dGF0ZWQgaW4gYmV0d2VlbiByZW5kZXIgYW5kIGNvbW1pdC4gVGhpcyBjb3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIGluIGFuIGV2ZW50IHRoYXQgZmlyZWQgYmVmb3JlIHRoZSBwYXNzaXZlIGVmZmVjdHMsIG9yIGl0IGNvdWxkXG4gICAgICAvLyBoYXZlIGJlZW4gaW4gYSBsYXlvdXQgZWZmZWN0LiBJbiB0aGF0IGNhc2UsIHdlIHdvdWxkIGhhdmUgdXNlZCB0aGUgb2xkXG4gICAgICAvLyBzbmFwc2hvIGFuZCBnZXRTbmFwc2hvdCB2YWx1ZXMgdG8gYmFpbCBvdXQuIFdlIG5lZWQgdG8gY2hlY2sgb25lIG1vcmUgdGltZS5cblxuICAgICAgaWYgKGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkpIHtcbiAgICAgICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgICAgIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3Vic2NyaWJlVG9TdG9yZShmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSB7XG4gICAgICB2YXIgaGFuZGxlU3RvcmVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoZSBzdG9yZSBjaGFuZ2VkLiBDaGVjayBpZiB0aGUgc25hcHNob3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlXG4gICAgICAgIC8vIHJlYWQgZnJvbSB0aGUgc3RvcmUuXG4gICAgICAgIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgICAgICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgICAgICAgZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdG9yZSBhbmQgcmV0dXJuIGEgY2xlYW4tdXAgZnVuY3Rpb24uXG5cbiAgICAgIHJldHVybiBzdWJzY3JpYmUoaGFuZGxlU3RvcmVDaGFuZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBwcmV2VmFsdWUgPSBpbnN0LnZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuICFvYmplY3RJcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpIHtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBpbml0aWFsU3RhdGVJbml0aWFsaXplciA9IGluaXRpYWxTdGF0ZTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcblxuICAgICAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuXG4gICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuXG4gICAgICAgICAgaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICB2YXIgcXVldWUgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gcXVldWU7XG4gICAgICByZXR1cm4gaG9vaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFN0YXRlSW1wbChpbml0aWFsU3RhdGUpO1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgICAgIHZhciBkaXNwYXRjaCA9IGRpc3BhdGNoU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgcXVldWVcbiAgICAgICk7XG4gICAgICBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgaW5zdCwgZGVwcykge1xuICAgICAgdmFyIGVmZmVjdCA9IHtcbiAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgICAgICBpbnN0OiBpbnN0LFxuICAgICAgICBkZXBzOiBkZXBzLFxuICAgICAgICAvLyBDaXJjdWxhclxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICAgICAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWZmZWN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gICAgICB7XG4gICAgICAgIHZhciBfcmVmMiA9IHtcbiAgICAgICAgICBjdXJyZW50OiBpbml0aWFsVmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gX3JlZjI7XG4gICAgICAgIHJldHVybiBfcmVmMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgaG9va0ZsYWdzLFxuICAgICAgICBjcmVhdGUsXG4gICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgIG5leHREZXBzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBlZmZlY3QgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gICAgICB2YXIgaW5zdCA9IGVmZmVjdC5pbnN0OyAvLyBjdXJyZW50SG9vayBpcyBudWxsIG9uIGluaXRpYWwgbW91bnQgd2hlbiByZXJlbmRlcmluZyBhZnRlciBhIHJlbmRlciBwaGFzZVxuICAgICAgLy8gc3RhdGUgdXBkYXRlIG9yIGZvciBzdHJpY3QgbW9kZS5cblxuICAgICAgaWYgKGN1cnJlbnRIb29rICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoaG9va0ZsYWdzLCBjcmVhdGUsIGluc3QsIG5leHREZXBzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgaG9va0ZsYWdzLFxuICAgICAgICBjcmVhdGUsXG4gICAgICAgIGluc3QsXG4gICAgICAgIG5leHREZXBzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgaWYgKFxuICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIE5vU3RyaWN0UGFzc2l2ZUVmZmVjdHNNb2RlKSA9PT0gTm9Nb2RlXG4gICAgICApIHtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKFxuICAgICAgICAgIE1vdW50UGFzc2l2ZURldiB8IFBhc3NpdmUkMSB8IFBhc3NpdmVTdGF0aWMsXG4gICAgICAgICAgUGFzc2l2ZSxcbiAgICAgICAgICBjcmVhdGUsXG4gICAgICAgICAgZGVwc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKFBhc3NpdmUkMSB8IFBhc3NpdmVTdGF0aWMsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbChQYXNzaXZlJDEsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgZmliZXJGbGFncyA9IFVwZGF0ZSB8IExheW91dFN0YXRpYztcblxuICAgICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICBmaWJlckZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcbiAgICAgICAgdmFyIGluc3QgPSBjcmVhdGUoKTtcbiAgICAgICAgcmVmQ2FsbGJhY2soaW5zdCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmVmQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgcmVmT2JqZWN0ID0gcmVmO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIXJlZk9iamVjdC5oYXNPd25Qcm9wZXJ0eShcImN1cnJlbnRcIikpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgICAgXCJhbiBvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZWZPYmplY3QuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgICAgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6IFwibnVsbFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG4gICAgICB2YXIgZWZmZWN0RGVwcyA9XG4gICAgICAgIGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgICAgIHZhciBmaWJlckZsYWdzID0gVXBkYXRlIHwgTGF5b3V0U3RhdGljO1xuXG4gICAgICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIGZpYmVyRmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gICAgICB9XG5cbiAgICAgIG1vdW50RWZmZWN0SW1wbChcbiAgICAgICAgZmliZXJGbGFncyxcbiAgICAgICAgTGF5b3V0LFxuICAgICAgICBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLFxuICAgICAgICBlZmZlY3REZXBzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gXCIgK1xuICAgICAgICAgICAgICBcInRoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogXCJudWxsXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cbiAgICAgIHZhciBlZmZlY3REZXBzID1cbiAgICAgICAgZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbChcbiAgICAgICAgVXBkYXRlLFxuICAgICAgICBMYXlvdXQsXG4gICAgICAgIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksXG4gICAgICAgIGVmZmVjdERlcHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgLy8gVGhpcyBob29rIGlzIG5vcm1hbGx5IGEgbm8tb3AuXG4gICAgICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG4gICAgfVxuXG4gICAgdmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbiAgICBmdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcblxuICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuICAgICAgICBuZXh0Q3JlYXRlKCk7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICAgICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7IC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG5cbiAgICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuXG4gICAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG4gICAgICAgIG5leHRDcmVhdGUoKTtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gICAgICByZXR1cm4gbmV4dFZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgcmVzb2x2ZWRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rO1xuICAgICAgdmFyIHByZXZWYWx1ZSA9IHJlc29sdmVkQ3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChob29rLCBwcmV2VmFsdWUsIHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gICAgICBpZiAoY3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHJlcmVuZGVyIGR1cmluZyBhIG1vdW50LlxuICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSByZXJlbmRlciBkdXJpbmcgYW4gdXBkYXRlLlxuICAgICAgICB2YXIgcHJldlZhbHVlID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHByZXZWYWx1ZSwgdmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIC8vIFdoZW4gYGluaXRpYWxWYWx1ZWAgaXMgcHJvdmlkZWQsIHdlIGRlZmVyIHRoZSBpbml0aWFsIHJlbmRlciBldmVuIGlmIHRoZVxuICAgICAgICAvLyBjdXJyZW50IHJlbmRlciBpcyBub3Qgc3luY2hyb25vdXMuXG4gICAgICAgIGluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIC8vIEhvd2V2ZXIsIHRvIGF2b2lkIHdhdGVyZmFsbHMsIHdlIGRvIG5vdCBkZWZlciBpZiB0aGlzIHJlbmRlclxuICAgICAgICAvLyB3YXMgaXRzZWxmIHNwYXduZWQgYnkgYW4gZWFybGllciB1c2VEZWZlcnJlZFZhbHVlLiBDaGVjayBpZiBEZWZlcnJlZExhbmVcbiAgICAgICAgLy8gaXMgcGFydCBvZiB0aGUgcmVuZGVyIGxhbmVzLlxuICAgICAgICAhaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgRGVmZXJyZWRMYW5lKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFJlbmRlciB3aXRoIHRoZSBpbml0aWFsIHZhbHVlXG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZTsgLy8gU2NoZWR1bGUgYSBkZWZlcnJlZCByZW5kZXIgdG8gc3dpdGNoIHRvIHRoZSBmaW5hbCB2YWx1ZS5cblxuICAgICAgICB2YXIgZGVmZXJyZWRMYW5lID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLFxuICAgICAgICAgIGRlZmVycmVkTGFuZVxuICAgICAgICApO1xuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGRlZmVycmVkTGFuZSk7XG4gICAgICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHByZXZWYWx1ZSwgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgaWYgKG9iamVjdElzKHZhbHVlLCBwcmV2VmFsdWUpKSB7XG4gICAgICAgIC8vIFRoZSBpbmNvbWluZyB2YWx1ZSBpcyByZWZlcmVudGlhbGx5IGlkZW50aWNhbCB0byB0aGUgY3VycmVudGx5IHJlbmRlcmVkXG4gICAgICAgIC8vIHZhbHVlLCBzbyB3ZSBjYW4gYmFpbCBvdXQgcXVpY2tseS5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVjZWl2ZWQgYSBuZXcgdmFsdWUgdGhhdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgYSBoaWRkZW4gdHJlZVxuICAgICAgICBpZiAoaXNDdXJyZW50VHJlZUhpZGRlbigpKSB7XG4gICAgICAgICAgLy8gUmV2ZWFsaW5nIGEgcHJlcmVuZGVyZWQgdHJlZSBpcyBjb25zaWRlcmVkIHRoZSBzYW1lIGFzIG1vdW50aW5nIG5ld1xuICAgICAgICAgIC8vIG9uZSwgc28gd2UgcmV1c2UgdGhlIFwibW91bnRcIiBwYXRoIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICB2YXIgcmVzdWx0VmFsdWUgPSBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpOyAvLyBVbmxpa2UgZHVyaW5nIGFuIGFjdHVhbCBtb3VudCwgd2UgbmVlZCB0byBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlIGlmXG4gICAgICAgICAgLy8gdGhlIHZhbHVlIGNoYW5nZWQuXG5cbiAgICAgICAgICBpZiAoIW9iamVjdElzKHJlc3VsdFZhbHVlLCBwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG91bGREZWZlclZhbHVlID0gIWluY2x1ZGVzT25seU5vblVyZ2VudExhbmVzKHJlbmRlckxhbmVzKTtcblxuICAgICAgICBpZiAoc2hvdWxkRGVmZXJWYWx1ZSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYW4gdXJnZW50IHVwZGF0ZS4gU2luY2UgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLCBrZWVwIHVzaW5nIHRoZVxuICAgICAgICAgIC8vIHByZXZpb3VzIHZhbHVlIGFuZCBzcGF3biBhIGRlZmVycmVkIHJlbmRlciB0byB1cGRhdGUgaXQgbGF0ZXIuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBkZWZlcnJlZCByZW5kZXJcbiAgICAgICAgICB2YXIgZGVmZXJyZWRMYW5lID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICAgICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyxcbiAgICAgICAgICAgIGRlZmVycmVkTGFuZVxuICAgICAgICAgICk7XG4gICAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyhkZWZlcnJlZExhbmUpOyAvLyBSZXVzZSB0aGUgcHJldmlvdXMgdmFsdWUuIFdlIGRvIG5vdCBuZWVkIHRvIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUsXG4gICAgICAgICAgLy8gYmVjYXVzZSB3ZSBkaWQgbm90IHJlbmRlciBhIG5ldyB2YWx1ZS5cblxuICAgICAgICAgIHJldHVybiBwcmV2VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYW4gdXJnZW50IHVwZGF0ZSwgc28gd2UgY2FuIHVzZSB0aGUgbGF0ZXN0IHZhbHVlIHJlZ2FyZGxlc3NcbiAgICAgICAgICAvLyBvZiB3aGF0IGl0IGlzLiBObyBuZWVkIHRvIGRlZmVyIGl0LlxuICAgICAgICAgIC8vIE1hcmsgdGhpcyBhcyBhbiB1cGRhdGUgdG8gcHJldmVudCB0aGUgZmliZXIgZnJvbSBiYWlsaW5nIG91dC5cbiAgICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihcbiAgICAgIGZpYmVyLFxuICAgICAgcXVldWUsXG4gICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICBmaW5pc2hlZFN0YXRlLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KFxuICAgICAgICBoaWdoZXJFdmVudFByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHksIENvbnRpbnVvdXNFdmVudFByaW9yaXR5KVxuICAgICAgKTtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIudHJhbnNpdGlvbjtcbiAgICAgIHZhciBjdXJyZW50VHJhbnNpdGlvbiA9IHtcbiAgICAgICAgX2NhbGxiYWNrczogbmV3IFNldCgpXG4gICAgICB9O1xuXG4gICAgICB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBwZW5kaW5nU3RhdGUpO1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24gPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSwgdGhlbmFibGUsIHRoZW5hYmxlRm9yRmluaXNoZWRTdGF0ZTtcbiAgICAgICAgaWYgKGVuYWJsZUFzeW5jQWN0aW9ucyk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIEFzeW5jIGFjdGlvbnMgYXJlIG5vdCBlbmFibGVkLlxuICAgICAgICAgIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBmaW5pc2hlZFN0YXRlKTtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGVycm9yIHJldGhyb3dpbmcgYmVoYXZpb3IgaXMgb25seSBlbmFibGVkIHdoZW4gdGhlIGFzeW5jIGFjdGlvbnNcbiAgICAgICAgICAvLyBmZWF0dXJlIGlzIG9uLCBldmVuIGZvciBzeW5jIGFjdGlvbnMuXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChwcmV2VHJhbnNpdGlvbiA9PT0gbnVsbCAmJiBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycykge1xuICAgICAgICAgICAgdmFyIHVwZGF0ZWRGaWJlcnNDb3VudCA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemU7XG5cbiAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCk7XG5cbiAgICAgICAgICAgIGlmICh1cGRhdGVkRmliZXJzQ291bnQgPiAxMCkge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgIFwiRGV0ZWN0ZWQgYSBsYXJnZSBudW1iZXIgb2YgdXBkYXRlcyBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIklmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlSG9vayA9IG1vdW50U3RhdGVJbXBsKGZhbHNlKTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIG5ldmVyIGNoYW5nZXMuXG5cbiAgICAgIHZhciBzdGFydCA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICBzdGF0ZUhvb2sucXVldWUsXG4gICAgICAgIHRydWUsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gc3RhcnQ7XG4gICAgICByZXR1cm4gW2ZhbHNlLCBzdGFydF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciBfdXBkYXRlU3RhdGUgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgICBib29sZWFuT3JUaGVuYWJsZSA9IF91cGRhdGVTdGF0ZVswXTtcblxuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBzdGFydCA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHZhciBpc1BlbmRpbmcgPVxuICAgICAgICB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGUgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZSAvLyBUaGlzIHdpbGwgc3VzcGVuZCB1bnRpbCB0aGUgYXN5bmMgYWN0aW9uIHNjb3BlIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKTtcbiAgICAgIHJldHVybiBbaXNQZW5kaW5nLCBzdGFydF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIF9yZXJlbmRlclN0YXRlID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgICBib29sZWFuT3JUaGVuYWJsZSA9IF9yZXJlbmRlclN0YXRlWzBdO1xuXG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIHN0YXJ0ID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgdmFyIGlzUGVuZGluZyA9XG4gICAgICAgIHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICA/IGJvb2xlYW5PclRoZW5hYmxlIC8vIFRoaXMgd2lsbCBzdXNwZW5kIHVudGlsIHRoZSBhc3luYyBhY3Rpb24gc2NvcGUgaGFzIGZpbmlzaGVkLlxuICAgICAgICAgIDogdXNlVGhlbmFibGUoYm9vbGVhbk9yVGhlbmFibGUpO1xuICAgICAgcmV0dXJuIFtpc1BlbmRpbmcsIHN0YXJ0XTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudElkKCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTsgLy8gVE9ETzogSW4gRml6eiwgaWQgZ2VuZXJhdGlvbiBpcyBzcGVjaWZpYyB0byBlYWNoIHNlcnZlciBjb25maWcuIE1heWJlIHdlXG4gICAgICAvLyBzaG91bGQgZG8gdGhpcyBpbiBGaWJlciwgdG9vPyBEZWZlcnJpbmcgdGhpcyBkZWNpc2lvbiBmb3Igbm93IGJlY2F1c2VcbiAgICAgIC8vIHRoZXJlJ3Mgbm8gb3RoZXIgcGxhY2UgdG8gc3RvcmUgdGhlIHByZWZpeCBleGNlcHQgZm9yIGFuIGludGVybmFsIGZpZWxkIG9uXG4gICAgICAvLyB0aGUgcHVibGljIGNyZWF0ZVJvb3Qgb2JqZWN0LCB3aGljaCB0aGUgZmliZXIgdHJlZSBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZVxuICAgICAgLy8gYSByZWZlcmVuY2UgdG8uXG5cbiAgICAgIHZhciBpZGVudGlmaWVyUHJlZml4ID0gcm9vdC5pZGVudGlmaWVyUHJlZml4O1xuICAgICAgdmFyIGlkO1xuXG4gICAgICB7XG4gICAgICAgIC8vIFVzZSBhIGxvd2VyY2FzZSByIHByZWZpeCBmb3IgY2xpZW50LWdlbmVyYXRlZCBpZHMuXG4gICAgICAgIHZhciBnbG9iYWxDbGllbnRJZCA9IGdsb2JhbENsaWVudElkQ291bnRlcisrO1xuICAgICAgICBpZCA9IFwiOlwiICsgaWRlbnRpZmllclByZWZpeCArIFwiclwiICsgZ2xvYmFsQ2xpZW50SWQudG9TdHJpbmcoMzIpICsgXCI6XCI7XG4gICAgICB9XG5cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGlkO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUlkKCkge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBpZCA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXNwYXRjaFJlZHVjZXJBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArXG4gICAgICAgICAgICAgIFwic2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgXCIgK1xuICAgICAgICAgICAgICBcInJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICByZXZlcnRMYW5lOiBOb0xhbmUsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcblxuICAgICAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSB7XG4gICAgICAgIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKHJvb3QsIHF1ZXVlLCBsYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArXG4gICAgICAgICAgICAgIFwic2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgXCIgK1xuICAgICAgICAgICAgICBcInJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICByZXZlcnRMYW5lOiBOb0xhbmUsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcblxuICAgICAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSB7XG4gICAgICAgIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpYmVyLmxhbmVzID09PSBOb0xhbmVzICYmXG4gICAgICAgICAgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUubGFuZXMgPT09IE5vTGFuZXMpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgICAgICAvLyBzYW1lIGFzIHRoZSBjdXJyZW50IHN0YXRlLCB3ZSBtYXkgYmUgYWJsZSB0byBiYWlsIG91dCBlbnRpcmVseS5cbiAgICAgICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgICAgICBpZiAobGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlO1xuICAgICAgICAgICAgICB2YXIgZWFnZXJTdGF0ZSA9IGxhc3RSZW5kZXJlZFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pOyAvLyBTdGFzaCB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZSwgYW5kIHRoZSByZWR1Y2VyIHVzZWQgdG8gY29tcHV0ZVxuICAgICAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgICAgIC8vIHdpdGhvdXQgY2FsbGluZyB0aGUgcmVkdWNlciBhZ2Fpbi5cblxuICAgICAgICAgICAgICB1cGRhdGUuaGFzRWFnZXJTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcblxuICAgICAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gcmViYXNlIHRoaXMgdXBkYXRlIGxhdGVyLFxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEbyB3ZSBzdGlsbCBuZWVkIHRvIGVudGFuZ2xlIHRyYW5zaXRpb25zIGluIHRoaXMgY2FzZT9cbiAgICAgICAgICAgICAgICBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGVBbmRFYWdlcmx5QmFpbG91dChcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgcXVldWUsXG4gICAgICAgICAgICAgICAgICB1cGRhdGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKHJvb3QsIHF1ZXVlLCBsYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fFxuICAgICAgICAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAgICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgICAgLy8gYW5kIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgb24gdG9wIG9mIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICAgICAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgICAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgICAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgfSAvLyBUT0RPOiBNb3ZlIHRvIFJlYWN0RmliZXJDb25jdXJyZW50VXBkYXRlcz9cblxuICAgIGZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShyb290LCBxdWV1ZSwgbGFuZSkge1xuICAgICAgaWYgKGlzVHJhbnNpdGlvbkxhbmUobGFuZSkpIHtcbiAgICAgICAgdmFyIHF1ZXVlTGFuZXMgPSBxdWV1ZS5sYW5lczsgLy8gSWYgYW55IGVudGFuZ2xlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIHBlbmRpbmcgb24gdGhlIHJvb3QsIHRoZW4gdGhleVxuICAgICAgICAvLyBtdXN0IGhhdmUgZmluaXNoZWQuIFdlIGNhbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBzaGFyZWQgcXVldWUsIHdoaWNoXG4gICAgICAgIC8vIHJlcHJlc2VudHMgYSBzdXBlcnNldCBvZiB0aGUgYWN0dWFsbHkgcGVuZGluZyBsYW5lcy4gSW4gc29tZSBjYXNlcyB3ZVxuICAgICAgICAvLyBtYXkgZW50YW5nbGUgbW9yZSB0aGFuIHdlIG5lZWQgdG8sIGJ1dCB0aGF0J3MgT0suIEluIGZhY3QgaXQncyB3b3JzZSBpZlxuICAgICAgICAvLyB3ZSAqZG9uJ3QqIGVudGFuZ2xlIHdoZW4gd2Ugc2hvdWxkLlxuXG4gICAgICAgIHF1ZXVlTGFuZXMgPSBpbnRlcnNlY3RMYW5lcyhxdWV1ZUxhbmVzLCByb290LnBlbmRpbmdMYW5lcyk7IC8vIEVudGFuZ2xlIHRoZSBuZXcgdHJhbnNpdGlvbiBsYW5lIHdpdGggdGhlIG90aGVyIHRyYW5zaXRpb24gbGFuZXMuXG5cbiAgICAgICAgdmFyIG5ld1F1ZXVlTGFuZXMgPSBtZXJnZUxhbmVzKHF1ZXVlTGFuZXMsIGxhbmUpO1xuICAgICAgICBxdWV1ZS5sYW5lcyA9IG5ld1F1ZXVlTGFuZXM7IC8vIEV2ZW4gaWYgcXVldWUubGFuZXMgYWxyZWFkeSBpbmNsdWRlIGxhbmUsIHdlIGRvbid0IGtub3cgZm9yIGNlcnRhaW4gaWZcbiAgICAgICAgLy8gdGhlIGxhbmUgZmluaXNoZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBlbnRhbmdsZWQgaXQuIFNvIHdlIG5lZWQgdG9cbiAgICAgICAgLy8gZW50YW5nbGUgaXQgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZS5cblxuICAgICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBuZXdRdWV1ZUxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICAgICAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZUlkOiB0aHJvd0ludmFsaWRIb29rRXJyb3JcbiAgICB9O1xuXG4gICAgdmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG4gICAgdmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSBudWxsO1xuICAgIHZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbiAgICB2YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbiAgICB2YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG4gICAgdmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbiAgICB2YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbiAgICB7XG4gICAgICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIFwiICtcbiAgICAgICAgICAgIFwiSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gXCIgK1xuICAgICAgICAgICAgXCJJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgXCIgK1xuICAgICAgICAgICAgXCJpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkRvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gXCIgK1xuICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uIFwiICtcbiAgICAgICAgICAgIFwiRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBcIiArXG4gICAgICAgICAgICBcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1wiXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlOiB1c2UsXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlOiB1c2UsXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudEluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlOiB1c2UsXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSWQoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZTogdXNlLFxuICAgICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSWQoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICByZXR1cm4gdXNlKHVzYWJsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVJZCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUlkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG4gICAgdmFyIGNvbW1pdFRpbWUgPSAwO1xuICAgIHZhciBsYXlvdXRFZmZlY3RTdGFydFRpbWUgPSAtMTtcbiAgICB2YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICB2YXIgcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA9IC0xO1xuICAgIC8qKlxuICAgICAqIFRyYWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHVwZGF0ZSB3YXMgYSBuZXN0ZWQvY2FzY2FkaW5nIHVwZGF0ZSAoc2NoZWR1bGVkIGZyb20gYSBsYXlvdXQgZWZmZWN0KS5cbiAgICAgKlxuICAgICAqIFRoZSBvdmVyYWxsIHNlcXVlbmNlIGlzOlxuICAgICAqICAgMS4gcmVuZGVyXG4gICAgICogICAyLiBjb21taXQgKGFuZCBjYWxsIGBvblJlbmRlcmAsIGBvbkNvbW1pdGApXG4gICAgICogICAzLiBjaGVjayBmb3IgbmVzdGVkIHVwZGF0ZXNcbiAgICAgKiAgIDQuIGZsdXNoIHBhc3NpdmUgZWZmZWN0cyAoYW5kIGNhbGwgYG9uUG9zdENvbW1pdGApXG4gICAgICpcbiAgICAgKiBOZXN0ZWQgdXBkYXRlcyBhcmUgaWRlbnRpZmllZCBpbiBzdGVwIDMgYWJvdmUsXG4gICAgICogYnV0IHN0ZXAgNCBzdGlsbCBhcHBsaWVzIHRvIHRoZSB3b3JrIHRoYXQgd2FzIGp1c3QgY29tbWl0dGVkLlxuICAgICAqIFdlIHVzZSB0d28gZmxhZ3MgdG8gdHJhY2sgbmVzdGVkIHVwZGF0ZXMgdGhlbjpcbiAgICAgKiBvbmUgdHJhY2tzIHdoZXRoZXIgdGhlIHVwY29taW5nIHVwZGF0ZSBpcyBhIG5lc3RlZCB1cGRhdGUsXG4gICAgICogYW5kIHRoZSBvdGhlciB0cmFja3Mgd2hldGhlciB0aGUgY3VycmVudCB1cGRhdGUgd2FzIGEgbmVzdGVkIHVwZGF0ZS5cbiAgICAgKiBUaGUgZmlyc3QgdmFsdWUgZ2V0cyBzeW5jZWQgdG8gdGhlIHNlY29uZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgKi9cblxuICAgIHZhciBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBpc0N1cnJlbnRVcGRhdGVOZXN0ZWQoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVwZGF0ZUlzTmVzdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtOZXN0ZWRVcGRhdGVTY2hlZHVsZWQoKSB7XG4gICAgICB7XG4gICAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXROZXN0ZWRVcGRhdGVGbGFnKCkge1xuICAgICAge1xuICAgICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3luY05lc3RlZFVwZGF0ZUZsYWcoKSB7XG4gICAgICB7XG4gICAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9IG5lc3RlZFVwZGF0ZVNjaGVkdWxlZDtcbiAgICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgICAgIHJldHVybiBjb21taXRUaW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG4gICAgICBjb21taXRUaW1lID0gbm93KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdygpO1xuXG4gICAgICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgICAgICBmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBub3coKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyhmaWJlcikge1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgICAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgICAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmIChsYXlvdXRFZmZlY3RTdGFydFRpbWUgPj0gMCkge1xuICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIGxheW91dEVmZmVjdFN0YXJ0VGltZTtcbiAgICAgICAgbGF5b3V0RWZmZWN0U3RhcnRUaW1lID0gLTE7IC8vIFN0b3JlIGR1cmF0aW9uIG9uIHRoZSBuZXh0IG5lYXJlc3QgUHJvZmlsZXIgYW5jZXN0b3JcbiAgICAgICAgLy8gT3IgdGhlIHJvb3QgKGZvciB0aGUgRGV2VG9vbHMgUHJvZmlsZXIgdG8gcmVhZClcblxuICAgICAgICB2YXIgcGFyZW50RmliZXIgPSBmaWJlci5yZXR1cm47XG5cbiAgICAgICAgd2hpbGUgKHBhcmVudEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICAgIHZhciByb290ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICByb290LmVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIHBhcmVudFN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICBpZiAocGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA+PSAwKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZTtcbiAgICAgICAgcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA9IC0xOyAvLyBTdG9yZSBkdXJhdGlvbiBvbiB0aGUgbmV4dCBuZWFyZXN0IFByb2ZpbGVyIGFuY2VzdG9yXG4gICAgICAgIC8vIE9yIHRoZSByb290IChmb3IgdGhlIERldlRvb2xzIFByb2ZpbGVyIHRvIHJlYWQpXG5cbiAgICAgICAgdmFyIHBhcmVudEZpYmVyID0gZmliZXIucmV0dXJuO1xuXG4gICAgICAgIHdoaWxlIChwYXJlbnRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgICB2YXIgcm9vdCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChwYXJlbnRTdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBEZXRhY2hlZCBmaWJlcnMgaGF2ZSB0aGVpciBzdGF0ZSBub2RlIGNsZWFyZWQgb3V0LlxuICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHJldHVybiBwb2ludGVyIGlzIGFsc28gY2xlYXJlZCBvdXQsXG4gICAgICAgICAgICAgICAgLy8gc28gd2Ugd29uJ3QgYmUgYWJsZSB0byByZXBvcnQgdGhlIHRpbWUgc3BlbnQgaW4gdGhpcyBQcm9maWxlcidzIHN1YnRyZWUuXG4gICAgICAgICAgICAgICAgcGFyZW50U3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKSB7XG4gICAgICBsYXlvdXRFZmZlY3RTdGFydFRpbWUgPSBub3coKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydFBhc3NpdmVFZmZlY3RUaW1lcigpIHtcbiAgICAgIHBhc3NpdmVFZmZlY3RTdGFydFRpbWUgPSBub3coKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gICAgICAvLyBhZnRlciB3ZSByZXJlbmRlci4gVGhpcyBpcyB1c2VkIGFzIGEgaGVscGVyIGluIHNwZWNpYWwgY2FzZXNcbiAgICAgIC8vIHdoZXJlIHdlIHNob3VsZCBjb3VudCB0aGUgd29yayBvZiBtdWx0aXBsZSBwYXNzZXMuXG4gICAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG4gICAgICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICAgICAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICAgICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuICAgICAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFzZVByb3BzO1xuICAgIH1cblxuICAgIHZhciBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQ7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbiAgICB2YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG4gICAgdmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcztcbiAgICB2YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuICAgIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2s7XG5cbiAgICB7XG4gICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTsgLy8gVGhpcyBpcyBzbyBncm9zcyBidXQgaXQncyBhdCBsZWFzdCBub24tY3JpdGljYWwgYW5kIGNhbiBiZSByZW1vdmVkIGlmXG4gICAgICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gICAgICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gICAgICAvLyAuLi4pKSB3aGljaCBvdGhlcndpc2UgdGhyb3dzIGEgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYSBmdW5jdGlvblwiXG4gICAgICAvLyBleGNlcHRpb24uXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmYWtlSW50ZXJuYWxJbnN0YW5jZSwgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dFwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IFwiICtcbiAgICAgICAgICAgICAgXCJtZWFucyB5b3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgYW5kIGFyZSBhdHRlbXB0aW5nIHRvIG5lc3QgXCIgK1xuICAgICAgICAgICAgICBcImEgUmVhY3QgMTUgdHJlZSBpbnNpZGUgYSBSZWFjdCAxNiB0cmVlIHVzaW5nIFwiICtcbiAgICAgICAgICAgICAgXCJ1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgXCIgK1xuICAgICAgICAgICAgICBcInRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoIFwiICtcbiAgICAgICAgICAgICAgXCJ0byBSZWFjdERPTS5jcmVhdGVQb3J0YWwpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleSA9IGNhbGxlck5hbWUgKyBcIl9cIiArIGNhbGxiYWNrO1xuXG4gICAgICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBcIiArXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgICAgY2FsbGVyTmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBcIiArXG4gICAgICAgICAgICAgICAgXCJZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuXCIsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGN0b3IsXG4gICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsXG4gICAgICBuZXh0UHJvcHNcbiAgICApIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgdmFyIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgICAgIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuICAgICAgdmFyIG1lbW9pemVkU3RhdGUgPVxuICAgICAgICBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByZXZTdGF0ZVxuICAgICAgICAgIDogYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTsgLy8gT25jZSB0aGUgdXBkYXRlIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlXG4gICAgICAvLyBiYXNlIHN0YXRlLlxuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gUXVldWUgaXMgYWx3YXlzIG5vbi1udWxsIGZvciBjbGFzc2VzXG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gICAgICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgICAgIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgICAgIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgXCJzZXRTdGF0ZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICAgICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCBcInJlcGxhY2VTdGF0ZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICAgICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgb2xkUHJvcHMsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG9sZFN0YXRlLFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICkge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgbmV4dENvbnRleHRcbiAgICAgICAgKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICAgICAgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICB7XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICAgIHZhciByZW5kZXJQcmVzZW50ID0gaW5zdGFuY2UucmVuZGVyO1xuXG4gICAgICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiB0eXBlb2YgY3Rvci5wcm90b3R5cGUucmVuZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgICAgICBcImluc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yP1wiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICAgICAgXCJpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuXCIsXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJlxuICAgICAgICAgICFpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgJiZcbiAgICAgICAgICAhaW5zdGFuY2Uuc3RhdGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcImdldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiBcIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiBcIiArXG4gICAgICAgICAgICAgIFwiRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/XCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiZcbiAgICAgICAgICAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gXCIgK1xuICAgICAgICAgICAgICBcIlVzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwicHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgXCIgK1xuICAgICAgICAgICAgICBcInByb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcImNvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgXCIgK1xuICAgICAgICAgICAgICBcInByb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlcykge1xuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiY29udGV4dFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgXCIgK1xuICAgICAgICAgICAgICAgIFwicHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGN0b3IuY29udGV4dFR5cGUgJiZcbiAgICAgICAgICAgIGN0b3IuY29udGV4dFR5cGVzICYmXG4gICAgICAgICAgICAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5hZGQoY3Rvcik7XG5cbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50U2hvdWxkVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBcIiArXG4gICAgICAgICAgICAgIFwiY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gXCIgK1xuICAgICAgICAgICAgICBcIlRoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBcIiArXG4gICAgICAgICAgICAgIFwiZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdG9yLnByb3RvdHlwZSAmJlxuICAgICAgICAgIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ICYmXG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICApIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gXCIgK1xuICAgICAgICAgICAgICBcInNob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gXCIgK1xuICAgICAgICAgICAgICBcIlBsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8IFwiQSBwdXJlIGNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gXCIgK1xuICAgICAgICAgICAgICBcIkRpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpP1wiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiBcIiArXG4gICAgICAgICAgICAgIFwiSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsIFwiICtcbiAgICAgICAgICAgICAgXCJ1c2UgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpLiBJZiB5b3UgbWVhbnQgdG8gZmV0Y2ggZGF0YSBvciBcIiArXG4gICAgICAgICAgICAgIFwicnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcImNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT9cIixcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpP1wiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGFzTXV0YXRlZFByb3BzID0gaW5zdGFuY2UucHJvcHMgIT09IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gdW5kZWZpbmVkICYmIGhhc011dGF0ZWRQcm9wcykge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCIlcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyBcIiArXG4gICAgICAgICAgICAgIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2UuZGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIlNldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIiArXG4gICAgICAgICAgICAgIFwiIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuXCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKVxuICAgICAgICApIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCBcIiArXG4gICAgICAgICAgICAgIFwiYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIFwiICtcbiAgICAgICAgICAgICAgXCJhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC5cIixcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgXCIgK1xuICAgICAgICAgICAgICBcImFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLlwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgJiYgKHR5cGVvZiBzdGF0ZSAhPT0gXCJvYmplY3RcIiB8fCBpc0FycmF5KHN0YXRlKSkpIHtcbiAgICAgICAgICBlcnJvcihcIiVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbFwiLCBuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gXCJvYmplY3RcIlxuICAgICAgICApIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBcIiArXG4gICAgICAgICAgICAgIFwidXNlIGdldENoaWxkQ29udGV4dCgpLlwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZS51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICAgICAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIHtcbiAgICAgICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gICAgICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKFwiY29udGV4dFR5cGVcIiBpbiBjdG9yKSB7XG4gICAgICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHxcbiAgICAgICAgICAgIChjb250ZXh0VHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgIGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgJiZcbiAgICAgICAgICAgICAgY29udGV4dFR5cGUuX2NvbnRleHQgPT09IHVuZGVmaW5lZCk7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKGN0b3IpO1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvIFwiICtcbiAgICAgICAgICAgICAgICBcInRyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgXCIgKyB0eXBlb2YgY29udGV4dFR5cGUgKyBcIi5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD9cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD9cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID1cbiAgICAgICAgICAgICAgICBcIiBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7XCIgK1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgIFwifS5cIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMgZGVmaW5lcyBhbiBpbnZhbGlkIGNvbnRleHRUeXBlLiBcIiArXG4gICAgICAgICAgICAgICAgXCJjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lc1wiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIixcbiAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09IFwib2JqZWN0XCIgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgICAgIHZhciBjb250ZXh0VHlwZXMgPSBjdG9yLmNvbnRleHRUeXBlcztcbiAgICAgICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPVxuICAgICAgICAgIGNvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyXG4gICAgICAgICAgPyBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpXG4gICAgICAgICAgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG4gICAgICB7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGF0ZSA9ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gaW5zdGFuY2Uuc3RhdGVcbiAgICAgICAgICA6IG51bGwpO1xuICAgICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgc3RhdGUgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyBcIiArXG4gICAgICAgICAgICAgICAgXCIlcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSBcIiArXG4gICAgICAgICAgICAgICAgXCJhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLlwiLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogXCJ1bmRlZmluZWRcIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAgICAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAgICAgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIG1ldGhvZHMgdGhvdWdoLlxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSBcImNvbXBvbmVudFdpbGxNb3VudFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50XCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PVxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IFwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiO1xuXG4gICAgICAgICAgICB2YXIgbmV3QXBpTmFtZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgPyBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpXCJcbiAgICAgICAgICAgICAgICA6IFwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKVwiO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfY29tcG9uZW50TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICBcIiVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICBcIlRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcblwiICtcbiAgICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlc1wiLFxuICAgICAgICAgICAgICAgIF9jb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgIG5ld0FwaU5hbWUsXG4gICAgICAgICAgICAgICAgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogXCJcIixcbiAgICAgICAgICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWVcbiAgICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6IFwiXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgICAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuICAgICAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gICAgICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkU3RhdGUgIT09IGluc3RhbmNlLnN0YXRlKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzIFwiICtcbiAgICAgICAgICAgICAgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgK1xuICAgICAgICAgICAgICBcImNvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIGluc3RhbmNlLnN0YXRlLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPVxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gXCIgK1xuICAgICAgICAgICAgICAgIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgK1xuICAgICAgICAgICAgICAgIFwiY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSxcbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSAvLyBJbnZva2VzIHRoZSBtb3VudCBsaWZlLWN5Y2xlcyBvbiBhIHByZXZpb3VzbHkgbmV2ZXIgcmVuZGVyZWQgaW5zdGFuY2UuXG5cbiAgICBmdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICAgICAge1xuICAgICAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGluc3RhbmNlLnJlZnMgPSB7fTtcbiAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSBcIm9iamVjdFwiICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICAgICAgaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBuZXdQcm9wcykge1xuICAgICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8IFwiQ29tcG9uZW50XCI7XG5cbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSBcIiArXG4gICAgICAgICAgICAgICAgXCJiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBcIiArXG4gICAgICAgICAgICAgICAgXCJJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LlwiLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3RvcixcbiAgICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsXG4gICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgfSAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICApIHtcbiAgICAgICAgY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpOyAvLyBJZiB3ZSBoYWQgYWRkaXRpb25hbCBzdGF0ZSB1cGRhdGVzIGR1cmluZyB0aGlzIGxpZmUtY3ljbGUsIGxldCdzXG4gICAgICAgIC8vIHByb2Nlc3MgdGhlbSBub3cuXG5cbiAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGUgfCBMYXlvdXRTdGF0aWM7XG4gICAgICB9XG5cbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgY3RvcixcbiAgICAgIG5ld1Byb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICAgICAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgICAgIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICAgICAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gXCJvYmplY3RcIiAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGN0b3IsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9XG4gICAgICAgIHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09IFwiZnVuY3Rpb25cIjsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAgICAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgICAgIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gICAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgICAgIGlmIChcbiAgICAgICAgIWhhc05ld0xpZmVjeWNsZXMgJiZcbiAgICAgICAgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICkge1xuICAgICAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgICAgIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB2YXIgbmV3U3RhdGUgPSAoaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZSk7XG4gICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG9sZFByb3BzID09PSBuZXdQcm9wcyAmJlxuICAgICAgICBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiZcbiAgICAgICAgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiZcbiAgICAgICAgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgICAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGUgfCBMYXlvdXRTdGF0aWM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGN0b3IsXG4gICAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLFxuICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICk7XG4gICAgICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3VsZFVwZGF0ZSA9XG4gICAgICAgIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fFxuICAgICAgICBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdG9yLFxuICAgICAgICAgIG9sZFByb3BzLFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICk7XG5cbiAgICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFzTmV3TGlmZWN5Y2xlcyAmJlxuICAgICAgICAgICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlIHwgTGF5b3V0U3RhdGljO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBNb3VudExheW91dERldjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZSB8IExheW91dFN0YXRpYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gICAgICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgICAgICAvLyBtZW1vaXplZCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gICAgICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuICAgICAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICAgIH0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgbmV3UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgIHZhciBvbGRQcm9wcyA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlXG4gICAgICAgICAgPyB1bnJlc29sdmVkT2xkUHJvcHNcbiAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gICAgICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgICAgIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICAgICAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gXCJvYmplY3RcIiAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGN0b3IsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9XG4gICAgICAgIHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09IFwiZnVuY3Rpb25cIjsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAgICAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgICAgIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gICAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgICAgIGlmIChcbiAgICAgICAgIWhhc05ld0xpZmVjeWNsZXMgJiZcbiAgICAgICAgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzICE9PSB1bnJlc29sdmVkTmV3UHJvcHMgfHxcbiAgICAgICAgICBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dFxuICAgICAgICApIHtcbiAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICAgICAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IChpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlKTtcbiAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiZcbiAgICAgICAgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmXG4gICAgICAgICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmXG4gICAgICAgICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgJiZcbiAgICAgICAgIWVuYWJsZUxhenlDb250ZXh0UHJvcGFnYXRpb25cbiAgICAgICkge1xuICAgICAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAgICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgICAgICBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICAgIG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdG9yLFxuICAgICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxcbiAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICApO1xuICAgICAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG91bGRVcGRhdGUgPVxuICAgICAgICBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHxcbiAgICAgICAgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3RvcixcbiAgICAgICAgICBvbGRQcm9wcyxcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICBvbGRTdGF0ZSxcbiAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICApIHx8IC8vIFRPRE86IEluIHNvbWUgY2FzZXMsIHdlJ2xsIGVuZCB1cCBjaGVja2luZyBpZiBjb250ZXh0IGhhcyBjaGFuZ2VkIHR3aWNlLFxuICAgICAgICAvLyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAgaGFzIGJlZW4gY2FsbGVkLiBOb3QgaWRlYWwsXG4gICAgICAgIC8vIGJ1dCBJJ20gbG9hdGggdG8gcmVmYWN0b3IgdGhpcyBmdW5jdGlvbi4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIG1lbW9pemVkXG4gICAgICAgIC8vIGNvbXBvbmVudHMgc28gaXQncyBub3QgdGhhdCBjb21tb24uXG4gICAgICAgIGVuYWJsZUxhenlDb250ZXh0UHJvcGFnYXRpb247XG5cbiAgICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFzTmV3TGlmZWN5Y2xlcyAmJlxuICAgICAgICAgICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShcbiAgICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgICAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICAgIG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgICAgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAgICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAgICAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cbiAgICAgIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gICAgICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlKSB7XG4gICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyB0aHJvd25cbiAgICAgIC8vIHNvIHRoZSBzdGFjayBpcyBhY2N1cmF0ZS5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKSxcbiAgICAgICAgZGlnZXN0OiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBkaWdlc3QsIHN0YWNrKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgc3RhY2s6IHN0YWNrICE9IG51bGwgPyBzdGFjayA6IG51bGwsXG4gICAgICAgIGRpZ2VzdDogZGlnZXN0ICE9IG51bGwgPyBkaWdlc3QgOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3RGaWJlckVycm9yRGlhbG9nXG4gICAgICAgIC5zaG93RXJyb3JEaWFsb2cgIT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkV4cGVjdGVkIFJlYWN0RmliZXJFcnJvckRpYWxvZy5zaG93RXJyb3JEaWFsb2cgdG8gYmUgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbykge1xuICAgICAgdmFyIGNhcHR1cmVkRXJyb3IgPSB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBlcnJvckluZm8uc3RhY2sgIT09IG51bGwgPyBlcnJvckluZm8uc3RhY2sgOiBcIlwiLFxuICAgICAgICBlcnJvcjogZXJyb3JJbmZvLnZhbHVlLFxuICAgICAgICBlcnJvckJvdW5kYXJ5OlxuICAgICAgICAgIGJvdW5kYXJ5ICE9PSBudWxsICYmIGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnRcbiAgICAgICAgICAgID8gYm91bmRhcnkuc3RhdGVOb2RlXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0RmliZXJFcnJvckRpYWxvZy5zaG93RXJyb3JEaWFsb2coXG4gICAgICAgIGNhcHR1cmVkRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgICAgIC8vIFRoaXMgZW5hYmxlcyByZW5kZXJlcnMgbGlrZSBSZWFjdE5hdGl2ZSB0byBiZXR0ZXIgbWFuYWdlIHJlZGJveCBiZWhhdmlvci5cblxuICAgICAgICBpZiAobG9nRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgICAgIGlmICh0cnVlKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IGVycm9ySW5mby5zb3VyY2U7XG4gICAgICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiBcIlwiOyAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgICAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSAvLyBUaGUgZXJyb3IgaXMgZmF0YWwuIFNpbmNlIHRoZSBzaWxlbmNpbmcgbWlnaHQgaGF2ZVxuICAgICAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicm93c2VyIHdvdWxkIGhhdmUgc2lsZW5jZWQgdGhlIG9yaWdpbmFsIGVycm9yXG4gICAgICAgICAgICAvLyBzbyB3ZSdsbCBwcmludCBpdCBmaXJzdCwgYW5kIHRoZW4gcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuXG4gICAgICAgICAgICBjb25zb2xlW1wiZXJyb3JcIl0oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgICAgIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBibG9jaywgc2VlOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMzODRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHNvdXJjZSA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoc291cmNlKSA6IG51bGw7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgPyBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICtcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiPiBjb21wb25lbnQ6XCJcbiAgICAgICAgICAgIDogXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czpcIjtcbiAgICAgICAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7XG5cbiAgICAgICAgICBpZiAoYm91bmRhcnkudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPVxuICAgICAgICAgICAgICBcIkNvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcblwiICtcbiAgICAgICAgICAgICAgXCJWaXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZXJyb3ItYm91bmRhcmllcyB0byBsZWFybiBtb3JlIGFib3V0IGVycm9yIGJvdW5kYXJpZXMuXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBlcnJvckJvdW5kYXJ5TmFtZSA9XG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoYm91bmRhcnkpIHx8IFwiQW5vbnltb3VzXCI7XG4gICAgICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9XG4gICAgICAgICAgICAgIFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggXCIgK1xuICAgICAgICAgICAgICAoXCJ1c2luZyB0aGUgZXJyb3IgYm91bmRhcnkgeW91IHByb3ZpZGVkLCBcIiArXG4gICAgICAgICAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgK1xuICAgICAgICAgICAgICAgIFwiLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY29tYmluZWRNZXNzYWdlID1cbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVNZXNzYWdlICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2sgK1xuICAgICAgICAgICAgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICAoXCJcIiArIGVycm9yQm91bmRhcnlNZXNzYWdlKTsgLy8gSW4gZGV2ZWxvcG1lbnQsIHdlIHByb3ZpZGUgb3VyIG93biBtZXNzYWdlIHdpdGgganVzdCB0aGUgY29tcG9uZW50IHN0YWNrLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgICAgICAvLyBoYXMgYWxyZWFkeSBwcmludGVkIGl0LiBFdmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBzd2FsbG93cyB0aGUgZXJyb3IsIGl0IGlzIHN0aWxsXG4gICAgICAgICAgLy8gZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIHRoYW5rcyB0byB0aGUgREVWLW9ubHkgZmFrZSBldmVudCB0cmljayBpbiBSZWFjdEVycm9yVXRpbHMuXG5cbiAgICAgICAgICBjb25zb2xlW1wiZXJyb3JcIl0oY29tYmluZWRNZXNzYWdlKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAgICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgICAgIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gICAgICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgICAgIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgICAgICBlbGVtZW50OiBudWxsXG4gICAgICB9O1xuICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcihlcnJvcik7XG4gICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdXBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICAgICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IkMSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgICAgIC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb25lcyBhbHJlYWR5IGZhaWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgICAgICAvLyBub3QgZGVmaW5lZC5cbiAgICAgICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2s6IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiBcIlwiXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgICAgICAvLyB0aGVuIGl0IG5lZWRzIHRvIGNhbGwgc2V0U3RhdGUgdG8gcmVjb3ZlciBmcm9tIGVycm9ycy5cbiAgICAgICAgICAgICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGlzIHNjaGVkdWxlZCB0aGVuIHRoZSBib3VuZGFyeSB3aWxsIHN3YWxsb3cgdGhlIGVycm9yLlxuICAgICAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgXCIlczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuXCIsXG4gICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRDb21wb25lbnQoc291cmNlRmliZXIsIHJvb3RSZW5kZXJMYW5lcykge1xuICAgICAgLy8gQSBsZWdhY3kgbW9kZSBTdXNwZW5zZSBxdWlyaywgb25seSByZWxldmFudCB0byBob29rIGNvbXBvbmVudHMuXG5cbiAgICAgIHZhciB0YWcgPSBzb3VyY2VGaWJlci50YWc7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKHNvdXJjZUZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSAmJlxuICAgICAgICAodGFnID09PSBGdW5jdGlvbkNvbXBvbmVudCB8fFxuICAgICAgICAgIHRhZyA9PT0gRm9yd2FyZFJlZiB8fFxuICAgICAgICAgIHRhZyA9PT0gU2ltcGxlTWVtb0NvbXBvbmVudClcbiAgICAgICkge1xuICAgICAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gY3VycmVudFNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrU3VzcGVuc2VCb3VuZGFyeVNob3VsZENhcHR1cmUoXG4gICAgICBzdXNwZW5zZUJvdW5kYXJ5LFxuICAgICAgcmV0dXJuRmliZXIsXG4gICAgICBzb3VyY2VGaWJlcixcbiAgICAgIHJvb3QsXG4gICAgICByb290UmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgbWFya3MgYSBTdXNwZW5zZSBib3VuZGFyeSBzbyB0aGF0IHdoZW4gd2UncmUgdW53aW5kaW5nIHRoZSBzdGFjayxcbiAgICAgIC8vIGl0IGNhcHR1cmVzIHRoZSBzdXNwZW5kZWQgXCJleGNlcHRpb25cIiBhbmQgZG9lcyBhIHNlY29uZCAoZmFsbGJhY2spIHBhc3MuXG4gICAgICBpZiAoKHN1c3BlbnNlQm91bmRhcnkubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIExlZ2FjeSBNb2RlIFN1c3BlbnNlXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZSBib3VuZGFyeSBpcyBpbiBsZWdhY3kgbW9kZSwgd2Ugc2hvdWxkICpub3QqXG4gICAgICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgICAgICAvLyBudWxsIGFuZCBrZWVwIHJlbmRlcmluZy4gV2hlbiB0aGUgU3VzcGVuc2UgYm91bmRhcnkgY29tcGxldGVzLFxuICAgICAgICAvLyB3ZSdsbCBkbyBhIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2suXG4gICAgICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5ID09PSByZXR1cm5GaWJlcikge1xuICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBzdXNwZW5kZWQgd2hpbGUgcmVjb25jaWxpbmcgdGhlIGNoaWxkcmVuIG9mXG4gICAgICAgICAgLy8gYSBTdXNwZW5zZSBib3VuZGFyeSdzIGlubmVyIE9mZnNjcmVlbiB3cmFwcGVyIGZpYmVyLiBUaGlzIGhhcHBlbnNcbiAgICAgICAgICAvLyB3aGVuIGEgUmVhY3QubGF6eSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuICAgICAgICAgIC8vIFN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcmllcyBhcmUgaW1wbGVtZW50ZWQgYXMgbXVsdGlwbGUgZmliZXJzLCBidXQgdGhleVxuICAgICAgICAgIC8vIGFyZSBhIHNpbmdsZSBjb25jZXB0dWFsIHVuaXQuIFRoZSBsZWdhY3kgbW9kZSBiZWhhdmlvciB3aGVyZSB3ZVxuICAgICAgICAgIC8vIHByZXRlbmQgdGhlIHN1c3BlbmRlZCBmaWJlciBjb21taXR0ZWQgYXMgYG51bGxgIHdvbid0IHdvcmssXG4gICAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlIFwic3VzcGVuZGVkXCIgZmliZXIgaXMgdGhlIGlubmVyXG4gICAgICAgICAgLy8gT2Zmc2NyZWVuIHdyYXBwZXIuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBCZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgYm91bmRhcnkgaGF2ZW4ndCBzdGFydGVkIHJlbmRlcmluZ1xuICAgICAgICAgIC8vIHlldCAoaS5lLiBub3RoaW5nIGluIHRoZSB0cmVlIGhhcyBwYXJ0aWFsbHkgcmVuZGVyZWQpIHdlIGNhblxuICAgICAgICAgIC8vIHN3aXRjaCB0byB0aGUgcmVndWxhciwgY29uY3VycmVudCBtb2RlIGJlaGF2aW9yOiBtYXJrIHRoZVxuICAgICAgICAgIC8vIGJvdW5kYXJ5IHdpdGggU2hvdWxkQ2FwdHVyZSBhbmQgZW50ZXIgdGhlIHVud2luZCBwaGFzZS5cbiAgICAgICAgICBzdXNwZW5zZUJvdW5kYXJ5LmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2U7IC8vIFdlJ3JlIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGZpYmVyIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBjb21wbGV0ZS5cbiAgICAgICAgICAvLyBCdXQgd2Ugc2hvdWxkbid0IGNhbGwgYW55IGxpZmVjeWNsZSBtZXRob2RzIG9yIGNhbGxiYWNrcy4gUmVtb3ZlXG4gICAgICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzICY9IH4oTGlmZWN5Y2xlRWZmZWN0TWFzayB8IEluY29tcGxldGUpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U291cmNlRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudC4gQ2hhbmdlIHRoZSB0YWcgc28gaXQncyBub3QgbWlzdGFrZW4gZm9yIGFcbiAgICAgICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBpZiBpdCBpcyBkZWxldGVkLlxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgPSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIHRyeSByZW5kZXJpbmcgYWdhaW4sIHdlIHNob3VsZCBub3QgcmV1c2UgdGhlIGN1cnJlbnQgZmliZXIsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mga25vd24gdG8gYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgYSBmb3JjZSB1cGRhdGUgdG9cbiAgICAgICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKFN5bmNMYW5lKTtcbiAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCB1cGRhdGUsIFN5bmNMYW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS4gTWFyayBpdCB3aXRoIFN5bmMgcHJpb3JpdHkgdG9cbiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdXNwZW5zZUJvdW5kYXJ5O1xuICAgICAgfSAvLyBDb25maXJtZWQgdGhhdCB0aGUgYm91bmRhcnkgaXMgaW4gYSBjb25jdXJyZW50IG1vZGUgdHJlZS4gQ29udGludWVcbiAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAvL1xuICAgICAgLy8gQWZ0ZXIgdGhpcyB3ZSdsbCB1c2UgYSBzZXQgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzXG4gICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgIC8vIFRoZSBhY3R1YWwgbG9naWMgZm9yIHRoaXMgaXMgc3ByZWFkIG91dCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAvLyBhIHJvb3QsIHRoZW4gd2Ugc2hvdWxkIGFsc28gcmVzdGFydCBpZiB3ZSBnZXQgYW4gdXBkYXRlIG9yIHBpbmcgdGhhdFxuICAgICAgLy8gbWlnaHQgdW5zdXNwZW5kIGl0LCBhbmQgdmljZSB2ZXJzYS4gVGhlIG9ubHkgcmVhc29uIHRvIHN1c3BlbmQgaXNcbiAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAvLyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmVzdGFydCBvbmx5IHdoaWxlIGluIHRoZSBwZXJpb2Qgd2UncmUgc3VzcGVuZGVkLlxuICAgICAgLy9cbiAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAvLyBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gU28gd2UgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZW4uXG4gICAgICAvLyBTdXNwZW5zZSBIZXVyaXN0aWNzXG4gICAgICAvL1xuICAgICAgLy8gSWYgbm90aGluZyB0aHJldyBhIFByb21pc2Ugb3IgYWxsIHRoZSBzYW1lIGZhbGxiYWNrcyBhcmUgYWxyZWFkeSBzaG93aW5nLFxuICAgICAgLy8gdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuXG4gICAgICAvL1xuICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIHJlbmRlciBvZiBhIG5ldyB0cmVlIG9mIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gICAgICAvLyB0aG9zZSB0cmlnZ2VyIGEgZmFsbGJhY2ssIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LiBXZSB3YW50IHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgaGl0IGEgXCJEZWxheWVkXCIgY2FzZSwgc3VjaCBhcyB3aGVuIHdlJ2Qgc3dpdGNoIGZyb20gY29udGVudCBiYWNrIGludG9cbiAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAvLyB0byB0aGlzIGNhc2UuIElmIG5vbmUgaXMgZGVmaW5lZCwgSk5EIGlzIHVzZWQgaW5zdGVhZC5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgLy8gYW5vdGhlciBsZXZlbCwgYnV0IHRoZXJlJ3Mgc3RpbGwgYW4gaW5uZXIgYm91bmRhcnkgdGhhdCB3b3VsZCBzaG93IGEgZmFsbGJhY2ssXG4gICAgICAvLyB0aGVuIHdlIHN1c3BlbmQvcmVzdGFydCBmb3IgNTAwbXMgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzaG93ZWQgYSBmYWxsYmFja1xuICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAvLyBjb25zaXN0ZW50IHRyYWluIG9mIGNvbW1pdHMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhbiBvcHBvcnR1bml0eSB0byByZXN0YXJ0IHRvXG4gICAgICAvLyBnZXQgdG8gdGhlIGNvbXBsZXRlZCBzdGF0ZSBzbGlnaHRseSBlYXJsaWVyLlxuICAgICAgLy9cbiAgICAgIC8vIElmIHRoZXJlJ3MgYW1iaWd1aXR5IGR1ZSB0byBiYXRjaGluZyBpdCdzIHJlc29sdmVkIGluIHByZWZlcmVuY2Ugb2Y6XG4gICAgICAvLyAxKSBcImRlbGF5ZWRcIiwgMikgXCJpbml0aWFsIHJlbmRlclwiLCAzKSBcInJldHJ5XCIuXG4gICAgICAvL1xuICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIFwiYnVzeVwiIHN0YXRlIGRvZXNuJ3QgZ2V0IGZvcmNlIGNvbW1pdHRlZC4gV2Ugd2FudCB0b1xuICAgICAgLy8gZW5zdXJlIHRoYXQgbmV3IGluaXRpYWwgbG9hZGluZyBzdGF0ZXMgY2FuIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuXG4gICAgICBzdXNwZW5zZUJvdW5kYXJ5LmZsYWdzIHw9IFNob3VsZENhcHR1cmU7IC8vIFRPRE86IEkgdGhpbmsgd2UgY2FuIHJlbW92ZSB0aGlzLCBzaW5jZSB3ZSBub3cgdXNlIGBEaWRDYXB0dXJlYCBpblxuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlIHRvIHByZXZlbnQgYW4gZWFybHkgYmFpbG91dC5cblxuICAgICAgc3VzcGVuc2VCb3VuZGFyeS5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgIHJldHVybiBzdXNwZW5zZUJvdW5kYXJ5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKFxuICAgICAgcm9vdCxcbiAgICAgIHJldHVybkZpYmVyLFxuICAgICAgc291cmNlRmliZXIsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTtcblxuICAgICAge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgd29yayBzdGlsbCwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgdXBkYXRlcnNcbiAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB3YWtlYWJsZS4gVGhlIGNvbXBvbmVudCBzdXNwZW5kZWQuXG4gICAgICAgICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG4gICAgICAgICAgcmVzZXRTdXNwZW5kZWRDb21wb25lbnQoc291cmNlRmliZXIpO1xuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQm91bmRhcnkgPSBnZXRTdXNwZW5zZUhhbmRsZXIoKTtcblxuICAgICAgICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN1c3BlbnNlQm91bmRhcnkudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5IGlzIG5vdCBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjaywgbWFya1xuICAgICAgICAgICAgICAgIC8vIHRoZSBpbi1wcm9ncmVzcyByZW5kZXIgYXMgc3VzcGVuZGVkLiBXZSB0cnkgdG8gcGVyZm9ybSB0aGlzIGxvZ2ljXG4gICAgICAgICAgICAgICAgLy8gYXMgc29vbiBhcyBzb29uIGFzIHBvc3NpYmxlIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzbyB0aGUgd29ya1xuICAgICAgICAgICAgICAgIC8vIGxvb3AgY2FuIGtub3cgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCdzIE9LIHRvIHN3aXRjaCB0byBvdGhlciB0YXNrcyxcbiAgICAgICAgICAgICAgICAvLyBvciB3aGV0aGVyIGl0IGNhbiB3YWl0IGZvciBkYXRhIHRvIHJlc29sdmUgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogTW9zdCBvZiB0aGVzZSBjaGVja3MgYXJlIGFscmVhZHkgcGVyZm9ybWVkIHdoZW4gZW50ZXJpbmcgYVxuICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlIGJvdW5kYXJ5LiBXZSBzaG91bGQgdHJhY2sgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFjayBzb1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gcmVjb21wdXRlIGl0IG9uIGRlbWFuZC4gVGhpcyB3b3VsZCBhbHNvIGFsbG93IHVzXG4gICAgICAgICAgICAgICAgLy8gdG8gdW5pZnkgd2l0aCBgdXNlYCB3aGljaCBuZWVkcyB0byBwZXJmb3JtIHRoaXMgbG9naWMgZXZlbiBzb29uZXIsXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIGB0aHJvd0V4Y2VwdGlvbmAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChnZXRTaGVsbEJvdW5kYXJ5KCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuZGVkIGluIHRoZSBcInNoZWxsXCIgb2YgdGhlIGFwcC4gVGhpcyBpcyBhbiB1bmRlc2lyYWJsZVxuICAgICAgICAgICAgICAgICAgICAvLyBsb2FkaW5nIHN0YXRlLiBXZSBzaG91bGQgYXZvaWQgY29tbWl0dGluZyB0aGlzIHRyZWUuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHN1c3BlbmRlZCBkZWVwZXIgdGhhbiB0aGUgc2hlbGwsIHdlIGRvbid0IG5lZWQgdG8gZGVsYXlcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNvbW1taXQuIEhvd2V2ZXIsIHdlIHN0aWxsIGNhbGwgcmVuZGVyRGlkU3VzcGVuZCBpZiB0aGlzIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJvdW5kYXJ5LCB0byB0ZWxsIHRoZSB3b3JrIGxvb3AgdGhhdCBhIG5ldyBmYWxsYmFjayBoYXNcbiAgICAgICAgICAgICAgICAgICAgLy8gYXBwZWFyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGVvcmV0aWNhbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSB0aGlzIGJyYW5jaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBjdXJyZW50bHkgdXNlZCBmb3IgdHdvIHRoaW5nczogMSkgdG8gdGhyb3R0bGUgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIGFwcGVhcmFuY2Ugb2Ygc3VjY2Vzc2l2ZSBsb2FkaW5nIHN0YXRlcywgYW5kIDIpIGluXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNoaWxkcmVuIGluY2x1ZGUgYW55XG4gICAgICAgICAgICAgICAgICAgIC8vIHBlbmRpbmcgZmFsbGJhY2tzLiBGb3IgMSwgd2Ugc2hvdWxkIGFwcGx5IHRocm90dGxpbmcgdG8gYWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXMsIG5vdCBqdXN0IG9uZXMgdGhhdCByZW5kZXIgYW4gYWRkaXRpb25hbCBmYWxsYmFjay4gRm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIDIsIHdlIHNob3VsZCBjaGVjayBzdWJ0cmVlRmxhZ3MgaW5zdGVhZC4gVGhlbiB3ZSBjYW4gZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgYnJhbmNoLlxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHN1c3BlbnNlQm91bmRhcnkuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyAmPSB+Rm9yY2VDbGllbnRSZW5kZXI7XG4gICAgICAgICAgICAgICAgbWFya1N1c3BlbnNlQm91bmRhcnlTaG91bGRDYXB0dXJlKFxuICAgICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeSxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTsgLy8gUmV0cnkgbGlzdGVuZXJcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmYWxsYmFjayBkb2VzIGNvbW1pdCwgd2UgbmVlZCB0byBhdHRhY2ggYSBkaWZmZXJlbnQgdHlwZSBvZlxuICAgICAgICAgICAgICAgIC8vIGxpc3RlbmVyLiBUaGlzIG9uZSBzY2hlZHVsZXMgYW4gdXBkYXRlIG9uIHRoZSBTdXNwZW5zZSBib3VuZGFyeSB0b1xuICAgICAgICAgICAgICAgIC8vIHR1cm4gdGhlIGZhbGxiYWNrIHN0YXRlIG9mZi5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIFN0YXNoIHRoZSB3YWtlYWJsZSBvbiB0aGUgYm91bmRhcnkgZmliZXIgc28gd2UgY2FuIGFjY2VzcyBpdCBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyBjb21taXQgcGhhc2UuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSB3YWtlYWJsZSByZXNvbHZlcywgd2UnbGwgYXR0ZW1wdCB0byByZW5kZXIgdGhlIGJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgLy8gYWdhaW4gKFwicmV0cnlcIikuXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFN1c3BlbnNleSByZXNvdXJjZS4gV2UgZG8gbm90IGF0dGFjaCByZXRyeVxuICAgICAgICAgICAgICAgIC8vIGxpc3RlbmVycyB0byB0aGVzZSwgYmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZW0gZm9yXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLiBPbmx5IGZvciBjb21taXR0aW5nLiBJbnN0ZWFkLCBpZiBhIGZhbGxiYWNrIGNvbW1pdHNcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIG9ubHkgdGhpbmcgdGhhdCBzdXNwZW5kZWQgd2FzIGEgU3VzcGVuc2V5IHJlc291cmNlLCB3ZVxuICAgICAgICAgICAgICAgIC8vIHJldHJ5IGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlZmFjdG9yIHRocm93RXhjZXB0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR5cGVcbiAgICAgICAgICAgICAgICAvLyBjaGVjay4gVGhlIGNhbGxlciBhbHJlYWR5IGtub3dzIHdoYXQgdGhlIGNhdXNlIHdhcy5cblxuICAgICAgICAgICAgICAgIHZhciBpc1N1c3BlbnNleVJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgIHdha2VhYmxlID09PSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGU7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNTdXNwZW5zZXlSZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBTY2hlZHVsZVJldHJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmV0cnlRdWV1ZSA9IHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZXRyeVF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWUgPSBuZXcgU2V0KFt3YWtlYWJsZV0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cnlRdWV1ZS5hZGQod2FrZWFibGUpO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSBvbmx5IGF0dGFjaCBwaW5nIGxpc3RlbmVycyBpbiBjb25jdXJyZW50IG1vZGUuIExlZ2FjeVxuICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuc2UgYWx3YXlzIGNvbW1pdHMgZmFsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZXJlIGFyZVxuICAgICAgICAgICAgICAgICAgLy8gbm8gcGluZ3MuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5Lm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuc2VCb3VuZGFyeS5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgICAgICAgICAgdmFyIF9pc1N1c3BlbnNleVJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgd2FrZWFibGUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKF9pc1N1c3BlbnNleVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2NoZWR1bGVSZXRyeTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzY3JlZW5RdWV1ZSA9IHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNjcmVlblF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld09mZnNjcmVlblF1ZXVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeVF1ZXVlOiBuZXcgU2V0KFt3YWtlYWJsZV0pXG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZUJvdW5kYXJ5LnVwZGF0ZVF1ZXVlID0gbmV3T2Zmc2NyZWVuUXVldWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXRyeVF1ZXVlID0gb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChfcmV0cnlRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZSA9IG5ldyBTZXQoW3dha2VhYmxlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZXRyeVF1ZXVlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS50YWcgK1xuICAgICAgICAgICAgICAgIFwiKS4gVGhpcyBcIiArXG4gICAgICAgICAgICAgICAgXCJpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBVbmxlc3MgdGhpcyBpcyBhIHN5bmMgdXBkYXRlLCB0aGlzIGlzIE9LLlxuICAgICAgICAgICAgLy8gV2UgY2FuIHN1c3BlbmQgYW5kIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG4gICAgICAgICAgICBpZiAocm9vdC50YWcgPT09IENvbmN1cnJlbnRSb290KSB7XG4gICAgICAgICAgICAgIC8vIEluIGEgY29uY3VycmVudCByb290LCBzdXNwZW5kaW5nIHdpdGhvdXQgYSBTdXNwZW5zZSBib3VuZGFyeSBpc1xuICAgICAgICAgICAgICAvLyBhbGxvd2VkLiBJdCB3aWxsIHN1c3BlbmQgaW5kZWZpbml0ZWx5IHdpdGhvdXQgY29tbWl0dGluZy5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciBkaXNjcmV0ZSB1cGRhdGVzPyBXaGF0XG4gICAgICAgICAgICAgIC8vIGFib3V0IGZsdXNoU3luYz8gTWF5YmUgaXQgc2hvdWxkIHB1dCB0aGUgdHJlZSBpbnRvIGFuIGluZXJ0IHN0YXRlLFxuICAgICAgICAgICAgICAvLyBhbmQgcG90ZW50aWFsbHkgbG9nIGEgd2FybmluZy4gUmV2aXNpdCB0aGlzIGZvciBhIGZ1dHVyZSByZWxlYXNlLlxuICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSW4gYSBsZWdhY3kgcm9vdCwgc3VzcGVuZGluZyB3aXRob3V0IGEgYm91bmRhcnkgaXMgYWx3YXlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICB2YXIgdW5jYXVnaHRTdXNwZW5zZUVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgc3VzcGVuZGVkIHdoaWxlIHJlc3BvbmRpbmcgdG8gc3luY2hyb25vdXMgaW5wdXQuIFRoaXMgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ3aWxsIGNhdXNlIHRoZSBVSSB0byBiZSByZXBsYWNlZCB3aXRoIGEgbG9hZGluZyBpbmRpY2F0b3IuIFRvIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiZml4LCB1cGRhdGVzIHRoYXQgc3VzcGVuZCBzaG91bGQgYmUgd3JhcHBlZCBcIiArXG4gICAgICAgICAgICAgICAgICBcIndpdGggc3RhcnRUcmFuc2l0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHZhbHVlID0gdW5jYXVnaHRTdXNwZW5zZUVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGlzIGEgcmVndWxhciBlcnJvciwgbm90IGEgU3VzcGVuc2Ugd2FrZWFibGUuXG5cbiAgICAgIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgICAgIHJlbmRlckRpZEVycm9yKHZhbHVlKTsgLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAgICAgLy8gb3ZlciBhbmQgdHJhdmVyc2UgcGFyZW50IHBhdGggYWdhaW4sIHRoaXMgdGltZSB0cmVhdGluZyB0aGUgZXhjZXB0aW9uXG4gICAgICAvLyBhcyBhbiBlcnJvci5cblxuICAgICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gcmV0dXJuIGZpYmVyLCB3aGljaCBtZWFucyB0aGUgcm9vdCBlcnJvcmVkLiBUaGlzIHNob3VsZCBuZXZlclxuICAgICAgICAvLyBoYXBwZW4uIFJldHVybiBgdHJ1ZWAgdG8gdHJpZ2dlciBhIGZhdGFsIGVycm9yIChwYW5pYykuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgICAgZG8ge1xuICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgICAgIHZhciBfZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBsYW5lKTtcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBfZXJyb3JJbmZvLFxuICAgICAgICAgICAgICBsYW5lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCB1cGRhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICAgICAgdmFyIGVycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzJDEgJiZcbiAgICAgICAgICAgICAgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICAgICAgKGluc3RhbmNlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBfbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBlcnJvckluZm8sXG4gICAgICAgICAgICAgICAgX2xhbmVcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjsgLy8gQSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGF0J3MgdXNlZCB0byB1bndpbmQgdGhlIHN0YWNrIHdoZW4gYW4gdXBkYXRlIGZsb3dzXG4gICAgLy8gaW50byBhIGRlaHlkcmF0ZWQgYm91bmRhcnkuXG5cbiAgICB2YXIgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uID0gbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IuIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFJlYWN0J3MgXCIgK1xuICAgICAgICBcInNlbGVjdGl2ZSBoeWRyYXRpb24gZmVhdHVyZS4gSWYgdGhpcyBsZWFrcyBpbnRvIHVzZXJzcGFjZSwgaXQncyBhIGJ1ZyBpbiBcIiArXG4gICAgICAgIFwiUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgICB2YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcztcbiAgICB2YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbiAgICB2YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xuICAgIHZhciBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xuICAgIHZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG4gICAgdmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG4gICAgdmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyO1xuICAgIHZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcbiAgICB2YXIgZGlkV2FybkFib3V0RGVmYXVsdFByb3BzT25GdW5jdGlvbkNvbXBvbmVudDtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICAgIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IGZhbHNlO1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXIgPSB7fTtcbiAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG4gICAgICBkaWRXYXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgICAgIC8vIHdvbid0IHVwZGF0ZSBpdHMgY2hpbGQgc2V0IGJ5IGFwcGx5aW5nIG1pbmltYWwgc2lkZS1lZmZlY3RzLiBJbnN0ZWFkLFxuICAgICAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAgICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB3b3JrIGluIHByb2dyZXNzLCBpdCBtZWFucyB0aGF0XG4gICAgICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgICAgIC8vIElmIHdlIGhhZCBhbnkgcHJvZ3Jlc3NlZCB3b3JrIGFscmVhZHksIHRoYXQgaXMgaW52YWxpZCBhdCB0aGlzIHBvaW50IHNvXG4gICAgICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3JrIG9mIHJlY29uY2lsZUNoaWxkcmVuLiBJdCdzIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2VcbiAgICAgIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAgICAgLy8gYXJlIHRoZSBzYW1lLCB0aGUgb2xkIGNoaWxkIGlzIHVubW91bnRlZCBhbmQgYSBuZXcgY2hpbGQgaXMgY3JlYXRlZC5cbiAgICAgIC8vXG4gICAgICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAgICAgLy8gdGhlIGZpcnN0IHBhc3MsIHdlIHNjaGVkdWxlIGEgZGVsZXRpb24gZm9yIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbiBieVxuICAgICAgLy8gcGFzc2luZyBudWxsLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgICAgIC8vIHBhc3MgbnVsbCBpbiBwbGFjZSBvZiB3aGVyZSB3ZSB1c3VhbGx5IHBhc3MgdGhlIGN1cnJlbnQgY2hpbGQgc2V0LiBUaGlzIGhhc1xuICAgICAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXJcbiAgICAgIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBudWxsLFxuICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgICAgIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gICAgICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gICAgICB7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgICBpbm5lclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICAgICAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjsgLy8gVGhlIHJlc3QgaXMgYSBmb3JrIG9mIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50XG5cbiAgICAgIHZhciBuZXh0Q2hpbGRyZW47XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB7XG4gICAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgcmVuZGVyLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICByZWYsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJlxuICAgICAgICAgIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICAgICAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgcGxhaW4gZnVuY3Rpb24gY29tcG9uZW50IHdpdGhvdXQgZGVmYXVsdCBwcm9wcyxcbiAgICAgICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZXNvbHZlZFR5cGUsXG4gICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICAgIGlubmVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICAgICAgIFwicHJvcFwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKENvbXBvbmVudC5kZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkgfHwgXCJVbmtub3duXCI7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0RGVmYXVsdFByb3BzT25GdW5jdGlvbkNvbXBvbmVudFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIiVzOiBTdXBwb3J0IGZvciBkZWZhdWx0UHJvcHMgd2lsbCBiZSByZW1vdmVkIGZyb20gbWVtbyBjb21wb25lbnRzIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gVXNlIEphdmFTY3JpcHQgZGVmYXVsdCBwYXJhbWV0ZXJzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgICBDb21wb25lbnQudHlwZSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIGNoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgICAgY2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICAgICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgX2lubmVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAgICAgXCJwcm9wXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoX3R5cGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudENoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhpcyBpcyBhbHdheXMgZXhhY3RseSBvbmUgY2hpbGRcblxuICAgICAgdmFyIGhhc1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dCA9IGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcblxuICAgICAgaWYgKCFoYXNTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQpIHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBwcm9wcyB3aXRoIHJlc29sdmVkIGRlZmF1bHRQcm9wcyxcbiAgICAgICAgLy8gdW5saWtlIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB3aGljaCB3aWxsIGJlIHRoZSB1bnJlc29sdmVkIG9uZXMuXG4gICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgICAgICB2YXIgY29tcGFyZSA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgICAgICBjb21wYXJlID0gY29tcGFyZSAhPT0gbnVsbCA/IGNvbXBhcmUgOiBzaGFsbG93RXF1YWw7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICAgICAgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcyk7XG4gICAgICBuZXdDaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gICAgICByZXR1cm4gbmV3Q2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAgICAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAgICAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICAgICAge1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2Ugd2FybiB3aGVuIHlvdSBkZWZpbmUgcHJvcFR5cGVzIG9uIGxhenkoKVxuICAgICAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IG91dGVyTWVtb1R5cGU7XG4gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBpbml0KHBheWxvYWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBvdXRlck1lbW9UeXBlID0gbnVsbDtcbiAgICAgICAgICAgIH0gLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cblxuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgICAgIG91dGVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgKFNpbXBsZU1lbW9Db21wb25lbnQgaGFzIG5vIGRlZmF1bHRQcm9wcylcbiAgICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3V0ZXJNZW1vVHlwZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJlxuICAgICAgICAgIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZVxuICAgICAgICApIHtcbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoZSBwcm9wcyBhcmUgc2hhbGxvd2x5IGVxdWFsLiBSZXVzZSB0aGUgcHJldmlvdXMgcHJvcHMgb2JqZWN0LCBsaWtlIHdlXG4gICAgICAgICAgLy8gd291bGQgZHVyaW5nIGEgbm9ybWFsIGZpYmVyIGJhaWxvdXQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHN0cm9uZyBndWFyYW50ZWVzIHRoYXQgdGhlIHByb3BzIG9iamVjdCBpcyByZWZlcmVudGlhbGx5XG4gICAgICAgICAgLy8gZXF1YWwgZHVyaW5nIHVwZGF0ZXMgd2hlcmUgd2UgY2FuJ3QgYmFpbCBvdXQgYW55d2F5IOKAlCBsaWtlIGlmIHRoZSBwcm9wc1xuICAgICAgICAgIC8vIGFyZSBzaGFsbG93bHkgZXF1YWwsIGJ1dCB0aGVyZSdzIGEgbG9jYWwgc3RhdGUgb3IgY29udGV4dCB1cGRhdGUgaW4gdGhlXG4gICAgICAgICAgLy8gc2FtZSBiYXRjaC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEhvd2V2ZXIsIGFzIGEgcHJpbmNpcGxlLCB3ZSBzaG91bGQgYWltIHRvIG1ha2UgdGhlIGJlaGF2aW9yIGNvbnNpc3RlbnRcbiAgICAgICAgICAvLyBhY3Jvc3MgZGlmZmVyZW50IHdheXMgb2YgbWVtb2l6aW5nIGEgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgUmVhY3QubWVtb1xuICAgICAgICAgIC8vIGhhcyBhIGRpZmZlcmVudCBpbnRlcm5hbCBGaWJlciBsYXlvdXQgaWYgeW91IHBhc3MgYSBub3JtYWwgZnVuY3Rpb25cbiAgICAgICAgICAvLyBjb21wb25lbnQgKFNpbXBsZU1lbW9Db21wb25lbnQpIHZlcnN1cyBpZiB5b3UgcGFzcyBhIGRpZmZlcmVudCB0eXBlXG4gICAgICAgICAgLy8gbGlrZSBmb3J3YXJkUmVmIChNZW1vQ29tcG9uZW50KS4gQnV0IHRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuICAgICAgICAgIC8vIFdyYXBwaW5nIGEgY29tcG9uZW50IGluIGZvcndhcmRSZWYgKG9yIFJlYWN0LmxhenksIGV0Yykgc2hvdWxkbid0XG4gICAgICAgICAgLy8gYWZmZWN0IHdoZXRoZXIgdGhlIHByb3BzIG9iamVjdCBpcyByZXVzZWQgZHVyaW5nIGEgYmFpbG91dC5cblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IG5leHRQcm9wcyA9IHByZXZQcm9wcztcblxuICAgICAgICAgIGlmICghY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgICAgICAvLyBUaGUgcGVuZGluZyBsYW5lcyB3ZXJlIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBiZWdpbldvcmsuIFdlJ3JlXG4gICAgICAgICAgICAvLyBhYm91dCB0byBiYWlsIG91dCwgYnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGxhbmVzIHRoYXQgd2VyZW4ndFxuICAgICAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgICAgICAvLyByZW1haW5pbmcgdXBkYXRlcyBpcyBhY2N1bXVsYXRlZCBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgdGhlXG4gICAgICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIGFjY291bnQgZm9yIGl0IGhlcmUsIHRvby4gUmVzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGZpYmVyLlxuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgICAgIC8vIHJhdGhlciwgaXQgd3JhcHMgYXJvdW5kIGFuIGlubmVyIGNvbXBvbmVudCwgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAgICAgICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAgICAgLy8gdGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT1cbiAgICAgICAgICAgIE5vRmxhZ3MkMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgbmV4dElzRGV0YWNoZWQgPVxuICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIE9mZnNjcmVlbkRldGFjaGVkKSAhPT0gMDtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIGlmIChuZXh0UHJvcHMubW9kZSA9PT0gXCJoaWRkZW5cIiB8fCBlbmFibGVMZWdhY3lIaWRkZW4gfHwgbmV4dElzRGV0YWNoZWQpIHtcbiAgICAgICAgLy8gUmVuZGVyaW5nIGEgaGlkZGVuIHRyZWUuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MkMTtcblxuICAgICAgICBpZiAoZGlkU3VzcGVuZCkge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQgaW5zaWRlIGEgaGlkZGVuIHRyZWVcbiAgICAgICAgICAvLyBJbmNsdWRlIHRoZSBiYXNlIGxhbmVzIGZyb20gdGhlIGxhc3QgcmVuZGVyXG4gICAgICAgICAgdmFyIG5leHRCYXNlTGFuZXMgPVxuICAgICAgICAgICAgcHJldlN0YXRlICE9PSBudWxsXG4gICAgICAgICAgICAgID8gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcztcblxuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0byB0aGUgY3VycmVudCBjaGlsZHJlblxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDaGlsZCA9ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpOyAvLyBUaGUgY3VycmVudCByZW5kZXIgc3VzcGVuZGVkLCBidXQgdGhlcmUgbWF5IGJlIG90aGVyIGxhbmVzIHdpdGhcbiAgICAgICAgICAgIC8vIHBlbmRpbmcgd29yay4gV2UgY2FuJ3QgcmVhZCBgY2hpbGRMYW5lc2AgZnJvbSB0aGUgY3VycmVudCBPZmZzY3JlZW5cbiAgICAgICAgICAgIC8vIGZpYmVyIGJlY2F1c2Ugd2UgcmVzZXQgaXQgd2hlbiBpdCB3YXMgZGVmZXJyZWQ7IGhvd2V2ZXIsIHdlIGNhbiByZWFkXG4gICAgICAgICAgICAvLyB0aGUgcGVuZGluZyBsYW5lcyBmcm9tIHRoZSBjaGlsZCBmaWJlcnMuXG5cbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2hpbGRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY3VycmVudENoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICAgIG1lcmdlTGFuZXMoY3VycmVudENoaWxkTGFuZXMsIGN1cnJlbnRDaGlsZC5sYW5lcyksXG4gICAgICAgICAgICAgICAgY3VycmVudENoaWxkLmNoaWxkTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBsYW5lc1dlSnVzdEF0dGVtcHRlZCA9IG5leHRCYXNlTGFuZXM7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nQ2hpbGRMYW5lcyA9IHJlbW92ZUxhbmVzKFxuICAgICAgICAgICAgICBjdXJyZW50Q2hpbGRMYW5lcyxcbiAgICAgICAgICAgICAgbGFuZXNXZUp1c3RBdHRlbXB0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gcmVtYWluaW5nQ2hpbGRMYW5lcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgbmV4dEJhc2VMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGhvdyBPZmZzY3JlZW4gc2hvdWxkIHdvcmsgd2l0aCB0cmFuc2l0aW9ucyBpbiB0aGUgZnV0dXJlXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgICAgIGJhc2VMYW5lczogTm9MYW5lcyxcbiAgICAgICAgICAgIGNhY2hlUG9vbDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcblxuICAgICAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgICAgICAgIC8vIFdlJ3JlIGhpZGRlbiwgYW5kIHdlJ3JlIG5vdCByZW5kZXJpbmcgYXQgT2Zmc2NyZWVuLiBXZSB3aWxsIGJhaWwgb3V0XG4gICAgICAgICAgLy8gYW5kIHJlc3VtZSB0aGlzIHRyZWUgbGF0ZXIuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgT2Zmc2NyZWVuIHByaW9yaXR5XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID1cbiAgICAgICAgICAgIGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpOyAvLyBJbmNsdWRlIHRoZSBiYXNlIGxhbmVzIGZyb20gdGhlIGxhc3QgcmVuZGVyXG5cbiAgICAgICAgICB2YXIgX25leHRCYXNlTGFuZXMgPVxuICAgICAgICAgICAgcHJldlN0YXRlICE9PSBudWxsXG4gICAgICAgICAgICAgID8gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcztcblxuICAgICAgICAgIHJldHVybiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF9uZXh0QmFzZUxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzZWNvbmQgcmVuZGVyLiBUaGUgc3Vycm91bmRpbmcgdmlzaWJsZSBjb250ZW50IGhhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gY29tbWl0dGVkLiBOb3cgd2UgcmVzdW1lIHJlbmRlcmluZyB0aGUgaGlkZGVuIHRyZWUuXG4gICAgICAgICAgLy8gUmVuZGVyaW5nIGF0IG9mZnNjcmVlbiwgc28gd2UgY2FuIGNsZWFyIHRoZSBiYXNlIGxhbmVzLlxuICAgICAgICAgIHZhciBfbmV4dFN0YXRlID0ge1xuICAgICAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzLFxuICAgICAgICAgICAgY2FjaGVQb29sOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTtcblxuICAgICAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVuZGVyaW5nIGEgdmlzaWJsZSB0cmVlLlxuICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSk7XG4gICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTsgLy8gU2luY2Ugd2UncmUgbm90IGhpZGRlbiBhbnltb3JlLCByZXNldCB0aGUgc3RhdGVcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICAgICAgcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0QmFzZUxhbmVzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lcyxcbiAgICAgICAgLy8gU2F2ZSB0aGUgY2FjaGUgcG9vbCBzbyB3ZSBjYW4gcmVzdW1lIGxhdGVyLlxuICAgICAgICBjYWNoZVBvb2w6IG51bGxcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgLy8gdG8gYXZvaWQgYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG5cbiAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcbiAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gICAgICBpZiAoXG4gICAgICAgIChjdXJyZW50ID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCkgfHxcbiAgICAgICAgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZilcbiAgICAgICkge1xuICAgICAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWZTdGF0aWM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAge1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICAgICAgaW5uZXJQcm9wVHlwZXMsXG4gICAgICAgICAgICAgIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgICAgICAgXCJwcm9wXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dDtcblxuICAgICAge1xuICAgICAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV4dENoaWxkcmVuO1xuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAge1xuICAgICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBzZWNvbmRBcmcsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlcGxheSBhIGNvbXBvbmVudCB0aGF0IHByZXZpb3VzbHkgc3VzcGVuZGVkLFxuICAgICAgLy8gYWZ0ZXIgaXRzIGRhdGEgcmVzb2x2ZXMuIEl0J3MgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2ZcbiAgICAgIC8vIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50IHRoYXQgcmV1c2VzIHRoZSBob29rcyBmcm9tIHRoZSBwcmV2aW91cyBhdHRlbXB0LlxuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHJlcGxheVN1c3BlbmRlZENvbXBvbmVudFdpdGhIb29rcyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICBzZWNvbmRBcmdcbiAgICAgICk7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAge1xuICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBlcnJvci5cbiAgICAgICAgc3dpdGNoIChzaG91bGRFcnJvcih3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICBjYXNlIGZhbHNlOiB7XG4gICAgICAgICAgICB2YXIgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUT0RPIFRoaXMgd2F5IG9mIHJlc2V0dGluZyB0aGUgZXJyb3IgYm91bmRhcnkgc3RhdGUgaXMgYSBoYWNrLlxuICAgICAgICAgICAgLy8gSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM/XG5cbiAgICAgICAgICAgIHZhciB0ZW1wSW5zdGFuY2UgPSBuZXcgY3RvcihcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLmNvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB0ZW1wSW5zdGFuY2Uuc3RhdGU7XG5cbiAgICAgICAgICAgIF9pbnN0YW5jZS51cGRhdGVyLmVucXVldWVTZXRTdGF0ZShfaW5zdGFuY2UsIHN0YXRlLCBudWxsKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSB0cnVlOiB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcblxuICAgICAgICAgICAgdmFyIGVycm9yJDEgPSBuZXcgRXJyb3IoXCJTaW11bGF0ZWQgZXJyb3IgY29taW5nIGZyb20gRGV2VG9vbHNcIik7XG4gICAgICAgICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yJDEsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgdXBkYXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgICBpbm5lclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICAgIHZhciBoYXNDb250ZXh0O1xuXG4gICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICAgICAgcmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7IC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuXG4gICAgICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIEluIGEgcmVzdW1lLCB3ZSdsbCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2Ugd2UgY2FuIHJldXNlLlxuICAgICAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2UoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRVbml0T2ZXb3JrID0gZmluaXNoQ2xhc3NDb21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHNob3VsZFVwZGF0ZSxcbiAgICAgICAgaGFzQ29udGV4dCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG5cbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSAmJiBpbnN0LnByb3BzICE9PSBuZXh0UHJvcHMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIkl0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcImEgY29tcG9uZW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmlzaENsYXNzQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgc2hvdWxkVXBkYXRlLFxuICAgICAgaGFzQ29udGV4dCxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICAgICAgbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgICBpZiAoIXNob3VsZFVwZGF0ZSAmJiAhZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgICAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFJlcmVuZGVyXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgdmFyIG5leHRDaGlsZHJlbjtcblxuICAgICAgaWYgKFxuICAgICAgICBkaWRDYXB0dXJlRXJyb3IgJiZcbiAgICAgICAgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIHdlIGNhcHR1cmVkIGFuIGVycm9yLCBidXQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzIG5vdCBkZWZpbmVkLFxuICAgICAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgICAgIC8vIHRoZSBuZXcgQVBJLlxuICAgICAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICAgICAge1xuICAgICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHtcbiAgICAgICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcblxuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGRpZENhcHR1cmVFcnJvcikge1xuICAgICAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgICAgIC8vIHRoZSBleGlzdGluZyBjaGlsZHJlbi4gQ29uY2VwdHVhbGx5LCB0aGUgbm9ybWFsIGNoaWxkcmVuIGFuZCB0aGUgY2hpbGRyZW5cbiAgICAgICAgLy8gdGhhdCBhcmUgc2hvd24gb24gZXJyb3IgYXJlIHR3byBkaWZmZXJlbnQgc2V0cywgc28gd2Ugc2hvdWxkbid0IHJldXNlXG4gICAgICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgICAgIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gICAgICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOyAvLyBUaGUgY29udGV4dCBtaWdodCBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdC5cblxuICAgICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICBpZiAocm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgICAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJvb3QucGVuZGluZ0NvbnRleHQsXG4gICAgICAgICAgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgICAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgICAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZS5lbGVtZW50O1xuICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAvLyBpdCBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdGhlIGBwdXNoQ2FjaGVQcm92aWRlcmAgY2FsbCBhYm92ZSB0byBhdm9pZCBhXG4gICAgICAvLyBjb250ZXh0IHN0YWNrIG1pc21hdGNoLiBBIGJpdCB1bmZvcnR1bmF0ZS5cblxuICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gICAgICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0U3RhdGUuZWxlbWVudDtcblxuICAgICAge1xuICAgICAgICBpZiAobmV4dENoaWxkcmVuID09PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCgpKSB7XG4gICAgICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgICAgIC8vIGVtcHR5LCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSB0ZXh0IGNvbnRlbnQgdG8gYmUgcmVzZXQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENvbnRlbnRSZXNldDtcbiAgICAgIH1cblxuICAgICAgbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVIb3N0VGV4dCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRMYXp5Q29tcG9uZW50KFxuICAgICAgX2N1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gZWxlbWVudFR5cGU7XG4gICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gICAgICB2YXIgQ29tcG9uZW50ID0gaW5pdChwYXlsb2FkKTsgLy8gU3RvcmUgdGhlIHVud3JhcHBlZCBjb21wb25lbnQgaW4gdGhlIHR5cGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gICAgICB2YXIgcmVzb2x2ZWRUYWcgPSAod29ya0luUHJvZ3Jlc3MudGFnID1cbiAgICAgICAgcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSk7XG4gICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gICAgICB2YXIgY2hpbGQ7XG5cbiAgICAgIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPVxuICAgICAgICAgICAgICByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgcmVzb2x2ZWRQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9XG4gICAgICAgICAgICAgIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICByZXNvbHZlZFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPVxuICAgICAgICAgICAgICByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHJlc29sdmVkUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICAgICAgICBvdXRlclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LnR5cGUsIHJlc29sdmVkUHJvcHMpLCAvLyBUaGUgaW5uZXIgdHlwZSBjYW4gaGF2ZSBkZWZhdWx0cyB0b29cbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGhpbnQgPSBcIlwiO1xuXG4gICAgICB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBDb21wb25lbnQgIT09IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgQ29tcG9uZW50ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGludCA9IFwiIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/XCI7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAgICAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbC5cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgK1xuICAgICAgICAgIENvbXBvbmVudCArXG4gICAgICAgICAgXCIuIFwiICtcbiAgICAgICAgICAoXCJMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArIGhpbnQpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgX2N1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlKF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7IC8vIFByb21vdGUgdGhlIGZpYmVyIHRvIGEgY2xhc3MgYW5kIHRyeSByZW5kZXJpbmcgYWdhaW4uXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yayBvZiBgdXBkYXRlQ2xhc3NDb21wb25lbnRgXG4gICAgICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgICAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gICAgICB2YXIgaGFzQ29udGV4dDtcblxuICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KFxuICAgICAgICBudWxsLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICB0cnVlLFxuICAgICAgICBoYXNDb250ZXh0LFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoXG4gICAgICBfY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBjb250ZXh0O1xuXG4gICAgICB7XG4gICAgICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIHZhbHVlO1xuXG4gICAgICB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBDb21wb25lbnQucHJvdG90eXBlICYmXG4gICAgICAgICAgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3IgbW9kdWxlIGNvbXBvbmVudHMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgcmVtb3ZlZCBiZWhpbmQgYSBmbGFnLlxuICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuIFwiICtcbiAgICAgICAgICAgICAgICBcIkNoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gXCIgK1xuICAgICAgICAgICAgICAgIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArXG4gICAgICAgICAgICAgICAgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArXG4gICAgICAgICAgICAgICAgXCJjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuXCIsXG4gICAgICAgICAgICAgIF9jb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICBfY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gICAgICAgIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUucmVuZGVyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID1cbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiO1xuXG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuIFwiICtcbiAgICAgICAgICAgICAgICBcIkNoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gXCIgK1xuICAgICAgICAgICAgICAgIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArXG4gICAgICAgICAgICAgICAgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArXG4gICAgICAgICAgICAgICAgXCJjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuXCIsXG4gICAgICAgICAgICAgIF9jb21wb25lbnROYW1lMixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWUyLFxuICAgICAgICAgICAgICBfY29tcG9uZW50TmFtZTJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhyb3cgb3V0IGFueSBob29rcyB0aGF0IHdlcmUgdXNlZC5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgICAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgICAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB2YWx1ZS5zdGF0ZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIGhhc0NvbnRleHQsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgICAgIGlmIChDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LlwiLFxuICAgICAgICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGluZm8gPSBcIlwiO1xuICAgICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCI7XG4gICAgICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICBpbmZvICs9IFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgb3duZXJOYW1lICsgXCJgLlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB3YXJuaW5nS2V5ID0gY29tcG9uZW50TmFtZSArIFwifFwiICsgKG93bmVyTmFtZSB8fCBcIlwiKTtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzLiBcIiArXG4gICAgICAgICAgICAgICAgXCJBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiBcIiArXG4gICAgICAgICAgICAgICAgXCJEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lc1wiLFxuICAgICAgICAgICAgICBpbmZvXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChDb21wb25lbnQuZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID1cbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiO1xuXG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzOiBTdXBwb3J0IGZvciBkZWZhdWx0UHJvcHMgd2lsbCBiZSByZW1vdmVkIGZyb20gZnVuY3Rpb24gY29tcG9uZW50cyBcIiArXG4gICAgICAgICAgICAgICAgXCJpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBVc2UgSmF2YVNjcmlwdCBkZWZhdWx0IHBhcmFtZXRlcnMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWUzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9XG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIjtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy5cIixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWU0XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPVxuICAgICAgICAgICAgICB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgQ29tcG9uZW50LmNvbnRleHRUeXBlICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBfY29tcG9uZW50TmFtZTUgPVxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCI7XG5cbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTVdKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS5cIixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWU1XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU1XSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gICAgICBkZWh5ZHJhdGVkOiBudWxsLFxuICAgICAgdHJlZUNvbnRleHQ6IG51bGwsXG4gICAgICByZXRyeUxhbmU6IE5vTGFuZVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXMsXG4gICAgICAgIGNhY2hlUG9vbDogZ2V0U3VzcGVuZGVkQ2FjaGUoKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBjYWNoZVBvb2wgPSBudWxsO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlTGFuZXM6IG1lcmdlTGFuZXMocHJldk9mZnNjcmVlblN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICBjYWNoZVBvb2w6IGNhY2hlUG9vbFxuICAgICAgfTtcbiAgICB9IC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCBpbmxpbmUgdGhpcyBiYWNrXG5cbiAgICBmdW5jdGlvbiBzaG91bGRSZW1haW5PbkZhbGxiYWNrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gICAgICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIFN1c3BlbnNlTGlzdCBjb29yZGluYXRlcyB3aGVuIG5lc3RlZCBjb250ZW50IGFwcGVhcnMuXG4gICAgICAvLyBUT0RPOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9mZnNjcmVlbiBwcmVyZW5kZXJpbmcsIHRoaXMgc2hvdWxkIGFsc28gY2hlY2tcbiAgICAgIC8vIHdoZXRoZXIgdGhlIGN1cnJlbnQgZmliZXIgKGlmIGl0IGV4aXN0cykgd2FzIHZpc2libGUgaW4gdGhlIHByZXZpb3VzIHRyZWUuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICAgLy8gaXMgdHJ1ZS4gTW9yZSBwcmVjaXNlIG5hbWUgbWlnaHQgYmUgXCJGb3JjZVJlbWFpblN1c3BlbnNlRmFsbGJhY2tcIi5cbiAgICAgICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAgICAgLy8gbm8gZmFsbGJhY2sgdG8gcmVtYWluIG9uLlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBOb3QgY3VycmVudGx5IHNob3dpbmcgY29udGVudC4gQ29uc3VsdCB0aGUgU3VzcGVuc2UgY29udGV4dC5cblxuICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIHJldHVybiBoYXNTdXNwZW5zZUxpc3RDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgIGN1cnJlbnQsXG4gICAgICBwcmltYXJ5VHJlZURpZERlZmVyLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciByZW1haW5pbmdMYW5lcyA9XG4gICAgICAgIGN1cnJlbnQgIT09IG51bGxcbiAgICAgICAgICA/IHJlbW92ZUxhbmVzKGN1cnJlbnQuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgOiBOb0xhbmVzO1xuXG4gICAgICBpZiAocHJpbWFyeVRyZWVEaWREZWZlcikge1xuICAgICAgICAvLyBBIHVzZURlZmVycmVkVmFsdWUgaG9vayBzcGF3bmVkIGEgZGVmZXJyZWQgdGFzayBpbnNpZGUgdGhlIHByaW1hcnkgdHJlZS5cbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgcmV0cnkgdGhpcyBjb21wb25lbnQgYXQgdGhlIGRlZmVycmVkIHByaW9yaXR5LlxuICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBtYWtlIHRoaXMgYSBwZXItc3VidHJlZSB2YWx1ZSBpbnN0ZWFkIG9mIGEgZ2xvYmFsIG9uZS5cbiAgICAgICAgLy8gV291bGQgbmVlZCB0byB0cmFjayBpdCBvbiB0aGUgY29udGV4dCBzdGFjayBzb21laG93LCBzaW1pbGFyIHRvIHdoYXRcbiAgICAgICAgLy8gd2UnZCBoYXZlIHRvIGRvIGZvciByZXN1bWFibGUgY29udGV4dHMuXG4gICAgICAgIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhyZW1haW5pbmdMYW5lcywgcGVla0RlZmVycmVkTGFuZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbWFpbmluZ0xhbmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gc3VzcGVuZC5cblxuICAgICAge1xuICAgICAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93RmFsbGJhY2sgPSBmYWxzZTtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MkMTtcblxuICAgICAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhjdXJyZW50KSkge1xuICAgICAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgICAgICAvLyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+RGlkQ2FwdHVyZTtcbiAgICAgIH0gLy8gQ2hlY2sgaWYgdGhlIHByaW1hcnkgY2hpbGRyZW4gc3Bhd25lZCBhIGRlZmVycmVkIHRhc2sgKHVzZURlZmVycmVkVmFsdWUpXG4gICAgICAvLyBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG5cbiAgICAgIHZhciBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciA9XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZERlZmVyKSAhPT0gTm9GbGFncyQxO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkRpZERlZmVyOyAvLyBPSywgdGhlIG5leHQgcGFydCBpcyBjb25mdXNpbmcuIFdlJ3JlIGFib3V0IHRvIHJlY29uY2lsZSB0aGUgU3VzcGVuc2VcbiAgICAgIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxpYXRpb24gbG9naWMuIFR3b1xuICAgICAgLy8gbWFpbiByZWFzb25zIHRoaXMgaXMgc28gY29tcGxpY2F0ZWQuXG4gICAgICAvL1xuICAgICAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gICAgICAvLyBwcmltYXJ5IHRyZWUgd2lsbCBjb21taXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCBzbyB3aGVuIHdlIGRvIHRoZVxuICAgICAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAgICAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAgICAgLy8gZGVsZXRpb25zIGZyb20gaGlkZGVuIHRyZWUuIEluIENvbmN1cnJlbnQgTW9kZSwgaXQncyBtdWNoIHNpbXBsZXIsXG4gICAgICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gICAgICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gICAgICAvLyBPZmZzY3JlZW4gZG9lc24ndCBoYXZlIHRoZSBmaXJzdCByZW5kZXIgcGFzcykuXG4gICAgICAvL1xuICAgICAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gICAgICAvLyBkaWZmZXJlbnQgbGF5b3V0LCB3aGVyZSB0aGUgY2hpbGQgcG9pbnRzIHRvIGEgZGVoeWRyYXRlZCBmcmFnbWVudCwgd2hpY2hcbiAgICAgIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlyZCwgZXZlbiBpZiB5b3Ugc2V0IGFsbCB0aGF0IGFzaWRlLCBTdXNwZW5zZSBpcyBsaWtlIGVycm9yIGJvdW5kYXJpZXMgaW5cbiAgICAgIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAgICAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gICAgICAvLyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IHJlbmRlcmluZy4gSWRlYWxseSB3ZSB3b3VsZCBtb2RlbCB0aGlzIHVzaW5nXG4gICAgICAvLyBhIHN0YWNrLlxuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgICBwdXNoRmFsbGJhY2tUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgICBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcblxuICAgICAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW5cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIHVwZGF0ZS5cbiAgICAgICAgLy8gU3BlY2lhbCBwYXRoIGZvciBoeWRyYXRpb25cbiAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9kZWh5ZHJhdGVkID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgICBpZiAoX2RlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBkaWRTdXNwZW5kLFxuICAgICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICBfZGVoeWRyYXRlZCxcbiAgICAgICAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgICAgcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF9uZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgX25leHRGYWxsYmFja0NoaWxkcmVuLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsXG4gICAgICAgICAgICAgID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKVxuICAgICAgICAgICAgICA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBfbmV4dFByaW1hcnlDaGlsZHJlbjIsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50MztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHByaW1hcnlDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgICAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICBwcmltYXJ5Q2hpbGRQcm9wcyxcbiAgICAgICAgbW9kZVxuICAgICAgKTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICAgIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcHJpbWFyeUNoaWxkcmVuLFxuICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgICAgICBtb2RlOiBcImhpZGRlblwiLFxuICAgICAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICAgICAgaWYgKFxuICAgICAgICAobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlICYmXG4gICAgICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgIHByaW1hcnlDaGlsZFByb3BzLFxuICAgICAgICAgIG1vZGVcbiAgICAgICAgKTtcbiAgICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICAgIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgb2Zmc2NyZWVuUHJvcHMsXG4gICAgICBtb2RlLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIC8vIFRoZSBwcm9wcyBhcmd1bWVudCB0byBgY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlXG4gICAgICAvLyB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihvZmZzY3JlZW5Qcm9wcywgbW9kZSwgTm9MYW5lcywgbnVsbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAgICAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gICAgICAvLyB3cmFwcGVyIGZ1bmN0aW9uIHRvIGNvbnN0cmFpbiBpdC5cbiAgICAgIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBwcmltYXJ5Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZTogXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgICAgfVxuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gICAgICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBEZWxldGUgdGhlIGZhbGxiYWNrIGNoaWxkIGZyYWdtZW50XG4gICAgICAgIHZhciBkZWxldGlvbnMgPSB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnM7XG5cbiAgICAgICAgaWYgKGRlbGV0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IFtjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50XTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDaGlsZERlbGV0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0aW9ucy5wdXNoKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gICAgICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcHJpbWFyeUNoaWxkcmVuLFxuICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgICAgIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgICAgIG1vZGU6IFwiaGlkZGVuXCIsXG4gICAgICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgICAgIH07XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAgICAgICAobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gICAgICAgIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgICAgICAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgICAgICAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgICAgICAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gICAgICAgIC8vIG9ubHkgY29kZXBhdGguKVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50XG4gICAgICApIHtcbiAgICAgICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9XG4gICAgICAgICAgICBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID1cbiAgICAgICAgICAgIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICB9IC8vIFRoZSBmYWxsYmFjayBmaWJlciB3YXMgYWRkZWQgYXMgYSBkZWxldGlvbiBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG4gICAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlbWFpbiBvbiB0aGUgZmFsbGJhY2ssIHdlIG5vIGxvbmdlciB3YW50XG4gICAgICAgIC8vIHRvIGRlbGV0ZSBpdC5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCxcbiAgICAgICAgICBwcmltYXJ5Q2hpbGRQcm9wc1xuICAgICAgICApOyAvLyBTaW5jZSB3ZSdyZSByZXVzaW5nIGEgY3VycmVudCB0cmVlLCB3ZSBuZWVkIHRvIHJldXNlIHRoZSBmbGFncywgdG9vLlxuICAgICAgICAvLyAoV2UgZG9uJ3QgZG8gdGhpcyBpbiBsZWdhY3kgbW9kZSwgYmVjYXVzZSBpbiBsZWdhY3kgbW9kZSB3ZSBkb24ndCByZS11c2VcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgdHJlZTsgc2VlIHByZXZpb3VzIGJyYW5jaC4pXG5cbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc3VidHJlZUZsYWdzID1cbiAgICAgICAgICBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc3VidHJlZUZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgIH1cblxuICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICAgICAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCxcbiAgICAgICAgICBmYWxsYmFja0NoaWxkcmVuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICBmYWxsYmFja0NoaWxkcmVuLFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAgICAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgICAgfVxuXG4gICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgICAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgcmVjb3ZlcmFibGVFcnJvclxuICAgICkge1xuICAgICAgLy8gRmFsbGluZyBiYWNrIHRvIGNsaWVudCByZW5kZXJpbmcuIEJlY2F1c2UgdGhpcyBoYXMgcGVyZm9ybWFuY2VcbiAgICAgIC8vIGltcGxpY2F0aW9ucywgaXQncyBjb25zaWRlcmVkIGEgcmVjb3ZlcmFibGUgZXJyb3IsIGV2ZW4gdGhvdWdoIHRoZSB1c2VyXG4gICAgICAvLyBsaWtlbHkgd29uJ3Qgb2JzZXJ2ZSBhbnl0aGluZyB3cm9uZyB3aXRoIHRoZSBVSS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgZXJyb3IgaXMgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50IHRvIGVuZm9yY2UgdGhhdCBldmVyeSBjYWxsZXIgcHJvdmlkZVxuICAgICAgLy8gYSBjdXN0b20gbWVzc2FnZSwgb3IgZXhwbGljaXRseSBvcHQgb3V0IChjdXJyZW50bHkgdGhlIG9ubHkgcGF0aCB0aGF0IG9wdHNcbiAgICAgIC8vIG91dCBpcyBsZWdhY3kgbW9kZTsgZXZlcnkgY29uY3VycmVudCBwYXRoIHByb3ZpZGVzIGFuIGVycm9yKS5cbiAgICAgIGlmIChyZWNvdmVyYWJsZUVycm9yICE9PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IocmVjb3ZlcmFibGVFcnJvcik7XG4gICAgICB9IC8vIFRoaXMgd2lsbCBhZGQgdGhlIG9sZCBmaWJlciB0byB0aGUgZGVsZXRpb24gbGlzdFxuXG4gICAgICByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBXZSdyZSBub3cgbm90IHN1c3BlbmRlZCBub3IgZGVoeWRyYXRlZC5cblxuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgcHJpbWFyeUNoaWxkcmVuXG4gICAgICApOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAgIC8vIG1vdW50ZWQgYnV0IHRoaXMgaXMgYSBuZXcgZmliZXIuXG5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0FmdGVyUmV0cnlXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcHJpbWFyeUNoaWxkcmVuLFxuICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgZmliZXJNb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICAgICAgbW9kZTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgICAgIH07XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgIHByaW1hcnlDaGlsZFByb3BzLFxuICAgICAgICBmaWJlck1vZGVcbiAgICAgICk7XG4gICAgICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgIGZhbGxiYWNrQ2hpbGRyZW4sXG4gICAgICAgIGZpYmVyTW9kZSxcbiAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgIG51bGxcbiAgICAgICk7IC8vIE5lZWRzIGEgcGxhY2VtZW50IGVmZmVjdCBiZWNhdXNlIHRoZSBwYXJlbnQgKHRoZSBTdXNwZW5zZVxuICAgICAgLy8gYm91bmRhcnkpIGFscmVhZHkgbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBkcm9wcGVkIHRoZSBlZmZlY3QgbGlzdCB3aGljaCBjb250YWlucyB0aGVcbiAgICAgICAgLy8gZGVsZXRpb24uIFdlIG5lZWQgdG8gcmVjb25jaWxlIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBjaGlsZC5cbiAgICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBkaWRTdXNwZW5kLFxuICAgICAgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICBzdXNwZW5zZUluc3RhbmNlLFxuICAgICAgc3VzcGVuc2VTdGF0ZSxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAoIWRpZFN1c3BlbmQpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcmVuZGVyIHBhc3MuIEF0dGVtcHQgdG8gaHlkcmF0ZS5cbiAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGh5ZHJhdGluZyBhdCB0aGlzIHBvaW50IGJlY2F1c2UgaXQgaXMgdGhlIGZpcnN0IHBhc3MsXG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIGluIGEgcGVybWFuZW50IGZhbGxiYWNrIHN0YXRlLiBJbiB0aGlzIGNhc2UsIHdlJ2xsIG5ldmVyXG4gICAgICAgICAgLy8gZ2V0IGFuIHVwZGF0ZSBhbmQgd2UnbGwgbmV2ZXIgYmUgYWJsZSB0byBoeWRyYXRlIHRoZSBmaW5hbCBjb250ZW50LiBMZXQncyBqdXN0IHRyeSB0aGVcbiAgICAgICAgICAvLyBjbGllbnQgc2lkZSByZW5kZXIgaW5zdGVhZC5cbiAgICAgICAgICB2YXIgZGlnZXN0O1xuICAgICAgICAgIHZhciBtZXNzYWdlLCBzdGFjaztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfZ2V0U3VzcGVuc2VJbnN0YW5jZUYgPVxuICAgICAgICAgICAgICBnZXRTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2tFcnJvckRldGFpbHMoKTtcblxuICAgICAgICAgICAgZGlnZXN0ID0gX2dldFN1c3BlbnNlSW5zdGFuY2VGLmRpZ2VzdDtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBfZ2V0U3VzcGVuc2VJbnN0YW5jZUYubWVzc2FnZTtcbiAgICAgICAgICAgIHN0YWNrID0gX2dldFN1c3BlbnNlSW5zdGFuY2VGLnN0YWNrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjYXB0dXJlZFZhbHVlID0gbnVsbDsgLy8gVE9ETzogRmlndXJlIG91dCBhIGJldHRlciBzaWduYWwgdGhhbiBlbmNvZGluZyBhIG1hZ2ljIGRpZ2VzdCB2YWx1ZS5cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBlcnJvcjtcblxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBzZXJ2ZXIgY291bGQgbm90IGZpbmlzaCB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LCBsaWtlbHkgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJkdWUgdG8gYW4gZXJyb3IgZHVyaW5nIHNlcnZlciByZW5kZXJpbmcuIFN3aXRjaGVkIHRvIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5kaWdlc3QgPSBkaWdlc3Q7XG4gICAgICAgICAgICBjYXB0dXJlZFZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgZGlnZXN0LCBzdGFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICBjYXB0dXJlZFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhbnkgY29udGV4dCBoYXMgY2hhbmdlZCwgd2UgbmVlZCB0byB0cmVhdCBpcyBhcyBpZiB0aGUgaW5wdXQgbWlnaHQgaGF2ZSBjaGFuZ2VkLlxuXG4gICAgICAgIHZhciBoYXNDb250ZXh0Q2hhbmdlZCA9IGluY2x1ZGVzU29tZUxhbmUoXG4gICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgY3VycmVudC5jaGlsZExhbmVzXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRpZFJlY2VpdmVVcGRhdGUgfHwgaGFzQ29udGV4dENoYW5nZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBmaXJzdCByZW5kZXIuIFRoaXMgbWVhbnMgdGhhdCB3ZSBhcmUgbm93IHVuYWJsZSB0b1xuICAgICAgICAgIC8vIGh5ZHJhdGUgaXQuIFdlIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gaHlkcmF0ZSBpdCB1c2luZyBhIGhpZ2hlciBwcmlvcml0eSBsYW5lLlxuICAgICAgICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGF0dGVtcHRIeWRyYXRpb25BdExhbmUgPSBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uKFxuICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRMYW5lICE9PSBOb0xhbmUgJiZcbiAgICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0TGFuZSAhPT0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IG11dGF0aW5nIHNpbmNlIHRoaXMgcmVuZGVyIHdpbGwgZ2V0IGludGVycnVwdGVkLiBUaGlzXG4gICAgICAgICAgICAgIC8vIGlzIG9uZSBvZiB0aGUgdmVyeSByYXJlIHRpbWVzIHdoZXJlIHdlIG11dGF0ZSB0aGUgY3VycmVudCB0cmVlXG4gICAgICAgICAgICAgIC8vIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgICAgICAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGF0dGVtcHRIeWRyYXRpb25BdExhbmU7XG4gICAgICAgICAgICAgIGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShjdXJyZW50LCBhdHRlbXB0SHlkcmF0aW9uQXRMYW5lKTtcbiAgICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGN1cnJlbnQsIGF0dGVtcHRIeWRyYXRpb25BdExhbmUpOyAvLyBUaHJvdyBhIHNwZWNpYWwgb2JqZWN0IHRoYXQgc2lnbmFscyB0byB0aGUgd29yayBsb29wIHRoYXQgaXQgc2hvdWxkXG4gICAgICAgICAgICAgIC8vIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UncmUgaW5zaWRlIGEgUmVhY3Qtb25seSBleGVjdXRpb24gc3RhY2ssIHdlIGRvbid0XG4gICAgICAgICAgICAgIC8vIHN0cmljdGx5IG5lZWQgdG8gdGhyb3cgaGVyZSDigJQgd2UgY291bGQgaW5zdGVhZCBtb2RpZnkgc29tZSBpbnRlcm5hbFxuICAgICAgICAgICAgICAvLyB3b3JrIGxvb3Agc3RhdGUuIEJ1dCB1c2luZyBhbiBleGNlcHRpb24gbWVhbnMgd2UgZG9uJ3QgbmVlZCB0b1xuICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgdGhpcyBjYXNlIG9uIGV2ZXJ5IGl0ZXJhdGlvbiBvZiB0aGUgd29yayBsb29wLiBTbyBkb2luZ1xuICAgICAgICAgICAgICAvLyBpdCB0aGlzIHdheSBtb3ZlcyB0aGUgY2hlY2sgb3V0IG9mIHRoZSBmYXN0IHBhdGguXG5cbiAgICAgICAgICAgICAgdGhyb3cgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gSWYgd2UgZGlkIG5vdCBzZWxlY3RpdmVseSBoeWRyYXRlLCB3ZSdsbCBjb250aW51ZSByZW5kZXJpbmcgd2l0aG91dFxuICAgICAgICAgIC8vIGh5ZHJhdGluZy4gTWFyayB0aGlzIHRyZWUgYXMgc3VzcGVuZGVkIHRvIHByZXZlbnQgaXQgZnJvbSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gb3V0c2lkZSBhIHRyYW5zaXRpb24uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIHBhdGggc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBoeWRyYXRpb24gbGFuZSBhbHJlYWR5IHN1c3BlbmRlZC5cbiAgICAgICAgICAvLyBDdXJyZW50bHksIGl0IGFsc28gaGFwcGVucyBkdXJpbmcgc3luYyB1cGRhdGVzIGJlY2F1c2UgdGhlcmUgaXMgbm9cbiAgICAgICAgICAvLyBoeWRyYXRpb24gbGFuZSBmb3Igc3luYyB1cGRhdGVzLlxuICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBpZGVhbGx5IGhhdmUgYSBzeW5jIGh5ZHJhdGlvbiBsYW5lIHRoYXQgd2UgY2FuIGFwcGx5IHRvIGRvXG4gICAgICAgICAgLy8gYSBwYXNzIHdoZXJlIHdlIGh5ZHJhdGUgdGhpcyBzdWJ0cmVlIGluIHBsYWNlIHVzaW5nIHRoZSBwcmV2aW91cyBDb250ZXh0IGFuZCB0aGVuXG4gICAgICAgICAgLy8gcmVhcHBseSB0aGUgdXBkYXRlIGFmdGVyd2FyZHMuXG5cbiAgICAgICAgICBpZiAoaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZygpKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoKSkge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIHN0aWxsIHBlbmRpbmcgbW9yZSBkYXRhIGZyb20gdGhlIHNlcnZlciwgc28gd2UgY2FuJ3QgaHlkcmF0ZSBpdHNcbiAgICAgICAgICAvLyBjb250ZW50LiBXZSB0cmVhdCBpdCBhcyBpZiB0aGlzIGNvbXBvbmVudCBzdXNwZW5kZWQgaXRzZWxmLiBJdCBtaWdodCBzZWVtIGFzIGlmXG4gICAgICAgICAgLy8gd2UgY291bGQganVzdCB0cnkgdG8gcmVuZGVyIGl0IGNsaWVudC1zaWRlIGluc3RlYWQuIEhvd2V2ZXIsIHRoaXMgd2lsbCBwZXJmb3JtIGFcbiAgICAgICAgICAvLyBsb3Qgb2YgdW5uZWNlc3Nhcnkgd29yayBhbmQgaXMgdW5saWtlbHkgdG8gY29tcGxldGUgc2luY2UgaXQgb2Z0ZW4gd2lsbCBzdXNwZW5kXG4gICAgICAgICAgLy8gb24gbWlzc2luZyBkYXRhIGFueXdheS4gQWRkaXRpb25hbGx5LCB0aGUgc2VydmVyIG1pZ2h0IGJlIGFibGUgdG8gcmVuZGVyIG1vcmVcbiAgICAgICAgICAvLyB0aGFuIHdlIGNhbiBvbiB0aGUgY2xpZW50IHlldC4gSW4gdGhhdCBjYXNlIHdlJ2QgZW5kIHVwIHdpdGggbW9yZSBmYWxsYmFjayBzdGF0ZXNcbiAgICAgICAgICAvLyBvbiB0aGUgY2xpZW50IHRoYW4gaWYgd2UganVzdCBsZWF2ZSBpdCBhbG9uZS4gSWYgdGhlIHNlcnZlciB0aW1lcyBvdXQgb3IgZXJyb3JzXG4gICAgICAgICAgLy8gdGhlc2Ugc2hvdWxkIHVwZGF0ZSB0aGlzIGJvdW5kYXJ5IHRvIHRoZSBwZXJtYW5lbnQgRmFsbGJhY2sgc3RhdGUgaW5zdGVhZC5cbiAgICAgICAgICAvLyBNYXJrIGl0IGFzIGhhdmluZyBjYXB0dXJlZCAoaS5lLiBzdXNwZW5kZWQpLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7IC8vIExlYXZlIHRoZSBjaGlsZCBpbiBwbGFjZS4gSS5lLiB0aGUgZGVoeWRyYXRlZCBmcmFnbWVudC5cblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gUmVnaXN0ZXIgYSBjYWxsYmFjayB0byByZXRyeSB0aGlzIGJvdW5kYXJ5IG9uY2UgdGhlIHNlcnZlciBoYXMgc2VudCB0aGUgcmVzdWx0LlxuXG4gICAgICAgICAgcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeS5iaW5kKG51bGwsIGN1cnJlbnQpO1xuICAgICAgICAgIHJlZ2lzdGVyU3VzcGVuc2VJbnN0YW5jZVJldHJ5KCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBwcmltYXJ5Q2hpbGRyZW5cbiAgICAgICAgICApOyAvLyBNYXJrIHRoZSBjaGlsZHJlbiBhcyBoeWRyYXRpbmcuIFRoaXMgaXMgYSBmYXN0IHBhdGggdG8ga25vdyB3aGV0aGVyIHRoaXNcbiAgICAgICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAgICAgLy8gbm9kZSBoYXMgZnVsbHkgbW91bnRlZCB5ZXQsIGFuZCBmb3Igc2NoZWR1bGluZyBldmVudCByZXBsYXlpbmcuXG4gICAgICAgICAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBQbGFjZW1lbnQgaW4gdGhhdCBhIG5ldyBzdWJ0cmVlIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAgICAgLy8gbXV0YXRpb25zIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG5cbiAgICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5mbGFncyB8PSBIeWRyYXRpbmc7XG4gICAgICAgICAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSBzZWNvbmQgcmVuZGVyIHBhc3MuIFdlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIGh5ZHJhdGVkLCBidXRcbiAgICAgICAgLy8gc29tZXRoaW5nIGVpdGhlciBzdXNwZW5kZWQgb3IgZXJyb3JlZC5cbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRm9yY2VDbGllbnRSZW5kZXIpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgZXJyb3JlZCBkdXJpbmcgaHlkcmF0aW9uLiBUcnkgYWdhaW4gd2l0aG91dCBoeWRyYXRpbmcuXG4gICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+Rm9yY2VDbGllbnRSZW5kZXI7XG5cbiAgICAgICAgICB2YXIgX2NhcHR1cmVkVmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKFxuICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcgdGhpcyBTdXNwZW5zZSBib3VuZGFyeS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU3dpdGNoZWQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIF9jYXB0dXJlZFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZCBhbmQgd2Ugc2hvdWxkIHN0aWxsIGJlIGluIGRlaHlkcmF0ZWQgbW9kZS5cbiAgICAgICAgICAvLyBMZWF2ZSB0aGUgZXhpc3RpbmcgY2hpbGQgaW4gcGxhY2UuXG4gICAgICAgICAgLy8gUHVzaCB0byBhdm9pZCBhIG1pc21hdGNoXG4gICAgICAgICAgcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGUgZGVoeWRyYXRlZCBjb21wbGV0aW9uIHBhc3MgZXhwZWN0cyB0aGlzIGZsYWcgdG8gYmUgdGhlcmVcbiAgICAgICAgICAvLyBidXQgdGhlIG5vcm1hbCBzdXNwZW5zZSBwYXNzIGRvZXNuJ3QuXG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFN1c3BlbmRlZCBidXQgd2Ugc2hvdWxkIG5vIGxvbmdlciBiZSBpbiBkZWh5ZHJhdGVkIG1vZGUuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5vdyBoYXZlIHRvIHJlbmRlciB0aGUgZmFsbGJhY2suXG4gICAgICAgICAgcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICAgICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPVxuICAgICAgICAgICAgbW91bnRTdXNwZW5zZUZhbGxiYWNrQWZ0ZXJSZXRyeVdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgICBuZXh0RmFsbGJhY2tDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0Lm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgcHJvcGFnYXRpb25Sb290XG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgZmlyc3RDaGlsZCxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICAvLyBNYXJrIGFueSBTdXNwZW5zZSBib3VuZGFyaWVzIHdpdGggZmFsbGJhY2tzIGFzIGhhdmluZyB3b3JrIHRvIGRvLlxuICAgICAgLy8gSWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIGludG8gZmFsbGJhY2tzLCB0aGV5IG1heSBub3cgYmUgYWJsZVxuICAgICAgLy8gdG8gdW5ibG9jay5cbiAgICAgIHZhciBub2RlID0gZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSB3b3JrIG9uLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBvbiB0aGVcbiAgICAgICAgICAvLyBsaXN0IGl0c2VsZi5cbiAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgICAgIC8vIHRoZSBsaXN0IHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFuZ2Ugd2hlbiBpdCByZXJlbmRlcnMuXG4gICAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgICAgIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gICAgICAvLyBzaG93aW5nIGNvbnRlbnQgb24gdGhlIHNjcmVlbiwgYXMgb3Bwb3NlZCB0byBiZWluZyBpbiBmYWxsYmFjayBzdGF0ZSBvclxuICAgICAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gICAgICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgXCJyb3dzXCIgd2lsbCBiZSB3b3JrSW5Qcm9ncmVzcywgYnV0IGFueSBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAgICAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgICAgIHZhciByb3cgPSBmaXJzdENoaWxkO1xuICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFzdENvbnRlbnRSb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICAgICAge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJldmVhbE9yZGVyICE9PSBcImZvcndhcmRzXCIgJiZcbiAgICAgICAgICByZXZlYWxPcmRlciAhPT0gXCJiYWNrd2FyZHNcIiAmJlxuICAgICAgICAgIHJldmVhbE9yZGVyICE9PSBcInRvZ2V0aGVyXCIgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdXG4gICAgICAgICkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHJldmVhbE9yZGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJmb3J3YXJkc1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6IHtcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIsXG4gICAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBcImZvcndhcmRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImJhY2t3YXJkXCI6IHtcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgICAnUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIsXG4gICAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgICAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JyxcbiAgICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIFwiICtcbiAgICAgICAgICAgICAgICAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JyxcbiAgICAgICAgICAgICAgcmV2ZWFsT3JkZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgICAgIGlmICh0YWlsTW9kZSAhPT0gXCJjb2xsYXBzZWRcIiAmJiB0YWlsTW9kZSAhPT0gXCJoaWRkZW5cIikge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICdEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByZXZlYWxPcmRlciAhPT0gXCJmb3J3YXJkc1wiICYmXG4gICAgICAgICAgICByZXZlYWxPcmRlciAhPT0gXCJiYWNrd2FyZHNcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArXG4gICAgICAgICAgICAgICAgJ1wiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiLiAnICtcbiAgICAgICAgICAgICAgICAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICAgICAge1xuICAgICAgICB2YXIgaXNBbkFycmF5ID0gaXNBcnJheShjaGlsZFNsb3QpO1xuICAgICAgICB2YXIgaXNJdGVyYWJsZSA9XG4gICAgICAgICAgIWlzQW5BcnJheSAmJiB0eXBlb2YgZ2V0SXRlcmF0b3JGbihjaGlsZFNsb3QpID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICAgICAgaWYgKGlzQW5BcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBpc0FuQXJyYXkgPyBcImFycmF5XCIgOiBcIml0ZXJhYmxlXCI7XG5cbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQSBuZXN0ZWQgJXMgd2FzIHBhc3NlZCB0byByb3cgIyVzIGluIDxTdXNwZW5zZUxpc3QgLz4uIFdyYXAgaXQgaW4gXCIgK1xuICAgICAgICAgICAgICBcImFuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6IFwiICtcbiAgICAgICAgICAgICAgXCI8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uIFwiICtcbiAgICAgICAgICAgICAgXCI8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj57JXN9PC9TdXNwZW5zZUxpc3Q+IC4uLiBcIiArXG4gICAgICAgICAgICAgIFwiPC9TdXNwZW5zZUxpc3Q+XCIsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKGNoaWxkcmVuLCByZXZlYWxPcmRlcikge1xuICAgICAge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHJldmVhbE9yZGVyID09PSBcImZvcndhcmRzXCIgfHwgcmV2ZWFsT3JkZXIgPT09IFwiYmFja3dhcmRzXCIpICYmXG4gICAgICAgICAgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNoaWxkcmVuICE9PSBudWxsICYmXG4gICAgICAgICAgY2hpbGRyZW4gIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgICAgIHZhciBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBfaSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJEaWQgeW91IG1lYW4gdG8gcGFzcyBtdWx0aXBsZSBjaGlsZHJlbiBvciBhbiBhcnJheT9cIixcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaXNCYWNrd2FyZHMsXG4gICAgICB0YWlsLFxuICAgICAgbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsTW9kZVxuICAgICkge1xuICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICAgICAgdGFpbDogdGFpbCxcbiAgICAgICAgICB0YWlsTW9kZTogdGFpbE1vZGVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIGNhbiByZXVzZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGZyb20gcHJldmlvdXMgcmVuZGVycy5cbiAgICAgICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMDtcbiAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gdGFpbDtcbiAgICAgICAgcmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZTtcbiAgICAgIH1cbiAgICB9IC8vIFRoaXMgY2FuIGVuZCB1cCByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgbXVsdGlwbGUgcGFzc2VzLlxuICAgIC8vIFRoZSBmaXJzdCBwYXNzIHNwbGl0cyB0aGUgY2hpbGRyZW4gZmliZXJzIGludG8gdHdvIHNldHMuIEEgaGVhZCBhbmQgdGFpbC5cbiAgICAvLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4gICAgLy8gcGFzcyB0aHJvdWdoIGJlZ2luV29yayB0byByZXJlbmRlciBhbGwgY2hpbGRyZW4gKGluY2x1ZGluZyB0aGUgdGFpbCkgd2l0aFxuICAgIC8vIHRoZSBmb3JjZSBzdXNwZW5kIGNvbnRleHQuIElmIHRoZSBmaXJzdCByZW5kZXIgZGlkbid0IGhhdmUgYW55dGhpbmcgaW5cbiAgICAvLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbiAgICAvLyBUaGF0IGhhcHBlbnMgaW4gdGhlIGNvbXBsZXRlV29yayBwaGFzZSB3aXRob3V0IGdvaW5nIGJhY2sgdG8gYmVnaW5Xb3JrLlxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcjtcbiAgICAgIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICAgICAgdmFyIG5ld0NoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcik7XG4gICAgICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gICAgICB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKG5ld0NoaWxkcmVuLCByZXZlYWxPcmRlcik7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VGYWxsYmFjayA9IGhhc1N1c3BlbnNlTGlzdENvbnRleHQoXG4gICAgICAgIHN1c3BlbnNlQ29udGV4dCxcbiAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICApO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dChcbiAgICAgICAgICBzdXNwZW5zZUNvbnRleHQsXG4gICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9XG4gICAgICAgICAgY3VycmVudCAhPT0gbnVsbCAmJiAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzJDE7XG5cbiAgICAgICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZvcmNlZCBhIGZhbGxiYWNrLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHdvcmtcbiAgICAgICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAgICAgLy8gYWdhaW4uIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29udGV4dCB1cGRhdGluZy5cbiAgICAgICAgICBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2UoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAvLyBJbiBsZWdhY3kgbW9kZSwgU3VzcGVuc2VMaXN0IGRvZXNuJ3Qgd29yayBzbyB3ZSBqdXN0XG4gICAgICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICAgICAgY2FzZSBcImZvcndhcmRzXCI6IHtcbiAgICAgICAgICAgIHZhciBsYXN0Q29udGVudFJvdyA9IGZpbmRMYXN0Q29udGVudFJvdyh3b3JrSW5Qcm9ncmVzcy5jaGlsZCk7XG4gICAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBsaXN0IGlzIHBhcnQgb2YgdGhlIHRhaWwuXG4gICAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZW0gc2VwYXJhdGVseSBsYXRlci5cbiAgICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICAgICAgdGFpbCxcbiAgICAgICAgICAgICAgbGFzdENvbnRlbnRSb3csXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBcImJhY2t3YXJkc1wiOiB7XG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBmaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBoYXMgZXhpc3RpbmcgY29udGVudC5cbiAgICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAgIC8vIG9yZGVyLlxuICAgICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY3VycmVudFJvdyAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIHJvdy5zaWJsaW5nID0gX3RhaWw7XG4gICAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgICAgfSAvLyBUT0RPOiBJZiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCBpcyBudWxsLCB3ZSBjYW4gY29udGludWUgb24gdGhlIHRhaWwgaW1tZWRpYXRlbHkuXG5cbiAgICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgICAgIF90YWlsLFxuICAgICAgICAgICAgICBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6IHtcbiAgICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgcmV2ZWFsIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5vdCBoYXZpbmdcbiAgICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBQb3J0YWxzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZW5kIHRoZSBjaGlsZHJlbiBkdXJpbmcgbW91bnRcbiAgICAgICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcm9vdCBhbHdheXMgc3RhcnRzIHdpdGggYSBcImN1cnJlbnRcIiB3aXRoIGEgbnVsbCBjaGlsZC5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIHZhciBjb250ZXh0ID0gcHJvdmlkZXJUeXBlLl9jb250ZXh0O1xuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgIHZhciBuZXdWYWx1ZSA9IG5ld1Byb3BzLnZhbHVlO1xuXG4gICAgICB7XG4gICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBuZXdQcm9wcykpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvdmlkZXJQcm9wVHlwZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICBjaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICAgIHByb3ZpZGVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgIFwiQ29udGV4dC5Qcm92aWRlclwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIG5ld1ZhbHVlKTtcblxuICAgICAge1xuICAgICAgICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcblxuICAgICAgICAgIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvbGRQcm9wcy5jaGlsZHJlbiA9PT0gbmV3UHJvcHMuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgIWhhc0NvbnRleHRDaGFuZ2VkKClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb250ZXh0IHZhbHVlIGNoYW5nZWQuIFNlYXJjaCBmb3IgbWF0Y2hpbmcgY29uc3VtZXJzIGFuZCBzY2hlZHVsZVxuICAgICAgICAgICAgLy8gdGhlbSB0byB1cGRhdGUuXG4gICAgICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdDaGlsZHJlbiA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUaGUgbG9naWMgYmVsb3cgZm9yIENvbnRleHQgZGlmZmVycyBkZXBlbmRpbmcgb24gUFJPRCBvciBERVYgbW9kZS4gSW5cbiAgICAgIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gICAgICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgICAgIC8vIHNvIHdlIHVzZSB0aGUgb2xkIGJlaGF2aW91ciAoQ29udGV4dC5Db25zdW1lciByZWZlcmVuY2VzIENvbnRleHQpIHRvXG4gICAgICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAgICAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gICAgICAvLyBpbiBERVYgbW9kZSBpZiB0aGlzIHByb3BlcnR5IGV4aXN0cyBvciBub3QgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QuXG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFRoaXMgbWF5IGJlIGJlY2F1c2UgaXQncyBhIENvbnRleHQgKHJhdGhlciB0aGFuIGEgQ29uc3VtZXIpLlxuICAgICAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICAgICAgaWYgKGNvbnRleHQgIT09IGNvbnRleHQuQ29uc3VtZXIpIHtcbiAgICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBcIiArXG4gICAgICAgICAgICAgICAgICBcImEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/XCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgXCIgK1xuICAgICAgICAgICAgICBcImlzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0KTtcblxuICAgICAgdmFyIG5ld0NoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gQSBsYXp5IGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgICAgICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAgICAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gUmV1c2UgcHJldmlvdXMgZGVwZW5kZW5jaWVzXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICAgICAgfVxuXG4gICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkge1xuICAgICAgICAvLyBUaGUgY2hpbGRyZW4gZG9uJ3QgaGF2ZSBhbnkgd29yayBlaXRoZXIuIFdlIGNhbiBza2lwIHRoZW0uXG4gICAgICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuXG4gICAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdW50RmliZXIoY3VycmVudCwgb2xkV29ya0luUHJvZ3Jlc3MsIG5ld1dvcmtJblByb2dyZXNzKSB7XG4gICAgICB7XG4gICAgICAgIHZhciByZXR1cm5GaWJlciA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgICAgICBpZiAocmV0dXJuRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLlwiKTtcbiAgICAgICAgfSAvLyBEaXNjb25uZWN0IGZyb20gdGhlIG9sZCBjdXJyZW50LlxuICAgICAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG4gICAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICAgICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICAgICAgbmV3V29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG9sZFdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgICAgIGlmIChvbGRXb3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpIHtcbiAgICAgICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U2libGluZyA9IHJldHVybkZpYmVyLmNoaWxkO1xuXG4gICAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC5cIik7XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgICAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAgICAgLy8gU2luY2UgdGhlIG9sZCBmaWJlciBpcyBkaXNjb25uZWN0ZWQsIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgbWFudWFsbHkuXG5cbiAgICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcblxuICAgICAgICBpZiAoZGVsZXRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2N1cnJlbnRdO1xuICAgICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IENoaWxkRGVsZXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRpb25zLnB1c2goY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdXb3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7IC8vIFJlc3RhcnQgd29yayBmcm9tIHRoZSBuZXcgZmliZXIuXG5cbiAgICAgICAgcmV0dXJuIG5ld1dvcmtJblByb2dyZXNzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gICAgICAvLyBCZWZvcmUgcGVyZm9ybWluZyBhbiBlYXJseSBiYWlsb3V0LCB3ZSBtdXN0IGNoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nXG4gICAgICAvLyB1cGRhdGVzIG9yIGNvbnRleHQuXG4gICAgICB2YXIgdXBkYXRlTGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuXG4gICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZSh1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBObyBwZW5kaW5nIHVwZGF0ZSwgYnV0IGJlY2F1c2UgY29udGV4dCBpcyBwcm9wYWdhdGVkIGxhemlseSwgd2UgbmVlZFxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmaWJlciBkb2VzIG5vdCBoYXZlIGFueSBwZW5kaW5nIHdvcmsuIEJhaWxvdXQgd2l0aG91dCBlbnRlcmluZ1xuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlLiBUaGVyZSdzIHN0aWxsIHNvbWUgYm9va2tlZXBpbmcgd2UgdGhhdCBuZWVkcyB0byBiZSBkb25lXG4gICAgICAvLyBpbiB0aGlzIG9wdGltaXplZCBwYXRoLCBtb3N0bHkgcHVzaGluZyBzdHVmZiBvbnRvIHRoZSBzdGFjay5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjoge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWU7XG4gICAgICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0O1xuICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgbmV3VmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBQcm9maWxlciBzaG91bGQgb25seSBjYWxsIG9uUmVuZGVyIHdoZW4gb25lIG9mIGl0cyBkZXNjZW5kYW50cyBhY3R1YWxseSByZW5kZXJlZC5cbiAgICAgICAgICAgIHZhciBoYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuICAgICAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHJlbmRlciB0aGUgY2hpbGRyZW4sIHNvIHRoaXMgaXMganVzdCB0byBtYWludGFpblxuICAgICAgICAgICAgICAvLyBwdXNoL3BvcCBzeW1tZXRyeVxuICAgICAgICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpOyAvLyBXZSBrbm93IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCBzdXNwZW5kIGFnYWluIGJlY2F1c2UgaWYgaXQgaGFzXG4gICAgICAgICAgICAgIC8vIGJlZW4gdW5zdXNwZW5kZWQgaXQgaGFzIGNvbW1pdHRlZCBhcyBhIHJlc29sdmVkIFN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgLy8gSWYgaXQgbmVlZHMgdG8gYmUgcmV0cmllZCwgaXQgc2hvdWxkIGhhdmUgd29yayBzY2hlZHVsZWQgb24gaXQuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTsgLy8gV2Ugc2hvdWxkIG5ldmVyIHJlbmRlciB0aGUgY2hpbGRyZW4gb2YgYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IHVudGlsIHdlXG4gICAgICAgICAgICAgIC8vIHVwZ3JhZGUgaXQuIFdlIHJldHVybiBudWxsIGluc3RlYWQgb2YgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yay5cblxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gLy8gSWYgdGhpcyBib3VuZGFyeSBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB3ZSBuZWVkIHRvIGRlY2lkZVxuICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAgIC8vIGNoaWxkIGZyYWdtZW50LlxuXG4gICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRMYW5lcyA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXM7XG5cbiAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFVzZSB0aGUgbm9ybWFsIHBhdGhcbiAgICAgICAgICAgICAgLy8gdG8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gYWdhaW4uXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCBkb2VzIG5vdCBoYXZlIHBlbmRpbmcgd29yayBtYXJrZWRcbiAgICAgICAgICAgICAgLy8gb24gaXRcbiAgICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgZmFsbGJhY2sgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFNraXAgb3ZlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBjYW4gcmV0dXJuIGBudWxsYCBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBjaGVja2VkXG4gICAgICAgICAgICAgICAgLy8gd2hldGhlciB0aGVyZSB3ZXJlIG5lc3RlZCBjb250ZXh0IGNvbnN1bWVycywgdmlhIHRoZSBjYWxsIHRvXG4gICAgICAgICAgICAgICAgLy8gYGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmtgIGFib3ZlLlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgICAgICAgdmFyIF9oYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2FzIGluIGZhbGxiYWNrIHN0YXRlIGxhc3QgdGltZSwgYW5kIHdlIGhhdmUgYWxsIHRoZVxuICAgICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAvLyB0cmVlIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSB0YWlsLiBTbyB3ZSBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQgYmVmb3JlIGFuZCB3ZSdyZSByZW5kZXJpbmcgdGhlIHNhbWUgY2hpbGRyZW4sXG4gICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgLy8gaW4gdGhlIFwidG9nZXRoZXJcIiBtb2RlLCBzbyB3ZSBjYW4gY29udGludWUgZnJvbSB0aGUgc3RhdGUgd2UgaGFkLlxuXG4gICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVzZXQgdG8gdGhlIFwidG9nZXRoZXJcIiBtb2RlIGluIGNhc2Ugd2UndmUgc3RhcnRlZCBhIGRpZmZlcmVudFxuICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VMaXN0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiB0aGUgdHJlZSBzdGlsbCBuZWVkcyB0byBiZSBkZWZlcnJlZC4gVGhpcyBpc1xuICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAvLyBzbyB3ZSdsbCBqdXN0IGVudGVyIHRoYXQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2UnbGwgYmFpbCBvdXRcbiAgICAgICAgICAvLyBhdCB0aGUgbmV4dCBsZXZlbCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjaGlsZCBwcm9wc1xuICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIHJlZmFjdG9yIGBiZWdpbldvcmtgIHRvIHNwbGl0IHRoZSBiYWlsb3V0XG4gICAgICAgICAgLy8gcGF0aCBmcm9tIHRoZSBub3JtYWwgcGF0aC4gSSdtIHRlbXB0ZWQgdG8gZG8gYSBsYWJlbGVkIGJyZWFrIGhlcmVcbiAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcbiAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiZWdpbldvcmskMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCAmJiBjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Mua2V5LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8XG4gICAgICAgICAgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAvLyBGb3JjZSBhIHJlLXJlbmRlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZDpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgICAgLy8gVGhpcyBtYXkgYmUgdW5zZXQgaWYgdGhlIHByb3BzIGFyZSBkZXRlcm1pbmVkIHRvIGJlIGVxdWFsIGxhdGVyIChtZW1vKS5cbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOZWl0aGVyIHByb3BzIG5vciBsZWdhY3kgY29udGV4dCBjaGFuZ2VzLiBDaGVjayBpZiB0aGVyZSdzIGEgcGVuZGluZ1xuICAgICAgICAgIC8vIHVwZGF0ZSBvciBjb250ZXh0IGNoYW5nZS5cbiAgICAgICAgICB2YXIgaGFzU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0ID0gY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWhhc1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dCAmJiAvLyBJZiB0aGlzIGlzIHRoZSBzZWNvbmQgcGFzcyBvZiBhbiBlcnJvciBvciBzdXNwZW5zZSBib3VuZGFyeSwgdGhlcmVcbiAgICAgICAgICAgIC8vIG1heSBub3QgYmUgd29yayBzY2hlZHVsZWQgb24gYGN1cnJlbnRgLCBzbyB3ZSBjaGVjayBmb3IgdGhpcyBmbGFnLlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MkMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gTm8gcGVuZGluZyB1cGRhdGVzIG9yIGNvbnRleHQuIEJhaWwgb3V0IG5vdy5cbiAgICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZShcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb24gdGhpcyBmaWJlciwgYnV0IHRoZXJlIGFyZSBubyBuZXcgcHJvcHNcbiAgICAgICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgICAgICAvLyBjb25zdW1lciBwcm9kdWNlcyBhIGNoYW5nZWQgdmFsdWUsIGl0IHdpbGwgc2V0IHRoaXMgdG8gdHJ1ZS4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB3aWxsIGFzc3VtZSB0aGUgY2hpbGRyZW4gaGF2ZSBub3QgY2hhbmdlZCBhbmQgYmFpbCBvdXQuXG4gICAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9IC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNsZWFyIHBlbmRpbmcgdXBkYXRlIHByaW9yaXR5LlxuICAgICAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAgICAgLy8gdGhlIHVwZGF0ZSBxdWV1ZS4gSG93ZXZlciwgdGhlcmUncyBhbiBleGNlcHRpb246IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgICAgIC8vIHNvbWV0aW1lcyBiYWlscyBvdXQgbGF0ZXIgaW4gdGhlIGJlZ2luIHBoYXNlLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZFxuICAgICAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuXG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgTGF6eUNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBlbGVtZW50VHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuICAgICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICAgIHZhciByZXNvbHZlZFByb3BzID1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBDb21wb25lbnRcbiAgICAgICAgICAgICAgPyB1bnJlc29sdmVkUHJvcHNcbiAgICAgICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICByZXNvbHZlZFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudFxuICAgICAgICAgICAgICA/IF91bnJlc29sdmVkUHJvcHNcbiAgICAgICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgX0NvbXBvbmVudCxcbiAgICAgICAgICAgIF9yZXNvbHZlZFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG5cbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuXG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSG9zdFRleHQkMSgpO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6IHtcbiAgICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMiA9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZVxuICAgICAgICAgICAgICA/IF91bnJlc29sdmVkUHJvcHMyXG4gICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBfcmVzb2x2ZWRQcm9wczIsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIGNhc2UgTW9kZTpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICBjYXNlIE1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMiwgX3VucmVzb2x2ZWRQcm9wczMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IF90eXBlMi5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICAgICAgICBvdXRlclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgICAgIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgICAgIFwicHJvcFwiLFxuICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKF90eXBlMilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIudHlwZSwgX3Jlc29sdmVkUHJvcHMzKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF90eXBlMixcbiAgICAgICAgICAgIF9yZXNvbHZlZFByb3BzMyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHM0ID1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MlxuICAgICAgICAgICAgICA/IF91bnJlc29sdmVkUHJvcHM0XG4gICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgICAgcmV0dXJuIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgX0NvbXBvbmVudDIsXG4gICAgICAgICAgICBfcmVzb2x2ZWRQcm9wczQsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFNjb3BlQ29tcG9uZW50OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnICtcbiAgICAgICAgICBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBcIiArXG4gICAgICAgICAgXCJSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuXG4gICAgdmFyIHJlbmRlcmVyMkN1cnNvckRFVjtcblxuICAgIHtcbiAgICAgIHJlbmRlcmVyMkN1cnNvckRFViA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXJTaWdpbDtcblxuICAgIHtcbiAgICAgIC8vIFVzZSB0aGlzIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgY29udGV4dFxuICAgICAgcmVuZGVyZXJTaWdpbCA9IHt9O1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gICAgdmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gICAgdmFyIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IG51bGw7XG4gICAgdmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gICAgICAvLyBUaGlzIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgUmVhY3QgeWllbGRzIGV4ZWN1dGlvbiwgdG8gZW5zdXJlIGByZWFkQ29udGV4dGBcbiAgICAgIC8vIGNhbm5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgICAgIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICAgICAge1xuICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICAgICAge1xuICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hQcm92aWRlcihwcm92aWRlckZpYmVyLCBjb250ZXh0LCBuZXh0VmFsdWUpIHtcbiAgICAgIHtcbiAgICAgICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlMiwgcHJvdmlkZXJGaWJlcik7XG4gICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBuZXh0VmFsdWU7XG5cbiAgICAgICAge1xuICAgICAgICAgIHB1c2gocmVuZGVyZXIyQ3Vyc29yREVWLCBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyLCBwcm92aWRlckZpYmVyKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiAhPT0gcmVuZGVyZXJTaWdpbFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlIFwiICtcbiAgICAgICAgICAgICAgICBcInNhbWUgY29udGV4dCBwcm92aWRlci4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IHJlbmRlcmVyU2lnaWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wUHJvdmlkZXIoY29udGV4dCwgcHJvdmlkZXJGaWJlcikge1xuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgIHtcbiAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IGN1cnJlbnRWYWx1ZTtcblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXJlcjIgPSByZW5kZXJlcjJDdXJzb3JERVYuY3VycmVudDtcbiAgICAgICAgICBwb3AocmVuZGVyZXIyQ3Vyc29yREVWLCBwcm92aWRlckZpYmVyKTtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gY3VycmVudFJlbmRlcmVyMjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwb3AodmFsdWVDdXJzb3IsIHByb3ZpZGVyRmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgcGFyZW50LFxuICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICBwcm9wYWdhdGlvblJvb3RcbiAgICApIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMgb2YgYWxsIHRoZSBhbmNlc3RvcnMsIGluY2x1ZGluZyB0aGUgYWx0ZXJuYXRlcy5cbiAgICAgIHZhciBub2RlID0gcGFyZW50O1xuXG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGU7XG5cbiAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgICBub2RlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGFsdGVybmF0ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICFpc1N1YnNldE9mTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKVxuICAgICAgICApIHtcbiAgICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBlbHNlO1xuXG4gICAgICAgIGlmIChub2RlID09PSBwcm9wYWdhdGlvblJvb3QpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAobm9kZSAhPT0gcHJvcGFnYXRpb25Sb290KSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgdGhlIHByb3BhZ2F0aW9uIHJvb3Qgd2hlbiBzY2hlZHVsaW5nIGNvbnRleHQgd29yay4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gICAgICB7XG4gICAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VfZWFnZXIod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlX2VhZ2VyKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjb250ZXh0LFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgIGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDsgLy8gVmlzaXQgdGhpcyBmaWJlci5cblxuICAgICAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgICAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgLy8gTWF0Y2ghIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGlzIGZpYmVyLlxuICAgICAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0byB0aGUgY3VycmVudCBmaWJlciwgdG9vLCB3aGljaCBtZWFucyBpdCB3aWxsIHBlcnNpc3QgZXZlbiBpZlxuICAgICAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG4gICAgICAgICAgICAgICAgLy8gSW5saW5lZCBgZW5xdWV1ZVVwZGF0ZWAgdG8gcmVtb3ZlIGludGVybGVhdmVkIHVwZGF0ZSBjaGVja1xuXG4gICAgICAgICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICAgICAgICAgICAgICAgICAgdmFyIHBlbmRpbmcgPSBzaGFyZWRRdWV1ZS5wZW5kaW5nO1xuXG4gICAgICAgICAgICAgICAgICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoXG4gICAgICAgICAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICk7IC8vIE1hcmsgdGhlIHVwZGF0ZWQgbGFuZXMgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jeSBsaXN0LlxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgICAgIC8vIERvbid0IHNjYW4gZGVlcGVyIGlmIHRoaXMgaXMgYSBtYXRjaGluZyBwcm92aWRlclxuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgICAgICAvLyBJZiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgYm91bmRhcnkgaXMgaW4gdGhpcyBzdWJ0cmVlLCB3ZSBkb24ndCBrbm93XG4gICAgICAgICAgLy8gaWYgaXQgd2lsbCBoYXZlIGFueSBjb250ZXh0IGNvbnN1bWVycyBpbiBpdC4gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzXG4gICAgICAgICAgLy8gbWFyayBpdCBhcyBoYXZpbmcgdXBkYXRlcy5cbiAgICAgICAgICB2YXIgcGFyZW50U3VzcGVuc2UgPSBmaWJlci5yZXR1cm47XG5cbiAgICAgICAgICBpZiAocGFyZW50U3VzcGVuc2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJXZSBqdXN0IGNhbWUgZnJvbSBhIHBhcmVudCBzbyB3ZSBtdXN0IGhhdmUgaGFkIGEgcGFyZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLmxhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnRTdXNwZW5zZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHZhciBfYWx0ZXJuYXRlID0gcGFyZW50U3VzcGVuc2UuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKF9hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9hbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKF9hbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwYXNzaW5nIHRoaXMgZmliZXIgYXMgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ugd2FudCB0byBzY2hlZHVsZSB0aGlzIGZpYmVyIGFzIGhhdmluZyB3b3JrXG4gICAgICAgICAgLy8gb24gaXRzIGNoaWxkcmVuLiBXZSdsbCB1c2UgdGhlIGNoaWxkTGFuZXMgb25cbiAgICAgICAgICAvLyB0aGlzIGZpYmVyIHRvIGluZGljYXRlIHRoYXQgYSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG4gICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEZpYmVyID0gZmliZXIuc2libGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgIG5leHRGaWJlci5yZXR1cm4gPSBmaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuXG4gICAgICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYmFjayB0byB0aGUgcm9vdCBvZiB0aGlzIHN1YnRyZWUuIEV4aXQuXG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBzaWJsaW5nIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuICAgICAgICAgICAgbmV4dEZpYmVyID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgICAgIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IG51bGw7XG4gICAgICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gICAgICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgICAgICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICAgICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAgICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjaGVjayBiZWxvdywgaXQncyBub3QgZW5mb3JjZWQgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZi5cbiAgICAgICAgaWYgKGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gXCIgK1xuICAgICAgICAgICAgICBcIkluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIFwiICtcbiAgICAgICAgICAgICAgXCJJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgXCIgK1xuICAgICAgICAgICAgICBcImluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKGNvbnN1bWVyLCBjb250ZXh0LCByZW5kZXJMYW5lcykge1xuICAgICAgaWYgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KGNvbnN1bWVyLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xuXG4gICAgICBpZiAobGFzdEZ1bGx5T2JzZXJ2ZWRDb250ZXh0ID09PSBjb250ZXh0KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgY29udGV4dEl0ZW0gPSB7XG4gICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICBtZW1vaXplZFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmIChjb25zdW1lciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIFwiICtcbiAgICAgICAgICAgICAgICBcIkluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIFwiICtcbiAgICAgICAgICAgICAgICBcIkluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBcIiArXG4gICAgICAgICAgICAgICAgXCJpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG4gICAgICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dEl0ZW07XG4gICAgICAgICAgY29uc3VtZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICAgICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHRJdGVtXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgYSBuZXcgY29udGV4dCBpdGVtLlxuICAgICAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID1cbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xuICAgIGZ1bmN0aW9uIHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuXG4gICAgICBpZiAodHJhbnNpdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuZXZlciBhIHRyYW5zaXRpb24gdXBkYXRlIGlzIHNjaGVkdWxlZCwgcmVnaXN0ZXIgYSBjYWxsYmFjayBvbiB0aGVcbiAgICAgICAgLy8gdHJhbnNpdGlvbiBvYmplY3Qgc28gd2UgY2FuIGdldCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzY29wZSBmdW5jdGlvbi5cbiAgICAgICAgdHJhbnNpdGlvbi5fY2FsbGJhY2tzLmFkZChoYW5kbGVBc3luY0FjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmFuc2l0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUFzeW5jQWN0aW9uKHRyYW5zaXRpb24sIHRoZW5hYmxlKSB7fVxuXG4gICAgZnVuY3Rpb24gbm90aWZ5VHJhbnNpdGlvbkNhbGxiYWNrcyh0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSkge1xuICAgICAgdmFyIGNhbGxiYWNrcyA9IHRyYW5zaXRpb24uX2NhbGxiYWNrcztcbiAgICAgIGNhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSAvLyBXaGVuIHJldHJ5aW5nIGEgU3VzcGVuc2UvT2Zmc2NyZWVuIGJvdW5kYXJ5LCB3ZSByZXN0b3JlIHRoZSBjYWNoZSB0aGF0IHdhc1xuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZENhY2hlKCkge1xuICAgICAge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIFN1c3BlbnNlIGJvdW5kYXJ5IHN1c3BlbmRzLiBJdCByZXR1cm5zIHRoZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRhZyB0aGUgZmliZXIgd2l0aCBhbiB1cGRhdGUgZWZmZWN0LiBUaGlzIHR1cm5zIGEgUGxhY2VtZW50IGludG9cbiAgICAgKiBhIFBsYWNlbWVudEFuZFVwZGF0ZS5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrUmVmKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWYgfCBSZWZTdGF0aWM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluIHBlcnNpc3RlbnQgbW9kZSwgcmV0dXJuIHdoZXRoZXIgdGhpcyB1cGRhdGUgbmVlZHMgdG8gY2xvbmUgdGhlIHN1YnRyZWUuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBkb2VzUmVxdWlyZUNsb25lKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmspIHtcbiAgICAgIHZhciBkaWRCYWlsb3V0ID1cbiAgICAgICAgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LmNoaWxkID09PSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICBpZiAoZGlkQmFpbG91dCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY29tcGxldGVkV29yay5mbGFncyAmIENoaWxkRGVsZXRpb24pICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIFRPRE86IElmIHdlIG1vdmUgdGhlIGBkb2VzUmVxdWlyZUNsb25lYCBjYWxsIGFmdGVyIGBidWJibGVQcm9wZXJ0aWVzYFxuICAgICAgLy8gdGhlbiB3ZSBvbmx5IGhhdmUgdG8gY2hlY2sgdGhlIGBjb21wbGV0ZWRXb3JrLnN1YnRyZWVGbGFnc2AuXG5cbiAgICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGNoaWxkLmZsYWdzICYgTXV0YXRpb25NYXNrKSAhPT0gTm9GbGFncyQxIHx8XG4gICAgICAgICAgKGNoaWxkLnN1YnRyZWVGbGFncyAmIE11dGF0aW9uTWFzaykgIT09IE5vRmxhZ3MkMVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGVuZEFsbENoaWxkcmVuKFxuICAgICAgcGFyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsXG4gICAgICBpc0hpZGRlblxuICAgICkge1xuICAgICAge1xuICAgICAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAgICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgICAgICB2YXIgX25vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoX25vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoX25vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBfbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmIChuZWVkc1Zpc2liaWxpdHlUb2dnbGUgJiYgaXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBjbG9uZUhpZGRlbkluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgaW5zdGFuY2UpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoX25vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IF9ub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgaWYgKG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSAmJiBpc0hpZGRlbikge1xuICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBjbG9uZUhpZGRlblRleHRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50LCBfaW5zdGFuY2UpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoX25vZGUudGFnID09PSBIb3N0UG9ydGFsKTtcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIF9ub2RlLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50ICYmXG4gICAgICAgICAgICBfbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGUgY2hpbGRyZW4gaW4gdGhpcyBib3VuZGFyeSBhcmUgaGlkZGVuLiBUb2dnbGUgdGhlaXIgdmlzaWJpbGl0eVxuICAgICAgICAgICAgLy8gYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF9ub2RlLmNoaWxkO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY2hpbGQucmV0dXJuID0gX25vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKFxuICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgIF9ub2RlLFxuICAgICAgICAgICAgICAvKiBuZWVkc1Zpc2liaWxpdHlUb2dnbGUgKi9cbiAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgLyogaXNIaWRkZW4gKi9cbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9ub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbm9kZS5jaGlsZC5yZXR1cm4gPSBfbm9kZTtcbiAgICAgICAgICAgIF9ub2RlID0gX25vZGUuY2hpbGQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX25vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgIHdoaWxlIChfbm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICAgIGlmIChfbm9kZS5yZXR1cm4gPT09IG51bGwgfHwgX25vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9ub2RlID0gX25vZGUucmV0dXJuO1xuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICBfbm9kZS5zaWJsaW5nLnJldHVybiA9IF9ub2RlLnJldHVybjtcbiAgICAgICAgICBfbm9kZSA9IF9ub2RlLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEFuIHVuZm9ydHVuYXRlIGZvcmsgb2YgYXBwZW5kQWxsQ2hpbGRyZW4gYmVjYXVzZSB3ZSBoYXZlIHR3byBkaWZmZXJlbnQgcGFyZW50IHR5cGVzLlxuXG4gICAgZnVuY3Rpb24gYXBwZW5kQWxsQ2hpbGRyZW5Ub0NvbnRhaW5lcihcbiAgICAgIGNvbnRhaW5lckNoaWxkU2V0LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsXG4gICAgICBpc0hpZGRlblxuICAgICkge1xuICAgICAge1xuICAgICAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAgICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgICAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmIChuZWVkc1Zpc2liaWxpdHlUb2dnbGUgJiYgaXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBjbG9uZUhpZGRlbkluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lckNoaWxkU2V0KGNvbnRhaW5lckNoaWxkU2V0LCBpbnN0YW5jZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgIHZhciBfaW5zdGFuY2UyID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmIChuZWVkc1Zpc2liaWxpdHlUb2dnbGUgJiYgaXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IGNsb25lSGlkZGVuVGV4dEluc3RhbmNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXJDaGlsZFNldChjb250YWluZXJDaGlsZFNldCwgX2luc3RhbmNlMik7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCk7XG4gICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICBub2RlLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50ICYmXG4gICAgICAgICAgICBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRoZSBjaGlsZHJlbiBpbiB0aGlzIGJvdW5kYXJ5IGFyZSBoaWRkZW4uIFRvZ2dsZSB0aGVpciB2aXNpYmlsaXR5XG4gICAgICAgICAgICAvLyBiZWZvcmUgYXBwZW5kaW5nLlxuICAgICAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgICAgICB9IC8vIElmIE9mZnNjcmVlbiBpcyBub3QgaW4gbWFudWFsIG1vZGUsIGRldGFjaGVkIHRyZWUgaXMgaGlkZGVuIGZyb20gdXNlciBzcGFjZS5cblxuICAgICAgICAgICAgdmFyIF9uZWVkc1Zpc2liaWxpdHlUb2dnbGUgPSAhaXNPZmZzY3JlZW5NYW51YWwobm9kZSk7XG5cbiAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuVG9Db250YWluZXIoXG4gICAgICAgICAgICAgIGNvbnRhaW5lckNoaWxkU2V0LFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAvKiBuZWVkc1Zpc2liaWxpdHlUb2dnbGUgKi9cbiAgICAgICAgICAgICAgX25lZWRzVmlzaWJpbGl0eVRvZ2dsZSxcbiAgICAgICAgICAgICAgLyogaXNIaWRkZW4gKi9cbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9kZSA9IG5vZGU7XG5cbiAgICAgICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvc3RDb250YWluZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGRvZXNSZXF1aXJlQ2xvbmUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgdmFyIHBvcnRhbE9yUm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gcG9ydGFsT3JSb290LmNvbnRhaW5lckluZm87XG4gICAgICAgICAgdmFyIG5ld0NoaWxkU2V0ID0gY3JlYXRlQ29udGFpbmVyQ2hpbGRTZXQoKTsgLy8gSWYgY2hpbGRyZW4gbWlnaHQgaGF2ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIGFkZCB0aGVtIGFsbCB0byB0aGUgc2V0LlxuXG4gICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW5Ub0NvbnRhaW5lcihcbiAgICAgICAgICAgIG5ld0NoaWxkU2V0LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAvKiBuZWVkc1Zpc2liaWxpdHlUb2dnbGUgKi9cbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgLyogaXNIaWRkZW4gKi9cbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwb3J0YWxPclJvb3QucGVuZGluZ0NoaWxkcmVuID0gbmV3Q2hpbGRTZXQ7IC8vIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGUgY29udGFpbmVyIHRvIHN3YXAgb3V0IHRoZSBjb250YWluZXIuXG5cbiAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBmaW5hbGl6ZUNvbnRhaW5lckNoaWxkcmVuKGNvbnRhaW5lciwgbmV3Q2hpbGRTZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHR5cGUsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjdXJyZW50SW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIF9vbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgdGhlcmUgYXJlIG5vIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZSwgdGhlbiBub25lIG9mIG91ciBjaGlsZHJlbiBoYWQgYW55IHVwZGF0ZXMuXG4gICAgICAgIC8vIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHdlIGNhbiByZXVzZSBhbGwgb2YgdGhlbS5cblxuICAgICAgICB2YXIgcmVxdWlyZXNDbG9uZSA9IGRvZXNSZXF1aXJlQ2xvbmUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmICghcmVxdWlyZXNDbG9uZSAmJiBfb2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAgICAgLy8gTm8gY2hhbmdlcywganVzdCByZXVzZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UuXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWlnaHQgcmVsZWFzZSBhIHByZXZpb3VzIGNsb25lLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICB2YXIgbmV3Q2hpbGRTZXQgPSBudWxsO1xuXG4gICAgICAgIGlmIChyZXF1aXJlc0Nsb25lICYmIHBhc3NDaGlsZHJlbldoZW5DbG9uaW5nUGVyc2lzdGVkTm9kZXMpIHtcbiAgICAgICAgICBuZXdDaGlsZFNldCA9IGNyZWF0ZUNvbnRhaW5lckNoaWxkU2V0KCk7IC8vIElmIGNoaWxkcmVuIG1pZ2h0IGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byBhZGQgdGhlbSBhbGwgdG8gdGhlIHNldC5cblxuICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuVG9Db250YWluZXIoXG4gICAgICAgICAgICBuZXdDaGlsZFNldCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgLyogbmVlZHNWaXNpYmlsaXR5VG9nZ2xlICovXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIC8qIGlzSGlkZGVuICovXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3SW5zdGFuY2UgPSBjbG9uZUluc3RhbmNlKFxuICAgICAgICAgIGN1cnJlbnRJbnN0YW5jZSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIF9vbGRQcm9wcyxcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAhcmVxdWlyZXNDbG9uZSxcbiAgICAgICAgICBuZXdDaGlsZFNldFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdJbnN0YW5jZSA9PT0gY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgLy8gTm8gY2hhbmdlcywganVzdCByZXVzZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UuXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWlnaHQgcmVsZWFzZSBhIHByZXZpb3VzIGNsb25lLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ2VydGFpbiByZW5kZXJlcnMgcmVxdWlyZSBjb21taXQtdGltZSBlZmZlY3RzIGZvciBpbml0aWFsIG1vdW50LlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG5ld0luc3RhbmNlO1xuXG4gICAgICAgIGlmICghcmVxdWlyZXNDbG9uZSkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvdGhlciBlZmZlY3RzIGluIHRoaXMgdHJlZSwgd2UgbmVlZCB0byBmbGFnIHRoaXMgbm9kZSBhcyBoYXZpbmcgb25lLlxuICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgaXQgZm9yIGFueXRoaW5nLlxuICAgICAgICAgIC8vIE90aGVyd2lzZSBwYXJlbnRzIHdvbid0IGtub3cgdGhhdCB0aGVyZSBhcmUgbmV3IGNoaWxkcmVuIHRvIHByb3BhZ2F0ZSB1cHdhcmRzLlxuICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGNoaWxkcmVuIG1pZ2h0IGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byBhZGQgdGhlbSBhbGwgdG8gdGhlIHNldC5cbiAgICAgICAgICBhcHBlbmRBbGxDaGlsZHJlbihcbiAgICAgICAgICAgIG5ld0luc3RhbmNlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAvKiBuZWVkc1Zpc2liaWxpdHlUb2dnbGUgKi9cbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgLyogaXNIaWRkZW4gKi9cbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGNvbXBsZXRlIHBoYXNlLCBiZWNhdXNlXG4gICAgLy8gaXQgbWlnaHQgdGhyb3cgdG8gc3VzcGVuZCwgYW5kIGlmIHRoZSByZXNvdXJjZSBpbW1lZGlhdGVseSBsb2FkcywgdGhlIHdvcmtcbiAgICAvLyBsb29wIHdpbGwgcmVzdW1lIHJlbmRlcmluZyBhcyBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBjb21wbGV0ZWQuIFNvIGl0IG11c3RcbiAgICAvLyBmdWxseSBjb21wbGV0ZS5cbiAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBpZGVhbGx5IG1vdmUgdG8gYmVnaW4gcGhhc2UsIGJ1dCBjdXJyZW50bHkgdGhlIGluc3RhbmNlIGlzXG4gICAgLy8gbm90IGNyZWF0ZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBGb3Igb3VyIGV4aXN0aW5nIHVzZSBjYXNlcywgaG9zdCBub2Rlc1xuICAgIC8vIHRoYXQgc3VzcGVuZCBkb24ndCBoYXZlIGNoaWxkcmVuLCBzbyBpdCBkb2Vzbid0IG1hdHRlci4gQnV0IHRoYXQgbWlnaHQgbm90XG4gICAgLy8gYWx3YXlzIGJlIHRydWUgaW4gdGhlIGZ1dHVyZS5cblxuICAgIGZ1bmN0aW9uIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgdHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgLy8gSWYgdGhpcyBmbGFnIHdhcyBzZXQgcHJldmlvdXNseSwgd2UgY2FuIHJlbW92ZSBpdC4gVGhlIGZsYWdcbiAgICAgICAgLy8gcmVwcmVzZW50cyB3aGV0aGVyIHRoaXMgcGFydGljdWxhciBzZXQgb2YgcHJvcHMgbWlnaHQgZXZlciBuZWVkIHRvXG4gICAgICAgIC8vIHN1c3BlbmQuIFRoZSBzYWZlc3QgdGhpbmcgdG8gZG8gaXMgZm9yIG1heVN1c3BlbmRDb21taXQgdG8gYWx3YXlzXG4gICAgICAgIC8vIHJldHVybiB0cnVlLCBidXQgaWYgdGhlIHJlbmRlcmVyIGlzIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgdGhlXG4gICAgICAgIC8vIHVuZGVybHlpbmcgcmVzb3VyY2Ugd29uJ3QgYmUgZXZpY3RlZCwgaXQgY2FuIHJldHVybiBmYWxzZSBhcyBhXG4gICAgICAgIC8vIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfk1heVN1c3BlbmRDb21taXQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gTWFyayB0aGlzIGZpYmVyIHdpdGggYSBmbGFnLiBUaGlzIGdldHMgc2V0IG9uIGFsbCBob3N0IGluc3RhbmNlc1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJldHJ5UXVldWUpIHtcbiAgICAgIHZhciB3YWtlYWJsZXMgPSByZXRyeVF1ZXVlO1xuXG4gICAgICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYSByZXRyeSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZS5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0byBwYXNzaXZlIHBoYXNlXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgYm91bmRhcnkgc3VzcGVuZGVkLCBidXQgbm8gd2FrZWFibGVzIHdlcmUgYWRkZWQgdG8gdGhlIHJldHJ5XG4gICAgICAgIC8vIHF1ZXVlLiBDaGVjayBpZiB0aGUgcmVuZGVyZXIgc3VzcGVuZGVkIGNvbW1pdC4gSWYgc28sIHRoaXMgbWVhbnNcbiAgICAgICAgLy8gdGhhdCBvbmNlIHRoZSBmYWxsYmFjayBpcyBjb21taXR0ZWQsIHdlIGNhbiBpbW1lZGlhdGVseSByZXRyeVxuICAgICAgICAvLyByZW5kZXJpbmcgYWdhaW4sIGJlY2F1c2UgcmVuZGVyaW5nIHdhc24ndCBhY3R1YWxseSBibG9ja2VkLiBPbmx5XG4gICAgICAgIC8vIHRoZSBjb21taXQgcGhhc2UuXG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGEgbW9kZWwgd2hlcmUgd2UgYWx3YXlzIHNjaGVkdWxlIGFuIGltbWVkaWF0ZSByZXRyeSwgZXZlblxuICAgICAgICAvLyBmb3Igbm9ybWFsIFN1c3BlbnNlLiBUaGF0IHdheSB0aGUgcmV0cnkgY2FuIHBhcnRpYWxseSByZW5kZXIgdXAgdG8gdGhlXG4gICAgICAgIC8vIGZpcnN0IHRoaW5nIHRoYXQgc3VzcGVuZHMuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIFNjaGVkdWxlUmV0cnkpIHtcbiAgICAgICAgICB2YXIgcmV0cnlMYW5lID0gLy8gVE9ETzogVGhpcyBjaGVjayBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgaW50byBjbGFpbU5leHRSZXRyeUxhbmVcbiAgICAgICAgICAgIC8vIEkgYWxzbyBzdXNwZWN0IHRoYXQgd2UgbmVlZCBzb21lIGZ1cnRoZXIgY29uc29saWRhdGlvbiBvZiBvZmZzY3JlZW5cbiAgICAgICAgICAgIC8vIGFuZCByZXRyeSBsYW5lcy5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyAhPT0gT2Zmc2NyZWVuQ29tcG9uZW50XG4gICAgICAgICAgICAgID8gY2xhaW1OZXh0UmV0cnlMYW5lKClcbiAgICAgICAgICAgICAgOiBPZmZzY3JlZW5MYW5lO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgcmV0cnlMYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgICB7XG4gICAgICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHRleHQgY29udGVudCBkaWZmZXJzLCB3ZSdsbCBjcmVhdGUgYSBuZXcgdGV4dCBpbnN0YW5jZSBmb3IgaXQuXG4gICAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKFxuICAgICAgICAgICAgbmV3VGV4dCxcbiAgICAgICAgICAgIHJvb3RDb250YWluZXJJbnN0YW5jZSxcbiAgICAgICAgICAgIGN1cnJlbnRIb3N0Q29udGV4dCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKTsgLy8gV2UnbGwgaGF2ZSB0byBtYXJrIGl0IGFzIGhhdmluZyBhbiBlZmZlY3QsIGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSB0aGUgZWZmZWN0IGZvciBhbnl0aGluZy5cbiAgICAgICAgICAvLyBUaGlzIGxldHMgdGhlIHBhcmVudHMga25vdyB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGVpciBjaGlsZHJlbiBoYXMgY2hhbmdlZC5cblxuICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgICAgIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICAgICAgY2FzZSBcImhpZGRlblwiOiB7XG4gICAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgICB2YXIgdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHRhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWlsTm9kZSA9IHRhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG4gICAgICAgICAgaWYgKGxhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgICAgbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcImNvbGxhcHNlZFwiOiB7XG4gICAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgICB2YXIgX3RhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAoX3RhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoX3RhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfdGFpbE5vZGUgPSBfdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cbiAgICAgICAgICBpZiAoX2xhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZGVkIGR1cmluZyB0aGUgaGVhZC4gV2Ugd2FudCB0byBzaG93IGF0IGxlYXN0IG9uZVxuICAgICAgICAgICAgICAvLyByb3cgYXQgdGhlIHRhaWwuIFNvIHdlJ2xsIGtlZXAgb24gYW5kIGN1dCBvZmYgdGhlIHJlc3QuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICAgIF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGVQcm9wZXJ0aWVzKGNvbXBsZXRlZFdvcmspIHtcbiAgICAgIHZhciBkaWRCYWlsb3V0ID1cbiAgICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUgIT09IG51bGwgJiZcbiAgICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQgPT09IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB2YXIgc3VidHJlZUZsYWdzID0gTm9GbGFncyQxO1xuXG4gICAgICBpZiAoIWRpZEJhaWxvdXQpIHtcbiAgICAgICAgLy8gQnViYmxlIHVwIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUuXG4gICAgICAgIGlmICgoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgICAgICAgIC8vIHByb2ZpbGVyIGR1cmF0aW9ucy5cbiAgICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBuZXdDaGlsZExhbmVzLFxuICAgICAgICAgICAgICBtZXJnZUxhbmVzKGNoaWxkLmxhbmVzLCBjaGlsZC5jaGlsZExhbmVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHN1YnRyZWVGbGFncyB8PSBjaGlsZC5zdWJ0cmVlRmxhZ3M7XG4gICAgICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQuZmxhZ3M7IC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLiBUaGlzIHZhbHVlIHdpbGxcbiAgICAgICAgICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgICAgICAgICAvLyBXaGVuIHdvcmsgaXMgZG9uZSwgaXQgc2hvdWxkIGJ1YmJsZSB0byB0aGUgcGFyZW50J3MgYWN0dWFsRHVyYXRpb24uIElmXG4gICAgICAgICAgICAvLyB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLCB0aGVuXG4gICAgICAgICAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgICAgICAgICAvLyByZW5kZXIuIEluIHRoYXQgY2FzZSBpdCBzaG91bGQgbm90IGJ1YmJsZS4gV2UgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgd2FzXG4gICAgICAgICAgICAvLyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYWRkaXRpb25dIGFkZGl0aW9uIHdpdGggcG9zc2libGUgbnVsbC91bmRlZmluZWQgdmFsdWVcblxuICAgICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247IC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG5cbiAgICAgICAgICAgIHRyZWVCYXNlRHVyYXRpb24gKz0gY2hpbGQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX2NoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBuZXdDaGlsZExhbmVzLFxuICAgICAgICAgICAgICBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZC5zdWJ0cmVlRmxhZ3M7XG4gICAgICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkLmZsYWdzOyAvLyBVcGRhdGUgdGhlIHJldHVybiBwb2ludGVyIHNvIHRoZSB0cmVlIGlzIGNvbnNpc3RlbnQuIFRoaXMgaXMgYSBjb2RlXG4gICAgICAgICAgICAvLyBzbWVsbCBiZWNhdXNlIGl0IGFzc3VtZXMgdGhlIGNvbW1pdCBwaGFzZSBpcyBuZXZlciBjb25jdXJyZW50IHdpdGhcbiAgICAgICAgICAgIC8vIHRoZSByZW5kZXIgcGhhc2UuIFdpbGwgYWRkcmVzcyBkdXJpbmcgcmVmYWN0b3IgdG8gYWx0ZXJuYXRlIG1vZGVsLlxuXG4gICAgICAgICAgICBfY2hpbGQucmV0dXJuID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsuc3VidHJlZUZsYWdzIHw9IHN1YnRyZWVGbGFncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuICAgICAgICBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAgICAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgICAgICAgdmFyIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgICAgIHZhciBfY2hpbGQyID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICAgIHdoaWxlIChfY2hpbGQyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgICAgICAgbmV3Q2hpbGRMYW5lcyxcbiAgICAgICAgICAgICAgbWVyZ2VMYW5lcyhfY2hpbGQyLmxhbmVzLCBfY2hpbGQyLmNoaWxkTGFuZXMpXG4gICAgICAgICAgICApOyAvLyBcIlN0YXRpY1wiIGZsYWdzIHNoYXJlIHRoZSBsaWZldGltZSBvZiB0aGUgZmliZXIvaG9vayB0aGV5IGJlbG9uZyB0byxcbiAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBidWJibGUgdGhvc2UgdXAgZXZlbiBkdXJpbmcgYSBiYWlsb3V0LiBBbGwgdGhlIG90aGVyXG4gICAgICAgICAgICAvLyBmbGFncyBoYXZlIGEgbGlmZXRpbWUgb25seSBvZiBhIHNpbmdsZSByZW5kZXIgKyBjb21taXQsIHNvIHdlIHNob3VsZFxuICAgICAgICAgICAgLy8gaWdub3JlIHRoZW0uXG5cbiAgICAgICAgICAgIHN1YnRyZWVGbGFncyB8PSBfY2hpbGQyLnN1YnRyZWVGbGFncyAmIFN0YXRpY01hc2s7XG4gICAgICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkMi5mbGFncyAmIFN0YXRpY01hc2s7IC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG5cbiAgICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uICs9IF9jaGlsZDIudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIF9jaGlsZDIgPSBfY2hpbGQyLnNpYmxpbmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9jaGlsZDMgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKF9jaGlsZDMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBuZXdDaGlsZExhbmVzLFxuICAgICAgICAgICAgICBtZXJnZUxhbmVzKF9jaGlsZDMubGFuZXMsIF9jaGlsZDMuY2hpbGRMYW5lcylcbiAgICAgICAgICAgICk7IC8vIFwiU3RhdGljXCIgZmxhZ3Mgc2hhcmUgdGhlIGxpZmV0aW1lIG9mIHRoZSBmaWJlci9ob29rIHRoZXkgYmVsb25nIHRvLFxuICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGJ1YmJsZSB0aG9zZSB1cCBldmVuIGR1cmluZyBhIGJhaWxvdXQuIEFsbCB0aGUgb3RoZXJcbiAgICAgICAgICAgIC8vIGZsYWdzIGhhdmUgYSBsaWZldGltZSBvbmx5IG9mIGEgc2luZ2xlIHJlbmRlciArIGNvbW1pdCwgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAvLyBpZ25vcmUgdGhlbS5cblxuICAgICAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZDMuc3VidHJlZUZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgICAgICAgIHN1YnRyZWVGbGFncyB8PSBfY2hpbGQzLmZsYWdzICYgU3RhdGljTWFzazsgLy8gVXBkYXRlIHRoZSByZXR1cm4gcG9pbnRlciBzbyB0aGUgdHJlZSBpcyBjb25zaXN0ZW50LiBUaGlzIGlzIGEgY29kZVxuICAgICAgICAgICAgLy8gc21lbGwgYmVjYXVzZSBpdCBhc3N1bWVzIHRoZSBjb21taXQgcGhhc2UgaXMgbmV2ZXIgY29uY3VycmVudCB3aXRoXG4gICAgICAgICAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLiBXaWxsIGFkZHJlc3MgZHVyaW5nIHJlZmFjdG9yIHRvIGFsdGVybmF0ZSBtb2RlbC5cblxuICAgICAgICAgICAgX2NoaWxkMy5yZXR1cm4gPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgICAgX2NoaWxkMyA9IF9jaGlsZDMuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLnN1YnRyZWVGbGFncyB8PSBzdWJ0cmVlRmxhZ3M7XG4gICAgICB9XG5cbiAgICAgIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG4gICAgICByZXR1cm4gZGlkQmFpbG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dFN0YXRlXG4gICAgKSB7XG4gICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSgpO1xuXG4gICAgICBpZiAobmV4dFN0YXRlICE9PSBudWxsICYmIG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlIG1pZ2h0IGJlIGluc2lkZSBhIGh5ZHJhdGlvbiBzdGF0ZSB0aGUgZmlyc3QgdGltZSB3ZSdyZSBwaWNraW5nIHVwIHRoaXNcbiAgICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcnksIGFuZCBhbHNvIGFmdGVyIHdlJ3ZlIHJlZW50ZXJlZCBpdCBmb3IgZnVydGhlciBoeWRyYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKCF3YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQgd2FzIGNvbXBsZXRlZCB3aXRob3V0IGEgaHlkcmF0ZWQgbm9kZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UoKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hcml0aG1ldGljXSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0eXBlIGNhc3RpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgLT0gb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgYm91bmRhcnkgZGlkIG5vdCBzdXNwZW5kIHNvIGl0J3Mgbm93IGh5ZHJhdGVkIGFuZCB1bnN1c3BlbmRlZC5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQsIHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gZWZmZWN0IHRvIG1hcmsgdGhpcyBib3VuZGFyeVxuICAgICAgICAgIC8vIGFzIGhhdmluZyBoeWRyYXRlZCBzbyBldmVudHMga25vdyB0aGF0IHRoZXkncmUgZnJlZSB0byBiZSBpbnZva2VkLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBhIHNpZ25hbCB0byByZXBsYXkgZXZlbnRzIGFuZCB0aGUgc3VzcGVuc2UgY2FsbGJhY2suXG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHN1c3BlbmRlZCwgc2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCByZXRyeSBsaXN0ZW5lcnMuXG4gICAgICAgICAgLy8gU28gd2UgbWlnaHQgYXMgd2VsbCBhbHdheXMgbWFyayB0aGlzLlxuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgdmFyIF9pc1RpbWVkT3V0U3VzcGVuc2UgPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKF9pc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoX3ByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hcml0aG1ldGljXSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0eXBlIGNhc3RpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgLT0gb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdWNjZXNzZnVsbHkgY29tcGxldGVkIHRoaXMgdHJlZS4gSWYgdGhpcyB3YXMgYSBmb3JjZWQgY2xpZW50IHJlbmRlcixcbiAgICAgICAgLy8gdGhlcmUgbWF5IGhhdmUgYmVlbiByZWNvdmVyYWJsZSBlcnJvcnMgZHVyaW5nIGZpcnN0IGh5ZHJhdGlvblxuICAgICAgICAvLyBhdHRlbXB0LiBJZiBzbywgYWRkIHRoZW0gdG8gYSBxdWV1ZSBzbyB3ZSBjYW4gbG9nIHRoZW0gaW4gdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS5cbiAgICAgICAgdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKTsgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBTdXNwZW5zZSBwYXRoXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBOb3RlOiBUaGlzIGludGVudGlvbmFsbHkgZG9lc24ndCBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcgYmVjYXVzZSBjb21wYXJpbmdcblxuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICBjYXNlIE1vZGU6XG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDoge1xuICAgICAgICAgIHZhciBmaWJlclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICAgIGZpYmVyUm9vdC5jb250ZXh0ID0gZmliZXJSb290LnBlbmRpbmdDb250ZXh0O1xuICAgICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgcG9wIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSBhbnkgcmVtYWluaW5nIGNoaWxkcmVuXG4gICAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHRoZW4gd2UnbGwgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUgZm9yXG4gICAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBjbGllbnQgcm9vdFxuICAgICAgICAgICAgICAgICAgIXByZXZTdGF0ZS5pc0RlaHlkcmF0ZWQgfHwgLy8gQ2hlY2sgaWYgd2UgcmV2ZXJ0ZWQgdG8gY2xpZW50IHJlbmRlcmluZyAoZS5nLiBkdWUgdG8gYW4gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBGb3JjZUNsaWVudFJlbmRlcikgIT09IE5vRmxhZ3MkMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGNsZWFyIHRoaXMgY29udGFpbmVyIGF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIG5leHQgY29tbWl0LiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgUmVhY3QgcmVuZGVyaW5nIGludG8gYVxuICAgICAgICAgICAgICAgICAgLy8gY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvclxuICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGwgaWYgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSBjb250YWluZXIgd291bGQgYWxyZWFkeVxuICAgICAgICAgICAgICAgICAgLy8gYmUgZW1wdHkpLlxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7IC8vIElmIHRoaXMgd2FzIGEgZm9yY2VkIGNsaWVudCByZW5kZXIsIHRoZXJlIG1heSBoYXZlIGJlZW5cbiAgICAgICAgICAgICAgICAgIC8vIHJlY292ZXJhYmxlIGVycm9ycyBkdXJpbmcgZmlyc3QgaHlkcmF0aW9uIGF0dGVtcHQuIElmIHNvLCBhZGRcbiAgICAgICAgICAgICAgICAgIC8vIHRoZW0gdG8gYSBxdWV1ZSBzbyB3ZSBjYW4gbG9nIHRoZW0gaW4gdGhlIGNvbW1pdCBwaGFzZS5cblxuICAgICAgICAgICAgICAgICAgdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuXG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF90eXBlMiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX3R5cGUyLCBuZXdQcm9wcyk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50LnJlZiAhPT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICAgICAgICAgIG1hcmtSZWYod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAgIC8vIFwic3RhY2tcIiBhcyB0aGUgcGFyZW50LiBUaGVuIGFwcGVuZCBjaGlsZHJlbiBhcyB3ZSBnbyBpbiBiZWdpbldvcmtcbiAgICAgICAgICAgIC8vIG9yIGNvbXBsZXRlV29yayBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGFkZCB0aGVtIHRvcC0+ZG93biBvclxuICAgICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMiA9IHBvcEh5ZHJhdGlvblN0YXRlKCk7XG5cbiAgICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQyKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAgIC8vIHRvIGNvbnNvbGlkYXRlLlxuICAgICAgICAgICAgICBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBjcmVhdGVJbnN0YW5jZShcbiAgICAgICAgICAgICAgICBfdHlwZTIsXG4gICAgICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICAgICAgX3Jvb3RDb250YWluZXJJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBfY3VycmVudEhvc3RDb250ZXh0LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICk7IC8vIFRPRE86IEZvciBwZXJzaXN0ZW50IHJlbmRlcmVycywgd2Ugc2hvdWxkIHBhc3MgY2hpbGRyZW4gYXMgcGFydFxuICAgICAgICAgICAgICAvLyBvZiB0aGUgaW5pdGlhbCBpbnN0YW5jZSBjcmVhdGlvblxuXG4gICAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKF9pbnN0YW5jZTMsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBfaW5zdGFuY2UzOyAvLyBDZXJ0YWluIHJlbmRlcmVycyByZXF1aXJlIGNvbW1pdC10aW1lIGVmZmVjdHMgZm9yIGluaXRpYWwgbW91bnQuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZWYgb24gYSBob3N0IG5vZGUgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgICAgICAgIG1hcmtSZWYod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpOyAvLyBUaGlzIG11c3QgY29tZSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGNvbXBsZXRlIHBoYXNlLCBiZWNhdXNlIGl0IG1pZ2h0XG4gICAgICAgICAgLy8gdGhyb3cgdG8gc3VzcGVuZCwgYW5kIGlmIHRoZSByZXNvdXJjZSBpbW1lZGlhdGVseSBsb2FkcywgdGhlIHdvcmsgbG9vcFxuICAgICAgICAgIC8vIHdpbGwgcmVzdW1lIHJlbmRlcmluZyBhcyBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBjb21wbGV0ZWQuIFNvIGl0IG11c3RcbiAgICAgICAgICAvLyBmdWxseSBjb21wbGV0ZS5cblxuICAgICAgICAgIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RUZXh0OiB7XG4gICAgICAgICAgdmFyIG5ld1RleHQgPSBuZXdQcm9wcztcblxuICAgICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG5cbiAgICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdUZXh0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZTIgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgICB2YXIgX2N1cnJlbnRIb3N0Q29udGV4dDIgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMyA9IHBvcEh5ZHJhdGlvblN0YXRlKCk7XG5cbiAgICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQzKSB7XG4gICAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSgpKSB7XG4gICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZVRleHRJbnN0YW5jZShcbiAgICAgICAgICAgICAgICBuZXdUZXh0LFxuICAgICAgICAgICAgICAgIF9yb290Q29udGFpbmVySW5zdGFuY2UyLFxuICAgICAgICAgICAgICAgIF9jdXJyZW50SG9zdENvbnRleHQyLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OiB7XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gU3BlY2lhbCBwYXRoIGZvciBkZWh5ZHJhdGVkIGJvdW5kYXJpZXMuIFdlIG1heSBldmVudHVhbGx5IG1vdmUgdGhpc1xuICAgICAgICAgIC8vIHRvIGl0cyBvd24gZmliZXIgdHlwZSBzbyB0aGF0IHdlIGNhbiBhZGQgb3RoZXIga2luZHMgb2YgaHlkcmF0aW9uXG4gICAgICAgICAgLy8gYm91bmRhcmllcyB0aGF0IGFyZW4ndCBhc3NvY2lhdGVkIHdpdGggYSBTdXNwZW5zZSB0cmVlLiBJbiBhbnRpY2lwYXRpb25cbiAgICAgICAgICAvLyBvZiBzdWNoIGEgcmVmYWN0b3IsIGFsbCB0aGUgaHlkcmF0aW9uIGxvZ2ljIGlzIGNvbnRhaW5lZCBpblxuICAgICAgICAgIC8vIHRoaXMgYnJhbmNoLlxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3VycmVudCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgKGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBmYWxsdGhyb3VnaFRvTm9ybWFsU3VzcGVuc2VQYXRoID1cbiAgICAgICAgICAgICAgY29tcGxldGVEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeShcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIG5leHRTdGF0ZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZhbGx0aHJvdWdoVG9Ob3JtYWxTdXNwZW5zZVBhdGgpIHtcbiAgICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRm9yY2VDbGllbnRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UuIFRoZXJlIHdlcmUgcmVtYWluaW5nIHVuaHlkcmF0ZWQgbm9kZXMuIFdlIHRyZWF0XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBhcyBhIG1pc21hdGNoLiBSZXZlcnQgdG8gY2xpZW50IHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGlkIG5vdCBmaW5pc2ggaHlkcmF0aW5nLCBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIHRoZSBpbml0aWFsXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyIG9yIGJlY2F1c2Ugc29tZXRoaW5nIHN1c3BlbmRlZC5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBDb250aW51ZSB3aXRoIHRoZSBub3JtYWwgU3VzcGVuc2UgcGF0aC5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZC4gUmUtcmVuZGVyIHdpdGggdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lczsgLy8gRG8gbm90IHJlc2V0IHRoZSBlZmZlY3QgbGlzdC5cblxuICAgICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9IC8vIERvbid0IGJ1YmJsZSBwcm9wZXJ0aWVzIGluIHRoaXMgY2FzZS5cblxuICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXh0RGlkVGltZW91dCA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICB2YXIgcHJldkRpZFRpbWVvdXQgPVxuICAgICAgICAgICAgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgLy8gYSBwYXNzaXZlIGVmZmVjdCwgd2hpY2ggaXMgd2hlbiB3ZSBwcm9jZXNzIHRoZSB0cmFuc2l0aW9uc1xuXG4gICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICE9PSBwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgICAgLy8gYW4gZWZmZWN0IHRvIHRvZ2dsZSB0aGUgc3VidHJlZSdzIHZpc2liaWxpdHkuIFdoZW4gd2Ugc3dpdGNoIGZyb21cbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIC0+IHByaW1hcnksIHRoZSBpbm5lciBPZmZzY3JlZW4gZmliZXIgc2NoZWR1bGVzIHRoaXMgZWZmZWN0XG4gICAgICAgICAgICAvLyBhcyBwYXJ0IG9mIGl0cyBub3JtYWwgY29tcGxldGUgcGhhc2UuIEJ1dCB3aGVuIHdlIHN3aXRjaCBmcm9tXG4gICAgICAgICAgICAvLyBwcmltYXJ5IC0+IGZhbGxiYWNrLCB0aGUgaW5uZXIgT2Zmc2NyZWVuIGZpYmVyIGRvZXMgbm90IGhhdmUgYSBjb21wbGV0ZVxuICAgICAgICAgICAgLy8gcGhhc2UuIFNvIHdlIG5lZWQgdG8gc2NoZWR1bGUgaXRzIGVmZmVjdCBoZXJlLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoaXMgZmxhZyB0byBjb25uZWN0L2Rpc2Nvbm5lY3QgdGhlIGVmZmVjdHMsIGJ1dCB0aGUgc2FtZVxuICAgICAgICAgICAgLy8gbG9naWMgYXBwbGllczogd2hlbiByZS1jb25uZWN0aW5nLCB0aGUgT2Zmc2NyZWVuIGZpYmVyJ3MgY29tcGxldGVcbiAgICAgICAgICAgIC8vIHBoYXNlIHdpbGwgaGFuZGxlIHNjaGVkdWxpbmcgdGhlIGVmZmVjdC4gSXQncyBvbmx5IHdoZW4gdGhlIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyBpcyBhY3RpdmUgdGhhdCB3ZSBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuXG5cbiAgICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCkge1xuICAgICAgICAgICAgICB2YXIgX29mZnNjcmVlbkZpYmVyMiA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICBfb2Zmc2NyZWVuRmliZXIyLmZsYWdzIHw9IFZpc2liaWxpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJldHJ5UXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZXRyeVF1ZXVlKTtcblxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGltZSBzcGVudCBpbiBhIHRpbWVkIG91dCBTdXNwZW5zZSBzdWJ0cmVlIGFzIHBhcnQgb2YgdGhlIGJhc2UgZHVyYXRpb24uXG4gICAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJpbWFyeUNoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFyaXRobWV0aWNdIEZsb3cgZG9lc24ndCBzdXBwb3J0IHR5cGUgY2FzdGluZyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSAtPSBvcGVyYXRvclxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPVxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0O1xuICAgICAgICAgIHBvcFByb3ZpZGVyKGNvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFNhbWUgYXMgY2xhc3MgY29tcG9uZW50IGNhc2UuIEkgcHV0IGl0IGRvd24gaGVyZSBzbyB0aGF0IHRoZSB0YWdzIGFyZVxuICAgICAgICAgIC8vIHNlcXVlbnRpYWwgdG8gZW5zdXJlIHRoaXMgc3dpdGNoIGlzIGNvbXBpbGVkIHRvIGEganVtcCB0YWJsZS5cbiAgICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoX0NvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICBwb3BTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIGluIHRoZSBkZWZhdWx0LCBcImluZGVwZW5kZW50XCIgbW9kZS5cbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpZFN1c3BlbmRBbHJlYWR5ID1cbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzJDE7XG4gICAgICAgICAgdmFyIHJlbmRlcmVkVGFpbCA9IHJlbmRlclN0YXRlLnJlbmRlcmluZztcblxuICAgICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgcmVuZGVyZWQgdGhlIGhlYWQuXG4gICAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kZWQgaW4gdGhlIHJlbmRlcmVkIHNldC5cbiAgICAgICAgICAgICAgLy8gSWYgbmV3IGNvbnRlbnQgdW5zdXNwZW5kZWQsIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgY29udGVudCB0aGF0XG4gICAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgICAvLyB0byBrZWVwIHNob3dpbmcgdGhlaXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBXZSBtaWdodCBiZSBzdXNwZW5kZWQgaWYgc29tZXRoaW5nIGluIHRoaXMgcmVuZGVyIHBhc3Mgc3VzcGVuZGVkLCBvclxuICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGNoYW5jZSBzbyB3ZSBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIGNhbGwgdG9cbiAgICAgICAgICAgICAgLy8gZmluZEZpcnN0U3VzcGVuZGVkLlxuICAgICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPVxuICAgICAgICAgICAgICAgIHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpICYmXG4gICAgICAgICAgICAgICAgKGN1cnJlbnQgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MkMSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHN1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBJZiB0aGlzIGlzIGEgbmV3bHkgc3VzcGVuZGVkIHRyZWUsIGl0IG1pZ2h0IG5vdCBnZXQgY29tbWl0dGVkIGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIHNlY29uZCBwYXNzLiBJbiB0aGF0IGNhc2Ugbm90aGluZyB3aWxsIHN1YnNjcmliZSB0b1xuICAgICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbmFibGVzLiBJbnN0ZWFkLCB3ZSdsbCB0cmFuc2ZlciBpdHMgdGhlbmFibGVzIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvZiB0aGVzZSBpbiB0aGUgbGlzdCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgdG8gd2FpdCBmb3IgYWxsIG9mIHRoZW0gYW55d2F5LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIG9mIGhvdyBtYW55IGRlcGVuZGVuY2llcyByZW1haW4gYnV0IGl0IGdldHMgdHJpY2t5IGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1lYW50aW1lLCB3ZSBjYW4gYWRkL3JlbW92ZS9jaGFuZ2UgaXRlbXMgYW5kIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3RoZXIgYm91bmRhcmllcyB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZCBmaW5kIGFscmVhZHkgaGFzIHRoZWlyIGxpc3RlbmVycyBhdHRhY2hlZC5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JldHJ5UXVldWUgPSBzdXNwZW5kZWQudXBkYXRlUXVldWU7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gX3JldHJ5UXVldWU7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIF9yZXRyeVF1ZXVlKTsgLy8gUmVyZW5kZXIgdGhlIHdob2xlIGxpc3QsIGJ1dCB0aGlzIHRpbWUsIHdlJ2xsIGZvcmNlIGZhbGxiYWNrc1xuICAgICAgICAgICAgICAgICAgICAvLyB0byBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGZsYWdzIGJlZm9yZSBkb2luZyB0aGUgc2Vjb25kIHBhc3Mgc2luY2UgdGhhdCdzIG5vdyBpbnZhbGlkLlxuICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgY2hpbGQgZmliZXJzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIExpc3QgQ29udGV4dCB0byBmb3JjZSBzdXNwZW5zZSBhbmRcbiAgICAgICAgICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgcmVyZW5kZXIgdGhlIGNoaWxkcmVuLlxuXG4gICAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIHNldFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApOyAvLyBEb24ndCBidWJibGUgcHJvcGVydGllcyBpbiB0aGlzIGNhc2UuXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIG5vdyQxKCkgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGJ1dCB3ZSBzdGlsbCBoYXZlIHJvd3NcbiAgICAgICAgICAgICAgICAvLyBsZWZ0IGluIHRoZSB0YWlsLiBXZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlciBhdHRlbXB0cyB0byByZW5kZXJcbiAgICAgICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBnb2luZyB0byByZW5kZXIgdGhlIHRhaWwuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVuZGVyZWQgcm93IHRvIHRoZSBjaGlsZCBsaXN0LlxuICAgICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgICB2YXIgX3N1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyZW5kZXJlZFRhaWwpO1xuXG4gICAgICAgICAgICAgIGlmIChfc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7IC8vIEVuc3VyZSB3ZSB0cmFuc2ZlciB0aGUgdXBkYXRlIHF1ZXVlIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBkb2Vzbid0XG4gICAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgICAgdmFyIF9yZXRyeVF1ZXVlMiA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfcmV0cnlRdWV1ZTI7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgX3JldHJ5UXVldWUyKTtcbiAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIHRydWUpOyAvLyBUaGlzIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID09PSBcImhpZGRlblwiICYmXG4gICAgICAgICAgICAgICAgICAhcmVuZGVyZWRUYWlsLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgICAgIWdldElzSHlkcmF0aW5nKCkgLy8gV2UgZG9uJ3QgY3V0IGl0IGlmIHdlJ3JlIGh5ZHJhdGluZy5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAvLyBUaGUgdGltZSBpdCB0b29rIHRvIHJlbmRlciBsYXN0IHJvdyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZ1xuICAgICAgICAgICAgICAgIC8vIHRpbWUgd2UgaGF2ZSB0byByZW5kZXIuIFNvIHJlbmRlcmluZyBvbmUgbW9yZSByb3cgd291bGQgbGlrZWx5XG4gICAgICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgICAgIG5vdyQxKCkgKiAyIC0gcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID5cbiAgICAgICAgICAgICAgICAgIGdldFJlbmRlclRhcmdldFRpbWUoKSAmJlxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzICE9PSBPZmZzY3JlZW5MYW5lXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHVzdWFsbHkgZmFzdGVyLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBsaXN0IG9mIHRoZSBiYWNrd2FyZHMgdGFpbCB3aWxsIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgICAvLyB0byB0aGUgZW5kLiBUaGlzIGJyZWFrcyB0aGUgZ3VhcmFudGVlIHRoYXQgbGlmZS1jeWNsZXMgZmlyZSBpblxuICAgICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgICAgLy8gRXNwZWNpYWxseSBzaW5jZSB0aGVzZSBtaWdodCBhbHNvIGp1c3QgcG9wIGluIGR1cmluZyBmdXR1cmUgY29tbWl0cy5cbiAgICAgICAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gICAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZy5zaWJsaW5nID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0YWlsIHJvd3MgdG8gcmVuZGVyLlxuICAgICAgICAgICAgLy8gUG9wIGEgcm93LlxuICAgICAgICAgICAgdmFyIG5leHQgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbmV4dDtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBuZXh0LnNpYmxpbmc7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3ckMSgpO1xuICAgICAgICAgICAgbmV4dC5zaWJsaW5nID0gbnVsbDsgLy8gUmVzdG9yZSB0aGUgY29udGV4dC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIGNhbiBwcm9iYWJseSBqdXN0IGF2b2lkIHBvcHBpbmcgaXQgaW5zdGVhZCBhbmQgb25seVxuICAgICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuXG4gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoXG4gICAgICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0LFxuICAgICAgICAgICAgICAgIEZvcmNlU3VzcGVuc2VGYWxsYmFja1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID1cbiAgICAgICAgICAgICAgICBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaFN1c3BlbnNlTGlzdENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIERvIGEgcGFzcyBvdmVyIHRoZSBuZXh0IHJvdy5cbiAgICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSBwcm9wZXJ0aWVzIGluIHRoaXMgY2FzZS5cblxuICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFNjb3BlQ29tcG9uZW50OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHZhciBfbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgbmV4dElzSGlkZGVuID0gX25leHRTdGF0ZSAhPT0gbnVsbDsgLy8gU2NoZWR1bGUgYSBWaXNpYmlsaXR5IGVmZmVjdCBpZiB0aGUgdmlzaWJpbGl0eSBoYXMgY2hhbmdlZFxuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIF9wcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICAgIHZhciBwcmV2SXNIaWRkZW4gPSBfcHJldlN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2SXNIaWRkZW4gIT09IG5leHRJc0hpZGRlbikge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFZpc2liaWxpdHk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE9uIGluaXRpYWwgbW91bnQsIHdlIG9ubHkgbmVlZCBhIFZpc2liaWxpdHkgZWZmZWN0IGlmIHRoZSB0cmVlXG4gICAgICAgICAgICAgIC8vIGlzIGhpZGRlbi5cbiAgICAgICAgICAgICAgaWYgKG5leHRJc0hpZGRlbikge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFZpc2liaWxpdHk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbmV4dElzSGlkZGVuIHx8XG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHByb3BlcnRpZXMgZm9yIGhpZGRlbiBjaGlsZHJlbiB1bmxlc3Mgd2UncmUgcmVuZGVyaW5nXG4gICAgICAgICAgICAvLyBhdCBvZmZzY3JlZW4gcHJpb3JpdHkuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmIC8vIEFsc28gZG9uJ3QgYnViYmxlIGlmIHRoZSB0cmVlIHN1c3BlbmRlZFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9MYW5lc1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYW4gaW5zZXJ0aW9uIG9yIHVwZGF0ZSBpbiB0aGUgaGlkZGVuIHN1YnRyZWUuXG4gICAgICAgICAgICAgIC8vIElmIHNvLCB3ZSBuZWVkIHRvIGhpZGUgdGhvc2Ugbm9kZXMgaW4gdGhlIGNvbW1pdCBwaGFzZSwgc29cbiAgICAgICAgICAgICAgLy8gc2NoZWR1bGUgYSB2aXNpYmlsaXR5IGVmZmVjdC5cblxuICAgICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzICYgKFBsYWNlbWVudCB8IFVwZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBWaXNpYmlsaXR5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG9mZnNjcmVlblF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICBpZiAob2Zmc2NyZWVuUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBfcmV0cnlRdWV1ZTMgPSBvZmZzY3JlZW5RdWV1ZS5yZXRyeVF1ZXVlO1xuICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgX3JldHJ5UXVldWUzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENhY2hlQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6IHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnICtcbiAgICAgICAgICBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBcIiArXG4gICAgICAgICAgXCJSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW53aW5kV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGZsYWdzICYgflNob3VsZENhcHR1cmUpIHwgRGlkQ2FwdHVyZTtcblxuICAgICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHZhciBfZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChfZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSAhPT0gTm9GbGFncyQxICYmXG4gICAgICAgICAgICAoX2ZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MkMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyByZW5kZXIgdGhhdCB3YXNuJ3QgY2FwdHVyZWQgYnkgYSBzdXNwZW5zZVxuICAgICAgICAgICAgLy8gYm91bmRhcnkuIERvIGEgc2Vjb25kIHBhc3Mgb24gdGhlIHJvb3QgdG8gdW5tb3VudCB0aGUgY2hpbGRyZW4uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChfZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSkgfCBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH0gLy8gV2UgdW53b3VuZCB0byB0aGUgcm9vdCB3aXRob3V0IGNvbXBsZXRpbmcgaXQuIEV4aXQuXG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBUT0RPOiBwb3BIeWRyYXRpb25TdGF0ZVxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6IHtcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsICYmIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaHJldyBpbiBuZXdseSBtb3VudGVkIGRlaHlkcmF0ZWQgY29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZmxhZ3MyID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgICBpZiAoX2ZsYWdzMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gKF9mbGFnczIgJiB+U2hvdWxkQ2FwdHVyZSkgfCBEaWRDYXB0dXJlOyAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cblxuICAgICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OiB7XG4gICAgICAgICAgcG9wU3VzcGVuc2VMaXN0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7IC8vIFN1c3BlbnNlTGlzdCBkb2Vzbid0IGFjdHVhbGx5IGNhdGNoIGFueXRoaW5nLiBJdCBzaG91bGQndmUgYmVlblxuICAgICAgICAgIC8vIGNhdWdodCBieSBhIG5lc3RlZCBib3VuZGFyeS4gSWYgbm90LCBpdCBzaG91bGQgYnViYmxlIHRocm91Z2guXG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICAgICAgcG9wUHJvdmlkZXIoY29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcG9wSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF9mbGFnczMgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICAgIGlmIChfZmxhZ3MzICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoX2ZsYWdzMyAmIH5TaG91bGRDYXB0dXJlKSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDYWNoZUNvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoY3VycmVudCwgaW50ZXJydXB0ZWRXb3JrLCByZW5kZXJMYW5lcykge1xuICAgICAgc3dpdGNoIChpbnRlcnJ1cHRlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAgICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3BDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RSb290OiB7XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDoge1xuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAgcG9wU3VzcGVuc2VMaXN0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgICAgIHZhciBjb250ZXh0ID0gaW50ZXJydXB0ZWRXb3JrLnR5cGUuX2NvbnRleHQ7XG4gICAgICAgICAgcG9wUHJvdmlkZXIoY29udGV4dCwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgcG9wSGlkZGVuQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB9IC8vIFVzZWQgZHVyaW5nIHRoZSBjb21taXQgcGhhc2UgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHN0YWNrLlxuICAgIC8vIEFsbG93cyB1cyB0byBhdm9pZCB0cmF2ZXJzaW5nIHRoZSByZXR1cm4gcGF0aCB0byBmaW5kIHRoZSBuZWFyZXN0IE9mZnNjcmVlbiBhbmNlc3Rvci5cblxuICAgIHZhciBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBmYWxzZTtcbiAgICB2YXIgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IGZhbHNlO1xuICAgIHZhciBQb3NzaWJseVdlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gXCJmdW5jdGlvblwiID8gV2Vha1NldCA6IFNldDtcbiAgICB2YXIgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFVzZWQgZm9yIFByb2ZpbGluZyBidWlsZHMgdG8gdHJhY2sgdXBkYXRlcnMuXG5cbiAgICB2YXIgaW5Qcm9ncmVzc0xhbmVzID0gbnVsbDtcbiAgICB2YXIgaW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gc2hvdWxkUHJvZmlsZShjdXJyZW50KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY3VycmVudC5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgKGdldEV4ZWN1dGlvbkNvbnRleHQoKSAmIENvbW1pdENvbnRleHQpICE9PSBOb0NvbnRleHRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0VW5jYXVnaHRFcnJvckluREVWKGVycm9yKSB7XG4gICAgICAvLyBXcmFwcGluZyBlYWNoIHNtYWxsIHBhcnQgb2YgdGhlIGNvbW1pdCBwaGFzZSBpbnRvIGEgZ3VhcmRlZFxuICAgICAgLy8gY2FsbGJhY2sgaXMgYSBiaXQgdG9vIHNsb3cgKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIxNjY2KS5cbiAgICAgIC8vIEJ1dCB3ZSByZWx5IG9uIGl0IHRvIHN1cmZhY2UgZXJyb3JzIHRvIERFViB0b29scyBsaWtlIG92ZXJsYXlzXG4gICAgICAvLyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMTcxMikuXG4gICAgICAvLyBBcyBhIGNvbXByb21pc2UsIHJldGhyb3cgb25seSBjYXVnaHQgZXJyb3JzIGluIGEgZ3VhcmQuXG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyKGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZS5wcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc2hvdWxkUHJvZmlsZShjdXJyZW50KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgfVxuICAgIH0gLy8gQ2FwdHVyZSBlcnJvcnMgc28gdGhleSBkb24ndCBpbnRlcnJ1cHQgdW5tb3VudGluZy5cblxuICAgIGZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgaW5zdGFuY2VcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lcihjdXJyZW50LCBpbnN0YW5jZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCBtb3VudGluZy5cblxuICAgIGZ1bmN0aW9uIHNhZmVseUF0dGFjaFJlZihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb21taXRBdHRhY2hSZWYoY3VycmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgICAgIHZhciByZWYgPSBjdXJyZW50LnJlZjtcbiAgICAgIHZhciByZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuXG4gICAgICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVmQ2xlYW51cCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICAgIHJlZkNsZWFudXAoKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihjdXJyZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVmQ2xlYW51cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIGByZWZDbGVhbnVwYCBoYXMgYmVlbiBjYWxsZWQuIE51bGxpZnkgYWxsIHJlZmVyZW5jZXMgdG8gaXQgdG8gcHJldmVudCBkb3VibGUgaW52b2NhdGlvbi5cbiAgICAgICAgICAgIGN1cnJlbnQucmVmQ2xlYW51cCA9IG51bGw7XG4gICAgICAgICAgICB2YXIgZmluaXNoZWRXb3JrID0gY3VycmVudC5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmVmQ2xlYW51cCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHZhciByZXRWYWw7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgcmV0VmFsID0gcmVmKG51bGwpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRWYWwgPSByZWYobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJldFZhbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBhIGNhbGxiYWNrIHJlZiBpbiAlcy4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJBIGNhbGxiYWNrIHJlZiBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSB1bmFibGUgdG8gbmFycm93IHR5cGUgdG8gUmVmT2JqZWN0XG4gICAgICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVzdHJveSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpcnN0Q2hpbGQpIHtcbiAgICAgIG5leHRFZmZlY3QgPSBmaXJzdENoaWxkO1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzX2JlZ2luKCk7IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRvIHRyYWNrIHRoZSBhY3RpdmUgaW5zdGFuY2UgZmliZXJcblxuICAgICAgdmFyIHNob3VsZEZpcmUgPSBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXI7XG4gICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbiAgICAgIHJldHVybiBzaG91bGRGaXJlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19iZWdpbigpIHtcbiAgICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7IC8vIFRoaXMgcGhhc2UgaXMgb25seSB1c2VkIGZvciBiZWZvcmVBY3RpdmVJbnN0YW5jZUJsdXIuXG5cbiAgICAgICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChmaWJlci5zdWJ0cmVlRmxhZ3MgJiBCZWZvcmVNdXRhdGlvbk1hc2spICE9PSBOb0ZsYWdzJDEgJiZcbiAgICAgICAgICBjaGlsZCAhPT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICBjaGlsZC5yZXR1cm4gPSBmaWJlcjtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNfY29tcGxldGUoKSB7XG4gICAgICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzT25GaWJlcihmaWJlcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgdmFyIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBmaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dEVmZmVjdCA9IGZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuXG4gICAgICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wc1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImdldFNuYXBzaG90QmVmb3JlVXBkYXRlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZVxuICAgICAgICAgICAgICAgICAgPyBwcmV2UHJvcHNcbiAgICAgICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgcHJldlByb3BzKSxcbiAgICAgICAgICAgICAgICBwcmV2U3RhdGVcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRpZFdhcm5TZXQgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHNuYXBzaG90ID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICFkaWRXYXJuU2V0LmhhcyhmaW5pc2hlZFdvcmsudHlwZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGRpZFdhcm5TZXQuYWRkKGZpbmlzaGVkV29yay50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiJXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKTogQSBzbmFwc2hvdCB2YWx1ZSAob3IgbnVsbCkgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIFwibXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLlwiLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhlc2UgY29tcG9uZW50IHR5cGVzXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIFwiICtcbiAgICAgICAgICAgICAgICBcImxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICBmbGFncyxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICApIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIGlmICgoZWZmZWN0LnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIFVubW91bnRcbiAgICAgICAgICAgIHZhciBpbnN0ID0gZWZmZWN0Lmluc3Q7XG4gICAgICAgICAgICB2YXIgZGVzdHJveSA9IGluc3QuZGVzdHJveTtcblxuICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpbnN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koZmluaXNoZWRXb3JrLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZXN0cm95KTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoZmxhZ3MsIGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgaWYgKChlZmZlY3QudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgICBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QodHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3QgPSBlZmZlY3QuaW5zdDtcbiAgICAgICAgICAgIHZhciBkZXN0cm95ID0gY3JlYXRlKCk7XG4gICAgICAgICAgICBpbnN0LmRlc3Ryb3kgPSBkZXN0cm95O1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgICAgc2V0SXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRlc3Ryb3kgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHZhciBob29rTmFtZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGlmICgoZWZmZWN0LnRhZyAmIExheW91dCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICAgICAgaG9va05hbWUgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGVmZmVjdC50YWcgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgICAgIGhvb2tOYW1lID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaG9va05hbWUgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGlmIChkZXN0cm95ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBhZGRlbmR1bSA9XG4gICAgICAgICAgICAgICAgICAgIFwiIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzdHJveS50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFkZGVuZHVtID1cbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSBcIiArXG4gICAgICAgICAgICAgICAgICAgIGhvb2tOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgXCIoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIGhvb2tOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgXCIoKCkgPT4ge1xcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIFwiICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBNeUFQSS5nZXREYXRhKHNvbWVJZCk7XFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiAgICAvLyAuLi5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIFwiICB9XFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiAgZmV0Y2hEYXRhKCk7XFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJMZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmdcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYWRkZW5kdW0gPSBcIiBZb3UgcmV0dXJuZWQ6IFwiICsgZGVzdHJveTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiJXMgbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nIGJlc2lkZXMgYSBmdW5jdGlvbiwgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIndoaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzXCIsXG4gICAgICAgICAgICAgICAgICBob29rTmFtZSxcbiAgICAgICAgICAgICAgICAgIGFkZGVuZHVtXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlRWZmZWN0RHVyYXRpb25zKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICBpZiAoZ2V0RXhlY3V0aW9uQ29udGV4dCgpICYgQ29tbWl0Q29udGV4dCkge1xuICAgICAgICAvLyBPbmx5IFByb2ZpbGVycyB3aXRoIHdvcmsgaW4gdGhlaXIgc3VidHJlZSB3aWxsIGhhdmUgYW4gVXBkYXRlIGVmZmVjdCBzY2hlZHVsZWQuXG4gICAgICAgIGlmICgoZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgICAgICBjYXNlIFByb2ZpbGVyOiB7XG4gICAgICAgICAgICAgIHZhciBwYXNzaXZlRWZmZWN0RHVyYXRpb24gPVxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgaWQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUuaWQsXG4gICAgICAgICAgICAgICAgb25Qb3N0Q29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLm9uUG9zdENvbW1pdDsgLy8gVGhpcyB2YWx1ZSB3aWxsIHN0aWxsIHJlZmxlY3QgdGhlIHByZXZpb3VzIGNvbW1pdCBwaGFzZS5cbiAgICAgICAgICAgICAgLy8gSXQgZG9lcyBub3QgZ2V0IHJlc2V0IHVudGlsIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21taXQgcGhhc2UuXG5cbiAgICAgICAgICAgICAgdmFyIGNvbW1pdFRpbWUgPSBnZXRDb21taXRUaW1lKCk7XG4gICAgICAgICAgICAgIHZhciBwaGFzZSA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgPyBcIm1vdW50XCIgOiBcInVwZGF0ZVwiO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50VXBkYXRlTmVzdGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgIHBoYXNlID0gXCJuZXN0ZWQtdXBkYXRlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvblBvc3RDb21taXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9uUG9zdENvbW1pdChpZCwgcGhhc2UsIHBhc3NpdmVFZmZlY3REdXJhdGlvbiwgY29tbWl0VGltZSk7XG4gICAgICAgICAgICAgIH0gLy8gQnViYmxlIHRpbWVzIHRvIHRoZSBuZXh0IG5lYXJlc3QgYW5jZXN0b3IgUHJvZmlsZXIuXG4gICAgICAgICAgICAgIC8vIEFmdGVyIHdlIHByb2Nlc3MgdGhhdCBQcm9maWxlciwgd2UnbGwgYnViYmxlIGZ1cnRoZXIgdXAuXG5cbiAgICAgICAgICAgICAgdmFyIHBhcmVudEZpYmVyID0gZmluaXNoZWRXb3JrLnJldHVybjtcblxuICAgICAgICAgICAgICBvdXRlcjogd2hpbGUgKHBhcmVudEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICAgICAgICAgIHZhciByb290ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgICByb290LnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPSBwYXNzaXZlRWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICAgICAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50IGxheW91dCBlZmZlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCAoZHVyaW5nIG11dGF0aW9uIHBoYXNlKS5cbiAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICBpZiAoc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRDbGFzc0xheW91dExpZmVjeWNsZXMoZmluaXNoZWRXb3JrLCBjdXJyZW50KSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImNvbXBvbmVudERpZE1vdW50LiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiY29tcG9uZW50RGlkTW91bnQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwcmV2UHJvcHMgPVxuICAgICAgICAgIGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGVcbiAgICAgICAgICAgID8gY3VycmVudC5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJlxuICAgICAgICAgICAgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJjb21wb25lbnREaWRVcGRhdGUuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJjb21wb25lbnREaWRVcGRhdGUuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUoXG4gICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKFxuICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgIHByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yaykge1xuICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBcIiArXG4gICAgICAgICAgICAgICAgICBcInByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBcIiArXG4gICAgICAgICAgICAgICAgICBcInByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0Q2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRIb3N0Q29tcG9uZW50TW91bnQoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb21taXRNb3VudChpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIGZpbmlzaGVkV29yayk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQcm9maWxlclVwZGF0ZShmaW5pc2hlZFdvcmssIGN1cnJlbnQpIHtcbiAgICAgIGlmIChnZXRFeGVjdXRpb25Db250ZXh0KCkgJiBDb21taXRDb250ZXh0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgIG9uQ29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vbkNvbW1pdCxcbiAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICB2YXIgZWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuICAgICAgICAgIHZhciBwaGFzZSA9IGN1cnJlbnQgPT09IG51bGwgPyBcIm1vdW50XCIgOiBcInVwZGF0ZVwiO1xuXG4gICAgICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyTmVzdGVkVXBkYXRlUGhhc2UpIHtcbiAgICAgICAgICAgIGlmIChpc0N1cnJlbnRVcGRhdGVOZXN0ZWQoKSkge1xuICAgICAgICAgICAgICBwaGFzZSA9IFwibmVzdGVkLXVwZGF0ZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZW5kZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgb25SZW5kZXIoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLFxuICAgICAgICAgICAgICBwaGFzZSxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbixcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgY29tbWl0VGltZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJDb21taXRIb29rcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkNvbW1pdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIG9uQ29tbWl0KFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgICAgIGVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgICAgICAgIGNvbW1pdFRpbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gLy8gU2NoZWR1bGUgYSBwYXNzaXZlIGVmZmVjdCBmb3IgdGhpcyBQcm9maWxlciB0byBjYWxsIG9uUG9zdENvbW1pdCBob29rcy5cbiAgICAgICAgICAgIC8vIFRoaXMgZWZmZWN0IHNob3VsZCBiZSBzY2hlZHVsZWQgZXZlbiBpZiB0aGVyZSBpcyBubyBvblBvc3RDb21taXQgY2FsbGJhY2sgZm9yIHRoaXMgUHJvZmlsZXIsXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgYWxzbyB3aGVyZSB0aW1lcyBidWJibGUgdG8gcGFyZW50IFByb2ZpbGVycy5cblxuICAgICAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3QoZmluaXNoZWRXb3JrKTsgLy8gUHJvcGFnYXRlIGxheW91dCBlZmZlY3QgZHVyYXRpb25zIHRvIHRoZSBuZXh0IG5lYXJlc3QgUHJvZmlsZXIgYW5jZXN0b3IuXG4gICAgICAgICAgICAvLyBEbyBub3QgcmVzZXQgdGhlc2UgdmFsdWVzIHVudGlsIHRoZSBuZXh0IHJlbmRlciBzbyBEZXZUb29scyBoYXMgYSBjaGFuY2UgdG8gcmVhZCB0aGVtIGZpcnN0LlxuXG4gICAgICAgICAgICB2YXIgcGFyZW50RmliZXIgPSBmaW5pc2hlZFdvcmsucmV0dXJuO1xuXG4gICAgICAgICAgICBvdXRlcjogd2hpbGUgKHBhcmVudEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgICAgICAgIHZhciByb290ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgcm9vdC5lZmZlY3REdXJhdGlvbiArPSBlZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICBwYXJlbnRTdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gKz0gZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBjdXJyZW50LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY29tbWl0dGVkTGFuZXNcbiAgICApIHtcbiAgICAgIC8vIFdoZW4gdXBkYXRpbmcgdGhpcyBmdW5jdGlvbiwgYWxzbyB1cGRhdGUgcmVhcHBlYXJMYXlvdXRFZmZlY3RzLCB3aGljaCBkb2VzXG4gICAgICAvLyBtb3N0IG9mIHRoZSBzYW1lIHRoaW5ncyB3aGVuIGFuIG9mZnNjcmVlbiB0cmVlIGdvZXMgZnJvbSBoaWRkZW4gLT4gdmlzaWJsZS5cbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcblxuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIExheW91dCB8IEhhc0VmZmVjdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICBjb21taXRDbGFzc0xheW91dExpZmVjeWNsZXMoZmluaXNoZWRXb3JrLCBjdXJyZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBDYWxsYmFjaykge1xuICAgICAgICAgICAgY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGlmIChmbGFncyAmIENhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGdldFB1YmxpY0luc3RhbmNlKGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuXG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIG1heSBzY2hlZHVsZSBhdXRvLWZvY3VzIGZvciBpbnB1dHMgYW5kIGZvcm0gY29udHJvbHMpLlxuICAgICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsICYmIGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICBjb21taXRIb3N0Q29tcG9uZW50TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTsgLy8gVE9ETzogU2hvdWxkIHRoaXMgZmlyZSBpbnNpZGUgYW4gb2Zmc2NyZWVuIHRyZWU/IE9yIHNob3VsZCBpdCB3YWl0IHRvXG4gICAgICAgICAgLy8gZmlyZSB3aGVuIHRoZSB0cmVlIGJlY29tZXMgdmlzaWJsZSBhZ2Fpbi5cblxuICAgICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgICAgY29tbWl0UHJvZmlsZXJVcGRhdGUoZmluaXNoZWRXb3JrLCBjdXJyZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIGlzTW9kZXJuUm9vdCA9IChmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuXG4gICAgICAgICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgICAgICAgdmFyIGlzSGlkZGVuID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgICB2YXIgbmV3T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID1cbiAgICAgICAgICAgICAgaXNIaWRkZW4gfHwgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuXG4gICAgICAgICAgICBpZiAobmV3T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGUgT2Zmc2NyZWVuIHRyZWUgaXMgdmlzaWJsZS5cbiAgICAgICAgICAgICAgdmFyIHdhc0hpZGRlbiA9XG4gICAgICAgICAgICAgICAgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgICAgIHZhciBuZXdPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID1cbiAgICAgICAgICAgICAgICB3YXNIaWRkZW4gfHwgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG5ld09mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG5ld09mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG5cbiAgICAgICAgICAgICAgaWYgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gJiYgIXByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcm9vdCBvZiBhIHJlYXBwZWFyaW5nIGJvdW5kYXJ5LiBBcyB3ZSBjb250aW51ZVxuICAgICAgICAgICAgICAgIC8vIHRyYXZlcnNpbmcgdGhlIGxheW91dCBlZmZlY3RzLCB3ZSBtdXN0IGFsc28gcmUtbW91bnQgbGF5b3V0XG4gICAgICAgICAgICAgICAgLy8gZWZmZWN0cyB0aGF0IHdlcmUgdW5tb3VudGVkIHdoZW4gdGhlIE9mZnNjcmVlbiBzdWJ0cmVlIHdhc1xuICAgICAgICAgICAgICAgIC8vIGhpZGRlbi4gU28gdGhpcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBub3JtYWwgY29tbWl0TGF5b3V0RWZmZWN0cy5cbiAgICAgICAgICAgICAgICB2YXIgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9XG4gICAgICAgICAgICAgICAgICAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIExheW91dE1hc2spICE9PSBOb0ZsYWdzJDE7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcy5tb2RlID09PSBcIm1hbnVhbFwiKSB7XG4gICAgICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHJlZiA9IGZpbmlzaGVkV29yay5yZWY7XG5cbiAgICAgIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIGluc3RhbmNlVG9Vc2U7XG5cbiAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgICAgICB9IC8vIE1vdmVkIG91dHNpZGUgdG8gZW5zdXJlIERDRSB3b3JrcyB3aXRoIHRoaXMgZmxhZ1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJlZkNsZWFudXAgPSByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KFwiY3VycmVudFwiKSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuXCIsXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIHVuYWJsZSB0byBuYXJyb3cgdHlwZSB0byB0aGUgbm9uLWZ1bmN0aW9uIGNhc2VcblxuICAgICAgICAgIHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRldGFjaEZpYmVyTXV0YXRpb24oZmliZXIpIHtcbiAgICAgIC8vIEN1dCBvZmYgdGhlIHJldHVybiBwb2ludGVyIHRvIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgdHJlZS5cbiAgICAgIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBkZXRlY3QgYW5kIHdhcm4gYWdhaW5zdCBzdGF0ZSB1cGRhdGVzIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXG4gICAgICAvLyBJdCBhbHNvIHByZXZlbnRzIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIGZyb20gd2l0aGluIGRpc2Nvbm5lY3RlZCBjb21wb25lbnRzLlxuICAgICAgLy9cbiAgICAgIC8vIElkZWFsbHksIHdlIHNob3VsZCBhbHNvIGNsZWFyIHRoZSBjaGlsZCBwb2ludGVyIG9mIHRoZSBwYXJlbnQgYWx0ZXJuYXRlIHRvIGxldCB0aGlzXG4gICAgICAvLyBnZXQgR0M6ZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggZm9yIHN1cmUgd2hpY2ggcGFyZW50IGlzIHRoZSBjdXJyZW50XG4gICAgICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC5cbiAgICAgIC8vIFRoaXMgY2hpbGQgaXRzZWxmIHdpbGwgYmUgR0M6ZWQgd2hlbiB0aGUgcGFyZW50IHVwZGF0ZXMgdGhlIG5leHQgdGltZS5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgd2UgY2FuJ3QgY2xlYXIgY2hpbGQgb3Igc2libGluZyBwb2ludGVycyB5ZXQuXG4gICAgICAvLyBUaGV5J3JlIG5lZWRlZCBmb3IgcGFzc2l2ZSBlZmZlY3RzIGFuZCBmb3IgZmluZERPTU5vZGUuXG4gICAgICAvLyBXZSBkZWZlciB0aG9zZSBmaWVsZHMsIGFuZCBhbGwgb3RoZXIgY2xlYW51cCwgdG8gdGhlIHBhc3NpdmUgcGhhc2UgKHNlZSBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cykuXG4gICAgICAvL1xuICAgICAgLy8gRG9uJ3QgcmVzZXQgdGhlIGFsdGVybmF0ZSB5ZXQsIGVpdGhlci4gV2UgbmVlZCB0aGF0IHNvIHdlIGNhbiBkZXRhY2ggdGhlXG4gICAgICAvLyBhbHRlcm5hdGUncyBmaWVsZHMgaW4gdGhlIHBhc3NpdmUgcGhhc2UuIENsZWFyaW5nIHRoZSByZXR1cm4gcG9pbnRlciBpc1xuICAgICAgLy8gc3VmZmljaWVudCBmb3IgZmluZERPTU5vZGUgc2VtYW50aWNzLlxuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUucmV0dXJuID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgZmliZXIucmV0dXJuID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBmaWJlci5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhhbHRlcm5hdGUpO1xuICAgICAgfSAvLyBDbGVhciBjeWNsaWNhbCBGaWJlciBmaWVsZHMuIFRoaXMgbGV2ZWwgYWxvbmUgaXMgZGVzaWduZWQgdG8gcm91Z2hseVxuICAgICAgLy8gYXBwcm94aW1hdGUgdGhlIHBsYW5uZWQgRmliZXIgcmVmYWN0b3IuIEluIHRoYXQgd29ybGQsIGBzZXRTdGF0ZWAgd2lsbCBiZVxuICAgICAgLy8gYm91bmQgdG8gYSBzcGVjaWFsIFwiaW5zdGFuY2VcIiBvYmplY3QgaW5zdGVhZCBvZiBhIEZpYmVyLiBUaGUgSW5zdGFuY2VcbiAgICAgIC8vIG9iamVjdCB3aWxsIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBmaWVsZHMuIEl0IHdpbGwgb25seSBiZSBjb25uZWN0ZWQgdG9cbiAgICAgIC8vIHRoZSBmaWJlciB0cmVlIHZpYSBhIHNpbmdsZSBsaW5rIGF0IHRoZSByb290LiBTbyBpZiB0aGlzIGxldmVsIGFsb25lIGlzXG4gICAgICAvLyBzdWZmaWNpZW50IHRvIGZpeCBtZW1vcnkgaXNzdWVzLCB0aGF0IGJvZGVzIHdlbGwgZm9yIG91ciBwbGFucy5cblxuICAgICAgZmliZXIuY2hpbGQgPSBudWxsO1xuICAgICAgZmliZXIuZGVsZXRpb25zID0gbnVsbDtcbiAgICAgIGZpYmVyLnNpYmxpbmcgPSBudWxsOyAvLyBUaGUgYHN0YXRlTm9kZWAgaXMgY3ljbGljYWwgYmVjYXVzZSBvbiBob3N0IG5vZGVzIGl0IHBvaW50cyB0byB0aGUgaG9zdFxuXG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICAgIH0gLy8gVGhlb3JldGljYWxseSwgbm90aGluZyBpbiBoZXJlIHNob3VsZCBiZSBuZWNlc3NhcnksIGJlY2F1c2Ugd2UgYWxyZWFkeVxuICAgICAgLy8gZGlzY29ubmVjdGVkIHRoZSBmaWJlciBmcm9tIHRoZSB0cmVlLiBTbyBldmVuIGlmIHNvbWV0aGluZyBsZWFrcyB0aGlzXG4gICAgICAvLyBwYXJ0aWN1bGFyIGZpYmVyLCBpdCB3b24ndCBsZWFrIGFueXRoaW5nIGVsc2UuXG5cbiAgICAgIGZpYmVyLnJldHVybiA9IG51bGw7XG4gICAgICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsOyAvLyBUT0RPOiBNb3ZlIHRvIGBjb21taXRQYXNzaXZlVW5tb3VudEluc2lkZURlbGV0ZWRUcmVlT25GaWJlcmAgaW5zdGVhZC5cblxuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtcHR5UG9ydGFsQ29udGFpbmVyKGN1cnJlbnQpIHtcbiAgICAgIGNyZWF0ZUNvbnRhaW5lckNoaWxkU2V0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0RGVsZXRpb25FZmZlY3RzKHJvb3QsIHJldHVybkZpYmVyLCBkZWxldGVkRmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICAgICAgY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihyb290LCByZXR1cm5GaWJlciwgZGVsZXRlZEZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgZGV0YWNoRmliZXJNdXRhdGlvbihkZWxldGVkRmliZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgcGFyZW50XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBVc2UgYSBzdGF0aWMgZmxhZyB0byBza2lwIHRyZWVzIHRoYXQgZG9uJ3QgaGF2ZSB1bm1vdW50IGVmZmVjdHNcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudC5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgY2hpbGRcbiAgICAgICAgKTtcbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgZGVsZXRlZEZpYmVyXG4gICAgKSB7XG4gICAgICBvbkNvbW1pdFVubW91bnQoZGVsZXRlZEZpYmVyKTsgLy8gVGhlIGNhc2VzIGluIHRoaXMgb3V0ZXIgc3dpdGNoIG1vZGlmeSB0aGUgc3RhY2sgYmVmb3JlIHRoZXkgdHJhdmVyc2VcbiAgICAgIC8vIGludG8gdGhlaXIgc3VidHJlZS4gVGhlcmUgYXJlIHNpbXBsZXIgY2FzZXMgaW4gdGhlIGlubmVyIHN3aXRjaFxuICAgICAgLy8gdGhhdCBkb24ndCBtb2RpZnkgdGhlIHN0YWNrLlxuXG4gICAgICBzd2l0Y2ggKGRlbGV0ZWRGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuXG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICAgIH0gLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2ggdG8gbmV4dCBicmFuY2hcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFRleHQ6IHtcbiAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcmVtb3ZlIHRoZSBuZWFyZXN0IGhvc3QgY2hpbGQuIFNldCB0aGUgaG9zdCBwYXJlbnRcbiAgICAgICAgICAvLyB0byBgbnVsbGAgb24gdGhlIHN0YWNrIHRvIGluZGljYXRlIHRoYXQgbmVzdGVkIGNoaWxkcmVuIGRvbid0XG4gICAgICAgICAgLy8gbmVlZCB0byBiZSByZW1vdmVkLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRGVoeWRyYXRlZEZyYWdtZW50OiB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOiB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZW1wdHlQb3J0YWxDb250YWluZXIoKTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGRlbGV0ZWRGaWJlci51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICB2YXIgdGFnID0gZWZmZWN0LnRhZztcbiAgICAgICAgICAgICAgICAgIHZhciBpbnN0ID0gZWZmZWN0Lmluc3Q7XG4gICAgICAgICAgICAgICAgICB2YXIgZGVzdHJveSA9IGluc3QuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRhZyAmIExheW91dCkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShkZWxldGVkRmliZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIGlmICghb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbikge1xuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcblxuICAgICAgICAgIGlmIChkZWxldGVkRmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIG9mZnNjcmVlbiBjb21wb25lbnQgaXMgaGlkZGVuLCB3ZSBhbHJlYWR5IHVubW91bnRlZCBpdC4gQmVmb3JlXG4gICAgICAgICAgICAvLyBkZWxldGluZyB0aGUgY2hpbGRyZW4sIHRyYWNrIHRoYXQgaXQncyBhbHJlYWR5IHVubW91bnRlZCBzbyB0aGF0IHdlXG4gICAgICAgICAgICAvLyBkb24ndCBhdHRlbXB0IHRvIHVubW91bnQgdGhlIGVmZmVjdHMgYWdhaW4uXG4gICAgICAgICAgICAvLyBUT0RPOiBJZiB0aGUgdHJlZSBpcyBoaWRkZW4sIGluIG1vc3QgY2FzZXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2tpcFxuICAgICAgICAgICAgLy8gb3ZlciB0aGUgbmVzdGVkIGNoaWxkcmVuIGVudGlyZWx5LiBBbiBleGNlcHRpb24gaXMgd2UgaGF2ZW4ndCB5ZXQgZm91bmRcbiAgICAgICAgICAgIC8vIHRoZSB0b3Btb3N0IGhvc3Qgbm9kZSB0byBkZWxldGUsIHdoaWNoIHdlIGFscmVhZHkgdHJhY2sgb24gdGhlIHN0YWNrLlxuICAgICAgICAgICAgLy8gQnV0IHRoZSBvdGhlciBjYXNlIGlzIHBvcnRhbHMsIHdoaWNoIG5lZWQgdG8gYmUgZGV0YWNoZWQgbm8gbWF0dGVyIGhvd1xuICAgICAgICAgICAgLy8gZGVlcGx5IHRoZXkgYXJlIG5lc3RlZC4gV2Ugc2hvdWxkIHVzZSBhIHN1YnRyZWUgZmxhZyB0byB0cmFjayB3aGV0aGVyIGFcbiAgICAgICAgICAgIC8vIHN1YnRyZWUgaW5jbHVkZXMgYSBuZXN0ZWQgcG9ydGFsLlxuICAgICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPVxuICAgICAgICAgICAgICBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VDYWxsYmFjayhmaW5pc2hlZFdvcmspIHt9XG5cbiAgICBmdW5jdGlvbiBnZXRSZXRyeUNhY2hlKGZpbmlzaGVkV29yaykge1xuICAgICAgLy8gVE9ETzogVW5pZnkgdGhlIGludGVyZmFjZSBmb3IgdGhlIHJldHJ5IGNhY2hlIHNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoXG4gICAgICAvLyBvbiB0aGUgdGFnIGxpa2UgdGhpcy5cbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDoge1xuICAgICAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChyZXRyeUNhY2hlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmV0cnlDYWNoZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICB2YXIgX3JldHJ5Q2FjaGUgPSBpbnN0YW5jZS5fcmV0cnlDYWNoZTtcblxuICAgICAgICAgIGlmIChfcmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgX3JldHJ5Q2FjaGUgPSBpbnN0YW5jZS5fcmV0cnlDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gX3JldHJ5Q2FjaGU7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay50YWcgK1xuICAgICAgICAgICAgICBcIikuIFRoaXMgaXMgYSBcIiArXG4gICAgICAgICAgICAgIFwiYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRldGFjaE9mZnNjcmVlbkluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICB2YXIgZmliZXIgPSBpbnN0YW5jZS5fY3VycmVudDtcblxuICAgICAgaWYgKGZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbGxpbmcgT2Zmc2NyZWVuLmRldGFjaCBiZWZvcmUgaW5zdGFuY2UgaGFuZGxlIGhhcyBiZWVuIHNldC5cIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIE9mZnNjcmVlbkRldGFjaGVkKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBhbHJlYWR5IGRldGFjaGVkLCB0aGlzIGlzIGEgbm9vcC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUT0RPOiBUaGVyZSBpcyBhbiBvcHBvcnR1bml0eSB0byBvcHRpbWlzZSB0aGlzIGJ5IG5vdCBlbnRlcmluZyBjb21taXQgcGhhc2VcbiAgICAgIC8vIGFuZCB1bm1vdW50aW5nIGVmZmVjdHMgZGlyZWN0bHkuXG5cbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgIGluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5EZXRhY2hlZDtcbiAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGFjaE9mZnNjcmVlbkluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICB2YXIgZmliZXIgPSBpbnN0YW5jZS5fY3VycmVudDtcblxuICAgICAgaWYgKGZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbGxpbmcgT2Zmc2NyZWVuLmRldGFjaCBiZWZvcmUgaW5zdGFuY2UgaGFuZGxlIGhhcyBiZWVuIHNldC5cIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIE9mZnNjcmVlbkRldGFjaGVkKSA9PT0gTm9GbGFncyQxKSB7XG4gICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBhbHJlYWR5IGF0dGFjaGVkLCB0aGlzIGlzIGEgbm9vcC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlbkRldGFjaGVkO1xuICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgd2FrZWFibGVzKSB7XG4gICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHNldCBvZiB3YWtlYWJsZXMuXG4gICAgICAvLyBGb3IgZWFjaCB3YWtlYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAgICAgLy8gYXR0ZW1wdHMgdG8gcmUtcmVuZGVyIHRoZSBib3VuZGFyeSBpbiB0aGUgcHJpbWFyeSAocHJlLXRpbWVvdXQpIHN0YXRlLlxuICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBnZXRSZXRyeUNhY2hlKGZpbmlzaGVkV29yayk7XG4gICAgICB3YWtlYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAod2FrZWFibGUpIHtcbiAgICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuXG4gICAgICAgIGlmICghcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpKSB7XG4gICAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgICAgIGlmIChpblByb2dyZXNzTGFuZXMgIT09IG51bGwgJiYgaW5Qcm9ncmVzc1Jvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgd29yayBzdGlsbCwgYXNzb2NpYXRlIHRoZSBvcmlnaW5hbCB1cGRhdGVycyB3aXRoIGl0LlxuICAgICAgICAgICAgICAgIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMoaW5Qcm9ncmVzc1Jvb3QsIGluUHJvZ3Jlc3NMYW5lcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGZpbmlzaGVkIHJvb3QgYW5kIGxhbmVzIHRvIGJlIHNldC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHdoZW4gYSBTdXNwZW5zZSBib3VuZGFyeSBnb2VzIGZyb20gdmlzaWJsZSB0byBoaWRkZW4uXG4gICAgZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMpIHtcbiAgICAgIGluUHJvZ3Jlc3NMYW5lcyA9IGNvbW1pdHRlZExhbmVzO1xuICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCk7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmluaXNoZWRXb3JrKTtcbiAgICAgIGluUHJvZ3Jlc3NMYW5lcyA9IG51bGw7XG4gICAgICBpblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBwYXJlbnRGaWJlciwgbGFuZXMpIHtcbiAgICAgIC8vIERlbGV0aW9ucyBlZmZlY3RzIGNhbiBiZSBzY2hlZHVsZWQgb24gYW55IGZpYmVyIHR5cGUuIFRoZXkgbmVlZCB0byBoYXBwZW5cbiAgICAgIC8vIGJlZm9yZSB0aGUgY2hpbGRyZW4gZWZmZWN0cyBoYWUgZmlyZWQuXG4gICAgICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuXG4gICAgICBpZiAoZGVsZXRpb25zICE9PSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29tbWl0RGVsZXRpb25FZmZlY3RzKHJvb3QsIHBhcmVudEZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY2hpbGRUb0RlbGV0ZSwgcGFyZW50RmliZXIsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZEZWJ1Z0ZpYmVyID0gZ2V0Q3VycmVudEZpYmVyKCk7XG5cbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBNdXRhdGlvbk1hc2spIHtcbiAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGNoaWxkKTtcbiAgICAgICAgICBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGNoaWxkLCByb290KTtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCwgbGFuZXMpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFnczsgLy8gVGhlIGVmZmVjdCBmbGFnIHNob3VsZCBiZSBjaGVja2VkICphZnRlciogd2UgcmVmaW5lIHRoZSB0eXBlIG9mIGZpYmVyLFxuICAgICAgLy8gYmVjYXVzZSB0aGUgZmliZXIgdGFnIGlzIG1vcmUgc3BlY2lmaWMuIEFuIGV4Y2VwdGlvbiBpcyBhbnkgZmxhZyByZWxhdGVkXG4gICAgICAvLyB0byByZWNvbmNpbGlhdGlvbiwgYmVjYXVzZSB0aG9zZSBjYW4gYmUgc2V0IG9uIGFsbCBmaWJlciB0eXBlcy5cblxuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgICAgICBJbnNlcnRpb24gfCBIYXNFZmZlY3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChJbnNlcnRpb24gfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH0gLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgICAgICAvLyBkZXN0cm95IGZ1bmN0aW9ucyBmb3IgYWxsIGZpYmVycyBhcmUgY2FsbGVkIGJlZm9yZSBhbnkgY3JlYXRlIGZ1bmN0aW9ucy5cbiAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cblxuICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgICAgICBMYXlvdXQgfCBIYXNFZmZlY3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgICAgICBMYXlvdXQgfCBIYXNFZmZlY3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGFncyAmIENhbGxiYWNrICYmIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbikge1xuICAgICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZGVmZXJIaWRkZW5DYWxsYmFja3ModXBkYXRlUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcblxuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFRleHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RSb290OiB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBjb250YWluZXJJbmZvID0gcm9vdC5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICB2YXIgcGVuZGluZ0NoaWxkcmVuID0gcm9vdC5wZW5kaW5nQ2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXBsYWNlQ29udGFpbmVyQ2hpbGRyZW4oY29udGFpbmVySW5mbywgcGVuZGluZ0NoaWxkcmVuKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBvcnRhbCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIHZhciBfY29udGFpbmVySW5mbyA9IHBvcnRhbC5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICB2YXIgX3BlbmRpbmdDaGlsZHJlbiA9IHBvcnRhbC5wZW5kaW5nQ2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXBsYWNlQ29udGFpbmVyQ2hpbGRyZW4oX2NvbnRhaW5lckluZm8sIF9wZW5kaW5nQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7IC8vIFRPRE86IFdlIHNob3VsZCBtYXJrIGEgZmxhZyBvbiB0aGUgU3VzcGVuc2UgZmliZXIgaXRzZWxmLCByYXRoZXIgdGhhblxuICAgICAgICAgIC8vIHJlbHlpbmcgb24gdGhlIE9mZnNjcmVlbiBmaWJlciBoYXZpbmcgYSBmbGFnIGFsc28gYmVpbmcgbWFya2VkLiBUaGVcbiAgICAgICAgICAvLyByZWFzb24gaXMgdGhhdCB0aGlzIG9mZnNjcmVlbiBmaWJlciBtaWdodCBub3QgYmUgcGFydCBvZiB0aGUgd29yay1pbi1cbiAgICAgICAgICAvLyBwcm9ncmVzcyB0cmVlISBJdCBjb3VsZCBoYXZlIGJlZW4gcmV1c2VkIGZyb20gYSBwcmV2aW91cyByZW5kZXIuIFRoaXNcbiAgICAgICAgICAvLyBkb2Vzbid0IGxlYWQgdG8gaW5jb3JyZWN0IGJlaGF2aW9yIGJlY2F1c2Ugd2UgZG9uJ3QgcmVseSBvbiB0aGUgZmxhZ1xuICAgICAgICAgIC8vIGNoZWNrIGFsb25lOyB3ZSBhbHNvIGNvbXBhcmUgdGhlIHN0YXRlcyBleHBsaWNpdGx5IGJlbG93LiBCdXQgZm9yXG4gICAgICAgICAgLy8gbW9kZWxpbmcgcHVycG9zZXMsIHdlIF9zaG91bGRfIGJlIGFibGUgdG8gcmVseSBvbiB0aGUgZmxhZyBjaGVjayBhbG9uZS5cbiAgICAgICAgICAvLyBTbyB0aGlzIGlzIGEgYml0IGZyYWdpbGUuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBBbHNvLCBhbGwgdGhpcyBsb2dpYyBjb3VsZC9zaG91bGQgbW92ZSB0byB0aGUgcGFzc2l2ZSBwaGFzZSBzbyBpdFxuICAgICAgICAgIC8vIGRvZXNuJ3QgYmxvY2sgcGFpbnQuXG5cbiAgICAgICAgICB2YXIgb2Zmc2NyZWVuRmliZXIgPSBmaW5pc2hlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgICBpZiAob2Zmc2NyZWVuRmliZXIuZmxhZ3MgJiBWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAvLyBUaHJvdHRsZSB0aGUgYXBwZWFyYW5jZSBhbmQgZGlzYXBwZWFyYW5jZSBvZiBTdXNwZW5zZSBmYWxsYmFja3MuXG4gICAgICAgICAgICB2YXIgaXNTaG93aW5nRmFsbGJhY2sgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIHZhciB3YXNTaG93aW5nRmFsbGJhY2sgPVxuICAgICAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoaXNTaG93aW5nRmFsbGJhY2sgJiYgIXdhc1Nob3dpbmdGYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIC8vIE9sZCBiZWhhdmlvci4gT25seSBtYXJrIHdoZW4gYSBmYWxsYmFjayBhcHBlYXJzLCBub3Qgd2hlblxuICAgICAgICAgICAgICAgIC8vIGl0IGRpc2FwcGVhcnMuXG4gICAgICAgICAgICAgICAgbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdFN1c3BlbnNlQ2FsbGJhY2soZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmV0cnlRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKHJldHJ5UXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIHJldHJ5UXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IG5ld1N0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciB3YXNIaWRkZW4gPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgICAvLyBCZWZvcmUgY29tbWl0dGluZyB0aGUgY2hpbGRyZW4sIHRyYWNrIG9uIHRoZSBzdGFjayB3aGV0aGVyIHRoaXNcbiAgICAgICAgICAgIC8vIG9mZnNjcmVlbiBzdWJ0cmVlIHdhcyBhbHJlYWR5IGhpZGRlbiwgc28gdGhhdCB3ZSBkb24ndCB1bm1vdW50IHRoZVxuICAgICAgICAgICAgLy8gZWZmZWN0cyBhZ2Fpbi5cbiAgICAgICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgaXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID1cbiAgICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHwgd2FzSGlkZGVuO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHZhciBvZmZzY3JlZW5JbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFRPRE86IEFkZCBleHBsaWNpdCBlZmZlY3QgZmxhZyB0byBzZXQgX2N1cnJlbnQuXG5cbiAgICAgICAgICBvZmZzY3JlZW5JbnN0YW5jZS5fY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gT2Zmc2NyZWVuIHN0b3JlcyBwZW5kaW5nIGNoYW5nZXMgdG8gdmlzaWJpbGl0eSBpbiBgX3BlbmRpbmdWaXNpYmlsaXR5YC4gVGhpcyBpc1xuICAgICAgICAgIC8vIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgYGF0dGFjaGAgYW5kIGBkZXRhY2hgIGNhbGxzLlxuXG4gICAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlbkRldGFjaGVkO1xuICAgICAgICAgIG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5IHw9XG4gICAgICAgICAgICBvZmZzY3JlZW5JbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZDtcblxuICAgICAgICAgIGlmIChmbGFncyAmIFZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgIC8vIFRyYWNrIHRoZSBjdXJyZW50IHN0YXRlIG9uIHRoZSBPZmZzY3JlZW4gaW5zdGFuY2Ugc28gd2UgY2FuXG4gICAgICAgICAgICAvLyByZWFkIGl0IGR1cmluZyBhbiBldmVudFxuICAgICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5ICY9IH5PZmZzY3JlZW5WaXNpYmxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuX3Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuVmlzaWJsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIHZhciBpc1VwZGF0ZSA9IGN1cnJlbnQgIT09IG51bGw7XG4gICAgICAgICAgICAgIHZhciB3YXNIaWRkZW5CeUFuY2VzdG9yT2Zmc2NyZWVuID1cbiAgICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjsgLy8gT25seSB0cmlnZ2VyIGRpc2FwcGVyIGxheW91dCBlZmZlY3RzIGlmOlxuICAgICAgICAgICAgICAvLyAgIC0gVGhpcyBpcyBhbiB1cGRhdGUsIG5vdCBmaXJzdCBtb3VudC5cbiAgICAgICAgICAgICAgLy8gICAtIFRoaXMgT2Zmc2NyZWVuIHdhcyBub3QgaGlkZGVuIGJlZm9yZS5cbiAgICAgICAgICAgICAgLy8gICAtIEFuY2VzdG9yIE9mZnNjcmVlbiB3YXMgbm90IGhpZGRlbiBpbiBwcmV2aW91cyBjb21taXQuXG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBkYXRlICYmICF3YXNIaWRkZW4gJiYgIXdhc0hpZGRlbkJ5QW5jZXN0b3JPZmZzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoKGZpbmlzaGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIERpc2FwcGVhciB0aGUgbGF5b3V0IGVmZmVjdHMgb2YgYWxsIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gT2Zmc2NyZWVuIHdpdGggbWFudWFsIG1vZGUgbWFuYWdlcyB2aXNpYmlsaXR5IG1hbnVhbGx5LlxuICAgICAgICAgIH0gLy8gVE9ETzogTW92ZSB0byBwYXNzaXZlIHBoYXNlXG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzY3JlZW5RdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKG9mZnNjcmVlblF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBfcmV0cnlRdWV1ZSA9IG9mZnNjcmVlblF1ZXVlLnJldHJ5UXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9yZXRyeVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIF9yZXRyeVF1ZXVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICB2YXIgX3JldHJ5UXVldWUyID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICBpZiAoX3JldHJ5UXVldWUyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBfcmV0cnlRdWV1ZTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6IHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIC8vIFBsYWNlbWVudCBlZmZlY3RzIChpbnNlcnRpb25zLCByZW9yZGVycykgY2FuIGJlIHNjaGVkdWxlZCBvbiBhbnkgZmliZXJcbiAgICAgIC8vIHR5cGUuIFRoZXkgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHRoZSBjaGlsZHJlbiBlZmZlY3RzIGhhdmUgZmlyZWQsIGJ1dFxuICAgICAgLy8gYmVmb3JlIHRoZSBlZmZlY3RzIG9uIHRoaXMgZmliZXIgaGF2ZSBmaXJlZC5cbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcblxuICAgICAgaWYgKGZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH0gLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgLy8gVE9ETzogZmluZERPTU5vZGUgZG9lc24ndCByZWx5IG9uIHRoaXMgYW55IG1vcmUgYnV0IGlzTW91bnRlZCBkb2VzXG4gICAgICAgIC8vIGFuZCBpc01vdW50ZWQgaXMgZGVwcmVjYXRlZCBhbnl3YXkgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2lsbCB0aGlzLlxuXG4gICAgICAgIGZpbmlzaGVkV29yay5mbGFncyAmPSB+UGxhY2VtZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxhZ3MgJiBIeWRyYXRpbmcpIHtcbiAgICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICY9IH5IeWRyYXRpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG4gICAgICBpblByb2dyZXNzTGFuZXMgPSBjb21taXR0ZWRMYW5lcztcbiAgICAgIGluUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIocm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGluUHJvZ3Jlc3NMYW5lcyA9IG51bGw7XG4gICAgICBpblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMocm9vdCwgcGFyZW50RmliZXIsIGxhbmVzKSB7XG4gICAgICB2YXIgcHJldkRlYnVnRmliZXIgPSBnZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIExheW91dE1hc2spIHtcbiAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGNoaWxkKTtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGNoaWxkLmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKHJvb3QsIGN1cnJlbnQsIGNoaWxkKTtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBUT0RPIChPZmZzY3JlZW4pIENoZWNrOiBmbGFncyAmIExheW91dFN0YXRpY1xuICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgICAgIExheW91dCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVyblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgICBMYXlvdXQsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVyblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgUmVmU3RhdGljXG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OiB7XG4gICAgICAgICAgLy8gVE9ETyAoT2Zmc2NyZWVuKSBDaGVjazogZmxhZ3MgJiBSZWZTdGF0aWNcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBUT0RPIChPZmZzY3JlZW4pIENoZWNrOiBmbGFncyAmIFJlZlN0YXRpY1xuICAgICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICAvLyBUT0RPIChPZmZzY3JlZW4pIENoZWNrOiBmbGFncyAmIChSZWZTdGF0aWMgfCBMYXlvdXRTdGF0aWMpXG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGRpc2FwcGVhckxheW91dEVmZmVjdHMoY2hpbGQpO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgY3VycmVudCxcbiAgICAgIGZpbmlzaGVkV29yaywgLy8gVGhpcyBmdW5jdGlvbiB2aXNpdHMgYm90aCBuZXdseSBmaW5pc2hlZCB3b3JrIGFuZCBub2RlcyB0aGF0IHdlcmUgcmUtdXNlZFxuICAgICAgLy8gZnJvbSBhIHByZXZpb3VzbHkgY29tbWl0dGVkIHRyZWUuIFdlIGNhbm5vdCBjaGVjayBub24tc3RhdGljIGZsYWdzIGlmIHRoZVxuICAgICAgLy8gbm9kZSB3YXMgcmV1c2VkLlxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgLy8gVHVybiBvbiBsYXlvdXQgZWZmZWN0cyBpbiBhIHRyZWUgdGhhdCBwcmV2aW91c2x5IGRpc2FwcGVhcmVkLlxuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuXG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7IC8vIFRPRE86IENoZWNrIGZsYWdzICYgTGF5b3V0U3RhdGljXG5cbiAgICAgICAgICBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIExheW91dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApOyAvLyBUT0RPOiBDaGVjayBmb3IgTGF5b3V0U3RhdGljIGZsYWdcblxuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIENvbW1pdCBhbnkgY2FsbGJhY2tzIHRoYXQgd291bGQgaGF2ZSBmaXJlZCB3aGlsZSB0aGUgY29tcG9uZW50XG4gICAgICAgICAgLy8gd2FzIGhpZGRlbi5cblxuICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tbWl0SGlkZGVuQ2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgICAgfSAvLyBJZiB0aGlzIGlzIG5ld2x5IGZpbmlzaGVkIHdvcmssIGNoZWNrIGZvciBzZXRTdGF0ZSBjYWxsYmFja3NcblxuICAgICAgICAgIGlmIChpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIGZsYWdzICYgQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSAvLyBUT0RPOiBDaGVjayBmbGFncyAmIFJlZlN0YXRpY1xuXG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVW5saWtlIGNvbW1pdExheW91dEVmZmVjdHNPbkZpYmVyLCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBIb3N0Um9vdFxuICAgICAgICAvLyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gb25seSB2aXNpdHMgbm9kZXMgdGhhdCBhcmUgaW5zaWRlIGFuXG4gICAgICAgIC8vIE9mZnNjcmVlbiBmaWJlci5cbiAgICAgICAgLy8gY2FzZSBIb3N0Um9vdDoge1xuICAgICAgICAvLyAgLi4uXG4gICAgICAgIC8vIH1cblxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIG1heSBzY2hlZHVsZSBhdXRvLWZvY3VzIGZvciBpbnB1dHMgYW5kIGZvcm0gY29udHJvbHMpLlxuICAgICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICAgIGN1cnJlbnQgPT09IG51bGwgJiZcbiAgICAgICAgICAgIGZsYWdzICYgVXBkYXRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb21taXRIb3N0Q29tcG9uZW50TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9IC8vIFRPRE86IENoZWNrIGZsYWdzICYgUmVmXG5cbiAgICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7IC8vIFRPRE86IEZpZ3VyZSBvdXQgaG93IFByb2ZpbGVyIHVwZGF0ZXMgc2hvdWxkIHdvcmsgd2l0aCBPZmZzY3JlZW5cblxuICAgICAgICAgIGlmIChpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICBjb21taXRQcm9maWxlclVwZGF0ZShmaW5pc2hlZFdvcmssIGN1cnJlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTsgLy8gVE9ETzogRmlndXJlIG91dCBob3cgU3VzcGVuc2UgaHlkcmF0aW9uIGNhbGxiYWNrcyBzaG91bGQgd29ya1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBvZmZzY3JlZW5TdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IG9mZnNjcmVlblN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gLy8gVE9ETzogQ2hlY2sgZmxhZ3MgJiBSZWZcblxuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdmlzaXRzIGJvdGggbmV3bHkgZmluaXNoZWQgd29yayBhbmQgbm9kZXMgdGhhdCB3ZXJlIHJlLXVzZWRcbiAgICAgIC8vIGZyb20gYSBwcmV2aW91c2x5IGNvbW1pdHRlZCB0cmVlLiBXZSBjYW5ub3QgY2hlY2sgbm9uLXN0YXRpYyBmbGFncyBpZiB0aGVcbiAgICAgIC8vIG5vZGUgd2FzIHJldXNlZC5cbiAgICAgIHZhciBjaGlsZFNob3VsZEluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPVxuICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBMYXlvdXRNYXNrKSAhPT0gTm9GbGFncyQxOyAvLyBUT0RPIChPZmZzY3JlZW4pIENoZWNrOiBmbGFncyAmIChSZWZTdGF0aWMgfCBMYXlvdXRTdGF0aWMpXG5cbiAgICAgIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuICAgICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IGNoaWxkLmFsdGVybmF0ZTtcbiAgICAgICAgcmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgIGNoaWxkU2hvdWxkSW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBob29rRmxhZ3MpIHtcbiAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgc3RhcnRQYXNzaXZlRWZmZWN0VGltZXIoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgIHJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmluaXNoZWRXb3JrKTtcbiAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICByb290LFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgcHJldkRlYnVnRmliZXIgPSBnZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihjaGlsZCk7XG4gICAgICAgICAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihyb290LCBjaGlsZCk7XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICApIHtcbiAgICAgIC8vIFdoZW4gdXBkYXRpbmcgdGhpcyBmdW5jdGlvbiwgYWxzbyB1cGRhdGUgcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMsIHdoaWNoIGRvZXNcbiAgICAgIC8vIG1vc3Qgb2YgdGhlIHNhbWUgdGhpbmdzIHdoZW4gYW4gb2Zmc2NyZWVuIHRyZWUgZ29lcyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlLFxuICAgICAgLy8gb3Igd2hlbiB0b2dnbGluZyBlZmZlY3RzIGluc2lkZSBhIGhpZGRlbiB0cmVlLlxuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuXG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBQYXNzaXZlJDEpIHtcbiAgICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgUGFzc2l2ZSB8IEhhc0VmZmVjdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RSb290OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIGlmIChfaW5zdGFuY2UzLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBjb25uZWN0ZWQuIFVwZGF0ZSB0aGVtLlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSk7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIExlZ2FjeSBNb2RlOiBGaXJlIHRoZSBlZmZlY3RzIGV2ZW4gaWYgdGhlIHRyZWUgaXMgaGlkZGVuLlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZTMuX3Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQ7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRyZWUgaXMgdmlzaWJsZVxuICAgICAgICAgICAgaWYgKF9pbnN0YW5jZTMuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGNvbm5lY3RlZC4gVXBkYXRlIHRoZW0uXG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgZGlzY29ubmVjdGVkLiBSZWNvbm5lY3QgdGhlbSwgd2hpbGUgYWxzb1xuICAgICAgICAgICAgICAvLyBmaXJpbmcgZWZmZWN0cyBpbnNpZGUgbmV3bHkgbW91bnRlZCB0cmVlcy4gVGhpcyBhbHNvIGFwcGxpZXMgdG9cbiAgICAgICAgICAgICAgLy8gdGhlIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICAgICAgICBfaW5zdGFuY2UzLl92aXNpYmlsaXR5IHw9IE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkO1xuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDYWNoZUNvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUcmFjaW5nTWFya2VyQ29tcG9uZW50OlxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldkRlYnVnRmliZXIgPSBnZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBjaGlsZCk7XG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsIC8vIFRoaXMgZnVuY3Rpb24gdmlzaXRzIGJvdGggbmV3bHkgZmluaXNoZWQgd29yayBhbmQgbm9kZXMgdGhhdCB3ZXJlIHJlLXVzZWRcbiAgICAgIC8vIGZyb20gYSBwcmV2aW91c2x5IGNvbW1pdHRlZCB0cmVlLiBXZSBjYW5ub3QgY2hlY2sgbm9uLXN0YXRpYyBmbGFncyBpZiB0aGVcbiAgICAgIC8vIG5vZGUgd2FzIHJldXNlZC5cbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICk7IC8vIFRPRE86IENoZWNrIGZvciBQYXNzaXZlU3RhdGljIGZsYWdcblxuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgUGFzc2l2ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVW5saWtlIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIsIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIEhvc3RSb290XG4gICAgICAgIC8vIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBvbmx5IHZpc2l0cyBub2RlcyB0aGF0IGFyZSBpbnNpZGUgYW5cbiAgICAgICAgLy8gT2Zmc2NyZWVuIGZpYmVyLlxuICAgICAgICAvLyBjYXNlIEhvc3RSb290OiB7XG4gICAgICAgIC8vICAuLi5cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2U0ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIGlzSGlkZGVuID0gbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICBpZiAoX2luc3RhbmNlNC5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgY29ubmVjdGVkLiBVcGRhdGUgdGhlbS5cbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKTtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTGVnYWN5IE1vZGU6IEZpcmUgdGhlIGVmZmVjdHMgZXZlbiBpZiB0aGUgdHJlZSBpcyBoaWRkZW4uXG4gICAgICAgICAgICAgICAgX2luc3RhbmNlNC5fdmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZDtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRyZWUgaXMgdmlzaWJsZVxuICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWxyZWFkeSBpbnNpZGUgYSByZWNvbm5lY3RpbmcgdHJlZSwgaXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgICAgIC8vIHdoZXRoZXIgdGhlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBjb25uZWN0ZWQuIEluIGVpdGhlciBjYXNlLCB3ZSdsbFxuICAgICAgICAgICAgLy8gY29udGludWUgdHJhdmVyc2luZyB0aGUgdHJlZSBhbmQgZmlyaW5nIGFsbCB0aGUgZWZmZWN0cy5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBXZSBkbyBuZWVkIHRvIHNldCB0aGUgXCJjb25uZWN0ZWRcIiBmbGFnIG9uIHRoZSBpbnN0YW5jZSwgdGhvdWdoLlxuICAgICAgICAgICAgX2luc3RhbmNlNC5fdmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZDtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENhY2hlQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUcmFjaW5nTWFya2VyQ29tcG9uZW50OlxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIoZmluaXNoZWRXb3JrKTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfSAvLyBJZiB3ZSdyZSBpbnNpZGUgYSBicmFuZCBuZXcgdHJlZSwgb3IgYSB0cmVlIHRoYXQgd2FzIGFscmVhZHkgdmlzaWJsZSwgdGhlbiB3ZVxuICAgIC8vIHNob3VsZCBvbmx5IHN1c3BlbmQgaG9zdCBjb21wb25lbnRzIHRoYXQgaGF2ZSBhIFNob3VsZFN1c3BlbmRDb21taXQgZmxhZy5cbiAgICAvLyBDb21wb25lbnRzIHdpdGhvdXQgaXQgaGF2ZW4ndCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGNvbW1pdCwgc28gd2UgY2FuIHNraXBcbiAgICAvLyBvdmVyIHRob3NlLlxuICAgIC8vXG4gICAgLy8gV2hlbiB3ZSBlbnRlciBhIHRyZWUgdGhhdCBpcyBiZWluZyByZXZlYWxlZCAoZ29pbmcgZnJvbSBoaWRkZW4gLT4gdmlzaWJsZSksXG4gICAgLy8gd2UgbmVlZCB0byBzdXNwZW5kIF9hbnlfIGNvbXBvbmVudCB0aGF0IF9tYXlfIHN1c3BlbmQuIEV2ZW4gaWYgdGhleSdyZVxuICAgIC8vIGFscmVhZHkgaW4gdGhlIFwiY3VycmVudFwiIHRyZWUuIEJlY2F1c2UgdGhlaXIgdmlzaWJpbGl0eSBoYXMgY2hhbmdlZCwgdGhlXG4gICAgLy8gYnJvd3NlciBtYXkgbm90IGhhdmUgcHJlcmVuZGVyZWQgdGhlbSB5ZXQuIFNvIHdlIGNoZWNrIHRoZSBNYXlTdXNwZW5kQ29tbWl0XG4gICAgLy8gZmxhZyBpbnN0ZWFkLlxuXG4gICAgdmFyIHN1c3BlbnNleUNvbW1pdEZsYWcgPSBTaG91bGRTdXNwZW5kQ29tbWl0O1xuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmluaXNoZWRXb3JrKSB7XG4gICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaW5pc2hlZFdvcmspO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChwYXJlbnRGaWJlcikge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIHN1c3BlbnNleUNvbW1pdEZsYWcpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoY2hpbGQpO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKGZpYmVyKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6IHtcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLmZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZykge1xuICAgICAgICAgICAgaWYgKGZpYmVyLm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3VzcGVuZFJlc291cmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBmaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgdmFyIHdhc0hpZGRlbiA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgICBpZiAod2FzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgdHJlZSBpcyBiZWluZyByZXZlYWxlZC4gVmlzaXQgYWxsIG5ld2x5IHZpc2libGUgc3VzcGVuc2V5XG4gICAgICAgICAgICAgIC8vIGluc3RhbmNlcywgZXZlbiBpZiB0aGV5J3JlIGluIHRoZSBjdXJyZW50IHRyZWUuXG4gICAgICAgICAgICAgIHZhciBwcmV2RmxhZ3MgPSBzdXNwZW5zZXlDb21taXRGbGFnO1xuICAgICAgICAgICAgICBzdXNwZW5zZXlDb21taXRGbGFnID0gTWF5U3VzcGVuZENvbW1pdDtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICAgICAgc3VzcGVuc2V5Q29tbWl0RmxhZyA9IHByZXZGbGFncztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKSB7XG4gICAgICAvLyBBIGZpYmVyIHdhcyBkZWxldGVkIGZyb20gdGhpcyBwYXJlbnQgZmliZXIsIGJ1dCBpdCdzIHN0aWxsIHBhcnQgb2YgdGhlXG4gICAgICAvLyBwcmV2aW91cyAoYWx0ZXJuYXRlKSBwYXJlbnQgZmliZXIncyBsaXN0IG9mIGNoaWxkcmVuLiBCZWNhdXNlIGNoaWxkcmVuXG4gICAgICAvLyBhcmUgYSBsaW5rZWQgbGlzdCwgYW4gZWFybGllciBzaWJsaW5nIHRoYXQncyBzdGlsbCBhbGl2ZSB3aWxsIGJlXG4gICAgICAvLyBjb25uZWN0ZWQgdG8gdGhlIGRlbGV0ZWQgZmliZXIgdmlhIGl0cyBgYWx0ZXJuYXRlYDpcbiAgICAgIC8vXG4gICAgICAvLyAgIGxpdmUgZmliZXIgLS1hbHRlcm5hdGUtLT4gcHJldmlvdXMgbGl2ZSBmaWJlciAtLXNpYmxpbmctLT4gZGVsZXRlZFxuICAgICAgLy8gICBmaWJlclxuICAgICAgLy9cbiAgICAgIC8vIFdlIGNhbid0IGRpc2Nvbm5lY3QgYGFsdGVybmF0ZWAgb24gbm9kZXMgdGhhdCBoYXZlbid0IGJlZW4gZGVsZXRlZCB5ZXQsXG4gICAgICAvLyBidXQgd2UgY2FuIGRpc2Nvbm5lY3QgdGhlIGBzaWJsaW5nYCBhbmQgYGNoaWxkYCBwb2ludGVycy5cbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAocHJldmlvdXNGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZGV0YWNoZWRDaGlsZCA9IHByZXZpb3VzRmliZXIuY2hpbGQ7XG5cbiAgICAgICAgaWYgKGRldGFjaGVkQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBwcmV2aW91c0ZpYmVyLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgICAgdmFyIGRldGFjaGVkU2libGluZyA9IGRldGFjaGVkQ2hpbGQuc2libGluZzsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICAgIGRldGFjaGVkQ2hpbGQuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgICBkZXRhY2hlZENoaWxkID0gZGV0YWNoZWRTaWJsaW5nO1xuICAgICAgICAgIH0gd2hpbGUgKGRldGFjaGVkQ2hpbGQgIT09IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBob29rRmxhZ3NcbiAgICApIHtcbiAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgc3RhcnRQYXNzaXZlRWZmZWN0VGltZXIoKTtcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICApO1xuICAgICAgICByZWNvcmRQYXNzaXZlRWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICAvLyBEZWxldGlvbnMgZWZmZWN0cyBjYW4gYmUgc2NoZWR1bGVkIG9uIGFueSBmaWJlciB0eXBlLiBUaGV5IG5lZWQgdG8gaGFwcGVuXG4gICAgICAvLyBiZWZvcmUgdGhlIGNoaWxkcmVuIGVmZmVjdHMgaGF2ZSBmaXJlZC5cbiAgICAgIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG5cbiAgICAgIGlmICgocGFyZW50RmliZXIuZmxhZ3MgJiBDaGlsZERlbGV0aW9uKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGlmIChkZWxldGlvbnMgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07IC8vIFRPRE86IENvbnZlcnQgdGhpcyB0byB1c2UgcmVjdXJzaW9uXG5cbiAgICAgICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihcbiAgICAgICAgICAgICAgY2hpbGRUb0RlbGV0ZSxcbiAgICAgICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJldkRlYnVnRmliZXIgPSBnZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogU3BsaXQgUGFzc2l2ZU1hc2sgaW50byBzZXBhcmF0ZSBtYXNrcyBmb3IgbW91bnQgYW5kIHVubW91bnQ/XG5cbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBQYXNzaXZlTWFzaykge1xuICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoY2hpbGQpO1xuICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihjaGlsZCk7XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFBhc3NpdmUkMSkge1xuICAgICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBQYXNzaXZlIHwgSGFzRWZmZWN0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0hpZGRlbiAmJlxuICAgICAgICAgICAgaW5zdGFuY2UuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCAmJiAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGRvbid0IHVubW91bnQgd2hlbiBhIHRyZWUgc3VzcGVuZHMuIEluXG4gICAgICAgICAgICAvLyB0aGUgZnV0dXJlIHdlIG1heSBjaGFuZ2UgdGhpcyB0byB1bm1vdW50IGFmdGVyIGEgZGVsYXkuXG4gICAgICAgICAgICAoZmluaXNoZWRXb3JrLnJldHVybiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGNvbm5lY3RlZC4gRGlzY29ubmVjdCB0aGVtLlxuICAgICAgICAgICAgLy8gVE9ETzogQWRkIG9wdGlvbiBvciBoZXVyaXN0aWMgdG8gZGVsYXkgYmVmb3JlIGRpc2Nvbm5lY3RpbmcgdGhlXG4gICAgICAgICAgICAvLyBlZmZlY3RzLiBUaGVuIGlmIHRoZSB0cmVlIHJlYXBwZWFycyBiZWZvcmUgdGhlIGRlbGF5IGhhcyBlbGFwc2VkLCB3ZVxuICAgICAgICAgICAgLy8gY2FuIHNraXAgdG9nZ2xpbmcgdGhlIGVmZmVjdHMgZW50aXJlbHkuXG4gICAgICAgICAgICBpbnN0YW5jZS5fdmlzaWJpbGl0eSAmPSB+T2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQ7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICAvLyBEZWxldGlvbnMgZWZmZWN0cyBjYW4gYmUgc2NoZWR1bGVkIG9uIGFueSBmaWJlciB0eXBlLiBUaGV5IG5lZWQgdG8gaGFwcGVuXG4gICAgICAvLyBiZWZvcmUgdGhlIGNoaWxkcmVuIGVmZmVjdHMgaGF2ZSBmaXJlZC5cbiAgICAgIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG5cbiAgICAgIGlmICgocGFyZW50RmliZXIuZmxhZ3MgJiBDaGlsZERlbGV0aW9uKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGlmIChkZWxldGlvbnMgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07IC8vIFRPRE86IENvbnZlcnQgdGhpcyB0byB1c2UgcmVjdXJzaW9uXG5cbiAgICAgICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihcbiAgICAgICAgICAgICAgY2hpbGRUb0RlbGV0ZSxcbiAgICAgICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJldkRlYnVnRmliZXIgPSBnZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogQ2hlY2sgUGFzc2l2ZVN0YXRpYyBmbGFnXG5cbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGNoaWxkKTtcbiAgICAgICAgZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QoY2hpbGQpO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QoZmluaXNoZWRXb3JrKSB7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBUT0RPOiBDaGVjayBQYXNzaXZlU3RhdGljIGZsYWdcbiAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgIFBhc3NpdmVcbiAgICAgICAgICApOyAvLyBXaGVuIGRpc2Nvbm5lY3RpbmcgcGFzc2l2ZSBlZmZlY3RzLCB3ZSBmaXJlIHRoZSBlZmZlY3RzIGluIHRoZSBzYW1lXG4gICAgICAgICAgLy8gb3JkZXIgYXMgZHVyaW5nIGEgZGVsZXRpb25nOiBwYXJlbnQgYmVmb3JlIGNoaWxkXG5cbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoaW5zdGFuY2UuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgaW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICBkZWxldGVkU3VidHJlZVJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgKSB7XG4gICAgICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0OyAvLyBEZWxldGlvbiBlZmZlY3RzIGZpcmUgaW4gcGFyZW50IC0+IGNoaWxkIG9yZGVyXG4gICAgICAgIC8vIFRPRE86IENoZWNrIGlmIGZpYmVyIGhhcyBhIFBhc3NpdmVTdGF0aWMgZmxhZ1xuXG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyKFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7IC8vIFRPRE86IE9ubHkgdHJhdmVyc2Ugc3VidHJlZSBpZiBpdCBoYXMgYSBQYXNzaXZlU3RhdGljIGZsYWcuXG5cbiAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2hpbGQucmV0dXJuID0gZmliZXI7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfY29tcGxldGUoXG4gICAgICAgICAgICBkZWxldGVkU3VidHJlZVJvb3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9jb21wbGV0ZShcbiAgICAgIGRlbGV0ZWRTdWJ0cmVlUm9vdFxuICAgICkge1xuICAgICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDtcbiAgICAgICAgdmFyIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nO1xuICAgICAgICB2YXIgcmV0dXJuRmliZXIgPSBmaWJlci5yZXR1cm47IC8vIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHRoZSBlbnRpcmUgZGVsZXRlZCB0cmVlIGFuZCBjbGVhbiB1cCBmaWJlciBmaWVsZHMuXG4gICAgICAgIC8vIFRoaXMgaXMgbW9yZSBhZ2dyZXNzaXZlIHRoYW4gaWRlYWwsIGFuZCB0aGUgbG9uZyB0ZXJtIGdvYWwgaXMgdG8gb25seVxuICAgICAgICAvLyBoYXZlIHRvIGRldGFjaCB0aGUgZGVsZXRlZCB0cmVlIGF0IHRoZSByb290LlxuXG4gICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGZpYmVyKTtcblxuICAgICAgICBpZiAoZmliZXIgPT09IGRlbGV0ZWRTdWJ0cmVlUm9vdCkge1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gc2libGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0RWZmZWN0ID0gcmV0dXJuRmliZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRJbnNpZGVEZWxldGVkVHJlZU9uRmliZXIoXG4gICAgICBjdXJyZW50LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICkge1xuICAgICAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIFBhc3NpdmVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52b2tlTGF5b3V0RWZmZWN0TW91bnRJbkRFVihmaWJlcikge1xuICAgICAge1xuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWNoZWNrIFN0cmljdEVmZmVjdHNNb2RlIGhlcmUuXG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgdGhhdCBjaGVjayBoYXMgYWxyZWFkeSBwYXNzZWQuXG4gICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmliZXIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RNb3VudEluREVWKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtY2hlY2sgU3RyaWN0RWZmZWN0c01vZGUgaGVyZS5cbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiB0aGF0IGNoZWNrIGhhcyBhbHJlYWR5IHBhc3NlZC5cbiAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoUGFzc2l2ZSB8IEhhc0VmZmVjdCwgZmliZXIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VMYXlvdXRFZmZlY3RVbm1vdW50SW5ERVYoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZS1jaGVjayBTdHJpY3RFZmZlY3RzTW9kZSBoZXJlLlxuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoYXQgY2hlY2sgaGFzIGFscmVhZHkgcGFzc2VkLlxuICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgICAgIExheW91dCB8IEhhc0VmZmVjdCxcbiAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICBmaWJlci5yZXR1cm5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBmaWJlci5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGZpYmVyLCBmaWJlci5yZXR1cm4sIGluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52b2tlUGFzc2l2ZUVmZmVjdFVubW91bnRJbkRFVihmaWJlcikge1xuICAgICAge1xuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWNoZWNrIFN0cmljdEVmZmVjdHNNb2RlIGhlcmUuXG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgdGhhdCBjaGVjayBoYXMgYWxyZWFkeSBwYXNzZWQuXG4gICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgICAgUGFzc2l2ZSB8IEhhc0VmZmVjdCxcbiAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICBmaWJlci5yZXR1cm5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBmaWJlci5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5mb3IpIHtcbiAgICAgIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuY29tcG9uZW50XCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzc1wiKTtcbiAgICAgIHN5bWJvbEZvcihcInNlbGVjdG9yLnJvbGVcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci50ZXN0X2lkXCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IudGV4dFwiKTtcbiAgICB9XG5cbiAgICB2YXIgUmVhY3RDdXJyZW50QWN0UXVldWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEFjdFF1ZXVlO1xuICAgIGZ1bmN0aW9uIGlzTGVnYWN5QWN0RW52aXJvbm1lbnQoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gTGVnYWN5IG1vZGUuIFdlIHByZXNlcnZlIHRoZSBiZWhhdmlvciBvZiBSZWFjdCAxNydzIGFjdC4gSXQgYXNzdW1lcyBhblxuICAgICAgICAvLyBhY3QgZW52aXJvbm1lbnQgd2hlbmV2ZXIgYGplc3RgIGlzIGRlZmluZWQsIGJ1dCB5b3UgY2FuIHN0aWxsIHR1cm4gb2ZmXG4gICAgICAgIC8vIHNwdXJpb3VzIHdhcm5pbmdzIGJ5IHNldHRpbmcgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gdG8gZmFsc2UuXG4gICAgICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV0gRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UIGdsb2JhbFxuICAgICAgICB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UICE9PSBcInVuZGVmaW5lZFwiIC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV1cbiAgICAgICAgICA/IElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVFxuICAgICAgICAgIDogdW5kZWZpbmVkOyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdIC0gRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgamVzdFxuICAgICAgICByZXR1cm4gd2FybnNJZk5vdEFjdGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgPSAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVCBnbG9iYWxcbiAgICAgICAgICB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UICE9PSBcInVuZGVmaW5lZFwiIC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV1cbiAgICAgICAgICAgID8gSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCAmJlxuICAgICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEuY3VycmVudCAhPT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUT0RPOiBJbmNsdWRlIGxpbmsgdG8gcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBwYWdlLlxuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJUaGUgY3VycmVudCB0ZXN0aW5nIGVudmlyb25tZW50IGlzIG5vdCBjb25maWd1cmVkIHRvIHN1cHBvcnQgXCIgK1xuICAgICAgICAgICAgICBcImFjdCguLi4pXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09IFwiZnVuY3Rpb25cIiA/IFdlYWtNYXAgOiBNYXA7XG4gICAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7XG4gICAgdmFyIE5vQ29udGV4dCA9XG4gICAgICAvKiAgICAgICAgICAgICAqL1xuICAgICAgMDtcbiAgICB2YXIgQmF0Y2hlZENvbnRleHQgPVxuICAgICAgLyogICAgICAgICAgICAgICAqL1xuICAgICAgMTtcbiAgICB2YXIgUmVuZGVyQ29udGV4dCA9XG4gICAgICAvKiAgICAgICAgICovXG4gICAgICAyO1xuICAgIHZhciBDb21taXRDb250ZXh0ID1cbiAgICAgIC8qICAgICAgICAgKi9cbiAgICAgIDQ7XG4gICAgdmFyIFJvb3RJblByb2dyZXNzID0gMDtcbiAgICB2YXIgUm9vdEZhdGFsRXJyb3JlZCA9IDE7XG4gICAgdmFyIFJvb3RFcnJvcmVkID0gMjtcbiAgICB2YXIgUm9vdFN1c3BlbmRlZCA9IDM7XG4gICAgdmFyIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0O1xuICAgIHZhciBSb290Q29tcGxldGVkID0gNTtcbiAgICB2YXIgUm9vdERpZE5vdENvbXBsZXRlID0gNjsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbiAgICB2YXIgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dDsgLy8gVGhlIHJvb3Qgd2UncmUgd29ya2luZyBvblxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7IC8vIFRoZSBmaWJlciB3ZSdyZSB3b3JraW5nIG9uXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBOb3RTdXNwZW5kZWQgPSAwO1xuICAgIHZhciBTdXNwZW5kZWRPbkVycm9yID0gMTtcbiAgICB2YXIgU3VzcGVuZGVkT25EYXRhID0gMjtcbiAgICB2YXIgU3VzcGVuZGVkT25JbW1lZGlhdGUgPSAzO1xuICAgIHZhciBTdXNwZW5kZWRPbkluc3RhbmNlID0gNDtcbiAgICB2YXIgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZSA9IDU7XG4gICAgdmFyIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZSA9IDY7XG4gICAgdmFyIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZSA9IDc7XG4gICAgdmFyIFN1c3BlbmRlZE9uSHlkcmF0aW9uID0gODsgLy8gV2hlbiB0aGlzIGlzIHRydWUsIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyIGp1c3Qgc3VzcGVuZGVkIChvciBlcnJvcmVkKSBhbmRcbiAgICAvLyB3ZSd2ZSB5ZXQgdG8gdW53aW5kIHRoZSBzdGFjay4gSW4gc29tZSBjYXNlcywgd2UgbWF5IHlpZWxkIHRvIHRoZSBtYWluIHRocmVhZFxuICAgIC8vIGFmdGVyIHRoaXMgaGFwcGVucy4gSWYgdGhlIGZpYmVyIGlzIHBpbmdlZCBiZWZvcmUgd2UgcmVzdW1lLCB3ZSBjYW4gcmV0cnlcbiAgICAvLyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHVud2luZGluZyB0aGUgc3RhY2suXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgdmFyIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsOyAvLyBXaGV0aGVyIGEgcGluZyBsaXN0ZW5lciB3YXMgYXR0YWNoZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBUaGlzIGlzIHNsaWdodGx5XG4gICAgLy8gZGlmZmVyZW50IHRoYXQgd2hldGhlciBzb21ldGhpbmcgc3VzcGVuZGVkLCBiZWNhdXNlIHdlIGRvbid0IGFkZCBtdWx0aXBsZVxuICAgIC8vIGxpc3RlbmVycyB0byBhIHByb21pc2Ugd2UndmUgYWxyZWFkeSBzZWVuIChwZXIgcm9vdCBhbmQgbGFuZSkuXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gZmFsc2U7IC8vIEEgY29udGV4dHVhbCB2ZXJzaW9uIG9mIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLiBJdCBpcyBhIHN1cGVyc2V0IG9mXG4gICAgLy8gdGhlIGxhbmVzIHRoYXQgd2Ugc3RhcnRlZCB3b3JraW5nIG9uIGF0IHRoZSByb290LiBXaGVuIHdlIGVudGVyIGEgc3VidHJlZVxuICAgIC8vIHRoYXQgaXMgY3VycmVudGx5IGhpZGRlbiwgd2UgYWRkIHRoZSBsYW5lcyB0aGF0IHdvdWxkIGhhdmUgY29tbWl0dGVkIGlmXG4gICAgLy8gdGhlIGhpZGRlbiB0cmVlIGhhZG4ndCBiZWVuIGRlZmVycmVkLiBUaGlzIGlzIG1vZGlmaWVkIGJ5IHRoZVxuICAgIC8vIEhpZGRlbkNvbnRleHQgbW9kdWxlLlxuICAgIC8vXG4gICAgLy8gTW9zdCB0aGluZ3MgaW4gdGhlIHdvcmsgbG9vcCBzaG91bGQgZGVhbCB3aXRoIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLlxuICAgIC8vIE1vc3QgdGhpbmdzIGluIGJlZ2luL2NvbXBsZXRlIHBoYXNlcyBzaG91bGQgZGVhbCB3aXRoIGVudGFuZ2xlZFJlbmRlckxhbmVzLlxuXG4gICAgdmFyIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJblByb2dyZXNzOyAvLyBBIGZhdGFsIGVycm9yLCBpZiBvbmUgaXMgdGhyb3duXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuICAgIC8vIGluY2x1ZGVzIHVucHJvY2Vzc2VkIHVwZGF0ZXMsIG5vdCB3b3JrIGluIGJhaWxlZCBvdXQgY2hpbGRyZW4uXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSAoKm5vdCogYW4gaW50ZXJsZWF2ZWQgZXZlbnQpLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lczsgLy8gSWYgdGhpcyBsYW5lIHNjaGVkdWxlZCBkZWZlcnJlZCB3b3JrLCB0aGlzIGlzIHRoZSBsYW5lIG9mIHRoZSBkZWZlcnJlZCB0YXNrLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gTm9MYW5lOyAvLyBFcnJvcnMgdGhhdCBhcmUgdGhyb3duIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBudWxsOyAvLyBUaGVzZSBhcmUgZXJyb3JzIHRoYXQgd2UgcmVjb3ZlcmVkIGZyb20gd2l0aG91dCBzdXJmYWNpbmcgdGhlbSB0byB0aGUgVUkuXG4gICAgLy8gV2Ugd2lsbCBsb2cgdGhlbSBvbmNlIHRoZSB0cmVlIGNvbW1pdHMuXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsOyAvLyBUaGUgbW9zdCByZWNlbnQgdGltZSB3ZSBlaXRoZXIgY29tbWl0dGVkIGEgZmFsbGJhY2ssIG9yIHdoZW4gYSBmYWxsYmFjayB3YXNcbiAgICAvLyBmaWxsZWQgaW4gd2l0aCB0aGUgcmVzb2x2ZWQgVUkuIFRoaXMgbGV0cyB1cyB0aHJvdHRsZSB0aGUgYXBwZWFyYW5jZSBvZiBuZXdcbiAgICAvLyBjb250ZW50IGFzIGl0IHN0cmVhbXMgaW4sIHRvIG1pbmltaXplIGphbmsuXG4gICAgLy8gVE9ETzogVGhpbmsgb2YgYSBiZXR0ZXIgbmFtZSBmb3IgdGhpcyB2YXJpYWJsZT9cblxuICAgIHZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbiAgICB2YXIgRkFMTEJBQ0tfVEhST1RUTEVfTVMgPSAzMDA7IC8vIFRoZSBhYnNvbHV0ZSB0aW1lIGZvciB3aGVuIHdlIHNob3VsZCBzdGFydCBnaXZpbmcgdXAgb24gcmVuZGVyaW5nXG4gICAgLy8gbW9yZSBhbmQgcHJlZmVyIENQVSBzdXNwZW5zZSBoZXVyaXN0aWNzIGluc3RlYWQuXG5cbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4gICAgLy8gc3VzcGVuc2UgaGV1cmlzdGljcyBhbmQgb3B0IG91dCBvZiByZW5kZXJpbmcgbW9yZSBjb250ZW50LlxuXG4gICAgdmFyIFJFTkRFUl9USU1FT1VUX01TID0gNTAwO1xuICAgIHZhciB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIHJlc2V0UmVuZGVyVGltZXIoKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93JDEoKSArIFJFTkRFUl9USU1FT1VUX01TO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFRpbWUoKSB7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZTtcbiAgICB9XG4gICAgdmFyIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbiAgICB2YXIgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsOyAvLyBPbmx5IHVzZWQgd2hlbiBlbmFibGVQcm9maWxlck5lc3RlZFVwZGF0ZVNjaGVkdWxlZEhvb2sgaXMgdHJ1ZTtcbiAgICB2YXIgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICB2YXIgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICAgIHZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG4gICAgdmFyIHBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3RzID0gW107XG5cbiAgICB2YXIgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwO1xuICAgIHZhciBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgdmFyIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG4gICAgdmFyIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHZhciBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgdmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xuICAgIHZhciBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgIHZhciByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbiAgICB2YXIgaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMoKSB7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzV29ya0xvb3BTdXNwZW5kZWRPbkRhdGEoKSB7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGF0YTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpIHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZXNcbiAgICAgIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICAgICAgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgcmV0dXJuIFN5bmNMYW5lO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBOb0xhbmVzXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFRoZXNlIGFyZSBub3Qgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuIFRoZVxuICAgICAgICAvLyBvbGQgYmVoYXZpb3IgaXMgdG8gZ2l2ZSB0aGlzIHRoZSBzYW1lIFwidGhyZWFkXCIgKGxhbmVzKSBhc1xuICAgICAgICAvLyB3aGF0ZXZlciBpcyBjdXJyZW50bHkgcmVuZGVyaW5nLiBTbyBpZiB5b3UgY2FsbCBgc2V0U3RhdGVgIG9uIGEgY29tcG9uZW50XG4gICAgICAgIC8vIHRoYXQgaGFwcGVucyBsYXRlciBpbiB0aGUgc2FtZSByZW5kZXIsIGl0IHdpbGwgZmx1c2guIElkZWFsbHksIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBzcGVjaWFsIGNhc2UgYW5kIHRyZWF0IHRoZW0gYXMgaWYgdGhleSBjYW1lIGZyb20gYW5cbiAgICAgICAgLy8gaW50ZXJsZWF2ZWQgZXZlbnQuIFJlZ2FyZGxlc3MsIHRoaXMgcGF0dGVybiBpcyBub3Qgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuXG4gICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgaXMgb25seSBhIGZhbGxiYWNrLiBUaGUgZmxhZyBvbmx5IGV4aXN0cyB1bnRpbCB3ZSBjYW4gcm9sbFxuICAgICAgICAvLyBvdXQgdGhlIHNldFN0YXRlIHdhcm5pbmcsIHNpbmNlIGV4aXN0aW5nIGNvZGUgbWlnaHQgYWNjaWRlbnRhbGx5IHJlbHkgb25cbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgYmVoYXZpb3IuXG4gICAgICAgIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uID0gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCk7XG5cbiAgICAgIGlmICh0cmFuc2l0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgYmF0Y2hDb25maWdUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcblxuICAgICAgICAgIGlmICghYmF0Y2hDb25maWdUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzKSB7XG4gICAgICAgICAgICBiYXRjaENvbmZpZ1RyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmF0Y2hDb25maWdUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmFkZChmaWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYWN0aW9uU2NvcGVMYW5lID0gcGVla0VudGFuZ2xlZEFjdGlvbkxhbmUoKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvblNjb3BlTGFuZSAhPT0gTm9MYW5lIC8vIFdlJ3JlIGluc2lkZSBhbiBhc3luYyBhY3Rpb24gc2NvcGUuIFJldXNlIHRoZSBzYW1lIGxhbmUuXG4gICAgICAgICAgPyBhY3Rpb25TY29wZUxhbmUgLy8gV2UgbWF5IG9yIG1heSBub3QgYmUgaW5zaWRlIGFuIGFzeW5jIGFjdGlvbiBzY29wZS4gSWYgd2UgYXJlLCB0aGlzXG4gICAgICAgICAgOiAvLyBpcyB0aGUgZmlyc3QgdXBkYXRlIGluIHRoYXQgc2NvcGUuIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gZ2V0IGFcbiAgICAgICAgICAgIC8vIGZyZXNoIHRyYW5zaXRpb24gbGFuZS5cbiAgICAgICAgICAgIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpO1xuICAgICAgfSAvLyBVcGRhdGVzIG9yaWdpbmF0aW5nIGluc2lkZSBjZXJ0YWluIFJlYWN0IG1ldGhvZHMsIGxpa2UgZmx1c2hTeW5jLCBoYXZlXG4gICAgICAvLyB0aGVpciBwcmlvcml0eSBzZXQgYnkgdHJhY2tpbmcgaXQgd2l0aCBhIGNvbnRleHQgdmFyaWFibGUuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIG9wYXF1ZSB0eXBlIHJldHVybmVkIGJ5IHRoZSBob3N0IGNvbmZpZyBpcyBpbnRlcm5hbGx5IGEgbGFuZSwgc28gd2UgY2FuXG4gICAgICAvLyB1c2UgdGhhdCBkaXJlY3RseS5cbiAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0eXBlIGNvbnZlcnNpb24gdG8gdGhlIGV2ZW50IHByaW9yaXR5IG1vZHVsZS5cblxuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcblxuICAgICAgaWYgKHVwZGF0ZUxhbmUgIT09IE5vTGFuZSkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTGFuZTtcbiAgICAgIH0gLy8gVGhpcyB1cGRhdGUgb3JpZ2luYXRlZCBvdXRzaWRlIFJlYWN0LiBBc2sgdGhlIGhvc3QgZW52aXJvbm1lbnQgZm9yIGFuXG4gICAgICAvLyBhcHByb3ByaWF0ZSBwcmlvcml0eSwgYmFzZWQgb24gdGhlIHR5cGUgb2YgZXZlbnQuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIG9wYXF1ZSB0eXBlIHJldHVybmVkIGJ5IHRoZSBob3N0IGNvbmZpZyBpcyBpbnRlcm5hbGx5IGEgbGFuZSwgc28gd2UgY2FuXG4gICAgICAvLyB1c2UgdGhhdCBkaXJlY3RseS5cbiAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0eXBlIGNvbnZlcnNpb24gdG8gdGhlIGV2ZW50IHByaW9yaXR5IG1vZHVsZS5cblxuICAgICAgdmFyIGV2ZW50TGFuZSA9IGdldEN1cnJlbnRFdmVudFByaW9yaXR5KCk7XG4gICAgICByZXR1cm4gZXZlbnRMYW5lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGByZXF1ZXN0VXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAgICAgLy8gXCJyZXRyaWVzXCIg4oCUIGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgICAgIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAgICAgLy8gU3BlY2lhbCBjYXNlc1xuICAgICAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gICAgICBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICByZXR1cm4gU3luY0xhbmU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbGFpbU5leHRSZXRyeUxhbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXF1ZXN0RGVmZXJyZWRMYW5lKCkge1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHVzZURlZmVycmVkVmFsdWUgaG9va3MgaW4gdGhlIHNhbWUgcmVuZGVyLCB0aGVcbiAgICAgICAgLy8gdGFza3MgdGhhdCB0aGV5IHNwYXduIHNob3VsZCBhbGwgYmUgYmF0Y2hlZCB0b2dldGhlciwgc28gdGhleSBzaG91bGQgYWxsXG4gICAgICAgIC8vIHJlY2VpdmUgdGhlIHNhbWUgbGFuZS5cbiAgICAgICAgLy8gQ2hlY2sgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IHJlbmRlciB0byBkZWNpZGUgdGhlIHByaW9yaXR5IG9mIHRoZVxuICAgICAgICAvLyBkZWZlcnJlZCB0YXNrLlxuICAgICAgICAvLyBPZmZzY3JlZW5MYW5lIGlzIHVzZWQgZm9yIHByZXJlbmRlcmluZywgYnV0IHdlIGFsc28gdXNlIE9mZnNjcmVlbkxhbmVcbiAgICAgICAgLy8gZm9yIGluY3JlbWVudGFsIGh5ZHJhdGlvbi4gSXQncyBnaXZlbiB0aGUgbG93ZXN0IHByaW9yaXR5IGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGluaXRpYWwgSFRNTCBpcyB0aGUgc2FtZSBhcyB0aGUgZmluYWwgVUkuIEJ1dCB1c2VEZWZlcnJlZFZhbHVlIGR1cmluZ1xuICAgICAgICAvLyBoeWRyYXRpb24gaXMgYW4gZXhjZXB0aW9uIOKAlCB3ZSBuZWVkIHRvIHVwZ3JhZGUgdGhlIFVJIHRvIHRoZSBmaW5hbFxuICAgICAgICAvLyB2YWx1ZS4gU28gaWYgd2UncmUgY3VycmVudGx5IGh5ZHJhdGluZywgd2UgdHJlYXQgaXQgbGlrZSBhIHRyYW5zaXRpb24uXG4gICAgICAgIHZhciBpc1ByZXJlbmRlcmluZyA9XG4gICAgICAgICAgaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkgJiZcbiAgICAgICAgICAhZ2V0SXNIeWRyYXRpbmcoKTtcblxuICAgICAgICBpZiAoaXNQcmVyZW5kZXJpbmcpIHtcbiAgICAgICAgICAvLyBUaGVyZSdzIG9ubHkgb25lIE9mZnNjcmVlbkxhbmUsIHNvIGlmIGl0IGNvbnRhaW5zIGRlZmVycmVkIHdvcmssIHdlXG4gICAgICAgICAgLy8gc2hvdWxkIGp1c3QgcmVzY2hlZHVsZSB1c2luZyB0aGUgc2FtZSBsYW5lLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gT2Zmc2NyZWVuTGFuZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgc3Bhd25lZCBhcyBhIHRyYW5zaXRpb24uXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPSBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpO1xuICAgICAgICB9XG4gICAgICB9IC8vIE1hcmsgdGhlIHBhcmVudCBTdXNwZW5zZSBib3VuZGFyeSBzbyBpdCBrbm93cyB0byBzcGF3biB0aGUgZGVmZXJyZWQgbGFuZS5cblxuICAgICAgdmFyIHN1c3BlbnNlSGFuZGxlciA9IGdldFN1c3BlbnNlSGFuZGxlcigpO1xuXG4gICAgICBpZiAoc3VzcGVuc2VIYW5kbGVyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IEFzIGFuIG9wdGltaXphdGlvbiwgd2Ugc2hvdWxkbid0IGVudGFuZ2xlIHRoZSBsYW5lcyBhdCB0aGUgcm9vdDsgd2VcbiAgICAgICAgLy8gY2FuIGVudGFuZ2xlIHRoZW0gdXNpbmcgdGhlIGJhc2VMYW5lcyBvZiB0aGUgU3VzcGVuc2UgYm91bmRhcnkgaW5zdGVhZC5cbiAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIGlmIHRoZXJlJ3Mgbm8gU3VzcGVuc2UgYm91bmRhcnkuXG4gICAgICAgIHN1c3BlbnNlSGFuZGxlci5mbGFncyB8PSBEaWREZWZlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWVrRGVmZXJyZWRMYW5lKCkge1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCkge1xuICAgICAgICAgIGVycm9yKFwidXNlSW5zZXJ0aW9uRWZmZWN0IG11c3Qgbm90IHNjaGVkdWxlIHVwZGF0ZXMuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIENoZWNrIGlmIHRoZSB3b3JrIGxvb3AgaXMgY3VycmVudGx5IHN1c3BlbmRlZCBhbmQgd2FpdGluZyBmb3IgZGF0YSB0b1xuICAgICAgLy8gZmluaXNoIGxvYWRpbmcuXG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gU3VzcGVuZGVkIHJlbmRlciBwaGFzZVxuICAgICAgICAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGF0YSkgfHwgLy8gU3VzcGVuZGVkIGNvbW1pdCBwaGFzZVxuICAgICAgICByb290LmNhbmNlbFBlbmRpbmdDb21taXQgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICAvLyBUaGUgaW5jb21pbmcgdXBkYXRlIG1pZ2h0IHVuYmxvY2sgdGhlIGN1cnJlbnQgcmVuZGVyLiBJbnRlcnJ1cHQgdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgYXR0ZW1wdCBhbmQgcmVzdGFydCBmcm9tIHRoZSB0b3AuXG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICByb290LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICk7XG4gICAgICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuICAgICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIGxhbmUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vTGFuZXMgJiZcbiAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290XG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgd2FzIGRpc3BhdGNoZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXMgaXMgYSBtaXN0YWtlXG4gICAgICAgIC8vIGlmIHRoZSB1cGRhdGUgb3JpZ2luYXRlcyBmcm9tIHVzZXIgc3BhY2UgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBsb2NhbFxuICAgICAgICAvLyBob29rIHVwZGF0ZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGFuZCBkb24ndCByZWFjaCB0aGlzXG4gICAgICAgIC8vIGZ1bmN0aW9uKSwgYnV0IHRoZXJlIGFyZSBzb21lIGludGVybmFsIFJlYWN0IGZlYXR1cmVzIHRoYXQgdXNlIHRoaXMgYXNcbiAgICAgICAgLy8gYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlIHNlbGVjdGl2ZSBoeWRyYXRpb24uXG4gICAgICAgIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKTsgLy8gVHJhY2sgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgdXBkYXRlLCBzY2hlZHVsZWQgZnJvbSBvdXRzaWRlIHRoZSByZW5kZXIgcGhhc2UuIEZvclxuICAgICAgICAvLyBleGFtcGxlLCBkdXJpbmcgYW4gaW5wdXQgZXZlbnQuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICAgIGFkZEZpYmVyVG9MYW5lc01hcChyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWKGZpYmVyKTtcblxuICAgICAgICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgICAgICAgLy8gUmVjZWl2ZWQgYW4gdXBkYXRlIHRvIGEgdHJlZSB0aGF0J3MgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuIE1hcmtcbiAgICAgICAgICAvLyB0aGF0IHRoZXJlIHdhcyBhbiBpbnRlcmxlYXZlZCB1cGRhdGUgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgICAgICAgLy8gZGVmaW5pdGVseSB3b24ndCBmaW5pc2guIFNpbmNlIHdlIGhhdmUgYSBuZXcgdXBkYXRlLCBsZXQncyBtYXJrIGl0IGFzXG4gICAgICAgICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgICAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcnJpZGUgcGluZ3MgdGhhdCBoYXBwZW4gd2hpbGUgd2UndmVcbiAgICAgICAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbGFuZSA9PT0gU3luY0xhbmUgJiZcbiAgICAgICAgICBleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQgJiZcbiAgICAgICAgICAoZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5KTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgICAgIC8vIGEgYmF0Y2guIFRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgc2NoZWR1bGVVcGRhdGVPbkZpYmVyIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIHNjaGVkdWxlQ2FsbGJhY2tGb3JGaWJlciB0byBwcmVzZXJ2ZSB0aGUgYWJpbGl0eSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgICAgICAvLyB1cGRhdGVzLCB0byBwcmVzZXJ2ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIGxlZ2FjeSBtb2RlLlxuICAgICAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICAgICAgZmx1c2hTeW5jV29ya09uTGVnYWN5Um9vdHNPbmx5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVW5zYWZlQ2xhc3NSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIE9ubHkgY2FsbGVkIGJ5IGNsYXNzIGNvbXBvbmVudHMsXG4gICAgICAvLyB3aGljaCBzcGVjaWFsIChkZXByZWNhdGVkKSBiZWhhdmlvciBmb3IgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlIHByb3BzLlxuICAgICAgcmV0dXJuIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dDtcbiAgICB9IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBldmVyeSBjb25jdXJyZW50IHRhc2ssIGkuZS4gYW55dGhpbmcgdGhhdFxuICAgIC8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cbiAgICBmdW5jdGlvbiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3Qocm9vdCwgZGlkVGltZW91dCkge1xuICAgICAge1xuICAgICAgICByZXNldE5lc3RlZFVwZGF0ZUZsYWcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgICAgIC8vIGluIGNhc2UgdGhleSBzY2hlZHVsZSBhZGRpdGlvbmFsIHdvcmsuXG5cbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICAgICAgdmFyIGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMgPSBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG5cbiAgICAgIGlmIChkaWRGbHVzaFBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHRhc2sgbm9kZSBmb3IgdGhpcyByb290IHdhcyBjaGFuZ2VkLlxuICAgICAgICBpZiAocm9vdC5jYWxsYmFja05vZGUgIT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgICAgIC8vIGBlbnN1cmVSb290SXNTY2hlZHVsZWRgIGJlY2F1c2UgdGhlIGNoZWNrIGFib3ZlIGltcGxpZXMgZWl0aGVyIHRoYXRcbiAgICAgICAgICAvLyB0aGVyZSdzIGEgbmV3IHRhc2ssIG9yIHRoYXQgdGhlcmUncyBubyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIHVzaW5nIHRoZSBmaWVsZHMgc3RvcmVkXG4gICAgICAvLyBvbiB0aGUgcm9vdC5cbiAgICAgIC8vIFRPRE86IFRoaXMgd2FzIGFscmVhZHkgY29tcHV0ZWQgaW4gdGhlIGNhbGxlci4gUGFzcyBpdCBhcyBhbiBhcmd1bWVudC5cblxuICAgICAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKFxuICAgICAgICByb290LFxuICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXNcbiAgICAgICk7XG5cbiAgICAgIGlmIChsYW5lcyA9PT0gTm9MYW5lcykge1xuICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBUaGlzIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGhhcHBlbi5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIFdlIGRpc2FibGUgdGltZS1zbGljaW5nIGluIHNvbWUgY2FzZXM6IGlmIHRoZSB3b3JrIGhhcyBiZWVuIENQVS1ib3VuZFxuICAgICAgLy8gZm9yIHRvbyBsb25nIChcImV4cGlyZWRcIiB3b3JrLCB0byBwcmV2ZW50IHN0YXJ2YXRpb24pLCBvciB3ZSdyZSBpblxuICAgICAgLy8gc3luYy11cGRhdGVzLWJ5LWRlZmF1bHQgbW9kZS5cbiAgICAgIC8vIFRPRE86IFdlIG9ubHkgY2hlY2sgYGRpZFRpbWVvdXRgIGRlZmVuc2l2ZWx5LCB0byBhY2NvdW50IGZvciBhIFNjaGVkdWxlclxuICAgICAgLy8gYnVnIHdlJ3JlIHN0aWxsIGludmVzdGlnYXRpbmcuIE9uY2UgdGhlIGJ1ZyBpbiBTY2hlZHVsZXIgaXMgZml4ZWQsXG4gICAgICAvLyB3ZSBjYW4gcmVtb3ZlIHRoaXMsIHNpbmNlIHdlIHRyYWNrIGV4cGlyYXRpb24gb3Vyc2VsdmVzLlxuXG4gICAgICB2YXIgc2hvdWxkVGltZVNsaWNlID1cbiAgICAgICAgIWluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIGxhbmVzKSAmJlxuICAgICAgICAhaW5jbHVkZXNFeHBpcmVkTGFuZShyb290LCBsYW5lcykgJiZcbiAgICAgICAgIWRpZFRpbWVvdXQ7XG4gICAgICB2YXIgZXhpdFN0YXR1cyA9IHNob3VsZFRpbWVTbGljZVxuICAgICAgICA/IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKVxuICAgICAgICA6IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgICAgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RJblByb2dyZXNzKSB7XG4gICAgICAgIHZhciByZW5kZXJXYXNDb25jdXJyZW50ID0gc2hvdWxkVGltZVNsaWNlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdERpZE5vdENvbXBsZXRlKSB7XG4gICAgICAgICAgICAvLyBUaGUgcmVuZGVyIHVud291bmQgd2l0aG91dCBjb21wbGV0aW5nIHRoZSB0cmVlLiBUaGlzIGhhcHBlbnMgaW4gc3BlY2lhbFxuICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgbmVlZCB0byBleGl0IHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHByb2R1Y2luZyBhXG4gICAgICAgICAgICAvLyBjb25zaXN0ZW50IHRyZWUgb3IgY29tbWl0dGluZy5cbiAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCBOb0xhbmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgcmVuZGVyIGNvbXBsZXRlZC5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgcmVuZGVyIG1heSBoYXZlIHlpZWxkZWQgdG8gYSBjb25jdXJyZW50IGV2ZW50LCBhbmQgaWYgc28sXG4gICAgICAgICAgICAvLyBjb25maXJtIHRoYXQgYW55IG5ld2x5IHJlbmRlcmVkIHN0b3JlcyBhcmUgY29uc2lzdGVudC5cbiAgICAgICAgICAgIC8vIFRPRE86IEl0J3MgcG9zc2libGUgdGhhdCBldmVuIGEgY29uY3VycmVudCByZW5kZXIgbWF5IG5ldmVyIGhhdmUgeWllbGRlZFxuICAgICAgICAgICAgLy8gdG8gdGhlIG1haW4gdGhyZWFkLCBpZiBpdCB3YXMgZmFzdCBlbm91Z2gsIG9yIGlmIGl0IGV4cGlyZWQuIFdlIGNvdWxkXG4gICAgICAgICAgICAvLyBza2lwIHRoZSBjb25zaXN0ZW5jeSBjaGVjayBpbiB0aGF0IGNhc2UsIHRvby5cbiAgICAgICAgICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgIWlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyhmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gQSBzdG9yZSB3YXMgbXV0YXRlZCBpbiBhbiBpbnRlcmxlYXZlZCBldmVudC4gUmVuZGVyIGFnYWluLFxuICAgICAgICAgICAgICAvLyBzeW5jaHJvbm91c2x5LCB0byBibG9jayBmdXJ0aGVyIG11dGF0aW9ucy5cbiAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTsgLy8gV2UgYXNzdW1lIHRoZSB0cmVlIGlzIG5vdyBjb25zaXN0ZW50IGJlY2F1c2Ugd2UgZGlkbid0IHlpZWxkIHRvIGFueVxuICAgICAgICAgICAgICAvLyBjb25jdXJyZW50IGV2ZW50cy5cblxuICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ID0gZmFsc2U7IC8vIE5lZWQgdG8gY2hlY2sgdGhlIGV4aXQgc3RhdHVzIGFnYWluLlxuXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSAvLyBDaGVjayBpZiBzb21ldGhpbmcgdGhyZXdcblxuICAgICAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICAgICAgICAgIHZhciBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMgPSBsYW5lcztcbiAgICAgICAgICAgICAgdmFyIGVycm9yUmV0cnlMYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKFxuICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKGVycm9yUmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgICAgIGxhbmVzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgICAgICAgICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgTm9MYW5lKTtcbiAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICAgICAgICB0aHJvdyBmYXRhbEVycm9yO1xuICAgICAgICAgICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gVGhlIG5leHQgc3RlcCBpcyBlaXRoZXIgdG8gY29tbWl0IGl0LFxuICAgICAgICAgICAgLy8gb3IsIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHdhaXQgdG8gY29tbWl0IGl0IGFmdGVyIGEgdGltZW91dC5cblxuICAgICAgICAgICAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgICAgICAgICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgZmluaXNoZWRXb3JrLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICByZXR1cm4gZ2V0Q29udGludWF0aW9uRm9yUm9vdChyb290LCBvcmlnaW5hbENhbGxiYWNrTm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3ZlckZyb21Db25jdXJyZW50RXJyb3IoXG4gICAgICByb290LFxuICAgICAgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzLFxuICAgICAgZXJyb3JSZXRyeUxhbmVzXG4gICAgKSB7XG4gICAgICAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLCBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbFxuICAgICAgLy8gYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG4gICAgICAvLyBCZWZvcmUgcmVuZGVyaW5nIGFnYWluLCBzYXZlIHRoZSBlcnJvcnMgZnJvbSB0aGUgcHJldmlvdXMgYXR0ZW1wdC5cbiAgICAgIHZhciBlcnJvcnNGcm9tRmlyc3RBdHRlbXB0ID0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycztcbiAgICAgIHZhciB3YXNSb290RGVoeWRyYXRlZCA9IGlzUm9vdERlaHlkcmF0ZWQocm9vdCk7XG5cbiAgICAgIGlmICh3YXNSb290RGVoeWRyYXRlZCkge1xuICAgICAgICAvLyBUaGUgc2hlbGwgZmFpbGVkIHRvIGh5ZHJhdGUuIFNldCBhIGZsYWcgdG8gZm9yY2UgYSBjbGllbnQgcmVuZGVyaW5nXG4gICAgICAgIC8vIGR1cmluZyB0aGUgbmV4dCBhdHRlbXB0LiBUbyBkbyB0aGlzLCB3ZSBjYWxsIHByZXBhcmVGcmVzaFN0YWNrIG5vd1xuICAgICAgICAvLyB0byBjcmVhdGUgdGhlIHJvb3Qgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gVGhpcyBpcyBhIGJpdCB3ZWlyZCBpbiB0ZXJtc1xuICAgICAgICAvLyBvZiBmYWN0b3JpbmcsIGJlY2F1c2UgaXQgcmVsaWVzIG9uIHJlbmRlclJvb3RTeW5jIG5vdCBjYWxsaW5nXG4gICAgICAgIC8vIHByZXBhcmVGcmVzaFN0YWNrIGFnYWluIGluIHRoZSBjYWxsIGJlbG93LCB3aGljaCBoYXBwZW5zIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIHJvb3QgYW5kIGxhbmVzIGhhdmVuJ3QgY2hhbmdlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVE9ETzogSSB0aGluayB3aGF0IHdlIHNob3VsZCBkbyBpcyBzZXQgRm9yY2VDbGllbnRSZW5kZXIgaW5zaWRlXG4gICAgICAgIC8vIHRocm93RXhjZXB0aW9uLCBsaWtlIHdlIGRvIGZvciBuZXN0ZWQgU3VzcGVuc2UgYm91bmRhcmllcy4gVGhlIHJlYXNvblxuICAgICAgICAvLyBpdCdzIGhlcmUgaW5zdGVhZCBpcyBzbyB3ZSBjYW4gc3dpdGNoIHRvIHRoZSBzeW5jaHJvbm91cyB3b3JrIGxvb3AsIHRvby5cbiAgICAgICAgLy8gU29tZXRoaW5nIHRvIGNvbnNpZGVyIGZvciBhIGZ1dHVyZSByZWZhY3Rvci5cbiAgICAgICAgdmFyIHJvb3RXb3JrSW5Qcm9ncmVzcyA9IHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGVycm9yUmV0cnlMYW5lcyk7XG4gICAgICAgIHJvb3RXb3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBGb3JjZUNsaWVudFJlbmRlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgZXJyb3JIeWRyYXRpbmdDb250YWluZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGVycm9yUmV0cnlMYW5lcyk7XG5cbiAgICAgIGlmIChleGl0U3RhdHVzICE9PSBSb290RXJyb3JlZCkge1xuICAgICAgICAvLyBTdWNjZXNzZnVsbHkgZmluaXNoZWQgcmVuZGVyaW5nIG9uIHJldHJ5XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgJiYgIXdhc1Jvb3REZWh5ZHJhdGVkKSB7XG4gICAgICAgICAgLy8gRHVyaW5nIHRoZSBzeW5jaHJvbm91cyByZW5kZXIsIHdlIGF0dGFjaGVkIGFkZGl0aW9uYWwgcGluZyBsaXN0ZW5lcnMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBoaWdobHkgc3VnZ2VzdGl2ZSBvZiBhbiB1bmNhY2hlZCBwcm9taXNlICh0aG91Z2ggaXQncyBub3QgdGhlXG4gICAgICAgICAgLy8gb25seSByZWFzb24gdGhpcyB3b3VsZCBoYXBwZW4pLiBJZiBpdCB3YXMgYW4gdW5jYWNoZWQgcHJvbWlzZSwgdGhlblxuICAgICAgICAgIC8vIGl0IG1heSBoYXZlIG1hc2tlZCBhIGRvd25zdHJlYW0gZXJyb3IgZnJvbSBvY3VycmluZyB3aXRob3V0IGFjdHVhbGx5XG4gICAgICAgICAgLy8gZml4aW5nIGl0LiBFeGFtcGxlOlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gICAgdXNlKFByb21pc2UucmVzb2x2ZSgndW5jYWNoZWQnKSlcbiAgICAgICAgICAvLyAgICB0aHJvdyBuZXcgRXJyb3IoJ09vcHMhJylcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGVyZSdzIGEgY29uZmxpY3QgYmV0d2VlbiBibG9ja2luZyBwb3RlbnRpYWxcbiAgICAgICAgICAvLyBjb25jdXJyZW50IGRhdGEgcmFjZXMgYW5kIHVud3JhcHBpbmcgdW5jYWNoZWQgcHJvbWlzZSB2YWx1ZXMuIFdlXG4gICAgICAgICAgLy8gaGF2ZSB0byBjaG9vc2Ugb25lIG9yIHRoZSBvdGhlci4gQmVjYXVzZSB0aGUgZGF0YSByYWNlIHJlY292ZXJ5IGlzXG4gICAgICAgICAgLy8gYSBsYXN0IGRpdGNoIGVmZm9ydCwgd2UnbGwgZGlzYWJsZSBpdC5cbiAgICAgICAgICByb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgICAgIHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMsXG4gICAgICAgICAgICBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXNcbiAgICAgICAgICApOyAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgYW5kIGZvcmNlIGl0IHRvIHJlc3RhcnQuIE9uY2VcbiAgICAgICAgICAvLyB0aGVzZSBsYW5lcyBmaW5pc2ggc3VjY2Vzc2Z1bGx5LCB3ZSdsbCByZS1lbmFibGUgdGhlIGVycm9yIHJlY292ZXJ5XG4gICAgICAgICAgLy8gbWVjaGFuaXNtIGZvciBzdWJzZXF1ZW50IHVwZGF0ZXMuXG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyB8PSBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXM7XG4gICAgICAgICAgcmV0dXJuIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gICAgICAgIH0gLy8gVGhlIGVycm9ycyBmcm9tIHRoZSBmYWlsZWQgZmlyc3QgYXR0ZW1wdCBoYXZlIGJlZW4gcmVjb3ZlcmVkLiBBZGRcbiAgICAgICAgLy8gdGhlbSB0byB0aGUgY29sbGVjdGlvbiBvZiByZWNvdmVyYWJsZSBlcnJvcnMuIFdlJ2xsIGxvZyB0aGVtIGluIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuXG5cbiAgICAgICAgdmFyIGVycm9yc0Zyb21TZWNvbmRBdHRlbXB0ID0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JzRnJvbUZpcnN0QXR0ZW1wdDsgLy8gVGhlIGVycm9ycyBmcm9tIHRoZSBzZWNvbmQgYXR0ZW1wdCBzaG91bGQgYmUgcXVldWVkIGFmdGVyIHRoZSBlcnJvcnNcbiAgICAgICAgLy8gZnJvbSB0aGUgZmlyc3QgYXR0ZW1wdCwgdG8gcHJlc2VydmUgdGhlIGNhdXNhbCBzZXF1ZW5jZS5cblxuICAgICAgICBpZiAoZXJyb3JzRnJvbVNlY29uZEF0dGVtcHQgIT09IG51bGwpIHtcbiAgICAgICAgICBxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGVycm9yc0Zyb21TZWNvbmRBdHRlbXB0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXhpdFN0YXR1cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGVycm9ycykge1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID09PSBudWxsKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgIGVycm9yc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgZmluaXNoZWRXb3JrLCBsYW5lcykge1xuICAgICAgLy8gVE9ETzogVGhlIGZhY3QgdGhhdCBtb3N0IG9mIHRoZXNlIGJyYW5jaGVzIGFyZSBpZGVudGljYWwgc3VnZ2VzdHMgdGhhdCBzb21lXG4gICAgICAvLyBvZiB0aGUgZXhpdCBzdGF0dXNlcyBhcmUgbm90IGJlc3QgbW9kZWxlZCBhcyBleGl0IHN0YXR1c2VzIGFuZCBzaG91bGQgYmVcbiAgICAgIC8vIHRyYWNrZWQgb3J0aG9nb25hbGx5LlxuICAgICAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgICAgIGNhc2UgUm9vdEluUHJvZ3Jlc3M6XG4gICAgICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk6IHtcbiAgICAgICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgdHJhbnNpdGlvbiwgc28gd2Ugc2hvdWxkIGV4aXQgd2l0aG91dCBjb21taXR0aW5nIGFcbiAgICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGFuZCB3aXRob3V0IHNjaGVkdWxpbmcgYSB0aW1lb3V0LiBEZWxheSBpbmRlZmluaXRlbHlcbiAgICAgICAgICAgIC8vIHVudGlsIHdlIHJlY2VpdmUgbW9yZSBkYXRhLlxuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IC8vIENvbW1pdCB0aGUgcGxhY2Vob2xkZXIuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICAgIGNhc2UgUm9vdFN1c3BlbmRlZDpcbiAgICAgICAgY2FzZSBSb290Q29tcGxldGVkOiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biByb290IGV4aXQgc3RhdHVzLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgLy8gV2UncmUgaW5zaWRlIGFuIGBhY3RgIHNjb3BlLiBDb21taXQgaW1tZWRpYXRlbHkuXG4gICAgICAgIGNvbW1pdFJvb3QoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykgJiYgZXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCkge1xuICAgICAgICAgIC8vIFRoaXMgcmVuZGVyIG9ubHkgaW5jbHVkZWQgcmV0cmllcywgbm8gdXBkYXRlcy4gVGhyb3R0bGUgY29tbWl0dGluZ1xuICAgICAgICAgIC8vIHJldHJpZXMgc28gdGhhdCB3ZSBkb24ndCBzaG93IHRvbyBtYW55IGxvYWRpbmcgc3RhdGVzIHRvbyBxdWlja2x5LlxuICAgICAgICAgIHZhciBtc1VudGlsVGltZW91dCA9XG4gICAgICAgICAgICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLSBub3ckMSgpOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuICAgICAgICAgIGlmIChtc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICAgICAgICAgICAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcblxuICAgICAgICAgICAgaWYgKG5leHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgICAvLyBUaGVyZSdzIGFkZGl0aW9uYWwgd29yayB3ZSBjYW4gZG8gb24gdGhpcyByb290LiBXZSBtaWdodCBhcyB3ZWxsXG4gICAgICAgICAgICAgIC8vIGF0dGVtcHQgdG8gd29yayBvbiB0aGF0IHdoaWxlIHdlJ3JlIHN1c3BlbmRlZC5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSAvLyBUaGUgcmVuZGVyIGlzIHN1c3BlbmRlZCwgaXQgaGFzbid0IHRpbWVkIG91dCwgYW5kIHRoZXJlJ3Mgbm9cbiAgICAgICAgICAgIC8vIGxvd2VyIHByaW9yaXR5IHdvcmsgdG8gZG8uIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gYXJyaXZlLlxuICAgICAgICAgICAgLy8gVE9ETzogQ29tYmluZSByZXRyeSB0aHJvdHRsaW5nIHdpdGggU3VzcGVuc2V5IGNvbW1pdHMuIFJpZ2h0IG5vdyB0aGV5XG4gICAgICAgICAgICAvLyBydW4gb25lIGFmdGVyIHRoZSBvdGhlci5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KFxuICAgICAgICAgICAgICBjb21taXRSb290V2hlblJlYWR5LmJpbmQoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIG1zVW50aWxUaW1lb3V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1pdFJvb3RXaGVuUmVhZHkoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdFJvb3RXaGVuUmVhZHkoXG4gICAgICByb290LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICB0cmFuc2l0aW9ucyxcbiAgICAgIGxhbmVzLFxuICAgICAgc3Bhd25lZExhbmVcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IENvbWJpbmUgcmV0cnkgdGhyb3R0bGluZyB3aXRoIFN1c3BlbnNleSBjb21taXRzLiBSaWdodCBub3cgdGhleSBydW5cbiAgICAgIC8vIG9uZSBhZnRlciB0aGUgb3RoZXIuXG4gICAgICBpZiAoaW5jbHVkZXNPbmx5Tm9uVXJnZW50TGFuZXMobGFuZXMpKSB7XG4gICAgICAgIC8vIHRoZSBzdXNwZW5zZXkgcmVzb3VyY2VzLiBUaGUgcmVuZGVyZXIgaXMgcmVzcG9uc2libGUgZm9yIGFjY3VtdWxhdGluZ1xuICAgICAgICAvLyBhbGwgdGhlIGxvYWQgZXZlbnRzLiBUaGlzIGFsbCBoYXBwZW5zIGluIGEgc2luZ2xlIHN5bmNocm9ub3VzXG4gICAgICAgIC8vIHRyYW5zYWN0aW9uLCBzbyBpdCB0cmFjayBzdGF0ZSBpbiBpdHMgb3duIG1vZHVsZSBzY29wZS5cblxuICAgICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpbmlzaGVkV29yayk7IC8vIEF0IHRoZSBlbmQsIGFzayB0aGUgcmVuZGVyZXIgaWYgaXQncyByZWFkeSB0byBjb21taXQsIG9yIGlmIHdlIHNob3VsZFxuICAgICAgICAvLyBzdXNwZW5kLiBJZiBpdCdzIG5vdCByZWFkeSwgaXQgd2lsbCByZXR1cm4gYSBjYWxsYmFjayB0byBzdWJzY3JpYmUgdG9cbiAgICAgICAgLy8gYSByZWFkeSBldmVudC5cblxuICAgICAgICB2YXIgc2NoZWR1bGVQZW5kaW5nQ29tbWl0ID0gd2FpdEZvckNvbW1pdFRvQmVSZWFkeSgpO1xuXG4gICAgICAgIGlmIChzY2hlZHVsZVBlbmRpbmdDb21taXQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBOT1RFOiB3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5IHJldHVybnMgYSBzdWJzY3JpYmUgZnVuY3Rpb24gc28gdGhhdCB3ZVxuICAgICAgICAgIC8vIG9ubHkgYWxsb2NhdGUgYSBmdW5jdGlvbiBpZiB0aGUgY29tbWl0IGlzbid0IHJlYWR5IHlldC4gVGhlIG90aGVyXG4gICAgICAgICAgLy8gcGF0dGVybiB3b3VsZCBiZSB0byBhbHdheXMgcGFzcyBhIGNhbGxiYWNrIHRvIHdhaXRGb3JDb21taXRUb0JlUmVhZHkuXG4gICAgICAgICAgLy8gTm90IHlldCByZWFkeSB0byBjb21taXQuIERlbGF5IHRoZSBjb21taXQgdW50aWwgdGhlIHJlbmRlcmVyIG5vdGlmaWVzXG4gICAgICAgICAgLy8gdXMgdGhhdCBpdCdzIHJlYWR5LiBUaGlzIHdpbGwgYmUgY2FuY2VsZWQgaWYgd2Ugc3RhcnQgd29yayBvbiB0aGVcbiAgICAgICAgICAvLyByb290IGFnYWluLlxuICAgICAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IHNjaGVkdWxlUGVuZGluZ0NvbW1pdChcbiAgICAgICAgICAgIGNvbW1pdFJvb3QuYmluZChudWxsLCByb290LCByZWNvdmVyYWJsZUVycm9ycywgdHJhbnNpdGlvbnMpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgc3Bhd25lZExhbmUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBPdGhlcndpc2UsIGNvbW1pdCBpbW1lZGlhdGVseS5cblxuICAgICAgY29tbWl0Um9vdChyb290LCByZWNvdmVyYWJsZUVycm9ycywgdHJhbnNpdGlvbnMsIHNwYXduZWRMYW5lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1JlbmRlckNvbnNpc3RlbnRXaXRoRXh0ZXJuYWxTdG9yZXMoZmluaXNoZWRXb3JrKSB7XG4gICAgICAvLyBTZWFyY2ggdGhlIHJlbmRlcmVkIHRyZWUgZm9yIGV4dGVybmFsIHN0b3JlIHJlYWRzLCBhbmQgY2hlY2sgd2hldGhlciB0aGVcbiAgICAgIC8vIHN0b3JlcyB3ZXJlIG11dGF0ZWQgaW4gYSBjb25jdXJyZW50IGV2ZW50LiBJbnRlbnRpb25hbGx5IHVzaW5nIGFuIGl0ZXJhdGl2ZVxuICAgICAgLy8gbG9vcCBpbnN0ZWFkIG9mIHJlY3Vyc2lvbiBzbyB3ZSBjYW4gZXhpdCBlYXJseS5cbiAgICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAobm9kZS5mbGFncyAmIFN0b3JlQ29uc2lzdGVuY3kpIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBub2RlLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgY2hlY2tzID0gdXBkYXRlUXVldWUuc3RvcmVzO1xuXG4gICAgICAgICAgICBpZiAoY2hlY2tzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoZWNrID0gY2hlY2tzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBnZXRTbmFwc2hvdCA9IGNoZWNrLmdldFNuYXBzaG90O1xuICAgICAgICAgICAgICAgIHZhciByZW5kZXJlZFZhbHVlID0gY2hlY2sudmFsdWU7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFvYmplY3RJcyhnZXRTbmFwc2hvdCgpLCByZW5kZXJlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCBhbiBpbmNvbnNpc3RlbnQgc3RvcmUuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgLy8gSWYgYGdldFNuYXBzaG90YCB0aHJvd3MsIHJldHVybiBgZmFsc2VgLiBUaGlzIHdpbGwgc2NoZWR1bGVcbiAgICAgICAgICAgICAgICAgIC8vIGEgcmUtcmVuZGVyLCBhbmQgdGhlIGVycm9yIHdpbGwgYmUgcmV0aHJvd24gZHVyaW5nIHJlbmRlci5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgICAgIGlmIChub2RlLnN1YnRyZWVGbGFncyAmIFN0b3JlQ29uc2lzdGVuY3kgJiYgY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBjaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBjaGlsZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgfSAvLyBGbG93IGRvZXNuJ3Qga25vdyB0aGlzIGlzIHVucmVhY2hhYmxlLCBidXQgZXNsaW50IGRvZXNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcywgc3Bhd25lZExhbmUpIHtcbiAgICAgIC8vIFdoZW4gc3VzcGVuZGluZywgd2Ugc2hvdWxkIGFsd2F5cyBleGNsdWRlIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgb3IgKG1vcmVcbiAgICAgIC8vIHJhcmVseSwgc2luY2Ugd2UgdHJ5IHRvIGF2b2lkIGl0KSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgLy8gVE9ETzogTG9sIG1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIGZhY3RvciB0aGlzIGJlc2lkZXMgdGhpc1xuICAgICAgLy8gb2Jub3hpb3VzbHkgbmFtZWQgZnVuY3Rpb24gOilcbiAgICAgIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoXG4gICAgICAgIHN1c3BlbmRlZExhbmVzLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lc1xuICAgICAgKTtcbiAgICAgIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoXG4gICAgICAgIHN1c3BlbmRlZExhbmVzLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lc1xuICAgICAgKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgc3VzcGVuZGVkTGFuZXMsIHNwYXduZWRMYW5lKTtcbiAgICB9IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4gICAgLy8gdGhyb3VnaCBTY2hlZHVsZXJcblxuICAgIGZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBsYW5lcykge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaWRGbHVzaFBhc3NpdmVFZmZlY3RzID0gZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuXG4gICAgICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAvLyBJZiBwYXNzaXZlIGVmZmVjdHMgd2VyZSBmbHVzaGVkLCBleGl0IHRvIHRoZSBvdXRlciB3b3JrIGxvb3AgaW4gdGhlIHJvb3RcbiAgICAgICAgLy8gc2NoZWR1bGVyLCBzbyB3ZSBjYW4gcmVjb21wdXRlIHRoZSBwcmlvcml0eS5cbiAgICAgICAgLy8gVE9ETzogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGlzIGBlbnN1cmVSb290SXNTY2hlZHVsZWRgIGNhbGwgYmVjYXVzZVxuICAgICAgICAvLyB0aGlzIHBhdGggaXMgb25seSByZWFjaGFibGUgaWYgdGhlIHJvb3QgaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZSBzY2hlZHVsZS5cbiAgICAgICAgLy8gSSdtIGluY2x1ZGluZyBpdCBvbmx5IGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBleGl0IHBvaW50cyBmcm9tXG4gICAgICAgIC8vIHRoaXMgZnVuY3Rpb24uIENhbiBhZGRyZXNzIGluIGEgc3Vic2VxdWVudCByZWZhY3Rvci5cbiAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBzeW5jTmVzdGVkVXBkYXRlRmxhZygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgICAgaWYgKHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmIGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICAgIC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAgICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAgICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAgICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cbiAgICAgICAgdmFyIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyA9IGxhbmVzO1xuICAgICAgICB2YXIgZXJyb3JSZXRyeUxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3IoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZXJyb3JSZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbGFuZXMgPSBlcnJvclJldHJ5TGFuZXM7XG4gICAgICAgICAgZXhpdFN0YXR1cyA9IHJlY292ZXJGcm9tQ29uY3VycmVudEVycm9yKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyxcbiAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIE5vTGFuZSk7XG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3REaWROb3RDb21wbGV0ZSkge1xuICAgICAgICAvLyBUaGUgcmVuZGVyIHVud291bmQgd2l0aG91dCBjb21wbGV0aW5nIHRoZSB0cmVlLiBUaGlzIGhhcHBlbnMgaW4gc3BlY2lhbFxuICAgICAgICAvLyBjYXNlcyB3aGVyZSBuZWVkIHRvIGV4aXQgdGhlIGN1cnJlbnQgcmVuZGVyIHdpdGhvdXQgcHJvZHVjaW5nIGFcbiAgICAgICAgLy8gY29uc2lzdGVudCB0cmVlIG9yIGNvbW1pdHRpbmcuXG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSk7XG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBCZWNhdXNlIHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgd2VcbiAgICAgIC8vIHdpbGwgY29tbWl0IGl0IGV2ZW4gaWYgc29tZXRoaW5nIHN1c3BlbmRlZC5cblxuICAgICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gICAgICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgICAgY29tbWl0Um9vdChcbiAgICAgICAgcm9vdCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICApOyAvLyBCZWZvcmUgZXhpdGluZywgbWFrZSBzdXJlIHRoZXJlJ3MgYSBjYWxsYmFjayBzY2hlZHVsZWQgZm9yIHRoZSBuZXh0XG4gICAgICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXhlY3V0aW9uQ29udGV4dCgpIHtcbiAgICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhmbiwgYSkge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmbihhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDsgLy8gSWYgdGhlcmUgd2VyZSBsZWdhY3kgc3luYyB1cGRhdGVzLCBmbHVzaCB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIG91dGVyXG4gICAgICAgIC8vIG1vc3QgYmF0Y2hlZFVwZGF0ZXMtbGlrZSBtZXRob2QuXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiAvLyBUcmVhdCBgYWN0YCBhcyBpZiBpdCdzIGluc2lkZSBgYmF0Y2hlZFVwZGF0ZXNgLCBldmVuIGluIGxlZ2FjeSBtb2RlLlxuICAgICAgICAgICFSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5XG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgICBmbHVzaFN5bmNXb3JrT25MZWdhY3lSb290c09ubHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBXYXJuaW5nLCB0aGlzIG9wdHMtb3V0IG9mIGNoZWNraW5nIHRoZSBmdW5jdGlvbiBib2R5LlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbiAgICBmdW5jdGlvbiBmbHVzaFN5bmMoZm4pIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBmbHVzaCBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuICAgICAgLy8gbmV4dCBldmVudCwgbm90IGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgIGlmIChcbiAgICAgICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwgJiZcbiAgICAgICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMudGFnID09PSBMZWdhY3lSb290ICYmXG4gICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dFxuICAgICAgKSB7XG4gICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuXG4gICAgICAgIGlmIChmbikge1xuICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gaWYgYmF0Y2hlZFVwZGF0ZXMgaXMgaGlnaGVyIHVwXG4gICAgICAgIC8vIHRoZSBzdGFjay5cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT1cbiAgICAgICAgICBOb0NvbnRleHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZmx1c2hTeW5jV29ya09uQWxsUm9vdHMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBoaWRkZW4gc3VidHJlZS4gVGhlIHN0YWNrIGxvZ2ljIGlzIG1hbmFnZWQgdGhlcmUgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHlcbiAgICAvLyBwbGFjZSB0aGF0IGV2ZXIgbW9kaWZpZXMgaXQuIFdoaWNoIG1vZHVsZSBpdCBsaXZlcyBpbiBkb2Vzbid0IG1hdHRlciBmb3JcbiAgICAvLyBwZXJmb3JtYW5jZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgaW5saW5lZCByZWdhcmRsZXNzXG5cbiAgICBmdW5jdGlvbiBzZXRFbnRhbmdsZWRSZW5kZXJMYW5lcyhuZXdFbnRhbmdsZWRSZW5kZXJMYW5lcykge1xuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBuZXdFbnRhbmdsZWRSZW5kZXJMYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RW50YW5nbGVkUmVuZGVyTGFuZXMoKSB7XG4gICAgICByZXR1cm4gZW50YW5nbGVkUmVuZGVyTGFuZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCkge1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSByZXR1cm47XG4gICAgICB2YXIgaW50ZXJydXB0ZWRXb3JrO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IE5vdFN1c3BlbmRlZCkge1xuICAgICAgICAvLyBOb3JtYWwgY2FzZS4gV29yay1pbi1wcm9ncmVzcyBoYXNuJ3Qgc3RhcnRlZCB5ZXQuIFVud2luZCBhbGxcbiAgICAgICAgLy8gaXRzIHBhcmVudHMuXG4gICAgICAgIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdvcmstaW4tcHJvZ3Jlc3MgaXMgaW4gc3VzcGVuZGVkIHN0YXRlLiBSZXNldCB0aGUgd29yayBsb29wIGFuZCB1bndpbmRcbiAgICAgICAgLy8gYm90aCB0aGUgc3VzcGVuZGVkIGZpYmVyIGFuZCBhbGwgaXRzIHBhcmVudHMuXG4gICAgICAgIHJlc2V0U3VzcGVuZGVkV29ya0xvb3BPblVud2luZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gaW50ZXJydXB0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICAgICAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICAgICAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuXG4gICAgICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgICAgIC8vIFRoZSByb290IHByZXZpb3VzIHN1c3BlbmRlZCBhbmQgc2NoZWR1bGVkIGEgdGltZW91dCB0byBjb21taXQgYSBmYWxsYmFja1xuICAgICAgICAvLyBzdGF0ZS4gTm93IHRoYXQgd2UgaGF2ZSBhZGRpdGlvbmFsIHdvcmssIGNhbmNlbCB0aGUgdGltZW91dC5cbiAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcblxuICAgICAgICBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2FuY2VsUGVuZGluZ0NvbW1pdCA9IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdDtcblxuICAgICAgaWYgKGNhbmNlbFBlbmRpbmdDb21taXQgIT09IG51bGwpIHtcbiAgICAgICAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbDtcbiAgICAgICAgY2FuY2VsUGVuZGluZ0NvbW1pdCgpO1xuICAgICAgfVxuXG4gICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gICAgICB2YXIgcm9vdFdvcmtJblByb2dyZXNzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gcm9vdFdvcmtJblByb2dyZXNzO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSBmYWxzZTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5Qcm9ncmVzcztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gTm9MYW5lO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IG51bGw7IC8vIEdldCB0aGUgbGFuZXMgdGhhdCBhcmUgZW50YW5nbGVkIHdpdGggd2hhdGV2ZXIgd2UncmUgYWJvdXQgdG8gcmVuZGVyLiBXZVxuICAgICAgLy8gdHJhY2sgdGhlc2Ugc2VwYXJhdGVseSBzbyB3ZSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHByaW9yaXR5IG9mIHRoZSByZW5kZXJcbiAgICAgIC8vIHRhc2sgZnJvbSB0aGUgcHJpb3JpdHkgb2YgdGhlIGxhbmVzIGl0IGlzIGVudGFuZ2xlZCB3aXRoLiBGb3IgZXhhbXBsZSwgYVxuICAgICAgLy8gdHJhbnNpdGlvbiBtYXkgbm90IGJlIGFsbG93ZWQgdG8gZmluaXNoIHVubGVzcyBpdCBpbmNsdWRlcyB0aGUgU3luYyBsYW5lLFxuICAgICAgLy8gd2hpY2ggaXMgY3VycmVudGx5IHN1c3BlbmRlZC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVuZGVyIHRoZSBUcmFuc2l0aW9uXG4gICAgICAvLyBhbmQgU3luYyBsYW5lIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgYXQgVHJhbnNpdGlvbiBwcmlvcml0eSwgYmVjYXVzZSB0aGVcbiAgICAgIC8vIFN5bmMgbGFuZSBhbHJlYWR5IHN1c3BlbmRlZC5cblxuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBnZXRFbnRhbmdsZWRMYW5lcyhyb290LCBsYW5lcyk7XG4gICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG5cbiAgICAgIHtcbiAgICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm9vdFdvcmtJblByb2dyZXNzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0U3VzcGVuZGVkV29ya0xvb3BPblVud2luZChmaWJlcikge1xuICAgICAgLy8gUmVzZXQgbW9kdWxlLWxldmVsIHN0YXRlIHRoYXQgd2FzIHNldCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc09uVW53aW5kKGZpYmVyKTtcbiAgICAgIHJlc2V0Q2hpbGRSZWNvbmNpbGVyT25VbndpbmQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSkge1xuICAgICAgLy8gQSBjb21wb25lbnQgdGhyZXcgYW4gZXhjZXB0aW9uLiBVc3VhbGx5IHRoaXMgaXMgYmVjYXVzZSBpdCBzdXNwZW5kZWQsIGJ1dFxuICAgICAgLy8gaXQgYWxzbyBpbmNsdWRlcyByZWd1bGFyIHByb2dyYW0gZXJyb3JzLlxuICAgICAgLy9cbiAgICAgIC8vIFdlJ3JlIGVpdGhlciBnb2luZyB0byB1bndpbmQgdGhlIHN0YWNrIHRvIHNob3cgYSBTdXNwZW5zZSBvciBlcnJvclxuICAgICAgLy8gYm91bmRhcnksIG9yIHdlJ3JlIGdvaW5nIHRvIHJlcGxheSB0aGUgY29tcG9uZW50IGFnYWluLiBMaWtlIGFmdGVyIGFcbiAgICAgIC8vIHByb21pc2UgcmVzb2x2ZXMuXG4gICAgICAvL1xuICAgICAgLy8gVW50aWwgd2UgZGVjaWRlIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8gdW53aW5kIG9yIHJlcGxheSwgd2Ugc2hvdWxkIHByZXNlcnZlXG4gICAgICAvLyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgd29yayBsb29wIHdpdGhvdXQgcmVzZXR0aW5nIGFueXRoaW5nLlxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIGRvIGRlY2lkZSB0byB1bndpbmQgdGhlIHN0YWNrLCBtb2R1bGUtbGV2ZWwgdmFyaWFibGVzIHdpbGwgYmUgcmVzZXRcbiAgICAgIC8vIGluIHJlc2V0U3VzcGVuZGVkV29ya0xvb3BPblVud2luZC5cbiAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSByZXNldCBpbW1lZGlhdGVseSBiZWNhdXNlIHRoZXkncmUgb25seSBzdXBwb3NlZCB0byBiZSBzZXRcbiAgICAgIC8vIHdoZW4gUmVhY3QgaXMgZXhlY3V0aW5nIHVzZXIgY29kZS5cbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgaWYgKHRocm93blZhbHVlID09PSBTdXNwZW5zZUV4Y2VwdGlvbikge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCB0eXBlIG9mIGV4Y2VwdGlvbiB1c2VkIGZvciBTdXNwZW5zZS4gRm9yIGhpc3RvcmljYWxcbiAgICAgICAgLy8gcmVhc29ucywgdGhlIHJlc3Qgb2YgdGhlIFN1c3BlbnNlIGltcGxlbWVudGF0aW9uIGV4cGVjdHMgdGhlIHRocm93biB2YWx1ZVxuICAgICAgICAvLyB0byBiZSBhIHRoZW5hYmxlLCBiZWNhdXNlIGJlZm9yZSBgdXNlYCBleGlzdGVkIHRoYXQgd2FzIHRoZSAodW5zdGFibGUpXG4gICAgICAgIC8vIEFQSSBmb3Igc3VzcGVuZGluZy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgY2FuIGNoYW5nZSBsYXRlciwgb25jZSB3ZVxuICAgICAgICAvLyBkZXByZWNhdGUgdGhlIG9sZCBBUEkgaW4gZmF2b3Igb2YgYHVzZWAuXG4gICAgICAgIHRocm93blZhbHVlID0gZ2V0U3VzcGVuZGVkVGhlbmFibGUoKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgIHNob3VsZFJlbWFpbk9uUHJldmlvdXNTY3JlZW4oKSAmJiAvLyBDaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcGVuZGluZyB1cGRhdGVzIHRoYXQgbWlnaHQgcG9zc2libHkgdW5ibG9jayB0aGlzXG4gICAgICAgICAgLy8gY29tcG9uZW50IGZyb20gc3VzcGVuZGluZy4gVGhpcyBtaXJyb3JzIHRoZSBjaGVjayBpblxuICAgICAgICAgIC8vIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUuIFdlIHNob3VsZCBhdHRlbXB0IHRvIHVuaWZ5IHRoZW0gc29tZWhvdy5cbiAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciB1bndpbmRpbmcgaW1tZWRpYXRlbHksIHVzaW5nIHRoZVxuICAgICAgICAgIC8vIFN1c3BlbmRlZE9uSHlkcmF0aW9uIG1lY2hhbmlzbS5cbiAgICAgICAgICAhaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpICYmXG4gICAgICAgICAgIWluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMpIC8vIFN1c3BlbmQgd29yayBsb29wIHVudGlsIGRhdGEgcmVzb2x2ZXNcbiAgICAgICAgICAgID8gU3VzcGVuZGVkT25EYXRhIC8vIERvbid0IHN1c3BlbmQgd29yayBsb29wLCBleGNlcHQgdG8gY2hlY2sgaWYgdGhlIGRhdGEgaGFzXG4gICAgICAgICAgICA6IC8vIGltbWVkaWF0ZWx5IHJlc29sdmVkIChpLmUuIGluIGEgbWljcm90YXNrKS4gT3RoZXJ3aXNlLCB0cmlnZ2VyIHRoZVxuICAgICAgICAgICAgICAvLyBuZWFyZXN0IFN1c3BlbnNlIGZhbGxiYWNrLlxuICAgICAgICAgICAgICBTdXNwZW5kZWRPbkltbWVkaWF0ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhyb3duVmFsdWUgPT09IFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkT25JbnN0YW5jZTtcbiAgICAgIH0gZWxzZSBpZiAodGhyb3duVmFsdWUgPT09IFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAvLyBBbiB1cGRhdGUgZmxvd2VkIGludG8gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5LiBCZWZvcmUgd2UgY2FuIGFwcGx5IHRoZVxuICAgICAgICAvLyB1cGRhdGUsIHdlIG5lZWQgdG8gZmluaXNoIGh5ZHJhdGluZy4gSW50ZXJydXB0IHRoZSB3b3JrLWluLXByb2dyZXNzXG4gICAgICAgIC8vIHJlbmRlciBzbyB3ZSBjYW4gcmVzdGFydCBhdCB0aGUgaHlkcmF0aW9uIGxhbmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSBpZGVhbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSBhYmxlIHRvIHN3aXRjaCBjb250ZXh0cyB3aXRob3V0XG4gICAgICAgIC8vIHVud2luZGluZyB0aGUgY3VycmVudCBzdGFjay5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgY291bGQgbmFtZSB0aGlzIHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgYnV0IGFzIG9mIG5vdyBpdCdzIHRoZSBvbmx5XG4gICAgICAgIC8vIGNhc2Ugd2hlcmUgd2UgdGhpbmsgdGhpcyBzaG91bGQgaGFwcGVuLlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZE9uSHlkcmF0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgZXJyb3IuXG4gICAgICAgIHZhciBpc1dha2VhYmxlID1cbiAgICAgICAgICB0aHJvd25WYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgIHR5cGVvZiB0aHJvd25WYWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgIHR5cGVvZiB0aHJvd25WYWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gaXNXYWtlYWJsZSAvLyBBIHdha2VhYmxlIG9iamVjdCB3YXMgdGhyb3duIGJ5IGEgbGVnYWN5IFN1c3BlbnNlIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgID8gLy8gVGhpcyBoYXMgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9yIHRoYW4gc3VzcGVuZGluZyB3aXRoIGB1c2VgLlxuICAgICAgICAgICAgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlIC8vIFRoaXMgaXMgYSByZWd1bGFyIGVycm9yLiBJZiBzb21ldGhpbmcgZWFybGllciBpbiB0aGUgY29tcG9uZW50IGFscmVhZHlcbiAgICAgICAgICA6IC8vIHN1c3BlbmRlZCwgd2UgbXVzdCBjbGVhciB0aGUgdGhlbmFibGUgc3RhdGUgdG8gdW5ibG9jayB0aGUgd29yayBsb29wLlxuICAgICAgICAgICAgU3VzcGVuZGVkT25FcnJvcjtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IHRocm93blZhbHVlO1xuICAgICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICAgIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgZmF0YWwgZXJyb3JcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSB0aHJvd25WYWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShlcnJvcmVkV29yaywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkUmVtYWluT25QcmV2aW91c1NjcmVlbigpIHtcbiAgICAgIC8vIFRoaXMgaXMgYXNraW5nIHdoZXRoZXIgaXQncyBiZXR0ZXIgdG8gc3VzcGVuZCB0aGUgdHJhbnNpdGlvbiBhbmQgcmVtYWluXG4gICAgICAvLyBvbiB0aGUgcHJldmlvdXMgc2NyZWVuLCB2ZXJzdXMgc2hvd2luZyBhIGZhbGxiYWNrIGFzIHNvb24gYXMgcG9zc2libGUuIEl0XG4gICAgICAvLyB0YWtlcyBpbnRvIGFjY291bnQgYm90aCB0aGUgcHJpb3JpdHkgb2YgcmVuZGVyIGFuZCBhbHNvIHdoZXRoZXIgc2hvd2luZyBhXG4gICAgICAvLyBmYWxsYmFjayB3b3VsZCBwcm9kdWNlIGEgZGVzaXJhYmxlIHVzZXIgZXhwZXJpZW5jZS5cbiAgICAgIHZhciBoYW5kbGVyID0gZ2V0U3VzcGVuc2VIYW5kbGVyKCk7XG5cbiAgICAgIGlmIChoYW5kbGVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gU3VzcGVuc2UgYm91bmRhcnkgdGhhdCBjYW4gcHJvdmlkZSBhIGZhbGxiYWNrLiBXZSBoYXZlIG5vXG4gICAgICAgIC8vIGNob2ljZSBidXQgdG8gcmVtYWluIG9uIHRoZSBwcmV2aW91cyBzY3JlZW4uXG4gICAgICAgIC8vIE5PVEU6IFdlIGRvIHRoaXMgZXZlbiBmb3Igc3luYyB1cGRhdGVzLCBmb3IgbGFjayBvZiBhbnkgYmV0dGVyIG9wdGlvbi4gSW5cbiAgICAgICAgLy8gdGhlIGZ1dHVyZSwgd2UgbWF5IGNoYW5nZSBob3cgd2UgaGFuZGxlIHRoaXMsIGxpa2UgYnkgcHV0dGluZyB0aGUgd2hvbGVcbiAgICAgICAgLy8gcm9vdCBpbnRvIGEgXCJkZXRhY2hlZFwiIG1vZGUuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBUT0RPOiBPbmNlIGB1c2VgIGhhcyBmdWxseSByZXBsYWNlZCB0aGUgYHRocm93IHByb21pc2VgIHBhdHRlcm4sIHdlIHNob3VsZFxuICAgICAgLy8gYmUgYWJsZSB0byByZW1vdmUgdGhlIGVxdWl2YWxlbnQgY2hlY2sgaW4gZmluaXNoQ29uY3VycmVudFJlbmRlciwgYW5kIHJlbHlcbiAgICAgIC8vIGp1c3Qgb24gdGhpcyBvbmUuXG5cbiAgICAgIGlmIChpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykpIHtcbiAgICAgICAgaWYgKGdldFNoZWxsQm91bmRhcnkoKSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJlbmRlcmluZyBpbnNpZGUgdGhlIFwic2hlbGxcIiBvZiB0aGUgYXBwLiBBY3RpdmF0aW5nIHRoZSBuZWFyZXN0XG4gICAgICAgICAgLy8gZmFsbGJhY2sgd291bGQgY2F1c2UgdmlzaWJsZSBjb250ZW50IHRvIGRpc2FwcGVhci4gSXQncyBiZXR0ZXIgdG9cbiAgICAgICAgICAvLyBzdXNwZW5kIHRoZSB0cmFuc2l0aW9uIGFuZCByZW1haW4gb24gdGhlIHByZXZpb3VzIHNjcmVlbi5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSdyZSByZW5kZXJpbmcgY29udGVudCB0aGF0IHdhc24ndCBwYXJ0IG9mIHRoZSBwcmV2aW91cyBzY3JlZW4uXG4gICAgICAgICAgLy8gUmF0aGVyIHRoYW4gYmxvY2sgdGhlIHRyYW5zaXRpb24sIGl0J3MgYmV0dGVyIHRvIHNob3cgYSBmYWxsYmFjayBhc1xuICAgICAgICAgIC8vIHNvb24gYXMgcG9zc2libGUuIFRoZSBhcHBlYXJhbmNlIG9mIGFueSBuZXN0ZWQgZmFsbGJhY2tzIHdpbGwgYmVcbiAgICAgICAgICAvLyB0aHJvdHRsZWQgdG8gYXZvaWQgamFuay5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpbmNsdWRlc09ubHlSZXRyaWVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSB8fCAvLyBJbiB0aGlzIGNvbnRleHQsIGFuIE9mZnNjcmVlbkxhbmUgY291bnRzIGFzIGEgUmV0cnlcbiAgICAgICAgLy8gVE9ETzogSXQncyBiZWNvbWUgaW5jcmVhc2luZ2x5IGNsZWFyIHRoYXQgUmV0cmllcyBhbmQgT2Zmc2NyZWVuIGFyZVxuICAgICAgICAvLyBkZWVwbHkgY29ubmVjdGVkLiBUaGV5IHByb2JhYmx5IGNhbiBiZSB1bmlmaWVkIGZ1cnRoZXIuXG4gICAgICAgIGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpXG4gICAgICApIHtcbiAgICAgICAgLy8gRHVyaW5nIGEgcmV0cnksIHdlIGNhbiBzdXNwZW5kIHJlbmRlcmluZyBpZiB0aGUgbmVhcmVzdCBTdXNwZW5zZSBib3VuZGFyeVxuICAgICAgICAvLyBpcyB0aGUgYm91bmRhcnkgb2YgdGhlIFwic2hlbGxcIiwgYmVjYXVzZSB3ZSdyZSBndWFyYW50ZWVkIG5vdCB0byBibG9ja1xuICAgICAgICAvLyBhbnkgbmV3IGNvbnRlbnQgZnJvbSBhcHBlYXJpbmcuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSByZWFzb24gd2UgbXVzdCBjaGVjayBpZiB0aGlzIGlzIGEgcmV0cnkgaXMgYmVjYXVzZSBpdCBndWFyYW50ZWVzXG4gICAgICAgIC8vIHRoYXQgc3VzcGVuZGluZyB0aGUgd29yayBsb29wIHdvbid0IGJsb2NrIGFuIGFjdHVhbCB1cGRhdGUsIGJlY2F1c2VcbiAgICAgICAgLy8gcmV0cmllcyBkb24ndCBcInVwZGF0ZVwiIGFueXRoaW5nOyB0aGV5IGZpbGwgaW4gZmFsbGJhY2tzIHRoYXQgd2VyZSBsZWZ0XG4gICAgICAgIC8vIGJlaGluZCBieSBhIHByZXZpb3VzIHRyYW5zaXRpb24uXG4gICAgICAgIHJldHVybiBoYW5kbGVyID09PSBnZXRTaGVsbEJvdW5kYXJ5KCk7XG4gICAgICB9IC8vIEZvciBhbGwgb3RoZXIgTGFuZXMgYmVzaWRlcyBUcmFuc2l0aW9ucyBhbmQgUmV0cmllcywgd2Ugc2hvdWxkIG5vdCB3YWl0XG4gICAgICAvLyBmb3IgdGhlIGRhdGEgdG8gbG9hZC5cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKGNvbnRhaW5lcikge1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gICAgICBpZiAocHJldkRpc3BhdGNoZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIFJlYWN0IGlzb21vcnBoaWMgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEgZGVmYXVsdCBkaXNwYXRjaGVyLlxuICAgICAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgICAgIC8vIG5pY2VyIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICByZXR1cm4gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpIHtcbiAgICAgIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3ckMSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGxhbmUpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IG1lcmdlTGFuZXMoXG4gICAgICAgIGxhbmUsXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZCgpIHtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcykge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5OyAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gICAgICAvLyB0aGlzIHJlbmRlci5cblxuICAgICAgaWYgKFxuICAgICAgICAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8XG4gICAgICAgICAgaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcykpICYmXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCBzbyB0aGF0IHdlIHN3aXRjaCB0byB3b3JraW5nIG9uXG4gICAgICAgIC8vIHRoZSB1cGRhdGVzIHRoYXQgd2VyZSBza2lwcGVkLiBVc3VhbGx5IHdlIG9ubHkgc3VzcGVuZCBhdCB0aGUgZW5kIG9mXG4gICAgICAgIC8vIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHdheXMgbWFyayB0aGUgcm9vdCBhcyBzdXNwZW5kZWQgaW1tZWRpYXRlbHlcbiAgICAgICAgLy8gKGluc2lkZSB0aGlzIGZ1bmN0aW9uKSwgc2luY2UgYnkgc3VzcGVuZGluZyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJcbiAgICAgICAgLy8gcGhhc2UgaW50cm9kdWNlcyBhIHBvdGVudGlhbCBtaXN0YWtlIHdoZXJlIHdlIHN1c3BlbmQgbGFuZXMgdGhhdCB3ZXJlXG4gICAgICAgIC8vIHBpbmdlZCBvciB1cGRhdGVkIHdoaWxlIHdlIHdlcmUgcmVuZGVyaW5nLlxuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciB1bndpbmRpbmcgaW1tZWRpYXRlbHksIHVzaW5nIHRoZVxuICAgICAgICAvLyBTdXNwZW5kZWRPbkh5ZHJhdGlvbiBtZWNoYW5pc20uXG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJEaWRFcnJvcihlcnJvcikge1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gW2Vycm9yXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgfSAvLyBDYWxsZWQgZHVyaW5nIHJlbmRlciB0byBkZXRlcm1pbmUgaWYgYW55dGhpbmcgaGFzIHN1c3BlbmRlZC5cbiAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG4gICAgZnVuY3Rpb24gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkge1xuICAgICAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgb3IgY29tcGxldGVkLCB3ZSBjYW4ndCByZWFsbHkgYmUgc3VyZSxcbiAgICAgIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcztcbiAgICB9IC8vIFRPRE86IE92ZXIgdGltZSwgdGhpcyBmdW5jdGlvbiBhbmQgcmVuZGVyUm9vdENvbmN1cnJlbnQgaGF2ZSBiZWNvbWUgbW9yZVxuICAgIC8vIGFuZCBtb3JlIHNpbWlsYXIuIE5vdCBzdXJlIGl0IG1ha2VzIHNlbnNlIHRvIG1haW50YWluIGZvcmtlZCBwYXRocy4gQ29uc2lkZXJcbiAgICAvLyB1bmlmeWluZyB0aGVtIGFnYWluLlxuXG4gICAgZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpO1xuICAgICAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICAgICAgaWYgKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzXG4gICAgICApIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG5cbiAgICAgICAgICAgIGlmIChtZW1vaXplZFVwZGF0ZXJzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICAgICAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIG1vdmUgRmliZXJzIHRoYXQgc2NoZWR1bGVkIHRoZSB1cGNvbWluZyB3b3JrIGZyb20gdGhlIE1hcCB0byB0aGUgU2V0LlxuICAgICAgICAgICAgLy8gSWYgd2UgYmFpbG91dCBvbiB0aGlzIHdvcmssIHdlJ2xsIG1vdmUgdGhlbSBiYWNrIChsaWtlIGFib3ZlKS5cbiAgICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1vdmUgdGhlbSBub3cgaW4gY2FzZSB0aGUgd29yayBzcGF3bnMgbW9yZSB3b3JrIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGggZGlmZmVyZW50IHVwZGF0ZXJzLlxuICAgICAgICAgICAgLy8gVGhhdCB3YXkgd2UgY2FuIGtlZXAgdGhlIGN1cnJlbnQgdXBkYXRlIGFuZCBmdXR1cmUgdXBkYXRlcyBzZXBhcmF0ZS5cblxuICAgICAgICAgICAgbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gZ2V0VHJhbnNpdGlvbnNGb3JMYW5lcygpO1xuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaWRTdXNwZW5kSW5TaGVsbCA9IGZhbHNlO1xuXG4gICAgICBvdXRlcjogZG8ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBOb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGUgd29yayBsb29wIGlzIHN1c3BlbmRlZC4gRHVyaW5nIGEgc3luY2hyb25vdXMgcmVuZGVyLCB3ZSBkb24ndFxuICAgICAgICAgICAgLy8geWllbGQgdG8gdGhlIG1haW4gdGhyZWFkLiBJbW1lZGlhdGVseSB1bndpbmQgdGhlIHN0YWNrLiBUaGlzIHdpbGxcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgZWl0aGVyIGEgZmFsbGJhY2sgb3IgYW4gZXJyb3IgYm91bmRhcnkuXG4gICAgICAgICAgICAvLyBUT0RPOiBGb3IgZGlzY3JldGUgYW5kIFwiZGVmYXVsdFwiIHVwZGF0ZXMgKGFueXRoaW5nIHRoYXQncyBub3RcbiAgICAgICAgICAgIC8vIGZsdXNoU3luYyksIHdlIHdhbnQgdG8gd2FpdCBmb3IgdGhlIG1pY3JvdGFza3MgdGhlIGZsdXNoIGJlZm9yZVxuICAgICAgICAgICAgLy8gdW53aW5kaW5nLiBXaWxsIHByb2JhYmx5IGltcGxlbWVudCB0aGlzIHVzaW5nIHJlbmRlclJvb3RDb25jdXJyZW50LFxuICAgICAgICAgICAgLy8gb3IgbWVyZ2UgcmVuZGVyUm9vdFN5bmMgYW5kIHJlbmRlclJvb3RDb25jdXJyZW50IGludG8gdGhlIHNhbWVcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGFuZCBmb3JrIHRoZSBiZWhhdmlvciBzb21lIG90aGVyIHdheS5cbiAgICAgICAgICAgIHZhciB1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICB2YXIgdGhyb3duVmFsdWUgPSB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25IeWRyYXRpb246IHtcbiAgICAgICAgICAgICAgICAvLyBTZWxlY3RpdmUgaHlkcmF0aW9uLiBBbiB1cGRhdGUgZmxvd2VkIGludG8gYSBkZWh5ZHJhdGVkIHRyZWUuXG4gICAgICAgICAgICAgICAgLy8gSW50ZXJydXB0IHRoZSBjdXJyZW50IHJlbmRlciBzbyB0aGUgd29yayBsb29wIGNhbiBzd2l0Y2ggdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gaHlkcmF0aW9uIGxhbmUuXG4gICAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3REaWROb3RDb21wbGV0ZTtcbiAgICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EYXRhOiB7XG4gICAgICAgICAgICAgICAgaWYgKCFkaWRTdXNwZW5kSW5TaGVsbCAmJiBnZXRTdXNwZW5zZUhhbmRsZXIoKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZEluU2hlbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAvLyBVbndpbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBub3JtYWwgd29yayBsb29wLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0cnVlKTsgLy8gQ2hlY2sgaWYgc29tZXRoaW5nIHN1c3BlbmRlZCBpbiB0aGUgc2hlbGwuIFdlIHVzZSB0aGlzIHRvIGRldGVjdCBhblxuICAgICAgLy8gaW5maW5pdGUgcGluZyBsb29wIGNhdXNlZCBieSBhbiB1bmNhY2hlZCBwcm9taXNlLlxuICAgICAgLy9cbiAgICAgIC8vIE9ubHkgaW5jcmVtZW50IHRoaXMgY291bnRlciBvbmNlIHBlciBzeW5jaHJvbm91cyByZW5kZXIgYXR0ZW1wdCBhY3Jvc3MgdGhlXG4gICAgICAvLyB3aG9sZSB0cmVlLiBFdmVuIGlmIHRoZXJlIGFyZSBtYW55IHNpYmxpbmcgY29tcG9uZW50cyB0aGF0IHN1c3BlbmQsIHRoaXNcbiAgICAgIC8vIGNvdW50ZXIgb25seSBnZXRzIGluY3JlbWVudGVkIG9uY2UuXG5cbiAgICAgIGlmIChkaWRTdXNwZW5kSW5TaGVsbCkge1xuICAgICAgICByb290LnNoZWxsU3VzcGVuZENvdW50ZXIrKztcbiAgICAgIH1cblxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzeW5jIHJlbmRlciwgc28gd2Ugc2hvdWxkIGhhdmUgZmluaXNoZWQgdGhlIHdob2xlIHRyZWUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBjb21taXQgYW4gaW5jb21wbGV0ZSByb290LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBcIiArXG4gICAgICAgICAgICBcImJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gSXQncyBzYWZlIHRvIHByb2Nlc3MgdGhlIHF1ZXVlIG5vdyB0aGF0IHRoZSByZW5kZXIgcGhhc2UgaXMgY29tcGxldGUuXG5cbiAgICAgIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICAgIH0gLy8gVGhlIHdvcmsgbG9vcCBpcyBhbiBleHRyZW1lbHkgaG90IHBhdGguIFRlbGwgQ2xvc3VyZSBub3QgdG8gaW5saW5lIGl0LlxuXG4gICAgLyoqIEBub2lubGluZSAqL1xuXG4gICAgZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAgICAgLy8gUGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZCBiZXR3ZWVuIGZpYmVyLlxuICAgICAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7XG4gICAgICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXNcbiAgICAgICkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcblxuICAgICAgICAgICAgaWYgKG1lbW9pemVkVXBkYXRlcnMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgbW92ZSBGaWJlcnMgdGhhdCBzY2hlZHVsZWQgdGhlIHVwY29taW5nIHdvcmsgZnJvbSB0aGUgTWFwIHRvIHRoZSBTZXQuXG4gICAgICAgICAgICAvLyBJZiB3ZSBiYWlsb3V0IG9uIHRoaXMgd29yaywgd2UnbGwgbW92ZSB0aGVtIGJhY2sgKGxpa2UgYWJvdmUpLlxuICAgICAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbW92ZSB0aGVtIG5vdyBpbiBjYXNlIHRoZSB3b3JrIHNwYXducyBtb3JlIHdvcmsgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aCBkaWZmZXJlbnQgdXBkYXRlcnMuXG4gICAgICAgICAgICAvLyBUaGF0IHdheSB3ZSBjYW4ga2VlcCB0aGUgY3VycmVudCB1cGRhdGUgYW5kIGZ1dHVyZSB1cGRhdGVzIHNlcGFyYXRlLlxuXG4gICAgICAgICAgICBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgPSBnZXRUcmFuc2l0aW9uc0ZvckxhbmVzKCk7XG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgICAgfVxuXG4gICAgICBvdXRlcjogZG8ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBOb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGUgd29yayBsb29wIGlzIHN1c3BlbmRlZC4gV2UgbmVlZCB0byBlaXRoZXIgdW53aW5kIHRoZSBzdGFjayBvclxuICAgICAgICAgICAgLy8gcmVwbGF5IHRoZSBzdXNwZW5kZWQgY29tcG9uZW50LlxuICAgICAgICAgICAgdmFyIHVuaXRPZldvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgIHZhciB0aHJvd25WYWx1ZSA9IHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWU7XG5cbiAgICAgICAgICAgIHJlc3VtZU9yVW53aW5kOiBzd2l0Y2ggKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25FcnJvcjoge1xuICAgICAgICAgICAgICAgIC8vIFVud2luZCB0aGVuIGNvbnRpbnVlIHdpdGggdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGF0YToge1xuICAgICAgICAgICAgICAgIHZhciB0aGVuYWJsZSA9IHRocm93blZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGVSZXNvbHZlZCh0aGVuYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRhIHJlc29sdmVkLiBUcnkgcmVuZGVyaW5nIHRoZSBjb21wb25lbnQgYWdhaW4uXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gLy8gVGhlIHdvcmsgbG9vcCBpcyBzdXNwZW5kZWQgb24gZGF0YS4gV2Ugc2hvdWxkIHdhaXQgZm9yIGl0IHRvXG4gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBiZWZvcmUgY29udGludWluZyB0byByZW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9taXNlIHJlc29sdmVzIHN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgICAgICAgLy8gVXN1YWxseSB0aGlzIGlzIGhhbmRsZWQgd2hlbiB3ZSBpbnN0cnVtZW50IHRoZSBwcm9taXNlIHRvIGFkZCBhXG4gICAgICAgICAgICAgICAgLy8gYHN0YXR1c2AgZmllbGQsIGJ1dCBpZiB0aGUgcHJvbWlzZSBhbHJlYWR5IGhhcyBhIHN0YXR1cywgd2Ugd29uJ3RcbiAgICAgICAgICAgICAgICAvLyBoYXZlIGFkZGVkIGEgbGlzdGVuZXIgdW50aWwgcmlnaHQgaGVyZS5cblxuICAgICAgICAgICAgICAgIHZhciBvblJlc29sdXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcm9vdCBpcyBzdGlsbCBzdXNwZW5kZWQgb24gdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EYXRhICYmXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIHJvb3QgYXMgcmVhZHkgdG8gY29udGludWUgcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH0gLy8gRW5zdXJlIHRoZSByb290IGlzIHNjaGVkdWxlZC4gV2Ugc2hvdWxkIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZVxuICAgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IHdvcmtpbmcgb24gYSBkaWZmZXJlbnQgcm9vdCwgc28gdGhhdCB3ZSByZXN1bWVcbiAgICAgICAgICAgICAgICAgIC8vIHJlbmRlcmluZyBsYXRlci5cblxuICAgICAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGVuYWJsZS50aGVuKG9uUmVzb2x1dGlvbiwgb25SZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGZpYmVyIGp1c3Qgc3VzcGVuZGVkLCBpdCdzIHBvc3NpYmxlIHRoZSBkYXRhIGlzIGFscmVhZHlcbiAgICAgICAgICAgICAgICAvLyBjYWNoZWQuIFlpZWxkIHRvIHRoZSBtYWluIHRocmVhZCB0byBnaXZlIGl0IGEgY2hhbmNlIHRvIHBpbmcuIElmXG4gICAgICAgICAgICAgICAgLy8gaXQgZG9lcywgd2UgY2FuIHJldHJ5IGltbWVkaWF0ZWx5IHdpdGhvdXQgdW53aW5kaW5nIHRoZSBzdGFjay5cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZTtcbiAgICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbnN0YW5jZToge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZToge1xuICAgICAgICAgICAgICAgIHZhciBfdGhlbmFibGUgPSB0aHJvd25WYWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlUmVzb2x2ZWQoX3RoZW5hYmxlKSkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGRhdGEgcmVzb2x2ZWQuIFRyeSByZW5kZXJpbmcgdGhlIGNvbXBvbmVudCBhZ2Fpbi5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVud2luZCB0aGVuIGNvbnRpbnVlIHdpdGggdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWU6IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgICAgICAgICAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJlZm9yZSB1bndpbmRpbmcgdGhlIHN0YWNrLCBjaGVjayBvbmUgbW9yZSB0aW1lIGlmIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZSBpcyByZWFkeS4gSXQgbWF5IGhhdmUgbG9hZGVkIHdoZW4gUmVhY3QgeWllbGRlZCB0b1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWFpbiB0aHJlYWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbmluZyB0aGlzIHRvIGEgY29uc3RhbnQgc28gRmxvdyBrbm93cyB0aGUgYmluZGluZyB3b24ndFxuICAgICAgICAgICAgICAgICAgICAvLyBiZSBtdXRhdGVkIGJ5IGBwcmVsb2FkSW5zdGFuY2VgLlxuICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdEZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gaG9zdEZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IGhvc3RGaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlYWR5ID0gcHJlbG9hZEluc3RhbmNlKHR5cGUsIHByb3BzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRhIHJlc29sdmVkLiBSZXN1bWUgdGhlIHdvcmsgbG9vcCBhcyBpZiBub3RoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkLiBVbmxpa2Ugd2hlbiBhIHVzZXIgY29tcG9uZW50IHN1c3BlbmRzLCB3ZSBkb24ndFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gcmVwbGF5IGFueXRoaW5nIGJlY2F1c2UgdGhlIGhvc3QgZmliZXJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGNvbXBsZXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IGhvc3RGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybkZpYmVyID0gaG9zdEZpYmVyLnJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhyZXR1cm5GaWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcmVzdW1lT3JVbndpbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgZmFpbCBncmFjZWZ1bGx5IGJ1dCBpdCdzIG5vdCBjb3JyZWN0LCBzbyBsb2cgYVxuICAgICAgICAgICAgICAgICAgICAvLyB3YXJuaW5nIGluIGRldi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCB0eXBlIG9mIGZpYmVyIHRyaWdnZXJlZCBhIHN1c3BlbnNleSBjb21taXQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gT3RoZXJ3aXNlLCB1bndpbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZToge1xuICAgICAgICAgICAgICAgIC8vIFN1c3BlbmRlZCBieSBhbiBvbGQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIHRoZSBgdGhyb3cgcHJvbWlzZWBcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuLiBUaGUgbmV3ZXIgcmVwbGF5aW5nIGJlaGF2aW9yIGNhbiBjYXVzZSBzdWJ0bGUgaXNzdWVzXG4gICAgICAgICAgICAgICAgLy8gbGlrZSBpbmZpbml0ZSBwaW5nIGxvb3BzLiBTbyB3ZSBtYWludGFpbiB0aGUgb2xkIGJlaGF2aW9yIGFuZFxuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyB1bndpbmQuXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSHlkcmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgLy8gU2VsZWN0aXZlIGh5ZHJhdGlvbi4gQW4gdXBkYXRlIGZsb3dlZCBpbnRvIGEgZGVoeWRyYXRlZCB0cmVlLlxuICAgICAgICAgICAgICAgIC8vIEludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIgc28gdGhlIHdvcmsgbG9vcCBjYW4gc3dpdGNoIHRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGh5ZHJhdGlvbiBsYW5lLlxuICAgICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RGlkTm90Q29tcGxldGU7XG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbmRlZFJlYXNvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJ1ZSAmJiBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBgYWN0YCBzcGVjaWFsIGNhc2U6IElmIHdlJ3JlIGluc2lkZSBhbiBgYWN0YCBzY29wZSwgZG9uJ3QgY29uc3VsdFxuICAgICAgICAgICAgLy8gYHNob3VsZFlpZWxkYC4gQWx3YXlzIGtlZXAgd29ya2luZyB1bnRpbCB0aGUgcmVuZGVyIGlzIGNvbXBsZXRlLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb246IGluIGEgdW5pdCB0ZXN0IGVudmlyb25tZW50LCB3ZVxuICAgICAgICAgICAgLy8gY2FuJ3QgdHJ1c3QgdGhlIHJlc3VsdCBvZiBgc2hvdWxkWWllbGRgLCBiZWNhdXNlIHRoZSBob3N0IEkvTyBpc1xuICAgICAgICAgICAgLy8gbGlrZWx5IG1vY2tlZC5cbiAgICAgICAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrTG9vcENvbmN1cnJlbnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgICAgICBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFJvb3RJblByb2dyZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBJdCdzIHNhZmUgdG8gcHJvY2VzcyB0aGUgcXVldWUgbm93IHRoYXQgdGhlIHJlbmRlciBwaGFzZSBpcyBjb21wbGV0ZS5cblxuICAgICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBAbm9pbmxpbmUgKi9cblxuICAgIGZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgICAgIC8vIFBlcmZvcm0gd29yayB1bnRpbCBTY2hlZHVsZXIgYXNrcyB1cyB0byB5aWVsZFxuICAgICAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsICYmICFzaG91bGRZaWVsZCgpKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBlcmZvcm1Vbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICAgICAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICAgICAgdmFyIG5leHQ7XG5cbiAgICAgIGlmICgodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgICBuZXh0ID0gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKTtcbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh1bml0T2ZXb3JrLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQgPSBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG5cbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICAgICAgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgfVxuXG4gICAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAgICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcGVyZm9ybVVuaXRPZldvcmsgc3BlY2lmY2FsbHkgZm9yIHJlcGxheWluZyBhIGZpYmVyIHRoYXRcbiAgICAgIC8vIGp1c3Qgc3VzcGVuZGVkLlxuICAgICAgLy9cbiAgICAgIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gICAgICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gICAgICB2YXIgbmV4dDtcbiAgICAgIHNldEN1cnJlbnRGaWJlcih1bml0T2ZXb3JrKTtcbiAgICAgIHZhciBpc1Byb2ZpbGluZ01vZGUgPSAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGU7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZ01vZGUpIHtcbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHVuaXRPZldvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDoge1xuICAgICAgICAgIC8vIEJlY2F1c2UgaXQgc3VzcGVuZGVkIHdpdGggYHVzZWAsIHdlIGNhbiBhc3N1bWUgaXQncyBhXG4gICAgICAgICAgLy8gZnVuY3Rpb24gY29tcG9uZW50LlxuICAgICAgICAgIHVuaXRPZldvcmsudGFnID0gRnVuY3Rpb25Db21wb25lbnQ7IC8vIEZhbGx0aHJvdWdoIHRvIHRoZSBuZXh0IGJyYW5jaC5cbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFJlc29sdmUgYGRlZmF1bHRQcm9wc2AuIFRoaXMgbG9naWMgaXMgY29waWVkIGZyb20gYGJlZ2luV29ya2AuXG4gICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHRoaXMgc3dpdGNoIHN0YXRlbWVudCBpbnRvIHRoYXQgbW9kdWxlLiBBbHNvLFxuICAgICAgICAgIC8vIGNvdWxkIG1heWJlIHVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHNheSBgdXNlYCBkb2Vzbid0IHdvcmsgd2l0aFxuICAgICAgICAgIC8vIGBkZWZhdWx0UHJvcHNgIDopXG4gICAgICAgICAgdmFyIENvbXBvbmVudCA9IHVuaXRPZldvcmsudHlwZTtcbiAgICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgdmFyIHJlc29sdmVkUHJvcHMgPVxuICAgICAgICAgICAgdW5pdE9mV29yay5lbGVtZW50VHlwZSA9PT0gQ29tcG9uZW50XG4gICAgICAgICAgICAgID8gdW5yZXNvbHZlZFByb3BzXG4gICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgICAgdmFyIGNvbnRleHQ7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KFxuICAgICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh1bml0T2ZXb3JrLCB1bm1hc2tlZENvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgcmVzb2x2ZWRQcm9wcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6IHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGBkZWZhdWx0UHJvcHNgLiBUaGlzIGxvZ2ljIGlzIGNvcGllZCBmcm9tIGBiZWdpbldvcmtgLlxuICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQgaW50byB0aGF0IG1vZHVsZS4gQWxzbyxcbiAgICAgICAgICAvLyBjb3VsZCBtYXliZSB1c2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBzYXkgYHVzZWAgZG9lc24ndCB3b3JrIHdpdGhcbiAgICAgICAgICAvLyBgZGVmYXVsdFByb3BzYCA6KVxuICAgICAgICAgIHZhciBfQ29tcG9uZW50ID0gdW5pdE9mV29yay50eXBlLnJlbmRlcjtcbiAgICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID1cbiAgICAgICAgICAgIHVuaXRPZldvcmsuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnRcbiAgICAgICAgICAgICAgPyBfdW5yZXNvbHZlZFByb3BzXG4gICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICAgIG5leHQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgX3Jlc29sdmVkUHJvcHMsXG4gICAgICAgICAgICBfQ29tcG9uZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yay5yZWYsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBTb21lIGhvc3QgY29tcG9uZW50cyBhcmUgc3RhdGVmdWwgKHRoYXQncyBob3cgd2UgaW1wbGVtZW50IGZvcm1cbiAgICAgICAgICAvLyBhY3Rpb25zKSBidXQgd2UgZG9uJ3QgYm90aGVyIHRvIHJldXNlIHRoZSBtZW1vaXplZCBzdGF0ZSBiZWNhdXNlIGl0J3NcbiAgICAgICAgICAvLyBub3Qgd29ydGggdGhlIGV4dHJhIGNvZGUuIFRoZSBtYWluIHJlYXNvbiB0byByZXVzZSB0aGUgcHJldmlvdXMgaG9va3NcbiAgICAgICAgICAvLyBpcyB0byByZXVzZSB1bmNhY2hlZCBwcm9taXNlcywgYnV0IHdlIGhhcHBlbiB0byBrbm93IHRoYXQgdGhlIG9ubHlcbiAgICAgICAgICAvLyBwcm9taXNlcyB0aGF0IGEgaG9zdCBjb21wb25lbnQgbWlnaHQgc3VzcGVuZCBvbiBhcmUgZGVmaW5pdGVseSBjYWNoZWRcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIGNvbnRyb2xsZWQgYnkgdXMuIFNvIGRvbid0IGJvdGhlci5cbiAgICAgICAgICByZXNldEhvb2tzT25VbndpbmQodW5pdE9mV29yayk7IC8vIEZhbGx0aHJvdWdoIHRvIHRoZSBuZXh0IGJyYW5jaC5cbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAvLyBPdGhlciB0eXBlcyBiZXNpZGVzIGZ1bmN0aW9uIGNvbXBvbmVudHMgYXJlIHJlc2V0IGNvbXBsZXRlbHkgYmVmb3JlXG4gICAgICAgICAgLy8gYmVpbmcgcmVwbGF5ZWQuIEN1cnJlbnRseSB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIGEgVXNhYmxlIHR5cGUgaXNcbiAgICAgICAgICAvLyByZWNvbmNpbGVkIOKAlCB0aGUgcmVjb25jaWxlciB3aWxsIHN1c3BlbmQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBXZSByZXNldCB0aGUgZmliZXIgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGU7IGhvd2V2ZXIsIHRoaXMgaXNuJ3RcbiAgICAgICAgICAvLyBhIGZ1bGwgXCJ1bndpbmRcIiBiZWNhdXNlIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBwcm9taXNlcyB0aGF0IHdlcmVcbiAgICAgICAgICAvLyByZWNvbmNpbGVkIHByZXZpb3VzbHkuIFNvIGl0J3MgaW50ZW50aW9uYWwgdGhhdCB3ZSBkb24ndCBjYWxsXG4gICAgICAgICAgLy8gcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kIGhlcmUuXG4gICAgICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIHVuaXRPZldvcmspO1xuICAgICAgICAgIHVuaXRPZldvcmsgPSB3b3JrSW5Qcm9ncmVzcyA9IHJlc2V0V29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHQgPSBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZ01vZGUpIHtcbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh1bml0T2ZXb3JrLCB0cnVlKTtcbiAgICAgIH0gLy8gVGhlIGJlZ2luIHBoYXNlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSB3aXRob3V0IHN1c3BlbmRpbmcuIFJldHVybiB0byB0aGVcbiAgICAgIC8vIG5vcm1hbCB3b3JrIGxvb3AuXG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBkb2Vzbid0IHNwYXduIG5ldyB3b3JrLCBjb21wbGV0ZSB0aGUgY3VycmVudCB3b3JrLlxuICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICB9XG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcGVyZm9ybVVuaXRPZldvcmsgc3BlY2lmY2FsbHkgZm9yIHVud2luZGluZyBhIGZpYmVyXG4gICAgICAvLyB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbi5cbiAgICAgIC8vXG4gICAgICAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuIFRoaXMgd2lsbCB1bndpbmQgdGhlIHN0YWNrLCBhbmQgcG90ZW50aWFsbHlcbiAgICAgIC8vIHJlc3VsdCBpbiBzaG93aW5nIGEgZmFsbGJhY2suXG4gICAgICByZXNldFN1c3BlbmRlZFdvcmtMb29wT25VbndpbmQodW5pdE9mV29yayk7XG4gICAgICB2YXIgcmV0dXJuRmliZXIgPSB1bml0T2ZXb3JrLnJldHVybjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRmluZCBhbmQgbWFyayB0aGUgbmVhcmVzdCBTdXNwZW5zZSBvciBlcnJvciBib3VuZGFyeSB0aGF0IGNhbiBoYW5kbGVcbiAgICAgICAgLy8gdGhpcyBcImV4Y2VwdGlvblwiLlxuICAgICAgICB2YXIgZGlkRmF0YWwgPSB0aHJvd0V4Y2VwdGlvbihcbiAgICAgICAgICByb290LFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgdGhyb3duVmFsdWUsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZGlkRmF0YWwpIHtcbiAgICAgICAgICBwYW5pY09uUm9vdEVycm9yKHRocm93blZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmcgdGhlIGVycm9yLiBBbiBleGFtcGxlIG9mIHRoaXMgaGFwcGVuaW5nIGlzXG4gICAgICAgIC8vIHdoZW4gYWNjZXNzaW5nIHRoZSBgY29tcG9uZW50RGlkQ2F0Y2hgIHByb3BlcnR5IG9mIGFuIGVycm9yIGJvdW5kYXJ5XG4gICAgICAgIC8vIHRocm93cyBhbiBlcnJvci4gQSB3ZWlyZCBlZGdlIGNhc2UuIFRoZXJlJ3MgYSByZWdyZXNzaW9uIHRlc3QgZm9yIHRoaXMuXG4gICAgICAgIC8vIFRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCwgYnViYmxlIHRoZSBlcnJvciB1cCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFuaWNPblJvb3RFcnJvcih0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1bml0T2ZXb3JrLmZsYWdzICYgSW5jb21wbGV0ZSkge1xuICAgICAgICAvLyBVbndpbmQgdGhlIHN0YWNrIHVudGlsIHdlIHJlYWNoIHRoZSBuZWFyZXN0IGJvdW5kYXJ5LlxuICAgICAgICB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGZpYmVyIHN1c3BlbmRlZCwgd2UncmUgaW50ZW50aW9uYWxseSBnb2luZyB0byBjb21taXQgaXQgaW5cbiAgICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSBjYW4gZG8gdGhpcyBzYWZlbHkgaW4gY2FzZXMgd2hlcmUgd2Uga25vdyB0aGVcbiAgICAgICAgLy8gaW5jb25zaXN0ZW50IHRyZWUgd2lsbCBiZSBoaWRkZW4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgY3VycmVudGx5IG9ubHkgYXBwbGllcyB0byBMZWdhY3kgU3VzcGVuc2UgaW1wbGVtZW50YXRpb24sIGJ1dCB3ZSBtYXlcbiAgICAgICAgLy8gcG9ydCBhIHZlcnNpb24gb2YgdGhpcyB0byBjb25jdXJyZW50IHJvb3RzLCB0b28sIHdoZW4gcGVyZm9ybWluZyBhXG4gICAgICAgIC8vIHN5bmNocm9ub3VzIHJlbmRlci4gQmVjYXVzZSB0aGF0IHdpbGwgYWxsb3cgdXMgdG8gbXV0YXRlIHRoZSB0cmVlIGFzIHdlXG4gICAgICAgIC8vIGdvIGluc3RlYWQgb2YgYnVmZmVyaW5nIG11dGF0aW9ucyB1bnRpbCB0aGUgZW5kLiBUaG91Z2ggaXQncyB1bmNsZWFyIGlmXG4gICAgICAgIC8vIHRoaXMgcGFydGljdWxhciBwYXRoIGlzIGhvdyB0aGF0IHdvdWxkIGJlIGltcGxlbWVudGVkLlxuICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFuaWNPblJvb3RFcnJvcihlcnJvcikge1xuICAgICAgLy8gVGhlcmUncyBubyBhbmNlc3RvciB0aGF0IGNhbiBoYW5kbGUgdGhpcyBleGNlcHRpb24uIFRoaXMgc2hvdWxkIG5ldmVyXG4gICAgICAvLyBoYXBwZW4gYmVjYXVzZSB0aGUgcm9vdCBpcyBzdXBwb3NlZCB0byBjYXB0dXJlIGFsbCBlcnJvcnMgdGhhdCB3ZXJlbid0XG4gICAgICAvLyBjYXVnaHQgYnkgYW4gZXJyb3IgYm91bmRhcnkuIFRoaXMgaXMgYSBmYXRhbCBlcnJvciwgb3IgcGFuaWMgY29uZGl0aW9uLFxuICAgICAgLy8gYmVjYXVzZSB3ZSd2ZSBydW4gb3V0IG9mIHdheXMgdG8gcmVjb3Zlci5cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IGVycm9yOyAvLyBTZXQgYHdvcmtJblByb2dyZXNzYCB0byBudWxsLiBUaGlzIHJlcHJlc2VudHMgYWR2YW5jaW5nIHRvIHRoZSBuZXh0XG4gICAgICAvLyBzaWJsaW5nLCBvciB0aGUgcGFyZW50IGlmIHRoZXJlIGFyZSBubyBzaWJsaW5ncy4gQnV0IHNpbmNlIHRoZSByb290XG4gICAgICAvLyBoYXMgbm8gc2libGluZ3Mgbm9yIGEgcGFyZW50LCB3ZSBzZXQgaXQgdG8gbnVsbC4gVXN1YWxseSB0aGlzIGlzXG4gICAgICAvLyBoYW5kbGVkIGJ5IGBjb21wbGV0ZVVuaXRPZldvcmtgIG9yIGB1bndpbmRXb3JrYCwgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAvLyBpbnRlbnRpb25hbGx5IG5vdCBjYWxsaW5nIHRob3NlLCB3ZSBuZWVkIHNldCBpdCBoZXJlLlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsbGluZyBgdW53aW5kV29ya2AgdG8gcG9wIHRoZSBjb250ZXh0cy5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICAvLyBBdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IHVuaXQgb2Ygd29yaywgdGhlbiBtb3ZlIHRvIHRoZSBuZXh0XG4gICAgICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gICAgICB2YXIgY29tcGxldGVkV29yayA9IHVuaXRPZldvcms7XG5cbiAgICAgIGRvIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICgoY29tcGxldGVkV29yay5mbGFncyAmIEluY29tcGxldGUpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IElmIHdlIHJlLWVuYWJsZSBzaWJsaW5nIHByZXJlbmRlcmluZyBpbiBzb21lIGNhc2VzLCB0aGlzIGJyYW5jaFxuICAgICAgICAgICAgLy8gaXMgd2hlcmUgd2Ugd291bGQgc3dpdGNoIHRvIHRoZSB1bndpbmRpbmcgcGF0aC5cbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIkludGVybmFsIFJlYWN0IGVycm9yOiBFeHBlY3RlZCB0aGlzIGZpYmVyIHRvIGJlIGNvbXBsZXRlLCBidXQgXCIgK1xuICAgICAgICAgICAgICAgIFwiaXQgaXNuJ3QuIEl0IHNob3VsZCBoYXZlIGJlZW4gdW53b3VuZC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgICAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG5cbiAgICAgICAgdmFyIGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICAgICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKTsgLy8gVXBkYXRlIHJlbmRlciBkdXJhdGlvbiBhc3N1bWluZyB3ZSBkaWRuJ3QgZXJyb3IuXG5cbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG5cbiAgICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBDb21wbGV0aW5nIHRoaXMgZmliZXIgc3Bhd25lZCBuZXcgd29yay4gV29yayBvbiB0aGF0IG5leHQuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHNpYmxpbmdGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgd29yayB0byBkbyBpbiB0aGlzIHJldHVybkZpYmVyLCBkbyB0aGF0IG5leHQuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgICAgY29tcGxldGVkV29yayA9IHJldHVybkZpYmVyOyAvLyBVcGRhdGUgdGhlIG5leHQgdGhpbmcgd2UncmUgd29ya2luZyBvbiBpbiBjYXNlIHNvbWV0aGluZyB0aHJvd3MuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgfSB3aGlsZSAoY29tcGxldGVkV29yayAhPT0gbnVsbCk7IC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIHJvb3QuXG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcykge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdENvbXBsZXRlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBpbmNvbXBsZXRlV29yayA9IHVuaXRPZldvcms7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgICAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgICAgIHZhciBjdXJyZW50ID0gaW5jb21wbGV0ZVdvcmsuYWx0ZXJuYXRlOyAvLyBUaGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBzb21ldGhpbmcgdGhyZXcuIFBvcCB2YWx1ZXMgb2ZmXG4gICAgICAgIC8vIHRoZSBzdGFjayB3aXRob3V0IGVudGVyaW5nIHRoZSBjb21wbGV0ZSBwaGFzZS4gSWYgdGhpcyBpcyBhIGJvdW5kYXJ5LFxuICAgICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cblxuICAgICAgICB2YXIgbmV4dCA9IHVud2luZFdvcmsoY3VycmVudCwgaW5jb21wbGV0ZVdvcmspOyAvLyBCZWNhdXNlIHRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSwgZG9uJ3QgcmVzZXQgaXRzIGxhbmVzLlxuXG4gICAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gRm91bmQgYSBib3VuZGFyeSB0aGF0IGNhbiBoYW5kbGUgdGhpcyBleGNlcHRpb24uIFJlLXJlbnRlciB0aGVcbiAgICAgICAgICAvLyBiZWdpbiBwaGFzZS4gVGhpcyBicmFuY2ggd2lsbCByZXR1cm4gdXMgdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBTaW5jZSB3ZSdyZSByZXN0YXJ0aW5nLCByZW1vdmUgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBob3N0IGVmZmVjdFxuICAgICAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICAgICAgbmV4dC5mbGFncyAmPSBIb3N0RWZmZWN0TWFzaztcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIEtlZXAgdW53aW5kaW5nIHVudGlsIHdlIHJlYWNoIGVpdGhlciBhIGJvdW5kYXJ5IG9yIHRoZSByb290LlxuXG4gICAgICAgIGlmICgoaW5jb21wbGV0ZVdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgLy8gUmVjb3JkIHRoZSByZW5kZXIgZHVyYXRpb24gZm9yIHRoZSBmaWJlciB0aGF0IGVycm9yZWQuXG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShpbmNvbXBsZXRlV29yaywgZmFsc2UpOyAvLyBJbmNsdWRlIHRoZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gZmFpbGVkIGNoaWxkcmVuIGJlZm9yZSBjb250aW51aW5nLlxuXG4gICAgICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gaW5jb21wbGV0ZVdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgdmFyIGNoaWxkID0gaW5jb21wbGV0ZVdvcmsuY2hpbGQ7XG5cbiAgICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG4gICAgICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbmNvbXBsZXRlV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgICAgICB9IC8vIFRPRE86IE9uY2Ugd2Ugc3RvcCBwcmVyZW5kZXJpbmcgc2libGluZ3MsIGluc3RlYWQgb2YgcmVzZXR0aW5nIHRoZSBwYXJlbnRcbiAgICAgICAgLy8gb2YgdGhlIG5vZGUgYmVpbmcgdW53b3VuZCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVzZXQgbm9kZSBpdHNlbGYgYXMgd2VcbiAgICAgICAgLy8gdW53aW5kIHRoZSBzdGFjay4gU2F2ZXMgYW4gYWRkaXRpb25hbCBudWxsIGNoZWNrLlxuXG4gICAgICAgIHZhciByZXR1cm5GaWJlciA9IGluY29tcGxldGVXb3JrLnJldHVybjtcblxuICAgICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBNYXJrIHRoZSBwYXJlbnQgZmliZXIgYXMgaW5jb21wbGV0ZSBhbmQgY2xlYXIgaXRzIHN1YnRyZWUgZmxhZ3MuXG4gICAgICAgICAgLy8gVE9ETzogT25jZSB3ZSBzdG9wIHByZXJlbmRlcmluZyBzaWJsaW5ncywgd2UgbWF5IGJlIGFibGUgdG8gZ2V0IHJpZCBvZlxuICAgICAgICAgIC8vIHRoZSBJbmNvbXBsZXRlIGZsYWcgYmVjYXVzZSB1bndpbmRpbmcgdG8gdGhlIG5lYXJlc3QgYm91bmRhcnkgd2lsbFxuICAgICAgICAgIC8vIGhhcHBlbiBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7XG4gICAgICAgICAgcmV0dXJuRmliZXIuc3VidHJlZUZsYWdzID0gTm9GbGFncyQxO1xuICAgICAgICAgIHJldHVybkZpYmVyLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICAgIH0gLy8gTk9URTogSWYgd2UgcmUtZW5hYmxlIHNpYmxpbmcgcHJlcmVuZGVyaW5nIGluIHNvbWUgY2FzZXMsIGhlcmUgd2VcbiAgICAgICAgLy8gd291bGQgc3dpdGNoIHRvIHRoZSBub3JtYWwgY29tcGxldGlvbiBwYXRoOiBjaGVjayBpZiBhIHNpYmxpbmdcbiAgICAgICAgLy8gZXhpc3RzLCBhbmQgaWYgc28sIGJlZ2luIHdvcmsgb24gaXQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgICAgaW5jb21wbGV0ZVdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gaW5jb21wbGV0ZVdvcms7XG4gICAgICB9IHdoaWxlIChpbmNvbXBsZXRlV29yayAhPT0gbnVsbCk7IC8vIFdlJ3ZlIHVud291bmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RGlkTm90Q29tcGxldGU7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0Um9vdChyb290LCByZWNvdmVyYWJsZUVycm9ycywgdHJhbnNpdGlvbnMsIHNwYXduZWRMYW5lKSB7XG4gICAgICAvLyBUT0RPOiBUaGlzIG5vIGxvbmdlciBtYWtlcyBhbnkgc2Vuc2UuIFdlIGFscmVhZHkgd3JhcCB0aGUgbXV0YXRpb24gYW5kXG4gICAgICAvLyBsYXlvdXQgcGhhc2VzLiBTaG91bGQgYmUgYWJsZSB0byByZW1vdmUuXG4gICAgICB2YXIgcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoRGlzY3JldGVFdmVudFByaW9yaXR5KTtcbiAgICAgICAgY29tbWl0Um9vdEltcGwoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICB0cmFuc2l0aW9ucyxcbiAgICAgICAgICBwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSxcbiAgICAgICAgICBzcGF3bmVkTGFuZVxuICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRSb290SW1wbChcbiAgICAgIHJvb3QsXG4gICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgcmVuZGVyUHJpb3JpdHlMZXZlbCxcbiAgICAgIHNwYXduZWRMYW5lXG4gICAgKSB7XG4gICAgICBkbyB7XG4gICAgICAgIC8vIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIGNhbGwgYGZsdXNoU3luY1VwZGF0ZVF1ZXVlYCBhdCB0aGUgZW5kLCB3aGljaFxuICAgICAgICAvLyBtZWFucyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBzb21ldGltZXMgcmVzdWx0IGluIGFkZGl0aW9uYWxcbiAgICAgICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgICAgICAvLyBubyBtb3JlIHBlbmRpbmcgZWZmZWN0cy5cbiAgICAgICAgLy8gVE9ETzogTWlnaHQgYmUgYmV0dGVyIGlmIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCBkaWQgbm90IGF1dG9tYXRpY2FsbHlcbiAgICAgICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIH0gd2hpbGUgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKTtcblxuICAgICAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gICAgICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAgICAgIGlmIChmaW5pc2hlZFdvcmsgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJyb290LmZpbmlzaGVkTGFuZXMgc2hvdWxkIG5vdCBiZSBlbXB0eSBkdXJpbmcgYSBjb21taXQuIFRoaXMgaXMgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgICAgIGlmIChmaW5pc2hlZFdvcmsgPT09IHJvb3QuY3VycmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgXCIgK1xuICAgICAgICAgICAgXCJhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH0gLy8gY29tbWl0Um9vdCBuZXZlciByZXR1cm5zIGEgY29udGludWF0aW9uOyBpdCBhbHdheXMgZmluaXNoZXMgc3luY2hyb25vdXNseS5cbiAgICAgIC8vIFNvIHdlIGNhbiBjbGVhciB0aGVzZSBub3cgdG8gYWxsb3cgYSBuZXcgY2FsbGJhY2sgdG8gYmUgc2NoZWR1bGVkLlxuXG4gICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmU7XG4gICAgICByb290LmNhbmNlbFBlbmRpbmdDb21taXQgPSBudWxsOyAvLyBDaGVjayB3aGljaCBsYW5lcyBubyBsb25nZXIgaGF2ZSBhbnkgd29yayBzY2hlZHVsZWQgb24gdGhlbSwgYW5kIG1hcmtcbiAgICAgIC8vIHRob3NlIGFzIGZpbmlzaGVkLlxuXG4gICAgICB2YXIgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICBmaW5pc2hlZFdvcmsubGFuZXMsXG4gICAgICAgIGZpbmlzaGVkV29yay5jaGlsZExhbmVzXG4gICAgICApOyAvLyBNYWtlIHN1cmUgdG8gYWNjb3VudCBmb3IgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgYnkgYSBjb25jdXJyZW50IGV2ZW50XG4gICAgICAvLyBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZTsgZG9uJ3QgbWFyayB0aGVtIGFzIGZpbmlzaGVkLlxuXG4gICAgICB2YXIgY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gZ2V0Q29uY3VycmVudGx5VXBkYXRlZExhbmVzKCk7XG4gICAgICByZW1haW5pbmdMYW5lcyA9IG1lcmdlTGFuZXMocmVtYWluaW5nTGFuZXMsIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyk7XG4gICAgICBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzLCBzcGF3bmVkTGFuZSk7XG5cbiAgICAgIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAgICAgLy8gV2UgY2FuIHJlc2V0IHRoZXNlIG5vdyB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkLlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgICAgIH0gLy8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlbS5cbiAgICAgIC8vIERvIHRoaXMgYXMgZWFybHkgYXMgcG9zc2libGUsIHNvIGl0IGlzIHF1ZXVlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0aGF0XG4gICAgICAvLyBtaWdodCBnZXQgc2NoZWR1bGVkIGluIHRoZSBjb21taXQgcGhhc2UuIChTZWUgIzE2NzE0LilcbiAgICAgIC8vIFRPRE86IERlbGV0ZSBhbGwgb3RoZXIgcGxhY2VzIHRoYXQgc2NoZWR1bGUgdGhlIHBhc3NpdmUgZWZmZWN0IGNhbGxiYWNrXG4gICAgICAvLyBUaGV5J3JlIHJlZHVuZGFudC5cblxuICAgICAgaWYgKFxuICAgICAgICAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSAhPT0gTm9GbGFncyQxIHx8XG4gICAgICAgIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBQYXNzaXZlTWFzaykgIT09IE5vRmxhZ3MkMVxuICAgICAgKSB7XG4gICAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpOyAvLyBUaGlzIHJlbmRlciB0cmlnZ2VyZWQgcGFzc2l2ZSBlZmZlY3RzOiByZWxlYXNlIHRoZSByb290IGNhY2hlIHBvb2xcbiAgICAgICAgICAgIC8vICphZnRlciogcGFzc2l2ZSBlZmZlY3RzIGZpcmUgdG8gYXZvaWQgZnJlZWluZyBhIGNhY2hlIHBvb2wgdGhhdCBtYXlcbiAgICAgICAgICAgIC8vIGJlIHJlZmVyZW5jZWQgYnkgYSBub2RlIGluIHRoZSB0cmVlIChIb3N0Um9vdCwgQ2FjaGUgYm91bmRhcnkgZXRjKVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IGVmZmVjdHMgaW4gdGhlIHdob2xlIHRyZWUuXG4gICAgICAvLyBUT0RPOiBUaGlzIGlzIGxlZnQgb3ZlciBmcm9tIHRoZSBlZmZlY3QgbGlzdCBpbXBsZW1lbnRhdGlvbiwgd2hlcmUgd2UgaGFkXG4gICAgICAvLyB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBgZmlyc3RFZmZlY3RgIHRvIHNhdGlzZnkgRmxvdy4gSSB0aGluayB0aGVcbiAgICAgIC8vIG9ubHkgb3RoZXIgcmVhc29uIHRoaXMgb3B0aW1pemF0aW9uIGV4aXN0cyBpcyBiZWNhdXNlIGl0IGFmZmVjdHMgcHJvZmlsaW5nLlxuICAgICAgLy8gUmVjb25zaWRlciB3aGV0aGVyIHRoaXMgaXMgbmVjZXNzYXJ5LlxuXG4gICAgICB2YXIgc3VidHJlZUhhc0VmZmVjdHMgPVxuICAgICAgICAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmXG4gICAgICAgICAgKEJlZm9yZU11dGF0aW9uTWFzayB8IE11dGF0aW9uTWFzayB8IExheW91dE1hc2sgfCBQYXNzaXZlTWFzaykpICE9PVxuICAgICAgICBOb0ZsYWdzJDE7XG4gICAgICB2YXIgcm9vdEhhc0VmZmVjdCA9XG4gICAgICAgIChmaW5pc2hlZFdvcmsuZmxhZ3MgJlxuICAgICAgICAgIChCZWZvcmVNdXRhdGlvbk1hc2sgfCBNdXRhdGlvbk1hc2sgfCBMYXlvdXRNYXNrIHwgUGFzc2l2ZU1hc2spKSAhPT1cbiAgICAgICAgTm9GbGFncyQxO1xuXG4gICAgICBpZiAoc3VidHJlZUhhc0VmZmVjdHMgfHwgcm9vdEhhc0VmZmVjdCkge1xuICAgICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcbiAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcbiAgICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KERpc2NyZXRlRXZlbnRQcmlvcml0eSk7XG4gICAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDsgLy8gUmVzZXQgdGhpcyB0byBudWxsIGJlZm9yZSBjYWxsaW5nIGxpZmVjeWNsZXNcblxuICAgICAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSBudWxsOyAvLyBUaGUgY29tbWl0IHBoYXNlIGlzIGJyb2tlbiBpbnRvIHNldmVyYWwgc3ViLXBoYXNlcy4gV2UgZG8gYSBzZXBhcmF0ZSBwYXNzXG4gICAgICAgIC8vIG9mIHRoZSBlZmZlY3QgbGlzdCBmb3IgZWFjaCBwaGFzZTogYWxsIG11dGF0aW9uIGVmZmVjdHMgY29tZSBiZWZvcmUgYWxsXG4gICAgICAgIC8vIGxheW91dCBlZmZlY3RzLCBhbmQgc28gb24uXG4gICAgICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBhIFwiYmVmb3JlIG11dGF0aW9uXCIgcGhhc2UuIFdlIHVzZSB0aGlzIHBoYXNlIHRvIHJlYWQgdGhlXG4gICAgICAgIC8vIHN0YXRlIG9mIHRoZSBob3N0IHRyZWUgcmlnaHQgYmVmb3JlIHdlIG11dGF0ZSBpdC4gVGhpcyBpcyB3aGVyZVxuICAgICAgICAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBjYWxsZWQuXG5cbiAgICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tbWl0IHRpbWUgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQcm9maWxlcnMgaW4gdGhpc1xuICAgICAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmssIGxhbmVzKTtcbiAgICAgICAgLy8gdGhlIG11dGF0aW9uIHBoYXNlLCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0cmVlIGlzIHN0aWxsIGN1cnJlbnQgZHVyaW5nXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBsYXlvdXQgcGhhc2UsIHNvIHRoYXQgdGhlIGZpbmlzaGVkXG4gICAgICAgIC8vIHdvcmsgaXMgY3VycmVudCBkdXJpbmcgY29tcG9uZW50RGlkTW91bnQvVXBkYXRlLlxuXG4gICAgICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIGxheW91dCBwaGFzZSwgd2hlcmUgd2UgY2FsbCBlZmZlY3RzIHRoYXQgcmVhZFxuXG4gICAgICAgIGNvbW1pdExheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCByb290LCBsYW5lcyk7XG4gICAgICAgIC8vIG9wcG9ydHVuaXR5IHRvIHBhaW50LlxuXG4gICAgICAgIHJlcXVlc3RQYWludCgpO1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIFJlc2V0IHRoZSBwcmlvcml0eSB0byB0aGUgcHJldmlvdXMgbm9uLXN5bmMgdmFsdWUuXG5cbiAgICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHkpO1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBlZmZlY3RzLlxuICAgICAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE1lYXN1cmUgdGhlc2UgYW55d2F5IHNvIHRoZSBmbGFtZWdyYXBoIGV4cGxpY2l0bHkgc2hvd3MgdGhhdCB0aGVyZSB3ZXJlXG4gICAgICAgIC8vIG5vIGVmZmVjdHMuXG4gICAgICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHJlcG9ydCB0aGlzLlxuXG4gICAgICAgIHtcbiAgICAgICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cztcblxuICAgICAgaWYgKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIC8vIFRoaXMgY29tbWl0IGhhcyBwYXNzaXZlIGVmZmVjdHMuIFN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZW0uIEJ1dCBkb24ndFxuICAgICAgICAvLyBzY2hlZHVsZSBhIGNhbGxiYWNrIHVudGlsIGFmdGVyIGZsdXNoaW5nIGxheW91dCB3b3JrLlxuICAgICAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgICAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3Q7XG4gICAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gbGFuZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICAgICAgICByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgYWdhaW4sIHNpbmNlIGFuIGVmZmVjdCBtaWdodCBoYXZlIHVwZGF0ZWQgaXRcblxuICAgICAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lczsgLy8gQ2hlY2sgaWYgdGhlcmUncyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3RcbiAgICAgIC8vIFRPRE86IFRoaXMgaXMgcGFydCBvZiB0aGUgYGNvbXBvbmVudERpZENhdGNoYCBpbXBsZW1lbnRhdGlvbi4gSXRzIHB1cnBvc2VcbiAgICAgIC8vIGlzIHRvIGRldGVjdCB3aGV0aGVyIHNvbWV0aGluZyBtaWdodCBoYXZlIGNhbGxlZCBzZXRTdGF0ZSBpbnNpZGVcbiAgICAgIC8vIGBjb21wb25lbnREaWRDYXRjaGAuIFRoZSBtZWNoYW5pc20gaXMga25vd24gdG8gYmUgZmxhd2VkIGJlY2F1c2UgYHNldFN0YXRlYFxuICAgICAgLy8gaW5zaWRlIGBjb21wb25lbnREaWRDYXRjaGAgaXMgaXRzZWxmIGZsYXdlZCDigJQgdGhhdCdzIHdoeSB3ZSByZWNvbW1lbmRcbiAgICAgIC8vIGBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3JgIGluc3RlYWQuIEhvd2V2ZXIsIGl0IGNvdWxkIGJlIGltcHJvdmVkIGJ5XG4gICAgICAvLyBjaGVja2luZyBpZiByZW1haW5pbmdMYW5lcyBpbmNsdWRlcyBTeW5jIHdvcmssIGluc3RlYWQgb2Ygd2hldGhlciB0aGVyZSdzXG4gICAgICAvLyBhbnkgd29yayByZW1haW5pbmcgYXQgYWxsICh3aGljaCB3b3VsZCBhbHNvIGluY2x1ZGUgc3R1ZmYgbGlrZSBTdXNwZW5zZVxuICAgICAgLy8gcmV0cmllcyBvciB0cmFuc2l0aW9ucykuIEl0J3MgYmVlbiBsaWtlIHRoaXMgZm9yIGEgd2hpbGUsIHRob3VnaCwgc28gZml4aW5nXG4gICAgICAvLyBpdCBwcm9iYWJseSBpc24ndCB0aGF0IHVyZ2VudC5cblxuICAgICAgaWYgKHJlbWFpbmluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmssIHdlIGNhbiBjbGVhciB0aGUgc2V0IG9mIGFscmVhZHkgZmFpbGVkXG4gICAgICAgIC8vIGVycm9yIGJvdW5kYXJpZXMuXG4gICAgICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgICBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9uQ29tbWl0Um9vdChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICAgICAge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICByb290Lm1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcblxuICAgICAgaWYgKHJlY292ZXJhYmxlRXJyb3JzICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZXJlIHdlcmUgZXJyb3JzIGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IHJlY292ZXJlZCBmcm9tIHRoZW0gd2l0aG91dFxuICAgICAgICAvLyBuZWVkaW5nIHRvIHN1cmZhY2UgaXQgdG8gdGhlIFVJLiBXZSBsb2cgdGhlbSBoZXJlLlxuICAgICAgICB2YXIgb25SZWNvdmVyYWJsZUVycm9yID0gcm9vdC5vblJlY292ZXJhYmxlRXJyb3I7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvdmVyYWJsZUVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciByZWNvdmVyYWJsZUVycm9yID0gcmVjb3ZlcmFibGVFcnJvcnNbaV07XG4gICAgICAgICAgdmFyIGVycm9ySW5mbyA9IG1ha2VFcnJvckluZm8oXG4gICAgICAgICAgICByZWNvdmVyYWJsZUVycm9yLmRpZ2VzdCxcbiAgICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3Iuc3RhY2tcbiAgICAgICAgICApO1xuICAgICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcihyZWNvdmVyYWJsZUVycm9yLnZhbHVlLCBlcnJvckluZm8pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yJDEgPSBmaXJzdFVuY2F1Z2h0RXJyb3I7XG4gICAgICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgICAgIHRocm93IGVycm9yJDE7XG4gICAgICB9IC8vIElmIHRoZSBwYXNzaXZlIGVmZmVjdHMgYXJlIHRoZSByZXN1bHQgb2YgYSBkaXNjcmV0ZSByZW5kZXIsIGZsdXNoIHRoZW1cbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCB0YXNrIHNvIHRoYXQgdGhlIHJlc3VsdCBpc1xuICAgICAgLy8gaW1tZWRpYXRlbHkgb2JzZXJ2YWJsZS4gT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgdGhhdCB0aGV5IGFyZSBub3RcbiAgICAgIC8vIG9yZGVyLWRlcGVuZGVudCBhbmQgZG8gbm90IG5lZWQgdG8gYmUgb2JzZXJ2ZWQgYnkgZXh0ZXJuYWwgc3lzdGVtcywgc28gd2VcbiAgICAgIC8vIGNhbiB3YWl0IHVudGlsIGFmdGVyIHBhaW50LlxuICAgICAgLy8gVE9ETzogV2UgY2FuIG9wdGltaXplIHRoaXMgYnkgbm90IHNjaGVkdWxpbmcgdGhlIGNhbGxiYWNrIGVhcmxpZXIuIFNpbmNlIHdlXG4gICAgICAvLyBjdXJyZW50bHkgc2NoZWR1bGUgdGhlIGNhbGxiYWNrIGluIG11bHRpcGxlIHBsYWNlcywgd2lsbCB3YWl0IHVudGlsIHRob3NlXG4gICAgICAvLyBhcmUgY29uc29saWRhdGVkLlxuXG4gICAgICBpZiAoXG4gICAgICAgIGluY2x1ZGVzU3luY0xhbmUocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMpICYmXG4gICAgICAgIHJvb3QudGFnICE9PSBMZWdhY3lSb290XG4gICAgICApIHtcbiAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgfSAvLyBSZWFkIHRoaXMgYWdhaW4sIHNpbmNlIGEgcGFzc2l2ZSBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cbiAgICAgIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7IC8vIENoZWNrIGlmIHRoaXMgcmVuZGVyIHNjaGVkdWxlZCBhIGNhc2NhZGluZyBzeW5jaHJvbm91cyB1cGRhdGUuIFRoaXMgaXMgYVxuICAgICAgLy8gaGV1cnN0aWMgdG8gZGV0ZWN0IGluZmluaXRlIHVwZGF0ZSBsb29wcy4gV2UgYXJlIGludGVudGlvbmFsbHkgZXhjbHVkaW5nXG4gICAgICAvLyBoeWRyYXRpb24gbGFuZXMgaW4gdGhpcyBjaGVjaywgYmVjYXVzZSByZW5kZXIgdHJpZ2dlcmVkIGJ5IHNlbGVjdGl2ZVxuICAgICAgLy8gaHlkcmF0aW9uIGlzIGNvbmNlcHR1YWxseSBub3QgYW4gdXBkYXRlLlxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIFdhcyB0aGUgZmluaXNoZWQgcmVuZGVyIHRoZSByZXN1bHQgb2YgYW4gdXBkYXRlIChub3QgaHlkcmF0aW9uKT9cbiAgICAgICAgaW5jbHVkZXNTb21lTGFuZShsYW5lcywgVXBkYXRlTGFuZXMpICYmIC8vIERpZCBpdCBzY2hlZHVsZSBhIHN5bmMgdXBkYXRlP1xuICAgICAgICBpbmNsdWRlc1NvbWVMYW5lKHJlbWFpbmluZ0xhbmVzLCBTeW5jVXBkYXRlTGFuZXMpXG4gICAgICApIHtcbiAgICAgICAge1xuICAgICAgICAgIG1hcmtOZXN0ZWRVcGRhdGVTY2hlZHVsZWQoKTtcbiAgICAgICAgfSAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByb290IHN5bmNocm9ub3VzbHkgcmUtcmVuZGVycyB3aXRob3V0XG4gICAgICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG5cbiAgICAgICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgICAgIG5lc3RlZFVwZGF0ZUNvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3Q7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG4gICAgICBmbHVzaFN5bmNXb3JrT25BbGxSb290cygpO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRXJyb3JJbmZvKGRpZ2VzdCwgY29tcG9uZW50U3RhY2spIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IHtcbiAgICAgICAgICBjb21wb25lbnRTdGFjazogY29tcG9uZW50U3RhY2ssXG4gICAgICAgICAgZGlnZXN0OiBkaWdlc3RcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9ySW5mbywgXCJkaWdlc3RcIiwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAnWW91IGFyZSBhY2Nlc3NpbmcgXCJkaWdlc3RcIiBmcm9tIHRoZSBlcnJvckluZm8gb2JqZWN0IHBhc3NlZCB0byBvblJlY292ZXJhYmxlRXJyb3IuJyArXG4gICAgICAgICAgICAgICAgXCIgVGhpcyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdC5cIiArXG4gICAgICAgICAgICAgICAgXCIgVG8gYWNjZXNzIHRoZSBkaWdlc3Qgb2YgYW4gRXJyb3IgbG9vayBmb3IgdGhpcyBwcm9wZXJ0eSBvbiB0aGUgRXJyb3IgaW5zdGFuY2UgaXRzZWxmLlwiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gZGlnZXN0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvckluZm87XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgICAgIC8vIFJldHVybnMgd2hldGhlciBwYXNzaXZlIGVmZmVjdHMgd2VyZSBmbHVzaGVkLlxuICAgICAgLy8gVE9ETzogQ29tYmluZSB0aGlzIGNoZWNrIHdpdGggdGhlIG9uZSBpbiBmbHVzaFBhc3NpdmVFRmZlY3RzSW1wbC4gV2Ugc2hvdWxkXG4gICAgICAvLyBwcm9iYWJseSBqdXN0IGNvbWJpbmUgdGhlIHR3byBmdW5jdGlvbnMuIEkgYmVsaWV2ZSB0aGV5IHdlcmUgb25seSBzZXBhcmF0ZVxuICAgICAgLy8gaW4gdGhlIGZpcnN0IHBsYWNlIGJlY2F1c2Ugd2UgdXNlZCB0byB3cmFwIGl0IHdpdGhcbiAgICAgIC8vIGBTY2hlZHVsZXIucnVuV2l0aFByaW9yaXR5YCwgd2hpY2ggYWNjZXB0cyBhIGZ1bmN0aW9uLiBCdXQgbm93IHdlIHRyYWNrIHRoZVxuICAgICAgLy8gcHJpb3JpdHkgd2l0aGluIFJlYWN0IGl0c2VsZiwgc28gd2UgY2FuIG11dGF0ZSB0aGUgdmFyaWFibGUgZGlyZWN0bHkuXG4gICAgICBpZiAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHJlbmRlclByaW9yaXR5ID0gbGFuZXNUb0V2ZW50UHJpb3JpdHkocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMpO1xuICAgICAgICB2YXIgcHJpb3JpdHkgPSBsb3dlckV2ZW50UHJpb3JpdHkoRGVmYXVsdEV2ZW50UHJpb3JpdHksIHJlbmRlclByaW9yaXR5KTtcbiAgICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbiAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmlvcml0eSk7XG4gICAgICAgICAgcmV0dXJuIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHkpO1xuICAgICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjsgLy8gT25jZSBwYXNzaXZlIGVmZmVjdHMgaGF2ZSBydW4gZm9yIHRoZSB0cmVlIC0gZ2l2aW5nIGNvbXBvbmVudHMgYVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3QoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgcGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdHMucHVzaChmaWJlcik7XG5cbiAgICAgICAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCkge1xuICAgICAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gQ2FjaGUgYW5kIGNsZWFyIHRoZSB0cmFuc2l0aW9ucyBmbGFnXG4gICAgICB2YXIgcm9vdCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICAgICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsOyAvLyBUT0RPOiBUaGlzIGlzIHNvbWV0aW1lcyBvdXQgb2Ygc3luYyB3aXRoIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzLlxuICAgICAgLy8gRmlndXJlIG91dCB3aHkgYW5kIGZpeCBpdC4gSXQncyBub3QgY2F1c2luZyBhbnkga25vd24gaXNzdWVzIChwcm9iYWJseVxuICAgICAgLy8gYmVjYXVzZSBpdCdzIG9ubHkgdXNlZCBmb3IgcHJvZmlsaW5nKSwgYnV0IGl0J3MgYSByZWZhY3RvciBoYXphcmQuXG5cbiAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcblxuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzKHJvb3QuY3VycmVudCk7XG4gICAgICBjb21taXRQYXNzaXZlTW91bnRFZmZlY3RzKHJvb3QsIHJvb3QuY3VycmVudCk7IC8vIFRPRE86IE1vdmUgdG8gY29tbWl0UGFzc2l2ZU1vdW50RWZmZWN0c1xuXG4gICAgICB7XG4gICAgICAgIHZhciBwcm9maWxlckVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZVByb2ZpbGVyRWZmZWN0cztcbiAgICAgICAgcGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2ZpbGVyRWZmZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBmaWJlciA9IHByb2ZpbGVyRWZmZWN0c1tpXTtcbiAgICAgICAgICBjb21taXRQYXNzaXZlRWZmZWN0RHVyYXRpb25zKHJvb3QsIGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICAgICAgZmx1c2hTeW5jV29ya09uQWxsUm9vdHMoKTtcblxuICAgICAge1xuICAgICAgICAvLyBJZiBhZGRpdGlvbmFsIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIHNjaGVkdWxlZCwgaW5jcmVtZW50IGEgY291bnRlci4gSWYgdGhpc1xuICAgICAgICAvLyBleGNlZWRzIHRoZSBsaW1pdCwgd2UnbGwgZmlyZSBhIHdhcm5pbmcuXG4gICAgICAgIGlmIChkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgICAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCsrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgICAgICAgICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IHJvb3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgICAgfSAvLyBUT0RPOiBNb3ZlIHRvIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHNcblxuICAgICAgb25Qb3N0Q29tbWl0Um9vdChyb290KTtcblxuICAgICAge1xuICAgICAgICB2YXIgc3RhdGVOb2RlID0gcm9vdC5jdXJyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkICE9PSBudWxsICYmXG4gICAgICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgICAgIGlmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9PT0gbnVsbCkge1xuICAgICAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW2luc3RhbmNlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQoaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcihlcnJvcikge1xuICAgICAgaWYgKCFoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgICAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb25VbmNhdWdodEVycm9yID0gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yO1xuXG4gICAgZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgdXBkYXRlLCBTeW5jTGFuZSk7XG5cbiAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSk7XG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGVycm9yJDFcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgcmVwb3J0VW5jYXVnaHRFcnJvckluREVWKGVycm9yJDEpO1xuICAgICAgICBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QoZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc291cmNlRmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgICAgIC8vIGl0c2VsZiBzaG91bGQgY2FwdHVyZSBpdC5cbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvciQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmliZXIgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yO1xuXG4gICAgICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChmaWJlciwgc291cmNlRmliZXIsIGVycm9yJDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgdmFyIGN0b3IgPSBmaWJlci50eXBlO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yJDEsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSk7XG4gICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEF0dGVtcHRlZCB0byBjYXB0dXJlIGEgY29tbWl0IHBoYXNlIGVycm9yIFwiICtcbiAgICAgICAgICAgIFwiaW5zaWRlIGEgZGV0YWNoZWQgdHJlZS4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuIFBvdGVudGlhbCBcIiArXG4gICAgICAgICAgICBcImNhdXNlcyBpbmNsdWRlIGRlbGV0aW5nIHRoZSBzYW1lIGZpYmVyIG1vcmUgdGhhbiBvbmNlLCBjb21taXR0aW5nIGFuIFwiICtcbiAgICAgICAgICAgIFwiYWxyZWFkeS1maW5pc2hlZCB0cmVlLCBvciBhbiBpbmNvbnNpc3RlbnQgcmV0dXJuIHBvaW50ZXIuXFxuXFxuXCIgK1xuICAgICAgICAgICAgXCJFcnJvciBtZXNzYWdlOlxcblxcbiVzXCIsXG4gICAgICAgICAgZXJyb3IkMVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gICAgICAvLyBBdHRhY2ggYSBwaW5nIGxpc3RlbmVyXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGRhdGEgbWlnaHQgcmVzb2x2ZSBiZWZvcmUgd2UgaGF2ZSBhIGNoYW5jZSB0byBjb21taXQgdGhlIGZhbGxiYWNrLiBPcixcbiAgICAgIC8vIGluIHRoZSBjYXNlIG9mIGEgcmVmcmVzaCwgd2UnbGwgbmV2ZXIgY29tbWl0IGEgZmFsbGJhY2suIFNvIHdlIG5lZWQgdG9cbiAgICAgIC8vIGF0dGFjaCBhIGxpc3RlbmVyIG5vdy4gV2hlbiBpdCByZXNvbHZlcyAoXCJwaW5nc1wiKSwgd2UgY2FuIGRlY2lkZSB3aGV0aGVyIHRvXG4gICAgICAvLyB0cnkgcmVuZGVyaW5nIHRoZSB0cmVlIGFnYWluLlxuICAgICAgLy9cbiAgICAgIC8vIE9ubHkgYXR0YWNoIGEgbGlzdGVuZXIgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIHRoZSBsYW5lc1xuICAgICAgLy8gd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyAod2hpY2ggYWN0cyBsaWtlIGEgXCJ0aHJlYWQgSURcIiBoZXJlKS5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBpbiBjb25jdXJyZW50IG1vZGUuIExlZ2FjeSBTdXNwZW5zZSBhbHdheXNcbiAgICAgIC8vIGNvbW1pdHMgZmFsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZXJlIGFyZSBubyBwaW5ncy5cbiAgICAgIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgICAgIHZhciB0aHJlYWRJRHM7XG5cbiAgICAgIGlmIChwaW5nQ2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG4gICAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQod2FrZWFibGUpO1xuXG4gICAgICAgIGlmICh0aHJlYWRJRHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhyZWFkSURzLmhhcyhsYW5lcykpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gdHJ1ZTsgLy8gTWVtb2l6ZSB1c2luZyB0aGUgdGhyZWFkIElEIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cblxuICAgICAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKTtcbiAgICAgICAgdmFyIHBpbmcgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcyk7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHdvcmsgc3RpbGwsIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHVwZGF0ZXJzXG4gICAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3YWtlYWJsZS50aGVuKHBpbmcsIHBpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHdha2VhYmxlLCBwaW5nZWRMYW5lcykge1xuICAgICAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gICAgICBpZiAocGluZ0NhY2hlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICAgICAgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcbiAgICAgIHdhcm5JZlN1c3BlbnNlUmVzb2x1dGlvbk5vdFdyYXBwZWRXaXRoQWN0REVWKHJvb3QpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJlxuICAgICAgICBpc1N1YnNldE9mTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHBpbmdlZExhbmVzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFJlY2VpdmVkIGEgcGluZyBhdCB0aGUgc2FtZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHlcbiAgICAgICAgLy8gcmVuZGVyaW5nLiBXZSBtaWdodCB3YW50IHRvIHJlc3RhcnQgdGhpcyByZW5kZXIuIFRoaXMgc2hvdWxkIG1pcnJvclxuICAgICAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgICAgICAvLyBUT0RPOiBJZiB3ZSdyZSByZW5kZXJpbmcgc3luYyBlaXRoZXIgZHVlIHRvIFN5bmMsIEJhdGNoZWQgb3IgZXhwaXJlZCxcbiAgICAgICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IG5ldmVyIHJlc3RhcnQuXG4gICAgICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgICAgIC8vIHNvIHdlIGNhbiBhbHdheXMgcmVzdGFydC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCAmJlxuICAgICAgICAgICAgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiZcbiAgICAgICAgICAgIG5vdyQxKCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEZvcmNlIGEgcmVzdGFydCBmcm9tIHRoZSByb290IGJ5IHVud2luZGluZyB0aGUgc3RhY2suIFVubGVzcyB0aGlzIGlzXG4gICAgICAgICAgLy8gYmVpbmcgY2FsbGVkIGZyb20gdGhlIHJlbmRlciBwaGFzZSwgYmVjYXVzZSB0aGF0IHdvdWxkIGNhdXNlIGEgY3Jhc2guXG4gICAgICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNhbid0IHJlc3RhcnQgcmlnaHQgbm93LCB3ZSBtaWdodCBnZXQgYW5cbiAgICAgICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLFxuICAgICAgICAgICAgcGluZ2VkTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gICAgICAvLyBUaGUgYm91bmRhcnkgZmliZXIgKGEgU3VzcGVuc2UgY29tcG9uZW50IG9yIFN1c3BlbnNlTGlzdCBjb21wb25lbnQpXG4gICAgICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAgICAgLy8gc3VzcGVuZGVkIGl0IGhhcyByZXNvbHZlZCwgd2hpY2ggbWVhbnMgYXQgbGVhc3QgcGFydCBvZiB0aGUgdHJlZSB3YXNcbiAgICAgIC8vIGxpa2VseSB1bmJsb2NrZWQuIFRyeSByZW5kZXJpbmcgYWdhaW4sIGF0IGEgbmV3IGxhbmVzLlxuICAgICAgaWYgKHJldHJ5TGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgIC8vIFRPRE86IEFzc2lnbiB0aGlzIHRvIGBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZWA/IHRvIGF2b2lkXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IGVudGFuZ2xlbWVudD9cbiAgICAgICAgcmV0cnlMYW5lID0gcmVxdWVzdFJldHJ5TGFuZShib3VuZGFyeUZpYmVyKTtcbiAgICAgIH0gLy8gVE9ETzogU3BlY2lhbCBjYXNlIGlkbGUgcHJpb3JpdHk/XG5cbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCByZXRyeUxhbmUpO1xuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeShib3VuZGFyeUZpYmVyKSB7XG4gICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHZhciByZXRyeUxhbmUgPSBOb0xhbmU7XG5cbiAgICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHJ5TGFuZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lO1xuICAgICAgfVxuXG4gICAgICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgICAgIHZhciByZXRyeUxhbmUgPSBOb0xhbmU7IC8vIERlZmF1bHRcblxuICAgICAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAgICAgIHN3aXRjaCAoYm91bmRhcnlGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBib3VuZGFyeUZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgcmV0cnlDYWNoZSA9IGluc3RhbmNlLl9yZXRyeUNhY2hlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlBpbmdlZCB1bmtub3duIHN1c3BlbnNlIGJvdW5kYXJ5IHR5cGUuIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJldHJ5Q2FjaGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAgICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgICAgICByZXRyeUNhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd0lmSW5maW5pdGVVcGRhdGVMb29wRGV0ZWN0ZWQoKSB7XG4gICAgICBpZiAobmVzdGVkVXBkYXRlQ291bnQgPiBORVNURURfVVBEQVRFX0xJTUlUKSB7XG4gICAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbiAgICAgICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGw7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICBcInJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgXCIgK1xuICAgICAgICAgICAgXCJjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvIFwiICtcbiAgICAgICAgICAgIFwicHJldmVudCBpbmZpbml0ZSBsb29wcy5cIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQpIHtcbiAgICAgICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgICAgICAgIHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICAgIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArXG4gICAgICAgICAgICAgIFwiaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gXCIgK1xuICAgICAgICAgICAgICBcImV2ZXJ5IHJlbmRlci5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKSB7XG4gICAgICB7XG4gICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcbiAgICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCwgaGFzUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGxlZ2FjeUNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290LmN1cnJlbnQsIGhhc1Bhc3NpdmVFZmZlY3RzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxlZ2FjeUNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihmaWJlciwgaGFzUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIC8vIFRPRE8gKFN0cmljdEVmZmVjdHMpIFNob3VsZCB3ZSBzZXQgYSBtYXJrZXIgb24gdGhlIHJvb3QgaWYgaXQgY29udGFpbnMgc3RyaWN0IGVmZmVjdHNcbiAgICAgIC8vIHNvIHdlIGRvbid0IHRyYXZlcnNlIHVubmVjZXNzYXJpbHk/IHNpbWlsYXIgdG8gc3VidHJlZUZsYWdzIGJ1dCBqdXN0IGF0IHRoZSByb290IGxldmVsLlxuICAgICAgLy8gTWF5YmUgbm90IGEgYmlnIGRlYWwgc2luY2UgdGhpcyBpcyBERVYgb25seSBiZWhhdmlvci5cbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICBpbnZva2VFZmZlY3RzSW5EZXYoZmliZXIsIE1vdW50TGF5b3V0RGV2LCBpbnZva2VMYXlvdXRFZmZlY3RVbm1vdW50SW5ERVYpO1xuXG4gICAgICBpZiAoaGFzUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgaW52b2tlRWZmZWN0c0luRGV2KFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIE1vdW50UGFzc2l2ZURldixcbiAgICAgICAgICBpbnZva2VQYXNzaXZlRWZmZWN0VW5tb3VudEluREVWXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGludm9rZUVmZmVjdHNJbkRldihmaWJlciwgTW91bnRMYXlvdXREZXYsIGludm9rZUxheW91dEVmZmVjdE1vdW50SW5ERVYpO1xuXG4gICAgICBpZiAoaGFzUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgaW52b2tlRWZmZWN0c0luRGV2KFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIE1vdW50UGFzc2l2ZURldixcbiAgICAgICAgICBpbnZva2VQYXNzaXZlRWZmZWN0TW91bnRJbkRFVlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUVmZmVjdHNJbkRldihmaXJzdENoaWxkLCBmaWJlckZsYWdzLCBpbnZva2VFZmZlY3RGbikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaXJzdENoaWxkO1xuICAgICAgdmFyIHN1YnRyZWVSb290ID0gbnVsbDtcblxuICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJpbWFyeVN1YnRyZWVGbGFnID0gY3VycmVudC5zdWJ0cmVlRmxhZ3MgJiBmaWJlckZsYWdzO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXJyZW50ICE9PSBzdWJ0cmVlUm9vdCAmJlxuICAgICAgICAgIGN1cnJlbnQuY2hpbGQgIT0gbnVsbCAmJlxuICAgICAgICAgIHByaW1hcnlTdWJ0cmVlRmxhZyAhPT0gTm9GbGFncyQxXG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIGZpYmVyRmxhZ3MpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIGludm9rZUVmZmVjdEZuKGN1cnJlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyZW50LnNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBzdWJ0cmVlUm9vdCA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcbiAgICBmdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0YWcgIT09IEluZGV0ZXJtaW5hdGVDb21wb25lbnQgJiZcbiAgICAgICAgICB0YWcgIT09IEhvc3RSb290ICYmXG4gICAgICAgICAgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJlxuICAgICAgICAgIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiZcbiAgICAgICAgICB0YWcgIT09IEZvcndhcmRSZWYgJiZcbiAgICAgICAgICB0YWcgIT09IE1lbW9Db21wb25lbnQgJiZcbiAgICAgICAgICB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID1cbiAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlJlYWN0Q29tcG9uZW50XCI7XG5cbiAgICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW1xuICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGEgY29tcG9uZW50IHRoYXQgaGFzbid0IG1vdW50ZWQgeWV0LiBcIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgXCIgK1xuICAgICAgICAgICAgICBcImFzeW5jaHJvbm91c2x5IGxhdGVyIGNhbGxzIHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byBcIiArXG4gICAgICAgICAgICAgIFwidXNlRWZmZWN0IGluc3RlYWQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYmVnaW5Xb3JrO1xuXG4gICAge1xuICAgICAgdmFyIGR1bW15RmliZXIgPSBudWxsO1xuXG4gICAgICBiZWdpbldvcmsgPSBmdW5jdGlvbiAoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpIHtcbiAgICAgICAgLy8gSWYgYSBjb21wb25lbnQgdGhyb3dzIGFuIGVycm9yLCB3ZSByZXBsYXkgaXQgYWdhaW4gaW4gYSBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGRpc3BhdGNoZWQgZXZlbnQsIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIHdpbGwgdHJlYXQgaXQgYXMgYW4gdW5jYXVnaHRcbiAgICAgICAgLy8gZXJyb3IgU2VlIFJlYWN0RXJyb3JVdGlscyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgICAgLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY29weSB0aGUgd29yay1pbi1wcm9ncmVzcyBvbnRvIGEgZHVtbXlcbiAgICAgICAgLy8gZmliZXIuIElmIGJlZ2luV29yayB0aHJvd3MsIHdlJ2xsIHVzZSB0aGlzIHRvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICAgICAgdmFyIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5ID0gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoXG4gICAgICAgICAgZHVtbXlGaWJlcixcbiAgICAgICAgICB1bml0T2ZXb3JrXG4gICAgICAgICk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuICAgICAgICB9IGNhdGNoIChvcmlnaW5hbEVycm9yKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGlkU3VzcGVuZE9yRXJyb3JXaGlsZUh5ZHJhdGluZ0RFVigpIHx8XG4gICAgICAgICAgICBvcmlnaW5hbEVycm9yID09PSBTdXNwZW5zZUV4Y2VwdGlvbiB8fFxuICAgICAgICAgICAgb3JpZ2luYWxFcnJvciA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uIHx8XG4gICAgICAgICAgICAob3JpZ2luYWxFcnJvciAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICB0eXBlb2Ygb3JpZ2luYWxFcnJvci50aGVuID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBEb24ndCByZXBsYXkgcHJvbWlzZXMuXG4gICAgICAgICAgICAvLyBEb24ndCByZXBsYXkgZXJyb3JzIGlmIHdlIGFyZSBoeWRyYXRpbmcgYW5kIGhhdmUgYWxyZWFkeSBzdXNwZW5kZWQgb3IgaGFuZGxlZCBhbiBlcnJvclxuICAgICAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgICB9IC8vIERvbid0IHJlc2V0IGN1cnJlbnQgZGVidWcgZmliZXIsIHNpbmNlIHdlJ3JlIGFib3V0IHRvIHdvcmsgb24gdGhlXG4gICAgICAgICAgLy8gc2FtZSBmaWJlciBhZ2Fpbi5cbiAgICAgICAgICAvLyBVbndpbmQgdGhlIGZhaWxlZCBzdGFjayBmcmFtZVxuXG4gICAgICAgICAgcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kKHVuaXRPZldvcmspO1xuICAgICAgICAgIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCB1bml0T2ZXb3JrKTsgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvcGVydGllcyBvZiB0aGUgZmliZXIuXG5cbiAgICAgICAgICBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih1bml0T2ZXb3JrLCBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSk7XG5cbiAgICAgICAgICBpZiAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlciB0aW1lci5cbiAgICAgICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cbiAgICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2soXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgYmVnaW5Xb3JrJDEsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgICAgdmFyIHJlcGxheUVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiByZXBsYXlFcnJvciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICByZXBsYXlFcnJvciAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICByZXBsYXlFcnJvci5fc3VwcHJlc3NMb2dnaW5nICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBvcmlnaW5hbEVycm9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgIW9yaWdpbmFsRXJyb3IuX3N1cHByZXNzTG9nZ2luZ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIElmIHN1cHByZXNzZWQsIGxldCB0aGUgZmxhZyBjYXJyeSBvdmVyIHRvIHRoZSBvcmlnaW5hbCBlcnJvciB3aGljaCBpcyB0aGUgb25lIHdlJ2xsIHJldGhyb3cuXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBXZSBhbHdheXMgdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIGluIGNhc2UgdGhlIHNlY29uZCByZW5kZXIgcGFzcyBpcyBub3QgaWRlbXBvdGVudC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgYSBtZW1vaXplZCBmdW5jdGlvbiBvciBDb21tb25KUyBtb2R1bGUgZG9lc24ndCB0aHJvdyBhZnRlciBmaXJzdCBpbnZvY2F0aW9uLlxuXG4gICAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSBmYWxzZTtcbiAgICB2YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50O1xuXG4gICAge1xuICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChpc1JlbmRlcmluZykge1xuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgICAgIHZhciByZW5kZXJpbmdDb21wb25lbnROYW1lID1cbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgJiYgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykpIHx8XG4gICAgICAgICAgICAgICAgXCJVbmtub3duXCI7IC8vIERlZHVwZSBieSB0aGUgcmVuZGVyaW5nIGNvbXBvbmVudCBiZWNhdXNlIGl0J3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkLlxuXG4gICAgICAgICAgICAgIHZhciBkZWR1cGVLZXkgPSByZW5kZXJpbmdDb21wb25lbnROYW1lO1xuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmhhcyhkZWR1cGVLZXkpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQoZGVkdXBlS2V5KTtcbiAgICAgICAgICAgICAgICB2YXIgc2V0U3RhdGVDb21wb25lbnROYW1lID1cbiAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiO1xuXG4gICAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJkaWZmZXJlbnQgY29tcG9uZW50IChgJXNgKS4gVG8gbG9jYXRlIHRoZSBiYWQgc2V0U3RhdGUoKSBjYWxsIGluc2lkZSBgJXNgLCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NldHN0YXRlLWluLXJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgc2V0U3RhdGVDb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIHJlbmRlcmluZ0NvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uIChzdWNoIGFzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuXCJcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCBsYW5lcykge1xuICAgICAge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxpbmdGaWJlcikge1xuICAgICAgICAgICAgYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIHNjaGVkdWxpbmdGaWJlciwgbGFuZXMpO1xuICAgICAgICAgIH0pOyAvLyBUaGlzIGZ1bmN0aW9uIGludGVudGlvbmFsbHkgZG9lcyBub3QgY2xlYXIgbWVtb2l6ZWQgdXBkYXRlcnMuXG4gICAgICAgICAgLy8gVGhvc2UgbWF5IHN0aWxsIGJlIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGNvbW1pdFxuICAgICAgICAgIC8vIGFuZCBhIGZ1dHVyZSBvbmUgKGUuZy4gU3VzcGVuc2UpLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBmYWtlQWN0Q2FsbGJhY2tOb2RlID0ge307IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spIHtcbiAgICAgIHtcbiAgICAgICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhbiBgYWN0YCBzY29wZSwgYnlwYXNzIFNjaGVkdWxlciBhbmQgcHVzaCB0b1xuICAgICAgICAvLyB0aGUgYGFjdGAgcXVldWUgaW5zdGVhZC5cbiAgICAgICAgdmFyIGFjdFF1ZXVlID0gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudDtcblxuICAgICAgICBpZiAoYWN0UXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBhY3RRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICByZXR1cm4gZmFrZUFjdENhbGxiYWNrTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFjayQyKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpIHtcbiAgICAgIC8vIE5ldmVyIGZvcmNlIGZsdXNoIGluIHByb2R1Y3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdldCBzdHJpcHBlZCBvdXQuXG4gICAgICByZXR1cm4gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuSWZVcGRhdGVzTm90V3JhcHBlZFdpdGhBY3RERVYoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICAgIGlmICghaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSkge1xuICAgICAgICAgICAgLy8gTm90IGluIGFuIGFjdCBlbnZpcm9ubWVudC4gTm8gbmVlZCB0byB3YXJuLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBMZWdhY3kgbW9kZSBoYXMgYWRkaXRpb25hbCBjYXNlcyB3aGVyZSB3ZSBzdXBwcmVzcyBhIHdhcm5pbmcuXG4gICAgICAgICAgaWYgKCFpc0xlZ2FjeUFjdEVudmlyb25tZW50KCkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBpbiBhbiBhY3QgZW52aXJvbm1lbnQuIE5vIG5lZWQgdG8gd2Fybi5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgICAgICAvLyBMZWdhY3kgbW9kZSBkb2Vzbid0IHdhcm4gaWYgdGhlIHVwZGF0ZSBpcyBiYXRjaGVkLCBpLmUuXG4gICAgICAgICAgICAvLyBiYXRjaGVkVXBkYXRlcyBvciBmbHVzaFN5bmMuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmliZXIudGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJlxuICAgICAgICAgICAgZmliZXIudGFnICE9PSBGb3J3YXJkUmVmICYmXG4gICAgICAgICAgICBmaWJlci50YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZS1ob29rcyBjb2RlLCBsZWdhY3kgbW9kZSBvbmx5XG4gICAgICAgICAgICAvLyB3YXJucyBmb3IgdXBkYXRlcyB0aGF0IG9yaWdpbmF0ZSBmcm9tIGEgaG9vay5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlIFwiICtcbiAgICAgICAgICAgICAgICBcIndyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJhY3QoKCkgPT4ge1xcblwiICtcbiAgICAgICAgICAgICAgICBcIiAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJ9KTtcXG5cIiArXG4gICAgICAgICAgICAgICAgXCIvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcblwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgK1xuICAgICAgICAgICAgICAgIFwiaW4gdGhlIGJyb3dzZXIuXCIgK1xuICAgICAgICAgICAgICAgIFwiIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3RcIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm5JZlN1c3BlbnNlUmVzb2x1dGlvbk5vdFdyYXBwZWRXaXRoQWN0REVWKHJvb3QpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmXG4gICAgICAgICAgaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSAmJlxuICAgICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIkEgc3VzcGVuZGVkIHJlc291cmNlIGZpbmlzaGVkIGxvYWRpbmcgaW5zaWRlIGEgdGVzdCwgYnV0IHRoZSBldmVudCBcIiArXG4gICAgICAgICAgICAgIFwid2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcblwiICtcbiAgICAgICAgICAgICAgXCJXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCByZXNvbHZlcyBzdXNwZW5kZWQgZGF0YSBzaG91bGQgYmUgd3JhcHBlZCBcIiArXG4gICAgICAgICAgICAgIFwiaW50byBhY3QoLi4uKTpcXG5cXG5cIiArXG4gICAgICAgICAgICAgIFwiYWN0KCgpID0+IHtcXG5cIiArXG4gICAgICAgICAgICAgIFwiICAvKiBmaW5pc2ggbG9hZGluZyBzdXNwZW5kZWQgZGF0YSAqL1xcblwiICtcbiAgICAgICAgICAgICAgXCJ9KTtcXG5cIiArXG4gICAgICAgICAgICAgIFwiLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG5cIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArXG4gICAgICAgICAgICAgIFwiaW4gdGhlIGJyb3dzZXIuXCIgK1xuICAgICAgICAgICAgICBcIiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0XCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0SXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0KGlzUnVubmluZykge1xuICAgICAge1xuICAgICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSBpc1J1bm5pbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2RlcyAqL1xuICAgIC8vIFVzZWQgYnkgUmVhY3QgUmVmcmVzaCBydW50aW1lIHRocm91Z2ggRGV2VG9vbHMgR2xvYmFsIEhvb2suXG5cbiAgICB2YXIgcmVzb2x2ZUZhbWlseSA9IG51bGw7XG4gICAgdmFyIGZhaWxlZEJvdW5kYXJpZXMgPSBudWxsO1xuICAgIHZhciBzZXRSZWZyZXNoSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICAgICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cbiAgICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAgICAgLy8gTm8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMuXG4gICAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlYWwgZm9yd2FyZFJlZi4gRG9uJ3Qgd2FudCB0byBjcmFzaCBlYXJseS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0eXBlLnJlbmRlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBGb3J3YXJkUmVmIGlzIHNwZWNpYWwgYmVjYXVzZSBpdHMgcmVzb2x2ZWQgLnR5cGUgaXMgYW4gb2JqZWN0LFxuICAgICAgICAgICAgLy8gYnV0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGhhdmUgaXRzIGlubmVyIHJlbmRlciBmdW5jdGlvbiBpbiB0aGUgbWFwLlxuICAgICAgICAgICAgLy8gSWYgdGhhdCBpbm5lciByZW5kZXIgZnVuY3Rpb24gaXMgZGlmZmVyZW50LCB3ZSdsbCBidWlsZCBhIG5ldyBmb3J3YXJkUmVmIHR5cGUuXG4gICAgICAgICAgICB2YXIgY3VycmVudFJlbmRlciA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlLnJlbmRlciAhPT0gY3VycmVudFJlbmRlcikge1xuICAgICAgICAgICAgICB2YXIgc3ludGhldGljVHlwZSA9IHtcbiAgICAgICAgICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICAgICAgICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3ludGhldGljVHlwZS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gc3ludGhldGljVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuICAgICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICAgICAge1xuICAgICAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgICAgIHZhciBuZXh0VHlwZSA9IGVsZW1lbnQudHlwZTsgLy8gSWYgd2UgZ290IGhlcmUsIHdlIGtub3cgdHlwZXMgYXJlbid0ID09PSBlcXVhbC5cblxuICAgICAgICB2YXIgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSBmYWxzZTtcbiAgICAgICAgdmFyICQkdHlwZW9mTmV4dFR5cGUgPVxuICAgICAgICAgIHR5cGVvZiBuZXh0VHlwZSA9PT0gXCJvYmplY3RcIiAmJiBuZXh0VHlwZSAhPT0gbnVsbFxuICAgICAgICAgICAgPyBuZXh0VHlwZS4kJHR5cGVvZlxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDoge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGlubmVyIHR5cGUgeWV0LlxuICAgICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBhc3N1bWUgdGhhdCB0aGUgbGF6eSBpbm5lciB0eXBlIGlzIHN0YWJsZSxcbiAgICAgICAgICAgICAgLy8gYW5kIHNvIGl0IGlzIHN1ZmZpY2llbnQgdG8gYXZvaWQgcmVjb25jaWxpbmcgaXQgYXdheS5cbiAgICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHVud3JhcCBvciBhY3R1YWxseSB1c2UgdGhlIG5ldyBsYXp5IHR5cGUuXG4gICAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBGb3J3YXJkUmVmOiB7XG4gICAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogaWYgaXQgd2FzIGJ1dCBjYW4gbm8gbG9uZ2VyIGJlIHNpbXBsZSxcbiAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHNldCB0aGlzLlxuICAgICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gLy8gQ2hlY2sgaWYgYm90aCB0eXBlcyBoYXZlIGEgZmFtaWx5IGFuZCBpdCdzIHRoZSBzYW1lIG9uZS5cblxuICAgICAgICBpZiAobmVlZHNDb21wYXJlRmFtaWxpZXMpIHtcbiAgICAgICAgICAvLyBOb3RlOiBtZW1vKCkgYW5kIGZvcndhcmRSZWYoKSB3ZSdsbCBjb21wYXJlIG91dGVyIHJhdGhlciB0aGFuIGlubmVyIHR5cGUuXG4gICAgICAgICAgLy8gVGhpcyBtZWFucyBib3RoIG9mIHRoZW0gbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHByZXNlcnZlIHN0YXRlLlxuICAgICAgICAgIC8vIElmIHdlIHVud3JhcHBlZCBhbmQgY29tcGFyZWQgdGhlIGlubmVyIHR5cGVzIGZvciB3cmFwcGVycyBpbnN0ZWFkLFxuICAgICAgICAgIC8vIHRoZW4gd2Ugd291bGQgcmlzayBmYWxzZWx5IHNheWluZyB0d28gc2VwYXJhdGUgbWVtbyhGb28pXG4gICAgICAgICAgLy8gY2FsbHMgYXJlIGVxdWl2YWxlbnQgYmVjYXVzZSB0aGV5IHdyYXAgdGhlIHNhbWUgRm9vIGZ1bmN0aW9uLlxuICAgICAgICAgIHZhciBwcmV2RmFtaWx5ID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSk7IC8vICRGbG93Rml4TWVbbm90LWEtZnVuY3Rpb25dIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHByZXZGYW1pbHkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgV2Vha1NldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgICAgICBmYWlsZWRCb3VuZGFyaWVzID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgICAgdXBkYXRlZEZhbWlsaWVzID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgICByb290LmN1cnJlbnQsXG4gICAgICAgICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAgICAgICBzdGFsZUZhbWlsaWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgc2NoZWR1bGVSb290ID0gZnVuY3Rpb24gKHJvb3QsIGVsZW1lbnQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHJvb3QuY29udGV4dCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAgICAgLy8gU3VwZXIgZWRnZSBjYXNlOiByb290IGhhcyBhIGxlZ2FjeSBfcmVuZGVyU3VidHJlZSBjb250ZXh0XG4gICAgICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgICAgIC8vIEp1c3QgaWdub3JlLiBXZSdsbCBkZWxldGUgdGhpcyB3aXRoIF9yZW5kZXJTdWJ0cmVlIGNvZGUgcGF0aCBsYXRlci5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShcbiAgICAgIGZpYmVyLFxuICAgICAgdXBkYXRlZEZhbWlsaWVzLFxuICAgICAgc3RhbGVGYW1pbGllc1xuICAgICkge1xuICAgICAge1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZWVkc1JlbmRlciA9IGZhbHNlO1xuICAgICAgICB2YXIgbmVlZHNSZW1vdW50ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKTtcblxuICAgICAgICAgIGlmIChmYW1pbHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHN0YWxlRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZEZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmFpbGVkQm91bmRhcmllcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICAgIChhbHRlcm5hdGUgIT09IG51bGwgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgICAgIGZpYmVyLl9kZWJ1Z05lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgICAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgc2libGluZyxcbiAgICAgICAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgICAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCBmYW1pbGllcykge1xuICAgICAge1xuICAgICAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdmFyIHR5cGVzID0gbmV3IFNldChcbiAgICAgICAgICBmYW1pbGllcy5tYXAoZnVuY3Rpb24gKGZhbWlseSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShcbiAgICAgICAgICByb290LmN1cnJlbnQsXG4gICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgaG9zdEluc3RhbmNlc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KFxuICAgICAgZmliZXIsXG4gICAgICB0eXBlcyxcbiAgICAgIGhvc3RJbnN0YW5jZXNcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodHlwZXMuaGFzKGNhbmRpZGF0ZVR5cGUpKSB7XG4gICAgICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNoLiBUaGlzIG9ubHkgZHJpbGxzIGRvd24gdG8gdGhlIGNsb3Nlc3QgaG9zdCBjb21wb25lbnRzLlxuICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBzZWFyY2ggZGVlcGVyIGJlY2F1c2UgZm9yIHRoZSBwdXJwb3NlIG9mIGdpdmluZ1xuICAgICAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICBob3N0SW5zdGFuY2VzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgc2libGluZyxcbiAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgaG9zdEluc3RhbmNlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoXG4gICAgICAgICAgZmliZXIsXG4gICAgICAgICAgaG9zdEluc3RhbmNlc1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChmb3VuZEhvc3RJbnN0YW5jZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGhvc3QgY2hpbGRyZW4sIGZhbGxiYWNrIHRvIGNsb3Nlc3QgaG9zdCBwYXJlbnQuXG5cbiAgICAgICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICAgICAge1xuICAgICAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgICAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fFxuICAgICAgICAgICAgbm9kZS50YWcgPT09IEhvc3RIb2lzdGFibGUgfHxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBXZSBnb3QgYSBtYXRjaC5cbiAgICAgICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7IC8vIFRoZXJlIG1heSBzdGlsbCBiZSBtb3JlLCBzbyBrZWVwIHNlYXJjaGluZy5cbiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGUgPT09IGZpYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmliZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgaGFzQmFkTWFwUG9seWZpbGw7XG5cbiAgICB7XG4gICAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgICAgICBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgYWJvdXQgYmFkIHBvbHlmaWxsc1xuICAgICAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgICAgIC8vIEluc3RhbmNlXG4gICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gICAgICB0aGlzLnR5cGUgPSBudWxsO1xuICAgICAgdGhpcy5zdGF0ZU5vZGUgPSBudWxsOyAvLyBGaWJlclxuXG4gICAgICB0aGlzLnJldHVybiA9IG51bGw7XG4gICAgICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgICAgIHRoaXMuc2libGluZyA9IG51bGw7XG4gICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVmID0gbnVsbDtcbiAgICAgIHRoaXMucmVmQ2xlYW51cCA9IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgICAgIHRoaXMubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgICB0aGlzLm1vZGUgPSBtb2RlOyAvLyBFZmZlY3RzXG5cbiAgICAgIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzJDE7XG4gICAgICB0aGlzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICAgIHRoaXMuZGVsZXRpb25zID0gbnVsbDtcbiAgICAgIHRoaXMubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdGhpcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgdG8gYXZvaWQgYSB2OCBwZXJmb3JtYW5jZSBjbGlmZi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgYmVsb3cgdG8gc21pcyBhbmQgbGF0ZXIgdXBkYXRpbmcgdGhlbSB3aXRoXG4gICAgICAgIC8vIGRvdWJsZSB2YWx1ZXMgd2lsbCBjYXVzZSBGaWJlcnMgdG8gZW5kIHVwIGhhdmluZyBzZXBhcmF0ZSBzaGFwZXMuXG4gICAgICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgICAgICAvLyBGb3J0dW5hdGVseSB0aGlzIG9ubHkgaW1wYWN0cyBERVYgYnVpbGRzLlxuICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGl0IG1ha2VzIFJlYWN0IHVudXNhYmx5IHNsb3cgZm9yIHNvbWUgYXBwbGljYXRpb25zLlxuICAgICAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBMZWFybiBtb3JlIGFib3V0IHRoaXMgaGVyZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04NTM4XG4gICAgICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgICAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47IC8vIEl0J3Mgb2theSB0byByZXBsYWNlIHRoZSBpbml0aWFsIGRvdWJsZXMgd2l0aCBzbWlzIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuICAgICAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAgICAgLy8gYW5kIGl0IHNpbXBsaWZpZXMgb3RoZXIgcHJvZmlsZXIgY29kZSAoaW5jbHVkaW5nIERldlRvb2xzKS5cblxuICAgICAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICAvLyBUaGlzIGlzbid0IGRpcmVjdGx5IHVzZWQgYnV0IGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcgaW50ZXJuYWxzOlxuICAgICAgICB0aGlzLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZGVidWdOZWVkc1JlbW91bnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFzQmFkTWFwUG9seWZpbGwgJiZcbiAgICAgICAgICB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBUaGlzIGlzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIHJhdGhlciB0aGFuIGEgUE9KTyBjb25zdHJ1Y3Rvciwgc3RpbGxcbiAgICAvLyBwbGVhc2UgZW5zdXJlIHdlIGRvIHRoZSBmb2xsb3dpbmc6XG4gICAgLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbiAgICAvLyAgICBtb3JlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHdoZW4gdGhleSBnZXQgb3B0aW1pemVkIGFuZCB0aGV5IGFyZSBhbG1vc3RcbiAgICAvLyAgICBuZXZlciBpbmxpbmVkIHByb3Blcmx5IGluIHN0YXRpYyBjb21waWxlcnMuXG4gICAgLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbiAgICAvLyAgICBhbHdheXMga25vdyB3aGVuIGl0IGlzIGEgZmliZXIuXG4gICAgLy8gMykgV2UgbWlnaHQgd2FudCB0byBleHBlcmltZW50IHdpdGggdXNpbmcgbnVtZXJpYyBrZXlzIHNpbmNlIHRoZXkgYXJlIGVhc2llclxuICAgIC8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbiAgICAvLyA0KSBXZSBjYW4gZWFzaWx5IGdvIGZyb20gYSBjb25zdHJ1Y3RvciB0byBhIGNyZWF0ZUZpYmVyIG9iamVjdCBsaXRlcmFsIGlmIHRoYXRcbiAgICAvLyAgICBpcyBmYXN0ZXIuXG4gICAgLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4gICAgLy8gICAgY29tcGF0aWJsZS5cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb25zdHJ1Y3Rvcl06IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICAgICAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICAgICAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gICAgICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgIXNob3VsZENvbnN0cnVjdCh0eXBlKSAmJlxuICAgICAgICB0eXBlLmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpID8gQ2xhc3NDb21wb25lbnQgOiBGdW5jdGlvbkNvbXBvbmVudDtcbiAgICAgIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciAkJHR5cGVvZiA9IENvbXBvbmVudC4kJHR5cGVvZjtcblxuICAgICAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG4gICAgfSAvLyBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGFsdGVybmF0ZSBmaWJlciB0byBkbyB3b3JrIG9uLlxuXG4gICAgZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgcG9vbGluZyB0ZWNobmlxdWUgYmVjYXVzZSB3ZSBrbm93IHRoYXQgd2UnbGxcbiAgICAgICAgLy8gb25seSBldmVyIG5lZWQgYXQgbW9zdCB0d28gdmVyc2lvbnMgb2YgYSB0cmVlLiBXZSBwb29sIHRoZSBcIm90aGVyXCIgdW51c2VkXG4gICAgICAgIC8vIG5vZGUgdGhhdCB3ZSdyZSBmcmVlIHRvIHJldXNlLiBUaGlzIGlzIGxhemlseSBjcmVhdGVkIHRvIGF2b2lkIGFsbG9jYXRpbmdcbiAgICAgICAgLy8gZXh0cmEgb2JqZWN0cyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIHVwZGF0ZWQuIEl0IGFsc28gYWxsb3cgdXMgdG9cbiAgICAgICAgLy8gcmVjbGFpbSB0aGUgZXh0cmEgbWVtb3J5IGlmIG5lZWRlZC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihcbiAgICAgICAgICBjdXJyZW50LnRhZyxcbiAgICAgICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICAgICAgY3VycmVudC5rZXksXG4gICAgICAgICAgY3VycmVudC5tb2RlXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIERFVi1vbmx5IGZpZWxkc1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQ7XG4gICAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGFsdGVybmF0ZS5cbiAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBOb0ZsYWdzJDE7IC8vIFRoZSBlZmZlY3RzIGFyZSBubyBsb25nZXIgdmFsaWQuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gTm9GbGFncyQxO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsO1xuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IHJlc2V0LCByYXRoZXIgdGhhbiBjb3B5LCBhY3R1YWxEdXJhdGlvbiAmIGFjdHVhbFN0YXJ0VGltZS5cbiAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgICAgIC8vIFRoaXMgaGFzIHRoZSBkb3duc2lkZSBvZiByZXNldHRpbmcgdmFsdWVzIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgcmVuZGVycyxcbiAgICAgICAgICAvLyBCdXQgd29ya3MgZm9yIHlpZWxkaW5nICh0aGUgY29tbW9uIGNhc2UpIGFuZCBzaG91bGQgc3VwcG9ydCByZXN1bWluZy5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVzZXQgYWxsIGVmZmVjdHMgZXhjZXB0IHN0YXRpYyBvbmVzLlxuICAgICAgLy8gU3RhdGljIGVmZmVjdHMgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHJlbmRlci5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBjdXJyZW50LmZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgICAgIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICAgICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9XG4gICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGxcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgICAgICAgICAgIH07IC8vIFRoZXNlIHdpbGwgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgdGhlIHBhcmVudCdzIHJlY29uY2lsaWF0aW9uXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSBjdXJyZW50LnJlZjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnJlZkNsZWFudXAgPSBjdXJyZW50LnJlZkNsZWFudXA7XG5cbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKFxuICAgICAgICAgICAgICBjdXJyZW50LnR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgfSAvLyBVc2VkIHRvIHJldXNlIGEgRmliZXIgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbiAgICBmdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgICAgIC8vIGhhdmUgc2V0IHRoZSB2YWx1ZXMgdG8gYmVmb3JlIGR1cmluZyB0aGUgZmlyc3QgcGFzcy4gSWRlYWxseSB0aGlzIHdvdWxkbid0XG4gICAgICAvLyBiZSBuZWNlc3NhcnkgYnV0IHVuZm9ydHVuYXRlbHkgbWFueSBjb2RlIHBhdGhzIHJlYWRzIGZyb20gdGhlIHdvcmtJblByb2dyZXNzXG4gICAgICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAgICAgLy8gV2UgYXNzdW1lIHBlbmRpbmdQcm9wcywgaW5kZXgsIGtleSwgcmVmLCByZXR1cm4gYXJlIHN0aWxsIHVudG91Y2hlZCB0b1xuICAgICAgLy8gYXZvaWQgZG9pbmcgYW5vdGhlciByZWNvbmNpbGlhdGlvbi5cbiAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgZmxhZ3MgYnV0IGtlZXAgYW55IFBsYWNlbWVudCB0YWdzLCBzaW5jZSB0aGF0J3Mgc29tZXRoaW5nXG4gICAgICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSBTdGF0aWNNYXNrIHwgUGxhY2VtZW50OyAvLyBUaGUgZWZmZWN0cyBhcmUgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gUmVzZXQgdG8gY3JlYXRlRmliZXIncyBpbml0aWFsIHZhbHVlcy5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gTm9GbGFncyQxO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbnVsbDtcblxuICAgICAgICB7XG4gICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlc2V0IHRvIHRoZSBjbG9uZWQgdmFsdWVzIHRoYXQgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGQndmUuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSBOb0ZsYWdzJDE7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAgICAgICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgICAgICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICB7XG4gICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlSG9zdFJvb3RGaWJlcihcbiAgICAgIHRhZyxcbiAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGVcbiAgICApIHtcbiAgICAgIHZhciBtb2RlO1xuXG4gICAgICBpZiAodGFnID09PSBDb25jdXJyZW50Um9vdCkge1xuICAgICAgICBtb2RlID0gQ29uY3VycmVudE1vZGU7XG5cbiAgICAgICAgaWYgKGlzU3RyaWN0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG1vZGUgfD0gU3RyaWN0TGVnYWN5TW9kZSB8IFN0cmljdEVmZmVjdHNNb2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb2RlID0gTm9Nb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgLy8gQWx3YXlzIGNvbGxlY3QgcHJvZmlsZSB0aW1pbmdzIHdoZW4gRGV2VG9vbHMgYXJlIHByZXNlbnQuXG4gICAgICAgIC8vIFRoaXMgZW5hYmxlcyBEZXZUb29scyB0byBzdGFydCBjYXB0dXJpbmcgdGltaW5nIGF0IGFueSBwb2ludOKAk1xuICAgICAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgICAgIG1vZGUgfD0gUHJvZmlsZU1vZGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgIHR5cGUsIC8vIFJlYWN0JEVsZW1lbnRUeXBlXG4gICAgICBrZXksXG4gICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICBvd25lcixcbiAgICAgIG1vZGUsXG4gICAgICBsYW5lc1xuICAgICkge1xuICAgICAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoc2hvdWxkQ29uc3RydWN0KHR5cGUpKSB7XG4gICAgICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAge1xuICAgICAgICAgIGZpYmVyVGFnID0gSG9zdENvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0VGFnOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgICAgIG1vZGUgfD0gU3RyaWN0TGVnYWN5TW9kZTtcblxuICAgICAgICAgICAgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgLy8gU3RyaWN0IGVmZmVjdHMgc2hvdWxkIG5ldmVyIHJ1biBvbiBsZWdhY3kgcm9vdHNcbiAgICAgICAgICAgICAgbW9kZSB8PSBTdHJpY3RFZmZlY3RzTW9kZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgICAgICBjYXNlIFJFQUNUX09GRlNDUkVFTl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU6XG5cbiAgICAgICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfU0NPUEVfVFlQRTpcblxuICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgICAgICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxuXG4gICAgICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgICAgICBjYXNlIFJFQUNUX1RSQUNJTkdfTUFSS0VSX1RZUEU6XG5cbiAgICAgICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG5cbiAgICAgICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dFByb3ZpZGVyO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29uc3VtZXJcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dENvbnN1bWVyO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSBGb3J3YXJkUmVmO1xuXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTGF6eUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluZm8gPSBcIlwiO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHR5cGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgIHR5cGUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaW5mbyArPVxuICAgICAgICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICtcbiAgICAgICAgICAgICAgICAgIFwibmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIob3duZXIpIDogbnVsbDtcblxuICAgICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgaW5mbyArPSBcIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIiArIG93bmVyTmFtZSArIFwiYC5cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gXCIgK1xuICAgICAgICAgICAgICAgIFwiY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBcIiArXG4gICAgICAgICAgICAgICAgKFwiYnV0IGdvdDogXCIgKyAodHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlKSArIFwiLlwiICsgaW5mbylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgICBmaWJlci5lbGVtZW50VHlwZSA9IHR5cGU7XG4gICAgICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICAgICAge1xuICAgICAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgbGFuZXMpIHtcbiAgICAgIHZhciBvd25lciA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gICAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgICB2YXIgcGVuZGluZ1Byb3BzID0gZWxlbWVudC5wcm9wcztcbiAgICAgIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgdHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICAgIG93bmVyLFxuICAgICAgICBtb2RlLFxuICAgICAgICBsYW5lc1xuICAgICAgKTtcblxuICAgICAge1xuICAgICAgICBmaWJlci5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gICAgICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgb2YgdHlwZSBgc3RyaW5nYCBhcyBhIHByb3AuIFJlY2VpdmVkIHRoZSB0eXBlIGAlc2AgaW5zdGVhZC4nLFxuICAgICAgICAgICAgdHlwZW9mIHBlbmRpbmdQcm9wcy5pZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoUHJvZmlsZXIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlIHwgUHJvZmlsZU1vZGUpO1xuICAgICAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICAgICAge1xuICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgICAgICAgZWZmZWN0RHVyYXRpb246IDAsXG4gICAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgICAgIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gICAgICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUxpc3RDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgICAgIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRJbnN0YW5jZSA9IHtcbiAgICAgICAgX3Zpc2liaWxpdHk6IE9mZnNjcmVlblZpc2libGUsXG4gICAgICAgIF9wZW5kaW5nVmlzaWJpbGl0eTogT2Zmc2NyZWVuVmlzaWJsZSxcbiAgICAgICAgX3BlbmRpbmdNYXJrZXJzOiBudWxsLFxuICAgICAgICBfcmV0cnlDYWNoZTogbnVsbCxcbiAgICAgICAgX3RyYW5zaXRpb25zOiBudWxsLFxuICAgICAgICBfY3VycmVudDogbnVsbCxcbiAgICAgICAgZGV0YWNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGRldGFjaE9mZnNjcmVlbkluc3RhbmNlKHByaW1hcnlDaGlsZEluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgYXR0YWNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGF0dGFjaE9mZnNjcmVlbkluc3RhbmNlKHByaW1hcnlDaGlsZEluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHByaW1hcnlDaGlsZEluc3RhbmNlO1xuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGxhbmVzKSB7XG4gICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gICAgICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICAgICAgdmFyIHBlbmRpbmdQcm9wcyA9IHBvcnRhbC5jaGlsZHJlbiAhPT0gbnVsbCA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdO1xuICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFBvcnRhbCwgcGVuZGluZ1Byb3BzLCBwb3J0YWwua2V5LCBtb2RlKTtcbiAgICAgIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgICAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgICAgIC8vIFVzZWQgYnkgcGVyc2lzdGVudCB1cGRhdGVzXG4gICAgICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgICAgIH07XG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfSAvLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuXG4gICAgZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBGaWJlcidzIGluaXRpYWwgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBvdmVyd3JpdHRlbi5cbiAgICAgICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgICAgICB0YXJnZXQgPSBjcmVhdGVGaWJlcihJbmRldGVybWluYXRlQ29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpO1xuICAgICAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gICAgICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gICAgICAvLyB0aGUgaG90dGVzdCBwYXRoLCBhbmQgT2JqZWN0LmFzc2lnbigpIHdhcyB0b28gc2xvdzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgICAgIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cbiAgICAgIHRhcmdldC50YWcgPSBzb3VyY2UudGFnO1xuICAgICAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gICAgICB0YXJnZXQuZWxlbWVudFR5cGUgPSBzb3VyY2UuZWxlbWVudFR5cGU7XG4gICAgICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICAgICAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gICAgICB0YXJnZXQucmV0dXJuID0gc291cmNlLnJldHVybjtcbiAgICAgIHRhcmdldC5jaGlsZCA9IHNvdXJjZS5jaGlsZDtcbiAgICAgIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gICAgICB0YXJnZXQuaW5kZXggPSBzb3VyY2UuaW5kZXg7XG4gICAgICB0YXJnZXQucmVmID0gc291cmNlLnJlZjtcbiAgICAgIHRhcmdldC5yZWZDbGVhbnVwID0gc291cmNlLnJlZkNsZWFudXA7XG4gICAgICB0YXJnZXQucGVuZGluZ1Byb3BzID0gc291cmNlLnBlbmRpbmdQcm9wcztcbiAgICAgIHRhcmdldC5tZW1vaXplZFByb3BzID0gc291cmNlLm1lbW9pemVkUHJvcHM7XG4gICAgICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICB0YXJnZXQubWVtb2l6ZWRTdGF0ZSA9IHNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgdGFyZ2V0LmRlcGVuZGVuY2llcyA9IHNvdXJjZS5kZXBlbmRlbmNpZXM7XG4gICAgICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICAgICAgdGFyZ2V0LmZsYWdzID0gc291cmNlLmZsYWdzO1xuICAgICAgdGFyZ2V0LnN1YnRyZWVGbGFncyA9IHNvdXJjZS5zdWJ0cmVlRmxhZ3M7XG4gICAgICB0YXJnZXQuZGVsZXRpb25zID0gc291cmNlLmRlbGV0aW9ucztcbiAgICAgIHRhcmdldC5sYW5lcyA9IHNvdXJjZS5sYW5lcztcbiAgICAgIHRhcmdldC5jaGlsZExhbmVzID0gc291cmNlLmNoaWxkTGFuZXM7XG4gICAgICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICAgICAge1xuICAgICAgICB0YXJnZXQuYWN0dWFsRHVyYXRpb24gPSBzb3VyY2UuYWN0dWFsRHVyYXRpb247XG4gICAgICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgICAgICB0YXJnZXQuc2VsZkJhc2VEdXJhdGlvbiA9IHNvdXJjZS5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgICB0YXJnZXQudHJlZUJhc2VEdXJhdGlvbiA9IHNvdXJjZS50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXQuX2RlYnVnT3duZXIgPSBzb3VyY2UuX2RlYnVnT3duZXI7XG4gICAgICB0YXJnZXQuX2RlYnVnTmVlZHNSZW1vdW50ID0gc291cmNlLl9kZWJ1Z05lZWRzUmVtb3VudDtcbiAgICAgIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBGaWJlclJvb3ROb2RlKFxuICAgICAgY29udGFpbmVySW5mbywgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICAgICAgdGFnLFxuICAgICAgaHlkcmF0ZSxcbiAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICBmb3JtU3RhdGVcbiAgICApIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgICAgIHRoaXMucGVuZGluZ0NoaWxkcmVuID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gICAgICB0aGlzLmZpbmlzaGVkV29yayA9IG51bGw7XG4gICAgICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gICAgICB0aGlzLmNhbmNlbFBlbmRpbmdDb21taXQgPSBudWxsO1xuICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgICAgIHRoaXMuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHRoaXMuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZTtcbiAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcChOb1RpbWVzdGFtcCk7XG4gICAgICB0aGlzLnBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB0aGlzLnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdGhpcy5leHBpcmVkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdGhpcy5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdGhpcy5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgICAgIHRoaXMuZW50YW5nbGVkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdGhpcy5lbnRhbmdsZW1lbnRzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcbiAgICAgIHRoaXMuaGlkZGVuVXBkYXRlcyA9IGNyZWF0ZUxhbmVNYXAobnVsbCk7XG4gICAgICB0aGlzLmlkZW50aWZpZXJQcmVmaXggPSBpZGVudGlmaWVyUHJlZml4O1xuICAgICAgdGhpcy5vblJlY292ZXJhYmxlRXJyb3IgPSBvblJlY292ZXJhYmxlRXJyb3I7XG5cbiAgICAgIHRoaXMuZm9ybVN0YXRlID0gZm9ybVN0YXRlO1xuICAgICAgdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnMgPSBuZXcgTWFwKCk7XG5cbiAgICAgIHtcbiAgICAgICAgdGhpcy5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIHRoaXMucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB0aGlzLm1lbW9pemVkVXBkYXRlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gKHRoaXMucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCA9IFtdKTtcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgVG90YWxMYW5lczsgX2krKykge1xuICAgICAgICAgIHBlbmRpbmdVcGRhdGVyc0xhbmVNYXAucHVzaChuZXcgU2V0KCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgICBjYXNlIENvbmN1cnJlbnRSb290OlxuICAgICAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9IGh5ZHJhdGUgPyBcImh5ZHJhdGVSb290KClcIiA6IFwiY3JlYXRlUm9vdCgpXCI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgTGVnYWN5Um9vdDpcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSBoeWRyYXRlID8gXCJoeWRyYXRlKClcIiA6IFwicmVuZGVyKClcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KFxuICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgIHRhZyxcbiAgICAgIGh5ZHJhdGUsXG4gICAgICBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICBoeWRyYXRpb25DYWxsYmFja3MsXG4gICAgICBpc1N0cmljdE1vZGUsXG4gICAgICBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLCAvLyBUT0RPOiBXZSBoYXZlIHNldmVyYWwgb2YgdGhlc2UgYXJndW1lbnRzIHRoYXQgYXJlIGNvbmNlcHR1YWxseSBwYXJ0IG9mIHRoZVxuICAgICAgLy8gaG9zdCBjb25maWcsIGJ1dCBiZWNhdXNlIHRoZXkgYXJlIHBhc3NlZCBpbiBhdCBydW50aW1lLCB3ZSBoYXZlIHRvIHRocmVhZFxuICAgICAgLy8gdGhlbSB0aHJvdWdoIHRoZSByb290IGNvbnN0cnVjdG9yLiBQZXJoYXBzIHdlIHNob3VsZCBwdXQgdGhlbSBhbGwgaW50byBhXG4gICAgICAvLyBzaW5nbGUgdHlwZSwgbGlrZSBhIER5bmFtaWNIb3N0Q29uZmlnIHRoYXQgaXMgZGVmaW5lZCBieSB0aGUgcmVuZGVyZXIuXG4gICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyxcbiAgICAgIGZvcm1TdGF0ZVxuICAgICkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbnZhbGlkLWNvbnN0cnVjdG9yXSBGbG93IG5vIGxvbmdlciBzdXBwb3J0cyBjYWxsaW5nIG5ldyBvbiBmdW5jdGlvbnNcbiAgICAgIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoXG4gICAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICAgIHRhZyxcbiAgICAgICAgaHlkcmF0ZSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICBmb3JtU3RhdGVcbiAgICAgICk7XG4gICAgICAvLyBzdGF0ZU5vZGUgaXMgYW55LlxuXG4gICAgICB2YXIgdW5pbml0aWFsaXplZEZpYmVyID0gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcsIGlzU3RyaWN0TW9kZSk7XG4gICAgICByb290LmN1cnJlbnQgPSB1bmluaXRpYWxpemVkRmliZXI7XG4gICAgICB1bmluaXRpYWxpemVkRmliZXIuc3RhdGVOb2RlID0gcm9vdDtcblxuICAgICAge1xuICAgICAgICB2YXIgX2luaXRpYWxTdGF0ZSA9IHtcbiAgICAgICAgICBlbGVtZW50OiBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICAgICAgaXNEZWh5ZHJhdGVkOiBoeWRyYXRlLFxuICAgICAgICAgIGNhY2hlOiBudWxsIC8vIG5vdCBlbmFibGVkIHlldFxuICAgICAgICB9O1xuICAgICAgICB1bmluaXRpYWxpemVkRmliZXIubWVtb2l6ZWRTdGF0ZSA9IF9pbml0aWFsU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuXG4gICAgdmFyIFJlYWN0VmVyc2lvbiA9IFwiMTguMy4wLWNhbmFyeS0wM2Q2ZjdjZjAtMjAyNDAyMDlcIjtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuICAgICAgaW1wbGVtZW50YXRpb25cbiAgICApIHtcbiAgICAgIHZhciBrZXkgPVxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gYXJndW1lbnRzWzNdXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oa2V5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IFBvcnRhbFxuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAgICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogXCJcIiArIGtleSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgICAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTWlnaHQgYWRkIFBST0ZJTEUgbGF0ZXIuXG5cbiAgICB2YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcztcbiAgICB2YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbiAgICB7XG4gICAgICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gZmFsc2U7XG4gICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gICAgICB2YXIgcGFyZW50Q29udGV4dCA9IGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKTtcblxuICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgQ29tcG9uZW50LCBwYXJlbnRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50LCBtZXRob2ROYW1lKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgICAgIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY29tcG9uZW50KS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIGtleXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG9zdEZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiO1xuXG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzZXRDdXJyZW50RmliZXIoaG9zdEZpYmVyKTtcblxuICAgICAgICAgICAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCBpcyBpbnNpZGUgU3RyaWN0TW9kZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIkluc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlXCIsXG4gICAgICAgICAgICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgXCIlcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIlcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIHJlbmRlcnMgU3RyaWN0TW9kZSBjaGlsZHJlbi4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIkluc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlXCIsXG4gICAgICAgICAgICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAvLyBJZGVhbGx5IHRoaXMgc2hvdWxkIHJlc2V0IHRvIHByZXZpb3VzIGJ1dCB0aGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgaW5cbiAgICAgICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZpb3VzRmliZXIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoaG9zdEZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKFxuICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgIHRhZyxcbiAgICAgIGh5ZHJhdGlvbkNhbGxiYWNrcyxcbiAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsXG4gICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrc1xuICAgICkge1xuICAgICAgdmFyIGh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgIHZhciBpbml0aWFsQ2hpbGRyZW4gPSBudWxsO1xuICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChcbiAgICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgICAgdGFnLFxuICAgICAgICBoeWRyYXRlLFxuICAgICAgICBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICAgIGh5ZHJhdGlvbkNhbGxiYWNrcyxcbiAgICAgICAgaXNTdHJpY3RNb2RlLFxuICAgICAgICBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgIHRyYW5zaXRpb25DYWxsYmFja3MsXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAgICAgIHtcbiAgICAgICAgb25TY2hlZHVsZVJvb3QoY29udGFpbmVyLCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnQkMSA9IGNvbnRhaW5lci5jdXJyZW50O1xuICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50JDEpO1xuXG4gICAgICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG5cbiAgICAgIGlmIChjb250YWluZXIuY29udGV4dCA9PT0gbnVsbCkge1xuICAgICAgICBjb250YWluZXIuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250YWluZXIucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmIChpc1JlbmRlcmluZyAmJiBjdXJyZW50ICE9PSBudWxsICYmICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzKSB7XG4gICAgICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7IFwiICtcbiAgICAgICAgICAgICAgXCJ0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gXCIgK1xuICAgICAgICAgICAgICBcIklmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBcIkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50KSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAgICAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gICAgICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcInJlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgXCIgK1xuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIH1cblxuICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkMSwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGN1cnJlbnQkMSwgbGFuZSk7XG4gICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgY3VycmVudCQxLCBsYW5lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShjb250YWluZXIpIHtcbiAgICAgIHZhciBjb250YWluZXJGaWJlciA9IGNvbnRhaW5lci5jdXJyZW50O1xuXG4gICAgICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZEVycm9ySW1wbCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNob3VsZEVycm9yKGZpYmVyKSB7XG4gICAgICByZXR1cm4gc2hvdWxkRXJyb3JJbXBsKGZpYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICAgICAgcmV0dXJuIHNob3VsZFN1c3BlbmRJbXBsKGZpYmVyKTtcbiAgICB9XG4gICAgdmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbiAgICB2YXIgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbDtcbiAgICB2YXIgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gbnVsbDtcbiAgICB2YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG4gICAgdmFyIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbDtcbiAgICB2YXIgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBudWxsO1xuICAgIHZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHNldEVycm9ySGFuZGxlciA9IG51bGw7XG4gICAgdmFyIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG5cbiAgICB7XG4gICAgICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgICAgICB2YXIgdXBkYXRlZCA9IGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuXG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgICAgIHVwZGF0ZWQuc3BsaWNlKGtleSwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkW2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoRGVsZXRlSW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY29weVdpdGhEZWxldGUgPSBmdW5jdGlvbiAob2JqLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCAwKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb3B5V2l0aFJlbmFtZUltcGwgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCkge1xuICAgICAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gICAgICAgIHZhciB1cGRhdGVkID0gaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7XG5cbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgbmV3S2V5ID0gbmV3UGF0aFtpbmRleF07IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgICAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgICAgIGlmIChpc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgICAgICB1cGRhdGVkLnNwbGljZShvbGRLZXksIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdXBkYXRlZFtvbGRLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICAgICAgdXBkYXRlZFtvbGRLZXldID0gY29weVdpdGhSZW5hbWVJbXBsKFxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgICAgICAgb2JqW29sZEtleV0sXG4gICAgICAgICAgICBvbGRQYXRoLFxuICAgICAgICAgICAgbmV3UGF0aCxcbiAgICAgICAgICAgIGluZGV4ICsgMVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb3B5V2l0aFJlbmFtZSA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgICAgaWYgKG9sZFBhdGgubGVuZ3RoICE9PSBuZXdQYXRoLmxlbmd0aCkge1xuICAgICAgICAgIHdhcm4oXCJjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgXCJjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgdG8gYmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgZGVlcGVzdCBrZXlcIlxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY29weVdpdGhTZXRJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0SW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfTtcblxuICAgICAgdmFyIGNvcHlXaXRoU2V0ID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIDAsIHZhbHVlKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBmaW5kSG9vayA9IGZ1bmN0aW9uIChmaWJlciwgaWQpIHtcbiAgICAgICAgLy8gRm9yIG5vdywgdGhlIFwiaWRcIiBvZiBzdGF0ZWZ1bCBob29rcyBpcyBqdXN0IHRoZSBzdGF0ZWZ1bCBob29rIGluZGV4LlxuICAgICAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgICAgICB2YXIgY3VycmVudEhvb2sgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBpZCA+IDApIHtcbiAgICAgICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICAgICAgaWQtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgICAgIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgZWRpdGFibGUgdmFsdWVzIGZvciB1c2VTdGF0ZSBhbmQgdXNlUmVkdWNlci5cblxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgICAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICAgICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgICAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgICAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICAgICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFJlbmFtZShob29rLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgcHJvcHMgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMsIGZvcndhcmRSZWYsIG1lbW8sIGhvc3QgY29tcG9uZW50cywgZXRjLlxuXG4gICAgICBvdmVycmlkZVByb3BzID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoLCB2YWx1ZSkge1xuICAgICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoKSB7XG4gICAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoRGVsZXRlKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgpO1xuXG4gICAgICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFJlbmFtZShcbiAgICAgICAgICBmaWJlci5tZW1vaXplZFByb3BzLFxuICAgICAgICAgIG9sZFBhdGgsXG4gICAgICAgICAgbmV3UGF0aFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNldEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRFcnJvckltcGwpIHtcbiAgICAgICAgc2hvdWxkRXJyb3JJbXBsID0gbmV3U2hvdWxkRXJyb3JJbXBsO1xuICAgICAgfTtcblxuICAgICAgc2V0U3VzcGVuc2VIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZFN1c3BlbmRJbXBsKSB7XG4gICAgICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICAgICAgdmFyIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlID0gZGV2VG9vbHNDb25maWcuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7XG4gICAgICB2YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG4gICAgICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICAgICAgYnVuZGxlVHlwZTogZGV2VG9vbHNDb25maWcuYnVuZGxlVHlwZSxcbiAgICAgICAgdmVyc2lvbjogZGV2VG9vbHNDb25maWcudmVyc2lvbixcbiAgICAgICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICAgICAgcmVuZGVyZXJDb25maWc6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyQ29uZmlnLFxuICAgICAgICBvdmVycmlkZUhvb2tTdGF0ZTogb3ZlcnJpZGVIb29rU3RhdGUsXG4gICAgICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgICAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCxcbiAgICAgICAgb3ZlcnJpZGVQcm9wczogb3ZlcnJpZGVQcm9wcyxcbiAgICAgICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgICAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDogb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgsXG4gICAgICAgIHNldEVycm9ySGFuZGxlcjogc2V0RXJyb3JIYW5kbGVyLFxuICAgICAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICAgICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxuICAgICAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICAgICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgICAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpcbiAgICAgICAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgICAgICAvLyBSZWFjdCBSZWZyZXNoXG4gICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDogZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoLFxuICAgICAgICBzY2hlZHVsZVJlZnJlc2g6IHNjaGVkdWxlUmVmcmVzaCxcbiAgICAgICAgc2NoZWR1bGVSb290OiBzY2hlZHVsZVJvb3QsXG4gICAgICAgIHNldFJlZnJlc2hIYW5kbGVyOiBzZXRSZWZyZXNoSGFuZGxlcixcbiAgICAgICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBhcHBlbmQgb3duZXIgc3RhY2tzIHRvIGVycm9yIG1lc3NhZ2VzIGluIERFViBtb2RlLlxuICAgICAgICBnZXRDdXJyZW50RmliZXI6IGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzLFxuICAgICAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGRldGVjdCByZWNvbmNpbGVyIHZlcnNpb24gcmF0aGVyIHRoYW4gcmVuZGVyZXIgdmVyc2lvblxuICAgICAgICAvLyB3aGljaCBtYXkgbm90IG1hdGNoIGZvciB0aGlyZCBwYXJ0eSByZW5kZXJlcnMuXG4gICAgICAgIHJlY29uY2lsZXJWZXJzaW9uOiBSZWFjdFZlcnNpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBpbnN0YW5jZUNhY2hlID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tVGFnKHRhZykge1xuICAgICAgcmV0dXJuIGluc3RhbmNlQ2FjaGUuZ2V0KHRhZykgfHwgbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbiAgICBmdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQoY29tcG9uZW50T3JIYW5kbGUpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgICAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKCFvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcyBpcyBhY2Nlc3NpbmcgZmluZE5vZGVIYW5kbGUgaW5zaWRlIGl0cyByZW5kZXIoKS4gXCIgK1xuICAgICAgICAgICAgICAgIFwicmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCBcIiArXG4gICAgICAgICAgICAgICAgXCJuZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyBcIiArXG4gICAgICAgICAgICAgICAgXCJyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCBcIiArXG4gICAgICAgICAgICAgICAgXCJjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKG93bmVyLnR5cGUpIHx8IFwiQSBjb21wb25lbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50T3JIYW5kbGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGYWJyaWMgaW5zdGFuY2VzXG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsICYmXG4gICAgICAgIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZVxuICAgICAgKSB7XG4gICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtcmV0dXJuXSBDYW4ndCByZWZpbmUgY29tcG9uZW50T3JIYW5kbGUgYXMgYSBGYWJyaWMgaW5zdGFuY2VcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZTtcbiAgICAgIH0gLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgcmVuZGVyZXIgaW5zdGFuY2VzXG5cbiAgICAgIGlmIChjb21wb25lbnRPckhhbmRsZS5fbmF0aXZlVGFnKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWV4YWN0XSBOZWNlc3Nhcnkgd2hlbiBydW5uaW5nIEZsb3cgb24gRmFicmljXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaG9zdEluc3RhbmNlO1xuXG4gICAgICB7XG4gICAgICAgIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhcbiAgICAgICAgICBjb21wb25lbnRPckhhbmRsZSxcbiAgICAgICAgICBcImZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRFwiXG4gICAgICAgICk7XG4gICAgICB9IC8vIGZpbmRIb3N0SW5zdGFuY2UgaGFuZGxlcyBsZWdhY3kgdnMuIEZhYnJpYyBkaWZmZXJlbmNlcyBjb3JyZWN0bHlcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWV4YWN0XSB3ZSBuZWVkIHRvIGZpeCB0aGUgZGVmaW5pdGlvbiBvZiBgSG9zdENvbXBvbmVudGAgdG8gdXNlIE5hdGl2ZU1ldGhvZHMgYXMgYW4gaW50ZXJmYWNlLCBub3QgYXMgYSB0eXBlLlxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuXG4gICAgICByZXR1cm4gaG9zdEluc3RhbmNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTm9kZUhhbmRsZShjb21wb25lbnRPckhhbmRsZSkge1xuICAgICAge1xuICAgICAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci5zdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoIW93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzIGlzIGFjY2Vzc2luZyBmaW5kTm9kZUhhbmRsZSBpbnNpZGUgaXRzIHJlbmRlcigpLiBcIiArXG4gICAgICAgICAgICAgICAgXCJyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkIFwiICtcbiAgICAgICAgICAgICAgICBcIm5ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzIFwiICtcbiAgICAgICAgICAgICAgICBcInJlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kIFwiICtcbiAgICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3duZXIudHlwZSkgfHwgXCJBIGNvbXBvbmVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnRPckhhbmRsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9ySGFuZGxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIC8vIEFscmVhZHkgYSBub2RlIGhhbmRsZVxuICAgICAgICByZXR1cm4gY29tcG9uZW50T3JIYW5kbGU7XG4gICAgICB9IC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IHJlbmRlcmVyIGluc3RhbmNlc1xuXG4gICAgICBpZiAoY29tcG9uZW50T3JIYW5kbGUuX25hdGl2ZVRhZykge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50T3JIYW5kbGUuX25hdGl2ZVRhZztcbiAgICAgIH0gLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGYWJyaWMgaW5zdGFuY2VzXG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsICE9IG51bGwgJiZcbiAgICAgICAgY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsLm5hdGl2ZVRhZyAhPSBudWxsXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5uYXRpdmVUYWc7XG4gICAgICB9IC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggRmFicmljIHB1YmxpYyBpbnN0YW5jZXNcblxuICAgICAgdmFyIG5hdGl2ZVRhZyA9XG4gICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UoXG4gICAgICAgICAgY29tcG9uZW50T3JIYW5kbGVcbiAgICAgICAgKTtcblxuICAgICAgaWYgKG5hdGl2ZVRhZykge1xuICAgICAgICByZXR1cm4gbmF0aXZlVGFnO1xuICAgICAgfVxuXG4gICAgICB2YXIgaG9zdEluc3RhbmNlO1xuXG4gICAgICB7XG4gICAgICAgIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhcbiAgICAgICAgICBjb21wb25lbnRPckhhbmRsZSxcbiAgICAgICAgICBcImZpbmROb2RlSGFuZGxlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gRmxvdyBsaW1pdGF0aW9uIGluIHJlZmluaW5nIGFuIG9wYXF1ZSB0eXBlXG4gICAgICAgIHJldHVybiBob3N0SW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UuX25hdGl2ZVRhZyAhPSBudWxsKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgcmVuZGVyZXIgaW5zdGFuY2VzXG4gICAgICAgIHJldHVybiBob3N0SW5zdGFuY2UuX25hdGl2ZVRhZztcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gTmVjZXNzYXJ5IHdoZW4gcnVubmluZyBGbG93IG9uIHRoZSBsZWdhY3kgcmVuZGVyZXJcblxuICAgICAgcmV0dXJuIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UoXG4gICAgICAgIGhvc3RJbnN0YW5jZVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hDb21tYW5kKGhhbmRsZSwgY29tbWFuZCwgYXJncykge1xuICAgICAgdmFyIG5hdGl2ZVRhZyA9XG4gICAgICAgIGhhbmRsZS5fbmF0aXZlVGFnICE9IG51bGxcbiAgICAgICAgICA/IGhhbmRsZS5fbmF0aXZlVGFnXG4gICAgICAgICAgOiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZ2V0TmF0aXZlVGFnRnJvbVB1YmxpY0luc3RhbmNlKGhhbmRsZSk7XG5cbiAgICAgIGlmIChuYXRpdmVUYWcgPT0gbnVsbCkge1xuICAgICAgICB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcImRpc3BhdGNoQ29tbWFuZCB3YXMgY2FsbGVkIHdpdGggYSByZWYgdGhhdCBpc24ndCBhIFwiICtcbiAgICAgICAgICAgICAgXCJuYXRpdmUgY29tcG9uZW50LiBVc2UgUmVhY3QuZm9yd2FyZFJlZiB0byBnZXQgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBjb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBub2RlID0gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaGFuZGxlKTtcblxuICAgICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICBuYXRpdmVGYWJyaWNVSU1hbmFnZXIuZGlzcGF0Y2hDb21tYW5kKG5vZGUsIGNvbW1hbmQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5kaXNwYXRjaFZpZXdNYW5hZ2VyQ29tbWFuZChcbiAgICAgICAgICBuYXRpdmVUYWcsXG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICBhcmdzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoaGFuZGxlLCBldmVudFR5cGUpIHtcbiAgICAgIHZhciBuYXRpdmVUYWcgPVxuICAgICAgICBoYW5kbGUuX25hdGl2ZVRhZyAhPSBudWxsXG4gICAgICAgICAgPyBoYW5kbGUuX25hdGl2ZVRhZ1xuICAgICAgICAgIDogUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuXG4gICAgICBpZiAobmF0aXZlVGFnID09IG51bGwpIHtcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJzZW5kQWNjZXNzaWJpbGl0eUV2ZW50IHdhcyBjYWxsZWQgd2l0aCBhIHJlZiB0aGF0IGlzbid0IGEgXCIgK1xuICAgICAgICAgICAgICBcIm5hdGl2ZSBjb21wb25lbnQuIFVzZSBSZWFjdC5mb3J3YXJkUmVmIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vZGUgPSBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZ2V0Tm9kZUZyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuXG4gICAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgIG5hdGl2ZUZhYnJpY1VJTWFuYWdlci5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KG5vZGUsIGV2ZW50VHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UubGVnYWN5U2VuZEFjY2Vzc2liaWxpdHlFdmVudChcbiAgICAgICAgICBuYXRpdmVUYWcsXG4gICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXJldHVybl0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSBpcyBvcGFxdWUgYnV0IHdlIG5lZWQgdG8gbWFrZSBhbiBleGNlcHRpb24gaGVyZS5cbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSAmJiAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGUgJiYgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlLm5vZGVcbiAgICAgICk7XG4gICAgfSAvLyBTaG91bGQgaGF2ZSBiZWVuIFB1YmxpY0luc3RhbmNlIGZyb20gUmVhY3RGaWJlckNvbmZpZ0ZhYnJpY1xuICAgIC8vIFNob3VsZCBoYXZlIGJlZW4gUHVibGljSW5zdGFuY2UgZnJvbSBSZWFjdEZpYmVyQ29uZmlnTmF0aXZlXG4gICAgLy8gUmVtb3ZlIHRoaXMgb25jZSBQYXBlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGFuZCBET00gTm9kZSBBUEkgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBSTi5cblxuICAgIGZ1bmN0aW9uIGlzQ2hpbGRQdWJsaWNJbnN0YW5jZShwYXJlbnRJbnN0YW5jZSwgY2hpbGRJbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICAvLyBQYXBlclxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltwcm9wLW1pc3NpbmddIERvbid0IGNoZWNrIHZpYSBgaW5zdGFuY2VvZiBSZWFjdE5hdGl2ZUZpYmVySG9zdENvbXBvbmVudGAsIHNvIGl0IHdvbid0IGJlIGxlYWtlZCB0byBGYWJyaWMuXG4gICAgICAgICAgcGFyZW50SW5zdGFuY2UuX2ludGVybmFsRmliZXJJbnN0YW5jZUhhbmRsZURFViAmJiAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW3Byb3AtbWlzc2luZ10gRG9uJ3QgY2hlY2sgdmlhIGBpbnN0YW5jZW9mIFJlYWN0TmF0aXZlRmliZXJIb3N0Q29tcG9uZW50YCwgc28gaXQgd29uJ3QgYmUgbGVha2VkIHRvIEZhYnJpYy5cbiAgICAgICAgICBjaGlsZEluc3RhbmNlLl9pbnRlcm5hbEZpYmVySW5zdGFuY2VIYW5kbGVERVZcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGRvZXNGaWJlckNvbnRhaW4oXG4gICAgICAgICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5faW50ZXJuYWxGaWJlckluc3RhbmNlSGFuZGxlREVWLCAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICBjaGlsZEluc3RhbmNlLl9pbnRlcm5hbEZpYmVySW5zdGFuY2VIYW5kbGVERVZcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudEludGVybmFsSW5zdGFuY2VIYW5kbGUgPSAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdIFR5cGUgZm9yIHBhcmVudEluc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gUHVibGljSW5zdGFuY2UgZnJvbSBSZWFjdEZpYmVyQ29uZmlnRmFicmljLlxuICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXRJbnRlcm5hbEluc3RhbmNlSGFuZGxlRnJvbVB1YmxpY0luc3RhbmNlKFxuICAgICAgICAgICAgcGFyZW50SW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICB2YXIgY2hpbGRJbnRlcm5hbEluc3RhbmNlSGFuZGxlID0gLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS1jYWxsXSBUeXBlIGZvciBjaGlsZEluc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gUHVibGljSW5zdGFuY2UgZnJvbSBSZWFjdEZpYmVyQ29uZmlnRmFicmljLlxuICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXRJbnRlcm5hbEluc3RhbmNlSGFuZGxlRnJvbVB1YmxpY0luc3RhbmNlKFxuICAgICAgICAgICAgY2hpbGRJbnN0YW5jZVxuICAgICAgICAgICk7IC8vIEZhYnJpY1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRJbnRlcm5hbEluc3RhbmNlSGFuZGxlICE9IG51bGwgJiZcbiAgICAgICAgICBjaGlsZEludGVybmFsSW5zdGFuY2VIYW5kbGUgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZG9lc0ZpYmVyQ29udGFpbihcbiAgICAgICAgICAgIHBhcmVudEludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICAgICAgICAgICBjaGlsZEludGVybmFsSW5zdGFuY2VIYW5kbGVcbiAgICAgICAgICApO1xuICAgICAgICB9IC8vIE1lYW5zIHRoYXQgb25lIGluc3RhbmNlIGlzIGZyb20gRmFicmljIGFuZCBvdGhlciBpcyBmcm9tIFBhcGVyLlxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZW1wdHlPYmplY3QgPSB7fTtcblxuICAgIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xuICAgIH0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5KGZpYmVySGllcmFyY2h5KSB7XG4gICAgICByZXR1cm4gZmliZXJIaWVyYXJjaHkubWFwKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShmaWJlci50eXBlKSxcbiAgICAgICAgICBnZXRJbnNwZWN0b3JEYXRhOiBmdW5jdGlvbiAoZmluZE5vZGVIYW5kbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHByb3BzOiBnZXRIb3N0UHJvcHMoZmliZXIpLFxuICAgICAgICAgICAgICBtZWFzdXJlOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIEZhYnJpYywgd2UnbGwgZmluZCBhIHNoYWRvdyBub2RlIGFuZCB1c2UgdGhhdCB0byBtZWFzdXJlLlxuICAgICAgICAgICAgICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPVxuICAgICAgICAgICAgICAgICAgaG9zdEZpYmVyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIGhvc3RGaWJlci5zdGF0ZU5vZGUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIGhvc3RGaWJlci5zdGF0ZU5vZGUubm9kZTtcblxuICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICBuYXRpdmVGYWJyaWNVSU1hbmFnZXIubWVhc3VyZShub2RlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLm1lYXN1cmUoXG4gICAgICAgICAgICAgICAgICAgIGdldEhvc3ROb2RlKGZpYmVyLCBmaW5kTm9kZUhhbmRsZSksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgIGZ1bmN0aW9uIGdldEhvc3ROb2RlKGZpYmVyLCBmaW5kTm9kZUhhbmRsZSkge1xuICAgICAge1xuICAgICAgICB2YXIgaG9zdE5vZGU7IC8vIGxvb2sgZm9yIGNoaWxkcmVuIGZpcnN0IGZvciB0aGUgaG9zdE5vZGVcbiAgICAgICAgLy8gYXMgY29tcG9zaXRlIGZpYmVycyBkbyBub3QgaGF2ZSBhIGhvc3ROb2RlXG5cbiAgICAgICAgd2hpbGUgKGZpYmVyKSB7XG4gICAgICAgICAgaWYgKGZpYmVyLnN0YXRlTm9kZSAhPT0gbnVsbCAmJiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGhvc3ROb2RlID0gZmluZE5vZGVIYW5kbGUoZmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaG9zdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBob3N0Tm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBnZXRIb3N0UHJvcHMoZmliZXIpIHtcbiAgICAgIHZhciBob3N0ID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgICBpZiAoaG9zdCkge1xuICAgICAgICByZXR1cm4gaG9zdC5tZW1vaXplZFByb3BzIHx8IGVtcHR5T2JqZWN0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlKGNsb3Nlc3RJbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIFJlYWN0TmF0aXZlXG4gICAgICAgIGlmICghY2xvc2VzdEluc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhpZXJhcmNoeTogW10sXG4gICAgICAgICAgICBwcm9wczogZW1wdHlPYmplY3QsXG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4OiBudWxsLFxuICAgICAgICAgICAgY29tcG9uZW50U3RhY2s6IFwiXCJcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoY2xvc2VzdEluc3RhbmNlKTtcbiAgICAgICAgdmFyIGZpYmVySGllcmFyY2h5ID0gZ2V0T3duZXJIaWVyYXJjaHkoZmliZXIpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBsYXN0Tm9uSG9zdEluc3RhbmNlKGZpYmVySGllcmFyY2h5KTtcbiAgICAgICAgdmFyIGhpZXJhcmNoeSA9IGNyZWF0ZUhpZXJhcmNoeShmaWJlckhpZXJhcmNoeSk7XG4gICAgICAgIHZhciBwcm9wcyA9IGdldEhvc3RQcm9wcyhpbnN0YW5jZSk7XG4gICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gZmliZXJIaWVyYXJjaHkuaW5kZXhPZihpbnN0YW5jZSk7XG4gICAgICAgIHZhciBjb21wb25lbnRTdGFjayA9XG4gICAgICAgICAgZmliZXIgIT09IG51bGwgPyBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoZmliZXIpIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjbG9zZXN0SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgIGhpZXJhcmNoeTogaGllcmFyY2h5LFxuICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICBzZWxlY3RlZEluZGV4OiBzZWxlY3RlZEluZGV4LFxuICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBjb21wb25lbnRTdGFja1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE93bmVySGllcmFyY2h5KGluc3RhbmNlKSB7XG4gICAgICB2YXIgaGllcmFyY2h5ID0gW107XG4gICAgICB0cmF2ZXJzZU93bmVyVHJlZVVwKGhpZXJhcmNoeSwgaW5zdGFuY2UpO1xuICAgICAgcmV0dXJuIGhpZXJhcmNoeTtcbiAgICB9IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgIGZ1bmN0aW9uIGxhc3ROb25Ib3N0SW5zdGFuY2UoaGllcmFyY2h5KSB7XG4gICAgICBmb3IgKHZhciBpID0gaGllcmFyY2h5Lmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gaGllcmFyY2h5W2ldO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZS50YWcgIT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhpZXJhcmNoeVswXTtcbiAgICB9IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlT3duZXJUcmVlVXAoaGllcmFyY2h5LCBpbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICBoaWVyYXJjaHkudW5zaGlmdChpbnN0YW5jZSk7XG4gICAgICAgICAgdHJhdmVyc2VPd25lclRyZWVVcChoaWVyYXJjaHksIGluc3RhbmNlLl9kZWJ1Z093bmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluc3BlY3RvckRhdGFGb3JWaWV3VGFnKHZpZXdUYWcpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNsb3Nlc3RJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbVRhZyh2aWV3VGFnKTtcbiAgICAgICAgcmV0dXJuIGdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZShjbG9zZXN0SW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludChcbiAgICAgIGZpbmROb2RlSGFuZGxlLFxuICAgICAgaW5zcGVjdGVkVmlldyxcbiAgICAgIGxvY2F0aW9uWCxcbiAgICAgIGxvY2F0aW9uWSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjbG9zZXN0SW5zdGFuY2UgPSBudWxsO1xuICAgICAgICB2YXIgZmFicmljTm9kZSA9XG4gICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaW5zcGVjdGVkVmlldyk7XG5cbiAgICAgICAgaWYgKGZhYnJpY05vZGUpIHtcbiAgICAgICAgICAvLyBGb3IgRmFicmljIHdlIGNhbiBsb29rIHVwIHRoZSBpbnN0YW5jZSBoYW5kbGUgZGlyZWN0bHkgYW5kIG1lYXN1cmUgaXQuXG4gICAgICAgICAgbmF0aXZlRmFicmljVUlNYW5hZ2VyLmZpbmROb2RlQXRQb2ludChcbiAgICAgICAgICAgIGZhYnJpY05vZGUsXG4gICAgICAgICAgICBsb2NhdGlvblgsXG4gICAgICAgICAgICBsb2NhdGlvblksXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAgICAgICAgICAgICB2YXIgbm9kZSA9XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlKVxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlSGFuZGxlID09IG51bGwgfHwgbm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyWTogbG9jYXRpb25ZLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZShjbG9zZXN0SW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjbG9zZXN0SW5zdGFuY2UgPVxuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlLmNhbm9uaWNhbFxuICAgICAgICAgICAgICAgICAgLmludGVybmFsSW5zdGFuY2VIYW5kbGU7IC8vIE5vdGU6IHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2Ugd2FudCB0byByZW1vdmUgaXQgQVNBUC4gS2VlcGluZyBpdCBoZXJlIGZvciBSZWFjdCBEZXZUb29scyBjb21wYXRpYmlsaXR5IGZvciBub3cuXG5cbiAgICAgICAgICAgICAgdmFyIG5hdGl2ZVZpZXdUYWcgPVxuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlLmNhbm9uaWNhbC5uYXRpdmVUYWc7XG4gICAgICAgICAgICAgIG5hdGl2ZUZhYnJpY1VJTWFuYWdlci5tZWFzdXJlKFxuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIHBhZ2VYLCBwYWdlWSkge1xuICAgICAgICAgICAgICAgICAgdmFyIGluc3BlY3RvckRhdGEgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UoY2xvc2VzdEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ24oe30sIGluc3BlY3RvckRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyWTogbG9jYXRpb25ZLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwYWdlWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogcGFnZVksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgdG91Y2hlZFZpZXdUYWc6IG5hdGl2ZVZpZXdUYWdcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5zcGVjdGVkVmlldy5faW50ZXJuYWxGaWJlckluc3RhbmNlSGFuZGxlREVWICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBGb3IgUGFwZXIgd2UgZmFsbCBiYWNrIHRvIHRoZSBvbGQgc3RyYXRlZ3kgdXNpbmcgdGhlIFJlYWN0IHRhZy5cbiAgICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLmZpbmRTdWJ2aWV3SW4oXG4gICAgICAgICAgICBmaW5kTm9kZUhhbmRsZShpbnNwZWN0ZWRWaWV3KSxcbiAgICAgICAgICAgIFtsb2NhdGlvblgsIGxvY2F0aW9uWV0sXG4gICAgICAgICAgICBmdW5jdGlvbiAobmF0aXZlVmlld1RhZywgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgIHZhciBpbnNwZWN0b3JEYXRhID0gZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlKFxuICAgICAgICAgICAgICAgIGdldEluc3RhbmNlRnJvbVRhZyhuYXRpdmVWaWV3VGFnKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICAgICAgICBhc3NpZ24oe30sIGluc3BlY3RvckRhdGEsIHtcbiAgICAgICAgICAgICAgICAgIHBvaW50ZXJZOiBsb2NhdGlvblksXG4gICAgICAgICAgICAgICAgICBmcmFtZToge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHRvdWNoZWRWaWV3VGFnOiBuYXRpdmVWaWV3VGFnXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQgZXhwZWN0cyB0byByZWNlaXZlIGEgaG9zdCBjb21wb25lbnRcIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblJlY292ZXJhYmxlRXJyb3IoZXJyb3IkMSkge1xuICAgICAgLy8gVE9ETzogRXhwb3NlIG9uUmVjb3ZlcmFibGVFcnJvciBvcHRpb24gdG8gdXNlcnNwYWNlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nLCByZWFjdC1pbnRlcm5hbC93YXJuaW5nLWFyZ3NcbiAgICAgIGVycm9yKGVycm9yJDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXJUYWcsIGNhbGxiYWNrLCBjb25jdXJyZW50Um9vdCkge1xuICAgICAgdmFyIHJvb3QgPSByb290cy5nZXQoY29udGFpbmVyVGFnKTtcblxuICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgIC8vIFRPRE8gKGJ2YXVnaG4pOiBJZiB3ZSBkZWNpZGUgdG8ga2VlcCB0aGUgd3JhcHBlciBjb21wb25lbnQsXG4gICAgICAgIC8vIFdlIGNvdWxkIGNyZWF0ZSBhIHdyYXBwZXIgZm9yIGNvbnRhaW5lclRhZyBhcyB3ZWxsIHRvIHJlZHVjZSBzcGVjaWFsIGNhc2luZy5cbiAgICAgICAgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihcbiAgICAgICAgICBjb250YWluZXJUYWcsXG4gICAgICAgICAgY29uY3VycmVudFJvb3QgPyBDb25jdXJyZW50Um9vdCA6IExlZ2FjeVJvb3QsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgcm9vdHMuc2V0KGNvbnRhaW5lclRhZywgcm9vdCk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKHJvb3QpO1xuICAgIH0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lclRhZykge1xuICAgICAgdGhpcy5zdG9wU3VyZmFjZShjb250YWluZXJUYWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0b3BTdXJmYWNlKGNvbnRhaW5lclRhZykge1xuICAgICAgdmFyIHJvb3QgPSByb290cy5nZXQoY29udGFpbmVyVGFnKTtcblxuICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgLy8gVE9ETzogSXMgaXQgc2FmZSB0byByZXNldCB0aGlzIG5vdyBvciBzaG91bGQgSSB3YWl0IHNpbmNlIHRoaXMgdW5tb3VudCBjb3VsZCBiZSBkZWZlcnJlZD9cbiAgICAgICAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByb290cy5kZWxldGUoY29udGFpbmVyVGFnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXJUYWcpIHtcbiAgICAgIHZhciBrZXkgPVxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gYXJndW1lbnRzWzJdXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXJUYWcsIG51bGwsIGtleSk7XG4gICAgfVxuXG4gICAgc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyk7XG4gICAgdmFyIHJvb3RzID0gbmV3IE1hcCgpO1xuICAgIGluamVjdEludG9EZXZUb29scyh7XG4gICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdIFRoZSB0eXBlIG9mIGBJbnN0YW5jZWAgaW4gYGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlYCBkb2VzIG5vdCBtYXRjaCBpbiBGYWJyaWMgYW5kIHRoZSBsZWdhY3kgcmVuZGVyZXIsIHNvIGl0IGZhaWxzIHRvIHR5cGVjaGVjayBoZXJlLlxuICAgICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGdldEluc3RhbmNlRnJvbU5vZGUsXG4gICAgICBidW5kbGVUeXBlOiAxLFxuICAgICAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxuICAgICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogXCJyZWFjdC1uYXRpdmUtcmVuZGVyZXJcIixcbiAgICAgIHJlbmRlcmVyQ29uZmlnOiB7XG4gICAgICAgIGdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZTogZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlLFxuICAgICAgICBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld1RhZzogZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdUYWcsXG4gICAgICAgIGdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludDogZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdBdFBvaW50LmJpbmQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBmaW5kTm9kZUhhbmRsZVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBleHBvcnRzLmNyZWF0ZVBvcnRhbCA9IGNyZWF0ZVBvcnRhbDtcbiAgICBleHBvcnRzLmRpc3BhdGNoQ29tbWFuZCA9IGRpc3BhdGNoQ29tbWFuZDtcbiAgICBleHBvcnRzLmZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRCA9IGZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRDtcbiAgICBleHBvcnRzLmZpbmROb2RlSGFuZGxlID0gZmluZE5vZGVIYW5kbGU7XG4gICAgZXhwb3J0cy5nZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UgPSBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2U7XG4gICAgZXhwb3J0cy5nZXROb2RlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUgPVxuICAgICAgZ2V0Tm9kZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlO1xuICAgIGV4cG9ydHMuZ2V0UHVibGljSW5zdGFuY2VGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSA9XG4gICAgICBnZXRQdWJsaWNJbnN0YW5jZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlO1xuICAgIGV4cG9ydHMuaXNDaGlsZFB1YmxpY0luc3RhbmNlID0gaXNDaGlsZFB1YmxpY0luc3RhbmNlO1xuICAgIGV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuICAgIGV4cG9ydHMuc2VuZEFjY2Vzc2liaWxpdHlFdmVudCA9IHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQ7XG4gICAgZXhwb3J0cy5zdG9wU3VyZmFjZSA9IHN0b3BTdXJmYWNlO1xuICAgIGV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG4gICAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgPT09XG4gICAgICAgIFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKG5ldyBFcnJvcigpKTtcbiAgICB9XG4gIH0pKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0ICcuLi9Db3JlL0luaXRpYWxpemVDb3JlJztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4vKipcbiAqIFNldHMgdXAgZ2xvYmFsIHZhcmlhYmxlcyB0eXBpY2FsIGluIG1vc3QgSmF2YVNjcmlwdCBlbnZpcm9ubWVudHMuXG4gKlxuICogICAxLiBHbG9iYWwgdGltZXJzICh2aWEgYHNldFRpbWVvdXRgIGV0YykuXG4gKiAgIDIuIEdsb2JhbCBjb25zb2xlIG9iamVjdC5cbiAqICAgMy4gSG9va3MgZm9yIHByaW50aW5nIHN0YWNrIHRyYWNlcyB3aXRoIHNvdXJjZSBtYXBzLlxuICpcbiAqIExlYXZlcyBlbm91Z2ggcm9vbSBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIGltcGxlbWVudGluZyB5b3VyIG93bjpcbiAqXG4gKiAgIDEuIFJlcXVpcmUgc3lzdGVtLlxuICogICAyLiBCcmlkZ2VkIG1vZHVsZXMuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG5yZXF1aXJlKCcuL3NldFVwR2xvYmFscycpO1xucmVxdWlyZSgnLi4vLi4vc3JjL3ByaXZhdGUvY29yZS9zZXRVcERPTScpO1xucmVxdWlyZSgnLi9zZXRVcFBlcmZvcm1hbmNlJyk7XG5yZXF1aXJlKCcuL3NldFVwRXJyb3JIYW5kbGluZycpO1xucmVxdWlyZSgnLi9wb2x5ZmlsbFByb21pc2UnKTtcbnJlcXVpcmUoJy4vc2V0VXBSZWdlbmVyYXRvclJ1bnRpbWUnKTtcbnJlcXVpcmUoJy4vc2V0VXBUaW1lcnMnKTtcbnJlcXVpcmUoJy4vc2V0VXBYSFInKTtcbnJlcXVpcmUoJy4vc2V0VXBBbGVydCcpO1xucmVxdWlyZSgnLi9zZXRVcE5hdmlnYXRvcicpO1xucmVxdWlyZSgnLi9zZXRVcEJhdGNoZWRCcmlkZ2UnKTtcbnJlcXVpcmUoJy4vc2V0VXBTZWdtZW50RmV0Y2hlcicpO1xuaWYgKF9fREVWX18pIHtcbiAgcmVxdWlyZSgnLi9jaGVja05hdGl2ZVZlcnNpb24nKTtcbiAgcmVxdWlyZSgnLi9zZXRVcERldmVsb3BlclRvb2xzJyk7XG4gIHJlcXVpcmUoJy4uL0xvZ0JveC9Mb2dCb3gnKS5kZWZhdWx0Lmluc3RhbGwoKTtcbn1cblxucmVxdWlyZSgnLi4vUmVhY3ROYXRpdmUvQXBwUmVnaXN0cnknKTtcblxuY29uc3QgR2xvYmFsUGVyZm9ybWFuY2VMb2dnZXIgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvR2xvYmFsUGVyZm9ybWFuY2VMb2dnZXInKTtcbi8vIFdlIGNvdWxkIGp1c3QgY2FsbCBHbG9iYWxQZXJmb3JtYW5jZUxvZ2dlci5tYXJrUG9pbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSxcbi8vIGJ1dCB0aGVuIHdlJ2QgYmUgZXhjbHVkaW5nIHRoZSB0aW1lIGl0IHRvb2sgdG8gcmVxdWlyZSB0aGUgbG9nZ2VyLlxuLy8gSW5zdGVhZCwgd2UganVzdCB1c2UgRGF0ZS5ub3cgYW5kIGJhY2tkYXRlIHRoZSB0aW1lc3RhbXAuXG5HbG9iYWxQZXJmb3JtYW5jZUxvZ2dlci5tYXJrUG9pbnQoXG4gICdpbml0aWFsaXplQ29yZV9zdGFydCcsXG4gIEdsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyLmN1cnJlbnRUaW1lc3RhbXAoKSAtIChEYXRlLm5vdygpIC0gc3RhcnQpLFxuKTtcbkdsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyLm1hcmtQb2ludCgnaW5pdGlhbGl6ZUNvcmVfZW5kJyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNldHMgdXAgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgUmVhY3QgTmF0aXZlLlxuICogWW91IGNhbiB1c2UgdGhpcyBtb2R1bGUgZGlyZWN0bHksIG9yIGp1c3QgcmVxdWlyZSBJbml0aWFsaXplQ29yZS5cbiAqL1xuaWYgKGdsb2JhbC53aW5kb3cgPT09IHVuZGVmaW5lZCkge1xuICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbY2Fubm90LXdyaXRlXSBUaGUgZ2xvYmFsIGlzbid0IHdyaXRhYmxlIGFueXdoZXJlIGJ1dCBoZXJlLCB3aGVyZSB3ZSBkZWZpbmUgaXQuXG4gIGdsb2JhbC53aW5kb3cgPSBnbG9iYWw7XG59XG5cbmlmIChnbG9iYWwuc2VsZiA9PT0gdW5kZWZpbmVkKSB7XG4gIC8vICRGbG93RXhwZWN0ZWRFcnJvcltjYW5ub3Qtd3JpdGVdIFRoZSBnbG9iYWwgaXNuJ3Qgd3JpdGFibGUgYW55d2hlcmUgYnV0IGhlcmUsIHdoZXJlIHdlIGRlZmluZSBpdC5cbiAgZ2xvYmFsLnNlbGYgPSBnbG9iYWw7XG59XG5cbi8vIFNldCB1cCBwcm9jZXNzXG4vLyAkRmxvd0V4cGVjdGVkRXJyb3JbY2Fubm90LXdyaXRlXSBUaGUgZ2xvYmFsIGlzbid0IHdyaXRhYmxlIGFueXdoZXJlIGJ1dCBoZXJlLCB3aGVyZSB3ZSBkZWZpbmUgaXQuXG5nbG9iYWwucHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzIHx8IHt9O1xuLy8gJEZsb3dFeHBlY3RlZEVycm9yW2Nhbm5vdC13cml0ZV0gVGhlIGdsb2JhbCBpc24ndCB3cml0YWJsZSBhbnl3aGVyZSBidXQgaGVyZSwgd2hlcmUgd2UgZGVmaW5lIGl0LlxuZ2xvYmFsLnByb2Nlc3MuZW52ID0gZ2xvYmFsLnByb2Nlc3MuZW52IHx8IHt9O1xuaWYgKCFnbG9iYWwucHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2Nhbm5vdC13cml0ZV0gVGhlIGdsb2JhbCBpc24ndCB3cml0YWJsZSBhbnl3aGVyZSBidXQgaGVyZSwgd2hlcmUgd2UgZGVmaW5lIGl0LlxuICBnbG9iYWwucHJvY2Vzcy5lbnYuTk9ERV9FTlYgPSBfX0RFVl9fID8gJ2RldmVsb3BtZW50JyA6ICdwcm9kdWN0aW9uJztcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgRE9NUmVjdCBmcm9tICcuLi93ZWJhcGlzL2RvbS9nZW9tZXRyeS9ET01SZWN0JztcbmltcG9ydCBET01SZWN0UmVhZE9ubHkgZnJvbSAnLi4vd2ViYXBpcy9kb20vZ2VvbWV0cnkvRE9NUmVjdFJlYWRPbmx5JztcblxuLy8gJEZsb3dFeHBlY3RlZEVycm9yW2Nhbm5vdC13cml0ZV0gVGhlIGdsb2JhbCBpc24ndCB3cml0YWJsZSBhbnl3aGVyZSBidXQgaGVyZSwgd2hlcmUgd2UgZGVmaW5lIGl0XG5nbG9iYWwuRE9NUmVjdCA9IERPTVJlY3Q7XG5cbi8vICRGbG93RXhwZWN0ZWRFcnJvcltjYW5ub3Qtd3JpdGVdIFRoZSBnbG9iYWwgaXNuJ3Qgd3JpdGFibGUgYW55d2hlcmUgYnV0IGhlcmUsIHdoZXJlIHdlIGRlZmluZSBpdFxuZ2xvYmFsLkRPTVJlY3RSZWFkT25seSA9IERPTVJlY3RSZWFkT25seTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4vKipcbiAqIFRoZSBKU0RvYyBjb21tZW50cyBpbiB0aGlzIGZpbGUgaGF2ZSBiZWVuIGV4dHJhY3RlZCBmcm9tIFtET01SZWN0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NUmVjdCkuXG4gKiBDb250ZW50IGJ5IFtNb3ppbGxhIENvbnRyaWJ1dG9yc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVJlY3QvY29udHJpYnV0b3JzLnR4dCksXG4gKiBsaWNlbnNlZCB1bmRlciBbQ0MtQlktU0EgMi41XShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi41LykuXG4gKi9cblxuaW1wb3J0IERPTVJlY3RSZWFkT25seSwge3R5cGUgRE9NUmVjdExpa2V9IGZyb20gJy4vRE9NUmVjdFJlYWRPbmx5JztcblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuLyoqXG4gKiBBIGBET01SZWN0YCBkZXNjcmliZXMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIGEgcmVjdGFuZ2xlLlxuICogVGhlIHR5cGUgb2YgYm94IHJlcHJlc2VudGVkIGJ5IHRoZSBgRE9NUmVjdGAgaXMgc3BlY2lmaWVkIGJ5IHRoZSBtZXRob2Qgb3IgcHJvcGVydHkgdGhhdCByZXR1cm5lZCBpdC5cbiAqXG4gKiBUaGlzIGlzIGEgKG1vc3RseSkgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiBgRE9NUmVjdGAgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0KS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NUmVjdCBleHRlbmRzIERPTVJlY3RSZWFkT25seSB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBgRE9NUmVjdGAncyBvcmlnaW4uXG4gICAqL1xuICBnZXQgeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9fZ2V0SW50ZXJuYWxYKCk7XG4gIH1cblxuICBzZXQgeCh4OiA/bnVtYmVyKSB7XG4gICAgdGhpcy5fX3NldEludGVybmFsWCh4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBgRE9NUmVjdGAncyBvcmlnaW4uXG4gICAqL1xuICBnZXQgeSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9fZ2V0SW50ZXJuYWxZKCk7XG4gIH1cblxuICBzZXQgeSh5OiA/bnVtYmVyKSB7XG4gICAgdGhpcy5fX3NldEludGVybmFsWSh5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGBET01SZWN0YC5cbiAgICovXG4gIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9fZ2V0SW50ZXJuYWxXaWR0aCgpO1xuICB9XG5cbiAgc2V0IHdpZHRoKHdpZHRoOiA/bnVtYmVyKSB7XG4gICAgdGhpcy5fX3NldEludGVybmFsV2lkdGgod2lkdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGBET01SZWN0YC5cbiAgICovXG4gIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fX2dldEludGVybmFsSGVpZ2h0KCk7XG4gIH1cblxuICBzZXQgaGVpZ2h0KGhlaWdodDogP251bWJlcikge1xuICAgIHRoaXMuX19zZXRJbnRlcm5hbEhlaWdodChoZWlnaHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYERPTVJlY3RgIG9iamVjdCB3aXRoIGEgZ2l2ZW4gbG9jYXRpb24gYW5kIGRpbWVuc2lvbnMuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJlY3QocmVjdD86ID9ET01SZWN0TGlrZSk6IERPTVJlY3Qge1xuICAgIGlmICghcmVjdCkge1xuICAgICAgcmV0dXJuIG5ldyBET01SZWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBET01SZWN0KHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4vKipcbiAqIFRoZSBKU0RvYyBjb21tZW50cyBpbiB0aGlzIGZpbGUgaGF2ZSBiZWVuIGV4dHJhY3RlZCBmcm9tIFtET01SZWN0UmVhZE9ubHldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHkpLlxuICogQ29udGVudCBieSBbTW96aWxsYSBDb250cmlidXRvcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHkvY29udHJpYnV0b3JzLnR4dCksXG4gKiBsaWNlbnNlZCB1bmRlciBbQ0MtQlktU0EgMi41XShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi41LykuXG4gKi9cblxuLy8gZmxvd2xpbnQgc2tldGNoeS1udWxsOm9mZiwgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuZXhwb3J0IGludGVyZmFjZSBET01SZWN0TGlrZSB7XG4gIHg/OiA/bnVtYmVyO1xuICB5PzogP251bWJlcjtcbiAgd2lkdGg/OiA/bnVtYmVyO1xuICBoZWlnaHQ/OiA/bnVtYmVyO1xufVxuXG5mdW5jdGlvbiBjYXN0VG9OdW1iZXIodmFsdWU6IG1peGVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbHVlID8gTnVtYmVyKHZhbHVlKSA6IDA7XG59XG5cbi8qKlxuICogVGhlIGBET01SZWN0UmVhZE9ubHlgIGludGVyZmFjZSBzcGVjaWZpZXMgdGhlIHN0YW5kYXJkIHByb3BlcnRpZXMgdXNlZCBieSBgRE9NUmVjdGAgdG8gZGVmaW5lIGEgcmVjdGFuZ2xlIHdob3NlIHByb3BlcnRpZXMgYXJlIGltbXV0YWJsZS5cbiAqXG4gKiBUaGlzIGlzIGEgKG1vc3RseSkgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiBgRE9NUmVjdFJlYWRPbmx5YCAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVJlY3RSZWFkT25seSkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTVJlY3RSZWFkT25seSB7XG4gIF94OiBudW1iZXI7XG4gIF95OiBudW1iZXI7XG4gIF93aWR0aDogbnVtYmVyO1xuICBfaGVpZ2h0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoeDogP251bWJlciwgeTogP251bWJlciwgd2lkdGg6ID9udW1iZXIsIGhlaWdodDogP251bWJlcikge1xuICAgIHRoaXMuX19zZXRJbnRlcm5hbFgoeCk7XG4gICAgdGhpcy5fX3NldEludGVybmFsWSh5KTtcbiAgICB0aGlzLl9fc2V0SW50ZXJuYWxXaWR0aCh3aWR0aCk7XG4gICAgdGhpcy5fX3NldEludGVybmFsSGVpZ2h0KGhlaWdodCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgYERPTVJlY3RSZWFkT25seWAncyBvcmlnaW4uXG4gICAqL1xuICBnZXQgeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl94O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGBET01SZWN0UmVhZE9ubHlgJ3Mgb3JpZ2luLlxuICAgKi9cbiAgZ2V0IHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5feTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGBET01SZWN0UmVhZE9ubHlgLlxuICAgKi9cbiAgZ2V0IHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGBET01SZWN0UmVhZE9ubHlgLlxuICAgKi9cbiAgZ2V0IGhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9wIGNvb3JkaW5hdGUgdmFsdWUgb2YgdGhlIGBET01SZWN0YCAoaGFzIHRoZSBzYW1lIHZhbHVlIGFzIGB5YCwgb3IgYHkgKyBoZWlnaHRgIGlmIGBoZWlnaHRgIGlzIG5lZ2F0aXZlKS5cbiAgICovXG4gIGdldCB0b3AoKTogbnVtYmVyIHtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgY29uc3QgeSA9IHRoaXMuX3k7XG5cbiAgICBpZiAoaGVpZ2h0IDwgMCkge1xuICAgICAgcmV0dXJuIHkgKyBoZWlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmlnaHQgY29vcmRpbmF0ZSB2YWx1ZSBvZiB0aGUgYERPTVJlY3RgIChoYXMgdGhlIHNhbWUgdmFsdWUgYXMgYGB4ICsgd2lkdGhgLCBvciBgeGAgaWYgYHdpZHRoYCBpcyBuZWdhdGl2ZSkuXG4gICAqL1xuICBnZXQgcmlnaHQoKTogbnVtYmVyIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIGNvbnN0IHggPSB0aGlzLl94O1xuXG4gICAgaWYgKHdpZHRoIDwgMCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHggKyB3aWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBib3R0b20gY29vcmRpbmF0ZSB2YWx1ZSBvZiB0aGUgYERPTVJlY3RgIChoYXMgdGhlIHNhbWUgdmFsdWUgYXMgYHkgKyBoZWlnaHRgLCBvciBgeWAgaWYgYGhlaWdodGAgaXMgbmVnYXRpdmUpLlxuICAgKi9cbiAgZ2V0IGJvdHRvbSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICBjb25zdCB5ID0gdGhpcy5feTtcblxuICAgIGlmIChoZWlnaHQgPCAwKSB7XG4gICAgICByZXR1cm4geTtcbiAgICB9XG5cbiAgICByZXR1cm4geSArIGhlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsZWZ0IGNvb3JkaW5hdGUgdmFsdWUgb2YgdGhlIGBET01SZWN0YCAoaGFzIHRoZSBzYW1lIHZhbHVlIGFzIGB4YCwgb3IgYHggKyB3aWR0aGAgaWYgYHdpZHRoYCBpcyBuZWdhdGl2ZSkuXG4gICAqL1xuICBnZXQgbGVmdCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgY29uc3QgeCA9IHRoaXMuX3g7XG5cbiAgICBpZiAod2lkdGggPCAwKSB7XG4gICAgICByZXR1cm4geCArIHdpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xuICB9XG5cbiAgdG9KU09OKCk6IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgdG9wOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIGJvdHRvbTogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXIsXG4gIH0ge1xuICAgIGNvbnN0IHt4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHR9ID0gdGhpcztcbiAgICByZXR1cm4ge3gsIHksIHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCwgYm90dG9tLCByaWdodH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBgRE9NUmVjdFJlYWRPbmx5YCBvYmplY3Qgd2l0aCBhIGdpdmVuIGxvY2F0aW9uIGFuZCBkaW1lbnNpb25zLlxuICAgKi9cbiAgc3RhdGljIGZyb21SZWN0KHJlY3Q/OiA/RE9NUmVjdExpa2UpOiBET01SZWN0UmVhZE9ubHkge1xuICAgIGlmICghcmVjdCkge1xuICAgICAgcmV0dXJuIG5ldyBET01SZWN0UmVhZE9ubHkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERPTVJlY3RSZWFkT25seShyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuICB9XG5cbiAgX19nZXRJbnRlcm5hbFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5feDtcbiAgfVxuXG4gIF9fZ2V0SW50ZXJuYWxZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3k7XG4gIH1cblxuICBfX2dldEludGVybmFsV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gIH1cblxuICBfX2dldEludGVybmFsSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgfVxuXG4gIF9fc2V0SW50ZXJuYWxYKHg6ID9udW1iZXIpIHtcbiAgICB0aGlzLl94ID0gY2FzdFRvTnVtYmVyKHgpO1xuICB9XG5cbiAgX19zZXRJbnRlcm5hbFkoeTogP251bWJlcikge1xuICAgIHRoaXMuX3kgPSBjYXN0VG9OdW1iZXIoeSk7XG4gIH1cblxuICBfX3NldEludGVybmFsV2lkdGgod2lkdGg6ID9udW1iZXIpIHtcbiAgICB0aGlzLl93aWR0aCA9IGNhc3RUb051bWJlcih3aWR0aCk7XG4gIH1cblxuICBfX3NldEludGVybmFsSGVpZ2h0KGhlaWdodDogP251bWJlcikge1xuICAgIHRoaXMuX2hlaWdodCA9IGNhc3RUb051bWJlcihoZWlnaHQpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IE5hdGl2ZVBlcmZvcm1hbmNlIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvcGVyZm9ybWFuY2UvTmF0aXZlUGVyZm9ybWFuY2UnO1xuaW1wb3J0IFBlcmZvcm1hbmNlIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2UnO1xuXG4vLyBJbiBjYXNlIGlmIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBlcmZvcm1hbmNlIEFQSSBpcyBhdmFpbGFibGUsIHVzZSBpdCxcbi8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdGhlIGxlZ2FjeS9kZWZhdWx0IG9uZSwgd2hpY2ggb25seSBkZWZpbmVzICdQZXJmb3JtYW5jZS5ub3coKSdcbmlmIChOYXRpdmVQZXJmb3JtYW5jZSkge1xuICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbY2Fubm90LXdyaXRlXVxuICBnbG9iYWwucGVyZm9ybWFuY2UgPSBuZXcgUGVyZm9ybWFuY2UoKTtcbn0gZWxzZSB7XG4gIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2Nhbm5vdC13cml0ZV1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSAoe1xuICAgICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gZ2xvYmFsLm5hdGl2ZVBlcmZvcm1hbmNlTm93IHx8IERhdGUubm93O1xuICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgIH0sXG4gICAgfToge25vdz86ICgpID0+IG51bWJlcn0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIE5hdGl2ZU1lbW9yeUluZm8gPSB7W2tleTogc3RyaW5nXTogP251bWJlcn07XG5cbmV4cG9ydCB0eXBlIFJlYWN0TmF0aXZlU3RhcnR1cFRpbWluZyA9IHtba2V5OiBzdHJpbmddOiA/bnVtYmVyfTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArbWFyazogKG5hbWU6IHN0cmluZywgc3RhcnRUaW1lOiBudW1iZXIpID0+IHZvaWQ7XG4gICttZWFzdXJlOiAoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0VGltZTogbnVtYmVyLFxuICAgIGVuZFRpbWU6IG51bWJlcixcbiAgICBkdXJhdGlvbj86IG51bWJlcixcbiAgICBzdGFydE1hcms/OiBzdHJpbmcsXG4gICAgZW5kTWFyaz86IHN0cmluZyxcbiAgKSA9PiB2b2lkO1xuICArZ2V0U2ltcGxlTWVtb3J5SW5mbzogKCkgPT4gTmF0aXZlTWVtb3J5SW5mbztcbiAgK2dldFJlYWN0TmF0aXZlU3RhcnR1cFRpbWluZzogKCkgPT4gUmVhY3ROYXRpdmVTdGFydHVwVGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ05hdGl2ZVBlcmZvcm1hbmNlQ3h4Jyk6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4vLyBmbG93bGludCB1bnNhZmUtZ2V0dGVycy1zZXR0ZXJzOm9mZlxuXG5pbXBvcnQgdHlwZSB7SGlnaFJlc1RpbWVTdGFtcCwgUGVyZm9ybWFuY2VFbnRyeVR5cGV9IGZyb20gJy4vUGVyZm9ybWFuY2VFbnRyeSc7XG5pbXBvcnQgdHlwZSB7UGVyZm9ybWFuY2VFbnRyeUxpc3R9IGZyb20gJy4vUGVyZm9ybWFuY2VPYnNlcnZlcic7XG5cbmltcG9ydCB3YXJuT25jZSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVXRpbGl0aWVzL3dhcm5PbmNlJztcbmltcG9ydCBFdmVudENvdW50cyBmcm9tICcuL0V2ZW50Q291bnRzJztcbmltcG9ydCBNZW1vcnlJbmZvIGZyb20gJy4vTWVtb3J5SW5mbyc7XG5pbXBvcnQgTmF0aXZlUGVyZm9ybWFuY2UgZnJvbSAnLi9OYXRpdmVQZXJmb3JtYW5jZSc7XG5pbXBvcnQgTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlciBmcm9tICcuL05hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXInO1xuaW1wb3J0IHtBTFdBWVNfTE9HR0VEX0VOVFJZX1RZUEVTLCBQZXJmb3JtYW5jZUVudHJ5fSBmcm9tICcuL1BlcmZvcm1hbmNlRW50cnknO1xuaW1wb3J0IHt3YXJuTm9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyfSBmcm9tICcuL1BlcmZvcm1hbmNlT2JzZXJ2ZXInO1xuaW1wb3J0IHtcbiAgcGVyZm9ybWFuY2VFbnRyeVR5cGVUb1JhdyxcbiAgcmF3VG9QZXJmb3JtYW5jZUVudHJ5LFxufSBmcm9tICcuL1Jhd1BlcmZvcm1hbmNlRW50cnknO1xuaW1wb3J0IHtSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZVZhbHVlc30gZnJvbSAnLi9SYXdQZXJmb3JtYW5jZUVudHJ5JztcbmltcG9ydCBSZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmcgZnJvbSAnLi9SZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmcnO1xuXG50eXBlIERldGFpbFR5cGUgPSBtaXhlZDtcblxuZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VNYXJrT3B0aW9ucyA9IHtcbiAgZGV0YWlsPzogRGV0YWlsVHlwZSxcbiAgc3RhcnRUaW1lPzogSGlnaFJlc1RpbWVTdGFtcCxcbn07XG5cbmRlY2xhcmUgdmFyIGdsb2JhbDoge1xuICAvLyBUaGlzIHZhbHVlIGlzIGRlZmluZWQgZGlyZWN0bHkgdmlhIEpTSSwgaWYgYXZhaWxhYmxlLlxuICArbmF0aXZlUGVyZm9ybWFuY2VOb3c/OiA/KCkgPT4gbnVtYmVyLFxufTtcblxuY29uc3QgZ2V0Q3VycmVudFRpbWVTdGFtcDogKCkgPT4gSGlnaFJlc1RpbWVTdGFtcCA9IGdsb2JhbC5uYXRpdmVQZXJmb3JtYW5jZU5vd1xuICA/IGdsb2JhbC5uYXRpdmVQZXJmb3JtYW5jZU5vd1xuICA6ICgpID0+IERhdGUubm93KCk7XG5cbi8vIFdlIHdhbnQgc29tZSBvZiB0aGUgcGVyZm9ybWFuY2UgZW50cnkgdHlwZXMgdG8gYmUgYWx3YXlzIGxvZ2dlZCxcbi8vIGV2ZW4gaWYgdGhleSBhcmUgbm90IGN1cnJlbnRseSBvYnNlcnZlZCAtIHRoaXMgaXMgZWl0aGVyIHRvIGJlIGFibGUgdG9cbi8vIHJldHJpZXZlIHRoZW0gYXQgYW55IHRpbWUgdmlhIFBlcmZvcm1hbmNlLmdldEVudHJpZXMqIG9yIHRvIHJlZmVyIGJ5IG90aGVyIGVudHJpZXNcbi8vIChzdWNoIGFzIHdoZW4gbWVhc3VyZXMgbWF5IHJlZmVyIHRvIG1hcmtzLCBldmVuIGlmIHRoZSBsYXR0ZXIgYXJlIG5vdCBvYnNlcnZlZClcbmlmIChOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyPy5zZXRJc0J1ZmZlcmVkKSB7XG4gIE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXI/LnNldElzQnVmZmVyZWQoXG4gICAgQUxXQVlTX0xPR0dFRF9FTlRSWV9UWVBFUy5tYXAocGVyZm9ybWFuY2VFbnRyeVR5cGVUb1JhdyksXG4gICAgdHJ1ZSxcbiAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIFBlcmZvcm1hbmNlTWFyayBleHRlbmRzIFBlcmZvcm1hbmNlRW50cnkge1xuICBkZXRhaWw6IERldGFpbFR5cGU7XG5cbiAgY29uc3RydWN0b3IobWFya05hbWU6IHN0cmluZywgbWFya09wdGlvbnM/OiBQZXJmb3JtYW5jZU1hcmtPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgbmFtZTogbWFya05hbWUsXG4gICAgICBlbnRyeVR5cGU6ICdtYXJrJyxcbiAgICAgIHN0YXJ0VGltZTogbWFya09wdGlvbnM/LnN0YXJ0VGltZSA/PyBnZXRDdXJyZW50VGltZVN0YW1wKCksXG4gICAgICBkdXJhdGlvbjogMCxcbiAgICB9KTtcblxuICAgIGlmIChtYXJrT3B0aW9ucykge1xuICAgICAgdGhpcy5kZXRhaWwgPSBtYXJrT3B0aW9ucy5kZXRhaWw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRpbWVTdGFtcE9yTmFtZSA9IEhpZ2hSZXNUaW1lU3RhbXAgfCBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIFBlcmZvcm1hbmNlTWVhc3VyZU9wdGlvbnMgPSB7XG4gIGRldGFpbD86IERldGFpbFR5cGUsXG4gIHN0YXJ0PzogVGltZVN0YW1wT3JOYW1lLFxuICBlbmQ/OiBUaW1lU3RhbXBPck5hbWUsXG4gIGR1cmF0aW9uPzogSGlnaFJlc1RpbWVTdGFtcCxcbn07XG5cbmV4cG9ydCBjbGFzcyBQZXJmb3JtYW5jZU1lYXN1cmUgZXh0ZW5kcyBQZXJmb3JtYW5jZUVudHJ5IHtcbiAgZGV0YWlsOiBEZXRhaWxUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1lYXN1cmVOYW1lOiBzdHJpbmcsIG1lYXN1cmVPcHRpb25zPzogUGVyZm9ybWFuY2VNZWFzdXJlT3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIG5hbWU6IG1lYXN1cmVOYW1lLFxuICAgICAgZW50cnlUeXBlOiAnbWVhc3VyZScsXG4gICAgICBzdGFydFRpbWU6IDAsXG4gICAgICBkdXJhdGlvbjogbWVhc3VyZU9wdGlvbnM/LmR1cmF0aW9uID8/IDAsXG4gICAgfSk7XG5cbiAgICBpZiAobWVhc3VyZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZGV0YWlsID0gbWVhc3VyZU9wdGlvbnMuZGV0YWlsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9OYXRpdmVQZXJmb3JtYW5jZSgpIHtcbiAgd2Fybk9uY2UoXG4gICAgJ21pc3NpbmctbmF0aXZlLXBlcmZvcm1hbmNlJyxcbiAgICAnTWlzc2luZyBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgUGVyZm9ybWFuY2UnLFxuICApO1xufVxuXG4vKipcbiAqIFBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBlcmZvcm1hbmNlIGludGVyZmFjZSBmb3IgUk4sXG4gKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdGFuZGFyZCBpblxuICogaHR0cHM6Ly93d3cudzMub3JnL1RSL3VzZXItdGltaW5nLyNleHRlbnNpb25zLXBlcmZvcm1hbmNlLWludGVyZmFjZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJmb3JtYW5jZSB7XG4gIGV2ZW50Q291bnRzOiBFdmVudENvdW50cyA9IG5ldyBFdmVudENvdW50cygpO1xuXG4gIC8vIEdldCB0aGUgY3VycmVudCBKUyBtZW1vcnkgaW5mb3JtYXRpb24uXG4gIGdldCBtZW1vcnkoKTogTWVtb3J5SW5mbyB7XG4gICAgaWYgKE5hdGl2ZVBlcmZvcm1hbmNlPy5nZXRTaW1wbGVNZW1vcnlJbmZvKSB7XG4gICAgICAvLyBKU0kgQVBJIGltcGxlbWVudGF0aW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgdmFyaWFudHMgb2YgbmFtZXMgZm9yIHRoZSBKU1xuICAgICAgLy8gaGVhcCBpbmZvcm1hdGlvbiB3ZSBuZWVkIGhlcmUuIFdlIHdpbGwgcGFyc2UgdGhlIHJlc3VsdCBiYXNlZCBvbiBvdXJcbiAgICAgIC8vIGd1ZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LlxuICAgICAgY29uc3QgbWVtb3J5SW5mbyA9IE5hdGl2ZVBlcmZvcm1hbmNlLmdldFNpbXBsZU1lbW9yeUluZm8oKTtcbiAgICAgIGlmIChtZW1vcnlJbmZvLmhhc093blByb3BlcnR5KCdoZXJtZXNfaGVhcFNpemUnKSkge1xuICAgICAgICAvLyBXZSBnb3QgbWVtb3J5IGluZm9ybWF0aW9uIGZyb20gSGVybWVzXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoZXJtZXNfaGVhcFNpemU6IHRvdGFsSlNIZWFwU2l6ZSxcbiAgICAgICAgICBoZXJtZXNfYWxsb2NhdGVkQnl0ZXM6IHVzZWRKU0hlYXBTaXplLFxuICAgICAgICB9ID0gbWVtb3J5SW5mbztcblxuICAgICAgICByZXR1cm4gbmV3IE1lbW9yeUluZm8oe1xuICAgICAgICAgIGpzSGVhcFNpemVMaW1pdDogbnVsbCwgLy8gV2UgZG9uJ3Qga25vdyB0aGUgaGVhcCBzaXplIGxpbWl0IGZyb20gSGVybWVzLlxuICAgICAgICAgIHRvdGFsSlNIZWFwU2l6ZSxcbiAgICAgICAgICB1c2VkSlNIZWFwU2l6ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBKU0MgYW5kIFY4IGhhcyBubyBuYXRpdmUgaW1wbGVtZW50YXRpb25zIGZvciBtZW1vcnkgaW5mb3JtYXRpb24gaW4gSlNJOjpJbnN0cnVtZW50YXRpb25cbiAgICAgICAgcmV0dXJuIG5ldyBNZW1vcnlJbmZvKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNZW1vcnlJbmZvKCk7XG4gIH1cblxuICAvLyBTdGFydHVwIG1ldHJpY3MgaXMgbm90IHVzZWQgaW4gd2ViLCBidXQgb25seSBpbiBSZWFjdCBOYXRpdmUuXG4gIGdldCByblN0YXJ0dXBUaW1pbmcoKTogUmVhY3ROYXRpdmVTdGFydHVwVGltaW5nIHtcbiAgICBpZiAoTmF0aXZlUGVyZm9ybWFuY2U/LmdldFJlYWN0TmF0aXZlU3RhcnR1cFRpbWluZykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIGVuZFRpbWUsXG4gICAgICAgIGluaXRpYWxpemVSdW50aW1lU3RhcnQsXG4gICAgICAgIGluaXRpYWxpemVSdW50aW1lRW5kLFxuICAgICAgICBleGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydCxcbiAgICAgICAgZXhlY3V0ZUphdmFTY3JpcHRCdW5kbGVFbnRyeVBvaW50RW5kLFxuICAgICAgfSA9IE5hdGl2ZVBlcmZvcm1hbmNlLmdldFJlYWN0TmF0aXZlU3RhcnR1cFRpbWluZygpO1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmcoe1xuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIGVuZFRpbWUsXG4gICAgICAgIGluaXRpYWxpemVSdW50aW1lU3RhcnQsXG4gICAgICAgIGluaXRpYWxpemVSdW50aW1lRW5kLFxuICAgICAgICBleGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydCxcbiAgICAgICAgZXhlY3V0ZUphdmFTY3JpcHRCdW5kbGVFbnRyeVBvaW50RW5kLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVhY3ROYXRpdmVTdGFydHVwVGltaW5nKCk7XG4gIH1cblxuICBtYXJrKFxuICAgIG1hcmtOYW1lOiBzdHJpbmcsXG4gICAgbWFya09wdGlvbnM/OiBQZXJmb3JtYW5jZU1hcmtPcHRpb25zLFxuICApOiBQZXJmb3JtYW5jZU1hcmsge1xuICAgIGNvbnN0IG1hcmsgPSBuZXcgUGVyZm9ybWFuY2VNYXJrKG1hcmtOYW1lLCBtYXJrT3B0aW9ucyk7XG5cbiAgICBpZiAoTmF0aXZlUGVyZm9ybWFuY2U/Lm1hcmspIHtcbiAgICAgIE5hdGl2ZVBlcmZvcm1hbmNlLm1hcmsobWFya05hbWUsIG1hcmsuc3RhcnRUaW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuXG4gIGNsZWFyTWFya3MobWFya05hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIU5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXI/LmNsZWFyRW50cmllcykge1xuICAgICAgd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXI/LmNsZWFyRW50cmllcyhcbiAgICAgIFJhd1BlcmZvcm1hbmNlRW50cnlUeXBlVmFsdWVzLk1BUkssXG4gICAgICBtYXJrTmFtZSxcbiAgICApO1xuICB9XG5cbiAgbWVhc3VyZShcbiAgICBtZWFzdXJlTmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0TWFya09yT3B0aW9ucz86IHN0cmluZyB8IFBlcmZvcm1hbmNlTWVhc3VyZU9wdGlvbnMsXG4gICAgZW5kTWFyaz86IHN0cmluZyxcbiAgKTogUGVyZm9ybWFuY2VNZWFzdXJlIHtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBsZXQgc3RhcnRNYXJrTmFtZSxcbiAgICAgIGVuZE1hcmtOYW1lID0gZW5kTWFyayxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgc3RhcnRUaW1lID0gMCxcbiAgICAgIGVuZFRpbWUgPSAwO1xuXG4gICAgaWYgKHR5cGVvZiBzdGFydE1hcmtPck9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzdGFydE1hcmtOYW1lID0gc3RhcnRNYXJrT3JPcHRpb25zO1xuICAgIH0gZWxzZSBpZiAoc3RhcnRNYXJrT3JPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMgPSBzdGFydE1hcmtPck9wdGlvbnM7XG4gICAgICBpZiAoZW5kTWFyayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJQZXJmb3JtYW5jZS5tZWFzdXJlOiBDYW4ndCBoYXZlIGJvdGggb3B0aW9ucyBhbmQgZW5kTWFya1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1BlcmZvcm1hbmNlLm1lYXN1cmU6IE11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgb2Ygc3RhcnQvZW5kIHNwZWNpZmllZCBpbiBvcHRpb25zJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5zdGFydCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIG9wdGlvbnMuZW5kICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlBlcmZvcm1hbmNlLm1lYXN1cmU6IENhbid0IGhhdmUgYm90aCBzdGFydC9lbmQgYW5kIGR1cmF0aW9uIGV4cGxpY2l0bHkgaW4gb3B0aW9uc1wiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RhcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IG9wdGlvbnMuc3RhcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydE1hcmtOYW1lID0gb3B0aW9ucy5zdGFydDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmVuZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZW5kVGltZSA9IG9wdGlvbnMuZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kTWFya05hbWUgPSBvcHRpb25zLmVuZDtcbiAgICAgIH1cblxuICAgICAgZHVyYXRpb24gPSBvcHRpb25zLmR1cmF0aW9uID8/IGR1cmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IG1lYXN1cmUgPSBuZXcgUGVyZm9ybWFuY2VNZWFzdXJlKG1lYXN1cmVOYW1lLCBvcHRpb25zKTtcblxuICAgIGlmIChOYXRpdmVQZXJmb3JtYW5jZT8ubWVhc3VyZSkge1xuICAgICAgTmF0aXZlUGVyZm9ybWFuY2UubWVhc3VyZShcbiAgICAgICAgbWVhc3VyZU5hbWUsXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgZW5kVGltZSxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIHN0YXJ0TWFya05hbWUsXG4gICAgICAgIGVuZE1hcmtOYW1lLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVhc3VyZTtcbiAgfVxuXG4gIGNsZWFyTWVhc3VyZXMobWVhc3VyZU5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIU5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXI/LmNsZWFyRW50cmllcykge1xuICAgICAgd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXI/LmNsZWFyRW50cmllcyhcbiAgICAgIFJhd1BlcmZvcm1hbmNlRW50cnlUeXBlVmFsdWVzLk1FQVNVUkUsXG4gICAgICBtZWFzdXJlTmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkb3VibGUsIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcy5cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlL25vd1xuICAgKi9cbiAgbm93KCk6IEhpZ2hSZXNUaW1lU3RhbXAge1xuICAgIHJldHVybiBnZXRDdXJyZW50VGltZVN0YW1wKCk7XG4gIH1cblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIHRoYXQgYWxsb3dzIHRvIGdldCBiYWNrIHRvIEpTIGFsbCBjdXJyZW50bHkgbG9nZ2VkIG1hcmtzL21lYXN1cmVzXG4gICAqIChpbiBvdXIgY2FzZSwgYmUgaXQgZnJvbSBKUyBvciBuYXRpdmUpLCBzZWVcbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL3BlcmZvcm1hbmNlLXRpbWVsaW5lLyNleHRlbnNpb25zLXRvLXRoZS1wZXJmb3JtYW5jZS1pbnRlcmZhY2VcbiAgICovXG4gIGdldEVudHJpZXMoKTogUGVyZm9ybWFuY2VFbnRyeUxpc3Qge1xuICAgIGlmICghTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcj8uZ2V0RW50cmllcykge1xuICAgICAgd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcigpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlci5nZXRFbnRyaWVzKCkubWFwKHJhd1RvUGVyZm9ybWFuY2VFbnRyeSk7XG4gIH1cblxuICBnZXRFbnRyaWVzQnlUeXBlKGVudHJ5VHlwZTogUGVyZm9ybWFuY2VFbnRyeVR5cGUpOiBQZXJmb3JtYW5jZUVudHJ5TGlzdCB7XG4gICAgaWYgKCFBTFdBWVNfTE9HR0VEX0VOVFJZX1RZUEVTLmluY2x1ZGVzKGVudHJ5VHlwZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGU6IE9ubHkgdmFsaWQgZm9yICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgQUxXQVlTX0xPR0dFRF9FTlRSWV9UWVBFUyxcbiAgICAgICAgKX0gZW50cnkgdHlwZXMsIGdvdCAke2VudHJ5VHlwZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoIU5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXI/LmdldEVudHJpZXMpIHtcbiAgICAgIHdhcm5Ob05hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIuZ2V0RW50cmllcyhcbiAgICAgIHBlcmZvcm1hbmNlRW50cnlUeXBlVG9SYXcoZW50cnlUeXBlKSxcbiAgICApLm1hcChyYXdUb1BlcmZvcm1hbmNlRW50cnkpO1xuICB9XG5cbiAgZ2V0RW50cmllc0J5TmFtZShcbiAgICBlbnRyeU5hbWU6IHN0cmluZyxcbiAgICBlbnRyeVR5cGU/OiBQZXJmb3JtYW5jZUVudHJ5VHlwZSxcbiAgKTogUGVyZm9ybWFuY2VFbnRyeUxpc3Qge1xuICAgIGlmIChcbiAgICAgIGVudHJ5VHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAhQUxXQVlTX0xPR0dFRF9FTlRSWV9UWVBFUy5pbmNsdWRlcyhlbnRyeVR5cGUpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBQZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lOiBPbmx5IHZhbGlkIGZvciAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIEFMV0FZU19MT0dHRURfRU5UUllfVFlQRVMsXG4gICAgICAgICl9IGVudHJ5IHR5cGVzLCBnb3QgJHtlbnRyeVR5cGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyPy5nZXRFbnRyaWVzKSB7XG4gICAgICB3YXJuTm9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyKCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyLmdldEVudHJpZXMoXG4gICAgICBlbnRyeVR5cGUgIT0gbnVsbCA/IHBlcmZvcm1hbmNlRW50cnlUeXBlVG9SYXcoZW50cnlUeXBlKSA6IHVuZGVmaW5lZCxcbiAgICAgIGVudHJ5TmFtZSxcbiAgICApLm1hcChyYXdUb1BlcmZvcm1hbmNlRW50cnkpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIgZnJvbSAnLi9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyJztcbmltcG9ydCB7d2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcn0gZnJvbSAnLi9QZXJmb3JtYW5jZU9ic2VydmVyJztcblxudHlwZSBFdmVudENvdW50c0ZvckVhY2hDYWxsYmFja1R5cGUgPVxuICB8ICgoKSA9PiB2b2lkKVxuICB8ICgodmFsdWU6IG51bWJlcikgPT4gdm9pZClcbiAgfCAoKHZhbHVlOiBudW1iZXIsIGtleTogc3RyaW5nKSA9PiB2b2lkKVxuICB8ICgodmFsdWU6IG51bWJlciwga2V5OiBzdHJpbmcsIG1hcDogTWFwPHN0cmluZywgbnVtYmVyPikgPT4gdm9pZCk7XG5cbmxldCBjYWNoZWRFdmVudENvdW50czogP01hcDxzdHJpbmcsIG51bWJlcj47XG5cbmZ1bmN0aW9uIGdldENhY2hlZEV2ZW50Q291bnRzKCk6IE1hcDxzdHJpbmcsIG51bWJlcj4ge1xuICBpZiAoY2FjaGVkRXZlbnRDb3VudHMpIHtcbiAgICByZXR1cm4gY2FjaGVkRXZlbnRDb3VudHM7XG4gIH1cbiAgaWYgKCFOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyKSB7XG4gICAgd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcigpO1xuICAgIHJldHVybiBuZXcgTWFwKCk7XG4gIH1cblxuICBjYWNoZWRFdmVudENvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFxuICAgIE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIuZ2V0RXZlbnRDb3VudHMoKSxcbiAgKTtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgZ2xvYmFsLnF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAvLyBUbyBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGNhbGxzIHRvIHRoZSBBUEkgZnJvbSB0aGUgc2FtZSB0YXNrLFxuICAgIC8vIGJ1dCBhbHNvIG5vdCB0byByZWZldGNoIHRoZSBkYXRhIGZyb20gbmF0aXZlIHRvbyBvZnRlbixcbiAgICAvLyBzY2hlZHVsZSB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZSBsYXRlcixcbiAgICAvLyBhZnRlciB0aGUgY3VycmVudCB0YXNrIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBmaW5pc2hlZC5cbiAgICBjYWNoZWRFdmVudENvdW50cyA9IG51bGw7XG4gIH0pO1xuICByZXR1cm4gY2FjaGVkRXZlbnRDb3VudHMgPz8gbmV3IE1hcCgpO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRXZlbnRDb3VudHMgV2ViIFBlcmZvcm1hbmNlIEFQSVxuICogY29ycmVzcG9uZGluZyB0byB0aGUgc3RhbmRhcmQgaW5cbiAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ldmVudC10aW1pbmcvI2V2ZW50Y291bnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50Q291bnRzIHtcbiAgLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkRXZlbnRDb3VudHMoKS5zaXplO1xuICB9XG5cbiAgZW50cmllcygpOiBJdGVyYXRvcjxbc3RyaW5nLCBudW1iZXJdPiB7XG4gICAgcmV0dXJuIGdldENhY2hlZEV2ZW50Q291bnRzKCkuZW50cmllcygpO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjazogRXZlbnRDb3VudHNGb3JFYWNoQ2FsbGJhY2tUeXBlKTogdm9pZCB7XG4gICAgcmV0dXJuIGdldENhY2hlZEV2ZW50Q291bnRzKCkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiA/bnVtYmVyIHtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkRXZlbnRDb3VudHMoKS5nZXQoa2V5KTtcbiAgfVxuXG4gIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBnZXRDYWNoZWRFdmVudENvdW50cygpLmhhcyhrZXkpO1xuICB9XG5cbiAga2V5cygpOiBJdGVyYXRvcjxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkRXZlbnRDb3VudHMoKS5rZXlzKCk7XG4gIH1cblxuICB2YWx1ZXMoKTogSXRlcmF0b3I8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGdldENhY2hlZEV2ZW50Q291bnRzKCkudmFsdWVzKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IHR5cGUgUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGUgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIFJhd1BlcmZvcm1hbmNlRW50cnkgPSB7fFxuICBuYW1lOiBzdHJpbmcsXG4gIGVudHJ5VHlwZTogUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGUsXG4gIHN0YXJ0VGltZTogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICAvLyBGb3IgXCJldmVudFwiIGVudHJpZXMgb25seTpcbiAgcHJvY2Vzc2luZ1N0YXJ0PzogbnVtYmVyLFxuICBwcm9jZXNzaW5nRW5kPzogbnVtYmVyLFxuICBpbnRlcmFjdGlvbklkPzogbnVtYmVyLFxufH07XG5cbmV4cG9ydCB0eXBlIEdldFBlbmRpbmdFbnRyaWVzUmVzdWx0ID0ge3xcbiAgZW50cmllczogJFJlYWRPbmx5QXJyYXk8UmF3UGVyZm9ybWFuY2VFbnRyeT4sXG4gIGRyb3BwZWRFbnRyaWVzQ291bnQ6IG51bWJlcixcbnx9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtzdGFydFJlcG9ydGluZzogKGVudHJ5VHlwZTogUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGUpID0+IHZvaWQ7XG4gICtzdG9wUmVwb3J0aW5nOiAoZW50cnlUeXBlOiBSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZSkgPT4gdm9pZDtcbiAgK3NldElzQnVmZmVyZWQ6IChcbiAgICBlbnRyeVR5cGVzOiAkUmVhZE9ubHlBcnJheTxSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZT4sXG4gICAgaXNCdWZmZXJlZDogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xuICArcG9wUGVuZGluZ0VudHJpZXM6ICgpID0+IEdldFBlbmRpbmdFbnRyaWVzUmVzdWx0O1xuICArc2V0T25QZXJmb3JtYW5jZUVudHJ5Q2FsbGJhY2s6IChjYWxsYmFjaz86ICgpID0+IHZvaWQpID0+IHZvaWQ7XG4gICtsb2dSYXdFbnRyeTogKGVudHJ5OiBSYXdQZXJmb3JtYW5jZUVudHJ5KSA9PiB2b2lkO1xuICArZ2V0RXZlbnRDb3VudHM6ICgpID0+ICRSZWFkT25seUFycmF5PFtzdHJpbmcsIG51bWJlcl0+O1xuICArc2V0RHVyYXRpb25UaHJlc2hvbGQ6IChcbiAgICBlbnRyeVR5cGU6IFJhd1BlcmZvcm1hbmNlRW50cnlUeXBlLFxuICAgIGR1cmF0aW9uVGhyZXNob2xkOiBudW1iZXIsXG4gICkgPT4gdm9pZDtcbiAgK2NsZWFyRW50cmllczogKFxuICAgIGVudHJ5VHlwZTogUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGUsXG4gICAgZW50cnlOYW1lPzogc3RyaW5nLFxuICApID0+IHZvaWQ7XG4gICtnZXRFbnRyaWVzOiAoXG4gICAgZW50cnlUeXBlPzogUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGUsXG4gICAgZW50cnlOYW1lPzogc3RyaW5nLFxuICApID0+ICRSZWFkT25seUFycmF5PFJhd1BlcmZvcm1hbmNlRW50cnk+O1xuICArZ2V0U3VwcG9ydGVkUGVyZm9ybWFuY2VFbnRyeVR5cGVzOiAoKSA9PiAkUmVhZE9ubHlBcnJheTxSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZT47XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPihcbiAgJ05hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXJDeHgnLFxuKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbmltcG9ydCB0eXBlIHtIaWdoUmVzVGltZVN0YW1wLCBQZXJmb3JtYW5jZUVudHJ5VHlwZX0gZnJvbSAnLi9QZXJmb3JtYW5jZUVudHJ5JztcblxuaW1wb3J0IHdhcm5PbmNlIGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9VdGlsaXRpZXMvd2Fybk9uY2UnO1xuaW1wb3J0IE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIgZnJvbSAnLi9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyJztcbmltcG9ydCB7UGVyZm9ybWFuY2VFbnRyeX0gZnJvbSAnLi9QZXJmb3JtYW5jZUVudHJ5JztcbmltcG9ydCBQZXJmb3JtYW5jZUV2ZW50VGltaW5nIGZyb20gJy4vUGVyZm9ybWFuY2VFdmVudFRpbWluZyc7XG5pbXBvcnQge1xuICBwZXJmb3JtYW5jZUVudHJ5VHlwZVRvUmF3LFxuICByYXdUb1BlcmZvcm1hbmNlRW50cnksXG4gIHJhd1RvUGVyZm9ybWFuY2VFbnRyeVR5cGUsXG59IGZyb20gJy4vUmF3UGVyZm9ybWFuY2VFbnRyeSc7XG5cbmV4cG9ydCB0eXBlIFBlcmZvcm1hbmNlRW50cnlMaXN0ID0gJFJlYWRPbmx5QXJyYXk8UGVyZm9ybWFuY2VFbnRyeT47XG5cbmV4cG9ydCBjbGFzcyBQZXJmb3JtYW5jZU9ic2VydmVyRW50cnlMaXN0IHtcbiAgX2VudHJpZXM6IFBlcmZvcm1hbmNlRW50cnlMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGVudHJpZXM6IFBlcmZvcm1hbmNlRW50cnlMaXN0KSB7XG4gICAgdGhpcy5fZW50cmllcyA9IGVudHJpZXM7XG4gIH1cblxuICBnZXRFbnRyaWVzKCk6IFBlcmZvcm1hbmNlRW50cnlMaXN0IHtcbiAgICByZXR1cm4gdGhpcy5fZW50cmllcztcbiAgfVxuXG4gIGdldEVudHJpZXNCeVR5cGUodHlwZTogUGVyZm9ybWFuY2VFbnRyeVR5cGUpOiBQZXJmb3JtYW5jZUVudHJ5TGlzdCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudHJpZXMuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmVudHJ5VHlwZSA9PT0gdHlwZSk7XG4gIH1cblxuICBnZXRFbnRyaWVzQnlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB0eXBlPzogUGVyZm9ybWFuY2VFbnRyeVR5cGUsXG4gICk6IFBlcmZvcm1hbmNlRW50cnlMaXN0IHtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbnRyaWVzLmZpbHRlcihcbiAgICAgICAgZW50cnkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSAmJiBlbnRyeS5lbnRyeVR5cGUgPT09IHR5cGUsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBQZXJmb3JtYW5jZU9ic2VydmVyQ2FsbGJhY2sgPSAoXG4gIGxpc3Q6IFBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3QsXG4gIG9ic2VydmVyOiBQZXJmb3JtYW5jZU9ic2VydmVyLFxuICAvLyBUaGUgbnVtYmVyIG9mIGJ1ZmZlcmVkIGVudHJpZXMgd2hpY2ggZ290IGRyb3BwZWQgZnJvbSB0aGUgYnVmZmVyIGR1ZSB0byB0aGUgYnVmZmVyIGJlaW5nIGZ1bGw6XG4gIGRyb3BwZWRFbnRyeUNvdW50PzogbnVtYmVyLFxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBQZXJmb3JtYW5jZU9ic2VydmVySW5pdCA9XG4gIHwge1xuICAgICAgZW50cnlUeXBlczogQXJyYXk8UGVyZm9ybWFuY2VFbnRyeVR5cGU+LFxuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBQZXJmb3JtYW5jZUVudHJ5VHlwZSxcbiAgICAgIGR1cmF0aW9uVGhyZXNob2xkPzogSGlnaFJlc1RpbWVTdGFtcCxcbiAgICB9O1xuXG50eXBlIFBlcmZvcm1hbmNlT2JzZXJ2ZXJDb25maWcgPSB7fFxuICBjYWxsYmFjazogUGVyZm9ybWFuY2VPYnNlcnZlckNhbGxiYWNrLFxuICAvLyBNYXAgb2Yge2VudHJ5VHlwZTogZHVyYXRpb25UaHJlc2hvbGR9XG4gIGVudHJ5VHlwZXM6ICRSZWFkT25seU1hcDxQZXJmb3JtYW5jZUVudHJ5VHlwZSwgP251bWJlcj4sXG58fTtcblxuY29uc3Qgb2JzZXJ2ZXJDb3VudFBlckVudHJ5VHlwZTogTWFwPFBlcmZvcm1hbmNlRW50cnlUeXBlLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuY29uc3QgcmVnaXN0ZXJlZE9ic2VydmVyczogTWFwPFBlcmZvcm1hbmNlT2JzZXJ2ZXIsIFBlcmZvcm1hbmNlT2JzZXJ2ZXJDb25maWc+ID1cbiAgbmV3IE1hcCgpO1xubGV0IGlzT25QZXJmb3JtYW5jZUVudHJ5Q2FsbGJhY2tTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuLy8gVGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgZ2V0cyBzY2hlZHVsZWQgYW5kIHBlcmlvZGljYWxseSBjYWxsZWQgZnJvbSB0aGUgbmF0aXZlIHNpZGVcbmNvbnN0IG9uUGVyZm9ybWFuY2VFbnRyeSA9ICgpID0+IHtcbiAgaWYgKCFOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVudHJ5UmVzdWx0ID0gTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlci5wb3BQZW5kaW5nRW50cmllcygpO1xuICBjb25zdCByYXdFbnRyaWVzID0gZW50cnlSZXN1bHQ/LmVudHJpZXMgPz8gW107XG4gIGNvbnN0IGRyb3BwZWRFbnRyaWVzQ291bnQgPSBlbnRyeVJlc3VsdD8uZHJvcHBlZEVudHJpZXNDb3VudDtcbiAgaWYgKHJhd0VudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSByYXdFbnRyaWVzLm1hcChyYXdUb1BlcmZvcm1hbmNlRW50cnkpO1xuICBmb3IgKGNvbnN0IFtvYnNlcnZlciwgb2JzZXJ2ZXJDb25maWddIG9mIHJlZ2lzdGVyZWRPYnNlcnZlcnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgZW50cmllc0Zvck9ic2VydmVyOiBQZXJmb3JtYW5jZUVudHJ5TGlzdCA9IGVudHJpZXMuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICAgIGlmICghb2JzZXJ2ZXJDb25maWcuZW50cnlUeXBlcy5oYXMoZW50cnkuZW50cnlUeXBlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBkdXJhdGlvblRocmVzaG9sZCA9IG9ic2VydmVyQ29uZmlnLmVudHJ5VHlwZXMuZ2V0KGVudHJ5LmVudHJ5VHlwZSk7XG4gICAgICByZXR1cm4gZW50cnkuZHVyYXRpb24gPj0gKGR1cmF0aW9uVGhyZXNob2xkID8/IDApO1xuICAgIH0pO1xuICAgIG9ic2VydmVyQ29uZmlnLmNhbGxiYWNrKFxuICAgICAgbmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3QoZW50cmllc0Zvck9ic2VydmVyKSxcbiAgICAgIG9ic2VydmVyLFxuICAgICAgZHJvcHBlZEVudHJpZXNDb3VudCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcigpIHtcbiAgd2Fybk9uY2UoXG4gICAgJ21pc3NpbmctbmF0aXZlLXBlcmZvcm1hbmNlLW9ic2VydmVyJyxcbiAgICAnTWlzc2luZyBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgUGVyZm9ybWFuY2VPYnNlcnZlcicsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RHVyYXRpb25UaHJlc2hvbGRzKCkge1xuICBjb25zdCBkdXJhdGlvblRocmVzaG9sZHM6IE1hcDxQZXJmb3JtYW5jZUVudHJ5VHlwZSwgP251bWJlcj4gPSBBcnJheS5mcm9tKFxuICAgIHJlZ2lzdGVyZWRPYnNlcnZlcnMudmFsdWVzKCksXG4gIClcbiAgICAubWFwKGNvbmZpZyA9PiBjb25maWcuZW50cnlUeXBlcylcbiAgICAucmVkdWNlKFxuICAgICAgKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHVuaW9uKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpLFxuICAgICAgbmV3IE1hcCgpLFxuICAgICk7XG5cbiAgZm9yIChjb25zdCBbZW50cnlUeXBlLCBkdXJhdGlvblRocmVzaG9sZF0gb2YgZHVyYXRpb25UaHJlc2hvbGRzKSB7XG4gICAgTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcj8uc2V0RHVyYXRpb25UaHJlc2hvbGQoXG4gICAgICBwZXJmb3JtYW5jZUVudHJ5VHlwZVRvUmF3KGVudHJ5VHlwZSksXG4gICAgICBkdXJhdGlvblRocmVzaG9sZCA/PyAwLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydGVkUGVyZm9ybWFuY2VFbnRyeVR5cGVzKCk6ICRSZWFkT25seUFycmF5PFBlcmZvcm1hbmNlRW50cnlUeXBlPiB7XG4gIGlmICghTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcikge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKFtdKTtcbiAgfVxuICBpZiAoIU5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIuZ2V0U3VwcG9ydGVkUGVyZm9ybWFuY2VFbnRyeVR5cGVzKSB7XG4gICAgLy8gZmFsbGJhY2sgaWYgZ2V0U3VwcG9ydGVkUGVyZm9ybWFuY2VFbnRyeVR5cGVzIGlzIG5vdCBkZWZpbmVkIG9uIG5hdGl2ZSBzaWRlXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoWydtYXJrJywgJ21lYXN1cmUnLCAnZXZlbnQnXSk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoXG4gICAgTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlci5nZXRTdXBwb3J0ZWRQZXJmb3JtYW5jZUVudHJ5VHlwZXMoKS5tYXAoXG4gICAgICByYXdUb1BlcmZvcm1hbmNlRW50cnlUeXBlLFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgaW50ZXJmYWNlIGZvciBSTixcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YW5kYXJkIGluIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wZXJmb3JtYW5jZS10aW1lbGluZS9cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcigobGlzdCwgX29ic2VydmVyKSA9PiB7XG4gKiAgIGNvbnN0IGVudHJpZXMgPSBsaXN0LmdldEVudHJpZXMoKTtcbiAqICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAqICAgICByZXBvcnRFdmVudCh7XG4gKiAgICAgICBldmVudE5hbWU6IGVudHJ5Lm5hbWUsXG4gKiAgICAgICBzdGFydFRpbWU6IGVudHJ5LnN0YXJ0VGltZSxcbiAqICAgICAgIGVuZFRpbWU6IGVudHJ5LnN0YXJ0VGltZSArIGVudHJ5LmR1cmF0aW9uLFxuICogICAgICAgcHJvY2Vzc2luZ1N0YXJ0OiBlbnRyeS5wcm9jZXNzaW5nU3RhcnQsXG4gKiAgICAgICBwcm9jZXNzaW5nRW5kOiBlbnRyeS5wcm9jZXNzaW5nRW5kLFxuICogICAgICAgaW50ZXJhY3Rpb25JZDogZW50cnkuaW50ZXJhY3Rpb25JZCxcbiAqICAgICB9KTtcbiAqICAgfSk7XG4gKiB9KTtcbiAqIG9ic2VydmVyLm9ic2VydmUoeyB0eXBlOiBcImV2ZW50XCIgfSk7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcmZvcm1hbmNlT2JzZXJ2ZXIge1xuICBfY2FsbGJhY2s6IFBlcmZvcm1hbmNlT2JzZXJ2ZXJDYWxsYmFjaztcbiAgX3R5cGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2s6IFBlcmZvcm1hbmNlT2JzZXJ2ZXJDYWxsYmFjaykge1xuICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBvYnNlcnZlKG9wdGlvbnM6IFBlcmZvcm1hbmNlT2JzZXJ2ZXJJbml0KTogdm9pZCB7XG4gICAgaWYgKCFOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyKSB7XG4gICAgICB3YXJuTm9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsaWRhdGVPYnNlcnZlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGxldCByZXF1ZXN0ZWRFbnRyeVR5cGVzO1xuXG4gICAgaWYgKG9wdGlvbnMuZW50cnlUeXBlcykge1xuICAgICAgdGhpcy5fdHlwZSA9ICdtdWx0aXBsZSc7XG4gICAgICByZXF1ZXN0ZWRFbnRyeVR5cGVzID0gbmV3IE1hcChcbiAgICAgICAgb3B0aW9ucy5lbnRyeVR5cGVzLm1hcCh0ID0+IFt0LCB1bmRlZmluZWRdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSAnc2luZ2xlJztcbiAgICAgIHJlcXVlc3RlZEVudHJ5VHlwZXMgPSBuZXcgTWFwKFtcbiAgICAgICAgW29wdGlvbnMudHlwZSwgb3B0aW9ucy5kdXJhdGlvblRocmVzaG9sZF0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgc2FtZSBvYnNlcnZlciBtYXkgcmVjZWl2ZSBtdWx0aXBsZSBjYWxscyB0byBcIm9ic2VydmVcIiwgc28gd2UgbmVlZFxuICAgIC8vIHRvIGNoZWNrIHdoYXQgaXMgbmV3IG9uIHRoaXMgY2FsbCB2cy4gcHJldmlvdXMgb25lcy5cbiAgICBjb25zdCBjdXJyZW50RW50cnlUeXBlcyA9IHJlZ2lzdGVyZWRPYnNlcnZlcnMuZ2V0KHRoaXMpPy5lbnRyeVR5cGVzO1xuICAgIGNvbnN0IG5leHRFbnRyeVR5cGVzID0gY3VycmVudEVudHJ5VHlwZXNcbiAgICAgID8gdW5pb24ocmVxdWVzdGVkRW50cnlUeXBlcywgY3VycmVudEVudHJ5VHlwZXMpXG4gICAgICA6IHJlcXVlc3RlZEVudHJ5VHlwZXM7XG5cbiAgICAvLyBUaGlzIGBvYnNlcnZlYCBjYWxsIGlzIGEgbm8tb3AgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbmV3IHRoaW5ncyB0byBvYnNlcnZlLlxuICAgIGlmIChjdXJyZW50RW50cnlUeXBlcyAmJiBjdXJyZW50RW50cnlUeXBlcy5zaXplID09PSBuZXh0RW50cnlUeXBlcy5zaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJlZE9ic2VydmVycy5zZXQodGhpcywge1xuICAgICAgY2FsbGJhY2s6IHRoaXMuX2NhbGxiYWNrLFxuICAgICAgZW50cnlUeXBlczogbmV4dEVudHJ5VHlwZXMsXG4gICAgfSk7XG5cbiAgICBpZiAoIWlzT25QZXJmb3JtYW5jZUVudHJ5Q2FsbGJhY2tTZXQpIHtcbiAgICAgIE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIuc2V0T25QZXJmb3JtYW5jZUVudHJ5Q2FsbGJhY2soXG4gICAgICAgIG9uUGVyZm9ybWFuY2VFbnRyeSxcbiAgICAgICk7XG4gICAgICBpc09uUGVyZm9ybWFuY2VFbnRyeUNhbGxiYWNrU2V0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gc3RhcnQgbGlzdGVuZW5pbmcgdG8gbmV3IGVudHJ5IHR5cGVzIGJlaW5nIG9ic2VydmVkIGluXG4gICAgLy8gdGhpcyBvYnNlcnZlci5cbiAgICBjb25zdCBuZXdFbnRyeVR5cGVzID0gY3VycmVudEVudHJ5VHlwZXNcbiAgICAgID8gZGlmZmVyZW5jZShcbiAgICAgICAgICBuZXcgU2V0KHJlcXVlc3RlZEVudHJ5VHlwZXMua2V5cygpKSxcbiAgICAgICAgICBuZXcgU2V0KGN1cnJlbnRFbnRyeVR5cGVzLmtleXMoKSksXG4gICAgICAgIClcbiAgICAgIDogbmV3IFNldChyZXF1ZXN0ZWRFbnRyeVR5cGVzLmtleXMoKSk7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIG5ld0VudHJ5VHlwZXMpIHtcbiAgICAgIGlmICghb2JzZXJ2ZXJDb3VudFBlckVudHJ5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgICAgY29uc3QgcmF3VHlwZSA9IHBlcmZvcm1hbmNlRW50cnlUeXBlVG9SYXcodHlwZSk7XG4gICAgICAgIE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3RhcnRSZXBvcnRpbmcocmF3VHlwZSk7XG4gICAgICB9XG4gICAgICBvYnNlcnZlckNvdW50UGVyRW50cnlUeXBlLnNldChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgKG9ic2VydmVyQ291bnRQZXJFbnRyeVR5cGUuZ2V0KHR5cGUpID8/IDApICsgMSxcbiAgICAgICk7XG4gICAgfVxuICAgIGFwcGx5RHVyYXRpb25UaHJlc2hvbGRzKCk7XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICghTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcikge1xuICAgICAgd2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9ic2VydmVyQ29uZmlnID0gcmVnaXN0ZXJlZE9ic2VydmVycy5nZXQodGhpcyk7XG4gICAgaWYgKCFvYnNlcnZlckNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERpc2Nvbm5lY3QgdGhpcyBvYnNlcnZlclxuICAgIGZvciAoY29uc3QgdHlwZSBvZiBvYnNlcnZlckNvbmZpZy5lbnRyeVR5cGVzLmtleXMoKSkge1xuICAgICAgY29uc3QgbnVtYmVyT2ZPYnNlcnZlcnNGb3JUaGlzVHlwZSA9XG4gICAgICAgIG9ic2VydmVyQ291bnRQZXJFbnRyeVR5cGUuZ2V0KHR5cGUpID8/IDA7XG4gICAgICBpZiAobnVtYmVyT2ZPYnNlcnZlcnNGb3JUaGlzVHlwZSA9PT0gMSkge1xuICAgICAgICBvYnNlcnZlckNvdW50UGVyRW50cnlUeXBlLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlci5zdG9wUmVwb3J0aW5nKFxuICAgICAgICAgIHBlcmZvcm1hbmNlRW50cnlUeXBlVG9SYXcodHlwZSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG51bWJlck9mT2JzZXJ2ZXJzRm9yVGhpc1R5cGUgIT09IDApIHtcbiAgICAgICAgb2JzZXJ2ZXJDb3VudFBlckVudHJ5VHlwZS5zZXQodHlwZSwgbnVtYmVyT2ZPYnNlcnZlcnNGb3JUaGlzVHlwZSAtIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc2Nvbm5lY3QgYWxsIG9ic2VydmVycyBpZiB0aGlzIHdhcyB0aGUgbGFzdCBvbmVcbiAgICByZWdpc3RlcmVkT2JzZXJ2ZXJzLmRlbGV0ZSh0aGlzKTtcbiAgICBpZiAocmVnaXN0ZXJlZE9ic2VydmVycy5zaXplID09PSAwKSB7XG4gICAgICBOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyLnNldE9uUGVyZm9ybWFuY2VFbnRyeUNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICBpc09uUGVyZm9ybWFuY2VFbnRyeUNhbGxiYWNrU2V0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXBwbHlEdXJhdGlvblRocmVzaG9sZHMoKTtcbiAgfVxuXG4gIF92YWxpZGF0ZU9ic2VydmVPcHRpb25zKG9wdGlvbnM6IFBlcmZvcm1hbmNlT2JzZXJ2ZXJJbml0KTogdm9pZCB7XG4gICAgY29uc3Qge3R5cGUsIGVudHJ5VHlwZXMsIGR1cmF0aW9uVGhyZXNob2xkfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIXR5cGUgJiYgIWVudHJ5VHlwZXMpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdQZXJmb3JtYW5jZU9ic2VydmVyJzogQW4gb2JzZXJ2ZSgpIGNhbGwgbXVzdCBub3QgaW5jbHVkZSBib3RoIGVudHJ5VHlwZXMgYW5kIHR5cGUgYXJndW1lbnRzLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnlUeXBlcyAmJiB0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdvYnNlcnZlJyBvbiAnUGVyZm9ybWFuY2VPYnNlcnZlcic6IEFuIG9ic2VydmUoKSBjYWxsIG11c3QgaW5jbHVkZSBlaXRoZXIgZW50cnlUeXBlcyBvciB0eXBlIGFyZ3VtZW50cy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09ICdtdWx0aXBsZScgJiYgdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdvYnNlcnZlJyBvbiAnUGVyZm9ybWFuY2VPYnNlcnZlcic6IFRoaXMgb2JzZXJ2ZXIgaGFzIHBlcmZvcm1lZCBvYnNlcnZlKHtlbnRyeVR5cGVzOi4uLn0sIHRoZXJlZm9yZSBpdCBjYW5ub3QgcGVyZm9ybSBvYnNlcnZlKHt0eXBlOi4uLn0pXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90eXBlID09PSAnc2luZ2xlJyAmJiBlbnRyeVR5cGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdQZXJmb3JtYW5jZU9ic2VydmVyJzogVGhpcyBQZXJmb3JtYW5jZU9ic2VydmVyIGhhcyBwZXJmb3JtZWQgb2JzZXJ2ZSh7dHlwZTouLi59LCB0aGVyZWZvcmUgaXQgY2Fubm90IHBlcmZvcm0gb2JzZXJ2ZSh7ZW50cnlUeXBlczouLi59KVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnlUeXBlcyAmJiBkdXJhdGlvblRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdvYnNlcnZlJyBvbiAnUGVyZm9ybWFuY2VPYnNlcnZlcic6IEFuIG9ic2VydmUoKSBjYWxsIG11c3Qgbm90IGluY2x1ZGUgYm90aCBlbnRyeVR5cGVzIGFuZCBkdXJhdGlvblRocmVzaG9sZCBhcmd1bWVudHMuXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBzdXBwb3J0ZWRFbnRyeVR5cGVzOiAkUmVhZE9ubHlBcnJheTxQZXJmb3JtYW5jZUVudHJ5VHlwZT4gPVxuICAgIGdldFN1cHBvcnRlZFBlcmZvcm1hbmNlRW50cnlUeXBlcygpO1xufVxuXG4vLyBBcyBhIFNldCB1bmlvbiwgZXhjZXB0IGlmIHZhbHVlIGV4aXN0cyBpbiBib3RoLCB3ZSB0YWtlIG1pbmltdW1cbmZ1bmN0aW9uIHVuaW9uPFQ+KFxuICBhOiAkUmVhZE9ubHlNYXA8VCwgP251bWJlcj4sXG4gIGI6ICRSZWFkT25seU1hcDxULCA/bnVtYmVyPixcbik6IE1hcDxULCA/bnVtYmVyPiB7XG4gIGNvbnN0IHJlcyA9IG5ldyBNYXA8VCwgP251bWJlcj4oKTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgYSkge1xuICAgIGlmICghYi5oYXMoaykpIHtcbiAgICAgIHJlcy5zZXQoaywgdik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy5zZXQoaywgTWF0aC5taW4odiA/PyAwLCBiLmdldChrKSA/PyAwKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGRpZmZlcmVuY2U8VD4oYTogJFJlYWRPbmx5U2V0PFQ+LCBiOiAkUmVhZE9ubHlTZXQ8VD4pOiBTZXQ8VD4ge1xuICByZXR1cm4gbmV3IFNldChbLi4uYV0uZmlsdGVyKHggPT4gIWIuaGFzKHgpKSk7XG59XG5cbmV4cG9ydCB7UGVyZm9ybWFuY2VFdmVudFRpbWluZ307XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuaW1wb3J0IHR5cGUge0hpZ2hSZXNUaW1lU3RhbXAsIFBlcmZvcm1hbmNlRW50cnlKU09OfSBmcm9tICcuL1BlcmZvcm1hbmNlRW50cnknO1xuXG5pbXBvcnQge1BlcmZvcm1hbmNlRW50cnl9IGZyb20gJy4vUGVyZm9ybWFuY2VFbnRyeSc7XG5cbmV4cG9ydCB0eXBlIFBlcmZvcm1hbmNlRXZlbnRUaW1pbmdKU09OID0ge1xuICAuLi5QZXJmb3JtYW5jZUVudHJ5SlNPTixcbiAgcHJvY2Vzc2luZ1N0YXJ0OiBIaWdoUmVzVGltZVN0YW1wLFxuICBwcm9jZXNzaW5nRW5kOiBIaWdoUmVzVGltZVN0YW1wLFxuICBpbnRlcmFjdGlvbklkOiBudW1iZXIsXG4gIC4uLlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVyZm9ybWFuY2VFdmVudFRpbWluZyBleHRlbmRzIFBlcmZvcm1hbmNlRW50cnkge1xuICBwcm9jZXNzaW5nU3RhcnQ6IEhpZ2hSZXNUaW1lU3RhbXA7XG4gIHByb2Nlc3NpbmdFbmQ6IEhpZ2hSZXNUaW1lU3RhbXA7XG4gIGludGVyYWN0aW9uSWQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihpbml0OiB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0VGltZT86IEhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgZHVyYXRpb24/OiBIaWdoUmVzVGltZVN0YW1wLFxuICAgIHByb2Nlc3NpbmdTdGFydD86IEhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgcHJvY2Vzc2luZ0VuZD86IEhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgaW50ZXJhY3Rpb25JZD86IG51bWJlcixcbiAgfSkge1xuICAgIHN1cGVyKHtcbiAgICAgIG5hbWU6IGluaXQubmFtZSxcbiAgICAgIGVudHJ5VHlwZTogJ2V2ZW50JyxcbiAgICAgIHN0YXJ0VGltZTogaW5pdC5zdGFydFRpbWUgPz8gMCxcbiAgICAgIGR1cmF0aW9uOiBpbml0LmR1cmF0aW9uID8/IDAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9jZXNzaW5nU3RhcnQgPSBpbml0LnByb2Nlc3NpbmdTdGFydCA/PyAwO1xuICAgIHRoaXMucHJvY2Vzc2luZ0VuZCA9IGluaXQucHJvY2Vzc2luZ0VuZCA/PyAwO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25JZCA9IGluaXQuaW50ZXJhY3Rpb25JZCA/PyAwO1xuICB9XG5cbiAgdG9KU09OKCk6IFBlcmZvcm1hbmNlRXZlbnRUaW1pbmdKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIudG9KU09OKCksXG4gICAgICBwcm9jZXNzaW5nU3RhcnQ6IHRoaXMucHJvY2Vzc2luZ1N0YXJ0LFxuICAgICAgcHJvY2Vzc2luZ0VuZDogdGhpcy5wcm9jZXNzaW5nRW5kLFxuICAgICAgaW50ZXJhY3Rpb25JZDogdGhpcy5pbnRlcmFjdGlvbklkLFxuICAgIH07XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5leHBvcnQgdHlwZSBIaWdoUmVzVGltZVN0YW1wID0gbnVtYmVyO1xuZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VFbnRyeVR5cGUgPSAnbWFyaycgfCAnbWVhc3VyZScgfCAnZXZlbnQnO1xuXG5leHBvcnQgdHlwZSBQZXJmb3JtYW5jZUVudHJ5SlNPTiA9IHtcbiAgbmFtZTogc3RyaW5nLFxuICBlbnRyeVR5cGU6IFBlcmZvcm1hbmNlRW50cnlUeXBlLFxuICBzdGFydFRpbWU6IEhpZ2hSZXNUaW1lU3RhbXAsXG4gIGR1cmF0aW9uOiBIaWdoUmVzVGltZVN0YW1wLFxuICAuLi5cbn07XG5cbmV4cG9ydCBjb25zdCBBTFdBWVNfTE9HR0VEX0VOVFJZX1RZUEVTOiAkUmVhZE9ubHlBcnJheTxQZXJmb3JtYW5jZUVudHJ5VHlwZT4gPSBbXG4gICdtYXJrJyxcbiAgJ21lYXN1cmUnLFxuXTtcblxuZXhwb3J0IGNsYXNzIFBlcmZvcm1hbmNlRW50cnkge1xuICBuYW1lOiBzdHJpbmc7XG4gIGVudHJ5VHlwZTogUGVyZm9ybWFuY2VFbnRyeVR5cGU7XG4gIHN0YXJ0VGltZTogSGlnaFJlc1RpbWVTdGFtcDtcbiAgZHVyYXRpb246IEhpZ2hSZXNUaW1lU3RhbXA7XG5cbiAgY29uc3RydWN0b3IoaW5pdDoge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbnRyeVR5cGU6IFBlcmZvcm1hbmNlRW50cnlUeXBlLFxuICAgIHN0YXJ0VGltZTogSGlnaFJlc1RpbWVTdGFtcCxcbiAgICBkdXJhdGlvbjogSGlnaFJlc1RpbWVTdGFtcCxcbiAgfSkge1xuICAgIHRoaXMubmFtZSA9IGluaXQubmFtZTtcbiAgICB0aGlzLmVudHJ5VHlwZSA9IGluaXQuZW50cnlUeXBlO1xuICAgIHRoaXMuc3RhcnRUaW1lID0gaW5pdC5zdGFydFRpbWU7XG4gICAgdGhpcy5kdXJhdGlvbiA9IGluaXQuZHVyYXRpb247XG4gIH1cblxuICB0b0pTT04oKTogUGVyZm9ybWFuY2VFbnRyeUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBlbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlLFxuICAgICAgc3RhcnRUaW1lOiB0aGlzLnN0YXJ0VGltZSxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgIH07XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJhd1BlcmZvcm1hbmNlRW50cnksXG4gIFJhd1BlcmZvcm1hbmNlRW50cnlUeXBlLFxufSBmcm9tICcuL05hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXInO1xuaW1wb3J0IHR5cGUge1BlcmZvcm1hbmNlRW50cnlUeXBlfSBmcm9tICcuL1BlcmZvcm1hbmNlRW50cnknO1xuXG5pbXBvcnQge1BlcmZvcm1hbmNlRW50cnl9IGZyb20gJy4vUGVyZm9ybWFuY2VFbnRyeSc7XG5pbXBvcnQgUGVyZm9ybWFuY2VFdmVudFRpbWluZyBmcm9tICcuL1BlcmZvcm1hbmNlRXZlbnRUaW1pbmcnO1xuXG5leHBvcnQgY29uc3QgUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGVWYWx1ZXMgPSB7XG4gIFVOREVGSU5FRDogMCxcbiAgTUFSSzogMSxcbiAgTUVBU1VSRTogMixcbiAgRVZFTlQ6IDMsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmF3VG9QZXJmb3JtYW5jZUVudHJ5KFxuICBlbnRyeTogUmF3UGVyZm9ybWFuY2VFbnRyeSxcbik6IFBlcmZvcm1hbmNlRW50cnkge1xuICBpZiAoZW50cnkuZW50cnlUeXBlID09PSBSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZVZhbHVlcy5FVkVOVCkge1xuICAgIHJldHVybiBuZXcgUGVyZm9ybWFuY2VFdmVudFRpbWluZyh7XG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgc3RhcnRUaW1lOiBlbnRyeS5zdGFydFRpbWUsXG4gICAgICBkdXJhdGlvbjogZW50cnkuZHVyYXRpb24sXG4gICAgICBwcm9jZXNzaW5nU3RhcnQ6IGVudHJ5LnByb2Nlc3NpbmdTdGFydCxcbiAgICAgIHByb2Nlc3NpbmdFbmQ6IGVudHJ5LnByb2Nlc3NpbmdFbmQsXG4gICAgICBpbnRlcmFjdGlvbklkOiBlbnRyeS5pbnRlcmFjdGlvbklkLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgUGVyZm9ybWFuY2VFbnRyeSh7XG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgZW50cnlUeXBlOiByYXdUb1BlcmZvcm1hbmNlRW50cnlUeXBlKGVudHJ5LmVudHJ5VHlwZSksXG4gICAgICBzdGFydFRpbWU6IGVudHJ5LnN0YXJ0VGltZSxcbiAgICAgIGR1cmF0aW9uOiBlbnRyeS5kdXJhdGlvbixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmF3VG9QZXJmb3JtYW5jZUVudHJ5VHlwZShcbiAgdHlwZTogUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGUsXG4pOiBQZXJmb3JtYW5jZUVudHJ5VHlwZSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGVWYWx1ZXMuTUFSSzpcbiAgICAgIHJldHVybiAnbWFyayc7XG4gICAgY2FzZSBSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZVZhbHVlcy5NRUFTVVJFOlxuICAgICAgcmV0dXJuICdtZWFzdXJlJztcbiAgICBjYXNlIFJhd1BlcmZvcm1hbmNlRW50cnlUeXBlVmFsdWVzLkVWRU5UOlxuICAgICAgcmV0dXJuICdldmVudCc7XG4gICAgY2FzZSBSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZVZhbHVlcy5VTkRFRklORUQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcInJhd1RvUGVyZm9ybWFuY2VFbnRyeVR5cGU6IFVOREVGSU5FRCBjYW4ndCBiZSBjYXN0IHRvIFBlcmZvcm1hbmNlRW50cnlUeXBlXCIsXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgcmF3VG9QZXJmb3JtYW5jZUVudHJ5VHlwZTogdW5leHBlY3RlZCBwZXJmb3JtYW5jZSBlbnRyeSB0eXBlIHJlY2VpdmVkOiAke3R5cGV9YCxcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1hbmNlRW50cnlUeXBlVG9SYXcoXG4gIHR5cGU6IFBlcmZvcm1hbmNlRW50cnlUeXBlLFxuKTogUmF3UGVyZm9ybWFuY2VFbnRyeVR5cGUge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdtYXJrJzpcbiAgICAgIHJldHVybiBSYXdQZXJmb3JtYW5jZUVudHJ5VHlwZVZhbHVlcy5NQVJLO1xuICAgIGNhc2UgJ21lYXN1cmUnOlxuICAgICAgcmV0dXJuIFJhd1BlcmZvcm1hbmNlRW50cnlUeXBlVmFsdWVzLk1FQVNVUkU7XG4gICAgY2FzZSAnZXZlbnQnOlxuICAgICAgcmV0dXJuIFJhd1BlcmZvcm1hbmNlRW50cnlUeXBlVmFsdWVzLkVWRU5UO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWZXJpZnkgZXhoYXVzdGl2ZSBjaGVjayB3aXRoIEZsb3dcbiAgICAgICh0eXBlOiBlbXB0eSk7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgcGVyZm9ybWFuY2VFbnRyeVR5cGVUb1JhdzogdW5leHBlY3RlZCBwZXJmb3JtYW5jZSBlbnRyeSB0eXBlIHJlY2VpdmVkOiAke3R5cGV9YCxcbiAgICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxudHlwZSBNZW1vcnlJbmZvTGlrZSA9IHtcbiAganNIZWFwU2l6ZUxpbWl0OiA/bnVtYmVyLFxuICB0b3RhbEpTSGVhcFNpemU6ID9udW1iZXIsXG4gIHVzZWRKU0hlYXBTaXplOiA/bnVtYmVyLFxufTtcblxuLy8gUmVhZC1vbmx5IG9iamVjdCB3aXRoIEpTIG1lbW9yeSBpbmZvcm1hdGlvbi4gVGhpcyBpcyByZXR1cm5lZCBieSB0aGUgcGVyZm9ybWFuY2UubWVtb3J5IEFQSS5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lbW9yeUluZm8ge1xuICBfanNIZWFwU2l6ZUxpbWl0OiA/bnVtYmVyO1xuICBfdG90YWxKU0hlYXBTaXplOiA/bnVtYmVyO1xuICBfdXNlZEpTSGVhcFNpemU6ID9udW1iZXI7XG5cbiAgY29uc3RydWN0b3IobWVtb3J5SW5mbzogP01lbW9yeUluZm9MaWtlKSB7XG4gICAgaWYgKG1lbW9yeUluZm8gIT0gbnVsbCkge1xuICAgICAgdGhpcy5fanNIZWFwU2l6ZUxpbWl0ID0gbWVtb3J5SW5mby5qc0hlYXBTaXplTGltaXQ7XG4gICAgICB0aGlzLl90b3RhbEpTSGVhcFNpemUgPSBtZW1vcnlJbmZvLnRvdGFsSlNIZWFwU2l6ZTtcbiAgICAgIHRoaXMuX3VzZWRKU0hlYXBTaXplID0gbWVtb3J5SW5mby51c2VkSlNIZWFwU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgaGVhcCwgaW4gYnl0ZXMsIHRoYXQgaXMgYXZhaWxhYmxlIHRvIHRoZSBjb250ZXh0XG4gICAqL1xuICBnZXQganNIZWFwU2l6ZUxpbWl0KCk6ID9udW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9qc0hlYXBTaXplTGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvdGFsIGFsbG9jYXRlZCBoZWFwIHNpemUsIGluIGJ5dGVzXG4gICAqL1xuICBnZXQgdG90YWxKU0hlYXBTaXplKCk6ID9udW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbEpTSGVhcFNpemU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudCBvZiBKUyBoZWFwLCBpbiBieXRlcy5cbiAgICovXG4gIGdldCB1c2VkSlNIZWFwU2l6ZSgpOiA/bnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlZEpTSGVhcFNpemU7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxudHlwZSBSZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmdMaWtlID0ge1xuICBzdGFydFRpbWU6ID9udW1iZXIsXG4gIGVuZFRpbWU6ID9udW1iZXIsXG4gIGluaXRpYWxpemVSdW50aW1lU3RhcnQ6ID9udW1iZXIsXG4gIGluaXRpYWxpemVSdW50aW1lRW5kOiA/bnVtYmVyLFxuICBleGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydDogP251bWJlcixcbiAgZXhlY3V0ZUphdmFTY3JpcHRCdW5kbGVFbnRyeVBvaW50RW5kOiA/bnVtYmVyLFxufTtcblxuLy8gUmVhZC1vbmx5IG9iamVjdCB3aXRoIFJOIHN0YXJ0dXAgdGltaW5nIGluZm9ybWF0aW9uLlxuLy8gVGhpcyBpcyByZXR1cm5lZCBieSB0aGUgcGVyZm9ybWFuY2UucmVhY3ROYXRpdmVTdGFydHVwIEFQSS5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0TmF0aXZlU3RhcnR1cFRpbWluZyB7XG4gIC8vIEFsbCB0aW1lIGluZm9ybWF0aW9uIGhlcmUgYXJlIGluIG1zLiBUaGUgdmFsdWVzIG1heSBiZSBudWxsIGlmIG5vdCBwcm92aWRlZC5cbiAgLy8gV2UgZG8gTk9UIG1hdGNoIHdlYiBzcGVjdCBoZXJlIGZvciB0d28gcmVhc29uczpcbiAgLy8gMS4gVGhlIGBSZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmdgIGlzIG5vbi1zdGFuZGFyZCBBUElcbiAgLy8gMi4gVGhlIHRpbWluZyBpbmZvcm1hdGlvbiBpcyByZWxhdGl2ZSB0byB0aGUgdGltZSBvcmlnaW4sIHdoaWNoIG1lYW5zIGAwYCBoYXMgdmFsaWQgbWVhbmluZ1xuICBfc3RhcnRUaW1lOiA/bnVtYmVyO1xuICBfZW5kVGltZTogP251bWJlcjtcbiAgX2luaXRpYWxpemVSdW50aW1lU3RhcnQ6ID9udW1iZXI7XG4gIF9pbml0aWFsaXplUnVudGltZUVuZDogP251bWJlcjtcbiAgX2V4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludFN0YXJ0OiA/bnVtYmVyO1xuICBfZXhlY3V0ZUphdmFTY3JpcHRCdW5kbGVFbnRyeVBvaW50RW5kOiA/bnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0VXBUaW1pbmc6ID9SZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmdMaWtlKSB7XG4gICAgaWYgKHN0YXJ0VXBUaW1pbmcgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fc3RhcnRUaW1lID0gc3RhcnRVcFRpbWluZy5zdGFydFRpbWU7XG4gICAgICB0aGlzLl9lbmRUaW1lID0gc3RhcnRVcFRpbWluZy5lbmRUaW1lO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZVJ1bnRpbWVTdGFydCA9IHN0YXJ0VXBUaW1pbmcuaW5pdGlhbGl6ZVJ1bnRpbWVTdGFydDtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVSdW50aW1lRW5kID0gc3RhcnRVcFRpbWluZy5pbml0aWFsaXplUnVudGltZUVuZDtcbiAgICAgIHRoaXMuX2V4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludFN0YXJ0ID1cbiAgICAgICAgc3RhcnRVcFRpbWluZy5leGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydDtcbiAgICAgIHRoaXMuX2V4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludEVuZCA9XG4gICAgICAgIHN0YXJ0VXBUaW1pbmcuZXhlY3V0ZUphdmFTY3JpcHRCdW5kbGVFbnRyeVBvaW50RW5kO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aW1lIG9mIHRoZSBSTiBhcHAgc3RhcnR1cCBwcm9jZXNzLiBUaGlzIGlzIHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSBieSBpbXBsZW1lbnRpbmcgdGhlIGBSZWFjdE1hcmtlci5zZXRBcHBTdGFydFRpbWVgIEFQSSBpbiB0aGUgbmF0aXZlIHBsYXRmb3JtIGNvZGUuXG4gICAqL1xuICBnZXQgc3RhcnRUaW1lKCk6ID9udW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGFydFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogRW5kIHRpbWUgb2YgdGhlIFJOIGFwcCBzdGFydHVwIHByb2Nlc3MuIFRoaXMgaXMgZXF1YWwgdG8gYGV4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludEVuZGAuXG4gICAqL1xuICBnZXQgZW5kVGltZSgpOiA/bnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aW1lIHdoZW4gUk4gcnVudGltZSBnZXQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgd2hlbiBSTiBpbmZyYSBmaXJzdCBraWNrcyBpbiBhcHAgc3RhcnR1cCBwcm9jZXNzLlxuICAgKi9cbiAgZ2V0IGluaXRpYWxpemVSdW50aW1lU3RhcnQoKTogP251bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemVSdW50aW1lU3RhcnQ7XG4gIH1cblxuICAvKipcbiAgICogRW5kIHRpbWUgd2hlbiBSTiBydW50aW1lIGdldCBpbml0aWFsaXplZC4gVGhpcyBpcyB0aGUgbGFzdCBtYXJrZXIgYmVmb3JlIGVuZHMgb2YgdGhlIGFwcCBzdGFydHVwIHByb2Nlc3MuXG4gICAqL1xuICBnZXQgaW5pdGlhbGl6ZVJ1bnRpbWVFbmQoKTogP251bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemVSdW50aW1lRW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRpbWUgb2YgSlMgYnVuZGxlIGJlaW5nIGV4ZWN1dGVkLiBUaGlzIGluZGljYXRlcyB0aGUgUk4gSlMgYnVuZGxlIGlzIGxvYWRlZCBhbmQgc3RhcnQgdG8gYmUgZXZhbHVhdGVkLlxuICAgKi9cbiAgZ2V0IGV4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludFN0YXJ0KCk6ID9udW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmQgdGltZSBvZiBKUyBidW5kbGUgYmVpbmcgZXhlY3V0ZWQuIFRoaXMgaW5kaWNhdGVzIGFsbCB0aGUgc3luY2hyb25vdXMgZW50cnkgcG9pbnQgam9icyBhcmUgZmluaXNoZWQuXG4gICAqL1xuICBnZXQgZXhlY3V0ZUphdmFTY3JpcHRCdW5kbGVFbnRyeVBvaW50RW5kKCk6ID9udW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRFbmQ7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgY29uc29sZSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nIChyZWRib3gpIGZvciBSZWFjdCBOYXRpdmUuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1vZHVsZSBkaXJlY3RseSwgb3IganVzdCByZXF1aXJlIEluaXRpYWxpemVDb3JlLlxuICovXG5jb25zdCBFeGNlcHRpb25zTWFuYWdlciA9IHJlcXVpcmUoJy4vRXhjZXB0aW9uc01hbmFnZXInKTtcbkV4Y2VwdGlvbnNNYW5hZ2VyLmluc3RhbGxDb25zb2xlRXJyb3JSZXBvcnRlcigpO1xuXG4vLyBTZXQgdXAgZXJyb3IgaGFuZGxlclxuaWYgKCFnbG9iYWwuX19mYkRpc2FibGVFeGNlcHRpb25zTWFuYWdlcikge1xuICBjb25zdCBoYW5kbGVFcnJvciA9IChlOiBtaXhlZCwgaXNGYXRhbDogYm9vbGVhbikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBFeGNlcHRpb25zTWFuYWdlci5oYW5kbGVFeGNlcHRpb24oZSwgaXNGYXRhbCk7XG4gICAgfSBjYXRjaCAoZWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gcHJpbnQgZXJyb3I6ICcsIGVlLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgRXJyb3JVdGlscyA9IHJlcXVpcmUoJy4uL3ZlbmRvci9jb3JlL0Vycm9yVXRpbHMnKTtcbiAgRXJyb3JVdGlscy5zZXRHbG9iYWxIYW5kbGVyKGhhbmRsZUVycm9yKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtFeHRlbmRlZEVycm9yfSBmcm9tICcuL0V4dGVuZGVkRXJyb3InO1xuaW1wb3J0IHR5cGUge0V4Y2VwdGlvbkRhdGF9IGZyb20gJy4vTmF0aXZlRXhjZXB0aW9uc01hbmFnZXInO1xuXG5jbGFzcyBTeW50aGV0aWNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZTogc3RyaW5nID0gJyc7XG59XG5cbnR5cGUgRXhjZXB0aW9uRGVjb3JhdG9yID0gRXhjZXB0aW9uRGF0YSA9PiBFeGNlcHRpb25EYXRhO1xuXG5sZXQgdXNlckV4Y2VwdGlvbkRlY29yYXRvcjogP0V4Y2VwdGlvbkRlY29yYXRvcjtcbmxldCBpblVzZXJFeGNlcHRpb25EZWNvcmF0b3IgPSBmYWxzZTtcblxuLy8gVGhpcyBTeW1ib2wgaXMgdXNlZCB0byBkZWNvcmF0ZSBhbiBFeHRlbmRlZEVycm9yIHdpdGggZXh0cmEgZGF0YSBpbiBzZWxlY3QgdXNlY2FzZXMuXG4vLyBOb3RlIHRoYXQgZGF0YSBwYXNzZWQgdXNpbmcgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIHN0cmljdGx5IGNvbnRhaW5lZCxcbi8vIGFzIGRhdGEgdGhhdCdzIG5vdCBzZXJpYWxpemFibGUvdG9vIGxhcmdlIG1heSBjYXVzZSBpc3N1ZXMgd2l0aCBwYXNzaW5nIHRoZSBlcnJvciB0byB0aGUgbmF0aXZlIGNvZGUuXG5jb25zdCBkZWNvcmF0ZWRFeHRyYURhdGFLZXk6IHN5bWJvbCA9IFN5bWJvbCgnZGVjb3JhdGVkRXh0cmFEYXRhS2V5Jyk7XG5cbi8qKlxuICogQWxsb3dzIHRoZSBhcHAgdG8gYWRkIGluZm9ybWF0aW9uIHRvIHRoZSBleGNlcHRpb24gcmVwb3J0IGJlZm9yZSBpdCBpcyBzZW50XG4gKiB0byBuYXRpdmUuIFRoaXMgQVBJIGlzIG5vdCBmaW5hbC5cbiAqL1xuXG5mdW5jdGlvbiB1bnN0YWJsZV9zZXRFeGNlcHRpb25EZWNvcmF0b3IoXG4gIGV4Y2VwdGlvbkRlY29yYXRvcjogP0V4Y2VwdGlvbkRlY29yYXRvcixcbikge1xuICB1c2VyRXhjZXB0aW9uRGVjb3JhdG9yID0gZXhjZXB0aW9uRGVjb3JhdG9yO1xufVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzRXhjZXB0aW9uKGRhdGE6IEV4Y2VwdGlvbkRhdGEpOiBFeGNlcHRpb25EYXRhIHtcbiAgaWYgKHVzZXJFeGNlcHRpb25EZWNvcmF0b3IgJiYgIWluVXNlckV4Y2VwdGlvbkRlY29yYXRvcikge1xuICAgIGluVXNlckV4Y2VwdGlvbkRlY29yYXRvciA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1c2VyRXhjZXB0aW9uRGVjb3JhdG9yKGRhdGEpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGluVXNlckV4Y2VwdGlvbkRlY29yYXRvciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRoZSBkZXZlbG9wZXItdmlzaWJsZSBhc3BlY3Qgb2YgZXJyb3JzIGFuZCBleGNlcHRpb25zXG4gKi9cbmxldCBleGNlcHRpb25JRCA9IDA7XG5mdW5jdGlvbiByZXBvcnRFeGNlcHRpb24oXG4gIGU6IEV4dGVuZGVkRXJyb3IsXG4gIGlzRmF0YWw6IGJvb2xlYW4sXG4gIHJlcG9ydFRvQ29uc29sZTogYm9vbGVhbiwgLy8gb25seSB0cnVlIHdoZW4gY29taW5nIGZyb20gaGFuZGxlRXhjZXB0aW9uOyB0aGUgZXJyb3IgaGFzIG5vdCB5ZXQgYmVlbiBsb2dnZWRcbikge1xuICBjb25zdCBwYXJzZUVycm9yU3RhY2sgPSByZXF1aXJlKCcuL0RldnRvb2xzL3BhcnNlRXJyb3JTdGFjaycpO1xuICBjb25zdCBzdGFjayA9IHBhcnNlRXJyb3JTdGFjayhlPy5zdGFjayk7XG4gIGNvbnN0IGN1cnJlbnRFeGNlcHRpb25JRCA9ICsrZXhjZXB0aW9uSUQ7XG4gIGNvbnN0IG9yaWdpbmFsTWVzc2FnZSA9IGUubWVzc2FnZSB8fCAnJztcbiAgbGV0IG1lc3NhZ2UgPSBvcmlnaW5hbE1lc3NhZ2U7XG4gIGlmIChlLmNvbXBvbmVudFN0YWNrICE9IG51bGwpIHtcbiAgICBtZXNzYWdlICs9IGBcXG5cXG5UaGlzIGVycm9yIGlzIGxvY2F0ZWQgYXQ6JHtlLmNvbXBvbmVudFN0YWNrfWA7XG4gIH1cbiAgY29uc3QgbmFtZVByZWZpeCA9IGUubmFtZSA9PSBudWxsIHx8IGUubmFtZSA9PT0gJycgPyAnJyA6IGAke2UubmFtZX06IGA7XG5cbiAgaWYgKCFtZXNzYWdlLnN0YXJ0c1dpdGgobmFtZVByZWZpeCkpIHtcbiAgICBtZXNzYWdlID0gbmFtZVByZWZpeCArIG1lc3NhZ2U7XG4gIH1cblxuICBtZXNzYWdlID1cbiAgICBlLmpzRW5naW5lID09IG51bGwgPyBtZXNzYWdlIDogYCR7bWVzc2FnZX0sIGpzIGVuZ2luZTogJHtlLmpzRW5naW5lfWA7XG5cbiAgLy8gJEZsb3dGaXhNZVt1bmNsZWFyLXR5cGVdXG4gIGNvbnN0IGV4dHJhRGF0YTogT2JqZWN0ID0ge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gd2UgY2FuJ3QgZGVmaW5lIGEgdHlwZSB3aXRoIGEgU3ltYm9sLWtleWVkIGZpZWxkIGluIGZsb3dcbiAgICAuLi5lW2RlY29yYXRlZEV4dHJhRGF0YUtleV0sXG4gICAganNFbmdpbmU6IGUuanNFbmdpbmUsXG4gICAgcmF3U3RhY2s6IGUuc3RhY2ssXG4gIH07XG4gIGlmIChlLmNhdXNlICE9IG51bGwgJiYgdHlwZW9mIGUuY2F1c2UgPT09ICdvYmplY3QnKSB7XG4gICAgZXh0cmFEYXRhLnN0YWNrU3ltYm9scyA9IGUuY2F1c2Uuc3RhY2tTeW1ib2xzO1xuICAgIGV4dHJhRGF0YS5zdGFja1JldHVybkFkZHJlc3NlcyA9IGUuY2F1c2Uuc3RhY2tSZXR1cm5BZGRyZXNzZXM7XG4gICAgZXh0cmFEYXRhLnN0YWNrRWxlbWVudHMgPSBlLmNhdXNlLnN0YWNrRWxlbWVudHM7XG4gIH1cblxuICBjb25zdCBkYXRhID0gcHJlcHJvY2Vzc0V4Y2VwdGlvbih7XG4gICAgbWVzc2FnZSxcbiAgICBvcmlnaW5hbE1lc3NhZ2U6IG1lc3NhZ2UgPT09IG9yaWdpbmFsTWVzc2FnZSA/IG51bGwgOiBvcmlnaW5hbE1lc3NhZ2UsXG4gICAgbmFtZTogZS5uYW1lID09IG51bGwgfHwgZS5uYW1lID09PSAnJyA/IG51bGwgOiBlLm5hbWUsXG4gICAgY29tcG9uZW50U3RhY2s6XG4gICAgICB0eXBlb2YgZS5jb21wb25lbnRTdGFjayA9PT0gJ3N0cmluZycgPyBlLmNvbXBvbmVudFN0YWNrIDogbnVsbCxcbiAgICBzdGFjayxcbiAgICBpZDogY3VycmVudEV4Y2VwdGlvbklELFxuICAgIGlzRmF0YWwsXG4gICAgZXh0cmFEYXRhLFxuICB9KTtcblxuICBpZiAocmVwb3J0VG9Db25zb2xlKSB7XG4gICAgLy8gd2UgZmVlZCBiYWNrIGludG8gY29uc29sZS5lcnJvciwgdG8gbWFrZSBzdXJlIGFueSBtZXRob2RzIHRoYXQgYXJlXG4gICAgLy8gbW9ua2V5IHBhdGNoZWQgb24gdG9wIG9mIGNvbnNvbGUuZXJyb3IgYXJlIGNhbGxlZCB3aGVuIGNvbWluZyBmcm9tXG4gICAgLy8gaGFuZGxlRXhjZXB0aW9uXG4gICAgY29uc29sZS5lcnJvcihkYXRhLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zdCBMb2dCb3ggPSByZXF1aXJlKCcuLi9Mb2dCb3gvTG9nQm94JykuZGVmYXVsdDtcbiAgICBMb2dCb3guYWRkRXhjZXB0aW9uKHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBpc0NvbXBvbmVudEVycm9yOiAhIWUuaXNDb21wb25lbnRFcnJvcixcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc0ZhdGFsIHx8IGUudHlwZSAhPT0gJ3dhcm4nKSB7XG4gICAgY29uc3QgTmF0aXZlRXhjZXB0aW9uc01hbmFnZXIgPVxuICAgICAgcmVxdWlyZSgnLi9OYXRpdmVFeGNlcHRpb25zTWFuYWdlcicpLmRlZmF1bHQ7XG4gICAgaWYgKE5hdGl2ZUV4Y2VwdGlvbnNNYW5hZ2VyKSB7XG4gICAgICBOYXRpdmVFeGNlcHRpb25zTWFuYWdlci5yZXBvcnRFeGNlcHRpb24oZGF0YSk7XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgdmFyIGNvbnNvbGU6IHtcbiAgZXJyb3I6IHR5cGVvZiBjb25zb2xlLmVycm9yLFxuICBfZXJyb3JPcmlnaW5hbDogdHlwZW9mIGNvbnNvbGUuZXJyb3IsXG4gIHJlcG9ydEVycm9yc0FzRXhjZXB0aW9uczogYm9vbGVhbixcbiAgLi4uXG59O1xuXG4vLyBJZiB3ZSB0cmlnZ2VyIGNvbnNvbGUuZXJyb3IgX2Zyb21fIGhhbmRsZUV4Y2VwdGlvbixcbi8vIHdlIGRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgY29uc29sZS5lcnJvciBkb2Vzbid0IHRyaWdnZXIgZXJyb3IgcmVwb3J0aW5nIGFnYWluXG5sZXQgaW5FeGNlcHRpb25IYW5kbGVyID0gZmFsc2U7XG5cbi8qKlxuICogTG9ncyBleGNlcHRpb25zIHRvIHRoZSAobmF0aXZlKSBjb25zb2xlIGFuZCBkaXNwbGF5cyB0aGVtXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUV4Y2VwdGlvbihlOiBtaXhlZCwgaXNGYXRhbDogYm9vbGVhbikge1xuICBsZXQgZXJyb3I6IEVycm9yO1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9IGVsc2Uge1xuICAgIC8vIFdvcmthcm91bmQgZm9yIHJlcG9ydGluZyBlcnJvcnMgY2F1c2VkIGJ5IGB0aHJvdyAnc29tZSBzdHJpbmcnYFxuICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gd2F5IHRvIGZpZ3VyZSBvdXQgdGhlIHN0YWNrdHJhY2UgaW4gdGhpc1xuICAgIC8vIGNhc2UsIHNvIGlmIHlvdSBlbmRlZCB1cCBoZXJlIHRyeWluZyB0byB0cmFjZSBhbiBlcnJvciwgbG9vayBmb3JcbiAgICAvLyBgdGhyb3cgJzxlcnJvciBtZXNzYWdlPidgIHNvbWV3aGVyZSBpbiB5b3VyIGNvZGViYXNlLlxuICAgIGVycm9yID0gbmV3IFN5bnRoZXRpY0Vycm9yKGUpO1xuICB9XG4gIHRyeSB7XG4gICAgaW5FeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTtcbiAgICAvKiAkRmxvd0ZpeE1lW2NsYXNzLW9iamVjdC1zdWJ0eXBpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3IgdGhpc1xuICAgICAqIHBhcmFtZXRlcnMgKi9cbiAgICByZXBvcnRFeGNlcHRpb24oZXJyb3IsIGlzRmF0YWwsIC8qcmVwb3J0VG9Db25zb2xlKi8gdHJ1ZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaW5FeGNlcHRpb25IYW5kbGVyID0gZmFsc2U7XG4gIH1cbn1cblxuLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5IEZsb3cnc1xuICogTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbmZ1bmN0aW9uIHJlYWN0Q29uc29sZUVycm9ySGFuZGxlciguLi5hcmdzKSB7XG4gIC8vIGJ1YmJsZSB1cCB0byBhbnkgb3JpZ2luYWwgaGFuZGxlcnNcbiAgY29uc29sZS5fZXJyb3JPcmlnaW5hbCguLi5hcmdzKTtcbiAgaWYgKCFjb25zb2xlLnJlcG9ydEVycm9yc0FzRXhjZXB0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5FeGNlcHRpb25IYW5kbGVyKSB7XG4gICAgLy8gVGhlIGZ1bmRhbWVudGFsIHRyaWNrIGhlcmUgaXMgdGhhdCBhcmUgbXVsdGlwbGUgZW50cnkgcG9pbnQgdG8gbG9nZ2luZyBlcnJvcnM6XG4gICAgLy8gKHNlZSBEMTk3NDMwNzUgZm9yIG1vcmUgYmFja2dyb3VuZClcbiAgICAvL1xuICAgIC8vIDEuIEFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBiZWluZyBjYXVnaHQgYnkgdGhlIGdsb2JhbCBoYW5kbGVyXG4gICAgLy8gMi4gQW4gZXJyb3IgYmVpbmcgbG9nZ2VkIHRocm93IGNvbnNvbGUuZXJyb3JcbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIGNvbnNvbGUuZXJyb3IgaXMgbW9ua2V5IHBhdGNoZWQgbXVsdGlwbGUgdGltZXM6IGJ5IHRoaXMgbW9kdWxlLCBhbmQgYnkgdGhlXG4gICAgLy8gRGV2VG9vbHMgc2V0dXAgdGhhdCBzZW5kcyBtZXNzYWdlcyB0byBNZXRyby5cbiAgICAvLyBUaGUgcGF0Y2hpbmcgb3JkZXIgY2Fubm90IGJlIHJlbGllZCB1cG9uLlxuICAgIC8vXG4gICAgLy8gU28sIHNvbWUgc2NlbmFyaW9zIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhpcyBmbGFnOlxuICAgIC8vXG4gICAgLy8gTG9nZ2luZyBhbiBlcnJvcjpcbiAgICAvLyAxLiBjb25zb2xlLmVycm9yIGNhbGxlZCBmcm9tIHVzZXIgY29kZVxuICAgIC8vIDIuIChwb3NzaWJseSkgYXJyaXZlcyBfZmlyc3RfIGF0IERldlRvb2wgaGFuZGxlciwgc2VuZCB0byBNZXRyb1xuICAgIC8vIDMuIEJ1YmJsZXMgdG8gaGVyZVxuICAgIC8vIDQuIGdvZXMgaW50byByZXBvcnQgRXhjZXB0aW9uLlxuICAgIC8vIDUuIHNob3VsZCBub3QgdHJpZ2dlciBjb25zb2xlLmVycm9yIGFnYWluLCB0byBhdm9pZCBsb29waW5nIC8gbG9nZ2luZyB0d2ljZVxuICAgIC8vIDYuIHNob3VsZCBzdGlsbCBidWJibGUgdXAgdG8gb3JpZ2luYWwgY29uc29sZVxuICAgIC8vICAgICh3aGljaCBtaWdodCBlaXRoZXIgYmUgY29uc29sZS5sb2csIG9yIHRoZSBEZXZUb29scyBoYW5kbGVyIGluIGNhc2UgaXQgcGF0Y2hlZCBfZWFybGllcl8gYW5kICgyKSBkaWRuJ3QgaGFwcGVuKVxuICAgIC8vXG4gICAgLy8gVGhyb3dpbmcgYW4gdW5jYXVnaHQgZXhjZXB0aW9uOlxuICAgIC8vIDEuIGV4Y2VwdGlvbiB0aHJvd25cbiAgICAvLyAyLiBwaWNrZWQgdXAgYnkgaGFuZGxlRXhjZXB0aW9uXG4gICAgLy8gMy4gc2hvdWxkIGJlIHNlbnQgdG8gY29uc29sZS5lcnJvciAobm90IGNvbnNvbGUuX2Vycm9yT3JpZ2luYWwsIGFzIERldlRvb2xzIG1pZ2h0IGhhdmUgcGF0Y2hlZCBfbGF0ZXJfIGFuZCBpdCBuZWVkcyB0byBzZW5kIGl0IHRvIE1ldHJvKVxuICAgIC8vIDQuIHRoYXQgX21pZ2h0XyBidWJibGUgYWdhaW4gdG8gdGhlIGByZWFjdENvbnNvbGVFcnJvckhhbmRsZWAgZGVmaW5lZCBoZXJlXG4gICAgLy8gICAgLT4gc2hvdWxkIG5vdCBoYW5kbGUgZXhjZXB0aW9uIF9hZ2Fpbl8sIHRvIGF2b2lkIGxvb3BpbmcgLyBzaG93aW5nIHR3aWNlICh0aGlzIGNvZGUgYnJhbmNoKVxuICAgIC8vIDUuIHNob3VsZCBzdGlsbCBidWJibGUgdXAgdG8gb3JpZ2luYWwgY29uc29sZSAod2hpY2ggbWlnaHQgZWl0aGVyIGJlIGNvbnNvbGUubG9nLCBvciB0aGUgRGV2VG9vbHMgaGFuZGxlciBpbiBjYXNlIHRoYXQgb25lIHBhdGNoZWQgX2VhcmxpZXJfKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBlcnJvcjtcblxuICBjb25zdCBmaXJzdEFyZyA9IGFyZ3NbMF07XG4gIGlmIChmaXJzdEFyZz8uc3RhY2spIHtcbiAgICAvLyByZXBvcnRFeGNlcHRpb24gd2lsbCBjb25zb2xlLmVycm9yIHRoaXMgd2l0aCBoaWdoIGVub3VnaCBmaWRlbGl0eS5cbiAgICBlcnJvciA9IGZpcnN0QXJnO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0cmluZ2lmeVNhZmUgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvc3RyaW5naWZ5U2FmZScpLmRlZmF1bHQ7XG4gICAgaWYgKHR5cGVvZiBmaXJzdEFyZyA9PT0gJ3N0cmluZycgJiYgZmlyc3RBcmcuc3RhcnRzV2l0aCgnV2FybmluZzogJykpIHtcbiAgICAgIC8vIFJlYWN0IHdhcm5pbmdzIHVzZSBjb25zb2xlLmVycm9yIHNvIHRoYXQgYSBzdGFjayB0cmFjZSBpcyBzaG93biwgYnV0XG4gICAgICAvLyB3ZSBkb24ndCAoY3VycmVudGx5KSB3YW50IHRoZXNlIHRvIHNob3cgYSByZWRib3hcbiAgICAgIC8vIChOb3RlOiBMb2dpYyBkdXBsaWNhdGVkIGluIHBvbHlmaWxscy9jb25zb2xlLmpzLilcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZSA9IGFyZ3NcbiAgICAgIC5tYXAoYXJnID0+ICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyA/IGFyZyA6IHN0cmluZ2lmeVNhZmUoYXJnKSkpXG4gICAgICAuam9pbignICcpO1xuXG4gICAgZXJyb3IgPSBuZXcgU3ludGhldGljRXJyb3IobWVzc2FnZSk7XG4gICAgZXJyb3IubmFtZSA9ICdjb25zb2xlLmVycm9yJztcbiAgfVxuXG4gIHJlcG9ydEV4Y2VwdGlvbihcbiAgICAvKiAkRmxvd0ZpeE1lW2NsYXNzLW9iamVjdC1zdWJ0eXBpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3IgdGhpc1xuICAgICAqIHBhcmFtZXRlcnMgKi9cbiAgICBlcnJvcixcbiAgICBmYWxzZSwgLy8gaXNGYXRhbFxuICAgIGZhbHNlLCAvLyByZXBvcnRUb0NvbnNvbGVcbiAgKTtcbn1cblxuLyoqXG4gKiBTaG93cyBhIHJlZGJveCB3aXRoIHN0YWNrdHJhY2UgZm9yIGFsbCBjb25zb2xlLmVycm9yIG1lc3NhZ2VzLiAgRGlzYWJsZSBieVxuICogc2V0dGluZyBgY29uc29sZS5yZXBvcnRFcnJvcnNBc0V4Y2VwdGlvbnMgPSBmYWxzZTtgIGluIHlvdXIgYXBwLlxuICovXG5mdW5jdGlvbiBpbnN0YWxsQ29uc29sZUVycm9yUmVwb3J0ZXIoKSB7XG4gIC8vIEVuYWJsZSByZXBvcnRFcnJvcnNBc0V4Y2VwdGlvbnNcbiAgaWYgKGNvbnNvbGUuX2Vycm9yT3JpZ2luYWwpIHtcbiAgICByZXR1cm47IC8vIGFscmVhZHkgaW5zdGFsbGVkXG4gIH1cbiAgLy8gRmxvdyBkb2Vzbid0IGxpa2UgaXQgd2hlbiB5b3Ugc2V0IGFyYml0cmFyeSB2YWx1ZXMgb24gYSBnbG9iYWwgb2JqZWN0XG4gIGNvbnNvbGUuX2Vycm9yT3JpZ2luYWwgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG4gIGNvbnNvbGUuZXJyb3IgPSByZWFjdENvbnNvbGVFcnJvckhhbmRsZXI7XG4gIGlmIChjb25zb2xlLnJlcG9ydEVycm9yc0FzRXhjZXB0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gSW5kaXZpZHVhbCBhcHBzIGNhbiBkaXNhYmxlIHRoaXNcbiAgICAvLyBGbG93IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlvdSBzZXQgYXJiaXRyYXJ5IHZhbHVlcyBvbiBhIGdsb2JhbCBvYmplY3RcbiAgICBjb25zb2xlLnJlcG9ydEVycm9yc0FzRXhjZXB0aW9ucyA9IHRydWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRlY29yYXRlZEV4dHJhRGF0YUtleSxcbiAgaGFuZGxlRXhjZXB0aW9uLFxuICBpbnN0YWxsQ29uc29sZUVycm9yUmVwb3J0ZXIsXG4gIFN5bnRoZXRpY0Vycm9yLFxuICB1bnN0YWJsZV9zZXRFeGNlcHRpb25EZWNvcmF0b3IsXG59O1xuIiwidmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vZ2V0UHJvdG90eXBlT2YuanNcIik7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbnZhciBpc05hdGl2ZUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vaXNOYXRpdmVGdW5jdGlvbi5qc1wiKTtcbnZhciBjb25zdHJ1Y3QgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3QuanNcIik7XG5mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG4gIG1vZHVsZS5leHBvcnRzID0gX3dyYXBOYXRpdmVTdXBlciA9IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IG51bGwgfHwgIWlzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoX2NhY2hlLmhhcyhDbGFzcykpIHJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTtcbiAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCBDbGFzcyk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfd3JhcE5hdGl2ZVN1cGVyLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2lzTmF0aXZlRnVuY3Rpb24sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbnZhciBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSByZXF1aXJlKFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIik7XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBzZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIH1cbiAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NvbnN0cnVjdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtTdGFja0ZyYW1lfSBmcm9tICcuLi9OYXRpdmVFeGNlcHRpb25zTWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7SGVybWVzUGFyc2VkU3RhY2t9IGZyb20gJy4vcGFyc2VIZXJtZXNTdGFjayc7XG5cbmNvbnN0IHBhcnNlSGVybWVzU3RhY2sgPSByZXF1aXJlKCcuL3BhcnNlSGVybWVzU3RhY2snKTtcblxuZnVuY3Rpb24gY29udmVydEhlcm1lc1N0YWNrKHN0YWNrOiBIZXJtZXNQYXJzZWRTdGFjayk6IEFycmF5PFN0YWNrRnJhbWU+IHtcbiAgY29uc3QgZnJhbWVzOiBBcnJheTxTdGFja0ZyYW1lPiA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHN0YWNrLmVudHJpZXMpIHtcbiAgICBpZiAoZW50cnkudHlwZSAhPT0gJ0ZSQU1FJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHtsb2NhdGlvbiwgZnVuY3Rpb25OYW1lfSA9IGVudHJ5O1xuICAgIGlmIChsb2NhdGlvbi50eXBlID09PSAnTkFUSVZFJyB8fCBsb2NhdGlvbi50eXBlID09PSAnSU5URVJOQUxfQllURUNPREUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZnJhbWVzLnB1c2goe1xuICAgICAgbWV0aG9kTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgZmlsZTogbG9jYXRpb24uc291cmNlVXJsLFxuICAgICAgbGluZU51bWJlcjogbG9jYXRpb24ubGluZTFCYXNlZCxcbiAgICAgIGNvbHVtbjpcbiAgICAgICAgbG9jYXRpb24udHlwZSA9PT0gJ1NPVVJDRSdcbiAgICAgICAgICA/IGxvY2F0aW9uLmNvbHVtbjFCYXNlZCAtIDFcbiAgICAgICAgICA6IGxvY2F0aW9uLnZpcnR1YWxPZmZzZXQwQmFzZWQsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZnVuY3Rpb24gcGFyc2VFcnJvclN0YWNrKGVycm9yU3RhY2s/OiBzdHJpbmcpOiBBcnJheTxTdGFja0ZyYW1lPiB7XG4gIGlmIChlcnJvclN0YWNrID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBzdGFja3RyYWNlUGFyc2VyID0gcmVxdWlyZSgnc3RhY2t0cmFjZS1wYXJzZXInKTtcbiAgY29uc3QgcGFyc2VkU3RhY2sgPSBBcnJheS5pc0FycmF5KGVycm9yU3RhY2spXG4gICAgPyBlcnJvclN0YWNrXG4gICAgOiBnbG9iYWwuSGVybWVzSW50ZXJuYWxcbiAgICA/IGNvbnZlcnRIZXJtZXNTdGFjayhwYXJzZUhlcm1lc1N0YWNrKGVycm9yU3RhY2spKVxuICAgIDogc3RhY2t0cmFjZVBhcnNlci5wYXJzZShlcnJvclN0YWNrKS5tYXAoKGZyYW1lKTogU3RhY2tGcmFtZSA9PiAoe1xuICAgICAgICAuLi5mcmFtZSxcbiAgICAgICAgY29sdW1uOiBmcmFtZS5jb2x1bW4gIT0gbnVsbCA/IGZyYW1lLmNvbHVtbiAtIDEgOiBudWxsLFxuICAgICAgfSkpO1xuXG4gIHJldHVybiBwYXJzZWRTdGFjaztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZUVycm9yU3RhY2s7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBVTktOT1dOX0ZVTkNUSU9OID0gJzx1bmtub3duPic7XG4vKipcbiAqIFRoaXMgcGFyc2VzIHRoZSBkaWZmZXJlbnQgc3RhY2sgdHJhY2VzIGFuZCBwdXRzIHRoZW0gaW50byBvbmUgZm9ybWF0XG4gKiBUaGlzIGJvcnJvd3MgaGVhdmlseSBmcm9tIFRyYWNlS2l0IChodHRwczovL2dpdGh1Yi5jb20vY3Nub3Zlci9UcmFjZUtpdClcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdGFja1N0cmluZykge1xuICB2YXIgbGluZXMgPSBzdGFja1N0cmluZy5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBsaW5lcy5yZWR1Y2UoZnVuY3Rpb24gKHN0YWNrLCBsaW5lKSB7XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gcGFyc2VDaHJvbWUobGluZSkgfHwgcGFyc2VXaW5qcyhsaW5lKSB8fCBwYXJzZUdlY2tvKGxpbmUpIHx8IHBhcnNlTm9kZShsaW5lKSB8fCBwYXJzZUpTQyhsaW5lKTtcblxuICAgIGlmIChwYXJzZVJlc3VsdCkge1xuICAgICAgc3RhY2sucHVzaChwYXJzZVJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9LCBbXSk7XG59XG52YXIgY2hyb21lUmUgPSAvXlxccyphdCAoLio/KSA/XFwoKCg/OmZpbGV8aHR0cHM/fGJsb2J8Y2hyb21lLWV4dGVuc2lvbnxuYXRpdmV8ZXZhbHx3ZWJwYWNrfDxhbm9ueW1vdXM+fFxcL3xbYS16XTpcXFxcfFxcXFxcXFxcKS4qPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtcbnZhciBjaHJvbWVFdmFsUmUgPSAvXFwoKFxcUyopKD86OihcXGQrKSkoPzo6KFxcZCspKVxcKS87XG5cbmZ1bmN0aW9uIHBhcnNlQ2hyb21lKGxpbmUpIHtcbiAgdmFyIHBhcnRzID0gY2hyb21lUmUuZXhlYyhsaW5lKTtcblxuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgaXNOYXRpdmUgPSBwYXJ0c1syXSAmJiBwYXJ0c1syXS5pbmRleE9mKCduYXRpdmUnKSA9PT0gMDsgLy8gc3RhcnQgb2YgbGluZVxuXG4gIHZhciBpc0V2YWwgPSBwYXJ0c1syXSAmJiBwYXJ0c1syXS5pbmRleE9mKCdldmFsJykgPT09IDA7IC8vIHN0YXJ0IG9mIGxpbmVcblxuICB2YXIgc3VibWF0Y2ggPSBjaHJvbWVFdmFsUmUuZXhlYyhwYXJ0c1syXSk7XG5cbiAgaWYgKGlzRXZhbCAmJiBzdWJtYXRjaCAhPSBudWxsKSB7XG4gICAgLy8gdGhyb3cgb3V0IGV2YWwgbGluZS9jb2x1bW4gYW5kIHVzZSB0b3AtbW9zdCBsaW5lL2NvbHVtbiBudW1iZXJcbiAgICBwYXJ0c1syXSA9IHN1Ym1hdGNoWzFdOyAvLyB1cmxcblxuICAgIHBhcnRzWzNdID0gc3VibWF0Y2hbMl07IC8vIGxpbmVcblxuICAgIHBhcnRzWzRdID0gc3VibWF0Y2hbM107IC8vIGNvbHVtblxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlOiAhaXNOYXRpdmUgPyBwYXJ0c1syXSA6IG51bGwsXG4gICAgbWV0aG9kTmFtZTogcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTixcbiAgICBhcmd1bWVudHM6IGlzTmF0aXZlID8gW3BhcnRzWzJdXSA6IFtdLFxuICAgIGxpbmVOdW1iZXI6IHBhcnRzWzNdID8gK3BhcnRzWzNdIDogbnVsbCxcbiAgICBjb2x1bW46IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbFxuICB9O1xufVxuXG52YXIgd2luanNSZSA9IC9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3xibG9iKTouKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xuXG5mdW5jdGlvbiBwYXJzZVdpbmpzKGxpbmUpIHtcbiAgdmFyIHBhcnRzID0gd2luanNSZS5leGVjKGxpbmUpO1xuXG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZTogcGFydHNbMl0sXG4gICAgbWV0aG9kTmFtZTogcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTixcbiAgICBhcmd1bWVudHM6IFtdLFxuICAgIGxpbmVOdW1iZXI6ICtwYXJ0c1szXSxcbiAgICBjb2x1bW46IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbFxuICB9O1xufVxuXG52YXIgZ2Vja29SZSA9IC9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCkoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWV8d2VicGFja3xyZXNvdXJjZXxcXFtuYXRpdmUpLio/fFteQF0qYnVuZGxlKSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xccyokL2k7XG52YXIgZ2Vja29FdmFsUmUgPSAvKFxcUyspIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWwvaTtcblxuZnVuY3Rpb24gcGFyc2VHZWNrbyhsaW5lKSB7XG4gIHZhciBwYXJ0cyA9IGdlY2tvUmUuZXhlYyhsaW5lKTtcblxuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgaXNFdmFsID0gcGFydHNbM10gJiYgcGFydHNbM10uaW5kZXhPZignID4gZXZhbCcpID4gLTE7XG4gIHZhciBzdWJtYXRjaCA9IGdlY2tvRXZhbFJlLmV4ZWMocGFydHNbM10pO1xuXG4gIGlmIChpc0V2YWwgJiYgc3VibWF0Y2ggIT0gbnVsbCkge1xuICAgIC8vIHRocm93IG91dCBldmFsIGxpbmUvY29sdW1uIGFuZCB1c2UgdG9wLW1vc3QgbGluZSBudW1iZXJcbiAgICBwYXJ0c1szXSA9IHN1Ym1hdGNoWzFdO1xuICAgIHBhcnRzWzRdID0gc3VibWF0Y2hbMl07XG4gICAgcGFydHNbNV0gPSBudWxsOyAvLyBubyBjb2x1bW4gd2hlbiBldmFsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGU6IHBhcnRzWzNdLFxuICAgIG1ldGhvZE5hbWU6IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gICAgYXJndW1lbnRzOiBwYXJ0c1syXSA/IHBhcnRzWzJdLnNwbGl0KCcsJykgOiBbXSxcbiAgICBsaW5lTnVtYmVyOiBwYXJ0c1s0XSA/ICtwYXJ0c1s0XSA6IG51bGwsXG4gICAgY29sdW1uOiBwYXJ0c1s1XSA/ICtwYXJ0c1s1XSA6IG51bGxcbiAgfTtcbn1cblxudmFyIGphdmFTY3JpcHRDb3JlUmUgPSAvXlxccyooPzooW15AXSopKD86XFwoKC4qPylcXCkpP0ApPyhcXFMuKj8pOihcXGQrKSg/OjooXFxkKykpP1xccyokL2k7XG5cbmZ1bmN0aW9uIHBhcnNlSlNDKGxpbmUpIHtcbiAgdmFyIHBhcnRzID0gamF2YVNjcmlwdENvcmVSZS5leGVjKGxpbmUpO1xuXG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZTogcGFydHNbM10sXG4gICAgbWV0aG9kTmFtZTogcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTixcbiAgICBhcmd1bWVudHM6IFtdLFxuICAgIGxpbmVOdW1iZXI6ICtwYXJ0c1s0XSxcbiAgICBjb2x1bW46IHBhcnRzWzVdID8gK3BhcnRzWzVdIDogbnVsbFxuICB9O1xufVxuXG52YXIgbm9kZVJlID0gL15cXHMqYXQgKD86KCg/OlxcW29iamVjdCBvYmplY3RcXF0pP1teXFxcXC9dKyg/OiBcXFthcyBcXFMrXFxdKT8pICk/XFwoPyguKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xuXG5mdW5jdGlvbiBwYXJzZU5vZGUobGluZSkge1xuICB2YXIgcGFydHMgPSBub2RlUmUuZXhlYyhsaW5lKTtcblxuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGU6IHBhcnRzWzJdLFxuICAgIG1ldGhvZE5hbWU6IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gICAgYXJndW1lbnRzOiBbXSxcbiAgICBsaW5lTnVtYmVyOiArcGFydHNbM10sXG4gICAgY29sdW1uOiBwYXJ0c1s0XSA/ICtwYXJ0c1s0XSA6IG51bGxcbiAgfTtcbn1cblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudHlwZSBIZXJtZXNTdGFja0xvY2F0aW9uTmF0aXZlID0gJFJlYWRPbmx5PHtcbiAgdHlwZTogJ05BVElWRScsXG59PjtcblxudHlwZSBIZXJtZXNTdGFja0xvY2F0aW9uU291cmNlID0gJFJlYWRPbmx5PHtcbiAgdHlwZTogJ1NPVVJDRScsXG4gIHNvdXJjZVVybDogc3RyaW5nLFxuICBsaW5lMUJhc2VkOiBudW1iZXIsXG4gIGNvbHVtbjFCYXNlZDogbnVtYmVyLFxufT47XG5cbnR5cGUgSGVybWVzU3RhY2tMb2NhdGlvbkludGVybmFsQnl0ZWNvZGUgPSAkUmVhZE9ubHk8e1xuICB0eXBlOiAnSU5URVJOQUxfQllURUNPREUnLFxuICBzb3VyY2VVcmw6IHN0cmluZyxcbiAgbGluZTFCYXNlZDogbnVtYmVyLFxuICB2aXJ0dWFsT2Zmc2V0MEJhc2VkOiBudW1iZXIsXG59PjtcblxudHlwZSBIZXJtZXNTdGFja0xvY2F0aW9uQnl0ZWNvZGUgPSAkUmVhZE9ubHk8e1xuICB0eXBlOiAnQllURUNPREUnLFxuICBzb3VyY2VVcmw6IHN0cmluZyxcbiAgbGluZTFCYXNlZDogbnVtYmVyLFxuICB2aXJ0dWFsT2Zmc2V0MEJhc2VkOiBudW1iZXIsXG59PjtcblxudHlwZSBIZXJtZXNTdGFja0xvY2F0aW9uID1cbiAgfCBIZXJtZXNTdGFja0xvY2F0aW9uTmF0aXZlXG4gIHwgSGVybWVzU3RhY2tMb2NhdGlvblNvdXJjZVxuICB8IEhlcm1lc1N0YWNrTG9jYXRpb25JbnRlcm5hbEJ5dGVjb2RlXG4gIHwgSGVybWVzU3RhY2tMb2NhdGlvbkJ5dGVjb2RlO1xuXG50eXBlIEhlcm1lc1N0YWNrRW50cnlGcmFtZSA9ICRSZWFkT25seTx7XG4gIHR5cGU6ICdGUkFNRScsXG4gIGxvY2F0aW9uOiBIZXJtZXNTdGFja0xvY2F0aW9uLFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbn0+O1xuXG50eXBlIEhlcm1lc1N0YWNrRW50cnlTa2lwcGVkID0gJFJlYWRPbmx5PHtcbiAgdHlwZTogJ1NLSVBQRUQnLFxuICBjb3VudDogbnVtYmVyLFxufT47XG5cbnR5cGUgSGVybWVzU3RhY2tFbnRyeSA9IEhlcm1lc1N0YWNrRW50cnlGcmFtZSB8IEhlcm1lc1N0YWNrRW50cnlTa2lwcGVkO1xuXG5leHBvcnQgdHlwZSBIZXJtZXNQYXJzZWRTdGFjayA9ICRSZWFkT25seTx7XG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZW50cmllczogJFJlYWRPbmx5QXJyYXk8SGVybWVzU3RhY2tFbnRyeT4sXG59PjtcblxuLy8gQ2FwdHVyaW5nIGdyb3Vwczpcbi8vIDEuIGZ1bmN0aW9uIG5hbWVcbi8vIDIuIGlzIHRoaXMgYSBuYXRpdmUgc3RhY2sgZnJhbWU/XG4vLyAzLiBpcyB0aGlzIGEgYnl0ZWNvZGUgYWRkcmVzcyBvciBhIHNvdXJjZSBsb2NhdGlvbj9cbi8vIDQuIHNvdXJjZSBVUkwgKGZpbGVuYW1lKVxuLy8gNS4gbGluZSBudW1iZXIgKDEgYmFzZWQpXG4vLyA2LiBjb2x1bW4gbnVtYmVyICgxIGJhc2VkKSBvciB2aXJ0dWFsIG9mZnNldCAoMCBiYXNlZClcbmNvbnN0IFJFX0ZSQU1FID1cbiAgL14gezR9YXQgKC4rPykoPzogXFwoKG5hdGl2ZSlcXCk/fCBcXCgoYWRkcmVzcyBhdCApPyguKj8pOihcXGQrKTooXFxkKylcXCkpJC87XG5cbi8vIENhcHR1cmluZyBncm91cHM6XG4vLyAxLiBjb3VudCBvZiBza2lwcGVkIGZyYW1lc1xuY29uc3QgUkVfU0tJUFBFRCA9IC9eIHs0fS4uLiBza2lwcGluZyAoXFxkKykgZnJhbWVzJC87XG5cbmZ1bmN0aW9uIGlzSW50ZXJuYWxCeXRlY29kZVNvdXJjZVVybChzb3VyY2VVcmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2hlcm1lcy9ibG9iLzMzMzJmYTAyMGNhZTBiYWI3NTFmNjQ4ZGI3Yzk0ZTFkNjg3ZWVlYzcvbGliL1ZNL1J1bnRpbWUuY3BwI0wxMTAwXG4gIHJldHVybiBzb3VyY2VVcmwgPT09ICdJbnRlcm5hbEJ5dGVjb2RlLmpzJztcbn1cblxuZnVuY3Rpb24gcGFyc2VMaW5lKGxpbmU6IHN0cmluZyk6ID9IZXJtZXNTdGFja0VudHJ5IHtcbiAgY29uc3QgYXNGcmFtZSA9IGxpbmUubWF0Y2goUkVfRlJBTUUpO1xuICBpZiAoYXNGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnRlJBTUUnLFxuICAgICAgZnVuY3Rpb25OYW1lOiBhc0ZyYW1lWzFdLFxuICAgICAgbG9jYXRpb246XG4gICAgICAgIGFzRnJhbWVbMl0gPT09ICduYXRpdmUnXG4gICAgICAgICAgPyB7dHlwZTogJ05BVElWRSd9XG4gICAgICAgICAgOiBhc0ZyYW1lWzNdID09PSAnYWRkcmVzcyBhdCAnXG4gICAgICAgICAgPyBpc0ludGVybmFsQnl0ZWNvZGVTb3VyY2VVcmwoYXNGcmFtZVs0XSlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdJTlRFUk5BTF9CWVRFQ09ERScsXG4gICAgICAgICAgICAgICAgc291cmNlVXJsOiBhc0ZyYW1lWzRdLFxuICAgICAgICAgICAgICAgIGxpbmUxQmFzZWQ6IE51bWJlci5wYXJzZUludChhc0ZyYW1lWzVdLCAxMCksXG4gICAgICAgICAgICAgICAgdmlydHVhbE9mZnNldDBCYXNlZDogTnVtYmVyLnBhcnNlSW50KGFzRnJhbWVbNl0sIDEwKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0JZVEVDT0RFJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VVcmw6IGFzRnJhbWVbNF0sXG4gICAgICAgICAgICAgICAgbGluZTFCYXNlZDogTnVtYmVyLnBhcnNlSW50KGFzRnJhbWVbNV0sIDEwKSxcbiAgICAgICAgICAgICAgICB2aXJ0dWFsT2Zmc2V0MEJhc2VkOiBOdW1iZXIucGFyc2VJbnQoYXNGcmFtZVs2XSwgMTApLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdTT1VSQ0UnLFxuICAgICAgICAgICAgICBzb3VyY2VVcmw6IGFzRnJhbWVbNF0sXG4gICAgICAgICAgICAgIGxpbmUxQmFzZWQ6IE51bWJlci5wYXJzZUludChhc0ZyYW1lWzVdLCAxMCksXG4gICAgICAgICAgICAgIGNvbHVtbjFCYXNlZDogTnVtYmVyLnBhcnNlSW50KGFzRnJhbWVbNl0sIDEwKSxcbiAgICAgICAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBjb25zdCBhc1NraXBwZWQgPSBsaW5lLm1hdGNoKFJFX1NLSVBQRUQpO1xuICBpZiAoYXNTa2lwcGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdTS0lQUEVEJyxcbiAgICAgIGNvdW50OiBOdW1iZXIucGFyc2VJbnQoYXNTa2lwcGVkWzFdLCAxMCksXG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVybWVzU3RhY2soc3RhY2s6IHN0cmluZyk6IEhlcm1lc1BhcnNlZFN0YWNrIHtcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgvXFxuLyk7XG4gIGxldCBlbnRyaWVzOiBBcnJheTxIZXJtZXNTdGFja0VudHJ5RnJhbWUgfCBIZXJtZXNTdGFja0VudHJ5U2tpcHBlZD4gPSBbXTtcbiAgbGV0IGxhc3RNZXNzYWdlTGluZSA9IC0xO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbGluZSA9IGxpbmVzW2ldO1xuICAgIGlmICghbGluZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5ID0gcGFyc2VMaW5lKGxpbmUpO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBObyBtYXRjaCAtIHdlJ3JlIHN0aWxsIGluIHRoZSBtZXNzYWdlXG4gICAgbGFzdE1lc3NhZ2VMaW5lID0gaTtcbiAgICBlbnRyaWVzID0gW107XG4gIH1cbiAgY29uc3QgbWVzc2FnZSA9IGxpbmVzLnNsaWNlKDAsIGxhc3RNZXNzYWdlTGluZSArIDEpLmpvaW4oJ1xcbicpO1xuICByZXR1cm4ge21lc3NhZ2UsIGVudHJpZXN9O1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7SWdub3JlUGF0dGVybiwgTG9nRGF0YX0gZnJvbSAnLi9EYXRhL0xvZ0JveERhdGEnO1xuaW1wb3J0IHR5cGUge0V4dGVuZGVkRXhjZXB0aW9uRGF0YX0gZnJvbSAnLi9EYXRhL3BhcnNlTG9nQm94TG9nJztcblxuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgUkNUTG9nIGZyb20gJy4uL1V0aWxpdGllcy9SQ1RMb2cnO1xuXG5leHBvcnQgdHlwZSB7TG9nRGF0YSwgRXh0ZW5kZWRFeGNlcHRpb25EYXRhLCBJZ25vcmVQYXR0ZXJufTtcblxubGV0IExvZ0JveDtcblxuaW50ZXJmYWNlIElMb2dCb3gge1xuICBpbnN0YWxsKCk6IHZvaWQ7XG4gIHVuaW5zdGFsbCgpOiB2b2lkO1xuICBpc0luc3RhbGxlZCgpOiBib29sZWFuO1xuICBpZ25vcmVMb2dzKCRSZWFkT25seUFycmF5PElnbm9yZVBhdHRlcm4+KTogdm9pZDtcbiAgaWdub3JlQWxsTG9ncyg/Ym9vbGVhbik6IHZvaWQ7XG4gIGNsZWFyQWxsTG9ncygpOiB2b2lkO1xuICBhZGRMb2cobG9nOiBMb2dEYXRhKTogdm9pZDtcbiAgYWRkRXhjZXB0aW9uKGVycm9yOiBFeHRlbmRlZEV4Y2VwdGlvbkRhdGEpOiB2b2lkO1xufVxuXG4vKipcbiAqIExvZ0JveCBkaXNwbGF5cyBsb2dzIGluIHRoZSBhcHAuXG4gKi9cbmlmIChfX0RFVl9fKSB7XG4gIGNvbnN0IExvZ0JveERhdGEgPSByZXF1aXJlKCcuL0RhdGEvTG9nQm94RGF0YScpO1xuICBjb25zdCB7cGFyc2VMb2dCb3hMb2csIHBhcnNlSW50ZXJwb2xhdGlvbn0gPSByZXF1aXJlKCcuL0RhdGEvcGFyc2VMb2dCb3hMb2cnKTtcblxuICBsZXQgb3JpZ2luYWxDb25zb2xlRXJyb3I7XG4gIGxldCBvcmlnaW5hbENvbnNvbGVXYXJuO1xuICBsZXQgY29uc29sZUVycm9ySW1wbDtcbiAgbGV0IGNvbnNvbGVXYXJuSW1wbDogKC4uLmFyZ3M6IEFycmF5PG1peGVkPikgPT4gdm9pZDtcblxuICBsZXQgaXNMb2dCb3hJbnN0YWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBMb2dCb3ggPSB7XG4gICAgaW5zdGFsbCgpOiB2b2lkIHtcbiAgICAgIGlmIChpc0xvZ0JveEluc3RhbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlzTG9nQm94SW5zdGFsbGVkID0gdHJ1ZTtcblxuICAgICAgLy8gVHJpZ2dlciBsYXp5IGluaXRpYWxpemF0aW9uIG9mIG1vZHVsZS5cbiAgICAgIHJlcXVpcmUoJy4uL05hdGl2ZU1vZHVsZXMvc3BlY3MvTmF0aXZlTG9nQm94Jyk7XG5cbiAgICAgIC8vIElNUE9SVEFOVDogd2Ugb25seSBvdmVyd3JpdGUgYGNvbnNvbGUuZXJyb3JgIGFuZCBgY29uc29sZS53YXJuYCBvbmNlLlxuICAgICAgLy8gV2hlbiB3ZSB1bmluc3RhbGwgd2Uga2VlcCB0aGUgc2FtZSByZWZlcmVuY2UgYW5kIG9ubHkgY2hhbmdlIGl0c1xuICAgICAgLy8gaW50ZXJuYWwgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IGlzRmlyc3RJbnN0YWxsID0gb3JpZ2luYWxDb25zb2xlRXJyb3IgPT0gbnVsbDtcbiAgICAgIGlmIChpc0ZpcnN0SW5zdGFsbCkge1xuICAgICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbiAgICAgICAgb3JpZ2luYWxDb25zb2xlV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuXG4gICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltjYW5ub3Qtd3JpdGVdXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIGNvbnNvbGVFcnJvckltcGwoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltjYW5ub3Qtd3JpdGVdXG4gICAgICAgIGNvbnNvbGUud2FybiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc29sZVdhcm5JbXBsKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlRXJyb3JJbXBsID0gcmVnaXN0ZXJFcnJvcjtcbiAgICAgIGNvbnNvbGVXYXJuSW1wbCA9IHJlZ2lzdGVyV2FybmluZztcblxuICAgICAgaWYgKFBsYXRmb3JtLmlzVGVzdGluZykge1xuICAgICAgICBMb2dCb3hEYXRhLnNldERpc2FibGVkKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBSQ1RMb2cuc2V0V2FybmluZ0hhbmRsZXIoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgcmVnaXN0ZXJXYXJuaW5nKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIHVuaW5zdGFsbCgpOiB2b2lkIHtcbiAgICAgIGlmICghaXNMb2dCb3hJbnN0YWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpc0xvZ0JveEluc3RhbGxlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBJTVBPUlRBTlQ6IHdlIGRvbid0IHJlLWFzc2lnbiB0byBgY29uc29sZWAgaW4gY2FzZSB0aGUgbWV0aG9kIGhhcyBiZWVuXG4gICAgICAvLyBkZWNvcmF0ZWQgYWdhaW4gYWZ0ZXIgaW5zdGFsbGluZyBMb2dCb3guIEUuZy46XG4gICAgICAvLyBCZWZvcmUgdW5pbnN0YWxsaW5nOiBvcmlnaW5hbCA+IExvZ0JveCA+IE90aGVyRXJyb3JIYW5kbGVyXG4gICAgICAvLyBBZnRlciB1bmluc3RhbGxpbmc6ICBvcmlnaW5hbCA+IExvZ0JveCAobm9vcCkgPiBPdGhlckVycm9ySGFuZGxlclxuICAgICAgY29uc29sZUVycm9ySW1wbCA9IG9yaWdpbmFsQ29uc29sZUVycm9yO1xuICAgICAgY29uc29sZVdhcm5JbXBsID0gb3JpZ2luYWxDb25zb2xlV2FybjtcbiAgICB9LFxuXG4gICAgaXNJbnN0YWxsZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gaXNMb2dCb3hJbnN0YWxsZWQ7XG4gICAgfSxcblxuICAgIGlnbm9yZUxvZ3MocGF0dGVybnM6ICRSZWFkT25seUFycmF5PElnbm9yZVBhdHRlcm4+KTogdm9pZCB7XG4gICAgICBMb2dCb3hEYXRhLmFkZElnbm9yZVBhdHRlcm5zKHBhdHRlcm5zKTtcbiAgICB9LFxuXG4gICAgaWdub3JlQWxsTG9ncyh2YWx1ZT86ID9ib29sZWFuKTogdm9pZCB7XG4gICAgICBMb2dCb3hEYXRhLnNldERpc2FibGVkKHZhbHVlID09IG51bGwgPyB0cnVlIDogdmFsdWUpO1xuICAgIH0sXG5cbiAgICBjbGVhckFsbExvZ3MoKTogdm9pZCB7XG4gICAgICBMb2dCb3hEYXRhLmNsZWFyKCk7XG4gICAgfSxcblxuICAgIGFkZExvZyhsb2c6IExvZ0RhdGEpOiB2b2lkIHtcbiAgICAgIGlmIChpc0xvZ0JveEluc3RhbGxlZCkge1xuICAgICAgICBMb2dCb3hEYXRhLmFkZExvZyhsb2cpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRFeGNlcHRpb24oZXJyb3I6IEV4dGVuZGVkRXhjZXB0aW9uRGF0YSk6IHZvaWQge1xuICAgICAgaWYgKGlzTG9nQm94SW5zdGFsbGVkKSB7XG4gICAgICAgIExvZ0JveERhdGEuYWRkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGlzUkNUTG9nQWR2aWNlV2FybmluZyA9ICguLi5hcmdzOiBBcnJheTxtaXhlZD4pID0+IHtcbiAgICAvLyBSQ1RMb2dBZHZpY2UgaXMgYSBuYXRpdmUgbG9nZ2luZyBmdW5jdGlvbiBkZXNpZ25lZCB0byBzaG93IHVzZXJzXG4gICAgLy8gYSBtZXNzYWdlIGluIHRoZSBjb25zb2xlLCBidXQgbm90IHNob3cgaXQgdG8gdGhlbSBpbiBMb2dib3guXG4gICAgcmV0dXJuIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyAmJiBhcmdzWzBdLnN0YXJ0c1dpdGgoJyhBRFZJQ0UpJyk7XG4gIH07XG5cbiAgY29uc3QgaXNXYXJuaW5nTW9kdWxlV2FybmluZyA9ICguLi5hcmdzOiBBcnJheTxtaXhlZD4pID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmIGFyZ3NbMF0uc3RhcnRzV2l0aCgnV2FybmluZzogJyk7XG4gIH07XG5cbiAgY29uc3QgcmVnaXN0ZXJXYXJuaW5nID0gKC4uLmFyZ3M6IEFycmF5PG1peGVkPik6IHZvaWQgPT4ge1xuICAgIC8vIExldCB3YXJuaW5ncyB3aXRoaW4gTG9nQm94IGl0c2VsZiBmYWxsIHRocm91Z2guXG4gICAgaWYgKExvZ0JveERhdGEuaXNMb2dCb3hFcnJvck1lc3NhZ2UoU3RyaW5nKGFyZ3NbMF0pKSkge1xuICAgICAgb3JpZ2luYWxDb25zb2xlRXJyb3IoLi4uYXJncyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJlIHN1cmUgdG8gcGFzcyBMb2dCb3ggd2FybmluZ3MgdGhyb3VnaC5cbiAgICAgIG9yaWdpbmFsQ29uc29sZVdhcm4oLi4uYXJncyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghaXNSQ1RMb2dBZHZpY2VXYXJuaW5nKC4uLmFyZ3MpKSB7XG4gICAgICAgIGNvbnN0IHtjYXRlZ29yeSwgbWVzc2FnZSwgY29tcG9uZW50U3RhY2t9ID0gcGFyc2VMb2dCb3hMb2coYXJncyk7XG5cbiAgICAgICAgaWYgKCFMb2dCb3hEYXRhLmlzTWVzc2FnZUlnbm9yZWQobWVzc2FnZS5jb250ZW50KSkge1xuICAgICAgICAgIExvZ0JveERhdGEuYWRkTG9nKHtcbiAgICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBjb21wb25lbnRTdGFjayxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nQm94RGF0YS5yZXBvcnRMb2dCb3hFcnJvcihlcnIpO1xuICAgIH1cbiAgfTtcblxuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gICAqIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIGNvbnN0IHJlZ2lzdGVyRXJyb3IgPSAoLi4uYXJncyk6IHZvaWQgPT4ge1xuICAgIC8vIExldCBlcnJvcnMgd2l0aGluIExvZ0JveCBpdHNlbGYgZmFsbCB0aHJvdWdoLlxuICAgIGlmIChMb2dCb3hEYXRhLmlzTG9nQm94RXJyb3JNZXNzYWdlKGFyZ3NbMF0pKSB7XG4gICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5hcmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFpc1dhcm5pbmdNb2R1bGVXYXJuaW5nKC4uLmFyZ3MpKSB7XG4gICAgICAgIC8vIE9ubHkgc2hvdyBMb2dCb3ggZm9yIHRoZSAnd2FybmluZycgbW9kdWxlLCBvdGhlcndpc2UgcGFzcyB0aHJvdWdoLlxuICAgICAgICAvLyBCeSBwYXNzaW5nIHRocm91Z2gsIHRoaXMgd2lsbCBnZXQgcGlja2VkIHVwIGJ5IHRoZSBSZWFjdCBjb25zb2xlIG92ZXJyaWRlLFxuICAgICAgICAvLyBwb3RlbnRpYWxseSBhZGRpbmcgdGhlIGNvbXBvbmVudCBzdGFjay4gUmVhY3QgdGhlbiBwYXNzZXMgaXQgYmFjayB0byB0aGVcbiAgICAgICAgLy8gUmVhY3QgTmF0aXZlIEV4Y2VwdGlvbnNNYW5hZ2VyLCB3aGljaCByZXBvcnRzIGl0IHRvIExvZ0JveCBhcyBhbiBlcnJvci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlICd3YXJuaW5nJyBtb2R1bGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBoZXJlIGJlY2F1c2UgUmVhY3QgaW50ZXJuYWxseSBjYWxsc1xuICAgICAgICAvLyBgY29uc29sZS5lcnJvcignV2FybmluZzogJylgIHdpdGggdGhlIGNvbXBvbmVudCBzdGFjayBhbHJlYWR5IGluY2x1ZGVkLlxuICAgICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5hcmdzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXQgPSBhcmdzWzBdLnJlcGxhY2UoJ1dhcm5pbmc6ICcsICcnKTtcbiAgICAgIGNvbnN0IGZpbHRlclJlc3VsdCA9IExvZ0JveERhdGEuY2hlY2tXYXJuaW5nRmlsdGVyKGZvcm1hdCk7XG4gICAgICBpZiAoZmlsdGVyUmVzdWx0LnN1cHByZXNzQ29tcGxldGVseSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBsZXZlbCA9ICdlcnJvcic7XG4gICAgICBpZiAoZmlsdGVyUmVzdWx0LnN1cHByZXNzRGlhbG9nX0xFR0FDWSA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXZlbCA9ICd3YXJuJztcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyUmVzdWx0LmZvcmNlRGlhbG9nSW1tZWRpYXRlbHkgPT09IHRydWUpIHtcbiAgICAgICAgbGV2ZWwgPSAnZmF0YWwnOyAvLyBEbyBub3QgZG93bmdyYWRlLiBUaGVzZSBhcmUgcmVhbCBidWdzIHdpdGggc2FtZSBzZXZlcml0eSBhcyB0aHJvd3MuXG4gICAgICB9XG5cbiAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIG5lZWQgdG8gYWRkIHRoZSBXYXJuaW5nOiBwcmVmaXggYmFjayBmb3IgZG93bnN0cmVhbSBkZXBlbmRlbmNpZXMuXG4gICAgICBhcmdzWzBdID0gYFdhcm5pbmc6ICR7ZmlsdGVyUmVzdWx0LmZpbmFsRm9ybWF0fWA7XG4gICAgICBjb25zdCB7Y2F0ZWdvcnksIG1lc3NhZ2UsIGNvbXBvbmVudFN0YWNrfSA9IHBhcnNlTG9nQm94TG9nKGFyZ3MpO1xuXG4gICAgICAvLyBJbnRlcnBvbGF0ZSB0aGUgbWVzc2FnZSBzbyB0aGV5IGFyZSBmb3JtYXR0ZWQgZm9yIGFkYiBhbmQgb3RoZXIgQ0xJcy5cbiAgICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG1lc3NhZ2UuY29udGVudCBhYm92ZSBiZWNhdXNlIGl0IGluY2x1ZGVzIGNvbXBvbmVudCBzdGFja3MuXG4gICAgICBjb25zdCBpbnRlcnBvbGF0ZWQgPSBwYXJzZUludGVycG9sYXRpb24oYXJncyk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVFcnJvcihpbnRlcnBvbGF0ZWQubWVzc2FnZS5jb250ZW50KTtcblxuICAgICAgaWYgKCFMb2dCb3hEYXRhLmlzTWVzc2FnZUlnbm9yZWQobWVzc2FnZS5jb250ZW50KSkge1xuICAgICAgICBMb2dCb3hEYXRhLmFkZExvZyh7XG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgY2F0ZWdvcnksXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBjb21wb25lbnRTdGFjayxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dCb3hEYXRhLnJlcG9ydExvZ0JveEVycm9yKGVycik7XG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgTG9nQm94ID0ge1xuICAgIGluc3RhbGwoKTogdm9pZCB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0sXG5cbiAgICB1bmluc3RhbGwoKTogdm9pZCB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0sXG5cbiAgICBpc0luc3RhbGxlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgaWdub3JlTG9ncyhwYXR0ZXJuczogJFJlYWRPbmx5QXJyYXk8SWdub3JlUGF0dGVybj4pOiB2b2lkIHtcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSxcblxuICAgIGlnbm9yZUFsbExvZ3ModmFsdWU/OiA/Ym9vbGVhbik6IHZvaWQge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxuXG4gICAgY2xlYXJBbGxMb2dzKCk6IHZvaWQge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxuXG4gICAgYWRkTG9nKGxvZzogTG9nRGF0YSk6IHZvaWQge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxuXG4gICAgYWRkRXhjZXB0aW9uKGVycm9yOiBFeHRlbmRlZEV4Y2VwdGlvbkRhdGEpOiB2b2lkIHtcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKExvZ0JveDogSUxvZ0JveCk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxuY29uc3QgbGV2ZWxzTWFwID0ge1xuICBsb2c6ICdsb2cnLFxuICBpbmZvOiAnaW5mbycsXG4gIHdhcm46ICd3YXJuJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGZhdGFsOiAnZXJyb3InLFxufTtcblxubGV0IHdhcm5pbmdIYW5kbGVyOiA/KC4uLkFycmF5PG1peGVkPikgPT4gdm9pZCA9IG51bGw7XG5cbmNvbnN0IFJDVExvZyA9IHtcbiAgLy8gbGV2ZWwgb25lIG9mIGxvZywgaW5mbywgd2FybiwgZXJyb3IsIG11c3RmaXhcbiAgbG9nSWZOb05hdGl2ZUhvb2sobGV2ZWw6IHN0cmluZywgLi4uYXJnczogQXJyYXk8bWl4ZWQ+KTogdm9pZCB7XG4gICAgLy8gV2UgYWxyZWFkeSBwcmludGVkIGluIHRoZSBuYXRpdmUgY29uc29sZSwgc28gb25seSBsb2cgaGVyZSBpZiB1c2luZyBhIGpzIGRlYnVnZ2VyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwubmF0aXZlTG9nZ2luZ0hvb2sgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBSQ1RMb2cubG9nVG9Db25zb2xlKGxldmVsLCAuLi5hcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwb3J0IG5hdGl2ZSB3YXJuaW5ncyB0byBMb2dCb3hcbiAgICAgIGlmICh3YXJuaW5nSGFuZGxlciAmJiBsZXZlbCA9PT0gJ3dhcm4nKSB7XG4gICAgICAgIHdhcm5pbmdIYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvLyBMb2cgdG8gY29uc29sZSByZWdhcmRsZXNzIG9mIG5hdGl2ZUxvZ2dpbmdIb29rXG4gIGxvZ1RvQ29uc29sZShsZXZlbDogc3RyaW5nLCAuLi5hcmdzOiBBcnJheTxtaXhlZD4pOiB2b2lkIHtcbiAgICBjb25zdCBsb2dGbiA9IGxldmVsc01hcFtsZXZlbF07XG4gICAgaW52YXJpYW50KFxuICAgICAgbG9nRm4sXG4gICAgICAnTGV2ZWwgXCInICsgbGV2ZWwgKyAnXCIgbm90IG9uZSBvZiAnICsgT2JqZWN0LmtleXMobGV2ZWxzTWFwKS50b1N0cmluZygpLFxuICAgICk7XG5cbiAgICBjb25zb2xlW2xvZ0ZuXSguLi5hcmdzKTtcbiAgfSxcblxuICBzZXRXYXJuaW5nSGFuZGxlcihoYW5kbGVyOiB0eXBlb2Ygd2FybmluZ0hhbmRsZXIpOiB2b2lkIHtcbiAgICB3YXJuaW5nSGFuZGxlciA9IGhhbmRsZXI7XG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJDVExvZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4oJ3VzZSBzdHJpY3QnKTtcblxuaW1wb3J0IHR5cGUge0V4dGVuZGVkRXJyb3J9IGZyb20gJy4uLy4uL0NvcmUvRXh0ZW5kZWRFcnJvcic7XG5pbXBvcnQgdHlwZSB7TG9nTGV2ZWx9IGZyb20gJy4vTG9nQm94TG9nJztcbmltcG9ydCB0eXBlIHtcbiAgQ2F0ZWdvcnksXG4gIENvbXBvbmVudFN0YWNrLFxuICBFeHRlbmRlZEV4Y2VwdGlvbkRhdGEsXG4gIE1lc3NhZ2UsXG59IGZyb20gJy4vcGFyc2VMb2dCb3hMb2cnO1xuXG5pbXBvcnQgcGFyc2VFcnJvclN0YWNrIGZyb20gJy4uLy4uL0NvcmUvRGV2dG9vbHMvcGFyc2VFcnJvclN0YWNrJztcbmltcG9ydCBOYXRpdmVMb2dCb3ggZnJvbSAnLi4vLi4vTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVMb2dCb3gnO1xuaW1wb3J0IExvZ0JveExvZyBmcm9tICcuL0xvZ0JveExvZyc7XG5pbXBvcnQge3BhcnNlTG9nQm94RXhjZXB0aW9ufSBmcm9tICcuL3BhcnNlTG9nQm94TG9nJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB0eXBlIExvZ0JveExvZ3MgPSBTZXQ8TG9nQm94TG9nPjtcbmV4cG9ydCB0eXBlIExvZ0RhdGEgPSAkUmVhZE9ubHk8e3xcbiAgbGV2ZWw6IExvZ0xldmVsLFxuICBtZXNzYWdlOiBNZXNzYWdlLFxuICBjYXRlZ29yeTogQ2F0ZWdvcnksXG4gIGNvbXBvbmVudFN0YWNrOiBDb21wb25lbnRTdGFjayxcbiAgc3RhY2s/OiBzdHJpbmcsXG58fT47XG5cbmV4cG9ydCB0eXBlIE9ic2VydmVyID0gKFxuICAkUmVhZE9ubHk8e3xcbiAgICBsb2dzOiBMb2dCb3hMb2dzLFxuICAgIGlzRGlzYWJsZWQ6IGJvb2xlYW4sXG4gICAgc2VsZWN0ZWRMb2dJbmRleDogbnVtYmVyLFxuICB8fT4sXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIElnbm9yZVBhdHRlcm4gPSBzdHJpbmcgfCBSZWdFeHA7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvbiA9ICRSZWFkT25seTx7fFxuICB1bnN1YnNjcmliZTogKCkgPT4gdm9pZCxcbnx9PjtcblxuZXhwb3J0IHR5cGUgV2FybmluZ0luZm8gPSB7fFxuICBmaW5hbEZvcm1hdDogc3RyaW5nLFxuICBmb3JjZURpYWxvZ0ltbWVkaWF0ZWx5OiBib29sZWFuLFxuICBzdXBwcmVzc0RpYWxvZ19MRUdBQ1k6IGJvb2xlYW4sXG4gIHN1cHByZXNzQ29tcGxldGVseTogYm9vbGVhbixcbiAgbW9uaXRvckV2ZW50OiBzdHJpbmcgfCBudWxsLFxuICBtb25pdG9yTGlzdFZlcnNpb246IG51bWJlcixcbiAgbW9uaXRvclNhbXBsZVJhdGU6IG51bWJlcixcbnx9O1xuXG5leHBvcnQgdHlwZSBXYXJuaW5nRmlsdGVyID0gKGZvcm1hdDogc3RyaW5nKSA9PiBXYXJuaW5nSW5mbztcblxudHlwZSBBcHBJbmZvID0gJFJlYWRPbmx5PHt8XG4gIGFwcFZlcnNpb246IHN0cmluZyxcbiAgZW5naW5lOiBzdHJpbmcsXG4gIG9uUHJlc3M/OiA/KCkgPT4gdm9pZCxcbnx9PjtcblxuY29uc3Qgb2JzZXJ2ZXJzOiBTZXQ8e29ic2VydmVyOiBPYnNlcnZlciwgLi4ufT4gPSBuZXcgU2V0KCk7XG5jb25zdCBpZ25vcmVQYXR0ZXJuczogU2V0PElnbm9yZVBhdHRlcm4+ID0gbmV3IFNldCgpO1xubGV0IGFwcEluZm86ID8oKSA9PiBBcHBJbmZvID0gbnVsbDtcbmxldCBsb2dzOiBMb2dCb3hMb2dzID0gbmV3IFNldCgpO1xubGV0IHVwZGF0ZVRpbWVvdXQ6ICRGbG93Rml4TWUgfCBudWxsID0gbnVsbDtcbmxldCBfaXNEaXNhYmxlZCA9IGZhbHNlO1xubGV0IF9zZWxlY3RlZEluZGV4ID0gLTE7XG5cbmxldCB3YXJuaW5nRmlsdGVyOiBXYXJuaW5nRmlsdGVyID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICByZXR1cm4ge1xuICAgIGZpbmFsRm9ybWF0OiBmb3JtYXQsXG4gICAgZm9yY2VEaWFsb2dJbW1lZGlhdGVseTogZmFsc2UsXG4gICAgc3VwcHJlc3NEaWFsb2dfTEVHQUNZOiB0cnVlLFxuICAgIHN1cHByZXNzQ29tcGxldGVseTogZmFsc2UsXG4gICAgbW9uaXRvckV2ZW50OiAndW5rbm93bicsXG4gICAgbW9uaXRvckxpc3RWZXJzaW9uOiAwLFxuICAgIG1vbml0b3JTYW1wbGVSYXRlOiAxLFxuICB9O1xufTtcblxuY29uc3QgTE9HQk9YX0VSUk9SX01FU1NBR0UgPVxuICAnQW4gZXJyb3Igd2FzIHRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gcmVuZGVyIGxvZyBtZXNzYWdlcyB2aWEgTG9nQm94Lic7XG5cbmZ1bmN0aW9uIGdldE5leHRTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2dzLFxuICAgIGlzRGlzYWJsZWQ6IF9pc0Rpc2FibGVkLFxuICAgIHNlbGVjdGVkTG9nSW5kZXg6IF9zZWxlY3RlZEluZGV4LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0TG9nQm94RXJyb3IoXG4gIGVycm9yOiBFeHRlbmRlZEVycm9yLFxuICBjb21wb25lbnRTdGFjaz86IHN0cmluZyxcbik6IHZvaWQge1xuICBjb25zdCBFeGNlcHRpb25zTWFuYWdlciA9IHJlcXVpcmUoJy4uLy4uL0NvcmUvRXhjZXB0aW9uc01hbmFnZXInKTtcblxuICBlcnJvci5tZXNzYWdlID0gYCR7TE9HQk9YX0VSUk9SX01FU1NBR0V9XFxuXFxuJHtlcnJvci5tZXNzYWdlfWA7XG4gIGlmIChjb21wb25lbnRTdGFjayAhPSBudWxsKSB7XG4gICAgZXJyb3IuY29tcG9uZW50U3RhY2sgPSBjb21wb25lbnRTdGFjaztcbiAgfVxuICBFeGNlcHRpb25zTWFuYWdlci5oYW5kbGVFeGNlcHRpb24oZXJyb3IsIC8qIGlzRmF0YWwgKi8gdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xvZ0JveEVycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmluY2x1ZGVzKExPR0JPWF9FUlJPUl9NRVNTQUdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVzc2FnZUlnbm9yZWQobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBpZ25vcmVQYXR0ZXJucykge1xuICAgIGlmIChcbiAgICAgIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwICYmIHBhdHRlcm4udGVzdChtZXNzYWdlKSkgfHxcbiAgICAgICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5pbmNsdWRlcyhwYXR0ZXJuKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVVwZGF0ZSgpOiB2b2lkIHtcbiAgaWYgKHVwZGF0ZVRpbWVvdXQgPT0gbnVsbCkge1xuICAgIHVwZGF0ZVRpbWVvdXQgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSBnZXROZXh0U3RhdGUoKTtcbiAgICAgIG9ic2VydmVycy5mb3JFYWNoKCh7b2JzZXJ2ZXJ9KSA9PiBvYnNlcnZlcihuZXh0U3RhdGUpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmROZXdMb2cobmV3TG9nOiBMb2dCb3hMb2cpIHtcbiAgLy8gRG9uJ3Qgd2FudCBzdG9yZSB0aGVzZSBsb2dzIGJlY2F1c2UgdGhleSB0cmlnZ2VyIGFcbiAgLy8gc3RhdGUgdXBkYXRlIHdoZW4gd2UgYWRkIHRoZW0gdG8gdGhlIHN0b3JlLlxuICBpZiAoaXNNZXNzYWdlSWdub3JlZChuZXdMb2cubWVzc2FnZS5jb250ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHRoZSBuZXh0IGxvZyBoYXMgdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdGhlIHByZXZpb3VzIG9uZVxuICAvLyB0aGVuIHJvbGwgaXQgdXAgaW50byB0aGUgbGFzdCBsb2cgaW4gdGhlIGxpc3QgYnkgaW5jcmVtZW50aW5nXG4gIC8vIHRoZSBjb3VudCAoc2ltaWxhciB0byBob3cgQ2hyb21lIGRvZXMgaXQpLlxuICBjb25zdCBsYXN0TG9nID0gQXJyYXkuZnJvbShsb2dzKS5wb3AoKTtcbiAgaWYgKGxhc3RMb2cgJiYgbGFzdExvZy5jYXRlZ29yeSA9PT0gbmV3TG9nLmNhdGVnb3J5KSB7XG4gICAgbGFzdExvZy5pbmNyZW1lbnRDb3VudCgpO1xuICAgIGhhbmRsZVVwZGF0ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXdMb2cubGV2ZWwgPT09ICdmYXRhbCcpIHtcbiAgICAvLyBJZiBwb3NzaWJsZSwgdG8gYXZvaWQgamFuaywgd2UgZG9uJ3Qgd2FudCB0byBvcGVuIHRoZSBlcnJvciBiZWZvcmVcbiAgICAvLyBpdCdzIHN5bWJvbGljYXRlZC4gVG8gZG8gdGhhdCwgd2Ugb3B0aW1pc3RpY2FsbHkgd2FpdCBmb3JcbiAgICAvLyBzeW1ib2xpY2F0aW9uIGZvciB1cCB0byBhIHNlY29uZCBiZWZvcmUgYWRkaW5nIHRoZSBsb2cuXG4gICAgY29uc3QgT1BUSU1JU1RJQ19XQUlUX1RJTUUgPSAxMDAwO1xuXG4gICAgbGV0IGFkZFBlbmRpbmdMb2c6ID8oKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgbG9ncy5hZGQobmV3TG9nKTtcbiAgICAgIGlmIChfc2VsZWN0ZWRJbmRleCA8IDApIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRMb2cobG9ncy5zaXplIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICAgIGFkZFBlbmRpbmdMb2cgPSBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpbWlzdGljVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGFkZFBlbmRpbmdMb2cpIHtcbiAgICAgICAgYWRkUGVuZGluZ0xvZygpO1xuICAgICAgfVxuICAgIH0sIE9QVElNSVNUSUNfV0FJVF9USU1FKTtcblxuICAgIG5ld0xvZy5zeW1ib2xpY2F0ZShzdGF0dXMgPT4ge1xuICAgICAgaWYgKGFkZFBlbmRpbmdMb2cgJiYgc3RhdHVzICE9PSAnUEVORElORycpIHtcbiAgICAgICAgYWRkUGVuZGluZ0xvZygpO1xuICAgICAgICBjbGVhclRpbWVvdXQob3B0aW1pc3RpY1RpbWVvdXQpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09ICdQRU5ESU5HJykge1xuICAgICAgICAvLyBUaGUgbG9nIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgYnV0IHdlIG5lZWQgdG8gdHJpZ2dlciBhIHJlbmRlci5cbiAgICAgICAgaGFuZGxlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAobmV3TG9nLmxldmVsID09PSAnc3ludGF4Jykge1xuICAgIGxvZ3MuYWRkKG5ld0xvZyk7XG4gICAgc2V0U2VsZWN0ZWRMb2cobG9ncy5zaXplIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgbG9ncy5hZGQobmV3TG9nKTtcbiAgICBoYW5kbGVVcGRhdGUoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTG9nKGxvZzogTG9nRGF0YSk6IHZvaWQge1xuICBjb25zdCBlcnJvckZvclN0YWNrVHJhY2UgPSBuZXcgRXJyb3IoKTtcblxuICAvLyBQYXJzaW5nIGxvZ3MgYXJlIGV4cGVuc2l2ZSBzbyB3ZSBzY2hlZHVsZSB0aGlzXG4gIC8vIG90aGVyd2lzZSBzcGFtbXkgbG9ncyB3b3VsZCBwYXVzZSByZW5kZXJpbmcuXG4gIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YWNrID0gcGFyc2VFcnJvclN0YWNrKGxvZy5zdGFjayA/PyBlcnJvckZvclN0YWNrVHJhY2U/LnN0YWNrKTtcblxuICAgICAgYXBwZW5kTmV3TG9nKFxuICAgICAgICBuZXcgTG9nQm94TG9nKHtcbiAgICAgICAgICBsZXZlbDogbG9nLmxldmVsLFxuICAgICAgICAgIG1lc3NhZ2U6IGxvZy5tZXNzYWdlLFxuICAgICAgICAgIGlzQ29tcG9uZW50RXJyb3I6IGZhbHNlLFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgIGNhdGVnb3J5OiBsb2cuY2F0ZWdvcnksXG4gICAgICAgICAgY29tcG9uZW50U3RhY2s6IGxvZy5jb21wb25lbnRTdGFjayxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXBvcnRMb2dCb3hFcnJvcihlcnJvcik7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV4Y2VwdGlvbihlcnJvcjogRXh0ZW5kZWRFeGNlcHRpb25EYXRhKTogdm9pZCB7XG4gIC8vIFBhcnNpbmcgbG9ncyBhcmUgZXhwZW5zaXZlIHNvIHdlIHNjaGVkdWxlIHRoaXNcbiAgLy8gb3RoZXJ3aXNlIHNwYW1teSBsb2dzIHdvdWxkIHBhdXNlIHJlbmRlcmluZy5cbiAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXBwZW5kTmV3TG9nKG5ldyBMb2dCb3hMb2cocGFyc2VMb2dCb3hFeGNlcHRpb24oZXJyb3IpKSk7XG4gICAgfSBjYXRjaCAobG9nZ2luZ0Vycm9yKSB7XG4gICAgICByZXBvcnRMb2dCb3hFcnJvcihsb2dnaW5nRXJyb3IpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzeW1ib2xpY2F0ZUxvZ05vdyhsb2c6IExvZ0JveExvZykge1xuICBsb2cuc3ltYm9saWNhdGUoKCkgPT4ge1xuICAgIGhhbmRsZVVwZGF0ZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJ5U3ltYm9saWNhdGVMb2dOb3cobG9nOiBMb2dCb3hMb2cpIHtcbiAgbG9nLnJldHJ5U3ltYm9saWNhdGUoKCkgPT4ge1xuICAgIGhhbmRsZVVwZGF0ZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN5bWJvbGljYXRlTG9nTGF6eShsb2c6IExvZ0JveExvZykge1xuICBsb2cuc3ltYm9saWNhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKCk6IHZvaWQge1xuICBpZiAobG9ncy5zaXplID4gMCkge1xuICAgIGxvZ3MgPSBuZXcgU2V0KCk7XG4gICAgc2V0U2VsZWN0ZWRMb2coLTEpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3RlZExvZyhwcm9wb3NlZE5ld0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3Qgb2xkSW5kZXggPSBfc2VsZWN0ZWRJbmRleDtcbiAgbGV0IG5ld0luZGV4ID0gcHJvcG9zZWROZXdJbmRleDtcblxuICBjb25zdCBsb2dBcnJheSA9IEFycmF5LmZyb20obG9ncyk7XG4gIGxldCBpbmRleCA9IGxvZ0FycmF5Lmxlbmd0aCAtIDE7XG4gIHdoaWxlIChpbmRleCA+PSAwKSB7XG4gICAgLy8gVGhlIGxhdGVzdCBzeW50YXggZXJyb3IgaXMgc2VsZWN0ZWQgYW5kIGRpc3BsYXllZCBiZWZvcmUgYWxsIG90aGVyIGxvZ3MuXG4gICAgaWYgKGxvZ0FycmF5W2luZGV4XS5sZXZlbCA9PT0gJ3N5bnRheCcpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5kZXg7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggLT0gMTtcbiAgfVxuICBfc2VsZWN0ZWRJbmRleCA9IG5ld0luZGV4O1xuICBoYW5kbGVVcGRhdGUoKTtcbiAgaWYgKE5hdGl2ZUxvZ0JveCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgMCAmJiBuZXdJbmRleCA+PSAwKSB7XG4gICAgICAgIE5hdGl2ZUxvZ0JveC5zaG93KCk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID49IDAgJiYgbmV3SW5kZXggPCAwKSB7XG4gICAgICAgIE5hdGl2ZUxvZ0JveC5oaWRlKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyV2FybmluZ3MoKTogdm9pZCB7XG4gIGNvbnN0IG5ld0xvZ3MgPSBBcnJheS5mcm9tKGxvZ3MpLmZpbHRlcihsb2cgPT4gbG9nLmxldmVsICE9PSAnd2FybicpO1xuICBpZiAobmV3TG9ncy5sZW5ndGggIT09IGxvZ3Muc2l6ZSkge1xuICAgIGxvZ3MgPSBuZXcgU2V0KG5ld0xvZ3MpO1xuICAgIHNldFNlbGVjdGVkTG9nKC0xKTtcbiAgICBoYW5kbGVVcGRhdGUoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcnMoKTogdm9pZCB7XG4gIGNvbnN0IG5ld0xvZ3MgPSBBcnJheS5mcm9tKGxvZ3MpLmZpbHRlcihcbiAgICBsb2cgPT4gbG9nLmxldmVsICE9PSAnZXJyb3InICYmIGxvZy5sZXZlbCAhPT0gJ2ZhdGFsJyxcbiAgKTtcbiAgaWYgKG5ld0xvZ3MubGVuZ3RoICE9PSBsb2dzLnNpemUpIHtcbiAgICBsb2dzID0gbmV3IFNldChuZXdMb2dzKTtcbiAgICBzZXRTZWxlY3RlZExvZygtMSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc21pc3MobG9nOiBMb2dCb3hMb2cpOiB2b2lkIHtcbiAgaWYgKGxvZ3MuaGFzKGxvZykpIHtcbiAgICBsb2dzLmRlbGV0ZShsb2cpO1xuICAgIGhhbmRsZVVwZGF0ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRXYXJuaW5nRmlsdGVyKGZpbHRlcjogV2FybmluZ0ZpbHRlcik6IHZvaWQge1xuICB3YXJuaW5nRmlsdGVyID0gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXBwSW5mbyhpbmZvOiAoKSA9PiBBcHBJbmZvKTogdm9pZCB7XG4gIGFwcEluZm8gPSBpbmZvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwSW5mbygpOiA/QXBwSW5mbyB7XG4gIHJldHVybiBhcHBJbmZvICE9IG51bGwgPyBhcHBJbmZvKCkgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tXYXJuaW5nRmlsdGVyKGZvcm1hdDogc3RyaW5nKTogV2FybmluZ0luZm8ge1xuICByZXR1cm4gd2FybmluZ0ZpbHRlcihmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWdub3JlUGF0dGVybnMoKTogJFJlYWRPbmx5QXJyYXk8SWdub3JlUGF0dGVybj4ge1xuICByZXR1cm4gQXJyYXkuZnJvbShpZ25vcmVQYXR0ZXJucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRJZ25vcmVQYXR0ZXJucyhcbiAgcGF0dGVybnM6ICRSZWFkT25seUFycmF5PElnbm9yZVBhdHRlcm4+LFxuKTogdm9pZCB7XG4gIGNvbnN0IGV4aXN0aW5nU2l6ZSA9IGlnbm9yZVBhdHRlcm5zLnNpemU7XG4gIC8vIFRoZSBzYW1lIHBhdHRlcm4gbWF5IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzLCBidXQgYWRkaW5nIGEgbmV3IHBhdHRlcm5cbiAgLy8gY2FuIGJlIGV4cGVuc2l2ZSBzbyBsZXQncyBmaW5kIG9ubHkgdGhlIG9uZXMgdGhhdCBhcmUgbmV3LlxuICBwYXR0ZXJucy5mb3JFYWNoKChwYXR0ZXJuOiBJZ25vcmVQYXR0ZXJuKSA9PiB7XG4gICAgaWYgKHBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGZvciAoY29uc3QgZXhpc3RpbmdQYXR0ZXJuIG9mIGlnbm9yZVBhdHRlcm5zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBleGlzdGluZ1BhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHAgJiZcbiAgICAgICAgICBleGlzdGluZ1BhdHRlcm4udG9TdHJpbmcoKSA9PT0gcGF0dGVybi50b1N0cmluZygpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWdub3JlUGF0dGVybnMuYWRkKHBhdHRlcm4pO1xuICAgIH1cbiAgICBpZ25vcmVQYXR0ZXJucy5hZGQocGF0dGVybik7XG4gIH0pO1xuICBpZiAoaWdub3JlUGF0dGVybnMuc2l6ZSA9PT0gZXhpc3RpbmdTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFdlIG5lZWQgdG8gcmVjaGVjayBhbGwgb2YgdGhlIGV4aXN0aW5nIGxvZ3MuXG4gIC8vIFRoaXMgYWxsb3dzIGFkZGluZyBhbiBpZ25vcmUgcGF0dGVybiBhbnl3aGVyZSBpbiB0aGUgY29kZWJhc2UuXG4gIC8vIFdpdGhvdXQgdGhpcywgaWYgeW91IGlnbm9yZSBhIHBhdHRlcm4gYWZ0ZXIgdGhlIGEgbG9nIGlzIGNyZWF0ZWQsXG4gIC8vIHRoZW4gd2Ugd291bGQga2VlcCBzaG93aW5nIHRoZSBsb2cuXG4gIGxvZ3MgPSBuZXcgU2V0KFxuICAgIEFycmF5LmZyb20obG9ncykuZmlsdGVyKGxvZyA9PiAhaXNNZXNzYWdlSWdub3JlZChsb2cubWVzc2FnZS5jb250ZW50KSksXG4gICk7XG4gIGhhbmRsZVVwZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgaWYgKHZhbHVlID09PSBfaXNEaXNhYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBfaXNEaXNhYmxlZCA9IHZhbHVlO1xuICBoYW5kbGVVcGRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNEaXNhYmxlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyKTogU3Vic2NyaXB0aW9uIHtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge29ic2VydmVyfTtcbiAgb2JzZXJ2ZXJzLmFkZChzdWJzY3JpcHRpb24pO1xuXG4gIG9ic2VydmVyKGdldE5leHRTdGF0ZSgpKTtcblxuICByZXR1cm4ge1xuICAgIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgICAgb2JzZXJ2ZXJzLmRlbGV0ZShzdWJzY3JpcHRpb24pO1xuICAgIH0sXG4gIH07XG59XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3x8fT47XG50eXBlIFN0YXRlID0gJFJlYWRPbmx5PHt8XG4gIGxvZ3M6IExvZ0JveExvZ3MsXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW4sXG4gIGhhc0Vycm9yOiBib29sZWFuLFxuICBzZWxlY3RlZExvZ0luZGV4OiBudW1iZXIsXG58fT47XG5cbnR5cGUgU3Vic2NyaWJlZENvbXBvbmVudCA9IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFxuICAkUmVhZE9ubHk8e3xcbiAgICBsb2dzOiAkUmVhZE9ubHlBcnJheTxMb2dCb3hMb2c+LFxuICAgIGlzRGlzYWJsZWQ6IGJvb2xlYW4sXG4gICAgc2VsZWN0ZWRMb2dJbmRleDogbnVtYmVyLFxuICB8fT4sXG4+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFN1YnNjcmlwdGlvbihcbiAgV3JhcHBlZENvbXBvbmVudDogU3Vic2NyaWJlZENvbXBvbmVudCxcbik6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PHt8fH0+IHtcbiAgY2xhc3MgTG9nQm94U3RhdGVTdWJzY3JpcHRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpOiB7aGFzRXJyb3I6IGJvb2xlYW59IHtcbiAgICAgIHJldHVybiB7aGFzRXJyb3I6IHRydWV9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZENhdGNoKGVycjogRXJyb3IsIGVycm9ySW5mbzoge2NvbXBvbmVudFN0YWNrOiBzdHJpbmcsIC4uLn0pIHtcbiAgICAgIC8qICRGbG93Rml4TWVbY2xhc3Mtb2JqZWN0LXN1YnR5cGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvclxuICAgICAgICogdGhpcyBwYXJhbWV0ZXJzICovXG4gICAgICByZXBvcnRMb2dCb3hFcnJvcihlcnIsIGVycm9ySW5mby5jb21wb25lbnRTdGFjayk7XG4gICAgfVxuXG4gICAgX3N1YnNjcmlwdGlvbjogP1N1YnNjcmlwdGlvbjtcblxuICAgIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICAgIGxvZ3M6IG5ldyBTZXQoKSxcbiAgICAgIGlzRGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgaGFzRXJyb3I6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWRMb2dJbmRleDogLTEsXG4gICAgfTtcblxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSB7XG4gICAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBjb21wb25lbnQgZmFpbGVkIHRvIHJlbmRlciwgaW4gd2hpY2ggY2FzZSB3ZSBkZWxlZ2F0ZSB0byB0aGUgbmF0aXZlIHJlZGJveC5cbiAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbnliYWNrIGZhbGxiYWNrIFVJIGhlcmUsIGJlY2F1c2UgdGhlIGVycm9yIG1heSBiZSB3aXRoIDxWaWV3PiBvciA8VGV4dD4uXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgIGxvZ3M9e0FycmF5LmZyb20odGhpcy5zdGF0ZS5sb2dzKX1cbiAgICAgICAgICBpc0Rpc2FibGVkPXt0aGlzLnN0YXRlLmlzRGlzYWJsZWR9XG4gICAgICAgICAgc2VsZWN0ZWRMb2dJbmRleD17dGhpcy5zdGF0ZS5zZWxlY3RlZExvZ0luZGV4fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG9ic2VydmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb24gIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlRGlzbWlzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgIC8vIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlcyB3aGVuIHRoZSBsb2cgaXMgZGlzbWlzc2VkIGFuZCBpdFxuICAgICAgLy8gd2FzIGVpdGhlciB0aGUgbGFzdCBsb2csIG9yIHdoZW4gdGhlIGN1cnJlbnQgaW5kZXhcbiAgICAgIC8vIGlzIG5vdyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGxvZyBhcnJheS5cbiAgICAgIGNvbnN0IHtzZWxlY3RlZExvZ0luZGV4LCBsb2dzOiBzdGF0ZUxvZ3N9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IGxvZ3NBcnJheSA9IEFycmF5LmZyb20oc3RhdGVMb2dzKTtcbiAgICAgIGlmIChzZWxlY3RlZExvZ0luZGV4ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxvZ3NBcnJheS5sZW5ndGggLSAxIDw9IDApIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZExvZygtMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRMb2dJbmRleCA+PSBsb2dzQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHNldFNlbGVjdGVkTG9nKHNlbGVjdGVkTG9nSW5kZXggLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpc21pc3MobG9nc0FycmF5W3NlbGVjdGVkTG9nSW5kZXhdKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX2hhbmRsZU1pbmltaXplID0gKCk6IHZvaWQgPT4ge1xuICAgICAgc2V0U2VsZWN0ZWRMb2coLTEpO1xuICAgIH07XG5cbiAgICBfaGFuZGxlU2V0U2VsZWN0ZWRMb2cgPSAoaW5kZXg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgc2V0U2VsZWN0ZWRMb2coaW5kZXgpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gTG9nQm94U3RhdGVTdWJzY3JpcHRpb247XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVMb2dCb3gnO1xuaW1wb3J0IE5hdGl2ZUxvZ0JveCBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUxvZ0JveCc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVMb2dCb3g7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK3Nob3c6ICgpID0+IHZvaWQ7XG4gICtoaWRlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ0xvZ0JveCcpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1N0YWNrfSBmcm9tICcuL0xvZ0JveFN5bWJvbGljYXRpb24nO1xuaW1wb3J0IHR5cGUge1xuICBDYXRlZ29yeSxcbiAgQ29kZUZyYW1lLFxuICBDb21wb25lbnRTdGFjayxcbiAgTWVzc2FnZSxcbn0gZnJvbSAnLi9wYXJzZUxvZ0JveExvZyc7XG5cbmltcG9ydCAqIGFzIExvZ0JveFN5bWJvbGljYXRpb24gZnJvbSAnLi9Mb2dCb3hTeW1ib2xpY2F0aW9uJztcblxudHlwZSBTeW1ib2xpY2F0aW9uU3RhdHVzID0gJ05PTkUnIHwgJ1BFTkRJTkcnIHwgJ0NPTVBMRVRFJyB8ICdGQUlMRUQnO1xuXG5leHBvcnQgdHlwZSBMb2dMZXZlbCA9ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnIHwgJ3N5bnRheCc7XG5cbmV4cG9ydCB0eXBlIExvZ0JveExvZ0RhdGEgPSAkUmVhZE9ubHk8e3xcbiAgbGV2ZWw6IExvZ0xldmVsLFxuICB0eXBlPzogP3N0cmluZyxcbiAgbWVzc2FnZTogTWVzc2FnZSxcbiAgc3RhY2s6IFN0YWNrLFxuICBjYXRlZ29yeTogc3RyaW5nLFxuICBjb21wb25lbnRTdGFjazogQ29tcG9uZW50U3RhY2ssXG4gIGNvZGVGcmFtZT86ID9Db2RlRnJhbWUsXG4gIGlzQ29tcG9uZW50RXJyb3I6IGJvb2xlYW4sXG4gIGV4dHJhRGF0YT86IG1peGVkLFxufH0+O1xuXG5jbGFzcyBMb2dCb3hMb2cge1xuICBtZXNzYWdlOiBNZXNzYWdlO1xuICB0eXBlOiA/c3RyaW5nO1xuICBjYXRlZ29yeTogQ2F0ZWdvcnk7XG4gIGNvbXBvbmVudFN0YWNrOiBDb21wb25lbnRTdGFjaztcbiAgc3RhY2s6IFN0YWNrO1xuICBjb3VudDogbnVtYmVyO1xuICBsZXZlbDogTG9nTGV2ZWw7XG4gIGNvZGVGcmFtZTogP0NvZGVGcmFtZTtcbiAgaXNDb21wb25lbnRFcnJvcjogYm9vbGVhbjtcbiAgZXh0cmFEYXRhOiBtaXhlZCB8IHZvaWQ7XG4gIHN5bWJvbGljYXRlZDpcbiAgICB8ICRSZWFkT25seTx7fGVycm9yOiBudWxsLCBzdGFjazogbnVsbCwgc3RhdHVzOiAnTk9ORSd8fT5cbiAgICB8ICRSZWFkT25seTx7fGVycm9yOiBudWxsLCBzdGFjazogbnVsbCwgc3RhdHVzOiAnUEVORElORyd8fT5cbiAgICB8ICRSZWFkT25seTx7fGVycm9yOiBudWxsLCBzdGFjazogU3RhY2ssIHN0YXR1czogJ0NPTVBMRVRFJ3x9PlxuICAgIHwgJFJlYWRPbmx5PHt8ZXJyb3I6IEVycm9yLCBzdGFjazogbnVsbCwgc3RhdHVzOiAnRkFJTEVEJ3x9PiA9IHtcbiAgICBlcnJvcjogbnVsbCxcbiAgICBzdGFjazogbnVsbCxcbiAgICBzdGF0dXM6ICdOT05FJyxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBMb2dCb3hMb2dEYXRhKSB7XG4gICAgdGhpcy5sZXZlbCA9IGRhdGEubGV2ZWw7XG4gICAgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgIHRoaXMubWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gZGF0YS5zdGFjaztcbiAgICB0aGlzLmNhdGVnb3J5ID0gZGF0YS5jYXRlZ29yeTtcbiAgICB0aGlzLmNvbXBvbmVudFN0YWNrID0gZGF0YS5jb21wb25lbnRTdGFjaztcbiAgICB0aGlzLmNvZGVGcmFtZSA9IGRhdGEuY29kZUZyYW1lO1xuICAgIHRoaXMuaXNDb21wb25lbnRFcnJvciA9IGRhdGEuaXNDb21wb25lbnRFcnJvcjtcbiAgICB0aGlzLmV4dHJhRGF0YSA9IGRhdGEuZXh0cmFEYXRhO1xuICAgIHRoaXMuY291bnQgPSAxO1xuICB9XG5cbiAgaW5jcmVtZW50Q291bnQoKTogdm9pZCB7XG4gICAgdGhpcy5jb3VudCArPSAxO1xuICB9XG5cbiAgZ2V0QXZhaWxhYmxlU3RhY2soKTogU3RhY2sge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbGljYXRlZC5zdGF0dXMgPT09ICdDT01QTEVURSdcbiAgICAgID8gdGhpcy5zeW1ib2xpY2F0ZWQuc3RhY2tcbiAgICAgIDogdGhpcy5zdGFjaztcbiAgfVxuXG4gIHJldHJ5U3ltYm9saWNhdGUoY2FsbGJhY2s/OiAoc3RhdHVzOiBTeW1ib2xpY2F0aW9uU3RhdHVzKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ltYm9saWNhdGVkLnN0YXR1cyAhPT0gJ0NPTVBMRVRFJykge1xuICAgICAgTG9nQm94U3ltYm9saWNhdGlvbi5kZWxldGVTdGFjayh0aGlzLnN0YWNrKTtcbiAgICAgIHRoaXMuaGFuZGxlU3ltYm9saWNhdGUoY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIHN5bWJvbGljYXRlKGNhbGxiYWNrPzogKHN0YXR1czogU3ltYm9saWNhdGlvblN0YXR1cykgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN5bWJvbGljYXRlZC5zdGF0dXMgPT09ICdOT05FJykge1xuICAgICAgdGhpcy5oYW5kbGVTeW1ib2xpY2F0ZShjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU3ltYm9saWNhdGUoY2FsbGJhY2s/OiAoc3RhdHVzOiBTeW1ib2xpY2F0aW9uU3RhdHVzKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ltYm9saWNhdGVkLnN0YXR1cyAhPT0gJ1BFTkRJTkcnKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXR1cyhudWxsLCBudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gICAgICBMb2dCb3hTeW1ib2xpY2F0aW9uLnN5bWJvbGljYXRlKHRoaXMuc3RhY2ssIHRoaXMuZXh0cmFEYXRhKS50aGVuKFxuICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXR1cyhudWxsLCBkYXRhPy5zdGFjaywgZGF0YT8uY29kZUZyYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXR1cyhlcnJvciwgbnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdGF0dXMoXG4gICAgZXJyb3I6ID9FcnJvcixcbiAgICBzdGFjazogP1N0YWNrLFxuICAgIGNvZGVGcmFtZTogP0NvZGVGcmFtZSxcbiAgICBjYWxsYmFjaz86IChzdGF0dXM6IFN5bWJvbGljYXRpb25TdGF0dXMpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RTdGF0dXMgPSB0aGlzLnN5bWJvbGljYXRlZC5zdGF0dXM7XG4gICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgIHRoaXMuc3ltYm9saWNhdGVkID0ge1xuICAgICAgICBlcnJvcixcbiAgICAgICAgc3RhY2s6IG51bGwsXG4gICAgICAgIHN0YXR1czogJ0ZBSUxFRCcsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoc3RhY2sgIT0gbnVsbCkge1xuICAgICAgaWYgKGNvZGVGcmFtZSkge1xuICAgICAgICB0aGlzLmNvZGVGcmFtZSA9IGNvZGVGcmFtZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zeW1ib2xpY2F0ZWQgPSB7XG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgc3RhdHVzOiAnQ09NUExFVEUnLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zeW1ib2xpY2F0ZWQgPSB7XG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGFjazogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnUEVORElORycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayAmJiBsYXN0U3RhdHVzICE9PSB0aGlzLnN5bWJvbGljYXRlZC5zdGF0dXMpIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuc3ltYm9saWNhdGVkLnN0YXR1cyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ0JveExvZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7U3ltYm9saWNhdGVkU3RhY2tUcmFjZX0gZnJvbSAnLi4vLi4vQ29yZS9EZXZ0b29scy9zeW1ib2xpY2F0ZVN0YWNrVHJhY2UnO1xuaW1wb3J0IHR5cGUge1N0YWNrRnJhbWV9IGZyb20gJy4uLy4uL0NvcmUvTmF0aXZlRXhjZXB0aW9uc01hbmFnZXInO1xuXG5pbXBvcnQgc3ltYm9saWNhdGVTdGFja1RyYWNlIGZyb20gJy4uLy4uL0NvcmUvRGV2dG9vbHMvc3ltYm9saWNhdGVTdGFja1RyYWNlJztcblxuZXhwb3J0IHR5cGUgU3RhY2sgPSBBcnJheTxTdGFja0ZyYW1lPjtcblxuY29uc3QgY2FjaGU6IE1hcDxTdGFjaywgUHJvbWlzZTxTeW1ib2xpY2F0ZWRTdGFja1RyYWNlPj4gPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogU2FuaXRpemUgYmVjYXVzZSBzb21ldGltZXMsIGBzeW1ib2xpY2F0ZVN0YWNrVHJhY2VgIGdpdmVzIHVzIGludmFsaWQgdmFsdWVzLlxuICovXG5jb25zdCBzYW5pdGl6ZSA9ICh7XG4gIHN0YWNrOiBtYXliZVN0YWNrLFxuICBjb2RlRnJhbWUsXG59OiBTeW1ib2xpY2F0ZWRTdGFja1RyYWNlKTogU3ltYm9saWNhdGVkU3RhY2tUcmFjZSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShtYXliZVN0YWNrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgc3RhY2sgdG8gYmUgYW4gYXJyYXkuJyk7XG4gIH1cbiAgY29uc3Qgc3RhY2s6IEFycmF5PFN0YWNrRnJhbWU+ID0gW107XG4gIGZvciAoY29uc3QgbWF5YmVGcmFtZSBvZiBtYXliZVN0YWNrKSB7XG4gICAgbGV0IGNvbGxhcHNlID0gZmFsc2U7XG4gICAgaWYgKCdjb2xsYXBzZScgaW4gbWF5YmVGcmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiBtYXliZUZyYW1lLmNvbGxhcHNlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBzdGFjayBmcmFtZSBgY29sbGFwc2VgIHRvIGJlIGEgYm9vbGVhbi4nKTtcbiAgICAgIH1cbiAgICAgIGNvbGxhcHNlID0gbWF5YmVGcmFtZS5jb2xsYXBzZTtcbiAgICB9XG4gICAgc3RhY2sucHVzaCh7XG4gICAgICBjb2x1bW46IG1heWJlRnJhbWUuY29sdW1uLFxuICAgICAgZmlsZTogbWF5YmVGcmFtZS5maWxlLFxuICAgICAgbGluZU51bWJlcjogbWF5YmVGcmFtZS5saW5lTnVtYmVyLFxuICAgICAgbWV0aG9kTmFtZTogbWF5YmVGcmFtZS5tZXRob2ROYW1lLFxuICAgICAgY29sbGFwc2UsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtzdGFjaywgY29kZUZyYW1lfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVTdGFjayhzdGFjazogU3RhY2spOiB2b2lkIHtcbiAgY2FjaGUuZGVsZXRlKHN0YWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN5bWJvbGljYXRlKFxuICBzdGFjazogU3RhY2ssXG4gIGV4dHJhRGF0YT86IG1peGVkLFxuKTogUHJvbWlzZTxTeW1ib2xpY2F0ZWRTdGFja1RyYWNlPiB7XG4gIGxldCBwcm9taXNlID0gY2FjaGUuZ2V0KHN0YWNrKTtcbiAgaWYgKHByb21pc2UgPT0gbnVsbCkge1xuICAgIHByb21pc2UgPSBzeW1ib2xpY2F0ZVN0YWNrVHJhY2Uoc3RhY2ssIGV4dHJhRGF0YSkudGhlbihzYW5pdGl6ZSk7XG4gICAgY2FjaGUuc2V0KHN0YWNrLCBwcm9taXNlKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1N0YWNrRnJhbWV9IGZyb20gJy4uL05hdGl2ZUV4Y2VwdGlvbnNNYW5hZ2VyJztcblxuY29uc3QgZ2V0RGV2U2VydmVyID0gcmVxdWlyZSgnLi9nZXREZXZTZXJ2ZXInKTtcblxuZXhwb3J0IHR5cGUgQ29kZUZyYW1lID0gJFJlYWRPbmx5PHtcbiAgY29udGVudDogc3RyaW5nLFxuICBsb2NhdGlvbjogP3tcbiAgICByb3c6IG51bWJlcixcbiAgICBjb2x1bW46IG51bWJlcixcbiAgICAuLi5cbiAgfSxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbn0+O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xpY2F0ZWRTdGFja1RyYWNlID0gJFJlYWRPbmx5PHtcbiAgc3RhY2s6IEFycmF5PFN0YWNrRnJhbWU+LFxuICBjb2RlRnJhbWU6ID9Db2RlRnJhbWUsXG59PjtcblxuYXN5bmMgZnVuY3Rpb24gc3ltYm9saWNhdGVTdGFja1RyYWNlKFxuICBzdGFjazogQXJyYXk8U3RhY2tGcmFtZT4sXG4gIGV4dHJhRGF0YT86IG1peGVkLFxuKTogUHJvbWlzZTxTeW1ib2xpY2F0ZWRTdGFja1RyYWNlPiB7XG4gIGNvbnN0IGRldlNlcnZlciA9IGdldERldlNlcnZlcigpO1xuICBpZiAoIWRldlNlcnZlci5idW5kbGVMb2FkZWRGcm9tU2VydmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCdW5kbGUgd2FzIG5vdCBsb2FkZWQgZnJvbSBNZXRyby4nKTtcbiAgfVxuXG4gIC8vIExhenktbG9hZCBgZmV0Y2hgIHVudGlsIHRoZSBmaXJzdCBzeW1ib2xpY2F0aW9uIGNhbGwgdG8gYXZvaWQgY2lyY3VsYXIgcmVxdWlyZXMuXG4gIGNvbnN0IGZldGNoID0gZ2xvYmFsLmZldGNoID8/IHJlcXVpcmUoJy4uLy4uL05ldHdvcmsvZmV0Y2gnKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChkZXZTZXJ2ZXIudXJsICsgJ3N5bWJvbGljYXRlJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtzdGFjaywgZXh0cmFEYXRhfSksXG4gIH0pO1xuICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN5bWJvbGljYXRlU3RhY2tUcmFjZTtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgTmF0aXZlU291cmNlQ29kZSBmcm9tICcuLi8uLi9OYXRpdmVNb2R1bGVzL3NwZWNzL05hdGl2ZVNvdXJjZUNvZGUnO1xuXG5sZXQgX2NhY2hlZERldlNlcnZlclVSTDogP3N0cmluZztcbmxldCBfY2FjaGVkRnVsbEJ1bmRsZVVSTDogP3N0cmluZztcbmNvbnN0IEZBTExCQUNLID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MS8nO1xuXG50eXBlIERldlNlcnZlckluZm8gPSB7XG4gIHVybDogc3RyaW5nLFxuICBmdWxsQnVuZGxlVXJsOiA/c3RyaW5nLFxuICBidW5kbGVMb2FkZWRGcm9tU2VydmVyOiBib29sZWFuLFxuICAuLi5cbn07XG5cbi8qKlxuICogTWFueSBSTiBkZXZlbG9wbWVudCB0b29scyByZWx5IG9uIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIgKHBhY2thZ2VyKSBydW5uaW5nXG4gKiBAcmV0dXJuIFVSTCB0byBwYWNrYWdlciB3aXRoIHRyYWlsaW5nIHNsYXNoXG4gKi9cbmZ1bmN0aW9uIGdldERldlNlcnZlcigpOiBEZXZTZXJ2ZXJJbmZvIHtcbiAgaWYgKF9jYWNoZWREZXZTZXJ2ZXJVUkwgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9IE5hdGl2ZVNvdXJjZUNvZGUuZ2V0Q29uc3RhbnRzKCkuc2NyaXB0VVJMO1xuICAgIGNvbnN0IG1hdGNoID0gc2NyaXB0VXJsLm1hdGNoKC9eaHR0cHM/OlxcL1xcLy4qP1xcLy8pO1xuICAgIF9jYWNoZWREZXZTZXJ2ZXJVUkwgPSBtYXRjaCA/IG1hdGNoWzBdIDogbnVsbDtcbiAgICBfY2FjaGVkRnVsbEJ1bmRsZVVSTCA9IG1hdGNoID8gc2NyaXB0VXJsIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJsOiBfY2FjaGVkRGV2U2VydmVyVVJMID8/IEZBTExCQUNLLFxuICAgIGZ1bGxCdW5kbGVVcmw6IF9jYWNoZWRGdWxsQnVuZGxlVVJMLFxuICAgIGJ1bmRsZUxvYWRlZEZyb21TZXJ2ZXI6IF9jYWNoZWREZXZTZXJ2ZXJVUkwgIT09IG51bGwsXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RGV2U2VydmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlU291cmNlQ29kZSc7XG5pbXBvcnQgTmF0aXZlU291cmNlQ29kZSBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVNvdXJjZUNvZGUnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlU291cmNlQ29kZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZUNvbnN0YW50cyA9IHt8XG4gIHNjcmlwdFVSTDogc3RyaW5nLFxufH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK2dldENvbnN0YW50czogKCkgPT4gU291cmNlQ29kZUNvbnN0YW50cztcbn1cblxuY29uc3QgTmF0aXZlTW9kdWxlID0gVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXRFbmZvcmNpbmc8U3BlYz4oJ1NvdXJjZUNvZGUnKTtcbmxldCBjb25zdGFudHMgPSBudWxsO1xuXG5jb25zdCBOYXRpdmVTb3VyY2VDb2RlID0ge1xuICBnZXRDb25zdGFudHMoKTogU291cmNlQ29kZUNvbnN0YW50cyB7XG4gICAgaWYgKGNvbnN0YW50cyA9PSBudWxsKSB7XG4gICAgICBjb25zdGFudHMgPSBOYXRpdmVNb2R1bGUuZ2V0Q29uc3RhbnRzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0YW50cztcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVNvdXJjZUNvZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuLyogZ2xvYmFscyBIZWFkZXJzLCBSZXF1ZXN0LCBSZXNwb25zZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8vIHNpZGUtZWZmZWN0ZnVsIHJlcXVpcmUoKSB0byBwdXQgZmV0Y2gsXG4vLyBIZWFkZXJzLCBSZXF1ZXN0LCBSZXNwb25zZSBpbiBnbG9iYWwgc2NvcGVcbnJlcXVpcmUoJ3doYXR3Zy1mZXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtmZXRjaCwgSGVhZGVycywgUmVxdWVzdCwgUmVzcG9uc2V9O1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLldIQVRXR0ZldGNoID0ge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6XG4gICAgICAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJlxuICAgICAgJ0Jsb2InIGluIHNlbGYgJiZcbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXcgQmxvYigpO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgfTtcblxuICBmdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdO1xuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG4gIH1cblxuICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9O1xuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXTtcbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHk7XG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcik7XG4gICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keTtcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHM7XG4gICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTtcbiAgICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsO1xuICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7XG4gICAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJztcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKTtcbiAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7XG4gICAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbDtcbiAgICB0aGlzLnJlZmVycmVyID0gbnVsbDtcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSk7XG4gIH1cblxuICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBib2R5XG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoJyYnKVxuICAgICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKTtcbiAgICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKTtcbiAgICBwcmVQcm9jZXNzZWRIZWFkZXJzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKCk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKCk7XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnO1xuICAgIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzO1xuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDA7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snO1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJztcbiAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdCk7XG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKTtcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxuICB9O1xuXG4gIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSk7XG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcic7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH07XG5cbiAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdO1xuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH07XG5cbiAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBzZWxmLkRPTUV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrO1xuICAgIH07XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGV4cG9ydHMuRE9NRXhjZXB0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgICB4aHIuYWJvcnQoKTtcbiAgICAgIH1cblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKTtcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocik7XG5cbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdCk7XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoLnBvbHlmaWxsID0gdHJ1ZTtcblxuICBpZiAoIXNlbGYuZmV0Y2gpIHtcbiAgICBzZWxmLmZldGNoID0gZmV0Y2g7XG4gICAgc2VsZi5IZWFkZXJzID0gSGVhZGVycztcbiAgICBzZWxmLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICAgIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgfVxuXG4gIGV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG4gIGV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIGV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgZXhwb3J0cy5mZXRjaCA9IGZldGNoO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0V4Y2VwdGlvbkRhdGF9IGZyb20gJy4uLy4uL0NvcmUvTmF0aXZlRXhjZXB0aW9uc01hbmFnZXInO1xuaW1wb3J0IHR5cGUge0xvZ0JveExvZ0RhdGF9IGZyb20gJy4vTG9nQm94TG9nJztcblxuaW1wb3J0IHBhcnNlRXJyb3JTdGFjayBmcm9tICcuLi8uLi9Db3JlL0RldnRvb2xzL3BhcnNlRXJyb3JTdGFjayc7XG5pbXBvcnQgVVRGU2VxdWVuY2UgZnJvbSAnLi4vLi4vVVRGU2VxdWVuY2UnO1xuaW1wb3J0IHN0cmluZ2lmeVNhZmUgZnJvbSAnLi4vLi4vVXRpbGl0aWVzL3N0cmluZ2lmeVNhZmUnO1xuaW1wb3J0IGFuc2lSZWdleCBmcm9tICdhbnNpLXJlZ2V4JztcblxuY29uc3QgQU5TSV9SRUdFWCA9IGFuc2lSZWdleCgpLnNvdXJjZTtcblxuY29uc3QgQkFCRUxfVFJBTlNGT1JNX0VSUk9SX0ZPUk1BVCA9XG4gIC9eKD86VHJhbnNmb3JtRXJyb3IgKT8oPzpTeW50YXhFcnJvcjogfFJlZmVyZW5jZUVycm9yOiApKC4qKTogKC4qKSBcXCgoXFxkKyk6KFxcZCspXFwpXFxuXFxuKFtcXHNcXFNdKykvO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmFiZWwvYmFiZWwvYmxvYi8zM2RiYjg1ZTllOWZlMzY5MTUyNzMwODBlY2M0MmFlZTYyZWQwYWRlL3BhY2thZ2VzL2JhYmVsLWNvZGUtZnJhbWUvc3JjL2luZGV4LnRzI0wxODMtTDE4NFxuY29uc3QgQkFCRUxfQ09ERV9GUkFNRV9NQVJLRVJfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIFtcbiAgICAvLyBCZWdpbm5pbmcgb2YgYSBsaW5lIChwZXIgJ20nIGZsYWcpXG4gICAgJ14nLFxuICAgIC8vIE9wdGlvbmFsIEFOU0kgZXNjYXBlcyBmb3IgY29sb3JzXG4gICAgYCg/OiR7QU5TSV9SRUdFWH0pKmAsXG4gICAgLy8gTWFya2VyXG4gICAgJz4nLFxuICAgIC8vIE9wdGlvbmFsIEFOU0kgZXNjYXBlcyBmb3IgY29sb3JzXG4gICAgYCg/OiR7QU5TSV9SRUdFWH0pKmAsXG4gICAgLy8gTGVmdCBwYWRkaW5nIGZvciBsaW5lIG51bWJlclxuICAgICcgKycsXG4gICAgLy8gTGluZSBudW1iZXJcbiAgICAnWzAtOV0rJyxcbiAgICAvLyBHdXR0ZXJcbiAgICAnIFxcXFx8JyxcbiAgXS5qb2luKCcnKSxcbiAgJ20nLFxuKTtcblxuY29uc3QgQkFCRUxfQ09ERV9GUkFNRV9FUlJPUl9GT1JNQVQgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAvXig/OlRyYW5zZm9ybUVycm9yICk/KD86LiopOj8gKD86Lio/KShcXC8uKik6IChbXFxzXFxTXSs/KVxcbihbID5dezJ9W1xcZFxcc10rIFxcfFtcXHNcXFNdK3xcXHV7MDAxYn1bXFxzXFxTXSspL3U7XG5cbmNvbnN0IE1FVFJPX0VSUk9SX0ZPUk1BVCA9XG4gIC9eKD86SW50ZXJuYWxFcnJvciBNZXRybyBoYXMgZW5jb3VudGVyZWQgYW4gZXJyb3I6KSAoLiopOiAoLiopIFxcKChcXGQrKTooXFxkKylcXClcXG5cXG4oW1xcc1xcU10rKS91O1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZEV4Y2VwdGlvbkRhdGEgPSBFeGNlcHRpb25EYXRhICYge1xuICBpc0NvbXBvbmVudEVycm9yOiBib29sZWFuLFxuICAuLi5cbn07XG5leHBvcnQgdHlwZSBDYXRlZ29yeSA9IHN0cmluZztcbmV4cG9ydCB0eXBlIENvZGVGcmFtZSA9ICRSZWFkT25seTx7fFxuICBjb250ZW50OiBzdHJpbmcsXG4gIGxvY2F0aW9uOiA/e1xuICAgIHJvdzogbnVtYmVyLFxuICAgIGNvbHVtbjogbnVtYmVyLFxuICAgIC4uLlxuICB9LFxuICBmaWxlTmFtZTogc3RyaW5nLFxuXG4gIC8vIFRPRE86IFdoZW4gUmVhY3Qgc3dpdGNoZWQgdG8gdXNpbmcgY2FsbCBzdGFjayBmcmFtZXMsXG4gIC8vIHdlIGdhaW5lZCB0aGUgYWJpbGl0eSB0byB1c2UgdGhlIGNvbGxhcHNlIGZsYWcsIGJ1dFxuICAvLyBpdCBpcyBub3QgaW50ZWdyYXRlZCBpbnRvIHRoZSBMb2dCb3ggVUkuXG4gIGNvbGxhcHNlPzogYm9vbGVhbixcbnx9PjtcbmV4cG9ydCB0eXBlIE1lc3NhZ2UgPSAkUmVhZE9ubHk8e3xcbiAgY29udGVudDogc3RyaW5nLFxuICBzdWJzdGl0dXRpb25zOiAkUmVhZE9ubHlBcnJheTxcbiAgICAkUmVhZE9ubHk8e3xcbiAgICAgIGxlbmd0aDogbnVtYmVyLFxuICAgICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgfH0+LFxuICA+LFxufH0+O1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnRTdGFjayA9ICRSZWFkT25seUFycmF5PENvZGVGcmFtZT47XG5cbmNvbnN0IFNVQlNUSVRVVElPTiA9IFVURlNlcXVlbmNlLkJPTSArICclcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUludGVycG9sYXRpb24oYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+KTogJFJlYWRPbmx5PHt8XG4gIGNhdGVnb3J5OiBDYXRlZ29yeSxcbiAgbWVzc2FnZTogTWVzc2FnZSxcbnx9PiB7XG4gIGNvbnN0IGNhdGVnb3J5UGFydHMgPSBbXTtcbiAgY29uc3QgY29udGVudFBhcnRzID0gW107XG4gIGNvbnN0IHN1YnN0aXR1dGlvbk9mZnNldHMgPSBbXTtcblxuICBjb25zdCByZW1haW5pbmcgPSBbLi4uYXJnc107XG4gIGlmICh0eXBlb2YgcmVtYWluaW5nWzBdID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGZvcm1hdFN0cmluZyA9IFN0cmluZyhyZW1haW5pbmcuc2hpZnQoKSk7XG4gICAgY29uc3QgZm9ybWF0U3RyaW5nUGFydHMgPSBmb3JtYXRTdHJpbmcuc3BsaXQoJyVzJyk7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uQ291bnQgPSBmb3JtYXRTdHJpbmdQYXJ0cy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSByZW1haW5pbmcuc3BsaWNlKDAsIHN1YnN0aXR1dGlvbkNvdW50KTtcblxuICAgIGxldCBjYXRlZ29yeVN0cmluZyA9ICcnO1xuICAgIGxldCBjb250ZW50U3RyaW5nID0gJyc7XG5cbiAgICBsZXQgc3Vic3RpdHV0aW9uSW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZm9ybWF0U3RyaW5nUGFydCBvZiBmb3JtYXRTdHJpbmdQYXJ0cykge1xuICAgICAgY2F0ZWdvcnlTdHJpbmcgKz0gZm9ybWF0U3RyaW5nUGFydDtcbiAgICAgIGNvbnRlbnRTdHJpbmcgKz0gZm9ybWF0U3RyaW5nUGFydDtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbkluZGV4IDwgc3Vic3RpdHV0aW9uQ291bnQpIHtcbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbkluZGV4IDwgc3Vic3RpdHV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBEb24ndCBzdHJpbmdpZnkgYSBzdHJpbmcgdHlwZS5cbiAgICAgICAgICAvLyBJdCBhZGRzIHF1b3RhdGlvbiBtYXJrIHdyYXBwZXJzIGFyb3VuZCB0aGUgc3RyaW5nLFxuICAgICAgICAgIC8vIHdoaWNoIGNhdXNlcyB0aGUgTG9nQm94IHRvIGxvb2sgb2RkLlxuICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9XG4gICAgICAgICAgICB0eXBlb2Ygc3Vic3RpdHV0aW9uc1tzdWJzdGl0dXRpb25JbmRleF0gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgID8gc3Vic3RpdHV0aW9uc1tzdWJzdGl0dXRpb25JbmRleF1cbiAgICAgICAgICAgICAgOiBzdHJpbmdpZnlTYWZlKHN1YnN0aXR1dGlvbnNbc3Vic3RpdHV0aW9uSW5kZXhdKTtcbiAgICAgICAgICBzdWJzdGl0dXRpb25PZmZzZXRzLnB1c2goe1xuICAgICAgICAgICAgbGVuZ3RoOiBzdWJzdGl0dXRpb24ubGVuZ3RoLFxuICAgICAgICAgICAgb2Zmc2V0OiBjb250ZW50U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhdGVnb3J5U3RyaW5nICs9IFNVQlNUSVRVVElPTjtcbiAgICAgICAgICBjb250ZW50U3RyaW5nICs9IHN1YnN0aXR1dGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWJzdGl0dXRpb25PZmZzZXRzLnB1c2goe1xuICAgICAgICAgICAgbGVuZ3RoOiAyLFxuICAgICAgICAgICAgb2Zmc2V0OiBjb250ZW50U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhdGVnb3J5U3RyaW5nICs9ICclcyc7XG4gICAgICAgICAgY29udGVudFN0cmluZyArPSAnJXMnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Vic3RpdHV0aW9uSW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXRlZ29yeVBhcnRzLnB1c2goY2F0ZWdvcnlTdHJpbmcpO1xuICAgIGNvbnRlbnRQYXJ0cy5wdXNoKGNvbnRlbnRTdHJpbmcpO1xuICB9XG5cbiAgY29uc3QgcmVtYWluaW5nQXJncyA9IHJlbWFpbmluZy5tYXAoYXJnID0+IHtcbiAgICAvLyBEb24ndCBzdHJpbmdpZnkgYSBzdHJpbmcgdHlwZS5cbiAgICAvLyBJdCBhZGRzIHF1b3RhdGlvbiBtYXJrIHdyYXBwZXJzIGFyb3VuZCB0aGUgc3RyaW5nLFxuICAgIC8vIHdoaWNoIGNhdXNlcyB0aGUgTG9nQm94IHRvIGxvb2sgb2RkLlxuICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyA/IGFyZyA6IHN0cmluZ2lmeVNhZmUoYXJnKTtcbiAgfSk7XG4gIGNhdGVnb3J5UGFydHMucHVzaCguLi5yZW1haW5pbmdBcmdzKTtcbiAgY29udGVudFBhcnRzLnB1c2goLi4ucmVtYWluaW5nQXJncyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXRlZ29yeTogY2F0ZWdvcnlQYXJ0cy5qb2luKCcgJyksXG4gICAgbWVzc2FnZToge1xuICAgICAgY29udGVudDogY29udGVudFBhcnRzLmpvaW4oJyAnKSxcbiAgICAgIHN1YnN0aXR1dGlvbnM6IHN1YnN0aXR1dGlvbk9mZnNldHMsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNDb21wb25lbnRTdGFjayhjb25zb2xlQXJndW1lbnQ6IHN0cmluZykge1xuICBjb25zdCBpc09sZENvbXBvbmVudFN0YWNrRm9ybWF0ID0gLyB7NH1pbi8udGVzdChjb25zb2xlQXJndW1lbnQpO1xuICBjb25zdCBpc05ld0NvbXBvbmVudFN0YWNrRm9ybWF0ID0gLyB7NH1hdC8udGVzdChjb25zb2xlQXJndW1lbnQpO1xuICBjb25zdCBpc05ld0pTQ0NvbXBvbmVudFN0YWNrRm9ybWF0ID0gL0AuKlxcbi8udGVzdChjb25zb2xlQXJndW1lbnQpO1xuXG4gIHJldHVybiAoXG4gICAgaXNPbGRDb21wb25lbnRTdGFja0Zvcm1hdCB8fFxuICAgIGlzTmV3Q29tcG9uZW50U3RhY2tGb3JtYXQgfHxcbiAgICBpc05ld0pTQ0NvbXBvbmVudFN0YWNrRm9ybWF0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbXBvbmVudFN0YWNrKG1lc3NhZ2U6IHN0cmluZyk6IENvbXBvbmVudFN0YWNrIHtcbiAgLy8gSW4gbmV3ZXIgdmVyc2lvbnMgb2YgUmVhY3QsIHRoZSBjb21wb25lbnQgc3RhY2sgaXMgZm9ybWF0dGVkIGFzIGEgY2FsbCBzdGFjayBmcmFtZS5cbiAgLy8gRmlyc3QgdHJ5IHRvIHBhcnNlIHRoZSBjb21wb25lbnQgc3RhY2sgYXMgYSBjYWxsIHN0YWNrIGZyYW1lLCBhbmQgaWYgdGhhdCBkb2Vzbid0XG4gIC8vIHdvcmsgdGhlbiB3ZSdsbCBmYWxsYmFjayB0byB0aGUgb2xkIGN1c3RvbSBjb21wb25lbnQgc3RhY2sgZm9ybWF0IHBhcnNpbmcuXG4gIGNvbnN0IHN0YWNrID0gcGFyc2VFcnJvclN0YWNrKG1lc3NhZ2UpO1xuICBpZiAoc3RhY2sgJiYgc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBzdGFjay5tYXAoZnJhbWUgPT4gKHtcbiAgICAgIGNvbnRlbnQ6IGZyYW1lLm1ldGhvZE5hbWUsXG4gICAgICBjb2xsYXBzZTogZnJhbWUuY29sbGFwc2UgfHwgZmFsc2UsXG4gICAgICBmaWxlTmFtZTogZnJhbWUuZmlsZSA9PSBudWxsID8gJ3Vua25vd24nIDogZnJhbWUuZmlsZSxcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGNvbHVtbjogZnJhbWUuY29sdW1uID09IG51bGwgPyAtMSA6IGZyYW1lLmNvbHVtbixcbiAgICAgICAgcm93OiBmcmFtZS5saW5lTnVtYmVyID09IG51bGwgPyAtMSA6IGZyYW1lLmxpbmVOdW1iZXIsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBtZXNzYWdlXG4gICAgLnNwbGl0KC9cXG4gezR9aW4gL2cpXG4gICAgLm1hcChzID0+IHtcbiAgICAgIGlmICghcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoID0gcy5tYXRjaCgvKC4qKSBcXChhdCAoLipcXC5qcyk6KFtcXGRdKylcXCkvKTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGxldCBbY29udGVudCwgZmlsZU5hbWUsIHJvd10gPSBtYXRjaC5zbGljZSgxKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGZpbGVOYW1lLFxuICAgICAgICBsb2NhdGlvbjoge2NvbHVtbjogLTEsIHJvdzogcGFyc2VJbnQocm93LCAxMCl9LFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxvZ0JveEV4Y2VwdGlvbihcbiAgZXJyb3I6IEV4dGVuZGVkRXhjZXB0aW9uRGF0YSxcbik6IExvZ0JveExvZ0RhdGEge1xuICBjb25zdCBtZXNzYWdlID1cbiAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgIT0gbnVsbCA/IGVycm9yLm9yaWdpbmFsTWVzc2FnZSA6ICdVbmtub3duJztcblxuICBjb25zdCBtZXRyb0ludGVybmFsRXJyb3IgPSBtZXNzYWdlLm1hdGNoKE1FVFJPX0VSUk9SX0ZPUk1BVCk7XG4gIGlmIChtZXRyb0ludGVybmFsRXJyb3IpIHtcbiAgICBjb25zdCBbY29udGVudCwgZmlsZU5hbWUsIHJvdywgY29sdW1uLCBjb2RlRnJhbWVdID1cbiAgICAgIG1ldHJvSW50ZXJuYWxFcnJvci5zbGljZSgxKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsZXZlbDogJ2ZhdGFsJyxcbiAgICAgIHR5cGU6ICdNZXRybyBFcnJvcicsXG4gICAgICBzdGFjazogW10sXG4gICAgICBpc0NvbXBvbmVudEVycm9yOiBmYWxzZSxcbiAgICAgIGNvbXBvbmVudFN0YWNrOiBbXSxcbiAgICAgIGNvZGVGcmFtZToge1xuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICByb3c6IHBhcnNlSW50KHJvdywgMTApLFxuICAgICAgICAgIGNvbHVtbjogcGFyc2VJbnQoY29sdW1uLCAxMCksXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnQ6IGNvZGVGcmFtZSxcbiAgICAgIH0sXG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHN1YnN0aXR1dGlvbnM6IFtdLFxuICAgICAgfSxcbiAgICAgIGNhdGVnb3J5OiBgJHtmaWxlTmFtZX0tJHtyb3d9LSR7Y29sdW1ufWAsXG4gICAgICBleHRyYURhdGE6IGVycm9yLmV4dHJhRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYmFiZWxUcmFuc2Zvcm1FcnJvciA9IG1lc3NhZ2UubWF0Y2goQkFCRUxfVFJBTlNGT1JNX0VSUk9SX0ZPUk1BVCk7XG4gIGlmIChiYWJlbFRyYW5zZm9ybUVycm9yKSB7XG4gICAgLy8gVHJhbnNmb3JtIGVycm9ycyBhcmUgdGhyb3duIGZyb20gaW5zaWRlIHRoZSBCYWJlbCB0cmFuc2Zvcm1lci5cbiAgICBjb25zdCBbZmlsZU5hbWUsIGNvbnRlbnQsIHJvdywgY29sdW1uLCBjb2RlRnJhbWVdID1cbiAgICAgIGJhYmVsVHJhbnNmb3JtRXJyb3Iuc2xpY2UoMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGV2ZWw6ICdzeW50YXgnLFxuICAgICAgc3RhY2s6IFtdLFxuICAgICAgaXNDb21wb25lbnRFcnJvcjogZmFsc2UsXG4gICAgICBjb21wb25lbnRTdGFjazogW10sXG4gICAgICBjb2RlRnJhbWU6IHtcbiAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgcm93OiBwYXJzZUludChyb3csIDEwKSxcbiAgICAgICAgICBjb2x1bW46IHBhcnNlSW50KGNvbHVtbiwgMTApLFxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50OiBjb2RlRnJhbWUsXG4gICAgICB9LFxuICAgICAgbWVzc2FnZToge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBzdWJzdGl0dXRpb25zOiBbXSxcbiAgICAgIH0sXG4gICAgICBjYXRlZ29yeTogYCR7ZmlsZU5hbWV9LSR7cm93fS0ke2NvbHVtbn1gLFxuICAgICAgZXh0cmFEYXRhOiBlcnJvci5leHRyYURhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFBlcmZvcm0gYSBjaGVhcCBtYXRjaCBmaXJzdCBiZWZvcmUgdHJ5aW5nIHRvIHBhcnNlIHRoZSBmdWxsIG1lc3NhZ2UsIHdoaWNoXG4gIC8vIGNhbiBnZXQgZXhwZW5zaXZlIGZvciBhcmJpdHJhcnkgaW5wdXQuXG4gIGlmIChCQUJFTF9DT0RFX0ZSQU1FX01BUktFUl9QQVRURVJOLnRlc3QobWVzc2FnZSkpIHtcbiAgICBjb25zdCBiYWJlbENvZGVGcmFtZUVycm9yID0gbWVzc2FnZS5tYXRjaChCQUJFTF9DT0RFX0ZSQU1FX0VSUk9SX0ZPUk1BVCk7XG5cbiAgICBpZiAoYmFiZWxDb2RlRnJhbWVFcnJvcikge1xuICAgICAgLy8gQ29kZWZyYW1lIGVycm9ycyBhcmUgdGhyb3duIGZyb20gYW55IHVzZSBvZiBidWlsZENvZGVGcmFtZUVycm9yLlxuICAgICAgY29uc3QgW2ZpbGVOYW1lLCBjb250ZW50LCBjb2RlRnJhbWVdID0gYmFiZWxDb2RlRnJhbWVFcnJvci5zbGljZSgxKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxldmVsOiAnc3ludGF4JyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICBpc0NvbXBvbmVudEVycm9yOiBmYWxzZSxcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IFtdLFxuICAgICAgICBjb2RlRnJhbWU6IHtcbiAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICBsb2NhdGlvbjogbnVsbCwgLy8gV2UgYXJlIG5vdCBnaXZlbiB0aGUgbG9jYXRpb24uXG4gICAgICAgICAgY29udGVudDogY29kZUZyYW1lLFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgY2F0ZWdvcnk6IGAke2ZpbGVOYW1lfS0kezF9LSR7MX1gLFxuICAgICAgICBleHRyYURhdGE6IGVycm9yLmV4dHJhRGF0YSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKG1lc3NhZ2UubWF0Y2goL15UcmFuc2Zvcm1FcnJvciAvKSkge1xuICAgIHJldHVybiB7XG4gICAgICBsZXZlbDogJ3N5bnRheCcsXG4gICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICBpc0NvbXBvbmVudEVycm9yOiBlcnJvci5pc0NvbXBvbmVudEVycm9yLFxuICAgICAgY29tcG9uZW50U3RhY2s6IFtdLFxuICAgICAgbWVzc2FnZToge1xuICAgICAgICBjb250ZW50OiBtZXNzYWdlLFxuICAgICAgICBzdWJzdGl0dXRpb25zOiBbXSxcbiAgICAgIH0sXG4gICAgICBjYXRlZ29yeTogbWVzc2FnZSxcbiAgICAgIGV4dHJhRGF0YTogZXJyb3IuZXh0cmFEYXRhLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21wb25lbnRTdGFjayA9IGVycm9yLmNvbXBvbmVudFN0YWNrO1xuICBpZiAoZXJyb3IuaXNGYXRhbCB8fCBlcnJvci5pc0NvbXBvbmVudEVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxldmVsOiAnZmF0YWwnLFxuICAgICAgc3RhY2s6IGVycm9yLnN0YWNrLFxuICAgICAgaXNDb21wb25lbnRFcnJvcjogZXJyb3IuaXNDb21wb25lbnRFcnJvcixcbiAgICAgIGNvbXBvbmVudFN0YWNrOlxuICAgICAgICBjb21wb25lbnRTdGFjayAhPSBudWxsID8gcGFyc2VDb21wb25lbnRTdGFjayhjb21wb25lbnRTdGFjaykgOiBbXSxcbiAgICAgIGV4dHJhRGF0YTogZXJyb3IuZXh0cmFEYXRhLFxuICAgICAgLi4ucGFyc2VJbnRlcnBvbGF0aW9uKFttZXNzYWdlXSksXG4gICAgfTtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRTdGFjayAhPSBudWxsKSB7XG4gICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCBjb25zb2xlIGVycm9ycyBoYXZlIGEgY29tcG9uZW50U3RhY2suXG4gICAgcmV0dXJuIHtcbiAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgc3RhY2s6IGVycm9yLnN0YWNrLFxuICAgICAgaXNDb21wb25lbnRFcnJvcjogZXJyb3IuaXNDb21wb25lbnRFcnJvcixcbiAgICAgIGNvbXBvbmVudFN0YWNrOiBwYXJzZUNvbXBvbmVudFN0YWNrKGNvbXBvbmVudFN0YWNrKSxcbiAgICAgIGV4dHJhRGF0YTogZXJyb3IuZXh0cmFEYXRhLFxuICAgICAgLi4ucGFyc2VJbnRlcnBvbGF0aW9uKFttZXNzYWdlXSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIE1vc3QgYGNvbnNvbGUuZXJyb3JgIGNhbGxzIHdvbid0IGhhdmUgYSBjb21wb25lbnRTdGFjay4gV2UgcGFyc2UgdGhlbSBsaWtlXG4gIC8vIHJlZ3VsYXIgbG9ncyB3aGljaCBoYXZlIHRoZSBjb21wb25lbnQgc3RhY2sgYnVyaWVkIGluIHRoZSBtZXNzYWdlLlxuICByZXR1cm4ge1xuICAgIGxldmVsOiAnZXJyb3InLFxuICAgIHN0YWNrOiBlcnJvci5zdGFjayxcbiAgICBpc0NvbXBvbmVudEVycm9yOiBlcnJvci5pc0NvbXBvbmVudEVycm9yLFxuICAgIGV4dHJhRGF0YTogZXJyb3IuZXh0cmFEYXRhLFxuICAgIC4uLnBhcnNlTG9nQm94TG9nKFttZXNzYWdlXSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxvZ0JveExvZyhhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4pOiB7fFxuICBjb21wb25lbnRTdGFjazogQ29tcG9uZW50U3RhY2ssXG4gIGNhdGVnb3J5OiBDYXRlZ29yeSxcbiAgbWVzc2FnZTogTWVzc2FnZSxcbnx9IHtcbiAgY29uc3QgbWVzc2FnZSA9IGFyZ3NbMF07XG4gIGxldCBhcmdzV2l0aG91dENvbXBvbmVudFN0YWNrOiBBcnJheTxtaXhlZD4gPSBbXTtcbiAgbGV0IGNvbXBvbmVudFN0YWNrOiBDb21wb25lbnRTdGFjayA9IFtdO1xuXG4gIC8vIEV4dHJhY3QgY29tcG9uZW50IHN0YWNrIGZyb20gd2FybmluZ3MgbGlrZSBcIlNvbWUgd2FybmluZyVzXCIuXG4gIGlmIChcbiAgICB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICBtZXNzYWdlLnNsaWNlKC0yKSA9PT0gJyVzJyAmJlxuICAgIGFyZ3MubGVuZ3RoID4gMFxuICApIHtcbiAgICBjb25zdCBsYXN0QXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0eXBlb2YgbGFzdEFyZyA9PT0gJ3N0cmluZycgJiYgaXNDb21wb25lbnRTdGFjayhsYXN0QXJnKSkge1xuICAgICAgYXJnc1dpdGhvdXRDb21wb25lbnRTdGFjayA9IGFyZ3Muc2xpY2UoMCwgLTEpO1xuICAgICAgYXJnc1dpdGhvdXRDb21wb25lbnRTdGFja1swXSA9IG1lc3NhZ2Uuc2xpY2UoMCwgLTIpO1xuICAgICAgY29tcG9uZW50U3RhY2sgPSBwYXJzZUNvbXBvbmVudFN0YWNrKGxhc3RBcmcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnRTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAvLyBUcnkgZmluZGluZyB0aGUgY29tcG9uZW50IHN0YWNrIGVsc2V3aGVyZS5cbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgJiYgaXNDb21wb25lbnRTdGFjayhhcmcpKSB7XG4gICAgICAgIC8vIFN0cmlwIG91dCBhbnkgbWVzc2FnZXMgYmVmb3JlIHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgICAgIGxldCBtZXNzYWdlRW5kSW5kZXggPSBhcmcuc2VhcmNoKC9cXG4gezR9KGlufGF0KSAvKTtcbiAgICAgICAgaWYgKG1lc3NhZ2VFbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBIYW5kbGUgSlNDIGNvbXBvbmVudCBzdGFja3MuXG4gICAgICAgICAgbWVzc2FnZUVuZEluZGV4ID0gYXJnLnNlYXJjaCgvXFxuLyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2VFbmRJbmRleCA+IDApIHtcbiAgICAgICAgICBhcmdzV2l0aG91dENvbXBvbmVudFN0YWNrLnB1c2goYXJnLnNsaWNlKDAsIG1lc3NhZ2VFbmRJbmRleCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcG9uZW50U3RhY2sgPSBwYXJzZUNvbXBvbmVudFN0YWNrKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzV2l0aG91dENvbXBvbmVudFN0YWNrLnB1c2goYXJnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnBhcnNlSW50ZXJwb2xhdGlvbihhcmdzV2l0aG91dENvbXBvbmVudFN0YWNrKSxcbiAgICBjb21wb25lbnRTdGFjayxcbiAgfTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGRlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldiA9IHJlcXVpcmUoJy4vVXRpbGl0aWVzL2RlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldicpO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBVbmljb2RlIHNlcXVlbmNlcyBmb3IgdmFyaW91cyBjaGFyYWN0ZXJzIGFuZCBlbW9qaS5cbiAqXG4gKiAgLSBNb3JlIGV4cGxpY2l0IHRoYW4gdXNpbmcgdGhlIHNlcXVlbmNlcyBkaXJlY3RseSBpbiBjb2RlLlxuICogIC0gU291cmNlIGNvZGUgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gQVNDSUkuXG4gKiAgLSBMZXNzIGNoYW5jZSBvZiB0eXBvcy5cbiAqL1xuY29uc3QgVVRGU2VxdWVuY2U6IHt8XG4gIEJPTTogc3RyaW5nLFxuICBCVUxMRVQ6IHN0cmluZyxcbiAgQlVMTEVUX1NQOiBzdHJpbmcsXG4gIE1EQVNIOiBzdHJpbmcsXG4gIE1EQVNIX1NQOiBzdHJpbmcsXG4gIE1JRERPVDogc3RyaW5nLFxuICBNSURET1RfS0FUQUtBTkE6IHN0cmluZyxcbiAgTUlERE9UX1NQOiBzdHJpbmcsXG4gIE5CU1A6IHN0cmluZyxcbiAgTkRBU0g6IHN0cmluZyxcbiAgTkRBU0hfU1A6IHN0cmluZyxcbiAgTkVXTElORTogc3RyaW5nLFxuICBQSVpaQTogc3RyaW5nLFxuICBUUklBTkdMRV9MRUZUOiBzdHJpbmcsXG4gIFRSSUFOR0xFX1JJR0hUOiBzdHJpbmcsXG58fSA9IGRlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldih7XG4gIEJPTTogJ1xcdWZlZmYnLCAvLyBieXRlIG9yZGVyIG1hcmtcbiAgQlVMTEVUOiAnXFx1MjAyMicsIC8vIGJ1bGxldDogJiM4MjI2O1xuICBCVUxMRVRfU1A6ICdcXHUwMEEwXFx1MjAyMlxcdTAwQTAnLCAvLyAmbmJzcDsmIzgyMjY7Jm5ic3A7XG4gIE1JRERPVDogJ1xcdTAwQjcnLCAvLyBub3JtYWwgbWlkZGxlIGRvdDogJm1pZGRvdDtcbiAgTUlERE9UX1NQOiAnXFx1MDBBMFxcdTAwQjdcXHUwMEEwJywgLy8gJm5ic3A7Jm1pZGRvdDsmbmJzcDtcbiAgTUlERE9UX0tBVEFLQU5BOiAnXFx1MzBGQicsIC8vIGthdGFrYW5hIG1pZGRsZSBkb3RcbiAgTURBU0g6ICdcXHUyMDE0JywgLy8gZW0gZGFzaDogJm1kYXNoO1xuICBNREFTSF9TUDogJ1xcdTAwQTBcXHUyMDE0XFx1MDBBMCcsIC8vICZuYnNwOyZtZGFzaDsmbmJzcDtcbiAgTkRBU0g6ICdcXHUyMDEzJywgLy8gZW4gZGFzaDogJm5kYXNoO1xuICBOREFTSF9TUDogJ1xcdTAwQTBcXHUyMDEzXFx1MDBBMCcsIC8vICZuYnNwOyZuZGFzaDsmbmJzcDtcbiAgTkVXTElORTogJ1xcdTAwMEEnLFxuICBOQlNQOiAnXFx1MDBBMCcsIC8vIG5vbi1icmVha2luZyBzcGFjZTogJm5ic3A7XG4gIFBJWlpBOiAnXFx1RDgzQ1xcdURGNTUnLFxuICBUUklBTkdMRV9MRUZUOiAnXFx1MjVjMCcsIC8vIGJsYWNrIGxlZnQtcG9pbnRpbmcgdHJpYW5nbGVcbiAgVFJJQU5HTEVfUklHSFQ6ICdcXHUyNWI2JywgLy8gYmxhY2sgcmlnaHQtcG9pbnRpbmcgdHJpYW5nbGVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBVVEZTZXF1ZW5jZTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoe29ubHlGaXJzdCA9IGZhbHNlfSA9IHt9KSA9PiB7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdFx0J1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuXHRcdCcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKSdcblx0XS5qb2luKCd8Jyk7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgb25seUZpcnN0ID8gdW5kZWZpbmVkIDogJ2cnKTtcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVFeGNlcHRpb25zTWFuYWdlcic7XG5pbXBvcnQgTmF0aXZlRXhjZXB0aW9uc01hbmFnZXIgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVFeGNlcHRpb25zTWFuYWdlcic7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVFeGNlcHRpb25zTWFuYWdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuY29uc3QgUGxhdGZvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVXRpbGl0aWVzL1BsYXRmb3JtJyk7XG5cbmV4cG9ydCB0eXBlIFN0YWNrRnJhbWUgPSB7fFxuICBjb2x1bW46ID9udW1iZXIsXG4gIGZpbGU6ID9zdHJpbmcsXG4gIGxpbmVOdW1iZXI6ID9udW1iZXIsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgY29sbGFwc2U/OiBib29sZWFuLFxufH07XG5leHBvcnQgdHlwZSBFeGNlcHRpb25EYXRhID0ge1xuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG9yaWdpbmFsTWVzc2FnZTogP3N0cmluZyxcbiAgbmFtZTogP3N0cmluZyxcbiAgY29tcG9uZW50U3RhY2s6ID9zdHJpbmcsXG4gIHN0YWNrOiBBcnJheTxTdGFja0ZyYW1lPixcbiAgaWQ6IG51bWJlcixcbiAgaXNGYXRhbDogYm9vbGVhbixcbiAgLy8gZmxvd2xpbnQtbmV4dC1saW5lIHVuY2xlYXItdHlwZTpvZmZcbiAgZXh0cmFEYXRhPzogT2JqZWN0LFxuICAuLi5cbn07XG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gIC8vIERlcHJlY2F0ZWQ6IFVzZSBgcmVwb3J0RXhjZXB0aW9uYFxuICArcmVwb3J0RmF0YWxFeGNlcHRpb246IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhY2s6IEFycmF5PFN0YWNrRnJhbWU+LFxuICAgIGV4Y2VwdGlvbklkOiBudW1iZXIsXG4gICkgPT4gdm9pZDtcbiAgLy8gRGVwcmVjYXRlZDogVXNlIGByZXBvcnRFeGNlcHRpb25gXG4gICtyZXBvcnRTb2Z0RXhjZXB0aW9uOiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHN0YWNrOiBBcnJheTxTdGFja0ZyYW1lPixcbiAgICBleGNlcHRpb25JZDogbnVtYmVyLFxuICApID0+IHZvaWQ7XG4gICtyZXBvcnRFeGNlcHRpb24/OiAoZGF0YTogRXhjZXB0aW9uRGF0YSkgPT4gdm9pZDtcbiAgK3VwZGF0ZUV4Y2VwdGlvbk1lc3NhZ2U6IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhY2s6IEFycmF5PFN0YWNrRnJhbWU+LFxuICAgIGV4Y2VwdGlvbklkOiBudW1iZXIsXG4gICkgPT4gdm9pZDtcbiAgLy8gVE9ETyhUNTMzMTEyODEpOiBUaGlzIGlzIGEgbm9vcCBvbiBpT1Mgbm93LiBJbXBsZW1lbnQgaXQuXG4gICtkaXNtaXNzUmVkYm94PzogKCkgPT4gdm9pZDtcbn1cblxuY29uc3QgTmF0aXZlTW9kdWxlID1cbiAgVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXRFbmZvcmNpbmc8U3BlYz4oJ0V4Y2VwdGlvbnNNYW5hZ2VyJyk7XG5cbmNvbnN0IEV4Y2VwdGlvbnNNYW5hZ2VyID0ge1xuICByZXBvcnRGYXRhbEV4Y2VwdGlvbihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhY2s6IEFycmF5PFN0YWNrRnJhbWU+LFxuICAgIGV4Y2VwdGlvbklkOiBudW1iZXIsXG4gICkge1xuICAgIE5hdGl2ZU1vZHVsZS5yZXBvcnRGYXRhbEV4Y2VwdGlvbihtZXNzYWdlLCBzdGFjaywgZXhjZXB0aW9uSWQpO1xuICB9LFxuICByZXBvcnRTb2Z0RXhjZXB0aW9uKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGFjazogQXJyYXk8U3RhY2tGcmFtZT4sXG4gICAgZXhjZXB0aW9uSWQ6IG51bWJlcixcbiAgKSB7XG4gICAgTmF0aXZlTW9kdWxlLnJlcG9ydFNvZnRFeGNlcHRpb24obWVzc2FnZSwgc3RhY2ssIGV4Y2VwdGlvbklkKTtcbiAgfSxcbiAgdXBkYXRlRXhjZXB0aW9uTWVzc2FnZShcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhY2s6IEFycmF5PFN0YWNrRnJhbWU+LFxuICAgIGV4Y2VwdGlvbklkOiBudW1iZXIsXG4gICkge1xuICAgIE5hdGl2ZU1vZHVsZS51cGRhdGVFeGNlcHRpb25NZXNzYWdlKG1lc3NhZ2UsIHN0YWNrLCBleGNlcHRpb25JZCk7XG4gIH0sXG4gIGRpc21pc3NSZWRib3goKTogdm9pZCB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9PSAnaW9zJyAmJiBOYXRpdmVNb2R1bGUuZGlzbWlzc1JlZGJveCkge1xuICAgICAgLy8gVE9ETyhUNTMzMTEyODEpOiBUaGlzIGlzIGEgbm9vcCBvbiBpT1Mgbm93LiBJbXBsZW1lbnQgaXQuXG4gICAgICBOYXRpdmVNb2R1bGUuZGlzbWlzc1JlZGJveCgpO1xuICAgIH1cbiAgfSxcbiAgcmVwb3J0RXhjZXB0aW9uKGRhdGE6IEV4Y2VwdGlvbkRhdGEpOiB2b2lkIHtcbiAgICBpZiAoTmF0aXZlTW9kdWxlLnJlcG9ydEV4Y2VwdGlvbikge1xuICAgICAgTmF0aXZlTW9kdWxlLnJlcG9ydEV4Y2VwdGlvbihkYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNGYXRhbCkge1xuICAgICAgRXhjZXB0aW9uc01hbmFnZXIucmVwb3J0RmF0YWxFeGNlcHRpb24oZGF0YS5tZXNzYWdlLCBkYXRhLnN0YWNrLCBkYXRhLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgRXhjZXB0aW9uc01hbmFnZXIucmVwb3J0U29mdEV4Y2VwdGlvbihkYXRhLm1lc3NhZ2UsIGRhdGEuc3RhY2ssIGRhdGEuaWQpO1xuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4Y2VwdGlvbnNNYW5hZ2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qge3BvbHlmaWxsR2xvYmFsfSA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9Qb2x5ZmlsbEZ1bmN0aW9ucycpO1xuXG4vKipcbiAqIFNldCB1cCBQcm9taXNlLiBUaGUgbmF0aXZlIFByb21pc2UgaW1wbGVtZW50YXRpb24gdGhyb3dzIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiBFUlJPUjogRXZlbnQgbG9vcCBub3Qgc3VwcG9ydGVkLlxuICpcbiAqIElmIHlvdSBkb24ndCBuZWVkIHRoZXNlIHBvbHlmaWxscywgZG9uJ3QgdXNlIEluaXRpYWxpemVDb3JlOyBqdXN0IGRpcmVjdGx5XG4gKiByZXF1aXJlIHRoZSBtb2R1bGVzIHlvdSBuZWVkIGZyb20gSW5pdGlhbGl6ZUNvcmUgZm9yIHNldHVwLlxuICovXG5cbi8vIElmIGdsb2JhbC5Qcm9taXNlIGlzIHByb3ZpZGVkIGJ5IEhlcm1lcywgd2UgYXJlIGNvbmZpZGVudCB0aGF0IGl0IGNhbiBwcm92aWRlXG4vLyBhbGwgdGhlIG1ldGhvZHMgbmVlZGVkIGJ5IFJlYWN0IE5hdGl2ZSwgc28gd2UgY2FuIGRpcmVjdGx5IHVzZSBpdC5cbmlmIChnbG9iYWw/Lkhlcm1lc0ludGVybmFsPy5oYXNQcm9taXNlPy4oKSkge1xuICBjb25zdCBIZXJtZXNQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbiAgaWYgKF9fREVWX18pIHtcbiAgICBpZiAodHlwZW9mIEhlcm1lc1Byb21pc2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0hlcm1lc1Byb21pc2UgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgZ2xvYmFsLkhlcm1lc0ludGVybmFsPy5lbmFibGVQcm9taXNlUmVqZWN0aW9uVHJhY2tlcj8uKFxuICAgICAgcmVxdWlyZSgnLi4vcHJvbWlzZVJlamVjdGlvblRyYWNraW5nT3B0aW9ucycpLmRlZmF1bHQsXG4gICAgKTtcbiAgfVxufSBlbHNlIHtcbiAgcG9seWZpbGxHbG9iYWwoJ1Byb21pc2UnLCAoKSA9PiByZXF1aXJlKCcuLi9Qcm9taXNlJykpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbmltcG9ydCB0eXBlb2Yge2VuYWJsZX0gZnJvbSAncHJvbWlzZS9zZXRpbW1lZGlhdGUvcmVqZWN0aW9uLXRyYWNraW5nJztcblxuaW1wb3J0IExvZ0JveCBmcm9tICcuL0xvZ0JveC9Mb2dCb3gnO1xuXG5sZXQgcmVqZWN0aW9uVHJhY2tpbmdPcHRpb25zOiAkTm9uTWF5YmVUeXBlPFBhcmFtZXRlcnM8ZW5hYmxlPlswXT4gPSB7XG4gIGFsbFJlamVjdGlvbnM6IHRydWUsXG4gIG9uVW5oYW5kbGVkOiAoaWQsIHJlamVjdGlvbiA9IHt9KSA9PiB7XG4gICAgbGV0IG1lc3NhZ2U6IHN0cmluZztcbiAgICBsZXQgc3RhY2s6ID9zdHJpbmc7XG5cbiAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3IgdGhpcyBwYXJhbWV0ZXJzXG4gICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVqZWN0aW9uKTtcbiAgICBpZiAoc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IEVycm9yXScpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgIG1lc3NhZ2UgPSBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZWplY3Rpb24pO1xuICAgICAgY29uc3QgZXJyb3I6IEVycm9yID0gKHJlamVjdGlvbjogJEZsb3dGaXhNZSk7XG4gICAgICBzdGFjayA9IGVycm9yLnN0YWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gcmVxdWlyZSgncHJldHR5LWZvcm1hdCcpKHJlamVjdGlvbik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgdHlwZW9mIHJlamVjdGlvbiA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gcmVqZWN0aW9uXG4gICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KChyZWplY3Rpb246ICRGbG93Rml4TWUpKTtcbiAgICAgIH1cbiAgICAgIC8vIEl0IGNvdWxkIGFsdGhvdWdoIHRoaXMgb2JqZWN0IGlzIG5vdCBhIHN0YW5kYXJkIGVycm9yLCBpdCBzdGlsbCBoYXMgc3RhY2sgaW5mb3JtYXRpb24gdG8gdW53aW5kXG4gICAgICAvLyAkRmxvd0ZpeE1lIGlnbm9yZSB0eXBlcyBqdXN0IGNoZWNrIGlmIHN0YWNrIGlzIHRoZXJlXG4gICAgICBpZiAocmVqZWN0aW9uLnN0YWNrICYmIHR5cGVvZiByZWplY3Rpb24uc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0YWNrID0gcmVqZWN0aW9uLnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdhcm5pbmcgPSBgUG9zc2libGUgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIChpZDogJHtpZH0pOlxcbiR7XG4gICAgICBtZXNzYWdlID8/ICcnXG4gICAgfWA7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIExvZ0JveC5hZGRMb2coe1xuICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgY29udGVudDogd2FybmluZyxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IFtdLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgY2F0ZWdvcnk6ICdwb3NzaWJsZV91bmhhbmRsZWRfcHJvbWlzZV9yZWplY3Rpb24nLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gIH0sXG4gIG9uSGFuZGxlZDogaWQgPT4ge1xuICAgIGNvbnN0IHdhcm5pbmcgPVxuICAgICAgYFByb21pc2UgcmVqZWN0aW9uIGhhbmRsZWQgKGlkOiAke2lkfSlcXG5gICtcbiAgICAgICdUaGlzIG1lYW5zIHlvdSBjYW4gaWdub3JlIGFueSBwcmV2aW91cyBtZXNzYWdlcyBvZiB0aGUgZm9ybSAnICtcbiAgICAgIGBcIlBvc3NpYmxlIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiAoaWQ6ICR7aWR9KTpcImA7XG4gICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVqZWN0aW9uVHJhY2tpbmdPcHRpb25zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fuc2lTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJ2Fuc2ktc3R5bGVzJykpO1xuXG52YXIgX2NvbGxlY3Rpb25zID0gcmVxdWlyZSgnLi9jb2xsZWN0aW9ucycpO1xuXG52YXIgX0FzeW1tZXRyaWNNYXRjaGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChcbiAgcmVxdWlyZSgnLi9wbHVnaW5zL0FzeW1tZXRyaWNNYXRjaGVyJylcbik7XG5cbnZhciBfQ29udmVydEFuc2kgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJy4vcGx1Z2lucy9Db252ZXJ0QW5zaScpKTtcblxudmFyIF9ET01Db2xsZWN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvRE9NQ29sbGVjdGlvbicpKTtcblxudmFyIF9ET01FbGVtZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvRE9NRWxlbWVudCcpKTtcblxudmFyIF9JbW11dGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJy4vcGx1Z2lucy9JbW11dGFibGUnKSk7XG5cbnZhciBfUmVhY3RFbGVtZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvUmVhY3RFbGVtZW50JykpO1xuXG52YXIgX1JlYWN0VGVzdENvbXBvbmVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoXG4gIHJlcXVpcmUoJy4vcGx1Z2lucy9SZWFjdFRlc3RDb21wb25lbnQnKVxuKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtkZWZhdWx0OiBvYmp9O1xufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGxvY2FsL2Jhbi10eXBlcy1ldmVudHVhbGx5ICovXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCB0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuY29uc3QgZXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHJlZ0V4cFRvU3RyaW5nID0gUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogRXhwbGljaXRseSBjb21wYXJpbmcgdHlwZW9mIGNvbnN0cnVjdG9yIHRvIGZ1bmN0aW9uIGF2b2lkcyB1bmRlZmluZWQgYXMgbmFtZVxuICogd2hlbiBtb2NrIGlkZW50aXR5LW9iai1wcm94eSByZXR1cm5zIHRoZSBrZXkgYXMgdGhlIHZhbHVlIGZvciBhbnkga2V5LlxuICovXG5cbmNvbnN0IGdldENvbnN0cnVjdG9yTmFtZSA9IHZhbCA9PlxuICAodHlwZW9mIHZhbC5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IubmFtZSkgfHwgJ09iamVjdCc7XG4vKiBnbG9iYWwgd2luZG93ICovXG5cbi8qKiBJcyB2YWwgaXMgZXF1YWwgdG8gZ2xvYmFsIHdpbmRvdyBvYmplY3Q/IFdvcmtzIGV2ZW4gaWYgaXQgZG9lcyBub3QgZXhpc3QgOikgKi9cblxuY29uc3QgaXNXaW5kb3cgPSB2YWwgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsID09PSB3aW5kb3c7XG5cbmNvbnN0IFNZTUJPTF9SRUdFWFAgPSAvXlN5bWJvbFxcKCguKilcXCkoLiopJC87XG5jb25zdCBORVdMSU5FX1JFR0VYUCA9IC9cXG4vZ2k7XG5cbmNsYXNzIFByZXR0eUZvcm1hdFBsdWdpbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGFjaykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUb1N0cmluZ2VkQXJyYXlUeXBlKHRvU3RyaW5nZWQpIHtcbiAgcmV0dXJuIChcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IERhdGFWaWV3XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgSW50OEFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBJbnQxNkFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBJbnQzMkFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBVaW50OEFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgVWludDE2QXJyYXldJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gcHJpbnROdW1iZXIodmFsKSB7XG4gIHJldHVybiBPYmplY3QuaXModmFsLCAtMCkgPyAnLTAnIDogU3RyaW5nKHZhbCk7XG59XG5cbmZ1bmN0aW9uIHByaW50QmlnSW50KHZhbCkge1xuICByZXR1cm4gU3RyaW5nKGAke3ZhbH1uYCk7XG59XG5cbmZ1bmN0aW9uIHByaW50RnVuY3Rpb24odmFsLCBwcmludEZ1bmN0aW9uTmFtZSkge1xuICBpZiAoIXByaW50RnVuY3Rpb25OYW1lKSB7XG4gICAgcmV0dXJuICdbRnVuY3Rpb25dJztcbiAgfVxuXG4gIHJldHVybiAnW0Z1bmN0aW9uICcgKyAodmFsLm5hbWUgfHwgJ2Fub255bW91cycpICsgJ10nO1xufVxuXG5mdW5jdGlvbiBwcmludFN5bWJvbCh2YWwpIHtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnJlcGxhY2UoU1lNQk9MX1JFR0VYUCwgJ1N5bWJvbCgkMSknKTtcbn1cblxuZnVuY3Rpb24gcHJpbnRFcnJvcih2YWwpIHtcbiAgcmV0dXJuICdbJyArIGVycm9yVG9TdHJpbmcuY2FsbCh2YWwpICsgJ10nO1xufVxuLyoqXG4gKiBUaGUgZmlyc3QgcG9ydCBvZiBjYWxsIGZvciBwcmludGluZyBhbiBvYmplY3QsIGhhbmRsZXMgbW9zdCBvZiB0aGVcbiAqIGRhdGEtdHlwZXMgaW4gSlMuXG4gKi9cblxuZnVuY3Rpb24gcHJpbnRCYXNpY1ZhbHVlKHZhbCwgcHJpbnRGdW5jdGlvbk5hbWUsIGVzY2FwZVJlZ2V4LCBlc2NhcGVTdHJpbmcpIHtcbiAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICcnICsgdmFsO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBjb25zdCB0eXBlT2YgPSB0eXBlb2YgdmFsO1xuXG4gIGlmICh0eXBlT2YgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHByaW50TnVtYmVyKHZhbCk7XG4gIH1cblxuICBpZiAodHlwZU9mID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiBwcmludEJpZ0ludCh2YWwpO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZXNjYXBlU3RyaW5nKSB7XG4gICAgICByZXR1cm4gJ1wiJyArIHZhbC5yZXBsYWNlKC9cInxcXFxcL2csICdcXFxcJCYnKSArICdcIic7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcIicgKyB2YWwgKyAnXCInO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcmludEZ1bmN0aW9uKHZhbCwgcHJpbnRGdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ3N5bWJvbCcpIHtcbiAgICByZXR1cm4gcHJpbnRTeW1ib2wodmFsKTtcbiAgfVxuXG4gIGNvbnN0IHRvU3RyaW5nZWQgPSB0b1N0cmluZy5jYWxsKHZhbCk7XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFdlYWtNYXBdJykge1xuICAgIHJldHVybiAnV2Vha01hcCB7fSc7XG4gIH1cblxuICBpZiAodG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgV2Vha1NldF0nKSB7XG4gICAgcmV0dXJuICdXZWFrU2V0IHt9JztcbiAgfVxuXG4gIGlmIChcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJ1xuICApIHtcbiAgICByZXR1cm4gcHJpbnRGdW5jdGlvbih2YWwsIHByaW50RnVuY3Rpb25OYW1lKTtcbiAgfVxuXG4gIGlmICh0b1N0cmluZ2VkID09PSAnW29iamVjdCBTeW1ib2xdJykge1xuICAgIHJldHVybiBwcmludFN5bWJvbCh2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIHJldHVybiBpc05hTigrdmFsKSA/ICdEYXRlIHsgTmFOIH0nIDogdG9JU09TdHJpbmcuY2FsbCh2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEVycm9yXScpIHtcbiAgICByZXR1cm4gcHJpbnRFcnJvcih2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgaWYgKGVzY2FwZVJlZ2V4KSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZWdFeHAuZXNjYXBlL2Jsb2IvbWFzdGVyL3BvbHlmaWxsLmpzXG4gICAgICByZXR1cm4gcmVnRXhwVG9TdHJpbmcuY2FsbCh2YWwpLnJlcGxhY2UoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ0V4cFRvU3RyaW5nLmNhbGwodmFsKTtcbiAgfVxuXG4gIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJldHVybiBwcmludEVycm9yKHZhbCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogSGFuZGxlcyBtb3JlIGNvbXBsZXggb2JqZWN0cyAoIHN1Y2ggYXMgb2JqZWN0cyB3aXRoIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gKiBtYXBzIGFuZCBzZXRzIGV0YyApXG4gKi9cblxuZnVuY3Rpb24gcHJpbnRDb21wbGV4VmFsdWUoXG4gIHZhbCxcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvbixcbiAgZGVwdGgsXG4gIHJlZnMsXG4gIGhhc0NhbGxlZFRvSlNPTlxuKSB7XG4gIGlmIChyZWZzLmluZGV4T2YodmFsKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICB9XG5cbiAgcmVmcyA9IHJlZnMuc2xpY2UoKTtcbiAgcmVmcy5wdXNoKHZhbCk7XG4gIGNvbnN0IGhpdE1heERlcHRoID0gKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aDtcbiAgY29uc3QgbWluID0gY29uZmlnLm1pbjtcblxuICBpZiAoXG4gICAgY29uZmlnLmNhbGxUb0pTT04gJiZcbiAgICAhaGl0TWF4RGVwdGggJiZcbiAgICB2YWwudG9KU09OICYmXG4gICAgdHlwZW9mIHZhbC50b0pTT04gPT09ICdmdW5jdGlvbicgJiZcbiAgICAhaGFzQ2FsbGVkVG9KU09OXG4gICkge1xuICAgIHJldHVybiBwcmludGVyKHZhbC50b0pTT04oKSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHRydWUpO1xuICB9XG5cbiAgY29uc3QgdG9TdHJpbmdlZCA9IHRvU3RyaW5nLmNhbGwodmFsKTtcblxuICBpZiAodG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXScpIHtcbiAgICByZXR1cm4gaGl0TWF4RGVwdGhcbiAgICAgID8gJ1tBcmd1bWVudHNdJ1xuICAgICAgOiAobWluID8gJycgOiAnQXJndW1lbnRzICcpICtcbiAgICAgICAgICAnWycgK1xuICAgICAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRMaXN0SXRlbXMpKFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgIHJlZnMsXG4gICAgICAgICAgICBwcmludGVyXG4gICAgICAgICAgKSArXG4gICAgICAgICAgJ10nO1xuICB9XG5cbiAgaWYgKGlzVG9TdHJpbmdlZEFycmF5VHlwZSh0b1N0cmluZ2VkKSkge1xuICAgIHJldHVybiBoaXRNYXhEZXB0aFxuICAgICAgPyAnWycgKyB2YWwuY29uc3RydWN0b3IubmFtZSArICddJ1xuICAgICAgOiAobWluID8gJycgOiB2YWwuY29uc3RydWN0b3IubmFtZSArICcgJykgK1xuICAgICAgICAgICdbJyArXG4gICAgICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludExpc3RJdGVtcykoXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgcmVmcyxcbiAgICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgICApICtcbiAgICAgICAgICAnXSc7XG4gIH1cblxuICBpZiAodG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgTWFwXScpIHtcbiAgICByZXR1cm4gaGl0TWF4RGVwdGhcbiAgICAgID8gJ1tNYXBdJ1xuICAgICAgOiAnTWFwIHsnICtcbiAgICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50SXRlcmF0b3JFbnRyaWVzKShcbiAgICAgICAgICAgIHZhbC5lbnRyaWVzKCksXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgcmVmcyxcbiAgICAgICAgICAgIHByaW50ZXIsXG4gICAgICAgICAgICAnID0+ICdcbiAgICAgICAgICApICtcbiAgICAgICAgICAnfSc7XG4gIH1cblxuICBpZiAodG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgU2V0XScpIHtcbiAgICByZXR1cm4gaGl0TWF4RGVwdGhcbiAgICAgID8gJ1tTZXRdJ1xuICAgICAgOiAnU2V0IHsnICtcbiAgICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50SXRlcmF0b3JWYWx1ZXMpKFxuICAgICAgICAgICAgdmFsLnZhbHVlcygpLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgIHJlZnMsXG4gICAgICAgICAgICBwcmludGVyXG4gICAgICAgICAgKSArXG4gICAgICAgICAgJ30nO1xuICB9IC8vIEF2b2lkIGZhaWx1cmUgdG8gc2VyaWFsaXplIGdsb2JhbCB3aW5kb3cgb2JqZWN0IGluIGpzZG9tIHRlc3QgZW52aXJvbm1lbnQuXG4gIC8vIEZvciBleGFtcGxlLCBub3QgZXZlbiByZWxldmFudCBpZiB3aW5kb3cgaXMgcHJvcCBvZiBSZWFjdCBlbGVtZW50LlxuXG4gIHJldHVybiBoaXRNYXhEZXB0aCB8fCBpc1dpbmRvdyh2YWwpXG4gICAgPyAnWycgKyBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsKSArICddJ1xuICAgIDogKG1pbiA/ICcnIDogZ2V0Q29uc3RydWN0b3JOYW1lKHZhbCkgKyAnICcpICtcbiAgICAgICAgJ3snICtcbiAgICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludE9iamVjdFByb3BlcnRpZXMpKFxuICAgICAgICAgIHZhbCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICkgK1xuICAgICAgICAnfSc7XG59XG5cbmZ1bmN0aW9uIGlzTmV3UGx1Z2luKHBsdWdpbikge1xuICByZXR1cm4gcGx1Z2luLnNlcmlhbGl6ZSAhPSBudWxsO1xufVxuXG5mdW5jdGlvbiBwcmludFBsdWdpbihwbHVnaW4sIHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMpIHtcbiAgbGV0IHByaW50ZWQ7XG5cbiAgdHJ5IHtcbiAgICBwcmludGVkID0gaXNOZXdQbHVnaW4ocGx1Z2luKVxuICAgICAgPyBwbHVnaW4uc2VyaWFsaXplKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpXG4gICAgICA6IHBsdWdpbi5wcmludChcbiAgICAgICAgICB2YWwsXG4gICAgICAgICAgdmFsQ2hpbGQgPT4gcHJpbnRlcih2YWxDaGlsZCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMpLFxuICAgICAgICAgIHN0ciA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBpbmRlbnRhdGlvbk5leHQgK1xuICAgICAgICAgICAgICBzdHIucmVwbGFjZShORVdMSU5FX1JFR0VYUCwgJ1xcbicgKyBpbmRlbnRhdGlvbk5leHQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZWRnZVNwYWNpbmc6IGNvbmZpZy5zcGFjaW5nT3V0ZXIsXG4gICAgICAgICAgICBtaW46IGNvbmZpZy5taW4sXG4gICAgICAgICAgICBzcGFjaW5nOiBjb25maWcuc3BhY2luZ0lubmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWcuY29sb3JzXG4gICAgICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFByZXR0eUZvcm1hdFBsdWdpbkVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJpbnRlZCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgcHJldHR5LWZvcm1hdDogUGx1Z2luIG11c3QgcmV0dXJuIHR5cGUgXCJzdHJpbmdcIiBidXQgaW5zdGVhZCByZXR1cm5lZCBcIiR7dHlwZW9mIHByaW50ZWR9XCIuYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcHJpbnRlZDtcbn1cblxuZnVuY3Rpb24gZmluZFBsdWdpbihwbHVnaW5zLCB2YWwpIHtcbiAgZm9yIChsZXQgcCA9IDA7IHAgPCBwbHVnaW5zLmxlbmd0aDsgcCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwbHVnaW5zW3BdLnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luc1twXTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IFByZXR0eUZvcm1hdFBsdWdpbkVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJpbnRlcih2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBoYXNDYWxsZWRUb0pTT04pIHtcbiAgY29uc3QgcGx1Z2luID0gZmluZFBsdWdpbihjb25maWcucGx1Z2lucywgdmFsKTtcblxuICBpZiAocGx1Z2luICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByaW50UGx1Z2luKHBsdWdpbiwgdmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcyk7XG4gIH1cblxuICBjb25zdCBiYXNpY1Jlc3VsdCA9IHByaW50QmFzaWNWYWx1ZShcbiAgICB2YWwsXG4gICAgY29uZmlnLnByaW50RnVuY3Rpb25OYW1lLFxuICAgIGNvbmZpZy5lc2NhcGVSZWdleCxcbiAgICBjb25maWcuZXNjYXBlU3RyaW5nXG4gICk7XG5cbiAgaWYgKGJhc2ljUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGJhc2ljUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHByaW50Q29tcGxleFZhbHVlKFxuICAgIHZhbCxcbiAgICBjb25maWcsXG4gICAgaW5kZW50YXRpb24sXG4gICAgZGVwdGgsXG4gICAgcmVmcyxcbiAgICBoYXNDYWxsZWRUb0pTT05cbiAgKTtcbn1cblxuY29uc3QgREVGQVVMVF9USEVNRSA9IHtcbiAgY29tbWVudDogJ2dyYXknLFxuICBjb250ZW50OiAncmVzZXQnLFxuICBwcm9wOiAneWVsbG93JyxcbiAgdGFnOiAnY3lhbicsXG4gIHZhbHVlOiAnZ3JlZW4nXG59O1xuY29uc3QgREVGQVVMVF9USEVNRV9LRVlTID0gT2JqZWN0LmtleXMoREVGQVVMVF9USEVNRSk7XG5jb25zdCBERUZBVUxUX09QVElPTlMgPSB7XG4gIGNhbGxUb0pTT046IHRydWUsXG4gIGVzY2FwZVJlZ2V4OiBmYWxzZSxcbiAgZXNjYXBlU3RyaW5nOiB0cnVlLFxuICBoaWdobGlnaHQ6IGZhbHNlLFxuICBpbmRlbnQ6IDIsXG4gIG1heERlcHRoOiBJbmZpbml0eSxcbiAgbWluOiBmYWxzZSxcbiAgcGx1Z2luczogW10sXG4gIHByaW50RnVuY3Rpb25OYW1lOiB0cnVlLFxuICB0aGVtZTogREVGQVVMVF9USEVNRVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmICghREVGQVVMVF9PUFRJT05TLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldHR5LWZvcm1hdDogVW5rbm93biBvcHRpb24gXCIke2tleX1cIi5gKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChvcHRpb25zLm1pbiAmJiBvcHRpb25zLmluZGVudCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuaW5kZW50ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3ByZXR0eS1mb3JtYXQ6IE9wdGlvbnMgXCJtaW5cIiBhbmQgXCJpbmRlbnRcIiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4nXG4gICAgKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnRoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAob3B0aW9ucy50aGVtZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV0dHktZm9ybWF0OiBPcHRpb24gXCJ0aGVtZVwiIG11c3Qgbm90IGJlIG51bGwuYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRoZW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcHJldHR5LWZvcm1hdDogT3B0aW9uIFwidGhlbWVcIiBtdXN0IGJlIG9mIHR5cGUgXCJvYmplY3RcIiBidXQgaW5zdGVhZCByZWNlaXZlZCBcIiR7dHlwZW9mIG9wdGlvbnMudGhlbWV9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZ2V0Q29sb3JzSGlnaGxpZ2h0ID0gb3B0aW9ucyA9PlxuICBERUZBVUxUX1RIRU1FX0tFWVMucmVkdWNlKChjb2xvcnMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIG9wdGlvbnMudGhlbWUgJiYgb3B0aW9ucy50aGVtZVtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBvcHRpb25zLnRoZW1lW2tleV1cbiAgICAgICAgOiBERUZBVUxUX1RIRU1FW2tleV07XG4gICAgY29uc3QgY29sb3IgPSB2YWx1ZSAmJiBfYW5zaVN0eWxlcy5kZWZhdWx0W3ZhbHVlXTtcblxuICAgIGlmIChcbiAgICAgIGNvbG9yICYmXG4gICAgICB0eXBlb2YgY29sb3IuY2xvc2UgPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2YgY29sb3Iub3BlbiA9PT0gJ3N0cmluZydcbiAgICApIHtcbiAgICAgIGNvbG9yc1trZXldID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHByZXR0eS1mb3JtYXQ6IE9wdGlvbiBcInRoZW1lXCIgaGFzIGEga2V5IFwiJHtrZXl9XCIgd2hvc2UgdmFsdWUgXCIke3ZhbHVlfVwiIGlzIHVuZGVmaW5lZCBpbiBhbnNpLXN0eWxlcy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjb2xvcnM7XG4gIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBnZXRDb2xvcnNFbXB0eSA9ICgpID0+XG4gIERFRkFVTFRfVEhFTUVfS0VZUy5yZWR1Y2UoKGNvbG9ycywga2V5KSA9PiB7XG4gICAgY29sb3JzW2tleV0gPSB7XG4gICAgICBjbG9zZTogJycsXG4gICAgICBvcGVuOiAnJ1xuICAgIH07XG4gICAgcmV0dXJuIGNvbG9ycztcbiAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGdldFByaW50RnVuY3Rpb25OYW1lID0gb3B0aW9ucyA9PlxuICBvcHRpb25zICYmIG9wdGlvbnMucHJpbnRGdW5jdGlvbk5hbWUgIT09IHVuZGVmaW5lZFxuICAgID8gb3B0aW9ucy5wcmludEZ1bmN0aW9uTmFtZVxuICAgIDogREVGQVVMVF9PUFRJT05TLnByaW50RnVuY3Rpb25OYW1lO1xuXG5jb25zdCBnZXRFc2NhcGVSZWdleCA9IG9wdGlvbnMgPT5cbiAgb3B0aW9ucyAmJiBvcHRpb25zLmVzY2FwZVJlZ2V4ICE9PSB1bmRlZmluZWRcbiAgICA/IG9wdGlvbnMuZXNjYXBlUmVnZXhcbiAgICA6IERFRkFVTFRfT1BUSU9OUy5lc2NhcGVSZWdleDtcblxuY29uc3QgZ2V0RXNjYXBlU3RyaW5nID0gb3B0aW9ucyA9PlxuICBvcHRpb25zICYmIG9wdGlvbnMuZXNjYXBlU3RyaW5nICE9PSB1bmRlZmluZWRcbiAgICA/IG9wdGlvbnMuZXNjYXBlU3RyaW5nXG4gICAgOiBERUZBVUxUX09QVElPTlMuZXNjYXBlU3RyaW5nO1xuXG5jb25zdCBnZXRDb25maWcgPSBvcHRpb25zID0+ICh7XG4gIGNhbGxUb0pTT046XG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLmNhbGxUb0pTT04gIT09IHVuZGVmaW5lZFxuICAgICAgPyBvcHRpb25zLmNhbGxUb0pTT05cbiAgICAgIDogREVGQVVMVF9PUFRJT05TLmNhbGxUb0pTT04sXG4gIGNvbG9yczpcbiAgICBvcHRpb25zICYmIG9wdGlvbnMuaGlnaGxpZ2h0XG4gICAgICA/IGdldENvbG9yc0hpZ2hsaWdodChvcHRpb25zKVxuICAgICAgOiBnZXRDb2xvcnNFbXB0eSgpLFxuICBlc2NhcGVSZWdleDogZ2V0RXNjYXBlUmVnZXgob3B0aW9ucyksXG4gIGVzY2FwZVN0cmluZzogZ2V0RXNjYXBlU3RyaW5nKG9wdGlvbnMpLFxuICBpbmRlbnQ6XG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLm1pblxuICAgICAgPyAnJ1xuICAgICAgOiBjcmVhdGVJbmRlbnQoXG4gICAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmluZGVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG9wdGlvbnMuaW5kZW50XG4gICAgICAgICAgICA6IERFRkFVTFRfT1BUSU9OUy5pbmRlbnRcbiAgICAgICAgKSxcbiAgbWF4RGVwdGg6XG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLm1heERlcHRoICE9PSB1bmRlZmluZWRcbiAgICAgID8gb3B0aW9ucy5tYXhEZXB0aFxuICAgICAgOiBERUZBVUxUX09QVElPTlMubWF4RGVwdGgsXG4gIG1pbjogb3B0aW9ucyAmJiBvcHRpb25zLm1pbiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taW4gOiBERUZBVUxUX09QVElPTlMubWluLFxuICBwbHVnaW5zOlxuICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5wbHVnaW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8gb3B0aW9ucy5wbHVnaW5zXG4gICAgICA6IERFRkFVTFRfT1BUSU9OUy5wbHVnaW5zLFxuICBwcmludEZ1bmN0aW9uTmFtZTogZ2V0UHJpbnRGdW5jdGlvbk5hbWUob3B0aW9ucyksXG4gIHNwYWNpbmdJbm5lcjogb3B0aW9ucyAmJiBvcHRpb25zLm1pbiA/ICcgJyA6ICdcXG4nLFxuICBzcGFjaW5nT3V0ZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5taW4gPyAnJyA6ICdcXG4nXG59KTtcblxuZnVuY3Rpb24gY3JlYXRlSW5kZW50KGluZGVudCkge1xuICByZXR1cm4gbmV3IEFycmF5KGluZGVudCArIDEpLmpvaW4oJyAnKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIHByZXNlbnRhdGlvbiBzdHJpbmcgb2YgeW91ciBgdmFsYCBvYmplY3RcbiAqIEBwYXJhbSB2YWwgYW55IHBvdGVudGlhbCBKYXZhU2NyaXB0IG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMgQ3VzdG9tIHNldHRpbmdzXG4gKi9cblxuZnVuY3Rpb24gcHJldHR5Rm9ybWF0KHZhbCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLnBsdWdpbnMpIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IGZpbmRQbHVnaW4ob3B0aW9ucy5wbHVnaW5zLCB2YWwpO1xuXG4gICAgICBpZiAocGx1Z2luICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcmludFBsdWdpbihwbHVnaW4sIHZhbCwgZ2V0Q29uZmlnKG9wdGlvbnMpLCAnJywgMCwgW10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJhc2ljUmVzdWx0ID0gcHJpbnRCYXNpY1ZhbHVlKFxuICAgIHZhbCxcbiAgICBnZXRQcmludEZ1bmN0aW9uTmFtZShvcHRpb25zKSxcbiAgICBnZXRFc2NhcGVSZWdleChvcHRpb25zKSxcbiAgICBnZXRFc2NhcGVTdHJpbmcob3B0aW9ucylcbiAgKTtcblxuICBpZiAoYmFzaWNSZXN1bHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYmFzaWNSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gcHJpbnRDb21wbGV4VmFsdWUodmFsLCBnZXRDb25maWcob3B0aW9ucyksICcnLCAwLCBbXSk7XG59XG5cbnByZXR0eUZvcm1hdC5wbHVnaW5zID0ge1xuICBBc3ltbWV0cmljTWF0Y2hlcjogX0FzeW1tZXRyaWNNYXRjaGVyLmRlZmF1bHQsXG4gIENvbnZlcnRBbnNpOiBfQ29udmVydEFuc2kuZGVmYXVsdCxcbiAgRE9NQ29sbGVjdGlvbjogX0RPTUNvbGxlY3Rpb24uZGVmYXVsdCxcbiAgRE9NRWxlbWVudDogX0RPTUVsZW1lbnQuZGVmYXVsdCxcbiAgSW1tdXRhYmxlOiBfSW1tdXRhYmxlLmRlZmF1bHQsXG4gIFJlYWN0RWxlbWVudDogX1JlYWN0RWxlbWVudC5kZWZhdWx0LFxuICBSZWFjdFRlc3RDb21wb25lbnQ6IF9SZWFjdFRlc3RDb21wb25lbnQuZGVmYXVsdFxufTtcbm1vZHVsZS5leHBvcnRzID0gcHJldHR5Rm9ybWF0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgcmdiID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmdiWzBdfTske3JnYlsxXX07JHtyZ2JbMl19bWA7XG59O1xuXG5jb25zdCBhbnNpMmFuc2kgPSBuID0+IG47XG5jb25zdCByZ2IycmdiID0gKHIsIGcsIGIpID0+IFtyLCBnLCBiXTtcblxuY29uc3Qgc2V0TGF6eVByb3BlcnR5ID0gKG9iamVjdCwgcHJvcGVydHksIGdldCkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoKTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdH0pO1xufTtcblxuLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCdjb2xvci1jb252ZXJ0Jyl9ICovXG5sZXQgY29sb3JDb252ZXJ0O1xuY29uc3QgbWFrZUR5bmFtaWNTdHlsZXMgPSAod3JhcCwgdGFyZ2V0U3BhY2UsIGlkZW50aXR5LCBpc0JhY2tncm91bmQpID0+IHtcblx0aWYgKGNvbG9yQ29udmVydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29sb3JDb252ZXJ0ID0gcmVxdWlyZSgnY29sb3ItY29udmVydCcpO1xuXHR9XG5cblx0Y29uc3Qgb2Zmc2V0ID0gaXNCYWNrZ3JvdW5kID8gMTAgOiAwO1xuXHRjb25zdCBzdHlsZXMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IFtzb3VyY2VTcGFjZSwgc3VpdGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbG9yQ29udmVydCkpIHtcblx0XHRjb25zdCBuYW1lID0gc291cmNlU3BhY2UgPT09ICdhbnNpMTYnID8gJ2Fuc2knIDogc291cmNlU3BhY2U7XG5cdFx0aWYgKHNvdXJjZVNwYWNlID09PSB0YXJnZXRTcGFjZSkge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChpZGVudGl0eSwgb2Zmc2V0KTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzdWl0ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoc3VpdGVbdGFyZ2V0U3BhY2VdLCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIHRydWUpKTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG4vLyBNYWtlIHRoZSBleHBvcnQgaW1tdXRhYmxlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0Z2V0OiBhc3NlbWJsZVN0eWxlc1xufSk7XG4iLCJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcbmNvbnN0IHJvdXRlID0gcmVxdWlyZSgnLi9yb3V0ZScpO1xuXG5jb25zdCBjb252ZXJ0ID0ge307XG5cbmNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuZnVuY3Rpb24gd3JhcFJhdyhmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZuKGFyZ3MpO1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxuZnVuY3Rpb24gd3JhcFJvdW5kZWQoZm4pIHtcblx0Y29uc3Qgd3JhcHBlZEZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRjb25zdCBhcmcwID0gYXJnc1swXTtcblxuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gZm4oYXJncyk7XG5cblx0XHQvLyBXZSdyZSBhc3N1bWluZyB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IGhlcmUuXG5cdFx0Ly8gc2VlIG5vdGljZSBpbiBjb252ZXJzaW9ucy5qczsgZG9uJ3QgdXNlIGJveCB0eXBlc1xuXHRcdC8vIGluIGNvbnZlcnNpb24gZnVuY3Rpb25zLlxuXHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Zm9yIChsZXQgbGVuID0gcmVzdWx0Lmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRyZXN1bHRbaV0gPSBNYXRoLnJvdW5kKHJlc3VsdFtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyBQcmVzZXJ2ZSAuY29udmVyc2lvbiBwcm9wZXJ0eSBpZiB0aGVyZSBpcyBvbmVcblx0aWYgKCdjb252ZXJzaW9uJyBpbiBmbikge1xuXHRcdHdyYXBwZWRGbi5jb252ZXJzaW9uID0gZm4uY29udmVyc2lvbjtcblx0fVxuXG5cdHJldHVybiB3cmFwcGVkRm47XG59XG5cbm1vZGVscy5mb3JFYWNoKGZyb21Nb2RlbCA9PiB7XG5cdGNvbnZlcnRbZnJvbU1vZGVsXSA9IHt9O1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5jaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmxhYmVsc30pO1xuXG5cdGNvbnN0IHJvdXRlcyA9IHJvdXRlKGZyb21Nb2RlbCk7XG5cdGNvbnN0IHJvdXRlTW9kZWxzID0gT2JqZWN0LmtleXMocm91dGVzKTtcblxuXHRyb3V0ZU1vZGVscy5mb3JFYWNoKHRvTW9kZWwgPT4ge1xuXHRcdGNvbnN0IGZuID0gcm91dGVzW3RvTW9kZWxdO1xuXG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdID0gd3JhcFJvdW5kZWQoZm4pO1xuXHRcdGNvbnZlcnRbZnJvbU1vZGVsXVt0b01vZGVsXS5yYXcgPSB3cmFwUmF3KGZuKTtcblx0fSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuIiwiLyogTUlUIGxpY2Vuc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1peGVkLW9wZXJhdG9ycyAqL1xuY29uc3QgY3NzS2V5d29yZHMgPSByZXF1aXJlKCdjb2xvci1uYW1lJyk7XG5cbi8vIE5PVEU6IGNvbnZlcnNpb25zIHNob3VsZCBvbmx5IHJldHVybiBwcmltaXRpdmUgdmFsdWVzIChpLmUuIGFycmF5cywgb3Jcbi8vICAgICAgIHZhbHVlcyB0aGF0IGdpdmUgY29ycmVjdCBgdHlwZW9mYCByZXN1bHRzKS5cbi8vICAgICAgIGRvIG5vdCB1c2UgYm94IHZhbHVlcyB0eXBlcyAoaS5lLiBOdW1iZXIoKSwgU3RyaW5nKCksIGV0Yy4pXG5cbmNvbnN0IHJldmVyc2VLZXl3b3JkcyA9IHt9O1xuZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdHJldmVyc2VLZXl3b3Jkc1tjc3NLZXl3b3Jkc1trZXldXSA9IGtleTtcbn1cblxuY29uc3QgY29udmVydCA9IHtcblx0cmdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3JnYid9LFxuXHRoc2w6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHNsJ30sXG5cdGhzdjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc3YnfSxcblx0aHdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2h3Yid9LFxuXHRjbXlrOiB7Y2hhbm5lbHM6IDQsIGxhYmVsczogJ2NteWsnfSxcblx0eHl6OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3h5eid9LFxuXHRsYWI6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGFiJ30sXG5cdGxjaDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsY2gnfSxcblx0aGV4OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydoZXgnXX0sXG5cdGtleXdvcmQ6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2tleXdvcmQnXX0sXG5cdGFuc2kxNjoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTE2J119LFxuXHRhbnNpMjU2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMjU2J119LFxuXHRoY2c6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ2gnLCAnYycsICdnJ119LFxuXHRhcHBsZToge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsncjE2JywgJ2cxNicsICdiMTYnXX0sXG5cdGdyYXk6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2dyYXknXX1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDtcblxuLy8gSGlkZSAuY2hhbm5lbHMgYW5kIC5sYWJlbHMgcHJvcGVydGllc1xuZm9yIChjb25zdCBtb2RlbCBvZiBPYmplY3Qua2V5cyhjb252ZXJ0KSkge1xuXHRpZiAoISgnY2hhbm5lbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmICghKCdsYWJlbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVsIGxhYmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmIChjb252ZXJ0W21vZGVsXS5sYWJlbHMubGVuZ3RoICE9PSBjb252ZXJ0W21vZGVsXS5jaGFubmVscykge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2hhbm5lbCBhbmQgbGFiZWwgY291bnRzIG1pc21hdGNoOiAnICsgbW9kZWwpO1xuXHR9XG5cblx0Y29uc3Qge2NoYW5uZWxzLCBsYWJlbHN9ID0gY29udmVydFttb2RlbF07XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5jaGFubmVscztcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmxhYmVscztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnY2hhbm5lbHMnLCB7dmFsdWU6IGNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2xhYmVscycsIHt2YWx1ZTogbGFiZWxzfSk7XG59XG5cbmNvbnZlcnQucmdiLmhzbCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkZWx0YSA9IG1heCAtIG1pbjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdGggPSAwO1xuXHR9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuXHRcdGggPSAoZyAtIGIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoZyA9PT0gbWF4KSB7XG5cdFx0aCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoYiA9PT0gbWF4KSB7XG5cdFx0aCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cdH1cblxuXHRoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgbCA9IChtaW4gKyBtYXgpIC8gMjtcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRzID0gMDtcblx0fSBlbHNlIGlmIChsIDw9IDAuNSkge1xuXHRcdHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcblx0fVxuXG5cdHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5oc3YgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByZGlmO1xuXHRsZXQgZ2RpZjtcblx0bGV0IGJkaWY7XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCB2ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRpZmYgPSB2IC0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IGRpZmZjID0gZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gKHYgLSBjKSAvIDYgLyBkaWZmICsgMSAvIDI7XG5cdH07XG5cblx0aWYgKGRpZmYgPT09IDApIHtcblx0XHRoID0gMDtcblx0XHRzID0gMDtcblx0fSBlbHNlIHtcblx0XHRzID0gZGlmZiAvIHY7XG5cdFx0cmRpZiA9IGRpZmZjKHIpO1xuXHRcdGdkaWYgPSBkaWZmYyhnKTtcblx0XHRiZGlmID0gZGlmZmMoYik7XG5cblx0XHRpZiAociA9PT0gdikge1xuXHRcdFx0aCA9IGJkaWYgLSBnZGlmO1xuXHRcdH0gZWxzZSBpZiAoZyA9PT0gdikge1xuXHRcdFx0aCA9ICgxIC8gMykgKyByZGlmIC0gYmRpZjtcblx0XHR9IGVsc2UgaWYgKGIgPT09IHYpIHtcblx0XHRcdGggPSAoMiAvIDMpICsgZ2RpZiAtIHJkaWY7XG5cdFx0fVxuXG5cdFx0aWYgKGggPCAwKSB7XG5cdFx0XHRoICs9IDE7XG5cdFx0fSBlbHNlIGlmIChoID4gMSkge1xuXHRcdFx0aCAtPSAxO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBbXG5cdFx0aCAqIDM2MCxcblx0XHRzICogMTAwLFxuXHRcdHYgKiAxMDBcblx0XTtcbn07XG5cbmNvbnZlcnQucmdiLmh3YiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXTtcblx0Y29uc3QgZyA9IHJnYlsxXTtcblx0bGV0IGIgPSByZ2JbMl07XG5cdGNvbnN0IGggPSBjb252ZXJ0LnJnYi5oc2wocmdiKVswXTtcblx0Y29uc3QgdyA9IDEgLyAyNTUgKiBNYXRoLm1pbihyLCBNYXRoLm1pbihnLCBiKSk7XG5cblx0YiA9IDEgLSAxIC8gMjU1ICogTWF0aC5tYXgociwgTWF0aC5tYXgoZywgYikpO1xuXG5cdHJldHVybiBbaCwgdyAqIDEwMCwgYiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5jbXlrID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdGNvbnN0IGsgPSBNYXRoLm1pbigxIC0gciwgMSAtIGcsIDEgLSBiKTtcblx0Y29uc3QgYyA9ICgxIC0gciAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCBtID0gKDEgLSBnIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IHkgPSAoMSAtIGIgLSBrKSAvICgxIC0gaykgfHwgMDtcblxuXHRyZXR1cm4gW2MgKiAxMDAsIG0gKiAxMDAsIHkgKiAxMDAsIGsgKiAxMDBdO1xufTtcblxuZnVuY3Rpb24gY29tcGFyYXRpdmVEaXN0YW5jZSh4LCB5KSB7XG5cdC8qXG5cdFx0U2VlIGh0dHBzOi8vZW4ubS53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2Rpc3RhbmNlI1NxdWFyZWRfRXVjbGlkZWFuX2Rpc3RhbmNlXG5cdCovXG5cdHJldHVybiAoXG5cdFx0KCh4WzBdIC0geVswXSkgKiogMikgK1xuXHRcdCgoeFsxXSAtIHlbMV0pICoqIDIpICtcblx0XHQoKHhbMl0gLSB5WzJdKSAqKiAyKVxuXHQpO1xufVxuXG5jb252ZXJ0LnJnYi5rZXl3b3JkID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByZXZlcnNlZCA9IHJldmVyc2VLZXl3b3Jkc1tyZ2JdO1xuXHRpZiAocmV2ZXJzZWQpIHtcblx0XHRyZXR1cm4gcmV2ZXJzZWQ7XG5cdH1cblxuXHRsZXQgY3VycmVudENsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuXHRsZXQgY3VycmVudENsb3Nlc3RLZXl3b3JkO1xuXG5cdGZvciAoY29uc3Qga2V5d29yZCBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0XHRjb25zdCB2YWx1ZSA9IGNzc0tleXdvcmRzW2tleXdvcmRdO1xuXG5cdFx0Ly8gQ29tcHV0ZSBjb21wYXJhdGl2ZSBkaXN0YW5jZVxuXHRcdGNvbnN0IGRpc3RhbmNlID0gY29tcGFyYXRpdmVEaXN0YW5jZShyZ2IsIHZhbHVlKTtcblxuXHRcdC8vIENoZWNrIGlmIGl0cyBsZXNzLCBpZiBzbyBzZXQgYXMgY2xvc2VzdFxuXHRcdGlmIChkaXN0YW5jZSA8IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UpIHtcblx0XHRcdGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHRcdGN1cnJlbnRDbG9zZXN0S2V5d29yZCA9IGtleXdvcmQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcbn07XG5cbmNvbnZlcnQua2V5d29yZC5yZ2IgPSBmdW5jdGlvbiAoa2V5d29yZCkge1xuXHRyZXR1cm4gY3NzS2V5d29yZHNba2V5d29yZF07XG59O1xuXG5jb252ZXJ0LnJnYi54eXogPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByID0gcmdiWzBdIC8gMjU1O1xuXHRsZXQgZyA9IHJnYlsxXSAvIDI1NTtcblx0bGV0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjA0MDQ1ID8gKCgociArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKHIgLyAxMi45Mik7XG5cdGcgPSBnID4gMC4wNDA0NSA/ICgoKGcgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChnIC8gMTIuOTIpO1xuXHRiID0gYiA+IDAuMDQwNDUgPyAoKChiICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoYiAvIDEyLjkyKTtcblxuXHRjb25zdCB4ID0gKHIgKiAwLjQxMjQpICsgKGcgKiAwLjM1NzYpICsgKGIgKiAwLjE4MDUpO1xuXHRjb25zdCB5ID0gKHIgKiAwLjIxMjYpICsgKGcgKiAwLjcxNTIpICsgKGIgKiAwLjA3MjIpO1xuXHRjb25zdCB6ID0gKHIgKiAwLjAxOTMpICsgKGcgKiAwLjExOTIpICsgKGIgKiAwLjk1MDUpO1xuXG5cdHJldHVybiBbeCAqIDEwMCwgeSAqIDEwMCwgeiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5sYWIgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHh5eiA9IGNvbnZlcnQucmdiLnh5eihyZ2IpO1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQuaHNsLnJnYiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXSAvIDM2MDtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHQyO1xuXHRsZXQgdDM7XG5cdGxldCB2YWw7XG5cblx0aWYgKHMgPT09IDApIHtcblx0XHR2YWwgPSBsICogMjU1O1xuXHRcdHJldHVybiBbdmFsLCB2YWwsIHZhbF07XG5cdH1cblxuXHRpZiAobCA8IDAuNSkge1xuXHRcdHQyID0gbCAqICgxICsgcyk7XG5cdH0gZWxzZSB7XG5cdFx0dDIgPSBsICsgcyAtIGwgKiBzO1xuXHR9XG5cblx0Y29uc3QgdDEgPSAyICogbCAtIHQyO1xuXG5cdGNvbnN0IHJnYiA9IFswLCAwLCAwXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHR0MyA9IGggKyAxIC8gMyAqIC0oaSAtIDEpO1xuXHRcdGlmICh0MyA8IDApIHtcblx0XHRcdHQzKys7XG5cdFx0fVxuXG5cdFx0aWYgKHQzID4gMSkge1xuXHRcdFx0dDMtLTtcblx0XHR9XG5cblx0XHRpZiAoNiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7XG5cdFx0fSBlbHNlIGlmICgyICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0Mjtcblx0XHR9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsID0gdDE7XG5cdFx0fVxuXG5cdFx0cmdiW2ldID0gdmFsICogMjU1O1xuXHR9XG5cblx0cmV0dXJuIHJnYjtcbn07XG5cbmNvbnZlcnQuaHNsLmhzdiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXTtcblx0bGV0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGxldCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgc21pbiA9IHM7XG5cdGNvbnN0IGxtaW4gPSBNYXRoLm1heChsLCAwLjAxKTtcblxuXHRsICo9IDI7XG5cdHMgKj0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG5cdHNtaW4gKj0gbG1pbiA8PSAxID8gbG1pbiA6IDIgLSBsbWluO1xuXHRjb25zdCB2ID0gKGwgKyBzKSAvIDI7XG5cdGNvbnN0IHN2ID0gbCA9PT0gMCA/ICgyICogc21pbikgLyAobG1pbiArIHNtaW4pIDogKDIgKiBzKSAvIChsICsgcyk7XG5cblx0cmV0dXJuIFtoLCBzdiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5yZ2IgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF0gLyA2MDtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0bGV0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IGhpID0gTWF0aC5mbG9vcihoKSAlIDY7XG5cblx0Y29uc3QgZiA9IGggLSBNYXRoLmZsb29yKGgpO1xuXHRjb25zdCBwID0gMjU1ICogdiAqICgxIC0gcyk7XG5cdGNvbnN0IHEgPSAyNTUgKiB2ICogKDEgLSAocyAqIGYpKTtcblx0Y29uc3QgdCA9IDI1NSAqIHYgKiAoMSAtIChzICogKDEgLSBmKSkpO1xuXHR2ICo9IDI1NTtcblxuXHRzd2l0Y2ggKGhpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cmV0dXJuIFt2LCB0LCBwXTtcblx0XHRjYXNlIDE6XG5cdFx0XHRyZXR1cm4gW3EsIHYsIHBdO1xuXHRcdGNhc2UgMjpcblx0XHRcdHJldHVybiBbcCwgdiwgdF07XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cmV0dXJuIFtwLCBxLCB2XTtcblx0XHRjYXNlIDQ6XG5cdFx0XHRyZXR1cm4gW3QsIHAsIHZdO1xuXHRcdGNhc2UgNTpcblx0XHRcdHJldHVybiBbdiwgcCwgcV07XG5cdH1cbn07XG5cbmNvbnZlcnQuaHN2LmhzbCA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXTtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3Qgdm1pbiA9IE1hdGgubWF4KHYsIDAuMDEpO1xuXHRsZXQgc2w7XG5cdGxldCBsO1xuXG5cdGwgPSAoMiAtIHMpICogdjtcblx0Y29uc3QgbG1pbiA9ICgyIC0gcykgKiB2bWluO1xuXHRzbCA9IHMgKiB2bWluO1xuXHRzbCAvPSAobG1pbiA8PSAxKSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0c2wgPSBzbCB8fCAwO1xuXHRsIC89IDI7XG5cblx0cmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG4vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtY29sb3IvI2h3Yi10by1yZ2JcbmNvbnZlcnQuaHdiLnJnYiA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgaCA9IGh3YlswXSAvIDM2MDtcblx0bGV0IHdoID0gaHdiWzFdIC8gMTAwO1xuXHRsZXQgYmwgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHJhdGlvID0gd2ggKyBibDtcblx0bGV0IGY7XG5cblx0Ly8gV2ggKyBibCBjYW50IGJlID4gMVxuXHRpZiAocmF0aW8gPiAxKSB7XG5cdFx0d2ggLz0gcmF0aW87XG5cdFx0YmwgLz0gcmF0aW87XG5cdH1cblxuXHRjb25zdCBpID0gTWF0aC5mbG9vcig2ICogaCk7XG5cdGNvbnN0IHYgPSAxIC0gYmw7XG5cdGYgPSA2ICogaCAtIGk7XG5cblx0aWYgKChpICYgMHgwMSkgIT09IDApIHtcblx0XHRmID0gMSAtIGY7XG5cdH1cblxuXHRjb25zdCBuID0gd2ggKyBmICogKHYgLSB3aCk7IC8vIExpbmVhciBpbnRlcnBvbGF0aW9uXG5cblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cdHN3aXRjaCAoaSkge1xuXHRcdGRlZmF1bHQ6XG5cdFx0Y2FzZSA2OlxuXHRcdGNhc2UgMDogciA9IHY7ICBnID0gbjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAxOiByID0gbjsgIGcgPSB2OyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDI6IHIgPSB3aDsgZyA9IHY7ICBiID0gbjsgYnJlYWs7XG5cdFx0Y2FzZSAzOiByID0gd2g7IGcgPSBuOyAgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNDogciA9IG47ICBnID0gd2g7IGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDU6IHIgPSB2OyAgZyA9IHdoOyBiID0gbjsgYnJlYWs7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC5jbXlrLnJnYiA9IGZ1bmN0aW9uIChjbXlrKSB7XG5cdGNvbnN0IGMgPSBjbXlrWzBdIC8gMTAwO1xuXHRjb25zdCBtID0gY215a1sxXSAvIDEwMDtcblx0Y29uc3QgeSA9IGNteWtbMl0gLyAxMDA7XG5cdGNvbnN0IGsgPSBjbXlrWzNdIC8gMTAwO1xuXG5cdGNvbnN0IHIgPSAxIC0gTWF0aC5taW4oMSwgYyAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgZyA9IDEgLSBNYXRoLm1pbigxLCBtICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBiID0gMSAtIE1hdGgubWluKDEsIHkgKiAoMSAtIGspICsgayk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LnJnYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0Y29uc3QgeCA9IHh5elswXSAvIDEwMDtcblx0Y29uc3QgeSA9IHh5elsxXSAvIDEwMDtcblx0Y29uc3QgeiA9IHh5elsyXSAvIDEwMDtcblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblxuXHRyID0gKHggKiAzLjI0MDYpICsgKHkgKiAtMS41MzcyKSArICh6ICogLTAuNDk4Nik7XG5cdGcgPSAoeCAqIC0wLjk2ODkpICsgKHkgKiAxLjg3NTgpICsgKHogKiAwLjA0MTUpO1xuXHRiID0gKHggKiAwLjA1NTcpICsgKHkgKiAtMC4yMDQwKSArICh6ICogMS4wNTcwKTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChyICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IHIgKiAxMi45MjtcblxuXHRnID0gZyA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChnICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGcgKiAxMi45MjtcblxuXHRiID0gYiA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChiICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGIgKiAxMi45MjtcblxuXHRyID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgciksIDEpO1xuXHRnID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZyksIDEpO1xuXHRiID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgYiksIDEpO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5sYWIgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5sYWIueHl6ID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgeDtcblx0bGV0IHk7XG5cdGxldCB6O1xuXG5cdHkgPSAobCArIDE2KSAvIDExNjtcblx0eCA9IGEgLyA1MDAgKyB5O1xuXHR6ID0geSAtIGIgLyAyMDA7XG5cblx0Y29uc3QgeTIgPSB5ICoqIDM7XG5cdGNvbnN0IHgyID0geCAqKiAzO1xuXHRjb25zdCB6MiA9IHogKiogMztcblx0eSA9IHkyID4gMC4wMDg4NTYgPyB5MiA6ICh5IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHggPSB4MiA+IDAuMDA4ODU2ID8geDIgOiAoeCAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR6ID0gejIgPiAwLjAwODg1NiA/IHoyIDogKHogLSAxNiAvIDExNikgLyA3Ljc4NztcblxuXHR4ICo9IDk1LjA0Nztcblx0eSAqPSAxMDA7XG5cdHogKj0gMTA4Ljg4MztcblxuXHRyZXR1cm4gW3gsIHksIHpdO1xufTtcblxuY29udmVydC5sYWIubGNoID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgaDtcblxuXHRjb25zdCBociA9IE1hdGguYXRhbjIoYiwgYSk7XG5cdGggPSBociAqIDM2MCAvIDIgLyBNYXRoLlBJO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgYyA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcblxuXHRyZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuY29udmVydC5sY2gubGFiID0gZnVuY3Rpb24gKGxjaCkge1xuXHRjb25zdCBsID0gbGNoWzBdO1xuXHRjb25zdCBjID0gbGNoWzFdO1xuXHRjb25zdCBoID0gbGNoWzJdO1xuXG5cdGNvbnN0IGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xuXHRjb25zdCBhID0gYyAqIE1hdGguY29zKGhyKTtcblx0Y29uc3QgYiA9IGMgKiBNYXRoLnNpbihocik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzLCBzYXR1cmF0aW9uID0gbnVsbCkge1xuXHRjb25zdCBbciwgZywgYl0gPSBhcmdzO1xuXHRsZXQgdmFsdWUgPSBzYXR1cmF0aW9uID09PSBudWxsID8gY29udmVydC5yZ2IuaHN2KGFyZ3MpWzJdIDogc2F0dXJhdGlvbjsgLy8gSHN2IC0+IGFuc2kxNiBvcHRpbWl6YXRpb25cblxuXHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyA1MCk7XG5cblx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0cmV0dXJuIDMwO1xuXHR9XG5cblx0bGV0IGFuc2kgPSAzMFxuXHRcdCsgKChNYXRoLnJvdW5kKGIgLyAyNTUpIDw8IDIpXG5cdFx0fCAoTWF0aC5yb3VuZChnIC8gMjU1KSA8PCAxKVxuXHRcdHwgTWF0aC5yb3VuZChyIC8gMjU1KSk7XG5cblx0aWYgKHZhbHVlID09PSAyKSB7XG5cdFx0YW5zaSArPSA2MDtcblx0fVxuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5oc3YuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gT3B0aW1pemF0aW9uIGhlcmU7IHdlIGFscmVhZHkga25vdyB0aGUgdmFsdWUgYW5kIGRvbid0IG5lZWQgdG8gZ2V0XG5cdC8vIGl0IGNvbnZlcnRlZCBmb3IgdXMuXG5cdHJldHVybiBjb252ZXJ0LnJnYi5hbnNpMTYoY29udmVydC5oc3YucmdiKGFyZ3MpLCBhcmdzWzJdKTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kyNTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCByID0gYXJnc1swXTtcblx0Y29uc3QgZyA9IGFyZ3NbMV07XG5cdGNvbnN0IGIgPSBhcmdzWzJdO1xuXG5cdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRpZiAociA9PT0gZyAmJiBnID09PSBiKSB7XG5cdFx0aWYgKHIgPCA4KSB7XG5cdFx0XHRyZXR1cm4gMTY7XG5cdFx0fVxuXG5cdFx0aWYgKHIgPiAyNDgpIHtcblx0XHRcdHJldHVybiAyMzE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIE1hdGgucm91bmQoKChyIC0gOCkgLyAyNDcpICogMjQpICsgMjMyO1xuXHR9XG5cblx0Y29uc3QgYW5zaSA9IDE2XG5cdFx0KyAoMzYgKiBNYXRoLnJvdW5kKHIgLyAyNTUgKiA1KSlcblx0XHQrICg2ICogTWF0aC5yb3VuZChnIC8gMjU1ICogNSkpXG5cdFx0KyBNYXRoLnJvdW5kKGIgLyAyNTUgKiA1KTtcblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuYW5zaTE2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGxldCBjb2xvciA9IGFyZ3MgJSAxMDtcblxuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChjb2xvciA9PT0gMCB8fCBjb2xvciA9PT0gNykge1xuXHRcdGlmIChhcmdzID4gNTApIHtcblx0XHRcdGNvbG9yICs9IDMuNTtcblx0XHR9XG5cblx0XHRjb2xvciA9IGNvbG9yIC8gMTAuNSAqIDI1NTtcblxuXHRcdHJldHVybiBbY29sb3IsIGNvbG9yLCBjb2xvcl07XG5cdH1cblxuXHRjb25zdCBtdWx0ID0gKH5+KGFyZ3MgPiA1MCkgKyAxKSAqIDAuNTtcblx0Y29uc3QgciA9ICgoY29sb3IgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBnID0gKCgoY29sb3IgPj4gMSkgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBiID0gKCgoY29sb3IgPj4gMikgJiAxKSAqIG11bHQpICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LmFuc2kyNTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoYXJncyA+PSAyMzIpIHtcblx0XHRjb25zdCBjID0gKGFyZ3MgLSAyMzIpICogMTAgKyA4O1xuXHRcdHJldHVybiBbYywgYywgY107XG5cdH1cblxuXHRhcmdzIC09IDE2O1xuXG5cdGxldCByZW07XG5cdGNvbnN0IHIgPSBNYXRoLmZsb29yKGFyZ3MgLyAzNikgLyA1ICogMjU1O1xuXHRjb25zdCBnID0gTWF0aC5mbG9vcigocmVtID0gYXJncyAlIDM2KSAvIDYpIC8gNSAqIDI1NTtcblx0Y29uc3QgYiA9IChyZW0gJSA2KSAvIDUgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhleCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IGludGVnZXIgPSAoKE1hdGgucm91bmQoYXJnc1swXSkgJiAweEZGKSA8PCAxNilcblx0XHQrICgoTWF0aC5yb3VuZChhcmdzWzFdKSAmIDB4RkYpIDw8IDgpXG5cdFx0KyAoTWF0aC5yb3VuZChhcmdzWzJdKSAmIDB4RkYpO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LmhleC5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBtYXRjaCA9IGFyZ3MudG9TdHJpbmcoMTYpLm1hdGNoKC9bYS1mMC05XXs2fXxbYS1mMC05XXszfS9pKTtcblx0aWYgKCFtYXRjaCkge1xuXHRcdHJldHVybiBbMCwgMCwgMF07XG5cdH1cblxuXHRsZXQgY29sb3JTdHJpbmcgPSBtYXRjaFswXTtcblxuXHRpZiAobWF0Y2hbMF0ubGVuZ3RoID09PSAzKSB7XG5cdFx0Y29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5zcGxpdCgnJykubWFwKGNoYXIgPT4ge1xuXHRcdFx0cmV0dXJuIGNoYXIgKyBjaGFyO1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0Y29uc3QgaW50ZWdlciA9IHBhcnNlSW50KGNvbG9yU3RyaW5nLCAxNik7XG5cdGNvbnN0IHIgPSAoaW50ZWdlciA+PiAxNikgJiAweEZGO1xuXHRjb25zdCBnID0gKGludGVnZXIgPj4gOCkgJiAweEZGO1xuXHRjb25zdCBiID0gaW50ZWdlciAmIDB4RkY7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhjZyA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgoTWF0aC5tYXgociwgZyksIGIpO1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihNYXRoLm1pbihyLCBnKSwgYik7XG5cdGNvbnN0IGNocm9tYSA9IChtYXggLSBtaW4pO1xuXHRsZXQgZ3JheXNjYWxlO1xuXHRsZXQgaHVlO1xuXG5cdGlmIChjaHJvbWEgPCAxKSB7XG5cdFx0Z3JheXNjYWxlID0gbWluIC8gKDEgLSBjaHJvbWEpO1xuXHR9IGVsc2Uge1xuXHRcdGdyYXlzY2FsZSA9IDA7XG5cdH1cblxuXHRpZiAoY2hyb21hIDw9IDApIHtcblx0XHRodWUgPSAwO1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gcikge1xuXHRcdGh1ZSA9ICgoZyAtIGIpIC8gY2hyb21hKSAlIDY7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSBnKSB7XG5cdFx0aHVlID0gMiArIChiIC0gcikgLyBjaHJvbWE7XG5cdH0gZWxzZSB7XG5cdFx0aHVlID0gNCArIChyIC0gZykgLyBjaHJvbWE7XG5cdH1cblxuXHRodWUgLz0gNjtcblx0aHVlICU9IDE7XG5cblx0cmV0dXJuIFtodWUgKiAzNjAsIGNocm9tYSAqIDEwMCwgZ3JheXNjYWxlICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHNsLmhjZyA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gbCA8IDAuNSA/ICgyLjAgKiBzICogbCkgOiAoMi4wICogcyAqICgxLjAgLSBsKSk7XG5cblx0bGV0IGYgPSAwO1xuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAobCAtIDAuNSAqIGMpIC8gKDEuMCAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc2xbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YuaGNnID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBzICogdjtcblx0bGV0IGYgPSAwO1xuXG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc3ZbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cucmdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBoID0gaGNnWzBdIC8gMzYwO1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGlmIChjID09PSAwLjApIHtcblx0XHRyZXR1cm4gW2cgKiAyNTUsIGcgKiAyNTUsIGcgKiAyNTVdO1xuXHR9XG5cblx0Y29uc3QgcHVyZSA9IFswLCAwLCAwXTtcblx0Y29uc3QgaGkgPSAoaCAlIDEpICogNjtcblx0Y29uc3QgdiA9IGhpICUgMTtcblx0Y29uc3QgdyA9IDEgLSB2O1xuXHRsZXQgbWcgPSAwO1xuXG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cdHN3aXRjaCAoTWF0aC5mbG9vcihoaSkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IHY7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDE6XG5cdFx0XHRwdXJlWzBdID0gdzsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSB2OyBicmVhaztcblx0XHRjYXNlIDM6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IHc7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRjYXNlIDQ6XG5cdFx0XHRwdXJlWzBdID0gdjsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gdztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cblx0bWcgPSAoMS4wIC0gYykgKiBnO1xuXG5cdHJldHVybiBbXG5cdFx0KGMgKiBwdXJlWzBdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsxXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMl0gKyBtZykgKiAyNTVcblx0XTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzdiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdGxldCBmID0gMDtcblxuXHRpZiAodiA+IDAuMCkge1xuXHRcdGYgPSBjIC8gdjtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBmICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzbCA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCBsID0gZyAqICgxLjAgLSBjKSArIDAuNSAqIGM7XG5cdGxldCBzID0gMDtcblxuXHRpZiAobCA+IDAuMCAmJiBsIDwgMC41KSB7XG5cdFx0cyA9IGMgLyAoMiAqIGwpO1xuXHR9IGVsc2Vcblx0aWYgKGwgPj0gMC41ICYmIGwgPCAxLjApIHtcblx0XHRzID0gYyAvICgyICogKDEgLSBsKSk7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5od2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0cmV0dXJuIFtoY2dbMF0sICh2IC0gYykgKiAxMDAsICgxIC0gdikgKiAxMDBdO1xufTtcblxuY29udmVydC5od2IuaGNnID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCB3ID0gaHdiWzFdIC8gMTAwO1xuXHRjb25zdCBiID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gMSAtIGI7XG5cdGNvbnN0IGMgPSB2IC0gdztcblx0bGV0IGcgPSAwO1xuXG5cdGlmIChjIDwgMSkge1xuXHRcdGcgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHdiWzBdLCBjICogMTAwLCBnICogMTAwXTtcbn07XG5cbmNvbnZlcnQuYXBwbGUucmdiID0gZnVuY3Rpb24gKGFwcGxlKSB7XG5cdHJldHVybiBbKGFwcGxlWzBdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMV0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsyXSAvIDY1NTM1KSAqIDI1NV07XG59O1xuXG5jb252ZXJ0LnJnYi5hcHBsZSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0cmV0dXJuIFsocmdiWzBdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzFdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzJdIC8gMjU1KSAqIDY1NTM1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gW2FyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTVdO1xufTtcblxuY29udmVydC5ncmF5LmhzbCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbMCwgMCwgYXJnc1swXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHN2ID0gY29udmVydC5ncmF5LmhzbDtcblxuY29udmVydC5ncmF5Lmh3YiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMTAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5jbXlrID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAwLCAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5sYWIgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gW2dyYXlbMF0sIDAsIDBdO1xufTtcblxuY29udmVydC5ncmF5LmhleCA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdGNvbnN0IHZhbCA9IE1hdGgucm91bmQoZ3JheVswXSAvIDEwMCAqIDI1NSkgJiAweEZGO1xuXHRjb25zdCBpbnRlZ2VyID0gKHZhbCA8PCAxNikgKyAodmFsIDw8IDgpICsgdmFsO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LnJnYi5ncmF5ID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB2YWwgPSAocmdiWzBdICsgcmdiWzFdICsgcmdiWzJdKSAvIDM7XG5cdHJldHVybiBbdmFsIC8gMjU1ICogMTAwXTtcbn07XG4iLCIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuIiwiY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKCcuL2NvbnZlcnNpb25zJyk7XG5cbi8qXG5cdFRoaXMgZnVuY3Rpb24gcm91dGVzIGEgbW9kZWwgdG8gYWxsIG90aGVyIG1vZGVscy5cblxuXHRhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIHJvdXRlZCBoYXZlIGEgcHJvcGVydHkgYC5jb252ZXJzaW9uYCBhdHRhY2hlZFxuXHR0byB0aGUgcmV0dXJuZWQgc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIHByb3BlcnR5IGlzIGFuIGFycmF5XG5cdG9mIHN0cmluZ3MsIGVhY2ggd2l0aCB0aGUgc3RlcHMgaW4gYmV0d2VlbiB0aGUgJ2Zyb20nIGFuZCAndG8nXG5cdGNvbG9yIG1vZGVscyAoaW5jbHVzaXZlKS5cblxuXHRjb252ZXJzaW9ucyB0aGF0IGFyZSBub3QgcG9zc2libGUgc2ltcGx5IGFyZSBub3QgaW5jbHVkZWQuXG4qL1xuXG5mdW5jdGlvbiBidWlsZEdyYXBoKCkge1xuXHRjb25zdCBncmFwaCA9IHt9O1xuXHQvLyBodHRwczovL2pzcGVyZi5jb20vb2JqZWN0LWtleXMtdnMtZm9yLWluLXdpdGgtY2xvc3VyZS8zXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuXHRmb3IgKGxldCBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0Z3JhcGhbbW9kZWxzW2ldXSA9IHtcblx0XHRcdC8vIGh0dHA6Ly9qc3BlcmYuY29tLzEtdnMtaW5maW5pdHlcblx0XHRcdC8vIG1pY3JvLW9wdCwgYnV0IHRoaXMgaXMgc2ltcGxlLlxuXHRcdFx0ZGlzdGFuY2U6IC0xLFxuXHRcdFx0cGFyZW50OiBudWxsXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBncmFwaDtcbn1cblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnJlYWR0aC1maXJzdF9zZWFyY2hcbmZ1bmN0aW9uIGRlcml2ZUJGUyhmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBidWlsZEdyYXBoKCk7XG5cdGNvbnN0IHF1ZXVlID0gW2Zyb21Nb2RlbF07IC8vIFVuc2hpZnQgLT4gcXVldWUgLT4gcG9wXG5cblx0Z3JhcGhbZnJvbU1vZGVsXS5kaXN0YW5jZSA9IDA7XG5cblx0d2hpbGUgKHF1ZXVlLmxlbmd0aCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBxdWV1ZS5wb3AoKTtcblx0XHRjb25zdCBhZGphY2VudHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9uc1tjdXJyZW50XSk7XG5cblx0XHRmb3IgKGxldCBsZW4gPSBhZGphY2VudHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBhZGphY2VudCA9IGFkamFjZW50c1tpXTtcblx0XHRcdGNvbnN0IG5vZGUgPSBncmFwaFthZGphY2VudF07XG5cblx0XHRcdGlmIChub2RlLmRpc3RhbmNlID09PSAtMSkge1xuXHRcdFx0XHRub2RlLmRpc3RhbmNlID0gZ3JhcGhbY3VycmVudF0uZGlzdGFuY2UgKyAxO1xuXHRcdFx0XHRub2RlLnBhcmVudCA9IGN1cnJlbnQ7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoYWRqYWNlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBncmFwaDtcbn1cblxuZnVuY3Rpb24gbGluayhmcm9tLCB0bykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGFyZ3MpIHtcblx0XHRyZXR1cm4gdG8oZnJvbShhcmdzKSk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIHdyYXBDb252ZXJzaW9uKHRvTW9kZWwsIGdyYXBoKSB7XG5cdGNvbnN0IHBhdGggPSBbZ3JhcGhbdG9Nb2RlbF0ucGFyZW50LCB0b01vZGVsXTtcblx0bGV0IGZuID0gY29udmVyc2lvbnNbZ3JhcGhbdG9Nb2RlbF0ucGFyZW50XVt0b01vZGVsXTtcblxuXHRsZXQgY3VyID0gZ3JhcGhbdG9Nb2RlbF0ucGFyZW50O1xuXHR3aGlsZSAoZ3JhcGhbY3VyXS5wYXJlbnQpIHtcblx0XHRwYXRoLnVuc2hpZnQoZ3JhcGhbY3VyXS5wYXJlbnQpO1xuXHRcdGZuID0gbGluayhjb252ZXJzaW9uc1tncmFwaFtjdXJdLnBhcmVudF1bY3VyXSwgZm4pO1xuXHRcdGN1ciA9IGdyYXBoW2N1cl0ucGFyZW50O1xuXHR9XG5cblx0Zm4uY29udmVyc2lvbiA9IHBhdGg7XG5cdHJldHVybiBmbjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZnJvbU1vZGVsKSB7XG5cdGNvbnN0IGdyYXBoID0gZGVyaXZlQkZTKGZyb21Nb2RlbCk7XG5cdGNvbnN0IGNvbnZlcnNpb24gPSB7fTtcblxuXHRjb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhncmFwaCk7XG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRjb25zdCB0b01vZGVsID0gbW9kZWxzW2ldO1xuXHRcdGNvbnN0IG5vZGUgPSBncmFwaFt0b01vZGVsXTtcblxuXHRcdGlmIChub2RlLnBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gTm8gcG9zc2libGUgY29udmVyc2lvbiwgb3IgdGhpcyBub2RlIGlzIHRoZSBzb3VyY2UgbW9kZWwuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb252ZXJzaW9uW3RvTW9kZWxdID0gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvbnZlcnNpb247XG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbnMgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9ucycpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsWydqZXN0LXN5bWJvbC1kby1ub3QtdG91Y2gnXSB8fCBnbG9iYWwuU3ltYm9sO1xuY29uc3QgYXN5bW1ldHJpY01hdGNoZXIgPVxuICB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3JcbiAgICA/IFN5bWJvbC5mb3IoJ2plc3QuYXN5bW1ldHJpY01hdGNoZXInKVxuICAgIDogMHgxMzU3YTU7XG5jb25zdCBTUEFDRSA9ICcgJztcblxuY29uc3Qgc2VyaWFsaXplID0gKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgY29uc3Qgc3RyaW5nZWRWYWx1ZSA9IHZhbC50b1N0cmluZygpO1xuXG4gIGlmIChcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnQXJyYXlDb250YWluaW5nJyB8fFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdBcnJheU5vdENvbnRhaW5pbmcnXG4gICkge1xuICAgIGlmICgrK2RlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG4gICAgICByZXR1cm4gJ1snICsgc3RyaW5nZWRWYWx1ZSArICddJztcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgc3RyaW5nZWRWYWx1ZSArXG4gICAgICBTUEFDRSArXG4gICAgICAnWycgK1xuICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludExpc3RJdGVtcykoXG4gICAgICAgIHZhbC5zYW1wbGUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICByZWZzLFxuICAgICAgICBwcmludGVyXG4gICAgICApICtcbiAgICAgICddJ1xuICAgICk7XG4gIH1cblxuICBpZiAoXG4gICAgc3RyaW5nZWRWYWx1ZSA9PT0gJ09iamVjdENvbnRhaW5pbmcnIHx8XG4gICAgc3RyaW5nZWRWYWx1ZSA9PT0gJ09iamVjdE5vdENvbnRhaW5pbmcnXG4gICkge1xuICAgIGlmICgrK2RlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG4gICAgICByZXR1cm4gJ1snICsgc3RyaW5nZWRWYWx1ZSArICddJztcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgc3RyaW5nZWRWYWx1ZSArXG4gICAgICBTUEFDRSArXG4gICAgICAneycgK1xuICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludE9iamVjdFByb3BlcnRpZXMpKFxuICAgICAgICB2YWwuc2FtcGxlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgcmVmcyxcbiAgICAgICAgcHJpbnRlclxuICAgICAgKSArXG4gICAgICAnfSdcbiAgICApO1xuICB9XG5cbiAgaWYgKFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdTdHJpbmdNYXRjaGluZycgfHxcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnU3RyaW5nTm90TWF0Y2hpbmcnXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICBzdHJpbmdlZFZhbHVlICtcbiAgICAgIFNQQUNFICtcbiAgICAgIHByaW50ZXIodmFsLnNhbXBsZSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnU3RyaW5nQ29udGFpbmluZycgfHxcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnU3RyaW5nTm90Q29udGFpbmluZydcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN0cmluZ2VkVmFsdWUgK1xuICAgICAgU1BBQ0UgK1xuICAgICAgcHJpbnRlcih2YWwuc2FtcGxlLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcylcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbC50b0FzeW1tZXRyaWNNYXRjaGVyKCk7XG59O1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuY29uc3QgdGVzdCA9IHZhbCA9PiB2YWwgJiYgdmFsLiQkdHlwZW9mID09PSBhc3ltbWV0cmljTWF0Y2hlcjtcblxuZXhwb3J0cy50ZXN0ID0gdGVzdDtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludEl0ZXJhdG9yRW50cmllcyA9IHByaW50SXRlcmF0b3JFbnRyaWVzO1xuZXhwb3J0cy5wcmludEl0ZXJhdG9yVmFsdWVzID0gcHJpbnRJdGVyYXRvclZhbHVlcztcbmV4cG9ydHMucHJpbnRMaXN0SXRlbXMgPSBwcmludExpc3RJdGVtcztcbmV4cG9ydHMucHJpbnRPYmplY3RQcm9wZXJ0aWVzID0gcHJpbnRPYmplY3RQcm9wZXJ0aWVzO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuY29uc3QgZ2V0S2V5c09mRW51bWVyYWJsZVByb3BlcnRpZXMgPSBvYmplY3QgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCkuZm9yRWFjaChzeW1ib2wgPT4ge1xuICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW1ib2wpLmVudW1lcmFibGUpIHtcbiAgICAgICAga2V5cy5wdXNoKHN5bWJvbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn07XG4vKipcbiAqIFJldHVybiBlbnRyaWVzIChmb3IgZXhhbXBsZSwgb2YgYSBtYXApXG4gKiB3aXRoIHNwYWNpbmcsIGluZGVudGF0aW9uLCBhbmQgY29tbWFcbiAqIHdpdGhvdXQgc3Vycm91bmRpbmcgcHVuY3R1YXRpb24gKGZvciBleGFtcGxlLCBicmFjZXMpXG4gKi9cblxuZnVuY3Rpb24gcHJpbnRJdGVyYXRvckVudHJpZXMoXG4gIGl0ZXJhdG9yLFxuICBjb25maWcsXG4gIGluZGVudGF0aW9uLFxuICBkZXB0aCxcbiAgcmVmcyxcbiAgcHJpbnRlciwgLy8gVG9vIGJhZCwgc28gc2FkIHRoYXQgc2VwYXJhdG9yIGZvciBFQ01BU2NyaXB0IE1hcCBoYXMgYmVlbiAnID0+ICdcbiAgLy8gV2hhdCBhIGRpc3RyYWN0aW5nIGRpZmYgaWYgeW91IGNoYW5nZSBhIGRhdGEgc3RydWN0dXJlIHRvL2Zyb21cbiAgLy8gRUNNQVNjcmlwdCBPYmplY3Qgb3IgSW1tdXRhYmxlLk1hcC9PcmRlcmVkTWFwIHdoaWNoIHVzZSB0aGUgZGVmYXVsdC5cbiAgc2VwYXJhdG9yID0gJzogJ1xuKSB7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgbGV0IGN1cnJlbnQgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgaWYgKCFjdXJyZW50LmRvbmUpIHtcbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcbiAgICBjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cbiAgICB3aGlsZSAoIWN1cnJlbnQuZG9uZSkge1xuICAgICAgY29uc3QgbmFtZSA9IHByaW50ZXIoXG4gICAgICAgIGN1cnJlbnQudmFsdWVbMF0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb25OZXh0LFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgcmVmc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJpbnRlcihcbiAgICAgICAgY3VycmVudC52YWx1ZVsxXSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBpbmRlbnRhdGlvbk5leHQsXG4gICAgICAgIGRlcHRoLFxuICAgICAgICByZWZzXG4gICAgICApO1xuICAgICAgcmVzdWx0ICs9IGluZGVudGF0aW9uTmV4dCArIG5hbWUgKyBzZXBhcmF0b3IgKyB2YWx1ZTtcbiAgICAgIGN1cnJlbnQgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgIGlmICghY3VycmVudC5kb25lKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCcgKyBjb25maWcuc3BhY2luZ0lubmVyO1xuICAgICAgfSBlbHNlIGlmICghY29uZmlnLm1pbikge1xuICAgICAgICByZXN1bHQgKz0gJywnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdCArPSBjb25maWcuc3BhY2luZ091dGVyICsgaW5kZW50YXRpb247XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBSZXR1cm4gdmFsdWVzIChmb3IgZXhhbXBsZSwgb2YgYSBzZXQpXG4gKiB3aXRoIHNwYWNpbmcsIGluZGVudGF0aW9uLCBhbmQgY29tbWFcbiAqIHdpdGhvdXQgc3Vycm91bmRpbmcgcHVuY3R1YXRpb24gKGJyYWNlcyBvciBicmFja2V0cylcbiAqL1xuXG5mdW5jdGlvbiBwcmludEl0ZXJhdG9yVmFsdWVzKFxuICBpdGVyYXRvcixcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvbixcbiAgZGVwdGgsXG4gIHJlZnMsXG4gIHByaW50ZXJcbikge1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGxldCBjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIGlmICghY3VycmVudC5kb25lKSB7XG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXI7XG4gICAgY29uc3QgaW5kZW50YXRpb25OZXh0ID0gaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50O1xuXG4gICAgd2hpbGUgKCFjdXJyZW50LmRvbmUpIHtcbiAgICAgIHJlc3VsdCArPVxuICAgICAgICBpbmRlbnRhdGlvbk5leHQgK1xuICAgICAgICBwcmludGVyKGN1cnJlbnQudmFsdWUsIGNvbmZpZywgaW5kZW50YXRpb25OZXh0LCBkZXB0aCwgcmVmcyk7XG4gICAgICBjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICBpZiAoIWN1cnJlbnQuZG9uZSkge1xuICAgICAgICByZXN1bHQgKz0gJywnICsgY29uZmlnLnNwYWNpbmdJbm5lcjtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbmZpZy5taW4pIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlciArIGluZGVudGF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJuIGl0ZW1zIChmb3IgZXhhbXBsZSwgb2YgYW4gYXJyYXkpXG4gKiB3aXRoIHNwYWNpbmcsIGluZGVudGF0aW9uLCBhbmQgY29tbWFcbiAqIHdpdGhvdXQgc3Vycm91bmRpbmcgcHVuY3R1YXRpb24gKGZvciBleGFtcGxlLCBicmFja2V0cylcbiAqKi9cblxuZnVuY3Rpb24gcHJpbnRMaXN0SXRlbXMobGlzdCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuXG4gIGlmIChsaXN0Lmxlbmd0aCkge1xuICAgIHJlc3VsdCArPSBjb25maWcuc3BhY2luZ091dGVyO1xuICAgIGNvbnN0IGluZGVudGF0aW9uTmV4dCA9IGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ICs9XG4gICAgICAgIGluZGVudGF0aW9uTmV4dCArXG4gICAgICAgIHByaW50ZXIobGlzdFtpXSwgY29uZmlnLCBpbmRlbnRhdGlvbk5leHQsIGRlcHRoLCByZWZzKTtcblxuICAgICAgaWYgKGkgPCBsaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJyArIGNvbmZpZy5zcGFjaW5nSW5uZXI7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChmb3IgZXhhbXBsZSwgYnJhY2VzKVxuICovXG5cbmZ1bmN0aW9uIHByaW50T2JqZWN0UHJvcGVydGllcyh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgY29uc3Qga2V5cyA9IGdldEtleXNPZkVudW1lcmFibGVQcm9wZXJ0aWVzKHZhbCk7XG5cbiAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXI7XG4gICAgY29uc3QgaW5kZW50YXRpb25OZXh0ID0gaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgbmFtZSA9IHByaW50ZXIoa2V5LCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuICAgICAgY29uc3QgdmFsdWUgPSBwcmludGVyKHZhbFtrZXldLCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuICAgICAgcmVzdWx0ICs9IGluZGVudGF0aW9uTmV4dCArIG5hbWUgKyAnOiAnICsgdmFsdWU7XG5cbiAgICAgIGlmIChpIDwga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCcgKyBjb25maWcuc3BhY2luZ0lubmVyO1xuICAgICAgfSBlbHNlIGlmICghY29uZmlnLm1pbikge1xuICAgICAgICByZXN1bHQgKz0gJywnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdCArPSBjb25maWcuc3BhY2luZ091dGVyICsgaW5kZW50YXRpb247XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuc2VyaWFsaXplID0gZXhwb3J0cy50ZXN0ID0gdm9pZCAwO1xuXG52YXIgX2Fuc2lSZWdleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgnYW5zaS1yZWdleCcpKTtcblxudmFyIF9hbnNpU3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCdhbnNpLXN0eWxlcycpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtkZWZhdWx0OiBvYmp9O1xufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5jb25zdCB0b0h1bWFuUmVhZGFibGVBbnNpID0gdGV4dCA9PlxuICB0ZXh0LnJlcGxhY2UoKDAsIF9hbnNpUmVnZXguZGVmYXVsdCkoKSwgbWF0Y2ggPT4ge1xuICAgIHN3aXRjaCAobWF0Y2gpIHtcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5yZWQuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuZ3JlZW4uY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuY3lhbi5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ncmF5LmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LndoaXRlLmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LnllbGxvdy5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5iZ1JlZC5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5iZ0dyZWVuLmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmJnWWVsbG93LmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmludmVyc2UuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuZGltLmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmJvbGQuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQucmVzZXQub3BlbjpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5yZXNldC5jbG9zZTpcbiAgICAgICAgcmV0dXJuICc8Lz4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQucmVkLm9wZW46XG4gICAgICAgIHJldHVybiAnPHJlZD4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuZ3JlZW4ub3BlbjpcbiAgICAgICAgcmV0dXJuICc8Z3JlZW4+JztcblxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmN5YW4ub3BlbjpcbiAgICAgICAgcmV0dXJuICc8Y3lhbj4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuZ3JheS5vcGVuOlxuICAgICAgICByZXR1cm4gJzxncmF5Pic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC53aGl0ZS5vcGVuOlxuICAgICAgICByZXR1cm4gJzx3aGl0ZT4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQueWVsbG93Lm9wZW46XG4gICAgICAgIHJldHVybiAnPHllbGxvdz4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYmdSZWQub3BlbjpcbiAgICAgICAgcmV0dXJuICc8YmdSZWQ+JztcblxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmJnR3JlZW4ub3BlbjpcbiAgICAgICAgcmV0dXJuICc8YmdHcmVlbj4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYmdZZWxsb3cub3BlbjpcbiAgICAgICAgcmV0dXJuICc8YmdZZWxsb3c+JztcblxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmludmVyc2Uub3BlbjpcbiAgICAgICAgcmV0dXJuICc8aW52ZXJzZT4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuZGltLm9wZW46XG4gICAgICAgIHJldHVybiAnPGRpbT4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYm9sZC5vcGVuOlxuICAgICAgICByZXR1cm4gJzxib2xkPic7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0pO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+XG4gIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmICEhdmFsLm1hdGNoKCgwLCBfYW5zaVJlZ2V4LmRlZmF1bHQpKCkpO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuXG5jb25zdCBzZXJpYWxpemUgPSAodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT5cbiAgcHJpbnRlcih0b0h1bWFuUmVhZGFibGVBbnNpKHZhbCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKTtcblxuZXhwb3J0cy5zZXJpYWxpemUgPSBzZXJpYWxpemU7XG5jb25zdCBwbHVnaW4gPSB7XG4gIHNlcmlhbGl6ZSxcbiAgdGVzdFxufTtcbnZhciBfZGVmYXVsdCA9IHBsdWdpbjtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuc2VyaWFsaXplID0gZXhwb3J0cy50ZXN0ID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb25zID0gcmVxdWlyZSgnLi4vY29sbGVjdGlvbnMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBsb2NhbC9iYW4tdHlwZXMtZXZlbnR1YWxseSAqL1xuY29uc3QgU1BBQ0UgPSAnICc7XG5jb25zdCBPQkpFQ1RfTkFNRVMgPSBbJ0RPTVN0cmluZ01hcCcsICdOYW1lZE5vZGVNYXAnXTtcbmNvbnN0IEFSUkFZX1JFR0VYUCA9IC9eKEhUTUxcXHcqQ29sbGVjdGlvbnxOb2RlTGlzdCkkLztcblxuY29uc3QgdGVzdE5hbWUgPSBuYW1lID0+XG4gIE9CSkVDVF9OQU1FUy5pbmRleE9mKG5hbWUpICE9PSAtMSB8fCBBUlJBWV9SRUdFWFAudGVzdChuYW1lKTtcblxuY29uc3QgdGVzdCA9IHZhbCA9PlxuICB2YWwgJiZcbiAgdmFsLmNvbnN0cnVjdG9yICYmXG4gICEhdmFsLmNvbnN0cnVjdG9yLm5hbWUgJiZcbiAgdGVzdE5hbWUodmFsLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuXG5jb25zdCBpc05hbWVkTm9kZU1hcCA9IGNvbGxlY3Rpb24gPT5cbiAgY29sbGVjdGlvbi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnTmFtZWROb2RlTWFwJztcblxuY29uc3Qgc2VyaWFsaXplID0gKGNvbGxlY3Rpb24sIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PiB7XG4gIGNvbnN0IG5hbWUgPSBjb2xsZWN0aW9uLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgaWYgKCsrZGVwdGggPiBjb25maWcubWF4RGVwdGgpIHtcbiAgICByZXR1cm4gJ1snICsgbmFtZSArICddJztcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgKGNvbmZpZy5taW4gPyAnJyA6IG5hbWUgKyBTUEFDRSkgK1xuICAgIChPQkpFQ1RfTkFNRVMuaW5kZXhPZihuYW1lKSAhPT0gLTFcbiAgICAgID8gJ3snICtcbiAgICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludE9iamVjdFByb3BlcnRpZXMpKFxuICAgICAgICAgIGlzTmFtZWROb2RlTWFwKGNvbGxlY3Rpb24pXG4gICAgICAgICAgICA/IEFycmF5LmZyb20oY29sbGVjdGlvbikucmVkdWNlKChwcm9wcywgYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJvcHNbYXR0cmlidXRlLm5hbWVdID0gYXR0cmlidXRlLnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgICAgICAgfSwge30pXG4gICAgICAgICAgICA6IHsuLi5jb2xsZWN0aW9ufSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICkgK1xuICAgICAgICAnfSdcbiAgICAgIDogJ1snICtcbiAgICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludExpc3RJdGVtcykoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2xsZWN0aW9uKSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICkgK1xuICAgICAgICAnXScpXG4gICk7XG59O1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLnRlc3QgPSB2b2lkIDA7XG5cbnZhciBfbWFya3VwID0gcmVxdWlyZSgnLi9saWIvbWFya3VwJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmNvbnN0IEVMRU1FTlRfTk9ERSA9IDE7XG5jb25zdCBURVhUX05PREUgPSAzO1xuY29uc3QgQ09NTUVOVF9OT0RFID0gODtcbmNvbnN0IEZSQUdNRU5UX05PREUgPSAxMTtcbmNvbnN0IEVMRU1FTlRfUkVHRVhQID0gL14oKEhUTUx8U1ZHKVxcdyopP0VsZW1lbnQkLztcblxuY29uc3QgdGVzdE5vZGUgPSB2YWwgPT4ge1xuICB2YXIgX3ZhbCRoYXNBdHRyaWJ1dGU7XG5cbiAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gdmFsLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGNvbnN0IHtub2RlVHlwZSwgdGFnTmFtZX0gPSB2YWw7XG4gIGNvbnN0IGlzQ3VzdG9tRWxlbWVudCA9XG4gICAgKHR5cGVvZiB0YWdOYW1lID09PSAnc3RyaW5nJyAmJiB0YWdOYW1lLmluY2x1ZGVzKCctJykpIHx8XG4gICAgKChfdmFsJGhhc0F0dHJpYnV0ZSA9IHZhbC5oYXNBdHRyaWJ1dGUpID09PSBudWxsIHx8XG4gICAgX3ZhbCRoYXNBdHRyaWJ1dGUgPT09IHZvaWQgMFxuICAgICAgPyB2b2lkIDBcbiAgICAgIDogX3ZhbCRoYXNBdHRyaWJ1dGUuY2FsbCh2YWwsICdpcycpKTtcbiAgcmV0dXJuIChcbiAgICAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJlxuICAgICAgKEVMRU1FTlRfUkVHRVhQLnRlc3QoY29uc3RydWN0b3JOYW1lKSB8fCBpc0N1c3RvbUVsZW1lbnQpKSB8fFxuICAgIChub2RlVHlwZSA9PT0gVEVYVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gJ1RleHQnKSB8fFxuICAgIChub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gJ0NvbW1lbnQnKSB8fFxuICAgIChub2RlVHlwZSA9PT0gRlJBR01FTlRfTk9ERSAmJiBjb25zdHJ1Y3Rvck5hbWUgPT09ICdEb2N1bWVudEZyYWdtZW50JylcbiAgKTtcbn07XG5cbmNvbnN0IHRlc3QgPSB2YWwgPT4ge1xuICB2YXIgX3ZhbCRjb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gKFxuICAgICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IChfdmFsJGNvbnN0cnVjdG9yID0gdmFsLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fFxuICAgICAgICBfdmFsJGNvbnN0cnVjdG9yID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IF92YWwkY29uc3RydWN0b3IubmFtZSkgJiYgdGVzdE5vZGUodmFsKVxuICApO1xufTtcblxuZXhwb3J0cy50ZXN0ID0gdGVzdDtcblxuZnVuY3Rpb24gbm9kZUlzVGV4dChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIG5vZGVJc0NvbW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBub2RlSXNGcmFnbWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBGUkFHTUVOVF9OT0RFO1xufVxuXG5jb25zdCBzZXJpYWxpemUgPSAobm9kZSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgaWYgKG5vZGVJc1RleHQobm9kZSkpIHtcbiAgICByZXR1cm4gKDAsIF9tYXJrdXAucHJpbnRUZXh0KShub2RlLmRhdGEsIGNvbmZpZyk7XG4gIH1cblxuICBpZiAobm9kZUlzQ29tbWVudChub2RlKSkge1xuICAgIHJldHVybiAoMCwgX21hcmt1cC5wcmludENvbW1lbnQpKG5vZGUuZGF0YSwgY29uZmlnKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBub2RlSXNGcmFnbWVudChub2RlKVxuICAgID8gYERvY3VtZW50RnJhZ21lbnRgXG4gICAgOiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCkge1xuICAgIHJldHVybiAoMCwgX21hcmt1cC5wcmludEVsZW1lbnRBc0xlYWYpKHR5cGUsIGNvbmZpZyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50KShcbiAgICB0eXBlLFxuICAgICgwLCBfbWFya3VwLnByaW50UHJvcHMpKFxuICAgICAgbm9kZUlzRnJhZ21lbnQobm9kZSlcbiAgICAgICAgPyBbXVxuICAgICAgICA6IEFycmF5LmZyb20obm9kZS5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgLm1hcChhdHRyID0+IGF0dHIubmFtZSlcbiAgICAgICAgICAgIC5zb3J0KCksXG4gICAgICBub2RlSXNGcmFnbWVudChub2RlKVxuICAgICAgICA/IHt9XG4gICAgICAgIDogQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpLnJlZHVjZSgocHJvcHMsIGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHNbYXR0cmlidXRlLm5hbWVdID0gYXR0cmlidXRlLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAgIH0sIHt9KSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCxcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXJcbiAgICApLFxuICAgICgwLCBfbWFya3VwLnByaW50Q2hpbGRyZW4pKFxuICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobm9kZS5jaGlsZE5vZGVzIHx8IG5vZGUuY2hpbGRyZW4pLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50LFxuICAgICAgZGVwdGgsXG4gICAgICByZWZzLFxuICAgICAgcHJpbnRlclxuICAgICksXG4gICAgY29uZmlnLFxuICAgIGluZGVudGF0aW9uXG4gICk7XG59O1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludEVsZW1lbnRBc0xlYWYgPSBleHBvcnRzLnByaW50RWxlbWVudCA9IGV4cG9ydHMucHJpbnRDb21tZW50ID0gZXhwb3J0cy5wcmludFRleHQgPSBleHBvcnRzLnByaW50Q2hpbGRyZW4gPSBleHBvcnRzLnByaW50UHJvcHMgPSB2b2lkIDA7XG5cbnZhciBfZXNjYXBlSFRNTCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgnLi9lc2NhcGVIVE1MJykpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge2RlZmF1bHQ6IG9ian07XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbi8vIFJldHVybiBlbXB0eSBzdHJpbmcgaWYga2V5cyBpcyBlbXB0eS5cbmNvbnN0IHByaW50UHJvcHMgPSAoa2V5cywgcHJvcHMsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PiB7XG4gIGNvbnN0IGluZGVudGF0aW9uTmV4dCA9IGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudDtcbiAgY29uc3QgY29sb3JzID0gY29uZmlnLmNvbG9ycztcbiAgcmV0dXJuIGtleXNcbiAgICAubWFwKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByb3BzW2tleV07XG4gICAgICBsZXQgcHJpbnRlZCA9IHByaW50ZXIodmFsdWUsIGNvbmZpZywgaW5kZW50YXRpb25OZXh0LCBkZXB0aCwgcmVmcyk7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChwcmludGVkLmluZGV4T2YoJ1xcbicpICE9PSAtMSkge1xuICAgICAgICAgIHByaW50ZWQgPVxuICAgICAgICAgICAgY29uZmlnLnNwYWNpbmdPdXRlciArXG4gICAgICAgICAgICBpbmRlbnRhdGlvbk5leHQgK1xuICAgICAgICAgICAgcHJpbnRlZCArXG4gICAgICAgICAgICBjb25maWcuc3BhY2luZ091dGVyICtcbiAgICAgICAgICAgIGluZGVudGF0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRlZCA9ICd7JyArIHByaW50ZWQgKyAnfSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvbmZpZy5zcGFjaW5nSW5uZXIgK1xuICAgICAgICBpbmRlbnRhdGlvbiArXG4gICAgICAgIGNvbG9ycy5wcm9wLm9wZW4gK1xuICAgICAgICBrZXkgK1xuICAgICAgICBjb2xvcnMucHJvcC5jbG9zZSArXG4gICAgICAgICc9JyArXG4gICAgICAgIGNvbG9ycy52YWx1ZS5vcGVuICtcbiAgICAgICAgcHJpbnRlZCArXG4gICAgICAgIGNvbG9ycy52YWx1ZS5jbG9zZVxuICAgICAgKTtcbiAgICB9KVxuICAgIC5qb2luKCcnKTtcbn07IC8vIFJldHVybiBlbXB0eSBzdHJpbmcgaWYgY2hpbGRyZW4gaXMgZW1wdHkuXG5cbmV4cG9ydHMucHJpbnRQcm9wcyA9IHByaW50UHJvcHM7XG5cbmNvbnN0IHByaW50Q2hpbGRyZW4gPSAoY2hpbGRyZW4sIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PlxuICBjaGlsZHJlblxuICAgIC5tYXAoXG4gICAgICBjaGlsZCA9PlxuICAgICAgICBjb25maWcuc3BhY2luZ091dGVyICtcbiAgICAgICAgaW5kZW50YXRpb24gK1xuICAgICAgICAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gcHJpbnRUZXh0KGNoaWxkLCBjb25maWcpXG4gICAgICAgICAgOiBwcmludGVyKGNoaWxkLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcykpXG4gICAgKVxuICAgIC5qb2luKCcnKTtcblxuZXhwb3J0cy5wcmludENoaWxkcmVuID0gcHJpbnRDaGlsZHJlbjtcblxuY29uc3QgcHJpbnRUZXh0ID0gKHRleHQsIGNvbmZpZykgPT4ge1xuICBjb25zdCBjb250ZW50Q29sb3IgPSBjb25maWcuY29sb3JzLmNvbnRlbnQ7XG4gIHJldHVybiAoXG4gICAgY29udGVudENvbG9yLm9wZW4gKyAoMCwgX2VzY2FwZUhUTUwuZGVmYXVsdCkodGV4dCkgKyBjb250ZW50Q29sb3IuY2xvc2VcbiAgKTtcbn07XG5cbmV4cG9ydHMucHJpbnRUZXh0ID0gcHJpbnRUZXh0O1xuXG5jb25zdCBwcmludENvbW1lbnQgPSAoY29tbWVudCwgY29uZmlnKSA9PiB7XG4gIGNvbnN0IGNvbW1lbnRDb2xvciA9IGNvbmZpZy5jb2xvcnMuY29tbWVudDtcbiAgcmV0dXJuIChcbiAgICBjb21tZW50Q29sb3Iub3BlbiArXG4gICAgJzwhLS0nICtcbiAgICAoMCwgX2VzY2FwZUhUTUwuZGVmYXVsdCkoY29tbWVudCkgK1xuICAgICctLT4nICtcbiAgICBjb21tZW50Q29sb3IuY2xvc2VcbiAgKTtcbn07IC8vIFNlcGFyYXRlIHRoZSBmdW5jdGlvbnMgdG8gZm9ybWF0IHByb3BzLCBjaGlsZHJlbiwgYW5kIGVsZW1lbnQsXG4vLyBzbyBhIHBsdWdpbiBjb3VsZCBvdmVycmlkZSBhIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGlmIG5lZWRlZC5cbi8vIFRvbyBiYWQsIHNvIHNhZDogdGhlIHRyYWRpdGlvbmFsIChidXQgdW5uZWNlc3NhcnkpIHNwYWNlXG4vLyBpbiBhIHNlbGYtY2xvc2luZyB0YWdDb2xvciByZXF1aXJlcyBhIHNlY29uZCB0ZXN0IG9mIHByaW50ZWRQcm9wcy5cblxuZXhwb3J0cy5wcmludENvbW1lbnQgPSBwcmludENvbW1lbnQ7XG5cbmNvbnN0IHByaW50RWxlbWVudCA9IChcbiAgdHlwZSxcbiAgcHJpbnRlZFByb3BzLFxuICBwcmludGVkQ2hpbGRyZW4sXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb25cbikgPT4ge1xuICBjb25zdCB0YWdDb2xvciA9IGNvbmZpZy5jb2xvcnMudGFnO1xuICByZXR1cm4gKFxuICAgIHRhZ0NvbG9yLm9wZW4gK1xuICAgICc8JyArXG4gICAgdHlwZSArXG4gICAgKHByaW50ZWRQcm9wcyAmJlxuICAgICAgdGFnQ29sb3IuY2xvc2UgK1xuICAgICAgICBwcmludGVkUHJvcHMgK1xuICAgICAgICBjb25maWcuc3BhY2luZ091dGVyICtcbiAgICAgICAgaW5kZW50YXRpb24gK1xuICAgICAgICB0YWdDb2xvci5vcGVuKSArXG4gICAgKHByaW50ZWRDaGlsZHJlblxuICAgICAgPyAnPicgK1xuICAgICAgICB0YWdDb2xvci5jbG9zZSArXG4gICAgICAgIHByaW50ZWRDaGlsZHJlbiArXG4gICAgICAgIGNvbmZpZy5zcGFjaW5nT3V0ZXIgK1xuICAgICAgICBpbmRlbnRhdGlvbiArXG4gICAgICAgIHRhZ0NvbG9yLm9wZW4gK1xuICAgICAgICAnPC8nICtcbiAgICAgICAgdHlwZVxuICAgICAgOiAocHJpbnRlZFByb3BzICYmICFjb25maWcubWluID8gJycgOiAnICcpICsgJy8nKSArXG4gICAgJz4nICtcbiAgICB0YWdDb2xvci5jbG9zZVxuICApO1xufTtcblxuZXhwb3J0cy5wcmludEVsZW1lbnQgPSBwcmludEVsZW1lbnQ7XG5cbmNvbnN0IHByaW50RWxlbWVudEFzTGVhZiA9ICh0eXBlLCBjb25maWcpID0+IHtcbiAgY29uc3QgdGFnQ29sb3IgPSBjb25maWcuY29sb3JzLnRhZztcbiAgcmV0dXJuIChcbiAgICB0YWdDb2xvci5vcGVuICtcbiAgICAnPCcgK1xuICAgIHR5cGUgK1xuICAgIHRhZ0NvbG9yLmNsb3NlICtcbiAgICAnIOKApicgK1xuICAgIHRhZ0NvbG9yLm9wZW4gK1xuICAgICcgLz4nICtcbiAgICB0YWdDb2xvci5jbG9zZVxuICApO1xufTtcblxuZXhwb3J0cy5wcmludEVsZW1lbnRBc0xlYWYgPSBwcmludEVsZW1lbnRBc0xlYWY7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXNjYXBlSFRNTDtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlSFRNTChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMudGVzdCA9IGV4cG9ydHMuc2VyaWFsaXplID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb25zID0gcmVxdWlyZSgnLi4vY29sbGVjdGlvbnMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLy8gU0VOVElORUwgY29uc3RhbnRzIGFyZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9pbW11dGFibGUtanNcbmNvbnN0IElTX0lURVJBQkxFX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfSVRFUkFCTEVfX0BAJztcbmNvbnN0IElTX0xJU1RfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9MSVNUX19AQCc7XG5jb25zdCBJU19LRVlFRF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX0tFWUVEX19AQCc7XG5jb25zdCBJU19NQVBfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9NQVBfX0BAJztcbmNvbnN0IElTX09SREVSRURfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9PUkRFUkVEX19AQCc7XG5jb25zdCBJU19SRUNPUkRfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9SRUNPUkRfX0BAJzsgLy8gaW1tdXRhYmxlIHY0XG5cbmNvbnN0IElTX1NFUV9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX1NFUV9fQEAnO1xuY29uc3QgSVNfU0VUX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfU0VUX19AQCc7XG5jb25zdCBJU19TVEFDS19TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX1NUQUNLX19AQCc7XG5cbmNvbnN0IGdldEltbXV0YWJsZU5hbWUgPSBuYW1lID0+ICdJbW11dGFibGUuJyArIG5hbWU7XG5cbmNvbnN0IHByaW50QXNMZWFmID0gbmFtZSA9PiAnWycgKyBuYW1lICsgJ10nO1xuXG5jb25zdCBTUEFDRSA9ICcgJztcbmNvbnN0IExBWlkgPSAn4oCmJzsgLy8gU2VxIGlzIGxhenkgaWYgaXQgY2FsbHMgYSBtZXRob2QgbGlrZSBmaWx0ZXJcblxuY29uc3QgcHJpbnRJbW11dGFibGVFbnRyaWVzID0gKFxuICB2YWwsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBwcmludGVyLFxuICB0eXBlXG4pID0+XG4gICsrZGVwdGggPiBjb25maWcubWF4RGVwdGhcbiAgICA/IHByaW50QXNMZWFmKGdldEltbXV0YWJsZU5hbWUodHlwZSkpXG4gICAgOiBnZXRJbW11dGFibGVOYW1lKHR5cGUpICtcbiAgICAgIFNQQUNFICtcbiAgICAgICd7JyArXG4gICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50SXRlcmF0b3JFbnRyaWVzKShcbiAgICAgICAgdmFsLmVudHJpZXMoKSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIHJlZnMsXG4gICAgICAgIHByaW50ZXJcbiAgICAgICkgK1xuICAgICAgJ30nOyAvLyBSZWNvcmQgaGFzIGFuIGVudHJpZXMgbWV0aG9kIGJlY2F1c2UgaXQgaXMgYSBjb2xsZWN0aW9uIGluIGltbXV0YWJsZSB2My5cbi8vIFJldHVybiBhbiBpdGVyYXRvciBmb3IgSW1tdXRhYmxlIFJlY29yZCBmcm9tIHZlcnNpb24gdjMgb3IgdjQuXG5cbmZ1bmN0aW9uIGdldFJlY29yZEVudHJpZXModmFsKSB7XG4gIGxldCBpID0gMDtcbiAgcmV0dXJuIHtcbiAgICBuZXh0KCkge1xuICAgICAgaWYgKGkgPCB2YWwuX2tleXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHZhbC5fa2V5c1tpKytdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBba2V5LCB2YWwuZ2V0KGtleSldXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBwcmludEltbXV0YWJsZVJlY29yZCA9IChcbiAgdmFsLFxuICBjb25maWcsXG4gIGluZGVudGF0aW9uLFxuICBkZXB0aCxcbiAgcmVmcyxcbiAgcHJpbnRlclxuKSA9PiB7XG4gIC8vIF9uYW1lIHByb3BlcnR5IGlzIGRlZmluZWQgb25seSBmb3IgYW4gSW1tdXRhYmxlIFJlY29yZCBpbnN0YW5jZVxuICAvLyB3aGljaCB3YXMgY29uc3RydWN0ZWQgd2l0aCBhIHNlY29uZCBvcHRpb25hbCBkZXNjcmlwdGl2ZSBuYW1lIGFyZ1xuICBjb25zdCBuYW1lID0gZ2V0SW1tdXRhYmxlTmFtZSh2YWwuX25hbWUgfHwgJ1JlY29yZCcpO1xuICByZXR1cm4gKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gcHJpbnRBc0xlYWYobmFtZSlcbiAgICA6IG5hbWUgK1xuICAgICAgICBTUEFDRSArXG4gICAgICAgICd7JyArXG4gICAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvckVudHJpZXMpKFxuICAgICAgICAgIGdldFJlY29yZEVudHJpZXModmFsKSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICkgK1xuICAgICAgICAnfSc7XG59O1xuXG5jb25zdCBwcmludEltbXV0YWJsZVNlcSA9ICh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PiB7XG4gIGNvbnN0IG5hbWUgPSBnZXRJbW11dGFibGVOYW1lKCdTZXEnKTtcblxuICBpZiAoKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCkge1xuICAgIHJldHVybiBwcmludEFzTGVhZihuYW1lKTtcbiAgfVxuXG4gIGlmICh2YWxbSVNfS0VZRURfU0VOVElORUxdKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5hbWUgK1xuICAgICAgU1BBQ0UgK1xuICAgICAgJ3snICsgLy8gZnJvbSBJbW11dGFibGUgY29sbGVjdGlvbiBvZiBlbnRyaWVzIG9yIGZyb20gRUNNQVNjcmlwdCBvYmplY3RcbiAgICAgICh2YWwuX2l0ZXIgfHwgdmFsLl9vYmplY3RcbiAgICAgICAgPyAoMCwgX2NvbGxlY3Rpb25zLnByaW50SXRlcmF0b3JFbnRyaWVzKShcbiAgICAgICAgICAgIHZhbC5lbnRyaWVzKCksXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgcmVmcyxcbiAgICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgICApXG4gICAgICAgIDogTEFaWSkgK1xuICAgICAgJ30nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgbmFtZSArXG4gICAgU1BBQ0UgK1xuICAgICdbJyArXG4gICAgKHZhbC5faXRlciB8fCAvLyBmcm9tIEltbXV0YWJsZSBjb2xsZWN0aW9uIG9mIHZhbHVlc1xuICAgIHZhbC5fYXJyYXkgfHwgLy8gZnJvbSBFQ01BU2NyaXB0IGFycmF5XG4gICAgdmFsLl9jb2xsZWN0aW9uIHx8IC8vIGZyb20gRUNNQVNjcmlwdCBjb2xsZWN0aW9uIGluIGltbXV0YWJsZSB2NFxuICAgIHZhbC5faXRlcmFibGUgLy8gZnJvbSBFQ01BU2NyaXB0IGNvbGxlY3Rpb24gaW4gaW1tdXRhYmxlIHYzXG4gICAgICA/ICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvclZhbHVlcykoXG4gICAgICAgICAgdmFsLnZhbHVlcygpLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKVxuICAgICAgOiBMQVpZKSArXG4gICAgJ10nXG4gICk7XG59O1xuXG5jb25zdCBwcmludEltbXV0YWJsZVZhbHVlcyA9IChcbiAgdmFsLFxuICBjb25maWcsXG4gIGluZGVudGF0aW9uLFxuICBkZXB0aCxcbiAgcmVmcyxcbiAgcHJpbnRlcixcbiAgdHlwZVxuKSA9PlxuICArK2RlcHRoID4gY29uZmlnLm1heERlcHRoXG4gICAgPyBwcmludEFzTGVhZihnZXRJbW11dGFibGVOYW1lKHR5cGUpKVxuICAgIDogZ2V0SW1tdXRhYmxlTmFtZSh0eXBlKSArXG4gICAgICBTUEFDRSArXG4gICAgICAnWycgK1xuICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludEl0ZXJhdG9yVmFsdWVzKShcbiAgICAgICAgdmFsLnZhbHVlcygpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgcmVmcyxcbiAgICAgICAgcHJpbnRlclxuICAgICAgKSArXG4gICAgICAnXSc7XG5cbmNvbnN0IHNlcmlhbGl6ZSA9ICh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PiB7XG4gIGlmICh2YWxbSVNfTUFQX1NFTlRJTkVMXSkge1xuICAgIHJldHVybiBwcmludEltbXV0YWJsZUVudHJpZXMoXG4gICAgICB2YWwsXG4gICAgICBjb25maWcsXG4gICAgICBpbmRlbnRhdGlvbixcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXIsXG4gICAgICB2YWxbSVNfT1JERVJFRF9TRU5USU5FTF0gPyAnT3JkZXJlZE1hcCcgOiAnTWFwJ1xuICAgICk7XG4gIH1cblxuICBpZiAodmFsW0lTX0xJU1RfU0VOVElORUxdKSB7XG4gICAgcmV0dXJuIHByaW50SW1tdXRhYmxlVmFsdWVzKFxuICAgICAgdmFsLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24sXG4gICAgICBkZXB0aCxcbiAgICAgIHJlZnMsXG4gICAgICBwcmludGVyLFxuICAgICAgJ0xpc3QnXG4gICAgKTtcbiAgfVxuXG4gIGlmICh2YWxbSVNfU0VUX1NFTlRJTkVMXSkge1xuICAgIHJldHVybiBwcmludEltbXV0YWJsZVZhbHVlcyhcbiAgICAgIHZhbCxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGluZGVudGF0aW9uLFxuICAgICAgZGVwdGgsXG4gICAgICByZWZzLFxuICAgICAgcHJpbnRlcixcbiAgICAgIHZhbFtJU19PUkRFUkVEX1NFTlRJTkVMXSA/ICdPcmRlcmVkU2V0JyA6ICdTZXQnXG4gICAgKTtcbiAgfVxuXG4gIGlmICh2YWxbSVNfU1RBQ0tfU0VOVElORUxdKSB7XG4gICAgcmV0dXJuIHByaW50SW1tdXRhYmxlVmFsdWVzKFxuICAgICAgdmFsLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24sXG4gICAgICBkZXB0aCxcbiAgICAgIHJlZnMsXG4gICAgICBwcmludGVyLFxuICAgICAgJ1N0YWNrJ1xuICAgICk7XG4gIH1cblxuICBpZiAodmFsW0lTX1NFUV9TRU5USU5FTF0pIHtcbiAgICByZXR1cm4gcHJpbnRJbW11dGFibGVTZXEodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcik7XG4gIH0gLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBpbW11dGFibGUgdjMgYW5kIHY0LCBsZXQgcmVjb3JkIGJlIHRoZSBkZWZhdWx0LlxuXG4gIHJldHVybiBwcmludEltbXV0YWJsZVJlY29yZCh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKTtcbn07IC8vIEV4cGxpY2l0bHkgY29tcGFyaW5nIHNlbnRpbmVsIHByb3BlcnRpZXMgdG8gdHJ1ZSBhdm9pZHMgZmFsc2UgcG9zaXRpdmVcbi8vIHdoZW4gbW9jayBpZGVudGl0eS1vYmotcHJveHkgcmV0dXJucyB0aGUga2V5IGFzIHRoZSB2YWx1ZSBmb3IgYW55IGtleS5cblxuZXhwb3J0cy5zZXJpYWxpemUgPSBzZXJpYWxpemU7XG5cbmNvbnN0IHRlc3QgPSB2YWwgPT5cbiAgdmFsICYmXG4gICh2YWxbSVNfSVRFUkFCTEVfU0VOVElORUxdID09PSB0cnVlIHx8IHZhbFtJU19SRUNPUkRfU0VOVElORUxdID09PSB0cnVlKTtcblxuZXhwb3J0cy50ZXN0ID0gdGVzdDtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSB2b2lkIDA7XG5cbnZhciBSZWFjdElzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZSgncmVhY3QtaXMnKSk7XG5cbnZhciBfbWFya3VwID0gcmVxdWlyZSgnLi9saWIvbWFya3VwJyk7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHtcbiAgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDtcbiAgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbiAgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWNoZTtcbiAgfTtcbiAgcmV0dXJuIGNhY2hlO1xufVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHtcbiAgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iaiAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICByZXR1cm4ge2RlZmF1bHQ6IG9ian07XG4gIH1cbiAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7XG4gIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkge1xuICAgIHJldHVybiBjYWNoZS5nZXQob2JqKTtcbiAgfVxuICB2YXIgbmV3T2JqID0ge307XG4gIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yXG4gICAgICAgID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gIGlmIChjYWNoZSkge1xuICAgIGNhY2hlLnNldChvYmosIG5ld09iaik7XG4gIH1cbiAgcmV0dXJuIG5ld09iajtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLy8gR2l2ZW4gZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgb3Igc3VidHJlZSBkdXJpbmcgcmVjdXJzaXZlIHRyYXZlcnNhbCxcbi8vIHJldHVybiBmbGF0dGVuZWQgYXJyYXkgb2YgY2hpbGRyZW4uXG5jb25zdCBnZXRDaGlsZHJlbiA9IChhcmcsIGNoaWxkcmVuID0gW10pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGFyZy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgZ2V0Q2hpbGRyZW4oaXRlbSwgY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGFyZyAhPSBudWxsICYmIGFyZyAhPT0gZmFsc2UpIHtcbiAgICBjaGlsZHJlbi5wdXNoKGFyZyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59O1xuXG5jb25zdCBnZXRUeXBlID0gZWxlbWVudCA9PiB7XG4gIGNvbnN0IHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJztcbiAgfVxuXG4gIGlmIChSZWFjdElzLmlzRnJhZ21lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gJ1JlYWN0LkZyYWdtZW50JztcbiAgfVxuXG4gIGlmIChSZWFjdElzLmlzU3VzcGVuc2UoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gJ1JlYWN0LlN1c3BlbnNlJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmIChSZWFjdElzLmlzQ29udGV4dFByb3ZpZGVyKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gJ0NvbnRleHQuUHJvdmlkZXInO1xuICAgIH1cblxuICAgIGlmIChSZWFjdElzLmlzQ29udGV4dENvbnN1bWVyKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gJ0NvbnRleHQuQ29uc3VtZXInO1xuICAgIH1cblxuICAgIGlmIChSZWFjdElzLmlzRm9yd2FyZFJlZihlbGVtZW50KSkge1xuICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGUucmVuZGVyLmRpc3BsYXlOYW1lIHx8IHR5cGUucmVuZGVyLm5hbWUgfHwgJyc7XG4gICAgICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJ1xuICAgICAgICA/ICdGb3J3YXJkUmVmKCcgKyBmdW5jdGlvbk5hbWUgKyAnKSdcbiAgICAgICAgOiAnRm9yd2FyZFJlZic7XG4gICAgfVxuXG4gICAgaWYgKFJlYWN0SXMuaXNNZW1vKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPVxuICAgICAgICB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUudHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLnR5cGUubmFtZSB8fCAnJztcbiAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gJ01lbW8oJyArIGZ1bmN0aW9uTmFtZSArICcpJyA6ICdNZW1vJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJ1VOREVGSU5FRCc7XG59O1xuXG5jb25zdCBnZXRQcm9wS2V5cyA9IGVsZW1lbnQgPT4ge1xuICBjb25zdCB7cHJvcHN9ID0gZWxlbWVudDtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKVxuICAgIC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBwcm9wc1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgLnNvcnQoKTtcbn07XG5cbmNvbnN0IHNlcmlhbGl6ZSA9IChlbGVtZW50LCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50QXNMZWFmKShnZXRUeXBlKGVsZW1lbnQpLCBjb25maWcpXG4gICAgOiAoMCwgX21hcmt1cC5wcmludEVsZW1lbnQpKFxuICAgICAgICBnZXRUeXBlKGVsZW1lbnQpLFxuICAgICAgICAoMCwgX21hcmt1cC5wcmludFByb3BzKShcbiAgICAgICAgICBnZXRQcm9wS2V5cyhlbGVtZW50KSxcbiAgICAgICAgICBlbGVtZW50LnByb3BzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICksXG4gICAgICAgICgwLCBfbWFya3VwLnByaW50Q2hpbGRyZW4pKFxuICAgICAgICAgIGdldENoaWxkcmVuKGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb25cbiAgICAgICk7XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+IHZhbCAmJiBSZWFjdElzLmlzRWxlbWVudCh2YWwpO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgYj02MDEwMyxjPTYwMTA2LGQ9NjAxMDcsZT02MDEwOCxmPTYwMTE0LGc9NjAxMDksaD02MDExMCxrPTYwMTEyLGw9NjAxMTMsbT02MDEyMCxuPTYwMTE1LHA9NjAxMTYscT02MDEyMSxyPTYwMTIyLHU9NjAxMTcsdj02MDEyOSx3PTYwMTMxO1xuaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIHg9U3ltYm9sLmZvcjtiPXgoXCJyZWFjdC5lbGVtZW50XCIpO2M9eChcInJlYWN0LnBvcnRhbFwiKTtkPXgoXCJyZWFjdC5mcmFnbWVudFwiKTtlPXgoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTtmPXgoXCJyZWFjdC5wcm9maWxlclwiKTtnPXgoXCJyZWFjdC5wcm92aWRlclwiKTtoPXgoXCJyZWFjdC5jb250ZXh0XCIpO2s9eChcInJlYWN0LmZvcndhcmRfcmVmXCIpO2w9eChcInJlYWN0LnN1c3BlbnNlXCIpO209eChcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik7bj14KFwicmVhY3QubWVtb1wiKTtwPXgoXCJyZWFjdC5sYXp5XCIpO3E9eChcInJlYWN0LmJsb2NrXCIpO3I9eChcInJlYWN0LnNlcnZlci5ibG9ja1wiKTt1PXgoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTt2PXgoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO3c9eChcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIil9XG5mdW5jdGlvbiB5KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB0PWEuJCR0eXBlb2Y7c3dpdGNoKHQpe2Nhc2UgYjpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBkOmNhc2UgZjpjYXNlIGU6Y2FzZSBsOmNhc2UgbTpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBoOmNhc2UgazpjYXNlIHA6Y2FzZSBuOmNhc2UgZzpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB0fX1jYXNlIGM6cmV0dXJuIHR9fX12YXIgej1nLEE9YixCPWssQz1kLEQ9cCxFPW4sRj1jLEc9ZixIPWUsST1sO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWg7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9ejtleHBvcnRzLkVsZW1lbnQ9QTtleHBvcnRzLkZvcndhcmRSZWY9QjtleHBvcnRzLkZyYWdtZW50PUM7ZXhwb3J0cy5MYXp5PUQ7ZXhwb3J0cy5NZW1vPUU7ZXhwb3J0cy5Qb3J0YWw9RjtleHBvcnRzLlByb2ZpbGVyPUc7ZXhwb3J0cy5TdHJpY3RNb2RlPUg7XG5leHBvcnRzLlN1c3BlbnNlPUk7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbigpe3JldHVybiExfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWh9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1nfTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Yn07ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1rfTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1kfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PXB9O2V4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09bn07XG5leHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09Y307ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09Zn07ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1lfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1sfTtleHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZHx8YT09PWZ8fGE9PT12fHxhPT09ZXx8YT09PWx8fGE9PT1tfHxhPT09d3x8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT1wfHxhLiQkdHlwZW9mPT09bnx8YS4kJHR5cGVvZj09PWd8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PXV8fGEuJCR0eXBlb2Y9PT1xfHxhWzBdPT09cik/ITA6ITF9O1xuZXhwb3J0cy50eXBlT2Y9eTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSB2b2lkIDA7XG5cbnZhciBfbWFya3VwID0gcmVxdWlyZSgnLi9saWIvbWFya3VwJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxbJ2plc3Qtc3ltYm9sLWRvLW5vdC10b3VjaCddIHx8IGdsb2JhbC5TeW1ib2w7XG5jb25zdCB0ZXN0U3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yXG4gICAgPyBTeW1ib2wuZm9yKCdyZWFjdC50ZXN0Lmpzb24nKVxuICAgIDogMHhlYTcxMzU3O1xuXG5jb25zdCBnZXRQcm9wS2V5cyA9IG9iamVjdCA9PiB7XG4gIGNvbnN0IHtwcm9wc30gPSBvYmplY3Q7XG4gIHJldHVybiBwcm9wc1xuICAgID8gT2JqZWN0LmtleXMocHJvcHMpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IHByb3BzW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgLnNvcnQoKVxuICAgIDogW107XG59O1xuXG5jb25zdCBzZXJpYWxpemUgPSAob2JqZWN0LCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50QXNMZWFmKShvYmplY3QudHlwZSwgY29uZmlnKVxuICAgIDogKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50KShcbiAgICAgICAgb2JqZWN0LnR5cGUsXG4gICAgICAgIG9iamVjdC5wcm9wc1xuICAgICAgICAgID8gKDAsIF9tYXJrdXAucHJpbnRQcm9wcykoXG4gICAgICAgICAgICAgIGdldFByb3BLZXlzKG9iamVjdCksXG4gICAgICAgICAgICAgIG9iamVjdC5wcm9wcyxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgICBwcmludGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgb2JqZWN0LmNoaWxkcmVuXG4gICAgICAgICAgPyAoMCwgX21hcmt1cC5wcmludENoaWxkcmVuKShcbiAgICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCxcbiAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgIHJlZnMsXG4gICAgICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uXG4gICAgICApO1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuY29uc3QgdGVzdCA9IHZhbCA9PiB2YWwgJiYgdmFsLiQkdHlwZW9mID09PSB0ZXN0U3ltYm9sO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGRlZmluZUxhenlPYmplY3RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5Jyk7XG5cbi8qKlxuICogU2V0cyBhbiBvYmplY3QncyBwcm9wZXJ0eS4gSWYgYSBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLCB0aGlzIHdpbGxcbiAqIHJlcGxhY2UgaXQgYnV0IG1haW50YWluIGl0cyBkZXNjcmlwdG9yIGNvbmZpZ3VyYXRpb24uIFRoZSBwcm9wZXJ0eSB3aWxsIGJlXG4gKiByZXBsYWNlZCB3aXRoIGEgbGF6eSBnZXR0ZXIuXG4gKlxuICogSW4gREVWIG1vZGUgdGhlIG9yaWdpbmFsIHByb3BlcnR5IHZhbHVlIHdpbGwgYmUgcHJlc2VydmVkIGFzIGBvcmlnaW5hbFtQcm9wZXJ0eU5hbWVdYFxuICogc28gdGhhdCwgaWYgbmVjZXNzYXJ5LCBpdCBjYW4gYmUgcmVzdG9yZWQuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByb3V0ZVxuICogbmV0d29yayByZXF1ZXN0cyB0aHJvdWdoIERldlRvb2xzICh0byB0cmFjZSB0aGVtKTpcbiAqXG4gKiAgIGdsb2JhbC5YTUxIdHRwUmVxdWVzdCA9IGdsb2JhbC5vcmlnaW5hbFhNTEh0dHBSZXF1ZXN0O1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9pc3N1ZXMvOTM0XG4gKi9cbmZ1bmN0aW9uIHBvbHlmaWxsT2JqZWN0UHJvcGVydHk8VD4oXG4gIG9iamVjdDogey4uLn0sXG4gIG5hbWU6IHN0cmluZyxcbiAgZ2V0VmFsdWU6ICgpID0+IFQsXG4pOiB2b2lkIHtcbiAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I8JEZsb3dGaXhNZT4ob2JqZWN0LCBuYW1lKTtcbiAgaWYgKF9fREVWX18gJiYgZGVzY3JpcHRvcikge1xuICAgIGNvbnN0IGJhY2t1cE5hbWUgPSBgb3JpZ2luYWwke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBiYWNrdXBOYW1lLCBkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIGNvbnN0IHtlbnVtZXJhYmxlLCB3cml0YWJsZSwgY29uZmlndXJhYmxlID0gZmFsc2V9ID0gZGVzY3JpcHRvciB8fCB7fTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgIWNvbmZpZ3VyYWJsZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcG9seWZpbGwuICcgKyBuYW1lICsgJyBpcyBub3QgY29uZmlndXJhYmxlLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRlZmluZUxhenlPYmplY3RQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcbiAgICBnZXQ6IGdldFZhbHVlLFxuICAgIGVudW1lcmFibGU6IGVudW1lcmFibGUgIT09IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB3cml0YWJsZSAhPT0gZmFsc2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwb2x5ZmlsbEdsb2JhbDxUPihuYW1lOiBzdHJpbmcsIGdldFZhbHVlOiAoKSA9PiBUKTogdm9pZCB7XG4gIHBvbHlmaWxsT2JqZWN0UHJvcGVydHkoZ2xvYmFsLCBuYW1lLCBnZXRWYWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge3BvbHlmaWxsT2JqZWN0UHJvcGVydHksIHBvbHlmaWxsR2xvYmFsfTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlL3NldGltbWVkaWF0ZS9lczYtZXh0ZW5zaW9ucycpO1xuXG5yZXF1aXJlKCdwcm9taXNlL3NldGltbWVkaWF0ZS9maW5hbGx5Jyk7XG5cbmlmIChfX0RFVl9fKSB7XG4gIHJlcXVpcmUoJ3Byb21pc2Uvc2V0aW1tZWRpYXRlL3JlamVjdGlvbi10cmFja2luZycpLmVuYWJsZShcbiAgICByZXF1aXJlKCcuL3Byb21pc2VSZWplY3Rpb25UcmFja2luZ09wdGlvbnMnKS5kZWZhdWx0LFxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9jb3JlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblByb21pc2UucHJvdG90eXBlLmZpbmFsbHkgPSBmdW5jdGlvbiAoZikge1xuICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZigpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZigpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8vIFN0YXRlczpcbi8vXG4vLyAwIC0gcGVuZGluZ1xuLy8gMSAtIGZ1bGZpbGxlZCB3aXRoIF92YWx1ZVxuLy8gMiAtIHJlamVjdGVkIHdpdGggX3ZhbHVlXG4vLyAzIC0gYWRvcHRlZCB0aGUgc3RhdGUgb2YgYW5vdGhlciBwcm9taXNlLCBfdmFsdWVcbi8vXG4vLyBvbmNlIHRoZSBzdGF0ZSBpcyBubyBsb25nZXIgcGVuZGluZyAoMCkgaXQgaXMgaW1tdXRhYmxlXG5cbi8vIEFsbCBgX2AgcHJlZml4ZWQgcHJvcGVydGllcyB3aWxsIGJlIHJlZHVjZWQgdG8gYF97cmFuZG9tIG51bWJlcn1gXG4vLyBhdCBidWlsZCB0aW1lIHRvIG9iZnVzY2F0ZSB0aGVtIGFuZCBkaXNjb3VyYWdlIHRoZWlyIHVzZS5cbi8vIFdlIGRvbid0IHVzZSBzeW1ib2xzIG9yIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBmdWxseSBoaWRlIHRoZW1cbi8vIGJlY2F1c2UgdGhlIHBlcmZvcm1hbmNlIGlzbid0IGdvb2QgZW5vdWdoLlxuXG5cbi8vIHRvIGF2b2lkIHVzaW5nIHRyeS9jYXRjaCBpbnNpZGUgY3JpdGljYWwgZnVuY3Rpb25zLCB3ZVxuLy8gZXh0cmFjdCB0aGVtIHRvIGhlcmUuXG52YXIgTEFTVF9FUlJPUiA9IG51bGw7XG52YXIgSVNfRVJST1IgPSB7fTtcbmZ1bmN0aW9uIGdldFRoZW4ob2JqKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9iai50aGVuO1xuICB9IGNhdGNoIChleCkge1xuICAgIExBU1RfRVJST1IgPSBleDtcbiAgICByZXR1cm4gSVNfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2FsbE9uZShmbiwgYSkge1xuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICBMQVNUX0VSUk9SID0gZXg7XG4gICAgcmV0dXJuIElTX0VSUk9SO1xuICB9XG59XG5mdW5jdGlvbiB0cnlDYWxsVHdvKGZuLCBhLCBiKSB7XG4gIHRyeSB7XG4gICAgZm4oYSwgYik7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgTEFTVF9FUlJPUiA9IGV4O1xuICAgIHJldHVybiBJU19FUlJPUjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG5cbmZ1bmN0aW9uIFByb21pc2UoZm4pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICB9XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlIGNvbnN0cnVjdG9yXFwncyBhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9XG4gIHRoaXMuX3ggPSAwO1xuICB0aGlzLl95ID0gMDtcbiAgdGhpcy5feiA9IG51bGw7XG4gIHRoaXMuX0EgPSBudWxsO1xuICBpZiAoZm4gPT09IG5vb3ApIHJldHVybjtcbiAgZG9SZXNvbHZlKGZuLCB0aGlzKTtcbn1cblByb21pc2UuX0IgPSBudWxsO1xuUHJvbWlzZS5fQyA9IG51bGw7XG5Qcm9taXNlLl9EID0gbm9vcDtcblxuUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBQcm9taXNlKSB7XG4gICAgcmV0dXJuIHNhZmVUaGVuKHRoaXMsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgfVxuICB2YXIgcmVzID0gbmV3IFByb21pc2Uobm9vcCk7XG4gIGhhbmRsZSh0aGlzLCBuZXcgSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcmVzKSk7XG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBzYWZlVGhlbihzZWxmLCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICByZXR1cm4gbmV3IHNlbGYuY29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXMgPSBuZXcgUHJvbWlzZShub29wKTtcbiAgICByZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgIGhhbmRsZShzZWxmLCBuZXcgSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcmVzKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlKHNlbGYsIGRlZmVycmVkKSB7XG4gIHdoaWxlIChzZWxmLl95ID09PSAzKSB7XG4gICAgc2VsZiA9IHNlbGYuX3o7XG4gIH1cbiAgaWYgKFByb21pc2UuX0IpIHtcbiAgICBQcm9taXNlLl9CKHNlbGYpO1xuICB9XG4gIGlmIChzZWxmLl95ID09PSAwKSB7XG4gICAgaWYgKHNlbGYuX3ggPT09IDApIHtcbiAgICAgIHNlbGYuX3ggPSAxO1xuICAgICAgc2VsZi5fQSA9IGRlZmVycmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VsZi5feCA9PT0gMSkge1xuICAgICAgc2VsZi5feCA9IDI7XG4gICAgICBzZWxmLl9BID0gW3NlbGYuX0EsIGRlZmVycmVkXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VsZi5fQS5wdXNoKGRlZmVycmVkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFuZGxlUmVzb2x2ZWQoc2VsZiwgZGVmZXJyZWQpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXNvbHZlZChzZWxmLCBkZWZlcnJlZCkge1xuICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNiID0gc2VsZi5feSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcbiAgICBpZiAoY2IgPT09IG51bGwpIHtcbiAgICAgIGlmIChzZWxmLl95ID09PSAxKSB7XG4gICAgICAgIHJlc29sdmUoZGVmZXJyZWQucHJvbWlzZSwgc2VsZi5feik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QoZGVmZXJyZWQucHJvbWlzZSwgc2VsZi5feik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByZXQgPSB0cnlDYWxsT25lKGNiLCBzZWxmLl96KTtcbiAgICBpZiAocmV0ID09PSBJU19FUlJPUikge1xuICAgICAgcmVqZWN0KGRlZmVycmVkLnByb21pc2UsIExBU1RfRVJST1IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlKGRlZmVycmVkLnByb21pc2UsIHJldCk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmUoc2VsZiwgbmV3VmFsdWUpIHtcbiAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Byb21pc2VzLWFwbHVzL3Byb21pc2VzLXNwZWMjdGhlLXByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgaWYgKG5ld1ZhbHVlID09PSBzZWxmKSB7XG4gICAgcmV0dXJuIHJlamVjdChcbiAgICAgIHNlbGYsXG4gICAgICBuZXcgVHlwZUVycm9yKCdBIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXRzZWxmLicpXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbmV3VmFsdWUgJiZcbiAgICAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICkge1xuICAgIHZhciB0aGVuID0gZ2V0VGhlbihuZXdWYWx1ZSk7XG4gICAgaWYgKHRoZW4gPT09IElTX0VSUk9SKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KHNlbGYsIExBU1RfRVJST1IpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGVuID09PSBzZWxmLnRoZW4gJiZcbiAgICAgIG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZVxuICAgICkge1xuICAgICAgc2VsZi5feSA9IDM7XG4gICAgICBzZWxmLl96ID0gbmV3VmFsdWU7XG4gICAgICBmaW5hbGUoc2VsZik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZG9SZXNvbHZlKHRoZW4uYmluZChuZXdWYWx1ZSksIHNlbGYpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBzZWxmLl95ID0gMTtcbiAgc2VsZi5feiA9IG5ld1ZhbHVlO1xuICBmaW5hbGUoc2VsZik7XG59XG5cbmZ1bmN0aW9uIHJlamVjdChzZWxmLCBuZXdWYWx1ZSkge1xuICBzZWxmLl95ID0gMjtcbiAgc2VsZi5feiA9IG5ld1ZhbHVlO1xuICBpZiAoUHJvbWlzZS5fQykge1xuICAgIFByb21pc2UuX0Moc2VsZiwgbmV3VmFsdWUpO1xuICB9XG4gIGZpbmFsZShzZWxmKTtcbn1cbmZ1bmN0aW9uIGZpbmFsZShzZWxmKSB7XG4gIGlmIChzZWxmLl94ID09PSAxKSB7XG4gICAgaGFuZGxlKHNlbGYsIHNlbGYuX0EpO1xuICAgIHNlbGYuX0EgPSBudWxsO1xuICB9XG4gIGlmIChzZWxmLl94ID09PSAyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9BLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYW5kbGUoc2VsZiwgc2VsZi5fQVtpXSk7XG4gICAgfVxuICAgIHNlbGYuX0EgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIEhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2Upe1xuICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xufVxuXG4vKipcbiAqIFRha2UgYSBwb3RlbnRpYWxseSBtaXNiZWhhdmluZyByZXNvbHZlciBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlXG4gKiBvbkZ1bGZpbGxlZCBhbmQgb25SZWplY3RlZCBhcmUgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBNYWtlcyBubyBndWFyYW50ZWVzIGFib3V0IGFzeW5jaHJvbnkuXG4gKi9cbmZ1bmN0aW9uIGRvUmVzb2x2ZShmbiwgcHJvbWlzZSkge1xuICB2YXIgZG9uZSA9IGZhbHNlO1xuICB2YXIgcmVzID0gdHJ5Q2FsbFR3byhmbiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICBkb25lID0gdHJ1ZTtcbiAgICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgZG9uZSA9IHRydWU7XG4gICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIH0pO1xuICBpZiAoIWRvbmUgJiYgcmVzID09PSBJU19FUlJPUikge1xuICAgIGRvbmUgPSB0cnVlO1xuICAgIHJlamVjdChwcm9taXNlLCBMQVNUX0VSUk9SKTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUHJvbWlzZSA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG52YXIgREVGQVVMVF9XSElURUxJU1QgPSBbXG4gIFJlZmVyZW5jZUVycm9yLFxuICBUeXBlRXJyb3IsXG4gIFJhbmdlRXJyb3Jcbl07XG5cbnZhciBlbmFibGVkID0gZmFsc2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgZW5hYmxlZCA9IGZhbHNlO1xuICBQcm9taXNlLl9CID0gbnVsbDtcbiAgUHJvbWlzZS5fQyA9IG51bGw7XG59XG5cbmV4cG9ydHMuZW5hYmxlID0gZW5hYmxlO1xuZnVuY3Rpb24gZW5hYmxlKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmIChlbmFibGVkKSBkaXNhYmxlKCk7XG4gIGVuYWJsZWQgPSB0cnVlO1xuICB2YXIgaWQgPSAwO1xuICB2YXIgZGlzcGxheUlkID0gMDtcbiAgdmFyIHJlamVjdGlvbnMgPSB7fTtcbiAgUHJvbWlzZS5fQiA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgaWYgKFxuICAgICAgcHJvbWlzZS5feSA9PT0gMiAmJiAvLyBJUyBSRUpFQ1RFRFxuICAgICAgcmVqZWN0aW9uc1twcm9taXNlLl9FXVxuICAgICkge1xuICAgICAgaWYgKHJlamVjdGlvbnNbcHJvbWlzZS5fRV0ubG9nZ2VkKSB7XG4gICAgICAgIG9uSGFuZGxlZChwcm9taXNlLl9FKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsZWFyVGltZW91dChyZWplY3Rpb25zW3Byb21pc2UuX0VdLnRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHJlamVjdGlvbnNbcHJvbWlzZS5fRV07XG4gICAgfVxuICB9O1xuICBQcm9taXNlLl9DID0gZnVuY3Rpb24gKHByb21pc2UsIGVycikge1xuICAgIGlmIChwcm9taXNlLl94ID09PSAwKSB7IC8vIG5vdCB5ZXQgaGFuZGxlZFxuICAgICAgcHJvbWlzZS5fRSA9IGlkKys7XG4gICAgICByZWplY3Rpb25zW3Byb21pc2UuX0VdID0ge1xuICAgICAgICBkaXNwbGF5SWQ6IG51bGwsXG4gICAgICAgIGVycm9yOiBlcnIsXG4gICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQoXG4gICAgICAgICAgb25VbmhhbmRsZWQuYmluZChudWxsLCBwcm9taXNlLl9FKSxcbiAgICAgICAgICAvLyBGb3IgcmVmZXJlbmNlIGVycm9ycyBhbmQgdHlwZSBlcnJvcnMsIHRoaXMgYWxtb3N0IGFsd2F5c1xuICAgICAgICAgIC8vIG1lYW5zIHRoZSBwcm9ncmFtbWVyIG1hZGUgYSBtaXN0YWtlLCBzbyBsb2cgdGhlbSBhZnRlciBqdXN0XG4gICAgICAgICAgLy8gMTAwbXNcbiAgICAgICAgICAvLyBvdGhlcndpc2UsIHdhaXQgMiBzZWNvbmRzIHRvIHNlZSBpZiB0aGV5IGdldCBoYW5kbGVkXG4gICAgICAgICAgbWF0Y2hXaGl0ZWxpc3QoZXJyLCBERUZBVUxUX1dISVRFTElTVClcbiAgICAgICAgICAgID8gMTAwXG4gICAgICAgICAgICA6IDIwMDBcbiAgICAgICAgKSxcbiAgICAgICAgbG9nZ2VkOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIG9uVW5oYW5kbGVkKGlkKSB7XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5hbGxSZWplY3Rpb25zIHx8XG4gICAgICBtYXRjaFdoaXRlbGlzdChcbiAgICAgICAgcmVqZWN0aW9uc1tpZF0uZXJyb3IsXG4gICAgICAgIG9wdGlvbnMud2hpdGVsaXN0IHx8IERFRkFVTFRfV0hJVEVMSVNUXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZWplY3Rpb25zW2lkXS5kaXNwbGF5SWQgPSBkaXNwbGF5SWQrKztcbiAgICAgIGlmIChvcHRpb25zLm9uVW5oYW5kbGVkKSB7XG4gICAgICAgIHJlamVjdGlvbnNbaWRdLmxvZ2dlZCA9IHRydWU7XG4gICAgICAgIG9wdGlvbnMub25VbmhhbmRsZWQoXG4gICAgICAgICAgcmVqZWN0aW9uc1tpZF0uZGlzcGxheUlkLFxuICAgICAgICAgIHJlamVjdGlvbnNbaWRdLmVycm9yXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3Rpb25zW2lkXS5sb2dnZWQgPSB0cnVlO1xuICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICByZWplY3Rpb25zW2lkXS5kaXNwbGF5SWQsXG4gICAgICAgICAgcmVqZWN0aW9uc1tpZF0uZXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25IYW5kbGVkKGlkKSB7XG4gICAgaWYgKHJlamVjdGlvbnNbaWRdLmxvZ2dlZCkge1xuICAgICAgaWYgKG9wdGlvbnMub25IYW5kbGVkKSB7XG4gICAgICAgIG9wdGlvbnMub25IYW5kbGVkKHJlamVjdGlvbnNbaWRdLmRpc3BsYXlJZCwgcmVqZWN0aW9uc1tpZF0uZXJyb3IpO1xuICAgICAgfSBlbHNlIGlmICghcmVqZWN0aW9uc1tpZF0ub25VbmhhbmRsZWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdQcm9taXNlIFJlamVjdGlvbiBIYW5kbGVkIChpZDogJyArIHJlamVjdGlvbnNbaWRdLmRpc3BsYXlJZCArICcpOidcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICcgIFRoaXMgbWVhbnMgeW91IGNhbiBpZ25vcmUgYW55IHByZXZpb3VzIG1lc3NhZ2VzIG9mIHRoZSBmb3JtIFwiUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uXCIgd2l0aCBpZCAnICtcbiAgICAgICAgICByZWplY3Rpb25zW2lkXS5kaXNwbGF5SWQgKyAnLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IoaWQsIGVycm9yKSB7XG4gIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uIChpZDogJyArIGlkICsgJyk6Jyk7XG4gIHZhciBlcnJTdHIgPSAoZXJyb3IgJiYgKGVycm9yLnN0YWNrIHx8IGVycm9yKSkgKyAnJztcbiAgZXJyU3RyLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgY29uc29sZS53YXJuKCcgICcgKyBsaW5lKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoV2hpdGVsaXN0KGVycm9yLCBsaXN0KSB7XG4gIHJldHVybiBsaXN0LnNvbWUoZnVuY3Rpb24gKGNscykge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIGNscztcbiAgfSk7XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1RoaXMgZmlsZSBjb250YWlucyB0aGUgRVM2IGV4dGVuc2lvbnMgdG8gdGhlIGNvcmUgUHJvbWlzZXMvQSsgQVBJXG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9jb3JlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuLyogU3RhdGljIEZ1bmN0aW9ucyAqL1xuXG52YXIgVFJVRSA9IHZhbHVlUHJvbWlzZSh0cnVlKTtcbnZhciBGQUxTRSA9IHZhbHVlUHJvbWlzZShmYWxzZSk7XG52YXIgTlVMTCA9IHZhbHVlUHJvbWlzZShudWxsKTtcbnZhciBVTkRFRklORUQgPSB2YWx1ZVByb21pc2UodW5kZWZpbmVkKTtcbnZhciBaRVJPID0gdmFsdWVQcm9taXNlKDApO1xudmFyIEVNUFRZU1RSSU5HID0gdmFsdWVQcm9taXNlKCcnKTtcblxuZnVuY3Rpb24gdmFsdWVQcm9taXNlKHZhbHVlKSB7XG4gIHZhciBwID0gbmV3IFByb21pc2UoUHJvbWlzZS5fRCk7XG4gIHAuX3kgPSAxO1xuICBwLl96ID0gdmFsdWU7XG4gIHJldHVybiBwO1xufVxuUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiB2YWx1ZTtcblxuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBOVUxMO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFVOREVGSU5FRDtcbiAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gVFJVRTtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSkgcmV0dXJuIEZBTFNFO1xuICBpZiAodmFsdWUgPT09IDApIHJldHVybiBaRVJPO1xuICBpZiAodmFsdWUgPT09ICcnKSByZXR1cm4gRU1QVFlTVFJJTkc7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB0aGVuID0gdmFsdWUudGhlbjtcbiAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UodGhlbi5iaW5kKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHJlamVjdChleCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlUHJvbWlzZSh2YWx1ZSk7XG59O1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIGlmICh0eXBlb2YgQXJyYXkuZnJvbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEVTMjAxNSssIGl0ZXJhYmxlcyBleGlzdFxuICAgIGl0ZXJhYmxlVG9BcnJheSA9IEFycmF5LmZyb207XG4gICAgcmV0dXJuIEFycmF5LmZyb20oaXRlcmFibGUpO1xuICB9XG5cbiAgLy8gRVM1LCBvbmx5IGFycmF5cyBhbmQgYXJyYXktbGlrZXMgZXhpc3RcbiAgaXRlcmFibGVUb0FycmF5ID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHgpOyB9O1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaXRlcmFibGUpO1xufVxuXG5Qcm9taXNlLmFsbCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgdmFyIGFyZ3MgPSBpdGVyYWJsZVRvQXJyYXkoYXJyKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgIHZhciByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICBmdW5jdGlvbiByZXMoaSwgdmFsKSB7XG4gICAgICBpZiAodmFsICYmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgUHJvbWlzZSAmJiB2YWwudGhlbiA9PT0gUHJvbWlzZS5wcm90b3R5cGUudGhlbikge1xuICAgICAgICAgIHdoaWxlICh2YWwuX3kgPT09IDMpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5fejtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbC5feSA9PT0gMSkgcmV0dXJuIHJlcyhpLCB2YWwuX3opO1xuICAgICAgICAgIGlmICh2YWwuX3kgPT09IDIpIHJlamVjdCh2YWwuX3opO1xuICAgICAgICAgIHZhbC50aGVuKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHJlcyhpLCB2YWwpO1xuICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0aGVuID0gdmFsLnRoZW47XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgcCA9IG5ldyBQcm9taXNlKHRoZW4uYmluZCh2YWwpKTtcbiAgICAgICAgICAgIHAudGhlbihmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAgIHJlcyhpLCB2YWwpO1xuICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFyZ3NbaV0gPSB2YWw7XG4gICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMoaSwgYXJnc1tpXSk7XG4gICAgfVxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIG9uU2V0dGxlZEZ1bGZpbGwodmFsdWUpIHtcbiAgcmV0dXJuIHsgc3RhdHVzOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH07XG59XG5mdW5jdGlvbiBvblNldHRsZWRSZWplY3QocmVhc29uKSB7XG4gIHJldHVybiB7IHN0YXR1czogJ3JlamVjdGVkJywgcmVhc29uOiByZWFzb24gfTtcbn1cbmZ1bmN0aW9uIG1hcEFsbFNldHRsZWQoaXRlbSkge1xuICBpZihpdGVtICYmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGl0ZW0gPT09ICdmdW5jdGlvbicpKXtcbiAgICBpZihpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBpdGVtLnRoZW4gPT09IFByb21pc2UucHJvdG90eXBlLnRoZW4pe1xuICAgICAgcmV0dXJuIGl0ZW0udGhlbihvblNldHRsZWRGdWxmaWxsLCBvblNldHRsZWRSZWplY3QpO1xuICAgIH1cbiAgICB2YXIgdGhlbiA9IGl0ZW0udGhlbjtcbiAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSh0aGVuLmJpbmQoaXRlbSkpLnRoZW4ob25TZXR0bGVkRnVsZmlsbCwgb25TZXR0bGVkUmVqZWN0KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvblNldHRsZWRGdWxmaWxsKGl0ZW0pO1xufVxuUHJvbWlzZS5hbGxTZXR0bGVkID0gZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChpdGVyYWJsZVRvQXJyYXkoaXRlcmFibGUpLm1hcChtYXBBbGxTZXR0bGVkKSk7XG59O1xuXG5Qcm9taXNlLnJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlamVjdCh2YWx1ZSk7XG4gIH0pO1xufTtcblxuUHJvbWlzZS5yYWNlID0gZnVuY3Rpb24gKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGl0ZXJhYmxlVG9BcnJheSh2YWx1ZXMpLmZvckVhY2goZnVuY3Rpb24odmFsdWUpe1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyogUHJvdG90eXBlIE1ldGhvZHMgKi9cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuZnVuY3Rpb24gZ2V0QWdncmVnYXRlRXJyb3IoZXJyb3JzKXtcbiAgaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAnZnVuY3Rpb24nKXtcbiAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywnQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQnKTtcbiAgfVxuXG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQnKTtcblxuICBlcnJvci5uYW1lID0gJ0FnZ3JlZ2F0ZUVycm9yJztcbiAgZXJyb3IuZXJyb3JzID0gZXJyb3JzO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuUHJvbWlzZS5hbnkgPSBmdW5jdGlvbiBwcm9taXNlQW55KHZhbHVlcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHByb21pc2VzID0gaXRlcmFibGVUb0FycmF5KHZhbHVlcyk7XG4gICAgdmFyIGhhc1Jlc29sdmVkID0gZmFsc2U7XG4gICAgdmFyIHJlamVjdGlvblJlYXNvbnMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHJlc29sdmVPbmNlKHZhbHVlKSB7XG4gICAgICBpZiAoIWhhc1Jlc29sdmVkKSB7XG4gICAgICAgIGhhc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0aW9uQ2hlY2socmVhc29uKSB7XG4gICAgICByZWplY3Rpb25SZWFzb25zLnB1c2gocmVhc29uKTtcblxuICAgICAgaWYgKHJlamVjdGlvblJlYXNvbnMubGVuZ3RoID09PSBwcm9taXNlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGdldEFnZ3JlZ2F0ZUVycm9yKHJlamVjdGlvblJlYXNvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihwcm9taXNlcy5sZW5ndGggPT09IDApe1xuICAgICAgcmVqZWN0KGdldEFnZ3JlZ2F0ZUVycm9yKHJlamVjdGlvblJlYXNvbnMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSl7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlT25jZSwgcmVqZWN0aW9uQ2hlY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7aGFzTmF0aXZlQ29uc3RydWN0b3J9ID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL0ZlYXR1cmVEZXRlY3Rpb24nKTtcbmNvbnN0IHtwb2x5ZmlsbEdsb2JhbH0gPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvUG9seWZpbGxGdW5jdGlvbnMnKTtcblxuLyoqXG4gKiBTZXQgdXAgcmVnZW5lcmF0b3IuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1vZHVsZSBkaXJlY3RseSwgb3IganVzdCByZXF1aXJlIEluaXRpYWxpemVDb3JlLlxuICovXG5cbmxldCBoYXNOYXRpdmVHZW5lcmF0b3I7XG50cnkge1xuICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHdhcyBsb3dlcmVkIGJ5IHJlZ2VuZXJhdG9yLXRyYW5zZm9ybSwgaXQgd2lsbCB0cnkgdG9cbiAgLy8gYWNjZXNzIGBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lYCB3aGljaCBkb2Vzbid0IGV4aXN0IHlldCBhbmQgd2lsbCB0aHJvdy5cbiAgaGFzTmF0aXZlR2VuZXJhdG9yID0gaGFzTmF0aXZlQ29uc3RydWN0b3IoXG4gICAgZnVuY3Rpb24qICgpIHt9LFxuICAgICdHZW5lcmF0b3JGdW5jdGlvbicsXG4gICk7XG59IGNhdGNoIHtcbiAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBrbm93IGdlbmVyYXRvcnMgYXJlIG5vdCBwcm92aWRlZCBuYXRpdmVseS5cbiAgaGFzTmF0aXZlR2VuZXJhdG9yID0gZmFsc2U7XG59XG5cbi8vIElmIGdlbmVyYXRvcnMgYXJlIHByb3ZpZGVkIG5hdGl2ZWx5LCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZXJlIHdhcyBub1xuLy8gcmVnZW5lcmF0b3ItdHJhbnNmb3JtLCB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHVwIHRoZSBydW50aW1lLlxuaWYgKCFoYXNOYXRpdmVHZW5lcmF0b3IpIHtcbiAgcG9seWZpbGxHbG9iYWwoJ3JlZ2VuZXJhdG9yUnVudGltZScsICgpID0+IHtcbiAgICAvLyBUaGUgcmVxdWlyZSBqdXN0IHNldHMgdXAgdGhlIGdsb2JhbCwgc28gbWFrZSBzdXJlIHdoZW4gd2UgZmlyc3RcbiAgICAvLyBpbnZva2UgaXQgdGhlIGdsb2JhbCBkb2VzIG5vdCBleGlzdFxuICAgIGRlbGV0ZSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuXG4gICAgLy8gcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lIGV4cG9ydHMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBvYmplY3QsIHNvIHdlXG4gICAgLy8gY2FuIHJldHVybiBpdCBzYWZlbHkuXG4gICAgcmV0dXJuIHJlcXVpcmUoJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZScpOyAvLyBmbG93bGludC1saW5lIHVudHlwZWQtaW1wb3J0Om9mZlxuICB9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbi8qKlxuICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCBhIEBwYXJhbSB7ZnVuY3Rpb259IGYgaXMgcHJvdmlkZWQgbmF0aXZlbHkgYnkgY2FsbGluZ1xuICogYHRvU3RyaW5nYCBhbmQgY2hlY2sgaWYgdGhlIHJlc3VsdCBpbmNsdWRlcyBgW25hdGl2ZSBjb2RlXWAgaW4gaXQuXG4gKlxuICogTm90ZSB0aGF0IGEgcG9seWZpbGwgY2FuIHRlY2huaWNhbGx5IGZha2UgdGhpcyBiZWhhdmlvciBidXQgZmV3IGRvZXMgaXQuXG4gKiBUaGVyZWZvcmUsIHRoaXMgaXMgdXN1YWxseSBnb29kIGVub3VnaCBmb3Igb3VyIHB1cnBvc2UuXG4gKi9cbmZ1bmN0aW9uIGlzTmF0aXZlRnVuY3Rpb24oZjogRnVuY3Rpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBmID09PSAnZnVuY3Rpb24nICYmIGYudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGVdJykgPiAtMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBjb25zdHJ1Y3RvciBvZiBAcGFyYW0ge29iamVjdH0gbyBpcyBhbiBuYXRpdmVcbiAqIGZ1bmN0aW9uIG5hbWVkIHdpdGggQHBhcmFtIHtzdHJpbmd9IGV4cGVjdGVkTmFtZS5cbiAqL1xuZnVuY3Rpb24gaGFzTmF0aXZlQ29uc3RydWN0b3IobzogT2JqZWN0LCBleHBlY3RlZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBjb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobykuY29uc3RydWN0b3I7XG4gIHJldHVybiBjb24ubmFtZSA9PT0gZXhwZWN0ZWROYW1lICYmIGlzTmF0aXZlRnVuY3Rpb24oY29uKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7aXNOYXRpdmVGdW5jdGlvbiwgaGFzTmF0aXZlQ29uc3RydWN0b3J9O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAob2JqLCBrZXksIGRlc2MpIHsgb2JqW2tleV0gPSBkZXNjLnZhbHVlOyB9O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBkZWZpbmVQcm9wZXJ0eShnZW5lcmF0b3IsIFwiX2ludm9rZVwiLCB7IHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIH0pO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHsgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIGRlZmluZVByb3BlcnR5KFxuICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIFwiY29uc3RydWN0b3JcIixcbiAgICB7IHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbiwgY29uZmlndXJhYmxlOiB0cnVlIH1cbiAgKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoXG4gICAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wsXG4gICAgXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICk7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIik7XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ludm9rZVwiLCB7IHZhbHVlOiBlbnF1ZXVlIH0pO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBhc3luY0l0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgaWYgKFByb21pc2VJbXBsID09PSB2b2lkIDApIFByb21pc2VJbXBsID0gUHJvbWlzZTtcblxuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSxcbiAgICAgIFByb21pc2VJbXBsXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZDtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kTmFtZV07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCwgb3IgYSBtaXNzaW5nIC5uZXh0IG1laHRvZCwgYWx3YXlzIHRlcm1pbmF0ZSB0aGVcbiAgICAgIC8vIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICBpZiAobWV0aG9kTmFtZSA9PT0gXCJ0aHJvd1wiICYmIGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2ROYW1lICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG1ldGhvZE5hbWUgKyBcIicgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgZGVmaW5lKEdwLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuXG4gIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIgb2JqZWN0ID0gT2JqZWN0KHZhbCk7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZVxuICAvLyBvciBub3QsIHJldHVybiB0aGUgcnVudGltZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gZGVjbGFyZSB0aGUgdmFyaWFibGVcbiAgLy8gcmVnZW5lcmF0b3JSdW50aW1lIGluIHRoZSBvdXRlciBzY29wZSwgd2hpY2ggYWxsb3dzIHRoaXMgbW9kdWxlIHRvIGJlXG4gIC8vIGluamVjdGVkIGVhc2lseSBieSBgYmluL3JlZ2VuZXJhdG9yIC0taW5jbHVkZS1ydW50aW1lIHNjcmlwdC5qc2AuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KFxuICAvLyBJZiB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGUsIHVzZSBtb2R1bGUuZXhwb3J0c1xuICAvLyBhcyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBlbXB0eVxuICAvLyBvYmplY3QuIEVpdGhlciB3YXksIHRoZSByZXN1bHRpbmcgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplXG4gIC8vIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgdmFyaWFibGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuXG4gIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgPyBtb2R1bGUuZXhwb3J0cyA6IHt9XG4pKTtcblxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIC8vIFRoaXMgbW9kdWxlIHNob3VsZCBub3QgYmUgcnVubmluZyBpbiBzdHJpY3QgbW9kZSwgc28gdGhlIGFib3ZlXG4gIC8vIGFzc2lnbm1lbnQgc2hvdWxkIGFsd2F5cyB3b3JrIHVubGVzcyBzb21ldGhpbmcgaXMgbWlzY29uZmlndXJlZC4gSnVzdFxuICAvLyBpbiBjYXNlIHJ1bnRpbWUuanMgYWNjaWRlbnRhbGx5IHJ1bnMgaW4gc3RyaWN0IG1vZGUsIGluIG1vZGVybiBlbmdpbmVzXG4gIC8vIHdlIGNhbiBleHBsaWNpdGx5IGFjY2VzcyBnbG9iYWxUaGlzLiBJbiBvbGRlciBlbmdpbmVzIHdlIGNhbiBlc2NhcGVcbiAgLy8gc3RyaWN0IG1vZGUgdXNpbmcgYSBnbG9iYWwgRnVuY3Rpb24gY2FsbC4gVGhpcyBjb3VsZCBjb25jZWl2YWJseSBmYWlsXG4gIC8vIGlmIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZm9yYmlkcyB1c2luZyBGdW5jdGlvbiwgYnV0IGluIHRoYXQgY2FzZVxuICAvLyB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGUgYWNjaWRlbnRhbCBzdHJpY3QgbW9kZSBwcm9ibGVtLiBJZlxuICAvLyB5b3UndmUgbWlzY29uZmlndXJlZCB5b3VyIGJ1bmRsZXIgdG8gZm9yY2Ugc3RyaWN0IG1vZGUgYW5kIGFwcGxpZWQgYVxuICAvLyBDU1AgdG8gZm9yYmlkIEZ1bmN0aW9uLCBhbmQgeW91J3JlIG5vdCB3aWxsaW5nIHRvIGZpeCBlaXRoZXIgb2YgdGhvc2VcbiAgLy8gcHJvYmxlbXMsIHBsZWFzZSBkZXRhaWwgeW91ciB1bmlxdWUgcHJlZGljYW1lbnQgaW4gYSBHaXRIdWIgaXNzdWUuXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7aXNOYXRpdmVGdW5jdGlvbn0gPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvRmVhdHVyZURldGVjdGlvbicpO1xuY29uc3Qge3BvbHlmaWxsR2xvYmFsfSA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9Qb2x5ZmlsbEZ1bmN0aW9ucycpO1xuXG5pZiAoX19ERVZfXykge1xuICBpZiAodHlwZW9mIGdsb2JhbC5Qcm9taXNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcignUHJvbWlzZSBzaG91bGQgZXhpc3QgYmVmb3JlIHNldHRpbmcgdXAgdGltZXJzLicpO1xuICB9XG59XG5cbi8vIEN1cnJlbnRseSwgSGVybWVzIGBQcm9taXNlYCBpcyBpbXBsZW1lbnRlZCB2aWEgSW50ZXJuYWwgQnl0ZWNvZGUuXG5jb25zdCBoYXNIZXJtZXNQcm9taXNlUXVldWVkVG9KU1ZNID1cbiAgZ2xvYmFsLkhlcm1lc0ludGVybmFsPy5oYXNQcm9taXNlPy4oKSA9PT0gdHJ1ZSAmJlxuICBnbG9iYWwuSGVybWVzSW50ZXJuYWw/LnVzZUVuZ2luZVF1ZXVlPy4oKSA9PT0gdHJ1ZTtcblxuY29uc3QgaGFzTmF0aXZlUHJvbWlzZSA9IGlzTmF0aXZlRnVuY3Rpb24oUHJvbWlzZSk7XG5jb25zdCBoYXNQcm9taXNlUXVldWVkVG9KU1ZNID0gaGFzTmF0aXZlUHJvbWlzZSB8fCBoYXNIZXJtZXNQcm9taXNlUXVldWVkVG9KU1ZNO1xuXG4vLyBJbiBicmlkZ2VsZXNzIG1vZGUsIHRpbWVycyBhcmUgaG9zdCBmdW5jdGlvbnMgaW5zdGFsbGVkIGZyb20gY3BwLlxuaWYgKGdsb2JhbC5STiRCcmlkZ2VsZXNzICE9PSB0cnVlKSB7XG4gIC8qKlxuICAgKiBTZXQgdXAgdGltZXJzLlxuICAgKiBZb3UgY2FuIHVzZSB0aGlzIG1vZHVsZSBkaXJlY3RseSwgb3IganVzdCByZXF1aXJlIEluaXRpYWxpemVDb3JlLlxuICAgKi9cbiAgY29uc3QgZGVmaW5lTGF6eVRpbWVyID0gKFxuICAgIG5hbWU6XG4gICAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdjYW5jZWxBbmltYXRpb25GcmFtZSc+XG4gICAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdjYW5jZWxJZGxlQ2FsbGJhY2snPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnY2xlYXJJbnRlcnZhbCc+XG4gICAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdjbGVhclRpbWVvdXQnPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwncmVxdWVzdEFuaW1hdGlvbkZyYW1lJz5cbiAgICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3JlcXVlc3RJZGxlQ2FsbGJhY2snPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnc2V0SW50ZXJ2YWwnPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnc2V0VGltZW91dCc+LFxuICApID0+IHtcbiAgICBwb2x5ZmlsbEdsb2JhbChuYW1lLCAoKSA9PiByZXF1aXJlKCcuL1RpbWVycy9KU1RpbWVycycpW25hbWVdKTtcbiAgfTtcbiAgZGVmaW5lTGF6eVRpbWVyKCdzZXRUaW1lb3V0Jyk7XG4gIGRlZmluZUxhenlUaW1lcignY2xlYXJUaW1lb3V0Jyk7XG4gIGRlZmluZUxhenlUaW1lcignc2V0SW50ZXJ2YWwnKTtcbiAgZGVmaW5lTGF6eVRpbWVyKCdjbGVhckludGVydmFsJyk7XG4gIGRlZmluZUxhenlUaW1lcigncmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG4gIGRlZmluZUxhenlUaW1lcignY2FuY2VsQW5pbWF0aW9uRnJhbWUnKTtcbiAgZGVmaW5lTGF6eVRpbWVyKCdyZXF1ZXN0SWRsZUNhbGxiYWNrJyk7XG4gIGRlZmluZUxhenlUaW1lcignY2FuY2VsSWRsZUNhbGxiYWNrJyk7XG59XG5cbi8qKlxuICogU2V0IHVwIGltbWVkaWF0ZSBBUElzLCB3aGljaCBpcyByZXF1aXJlZCB0byB1c2UgdGhlIHNhbWUgbWljcm90YXNrIHF1ZXVlXG4gKiBhcyB0aGUgUHJvbWlzZS5cbiAqL1xuaWYgKGhhc1Byb21pc2VRdWV1ZWRUb0pTVk0pIHtcbiAgLy8gV2hlbiBwcm9taXNlIHF1ZXVlcyB0byB0aGUgSlNWTSBtaWNyb3Rhc2tzIHF1ZXVlLCB3ZSBzaGltIHRoZSBpbW1lZGlhdGVcbiAgLy8gQVBJcyB2aWEgYHF1ZXVlTWljcm90YXNrYCB0byBtYWludGFpbiB0aGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgcG9seWZpbGxHbG9iYWwoXG4gICAgJ3NldEltbWVkaWF0ZScsXG4gICAgKCkgPT4gcmVxdWlyZSgnLi9UaW1lcnMvaW1tZWRpYXRlU2hpbScpLnNldEltbWVkaWF0ZSxcbiAgKTtcbiAgcG9seWZpbGxHbG9iYWwoXG4gICAgJ2NsZWFySW1tZWRpYXRlJyxcbiAgICAoKSA9PiByZXF1aXJlKCcuL1RpbWVycy9pbW1lZGlhdGVTaGltJykuY2xlYXJJbW1lZGlhdGUsXG4gICk7XG59IGVsc2Uge1xuICAvLyBXaGVuIHByb21pc2Ugd2FzIHBvbHlmaWxsZWQgaGVuY2UgaXMgcXVldWVkIHRvIHRoZSBSTiBtaWNyb3Rhc2sgcXVldWUsXG4gIC8vIHdlIHBvbHlmaWxsIHRoZSBpbW1lZGlhdGUgQVBJcyBhcyBhbGlhc2VzIHRvIHRoZSBSZWFjdE5hdGl2ZU1pY3JvdGFzayBBUElzLlxuICAvLyBOb3RlIHRoYXQgaW4gYnJpZGdlbGVzcyBtb2RlLCBpbW1lZGlhdGUgQVBJcyBhcmUgaW5zdGFsbGVkIGZyb20gY3BwLlxuICBpZiAoZ2xvYmFsLlJOJEJyaWRnZWxlc3MgIT09IHRydWUpIHtcbiAgICBwb2x5ZmlsbEdsb2JhbChcbiAgICAgICdzZXRJbW1lZGlhdGUnLFxuICAgICAgKCkgPT4gcmVxdWlyZSgnLi9UaW1lcnMvSlNUaW1lcnMnKS5xdWV1ZVJlYWN0TmF0aXZlTWljcm90YXNrLFxuICAgICk7XG4gICAgcG9seWZpbGxHbG9iYWwoXG4gICAgICAnY2xlYXJJbW1lZGlhdGUnLFxuICAgICAgKCkgPT4gcmVxdWlyZSgnLi9UaW1lcnMvSlNUaW1lcnMnKS5jbGVhclJlYWN0TmF0aXZlTWljcm90YXNrLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgdXAgdGhlIG1pY3JvdGFzayBxdWV1ZWluZyBBUEksIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgc2FtZVxuICogbWljcm90YXNrIHF1ZXVlIGFzIHRoZSBQcm9taXNlLlxuICovXG5pZiAoaGFzSGVybWVzUHJvbWlzZVF1ZXVlZFRvSlNWTSkge1xuICAvLyBGYXN0IHBhdGggZm9yIEhlcm1lcy5cbiAgcG9seWZpbGxHbG9iYWwoJ3F1ZXVlTWljcm90YXNrJywgKCkgPT4gZ2xvYmFsLkhlcm1lc0ludGVybmFsPy5lbnF1ZXVlSm9iKTtcbn0gZWxzZSB7XG4gIC8vIFBvbHlmaWxsIGl0IHdpdGggcHJvbWlzZSAocmVnYXJkbGVzcyBpdCdzIHBvbHlmaWxsZWQgb3IgbmF0aXZlKSBvdGhlcndpc2UuXG4gIHBvbHlmaWxsR2xvYmFsKFxuICAgICdxdWV1ZU1pY3JvdGFzaycsXG4gICAgKCkgPT4gcmVxdWlyZSgnLi9UaW1lcnMvcXVldWVNaWNyb3Rhc2suanMnKS5kZWZhdWx0LFxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IE5hdGl2ZVRpbWluZyBmcm9tICcuL05hdGl2ZVRpbWluZyc7XG5cbmNvbnN0IEJhdGNoZWRCcmlkZ2UgPSByZXF1aXJlKCcuLi8uLi9CYXRjaGVkQnJpZGdlL0JhdGNoZWRCcmlkZ2UnKTtcbmNvbnN0IFN5c3RyYWNlID0gcmVxdWlyZSgnLi4vLi4vUGVyZm9ybWFuY2UvU3lzdHJhY2UnKTtcbmNvbnN0IGludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG4vKipcbiAqIEpTIGltcGxlbWVudGF0aW9uIG9mIHRpbWVyIGZ1bmN0aW9ucy4gTXVzdCBiZSBjb21wbGV0ZWx5IGRyaXZlbiBieSBhblxuICogZXh0ZXJuYWwgY2xvY2sgc2lnbmFsLCBhbGwgdGhhdCdzIHN0b3JlZCBoZXJlIGlzIHRpbWVySUQsIHRpbWVyIHR5cGUsIGFuZFxuICogY2FsbGJhY2suXG4gKi9cblxuZXhwb3J0IHR5cGUgSlNUaW1lclR5cGUgPVxuICB8ICdzZXRUaW1lb3V0J1xuICB8ICdzZXRJbnRlcnZhbCdcbiAgfCAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ1xuICB8ICdxdWV1ZVJlYWN0TmF0aXZlTWljcm90YXNrJ1xuICB8ICdyZXF1ZXN0SWRsZUNhbGxiYWNrJztcblxuLy8gVGhlc2UgdGltaW5nIGNvbnN0YW50cyBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIG9uZXMgaW4gbmF0aXZlIGlvcyBhbmRcbi8vIGFuZHJvaWQgYFJDVFRpbWluZ2AgbW9kdWxlLlxuY29uc3QgRlJBTUVfRFVSQVRJT04gPSAxMDAwIC8gNjA7XG5jb25zdCBJRExFX0NBTExCQUNLX0ZSQU1FX0RFQURMSU5FID0gMTtcblxuLy8gUGFyYWxsZWwgYXJyYXlzXG5jb25zdCBjYWxsYmFja3M6IEFycmF5PD9GdW5jdGlvbj4gPSBbXTtcbmNvbnN0IHR5cGVzOiBBcnJheTw/SlNUaW1lclR5cGU+ID0gW107XG5jb25zdCB0aW1lcklEczogQXJyYXk8P251bWJlcj4gPSBbXTtcbmxldCByZWFjdE5hdGl2ZU1pY3JvdGFza3M6IEFycmF5PG51bWJlcj4gPSBbXTtcbmxldCByZXF1ZXN0SWRsZUNhbGxiYWNrczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuY29uc3QgcmVxdWVzdElkbGVDYWxsYmFja1RpbWVvdXRzOiB7W251bWJlcl06IG51bWJlciwgLi4ufSA9IHt9O1xuXG5sZXQgR1VJRCA9IDE7XG5jb25zdCBlcnJvcnM6IEFycmF5PEVycm9yPiA9IFtdO1xuXG5sZXQgaGFzRW1pdHRlZFRpbWVEcmlmdFdhcm5pbmcgPSBmYWxzZTtcblxuLy8gUmV0dXJucyBhIGZyZWUgaW5kZXggaWYgb25lIGlzIGF2YWlsYWJsZSwgYW5kIHRoZSBuZXh0IGNvbnNlY3V0aXZlIGluZGV4IG90aGVyd2lzZS5cbmZ1bmN0aW9uIF9nZXRGcmVlSW5kZXgoKTogbnVtYmVyIHtcbiAgbGV0IGZyZWVJbmRleCA9IHRpbWVySURzLmluZGV4T2YobnVsbCk7XG4gIGlmIChmcmVlSW5kZXggPT09IC0xKSB7XG4gICAgZnJlZUluZGV4ID0gdGltZXJJRHMubGVuZ3RoO1xuICB9XG4gIHJldHVybiBmcmVlSW5kZXg7XG59XG5cbmZ1bmN0aW9uIF9hbGxvY2F0ZUNhbGxiYWNrKGZ1bmM6IEZ1bmN0aW9uLCB0eXBlOiBKU1RpbWVyVHlwZSk6IG51bWJlciB7XG4gIGNvbnN0IGlkID0gR1VJRCsrO1xuICBjb25zdCBmcmVlSW5kZXggPSBfZ2V0RnJlZUluZGV4KCk7XG4gIHRpbWVySURzW2ZyZWVJbmRleF0gPSBpZDtcbiAgY2FsbGJhY2tzW2ZyZWVJbmRleF0gPSBmdW5jO1xuICB0eXBlc1tmcmVlSW5kZXhdID0gdHlwZTtcbiAgcmV0dXJuIGlkO1xufVxuXG4vKipcbiAqIENhbGxzIHRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIElELiBBbHNvIHVucmVnaXN0ZXIgdGhhdCBjYWxsYmFja1xuICogaWYgaXQgd2FzIGEgb25lIHRpbWUgdGltZXIgKHNldFRpbWVvdXQpLCBhbmQgbm90IHVucmVnaXN0ZXIgaXQgaWYgaXQgd2FzXG4gKiByZWN1cnJpbmcgKHNldEludGVydmFsKS5cbiAqL1xuZnVuY3Rpb24gX2NhbGxUaW1lcih0aW1lcklEOiBudW1iZXIsIGZyYW1lVGltZTogbnVtYmVyLCBkaWRUaW1lb3V0OiA/Ym9vbGVhbikge1xuICBpZiAodGltZXJJRCA+IEdVSUQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnVHJpZWQgdG8gY2FsbCB0aW1lciB3aXRoIElEICVzIGJ1dCBubyBzdWNoIHRpbWVyIGV4aXN0cy4nLFxuICAgICAgdGltZXJJRCxcbiAgICApO1xuICB9XG5cbiAgLy8gdGltZXJJbmRleCBvZiAtMSBtZWFucyB0aGF0IG5vIHRpbWVyIHdpdGggdGhhdCBJRCBleGlzdHMuIFRoZXJlIGFyZVxuICAvLyB0d28gc2l0dWF0aW9ucyB3aGVuIHRoaXMgaGFwcGVucywgd2hlbiBhIGdhcmJhZ2UgdGltZXIgSUQgd2FzIGdpdmVuXG4gIC8vIGFuZCB3aGVuIGEgcHJldmlvdXNseSBleGlzdGluZyB0aW1lciB3YXMgZGVsZXRlZCBiZWZvcmUgdGhpcyBjYWxsYmFja1xuICAvLyBmaXJlZC4gSW4gYm90aCBjYXNlcyB3ZSB3YW50IHRvIGlnbm9yZSB0aGUgdGltZXIgaWQsIGJ1dCBpbiB0aGUgZm9ybWVyXG4gIC8vIGNhc2Ugd2Ugd2FybiBhcyB3ZWxsLlxuICBjb25zdCB0aW1lckluZGV4ID0gdGltZXJJRHMuaW5kZXhPZih0aW1lcklEKTtcbiAgaWYgKHRpbWVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHlwZSA9IHR5cGVzW3RpbWVySW5kZXhdO1xuICBjb25zdCBjYWxsYmFjayA9IGNhbGxiYWNrc1t0aW1lckluZGV4XTtcbiAgaWYgKCFjYWxsYmFjayB8fCAhdHlwZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ05vIGNhbGxiYWNrIGZvdW5kIGZvciB0aW1lcklEICcgKyB0aW1lcklEKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoX19ERVZfXykge1xuICAgIFN5c3RyYWNlLmJlZ2luRXZlbnQodHlwZSArICcgW2ludm9rZV0nKTtcbiAgfVxuXG4gIC8vIENsZWFyIHRoZSBtZXRhZGF0YVxuICBpZiAodHlwZSAhPT0gJ3NldEludGVydmFsJykge1xuICAgIF9jbGVhckluZGV4KHRpbWVySW5kZXgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSAnc2V0VGltZW91dCcgfHxcbiAgICAgIHR5cGUgPT09ICdzZXRJbnRlcnZhbCcgfHxcbiAgICAgIHR5cGUgPT09ICdxdWV1ZVJlYWN0TmF0aXZlTWljcm90YXNrJ1xuICAgICkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKSB7XG4gICAgICBjYWxsYmFjayhnbG9iYWwucGVyZm9ybWFuY2Uubm93KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3JlcXVlc3RJZGxlQ2FsbGJhY2snKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHRpbWVSZW1haW5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBUT0RPOiBPcHRpbWlzYXRpb246IGFsbG93IHJ1bm5pbmcgZm9yIGxvbmdlciB0aGFuIG9uZSBmcmFtZSBpZlxuICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBwZW5kaW5nIEpTIGNhbGxzIG9uIHRoZSBicmlkZ2UgZnJvbSBuYXRpdmUuIFRoaXNcbiAgICAgICAgICAvLyB3b3VsZCByZXF1aXJlIGEgd2F5IHRvIGNoZWNrIHRoZSBicmlkZ2UgcXVldWUgc3luY2hyb25vdXNseS5cbiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgRlJBTUVfRFVSQVRJT04gLSAoZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpIC0gZnJhbWVUaW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBkaWRUaW1lb3V0OiAhIWRpZFRpbWVvdXQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVHJpZWQgdG8gY2FsbCBhIGNhbGxiYWNrIHdpdGggaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRG9uJ3QgcmV0aHJvdyBzbyB0aGF0IHdlIGNhbiBydW4gYWxsIHRpbWVycy5cbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgU3lzdHJhY2UuZW5kRXZlbnQoKTtcbiAgfVxufVxuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2luZ2xlIHBhc3Mgb3ZlciB0aGUgZW5xdWV1ZWQgcmVhY3ROYXRpdmVNaWNyb3Rhc2tzLiBSZXR1cm5zIHdoZXRoZXJcbiAqIG1vcmUgcmVhY3ROYXRpdmVNaWNyb3Rhc2tzIGFyZSBxdWV1ZWQgdXAgKGNhbiBiZSB1c2VkIGFzIGEgY29uZGl0aW9uIGEgd2hpbGUgbG9vcCkuXG4gKi9cbmZ1bmN0aW9uIF9jYWxsUmVhY3ROYXRpdmVNaWNyb3Rhc2tzUGFzcygpIHtcbiAgaWYgKHJlYWN0TmF0aXZlTWljcm90YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoX19ERVZfXykge1xuICAgIFN5c3RyYWNlLmJlZ2luRXZlbnQoJ2NhbGxSZWFjdE5hdGl2ZU1pY3JvdGFza3NQYXNzKCknKTtcbiAgfVxuXG4gIC8vIFRoZSBtYWluIHJlYXNvbiB0byBleHRyYWN0IGEgc2luZ2xlIHBhc3MgaXMgc28gdGhhdCB3ZSBjYW4gdHJhY2tcbiAgLy8gaW4gdGhlIHN5c3RlbSB0cmFjZVxuICBjb25zdCBwYXNzUmVhY3ROYXRpdmVNaWNyb3Rhc2tzID0gcmVhY3ROYXRpdmVNaWNyb3Rhc2tzO1xuICByZWFjdE5hdGl2ZU1pY3JvdGFza3MgPSBbXTtcblxuICAvLyBVc2UgZm9yIGxvb3AgcmF0aGVyIHRoYW4gZm9yRWFjaCBhcyBwZXIgQHZqZXV4J3MgYWR2aWNlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvY29tbWl0L2M4ZmQ5Zjc1ODhhZDAyZDIyOTNjYWM3MjI0NzE1ZjRhZjdiMGYzNTIjY29tbWl0Y29tbWVudC0xNDU3MDA1MVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhc3NSZWFjdE5hdGl2ZU1pY3JvdGFza3MubGVuZ3RoOyArK2kpIHtcbiAgICBfY2FsbFRpbWVyKHBhc3NSZWFjdE5hdGl2ZU1pY3JvdGFza3NbaV0sIDApO1xuICB9XG5cbiAgaWYgKF9fREVWX18pIHtcbiAgICBTeXN0cmFjZS5lbmRFdmVudCgpO1xuICB9XG4gIHJldHVybiByZWFjdE5hdGl2ZU1pY3JvdGFza3MubGVuZ3RoID4gMDtcbn1cblxuZnVuY3Rpb24gX2NsZWFySW5kZXgoaTogbnVtYmVyKSB7XG4gIHRpbWVySURzW2ldID0gbnVsbDtcbiAgY2FsbGJhY2tzW2ldID0gbnVsbDtcbiAgdHlwZXNbaV0gPSBudWxsO1xufVxuXG5mdW5jdGlvbiBfZnJlZUNhbGxiYWNrKHRpbWVySUQ6IG51bWJlcikge1xuICAvLyB0aW1lcklEcyBjb250YWlucyBudWxscyBhZnRlciB0aW1lcnMgaGF2ZSBiZWVuIHJlbW92ZWQ7XG4gIC8vIGlnbm9yZSBudWxscyB1cGZyb250IHNvIGluZGV4T2YgZG9lc24ndCBmaW5kIHRoZW1cbiAgaWYgKHRpbWVySUQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gdGltZXJJRHMuaW5kZXhPZih0aW1lcklEKTtcbiAgLy8gU2VlIGNvcnJlc3BvbmRpbmcgY29tbWVudCBpbiBgY2FsbFRpbWVyc2AgZm9yIHJlYXNvbmluZyBiZWhpbmQgdGhpc1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVzW2luZGV4XTtcbiAgICBfY2xlYXJJbmRleChpbmRleCk7XG4gICAgaWYgKFxuICAgICAgdHlwZSAhPT0gJ3F1ZXVlUmVhY3ROYXRpdmVNaWNyb3Rhc2snICYmXG4gICAgICB0eXBlICE9PSAncmVxdWVzdElkbGVDYWxsYmFjaydcbiAgICApIHtcbiAgICAgIGRlbGV0ZVRpbWVyKHRpbWVySUQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEpTIGltcGxlbWVudGF0aW9uIG9mIHRpbWVyIGZ1bmN0aW9ucy4gTXVzdCBiZSBjb21wbGV0ZWx5IGRyaXZlbiBieSBhblxuICogZXh0ZXJuYWwgY2xvY2sgc2lnbmFsLCBhbGwgdGhhdCdzIHN0b3JlZCBoZXJlIGlzIHRpbWVySUQsIHRpbWVyIHR5cGUsIGFuZFxuICogY2FsbGJhY2suXG4gKi9cbmNvbnN0IEpTVGltZXJzID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBDYWxsYmFjayB0byBiZSBpbnZva2VkIGFmdGVyIGBkdXJhdGlvbmAgbXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkdXJhdGlvbiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgc2V0VGltZW91dDogZnVuY3Rpb24gKFxuICAgIGZ1bmM6IEZ1bmN0aW9uLFxuICAgIGR1cmF0aW9uOiBudW1iZXIsXG4gICAgLi4uYXJnczogYW55XG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgaWQgPSBfYWxsb2NhdGVDYWxsYmFjayhcbiAgICAgICgpID0+IGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmdzKSxcbiAgICAgICdzZXRUaW1lb3V0JyxcbiAgICApO1xuICAgIGNyZWF0ZVRpbWVyKGlkLCBkdXJhdGlvbiB8fCAwLCBEYXRlLm5vdygpLCAvKiByZWN1cnJpbmcgKi8gZmFsc2UpO1xuICAgIHJldHVybiBpZDtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBDYWxsYmFjayB0byBiZSBpbnZva2VkIGV2ZXJ5IGBkdXJhdGlvbmAgbXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkdXJhdGlvbiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChcbiAgICBmdW5jOiBGdW5jdGlvbixcbiAgICBkdXJhdGlvbjogbnVtYmVyLFxuICAgIC4uLmFyZ3M6IGFueVxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGlkID0gX2FsbG9jYXRlQ2FsbGJhY2soXG4gICAgICAoKSA9PiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJncyksXG4gICAgICAnc2V0SW50ZXJ2YWwnLFxuICAgICk7XG4gICAgY3JlYXRlVGltZXIoaWQsIGR1cmF0aW9uIHx8IDAsIERhdGUubm93KCksIC8qIHJlY3VycmluZyAqLyB0cnVlKTtcbiAgICByZXR1cm4gaWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZSBSZWFjdCBOYXRpdmUgbWljcm90YXNrIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGJhY2sgcHVibGljIEFQSXMgZS5nLlxuICAgKiBgcXVldWVNaWNyb3Rhc2tgLCBgY2xlYXJJbW1lZGlhdGVgLCBhbmQgYHNldEltbWVkaWF0ZWAgKHdoaWNoIGlzIHVzZWQgYnlcbiAgICogdGhlIFByb21pc2UgcG9seWZpbGwpIHdoZW4gdGhlIEpTVk0gbWljcm90YXNrIG1lY2hhbmlzbSBpcyBub3QgdXNlZC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBDYWxsYmFjayB0byBiZSBpbnZva2VkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZVxuICAgKiBjdXJyZW50IEphdmFTY3JpcHQgZXhlY3V0aW9uIGxvb3AuXG4gICAqL1xuICBxdWV1ZVJlYWN0TmF0aXZlTWljcm90YXNrOiBmdW5jdGlvbiAoZnVuYzogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueSk6IG51bWJlciB7XG4gICAgY29uc3QgaWQgPSBfYWxsb2NhdGVDYWxsYmFjayhcbiAgICAgICgpID0+IGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmdzKSxcbiAgICAgICdxdWV1ZVJlYWN0TmF0aXZlTWljcm90YXNrJyxcbiAgICApO1xuICAgIHJlYWN0TmF0aXZlTWljcm90YXNrcy5wdXNoKGlkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgQ2FsbGJhY2sgdG8gYmUgaW52b2tlZCBldmVyeSBmcmFtZS5cbiAgICovXG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZTogZnVuY3Rpb24gKGZ1bmM6IEZ1bmN0aW9uKTogYW55IHwgbnVtYmVyIHtcbiAgICBjb25zdCBpZCA9IF9hbGxvY2F0ZUNhbGxiYWNrKGZ1bmMsICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbiAgICBjcmVhdGVUaW1lcihpZCwgMSwgRGF0ZS5ub3coKSwgLyogcmVjdXJyaW5nICovIGZhbHNlKTtcbiAgICByZXR1cm4gaWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgQ2FsbGJhY2sgdG8gYmUgaW52b2tlZCBldmVyeSBmcmFtZSBhbmQgcHJvdmlkZWRcbiAgICogd2l0aCB0aW1lIHJlbWFpbmluZyBpbiBmcmFtZS5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICByZXF1ZXN0SWRsZUNhbGxiYWNrOiBmdW5jdGlvbiAoXG4gICAgZnVuYzogRnVuY3Rpb24sXG4gICAgb3B0aW9uczogP09iamVjdCxcbiAgKTogYW55IHwgbnVtYmVyIHtcbiAgICBpZiAocmVxdWVzdElkbGVDYWxsYmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZXRTZW5kSWRsZUV2ZW50cyh0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRpbWVvdXQ7XG4gICAgY29uc3QgaWQ6IG51bWJlciA9IF9hbGxvY2F0ZUNhbGxiYWNrKFxuICAgICAgdGltZW91dCAhPSBudWxsXG4gICAgICAgID8gKGRlYWRsaW5lOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZDogbnVtYmVyID0gcmVxdWVzdElkbGVDYWxsYmFja1RpbWVvdXRzW2lkXTtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgICAgICAgSlNUaW1lcnMuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SWRsZUNhbGxiYWNrVGltZW91dHNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmMoZGVhZGxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgOiBmdW5jLFxuICAgICAgJ3JlcXVlc3RJZGxlQ2FsbGJhY2snLFxuICAgICk7XG4gICAgcmVxdWVzdElkbGVDYWxsYmFja3MucHVzaChpZCk7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0aW1lb3V0SWQ6IG51bWJlciA9IEpTVGltZXJzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gcmVxdWVzdElkbGVDYWxsYmFja3MuaW5kZXhPZihpZCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgcmVxdWVzdElkbGVDYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICBfY2FsbFRpbWVyKGlkLCBnbG9iYWwucGVyZm9ybWFuY2Uubm93KCksIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0SWRsZUNhbGxiYWNrVGltZW91dHNbaWRdO1xuICAgICAgICBpZiAocmVxdWVzdElkbGVDYWxsYmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgc2V0U2VuZElkbGVFdmVudHMoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2tUaW1lb3V0c1tpZF0gPSB0aW1lb3V0SWQ7XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfSxcblxuICBjYW5jZWxJZGxlQ2FsbGJhY2s6IGZ1bmN0aW9uICh0aW1lcklEOiBudW1iZXIpIHtcbiAgICBfZnJlZUNhbGxiYWNrKHRpbWVySUQpO1xuICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdElkbGVDYWxsYmFja3MuaW5kZXhPZih0aW1lcklEKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICByZXF1ZXN0SWRsZUNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHJlcXVlc3RJZGxlQ2FsbGJhY2tUaW1lb3V0c1t0aW1lcklEXTtcbiAgICBpZiAodGltZW91dElkKSB7XG4gICAgICBKU1RpbWVycy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SWRsZUNhbGxiYWNrVGltZW91dHNbdGltZXJJRF07XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RJZGxlQ2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2V0U2VuZElkbGVFdmVudHMoZmFsc2UpO1xuICAgIH1cbiAgfSxcblxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uICh0aW1lcklEOiBudW1iZXIpIHtcbiAgICBfZnJlZUNhbGxiYWNrKHRpbWVySUQpO1xuICB9LFxuXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uICh0aW1lcklEOiBudW1iZXIpIHtcbiAgICBfZnJlZUNhbGxiYWNrKHRpbWVySUQpO1xuICB9LFxuXG4gIGNsZWFyUmVhY3ROYXRpdmVNaWNyb3Rhc2s6IGZ1bmN0aW9uICh0aW1lcklEOiBudW1iZXIpIHtcbiAgICBfZnJlZUNhbGxiYWNrKHRpbWVySUQpO1xuICAgIGNvbnN0IGluZGV4ID0gcmVhY3ROYXRpdmVNaWNyb3Rhc2tzLmluZGV4T2YodGltZXJJRCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgcmVhY3ROYXRpdmVNaWNyb3Rhc2tzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9LFxuXG4gIGNhbmNlbEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbiAodGltZXJJRDogbnVtYmVyKSB7XG4gICAgX2ZyZWVDYWxsYmFjayh0aW1lcklEKTtcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbmF0aXZlIHNpZGUuIFdlIGFyZSBwYXNzZWQgYW4gYXJyYXkgb2YgdGltZXJJRHMsXG4gICAqIGFuZFxuICAgKi9cbiAgY2FsbFRpbWVyczogZnVuY3Rpb24gKHRpbWVyc1RvQ2FsbDogQXJyYXk8bnVtYmVyPik6IGFueSB8IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIHRpbWVyc1RvQ2FsbC5sZW5ndGggIT09IDAsXG4gICAgICAnQ2Fubm90IGNhbGwgYGNhbGxUaW1lcnNgIHdpdGggYW4gZW1wdHkgbGlzdCBvZiBJRHMuJyxcbiAgICApO1xuXG4gICAgZXJyb3JzLmxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aW1lcnNUb0NhbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9jYWxsVGltZXIodGltZXJzVG9DYWxsW2ldLCAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvckNvdW50ID0gZXJyb3JzLmxlbmd0aDtcbiAgICBpZiAoZXJyb3JDb3VudCA+IDApIHtcbiAgICAgIGlmIChlcnJvckNvdW50ID4gMSkge1xuICAgICAgICAvLyBUaHJvdyBhbGwgdGhlIG90aGVyIGVycm9ycyBpbiBhIHNldFRpbWVvdXQsIHdoaWNoIHdpbGwgdGhyb3cgZWFjaFxuICAgICAgICAvLyBlcnJvciBvbmUgYXQgYSB0aW1lXG4gICAgICAgIGZvciAobGV0IGlpID0gMTsgaWkgPCBlcnJvckNvdW50OyBpaSsrKSB7XG4gICAgICAgICAgSlNUaW1lcnMuc2V0VGltZW91dChcbiAgICAgICAgICAgICgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfSkuYmluZChudWxsLCBlcnJvcnNbaWldKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgIH1cbiAgfSxcblxuICBjYWxsSWRsZUNhbGxiYWNrczogZnVuY3Rpb24gKGZyYW1lVGltZTogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgRlJBTUVfRFVSQVRJT04gLSAoRGF0ZS5ub3coKSAtIGZyYW1lVGltZSkgPFxuICAgICAgSURMRV9DQUxMQkFDS19GUkFNRV9ERUFETElORVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVycm9ycy5sZW5ndGggPSAwO1xuICAgIGlmIChyZXF1ZXN0SWRsZUNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYXNzSWRsZUNhbGxiYWNrcyA9IHJlcXVlc3RJZGxlQ2FsbGJhY2tzO1xuICAgICAgcmVxdWVzdElkbGVDYWxsYmFja3MgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXNzSWRsZUNhbGxiYWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBfY2FsbFRpbWVyKHBhc3NJZGxlQ2FsbGJhY2tzW2ldLCBmcmFtZVRpbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0SWRsZUNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldFNlbmRJZGxlRXZlbnRzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBlcnJvcnMuZm9yRWFjaChlcnJvciA9PlxuICAgICAgSlNUaW1lcnMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSwgMCksXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgd2UgZXhlY3V0ZSBhbnkgY29tbWFuZCB3ZSByZWNlaXZlIGZyb20gbmF0aXZlIGJ1dFxuICAgKiBiZWZvcmUgd2UgaGFuZCBjb250cm9sIGJhY2sgdG8gbmF0aXZlLlxuICAgKi9cbiAgY2FsbFJlYWN0TmF0aXZlTWljcm90YXNrcygpIHtcbiAgICBlcnJvcnMubGVuZ3RoID0gMDtcbiAgICB3aGlsZSAoX2NhbGxSZWFjdE5hdGl2ZU1pY3JvdGFza3NQYXNzKCkpIHt9XG4gICAgZXJyb3JzLmZvckVhY2goZXJyb3IgPT5cbiAgICAgIEpTVGltZXJzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0sIDApLFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENhbGxlZCBmcm9tIG5hdGl2ZSAoaW4gZGV2ZWxvcG1lbnQpIHdoZW4gZW52aXJvbm1lbnQgdGltZXMgYXJlIG91dC1vZi1zeW5jLlxuICAgKi9cbiAgZW1pdFRpbWVEcmlmdFdhcm5pbmcod2FybmluZ01lc3NhZ2U6IHN0cmluZykge1xuICAgIGlmIChoYXNFbWl0dGVkVGltZURyaWZ0V2FybmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYXNFbWl0dGVkVGltZURyaWZ0V2FybmluZyA9IHRydWU7XG4gICAgY29uc29sZS53YXJuKHdhcm5pbmdNZXNzYWdlKTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVRpbWVyKFxuICBjYWxsYmFja0lEOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGpzU2NoZWR1bGluZ1RpbWU6IG51bWJlcixcbiAgcmVwZWF0czogYm9vbGVhbixcbik6IHZvaWQge1xuICBpbnZhcmlhbnQoTmF0aXZlVGltaW5nLCAnTmF0aXZlVGltaW5nIGlzIGF2YWlsYWJsZScpO1xuICBOYXRpdmVUaW1pbmcuY3JlYXRlVGltZXIoY2FsbGJhY2tJRCwgZHVyYXRpb24sIGpzU2NoZWR1bGluZ1RpbWUsIHJlcGVhdHMpO1xufVxuXG5mdW5jdGlvbiBkZWxldGVUaW1lcih0aW1lcklEOiBudW1iZXIpOiB2b2lkIHtcbiAgaW52YXJpYW50KE5hdGl2ZVRpbWluZywgJ05hdGl2ZVRpbWluZyBpcyBhdmFpbGFibGUnKTtcbiAgTmF0aXZlVGltaW5nLmRlbGV0ZVRpbWVyKHRpbWVySUQpO1xufVxuXG5mdW5jdGlvbiBzZXRTZW5kSWRsZUV2ZW50cyhzZW5kSWRsZUV2ZW50czogYm9vbGVhbik6IHZvaWQge1xuICBpbnZhcmlhbnQoTmF0aXZlVGltaW5nLCAnTmF0aXZlVGltaW5nIGlzIGF2YWlsYWJsZScpO1xuICBOYXRpdmVUaW1pbmcuc2V0U2VuZElkbGVFdmVudHMoc2VuZElkbGVFdmVudHMpO1xufVxuXG5sZXQgRXhwb3J0ZWRKU1RpbWVyczoge3xcbiAgY2FsbElkbGVDYWxsYmFja3M6IChmcmFtZVRpbWU6IG51bWJlcikgPT4gYW55IHwgdm9pZCxcbiAgY2FsbFJlYWN0TmF0aXZlTWljcm90YXNrczogKCkgPT4gdm9pZCxcbiAgY2FsbFRpbWVyczogKHRpbWVyc1RvQ2FsbDogQXJyYXk8bnVtYmVyPikgPT4gYW55IHwgdm9pZCxcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWU6ICh0aW1lcklEOiBudW1iZXIpID0+IHZvaWQsXG4gIGNhbmNlbElkbGVDYWxsYmFjazogKHRpbWVySUQ6IG51bWJlcikgPT4gdm9pZCxcbiAgY2xlYXJSZWFjdE5hdGl2ZU1pY3JvdGFzazogKHRpbWVySUQ6IG51bWJlcikgPT4gdm9pZCxcbiAgY2xlYXJJbnRlcnZhbDogKHRpbWVySUQ6IG51bWJlcikgPT4gdm9pZCxcbiAgY2xlYXJUaW1lb3V0OiAodGltZXJJRDogbnVtYmVyKSA9PiB2b2lkLFxuICBlbWl0VGltZURyaWZ0V2FybmluZzogKHdhcm5pbmdNZXNzYWdlOiBzdHJpbmcpID0+IGFueSB8IHZvaWQsXG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZTogKGZ1bmM6IGFueSkgPT4gYW55IHwgbnVtYmVyLFxuICByZXF1ZXN0SWRsZUNhbGxiYWNrOiAoZnVuYzogYW55LCBvcHRpb25zOiA/YW55KSA9PiBhbnkgfCBudW1iZXIsXG4gIHF1ZXVlUmVhY3ROYXRpdmVNaWNyb3Rhc2s6IChmdW5jOiBhbnksIC4uLmFyZ3M6IGFueSkgPT4gbnVtYmVyLFxuICBzZXRJbnRlcnZhbDogKGZ1bmM6IGFueSwgZHVyYXRpb246IG51bWJlciwgLi4uYXJnczogYW55KSA9PiBudW1iZXIsXG4gIHNldFRpbWVvdXQ6IChmdW5jOiBhbnksIGR1cmF0aW9uOiBudW1iZXIsIC4uLmFyZ3M6IGFueSkgPT4gbnVtYmVyLFxufH07XG5cbmlmICghTmF0aXZlVGltaW5nKSB7XG4gIGNvbnNvbGUud2FybihcIlRpbWluZyBuYXRpdmUgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUsIGNhbid0IHNldCB0aW1lcnMuXCIpO1xuICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gOiB3ZSBjYW4gYXNzdW1lIHRpbWVycyBhcmUgZ2VuZXJhbGx5IGF2YWlsYWJsZVxuICBFeHBvcnRlZEpTVGltZXJzID0gKHtcbiAgICBjYWxsUmVhY3ROYXRpdmVNaWNyb3Rhc2tzOiBKU1RpbWVycy5jYWxsUmVhY3ROYXRpdmVNaWNyb3Rhc2tzLFxuICAgIHF1ZXVlUmVhY3ROYXRpdmVNaWNyb3Rhc2s6IEpTVGltZXJzLnF1ZXVlUmVhY3ROYXRpdmVNaWNyb3Rhc2ssXG4gIH06IHR5cGVvZiBKU1RpbWVycyk7XG59IGVsc2Uge1xuICBFeHBvcnRlZEpTVGltZXJzID0gSlNUaW1lcnM7XG59XG5cbkJhdGNoZWRCcmlkZ2Uuc2V0UmVhY3ROYXRpdmVNaWNyb3Rhc2tzQ2FsbGJhY2soXG4gIEpTVGltZXJzLmNhbGxSZWFjdE5hdGl2ZU1pY3JvdGFza3MsXG4pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV4cG9ydGVkSlNUaW1lcnM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVUaW1pbmcnO1xuaW1wb3J0IE5hdGl2ZVRpbWluZyBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVRpbWluZyc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVUaW1pbmc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK2NyZWF0ZVRpbWVyOiAoXG4gICAgY2FsbGJhY2tJRDogbnVtYmVyLFxuICAgIGR1cmF0aW9uOiBudW1iZXIsXG4gICAganNTY2hlZHVsaW5nVGltZTogbnVtYmVyLFxuICAgIHJlcGVhdHM6IGJvb2xlYW4sXG4gICkgPT4gdm9pZDtcbiAgK2RlbGV0ZVRpbWVyOiAodGltZXJJRDogbnVtYmVyKSA9PiB2b2lkO1xuICArc2V0U2VuZElkbGVFdmVudHM6IChzZW5kSWRsZUV2ZW50czogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdUaW1pbmcnKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBHbG9iYWxseSBVbmlxdWUgSW1tZWRpYXRlIElELlxubGV0IEdVSUlEID0gMTtcblxuLy8gQSBnbG9iYWwgc2V0IG9mIHRoZSBjdXJyZW50bHkgY2xlYXJlZCBpbW1lZGlhdGVzLlxuY29uc3QgY2xlYXJlZEltbWVkaWF0ZXM6IFNldDxudW1iZXI+ID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIFNoaW0gdGhlIHNldEltbWVkaWF0ZSBBUEkgb24gdG9wIG9mIHF1ZXVlTWljcm90YXNrLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBDYWxsYmFjayB0byBiZSBpbnZva2VkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZVxuICogY3VycmVudCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBsb29wLlxuICovXG5mdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnkpOiBudW1iZXIge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ3NldEltbWVkaWF0ZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYSBmdW5jdGlvbiB0byBjYWxsKScsXG4gICAgKTtcbiAgfVxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgdG8gc2V0SW1tZWRpYXRlIG11c3QgYmUgYSBmdW5jdGlvbi4nLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpZCA9IEdVSUlEKys7XG4gIC8vIFRoaXMgaXMgYW4gZWRnZXkgY2FzZSBpbiB3aGljaCB0aGUgc2VxdWVudGlhbGx5IGFzc2lnbmVkIElEIGhhcyBiZWVuXG4gIC8vIFwiZ3Vlc3NlZFwiIGFuZCBcImNsZWFyZWRcIiBhaGVhZCBvZiB0aW1lLCBzbyB3ZSBuZWVkIHRvIGNsZWFyIGl0IHVwIGZpcnN0LlxuICBpZiAoY2xlYXJlZEltbWVkaWF0ZXMuaGFzKGlkKSkge1xuICAgIGNsZWFyZWRJbW1lZGlhdGVzLmRlbGV0ZShpZCk7XG4gIH1cblxuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICBnbG9iYWwucXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgIGlmICghY2xlYXJlZEltbWVkaWF0ZXMuaGFzKGlkKSkge1xuICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRnJlZSB1cCB0aGUgU2V0IGVudHJ5LlxuICAgICAgY2xlYXJlZEltbWVkaWF0ZXMuZGVsZXRlKGlkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpZDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW1tZWRpYXRlSUQgVGhlIElEIG9mIHRoZSBpbW1lZGlhdGUgdG8gYmUgY2xlYXJyZWQuXG4gKi9cbmZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGltbWVkaWF0ZUlEOiBudW1iZXIpIHtcbiAgY2xlYXJlZEltbWVkaWF0ZXMuYWRkKGltbWVkaWF0ZUlEKTtcbn1cblxuY29uc3QgaW1tZWRpYXRlU2hpbSA9IHtcbiAgc2V0SW1tZWRpYXRlOiBzZXRJbW1lZGlhdGUsXG4gIGNsZWFySW1tZWRpYXRlOiBjbGVhckltbWVkaWF0ZSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW1tZWRpYXRlU2hpbTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxubGV0IHJlc29sdmVkUHJvbWlzZTtcblxuLyoqXG4gKiBQb2x5ZmlsbCBmb3IgdGhlIG1pY3JvdGFzayBxdWV1ZWluZyBBUEkgZGVmaW5lZCBieSBXSEFUV0cgSFRNTCBzcGVjLlxuICogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tcXVldWVtaWNyb3Rhc2tcbiAqXG4gKiBUaGUgbWV0aG9kIG11c3QgcXVldWUgYSBtaWNyb3Rhc2sgdG8gaW52b2tlIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrLCBhbmRcbiAqIGlmIHRoZSBjYWxsYmFjayB0aHJvd3MgYW4gZXhjZXB0aW9uLCByZXBvcnQgdGhlIGV4Y2VwdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVldWVNaWNyb3Rhc2soY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAncXVldWVNaWNyb3Rhc2sgbXVzdCBiZSBjYWxsZWQgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGEgZnVuY3Rpb24gdG8gY2FsbCknLFxuICAgICk7XG4gIH1cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBhcmd1bWVudCB0byBxdWV1ZU1pY3JvdGFzayBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICAvLyBUcnkgdG8gcmV1c2UgYSBsYXppbHkgYWxsb2NhdGVkIHJlc29sdmVkIHByb21pc2UgZnJvbSBjbG9zdXJlLlxuICAocmVzb2x2ZWRQcm9taXNlIHx8IChyZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKSkpXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGVycm9yID0+XG4gICAgICAvLyBSZXBvcnQgdGhlIGV4Y2VwdGlvbiB1bnRpbCB0aGUgbmV4dCB0aWNrLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSwgMCksXG4gICAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHtwb2x5ZmlsbEdsb2JhbH0gPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvUG9seWZpbGxGdW5jdGlvbnMnKTtcblxuLyoqXG4gKiBTZXQgdXAgWE1MSHR0cFJlcXVlc3QuIFRoZSBuYXRpdmUgWE1MSHR0cFJlcXVlc3QgaW4gQ2hyb21lIGRldiB0b29scyBpcyBDT1JTXG4gKiBhd2FyZSBhbmQgd29uJ3QgbGV0IHlvdSBmZXRjaCBhbnl0aGluZyBmcm9tIHRoZSBpbnRlcm5ldC5cbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1vZHVsZSBkaXJlY3RseSwgb3IganVzdCByZXF1aXJlIEluaXRpYWxpemVDb3JlLlxuICovXG5wb2x5ZmlsbEdsb2JhbCgnWE1MSHR0cFJlcXVlc3QnLCAoKSA9PiByZXF1aXJlKCcuLi9OZXR3b3JrL1hNTEh0dHBSZXF1ZXN0JykpO1xucG9seWZpbGxHbG9iYWwoJ0Zvcm1EYXRhJywgKCkgPT4gcmVxdWlyZSgnLi4vTmV0d29yay9Gb3JtRGF0YScpKTtcblxucG9seWZpbGxHbG9iYWwoJ2ZldGNoJywgKCkgPT4gcmVxdWlyZSgnLi4vTmV0d29yay9mZXRjaCcpLmZldGNoKTtcbnBvbHlmaWxsR2xvYmFsKCdIZWFkZXJzJywgKCkgPT4gcmVxdWlyZSgnLi4vTmV0d29yay9mZXRjaCcpLkhlYWRlcnMpO1xucG9seWZpbGxHbG9iYWwoJ1JlcXVlc3QnLCAoKSA9PiByZXF1aXJlKCcuLi9OZXR3b3JrL2ZldGNoJykuUmVxdWVzdCk7XG5wb2x5ZmlsbEdsb2JhbCgnUmVzcG9uc2UnLCAoKSA9PiByZXF1aXJlKCcuLi9OZXR3b3JrL2ZldGNoJykuUmVzcG9uc2UpO1xucG9seWZpbGxHbG9iYWwoJ1dlYlNvY2tldCcsICgpID0+IHJlcXVpcmUoJy4uL1dlYlNvY2tldC9XZWJTb2NrZXQnKSk7XG5wb2x5ZmlsbEdsb2JhbCgnQmxvYicsICgpID0+IHJlcXVpcmUoJy4uL0Jsb2IvQmxvYicpKTtcbnBvbHlmaWxsR2xvYmFsKCdGaWxlJywgKCkgPT4gcmVxdWlyZSgnLi4vQmxvYi9GaWxlJykpO1xucG9seWZpbGxHbG9iYWwoJ0ZpbGVSZWFkZXInLCAoKSA9PiByZXF1aXJlKCcuLi9CbG9iL0ZpbGVSZWFkZXInKSk7XG5wb2x5ZmlsbEdsb2JhbCgnVVJMJywgKCkgPT4gcmVxdWlyZSgnLi4vQmxvYi9VUkwnKS5VUkwpOyAvLyBmbG93bGludC1saW5lIHVudHlwZWQtaW1wb3J0Om9mZlxucG9seWZpbGxHbG9iYWwoJ1VSTFNlYXJjaFBhcmFtcycsICgpID0+IHJlcXVpcmUoJy4uL0Jsb2IvVVJMJykuVVJMU2VhcmNoUGFyYW1zKTsgLy8gZmxvd2xpbnQtbGluZSB1bnR5cGVkLWltcG9ydDpvZmZcbnBvbHlmaWxsR2xvYmFsKFxuICAnQWJvcnRDb250cm9sbGVyJyxcbiAgKCkgPT4gcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXIsIC8vIGZsb3dsaW50LWxpbmUgdW50eXBlZC1pbXBvcnQ6b2ZmXG4pO1xucG9seWZpbGxHbG9iYWwoXG4gICdBYm9ydFNpZ25hbCcsXG4gICgpID0+IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9hYm9ydC1jb250cm9sbGVyJykuQWJvcnRTaWduYWwsIC8vIGZsb3dsaW50LWxpbmUgdW50eXBlZC1pbXBvcnQ6b2ZmXG4pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7SVBlcmZvcm1hbmNlTG9nZ2VyfSBmcm9tICcuLi9VdGlsaXRpZXMvY3JlYXRlUGVyZm9ybWFuY2VMb2dnZXInO1xuXG5pbXBvcnQge3R5cGUgRXZlbnRTdWJzY3JpcHRpb259IGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgRXZlbnRUYXJnZXQgZnJvbSAnZXZlbnQtdGFyZ2V0LXNoaW0nO1xuXG5jb25zdCBCbG9iTWFuYWdlciA9IHJlcXVpcmUoJy4uL0Jsb2IvQmxvYk1hbmFnZXInKTtcbmNvbnN0IEdsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL0dsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyJyk7XG5jb25zdCBSQ1ROZXR3b3JraW5nID0gcmVxdWlyZSgnLi9SQ1ROZXR3b3JraW5nJykuZGVmYXVsdDtcbmNvbnN0IGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpO1xuY29uc3QgaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbmNvbnN0IERFQlVHX05FVFdPUktfU0VORF9ERUxBWTogZmFsc2UgPSBmYWxzZTsgLy8gU2V0IHRvIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB3aGVuIGRlYnVnZ2luZ1xuXG5leHBvcnQgdHlwZSBOYXRpdmVSZXNwb25zZVR5cGUgPSAnYmFzZTY0JyB8ICdibG9iJyB8ICd0ZXh0JztcbmV4cG9ydCB0eXBlIFJlc3BvbnNlVHlwZSA9XG4gIHwgJydcbiAgfCAnYXJyYXlidWZmZXInXG4gIHwgJ2Jsb2InXG4gIHwgJ2RvY3VtZW50J1xuICB8ICdqc29uJ1xuICB8ICd0ZXh0JztcbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0gP09iamVjdCB8IHN0cmluZztcblxudHlwZSBYSFJJbnRlcmNlcHRvciA9IGludGVyZmFjZSB7XG4gIHJlcXVlc3RTZW50KGlkOiBudW1iZXIsIHVybDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgaGVhZGVyczogT2JqZWN0KTogdm9pZCxcbiAgcmVzcG9uc2VSZWNlaXZlZChcbiAgICBpZDogbnVtYmVyLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIGhlYWRlcnM6IE9iamVjdCxcbiAgKTogdm9pZCxcbiAgZGF0YVJlY2VpdmVkKGlkOiBudW1iZXIsIGRhdGE6IHN0cmluZyk6IHZvaWQsXG4gIGxvYWRpbmdGaW5pc2hlZChpZDogbnVtYmVyLCBlbmNvZGVkRGF0YUxlbmd0aDogbnVtYmVyKTogdm9pZCxcbiAgbG9hZGluZ0ZhaWxlZChpZDogbnVtYmVyLCBlcnJvcjogc3RyaW5nKTogdm9pZCxcbn07XG5cbi8vIFRoZSBuYXRpdmUgYmxvYiBtb2R1bGUgaXMgb3B0aW9uYWwgc28gaW5qZWN0IGl0IGhlcmUgaWYgYXZhaWxhYmxlLlxuaWYgKEJsb2JNYW5hZ2VyLmlzQXZhaWxhYmxlKSB7XG4gIEJsb2JNYW5hZ2VyLmFkZE5ldHdvcmtpbmdIYW5kbGVyKCk7XG59XG5cbmNvbnN0IFVOU0VOVCA9IDA7XG5jb25zdCBPUEVORUQgPSAxO1xuY29uc3QgSEVBREVSU19SRUNFSVZFRCA9IDI7XG5jb25zdCBMT0FESU5HID0gMztcbmNvbnN0IERPTkUgPSA0O1xuXG5jb25zdCBTVVBQT1JURURfUkVTUE9OU0VfVFlQRVMgPSB7XG4gIGFycmF5YnVmZmVyOiB0eXBlb2YgZ2xvYmFsLkFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nLFxuICBibG9iOiB0eXBlb2YgZ2xvYmFsLkJsb2IgPT09ICdmdW5jdGlvbicsXG4gIGRvY3VtZW50OiBmYWxzZSxcbiAganNvbjogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgJyc6IHRydWUsXG59O1xuXG5jb25zdCBSRVFVRVNUX0VWRU5UUyA9IFtcbiAgJ2Fib3J0JyxcbiAgJ2Vycm9yJyxcbiAgJ2xvYWQnLFxuICAnbG9hZHN0YXJ0JyxcbiAgJ3Byb2dyZXNzJyxcbiAgJ3RpbWVvdXQnLFxuICAnbG9hZGVuZCcsXG5dO1xuXG5jb25zdCBYSFJfRVZFTlRTID0gUkVRVUVTVF9FVkVOVFMuY29uY2F0KCdyZWFkeXN0YXRlY2hhbmdlJyk7XG5cbmNsYXNzIFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQgZXh0ZW5kcyAoRXZlbnRUYXJnZXQoLi4uUkVRVUVTVF9FVkVOVFMpOiBhbnkpIHtcbiAgb25sb2FkOiA/RnVuY3Rpb247XG4gIG9ubG9hZHN0YXJ0OiA/RnVuY3Rpb247XG4gIG9ucHJvZ3Jlc3M6ID9GdW5jdGlvbjtcbiAgb250aW1lb3V0OiA/RnVuY3Rpb247XG4gIG9uZXJyb3I6ID9GdW5jdGlvbjtcbiAgb25hYm9ydDogP0Z1bmN0aW9uO1xuICBvbmxvYWRlbmQ6ID9GdW5jdGlvbjtcbn1cblxuLyoqXG4gKiBTaGFyZWQgYmFzZSBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgWE1MSHR0cFJlcXVlc3QgaW1wbGVtZW50YXRpb25zLlxuICovXG5jbGFzcyBYTUxIdHRwUmVxdWVzdCBleHRlbmRzIChFdmVudFRhcmdldCguLi5YSFJfRVZFTlRTKTogYW55KSB7XG4gIHN0YXRpYyBVTlNFTlQ6IG51bWJlciA9IFVOU0VOVDtcbiAgc3RhdGljIE9QRU5FRDogbnVtYmVyID0gT1BFTkVEO1xuICBzdGF0aWMgSEVBREVSU19SRUNFSVZFRDogbnVtYmVyID0gSEVBREVSU19SRUNFSVZFRDtcbiAgc3RhdGljIExPQURJTkc6IG51bWJlciA9IExPQURJTkc7XG4gIHN0YXRpYyBET05FOiBudW1iZXIgPSBET05FO1xuXG4gIHN0YXRpYyBfaW50ZXJjZXB0b3I6ID9YSFJJbnRlcmNlcHRvciA9IG51bGw7XG5cbiAgVU5TRU5UOiBudW1iZXIgPSBVTlNFTlQ7XG4gIE9QRU5FRDogbnVtYmVyID0gT1BFTkVEO1xuICBIRUFERVJTX1JFQ0VJVkVEOiBudW1iZXIgPSBIRUFERVJTX1JFQ0VJVkVEO1xuICBMT0FESU5HOiBudW1iZXIgPSBMT0FESU5HO1xuICBET05FOiBudW1iZXIgPSBET05FO1xuXG4gIC8vIEV2ZW50VGFyZ2V0IGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZXMgdGhlc2UgdG8gYG51bGxgLlxuICBvbmxvYWQ6ID9GdW5jdGlvbjtcbiAgb25sb2Fkc3RhcnQ6ID9GdW5jdGlvbjtcbiAgb25wcm9ncmVzczogP0Z1bmN0aW9uO1xuICBvbnRpbWVvdXQ6ID9GdW5jdGlvbjtcbiAgb25lcnJvcjogP0Z1bmN0aW9uO1xuICBvbmFib3J0OiA/RnVuY3Rpb247XG4gIG9ubG9hZGVuZDogP0Z1bmN0aW9uO1xuICBvbnJlYWR5c3RhdGVjaGFuZ2U6ID9GdW5jdGlvbjtcblxuICByZWFkeVN0YXRlOiBudW1iZXIgPSBVTlNFTlQ7XG4gIHJlc3BvbnNlSGVhZGVyczogP09iamVjdDtcbiAgc3RhdHVzOiBudW1iZXIgPSAwO1xuICB0aW1lb3V0OiBudW1iZXIgPSAwO1xuICByZXNwb25zZVVSTDogP3N0cmluZztcbiAgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gdHJ1ZTtcblxuICB1cGxvYWQ6IFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQgPSBuZXcgWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCgpO1xuXG4gIF9yZXF1ZXN0SWQ6ID9udW1iZXI7XG4gIF9zdWJzY3JpcHRpb25zOiBBcnJheTxFdmVudFN1YnNjcmlwdGlvbj47XG5cbiAgX2Fib3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX2NhY2hlZFJlc3BvbnNlOiBSZXNwb25zZTtcbiAgX2hhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIF9oZWFkZXJzOiBPYmplY3Q7XG4gIF9sb3dlckNhc2VSZXNwb25zZUhlYWRlcnM6IE9iamVjdDtcbiAgX21ldGhvZDogP3N0cmluZyA9IG51bGw7XG4gIF9wZXJmS2V5OiA/c3RyaW5nID0gbnVsbDtcbiAgX3Jlc3BvbnNlVHlwZTogUmVzcG9uc2VUeXBlO1xuICBfcmVzcG9uc2U6IHN0cmluZyA9ICcnO1xuICBfc2VudDogYm9vbGVhbjtcbiAgX3VybDogP3N0cmluZyA9IG51bGw7XG4gIF90aW1lZE91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBfdHJhY2tpbmdOYW1lOiBzdHJpbmcgPSAndW5rbm93bic7XG4gIF9pbmNyZW1lbnRhbEV2ZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBfcGVyZm9ybWFuY2VMb2dnZXI6IElQZXJmb3JtYW5jZUxvZ2dlciA9IEdsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyO1xuXG4gIHN0YXRpYyBzZXRJbnRlcmNlcHRvcihpbnRlcmNlcHRvcjogP1hIUkludGVyY2VwdG9yKSB7XG4gICAgWE1MSHR0cFJlcXVlc3QuX2ludGVyY2VwdG9yID0gaW50ZXJjZXB0b3I7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3Jlc2V0KCk7XG4gIH1cblxuICBfcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gdGhpcy5VTlNFTlQ7XG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGF0dXMgPSAwO1xuICAgIGRlbGV0ZSB0aGlzLnJlc3BvbnNlVVJMO1xuXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIHRoaXMuX2NhY2hlZFJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2hhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5faGVhZGVycyA9IHt9O1xuICAgIHRoaXMuX3Jlc3BvbnNlID0gJyc7XG4gICAgdGhpcy5fcmVzcG9uc2VUeXBlID0gJyc7XG4gICAgdGhpcy5fc2VudCA9IGZhbHNlO1xuICAgIHRoaXMuX2xvd2VyQ2FzZVJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXG4gICAgdGhpcy5fY2xlYXJTdWJzY3JpcHRpb25zKCk7XG4gICAgdGhpcy5fdGltZWRPdXQgPSBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXNwb25zZVR5cGUoKTogUmVzcG9uc2VUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VUeXBlO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlVHlwZShyZXNwb25zZVR5cGU6IFJlc3BvbnNlVHlwZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIHNldCB0aGUgJ3Jlc3BvbnNlVHlwZScgcHJvcGVydHkgb24gJ1hNTEh0dHBSZXF1ZXN0JzogVGhlIFwiICtcbiAgICAgICAgICAncmVzcG9uc2UgdHlwZSBjYW5ub3QgYmUgc2V0IGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHNlbnQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghU1VQUE9SVEVEX1JFU1BPTlNFX1RZUEVTLmhhc093blByb3BlcnR5KHJlc3BvbnNlVHlwZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFRoZSBwcm92aWRlZCB2YWx1ZSAnJHtyZXNwb25zZVR5cGV9JyBpcyBub3QgYSB2YWxpZCAncmVzcG9uc2VUeXBlJy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZWRib3hlcyBlYXJseSwgZS5nLiBmb3IgJ2FycmF5YnVmZmVyJyBvbiBpb3MgN1xuICAgIGludmFyaWFudChcbiAgICAgIFNVUFBPUlRFRF9SRVNQT05TRV9UWVBFU1tyZXNwb25zZVR5cGVdIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2RvY3VtZW50JyxcbiAgICAgIGBUaGUgcHJvdmlkZWQgdmFsdWUgJyR7cmVzcG9uc2VUeXBlfScgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC5gLFxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2VUeXBlID09PSAnYmxvYicpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgQmxvYk1hbmFnZXIuaXNBdmFpbGFibGUsXG4gICAgICAgICdOYXRpdmUgbW9kdWxlIEJsb2JNb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGJsb2Igc3VwcG9ydCcsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XG4gIH1cblxuICBnZXQgcmVzcG9uc2VUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3Jlc3BvbnNlVHlwZSAhPT0gJycgJiYgdGhpcy5fcmVzcG9uc2VUeXBlICE9PSAndGV4dCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgJ3Jlc3BvbnNlVGV4dCcgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgJ3Jlc3BvbnNlVHlwZScgXCIgK1xuICAgICAgICAgIGBpcyBzZXQgdG8gJycgb3IgJ3RleHQnLCBidXQgaXQgaXMgJyR7dGhpcy5fcmVzcG9uc2VUeXBlfScuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPCBMT0FESU5HKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXNwb25zZTtcbiAgfVxuXG4gIGdldCByZXNwb25zZSgpOiBSZXNwb25zZSB7XG4gICAgY29uc3Qge3Jlc3BvbnNlVHlwZX0gPSB0aGlzO1xuICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICcnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWFkeVN0YXRlIDwgTE9BRElORyB8fCB0aGlzLl9oYXNFcnJvciA/ICcnIDogdGhpcy5fcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gRE9ORSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NhY2hlZFJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRSZXNwb25zZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlVHlwZSkge1xuICAgICAgY2FzZSAnZG9jdW1lbnQnOlxuICAgICAgICB0aGlzLl9jYWNoZWRSZXNwb25zZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhcnJheWJ1ZmZlcic6XG4gICAgICAgIHRoaXMuX2NhY2hlZFJlc3BvbnNlID0gYmFzZTY0LnRvQnl0ZUFycmF5KHRoaXMuX3Jlc3BvbnNlKS5idWZmZXI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdibG9iJzpcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9yZXNwb25zZSA9PT0gJ29iamVjdCcgJiYgdGhpcy5fcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLl9jYWNoZWRSZXNwb25zZSA9IEJsb2JNYW5hZ2VyLmNyZWF0ZUZyb21PcHRpb25zKHRoaXMuX3Jlc3BvbnNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9yZXNwb25zZSA9PT0gJycpIHtcbiAgICAgICAgICB0aGlzLl9jYWNoZWRSZXNwb25zZSA9IEJsb2JNYW5hZ2VyLmNyZWF0ZUZyb21QYXJ0cyhbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGZvciBibG9iOiAke3RoaXMuX3Jlc3BvbnNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9jYWNoZWRSZXNwb25zZSA9IEpTT04ucGFyc2UodGhpcy5fcmVzcG9uc2UpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgdGhpcy5fY2FjaGVkUmVzcG9uc2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl9jYWNoZWRSZXNwb25zZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFJlc3BvbnNlO1xuICB9XG5cbiAgLy8gZXhwb3NlZCBmb3IgdGVzdGluZ1xuICBfX2RpZENyZWF0ZVJlcXVlc3QocmVxdWVzdElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG5cbiAgICBYTUxIdHRwUmVxdWVzdC5faW50ZXJjZXB0b3IgJiZcbiAgICAgIFhNTEh0dHBSZXF1ZXN0Ll9pbnRlcmNlcHRvci5yZXF1ZXN0U2VudChcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICB0aGlzLl91cmwgfHwgJycsXG4gICAgICAgIHRoaXMuX21ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgdGhpcy5faGVhZGVycyxcbiAgICAgICk7XG4gIH1cblxuICAvLyBleHBvc2VkIGZvciB0ZXN0aW5nXG4gIF9fZGlkVXBsb2FkUHJvZ3Jlc3MoXG4gICAgcmVxdWVzdElkOiBudW1iZXIsXG4gICAgcHJvZ3Jlc3M6IG51bWJlcixcbiAgICB0b3RhbDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAocmVxdWVzdElkID09PSB0aGlzLl9yZXF1ZXN0SWQpIHtcbiAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiAncHJvZ3Jlc3MnLFxuICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiB0cnVlLFxuICAgICAgICBsb2FkZWQ6IHByb2dyZXNzLFxuICAgICAgICB0b3RhbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9fZGlkUmVjZWl2ZVJlc3BvbnNlKFxuICAgIHJlcXVlc3RJZDogbnVtYmVyLFxuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIHJlc3BvbnNlSGVhZGVyczogP09iamVjdCxcbiAgICByZXNwb25zZVVSTDogP3N0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHJlcXVlc3RJZCA9PT0gdGhpcy5fcmVxdWVzdElkKSB7XG4gICAgICB0aGlzLl9wZXJmS2V5ICE9IG51bGwgJiZcbiAgICAgICAgdGhpcy5fcGVyZm9ybWFuY2VMb2dnZXIuc3RvcFRpbWVzcGFuKHRoaXMuX3BlcmZLZXkpO1xuICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICB0aGlzLnNldFJlc3BvbnNlSGVhZGVycyhyZXNwb25zZUhlYWRlcnMpO1xuICAgICAgdGhpcy5zZXRSZWFkeVN0YXRlKHRoaXMuSEVBREVSU19SRUNFSVZFRCk7XG4gICAgICBpZiAocmVzcG9uc2VVUkwgfHwgcmVzcG9uc2VVUkwgPT09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2VVUkwgPSByZXNwb25zZVVSTDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJlc3BvbnNlVVJMO1xuICAgICAgfVxuXG4gICAgICBYTUxIdHRwUmVxdWVzdC5faW50ZXJjZXB0b3IgJiZcbiAgICAgICAgWE1MSHR0cFJlcXVlc3QuX2ludGVyY2VwdG9yLnJlc3BvbnNlUmVjZWl2ZWQoXG4gICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgIHJlc3BvbnNlVVJMIHx8IHRoaXMuX3VybCB8fCAnJyxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzIHx8IHt9LFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIF9fZGlkUmVjZWl2ZURhdGEocmVxdWVzdElkOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocmVxdWVzdElkICE9PSB0aGlzLl9yZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLl9jYWNoZWRSZXNwb25zZSA9IHVuZGVmaW5lZDsgLy8gZm9yY2UgbGF6eSByZWNvbXB1dGF0aW9uXG4gICAgdGhpcy5zZXRSZWFkeVN0YXRlKHRoaXMuTE9BRElORyk7XG5cbiAgICBYTUxIdHRwUmVxdWVzdC5faW50ZXJjZXB0b3IgJiZcbiAgICAgIFhNTEh0dHBSZXF1ZXN0Ll9pbnRlcmNlcHRvci5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCByZXNwb25zZSk7XG4gIH1cblxuICBfX2RpZFJlY2VpdmVJbmNyZW1lbnRhbERhdGEoXG4gICAgcmVxdWVzdElkOiBudW1iZXIsXG4gICAgcmVzcG9uc2VUZXh0OiBzdHJpbmcsXG4gICAgcHJvZ3Jlc3M6IG51bWJlcixcbiAgICB0b3RhbDogbnVtYmVyLFxuICApIHtcbiAgICBpZiAocmVxdWVzdElkICE9PSB0aGlzLl9yZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9yZXNwb25zZSkge1xuICAgICAgdGhpcy5fcmVzcG9uc2UgPSByZXNwb25zZVRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlICs9IHJlc3BvbnNlVGV4dDtcbiAgICB9XG5cbiAgICBYTUxIdHRwUmVxdWVzdC5faW50ZXJjZXB0b3IgJiZcbiAgICAgIFhNTEh0dHBSZXF1ZXN0Ll9pbnRlcmNlcHRvci5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCByZXNwb25zZVRleHQpO1xuXG4gICAgdGhpcy5zZXRSZWFkeVN0YXRlKHRoaXMuTE9BRElORyk7XG4gICAgdGhpcy5fX2RpZFJlY2VpdmVEYXRhUHJvZ3Jlc3MocmVxdWVzdElkLCBwcm9ncmVzcywgdG90YWwpO1xuICB9XG5cbiAgX19kaWRSZWNlaXZlRGF0YVByb2dyZXNzKFxuICAgIHJlcXVlc3RJZDogbnVtYmVyLFxuICAgIGxvYWRlZDogbnVtYmVyLFxuICAgIHRvdGFsOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGlmIChyZXF1ZXN0SWQgIT09IHRoaXMuX3JlcXVlc3RJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgdHlwZTogJ3Byb2dyZXNzJyxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsID49IDAsXG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV4cG9zZWQgZm9yIHRlc3RpbmdcbiAgX19kaWRDb21wbGV0ZVJlc3BvbnNlKFxuICAgIHJlcXVlc3RJZDogbnVtYmVyLFxuICAgIGVycm9yOiBzdHJpbmcsXG4gICAgdGltZU91dEVycm9yOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBpZiAocmVxdWVzdElkID09PSB0aGlzLl9yZXF1ZXN0SWQpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAodGhpcy5fcmVzcG9uc2VUeXBlID09PSAnJyB8fCB0aGlzLl9yZXNwb25zZVR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlID0gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICBpZiAodGltZU91dEVycm9yKSB7XG4gICAgICAgICAgdGhpcy5fdGltZWRPdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9jbGVhclN1YnNjcmlwdGlvbnMoKTtcbiAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgICB0aGlzLnNldFJlYWR5U3RhdGUodGhpcy5ET05FKTtcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIFhNTEh0dHBSZXF1ZXN0Ll9pbnRlcmNlcHRvciAmJlxuICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0Ll9pbnRlcmNlcHRvci5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgWE1MSHR0cFJlcXVlc3QuX2ludGVyY2VwdG9yICYmXG4gICAgICAgICAgWE1MSHR0cFJlcXVlc3QuX2ludGVyY2VwdG9yLmxvYWRpbmdGaW5pc2hlZChcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLmxlbmd0aCxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9jbGVhclN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgKHRoaXMuX3N1YnNjcmlwdGlvbnMgfHwgW10pLmZvckVhY2goc3ViID0+IHtcbiAgICAgIGlmIChzdWIpIHtcbiAgICAgICAgc3ViLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcbiAgfVxuXG4gIGdldEFsbFJlc3BvbnNlSGVhZGVycygpOiA/c3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHJldHVybiBudWxsIGlmIG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBBc3NpZ24gdG8gbm9uLW51bGxhYmxlIGxvY2FsIHZhcmlhYmxlLlxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzO1xuXG4gICAgY29uc3QgdW5zb3J0ZWRIZWFkZXJzOiBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICB7bG93ZXJIZWFkZXJOYW1lOiBzdHJpbmcsIHVwcGVySGVhZGVyTmFtZTogc3RyaW5nLCBoZWFkZXJWYWx1ZTogc3RyaW5nfSxcbiAgICA+ID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgcmF3SGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZUhlYWRlcnMpKSB7XG4gICAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IHJlc3BvbnNlSGVhZGVyc1tyYXdIZWFkZXJOYW1lXTtcbiAgICAgIGNvbnN0IGxvd2VySGVhZGVyTmFtZSA9IHJhd0hlYWRlck5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHVuc29ydGVkSGVhZGVycy5nZXQobG93ZXJIZWFkZXJOYW1lKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaGVhZGVyLmhlYWRlclZhbHVlICs9ICcsICcgKyBoZWFkZXJWYWx1ZTtcbiAgICAgICAgdW5zb3J0ZWRIZWFkZXJzLnNldChsb3dlckhlYWRlck5hbWUsIGhlYWRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bnNvcnRlZEhlYWRlcnMuc2V0KGxvd2VySGVhZGVyTmFtZSwge1xuICAgICAgICAgIGxvd2VySGVhZGVyTmFtZSxcbiAgICAgICAgICB1cHBlckhlYWRlck5hbWU6IHJhd0hlYWRlck5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICBoZWFkZXJWYWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXIsIHdpdGggYSBiZWluZyBsZXNzIHRoYW4gYiBpZiBhJ3MgbmFtZSBpcyBsZWdhY3ktdXBwZXJjYXNlZC1ieXRlIGxlc3MgdGhhbiBiJ3MgbmFtZS5cbiAgICBjb25zdCBzb3J0ZWRIZWFkZXJzID0gWy4uLnVuc29ydGVkSGVhZGVycy52YWx1ZXMoKV0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEudXBwZXJIZWFkZXJOYW1lIDwgYi51cHBlckhlYWRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKGEudXBwZXJIZWFkZXJOYW1lID4gYi51cHBlckhlYWRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcblxuICAgIC8vIENvbWJpbmUgaW50byBzaW5nbGUgdGV4dCByZXNwb25zZS5cbiAgICByZXR1cm4gKFxuICAgICAgc29ydGVkSGVhZGVyc1xuICAgICAgICAubWFwKGhlYWRlciA9PiB7XG4gICAgICAgICAgcmV0dXJuIGhlYWRlci5sb3dlckhlYWRlck5hbWUgKyAnOiAnICsgaGVhZGVyLmhlYWRlclZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignXFxyXFxuJykgKyAnXFxyXFxuJ1xuICAgICk7XG4gIH1cblxuICBnZXRSZXNwb25zZUhlYWRlcihoZWFkZXI6IHN0cmluZyk6ID9zdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fbG93ZXJDYXNlUmVzcG9uc2VIZWFkZXJzW2hlYWRlci50b0xvd2VyQ2FzZSgpXTtcbiAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogbnVsbDtcbiAgfVxuXG4gIHNldFJlcXVlc3RIZWFkZXIoaGVhZGVyOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSB0aGlzLk9QRU5FRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1ZXN0IGhhcyBub3QgYmVlbiBvcGVuZWQnKTtcbiAgICB9XG4gICAgdGhpcy5faGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBleHRlbnNpb24gZm9yIHRyYWNraW5nIG9yaWdpbnMgb2YgcmVxdWVzdC5cbiAgICovXG4gIHNldFRyYWNraW5nTmFtZSh0cmFja2luZ05hbWU6IHN0cmluZyk6IFhNTEh0dHBSZXF1ZXN0IHtcbiAgICB0aGlzLl90cmFja2luZ05hbWUgPSB0cmFja2luZ05hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9tIGV4dGVuc2lvbiBmb3Igc2V0dGluZyBhIGN1c3RvbSBwZXJmb3JtYW5jZSBsb2dnZXJcbiAgICovXG4gIHNldFBlcmZvcm1hbmNlTG9nZ2VyKHBlcmZvcm1hbmNlTG9nZ2VyOiBJUGVyZm9ybWFuY2VMb2dnZXIpOiBYTUxIdHRwUmVxdWVzdCB7XG4gICAgdGhpcy5fcGVyZm9ybWFuY2VMb2dnZXIgPSBwZXJmb3JtYW5jZUxvZ2dlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9wZW4obWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBhc3luYzogP2Jvb2xlYW4pOiB2b2lkIHtcbiAgICAvKiBPdGhlciBvcHRpb25hbCBhcmd1bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0ICovXG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gdGhpcy5VTlNFTlQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG9wZW4sIGFscmVhZHkgc2VuZGluZycpO1xuICAgIH1cbiAgICBpZiAoYXN5bmMgIT09IHVuZGVmaW5lZCAmJiAhYXN5bmMpIHtcbiAgICAgIC8vIGFzeW5jIGlzIGRlZmF1bHRcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3luY2hyb25vdXMgaHR0cCByZXF1ZXN0cyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBpZiAoIXVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBhbiBlbXB0eSB1cmwnKTtcbiAgICB9XG4gICAgdGhpcy5fbWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgdGhpcy5fdXJsID0gdXJsO1xuICAgIHRoaXMuX2Fib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNldFJlYWR5U3RhdGUodGhpcy5PUEVORUQpO1xuICB9XG5cbiAgc2VuZChkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSB0aGlzLk9QRU5FRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1ZXN0IGhhcyBub3QgYmVlbiBvcGVuZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWVzdCBoYXMgYWxyZWFkeSBiZWVuIHNlbnQnKTtcbiAgICB9XG4gICAgdGhpcy5fc2VudCA9IHRydWU7XG4gICAgY29uc3QgaW5jcmVtZW50YWxFdmVudHMgPVxuICAgICAgdGhpcy5faW5jcmVtZW50YWxFdmVudHMgfHwgISF0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSB8fCAhIXRoaXMub25wcm9ncmVzcztcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIFJDVE5ldHdvcmtpbmcuYWRkTGlzdGVuZXIoJ2RpZFNlbmROZXR3b3JrRGF0YScsIGFyZ3MgPT5cbiAgICAgICAgdGhpcy5fX2RpZFVwbG9hZFByb2dyZXNzKC4uLmFyZ3MpLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIFJDVE5ldHdvcmtpbmcuYWRkTGlzdGVuZXIoJ2RpZFJlY2VpdmVOZXR3b3JrUmVzcG9uc2UnLCBhcmdzID0+XG4gICAgICAgIHRoaXMuX19kaWRSZWNlaXZlUmVzcG9uc2UoLi4uYXJncyksXG4gICAgICApLFxuICAgICk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgUkNUTmV0d29ya2luZy5hZGRMaXN0ZW5lcignZGlkUmVjZWl2ZU5ldHdvcmtEYXRhJywgYXJncyA9PlxuICAgICAgICB0aGlzLl9fZGlkUmVjZWl2ZURhdGEoLi4uYXJncyksXG4gICAgICApLFxuICAgICk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgUkNUTmV0d29ya2luZy5hZGRMaXN0ZW5lcignZGlkUmVjZWl2ZU5ldHdvcmtJbmNyZW1lbnRhbERhdGEnLCBhcmdzID0+XG4gICAgICAgIHRoaXMuX19kaWRSZWNlaXZlSW5jcmVtZW50YWxEYXRhKC4uLmFyZ3MpLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIFJDVE5ldHdvcmtpbmcuYWRkTGlzdGVuZXIoJ2RpZFJlY2VpdmVOZXR3b3JrRGF0YVByb2dyZXNzJywgYXJncyA9PlxuICAgICAgICB0aGlzLl9fZGlkUmVjZWl2ZURhdGFQcm9ncmVzcyguLi5hcmdzKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBSQ1ROZXR3b3JraW5nLmFkZExpc3RlbmVyKCdkaWRDb21wbGV0ZU5ldHdvcmtSZXNwb25zZScsIGFyZ3MgPT5cbiAgICAgICAgdGhpcy5fX2RpZENvbXBsZXRlUmVzcG9uc2UoLi4uYXJncyksXG4gICAgICApLFxuICAgICk7XG5cbiAgICBsZXQgbmF0aXZlUmVzcG9uc2VUeXBlOiBOYXRpdmVSZXNwb25zZVR5cGUgPSAndGV4dCc7XG4gICAgaWYgKHRoaXMuX3Jlc3BvbnNlVHlwZSA9PT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgbmF0aXZlUmVzcG9uc2VUeXBlID0gJ2Jhc2U2NCc7XG4gICAgfVxuICAgIGlmICh0aGlzLl9yZXNwb25zZVR5cGUgPT09ICdibG9iJykge1xuICAgICAgbmF0aXZlUmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgIH1cblxuICAgIGNvbnN0IGRvU2VuZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGZyaWVuZGx5TmFtZSA9XG4gICAgICAgIHRoaXMuX3RyYWNraW5nTmFtZSAhPT0gJ3Vua25vd24nID8gdGhpcy5fdHJhY2tpbmdOYW1lIDogdGhpcy5fdXJsO1xuICAgICAgdGhpcy5fcGVyZktleSA9ICduZXR3b3JrX1hNTEh0dHBSZXF1ZXN0XycgKyBTdHJpbmcoZnJpZW5kbHlOYW1lKTtcbiAgICAgIHRoaXMuX3BlcmZvcm1hbmNlTG9nZ2VyLnN0YXJ0VGltZXNwYW4odGhpcy5fcGVyZktleSk7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHRoaXMuX21ldGhvZCxcbiAgICAgICAgJ1hNTEh0dHBSZXF1ZXN0IG1ldGhvZCBuZWVkcyB0byBiZSBkZWZpbmVkICglcykuJyxcbiAgICAgICAgZnJpZW5kbHlOYW1lLFxuICAgICAgKTtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdGhpcy5fdXJsLFxuICAgICAgICAnWE1MSHR0cFJlcXVlc3QgVVJMIG5lZWRzIHRvIGJlIGRlZmluZWQgKCVzKS4nLFxuICAgICAgICBmcmllbmRseU5hbWUsXG4gICAgICApO1xuICAgICAgUkNUTmV0d29ya2luZy5zZW5kUmVxdWVzdChcbiAgICAgICAgdGhpcy5fbWV0aG9kLFxuICAgICAgICB0aGlzLl90cmFja2luZ05hbWUsXG4gICAgICAgIHRoaXMuX3VybCxcbiAgICAgICAgdGhpcy5faGVhZGVycyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgLyogJEZsb3dGaXhNZSg+PTAuNzguMCBzaXRlPXJlYWN0X25hdGl2ZV9hbmRyb2lkX2ZiKSBUaGlzIGlzc3VlIHdhcyBmb3VuZFxuICAgICAgICAgKiB3aGVuIG1ha2luZyBGbG93IGNoZWNrIC5hbmRyb2lkLmpzIGZpbGVzLiAqL1xuICAgICAgICBuYXRpdmVSZXNwb25zZVR5cGUsXG4gICAgICAgIGluY3JlbWVudGFsRXZlbnRzLFxuICAgICAgICB0aGlzLnRpbWVvdXQsXG4gICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICAgdGhpcy5fX2RpZENyZWF0ZVJlcXVlc3QuYmluZCh0aGlzKSxcbiAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICApO1xuICAgIH07XG4gICAgaWYgKERFQlVHX05FVFdPUktfU0VORF9ERUxBWSkge1xuICAgICAgc2V0VGltZW91dChkb1NlbmQsIERFQlVHX05FVFdPUktfU0VORF9ERUxBWSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvU2VuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCk6IHZvaWQge1xuICAgIHRoaXMuX2Fib3J0ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQpIHtcbiAgICAgIFJDVE5ldHdvcmtpbmcuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgfVxuICAgIC8vIG9ubHkgY2FsbCBvbnJlYWR5c3RhdGVjaGFuZ2UgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGFib3J0LFxuICAgIC8vIGJlbG93IGxvZ2ljIGlzIHBlciBzcGVjXG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLlVOU0VOVCB8fFxuICAgICAgICAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLk9QRU5FRCAmJiAhdGhpcy5fc2VudCkgfHxcbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkVcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICB0aGlzLnNldFJlYWR5U3RhdGUodGhpcy5ET05FKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgYWdhaW4gYWZ0ZXIsIGluIGNhc2UgbW9kaWZpZWQgaW4gaGFuZGxlclxuICAgIHRoaXMuX3Jlc2V0KCk7XG4gIH1cblxuICBzZXRSZXNwb25zZUhlYWRlcnMocmVzcG9uc2VIZWFkZXJzOiA/T2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbDtcbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuX2xvd2VyQ2FzZVJlc3BvbnNlSGVhZGVycyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpLnJlZHVjZTx7XG4gICAgICBbc3RyaW5nXTogYW55LFxuICAgIH0+KChsY2FzZUhlYWRlcnMsIGhlYWRlck5hbWUpID0+IHtcbiAgICAgIGxjYXNlSGVhZGVyc1toZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCldID0gaGVhZGVyc1toZWFkZXJOYW1lXTtcbiAgICAgIHJldHVybiBsY2FzZUhlYWRlcnM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgc2V0UmVhZHlTdGF0ZShuZXdTdGF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gbmV3U3RhdGU7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAncmVhZHlzdGF0ZWNoYW5nZSd9KTtcbiAgICBpZiAobmV3U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAnYWJvcnQnfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hhc0Vycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLl90aW1lZE91dCkge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZTogJ3RpbWVvdXQnfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAnZXJyb3InfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZTogJ2xvYWQnfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ICdsb2FkZW5kJ30pO1xuICAgIH1cbiAgfVxuXG4gIC8qIGdsb2JhbCBFdmVudExpc3RlbmVyICovXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIC8vIElmIHdlIGRvbnQnIGhhdmUgYSAncmVhZHlzdGF0ZWNoYW5nZScgZXZlbnQgaGFuZGxlciwgd2UgZG9uJ3RcbiAgICAvLyBoYXZlIHRvIHNlbmQgcmVwZWF0ZWQgTE9BRElORyBldmVudHMgd2l0aCBpbmNyZW1lbnRhbCB1cGRhdGVzXG4gICAgLy8gdG8gcmVzcG9uc2VUZXh0LCB3aGljaCB3aWxsIGF2b2lkIGEgYnVuY2ggb2YgbmF0aXZlIC0+IEpTXG4gICAgLy8gYnJpZGdlIHRyYWZmaWMuXG4gICAgaWYgKHR5cGUgPT09ICdyZWFkeXN0YXRlY2hhbmdlJyB8fCB0eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9pbmNyZW1lbnRhbEV2ZW50cyA9IHRydWU7XG4gICAgfVxuICAgIHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWE1MSHR0cFJlcXVlc3Q7XG4iLCIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogQGNvcHlyaWdodCAyMDE1IFRvcnUgTmFnYXNoaW1hLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUHJpdmF0ZURhdGFcbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge3t0eXBlOnN0cmluZ319IGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXZlbnRQaGFzZSBUaGUgY3VycmVudCBldmVudCBwaGFzZS5cbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR8bnVsbH0gY3VycmVudFRhcmdldCBUaGUgY3VycmVudCBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNhbmNlbGVkIFRoZSBmbGFnIHRvIHByZXZlbnQgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3RvcHBlZCBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpbW1lZGlhdGVTdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24gaW1tZWRpYXRlbHkuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBUaGUgbGlzdGVuZXIgaWYgdGhlIGN1cnJlbnQgbGlzdGVuZXIgaXMgcGFzc2l2ZS4gT3RoZXJ3aXNlIHRoaXMgaXMgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lU3RhbXAgVGhlIHVuaXggdGltZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBQcml2YXRlIGRhdGEgZm9yIGV2ZW50IHdyYXBwZXJzLlxuICogQHR5cGUge1dlYWtNYXA8RXZlbnQsIFByaXZhdGVEYXRhPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHByaXZhdGVEYXRhID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBDYWNoZSBmb3Igd3JhcHBlciBjbGFzc2VzLlxuICogQHR5cGUge1dlYWtNYXA8T2JqZWN0LCBGdW5jdGlvbj59XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB3cmFwcGVycyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogR2V0IHByaXZhdGUgZGF0YS5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QgdG8gZ2V0IHByaXZhdGUgZGF0YS5cbiAqIEByZXR1cm5zIHtQcml2YXRlRGF0YX0gVGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgZXZlbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwZChldmVudCkge1xuICAgIGNvbnN0IHJldHYgPSBwcml2YXRlRGF0YS5nZXQoZXZlbnQpO1xuICAgIGNvbnNvbGUuYXNzZXJ0KFxuICAgICAgICByZXR2ICE9IG51bGwsXG4gICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50IG9iamVjdCwgYnV0IGdvdFwiLFxuICAgICAgICBldmVudFxuICAgICk7XG4gICAgcmV0dXJuIHJldHZcbn1cblxuLyoqXG4gKiBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3NldC10aGUtY2FuY2VsZWQtZmxhZ1xuICogQHBhcmFtIGRhdGEge1ByaXZhdGVEYXRhfSBwcml2YXRlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIHNldENhbmNlbEZsYWcoZGF0YSkge1xuICAgIGlmIChkYXRhLnBhc3NpdmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuYWJsZSB0byBwcmV2ZW50RGVmYXVsdCBpbnNpZGUgcGFzc2l2ZSBldmVudCBsaXN0ZW5lciBpbnZvY2F0aW9uLlwiLFxuICAgICAgICAgICAgICAgIGRhdGEucGFzc2l2ZUxpc3RlbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWRhdGEuZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkYXRhLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbi8qKlxuICogVGhlIGV2ZW50IHdyYXBwZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIHByaXZhdGVEYXRhLnNldCh0aGlzLCB7XG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICBldmVudCxcbiAgICAgICAgZXZlbnRQaGFzZTogMixcbiAgICAgICAgY3VycmVudFRhcmdldDogZXZlbnRUYXJnZXQsXG4gICAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIGltbWVkaWF0ZVN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICBwYXNzaXZlTGlzdGVuZXI6IG51bGwsXG4gICAgICAgIHRpbWVTdGFtcDogZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCksXG4gICAgfSk7XG5cbiAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNVbmZvcmdlYWJsZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzVHJ1c3RlZFwiLCB7IHZhbHVlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudC50eXBlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IHRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5jdXJyZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtFdmVudFRhcmdldFtdfSBUaGUgY29tcG9zZWQgcGF0aCBvZiB0aGlzIGV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBvc2VkUGF0aCgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IHBkKHRoaXMpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbY3VycmVudFRhcmdldF1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgb2YgTk9ORS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBOT05FKCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBDQVBUVVJJTkdfUEhBU0UuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQ0FQVFVSSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBBVF9UQVJHRVQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQVRfVEFSR0VUKCkge1xuICAgICAgICByZXR1cm4gMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBCVUJCTElOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBCVUJCTElOR19QSEFTRSgpIHtcbiAgICAgICAgcmV0dXJuIDNcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGV2ZW50UGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFBoYXNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5pbW1lZGlhdGVTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBidWJibGVzKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5idWJibGVzKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBiZSBjYW5jZWxhYmxlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjYW5jZWxhYmxlKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jYW5jZWxhYmxlKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWwgdGhpcyBldmVudC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNvbXBvc2VkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjb21wb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuY29tcG9zZWQpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bml4IHRpbWUgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCB0aW1lU3RhbXAoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS50aW1lU3RhbXBcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBzcmNFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gc3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBjYW5jZWxCdWJibGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5zdG9wcGVkXG4gICAgfSxcbiAgICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuY2FuY2VsQnViYmxlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCByZXR1cm5WYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuICFwZCh0aGlzKS5jYW5jZWxlZFxuICAgIH0sXG4gICAgc2V0IHJldHVyblZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHNldENhbmNlbEZsYWcocGQodGhpcykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBldmVudCBvYmplY3QuIEJ1dCBkbyBub3RoaW5nIHVuZGVyIGV2ZW50IGRpc3BhdGNoaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2J1YmJsZXM9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGJ1YmJsZSB1cC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjYW5jZWxhYmxlPWZhbHNlXSBUaGUgZmxhZyB0byBiZSBwb3NzaWJsZSB0byBjYW5jZWwuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBpbml0RXZlbnQoKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSxcbn07XG5cbi8vIGBjb25zdHJ1Y3RvcmAgaXMgbm90IGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogRXZlbnQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxufSk7XG5cbi8vIEVuc3VyZSBgZXZlbnQgaW5zdGFuY2VvZiB3aW5kb3cuRXZlbnRgIGlzIGB0cnVlYC5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuRXZlbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnQucHJvdG90eXBlKTtcblxuICAgIC8vIE1ha2UgYXNzb2NpYXRpb24gZm9yIHdyYXBwZXJzLlxuICAgIHdyYXBwZXJzLnNldCh3aW5kb3cuRXZlbnQucHJvdG90eXBlLCBFdmVudCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IGEgZ2l2ZW4gcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byByZWRpcmVjdCB0aGUgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWRpcmVjdERlc2NyaXB0b3Ioa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50W2tleV1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICBwZCh0aGlzKS5ldmVudFtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgYSBnaXZlbiBtZXRob2QgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byBjYWxsIHRoZSBtZXRob2QgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGQodGhpcykuZXZlbnQ7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRba2V5XS5hcHBseShldmVudCwgYXJndW1lbnRzKVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBuZXcgd3JhcHBlciBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IEJhc2VFdmVudCBUaGUgYmFzZSB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgZGVmaW5lZCB3cmFwcGVyIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lV3JhcHBlcihCYXNlRXZlbnQsIHByb3RvKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3RvKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJhc2VFdmVudFxuICAgIH1cblxuICAgIC8qKiBDdXN0b21FdmVudCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgICAgICBCYXNlRXZlbnQuY2FsbCh0aGlzLCBldmVudFRhcmdldCwgZXZlbnQpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogQ3VzdG9tRXZlbnQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnMuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiBCYXNlRXZlbnQucHJvdG90eXBlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBpc0Z1bmMgPSB0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgaXNGdW5jXG4gICAgICAgICAgICAgICAgICAgID8gZGVmaW5lQ2FsbERlc2NyaXB0b3Ioa2V5KVxuICAgICAgICAgICAgICAgICAgICA6IGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50XG59XG5cbi8qKlxuICogR2V0IHRoZSB3cmFwcGVyIGNsYXNzIG9mIGEgZ2l2ZW4gcHJvdG90eXBlLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGdldCBpdHMgd3JhcHBlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRXcmFwcGVyKHByb3RvKSB7XG4gICAgaWYgKHByb3RvID09IG51bGwgfHwgcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50XG4gICAgfVxuXG4gICAgbGV0IHdyYXBwZXIgPSB3cmFwcGVycy5nZXQocHJvdG8pO1xuICAgIGlmICh3cmFwcGVyID09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlciA9IGRlZmluZVdyYXBwZXIoZ2V0V3JhcHBlcihPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pKSwgcHJvdG8pO1xuICAgICAgICB3cmFwcGVycy5zZXQocHJvdG8sIHdyYXBwZXIpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlclxufVxuXG4vKipcbiAqIFdyYXAgYSBnaXZlbiBldmVudCB0byBtYW5hZ2VtZW50IGEgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0IG9mIHRoaXMgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RXZlbnR9IFRoZSB3cmFwcGVyIGluc3RhbmNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gd3JhcEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIGNvbnN0IFdyYXBwZXIgPSBnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihldmVudCkpO1xuICAgIHJldHVybiBuZXcgV3JhcHBlcihldmVudFRhcmdldCwgZXZlbnQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbW1lZGlhdGVTdG9wcGVkIGZsYWcgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3RvcHBlZChldmVudCkge1xuICAgIHJldHVybiBwZChldmVudCkuaW1tZWRpYXRlU3RvcHBlZFxufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBldmVudCBwaGFzZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIHNldCBjdXJyZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBldmVudFBoYXNlIE5ldyBldmVudCBwaGFzZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0RXZlbnRQaGFzZShldmVudCwgZXZlbnRQaGFzZSkge1xuICAgIHBkKGV2ZW50KS5ldmVudFBoYXNlID0gZXZlbnRQaGFzZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IE5ldyBjdXJyZW50IHRhcmdldC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0Q3VycmVudFRhcmdldChldmVudCwgY3VycmVudFRhcmdldCkge1xuICAgIHBkKGV2ZW50KS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbn1cblxuLyoqXG4gKiBTZXQgYSBwYXNzaXZlIGxpc3RlbmVyIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBwYXNzaXZlTGlzdGVuZXIgTmV3IHBhc3NpdmUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldFBhc3NpdmVMaXN0ZW5lcihldmVudCwgcGFzc2l2ZUxpc3RlbmVyKSB7XG4gICAgcGQoZXZlbnQpLnBhc3NpdmVMaXN0ZW5lciA9IHBhc3NpdmVMaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMaXN0ZW5lck5vZGVcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gKiBAcHJvcGVydHkgezF8MnwzfSBsaXN0ZW5lclR5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFzc2l2ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvbmNlXG4gKiBAcHJvcGVydHkge0xpc3RlbmVyTm9kZXxudWxsfSBuZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBNYXA8c3RyaW5nLCBMaXN0ZW5lck5vZGU+Pn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGxpc3RlbmVyc01hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbi8vIExpc3RlbmVyIHR5cGVzXG5jb25zdCBDQVBUVVJFID0gMTtcbmNvbnN0IEJVQkJMRSA9IDI7XG5jb25zdCBBVFRSSUJVVEUgPSAzO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3Qgb3Igbm90LlxuICogQHBhcmFtIHthbnl9IHggVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc09iamVjdCh4KSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG59XG5cbi8qKlxuICogR2V0IGxpc3RlbmVycy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgdG8gZ2V0LlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT59IFRoZSBsaXN0ZW5lcnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcnMoZXZlbnRUYXJnZXQpIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50VGFyZ2V0KTtcbiAgICBpZiAobGlzdGVuZXJzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50VGFyZ2V0IG9iamVjdCwgYnV0IGdvdCBhbm90aGVyIHZhbHVlLlwiXG4gICAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RlbmVyc1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIGV2ZW50IGF0dHJpYnV0ZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byBnZXQgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxpc3RlbmVyVHlwZSA9PT0gQVRUUklCVVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmxpc3RlbmVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuXG4gICAgICAgIHNldChsaXN0ZW5lcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiICYmICFpc09iamVjdChsaXN0ZW5lcikpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IG51bGw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcblxuICAgICAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgcmVtb3Zpbmcgb2xkIHZhbHVlLlxuICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG9sZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIG5ldyB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lclR5cGU6IEFUVFJJQlVURSxcbiAgICAgICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9uY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBhbiBldmVudCBhdHRyaWJ1dGUgKGUuZy4gYGV2ZW50VGFyZ2V0Lm9uY2xpY2tgKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFRhcmdldFByb3RvdHlwZSBUaGUgZXZlbnQgdGFyZ2V0IHByb3RvdHlwZSB0byBkZWZpbmUgYW4gZXZlbnQgYXR0cmJpdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGRlZmluZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZShldmVudFRhcmdldFByb3RvdHlwZSwgZXZlbnROYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICBldmVudFRhcmdldFByb3RvdHlwZSxcbiAgICAgICAgYG9uJHtldmVudE5hbWV9YCxcbiAgICAgICAgZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSlcbiAgICApO1xufVxuXG4vKipcbiAqIERlZmluZSBhIGN1c3RvbSBFdmVudFRhcmdldCB3aXRoIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBldmVudE5hbWVzIEV2ZW50IG5hbWVzIGZvciBldmVudCBhdHRyaWJ1dGVzLlxuICogQHJldHVybnMge0V2ZW50VGFyZ2V0fSBUaGUgY3VzdG9tIEV2ZW50VGFyZ2V0LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoZXZlbnROYW1lcykge1xuICAgIC8qKiBDdXN0b21FdmVudFRhcmdldCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50VGFyZ2V0KCkge1xuICAgICAgICBFdmVudFRhcmdldC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogQ3VzdG9tRXZlbnRUYXJnZXQsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnROYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZShDdXN0b21FdmVudFRhcmdldC5wcm90b3R5cGUsIGV2ZW50TmFtZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBDdXN0b21FdmVudFRhcmdldFxufVxuXG4vKipcbiAqIEV2ZW50VGFyZ2V0LlxuICpcbiAqIC0gVGhpcyBpcyBjb25zdHJ1Y3RvciBpZiBubyBhcmd1bWVudHMuXG4gKiAtIFRoaXMgaXMgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgQ3VzdG9tRXZlbnRUYXJnZXQgY29uc3RydWN0b3IgaWYgdGhlcmUgYXJlIGFyZ3VtZW50cy5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgY2xhc3MgQSBleHRlbmRzIEV2ZW50VGFyZ2V0IHt9XG4gKiAgICAgY2xhc3MgQiBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiKSB7fVxuICogICAgIGNsYXNzIEMgZXh0ZW5kcyBFdmVudFRhcmdldChcIm1lc3NhZ2VcIiwgXCJlcnJvclwiKSB7fVxuICogICAgIGNsYXNzIEQgZXh0ZW5kcyBFdmVudFRhcmdldChbXCJtZXNzYWdlXCIsIFwiZXJyb3JcIl0pIHt9XG4gKi9cbmZ1bmN0aW9uIEV2ZW50VGFyZ2V0KCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIGxpc3RlbmVyc01hcC5zZXQodGhpcywgbmV3IE1hcCgpKTtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoYXJndW1lbnRzWzBdKVxuICAgIH1cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0eXBlc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQodHlwZXMpXG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIilcbiAgICAvKmVzbGludC1lbmFibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBnaXZlbiBsaXN0ZW5lciB0byB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIidsaXN0ZW5lcicgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBvcHRpb25zSXNPYmogPSBpc09iamVjdChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IG9wdGlvbnNJc09ialxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICBsaXN0ZW5lcixcbiAgICAgICAgICAgIGxpc3RlbmVyVHlwZSxcbiAgICAgICAgICAgIHBhc3NpdmU6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMucGFzc2l2ZSksXG4gICAgICAgICAgICBvbmNlOiBvcHRpb25zSXNPYmogJiYgQm9vbGVhbihvcHRpb25zLm9uY2UpLFxuICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTZXQgaXQgYXMgdGhlIGZpcnN0IG5vZGUgaWYgdGhlIGZpcnN0IG5vZGUgaXMgbnVsbC5cbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBuZXdOb2RlKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgY2hlY2tpbmcgZHVwbGljYXRpb24uLlxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyID09PSBsaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlID09PSBsaXN0ZW5lclR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZ25vcmUgZHVwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgaXQuXG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIGdpdmVuIGxpc3RlbmVyIGZyb20gdGhpcyBldmVudCB0YXJnZXQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58e2NhcHR1cmU/OmJvb2xlYW4scGFzc2l2ZT86Ym9vbGVhbixvbmNlPzpib29sZWFufX0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGZvciB0aGlzIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSBpc09iamVjdChvcHRpb25zKVxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwYXRjaCBhIGdpdmVuIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIGV2ZW50IHRvIGRpc3BhdGNoLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgZmFsc2VgIGlmIGNhbmNlbGVkLlxuICAgICAqL1xuICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09IG51bGwgfHwgdHlwZW9mIGV2ZW50LnR5cGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXZlbnQudHlwZVwiIHNob3VsZCBiZSBhIHN0cmluZy4nKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbGlzdGVuZXJzIGFyZW4ndCByZWdpc3RlcmVkLCB0ZXJtaW5hdGUuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gZXZlbnQudHlwZTtcbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaW5jZSB3ZSBjYW5ub3QgcmV3cml0ZSBzZXZlcmFsIHByb3BlcnRpZXMsIHNvIHdyYXAgb2JqZWN0LlxuICAgICAgICBjb25zdCB3cmFwcGVkRXZlbnQgPSB3cmFwRXZlbnQodGhpcywgZXZlbnQpO1xuXG4gICAgICAgIC8vIFRoaXMgZG9lc24ndCBwcm9jZXNzIGNhcHR1cmluZyBwaGFzZSBhbmQgYnViYmxpbmcgcGhhc2UuXG4gICAgICAgIC8vIFRoaXMgaXNuJ3QgcGFydGljaXBhdGluZyBpbiBhIHRyZWUuXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGlzdGVuZXIgaWYgaXQncyBvbmNlXG4gICAgICAgICAgICBpZiAobm9kZS5vbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxsIHRoaXMgbGlzdGVuZXJcbiAgICAgICAgICAgIHNldFBhc3NpdmVMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB3cmFwcGVkRXZlbnQsXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzaXZlID8gbm9kZS5saXN0ZW5lciA6IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUubGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuY2FsbCh0aGlzLCB3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgIT09IEFUVFJJQlVURSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxpc3RlbmVyLmhhbmRsZUV2ZW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQod3JhcHBlZEV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQnJlYWsgaWYgYGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbmAgd2FzIGNhbGxlZC5cbiAgICAgICAgICAgIGlmIChpc1N0b3BwZWQod3JhcHBlZEV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKHdyYXBwZWRFdmVudCwgbnVsbCk7XG4gICAgICAgIHNldEV2ZW50UGhhc2Uod3JhcHBlZEV2ZW50LCAwKTtcbiAgICAgICAgc2V0Q3VycmVudFRhcmdldCh3cmFwcGVkRXZlbnQsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiAhd3JhcHBlZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudFRhcmdldC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudFRhcmdldCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudFRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudFRhcmdldGAgaXMgYHRydWVgLlxuaWYgKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2Ygd2luZG93LkV2ZW50VGFyZ2V0ICE9PSBcInVuZGVmaW5lZFwiXG4pIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlKTtcbn1cblxuZXhwb3J0cy5kZWZpbmVFdmVudEF0dHJpYnV0ZSA9IGRlZmluZUV2ZW50QXR0cmlidXRlO1xuZXhwb3J0cy5FdmVudFRhcmdldCA9IEV2ZW50VGFyZ2V0O1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnRUYXJnZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGVcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LXRhcmdldC1zaGltLmpzLm1hcFxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtCbG9iQ29sbGVjdG9yLCBCbG9iRGF0YSwgQmxvYk9wdGlvbnN9IGZyb20gJy4vQmxvYlR5cGVzJztcblxuaW1wb3J0IE5hdGl2ZUJsb2JNb2R1bGUgZnJvbSAnLi9OYXRpdmVCbG9iTW9kdWxlJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxuY29uc3QgQmxvYiA9IHJlcXVpcmUoJy4vQmxvYicpO1xuY29uc3QgQmxvYlJlZ2lzdHJ5ID0gcmVxdWlyZSgnLi9CbG9iUmVnaXN0cnknKTtcblxuLyplc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4vKmVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXG4vKipcbiAqIEJhc2VkIG9uIHRoZSByZmM0MTIyLWNvbXBsaWFudCBzb2x1dGlvbiBwb3N0ZWQgYXRcbiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0XG4gKi9cbmZ1bmN0aW9uIHV1aWR2NCgpOiBzdHJpbmcge1xuICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBjID0+IHtcbiAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxuICAgICAgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcbiAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gIH0pO1xufVxuXG4vLyAqKlRlbXBvcmFyeSB3b3JrYXJvdW5kKipcbi8vIFRPRE8oIzI0NjU0KTogVXNlIHR1cmJvbW9kdWxlcyBmb3IgdGhlIEJsb2IgbW9kdWxlLlxuLy8gQmxvYiBjb2xsZWN0b3IgaXMgYSBqc2k6Okhvc3RPYmplY3QgdGhhdCBpcyB1c2VkIGJ5IG5hdGl2ZSB0byBrbm93XG4vLyB3aGVuIHRoZSBhIEJsb2IgaW5zdGFuY2UgaXMgZGVhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzIHRvIGZyZWUgdGhlXG4vLyB1bmRlcmx5aW5nIG5hdGl2ZSByZXNvdXJjZXMuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmthcm91bmQgdGhlIGZhY3Rcbi8vIHRoYXQgdGhlIGN1cnJlbnQgYnJpZGdlIGluZnJhIGRvZXNuJ3QgYWxsb3cgdG8gdHJhY2sganMgb2JqZWN0c1xuLy8gZGVhbGxvY2F0aW9uLiBJZGVhbGx5IHRoZSB3aG9sZSBCbG9iIG9iamVjdCBzaG91bGQgYmUgYSBqc2k6Okhvc3RPYmplY3QuXG5mdW5jdGlvbiBjcmVhdGVCbG9iQ29sbGVjdG9yKGJsb2JJZDogc3RyaW5nKTogQmxvYkNvbGxlY3RvciB8IG51bGwge1xuICBpZiAoZ2xvYmFsLl9fYmxvYkNvbGxlY3RvclByb3ZpZGVyID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2xvYmFsLl9fYmxvYkNvbGxlY3RvclByb3ZpZGVyKGJsb2JJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBNb2R1bGUgdG8gbWFuYWdlIGJsb2JzLiBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIGJsb2IgbW9kdWxlLlxuICovXG5jbGFzcyBCbG9iTWFuYWdlciB7XG4gIC8qKlxuICAgKiBJZiB0aGUgbmF0aXZlIGJsb2IgbW9kdWxlIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIHN0YXRpYyBpc0F2YWlsYWJsZTogYm9vbGVhbiA9ICEhTmF0aXZlQmxvYk1vZHVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlIGJsb2IgZnJvbSBleGlzdGluZyBhcnJheSBvZiBibG9icy5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVGcm9tUGFydHMoXG4gICAgcGFydHM6IEFycmF5PEJsb2IgfCBzdHJpbmc+LFxuICAgIG9wdGlvbnM/OiBCbG9iT3B0aW9ucyxcbiAgKTogQmxvYiB7XG4gICAgaW52YXJpYW50KE5hdGl2ZUJsb2JNb2R1bGUsICdOYXRpdmVCbG9iTW9kdWxlIGlzIGF2YWlsYWJsZS4nKTtcblxuICAgIGNvbnN0IGJsb2JJZCA9IHV1aWR2NCgpO1xuICAgIGNvbnN0IGl0ZW1zID0gcGFydHMubWFwKHBhcnQgPT4ge1xuICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ3JlYXRpbmcgYmxvYnMgZnJvbSAnQXJyYXlCdWZmZXInIGFuZCAnQXJyYXlCdWZmZXJWaWV3JyBhcmUgbm90IHN1cHBvcnRlZFwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogcGFydC5kYXRhLFxuICAgICAgICAgIHR5cGU6ICdibG9iJyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogU3RyaW5nKHBhcnQpLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNpemUgPSBpdGVtcy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgaWYgKGN1cnIudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFjYyArIGdsb2JhbC51bmVzY2FwZShlbmNvZGVVUkkoY3Vyci5kYXRhKSkubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYyArIGN1cnIuZGF0YS5zaXplO1xuICAgICAgfVxuICAgIH0sIDApO1xuXG4gICAgTmF0aXZlQmxvYk1vZHVsZS5jcmVhdGVGcm9tUGFydHMoaXRlbXMsIGJsb2JJZCk7XG5cbiAgICByZXR1cm4gQmxvYk1hbmFnZXIuY3JlYXRlRnJvbU9wdGlvbnMoe1xuICAgICAgYmxvYklkLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgICAgc2l6ZSxcbiAgICAgIHR5cGU6IG9wdGlvbnMgPyBvcHRpb25zLnR5cGUgOiAnJyxcbiAgICAgIGxhc3RNb2RpZmllZDogb3B0aW9ucyA/IG9wdGlvbnMubGFzdE1vZGlmaWVkIDogRGF0ZS5ub3coKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYmxvYiBpbnN0YW5jZSBmcm9tIGJsb2IgZGF0YSBmcm9tIG5hdGl2ZS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IG1vZHVsZXMgbGlrZSBYSFIsIFdlYlNvY2tldCwgZXRjLlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUZyb21PcHRpb25zKG9wdGlvbnM6IEJsb2JEYXRhKTogQmxvYiB7XG4gICAgQmxvYlJlZ2lzdHJ5LnJlZ2lzdGVyKG9wdGlvbnMuYmxvYklkKTtcbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEJsb2IucHJvdG90eXBlKSwge1xuICAgICAgZGF0YTpcbiAgICAgICAgLy8gUmV1c2UgdGhlIGNvbGxlY3RvciBpbnN0YW5jZSB3aGVuIGNyZWF0aW5nIGZyb20gYW4gZXhpc3RpbmcgYmxvYi5cbiAgICAgICAgLy8gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIGlzIG9ubHkgZGVhbGxvY2F0ZWRcbiAgICAgICAgLy8gd2hlbiBhbGwgYmxvYnMgdGhhdCByZWZlciB0byBpdCBhcmUgZGVhbGxvY2F0ZWQuXG4gICAgICAgIG9wdGlvbnMuX19jb2xsZWN0b3IgPT0gbnVsbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICBfX2NvbGxlY3RvcjogY3JlYXRlQmxvYkNvbGxlY3RvcihvcHRpb25zLmJsb2JJZCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBvcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWxsb2NhdGUgcmVzb3VyY2VzIGZvciBhIGJsb2IuXG4gICAqL1xuICBzdGF0aWMgcmVsZWFzZShibG9iSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGludmFyaWFudChOYXRpdmVCbG9iTW9kdWxlLCAnTmF0aXZlQmxvYk1vZHVsZSBpcyBhdmFpbGFibGUuJyk7XG5cbiAgICBCbG9iUmVnaXN0cnkudW5yZWdpc3RlcihibG9iSWQpO1xuICAgIGlmIChCbG9iUmVnaXN0cnkuaGFzKGJsb2JJZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgTmF0aXZlQmxvYk1vZHVsZS5yZWxlYXNlKGJsb2JJZCk7XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0IHRoZSBibG9iIGNvbnRlbnQgaGFuZGxlciBpbiB0aGUgbmV0d29ya2luZyBtb2R1bGUgdG8gc3VwcG9ydCBibG9iXG4gICAqIHJlcXVlc3RzIGFuZCByZXNwb25zZXMuXG4gICAqL1xuICBzdGF0aWMgYWRkTmV0d29ya2luZ0hhbmRsZXIoKTogdm9pZCB7XG4gICAgaW52YXJpYW50KE5hdGl2ZUJsb2JNb2R1bGUsICdOYXRpdmVCbG9iTW9kdWxlIGlzIGF2YWlsYWJsZS4nKTtcblxuICAgIE5hdGl2ZUJsb2JNb2R1bGUuYWRkTmV0d29ya2luZ0hhbmRsZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB0aGUgd2Vic29ja2V0IHNob3VsZCByZXR1cm4gYSBibG9iIGZvciBpbmNvbWluZyBiaW5hcnlcbiAgICogbWVzc2FnZXMuXG4gICAqL1xuICBzdGF0aWMgYWRkV2ViU29ja2V0SGFuZGxlcihzb2NrZXRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaW52YXJpYW50KE5hdGl2ZUJsb2JNb2R1bGUsICdOYXRpdmVCbG9iTW9kdWxlIGlzIGF2YWlsYWJsZS4nKTtcblxuICAgIE5hdGl2ZUJsb2JNb2R1bGUuYWRkV2ViU29ja2V0SGFuZGxlcihzb2NrZXRJZCk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGUgdGhlIHdlYnNvY2tldCBzaG91bGQgbm8gbG9uZ2VyIHJldHVybiBhIGJsb2IgZm9yIGluY29taW5nXG4gICAqIGJpbmFyeSBtZXNzYWdlcy5cbiAgICovXG4gIHN0YXRpYyByZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHNvY2tldElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoTmF0aXZlQmxvYk1vZHVsZSwgJ05hdGl2ZUJsb2JNb2R1bGUgaXMgYXZhaWxhYmxlLicpO1xuXG4gICAgTmF0aXZlQmxvYk1vZHVsZS5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHNvY2tldElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgYmxvYiBtZXNzYWdlIHRvIGEgd2Vic29ja2V0LlxuICAgKi9cbiAgc3RhdGljIHNlbmRPdmVyU29ja2V0KGJsb2I6IEJsb2IsIHNvY2tldElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoTmF0aXZlQmxvYk1vZHVsZSwgJ05hdGl2ZUJsb2JNb2R1bGUgaXMgYXZhaWxhYmxlLicpO1xuXG4gICAgTmF0aXZlQmxvYk1vZHVsZS5zZW5kT3ZlclNvY2tldChibG9iLmRhdGEsIHNvY2tldElkKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJsb2JNYW5hZ2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQmxvYk1vZHVsZSc7XG5pbXBvcnQgTmF0aXZlQmxvYk1vZHVsZSBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUJsb2JNb2R1bGUnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlQmxvYk1vZHVsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8QkxPQl9VUklfU0NIRU1FOiA/c3RyaW5nLCBCTE9CX1VSSV9IT1NUOiA/c3RyaW5nfH07XG4gICthZGROZXR3b3JraW5nSGFuZGxlcjogKCkgPT4gdm9pZDtcbiAgK2FkZFdlYlNvY2tldEhhbmRsZXI6IChpZDogbnVtYmVyKSA9PiB2b2lkO1xuICArcmVtb3ZlV2ViU29ja2V0SGFuZGxlcjogKGlkOiBudW1iZXIpID0+IHZvaWQ7XG4gICtzZW5kT3ZlclNvY2tldDogKGJsb2I6IE9iamVjdCwgc29ja2V0SUQ6IG51bWJlcikgPT4gdm9pZDtcbiAgK2NyZWF0ZUZyb21QYXJ0czogKHBhcnRzOiBBcnJheTxPYmplY3Q+LCB3aXRoSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgK3JlbGVhc2U6IChibG9iSWQ6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuY29uc3QgTmF0aXZlTW9kdWxlID0gVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ0Jsb2JNb2R1bGUnKTtcblxubGV0IGNvbnN0YW50cyA9IG51bGw7XG5sZXQgTmF0aXZlQmxvYk1vZHVsZSA9IG51bGw7XG5cbmlmIChOYXRpdmVNb2R1bGUgIT0gbnVsbCkge1xuICBOYXRpdmVCbG9iTW9kdWxlID0ge1xuICAgIGdldENvbnN0YW50cygpOiB7fEJMT0JfVVJJX1NDSEVNRTogP3N0cmluZywgQkxPQl9VUklfSE9TVDogP3N0cmluZ3x9IHtcbiAgICAgIGlmIChjb25zdGFudHMgPT0gbnVsbCkge1xuICAgICAgICBjb25zdGFudHMgPSBOYXRpdmVNb2R1bGUuZ2V0Q29uc3RhbnRzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29uc3RhbnRzO1xuICAgIH0sXG4gICAgYWRkTmV0d29ya2luZ0hhbmRsZXIoKTogdm9pZCB7XG4gICAgICBOYXRpdmVNb2R1bGUuYWRkTmV0d29ya2luZ0hhbmRsZXIoKTtcbiAgICB9LFxuICAgIGFkZFdlYlNvY2tldEhhbmRsZXIoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgTmF0aXZlTW9kdWxlLmFkZFdlYlNvY2tldEhhbmRsZXIoaWQpO1xuICAgIH0sXG4gICAgcmVtb3ZlV2ViU29ja2V0SGFuZGxlcihpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICBOYXRpdmVNb2R1bGUucmVtb3ZlV2ViU29ja2V0SGFuZGxlcihpZCk7XG4gICAgfSxcbiAgICBzZW5kT3ZlclNvY2tldChibG9iOiBPYmplY3QsIHNvY2tldElEOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIE5hdGl2ZU1vZHVsZS5zZW5kT3ZlclNvY2tldChibG9iLCBzb2NrZXRJRCk7XG4gICAgfSxcbiAgICBjcmVhdGVGcm9tUGFydHMocGFydHM6IEFycmF5PE9iamVjdD4sIHdpdGhJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICBOYXRpdmVNb2R1bGUuY3JlYXRlRnJvbVBhcnRzKHBhcnRzLCB3aXRoSWQpO1xuICAgIH0sXG4gICAgcmVsZWFzZShibG9iSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgTmF0aXZlTW9kdWxlLnJlbGVhc2UoYmxvYklkKTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoTmF0aXZlQmxvYk1vZHVsZTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0Jsb2JEYXRhLCBCbG9iT3B0aW9uc30gZnJvbSAnLi9CbG9iVHlwZXMnO1xuXG4vKipcbiAqIE9wYXF1ZSBKUyByZXByZXNlbnRhdGlvbiBvZiBzb21lIGJpbmFyeSBkYXRhIGluIG5hdGl2ZS5cbiAqXG4gKiBUaGUgQVBJIGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIFczQyBCbG9iIEFQSSwgd2l0aCBvbmUgY2F2ZWF0XG4gKiByZWdhcmRpbmcgZXhwbGljaXQgZGVhbGxvY2F0aW9uLiBSZWZlciB0byB0aGUgYGNsb3NlKClgXG4gKiBtZXRob2QgZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIGluIGEgUmVhY3QgY29tcG9uZW50OlxuICpcbiAqICAgY2xhc3MgV2ViU29ja2V0SW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICogICAgICBzdGF0ZSA9IHtibG9iOiBudWxsfTtcbiAqICAgICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gKiAgICAgICAgbGV0IHdzID0gdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQoLi4uKTtcbiAqICAgICAgICB3cy5iaW5hcnlUeXBlID0gJ2Jsb2InO1xuICogICAgICAgIHdzLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICogICAgICAgICAgaWYgKHRoaXMuc3RhdGUuYmxvYikge1xuICogICAgICAgICAgICB0aGlzLnN0YXRlLmJsb2IuY2xvc2UoKTtcbiAqICAgICAgICAgIH1cbiAqICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jsb2I6IGV2ZW50LmRhdGF9KTtcbiAqICAgICAgICB9O1xuICogICAgICB9XG4gKiAgICAgIGNvbXBvbmVudFVubW91bnQoKSB7XG4gKiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYmxvYikge1xuICogICAgICAgICAgdGhpcy5zdGF0ZS5ibG9iLmNsb3NlKCk7XG4gKiAgICAgICAgfVxuICogICAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAqICAgICAgfVxuICogICAgICByZW5kZXIoKSB7XG4gKiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmJsb2IpIHtcbiAqICAgICAgICAgIHJldHVybiA8VmlldyAvPjtcbiAqICAgICAgICB9XG4gKiAgICAgICAgcmV0dXJuIDxJbWFnZSBzb3VyY2U9e3t1cmk6IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5zdGF0ZS5ibG9iKX19IC8+O1xuICogICAgICB9XG4gKiAgIH1cbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9CbG9iXG4gKi9cbmNsYXNzIEJsb2Ige1xuICBfZGF0YTogP0Jsb2JEYXRhO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBmb3IgSlMgY29uc3VtZXJzLlxuICAgKiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IGNyZWF0aW5nIEJsb2JzIGZyb20gb3RoZXIgQmxvYnMuXG4gICAqIFJlZmVyZW5jZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Jsb2IvQmxvYlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFydHM6IEFycmF5PEJsb2IgfCBzdHJpbmc+ID0gW10sIG9wdGlvbnM/OiBCbG9iT3B0aW9ucykge1xuICAgIGNvbnN0IEJsb2JNYW5hZ2VyID0gcmVxdWlyZSgnLi9CbG9iTWFuYWdlcicpO1xuICAgIHRoaXMuZGF0YSA9IEJsb2JNYW5hZ2VyLmNyZWF0ZUZyb21QYXJ0cyhwYXJ0cywgb3B0aW9ucykuZGF0YTtcbiAgfVxuXG4gIC8qXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IEJsb2Igb2JqZWN0IGNvbnRhaW5pbmdcbiAgICogdGhlIGRhdGEgaW4gdGhlIHNwZWNpZmllZCByYW5nZSBvZiBieXRlcyBvZiB0aGUgc291cmNlIEJsb2IuXG4gICAqIFJlZmVyZW5jZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Jsb2Ivc2xpY2VcbiAgICovXG4gIC8vICRGbG93Rml4TWVbdW5zYWZlLWdldHRlcnMtc2V0dGVyc11cbiAgc2V0IGRhdGEoZGF0YTogP0Jsb2JEYXRhKSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1nZXR0ZXJzLXNldHRlcnNdXG4gIGdldCBkYXRhKCk6IEJsb2JEYXRhIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmxvYiBoYXMgYmVlbiBjbG9zZWQgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHNsaWNlKHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIsIGNvbnRlbnRUeXBlOiBzdHJpbmcgPSAnJyk6IEJsb2Ige1xuICAgIGNvbnN0IEJsb2JNYW5hZ2VyID0gcmVxdWlyZSgnLi9CbG9iTWFuYWdlcicpO1xuICAgIGxldCB7b2Zmc2V0LCBzaXplfSA9IHRoaXMuZGF0YTtcblxuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoc3RhcnQgPiBzaXplKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbcmVhc3NpZ24tY29uc3RdXG4gICAgICAgIHN0YXJ0ID0gc2l6ZTtcbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSBzdGFydDtcbiAgICAgIHNpemUgLT0gc3RhcnQ7XG5cbiAgICAgIGlmICh0eXBlb2YgZW5kID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbcmVhc3NpZ24tY29uc3RdXG4gICAgICAgICAgZW5kID0gdGhpcy5zaXplICsgZW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQgPiB0aGlzLnNpemUpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3JlYXNzaWduLWNvbnN0XVxuICAgICAgICAgIGVuZCA9IHRoaXMuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBzaXplID0gZW5kIC0gc3RhcnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBCbG9iTWFuYWdlci5jcmVhdGVGcm9tT3B0aW9ucyh7XG4gICAgICBibG9iSWQ6IHRoaXMuZGF0YS5ibG9iSWQsXG4gICAgICBvZmZzZXQsXG4gICAgICBzaXplLFxuICAgICAgdHlwZTogY29udGVudFR5cGUsXG4gICAgICAvKiBTaW5jZSBgYmxvYi5zbGljZSgpYCBjcmVhdGVzIGEgbmV3IHZpZXcgb250byB0aGUgc2FtZSBiaW5hcnlcbiAgICAgICAqIGRhdGEgYXMgdGhlIG9yaWdpbmFsIGJsb2IsIHdlIHNob3VsZCByZS11c2UgdGhlIHNhbWUgY29sbGVjdG9yXG4gICAgICAgKiBvYmplY3Qgc28gdGhhdCB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBnZXRzIGRlYWxsb2NhdGVkIHdoZW5cbiAgICAgICAqIHRoZSBsYXN0IHZpZXcgaW50byB0aGUgZGF0YSBpcyByZWxlYXNlZCwgbm90IHRoZSBmaXJzdC5cbiAgICAgICAqL1xuICAgICAgX19jb2xsZWN0b3I6IHRoaXMuZGF0YS5fX2NvbGxlY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBpbiB0aGUgc3RhbmRhcmQsIGJ1dCBub3QgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYnlcbiAgICogYW55IGJyb3dzZXJzIGF0IHRoaXMgcG9pbnQuIEl0J3MgaW1wb3J0YW50IGZvciBob3cgQmxvYnMgd29yayBpblxuICAgKiBSZWFjdCBOYXRpdmUsIGhvd2V2ZXIsIHNpbmNlIHdlIGNhbm5vdCBkZS1hbGxvY2F0ZSByZXNvdXJjZXMgYXV0b21hdGljYWxseSxcbiAgICogc28gY29uc3VtZXJzIG5lZWQgdG8gZXhwbGljaXRseSBkZS1hbGxvY2F0ZSB0aGVtLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHNlbWFudGljcyBhcm91bmQgQmxvYnMgY3JlYXRlZCB2aWEgYGJsb2Iuc2xpY2UoKWBcbiAgICogYW5kIGBuZXcgQmxvYihbYmxvYl0pYCBhcmUgZGlmZmVyZW50LiBgYmxvYi5zbGljZSgpYCBjcmVhdGVzIGFcbiAgICogbmV3ICp2aWV3KiBvbnRvIHRoZSBzYW1lIGJpbmFyeSBkYXRhLCBzbyBjYWxsaW5nIGBjbG9zZSgpYCBvbiBhbnlcbiAgICogb2YgdGhvc2Ugdmlld3MgaXMgZW5vdWdoIHRvIGRlYWxsb2NhdGUgdGhlIGRhdGEsIHdoZXJlYXNcbiAgICogYG5ldyBCbG9iKFtibG9iLCAuLi5dKWAgYWN0dWFsbHkgY29waWVzIHRoZSBkYXRhIGluIG1lbW9yeS5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGNvbnN0IEJsb2JNYW5hZ2VyID0gcmVxdWlyZSgnLi9CbG9iTWFuYWdlcicpO1xuICAgIEJsb2JNYW5hZ2VyLnJlbGVhc2UodGhpcy5kYXRhLmJsb2JJZCk7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaXplIG9mIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgQmxvYiBvYmplY3QsIGluIGJ5dGVzLlxuICAgKi9cbiAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtZ2V0dGVycy1zZXR0ZXJzXVxuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGEuc2l6ZTtcbiAgfVxuXG4gIC8qXG4gICAqIFN0cmluZyBpbmRpY2F0aW5nIHRoZSBNSU1FIHR5cGUgb2YgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBCbG9iLlxuICAgKiBJZiB0aGUgdHlwZSBpcyB1bmtub3duLCB0aGlzIHN0cmluZyBpcyBlbXB0eS5cbiAgICovXG4gIC8vICRGbG93Rml4TWVbdW5zYWZlLWdldHRlcnMtc2V0dGVyc11cbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnR5cGUgfHwgJyc7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCbG9iO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmNvbnN0IHJlZ2lzdHJ5OiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuXG5jb25zdCByZWdpc3RlciA9IChpZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHVzZWQgPSByZWdpc3RyeS5nZXQoaWQpO1xuXG4gIGlmICh1c2VkICE9IG51bGwpIHtcbiAgICByZWdpc3RyeS5zZXQoaWQsIHVzZWQgKyAxKTtcbiAgfSBlbHNlIHtcbiAgICByZWdpc3RyeS5zZXQoaWQsIDEpO1xuICB9XG59O1xuXG5jb25zdCB1bnJlZ2lzdGVyID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdXNlZCA9IHJlZ2lzdHJ5LmdldChpZCk7XG5cbiAgaWYgKHVzZWQgIT0gbnVsbCkge1xuICAgIGlmICh1c2VkIDw9IDEpIHtcbiAgICAgIHJlZ2lzdHJ5LmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdHJ5LnNldChpZCwgdXNlZCAtIDEpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaGFzID0gKGlkOiBzdHJpbmcpOiBudW1iZXIgfCBib29sZWFuID0+IHtcbiAgcmV0dXJuIHJlZ2lzdHJ5LmdldChpZCkgfHwgZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVnaXN0ZXIsXG4gIHVucmVnaXN0ZXIsXG4gIGhhcyxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0lQZXJmb3JtYW5jZUxvZ2dlcn0gZnJvbSAnLi9jcmVhdGVQZXJmb3JtYW5jZUxvZ2dlcic7XG5cbmltcG9ydCBjcmVhdGVQZXJmb3JtYW5jZUxvZ2dlciBmcm9tICcuL2NyZWF0ZVBlcmZvcm1hbmNlTG9nZ2VyJztcblxuLyoqXG4gKiBUaGlzIGlzIGEgZ2xvYmFsIHNoYXJlZCBpbnN0YW5jZSBvZiBJUGVyZm9ybWFuY2VMb2dnZXIgdGhhdCBpcyBjcmVhdGVkIHdpdGhcbiAqIGNyZWF0ZVBlcmZvcm1hbmNlTG9nZ2VyKCkuXG4gKiBUaGlzIGxvZ2dlciBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBnbG9iYWwgcGVyZm9ybWFuY2UgbWV0cmljcyBsaWtlIHRoZSBvbmVzXG4gKiB0aGF0IGFyZSBsb2dnZWQgZHVyaW5nIGxvYWRpbmcgYnVuZGxlLiBJZiB5b3Ugd2FudCB0byBsb2cgc29tZXRoaW5nIGZyb20geW91clxuICogUmVhY3QgY29tcG9uZW50IHlvdSBzaG91bGQgdXNlIFBlcmZvcm1hbmNlTG9nZ2VyQ29udGV4dCBpbnN0ZWFkLlxuICovXG5jb25zdCBHbG9iYWxQZXJmb3JtYW5jZUxvZ2dlcjogSVBlcmZvcm1hbmNlTG9nZ2VyID0gY3JlYXRlUGVyZm9ybWFuY2VMb2dnZXIoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBHbG9iYWxQZXJmb3JtYW5jZUxvZ2dlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEV4dHJhcyxcbiAgRXh0cmFWYWx1ZSxcbiAgSVBlcmZvcm1hbmNlTG9nZ2VyLFxuICBUaW1lc3Bhbixcbn0gZnJvbSAnLi9JUGVyZm9ybWFuY2VMb2dnZXInO1xuXG5pbXBvcnQgKiBhcyBTeXN0cmFjZSBmcm9tICcuLi9QZXJmb3JtYW5jZS9TeXN0cmFjZSc7XG5pbXBvcnQgaW5mb0xvZyBmcm9tICcuL2luZm9Mb2cnO1xuXG5jb25zdCBfY29va2llczoge1trZXk6IHN0cmluZ106IG51bWJlciwgLi4ufSA9IHt9O1xuXG5jb25zdCBQUklOVF9UT19DT05TT0xFOiBmYWxzZSA9IGZhbHNlOyAvLyBUeXBlIGFzIGZhbHNlIHRvIHByZXZlbnQgYWNjaWRlbnRhbGx5IGNvbW1pdHRpbmcgYHRydWVgO1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFRpbWVzdGFtcDogKCkgPT4gbnVtYmVyID1cbiAgZ2xvYmFsLm5hdGl2ZVFQTFRpbWVzdGFtcCA/PyAoKCkgPT4gZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpKTtcblxuY2xhc3MgUGVyZm9ybWFuY2VMb2dnZXIgaW1wbGVtZW50cyBJUGVyZm9ybWFuY2VMb2dnZXIge1xuICBfdGltZXNwYW5zOiB7W2tleTogc3RyaW5nXTogP1RpbWVzcGFufSA9IHt9O1xuICBfZXh0cmFzOiB7W2tleTogc3RyaW5nXTogP0V4dHJhVmFsdWV9ID0ge307XG4gIF9wb2ludHM6IHtba2V5OiBzdHJpbmddOiA/bnVtYmVyfSA9IHt9O1xuICBfcG9pbnRFeHRyYXM6IHtba2V5OiBzdHJpbmddOiA/RXh0cmFzLCAuLi59ID0ge307XG4gIF9jbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBhZGRUaW1lc3BhbihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBzdGFydFRpbWU6IG51bWJlcixcbiAgICBlbmRUaW1lOiBudW1iZXIsXG4gICAgc3RhcnRFeHRyYXM/OiBFeHRyYXMsXG4gICAgZW5kRXh0cmFzPzogRXh0cmFzLFxuICApIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICBpZiAoUFJJTlRfVE9fQ09OU09MRSAmJiBfX0RFVl9fKSB7XG4gICAgICAgIGluZm9Mb2coJ1BlcmZvcm1hbmNlTG9nZ2VyOiBhZGRUaW1lc3BhbiAtIGhhcyBjbG9zZWQgaWdub3Jpbmc6ICcsIGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl90aW1lc3BhbnNba2V5XSkge1xuICAgICAgaWYgKFBSSU5UX1RPX0NPTlNPTEUgJiYgX19ERVZfXykge1xuICAgICAgICBpbmZvTG9nKFxuICAgICAgICAgICdQZXJmb3JtYW5jZUxvZ2dlcjogQXR0ZW1wdGluZyB0byBhZGQgYSB0aW1lc3BhbiB0aGF0IGFscmVhZHkgZXhpc3RzICcsXG4gICAgICAgICAga2V5LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RpbWVzcGFuc1trZXldID0ge1xuICAgICAgc3RhcnRUaW1lLFxuICAgICAgZW5kVGltZSxcbiAgICAgIHRvdGFsVGltZTogZW5kVGltZSAtIChzdGFydFRpbWUgfHwgMCksXG4gICAgICBzdGFydEV4dHJhcyxcbiAgICAgIGVuZEV4dHJhcyxcbiAgICB9O1xuICB9XG5cbiAgYXBwZW5kKHBlcmZvcm1hbmNlTG9nZ2VyOiBJUGVyZm9ybWFuY2VMb2dnZXIpIHtcbiAgICB0aGlzLl90aW1lc3BhbnMgPSB7XG4gICAgICAuLi5wZXJmb3JtYW5jZUxvZ2dlci5nZXRUaW1lc3BhbnMoKSxcbiAgICAgIC4uLnRoaXMuX3RpbWVzcGFucyxcbiAgICB9O1xuICAgIHRoaXMuX2V4dHJhcyA9IHsuLi5wZXJmb3JtYW5jZUxvZ2dlci5nZXRFeHRyYXMoKSwgLi4udGhpcy5fZXh0cmFzfTtcbiAgICB0aGlzLl9wb2ludHMgPSB7Li4ucGVyZm9ybWFuY2VMb2dnZXIuZ2V0UG9pbnRzKCksIC4uLnRoaXMuX3BvaW50c307XG4gICAgdGhpcy5fcG9pbnRFeHRyYXMgPSB7XG4gICAgICAuLi5wZXJmb3JtYW5jZUxvZ2dlci5nZXRQb2ludEV4dHJhcygpLFxuICAgICAgLi4udGhpcy5fcG9pbnRFeHRyYXMsXG4gICAgfTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX3RpbWVzcGFucyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhcyA9IHt9O1xuICAgIHRoaXMuX3BvaW50cyA9IHt9O1xuICAgIGlmIChQUklOVF9UT19DT05TT0xFKSB7XG4gICAgICBpbmZvTG9nKCdQZXJmb3JtYW5jZUxvZ2dlci5qcycsICdjbGVhcicpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29tcGxldGVkKCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3RpbWVzcGFucykge1xuICAgICAgaWYgKHRoaXMuX3RpbWVzcGFuc1trZXldPy50b3RhbFRpbWUgIT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fdGltZXNwYW5zW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2V4dHJhcyA9IHt9O1xuICAgIHRoaXMuX3BvaW50cyA9IHt9O1xuICAgIGlmIChQUklOVF9UT19DT05TT0xFKSB7XG4gICAgICBpbmZvTG9nKCdQZXJmb3JtYW5jZUxvZ2dlci5qcycsICdjbGVhckNvbXBsZXRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gIH1cblxuICBjdXJyZW50VGltZXN0YW1wKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRUaW1lc3RhbXAoKTtcbiAgfVxuXG4gIGdldEV4dHJhcygpOiB7W2tleTogc3RyaW5nXTogP0V4dHJhVmFsdWV9IHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFzO1xuICB9XG5cbiAgZ2V0UG9pbnRzKCk6IHtba2V5OiBzdHJpbmddOiA/bnVtYmVyfSB7XG4gICAgcmV0dXJuIHRoaXMuX3BvaW50cztcbiAgfVxuXG4gIGdldFBvaW50RXh0cmFzKCk6IHtba2V5OiBzdHJpbmddOiA/RXh0cmFzfSB7XG4gICAgcmV0dXJuIHRoaXMuX3BvaW50RXh0cmFzO1xuICB9XG5cbiAgZ2V0VGltZXNwYW5zKCk6IHtba2V5OiBzdHJpbmddOiA/VGltZXNwYW59IHtcbiAgICByZXR1cm4gdGhpcy5fdGltZXNwYW5zO1xuICB9XG5cbiAgaGFzVGltZXNwYW4oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl90aW1lc3BhbnNba2V5XTtcbiAgfVxuXG4gIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbG9zZWQ7XG4gIH1cblxuICBsb2dFdmVyeXRoaW5nKCkge1xuICAgIGlmIChQUklOVF9UT19DT05TT0xFKSB7XG4gICAgICAvLyBsb2cgdGltZXNwYW5zXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl90aW1lc3BhbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVzcGFuc1trZXldPy50b3RhbFRpbWUgIT0gbnVsbCkge1xuICAgICAgICAgIGluZm9Mb2coa2V5ICsgJzogJyArIHRoaXMuX3RpbWVzcGFuc1trZXldLnRvdGFsVGltZSArICdtcycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGxvZyBleHRyYXNcbiAgICAgIGluZm9Mb2codGhpcy5fZXh0cmFzKTtcblxuICAgICAgLy8gbG9nIHBvaW50c1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fcG9pbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb2ludHNba2V5XSAhPSBudWxsKSB7XG4gICAgICAgICAgaW5mb0xvZyhrZXkgKyAnOiAnICsgdGhpcy5fcG9pbnRzW2tleV0gKyAnbXMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtQb2ludChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB0aW1lc3RhbXA/OiBudW1iZXIgPSBnZXRDdXJyZW50VGltZXN0YW1wKCksXG4gICAgZXh0cmFzPzogRXh0cmFzLFxuICApIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICBpZiAoUFJJTlRfVE9fQ09OU09MRSAmJiBfX0RFVl9fKSB7XG4gICAgICAgIGluZm9Mb2coJ1BlcmZvcm1hbmNlTG9nZ2VyOiBtYXJrUG9pbnQgLSBoYXMgY2xvc2VkIGlnbm9yaW5nOiAnLCBrZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcG9pbnRzW2tleV0gIT0gbnVsbCkge1xuICAgICAgaWYgKFBSSU5UX1RPX0NPTlNPTEUgJiYgX19ERVZfXykge1xuICAgICAgICBpbmZvTG9nKFxuICAgICAgICAgICdQZXJmb3JtYW5jZUxvZ2dlcjogQXR0ZW1wdGluZyB0byBtYXJrIGEgcG9pbnQgdGhhdCBoYXMgYmVlbiBhbHJlYWR5IGxvZ2dlZCAnLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcG9pbnRzW2tleV0gPSB0aW1lc3RhbXA7XG4gICAgaWYgKGV4dHJhcykge1xuICAgICAgdGhpcy5fcG9pbnRFeHRyYXNba2V5XSA9IGV4dHJhcztcbiAgICB9XG4gIH1cblxuICByZW1vdmVFeHRyYShrZXk6IHN0cmluZyk6ID9FeHRyYVZhbHVlIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2V4dHJhc1trZXldO1xuICAgIGRlbGV0ZSB0aGlzLl9leHRyYXNba2V5XTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRFeHRyYShrZXk6IHN0cmluZywgdmFsdWU6IEV4dHJhVmFsdWUpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICBpZiAoUFJJTlRfVE9fQ09OU09MRSAmJiBfX0RFVl9fKSB7XG4gICAgICAgIGluZm9Mb2coJ1BlcmZvcm1hbmNlTG9nZ2VyOiBzZXRFeHRyYSAtIGhhcyBjbG9zZWQgaWdub3Jpbmc6ICcsIGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V4dHJhcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBpZiAoUFJJTlRfVE9fQ09OU09MRSAmJiBfX0RFVl9fKSB7XG4gICAgICAgIGluZm9Mb2coXG4gICAgICAgICAgJ1BlcmZvcm1hbmNlTG9nZ2VyOiBBdHRlbXB0aW5nIHRvIHNldCBhbiBleHRyYSB0aGF0IGFscmVhZHkgZXhpc3RzICcsXG4gICAgICAgICAge2tleSwgY3VycmVudFZhbHVlOiB0aGlzLl9leHRyYXNba2V5XSwgYXR0ZW1wdGVkVmFsdWU6IHZhbHVlfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZXh0cmFzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHN0YXJ0VGltZXNwYW4oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdGltZXN0YW1wPzogbnVtYmVyID0gZ2V0Q3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGV4dHJhcz86IEV4dHJhcyxcbiAgKSB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgaWYgKFBSSU5UX1RPX0NPTlNPTEUgJiYgX19ERVZfXykge1xuICAgICAgICBpbmZvTG9nKFxuICAgICAgICAgICdQZXJmb3JtYW5jZUxvZ2dlcjogc3RhcnRUaW1lc3BhbiAtIGhhcyBjbG9zZWQgaWdub3Jpbmc6ICcsXG4gICAgICAgICAga2V5LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90aW1lc3BhbnNba2V5XSkge1xuICAgICAgaWYgKFBSSU5UX1RPX0NPTlNPTEUgJiYgX19ERVZfXykge1xuICAgICAgICBpbmZvTG9nKFxuICAgICAgICAgICdQZXJmb3JtYW5jZUxvZ2dlcjogQXR0ZW1wdGluZyB0byBzdGFydCBhIHRpbWVzcGFuIHRoYXQgYWxyZWFkeSBleGlzdHMgJyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGltZXNwYW5zW2tleV0gPSB7XG4gICAgICBzdGFydFRpbWU6IHRpbWVzdGFtcCxcbiAgICAgIHN0YXJ0RXh0cmFzOiBleHRyYXMsXG4gICAgfTtcbiAgICBfY29va2llc1trZXldID0gU3lzdHJhY2UuYmVnaW5Bc3luY0V2ZW50KGtleSk7XG4gICAgaWYgKFBSSU5UX1RPX0NPTlNPTEUpIHtcbiAgICAgIGluZm9Mb2coJ1BlcmZvcm1hbmNlTG9nZ2VyLmpzJywgJ3N0YXJ0OiAnICsga2V5KTtcbiAgICB9XG4gIH1cblxuICBzdG9wVGltZXNwYW4oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdGltZXN0YW1wPzogbnVtYmVyID0gZ2V0Q3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGV4dHJhcz86IEV4dHJhcyxcbiAgKSB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgaWYgKFBSSU5UX1RPX0NPTlNPTEUgJiYgX19ERVZfXykge1xuICAgICAgICBpbmZvTG9nKCdQZXJmb3JtYW5jZUxvZ2dlcjogc3RvcFRpbWVzcGFuIC0gaGFzIGNsb3NlZCBpZ25vcmluZzogJywga2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lc3BhbiA9IHRoaXMuX3RpbWVzcGFuc1trZXldO1xuICAgIGlmICghdGltZXNwYW4gfHwgdGltZXNwYW4uc3RhcnRUaW1lID09IG51bGwpIHtcbiAgICAgIGlmIChQUklOVF9UT19DT05TT0xFICYmIF9fREVWX18pIHtcbiAgICAgICAgaW5mb0xvZyhcbiAgICAgICAgICAnUGVyZm9ybWFuY2VMb2dnZXI6IEF0dGVtcHRpbmcgdG8gZW5kIGEgdGltZXNwYW4gdGhhdCBoYXMgbm90IHN0YXJ0ZWQgJyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aW1lc3Bhbi5lbmRUaW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChQUklOVF9UT19DT05TT0xFICYmIF9fREVWX18pIHtcbiAgICAgICAgaW5mb0xvZyhcbiAgICAgICAgICAnUGVyZm9ybWFuY2VMb2dnZXI6IEF0dGVtcHRpbmcgdG8gZW5kIGEgdGltZXNwYW4gdGhhdCBoYXMgYWxyZWFkeSBlbmRlZCAnLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aW1lc3Bhbi5lbmRFeHRyYXMgPSBleHRyYXM7XG4gICAgdGltZXNwYW4uZW5kVGltZSA9IHRpbWVzdGFtcDtcbiAgICB0aW1lc3Bhbi50b3RhbFRpbWUgPSB0aW1lc3Bhbi5lbmRUaW1lIC0gKHRpbWVzcGFuLnN0YXJ0VGltZSB8fCAwKTtcbiAgICBpZiAoUFJJTlRfVE9fQ09OU09MRSkge1xuICAgICAgaW5mb0xvZygnUGVyZm9ybWFuY2VMb2dnZXIuanMnLCAnZW5kOiAnICsga2V5KTtcbiAgICB9XG5cbiAgICBpZiAoX2Nvb2tpZXNba2V5XSAhPSBudWxsKSB7XG4gICAgICBTeXN0cmFjZS5lbmRBc3luY0V2ZW50KGtleSwgX2Nvb2tpZXNba2V5XSk7XG4gICAgICBkZWxldGUgX2Nvb2tpZXNba2V5XTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUmUtZXhwb3J0aW5nIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGFsbCB0aGUgY2xpZW50cyB0aGF0XG4vLyBtYXkgc3RpbGwgaW1wb3J0IGl0IGZyb20gdGhpcyBtb2R1bGUuXG5leHBvcnQgdHlwZSB7RXh0cmFzLCBFeHRyYVZhbHVlLCBJUGVyZm9ybWFuY2VMb2dnZXIsIFRpbWVzcGFufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgcGVyZm9ybWFuY2UgbG9nZ2VycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbGxlY3QgYW5kIGxvZ1xuICogdmFyaW91cyBwZXJmb3JtYW5jZSBkYXRhIHN1Y2ggYXMgdGltZXNwYW5zLCBwb2ludHMgYW5kIGV4dHJhcy5cbiAqIFRoZSBsb2dnZXJzIG5lZWQgdG8gaGF2ZSBtaW5pbWFsIG92ZXJoZWFkIHNpbmNlIHRoZXkncmUgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVQZXJmb3JtYW5jZUxvZ2dlcigpOiBJUGVyZm9ybWFuY2VMb2dnZXIge1xuICByZXR1cm4gbmV3IFBlcmZvcm1hbmNlTG9nZ2VyKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEludGVudGlvbmFsIGluZm8tbGV2ZWwgbG9nZ2luZyBmb3IgY2xlYXIgc2VwYXJhdGlvbiBmcm9tIGFkLWhvYyBjb25zb2xlIGRlYnVnIGxvZ2dpbmcuXG4gKi9cbmZ1bmN0aW9uIGluZm9Mb2coLi4uYXJnczogQXJyYXk8bWl4ZWQ+KTogdm9pZCB7XG4gIHJldHVybiBjb25zb2xlLmxvZyguLi5hcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmZvTG9nO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgUkNURGV2aWNlRXZlbnRFbWl0dGVyIGZyb20gJy4uL0V2ZW50RW1pdHRlci9SQ1REZXZpY2VFdmVudEVtaXR0ZXInO1xuaW1wb3J0IHt0eXBlIEV2ZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuaW1wb3J0IGNvbnZlcnRSZXF1ZXN0Qm9keSwge3R5cGUgUmVxdWVzdEJvZHl9IGZyb20gJy4vY29udmVydFJlcXVlc3RCb2R5JztcbmltcG9ydCBOYXRpdmVOZXR3b3JraW5nSU9TIGZyb20gJy4vTmF0aXZlTmV0d29ya2luZ0lPUyc7XG5pbXBvcnQge3R5cGUgTmF0aXZlUmVzcG9uc2VUeXBlfSBmcm9tICcuL1hNTEh0dHBSZXF1ZXN0JztcblxudHlwZSBSQ1ROZXR3b3JraW5nRXZlbnREZWZpbml0aW9ucyA9ICRSZWFkT25seTx7XG4gIGRpZFNlbmROZXR3b3JrRGF0YTogW1xuICAgIFtcbiAgICAgIG51bWJlciwgLy8gcmVxdWVzdElkXG4gICAgICBudW1iZXIsIC8vIHByb2dyZXNzXG4gICAgICBudW1iZXIsIC8vIHRvdGFsXG4gICAgXSxcbiAgXSxcbiAgZGlkUmVjZWl2ZU5ldHdvcmtSZXNwb25zZTogW1xuICAgIFtcbiAgICAgIG51bWJlciwgLy8gcmVxdWVzdElkXG4gICAgICBudW1iZXIsIC8vIHN0YXR1c1xuICAgICAgP3tbc3RyaW5nXTogc3RyaW5nfSwgLy8gcmVzcG9uc2VIZWFkZXJzXG4gICAgICA/c3RyaW5nLCAvLyByZXNwb25zZVVSTFxuICAgIF0sXG4gIF0sXG4gIGRpZFJlY2VpdmVOZXR3b3JrRGF0YTogW1xuICAgIFtcbiAgICAgIG51bWJlciwgLy8gcmVxdWVzdElkXG4gICAgICBzdHJpbmcsIC8vIHJlc3BvbnNlXG4gICAgXSxcbiAgXSxcbiAgZGlkUmVjZWl2ZU5ldHdvcmtJbmNyZW1lbnRhbERhdGE6IFtcbiAgICBbXG4gICAgICBudW1iZXIsIC8vIHJlcXVlc3RJZFxuICAgICAgc3RyaW5nLCAvLyByZXNwb25zZVRleHRcbiAgICAgIG51bWJlciwgLy8gcHJvZ3Jlc3NcbiAgICAgIG51bWJlciwgLy8gdG90YWxcbiAgICBdLFxuICBdLFxuICBkaWRSZWNlaXZlTmV0d29ya0RhdGFQcm9ncmVzczogW1xuICAgIFtcbiAgICAgIG51bWJlciwgLy8gcmVxdWVzdElkXG4gICAgICBudW1iZXIsIC8vIGxvYWRlZFxuICAgICAgbnVtYmVyLCAvLyB0b3RhbFxuICAgIF0sXG4gIF0sXG4gIGRpZENvbXBsZXRlTmV0d29ya1Jlc3BvbnNlOiBbXG4gICAgW1xuICAgICAgbnVtYmVyLCAvLyByZXF1ZXN0SWRcbiAgICAgIHN0cmluZywgLy8gZXJyb3JcbiAgICAgIGJvb2xlYW4sIC8vIHRpbWVPdXRFcnJvclxuICAgIF0sXG4gIF0sXG59PjtcblxuY29uc3QgUkNUTmV0d29ya2luZyA9IHtcbiAgYWRkTGlzdGVuZXI8SzogJEtleXM8UkNUTmV0d29ya2luZ0V2ZW50RGVmaW5pdGlvbnM+PihcbiAgICBldmVudFR5cGU6IEssXG4gICAgbGlzdGVuZXI6ICguLi4kRWxlbWVudFR5cGU8UkNUTmV0d29ya2luZ0V2ZW50RGVmaW5pdGlvbnMsIEs+KSA9PiBtaXhlZCxcbiAgICBjb250ZXh0PzogbWl4ZWQsXG4gICk6IEV2ZW50U3Vic2NyaXB0aW9uIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgIHJldHVybiBSQ1REZXZpY2VFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgY29udGV4dCk7XG4gIH0sXG5cbiAgc2VuZFJlcXVlc3QoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdHJhY2tpbmdOYW1lOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaGVhZGVyczogey4uLn0sXG4gICAgZGF0YTogUmVxdWVzdEJvZHksXG4gICAgcmVzcG9uc2VUeXBlOiBOYXRpdmVSZXNwb25zZVR5cGUsXG4gICAgaW5jcmVtZW50YWxVcGRhdGVzOiBib29sZWFuLFxuICAgIHRpbWVvdXQ6IG51bWJlcixcbiAgICBjYWxsYmFjazogKHJlcXVlc3RJZDogbnVtYmVyKSA9PiB2b2lkLFxuICAgIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbixcbiAgKSB7XG4gICAgY29uc3QgYm9keSA9IGNvbnZlcnRSZXF1ZXN0Qm9keShkYXRhKTtcbiAgICBOYXRpdmVOZXR3b3JraW5nSU9TLnNlbmRSZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YTogey4uLmJvZHksIHRyYWNraW5nTmFtZX0sXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgICAgaW5jcmVtZW50YWxVcGRhdGVzLFxuICAgICAgICB0aW1lb3V0LFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2ssXG4gICAgKTtcbiAgfSxcblxuICBhYm9ydFJlcXVlc3QocmVxdWVzdElkOiBudW1iZXIpIHtcbiAgICBOYXRpdmVOZXR3b3JraW5nSU9TLmFib3J0UmVxdWVzdChyZXF1ZXN0SWQpO1xuICB9LFxuXG4gIGNsZWFyQ29va2llcyhjYWxsYmFjazogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZCkge1xuICAgIE5hdGl2ZU5ldHdvcmtpbmdJT1MuY2xlYXJDb29raWVzKGNhbGxiYWNrKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJDVE5ldHdvcmtpbmc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IEJsb2IgPSByZXF1aXJlKCcuLi9CbG9iL0Jsb2InKTtcbmNvbnN0IGJpbmFyeVRvQmFzZTY0ID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL2JpbmFyeVRvQmFzZTY0Jyk7XG5jb25zdCBGb3JtRGF0YSA9IHJlcXVpcmUoJy4vRm9ybURhdGEnKTtcblxuZXhwb3J0IHR5cGUgUmVxdWVzdEJvZHkgPVxuICB8IHN0cmluZ1xuICB8IEJsb2JcbiAgfCBGb3JtRGF0YVxuICB8IHt1cmk6IHN0cmluZywgLi4ufVxuICB8IEFycmF5QnVmZmVyXG4gIHwgJEFycmF5QnVmZmVyVmlldztcblxuZnVuY3Rpb24gY29udmVydFJlcXVlc3RCb2R5KGJvZHk6IFJlcXVlc3RCb2R5KTogT2JqZWN0IHtcbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7c3RyaW5nOiBib2R5fTtcbiAgfVxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICByZXR1cm4ge2Jsb2I6IGJvZHkuZGF0YX07XG4gIH1cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgIHJldHVybiB7Zm9ybURhdGE6IGJvZHkuZ2V0UGFydHMoKX07XG4gIH1cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSA6IG5vIHdheSB0byBhc3NlcnQgdGhhdCAnYm9keScgaXMgaW5kZWVkXG4gICAgICogYW4gQXJyYXlCdWZmZXJWaWV3ICovXG4gICAgcmV0dXJuIHtiYXNlNjQ6IGJpbmFyeVRvQmFzZTY0KGJvZHkpfTtcbiAgfVxuICByZXR1cm4gYm9keTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0UmVxdWVzdEJvZHk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG50eXBlIEZvcm1EYXRhVmFsdWUgPSBzdHJpbmcgfCB7bmFtZT86IHN0cmluZywgdHlwZT86IHN0cmluZywgdXJpOiBzdHJpbmd9O1xudHlwZSBGb3JtRGF0YU5hbWVWYWx1ZVBhaXIgPSBbc3RyaW5nLCBGb3JtRGF0YVZhbHVlXTtcblxudHlwZSBIZWFkZXJzID0ge1tuYW1lOiBzdHJpbmddOiBzdHJpbmcsIC4uLn07XG50eXBlIEZvcm1EYXRhUGFydCA9XG4gIHwge1xuICAgICAgc3RyaW5nOiBzdHJpbmcsXG4gICAgICBoZWFkZXJzOiBIZWFkZXJzLFxuICAgICAgLi4uXG4gICAgfVxuICB8IHtcbiAgICAgIHVyaTogc3RyaW5nLFxuICAgICAgaGVhZGVyczogSGVhZGVycyxcbiAgICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgICB0eXBlPzogc3RyaW5nLFxuICAgICAgLi4uXG4gICAgfTtcblxuLyoqXG4gKiBQb2x5ZmlsbCBmb3IgWE1MSHR0cFJlcXVlc3QyIEZvcm1EYXRhIEFQSSwgYWxsb3dpbmcgbXVsdGlwYXJ0IFBPU1QgcmVxdWVzdHNcbiAqIHdpdGggbWl4ZWQgZGF0YSAoc3RyaW5nLCBuYXRpdmUgZmlsZXMpIHRvIGJlIHN1Ym1pdHRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgIHZhciBwaG90byA9IHtcbiAqICAgICB1cmk6IHVyaUZyb21DYW1lcmFSb2xsLFxuICogICAgIHR5cGU6ICdpbWFnZS9qcGVnJyxcbiAqICAgICBuYW1lOiAncGhvdG8uanBnJyxcbiAqICAgfTtcbiAqXG4gKiAgIHZhciBib2R5ID0gbmV3IEZvcm1EYXRhKCk7XG4gKiAgIGJvZHkuYXBwZW5kKCdhdXRoVG9rZW4nLCAnc2VjcmV0Jyk7XG4gKiAgIGJvZHkuYXBwZW5kKCdwaG90bycsIHBob3RvKTtcbiAqICAgYm9keS5hcHBlbmQoJ3RpdGxlJywgJ0EgYmVhdXRpZnVsIHBob3RvIScpO1xuICpcbiAqICAgeGhyLm9wZW4oJ1BPU1QnLCBzZXJ2ZXJVUkwpO1xuICogICB4aHIuc2VuZChib2R5KTtcbiAqL1xuY2xhc3MgRm9ybURhdGEge1xuICBfcGFydHM6IEFycmF5PEZvcm1EYXRhTmFtZVZhbHVlUGFpcj47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fcGFydHMgPSBbXTtcbiAgfVxuXG4gIGFwcGVuZChrZXk6IHN0cmluZywgdmFsdWU6IEZvcm1EYXRhVmFsdWUpIHtcbiAgICAvLyBUaGUgWE1MSHR0cFJlcXVlc3Qgc3BlYyBkb2Vzbid0IHNwZWNpZnkgaWYgZHVwbGljYXRlIGtleXMgYXJlIGFsbG93ZWQuXG4gICAgLy8gTUROIHNheXMgdGhhdCBhbnkgbmV3IHZhbHVlcyBzaG91bGQgYmUgYXBwZW5kZWQgdG8gZXhpc3RpbmcgdmFsdWVzLlxuICAgIC8vIEluIGFueSBjYXNlLCBtYWpvciBicm93c2VycyBhbGxvdyBkdXBsaWNhdGUga2V5cywgc28gdGhhdCdzIHdoYXQgd2UnbGwgZG9cbiAgICAvLyB0b28uIFRoZXknbGwgc2ltcGx5IGdldCBhcHBlbmRlZCBhcyBhZGRpdGlvbmFsIGZvcm0gZGF0YSBwYXJ0cyBpbiB0aGVcbiAgICAvLyByZXF1ZXN0IGJvZHksIGxlYXZpbmcgdGhlIHNlcnZlciB0byBkZWFsIHdpdGggdGhlbS5cbiAgICB0aGlzLl9wYXJ0cy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH1cblxuICBnZXRBbGwoa2V5OiBzdHJpbmcpOiBBcnJheTxGb3JtRGF0YVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnRzXG4gICAgICAuZmlsdGVyKChbbmFtZV0pID0+IG5hbWUgPT09IGtleSlcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUpO1xuICB9XG5cbiAgZ2V0UGFydHMoKTogQXJyYXk8Rm9ybURhdGFQYXJ0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnRzLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gJ2Zvcm0tZGF0YTsgbmFtZT1cIicgKyBuYW1lICsgJ1wiJztcblxuICAgICAgY29uc3QgaGVhZGVyczogSGVhZGVycyA9IHsnY29udGVudC1kaXNwb3NpdGlvbic6IGNvbnRlbnREaXNwb3NpdGlvbn07XG5cbiAgICAgIC8vIFRoZSBib2R5IHBhcnQgaXMgYSBcImJsb2JcIiwgd2hpY2ggaW4gUmVhY3QgTmF0aXZlIGp1c3QgbWVhbnNcbiAgICAgIC8vIGFuIG9iamVjdCB3aXRoIGEgYHVyaWAgYXR0cmlidXRlLiBPcHRpb25hbGx5LCBpdCBjYW4gYWxzb1xuICAgICAgLy8gaGF2ZSBhIGBuYW1lYCBhbmQgYHR5cGVgIGF0dHJpYnV0ZSB0byBzcGVjaWZ5IGZpbGVuYW1lIGFuZFxuICAgICAgLy8gY29udGVudCB0eXBlIChjZi4gd2ViIEJsb2IgaW50ZXJmYWNlLilcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddICs9IGA7IGZpbGVuYW1lPVwiJHtcbiAgICAgICAgICAgIHZhbHVlLm5hbWVcbiAgICAgICAgICB9XCI7IGZpbGVuYW1lKj11dGYtOCcnJHtlbmNvZGVVUkkodmFsdWUubmFtZSl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSB2YWx1ZS50eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7Li4udmFsdWUsIGhlYWRlcnMsIGZpZWxkTmFtZTogbmFtZX07XG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IG5vbi1vYmplY3QgdmFsdWVzIHRvIHN0cmluZ3MgYXMgcGVyIEZvcm1EYXRhLmFwcGVuZCgpIHNwZWNcbiAgICAgIHJldHVybiB7c3RyaW5nOiBTdHJpbmcodmFsdWUpLCBoZWFkZXJzLCBmaWVsZE5hbWU6IG5hbWV9O1xuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRm9ybURhdGE7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKTtcblxuZnVuY3Rpb24gYmluYXJ5VG9CYXNlNjQoZGF0YTogQXJyYXlCdWZmZXIgfCAkQXJyYXlCdWZmZXJWaWV3KTogc3RyaW5nIHtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIC8vICRGbG93Rml4TWVbcmVhc3NpZ24tY29uc3RdXG4gICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShkYXRhKTtcbiAgfVxuICBpZiAoIUFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBtdXN0IGJlIEFycmF5QnVmZmVyIG9yIHR5cGVkIGFycmF5Jyk7XG4gIH1cbiAgLy8gQWxyZWFkeSBjaGVja2VkIHRoYXQgYGRhdGFgIGlzIGBEYXRhVmlld2AgaW4gYEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKWBcbiAgY29uc3Qge2J1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aH06IERhdGFWaWV3ID0gKGRhdGE6ICRGbG93Rml4TWUpO1xuICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkobmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmluYXJ5VG9CYXNlNjQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVOZXR3b3JraW5nSU9TJztcbmltcG9ydCBOYXRpdmVOZXR3b3JraW5nSU9TIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlTmV0d29ya2luZ0lPUyc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVOZXR3b3JraW5nSU9TO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK3NlbmRSZXF1ZXN0OiAoXG4gICAgcXVlcnk6IHt8XG4gICAgICBtZXRob2Q6IHN0cmluZyxcbiAgICAgIHVybDogc3RyaW5nLFxuICAgICAgZGF0YTogT2JqZWN0LFxuICAgICAgaGVhZGVyczogT2JqZWN0LFxuICAgICAgcmVzcG9uc2VUeXBlOiBzdHJpbmcsXG4gICAgICBpbmNyZW1lbnRhbFVwZGF0ZXM6IGJvb2xlYW4sXG4gICAgICB0aW1lb3V0OiBudW1iZXIsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4sXG4gICAgfH0sXG4gICAgY2FsbGJhY2s6IChyZXF1ZXN0SWQ6IG51bWJlcikgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArYWJvcnRSZXF1ZXN0OiAocmVxdWVzdElkOiBudW1iZXIpID0+IHZvaWQ7XG4gICtjbGVhckNvb2tpZXM6IChjYWxsYmFjazogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZCkgPT4gdm9pZDtcblxuICAvLyBSQ1RFdmVudEVtaXR0ZXJcbiAgK2FkZExpc3RlbmVyOiAoZXZlbnROYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICtyZW1vdmVMaXN0ZW5lcnM6IChjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXRFbmZvcmNpbmc8U3BlYz4oJ05ldHdvcmtpbmcnKTogU3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7QmxvYkRhdGF9IGZyb20gJy4uL0Jsb2IvQmxvYlR5cGVzJztcbmltcG9ydCB0eXBlIHtFdmVudFN1YnNjcmlwdGlvbn0gZnJvbSAnLi4vdmVuZG9yL2VtaXR0ZXIvRXZlbnRFbWl0dGVyJztcblxuaW1wb3J0IEJsb2IgZnJvbSAnLi4vQmxvYi9CbG9iJztcbmltcG9ydCBCbG9iTWFuYWdlciBmcm9tICcuLi9CbG9iL0Jsb2JNYW5hZ2VyJztcbmltcG9ydCBOYXRpdmVFdmVudEVtaXR0ZXIgZnJvbSAnLi4vRXZlbnRFbWl0dGVyL05hdGl2ZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgYmluYXJ5VG9CYXNlNjQgZnJvbSAnLi4vVXRpbGl0aWVzL2JpbmFyeVRvQmFzZTY0JztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IE5hdGl2ZVdlYlNvY2tldE1vZHVsZSBmcm9tICcuL05hdGl2ZVdlYlNvY2tldE1vZHVsZSc7XG5pbXBvcnQgV2ViU29ja2V0RXZlbnQgZnJvbSAnLi9XZWJTb2NrZXRFdmVudCc7XG5pbXBvcnQgYmFzZTY0IGZyb20gJ2Jhc2U2NC1qcyc7XG5pbXBvcnQgRXZlbnRUYXJnZXQgZnJvbSAnZXZlbnQtdGFyZ2V0LXNoaW0nO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG50eXBlIEFycmF5QnVmZmVyVmlldyA9XG4gIHwgSW50OEFycmF5XG4gIHwgVWludDhBcnJheVxuICB8IFVpbnQ4Q2xhbXBlZEFycmF5XG4gIHwgSW50MTZBcnJheVxuICB8IFVpbnQxNkFycmF5XG4gIHwgSW50MzJBcnJheVxuICB8IFVpbnQzMkFycmF5XG4gIHwgRmxvYXQzMkFycmF5XG4gIHwgRmxvYXQ2NEFycmF5XG4gIHwgRGF0YVZpZXc7XG5cbnR5cGUgQmluYXJ5VHlwZSA9ICdibG9iJyB8ICdhcnJheWJ1ZmZlcic7XG5cbmNvbnN0IENPTk5FQ1RJTkcgPSAwO1xuY29uc3QgT1BFTiA9IDE7XG5jb25zdCBDTE9TSU5HID0gMjtcbmNvbnN0IENMT1NFRCA9IDM7XG5cbmNvbnN0IENMT1NFX05PUk1BTCA9IDEwMDA7XG5cbi8vIEFibm9ybWFsIGNsb3N1cmUgd2hlcmUgbm8gY29kZSBpcyBwcm92aWRlZCBpbiBhIGNvbnRyb2wgZnJhbWVcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjEuNVxuY29uc3QgQ0xPU0VfQUJOT1JNQUwgPSAxMDA2O1xuXG5jb25zdCBXRUJTT0NLRVRfRVZFTlRTID0gWydjbG9zZScsICdlcnJvcicsICdtZXNzYWdlJywgJ29wZW4nXTtcblxubGV0IG5leHRXZWJTb2NrZXRJZCA9IDA7XG5cbnR5cGUgV2ViU29ja2V0RXZlbnREZWZpbml0aW9ucyA9IHtcbiAgd2Vic29ja2V0T3BlbjogW3tpZDogbnVtYmVyLCBwcm90b2NvbDogc3RyaW5nfV0sXG4gIHdlYnNvY2tldENsb3NlZDogW3tpZDogbnVtYmVyLCBjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nfV0sXG4gIHdlYnNvY2tldE1lc3NhZ2U6IFtcbiAgICB8IHt0eXBlOiAnYmluYXJ5JywgaWQ6IG51bWJlciwgZGF0YTogc3RyaW5nfVxuICAgIHwge3R5cGU6ICd0ZXh0JywgaWQ6IG51bWJlciwgZGF0YTogc3RyaW5nfVxuICAgIHwge3R5cGU6ICdibG9iJywgaWQ6IG51bWJlciwgZGF0YTogQmxvYkRhdGF9LFxuICBdLFxuICB3ZWJzb2NrZXRGYWlsZWQ6IFt7aWQ6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nfV0sXG59O1xuXG4vKipcbiAqIEJyb3dzZXItY29tcGF0aWJsZSBXZWJTb2NrZXRzIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViU29ja2V0XG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3NcbiAqL1xuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgKEV2ZW50VGFyZ2V0KC4uLldFQlNPQ0tFVF9FVkVOVFMpOiBhbnkpIHtcbiAgc3RhdGljIENPTk5FQ1RJTkc6IG51bWJlciA9IENPTk5FQ1RJTkc7XG4gIHN0YXRpYyBPUEVOOiBudW1iZXIgPSBPUEVOO1xuICBzdGF0aWMgQ0xPU0lORzogbnVtYmVyID0gQ0xPU0lORztcbiAgc3RhdGljIENMT1NFRDogbnVtYmVyID0gQ0xPU0VEO1xuXG4gIENPTk5FQ1RJTkc6IG51bWJlciA9IENPTk5FQ1RJTkc7XG4gIE9QRU46IG51bWJlciA9IE9QRU47XG4gIENMT1NJTkc6IG51bWJlciA9IENMT1NJTkc7XG4gIENMT1NFRDogbnVtYmVyID0gQ0xPU0VEO1xuXG4gIF9zb2NrZXRJZDogbnVtYmVyO1xuICBfZXZlbnRFbWl0dGVyOiBOYXRpdmVFdmVudEVtaXR0ZXI8V2ViU29ja2V0RXZlbnREZWZpbml0aW9ucz47XG4gIF9zdWJzY3JpcHRpb25zOiBBcnJheTxFdmVudFN1YnNjcmlwdGlvbj47XG4gIF9iaW5hcnlUeXBlOiA/QmluYXJ5VHlwZTtcblxuICBvbmNsb3NlOiA/RnVuY3Rpb247XG4gIG9uZXJyb3I6ID9GdW5jdGlvbjtcbiAgb25tZXNzYWdlOiA/RnVuY3Rpb247XG4gIG9ub3BlbjogP0Z1bmN0aW9uO1xuXG4gIGJ1ZmZlcmVkQW1vdW50OiBudW1iZXI7XG4gIGV4dGVuc2lvbjogP3N0cmluZztcbiAgcHJvdG9jb2w6ID9zdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlciA9IENPTk5FQ1RJTkc7XG4gIHVybDogP3N0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwcm90b2NvbHM6ID9zdHJpbmcgfCA/QXJyYXk8c3RyaW5nPixcbiAgICBvcHRpb25zOiA/e2hlYWRlcnM/OiB7b3JpZ2luPzogc3RyaW5nLCAuLi59LCAuLi59LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIGlmICh0eXBlb2YgcHJvdG9jb2xzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvdG9jb2xzID0gW3Byb3RvY29sc107XG4gICAgfVxuXG4gICAgY29uc3Qge2hlYWRlcnMgPSB7fSwgLi4udW5yZWNvZ25pemVkfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBQcmVzZXJ2ZSBkZXByZWNhdGVkIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciB0aGUgJ29yaWdpbicgb3B0aW9uXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgaWYgKHVucmVjb2duaXplZCAmJiB0eXBlb2YgdW5yZWNvZ25pemVkLm9yaWdpbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NwZWNpZnlpbmcgYG9yaWdpbmAgYXMgYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBvcHRpb24gaXMgZGVwcmVjYXRlZC4gSW5jbHVkZSBpdCB1bmRlciBgaGVhZGVyc2AgaW5zdGVhZC4nLFxuICAgICAgKTtcbiAgICAgIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSAoPj0wLjU0LjAgc2l0ZT1yZWFjdF9uYXRpdmVfZmIscmVhY3RfbmF0aXZlX1xuICAgICAgICogb3NzKSBUaGlzIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuNTQgd2FzXG4gICAgICAgKiBkZXBsb3llZC4gVG8gc2VlIHRoZSBlcnJvciBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICAgIGhlYWRlcnMub3JpZ2luID0gdW5yZWNvZ25pemVkLm9yaWdpbjtcbiAgICAgIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSAoPj0wLjU0LjAgc2l0ZT1yZWFjdF9uYXRpdmVfZmIscmVhY3RfbmF0aXZlX1xuICAgICAgICogb3NzKSBUaGlzIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuNTQgd2FzXG4gICAgICAgKiBkZXBsb3llZC4gVG8gc2VlIHRoZSBlcnJvciBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICAgIGRlbGV0ZSB1bnJlY29nbml6ZWQub3JpZ2luO1xuICAgIH1cblxuICAgIC8vIFdhcm4gYWJvdXQgYW5kIGRpc2NhcmQgYW55dGhpbmcgZWxzZVxuICAgIGlmIChPYmplY3Qua2V5cyh1bnJlY29nbml6ZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1VucmVjb2duaXplZCBXZWJTb2NrZXQgY29ubmVjdGlvbiBvcHRpb24ocykgYCcgK1xuICAgICAgICAgIE9iamVjdC5rZXlzKHVucmVjb2duaXplZCkuam9pbignYCwgYCcpICtcbiAgICAgICAgICAnYC4gJyArXG4gICAgICAgICAgJ0RpZCB5b3UgbWVhbiB0byBwdXQgdGhlc2UgdW5kZXIgYGhlYWRlcnNgPycsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm90b2NvbHMpKSB7XG4gICAgICBwcm90b2NvbHMgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2V2ZW50RW1pdHRlciA9IG5ldyBOYXRpdmVFdmVudEVtaXR0ZXIoXG4gICAgICAvLyBUODg3MTUwNjM6IE5hdGl2ZUV2ZW50RW1pdHRlciBvbmx5IHVzZWQgdGhpcyBwYXJhbWV0ZXIgb24gaU9TLiBOb3cgaXQgdXNlcyBpdCBvbiBhbGwgcGxhdGZvcm1zLCBzbyB0aGlzIGNvZGUgd2FzIG1vZGlmaWVkIGF1dG9tYXRpY2FsbHkgdG8gcHJlc2VydmUgaXRzIGJlaGF2aW9yXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG5hdGl2ZSBtb2R1bGUgb24gb3RoZXIgcGxhdGZvcm1zLCBwbGVhc2UgcmVtb3ZlIHRoaXMgY29uZGl0aW9uIGFuZCB0ZXN0IGl0cyBiZWhhdmlvclxuICAgICAgUGxhdGZvcm0uT1MgIT09ICdpb3MnID8gbnVsbCA6IE5hdGl2ZVdlYlNvY2tldE1vZHVsZSxcbiAgICApO1xuICAgIHRoaXMuX3NvY2tldElkID0gbmV4dFdlYlNvY2tldElkKys7XG4gICAgdGhpcy5fcmVnaXN0ZXJFdmVudHMoKTtcbiAgICBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuY29ubmVjdCh1cmwsIHByb3RvY29scywge2hlYWRlcnN9LCB0aGlzLl9zb2NrZXRJZCk7XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSgpOiA/QmluYXJ5VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpbmFyeVR5cGU7XG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZShiaW5hcnlUeXBlOiBCaW5hcnlUeXBlKTogdm9pZCB7XG4gICAgaWYgKGJpbmFyeVR5cGUgIT09ICdibG9iJyAmJiBiaW5hcnlUeXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiaW5hcnlUeXBlIG11c3QgYmUgZWl0aGVyICdibG9iJyBvciAnYXJyYXlidWZmZXInXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYmluYXJ5VHlwZSA9PT0gJ2Jsb2InIHx8IGJpbmFyeVR5cGUgPT09ICdibG9iJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBCbG9iTWFuYWdlci5pc0F2YWlsYWJsZSxcbiAgICAgICAgJ05hdGl2ZSBtb2R1bGUgQmxvYk1vZHVsZSBpcyByZXF1aXJlZCBmb3IgYmxvYiBzdXBwb3J0JyxcbiAgICAgICk7XG4gICAgICBpZiAoYmluYXJ5VHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICAgIEJsb2JNYW5hZ2VyLmFkZFdlYlNvY2tldEhhbmRsZXIodGhpcy5fc29ja2V0SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQmxvYk1hbmFnZXIucmVtb3ZlV2ViU29ja2V0SGFuZGxlcih0aGlzLl9zb2NrZXRJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2JpbmFyeVR5cGUgPSBiaW5hcnlUeXBlO1xuICB9XG5cbiAgY2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5DTE9TSU5HIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5DTE9TRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWR5U3RhdGUgPSB0aGlzLkNMT1NJTkc7XG4gICAgdGhpcy5fY2xvc2UoY29kZSwgcmVhc29uKTtcbiAgfVxuXG4gIHNlbmQoZGF0YTogc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBcnJheUJ1ZmZlclZpZXcgfCBCbG9iKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5DT05ORUNUSU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lOVkFMSURfU1RBVEVfRVJSJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIEJsb2JNYW5hZ2VyLmlzQXZhaWxhYmxlLFxuICAgICAgICAnTmF0aXZlIG1vZHVsZSBCbG9iTW9kdWxlIGlzIHJlcXVpcmVkIGZvciBibG9iIHN1cHBvcnQnLFxuICAgICAgKTtcbiAgICAgIEJsb2JNYW5hZ2VyLnNlbmRPdmVyU29ja2V0KGRhdGEsIHRoaXMuX3NvY2tldElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuc2VuZChkYXRhLCB0aGlzLl9zb2NrZXRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgIE5hdGl2ZVdlYlNvY2tldE1vZHVsZS5zZW5kQmluYXJ5KGJpbmFyeVRvQmFzZTY0KGRhdGEpLCB0aGlzLl9zb2NrZXRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhIHR5cGUnKTtcbiAgfVxuXG4gIHBpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5DT05ORUNUSU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lOVkFMSURfU1RBVEVfRVJSJyk7XG4gICAgfVxuXG4gICAgTmF0aXZlV2ViU29ja2V0TW9kdWxlLnBpbmcodGhpcy5fc29ja2V0SWQpO1xuICB9XG5cbiAgX2Nsb3NlKGNvZGU/OiBudW1iZXIsIHJlYXNvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2xvc2VFdmVudFxuICAgIGNvbnN0IHN0YXR1c0NvZGUgPSB0eXBlb2YgY29kZSA9PT0gJ251bWJlcicgPyBjb2RlIDogQ0xPU0VfTk9STUFMO1xuICAgIGNvbnN0IGNsb3NlUmVhc29uID0gdHlwZW9mIHJlYXNvbiA9PT0gJ3N0cmluZycgPyByZWFzb24gOiAnJztcbiAgICBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuY2xvc2Uoc3RhdHVzQ29kZSwgY2xvc2VSZWFzb24sIHRoaXMuX3NvY2tldElkKTtcblxuICAgIGlmIChCbG9iTWFuYWdlci5pc0F2YWlsYWJsZSAmJiB0aGlzLl9iaW5hcnlUeXBlID09PSAnYmxvYicpIHtcbiAgICAgIEJsb2JNYW5hZ2VyLnJlbW92ZVdlYlNvY2tldEhhbmRsZXIodGhpcy5fc29ja2V0SWQpO1xuICAgIH1cbiAgfVxuXG4gIF91bnJlZ2lzdGVyRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChlID0+IGUucmVtb3ZlKCkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcbiAgfVxuXG4gIF9yZWdpc3RlckV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gW1xuICAgICAgdGhpcy5fZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKCd3ZWJzb2NrZXRNZXNzYWdlJywgZXYgPT4ge1xuICAgICAgICBpZiAoZXYuaWQgIT09IHRoaXMuX3NvY2tldElkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhOiBCbG9iIHwgQmxvYkRhdGEgfCBBcnJheUJ1ZmZlciB8IHN0cmluZyA9IGV2LmRhdGE7XG4gICAgICAgIHN3aXRjaCAoZXYudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgICAgICBkYXRhID0gYmFzZTY0LnRvQnl0ZUFycmF5KGV2LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Jsb2InOlxuICAgICAgICAgICAgZGF0YSA9IEJsb2JNYW5hZ2VyLmNyZWF0ZUZyb21PcHRpb25zKGV2LmRhdGEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBXZWJTb2NrZXRFdmVudCgnbWVzc2FnZScsIHtkYXRhfSkpO1xuICAgICAgfSksXG4gICAgICB0aGlzLl9ldmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoJ3dlYnNvY2tldE9wZW4nLCBldiA9PiB7XG4gICAgICAgIGlmIChldi5pZCAhPT0gdGhpcy5fc29ja2V0SWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gdGhpcy5PUEVOO1xuICAgICAgICB0aGlzLnByb3RvY29sID0gZXYucHJvdG9jb2w7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgV2ViU29ja2V0RXZlbnQoJ29wZW4nKSk7XG4gICAgICB9KSxcbiAgICAgIHRoaXMuX2V2ZW50RW1pdHRlci5hZGRMaXN0ZW5lcignd2Vic29ja2V0Q2xvc2VkJywgZXYgPT4ge1xuICAgICAgICBpZiAoZXYuaWQgIT09IHRoaXMuX3NvY2tldElkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IHRoaXMuQ0xPU0VEO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IFdlYlNvY2tldEV2ZW50KCdjbG9zZScsIHtcbiAgICAgICAgICAgIGNvZGU6IGV2LmNvZGUsXG4gICAgICAgICAgICByZWFzb246IGV2LnJlYXNvbixcbiAgICAgICAgICAgIC8vIFRPRE86IG1pc3NpbmcgYHdhc0NsZWFuYCAoZXhwb3NlZCBvbiBpT1MgYXMgYGNsZWFuYCBidXQgbWlzc2luZyBvbiBBbmRyb2lkKVxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl91bnJlZ2lzdGVyRXZlbnRzKCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5fZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKCd3ZWJzb2NrZXRGYWlsZWQnLCBldiA9PiB7XG4gICAgICAgIGlmIChldi5pZCAhPT0gdGhpcy5fc29ja2V0SWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gdGhpcy5DTE9TRUQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgV2ViU29ja2V0RXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgbWVzc2FnZTogZXYubWVzc2FnZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBXZWJTb2NrZXRFdmVudCgnY2xvc2UnLCB7XG4gICAgICAgICAgICBjb2RlOiBDTE9TRV9BQk5PUk1BTCxcbiAgICAgICAgICAgIHJlYXNvbjogZXYubWVzc2FnZSxcbiAgICAgICAgICAgIC8vIFRPRE86IEV4cG9zZSBgd2FzQ2xlYW5gXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3VucmVnaXN0ZXJFdmVudHMoKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYlNvY2tldDtcbiIsInZhciBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlID0gcmVxdWlyZShcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiKTtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEV2ZW50U3Vic2NyaXB0aW9uLFxuICBJRXZlbnRFbWl0dGVyLFxufSBmcm9tICcuLi92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuXG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCBSQ1REZXZpY2VFdmVudEVtaXR0ZXIgZnJvbSAnLi9SQ1REZXZpY2VFdmVudEVtaXR0ZXInO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG5pbnRlcmZhY2UgTmF0aXZlTW9kdWxlIHtcbiAgYWRkTGlzdGVuZXIoZXZlbnRUeXBlOiBzdHJpbmcpOiB2b2lkO1xuICByZW1vdmVMaXN0ZW5lcnMoY291bnQ6IG51bWJlcik6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIHtFdmVudFN1YnNjcmlwdGlvbn07XG5cbi8qKlxuICogYE5hdGl2ZUV2ZW50RW1pdHRlcmAgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBOYXRpdmUgTW9kdWxlcyB0byBlbWl0IGV2ZW50cyB0b1xuICogSmF2YVNjcmlwdCBsaXN0ZW5lcnMuIElmIGEgYE5hdGl2ZU1vZHVsZWAgaXMgc3VwcGxpZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCBpdFxuICogd2lsbCBiZSBub3RpZmllZCAodmlhIGBhZGRMaXN0ZW5lcmAgYW5kIGByZW1vdmVMaXN0ZW5lcnNgKSB3aGVuIHRoZSBsaXN0ZW5lclxuICogY291bnQgY2hhbmdlcyB0byBtYW5hZ2UgXCJuYXRpdmUgbWVtb3J5XCIuXG4gKlxuICogQ3VycmVudGx5LCBhbGwgbmF0aXZlIGV2ZW50cyBhcmUgZmlyZWQgdmlhIGEgZ2xvYmFsIGBSQ1REZXZpY2VFdmVudEVtaXR0ZXJgLlxuICogVGhpcyBtZWFucyBldmVudCBuYW1lcyBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSwgYW5kIGl0IG1lYW5zIHRoYXQgY2FsbCBzaXRlc1xuICogY2FuIHRoZW9yZXRpY2FsbHkgbGlzdGVuIHRvIGBSQ1REZXZpY2VFdmVudEVtaXR0ZXJgIChhbHRob3VnaCBkaXNjb3VyYWdlZCkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUV2ZW50RW1pdHRlcjxURXZlbnRUb0FyZ3NNYXA6IHsuLi59PlxuICBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXI8VEV2ZW50VG9BcmdzTWFwPlxue1xuICBfbmF0aXZlTW9kdWxlOiA/TmF0aXZlTW9kdWxlO1xuXG4gIGNvbnN0cnVjdG9yKG5hdGl2ZU1vZHVsZTogP05hdGl2ZU1vZHVsZSkge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2lvcycpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgbmF0aXZlTW9kdWxlICE9IG51bGwsXG4gICAgICAgICdgbmV3IE5hdGl2ZUV2ZW50RW1pdHRlcigpYCByZXF1aXJlcyBhIG5vbi1udWxsIGFyZ3VtZW50LicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0FkZExpc3RlbmVyID1cbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICEhbmF0aXZlTW9kdWxlICYmIHR5cGVvZiBuYXRpdmVNb2R1bGUuYWRkTGlzdGVuZXIgPT09ICdmdW5jdGlvbic7XG4gICAgY29uc3QgaGFzUmVtb3ZlTGlzdGVuZXJzID1cbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICEhbmF0aXZlTW9kdWxlICYmIHR5cGVvZiBuYXRpdmVNb2R1bGUucmVtb3ZlTGlzdGVuZXJzID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKG5hdGl2ZU1vZHVsZSAmJiBoYXNBZGRMaXN0ZW5lciAmJiBoYXNSZW1vdmVMaXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX25hdGl2ZU1vZHVsZSA9IG5hdGl2ZU1vZHVsZTtcbiAgICB9IGVsc2UgaWYgKG5hdGl2ZU1vZHVsZSAhPSBudWxsKSB7XG4gICAgICBpZiAoIWhhc0FkZExpc3RlbmVyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnYG5ldyBOYXRpdmVFdmVudEVtaXR0ZXIoKWAgd2FzIGNhbGxlZCB3aXRoIGEgbm9uLW51bGwgYXJndW1lbnQgd2l0aG91dCB0aGUgcmVxdWlyZWQgYGFkZExpc3RlbmVyYCBtZXRob2QuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghaGFzUmVtb3ZlTGlzdGVuZXJzKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnYG5ldyBOYXRpdmVFdmVudEVtaXR0ZXIoKWAgd2FzIGNhbGxlZCB3aXRoIGEgbm9uLW51bGwgYXJndW1lbnQgd2l0aG91dCB0aGUgcmVxdWlyZWQgYHJlbW92ZUxpc3RlbmVyc2AgbWV0aG9kLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkTGlzdGVuZXI8VEV2ZW50OiAkS2V5czxURXZlbnRUb0FyZ3NNYXA+PihcbiAgICBldmVudFR5cGU6IFRFdmVudCxcbiAgICBsaXN0ZW5lcjogKC4uLmFyZ3M6ICRFbGVtZW50VHlwZTxURXZlbnRUb0FyZ3NNYXAsIFRFdmVudD4pID0+IG1peGVkLFxuICAgIGNvbnRleHQ/OiBtaXhlZCxcbiAgKTogRXZlbnRTdWJzY3JpcHRpb24ge1xuICAgIHRoaXMuX25hdGl2ZU1vZHVsZT8uYWRkTGlzdGVuZXIoZXZlbnRUeXBlKTtcbiAgICBsZXQgc3Vic2NyaXB0aW9uOiA/RXZlbnRTdWJzY3JpcHRpb24gPSBSQ1REZXZpY2VFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoXG4gICAgICBldmVudFR5cGUsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIGNvbnRleHQsXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZW1vdmU6ICgpID0+IHtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fbmF0aXZlTW9kdWxlPy5yZW1vdmVMaXN0ZW5lcnMoMSk7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXVxuICAgICAgICAgIHN1YnNjcmlwdGlvbi5yZW1vdmUoKTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBlbWl0PFRFdmVudDogJEtleXM8VEV2ZW50VG9BcmdzTWFwPj4oXG4gICAgZXZlbnRUeXBlOiBURXZlbnQsXG4gICAgLi4uYXJnczogJEVsZW1lbnRUeXBlPFRFdmVudFRvQXJnc01hcCwgVEV2ZW50PlxuICApOiB2b2lkIHtcbiAgICAvLyBHZW5lcmFsbHksIGBSQ1REZXZpY2VFdmVudEVtaXR0ZXJgIGlzIGRpcmVjdGx5IGludm9rZWQuIEJ1dCB0aGlzIGlzXG4gICAgLy8gaW5jbHVkZWQgZm9yIGNvbXBsZXRlbmVzcy5cbiAgICBSQ1REZXZpY2VFdmVudEVtaXR0ZXIuZW1pdChldmVudFR5cGUsIC4uLmFyZ3MpO1xuICB9XG5cbiAgcmVtb3ZlQWxsTGlzdGVuZXJzPFRFdmVudDogJEtleXM8VEV2ZW50VG9BcmdzTWFwPj4oXG4gICAgZXZlbnRUeXBlPzogP1RFdmVudCxcbiAgKTogdm9pZCB7XG4gICAgaW52YXJpYW50KFxuICAgICAgZXZlbnRUeXBlICE9IG51bGwsXG4gICAgICAnYE5hdGl2ZUV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcigpYCByZXF1aXJlcyBhIG5vbi1udWxsIGFyZ3VtZW50LicsXG4gICAgKTtcbiAgICB0aGlzLl9uYXRpdmVNb2R1bGU/LnJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnRUeXBlKSk7XG4gICAgUkNURGV2aWNlRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycyhldmVudFR5cGUpO1xuICB9XG5cbiAgbGlzdGVuZXJDb3VudDxURXZlbnQ6ICRLZXlzPFRFdmVudFRvQXJnc01hcD4+KGV2ZW50VHlwZTogVEV2ZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gUkNURGV2aWNlRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQoZXZlbnRUeXBlKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlV2ViU29ja2V0TW9kdWxlJztcbmltcG9ydCBOYXRpdmVXZWJTb2NrZXRNb2R1bGUgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVXZWJTb2NrZXRNb2R1bGUnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlV2ViU29ja2V0TW9kdWxlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK2Nvbm5lY3Q6IChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwcm90b2NvbHM6ID9BcnJheTxzdHJpbmc+LFxuICAgIG9wdGlvbnM6IHt8aGVhZGVycz86IE9iamVjdHx9LFxuICAgIHNvY2tldElEOiBudW1iZXIsXG4gICkgPT4gdm9pZDtcbiAgK3NlbmQ6IChtZXNzYWdlOiBzdHJpbmcsIGZvclNvY2tldElEOiBudW1iZXIpID0+IHZvaWQ7XG4gICtzZW5kQmluYXJ5OiAoYmFzZTY0U3RyaW5nOiBzdHJpbmcsIGZvclNvY2tldElEOiBudW1iZXIpID0+IHZvaWQ7XG4gICtwaW5nOiAoc29ja2V0SUQ6IG51bWJlcikgPT4gdm9pZDtcbiAgK2Nsb3NlOiAoY29kZTogbnVtYmVyLCByZWFzb246IHN0cmluZywgc29ja2V0SUQ6IG51bWJlcikgPT4gdm9pZDtcblxuICAvLyBSQ1RFdmVudEVtaXR0ZXJcbiAgK2FkZExpc3RlbmVyOiAoZXZlbnROYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICtyZW1vdmVMaXN0ZW5lcnM6IChjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXRFbmZvcmNpbmc8U3BlYz4oXG4gICdXZWJTb2NrZXRNb2R1bGUnLFxuKTogU3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBFdmVudCBvYmplY3QgcGFzc2VkIHRvIHRoZSBgb25vcGVuYCwgYG9uY2xvc2VgLCBgb25tZXNzYWdlYCwgYG9uZXJyb3JgXG4gKiBjYWxsYmFja3Mgb2YgYFdlYlNvY2tldGAuXG4gKlxuICogVGhlIGB0eXBlYCBwcm9wZXJ0eSBpcyBcIm9wZW5cIiwgXCJjbG9zZVwiLCBcIm1lc3NhZ2VcIiwgXCJlcnJvclwiIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBJbiBjYXNlIG9mIFwibWVzc2FnZVwiLCB0aGUgYGRhdGFgIHByb3BlcnR5IGNvbnRhaW5zIHRoZSBpbmNvbWluZyBkYXRhLlxuICovXG5jbGFzcyBXZWJTb2NrZXRFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlLnRvU3RyaW5nKCk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBldmVudEluaXREaWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYlNvY2tldEV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7QmxvYk9wdGlvbnN9IGZyb20gJy4vQmxvYlR5cGVzJztcblxuY29uc3QgQmxvYiA9IHJlcXVpcmUoJy4vQmxvYicpO1xuY29uc3QgaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbi8qKlxuICogVGhlIEZpbGUgaW50ZXJmYWNlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGZpbGVzLlxuICovXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBmb3IgSlMgY29uc3VtZXJzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFydHM6IEFycmF5PEJsb2IgfCBzdHJpbmc+LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQmxvYk9wdGlvbnMsXG4gICkge1xuICAgIGludmFyaWFudChcbiAgICAgIHBhcnRzICE9IG51bGwgJiYgbmFtZSAhPSBudWxsLFxuICAgICAgJ0ZhaWxlZCB0byBjb25zdHJ1Y3QgYEZpbGVgOiBNdXN0IHBhc3MgYm90aCBgcGFydHNgIGFuZCBgbmFtZWAgYXJndW1lbnRzLicsXG4gICAgKTtcblxuICAgIHN1cGVyKHBhcnRzLCBvcHRpb25zKTtcbiAgICB0aGlzLmRhdGEubmFtZSA9IG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZmlsZS5cbiAgICovXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgaW52YXJpYW50KHRoaXMuZGF0YS5uYW1lICE9IG51bGwsICdGaWxlcyBtdXN0IGhhdmUgYSBuYW1lIHNldC4nKTtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm5hbWU7XG4gIH1cblxuICAvKlxuICAgKiBMYXN0IG1vZGlmaWVkIHRpbWUgb2YgdGhlIGZpbGUuXG4gICAqL1xuICBnZXQgbGFzdE1vZGlmaWVkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sYXN0TW9kaWZpZWQgfHwgMDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZpbGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSBCbG9iIGZyb20gJy4vQmxvYic7XG5cbmltcG9ydCBOYXRpdmVGaWxlUmVhZGVyTW9kdWxlIGZyb20gJy4vTmF0aXZlRmlsZVJlYWRlck1vZHVsZSc7XG5pbXBvcnQge3RvQnl0ZUFycmF5fSBmcm9tICdiYXNlNjQtanMnO1xuaW1wb3J0IEV2ZW50VGFyZ2V0IGZyb20gJ2V2ZW50LXRhcmdldC1zaGltJztcblxudHlwZSBSZWFkeVN0YXRlID1cbiAgfCAwIC8vIEVNUFRZXG4gIHwgMSAvLyBMT0FESU5HXG4gIHwgMjsgLy8gRE9ORVxuXG50eXBlIFJlYWRlclJlc3VsdCA9IHN0cmluZyB8IEFycmF5QnVmZmVyO1xuXG5jb25zdCBSRUFERVJfRVZFTlRTID0gW1xuICAnYWJvcnQnLFxuICAnZXJyb3InLFxuICAnbG9hZCcsXG4gICdsb2Fkc3RhcnQnLFxuICAnbG9hZGVuZCcsXG4gICdwcm9ncmVzcycsXG5dO1xuXG5jb25zdCBFTVBUWSA9IDA7XG5jb25zdCBMT0FESU5HID0gMTtcbmNvbnN0IERPTkUgPSAyO1xuXG5jbGFzcyBGaWxlUmVhZGVyIGV4dGVuZHMgKEV2ZW50VGFyZ2V0KC4uLlJFQURFUl9FVkVOVFMpOiBhbnkpIHtcbiAgc3RhdGljIEVNUFRZOiBudW1iZXIgPSBFTVBUWTtcbiAgc3RhdGljIExPQURJTkc6IG51bWJlciA9IExPQURJTkc7XG4gIHN0YXRpYyBET05FOiBudW1iZXIgPSBET05FO1xuXG4gIEVNUFRZOiBudW1iZXIgPSBFTVBUWTtcbiAgTE9BRElORzogbnVtYmVyID0gTE9BRElORztcbiAgRE9ORTogbnVtYmVyID0gRE9ORTtcblxuICBfcmVhZHlTdGF0ZTogUmVhZHlTdGF0ZTtcbiAgX2Vycm9yOiA/RXJyb3I7XG4gIF9yZXN1bHQ6ID9SZWFkZXJSZXN1bHQ7XG4gIF9hYm9ydGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgX3Jlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlYWR5U3RhdGUgPSBFTVBUWTtcbiAgICB0aGlzLl9lcnJvciA9IG51bGw7XG4gICAgdGhpcy5fcmVzdWx0ID0gbnVsbDtcbiAgfVxuXG4gIF9zZXRSZWFkeVN0YXRlKG5ld1N0YXRlOiBSZWFkeVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZHlTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZTogJ3JlYWR5c3RhdGVjaGFuZ2UnfSk7XG4gICAgaWYgKG5ld1N0YXRlID09PSBET05FKSB7XG4gICAgICBpZiAodGhpcy5fYWJvcnRlZCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ICdhYm9ydCd9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fZXJyb3IpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAnZXJyb3InfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ICdsb2FkJ30pO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAnbG9hZGVuZCd9KTtcbiAgICB9XG4gIH1cblxuICByZWFkQXNBcnJheUJ1ZmZlcihibG9iOiA/QmxvYik6IHZvaWQge1xuICAgIHRoaXMuX2Fib3J0ZWQgPSBmYWxzZTtcblxuICAgIGlmIChibG9iID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlYWRBc0FycmF5QnVmZmVyJyBvbiAnRmlsZVJlYWRlcic6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBOYXRpdmVGaWxlUmVhZGVyTW9kdWxlLnJlYWRBc0RhdGFVUkwoYmxvYi5kYXRhKS50aGVuKFxuICAgICAgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5fYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IHRleHQuc3BsaXQoJywnKVsxXTtcbiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IHRvQnl0ZUFycmF5KGJhc2U2NCk7XG5cbiAgICAgICAgdGhpcy5fcmVzdWx0ID0gdHlwZWRBcnJheS5idWZmZXI7XG4gICAgICAgIHRoaXMuX3NldFJlYWR5U3RhdGUoRE9ORSk7XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBpZiAodGhpcy5fYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLl9zZXRSZWFkeVN0YXRlKERPTkUpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcmVhZEFzRGF0YVVSTChibG9iOiA/QmxvYik6IHZvaWQge1xuICAgIHRoaXMuX2Fib3J0ZWQgPSBmYWxzZTtcblxuICAgIGlmIChibG9iID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlYWRBc0RhdGFVUkwnIG9uICdGaWxlUmVhZGVyJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIE5hdGl2ZUZpbGVSZWFkZXJNb2R1bGUucmVhZEFzRGF0YVVSTChibG9iLmRhdGEpLnRoZW4oXG4gICAgICAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHRleHQ7XG4gICAgICAgIHRoaXMuX3NldFJlYWR5U3RhdGUoRE9ORSk7XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBpZiAodGhpcy5fYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLl9zZXRSZWFkeVN0YXRlKERPTkUpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcmVhZEFzVGV4dChibG9iOiA/QmxvYiwgZW5jb2Rpbmc6IHN0cmluZyA9ICdVVEYtOCcpOiB2b2lkIHtcbiAgICB0aGlzLl9hYm9ydGVkID0gZmFsc2U7XG5cbiAgICBpZiAoYmxvYiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdyZWFkQXNUZXh0JyBvbiAnRmlsZVJlYWRlcic6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBOYXRpdmVGaWxlUmVhZGVyTW9kdWxlLnJlYWRBc1RleHQoYmxvYi5kYXRhLCBlbmNvZGluZykudGhlbihcbiAgICAgICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzdWx0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5fc2V0UmVhZHlTdGF0ZShET05FKTtcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHRoaXMuX3NldFJlYWR5U3RhdGUoRE9ORSk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLl9hYm9ydGVkID0gdHJ1ZTtcbiAgICAvLyBvbmx5IGNhbGwgb25yZWFkeXN0YXRlY2hhbmdlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0byBhYm9ydCwgYXMgcGVyIHNwZWNcbiAgICBpZiAodGhpcy5fcmVhZHlTdGF0ZSAhPT0gRU1QVFkgJiYgdGhpcy5fcmVhZHlTdGF0ZSAhPT0gRE9ORSkge1xuICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgIHRoaXMuX3NldFJlYWR5U3RhdGUoRE9ORSk7XG4gICAgfVxuICAgIC8vIFJlc2V0IGFnYWluIGFmdGVyLCBpbiBjYXNlIG1vZGlmaWVkIGluIGhhbmRsZXJcbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUoKTogUmVhZHlTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWR5U3RhdGU7XG4gIH1cblxuICBnZXQgZXJyb3IoKTogP0Vycm9yIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gIH1cblxuICBnZXQgcmVzdWx0KCk6ID9SZWFkZXJSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlUmVhZGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlRmlsZVJlYWRlck1vZHVsZSc7XG5pbXBvcnQgTmF0aXZlRmlsZVJlYWRlck1vZHVsZSBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUZpbGVSZWFkZXJNb2R1bGUnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlRmlsZVJlYWRlck1vZHVsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtyZWFkQXNEYXRhVVJMOiAoZGF0YTogT2JqZWN0KSA9PiBQcm9taXNlPHN0cmluZz47XG4gICtyZWFkQXNUZXh0OiAoZGF0YTogT2JqZWN0LCBlbmNvZGluZzogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldEVuZm9yY2luZzxTcGVjPihcbiAgJ0ZpbGVSZWFkZXJNb2R1bGUnLFxuKTogU3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSBCbG9iIGZyb20gJy4vQmxvYic7XG5cbmltcG9ydCBOYXRpdmVCbG9iTW9kdWxlIGZyb20gJy4vTmF0aXZlQmxvYk1vZHVsZSc7XG5cbmxldCBCTE9CX1VSTF9QUkVGSVggPSBudWxsO1xuXG5pZiAoXG4gIE5hdGl2ZUJsb2JNb2R1bGUgJiZcbiAgdHlwZW9mIE5hdGl2ZUJsb2JNb2R1bGUuZ2V0Q29uc3RhbnRzKCkuQkxPQl9VUklfU0NIRU1FID09PSAnc3RyaW5nJ1xuKSB7XG4gIGNvbnN0IGNvbnN0YW50cyA9IE5hdGl2ZUJsb2JNb2R1bGUuZ2V0Q29uc3RhbnRzKCk7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIGFzc2VydGVkIGFib3ZlXG4gIC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXVxuICBCTE9CX1VSTF9QUkVGSVggPSBjb25zdGFudHMuQkxPQl9VUklfU0NIRU1FICsgJzonO1xuICBpZiAodHlwZW9mIGNvbnN0YW50cy5CTE9CX1VSSV9IT1NUID09PSAnc3RyaW5nJykge1xuICAgIEJMT0JfVVJMX1BSRUZJWCArPSBgLy8ke2NvbnN0YW50cy5CTE9CX1VSSV9IT1NUfS9gO1xuICB9XG59XG5cbi8qKlxuICogVG8gYWxsb3cgQmxvYnMgYmUgYWNjZXNzZWQgdmlhIGBjb250ZW50Oi8vYCBVUklzLFxuICogeW91IG5lZWQgdG8gcmVnaXN0ZXIgYEJsb2JQcm92aWRlcmAgYXMgYSBDb250ZW50UHJvdmlkZXIgaW4geW91ciBhcHAncyBgQW5kcm9pZE1hbmlmZXN0LnhtbGA6XG4gKlxuICogYGBgeG1sXG4gKiA8bWFuaWZlc3Q+XG4gKiAgIDxhcHBsaWNhdGlvbj5cbiAqICAgICA8cHJvdmlkZXJcbiAqICAgICAgIGFuZHJvaWQ6bmFtZT1cImNvbS5mYWNlYm9vay5yZWFjdC5tb2R1bGVzLmJsb2IuQmxvYlByb3ZpZGVyXCJcbiAqICAgICAgIGFuZHJvaWQ6YXV0aG9yaXRpZXM9XCJAc3RyaW5nL2Jsb2JfcHJvdmlkZXJfYXV0aG9yaXR5XCJcbiAqICAgICAgIGFuZHJvaWQ6ZXhwb3J0ZWQ9XCJmYWxzZVwiXG4gKiAgICAgLz5cbiAqICAgPC9hcHBsaWNhdGlvbj5cbiAqIDwvbWFuaWZlc3Q+XG4gKiBgYGBcbiAqIEFuZCB0aGVuIGRlZmluZSB0aGUgYGJsb2JfcHJvdmlkZXJfYXV0aG9yaXR5YCBzdHJpbmcgaW4gYHJlcy92YWx1ZXMvc3RyaW5ncy54bWxgLlxuICogVXNlIGEgZG90dGVkIG5hbWUgdGhhdCdzIGVudGlyZWx5IHVuaXF1ZSB0byB5b3VyIGFwcDpcbiAqXG4gKiBgYGB4bWxcbiAqIDxyZXNvdXJjZXM+XG4gKiAgIDxzdHJpbmcgbmFtZT1cImJsb2JfcHJvdmlkZXJfYXV0aG9yaXR5XCI+eW91ci5hcHAucGFja2FnZS5ibG9iczwvc3RyaW5nPlxuICogPC9yZXNvdXJjZXM+XG4gKiBgYGBcbiAqL1xuXG4vLyBTbWFsbCBzdWJzZXQgZnJvbSB3aGF0d2ctdXJsOiBodHRwczovL2dpdGh1Yi5jb20vanNkb20vd2hhdHdnLXVybC90cmVlL21hc3Rlci9zcmNcbi8vIFRoZSByZWZlcmVuY2UgY29kZSBibG9hdCBjb21lcyBmcm9tIFVuaWNvZGUgaXNzdWVzIHdpdGggVVJMcywgc28gdGhvc2Ugd29uJ3Qgd29yayBoZXJlLlxuZXhwb3J0IGNsYXNzIFVSTFNlYXJjaFBhcmFtcyB7XG4gIF9zZWFyY2hQYXJhbXM6IEFycmF5PEFycmF5PHN0cmluZz4+ID0gW107XG5cbiAgY29uc3RydWN0b3IocGFyYW1zOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChrZXkgPT4gdGhpcy5hcHBlbmQoa2V5LCBwYXJhbXNba2V5XSkpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGVuZChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3NlYXJjaFBhcmFtcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH1cblxuICBkZWxldGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVUkxTZWFyY2hQYXJhbXMuZGVsZXRlIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJMU2VhcmNoUGFyYW1zLmdldCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldEFsbChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTFNlYXJjaFBhcmFtcy5nZXRBbGwgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVUkxTZWFyY2hQYXJhbXMuaGFzIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJMU2VhcmNoUGFyYW1zLnNldCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHNvcnQoKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVUkxTZWFyY2hQYXJhbXMuc29ydCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8vICRGbG93Rml4TWVbdW5zdXBwb3J0ZWQtc3ludGF4XVxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hQYXJhbXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fc2VhcmNoUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBsYXN0ID0gdGhpcy5fc2VhcmNoUGFyYW1zLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFBhcmFtcy5yZWR1Y2UoKGFjYywgY3VyciwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGFjYyArXG4gICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjdXJyWzBdKSArXG4gICAgICAgICc9JyArXG4gICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjdXJyWzFdKSArXG4gICAgICAgIChpbmRleCA9PT0gbGFzdCA/ICcnIDogJyYnKVxuICAgICAgKTtcbiAgICB9LCAnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVCYXNlVXJsKHVybDogc3RyaW5nKSB7XG4gIC8vIGZyb20gdGhpcyBNSVQtbGljZW5zZWQgZ2lzdDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZHBlcmluaS83MjkyOTRcbiAgcmV0dXJuIC9eKD86KD86KD86aHR0cHM/fGZ0cCk6KT9cXC9cXC8pKD86KD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXowLTlcXHUwMGExLVxcdWZmZmZdW2EtejAtOVxcdTAwYTEtXFx1ZmZmZl8tXXswLDYyfSk/W2EtejAtOVxcdTAwYTEtXFx1ZmZmZl1cXC4pKig/OlthLXpcXHUwMGExLVxcdWZmZmZdezIsfVxcLj8pKSg/OjpcXGR7Miw1fSk/KD86Wy8/I11cXFMqKT8kLy50ZXN0KFxuICAgIHVybCxcbiAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIFVSTCB7XG4gIF91cmw6IHN0cmluZztcbiAgX3NlYXJjaFBhcmFtc0luc3RhbmNlOiA/VVJMU2VhcmNoUGFyYW1zID0gbnVsbDtcblxuICBzdGF0aWMgY3JlYXRlT2JqZWN0VVJMKGJsb2I6IEJsb2IpOiBzdHJpbmcge1xuICAgIGlmIChCTE9CX1VSTF9QUkVGSVggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBVUkwgZm9yIGJsb2IhJyk7XG4gICAgfVxuICAgIHJldHVybiBgJHtCTE9CX1VSTF9QUkVGSVh9JHtibG9iLmRhdGEuYmxvYklkfT9vZmZzZXQ9JHtibG9iLmRhdGEub2Zmc2V0fSZzaXplPSR7YmxvYi5zaXplfWA7XG4gIH1cblxuICBzdGF0aWMgcmV2b2tlT2JqZWN0VVJMKHVybDogc3RyaW5nKSB7XG4gICAgLy8gRG8gbm90aGluZy5cbiAgfVxuXG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgY29uc3RydWN0b3IodXJsOiBzdHJpbmcsIGJhc2U6IHN0cmluZyB8IFVSTCkge1xuICAgIGxldCBiYXNlVXJsID0gbnVsbDtcbiAgICBpZiAoIWJhc2UgfHwgdmFsaWRhdGVCYXNlVXJsKHVybCkpIHtcbiAgICAgIHRoaXMuX3VybCA9IHVybDtcbiAgICAgIGlmICghdGhpcy5fdXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgdGhpcy5fdXJsICs9ICcvJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBiYXNlID09PSAnc3RyaW5nJykge1xuICAgICAgICBiYXNlVXJsID0gYmFzZTtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUJhc2VVcmwoYmFzZVVybCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGJhc2UgVVJMOiAke2Jhc2VVcmx9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VVcmwgPSBiYXNlLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAoYmFzZVVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIGJhc2VVcmwgPSBiYXNlVXJsLnNsaWNlKDAsIGJhc2VVcmwubGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoIXVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgdXJsID0gYC8ke3VybH1gO1xuICAgICAgfVxuICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgodXJsKSkge1xuICAgICAgICB1cmwgPSAnJztcbiAgICAgIH1cbiAgICAgIHRoaXMuX3VybCA9IGAke2Jhc2VVcmx9JHt1cmx9YDtcbiAgICB9XG4gIH1cblxuICBnZXQgaGFzaCgpOiBzdHJpbmcge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJMLmhhc2ggaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgaG9zdCgpOiBzdHJpbmcge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJMLmhvc3QgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5ob3N0bmFtZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldCBocmVmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBvcmlnaW4oKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5vcmlnaW4gaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgcGFzc3dvcmQoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5wYXNzd29yZCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpOiBzdHJpbmcge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJMLnBhdGhuYW1lIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IHBvcnQoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5wb3J0IGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IHByb3RvY29sKCk6IHN0cmluZyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVUkwucHJvdG9jb2wgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgc2VhcmNoKCk6IHN0cmluZyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVUkwuc2VhcmNoIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IHNlYXJjaFBhcmFtcygpOiBVUkxTZWFyY2hQYXJhbXMge1xuICAgIGlmICh0aGlzLl9zZWFyY2hQYXJhbXNJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9zZWFyY2hQYXJhbXNJbnN0YW5jZSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFBhcmFtc0luc3RhbmNlO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3NlYXJjaFBhcmFtc0luc3RhbmNlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXJsO1xuICAgIH1cbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgY29uc3QgaW5zdGFuY2VTdHJpbmcgPSB0aGlzLl9zZWFyY2hQYXJhbXNJbnN0YW5jZS50b1N0cmluZygpO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuX3VybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JztcbiAgICByZXR1cm4gdGhpcy5fdXJsICsgc2VwYXJhdG9yICsgaW5zdGFuY2VTdHJpbmc7XG4gIH1cblxuICBnZXQgdXNlcm5hbWUoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC51c2VybmFtZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBAYXV0aG9yIFRvcnUgTmFnYXNoaW1hIDxodHRwczovL2dpdGh1Yi5jb20vbXlzdGljYXRlYT5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gcm9vdCBkaXJlY3RvcnkgZm9yIGZ1bGwgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgZXZlbnRUYXJnZXRTaGltID0gcmVxdWlyZSgnZXZlbnQtdGFyZ2V0LXNoaW0nKTtcblxuLyoqXG4gKiBUaGUgc2lnbmFsIGNsYXNzLlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0c2lnbmFsXG4gKi9cbmNsYXNzIEFib3J0U2lnbmFsIGV4dGVuZHMgZXZlbnRUYXJnZXRTaGltLkV2ZW50VGFyZ2V0IHtcbiAgICAvKipcbiAgICAgKiBBYm9ydFNpZ25hbCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBYm9ydFNpZ25hbCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHlcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgYEFib3J0U2lnbmFsYCdzIGBBYm9ydENvbnRyb2xsZXJgIGhhcyBzaWduYWxlZCB0byBhYm9ydCwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGdldCBhYm9ydGVkKCkge1xuICAgICAgICBjb25zdCBhYm9ydGVkID0gYWJvcnRlZEZsYWdzLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhYm9ydGVkICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJ3RoaXMnIHRvIGJlIGFuICdBYm9ydFNpZ25hbCcgb2JqZWN0LCBidXQgZ290ICR7dGhpcyA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIHRoaXN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFib3J0ZWQ7XG4gICAgfVxufVxuZXZlbnRUYXJnZXRTaGltLmRlZmluZUV2ZW50QXR0cmlidXRlKEFib3J0U2lnbmFsLnByb3RvdHlwZSwgXCJhYm9ydFwiKTtcbi8qKlxuICogQ3JlYXRlIGFuIEFib3J0U2lnbmFsIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gT2JqZWN0LmNyZWF0ZShBYm9ydFNpZ25hbC5wcm90b3R5cGUpO1xuICAgIGV2ZW50VGFyZ2V0U2hpbS5FdmVudFRhcmdldC5jYWxsKHNpZ25hbCk7XG4gICAgYWJvcnRlZEZsYWdzLnNldChzaWduYWwsIGZhbHNlKTtcbiAgICByZXR1cm4gc2lnbmFsO1xufVxuLyoqXG4gKiBBYm9ydCBhIGdpdmVuIHNpZ25hbC5cbiAqL1xuZnVuY3Rpb24gYWJvcnRTaWduYWwoc2lnbmFsKSB7XG4gICAgaWYgKGFib3J0ZWRGbGFncy5nZXQoc2lnbmFsKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhYm9ydGVkRmxhZ3Muc2V0KHNpZ25hbCwgdHJ1ZSk7XG4gICAgc2lnbmFsLmRpc3BhdGNoRXZlbnQoeyB0eXBlOiBcImFib3J0XCIgfSk7XG59XG4vKipcbiAqIEFib3J0ZWQgZmxhZyBmb3IgZWFjaCBpbnN0YW5jZXMuXG4gKi9cbmNvbnN0IGFib3J0ZWRGbGFncyA9IG5ldyBXZWFrTWFwKCk7XG4vLyBQcm9wZXJ0aWVzIHNob3VsZCBiZSBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQWJvcnRTaWduYWwucHJvdG90eXBlLCB7XG4gICAgYWJvcnRlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG59KTtcbi8vIGB0b1N0cmluZygpYCBzaG91bGQgcmV0dXJuIGBcIltvYmplY3QgQWJvcnRTaWduYWxdXCJgXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09IFwic3ltYm9sXCIpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJvcnRTaWduYWwucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogXCJBYm9ydFNpZ25hbFwiLFxuICAgIH0pO1xufVxuXG4vKipcbiAqIFRoZSBBYm9ydENvbnRyb2xsZXIuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jYWJvcnRjb250cm9sbGVyXG4gKi9cbmNsYXNzIEFib3J0Q29udHJvbGxlciB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHNpZ25hbHMuc2V0KHRoaXMsIGNyZWF0ZUFib3J0U2lnbmFsKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgQWJvcnRTaWduYWxgIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgZ2V0IHNpZ25hbCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFNpZ25hbCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWJvcnQgYW5kIHNpZ25hbCB0byBhbnkgb2JzZXJ2ZXJzIHRoYXQgdGhlIGFzc29jaWF0ZWQgYWN0aXZpdHkgaXMgdG8gYmUgYWJvcnRlZC5cbiAgICAgKi9cbiAgICBhYm9ydCgpIHtcbiAgICAgICAgYWJvcnRTaWduYWwoZ2V0U2lnbmFsKHRoaXMpKTtcbiAgICB9XG59XG4vKipcbiAqIEFzc29jaWF0ZWQgc2lnbmFscy5cbiAqL1xuY29uc3Qgc2lnbmFscyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqIEdldCB0aGUgYXNzb2NpYXRlZCBzaWduYWwgb2YgYSBnaXZlbiBjb250cm9sbGVyLlxuICovXG5mdW5jdGlvbiBnZXRTaWduYWwoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHNpZ25hbCA9IHNpZ25hbHMuZ2V0KGNvbnRyb2xsZXIpO1xuICAgIGlmIChzaWduYWwgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAndGhpcycgdG8gYmUgYW4gJ0Fib3J0Q29udHJvbGxlcicgb2JqZWN0LCBidXQgZ290ICR7Y29udHJvbGxlciA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIGNvbnRyb2xsZXJ9YCk7XG4gICAgfVxuICAgIHJldHVybiBzaWduYWw7XG59XG4vLyBQcm9wZXJ0aWVzIHNob3VsZCBiZSBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQWJvcnRDb250cm9sbGVyLnByb3RvdHlwZSwge1xuICAgIHNpZ25hbDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgYWJvcnQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxufSk7XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09IFwic3ltYm9sXCIpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJvcnRDb250cm9sbGVyLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFwiQWJvcnRDb250cm9sbGVyXCIsXG4gICAgfSk7XG59XG5cbmV4cG9ydHMuQWJvcnRDb250cm9sbGVyID0gQWJvcnRDb250cm9sbGVyO1xuZXhwb3J0cy5BYm9ydFNpZ25hbCA9IEFib3J0U2lnbmFsO1xuZXhwb3J0cy5kZWZhdWx0ID0gQWJvcnRDb250cm9sbGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFib3J0Q29udHJvbGxlclxubW9kdWxlLmV4cG9ydHMuQWJvcnRDb250cm9sbGVyID0gbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQWJvcnRDb250cm9sbGVyXG5tb2R1bGUuZXhwb3J0cy5BYm9ydFNpZ25hbCA9IEFib3J0U2lnbmFsXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hYm9ydC1jb250cm9sbGVyLmpzLm1hcFxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTZXQgdXAgYWxlcnQoKS5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbW9kdWxlIGRpcmVjdGx5LCBvciBqdXN0IHJlcXVpcmUgSW5pdGlhbGl6ZUNvcmUuXG4gKi9cbmlmICghZ2xvYmFsLmFsZXJ0KSB7XG4gIGdsb2JhbC5hbGVydCA9IGZ1bmN0aW9uICh0ZXh0OiBzdHJpbmcpIHtcbiAgICAvLyBSZXF1aXJlIEFsZXJ0IG9uIGRlbWFuZC4gUmVxdWlyaW5nIGl0IHRvbyBlYXJseSBjYW4gbGVhZCB0byBpc3N1ZXNcbiAgICAvLyB3aXRoIHRoaW5ncyBsaWtlIFBsYXRmb3JtIG5vdCBiZWluZyBmdWxseSBpbml0aWFsaXplZC5cbiAgICByZXF1aXJlKCcuLi9BbGVydC9BbGVydCcpLmFsZXJ0KCdBbGVydCcsICcnICsgdGV4dCk7XG4gIH07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RGlhbG9nT3B0aW9uc30gZnJvbSAnLi4vTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZCc7XG5cbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IFJDVEFsZXJ0TWFuYWdlciBmcm9tICcuL1JDVEFsZXJ0TWFuYWdlcic7XG5cbmV4cG9ydCB0eXBlIEFsZXJ0VHlwZSA9XG4gIHwgJ2RlZmF1bHQnXG4gIHwgJ3BsYWluLXRleHQnXG4gIHwgJ3NlY3VyZS10ZXh0J1xuICB8ICdsb2dpbi1wYXNzd29yZCc7XG5leHBvcnQgdHlwZSBBbGVydEJ1dHRvblN0eWxlID0gJ2RlZmF1bHQnIHwgJ2NhbmNlbCcgfCAnZGVzdHJ1Y3RpdmUnO1xuZXhwb3J0IHR5cGUgQnV0dG9ucyA9IEFycmF5PHtcbiAgdGV4dD86IHN0cmluZyxcbiAgb25QcmVzcz86ID9GdW5jdGlvbixcbiAgaXNQcmVmZXJyZWQ/OiBib29sZWFuLFxuICBzdHlsZT86IEFsZXJ0QnV0dG9uU3R5bGUsXG4gIC4uLlxufT47XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgY2FuY2VsYWJsZT86ID9ib29sZWFuLFxuICB1c2VySW50ZXJmYWNlU3R5bGU/OiAndW5zcGVjaWZpZWQnIHwgJ2xpZ2h0JyB8ICdkYXJrJyxcbiAgb25EaXNtaXNzPzogPygpID0+IHZvaWQsXG4gIC4uLlxufTtcblxuLyoqXG4gKiBMYXVuY2hlcyBhbiBhbGVydCBkaWFsb2cgd2l0aCB0aGUgc3BlY2lmaWVkIHRpdGxlIGFuZCBtZXNzYWdlLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FsZXJ0XG4gKi9cbmNsYXNzIEFsZXJ0IHtcbiAgc3RhdGljIGFsZXJ0KFxuICAgIHRpdGxlOiA/c3RyaW5nLFxuICAgIG1lc3NhZ2U/OiA/c3RyaW5nLFxuICAgIGJ1dHRvbnM/OiBCdXR0b25zLFxuICAgIG9wdGlvbnM/OiBPcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgICBBbGVydC5wcm9tcHQoXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBidXR0b25zLFxuICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIGNvbnN0IE5hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkID1cbiAgICAgICAgcmVxdWlyZSgnLi4vTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZCcpLmRlZmF1bHQ7XG4gICAgICBpZiAoIU5hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IE5hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkLmdldENvbnN0YW50cygpO1xuXG4gICAgICBjb25zdCBjb25maWc6IERpYWxvZ09wdGlvbnMgPSB7XG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCAnJyxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCAnJyxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNhbmNlbGFibGUpIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbGFibGUgPSBvcHRpb25zLmNhbmNlbGFibGU7XG4gICAgICB9XG4gICAgICAvLyBBdCBtb3N0IHRocmVlIGJ1dHRvbnMgKG5ldXRyYWwsIG5lZ2F0aXZlLCBwb3NpdGl2ZSkuIElnbm9yZSByZXN0LlxuICAgICAgLy8gVGhlIHRleHQgJ09LJyBzaG91bGQgYmUgcHJvYmFibHkgbG9jYWxpemVkLiBpT1MgQWxlcnQgZG9lcyB0aGF0IGluIG5hdGl2ZS5cbiAgICAgIGNvbnN0IGRlZmF1bHRQb3NpdGl2ZVRleHQgPSAnT0snO1xuICAgICAgY29uc3QgdmFsaWRCdXR0b25zOiBCdXR0b25zID0gYnV0dG9uc1xuICAgICAgICA/IGJ1dHRvbnMuc2xpY2UoMCwgMylcbiAgICAgICAgOiBbe3RleHQ6IGRlZmF1bHRQb3NpdGl2ZVRleHR9XTtcbiAgICAgIGNvbnN0IGJ1dHRvblBvc2l0aXZlID0gdmFsaWRCdXR0b25zLnBvcCgpO1xuICAgICAgY29uc3QgYnV0dG9uTmVnYXRpdmUgPSB2YWxpZEJ1dHRvbnMucG9wKCk7XG4gICAgICBjb25zdCBidXR0b25OZXV0cmFsID0gdmFsaWRCdXR0b25zLnBvcCgpO1xuXG4gICAgICBpZiAoYnV0dG9uTmV1dHJhbCkge1xuICAgICAgICBjb25maWcuYnV0dG9uTmV1dHJhbCA9IGJ1dHRvbk5ldXRyYWwudGV4dCB8fCAnJztcbiAgICAgIH1cbiAgICAgIGlmIChidXR0b25OZWdhdGl2ZSkge1xuICAgICAgICBjb25maWcuYnV0dG9uTmVnYXRpdmUgPSBidXR0b25OZWdhdGl2ZS50ZXh0IHx8ICcnO1xuICAgICAgfVxuICAgICAgaWYgKGJ1dHRvblBvc2l0aXZlKSB7XG4gICAgICAgIGNvbmZpZy5idXR0b25Qb3NpdGl2ZSA9IGJ1dHRvblBvc2l0aXZlLnRleHQgfHwgZGVmYXVsdFBvc2l0aXZlVGV4dDtcbiAgICAgIH1cblxuICAgICAgLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAgICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgICAgIGNvbnN0IG9uQWN0aW9uID0gKGFjdGlvbiwgYnV0dG9uS2V5KSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24gPT09IGNvbnN0YW50cy5idXR0b25DbGlja2VkKSB7XG4gICAgICAgICAgaWYgKGJ1dHRvbktleSA9PT0gY29uc3RhbnRzLmJ1dHRvbk5ldXRyYWwpIHtcbiAgICAgICAgICAgIGJ1dHRvbk5ldXRyYWwub25QcmVzcyAmJiBidXR0b25OZXV0cmFsLm9uUHJlc3MoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGJ1dHRvbktleSA9PT0gY29uc3RhbnRzLmJ1dHRvbk5lZ2F0aXZlKSB7XG4gICAgICAgICAgICBidXR0b25OZWdhdGl2ZS5vblByZXNzICYmIGJ1dHRvbk5lZ2F0aXZlLm9uUHJlc3MoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGJ1dHRvbktleSA9PT0gY29uc3RhbnRzLmJ1dHRvblBvc2l0aXZlKSB7XG4gICAgICAgICAgICBidXR0b25Qb3NpdGl2ZS5vblByZXNzICYmIGJ1dHRvblBvc2l0aXZlLm9uUHJlc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBjb25zdGFudHMuZGlzbWlzc2VkKSB7XG4gICAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLm9uRGlzbWlzcyAmJiBvcHRpb25zLm9uRGlzbWlzcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25FcnJvciA9IChlcnJvck1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS53YXJuKGVycm9yTWVzc2FnZSk7XG4gICAgICBOYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZC5zaG93QWxlcnQoY29uZmlnLCBvbkVycm9yLCBvbkFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHByb21wdChcbiAgICB0aXRsZTogP3N0cmluZyxcbiAgICBtZXNzYWdlPzogP3N0cmluZyxcbiAgICBjYWxsYmFja09yQnV0dG9ucz86ID8oKCh0ZXh0OiBzdHJpbmcpID0+IHZvaWQpIHwgQnV0dG9ucyksXG4gICAgdHlwZT86ID9BbGVydFR5cGUgPSAncGxhaW4tdGV4dCcsXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nLFxuICAgIGtleWJvYXJkVHlwZT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogT3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgbGV0IGNhbGxiYWNrczogQXJyYXk8P2FueT4gPSBbXTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXTtcbiAgICAgIGxldCBjYW5jZWxCdXR0b25LZXk7XG4gICAgICBsZXQgZGVzdHJ1Y3RpdmVCdXR0b25LZXk7XG4gICAgICBsZXQgcHJlZmVycmVkQnV0dG9uS2V5O1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja09yQnV0dG9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYWxsYmFja3MgPSBbY2FsbGJhY2tPckJ1dHRvbnNdO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrT3JCdXR0b25zKSkge1xuICAgICAgICBjYWxsYmFja09yQnV0dG9ucy5mb3JFYWNoKChidG4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tzW2luZGV4XSA9IGJ0bi5vblByZXNzO1xuICAgICAgICAgIGlmIChidG4uc3R5bGUgPT09ICdjYW5jZWwnKSB7XG4gICAgICAgICAgICBjYW5jZWxCdXR0b25LZXkgPSBTdHJpbmcoaW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYnRuLnN0eWxlID09PSAnZGVzdHJ1Y3RpdmUnKSB7XG4gICAgICAgICAgICBkZXN0cnVjdGl2ZUJ1dHRvbktleSA9IFN0cmluZyhpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChidG4uaXNQcmVmZXJyZWQpIHtcbiAgICAgICAgICAgIHByZWZlcnJlZEJ1dHRvbktleSA9IFN0cmluZyhpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChidG4udGV4dCB8fCBpbmRleCA8IChjYWxsYmFja09yQnV0dG9ucyB8fCBbXSkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgYnRuRGVmOiB7W251bWJlcl06IHN0cmluZ30gPSB7fTtcbiAgICAgICAgICAgIGJ0bkRlZltpbmRleF0gPSBidG4udGV4dCB8fCAnJztcbiAgICAgICAgICAgIGJ1dHRvbnMucHVzaChidG5EZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIFJDVEFsZXJ0TWFuYWdlci5hbGVydFdpdGhBcmdzKFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8ICcnLFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgdHlwZTogdHlwZSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGNhbmNlbEJ1dHRvbktleSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUJ1dHRvbktleSxcbiAgICAgICAgICBwcmVmZXJyZWRCdXR0b25LZXksXG4gICAgICAgICAga2V5Ym9hcmRUeXBlLFxuICAgICAgICAgIHVzZXJJbnRlcmZhY2VTdHlsZTogb3B0aW9ucz8udXNlckludGVyZmFjZVN0eWxlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICBjYiAmJiBjYih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFsZXJ0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtBcmdzfSBmcm9tICcuL05hdGl2ZUFsZXJ0TWFuYWdlcic7XG5cbmltcG9ydCBOYXRpdmVBbGVydE1hbmFnZXIgZnJvbSAnLi9OYXRpdmVBbGVydE1hbmFnZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxlcnRXaXRoQXJncyhcbiAgICBhcmdzOiBBcmdzLFxuICAgIGNhbGxiYWNrOiAoaWQ6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKE5hdGl2ZUFsZXJ0TWFuYWdlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIE5hdGl2ZUFsZXJ0TWFuYWdlci5hbGVydFdpdGhBcmdzKGFyZ3MsIGNhbGxiYWNrKTtcbiAgfSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBbGVydE1hbmFnZXInO1xuaW1wb3J0IE5hdGl2ZUFsZXJ0TWFuYWdlciBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUFsZXJ0TWFuYWdlcic7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVBbGVydE1hbmFnZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IHR5cGUgQXJncyA9IHt8XG4gIHRpdGxlPzogc3RyaW5nLFxuICBtZXNzYWdlPzogc3RyaW5nLFxuICBidXR0b25zPzogQXJyYXk8T2JqZWN0PiwgLy8gVE9ETyhUNjc1NjUxNjYpOiBoYXZlIGEgYmV0dGVyIHR5cGVcbiAgdHlwZT86IHN0cmluZyxcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nLFxuICBjYW5jZWxCdXR0b25LZXk/OiBzdHJpbmcsXG4gIGRlc3RydWN0aXZlQnV0dG9uS2V5Pzogc3RyaW5nLFxuICBwcmVmZXJyZWRCdXR0b25LZXk/OiBzdHJpbmcsXG4gIGtleWJvYXJkVHlwZT86IHN0cmluZyxcbiAgdXNlckludGVyZmFjZVN0eWxlPzogc3RyaW5nLFxufH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK2FsZXJ0V2l0aEFyZ3M6IChcbiAgICBhcmdzOiBBcmdzLFxuICAgIGNhbGxiYWNrOiAoaWQ6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ0FsZXJ0TWFuYWdlcicpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZCc7XG5pbXBvcnQgTmF0aXZlRGlhbG9nTWFuYWdlckFuZHJvaWQgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZCc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuLyogJ2J1dHRvbkNsaWNrZWQnIHwgJ2Rpc21pc3NlZCcgKi9cbnR5cGUgRGlhbG9nQWN0aW9uID0gc3RyaW5nO1xuLypcbiAgYnV0dG9uUG9zaXRpdmUgPSAtMSxcbiAgYnV0dG9uTmVnYXRpdmUgPSAtMixcbiAgYnV0dG9uTmV1dHJhbCA9IC0zXG4qL1xudHlwZSBEaWFsb2dCdXR0b25LZXkgPSBudW1iZXI7XG5leHBvcnQgdHlwZSBEaWFsb2dPcHRpb25zID0ge3xcbiAgdGl0bGU/OiBzdHJpbmcsXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4gIGJ1dHRvblBvc2l0aXZlPzogc3RyaW5nLFxuICBidXR0b25OZWdhdGl2ZT86IHN0cmluZyxcbiAgYnV0dG9uTmV1dHJhbD86IHN0cmluZyxcbiAgaXRlbXM/OiBBcnJheTxzdHJpbmc+LFxuICBjYW5jZWxhYmxlPzogYm9vbGVhbixcbnx9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8XG4gICAgK2J1dHRvbkNsaWNrZWQ6IERpYWxvZ0FjdGlvbixcbiAgICArZGlzbWlzc2VkOiBEaWFsb2dBY3Rpb24sXG4gICAgK2J1dHRvblBvc2l0aXZlOiBEaWFsb2dCdXR0b25LZXksXG4gICAgK2J1dHRvbk5lZ2F0aXZlOiBEaWFsb2dCdXR0b25LZXksXG4gICAgK2J1dHRvbk5ldXRyYWw6IERpYWxvZ0J1dHRvbktleSxcbiAgfH07XG4gICtzaG93QWxlcnQ6IChcbiAgICBjb25maWc6IERpYWxvZ09wdGlvbnMsXG4gICAgb25FcnJvcjogKGVycm9yOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgb25BY3Rpb246IChhY3Rpb246IERpYWxvZ0FjdGlvbiwgYnV0dG9uS2V5PzogRGlhbG9nQnV0dG9uS2V5KSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPignRGlhbG9nTWFuYWdlckFuZHJvaWQnKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qge3BvbHlmaWxsT2JqZWN0UHJvcGVydHl9ID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL1BvbHlmaWxsRnVuY3Rpb25zJyk7XG5cbmNvbnN0IG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5pZiAobmF2aWdhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2Nhbm5vdC13cml0ZV0gVGhlIGdsb2JhbCBpc24ndCB3cml0YWJsZSBhbnl3aGVyZSBidXQgaGVyZSwgd2hlcmUgd2UgZGVmaW5lIGl0LlxuICBnbG9iYWwubmF2aWdhdG9yID0ge3Byb2R1Y3Q6ICdSZWFjdE5hdGl2ZSd9O1xufSBlbHNlIHtcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvaXNzdWVzLzEwODgxXG4gIHBvbHlmaWxsT2JqZWN0UHJvcGVydHkobmF2aWdhdG9yLCAncHJvZHVjdCcsICgpID0+ICdSZWFjdE5hdGl2ZScpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubGV0IHJlZ2lzdGVyTW9kdWxlO1xuaWYgKGdsb2JhbC5STiRCcmlkZ2VsZXNzID09PSB0cnVlICYmIGdsb2JhbC5STiRyZWdpc3RlckNhbGxhYmxlTW9kdWxlKSB7XG4gIHJlZ2lzdGVyTW9kdWxlID0gZ2xvYmFsLlJOJHJlZ2lzdGVyQ2FsbGFibGVNb2R1bGU7XG59IGVsc2Uge1xuICBjb25zdCBCYXRjaGVkQnJpZGdlID0gcmVxdWlyZSgnLi4vQmF0Y2hlZEJyaWRnZS9CYXRjaGVkQnJpZGdlJyk7XG4gIHJlZ2lzdGVyTW9kdWxlID0gKFxuICAgIG1vZHVsZU5hbWU6XG4gICAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdHbG9iYWxQZXJmb3JtYW5jZUxvZ2dlcic+XG4gICAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdITVJDbGllbnQnPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnSGVhcENhcHR1cmUnPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnSlNUaW1lcnMnPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnUkNURGV2aWNlRXZlbnRFbWl0dGVyJz5cbiAgICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J1JDVExvZyc+XG4gICAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdSQ1ROYXRpdmVBcHBFdmVudEVtaXR0ZXInPlxuICAgICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnU2FtcGxpbmdQcm9maWxlcic+XG4gICAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdTeXN0cmFjZSc+LFxuICAgIC8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICAgIGZhY3RvcnksXG4gICkgPT4gQmF0Y2hlZEJyaWRnZS5yZWdpc3RlckxhenlDYWxsYWJsZU1vZHVsZShtb2R1bGVOYW1lLCBmYWN0b3J5KTtcbn1cblxucmVnaXN0ZXJNb2R1bGUoJ1N5c3RyYWNlJywgKCkgPT4gcmVxdWlyZSgnLi4vUGVyZm9ybWFuY2UvU3lzdHJhY2UnKSk7XG5pZiAoIShnbG9iYWwuUk4kQnJpZGdlbGVzcyA9PT0gdHJ1ZSkpIHtcbiAgcmVnaXN0ZXJNb2R1bGUoJ0pTVGltZXJzJywgKCkgPT4gcmVxdWlyZSgnLi9UaW1lcnMvSlNUaW1lcnMnKSk7XG59XG5yZWdpc3Rlck1vZHVsZSgnSGVhcENhcHR1cmUnLCAoKSA9PiByZXF1aXJlKCcuLi9IZWFwQ2FwdHVyZS9IZWFwQ2FwdHVyZScpKTtcbnJlZ2lzdGVyTW9kdWxlKCdTYW1wbGluZ1Byb2ZpbGVyJywgKCkgPT5cbiAgcmVxdWlyZSgnLi4vUGVyZm9ybWFuY2UvU2FtcGxpbmdQcm9maWxlcicpLFxuKTtcbnJlZ2lzdGVyTW9kdWxlKCdSQ1RMb2cnLCAoKSA9PiByZXF1aXJlKCcuLi9VdGlsaXRpZXMvUkNUTG9nJykpO1xucmVnaXN0ZXJNb2R1bGUoXG4gICdSQ1REZXZpY2VFdmVudEVtaXR0ZXInLFxuICAoKSA9PiByZXF1aXJlKCcuLi9FdmVudEVtaXR0ZXIvUkNURGV2aWNlRXZlbnRFbWl0dGVyJykuZGVmYXVsdCxcbik7XG5yZWdpc3Rlck1vZHVsZSgnUkNUTmF0aXZlQXBwRXZlbnRFbWl0dGVyJywgKCkgPT5cbiAgcmVxdWlyZSgnLi4vRXZlbnRFbWl0dGVyL1JDVE5hdGl2ZUFwcEV2ZW50RW1pdHRlcicpLFxuKTtcbnJlZ2lzdGVyTW9kdWxlKCdHbG9iYWxQZXJmb3JtYW5jZUxvZ2dlcicsICgpID0+XG4gIHJlcXVpcmUoJy4uL1V0aWxpdGllcy9HbG9iYWxQZXJmb3JtYW5jZUxvZ2dlcicpLFxuKTtcblxuaWYgKF9fREVWX18pIHtcbiAgcmVnaXN0ZXJNb2R1bGUoJ0hNUkNsaWVudCcsICgpID0+IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9ITVJDbGllbnQnKSk7XG59IGVsc2Uge1xuICByZWdpc3Rlck1vZHVsZSgnSE1SQ2xpZW50JywgKCkgPT4gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL0hNUkNsaWVudFByb2RTaGltJykpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbmltcG9ydCBOYXRpdmVKU0NIZWFwQ2FwdHVyZSBmcm9tICcuL05hdGl2ZUpTQ0hlYXBDYXB0dXJlJztcblxuY29uc3QgSGVhcENhcHR1cmUgPSB7XG4gIGNhcHR1cmVIZWFwOiBmdW5jdGlvbiAocGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgZ2xvYmFsLm5hdGl2ZUNhcHR1cmVIZWFwKHBhdGgpO1xuICAgICAgY29uc29sZS5sb2coJ0hlYXBDYXB0dXJlLmNhcHR1cmVIZWFwIHN1Y2NlZWRlZDogJyArIHBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdIZWFwQ2FwdHVyZS5jYXB0dXJlSGVhcCBlcnJvcjogJyArIGUudG9TdHJpbmcoKSk7XG4gICAgICBlcnJvciA9IGUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKE5hdGl2ZUpTQ0hlYXBDYXB0dXJlKSB7XG4gICAgICBOYXRpdmVKU0NIZWFwQ2FwdHVyZS5jYXB0dXJlQ29tcGxldGUocGF0aCwgZXJyb3IpO1xuICAgIH1cbiAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhcENhcHR1cmU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVKU0NIZWFwQ2FwdHVyZSc7XG5pbXBvcnQgTmF0aXZlSlNDSGVhcENhcHR1cmUgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVKU0NIZWFwQ2FwdHVyZSc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVKU0NIZWFwQ2FwdHVyZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArY2FwdHVyZUNvbXBsZXRlOiAocGF0aDogc3RyaW5nLCBlcnJvcjogP3N0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdKU0NIZWFwQ2FwdHVyZScpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBTYW1wbGluZ1Byb2ZpbGVyID0ge1xuICBwb2tlOiBmdW5jdGlvbiAodG9rZW46IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGdsb2JhbC5wb2tlU2FtcGxpbmdQcm9maWxlcigpO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLmxvZygnVGhlIEpTQyBTYW1wbGluZyBQcm9maWxlciBoYXMgc3RhcnRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBKU0MgU2FtcGxpbmcgUHJvZmlsZXIgaGFzIHN0b3BwZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ0Vycm9yIG9jY3VycmVkIHdoZW4gcmVzdGFydGluZyBTYW1wbGluZyBQcm9maWxlcjogJyArIGUudG9TdHJpbmcoKSxcbiAgICAgICk7XG4gICAgICBlcnJvciA9IGUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBjb25zdCBOYXRpdmVKU0NTYW1wbGluZ1Byb2ZpbGVyID1cbiAgICAgIHJlcXVpcmUoJy4vTmF0aXZlSlNDU2FtcGxpbmdQcm9maWxlcicpLmRlZmF1bHQ7XG4gICAgaWYgKE5hdGl2ZUpTQ1NhbXBsaW5nUHJvZmlsZXIpIHtcbiAgICAgIE5hdGl2ZUpTQ1NhbXBsaW5nUHJvZmlsZXIub3BlcmF0aW9uQ29tcGxldGUodG9rZW4sIHJlc3VsdCwgZXJyb3IpO1xuICAgIH1cbiAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2FtcGxpbmdQcm9maWxlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUpTQ1NhbXBsaW5nUHJvZmlsZXInO1xuaW1wb3J0IE5hdGl2ZUpTQ1NhbXBsaW5nUHJvZmlsZXIgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVKU0NTYW1wbGluZ1Byb2ZpbGVyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZUpTQ1NhbXBsaW5nUHJvZmlsZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK29wZXJhdGlvbkNvbXBsZXRlOiAodG9rZW46IG51bWJlciwgcmVzdWx0OiA/c3RyaW5nLCBlcnJvcjogP3N0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdKU0NTYW1wbGluZ1Byb2ZpbGVyJyk6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgUkNURGV2aWNlRXZlbnRFbWl0dGVyIGZyb20gJy4vUkNURGV2aWNlRXZlbnRFbWl0dGVyJztcblxuLyoqXG4gKiBEZXByZWNhdGVkIC0gc3ViY2xhc3MgTmF0aXZlRXZlbnRFbWl0dGVyIHRvIGNyZWF0ZSBncmFudWxhciBldmVudCBtb2R1bGVzIGluc3RlYWQgb2ZcbiAqIGFkZGluZyBhbGwgZXZlbnQgbGlzdGVuZXJzIGRpcmVjdGx5IHRvIFJDVE5hdGl2ZUFwcEV2ZW50RW1pdHRlci5cbiAqL1xuY29uc3QgUkNUTmF0aXZlQXBwRXZlbnRFbWl0dGVyID0gUkNURGV2aWNlRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSQ1ROYXRpdmVBcHBFdmVudEVtaXR0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge0V4dGVuZGVkRXJyb3J9IGZyb20gJy4uL0NvcmUvRXh0ZW5kZWRFcnJvcic7XG5cbmltcG9ydCBnZXREZXZTZXJ2ZXIgZnJvbSAnLi4vQ29yZS9EZXZ0b29scy9nZXREZXZTZXJ2ZXInO1xuaW1wb3J0IExvZ0JveCBmcm9tICcuLi9Mb2dCb3gvTG9nQm94JztcbmltcG9ydCBOYXRpdmVSZWRCb3ggZnJvbSAnLi4vTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVSZWRCb3gnO1xuXG5jb25zdCBEZXZTZXR0aW5ncyA9IHJlcXVpcmUoJy4vRGV2U2V0dGluZ3MnKTtcbmNvbnN0IFBsYXRmb3JtID0gcmVxdWlyZSgnLi9QbGF0Zm9ybScpO1xuY29uc3QgaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5jb25zdCBNZXRyb0hNUkNsaWVudCA9IHJlcXVpcmUoJ21ldHJvLXJ1bnRpbWUvc3JjL21vZHVsZXMvSE1SQ2xpZW50Jyk7XG5jb25zdCBwcmV0dHlGb3JtYXQgPSByZXF1aXJlKCdwcmV0dHktZm9ybWF0Jyk7XG5cbmNvbnN0IHBlbmRpbmdFbnRyeVBvaW50cyA9IFtdO1xubGV0IGhtckNsaWVudCA9IG51bGw7XG5sZXQgaG1yVW5hdmFpbGFibGVSZWFzb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xubGV0IGN1cnJlbnRDb21waWxlRXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbmxldCBkaWRDb25uZWN0OiBib29sZWFuID0gZmFsc2U7XG5sZXQgcGVuZGluZ0xvZ3M6IEFycmF5PFtMb2dMZXZlbCwgJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+XT4gPSBbXTtcblxudHlwZSBMb2dMZXZlbCA9XG4gIHwgJ3RyYWNlJ1xuICB8ICdpbmZvJ1xuICB8ICd3YXJuJ1xuICB8ICdlcnJvcidcbiAgfCAnbG9nJ1xuICB8ICdncm91cCdcbiAgfCAnZ3JvdXBDb2xsYXBzZWQnXG4gIHwgJ2dyb3VwRW5kJ1xuICB8ICdkZWJ1Zyc7XG5cbmV4cG9ydCB0eXBlIEhNUkNsaWVudE5hdGl2ZUludGVyZmFjZSA9IHt8XG4gIGVuYWJsZSgpOiB2b2lkLFxuICBkaXNhYmxlKCk6IHZvaWQsXG4gIHJlZ2lzdGVyQnVuZGxlKHJlcXVlc3RVcmw6IHN0cmluZyk6IHZvaWQsXG4gIGxvZyhsZXZlbDogTG9nTGV2ZWwsIGRhdGE6ICRSZWFkT25seUFycmF5PG1peGVkPik6IHZvaWQsXG4gIHNldHVwKFxuICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgYnVuZGxlRW50cnk6IHN0cmluZyxcbiAgICBob3N0OiBzdHJpbmcsXG4gICAgcG9ydDogbnVtYmVyIHwgc3RyaW5nLFxuICAgIGlzRW5hYmxlZDogYm9vbGVhbixcbiAgICBzY2hlbWU/OiBzdHJpbmcsXG4gICk6IHZvaWQsXG58fTtcblxuLyoqXG4gKiBITVIgQ2xpZW50IHRoYXQgcmVjZWl2ZXMgZnJvbSB0aGUgc2VydmVyIEhNUiB1cGRhdGVzIGFuZCBwcm9wYWdhdGVzIHRoZW1cbiAqIHJ1bnRpbWUgdG8gcmVmbGVjdHMgdGhvc2UgY2hhbmdlcy5cbiAqL1xuY29uc3QgSE1SQ2xpZW50OiBITVJDbGllbnROYXRpdmVJbnRlcmZhY2UgPSB7XG4gIGVuYWJsZSgpIHtcbiAgICBpZiAoaG1yVW5hdmFpbGFibGVSZWFzb24gIT09IG51bGwpIHtcbiAgICAgIC8vIElmIEhNUiBiZWNhbWUgdW5hdmFpbGFibGUgd2hpbGUgeW91IHdlcmVuJ3QgdXNpbmcgaXQsXG4gICAgICAvLyBleHBsYWluIHdoeSB3aGVuIHlvdSB0cnkgdG8gdHVybiBpdCBvbi5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZXJyb3IgKGFuZCBub3QgYSB3YXJuaW5nKSBiZWNhdXNlIGl0IGlzIHNob3duXG4gICAgICAvLyBpbiByZXNwb25zZSB0byBhIGRpcmVjdCB1c2VyIGFjdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihobXJVbmF2YWlsYWJsZVJlYXNvbik7XG4gICAgfVxuXG4gICAgaW52YXJpYW50KGhtckNsaWVudCwgJ0V4cGVjdGVkIEhNUkNsaWVudC5zZXR1cCgpIGNhbGwgYXQgc3RhcnR1cC4nKTtcbiAgICBjb25zdCBMb2FkaW5nVmlldyA9IHJlcXVpcmUoJy4vTG9hZGluZ1ZpZXcnKTtcblxuICAgIC8vIFdlIHVzZSB0aGlzIGZvciBpbnRlcm5hbCBsb2dnaW5nIG9ubHkuXG4gICAgLy8gSXQgZG9lc24ndCBhZmZlY3QgdGhlIGxvZ2ljLlxuICAgIGhtckNsaWVudC5zZW5kKEpTT04uc3RyaW5naWZ5KHt0eXBlOiAnbG9nLW9wdC1pbid9KSk7XG5cbiAgICAvLyBXaGVuIHRvZ2dsaW5nIEZhc3QgUmVmcmVzaCBvbiwgd2UgbWlnaHQgYWxyZWFkeSBoYXZlIHNvbWUgc3Rhc2hlZCB1cGRhdGVzLlxuICAgIC8vIFNpbmNlIHRoZXknbGwgZ2V0IGFwcGxpZWQgbm93LCB3ZSdsbCBzaG93IGEgYmFubmVyLlxuICAgIGNvbnN0IGhhc1VwZGF0ZXMgPSBobXJDbGllbnQuaGFzUGVuZGluZ1VwZGF0ZXMoKTtcblxuICAgIGlmIChoYXNVcGRhdGVzKSB7XG4gICAgICBMb2FkaW5nVmlldy5zaG93TWVzc2FnZSgnUmVmcmVzaGluZy4uLicsICdyZWZyZXNoJyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBobXJDbGllbnQuZW5hYmxlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChoYXNVcGRhdGVzKSB7XG4gICAgICAgIExvYWRpbmdWaWV3LmhpZGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGVyZSBjb3VsZCBiZSBhIGNvbXBpbGUgZXJyb3Igd2hpbGUgRmFzdCBSZWZyZXNoIHdhcyBvZmYsXG4gICAgLy8gYnV0IHdlIGlnbm9yZWQgaXQgYXQgdGhlIHRpbWUuIFNob3cgaXQgbm93LlxuICAgIHNob3dDb21waWxlRXJyb3IoKTtcbiAgfSxcblxuICBkaXNhYmxlKCkge1xuICAgIGludmFyaWFudChobXJDbGllbnQsICdFeHBlY3RlZCBITVJDbGllbnQuc2V0dXAoKSBjYWxsIGF0IHN0YXJ0dXAuJyk7XG4gICAgaG1yQ2xpZW50LmRpc2FibGUoKTtcbiAgfSxcblxuICByZWdpc3RlckJ1bmRsZShyZXF1ZXN0VXJsOiBzdHJpbmcpIHtcbiAgICBpbnZhcmlhbnQoaG1yQ2xpZW50LCAnRXhwZWN0ZWQgSE1SQ2xpZW50LnNldHVwKCkgY2FsbCBhdCBzdGFydHVwLicpO1xuICAgIHBlbmRpbmdFbnRyeVBvaW50cy5wdXNoKHJlcXVlc3RVcmwpO1xuICAgIHJlZ2lzdGVyQnVuZGxlRW50cnlQb2ludHMoaG1yQ2xpZW50KTtcbiAgfSxcblxuICBsb2cobGV2ZWw6IExvZ0xldmVsLCBkYXRhOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4pIHtcbiAgICBpZiAoIWhtckNsaWVudCkge1xuICAgICAgLy8gQ2F0Y2ggYSByZWFzb25hYmxlIG51bWJlciBvZiBlYXJseSBsb2dzXG4gICAgICAvLyBpbiBjYXNlIGhtckNsaWVudCBnZXRzIGluaXRpYWxpemVkIGxhdGVyLlxuICAgICAgcGVuZGluZ0xvZ3MucHVzaChbbGV2ZWwsIGRhdGFdKTtcbiAgICAgIGlmIChwZW5kaW5nTG9ncy5sZW5ndGggPiAxMDApIHtcbiAgICAgICAgcGVuZGluZ0xvZ3Muc2hpZnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGhtckNsaWVudC5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgdHlwZTogJ2xvZycsXG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgbW9kZTogZ2xvYmFsLlJOJEJyaWRnZWxlc3MgPT09IHRydWUgPyAnTk9CUklER0UnIDogJ0JSSURHRScsXG4gICAgICAgICAgZGF0YTogZGF0YS5tYXAoaXRlbSA9PlxuICAgICAgICAgICAgdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgID8gaXRlbVxuICAgICAgICAgICAgICA6IHByZXR0eUZvcm1hdChpdGVtLCB7XG4gICAgICAgICAgICAgICAgICBlc2NhcGVTdHJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBtYXhEZXB0aDogMyxcbiAgICAgICAgICAgICAgICAgIG1pbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnM6IFtwcmV0dHlGb3JtYXQucGx1Z2lucy5SZWFjdEVsZW1lbnRdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWYgc2VuZGluZyBsb2dzIGNhdXNlcyBhbnkgZmFpbHVyZXMgd2Ugd2FudCB0byBzaWxlbnRseSBpZ25vcmUgdGhlbVxuICAgICAgLy8gdG8gZW5zdXJlIHdlIGRvIG5vdCBjYXVzZSBpbmZpbml0ZS1sb2dnaW5nIGxvb3BzLlxuICAgIH1cbiAgfSxcblxuICAvLyBDYWxsZWQgb25jZSBieSB0aGUgYnJpZGdlIG9uIHN0YXJ0dXAsIGV2ZW4gaWYgRmFzdCBSZWZyZXNoIGlzIG9mZi5cbiAgLy8gSXQgY3JlYXRlcyB0aGUgSE1SIGNsaWVudCBidXQgZG9lc24ndCBhY3R1YWxseSBzZXQgdXAgdGhlIHNvY2tldCB5ZXQuXG4gIHNldHVwKFxuICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgYnVuZGxlRW50cnk6IHN0cmluZyxcbiAgICBob3N0OiBzdHJpbmcsXG4gICAgcG9ydDogbnVtYmVyIHwgc3RyaW5nLFxuICAgIGlzRW5hYmxlZDogYm9vbGVhbixcbiAgICBzY2hlbWU/OiBzdHJpbmcgPSAnaHR0cCcsXG4gICkge1xuICAgIGludmFyaWFudChwbGF0Zm9ybSwgJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyIGBwbGF0Zm9ybWAnKTtcbiAgICBpbnZhcmlhbnQoYnVuZGxlRW50cnksICdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciBgYnVuZGxlRW50cnlgJyk7XG4gICAgaW52YXJpYW50KGhvc3QsICdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciBgaG9zdGAnKTtcbiAgICBpbnZhcmlhbnQoIWhtckNsaWVudCwgJ0Nhbm5vdCBpbml0aWFsaXplIGhtckNsaWVudCB0d2ljZScpO1xuXG4gICAgLy8gTW92aW5nIHRvIHRvcCBnaXZlcyBlcnJvcnMgZHVlIHRvIE5hdGl2ZU1vZHVsZXMgbm90IGJlaW5nIGluaXRpYWxpemVkXG4gICAgY29uc3QgTG9hZGluZ1ZpZXcgPSByZXF1aXJlKCcuL0xvYWRpbmdWaWV3Jyk7XG5cbiAgICBjb25zdCBzZXJ2ZXJIb3N0ID0gcG9ydCAhPT0gbnVsbCAmJiBwb3J0ICE9PSAnJyA/IGAke2hvc3R9OiR7cG9ydH1gIDogaG9zdDtcblxuICAgIGNvbnN0IHNlcnZlclNjaGVtZSA9IHNjaGVtZTtcblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBNZXRyb0hNUkNsaWVudChgJHtzZXJ2ZXJTY2hlbWV9Oi8vJHtzZXJ2ZXJIb3N0fS9ob3RgKTtcblxuICAgIGhtckNsaWVudCA9IGNsaWVudDtcblxuICAgIGNvbnN0IHtmdWxsQnVuZGxlVXJsfSA9IGdldERldlNlcnZlcigpO1xuICAgIHBlbmRpbmdFbnRyeVBvaW50cy5wdXNoKFxuICAgICAgLy8gSE1SU2VydmVyIHVuZGVyc3RhbmRzIHJlZ3VsYXIgYnVuZGxlIFVSTHMsIHNvIHByZWZlciB0aGF0IGluIGNhc2VcbiAgICAgIC8vIHRoZXJlIGFyZSBhbnkgaW1wb3J0YW50IFVSTCBwYXJhbWV0ZXJzIHdlIGNhbid0IHJlY29uc3RydWN0IGZyb21cbiAgICAgIC8vIGBzZXR1cCgpYCdzIGFyZ3VtZW50cy5cbiAgICAgIGZ1bGxCdW5kbGVVcmwgPz9cbiAgICAgICAgYCR7c2VydmVyU2NoZW1lfTovLyR7c2VydmVySG9zdH0vaG90P2J1bmRsZUVudHJ5PSR7YnVuZGxlRW50cnl9JnBsYXRmb3JtPSR7cGxhdGZvcm19YCxcbiAgICApO1xuXG4gICAgY2xpZW50Lm9uKCdjb25uZWN0aW9uLWVycm9yJywgZSA9PiB7XG4gICAgICBsZXQgZXJyb3IgPSBgQ2Fubm90IGNvbm5lY3QgdG8gTWV0cm8uXG5cblRyeSB0aGUgZm9sbG93aW5nIHRvIGZpeCB0aGUgaXNzdWU6XG4tIEVuc3VyZSB0aGF0IE1ldHJvIGlzIHJ1bm5pbmcgYW5kIGF2YWlsYWJsZSBvbiB0aGUgc2FtZSBuZXR3b3JrYDtcblxuICAgICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgICBlcnJvciArPSBgXG4tIEVuc3VyZSB0aGF0IHRoZSBNZXRybyBVUkwgaXMgY29ycmVjdGx5IHNldCBpbiBBcHBEZWxlZ2F0ZWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciArPSBgXG4tIEVuc3VyZSB0aGF0IHlvdXIgZGV2aWNlL2VtdWxhdG9yIGlzIGNvbm5lY3RlZCB0byB5b3VyIG1hY2hpbmUgYW5kIGhhcyBVU0IgZGVidWdnaW5nIGVuYWJsZWQgLSBydW4gJ2FkYiBkZXZpY2VzJyB0byBzZWUgYSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzXG4tIElmIHlvdSdyZSBvbiBhIHBoeXNpY2FsIGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbWFjaGluZSwgcnVuICdhZGIgcmV2ZXJzZSB0Y3A6ODA4MSB0Y3A6ODA4MScgdG8gZm9yd2FyZCByZXF1ZXN0cyBmcm9tIHlvdXIgZGV2aWNlXG4tIElmIHlvdXIgZGV2aWNlIGlzIG9uIHRoZSBzYW1lIFdpLUZpIG5ldHdvcmssIHNldCAnRGVidWcgc2VydmVyIGhvc3QgJiBwb3J0IGZvciBkZXZpY2UnIGluICdEZXYgc2V0dGluZ3MnIHRvIHlvdXIgbWFjaGluZSdzIElQIGFkZHJlc3MgYW5kIHRoZSBwb3J0IG9mIHRoZSBsb2NhbCBkZXYgc2VydmVyIC0gZS5nLiAxMC4wLjEuMTo4MDgxYDtcbiAgICAgIH1cblxuICAgICAgZXJyb3IgKz0gYFxuXG5VUkw6ICR7aG9zdH06JHtwb3J0fVxuXG5FcnJvcjogJHtlLm1lc3NhZ2V9YDtcblxuICAgICAgc2V0SE1SVW5hdmFpbGFibGVSZWFzb24oZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uKCd1cGRhdGUtc3RhcnQnLCAoe2lzSW5pdGlhbFVwZGF0ZX0pID0+IHtcbiAgICAgIGN1cnJlbnRDb21waWxlRXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgICAgIGRpZENvbm5lY3QgPSB0cnVlO1xuXG4gICAgICBpZiAoY2xpZW50LmlzRW5hYmxlZCgpICYmICFpc0luaXRpYWxVcGRhdGUpIHtcbiAgICAgICAgTG9hZGluZ1ZpZXcuc2hvd01lc3NhZ2UoJ1JlZnJlc2hpbmcuLi4nLCAncmVmcmVzaCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uKCd1cGRhdGUnLCAoe2lzSW5pdGlhbFVwZGF0ZX0pID0+IHtcbiAgICAgIGlmIChjbGllbnQuaXNFbmFibGVkKCkgJiYgIWlzSW5pdGlhbFVwZGF0ZSkge1xuICAgICAgICBkaXNtaXNzUmVkYm94KCk7XG4gICAgICAgIExvZ0JveC5jbGVhckFsbExvZ3MoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNsaWVudC5vbigndXBkYXRlLWRvbmUnLCAoKSA9PiB7XG4gICAgICBMb2FkaW5nVmlldy5oaWRlKCk7XG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oJ2Vycm9yJywgZGF0YSA9PiB7XG4gICAgICBMb2FkaW5nVmlldy5oaWRlKCk7XG5cbiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdHcmFwaE5vdEZvdW5kRXJyb3InKSB7XG4gICAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgICAgICBzZXRITVJVbmF2YWlsYWJsZVJlYXNvbihcbiAgICAgICAgICAnTWV0cm8gaGFzIHJlc3RhcnRlZCBzaW5jZSB0aGUgbGFzdCBlZGl0LiBSZWxvYWQgdG8gcmVjb25uZWN0LicsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ1JldmlzaW9uTm90Rm91bmRFcnJvcicpIHtcbiAgICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgICAgIHNldEhNUlVuYXZhaWxhYmxlUmVhc29uKFxuICAgICAgICAgICdNZXRybyBhbmQgdGhlIGNsaWVudCBhcmUgb3V0IG9mIHN5bmMuIFJlbG9hZCB0byByZWNvbm5lY3QuJyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRDb21waWxlRXJyb3JNZXNzYWdlID0gYCR7ZGF0YS50eXBlfSAke2RhdGEubWVzc2FnZX1gO1xuICAgICAgICBpZiAoY2xpZW50LmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgc2hvd0NvbXBpbGVFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oJ2Nsb3NlJywgY2xvc2VFdmVudCA9PiB7XG4gICAgICBMb2FkaW5nVmlldy5oaWRlKCk7XG5cbiAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTcuMS41XG4gICAgICBjb25zdCBpc05vcm1hbE9yVW5zZXRDbG9zZVJlYXNvbiA9XG4gICAgICAgIGNsb3NlRXZlbnQgPT0gbnVsbCB8fFxuICAgICAgICBjbG9zZUV2ZW50LmNvZGUgPT09IDEwMDAgfHxcbiAgICAgICAgY2xvc2VFdmVudC5jb2RlID09PSAxMDA1IHx8XG4gICAgICAgIGNsb3NlRXZlbnQuY29kZSA9PSBudWxsO1xuXG4gICAgICBzZXRITVJVbmF2YWlsYWJsZVJlYXNvbihcbiAgICAgICAgYCR7XG4gICAgICAgICAgaXNOb3JtYWxPclVuc2V0Q2xvc2VSZWFzb25cbiAgICAgICAgICAgID8gJ0Rpc2Nvbm5lY3RlZCBmcm9tIE1ldHJvLidcbiAgICAgICAgICAgIDogYERpc2Nvbm5lY3RlZCBmcm9tIE1ldHJvICgke2Nsb3NlRXZlbnQuY29kZX06IFwiJHtjbG9zZUV2ZW50LnJlYXNvbn1cIikuYFxuICAgICAgICB9XG5cblRvIHJlY29ubmVjdDpcbi0gRW5zdXJlIHRoYXQgTWV0cm8gaXMgcnVubmluZyBhbmQgYXZhaWxhYmxlIG9uIHRoZSBzYW1lIG5ldHdvcmtcbi0gUmVsb2FkIHRoaXMgYXBwICh3aWxsIHRyaWdnZXIgZnVydGhlciBoZWxwIGlmIE1ldHJvIGNhbm5vdCBiZSBjb25uZWN0ZWQgdG8pXG4gICAgICBgLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChpc0VuYWJsZWQpIHtcbiAgICAgIEhNUkNsaWVudC5lbmFibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSE1SQ2xpZW50LmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICByZWdpc3RlckJ1bmRsZUVudHJ5UG9pbnRzKGhtckNsaWVudCk7XG4gICAgZmx1c2hFYXJseUxvZ3MoaG1yQ2xpZW50KTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHNldEhNUlVuYXZhaWxhYmxlUmVhc29uKHJlYXNvbjogc3RyaW5nKSB7XG4gIGludmFyaWFudChobXJDbGllbnQsICdFeHBlY3RlZCBITVJDbGllbnQuc2V0dXAoKSBjYWxsIGF0IHN0YXJ0dXAuJyk7XG4gIGlmIChobXJVbmF2YWlsYWJsZVJlYXNvbiAhPT0gbnVsbCkge1xuICAgIC8vIERvbid0IHNob3cgbW9yZSB0aGFuIG9uZSB3YXJuaW5nLlxuICAgIHJldHVybjtcbiAgfVxuICBobXJVbmF2YWlsYWJsZVJlYXNvbiA9IHJlYXNvbjtcblxuICAvLyBXZSBvbmx5IHdhbnQgdG8gc2hvdyBhIHdhcm5pbmcgaWYgRmFzdCBSZWZyZXNoIGlzIG9uICphbmQqIGlmIHdlIGV2ZXJcbiAgLy8gcHJldmlvdXNseSBtYW5hZ2VkIHRvIGNvbm5lY3Qgc3VjY2Vzc2Z1bGx5LiBXZSBkb24ndCB3YW50IHRvIHNob3dcbiAgLy8gdGhlIHdhcm5pbmcgdG8gbmF0aXZlIGVuZ2luZWVycyB3aG8gdXNlIGNhY2hlZCBidW5kbGVzIHdpdGhvdXQgTWV0cm8uXG4gIGlmIChobXJDbGllbnQuaXNFbmFibGVkKCkgJiYgZGlkQ29ubmVjdCkge1xuICAgIGNvbnNvbGUud2FybihyZWFzb24pO1xuICAgIC8vIChOb3QgdXNpbmcgdGhlIGB3YXJuaW5nYCBtb2R1bGUgdG8gcHJldmVudCBhIEJ1Y2sgY3ljbGUuKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyQnVuZGxlRW50cnlQb2ludHMoY2xpZW50OiBNZXRyb0hNUkNsaWVudCkge1xuICBpZiAoaG1yVW5hdmFpbGFibGVSZWFzb24gIT0gbnVsbCkge1xuICAgIERldlNldHRpbmdzLnJlbG9hZCgnQnVuZGxlIFNwbGl0dGluZyDigJMgTWV0cm8gZGlzY29ubmVjdGVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHBlbmRpbmdFbnRyeVBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgY2xpZW50LnNlbmQoXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHR5cGU6ICdyZWdpc3Rlci1lbnRyeXBvaW50cycsXG4gICAgICAgIGVudHJ5UG9pbnRzOiBwZW5kaW5nRW50cnlQb2ludHMsXG4gICAgICB9KSxcbiAgICApO1xuICAgIHBlbmRpbmdFbnRyeVBvaW50cy5sZW5ndGggPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoRWFybHlMb2dzKGNsaWVudDogTWV0cm9ITVJDbGllbnQpIHtcbiAgdHJ5IHtcbiAgICBwZW5kaW5nTG9ncy5mb3JFYWNoKChbbGV2ZWwsIGRhdGFdKSA9PiB7XG4gICAgICBITVJDbGllbnQubG9nKGxldmVsLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwZW5kaW5nTG9ncy5sZW5ndGggPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc21pc3NSZWRib3goKSB7XG4gIGlmIChcbiAgICBQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgJiZcbiAgICBOYXRpdmVSZWRCb3ggIT0gbnVsbCAmJlxuICAgIE5hdGl2ZVJlZEJveC5kaXNtaXNzICE9IG51bGxcbiAgKSB7XG4gICAgTmF0aXZlUmVkQm94LmRpc21pc3MoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBOYXRpdmVFeGNlcHRpb25zTWFuYWdlciA9XG4gICAgICByZXF1aXJlKCcuLi9Db3JlL05hdGl2ZUV4Y2VwdGlvbnNNYW5hZ2VyJykuZGVmYXVsdDtcbiAgICBOYXRpdmVFeGNlcHRpb25zTWFuYWdlciAmJlxuICAgICAgTmF0aXZlRXhjZXB0aW9uc01hbmFnZXIuZGlzbWlzc1JlZGJveCAmJlxuICAgICAgTmF0aXZlRXhjZXB0aW9uc01hbmFnZXIuZGlzbWlzc1JlZGJveCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3dDb21waWxlRXJyb3IoKSB7XG4gIGlmIChjdXJyZW50Q29tcGlsZUVycm9yTWVzc2FnZSA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEV2ZW4gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlZGJveCwgc3ludGF4IGVycm9ycyBhcmUgbW9yZSBpbXBvcnRhbnQuXG4gIC8vIE90aGVyd2lzZSB5b3UgcmlzayBzZWVpbmcgYSBzdGFsZSBydW50aW1lIGVycm9yIHdoaWxlIGEgc3ludGF4IGVycm9yIGlzIG1vcmUgcmVjZW50LlxuICBkaXNtaXNzUmVkYm94KCk7XG5cbiAgY29uc3QgbWVzc2FnZSA9IGN1cnJlbnRDb21waWxlRXJyb3JNZXNzYWdlO1xuICBjdXJyZW50Q29tcGlsZUVycm9yTWVzc2FnZSA9IG51bGw7XG5cbiAgLyogJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXNcbiAgICogcGFyYW1ldGVycyAqL1xuICBjb25zdCBlcnJvcjogRXh0ZW5kZWRFcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgLy8gU3ltYm9saWNhdGluZyBjb21waWxlIGVycm9ycyBpcyB3YXN0ZWQgZWZmb3J0XG4gIC8vIGJlY2F1c2UgdGhlIHN0YWNrIHRyYWNlIGlzIG1lYW5pbmdsZXNzOlxuICBlcnJvci5wcmV2ZW50U3ltYm9saWNhdGlvbiA9IHRydWU7XG4gIHRocm93IGVycm9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhNUkNsaWVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVJlZEJveCc7XG5pbXBvcnQgTmF0aXZlUmVkQm94IGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlUmVkQm94JztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVJlZEJveDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtzZXRFeHRyYURhdGE6IChleHRyYURhdGE6IE9iamVjdCwgZm9ySWRlbnRpZmllcjogc3RyaW5nKSA9PiB2b2lkO1xuICArZGlzbWlzczogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdSZWRCb3gnKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCBwcm9jZXNzQ29sb3IgZnJvbSAnLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IEFwcGVhcmFuY2UgZnJvbSAnLi9BcHBlYXJhbmNlJztcbmltcG9ydCBOYXRpdmVEZXZMb2FkaW5nVmlldyBmcm9tICcuL05hdGl2ZURldkxvYWRpbmdWaWV3JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNob3dNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ2xvYWQnIHwgJ3JlZnJlc2gnKSB7XG4gICAgaWYgKE5hdGl2ZURldkxvYWRpbmdWaWV3KSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ3JlZnJlc2gnKSB7XG4gICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHByb2Nlc3NDb2xvcignIzI1ODRlOCcpO1xuICAgICAgICBjb25zdCB0ZXh0Q29sb3IgPSBwcm9jZXNzQ29sb3IoJyNmZmZmZmYnKTtcblxuICAgICAgICBOYXRpdmVEZXZMb2FkaW5nVmlldy5zaG93TWVzc2FnZShcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHR5cGVvZiB0ZXh0Q29sb3IgPT09ICdudW1iZXInID8gdGV4dENvbG9yIDogbnVsbCxcbiAgICAgICAgICB0eXBlb2YgYmFja2dyb3VuZENvbG9yID09PSAnbnVtYmVyJyA/IGJhY2tncm91bmRDb2xvciA6IG51bGwsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICBsZXQgYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBsZXQgdGV4dENvbG9yO1xuXG4gICAgICAgIGlmIChBcHBlYXJhbmNlLmdldENvbG9yU2NoZW1lKCkgPT09ICdkYXJrJykge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IHByb2Nlc3NDb2xvcignI2ZhZmFmYScpO1xuICAgICAgICAgIHRleHRDb2xvciA9IHByb2Nlc3NDb2xvcignIzI0MjUyNicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IHByb2Nlc3NDb2xvcignIzQwNDA0MCcpO1xuICAgICAgICAgIHRleHRDb2xvciA9IHByb2Nlc3NDb2xvcignI2ZmZmZmZicpO1xuICAgICAgICB9XG5cbiAgICAgICAgTmF0aXZlRGV2TG9hZGluZ1ZpZXcuc2hvd01lc3NhZ2UoXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB0eXBlb2YgdGV4dENvbG9yID09PSAnbnVtYmVyJyA/IHRleHRDb2xvciA6IG51bGwsXG4gICAgICAgICAgdHlwZW9mIGJhY2tncm91bmRDb2xvciA9PT0gJ251bWJlcicgPyBiYWNrZ3JvdW5kQ29sb3IgOiBudWxsLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaGlkZSgpIHtcbiAgICBOYXRpdmVEZXZMb2FkaW5nVmlldyAmJiBOYXRpdmVEZXZMb2FkaW5nVmlldy5oaWRlKCk7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWUsIE5hdGl2ZUNvbG9yVmFsdWV9IGZyb20gJy4vU3R5bGVTaGVldCc7XG5cbmNvbnN0IFBsYXRmb3JtID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJyk7XG5jb25zdCBub3JtYWxpemVDb2xvciA9IHJlcXVpcmUoJy4vbm9ybWFsaXplQ29sb3InKTtcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc2VkQ29sb3JWYWx1ZSA9IG51bWJlciB8IE5hdGl2ZUNvbG9yVmFsdWU7XG5cbi8qIGVzbGludCBuby1iaXR3aXNlOiAwICovXG5mdW5jdGlvbiBwcm9jZXNzQ29sb3IoY29sb3I/OiA/KG51bWJlciB8IENvbG9yVmFsdWUpKTogP1Byb2Nlc3NlZENvbG9yVmFsdWUge1xuICBpZiAoY29sb3IgPT09IHVuZGVmaW5lZCB8fCBjb2xvciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuXG4gIGxldCBub3JtYWxpemVkQ29sb3IgPSBub3JtYWxpemVDb2xvcihjb2xvcik7XG4gIGlmIChub3JtYWxpemVkQ29sb3IgPT09IG51bGwgfHwgbm9ybWFsaXplZENvbG9yID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29sb3IgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgcHJvY2Vzc0NvbG9yT2JqZWN0ID1cbiAgICAgIHJlcXVpcmUoJy4vUGxhdGZvcm1Db2xvclZhbHVlVHlwZXMnKS5wcm9jZXNzQ29sb3JPYmplY3Q7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRDb2xvck9iaiA9IHByb2Nlc3NDb2xvck9iamVjdChub3JtYWxpemVkQ29sb3IpO1xuXG4gICAgaWYgKHByb2Nlc3NlZENvbG9yT2JqICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzZWRDb2xvck9iajtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb2xvciAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnRzIDB4cnJnZ2JiYWEgaW50byAweGFhcnJnZ2JiXG4gIG5vcm1hbGl6ZWRDb2xvciA9ICgobm9ybWFsaXplZENvbG9yIDw8IDI0KSB8IChub3JtYWxpemVkQ29sb3IgPj4+IDgpKSA+Pj4gMDtcblxuICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgIC8vIEFuZHJvaWQgdXNlIDMyIGJpdCAqc2lnbmVkKiBpbnRlZ2VyIHRvIHJlcHJlc2VudCB0aGUgY29sb3JcbiAgICAvLyBXZSB1dGlsaXplIHRoZSBmYWN0IHRoYXQgYml0d2lzZSBvcGVyYXRpb25zIGluIEpTIGFsc28gb3BlcmF0ZXMgb25cbiAgICAvLyBzaWduZWQgMzIgYml0IGludGVnZXJzLCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhvc2UgdG8gY29udmVydCBmcm9tXG4gICAgLy8gKnVuc2lnbmVkKiB0byAqc2lnbmVkKiAzMmJpdCBpbnQgdGhhdCB3YXkuXG4gICAgbm9ybWFsaXplZENvbG9yID0gbm9ybWFsaXplZENvbG9yIHwgMHgwO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkQ29sb3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHByb2Nlc3NDb2xvcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4vKiBlc2xpbnQgbm8tYml0d2lzZTogMCAqL1xuXG5pbXBvcnQgdHlwZSB7UHJvY2Vzc2VkQ29sb3JWYWx1ZX0gZnJvbSAnLi9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4vU3R5bGVTaGVldCc7XG5cbmltcG9ydCBfbm9ybWFsaXplQ29sb3IgZnJvbSAnQHJlYWN0LW5hdGl2ZS9ub3JtYWxpemUtY29sb3JzJztcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29sb3IoXG4gIGNvbG9yOiA/KENvbG9yVmFsdWUgfCBQcm9jZXNzZWRDb2xvclZhbHVlKSxcbik6ID9Qcm9jZXNzZWRDb2xvclZhbHVlIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ29iamVjdCcgJiYgY29sb3IgIT0gbnVsbCkge1xuICAgIGNvbnN0IHtub3JtYWxpemVDb2xvck9iamVjdH0gPSByZXF1aXJlKCcuL1BsYXRmb3JtQ29sb3JWYWx1ZVR5cGVzJyk7XG4gICAgY29uc3Qgbm9ybWFsaXplZENvbG9yID0gbm9ybWFsaXplQ29sb3JPYmplY3QoY29sb3IpO1xuICAgIGlmIChub3JtYWxpemVkQ29sb3IgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2xvcjtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIF9ub3JtYWxpemVDb2xvcihjb2xvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVDb2xvcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAbm9mbG93XG4gKi9cblxuLyogZXNsaW50IG5vLWJpdHdpc2U6IDAgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBub3JtYWxpemVDb2xvcihjb2xvcikge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSAnbnVtYmVyJykge1xuICAgIGlmIChjb2xvciA+Pj4gMCA9PT0gY29sb3IgJiYgY29sb3IgPj0gMCAmJiBjb2xvciA8PSAweGZmZmZmZmZmKSB7XG4gICAgICByZXR1cm4gY29sb3I7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXJzID0gZ2V0TWF0Y2hlcnMoKTtcbiAgbGV0IG1hdGNoO1xuXG4gIC8vIE9yZGVyZWQgYmFzZWQgb24gb2NjdXJyZW5jZXMgb24gRmFjZWJvb2sgY29kZWJhc2VcbiAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDYuZXhlYyhjb2xvcikpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoWzFdICsgJ2ZmJywgMTYpID4+PiAwO1xuICB9XG5cbiAgY29uc3QgY29sb3JGcm9tS2V5d29yZCA9IG5vcm1hbGl6ZUtleXdvcmQoY29sb3IpO1xuICBpZiAoY29sb3JGcm9tS2V5d29yZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbG9yRnJvbUtleXdvcmQ7XG4gIH1cblxuICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMucmdiLmV4ZWMoY29sb3IpKSkge1xuICAgIHJldHVybiAoXG4gICAgICAoKHBhcnNlMjU1KG1hdGNoWzFdKSA8PCAyNCkgfCAvLyByXG4gICAgICAgIChwYXJzZTI1NShtYXRjaFsyXSkgPDwgMTYpIHwgLy8gZ1xuICAgICAgICAocGFyc2UyNTUobWF0Y2hbM10pIDw8IDgpIHwgLy8gYlxuICAgICAgICAweDAwMDAwMGZmKSA+Pj4gLy8gYVxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMucmdiYS5leGVjKGNvbG9yKSkpIHtcbiAgICAvLyByZ2JhKFIgRyBCIC8gQSkgbm90YXRpb25cbiAgICBpZiAobWF0Y2hbNl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKChwYXJzZTI1NShtYXRjaFs2XSkgPDwgMjQpIHwgLy8gclxuICAgICAgICAgIChwYXJzZTI1NShtYXRjaFs3XSkgPDwgMTYpIHwgLy8gZ1xuICAgICAgICAgIChwYXJzZTI1NShtYXRjaFs4XSkgPDwgOCkgfCAvLyBiXG4gICAgICAgICAgcGFyc2UxKG1hdGNoWzldKSkgPj4+IC8vIGFcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyByZ2JhKFIsIEcsIEIsIEEpIG5vdGF0aW9uXG4gICAgcmV0dXJuIChcbiAgICAgICgocGFyc2UyNTUobWF0Y2hbMl0pIDw8IDI0KSB8IC8vIHJcbiAgICAgICAgKHBhcnNlMjU1KG1hdGNoWzNdKSA8PCAxNikgfCAvLyBnXG4gICAgICAgIChwYXJzZTI1NShtYXRjaFs0XSkgPDwgOCkgfCAvLyBiXG4gICAgICAgIHBhcnNlMShtYXRjaFs1XSkpID4+PiAvLyBhXG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXgzLmV4ZWMoY29sb3IpKSkge1xuICAgIHJldHVybiAoXG4gICAgICBwYXJzZUludChcbiAgICAgICAgbWF0Y2hbMV0gK1xuICAgICAgICAgIG1hdGNoWzFdICsgLy8gclxuICAgICAgICAgIG1hdGNoWzJdICtcbiAgICAgICAgICBtYXRjaFsyXSArIC8vIGdcbiAgICAgICAgICBtYXRjaFszXSArXG4gICAgICAgICAgbWF0Y2hbM10gKyAvLyBiXG4gICAgICAgICAgJ2ZmJywgLy8gYVxuICAgICAgICAxNixcbiAgICAgICkgPj4+IDBcbiAgICApO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoZXgtbm90YXRpb25cbiAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDguZXhlYyhjb2xvcikpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoWzFdLCAxNikgPj4+IDA7XG4gIH1cblxuICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4NC5leGVjKGNvbG9yKSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIG1hdGNoWzFdICtcbiAgICAgICAgICBtYXRjaFsxXSArIC8vIHJcbiAgICAgICAgICBtYXRjaFsyXSArXG4gICAgICAgICAgbWF0Y2hbMl0gKyAvLyBnXG4gICAgICAgICAgbWF0Y2hbM10gK1xuICAgICAgICAgIG1hdGNoWzNdICsgLy8gYlxuICAgICAgICAgIG1hdGNoWzRdICtcbiAgICAgICAgICBtYXRjaFs0XSwgLy8gYVxuICAgICAgICAxNixcbiAgICAgICkgPj4+IDBcbiAgICApO1xuICB9XG5cbiAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzbC5leGVjKGNvbG9yKSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGhzbFRvUmdiKFxuICAgICAgICBwYXJzZTM2MChtYXRjaFsxXSksIC8vIGhcbiAgICAgICAgcGFyc2VQZXJjZW50YWdlKG1hdGNoWzJdKSwgLy8gc1xuICAgICAgICBwYXJzZVBlcmNlbnRhZ2UobWF0Y2hbM10pLCAvLyBsXG4gICAgICApIHxcbiAgICAgICAgMHgwMDAwMDBmZikgPj4+IC8vIGFcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzbGEuZXhlYyhjb2xvcikpKSB7XG4gICAgLy8gaHNsYShIIFMgTCAvIEEpIG5vdGF0aW9uXG4gICAgaWYgKG1hdGNoWzZdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChoc2xUb1JnYihcbiAgICAgICAgICBwYXJzZTM2MChtYXRjaFs2XSksIC8vIGhcbiAgICAgICAgICBwYXJzZVBlcmNlbnRhZ2UobWF0Y2hbN10pLCAvLyBzXG4gICAgICAgICAgcGFyc2VQZXJjZW50YWdlKG1hdGNoWzhdKSwgLy8gbFxuICAgICAgICApIHxcbiAgICAgICAgICBwYXJzZTEobWF0Y2hbOV0pKSA+Pj4gLy8gYVxuICAgICAgICAwXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGhzbGEoSCwgUywgTCwgQSkgbm90YXRpb25cbiAgICByZXR1cm4gKFxuICAgICAgKGhzbFRvUmdiKFxuICAgICAgICBwYXJzZTM2MChtYXRjaFsyXSksIC8vIGhcbiAgICAgICAgcGFyc2VQZXJjZW50YWdlKG1hdGNoWzNdKSwgLy8gc1xuICAgICAgICBwYXJzZVBlcmNlbnRhZ2UobWF0Y2hbNF0pLCAvLyBsXG4gICAgICApIHxcbiAgICAgICAgcGFyc2UxKG1hdGNoWzVdKSkgPj4+IC8vIGFcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmh3Yi5leGVjKGNvbG9yKSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGh3YlRvUmdiKFxuICAgICAgICBwYXJzZTM2MChtYXRjaFsxXSksIC8vIGhcbiAgICAgICAgcGFyc2VQZXJjZW50YWdlKG1hdGNoWzJdKSwgLy8gd1xuICAgICAgICBwYXJzZVBlcmNlbnRhZ2UobWF0Y2hbM10pLCAvLyBiXG4gICAgICApIHxcbiAgICAgICAgMHgwMDAwMDBmZikgPj4+IC8vIGFcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGh1ZTJyZ2IocCwgcSwgdCkge1xuICBpZiAodCA8IDApIHtcbiAgICB0ICs9IDE7XG4gIH1cbiAgaWYgKHQgPiAxKSB7XG4gICAgdCAtPSAxO1xuICB9XG4gIGlmICh0IDwgMSAvIDYpIHtcbiAgICByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgfVxuICBpZiAodCA8IDEgLyAyKSB7XG4gICAgcmV0dXJuIHE7XG4gIH1cbiAgaWYgKHQgPCAyIC8gMykge1xuICAgIHJldHVybiBwICsgKHEgLSBwKSAqICgyIC8gMyAtIHQpICogNjtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gaHNsVG9SZ2IoaCwgcywgbCkge1xuICBjb25zdCBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgY29uc3QgcCA9IDIgKiBsIC0gcTtcbiAgY29uc3QgciA9IGh1ZTJyZ2IocCwgcSwgaCArIDEgLyAzKTtcbiAgY29uc3QgZyA9IGh1ZTJyZ2IocCwgcSwgaCk7XG4gIGNvbnN0IGIgPSBodWUycmdiKHAsIHEsIGggLSAxIC8gMyk7XG5cbiAgcmV0dXJuIChcbiAgICAoTWF0aC5yb3VuZChyICogMjU1KSA8PCAyNCkgfFxuICAgIChNYXRoLnJvdW5kKGcgKiAyNTUpIDw8IDE2KSB8XG4gICAgKE1hdGgucm91bmQoYiAqIDI1NSkgPDwgOClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaHdiVG9SZ2IoaCwgdywgYikge1xuICBpZiAodyArIGIgPj0gMSkge1xuICAgIGNvbnN0IGdyYXkgPSBNYXRoLnJvdW5kKCh3ICogMjU1KSAvICh3ICsgYikpO1xuXG4gICAgcmV0dXJuIChncmF5IDw8IDI0KSB8IChncmF5IDw8IDE2KSB8IChncmF5IDw8IDgpO1xuICB9XG5cbiAgY29uc3QgcmVkID0gaHVlMnJnYigwLCAxLCBoICsgMSAvIDMpICogKDEgLSB3IC0gYikgKyB3O1xuICBjb25zdCBncmVlbiA9IGh1ZTJyZ2IoMCwgMSwgaCkgKiAoMSAtIHcgLSBiKSArIHc7XG4gIGNvbnN0IGJsdWUgPSBodWUycmdiKDAsIDEsIGggLSAxIC8gMykgKiAoMSAtIHcgLSBiKSArIHc7XG5cbiAgcmV0dXJuIChcbiAgICAoTWF0aC5yb3VuZChyZWQgKiAyNTUpIDw8IDI0KSB8XG4gICAgKE1hdGgucm91bmQoZ3JlZW4gKiAyNTUpIDw8IDE2KSB8XG4gICAgKE1hdGgucm91bmQoYmx1ZSAqIDI1NSkgPDwgOClcbiAgKTtcbn1cblxuY29uc3QgTlVNQkVSID0gJ1stK10/XFxcXGQqXFxcXC4/XFxcXGQrJztcbmNvbnN0IFBFUkNFTlRBR0UgPSBOVU1CRVIgKyAnJSc7XG5cbmZ1bmN0aW9uIGNhbGwoLi4uYXJncykge1xuICByZXR1cm4gJ1xcXFwoXFxcXHMqKCcgKyBhcmdzLmpvaW4oJylcXFxccyosP1xcXFxzKignKSArICcpXFxcXHMqXFxcXCknO1xufVxuXG5mdW5jdGlvbiBjYWxsV2l0aFNsYXNoU2VwYXJhdG9yKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIChcbiAgICAnXFxcXChcXFxccyooJyArXG4gICAgYXJncy5zbGljZSgwLCBhcmdzLmxlbmd0aCAtIDEpLmpvaW4oJylcXFxccyosP1xcXFxzKignKSArXG4gICAgJylcXFxccyovXFxcXHMqKCcgK1xuICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSArXG4gICAgJylcXFxccypcXFxcKSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gY29tbWFTZXBhcmF0ZWRDYWxsKC4uLmFyZ3MpIHtcbiAgcmV0dXJuICdcXFxcKFxcXFxzKignICsgYXJncy5qb2luKCcpXFxcXHMqLFxcXFxzKignKSArICcpXFxcXHMqXFxcXCknO1xufVxuXG5sZXQgY2FjaGVkTWF0Y2hlcnM7XG5cbmZ1bmN0aW9uIGdldE1hdGNoZXJzKCkge1xuICBpZiAoY2FjaGVkTWF0Y2hlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlZE1hdGNoZXJzID0ge1xuICAgICAgcmdiOiBuZXcgUmVnRXhwKCdyZ2InICsgY2FsbChOVU1CRVIsIE5VTUJFUiwgTlVNQkVSKSksXG4gICAgICByZ2JhOiBuZXcgUmVnRXhwKFxuICAgICAgICAncmdiYSgnICtcbiAgICAgICAgICBjb21tYVNlcGFyYXRlZENhbGwoTlVNQkVSLCBOVU1CRVIsIE5VTUJFUiwgTlVNQkVSKSArXG4gICAgICAgICAgJ3wnICtcbiAgICAgICAgICBjYWxsV2l0aFNsYXNoU2VwYXJhdG9yKE5VTUJFUiwgTlVNQkVSLCBOVU1CRVIsIE5VTUJFUikgK1xuICAgICAgICAgICcpJyxcbiAgICAgICksXG4gICAgICBoc2w6IG5ldyBSZWdFeHAoJ2hzbCcgKyBjYWxsKE5VTUJFUiwgUEVSQ0VOVEFHRSwgUEVSQ0VOVEFHRSkpLFxuICAgICAgaHNsYTogbmV3IFJlZ0V4cChcbiAgICAgICAgJ2hzbGEoJyArXG4gICAgICAgICAgY29tbWFTZXBhcmF0ZWRDYWxsKE5VTUJFUiwgUEVSQ0VOVEFHRSwgUEVSQ0VOVEFHRSwgTlVNQkVSKSArXG4gICAgICAgICAgJ3wnICtcbiAgICAgICAgICBjYWxsV2l0aFNsYXNoU2VwYXJhdG9yKE5VTUJFUiwgUEVSQ0VOVEFHRSwgUEVSQ0VOVEFHRSwgTlVNQkVSKSArXG4gICAgICAgICAgJyknLFxuICAgICAgKSxcbiAgICAgIGh3YjogbmV3IFJlZ0V4cCgnaHdiJyArIGNhbGwoTlVNQkVSLCBQRVJDRU5UQUdFLCBQRVJDRU5UQUdFKSksXG4gICAgICBoZXgzOiAvXiMoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxcbiAgICAgIGhleDQ6IC9eIyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxcbiAgICAgIGhleDY6IC9eIyhbMC05YS1mQS1GXXs2fSkkLyxcbiAgICAgIGhleDg6IC9eIyhbMC05YS1mQS1GXXs4fSkkLyxcbiAgICB9O1xuICB9XG4gIHJldHVybiBjYWNoZWRNYXRjaGVycztcbn1cblxuZnVuY3Rpb24gcGFyc2UyNTUoc3RyKSB7XG4gIGNvbnN0IGludCA9IHBhcnNlSW50KHN0ciwgMTApO1xuICBpZiAoaW50IDwgMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChpbnQgPiAyNTUpIHtcbiAgICByZXR1cm4gMjU1O1xuICB9XG4gIHJldHVybiBpbnQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlMzYwKHN0cikge1xuICBjb25zdCBpbnQgPSBwYXJzZUZsb2F0KHN0cik7XG4gIHJldHVybiAoKChpbnQgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlMShzdHIpIHtcbiAgY29uc3QgbnVtID0gcGFyc2VGbG9hdChzdHIpO1xuICBpZiAobnVtIDwgMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChudW0gPiAxKSB7XG4gICAgcmV0dXJuIDI1NTtcbiAgfVxuICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiAyNTUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBlcmNlbnRhZ2Uoc3RyKSB7XG4gIC8vIHBhcnNlRmxvYXQgY29udmVuaWVudGx5IGlnbm9yZXMgdGhlIGZpbmFsICVcbiAgY29uc3QgaW50ID0gcGFyc2VGbG9hdChzdHIpO1xuICBpZiAoaW50IDwgMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChpbnQgPiAxMDApIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gaW50IC8gMTAwO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVLZXl3b3JkKG5hbWUpIHtcbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ3RyYW5zcGFyZW50JzogcmV0dXJuIDB4MDAwMDAwMDA7XG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4gICAgY2FzZSAnYWxpY2VibHVlJzogcmV0dXJuIDB4ZjBmOGZmZmY7XG4gICAgY2FzZSAnYW50aXF1ZXdoaXRlJzogcmV0dXJuIDB4ZmFlYmQ3ZmY7XG4gICAgY2FzZSAnYXF1YSc6IHJldHVybiAweDAwZmZmZmZmO1xuICAgIGNhc2UgJ2FxdWFtYXJpbmUnOiByZXR1cm4gMHg3ZmZmZDRmZjtcbiAgICBjYXNlICdhenVyZSc6IHJldHVybiAweGYwZmZmZmZmO1xuICAgIGNhc2UgJ2JlaWdlJzogcmV0dXJuIDB4ZjVmNWRjZmY7XG4gICAgY2FzZSAnYmlzcXVlJzogcmV0dXJuIDB4ZmZlNGM0ZmY7XG4gICAgY2FzZSAnYmxhY2snOiByZXR1cm4gMHgwMDAwMDBmZjtcbiAgICBjYXNlICdibGFuY2hlZGFsbW9uZCc6IHJldHVybiAweGZmZWJjZGZmO1xuICAgIGNhc2UgJ2JsdWUnOiByZXR1cm4gMHgwMDAwZmZmZjtcbiAgICBjYXNlICdibHVldmlvbGV0JzogcmV0dXJuIDB4OGEyYmUyZmY7XG4gICAgY2FzZSAnYnJvd24nOiByZXR1cm4gMHhhNTJhMmFmZjtcbiAgICBjYXNlICdidXJseXdvb2QnOiByZXR1cm4gMHhkZWI4ODdmZjtcbiAgICBjYXNlICdidXJudHNpZW5uYSc6IHJldHVybiAweGVhN2U1ZGZmO1xuICAgIGNhc2UgJ2NhZGV0Ymx1ZSc6IHJldHVybiAweDVmOWVhMGZmO1xuICAgIGNhc2UgJ2NoYXJ0cmV1c2UnOiByZXR1cm4gMHg3ZmZmMDBmZjtcbiAgICBjYXNlICdjaG9jb2xhdGUnOiByZXR1cm4gMHhkMjY5MWVmZjtcbiAgICBjYXNlICdjb3JhbCc6IHJldHVybiAweGZmN2Y1MGZmO1xuICAgIGNhc2UgJ2Nvcm5mbG93ZXJibHVlJzogcmV0dXJuIDB4NjQ5NWVkZmY7XG4gICAgY2FzZSAnY29ybnNpbGsnOiByZXR1cm4gMHhmZmY4ZGNmZjtcbiAgICBjYXNlICdjcmltc29uJzogcmV0dXJuIDB4ZGMxNDNjZmY7XG4gICAgY2FzZSAnY3lhbic6IHJldHVybiAweDAwZmZmZmZmO1xuICAgIGNhc2UgJ2RhcmtibHVlJzogcmV0dXJuIDB4MDAwMDhiZmY7XG4gICAgY2FzZSAnZGFya2N5YW4nOiByZXR1cm4gMHgwMDhiOGJmZjtcbiAgICBjYXNlICdkYXJrZ29sZGVucm9kJzogcmV0dXJuIDB4Yjg4NjBiZmY7XG4gICAgY2FzZSAnZGFya2dyYXknOiByZXR1cm4gMHhhOWE5YTlmZjtcbiAgICBjYXNlICdkYXJrZ3JlZW4nOiByZXR1cm4gMHgwMDY0MDBmZjtcbiAgICBjYXNlICdkYXJrZ3JleSc6IHJldHVybiAweGE5YTlhOWZmO1xuICAgIGNhc2UgJ2RhcmtraGFraSc6IHJldHVybiAweGJkYjc2YmZmO1xuICAgIGNhc2UgJ2RhcmttYWdlbnRhJzogcmV0dXJuIDB4OGIwMDhiZmY7XG4gICAgY2FzZSAnZGFya29saXZlZ3JlZW4nOiByZXR1cm4gMHg1NTZiMmZmZjtcbiAgICBjYXNlICdkYXJrb3JhbmdlJzogcmV0dXJuIDB4ZmY4YzAwZmY7XG4gICAgY2FzZSAnZGFya29yY2hpZCc6IHJldHVybiAweDk5MzJjY2ZmO1xuICAgIGNhc2UgJ2RhcmtyZWQnOiByZXR1cm4gMHg4YjAwMDBmZjtcbiAgICBjYXNlICdkYXJrc2FsbW9uJzogcmV0dXJuIDB4ZTk5NjdhZmY7XG4gICAgY2FzZSAnZGFya3NlYWdyZWVuJzogcmV0dXJuIDB4OGZiYzhmZmY7XG4gICAgY2FzZSAnZGFya3NsYXRlYmx1ZSc6IHJldHVybiAweDQ4M2Q4YmZmO1xuICAgIGNhc2UgJ2RhcmtzbGF0ZWdyYXknOiByZXR1cm4gMHgyZjRmNGZmZjtcbiAgICBjYXNlICdkYXJrc2xhdGVncmV5JzogcmV0dXJuIDB4MmY0ZjRmZmY7XG4gICAgY2FzZSAnZGFya3R1cnF1b2lzZSc6IHJldHVybiAweDAwY2VkMWZmO1xuICAgIGNhc2UgJ2Rhcmt2aW9sZXQnOiByZXR1cm4gMHg5NDAwZDNmZjtcbiAgICBjYXNlICdkZWVwcGluayc6IHJldHVybiAweGZmMTQ5M2ZmO1xuICAgIGNhc2UgJ2RlZXBza3libHVlJzogcmV0dXJuIDB4MDBiZmZmZmY7XG4gICAgY2FzZSAnZGltZ3JheSc6IHJldHVybiAweDY5Njk2OWZmO1xuICAgIGNhc2UgJ2RpbWdyZXknOiByZXR1cm4gMHg2OTY5NjlmZjtcbiAgICBjYXNlICdkb2RnZXJibHVlJzogcmV0dXJuIDB4MWU5MGZmZmY7XG4gICAgY2FzZSAnZmlyZWJyaWNrJzogcmV0dXJuIDB4YjIyMjIyZmY7XG4gICAgY2FzZSAnZmxvcmFsd2hpdGUnOiByZXR1cm4gMHhmZmZhZjBmZjtcbiAgICBjYXNlICdmb3Jlc3RncmVlbic6IHJldHVybiAweDIyOGIyMmZmO1xuICAgIGNhc2UgJ2Z1Y2hzaWEnOiByZXR1cm4gMHhmZjAwZmZmZjtcbiAgICBjYXNlICdnYWluc2Jvcm8nOiByZXR1cm4gMHhkY2RjZGNmZjtcbiAgICBjYXNlICdnaG9zdHdoaXRlJzogcmV0dXJuIDB4ZjhmOGZmZmY7XG4gICAgY2FzZSAnZ29sZCc6IHJldHVybiAweGZmZDcwMGZmO1xuICAgIGNhc2UgJ2dvbGRlbnJvZCc6IHJldHVybiAweGRhYTUyMGZmO1xuICAgIGNhc2UgJ2dyYXknOiByZXR1cm4gMHg4MDgwODBmZjtcbiAgICBjYXNlICdncmVlbic6IHJldHVybiAweDAwODAwMGZmO1xuICAgIGNhc2UgJ2dyZWVueWVsbG93JzogcmV0dXJuIDB4YWRmZjJmZmY7XG4gICAgY2FzZSAnZ3JleSc6IHJldHVybiAweDgwODA4MGZmO1xuICAgIGNhc2UgJ2hvbmV5ZGV3JzogcmV0dXJuIDB4ZjBmZmYwZmY7XG4gICAgY2FzZSAnaG90cGluayc6IHJldHVybiAweGZmNjliNGZmO1xuICAgIGNhc2UgJ2luZGlhbnJlZCc6IHJldHVybiAweGNkNWM1Y2ZmO1xuICAgIGNhc2UgJ2luZGlnbyc6IHJldHVybiAweDRiMDA4MmZmO1xuICAgIGNhc2UgJ2l2b3J5JzogcmV0dXJuIDB4ZmZmZmYwZmY7XG4gICAgY2FzZSAna2hha2knOiByZXR1cm4gMHhmMGU2OGNmZjtcbiAgICBjYXNlICdsYXZlbmRlcic6IHJldHVybiAweGU2ZTZmYWZmO1xuICAgIGNhc2UgJ2xhdmVuZGVyYmx1c2gnOiByZXR1cm4gMHhmZmYwZjVmZjtcbiAgICBjYXNlICdsYXduZ3JlZW4nOiByZXR1cm4gMHg3Y2ZjMDBmZjtcbiAgICBjYXNlICdsZW1vbmNoaWZmb24nOiByZXR1cm4gMHhmZmZhY2RmZjtcbiAgICBjYXNlICdsaWdodGJsdWUnOiByZXR1cm4gMHhhZGQ4ZTZmZjtcbiAgICBjYXNlICdsaWdodGNvcmFsJzogcmV0dXJuIDB4ZjA4MDgwZmY7XG4gICAgY2FzZSAnbGlnaHRjeWFuJzogcmV0dXJuIDB4ZTBmZmZmZmY7XG4gICAgY2FzZSAnbGlnaHRnb2xkZW5yb2R5ZWxsb3cnOiByZXR1cm4gMHhmYWZhZDJmZjtcbiAgICBjYXNlICdsaWdodGdyYXknOiByZXR1cm4gMHhkM2QzZDNmZjtcbiAgICBjYXNlICdsaWdodGdyZWVuJzogcmV0dXJuIDB4OTBlZTkwZmY7XG4gICAgY2FzZSAnbGlnaHRncmV5JzogcmV0dXJuIDB4ZDNkM2QzZmY7XG4gICAgY2FzZSAnbGlnaHRwaW5rJzogcmV0dXJuIDB4ZmZiNmMxZmY7XG4gICAgY2FzZSAnbGlnaHRzYWxtb24nOiByZXR1cm4gMHhmZmEwN2FmZjtcbiAgICBjYXNlICdsaWdodHNlYWdyZWVuJzogcmV0dXJuIDB4MjBiMmFhZmY7XG4gICAgY2FzZSAnbGlnaHRza3libHVlJzogcmV0dXJuIDB4ODdjZWZhZmY7XG4gICAgY2FzZSAnbGlnaHRzbGF0ZWdyYXknOiByZXR1cm4gMHg3Nzg4OTlmZjtcbiAgICBjYXNlICdsaWdodHNsYXRlZ3JleSc6IHJldHVybiAweDc3ODg5OWZmO1xuICAgIGNhc2UgJ2xpZ2h0c3RlZWxibHVlJzogcmV0dXJuIDB4YjBjNGRlZmY7XG4gICAgY2FzZSAnbGlnaHR5ZWxsb3cnOiByZXR1cm4gMHhmZmZmZTBmZjtcbiAgICBjYXNlICdsaW1lJzogcmV0dXJuIDB4MDBmZjAwZmY7XG4gICAgY2FzZSAnbGltZWdyZWVuJzogcmV0dXJuIDB4MzJjZDMyZmY7XG4gICAgY2FzZSAnbGluZW4nOiByZXR1cm4gMHhmYWYwZTZmZjtcbiAgICBjYXNlICdtYWdlbnRhJzogcmV0dXJuIDB4ZmYwMGZmZmY7XG4gICAgY2FzZSAnbWFyb29uJzogcmV0dXJuIDB4ODAwMDAwZmY7XG4gICAgY2FzZSAnbWVkaXVtYXF1YW1hcmluZSc6IHJldHVybiAweDY2Y2RhYWZmO1xuICAgIGNhc2UgJ21lZGl1bWJsdWUnOiByZXR1cm4gMHgwMDAwY2RmZjtcbiAgICBjYXNlICdtZWRpdW1vcmNoaWQnOiByZXR1cm4gMHhiYTU1ZDNmZjtcbiAgICBjYXNlICdtZWRpdW1wdXJwbGUnOiByZXR1cm4gMHg5MzcwZGJmZjtcbiAgICBjYXNlICdtZWRpdW1zZWFncmVlbic6IHJldHVybiAweDNjYjM3MWZmO1xuICAgIGNhc2UgJ21lZGl1bXNsYXRlYmx1ZSc6IHJldHVybiAweDdiNjhlZWZmO1xuICAgIGNhc2UgJ21lZGl1bXNwcmluZ2dyZWVuJzogcmV0dXJuIDB4MDBmYTlhZmY7XG4gICAgY2FzZSAnbWVkaXVtdHVycXVvaXNlJzogcmV0dXJuIDB4NDhkMWNjZmY7XG4gICAgY2FzZSAnbWVkaXVtdmlvbGV0cmVkJzogcmV0dXJuIDB4YzcxNTg1ZmY7XG4gICAgY2FzZSAnbWlkbmlnaHRibHVlJzogcmV0dXJuIDB4MTkxOTcwZmY7XG4gICAgY2FzZSAnbWludGNyZWFtJzogcmV0dXJuIDB4ZjVmZmZhZmY7XG4gICAgY2FzZSAnbWlzdHlyb3NlJzogcmV0dXJuIDB4ZmZlNGUxZmY7XG4gICAgY2FzZSAnbW9jY2FzaW4nOiByZXR1cm4gMHhmZmU0YjVmZjtcbiAgICBjYXNlICduYXZham93aGl0ZSc6IHJldHVybiAweGZmZGVhZGZmO1xuICAgIGNhc2UgJ25hdnknOiByZXR1cm4gMHgwMDAwODBmZjtcbiAgICBjYXNlICdvbGRsYWNlJzogcmV0dXJuIDB4ZmRmNWU2ZmY7XG4gICAgY2FzZSAnb2xpdmUnOiByZXR1cm4gMHg4MDgwMDBmZjtcbiAgICBjYXNlICdvbGl2ZWRyYWInOiByZXR1cm4gMHg2YjhlMjNmZjtcbiAgICBjYXNlICdvcmFuZ2UnOiByZXR1cm4gMHhmZmE1MDBmZjtcbiAgICBjYXNlICdvcmFuZ2VyZWQnOiByZXR1cm4gMHhmZjQ1MDBmZjtcbiAgICBjYXNlICdvcmNoaWQnOiByZXR1cm4gMHhkYTcwZDZmZjtcbiAgICBjYXNlICdwYWxlZ29sZGVucm9kJzogcmV0dXJuIDB4ZWVlOGFhZmY7XG4gICAgY2FzZSAncGFsZWdyZWVuJzogcmV0dXJuIDB4OThmYjk4ZmY7XG4gICAgY2FzZSAncGFsZXR1cnF1b2lzZSc6IHJldHVybiAweGFmZWVlZWZmO1xuICAgIGNhc2UgJ3BhbGV2aW9sZXRyZWQnOiByZXR1cm4gMHhkYjcwOTNmZjtcbiAgICBjYXNlICdwYXBheWF3aGlwJzogcmV0dXJuIDB4ZmZlZmQ1ZmY7XG4gICAgY2FzZSAncGVhY2hwdWZmJzogcmV0dXJuIDB4ZmZkYWI5ZmY7XG4gICAgY2FzZSAncGVydSc6IHJldHVybiAweGNkODUzZmZmO1xuICAgIGNhc2UgJ3BpbmsnOiByZXR1cm4gMHhmZmMwY2JmZjtcbiAgICBjYXNlICdwbHVtJzogcmV0dXJuIDB4ZGRhMGRkZmY7XG4gICAgY2FzZSAncG93ZGVyYmx1ZSc6IHJldHVybiAweGIwZTBlNmZmO1xuICAgIGNhc2UgJ3B1cnBsZSc6IHJldHVybiAweDgwMDA4MGZmO1xuICAgIGNhc2UgJ3JlYmVjY2FwdXJwbGUnOiByZXR1cm4gMHg2NjMzOTlmZjtcbiAgICBjYXNlICdyZWQnOiByZXR1cm4gMHhmZjAwMDBmZjtcbiAgICBjYXNlICdyb3N5YnJvd24nOiByZXR1cm4gMHhiYzhmOGZmZjtcbiAgICBjYXNlICdyb3lhbGJsdWUnOiByZXR1cm4gMHg0MTY5ZTFmZjtcbiAgICBjYXNlICdzYWRkbGVicm93bic6IHJldHVybiAweDhiNDUxM2ZmO1xuICAgIGNhc2UgJ3NhbG1vbic6IHJldHVybiAweGZhODA3MmZmO1xuICAgIGNhc2UgJ3NhbmR5YnJvd24nOiByZXR1cm4gMHhmNGE0NjBmZjtcbiAgICBjYXNlICdzZWFncmVlbic6IHJldHVybiAweDJlOGI1N2ZmO1xuICAgIGNhc2UgJ3NlYXNoZWxsJzogcmV0dXJuIDB4ZmZmNWVlZmY7XG4gICAgY2FzZSAnc2llbm5hJzogcmV0dXJuIDB4YTA1MjJkZmY7XG4gICAgY2FzZSAnc2lsdmVyJzogcmV0dXJuIDB4YzBjMGMwZmY7XG4gICAgY2FzZSAnc2t5Ymx1ZSc6IHJldHVybiAweDg3Y2VlYmZmO1xuICAgIGNhc2UgJ3NsYXRlYmx1ZSc6IHJldHVybiAweDZhNWFjZGZmO1xuICAgIGNhc2UgJ3NsYXRlZ3JheSc6IHJldHVybiAweDcwODA5MGZmO1xuICAgIGNhc2UgJ3NsYXRlZ3JleSc6IHJldHVybiAweDcwODA5MGZmO1xuICAgIGNhc2UgJ3Nub3cnOiByZXR1cm4gMHhmZmZhZmFmZjtcbiAgICBjYXNlICdzcHJpbmdncmVlbic6IHJldHVybiAweDAwZmY3ZmZmO1xuICAgIGNhc2UgJ3N0ZWVsYmx1ZSc6IHJldHVybiAweDQ2ODJiNGZmO1xuICAgIGNhc2UgJ3Rhbic6IHJldHVybiAweGQyYjQ4Y2ZmO1xuICAgIGNhc2UgJ3RlYWwnOiByZXR1cm4gMHgwMDgwODBmZjtcbiAgICBjYXNlICd0aGlzdGxlJzogcmV0dXJuIDB4ZDhiZmQ4ZmY7XG4gICAgY2FzZSAndG9tYXRvJzogcmV0dXJuIDB4ZmY2MzQ3ZmY7XG4gICAgY2FzZSAndHVycXVvaXNlJzogcmV0dXJuIDB4NDBlMGQwZmY7XG4gICAgY2FzZSAndmlvbGV0JzogcmV0dXJuIDB4ZWU4MmVlZmY7XG4gICAgY2FzZSAnd2hlYXQnOiByZXR1cm4gMHhmNWRlYjNmZjtcbiAgICBjYXNlICd3aGl0ZSc6IHJldHVybiAweGZmZmZmZmZmO1xuICAgIGNhc2UgJ3doaXRlc21va2UnOiByZXR1cm4gMHhmNWY1ZjVmZjtcbiAgICBjYXNlICd5ZWxsb3cnOiByZXR1cm4gMHhmZmZmMDBmZjtcbiAgICBjYXNlICd5ZWxsb3dncmVlbic6IHJldHVybiAweDlhY2QzMmZmO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vcm1hbGl6ZUNvbG9yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtQcm9jZXNzZWRDb2xvclZhbHVlfSBmcm9tICcuL3Byb2Nlc3NDb2xvcic7XG5pbXBvcnQgdHlwZSB7Q29sb3JWYWx1ZSwgTmF0aXZlQ29sb3JWYWx1ZX0gZnJvbSAnLi9TdHlsZVNoZWV0JztcblxuLyoqIFRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgb3BhcXVlIE5hdGl2ZUNvbG9yVmFsdWUgb24gaU9TIHBsYXRmb3JtICovXG50eXBlIExvY2FsTmF0aXZlQ29sb3JWYWx1ZSA9IHtcbiAgc2VtYW50aWM/OiBBcnJheTxzdHJpbmc+LFxuICBkeW5hbWljPzoge1xuICAgIGxpZ2h0OiA/KENvbG9yVmFsdWUgfCBQcm9jZXNzZWRDb2xvclZhbHVlKSxcbiAgICBkYXJrOiA/KENvbG9yVmFsdWUgfCBQcm9jZXNzZWRDb2xvclZhbHVlKSxcbiAgICBoaWdoQ29udHJhc3RMaWdodD86ID8oQ29sb3JWYWx1ZSB8IFByb2Nlc3NlZENvbG9yVmFsdWUpLFxuICAgIGhpZ2hDb250cmFzdERhcms/OiA/KENvbG9yVmFsdWUgfCBQcm9jZXNzZWRDb2xvclZhbHVlKSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBQbGF0Zm9ybUNvbG9yID0gKC4uLm5hbWVzOiBBcnJheTxzdHJpbmc+KTogQ29sb3JWYWx1ZSA9PiB7XG4gIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtcmV0dXJuXSBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUgaXMgdGhlIGlPUyBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUgdHlwZVxuICByZXR1cm4gKHtzZW1hbnRpYzogbmFtZXN9OiBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUpO1xufTtcblxuZXhwb3J0IHR5cGUgRHluYW1pY0NvbG9ySU9TVHVwbGVQcml2YXRlID0ge1xuICBsaWdodDogQ29sb3JWYWx1ZSxcbiAgZGFyazogQ29sb3JWYWx1ZSxcbiAgaGlnaENvbnRyYXN0TGlnaHQ/OiBDb2xvclZhbHVlLFxuICBoaWdoQ29udHJhc3REYXJrPzogQ29sb3JWYWx1ZSxcbn07XG5cbmV4cG9ydCBjb25zdCBEeW5hbWljQ29sb3JJT1NQcml2YXRlID0gKFxuICB0dXBsZTogRHluYW1pY0NvbG9ySU9TVHVwbGVQcml2YXRlLFxuKTogQ29sb3JWYWx1ZSA9PiB7XG4gIHJldHVybiAoe1xuICAgIGR5bmFtaWM6IHtcbiAgICAgIGxpZ2h0OiB0dXBsZS5saWdodCxcbiAgICAgIGRhcms6IHR1cGxlLmRhcmssXG4gICAgICBoaWdoQ29udHJhc3RMaWdodDogdHVwbGUuaGlnaENvbnRyYXN0TGlnaHQsXG4gICAgICBoaWdoQ29udHJhc3REYXJrOiB0dXBsZS5oaWdoQ29udHJhc3REYXJrLFxuICAgIH0sXG4gICAgLyogJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgICogTG9jYWxOYXRpdmVDb2xvclZhbHVlIGlzIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgb3BhcXVlIE5hdGl2ZUNvbG9yVmFsdWUgb24gaU9TIHBsYXRmb3JtICovXG4gIH06IExvY2FsTmF0aXZlQ29sb3JWYWx1ZSk7XG59O1xuXG5jb25zdCBfbm9ybWFsaXplQ29sb3JPYmplY3QgPSAoXG4gIGNvbG9yOiBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUsXG4pOiA/TG9jYWxOYXRpdmVDb2xvclZhbHVlID0+IHtcbiAgaWYgKCdzZW1hbnRpYycgaW4gY29sb3IpIHtcbiAgICAvLyBhbiBpb3Mgc2VtYW50aWMgY29sb3JcbiAgICByZXR1cm4gY29sb3I7XG4gIH0gZWxzZSBpZiAoJ2R5bmFtaWMnIGluIGNvbG9yICYmIGNvbG9yLmR5bmFtaWMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZUNvbG9yID0gcmVxdWlyZSgnLi9ub3JtYWxpemVDb2xvcicpO1xuXG4gICAgLy8gYSBkeW5hbWljLCBhcHBlYXJhbmNlIGF3YXJlIGNvbG9yXG4gICAgY29uc3QgZHluYW1pYyA9IGNvbG9yLmR5bmFtaWM7XG4gICAgY29uc3QgZHluYW1pY0NvbG9yOiBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUgPSB7XG4gICAgICBkeW5hbWljOiB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICAgICAgbGlnaHQ6IG5vcm1hbGl6ZUNvbG9yKGR5bmFtaWMubGlnaHQpLFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgIGRhcms6IG5vcm1hbGl6ZUNvbG9yKGR5bmFtaWMuZGFyayksXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICAgICAgaGlnaENvbnRyYXN0TGlnaHQ6IG5vcm1hbGl6ZUNvbG9yKGR5bmFtaWMuaGlnaENvbnRyYXN0TGlnaHQpLFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgIGhpZ2hDb250cmFzdERhcms6IG5vcm1hbGl6ZUNvbG9yKGR5bmFtaWMuaGlnaENvbnRyYXN0RGFyayksXG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIGR5bmFtaWNDb2xvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVDb2xvck9iamVjdDogKFxuICBjb2xvcjogTmF0aXZlQ29sb3JWYWx1ZSxcbiAgLyogJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS10eXBlXVxuICAgKiBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUgaXMgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBvcGFxdWUgTmF0aXZlQ29sb3JWYWx1ZSBvbiBpT1MgcGxhdGZvcm0gKi9cbikgPT4gP1Byb2Nlc3NlZENvbG9yVmFsdWUgPSBfbm9ybWFsaXplQ29sb3JPYmplY3Q7XG5cbmNvbnN0IF9wcm9jZXNzQ29sb3JPYmplY3QgPSAoXG4gIGNvbG9yOiBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUsXG4pOiA/TG9jYWxOYXRpdmVDb2xvclZhbHVlID0+IHtcbiAgaWYgKCdkeW5hbWljJyBpbiBjb2xvciAmJiBjb2xvci5keW5hbWljICE9IG51bGwpIHtcbiAgICBjb25zdCBwcm9jZXNzQ29sb3IgPSByZXF1aXJlKCcuL3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQ7XG4gICAgY29uc3QgZHluYW1pYyA9IGNvbG9yLmR5bmFtaWM7XG4gICAgY29uc3QgZHluYW1pY0NvbG9yOiBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUgPSB7XG4gICAgICBkeW5hbWljOiB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICAgICAgbGlnaHQ6IHByb2Nlc3NDb2xvcihkeW5hbWljLmxpZ2h0KSxcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXVxuICAgICAgICBkYXJrOiBwcm9jZXNzQ29sb3IoZHluYW1pYy5kYXJrKSxcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXVxuICAgICAgICBoaWdoQ29udHJhc3RMaWdodDogcHJvY2Vzc0NvbG9yKGR5bmFtaWMuaGlnaENvbnRyYXN0TGlnaHQpLFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgIGhpZ2hDb250cmFzdERhcms6IHByb2Nlc3NDb2xvcihkeW5hbWljLmhpZ2hDb250cmFzdERhcmspLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBkeW5hbWljQ29sb3I7XG4gIH1cbiAgcmV0dXJuIGNvbG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NDb2xvck9iamVjdDogKFxuICBjb2xvcjogTmF0aXZlQ29sb3JWYWx1ZSxcbiAgLyogJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS10eXBlXVxuICAgKiBMb2NhbE5hdGl2ZUNvbG9yVmFsdWUgaXMgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBvcGFxdWUgTmF0aXZlQ29sb3JWYWx1ZSBvbiBpT1MgcGxhdGZvcm0gKi9cbikgPT4gP05hdGl2ZUNvbG9yVmFsdWUgPSBfcHJvY2Vzc0NvbG9yT2JqZWN0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCBOYXRpdmVFdmVudEVtaXR0ZXIgZnJvbSAnLi4vRXZlbnRFbWl0dGVyL05hdGl2ZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCBFdmVudEVtaXR0ZXIsIHtcbiAgdHlwZSBFdmVudFN1YnNjcmlwdGlvbixcbn0gZnJvbSAnLi4vdmVuZG9yL2VtaXR0ZXIvRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7aXNBc3luY0RlYnVnZ2luZ30gZnJvbSAnLi9EZWJ1Z0Vudmlyb25tZW50JztcbmltcG9ydCBOYXRpdmVBcHBlYXJhbmNlLCB7XG4gIHR5cGUgQXBwZWFyYW5jZVByZWZlcmVuY2VzLFxuICB0eXBlIENvbG9yU2NoZW1lTmFtZSxcbn0gZnJvbSAnLi9OYXRpdmVBcHBlYXJhbmNlJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxudHlwZSBBcHBlYXJhbmNlTGlzdGVuZXIgPSAocHJlZmVyZW5jZXM6IEFwcGVhcmFuY2VQcmVmZXJlbmNlcykgPT4gdm9pZDtcbmNvbnN0IGV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICBjaGFuZ2U6IFtBcHBlYXJhbmNlUHJlZmVyZW5jZXNdLFxufT4oKTtcblxudHlwZSBOYXRpdmVBcHBlYXJhbmNlRXZlbnREZWZpbml0aW9ucyA9IHtcbiAgYXBwZWFyYW5jZUNoYW5nZWQ6IFtBcHBlYXJhbmNlUHJlZmVyZW5jZXNdLFxufTtcblxuaWYgKE5hdGl2ZUFwcGVhcmFuY2UpIHtcbiAgY29uc3QgbmF0aXZlRXZlbnRFbWl0dGVyID1cbiAgICBuZXcgTmF0aXZlRXZlbnRFbWl0dGVyPE5hdGl2ZUFwcGVhcmFuY2VFdmVudERlZmluaXRpb25zPihcbiAgICAgIC8vIFQ4ODcxNTA2MzogTmF0aXZlRXZlbnRFbWl0dGVyIG9ubHkgdXNlZCB0aGlzIHBhcmFtZXRlciBvbiBpT1MuIE5vdyBpdCB1c2VzIGl0IG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHRoaXMgY29kZSB3YXMgbW9kaWZpZWQgYXV0b21hdGljYWxseSB0byBwcmVzZXJ2ZSBpdHMgYmVoYXZpb3JcbiAgICAgIC8vIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgbmF0aXZlIG1vZHVsZSBvbiBvdGhlciBwbGF0Zm9ybXMsIHBsZWFzZSByZW1vdmUgdGhpcyBjb25kaXRpb24gYW5kIHRlc3QgaXRzIGJlaGF2aW9yXG4gICAgICBQbGF0Zm9ybS5PUyAhPT0gJ2lvcycgPyBudWxsIDogTmF0aXZlQXBwZWFyYW5jZSxcbiAgICApO1xuICBuYXRpdmVFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoXG4gICAgJ2FwcGVhcmFuY2VDaGFuZ2VkJyxcbiAgICAobmV3QXBwZWFyYW5jZTogQXBwZWFyYW5jZVByZWZlcmVuY2VzKSA9PiB7XG4gICAgICBjb25zdCB7Y29sb3JTY2hlbWV9ID0gbmV3QXBwZWFyYW5jZTtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgY29sb3JTY2hlbWUgPT09ICdkYXJrJyB8fFxuICAgICAgICAgIGNvbG9yU2NoZW1lID09PSAnbGlnaHQnIHx8XG4gICAgICAgICAgY29sb3JTY2hlbWUgPT0gbnVsbCxcbiAgICAgICAgXCJVbnJlY29nbml6ZWQgY29sb3Igc2NoZW1lLiBEaWQgeW91IG1lYW4gJ2RhcmsnIG9yICdsaWdodCc/XCIsXG4gICAgICApO1xuICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtjb2xvclNjaGVtZX0pO1xuICAgIH0sXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvKipcbiAgICogTm90ZTogQWx0aG91Z2ggY29sb3Igc2NoZW1lIGlzIGF2YWlsYWJsZSBpbW1lZGlhdGVseSwgaXQgbWF5IGNoYW5nZSBhdCBhbnlcbiAgICogdGltZS4gQW55IHJlbmRlcmluZyBsb2dpYyBvciBzdHlsZXMgdGhhdCBkZXBlbmQgb24gdGhpcyBzaG91bGQgdHJ5IHRvIGNhbGxcbiAgICogdGhpcyBmdW5jdGlvbiBvbiBldmVyeSByZW5kZXIsIHJhdGhlciB0aGFuIGNhY2hpbmcgdGhlIHZhbHVlIChmb3IgZXhhbXBsZSxcbiAgICogdXNpbmcgaW5saW5lIHN0eWxlcyByYXRoZXIgdGhhbiBzZXR0aW5nIGEgdmFsdWUgaW4gYSBgU3R5bGVTaGVldGApLlxuICAgKlxuICAgKiBFeGFtcGxlOiBgY29uc3QgY29sb3JTY2hlbWUgPSBBcHBlYXJhbmNlLmdldENvbG9yU2NoZW1lKCk7YFxuICAgKlxuICAgKiBAcmV0dXJucyB7P0NvbG9yU2NoZW1lTmFtZX0gVmFsdWUgZm9yIHRoZSBjb2xvciBzY2hlbWUgcHJlZmVyZW5jZS5cbiAgICovXG4gIGdldENvbG9yU2NoZW1lKCk6ID9Db2xvclNjaGVtZU5hbWUge1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBpZiAoaXNBc3luY0RlYnVnZ2luZykge1xuICAgICAgICAvLyBIYXJkIGNvZGUgbGlnaHQgdGhlbWUgd2hlbiB1c2luZyB0aGUgYXN5bmMgZGVidWdnZXIgYXNcbiAgICAgICAgLy8gc3luYyBjYWxscyBhcmVuJ3Qgc3VwcG9ydGVkXG4gICAgICAgIHJldHVybiAnbGlnaHQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IChocmFtb3MpIFQ1MjkxOTY1MiBVc2UgP0NvbG9yU2NoZW1lTmFtZSBvbmNlIGNvZGVnZW4gc3VwcG9ydHMgdW5pb25cbiAgICBjb25zdCBuYXRpdmVDb2xvclNjaGVtZTogP3N0cmluZyA9XG4gICAgICBOYXRpdmVBcHBlYXJhbmNlID09IG51bGxcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogTmF0aXZlQXBwZWFyYW5jZS5nZXRDb2xvclNjaGVtZSgpIHx8IG51bGw7XG4gICAgaW52YXJpYW50KFxuICAgICAgbmF0aXZlQ29sb3JTY2hlbWUgPT09ICdkYXJrJyB8fFxuICAgICAgICBuYXRpdmVDb2xvclNjaGVtZSA9PT0gJ2xpZ2h0JyB8fFxuICAgICAgICBuYXRpdmVDb2xvclNjaGVtZSA9PSBudWxsLFxuICAgICAgXCJVbnJlY29nbml6ZWQgY29sb3Igc2NoZW1lLiBEaWQgeW91IG1lYW4gJ2RhcmsnIG9yICdsaWdodCc/XCIsXG4gICAgKTtcbiAgICByZXR1cm4gbmF0aXZlQ29sb3JTY2hlbWU7XG4gIH0sXG5cbiAgc2V0Q29sb3JTY2hlbWUoY29sb3JTY2hlbWU6ID9Db2xvclNjaGVtZU5hbWUpOiB2b2lkIHtcbiAgICBjb25zdCBuYXRpdmVDb2xvclNjaGVtZSA9IGNvbG9yU2NoZW1lID09IG51bGwgPyAndW5zcGVjaWZpZWQnIDogY29sb3JTY2hlbWU7XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICBjb2xvclNjaGVtZSA9PT0gJ2RhcmsnIHx8IGNvbG9yU2NoZW1lID09PSAnbGlnaHQnIHx8IGNvbG9yU2NoZW1lID09IG51bGwsXG4gICAgICBcIlVucmVjb2duaXplZCBjb2xvciBzY2hlbWUuIERpZCB5b3UgbWVhbiAnZGFyaycsICdsaWdodCcgb3IgbnVsbD9cIixcbiAgICApO1xuXG4gICAgaWYgKE5hdGl2ZUFwcGVhcmFuY2UgIT0gbnVsbCAmJiBOYXRpdmVBcHBlYXJhbmNlLnNldENvbG9yU2NoZW1lICE9IG51bGwpIHtcbiAgICAgIE5hdGl2ZUFwcGVhcmFuY2Uuc2V0Q29sb3JTY2hlbWUobmF0aXZlQ29sb3JTY2hlbWUpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGhhbmRsZXIgdGhhdCBpcyBmaXJlZCB3aGVuIGFwcGVhcmFuY2UgcHJlZmVyZW5jZXMgY2hhbmdlLlxuICAgKi9cbiAgYWRkQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXI6IEFwcGVhcmFuY2VMaXN0ZW5lcik6IEV2ZW50U3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCB0eXBlICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBcHBlYXJhbmNlJztcbmltcG9ydCBOYXRpdmVBcHBlYXJhbmNlIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQXBwZWFyYW5jZSc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVBcHBlYXJhbmNlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgdHlwZSBDb2xvclNjaGVtZU5hbWUgPSAnbGlnaHQnIHwgJ2RhcmsnO1xuXG5leHBvcnQgdHlwZSBBcHBlYXJhbmNlUHJlZmVyZW5jZXMgPSB7fFxuICAvLyBUT0RPOiAoaHJhbW9zKSBUNTI5MTk2NTIgVXNlID9Db2xvclNjaGVtZU5hbWUgb25jZSBjb2RlZ2VuIHN1cHBvcnRzIHVuaW9uXG4gIC8vIHR5cGVzLlxuICAvKiAnbGlnaHQnIHwgJ2RhcmsnICovXG4gIGNvbG9yU2NoZW1lPzogP3N0cmluZyxcbnx9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gIC8vIFRPRE86IChocmFtb3MpIFQ1MjkxOTY1MiBVc2UgP0NvbG9yU2NoZW1lTmFtZSBvbmNlIGNvZGVnZW4gc3VwcG9ydHMgdW5pb25cbiAgLy8gdHlwZXMuXG4gIC8qICdsaWdodCcgfCAnZGFyaycgKi9cbiAgK2dldENvbG9yU2NoZW1lOiAoKSA9PiA/c3RyaW5nO1xuICArc2V0Q29sb3JTY2hlbWU/OiAoY29sb3JTY2hlbWU6IHN0cmluZykgPT4gdm9pZDtcblxuICAvLyBSQ1RFdmVudEVtaXR0ZXJcbiAgK2FkZExpc3RlbmVyOiAoZXZlbnROYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICtyZW1vdmVMaXN0ZW5lcnM6IChjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ0FwcGVhcmFuY2UnKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbmV4cG9ydCBsZXQgaXNBc3luY0RlYnVnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5pZiAoX19ERVZfXykge1xuICAvLyBUaGVzZSBuYXRpdmUgaW50ZXJmYWNlcyBkb24ndCBleGlzdCBpbiBhc3luY2hyb25vdXMgZGVidWdnaW5nIGVudmlyb25tZW50cy5cbiAgaXNBc3luY0RlYnVnZ2luZyA9ICFnbG9iYWwubmF0aXZlQ2FsbFN5bmNIb29rICYmICFnbG9iYWwuUk4kQnJpZGdlbGVzcztcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZURldkxvYWRpbmdWaWV3JztcbmltcG9ydCBOYXRpdmVEZXZMb2FkaW5nVmlldyBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZURldkxvYWRpbmdWaWV3JztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZURldkxvYWRpbmdWaWV3O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtzaG93TWVzc2FnZTogKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICB3aXRoQ29sb3I6ID9udW1iZXIsXG4gICAgd2l0aEJhY2tncm91bmRDb2xvcjogP251bWJlcixcbiAgKSA9PiB2b2lkO1xuICAraGlkZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdEZXZMb2FkaW5nVmlldycpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICpcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL3ZlbmRvci9ldmVudGVtaXR0ZXIzXCIpO1xuY29uc3QgaW5qZWN0ID0gKHsgbW9kdWxlOiBbaWQsIGNvZGVdLCBzb3VyY2VVUkwgfSkgPT4ge1xuICAvLyBTb21lIGVuZ2luZXMgZG8gbm90IHN1cHBvcnQgYHNvdXJjZVVSTGAgYXMgYSBjb21tZW50LiBXZSBleHBvc2UgYVxuICAvLyBgZ2xvYmFsRXZhbFdpdGhTb3VyY2VVcmxgIGZ1bmN0aW9uIHRvIGhhbmRsZSB1cGRhdGVzIGluIHRoYXQgY2FzZS5cbiAgaWYgKGdsb2JhbC5nbG9iYWxFdmFsV2l0aFNvdXJjZVVybCkge1xuICAgIGdsb2JhbC5nbG9iYWxFdmFsV2l0aFNvdXJjZVVybChjb2RlLCBzb3VyY2VVUkwpO1xuICB9IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1ldmFsXG4gICAgZXZhbChjb2RlKTtcbiAgfVxufTtcbmNvbnN0IGluamVjdFVwZGF0ZSA9ICh1cGRhdGUpID0+IHtcbiAgdXBkYXRlLmFkZGVkLmZvckVhY2goaW5qZWN0KTtcbiAgdXBkYXRlLm1vZGlmaWVkLmZvckVhY2goaW5qZWN0KTtcbn07XG5jbGFzcyBITVJDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBfaXNFbmFibGVkID0gZmFsc2U7XG4gIF9wZW5kaW5nVXBkYXRlID0gbnVsbDtcbiAgX3F1ZXVlID0gW107XG4gIF9zdGF0ZSA9IFwib3BlbmluZ1wiO1xuICBjb25zdHJ1Y3Rvcih1cmwpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gQWNjZXNzIHRoZSBnbG9iYWwgV2ViU29ja2V0IG9iamVjdCBvbmx5IGFmdGVyIGVuYWJsaW5nIHRoZSBjbGllbnQsXG4gICAgLy8gc2luY2Ugc29tZSBwb2x5ZmlsbHMgZG8gdGhlIGluaXRpYWxpemF0aW9uIGxhemlseS5cbiAgICB0aGlzLl93cyA9IG5ldyBnbG9iYWwuV2ViU29ja2V0KHVybCk7XG4gICAgdGhpcy5fd3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc3RhdGUgPSBcIm9wZW5cIjtcbiAgICAgIHRoaXMuZW1pdChcIm9wZW5cIik7XG4gICAgICB0aGlzLl9mbHVzaFF1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLl93cy5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICB0aGlzLmVtaXQoXCJjb25uZWN0aW9uLWVycm9yXCIsIGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuX3dzLm9uY2xvc2UgPSAoY2xvc2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy5fc3RhdGUgPSBcImNsb3NlZFwiO1xuICAgICAgdGhpcy5lbWl0KFwiY2xvc2VcIiwgY2xvc2VFdmVudCk7XG4gICAgfTtcbiAgICB0aGlzLl93cy5vbm1lc3NhZ2UgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoU3RyaW5nKG1lc3NhZ2UuZGF0YSkpO1xuICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImJ1bmRsZS1yZWdpc3RlcmVkXCI6XG4gICAgICAgICAgdGhpcy5lbWl0KFwiYnVuZGxlLXJlZ2lzdGVyZWRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ1cGRhdGUtc3RhcnRcIjpcbiAgICAgICAgICB0aGlzLmVtaXQoXCJ1cGRhdGUtc3RhcnRcIiwgZGF0YS5ib2R5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgIHRoaXMuZW1pdChcInVwZGF0ZVwiLCBkYXRhLmJvZHkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidXBkYXRlLWRvbmVcIjpcbiAgICAgICAgICB0aGlzLmVtaXQoXCJ1cGRhdGUtZG9uZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZGF0YS5ib2R5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcInVua25vd24tbWVzc2FnZVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZGF0YSxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub24oXCJ1cGRhdGVcIiwgKHVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICBpbmplY3RVcGRhdGUodXBkYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fcGVuZGluZ1VwZGF0ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdVcGRhdGUgPSB1cGRhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wZW5kaW5nVXBkYXRlID0gbWVyZ2VVcGRhdGVzKHRoaXMuX3BlbmRpbmdVcGRhdGUsIHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5fd3MuY2xvc2UoKTtcbiAgfVxuICBzZW5kKG1lc3NhZ2UpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICBjYXNlIFwib3BlbmluZ1wiOlxuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgIHRoaXMuX3dzLnNlbmQobWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNsb3NlZFwiOlxuICAgICAgICAvLyBJZ25vcmUuXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW1dlYlNvY2tldEhNUkNsaWVudF0gVW5rbm93biBzdGF0ZTogXCIgKyB0aGlzLl9zdGF0ZSk7XG4gICAgfVxuICB9XG4gIF9mbHVzaFF1ZXVlKCkge1xuICAgIHRoaXMuX3F1ZXVlLmZvckVhY2goKG1lc3NhZ2UpID0+IHRoaXMuc2VuZChtZXNzYWdlKSk7XG4gICAgdGhpcy5fcXVldWUubGVuZ3RoID0gMDtcbiAgfVxuICBlbmFibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICBjb25zdCB1cGRhdGUgPSB0aGlzLl9wZW5kaW5nVXBkYXRlO1xuICAgIHRoaXMuX3BlbmRpbmdVcGRhdGUgPSBudWxsO1xuICAgIGlmICh1cGRhdGUgIT0gbnVsbCkge1xuICAgICAgaW5qZWN0VXBkYXRlKHVwZGF0ZSk7XG4gICAgfVxuICB9XG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gIH1cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0VuYWJsZWQ7XG4gIH1cbiAgaGFzUGVuZGluZ1VwZGF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdVcGRhdGUgIT0gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2VVcGRhdGVzKGJhc2UsIG5leHQpIHtcbiAgY29uc3QgYWRkZWRJRHMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IGRlbGV0ZWRJRHMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IG1vZHVsZU1hcCA9IG5ldyBNYXAoKTtcblxuICAvLyBGaWxsIGluIHRoZSB0ZW1wb3JhcnkgbWFwcyBhbmQgc2V0cyBmcm9tIGJvdGggdXBkYXRlcyBpbiB0aGVpciBvcmRlci5cbiAgYXBwbHlVcGRhdGVMb2NhbGx5KGJhc2UpO1xuICBhcHBseVVwZGF0ZUxvY2FsbHkobmV4dCk7XG4gIGZ1bmN0aW9uIGFwcGx5VXBkYXRlTG9jYWxseSh1cGRhdGUpIHtcbiAgICB1cGRhdGUuZGVsZXRlZC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgaWYgKGFkZGVkSURzLmhhcyhpZCkpIHtcbiAgICAgICAgYWRkZWRJRHMuZGVsZXRlKGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZWRJRHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICAgIG1vZHVsZU1hcC5kZWxldGUoaWQpO1xuICAgIH0pO1xuICAgIHVwZGF0ZS5hZGRlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGl0ZW0ubW9kdWxlWzBdO1xuICAgICAgaWYgKGRlbGV0ZWRJRHMuaGFzKGlkKSkge1xuICAgICAgICBkZWxldGVkSURzLmRlbGV0ZShpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRlZElEcy5hZGQoaWQpO1xuICAgICAgfVxuICAgICAgbW9kdWxlTWFwLnNldChpZCwgaXRlbSk7XG4gICAgfSk7XG4gICAgdXBkYXRlLm1vZGlmaWVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbS5tb2R1bGVbMF07XG4gICAgICBtb2R1bGVNYXAuc2V0KGlkLCBpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5vdyByZWNvbnN0cnVjdCBhIHVuaWZpZWQgdXBkYXRlIGZyb20gb3VyIGluLW1lbW9yeSBtYXBzIGFuZCBzZXRzLlxuICAvLyBBcHBseWluZyBpdCBzaG91bGQgYmUgZXF1aXZhbGVudCB0byBhcHBseWluZyBib3RoIG9mIHRoZW0gaW5kaXZpZHVhbGx5LlxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgaXNJbml0aWFsVXBkYXRlOiBuZXh0LmlzSW5pdGlhbFVwZGF0ZSxcbiAgICByZXZpc2lvbklkOiBuZXh0LnJldmlzaW9uSWQsXG4gICAgYWRkZWQ6IFtdLFxuICAgIG1vZGlmaWVkOiBbXSxcbiAgICBkZWxldGVkOiBbXSxcbiAgfTtcbiAgZGVsZXRlZElEcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgIHJlc3VsdC5kZWxldGVkLnB1c2goaWQpO1xuICB9KTtcbiAgbW9kdWxlTWFwLmZvckVhY2goKGl0ZW0sIGlkKSA9PiB7XG4gICAgaWYgKGRlbGV0ZWRJRHMuaGFzKGlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYWRkZWRJRHMuaGFzKGlkKSkge1xuICAgICAgcmVzdWx0LmFkZGVkLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5tb2RpZmllZC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhNUkNsaWVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQG5vZm9ybWF0XG4gKi9cblxuLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBBcm5vdXQgS2F6ZW1pZXJcbiAqXG4gKiBUaGlzIGlzIGEgdmVuZG9yZWQgZmlsZSBiYXNlZCBvbiBFdmVudEVtaXR0ZXIzOiBodHRwczovL2dpdGh1Yi5jb20vcHJpbXVzL2V2ZW50ZW1pdHRlcjNcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gIHByZWZpeCA9IFwiflwiO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpLFxuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pXG4gICAgKGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIpLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdLFxuICAgIGV2ZW50cyxcbiAgICBuYW1lO1xuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQsXG4gICAgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50LFxuICAgIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdLFxuICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgYXJncyxcbiAgICBpO1xuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OlxuICAgICAgICByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGgsXG4gICAgICBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncylcbiAgICAgICAgICAgIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKFxuICBldmVudCxcbiAgZm4sXG4gIGNvbnRleHQsXG4gIG9uY2Vcbikge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKVxuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRTdWJzY3JpcHRpb259IGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbmltcG9ydCBOYXRpdmVFdmVudEVtaXR0ZXIgZnJvbSAnLi4vRXZlbnRFbWl0dGVyL05hdGl2ZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgTmF0aXZlRGV2U2V0dGluZ3MgZnJvbSAnLi4vTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVEZXZTZXR0aW5ncyc7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcblxubGV0IERldlNldHRpbmdzOiB7XG4gIGFkZE1lbnVJdGVtKHRpdGxlOiBzdHJpbmcsIGhhbmRsZXI6ICgpID0+IG1peGVkKTogdm9pZCxcbiAgcmVsb2FkKHJlYXNvbj86IHN0cmluZyk6IHZvaWQsXG4gIG9uRmFzdFJlZnJlc2goKTogdm9pZCxcbn0gPSB7XG4gIGFkZE1lbnVJdGVtKHRpdGxlOiBzdHJpbmcsIGhhbmRsZXI6ICgpID0+IG1peGVkKTogdm9pZCB7fSxcbiAgcmVsb2FkKHJlYXNvbj86IHN0cmluZyk6IHZvaWQge30sXG4gIG9uRmFzdFJlZnJlc2goKTogdm9pZCB7fSxcbn07XG5cbnR5cGUgRGV2U2V0dGluZ3NFdmVudERlZmluaXRpb25zID0ge1xuICBkaWRQcmVzc01lbnVJdGVtOiBbe3RpdGxlOiBzdHJpbmd9XSxcbn07XG5cbmlmIChfX0RFVl9fKSB7XG4gIGNvbnN0IGVtaXR0ZXIgPSBuZXcgTmF0aXZlRXZlbnRFbWl0dGVyPERldlNldHRpbmdzRXZlbnREZWZpbml0aW9ucz4oXG4gICAgLy8gVDg4NzE1MDYzOiBOYXRpdmVFdmVudEVtaXR0ZXIgb25seSB1c2VkIHRoaXMgcGFyYW1ldGVyIG9uIGlPUy4gTm93IGl0IHVzZXMgaXQgb24gYWxsIHBsYXRmb3Jtcywgc28gdGhpcyBjb2RlIHdhcyBtb2RpZmllZCBhdXRvbWF0aWNhbGx5IHRvIHByZXNlcnZlIGl0cyBiZWhhdmlvclxuICAgIC8vIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgbmF0aXZlIG1vZHVsZSBvbiBvdGhlciBwbGF0Zm9ybXMsIHBsZWFzZSByZW1vdmUgdGhpcyBjb25kaXRpb24gYW5kIHRlc3QgaXRzIGJlaGF2aW9yXG4gICAgUGxhdGZvcm0uT1MgIT09ICdpb3MnID8gbnVsbCA6IE5hdGl2ZURldlNldHRpbmdzLFxuICApO1xuICBjb25zdCBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50U3Vic2NyaXB0aW9uPigpO1xuXG4gIERldlNldHRpbmdzID0ge1xuICAgIGFkZE1lbnVJdGVtKHRpdGxlOiBzdHJpbmcsIGhhbmRsZXI6ICgpID0+IG1peGVkKTogdm9pZCB7XG4gICAgICAvLyBNYWtlIHN1cmUgaXRlbXMgYXJlIG5vdCBhZGRlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBjYW5cbiAgICAgIC8vIGhhcHBlbiB3aGVuIGhvdCByZWxvYWRpbmcgdGhlIG1vZHVsZSB0aGF0IHJlZ2lzdGVycyB0aGVcbiAgICAgIC8vIG1lbnUgaXRlbXMuIFRoZSB0aXRsZSBpcyB1c2VkIGFzIHRoZSBpZCB3aGljaCBtZWFucyB3ZVxuICAgICAgLy8gZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSBpdGVtcyB3aXRoIHRoZSBzYW1lIG5hbWUuXG4gICAgICBsZXQgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9ucy5nZXQodGl0bGUpO1xuICAgICAgaWYgKHN1YnNjcmlwdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE5hdGl2ZURldlNldHRpbmdzLmFkZE1lbnVJdGVtKHRpdGxlKTtcbiAgICAgIH1cblxuICAgICAgc3Vic2NyaXB0aW9uID0gZW1pdHRlci5hZGRMaXN0ZW5lcignZGlkUHJlc3NNZW51SXRlbScsIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnRpdGxlID09PSB0aXRsZSkge1xuICAgICAgICAgIGhhbmRsZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzdWJzY3JpcHRpb25zLnNldCh0aXRsZSwgc3Vic2NyaXB0aW9uKTtcbiAgICB9LFxuICAgIHJlbG9hZChyZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGlmIChOYXRpdmVEZXZTZXR0aW5ncy5yZWxvYWRXaXRoUmVhc29uICE9IG51bGwpIHtcbiAgICAgICAgTmF0aXZlRGV2U2V0dGluZ3MucmVsb2FkV2l0aFJlYXNvbihyZWFzb24gPz8gJ1VuY2F0ZWdvcml6ZWQgZnJvbSBKUycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTmF0aXZlRGV2U2V0dGluZ3MucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkZhc3RSZWZyZXNoKCk6IHZvaWQge1xuICAgICAgTmF0aXZlRGV2U2V0dGluZ3Mub25GYXN0UmVmcmVzaD8uKCk7XG4gICAgfSxcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZXZTZXR0aW5ncztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZURldlNldHRpbmdzJztcbmltcG9ydCBOYXRpdmVEZXZTZXR0aW5ncyBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZURldlNldHRpbmdzJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZURldlNldHRpbmdzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtyZWxvYWQ6ICgpID0+IHZvaWQ7XG4gICtyZWxvYWRXaXRoUmVhc29uPzogKHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkO1xuICArb25GYXN0UmVmcmVzaD86ICgpID0+IHZvaWQ7XG4gICtzZXRIb3RMb2FkaW5nRW5hYmxlZDogKGlzSG90TG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICtzZXRJc0RlYnVnZ2luZ1JlbW90ZWx5OiAoaXNEZWJ1Z2dpbmdSZW1vdGVseUVuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICtzZXRQcm9maWxpbmdFbmFibGVkOiAoaXNQcm9maWxpbmdFbmFibGVkOiBib29sZWFuKSA9PiB2b2lkO1xuICArdG9nZ2xlRWxlbWVudEluc3BlY3RvcjogKCkgPT4gdm9pZDtcbiAgK2FkZE1lbnVJdGVtOiAodGl0bGU6IHN0cmluZykgPT4gdm9pZDtcblxuICAvLyBFdmVudHNcbiAgK2FkZExpc3RlbmVyOiAoZXZlbnROYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICtyZW1vdmVMaXN0ZW5lcnM6IChjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8vIGlPUyBvbmx5LlxuICArc2V0SXNTaGFrZVRvU2hvd0Rldk1lbnVFbmFibGVkOiAoZW5hYmxlZDogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0RW5mb3JjaW5nPFNwZWM+KCdEZXZTZXR0aW5ncycpOiBTcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtITVJDbGllbnROYXRpdmVJbnRlcmZhY2V9IGZyb20gJy4vSE1SQ2xpZW50JztcblxuLy8gVGhpcyBzaGltIGVuc3VyZXMgREVWIGJpbmFyeSBidWlsZHMgZG9uJ3QgY3Jhc2ggaW4gSlNcbi8vIHdoZW4gdGhleSdyZSBjb21iaW5lZCB3aXRoIGEgUFJPRCBKYXZhU2NyaXB0IGJ1aWxkLlxuY29uc3QgSE1SQ2xpZW50UHJvZFNoaW06IEhNUkNsaWVudE5hdGl2ZUludGVyZmFjZSA9IHtcbiAgc2V0dXAoKSB7fSxcbiAgZW5hYmxlKCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnRmFzdCBSZWZyZXNoIGlzIGRpc2FibGVkIGluIEphdmFTY3JpcHQgYnVuZGxlcyBidWlsdCBpbiBwcm9kdWN0aW9uIG1vZGUuICcgK1xuICAgICAgICAnRGlkIHlvdSBmb3JnZXQgdG8gcnVuIE1ldHJvPycsXG4gICAgKTtcbiAgfSxcbiAgZGlzYWJsZSgpIHt9LFxuICByZWdpc3RlckJ1bmRsZSgpIHt9LFxuICBsb2coKSB7fSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSE1SQ2xpZW50UHJvZFNoaW07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgdHlwZSBGZXRjaFNlZ21lbnRGdW5jdGlvbiA9IHR5cGVvZiBfX2ZldGNoU2VnbWVudDtcblxuLyoqXG4gKiBTZXQgdXAgU2VnbWVudEZldGNoZXIuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1vZHVsZSBkaXJlY3RseSwgb3IganVzdCByZXF1aXJlIEluaXRpYWxpemVDb3JlLlxuICovXG5cbmZ1bmN0aW9uIF9fZmV0Y2hTZWdtZW50KFxuICBzZWdtZW50SWQ6IG51bWJlcixcbiAgb3B0aW9uczogJFJlYWRPbmx5PHtcbiAgICBvdGFCdWlsZE51bWJlcjogP3N0cmluZyxcbiAgICByZXF1ZXN0ZWRNb2R1bGVOYW1lOiBzdHJpbmcsXG4gICAgc2VnbWVudEhhc2g6IHN0cmluZyxcbiAgfT4sXG4gIGNhbGxiYWNrOiAoP0Vycm9yKSA9PiB2b2lkLFxuKSB7XG4gIGNvbnN0IFNlZ21lbnRGZXRjaGVyID1cbiAgICByZXF1aXJlKCcuL1NlZ21lbnRGZXRjaGVyL05hdGl2ZVNlZ21lbnRGZXRjaGVyJykuZGVmYXVsdDtcbiAgU2VnbWVudEZldGNoZXIuZmV0Y2hTZWdtZW50KFxuICAgIHNlZ21lbnRJZCxcbiAgICBvcHRpb25zLFxuICAgIChcbiAgICAgIGVycm9yT2JqZWN0OiA/e1xuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGNvZGU6IHN0cmluZyxcbiAgICAgICAgLi4uXG4gICAgICB9LFxuICAgICkgPT4ge1xuICAgICAgaWYgKGVycm9yT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGVycm9yT2JqZWN0Lm1lc3NhZ2UpO1xuICAgICAgICAoZXJyb3I6IGFueSkuY29kZSA9IGVycm9yT2JqZWN0LmNvZGU7IC8vIGZsb3dsaW50LWxpbmUgdW5jbGVhci10eXBlOiBvZmZcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9LFxuICApO1xufVxuXG5nbG9iYWwuX19mZXRjaFNlZ21lbnQgPSBfX2ZldGNoU2VnbWVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVNlZ21lbnRGZXRjaGVyJztcbmltcG9ydCBOYXRpdmVTZWdtZW50RmV0Y2hlciBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVNlZ21lbnRGZXRjaGVyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVNlZ21lbnRGZXRjaGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtmZXRjaFNlZ21lbnQ6IChcbiAgICBzZWdtZW50SWQ6IG51bWJlcixcbiAgICBvcHRpb25zOiBPYmplY3QsIC8vIGZsb3dsaW50LWxpbmUgdW5jbGVhci10eXBlOiBvZmZcbiAgICBjYWxsYmFjazogKGVycm9yOiA/T2JqZWN0KSA9PiB2b2lkLCAvLyBmbG93bGludC1saW5lIHVuY2xlYXItdHlwZTogb2ZmXG4gICkgPT4gdm9pZDtcbiAgK2dldFNlZ21lbnQ/OiAoXG4gICAgc2VnbWVudElkOiBudW1iZXIsXG4gICAgb3B0aW9uczogT2JqZWN0LCAvLyBmbG93bGludC1saW5lIHVuY2xlYXItdHlwZTogb2ZmXG4gICAgY2FsbGJhY2s6IChlcnJvcjogP09iamVjdCwgcGF0aDogP3N0cmluZykgPT4gdm9pZCwgLy8gZmxvd2xpbnQtbGluZSB1bmNsZWFyLXR5cGU6IG9mZlxuICApID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldEVuZm9yY2luZzxTcGVjPignU2VnbWVudEZldGNoZXInKTogU3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENoZWNrIGZvciBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZS5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbW9kdWxlIGRpcmVjdGx5LCBvciBqdXN0IHJlcXVpcmUgSW5pdGlhbGl6ZUNvcmUuXG4gKi9cbmNvbnN0IFJlYWN0TmF0aXZlVmVyc2lvbkNoZWNrID0gcmVxdWlyZSgnLi9SZWFjdE5hdGl2ZVZlcnNpb25DaGVjaycpO1xuUmVhY3ROYXRpdmVWZXJzaW9uQ2hlY2suY2hlY2tWZXJzaW9ucygpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuXG5jb25zdCBSZWFjdE5hdGl2ZVZlcnNpb24gPSByZXF1aXJlKCcuL1JlYWN0TmF0aXZlVmVyc2lvbicpO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IHRoZSB2ZXJzaW9uIG9mIHRoaXMgUmVhY3QgTmF0aXZlIEpTIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlXG4gKiBjb2RlLCB0aHJvd2luZyBhbiBlcnJvciBpZiBpdCBpc24ndC5cbiAqXG4gKiBUaGUgZXhpc3RlbmNlIG9mIHRoaXMgbW9kdWxlIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgUmVhY3QgTmF0aXZlXG4gKiBldmVuIHRob3VnaCBpdCBpcyB1c2VkIG9ubHkgaW50ZXJuYWxseSB3aXRoaW4gUmVhY3QgTmF0aXZlLiBSZWFjdCBOYXRpdmVcbiAqIGltcGxlbWVudGF0aW9ucyBmb3Igb3RoZXIgcGxhdGZvcm1zIChleDogV2luZG93cykgbWF5IG92ZXJyaWRlIHRoaXMgbW9kdWxlXG4gKiBhbmQgcmVseSBvbiBpdHMgZXhpc3RlbmNlIGFzIGEgc2VwYXJhdGUgbW9kdWxlLlxuICovXG5jb25zdCBjaGVja1ZlcnNpb25zID0gZnVuY3Rpb24gY2hlY2tWZXJzaW9ucygpOiB2b2lkIHtcbiAgY29uc3QgbmF0aXZlVmVyc2lvbiA9IFBsYXRmb3JtLmNvbnN0YW50cy5yZWFjdE5hdGl2ZVZlcnNpb247XG4gIGlmIChcbiAgICBSZWFjdE5hdGl2ZVZlcnNpb24udmVyc2lvbi5tYWpvciAhPT0gbmF0aXZlVmVyc2lvbi5tYWpvciB8fFxuICAgIFJlYWN0TmF0aXZlVmVyc2lvbi52ZXJzaW9uLm1pbm9yICE9PSBuYXRpdmVWZXJzaW9uLm1pbm9yXG4gICkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgUmVhY3QgTmF0aXZlIHZlcnNpb24gbWlzbWF0Y2guXFxuXFxuSmF2YVNjcmlwdCB2ZXJzaW9uOiAke19mb3JtYXRWZXJzaW9uKFxuICAgICAgICAoUmVhY3ROYXRpdmVWZXJzaW9uLnZlcnNpb246ICRGbG93Rml4TWUpLFxuICAgICAgKX1cXG5gICtcbiAgICAgICAgYE5hdGl2ZSB2ZXJzaW9uOiAke19mb3JtYXRWZXJzaW9uKG5hdGl2ZVZlcnNpb24pfVxcblxcbmAgK1xuICAgICAgICAnTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgcmVidWlsdCB0aGUgbmF0aXZlIGNvZGUuIElmIHRoZSBwcm9ibGVtICcgK1xuICAgICAgICAncGVyc2lzdHMgdHJ5IGNsZWFyaW5nIHRoZSBXYXRjaG1hbiBhbmQgcGFja2FnZXIgY2FjaGVzIHdpdGggJyArXG4gICAgICAgICdgd2F0Y2htYW4gd2F0Y2gtZGVsLWFsbCAmJiBucHggcmVhY3QtbmF0aXZlIHN0YXJ0IC0tcmVzZXQtY2FjaGVgLicsXG4gICAgKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2Zvcm1hdFZlcnNpb24oXG4gIHZlcnNpb246ICh0eXBlb2YgUGxhdGZvcm0pWydjb25zdGFudHMnXVsncmVhY3ROYXRpdmVWZXJzaW9uJ10sXG4pOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIGAke3ZlcnNpb24ubWFqb3J9LiR7dmVyc2lvbi5taW5vcn0uJHt2ZXJzaW9uLnBhdGNofWAgK1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAodmVyc2lvbi5wcmVyZWxlYXNlICE9IHVuZGVmaW5lZCA/IGAtJHt2ZXJzaW9uLnByZXJlbGVhc2V9YCA6ICcnKVxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtjaGVja1ZlcnNpb25zfTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBnZW5lcmF0ZWQgYnkgc2NyaXB0cy9yZWxlYXNlcy9zZXQtcm4tdmVyc2lvbi5qc1xuICovXG5cbmNvbnN0IHZlcnNpb246ICRSZWFkT25seTx7XG4gIG1ham9yOiBudW1iZXIsXG4gIG1pbm9yOiBudW1iZXIsXG4gIHBhdGNoOiBudW1iZXIsXG4gIHByZXJlbGVhc2U6IHN0cmluZyB8IG51bGwsXG59PiA9IHtcbiAgbWFqb3I6IDEwMDAsXG4gIG1pbm9yOiAwLFxuICBwYXRjaDogMCxcbiAgcHJlcmVsZWFzZTogbnVsbCxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge3ZlcnNpb259O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuXG5kZWNsYXJlIHZhciBjb25zb2xlOiB7W3N0cmluZ106ICRGbG93Rml4TWV9O1xuXG4vKipcbiAqIFNldHMgdXAgZGV2ZWxvcGVyIHRvb2xzIGZvciBSZWFjdCBOYXRpdmUuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1vZHVsZSBkaXJlY3RseSwgb3IganVzdCByZXF1aXJlIEluaXRpYWxpemVDb3JlLlxuICovXG5pZiAoX19ERVZfXykge1xuICByZXF1aXJlKCcuL3NldFVwUmVhY3REZXZUb29scycpO1xuXG4gIC8vIFNldCB1cCBpbnNwZWN0b3JcbiAgY29uc3QgSlNJbnNwZWN0b3IgPSByZXF1aXJlKCcuLi9KU0luc3BlY3Rvci9KU0luc3BlY3RvcicpO1xuICBKU0luc3BlY3Rvci5yZWdpc3RlckFnZW50KHJlcXVpcmUoJy4uL0pTSW5zcGVjdG9yL05ldHdvcmtBZ2VudCcpKTtcblxuICAvLyBOb3RlIHdlIGNhbid0IGNoZWNrIGlmIGNvbnNvbGUgaXMgXCJuYXRpdmVcIiBiZWNhdXNlIGl0IHdvdWxkIGFwcGVhciBcIm5hdGl2ZVwiIGluIEpTQyBhbmQgSGVybWVzLlxuICAvLyBXZSBhbHNvIGNhbid0IGNoZWNrIGFueSBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIENocm9tZSB3b3JrZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNvIHdlIGNoZWNrIGEgbmF2aWdhdG9yIHByb3BlcnR5IHRoYXQncyBzZXQgdG8gYSBwYXJ0aWN1bGFyIHZhbHVlIChcIk5ldHNjYXBlXCIpIGluIGFsbCByZWFsIGJyb3dzZXJzLlxuICBjb25zdCBpc0xpa2VseUFSZWFsQnJvd3NlciA9XG4gICAgZ2xvYmFsLm5hdmlnYXRvciAhPSBudWxsICYmXG4gICAgLyogICAgICAgICAgICAgIF9cbiAgICAgKiAgICAgICAgICAgICB8IHxcbiAgICAgKiAgIF8gX18gICBfX198IHxfIF9fXyAgX19fIF9fIF8gXyBfXyAgIF9fX1xuICAgICAqICB8ICdfIFxcIC8gXyBcXCBfXy8gX198LyBfXy8gX2AgfCAnXyBcXCAvIF8gXFxcbiAgICAgKiAgfCB8IHwgfCAgX18vIHxfXFxfXyBcXCAoX3wgKF98IHwgfF8pIHwgIF9fL1xuICAgICAqICB8X3wgfF98XFxfX198XFxfX3xfX18vXFxfX19cXF9fLF98IC5fXy8gXFxfX198XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF98XG4gICAgICovXG4gICAgZ2xvYmFsLm5hdmlnYXRvci5hcHBOYW1lID09PSAnTmV0c2NhcGUnOyAvLyBBbnkgcmVhbCBicm93c2VyXG5cbiAgaWYgKCFQbGF0Zm9ybS5pc1Rlc3RpbmcpIHtcbiAgICBjb25zdCBITVJDbGllbnQgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvSE1SQ2xpZW50Jyk7XG5cbiAgICBpZiAoY29uc29sZS5faXNQb2x5ZmlsbGVkKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgZnVsbCBjb250cm9sIG92ZXIgdGhlIGNvbnNvbGUgYW5kIHNlbmQgSmF2YVNjcmlwdCBsb2dzIHRvIE1ldHJvLlxuICAgICAgW1xuICAgICAgICAndHJhY2UnLFxuICAgICAgICAnaW5mbycsXG4gICAgICAgICd3YXJuJyxcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdncm91cCcsXG4gICAgICAgICdncm91cENvbGxhcHNlZCcsXG4gICAgICAgICdncm91cEVuZCcsXG4gICAgICAgICdkZWJ1ZycsXG4gICAgICBdLmZvckVhY2gobGV2ZWwgPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEZ1bmN0aW9uID0gY29uc29sZVtsZXZlbF07XG4gICAgICAgIGNvbnNvbGVbbGV2ZWxdID0gZnVuY3Rpb24gKC4uLmFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPikge1xuICAgICAgICAgIEhNUkNsaWVudC5sb2cobGV2ZWwsIGFyZ3MpO1xuICAgICAgICAgIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkoY29uc29sZSwgYXJncyk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgYXNzdW1lIHRoZSBlbnZpcm9ubWVudCBoYXMgYSByZWFsIHJpY2ggY29uc29sZSAobGlrZSBDaHJvbWUpLCBhbmQgZG9uJ3QgaGlqYWNrIGl0IHRvIGxvZyB0byBNZXRyby5cbiAgICAgIC8vIEl0J3MgbGlrZWx5IHRoZSBkZXZlbG9wZXIgaXMgdXNpbmcgcmljaCBjb25zb2xlIHRvIGRlYnVnIGFueXdheSwgYW5kIGhpamFja2luZyBpdCB3b3VsZFxuICAgICAgLy8gbG9zZSB0aGUgZmlsZW5hbWVzIGluIGNvbnNvbGUubG9nIGNhbGxzOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2lzc3Vlcy8yNjc4OC5cbiAgICAgIEhNUkNsaWVudC5sb2coJ2xvZycsIFtcbiAgICAgICAgYEphdmFTY3JpcHQgbG9ncyB3aWxsIGFwcGVhciBpbiB5b3VyICR7XG4gICAgICAgICAgaXNMaWtlbHlBUmVhbEJyb3dzZXIgPyAnYnJvd3NlcicgOiAnZW52aXJvbm1lbnQnXG4gICAgICAgIH0gY29uc29sZWAsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICByZXF1aXJlKCcuL3NldFVwUmVhY3RSZWZyZXNoJyk7XG5cbiAgZ2xvYmFsW1xuICAgIGAke2dsb2JhbC5fX01FVFJPX0dMT0JBTF9QUkVGSVhfXyA/PyAnJ31fX2xvYWRCdW5kbGVBc3luY2BcbiAgXSA9IHJlcXVpcmUoJy4vRGV2dG9vbHMvbG9hZEJ1bmRsZUZyb21TZXJ2ZXInKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKF9fREVWX18pIHtcbiAgbGV0IGlzV2ViU29ja2V0T3BlbiA9IGZhbHNlO1xuICBsZXQgd3MgPSBudWxsO1xuXG4gIGNvbnN0IHJlYWN0RGV2VG9vbHMgPSByZXF1aXJlKCdyZWFjdC1kZXZ0b29scy1jb3JlJyk7XG4gIGNvbnN0IGNvbm5lY3RUb0RldlRvb2xzID0gKCkgPT4ge1xuICAgIGlmICh3cyAhPT0gbnVsbCAmJiBpc1dlYlNvY2tldE9wZW4pIHtcbiAgICAgIC8vIElmIHRoZSBEZXZUb29scyBiYWNrZW5kIGlzIGFscmVhZHkgY29ubmVjdGVkLCBkb24ndCByZWNyZWF0ZSB0aGUgV2ViU29ja2V0LlxuICAgICAgLy8gVGhpcyB3b3VsZCBicmVhayB0aGUgY29ubmVjdGlvbi5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGFuIGFjdGl2ZSBjb25uZWN0aW9uLCBhIGJhY2tlbmQgbWF5IGJlIHdhaXRpbmcgdG8gY29ubmVjdCxcbiAgICAgIC8vIGluIHdoaWNoIGNhc2UgaXQncyBva2F5IHRvIG1ha2UgYSBuZXcgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vdCB3aGVuIGRlYnVnZ2luZyBpbiBjaHJvbWVcbiAgICAvLyBUT0RPKHQxMjgzMjA1OCkgVGhpcyBjaGVjayBpcyBicm9rZW5cbiAgICBpZiAoIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgY29uc3QgQXBwU3RhdGUgPSByZXF1aXJlKCcuLi9BcHBTdGF0ZS9BcHBTdGF0ZScpO1xuICAgICAgY29uc3QgZ2V0RGV2U2VydmVyID0gcmVxdWlyZSgnLi9EZXZ0b29scy9nZXREZXZTZXJ2ZXInKTtcblxuICAgICAgLy8gRG9uJ3Qgc3RlYWwgdGhlIERldlRvb2xzIGZyb20gY3VycmVudGx5IGFjdGl2ZSBhcHAuXG4gICAgICAvLyBOb3RlOiBpZiB5b3UgYWRkIGFueSBBcHBTdGF0ZSBzdWJzY3JpcHRpb25zIHRvIHRoaXMgZmlsZSxcbiAgICAgIC8vIHlvdSB3aWxsIGFsc28gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGBBcHBTdGF0ZS5pc0F2YWlsYWJsZWAsXG4gICAgICAvLyBvciB0aGUgY29kZSB3aWxsIHRocm93IGZvciBidW5kbGVzIHRoYXQgZG9uJ3QgaGF2ZSBpdC5cbiAgICAgIGNvbnN0IGlzQXBwQWN0aXZlID0gKCkgPT4gQXBwU3RhdGUuY3VycmVudFN0YXRlICE9PSAnYmFja2dyb3VuZCc7XG5cbiAgICAgIC8vIEdldCBob3N0bmFtZSBmcm9tIGRldmVsb3BtZW50IHNlcnZlciAocGFja2FnZXIpXG4gICAgICBjb25zdCBkZXZTZXJ2ZXIgPSBnZXREZXZTZXJ2ZXIoKTtcbiAgICAgIGNvbnN0IGhvc3QgPSBkZXZTZXJ2ZXIuYnVuZGxlTG9hZGVkRnJvbVNlcnZlclxuICAgICAgICA/IGRldlNlcnZlci51cmxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9odHRwcz86XFwvXFwvLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvJC8sICcnKVxuICAgICAgICAgICAgLnNwbGl0KCc6JylbMF1cbiAgICAgICAgOiAnbG9jYWxob3N0JztcblxuICAgICAgLy8gUmVhZCB0aGUgb3B0aW9uYWwgZ2xvYmFsIHZhcmlhYmxlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgICAgLy8gSXQgd2FzIGFkZGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvY29tbWl0L2JmMmI0MzUzMjJlODlkMGFlZWU4NzkyYjFjNmUwNDY1NmMyNzE5YTAuXG4gICAgICBjb25zdCBwb3J0ID1cbiAgICAgICAgd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfUE9SVF9fICE9IG51bGxcbiAgICAgICAgICA/IHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX1BPUlRfX1xuICAgICAgICAgIDogODA5NztcblxuICAgICAgY29uc3QgV2ViU29ja2V0ID0gcmVxdWlyZSgnLi4vV2ViU29ja2V0L1dlYlNvY2tldCcpO1xuICAgICAgd3MgPSBuZXcgV2ViU29ja2V0KCd3czovLycgKyBob3N0ICsgJzonICsgcG9ydCk7XG4gICAgICB3cy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGV2ZW50ID0+IHtcbiAgICAgICAgaXNXZWJTb2NrZXRPcGVuID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHdzLmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCBldmVudCA9PiB7XG4gICAgICAgIGlzV2ViU29ja2V0T3BlbiA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgUmVhY3ROYXRpdmVTdHlsZUF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1ZpZXcvUmVhY3ROYXRpdmVTdHlsZUF0dHJpYnV0ZXMnKTtcbiAgICAgIGNvbnN0IGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRGV2VG9vbHNTZXR0aW5ncy9EZXZUb29sc1NldHRpbmdzTWFuYWdlcicpO1xuXG4gICAgICByZWFjdERldlRvb2xzLmNvbm5lY3RUb0RldlRvb2xzKHtcbiAgICAgICAgaXNBcHBBY3RpdmUsXG4gICAgICAgIHJlc29sdmVSTlN0eWxlOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L2ZsYXR0ZW5TdHlsZScpLFxuICAgICAgICBuYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlczogT2JqZWN0LmtleXMoXG4gICAgICAgICAgUmVhY3ROYXRpdmVTdHlsZUF0dHJpYnV0ZXMsXG4gICAgICAgICksXG4gICAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICAgIGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IFJDVE5hdGl2ZUFwcEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJy4uL0V2ZW50RW1pdHRlci9SQ1ROYXRpdmVBcHBFdmVudEVtaXR0ZXInKTtcbiAgUkNUTmF0aXZlQXBwRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKCdSQ1REZXZNZW51U2hvd24nLCBjb25uZWN0VG9EZXZUb29scyk7XG4gIGNvbm5lY3RUb0RldlRvb2xzKCk7IC8vIFRyeSBjb25uZWN0aW5nIG9uY2Ugb24gbG9hZFxufVxuIiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3REZXZUb29sc0JhY2tlbmRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3REZXZUb29sc0JhY2tlbmRcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gLyoqKioqKi8gKCgpID0+IHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7XG5cbi8qKiovIDYwMjpcbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXztcbi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWRlYnVnLXRvb2xzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIGsgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNiksXG4gICAgcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTg5KSxcbiAgICBxID0gT2JqZWN0LmFzc2lnbixcbiAgICB3ID0gcC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxcbiAgICB4ID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIiksXG4gICAgeSA9IFtdLFxuICAgIHogPSBudWxsO1xuXG5mdW5jdGlvbiBBKCkge1xuICBpZiAobnVsbCA9PT0geikge1xuICAgIHZhciBhID0gbmV3IE1hcCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIEIudXNlQ29udGV4dCh7XG4gICAgICAgIF9jdXJyZW50VmFsdWU6IG51bGxcbiAgICAgIH0pLCBCLnVzZVN0YXRlKG51bGwpLCBCLnVzZVJlZHVjZXIoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9LCBudWxsKSwgQi51c2VSZWYobnVsbCksIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEIudXNlQ2FjaGVSZWZyZXNoICYmIEIudXNlQ2FjaGVSZWZyZXNoKCksIEIudXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHt9KSwgQi51c2VJbnNlcnRpb25FZmZlY3QoZnVuY3Rpb24gKCkge30pLCBCLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7fSksIEIudXNlSW1wZXJhdGl2ZUhhbmRsZSh2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KSwgQi51c2VEZWJ1Z1ZhbHVlKG51bGwpLCBCLnVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHt9KSwgQi51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQi51c2VNZW1vQ2FjaGUgJiYgQi51c2VNZW1vQ2FjaGUoMCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHZhciBiID0geTtcbiAgICAgIHkgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBkID0gMDsgZCA8IGIubGVuZ3RoOyBkKyspIHtcbiAgICAgIHZhciBmID0gYltkXTtcbiAgICAgIGEuc2V0KGYucHJpbWl0aXZlLCBrLnBhcnNlKGYuc3RhY2tFcnJvcikpO1xuICAgIH1cblxuICAgIHogPSBhO1xuICB9XG5cbiAgcmV0dXJuIHo7XG59XG5cbnZhciBDID0gbnVsbCxcbiAgICBEID0gbnVsbDtcblxuZnVuY3Rpb24gRSgpIHtcbiAgdmFyIGEgPSBEO1xuICBudWxsICE9PSBhICYmIChEID0gYS5uZXh0KTtcbiAgcmV0dXJuIGE7XG59XG5cbnZhciBCID0ge1xuICB1c2U6IGZ1bmN0aW9uIHVzZSgpIHtcbiAgICB0aHJvdyBFcnJvcihcIlN1cHBvcnQgZm9yIGB1c2VgIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gcmVhY3QtZGVidWctdG9vbHMuXCIpO1xuICB9LFxuICByZWFkQ29udGV4dDogZnVuY3Rpb24gcmVhZENvbnRleHQoYSkge1xuICAgIHJldHVybiBhLl9jdXJyZW50VmFsdWU7XG4gIH0sXG4gIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gdXNlQ2FjaGVSZWZyZXNoKCkge1xuICAgIHZhciBhID0gRSgpO1xuICAgIHkucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiQ2FjaGVSZWZyZXNoXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IG51bGwgIT09IGEgPyBhLm1lbW9pemVkU3RhdGUgOiBmdW5jdGlvbiAoKSB7fVxuICAgIH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fTtcbiAgfSxcbiAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIHVzZUNhbGxiYWNrKGEpIHtcbiAgICB2YXIgYiA9IEUoKTtcbiAgICB5LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIkNhbGxiYWNrXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IG51bGwgIT09IGIgPyBiLm1lbW9pemVkU3RhdGVbMF0gOiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIHVzZUNvbnRleHQoYSkge1xuICAgIHkucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiQ29udGV4dFwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhLl9jdXJyZW50VmFsdWVcbiAgICB9KTtcbiAgICByZXR1cm4gYS5fY3VycmVudFZhbHVlO1xuICB9LFxuICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIHVzZUVmZmVjdChhKSB7XG4gICAgRSgpO1xuICAgIHkucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiRWZmZWN0XCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGFcbiAgICB9KTtcbiAgfSxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZShhKSB7XG4gICAgRSgpO1xuICAgIHZhciBiID0gdm9pZCAwO1xuICAgIG51bGwgIT09IGEgJiYgXCJvYmplY3RcIiA9PT0gX3R5cGVvZihhKSAmJiAoYiA9IGEuY3VycmVudCk7XG4gICAgeS5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJJbXBlcmF0aXZlSGFuZGxlXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGJcbiAgICB9KTtcbiAgfSxcbiAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gdXNlRGVidWdWYWx1ZShhLCBiKSB7XG4gICAgeS5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJEZWJ1Z1ZhbHVlXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGIgPyBiKGEpIDogYVxuICAgIH0pO1xuICB9LFxuICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChhKSB7XG4gICAgRSgpO1xuICAgIHkucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiTGF5b3V0RWZmZWN0XCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGFcbiAgICB9KTtcbiAgfSxcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiB1c2VJbnNlcnRpb25FZmZlY3QoYSkge1xuICAgIEUoKTtcbiAgICB5LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIkluc2VydGlvbkVmZmVjdFwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhXG4gICAgfSk7XG4gIH0sXG4gIHVzZU1lbW86IGZ1bmN0aW9uIHVzZU1lbW8oYSkge1xuICAgIHZhciBiID0gRSgpO1xuICAgIGEgPSBudWxsICE9PSBiID8gYi5tZW1vaXplZFN0YXRlWzBdIDogYSgpO1xuICAgIHkucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiTWVtb1wiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gdXNlTWVtb0NhY2hlKGEpIHtcbiAgICB2YXIgYiA9IEM7XG4gICAgaWYgKG51bGwgPT0gYikgcmV0dXJuIFtdO1xuICAgIHZhciBkO1xuICAgIGIgPSBudWxsID09IChkID0gYi51cGRhdGVRdWV1ZSkgPyB2b2lkIDAgOiBkLm1lbW9DYWNoZTtcbiAgICBpZiAobnVsbCA9PSBiKSByZXR1cm4gW107XG4gICAgZCA9IGIuZGF0YVtiLmluZGV4XTtcblxuICAgIGlmICh2b2lkIDAgPT09IGQpIHtcbiAgICAgIGQgPSBiLmRhdGFbYi5pbmRleF0gPSBBcnJheShhKTtcblxuICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBhOyBmKyspIHtcbiAgICAgICAgZFtmXSA9IHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYi5pbmRleCsrO1xuICAgIHJldHVybiBkO1xuICB9LFxuICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiB1c2VSZWR1Y2VyKGEsIGIsIGQpIHtcbiAgICBhID0gRSgpO1xuICAgIGIgPSBudWxsICE9PSBhID8gYS5tZW1vaXplZFN0YXRlIDogdm9pZCAwICE9PSBkID8gZChiKSA6IGI7XG4gICAgeS5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJSZWR1Y2VyXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGJcbiAgICB9KTtcbiAgICByZXR1cm4gW2IsIGZ1bmN0aW9uICgpIHt9XTtcbiAgfSxcbiAgdXNlUmVmOiBmdW5jdGlvbiB1c2VSZWYoYSkge1xuICAgIHZhciBiID0gRSgpO1xuICAgIGEgPSBudWxsICE9PSBiID8gYi5tZW1vaXplZFN0YXRlIDoge1xuICAgICAgY3VycmVudDogYVxuICAgIH07XG4gICAgeS5wdXNoKHtcbiAgICAgIHByaW1pdGl2ZTogXCJSZWZcIixcbiAgICAgIHN0YWNrRXJyb3I6IEVycm9yKCksXG4gICAgICB2YWx1ZTogYS5jdXJyZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHVzZVN0YXRlOiBmdW5jdGlvbiB1c2VTdGF0ZShhKSB7XG4gICAgdmFyIGIgPSBFKCk7XG4gICAgYSA9IG51bGwgIT09IGIgPyBiLm1lbW9pemVkU3RhdGUgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhID8gYSgpIDogYTtcbiAgICB5LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIlN0YXRlXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGFcbiAgICB9KTtcbiAgICByZXR1cm4gW2EsIGZ1bmN0aW9uICgpIHt9XTtcbiAgfSxcbiAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gdXNlVHJhbnNpdGlvbigpIHtcbiAgICBFKCk7XG4gICAgRSgpO1xuICAgIHkucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiVHJhbnNpdGlvblwiLFxuICAgICAgc3RhY2tFcnJvcjogRXJyb3IoKSxcbiAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICB9KTtcbiAgICByZXR1cm4gWyExLCBmdW5jdGlvbiAoKSB7fV07XG4gIH0sXG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZShhLCBiKSB7XG4gICAgRSgpO1xuICAgIEUoKTtcbiAgICBhID0gYigpO1xuICAgIHkucHVzaCh7XG4gICAgICBwcmltaXRpdmU6IFwiU3luY0V4dGVybmFsU3RvcmVcIixcbiAgICAgIHN0YWNrRXJyb3I6IEVycm9yKCksXG4gICAgICB2YWx1ZTogYVxuICAgIH0pO1xuICAgIHJldHVybiBhO1xuICB9LFxuICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiB1c2VEZWZlcnJlZFZhbHVlKGEpIHtcbiAgICB2YXIgYiA9IEUoKTtcbiAgICB5LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIkRlZmVycmVkVmFsdWVcIixcbiAgICAgIHN0YWNrRXJyb3I6IEVycm9yKCksXG4gICAgICB2YWx1ZTogbnVsbCAhPT0gYiA/IGIubWVtb2l6ZWRTdGF0ZSA6IGFcbiAgICB9KTtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgdXNlSWQ6IGZ1bmN0aW9uIHVzZUlkKCkge1xuICAgIHZhciBhID0gRSgpO1xuICAgIGEgPSBudWxsICE9PSBhID8gYS5tZW1vaXplZFN0YXRlIDogXCJcIjtcbiAgICB5LnB1c2goe1xuICAgICAgcHJpbWl0aXZlOiBcIklkXCIsXG4gICAgICBzdGFja0Vycm9yOiBFcnJvcigpLFxuICAgICAgdmFsdWU6IGFcbiAgICB9KTtcbiAgICByZXR1cm4gYTtcbiAgfVxufSxcbiAgICBGID0ge1xuICBnZXQ6IGZ1bmN0aW9uIGdldChhLCBiKSB7XG4gICAgaWYgKGEuaGFzT3duUHJvcGVydHkoYikpIHJldHVybiBhW2JdO1xuICAgIGEgPSBFcnJvcihcIk1pc3NpbmcgbWV0aG9kIGluIERpc3BhdGNoZXI6IFwiICsgYik7XG4gICAgYS5uYW1lID0gXCJSZWFjdERlYnVnVG9vbHNVbnN1cHBvcnRlZEhvb2tFcnJvclwiO1xuICAgIHRocm93IGE7XG4gIH1cbn0sXG4gICAgRyA9IFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBQcm94eSA/IEIgOiBuZXcgUHJveHkoQiwgRiksXG4gICAgSCA9IDA7XG5cbmZ1bmN0aW9uIEkoYSwgYiwgZCkge1xuICB2YXIgZiA9IGJbZF0uc291cmNlLFxuICAgICAgYyA9IDA7XG5cbiAgYTogZm9yICg7IGMgPCBhLmxlbmd0aDsgYysrKSB7XG4gICAgaWYgKGFbY10uc291cmNlID09PSBmKSB7XG4gICAgICBmb3IgKHZhciBoID0gZCArIDEsIHIgPSBjICsgMTsgaCA8IGIubGVuZ3RoICYmIHIgPCBhLmxlbmd0aDsgaCsrLCByKyspIHtcbiAgICAgICAgaWYgKGFbcl0uc291cmNlICE9PSBiW2hdLnNvdXJjZSkgY29udGludWUgYTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBKKGEsIGIpIHtcbiAgaWYgKCFhKSByZXR1cm4gITE7XG4gIGIgPSBcInVzZVwiICsgYjtcbiAgcmV0dXJuIGEubGVuZ3RoIDwgYi5sZW5ndGggPyAhMSA6IGEubGFzdEluZGV4T2YoYikgPT09IGEubGVuZ3RoIC0gYi5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIEsoYSwgYiwgZCkge1xuICBmb3IgKHZhciBmID0gW10sIGMgPSBudWxsLCBoID0gZiwgciA9IDAsIHQgPSBbXSwgdiA9IDA7IHYgPCBiLmxlbmd0aDsgdisrKSB7XG4gICAgdmFyIHUgPSBiW3ZdO1xuICAgIHZhciBlID0gYTtcbiAgICB2YXIgbCA9IGsucGFyc2UodS5zdGFja0Vycm9yKTtcblxuICAgIGI6IHtcbiAgICAgIHZhciBtID0gbCxcbiAgICAgICAgICBuID0gSShtLCBlLCBIKTtcbiAgICAgIGlmICgtMSAhPT0gbikgZSA9IG47ZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGcgPSAwOyBnIDwgZS5sZW5ndGggJiYgNSA+IGc7IGcrKykge1xuICAgICAgICAgIGlmIChuID0gSShtLCBlLCBnKSwgLTEgIT09IG4pIHtcbiAgICAgICAgICAgIEggPSBnO1xuICAgICAgICAgICAgZSA9IG47XG4gICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiOiB7XG4gICAgICBtID0gbDtcbiAgICAgIG4gPSBBKCkuZ2V0KHUucHJpbWl0aXZlKTtcbiAgICAgIGlmICh2b2lkIDAgIT09IG4pIGZvciAoZyA9IDA7IGcgPCBuLmxlbmd0aCAmJiBnIDwgbS5sZW5ndGg7IGcrKykge1xuICAgICAgICBpZiAobltnXS5zb3VyY2UgIT09IG1bZ10uc291cmNlKSB7XG4gICAgICAgICAgZyA8IG0ubGVuZ3RoIC0gMSAmJiBKKG1bZ10uZnVuY3Rpb25OYW1lLCB1LnByaW1pdGl2ZSkgJiYgZysrO1xuICAgICAgICAgIGcgPCBtLmxlbmd0aCAtIDEgJiYgSihtW2ddLmZ1bmN0aW9uTmFtZSwgdS5wcmltaXRpdmUpICYmIGcrKztcbiAgICAgICAgICBtID0gZztcbiAgICAgICAgICBicmVhayBiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtID0gLTE7XG4gICAgfVxuXG4gICAgbCA9IC0xID09PSBlIHx8IC0xID09PSBtIHx8IDIgPiBlIC0gbSA/IG51bGwgOiBsLnNsaWNlKG0sIGUgLSAxKTtcblxuICAgIGlmIChudWxsICE9PSBsKSB7XG4gICAgICBlID0gMDtcblxuICAgICAgaWYgKG51bGwgIT09IGMpIHtcbiAgICAgICAgZm9yICg7IGUgPCBsLmxlbmd0aCAmJiBlIDwgYy5sZW5ndGggJiYgbFtsLmxlbmd0aCAtIGUgLSAxXS5zb3VyY2UgPT09IGNbYy5sZW5ndGggLSBlIC0gMV0uc291cmNlOykge1xuICAgICAgICAgIGUrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoYyA9IGMubGVuZ3RoIC0gMTsgYyA+IGU7IGMtLSkge1xuICAgICAgICAgIGggPSB0LnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoYyA9IGwubGVuZ3RoIC0gZSAtIDE7IDEgPD0gYzsgYy0tKSB7XG4gICAgICAgIGUgPSBbXSwgbSA9IGxbY10sIChuID0gbFtjIC0gMV0uZnVuY3Rpb25OYW1lKSA/IChnID0gbi5sYXN0SW5kZXhPZihcIi5cIiksIC0xID09PSBnICYmIChnID0gMCksIFwidXNlXCIgPT09IG4uc2xpY2UoZywgZyArIDMpICYmIChnICs9IDMpLCBuID0gbi5zbGljZShnKSkgOiBuID0gXCJcIiwgbiA9IHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICBpc1N0YXRlRWRpdGFibGU6ICExLFxuICAgICAgICAgIG5hbWU6IG4sXG4gICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICBzdWJIb29rczogZVxuICAgICAgICB9LCBkICYmIChuLmhvb2tTb3VyY2UgPSB7XG4gICAgICAgICAgbGluZU51bWJlcjogbS5saW5lTnVtYmVyLFxuICAgICAgICAgIGNvbHVtbk51bWJlcjogbS5jb2x1bW5OdW1iZXIsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBtLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBmaWxlTmFtZTogbS5maWxlTmFtZVxuICAgICAgICB9KSwgaC5wdXNoKG4pLCB0LnB1c2goaCksIGggPSBlO1xuICAgICAgfVxuXG4gICAgICBjID0gbDtcbiAgICB9XG5cbiAgICBlID0gdS5wcmltaXRpdmU7XG4gICAgdSA9IHtcbiAgICAgIGlkOiBcIkNvbnRleHRcIiA9PT0gZSB8fCBcIkRlYnVnVmFsdWVcIiA9PT0gZSA/IG51bGwgOiByKyssXG4gICAgICBpc1N0YXRlRWRpdGFibGU6IFwiUmVkdWNlclwiID09PSBlIHx8IFwiU3RhdGVcIiA9PT0gZSxcbiAgICAgIG5hbWU6IGUsXG4gICAgICB2YWx1ZTogdS52YWx1ZSxcbiAgICAgIHN1Ykhvb2tzOiBbXVxuICAgIH07XG4gICAgZCAmJiAoZSA9IHtcbiAgICAgIGxpbmVOdW1iZXI6IG51bGwsXG4gICAgICBmdW5jdGlvbk5hbWU6IG51bGwsXG4gICAgICBmaWxlTmFtZTogbnVsbCxcbiAgICAgIGNvbHVtbk51bWJlcjogbnVsbFxuICAgIH0sIGwgJiYgMSA8PSBsLmxlbmd0aCAmJiAobCA9IGxbMF0sIGUubGluZU51bWJlciA9IGwubGluZU51bWJlciwgZS5mdW5jdGlvbk5hbWUgPSBsLmZ1bmN0aW9uTmFtZSwgZS5maWxlTmFtZSA9IGwuZmlsZU5hbWUsIGUuY29sdW1uTnVtYmVyID0gbC5jb2x1bW5OdW1iZXIpLCB1Lmhvb2tTb3VyY2UgPSBlKTtcbiAgICBoLnB1c2godSk7XG4gIH1cblxuICBMKGYsIG51bGwpO1xuICByZXR1cm4gZjtcbn1cblxuZnVuY3Rpb24gTChhLCBiKSB7XG4gIGZvciAodmFyIGQgPSBbXSwgZiA9IDA7IGYgPCBhLmxlbmd0aDsgZisrKSB7XG4gICAgdmFyIGMgPSBhW2ZdO1xuICAgIFwiRGVidWdWYWx1ZVwiID09PSBjLm5hbWUgJiYgMCA9PT0gYy5zdWJIb29rcy5sZW5ndGggPyAoYS5zcGxpY2UoZiwgMSksIGYtLSwgZC5wdXNoKGMpKSA6IEwoYy5zdWJIb29rcywgYyk7XG4gIH1cblxuICBudWxsICE9PSBiICYmICgxID09PSBkLmxlbmd0aCA/IGIudmFsdWUgPSBkWzBdLnZhbHVlIDogMSA8IGQubGVuZ3RoICYmIChiLnZhbHVlID0gZC5tYXAoZnVuY3Rpb24gKGgpIHtcbiAgICByZXR1cm4gaC52YWx1ZTtcbiAgfSkpKTtcbn1cblxuZnVuY3Rpb24gTShhKSB7XG4gIGlmIChhIGluc3RhbmNlb2YgRXJyb3IgJiYgXCJSZWFjdERlYnVnVG9vbHNVbnN1cHBvcnRlZEhvb2tFcnJvclwiID09PSBhLm5hbWUpIHRocm93IGE7XG4gIHZhciBiID0gRXJyb3IoXCJFcnJvciByZW5kZXJpbmcgaW5zcGVjdGVkIGNvbXBvbmVudFwiLCB7XG4gICAgY2F1c2U6IGFcbiAgfSk7XG4gIGIubmFtZSA9IFwiUmVhY3REZWJ1Z1Rvb2xzUmVuZGVyRXJyb3JcIjtcbiAgYi5jYXVzZSA9IGE7XG4gIHRocm93IGI7XG59XG5cbmZ1bmN0aW9uIE4oYSwgYiwgZCkge1xuICB2YXIgZiA9IDMgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdID8gYXJndW1lbnRzWzNdIDogITE7XG4gIG51bGwgPT0gZCAmJiAoZCA9IHcuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcik7XG4gIHZhciBjID0gZC5jdXJyZW50O1xuICBkLmN1cnJlbnQgPSBHO1xuXG4gIHRyeSB7XG4gICAgdmFyIGggPSBFcnJvcigpO1xuICAgIGEoYik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBNKHQpO1xuICB9IGZpbmFsbHkge1xuICAgIHZhciByID0geTtcbiAgICB5ID0gW107XG4gICAgZC5jdXJyZW50ID0gYztcbiAgfVxuXG4gIGMgPSBrLnBhcnNlKGgpO1xuICByZXR1cm4gSyhjLCByLCBmKTtcbn1cblxuZnVuY3Rpb24gTyhhKSB7XG4gIGEuZm9yRWFjaChmdW5jdGlvbiAoYiwgZCkge1xuICAgIHJldHVybiBkLl9jdXJyZW50VmFsdWUgPSBiO1xuICB9KTtcbn1cblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IE47XG5cbmV4cG9ydHMuaW5zcGVjdEhvb2tzT2ZGaWJlciA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHZhciBkID0gMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiAhMTtcbiAgbnVsbCA9PSBiICYmIChiID0gdy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyKTtcbiAgaWYgKDAgIT09IGEudGFnICYmIDE1ICE9PSBhLnRhZyAmJiAxMSAhPT0gYS50YWcpIHRocm93IEVycm9yKFwiVW5rbm93biBGaWJlci4gTmVlZHMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdG8gaW5zcGVjdCBob29rcy5cIik7XG4gIEEoKTtcbiAgRCA9IGEubWVtb2l6ZWRTdGF0ZTtcbiAgQyA9IGE7XG4gIHZhciBmID0gYS50eXBlLFxuICAgICAgYyA9IGEubWVtb2l6ZWRQcm9wcztcblxuICBpZiAoZiAhPT0gYS5lbGVtZW50VHlwZSAmJiBmICYmIGYuZGVmYXVsdFByb3BzKSB7XG4gICAgYyA9IHEoe30sIGMpO1xuICAgIHZhciBoID0gZi5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHIgaW4gaCkge1xuICAgICAgdm9pZCAwID09PSBjW3JdICYmIChjW3JdID0gaFtyXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHIgPSBuZXcgTWFwKCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGggPSBhOyBoOykge1xuICAgICAgaWYgKDEwID09PSBoLnRhZykge1xuICAgICAgICB2YXIgdCA9IGgudHlwZS5fY29udGV4dDtcbiAgICAgICAgci5oYXModCkgfHwgKHIuc2V0KHQsIHQuX2N1cnJlbnRWYWx1ZSksIHQuX2N1cnJlbnRWYWx1ZSA9IGgubWVtb2l6ZWRQcm9wcy52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGggPSBoLnJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoMTEgPT09IGEudGFnKSB7XG4gICAgICB2YXIgdiA9IGYucmVuZGVyO1xuICAgICAgZiA9IGM7XG4gICAgICB2YXIgdSA9IGEucmVmO1xuICAgICAgdCA9IGI7XG4gICAgICB2YXIgZSA9IHQuY3VycmVudDtcbiAgICAgIHQuY3VycmVudCA9IEc7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBsID0gRXJyb3IoKTtcbiAgICAgICAgdihmLCB1KTtcbiAgICAgIH0gY2F0Y2ggKGcpIHtcbiAgICAgICAgTShnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHZhciBtID0geTtcbiAgICAgICAgeSA9IFtdO1xuICAgICAgICB0LmN1cnJlbnQgPSBlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbiA9IGsucGFyc2UobCk7XG4gICAgICByZXR1cm4gSyhuLCBtLCBkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTihmLCBjLCBiLCBkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBEID0gQyA9IG51bGwsIE8ocik7XG4gIH1cbn07XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5ODc6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmlmICh0cnVlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MDIpO1xufSBlbHNlIHt9XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5OlxuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fO1xuLypcbiBSZWFjdFxuIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG5cbiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuXG4gVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuKi9cblxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBiID0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksXG4gICAgYyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgZCA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICBlID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgIGYgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gICAgZyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxcbiAgICBoID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgayA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zZXJ2ZXJfY29udGV4dFwiKSxcbiAgICBsID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgIG0gPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgbiA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgIHAgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICBxID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgdCA9IFN5bWJvbC5mb3IoXCJyZWFjdC5vZmZzY3JlZW5cIiksXG4gICAgdSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jYWNoZVwiKSxcbiAgICB2ID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIik7XG5cbmZ1bmN0aW9uIHcoYSkge1xuICBpZiAoXCJvYmplY3RcIiA9PT0gX3R5cGVvZihhKSAmJiBudWxsICE9PSBhKSB7XG4gICAgdmFyIHIgPSBhLiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoIChyKSB7XG4gICAgICBjYXNlIGI6XG4gICAgICAgIHN3aXRjaCAoYSA9IGEudHlwZSwgYSkge1xuICAgICAgICAgIGNhc2UgZDpcbiAgICAgICAgICBjYXNlIGY6XG4gICAgICAgICAgY2FzZSBlOlxuICAgICAgICAgIGNhc2UgbTpcbiAgICAgICAgICBjYXNlIG46XG4gICAgICAgICAgICByZXR1cm4gYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzd2l0Y2ggKGEgPSBhICYmIGEuJCR0eXBlb2YsIGEpIHtcbiAgICAgICAgICAgICAgY2FzZSBrOlxuICAgICAgICAgICAgICBjYXNlIGg6XG4gICAgICAgICAgICAgIGNhc2UgbDpcbiAgICAgICAgICAgICAgY2FzZSBxOlxuICAgICAgICAgICAgICBjYXNlIHA6XG4gICAgICAgICAgICAgIGNhc2UgZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gYTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBjOlxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5BSSA9IGg7XG5leHBvcnRzLkhRID0gZztcbl9fd2VicGFja191bnVzZWRfZXhwb3J0X18gPSBiO1xuZXhwb3J0cy5BNCA9IGw7XG5leHBvcnRzLkhZID0gZDtcbmV4cG9ydHMub00gPSBxO1xuZXhwb3J0cy5fWSA9IHA7XG5leHBvcnRzLmhfID0gYztcbmV4cG9ydHMuUTEgPSBmO1xuZXhwb3J0cy5uRiA9IGU7XG5leHBvcnRzLm40ID0gbTtcbl9fd2VicGFja191bnVzZWRfZXhwb3J0X18gPSBuO1xuXG5fX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gITE7XG59O1xuXG5fX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gITE7XG59O1xuXG5fX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHcoYSkgPT09IGg7XG59O1xuXG5fX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHcoYSkgPT09IGc7XG59O1xuXG5leHBvcnRzLmtLID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIFwib2JqZWN0XCIgPT09IF90eXBlb2YoYSkgJiYgbnVsbCAhPT0gYSAmJiBhLiQkdHlwZW9mID09PSBiO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBsO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBkO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBxO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBwO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBjO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBmO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBlO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBtO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB3KGEpID09PSBuO1xufTtcblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgYSB8fCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhIHx8IGEgPT09IGQgfHwgYSA9PT0gZiB8fCBhID09PSBlIHx8IGEgPT09IG0gfHwgYSA9PT0gbiB8fCBhID09PSB0IHx8IGEgPT09IHUgfHwgXCJvYmplY3RcIiA9PT0gX3R5cGVvZihhKSAmJiBudWxsICE9PSBhICYmIChhLiQkdHlwZW9mID09PSBxIHx8IGEuJCR0eXBlb2YgPT09IHAgfHwgYS4kJHR5cGVvZiA9PT0gZyB8fCBhLiQkdHlwZW9mID09PSBoIHx8IGEuJCR0eXBlb2YgPT09IGwgfHwgYS4kJHR5cGVvZiA9PT0gdiB8fCB2b2lkIDAgIT09IGEuZ2V0TW9kdWxlSWQpID8gITAgOiAhMTtcbn07XG5cbmV4cG9ydHMua00gPSB3O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTc4OlxuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qXG4gUmVhY3RcbiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuXG4gQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cblxuIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiovXG5cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgbCA9IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLFxuICAgIG4gPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgIHAgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgcSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICByID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgIHQgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIiksXG4gICAgdSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgIHYgPSBTeW1ib2wuZm9yKFwicmVhY3Quc2VydmVyX2NvbnRleHRcIiksXG4gICAgdyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICB4ID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgIHkgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICB6ID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgQSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgIGFhID0gU3ltYm9sLmZvcihcInJlYWN0LmRlYnVnX3RyYWNlX21vZGVcIiksXG4gICAgYmEgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLFxuICAgIGNhID0gU3ltYm9sLmZvcihcInJlYWN0LmNhY2hlXCIpLFxuICAgIEIgPSBTeW1ib2wuZm9yKFwicmVhY3QuZGVmYXVsdF92YWx1ZVwiKSxcbiAgICBkYSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3N0cG9uZVwiKSxcbiAgICBDID0gU3ltYm9sLml0ZXJhdG9yO1xuXG5mdW5jdGlvbiBlYShhKSB7XG4gIGlmIChudWxsID09PSBhIHx8IFwib2JqZWN0XCIgIT09IF90eXBlb2YoYSkpIHJldHVybiBudWxsO1xuICBhID0gQyAmJiBhW0NdIHx8IGFbXCJAQGl0ZXJhdG9yXCJdO1xuICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYSA/IGEgOiBudWxsO1xufVxuXG52YXIgRCA9IHtcbiAgaXNNb3VudGVkOiBmdW5jdGlvbiBpc01vdW50ZWQoKSB7XG4gICAgcmV0dXJuICExO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGVucXVldWVGb3JjZVVwZGF0ZSgpIHt9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiBlbnF1ZXVlUmVwbGFjZVN0YXRlKCkge30sXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gZW5xdWV1ZVNldFN0YXRlKCkge31cbn0sXG4gICAgRSA9IE9iamVjdC5hc3NpZ24sXG4gICAgRiA9IHt9O1xuXG5mdW5jdGlvbiBHKGEsIGIsIGMpIHtcbiAgdGhpcy5wcm9wcyA9IGE7XG4gIHRoaXMuY29udGV4dCA9IGI7XG4gIHRoaXMucmVmcyA9IEY7XG4gIHRoaXMudXBkYXRlciA9IGMgfHwgRDtcbn1cblxuRy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuXG5HLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIGlmIChcIm9iamVjdFwiICE9PSBfdHlwZW9mKGEpICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGEgJiYgbnVsbCAhPSBhKSB0aHJvdyBFcnJvcihcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiKTtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBhLCBiLCBcInNldFN0YXRlXCIpO1xufTtcblxuRy5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoYSkge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGEsIFwiZm9yY2VVcGRhdGVcIik7XG59O1xuXG5mdW5jdGlvbiBIKCkge31cblxuSC5wcm90b3R5cGUgPSBHLnByb3RvdHlwZTtcblxuZnVuY3Rpb24gSShhLCBiLCBjKSB7XG4gIHRoaXMucHJvcHMgPSBhO1xuICB0aGlzLmNvbnRleHQgPSBiO1xuICB0aGlzLnJlZnMgPSBGO1xuICB0aGlzLnVwZGF0ZXIgPSBjIHx8IEQ7XG59XG5cbnZhciBKID0gSS5wcm90b3R5cGUgPSBuZXcgSCgpO1xuSi5jb25zdHJ1Y3RvciA9IEk7XG5FKEosIEcucHJvdG90eXBlKTtcbkouaXNQdXJlUmVhY3RDb21wb25lbnQgPSAhMDtcbnZhciBLID0gQXJyYXkuaXNBcnJheSxcbiAgICBMID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICBNID0ge1xuICBjdXJyZW50OiBudWxsXG59LFxuICAgIE4gPSB7XG4gIGtleTogITAsXG4gIHJlZjogITAsXG4gIF9fc2VsZjogITAsXG4gIF9fc291cmNlOiAhMFxufTtcblxuZnVuY3Rpb24gTyhhLCBiLCBjKSB7XG4gIHZhciBkLFxuICAgICAgZSA9IHt9LFxuICAgICAgZiA9IG51bGwsXG4gICAgICBnID0gbnVsbDtcbiAgaWYgKG51bGwgIT0gYikgZm9yIChkIGluIHZvaWQgMCAhPT0gYi5yZWYgJiYgKGcgPSBiLnJlZiksIHZvaWQgMCAhPT0gYi5rZXkgJiYgKGYgPSBcIlwiICsgYi5rZXkpLCBiKSB7XG4gICAgTC5jYWxsKGIsIGQpICYmICFOLmhhc093blByb3BlcnR5KGQpICYmIChlW2RdID0gYltkXSk7XG4gIH1cbiAgdmFyIGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKDEgPT09IGgpIGUuY2hpbGRyZW4gPSBjO2Vsc2UgaWYgKDEgPCBoKSB7XG4gICAgZm9yICh2YXIgayA9IEFycmF5KGgpLCBtID0gMDsgbSA8IGg7IG0rKykge1xuICAgICAga1ttXSA9IGFyZ3VtZW50c1ttICsgMl07XG4gICAgfVxuXG4gICAgZS5jaGlsZHJlbiA9IGs7XG4gIH1cbiAgaWYgKGEgJiYgYS5kZWZhdWx0UHJvcHMpIGZvciAoZCBpbiBoID0gYS5kZWZhdWx0UHJvcHMsIGgpIHtcbiAgICB2b2lkIDAgPT09IGVbZF0gJiYgKGVbZF0gPSBoW2RdKTtcbiAgfVxuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBsLFxuICAgIHR5cGU6IGEsXG4gICAga2V5OiBmLFxuICAgIHJlZjogZyxcbiAgICBwcm9wczogZSxcbiAgICBfb3duZXI6IE0uY3VycmVudFxuICB9O1xufVxuXG5mdW5jdGlvbiBmYShhLCBiKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IGwsXG4gICAgdHlwZTogYS50eXBlLFxuICAgIGtleTogYixcbiAgICByZWY6IGEucmVmLFxuICAgIHByb3BzOiBhLnByb3BzLFxuICAgIF9vd25lcjogYS5fb3duZXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gUChhKSB7XG4gIHJldHVybiBcIm9iamVjdFwiID09PSBfdHlwZW9mKGEpICYmIG51bGwgIT09IGEgJiYgYS4kJHR5cGVvZiA9PT0gbDtcbn1cblxuZnVuY3Rpb24gZXNjYXBlKGEpIHtcbiAgdmFyIGIgPSB7XG4gICAgXCI9XCI6IFwiPTBcIixcbiAgICBcIjpcIjogXCI9MlwiXG4gIH07XG4gIHJldHVybiBcIiRcIiArIGEucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBiW2NdO1xuICB9KTtcbn1cblxudmFyIFEgPSAvXFwvKy9nO1xuXG5mdW5jdGlvbiBSKGEsIGIpIHtcbiAgcmV0dXJuIFwib2JqZWN0XCIgPT09IF90eXBlb2YoYSkgJiYgbnVsbCAhPT0gYSAmJiBudWxsICE9IGEua2V5ID8gZXNjYXBlKFwiXCIgKyBhLmtleSkgOiBiLnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gUyhhLCBiLCBjLCBkLCBlKSB7XG4gIHZhciBmID0gX3R5cGVvZihhKTtcblxuICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gZiB8fCBcImJvb2xlYW5cIiA9PT0gZikgYSA9IG51bGw7XG4gIHZhciBnID0gITE7XG4gIGlmIChudWxsID09PSBhKSBnID0gITA7ZWxzZSBzd2l0Y2ggKGYpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgZyA9ICEwO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICBzd2l0Y2ggKGEuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBsOlxuICAgICAgICBjYXNlIG46XG4gICAgICAgICAgZyA9ICEwO1xuICAgICAgfVxuXG4gIH1cbiAgaWYgKGcpIHJldHVybiBnID0gYSwgZSA9IGUoZyksIGEgPSBcIlwiID09PSBkID8gXCIuXCIgKyBSKGcsIDApIDogZCwgSyhlKSA/IChjID0gXCJcIiwgbnVsbCAhPSBhICYmIChjID0gYS5yZXBsYWNlKFEsIFwiJCYvXCIpICsgXCIvXCIpLCBTKGUsIGIsIGMsIFwiXCIsIGZ1bmN0aW9uIChtKSB7XG4gICAgcmV0dXJuIG07XG4gIH0pKSA6IG51bGwgIT0gZSAmJiAoUChlKSAmJiAoZSA9IGZhKGUsIGMgKyAoIWUua2V5IHx8IGcgJiYgZy5rZXkgPT09IGUua2V5ID8gXCJcIiA6IChcIlwiICsgZS5rZXkpLnJlcGxhY2UoUSwgXCIkJi9cIikgKyBcIi9cIikgKyBhKSksIGIucHVzaChlKSksIDE7XG4gIGcgPSAwO1xuICBkID0gXCJcIiA9PT0gZCA/IFwiLlwiIDogZCArIFwiOlwiO1xuICBpZiAoSyhhKSkgZm9yICh2YXIgaCA9IDA7IGggPCBhLmxlbmd0aDsgaCsrKSB7XG4gICAgZiA9IGFbaF07XG4gICAgdmFyIGsgPSBkICsgUihmLCBoKTtcbiAgICBnICs9IFMoZiwgYiwgYywgaywgZSk7XG4gIH0gZWxzZSBpZiAoayA9IGVhKGEpLCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBrKSBmb3IgKGEgPSBrLmNhbGwoYSksIGggPSAwOyAhKGYgPSBhLm5leHQoKSkuZG9uZTspIHtcbiAgICBmID0gZi52YWx1ZSwgayA9IGQgKyBSKGYsIGgrKyksIGcgKz0gUyhmLCBiLCBjLCBrLCBlKTtcbiAgfSBlbHNlIGlmIChcIm9iamVjdFwiID09PSBmKSB0aHJvdyBiID0gU3RyaW5nKGEpLCBFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoXCJbb2JqZWN0IE9iamVjdF1cIiA9PT0gYiA/IFwib2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikgKyBcIn1cIiA6IGIpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIpO1xuICByZXR1cm4gZztcbn1cblxuZnVuY3Rpb24gVChhLCBiLCBjKSB7XG4gIGlmIChudWxsID09IGEpIHJldHVybiBhO1xuICB2YXIgZCA9IFtdLFxuICAgICAgZSA9IDA7XG4gIFMoYSwgZCwgXCJcIiwgXCJcIiwgZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gYi5jYWxsKGMsIGYsIGUrKyk7XG4gIH0pO1xuICByZXR1cm4gZDtcbn1cblxuZnVuY3Rpb24gaGEoYSkge1xuICBpZiAoLTEgPT09IGEuX3N0YXR1cykge1xuICAgIHZhciBiID0gYS5fcmVzdWx0O1xuICAgIGIgPSBiKCk7XG4gICAgYi50aGVuKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoMCA9PT0gYS5fc3RhdHVzIHx8IC0xID09PSBhLl9zdGF0dXMpIGEuX3N0YXR1cyA9IDEsIGEuX3Jlc3VsdCA9IGM7XG4gICAgfSwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmICgwID09PSBhLl9zdGF0dXMgfHwgLTEgPT09IGEuX3N0YXR1cykgYS5fc3RhdHVzID0gMiwgYS5fcmVzdWx0ID0gYztcbiAgICB9KTtcbiAgICAtMSA9PT0gYS5fc3RhdHVzICYmIChhLl9zdGF0dXMgPSAwLCBhLl9yZXN1bHQgPSBiKTtcbiAgfVxuXG4gIGlmICgxID09PSBhLl9zdGF0dXMpIHJldHVybiBhLl9yZXN1bHQuZGVmYXVsdDtcbiAgdGhyb3cgYS5fcmVzdWx0O1xufVxuXG52YXIgVSA9IHtcbiAgY3VycmVudDogbnVsbFxufTtcblxuZnVuY3Rpb24gaWEoKSB7XG4gIHJldHVybiBuZXcgV2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBWKCkge1xuICByZXR1cm4ge1xuICAgIHM6IDAsXG4gICAgdjogdm9pZCAwLFxuICAgIG86IG51bGwsXG4gICAgcDogbnVsbFxuICB9O1xufVxuXG52YXIgVyA9IHtcbiAgY3VycmVudDogbnVsbFxufTtcblxuZnVuY3Rpb24gWChhLCBiKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlT3B0aW1pc3RpYyhhLCBiKTtcbn1cblxudmFyIFkgPSB7XG4gIHRyYW5zaXRpb246IG51bGxcbn0sXG4gICAgWiA9IHt9LFxuICAgIGphID0ge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBXLFxuICBSZWFjdEN1cnJlbnRDYWNoZTogVSxcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFksXG4gIFJlYWN0Q3VycmVudE93bmVyOiBNLFxuICBDb250ZXh0UmVnaXN0cnk6IFpcbn07XG5leHBvcnRzLkNoaWxkcmVuID0ge1xuICBtYXA6IFQsXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goYSwgYiwgYykge1xuICAgIFQoYSwgZnVuY3Rpb24gKCkge1xuICAgICAgYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sIGMpO1xuICB9LFxuICBjb3VudDogZnVuY3Rpb24gY291bnQoYSkge1xuICAgIHZhciBiID0gMDtcbiAgICBUKGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGIrKztcbiAgICB9KTtcbiAgICByZXR1cm4gYjtcbiAgfSxcbiAgdG9BcnJheTogZnVuY3Rpb24gdG9BcnJheShhKSB7XG4gICAgcmV0dXJuIFQoYSwgZnVuY3Rpb24gKGIpIHtcbiAgICAgIHJldHVybiBiO1xuICAgIH0pIHx8IFtdO1xuICB9LFxuICBvbmx5OiBmdW5jdGlvbiBvbmx5KGEpIHtcbiAgICBpZiAoIVAoYSkpIHRocm93IEVycm9yKFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIpO1xuICAgIHJldHVybiBhO1xuICB9XG59O1xuZXhwb3J0cy5Db21wb25lbnQgPSBHO1xuZXhwb3J0cy5GcmFnbWVudCA9IHA7XG5leHBvcnRzLlByb2ZpbGVyID0gcjtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IEk7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBxO1xuZXhwb3J0cy5TdXNwZW5zZSA9IHg7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gamE7XG5cbmV4cG9ydHMuY2FjaGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBiID0gVS5jdXJyZW50O1xuICAgIGlmICghYikgcmV0dXJuIGEuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB2YXIgYyA9IGIuZ2V0Q2FjaGVGb3JUeXBlKGlhKTtcbiAgICBiID0gYy5nZXQoYSk7XG4gICAgdm9pZCAwID09PSBiICYmIChiID0gVigpLCBjLnNldChhLCBiKSk7XG4gICAgYyA9IDA7XG5cbiAgICBmb3IgKHZhciBkID0gYXJndW1lbnRzLmxlbmd0aDsgYyA8IGQ7IGMrKykge1xuICAgICAgdmFyIGUgPSBhcmd1bWVudHNbY107XG5cbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBlIHx8IFwib2JqZWN0XCIgPT09IF90eXBlb2YoZSkgJiYgbnVsbCAhPT0gZSkge1xuICAgICAgICB2YXIgZiA9IGIubztcbiAgICAgICAgbnVsbCA9PT0gZiAmJiAoYi5vID0gZiA9IG5ldyBXZWFrTWFwKCkpO1xuICAgICAgICBiID0gZi5nZXQoZSk7XG4gICAgICAgIHZvaWQgMCA9PT0gYiAmJiAoYiA9IFYoKSwgZi5zZXQoZSwgYikpO1xuICAgICAgfSBlbHNlIGYgPSBiLnAsIG51bGwgPT09IGYgJiYgKGIucCA9IGYgPSBuZXcgTWFwKCkpLCBiID0gZi5nZXQoZSksIHZvaWQgMCA9PT0gYiAmJiAoYiA9IFYoKSwgZi5zZXQoZSwgYikpO1xuICAgIH1cblxuICAgIGlmICgxID09PSBiLnMpIHJldHVybiBiLnY7XG4gICAgaWYgKDIgPT09IGIucykgdGhyb3cgYi52O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBnID0gYS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgYyA9IGI7XG4gICAgICBjLnMgPSAxO1xuICAgICAgcmV0dXJuIGMudiA9IGc7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgdGhyb3cgZyA9IGIsIGcucyA9IDIsIGcudiA9IGgsIGg7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICBpZiAobnVsbCA9PT0gYSB8fCB2b2lkIDAgPT09IGEpIHRocm93IEVycm9yKFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBhICsgXCIuXCIpO1xuICB2YXIgZCA9IEUoe30sIGEucHJvcHMpLFxuICAgICAgZSA9IGEua2V5LFxuICAgICAgZiA9IGEucmVmLFxuICAgICAgZyA9IGEuX293bmVyO1xuXG4gIGlmIChudWxsICE9IGIpIHtcbiAgICB2b2lkIDAgIT09IGIucmVmICYmIChmID0gYi5yZWYsIGcgPSBNLmN1cnJlbnQpO1xuICAgIHZvaWQgMCAhPT0gYi5rZXkgJiYgKGUgPSBcIlwiICsgYi5rZXkpO1xuICAgIGlmIChhLnR5cGUgJiYgYS50eXBlLmRlZmF1bHRQcm9wcykgdmFyIGggPSBhLnR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChrIGluIGIpIHtcbiAgICAgIEwuY2FsbChiLCBrKSAmJiAhTi5oYXNPd25Qcm9wZXJ0eShrKSAmJiAoZFtrXSA9IHZvaWQgMCA9PT0gYltrXSAmJiB2b2lkIDAgIT09IGggPyBoW2tdIDogYltrXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGsgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKDEgPT09IGspIGQuY2hpbGRyZW4gPSBjO2Vsc2UgaWYgKDEgPCBrKSB7XG4gICAgaCA9IEFycmF5KGspO1xuXG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCBrOyBtKyspIHtcbiAgICAgIGhbbV0gPSBhcmd1bWVudHNbbSArIDJdO1xuICAgIH1cblxuICAgIGQuY2hpbGRyZW4gPSBoO1xuICB9XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IGwsXG4gICAgdHlwZTogYS50eXBlLFxuICAgIGtleTogZSxcbiAgICByZWY6IGYsXG4gICAgcHJvcHM6IGQsXG4gICAgX293bmVyOiBnXG4gIH07XG59O1xuXG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoYSkge1xuICBhID0ge1xuICAgICQkdHlwZW9mOiB1LFxuICAgIF9jdXJyZW50VmFsdWU6IGEsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGEsXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsLFxuICAgIF9kZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgX2dsb2JhbE5hbWU6IG51bGxcbiAgfTtcbiAgYS5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogdCxcbiAgICBfY29udGV4dDogYVxuICB9O1xuICByZXR1cm4gYS5Db25zdW1lciA9IGE7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBPO1xuXG5leHBvcnRzLmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbiAoYSkge1xuICB2YXIgYiA9IE8uYmluZChudWxsLCBhKTtcbiAgYi50eXBlID0gYTtcbiAgcmV0dXJuIGI7XG59O1xuXG5leHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG59O1xuXG5leHBvcnRzLmNyZWF0ZVNlcnZlckNvbnRleHQgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgYyA9ICEwO1xuXG4gIGlmICghWlthXSkge1xuICAgIGMgPSAhMTtcbiAgICB2YXIgZCA9IHtcbiAgICAgICQkdHlwZW9mOiB2LFxuICAgICAgX2N1cnJlbnRWYWx1ZTogYixcbiAgICAgIF9jdXJyZW50VmFsdWUyOiBiLFxuICAgICAgX2RlZmF1bHRWYWx1ZTogYixcbiAgICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAgIFByb3ZpZGVyOiBudWxsLFxuICAgICAgQ29uc3VtZXI6IG51bGwsXG4gICAgICBfZ2xvYmFsTmFtZTogYVxuICAgIH07XG4gICAgZC5Qcm92aWRlciA9IHtcbiAgICAgICQkdHlwZW9mOiB0LFxuICAgICAgX2NvbnRleHQ6IGRcbiAgICB9O1xuICAgIFpbYV0gPSBkO1xuICB9XG5cbiAgZCA9IFpbYV07XG4gIGlmIChkLl9kZWZhdWx0VmFsdWUgPT09IEIpIGQuX2RlZmF1bHRWYWx1ZSA9IGIsIGQuX2N1cnJlbnRWYWx1ZSA9PT0gQiAmJiAoZC5fY3VycmVudFZhbHVlID0gYiksIGQuX2N1cnJlbnRWYWx1ZTIgPT09IEIgJiYgKGQuX2N1cnJlbnRWYWx1ZTIgPSBiKTtlbHNlIGlmIChjKSB0aHJvdyBFcnJvcihcIlNlcnZlckNvbnRleHQ6IFwiICsgYSArIFwiIGFscmVhZHkgZGVmaW5lZFwiKTtcbiAgcmV0dXJuIGQ7XG59O1xuXG5leHBvcnRzLmV4cGVyaW1lbnRhbF91c2VFZmZlY3RFdmVudCA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlRWZmZWN0RXZlbnQoYSk7XG59O1xuXG5leHBvcnRzLmV4cGVyaW1lbnRhbF91c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIFgoYSwgYik7XG59O1xuXG5leHBvcnRzLmZvcndhcmRSZWYgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiB3LFxuICAgIHJlbmRlcjogYVxuICB9O1xufTtcblxuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IFA7XG5cbmV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IEEsXG4gICAgX3BheWxvYWQ6IHtcbiAgICAgIF9zdGF0dXM6IC0xLFxuICAgICAgX3Jlc3VsdDogYVxuICAgIH0sXG4gICAgX2luaXQ6IGhhXG4gIH07XG59O1xuXG5leHBvcnRzLm1lbW8gPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiB6LFxuICAgIHR5cGU6IGEsXG4gICAgY29tcGFyZTogdm9pZCAwID09PSBiID8gbnVsbCA6IGJcbiAgfTtcbn07XG5cbmV4cG9ydHMuc3RhcnRUcmFuc2l0aW9uID0gZnVuY3Rpb24gKGEpIHtcbiAgdmFyIGIgPSBZLnRyYW5zaXRpb247XG4gIFkudHJhbnNpdGlvbiA9IHt9O1xuXG4gIHRyeSB7XG4gICAgYSgpO1xuICB9IGZpbmFsbHkge1xuICAgIFkudHJhbnNpdGlvbiA9IGI7XG4gIH1cbn07XG5cbmV4cG9ydHMudW5zdGFibGVfQWN0aXZpdHkgPSBiYTtcbmV4cG9ydHMudW5zdGFibGVfQ2FjaGUgPSBjYTtcbmV4cG9ydHMudW5zdGFibGVfRGVidWdUcmFjaW5nTW9kZSA9IGFhO1xuZXhwb3J0cy51bnN0YWJsZV9TdXNwZW5zZUxpc3QgPSB5O1xuXG5leHBvcnRzLnVuc3RhYmxlX2FjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgRXJyb3IoXCJhY3QoLi4uKSBpcyBub3Qgc3VwcG9ydGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIG9mIFJlYWN0LlwiKTtcbn07XG5cbmV4cG9ydHMudW5zdGFibGVfZ2V0Q2FjaGVGb3JUeXBlID0gZnVuY3Rpb24gKGEpIHtcbiAgdmFyIGIgPSBVLmN1cnJlbnQ7XG4gIHJldHVybiBiID8gYi5nZXRDYWNoZUZvclR5cGUoYSkgOiBhKCk7XG59O1xuXG5leHBvcnRzLnVuc3RhYmxlX2dldENhY2hlU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYSA9IFUuY3VycmVudDtcbiAgcmV0dXJuIGEgPyBhLmdldENhY2hlU2lnbmFsKCkgOiAoYSA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKSwgYS5hYm9ydChFcnJvcihcIlRoaXMgQ2FjaGVTaWduYWwgd2FzIHJlcXVlc3RlZCBvdXRzaWRlIFJlYWN0IHdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgaW1tZWRpYXRlbHkgYWJvcnRlZC5cIikpLCBhLnNpZ25hbCk7XG59O1xuXG5leHBvcnRzLnVuc3RhYmxlX3Bvc3Rwb25lID0gZnVuY3Rpb24gKGEpIHtcbiAgYSA9IEVycm9yKGEpO1xuICBhLiQkdHlwZW9mID0gZGE7XG4gIHRocm93IGE7XG59O1xuXG5leHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VDYWNoZVJlZnJlc2goKTtcbn07XG5cbmV4cG9ydHMudW5zdGFibGVfdXNlTWVtb0NhY2hlID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VNZW1vQ2FjaGUoYSk7XG59O1xuXG5leHBvcnRzLnVzZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlKGEpO1xufTtcblxuZXhwb3J0cy51c2VDYWxsYmFjayA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlQ2FsbGJhY2soYSwgYik7XG59O1xuXG5leHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZUNvbnRleHQoYSk7XG59O1xuXG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSBmdW5jdGlvbiAoKSB7fTtcblxuZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VEZWZlcnJlZFZhbHVlKGEsIGIpO1xufTtcblxuZXhwb3J0cy51c2VFZmZlY3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZUVmZmVjdChhLCBiKTtcbn07XG5cbmV4cG9ydHMudXNlSWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlSWQoKTtcbn07XG5cbmV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZShhLCBiLCBjKTtcbn07XG5cbmV4cG9ydHMudXNlSW5zZXJ0aW9uRWZmZWN0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VJbnNlcnRpb25FZmZlY3QoYSwgYik7XG59O1xuXG5leHBvcnRzLnVzZUxheW91dEVmZmVjdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGEsIGIpO1xufTtcblxuZXhwb3J0cy51c2VNZW1vID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VNZW1vKGEsIGIpO1xufTtcblxuZXhwb3J0cy51c2VPcHRpbWlzdGljID0gWDtcblxuZXhwb3J0cy51c2VSZWR1Y2VyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgcmV0dXJuIFcuY3VycmVudC51c2VSZWR1Y2VyKGEsIGIsIGMpO1xufTtcblxuZXhwb3J0cy51c2VSZWYgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZVJlZihhKTtcbn07XG5cbmV4cG9ydHMudXNlU3RhdGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gVy5jdXJyZW50LnVzZVN0YXRlKGEpO1xufTtcblxuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoYSwgYiwgYyk7XG59O1xuXG5leHBvcnRzLnVzZVRyYW5zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBXLmN1cnJlbnQudXNlVHJhbnNpdGlvbigpO1xufTtcblxuZXhwb3J0cy52ZXJzaW9uID0gXCIxOC4zLjAtZXhwZXJpbWVudGFsLWMyOWNhMjNhZi0yMDIzMTIwNVwiO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTg5OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5pZiAodHJ1ZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4KTtcbn0gZWxzZSB7fVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjA2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXztmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7IC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gIGlmICh0cnVlKSB7XG4gICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fID0gW19fd2VicGFja19yZXF1aXJlX18oNDMwKV0sIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9IChmYWN0b3J5KSxcblx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9ICh0eXBlb2YgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fID09PSAnZnVuY3Rpb24nID9cblx0XHQoX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pKSA6IF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyksXG5cdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xuICB9IGVsc2Uge31cbn0pKHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCA9IC8oXnxAKVxcUys6XFxkKy87XG4gIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTKzpcXGQrfFxcKG5hdGl2ZVxcKSkvbTtcbiAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXSk/JC87XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gRXJyb3Igb2JqZWN0LCBleHRyYWN0IHRoZSBtb3N0IGluZm9ybWF0aW9uIGZyb20gaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgU3RhY2tGcmFtZXNcbiAgICAgKi9cbiAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVjhPcklFKGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICBleHRyYWN0TG9jYXRpb246IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG4gICAgICAvLyBGYWlsLWZhc3QgYnV0IHJldHVybiBsb2NhdGlvbnMgbGlrZSBcIihuYXRpdmUpXCJcbiAgICAgIGlmICh1cmxMaWtlLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OjooXFxkKykpPyg/OjooXFxkKykpPyQvO1xuICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bKCldL2csICcnKSk7XG4gICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgfSxcbiAgICBwYXJzZVY4T3JJRTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUoZXJyb3IpIHtcbiAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL2V2YWwgY29kZS9nLCAnZXZhbCcpLnJlcGxhY2UoLyhcXChldmFsIGF0IFteKCldKil8KFxcKSwuKiQpL2csICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzYW5pdGl6ZWRMaW5lID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKTsgLy8gY2FwdHVyZSBhbmQgcHJlc2V2ZSB0aGUgcGFyZW50aGVzaXplZCBsb2NhdGlvbiBcIigvZm9vL215IGJhci5qczoxMjo4NylcIiBpblxuICAgICAgICAvLyBjYXNlIGl0IGhhcyBzcGFjZXMgaW4gaXQsIGFzIHRoZSBzdHJpbmcgaXMgc3BsaXQgb24gXFxzKyBsYXRlciBvblxuXG4gICAgICAgIHZhciBsb2NhdGlvbiA9IHNhbml0aXplZExpbmUubWF0Y2goLyAoXFwoKC4rKTooXFxkKyk6KFxcZCspXFwpJCkvKTsgLy8gcmVtb3ZlIHRoZSBwYXJlbnRoZXNpemVkIGxvY2F0aW9uIGZyb20gdGhlIGxpbmUsIGlmIGl0IHdhcyBtYXRjaGVkXG5cbiAgICAgICAgc2FuaXRpemVkTGluZSA9IGxvY2F0aW9uID8gc2FuaXRpemVkTGluZS5yZXBsYWNlKGxvY2F0aW9uWzBdLCAnJykgOiBzYW5pdGl6ZWRMaW5lO1xuICAgICAgICB2YXIgdG9rZW5zID0gc2FuaXRpemVkTGluZS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpOyAvLyBpZiBhIGxvY2F0aW9uIHdhcyBtYXRjaGVkLCBwYXNzIGl0IHRvIGV4dHJhY3RMb2NhdGlvbigpIG90aGVyd2lzZSBwb3AgdGhlIGxhc3QgdG9rZW5cblxuICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKGxvY2F0aW9uID8gbG9jYXRpb25bMV0gOiB0b2tlbnMucG9wKCkpO1xuICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICB9KTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0sXG4gICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuICFsaW5lLm1hdGNoKFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFApO1xuICAgICAgfSwgdGhpcyk7XG4gICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbDpcXGQrOlxcZCsvZywgJzokMScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBTYWZhcmkgZXZhbCBmcmFtZXMgb25seSBoYXZlIGZ1bmN0aW9uIG5hbWVzIGFuZCBub3RoaW5nIGVsc2VcbiAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZVJlZ2V4ID0gLygoLipcIi4rXCJbXkBdKik/W15AXSopKD86QCkvO1xuICAgICAgICAgIHZhciBtYXRjaGVzID0gbGluZS5tYXRjaChmdW5jdGlvbk5hbWVSZWdleCk7XG4gICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSA/IG1hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbihsaW5lLnJlcGxhY2UoZnVuY3Rpb25OYW1lUmVnZXgsICcnKSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuICAgIH0sXG4gICAgcGFyc2VPcGVyYTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYShlKSB7XG4gICAgICBpZiAoIWUuc3RhY2t0cmFjZSB8fCBlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJiBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCA+IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJykubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmE5KGUpO1xuICAgICAgfSBlbHNlIGlmICghZS5zdGFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIC8vIE9wZXJhIDEwLjY1KyBFcnJvci5zdGFjayB2ZXJ5IHNpbWlsYXIgdG8gRkYvU2FmYXJpXG4gICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFApICYmICFsaW5lLm1hdGNoKC9eRXJyb3IgY3JlYXRlZCBhdC8pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgdmFyIGZ1bmN0aW9uQ2FsbCA9IHRva2Vucy5zaGlmdCgpIHx8ICcnO1xuICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsLnJlcGxhY2UoLzxhbm9ueW1vdXMgZnVuY3Rpb24oOiAoXFx3KykpPz4vLCAnJDInKS5yZXBsYWNlKC9cXChbXildKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYXJnc1JhdztcblxuICAgICAgICBpZiAoZnVuY3Rpb25DYWxsLm1hdGNoKC9cXCgoW14pXSopXFwpLykpIHtcbiAgICAgICAgICBhcmdzUmF3ID0gZnVuY3Rpb25DYWxsLnJlcGxhY2UoL15bXihdK1xcKChbXildKilcXCkkLywgJyQxJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXJncyA9IGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScgPyB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgfSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9XG4gIH07XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE3Mjpcbi8qKiovICgobW9kdWxlKSA9PiB7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG5cbnZhciBOQU4gPSAwIC8gMDtcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cblxudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cblxudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cblxudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cblxudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cblxudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xuXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xuXG52YXIgZnJlZUdsb2JhbCA9ICh0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoZ2xvYmFsKSkgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xuXG52YXIgZnJlZVNlbGYgPSAodHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihzZWxmKSkgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cblxudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG5cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG5cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xuXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG5cbnZhciBub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cblxuXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuXG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuXG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICBtYXhpbmcgPSAnbWF4V2FpdCcgaW4gb3B0aW9ucztcbiAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICB0aGlzQXJnID0gbGFzdFRoaXM7XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lOyAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTsgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICByZXN1bHQgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG4gICAgcmV0dXJuIG1heGluZyA/IG5hdGl2ZU1pbihyZXN1bHQsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKSA6IHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZTsgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cblxuICAgIHJldHVybiBsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCB0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0IHx8IHRpbWVTaW5jZUxhc3RDYWxsIDwgMCB8fCBtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0O1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG5cbiAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgIH0gLy8gUmVzdGFydCB0aGUgdGltZXIuXG5cblxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7IC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cblxuICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgfVxuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG5cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRocm90dGxlZCBmdW5jdGlvbiB0aGF0IG9ubHkgaW52b2tlcyBgZnVuY2AgYXQgbW9zdCBvbmNlIHBlclxuICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAqIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYFxuICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICogdGhyb3R0bGVkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICpcbiAqIC8vIEludm9rZSBgcmVuZXdUb2tlbmAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICovXG5cblxuZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgbGVhZGluZyA9IHRydWUsXG4gICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cblxuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuXG4gIHJldHVybiBkZWJvdW5jZShmdW5jLCB3YWl0LCB7XG4gICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICdtYXhXYWl0Jzogd2FpdCxcbiAgICAndHJhaWxpbmcnOiB0cmFpbGluZ1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cblxuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IF90eXBlb2YodmFsdWUpO1xuXG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiBfdHlwZW9mKHZhbHVlKSA9PSAnb2JqZWN0Jztcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuXG5cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiBfdHlwZW9mKHZhbHVlKSA9PSAnc3ltYm9sJyB8fCBpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZztcbn1cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5cblxuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IG90aGVyICsgJycgOiBvdGhlcjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuXG4gIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOCkgOiByZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocm90dGxlO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNzMwOlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBMUlVDYWNoZTsgLy8gVGhpcyB3aWxsIGJlIGEgcHJvcGVyIGl0ZXJhYmxlICdNYXAnIGluIGVuZ2luZXMgdGhhdCBzdXBwb3J0IGl0LFxuLy8gb3IgYSBmYWtleS1mYWtlIFBzZXVkb01hcCBpbiBvbGRlciB2ZXJzaW9ucy5cblxudmFyIE1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMzA3KTtcblxudmFyIHV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKTsgLy8gQSBsaW5rZWQgbGlzdCB0byBrZWVwIHRyYWNrIG9mIHJlY2VudGx5LXVzZWQtbmVzc1xuXG5cbnZhciBZYWxsaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTUpOyAvLyB1c2Ugc3ltYm9scyBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGp1c3QgX3Byb3BzXG5cblxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvY2Vzcy5lbnYuX25vZGVMUlVDYWNoZUZvcmNlTm9TeW1ib2wgIT09ICcxJztcbnZhciBtYWtlU3ltYm9sO1xuXG5pZiAoaGFzU3ltYm9sKSB7XG4gIG1ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKGtleSkge1xuICAgIHJldHVybiBTeW1ib2woa2V5KTtcbiAgfTtcbn0gZWxzZSB7XG4gIG1ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKGtleSkge1xuICAgIHJldHVybiAnXycgKyBrZXk7XG4gIH07XG59XG5cbnZhciBNQVggPSBtYWtlU3ltYm9sKCdtYXgnKTtcbnZhciBMRU5HVEggPSBtYWtlU3ltYm9sKCdsZW5ndGgnKTtcbnZhciBMRU5HVEhfQ0FMQ1VMQVRPUiA9IG1ha2VTeW1ib2woJ2xlbmd0aENhbGN1bGF0b3InKTtcbnZhciBBTExPV19TVEFMRSA9IG1ha2VTeW1ib2woJ2FsbG93U3RhbGUnKTtcbnZhciBNQVhfQUdFID0gbWFrZVN5bWJvbCgnbWF4QWdlJyk7XG52YXIgRElTUE9TRSA9IG1ha2VTeW1ib2woJ2Rpc3Bvc2UnKTtcbnZhciBOT19ESVNQT1NFX09OX1NFVCA9IG1ha2VTeW1ib2woJ25vRGlzcG9zZU9uU2V0Jyk7XG52YXIgTFJVX0xJU1QgPSBtYWtlU3ltYm9sKCdscnVMaXN0Jyk7XG52YXIgQ0FDSEUgPSBtYWtlU3ltYm9sKCdjYWNoZScpO1xuXG5mdW5jdGlvbiBuYWl2ZUxlbmd0aCgpIHtcbiAgcmV0dXJuIDE7XG59IC8vIGxydUxpc3QgaXMgYSB5YWxsaXN0IHdoZXJlIHRoZSBoZWFkIGlzIHRoZSB5b3VuZ2VzdFxuLy8gaXRlbSwgYW5kIHRoZSB0YWlsIGlzIHRoZSBvbGRlc3QuICB0aGUgbGlzdCBjb250YWlucyB0aGUgSGl0XG4vLyBvYmplY3RzIGFzIHRoZSBlbnRyaWVzLlxuLy8gRWFjaCBIaXQgb2JqZWN0IGhhcyBhIHJlZmVyZW5jZSB0byBpdHMgWWFsbGlzdC5Ob2RlLiAgVGhpc1xuLy8gbmV2ZXIgY2hhbmdlcy5cbi8vXG4vLyBjYWNoZSBpcyBhIE1hcCAob3IgUHNldWRvTWFwKSB0aGF0IG1hdGNoZXMgdGhlIGtleXMgdG9cbi8vIHRoZSBZYWxsaXN0Lk5vZGUgb2JqZWN0LlxuXG5cbmZ1bmN0aW9uIExSVUNhY2hlKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExSVUNhY2hlKSkge1xuICAgIHJldHVybiBuZXcgTFJVQ2FjaGUob3B0aW9ucyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG1heDogb3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgbWF4ID0gdGhpc1tNQVhdID0gb3B0aW9ucy5tYXg7IC8vIEtpbmQgb2Ygd2VpcmQgdG8gaGF2ZSBhIGRlZmF1bHQgbWF4IG9mIEluZmluaXR5LCBidXQgb2ggd2VsbC5cblxuICBpZiAoIW1heCB8fCAhKHR5cGVvZiBtYXggPT09ICdudW1iZXInKSB8fCBtYXggPD0gMCkge1xuICAgIHRoaXNbTUFYXSA9IEluZmluaXR5O1xuICB9XG5cbiAgdmFyIGxjID0gb3B0aW9ucy5sZW5ndGggfHwgbmFpdmVMZW5ndGg7XG5cbiAgaWYgKHR5cGVvZiBsYyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGxjID0gbmFpdmVMZW5ndGg7XG4gIH1cblxuICB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXSA9IGxjO1xuICB0aGlzW0FMTE9XX1NUQUxFXSA9IG9wdGlvbnMuc3RhbGUgfHwgZmFsc2U7XG4gIHRoaXNbTUFYX0FHRV0gPSBvcHRpb25zLm1heEFnZSB8fCAwO1xuICB0aGlzW0RJU1BPU0VdID0gb3B0aW9ucy5kaXNwb3NlO1xuICB0aGlzW05PX0RJU1BPU0VfT05fU0VUXSA9IG9wdGlvbnMubm9EaXNwb3NlT25TZXQgfHwgZmFsc2U7XG4gIHRoaXMucmVzZXQoKTtcbn0gLy8gcmVzaXplIHRoZSBjYWNoZSB3aGVuIHRoZSBtYXggY2hhbmdlcy5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTFJVQ2FjaGUucHJvdG90eXBlLCAnbWF4Jywge1xuICBzZXQ6IGZ1bmN0aW9uIHNldChtTCkge1xuICAgIGlmICghbUwgfHwgISh0eXBlb2YgbUwgPT09ICdudW1iZXInKSB8fCBtTCA8PSAwKSB7XG4gICAgICBtTCA9IEluZmluaXR5O1xuICAgIH1cblxuICAgIHRoaXNbTUFYXSA9IG1MO1xuICAgIHRyaW0odGhpcyk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW01BWF07XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KExSVUNhY2hlLnByb3RvdHlwZSwgJ2FsbG93U3RhbGUnLCB7XG4gIHNldDogZnVuY3Rpb24gc2V0KGFsbG93U3RhbGUpIHtcbiAgICB0aGlzW0FMTE9XX1NUQUxFXSA9ICEhYWxsb3dTdGFsZTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbQUxMT1dfU1RBTEVdO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMUlVDYWNoZS5wcm90b3R5cGUsICdtYXhBZ2UnLCB7XG4gIHNldDogZnVuY3Rpb24gc2V0KG1BKSB7XG4gICAgaWYgKCFtQSB8fCAhKHR5cGVvZiBtQSA9PT0gJ251bWJlcicpIHx8IG1BIDwgMCkge1xuICAgICAgbUEgPSAwO1xuICAgIH1cblxuICAgIHRoaXNbTUFYX0FHRV0gPSBtQTtcbiAgICB0cmltKHRoaXMpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tNQVhfQUdFXTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7IC8vIHJlc2l6ZSB0aGUgY2FjaGUgd2hlbiB0aGUgbGVuZ3RoQ2FsY3VsYXRvciBjaGFuZ2VzLlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTFJVQ2FjaGUucHJvdG90eXBlLCAnbGVuZ3RoQ2FsY3VsYXRvcicsIHtcbiAgc2V0OiBmdW5jdGlvbiBzZXQobEMpIHtcbiAgICBpZiAodHlwZW9mIGxDICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsQyA9IG5haXZlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmIChsQyAhPT0gdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl0pIHtcbiAgICAgIHRoaXNbTEVOR1RIX0NBTENVTEFUT1JdID0gbEM7XG4gICAgICB0aGlzW0xFTkdUSF0gPSAwO1xuICAgICAgdGhpc1tMUlVfTElTVF0uZm9yRWFjaChmdW5jdGlvbiAoaGl0KSB7XG4gICAgICAgIGhpdC5sZW5ndGggPSB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXShoaXQudmFsdWUsIGhpdC5rZXkpO1xuICAgICAgICB0aGlzW0xFTkdUSF0gKz0gaGl0Lmxlbmd0aDtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cblxuICAgIHRyaW0odGhpcyk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTFJVQ2FjaGUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tMRU5HVEhdO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMUlVDYWNoZS5wcm90b3R5cGUsICdpdGVtQ291bnQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW0xSVV9MSVNUXS5sZW5ndGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5MUlVDYWNoZS5wcm90b3R5cGUucmZvckVhY2ggPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpcztcblxuICBmb3IgKHZhciB3YWxrZXIgPSB0aGlzW0xSVV9MSVNUXS50YWlsOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgdmFyIHByZXYgPSB3YWxrZXIucHJldjtcbiAgICBmb3JFYWNoU3RlcCh0aGlzLCBmbiwgd2Fsa2VyLCB0aGlzcCk7XG4gICAgd2Fsa2VyID0gcHJldjtcbiAgfVxufTtcblxuZnVuY3Rpb24gZm9yRWFjaFN0ZXAoc2VsZiwgZm4sIG5vZGUsIHRoaXNwKSB7XG4gIHZhciBoaXQgPSBub2RlLnZhbHVlO1xuXG4gIGlmIChpc1N0YWxlKHNlbGYsIGhpdCkpIHtcbiAgICBkZWwoc2VsZiwgbm9kZSk7XG5cbiAgICBpZiAoIXNlbGZbQUxMT1dfU1RBTEVdKSB7XG4gICAgICBoaXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhpdCkge1xuICAgIGZuLmNhbGwodGhpc3AsIGhpdC52YWx1ZSwgaGl0LmtleSwgc2VsZik7XG4gIH1cbn1cblxuTFJVQ2FjaGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpcztcblxuICBmb3IgKHZhciB3YWxrZXIgPSB0aGlzW0xSVV9MSVNUXS5oZWFkOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgdmFyIG5leHQgPSB3YWxrZXIubmV4dDtcbiAgICBmb3JFYWNoU3RlcCh0aGlzLCBmbiwgd2Fsa2VyLCB0aGlzcCk7XG4gICAgd2Fsa2VyID0gbmV4dDtcbiAgfVxufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzW0xSVV9MSVNUXS50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIGsua2V5O1xuICB9LCB0aGlzKTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzW0xSVV9MSVNUXS50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIGsudmFsdWU7XG4gIH0sIHRoaXMpO1xufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpc1tESVNQT1NFXSAmJiB0aGlzW0xSVV9MSVNUXSAmJiB0aGlzW0xSVV9MSVNUXS5sZW5ndGgpIHtcbiAgICB0aGlzW0xSVV9MSVNUXS5mb3JFYWNoKGZ1bmN0aW9uIChoaXQpIHtcbiAgICAgIHRoaXNbRElTUE9TRV0oaGl0LmtleSwgaGl0LnZhbHVlKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIHRoaXNbQ0FDSEVdID0gbmV3IE1hcCgpOyAvLyBoYXNoIG9mIGl0ZW1zIGJ5IGtleVxuXG4gIHRoaXNbTFJVX0xJU1RdID0gbmV3IFlhbGxpc3QoKTsgLy8gbGlzdCBvZiBpdGVtcyBpbiBvcmRlciBvZiB1c2UgcmVjZW5jeVxuXG4gIHRoaXNbTEVOR1RIXSA9IDA7IC8vIGxlbmd0aCBvZiBpdGVtcyBpbiB0aGUgbGlzdFxufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLmR1bXAgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzW0xSVV9MSVNUXS5tYXAoZnVuY3Rpb24gKGhpdCkge1xuICAgIGlmICghaXNTdGFsZSh0aGlzLCBoaXQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrOiBoaXQua2V5LFxuICAgICAgICB2OiBoaXQudmFsdWUsXG4gICAgICAgIGU6IGhpdC5ub3cgKyAoaGl0Lm1heEFnZSB8fCAwKVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHRoaXMpLnRvQXJyYXkoKS5maWx0ZXIoZnVuY3Rpb24gKGgpIHtcbiAgICByZXR1cm4gaDtcbiAgfSk7XG59O1xuXG5MUlVDYWNoZS5wcm90b3R5cGUuZHVtcExydSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXNbTFJVX0xJU1RdO1xufTtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuTFJVQ2FjaGUucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiAobiwgb3B0cykge1xuICB2YXIgc3RyID0gJ0xSVUNhY2hlIHsnO1xuICB2YXIgZXh0cmFzID0gZmFsc2U7XG4gIHZhciBhcyA9IHRoaXNbQUxMT1dfU1RBTEVdO1xuXG4gIGlmIChhcykge1xuICAgIHN0ciArPSAnXFxuICBhbGxvd1N0YWxlOiB0cnVlJztcbiAgICBleHRyYXMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIG1heCA9IHRoaXNbTUFYXTtcblxuICBpZiAobWF4ICYmIG1heCAhPT0gSW5maW5pdHkpIHtcbiAgICBpZiAoZXh0cmFzKSB7XG4gICAgICBzdHIgKz0gJywnO1xuICAgIH1cblxuICAgIHN0ciArPSAnXFxuICBtYXg6ICcgKyB1dGlsLmluc3BlY3QobWF4LCBvcHRzKTtcbiAgICBleHRyYXMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIG1heEFnZSA9IHRoaXNbTUFYX0FHRV07XG5cbiAgaWYgKG1heEFnZSkge1xuICAgIGlmIChleHRyYXMpIHtcbiAgICAgIHN0ciArPSAnLCc7XG4gICAgfVxuXG4gICAgc3RyICs9ICdcXG4gIG1heEFnZTogJyArIHV0aWwuaW5zcGVjdChtYXhBZ2UsIG9wdHMpO1xuICAgIGV4dHJhcyA9IHRydWU7XG4gIH1cblxuICB2YXIgbGMgPSB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXTtcblxuICBpZiAobGMgJiYgbGMgIT09IG5haXZlTGVuZ3RoKSB7XG4gICAgaWYgKGV4dHJhcykge1xuICAgICAgc3RyICs9ICcsJztcbiAgICB9XG5cbiAgICBzdHIgKz0gJ1xcbiAgbGVuZ3RoOiAnICsgdXRpbC5pbnNwZWN0KHRoaXNbTEVOR1RIXSwgb3B0cyk7XG4gICAgZXh0cmFzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBkaWRGaXJzdCA9IGZhbHNlO1xuICB0aGlzW0xSVV9MSVNUXS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGRpZEZpcnN0KSB7XG4gICAgICBzdHIgKz0gJyxcXG4gICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChleHRyYXMpIHtcbiAgICAgICAgc3RyICs9ICcsXFxuJztcbiAgICAgIH1cblxuICAgICAgZGlkRmlyc3QgPSB0cnVlO1xuICAgICAgc3RyICs9ICdcXG4gICc7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHV0aWwuaW5zcGVjdChpdGVtLmtleSkuc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbiAgJyk7XG4gICAgdmFyIHZhbCA9IHtcbiAgICAgIHZhbHVlOiBpdGVtLnZhbHVlXG4gICAgfTtcblxuICAgIGlmIChpdGVtLm1heEFnZSAhPT0gbWF4QWdlKSB7XG4gICAgICB2YWwubWF4QWdlID0gaXRlbS5tYXhBZ2U7XG4gICAgfVxuXG4gICAgaWYgKGxjICE9PSBuYWl2ZUxlbmd0aCkge1xuICAgICAgdmFsLmxlbmd0aCA9IGl0ZW0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGlmIChpc1N0YWxlKHRoaXMsIGl0ZW0pKSB7XG4gICAgICB2YWwuc3RhbGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhbCA9IHV0aWwuaW5zcGVjdCh2YWwsIG9wdHMpLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4gICcpO1xuICAgIHN0ciArPSBrZXkgKyAnID0+ICcgKyB2YWw7XG4gIH0pO1xuXG4gIGlmIChkaWRGaXJzdCB8fCBleHRyYXMpIHtcbiAgICBzdHIgKz0gJ1xcbic7XG4gIH1cblxuICBzdHIgKz0gJ30nO1xuICByZXR1cm4gc3RyO1xufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBtYXhBZ2UpIHtcbiAgbWF4QWdlID0gbWF4QWdlIHx8IHRoaXNbTUFYX0FHRV07XG4gIHZhciBub3cgPSBtYXhBZ2UgPyBEYXRlLm5vdygpIDogMDtcbiAgdmFyIGxlbiA9IHRoaXNbTEVOR1RIX0NBTENVTEFUT1JdKHZhbHVlLCBrZXkpO1xuXG4gIGlmICh0aGlzW0NBQ0hFXS5oYXMoa2V5KSkge1xuICAgIGlmIChsZW4gPiB0aGlzW01BWF0pIHtcbiAgICAgIGRlbCh0aGlzLCB0aGlzW0NBQ0hFXS5nZXQoa2V5KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSB0aGlzW0NBQ0hFXS5nZXQoa2V5KTtcbiAgICB2YXIgaXRlbSA9IG5vZGUudmFsdWU7IC8vIGRpc3Bvc2Ugb2YgdGhlIG9sZCBvbmUgYmVmb3JlIG92ZXJ3cml0aW5nXG4gICAgLy8gc3BsaXQgb3V0IGludG8gMiBpZnMgZm9yIGJldHRlciBjb3ZlcmFnZSB0cmFja2luZ1xuXG4gICAgaWYgKHRoaXNbRElTUE9TRV0pIHtcbiAgICAgIGlmICghdGhpc1tOT19ESVNQT1NFX09OX1NFVF0pIHtcbiAgICAgICAgdGhpc1tESVNQT1NFXShrZXksIGl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGl0ZW0ubm93ID0gbm93O1xuICAgIGl0ZW0ubWF4QWdlID0gbWF4QWdlO1xuICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzW0xFTkdUSF0gKz0gbGVuIC0gaXRlbS5sZW5ndGg7XG4gICAgaXRlbS5sZW5ndGggPSBsZW47XG4gICAgdGhpcy5nZXQoa2V5KTtcbiAgICB0cmltKHRoaXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGhpdCA9IG5ldyBFbnRyeShrZXksIHZhbHVlLCBsZW4sIG5vdywgbWF4QWdlKTsgLy8gb3ZlcnNpemVkIG9iamVjdHMgZmFsbCBvdXQgb2YgY2FjaGUgYXV0b21hdGljYWxseS5cblxuICBpZiAoaGl0Lmxlbmd0aCA+IHRoaXNbTUFYXSkge1xuICAgIGlmICh0aGlzW0RJU1BPU0VdKSB7XG4gICAgICB0aGlzW0RJU1BPU0VdKGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRoaXNbTEVOR1RIXSArPSBoaXQubGVuZ3RoO1xuICB0aGlzW0xSVV9MSVNUXS51bnNoaWZ0KGhpdCk7XG4gIHRoaXNbQ0FDSEVdLnNldChrZXksIHRoaXNbTFJVX0xJU1RdLmhlYWQpO1xuICB0cmltKHRoaXMpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIGlmICghdGhpc1tDQUNIRV0uaGFzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgdmFyIGhpdCA9IHRoaXNbQ0FDSEVdLmdldChrZXkpLnZhbHVlO1xuXG4gIGlmIChpc1N0YWxlKHRoaXMsIGhpdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBnZXQodGhpcywga2V5LCB0cnVlKTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gZ2V0KHRoaXMsIGtleSwgZmFsc2UpO1xufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vZGUgPSB0aGlzW0xSVV9MSVNUXS50YWlsO1xuICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICBkZWwodGhpcywgbm9kZSk7XG4gIHJldHVybiBub2RlLnZhbHVlO1xufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLmRlbCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgZGVsKHRoaXMsIHRoaXNbQ0FDSEVdLmdldChrZXkpKTtcbn07XG5cbkxSVUNhY2hlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGFycikge1xuICAvLyByZXNldCB0aGUgY2FjaGVcbiAgdGhpcy5yZXNldCgpO1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKTsgLy8gQSBwcmV2aW91cyBzZXJpYWxpemVkIGNhY2hlIGhhcyB0aGUgbW9zdCByZWNlbnQgaXRlbXMgZmlyc3RcblxuICBmb3IgKHZhciBsID0gYXJyLmxlbmd0aCAtIDE7IGwgPj0gMDsgbC0tKSB7XG4gICAgdmFyIGhpdCA9IGFycltsXTtcbiAgICB2YXIgZXhwaXJlc0F0ID0gaGl0LmUgfHwgMDtcblxuICAgIGlmIChleHBpcmVzQXQgPT09IDApIHtcbiAgICAgIC8vIHRoZSBpdGVtIHdhcyBjcmVhdGVkIHdpdGhvdXQgZXhwaXJhdGlvbiBpbiBhIG5vbiBhZ2VkIGNhY2hlXG4gICAgICB0aGlzLnNldChoaXQuaywgaGl0LnYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF4QWdlID0gZXhwaXJlc0F0IC0gbm93OyAvLyBkb250IGFkZCBhbHJlYWR5IGV4cGlyZWQgaXRlbXNcblxuICAgICAgaWYgKG1heEFnZSA+IDApIHtcbiAgICAgICAgdGhpcy5zZXQoaGl0LmssIGhpdC52LCBtYXhBZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuTFJVQ2FjaGUucHJvdG90eXBlLnBydW5lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXNbQ0FDSEVdLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBnZXQoc2VsZiwga2V5LCBmYWxzZSk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZ2V0KHNlbGYsIGtleSwgZG9Vc2UpIHtcbiAgdmFyIG5vZGUgPSBzZWxmW0NBQ0hFXS5nZXQoa2V5KTtcblxuICBpZiAobm9kZSkge1xuICAgIHZhciBoaXQgPSBub2RlLnZhbHVlO1xuXG4gICAgaWYgKGlzU3RhbGUoc2VsZiwgaGl0KSkge1xuICAgICAgZGVsKHNlbGYsIG5vZGUpO1xuICAgICAgaWYgKCFzZWxmW0FMTE9XX1NUQUxFXSkgaGl0ID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZG9Vc2UpIHtcbiAgICAgICAgc2VsZltMUlVfTElTVF0udW5zaGlmdE5vZGUobm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhpdCkgaGl0ID0gaGl0LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGhpdDtcbn1cblxuZnVuY3Rpb24gaXNTdGFsZShzZWxmLCBoaXQpIHtcbiAgaWYgKCFoaXQgfHwgIWhpdC5tYXhBZ2UgJiYgIXNlbGZbTUFYX0FHRV0pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc3RhbGUgPSBmYWxzZTtcbiAgdmFyIGRpZmYgPSBEYXRlLm5vdygpIC0gaGl0Lm5vdztcblxuICBpZiAoaGl0Lm1heEFnZSkge1xuICAgIHN0YWxlID0gZGlmZiA+IGhpdC5tYXhBZ2U7XG4gIH0gZWxzZSB7XG4gICAgc3RhbGUgPSBzZWxmW01BWF9BR0VdICYmIGRpZmYgPiBzZWxmW01BWF9BR0VdO1xuICB9XG5cbiAgcmV0dXJuIHN0YWxlO1xufVxuXG5mdW5jdGlvbiB0cmltKHNlbGYpIHtcbiAgaWYgKHNlbGZbTEVOR1RIXSA+IHNlbGZbTUFYXSkge1xuICAgIGZvciAodmFyIHdhbGtlciA9IHNlbGZbTFJVX0xJU1RdLnRhaWw7IHNlbGZbTEVOR1RIXSA+IHNlbGZbTUFYXSAmJiB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgICAvLyBXZSBrbm93IHRoYXQgd2UncmUgYWJvdXQgdG8gZGVsZXRlIHRoaXMgb25lLCBhbmQgYWxzb1xuICAgICAgLy8gd2hhdCB0aGUgbmV4dCBsZWFzdCByZWNlbnRseSB1c2VkIGtleSB3aWxsIGJlLCBzbyBqdXN0XG4gICAgICAvLyBnbyBhaGVhZCBhbmQgc2V0IGl0IG5vdy5cbiAgICAgIHZhciBwcmV2ID0gd2Fsa2VyLnByZXY7XG4gICAgICBkZWwoc2VsZiwgd2Fsa2VyKTtcbiAgICAgIHdhbGtlciA9IHByZXY7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlbChzZWxmLCBub2RlKSB7XG4gIGlmIChub2RlKSB7XG4gICAgdmFyIGhpdCA9IG5vZGUudmFsdWU7XG5cbiAgICBpZiAoc2VsZltESVNQT1NFXSkge1xuICAgICAgc2VsZltESVNQT1NFXShoaXQua2V5LCBoaXQudmFsdWUpO1xuICAgIH1cblxuICAgIHNlbGZbTEVOR1RIXSAtPSBoaXQubGVuZ3RoO1xuICAgIHNlbGZbQ0FDSEVdLmRlbGV0ZShoaXQua2V5KTtcbiAgICBzZWxmW0xSVV9MSVNUXS5yZW1vdmVOb2RlKG5vZGUpO1xuICB9XG59IC8vIGNsYXNzeSwgc2luY2UgVjggcHJlZmVycyBwcmVkaWN0YWJsZSBvYmplY3RzLlxuXG5cbmZ1bmN0aW9uIEVudHJ5KGtleSwgdmFsdWUsIGxlbmd0aCwgbm93LCBtYXhBZ2UpIHtcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gIHRoaXMubm93ID0gbm93O1xuICB0aGlzLm1heEFnZSA9IG1heEFnZSB8fCAwO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTY5OlxuLyoqKi8gKChtb2R1bGUpID0+IHtcblxuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307IC8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuXG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gIH1cbn0pKCk7XG5cbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgfSAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuXG5cbiAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gIH0gLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuXG5cbiAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZHJhaW5pbmcgPSBmYWxzZTtcblxuICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVJbmRleCA9IC0xO1xuICB9XG5cbiAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgIGRyYWluUXVldWUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICBpZiAoZHJhaW5pbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuXG4gIHdoaWxlIChsZW4pIHtcbiAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICBxdWV1ZSA9IFtdO1xuXG4gICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWVJbmRleCA9IC0xO1xuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gIGRyYWluaW5nID0gZmFsc2U7XG4gIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuXG4gIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgfVxufTsgLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuXG5cbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICB0aGlzLmZ1biA9IGZ1bjtcbiAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcblxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBbXTtcbn07XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJy8nO1xufTtcblxucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAwO1xufTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDMwNzpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgcHJvY2VzcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY5KTtcbmlmIChwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9uYW1lID09PSAncHNldWRvbWFwJyAmJiBwcm9jZXNzLmVudi5ucG1fbGlmZWN5Y2xlX3NjcmlwdCA9PT0gJ3Rlc3QnKSBwcm9jZXNzLmVudi5URVNUX1BTRVVET01BUCA9ICd0cnVlJztcblxuaWYgKHR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbicgJiYgIXByb2Nlc3MuZW52LlRFU1RfUFNFVURPTUFQKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gTWFwO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2MSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NjE6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBQc2V1ZG9NYXA7XG5cbmZ1bmN0aW9uIFBzZXVkb01hcChzZXQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBzZXVkb01hcCkpIC8vIHdoeXl5eXl5eVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciBQc2V1ZG9NYXAgcmVxdWlyZXMgJ25ldydcIik7XG4gIHRoaXMuY2xlYXIoKTtcblxuICBpZiAoc2V0KSB7XG4gICAgaWYgKHNldCBpbnN0YW5jZW9mIFBzZXVkb01hcCB8fCB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIHNldCBpbnN0YW5jZW9mIE1hcCkgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgIH0sIHRoaXMpO2Vsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2V0KSkgc2V0LmZvckVhY2goZnVuY3Rpb24gKGt2KSB7XG4gICAgICB0aGlzLnNldChrdlswXSwga3ZbMV0pO1xuICAgIH0sIHRoaXMpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBhcmd1bWVudCcpO1xuICB9XG59XG5cblBzZXVkb01hcC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzO1xuICBPYmplY3Qua2V5cyh0aGlzLl9kYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgaWYgKGsgIT09ICdzaXplJykgZm4uY2FsbCh0aGlzcCwgdGhpcy5fZGF0YVtrXS52YWx1ZSwgdGhpcy5fZGF0YVtrXS5rZXkpO1xuICB9LCB0aGlzKTtcbn07XG5cblBzZXVkb01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGspIHtcbiAgcmV0dXJuICEhZmluZCh0aGlzLl9kYXRhLCBrKTtcbn07XG5cblBzZXVkb01hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGspIHtcbiAgdmFyIHJlcyA9IGZpbmQodGhpcy5fZGF0YSwgayk7XG4gIHJldHVybiByZXMgJiYgcmVzLnZhbHVlO1xufTtcblxuUHNldWRvTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoaywgdikge1xuICBzZXQodGhpcy5fZGF0YSwgaywgdik7XG59O1xuXG5Qc2V1ZG9NYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrKSB7XG4gIHZhciByZXMgPSBmaW5kKHRoaXMuX2RhdGEsIGspO1xuXG4gIGlmIChyZXMpIHtcbiAgICBkZWxldGUgdGhpcy5fZGF0YVtyZXMuX2luZGV4XTtcbiAgICB0aGlzLl9kYXRhLnNpemUtLTtcbiAgfVxufTtcblxuUHNldWRvTWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGRhdGEgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkYXRhLnNpemUgPSAwO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19kYXRhJywge1xuICAgIHZhbHVlOiBkYXRhLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHNldWRvTWFwLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnNpemU7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KG4pIHt9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5Qc2V1ZG9NYXAucHJvdG90eXBlLnZhbHVlcyA9IFBzZXVkb01hcC5wcm90b3R5cGUua2V5cyA9IFBzZXVkb01hcC5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdpdGVyYXRvcnMgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24nKTtcbn07IC8vIEVpdGhlciBpZGVudGljYWwsIG9yIGJvdGggTmFOXG5cblxuZnVuY3Rpb24gc2FtZShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiIHx8IGEgIT09IGEgJiYgYiAhPT0gYjtcbn1cblxuZnVuY3Rpb24gRW50cnkoaywgdiwgaSkge1xuICB0aGlzLmtleSA9IGs7XG4gIHRoaXMudmFsdWUgPSB2O1xuICB0aGlzLl9pbmRleCA9IGk7XG59XG5cbmZ1bmN0aW9uIGZpbmQoZGF0YSwgaykge1xuICBmb3IgKHZhciBpID0gMCwgcyA9ICdfJyArIGssIGtleSA9IHM7IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTsga2V5ID0gcyArIGkrKykge1xuICAgIGlmIChzYW1lKGRhdGFba2V5XS5rZXksIGspKSByZXR1cm4gZGF0YVtrZXldO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldChkYXRhLCBrLCB2KSB7XG4gIGZvciAodmFyIGkgPSAwLCBzID0gJ18nICsgaywga2V5ID0gczsgaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpOyBrZXkgPSBzICsgaSsrKSB7XG4gICAgaWYgKHNhbWUoZGF0YVtrZXldLmtleSwgaykpIHtcbiAgICAgIGRhdGFba2V5XS52YWx1ZSA9IHY7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZGF0YS5zaXplKys7XG4gIGRhdGFba2V5XSA9IG5ldyBFbnRyeShrLCB2LCBrZXkpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDMwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXztmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7IC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gIGlmICh0cnVlKSB7XG4gICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fID0gW10sIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9IChmYWN0b3J5KSxcblx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9ICh0eXBlb2YgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fID09PSAnZnVuY3Rpb24nID9cblx0XHQoX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pKSA6IF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyksXG5cdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xuICB9IGVsc2Uge31cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIF9pc051bWJlcihuKSB7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgIH07XG4gIH1cblxuICB2YXIgYm9vbGVhblByb3BzID0gWydpc0NvbnN0cnVjdG9yJywgJ2lzRXZhbCcsICdpc05hdGl2ZScsICdpc1RvcGxldmVsJ107XG4gIHZhciBudW1lcmljUHJvcHMgPSBbJ2NvbHVtbk51bWJlcicsICdsaW5lTnVtYmVyJ107XG4gIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICB2YXIgYXJyYXlQcm9wcyA9IFsnYXJncyddO1xuICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gIGZ1bmN0aW9uIFN0YWNrRnJhbWUob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybjtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvYmpbcHJvcHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgZ2V0QXJnczogZnVuY3Rpb24gZ2V0QXJncygpIHtcbiAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgfSxcbiAgICBzZXRBcmdzOiBmdW5jdGlvbiBzZXRBcmdzKHYpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXJncyA9IHY7XG4gICAgfSxcbiAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbiBnZXRFdmFsT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICB9LFxuICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uIHNldEV2YWxPcmlnaW4odikge1xuICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IHY7XG4gICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gbmV3IFN0YWNrRnJhbWUodik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgfHwgJyc7XG4gICAgICB2YXIgbGluZU51bWJlciA9IHRoaXMuZ2V0TGluZU51bWJlcigpIHx8ICcnO1xuICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHRoaXMuZ2V0Q29sdW1uTnVtYmVyKCkgfHwgJyc7XG4gICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRGdW5jdGlvbk5hbWUoKSB8fCAnJztcblxuICAgICAgaWYgKHRoaXMuZ2V0SXNFdmFsKCkpIHtcbiAgICAgICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuICdbZXZhbF0gKCcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXIgKyAnKSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ1tldmFsXTonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZ1bmN0aW9uTmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb25OYW1lICsgJyAoJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlciArICcpJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlcjtcbiAgICB9XG4gIH07XG5cbiAgU3RhY2tGcmFtZS5mcm9tU3RyaW5nID0gZnVuY3Rpb24gU3RhY2tGcmFtZSQkZnJvbVN0cmluZyhzdHIpIHtcbiAgICB2YXIgYXJnc1N0YXJ0SW5kZXggPSBzdHIuaW5kZXhPZignKCcpO1xuICAgIHZhciBhcmdzRW5kSW5kZXggPSBzdHIubGFzdEluZGV4T2YoJyknKTtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gc3RyLnN1YnN0cmluZygwLCBhcmdzU3RhcnRJbmRleCk7XG4gICAgdmFyIGFyZ3MgPSBzdHIuc3Vic3RyaW5nKGFyZ3NTdGFydEluZGV4ICsgMSwgYXJnc0VuZEluZGV4KS5zcGxpdCgnLCcpO1xuICAgIHZhciBsb2NhdGlvblN0cmluZyA9IHN0ci5zdWJzdHJpbmcoYXJnc0VuZEluZGV4ICsgMSk7XG5cbiAgICBpZiAobG9jYXRpb25TdHJpbmcuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICB2YXIgcGFydHMgPSAvQCguKz8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/JC8uZXhlYyhsb2NhdGlvblN0cmluZywgJycpO1xuICAgICAgdmFyIGZpbGVOYW1lID0gcGFydHNbMV07XG4gICAgICB2YXIgbGluZU51bWJlciA9IHBhcnRzWzJdO1xuICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHBhcnRzWzNdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgIGFyZ3M6IGFyZ3MgfHwgdW5kZWZpbmVkLFxuICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciB8fCB1bmRlZmluZWQsXG4gICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB8fCB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xlYW5Qcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKGJvb2xlYW5Qcm9wc1tpXSldID0gZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICB0aGlzW3BdID0gQm9vbGVhbih2KTtcbiAgICAgIH07XG4gICAgfShib29sZWFuUHJvcHNbaV0pO1xuICB9XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1lcmljUHJvcHMubGVuZ3RoOyBqKyspIHtcbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHAgKyAnIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICB9O1xuICAgIH0obnVtZXJpY1Byb3BzW2pdKTtcbiAgfVxuXG4gIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSBfZ2V0dGVyKHN0cmluZ1Byb3BzW2tdKTtcblxuICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgdGhpc1twXSA9IFN0cmluZyh2KTtcbiAgICAgIH07XG4gICAgfShzdHJpbmdQcm9wc1trXSk7XG4gIH1cblxuICByZXR1cm4gU3RhY2tGcmFtZTtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNzE4OlxuLyoqKi8gKChtb2R1bGUpID0+IHtcblxuaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcblxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uIFRlbXBDdG9yKCkge307XG5cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlO1xuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKCk7XG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yO1xuICB9O1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzE1OlxuLyoqKi8gKChtb2R1bGUpID0+IHtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIF90eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXJnLnJlYWRVSW50OCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4Mjpcbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgcHJvY2VzcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY5KTtcbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcblxuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbiAoZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uICh4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcblxuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG5cbiAgICAgIGNhc2UgJyVkJzpcbiAgICAgICAgcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuXG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG5cbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59OyAvLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5cblxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbiAoZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5cbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKSBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcblxuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG5cbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG5cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cblxuXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9OyAvLyBsZWdhY3kuLi5cblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG5cbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9IC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcblxuXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7IC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnOiBbMSwgMjJdLFxuICAnaXRhbGljJzogWzMsIDIzXSxcbiAgJ3VuZGVybGluZSc6IFs0LCAyNF0sXG4gICdpbnZlcnNlJzogWzcsIDI3XSxcbiAgJ3doaXRlJzogWzM3LCAzOV0sXG4gICdncmV5JzogWzkwLCAzOV0sXG4gICdibGFjayc6IFszMCwgMzldLFxuICAnYmx1ZSc6IFszNCwgMzldLFxuICAnY3lhbic6IFszNiwgMzldLFxuICAnZ3JlZW4nOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnOiBbMzUsIDM5XSxcbiAgJ3JlZCc6IFszMSwgMzldLFxuICAneWVsbG93JzogWzMzLCAzOV1cbn07IC8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuIFwiXFx4MUJbXCIgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgKyBcIlxceDFCW1wiICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbiAodmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIGhhc2g7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiYgdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJiAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuXG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9IC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG5cblxuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuXG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9IC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cblxuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9IC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcblxuXG4gIGlmIChpc0Vycm9yKHZhbHVlKSAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9IC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cblxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cblxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLFxuICAgICAgYXJyYXkgPSBmYWxzZSxcbiAgICAgIGJyYWNlcyA9IFsneycsICd9J107IC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcblxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfSAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcblxuXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH0gLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcblxuXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfSAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcblxuXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9IC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcblxuXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG4gIHZhciBvdXRwdXQ7XG5cbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuXG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJykucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcih2YWx1ZSkpIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKSByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTsgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuXG4gIGlmIChpc051bGwodmFsdWUpKSByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cblxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7XG4gICAgdmFsdWU6IHZhbHVlW2tleV1cbiAgfTtcblxuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cblxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcblxuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICsgJyAnICsgb3V0cHV0LmpvaW4oJyxcXG4gICcpICsgJyAnICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn0gLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cblxuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cblxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuXG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuXG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cblxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiBfdHlwZW9mKGFyZykgPT09ICdzeW1ib2wnO1xufVxuXG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuXG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gX3R5cGVvZihhcmcpID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuXG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHwgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8IHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IF90eXBlb2YoYXJnKSA9PT0gJ3N5bWJvbCcgfHwgLy8gRVM2IHN5bWJvbFxuICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuZXhwb3J0cy5pc0J1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oNzE1KTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXTsgLy8gMjYgRmViIDE2OjE5OjM0XG5cbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSwgcGFkKGQuZ2V0TWludXRlcygpKSwgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufSAvLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5cblxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5cblxuZXhwb3J0cy5pbmhlcml0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzE4KTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24gKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG5cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2OTU6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFlhbGxpc3Q7XG5ZYWxsaXN0Lk5vZGUgPSBOb2RlO1xuWWFsbGlzdC5jcmVhdGUgPSBZYWxsaXN0O1xuXG5mdW5jdGlvbiBZYWxsaXN0KGxpc3QpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICghKHNlbGYgaW5zdGFuY2VvZiBZYWxsaXN0KSkge1xuICAgIHNlbGYgPSBuZXcgWWFsbGlzdCgpO1xuICB9XG5cbiAgc2VsZi50YWlsID0gbnVsbDtcbiAgc2VsZi5oZWFkID0gbnVsbDtcbiAgc2VsZi5sZW5ndGggPSAwO1xuXG4gIGlmIChsaXN0ICYmIHR5cGVvZiBsaXN0LmZvckVhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHNlbGYucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgc2VsZi5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJlbW92ZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAobm9kZS5saXN0ICE9PSB0aGlzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZW1vdmluZyBub2RlIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGxpc3QnKTtcbiAgfVxuXG4gIHZhciBuZXh0ID0gbm9kZS5uZXh0O1xuICB2YXIgcHJldiA9IG5vZGUucHJldjtcblxuICBpZiAobmV4dCkge1xuICAgIG5leHQucHJldiA9IHByZXY7XG4gIH1cblxuICBpZiAocHJldikge1xuICAgIHByZXYubmV4dCA9IG5leHQ7XG4gIH1cblxuICBpZiAobm9kZSA9PT0gdGhpcy5oZWFkKSB7XG4gICAgdGhpcy5oZWFkID0gbmV4dDtcbiAgfVxuXG4gIGlmIChub2RlID09PSB0aGlzLnRhaWwpIHtcbiAgICB0aGlzLnRhaWwgPSBwcmV2O1xuICB9XG5cbiAgbm9kZS5saXN0Lmxlbmd0aC0tO1xuICBub2RlLm5leHQgPSBudWxsO1xuICBub2RlLnByZXYgPSBudWxsO1xuICBub2RlLmxpc3QgPSBudWxsO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUudW5zaGlmdE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAobm9kZSA9PT0gdGhpcy5oZWFkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUubGlzdCkge1xuICAgIG5vZGUubGlzdC5yZW1vdmVOb2RlKG5vZGUpO1xuICB9XG5cbiAgdmFyIGhlYWQgPSB0aGlzLmhlYWQ7XG4gIG5vZGUubGlzdCA9IHRoaXM7XG4gIG5vZGUubmV4dCA9IGhlYWQ7XG5cbiAgaWYgKGhlYWQpIHtcbiAgICBoZWFkLnByZXYgPSBub2RlO1xuICB9XG5cbiAgdGhpcy5oZWFkID0gbm9kZTtcblxuICBpZiAoIXRoaXMudGFpbCkge1xuICAgIHRoaXMudGFpbCA9IG5vZGU7XG4gIH1cblxuICB0aGlzLmxlbmd0aCsrO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUucHVzaE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAobm9kZSA9PT0gdGhpcy50YWlsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUubGlzdCkge1xuICAgIG5vZGUubGlzdC5yZW1vdmVOb2RlKG5vZGUpO1xuICB9XG5cbiAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gIG5vZGUubGlzdCA9IHRoaXM7XG4gIG5vZGUucHJldiA9IHRhaWw7XG5cbiAgaWYgKHRhaWwpIHtcbiAgICB0YWlsLm5leHQgPSBub2RlO1xuICB9XG5cbiAgdGhpcy50YWlsID0gbm9kZTtcblxuICBpZiAoIXRoaXMuaGVhZCkge1xuICAgIHRoaXMuaGVhZCA9IG5vZGU7XG4gIH1cblxuICB0aGlzLmxlbmd0aCsrO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcHVzaCh0aGlzLCBhcmd1bWVudHNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMubGVuZ3RoO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdW5zaGlmdCh0aGlzLCBhcmd1bWVudHNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMubGVuZ3RoO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMudGFpbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgcmVzID0gdGhpcy50YWlsLnZhbHVlO1xuICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwucHJldjtcblxuICBpZiAodGhpcy50YWlsKSB7XG4gICAgdGhpcy50YWlsLm5leHQgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gIH1cblxuICB0aGlzLmxlbmd0aC0tO1xuICByZXR1cm4gcmVzO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5oZWFkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciByZXMgPSB0aGlzLmhlYWQudmFsdWU7XG4gIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0O1xuXG4gIGlmICh0aGlzLmhlYWQpIHtcbiAgICB0aGlzLmhlYWQucHJldiA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcbiAgfVxuXG4gIHRoaXMubGVuZ3RoLS07XG4gIHJldHVybiByZXM7XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXM7XG5cbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy5oZWFkLCBpID0gMDsgd2Fsa2VyICE9PSBudWxsOyBpKyspIHtcbiAgICBmbi5jYWxsKHRoaXNwLCB3YWxrZXIudmFsdWUsIGksIHRoaXMpO1xuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0O1xuICB9XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS5mb3JFYWNoUmV2ZXJzZSA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzO1xuXG4gIGZvciAodmFyIHdhbGtlciA9IHRoaXMudGFpbCwgaSA9IHRoaXMubGVuZ3RoIC0gMTsgd2Fsa2VyICE9PSBudWxsOyBpLS0pIHtcbiAgICBmbi5jYWxsKHRoaXNwLCB3YWxrZXIudmFsdWUsIGksIHRoaXMpO1xuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2O1xuICB9XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobikge1xuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IG47IGkrKykge1xuICAgIC8vIGFib3J0IG91dCBvZiB0aGUgbGlzdCBlYXJseSBpZiB3ZSBoaXQgYSBjeWNsZVxuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0O1xuICB9XG5cbiAgaWYgKGkgPT09IG4gJiYgd2Fsa2VyICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdhbGtlci52YWx1ZTtcbiAgfVxufTtcblxuWWFsbGlzdC5wcm90b3R5cGUuZ2V0UmV2ZXJzZSA9IGZ1bmN0aW9uIChuKSB7XG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgbjsgaSsrKSB7XG4gICAgLy8gYWJvcnQgb3V0IG9mIHRoZSBsaXN0IGVhcmx5IGlmIHdlIGhpdCBhIGN5Y2xlXG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXY7XG4gIH1cblxuICBpZiAoaSA9PT0gbiAmJiB3YWxrZXIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gd2Fsa2VyLnZhbHVlO1xuICB9XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpcztcbiAgdmFyIHJlcyA9IG5ldyBZYWxsaXN0KCk7XG5cbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgcmVzLnB1c2goZm4uY2FsbCh0aGlzcCwgd2Fsa2VyLnZhbHVlLCB0aGlzKSk7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHQ7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUubWFwUmV2ZXJzZSA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzO1xuICB2YXIgcmVzID0gbmV3IFlhbGxpc3QoKTtcblxuICBmb3IgKHZhciB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbDspIHtcbiAgICByZXMucHVzaChmbi5jYWxsKHRoaXNwLCB3YWxrZXIudmFsdWUsIHRoaXMpKTtcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldjtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoZm4sIGluaXRpYWwpIHtcbiAgdmFyIGFjYztcbiAgdmFyIHdhbGtlciA9IHRoaXMuaGVhZDtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICBhY2MgPSBpbml0aWFsO1xuICB9IGVsc2UgaWYgKHRoaXMuaGVhZCkge1xuICAgIHdhbGtlciA9IHRoaXMuaGVhZC5uZXh0O1xuICAgIGFjYyA9IHRoaXMuaGVhZC52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgbGlzdCB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGFjYyA9IGZuKGFjYywgd2Fsa2VyLnZhbHVlLCBpKTtcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dDtcbiAgfVxuXG4gIHJldHVybiBhY2M7XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS5yZWR1Y2VSZXZlcnNlID0gZnVuY3Rpb24gKGZuLCBpbml0aWFsKSB7XG4gIHZhciBhY2M7XG4gIHZhciB3YWxrZXIgPSB0aGlzLnRhaWw7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgYWNjID0gaW5pdGlhbDtcbiAgfSBlbHNlIGlmICh0aGlzLnRhaWwpIHtcbiAgICB3YWxrZXIgPSB0aGlzLnRhaWwucHJldjtcbiAgICBhY2MgPSB0aGlzLnRhaWwudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyB3YWxrZXIgIT09IG51bGw7IGktLSkge1xuICAgIGFjYyA9IGZuKGFjYywgd2Fsa2VyLnZhbHVlLCBpKTtcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldjtcbiAgfVxuXG4gIHJldHVybiBhY2M7XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGFycltpXSA9IHdhbGtlci52YWx1ZTtcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dDtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS50b0FycmF5UmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyciA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIHdhbGtlciA9IHRoaXMudGFpbDsgd2Fsa2VyICE9PSBudWxsOyBpKyspIHtcbiAgICBhcnJbaV0gPSB3YWxrZXIudmFsdWU7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXY7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgdG8gPSB0byB8fCB0aGlzLmxlbmd0aDtcblxuICBpZiAodG8gPCAwKSB7XG4gICAgdG8gKz0gdGhpcy5sZW5ndGg7XG4gIH1cblxuICBmcm9tID0gZnJvbSB8fCAwO1xuXG4gIGlmIChmcm9tIDwgMCkge1xuICAgIGZyb20gKz0gdGhpcy5sZW5ndGg7XG4gIH1cblxuICB2YXIgcmV0ID0gbmV3IFlhbGxpc3QoKTtcblxuICBpZiAodG8gPCBmcm9tIHx8IHRvIDwgMCkge1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBpZiAoZnJvbSA8IDApIHtcbiAgICBmcm9tID0gMDtcbiAgfVxuXG4gIGlmICh0byA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdG8gPSB0aGlzLmxlbmd0aDtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgZnJvbTsgaSsrKSB7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHQ7XG4gIH1cblxuICBmb3IgKDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPCB0bzsgaSsrLCB3YWxrZXIgPSB3YWxrZXIubmV4dCkge1xuICAgIHJldC5wdXNoKHdhbGtlci52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuWWFsbGlzdC5wcm90b3R5cGUuc2xpY2VSZXZlcnNlID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gIHRvID0gdG8gfHwgdGhpcy5sZW5ndGg7XG5cbiAgaWYgKHRvIDwgMCkge1xuICAgIHRvICs9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgZnJvbSA9IGZyb20gfHwgMDtcblxuICBpZiAoZnJvbSA8IDApIHtcbiAgICBmcm9tICs9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgdmFyIHJldCA9IG5ldyBZYWxsaXN0KCk7XG5cbiAgaWYgKHRvIDwgZnJvbSB8fCB0byA8IDApIHtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSA9IDA7XG4gIH1cblxuICBpZiAodG8gPiB0aGlzLmxlbmd0aCkge1xuICAgIHRvID0gdGhpcy5sZW5ndGg7XG4gIH1cblxuICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGgsIHdhbGtlciA9IHRoaXMudGFpbDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPiB0bzsgaS0tKSB7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXY7XG4gIH1cblxuICBmb3IgKDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPiBmcm9tOyBpLS0sIHdhbGtlciA9IHdhbGtlci5wcmV2KSB7XG4gICAgcmV0LnB1c2god2Fsa2VyLnZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5ZYWxsaXN0LnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCA9IHRoaXMuaGVhZDtcbiAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG5cbiAgZm9yICh2YXIgd2Fsa2VyID0gaGVhZDsgd2Fsa2VyICE9PSBudWxsOyB3YWxrZXIgPSB3YWxrZXIucHJldikge1xuICAgIHZhciBwID0gd2Fsa2VyLnByZXY7XG4gICAgd2Fsa2VyLnByZXYgPSB3YWxrZXIubmV4dDtcbiAgICB3YWxrZXIubmV4dCA9IHA7XG4gIH1cblxuICB0aGlzLmhlYWQgPSB0YWlsO1xuICB0aGlzLnRhaWwgPSBoZWFkO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHB1c2goc2VsZiwgaXRlbSkge1xuICBzZWxmLnRhaWwgPSBuZXcgTm9kZShpdGVtLCBzZWxmLnRhaWwsIG51bGwsIHNlbGYpO1xuXG4gIGlmICghc2VsZi5oZWFkKSB7XG4gICAgc2VsZi5oZWFkID0gc2VsZi50YWlsO1xuICB9XG5cbiAgc2VsZi5sZW5ndGgrKztcbn1cblxuZnVuY3Rpb24gdW5zaGlmdChzZWxmLCBpdGVtKSB7XG4gIHNlbGYuaGVhZCA9IG5ldyBOb2RlKGl0ZW0sIG51bGwsIHNlbGYuaGVhZCwgc2VsZik7XG5cbiAgaWYgKCFzZWxmLnRhaWwpIHtcbiAgICBzZWxmLnRhaWwgPSBzZWxmLmhlYWQ7XG4gIH1cblxuICBzZWxmLmxlbmd0aCsrO1xufVxuXG5mdW5jdGlvbiBOb2RlKHZhbHVlLCBwcmV2LCBuZXh0LCBsaXN0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgIHJldHVybiBuZXcgTm9kZSh2YWx1ZSwgcHJldiwgbmV4dCwgbGlzdCk7XG4gIH1cblxuICB0aGlzLmxpc3QgPSBsaXN0O1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgaWYgKHByZXYpIHtcbiAgICBwcmV2Lm5leHQgPSB0aGlzO1xuICAgIHRoaXMucHJldiA9IHByZXY7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgfVxuXG4gIGlmIChuZXh0KSB7XG4gICAgbmV4dC5wcmV2ID0gdGhpcztcbiAgICB0aGlzLm5leHQgPSBuZXh0O1xuICB9IGVsc2Uge1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cbn1cblxuLyoqKi8gfSlcblxuLyoqKioqKi8gXHR9KTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcbi8qKioqKiovIFx0XHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcbi8qKioqKiovIFx0XHRcdFx0KCkgPT4gKG1vZHVsZSk7XG4vKioqKioqLyBcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpXG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0ICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG4vKioqKioqLyBcdFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG4vLyBUaGlzIGVudHJ5IG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBhbiBJSUZFIGJlY2F1c2UgaXQgbmVlZCB0byBiZSBpbiBzdHJpY3QgbW9kZS5cbigoKSA9PiB7XG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xuICBcImNvbm5lY3RUb0RldlRvb2xzXCI6ICgpID0+ICgvKiBiaW5kaW5nICovIGNvbm5lY3RUb0RldlRvb2xzKVxufSk7XG5cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2V2ZW50cy5qc1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbnZhciBFdmVudEVtaXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJsaXN0ZW5lcnNNYXBcIiwgbmV3IE1hcCgpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdmVudEVtaXR0ZXIsIFt7XG4gICAga2V5OiBcImFkZExpc3RlbmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldChldmVudCk7XG5cbiAgICAgIGlmIChsaXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5zZXQoZXZlbnQsIFtsaXN0ZW5lcl0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW1pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KGV2ZW50KTtcblxuICAgICAgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBjbG9uZSBvciB0cnkvY2F0Y2hcbiAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbMF07XG4gICAgICAgICAgbGlzdGVuZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGRpZFRocm93ID0gZmFsc2U7XG4gICAgICAgICAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICAgICAgICB2YXIgY2xvbmVkTGlzdGVuZXJzID0gQXJyYXkuZnJvbShsaXN0ZW5lcnMpO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWRMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBfbGlzdGVuZXIgPSBjbG9uZWRMaXN0ZW5lcnNbaV07XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIF9saXN0ZW5lci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChjYXVnaHRFcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRpZFRocm93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpZFRocm93KSB7XG4gICAgICAgICAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlQWxsTGlzdGVuZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycygpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzTWFwLmNsZWFyKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZUxpc3RlbmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldChldmVudCk7XG5cbiAgICAgIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdmVudEVtaXR0ZXI7XG59KCk7XG5cblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLnRocm90dGxlL2luZGV4LmpzXG52YXIgbG9kYXNoX3Rocm90dGxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xudmFyIGxvZGFzaF90aHJvdHRsZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihsb2Rhc2hfdGhyb3R0bGUpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvY29uc3RhbnRzLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbnZhciBDSFJPTUVfV0VCU1RPUkVfRVhURU5TSU9OX0lEID0gJ2Zta2FkbWFwZ29mYWRvcGxqYmpma2FwZGtvaWVuaWhpJztcbnZhciBJTlRFUk5BTF9FWFRFTlNJT05fSUQgPSAnZG5qbmpnYmZpbGZwaG1vam5taGxpZWhvZ21vamhjbGMnO1xudmFyIExPQ0FMX0VYVEVOU0lPTl9JRCA9ICdpa2lhaG5hcGxkam1kbXBrbWZoamRqaWxvampoZ2NiZic7IC8vIEZsaXAgdGhpcyBmbGFnIHRvIHRydWUgdG8gZW5hYmxlIHZlcmJvc2UgY29uc29sZSBkZWJ1ZyBsb2dnaW5nLlxuXG52YXIgX19ERUJVR19fID0gZmFsc2U7IC8vIEZsaXAgdGhpcyBmbGFnIHRvIHRydWUgdG8gZW5hYmxlIHBlcmZvcm1hbmNlLm1hcmsoKSBhbmQgcGVyZm9ybWFuY2UubWVhc3VyZSgpIHRpbWluZ3MuXG5cbnZhciBfX1BFUkZPUk1BTkNFX1BST0ZJTEVfXyA9IGZhbHNlO1xudmFyIFRSRUVfT1BFUkFUSU9OX0FERCA9IDE7XG52YXIgVFJFRV9PUEVSQVRJT05fUkVNT1ZFID0gMjtcbnZhciBUUkVFX09QRVJBVElPTl9SRU9SREVSX0NISUxEUkVOID0gMztcbnZhciBUUkVFX09QRVJBVElPTl9VUERBVEVfVFJFRV9CQVNFX0RVUkFUSU9OID0gNDtcbnZhciBUUkVFX09QRVJBVElPTl9VUERBVEVfRVJST1JTX09SX1dBUk5JTkdTID0gNTtcbnZhciBUUkVFX09QRVJBVElPTl9SRU1PVkVfUk9PVCA9IDY7XG52YXIgVFJFRV9PUEVSQVRJT05fU0VUX1NVQlRSRUVfTU9ERSA9IDc7XG52YXIgUFJPRklMSU5HX0ZMQUdfQkFTSUNfU1VQUE9SVCA9IDE7XG52YXIgUFJPRklMSU5HX0ZMQUdfVElNRUxJTkVfU1VQUE9SVCA9IDI7XG52YXIgTE9DQUxfU1RPUkFHRV9ERUZBVUxUX1RBQl9LRVkgPSAnUmVhY3Q6OkRldlRvb2xzOjpkZWZhdWx0VGFiJztcbnZhciBjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9DT01QT05FTlRfRklMVEVSX1BSRUZFUkVOQ0VTX0tFWSA9ICdSZWFjdDo6RGV2VG9vbHM6OmNvbXBvbmVudEZpbHRlcnMnO1xudmFyIFNFU1NJT05fU1RPUkFHRV9MQVNUX1NFTEVDVElPTl9LRVkgPSAnUmVhY3Q6OkRldlRvb2xzOjpsYXN0U2VsZWN0aW9uJztcbnZhciBjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9PUEVOX0lOX0VESVRPUl9VUkwgPSAnUmVhY3Q6OkRldlRvb2xzOjpvcGVuSW5FZGl0b3JVcmwnO1xudmFyIExPQ0FMX1NUT1JBR0VfT1BFTl9JTl9FRElUT1JfVVJMX1BSRVNFVCA9ICdSZWFjdDo6RGV2VG9vbHM6Om9wZW5JbkVkaXRvclVybFByZXNldCc7XG52YXIgTE9DQUxfU1RPUkFHRV9QQVJTRV9IT09LX05BTUVTX0tFWSA9ICdSZWFjdDo6RGV2VG9vbHM6OnBhcnNlSG9va05hbWVzJztcbnZhciBTRVNTSU9OX1NUT1JBR0VfUkVDT1JEX0NIQU5HRV9ERVNDUklQVElPTlNfS0VZID0gJ1JlYWN0OjpEZXZUb29sczo6cmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zJztcbnZhciBTRVNTSU9OX1NUT1JBR0VfUkVMT0FEX0FORF9QUk9GSUxFX0tFWSA9ICdSZWFjdDo6RGV2VG9vbHM6OnJlbG9hZEFuZFByb2ZpbGUnO1xudmFyIGNvbnN0YW50c19MT0NBTF9TVE9SQUdFX1NIT1VMRF9CUkVBS19PTl9DT05TT0xFX0VSUk9SUyA9ICdSZWFjdDo6RGV2VG9vbHM6OmJyZWFrT25Db25zb2xlRXJyb3JzJztcbnZhciBMT0NBTF9TVE9SQUdFX0JST1dTRVJfVEhFTUUgPSAnUmVhY3Q6OkRldlRvb2xzOjp0aGVtZSc7XG52YXIgY29uc3RhbnRzX0xPQ0FMX1NUT1JBR0VfU0hPVUxEX0FQUEVORF9DT01QT05FTlRfU1RBQ0tfS0VZID0gJ1JlYWN0OjpEZXZUb29sczo6YXBwZW5kQ29tcG9uZW50U3RhY2snO1xudmFyIGNvbnN0YW50c19MT0NBTF9TVE9SQUdFX1NIT1dfSU5MSU5FX1dBUk5JTkdTX0FORF9FUlJPUlNfS0VZID0gJ1JlYWN0OjpEZXZUb29sczo6c2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzJztcbnZhciBMT0NBTF9TVE9SQUdFX1RSQUNFX1VQREFURVNfRU5BQkxFRF9LRVkgPSAnUmVhY3Q6OkRldlRvb2xzOjp0cmFjZVVwZGF0ZXNFbmFibGVkJztcbnZhciBjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9ISURFX0NPTlNPTEVfTE9HU19JTl9TVFJJQ1RfTU9ERSA9ICdSZWFjdDo6RGV2VG9vbHM6OmhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSc7XG52YXIgTE9DQUxfU1RPUkFHRV9TVVBQT1JUU19QUk9GSUxJTkdfS0VZID0gJ1JlYWN0OjpEZXZUb29sczo6c3VwcG9ydHNQcm9maWxpbmcnO1xudmFyIFBST0ZJTEVSX0VYUE9SVF9WRVJTSU9OID0gNTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL3N0b3JhZ2UuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuZnVuY3Rpb24gc3RvcmFnZV9sb2NhbFN0b3JhZ2VHZXRJdGVtKGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBsb2NhbFN0b3JhZ2VSZW1vdmVJdGVtKGtleSkge1xuICB0cnkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxufVxuZnVuY3Rpb24gc3RvcmFnZV9sb2NhbFN0b3JhZ2VTZXRJdGVtKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxufVxuZnVuY3Rpb24gc2Vzc2lvblN0b3JhZ2VHZXRJdGVtKGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHNlc3Npb25TdG9yYWdlUmVtb3ZlSXRlbShrZXkpIHtcbiAgdHJ5IHtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxufVxuZnVuY3Rpb24gc2Vzc2lvblN0b3JhZ2VTZXRJdGVtKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHt9XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vLi4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2VzbS9pbmRleC5qc1xudmFyIHNpbXBsZUlzRXF1YWwgPSBmdW5jdGlvbiBzaW1wbGVJc0VxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGZ1bmN0aW9uIGVzbShyZXN1bHRGbikge1xuICB2YXIgaXNFcXVhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogc2ltcGxlSXNFcXVhbDtcbiAgdmFyIGxhc3RUaGlzID0gdm9pZCAwO1xuICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgdmFyIGxhc3RSZXN1bHQgPSB2b2lkIDA7XG4gIHZhciBjYWxsZWRPbmNlID0gZmFsc2U7XG5cbiAgdmFyIGlzTmV3QXJnRXF1YWxUb0xhc3QgPSBmdW5jdGlvbiBpc05ld0FyZ0VxdWFsVG9MYXN0KG5ld0FyZywgaW5kZXgpIHtcbiAgICByZXR1cm4gaXNFcXVhbChuZXdBcmcsIGxhc3RBcmdzW2luZGV4XSk7XG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uIHJlc3VsdCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbmV3QXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgbmV3QXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBuZXdBcmdzLmxlbmd0aCA9PT0gbGFzdEFyZ3MubGVuZ3RoICYmIG5ld0FyZ3MuZXZlcnkoaXNOZXdBcmdFcXVhbFRvTGFzdCkpIHtcbiAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cblxuICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICB9O1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhcmUtdmVyc2lvbnMvbGliL2VzbS9pbmRleC5qc1xuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKipcbiAqIENvbXBhcmUgW3NlbXZlcl0oaHR0cHM6Ly9zZW12ZXIub3JnLykgdmVyc2lvbiBzdHJpbmdzIHRvIGZpbmQgZ3JlYXRlciwgZXF1YWwgb3IgbGVzc2VyLlxuICogVGhpcyBsaWJyYXJ5IHN1cHBvcnRzIHRoZSBmdWxsIHNlbXZlciBzcGVjaWZpY2F0aW9uLCBpbmNsdWRpbmcgY29tcGFyaW5nIHZlcnNpb25zIHdpdGggZGlmZmVyZW50IG51bWJlciBvZiBkaWdpdHMgbGlrZSBgMS4wLjBgLCBgMS4wYCwgYDFgLCBhbmQgcHJlLXJlbGVhc2UgdmVyc2lvbnMgbGlrZSBgMS4wLjAtYWxwaGFgLlxuICogQHBhcmFtIHYxIC0gRmlyc3QgdmVyc2lvbiB0byBjb21wYXJlXG4gKiBAcGFyYW0gdjIgLSBTZWNvbmQgdmVyc2lvbiB0byBjb21wYXJlXG4gKiBAcmV0dXJucyBOdW1lcmljIHZhbHVlIGNvbXBhdGlibGUgd2l0aCB0aGUgW0FycmF5LnNvcnQoZm4pIGludGVyZmFjZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29ydCNQYXJhbWV0ZXJzKS5cbiAqL1xudmFyIGNvbXBhcmVWZXJzaW9ucyA9IGZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2MSwgdjIpIHtcbiAgLy8gdmFsaWRhdGUgaW5wdXQgYW5kIHNwbGl0IGludG8gc2VnbWVudHNcbiAgdmFyIG4xID0gdmFsaWRhdGVBbmRQYXJzZSh2MSk7XG4gIHZhciBuMiA9IHZhbGlkYXRlQW5kUGFyc2UodjIpOyAvLyBwb3Agb2ZmIHRoZSBwYXRjaFxuXG4gIHZhciBwMSA9IG4xLnBvcCgpO1xuICB2YXIgcDIgPSBuMi5wb3AoKTsgLy8gdmFsaWRhdGUgbnVtYmVyc1xuXG4gIHZhciByID0gY29tcGFyZVNlZ21lbnRzKG4xLCBuMik7XG4gIGlmIChyICE9PSAwKSByZXR1cm4gcjsgLy8gdmFsaWRhdGUgcHJlLXJlbGVhc2VcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICByZXR1cm4gY29tcGFyZVNlZ21lbnRzKHAxLnNwbGl0KCcuJyksIHAyLnNwbGl0KCcuJykpO1xuICB9IGVsc2UgaWYgKHAxIHx8IHAyKSB7XG4gICAgcmV0dXJuIHAxID8gLTEgOiAxO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59O1xuLyoqXG4gKiBWYWxpZGF0ZSBbc2VtdmVyXShodHRwczovL3NlbXZlci5vcmcvKSB2ZXJzaW9uIHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gVmVyc2lvbiBudW1iZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmVyc2lvbiBudW1iZXIgaXMgYSB2YWxpZCBzZW12ZXIgdmVyc2lvbiBudW1iZXIsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIHZhbGlkYXRlKCcxLjAuMC1yYy4xJyk7IC8vIHJldHVybiB0cnVlXG4gKiB2YWxpZGF0ZSgnMS4wLXJjLjEnKTsgLy8gcmV0dXJuIGZhbHNlXG4gKiB2YWxpZGF0ZSgnZm9vJyk7IC8vIHJldHVybiBmYWxzZVxuICogYGBgXG4gKi9cblxudmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUodmVyc2lvbikge1xuICByZXR1cm4gdHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnICYmIC9eW3ZcXGRdLy50ZXN0KHZlcnNpb24pICYmIHNlbXZlci50ZXN0KHZlcnNpb24pO1xufTtcbi8qKlxuICogQ29tcGFyZSBbc2VtdmVyXShodHRwczovL3NlbXZlci5vcmcvKSB2ZXJzaW9uIHN0cmluZ3MgdXNpbmcgdGhlIHNwZWNpZmllZCBvcGVyYXRvci5cbiAqXG4gKiBAcGFyYW0gdjEgRmlyc3QgdmVyc2lvbiB0byBjb21wYXJlXG4gKiBAcGFyYW0gdjIgU2Vjb25kIHZlcnNpb24gdG8gY29tcGFyZVxuICogQHBhcmFtIG9wZXJhdG9yIEFsbG93ZWQgYXJpdGhtZXRpYyBvcGVyYXRvciB0byB1c2VcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBmaXJzdFZlcnNpb24gYW5kIHRoZSBzZWNvbmRWZXJzaW9uIHNhdGlzZmllcyB0aGUgb3BlcmF0b3IsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGNvbXBhcmUoJzEwLjEuOCcsICcxMC4wLjQnLCAnPicpOyAvLyByZXR1cm4gdHJ1ZVxuICogY29tcGFyZSgnMTAuMC4xJywgJzEwLjAuMScsICc9Jyk7IC8vIHJldHVybiB0cnVlXG4gKiBjb21wYXJlKCcxMC4xLjEnLCAnMTAuMi4yJywgJzwnKTsgLy8gcmV0dXJuIHRydWVcbiAqIGNvbXBhcmUoJzEwLjEuMScsICcxMC4yLjInLCAnPD0nKTsgLy8gcmV0dXJuIHRydWVcbiAqIGNvbXBhcmUoJzEwLjEuMScsICcxMC4yLjInLCAnPj0nKTsgLy8gcmV0dXJuIGZhbHNlXG4gKiBgYGBcbiAqL1xuXG52YXIgY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUodjEsIHYyLCBvcGVyYXRvcikge1xuICAvLyB2YWxpZGF0ZSBpbnB1dCBvcGVyYXRvclxuICBhc3NlcnRWYWxpZE9wZXJhdG9yKG9wZXJhdG9yKTsgLy8gc2luY2UgcmVzdWx0IG9mIGNvbXBhcmVWZXJzaW9ucyBjYW4gb25seSBiZSAtMSBvciAwIG9yIDFcbiAgLy8gYSBzaW1wbGUgbWFwIGNhbiBiZSB1c2VkIHRvIHJlcGxhY2Ugc3dpdGNoXG5cbiAgdmFyIHJlcyA9IGNvbXBhcmVWZXJzaW9ucyh2MSwgdjIpO1xuICByZXR1cm4gb3BlcmF0b3JSZXNNYXBbb3BlcmF0b3JdLmluY2x1ZGVzKHJlcyk7XG59O1xuLyoqXG4gKiBNYXRjaCBbbnBtIHNlbXZlcl0oaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9jbGkvdjYvdXNpbmctbnBtL3NlbXZlcikgdmVyc2lvbiByYW5nZS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiBWZXJzaW9uIG51bWJlciB0byBtYXRjaFxuICogQHBhcmFtIHJhbmdlIFJhbmdlIHBhdHRlcm4gZm9yIHZlcnNpb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIHRoZSByYW5nZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogc2F0aXNmaWVzKCcxLjEuMCcsICdeMS4wLjAnKTsgLy8gcmV0dXJuIHRydWVcbiAqIHNhdGlzZmllcygnMS4xLjAnLCAnfjEuMC4wJyk7IC8vIHJldHVybiBmYWxzZVxuICogYGBgXG4gKi9cblxudmFyIHNhdGlzZmllcyA9IGZ1bmN0aW9uIHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSkge1xuICAvLyBpZiBubyByYW5nZSBvcGVyYXRvciB0aGVuIFwiPVwiXG4gIHZhciBtID0gcmFuZ2UubWF0Y2goL14oWzw+PX5eXSspLyk7XG4gIHZhciBvcCA9IG0gPyBtWzFdIDogJz0nOyAvLyBpZiBndC9sdC9lcSB0aGVuIG9wZXJhdG9yIGNvbXBhcmVcblxuICBpZiAob3AgIT09ICdeJyAmJiBvcCAhPT0gJ34nKSByZXR1cm4gY29tcGFyZSh2ZXJzaW9uLCByYW5nZSwgb3ApOyAvLyBlbHNlIHJhbmdlIG9mIGVpdGhlciBcIn5cIiBvciBcIl5cIiBpcyBhc3N1bWVkXG5cbiAgdmFyIF92YWxpZGF0ZUFuZFBhcnNlID0gdmFsaWRhdGVBbmRQYXJzZSh2ZXJzaW9uKSxcbiAgICAgIF92YWxpZGF0ZUFuZFBhcnNlMiA9IF9zbGljZWRUb0FycmF5KF92YWxpZGF0ZUFuZFBhcnNlLCA1KSxcbiAgICAgIHYxID0gX3ZhbGlkYXRlQW5kUGFyc2UyWzBdLFxuICAgICAgdjIgPSBfdmFsaWRhdGVBbmRQYXJzZTJbMV0sXG4gICAgICB2MyA9IF92YWxpZGF0ZUFuZFBhcnNlMlsyXSxcbiAgICAgIHZwID0gX3ZhbGlkYXRlQW5kUGFyc2UyWzRdO1xuXG4gIHZhciBfdmFsaWRhdGVBbmRQYXJzZTMgPSB2YWxpZGF0ZUFuZFBhcnNlKHJhbmdlKSxcbiAgICAgIF92YWxpZGF0ZUFuZFBhcnNlNCA9IF9zbGljZWRUb0FycmF5KF92YWxpZGF0ZUFuZFBhcnNlMywgNSksXG4gICAgICByMSA9IF92YWxpZGF0ZUFuZFBhcnNlNFswXSxcbiAgICAgIHIyID0gX3ZhbGlkYXRlQW5kUGFyc2U0WzFdLFxuICAgICAgcjMgPSBfdmFsaWRhdGVBbmRQYXJzZTRbMl0sXG4gICAgICBycCA9IF92YWxpZGF0ZUFuZFBhcnNlNFs0XTtcblxuICB2YXIgdiA9IFt2MSwgdjIsIHYzXTtcbiAgdmFyIHIgPSBbcjEsIHIyICE9PSBudWxsICYmIHIyICE9PSB2b2lkIDAgPyByMiA6ICd4JywgcjMgIT09IG51bGwgJiYgcjMgIT09IHZvaWQgMCA/IHIzIDogJ3gnXTsgLy8gdmFsaWRhdGUgcHJlLXJlbGVhc2VcblxuICBpZiAocnApIHtcbiAgICBpZiAoIXZwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNvbXBhcmVTZWdtZW50cyh2LCByKSAhPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjb21wYXJlU2VnbWVudHModnAuc3BsaXQoJy4nKSwgcnAuc3BsaXQoJy4nKSkgPT09IC0xKSByZXR1cm4gZmFsc2U7XG4gIH0gLy8gZmlyc3Qgbm9uLXplcm8gbnVtYmVyXG5cblxuICB2YXIgbm9uWmVybyA9IHIuZmluZEluZGV4KGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIHYgIT09ICcwJztcbiAgfSkgKyAxOyAvLyBwb2ludGVyIHRvIHdoZXJlIHNlZ21lbnRzIGNhbiBiZSA+PVxuXG4gIHZhciBpID0gb3AgPT09ICd+JyA/IDIgOiBub25aZXJvID4gMSA/IG5vblplcm8gOiAxOyAvLyBiZWZvcmUgcG9pbnRlciBtdXN0IGJlIGVxdWFsXG5cbiAgaWYgKGNvbXBhcmVTZWdtZW50cyh2LnNsaWNlKDAsIGkpLCByLnNsaWNlKDAsIGkpKSAhPT0gMCkgcmV0dXJuIGZhbHNlOyAvLyBhZnRlciBwb2ludGVyIG11c3QgYmUgPj1cblxuICBpZiAoY29tcGFyZVNlZ21lbnRzKHYuc2xpY2UoaSksIHIuc2xpY2UoaSkpID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgc2VtdmVyID0gL15bdl5+PD49XSo/KFxcZCspKD86XFwuKFt4Kl18XFxkKykoPzpcXC4oW3gqXXxcXGQrKSg/OlxcLihbeCpdfFxcZCspKT8oPzotKFtcXGRhLXpcXC1dKyg/OlxcLltcXGRhLXpcXC1dKykqKSk/KD86XFwrW1xcZGEtelxcLV0rKD86XFwuW1xcZGEtelxcLV0rKSopPyk/KT8kL2k7XG5cbnZhciB2YWxpZGF0ZUFuZFBhcnNlID0gZnVuY3Rpb24gdmFsaWRhdGVBbmRQYXJzZSh2ZXJzaW9uKSB7XG4gIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IGV4cGVjdGVkIHN0cmluZycpO1xuICB9XG5cbiAgdmFyIG1hdGNoID0gdmVyc2lvbi5tYXRjaChzZW12ZXIpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG5vdCB2YWxpZCBzZW12ZXIgKCdcIi5jb25jYXQodmVyc2lvbiwgXCInIHJlY2VpdmVkKVwiKSk7XG4gIH1cblxuICBtYXRjaC5zaGlmdCgpO1xuICByZXR1cm4gbWF0Y2g7XG59O1xuXG52YXIgaXNXaWxkY2FyZCA9IGZ1bmN0aW9uIGlzV2lsZGNhcmQocykge1xuICByZXR1cm4gcyA9PT0gJyonIHx8IHMgPT09ICd4JyB8fCBzID09PSAnWCc7XG59O1xuXG52YXIgdHJ5UGFyc2UgPSBmdW5jdGlvbiB0cnlQYXJzZSh2KSB7XG4gIHZhciBuID0gcGFyc2VJbnQodiwgMTApO1xuICByZXR1cm4gaXNOYU4obikgPyB2IDogbjtcbn07XG5cbnZhciBmb3JjZVR5cGUgPSBmdW5jdGlvbiBmb3JjZVR5cGUoYSwgYikge1xuICByZXR1cm4gX3R5cGVvZihhKSAhPT0gX3R5cGVvZihiKSA/IFtTdHJpbmcoYSksIFN0cmluZyhiKV0gOiBbYSwgYl07XG59O1xuXG52YXIgY29tcGFyZVN0cmluZ3MgPSBmdW5jdGlvbiBjb21wYXJlU3RyaW5ncyhhLCBiKSB7XG4gIGlmIChpc1dpbGRjYXJkKGEpIHx8IGlzV2lsZGNhcmQoYikpIHJldHVybiAwO1xuXG4gIHZhciBfZm9yY2VUeXBlID0gZm9yY2VUeXBlKHRyeVBhcnNlKGEpLCB0cnlQYXJzZShiKSksXG4gICAgICBfZm9yY2VUeXBlMiA9IF9zbGljZWRUb0FycmF5KF9mb3JjZVR5cGUsIDIpLFxuICAgICAgYXAgPSBfZm9yY2VUeXBlMlswXSxcbiAgICAgIGJwID0gX2ZvcmNlVHlwZTJbMV07XG5cbiAgaWYgKGFwID4gYnApIHJldHVybiAxO1xuICBpZiAoYXAgPCBicCkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn07XG5cbnZhciBjb21wYXJlU2VnbWVudHMgPSBmdW5jdGlvbiBjb21wYXJlU2VnbWVudHMoYSwgYikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7IGkrKykge1xuICAgIHZhciByID0gY29tcGFyZVN0cmluZ3MoYVtpXSB8fCAnMCcsIGJbaV0gfHwgJzAnKTtcbiAgICBpZiAociAhPT0gMCkgcmV0dXJuIHI7XG4gIH1cblxuICByZXR1cm4gMDtcbn07XG5cbnZhciBvcGVyYXRvclJlc01hcCA9IHtcbiAgJz4nOiBbMV0sXG4gICc+PSc6IFswLCAxXSxcbiAgJz0nOiBbMF0sXG4gICc8PSc6IFstMSwgMF0sXG4gICc8JzogWy0xXVxufTtcbnZhciBhbGxvd2VkT3BlcmF0b3JzID0gT2JqZWN0LmtleXMob3BlcmF0b3JSZXNNYXApO1xuXG52YXIgYXNzZXJ0VmFsaWRPcGVyYXRvciA9IGZ1bmN0aW9uIGFzc2VydFZhbGlkT3BlcmF0b3Iob3ApIHtcbiAgaWYgKHR5cGVvZiBvcCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBvcGVyYXRvciB0eXBlLCBleHBlY3RlZCBzdHJpbmcgYnV0IGdvdCBcIi5jb25jYXQoX3R5cGVvZihvcCkpKTtcbiAgfVxuXG4gIGlmIChhbGxvd2VkT3BlcmF0b3JzLmluZGV4T2Yob3ApID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb3BlcmF0b3IsIGV4cGVjdGVkIG9uZSBvZiBcIi5jb25jYXQoYWxsb3dlZE9wZXJhdG9ycy5qb2luKCd8JykpKTtcbiAgfVxufTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi4vLi4vbm9kZV9tb2R1bGVzL2xydS1jYWNoZS9pbmRleC5qc1xudmFyIGxydV9jYWNoZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzMwKTtcbnZhciBscnVfY2FjaGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obHJ1X2NhY2hlKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi4vLi4vYnVpbGQvb3NzLWV4cGVyaW1lbnRhbC9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbnZhciByZWFjdF9pc19wcm9kdWN0aW9uX21pbiA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vc2hhcmVkL1JlYWN0U3ltYm9scy5qc1xuZnVuY3Rpb24gUmVhY3RTeW1ib2xzX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgUmVhY3RTeW1ib2xzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBSZWFjdFN5bWJvbHNfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIFJlYWN0U3ltYm9sc190eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJyk7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xudmFyIFJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zZXJ2ZXJfY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIFJFQUNUX1RSQUNJTkdfTUFSS0VSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC50cmFjaW5nX21hcmtlcicpO1xudmFyIFJFQUNUX1NFUlZFUl9DT05URVhUX0RFRkFVTFRfVkFMVUVfTk9UX0xPQURFRCA9IFN5bWJvbC5mb3IoJ3JlYWN0LmRlZmF1bHRfdmFsdWUnKTtcbnZhciBSRUFDVF9NRU1PX0NBQ0hFX1NFTlRJTkVMID0gU3ltYm9sLmZvcigncmVhY3QubWVtb19jYWNoZV9zZW50aW5lbCcpO1xudmFyIFJFQUNUX1BPU1RQT05FX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3N0cG9uZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCBSZWFjdFN5bWJvbHNfdHlwZW9mKG1heWJlSXRlcmFibGUpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9mcm9udGVuZC90eXBlcy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbi8qKlxuICogV0FSTklORzpcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0eXBlcyB0aGF0IGFyZSBkZXNpZ25lZCBmb3IgUmVhY3QgRGV2VG9vbHMgVUkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYmFja2VuZC5cbiAqIFRoZXkgbWlnaHQgYmUgdXNlZCBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgRGV2VG9vbHMgYmFja2VuZHMuXG4gKiBCZSBtaW5kZnVsIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdoZW4gbWFraW5nIGNoYW5nZXMuXG4gKi9cbi8vIFdBUk5JTkdcbi8vIFRoZSB2YWx1ZXMgYmVsb3cgYXJlIHJlZmVyZW5jZWQgYnkgQ29tcG9uZW50RmlsdGVycyAod2hpY2ggYXJlIHNhdmVkIHZpYSBsb2NhbFN0b3JhZ2UpLlxuLy8gRG8gbm90IGNoYW5nZSB0aGVtIG9yIGl0IHdpbGwgYnJlYWsgcHJldmlvdXNseSBzYXZlZCB1c2VyIGN1c3RvbWl6YXRpb25zLlxuLy8gSWYgbmV3IGVsZW1lbnQgdHlwZXMgYXJlIGFkZGVkLCB1c2UgbmV3IG51bWJlcnMgcmF0aGVyIHRoYW4gcmUtb3JkZXJpbmcgZXhpc3Rpbmcgb25lcy5cbi8vXG4vLyBDaGFuZ2luZyB0aGVzZSB0eXBlcyBpcyBhbHNvIGEgYmFja3dhcmRzIGJyZWFraW5nIGNoYW5nZSBmb3IgdGhlIHN0YW5kYWxvbmUgc2hlbGwsXG4vLyBzaW5jZSB0aGUgZnJvbnRlbmQgYW5kIGJhY2tlbmQgbXVzdCBzaGFyZSB0aGUgc2FtZSB2YWx1ZXMtXG4vLyBhbmQgdGhlIGJhY2tlbmQgaXMgZW1iZWRkZWQgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMgKGxpa2UgUmVhY3QgTmF0aXZlKS5cbnZhciB0eXBlc19FbGVtZW50VHlwZUNsYXNzID0gMTtcbnZhciBFbGVtZW50VHlwZUNvbnRleHQgPSAyO1xudmFyIHR5cGVzX0VsZW1lbnRUeXBlRnVuY3Rpb24gPSA1O1xudmFyIHR5cGVzX0VsZW1lbnRUeXBlRm9yd2FyZFJlZiA9IDY7XG52YXIgRWxlbWVudFR5cGVIb3N0Q29tcG9uZW50ID0gNztcbnZhciB0eXBlc19FbGVtZW50VHlwZU1lbW8gPSA4O1xudmFyIEVsZW1lbnRUeXBlT3RoZXJPclVua25vd24gPSA5O1xudmFyIEVsZW1lbnRUeXBlUHJvZmlsZXIgPSAxMDtcbnZhciBFbGVtZW50VHlwZVJvb3QgPSAxMTtcbnZhciBFbGVtZW50VHlwZVN1c3BlbnNlID0gMTI7XG52YXIgRWxlbWVudFR5cGVTdXNwZW5zZUxpc3QgPSAxMztcbnZhciBFbGVtZW50VHlwZVRyYWNpbmdNYXJrZXIgPSAxNDsgLy8gRGlmZmVyZW50IHR5cGVzIG9mIGVsZW1lbnRzIGRpc3BsYXllZCBpbiB0aGUgRWxlbWVudHMgdHJlZS5cbi8vIFRoZXNlIHR5cGVzIG1heSBiZSB1c2VkIHRvIHZpc3VhbGx5IGRpc3Rpbmd1aXNoIHR5cGVzLFxuLy8gb3IgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBmdW5jdGlvbmFsaXR5LlxuXG4vLyBXQVJOSU5HXG4vLyBUaGUgdmFsdWVzIGJlbG93IGFyZSByZWZlcmVuY2VkIGJ5IENvbXBvbmVudEZpbHRlcnMgKHdoaWNoIGFyZSBzYXZlZCB2aWEgbG9jYWxTdG9yYWdlKS5cbi8vIERvIG5vdCBjaGFuZ2UgdGhlbSBvciBpdCB3aWxsIGJyZWFrIHByZXZpb3VzbHkgc2F2ZWQgdXNlciBjdXN0b21pemF0aW9ucy5cbi8vIElmIG5ldyBmaWx0ZXIgdHlwZXMgYXJlIGFkZGVkLCB1c2UgbmV3IG51bWJlcnMgcmF0aGVyIHRoYW4gcmUtb3JkZXJpbmcgZXhpc3Rpbmcgb25lcy5cbnZhciBDb21wb25lbnRGaWx0ZXJFbGVtZW50VHlwZSA9IDE7XG52YXIgQ29tcG9uZW50RmlsdGVyRGlzcGxheU5hbWUgPSAyO1xudmFyIENvbXBvbmVudEZpbHRlckxvY2F0aW9uID0gMztcbnZhciBDb21wb25lbnRGaWx0ZXJIT0MgPSA0O1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBFYWNoIGVsZW1lbnQgb24gdGhlIGZyb250ZW5kIGNvcnJlc3BvbmRzIHRvIGEgRmliZXIgb24gdGhlIGJhY2tlbmQuXG4vLyBTb21lIG9mIGl0cyBpbmZvcm1hdGlvbiAoZS5nLiBpZCwgdHlwZSwgZGlzcGxheU5hbWUpIGNvbWUgZnJvbSB0aGUgYmFja2VuZC5cbi8vIE90aGVyIGJpdHMgKGUuZy4gd2VpZ2h0IGFuZCBkZXB0aCkgYXJlIGNvbXB1dGVkIG9uIHRoZSBmcm9udGVuZCBmb3Igd2luZG93aW5nIGFuZCBkaXNwbGF5IHB1cnBvc2VzLlxuLy8gRWxlbWVudHMgYXJlIHVwZGF0ZWQgb24gYSBwdXNoIGJhc2lz4oCTIG1lYW5pbmcgdGhlIGJhY2tlbmQgcHVzaGVzIHVwZGF0ZXMgdG8gdGhlIGZyb250ZW5kIHdoZW4gbmVlZGVkLlxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvaXNBcnJheS5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IHNyY19pc0FycmF5ID0gKGlzQXJyYXkpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvdXRpbHMuanNcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyB1dGlsc19kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiB1dGlsc19kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIHV0aWxzX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgdXRpbHNfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IHV0aWxzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiB1dGlsc190eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgdXRpbHNfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIHV0aWxzX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gdXRpbHNfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIHV0aWxzX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gdXRpbHNfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIHV0aWxzX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuXG5cblxuXG5cblxuLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxudmFyIHV0aWxzX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBjYWNoZWREaXNwbGF5TmFtZXMgPSBuZXcgV2Vha01hcCgpOyAvLyBPbiBsYXJnZSB0cmVlcywgZW5jb2RpbmcgdGFrZXMgc2lnbmlmaWNhbnQgdGltZS5cbi8vIFRyeSB0byByZXVzZSB0aGUgYWxyZWFkeSBlbmNvZGVkIHN0cmluZ3MuXG5cbnZhciBlbmNvZGVkU3RyaW5nQ2FjaGUgPSBuZXcgKGxydV9jYWNoZV9kZWZhdWx0KCkpKHtcbiAgbWF4OiAxMDAwXG59KTtcbmZ1bmN0aW9uIGFscGhhU29ydEtleXMoYSwgYikge1xuICBpZiAoYS50b1N0cmluZygpID4gYi50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoYi50b1N0cmluZygpID4gYS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5mdW5jdGlvbiBnZXRBbGxFbnVtZXJhYmxlS2V5cyhvYmopIHtcbiAgdmFyIGtleXMgPSBuZXcgU2V0KCk7XG4gIHZhciBjdXJyZW50ID0gb2JqO1xuXG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgIHZhciBjdXJyZW50S2V5cyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmtleXMoY3VycmVudCkpLCBfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjdXJyZW50KSkpO1xuICAgIHZhciBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGN1cnJlbnQpO1xuICAgIGN1cnJlbnRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IGtleSBjYW4gYmUgYSBTeW1ib2wgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2dldE93blByb3BlcnR5RGVzY3JpcHRvclxuICAgICAgaWYgKGRlc2NyaXB0b3JzW2tleV0uZW51bWVyYWJsZSkge1xuICAgICAgICBrZXlzLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGN1cnJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudCk7XG4gIH07XG5cbiAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkge1xuICAgIF9sb29wKCk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8gTWlycm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzdjMjFiZjcyYWNlNzcwOTRmZDE5MTBjYzM1MGE1NDgyODdlZjgzNTAvcGFja2FnZXMvc2hhcmVkL2dldENvbXBvbmVudE5hbWUuanMjTDI3LUwzN1xuXG5mdW5jdGlvbiBnZXRXcmFwcGVkRGlzcGxheU5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lLCBmYWxsYmFja05hbWUpIHtcbiAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlID09PSBudWxsIHx8IG91dGVyVHlwZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xuICByZXR1cm4gZGlzcGxheU5hbWUgfHwgXCJcIi5jb25jYXQod3JhcHBlck5hbWUsIFwiKFwiKS5jb25jYXQoZ2V0RGlzcGxheU5hbWUoaW5uZXJUeXBlLCBmYWxsYmFja05hbWUpLCBcIilcIik7XG59XG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZSh0eXBlKSB7XG4gIHZhciBmYWxsYmFja05hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdBbm9ueW1vdXMnO1xuICB2YXIgbmFtZUZyb21DYWNoZSA9IGNhY2hlZERpc3BsYXlOYW1lcy5nZXQodHlwZSk7XG5cbiAgaWYgKG5hbWVGcm9tQ2FjaGUgIT0gbnVsbCkge1xuICAgIHJldHVybiBuYW1lRnJvbUNhY2hlO1xuICB9XG5cbiAgdmFyIGRpc3BsYXlOYW1lID0gZmFsbGJhY2tOYW1lOyAvLyBUaGUgZGlzcGxheU5hbWUgcHJvcGVydHkgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBzdHJpbmcuXG4gIC8vIEl0J3Mgb25seSBzYWZlIHRvIHVzZSBmb3Igb3VyIHB1cnBvc2VzIGlmIGl0J3MgYSBzdHJpbmcuXG4gIC8vIGdpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtZGV2dG9vbHMvaXNzdWVzLzgwM1xuXG4gIGlmICh0eXBlb2YgdHlwZS5kaXNwbGF5TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBkaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUubmFtZSA9PT0gJ3N0cmluZycgJiYgdHlwZS5uYW1lICE9PSAnJykge1xuICAgIGRpc3BsYXlOYW1lID0gdHlwZS5uYW1lO1xuICB9XG5cbiAgY2FjaGVkRGlzcGxheU5hbWVzLnNldCh0eXBlLCBkaXNwbGF5TmFtZSk7XG4gIHJldHVybiBkaXNwbGF5TmFtZTtcbn1cbnZhciB1aWRDb3VudGVyID0gMDtcbmZ1bmN0aW9uIGdldFVJRCgpIHtcbiAgcmV0dXJuICsrdWlkQ291bnRlcjtcbn1cbmZ1bmN0aW9uIHV0ZkRlY29kZVN0cmluZ1dpdGhSYW5nZXMoYXJyYXksIGxlZnQsIHJpZ2h0KSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBmb3IgKHZhciBpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKSB7XG4gICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGFycmF5W2ldKTtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludChjaGFyQ29kZTEsIGNoYXJDb2RlMikge1xuICByZXR1cm4gKChjaGFyQ29kZTEgJiAweDNmZikgPDwgMTApICsgKGNoYXJDb2RlMiAmIDB4M2ZmKSArIDB4MTAwMDA7XG59IC8vIENyZWRpdCBmb3IgdGhpcyBlbmNvZGluZyBhcHByb2FjaCBnb2VzIHRvIFRpbSBEb3duOlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDg3NzMyNi9ob3ctY2FuLWktdGVsbC1pZi1hLXN0cmluZy1jb250YWlucy1tdWx0aWJ5dGUtY2hhcmFjdGVycy1pbi1qYXZhc2NyaXB0XG5cblxuZnVuY3Rpb24gdXRmRW5jb2RlU3RyaW5nKHN0cmluZykge1xuICB2YXIgY2FjaGVkID0gZW5jb2RlZFN0cmluZ0NhY2hlLmdldChzdHJpbmcpO1xuXG4gIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICB2YXIgZW5jb2RlZCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjaGFyQ29kZTtcblxuICB3aGlsZSAoaSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICBjaGFyQ29kZSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOyAvLyBIYW5kbGUgbXVsdGlieXRlIHVuaWNvZGUgY2hhcmFjdGVycyAobGlrZSBlbW9qaSkuXG5cbiAgICBpZiAoKGNoYXJDb2RlICYgMHhmODAwKSA9PT0gMHhkODAwKSB7XG4gICAgICBlbmNvZGVkLnB1c2goc3Vycm9nYXRlUGFpclRvQ29kZVBvaW50KGNoYXJDb2RlLCBzdHJpbmcuY2hhckNvZGVBdCgrK2kpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZWQucHVzaChjaGFyQ29kZSk7XG4gICAgfVxuXG4gICAgKytpO1xuICB9XG5cbiAgZW5jb2RlZFN0cmluZ0NhY2hlLnNldChzdHJpbmcsIGVuY29kZWQpO1xuICByZXR1cm4gZW5jb2RlZDtcbn1cbmZ1bmN0aW9uIHByaW50T3BlcmF0aW9uc0FycmF5KG9wZXJhdGlvbnMpIHtcbiAgLy8gVGhlIGZpcnN0IHR3byB2YWx1ZXMgYXJlIGFsd2F5cyByZW5kZXJlcklEIGFuZCByb290SURcbiAgdmFyIHJlbmRlcmVySUQgPSBvcGVyYXRpb25zWzBdO1xuICB2YXIgcm9vdElEID0gb3BlcmF0aW9uc1sxXTtcbiAgdmFyIGxvZ3MgPSBbXCJvcGVyYXRpb25zIGZvciByZW5kZXJlcjpcIi5jb25jYXQocmVuZGVyZXJJRCwgXCIgYW5kIHJvb3Q6XCIpLmNvbmNhdChyb290SUQpXTtcbiAgdmFyIGkgPSAyOyAvLyBSZWFzc2VtYmxlIHRoZSBzdHJpbmcgdGFibGUuXG5cbiAgdmFyIHN0cmluZ1RhYmxlID0gW251bGwgLy8gSUQgPSAwIGNvcnJlc3BvbmRzIHRvIHRoZSBudWxsIHN0cmluZy5cbiAgXTtcbiAgdmFyIHN0cmluZ1RhYmxlU2l6ZSA9IG9wZXJhdGlvbnNbaSsrXTtcbiAgdmFyIHN0cmluZ1RhYmxlRW5kID0gaSArIHN0cmluZ1RhYmxlU2l6ZTtcblxuICB3aGlsZSAoaSA8IHN0cmluZ1RhYmxlRW5kKSB7XG4gICAgdmFyIG5leHRMZW5ndGggPSBvcGVyYXRpb25zW2krK107XG4gICAgdmFyIG5leHRTdHJpbmcgPSB1dGZEZWNvZGVTdHJpbmdXaXRoUmFuZ2VzKG9wZXJhdGlvbnMsIGksIGkgKyBuZXh0TGVuZ3RoIC0gMSk7XG4gICAgc3RyaW5nVGFibGUucHVzaChuZXh0U3RyaW5nKTtcbiAgICBpICs9IG5leHRMZW5ndGg7XG4gIH1cblxuICB3aGlsZSAoaSA8IG9wZXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgdmFyIG9wZXJhdGlvbiA9IG9wZXJhdGlvbnNbaV07XG5cbiAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgY2FzZSBUUkVFX09QRVJBVElPTl9BREQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2lkID0gb3BlcmF0aW9uc1tpICsgMV07XG4gICAgICAgICAgdmFyIHR5cGUgPSBvcGVyYXRpb25zW2kgKyAyXTtcbiAgICAgICAgICBpICs9IDM7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGVSb290KSB7XG4gICAgICAgICAgICBsb2dzLnB1c2goXCJBZGQgbmV3IHJvb3Qgbm9kZSBcIi5jb25jYXQoX2lkKSk7XG4gICAgICAgICAgICBpKys7IC8vIGlzU3RyaWN0TW9kZUNvbXBsaWFudFxuXG4gICAgICAgICAgICBpKys7IC8vIHN1cHBvcnRzUHJvZmlsaW5nXG5cbiAgICAgICAgICAgIGkrKzsgLy8gc3VwcG9ydHNTdHJpY3RNb2RlXG5cbiAgICAgICAgICAgIGkrKzsgLy8gaGFzT3duZXJNZXRhZGF0YVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50SUQgPSBvcGVyYXRpb25zW2ldO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgaSsrOyAvLyBvd25lcklEXG5cbiAgICAgICAgICAgIHZhciBkaXNwbGF5TmFtZVN0cmluZ0lEID0gb3BlcmF0aW9uc1tpXTtcbiAgICAgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHN0cmluZ1RhYmxlW2Rpc3BsYXlOYW1lU3RyaW5nSURdO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgaSsrOyAvLyBrZXlcblxuICAgICAgICAgICAgbG9ncy5wdXNoKFwiQWRkIG5vZGUgXCIuY29uY2F0KF9pZCwgXCIgKFwiKS5jb25jYXQoZGlzcGxheU5hbWUgfHwgJ251bGwnLCBcIikgYXMgY2hpbGQgb2YgXCIpLmNvbmNhdChwYXJlbnRJRCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVFJFRV9PUEVSQVRJT05fUkVNT1ZFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHJlbW92ZUxlbmd0aCA9IG9wZXJhdGlvbnNbaSArIDFdO1xuICAgICAgICAgIGkgKz0gMjtcblxuICAgICAgICAgIGZvciAodmFyIHJlbW92ZUluZGV4ID0gMDsgcmVtb3ZlSW5kZXggPCByZW1vdmVMZW5ndGg7IHJlbW92ZUluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBfaWQyID0gb3BlcmF0aW9uc1tpXTtcbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgIGxvZ3MucHVzaChcIlJlbW92ZSBub2RlIFwiLmNvbmNhdChfaWQyKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUUkVFX09QRVJBVElPTl9SRU1PVkVfUk9PVDpcbiAgICAgICAge1xuICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICBsb2dzLnB1c2goXCJSZW1vdmUgcm9vdCBcIi5jb25jYXQocm9vdElEKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUUkVFX09QRVJBVElPTl9TRVRfU1VCVFJFRV9NT0RFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9pZDMgPSBvcGVyYXRpb25zW2kgKyAxXTtcbiAgICAgICAgICB2YXIgbW9kZSA9IG9wZXJhdGlvbnNbaSArIDFdO1xuICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICBsb2dzLnB1c2goXCJNb2RlIFwiLmNvbmNhdChtb2RlLCBcIiBzZXQgZm9yIHN1YnRyZWUgd2l0aCByb290IFwiKS5jb25jYXQoX2lkMykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVFJFRV9PUEVSQVRJT05fUkVPUkRFUl9DSElMRFJFTjpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfaWQ0ID0gb3BlcmF0aW9uc1tpICsgMV07XG4gICAgICAgICAgdmFyIG51bUNoaWxkcmVuID0gb3BlcmF0aW9uc1tpICsgMl07XG4gICAgICAgICAgaSArPSAzO1xuICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG9wZXJhdGlvbnMuc2xpY2UoaSwgaSArIG51bUNoaWxkcmVuKTtcbiAgICAgICAgICBpICs9IG51bUNoaWxkcmVuO1xuICAgICAgICAgIGxvZ3MucHVzaChcIlJlLW9yZGVyIG5vZGUgXCIuY29uY2F0KF9pZDQsIFwiIGNoaWxkcmVuIFwiKS5jb25jYXQoY2hpbGRyZW4uam9pbignLCcpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUUkVFX09QRVJBVElPTl9VUERBVEVfVFJFRV9CQVNFX0RVUkFUSU9OOlxuICAgICAgICAvLyBCYXNlIGR1cmF0aW9uIHVwZGF0ZXMgYXJlIG9ubHkgc2VudCB3aGlsZSBwcm9maWxpbmcgaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICAgIC8vIFdlIGNhbiBpZ25vcmUgdGhlbSBhdCB0aGlzIHBvaW50LlxuICAgICAgICAvLyBUaGUgcHJvZmlsZXIgVUkgdXNlcyB0aGVtIGxhemlseSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgdHJlZS5cbiAgICAgICAgaSArPSAzO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUUkVFX09QRVJBVElPTl9VUERBVEVfRVJST1JTX09SX1dBUk5JTkdTOlxuICAgICAgICB2YXIgaWQgPSBvcGVyYXRpb25zW2kgKyAxXTtcbiAgICAgICAgdmFyIG51bUVycm9ycyA9IG9wZXJhdGlvbnNbaSArIDJdO1xuICAgICAgICB2YXIgbnVtV2FybmluZ3MgPSBvcGVyYXRpb25zW2kgKyAzXTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICBsb2dzLnB1c2goXCJOb2RlIFwiLmNvbmNhdChpZCwgXCIgaGFzIFwiKS5jb25jYXQobnVtRXJyb3JzLCBcIiBlcnJvcnMgYW5kIFwiKS5jb25jYXQobnVtV2FybmluZ3MsIFwiIHdhcm5pbmdzXCIpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFwiVW5zdXBwb3J0ZWQgQnJpZGdlIG9wZXJhdGlvbiBcXFwiXCIuY29uY2F0KG9wZXJhdGlvbiwgXCJcXFwiXCIpKTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZyhsb2dzLmpvaW4oJ1xcbiAgJykpO1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbXBvbmVudEZpbHRlcnMoKSB7XG4gIHJldHVybiBbe1xuICAgIHR5cGU6IENvbXBvbmVudEZpbHRlckVsZW1lbnRUeXBlLFxuICAgIHZhbHVlOiBFbGVtZW50VHlwZUhvc3RDb21wb25lbnQsXG4gICAgaXNFbmFibGVkOiB0cnVlXG4gIH1dO1xufVxuZnVuY3Rpb24gZ2V0U2F2ZWRDb21wb25lbnRGaWx0ZXJzKCkge1xuICB0cnkge1xuICAgIHZhciByYXcgPSBsb2NhbFN0b3JhZ2VHZXRJdGVtKExPQ0FMX1NUT1JBR0VfQ09NUE9ORU5UX0ZJTFRFUl9QUkVGRVJFTkNFU19LRVkpO1xuXG4gICAgaWYgKHJhdyAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgcmV0dXJuIGdldERlZmF1bHRDb21wb25lbnRGaWx0ZXJzKCk7XG59XG5mdW5jdGlvbiBzZXRTYXZlZENvbXBvbmVudEZpbHRlcnMoY29tcG9uZW50RmlsdGVycykge1xuICBsb2NhbFN0b3JhZ2VTZXRJdGVtKExPQ0FMX1NUT1JBR0VfQ09NUE9ORU5UX0ZJTFRFUl9QUkVGRVJFTkNFU19LRVksIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudEZpbHRlcnMpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHMpIHtcbiAgaWYgKHMgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHMgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FzdEJvb2wodikge1xuICBpZiAodiA9PT0gdHJ1ZSB8fCB2ID09PSBmYWxzZSkge1xuICAgIHJldHVybiB2O1xuICB9XG59XG5mdW5jdGlvbiBjYXN0QnJvd3NlclRoZW1lKHYpIHtcbiAgaWYgKHYgPT09ICdsaWdodCcgfHwgdiA9PT0gJ2RhcmsnIHx8IHYgPT09ICdhdXRvJykge1xuICAgIHJldHVybiB2O1xuICB9XG59XG5mdW5jdGlvbiBnZXRBcHBlbmRDb21wb25lbnRTdGFjaygpIHtcbiAgdmFyIF9wYXJzZUJvb2w7XG5cbiAgdmFyIHJhdyA9IGxvY2FsU3RvcmFnZUdldEl0ZW0oTE9DQUxfU1RPUkFHRV9TSE9VTERfQVBQRU5EX0NPTVBPTkVOVF9TVEFDS19LRVkpO1xuICByZXR1cm4gKF9wYXJzZUJvb2wgPSBwYXJzZUJvb2wocmF3KSkgIT09IG51bGwgJiYgX3BhcnNlQm9vbCAhPT0gdm9pZCAwID8gX3BhcnNlQm9vbCA6IHRydWU7XG59XG5mdW5jdGlvbiBnZXRCcmVha09uQ29uc29sZUVycm9ycygpIHtcbiAgdmFyIF9wYXJzZUJvb2wyO1xuXG4gIHZhciByYXcgPSBsb2NhbFN0b3JhZ2VHZXRJdGVtKExPQ0FMX1NUT1JBR0VfU0hPVUxEX0JSRUFLX09OX0NPTlNPTEVfRVJST1JTKTtcbiAgcmV0dXJuIChfcGFyc2VCb29sMiA9IHBhcnNlQm9vbChyYXcpKSAhPT0gbnVsbCAmJiBfcGFyc2VCb29sMiAhPT0gdm9pZCAwID8gX3BhcnNlQm9vbDIgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldEhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSgpIHtcbiAgdmFyIF9wYXJzZUJvb2wzO1xuXG4gIHZhciByYXcgPSBsb2NhbFN0b3JhZ2VHZXRJdGVtKExPQ0FMX1NUT1JBR0VfSElERV9DT05TT0xFX0xPR1NfSU5fU1RSSUNUX01PREUpO1xuICByZXR1cm4gKF9wYXJzZUJvb2wzID0gcGFyc2VCb29sKHJhdykpICE9PSBudWxsICYmIF9wYXJzZUJvb2wzICE9PSB2b2lkIDAgPyBfcGFyc2VCb29sMyA6IGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0U2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzKCkge1xuICB2YXIgX3BhcnNlQm9vbDQ7XG5cbiAgdmFyIHJhdyA9IGxvY2FsU3RvcmFnZUdldEl0ZW0oTE9DQUxfU1RPUkFHRV9TSE9XX0lOTElORV9XQVJOSU5HU19BTkRfRVJST1JTX0tFWSk7XG4gIHJldHVybiAoX3BhcnNlQm9vbDQgPSBwYXJzZUJvb2wocmF3KSkgIT09IG51bGwgJiYgX3BhcnNlQm9vbDQgIT09IHZvaWQgMCA/IF9wYXJzZUJvb2w0IDogdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRPcGVuSW5FZGl0b3JVUkwoKSB7XG4gIHJldHVybiB0eXBlb2YgcHJvY2Vzcy5lbnYuRURJVE9SX1VSTCA9PT0gJ3N0cmluZycgPyBwcm9jZXNzLmVudi5FRElUT1JfVVJMIDogJyc7XG59XG5mdW5jdGlvbiBnZXRPcGVuSW5FZGl0b3JVUkwoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHJhdyA9IGxvY2FsU3RvcmFnZUdldEl0ZW0oTE9DQUxfU1RPUkFHRV9PUEVOX0lOX0VESVRPUl9VUkwpO1xuXG4gICAgaWYgKHJhdyAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgcmV0dXJuIGdldERlZmF1bHRPcGVuSW5FZGl0b3JVUkwoKTtcbn1cbmZ1bmN0aW9uIHBhcnNlRWxlbWVudERpc3BsYXlOYW1lRnJvbUJhY2tlbmQoZGlzcGxheU5hbWUsIHR5cGUpIHtcbiAgaWYgKGRpc3BsYXlOYW1lID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdHRlZERpc3BsYXlOYW1lOiBudWxsLFxuICAgICAgaG9jRGlzcGxheU5hbWVzOiBudWxsLFxuICAgICAgY29tcGlsZWRXaXRoRm9yZ2V0OiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBpZiAoZGlzcGxheU5hbWUuc3RhcnRzV2l0aCgnRm9yZ2V0KCcpKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lV2l0aG91dEZvcmdldFdyYXBwZXIgPSBkaXNwbGF5TmFtZS5zbGljZSg3LCBkaXNwbGF5TmFtZS5sZW5ndGggLSAxKTtcblxuICAgIHZhciBfcGFyc2VFbGVtZW50RGlzcGxheU4gPSBwYXJzZUVsZW1lbnREaXNwbGF5TmFtZUZyb21CYWNrZW5kKGRpc3BsYXlOYW1lV2l0aG91dEZvcmdldFdyYXBwZXIsIHR5cGUpLFxuICAgICAgICBmb3JtYXR0ZWREaXNwbGF5TmFtZSA9IF9wYXJzZUVsZW1lbnREaXNwbGF5Ti5mb3JtYXR0ZWREaXNwbGF5TmFtZSxcbiAgICAgICAgX2hvY0Rpc3BsYXlOYW1lcyA9IF9wYXJzZUVsZW1lbnREaXNwbGF5Ti5ob2NEaXNwbGF5TmFtZXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0dGVkRGlzcGxheU5hbWU6IGZvcm1hdHRlZERpc3BsYXlOYW1lLFxuICAgICAgaG9jRGlzcGxheU5hbWVzOiBfaG9jRGlzcGxheU5hbWVzLFxuICAgICAgY29tcGlsZWRXaXRoRm9yZ2V0OiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBob2NEaXNwbGF5TmFtZXMgPSBudWxsO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRWxlbWVudFR5cGVDbGFzczpcbiAgICBjYXNlIEVsZW1lbnRUeXBlRm9yd2FyZFJlZjpcbiAgICBjYXNlIEVsZW1lbnRUeXBlRnVuY3Rpb246XG4gICAgY2FzZSBFbGVtZW50VHlwZU1lbW86XG4gICAgICBpZiAoZGlzcGxheU5hbWUuaW5kZXhPZignKCcpID49IDApIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBkaXNwbGF5TmFtZS5tYXRjaCgvW14oKV0rL2cpO1xuXG4gICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IG1hdGNoZXMucG9wKCk7XG4gICAgICAgICAgaG9jRGlzcGxheU5hbWVzID0gbWF0Y2hlcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0dGVkRGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgIGhvY0Rpc3BsYXlOYW1lczogaG9jRGlzcGxheU5hbWVzLFxuICAgIGNvbXBpbGVkV2l0aEZvcmdldDogZmFsc2VcbiAgfTtcbn0gLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5cbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiB1dGlsc19nZXRJbk9iamVjdChvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChyZWR1Y2VkLCBhdHRyKSB7XG4gICAgaWYgKHJlZHVjZWQpIHtcbiAgICAgIGlmICh1dGlsc19oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZHVjZWQsIGF0dHIpKSB7XG4gICAgICAgIHJldHVybiByZWR1Y2VkW2F0dHJdO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlZHVjZWRbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBDb252ZXJ0IGl0ZXJhYmxlIHRvIGFycmF5IGFuZCByZXR1cm4gYXJyYXlbaW5kZXhdXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRSSUNLWVxuICAgICAgICAvLyBEb24ndCB1c2UgWy4uLnNwcmVhZF0gc3ludGF4IGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIC8vIFRoaXMgcHJvamVjdCB1c2VzIEBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXNwcmVhZCBpbiBcImxvb3NlXCIgbW9kZSB3aGljaCBvbmx5IHdvcmtzIHdpdGggQXJyYXkgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlciB0eXBlcyAoZS5nLiB0eXBlZCBhcnJheXMsIFNldHMpIHdpbGwgbm90IHNwcmVhZCBjb3JyZWN0bHkuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHJlZHVjZWQpW2F0dHJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9LCBvYmplY3QpO1xufVxuZnVuY3Rpb24gZGVsZXRlUGF0aEluT2JqZWN0KG9iamVjdCwgcGF0aCkge1xuICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gIHZhciBsYXN0ID0gcGF0aFtsZW5ndGggLSAxXTtcblxuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICB2YXIgcGFyZW50ID0gdXRpbHNfZ2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLnNsaWNlKDAsIGxlbmd0aCAtIDEpKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGlmIChzcmNfaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudC5zcGxpY2UobGFzdCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcGFyZW50W2xhc3RdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVuYW1lUGF0aEluT2JqZWN0KG9iamVjdCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICB2YXIgbGVuZ3RoID0gb2xkUGF0aC5sZW5ndGg7XG5cbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgdmFyIHBhcmVudCA9IHV0aWxzX2dldEluT2JqZWN0KG9iamVjdCwgb2xkUGF0aC5zbGljZSgwLCBsZW5ndGggLSAxKSk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB2YXIgbGFzdE9sZCA9IG9sZFBhdGhbbGVuZ3RoIC0gMV07XG4gICAgICB2YXIgbGFzdE5ldyA9IG5ld1BhdGhbbGVuZ3RoIC0gMV07XG4gICAgICBwYXJlbnRbbGFzdE5ld10gPSBwYXJlbnRbbGFzdE9sZF07XG5cbiAgICAgIGlmIChzcmNfaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudC5zcGxpY2UobGFzdE9sZCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcGFyZW50W2xhc3RPbGRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdXRpbHNfc2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gIHZhciBsYXN0ID0gcGF0aFtsZW5ndGggLSAxXTtcblxuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICB2YXIgcGFyZW50ID0gdXRpbHNfZ2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLnNsaWNlKDAsIGxlbmd0aCAtIDEpKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudFtsYXN0XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCBhIGVuaGFuY2VkL2FydGlmaWNpYWwgdHlwZSBzdHJpbmcgYmFzZWQgb24gdGhlIG9iamVjdCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBnZXREYXRhVHlwZShkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfSBlbHNlIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpZiAoKDAscmVhY3RfaXNfcHJvZHVjdGlvbl9taW4vKiBpc0VsZW1lbnQgKi8ua0spKGRhdGEpKSB7XG4gICAgcmV0dXJuICdyZWFjdF9lbGVtZW50JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiAnaHRtbF9lbGVtZW50JztcbiAgfVxuXG4gIHZhciB0eXBlID0gdXRpbHNfdHlwZW9mKGRhdGEpO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICByZXR1cm4gJ2JpZ2ludCc7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiAnYm9vbGVhbic7XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4gJ2Z1bmN0aW9uJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiAnbmFuJztcbiAgICAgIH0gZWxzZSBpZiAoIU51bWJlci5pc0Zpbml0ZShkYXRhKSkge1xuICAgICAgICByZXR1cm4gJ2luZmluaXR5JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpZiAoc3JjX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgICByZXR1cm4gdXRpbHNfaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLmNvbnN0cnVjdG9yLCAnQllURVNfUEVSX0VMRU1FTlQnKSA/ICd0eXBlZF9hcnJheScgOiAnZGF0YV92aWV3JztcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5jb25zdHJ1Y3RvciAmJiBkYXRhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicpIHtcbiAgICAgICAgLy8gSEFDSyBUaGlzIEFycmF5QnVmZmVyIGNoZWNrIGlzIGdyb3NzOyBpcyB0aGVyZSBhIGJldHRlciB3YXk/XG4gICAgICAgIC8vIFdlIGNvdWxkIHRyeSB0byBjcmVhdGUgYSBuZXcgRGF0YVZpZXcgd2l0aCB0aGUgdmFsdWUuXG4gICAgICAgIC8vIElmIGl0IGRvZXNuJ3QgZXJyb3IsIHdlIGtub3cgaXQncyBhbiBBcnJheUJ1ZmZlcixcbiAgICAgICAgLy8gYnV0IHRoaXMgc2VlbXMga2luZCBvZiBhd2t3YXJkIGFuZCBleHBlbnNpdmUuXG4gICAgICAgIHJldHVybiAnYXJyYXlfYnVmZmVyJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBkYXRhW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICAgICAgICBpZiAoIWl0ZXJhdG9yKSB7Ly8gUHJveGllcyBtaWdodCBicmVhayBhc3N1bXB0b2lucyBhYm91dCBpdGVyYXRvcnMuXG4gICAgICAgICAgLy8gU2VlIGdpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIxNjU0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yID09PSBkYXRhID8gJ29wYXF1ZV9pdGVyYXRvcicgOiAnaXRlcmF0b3InO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuY29uc3RydWN0b3IgJiYgZGF0YS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJykge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICAgIHZhciB0b1N0cmluZ1ZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpO1xuXG4gICAgICAgIGlmICh0b1N0cmluZ1ZhbHVlID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXScpIHtcbiAgICAgICAgICByZXR1cm4gJ2h0bWxfYWxsX2NvbGxlY3Rpb24nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgICAgICByZXR1cm4gJ2NsYXNzX2luc3RhbmNlJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiAnc3RyaW5nJztcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG5cbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgaWYgKCAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICdbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXScpIHtcbiAgICAgICAgcmV0dXJuICdodG1sX2FsbF9jb2xsZWN0aW9uJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lRm9yUmVhY3RFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGVsZW1lbnRUeXBlID0gKDAscmVhY3RfaXNfcHJvZHVjdGlvbl9taW4vKiB0eXBlT2YgKi8ua00pKGVsZW1lbnQpO1xuXG4gIHN3aXRjaCAoZWxlbWVudFR5cGUpIHtcbiAgICBjYXNlIHJlYWN0X2lzX3Byb2R1Y3Rpb25fbWluLyogQ29udGV4dENvbnN1bWVyICovLkFJOlxuICAgICAgcmV0dXJuICdDb250ZXh0Q29uc3VtZXInO1xuXG4gICAgY2FzZSByZWFjdF9pc19wcm9kdWN0aW9uX21pbi8qIENvbnRleHRQcm92aWRlciAqLy5IUTpcbiAgICAgIHJldHVybiAnQ29udGV4dFByb3ZpZGVyJztcblxuICAgIGNhc2UgcmVhY3RfaXNfcHJvZHVjdGlvbl9taW4vKiBGb3J3YXJkUmVmICovLkE0OlxuICAgICAgcmV0dXJuICdGb3J3YXJkUmVmJztcblxuICAgIGNhc2UgcmVhY3RfaXNfcHJvZHVjdGlvbl9taW4vKiBGcmFnbWVudCAqLy5IWTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSByZWFjdF9pc19wcm9kdWN0aW9uX21pbi8qIExhenkgKi8ub006XG4gICAgICByZXR1cm4gJ0xhenknO1xuXG4gICAgY2FzZSByZWFjdF9pc19wcm9kdWN0aW9uX21pbi8qIE1lbW8gKi8uX1k6XG4gICAgICByZXR1cm4gJ01lbW8nO1xuXG4gICAgY2FzZSByZWFjdF9pc19wcm9kdWN0aW9uX21pbi8qIFBvcnRhbCAqLy5oXzpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgcmVhY3RfaXNfcHJvZHVjdGlvbl9taW4vKiBQcm9maWxlciAqLy5RMTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSByZWFjdF9pc19wcm9kdWN0aW9uX21pbi8qIFN0cmljdE1vZGUgKi8ubkY6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSByZWFjdF9pc19wcm9kdWN0aW9uX21pbi8qIFN1c3BlbnNlICovLm40OlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfVFJBQ0lOR19NQVJLRVJfVFlQRTpcbiAgICAgIHJldHVybiAnVHJhY2luZ01hcmtlcic7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNwbGF5TmFtZSh0eXBlLCAnQW5vbnltb3VzJyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ05vdEltcGxlbWVudGVkSW5EZXZ0b29scyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ0VsZW1lbnQnO1xuICAgICAgfVxuXG4gIH1cbn1cbnZhciBNQVhfUFJFVklFV19TVFJJTkdfTEVOR1RIID0gNTA7XG5cbmZ1bmN0aW9uIHRydW5jYXRlRm9yRGlzcGxheShzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogTUFYX1BSRVZJRVdfU1RSSU5HX0xFTkdUSDtcblxuICBpZiAoc3RyaW5nLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgbGVuZ3RoKSArICfigKYnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn0gLy8gQXR0ZW1wdHMgdG8gbWltaWMgQ2hyb21lJ3MgaW5saW5lIHByZXZpZXcgZm9yIHZhbHVlcy5cbi8vIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHZhbHVlLi4uXG4vLyAgIHtcbi8vICAgICAgZm9vOiAxMjMsXG4vLyAgICAgIGJhcjogXCJhYmNcIixcbi8vICAgICAgYmF6OiBbdHJ1ZSwgZmFsc2VdLFxuLy8gICAgICBxdXg6IHsgYWI6IDEsIGNkOiAyIH1cbi8vICAgfTtcbi8vXG4vLyBXb3VsZCBzaG93IGEgcHJldmlldyBvZi4uLlxuLy8gICB7Zm9vOiAxMjMsIGJhcjogXCJhYmNcIiwgYmF6OiBBcnJheSgyKSwgcXV4OiB74oCmfX1cbi8vXG4vLyBBbmQgdGhlIGZvbGxvd2luZyB2YWx1ZS4uLlxuLy8gICBbXG4vLyAgICAgMTIzLFxuLy8gICAgIFwiYWJjXCIsXG4vLyAgICAgW3RydWUsIGZhbHNlXSxcbi8vICAgICB7IGZvbzogMTIzLCBiYXI6IFwiYWJjXCIgfVxuLy8gICBdO1xuLy9cbi8vIFdvdWxkIHNob3cgYSBwcmV2aWV3IG9mLi4uXG4vLyAgIFsxMjMsIFwiYWJjXCIsIEFycmF5KDIpLCB74oCmfV1cblxuXG5mdW5jdGlvbiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBzaG93Rm9ybWF0dGVkVmFsdWUpIHtcbiAgaWYgKGRhdGEgIT0gbnVsbCAmJiB1dGlsc19oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIG1ldGEudHlwZSkpIHtcbiAgICByZXR1cm4gc2hvd0Zvcm1hdHRlZFZhbHVlID8gZGF0YVttZXRhLnByZXZpZXdfbG9uZ10gOiBkYXRhW21ldGEucHJldmlld19zaG9ydF07XG4gIH1cblxuICB2YXIgdHlwZSA9IGdldERhdGFUeXBlKGRhdGEpO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2h0bWxfZWxlbWVudCc6XG4gICAgICByZXR1cm4gXCI8XCIuY29uY2F0KHRydW5jYXRlRm9yRGlzcGxheShkYXRhLnRhZ05hbWUudG9Mb3dlckNhc2UoKSksIFwiIC8+XCIpO1xuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuIHRydW5jYXRlRm9yRGlzcGxheShcIlxcdTAxOTIgXCIuY29uY2F0KHR5cGVvZiBkYXRhLm5hbWUgPT09ICdmdW5jdGlvbicgPyAnJyA6IGRhdGEubmFtZSwgXCIoKSB7fVwiKSk7XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdChkYXRhLCBcIlxcXCJcIik7XG5cbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgcmV0dXJuIHRydW5jYXRlRm9yRGlzcGxheShkYXRhLnRvU3RyaW5nKCkgKyAnbicpO1xuXG4gICAgY2FzZSAncmVnZXhwJzpcbiAgICAgIHJldHVybiB0cnVuY2F0ZUZvckRpc3BsYXkoZGF0YS50b1N0cmluZygpKTtcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICByZXR1cm4gdHJ1bmNhdGVGb3JEaXNwbGF5KGRhdGEudG9TdHJpbmcoKSk7XG5cbiAgICBjYXNlICdyZWFjdF9lbGVtZW50JzpcbiAgICAgIHJldHVybiBcIjxcIi5jb25jYXQodHJ1bmNhdGVGb3JEaXNwbGF5KGdldERpc3BsYXlOYW1lRm9yUmVhY3RFbGVtZW50KGRhdGEpIHx8ICdVbmtub3duJyksIFwiIC8+XCIpO1xuXG4gICAgY2FzZSAnYXJyYXlfYnVmZmVyJzpcbiAgICAgIHJldHVybiBcIkFycmF5QnVmZmVyKFwiLmNvbmNhdChkYXRhLmJ5dGVMZW5ndGgsIFwiKVwiKTtcblxuICAgIGNhc2UgJ2RhdGFfdmlldyc6XG4gICAgICByZXR1cm4gXCJEYXRhVmlldyhcIi5jb25jYXQoZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCwgXCIpXCIpO1xuXG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgaWYgKHNob3dGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICB2YXIgZm9ybWF0dGVkID0gJyc7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgKz0gJywgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3JtYXR0ZWQgKz0gZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YVtpXSwgZmFsc2UpO1xuXG4gICAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPiBNQVhfUFJFVklFV19TVFJJTkdfTEVOR1RIKSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRvaW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IGl0ZXJhdGlvbi4uLlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiW1wiLmNvbmNhdCh0cnVuY2F0ZUZvckRpc3BsYXkoZm9ybWF0dGVkKSwgXCJdXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHV0aWxzX2hhc093blByb3BlcnR5LmNhbGwoZGF0YSwgbWV0YS5zaXplKSA/IGRhdGFbbWV0YS5zaXplXSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4gXCJBcnJheShcIi5jb25jYXQobGVuZ3RoLCBcIilcIik7XG4gICAgICB9XG5cbiAgICBjYXNlICd0eXBlZF9hcnJheSc6XG4gICAgICB2YXIgc2hvcnROYW1lID0gXCJcIi5jb25jYXQoZGF0YS5jb25zdHJ1Y3Rvci5uYW1lLCBcIihcIikuY29uY2F0KGRhdGEubGVuZ3RoLCBcIilcIik7XG5cbiAgICAgIGlmIChzaG93Rm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgICAgdmFyIF9mb3JtYXR0ZWQgPSAnJztcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGF0YS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBpZiAoX2kgPiAwKSB7XG4gICAgICAgICAgICBfZm9ybWF0dGVkICs9ICcsICc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2Zvcm1hdHRlZCArPSBkYXRhW19pXTtcblxuICAgICAgICAgIGlmIChfZm9ybWF0dGVkLmxlbmd0aCA+IE1BWF9QUkVWSUVXX1NUUklOR19MRU5HVEgpIHtcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZG9pbmcgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgaXRlcmF0aW9uLi4uXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoc2hvcnROYW1lLCBcIiBbXCIpLmNvbmNhdCh0cnVuY2F0ZUZvckRpc3BsYXkoX2Zvcm1hdHRlZCksIFwiXVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzaG9ydE5hbWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdpdGVyYXRvcic6XG4gICAgICB2YXIgbmFtZSA9IGRhdGEuY29uc3RydWN0b3IubmFtZTtcblxuICAgICAgaWYgKHNob3dGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAvLyBUUklDS1lcbiAgICAgICAgLy8gRG9uJ3QgdXNlIFsuLi5zcHJlYWRdIHN5bnRheCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICAvLyBUaGlzIHByb2plY3QgdXNlcyBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zcHJlYWQgaW4gXCJsb29zZVwiIG1vZGUgd2hpY2ggb25seSB3b3JrcyB3aXRoIEFycmF5IHZhbHVlcy5cbiAgICAgICAgLy8gT3RoZXIgdHlwZXMgKGUuZy4gdHlwZWQgYXJyYXlzLCBTZXRzKSB3aWxsIG5vdCBzcHJlYWQgY29ycmVjdGx5LlxuICAgICAgICB2YXIgYXJyYXkgPSBBcnJheS5mcm9tKGRhdGEpO1xuICAgICAgICB2YXIgX2Zvcm1hdHRlZDIgPSAnJztcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBhcnJheS5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgdmFyIGVudHJ5T3JFbnRyaWVzID0gYXJyYXlbX2kyXTtcblxuICAgICAgICAgIGlmIChfaTIgPiAwKSB7XG4gICAgICAgICAgICBfZm9ybWF0dGVkMiArPSAnLCAnO1xuICAgICAgICAgIH0gLy8gVFJJQ0tZXG4gICAgICAgICAgLy8gQnJvd3NlcnMgZGlzcGxheSBNYXBzIGFuZCBTZXRzIGRpZmZlcmVudGx5LlxuICAgICAgICAgIC8vIFRvIG1pbWljIHRoZWlyIGJlaGF2aW9yLCBkZXRlY3QgaWYgd2UndmUgYmVlbiBnaXZlbiBhbiBlbnRyaWVzIHR1cGxlLlxuICAgICAgICAgIC8vICAgTWFwKDIpIHtcImFiY1wiID0+IDEyMywgXCJkZWZcIiA9PiAxMjN9XG4gICAgICAgICAgLy8gICBTZXQoMikge1wiYWJjXCIsIDEyM31cblxuXG4gICAgICAgICAgaWYgKHNyY19pc0FycmF5KGVudHJ5T3JFbnRyaWVzKSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGZvcm1hdERhdGFGb3JQcmV2aWV3KGVudHJ5T3JFbnRyaWVzWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGZvcm1hdERhdGFGb3JQcmV2aWV3KGVudHJ5T3JFbnRyaWVzWzFdLCBmYWxzZSk7XG4gICAgICAgICAgICBfZm9ybWF0dGVkMiArPSBcIlwiLmNvbmNhdChrZXksIFwiID0+IFwiKS5jb25jYXQodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfZm9ybWF0dGVkMiArPSBmb3JtYXREYXRhRm9yUHJldmlldyhlbnRyeU9yRW50cmllcywgZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfZm9ybWF0dGVkMi5sZW5ndGggPiBNQVhfUFJFVklFV19TVFJJTkdfTEVOR1RIKSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRvaW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IGl0ZXJhdGlvbi4uLlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUsIFwiKFwiKS5jb25jYXQoZGF0YS5zaXplLCBcIikge1wiKS5jb25jYXQodHJ1bmNhdGVGb3JEaXNwbGF5KF9mb3JtYXR0ZWQyKSwgXCJ9XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUsIFwiKFwiKS5jb25jYXQoZGF0YS5zaXplLCBcIilcIik7XG4gICAgICB9XG5cbiAgICBjYXNlICdvcGFxdWVfaXRlcmF0b3InOlxuICAgICAge1xuICAgICAgICByZXR1cm4gZGF0YVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuXG4gICAgY2FzZSAnY2xhc3NfaW5zdGFuY2UnOlxuICAgICAgcmV0dXJuIGRhdGEuY29uc3RydWN0b3IubmFtZTtcblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpZiAoc2hvd0Zvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgIHZhciBrZXlzID0gQXJyYXkuZnJvbShnZXRBbGxFbnVtZXJhYmxlS2V5cyhkYXRhKSkuc29ydChhbHBoYVNvcnRLZXlzKTtcbiAgICAgICAgdmFyIF9mb3JtYXR0ZWQzID0gJyc7XG5cbiAgICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwga2V5cy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAgICAgdmFyIF9rZXkgPSBrZXlzW19pM107XG5cbiAgICAgICAgICBpZiAoX2kzID4gMCkge1xuICAgICAgICAgICAgX2Zvcm1hdHRlZDMgKz0gJywgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfZm9ybWF0dGVkMyArPSBcIlwiLmNvbmNhdChfa2V5LnRvU3RyaW5nKCksIFwiOiBcIikuY29uY2F0KGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGFbX2tleV0sIGZhbHNlKSk7XG5cbiAgICAgICAgICBpZiAoX2Zvcm1hdHRlZDMubGVuZ3RoID4gTUFYX1BSRVZJRVdfU1RSSU5HX0xFTkdUSCkge1xuICAgICAgICAgICAgLy8gUHJldmVudCBkb2luZyBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBpdGVyYXRpb24uLi5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcIntcIi5jb25jYXQodHJ1bmNhdGVGb3JEaXNwbGF5KF9mb3JtYXR0ZWQzKSwgXCJ9XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd74oCmfSc7XG4gICAgICB9XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ2luZmluaXR5JzpcbiAgICBjYXNlICduYW4nOlxuICAgIGNhc2UgJ251bGwnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gZGF0YTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHJ1bmNhdGVGb3JEaXNwbGF5KFN0cmluZyhkYXRhKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJ3Vuc2VyaWFsaXphYmxlJztcbiAgICAgIH1cblxuICB9XG59IC8vIEJhc2ljYWxseSBjaGVja2luZyB0aGF0IHRoZSBvYmplY3Qgb25seSBoYXMgT2JqZWN0IGluIGl0cyBwcm90b3R5cGUgY2hhaW5cblxudmFyIGlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iamVjdCkge1xuICB2YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIGlmICghb2JqZWN0UHJvdG90eXBlKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIG9iamVjdFBhcmVudFByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3RQcm90b3R5cGUpO1xuICByZXR1cm4gIW9iamVjdFBhcmVudFByb3RvdHlwZTtcbn07XG5mdW5jdGlvbiBiYWNrZW5kVG9Gcm9udGVuZFNlcmlhbGl6ZWRFbGVtZW50TWFwcGVyKGVsZW1lbnQpIHtcbiAgdmFyIF9wYXJzZUVsZW1lbnREaXNwbGF5TjIgPSBwYXJzZUVsZW1lbnREaXNwbGF5TmFtZUZyb21CYWNrZW5kKGVsZW1lbnQuZGlzcGxheU5hbWUsIGVsZW1lbnQudHlwZSksXG4gICAgICBmb3JtYXR0ZWREaXNwbGF5TmFtZSA9IF9wYXJzZUVsZW1lbnREaXNwbGF5TjIuZm9ybWF0dGVkRGlzcGxheU5hbWUsXG4gICAgICBob2NEaXNwbGF5TmFtZXMgPSBfcGFyc2VFbGVtZW50RGlzcGxheU4yLmhvY0Rpc3BsYXlOYW1lcyxcbiAgICAgIGNvbXBpbGVkV2l0aEZvcmdldCA9IF9wYXJzZUVsZW1lbnREaXNwbGF5TjIuY29tcGlsZWRXaXRoRm9yZ2V0O1xuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnQpLCB7fSwge1xuICAgIGRpc3BsYXlOYW1lOiBmb3JtYXR0ZWREaXNwbGF5TmFtZSxcbiAgICBob2NEaXNwbGF5TmFtZXM6IGhvY0Rpc3BsYXlOYW1lcyxcbiAgICBjb21waWxlZFdpdGhGb3JnZXQ6IGNvbXBpbGVkV2l0aEZvcmdldFxuICB9KTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2h5ZHJhdGlvbi5qc1xuZnVuY3Rpb24gaHlkcmF0aW9uX293bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIGh5ZHJhdGlvbl9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgaHlkcmF0aW9uX293bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgaHlkcmF0aW9uX293bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIGh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG52YXIgbWV0YSA9IHtcbiAgaW5zcGVjdGFibGU6IFN5bWJvbCgnaW5zcGVjdGFibGUnKSxcbiAgaW5zcGVjdGVkOiBTeW1ib2woJ2luc3BlY3RlZCcpLFxuICBuYW1lOiBTeW1ib2woJ25hbWUnKSxcbiAgcHJldmlld19sb25nOiBTeW1ib2woJ3ByZXZpZXdfbG9uZycpLFxuICBwcmV2aWV3X3Nob3J0OiBTeW1ib2woJ3ByZXZpZXdfc2hvcnQnKSxcbiAgcmVhZG9ubHk6IFN5bWJvbCgncmVhZG9ubHknKSxcbiAgc2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIHR5cGU6IFN5bWJvbCgndHlwZScpLFxuICB1bnNlcmlhbGl6YWJsZTogU3ltYm9sKCd1bnNlcmlhbGl6YWJsZScpXG59O1xuLy8gVGhpcyB0aHJlc2hvbGQgZGV0ZXJtaW5lcyB0aGUgZGVwdGggYXQgd2hpY2ggdGhlIGJyaWRnZSBcImRlaHlkcmF0ZXNcIiBuZXN0ZWQgZGF0YS5cbi8vIERlaHlkcmF0aW9uIG1lYW5zIHRoYXQgd2UgZG9uJ3Qgc2VyaWFsaXplIHRoZSBkYXRhIGZvciBlLmcuIHBvc3RNZXNzYWdlIG9yIHN0cmluZ2lmeSxcbi8vIHVubGVzcyB0aGUgZnJvbnRlbmQgZXhwbGljaXRseSByZXF1ZXN0cyBpdCAoZS5nLiBhIHVzZXIgY2xpY2tzIHRvIGV4cGFuZCBhIHByb3BzIG9iamVjdCkuXG4vL1xuLy8gUmVkdWNpbmcgdGhpcyB0aHJlc2hvbGQgd2lsbCBpbXByb3ZlIHRoZSBzcGVlZCBvZiBpbml0aWFsIGNvbXBvbmVudCBpbnNwZWN0aW9uLFxuLy8gYnV0IG1heSBkZWNyZWFzZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgZXhwYW5kaW5nIG9iamVjdHMvYXJyYXlzIHRvIGluc3BlY3QgZnVydGhlci5cbnZhciBMRVZFTF9USFJFU0hPTEQgPSAyO1xuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgZGVoeWRyYXRlZCBtZXRhZGF0YSBmb3IgY29tcGxleCBvYmplY3QgaW5zdGFuY2VzXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGVoeWRyYXRlZCh0eXBlLCBpbnNwZWN0YWJsZSwgZGF0YSwgY2xlYW5lZCwgcGF0aCkge1xuICBjbGVhbmVkLnB1c2gocGF0aCk7XG4gIHZhciBkZWh5ZHJhdGVkID0ge1xuICAgIGluc3BlY3RhYmxlOiBpbnNwZWN0YWJsZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgcHJldmlld19zaG9ydDogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgZmFsc2UpLFxuICAgIG5hbWU6ICFkYXRhLmNvbnN0cnVjdG9yIHx8IGRhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gJ09iamVjdCcgPyAnJyA6IGRhdGEuY29uc3RydWN0b3IubmFtZVxuICB9O1xuXG4gIGlmICh0eXBlID09PSAnYXJyYXknIHx8IHR5cGUgPT09ICd0eXBlZF9hcnJheScpIHtcbiAgICBkZWh5ZHJhdGVkLnNpemUgPSBkYXRhLmxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGRlaHlkcmF0ZWQuc2l6ZSA9IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICh0eXBlID09PSAnaXRlcmF0b3InIHx8IHR5cGUgPT09ICd0eXBlZF9hcnJheScpIHtcbiAgICBkZWh5ZHJhdGVkLnJlYWRvbmx5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBkZWh5ZHJhdGVkO1xufVxuLyoqXG4gKiBTdHJpcCBvdXQgY29tcGxleCBkYXRhIChpbnN0YW5jZXMsIGZ1bmN0aW9ucywgYW5kIGRhdGEgbmVzdGVkID4gTEVWRUxfVEhSRVNIT0xEIGxldmVscyBkZWVwKS5cbiAqIFRoZSBwYXRocyBvZiB0aGUgc3RyaXBwZWQgb3V0IG9iamVjdHMgYXJlIGFwcGVuZGVkIHRvIHRoZSBgY2xlYW5lZGAgbGlzdC5cbiAqIE9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBiYXJyaWVyLCB0aGUgY2xlYW5lZCBsaXN0IGlzIHVzZWQgdG8gXCJyZS1oeWRyYXRlXCIgdGhlIGNsZWFuZWQgcmVwcmVzZW50YXRpb24gaW50b1xuICogYW4gb2JqZWN0IHdpdGggc3ltYm9scyBhcyBhdHRyaWJ1dGVzLCBzbyB0aGF0IGEgc2FuaXRpemVkIG9iamVjdCBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIGEgbm9ybWFsIG9iamVjdC5cbiAqXG4gKiBJbnB1dDoge1wic29tZVwiOiB7XCJhdHRyXCI6IGZuKCl9LCBcIm90aGVyXCI6IEFuSW5zdGFuY2V9XG4gKiBPdXRwdXQ6IHtcbiAqICAgXCJzb21lXCI6IHtcbiAqICAgICBcImF0dHJcIjoge1wibmFtZVwiOiB0aGUgZm4ubmFtZSwgdHlwZTogXCJmdW5jdGlvblwifVxuICogICB9LFxuICogICBcIm90aGVyXCI6IHtcbiAqICAgICBcIm5hbWVcIjogXCJBbkluc3RhbmNlXCIsXG4gKiAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gKiAgIH0sXG4gKiB9XG4gKiBhbmQgY2xlYW5lZCA9IFtbXCJzb21lXCIsIFwiYXR0clwiXSwgW1wib3RoZXJcIl1dXG4gKi9cblxuXG5mdW5jdGlvbiBkZWh5ZHJhdGUoZGF0YSwgY2xlYW5lZCwgdW5zZXJpYWxpemFibGUsIHBhdGgsIGlzUGF0aEFsbG93ZWQpIHtcbiAgdmFyIGxldmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAwO1xuICB2YXIgdHlwZSA9IGdldERhdGFUeXBlKGRhdGEpO1xuICB2YXIgaXNQYXRoQWxsb3dlZENoZWNrO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2h0bWxfZWxlbWVudCc6XG4gICAgICBjbGVhbmVkLnB1c2gocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnNwZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgbmFtZTogZGF0YS50YWdOYW1lLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zcGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgICAgIG5hbWU6IHR5cGVvZiBkYXRhLm5hbWUgPT09ICdmdW5jdGlvbicgfHwgIWRhdGEubmFtZSA/ICdmdW5jdGlvbicgOiBkYXRhLm5hbWUsXG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgaXNQYXRoQWxsb3dlZENoZWNrID0gaXNQYXRoQWxsb3dlZChwYXRoKTtcblxuICAgICAgaWYgKGlzUGF0aEFsbG93ZWRDaGVjaykge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCA8PSA1MDAgPyBkYXRhIDogZGF0YS5zbGljZSgwLCA1MDApICsgJy4uLic7XG4gICAgICB9XG5cbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zcGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgICAgIG5hbWU6IGRhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfTtcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICBjbGVhbmVkLnB1c2gocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnNwZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgbmFtZTogZGF0YS50b1N0cmluZygpLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuICAgIC8vIFJlYWN0IEVsZW1lbnRzIGFyZW4ndCB2ZXJ5IGluc3BlY3Rvci1mcmllbmRseSxcbiAgICAvLyBhbmQgb2Z0ZW4gY29udGFpbiBwcml2YXRlIGZpZWxkcyBvciBjaXJjdWxhciByZWZlcmVuY2VzLlxuXG4gICAgY2FzZSAncmVhY3RfZWxlbWVudCc6XG4gICAgICBjbGVhbmVkLnB1c2gocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnNwZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgbmFtZTogZ2V0RGlzcGxheU5hbWVGb3JSZWFjdEVsZW1lbnQoZGF0YSkgfHwgJ1Vua25vd24nLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuICAgIC8vIEFycmF5QnVmZmVycyBlcnJvciBpZiB5b3UgdHJ5IHRvIGluc3BlY3QgdGhlbS5cblxuICAgIGNhc2UgJ2FycmF5X2J1ZmZlcic6XG4gICAgY2FzZSAnZGF0YV92aWV3JzpcbiAgICAgIGNsZWFuZWQucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3BlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgcHJldmlld19zaG9ydDogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgZmFsc2UpLFxuICAgICAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgICAgICBuYW1lOiB0eXBlID09PSAnZGF0YV92aWV3JyA/ICdEYXRhVmlldycgOiAnQXJyYXlCdWZmZXInLFxuICAgICAgICBzaXplOiBkYXRhLmJ5dGVMZW5ndGgsXG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICBjYXNlICdhcnJheSc6XG4gICAgICBpc1BhdGhBbGxvd2VkQ2hlY2sgPSBpc1BhdGhBbGxvd2VkKHBhdGgpO1xuXG4gICAgICBpZiAobGV2ZWwgPj0gTEVWRUxfVEhSRVNIT0xEICYmICFpc1BhdGhBbGxvd2VkQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZURlaHlkcmF0ZWQodHlwZSwgdHJ1ZSwgZGF0YSwgY2xlYW5lZCwgcGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhLm1hcChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICByZXR1cm4gZGVoeWRyYXRlKGl0ZW0sIGNsZWFuZWQsIHVuc2VyaWFsaXphYmxlLCBwYXRoLmNvbmNhdChbaV0pLCBpc1BhdGhBbGxvd2VkLCBpc1BhdGhBbGxvd2VkQ2hlY2sgPyAxIDogbGV2ZWwgKyAxKTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnaHRtbF9hbGxfY29sbGVjdGlvbic6XG4gICAgY2FzZSAndHlwZWRfYXJyYXknOlxuICAgIGNhc2UgJ2l0ZXJhdG9yJzpcbiAgICAgIGlzUGF0aEFsbG93ZWRDaGVjayA9IGlzUGF0aEFsbG93ZWQocGF0aCk7XG5cbiAgICAgIGlmIChsZXZlbCA+PSBMRVZFTF9USFJFU0hPTEQgJiYgIWlzUGF0aEFsbG93ZWRDaGVjaykge1xuICAgICAgICByZXR1cm4gY3JlYXRlRGVoeWRyYXRlZCh0eXBlLCB0cnVlLCBkYXRhLCBjbGVhbmVkLCBwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB1bnNlcmlhbGl6YWJsZVZhbHVlID0ge1xuICAgICAgICAgIHVuc2VyaWFsaXphYmxlOiB0cnVlLFxuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICAgICAgc2l6ZTogdHlwZSA9PT0gJ3R5cGVkX2FycmF5JyA/IGRhdGEubGVuZ3RoIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgICAgICAgIG5hbWU6ICFkYXRhLmNvbnN0cnVjdG9yIHx8IGRhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gJ09iamVjdCcgPyAnJyA6IGRhdGEuY29uc3RydWN0b3IubmFtZVxuICAgICAgICB9OyAvLyBUUklDS1lcbiAgICAgICAgLy8gRG9uJ3QgdXNlIFsuLi5zcHJlYWRdIHN5bnRheCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICAvLyBUaGlzIHByb2plY3QgdXNlcyBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zcHJlYWQgaW4gXCJsb29zZVwiIG1vZGUgd2hpY2ggb25seSB3b3JrcyB3aXRoIEFycmF5IHZhbHVlcy5cbiAgICAgICAgLy8gT3RoZXIgdHlwZXMgKGUuZy4gdHlwZWQgYXJyYXlzLCBTZXRzKSB3aWxsIG5vdCBzcHJlYWQgY29ycmVjdGx5LlxuXG4gICAgICAgIEFycmF5LmZyb20oZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgIHJldHVybiB1bnNlcmlhbGl6YWJsZVZhbHVlW2ldID0gZGVoeWRyYXRlKGl0ZW0sIGNsZWFuZWQsIHVuc2VyaWFsaXphYmxlLCBwYXRoLmNvbmNhdChbaV0pLCBpc1BhdGhBbGxvd2VkLCBpc1BhdGhBbGxvd2VkQ2hlY2sgPyAxIDogbGV2ZWwgKyAxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHVuc2VyaWFsaXphYmxlLnB1c2gocGF0aCk7XG4gICAgICAgIHJldHVybiB1bnNlcmlhbGl6YWJsZVZhbHVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb3BhcXVlX2l0ZXJhdG9yJzpcbiAgICAgIGNsZWFuZWQucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3BlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgcHJldmlld19zaG9ydDogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgZmFsc2UpLFxuICAgICAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgICAgICBuYW1lOiBkYXRhW1N5bWJvbC50b1N0cmluZ1RhZ10sXG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNsZWFuZWQucHVzaChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3BlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgcHJldmlld19zaG9ydDogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgZmFsc2UpLFxuICAgICAgICBwcmV2aWV3X2xvbmc6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIHRydWUpLFxuICAgICAgICBuYW1lOiBkYXRhLnRvU3RyaW5nKCksXG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICBjYXNlICdyZWdleHAnOlxuICAgICAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zcGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2aWV3X3Nob3J0OiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCBmYWxzZSksXG4gICAgICAgIHByZXZpZXdfbG9uZzogZm9ybWF0RGF0YUZvclByZXZpZXcoZGF0YSwgdHJ1ZSksXG4gICAgICAgIG5hbWU6IGRhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfTtcblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpc1BhdGhBbGxvd2VkQ2hlY2sgPSBpc1BhdGhBbGxvd2VkKHBhdGgpO1xuXG4gICAgICBpZiAobGV2ZWwgPj0gTEVWRUxfVEhSRVNIT0xEICYmICFpc1BhdGhBbGxvd2VkQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZURlaHlkcmF0ZWQodHlwZSwgdHJ1ZSwgZGF0YSwgY2xlYW5lZCwgcGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgIGdldEFsbEVudW1lcmFibGVLZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHZhciBuYW1lID0ga2V5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgb2JqZWN0W25hbWVdID0gZGVoeWRyYXRlKGRhdGFba2V5XSwgY2xlYW5lZCwgdW5zZXJpYWxpemFibGUsIHBhdGguY29uY2F0KFtuYW1lXSksIGlzUGF0aEFsbG93ZWQsIGlzUGF0aEFsbG93ZWRDaGVjayA/IDEgOiBsZXZlbCArIDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2NsYXNzX2luc3RhbmNlJzpcbiAgICAgIGlzUGF0aEFsbG93ZWRDaGVjayA9IGlzUGF0aEFsbG93ZWQocGF0aCk7XG5cbiAgICAgIGlmIChsZXZlbCA+PSBMRVZFTF9USFJFU0hPTEQgJiYgIWlzUGF0aEFsbG93ZWRDaGVjaykge1xuICAgICAgICByZXR1cm4gY3JlYXRlRGVoeWRyYXRlZCh0eXBlLCB0cnVlLCBkYXRhLCBjbGVhbmVkLCBwYXRoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0ge1xuICAgICAgICB1bnNlcmlhbGl6YWJsZTogdHJ1ZSxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICAgIHByZXZpZXdfc2hvcnQ6IGZvcm1hdERhdGFGb3JQcmV2aWV3KGRhdGEsIGZhbHNlKSxcbiAgICAgICAgcHJldmlld19sb25nOiBmb3JtYXREYXRhRm9yUHJldmlldyhkYXRhLCB0cnVlKSxcbiAgICAgICAgbmFtZTogZGF0YS5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgICB9O1xuICAgICAgZ2V0QWxsRW51bWVyYWJsZUtleXMoZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBrZXlBc1N0cmluZyA9IGtleS50b1N0cmluZygpO1xuICAgICAgICB2YWx1ZVtrZXlBc1N0cmluZ10gPSBkZWh5ZHJhdGUoZGF0YVtrZXldLCBjbGVhbmVkLCB1bnNlcmlhbGl6YWJsZSwgcGF0aC5jb25jYXQoW2tleUFzU3RyaW5nXSksIGlzUGF0aEFsbG93ZWQsIGlzUGF0aEFsbG93ZWRDaGVjayA/IDEgOiBsZXZlbCArIDEpO1xuICAgICAgfSk7XG4gICAgICB1bnNlcmlhbGl6YWJsZS5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgY2FzZSAnaW5maW5pdHknOlxuICAgIGNhc2UgJ25hbic6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIC8vIFNvbWUgdmFsdWVzIGFyZSBsb3NzeSB3aGVuIHNlbnQgdGhyb3VnaCBhIFdlYlNvY2tldC5cbiAgICAgIC8vIFdlIGRlaHlkcmF0ZStyZWh5ZHJhdGUgdGhlbSB0byBwcmVzZXJ2ZSB0aGVpciB0eXBlLlxuICAgICAgY2xlYW5lZC5wdXNoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGF0YTtcbiAgfVxufVxuZnVuY3Rpb24gZmlsbEluUGF0aChvYmplY3QsIGRhdGEsIHBhdGgsIHZhbHVlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRJbk9iamVjdChvYmplY3QsIHBhdGgpO1xuXG4gIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgIGlmICghdGFyZ2V0W21ldGEudW5zZXJpYWxpemFibGVdKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W21ldGEuaW5zcGVjdGFibGVdO1xuICAgICAgZGVsZXRlIHRhcmdldFttZXRhLmluc3BlY3RlZF07XG4gICAgICBkZWxldGUgdGFyZ2V0W21ldGEubmFtZV07XG4gICAgICBkZWxldGUgdGFyZ2V0W21ldGEucHJldmlld19sb25nXTtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbWV0YS5wcmV2aWV3X3Nob3J0XTtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbWV0YS5yZWFkb25seV07XG4gICAgICBkZWxldGUgdGFyZ2V0W21ldGEuc2l6ZV07XG4gICAgICBkZWxldGUgdGFyZ2V0W21ldGEudHlwZV07XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIGRhdGEudW5zZXJpYWxpemFibGUubGVuZ3RoID4gMCkge1xuICAgIHZhciB1bnNlcmlhbGl6YWJsZVBhdGggPSBkYXRhLnVuc2VyaWFsaXphYmxlWzBdO1xuICAgIHZhciBpc01hdGNoID0gdW5zZXJpYWxpemFibGVQYXRoLmxlbmd0aCA9PT0gcGF0aC5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSB1bnNlcmlhbGl6YWJsZVBhdGhbaV0pIHtcbiAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgdXBncmFkZVVuc2VyaWFsaXphYmxlKHZhbHVlLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBoeWRyYXRlKG9iamVjdCwgY2xlYW5lZCwgdW5zZXJpYWxpemFibGUpIHtcbiAgY2xlYW5lZC5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIHZhciBsYXN0ID0gcGF0aFtsZW5ndGggLSAxXTtcbiAgICB2YXIgcGFyZW50ID0gZ2V0SW5PYmplY3Qob2JqZWN0LCBwYXRoLnNsaWNlKDAsIGxlbmd0aCAtIDEpKTtcblxuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuaGFzT3duUHJvcGVydHkobGFzdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBwYXJlbnRbbGFzdF07XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnaW5maW5pdHknKSB7XG4gICAgICBwYXJlbnRbbGFzdF0gPSBJbmZpbml0eTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICduYW4nKSB7XG4gICAgICBwYXJlbnRbbGFzdF0gPSBOYU47XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyZW50W2xhc3RdID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcga2V5cyB3aXRoIFN5bWJvbHMgc28gdGhleSdyZSBub24tZW51bWVyYWJsZS5cbiAgICAgIHZhciByZXBsYWNlZCA9IHt9O1xuICAgICAgcmVwbGFjZWRbbWV0YS5pbnNwZWN0YWJsZV0gPSAhIXZhbHVlLmluc3BlY3RhYmxlO1xuICAgICAgcmVwbGFjZWRbbWV0YS5pbnNwZWN0ZWRdID0gZmFsc2U7XG4gICAgICByZXBsYWNlZFttZXRhLm5hbWVdID0gdmFsdWUubmFtZTtcbiAgICAgIHJlcGxhY2VkW21ldGEucHJldmlld19sb25nXSA9IHZhbHVlLnByZXZpZXdfbG9uZztcbiAgICAgIHJlcGxhY2VkW21ldGEucHJldmlld19zaG9ydF0gPSB2YWx1ZS5wcmV2aWV3X3Nob3J0O1xuICAgICAgcmVwbGFjZWRbbWV0YS5zaXplXSA9IHZhbHVlLnNpemU7XG4gICAgICByZXBsYWNlZFttZXRhLnJlYWRvbmx5XSA9ICEhdmFsdWUucmVhZG9ubHk7XG4gICAgICByZXBsYWNlZFttZXRhLnR5cGVdID0gdmFsdWUudHlwZTtcbiAgICAgIHBhcmVudFtsYXN0XSA9IHJlcGxhY2VkO1xuICAgIH1cbiAgfSk7XG4gIHVuc2VyaWFsaXphYmxlLmZvckVhY2goZnVuY3Rpb24gKHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgdmFyIGxhc3QgPSBwYXRoW2xlbmd0aCAtIDFdO1xuICAgIHZhciBwYXJlbnQgPSBnZXRJbk9iamVjdChvYmplY3QsIHBhdGguc2xpY2UoMCwgbGVuZ3RoIC0gMSkpO1xuXG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5oYXNPd25Qcm9wZXJ0eShsYXN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gcGFyZW50W2xhc3RdO1xuXG4gICAgdmFyIHJlcGxhY2VtZW50ID0gaHlkcmF0aW9uX29iamVjdFNwcmVhZCh7fSwgbm9kZSk7XG5cbiAgICB1cGdyYWRlVW5zZXJpYWxpemFibGUocmVwbGFjZW1lbnQsIG5vZGUpO1xuICAgIHBhcmVudFtsYXN0XSA9IHJlcGxhY2VtZW50O1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gdXBncmFkZVVuc2VyaWFsaXphYmxlKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgdmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhkZXN0aW5hdGlvbiwgKF9PYmplY3QkZGVmaW5lUHJvcGVydCA9IHt9LCBoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkoX09iamVjdCRkZWZpbmVQcm9wZXJ0LCBtZXRhLmluc3BlY3RlZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogISFzb3VyY2UuaW5zcGVjdGVkXG4gIH0pLCBoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkoX09iamVjdCRkZWZpbmVQcm9wZXJ0LCBtZXRhLm5hbWUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IHNvdXJjZS5uYW1lXG4gIH0pLCBoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkoX09iamVjdCRkZWZpbmVQcm9wZXJ0LCBtZXRhLnByZXZpZXdfbG9uZywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogc291cmNlLnByZXZpZXdfbG9uZ1xuICB9KSwgaHlkcmF0aW9uX2RlZmluZVByb3BlcnR5KF9PYmplY3QkZGVmaW5lUHJvcGVydCwgbWV0YS5wcmV2aWV3X3Nob3J0LCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBzb3VyY2UucHJldmlld19zaG9ydFxuICB9KSwgaHlkcmF0aW9uX2RlZmluZVByb3BlcnR5KF9PYmplY3QkZGVmaW5lUHJvcGVydCwgbWV0YS5zaXplLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBzb3VyY2Uuc2l6ZVxuICB9KSwgaHlkcmF0aW9uX2RlZmluZVByb3BlcnR5KF9PYmplY3QkZGVmaW5lUHJvcGVydCwgbWV0YS5yZWFkb25seSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogISFzb3VyY2UucmVhZG9ubHlcbiAgfSksIGh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGRlZmluZVByb3BlcnQsIG1ldGEudHlwZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogc291cmNlLnR5cGVcbiAgfSksIGh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGRlZmluZVByb3BlcnQsIG1ldGEudW5zZXJpYWxpemFibGUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6ICEhc291cmNlLnVuc2VyaWFsaXphYmxlXG4gIH0pLCBfT2JqZWN0JGRlZmluZVByb3BlcnQpKTtcbiAgZGVsZXRlIGRlc3RpbmF0aW9uLmluc3BlY3RlZDtcbiAgZGVsZXRlIGRlc3RpbmF0aW9uLm5hbWU7XG4gIGRlbGV0ZSBkZXN0aW5hdGlvbi5wcmV2aWV3X2xvbmc7XG4gIGRlbGV0ZSBkZXN0aW5hdGlvbi5wcmV2aWV3X3Nob3J0O1xuICBkZWxldGUgZGVzdGluYXRpb24uc2l6ZTtcbiAgZGVsZXRlIGRlc3RpbmF0aW9uLnJlYWRvbmx5O1xuICBkZWxldGUgZGVzdGluYXRpb24udHlwZTtcbiAgZGVsZXRlIGRlc3RpbmF0aW9uLnVuc2VyaWFsaXphYmxlO1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3NoYXJlZC9pc0FycmF5LmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheV9pc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IHNoYXJlZF9pc0FycmF5ID0gKGlzQXJyYXlfaXNBcnJheSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3V0aWxzLmpzXG5mdW5jdGlvbiB1dGlsc190b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIHV0aWxzX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgdXRpbHNfaXRlcmFibGVUb0FycmF5KGFycikgfHwgYmFja2VuZF91dGlsc191bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHV0aWxzX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gdXRpbHNfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIGJhY2tlbmRfdXRpbHNfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBiYWNrZW5kX3V0aWxzX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBiYWNrZW5kX3V0aWxzX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiB1dGlsc19pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiB1dGlsc19hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGJhY2tlbmRfdXRpbHNfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIGJhY2tlbmRfdXRpbHNfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gYmFja2VuZF91dGlsc190eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IGJhY2tlbmRfdXRpbHNfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IGJhY2tlbmRfdXRpbHNfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIGJhY2tlbmRfdXRpbHNfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gdXRpbHNfb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gdXRpbHNfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IHV0aWxzX293bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBiYWNrZW5kX3V0aWxzX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IHV0aWxzX293bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIGJhY2tlbmRfdXRpbHNfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuLy8gVE9ETzogdXBkYXRlIHRoaXMgdG8gdGhlIGZpcnN0IFJlYWN0IHZlcnNpb24gdGhhdCBoYXMgYSBjb3JyZXNwb25kaW5nIERldlRvb2xzIGJhY2tlbmRcbnZhciBGSVJTVF9ERVZUT09MU19CQUNLRU5EX0xPQ0tTVEVQX1ZFUiA9ICc5OTkuOS45JztcbmZ1bmN0aW9uIGhhc0Fzc2lnbmVkQmFja2VuZCh2ZXJzaW9uKSB7XG4gIGlmICh2ZXJzaW9uID09IG51bGwgfHwgdmVyc2lvbiA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ3RlKHZlcnNpb24sIEZJUlNUX0RFVlRPT0xTX0JBQ0tFTkRfTE9DS1NURVBfVkVSKTtcbn1cbmZ1bmN0aW9uIGNsZWFuRm9yQnJpZGdlKGRhdGEsIGlzUGF0aEFsbG93ZWQpIHtcbiAgdmFyIHBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXG4gIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgdmFyIGNsZWFuZWRQYXRocyA9IFtdO1xuICAgIHZhciB1bnNlcmlhbGl6YWJsZVBhdGhzID0gW107XG4gICAgdmFyIGNsZWFuZWREYXRhID0gZGVoeWRyYXRlKGRhdGEsIGNsZWFuZWRQYXRocywgdW5zZXJpYWxpemFibGVQYXRocywgcGF0aCwgaXNQYXRoQWxsb3dlZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGNsZWFuZWREYXRhLFxuICAgICAgY2xlYW5lZDogY2xlYW5lZFBhdGhzLFxuICAgICAgdW5zZXJpYWxpemFibGU6IHVuc2VyaWFsaXphYmxlUGF0aHNcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBjb3B5V2l0aERlbGV0ZShvYmosIHBhdGgpIHtcbiAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAwO1xuICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gIHZhciB1cGRhdGVkID0gc2hhcmVkX2lzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogdXRpbHNfb2JqZWN0U3ByZWFkKHt9LCBvYmopO1xuXG4gIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgaWYgKHNoYXJlZF9pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGUob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZDtcbn0gLy8gVGhpcyBmdW5jdGlvbiBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGZpbmFsIHZhbHVlLlxuLy8gZS5nLiBbJ3BhdGgnLCAndG8nLCAnZm9vJ10gYW5kIFsncGF0aCcsICd0bycsICdiYXInXVxuXG5mdW5jdGlvbiBjb3B5V2l0aFJlbmFtZShvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAwO1xuICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gIHZhciB1cGRhdGVkID0gc2hhcmVkX2lzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogdXRpbHNfb2JqZWN0U3ByZWFkKHt9LCBvYmopO1xuXG4gIGlmIChpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICBpZiAoc2hhcmVkX2lzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgIHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICB1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZShvYmpbb2xkS2V5XSwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkO1xufVxuZnVuY3Rpb24gY29weVdpdGhTZXQob2JqLCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG5cbiAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICB2YXIgdXBkYXRlZCA9IHNoYXJlZF9pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IHV0aWxzX29iamVjdFNwcmVhZCh7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0KG9ialtrZXldLCBwYXRoLCB2YWx1ZSwgaW5kZXggKyAxKTtcbiAgcmV0dXJuIHVwZGF0ZWQ7XG59XG5mdW5jdGlvbiBnZXRFZmZlY3REdXJhdGlvbnMocm9vdCkge1xuICAvLyBQcm9maWxpbmcgZHVyYXRpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgY2VydGFpbiBidWlsZHMuXG4gIC8vIElmIGF2YWlsYWJsZSwgdGhleSdsbCBiZSBzdG9yZWQgb24gdGhlIEhvc3RSb290LlxuICB2YXIgZWZmZWN0RHVyYXRpb24gPSBudWxsO1xuICB2YXIgcGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gbnVsbDtcbiAgdmFyIGhvc3RSb290ID0gcm9vdC5jdXJyZW50O1xuXG4gIGlmIChob3N0Um9vdCAhPSBudWxsKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGhvc3RSb290LnN0YXRlTm9kZTtcblxuICAgIGlmIChzdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgZWZmZWN0RHVyYXRpb24gPSBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gIT0gbnVsbCA/IHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA6IG51bGw7XG4gICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb24gPSBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uICE9IG51bGwgPyBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVmZmVjdER1cmF0aW9uOiBlZmZlY3REdXJhdGlvbixcbiAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IHBhc3NpdmVFZmZlY3REdXJhdGlvblxuICB9O1xufVxuZnVuY3Rpb24gc2VyaWFsaXplVG9TdHJpbmcoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgdmFyIGNhY2hlID0gbmV3IFNldCgpOyAvLyBVc2UgYSBjdXN0b20gcmVwbGFjZXIgZnVuY3Rpb24gdG8gcHJvdGVjdCBhZ2FpbnN0IGNpcmN1bGFyIHJlZmVyZW5jZXMuXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGJhY2tlbmRfdXRpbHNfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIGlmIChjYWNoZS5oYXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2FjaGUuYWRkKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgKyAnbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LCAyKTtcbn0gLy8gRm9ybWF0cyBhbiBhcnJheSBvZiBhcmdzIHdpdGggYSBzdHlsZSBmb3IgY29uc29sZSBtZXRob2RzLCB1c2luZ1xuLy8gdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4vLyAgICAgMS4gVGhlIGZpcnN0IHBhcmFtIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgJWNcbi8vICAgICAgICAgIC0gQmFpbCBvdXQgYW5kIHJldHVybiB0aGUgYXJncyB3aXRob3V0IG1vZGlmeWluZyB0aGUgc3R5bGVzLlxuLy8gICAgICAgICAgICBXZSBkb24ndCB3YW50IHRvIGFmZmVjdCBzdHlsZXMgdGhhdCB0aGUgZGV2ZWxvcGVyIGRlbGliZXJhdGVseSBzZXQuXG4vLyAgICAgMi4gVGhlIGZpcnN0IHBhcmFtIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCBjb250YWluICVjIGJ1dCBjb250YWluc1xuLy8gICAgICAgIHN0cmluZyBmb3JtYXR0aW5nXG4vLyAgICAgICAgICAtIFtgJWMke2FyZ3NbMF19YCwgc3R5bGUsIC4uLmFyZ3Muc2xpY2UoMSldXG4vLyAgICAgICAgICAtIE5vdGU6IHdlIGFzc3VtZSB0aGF0IHRoZSBzdHJpbmcgZm9ybWF0dGluZyB0aGF0IHRoZSBkZXZlbG9wZXIgdXNlc1xuLy8gICAgICAgICAgICBpcyBjb3JyZWN0LlxuLy8gICAgIDMuIFRoZSBmaXJzdCBwYXJhbSBpcyBhIHN0cmluZyB0aGF0IGRvZXNuJ3QgY29udGFpbiBzdHJpbmcgZm9ybWF0dGluZ1xuLy8gICAgICAgIE9SIGlzIG5vdCBhIHN0cmluZ1xuLy8gICAgICAgICAgLSBDcmVhdGUgYSBmb3JtYXR0aW5nIHN0cmluZyB3aGVyZTpcbi8vICAgICAgICAgICAgICAgICBib29sZWFuLCBzdHJpbmcsIHN5bWJvbCAtPiAlc1xuLy8gICAgICAgICAgICAgICAgIG51bWJlciAtPiAlZiBPUiAlaSBkZXBlbmRpbmcgb24gaWYgaXQncyBhbiBpbnQgb3IgZmxvYXRcbi8vICAgICAgICAgICAgICAgICBkZWZhdWx0IC0+ICVvXG5cbmZ1bmN0aW9uIGZvcm1hdFdpdGhTdHlsZXMoaW5wdXRBcmdzLCBzdHlsZSkge1xuICBpZiAoaW5wdXRBcmdzID09PSB1bmRlZmluZWQgfHwgaW5wdXRBcmdzID09PSBudWxsIHx8IGlucHV0QXJncy5sZW5ndGggPT09IDAgfHwgLy8gTWF0Y2hlcyBhbnkgb2YgJWMgYnV0IG5vdCAlJWNcbiAgdHlwZW9mIGlucHV0QXJnc1swXSA9PT0gJ3N0cmluZycgJiYgaW5wdXRBcmdzWzBdLm1hdGNoKC8oW14lXXxeKSglYykvZykgfHwgc3R5bGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBpbnB1dEFyZ3M7XG4gIH0gLy8gTWF0Y2hlcyBhbnkgb2YgJShvfE98ZHxpfHN8ZiksIGJ1dCBub3QgJSUob3xPfGR8aXxzfGYpXG5cblxuICB2YXIgUkVHRVhQID0gLyhbXiVdfF4pKCglJSkqKSglKFtvT2Rpc2ZdKSkvZztcblxuICBpZiAodHlwZW9mIGlucHV0QXJnc1swXSA9PT0gJ3N0cmluZycgJiYgaW5wdXRBcmdzWzBdLm1hdGNoKFJFR0VYUCkpIHtcbiAgICByZXR1cm4gW1wiJWNcIi5jb25jYXQoaW5wdXRBcmdzWzBdKSwgc3R5bGVdLmNvbmNhdCh1dGlsc190b0NvbnN1bWFibGVBcnJheShpbnB1dEFyZ3Muc2xpY2UoMSkpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RBcmcgPSBpbnB1dEFyZ3MucmVkdWNlKGZ1bmN0aW9uIChmb3JtYXRTdHIsIGVsZW0sIGkpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBmb3JtYXRTdHIgKz0gJyAnO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGJhY2tlbmRfdXRpbHNfdHlwZW9mKGVsZW0pKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gJyVzJztcblxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHZhciBmb3JtYXR0aW5nID0gTnVtYmVyLmlzSW50ZWdlcihlbGVtKSA/ICclaScgOiAnJWYnO1xuICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gZm9ybWF0dGluZztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gJyVvJztcbiAgICAgIH1cbiAgICB9LCAnJWMnKTtcbiAgICByZXR1cm4gW2ZpcnN0QXJnLCBzdHlsZV0uY29uY2F0KHV0aWxzX3RvQ29uc3VtYWJsZUFycmF5KGlucHV0QXJncykpO1xuICB9XG59IC8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90bXBmcy9mb3JtYXQtdXRpbC9ibG9iLzBlNjJkNDMwZWZiMGExYzUxNDQ4NzA5YWJkM2UyNDA2YzE0ZDg0MDEvZm9ybWF0LmpzI0wxXG4vLyBiYXNlZCBvbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvY29uc29sZSNVc2luZ19zdHJpbmdfc3Vic3RpdHV0aW9uc1xuLy8gSW1wbGVtZW50cyBzLCBkLCBpIGFuZCBmIHBsYWNlaG9sZGVyc1xuLy8gTk9URTogS0VFUCBJTiBTWU5DIHdpdGggc3JjL2hvb2suanNcblxuZnVuY3Rpb24gZm9ybWF0KG1heWJlTWVzc2FnZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgaW5wdXRBcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBpbnB1dEFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIGFyZ3MgPSBpbnB1dEFyZ3Muc2xpY2UoKTtcbiAgdmFyIGZvcm1hdHRlZCA9IFN0cmluZyhtYXliZU1lc3NhZ2UpOyAvLyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcsIGNoZWNrIGZvciBzdWJzdGl0dXRpb25zLlxuXG4gIGlmICh0eXBlb2YgbWF5YmVNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgdmFyIFJFR0VYUCA9IC8oJT8pKCUoW2pkc10pKS9nO1xuICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoUkVHRVhQLCBmdW5jdGlvbiAobWF0Y2gsIGVzY2FwZWQsIHB0biwgZmxhZykge1xuICAgICAgICB2YXIgYXJnID0gYXJncy5zaGlmdCgpO1xuXG4gICAgICAgIHN3aXRjaCAoZmxhZykge1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgYXJnICs9ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgYXJnID0gcGFyc2VGbG9hdChhcmcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzLnVuc2hpZnQoYXJnKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfSk7XG4gICAgfVxuICB9IC8vIEFyZ3VtZW50cyB0aGF0IHJlbWFpbiBhZnRlciBmb3JtYXR0aW5nLlxuXG5cbiAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3JtYXR0ZWQgKz0gJyAnICsgU3RyaW5nKGFyZ3NbaV0pO1xuICAgIH1cbiAgfSAvLyBVcGRhdGUgZXNjYXBlZCAlJSB2YWx1ZXMuXG5cblxuICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvJXsyLDJ9L2csICclJyk7XG4gIHJldHVybiBTdHJpbmcoZm9ybWF0dGVkKTtcbn1cbmZ1bmN0aW9uIGlzU3luY2hyb25vdXNYSFJTdXBwb3J0ZWQoKSB7XG4gIHJldHVybiAhISh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmZlYXR1cmVQb2xpY3kgJiYgd2luZG93LmRvY3VtZW50LmZlYXR1cmVQb2xpY3kuYWxsb3dzRmVhdHVyZSgnc3luYy14aHInKSk7XG59XG5mdW5jdGlvbiBndCgpIHtcbiAgdmFyIGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gIHJldHVybiBjb21wYXJlVmVyc2lvbnMoYSwgYikgPT09IDE7XG59XG5mdW5jdGlvbiBndGUoKSB7XG4gIHZhciBhID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIGIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICByZXR1cm4gY29tcGFyZVZlcnNpb25zKGEsIGIpID4gLTE7XG59XG52YXIgaXNSZWFjdE5hdGl2ZUVudmlyb25tZW50ID0gZnVuY3Rpb24gaXNSZWFjdE5hdGl2ZUVudmlyb25tZW50KCkge1xuICAvLyBXZSd2ZSBiZWVuIHJlbHlpbmcgb24gdGhpcyBmb3Igc3VjaCBhIGxvbmcgdGltZVxuICAvLyBXZSBzaG91bGQgcHJvYmFibHkgZGVmaW5lIHRoZSBjbGllbnQgZm9yIERldlRvb2xzIG9uIHRoZSBiYWNrZW5kIHNpZGUgYW5kIHNoYXJlIGl0IHdpdGggdGhlIGZyb250ZW5kXG4gIHJldHVybiB3aW5kb3cuZG9jdW1lbnQgPT0gbnVsbDtcbn07XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3ZpZXdzL3V0aWxzLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbi8vIEdldCB0aGUgd2luZG93IG9iamVjdCBmb3IgdGhlIGRvY3VtZW50IHRoYXQgYSBub2RlIGJlbG9uZ3MgdG8sXG4vLyBvciByZXR1cm4gbnVsbCBpZiBpdCBjYW5ub3QgYmUgZm91bmQgKG5vZGUgbm90IGF0dGFjaGVkIHRvIERPTSxcbi8vIGV0YykuXG5mdW5jdGlvbiBnZXRPd25lcldpbmRvdyhub2RlKSB7XG4gIGlmICghbm9kZS5vd25lckRvY3VtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xufSAvLyBHZXQgdGhlIGlmcmFtZSBjb250YWluaW5nIGEgbm9kZSwgb3IgcmV0dXJuIG51bGwgaWYgaXQgY2Fubm90XG4vLyBiZSBmb3VuZCAobm9kZSBub3Qgd2l0aGluIGlmcmFtZSwgZXRjKS5cblxuZnVuY3Rpb24gZ2V0T3duZXJJZnJhbWUobm9kZSkge1xuICB2YXIgbm9kZVdpbmRvdyA9IGdldE93bmVyV2luZG93KG5vZGUpO1xuXG4gIGlmIChub2RlV2luZG93KSB7XG4gICAgcmV0dXJuIG5vZGVXaW5kb3cuZnJhbWVFbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldCBhIGJvdW5kaW5nIGNsaWVudCByZWN0IGZvciBhIG5vZGUsIHdpdGggYW5cbi8vIG9mZnNldCBhZGRlZCB0byBjb21wZW5zYXRlIGZvciBpdHMgYm9yZGVyLlxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3RXaXRoQm9yZGVyT2Zmc2V0KG5vZGUpIHtcbiAgdmFyIGRpbWVuc2lvbnMgPSBnZXRFbGVtZW50RGltZW5zaW9ucyhub2RlKTtcbiAgcmV0dXJuIG1lcmdlUmVjdE9mZnNldHMoW25vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHtcbiAgICB0b3A6IGRpbWVuc2lvbnMuYm9yZGVyVG9wLFxuICAgIGxlZnQ6IGRpbWVuc2lvbnMuYm9yZGVyTGVmdCxcbiAgICBib3R0b206IGRpbWVuc2lvbnMuYm9yZGVyQm90dG9tLFxuICAgIHJpZ2h0OiBkaW1lbnNpb25zLmJvcmRlclJpZ2h0LFxuICAgIC8vIFRoaXMgd2lkdGggYW5kIGhlaWdodCB3b24ndCBnZXQgdXNlZCBieSBtZXJnZVJlY3RPZmZzZXRzIChzaW5jZSB0aGlzXG4gICAgLy8gaXMgbm90IHRoZSBmaXJzdCByZWN0IGluIHRoZSBhcnJheSksIGJ1dCB3ZSBzZXQgdGhlbSBzbyB0aGF0IHRoaXNcbiAgICAvLyBvYmplY3QgdHlwZSBjaGVja3MgYXMgYSBDbGllbnRSZWN0LlxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9XSk7XG59IC8vIEFkZCB0b2dldGhlciB0aGUgdG9wLCBsZWZ0LCBib3R0b20sIGFuZCByaWdodCBwcm9wZXJ0aWVzIG9mXG4vLyBlYWNoIENsaWVudFJlY3QsIGJ1dCBrZWVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBmaXJzdCBvbmUuXG5cbmZ1bmN0aW9uIG1lcmdlUmVjdE9mZnNldHMocmVjdHMpIHtcbiAgcmV0dXJuIHJlY3RzLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXNSZWN0LCByZWN0KSB7XG4gICAgaWYgKHByZXZpb3VzUmVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gcmVjdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBwcmV2aW91c1JlY3QudG9wICsgcmVjdC50b3AsXG4gICAgICBsZWZ0OiBwcmV2aW91c1JlY3QubGVmdCArIHJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBwcmV2aW91c1JlY3Qud2lkdGgsXG4gICAgICBoZWlnaHQ6IHByZXZpb3VzUmVjdC5oZWlnaHQsXG4gICAgICBib3R0b206IHByZXZpb3VzUmVjdC5ib3R0b20gKyByZWN0LmJvdHRvbSxcbiAgICAgIHJpZ2h0OiBwcmV2aW91c1JlY3QucmlnaHQgKyByZWN0LnJpZ2h0XG4gICAgfTtcbiAgfSk7XG59IC8vIENhbGN1bGF0ZSBhIGJvdW5kaW5nQ2xpZW50UmVjdCBmb3IgYSBub2RlIHJlbGF0aXZlIHRvIGJvdW5kYXJ5V2luZG93LFxuLy8gdGFraW5nIGludG8gYWNjb3VudCBhbnkgb2Zmc2V0cyBjYXVzZWQgYnkgaW50ZXJtZWRpYXRlIGlmcmFtZXMuXG5cbmZ1bmN0aW9uIGdldE5lc3RlZEJvdW5kaW5nQ2xpZW50UmVjdChub2RlLCBib3VuZGFyeVdpbmRvdykge1xuICB2YXIgb3duZXJJZnJhbWUgPSBnZXRPd25lcklmcmFtZShub2RlKTtcblxuICBpZiAob3duZXJJZnJhbWUgJiYgb3duZXJJZnJhbWUgIT09IGJvdW5kYXJ5V2luZG93KSB7XG4gICAgdmFyIHJlY3RzID0gW25vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCldO1xuICAgIHZhciBjdXJyZW50SWZyYW1lID0gb3duZXJJZnJhbWU7XG4gICAgdmFyIG9ubHlPbmVNb3JlID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoY3VycmVudElmcmFtZSkge1xuICAgICAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3RXaXRoQm9yZGVyT2Zmc2V0KGN1cnJlbnRJZnJhbWUpO1xuICAgICAgcmVjdHMucHVzaChyZWN0KTtcbiAgICAgIGN1cnJlbnRJZnJhbWUgPSBnZXRPd25lcklmcmFtZShjdXJyZW50SWZyYW1lKTtcblxuICAgICAgaWYgKG9ubHlPbmVNb3JlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBXZSBkb24ndCB3YW50IHRvIGNhbGN1bGF0ZSBpZnJhbWUgb2Zmc2V0cyB1cHdhcmRzIGJleW9uZFxuICAgICAgLy8gdGhlIGlmcmFtZSBjb250YWluaW5nIHRoZSBib3VuZGFyeVdpbmRvdywgYnV0IHdlXG4gICAgICAvLyBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBib3VuZGFyeVdpbmRvdy5cblxuXG4gICAgICBpZiAoY3VycmVudElmcmFtZSAmJiBnZXRPd25lcldpbmRvdyhjdXJyZW50SWZyYW1lKSA9PT0gYm91bmRhcnlXaW5kb3cpIHtcbiAgICAgICAgb25seU9uZU1vcmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZVJlY3RPZmZzZXRzKHJlY3RzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RWxlbWVudERpbWVuc2lvbnMoZG9tRWxlbWVudCkge1xuICB2YXIgY2FsY3VsYXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tRWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgYm9yZGVyTGVmdDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCwgMTApLFxuICAgIGJvcmRlclJpZ2h0OiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUuYm9yZGVyUmlnaHRXaWR0aCwgMTApLFxuICAgIGJvcmRlclRvcDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoLCAxMCksXG4gICAgYm9yZGVyQm90dG9tOiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwKSxcbiAgICBtYXJnaW5MZWZ0OiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUubWFyZ2luTGVmdCwgMTApLFxuICAgIG1hcmdpblJpZ2h0OiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUubWFyZ2luUmlnaHQsIDEwKSxcbiAgICBtYXJnaW5Ub3A6IHBhcnNlSW50KGNhbGN1bGF0ZWRTdHlsZS5tYXJnaW5Ub3AsIDEwKSxcbiAgICBtYXJnaW5Cb3R0b206IHBhcnNlSW50KGNhbGN1bGF0ZWRTdHlsZS5tYXJnaW5Cb3R0b20sIDEwKSxcbiAgICBwYWRkaW5nTGVmdDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLnBhZGRpbmdMZWZ0LCAxMCksXG4gICAgcGFkZGluZ1JpZ2h0OiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUucGFkZGluZ1JpZ2h0LCAxMCksXG4gICAgcGFkZGluZ1RvcDogcGFyc2VJbnQoY2FsY3VsYXRlZFN0eWxlLnBhZGRpbmdUb3AsIDEwKSxcbiAgICBwYWRkaW5nQm90dG9tOiBwYXJzZUludChjYWxjdWxhdGVkU3R5bGUucGFkZGluZ0JvdHRvbSwgMTApXG4gIH07XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3ZpZXdzL0hpZ2hsaWdodGVyL092ZXJsYXkuanNcbmZ1bmN0aW9uIE92ZXJsYXlfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBPdmVybGF5X2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBPdmVybGF5X2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgT3ZlcmxheV9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgT3ZlcmxheV9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxudmFyIE92ZXJsYXlfYXNzaWduID0gT2JqZWN0LmFzc2lnbjsgLy8gTm90ZSB0aGF0IHRoZSBPdmVybGF5IGNvbXBvbmVudHMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUgYWN0aXZlIFRoZW1lLFxuLy8gYmVjYXVzZSB0aGV5IGhpZ2hsaWdodCBlbGVtZW50cyBpbiB0aGUgbWFpbiBDaHJvbWUgd2luZG93IChvdXRzaWRlIG9mIGRldnRvb2xzKS5cbi8vIFRoZSBjb2xvcnMgYmVsb3cgd2VyZSBjaG9zZW4gdG8gcm91Z2hseSBtYXRjaCB0aG9zZSB1c2VkIGJ5IENocm9tZSBkZXZ0b29scy5cblxudmFyIE92ZXJsYXlSZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gT3ZlcmxheVJlY3QoZG9jLCBjb250YWluZXIpIHtcbiAgICBPdmVybGF5X2NsYXNzQ2FsbENoZWNrKHRoaXMsIE92ZXJsYXlSZWN0KTtcblxuICAgIHRoaXMubm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmJvcmRlciA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnBhZGRpbmcgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5jb250ZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuYm9yZGVyLnN0eWxlLmJvcmRlckNvbG9yID0gb3ZlcmxheVN0eWxlcy5ib3JkZXI7XG4gICAgdGhpcy5wYWRkaW5nLnN0eWxlLmJvcmRlckNvbG9yID0gb3ZlcmxheVN0eWxlcy5wYWRkaW5nO1xuICAgIHRoaXMuY29udGVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBvdmVybGF5U3R5bGVzLmJhY2tncm91bmQ7XG4gICAgT3ZlcmxheV9hc3NpZ24odGhpcy5ub2RlLnN0eWxlLCB7XG4gICAgICBib3JkZXJDb2xvcjogb3ZlcmxheVN0eWxlcy5tYXJnaW4sXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJ1xuICAgIH0pO1xuICAgIHRoaXMubm9kZS5zdHlsZS56SW5kZXggPSAnMTAwMDAwMDAnO1xuICAgIHRoaXMubm9kZS5hcHBlbmRDaGlsZCh0aGlzLmJvcmRlcik7XG4gICAgdGhpcy5ib3JkZXIuYXBwZW5kQ2hpbGQodGhpcy5wYWRkaW5nKTtcbiAgICB0aGlzLnBhZGRpbmcuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKTtcbiAgfVxuXG4gIE92ZXJsYXlfY3JlYXRlQ2xhc3MoT3ZlcmxheVJlY3QsIFt7XG4gICAga2V5OiBcInJlbW92ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICBpZiAodGhpcy5ub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5ub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZShib3gsIGRpbXMpIHtcbiAgICAgIGJveFdyYXAoZGltcywgJ21hcmdpbicsIHRoaXMubm9kZSk7XG4gICAgICBib3hXcmFwKGRpbXMsICdib3JkZXInLCB0aGlzLmJvcmRlcik7XG4gICAgICBib3hXcmFwKGRpbXMsICdwYWRkaW5nJywgdGhpcy5wYWRkaW5nKTtcbiAgICAgIE92ZXJsYXlfYXNzaWduKHRoaXMuY29udGVudC5zdHlsZSwge1xuICAgICAgICBoZWlnaHQ6IGJveC5oZWlnaHQgLSBkaW1zLmJvcmRlclRvcCAtIGRpbXMuYm9yZGVyQm90dG9tIC0gZGltcy5wYWRkaW5nVG9wIC0gZGltcy5wYWRkaW5nQm90dG9tICsgJ3B4JyxcbiAgICAgICAgd2lkdGg6IGJveC53aWR0aCAtIGRpbXMuYm9yZGVyTGVmdCAtIGRpbXMuYm9yZGVyUmlnaHQgLSBkaW1zLnBhZGRpbmdMZWZ0IC0gZGltcy5wYWRkaW5nUmlnaHQgKyAncHgnXG4gICAgICB9KTtcbiAgICAgIE92ZXJsYXlfYXNzaWduKHRoaXMubm9kZS5zdHlsZSwge1xuICAgICAgICB0b3A6IGJveC50b3AgLSBkaW1zLm1hcmdpblRvcCArICdweCcsXG4gICAgICAgIGxlZnQ6IGJveC5sZWZ0IC0gZGltcy5tYXJnaW5MZWZ0ICsgJ3B4J1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE92ZXJsYXlSZWN0O1xufSgpO1xuXG52YXIgT3ZlcmxheVRpcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE92ZXJsYXlUaXAoZG9jLCBjb250YWluZXIpIHtcbiAgICBPdmVybGF5X2NsYXNzQ2FsbENoZWNrKHRoaXMsIE92ZXJsYXlUaXApO1xuXG4gICAgdGhpcy50aXAgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgT3ZlcmxheV9hc3NpZ24odGhpcy50aXAuc3R5bGUsIHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGZsZXhGbG93OiAncm93IG5vd3JhcCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMzMzNzQwJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzJweCcsXG4gICAgICBmb250RmFtaWx5OiAnXCJTRk1vbm8tUmVndWxhclwiLCBDb25zb2xhcywgXCJMaWJlcmF0aW9uIE1vbm9cIiwgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZScsXG4gICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICBwYWRkaW5nOiAnM3B4IDVweCcsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xuICAgIH0pO1xuICAgIHRoaXMubmFtZVNwYW4gPSBkb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRoaXMudGlwLmFwcGVuZENoaWxkKHRoaXMubmFtZVNwYW4pO1xuICAgIE92ZXJsYXlfYXNzaWduKHRoaXMubmFtZVNwYW4uc3R5bGUsIHtcbiAgICAgIGNvbG9yOiAnI2VlNzhlNicsXG4gICAgICBib3JkZXJSaWdodDogJzFweCBzb2xpZCAjYWFhYWFhJyxcbiAgICAgIHBhZGRpbmdSaWdodDogJzAuNXJlbScsXG4gICAgICBtYXJnaW5SaWdodDogJzAuNXJlbSdcbiAgICB9KTtcbiAgICB0aGlzLmRpbVNwYW4gPSBkb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRoaXMudGlwLmFwcGVuZENoaWxkKHRoaXMuZGltU3Bhbik7XG4gICAgT3ZlcmxheV9hc3NpZ24odGhpcy5kaW1TcGFuLnN0eWxlLCB7XG4gICAgICBjb2xvcjogJyNkN2Q3ZDcnXG4gICAgfSk7XG4gICAgdGhpcy50aXAuc3R5bGUuekluZGV4ID0gJzEwMDAwMDAwJztcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50aXApO1xuICB9XG5cbiAgT3ZlcmxheV9jcmVhdGVDbGFzcyhPdmVybGF5VGlwLCBbe1xuICAgIGtleTogXCJyZW1vdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgaWYgKHRoaXMudGlwLnBhcmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnRpcCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZVRleHRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlVGV4dChuYW1lLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICB0aGlzLm5hbWVTcGFuLnRleHRDb250ZW50ID0gbmFtZTtcbiAgICAgIHRoaXMuZGltU3Bhbi50ZXh0Q29udGVudCA9IE1hdGgucm91bmQod2lkdGgpICsgJ3B4IMOXICcgKyBNYXRoLnJvdW5kKGhlaWdodCkgKyAncHgnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVQb3NpdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbihkaW1zLCBib3VuZHMpIHtcbiAgICAgIHZhciB0aXBSZWN0ID0gdGhpcy50aXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgdGlwUG9zID0gZmluZFRpcFBvcyhkaW1zLCBib3VuZHMsIHtcbiAgICAgICAgd2lkdGg6IHRpcFJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogdGlwUmVjdC5oZWlnaHRcbiAgICAgIH0pO1xuICAgICAgT3ZlcmxheV9hc3NpZ24odGhpcy50aXAuc3R5bGUsIHRpcFBvcy5zdHlsZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE92ZXJsYXlUaXA7XG59KCk7XG5cbnZhciBPdmVybGF5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gT3ZlcmxheShhZ2VudCkge1xuICAgIE92ZXJsYXlfY2xhc3NDYWxsQ2hlY2sodGhpcywgT3ZlcmxheSk7XG5cbiAgICAvLyBGaW5kIHRoZSByb290IHdpbmRvdywgYmVjYXVzZSBvdmVybGF5cyBhcmUgcG9zaXRpb25lZCByZWxhdGl2ZSB0byBpdC5cbiAgICB2YXIgY3VycmVudFdpbmRvdyA9IHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX1RBUkdFVF9XSU5ET1dfXyB8fCB3aW5kb3c7XG4gICAgdGhpcy53aW5kb3cgPSBjdXJyZW50V2luZG93OyAvLyBXaGVuIG9wZW5lZCBpbiBzaGVsbHMvZGV2LCB0aGUgdG9vbHRpcCBzaG91bGQgYmUgYm91bmQgYnkgdGhlIGFwcCBpZnJhbWUsIG5vdCBieSB0aGUgdG9wbW9zdCB3aW5kb3cuXG5cbiAgICB2YXIgdGlwQm91bmRzV2luZG93ID0gd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfVEFSR0VUX1dJTkRPV19fIHx8IHdpbmRvdztcbiAgICB0aGlzLnRpcEJvdW5kc1dpbmRvdyA9IHRpcEJvdW5kc1dpbmRvdztcbiAgICB2YXIgZG9jID0gY3VycmVudFdpbmRvdy5kb2N1bWVudDtcbiAgICB0aGlzLmNvbnRhaW5lciA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggPSAnMTAwMDAwMDAnO1xuICAgIHRoaXMudGlwID0gbmV3IE92ZXJsYXlUaXAoZG9jLCB0aGlzLmNvbnRhaW5lcik7XG4gICAgdGhpcy5yZWN0cyA9IFtdO1xuICAgIHRoaXMuYWdlbnQgPSBhZ2VudDtcbiAgICBkb2MuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7XG4gIH1cblxuICBPdmVybGF5X2NyZWF0ZUNsYXNzKE92ZXJsYXksIFt7XG4gICAga2V5OiBcInJlbW92ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICB0aGlzLnRpcC5yZW1vdmUoKTtcbiAgICAgIHRoaXMucmVjdHMuZm9yRWFjaChmdW5jdGlvbiAocmVjdCkge1xuICAgICAgICByZWN0LnJlbW92ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlY3RzLmxlbmd0aCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnNwZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc3BlY3Qobm9kZXMsIG5hbWUpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIC8vIFdlIGNhbid0IGdldCB0aGUgc2l6ZSBvZiB0ZXh0IG5vZGVzIG9yIGNvbW1lbnQgbm9kZXMuIFJlYWN0IGFzIG9mIHYxNVxuICAgICAgLy8gaGVhdmlseSB1c2VzIGNvbW1lbnQgbm9kZXMgdG8gZGVsaW1pdCB0ZXh0LlxuICAgICAgdmFyIGVsZW1lbnRzID0gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgICAgIH0pO1xuXG4gICAgICB3aGlsZSAodGhpcy5yZWN0cy5sZW5ndGggPiBlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHJlY3QgPSB0aGlzLnJlY3RzLnBvcCgpO1xuICAgICAgICByZWN0LnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHRoaXMucmVjdHMubGVuZ3RoIDwgZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucmVjdHMucHVzaChuZXcgT3ZlcmxheVJlY3QodGhpcy53aW5kb3cuZG9jdW1lbnQsIHRoaXMuY29udGFpbmVyKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvdXRlckJveCA9IHtcbiAgICAgICAgdG9wOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgICAgIHJpZ2h0OiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgICAgIGJvdHRvbTogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgICAgICBsZWZ0OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICAgIH07XG4gICAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xuICAgICAgICB2YXIgYm94ID0gZ2V0TmVzdGVkQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIF90aGlzLndpbmRvdyk7XG4gICAgICAgIHZhciBkaW1zID0gZ2V0RWxlbWVudERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgICAgIG91dGVyQm94LnRvcCA9IE1hdGgubWluKG91dGVyQm94LnRvcCwgYm94LnRvcCAtIGRpbXMubWFyZ2luVG9wKTtcbiAgICAgICAgb3V0ZXJCb3gucmlnaHQgPSBNYXRoLm1heChvdXRlckJveC5yaWdodCwgYm94LmxlZnQgKyBib3gud2lkdGggKyBkaW1zLm1hcmdpblJpZ2h0KTtcbiAgICAgICAgb3V0ZXJCb3guYm90dG9tID0gTWF0aC5tYXgob3V0ZXJCb3guYm90dG9tLCBib3gudG9wICsgYm94LmhlaWdodCArIGRpbXMubWFyZ2luQm90dG9tKTtcbiAgICAgICAgb3V0ZXJCb3gubGVmdCA9IE1hdGgubWluKG91dGVyQm94LmxlZnQsIGJveC5sZWZ0IC0gZGltcy5tYXJnaW5MZWZ0KTtcbiAgICAgICAgdmFyIHJlY3QgPSBfdGhpcy5yZWN0c1tpbmRleF07XG4gICAgICAgIHJlY3QudXBkYXRlKGJveCwgZGltcyk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBlbGVtZW50c1swXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YXIgbm9kZSA9IGVsZW1lbnRzWzBdO1xuICAgICAgICB2YXIgcmVuZGVyZXJJbnRlcmZhY2UgPSB0aGlzLmFnZW50LmdldEJlc3RNYXRjaGluZ1JlbmRlcmVySW50ZXJmYWNlKG5vZGUpO1xuXG4gICAgICAgIGlmIChyZW5kZXJlckludGVyZmFjZSkge1xuICAgICAgICAgIHZhciBpZCA9IHJlbmRlcmVySW50ZXJmYWNlLmdldEZpYmVySURGb3JOYXRpdmUobm9kZSwgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIHZhciBvd25lck5hbWUgPSByZW5kZXJlckludGVyZmFjZS5nZXREaXNwbGF5TmFtZUZvckZpYmVySUQoaWQsIHRydWUpO1xuXG4gICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIG5hbWUgKz0gJyAoaW4gJyArIG93bmVyTmFtZSArICcpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy50aXAudXBkYXRlVGV4dChuYW1lLCBvdXRlckJveC5yaWdodCAtIG91dGVyQm94LmxlZnQsIG91dGVyQm94LmJvdHRvbSAtIG91dGVyQm94LnRvcCk7XG4gICAgICB2YXIgdGlwQm91bmRzID0gZ2V0TmVzdGVkQm91bmRpbmdDbGllbnRSZWN0KHRoaXMudGlwQm91bmRzV2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy53aW5kb3cpO1xuICAgICAgdGhpcy50aXAudXBkYXRlUG9zaXRpb24oe1xuICAgICAgICB0b3A6IG91dGVyQm94LnRvcCxcbiAgICAgICAgbGVmdDogb3V0ZXJCb3gubGVmdCxcbiAgICAgICAgaGVpZ2h0OiBvdXRlckJveC5ib3R0b20gLSBvdXRlckJveC50b3AsXG4gICAgICAgIHdpZHRoOiBvdXRlckJveC5yaWdodCAtIG91dGVyQm94LmxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdG9wOiB0aXBCb3VuZHMudG9wICsgdGhpcy50aXBCb3VuZHNXaW5kb3cuc2Nyb2xsWSxcbiAgICAgICAgbGVmdDogdGlwQm91bmRzLmxlZnQgKyB0aGlzLnRpcEJvdW5kc1dpbmRvdy5zY3JvbGxYLFxuICAgICAgICBoZWlnaHQ6IHRoaXMudGlwQm91bmRzV2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICB3aWR0aDogdGhpcy50aXBCb3VuZHNXaW5kb3cuaW5uZXJXaWR0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE92ZXJsYXk7XG59KCk7XG5cblxuXG5mdW5jdGlvbiBmaW5kVGlwUG9zKGRpbXMsIGJvdW5kcywgdGlwU2l6ZSkge1xuICB2YXIgdGlwSGVpZ2h0ID0gTWF0aC5tYXgodGlwU2l6ZS5oZWlnaHQsIDIwKTtcbiAgdmFyIHRpcFdpZHRoID0gTWF0aC5tYXgodGlwU2l6ZS53aWR0aCwgNjApO1xuICB2YXIgbWFyZ2luID0gNTtcbiAgdmFyIHRvcDtcblxuICBpZiAoZGltcy50b3AgKyBkaW1zLmhlaWdodCArIHRpcEhlaWdodCA8PSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCkge1xuICAgIGlmIChkaW1zLnRvcCArIGRpbXMuaGVpZ2h0IDwgYm91bmRzLnRvcCArIDApIHtcbiAgICAgIHRvcCA9IGJvdW5kcy50b3AgKyBtYXJnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IGRpbXMudG9wICsgZGltcy5oZWlnaHQgKyBtYXJnaW47XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpbXMudG9wIC0gdGlwSGVpZ2h0IDw9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0KSB7XG4gICAgaWYgKGRpbXMudG9wIC0gdGlwSGVpZ2h0IC0gbWFyZ2luIDwgYm91bmRzLnRvcCArIG1hcmdpbikge1xuICAgICAgdG9wID0gYm91bmRzLnRvcCArIG1hcmdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9wID0gZGltcy50b3AgLSB0aXBIZWlnaHQgLSBtYXJnaW47XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcCA9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gdGlwSGVpZ2h0IC0gbWFyZ2luO1xuICB9XG5cbiAgdmFyIGxlZnQgPSBkaW1zLmxlZnQgKyBtYXJnaW47XG5cbiAgaWYgKGRpbXMubGVmdCA8IGJvdW5kcy5sZWZ0KSB7XG4gICAgbGVmdCA9IGJvdW5kcy5sZWZ0ICsgbWFyZ2luO1xuICB9XG5cbiAgaWYgKGRpbXMubGVmdCArIHRpcFdpZHRoID4gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGgpIHtcbiAgICBsZWZ0ID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSB0aXBXaWR0aCAtIG1hcmdpbjtcbiAgfVxuXG4gIHRvcCArPSAncHgnO1xuICBsZWZ0ICs9ICdweCc7XG4gIHJldHVybiB7XG4gICAgc3R5bGU6IHtcbiAgICAgIHRvcDogdG9wLFxuICAgICAgbGVmdDogbGVmdFxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYm94V3JhcChkaW1zLCB3aGF0LCBub2RlKSB7XG4gIE92ZXJsYXlfYXNzaWduKG5vZGUuc3R5bGUsIHtcbiAgICBib3JkZXJUb3BXaWR0aDogZGltc1t3aGF0ICsgJ1RvcCddICsgJ3B4JyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IGRpbXNbd2hhdCArICdMZWZ0J10gKyAncHgnLFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IGRpbXNbd2hhdCArICdSaWdodCddICsgJ3B4JyxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogZGltc1t3aGF0ICsgJ0JvdHRvbSddICsgJ3B4JyxcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJ1xuICB9KTtcbn1cblxudmFyIG92ZXJsYXlTdHlsZXMgPSB7XG4gIGJhY2tncm91bmQ6ICdyZ2JhKDEyMCwgMTcwLCAyMTAsIDAuNyknLFxuICBwYWRkaW5nOiAncmdiYSg3NywgMjAwLCAwLCAwLjMpJyxcbiAgbWFyZ2luOiAncmdiYSgyNTUsIDE1NSwgMCwgMC4zKScsXG4gIGJvcmRlcjogJ3JnYmEoMjU1LCAyMDAsIDUwLCAwLjMpJ1xufTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvdmlld3MvSGlnaGxpZ2h0ZXIvSGlnaGxpZ2h0ZXIuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cbnZhciBTSE9XX0RVUkFUSU9OID0gMjAwMDtcbnZhciB0aW1lb3V0SUQgPSBudWxsO1xudmFyIG92ZXJsYXkgPSBudWxsO1xuXG5mdW5jdGlvbiBoaWRlT3ZlcmxheU5hdGl2ZShhZ2VudCkge1xuICBhZ2VudC5lbWl0KCdoaWRlTmF0aXZlSGlnaGxpZ2h0Jyk7XG59XG5cbmZ1bmN0aW9uIGhpZGVPdmVybGF5V2ViKCkge1xuICB0aW1lb3V0SUQgPSBudWxsO1xuXG4gIGlmIChvdmVybGF5ICE9PSBudWxsKSB7XG4gICAgb3ZlcmxheS5yZW1vdmUoKTtcbiAgICBvdmVybGF5ID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3ZlcmxheShhZ2VudCkge1xuICByZXR1cm4gaXNSZWFjdE5hdGl2ZUVudmlyb25tZW50KCkgPyBoaWRlT3ZlcmxheU5hdGl2ZShhZ2VudCkgOiBoaWRlT3ZlcmxheVdlYigpO1xufVxuXG5mdW5jdGlvbiBzaG93T3ZlcmxheU5hdGl2ZShlbGVtZW50cywgYWdlbnQpIHtcbiAgYWdlbnQuZW1pdCgnc2hvd05hdGl2ZUhpZ2hsaWdodCcsIGVsZW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gc2hvd092ZXJsYXlXZWIoZWxlbWVudHMsIGNvbXBvbmVudE5hbWUsIGFnZW50LCBoaWRlQWZ0ZXJUaW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTtcbiAgfVxuXG4gIGlmIChvdmVybGF5ID09PSBudWxsKSB7XG4gICAgb3ZlcmxheSA9IG5ldyBPdmVybGF5KGFnZW50KTtcbiAgfVxuXG4gIG92ZXJsYXkuaW5zcGVjdChlbGVtZW50cywgY29tcG9uZW50TmFtZSk7XG5cbiAgaWYgKGhpZGVBZnRlclRpbWVvdXQpIHtcbiAgICB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBoaWRlT3ZlcmxheShhZ2VudCk7XG4gICAgfSwgU0hPV19EVVJBVElPTik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvd092ZXJsYXkoZWxlbWVudHMsIGNvbXBvbmVudE5hbWUsIGFnZW50LCBoaWRlQWZ0ZXJUaW1lb3V0KSB7XG4gIHJldHVybiBpc1JlYWN0TmF0aXZlRW52aXJvbm1lbnQoKSA/IHNob3dPdmVybGF5TmF0aXZlKGVsZW1lbnRzLCBhZ2VudCkgOiBzaG93T3ZlcmxheVdlYihlbGVtZW50cywgY29tcG9uZW50TmFtZSwgYWdlbnQsIGhpZGVBZnRlclRpbWVvdXQpO1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC92aWV3cy9IaWdobGlnaHRlci9pbmRleC5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cbi8vIFRoaXMgcGx1Zy1pbiBwcm92aWRlcyBpbi1wYWdlIGhpZ2hsaWdodGluZyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbi8vIEl0IGlzIHVzZWQgYnkgdGhlIGJyb3dzZXIgZXh0ZW5zaW9uIGFuZCB0aGUgc3RhbmRhbG9uZSBEZXZUb29scyBzaGVsbCAod2hlbiBjb25uZWN0ZWQgdG8gYSBicm93c2VyKS5cbi8vIEl0IGlzIG5vdCBjdXJyZW50bHkgdGhlIG1lY2hhbmlzbSB1c2VkIHRvIGhpZ2hsaWdodCBSZWFjdCBOYXRpdmUgdmlld3MuXG4vLyBUaGF0IGlzIGRvbmUgYnkgdGhlIFJlYWN0IE5hdGl2ZSBJbnNwZWN0b3IgY29tcG9uZW50LlxudmFyIGlmcmFtZXNMaXN0ZW5pbmdUbyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIHNldHVwSGlnaGxpZ2h0ZXIoYnJpZGdlLCBhZ2VudCkge1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2NsZWFyTmF0aXZlRWxlbWVudEhpZ2hsaWdodCcsIGNsZWFyTmF0aXZlRWxlbWVudEhpZ2hsaWdodCk7XG4gIGJyaWRnZS5hZGRMaXN0ZW5lcignaGlnaGxpZ2h0TmF0aXZlRWxlbWVudCcsIGhpZ2hsaWdodE5hdGl2ZUVsZW1lbnQpO1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3NodXRkb3duJywgc3RvcEluc3BlY3RpbmdOYXRpdmUpO1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N0YXJ0SW5zcGVjdGluZ05hdGl2ZScsIHN0YXJ0SW5zcGVjdGluZ05hdGl2ZSk7XG4gIGJyaWRnZS5hZGRMaXN0ZW5lcignc3RvcEluc3BlY3RpbmdOYXRpdmUnLCBzdG9wSW5zcGVjdGluZ05hdGl2ZSk7XG5cbiAgZnVuY3Rpb24gc3RhcnRJbnNwZWN0aW5nTmF0aXZlKCkge1xuICAgIHJlZ2lzdGVyTGlzdGVuZXJzT25XaW5kb3cod2luZG93KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyTGlzdGVuZXJzT25XaW5kb3cod2luZG93KSB7XG4gICAgLy8gVGhpcyBwbHVnLWluIG1heSBydW4gaW4gbm9uLURPTSBlbnZpcm9ubWVudHMgKGUuZy4gUmVhY3QgTmF0aXZlKS5cbiAgICBpZiAod2luZG93ICYmIHR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25DbGljaywgdHJ1ZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZUV2ZW50LCB0cnVlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBvbk1vdXNlRXZlbnQsIHRydWUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlRXZlbnQsIHRydWUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25Qb2ludGVyRG93biwgdHJ1ZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvblBvaW50ZXJNb3ZlLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvblBvaW50ZXJVcCwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFnZW50LmVtaXQoJ3N0YXJ0SW5zcGVjdGluZ05hdGl2ZScpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BJbnNwZWN0aW5nTmF0aXZlKCkge1xuICAgIGhpZGVPdmVybGF5KGFnZW50KTtcbiAgICByZW1vdmVMaXN0ZW5lcnNPbldpbmRvdyh3aW5kb3cpO1xuICAgIGlmcmFtZXNMaXN0ZW5pbmdUby5mb3JFYWNoKGZ1bmN0aW9uIChmcmFtZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXJzT25XaW5kb3coZnJhbWUuY29udGVudFdpbmRvdyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikgey8vIFRoaXMgY2FuIGVycm9yIHdoZW4gdGhlIGlmcmFtZSBpcyBvbiBhIGNyb3NzLW9yaWdpbi5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZnJhbWVzTGlzdGVuaW5nVG8gPSBuZXcgU2V0KCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnNPbldpbmRvdyh3aW5kb3cpIHtcbiAgICAvLyBUaGlzIHBsdWctaW4gbWF5IHJ1biBpbiBub24tRE9NIGVudmlyb25tZW50cyAoZS5nLiBSZWFjdCBOYXRpdmUpLlxuICAgIGlmICh3aW5kb3cgJiYgdHlwZW9mIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsaWNrLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRXZlbnQsIHRydWUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIG9uTW91c2VFdmVudCwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VFdmVudCwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUsIHRydWUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIG9uUG9pbnRlclVwLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWdlbnQuZW1pdCgnc3RvcEluc3BlY3RpbmdOYXRpdmUnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhck5hdGl2ZUVsZW1lbnRIaWdobGlnaHQoKSB7XG4gICAgaGlkZU92ZXJsYXkoYWdlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0TmF0aXZlRWxlbWVudChfcmVmKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZSxcbiAgICAgICAgaGlkZUFmdGVyVGltZW91dCA9IF9yZWYuaGlkZUFmdGVyVGltZW91dCxcbiAgICAgICAgaWQgPSBfcmVmLmlkLFxuICAgICAgICBvcGVuTmF0aXZlRWxlbWVudHNQYW5lbCA9IF9yZWYub3Blbk5hdGl2ZUVsZW1lbnRzUGFuZWwsXG4gICAgICAgIHJlbmRlcmVySUQgPSBfcmVmLnJlbmRlcmVySUQsXG4gICAgICAgIHNjcm9sbEludG9WaWV3ID0gX3JlZi5zY3JvbGxJbnRvVmlldztcbiAgICB2YXIgcmVuZGVyZXIgPSBhZ2VudC5yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIGhpZGVPdmVybGF5KGFnZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHNvbWUgY2FzZXMgZmliZXIgbWF5IGFscmVhZHkgYmUgdW5tb3VudGVkXG5cblxuICAgIGlmICghcmVuZGVyZXIuaGFzRmliZXJXaXRoSWQoaWQpKSB7XG4gICAgICBoaWRlT3ZlcmxheShhZ2VudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vZGVzID0gcmVuZGVyZXIuZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRChpZCk7XG5cbiAgICBpZiAobm9kZXMgIT0gbnVsbCAmJiBub2Rlc1swXSAhPSBudWxsKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzWzBdOyAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG5cbiAgICAgIGlmIChzY3JvbGxJbnRvVmlldyAmJiB0eXBlb2Ygbm9kZS5zY3JvbGxJbnRvVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBJZiB0aGUgbm9kZSBpc24ndCB2aXNpYmxlIHNob3cgaXQgYmVmb3JlIGhpZ2hsaWdodGluZyBpdC5cbiAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gcmVjb25zaWRlciB0aGlzOyBpdCBtaWdodCBiZSBhIGxpdHRsZSBkaXNydXB0aXZlLlxuICAgICAgICBub2RlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICAgIGlubGluZTogJ25lYXJlc3QnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzaG93T3ZlcmxheShub2RlcywgZGlzcGxheU5hbWUsIGFnZW50LCBoaWRlQWZ0ZXJUaW1lb3V0KTtcblxuICAgICAgaWYgKG9wZW5OYXRpdmVFbGVtZW50c1BhbmVsKSB7XG4gICAgICAgIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uJDAgPSBub2RlO1xuICAgICAgICBicmlkZ2Uuc2VuZCgnc3luY1NlbGVjdGlvblRvTmF0aXZlRWxlbWVudHNQYW5lbCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoaWRlT3ZlcmxheShhZ2VudCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc3RvcEluc3BlY3RpbmdOYXRpdmUoKTtcbiAgICBicmlkZ2Uuc2VuZCgnc3RvcEluc3BlY3RpbmdOYXRpdmUnLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW91c2VFdmVudChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzZWxlY3RGaWJlckZvck5vZGUoZ2V0RXZlbnRUYXJnZXQoZXZlbnQpKTtcbiAgfVxuXG4gIHZhciBsYXN0SG92ZXJlZE5vZGUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlck1vdmUoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgaWYgKGxhc3RIb3ZlcmVkTm9kZSA9PT0gdGFyZ2V0KSByZXR1cm47XG4gICAgbGFzdEhvdmVyZWROb2RlID0gdGFyZ2V0O1xuXG4gICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSUZSQU1FJykge1xuICAgICAgdmFyIGlmcmFtZSA9IHRhcmdldDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpZnJhbWVzTGlzdGVuaW5nVG8uaGFzKGlmcmFtZSkpIHtcbiAgICAgICAgICB2YXIgX3dpbmRvdyA9IGlmcmFtZS5jb250ZW50V2luZG93O1xuICAgICAgICAgIHJlZ2lzdGVyTGlzdGVuZXJzT25XaW5kb3coX3dpbmRvdyk7XG4gICAgICAgICAgaWZyYW1lc0xpc3RlbmluZ1RvLmFkZChpZnJhbWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikgey8vIFRoaXMgY2FuIGVycm9yIHdoZW4gdGhlIGlmcmFtZSBpcyBvbiBhIGNyb3NzLW9yaWdpbi5cbiAgICAgIH1cbiAgICB9IC8vIERvbid0IHBhc3MgdGhlIG5hbWUgZXhwbGljaXRseS5cbiAgICAvLyBJdCB3aWxsIGJlIGluZmVycmVkIGZyb20gRE9NIHRhZyBhbmQgRmliZXIgb3duZXIuXG5cblxuICAgIHNob3dPdmVybGF5KFt0YXJnZXRdLCBudWxsLCBhZ2VudCwgZmFsc2UpO1xuICAgIHNlbGVjdEZpYmVyRm9yTm9kZSh0YXJnZXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyVXAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgdmFyIHNlbGVjdEZpYmVyRm9yTm9kZSA9IGxvZGFzaF90aHJvdHRsZV9kZWZhdWx0KCkoZXNtKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGlkID0gYWdlbnQuZ2V0SURGb3JOb2RlKG5vZGUpO1xuXG4gICAgaWYgKGlkICE9PSBudWxsKSB7XG4gICAgICBicmlkZ2Uuc2VuZCgnc2VsZWN0RmliZXInLCBpZCk7XG4gICAgfVxuICB9KSwgMjAwLCAvLyBEb24ndCBjaGFuZ2UgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdmVyeSBmaXJzdCAyMDBtc1xuICAvLyBiZWNhdXNlIHRob3NlIGFyZSB1c3VhbGx5IHVuaW50ZW50aW9uYWwgYXMgeW91IGxpZnQgdGhlIGN1cnNvci5cbiAge1xuICAgIGxlYWRpbmc6IGZhbHNlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNvbXBvc2VkKSB7XG4gICAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldDtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC92aWV3cy9UcmFjZVVwZGF0ZXMvY2FudmFzLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxudmFyIE9VVExJTkVfQ09MT1IgPSAnI2YwZjBmMCc7IC8vIE5vdGUgdGhlc2UgY29sb3JzIGFyZSBpbiBzeW5jIHdpdGggRGV2VG9vbHMgUHJvZmlsZXIgY2hhcnQgY29sb3JzLlxuXG52YXIgQ09MT1JTID0gWycjMzdhZmE5JywgJyM2M2IxOWUnLCAnIzgwYjM5MycsICcjOTdiNDg4JywgJyNhYmI2N2QnLCAnI2JlYjc3MScsICcjY2ZiOTY1JywgJyNkZmJhNTcnLCAnI2VmYmI0OScsICcjZmViYzM4J107XG52YXIgY2FudmFzID0gbnVsbDtcblxuZnVuY3Rpb24gZHJhd05hdGl2ZShub2RlVG9EYXRhLCBhZ2VudCkge1xuICB2YXIgbm9kZXNUb0RyYXcgPSBbXTtcbiAgaXRlcmF0ZU5vZGVzKG5vZGVUb0RhdGEsIGZ1bmN0aW9uIChfLCBjb2xvciwgbm9kZSkge1xuICAgIG5vZGVzVG9EcmF3LnB1c2goe1xuICAgICAgbm9kZTogbm9kZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pO1xuICB9KTtcbiAgYWdlbnQuZW1pdCgnZHJhd1RyYWNlVXBkYXRlcycsIG5vZGVzVG9EcmF3KTtcbn1cblxuZnVuY3Rpb24gZHJhd1dlYihub2RlVG9EYXRhKSB7XG4gIGlmIChjYW52YXMgPT09IG51bGwpIHtcbiAgICBpbml0aWFsaXplKCk7XG4gIH1cblxuICB2YXIgY2FudmFzRmxvdyA9IGNhbnZhcztcbiAgY2FudmFzRmxvdy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICBjYW52YXNGbG93LmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgdmFyIGNvbnRleHQgPSBjYW52YXNGbG93LmdldENvbnRleHQoJzJkJyk7XG4gIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhc0Zsb3cud2lkdGgsIGNhbnZhc0Zsb3cuaGVpZ2h0KTtcbiAgaXRlcmF0ZU5vZGVzKG5vZGVUb0RhdGEsIGZ1bmN0aW9uIChyZWN0LCBjb2xvcikge1xuICAgIGlmIChyZWN0ICE9PSBudWxsKSB7XG4gICAgICBkcmF3Qm9yZGVyKGNvbnRleHQsIHJlY3QsIGNvbG9yKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkcmF3KG5vZGVUb0RhdGEsIGFnZW50KSB7XG4gIHJldHVybiBpc1JlYWN0TmF0aXZlRW52aXJvbm1lbnQoKSA/IGRyYXdOYXRpdmUobm9kZVRvRGF0YSwgYWdlbnQpIDogZHJhd1dlYihub2RlVG9EYXRhKTtcbn1cblxuZnVuY3Rpb24gaXRlcmF0ZU5vZGVzKG5vZGVUb0RhdGEsIGV4ZWN1dGUpIHtcbiAgbm9kZVRvRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmLCBub2RlKSB7XG4gICAgdmFyIGNvdW50ID0gX3JlZi5jb3VudCxcbiAgICAgICAgcmVjdCA9IF9yZWYucmVjdDtcbiAgICB2YXIgY29sb3JJbmRleCA9IE1hdGgubWluKENPTE9SUy5sZW5ndGggLSAxLCBjb3VudCAtIDEpO1xuICAgIHZhciBjb2xvciA9IENPTE9SU1tjb2xvckluZGV4XTtcbiAgICBleGVjdXRlKHJlY3QsIGNvbG9yLCBub2RlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRyYXdCb3JkZXIoY29udGV4dCwgcmVjdCwgY29sb3IpIHtcbiAgdmFyIGhlaWdodCA9IHJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdCA9IHJlY3QubGVmdCxcbiAgICAgIHRvcCA9IHJlY3QudG9wLFxuICAgICAgd2lkdGggPSByZWN0LndpZHRoOyAvLyBvdXRsaW5lXG5cbiAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gT1VUTElORV9DT0xPUjtcbiAgY29udGV4dC5zdHJva2VSZWN0KGxlZnQgLSAxLCB0b3AgLSAxLCB3aWR0aCArIDIsIGhlaWdodCArIDIpOyAvLyBpbnNldFxuXG4gIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9IE9VVExJTkVfQ09MT1I7XG4gIGNvbnRleHQuc3Ryb2tlUmVjdChsZWZ0ICsgMSwgdG9wICsgMSwgd2lkdGggLSAxLCBoZWlnaHQgLSAxKTtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICBjb250ZXh0LnNldExpbmVEYXNoKFswXSk7IC8vIGJvcmRlclxuXG4gIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgY29udGV4dC5zdHJva2VSZWN0KGxlZnQsIHRvcCwgd2lkdGggLSAxLCBoZWlnaHQgLSAxKTtcbiAgY29udGV4dC5zZXRMaW5lRGFzaChbMF0pO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95TmF0aXZlKGFnZW50KSB7XG4gIGFnZW50LmVtaXQoJ2Rpc2FibGVUcmFjZVVwZGF0ZXMnKTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveVdlYigpIHtcbiAgaWYgKGNhbnZhcyAhPT0gbnVsbCkge1xuICAgIGlmIChjYW52YXMucGFyZW50Tm9kZSAhPSBudWxsKSB7XG4gICAgICBjYW52YXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjYW52YXMpO1xuICAgIH1cblxuICAgIGNhbnZhcyA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveShhZ2VudCkge1xuICByZXR1cm4gaXNSZWFjdE5hdGl2ZUVudmlyb25tZW50KCkgPyBkZXN0cm95TmF0aXZlKGFnZW50KSA6IGRlc3Ryb3lXZWIoKTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgY2FudmFzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICBjYW52YXMuc3R5bGUuY3NzVGV4dCA9IFwiXFxuICAgIHh4LWJhY2tncm91bmQtY29sb3I6IHJlZDtcXG4gICAgeHgtb3BhY2l0eTogMC41O1xcbiAgICBib3R0b206IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICB0b3A6IDA7XFxuICAgIHotaW5kZXg6IDEwMDAwMDAwMDA7XFxuICBcIjtcbiAgdmFyIHJvb3QgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICByb290Lmluc2VydEJlZm9yZShjYW52YXMsIHJvb3QuZmlyc3RDaGlsZCk7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL3ZpZXdzL1RyYWNlVXBkYXRlcy9pbmRleC5qc1xuZnVuY3Rpb24gVHJhY2VVcGRhdGVzX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgVHJhY2VVcGRhdGVzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBUcmFjZVVwZGF0ZXNfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIFRyYWNlVXBkYXRlc190eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuXG5cbi8vIEhvdyBsb25nIHRoZSByZWN0IHNob3VsZCBiZSBzaG93biBmb3I/XG52YXIgRElTUExBWV9EVVJBVElPTiA9IDI1MDsgLy8gV2hhdCdzIHRoZSBsb25nZXN0IHdlIGFyZSB3aWxsaW5nIHRvIHNob3cgdGhlIG92ZXJsYXkgZm9yP1xuLy8gVGhpcyBjYW4gYmUgaW1wb3J0YW50IGlmIHdlJ3JlIGdldHRpbmcgYSBmbHVycnkgb2YgZXZlbnRzIChlLmcuIHNjcm9sbCB1cGRhdGUpLlxuXG52YXIgTUFYX0RJU1BMQVlfRFVSQVRJT04gPSAzMDAwOyAvLyBIb3cgbG9uZyBzaG91bGQgYSByZWN0IGJlIGNvbnNpZGVyZWQgdmFsaWQgZm9yP1xuXG52YXIgUkVNRUFTVVJFTUVOVF9BRlRFUl9EVVJBVElPTiA9IDI1MDsgLy8gU29tZSBlbnZpcm9ubWVudHMgKGUuZy4gUmVhY3QgTmF0aXZlIC8gSGVybWVzKSBkb24ndCBzdXBwb3J0IHRoZSBwZXJmb3JtYW5jZSBBUEkgeWV0LlxuXG52YXIgZ2V0Q3VycmVudFRpbWUgPSAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4odHlwZW9mIHBlcmZvcm1hbmNlID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IFRyYWNlVXBkYXRlc190eXBlb2YocGVyZm9ybWFuY2UpKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xudmFyIG5vZGVUb0RhdGEgPSBuZXcgTWFwKCk7XG52YXIgYWdlbnQgPSBudWxsO1xudmFyIGRyYXdBbmltYXRpb25GcmFtZUlEID0gbnVsbDtcbnZhciBpc0VuYWJsZWQgPSBmYWxzZTtcbnZhciByZWRyYXdUaW1lb3V0SUQgPSBudWxsO1xuZnVuY3Rpb24gVHJhY2VVcGRhdGVzX2luaXRpYWxpemUoaW5qZWN0ZWRBZ2VudCkge1xuICBhZ2VudCA9IGluamVjdGVkQWdlbnQ7XG4gIGFnZW50LmFkZExpc3RlbmVyKCd0cmFjZVVwZGF0ZXMnLCB0cmFjZVVwZGF0ZXMpO1xufVxuZnVuY3Rpb24gdG9nZ2xlRW5hYmxlZCh2YWx1ZSkge1xuICBpc0VuYWJsZWQgPSB2YWx1ZTtcblxuICBpZiAoIWlzRW5hYmxlZCkge1xuICAgIG5vZGVUb0RhdGEuY2xlYXIoKTtcblxuICAgIGlmIChkcmF3QW5pbWF0aW9uRnJhbWVJRCAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZHJhd0FuaW1hdGlvbkZyYW1lSUQpO1xuICAgICAgZHJhd0FuaW1hdGlvbkZyYW1lSUQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWRyYXdUaW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dChyZWRyYXdUaW1lb3V0SUQpO1xuICAgICAgcmVkcmF3VGltZW91dElEID0gbnVsbDtcbiAgICB9XG5cbiAgICBkZXN0cm95KGFnZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZVVwZGF0ZXMobm9kZXMpIHtcbiAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGRhdGEgPSBub2RlVG9EYXRhLmdldChub2RlKTtcbiAgICB2YXIgbm93ID0gZ2V0Q3VycmVudFRpbWUoKTtcbiAgICB2YXIgbGFzdE1lYXN1cmVkQXQgPSBkYXRhICE9IG51bGwgPyBkYXRhLmxhc3RNZWFzdXJlZEF0IDogMDtcbiAgICB2YXIgcmVjdCA9IGRhdGEgIT0gbnVsbCA/IGRhdGEucmVjdCA6IG51bGw7XG5cbiAgICBpZiAocmVjdCA9PT0gbnVsbCB8fCBsYXN0TWVhc3VyZWRBdCArIFJFTUVBU1VSRU1FTlRfQUZURVJfRFVSQVRJT04gPCBub3cpIHtcbiAgICAgIGxhc3RNZWFzdXJlZEF0ID0gbm93O1xuICAgICAgcmVjdCA9IG1lYXN1cmVOb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIG5vZGVUb0RhdGEuc2V0KG5vZGUsIHtcbiAgICAgIGNvdW50OiBkYXRhICE9IG51bGwgPyBkYXRhLmNvdW50ICsgMSA6IDEsXG4gICAgICBleHBpcmF0aW9uVGltZTogZGF0YSAhPSBudWxsID8gTWF0aC5taW4obm93ICsgTUFYX0RJU1BMQVlfRFVSQVRJT04sIGRhdGEuZXhwaXJhdGlvblRpbWUgKyBESVNQTEFZX0RVUkFUSU9OKSA6IG5vdyArIERJU1BMQVlfRFVSQVRJT04sXG4gICAgICBsYXN0TWVhc3VyZWRBdDogbGFzdE1lYXN1cmVkQXQsXG4gICAgICByZWN0OiByZWN0XG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChyZWRyYXdUaW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICBjbGVhclRpbWVvdXQocmVkcmF3VGltZW91dElEKTtcbiAgICByZWRyYXdUaW1lb3V0SUQgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRyYXdBbmltYXRpb25GcmFtZUlEID09PSBudWxsKSB7XG4gICAgZHJhd0FuaW1hdGlvbkZyYW1lSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocHJlcGFyZVRvRHJhdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvRHJhdygpIHtcbiAgZHJhd0FuaW1hdGlvbkZyYW1lSUQgPSBudWxsO1xuICByZWRyYXdUaW1lb3V0SUQgPSBudWxsO1xuICB2YXIgbm93ID0gZ2V0Q3VycmVudFRpbWUoKTtcbiAgdmFyIGVhcmxpZXN0RXhwaXJhdGlvbiA9IE51bWJlci5NQVhfVkFMVUU7IC8vIFJlbW92ZSBhbnkgaXRlbXMgdGhhdCBoYXZlIGFscmVhZHkgZXhwaXJlZC5cblxuICBub2RlVG9EYXRhLmZvckVhY2goZnVuY3Rpb24gKGRhdGEsIG5vZGUpIHtcbiAgICBpZiAoZGF0YS5leHBpcmF0aW9uVGltZSA8IG5vdykge1xuICAgICAgbm9kZVRvRGF0YS5kZWxldGUobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVhcmxpZXN0RXhwaXJhdGlvbiA9IE1hdGgubWluKGVhcmxpZXN0RXhwaXJhdGlvbiwgZGF0YS5leHBpcmF0aW9uVGltZSk7XG4gICAgfVxuICB9KTtcbiAgZHJhdyhub2RlVG9EYXRhLCBhZ2VudCk7XG5cbiAgaWYgKGVhcmxpZXN0RXhwaXJhdGlvbiAhPT0gTnVtYmVyLk1BWF9WQUxVRSkge1xuICAgIHJlZHJhd1RpbWVvdXRJRCA9IHNldFRpbWVvdXQocHJlcGFyZVRvRHJhdywgZWFybGllc3RFeHBpcmF0aW9uIC0gbm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZWFzdXJlTm9kZShub2RlKSB7XG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBjdXJyZW50V2luZG93ID0gd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfVEFSR0VUX1dJTkRPV19fIHx8IHdpbmRvdztcbiAgcmV0dXJuIGdldE5lc3RlZEJvdW5kaW5nQ2xpZW50UmVjdChub2RlLCBjdXJyZW50V2luZG93KTtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi4vLi4vYnVpbGQvb3NzLWV4cGVyaW1lbnRhbC9yZWFjdC1kZWJ1Zy10b29scy9pbmRleC5qc1xudmFyIHJlYWN0X2RlYnVnX3Rvb2xzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5ODcpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuLy8gVGhpcyBsaXN0IHNob3VsZCBiZSBrZXB0IHVwZGF0ZWQgdG8gcmVmbGVjdCBhZGRpdGlvbnMgdG8gJ3NoYXJlZC9SZWFjdFN5bWJvbHMnLlxuLy8gRGV2VG9vbHMgY2FuJ3QgaW1wb3J0IHN5bWJvbHMgZnJvbSAnc2hhcmVkL1JlYWN0U3ltYm9scycgZGlyZWN0bHkgZm9yIHR3byByZWFzb25zOlxuLy8gMS4gRGV2VG9vbHMgcmVxdWlyZXMgc3ltYm9scyB3aGljaCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgaW4gbW9yZSByZWNlbnQgdmVyc2lvbnMgKGUuZy4gY29uY3VycmVudCBtb2RlKVxuLy8gMi4gRGV2VG9vbHMgbXVzdCBzdXBwb3J0IGJvdGggU3ltYm9sIGFuZCBudW1lcmljIGZvcm1zIG9mIGVhY2ggc3ltYm9sO1xuLy8gICAgU2luY2UgZS5nLiBzdGFuZGFsb25lIERldlRvb2xzIHJ1bnMgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLCBpdCBjYW4ndCByZWx5IG9uIGl0cyBvd24gRVMgY2FwYWJpbGl0aWVzLlxudmFyIENPTkNVUlJFTlRfTU9ERV9OVU1CRVIgPSAweGVhY2Y7XG52YXIgQ09OQ1VSUkVOVF9NT0RFX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LmNvbmN1cnJlbnRfbW9kZSknO1xudmFyIENPTlRFWFRfTlVNQkVSID0gMHhlYWNlO1xudmFyIENPTlRFWFRfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3QuY29udGV4dCknO1xudmFyIFNFUlZFUl9DT05URVhUX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnNlcnZlcl9jb250ZXh0KSc7XG52YXIgREVQUkVDQVRFRF9BU1lOQ19NT0RFX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LmFzeW5jX21vZGUpJztcbnZhciBFTEVNRU5UX05VTUJFUiA9IDB4ZWFjNztcbnZhciBFTEVNRU5UX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LmVsZW1lbnQpJztcbnZhciBERUJVR19UUkFDSU5HX01PREVfTlVNQkVSID0gMHhlYWUxO1xudmFyIERFQlVHX1RSQUNJTkdfTU9ERV9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5kZWJ1Z190cmFjZV9tb2RlKSc7XG52YXIgUmVhY3RTeW1ib2xzX0ZPUldBUkRfUkVGX05VTUJFUiA9IDB4ZWFkMDtcbnZhciBSZWFjdFN5bWJvbHNfRk9SV0FSRF9SRUZfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3QuZm9yd2FyZF9yZWYpJztcbnZhciBGUkFHTUVOVF9OVU1CRVIgPSAweGVhY2I7XG52YXIgRlJBR01FTlRfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3QuZnJhZ21lbnQpJztcbnZhciBSZWFjdFN5bWJvbHNfTEFaWV9OVU1CRVIgPSAweGVhZDQ7XG52YXIgUmVhY3RTeW1ib2xzX0xBWllfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3QubGF6eSknO1xudmFyIFJlYWN0U3ltYm9sc19NRU1PX05VTUJFUiA9IDB4ZWFkMztcbnZhciBSZWFjdFN5bWJvbHNfTUVNT19TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5tZW1vKSc7XG52YXIgUE9SVEFMX05VTUJFUiA9IDB4ZWFjYTtcbnZhciBQT1JUQUxfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3QucG9ydGFsKSc7XG52YXIgUFJPRklMRVJfTlVNQkVSID0gMHhlYWQyO1xudmFyIFBST0ZJTEVSX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnByb2ZpbGVyKSc7XG52YXIgUFJPVklERVJfTlVNQkVSID0gMHhlYWNkO1xudmFyIFBST1ZJREVSX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnByb3ZpZGVyKSc7XG52YXIgU0NPUEVfTlVNQkVSID0gMHhlYWQ3O1xudmFyIFNDT1BFX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnNjb3BlKSc7XG52YXIgU1RSSUNUX01PREVfTlVNQkVSID0gMHhlYWNjO1xudmFyIFNUUklDVF9NT0RFX1NZTUJPTF9TVFJJTkcgPSAnU3ltYm9sKHJlYWN0LnN0cmljdF9tb2RlKSc7XG52YXIgUmVhY3RTeW1ib2xzX1NVU1BFTlNFX05VTUJFUiA9IDB4ZWFkMTtcbnZhciBSZWFjdFN5bWJvbHNfU1VTUEVOU0VfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3Quc3VzcGVuc2UpJztcbnZhciBSZWFjdFN5bWJvbHNfU1VTUEVOU0VfTElTVF9OVU1CRVIgPSAweGVhZDg7XG52YXIgUmVhY3RTeW1ib2xzX1NVU1BFTlNFX0xJU1RfU1lNQk9MX1NUUklORyA9ICdTeW1ib2wocmVhY3Quc3VzcGVuc2VfbGlzdCknO1xudmFyIFNFUlZFUl9DT05URVhUX0RFRkFVTFRfVkFMVUVfTk9UX0xPQURFRF9TWU1CT0xfU1RSSU5HID0gJ1N5bWJvbChyZWFjdC5zZXJ2ZXJfY29udGV4dC5kZWZhdWx0VmFsdWUpJztcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2NvbmZpZy9EZXZUb29sc0ZlYXR1cmVGbGFncy5jb3JlLW9zcy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFRoaXMgZmlsZSBpcyBmb3JrZWQgYmV0d2VlbiBkaWZmZXJlbnQgRGV2VG9vbHMgaW1wbGVtZW50YXRpb25zLlxuICogSXQgc2hvdWxkIG5ldmVyIGJlIGltcG9ydGVkIGRpcmVjdGx5IVxuICogSXQgc2hvdWxkIGFsd2F5cyBiZSBpbXBvcnRlZCBmcm9tIFwicmVhY3QtZGV2dG9vbHMtZmVhdHVyZS1mbGFnc1wiLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbnZhciBjb25zb2xlTWFuYWdlZEJ5RGV2VG9vbHNEdXJpbmdTdHJpY3RNb2RlID0gZmFsc2U7XG52YXIgZW5hYmxlTG9nZ2VyID0gZmFsc2U7XG52YXIgZW5hYmxlU3R5bGVYRmVhdHVyZXMgPSBmYWxzZTtcbnZhciBpc0ludGVybmFsRmFjZWJvb2tCdWlsZCA9IGZhbHNlO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogRG8gbm90IGVkaXQgdGhlIGNvZGUgYmVsb3cuXG4gKiBJdCBlbnN1cmVzIHRoaXMgZm9yayBleHBvcnRzIHRoZSBzYW1lIHR5cGVzIGFzIHRoZSBkZWZhdWx0IGZsYWdzIGZpbGUuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vLyBGbG93IG1hZ2ljIHRvIHZlcmlmeSB0aGUgZXhwb3J0cyBvZiB0aGlzIGZpbGUgbWF0Y2ggdGhlIG9yaWdpbmFsIHZlcnNpb24uXG5udWxsO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3NoYXJlZC9vYmplY3RJcy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG50eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IHNoYXJlZF9vYmplY3RJcyA9IChvYmplY3RJcyk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vc2hhcmVkL2hhc093blByb3BlcnR5LmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbi8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbnZhciBoYXNPd25Qcm9wZXJ0eV9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IHNoYXJlZF9oYXNPd25Qcm9wZXJ0eSA9IChoYXNPd25Qcm9wZXJ0eV9oYXNPd25Qcm9wZXJ0eSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1N0eWxlWC91dGlscy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbnZhciBjYWNoZWRTdHlsZU5hbWVUb1ZhbHVlTWFwID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0U3R5bGVYRGF0YShkYXRhKSB7XG4gIHZhciBzb3VyY2VzID0gbmV3IFNldCgpO1xuICB2YXIgcmVzb2x2ZWRTdHlsZXMgPSB7fTtcbiAgY3Jhd2xEYXRhKGRhdGEsIHNvdXJjZXMsIHJlc29sdmVkU3R5bGVzKTtcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2VzOiBBcnJheS5mcm9tKHNvdXJjZXMpLnNvcnQoKSxcbiAgICByZXNvbHZlZFN0eWxlczogcmVzb2x2ZWRTdHlsZXNcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyYXdsRGF0YShkYXRhLCBzb3VyY2VzLCByZXNvbHZlZFN0eWxlcykge1xuICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNyY19pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgaWYgKGVudHJ5ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3JjX2lzQXJyYXkoZW50cnkpKSB7XG4gICAgICAgIGNyYXdsRGF0YShlbnRyeSwgc291cmNlcywgcmVzb2x2ZWRTdHlsZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3Jhd2xPYmplY3RQcm9wZXJ0aWVzKGVudHJ5LCBzb3VyY2VzLCByZXNvbHZlZFN0eWxlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY3Jhd2xPYmplY3RQcm9wZXJ0aWVzKGRhdGEsIHNvdXJjZXMsIHJlc29sdmVkU3R5bGVzKTtcbiAgfVxuXG4gIHJlc29sdmVkU3R5bGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJlc29sdmVkU3R5bGVzKS5zb3J0KCkpO1xufVxuXG5mdW5jdGlvbiBjcmF3bE9iamVjdFByb3BlcnRpZXMoZW50cnksIHNvdXJjZXMsIHJlc29sdmVkU3R5bGVzKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZW50cnkpO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWx1ZSA9IGVudHJ5W2tleV07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGtleSA9PT0gdmFsdWUpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOyB0aGlzIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgc3R5bGUncyBzb3VyY2UvZmlsZS9tb2R1bGUuXG4gICAgICAgIHNvdXJjZXMuYWRkKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcHJvcGVydHlWYWx1ZSA9IGdldFByb3BlcnR5VmFsdWVGb3JTdHlsZU5hbWUodmFsdWUpO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICByZXNvbHZlZFN0eWxlc1trZXldID0gcHJvcGVydHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbmVzdGVkU3R5bGUgPSB7fTtcbiAgICAgIHJlc29sdmVkU3R5bGVzW2tleV0gPSBuZXN0ZWRTdHlsZTtcbiAgICAgIGNyYXdsRGF0YShbdmFsdWVdLCBzb3VyY2VzLCBuZXN0ZWRTdHlsZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZUZvclN0eWxlTmFtZShzdHlsZU5hbWUpIHtcbiAgaWYgKGNhY2hlZFN0eWxlTmFtZVRvVmFsdWVNYXAuaGFzKHN0eWxlTmFtZSkpIHtcbiAgICByZXR1cm4gY2FjaGVkU3R5bGVOYW1lVG9WYWx1ZU1hcC5nZXQoc3R5bGVOYW1lKTtcbiAgfVxuXG4gIGZvciAodmFyIHN0eWxlU2hlZXRJbmRleCA9IDA7IHN0eWxlU2hlZXRJbmRleCA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgc3R5bGVTaGVldEluZGV4KyspIHtcbiAgICB2YXIgc3R5bGVTaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3N0eWxlU2hlZXRJbmRleF07XG4gICAgdmFyIHJ1bGVzID0gbnVsbDsgLy8gdGhpcyBtaWdodCB0aHJvdyBpZiBDT1JTIHJ1bGVzIGFyZSBlbmZvcmNlZCBodHRwczovL3d3dy53My5vcmcvVFIvY3Nzb20tMS8jdGhlLWNzc3N0eWxlc2hlZXQtaW50ZXJmYWNlXG5cbiAgICB0cnkge1xuICAgICAgcnVsZXMgPSBzdHlsZVNoZWV0LmNzc1J1bGVzO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlcy5sZW5ndGg7IHJ1bGVJbmRleCsrKSB7XG4gICAgICBpZiAoIShydWxlc1tydWxlSW5kZXhdIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJ1bGUgPSBydWxlc1tydWxlSW5kZXhdO1xuICAgICAgdmFyIGNzc1RleHQgPSBydWxlLmNzc1RleHQsXG4gICAgICAgICAgc2VsZWN0b3JUZXh0ID0gcnVsZS5zZWxlY3RvclRleHQsXG4gICAgICAgICAgc3R5bGUgPSBydWxlLnN0eWxlO1xuXG4gICAgICBpZiAoc2VsZWN0b3JUZXh0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHNlbGVjdG9yVGV4dC5zdGFydHNXaXRoKFwiLlwiLmNvbmNhdChzdHlsZU5hbWUpKSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGNzc1RleHQubWF0Y2goL3sgKihbYS16XFwtXSspOi8pO1xuXG4gICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuICAgICAgICAgICAgY2FjaGVkU3R5bGVOYW1lVG9WYWx1ZU1hcC5zZXQoc3R5bGVOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvZGV2dG9vbHMvY29uc3RhbnRzLmpzXG52YXIgQ0hBTkdFX0xPR19VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1kZXZ0b29scy9DSEFOR0VMT0cubWQnO1xudmFyIFVOU1VQUE9SVEVEX1ZFUlNJT05fVVJMID0gJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvYmxvZy8yMDE5LzA4LzE1L25ldy1yZWFjdC1kZXZ0b29scy5odG1sI2hvdy1kby1pLWdldC10aGUtb2xkLXZlcnNpb24tYmFjayc7XG52YXIgUkVBQ1RfREVWVE9PTFNfV09SS1BMQUNFX1VSTCA9ICdodHRwczovL2ZidXJsLmNvbS9yZWFjdC1kZXZ0b29scy13b3JrcGxhY2UtZ3JvdXAnO1xudmFyIFRIRU1FX1NUWUxFUyA9IHtcbiAgbGlnaHQ6IHtcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtbmFtZSc6ICcjZWY2NjMyJyxcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtbmFtZS1ub3QtZWRpdGFibGUnOiAnIzIzMjcyZicsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLW5hbWUtaW52ZXJ0ZWQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtdmFsdWUnOiAnIzFhMWFhNicsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLXZhbHVlLWludmVydGVkJzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLWF0dHJpYnV0ZS1lZGl0YWJsZS12YWx1ZSc6ICcjMWExYWE2JyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kJzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLWJhY2tncm91bmQtaG92ZXInOiAncmdiYSgwLCAxMzYsIDI1MCwgMC4xKScsXG4gICAgJy0tY29sb3ItYmFja2dyb3VuZC1pbmFjdGl2ZSc6ICcjZTVlNWU1JyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kLWludmFsaWQnOiAnI2ZmZjBmMCcsXG4gICAgJy0tY29sb3ItYmFja2dyb3VuZC1zZWxlY3RlZCc6ICcjMDA4OGZhJyxcbiAgICAnLS1jb2xvci1idXR0b24tYmFja2dyb3VuZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1idXR0b24tYmFja2dyb3VuZC1mb2N1cyc6ICcjZWRlZGVkJyxcbiAgICAnLS1jb2xvci1idXR0b24nOiAnIzVmNjY3MycsXG4gICAgJy0tY29sb3ItYnV0dG9uLWRpc2FibGVkJzogJyNjZmQxZDUnLFxuICAgICctLWNvbG9yLWJ1dHRvbi1hY3RpdmUnOiAnIzAwODhmYScsXG4gICAgJy0tY29sb3ItYnV0dG9uLWZvY3VzJzogJyMyMzI3MmYnLFxuICAgICctLWNvbG9yLWJ1dHRvbi1ob3Zlcic6ICcjMjMyNzJmJyxcbiAgICAnLS1jb2xvci1ib3JkZXInOiAnI2VlZWVlZScsXG4gICAgJy0tY29sb3ItY29tbWl0LWRpZC1ub3QtcmVuZGVyLWZpbGwnOiAnI2NmZDFkNScsXG4gICAgJy0tY29sb3ItY29tbWl0LWRpZC1ub3QtcmVuZGVyLWZpbGwtdGV4dCc6ICcjMDAwMDAwJyxcbiAgICAnLS1jb2xvci1jb21taXQtZGlkLW5vdC1yZW5kZXItcGF0dGVybic6ICcjY2ZkMWQ1JyxcbiAgICAnLS1jb2xvci1jb21taXQtZGlkLW5vdC1yZW5kZXItcGF0dGVybi10ZXh0JzogJyMzMzMzMzMnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC0wJzogJyMzN2FmYTknLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC0xJzogJyM2M2IxOWUnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC0yJzogJyM4MGIzOTMnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC0zJzogJyM5N2I0ODgnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC00JzogJyNhYmI2N2QnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC01JzogJyNiZWI3NzEnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC02JzogJyNjZmI5NjUnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC03JzogJyNkZmJhNTcnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC04JzogJyNlZmJiNDknLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC05JzogJyNmZWJjMzgnLFxuICAgICctLWNvbG9yLWNvbW1pdC1ncmFkaWVudC10ZXh0JzogJyMwMDAwMDAnLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1uYW1lJzogJyM2YTUxYjInLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1uYW1lLWludmVydGVkJzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1iYWRnZS1iYWNrZ3JvdW5kJzogJ3JnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWJhY2tncm91bmQtaW52ZXJ0ZWQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KScsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWNvdW50JzogJyM3NzdkODgnLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1iYWRnZS1jb3VudC1pbnZlcnRlZCc6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItYmFkZ2UtdGV4dCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLWVycm9yLWJhY2tncm91bmQnOiAnI2ZmZjBmMCcsXG4gICAgJy0tY29sb3ItY29uc29sZS1lcnJvci1ib3JkZXInOiAnI2ZmZDZkNicsXG4gICAgJy0tY29sb3ItY29uc29sZS1lcnJvci1pY29uJzogJyNlYjM5NDEnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItdGV4dCc6ICcjZmUyZTMxJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYmFkZ2UtdGV4dCc6ICcjMDAwMDAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYmFja2dyb3VuZCc6ICcjZmZmYmU1JyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYm9yZGVyJzogJyNmZmY1YzEnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtd2FybmluZy1pY29uJzogJyNmNGJkMDAnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtd2FybmluZy10ZXh0JzogJyM2NDQ2MGMnLFxuICAgICctLWNvbG9yLWNvbnRleHQtYmFja2dyb3VuZCc6ICdyZ2JhKDAsMCwwLC45KScsXG4gICAgJy0tY29sb3ItY29udGV4dC1iYWNrZ3JvdW5kLWhvdmVyJzogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKScsXG4gICAgJy0tY29sb3ItY29udGV4dC1iYWNrZ3JvdW5kLXNlbGVjdGVkJzogJyMxNzhmYjknLFxuICAgICctLWNvbG9yLWNvbnRleHQtYm9yZGVyJzogJyMzZDQyNGEnLFxuICAgICctLWNvbG9yLWNvbnRleHQtdGV4dCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1jb250ZXh0LXRleHQtc2VsZWN0ZWQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItZGltJzogJyM3NzdkODgnLFxuICAgICctLWNvbG9yLWRpbW1lcic6ICcjY2ZkMWQ1JyxcbiAgICAnLS1jb2xvci1kaW1tZXN0JzogJyNlZmYwZjEnLFxuICAgICctLWNvbG9yLWVycm9yLWJhY2tncm91bmQnOiAnaHNsKDAsIDEwMCUsIDk3JSknLFxuICAgICctLWNvbG9yLWVycm9yLWJvcmRlcic6ICdoc2woMCwgMTAwJSwgOTIlKScsXG4gICAgJy0tY29sb3ItZXJyb3ItdGV4dCc6ICcjZmYwMDAwJyxcbiAgICAnLS1jb2xvci1leHBhbmQtY29sbGFwc2UtdG9nZ2xlJzogJyM3NzdkODgnLFxuICAgICctLWNvbG9yLWZvcmdldC1iYWRnZSc6ICcjMjY4M0UyJyxcbiAgICAnLS1jb2xvci1saW5rJzogJyMwMDAwZmYnLFxuICAgICctLWNvbG9yLW1vZGFsLWJhY2tncm91bmQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KScsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnBtLWJhY2tncm91bmQnOiAnI2VmZjBmMScsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnBtLXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnVtYmVyJzogJyMwMDg4ZmEnLFxuICAgICctLWNvbG9yLXByaW1pdGl2ZS1ob29rLWJhZGdlLWJhY2tncm91bmQnOiAnI2U1ZTVlNScsXG4gICAgJy0tY29sb3ItcHJpbWl0aXZlLWhvb2stYmFkZ2UtdGV4dCc6ICcjNWY2NjczJyxcbiAgICAnLS1jb2xvci1yZWNvcmQtYWN0aXZlJzogJyNmYzNhNGInLFxuICAgICctLWNvbG9yLXJlY29yZC1ob3Zlcic6ICcjMzU3OGU1JyxcbiAgICAnLS1jb2xvci1yZWNvcmQtaW5hY3RpdmUnOiAnIzAwODhmYScsXG4gICAgJy0tY29sb3ItcmVzaXplLWJhcic6ICcjZWVlZWVlJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWFjdGl2ZSc6ICcjZGNkY2RjJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWJvcmRlcic6ICcjZDFkMWQxJyxcbiAgICAnLS1jb2xvci1yZXNpemUtYmFyLWRvdCc6ICcjMzMzMzMzJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1pbnRlcm5hbC1tb2R1bGUnOiAnI2QxZDFkMScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtaW50ZXJuYWwtbW9kdWxlLWhvdmVyJzogJyNjOWM5YzknLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLWludGVybmFsLW1vZHVsZS10ZXh0JzogJyM0NDQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLW5hdGl2ZS1ldmVudCc6ICcjY2NjJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uYXRpdmUtZXZlbnQtaG92ZXInOiAnI2FhYScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtbmV0d29yay1wcmltYXJ5JzogJyNmY2YzZGMnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLW5ldHdvcmstcHJpbWFyeS1ob3Zlcic6ICcjZjBlN2QxJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uZXR3b3JrLXNlY29uZGFyeSc6ICcjZWZjNDU3JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uZXR3b3JrLXNlY29uZGFyeS1ob3Zlcic6ICcjZTNiYTUyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1wcmlvcml0eS1iYWNrZ3JvdW5kJzogJyNmNmY2ZjYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXByaW9yaXR5LWJvcmRlcic6ICcjZWVlZWVlJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS11c2VyLXRpbWluZyc6ICcjYzljYWNkJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS11c2VyLXRpbWluZy1ob3Zlcic6ICcjOTM5NTlhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1pZGxlJzogJyNkM2U1ZjYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWlkbGUtaG92ZXInOiAnI2MzZDllZicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcmVuZGVyJzogJyM5ZmMzZjMnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXJlbmRlci1ob3Zlcic6ICcjODNhZmU5JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1yZW5kZXItdGV4dCc6ICcjMTEzNjVlJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1jb21taXQnOiAnI2M4OGZmMCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtY29tbWl0LWhvdmVyJzogJyNiMjgxZDYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWNvbW1pdC10ZXh0JzogJyMzZTJjNGEnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzJzogJyNiMjgxZDYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzLWhvdmVyJzogJyM5ZDcxYmQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWxheW91dC1lZmZlY3RzLXRleHQnOiAnIzNlMmM0YScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcGFzc2l2ZS1lZmZlY3RzJzogJyNiMjgxZDYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXBhc3NpdmUtZWZmZWN0cy1ob3Zlcic6ICcjOWQ3MWJkJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1wYXNzaXZlLWVmZmVjdHMtdGV4dCc6ICcjM2UyYzRhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zY2hlZHVsZSc6ICcjOWZjM2YzJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zY2hlZHVsZS1ob3Zlcic6ICcjMjY4M0UyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZWplY3RlZCc6ICcjZjFjYzE0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZWplY3RlZC1ob3Zlcic6ICcjZmZkZjM3JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZXNvbHZlZCc6ICcjYTZlNTlmJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS1yZXNvbHZlZC1ob3Zlcic6ICcjODlkMjgxJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS11bnJlc29sdmVkJzogJyNjOWNhY2QnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXN1c3BlbnNlLXVucmVzb2x2ZWQtaG92ZXInOiAnIzkzOTU5YScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtdGhyb3duLWVycm9yJzogJyNlZTE2MzgnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXRocm93bi1lcnJvci1ob3Zlcic6ICcjZGExMDMwJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS10ZXh0LWNvbG9yJzogJyMwMDAwMDAnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXRleHQtZGltLWNvbG9yJzogJyNjY2MnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXdvcmstYm9yZGVyJzogJyNlZWVlZWUnLFxuICAgICctLWNvbG9yLXNlYXJjaC1tYXRjaCc6ICd5ZWxsb3cnLFxuICAgICctLWNvbG9yLXNlYXJjaC1tYXRjaC1jdXJyZW50JzogJyNmNzkyM2InLFxuICAgICctLWNvbG9yLXNlbGVjdGVkLXRyZWUtaGlnaGxpZ2h0LWFjdGl2ZSc6ICdyZ2JhKDAsIDEzNiwgMjUwLCAwLjEpJyxcbiAgICAnLS1jb2xvci1zZWxlY3RlZC10cmVlLWhpZ2hsaWdodC1pbmFjdGl2ZSc6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgICAnLS1jb2xvci1zY3JvbGwtY2FyZXQnOiAncmdiYSgxNTAsIDE1MCwgMTUwLCAwLjUpJyxcbiAgICAnLS1jb2xvci10YWItc2VsZWN0ZWQtYm9yZGVyJzogJyMwMDg4ZmEnLFxuICAgICctLWNvbG9yLXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItdGV4dC1pbnZhbGlkJzogJyNmZjAwMDAnLFxuICAgICctLWNvbG9yLXRleHQtc2VsZWN0ZWQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItdG9nZ2xlLWJhY2tncm91bmQtaW52YWxpZCc6ICcjZmMzYTRiJyxcbiAgICAnLS1jb2xvci10b2dnbGUtYmFja2dyb3VuZC1vbic6ICcjMDA4OGZhJyxcbiAgICAnLS1jb2xvci10b2dnbGUtYmFja2dyb3VuZC1vZmYnOiAnI2NmZDFkNScsXG4gICAgJy0tY29sb3ItdG9nZ2xlLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3Itd2FybmluZy1iYWNrZ3JvdW5kJzogJyNmYjM2NTUnLFxuICAgICctLWNvbG9yLXdhcm5pbmctYmFja2dyb3VuZC1ob3Zlcic6ICcjZjgyMDQyJyxcbiAgICAnLS1jb2xvci13YXJuaW5nLXRleHQtY29sb3InOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3Itd2FybmluZy10ZXh0LWNvbG9yLWludmVydGVkJzogJyNmZDRkNjknLFxuICAgIC8vIFRoZSBzdHlsZXMgYmVsb3cgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoICdyb290LmNzcydcbiAgICAvLyBUaGV5IGFyZSByZXBlYXRlZCB0aGVyZSBiZWNhdXNlIHRoZXkncmUgdXNlZCBieSBlLmcuIHRvb2x0aXBzIG9yIGNvbnRleHQgbWVudXNcbiAgICAvLyB3aGljaCBnZXQgcmVuZGVyZWQgb3V0c2lkZSBvZiB0aGUgRE9NIHN1YnRyZWUgKHdoZXJlIG5vcm1hbCB0aGVtZS9zdHlsZXMgYXJlIHdyaXR0ZW4pLlxuICAgICctLWNvbG9yLXNjcm9sbC10aHVtYic6ICcjYzJjMmMyJyxcbiAgICAnLS1jb2xvci1zY3JvbGwtdHJhY2snOiAnI2ZhZmFmYScsXG4gICAgJy0tY29sb3ItdG9vbHRpcC1iYWNrZ3JvdW5kJzogJ3JnYmEoMCwgMCwgMCwgMC45KScsXG4gICAgJy0tY29sb3ItdG9vbHRpcC10ZXh0JzogJyNmZmZmZmYnXG4gIH0sXG4gIGRhcms6IHtcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtbmFtZSc6ICcjOWQ4N2QyJyxcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtbmFtZS1ub3QtZWRpdGFibGUnOiAnI2VkZWRlZCcsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLW5hbWUtaW52ZXJ0ZWQnOiAnIzI4MjgyOCcsXG4gICAgJy0tY29sb3ItYXR0cmlidXRlLXZhbHVlJzogJyNjZWRhZTAnLFxuICAgICctLWNvbG9yLWF0dHJpYnV0ZS12YWx1ZS1pbnZlcnRlZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1hdHRyaWJ1dGUtZWRpdGFibGUtdmFsdWUnOiAneWVsbG93JyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kJzogJyMyODJjMzQnLFxuICAgICctLWNvbG9yLWJhY2tncm91bmQtaG92ZXInOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kLWluYWN0aXZlJzogJyMzZDQyNGEnLFxuICAgICctLWNvbG9yLWJhY2tncm91bmQtaW52YWxpZCc6ICcjNWMwMDAwJyxcbiAgICAnLS1jb2xvci1iYWNrZ3JvdW5kLXNlbGVjdGVkJzogJyMxNzhmYjknLFxuICAgICctLWNvbG9yLWJ1dHRvbi1iYWNrZ3JvdW5kJzogJyMyODJjMzQnLFxuICAgICctLWNvbG9yLWJ1dHRvbi1iYWNrZ3JvdW5kLWZvY3VzJzogJyMzZDQyNGEnLFxuICAgICctLWNvbG9yLWJ1dHRvbic6ICcjYWZiM2I5JyxcbiAgICAnLS1jb2xvci1idXR0b24tYWN0aXZlJzogJyM2MWRhZmInLFxuICAgICctLWNvbG9yLWJ1dHRvbi1kaXNhYmxlZCc6ICcjNGY1NzY2JyxcbiAgICAnLS1jb2xvci1idXR0b24tZm9jdXMnOiAnI2EyZTlmYycsXG4gICAgJy0tY29sb3ItYnV0dG9uLWhvdmVyJzogJyNlZGVkZWQnLFxuICAgICctLWNvbG9yLWJvcmRlcic6ICcjM2Q0MjRhJyxcbiAgICAnLS1jb2xvci1jb21taXQtZGlkLW5vdC1yZW5kZXItZmlsbCc6ICcjNzc3ZDg4JyxcbiAgICAnLS1jb2xvci1jb21taXQtZGlkLW5vdC1yZW5kZXItZmlsbC10ZXh0JzogJyMwMDAwMDAnLFxuICAgICctLWNvbG9yLWNvbW1pdC1kaWQtbm90LXJlbmRlci1wYXR0ZXJuJzogJyM2NjZjNzcnLFxuICAgICctLWNvbG9yLWNvbW1pdC1kaWQtbm90LXJlbmRlci1wYXR0ZXJuLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTAnOiAnIzM3YWZhOScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTEnOiAnIzYzYjE5ZScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTInOiAnIzgwYjM5MycsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTMnOiAnIzk3YjQ4OCcsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTQnOiAnI2FiYjY3ZCcsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTUnOiAnI2JlYjc3MScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTYnOiAnI2NmYjk2NScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTcnOiAnI2RmYmE1NycsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTgnOiAnI2VmYmI0OScsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LTknOiAnI2ZlYmMzOCcsXG4gICAgJy0tY29sb3ItY29tbWl0LWdyYWRpZW50LXRleHQnOiAnIzAwMDAwMCcsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LW5hbWUnOiAnIzYxZGFmYicsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LW5hbWUtaW52ZXJ0ZWQnOiAnIzI4MjgyOCcsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWJhY2tncm91bmQnOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KScsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWJhY2tncm91bmQtaW52ZXJ0ZWQnOiAncmdiYSgwLCAwLCAwLCAwLjI1KScsXG4gICAgJy0tY29sb3ItY29tcG9uZW50LWJhZGdlLWNvdW50JzogJyM4Zjk0OWQnLFxuICAgICctLWNvbG9yLWNvbXBvbmVudC1iYWRnZS1jb3VudC1pbnZlcnRlZCc6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItYmFkZ2UtdGV4dCc6ICcjMDAwMDAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLWVycm9yLWJhY2tncm91bmQnOiAnIzI5MDAwMCcsXG4gICAgJy0tY29sb3ItY29uc29sZS1lcnJvci1ib3JkZXInOiAnIzVjMDAwMCcsXG4gICAgJy0tY29sb3ItY29uc29sZS1lcnJvci1pY29uJzogJyNlYjM5NDEnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtZXJyb3ItdGV4dCc6ICcjZmM3ZjdmJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYmFkZ2UtdGV4dCc6ICcjMDAwMDAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYmFja2dyb3VuZCc6ICcjMzMyYjAwJyxcbiAgICAnLS1jb2xvci1jb25zb2xlLXdhcm5pbmctYm9yZGVyJzogJyM2NjU1MDAnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtd2FybmluZy1pY29uJzogJyNmNGJkMDAnLFxuICAgICctLWNvbG9yLWNvbnNvbGUtd2FybmluZy10ZXh0JzogJyNmNWYyZWQnLFxuICAgICctLWNvbG9yLWNvbnRleHQtYmFja2dyb3VuZCc6ICdyZ2JhKDI1NSwyNTUsMjU1LC45NSknLFxuICAgICctLWNvbG9yLWNvbnRleHQtYmFja2dyb3VuZC1ob3Zlcic6ICdyZ2JhKDAsIDEzNiwgMjUwLCAwLjEpJyxcbiAgICAnLS1jb2xvci1jb250ZXh0LWJhY2tncm91bmQtc2VsZWN0ZWQnOiAnIzAwODhmYScsXG4gICAgJy0tY29sb3ItY29udGV4dC1ib3JkZXInOiAnI2VlZWVlZScsXG4gICAgJy0tY29sb3ItY29udGV4dC10ZXh0JzogJyMwMDAwMDAnLFxuICAgICctLWNvbG9yLWNvbnRleHQtdGV4dC1zZWxlY3RlZCc6ICcjZmZmZmZmJyxcbiAgICAnLS1jb2xvci1kaW0nOiAnIzhmOTQ5ZCcsXG4gICAgJy0tY29sb3ItZGltbWVyJzogJyM3NzdkODgnLFxuICAgICctLWNvbG9yLWRpbW1lc3QnOiAnIzRmNTc2NicsXG4gICAgJy0tY29sb3ItZXJyb3ItYmFja2dyb3VuZCc6ICcjMjAwJyxcbiAgICAnLS1jb2xvci1lcnJvci1ib3JkZXInOiAnIzkwMCcsXG4gICAgJy0tY29sb3ItZXJyb3ItdGV4dCc6ICcjZjU1JyxcbiAgICAnLS1jb2xvci1leHBhbmQtY29sbGFwc2UtdG9nZ2xlJzogJyM4Zjk0OWQnLFxuICAgICctLWNvbG9yLWZvcmdldC1iYWRnZSc6ICcjMjY4M0UyJyxcbiAgICAnLS1jb2xvci1saW5rJzogJyM2MWRhZmInLFxuICAgICctLWNvbG9yLW1vZGFsLWJhY2tncm91bmQnOiAncmdiYSgwLCAwLCAwLCAwLjc1KScsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnBtLWJhY2tncm91bmQnOiAncmdiYSgwLCAwLCAwLCAwLjI1KScsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnBtLXRleHQnOiAnI2ZmZmZmZicsXG4gICAgJy0tY29sb3ItYnJpZGdlLXZlcnNpb24tbnVtYmVyJzogJ3llbGxvdycsXG4gICAgJy0tY29sb3ItcHJpbWl0aXZlLWhvb2stYmFkZ2UtYmFja2dyb3VuZCc6ICdyZ2JhKDAsIDAsIDAsIDAuMjUpJyxcbiAgICAnLS1jb2xvci1wcmltaXRpdmUtaG9vay1iYWRnZS10ZXh0JzogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgJy0tY29sb3ItcmVjb3JkLWFjdGl2ZSc6ICcjZmMzYTRiJyxcbiAgICAnLS1jb2xvci1yZWNvcmQtaG92ZXInOiAnI2EyZTlmYycsXG4gICAgJy0tY29sb3ItcmVjb3JkLWluYWN0aXZlJzogJyM2MWRhZmInLFxuICAgICctLWNvbG9yLXJlc2l6ZS1iYXInOiAnIzI4MmMzNCcsXG4gICAgJy0tY29sb3ItcmVzaXplLWJhci1hY3RpdmUnOiAnIzMxMzYzZicsXG4gICAgJy0tY29sb3ItcmVzaXplLWJhci1ib3JkZXInOiAnIzNkNDI0YScsXG4gICAgJy0tY29sb3ItcmVzaXplLWJhci1kb3QnOiAnI2NmZDFkNScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtaW50ZXJuYWwtbW9kdWxlJzogJyMzMDM1NDInLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLWludGVybmFsLW1vZHVsZS1ob3Zlcic6ICcjMzYzYjRhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1pbnRlcm5hbC1tb2R1bGUtdGV4dCc6ICcjN2Y4ODk5JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uYXRpdmUtZXZlbnQnOiAnI2IyYjJiMicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtbmF0aXZlLWV2ZW50LWhvdmVyJzogJyM5NDk0OTQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLW5ldHdvcmstcHJpbWFyeSc6ICcjZmNmM2RjJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1uZXR3b3JrLXByaW1hcnktaG92ZXInOiAnI2UzZGJjNScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtbmV0d29yay1zZWNvbmRhcnknOiAnI2VmYzQ1NycsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtbmV0d29yay1zZWNvbmRhcnktaG92ZXInOiAnI2Q2YWY0ZCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcHJpb3JpdHktYmFja2dyb3VuZCc6ICcjMWQyMTI5JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1wcmlvcml0eS1ib3JkZXInOiAnIzI4MmMzNCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtdXNlci10aW1pbmcnOiAnI2M5Y2FjZCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtdXNlci10aW1pbmctaG92ZXInOiAnIzkzOTU5YScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtaWRsZSc6ICcjM2Q0ODViJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1pZGxlLWhvdmVyJzogJyM0NjUyNjknLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXJlbmRlcic6ICcjMjY4M0UyJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1yZW5kZXItaG92ZXInOiAnIzFhNzZkNCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcmVuZGVyLXRleHQnOiAnIzExMzY1ZScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtY29tbWl0JzogJyM3MzFmYWQnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LWNvbW1pdC1ob3Zlcic6ICcjNjExYjk0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1jb21taXQtdGV4dCc6ICcjZTVjMWZmJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1sYXlvdXQtZWZmZWN0cyc6ICcjNjExYjk0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1sYXlvdXQtZWZmZWN0cy1ob3Zlcic6ICcjNTExNjdhJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1sYXlvdXQtZWZmZWN0cy10ZXh0JzogJyNlNWMxZmYnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXJlYWN0LXBhc3NpdmUtZWZmZWN0cyc6ICcjNjExYjk0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1wYXNzaXZlLWVmZmVjdHMtaG92ZXInOiAnIzUxMTY3YScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3QtcGFzc2l2ZS1lZmZlY3RzLXRleHQnOiAnI2U1YzFmZicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3Qtc2NoZWR1bGUnOiAnIzI2ODNFMicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3Qtc2NoZWR1bGUtaG92ZXInOiAnIzFhNzZkNCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3Qtc3VzcGVuc2UtcmVqZWN0ZWQnOiAnI2YxY2MxNCcsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3Qtc3VzcGVuc2UtcmVqZWN0ZWQtaG92ZXInOiAnI2U0YzAwZicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3Qtc3VzcGVuc2UtcmVzb2x2ZWQnOiAnI2E2ZTU5ZicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3Qtc3VzcGVuc2UtcmVzb2x2ZWQtaG92ZXInOiAnIzg5ZDI4MScsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtcmVhY3Qtc3VzcGVuc2UtdW5yZXNvbHZlZCc6ICcjYzljYWNkJyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC1zdXNwZW5zZS11bnJlc29sdmVkLWhvdmVyJzogJyM5Mzk1OWEnLFxuICAgICctLWNvbG9yLXRpbWVsaW5lLXRocm93bi1lcnJvcic6ICcjZmIzNjU1JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS10aHJvd24tZXJyb3ItaG92ZXInOiAnI2Y4MjA0MicsXG4gICAgJy0tY29sb3ItdGltZWxpbmUtdGV4dC1jb2xvcic6ICcjMjgyYzM0JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS10ZXh0LWRpbS1jb2xvcic6ICcjNTU1YjY2JyxcbiAgICAnLS1jb2xvci10aW1lbGluZS1yZWFjdC13b3JrLWJvcmRlcic6ICcjM2Q0MjRhJyxcbiAgICAnLS1jb2xvci1zZWFyY2gtbWF0Y2gnOiAneWVsbG93JyxcbiAgICAnLS1jb2xvci1zZWFyY2gtbWF0Y2gtY3VycmVudCc6ICcjZjc5MjNiJyxcbiAgICAnLS1jb2xvci1zZWxlY3RlZC10cmVlLWhpZ2hsaWdodC1hY3RpdmUnOiAncmdiYSgyMywgMTQzLCAxODUsIDAuMTUpJyxcbiAgICAnLS1jb2xvci1zZWxlY3RlZC10cmVlLWhpZ2hsaWdodC1pbmFjdGl2ZSc6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpJyxcbiAgICAnLS1jb2xvci1zY3JvbGwtY2FyZXQnOiAnIzRmNTc2NicsXG4gICAgJy0tY29sb3Itc2hhZG93JzogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgJy0tY29sb3ItdGFiLXNlbGVjdGVkLWJvcmRlcic6ICcjMTc4ZmI5JyxcbiAgICAnLS1jb2xvci10ZXh0JzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLXRleHQtaW52YWxpZCc6ICcjZmY4MDgwJyxcbiAgICAnLS1jb2xvci10ZXh0LXNlbGVjdGVkJzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLXRvZ2dsZS1iYWNrZ3JvdW5kLWludmFsaWQnOiAnI2ZjM2E0YicsXG4gICAgJy0tY29sb3ItdG9nZ2xlLWJhY2tncm91bmQtb24nOiAnIzE3OGZiOScsXG4gICAgJy0tY29sb3ItdG9nZ2xlLWJhY2tncm91bmQtb2ZmJzogJyM3NzdkODgnLFxuICAgICctLWNvbG9yLXRvZ2dsZS10ZXh0JzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLXdhcm5pbmctYmFja2dyb3VuZCc6ICcjZWUxNjM4JyxcbiAgICAnLS1jb2xvci13YXJuaW5nLWJhY2tncm91bmQtaG92ZXInOiAnI2RhMTAzMCcsXG4gICAgJy0tY29sb3Itd2FybmluZy10ZXh0LWNvbG9yJzogJyNmZmZmZmYnLFxuICAgICctLWNvbG9yLXdhcm5pbmctdGV4dC1jb2xvci1pbnZlcnRlZCc6ICcjZWUxNjM4JyxcbiAgICAvLyBUaGUgc3R5bGVzIGJlbG93IHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCAncm9vdC5jc3MnXG4gICAgLy8gVGhleSBhcmUgcmVwZWF0ZWQgdGhlcmUgYmVjYXVzZSB0aGV5J3JlIHVzZWQgYnkgZS5nLiB0b29sdGlwcyBvciBjb250ZXh0IG1lbnVzXG4gICAgLy8gd2hpY2ggZ2V0IHJlbmRlcmVkIG91dHNpZGUgb2YgdGhlIERPTSBzdWJ0cmVlICh3aGVyZSBub3JtYWwgdGhlbWUvc3R5bGVzIGFyZSB3cml0dGVuKS5cbiAgICAnLS1jb2xvci1zY3JvbGwtdGh1bWInOiAnI2FmYjNiOScsXG4gICAgJy0tY29sb3Itc2Nyb2xsLXRyYWNrJzogJyMzMTM2NDAnLFxuICAgICctLWNvbG9yLXRvb2x0aXAtYmFja2dyb3VuZCc6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpJyxcbiAgICAnLS1jb2xvci10b29sdGlwLXRleHQnOiAnIzAwMDAwMCdcbiAgfSxcbiAgY29tcGFjdDoge1xuICAgICctLWZvbnQtc2l6ZS1tb25vc3BhY2Utc21hbGwnOiAnOXB4JyxcbiAgICAnLS1mb250LXNpemUtbW9ub3NwYWNlLW5vcm1hbCc6ICcxMXB4JyxcbiAgICAnLS1mb250LXNpemUtbW9ub3NwYWNlLWxhcmdlJzogJzE1cHgnLFxuICAgICctLWZvbnQtc2l6ZS1zYW5zLXNtYWxsJzogJzEwcHgnLFxuICAgICctLWZvbnQtc2l6ZS1zYW5zLW5vcm1hbCc6ICcxMnB4JyxcbiAgICAnLS1mb250LXNpemUtc2Fucy1sYXJnZSc6ICcxNHB4JyxcbiAgICAnLS1saW5lLWhlaWdodC1kYXRhJzogJzE4cHgnXG4gIH0sXG4gIGNvbWZvcnRhYmxlOiB7XG4gICAgJy0tZm9udC1zaXplLW1vbm9zcGFjZS1zbWFsbCc6ICcxMHB4JyxcbiAgICAnLS1mb250LXNpemUtbW9ub3NwYWNlLW5vcm1hbCc6ICcxM3B4JyxcbiAgICAnLS1mb250LXNpemUtbW9ub3NwYWNlLWxhcmdlJzogJzE3cHgnLFxuICAgICctLWZvbnQtc2l6ZS1zYW5zLXNtYWxsJzogJzEycHgnLFxuICAgICctLWZvbnQtc2l6ZS1zYW5zLW5vcm1hbCc6ICcxNHB4JyxcbiAgICAnLS1mb250LXNpemUtc2Fucy1sYXJnZSc6ICcxNnB4JyxcbiAgICAnLS1saW5lLWhlaWdodC1kYXRhJzogJzIycHgnXG4gIH1cbn07IC8vIEhBQ0tcbi8vXG4vLyBTb21ldGltZXMgdGhlIGlubGluZSB0YXJnZXQgaXMgcmVuZGVyZWQgYmVmb3JlIHJvb3Qgc3R5bGVzIGFyZSBhcHBsaWVkLFxuLy8gd2hpY2ggd291bGQgcmVzdWx0IGluIGUuZy4gTmFOIGl0ZW1TaXplIGJlaW5nIHBhc3NlZCB0byByZWFjdC13aW5kb3cgbGlzdC5cblxudmFyIENPTUZPUlRBQkxFX0xJTkVfSEVJR0hUID0gcGFyc2VJbnQoVEhFTUVfU1RZTEVTLmNvbWZvcnRhYmxlWyctLWxpbmUtaGVpZ2h0LWRhdGEnXSwgMTApO1xudmFyIENPTVBBQ1RfTElORV9IRUlHSFQgPSBwYXJzZUludChUSEVNRV9TVFlMRVMuY29tcGFjdFsnLS1saW5lLWhlaWdodC1kYXRhJ10sIDEwKTtcblxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXRpbWVsaW5lL3NyYy9jb25zdGFudHMuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG52YXIgUkVBQ1RfVE9UQUxfTlVNX0xBTkVTID0gMzE7IC8vIEluY3JlbWVudCB0aGlzIG51bWJlciBhbnkgdGltZSBhIGJhY2t3YXJkcyBicmVha2luZyBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgcHJvZmlsZXIgbWV0YWRhdGEuXG5cbnZhciBTQ0hFRFVMSU5HX1BST0ZJTEVSX1ZFUlNJT04gPSAxO1xudmFyIFNOQVBTSE9UX01BWF9IRUlHSFQgPSA2MDtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmcuanNcbmZ1bmN0aW9uIERldlRvb2xzQ29uc29sZVBhdGNoaW5nX293bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cbi8vIFRoaXMgaXMgYSBEZXZUb29scyBmb3JrIG9mIHNoYXJlZC9Db25zb2xlUGF0Y2hpbmdEZXYuXG4vLyBUaGUgc2hhcmVkIGNvbnNvbGUgcGF0Y2hpbmcgY29kZSBpcyBERVYtb25seS5cbi8vIFdlIGNhbid0IHVzZSBpdCBzaW5jZSBEZXZUb29scyBvbmx5IHNoaXBzIHByb2R1Y3Rpb24gYnVpbGRzLlxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgdmFyIHByb3BzID0ge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgaW5mbzogcHJvcHMsXG4gICAgICBsb2c6IHByb3BzLFxuICAgICAgd2FybjogcHJvcHMsXG4gICAgICBlcnJvcjogcHJvcHMsXG4gICAgICBncm91cDogcHJvcHMsXG4gICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICBncm91cEVuZDogcHJvcHNcbiAgICB9KTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICB9XG5cbiAgZGlzYWJsZWREZXB0aCsrO1xufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICBkaXNhYmxlZERlcHRoLS07XG5cbiAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB2YXIgcHJvcHMgPSB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICBsb2c6IERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZChEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgIH0pLFxuICAgICAgaW5mbzogRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgIH0pLFxuICAgICAgd2FybjogRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgIH0pLFxuICAgICAgZXJyb3I6IERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZChEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgfSksXG4gICAgICBncm91cDogRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICB9KSxcbiAgICAgIGdyb3VwQ29sbGFwc2VkOiBEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgIH0pLFxuICAgICAgZ3JvdXBFbmQ6IERldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZChEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgfSlcbiAgICB9KTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICB9XG5cbiAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgY29uc29sZS5lcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvRGV2VG9vbHNDb21wb25lbnRTdGFja0ZyYW1lLmpzXG5mdW5jdGlvbiBEZXZUb29sc0NvbXBvbmVudFN0YWNrRnJhbWVfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBEZXZUb29sc0NvbXBvbmVudFN0YWNrRnJhbWVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IERldlRvb2xzQ29tcG9uZW50U3RhY2tGcmFtZV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gRGV2VG9vbHNDb21wb25lbnRTdGFja0ZyYW1lX3R5cGVvZihvYmopOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuLy8gVGhpcyBpcyBhIERldlRvb2xzIGZvcmsgb2YgUmVhY3RDb21wb25lbnRTdGFja0ZyYW1lLlxuLy8gVGhpcyBmb3JrIGVuYWJsZXMgRGV2VG9vbHMgdG8gdXNlIHRoZSBzYW1lIFwibmF0aXZlXCIgY29tcG9uZW50IHN0YWNrIGZvcm1hdCxcbi8vIHdoaWxlIHN0aWxsIG1haW50YWluaW5nIHN1cHBvcnQgZm9yIG11bHRpcGxlIHJlbmRlcmVyIHZlcnNpb25zXG4vLyAod2hpY2ggdXNlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIFJlYWN0VHlwZU9mV29yaykuXG4gLy8gVGhlIHNoYXJlZCBjb25zb2xlIHBhdGNoaW5nIGNvZGUgaXMgREVWLW9ubHkuXG4vLyBXZSBjYW4ndCB1c2UgaXQgc2luY2UgRGV2VG9vbHMgb25seSBzaGlwcyBwcm9kdWN0aW9uIGJ1aWxkcy5cblxuXG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJGbikge1xuICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgdHJ5IHtcbiAgICAgIHRocm93IEVycm9yKCk7XG4gICAgfSBjYXRjaCAoeCkge1xuICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgIH1cbiAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbmlmIChmYWxzZSkgeyB2YXIgUG9zc2libHlXZWFrTWFwOyB9XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCwgY3VycmVudERpc3BhdGNoZXJSZWYpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChmYWxzZSkgeyB2YXIgZnJhbWU7IH1cblxuICB2YXIgY29udHJvbDtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICByZWVudHJ5ID0gdHJ1ZTsgLy8gT3ZlcnJpZGUgdGhlIGRpc3BhdGNoZXIgc28gZWZmZWN0cyBzY2hlZHVsZWQgYnkgdGhpcyBzaGFsbG93IHJlbmRlciBhcmUgdGhyb3duIGF3YXkuXG4gIC8vXG4gIC8vIE5vdGUgdGhhdCB1bmxpa2UgdGhlIGNvZGUgdGhpcyB3YXMgZm9ya2VkIGZyb20gKGluIFJlYWN0Q29tcG9uZW50U3RhY2tGcmFtZSlcbiAgLy8gRGV2VG9vbHMgc2hvdWxkIG92ZXJyaWRlIHRoZSBkaXNwYXRjaGVyIGV2ZW4gd2hlbiBEZXZUb29scyBpcyBjb21waWxlZCBpbiBwcm9kdWN0aW9uIG1vZGUsXG4gIC8vIGJlY2F1c2UgdGhlIGFwcCBpdHNlbGYgbWF5IGJlIGluIGRldmVsb3BtZW50IG1vZGUgYW5kIGxvZyBlcnJvcnMvd2FybmluZ3MuXG5cbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlciA9IGN1cnJlbnREaXNwYXRjaGVyUmVmLmN1cnJlbnQ7XG4gIGN1cnJlbnREaXNwYXRjaGVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICBkaXNhYmxlTG9ncygpO1xuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uIEZha2UoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKCh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBEZXZUb29sc0NvbXBvbmVudFN0YWNrRnJhbWVfdHlwZW9mKFJlZmxlY3QpKSA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZhbHNlKSB7fSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgY3VycmVudERpc3BhdGNoZXJSZWYuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICByZWVuYWJsZUxvZ3MoKTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICBpZiAoZmFsc2UpIHt9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGN0b3IsIG93bmVyRm4sIGN1cnJlbnREaXNwYXRjaGVyUmVmKSB7XG4gIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGN0b3IsIHRydWUsIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgb3duZXJGbiwgY3VycmVudERpc3BhdGNoZXJSZWYpIHtcbiAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgb3duZXJGbiwgY3VycmVudERpc3BhdGNoZXJSZWYpIHtcbiAgaWYgKHRydWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUsIG93bmVyRm4pO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBTVVNQRU5TRV9OVU1CRVI6XG4gICAgY2FzZSBTVVNQRU5TRV9TWU1CT0xfU1RSSU5HOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScsIG93bmVyRm4pO1xuXG4gICAgY2FzZSBTVVNQRU5TRV9MSVNUX05VTUJFUjpcbiAgICBjYXNlIFNVU1BFTlNFX0xJU1RfU1lNQk9MX1NUUklORzpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jywgb3duZXJGbik7XG4gIH1cblxuICBpZiAoRGV2VG9vbHNDb21wb25lbnRTdGFja0ZyYW1lX3R5cGVvZih0eXBlKSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgRk9SV0FSRF9SRUZfTlVNQkVSOlxuICAgICAgY2FzZSBGT1JXQVJEX1JFRl9TWU1CT0xfU1RSSU5HOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyLCBvd25lckZuLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7XG5cbiAgICAgIGNhc2UgTUVNT19OVU1CRVI6XG4gICAgICBjYXNlIE1FTU9fU1lNQk9MX1NUUklORzpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIG93bmVyRm4sIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcblxuICAgICAgY2FzZSBMQVpZX05VTUJFUjpcbiAgICAgIGNhc2UgTEFaWV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgb3duZXJGbiwgY3VycmVudERpc3BhdGNoZXJSZWYpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL0RldlRvb2xzRmliZXJDb21wb25lbnRTdGFjay5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG4vLyBUaGlzIGlzIGEgRGV2VG9vbHMgZm9yayBvZiBSZWFjdEZpYmVyQ29tcG9uZW50U3RhY2suXG4vLyBUaGlzIGZvcmsgZW5hYmxlcyBEZXZUb29scyB0byB1c2UgdGhlIHNhbWUgXCJuYXRpdmVcIiBjb21wb25lbnQgc3RhY2sgZm9ybWF0LFxuLy8gd2hpbGUgc3RpbGwgbWFpbnRhaW5pbmcgc3VwcG9ydCBmb3IgbXVsdGlwbGUgcmVuZGVyZXIgdmVyc2lvbnNcbi8vICh3aGljaCB1c2UgZGlmZmVyZW50IHZhbHVlcyBmb3IgUmVhY3RUeXBlT2ZXb3JrKS5cblxuZnVuY3Rpb24gZGVzY3JpYmVGaWJlcih3b3JrVGFnTWFwLCB3b3JrSW5Qcm9ncmVzcywgY3VycmVudERpc3BhdGNoZXJSZWYpIHtcbiAgdmFyIEhvc3RDb21wb25lbnQgPSB3b3JrVGFnTWFwLkhvc3RDb21wb25lbnQsXG4gICAgICBMYXp5Q29tcG9uZW50ID0gd29ya1RhZ01hcC5MYXp5Q29tcG9uZW50LFxuICAgICAgU3VzcGVuc2VDb21wb25lbnQgPSB3b3JrVGFnTWFwLlN1c3BlbnNlQ29tcG9uZW50LFxuICAgICAgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gd29ya1RhZ01hcC5TdXNwZW5zZUxpc3RDb21wb25lbnQsXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudCA9IHdvcmtUYWdNYXAuRnVuY3Rpb25Db21wb25lbnQsXG4gICAgICBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gd29ya1RhZ01hcC5JbmRldGVybWluYXRlQ29tcG9uZW50LFxuICAgICAgU2ltcGxlTWVtb0NvbXBvbmVudCA9IHdvcmtUYWdNYXAuU2ltcGxlTWVtb0NvbXBvbmVudCxcbiAgICAgIEZvcndhcmRSZWYgPSB3b3JrVGFnTWFwLkZvcndhcmRSZWYsXG4gICAgICBDbGFzc0NvbXBvbmVudCA9IHdvcmtUYWdNYXAuQ2xhc3NDb21wb25lbnQ7XG4gIHZhciBvd25lciA9ICBmYWxzZSA/IDAgOiBudWxsO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHdvcmtJblByb2dyZXNzLnR5cGUsIG93bmVyKTtcblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnTGF6eScsIG93bmVyKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJywgb3duZXIpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcsIG93bmVyKTtcblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUod29ya0luUHJvZ3Jlc3MudHlwZSwgb3duZXIsIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUod29ya0luUHJvZ3Jlc3MudHlwZS5yZW5kZXIsIG93bmVyLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlLCBvd25lciwgY3VycmVudERpc3BhdGNoZXJSZWYpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtUYWdNYXAsIHdvcmtJblByb2dyZXNzLCBjdXJyZW50RGlzcGF0Y2hlclJlZikge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcih3b3JrVGFnTWFwLCBub2RlLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSk7XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfSBjYXRjaCAoeCkge1xuICAgIHJldHVybiAnXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogJyArIHgubWVzc2FnZSArICdcXG4nICsgeC5zdGFjaztcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9wcm9maWxpbmdIb29rcy5qc1xuZnVuY3Rpb24gcHJvZmlsaW5nSG9va3Nfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIHByb2ZpbGluZ0hvb2tzX2FycmF5V2l0aEhvbGVzKGFycikgfHwgcHJvZmlsaW5nSG9va3NfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBwcm9maWxpbmdIb29rc191bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IHByb2ZpbGluZ0hvb2tzX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIHByb2ZpbGluZ0hvb2tzX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBwcm9maWxpbmdIb29rc191bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHByb2ZpbGluZ0hvb2tzX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBwcm9maWxpbmdIb29rc19hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gcHJvZmlsaW5nSG9va3NfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gcHJvZmlsaW5nSG9va3NfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gcHJvZmlsaW5nSG9va3NfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gcHJvZmlsaW5nSG9va3NfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBwcm9maWxpbmdIb29rc190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgcHJvZmlsaW5nSG9va3NfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIHByb2ZpbGluZ0hvb2tzX3R5cGVvZihvYmopOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cbiAvLyBBZGQgcGFkZGluZyB0byB0aGUgc3RhcnQvc3RvcCB0aW1lIG9mIHRoZSBwcm9maWxlLlxuLy8gVGhpcyBtYWtlcyB0aGUgVUkgbmljZXIgdG8gdXNlLlxuXG52YXIgVElNRV9PRkZTRVQgPSAxMDtcbnZhciBwZXJmb3JtYW5jZVRhcmdldCA9IG51bGw7IC8vIElmIHBlcmZvcm1hbmNlIGV4aXN0cyBhbmQgc3VwcG9ydHMgdGhlIHN1YnNldCBvZiB0aGUgVXNlciBUaW1pbmcgQVBJIHRoYXQgd2UgcmVxdWlyZS5cblxudmFyIHN1cHBvcnRzVXNlclRpbWluZyA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCcgJiYgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxudHlwZW9mIHBlcmZvcm1hbmNlLm1hcmsgPT09ICdmdW5jdGlvbicgJiYgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxudHlwZW9mIHBlcmZvcm1hbmNlLmNsZWFyTWFya3MgPT09ICdmdW5jdGlvbic7XG52YXIgc3VwcG9ydHNVc2VyVGltaW5nVjMgPSBmYWxzZTtcblxuaWYgKHN1cHBvcnRzVXNlclRpbWluZykge1xuICB2YXIgQ0hFQ0tfVjNfTUFSSyA9ICdfX3YzJztcbiAgdmFyIG1hcmtPcHRpb25zID0ge307XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtYXJrT3B0aW9ucywgJ3N0YXJ0VGltZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHN1cHBvcnRzVXNlclRpbWluZ1YzID0gdHJ1ZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7fVxuICB9KTtcblxuICB0cnkge1xuICAgIHBlcmZvcm1hbmNlLm1hcmsoQ0hFQ0tfVjNfTUFSSywgbWFya09wdGlvbnMpO1xuICB9IGNhdGNoIChlcnJvcikgey8vIElnbm9yZVxuICB9IGZpbmFsbHkge1xuICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3MoQ0hFQ0tfVjNfTUFSSyk7XG4gIH1cbn1cblxuaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gIHBlcmZvcm1hbmNlVGFyZ2V0ID0gcGVyZm9ybWFuY2U7XG59IC8vIFNvbWUgZW52aXJvbm1lbnRzIChlLmcuIFJlYWN0IE5hdGl2ZSAvIEhlcm1lcykgZG9uJ3Qgc3VwcG9ydCB0aGUgcGVyZm9ybWFuY2UgQVBJIHlldC5cblxuXG52YXIgcHJvZmlsaW5nSG9va3NfZ2V0Q3VycmVudFRpbWUgPSAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4odHlwZW9mIHBlcmZvcm1hbmNlID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IHByb2ZpbGluZ0hvb2tzX3R5cGVvZihwZXJmb3JtYW5jZSkpID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07IC8vIE1vY2tpbmcgdGhlIFBlcmZvcm1hbmNlIE9iamVjdCAoYW5kIFVzZXIgVGltaW5nIEFQSXMpIGZvciB0ZXN0aW5nIGlzIGZyYWdpbGUuXG4vLyBUaGlzIEFQSSBhbGxvd3MgdGVzdHMgdG8gZGlyZWN0bHkgb3ZlcnJpZGUgdGhlIFVzZXIgVGltaW5nIEFQSXMuXG5cbmZ1bmN0aW9uIHNldFBlcmZvcm1hbmNlTW9ja19PTkxZX0ZPUl9URVNUSU5HKHBlcmZvcm1hbmNlTW9jaykge1xuICBwZXJmb3JtYW5jZVRhcmdldCA9IHBlcmZvcm1hbmNlTW9jaztcbiAgc3VwcG9ydHNVc2VyVGltaW5nID0gcGVyZm9ybWFuY2VNb2NrICE9PSBudWxsO1xuICBzdXBwb3J0c1VzZXJUaW1pbmdWMyA9IHBlcmZvcm1hbmNlTW9jayAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVByb2ZpbGluZ0hvb2tzKF9yZWYpIHtcbiAgdmFyIGdldERpc3BsYXlOYW1lRm9yRmliZXIgPSBfcmVmLmdldERpc3BsYXlOYW1lRm9yRmliZXIsXG4gICAgICBnZXRJc1Byb2ZpbGluZyA9IF9yZWYuZ2V0SXNQcm9maWxpbmcsXG4gICAgICBnZXRMYW5lTGFiZWxNYXAgPSBfcmVmLmdldExhbmVMYWJlbE1hcCxcbiAgICAgIHdvcmtUYWdNYXAgPSBfcmVmLndvcmtUYWdNYXAsXG4gICAgICBjdXJyZW50RGlzcGF0Y2hlclJlZiA9IF9yZWYuY3VycmVudERpc3BhdGNoZXJSZWYsXG4gICAgICByZWFjdFZlcnNpb24gPSBfcmVmLnJlYWN0VmVyc2lvbjtcbiAgdmFyIGN1cnJlbnRCYXRjaFVJRCA9IDA7XG4gIHZhciBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0gbnVsbDtcbiAgdmFyIGN1cnJlbnRSZWFjdE1lYXN1cmVzU3RhY2sgPSBbXTtcbiAgdmFyIGN1cnJlbnRUaW1lbGluZURhdGEgPSBudWxsO1xuICB2YXIgY3VycmVudEZpYmVyU3RhY2tzID0gbmV3IE1hcCgpO1xuICB2YXIgaXNQcm9maWxpbmcgPSBmYWxzZTtcbiAgdmFyIG5leHRSZW5kZXJTaG91bGRTdGFydE5ld0JhdGNoID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpdmVUaW1lKCkge1xuICAgIHZhciBjdXJyZW50VGltZSA9IHByb2ZpbGluZ0hvb2tzX2dldEN1cnJlbnRUaW1lKCk7XG5cbiAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEuc3RhcnRUaW1lID09PSAwKSB7XG4gICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuc3RhcnRUaW1lID0gY3VycmVudFRpbWUgLSBUSU1FX09GRlNFVDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWVsaW5lRGF0YS5zdGFydFRpbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbnRlcm5hbE1vZHVsZVJhbmdlcygpIHtcbiAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uZ2V0SW50ZXJuYWxNb2R1bGVSYW5nZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFzayB0aGUgRGV2VG9vbHMgaG9vayBmb3IgbW9kdWxlIHJhbmdlcyB0aGF0IG1heSBoYXZlIGJlZW4gcmVwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIocykuXG4gICAgICAvLyBEb24ndCBkbyB0aGlzIGVhZ2VybHkgbGlrZSB0aGUgbGFuZVRvTGFiZWxNYXAsXG4gICAgICAvLyBiZWNhdXNlIHNvbWUgbW9kdWxlcyBtaWdodCBub3QgeWV0IGhhdmUgcmVnaXN0ZXJlZCB0aGVpciBib3VuZGFyaWVzIHdoZW4gdGhlIHJlbmRlcmVyIGlzIGluamVjdGVkLlxuICAgICAgdmFyIHJhbmdlcyA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5nZXRJbnRlcm5hbE1vZHVsZVJhbmdlcygpOyAvLyBUaGlzIGNoZWNrIHdvdWxkIG5vdCBiZSByZXF1aXJlZCxcbiAgICAgIC8vIGV4Y2VwdCB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHRoaW5ncyB0byBvdmVycmlkZSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uXG5cblxuICAgICAgaWYgKHNoYXJlZF9pc0FycmF5KHJhbmdlcykpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRpbWVsaW5lRGF0YSgpIHtcbiAgICByZXR1cm4gY3VycmVudFRpbWVsaW5lRGF0YTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxhbmVUb0xhbmVzQXJyYXkobGFuZXMpIHtcbiAgICB2YXIgbGFuZXNBcnJheSA9IFtdO1xuICAgIHZhciBsYW5lID0gMTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBSRUFDVF9UT1RBTF9OVU1fTEFORVM7IGluZGV4KyspIHtcbiAgICAgIGlmIChsYW5lICYgbGFuZXMpIHtcbiAgICAgICAgbGFuZXNBcnJheS5wdXNoKGxhbmUpO1xuICAgICAgfVxuXG4gICAgICBsYW5lICo9IDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbmVzQXJyYXk7XG4gIH1cblxuICB2YXIgbGFuZVRvTGFiZWxNYXAgPSB0eXBlb2YgZ2V0TGFuZUxhYmVsTWFwID09PSAnZnVuY3Rpb24nID8gZ2V0TGFuZUxhYmVsTWFwKCkgOiBudWxsO1xuXG4gIGZ1bmN0aW9uIG1hcmtNZXRhZGF0YSgpIHtcbiAgICBtYXJrQW5kQ2xlYXIoXCItLXJlYWN0LXZlcnNpb24tXCIuY29uY2F0KHJlYWN0VmVyc2lvbikpO1xuICAgIG1hcmtBbmRDbGVhcihcIi0tcHJvZmlsZXItdmVyc2lvbi1cIi5jb25jYXQoU0NIRURVTElOR19QUk9GSUxFUl9WRVJTSU9OKSk7XG4gICAgdmFyIHJhbmdlcyA9IGdldEludGVybmFsTW9kdWxlUmFuZ2VzKCk7XG5cbiAgICBpZiAocmFuZ2VzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07XG5cbiAgICAgICAgaWYgKHNoYXJlZF9pc0FycmF5KHJhbmdlKSAmJiByYW5nZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICB2YXIgX3JhbmdlcyRpID0gcHJvZmlsaW5nSG9va3Nfc2xpY2VkVG9BcnJheShyYW5nZXNbaV0sIDIpLFxuICAgICAgICAgICAgICBzdGFydFN0YWNrRnJhbWUgPSBfcmFuZ2VzJGlbMF0sXG4gICAgICAgICAgICAgIHN0b3BTdGFja0ZyYW1lID0gX3JhbmdlcyRpWzFdO1xuXG4gICAgICAgICAgbWFya0FuZENsZWFyKFwiLS1yZWFjdC1pbnRlcm5hbC1tb2R1bGUtc3RhcnQtXCIuY29uY2F0KHN0YXJ0U3RhY2tGcmFtZSkpO1xuICAgICAgICAgIG1hcmtBbmRDbGVhcihcIi0tcmVhY3QtaW50ZXJuYWwtbW9kdWxlLXN0b3AtXCIuY29uY2F0KHN0b3BTdGFja0ZyYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGFuZVRvTGFiZWxNYXAgIT0gbnVsbCkge1xuICAgICAgdmFyIGxhYmVscyA9IEFycmF5LmZyb20obGFuZVRvTGFiZWxNYXAudmFsdWVzKCkpLmpvaW4oJywnKTtcbiAgICAgIG1hcmtBbmRDbGVhcihcIi0tcmVhY3QtbGFuZS1sYWJlbHMtXCIuY29uY2F0KGxhYmVscykpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtBbmRDbGVhcihtYXJrTmFtZSkge1xuICAgIC8vIFRoaXMgbWV0aG9kIHdvbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBzbyB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgdHlwZW9mIGNoZWNrLlxuICAgIHBlcmZvcm1hbmNlVGFyZ2V0Lm1hcmsobWFya05hbWUpO1xuICAgIHBlcmZvcm1hbmNlVGFyZ2V0LmNsZWFyTWFya3MobWFya05hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkUmVhY3RNZWFzdXJlU3RhcnRlZCh0eXBlLCBsYW5lcykge1xuICAgIC8vIERlY2lkZSB3aGF0IGRlcHRoIHRoaSB3b3JrIHNob3VsZCBiZSByZW5kZXJlZCBhdCwgYmFzZWQgb24gd2hhdCdzIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLlxuICAgIC8vIEl0J3Mgb2theSB0byByZW5kZXIgb3ZlciB0b3Agb2YgXCJpZGxlXCIgd29yayBidXQgZXZlcnl0aGluZyBlbHNlIHNob3VsZCBiZSBvbiBpdHMgb3duIHJvdy5cbiAgICB2YXIgZGVwdGggPSAwO1xuXG4gICAgaWYgKGN1cnJlbnRSZWFjdE1lYXN1cmVzU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRvcCA9IGN1cnJlbnRSZWFjdE1lYXN1cmVzU3RhY2tbY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGRlcHRoID0gdG9wLnR5cGUgPT09ICdyZW5kZXItaWRsZScgPyB0b3AuZGVwdGggOiB0b3AuZGVwdGggKyAxO1xuICAgIH1cblxuICAgIHZhciBsYW5lc0FycmF5ID0gbGFuZVRvTGFuZXNBcnJheShsYW5lcyk7XG4gICAgdmFyIHJlYWN0TWVhc3VyZSA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBiYXRjaFVJRDogY3VycmVudEJhdGNoVUlELFxuICAgICAgZGVwdGg6IGRlcHRoLFxuICAgICAgbGFuZXM6IGxhbmVzQXJyYXksXG4gICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgZHVyYXRpb246IDBcbiAgICB9O1xuICAgIGN1cnJlbnRSZWFjdE1lYXN1cmVzU3RhY2sucHVzaChyZWFjdE1lYXN1cmUpO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEpIHtcbiAgICAgIHZhciBfY3VycmVudFRpbWVsaW5lRGF0YSA9IGN1cnJlbnRUaW1lbGluZURhdGEsXG4gICAgICAgICAgYmF0Y2hVSURUb01lYXN1cmVzTWFwID0gX2N1cnJlbnRUaW1lbGluZURhdGEuYmF0Y2hVSURUb01lYXN1cmVzTWFwLFxuICAgICAgICAgIGxhbmVUb1JlYWN0TWVhc3VyZU1hcCA9IF9jdXJyZW50VGltZWxpbmVEYXRhLmxhbmVUb1JlYWN0TWVhc3VyZU1hcDtcbiAgICAgIHZhciByZWFjdE1lYXN1cmVzID0gYmF0Y2hVSURUb01lYXN1cmVzTWFwLmdldChjdXJyZW50QmF0Y2hVSUQpO1xuXG4gICAgICBpZiAocmVhY3RNZWFzdXJlcyAhPSBudWxsKSB7XG4gICAgICAgIHJlYWN0TWVhc3VyZXMucHVzaChyZWFjdE1lYXN1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmF0Y2hVSURUb01lYXN1cmVzTWFwLnNldChjdXJyZW50QmF0Y2hVSUQsIFtyZWFjdE1lYXN1cmVdKTtcbiAgICAgIH1cblxuICAgICAgbGFuZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChsYW5lKSB7XG4gICAgICAgIHJlYWN0TWVhc3VyZXMgPSBsYW5lVG9SZWFjdE1lYXN1cmVNYXAuZ2V0KGxhbmUpO1xuXG4gICAgICAgIGlmIChyZWFjdE1lYXN1cmVzKSB7XG4gICAgICAgICAgcmVhY3RNZWFzdXJlcy5wdXNoKHJlYWN0TWVhc3VyZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29yZFJlYWN0TWVhc3VyZUNvbXBsZXRlZCh0eXBlKSB7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gZ2V0UmVsYXRpdmVUaW1lKCk7XG5cbiAgICBpZiAoY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBcIiVzXCIgY29tcGxldGVkIGF0ICVzbXMgd2hpbGUgY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjayBpcyBlbXB0eS4nLCB0eXBlLCBjdXJyZW50VGltZSk7IC8vIElnbm9yZSB3b3JrIFwiY29tcGxldGlvblwiIHVzZXIgdGltaW5nIG1hcmsgdGhhdCBkb2Vzbid0IGNvbXBsZXRlIGFueXRoaW5nXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG9wID0gY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjay5wb3AoKTtcblxuICAgIGlmICh0b3AudHlwZSAhPT0gdHlwZSkge1xuICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCB0eXBlIFwiJXNcIiBjb21wbGV0ZWQgYXQgJXNtcyBiZWZvcmUgXCIlc1wiIGNvbXBsZXRlZC4nLCB0eXBlLCBjdXJyZW50VGltZSwgdG9wLnR5cGUpO1xuICAgIH0gLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIFRoaXMgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB3cml0YWJsZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuICAgIHRvcC5kdXJhdGlvbiA9IGN1cnJlbnRUaW1lIC0gdG9wLnRpbWVzdGFtcDtcblxuICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICBjdXJyZW50VGltZWxpbmVEYXRhLmR1cmF0aW9uID0gZ2V0UmVsYXRpdmVUaW1lKCkgKyBUSU1FX09GRlNFVDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tbWl0U3RhcnRlZChsYW5lcykge1xuICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgcmVjb3JkUmVhY3RNZWFzdXJlU3RhcnRlZCgnY29tbWl0JywgbGFuZXMpOyAvLyBUT0RPICh0aW1lbGluZSkgUmUtdGhpbmsgdGhpcyBhcHByb2FjaCB0byBcImJhdGNoaW5nXCI7IEkgZG9uJ3QgdGhpbmsgaXQgd29ya3MgZm9yIFN1c3BlbnNlIG9yIHByZS1yZW5kZXJpbmcuXG4gICAgICAvLyBUaGlzIGlzc3VlIGFwcGxpZXMgdG8gdGhlIFVzZXIgVGltaW5nIGRhdGEgYWxzby5cblxuICAgICAgbmV4dFJlbmRlclNob3VsZFN0YXJ0TmV3QmF0Y2ggPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKFwiLS1jb21taXQtc3RhcnQtXCIuY29uY2F0KGxhbmVzKSk7IC8vIFNvbWUgbWV0YWRhdGEgb25seSBuZWVkcyB0byBiZSBsb2dnZWQgb25jZSBwZXIgc2Vzc2lvbixcbiAgICAgIC8vIGJ1dCBpZiBwcm9maWxpbmcgaW5mb3JtYXRpb24gaXMgYmVpbmcgcmVjb3JkZWQgdmlhIHRoZSBQZXJmb3JtYW5jZSB0YWIsXG4gICAgICAvLyBEZXZUb29scyBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hlbiB0aGUgcmVjb3JkaW5nIHN0YXJ0cy5cbiAgICAgIC8vIEJlY2F1c2Ugb2YgdGhhdCwgd2UgbG9nIHRoaWUgdHlwZSBvZiBkYXRhIHBlcmlvZGljYWxseSAob25jZSBwZXIgY29tbWl0KS5cblxuICAgICAgbWFya01ldGFkYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbW1pdFN0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVDb21wbGV0ZWQoJ2NvbW1pdCcpO1xuICAgICAgcmVjb3JkUmVhY3RNZWFzdXJlQ29tcGxldGVkKCdyZW5kZXItaWRsZScpO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKCctLWNvbW1pdC1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQoZmliZXIpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgfHwgc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgLy8gVE9ETyAodGltZWxpbmUpIFJlY29yZCBhbmQgY2FjaGUgY29tcG9uZW50IHN0YWNrXG4gICAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUgPSB7XG4gICAgICAgICAgICBjb21wb25lbnROYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgICAgICAgdHlwZTogJ3JlbmRlcicsXG4gICAgICAgICAgICB3YXJuaW5nOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgICAgbWFya0FuZENsZWFyKFwiLS1jb21wb25lbnQtcmVuZGVyLXN0YXJ0LVwiLmNvbmNhdChjb21wb25lbnROYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAoY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSkge1xuICAgICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuY29tcG9uZW50TWVhc3VyZXMucHVzaChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUuZHVyYXRpb24gPSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgZ2V0UmVsYXRpdmVUaW1lKCkgLSBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlLnRpbWVzdGFtcDtcbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tY29tcG9uZW50LXJlbmRlci1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZChmaWJlcikge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAvLyBUT0RPICh0aW1lbGluZSkgUmVjb3JkIGFuZCBjYWNoZSBjb21wb25lbnQgc3RhY2tcbiAgICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZ2V0UmVsYXRpdmVUaW1lKCksXG4gICAgICAgICAgICB0eXBlOiAnbGF5b3V0LWVmZmVjdC1tb3VudCcsXG4gICAgICAgICAgICB3YXJuaW5nOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgICAgbWFya0FuZENsZWFyKFwiLS1jb21wb25lbnQtbGF5b3V0LWVmZmVjdC1tb3VudC1zdGFydC1cIi5jb25jYXQoY29tcG9uZW50TmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAoY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSkge1xuICAgICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuY29tcG9uZW50TWVhc3VyZXMucHVzaChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUuZHVyYXRpb24gPSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgZ2V0UmVsYXRpdmVUaW1lKCkgLSBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlLnRpbWVzdGFtcDtcbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tY29tcG9uZW50LWxheW91dC1lZmZlY3QtbW91bnQtc3RvcCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZChmaWJlcikge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAvLyBUT0RPICh0aW1lbGluZSkgUmVjb3JkIGFuZCBjYWNoZSBjb21wb25lbnQgc3RhY2tcbiAgICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZ2V0UmVsYXRpdmVUaW1lKCksXG4gICAgICAgICAgICB0eXBlOiAnbGF5b3V0LWVmZmVjdC11bm1vdW50JyxcbiAgICAgICAgICAgIHdhcm5pbmc6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLWNvbXBvbmVudC1sYXlvdXQtZWZmZWN0LXVubW91bnQtc3RhcnQtXCIuY29uY2F0KGNvbXBvbmVudE5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAoY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSkge1xuICAgICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuY29tcG9uZW50TWVhc3VyZXMucHVzaChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUuZHVyYXRpb24gPSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgZ2V0UmVsYXRpdmVUaW1lKCkgLSBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlLnRpbWVzdGFtcDtcbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tY29tcG9uZW50LWxheW91dC1lZmZlY3QtdW5tb3VudC1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQoZmliZXIpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgfHwgc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgLy8gVE9ETyAodGltZWxpbmUpIFJlY29yZCBhbmQgY2FjaGUgY29tcG9uZW50IHN0YWNrXG4gICAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUgPSB7XG4gICAgICAgICAgICBjb21wb25lbnROYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgICAgICAgdHlwZTogJ3Bhc3NpdmUtZWZmZWN0LW1vdW50JyxcbiAgICAgICAgICAgIHdhcm5pbmc6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLWNvbXBvbmVudC1wYXNzaXZlLWVmZmVjdC1tb3VudC1zdGFydC1cIi5jb25jYXQoY29tcG9uZW50TmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdG9wcGVkKCkge1xuICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgaWYgKGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEpIHtcbiAgICAgICAgICBjdXJyZW50VGltZWxpbmVEYXRhLmNvbXBvbmVudE1lYXN1cmVzLnB1c2goY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSk7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlLmR1cmF0aW9uID0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgIGdldFJlbGF0aXZlVGltZSgpIC0gY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZS50aW1lc3RhbXA7XG4gICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKCctLWNvbXBvbmVudC1wYXNzaXZlLWVmZmVjdC1tb3VudC1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZChmaWJlcikge1xuICAgIGlmIChpc1Byb2ZpbGluZyB8fCBzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAvLyBUT0RPICh0aW1lbGluZSkgUmVjb3JkIGFuZCBjYWNoZSBjb21wb25lbnQgc3RhY2tcbiAgICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZ2V0UmVsYXRpdmVUaW1lKCksXG4gICAgICAgICAgICB0eXBlOiAncGFzc2l2ZS1lZmZlY3QtdW5tb3VudCcsXG4gICAgICAgICAgICB3YXJuaW5nOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgICAgbWFya0FuZENsZWFyKFwiLS1jb21wb25lbnQtcGFzc2l2ZS1lZmZlY3QtdW5tb3VudC1zdGFydC1cIi5jb25jYXQoY29tcG9uZW50TmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAoY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSkge1xuICAgICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEuY29tcG9uZW50TWVhc3VyZXMucHVzaChjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlKTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgIGN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUuZHVyYXRpb24gPSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgZ2V0UmVsYXRpdmVUaW1lKCkgLSBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlLnRpbWVzdGFtcDtcbiAgICAgICAgY3VycmVudFJlYWN0Q29tcG9uZW50TWVhc3VyZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tY29tcG9uZW50LXBhc3NpdmUtZWZmZWN0LXVubW91bnQtc3RvcCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRFcnJvcmVkKGZpYmVyLCB0aHJvd25WYWx1ZSwgbGFuZXMpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgfHwgc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikgfHwgJ1Vua25vd24nO1xuICAgICAgdmFyIHBoYXNlID0gZmliZXIuYWx0ZXJuYXRlID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnJztcblxuICAgICAgaWYgKHRocm93blZhbHVlICE9PSBudWxsICYmIHByb2ZpbGluZ0hvb2tzX3R5cGVvZih0aHJvd25WYWx1ZSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aHJvd25WYWx1ZS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBtZXNzYWdlID0gdGhyb3duVmFsdWUubWVzc2FnZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRocm93blZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBtZXNzYWdlID0gdGhyb3duVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICAvLyBUT0RPICh0aW1lbGluZSkgUmVjb3JkIGFuZCBjYWNoZSBjb21wb25lbnQgc3RhY2tcbiAgICAgICAgaWYgKGN1cnJlbnRUaW1lbGluZURhdGEpIHtcbiAgICAgICAgICBjdXJyZW50VGltZWxpbmVEYXRhLnRocm93bkVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgICAgcGhhc2U6IHBoYXNlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBnZXRSZWxhdGl2ZVRpbWUoKSxcbiAgICAgICAgICAgIHR5cGU6ICd0aHJvd24tZXJyb3InXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgIG1hcmtBbmRDbGVhcihcIi0tZXJyb3ItXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLVwiKS5jb25jYXQocGhhc2UsIFwiLVwiKS5jb25jYXQobWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IGNhbm5vdCBoYW5kbGUgcG9seW1vcnBoaWMgV2Vha01hcHNcblxuICB2YXIgd2FrZWFibGVJRHMgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG4gIHZhciB3YWtlYWJsZUlEID0gMDtcblxuICBmdW5jdGlvbiBnZXRXYWtlYWJsZUlEKHdha2VhYmxlKSB7XG4gICAgaWYgKCF3YWtlYWJsZUlEcy5oYXMod2FrZWFibGUpKSB7XG4gICAgICB3YWtlYWJsZUlEcy5zZXQod2FrZWFibGUsIHdha2VhYmxlSUQrKyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdha2VhYmxlSURzLmdldCh3YWtlYWJsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50U3VzcGVuZGVkKGZpYmVyLCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgfHwgc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIHZhciBldmVudFR5cGUgPSB3YWtlYWJsZUlEcy5oYXMod2FrZWFibGUpID8gJ3Jlc3VzcGVuZCcgOiAnc3VzcGVuZCc7XG4gICAgICB2YXIgaWQgPSBnZXRXYWtlYWJsZUlEKHdha2VhYmxlKTtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikgfHwgJ1Vua25vd24nO1xuICAgICAgdmFyIHBoYXNlID0gZmliZXIuYWx0ZXJuYXRlID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnOyAvLyBGb2xsb3dpbmcgdGhlIG5vbi1zdGFuZGFyZCBmbi5kaXNwbGF5TmFtZSBjb252ZW50aW9uLFxuICAgICAgLy8gZnJhbWV3b3JrcyBsaWtlIFJlbGF5IG1heSBhbHNvIGFubm90YXRlIFByb21pc2VzIHdpdGggYSBkaXNwbGF5TmFtZSxcbiAgICAgIC8vIGRlc2NyaWJpbmcgd2hhdCBvcGVyYXRpb24vZGF0YSB0aGUgdGhyb3duIFByb21pc2UgaXMgcmVsYXRlZCB0by5cbiAgICAgIC8vIFdoZW4gdGhpcyBpcyBhdmFpbGFibGUgd2Ugc2hvdWxkIHBhc3MgaXQgYWxvbmcgdG8gdGhlIFRpbWVsaW5lLlxuXG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB3YWtlYWJsZS5kaXNwbGF5TmFtZSB8fCAnJztcbiAgICAgIHZhciBzdXNwZW5zZUV2ZW50ID0gbnVsbDtcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIC8vIFRPRE8gKHRpbWVsaW5lKSBSZWNvcmQgYW5kIGNhY2hlIGNvbXBvbmVudCBzdGFja1xuICAgICAgICBzdXNwZW5zZUV2ZW50ID0ge1xuICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkKSxcbiAgICAgICAgICBwaGFzZTogcGhhc2UsXG4gICAgICAgICAgcHJvbWlzZU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICAgIHJlc29sdXRpb246ICd1bnJlc29sdmVkJyxcbiAgICAgICAgICB0aW1lc3RhbXA6IGdldFJlbGF0aXZlVGltZSgpLFxuICAgICAgICAgIHR5cGU6ICdzdXNwZW5zZScsXG4gICAgICAgICAgd2FybmluZzogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5zdXNwZW5zZUV2ZW50cy5wdXNoKHN1c3BlbnNlRXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLXN1c3BlbnNlLVwiLmNvbmNhdChldmVudFR5cGUsIFwiLVwiKS5jb25jYXQoaWQsIFwiLVwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCItXCIpLmNvbmNhdChwaGFzZSwgXCItXCIpLmNvbmNhdChsYW5lcywgXCItXCIpLmNvbmNhdChkaXNwbGF5TmFtZSkpO1xuICAgICAgfVxuXG4gICAgICB3YWtlYWJsZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHN1c3BlbnNlRXZlbnQpIHtcbiAgICAgICAgICBzdXNwZW5zZUV2ZW50LmR1cmF0aW9uID0gZ2V0UmVsYXRpdmVUaW1lKCkgLSBzdXNwZW5zZUV2ZW50LnRpbWVzdGFtcDtcbiAgICAgICAgICBzdXNwZW5zZUV2ZW50LnJlc29sdXRpb24gPSAncmVzb2x2ZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICAgICAgbWFya0FuZENsZWFyKFwiLS1zdXNwZW5zZS1yZXNvbHZlZC1cIi5jb25jYXQoaWQsIFwiLVwiKS5jb25jYXQoY29tcG9uZW50TmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzdXNwZW5zZUV2ZW50KSB7XG4gICAgICAgICAgc3VzcGVuc2VFdmVudC5kdXJhdGlvbiA9IGdldFJlbGF0aXZlVGltZSgpIC0gc3VzcGVuc2VFdmVudC50aW1lc3RhbXA7XG4gICAgICAgICAgc3VzcGVuc2VFdmVudC5yZXNvbHV0aW9uID0gJ3JlamVjdGVkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICAgIG1hcmtBbmRDbGVhcihcIi0tc3VzcGVuc2UtcmVqZWN0ZWQtXCIuY29uY2F0KGlkLCBcIi1cIikuY29uY2F0KGNvbXBvbmVudE5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0xheW91dEVmZmVjdHNTdGFydGVkKGxhbmVzKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVTdGFydGVkKCdsYXlvdXQtZWZmZWN0cycsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcihcIi0tbGF5b3V0LWVmZmVjdHMtc3RhcnQtXCIuY29uY2F0KGxhbmVzKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0xheW91dEVmZmVjdHNTdG9wcGVkKCkge1xuICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgcmVjb3JkUmVhY3RNZWFzdXJlQ29tcGxldGVkKCdsYXlvdXQtZWZmZWN0cycpO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKCctLWxheW91dC1lZmZlY3RzLXN0b3AnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkKGxhbmVzKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVTdGFydGVkKCdwYXNzaXZlLWVmZmVjdHMnLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoXCItLXBhc3NpdmUtZWZmZWN0cy1zdGFydC1cIi5jb25jYXQobGFuZXMpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrUGFzc2l2ZUVmZmVjdHNTdG9wcGVkKCkge1xuICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgcmVjb3JkUmVhY3RNZWFzdXJlQ29tcGxldGVkKCdwYXNzaXZlLWVmZmVjdHMnKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIG1hcmtBbmRDbGVhcignLS1wYXNzaXZlLWVmZmVjdHMtc3RvcCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAobmV4dFJlbmRlclNob3VsZFN0YXJ0TmV3QmF0Y2gpIHtcbiAgICAgICAgbmV4dFJlbmRlclNob3VsZFN0YXJ0TmV3QmF0Y2ggPSBmYWxzZTtcbiAgICAgICAgY3VycmVudEJhdGNoVUlEKys7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSBuZXcgYmF0Y2ggb2Ygd29yaywgd3JhcCBhbiBcImlkbGVcIiBtZWFzdXJlIGFyb3VuZCBpdC5cbiAgICAgIC8vIExvZyBpdCBiZWZvcmUgdGhlIFwicmVuZGVyXCIgbWVhc3VyZSB0byBwcmVzZXJ2ZSB0aGUgc3RhY2sgb3JkZXJpbmcuXG5cblxuICAgICAgaWYgKGN1cnJlbnRSZWFjdE1lYXN1cmVzU3RhY2subGVuZ3RoID09PSAwIHx8IGN1cnJlbnRSZWFjdE1lYXN1cmVzU3RhY2tbY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjay5sZW5ndGggLSAxXS50eXBlICE9PSAncmVuZGVyLWlkbGUnKSB7XG4gICAgICAgIHJlY29yZFJlYWN0TWVhc3VyZVN0YXJ0ZWQoJ3JlbmRlci1pZGxlJywgbGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVTdGFydGVkKCdyZW5kZXInLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoXCItLXJlbmRlci1zdGFydC1cIi5jb25jYXQobGFuZXMpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrUmVuZGVyWWllbGRlZCgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJlY29yZFJlYWN0TWVhc3VyZUNvbXBsZXRlZCgncmVuZGVyJyk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICBtYXJrQW5kQ2xlYXIoJy0tcmVuZGVyLXlpZWxkJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya1JlbmRlclN0b3BwZWQoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZWNvcmRSZWFjdE1lYXN1cmVDb21wbGV0ZWQoJ3JlbmRlcicpO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKCctLXJlbmRlci1zdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya1JlbmRlclNjaGVkdWxlZChsYW5lKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICBjdXJyZW50VGltZWxpbmVEYXRhLnNjaGVkdWxpbmdFdmVudHMucHVzaCh7XG4gICAgICAgICAgbGFuZXM6IGxhbmVUb0xhbmVzQXJyYXkobGFuZSksXG4gICAgICAgICAgdGltZXN0YW1wOiBnZXRSZWxhdGl2ZVRpbWUoKSxcbiAgICAgICAgICB0eXBlOiAnc2NoZWR1bGUtcmVuZGVyJyxcbiAgICAgICAgICB3YXJuaW5nOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgbWFya0FuZENsZWFyKFwiLS1zY2hlZHVsZS1yZW5kZXItXCIuY29uY2F0KGxhbmUpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcgfHwgc3VwcG9ydHNVc2VyVGltaW5nVjMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgICAgLy8gVE9ETyAodGltZWxpbmUpIFJlY29yZCBhbmQgY2FjaGUgY29tcG9uZW50IHN0YWNrXG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhKSB7XG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5zY2hlZHVsaW5nRXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIGxhbmVzOiBsYW5lVG9MYW5lc0FycmF5KGxhbmUpLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBnZXRSZWxhdGl2ZVRpbWUoKSxcbiAgICAgICAgICAgIHR5cGU6ICdzY2hlZHVsZS1mb3JjZS11cGRhdGUnLFxuICAgICAgICAgICAgd2FybmluZzogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLXNjaGVkdWxlLWZvcmNlZC11cGRhdGUtXCIuY29uY2F0KGxhbmUsIFwiLVwiKS5jb25jYXQoY29tcG9uZW50TmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhcmVudEZpYmVycyhmaWJlcikge1xuICAgIHZhciBwYXJlbnRzID0gW107XG4gICAgdmFyIHBhcmVudCA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRzO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBsYW5lKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nIHx8IHN1cHBvcnRzVXNlclRpbWluZ1YzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIC8vIFRPRE8gKHRpbWVsaW5lKSBSZWNvcmQgYW5kIGNhY2hlIGNvbXBvbmVudCBzdGFja1xuICAgICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICAgIHZhciBldmVudCA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgcGFyZW50IGZpYmVycyBzbyB3ZSBjYW4gcG9zdCBwcm9jZXNzXG4gICAgICAgICAgICAvLyB0aGVtIGFmdGVyIHdlIGZpbmlzaCBwcm9maWxpbmdcbiAgICAgICAgICAgIGxhbmVzOiBsYW5lVG9MYW5lc0FycmF5KGxhbmUpLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBnZXRSZWxhdGl2ZVRpbWUoKSxcbiAgICAgICAgICAgIHR5cGU6ICdzY2hlZHVsZS1zdGF0ZS11cGRhdGUnLFxuICAgICAgICAgICAgd2FybmluZzogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgY3VycmVudEZpYmVyU3RhY2tzLnNldChldmVudCwgZ2V0UGFyZW50RmliZXJzKGZpYmVyKSk7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5zY2hlZHVsaW5nRXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLXNjaGVkdWxlLXN0YXRlLXVwZGF0ZS1cIi5jb25jYXQobGFuZSwgXCItXCIpLmNvbmNhdChjb21wb25lbnROYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlUHJvZmlsaW5nU3RhdHVzKHZhbHVlKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nICE9PSB2YWx1ZSkge1xuICAgICAgaXNQcm9maWxpbmcgPSB2YWx1ZTtcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICAgIHZhciBpbnRlcm5hbE1vZHVsZVNvdXJjZVRvUmFuZ2VzID0gbmV3IE1hcCgpO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c1VzZXJUaW1pbmdWMykge1xuICAgICAgICAgIHZhciByYW5nZXMgPSBnZXRJbnRlcm5hbE1vZHVsZVJhbmdlcygpO1xuXG4gICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldO1xuXG4gICAgICAgICAgICAgIGlmIChzaGFyZWRfaXNBcnJheShyYW5nZSkgJiYgcmFuZ2UubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9yYW5nZXMkaTIgPSBwcm9maWxpbmdIb29rc19zbGljZWRUb0FycmF5KHJhbmdlc1tpXSwgMiksXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0U3RhY2tGcmFtZSA9IF9yYW5nZXMkaTJbMF0sXG4gICAgICAgICAgICAgICAgICAgIHN0b3BTdGFja0ZyYW1lID0gX3JhbmdlcyRpMlsxXTtcblxuICAgICAgICAgICAgICAgIG1hcmtBbmRDbGVhcihcIi0tcmVhY3QtaW50ZXJuYWwtbW9kdWxlLXN0YXJ0LVwiLmNvbmNhdChzdGFydFN0YWNrRnJhbWUpKTtcbiAgICAgICAgICAgICAgICBtYXJrQW5kQ2xlYXIoXCItLXJlYWN0LWludGVybmFsLW1vZHVsZS1zdG9wLVwiLmNvbmNhdChzdG9wU3RhY2tGcmFtZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxhbmVUb1JlYWN0TWVhc3VyZU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGxhbmUgPSAxO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBSRUFDVF9UT1RBTF9OVU1fTEFORVM7IGluZGV4KyspIHtcbiAgICAgICAgICBsYW5lVG9SZWFjdE1lYXN1cmVNYXAuc2V0KGxhbmUsIFtdKTtcbiAgICAgICAgICBsYW5lICo9IDI7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QmF0Y2hVSUQgPSAwO1xuICAgICAgICBjdXJyZW50UmVhY3RDb21wb25lbnRNZWFzdXJlID0gbnVsbDtcbiAgICAgICAgY3VycmVudFJlYWN0TWVhc3VyZXNTdGFjayA9IFtdO1xuICAgICAgICBjdXJyZW50RmliZXJTdGFja3MgPSBuZXcgTWFwKCk7XG4gICAgICAgIGN1cnJlbnRUaW1lbGluZURhdGEgPSB7XG4gICAgICAgICAgLy8gU2Vzc2lvbiB3aWRlIG1ldGFkYXRhOyBvbmx5IGNvbGxlY3RlZCBvbmNlLlxuICAgICAgICAgIGludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXM6IGludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXMsXG4gICAgICAgICAgbGFuZVRvTGFiZWxNYXA6IGxhbmVUb0xhYmVsTWFwIHx8IG5ldyBNYXAoKSxcbiAgICAgICAgICByZWFjdFZlcnNpb246IHJlYWN0VmVyc2lvbixcbiAgICAgICAgICAvLyBEYXRhIGxvZ2dlZCBieSBSZWFjdCBkdXJpbmcgcHJvZmlsaW5nIHNlc3Npb24uXG4gICAgICAgICAgY29tcG9uZW50TWVhc3VyZXM6IFtdLFxuICAgICAgICAgIHNjaGVkdWxpbmdFdmVudHM6IFtdLFxuICAgICAgICAgIHN1c3BlbnNlRXZlbnRzOiBbXSxcbiAgICAgICAgICB0aHJvd25FcnJvcnM6IFtdLFxuICAgICAgICAgIC8vIERhdGEgaW5mZXJyZWQgYmFzZWQgb24gd2hhdCBSZWFjdCBsb2dzLlxuICAgICAgICAgIGJhdGNoVUlEVG9NZWFzdXJlc01hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgICAgIGxhbmVUb1JlYWN0TWVhc3VyZU1hcDogbGFuZVRvUmVhY3RNZWFzdXJlTWFwLFxuICAgICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgICAvLyBEYXRhIG9ubHkgYXZhaWxhYmxlIGluIENocm9tZSBwcm9maWxlcy5cbiAgICAgICAgICBmbGFtZWNoYXJ0OiBbXSxcbiAgICAgICAgICBuYXRpdmVFdmVudHM6IFtdLFxuICAgICAgICAgIG5ldHdvcmtNZWFzdXJlczogW10sXG4gICAgICAgICAgb3RoZXJVc2VyVGltaW5nTWFya3M6IFtdLFxuICAgICAgICAgIHNuYXBzaG90czogW10sXG4gICAgICAgICAgc25hcHNob3RIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgbmV4dFJlbmRlclNob3VsZFN0YXJ0TmV3QmF0Y2ggPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUG9zdHByb2Nlc3MgUHJvZmlsZSBkYXRhXG4gICAgICAgIGlmIChjdXJyZW50VGltZWxpbmVEYXRhICE9PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFRpbWVsaW5lRGF0YS5zY2hlZHVsaW5nRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3NjaGVkdWxlLXN0YXRlLXVwZGF0ZScpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETyhsdW5hKTogV2UgY2FuIG9wdGltaXplIHRoaXMgYnkgY3JlYXRpbmcgYSBtYXAgb2ZcbiAgICAgICAgICAgICAgLy8gZmliZXIgdG8gY29tcG9uZW50IHN0YWNrIGluc3RlYWQgb2YgZ2VuZXJhdGluZyB0aGUgc3RhY2tcbiAgICAgICAgICAgICAgLy8gZm9yIGV2ZXJ5IGZpYmVyIGV2ZXJ5IHRpbWVcbiAgICAgICAgICAgICAgdmFyIGZpYmVyU3RhY2sgPSBjdXJyZW50RmliZXJTdGFja3MuZ2V0KGV2ZW50KTtcblxuICAgICAgICAgICAgICBpZiAoZmliZXJTdGFjayAmJiBjdXJyZW50RGlzcGF0Y2hlclJlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuY29tcG9uZW50U3RhY2sgPSBmaWJlclN0YWNrLnJlZHVjZShmdW5jdGlvbiAodHJhY2UsIGZpYmVyKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJhY2UgKyBkZXNjcmliZUZpYmVyKHdvcmtUYWdNYXAsIGZpYmVyLCBjdXJyZW50RGlzcGF0Y2hlclJlZik7XG4gICAgICAgICAgICAgICAgfSwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gLy8gQ2xlYXIgdGhlIGN1cnJlbnQgZmliZXIgc3RhY2tzIHNvIHdlIGRvbid0IGhvbGQgb250byB0aGUgZmliZXJzXG4gICAgICAgIC8vIGluIG1lbW9yeSBhZnRlciBwcm9maWxpbmcgZmluaXNoZXNcblxuXG4gICAgICAgIGN1cnJlbnRGaWJlclN0YWNrcy5jbGVhcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2V0VGltZWxpbmVEYXRhOiBnZXRUaW1lbGluZURhdGEsXG4gICAgcHJvZmlsaW5nSG9va3M6IHtcbiAgICAgIG1hcmtDb21taXRTdGFydGVkOiBtYXJrQ29tbWl0U3RhcnRlZCxcbiAgICAgIG1hcmtDb21taXRTdG9wcGVkOiBtYXJrQ29tbWl0U3RvcHBlZCxcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkOiBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCxcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkOiBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCxcbiAgICAgIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkOiBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZCxcbiAgICAgIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdG9wcGVkOiBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCxcbiAgICAgIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQ6IG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQsXG4gICAgICBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkOiBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkLFxuICAgICAgbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZDogbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZCxcbiAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQ6IG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQsXG4gICAgICBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0YXJ0ZWQ6IG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZCxcbiAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZDogbWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdG9wcGVkLFxuICAgICAgbWFya0NvbXBvbmVudEVycm9yZWQ6IG1hcmtDb21wb25lbnRFcnJvcmVkLFxuICAgICAgbWFya0NvbXBvbmVudFN1c3BlbmRlZDogbWFya0NvbXBvbmVudFN1c3BlbmRlZCxcbiAgICAgIG1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZDogbWFya0xheW91dEVmZmVjdHNTdGFydGVkLFxuICAgICAgbWFya0xheW91dEVmZmVjdHNTdG9wcGVkOiBtYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQsXG4gICAgICBtYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkOiBtYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkLFxuICAgICAgbWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZDogbWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCxcbiAgICAgIG1hcmtSZW5kZXJTdGFydGVkOiBtYXJrUmVuZGVyU3RhcnRlZCxcbiAgICAgIG1hcmtSZW5kZXJZaWVsZGVkOiBtYXJrUmVuZGVyWWllbGRlZCxcbiAgICAgIG1hcmtSZW5kZXJTdG9wcGVkOiBtYXJrUmVuZGVyU3RvcHBlZCxcbiAgICAgIG1hcmtSZW5kZXJTY2hlZHVsZWQ6IG1hcmtSZW5kZXJTY2hlZHVsZWQsXG4gICAgICBtYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQ6IG1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZCxcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZDogbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkXG4gICAgfSxcbiAgICB0b2dnbGVQcm9maWxpbmdTdGF0dXM6IHRvZ2dsZVByb2ZpbGluZ1N0YXR1c1xuICB9O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9yZW5kZXJlci5qc1xuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IHJlbmRlcmVyX293bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZW5kZXJlcl9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyByZW5kZXJlcl9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmVyX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiByZW5kZXJlcl9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IHJlbmRlcmVyX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgcmVuZGVyZXJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCByZW5kZXJlcl9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiByZW5kZXJlcl9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IHJlbmRlcmVyX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHJlbmRlcmVyX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgcmVuZGVyZXJfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gcmVuZGVyZXJfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiByZW5kZXJlcl9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0OyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBvW1N5bWJvbC5pdGVyYXRvcl0gPT0gbnVsbCkgeyBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSByZW5kZXJlcl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UyKSB7IHRocm93IF9lMjsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gb1tTeW1ib2wuaXRlcmF0b3JdKCk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTMpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UzOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmVyX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmVuZGVyZXJfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIHJlbmRlcmVyX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiByZW5kZXJlcl90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IHJlbmRlcmVyX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyByZW5kZXJlcl90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gcmVuZGVyZXJfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIGdldEZpYmVyRmxhZ3MoZmliZXIpIHtcbiAgLy8gVGhlIG5hbWUgb2YgdGhpcyBmaWVsZCBjaGFuZ2VkIGZyb20gXCJlZmZlY3RUYWdcIiB0byBcImZsYWdzXCJcbiAgcmV0dXJuIGZpYmVyLmZsYWdzICE9PSB1bmRlZmluZWQgPyBmaWJlci5mbGFncyA6IGZpYmVyLmVmZmVjdFRhZztcbn0gLy8gU29tZSBlbnZpcm9ubWVudHMgKGUuZy4gUmVhY3QgTmF0aXZlIC8gSGVybWVzKSBkb24ndCBzdXBwb3J0IHRoZSBwZXJmb3JtYW5jZSBBUEkgeWV0LlxuXG5cbnZhciByZW5kZXJlcl9nZXRDdXJyZW50VGltZSA9IC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbih0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogcmVuZGVyZXJfdHlwZW9mKHBlcmZvcm1hbmNlKSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgPyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbn0gOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBEYXRlLm5vdygpO1xufTtcbmZ1bmN0aW9uIGdldEludGVybmFsUmVhY3RDb25zdGFudHModmVyc2lvbikge1xuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vIFRoZSBzZWN0aW9uIGJlbG93IGlzIGNvcGllZCBmcm9tIGZpbGVzIGluIFJlYWN0IHJlcG8uXG4gIC8vIEtlZXAgaXQgaW4gc3luYywgYW5kIGFkZCB2ZXJzaW9uIGd1YXJkcyBpZiBpdCBjaGFuZ2VzLlxuICAvL1xuICAvLyBUZWNobmljYWxseSB0aGVzZSBwcmlvcml0eSBsZXZlbHMgYXJlIGludmFsaWQgZm9yIHZlcnNpb25zIGJlZm9yZSAxNi45LFxuICAvLyBidXQgMTYuOSBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0byByZXBvcnQgcHJpb3JpdHkgbGV2ZWwgdG8gRGV2VG9vbHMsXG4gIC8vIHNvIHdlIGNhbiBhdm9pZCBjaGVja2luZyBmb3IgZWFybGllciB2ZXJzaW9ucyBhbmQgc3VwcG9ydCBwcmUtMTYuOSBjYW5hcnkgcmVsZWFzZXMgaW4gdGhlIHByb2Nlc3MuXG4gIHZhciBSZWFjdFByaW9yaXR5TGV2ZWxzID0ge1xuICAgIEltbWVkaWF0ZVByaW9yaXR5OiA5OSxcbiAgICBVc2VyQmxvY2tpbmdQcmlvcml0eTogOTgsXG4gICAgTm9ybWFsUHJpb3JpdHk6IDk3LFxuICAgIExvd1ByaW9yaXR5OiA5NixcbiAgICBJZGxlUHJpb3JpdHk6IDk1LFxuICAgIE5vUHJpb3JpdHk6IDkwXG4gIH07XG5cbiAgaWYgKGd0KHZlcnNpb24sICcxNy4wLjInKSkge1xuICAgIFJlYWN0UHJpb3JpdHlMZXZlbHMgPSB7XG4gICAgICBJbW1lZGlhdGVQcmlvcml0eTogMSxcbiAgICAgIFVzZXJCbG9ja2luZ1ByaW9yaXR5OiAyLFxuICAgICAgTm9ybWFsUHJpb3JpdHk6IDMsXG4gICAgICBMb3dQcmlvcml0eTogNCxcbiAgICAgIElkbGVQcmlvcml0eTogNSxcbiAgICAgIE5vUHJpb3JpdHk6IDBcbiAgICB9O1xuICB9XG5cbiAgdmFyIFN0cmljdE1vZGVCaXRzID0gMDtcblxuICBpZiAoZ3RlKHZlcnNpb24sICcxOC4wLjAtYWxwaGEnKSkge1xuICAgIC8vIDE4K1xuICAgIFN0cmljdE1vZGVCaXRzID0gMjQ7XG4gIH0gZWxzZSBpZiAoZ3RlKHZlcnNpb24sICcxNi45LjAnKSkge1xuICAgIC8vIDE2LjkgLSAxN1xuICAgIFN0cmljdE1vZGVCaXRzID0gMTtcbiAgfSBlbHNlIGlmIChndGUodmVyc2lvbiwgJzE2LjMuMCcpKSB7XG4gICAgLy8gMTYuMyAtIDE2LjhcbiAgICBTdHJpY3RNb2RlQml0cyA9IDI7XG4gIH1cblxuICB2YXIgUmVhY3RUeXBlT2ZXb3JrID0gbnVsbDsgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBUaGUgc2VjdGlvbiBiZWxvdyBpcyBjb3BpZWQgZnJvbSBmaWxlcyBpbiBSZWFjdCByZXBvLlxuICAvLyBLZWVwIGl0IGluIHN5bmMsIGFuZCBhZGQgdmVyc2lvbiBndWFyZHMgaWYgaXQgY2hhbmdlcy5cbiAgLy9cbiAgLy8gVE9ETyBVcGRhdGUgdGhlIGd0KCkgY2hlY2sgYmVsb3cgdG8gYmUgZ3RlKCkgd2hpY2hldmVyIHRoZSBuZXh0IHZlcnNpb24gbnVtYmVyIGlzLlxuICAvLyBDdXJyZW50bHkgdGhlIHZlcnNpb24gaW4gR2l0IGlzIDE3LjAuMiAoYnV0IHRoYXQgdmVyc2lvbiBoYXMgbm90IGJlZW4vbWF5IG5vdCBlbmQgdXAgYmVpbmcgcmVsZWFzZWQpLlxuXG4gIGlmIChndCh2ZXJzaW9uLCAnMTcuMC4xJykpIHtcbiAgICBSZWFjdFR5cGVPZldvcmsgPSB7XG4gICAgICBDYWNoZUNvbXBvbmVudDogMjQsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIENsYXNzQ29tcG9uZW50OiAxLFxuICAgICAgQ29udGV4dENvbnN1bWVyOiA5LFxuICAgICAgQ29udGV4dFByb3ZpZGVyOiAxMCxcbiAgICAgIENvcm91dGluZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBDb3JvdXRpbmVIYW5kbGVyUGhhc2U6IC0xLFxuICAgICAgLy8gUmVtb3ZlZFxuICAgICAgRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50OiAxOCxcbiAgICAgIC8vIEJlaGluZCBhIGZsYWdcbiAgICAgIEZvcndhcmRSZWY6IDExLFxuICAgICAgRnJhZ21lbnQ6IDcsXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudDogMCxcbiAgICAgIEhvc3RDb21wb25lbnQ6IDUsXG4gICAgICBIb3N0UG9ydGFsOiA0LFxuICAgICAgSG9zdFJvb3Q6IDMsXG4gICAgICBIb3N0SG9pc3RhYmxlOiAyNixcbiAgICAgIC8vIEluIHJlYWxpdHksIDE4LjIrLiBCdXQgZG9lc24ndCBodXJ0IHRvIGluY2x1ZGUgaXQgaGVyZVxuICAgICAgSG9zdFNpbmdsZXRvbjogMjcsXG4gICAgICAvLyBTYW1lIGFzIGFib3ZlXG4gICAgICBIb3N0VGV4dDogNixcbiAgICAgIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDogMTcsXG4gICAgICBJbmRldGVybWluYXRlQ29tcG9uZW50OiAyLFxuICAgICAgTGF6eUNvbXBvbmVudDogMTYsXG4gICAgICBMZWdhY3lIaWRkZW5Db21wb25lbnQ6IDIzLFxuICAgICAgTWVtb0NvbXBvbmVudDogMTQsXG4gICAgICBNb2RlOiA4LFxuICAgICAgT2Zmc2NyZWVuQ29tcG9uZW50OiAyMixcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgUHJvZmlsZXI6IDEyLFxuICAgICAgU2NvcGVDb21wb25lbnQ6IDIxLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBTaW1wbGVNZW1vQ29tcG9uZW50OiAxNSxcbiAgICAgIFN1c3BlbnNlQ29tcG9uZW50OiAxMyxcbiAgICAgIFN1c3BlbnNlTGlzdENvbXBvbmVudDogMTksXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6IDI1LFxuICAgICAgLy8gRXhwZXJpbWVudGFsIC0gVGhpcyBpcyB0ZWNobmljYWxseSBpbiAxOCBidXQgd2UgZG9uJ3RcbiAgICAgIC8vIHdhbnQgdG8gZm9yayBhZ2FpbiBzbyB3ZSdyZSBhZGRpbmcgaXQgaGVyZSBpbnN0ZWFkXG4gICAgICBZaWVsZENvbXBvbmVudDogLTEgLy8gUmVtb3ZlZFxuXG4gICAgfTtcbiAgfSBlbHNlIGlmIChndGUodmVyc2lvbiwgJzE3LjAuMC1hbHBoYScpKSB7XG4gICAgUmVhY3RUeXBlT2ZXb3JrID0ge1xuICAgICAgQ2FjaGVDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIENsYXNzQ29tcG9uZW50OiAxLFxuICAgICAgQ29udGV4dENvbnN1bWVyOiA5LFxuICAgICAgQ29udGV4dFByb3ZpZGVyOiAxMCxcbiAgICAgIENvcm91dGluZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBDb3JvdXRpbmVIYW5kbGVyUGhhc2U6IC0xLFxuICAgICAgLy8gUmVtb3ZlZFxuICAgICAgRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50OiAxOCxcbiAgICAgIC8vIEJlaGluZCBhIGZsYWdcbiAgICAgIEZvcndhcmRSZWY6IDExLFxuICAgICAgRnJhZ21lbnQ6IDcsXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudDogMCxcbiAgICAgIEhvc3RDb21wb25lbnQ6IDUsXG4gICAgICBIb3N0UG9ydGFsOiA0LFxuICAgICAgSG9zdFJvb3Q6IDMsXG4gICAgICBIb3N0SG9pc3RhYmxlOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0U2luZ2xldG9uOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0VGV4dDogNixcbiAgICAgIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDogMTcsXG4gICAgICBJbmRldGVybWluYXRlQ29tcG9uZW50OiAyLFxuICAgICAgTGF6eUNvbXBvbmVudDogMTYsXG4gICAgICBMZWdhY3lIaWRkZW5Db21wb25lbnQ6IDI0LFxuICAgICAgTWVtb0NvbXBvbmVudDogMTQsXG4gICAgICBNb2RlOiA4LFxuICAgICAgT2Zmc2NyZWVuQ29tcG9uZW50OiAyMyxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgUHJvZmlsZXI6IDEyLFxuICAgICAgU2NvcGVDb21wb25lbnQ6IDIxLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBTaW1wbGVNZW1vQ29tcG9uZW50OiAxNSxcbiAgICAgIFN1c3BlbnNlQ29tcG9uZW50OiAxMyxcbiAgICAgIFN1c3BlbnNlTGlzdENvbXBvbmVudDogMTksXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIFlpZWxkQ29tcG9uZW50OiAtMSAvLyBSZW1vdmVkXG5cbiAgICB9O1xuICB9IGVsc2UgaWYgKGd0ZSh2ZXJzaW9uLCAnMTYuNi4wLWJldGEuMCcpKSB7XG4gICAgUmVhY3RUeXBlT2ZXb3JrID0ge1xuICAgICAgQ2FjaGVDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIENsYXNzQ29tcG9uZW50OiAxLFxuICAgICAgQ29udGV4dENvbnN1bWVyOiA5LFxuICAgICAgQ29udGV4dFByb3ZpZGVyOiAxMCxcbiAgICAgIENvcm91dGluZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBDb3JvdXRpbmVIYW5kbGVyUGhhc2U6IC0xLFxuICAgICAgLy8gUmVtb3ZlZFxuICAgICAgRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50OiAxOCxcbiAgICAgIC8vIEJlaGluZCBhIGZsYWdcbiAgICAgIEZvcndhcmRSZWY6IDExLFxuICAgICAgRnJhZ21lbnQ6IDcsXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudDogMCxcbiAgICAgIEhvc3RDb21wb25lbnQ6IDUsXG4gICAgICBIb3N0UG9ydGFsOiA0LFxuICAgICAgSG9zdFJvb3Q6IDMsXG4gICAgICBIb3N0SG9pc3RhYmxlOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0U2luZ2xldG9uOiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBIb3N0VGV4dDogNixcbiAgICAgIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDogMTcsXG4gICAgICBJbmRldGVybWluYXRlQ29tcG9uZW50OiAyLFxuICAgICAgTGF6eUNvbXBvbmVudDogMTYsXG4gICAgICBMZWdhY3lIaWRkZW5Db21wb25lbnQ6IC0xLFxuICAgICAgTWVtb0NvbXBvbmVudDogMTQsXG4gICAgICBNb2RlOiA4LFxuICAgICAgT2Zmc2NyZWVuQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIEV4cGVyaW1lbnRhbFxuICAgICAgUHJvZmlsZXI6IDEyLFxuICAgICAgU2NvcGVDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBTaW1wbGVNZW1vQ29tcG9uZW50OiAxNSxcbiAgICAgIFN1c3BlbnNlQ29tcG9uZW50OiAxMyxcbiAgICAgIFN1c3BlbnNlTGlzdENvbXBvbmVudDogMTksXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIFlpZWxkQ29tcG9uZW50OiAtMSAvLyBSZW1vdmVkXG5cbiAgICB9O1xuICB9IGVsc2UgaWYgKGd0ZSh2ZXJzaW9uLCAnMTYuNC4zLWFscGhhJykpIHtcbiAgICBSZWFjdFR5cGVPZldvcmsgPSB7XG4gICAgICBDYWNoZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgQ2xhc3NDb21wb25lbnQ6IDIsXG4gICAgICBDb250ZXh0Q29uc3VtZXI6IDExLFxuICAgICAgQ29udGV4dFByb3ZpZGVyOiAxMixcbiAgICAgIENvcm91dGluZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBSZW1vdmVkXG4gICAgICBDb3JvdXRpbmVIYW5kbGVyUGhhc2U6IC0xLFxuICAgICAgLy8gUmVtb3ZlZFxuICAgICAgRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBGb3J3YXJkUmVmOiAxMyxcbiAgICAgIEZyYWdtZW50OiA5LFxuICAgICAgRnVuY3Rpb25Db21wb25lbnQ6IDAsXG4gICAgICBIb3N0Q29tcG9uZW50OiA3LFxuICAgICAgSG9zdFBvcnRhbDogNixcbiAgICAgIEhvc3RSb290OiA1LFxuICAgICAgSG9zdEhvaXN0YWJsZTogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgSG9zdFNpbmdsZXRvbjogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgSG9zdFRleHQ6IDgsXG4gICAgICBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IDQsXG4gICAgICBMYXp5Q29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBMZWdhY3lIaWRkZW5Db21wb25lbnQ6IC0xLFxuICAgICAgTWVtb0NvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgTW9kZTogMTAsXG4gICAgICBPZmZzY3JlZW5Db21wb25lbnQ6IC0xLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBQcm9maWxlcjogMTUsXG4gICAgICBTY29wZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFNpbXBsZU1lbW9Db21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIFN1c3BlbnNlQ29tcG9uZW50OiAxNixcbiAgICAgIFN1c3BlbnNlTGlzdENvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgVHJhY2luZ01hcmtlckNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgWWllbGRDb21wb25lbnQ6IC0xIC8vIFJlbW92ZWRcblxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgUmVhY3RUeXBlT2ZXb3JrID0ge1xuICAgICAgQ2FjaGVDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIENsYXNzQ29tcG9uZW50OiAyLFxuICAgICAgQ29udGV4dENvbnN1bWVyOiAxMixcbiAgICAgIENvbnRleHRQcm92aWRlcjogMTMsXG4gICAgICBDb3JvdXRpbmVDb21wb25lbnQ6IDcsXG4gICAgICBDb3JvdXRpbmVIYW5kbGVyUGhhc2U6IDgsXG4gICAgICBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEZvcndhcmRSZWY6IDE0LFxuICAgICAgRnJhZ21lbnQ6IDEwLFxuICAgICAgRnVuY3Rpb25Db21wb25lbnQ6IDEsXG4gICAgICBIb3N0Q29tcG9uZW50OiA1LFxuICAgICAgSG9zdFBvcnRhbDogNCxcbiAgICAgIEhvc3RSb290OiAzLFxuICAgICAgSG9zdEhvaXN0YWJsZTogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgSG9zdFNpbmdsZXRvbjogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgSG9zdFRleHQ6IDYsXG4gICAgICBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IDAsXG4gICAgICBMYXp5Q29tcG9uZW50OiAtMSxcbiAgICAgIC8vIERvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBMZWdhY3lIaWRkZW5Db21wb25lbnQ6IC0xLFxuICAgICAgTWVtb0NvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgTW9kZTogMTEsXG4gICAgICBPZmZzY3JlZW5Db21wb25lbnQ6IC0xLFxuICAgICAgLy8gRXhwZXJpbWVudGFsXG4gICAgICBQcm9maWxlcjogMTUsXG4gICAgICBTY29wZUNvbXBvbmVudDogLTEsXG4gICAgICAvLyBFeHBlcmltZW50YWxcbiAgICAgIFNpbXBsZU1lbW9Db21wb25lbnQ6IC0xLFxuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIFN1c3BlbnNlQ29tcG9uZW50OiAxNixcbiAgICAgIFN1c3BlbnNlTGlzdENvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgVHJhY2luZ01hcmtlckNvbXBvbmVudDogLTEsXG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldFxuICAgICAgWWllbGRDb21wb25lbnQ6IDlcbiAgICB9O1xuICB9IC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gRW5kIG9mIGNvcGllZCBjb2RlLlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblxuICBmdW5jdGlvbiBnZXRUeXBlU3ltYm9sKHR5cGUpIHtcbiAgICB2YXIgc3ltYm9sT3JOdW1iZXIgPSByZW5kZXJlcl90eXBlb2YodHlwZSkgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgPyB0eXBlLiQkdHlwZW9mIDogdHlwZTtcbiAgICByZXR1cm4gcmVuZGVyZXJfdHlwZW9mKHN5bWJvbE9yTnVtYmVyKSA9PT0gJ3N5bWJvbCcgPyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIGB0b1N0cmluZygpYCBkb2Vzbid0IG1hdGNoIHRoZSB0eXBlIHNpZ25hdHVyZT9cbiAgICBzeW1ib2xPck51bWJlci50b1N0cmluZygpIDogc3ltYm9sT3JOdW1iZXI7XG4gIH1cblxuICB2YXIgX1JlYWN0VHlwZU9mV29yayA9IFJlYWN0VHlwZU9mV29yayxcbiAgICAgIENhY2hlQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5DYWNoZUNvbXBvbmVudCxcbiAgICAgIENsYXNzQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5DbGFzc0NvbXBvbmVudCxcbiAgICAgIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50LFxuICAgICAgRnVuY3Rpb25Db21wb25lbnQgPSBfUmVhY3RUeXBlT2ZXb3JrLkZ1bmN0aW9uQ29tcG9uZW50LFxuICAgICAgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCxcbiAgICAgIEZvcndhcmRSZWYgPSBfUmVhY3RUeXBlT2ZXb3JrLkZvcndhcmRSZWYsXG4gICAgICBIb3N0Um9vdCA9IF9SZWFjdFR5cGVPZldvcmsuSG9zdFJvb3QsXG4gICAgICBIb3N0SG9pc3RhYmxlID0gX1JlYWN0VHlwZU9mV29yay5Ib3N0SG9pc3RhYmxlLFxuICAgICAgSG9zdFNpbmdsZXRvbiA9IF9SZWFjdFR5cGVPZldvcmsuSG9zdFNpbmdsZXRvbixcbiAgICAgIEhvc3RDb21wb25lbnQgPSBfUmVhY3RUeXBlT2ZXb3JrLkhvc3RDb21wb25lbnQsXG4gICAgICBIb3N0UG9ydGFsID0gX1JlYWN0VHlwZU9mV29yay5Ib3N0UG9ydGFsLFxuICAgICAgSG9zdFRleHQgPSBfUmVhY3RUeXBlT2ZXb3JrLkhvc3RUZXh0LFxuICAgICAgRnJhZ21lbnQgPSBfUmVhY3RUeXBlT2ZXb3JrLkZyYWdtZW50LFxuICAgICAgTGF6eUNvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuTGF6eUNvbXBvbmVudCxcbiAgICAgIExlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuTGVnYWN5SGlkZGVuQ29tcG9uZW50LFxuICAgICAgTWVtb0NvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuTWVtb0NvbXBvbmVudCxcbiAgICAgIE9mZnNjcmVlbkNvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuT2Zmc2NyZWVuQ29tcG9uZW50LFxuICAgICAgUHJvZmlsZXIgPSBfUmVhY3RUeXBlT2ZXb3JrLlByb2ZpbGVyLFxuICAgICAgU2NvcGVDb21wb25lbnQgPSBfUmVhY3RUeXBlT2ZXb3JrLlNjb3BlQ29tcG9uZW50LFxuICAgICAgU2ltcGxlTWVtb0NvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuU2ltcGxlTWVtb0NvbXBvbmVudCxcbiAgICAgIFN1c3BlbnNlQ29tcG9uZW50ID0gX1JlYWN0VHlwZU9mV29yay5TdXNwZW5zZUNvbXBvbmVudCxcbiAgICAgIFN1c3BlbnNlTGlzdENvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuU3VzcGVuc2VMaXN0Q29tcG9uZW50LFxuICAgICAgVHJhY2luZ01hcmtlckNvbXBvbmVudCA9IF9SZWFjdFR5cGVPZldvcmsuVHJhY2luZ01hcmtlckNvbXBvbmVudDtcblxuICBmdW5jdGlvbiByZXNvbHZlRmliZXJUeXBlKHR5cGUpIHtcbiAgICB2YXIgdHlwZVN5bWJvbCA9IGdldFR5cGVTeW1ib2wodHlwZSk7XG5cbiAgICBzd2l0Y2ggKHR5cGVTeW1ib2wpIHtcbiAgICAgIGNhc2UgUmVhY3RTeW1ib2xzX01FTU9fTlVNQkVSOlxuICAgICAgY2FzZSBSZWFjdFN5bWJvbHNfTUVNT19TWU1CT0xfU1RSSU5HOlxuICAgICAgICAvLyByZWN1cnNpdmVseSByZXNvbHZpbmcgbWVtbyB0eXBlIGluIGNhc2Ugb2YgbWVtbyhmb3J3YXJkUmVmKENvbXBvbmVudCkpXG4gICAgICAgIHJldHVybiByZXNvbHZlRmliZXJUeXBlKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUmVhY3RTeW1ib2xzX0ZPUldBUkRfUkVGX05VTUJFUjpcbiAgICAgIGNhc2UgUmVhY3RTeW1ib2xzX0ZPUldBUkRfUkVGX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgIHJldHVybiB0eXBlLnJlbmRlcjtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9IC8vIE5PVElDRSBLZWVwIGluIHN5bmMgd2l0aCBzaG91bGRGaWx0ZXJGaWJlcigpIGFuZCBvdGhlciBnZXQqRm9yRmliZXIgbWV0aG9kc1xuXG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcikge1xuICAgIHZhciBfZmliZXIkdXBkYXRlUXVldWU7XG5cbiAgICB2YXIgc2hvdWxkU2tpcEZvcmdldENoZWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICB2YXIgZWxlbWVudFR5cGUgPSBmaWJlci5lbGVtZW50VHlwZSxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGUsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZztcbiAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgIGlmIChyZW5kZXJlcl90eXBlb2YodHlwZSkgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGaWJlclR5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdmVkQ29udGV4dCA9IG51bGw7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIGZpYmVyLnVwZGF0ZVF1ZXVlIGlzIG1peGVkXG5cbiAgICBpZiAoIXNob3VsZFNraXBGb3JnZXRDaGVjayAmJiAoKF9maWJlciR1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlKSA9PT0gbnVsbCB8fCBfZmliZXIkdXBkYXRlUXVldWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9maWJlciR1cGRhdGVRdWV1ZS5tZW1vQ2FjaGUpICE9IG51bGwpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZVdpdGhvdXRGb3JnZXRXcmFwcGVyID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlciwgdHJ1ZSk7XG5cbiAgICAgIGlmIChkaXNwbGF5TmFtZVdpdGhvdXRGb3JnZXRXcmFwcGVyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcIkZvcmdldChcIi5jb25jYXQoZGlzcGxheU5hbWVXaXRob3V0Rm9yZ2V0V3JhcHBlciwgXCIpXCIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIENhY2hlQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gJ0NhY2hlJztcblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lKHJlc29sdmVkVHlwZSk7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWREaXNwbGF5TmFtZShlbGVtZW50VHlwZSwgcmVzb2x2ZWRUeXBlLCAnRm9yd2FyZFJlZicsICdBbm9ueW1vdXMnKTtcblxuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgdmFyIGZpYmVyUm9vdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmliZXJSb290ICE9IG51bGwgJiYgZmliZXJSb290Ll9kZWJ1Z1Jvb3RUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZpYmVyUm9vdC5fZGVidWdSb290VHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgY2FzZSBGcmFnbWVudDpcbiAgICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgICAgLy8gVGhpcyBkaXNwbGF5IG5hbWUgd2lsbCBub3QgYmUgdXNlciB2aXNpYmxlLlxuICAgICAgICAvLyBPbmNlIGEgTGF6eSBjb21wb25lbnQgbG9hZHMgaXRzIGlubmVyIGNvbXBvbmVudCwgUmVhY3QgcmVwbGFjZXMgdGhlIHRhZyBhbmQgdHlwZS5cbiAgICAgICAgLy8gVGhpcyBkaXNwbGF5IG5hbWUgd2lsbCBvbmx5IHNob3cgdXAgaW4gY29uc29sZSBsb2dzIHdoZW4gRGV2VG9vbHMgREVCVUcgbW9kZSBpcyBvbi5cbiAgICAgICAgcmV0dXJuICdMYXp5JztcblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAvLyBEaXNwbGF5IG5hbWUgaW4gUmVhY3QgZG9lcyBub3QgdXNlIGBNZW1vYCBhcyBhIHdyYXBwZXIgYnV0IGZhbGxiYWNrIG5hbWUuXG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkRGlzcGxheU5hbWUoZWxlbWVudFR5cGUsIHJlc29sdmVkVHlwZSwgJ01lbW8nLCAnQW5vbnltb3VzJyk7XG5cbiAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuICdMZWdhY3lIaWRkZW4nO1xuXG4gICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuICdPZmZzY3JlZW4nO1xuXG4gICAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gJ1Njb3BlJztcblxuICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICAgIGNhc2UgVHJhY2luZ01hcmtlckNvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuICdUcmFjaW5nTWFya2VyJztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHR5cGVTeW1ib2wgPSBnZXRUeXBlU3ltYm9sKHR5cGUpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZVN5bWJvbCkge1xuICAgICAgICAgIGNhc2UgQ09OQ1VSUkVOVF9NT0RFX05VTUJFUjpcbiAgICAgICAgICBjYXNlIENPTkNVUlJFTlRfTU9ERV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgIGNhc2UgREVQUkVDQVRFRF9BU1lOQ19NT0RFX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgUFJPVklERVJfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgUFJPVklERVJfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIC8vIDE2LjMuMCBleHBvc2VkIHRoZSBjb250ZXh0IG9iamVjdCBhcyBcImNvbnRleHRcIlxuICAgICAgICAgICAgLy8gUFIgIzEyNTAxIGNoYW5nZWQgaXQgdG8gXCJfY29udGV4dFwiIGZvciAxNi4zLjErXG4gICAgICAgICAgICAvLyBOT1RFIEtlZXAgaW4gc3luYyB3aXRoIGluc3BlY3RFbGVtZW50UmF3KClcbiAgICAgICAgICAgIHJlc29sdmVkQ29udGV4dCA9IGZpYmVyLnR5cGUuX2NvbnRleHQgfHwgZmliZXIudHlwZS5jb250ZXh0O1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc29sdmVkQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCcsIFwiLlByb3ZpZGVyXCIpO1xuXG4gICAgICAgICAgY2FzZSBDT05URVhUX05VTUJFUjpcbiAgICAgICAgICBjYXNlIENPTlRFWFRfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICBjYXNlIFNFUlZFUl9DT05URVhUX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICAvLyAxNi4zLTE2LjUgcmVhZCBmcm9tIFwidHlwZVwiIGJlY2F1c2UgdGhlIENvbnN1bWVyIGlzIHRoZSBhY3R1YWwgY29udGV4dCBvYmplY3QuXG4gICAgICAgICAgICAvLyAxNi42KyBzaG91bGQgcmVhZCBmcm9tIFwidHlwZS5fY29udGV4dFwiIGJlY2F1c2UgQ29uc3VtZXIgY2FuIGJlIGRpZmZlcmVudCAoaW4gREVWKS5cbiAgICAgICAgICAgIC8vIE5PVEUgS2VlcCBpbiBzeW5jIHdpdGggaW5zcGVjdEVsZW1lbnRSYXcoKVxuICAgICAgICAgICAgcmVzb2x2ZWRDb250ZXh0ID0gZmliZXIudHlwZS5fY29udGV4dCB8fCBmaWJlci50eXBlOyAvLyBOT1RFOiBUcmFjZVVwZGF0ZXNCYWNrZW5kTWFuYWdlciBkZXBlbmRzIG9uIHRoZSBuYW1lIGVuZGluZyBpbiAnLkNvbnN1bWVyJ1xuICAgICAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbmFtZSwgZmlndXJlIG91dCBhIG1vcmUgcmVzaWxpZW50IHdheSB0byBkZXRlY3QgaXQuXG5cbiAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChyZXNvbHZlZENvbnRleHQuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnLCBcIi5Db25zdW1lclwiKTtcblxuICAgICAgICAgIGNhc2UgU1RSSUNUX01PREVfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgU1RSSUNUX01PREVfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgY2FzZSBQUk9GSUxFUl9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBQUk9GSUxFUl9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXIoXCIuY29uY2F0KGZpYmVyLm1lbW9pemVkUHJvcHMuaWQsIFwiKVwiKTtcblxuICAgICAgICAgIGNhc2UgU0NPUEVfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgU0NPUEVfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIHJldHVybiAnU2NvcGUnO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIFVua25vd24gZWxlbWVudCB0eXBlLlxuICAgICAgICAgICAgLy8gVGhpcyBtYXkgbWVhbiBhIG5ldyBlbGVtZW50IHR5cGUgdGhhdCBoYXMgbm90IHlldCBiZWVuIGFkZGVkIHRvIERldlRvb2xzLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2V0RGlzcGxheU5hbWVGb3JGaWJlcjogZ2V0RGlzcGxheU5hbWVGb3JGaWJlcixcbiAgICBnZXRUeXBlU3ltYm9sOiBnZXRUeXBlU3ltYm9sLFxuICAgIFJlYWN0UHJpb3JpdHlMZXZlbHM6IFJlYWN0UHJpb3JpdHlMZXZlbHMsXG4gICAgUmVhY3RUeXBlT2ZXb3JrOiBSZWFjdFR5cGVPZldvcmssXG4gICAgU3RyaWN0TW9kZUJpdHM6IFN0cmljdE1vZGVCaXRzXG4gIH07XG59IC8vIE1hcCBvZiBvbmUgb3IgbW9yZSBGaWJlcnMgaW4gYSBwYWlyIHRvIHRoZWlyIHVuaXF1ZSBpZCBudW1iZXIuXG4vLyBXZSB0cmFjayBib3RoIEZpYmVycyB0byBzdXBwb3J0IEZhc3QgUmVmcmVzaCxcbi8vIHdoaWNoIG1heSBmb3JjZWZ1bGx5IHJlcGxhY2Ugb25lIG9mIHRoZSBwYWlyIGFzIHBhcnQgb2YgaG90IHJlbG9hZGluZy5cbi8vIEluIHRoYXQgY2FzZSBpdCdzIHN0aWxsIGltcG9ydGFudCB0byBiZSBhYmxlIHRvIGxvY2F0ZSB0aGUgcHJldmlvdXMgSUQgZHVyaW5nIHN1YnNlcXVlbnQgcmVuZGVycy5cblxudmFyIGZpYmVyVG9JRE1hcCA9IG5ldyBNYXAoKTsgLy8gTWFwIG9mIGlkIHRvIG9uZSAoYXJiaXRyYXJ5KSBGaWJlciBpbiBhIHBhaXIuXG4vLyBUaGlzIE1hcCBpcyB1c2VkIHRvIGUuZy4gZ2V0IHRoZSBkaXNwbGF5IG5hbWUgZm9yIGEgRmliZXIgb3Igc2NoZWR1bGUgYW4gdXBkYXRlLFxuLy8gb3BlcmF0aW9ucyB0aGF0IHNob3VsZCBiZSB0aGUgc2FtZSB3aGV0aGVyIHRoZSBjdXJyZW50IGFuZCB3b3JrLWluLXByb2dyZXNzIEZpYmVyIGlzIHVzZWQuXG5cbnZhciBpZFRvQXJiaXRyYXJ5RmliZXJNYXAgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBhdHRhY2goaG9vaywgcmVuZGVyZXJJRCwgcmVuZGVyZXIsIGdsb2JhbCkge1xuICAvLyBOZXdlciB2ZXJzaW9ucyBvZiB0aGUgcmVjb25jaWxlciBwYWNrYWdlIGFsc28gc3BlY2lmaWMgcmVjb25jaWxlciB2ZXJzaW9uLlxuICAvLyBJZiB0aGF0IHZlcnNpb24gbnVtYmVyIGlzIHByZXNlbnQsIHVzZSBpdC5cbiAgLy8gVGhpcmQgcGFydHkgcmVuZGVyZXIgdmVyc2lvbnMgbWF5IG5vdCBtYXRjaCB0aGUgcmVjb25jaWxlciB2ZXJzaW9uLFxuICAvLyBhbmQgdGhlIGxhdHRlciBpcyB3aGF0J3MgaW1wb3J0YW50IGluIHRlcm1zIG9mIHRhZ3MgYW5kIHN5bWJvbHMuXG4gIHZhciB2ZXJzaW9uID0gcmVuZGVyZXIucmVjb25jaWxlclZlcnNpb24gfHwgcmVuZGVyZXIudmVyc2lvbjtcblxuICB2YXIgX2dldEludGVybmFsUmVhY3RDb25zID0gZ2V0SW50ZXJuYWxSZWFjdENvbnN0YW50cyh2ZXJzaW9uKSxcbiAgICAgIGdldERpc3BsYXlOYW1lRm9yRmliZXIgPSBfZ2V0SW50ZXJuYWxSZWFjdENvbnMuZ2V0RGlzcGxheU5hbWVGb3JGaWJlcixcbiAgICAgIGdldFR5cGVTeW1ib2wgPSBfZ2V0SW50ZXJuYWxSZWFjdENvbnMuZ2V0VHlwZVN5bWJvbCxcbiAgICAgIFJlYWN0UHJpb3JpdHlMZXZlbHMgPSBfZ2V0SW50ZXJuYWxSZWFjdENvbnMuUmVhY3RQcmlvcml0eUxldmVscyxcbiAgICAgIFJlYWN0VHlwZU9mV29yayA9IF9nZXRJbnRlcm5hbFJlYWN0Q29ucy5SZWFjdFR5cGVPZldvcmssXG4gICAgICBTdHJpY3RNb2RlQml0cyA9IF9nZXRJbnRlcm5hbFJlYWN0Q29ucy5TdHJpY3RNb2RlQml0cztcblxuICB2YXIgQ2FjaGVDb21wb25lbnQgPSBSZWFjdFR5cGVPZldvcmsuQ2FjaGVDb21wb25lbnQsXG4gICAgICBDbGFzc0NvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5DbGFzc0NvbXBvbmVudCxcbiAgICAgIENvbnRleHRDb25zdW1lciA9IFJlYWN0VHlwZU9mV29yay5Db250ZXh0Q29uc3VtZXIsXG4gICAgICBEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQgPSBSZWFjdFR5cGVPZldvcmsuRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50LFxuICAgICAgRm9yd2FyZFJlZiA9IFJlYWN0VHlwZU9mV29yay5Gb3J3YXJkUmVmLFxuICAgICAgRnJhZ21lbnQgPSBSZWFjdFR5cGVPZldvcmsuRnJhZ21lbnQsXG4gICAgICBGdW5jdGlvbkNvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5GdW5jdGlvbkNvbXBvbmVudCxcbiAgICAgIEhvc3RSb290ID0gUmVhY3RUeXBlT2ZXb3JrLkhvc3RSb290LFxuICAgICAgSG9zdEhvaXN0YWJsZSA9IFJlYWN0VHlwZU9mV29yay5Ib3N0SG9pc3RhYmxlLFxuICAgICAgSG9zdFNpbmdsZXRvbiA9IFJlYWN0VHlwZU9mV29yay5Ib3N0U2luZ2xldG9uLFxuICAgICAgSG9zdFBvcnRhbCA9IFJlYWN0VHlwZU9mV29yay5Ib3N0UG9ydGFsLFxuICAgICAgSG9zdENvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5Ib3N0Q29tcG9uZW50LFxuICAgICAgSG9zdFRleHQgPSBSZWFjdFR5cGVPZldvcmsuSG9zdFRleHQsXG4gICAgICBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQgPSBSZWFjdFR5cGVPZldvcmsuSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50LFxuICAgICAgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5JbmRldGVybWluYXRlQ29tcG9uZW50LFxuICAgICAgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLkxlZ2FjeUhpZGRlbkNvbXBvbmVudCxcbiAgICAgIE1lbW9Db21wb25lbnQgPSBSZWFjdFR5cGVPZldvcmsuTWVtb0NvbXBvbmVudCxcbiAgICAgIE9mZnNjcmVlbkNvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5PZmZzY3JlZW5Db21wb25lbnQsXG4gICAgICBTaW1wbGVNZW1vQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLlNpbXBsZU1lbW9Db21wb25lbnQsXG4gICAgICBTdXNwZW5zZUNvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5TdXNwZW5zZUNvbXBvbmVudCxcbiAgICAgIFN1c3BlbnNlTGlzdENvbXBvbmVudCA9IFJlYWN0VHlwZU9mV29yay5TdXNwZW5zZUxpc3RDb21wb25lbnQsXG4gICAgICBUcmFjaW5nTWFya2VyQ29tcG9uZW50ID0gUmVhY3RUeXBlT2ZXb3JrLlRyYWNpbmdNYXJrZXJDb21wb25lbnQ7XG4gIHZhciBJbW1lZGlhdGVQcmlvcml0eSA9IFJlYWN0UHJpb3JpdHlMZXZlbHMuSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgICBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IFJlYWN0UHJpb3JpdHlMZXZlbHMuVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgICBOb3JtYWxQcmlvcml0eSA9IFJlYWN0UHJpb3JpdHlMZXZlbHMuTm9ybWFsUHJpb3JpdHksXG4gICAgICBMb3dQcmlvcml0eSA9IFJlYWN0UHJpb3JpdHlMZXZlbHMuTG93UHJpb3JpdHksXG4gICAgICBJZGxlUHJpb3JpdHkgPSBSZWFjdFByaW9yaXR5TGV2ZWxzLklkbGVQcmlvcml0eSxcbiAgICAgIE5vUHJpb3JpdHkgPSBSZWFjdFByaW9yaXR5TGV2ZWxzLk5vUHJpb3JpdHk7XG4gIHZhciBnZXRMYW5lTGFiZWxNYXAgPSByZW5kZXJlci5nZXRMYW5lTGFiZWxNYXAsXG4gICAgICBpbmplY3RQcm9maWxpbmdIb29rcyA9IHJlbmRlcmVyLmluamVjdFByb2ZpbGluZ0hvb2tzLFxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGUgPSByZW5kZXJlci5vdmVycmlkZUhvb2tTdGF0ZSxcbiAgICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IHJlbmRlcmVyLm92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCxcbiAgICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IHJlbmRlcmVyLm92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCxcbiAgICAgIG92ZXJyaWRlUHJvcHMgPSByZW5kZXJlci5vdmVycmlkZVByb3BzLFxuICAgICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSByZW5kZXJlci5vdmVycmlkZVByb3BzRGVsZXRlUGF0aCxcbiAgICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gcmVuZGVyZXIub3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgsXG4gICAgICBzY2hlZHVsZVJlZnJlc2ggPSByZW5kZXJlci5zY2hlZHVsZVJlZnJlc2gsXG4gICAgICBzZXRFcnJvckhhbmRsZXIgPSByZW5kZXJlci5zZXRFcnJvckhhbmRsZXIsXG4gICAgICBzZXRTdXNwZW5zZUhhbmRsZXIgPSByZW5kZXJlci5zZXRTdXNwZW5zZUhhbmRsZXIsXG4gICAgICBzY2hlZHVsZVVwZGF0ZSA9IHJlbmRlcmVyLnNjaGVkdWxlVXBkYXRlO1xuICB2YXIgc3VwcG9ydHNUb2dnbGluZ0Vycm9yID0gdHlwZW9mIHNldEVycm9ySGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2NoZWR1bGVVcGRhdGUgPT09ICdmdW5jdGlvbic7XG4gIHZhciBzdXBwb3J0c1RvZ2dsaW5nU3VzcGVuc2UgPSB0eXBlb2Ygc2V0U3VzcGVuc2VIYW5kbGVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzY2hlZHVsZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJztcblxuICBpZiAodHlwZW9mIHNjaGVkdWxlUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFdoZW4gRmFzdCBSZWZyZXNoIHVwZGF0ZXMgYSBjb21wb25lbnQsIHRoZSBmcm9udGVuZCBtYXkgbmVlZCB0byBwdXJnZSBjYWNoZWQgaW5mb3JtYXRpb24uXG4gICAgLy8gRm9yIGV4YW1wbGUsIEFTVHMgY2FjaGVkIGZvciB0aGUgY29tcG9uZW50IChmb3IgbmFtZWQgaG9va3MpIG1heSBubyBsb25nZXIgYmUgdmFsaWQuXG4gICAgLy8gU2VuZCBhIHNpZ25hbCB0byB0aGUgZnJvbnRlbmQgdG8gcHVyZ2UgdGhpcyBjYWNoZWQgaW5mb3JtYXRpb24uXG4gICAgLy8gVGhlIFwiZmFzdFJlZnJlc2hTY2hlZHVsZWRcIiBkaXNwYXRjaGVkIGlzIGdsb2JhbCAobm90IEZpYmVyIG9yIGV2ZW4gUmVuZGVyZXIgc3BlY2lmaWMpLlxuICAgIC8vIFRoaXMgaXMgbGVzcyBlZmZlY2llbnQgc2luY2UgaXQgbWVhbnMgdGhlIGZyb250LWVuZCB3aWxsIG5lZWQgdG8gcHVyZ2UgdGhlIGVudGlyZSBjYWNoZSxcbiAgICAvLyBidXQgdGhpcyBpcyBwcm9iYWJseSBhbiBva2F5IHRyYWRlIG9mZiBpbiBvcmRlciB0byByZWR1Y2UgY291cGxpbmcgYmV0d2VlbiB0aGUgRGV2VG9vbHMgYW5kIEZhc3QgUmVmcmVzaC5cbiAgICByZW5kZXJlci5zY2hlZHVsZVJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBob29rLmVtaXQoJ2Zhc3RSZWZyZXNoU2NoZWR1bGVkJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVSZWZyZXNoLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGdldFRpbWVsaW5lRGF0YSA9IG51bGw7XG4gIHZhciB0b2dnbGVQcm9maWxpbmdTdGF0dXMgPSBudWxsO1xuXG4gIGlmICh0eXBlb2YgaW5qZWN0UHJvZmlsaW5nSG9va3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzcG9uc2UgPSBjcmVhdGVQcm9maWxpbmdIb29rcyh7XG4gICAgICBnZXREaXNwbGF5TmFtZUZvckZpYmVyOiBnZXREaXNwbGF5TmFtZUZvckZpYmVyLFxuICAgICAgZ2V0SXNQcm9maWxpbmc6IGZ1bmN0aW9uIGdldElzUHJvZmlsaW5nKCkge1xuICAgICAgICByZXR1cm4gaXNQcm9maWxpbmc7XG4gICAgICB9LFxuICAgICAgZ2V0TGFuZUxhYmVsTWFwOiBnZXRMYW5lTGFiZWxNYXAsXG4gICAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogcmVuZGVyZXIuY3VycmVudERpc3BhdGNoZXJSZWYsXG4gICAgICB3b3JrVGFnTWFwOiBSZWFjdFR5cGVPZldvcmssXG4gICAgICByZWFjdFZlcnNpb246IHZlcnNpb25cbiAgICB9KTsgLy8gUGFzcyB0aGUgUHJvZmlsaW5nIGhvb2tzIHRvIHRoZSByZWNvbmNpbGVyIGZvciBpdCB0byBjYWxsIGR1cmluZyByZW5kZXIuXG5cbiAgICBpbmplY3RQcm9maWxpbmdIb29rcyhyZXNwb25zZS5wcm9maWxpbmdIb29rcyk7IC8vIEhhbmcgb250byB0aGlzIHRvZ2dsZSBzbyB3ZSBjYW4gbm90aWZ5IHRoZSBleHRlcm5hbCBtZXRob2RzIG9mIHByb2ZpbGluZyBzdGF0dXMgY2hhbmdlcy5cblxuICAgIGdldFRpbWVsaW5lRGF0YSA9IHJlc3BvbnNlLmdldFRpbWVsaW5lRGF0YTtcbiAgICB0b2dnbGVQcm9maWxpbmdTdGF0dXMgPSByZXNwb25zZS50b2dnbGVQcm9maWxpbmdTdGF0dXM7XG4gIH0gLy8gVHJhY2tzIEZpYmVycyB3aXRoIHJlY2VudGx5IGNoYW5nZWQgbnVtYmVyIG9mIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMuXG4gIC8vIFRoZXNlIGNvbGxlY3Rpb25zIHN0b3JlIHRoZSBGaWJlciByYXRoZXIgdGhhbiB0aGUgSUQsXG4gIC8vIGluIG9yZGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gSUQgZm9yIEZpYmVycyB0aGF0IG5ldmVyIGdldCBtb3VudGVkXG4gIC8vIChkdWUgdG8gZS5nLiBTdXNwZW5zZSBvciBlcnJvciBib3VuZGFyaWVzKS5cbiAgLy8gb25FcnJvck9yV2FybmluZygpIGFkZHMgRmliZXJzIGFuZCByZWNvcmRQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3MoKSBsYXRlciBjbGVhcnMgdGhlbS5cblxuXG4gIHZhciBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzID0gbmV3IFNldCgpO1xuICB2YXIgcGVuZGluZ0ZpYmVyVG9FcnJvcnNNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBwZW5kaW5nRmliZXJUb1dhcm5pbmdzTWFwID0gbmV3IE1hcCgpOyAvLyBNYXBwaW5nIG9mIGZpYmVyIElEcyB0byBlcnJvci93YXJuaW5nIG1lc3NhZ2VzIGFuZCBjb3VudHMuXG5cbiAgdmFyIGZpYmVySURUb0Vycm9yc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIGZpYmVySURUb1dhcm5pbmdzTWFwID0gbmV3IE1hcCgpO1xuXG4gIGZ1bmN0aW9uIGNsZWFyRXJyb3JzQW5kV2FybmluZ3MoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZvci1vZi1sb29wcy9uby1mb3Itb2YtbG9vcHNcbiAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZmliZXJJRFRvRXJyb3JzTWFwLmtleXMoKSksXG4gICAgICAgIF9zdGVwO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBpZCA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgIHZhciBfZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGlkKTtcblxuICAgICAgICBpZiAoX2ZpYmVyICE9IG51bGwpIHtcbiAgICAgICAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmFkZChfZmliZXIpO1xuICAgICAgICAgIHVwZGF0ZU1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnRJZk5lY2Vzc2FyeShpZCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZvci1vZi1sb29wcy9uby1mb3Itb2YtbG9vcHNcblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICB9XG5cbiAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGZpYmVySURUb1dhcm5pbmdzTWFwLmtleXMoKSksXG4gICAgICAgIF9zdGVwMjtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykge1xuICAgICAgICB2YXIgX2lkID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgIHZhciBfZmliZXIyID0gaWRUb0FyYml0cmFyeUZpYmVyTWFwLmdldChfaWQpO1xuXG4gICAgICAgIGlmIChfZmliZXIyICE9IG51bGwpIHtcbiAgICAgICAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmFkZChfZmliZXIyKTtcbiAgICAgICAgICB1cGRhdGVNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50SWZOZWNlc3NhcnkoX2lkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvcjIuZigpO1xuICAgIH1cblxuICAgIGZpYmVySURUb0Vycm9yc01hcC5jbGVhcigpO1xuICAgIGZpYmVySURUb1dhcm5pbmdzTWFwLmNsZWFyKCk7XG4gICAgZmx1c2hQZW5kaW5nRXZlbnRzKCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhck1lc3NhZ2VDb3VudEhlbHBlcihmaWJlcklELCBwZW5kaW5nRmliZXJUb01lc3NhZ2VDb3VudE1hcCwgZmliZXJJRFRvTWVzc2FnZUNvdW50TWFwKSB7XG4gICAgdmFyIGZpYmVyID0gaWRUb0FyYml0cmFyeUZpYmVyTWFwLmdldChmaWJlcklEKTtcblxuICAgIGlmIChmaWJlciAhPSBudWxsKSB7XG4gICAgICAvLyBUaHJvdyBvdXQgYW55IHBlbmRpbmcgY2hhbmdlcy5cbiAgICAgIHBlbmRpbmdGaWJlclRvRXJyb3JzTWFwLmRlbGV0ZShmaWJlcik7XG5cbiAgICAgIGlmIChmaWJlcklEVG9NZXNzYWdlQ291bnRNYXAuaGFzKGZpYmVySUQpKSB7XG4gICAgICAgIGZpYmVySURUb01lc3NhZ2VDb3VudE1hcC5kZWxldGUoZmliZXJJRCk7IC8vIElmIHByZXZpb3VzIGZsdXNoZWQgY291bnRzIGhhdmUgY2hhbmdlZCwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvby5cblxuICAgICAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmFkZChmaWJlcik7XG4gICAgICAgIGZsdXNoUGVuZGluZ0V2ZW50cygpO1xuICAgICAgICB1cGRhdGVNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50SWZOZWNlc3NhcnkoZmliZXJJRCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmRlbGV0ZShmaWJlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJFcnJvcnNGb3JGaWJlcklEKGZpYmVySUQpIHtcbiAgICBjbGVhck1lc3NhZ2VDb3VudEhlbHBlcihmaWJlcklELCBwZW5kaW5nRmliZXJUb0Vycm9yc01hcCwgZmliZXJJRFRvRXJyb3JzTWFwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyV2FybmluZ3NGb3JGaWJlcklEKGZpYmVySUQpIHtcbiAgICBjbGVhck1lc3NhZ2VDb3VudEhlbHBlcihmaWJlcklELCBwZW5kaW5nRmliZXJUb1dhcm5pbmdzTWFwLCBmaWJlcklEVG9XYXJuaW5nc01hcCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50SWZOZWNlc3NhcnkoZmliZXJJRCkge1xuICAgIGlmIChtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50ICE9PSBudWxsICYmIG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQuaWQgPT09IGZpYmVySUQpIHtcbiAgICAgIGhhc0VsZW1lbnRVcGRhdGVkU2luY2VMYXN0SW5zcGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gLy8gQ2FsbGVkIHdoZW4gYW4gZXJyb3Igb3Igd2FybmluZyBpcyBsb2dnZWQgZHVyaW5nIHJlbmRlciwgY29tbWl0LCBvciBwYXNzaXZlIChpbmNsdWRpbmcgdW5tb3VudCBmdW5jdGlvbnMpLlxuXG5cbiAgZnVuY3Rpb24gb25FcnJvck9yV2FybmluZyhmaWJlciwgdHlwZSwgYXJncykge1xuICAgIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgICB2YXIgbWF5YmVJRCA9IGdldEZpYmVySURVbnNhZmUoZmliZXIpOyAvLyBpZiB0aGlzIGlzIGFuIGVycm9yIHNpbXVsYXRlZCBieSB1cyB0byB0cmlnZ2VyIGVycm9yIGJvdW5kYXJ5LCBpZ25vcmVcblxuICAgICAgaWYgKG1heWJlSUQgIT0gbnVsbCAmJiBmb3JjZUVycm9yRm9yRmliZXJJRHMuZ2V0KG1heWJlSUQpID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWVzc2FnZSA9IGZvcm1hdC5hcHBseSh2b2lkIDAsIHJlbmRlcmVyX3RvQ29uc3VtYWJsZUFycmF5KGFyZ3MpKTtcblxuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGRlYnVnKCdvbkVycm9yT3JXYXJuaW5nJywgZmliZXIsIG51bGwsIFwiXCIuY29uY2F0KHR5cGUsIFwiOiBcXFwiXCIpLmNvbmNhdChtZXNzYWdlLCBcIlxcXCJcIikpO1xuICAgIH0gLy8gTWFyayB0aGlzIEZpYmVyIGFzIG5lZWRlZCBpdHMgd2FybmluZy9lcnJvciBjb3VudCB1cGRhdGVkIGR1cmluZyB0aGUgbmV4dCBmbHVzaC5cblxuXG4gICAgZmliZXJzV2l0aENoYW5nZWRFcnJvck9yV2FybmluZ0NvdW50cy5hZGQoZmliZXIpOyAvLyBUcmFjayB0aGUgd2FybmluZy9lcnJvciBmb3IgbGF0ZXIuXG5cbiAgICB2YXIgZmliZXJNYXAgPSB0eXBlID09PSAnZXJyb3InID8gcGVuZGluZ0ZpYmVyVG9FcnJvcnNNYXAgOiBwZW5kaW5nRmliZXJUb1dhcm5pbmdzTWFwO1xuICAgIHZhciBtZXNzYWdlTWFwID0gZmliZXJNYXAuZ2V0KGZpYmVyKTtcblxuICAgIGlmIChtZXNzYWdlTWFwICE9IG51bGwpIHtcbiAgICAgIHZhciBjb3VudCA9IG1lc3NhZ2VNYXAuZ2V0KG1lc3NhZ2UpIHx8IDA7XG4gICAgICBtZXNzYWdlTWFwLnNldChtZXNzYWdlLCBjb3VudCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWJlck1hcC5zZXQoZmliZXIsIG5ldyBNYXAoW1ttZXNzYWdlLCAxXV0pKTtcbiAgICB9IC8vIFBhc3NpdmUgZWZmZWN0cyBtYXkgdHJpZ2dlciBlcnJvcnMgb3Igd2FybmluZ3MgdG9vO1xuICAgIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIHdhaXQgdW50aWwgdGhlIHJlc3Qgb2YgdGhlIHBhc3NpdmUgZWZmZWN0cyBoYXZlIHJ1bixcbiAgICAvLyBidXQgd2Ugc2hvdWxkbid0IHdhaXQgdW50aWwgdGhlIG5leHQgY29tbWl0IGJlY2F1c2UgdGhhdCBtaWdodCBiZSBhIGxvbmcgdGltZS5cbiAgICAvLyBUaGlzIHdvdWxkIGFsc28gY2F1c2UgXCJ0ZWFyaW5nXCIgYmV0d2VlbiBhbiBpbnNwZWN0ZWQgQ29tcG9uZW50IGFuZCB0aGUgdHJlZSB2aWV3LlxuICAgIC8vIFRoZW4gYWdhaW4gd2UgZG9uJ3Qgd2FudCB0byBmbHVzaCB0b28gc29vbiBiZWNhdXNlIHRoaXMgY291bGQgYmUgYW4gZXJyb3IgZHVyaW5nIGFzeW5jIHJlbmRlcmluZy5cbiAgICAvLyBVc2UgYSBkZWJvdW5jZSB0ZWNobmlxdWUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZXZlbnR1YWxseSBmbHVzaC5cblxuXG4gICAgZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5KCk7XG4gIH0gLy8gUGF0Y2hpbmcgdGhlIGNvbnNvbGUgZW5hYmxlcyBEZXZUb29scyB0byBkbyBhIGZldyB1c2VmdWwgdGhpbmdzOlxuICAvLyAqIEFwcGVuZCBjb21wb25lbnQgc3RhY2tzIHRvIHdhcm5pbmdzIGFuZCBlcnJvciBtZXNzYWdlc1xuICAvLyAqIERpc2FibGUgbG9nZ2luZyBkdXJpbmcgcmUtcmVuZGVycyB0byBpbnNwZWN0IGhvb2tzIChzZWUgaW5zcGVjdEhvb2tzT2ZGaWJlcilcblxuXG4gIHJlZ2lzdGVyUmVuZGVyZXIocmVuZGVyZXIsIG9uRXJyb3JPcldhcm5pbmcpOyAvLyBUaGUgcmVuZGVyZXIgaW50ZXJmYWNlIGNhbid0IHJlYWQgdGhlc2UgcHJlZmVyZW5jZXMgZGlyZWN0bHksXG4gIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGV4dGVuc2lvbi5cbiAgLy8gSXQgcmVsaWVzIG9uIHRoZSBleHRlbnNpb24gdG8gcGFzcyB0aGUgcHJlZmVyZW5jZSB0aHJvdWdoIHZpYSB0aGUgZ2xvYmFsLlxuXG4gIHBhdGNoQ29uc29sZVVzaW5nV2luZG93VmFsdWVzKCk7XG5cbiAgdmFyIGRlYnVnID0gZnVuY3Rpb24gZGVidWcobmFtZSwgZmliZXIsIHBhcmVudEZpYmVyKSB7XG4gICAgdmFyIGV4dHJhU3RyaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnJztcblxuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IGZpYmVyLnRhZyArICc6JyArIChnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnbnVsbCcpO1xuICAgICAgdmFyIG1heWJlSUQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKSB8fCAnPG5vIGlkPic7XG4gICAgICB2YXIgcGFyZW50RGlzcGxheU5hbWUgPSBwYXJlbnRGaWJlciA/IHBhcmVudEZpYmVyLnRhZyArICc6JyArIChnZXREaXNwbGF5TmFtZUZvckZpYmVyKHBhcmVudEZpYmVyKSB8fCAnbnVsbCcpIDogJyc7XG4gICAgICB2YXIgbWF5YmVQYXJlbnRJRCA9IHBhcmVudEZpYmVyID8gZ2V0RmliZXJJRFVuc2FmZShwYXJlbnRGaWJlcikgfHwgJzxuby1pZD4nIDogJyc7XG4gICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiW3JlbmRlcmVyXSAlY1wiLmNvbmNhdChuYW1lLCBcIiAlY1wiKS5jb25jYXQoZGlzcGxheU5hbWUsIFwiIChcIikuY29uY2F0KG1heWJlSUQsIFwiKSAlY1wiKS5jb25jYXQocGFyZW50RmliZXIgPyBcIlwiLmNvbmNhdChwYXJlbnREaXNwbGF5TmFtZSwgXCIgKFwiKS5jb25jYXQobWF5YmVQYXJlbnRJRCwgXCIpXCIpIDogJycsIFwiICVjXCIpLmNvbmNhdChleHRyYVN0cmluZyksICdjb2xvcjogcmVkOyBmb250LXdlaWdodDogYm9sZDsnLCAnY29sb3I6IGJsdWU7JywgJ2NvbG9yOiBwdXJwbGU7JywgJ2NvbG9yOiBibGFjazsnKTtcbiAgICAgIGNvbnNvbGUubG9nKG5ldyBFcnJvcigpLnN0YWNrLnNwbGl0KCdcXG4nKS5zbGljZSgxKS5qb2luKCdcXG4nKSk7XG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgfVxuICB9OyAvLyBDb25maWd1cmFibGUgQ29tcG9uZW50cyB0cmVlIGZpbHRlcnMuXG5cblxuICB2YXIgaGlkZUVsZW1lbnRzV2l0aERpc3BsYXlOYW1lcyA9IG5ldyBTZXQoKTtcbiAgdmFyIGhpZGVFbGVtZW50c1dpdGhQYXRocyA9IG5ldyBTZXQoKTtcbiAgdmFyIGhpZGVFbGVtZW50c1dpdGhUeXBlcyA9IG5ldyBTZXQoKTsgLy8gSGlnaGxpZ2h0IHVwZGF0ZXNcblxuICB2YXIgdHJhY2VVcGRhdGVzRW5hYmxlZCA9IGZhbHNlO1xuICB2YXIgdHJhY2VVcGRhdGVzRm9yTm9kZXMgPSBuZXcgU2V0KCk7XG5cbiAgZnVuY3Rpb24gYXBwbHlDb21wb25lbnRGaWx0ZXJzKGNvbXBvbmVudEZpbHRlcnMpIHtcbiAgICBoaWRlRWxlbWVudHNXaXRoVHlwZXMuY2xlYXIoKTtcbiAgICBoaWRlRWxlbWVudHNXaXRoRGlzcGxheU5hbWVzLmNsZWFyKCk7XG4gICAgaGlkZUVsZW1lbnRzV2l0aFBhdGhzLmNsZWFyKCk7XG4gICAgY29tcG9uZW50RmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnRGaWx0ZXIpIHtcbiAgICAgIGlmICghY29tcG9uZW50RmlsdGVyLmlzRW5hYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29tcG9uZW50RmlsdGVyLnR5cGUpIHtcbiAgICAgICAgY2FzZSBDb21wb25lbnRGaWx0ZXJEaXNwbGF5TmFtZTpcbiAgICAgICAgICBpZiAoY29tcG9uZW50RmlsdGVyLmlzVmFsaWQgJiYgY29tcG9uZW50RmlsdGVyLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgaGlkZUVsZW1lbnRzV2l0aERpc3BsYXlOYW1lcy5hZGQobmV3IFJlZ0V4cChjb21wb25lbnRGaWx0ZXIudmFsdWUsICdpJykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29tcG9uZW50RmlsdGVyRWxlbWVudFR5cGU6XG4gICAgICAgICAgaGlkZUVsZW1lbnRzV2l0aFR5cGVzLmFkZChjb21wb25lbnRGaWx0ZXIudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29tcG9uZW50RmlsdGVyTG9jYXRpb246XG4gICAgICAgICAgaWYgKGNvbXBvbmVudEZpbHRlci5pc1ZhbGlkICYmIGNvbXBvbmVudEZpbHRlci52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgIGhpZGVFbGVtZW50c1dpdGhQYXRocy5hZGQobmV3IFJlZ0V4cChjb21wb25lbnRGaWx0ZXIudmFsdWUsICdpJykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29tcG9uZW50RmlsdGVySE9DOlxuICAgICAgICAgIGhpZGVFbGVtZW50c1dpdGhEaXNwbGF5TmFtZXMuYWRkKG5ldyBSZWdFeHAoJ1xcXFwoJykpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCBjb21wb25lbnQgZmlsdGVyIHR5cGUgXFxcIlwiLmNvbmNhdChjb21wb25lbnRGaWx0ZXIudHlwZSwgXCJcXFwiXCIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSAvLyBUaGUgcmVuZGVyZXIgaW50ZXJmYWNlIGNhbid0IHJlYWQgc2F2ZWQgY29tcG9uZW50IGZpbHRlcnMgZGlyZWN0bHksXG4gIC8vIGJlY2F1c2UgdGhleSBhcmUgc3RvcmVkIGluIGxvY2FsU3RvcmFnZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGV4dGVuc2lvbi5cbiAgLy8gSW5zdGVhZCBpdCByZWxpZXMgb24gdGhlIGV4dGVuc2lvbiB0byBwYXNzIGZpbHRlcnMgdGhyb3VnaC5cblxuXG4gIGlmICh3aW5kb3cuX19SRUFDVF9ERVZUT09MU19DT01QT05FTlRfRklMVEVSU19fICE9IG51bGwpIHtcbiAgICBhcHBseUNvbXBvbmVudEZpbHRlcnMod2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQ09NUE9ORU5UX0ZJTFRFUlNfXyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVW5mb3J0dW5hdGVseSB0aGlzIGZlYXR1cmUgaXMgbm90IGV4cGVjdGVkIHRvIHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSBmb3Igbm93LlxuICAgIC8vIEl0IHdvdWxkIGJlIGFubm95aW5nIGZvciB1cyB0byBzcGFtIFllbGxvd0JveCB3YXJuaW5ncyB3aXRoIHVuYWN0aW9uYWJsZSBzdHVmZixcbiAgICAvLyBzbyBmb3Igbm93IGp1c3Qgc2tpcCB0aGlzIG1lc3NhZ2UuLi5cbiAgICAvL2NvbnNvbGUud2Fybign4pqb77iPIERldlRvb2xzOiBDb3VsZCBub3QgbG9jYXRlIHNhdmVkIGNvbXBvbmVudCBmaWx0ZXJzJyk7XG4gICAgLy8gRmFsbGJhY2sgdG8gYXNzdW1pbmcgdGhlIGRlZmF1bHQgZmlsdGVycyBpbiB0aGlzIGNhc2UuXG4gICAgYXBwbHlDb21wb25lbnRGaWx0ZXJzKGdldERlZmF1bHRDb21wb25lbnRGaWx0ZXJzKCkpO1xuICB9IC8vIElmIG5lY2Vzc2FyeSwgd2UgY2FuIHJldmlzaXQgb3B0aW1pemluZyB0aGlzIG9wZXJhdGlvbi5cbiAgLy8gRm9yIGV4YW1wbGUsIHdlIGNvdWxkIGFkZCBhIG5ldyByZWN1cnNpdmUgdW5tb3VudCB0cmVlIG9wZXJhdGlvbi5cbiAgLy8gVGhlIHVubW91bnQgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzaWduaWZpY2FudGx5IHNtYWxsZXIgdGhhbiBtb3VudCBvcGVyYXRpb25zIHRob3VnaC5cbiAgLy8gVGhpcyBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBsYXRlci5cblxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudEZpbHRlcnMoY29tcG9uZW50RmlsdGVycykge1xuICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgLy8gUmUtbW91bnRpbmcgYSB0cmVlIHdoaWxlIHByb2ZpbGluZyBpcyBpbiBwcm9ncmVzcyBtaWdodCBicmVhayBhIGxvdCBvZiBhc3N1bXB0aW9ucy5cbiAgICAgIC8vIElmIG5lY2Vzc2FyeSwgd2UgY291bGQgc3VwcG9ydCB0aGlzLSBidXQgaXQgZG9lc24ndCBzZWVtIGxpa2UgYSBuZWNlc3NhcnkgdXNlIGNhc2UuXG4gICAgICB0aHJvdyBFcnJvcignQ2Fubm90IG1vZGlmeSBmaWx0ZXIgcHJlZmVyZW5jZXMgd2hpbGUgcHJvZmlsaW5nJyk7XG4gICAgfSAvLyBSZWN1cnNpdmVseSB1bm1vdW50IGFsbCByb290cy5cblxuXG4gICAgaG9vay5nZXRGaWJlclJvb3RzKHJlbmRlcmVySUQpLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIGN1cnJlbnRSb290SUQgPSBnZXRPckdlbmVyYXRlRmliZXJJRChyb290LmN1cnJlbnQpOyAvLyBUaGUgVFJFRV9PUEVSQVRJT05fUkVNT1ZFX1JPT1Qgb3BlcmF0aW9uIHNlcnZlcyB0d28gcHVycG9zZXM6XG4gICAgICAvLyAxLiBJdCBhdm9pZHMgc2VuZGluZyB1bm5lY2Vzc2FyeSBicmlkZ2UgdHJhZmZpYyB0byBjbGVhciBhIHJvb3QuXG4gICAgICAvLyAyLiBJdCBwcmVzZXJ2ZXMgRmliZXIgSURzIHdoZW4gcmVtb3VudGluZyAoYmVsb3cpIHdoaWNoIGluIHR1cm4gSUQgdG8gZXJyb3Ivd2FybmluZyBtYXBwaW5nLlxuXG4gICAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX1JFTU9WRV9ST09UKTtcbiAgICAgIGZsdXNoUGVuZGluZ0V2ZW50cyhyb290KTtcbiAgICAgIGN1cnJlbnRSb290SUQgPSAtMTtcbiAgICB9KTtcbiAgICBhcHBseUNvbXBvbmVudEZpbHRlcnMoY29tcG9uZW50RmlsdGVycyk7IC8vIFJlc2V0IHBzZXVkbyBjb3VudGVycyBzbyB0aGF0IG5ldyBwYXRoIHNlbGVjdGlvbnMgd2lsbCBiZSBwZXJzaXN0ZWQuXG5cbiAgICByb290RGlzcGxheU5hbWVDb3VudGVyLmNsZWFyKCk7IC8vIFJlY3Vyc2l2ZWx5IHJlLW1vdW50IGFsbCByb290cyB3aXRoIG5ldyBmaWx0ZXIgY3JpdGVyaWEgYXBwbGllZC5cblxuICAgIGhvb2suZ2V0RmliZXJSb290cyhyZW5kZXJlcklEKS5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICBjdXJyZW50Um9vdElEID0gZ2V0T3JHZW5lcmF0ZUZpYmVySUQocm9vdC5jdXJyZW50KTtcbiAgICAgIHNldFJvb3RQc2V1ZG9LZXkoY3VycmVudFJvb3RJRCwgcm9vdC5jdXJyZW50KTtcbiAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIG51bGwsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmbHVzaFBlbmRpbmdFdmVudHMocm9vdCk7XG4gICAgICBjdXJyZW50Um9vdElEID0gLTE7XG4gICAgfSk7IC8vIEFsc28gcmUtZXZhbHVhdGUgYWxsIGVycm9yIGFuZCB3YXJuaW5nIGNvdW50cyBnaXZlbiB0aGUgbmV3IGZpbHRlcnMuXG5cbiAgICByZWV2YWx1YXRlRXJyb3JzQW5kV2FybmluZ3MoKTtcbiAgICBmbHVzaFBlbmRpbmdFdmVudHMoKTtcbiAgfSAvLyBOT1RJQ0UgS2VlcCBpbiBzeW5jIHdpdGggZ2V0KkZvckZpYmVyIG1ldGhvZHNcblxuXG4gIGZ1bmN0aW9uIHNob3VsZEZpbHRlckZpYmVyKGZpYmVyKSB7XG4gICAgdmFyIF9kZWJ1Z1NvdXJjZSA9IGZpYmVyLl9kZWJ1Z1NvdXJjZSxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZSxcbiAgICAgICAga2V5ID0gZmliZXIua2V5O1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAvLyBUT0RPOiBpZGVhbGx5IHdlIHdvdWxkIHNob3cgZGVoeWRyYXRlZCBTdXNwZW5zZSBpbW1lZGlhdGVseS5cbiAgICAgICAgLy8gSG93ZXZlciwgaXQgaGFzIHNvbWUgc3BlY2lhbCBiZWhhdmlvciAobGlrZSBkaXNjb25uZWN0aW5nXG4gICAgICAgIC8vIGFuIGFsdGVybmF0ZSBhbmQgdHVybmluZyBpbnRvIHJlYWwgU3VzcGVuc2UpIHdoaWNoIGJyZWFrcyBEZXZUb29scy5cbiAgICAgICAgLy8gRm9yIG5vdywgaWdub3JlIGl0LCBhbmQgb25seSBzaG93IGl0IG9uY2UgaXQgZ2V0cyBoeWRyYXRlZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtZGV2dG9vbHMtZXhwZXJpbWVudGFsL2lzc3Vlcy8xOTdcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgLy8gSXQgaXMgbmV2ZXIgdmFsaWQgdG8gZmlsdGVyIHRoZSByb290IGVsZW1lbnQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgY2FzZSBGcmFnbWVudDpcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gbnVsbDtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHR5cGVTeW1ib2wgPSBnZXRUeXBlU3ltYm9sKHR5cGUpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZVN5bWJvbCkge1xuICAgICAgICAgIGNhc2UgQ09OQ1VSUkVOVF9NT0RFX05VTUJFUjpcbiAgICAgICAgICBjYXNlIENPTkNVUlJFTlRfTU9ERV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgIGNhc2UgREVQUkVDQVRFRF9BU1lOQ19NT0RFX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgY2FzZSBTVFJJQ1RfTU9ERV9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBTVFJJQ1RfTU9ERV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHZhciBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpO1xuXG4gICAgaWYgKGhpZGVFbGVtZW50c1dpdGhUeXBlcy5oYXMoZWxlbWVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGlkZUVsZW1lbnRzV2l0aERpc3BsYXlOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihmaWJlcik7XG5cbiAgICAgIGlmIChkaXNwbGF5TmFtZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mb3Itb2YtbG9vcHMvbm8tZm9yLW9mLWxvb3BzXG4gICAgICAgIHZhciBfaXRlcmF0b3IzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoaGlkZUVsZW1lbnRzV2l0aERpc3BsYXlOYW1lcyksXG4gICAgICAgICAgICBfc3RlcDM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKF9pdGVyYXRvcjMucygpOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMubigpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIGRpc3BsYXlOYW1lUmVnRXhwID0gX3N0ZXAzLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoZGlzcGxheU5hbWVSZWdFeHAudGVzdChkaXNwbGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfaXRlcmF0b3IzLmUoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBfaXRlcmF0b3IzLmYoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChfZGVidWdTb3VyY2UgIT0gbnVsbCAmJiBoaWRlRWxlbWVudHNXaXRoUGF0aHMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBmaWxlTmFtZSA9IF9kZWJ1Z1NvdXJjZS5maWxlTmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZvci1vZi1sb29wcy9uby1mb3Itb2YtbG9vcHNcblxuICAgICAgdmFyIF9pdGVyYXRvcjQgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihoaWRlRWxlbWVudHNXaXRoUGF0aHMpLFxuICAgICAgICAgIF9zdGVwNDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3I0LnMoKTsgIShfc3RlcDQgPSBfaXRlcmF0b3I0Lm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgcGF0aFJlZ0V4cCA9IF9zdGVwNC52YWx1ZTtcblxuICAgICAgICAgIGlmIChwYXRoUmVnRXhwLnRlc3QoZmlsZU5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3I0LmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvcjQuZigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBOT1RJQ0UgS2VlcCBpbiBzeW5jIHdpdGggc2hvdWxkRmlsdGVyRmliZXIoKSBhbmQgb3RoZXIgZ2V0KkZvckZpYmVyIG1ldGhvZHNcblxuXG4gIGZ1bmN0aW9uIGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpIHtcbiAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGUsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiB0eXBlc19FbGVtZW50VHlwZUNsYXNzO1xuXG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbjtcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICByZXR1cm4gdHlwZXNfRWxlbWVudFR5cGVGb3J3YXJkUmVmO1xuXG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVSb290O1xuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgIHJldHVybiBFbGVtZW50VHlwZUhvc3RDb21wb25lbnQ7XG5cbiAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVPdGhlck9yVW5rbm93bjtcblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gdHlwZXNfRWxlbWVudFR5cGVNZW1vO1xuXG4gICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVTdXNwZW5zZTtcblxuICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgIHJldHVybiBFbGVtZW50VHlwZVN1c3BlbnNlTGlzdDtcblxuICAgICAgY2FzZSBUcmFjaW5nTWFya2VyQ29tcG9uZW50OlxuICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVUcmFjaW5nTWFya2VyO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdHlwZVN5bWJvbCA9IGdldFR5cGVTeW1ib2wodHlwZSk7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlU3ltYm9sKSB7XG4gICAgICAgICAgY2FzZSBDT05DVVJSRU5UX01PREVfTlVNQkVSOlxuICAgICAgICAgIGNhc2UgQ09OQ1VSUkVOVF9NT0RFX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgY2FzZSBERVBSRUNBVEVEX0FTWU5DX01PREVfU1lNQk9MX1NUUklORzpcbiAgICAgICAgICAgIHJldHVybiBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duO1xuXG4gICAgICAgICAgY2FzZSBQUk9WSURFUl9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBQUk9WSURFUl9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnRUeXBlQ29udGV4dDtcblxuICAgICAgICAgIGNhc2UgQ09OVEVYVF9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBDT05URVhUX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVDb250ZXh0O1xuXG4gICAgICAgICAgY2FzZSBTVFJJQ1RfTU9ERV9OVU1CRVI6XG4gICAgICAgICAgY2FzZSBTVFJJQ1RfTU9ERV9TWU1CT0xfU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnRUeXBlT3RoZXJPclVua25vd247XG5cbiAgICAgICAgICBjYXNlIFBST0ZJTEVSX05VTUJFUjpcbiAgICAgICAgICBjYXNlIFBST0ZJTEVSX1NZTUJPTF9TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVQcm9maWxlcjtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gRWxlbWVudFR5cGVPdGhlck9yVW5rbm93bjtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9IC8vIFdoZW4gcHJvZmlsaW5nIGlzIHN1cHBvcnRlZCwgd2Ugc3RvcmUgdGhlIGxhdGVzdCB0cmVlIGJhc2UgZHVyYXRpb25zIGZvciBlYWNoIEZpYmVyLlxuICAvLyBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIHF1aWNrbHkgY2FwdHVyZSBhIHNuYXBzaG90IG9mIHRob3NlIHZhbHVlcyBpZiBwcm9maWxpbmcgc3RhcnRzLlxuICAvLyBJZiB3ZSBkaWRuJ3Qgc3RvcmUgdGhlc2UgdmFsdWVzLCB3ZSdkIGhhdmUgdG8gY3Jhd2wgdGhlIHRyZWUgd2hlbiBwcm9maWxpbmcgc3RhcnRlZCxcbiAgLy8gYW5kIHVzZSBhIHNsb3cgcGF0aCB0byBmaW5kIGVhY2ggb2YgdGhlIGN1cnJlbnQgRmliZXJzLlxuXG5cbiAgdmFyIGlkVG9UcmVlQmFzZUR1cmF0aW9uTWFwID0gbmV3IE1hcCgpOyAvLyBXaGVuIHByb2ZpbGluZyBpcyBzdXBwb3J0ZWQsIHdlIHN0b3JlIHRoZSBsYXRlc3QgdHJlZSBiYXNlIGR1cmF0aW9ucyBmb3IgZWFjaCBGaWJlci5cbiAgLy8gVGhpcyBtYXAgZW5hYmxlcyB1cyB0byBmaWx0ZXIgdGhlc2UgdGltZXMgYnkgcm9vdCB3aGVuIHNlbmRpbmcgdGhlbSB0byB0aGUgZnJvbnRlbmQuXG5cbiAgdmFyIGlkVG9Sb290TWFwID0gbmV3IE1hcCgpOyAvLyBXaGVuIGEgbW91bnQgb3IgdXBkYXRlIGlzIGluIHByb2dyZXNzLCB0aGlzIHZhbHVlIHRyYWNrcyB0aGUgcm9vdCB0aGF0IGlzIGJlaW5nIG9wZXJhdGVkIG9uLlxuXG4gIHZhciBjdXJyZW50Um9vdElEID0gLTE7IC8vIFJldHVybnMgdGhlIHVuaXF1ZSBJRCBmb3IgYSBGaWJlciBvciBnZW5lcmF0ZXMgYW5kIGNhY2hlcyBhIG5ldyBvbmUgaWYgdGhlIEZpYmVyIGhhc24ndCBiZWVuIHNlZW4gYmVmb3JlLlxuICAvLyBPbmNlIHRoaXMgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCBmb3IgYSBGaWJlciwgdW50cmFja0ZpYmVySUQoKSBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBsYXRlciB0byBhdm9pZCBsZWFraW5nLlxuXG4gIGZ1bmN0aW9uIGdldE9yR2VuZXJhdGVGaWJlcklEKGZpYmVyKSB7XG4gICAgdmFyIGlkID0gbnVsbDtcblxuICAgIGlmIChmaWJlclRvSURNYXAuaGFzKGZpYmVyKSkge1xuICAgICAgaWQgPSBmaWJlclRvSURNYXAuZ2V0KGZpYmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9hbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChfYWx0ZXJuYXRlICE9PSBudWxsICYmIGZpYmVyVG9JRE1hcC5oYXMoX2FsdGVybmF0ZSkpIHtcbiAgICAgICAgaWQgPSBmaWJlclRvSURNYXAuZ2V0KF9hbHRlcm5hdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaWRHZW5lcmF0ZUlEID0gZmFsc2U7XG5cbiAgICBpZiAoaWQgPT09IG51bGwpIHtcbiAgICAgIGRpZEdlbmVyYXRlSUQgPSB0cnVlO1xuICAgICAgaWQgPSBnZXRVSUQoKTtcbiAgICB9IC8vIFRoaXMgcmVmaW5lbWVudCBpcyBmb3IgRmxvdyBwdXJwb3NlcyBvbmx5LlxuXG5cbiAgICB2YXIgcmVmaW5lZElEID0gaWQ7IC8vIE1ha2Ugc3VyZSB3ZSdyZSB0cmFja2luZyB0aGlzIEZpYmVyXG4gICAgLy8gZS5nLiBpZiBpdCBqdXN0IG1vdW50ZWQgb3IgYW4gZXJyb3Igd2FzIGxvZ2dlZCBkdXJpbmcgaW5pdGlhbCByZW5kZXIuXG5cbiAgICBpZiAoIWZpYmVyVG9JRE1hcC5oYXMoZmliZXIpKSB7XG4gICAgICBmaWJlclRvSURNYXAuc2V0KGZpYmVyLCByZWZpbmVkSUQpO1xuICAgICAgaWRUb0FyYml0cmFyeUZpYmVyTWFwLnNldChyZWZpbmVkSUQsIGZpYmVyKTtcbiAgICB9IC8vIEFsc28gbWFrZSBzdXJlIHdlJ3JlIHRyYWNraW5nIGl0cyBhbHRlcm5hdGUsXG4gICAgLy8gZS5nLiBpbiBjYXNlIHRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZSBhZnRlciBtb3VudC5cblxuXG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGlmICghZmliZXJUb0lETWFwLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIGZpYmVyVG9JRE1hcC5zZXQoYWx0ZXJuYXRlLCByZWZpbmVkSUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGlmIChkaWRHZW5lcmF0ZUlEKSB7XG4gICAgICAgIGRlYnVnKCdnZXRPckdlbmVyYXRlRmliZXJJRCgpJywgZmliZXIsIGZpYmVyLnJldHVybiwgJ0dlbmVyYXRlZCBhIG5ldyBVSUQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVmaW5lZElEO1xuICB9IC8vIFJldHVybnMgYW4gSUQgaWYgb25lIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkIGZvciB0aGUgRmliZXIgb3IgdGhyb3dzLlxuXG5cbiAgZnVuY3Rpb24gZ2V0RmliZXJJRFRocm93cyhmaWJlcikge1xuICAgIHZhciBtYXliZUlEID0gZ2V0RmliZXJJRFVuc2FmZShmaWJlcik7XG5cbiAgICBpZiAobWF5YmVJRCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG1heWJlSUQ7XG4gICAgfVxuXG4gICAgdGhyb3cgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBJRCBmb3IgRmliZXIgXFxcIlwiLmNvbmNhdChnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSB8fCAnJywgXCJcXFwiXCIpKTtcbiAgfSAvLyBSZXR1cm5zIGFuIElEIGlmIG9uZSBoYXMgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCBmb3IgdGhlIEZpYmVyIG9yIG51bGwgaWYgb25lIGhhcyBub3QgYmVlbiBnZW5lcmF0ZWQuXG4gIC8vIFVzZSB0aGlzIG1ldGhvZCB3aGlsZSBlLmcuIGxvZ2dpbmcgdG8gYXZvaWQgb3Zlci1yZXRhaW5pbmcgRmliZXJzLlxuXG5cbiAgZnVuY3Rpb24gZ2V0RmliZXJJRFVuc2FmZShmaWJlcikge1xuICAgIGlmIChmaWJlclRvSURNYXAuaGFzKGZpYmVyKSkge1xuICAgICAgcmV0dXJuIGZpYmVyVG9JRE1hcC5nZXQoZmliZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGZpYmVyVG9JRE1hcC5oYXMoYWx0ZXJuYXRlKSkge1xuICAgICAgICByZXR1cm4gZmliZXJUb0lETWFwLmdldChhbHRlcm5hdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFJlbW92ZXMgYSBGaWJlciAoYW5kIGl0cyBhbHRlcm5hdGUpIGZyb20gdGhlIE1hcHMgdXNlZCB0byB0cmFjayB0aGVpciBpZC5cbiAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgd2hlbiBhIEZpYmVyIGlzIHVubW91bnRpbmcuXG5cblxuICBmdW5jdGlvbiB1bnRyYWNrRmliZXJJRChmaWJlcikge1xuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGRlYnVnKCd1bnRyYWNrRmliZXJJRCgpJywgZmliZXIsIGZpYmVyLnJldHVybiwgJ3NjaGVkdWxlIGFmdGVyIGRlbGF5Jyk7XG4gICAgfSAvLyBVbnRyYWNrIEZpYmVycyBhZnRlciBhIHNsaWdodCBkZWxheSBpbiBvcmRlciB0byBzdXBwb3J0IGEgRmFzdCBSZWZyZXNoIGVkZ2UgY2FzZTpcbiAgICAvLyAxLiBDb21wb25lbnQgdHlwZSBpcyB1cGRhdGVkIGFuZCBGYXN0IFJlZnJlc2ggc2NoZWR1bGVzIGFuIHVwZGF0ZStyZW1vdW50LlxuICAgIC8vIDIuIGZsdXNoUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheSgpIHJ1bnMsIHNlZXMgdGhlIG9sZCBGaWJlciBpcyBubyBsb25nZXIgbW91bnRlZFxuICAgIC8vICAgIChpdCdzIGJlZW4gZGlzY29ubmVjdGVkIGJ5IEZhc3QgUmVmcmVzaCksIGFuZCBjYWxscyB1bnRyYWNrRmliZXJJRCgpIHRvIGNsZWFyIGl0IGZyb20gdGhlIE1hcC5cbiAgICAvLyAzLiBSZWFjdCBmbHVzaGVzIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIGJlZm9yZSBpdCBydW5zIHRoZSBuZXh0IHJlbmRlcixcbiAgICAvLyAgICB3aGljaCBsb2dzIGFuIGVycm9yIG9yIHdhcm5pbmcsIHdoaWNoIGNhdXNlcyBhIG5ldyBJRCB0byBiZSBnZW5lcmF0ZWQgZm9yIHRoaXMgRmliZXIuXG4gICAgLy8gNC4gRGV2VG9vbHMgbm93IHRyaWVzIHRvIHVubW91bnQgdGhlIG9sZCBDb21wb25lbnQgd2l0aCB0aGUgbmV3IElELlxuICAgIC8vXG4gICAgLy8gVGhlIHVuZGVybHlpbmcgcHJvYmxlbSBoZXJlIGlzIHRoZSBwcmVtYXR1cmUgY2xlYXJpbmcgb2YgdGhlIEZpYmVyIElELFxuICAgIC8vIGJ1dCBEZXZUb29scyBoYXMgbm8gd2F5IHRvIGRldGVjdCB0aGF0IGEgZ2l2ZW4gRmliZXIgaGFzIGJlZW4gc2NoZWR1bGVkIGZvciBGYXN0IFJlZnJlc2guXG4gICAgLy8gKFRoZSBcIl9kZWJ1Z05lZWRzUmVtb3VudFwiIGZsYWcgd29uJ3QgbmVjZXNzYXJpbHkgYmUgc2V0LilcbiAgICAvL1xuICAgIC8vIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyB0byBkZWxheSB1bnRyYWNraW5nIGJ5IGEgc21hbGwgYW1vdW50LFxuICAgIC8vIGFuZCBnaXZlIFJlYWN0IHRpbWUgdG8gcHJvY2VzcyB0aGUgRmFzdCBSZWZyZXNoIGRlbGF5LlxuXG5cbiAgICB1bnRyYWNrRmliZXJzU2V0LmFkZChmaWJlcik7IC8vIFJlYWN0IG1heSBkZXRhY2ggYWx0ZXJuYXRlIHBvaW50ZXJzIGR1cmluZyB1bm1vdW50O1xuICAgIC8vIFNpbmNlIG91ciB1bnRyYWNraW5nIGNvZGUgaXMgYXN5bmMsIHdlIHNob3VsZCBleHBsaWNpbHkgdHJhY2sgdGhlIHBlbmRpbmcgYWx0ZXJuYXRlIGhlcmUgYXMgd2VsbC5cblxuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICB1bnRyYWNrRmliZXJzU2V0LmFkZChhbHRlcm5hdGUpO1xuICAgIH1cblxuICAgIGlmICh1bnRyYWNrRmliZXJzVGltZW91dElEID09PSBudWxsKSB7XG4gICAgICB1bnRyYWNrRmliZXJzVGltZW91dElEID0gc2V0VGltZW91dCh1bnRyYWNrRmliZXJzLCAxMDAwKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdW50cmFja0ZpYmVyc1NldCA9IG5ldyBTZXQoKTtcbiAgdmFyIHVudHJhY2tGaWJlcnNUaW1lb3V0SUQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHVudHJhY2tGaWJlcnMoKSB7XG4gICAgaWYgKHVudHJhY2tGaWJlcnNUaW1lb3V0SUQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh1bnRyYWNrRmliZXJzVGltZW91dElEKTtcbiAgICAgIHVudHJhY2tGaWJlcnNUaW1lb3V0SUQgPSBudWxsO1xuICAgIH1cblxuICAgIHVudHJhY2tGaWJlcnNTZXQuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHZhciBmaWJlcklEID0gZ2V0RmliZXJJRFVuc2FmZShmaWJlcik7XG5cbiAgICAgIGlmIChmaWJlcklEICE9PSBudWxsKSB7XG4gICAgICAgIGlkVG9BcmJpdHJhcnlGaWJlck1hcC5kZWxldGUoZmliZXJJRCk7IC8vIEFsc28gY2xlYXIgYW55IGVycm9ycy93YXJuaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaWJlci5cblxuICAgICAgICBjbGVhckVycm9yc0ZvckZpYmVySUQoZmliZXJJRCk7XG4gICAgICAgIGNsZWFyV2FybmluZ3NGb3JGaWJlcklEKGZpYmVySUQpO1xuICAgICAgfVxuXG4gICAgICBmaWJlclRvSURNYXAuZGVsZXRlKGZpYmVyKTtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgZmliZXJUb0lETWFwLmRlbGV0ZShhbHRlcm5hdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9yY2VFcnJvckZvckZpYmVySURzLmhhcyhmaWJlcklEKSkge1xuICAgICAgICBmb3JjZUVycm9yRm9yRmliZXJJRHMuZGVsZXRlKGZpYmVySUQpO1xuXG4gICAgICAgIGlmIChmb3JjZUVycm9yRm9yRmliZXJJRHMuc2l6ZSA9PT0gMCAmJiBzZXRFcnJvckhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHNldEVycm9ySGFuZGxlcihzaG91bGRFcnJvckZpYmVyQWx3YXlzTnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB1bnRyYWNrRmliZXJzU2V0LmNsZWFyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDaGFuZ2VEZXNjcmlwdGlvbihwcmV2RmliZXIsIG5leHRGaWJlcikge1xuICAgIHN3aXRjaCAoZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihuZXh0RmliZXIpKSB7XG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3M6XG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlRnVuY3Rpb246XG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlTWVtbzpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGb3J3YXJkUmVmOlxuICAgICAgICBpZiAocHJldkZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IG51bGwsXG4gICAgICAgICAgICBkaWRIb29rc0NoYW5nZTogZmFsc2UsXG4gICAgICAgICAgICBpc0ZpcnN0TW91bnQ6IHRydWUsXG4gICAgICAgICAgICBwcm9wczogbnVsbCxcbiAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldENvbnRleHRDaGFuZ2VkS2V5cyhuZXh0RmliZXIpLFxuICAgICAgICAgICAgZGlkSG9va3NDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAgICAgaXNGaXJzdE1vdW50OiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BzOiBnZXRDaGFuZ2VkS2V5cyhwcmV2RmliZXIubWVtb2l6ZWRQcm9wcywgbmV4dEZpYmVyLm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICAgc3RhdGU6IGdldENoYW5nZWRLZXlzKHByZXZGaWJlci5tZW1vaXplZFN0YXRlLCBuZXh0RmliZXIubWVtb2l6ZWRTdGF0ZSlcbiAgICAgICAgICB9OyAvLyBPbmx5IHRyYXZlcnNlIHRoZSBob29rcyBsaXN0IG9uY2UsIGRlcGVuZGluZyBvbiB3aGF0IGluZm8gd2UncmUgcmV0dXJuaW5nLlxuXG4gICAgICAgICAgdmFyIGluZGljZXMgPSBnZXRDaGFuZ2VkSG9va3NJbmRpY2VzKHByZXZGaWJlci5tZW1vaXplZFN0YXRlLCBuZXh0RmliZXIubWVtb2l6ZWRTdGF0ZSk7XG4gICAgICAgICAgZGF0YS5ob29rcyA9IGluZGljZXM7XG4gICAgICAgICAgZGF0YS5kaWRIb29rc0NoYW5nZSA9IGluZGljZXMgIT09IG51bGwgJiYgaW5kaWNlcy5sZW5ndGggPiAwO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRzRm9yRmliZXIoZmliZXIpIHtcbiAgICBzd2l0Y2ggKGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpKSB7XG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3M6XG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlRm9yd2FyZFJlZjpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbjpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVNZW1vOlxuICAgICAgICBpZiAoaWRUb0NvbnRleHRzTWFwICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGlkID0gZ2V0RmliZXJJRFRocm93cyhmaWJlcik7XG4gICAgICAgICAgdmFyIGNvbnRleHRzID0gZ2V0Q29udGV4dHNGb3JGaWJlcihmaWJlcik7XG5cbiAgICAgICAgICBpZiAoY29udGV4dHMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgICAgaWRUb0NvbnRleHRzTWFwLnNldChpZCwgY29udGV4dHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gLy8gRGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBhIG51bGwgY29udGV4dCB2YWx1ZSBhbmQgbm8gY29udGV4dC5cblxuXG4gIHZhciBOT19DT05URVhUID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0Q29udGV4dHNGb3JGaWJlcihmaWJlcikge1xuICAgIHZhciBsZWdhY3lDb250ZXh0ID0gTk9fQ09OVEVYVDtcbiAgICB2YXIgbW9kZXJuQ29udGV4dCA9IE5PX0NPTlRFWFQ7XG5cbiAgICBzd2l0Y2ggKGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpKSB7XG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3M6XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChpbnN0YW5jZS5jb25zdHJ1Y3RvciAmJiBpbnN0YW5jZS5jb25zdHJ1Y3Rvci5jb250ZXh0VHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtb2Rlcm5Db250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVnYWN5Q29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG5cbiAgICAgICAgICAgIGlmIChsZWdhY3lDb250ZXh0ICYmIE9iamVjdC5rZXlzKGxlZ2FjeUNvbnRleHQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBsZWdhY3lDb250ZXh0ID0gTk9fQ09OVEVYVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2xlZ2FjeUNvbnRleHQsIG1vZGVybkNvbnRleHRdO1xuXG4gICAgICBjYXNlIHR5cGVzX0VsZW1lbnRUeXBlRm9yd2FyZFJlZjpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbjpcbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVNZW1vOlxuICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0gZmliZXIuZGVwZW5kZW5jaWVzO1xuXG4gICAgICAgIGlmIChkZXBlbmRlbmNpZXMgJiYgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCkge1xuICAgICAgICAgIG1vZGVybkNvbnRleHQgPSBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtsZWdhY3lDb250ZXh0LCBtb2Rlcm5Db250ZXh0XTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIFJlY29yZCBhbGwgY29udGV4dHMgYXQgdGhlIHRpbWUgcHJvZmlsaW5nIGlzIHN0YXJ0ZWQuXG4gIC8vIEZpYmVycyBvbmx5IHN0b3JlIHRoZSBjdXJyZW50IGNvbnRleHQgdmFsdWUsXG4gIC8vIHNvIHdlIG5lZWQgdG8gdHJhY2sgdGhlbSBzZXBhcmF0ZWx5IGluIG9yZGVyIHRvIGRldGVybWluZSBjaGFuZ2VkIGtleXMuXG5cblxuICBmdW5jdGlvbiBjcmF3bFRvSW5pdGlhbGl6ZUNvbnRleHRzTWFwKGZpYmVyKSB7XG4gICAgdmFyIGlkID0gZ2V0RmliZXJJRFVuc2FmZShmaWJlcik7IC8vIE5vdCBhbGwgRmliZXJzIGluIHRoZSBzdWJ0cmVlIGhhdmUgbW91bnRlZCB5ZXQuXG4gICAgLy8gRm9yIGV4YW1wbGUsIE9mZnNjcmVlbiAoaGlkZGVuKSBvciBTdXNwZW5zZSAoc3VzcGVuZGVkKSBzdWJ0cmVlcyB3b24ndCB5ZXQgYmUgdHJhY2tlZC5cbiAgICAvLyBXZSBjYW4gc2FmZWx5IHNraXAgdGhlc2Ugc3VidHJlZXMuXG5cbiAgICBpZiAoaWQgIT09IG51bGwpIHtcbiAgICAgIHVwZGF0ZUNvbnRleHRzRm9yRmliZXIoZmliZXIpO1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5jaGlsZDtcblxuICAgICAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY3Jhd2xUb0luaXRpYWxpemVDb250ZXh0c01hcChjdXJyZW50KTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb250ZXh0Q2hhbmdlZEtleXMoZmliZXIpIHtcbiAgICBpZiAoaWRUb0NvbnRleHRzTWFwICE9PSBudWxsKSB7XG4gICAgICB2YXIgaWQgPSBnZXRGaWJlcklEVGhyb3dzKGZpYmVyKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgIHZhciBwcmV2Q29udGV4dHMgPSBpZFRvQ29udGV4dHNNYXAuaGFzKGlkKSA/IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgaWRUb0NvbnRleHRzTWFwLmdldChpZCkgOiBudWxsO1xuICAgICAgdmFyIG5leHRDb250ZXh0cyA9IGdldENvbnRleHRzRm9yRmliZXIoZmliZXIpO1xuXG4gICAgICBpZiAocHJldkNvbnRleHRzID09IG51bGwgfHwgbmV4dENvbnRleHRzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBfcHJldkNvbnRleHRzID0gcmVuZGVyZXJfc2xpY2VkVG9BcnJheShwcmV2Q29udGV4dHMsIDIpLFxuICAgICAgICAgIHByZXZMZWdhY3lDb250ZXh0ID0gX3ByZXZDb250ZXh0c1swXSxcbiAgICAgICAgICBwcmV2TW9kZXJuQ29udGV4dCA9IF9wcmV2Q29udGV4dHNbMV07XG5cbiAgICAgIHZhciBfbmV4dENvbnRleHRzID0gcmVuZGVyZXJfc2xpY2VkVG9BcnJheShuZXh0Q29udGV4dHMsIDIpLFxuICAgICAgICAgIG5leHRMZWdhY3lDb250ZXh0ID0gX25leHRDb250ZXh0c1swXSxcbiAgICAgICAgICBuZXh0TW9kZXJuQ29udGV4dCA9IF9uZXh0Q29udGV4dHNbMV07XG5cbiAgICAgIHN3aXRjaCAoZ2V0RWxlbWVudFR5cGVGb3JGaWJlcihmaWJlcikpIHtcbiAgICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZUNsYXNzOlxuICAgICAgICAgIGlmIChwcmV2Q29udGV4dHMgJiYgbmV4dENvbnRleHRzKSB7XG4gICAgICAgICAgICBpZiAobmV4dExlZ2FjeUNvbnRleHQgIT09IE5PX0NPTlRFWFQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENoYW5nZWRLZXlzKHByZXZMZWdhY3lDb250ZXh0LCBuZXh0TGVnYWN5Q29udGV4dCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRNb2Rlcm5Db250ZXh0ICE9PSBOT19DT05URVhUKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmV2TW9kZXJuQ29udGV4dCAhPT0gbmV4dE1vZGVybkNvbnRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZUZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbjpcbiAgICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZU1lbW86XG4gICAgICAgICAgaWYgKG5leHRNb2Rlcm5Db250ZXh0ICE9PSBOT19DT05URVhUKSB7XG4gICAgICAgICAgICB2YXIgcHJldkNvbnRleHQgPSBwcmV2TW9kZXJuQ29udGV4dDtcbiAgICAgICAgICAgIHZhciBuZXh0Q29udGV4dCA9IG5leHRNb2Rlcm5Db250ZXh0O1xuXG4gICAgICAgICAgICB3aGlsZSAocHJldkNvbnRleHQgJiYgbmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgLy8gTm90ZSB0aGlzIG9ubHkgd29ya3MgZm9yIHZlcnNpb25zIG9mIFJlYWN0IHRoYXQgc3VwcG9ydCB0aGlzIGtleSAoZS52LiAxOCspXG4gICAgICAgICAgICAgIC8vIEZvciBvbGRlciB2ZXJzaW9ucywgdGhlcmUncyBubyBnb29kIHdheSB0byByZWFkIHRoZSBjdXJyZW50IGNvbnRleHQgdmFsdWUgYWZ0ZXIgcmVuZGVyIGhhcyBjb21wbGV0ZWQuXG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSBSZWFjdCBtYWludGFpbnMgYSBzdGFjayBvZiBjb250ZXh0IHZhbHVlcyBkdXJpbmcgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBidXQgYnkgdGhlIHRpbWUgRGV2VG9vbHMgaXMgY2FsbGVkLCByZW5kZXIgaGFzIGZpbmlzaGVkIGFuZCB0aGUgc3RhY2sgaXMgZW1wdHkuXG4gICAgICAgICAgICAgIGlmICghc2hhcmVkX29iamVjdElzKHByZXZDb250ZXh0Lm1lbW9pemVkVmFsdWUsIG5leHRDb250ZXh0Lm1lbW9pemVkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBwcmV2Q29udGV4dCA9IHByZXZDb250ZXh0Lm5leHQ7XG4gICAgICAgICAgICAgIG5leHRDb250ZXh0ID0gbmV4dENvbnRleHQubmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBpc0hvb2tUaGF0Q2FuU2NoZWR1bGVVcGRhdGUoaG9va09iamVjdCkge1xuICAgIHZhciBxdWV1ZSA9IGhvb2tPYmplY3QucXVldWU7XG5cbiAgICBpZiAoIXF1ZXVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGJvdW5kSGFzT3duUHJvcGVydHkgPSBzaGFyZWRfaGFzT3duUHJvcGVydHkuYmluZChxdWV1ZSk7IC8vIERldGVjdCB0aGUgc2hhcGUgb2YgdXNlU3RhdGUoKSAvIHVzZVJlZHVjZXIoKSAvIHVzZVRyYW5zaXRpb24oKVxuICAgIC8vIHVzaW5nIHRoZSBhdHRyaWJ1dGVzIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGVzZSBob29rc1xuICAgIC8vIGJ1dCBhbHNvIHN0YWJsZSAoZS5nLiBub3QgdGllZCB0byBjdXJyZW50IExhbmVzIGltcGxlbWVudGF0aW9uKVxuICAgIC8vIFdlIGRvbid0IGNoZWNrIGZvciBkaXNwYXRjaCBwcm9wZXJ0eSwgYmVjYXVzZSB1c2VUcmFuc2l0aW9uIGRvZXNuJ3QgaGF2ZSBpdFxuXG4gICAgaWYgKGJvdW5kSGFzT3duUHJvcGVydHkoJ3BlbmRpbmcnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBEZXRlY3QgdXNlU3luY0V4dGVybmFsU3RvcmUoKVxuXG5cbiAgICByZXR1cm4gYm91bmRIYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSAmJiBib3VuZEhhc093blByb3BlcnR5KCdnZXRTbmFwc2hvdCcpICYmIHR5cGVvZiBxdWV1ZS5nZXRTbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpZFN0YXRlZnVsSG9va0NoYW5nZShwcmV2LCBuZXh0KSB7XG4gICAgdmFyIHByZXZNZW1vaXplZFN0YXRlID0gcHJldi5tZW1vaXplZFN0YXRlO1xuICAgIHZhciBuZXh0TWVtb2l6ZWRTdGF0ZSA9IG5leHQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChpc0hvb2tUaGF0Q2FuU2NoZWR1bGVVcGRhdGUocHJldikpIHtcbiAgICAgIHJldHVybiBwcmV2TWVtb2l6ZWRTdGF0ZSAhPT0gbmV4dE1lbW9pemVkU3RhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2hhbmdlZEhvb2tzSW5kaWNlcyhwcmV2LCBuZXh0KSB7XG4gICAgaWYgKHByZXYgPT0gbnVsbCB8fCBuZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIGlmIChuZXh0Lmhhc093blByb3BlcnR5KCdiYXNlU3RhdGUnKSAmJiBuZXh0Lmhhc093blByb3BlcnR5KCdtZW1vaXplZFN0YXRlJykgJiYgbmV4dC5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpICYmIG5leHQuaGFzT3duUHJvcGVydHkoJ3F1ZXVlJykpIHtcbiAgICAgIHdoaWxlIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChkaWRTdGF0ZWZ1bEhvb2tDaGFuZ2UocHJldiwgbmV4dCkpIHtcbiAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgcHJldiA9IHByZXYubmV4dDtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENoYW5nZWRLZXlzKHByZXYsIG5leHQpIHtcbiAgICBpZiAocHJldiA9PSBudWxsIHx8IG5leHQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBXZSBjYW4ndCByZXBvcnQgYW55dGhpbmcgbWVhbmluZ2Z1bCBmb3IgaG9va3MgY2hhbmdlcy5cblxuXG4gICAgaWYgKG5leHQuaGFzT3duUHJvcGVydHkoJ2Jhc2VTdGF0ZScpICYmIG5leHQuaGFzT3duUHJvcGVydHkoJ21lbW9pemVkU3RhdGUnKSAmJiBuZXh0Lmhhc093blByb3BlcnR5KCduZXh0JykgJiYgbmV4dC5oYXNPd25Qcm9wZXJ0eSgncXVldWUnKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBuZXcgU2V0KFtdLmNvbmNhdChyZW5kZXJlcl90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhwcmV2KSksIHJlbmRlcmVyX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKG5leHQpKSkpO1xuICAgIHZhciBjaGFuZ2VkS2V5cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZm9yLW9mLWxvb3BzL25vLWZvci1vZi1sb29wc1xuXG4gICAgdmFyIF9pdGVyYXRvcjUgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihrZXlzKSxcbiAgICAgICAgX3N0ZXA1O1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoX2l0ZXJhdG9yNS5zKCk7ICEoX3N0ZXA1ID0gX2l0ZXJhdG9yNS5uKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBrZXkgPSBfc3RlcDUudmFsdWU7XG5cbiAgICAgICAgaWYgKHByZXZba2V5XSAhPT0gbmV4dFtrZXldKSB7XG4gICAgICAgICAgY2hhbmdlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfaXRlcmF0b3I1LmUoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgX2l0ZXJhdG9yNS5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZWRLZXlzO1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuXG5cbiAgZnVuY3Rpb24gZGlkRmliZXJSZW5kZXIocHJldkZpYmVyLCBuZXh0RmliZXIpIHtcbiAgICBzd2l0Y2ggKG5leHRGaWJlci50YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIC8vIEZvciB0eXBlcyB0aGF0IGV4ZWN1dGUgdXNlciBjb2RlLCB3ZSBjaGVjayBQZXJmb3JtZWRXb3JrIGVmZmVjdC5cbiAgICAgICAgLy8gV2UgZG9uJ3QgcmVmbGVjdCBiYWlsb3V0cyAoZWl0aGVyIHJlZmVyZW50aWFsIG9yIHNDVSkgaW4gRGV2VG9vbHMuXG4gICAgICAgIC8vIFRPRE86IFRoaXMgZmxhZyBpcyBhIGxlYWtlZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIE9uY2Ugd2Ugc3RhcnRcbiAgICAgICAgLy8gcmVsZWFzaW5nIERldlRvb2xzIGluIGxvY2tzdGVwIHdpdGggUmVhY3QsIHdlIHNob3VsZCBpbXBvcnQgYVxuICAgICAgICAvLyBmdW5jdGlvbiBmcm9tIHRoZSByZWNvbmNpbGVyIGluc3RlYWQuXG4gICAgICAgIHZhciBQZXJmb3JtZWRXb3JrID0gMTtcbiAgICAgICAgcmV0dXJuIChnZXRGaWJlckZsYWdzKG5leHRGaWJlcikgJiBQZXJmb3JtZWRXb3JrKSA9PT0gUGVyZm9ybWVkV29yaztcbiAgICAgIC8vIE5vdGU6IENvbnRleHRDb25zdW1lciBvbmx5IGdldHMgUGVyZm9ybWVkV29yayBlZmZlY3QgaW4gMTYuMy4zK1xuICAgICAgLy8gc28gaXQgd29uJ3QgZ2V0IGhpZ2hsaWdodGVkIHdpdGggUmVhY3QgMTYuMy4wIHRvIDE2LjMuMi5cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRm9yIGhvc3QgY29tcG9uZW50cyBhbmQgb3RoZXIgdHlwZXMsIHdlIGNvbXBhcmUgaW5wdXRzXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIHNvbWV0aGluZyBpcyBhbiB1cGRhdGUuXG4gICAgICAgIHJldHVybiBwcmV2RmliZXIubWVtb2l6ZWRQcm9wcyAhPT0gbmV4dEZpYmVyLm1lbW9pemVkUHJvcHMgfHwgcHJldkZpYmVyLm1lbW9pemVkU3RhdGUgIT09IG5leHRGaWJlci5tZW1vaXplZFN0YXRlIHx8IHByZXZGaWJlci5yZWYgIT09IG5leHRGaWJlci5yZWY7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBlbmRpbmdPcGVyYXRpb25zID0gW107XG4gIHZhciBwZW5kaW5nUmVhbFVubW91bnRlZElEcyA9IFtdO1xuICB2YXIgcGVuZGluZ1NpbXVsYXRlZFVubW91bnRlZElEcyA9IFtdO1xuICB2YXIgcGVuZGluZ09wZXJhdGlvbnNRdWV1ZSA9IFtdO1xuICB2YXIgcGVuZGluZ1N0cmluZ1RhYmxlID0gbmV3IE1hcCgpO1xuICB2YXIgcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoID0gMDtcbiAgdmFyIHBlbmRpbmdVbm1vdW50ZWRSb290SUQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHB1c2hPcGVyYXRpb24ob3ApIHtcbiAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICBwZW5kaW5nT3BlcmF0aW9ucy5wdXNoKG9wKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEJhaWxvdXRXaXRoUGVuZGluZ09wZXJhdGlvbnMoKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICBpZiAoY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhICE9IG51bGwgJiYgY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhLmR1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoID09PSAwICYmIHBlbmRpbmdSZWFsVW5tb3VudGVkSURzLmxlbmd0aCA9PT0gMCAmJiBwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzLmxlbmd0aCA9PT0gMCAmJiBwZW5kaW5nVW5tb3VudGVkUm9vdElEID09PSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2hPclF1ZXVlT3BlcmF0aW9ucyhvcGVyYXRpb25zKSB7XG4gICAgaWYgKHNob3VsZEJhaWxvdXRXaXRoUGVuZGluZ09wZXJhdGlvbnMoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwZW5kaW5nT3BlcmF0aW9uc1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICBwZW5kaW5nT3BlcmF0aW9uc1F1ZXVlLnB1c2gob3BlcmF0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2suZW1pdCgnb3BlcmF0aW9ucycsIG9wZXJhdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmbHVzaFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5nc0FmdGVyRGVsYXlUaW1lb3V0SUQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGNsZWFyUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheSgpIHtcbiAgICBpZiAoZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5VGltZW91dElEICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5VGltZW91dElEKTtcbiAgICAgIGZsdXNoUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheVRpbWVvdXRJRCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5KCkge1xuICAgIGNsZWFyUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheSgpO1xuICAgIGZsdXNoUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheVRpbWVvdXRJRCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5VGltZW91dElEID0gbnVsbDtcblxuICAgICAgaWYgKHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gT24gdGhlIG9mZiBjaGFuY2UgdGhhdCBzb21ldGhpbmcgZWxzZSBoYXMgcHVzaGVkIHBlbmRpbmcgb3BlcmF0aW9ucyxcbiAgICAgICAgLy8gd2Ugc2hvdWxkIGJhaWwgb24gd2FybmluZ3M7IGl0J3MgcHJvYmFibHkgbm90IHNhZmUgdG8gcHVzaCBtaWR3YXkuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVjb3JkUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzKCk7XG5cbiAgICAgIGlmIChzaG91bGRCYWlsb3V0V2l0aFBlbmRpbmdPcGVyYXRpb25zKCkpIHtcbiAgICAgICAgLy8gTm8gd2FybmluZ3Mgb3IgZXJyb3JzIHRvIGZsdXNoOyB3ZSBjYW4gYmFpbCBvdXQgZWFybHkgaGVyZSB0b28uXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gV2UgY2FuIGNyZWF0ZSBhIHNtYWxsZXIgb3BlcmF0aW9ucyBhcnJheSB0aGFuIGZsdXNoUGVuZGluZ0V2ZW50cygpXG4gICAgICAvLyBiZWNhdXNlIHdlIG9ubHkgbmVlZCB0byBmbHVzaCB3YXJuaW5nIGFuZCBlcnJvciBjb3VudHMuXG4gICAgICAvLyBPbmx5IGEgZmV3IHBpZWNlcyBvZiBmaXhlZCBpbmZvcm1hdGlvbiBhcmUgcmVxdWlyZWQgdXAgZnJvbnQuXG5cblxuICAgICAgdmFyIG9wZXJhdGlvbnMgPSBuZXcgQXJyYXkoMyArIHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aCk7XG4gICAgICBvcGVyYXRpb25zWzBdID0gcmVuZGVyZXJJRDtcbiAgICAgIG9wZXJhdGlvbnNbMV0gPSBjdXJyZW50Um9vdElEO1xuICAgICAgb3BlcmF0aW9uc1syXSA9IDA7IC8vIFN0cmluZyB0YWJsZSBzaXplXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgb3BlcmF0aW9uc1szICsgal0gPSBwZW5kaW5nT3BlcmF0aW9uc1tqXTtcbiAgICAgIH1cblxuICAgICAgZmx1c2hPclF1ZXVlT3BlcmF0aW9ucyhvcGVyYXRpb25zKTtcbiAgICAgIHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aCA9IDA7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBmdW5jdGlvbiByZWV2YWx1YXRlRXJyb3JzQW5kV2FybmluZ3MoKSB7XG4gICAgZmliZXJzV2l0aENoYW5nZWRFcnJvck9yV2FybmluZ0NvdW50cy5jbGVhcigpO1xuICAgIGZpYmVySURUb0Vycm9yc01hcC5mb3JFYWNoKGZ1bmN0aW9uIChjb3VudE1hcCwgZmliZXJJRCkge1xuICAgICAgdmFyIGZpYmVyID0gaWRUb0FyYml0cmFyeUZpYmVyTWFwLmdldChmaWJlcklEKTtcblxuICAgICAgaWYgKGZpYmVyICE9IG51bGwpIHtcbiAgICAgICAgZmliZXJzV2l0aENoYW5nZWRFcnJvck9yV2FybmluZ0NvdW50cy5hZGQoZmliZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZpYmVySURUb1dhcm5pbmdzTWFwLmZvckVhY2goZnVuY3Rpb24gKGNvdW50TWFwLCBmaWJlcklEKSB7XG4gICAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGZpYmVySUQpO1xuXG4gICAgICBpZiAoZmliZXIgIT0gbnVsbCkge1xuICAgICAgICBmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzLmFkZChmaWJlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVjb3JkUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzKCk7XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZU1hcHNBbmRHZXRDb3VudEhlbHBlcihmaWJlciwgZmliZXJJRCwgcGVuZGluZ0ZpYmVyVG9NZXNzYWdlQ291bnRNYXAsIGZpYmVySURUb01lc3NhZ2VDb3VudE1hcCkge1xuICAgIHZhciBuZXdDb3VudCA9IDA7XG4gICAgdmFyIG1lc3NhZ2VDb3VudE1hcCA9IGZpYmVySURUb01lc3NhZ2VDb3VudE1hcC5nZXQoZmliZXJJRCk7XG4gICAgdmFyIHBlbmRpbmdNZXNzYWdlQ291bnRNYXAgPSBwZW5kaW5nRmliZXJUb01lc3NhZ2VDb3VudE1hcC5nZXQoZmliZXIpO1xuXG4gICAgaWYgKHBlbmRpbmdNZXNzYWdlQ291bnRNYXAgIT0gbnVsbCkge1xuICAgICAgaWYgKG1lc3NhZ2VDb3VudE1hcCA9PSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2VDb3VudE1hcCA9IHBlbmRpbmdNZXNzYWdlQ291bnRNYXA7XG4gICAgICAgIGZpYmVySURUb01lc3NhZ2VDb3VudE1hcC5zZXQoZmliZXJJRCwgcGVuZGluZ01lc3NhZ2VDb3VudE1hcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIEZsb3cgcmVmaW5lbWVudCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBhbmQgeWV0Li4uXG4gICAgICAgIHZhciByZWZpbmVkTWVzc2FnZUNvdW50TWFwID0gbWVzc2FnZUNvdW50TWFwO1xuICAgICAgICBwZW5kaW5nTWVzc2FnZUNvdW50TWFwLmZvckVhY2goZnVuY3Rpb24gKHBlbmRpbmdDb3VudCwgbWVzc2FnZSkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0NvdW50ID0gcmVmaW5lZE1lc3NhZ2VDb3VudE1hcC5nZXQobWVzc2FnZSkgfHwgMDtcbiAgICAgICAgICByZWZpbmVkTWVzc2FnZUNvdW50TWFwLnNldChtZXNzYWdlLCBwcmV2aW91c0NvdW50ICsgcGVuZGluZ0NvdW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFzaG91bGRGaWx0ZXJGaWJlcihmaWJlcikpIHtcbiAgICAgIGlmIChtZXNzYWdlQ291bnRNYXAgIT0gbnVsbCkge1xuICAgICAgICBtZXNzYWdlQ291bnRNYXAuZm9yRWFjaChmdW5jdGlvbiAoY291bnQpIHtcbiAgICAgICAgICBuZXdDb3VudCArPSBjb3VudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVuZGluZ0ZpYmVyVG9NZXNzYWdlQ291bnRNYXAuZGVsZXRlKGZpYmVyKTtcbiAgICByZXR1cm4gbmV3Q291bnQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3MoKSB7XG4gICAgY2xlYXJQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5KCk7XG4gICAgZmliZXJzV2l0aENoYW5nZWRFcnJvck9yV2FybmluZ0NvdW50cy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgdmFyIGZpYmVySUQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKTtcblxuICAgICAgaWYgKGZpYmVySUQgPT09IG51bGwpIHsvLyBEb24ndCBzZW5kIHVwZGF0ZXMgZm9yIEZpYmVycyB0aGF0IGRpZG4ndCBtb3VudCBkdWUgdG8gZS5nLiBTdXNwZW5zZSBvciBhbiBlcnJvciBib3VuZGFyeS5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvckNvdW50ID0gbWVyZ2VNYXBzQW5kR2V0Q291bnRIZWxwZXIoZmliZXIsIGZpYmVySUQsIHBlbmRpbmdGaWJlclRvRXJyb3JzTWFwLCBmaWJlcklEVG9FcnJvcnNNYXApO1xuICAgICAgICB2YXIgd2FybmluZ0NvdW50ID0gbWVyZ2VNYXBzQW5kR2V0Q291bnRIZWxwZXIoZmliZXIsIGZpYmVySUQsIHBlbmRpbmdGaWJlclRvV2FybmluZ3NNYXAsIGZpYmVySURUb1dhcm5pbmdzTWFwKTtcbiAgICAgICAgcHVzaE9wZXJhdGlvbihUUkVFX09QRVJBVElPTl9VUERBVEVfRVJST1JTX09SX1dBUk5JTkdTKTtcbiAgICAgICAgcHVzaE9wZXJhdGlvbihmaWJlcklEKTtcbiAgICAgICAgcHVzaE9wZXJhdGlvbihlcnJvckNvdW50KTtcbiAgICAgICAgcHVzaE9wZXJhdGlvbih3YXJuaW5nQ291bnQpO1xuICAgICAgfSAvLyBBbHdheXMgY2xlYW4gdXAgc28gdGhhdCB3ZSBkb24ndCBsZWFrLlxuXG5cbiAgICAgIHBlbmRpbmdGaWJlclRvRXJyb3JzTWFwLmRlbGV0ZShmaWJlcik7XG4gICAgICBwZW5kaW5nRmliZXJUb1dhcm5pbmdzTWFwLmRlbGV0ZShmaWJlcik7XG4gICAgfSk7XG4gICAgZmliZXJzV2l0aENoYW5nZWRFcnJvck9yV2FybmluZ0NvdW50cy5jbGVhcigpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2hQZW5kaW5nRXZlbnRzKHJvb3QpIHtcbiAgICAvLyBBZGQgYW55IHBlbmRpbmcgZXJyb3JzIGFuZCB3YXJuaW5ncyB0byB0aGUgb3BlcmF0aW9ucyBhcnJheS5cbiAgICAvLyBXZSBkbyB0aGlzIGp1c3QgYmVmb3JlIGZsdXNoaW5nLCBzbyB3ZSBjYW4gaWdub3JlIGVycm9ycyBmb3Igbm8tbG9uZ2VyLW1vdW50ZWQgRmliZXJzLlxuICAgIHJlY29yZFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5ncygpO1xuXG4gICAgaWYgKHNob3VsZEJhaWxvdXRXaXRoUGVuZGluZ09wZXJhdGlvbnMoKSkge1xuICAgICAgLy8gSWYgd2UgYXJlbid0IHByb2ZpbGluZywgd2UgY2FuIGp1c3QgYmFpbCBvdXQgaGVyZS5cbiAgICAgIC8vIE5vIHVzZSBzZW5kaW5nIGFuIGVtcHR5IHVwZGF0ZSBvdmVyIHRoZSBicmlkZ2UuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIFByb2ZpbGVyIHN0b3JlcyBtZXRhZGF0YSBmb3IgZWFjaCBjb21taXQgYW5kIHJlY29uc3RydWN0cyB0aGUgYXBwIHRyZWUgcGVyIGNvbW1pdCB1c2luZzpcbiAgICAgIC8vICgxKSBhbiBpbml0aWFsIHRyZWUgc25hcHNob3QgYW5kXG4gICAgICAvLyAoMikgdGhlIG9wZXJhdGlvbnMgYXJyYXkgZm9yIGVhY2ggY29tbWl0XG4gICAgICAvLyBCZWNhdXNlIG9mIHRoaXMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG9wZXJhdGlvbnMgYW5kIG1ldGFkYXRhIGFycmF5cyBhbGlnbixcbiAgICAgIC8vIFNvIGl0J3MgaW1wb3J0YW50IG5vdCB0byBvbWl0IGV2ZW4gZW1wdHkgb3BlcmF0aW9ucyB3aGlsZSBwcm9maWxpbmcgaXMgYWN0aXZlLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBudW1Vbm1vdW50SURzID0gcGVuZGluZ1JlYWxVbm1vdW50ZWRJRHMubGVuZ3RoICsgcGVuZGluZ1NpbXVsYXRlZFVubW91bnRlZElEcy5sZW5ndGggKyAocGVuZGluZ1VubW91bnRlZFJvb3RJRCA9PT0gbnVsbCA/IDAgOiAxKTtcbiAgICB2YXIgb3BlcmF0aW9ucyA9IG5ldyBBcnJheSggLy8gSWRlbnRpZnkgd2hpY2ggcmVuZGVyZXIgdGhpcyB1cGRhdGUgaXMgY29taW5nIGZyb20uXG4gICAgMiArIC8vIFtyZW5kZXJlcklELCByb290RmliZXJJRF1cbiAgICAvLyBIb3cgYmlnIGlzIHRoZSBzdHJpbmcgdGFibGU/XG4gICAgMSArIC8vIFtzdHJpbmdUYWJsZUxlbmd0aF1cbiAgICAvLyBUaGVuIGdvZXMgdGhlIGFjdHVhbCBzdHJpbmcgdGFibGUuXG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoICsgKCAvLyBBbGwgdW5tb3VudHMgYXJlIGJhdGNoZWQgaW4gYSBzaW5nbGUgbWVzc2FnZS5cbiAgICAvLyBbVFJFRV9PUEVSQVRJT05fUkVNT1ZFLCByZW1vdmVkSURMZW5ndGgsIC4uLmlkc11cbiAgICBudW1Vbm1vdW50SURzID4gMCA/IDIgKyBudW1Vbm1vdW50SURzIDogMCkgKyAvLyBSZWd1bGFyIG9wZXJhdGlvbnNcbiAgICBwZW5kaW5nT3BlcmF0aW9ucy5sZW5ndGgpOyAvLyBJZGVudGlmeSB3aGljaCByZW5kZXJlciB0aGlzIHVwZGF0ZSBpcyBjb21pbmcgZnJvbS5cbiAgICAvLyBUaGlzIGVuYWJsZXMgcm9vdHMgdG8gYmUgbWFwcGVkIHRvIHJlbmRlcmVycyxcbiAgICAvLyBXaGljaCBpbiB0dXJuIGVuYWJsZXMgZmliZXIgcHJvcHMsIHN0YXRlcywgYW5kIGhvb2tzIHRvIGJlIGluc3BlY3RlZC5cblxuICAgIHZhciBpID0gMDtcbiAgICBvcGVyYXRpb25zW2krK10gPSByZW5kZXJlcklEO1xuICAgIG9wZXJhdGlvbnNbaSsrXSA9IGN1cnJlbnRSb290SUQ7IC8vIE5vdyBmaWxsIGluIHRoZSBzdHJpbmcgdGFibGUuXG4gICAgLy8gW3N0cmluZ1RhYmxlTGVuZ3RoLCBzdHIxTGVuZ3RoLCAuLi5zdHIxLCBzdHIyTGVuZ3RoLCAuLi5zdHIyLCAuLi5dXG5cbiAgICBvcGVyYXRpb25zW2krK10gPSBwZW5kaW5nU3RyaW5nVGFibGVMZW5ndGg7XG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5LCBzdHJpbmdLZXkpIHtcbiAgICAgIHZhciBlbmNvZGVkU3RyaW5nID0gZW50cnkuZW5jb2RlZFN0cmluZzsgLy8gRG9uJ3QgdXNlIHRoZSBzdHJpbmcgbGVuZ3RoLlxuICAgICAgLy8gSXQgd29uJ3Qgd29yayBmb3IgbXVsdGlieXRlIGNoYXJhY3RlcnMgKGxpa2UgZW1vamkpLlxuXG4gICAgICB2YXIgbGVuZ3RoID0gZW5jb2RlZFN0cmluZy5sZW5ndGg7XG4gICAgICBvcGVyYXRpb25zW2krK10gPSBsZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHtcbiAgICAgICAgb3BlcmF0aW9uc1tpICsgal0gPSBlbmNvZGVkU3RyaW5nW2pdO1xuICAgICAgfVxuXG4gICAgICBpICs9IGxlbmd0aDtcbiAgICB9KTtcblxuICAgIGlmIChudW1Vbm1vdW50SURzID4gMCkge1xuICAgICAgLy8gQWxsIHVubW91bnRzIGV4Y2VwdCByb290cyBhcmUgYmF0Y2hlZCBpbiBhIHNpbmdsZSBtZXNzYWdlLlxuICAgICAgb3BlcmF0aW9uc1tpKytdID0gVFJFRV9PUEVSQVRJT05fUkVNT1ZFOyAvLyBUaGUgZmlyc3QgbnVtYmVyIGlzIGhvdyBtYW55IHVubW91bnRlZCBJRHMgd2UncmUgZ29ubmEgc2VuZC5cblxuICAgICAgb3BlcmF0aW9uc1tpKytdID0gbnVtVW5tb3VudElEczsgLy8gRmlsbCBpbiB0aGUgcmVhbCB1bm1vdW50cyBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cbiAgICAgIC8vIFRoZXkgd2VyZSBpbnNlcnRlZCBwYXJlbnRzLWZpcnN0IGJ5IFJlYWN0LCBidXQgd2Ugd2FudCBjaGlsZHJlbi1maXJzdC5cbiAgICAgIC8vIFNvIHdlIHRyYXZlcnNlIG91ciBhcnJheSBiYWNrd2FyZHMuXG5cbiAgICAgIGZvciAodmFyIGogPSBwZW5kaW5nUmVhbFVubW91bnRlZElEcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICBvcGVyYXRpb25zW2krK10gPSBwZW5kaW5nUmVhbFVubW91bnRlZElEc1tqXTtcbiAgICAgIH0gLy8gRmlsbCBpbiB0aGUgc2ltdWxhdGVkIHVubW91bnRzIChoaWRkZW4gU3VzcGVuc2Ugc3VidHJlZXMpIGluIHRoZWlyIG9yZGVyLlxuICAgICAgLy8gKFdlIHdhbnQgY2hpbGRyZW4gdG8gZ28gYmVmb3JlIHBhcmVudHMuKVxuICAgICAgLy8gVGhleSBnbyAqYWZ0ZXIqIHRoZSByZWFsIHVubW91bnRzIGJlY2F1c2Ugd2Uga25vdyBmb3Igc3VyZSB0aGV5IHdvbid0IGJlXG4gICAgICAvLyBjaGlsZHJlbiBvZiBhbHJlYWR5IHB1c2hlZCBcInJlYWxcIiBJRHMuIElmIHRoZXkgd2VyZSwgd2Ugd291bGRuJ3QgYmUgYWJsZVxuICAgICAgLy8gdG8gZGlzY292ZXIgdGhlbSBkdXJpbmcgdGhlIHRyYXZlcnNhbCwgYXMgdGhleSB3b3VsZCBoYXZlIGJlZW4gZGVsZXRlZC5cblxuXG4gICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgcGVuZGluZ1NpbXVsYXRlZFVubW91bnRlZElEcy5sZW5ndGg7IF9qKyspIHtcbiAgICAgICAgb3BlcmF0aW9uc1tpICsgX2pdID0gcGVuZGluZ1NpbXVsYXRlZFVubW91bnRlZElEc1tfal07XG4gICAgICB9XG5cbiAgICAgIGkgKz0gcGVuZGluZ1NpbXVsYXRlZFVubW91bnRlZElEcy5sZW5ndGg7IC8vIFRoZSByb290IElEIHNob3VsZCBhbHdheXMgYmUgdW5tb3VudGVkIGxhc3QuXG5cbiAgICAgIGlmIChwZW5kaW5nVW5tb3VudGVkUm9vdElEICE9PSBudWxsKSB7XG4gICAgICAgIG9wZXJhdGlvbnNbaV0gPSBwZW5kaW5nVW5tb3VudGVkUm9vdElEO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBvcGVyYXRpb25zLlxuXG5cbiAgICBmb3IgKHZhciBfajIgPSAwOyBfajIgPCBwZW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IF9qMisrKSB7XG4gICAgICBvcGVyYXRpb25zW2kgKyBfajJdID0gcGVuZGluZ09wZXJhdGlvbnNbX2oyXTtcbiAgICB9XG5cbiAgICBpICs9IHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgLy8gTGV0IHRoZSBmcm9udGVuZCBrbm93IGFib3V0IHRyZWUgb3BlcmF0aW9ucy5cblxuICAgIGZsdXNoT3JRdWV1ZU9wZXJhdGlvbnMob3BlcmF0aW9ucyk7IC8vIFJlc2V0IGFsbCBvZiB0aGUgcGVuZGluZyBzdGF0ZSBub3cgdGhhdCB3ZSd2ZSB0b2xkIHRoZSBmcm9udGVuZCBhYm91dCBpdC5cblxuICAgIHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aCA9IDA7XG4gICAgcGVuZGluZ1JlYWxVbm1vdW50ZWRJRHMubGVuZ3RoID0gMDtcbiAgICBwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzLmxlbmd0aCA9IDA7XG4gICAgcGVuZGluZ1VubW91bnRlZFJvb3RJRCA9IG51bGw7XG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlLmNsZWFyKCk7XG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoID0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN0cmluZ0lEKHN0cmluZykge1xuICAgIGlmIChzdHJpbmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciBleGlzdGluZ0VudHJ5ID0gcGVuZGluZ1N0cmluZ1RhYmxlLmdldChzdHJpbmcpO1xuXG4gICAgaWYgKGV4aXN0aW5nRW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nRW50cnkuaWQ7XG4gICAgfVxuXG4gICAgdmFyIGlkID0gcGVuZGluZ1N0cmluZ1RhYmxlLnNpemUgKyAxO1xuICAgIHZhciBlbmNvZGVkU3RyaW5nID0gdXRmRW5jb2RlU3RyaW5nKHN0cmluZyk7XG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlLnNldChzdHJpbmcsIHtcbiAgICAgIGVuY29kZWRTdHJpbmc6IGVuY29kZWRTdHJpbmcsXG4gICAgICBpZDogaWRcbiAgICB9KTsgLy8gVGhlIHN0cmluZyB0YWJsZSB0b3RhbCBsZW5ndGggbmVlZHMgdG8gYWNjb3VudCBib3RoIGZvciB0aGUgc3RyaW5nIGxlbmd0aCxcbiAgICAvLyBhbmQgZm9yIHRoZSBhcnJheSBpdGVtIHRoYXQgY29udGFpbnMgdGhlIGxlbmd0aCBpdHNlbGYuXG4gICAgLy9cbiAgICAvLyBEb24ndCB1c2Ugc3RyaW5nIGxlbmd0aCBmb3IgdGhpcyB0YWJsZS5cbiAgICAvLyBJdCB3b24ndCB3b3JrIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVycyAobGlrZSBlbW9qaSkuXG5cbiAgICBwZW5kaW5nU3RyaW5nVGFibGVMZW5ndGggKz0gZW5jb2RlZFN0cmluZy5sZW5ndGggKyAxO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29yZE1vdW50KGZpYmVyLCBwYXJlbnRGaWJlcikge1xuICAgIHZhciBpc1Jvb3QgPSBmaWJlci50YWcgPT09IEhvc3RSb290O1xuICAgIHZhciBpZCA9IGdldE9yR2VuZXJhdGVGaWJlcklEKGZpYmVyKTtcblxuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGRlYnVnKCdyZWNvcmRNb3VudCgpJywgZmliZXIsIHBhcmVudEZpYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgaGFzT3duZXJNZXRhZGF0YSA9IGZpYmVyLmhhc093blByb3BlcnR5KCdfZGVidWdPd25lcicpO1xuICAgIHZhciBpc1Byb2ZpbGluZ1N1cHBvcnRlZCA9IGZpYmVyLmhhc093blByb3BlcnR5KCd0cmVlQmFzZUR1cmF0aW9uJyk7IC8vIEFkZGluZyBhIG5ldyBmaWVsZCBoZXJlIHdvdWxkIHJlcXVpcmUgYSBicmlkZ2UgcHJvdG9jb2wgdmVyc2lvbiBidW1wIChhIGJhY2t3YWRzIGJyZWFraW5nIGNoYW5nZSkuXG4gICAgLy8gSW5zdGVhZCBsZXQncyByZS1wdXJwb3NlIGEgcHJlLWV4aXN0aW5nIGZpZWxkIHRvIGNhcnJ5IG1vcmUgaW5mb3JtYXRpb24uXG5cbiAgICB2YXIgcHJvZmlsaW5nRmxhZ3MgPSAwO1xuXG4gICAgaWYgKGlzUHJvZmlsaW5nU3VwcG9ydGVkKSB7XG4gICAgICBwcm9maWxpbmdGbGFncyA9IFBST0ZJTElOR19GTEFHX0JBU0lDX1NVUFBPUlQ7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5qZWN0UHJvZmlsaW5nSG9va3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvZmlsaW5nRmxhZ3MgfD0gUFJPRklMSU5HX0ZMQUdfVElNRUxJTkVfU1VQUE9SVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNSb290KSB7XG4gICAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX0FERCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKGlkKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oRWxlbWVudFR5cGVSb290KTtcbiAgICAgIHB1c2hPcGVyYXRpb24oKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlQml0cykgIT09IDAgPyAxIDogMCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKHByb2ZpbGluZ0ZsYWdzKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oU3RyaWN0TW9kZUJpdHMgIT09IDAgPyAxIDogMCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKGhhc093bmVyTWV0YWRhdGEgPyAxIDogMCk7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZykge1xuICAgICAgICBpZiAoZGlzcGxheU5hbWVzQnlSb290SUQgIT09IG51bGwpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZXNCeVJvb3RJRC5zZXQoaWQsIGdldERpc3BsYXlOYW1lRm9yUm9vdChmaWJlcikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXkgPSBmaWJlci5rZXk7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKTtcbiAgICAgIHZhciBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpO1xuICAgICAgdmFyIF9kZWJ1Z093bmVyID0gZmliZXIuX2RlYnVnT3duZXI7IC8vIElkZWFsbHkgd2Ugc2hvdWxkIGNhbGwgZ2V0RmliZXJJRFRocm93cygpIGZvciBfZGVidWdPd25lcixcbiAgICAgIC8vIHNpbmNlIG93bmVycyBhcmUgYWxtb3N0IGFsd2F5cyBoaWdoZXIgaW4gdGhlIHRyZWUgKGFuZCBzbyBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQpLFxuICAgICAgLy8gYnV0IGluIHNvbWUgKHJhcmUpIGluc3RhbmNlcyByZXBvcnRlZCBpbiBvcGVuIHNvdXJjZSwgYSBkZXNjZW5kYW50IG1vdW50cyBiZWZvcmUgYW4gb3duZXIuXG4gICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgREVWIG9ubHkgZmllbGQgaXQncyBwcm9iYWJseSBva2F5IHRvIGFsc28ganVzdCBsYXppbHkgZ2VuZXJhdGUgYW5kIElEIGhlcmUgaWYgbmVlZGVkLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjE0NDVcblxuICAgICAgdmFyIG93bmVySUQgPSBfZGVidWdPd25lciAhPSBudWxsID8gZ2V0T3JHZW5lcmF0ZUZpYmVySUQoX2RlYnVnT3duZXIpIDogMDtcbiAgICAgIHZhciBwYXJlbnRJRCA9IHBhcmVudEZpYmVyID8gZ2V0RmliZXJJRFRocm93cyhwYXJlbnRGaWJlcikgOiAwO1xuICAgICAgdmFyIGRpc3BsYXlOYW1lU3RyaW5nSUQgPSBnZXRTdHJpbmdJRChkaXNwbGF5TmFtZSk7IC8vIFRoaXMgY2hlY2sgaXMgYSBndWFyZCB0byBoYW5kbGUgYSBSZWFjdCBlbGVtZW50IHRoYXQgaGFzIGJlZW4gbW9kaWZpZWRcbiAgICAgIC8vIGluIHN1Y2ggYSB3YXkgYXMgdG8gYnlwYXNzIHRoZSBkZWZhdWx0IHN0cmluZ2lmaWNhdGlvbiBvZiB0aGUgXCJrZXlcIiBwcm9wZXJ0eS5cblxuICAgICAgdmFyIGtleVN0cmluZyA9IGtleSA9PT0gbnVsbCA/IG51bGwgOiBTdHJpbmcoa2V5KTtcbiAgICAgIHZhciBrZXlTdHJpbmdJRCA9IGdldFN0cmluZ0lEKGtleVN0cmluZyk7XG4gICAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX0FERCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKGlkKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oZWxlbWVudFR5cGUpO1xuICAgICAgcHVzaE9wZXJhdGlvbihwYXJlbnRJRCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKG93bmVySUQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihkaXNwbGF5TmFtZVN0cmluZ0lEKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oa2V5U3RyaW5nSUQpOyAvLyBJZiB0aGlzIHN1YnRyZWUgaGFzIGEgbmV3IG1vZGUsIGxldCB0aGUgZnJvbnRlbmQga25vdy5cblxuICAgICAgaWYgKChmaWJlci5tb2RlICYgU3RyaWN0TW9kZUJpdHMpICE9PSAwICYmIChwYXJlbnRGaWJlci5tb2RlICYgU3RyaWN0TW9kZUJpdHMpID09PSAwKSB7XG4gICAgICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fU0VUX1NVQlRSRUVfTU9ERSk7XG4gICAgICAgIHB1c2hPcGVyYXRpb24oaWQpO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKFN0cmljdE1vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Byb2ZpbGluZ1N1cHBvcnRlZCkge1xuICAgICAgaWRUb1Jvb3RNYXAuc2V0KGlkLCBjdXJyZW50Um9vdElEKTtcbiAgICAgIHJlY29yZFByb2ZpbGluZ0R1cmF0aW9ucyhmaWJlcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkVW5tb3VudChmaWJlciwgaXNTaW11bGF0ZWQpIHtcbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBkZWJ1ZygncmVjb3JkVW5tb3VudCgpJywgZmliZXIsIG51bGwsIGlzU2ltdWxhdGVkID8gJ3VubW91bnQgaXMgc2ltdWxhdGVkJyA6ICcnKTtcbiAgICB9XG5cbiAgICBpZiAodHJhY2tlZFBhdGhNYXRjaEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBpbiB0aGUgcHJvY2VzcyBvZiB0cnlpbmcgdG8gcmVzdG9yZSBwcmV2aW91cyBzZWxlY3Rpb24uXG4gICAgICAvLyBJZiB0aGlzIGZpYmVyIG1hdGNoZWQgYnV0IGlzIGJlaW5nIHVubW91bnRlZCwgdGhlcmUncyBubyB1c2UgdHJ5aW5nLlxuICAgICAgLy8gUmVzZXQgdGhlIHN0YXRlIHNvIHdlIGRvbid0IGtlZXAgaG9sZGluZyBvbnRvIGl0LlxuICAgICAgaWYgKGZpYmVyID09PSB0cmFja2VkUGF0aE1hdGNoRmliZXIgfHwgZmliZXIgPT09IHRyYWNrZWRQYXRoTWF0Y2hGaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgICAgc2V0VHJhY2tlZFBhdGgobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVuc2FmZUlEID0gZ2V0RmliZXJJRFVuc2FmZShmaWJlcik7XG5cbiAgICBpZiAodW5zYWZlSUQgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlJ3ZlIG5ldmVyIHNlZW4gdGhpcyBGaWJlciwgaXQgbWlnaHQgYmUgaW5zaWRlIG9mIGEgbGVnYWN5IHJlbmRlciBTdXNwZW5zZSBmcmFnbWVudCAoc28gdGhlIHN0b3JlIGlzIG5vdCBldmVuIGF3YXJlIG9mIGl0KS5cbiAgICAgIC8vIEluIHRoYXQgY2FzZSB3ZSBjYW4ganVzdCBpZ25vcmUgaXQgb3IgaXQgd2lsbCBjYXVzZSBlcnJvcnMgbGF0ZXIgb24uXG4gICAgICAvLyBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIGEgTGF6eSBjb21wb25lbnQgdGhhdCBuZXZlciByZXNvbHZlcyBiZWZvcmUgYmVpbmcgdW5tb3VudGVkLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgYWxzbyBtaWdodCBpbmRpY2F0ZSBhIEZhc3QgUmVmcmVzaCBmb3JjZS1yZW1vdW50IHNjZW5hcmlvLlxuICAgICAgLy9cbiAgICAgIC8vIFRPRE86IFRoaXMgaXMgZnJhZ2lsZSBhbmQgY2FuIG9ic2N1cmUgYWN0dWFsIGJ1Z3MuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IHJlZmluZW1lbnQuXG5cblxuICAgIHZhciBpZCA9IHVuc2FmZUlEO1xuICAgIHZhciBpc1Jvb3QgPSBmaWJlci50YWcgPT09IEhvc3RSb290O1xuXG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgLy8gUm9vdHMgbXVzdCBiZSByZW1vdmVkIG9ubHkgYWZ0ZXIgYWxsIGNoaWxkcmVuIChwZW5kaW5nIGFuZCBzaW11bGF0ZWQpIGhhdmUgYmVlbiByZW1vdmVkLlxuICAgICAgLy8gU28gd2UgdHJhY2sgaXQgc2VwYXJhdGVseS5cbiAgICAgIHBlbmRpbmdVbm1vdW50ZWRSb290SUQgPSBpZDtcbiAgICB9IGVsc2UgaWYgKCFzaG91bGRGaWx0ZXJGaWJlcihmaWJlcikpIHtcbiAgICAgIC8vIFRvIG1haW50YWluIGNoaWxkLWZpcnN0IG9yZGVyaW5nLFxuICAgICAgLy8gd2UnbGwgcHVzaCBpdCBpbnRvIG9uZSBvZiB0aGVzZSBxdWV1ZXMsXG4gICAgICAvLyBhbmQgbGF0ZXIgYXJyYW5nZSB0aGVtIGluIHRoZSBjb3JyZWN0IG9yZGVyLlxuICAgICAgaWYgKGlzU2ltdWxhdGVkKSB7XG4gICAgICAgIHBlbmRpbmdTaW11bGF0ZWRVbm1vdW50ZWRJRHMucHVzaChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZW5kaW5nUmVhbFVubW91bnRlZElEcy5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZpYmVyLl9kZWJ1Z05lZWRzUmVtb3VudCkge1xuICAgICAgdW50cmFja0ZpYmVySUQoZmliZXIpO1xuICAgICAgdmFyIGlzUHJvZmlsaW5nU3VwcG9ydGVkID0gZmliZXIuaGFzT3duUHJvcGVydHkoJ3RyZWVCYXNlRHVyYXRpb24nKTtcblxuICAgICAgaWYgKGlzUHJvZmlsaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgIGlkVG9Sb290TWFwLmRlbGV0ZShpZCk7XG4gICAgICAgIGlkVG9UcmVlQmFzZUR1cmF0aW9uTWFwLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbW91bnRGaWJlclJlY3Vyc2l2ZWx5KGZpcnN0Q2hpbGQsIHBhcmVudEZpYmVyLCB0cmF2ZXJzZVNpYmxpbmdzLCB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIHNpYmxpbmdzIHJhdGhlciB0aGFuIHJlY3Vyc2luZy5cbiAgICAvLyBUaGlzIHJlZHVjZXMgdGhlIGNoYW5jZSBvZiBzdGFjayBvdmVyZmxvdyBmb3Igd2lkZSB0cmVlcyAoZS5nLiBsaXN0cyB3aXRoIG1hbnkgaXRlbXMpLlxuICAgIHZhciBmaWJlciA9IGZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGFuIElEIGV2ZW4gZm9yIGZpbHRlcmVkIEZpYmVycywgaW4gY2FzZSBpdCdzIG5lZWRlZCBsYXRlciAoZS5nLiBmb3IgUHJvZmlsaW5nKS5cbiAgICAgIGdldE9yR2VuZXJhdGVGaWJlcklEKGZpYmVyKTtcblxuICAgICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgICBkZWJ1ZygnbW91bnRGaWJlclJlY3Vyc2l2ZWx5KCknLCBmaWJlciwgcGFyZW50RmliZXIpO1xuICAgICAgfSAvLyBJZiB3ZSBoYXZlIHRoZSB0cmVlIHNlbGVjdGlvbiBmcm9tIHByZXZpb3VzIHJlbG9hZCwgdHJ5IHRvIG1hdGNoIHRoaXMgRmliZXIuXG4gICAgICAvLyBBbHNvIHJlbWVtYmVyIHdoZXRoZXIgdG8gZG8gdGhlIHNhbWUgZm9yIHNpYmxpbmdzLlxuXG5cbiAgICAgIHZhciBtaWdodFNpYmxpbmdzQmVPblRyYWNrZWRQYXRoID0gdXBkYXRlVHJhY2tlZFBhdGhTdGF0ZUJlZm9yZU1vdW50KGZpYmVyKTtcbiAgICAgIHZhciBzaG91bGRJbmNsdWRlSW5UcmVlID0gIXNob3VsZEZpbHRlckZpYmVyKGZpYmVyKTtcblxuICAgICAgaWYgKHNob3VsZEluY2x1ZGVJblRyZWUpIHtcbiAgICAgICAgcmVjb3JkTW91bnQoZmliZXIsIHBhcmVudEZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYWNlVXBkYXRlc0VuYWJsZWQpIHtcbiAgICAgICAgaWYgKHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSBnZXRFbGVtZW50VHlwZUZvckZpYmVyKGZpYmVyKTsgLy8gSWYgYW4gYW5jZXN0b3IgdXBkYXRlZCwgd2Ugc2hvdWxkIG1hcmsgdGhlIG5lYXJlc3QgaG9zdCBub2RlcyBmb3IgaGlnaGxpZ2h0aW5nLlxuXG4gICAgICAgICAgaWYgKGVsZW1lbnRUeXBlID09PSBFbGVtZW50VHlwZUhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRyYWNlVXBkYXRlc0Zvck5vZGVzLmFkZChmaWJlci5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCByZS1lbmFibGUgdGhlIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUgZmxhZyBpbiB0aGlzIGJyYW5jaCxcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGhpZ2hsaWdodCBldmVyeSBob3N0IG5vZGUgaW5zaWRlIG9mIGEgbmV3bHkgbW91bnRlZCBzdWJ0cmVlLlxuXG4gICAgICB9XG5cbiAgICAgIHZhciBpc1N1c3BlbnNlID0gZmliZXIudGFnID09PSBSZWFjdFR5cGVPZldvcmsuU3VzcGVuc2VDb21wb25lbnQ7XG5cbiAgICAgIGlmIChpc1N1c3BlbnNlKSB7XG4gICAgICAgIHZhciBpc1RpbWVkT3V0ID0gZmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICBpZiAoaXNUaW1lZE91dCkge1xuICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZTogaWYgU3VzcGVuc2UgbW91bnRzIGluIGEgdGltZWQtb3V0IHN0YXRlLFxuICAgICAgICAgIC8vIGdldCB0aGUgZmFsbGJhY2sgY2hpbGQgZnJvbSB0aGUgaW5uZXIgZnJhZ21lbnQgYW5kIG1vdW50XG4gICAgICAgICAgLy8gaXQgYXMgaWYgaXQgd2FzIG91ciBvd24gY2hpbGQuIFVwZGF0ZXMgaGFuZGxlIHRoaXMgdG9vLlxuICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGZpYmVyLmNoaWxkO1xuICAgICAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudCA/IHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgOiBudWxsO1xuICAgICAgICAgIHZhciBmYWxsYmFja0NoaWxkID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50ID8gZmFsbGJhY2tDaGlsZEZyYWdtZW50LmNoaWxkIDogbnVsbDtcblxuICAgICAgICAgIGlmIChmYWxsYmFja0NoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBtb3VudEZpYmVyUmVjdXJzaXZlbHkoZmFsbGJhY2tDaGlsZCwgc2hvdWxkSW5jbHVkZUluVHJlZSA/IGZpYmVyIDogcGFyZW50RmliZXIsIHRydWUsIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkID0gbnVsbDtcbiAgICAgICAgICB2YXIgYXJlU3VzcGVuc2VDaGlsZHJlbkNvbmRpdGlvbmFsbHlXcmFwcGVkID0gT2Zmc2NyZWVuQ29tcG9uZW50ID09PSAtMTtcblxuICAgICAgICAgIGlmIChhcmVTdXNwZW5zZUNoaWxkcmVuQ29uZGl0aW9uYWxseVdyYXBwZWQpIHtcbiAgICAgICAgICAgIHByaW1hcnlDaGlsZCA9IGZpYmVyLmNoaWxkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmliZXIuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByaW1hcnlDaGlsZCA9IGZpYmVyLmNoaWxkLmNoaWxkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShwcmltYXJ5Q2hpbGQsIHNob3VsZEluY2x1ZGVJblRyZWUgPyBmaWJlciA6IHBhcmVudEZpYmVyLCB0cnVlLCB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaWJlci5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShmaWJlci5jaGlsZCwgc2hvdWxkSW5jbHVkZUluVHJlZSA/IGZpYmVyIDogcGFyZW50RmliZXIsIHRydWUsIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFdlJ3JlIGV4aXRpbmcgdGhpcyBGaWJlciBub3csIGFuZCBlbnRlcmluZyBpdHMgc2libGluZ3MuXG4gICAgICAvLyBJZiB3ZSBoYXZlIHNlbGVjdGlvbiB0byByZXN0b3JlLCB3ZSBtaWdodCBuZWVkIHRvIHJlLWFjdGl2YXRlIHRyYWNraW5nLlxuXG5cbiAgICAgIHVwZGF0ZVRyYWNrZWRQYXRoU3RhdGVBZnRlck1vdW50KG1pZ2h0U2libGluZ3NCZU9uVHJhY2tlZFBhdGgpO1xuICAgICAgZmliZXIgPSB0cmF2ZXJzZVNpYmxpbmdzID8gZmliZXIuc2libGluZyA6IG51bGw7XG4gICAgfVxuICB9IC8vIFdlIHVzZSB0aGlzIHRvIHNpbXVsYXRlIHVubW91bnRpbmcgZm9yIFN1c3BlbnNlIHRyZWVzXG4gIC8vIHdoZW4gd2Ugc3dpdGNoIGZyb20gcHJpbWFyeSB0byBmYWxsYmFjay5cblxuXG4gIGZ1bmN0aW9uIHVubW91bnRGaWJlckNoaWxkcmVuUmVjdXJzaXZlbHkoZmliZXIpIHtcbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBkZWJ1ZygndW5tb3VudEZpYmVyQ2hpbGRyZW5SZWN1cnNpdmVseSgpJywgZmliZXIpO1xuICAgIH0gLy8gV2UgbWlnaHQgbWVldCBhIG5lc3RlZCBTdXNwZW5zZSBvbiBvdXIgd2F5LlxuXG5cbiAgICB2YXIgaXNUaW1lZE91dFN1c3BlbnNlID0gZmliZXIudGFnID09PSBSZWFjdFR5cGVPZldvcmsuU3VzcGVuc2VDb21wb25lbnQgJiYgZmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICAgIGlmIChpc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgIC8vIElmIGl0J3Mgc2hvd2luZyBmYWxsYmFjayB0cmVlLCBsZXQncyB0cmF2ZXJzZSBpdCBpbnN0ZWFkLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQgPyBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nIDogbnVsbDsgLy8gU2tpcCBvdmVyIHRvIHRoZSByZWFsIEZpYmVyIGNoaWxkLlxuXG4gICAgICBjaGlsZCA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA/IGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5jaGlsZCA6IG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBSZWNvcmQgc2ltdWxhdGVkIHVubW91bnRzIGNoaWxkcmVuLWZpcnN0LlxuICAgICAgLy8gV2Ugc2tpcCBub2RlcyB3aXRob3V0IHJldHVybiBiZWNhdXNlIHRob3NlIGFyZSByZWFsIHVubW91bnRzLlxuICAgICAgaWYgKGNoaWxkLnJldHVybiAhPT0gbnVsbCkge1xuICAgICAgICB1bm1vdW50RmliZXJDaGlsZHJlblJlY3Vyc2l2ZWx5KGNoaWxkKTtcbiAgICAgICAgcmVjb3JkVW5tb3VudChjaGlsZCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRQcm9maWxpbmdEdXJhdGlvbnMoZmliZXIpIHtcbiAgICB2YXIgaWQgPSBnZXRGaWJlcklEVGhyb3dzKGZpYmVyKTtcbiAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBmaWJlci5hY3R1YWxEdXJhdGlvbixcbiAgICAgICAgdHJlZUJhc2VEdXJhdGlvbiA9IGZpYmVyLnRyZWVCYXNlRHVyYXRpb247XG4gICAgaWRUb1RyZWVCYXNlRHVyYXRpb25NYXAuc2V0KGlkLCB0cmVlQmFzZUR1cmF0aW9uIHx8IDApO1xuXG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlOyAvLyBJdCdzIGltcG9ydGFudCB0byB1cGRhdGUgdHJlZUJhc2VEdXJhdGlvbiBldmVuIGlmIHRoZSBjdXJyZW50IEZpYmVyIGRpZCBub3QgcmVuZGVyLFxuICAgICAgLy8gYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRoYXQgb25lIG9mIGl0cyBkZXNjZW5kYW50cyBkaWQuXG5cbiAgICAgIGlmIChhbHRlcm5hdGUgPT0gbnVsbCB8fCB0cmVlQmFzZUR1cmF0aW9uICE9PSBhbHRlcm5hdGUudHJlZUJhc2VEdXJhdGlvbikge1xuICAgICAgICAvLyBUcmVlIGJhc2UgZHVyYXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIG9wZXJhdGlvbnMgdHlwZWQgYXJyYXkuXG4gICAgICAgIC8vIFNvIHdlIGhhdmUgdG8gY29udmVydCB0aGVtIGZyb20gbWlsbGlzZWNvbmRzIHRvIG1pY3Jvc2Vjb25kcyBzbyB3ZSBjYW4gc2VuZCB0aGVtIGFzIGludHMuXG4gICAgICAgIHZhciBjb252ZXJ0ZWRUcmVlQmFzZUR1cmF0aW9uID0gTWF0aC5mbG9vcigodHJlZUJhc2VEdXJhdGlvbiB8fCAwKSAqIDEwMDApO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKFRSRUVfT1BFUkFUSU9OX1VQREFURV9UUkVFX0JBU0VfRFVSQVRJT04pO1xuICAgICAgICBwdXNoT3BlcmF0aW9uKGlkKTtcbiAgICAgICAgcHVzaE9wZXJhdGlvbihjb252ZXJ0ZWRUcmVlQmFzZUR1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsdGVybmF0ZSA9PSBudWxsIHx8IGRpZEZpYmVyUmVuZGVyKGFsdGVybmF0ZSwgZmliZXIpKSB7XG4gICAgICAgIGlmIChhY3R1YWxEdXJhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGFjdHVhbCBkdXJhdGlvbiByZXBvcnRlZCBieSBSZWFjdCBpbmNsdWRlcyB0aW1lIHNwZW50IHdvcmtpbmcgb24gY2hpbGRyZW4uXG4gICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwgaW5mb3JtYXRpb24sIGJ1dCBpdCdzIGFsc28gdXNlZnVsIHRvIGJlIGFibGUgdG8gZXhjbHVkZSBjaGlsZCBkdXJhdGlvbnMuXG4gICAgICAgICAgLy8gVGhlIGZyb250ZW5kIGNhbid0IGNvbXB1dGUgdGhpcywgc2luY2UgdGhlIGltbWVkaWF0ZSBjaGlsZHJlbiBtYXkgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dC5cbiAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRvIHRoaXMgb24gdGhlIGJhY2tlbmQuXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2FsY3VsYXRlZCBzZWxmIGR1cmF0aW9uIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgICAgICAvLyBUaGUgdHdvIGFyZSBjYWxjdWxhdGVkIGRpZmZlcmVudGx5ICh0cmVlIGR1cmF0aW9uIGRvZXMgbm90IGFjY3VtdWxhdGUpLlxuICAgICAgICAgIHZhciBzZWxmRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICAgICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2VsZkR1cmF0aW9uIC09IGNoaWxkLmFjdHVhbER1cmF0aW9uIHx8IDA7XG4gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgfSAvLyBJZiBwcm9maWxpbmcgaXMgYWN0aXZlLCBzdG9yZSBkdXJhdGlvbnMgZm9yIGVsZW1lbnRzIHRoYXQgd2VyZSByZW5kZXJlZCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugc2hvdWxkIGRvIHRoaXMgZm9yIGFueSBmaWJlciB3ZSBwZXJmb3JtZWQgd29yayBvbiwgcmVnYXJkbGVzcyBvZiBpdHMgYWN0dWFsRHVyYXRpb24gdmFsdWUuXG4gICAgICAgICAgLy8gSW4gc29tZSBjYXNlcyBhY3R1YWxEdXJhdGlvbiBtaWdodCBiZSAwIGZvciBmaWJlcnMgd2Ugd29ya2VkIG9uIChwYXJ0aWN1bGFybHkgaWYgd2UncmUgdXNpbmcgRGF0ZS5ub3cpXG4gICAgICAgICAgLy8gSW4gb3RoZXIgY2FzZXMgKGUuZy4gTWVtbykgYWN0dWFsRHVyYXRpb24gbWlnaHQgYmUgZ3JlYXRlciB0aGFuIDAgZXZlbiBpZiB3ZSBcImJhaWxlZCBvdXRcIi5cblxuXG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhO1xuICAgICAgICAgIG1ldGFkYXRhLmR1cmF0aW9ucy5wdXNoKGlkLCBhY3R1YWxEdXJhdGlvbiwgc2VsZkR1cmF0aW9uKTtcbiAgICAgICAgICBtZXRhZGF0YS5tYXhBY3R1YWxEdXJhdGlvbiA9IE1hdGgubWF4KG1ldGFkYXRhLm1heEFjdHVhbER1cmF0aW9uLCBhY3R1YWxEdXJhdGlvbik7XG5cbiAgICAgICAgICBpZiAocmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlRGVzY3JpcHRpb24gPSBnZXRDaGFuZ2VEZXNjcmlwdGlvbihhbHRlcm5hdGUsIGZpYmVyKTtcblxuICAgICAgICAgICAgaWYgKGNoYW5nZURlc2NyaXB0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChtZXRhZGF0YS5jaGFuZ2VEZXNjcmlwdGlvbnMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5jaGFuZ2VEZXNjcmlwdGlvbnMuc2V0KGlkLCBjaGFuZ2VEZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlQ29udGV4dHNGb3JGaWJlcihmaWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkUmVzZXRDaGlsZHJlbihmaWJlciwgY2hpbGRTZXQpIHtcbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBkZWJ1ZygncmVjb3JkUmVzZXRDaGlsZHJlbigpJywgY2hpbGRTZXQsIGZpYmVyKTtcbiAgICB9IC8vIFRoZSBmcm9udGVuZCBvbmx5IHJlYWxseSBjYXJlcyBhYm91dCB0aGUgZGlzcGxheU5hbWUsIGtleSwgYW5kIGNoaWxkcmVuLlxuICAgIC8vIFRoZSBmaXJzdCB0d28gZG9uJ3QgcmVhbGx5IGNoYW5nZSwgc28gd2UgYXJlIG9ubHkgY29uY2VybmVkIHdpdGggdGhlIG9yZGVyIG9mIGNoaWxkcmVuIGhlcmUuXG4gICAgLy8gVGhpcyBpcyB0cmlja2llciB0aGFuIGEgc2ltcGxlIGNvbXBhcmlzb24gdGhvdWdoLCBzaW5jZSBjZXJ0YWluIHR5cGVzIG9mIGZpYmVycyBhcmUgZmlsdGVyZWQuXG5cblxuICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBbXTsgLy8gVGhpcyBpcyBhIG5haXZlIGltcGxlbWVudGF0aW9uIHRoYXQgc2hhbGxvd2x5IHJlY291cnNlcyBjaGlsZHJlbi5cbiAgICAvLyBXZSBtaWdodCB3YW50IHRvIHJldmlzaXQgdGhpcyBpZiBpdCBwcm92ZXMgdG8gYmUgdG9vIGluZWZmaWNpZW50LlxuXG4gICAgdmFyIGNoaWxkID0gY2hpbGRTZXQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGZpbmRSZW9yZGVyZWRDaGlsZHJlblJlY3Vyc2l2ZWx5KGNoaWxkLCBuZXh0Q2hpbGRyZW4pO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBudW1DaGlsZHJlbiA9IG5leHRDaGlsZHJlbi5sZW5ndGg7XG5cbiAgICBpZiAobnVtQ2hpbGRyZW4gPCAyKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlb3JkZXIuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVzaE9wZXJhdGlvbihUUkVFX09QRVJBVElPTl9SRU9SREVSX0NISUxEUkVOKTtcbiAgICBwdXNoT3BlcmF0aW9uKGdldEZpYmVySURUaHJvd3MoZmliZXIpKTtcbiAgICBwdXNoT3BlcmF0aW9uKG51bUNoaWxkcmVuKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwdXNoT3BlcmF0aW9uKG5leHRDaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZFJlb3JkZXJlZENoaWxkcmVuUmVjdXJzaXZlbHkoZmliZXIsIG5leHRDaGlsZHJlbikge1xuICAgIGlmICghc2hvdWxkRmlsdGVyRmliZXIoZmliZXIpKSB7XG4gICAgICBuZXh0Q2hpbGRyZW4ucHVzaChnZXRGaWJlcklEVGhyb3dzKGZpYmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuICAgICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgZmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IGlmIFN1c3BlbnNlIG1vdW50cyBpbiBhIHRpbWVkLW91dCBzdGF0ZSxcbiAgICAgICAgLy8gZ2V0IHRoZSBmYWxsYmFjayBjaGlsZCBmcm9tIHRoZSBpbm5lciBmcmFnbWVudCxcbiAgICAgICAgLy8gYW5kIHNraXAgb3ZlciB0aGUgcHJpbWFyeSBjaGlsZC5cbiAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gZmliZXIuY2hpbGQ7XG4gICAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudCA/IHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgOiBudWxsO1xuICAgICAgICB2YXIgZmFsbGJhY2tDaGlsZCA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA/IGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5jaGlsZCA6IG51bGw7XG5cbiAgICAgICAgaWYgKGZhbGxiYWNrQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBjaGlsZCA9IGZhbGxiYWNrQ2hpbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGZpbmRSZW9yZGVyZWRDaGlsZHJlblJlY3Vyc2l2ZWx5KGNoaWxkLCBuZXh0Q2hpbGRyZW4pO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFJldHVybnMgd2hldGhlciBjbG9zZXN0IHVuZmlsdGVyZWQgZmliZXIgcGFyZW50IG5lZWRzIHRvIHJlc2V0IGl0cyBjaGlsZCBsaXN0LlxuXG5cbiAgZnVuY3Rpb24gdXBkYXRlRmliZXJSZWN1cnNpdmVseShuZXh0RmliZXIsIHByZXZGaWJlciwgcGFyZW50RmliZXIsIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpIHtcbiAgICB2YXIgaWQgPSBnZXRPckdlbmVyYXRlRmliZXJJRChuZXh0RmliZXIpO1xuXG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgZGVidWcoJ3VwZGF0ZUZpYmVyUmVjdXJzaXZlbHkoKScsIG5leHRGaWJlciwgcGFyZW50RmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0cmFjZVVwZGF0ZXNFbmFibGVkKSB7XG4gICAgICB2YXIgZWxlbWVudFR5cGUgPSBnZXRFbGVtZW50VHlwZUZvckZpYmVyKG5leHRGaWJlcik7XG5cbiAgICAgIGlmICh0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKSB7XG4gICAgICAgIC8vIElmIGFuIGFuY2VzdG9yIHVwZGF0ZWQsIHdlIHNob3VsZCBtYXJrIHRoZSBuZWFyZXN0IGhvc3Qgbm9kZXMgZm9yIGhpZ2hsaWdodGluZy5cbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlID09PSBFbGVtZW50VHlwZUhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgICB0cmFjZVVwZGF0ZXNGb3JOb2Rlcy5hZGQobmV4dEZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICAgICAgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IHR5cGVzX0VsZW1lbnRUeXBlRnVuY3Rpb24gfHwgZWxlbWVudFR5cGUgPT09IHR5cGVzX0VsZW1lbnRUeXBlQ2xhc3MgfHwgZWxlbWVudFR5cGUgPT09IEVsZW1lbnRUeXBlQ29udGV4dCB8fCBlbGVtZW50VHlwZSA9PT0gdHlwZXNfRWxlbWVudFR5cGVNZW1vIHx8IGVsZW1lbnRUeXBlID09PSB0eXBlc19FbGVtZW50VHlwZUZvcndhcmRSZWYpIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgaWYgdGhpcyBpcyBhIHRyYWNlZCBhbmNlc3RvciwgZmxhZyBmb3IgdGhlIG5lYXJlc3QgaG9zdCBkZXNjZW5kYW50KHMpLlxuICAgICAgICAgIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUgPSBkaWRGaWJlclJlbmRlcihwcmV2RmliZXIsIG5leHRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCAhPT0gbnVsbCAmJiBtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50LmlkID09PSBpZCAmJiBkaWRGaWJlclJlbmRlcihwcmV2RmliZXIsIG5leHRGaWJlcikpIHtcbiAgICAgIC8vIElmIHRoaXMgRmliZXIgaGFzIHVwZGF0ZWQsIGNsZWFyIGNhY2hlZCBpbnNwZWN0ZWQgZGF0YS5cbiAgICAgIC8vIElmIGl0IGlzIGluc3BlY3RlZCBhZ2FpbiwgaXQgbWF5IG5lZWQgdG8gYmUgcmUtcnVuIHRvIG9idGFpbiB1cGRhdGVkIGhvb2tzIHZhbHVlcy5cbiAgICAgIGhhc0VsZW1lbnRVcGRhdGVkU2luY2VMYXN0SW5zcGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkSW5jbHVkZUluVHJlZSA9ICFzaG91bGRGaWx0ZXJGaWJlcihuZXh0RmliZXIpO1xuICAgIHZhciBpc1N1c3BlbnNlID0gbmV4dEZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQ7XG4gICAgdmFyIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSBmYWxzZTsgLy8gVGhlIGJlaGF2aW9yIG9mIHRpbWVkLW91dCBTdXNwZW5zZSB0cmVlcyBpcyB1bmlxdWUuXG4gICAgLy8gUmF0aGVyIHRoYW4gdW5tb3VudCB0aGUgdGltZWQgb3V0IGNvbnRlbnQgKGFuZCBwb3NzaWJseSBsb3NlIGltcG9ydGFudCBzdGF0ZSksXG4gICAgLy8gUmVhY3QgcmUtcGFyZW50cyB0aGlzIGNvbnRlbnQgd2l0aGluIGEgaGlkZGVuIEZyYWdtZW50IHdoaWxlIHRoZSBmYWxsYmFjayBpcyBzaG93aW5nLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IgZG9lc24ndCBuZWVkIHRvIGJlIG9ic2VydmFibGUgaW4gdGhlIERldlRvb2xzIHRob3VnaC5cbiAgICAvLyBJdCBtaWdodCBldmVuIHJlc3VsdCBpbiBhIGJhZCB1c2VyIGV4cGVyaWVuY2UgZm9yIGUuZy4gbm9kZSBzZWxlY3Rpb24gaW4gdGhlIEVsZW1lbnRzIHBhbmVsLlxuICAgIC8vIFRoZSBlYXNpZXN0IGZpeCBpcyB0byBzdHJpcCBvdXQgdGhlIGludGVybWVkaWF0ZSBGcmFnbWVudCBmaWJlcnMsXG4gICAgLy8gc28gdGhlIEVsZW1lbnRzIHBhbmVsIGFuZCBQcm9maWxlciBkb24ndCBuZWVkIHRvIHNwZWNpYWwgY2FzZSB0aGVtLlxuICAgIC8vIFN1c3BlbnNlIGNvbXBvbmVudHMgb25seSBoYXZlIGEgbm9uLW51bGwgbWVtb2l6ZWRTdGF0ZSBpZiB0aGV5J3JlIHRpbWVkLW91dC5cblxuICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGlzU3VzcGVuc2UgJiYgcHJldkZpYmVyLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgdmFyIG5leHREaWRUaW1lT3V0ID0gaXNTdXNwZW5zZSAmJiBuZXh0RmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDsgLy8gVGhlIGxvZ2ljIGJlbG93IGlzIGluc3BpcmVkIGJ5IHRoZSBjb2RlIHBhdGhzIGluIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KClcbiAgICAvLyBpbnNpZGUgUmVhY3RGaWJlckJlZ2luV29yayBpbiB0aGUgUmVhY3Qgc291cmNlIGNvZGUuXG5cbiAgICBpZiAocHJldkRpZFRpbWVvdXQgJiYgbmV4dERpZFRpbWVPdXQpIHtcbiAgICAgIC8vIEZhbGxiYWNrIC0+IEZhbGxiYWNrOlxuICAgICAgLy8gMS4gUmVjb25jaWxlIGZhbGxiYWNrIHNldC5cbiAgICAgIHZhciBuZXh0RmliZXJDaGlsZCA9IG5leHRGaWJlci5jaGlsZDtcbiAgICAgIHZhciBuZXh0RmFsbGJhY2tDaGlsZFNldCA9IG5leHRGaWJlckNoaWxkID8gbmV4dEZpYmVyQ2hpbGQuc2libGluZyA6IG51bGw7IC8vIE5vdGU6IFdlIGNhbid0IHVzZSBuZXh0RmliZXIuY2hpbGQuc2libGluZy5hbHRlcm5hdGVcbiAgICAgIC8vIGJlY2F1c2UgdGhlIHNldCBpcyBzcGVjaWFsIGFuZCBhbHRlcm5hdGUgbWF5IG5vdCBleGlzdC5cblxuICAgICAgdmFyIHByZXZGaWJlckNoaWxkID0gcHJldkZpYmVyLmNoaWxkO1xuICAgICAgdmFyIHByZXZGYWxsYmFja0NoaWxkU2V0ID0gcHJldkZpYmVyQ2hpbGQgPyBwcmV2RmliZXJDaGlsZC5zaWJsaW5nIDogbnVsbDtcblxuICAgICAgaWYgKHByZXZGYWxsYmFja0NoaWxkU2V0ID09IG51bGwgJiYgbmV4dEZhbGxiYWNrQ2hpbGRTZXQgIT0gbnVsbCkge1xuICAgICAgICBtb3VudEZpYmVyUmVjdXJzaXZlbHkobmV4dEZhbGxiYWNrQ2hpbGRTZXQsIHNob3VsZEluY2x1ZGVJblRyZWUgPyBuZXh0RmliZXIgOiBwYXJlbnRGaWJlciwgdHJ1ZSwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSk7XG4gICAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dEZhbGxiYWNrQ2hpbGRTZXQgIT0gbnVsbCAmJiBwcmV2RmFsbGJhY2tDaGlsZFNldCAhPSBudWxsICYmIHVwZGF0ZUZpYmVyUmVjdXJzaXZlbHkobmV4dEZhbGxiYWNrQ2hpbGRTZXQsIHByZXZGYWxsYmFja0NoaWxkU2V0LCBuZXh0RmliZXIsIHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpKSB7XG4gICAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJldkRpZFRpbWVvdXQgJiYgIW5leHREaWRUaW1lT3V0KSB7XG4gICAgICAvLyBGYWxsYmFjayAtPiBQcmltYXJ5OlxuICAgICAgLy8gMS4gVW5tb3VudCBmYWxsYmFjayBzZXRcbiAgICAgIC8vIE5vdGU6IGRvbid0IGVtdWxhdGUgZmFsbGJhY2sgdW5tb3VudCBiZWNhdXNlIFJlYWN0IGFjdHVhbGx5IGRpZCBpdC5cbiAgICAgIC8vIDIuIE1vdW50IHByaW1hcnkgc2V0XG4gICAgICB2YXIgbmV4dFByaW1hcnlDaGlsZFNldCA9IG5leHRGaWJlci5jaGlsZDtcblxuICAgICAgaWYgKG5leHRQcmltYXJ5Q2hpbGRTZXQgIT09IG51bGwpIHtcbiAgICAgICAgbW91bnRGaWJlclJlY3Vyc2l2ZWx5KG5leHRQcmltYXJ5Q2hpbGRTZXQsIHNob3VsZEluY2x1ZGVJblRyZWUgPyBuZXh0RmliZXIgOiBwYXJlbnRGaWJlciwgdHJ1ZSwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXByZXZEaWRUaW1lb3V0ICYmIG5leHREaWRUaW1lT3V0KSB7XG4gICAgICAvLyBQcmltYXJ5IC0+IEZhbGxiYWNrOlxuICAgICAgLy8gMS4gSGlkZSBwcmltYXJ5IHNldFxuICAgICAgLy8gVGhpcyBpcyBub3QgYSByZWFsIHVubW91bnQsIHNvIGl0IHdvbid0IGdldCByZXBvcnRlZCBieSBSZWFjdC5cbiAgICAgIC8vIFdlIG5lZWQgdG8gbWFudWFsbHkgd2FsayB0aGUgcHJldmlvdXMgdHJlZSBhbmQgcmVjb3JkIHVubW91bnRzLlxuICAgICAgdW5tb3VudEZpYmVyQ2hpbGRyZW5SZWN1cnNpdmVseShwcmV2RmliZXIpOyAvLyAyLiBNb3VudCBmYWxsYmFjayBzZXRcblxuICAgICAgdmFyIF9uZXh0RmliZXJDaGlsZCA9IG5leHRGaWJlci5jaGlsZDtcblxuICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZFNldCA9IF9uZXh0RmliZXJDaGlsZCA/IF9uZXh0RmliZXJDaGlsZC5zaWJsaW5nIDogbnVsbDtcblxuICAgICAgaWYgKF9uZXh0RmFsbGJhY2tDaGlsZFNldCAhPSBudWxsKSB7XG4gICAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShfbmV4dEZhbGxiYWNrQ2hpbGRTZXQsIHNob3VsZEluY2x1ZGVJblRyZWUgPyBuZXh0RmliZXIgOiBwYXJlbnRGaWJlciwgdHJ1ZSwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSk7XG4gICAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb21tb24gY2FzZTogUHJpbWFyeSAtPiBQcmltYXJ5LlxuICAgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBjb2RlIHBhdGggYXMgZm9yIG5vbi1TdXNwZW5zZSBmaWJlcnMuXG4gICAgICBpZiAobmV4dEZpYmVyLmNoaWxkICE9PSBwcmV2RmliZXIuY2hpbGQpIHtcbiAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNoaWxkIGlzIGRpZmZlcmVudCwgd2UgbmVlZCB0byB0cmF2ZXJzZSB0aGVtLlxuICAgICAgICAvLyBFYWNoIG5leHQgY2hpbGQgd2lsbCBiZSBlaXRoZXIgYSBuZXcgY2hpbGQgKG1vdW50KSBvciBhbiBhbHRlcm5hdGUgKHVwZGF0ZSkuXG4gICAgICAgIHZhciBuZXh0Q2hpbGQgPSBuZXh0RmliZXIuY2hpbGQ7XG4gICAgICAgIHZhciBwcmV2Q2hpbGRBdFNhbWVJbmRleCA9IHByZXZGaWJlci5jaGlsZDtcblxuICAgICAgICB3aGlsZSAobmV4dENoaWxkKSB7XG4gICAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IGNoaWxkcmVuIHdpbGwgYmUgcmVmZXJlbnRpYWxseSBkaWZmZXJlbnQgYmVjYXVzZVxuICAgICAgICAgIC8vIHRoZXkgYXJlIGVpdGhlciBuZXcgbW91bnRzIG9yIGFsdGVybmF0ZXMgb2YgcHJldmlvdXMgY2hpbGRyZW4uXG4gICAgICAgICAgLy8gU2NoZWR1bGUgdXBkYXRlcyBhbmQgbW91bnRzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGFsdGVybmF0ZXMgZXhpc3QuXG4gICAgICAgICAgLy8gV2UgZG9uJ3QgdHJhY2sgZGVsZXRpb25zIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSByZXBvcnRlZCBzZXBhcmF0ZWx5LlxuICAgICAgICAgIGlmIChuZXh0Q2hpbGQuYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgICB2YXIgcHJldkNoaWxkID0gbmV4dENoaWxkLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZUZpYmVyUmVjdXJzaXZlbHkobmV4dENoaWxkLCBwcmV2Q2hpbGQsIHNob3VsZEluY2x1ZGVJblRyZWUgPyBuZXh0RmliZXIgOiBwYXJlbnRGaWJlciwgdHJhY2VOZWFyZXN0SG9zdENvbXBvbmVudFVwZGF0ZSkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYSBuZXN0ZWQgdHJlZSBjaGlsZCBvcmRlciBjaGFuZ2VkIGJ1dCBpdCBjYW4ndCBoYW5kbGUgaXRzIG93blxuICAgICAgICAgICAgICAvLyBjaGlsZCBvcmRlciBpbnZhbGlkYXRpb24gKGUuZy4gYmVjYXVzZSBpdCdzIGZpbHRlcmVkIG91dCBsaWtlIGhvc3Qgbm9kZXMpLFxuICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIG5lZWQgdG8gcmVzZXQgY2hpbGQgb3JkZXIgdXB3YXJkcyB0byB0aGlzIEZpYmVyLlxuICAgICAgICAgICAgICBzaG91bGRSZXNldENoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gLy8gSG93ZXZlciB3ZSBhbHNvIGtlZXAgdHJhY2sgaWYgdGhlIG9yZGVyIG9mIHRoZSBjaGlsZHJlbiBtYXRjaGVzXG4gICAgICAgICAgICAvLyB0aGUgcHJldmlvdXMgb3JkZXIuIFRoZXkgYXJlIGFsd2F5cyBkaWZmZXJlbnQgcmVmZXJlbnRpYWxseSwgYnV0XG4gICAgICAgICAgICAvLyBpZiB0aGUgaW5zdGFuY2VzIGxpbmUgdXAgY29uY2VwdHVhbGx5IHdlJ2xsIHdhbnQgdG8ga25vdyB0aGF0LlxuXG5cbiAgICAgICAgICAgIGlmIChwcmV2Q2hpbGQgIT09IHByZXZDaGlsZEF0U2FtZUluZGV4KSB7XG4gICAgICAgICAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb3VudEZpYmVyUmVjdXJzaXZlbHkobmV4dENoaWxkLCBzaG91bGRJbmNsdWRlSW5UcmVlID8gbmV4dEZpYmVyIDogcGFyZW50RmliZXIsIGZhbHNlLCB0cmFjZU5lYXJlc3RIb3N0Q29tcG9uZW50VXBkYXRlKTtcbiAgICAgICAgICAgIHNob3VsZFJlc2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICAgIH0gLy8gVHJ5IHRoZSBuZXh0IGNoaWxkLlxuXG5cbiAgICAgICAgICBuZXh0Q2hpbGQgPSBuZXh0Q2hpbGQuc2libGluZzsgLy8gQWR2YW5jZSB0aGUgcG9pbnRlciBpbiB0aGUgcHJldmlvdXMgbGlzdCBzbyB0aGF0IHdlIGNhblxuICAgICAgICAgIC8vIGtlZXAgY29tcGFyaW5nIGlmIHRoZXkgbGluZSB1cC5cblxuICAgICAgICAgIGlmICghc2hvdWxkUmVzZXRDaGlsZHJlbiAmJiBwcmV2Q2hpbGRBdFNhbWVJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJldkNoaWxkQXRTYW1lSW5kZXggPSBwcmV2Q2hpbGRBdFNhbWVJbmRleC5zaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJZiB3ZSBoYXZlIG5vIG1vcmUgY2hpbGRyZW4sIGJ1dCB1c2VkIHRvLCB0aGV5IGRvbid0IGxpbmUgdXAuXG5cblxuICAgICAgICBpZiAocHJldkNoaWxkQXRTYW1lSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICBzaG91bGRSZXNldENoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRyYWNlVXBkYXRlc0VuYWJsZWQpIHtcbiAgICAgICAgICAvLyBJZiB3ZSdyZSB0cmFjaW5nIHVwZGF0ZXMgYW5kIHdlJ3ZlIGJhaWxlZCBvdXQgYmVmb3JlIHJlYWNoaW5nIGEgaG9zdCBub2RlLFxuICAgICAgICAgIC8vIHdlIHNob3VsZCBmYWxsIGJhY2sgdG8gcmVjdXJzaXZlbHkgbWFya2luZyB0aGUgbmVhcmVzdCBob3N0IGRlc2NlbmRhbnRzIGZvciBoaWdobGlnaHQuXG4gICAgICAgICAgaWYgKHRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBob3N0RmliZXJzID0gZmluZEFsbEN1cnJlbnRIb3N0RmliZXJzKGdldEZpYmVySURUaHJvd3MobmV4dEZpYmVyKSk7XG4gICAgICAgICAgICBob3N0RmliZXJzLmZvckVhY2goZnVuY3Rpb24gKGhvc3RGaWJlcikge1xuICAgICAgICAgICAgICB0cmFjZVVwZGF0ZXNGb3JOb2Rlcy5hZGQoaG9zdEZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkSW5jbHVkZUluVHJlZSkge1xuICAgICAgdmFyIGlzUHJvZmlsaW5nU3VwcG9ydGVkID0gbmV4dEZpYmVyLmhhc093blByb3BlcnR5KCd0cmVlQmFzZUR1cmF0aW9uJyk7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGluZ1N1cHBvcnRlZCkge1xuICAgICAgICByZWNvcmRQcm9maWxpbmdEdXJhdGlvbnMobmV4dEZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkUmVzZXRDaGlsZHJlbikge1xuICAgICAgLy8gV2UgbmVlZCB0byBjcmF3bCB0aGUgc3VidHJlZSBmb3IgY2xvc2VzdCBub24tZmlsdGVyZWQgRmliZXJzXG4gICAgICAvLyBzbyB0aGF0IHdlIGNhbiBkaXNwbGF5IHRoZW0gaW4gYSBmbGF0IGNoaWxkcmVuIHNldC5cbiAgICAgIGlmIChzaG91bGRJbmNsdWRlSW5UcmVlKSB7XG4gICAgICAgIC8vIE5vcm1hbGx5LCBzZWFyY2ggZm9yIGNoaWxkcmVuIGZyb20gdGhlIHJlbmRlcmVkIGNoaWxkLlxuICAgICAgICB2YXIgbmV4dENoaWxkU2V0ID0gbmV4dEZpYmVyLmNoaWxkO1xuXG4gICAgICAgIGlmIChuZXh0RGlkVGltZU91dCkge1xuICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZTogdGltZWQtb3V0IFN1c3BlbnNlIHJlbmRlcnMgdGhlIGZhbGxiYWNrIHNldC5cbiAgICAgICAgICB2YXIgX25leHRGaWJlckNoaWxkMiA9IG5leHRGaWJlci5jaGlsZDtcbiAgICAgICAgICBuZXh0Q2hpbGRTZXQgPSBfbmV4dEZpYmVyQ2hpbGQyID8gX25leHRGaWJlckNoaWxkMi5zaWJsaW5nIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Q2hpbGRTZXQgIT0gbnVsbCkge1xuICAgICAgICAgIHJlY29yZFJlc2V0Q2hpbGRyZW4obmV4dEZpYmVyLCBuZXh0Q2hpbGRTZXQpO1xuICAgICAgICB9IC8vIFdlJ3ZlIGhhbmRsZWQgdGhlIGNoaWxkIG9yZGVyIGNoYW5nZSBmb3IgdGhpcyBGaWJlci5cbiAgICAgICAgLy8gU2luY2UgaXQncyBpbmNsdWRlZCwgdGhlcmUncyBubyBuZWVkIHRvIGludmFsaWRhdGUgcGFyZW50IGNoaWxkIG9yZGVyLlxuXG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGV0IHRoZSBjbG9zZXN0IHVuZmlsdGVyZWQgcGFyZW50IEZpYmVyIHJlc2V0IGl0cyBjaGlsZCBvcmRlciBpbnN0ZWFkLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7Ly8gV2UgZG9uJ3QgcGF0Y2ggYW55IG1ldGhvZHMgc28gdGhlcmUgaXMgbm8gY2xlYW51cC5cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvb3RTdXBwb3J0c1Byb2ZpbGluZyhyb290KSB7XG4gICAgaWYgKHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMgIT0gbnVsbCkge1xuICAgICAgLy8gdjE2IGJ1aWxkcyBpbmNsdWRlIHRoaXMgZmllbGQgZm9yIHRoZSBzY2hlZHVsZXIvdHJhY2luZyBBUEkuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHJvb3QuY3VycmVudCAhPSBudWxsICYmIHJvb3QuY3VycmVudC5oYXNPd25Qcm9wZXJ0eSgndHJlZUJhc2VEdXJhdGlvbicpKSB7XG4gICAgICAvLyBUaGUgc2NoZWR1bGVyL3RyYWNpbmcgQVBJIHdhcyByZW1vdmVkIGluIHYxNyB0aG91Z2hcbiAgICAgIC8vIHNvIHdlIG5lZWQgdG8gY2hlY2sgYSBub24tcm9vdCBGaWJlci5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2hJbml0aWFsT3BlcmF0aW9ucygpIHtcbiAgICB2YXIgbG9jYWxQZW5kaW5nT3BlcmF0aW9uc1F1ZXVlID0gcGVuZGluZ09wZXJhdGlvbnNRdWV1ZTtcbiAgICBwZW5kaW5nT3BlcmF0aW9uc1F1ZXVlID0gbnVsbDtcblxuICAgIGlmIChsb2NhbFBlbmRpbmdPcGVyYXRpb25zUXVldWUgIT09IG51bGwgJiYgbG9jYWxQZW5kaW5nT3BlcmF0aW9uc1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFdlIG1heSBoYXZlIGFscmVhZHkgcXVldWVkIHVwIHNvbWUgb3BlcmF0aW9ucyBiZWZvcmUgdGhlIGZyb250ZW5kIGNvbm5lY3RlZFxuICAgICAgLy8gSWYgc28sIGxldCB0aGUgZnJvbnRlbmQga25vdyBhYm91dCB0aGVtLlxuICAgICAgbG9jYWxQZW5kaW5nT3BlcmF0aW9uc1F1ZXVlLmZvckVhY2goZnVuY3Rpb24gKG9wZXJhdGlvbnMpIHtcbiAgICAgICAgaG9vay5lbWl0KCdvcGVyYXRpb25zJywgb3BlcmF0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmVmb3JlIHRoZSB0cmF2ZXJzYWxzLCByZW1lbWJlciB0byBzdGFydCB0cmFja2luZ1xuICAgICAgLy8gb3VyIHBhdGggaW4gY2FzZSB3ZSBoYXZlIHNlbGVjdGlvbiB0byByZXN0b3JlLlxuICAgICAgaWYgKHRyYWNrZWRQYXRoICE9PSBudWxsKSB7XG4gICAgICAgIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gdHJ1ZTtcbiAgICAgIH0gLy8gSWYgd2UgaGF2ZSBub3QgYmVlbiBwcm9maWxpbmcsIHRoZW4gd2UgY2FuIGp1c3Qgd2FsayB0aGUgdHJlZSBhbmQgYnVpbGQgdXAgaXRzIGN1cnJlbnQgc3RhdGUgYXMtaXMuXG5cblxuICAgICAgaG9vay5nZXRGaWJlclJvb3RzKHJlbmRlcmVySUQpLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgICAgY3VycmVudFJvb3RJRCA9IGdldE9yR2VuZXJhdGVGaWJlcklEKHJvb3QuY3VycmVudCk7XG4gICAgICAgIHNldFJvb3RQc2V1ZG9LZXkoY3VycmVudFJvb3RJRCwgcm9vdC5jdXJyZW50KTsgLy8gSGFuZGxlIG11bHRpLXJlbmRlcmVyIGVkZ2UtY2FzZSB3aGVyZSBvbmx5IHNvbWUgdjE2IHJlbmRlcmVycyBzdXBwb3J0IHByb2ZpbGluZy5cblxuICAgICAgICBpZiAoaXNQcm9maWxpbmcgJiYgcm9vdFN1cHBvcnRzUHJvZmlsaW5nKHJvb3QpKSB7XG4gICAgICAgICAgLy8gSWYgcHJvZmlsaW5nIGlzIGFjdGl2ZSwgc3RvcmUgY29tbWl0IHRpbWUgYW5kIGR1cmF0aW9uLlxuICAgICAgICAgIC8vIFRoZSBmcm9udGVuZCBtYXkgcmVxdWVzdCB0aGlzIGluZm9ybWF0aW9uIGFmdGVyIHByb2ZpbGluZyBoYXMgc3RvcHBlZC5cbiAgICAgICAgICBjdXJyZW50Q29tbWl0UHJvZmlsaW5nTWV0YWRhdGEgPSB7XG4gICAgICAgICAgICBjaGFuZ2VEZXNjcmlwdGlvbnM6IHJlY29yZENoYW5nZURlc2NyaXB0aW9ucyA/IG5ldyBNYXAoKSA6IG51bGwsXG4gICAgICAgICAgICBkdXJhdGlvbnM6IFtdLFxuICAgICAgICAgICAgY29tbWl0VGltZTogcmVuZGVyZXJfZ2V0Q3VycmVudFRpbWUoKSAtIHByb2ZpbGluZ1N0YXJ0VGltZSxcbiAgICAgICAgICAgIG1heEFjdHVhbER1cmF0aW9uOiAwLFxuICAgICAgICAgICAgcHJpb3JpdHlMZXZlbDogbnVsbCxcbiAgICAgICAgICAgIHVwZGF0ZXJzOiBnZXRVcGRhdGVyc0xpc3Qocm9vdCksXG4gICAgICAgICAgICBlZmZlY3REdXJhdGlvbjogbnVsbCxcbiAgICAgICAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBtb3VudEZpYmVyUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCBudWxsLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICBmbHVzaFBlbmRpbmdFdmVudHMocm9vdCk7XG4gICAgICAgIGN1cnJlbnRSb290SUQgPSAtMTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVwZGF0ZXJzTGlzdChyb290KSB7XG4gICAgcmV0dXJuIHJvb3QubWVtb2l6ZWRVcGRhdGVycyAhPSBudWxsID8gQXJyYXkuZnJvbShyb290Lm1lbW9pemVkVXBkYXRlcnMpLmZpbHRlcihmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHJldHVybiBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKSAhPT0gbnVsbDtcbiAgICB9KS5tYXAoZmliZXJUb1NlcmlhbGl6ZWRFbGVtZW50KSA6IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDb21taXRGaWJlclVubW91bnQoZmliZXIpIHtcbiAgICAvLyBJZiB0aGUgdW50cmFja0ZpYmVyU2V0IGFscmVhZHkgaGFzIHRoZSB1bm1vdW50ZWQgRmliZXIsIHRoaXMgbWVhbnMgd2UndmUgYWxyZWFkeVxuICAgIC8vIHJlY29yZGVkVW5tb3VudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBpdCBhZ2Fpbi4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgd2UgbWlnaHRcbiAgICAvLyBlbmQgdXAgZG91YmxlLWRlbGV0aW5nIEZpYmVycyBpbiBzb21lIGNhc2VzIChsaWtlIExlZ2FjeSBTdXNwZW5zZSkuXG4gICAgaWYgKCF1bnRyYWNrRmliZXJzU2V0LmhhcyhmaWJlcikpIHtcbiAgICAgIC8vIFRoaXMgaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAgIC8vIFdlIGNhbid0IHRyYXZlcnNlIGZpYmVycyBhZnRlciB1bm1vdW50aW5nIHNvIGluc3RlYWRcbiAgICAgIC8vIHdlIHJlbHkgb24gUmVhY3QgdGVsbGluZyB1cyBhYm91dCBlYWNoIHVubW91bnQuXG4gICAgICByZWNvcmRVbm1vdW50KGZpYmVyLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdChyb290KSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nICYmIHJvb3RTdXBwb3J0c1Byb2ZpbGluZyhyb290KSkge1xuICAgICAgaWYgKGN1cnJlbnRDb21taXRQcm9maWxpbmdNZXRhZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2dldEVmZmVjdER1cmF0aW9ucyA9IGdldEVmZmVjdER1cmF0aW9ucyhyb290KSxcbiAgICAgICAgICAgIGVmZmVjdER1cmF0aW9uID0gX2dldEVmZmVjdER1cmF0aW9ucy5lZmZlY3REdXJhdGlvbixcbiAgICAgICAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IF9nZXRFZmZlY3REdXJhdGlvbnMucGFzc2l2ZUVmZmVjdER1cmF0aW9uOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgIGN1cnJlbnRDb21taXRQcm9maWxpbmdNZXRhZGF0YS5lZmZlY3REdXJhdGlvbiA9IGVmZmVjdER1cmF0aW9uOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICBjdXJyZW50Q29tbWl0UHJvZmlsaW5nTWV0YWRhdGEucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gcGFzc2l2ZUVmZmVjdER1cmF0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbW1pdEZpYmVyUm9vdChyb290LCBwcmlvcml0eUxldmVsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQ7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlOyAvLyBGbHVzaCBhbnkgcGVuZGluZyBGaWJlcnMgdGhhdCB3ZSBhcmUgdW50cmFja2luZyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgbmV3IGNvbW1pdC5cbiAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB3ZSBtaWdodCBlbmQgdXAgZG91YmxlLWRlbGV0aW5nIEZpYmVycyBpbiBzb21lIGNhc2VzIChsaWtlIExlZ2FjeSBTdXNwZW5zZSkuXG5cbiAgICB1bnRyYWNrRmliZXJzKCk7XG4gICAgY3VycmVudFJvb3RJRCA9IGdldE9yR2VuZXJhdGVGaWJlcklEKGN1cnJlbnQpOyAvLyBCZWZvcmUgdGhlIHRyYXZlcnNhbHMsIHJlbWVtYmVyIHRvIHN0YXJ0IHRyYWNraW5nXG4gICAgLy8gb3VyIHBhdGggaW4gY2FzZSB3ZSBoYXZlIHNlbGVjdGlvbiB0byByZXN0b3JlLlxuXG4gICAgaWYgKHRyYWNrZWRQYXRoICE9PSBudWxsKSB7XG4gICAgICBtaWdodEJlT25UcmFja2VkUGF0aCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRyYWNlVXBkYXRlc0VuYWJsZWQpIHtcbiAgICAgIHRyYWNlVXBkYXRlc0Zvck5vZGVzLmNsZWFyKCk7XG4gICAgfSAvLyBIYW5kbGUgbXVsdGktcmVuZGVyZXIgZWRnZS1jYXNlIHdoZXJlIG9ubHkgc29tZSB2MTYgcmVuZGVyZXJzIHN1cHBvcnQgcHJvZmlsaW5nLlxuXG5cbiAgICB2YXIgaXNQcm9maWxpbmdTdXBwb3J0ZWQgPSByb290U3VwcG9ydHNQcm9maWxpbmcocm9vdCk7XG5cbiAgICBpZiAoaXNQcm9maWxpbmcgJiYgaXNQcm9maWxpbmdTdXBwb3J0ZWQpIHtcbiAgICAgIC8vIElmIHByb2ZpbGluZyBpcyBhY3RpdmUsIHN0b3JlIGNvbW1pdCB0aW1lIGFuZCBkdXJhdGlvbi5cbiAgICAgIC8vIFRoZSBmcm9udGVuZCBtYXkgcmVxdWVzdCB0aGlzIGluZm9ybWF0aW9uIGFmdGVyIHByb2ZpbGluZyBoYXMgc3RvcHBlZC5cbiAgICAgIGN1cnJlbnRDb21taXRQcm9maWxpbmdNZXRhZGF0YSA9IHtcbiAgICAgICAgY2hhbmdlRGVzY3JpcHRpb25zOiByZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMgPyBuZXcgTWFwKCkgOiBudWxsLFxuICAgICAgICBkdXJhdGlvbnM6IFtdLFxuICAgICAgICBjb21taXRUaW1lOiByZW5kZXJlcl9nZXRDdXJyZW50VGltZSgpIC0gcHJvZmlsaW5nU3RhcnRUaW1lLFxuICAgICAgICBtYXhBY3R1YWxEdXJhdGlvbjogMCxcbiAgICAgICAgcHJpb3JpdHlMZXZlbDogcHJpb3JpdHlMZXZlbCA9PSBudWxsID8gbnVsbCA6IGZvcm1hdFByaW9yaXR5TGV2ZWwocHJpb3JpdHlMZXZlbCksXG4gICAgICAgIHVwZGF0ZXJzOiBnZXRVcGRhdGVyc0xpc3Qocm9vdCksXG4gICAgICAgIC8vIEluaXRpYWxpemUgdG8gbnVsbDsgaWYgbmV3IGVub3VnaCBSZWFjdCB2ZXJzaW9uIGlzIHJ1bm5pbmcsXG4gICAgICAgIC8vIHRoZXNlIHZhbHVlcyB3aWxsIGJlIHJlYWQgZHVyaW5nIHNlcGFyYXRlIGhhbmRsZVBvc3RDb21taXRGaWJlclJvb3QoKSBjYWxsLlxuICAgICAgICBlZmZlY3REdXJhdGlvbjogbnVsbCxcbiAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChhbHRlcm5hdGUpIHtcbiAgICAgIC8vIFRPRE86IHJlbHlpbmcgb24gdGhpcyBzZWVtcyBhIGJpdCBmaXNoeS5cbiAgICAgIHZhciB3YXNNb3VudGVkID0gYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgIT0gbnVsbCAmJiBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5lbGVtZW50ICE9IG51bGwgJiYgLy8gQSBkZWh5ZHJhdGVkIHJvb3QgaXMgbm90IGNvbnNpZGVyZWQgbW91bnRlZFxuICAgICAgYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkICE9PSB0cnVlO1xuICAgICAgdmFyIGlzTW91bnRlZCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5lbGVtZW50ICE9IG51bGwgJiYgLy8gQSBkZWh5ZHJhdGVkIHJvb3QgaXMgbm90IGNvbnNpZGVyZWQgbW91bnRlZFxuICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCAhPT0gdHJ1ZTtcblxuICAgICAgaWYgKCF3YXNNb3VudGVkICYmIGlzTW91bnRlZCkge1xuICAgICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgICBzZXRSb290UHNldWRvS2V5KGN1cnJlbnRSb290SUQsIGN1cnJlbnQpO1xuICAgICAgICBtb3VudEZpYmVyUmVjdXJzaXZlbHkoY3VycmVudCwgbnVsbCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAod2FzTW91bnRlZCAmJiBpc01vdW50ZWQpIHtcbiAgICAgICAgLy8gVXBkYXRlIGFuIGV4aXN0aW5nIHJvb3QuXG4gICAgICAgIHVwZGF0ZUZpYmVyUmVjdXJzaXZlbHkoY3VycmVudCwgYWx0ZXJuYXRlLCBudWxsLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKHdhc01vdW50ZWQgJiYgIWlzTW91bnRlZCkge1xuICAgICAgICAvLyBVbm1vdW50IGFuIGV4aXN0aW5nIHJvb3QuXG4gICAgICAgIHJlbW92ZVJvb3RQc2V1ZG9LZXkoY3VycmVudFJvb3RJRCk7XG4gICAgICAgIHJlY29yZFVubW91bnQoY3VycmVudCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgc2V0Um9vdFBzZXVkb0tleShjdXJyZW50Um9vdElELCBjdXJyZW50KTtcbiAgICAgIG1vdW50RmliZXJSZWN1cnNpdmVseShjdXJyZW50LCBudWxsLCBmYWxzZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChpc1Byb2ZpbGluZyAmJiBpc1Byb2ZpbGluZ1N1cHBvcnRlZCkge1xuICAgICAgaWYgKCFzaG91bGRCYWlsb3V0V2l0aFBlbmRpbmdPcGVyYXRpb25zKCkpIHtcbiAgICAgICAgdmFyIGNvbW1pdFByb2ZpbGluZ01ldGFkYXRhID0gcm9vdFRvQ29tbWl0UHJvZmlsaW5nTWV0YWRhdGFNYXAuZ2V0KGN1cnJlbnRSb290SUQpO1xuXG4gICAgICAgIGlmIChjb21taXRQcm9maWxpbmdNZXRhZGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgY29tbWl0UHJvZmlsaW5nTWV0YWRhdGEucHVzaChjdXJyZW50Q29tbWl0UHJvZmlsaW5nTWV0YWRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RUb0NvbW1pdFByb2ZpbGluZ01ldGFkYXRhTWFwLnNldChjdXJyZW50Um9vdElELCBbY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFdlJ3JlIGRvbmUgaGVyZS5cblxuXG4gICAgZmx1c2hQZW5kaW5nRXZlbnRzKHJvb3QpO1xuXG4gICAgaWYgKHRyYWNlVXBkYXRlc0VuYWJsZWQpIHtcbiAgICAgIGhvb2suZW1pdCgndHJhY2VVcGRhdGVzJywgdHJhY2VVcGRhdGVzRm9yTm9kZXMpO1xuICAgIH1cblxuICAgIGN1cnJlbnRSb290SUQgPSAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRBbGxDdXJyZW50SG9zdEZpYmVycyhpZCkge1xuICAgIHZhciBmaWJlcnMgPSBbXTtcbiAgICB2YXIgZmliZXIgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQoaWQpO1xuXG4gICAgaWYgKCFmaWJlcikge1xuICAgICAgcmV0dXJuIGZpYmVycztcbiAgICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIGFsbCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICBmaWJlcnMucHVzaChub2RlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpYmVyKSB7XG4gICAgICAgIHJldHVybiBmaWJlcnM7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZpYmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gICAgcmV0dXJuIGZpYmVycztcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmROYXRpdmVOb2Rlc0ZvckZpYmVySUQoaWQpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIF9maWJlcjMgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQoaWQpO1xuXG4gICAgICBpZiAoX2ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGhvc3RGaWJlcnMgPSBmaW5kQWxsQ3VycmVudEhvc3RGaWJlcnMoaWQpO1xuICAgICAgcmV0dXJuIGhvc3RGaWJlcnMubWFwKGZ1bmN0aW9uIChob3N0RmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9KS5maWx0ZXIoQm9vbGVhbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUaGUgZmliZXIgbWlnaHQgaGF2ZSB1bm1vdW50ZWQgYnkgbm93LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcklEKGlkKSB7XG4gICAgdmFyIGZpYmVyID0gaWRUb0FyYml0cmFyeUZpYmVyTWFwLmdldChpZCk7XG4gICAgcmV0dXJuIGZpYmVyICE9IG51bGwgPyBnZXREaXNwbGF5TmFtZUZvckZpYmVyKGZpYmVyKSA6IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGaWJlckZvck5hdGl2ZShob3N0SW5zdGFuY2UpIHtcbiAgICByZXR1cm4gcmVuZGVyZXIuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UoaG9zdEluc3RhbmNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZpYmVySURGb3JOYXRpdmUoaG9zdEluc3RhbmNlKSB7XG4gICAgdmFyIGZpbmROZWFyZXN0VW5maWx0ZXJlZEFuY2VzdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICB2YXIgZmliZXIgPSByZW5kZXJlci5maW5kRmliZXJCeUhvc3RJbnN0YW5jZShob3N0SW5zdGFuY2UpO1xuXG4gICAgaWYgKGZpYmVyICE9IG51bGwpIHtcbiAgICAgIGlmIChmaW5kTmVhcmVzdFVuZmlsdGVyZWRBbmNlc3Rvcikge1xuICAgICAgICB3aGlsZSAoZmliZXIgIT09IG51bGwgJiYgc2hvdWxkRmlsdGVyRmliZXIoZmliZXIpKSB7XG4gICAgICAgICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdldEZpYmVySURUaHJvd3MoZmliZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgZnVuY3Rpb24gaXMgY29waWVkIGZyb20gUmVhY3QgYW5kIHNob3VsZCBiZSBrZXB0IGluIHN5bmM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21haW4vcGFja2FnZXMvcmVhY3QtcmVjb25jaWxlci9zcmMvUmVhY3RGaWJlclRyZWVSZWZsZWN0aW9uLmpzXG5cblxuICBmdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgICBpZiAoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgIT09IGZpYmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKTtcbiAgICB9XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBSZWFjdCBhbmQgc2hvdWxkIGJlIGtlcHQgaW4gc3luYzpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1yZWNvbmNpbGVyL3NyYy9SZWFjdEZpYmVyVHJlZVJlZmxlY3Rpb24uanNcblxuXG4gIGZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gICAgaWYgKCFmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhpcyBtaWdodCBiZSBhIG5ldyB0cmVlIHRoYXQgaXNuJ3QgaW5zZXJ0ZWRcbiAgICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgICAgdmFyIG5leHROb2RlID0gbm9kZTtcblxuICAgICAgZG8ge1xuICAgICAgICBub2RlID0gbmV4dE5vZGU7IC8vIFRPRE86IFRoaXMgZnVuY3Rpb24sIGFuZCB0aGVzZSBmbGFncywgYXJlIGEgbGVha2VkIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vIGRldGFpbC4gT25jZSB3ZSBzdGFydCByZWxlYXNpbmcgRGV2VG9vbHMgaW4gbG9ja3N0ZXAgd2l0aCBSZWFjdCwgd2VcbiAgICAgICAgLy8gc2hvdWxkIGltcG9ydCBhIGZ1bmN0aW9uIGZyb20gdGhlIHJlY29uY2lsZXIgaW5zdGVhZC5cblxuICAgICAgICB2YXIgUGxhY2VtZW50ID0gMjtcbiAgICAgICAgdmFyIEh5ZHJhdGluZyA9IDQwOTY7XG5cbiAgICAgICAgaWYgKChub2RlLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSAwKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24gb3IgaW4tcHJvZ3Jlc3MgaHlkcmF0aW9uLiBUaGUgbmVhcmVzdCBwb3NzaWJsZVxuICAgICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgICBuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG5cbiAgICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH0gd2hpbGUgKG5leHROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgICByZXR1cm4gbmVhcmVzdE1vdW50ZWQ7XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBSZWFjdCBhbmQgc2hvdWxkIGJlIGtlcHQgaW4gc3luYzpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1yZWNvbmNpbGVyL3NyYy9SZWFjdEZpYmVyVHJlZVJlZmxlY3Rpb24uanNcbiAgLy8gSXQgd291bGQgYmUgbmljZSBpZiB3ZSB1cGRhdGVkIFJlYWN0IHRvIGluamVjdCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5ICh2cyBqdXN0IGluZGlyZWN0bHkgdmlhIGZpbmRET01Ob2RlKS5cbiAgLy8gQkVHSU4gY29waWVkIGNvZGVcblxuXG4gIGZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoQnlJZChpZCkge1xuICAgIHZhciBmaWJlciA9IGlkVG9BcmJpdHJhcnlGaWJlck1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGZpYmVyID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkNvdWxkIG5vdCBmaW5kIEZpYmVyIHdpdGggaWQgXFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIWFsdGVybmF0ZSkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG5cbiAgICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH0gLy8gSWYgd2UgaGF2ZSB0d28gcG9zc2libGUgYnJhbmNoZXMsIHdlJ2xsIHdhbGsgYmFja3dhcmRzIHVwIHRvIHRoZSByb290XG4gICAgLy8gdG8gc2VlIHdoYXQgcGF0aCB0aGUgcm9vdCBwb2ludHMgdG8uIE9uIHRoZSB3YXkgd2UgbWF5IGhpdCBvbmUgb2YgdGhlXG4gICAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICAgIHZhciBhID0gZmliZXI7XG4gICAgdmFyIGIgPSBhbHRlcm5hdGU7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcblxuICAgICAgaWYgKHBhcmVudEEgPT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAocGFyZW50QiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGVyZSBpcyBubyBhbHRlcm5hdGUuIFRoaXMgaXMgYW4gdW51c3VhbCBjYXNlLiBDdXJyZW50bHksIGl0IG9ubHlcbiAgICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgICAgLy8gaXMgaW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgU3VzcGVuc2UgZmliZXIgYW5kIGl0cyBjaGlsZHJlbi4gU2tpcFxuICAgICAgICAvLyBvdmVyIHRoaXMgZXh0cmEgZnJhZ21lbnQgZmliZXIgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQgcGFyZW50LlxuICAgICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICAgIGlmIChuZXh0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgYSA9IGIgPSBuZXh0UGFyZW50O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSdyZSBhdCB0aGUgcm9vdC5cblxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgICAgLy8gcHJpb3JpdHk6IHRoZSBiYWlsZWQgb3V0IGZpYmVyJ3MgY2hpbGQgcmV1c2VzIHRoZSBjdXJyZW50IGNoaWxkLlxuXG5cbiAgICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfSAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBhbHRlcm5hdGUgZm9yIGFueSBtb3VudGluZyBub2RlLiBTbyB0aGUgb25seVxuICAgICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAgIC8vIGZpYmVycy4gV2UgYXNzdW1lIHRoYXQgcmV0dXJuIHBvaW50ZXJzIG5ldmVyIGNyaXNzLWNyb3NzLCBzbyBBIG11c3RcbiAgICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgZmliZXIuIFdlJ2xsIGhhdmUgdG8gdXNlIHRoZVxuICAgICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9jaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgICAgX2NoaWxkID0gcGFyZW50Qi5jaGlsZDtcblxuICAgICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyAnICsgJ2luIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGEuYWx0ZXJuYXRlICE9PSBiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gXCIgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIHRoZSByb290IGlzIG5vdCBhIGhvc3QgY29udGFpbmVyLCB3ZSdyZSBpbiBhIGRpc2Nvbm5lY3RlZCB0cmVlLiBJLmUuXG4gICAgLy8gdW5tb3VudGVkLlxuXG5cbiAgICBpZiAoYS50YWcgIT09IEhvc3RSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSkge1xuICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH0gLy8gT3RoZXJ3aXNlIEIgaGFzIHRvIGJlIGN1cnJlbnQgYnJhbmNoLlxuXG5cbiAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICB9IC8vIEVORCBjb3BpZWQgY29kZVxuXG5cbiAgZnVuY3Rpb24gcHJlcGFyZVZpZXdBdHRyaWJ1dGVTb3VyY2UoaWQsIHBhdGgpIHtcbiAgICBpZiAoaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50KGlkKSkge1xuICAgICAgd2luZG93LiRhdHRyaWJ1dGUgPSB1dGlsc19nZXRJbk9iamVjdChtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50LCBwYXRoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlVmlld0VsZW1lbnRTb3VyY2UoaWQpIHtcbiAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChmaWJlciA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgZmluZCBGaWJlciB3aXRoIGlkIFxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZmliZXIuZWxlbWVudFR5cGUsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgZ2xvYmFsLiR0eXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgZ2xvYmFsLiR0eXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIGdsb2JhbC4kdHlwZSA9IGVsZW1lbnRUeXBlICE9IG51bGwgJiYgZWxlbWVudFR5cGUudHlwZSAhPSBudWxsID8gZWxlbWVudFR5cGUudHlwZSA6IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBnbG9iYWwuJHR5cGUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaWJlclRvU2VyaWFsaXplZEVsZW1lbnQoZmliZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU5hbWU6IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpIHx8ICdBbm9ueW1vdXMnLFxuICAgICAgaWQ6IGdldEZpYmVySURUaHJvd3MoZmliZXIpLFxuICAgICAga2V5OiBmaWJlci5rZXksXG4gICAgICB0eXBlOiBnZXRFbGVtZW50VHlwZUZvckZpYmVyKGZpYmVyKVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRPd25lcnNMaXN0KGlkKSB7XG4gICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGhCeUlkKGlkKTtcblxuICAgIGlmIChmaWJlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX2RlYnVnT3duZXIgPSBmaWJlci5fZGVidWdPd25lcjtcbiAgICB2YXIgb3duZXJzID0gW2ZpYmVyVG9TZXJpYWxpemVkRWxlbWVudChmaWJlcildO1xuXG4gICAgaWYgKF9kZWJ1Z093bmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBfZGVidWdPd25lcjtcblxuICAgICAgd2hpbGUgKG93bmVyICE9PSBudWxsKSB7XG4gICAgICAgIG93bmVycy51bnNoaWZ0KGZpYmVyVG9TZXJpYWxpemVkRWxlbWVudChvd25lcikpO1xuICAgICAgICBvd25lciA9IG93bmVyLl9kZWJ1Z093bmVyIHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG93bmVycztcbiAgfSAvLyBGYXN0IHBhdGggcHJvcHMgbG9va3VwIGZvciBSZWFjdCBOYXRpdmUgc3R5bGUgZWRpdG9yLlxuICAvLyBDb3VsZCB1c2UgaW5zcGVjdEVsZW1lbnRSYXcoKSBidXQgdGhhdCB3b3VsZCByZXF1aXJlIHNoYWxsb3cgcmVuZGVyaW5nIGhvb2tzIGNvbXBvbmVudHMsXG4gIC8vIGFuZCBjb3VsZCBhbHNvIG1lc3Mgd2l0aCBtZW1vaXphdGlvbi5cblxuXG4gIGZ1bmN0aW9uIGdldEluc3RhbmNlQW5kU3R5bGUoaWQpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBudWxsO1xuICAgIHZhciBzdHlsZSA9IG51bGw7XG4gICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGhCeUlkKGlkKTtcblxuICAgIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChmaWJlci5tZW1vaXplZFByb3BzICE9PSBudWxsKSB7XG4gICAgICAgIHN0eWxlID0gZmliZXIubWVtb2l6ZWRQcm9wcy5zdHlsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgc3R5bGU6IHN0eWxlXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRXJyb3JCb3VuZGFyeShmaWJlcikge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5lYXJlc3RFcnJvckJvdW5kYXJ5SUQoZmliZXIpIHtcbiAgICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gICAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGlzRXJyb3JCb3VuZGFyeShwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBnZXRGaWJlcklEVW5zYWZlKHBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0RWxlbWVudFJhdyhpZCkge1xuICAgIHZhciBmaWJlciA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoQnlJZChpZCk7XG5cbiAgICBpZiAoZmliZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF9kZWJ1Z093bmVyID0gZmliZXIuX2RlYnVnT3duZXIsXG4gICAgICAgIF9kZWJ1Z1NvdXJjZSA9IGZpYmVyLl9kZWJ1Z1NvdXJjZSxcbiAgICAgICAgc3RhdGVOb2RlID0gZmliZXIuc3RhdGVOb2RlLFxuICAgICAgICBrZXkgPSBmaWJlci5rZXksXG4gICAgICAgIG1lbW9pemVkUHJvcHMgPSBmaWJlci5tZW1vaXplZFByb3BzLFxuICAgICAgICBtZW1vaXplZFN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gZmliZXIuZGVwZW5kZW5jaWVzLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlRm9yRmliZXIoZmliZXIpO1xuICAgIHZhciB1c2VzSG9va3MgPSAodGFnID09PSBGdW5jdGlvbkNvbXBvbmVudCB8fCB0YWcgPT09IFNpbXBsZU1lbW9Db21wb25lbnQgfHwgdGFnID09PSBGb3J3YXJkUmVmKSAmJiAoISFtZW1vaXplZFN0YXRlIHx8ICEhZGVwZW5kZW5jaWVzKTsgLy8gVE9ETyBTaG93IGN1c3RvbSBVSSBmb3IgQ2FjaGUgbGlrZSB3ZSBkbyBmb3IgU3VzcGVuc2VcbiAgICAvLyBGb3Igbm93LCBqdXN0IGhpZGUgc3RhdGUgZGF0YSBlbnRpcmVseSBzaW5jZSBpdCdzIG5vdCBtZWFudCB0byBiZSBpbnNwZWN0ZWQuXG5cbiAgICB2YXIgc2hvd1N0YXRlID0gIXVzZXNIb29rcyAmJiB0YWcgIT09IENhY2hlQ29tcG9uZW50O1xuICAgIHZhciB0eXBlU3ltYm9sID0gZ2V0VHlwZVN5bWJvbCh0eXBlKTtcbiAgICB2YXIgY2FuVmlld1NvdXJjZSA9IGZhbHNlO1xuICAgIHZhciBjb250ZXh0ID0gbnVsbDtcblxuICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50IHx8IHRhZyA9PT0gRnVuY3Rpb25Db21wb25lbnQgfHwgdGFnID09PSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQgfHwgdGFnID09PSBJbmRldGVybWluYXRlQ29tcG9uZW50IHx8IHRhZyA9PT0gTWVtb0NvbXBvbmVudCB8fCB0YWcgPT09IEZvcndhcmRSZWYgfHwgdGFnID09PSBTaW1wbGVNZW1vQ29tcG9uZW50KSB7XG4gICAgICBjYW5WaWV3U291cmNlID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlTm9kZSAmJiBzdGF0ZU5vZGUuY29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgIC8vIERvbid0IHNob3cgYW4gZW1wdHkgY29udGV4dCBvYmplY3QgZm9yIGNsYXNzIGNvbXBvbmVudHMgdGhhdCBkb24ndCB1c2UgdGhlIGNvbnRleHQgQVBJLlxuICAgICAgICB2YXIgc2hvdWxkSGlkZUNvbnRleHQgPSBlbGVtZW50VHlwZSA9PT0gdHlwZXNfRWxlbWVudFR5cGVDbGFzcyAmJiAhKHR5cGUuY29udGV4dFR5cGVzIHx8IHR5cGUuY29udGV4dFR5cGUpO1xuXG4gICAgICAgIGlmICghc2hvdWxkSGlkZUNvbnRleHQpIHtcbiAgICAgICAgICBjb250ZXh0ID0gc3RhdGVOb2RlLmNvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVTeW1ib2wgPT09IENPTlRFWFRfTlVNQkVSIHx8IHR5cGVTeW1ib2wgPT09IENPTlRFWFRfU1lNQk9MX1NUUklORykge1xuICAgICAgLy8gMTYuMy0xNi41IHJlYWQgZnJvbSBcInR5cGVcIiBiZWNhdXNlIHRoZSBDb25zdW1lciBpcyB0aGUgYWN0dWFsIGNvbnRleHQgb2JqZWN0LlxuICAgICAgLy8gMTYuNisgc2hvdWxkIHJlYWQgZnJvbSBcInR5cGUuX2NvbnRleHRcIiBiZWNhdXNlIENvbnN1bWVyIGNhbiBiZSBkaWZmZXJlbnQgKGluIERFVikuXG4gICAgICAvLyBOT1RFIEtlZXAgaW4gc3luYyB3aXRoIGdldERpc3BsYXlOYW1lRm9yRmliZXIoKVxuICAgICAgdmFyIGNvbnN1bWVyUmVzb2x2ZWRDb250ZXh0ID0gdHlwZS5fY29udGV4dCB8fCB0eXBlOyAvLyBHbG9iYWwgY29udGV4dCB2YWx1ZS5cblxuICAgICAgY29udGV4dCA9IGNvbnN1bWVyUmVzb2x2ZWRDb250ZXh0Ll9jdXJyZW50VmFsdWUgfHwgbnVsbDsgLy8gTG9vayBmb3Igb3ZlcnJpZGRlbiB2YWx1ZS5cblxuICAgICAgdmFyIF9jdXJyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gICAgICB3aGlsZSAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRUeXBlID0gX2N1cnJlbnQudHlwZTtcbiAgICAgICAgdmFyIGN1cnJlbnRUeXBlU3ltYm9sID0gZ2V0VHlwZVN5bWJvbChjdXJyZW50VHlwZSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUeXBlU3ltYm9sID09PSBQUk9WSURFUl9OVU1CRVIgfHwgY3VycmVudFR5cGVTeW1ib2wgPT09IFBST1ZJREVSX1NZTUJPTF9TVFJJTkcpIHtcbiAgICAgICAgICAvLyAxNi4zLjAgZXhwb3NlZCB0aGUgY29udGV4dCBvYmplY3QgYXMgXCJjb250ZXh0XCJcbiAgICAgICAgICAvLyBQUiAjMTI1MDEgY2hhbmdlZCBpdCB0byBcIl9jb250ZXh0XCIgZm9yIDE2LjMuMStcbiAgICAgICAgICAvLyBOT1RFIEtlZXAgaW4gc3luYyB3aXRoIGdldERpc3BsYXlOYW1lRm9yRmliZXIoKVxuICAgICAgICAgIHZhciBwcm92aWRlclJlc29sdmVkQ29udGV4dCA9IGN1cnJlbnRUeXBlLl9jb250ZXh0IHx8IGN1cnJlbnRUeXBlLmNvbnRleHQ7XG5cbiAgICAgICAgICBpZiAocHJvdmlkZXJSZXNvbHZlZENvbnRleHQgPT09IGNvbnN1bWVyUmVzb2x2ZWRDb250ZXh0KSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gX2N1cnJlbnQubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9jdXJyZW50ID0gX2N1cnJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNMZWdhY3lDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoY29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgaGFzTGVnYWN5Q29udGV4dCA9ICEhdHlwZS5jb250ZXh0VHlwZXM7IC8vIFRvIHNpbXBsaWZ5IGh5ZHJhdGlvbiBhbmQgZGlzcGxheSBsb2dpYyBmb3IgY29udGV4dCwgd3JhcCBpbiBhIHZhbHVlIG9iamVjdC5cbiAgICAgIC8vIE90aGVyd2lzZSBzaW1wbGUgdmFsdWVzIChlLmcuIHN0cmluZ3MsIGJvb2xlYW5zKSBiZWNvbWUgaGFyZGVyIHRvIGhhbmRsZS5cblxuICAgICAgY29udGV4dCA9IHtcbiAgICAgICAgdmFsdWU6IGNvbnRleHRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG93bmVycyA9IG51bGw7XG5cbiAgICBpZiAoX2RlYnVnT3duZXIpIHtcbiAgICAgIG93bmVycyA9IFtdO1xuICAgICAgdmFyIG93bmVyID0gX2RlYnVnT3duZXI7XG5cbiAgICAgIHdoaWxlIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgICBvd25lcnMucHVzaChmaWJlclRvU2VyaWFsaXplZEVsZW1lbnQob3duZXIpKTtcbiAgICAgICAgb3duZXIgPSBvd25lci5fZGVidWdPd25lciB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSB0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIG1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgdmFyIGhvb2tzID0gbnVsbDtcblxuICAgIGlmICh1c2VzSG9va3MpIHtcbiAgICAgIHZhciBvcmlnaW5hbENvbnNvbGVNZXRob2RzID0ge307IC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgYWxsIGNvbnNvbGUgbG9nZ2luZyBiZWZvcmUgcmUtcnVubmluZyB0aGUgaG9vay5cblxuICAgICAgZm9yICh2YXIgbWV0aG9kIGluIGNvbnNvbGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcmlnaW5hbENvbnNvbGVNZXRob2RzW21ldGhvZF0gPSBjb25zb2xlW21ldGhvZF07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gICAgICAgICAgY29uc29sZVttZXRob2RdID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBob29rcyA9ICgwLHJlYWN0X2RlYnVnX3Rvb2xzLmluc3BlY3RIb29rc09mRmliZXIpKGZpYmVyLCByZW5kZXJlci5jdXJyZW50RGlzcGF0Y2hlclJlZiwgdHJ1ZSAvLyBJbmNsdWRlIHNvdXJjZSBsb2NhdGlvbiBpbmZvIGZvciBob29rc1xuICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBjb25zb2xlIGZ1bmN0aW9uYWxpdHkuXG4gICAgICAgIGZvciAodmFyIF9tZXRob2QgaW4gb3JpZ2luYWxDb25zb2xlTWV0aG9kcykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICAgICAgIGNvbnNvbGVbX21ldGhvZF0gPSBvcmlnaW5hbENvbnNvbGVNZXRob2RzW19tZXRob2RdO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJvb3RUeXBlID0gbnVsbDtcbiAgICB2YXIgY3VycmVudCA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKGN1cnJlbnQucmV0dXJuICE9PSBudWxsKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5yZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZpYmVyUm9vdCA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAgaWYgKGZpYmVyUm9vdCAhPSBudWxsICYmIGZpYmVyUm9vdC5fZGVidWdSb290VHlwZSAhPT0gbnVsbCkge1xuICAgICAgcm9vdFR5cGUgPSBmaWJlclJvb3QuX2RlYnVnUm9vdFR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGVycm9ycyA9IGZpYmVySURUb0Vycm9yc01hcC5nZXQoaWQpIHx8IG5ldyBNYXAoKTtcbiAgICB2YXIgd2FybmluZ3MgPSBmaWJlcklEVG9XYXJuaW5nc01hcC5nZXQoaWQpIHx8IG5ldyBNYXAoKTtcbiAgICB2YXIgaXNFcnJvcmVkID0gZmFsc2U7XG4gICAgdmFyIHRhcmdldEVycm9yQm91bmRhcnlJRDtcblxuICAgIGlmIChpc0Vycm9yQm91bmRhcnkoZmliZXIpKSB7XG4gICAgICAvLyBpZiB0aGUgY3VycmVudCBpbnNwZWN0ZWQgZWxlbWVudCBpcyBhbiBlcnJvciBib3VuZGFyeSxcbiAgICAgIC8vIGVpdGhlciB0aGF0IHdlIHdhbnQgdG8gdXNlIGl0IHRvIHRvZ2dsZSBvZmYgZXJyb3Igc3RhdGVcbiAgICAgIC8vIG9yIHRoYXQgd2UgYWxsb3cgdG8gZm9yY2UgZXJyb3Igc3RhdGUgb24gaXQgaWYgaXQncyB3aXRoaW4gYW5vdGhlclxuICAgICAgLy8gZXJyb3IgYm91bmRhcnlcbiAgICAgIC8vXG4gICAgICAvLyBUT0RPOiBUaGlzIGZsYWcgaXMgYSBsZWFrZWQgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBPbmNlIHdlIHN0YXJ0XG4gICAgICAvLyByZWxlYXNpbmcgRGV2VG9vbHMgaW4gbG9ja3N0ZXAgd2l0aCBSZWFjdCwgd2Ugc2hvdWxkIGltcG9ydCBhIGZ1bmN0aW9uXG4gICAgICAvLyBmcm9tIHRoZSByZWNvbmNpbGVyIGluc3RlYWQuXG4gICAgICB2YXIgRGlkQ2FwdHVyZSA9IDEyODtcbiAgICAgIGlzRXJyb3JlZCA9IChmaWJlci5mbGFncyAmIERpZENhcHR1cmUpICE9PSAwIHx8IGZvcmNlRXJyb3JGb3JGaWJlcklEcy5nZXQoaWQpID09PSB0cnVlO1xuICAgICAgdGFyZ2V0RXJyb3JCb3VuZGFyeUlEID0gaXNFcnJvcmVkID8gaWQgOiBnZXROZWFyZXN0RXJyb3JCb3VuZGFyeUlEKGZpYmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0RXJyb3JCb3VuZGFyeUlEID0gZ2V0TmVhcmVzdEVycm9yQm91bmRhcnlJRChmaWJlcik7XG4gICAgfVxuXG4gICAgdmFyIHBsdWdpbnMgPSB7XG4gICAgICBzdHlsZXg6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGVuYWJsZVN0eWxlWEZlYXR1cmVzKSB7XG4gICAgICBpZiAobWVtb2l6ZWRQcm9wcyAhPSBudWxsICYmIG1lbW9pemVkUHJvcHMuaGFzT3duUHJvcGVydHkoJ3hzdHlsZScpKSB7XG4gICAgICAgIHBsdWdpbnMuc3R5bGV4ID0gZ2V0U3R5bGVYRGF0YShtZW1vaXplZFByb3BzLnhzdHlsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIC8vIERvZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgc3VwcG9ydCBlZGl0YWJsZSBob29rcyBhbmQgZnVuY3Rpb24gcHJvcHM/XG4gICAgICBjYW5FZGl0SG9va3M6IHR5cGVvZiBvdmVycmlkZUhvb2tTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIGNhbkVkaXRGdW5jdGlvblByb3BzOiB0eXBlb2Ygb3ZlcnJpZGVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIC8vIERvZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgc3VwcG9ydCBhZHZhbmNlZCBlZGl0aW5nIGludGVyZmFjZT9cbiAgICAgIGNhbkVkaXRIb29rc0FuZERlbGV0ZVBhdGhzOiB0eXBlb2Ygb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID09PSAnZnVuY3Rpb24nLFxuICAgICAgY2FuRWRpdEhvb2tzQW5kUmVuYW1lUGF0aHM6IHR5cGVvZiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPT09ICdmdW5jdGlvbicsXG4gICAgICBjYW5FZGl0RnVuY3Rpb25Qcm9wc0RlbGV0ZVBhdGhzOiB0eXBlb2Ygb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPT09ICdmdW5jdGlvbicsXG4gICAgICBjYW5FZGl0RnVuY3Rpb25Qcm9wc1JlbmFtZVBhdGhzOiB0eXBlb2Ygb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPT09ICdmdW5jdGlvbicsXG4gICAgICBjYW5Ub2dnbGVFcnJvcjogc3VwcG9ydHNUb2dnbGluZ0Vycm9yICYmIHRhcmdldEVycm9yQm91bmRhcnlJRCAhPSBudWxsLFxuICAgICAgLy8gSXMgdGhpcyBlcnJvciBib3VuZGFyeSBpbiBlcnJvciBzdGF0ZS5cbiAgICAgIGlzRXJyb3JlZDogaXNFcnJvcmVkLFxuICAgICAgdGFyZ2V0RXJyb3JCb3VuZGFyeUlEOiB0YXJnZXRFcnJvckJvdW5kYXJ5SUQsXG4gICAgICBjYW5Ub2dnbGVTdXNwZW5zZTogc3VwcG9ydHNUb2dnbGluZ1N1c3BlbnNlICYmICggLy8gSWYgaXQncyBzaG93aW5nIHRoZSByZWFsIGNvbnRlbnQsIHdlIGNhbiBhbHdheXMgZmxpcCBmYWxsYmFjay5cbiAgICAgICFpc1RpbWVkT3V0U3VzcGVuc2UgfHwgLy8gSWYgaXQncyBzaG93aW5nIGZhbGxiYWNrIGJlY2F1c2Ugd2UgcHJldmlvdXNseSBmb3JjZWQgaXQgdG8sXG4gICAgICAvLyBhbGxvdyB0b2dnbGluZyBpdCBiYWNrIHRvIHJlbW92ZSB0aGUgZmFsbGJhY2sgb3ZlcnJpZGUuXG4gICAgICBmb3JjZUZhbGxiYWNrRm9yU3VzcGVuc2VJRHMuaGFzKGlkKSksXG4gICAgICAvLyBDYW4gdmlldyBjb21wb25lbnQgc291cmNlIGxvY2F0aW9uLlxuICAgICAgY2FuVmlld1NvdXJjZTogY2FuVmlld1NvdXJjZSxcbiAgICAgIC8vIERvZXMgdGhlIGNvbXBvbmVudCBoYXZlIGxlZ2FjeSBjb250ZXh0IGF0dGFjaGVkIHRvIGl0LlxuICAgICAgaGFzTGVnYWN5Q29udGV4dDogaGFzTGVnYWN5Q29udGV4dCxcbiAgICAgIGtleToga2V5ICE9IG51bGwgPyBrZXkgOiBudWxsLFxuICAgICAgZGlzcGxheU5hbWU6IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpLFxuICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAvLyBJbnNwZWN0YWJsZSBwcm9wZXJ0aWVzLlxuICAgICAgLy8gVE9ETyBSZXZpZXcgc2FuaXRpemF0aW9uIGFwcHJvYWNoIGZvciB0aGUgYmVsb3cgaW5zcGVjdGFibGUgdmFsdWVzLlxuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIGhvb2tzOiBob29rcyxcbiAgICAgIHByb3BzOiBtZW1vaXplZFByb3BzLFxuICAgICAgc3RhdGU6IHNob3dTdGF0ZSA/IG1lbW9pemVkU3RhdGUgOiBudWxsLFxuICAgICAgZXJyb3JzOiBBcnJheS5mcm9tKGVycm9ycy5lbnRyaWVzKCkpLFxuICAgICAgd2FybmluZ3M6IEFycmF5LmZyb20od2FybmluZ3MuZW50cmllcygpKSxcbiAgICAgIC8vIExpc3Qgb2Ygb3duZXJzXG4gICAgICBvd25lcnM6IG93bmVycyxcbiAgICAgIC8vIExvY2F0aW9uIG9mIGNvbXBvbmVudCBpbiBzb3VyY2UgY29kZS5cbiAgICAgIHNvdXJjZTogX2RlYnVnU291cmNlIHx8IG51bGwsXG4gICAgICByb290VHlwZTogcm9vdFR5cGUsXG4gICAgICByZW5kZXJlclBhY2thZ2VOYW1lOiByZW5kZXJlci5yZW5kZXJlclBhY2thZ2VOYW1lLFxuICAgICAgcmVuZGVyZXJWZXJzaW9uOiByZW5kZXJlci52ZXJzaW9uLFxuICAgICAgcGx1Z2luczogcGx1Z2luc1xuICAgIH07XG4gIH1cblxuICB2YXIgbW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCA9IG51bGw7XG4gIHZhciBoYXNFbGVtZW50VXBkYXRlZFNpbmNlTGFzdEluc3BlY3RlZCA9IGZhbHNlO1xuICB2YXIgY3VycmVudGx5SW5zcGVjdGVkUGF0aHMgPSB7fTtcblxuICBmdW5jdGlvbiBpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQoaWQpIHtcbiAgICByZXR1cm4gbW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCAhPT0gbnVsbCAmJiBtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50LmlkID09PSBpZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudEN1cnJlbnQoaWQpIHtcbiAgICByZXR1cm4gaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50KGlkKSAmJiAhaGFzRWxlbWVudFVwZGF0ZWRTaW5jZUxhc3RJbnNwZWN0ZWQ7XG4gIH0gLy8gVHJhY2sgdGhlIGludGVyc2VjdGlvbiBvZiBjdXJyZW50bHkgaW5zcGVjdGVkIHBhdGhzLFxuICAvLyBzbyB0aGF0IHdlIGNhbiBzZW5kIHRoZWlyIGRhdGEgYWxvbmcgaWYgdGhlIGVsZW1lbnQgaXMgcmUtcmVuZGVyZWQuXG5cblxuICBmdW5jdGlvbiBtZXJnZUluc3BlY3RlZFBhdGhzKHBhdGgpIHtcbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseUluc3BlY3RlZFBhdGhzO1xuICAgIHBhdGguZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoIWN1cnJlbnRba2V5XSkge1xuICAgICAgICBjdXJyZW50W2tleV0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUlzUGF0aEFsbG93ZWQoa2V5LCBzZWNvbmRhcnlDYXRlZ29yeSkge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaGVscHMgcHJldmVudCBwcmV2aW91c2x5LWluc3BlY3RlZCBwYXRocyBmcm9tIGJlaW5nIGRlaHlkcmF0ZWQgaW4gdXBkYXRlcy5cbiAgICAvLyBUaGlzIGlzIGltcG9ydGFudCB0byBhdm9pZCBhIGJhZCB1c2VyIGV4cGVyaWVuY2Ugd2hlcmUgZXhwYW5kZWQgdG9nZ2xlcyBjb2xsYXBzZSBvbiB1cGRhdGUuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzUGF0aEFsbG93ZWQocGF0aCkge1xuICAgICAgc3dpdGNoIChzZWNvbmRhcnlDYXRlZ29yeSkge1xuICAgICAgICBjYXNlICdob29rcyc6XG4gICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBOZXZlciBkZWh5ZHJhdGUgdGhlIFwiaG9va3NcIiBvYmplY3QgYXQgdGhlIHRvcCBsZXZlbHMuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGF0aFtwYXRoLmxlbmd0aCAtIDJdID09PSAnaG9va1NvdXJjZScgJiYgcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAnZmlsZU5hbWUnKSB7XG4gICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBwcmVzZXJ2ZSB0aGUgZnVsbCBmaWxlIG5hbWUgKFVSTCkgZm9yIGhvb2sgc291cmNlc1xuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgdXNlciBoYXMgZW5hYmxlZCB0aGUgbmFtZWQgaG9va3MgZmVhdHVyZS5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGUgZnJvbnRlbmQgbWF5IGVuZCB1cCB3aXRoIGEgcGFydGlhbCBVUkwgd2hpY2ggaXQgY2FuJ3QgbG9hZC5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICdzdWJIb29rcycgfHwgcGF0aFtwYXRoLmxlbmd0aCAtIDJdID09PSAnc3ViSG9va3MnKSB7XG4gICAgICAgICAgICAvLyBEZWh5ZHJhdGluZyB0aGUgJ3N1Ykhvb2tzJyBwcm9wZXJ0eSBtYWtlcyB0aGUgSG9va3NUcmVlIFVJIGEgbG90IG1vcmUgY29tcGxpY2F0ZWQsXG4gICAgICAgICAgICAvLyBzbyBpdCdzIGVhc2llc3QgZm9yIG5vdyBpZiB3ZSBqdXN0IGRvbid0IGJyZWFrIG9uIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgICAvLyBXZSBjYW4gYWx3YXlzIGRlaHlkcmF0ZSBhIGxldmVsIGRlZXBlciAoaW4gdGhlIHZhbHVlIG9iamVjdCkuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudCA9IGtleSA9PT0gbnVsbCA/IGN1cnJlbnRseUluc3BlY3RlZFBhdGhzIDogY3VycmVudGx5SW5zcGVjdGVkUGF0aHNba2V5XTtcblxuICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhdGhbaV1dO1xuXG4gICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRFbGVtZW50KGluc3BlY3RlZEVsZW1lbnQpIHtcbiAgICB2YXIgaG9va3MgPSBpbnNwZWN0ZWRFbGVtZW50Lmhvb2tzLFxuICAgICAgICBpZCA9IGluc3BlY3RlZEVsZW1lbnQuaWQsXG4gICAgICAgIHByb3BzID0gaW5zcGVjdGVkRWxlbWVudC5wcm9wcztcbiAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChmaWJlciA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgZmluZCBGaWJlciB3aXRoIGlkIFxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZmliZXIuZWxlbWVudFR5cGUsXG4gICAgICAgIHN0YXRlTm9kZSA9IGZpYmVyLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICAgIGdsb2JhbC4kciA9IHN0YXRlTm9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGdsb2JhbC4kciA9IHtcbiAgICAgICAgICBob29rczogaG9va3MsXG4gICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgZ2xvYmFsLiRyID0ge1xuICAgICAgICAgIGhvb2tzOiBob29rcyxcbiAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgdHlwZTogdHlwZS5yZW5kZXJcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgZ2xvYmFsLiRyID0ge1xuICAgICAgICAgIGhvb2tzOiBob29rcyxcbiAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUgIT0gbnVsbCAmJiBlbGVtZW50VHlwZS50eXBlICE9IG51bGwgPyBlbGVtZW50VHlwZS50eXBlIDogdHlwZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZ2xvYmFsLiRyID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcmVBc0dsb2JhbChpZCwgcGF0aCwgY291bnQpIHtcbiAgICBpZiAoaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50KGlkKSkge1xuICAgICAgdmFyIHZhbHVlID0gdXRpbHNfZ2V0SW5PYmplY3QobW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCwgcGF0aCk7XG4gICAgICB2YXIga2V5ID0gXCIkcmVhY3RUZW1wXCIuY29uY2F0KGNvdW50KTtcbiAgICAgIHdpbmRvd1trZXldID0gdmFsdWU7XG4gICAgICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAgY29uc29sZS5sb2codmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlcmlhbGl6ZWRFbGVtZW50VmFsdWVCeVBhdGgoaWQsIHBhdGgpIHtcbiAgICBpZiAoaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50KGlkKSkge1xuICAgICAgdmFyIHZhbHVlVG9Db3B5ID0gdXRpbHNfZ2V0SW5PYmplY3QobW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCwgcGF0aCk7XG4gICAgICByZXR1cm4gc2VyaWFsaXplVG9TdHJpbmcodmFsdWVUb0NvcHkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RFbGVtZW50KHJlcXVlc3RJRCwgaWQsIHBhdGgsIGZvcmNlRnVsbERhdGEpIHtcbiAgICBpZiAocGF0aCAhPT0gbnVsbCkge1xuICAgICAgbWVyZ2VJbnNwZWN0ZWRQYXRocyhwYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50KGlkKSAmJiAhZm9yY2VGdWxsRGF0YSkge1xuICAgICAgaWYgKCFoYXNFbGVtZW50VXBkYXRlZFNpbmNlTGFzdEluc3BlY3RlZCkge1xuICAgICAgICBpZiAocGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBzZWNvbmRhcnlDYXRlZ29yeSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAocGF0aFswXSA9PT0gJ2hvb2tzJykge1xuICAgICAgICAgICAgc2Vjb25kYXJ5Q2F0ZWdvcnkgPSAnaG9va3MnO1xuICAgICAgICAgIH0gLy8gSWYgdGhpcyBlbGVtZW50IGhhcyBub3QgYmVlbiB1cGRhdGVkIHNpbmNlIGl0IHdhcyBsYXN0IGluc3BlY3RlZCxcbiAgICAgICAgICAvLyB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIHN1YnNldCBvZiBkYXRhIGluIHRoZSBuZXdseS1pbnNwZWN0ZWQgcGF0aC5cblxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHJlc3BvbnNlSUQ6IHJlcXVlc3RJRCxcbiAgICAgICAgICAgIHR5cGU6ICdoeWRyYXRlZC1wYXRoJyxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogY2xlYW5Gb3JCcmlkZ2UodXRpbHNfZ2V0SW5PYmplY3QobW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCwgcGF0aCksIGNyZWF0ZUlzUGF0aEFsbG93ZWQobnVsbCwgc2Vjb25kYXJ5Q2F0ZWdvcnkpLCBwYXRoKVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IGhhcyBub3QgYmVlbiB1cGRhdGVkIHNpbmNlIGl0IHdhcyBsYXN0IGluc3BlY3RlZCwgd2UgZG9uJ3QgbmVlZCB0byByZXR1cm4gaXQuXG4gICAgICAgICAgLy8gSW5zdGVhZCB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIElEIHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIG5vdCBjaGFuZ2VkLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICByZXNwb25zZUlEOiByZXF1ZXN0SUQsXG4gICAgICAgICAgICB0eXBlOiAnbm8tY2hhbmdlJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudGx5SW5zcGVjdGVkUGF0aHMgPSB7fTtcbiAgICB9XG5cbiAgICBoYXNFbGVtZW50VXBkYXRlZFNpbmNlTGFzdEluc3BlY3RlZCA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQgPSBpbnNwZWN0RWxlbWVudFJhdyhpZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIHRoZSBlcnJvciBuYW1lIGlzIHN5bmNlZCB3aXRoIFJlYWN0RGVidWdIb29rc1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdSZWFjdERlYnVnVG9vbHNSZW5kZXJFcnJvcicpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSAnRXJyb3IgcmVuZGVyaW5nIGluc3BlY3RlZCBlbGVtZW50Lic7XG4gICAgICAgIHZhciBzdGFjazsgLy8gTG9nIGVycm9yICYgY2F1c2UgZm9yIHVzZXIgdG8gZGVidWdcblxuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UgKyAnXFxuXFxuJywgZXJyb3IpO1xuXG4gICAgICAgIGlmIChlcnJvci5jYXVzZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9maWJlcjQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQoaWQpO1xuXG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBfZmliZXI0ICE9IG51bGwgPyBnZXREaXNwbGF5TmFtZUZvckZpYmVyKF9maWJlcjQpIDogbnVsbDtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZWFjdCBEZXZUb29scyBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gaW5zcGVjdCBob29rcy4gJyArICdUaGlzIGlzIG1vc3QgbGlrZWx5IGNhdXNlZCBieSBhbiBlcnJvciBpbiBjdXJyZW50IGluc3BlY3RlZCBjb21wb25lbnQnICsgKGNvbXBvbmVudE5hbWUgIT0gbnVsbCA/IFwiOiBcXFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiXFxcIi5cIikgOiAnLicpICsgJ1xcblRoZSBlcnJvciB0aHJvd24gaW4gdGhlIGNvbXBvbmVudCBpczogXFxuXFxuJywgZXJyb3IuY2F1c2UpO1xuXG4gICAgICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlIHx8IG1lc3NhZ2U7XG4gICAgICAgICAgICBzdGFjayA9IGVycm9yLmNhdXNlLnN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvclR5cGU6ICd1c2VyJyxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcmVzcG9uc2VJRDogcmVxdWVzdElELFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgc3RhY2s6IHN0YWNrXG4gICAgICAgIH07XG4gICAgICB9IC8vIHRoZSBlcnJvciBuYW1lIGlzIHN5bmNlZCB3aXRoIFJlYWN0RGVidWdIb29rc1xuXG5cbiAgICAgIGlmIChlcnJvci5uYW1lID09PSAnUmVhY3REZWJ1Z1Rvb2xzVW5zdXBwb3J0ZWRIb29rRXJyb3InKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvclR5cGU6ICd1bmtub3duLWhvb2snLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICByZXNwb25zZUlEOiByZXF1ZXN0SUQsXG4gICAgICAgICAgbWVzc2FnZTogJ1Vuc3VwcG9ydGVkIGhvb2sgaW4gdGhlIHJlYWN0LWRlYnVnLXRvb2xzIHBhY2thZ2U6ICcgKyBlcnJvci5tZXNzYWdlXG4gICAgICAgIH07XG4gICAgICB9IC8vIExvZyBVbmNhdWdodCBFcnJvclxuXG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3BlY3RpbmcgZWxlbWVudC5cXG5cXG4nLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBlcnJvclR5cGU6ICd1bmNhdWdodCcsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcmVzcG9uc2VJRDogcmVxdWVzdElELFxuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2tcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcmVzcG9uc2VJRDogcmVxdWVzdElELFxuICAgICAgICB0eXBlOiAnbm90LWZvdW5kJ1xuICAgICAgfTtcbiAgICB9IC8vIEFueSB0aW1lIGFuIGluc3BlY3RlZCBlbGVtZW50IGhhcyBhbiB1cGRhdGUsXG4gICAgLy8gd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgJHIgdmFsdWUgYXMgd2VsLlxuICAgIC8vIERvIHRoaXMgYmVmb3JlIGRlaHlkcmF0aW9uIChjbGVhbkZvckJyaWRnZSkuXG5cblxuICAgIHVwZGF0ZVNlbGVjdGVkRWxlbWVudChtb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50KTsgLy8gQ2xvbmUgYmVmb3JlIGNsZWFuaW5nIHNvIHRoYXQgd2UgcHJlc2VydmUgdGhlIGZ1bGwgZGF0YS5cbiAgICAvLyBUaGlzIHdpbGwgZW5hYmxlIHVzIHRvIHNlbmQgcGF0Y2hlcyB3aXRob3V0IHJlLWluc3BlY3RpbmcgaWYgaHlkcmF0ZWQgcGF0aHMgYXJlIHJlcXVlc3RlZC5cbiAgICAvLyAoUmVkdWNpbmcgaG93IG9mdGVuIHdlIHNoYWxsb3ctcmVuZGVyIGlzIGEgYmV0dGVyIERYIGZvciBmdW5jdGlvbiBjb21wb25lbnRzIHRoYXQgdXNlIGhvb2tzLilcblxuICAgIHZhciBjbGVhbmVkSW5zcGVjdGVkRWxlbWVudCA9IHJlbmRlcmVyX29iamVjdFNwcmVhZCh7fSwgbW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCk7IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuICAgIGNsZWFuZWRJbnNwZWN0ZWRFbGVtZW50LmNvbnRleHQgPSBjbGVhbkZvckJyaWRnZShjbGVhbmVkSW5zcGVjdGVkRWxlbWVudC5jb250ZXh0LCBjcmVhdGVJc1BhdGhBbGxvd2VkKCdjb250ZXh0JywgbnVsbCkpOyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgY2xlYW5lZEluc3BlY3RlZEVsZW1lbnQuaG9va3MgPSBjbGVhbkZvckJyaWRnZShjbGVhbmVkSW5zcGVjdGVkRWxlbWVudC5ob29rcywgY3JlYXRlSXNQYXRoQWxsb3dlZCgnaG9va3MnLCAnaG9va3MnKSk7IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICBjbGVhbmVkSW5zcGVjdGVkRWxlbWVudC5wcm9wcyA9IGNsZWFuRm9yQnJpZGdlKGNsZWFuZWRJbnNwZWN0ZWRFbGVtZW50LnByb3BzLCBjcmVhdGVJc1BhdGhBbGxvd2VkKCdwcm9wcycsIG51bGwpKTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgIGNsZWFuZWRJbnNwZWN0ZWRFbGVtZW50LnN0YXRlID0gY2xlYW5Gb3JCcmlkZ2UoY2xlYW5lZEluc3BlY3RlZEVsZW1lbnQuc3RhdGUsIGNyZWF0ZUlzUGF0aEFsbG93ZWQoJ3N0YXRlJywgbnVsbCkpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWQsXG4gICAgICByZXNwb25zZUlEOiByZXF1ZXN0SUQsXG4gICAgICB0eXBlOiAnZnVsbC1kYXRhJyxcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICB2YWx1ZTogY2xlYW5lZEluc3BlY3RlZEVsZW1lbnRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9nRWxlbWVudFRvQ29uc29sZShpZCkge1xuICAgIHZhciByZXN1bHQgPSBpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnRDdXJyZW50KGlkKSA/IG1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQgOiBpbnNwZWN0RWxlbWVudFJhdyhpZCk7XG5cbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgZmluZCBGaWJlciB3aXRoIGlkIFxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN1cHBvcnRzR3JvdXAgPSB0eXBlb2YgY29uc29sZS5ncm91cENvbGxhcHNlZCA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChzdXBwb3J0c0dyb3VwKSB7XG4gICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiW0NsaWNrIHRvIGV4cGFuZF0gJWM8XCIuY29uY2F0KHJlc3VsdC5kaXNwbGF5TmFtZSB8fCAnQ29tcG9uZW50JywgXCIgLz5cIiksIC8vIC0tZG9tLXRhZy1uYW1lLWNvbG9yIGlzIHRoZSBDU1MgdmFyaWFibGUgQ2hyb21lIHN0eWxlcyBIVE1MIGVsZW1lbnRzIHdpdGggaW4gdGhlIGNvbnNvbGUuXG4gICAgICAnY29sb3I6IHZhcigtLWRvbS10YWctbmFtZS1jb2xvcik7IGZvbnQtd2VpZ2h0OiBub3JtYWw7Jyk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5wcm9wcyAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ1Byb3BzOicsIHJlc3VsdC5wcm9wcyk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5zdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ1N0YXRlOicsIHJlc3VsdC5zdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5ob29rcyAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ0hvb2tzOicsIHJlc3VsdC5ob29rcyk7XG4gICAgfVxuXG4gICAgdmFyIG5hdGl2ZU5vZGVzID0gZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRChpZCk7XG5cbiAgICBpZiAobmF0aXZlTm9kZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdOb2RlczonLCBuYXRpdmVOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5zb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdMb2NhdGlvbjonLCByZXN1bHQuc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LmNocm9tZSB8fCAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdSaWdodC1jbGljayBhbnkgdmFsdWUgdG8gc2F2ZSBpdCBhcyBhIGdsb2JhbCB2YXJpYWJsZSBmb3IgZnVydGhlciBpbnNwZWN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c0dyb3VwKSB7XG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlUGF0aCh0eXBlLCBpZCwgaG9va0lELCBwYXRoKSB7XG4gICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGhCeUlkKGlkKTtcblxuICAgIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgICAgLy8gVG8gc2ltcGxpZnkgaHlkcmF0aW9uIGFuZCBkaXNwbGF5IG9mIHByaW1pdGl2ZSBjb250ZXh0IHZhbHVlcyAoZS5nLiBudW1iZXIsIHN0cmluZylcbiAgICAgICAgICAvLyB0aGUgaW5zcGVjdEVsZW1lbnQoKSBtZXRob2Qgd3JhcHMgY29udGV4dCBpbiBhIHt2YWx1ZTogLi4ufSBvYmplY3QuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGggKHRoZSBcInZhbHVlXCIpIGJlZm9yZSBjb250aW51aW5nLlxuICAgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDEpO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgey8vIFNpbXBsZSBjb250ZXh0IHZhbHVlIChub29wKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVBhdGhJbk9iamVjdChpbnN0YW5jZS5jb250ZXh0LCBwYXRoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgICAgICAvLyBGdW5jdGlvbiBjb21wb25lbnRzIHVzaW5nIGxlZ2FjeSBjb250ZXh0IGFyZSBub3QgZWRpdGFibGVcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGluc3RhbmNlIG9uIHdoaWNoIHRvIGNyZWF0ZSBhIGNsb25lZCwgbXV0YXRlZCBjb250ZXh0LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdob29rcyc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aChmaWJlciwgaG9va0lELCBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdwcm9wcyc6XG4gICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoKGZpYmVyLCBwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGUoaW5zdGFuY2UucHJvcHMsIHBhdGgpO1xuICAgICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzdGF0ZSc6XG4gICAgICAgICAgZGVsZXRlUGF0aEluT2JqZWN0KGluc3RhbmNlLnN0YXRlLCBwYXRoKTtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmFtZVBhdGgodHlwZSwgaWQsIGhvb2tJRCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBmaWJlciA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoQnlJZChpZCk7XG5cbiAgICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NvbnRleHQnOlxuICAgICAgICAgIC8vIFRvIHNpbXBsaWZ5IGh5ZHJhdGlvbiBhbmQgZGlzcGxheSBvZiBwcmltaXRpdmUgY29udGV4dCB2YWx1ZXMgKGUuZy4gbnVtYmVyLCBzdHJpbmcpXG4gICAgICAgICAgLy8gdGhlIGluc3BlY3RFbGVtZW50KCkgbWV0aG9kIHdyYXBzIGNvbnRleHQgaW4gYSB7dmFsdWU6IC4uLn0gb2JqZWN0LlxuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXRoICh0aGUgXCJ2YWx1ZVwiKSBiZWZvcmUgY29udGludWluZy5cbiAgICAgICAgICBvbGRQYXRoID0gb2xkUGF0aC5zbGljZSgxKTtcbiAgICAgICAgICBuZXdQYXRoID0gbmV3UGF0aC5zbGljZSgxKTtcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICBpZiAob2xkUGF0aC5sZW5ndGggPT09IDApIHsvLyBTaW1wbGUgY29udGV4dCB2YWx1ZSAobm9vcClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW5hbWVQYXRoSW5PYmplY3QoaW5zdGFuY2UuY29udGV4dCwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gY29tcG9uZW50cyB1c2luZyBsZWdhY3kgY29udGV4dCBhcmUgbm90IGVkaXRhYmxlXG4gICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBpbnN0YW5jZSBvbiB3aGljaCB0byBjcmVhdGUgYSBjbG9uZWQsIG11dGF0ZWQgY29udGV4dC5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnaG9va3MnOlxuICAgICAgICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgoZmliZXIsIGhvb2tJRCwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncHJvcHMnOlxuICAgICAgICAgIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aChmaWJlciwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoUmVuYW1lKGluc3RhbmNlLnByb3BzLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3RhdGUnOlxuICAgICAgICAgIHJlbmFtZVBhdGhJbk9iamVjdChpbnN0YW5jZS5zdGF0ZSwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvdmVycmlkZVZhbHVlQXRQYXRoKHR5cGUsIGlkLCBob29rSUQsIHBhdGgsIHZhbHVlKSB7XG4gICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGhCeUlkKGlkKTtcblxuICAgIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgICAgLy8gVG8gc2ltcGxpZnkgaHlkcmF0aW9uIGFuZCBkaXNwbGF5IG9mIHByaW1pdGl2ZSBjb250ZXh0IHZhbHVlcyAoZS5nLiBudW1iZXIsIHN0cmluZylcbiAgICAgICAgICAvLyB0aGUgaW5zcGVjdEVsZW1lbnQoKSBtZXRob2Qgd3JhcHMgY29udGV4dCBpbiBhIHt2YWx1ZTogLi4ufSBvYmplY3QuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGggKHRoZSBcInZhbHVlXCIpIGJlZm9yZSBjb250aW51aW5nLlxuICAgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDEpO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBjb250ZXh0IHZhbHVlXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY29udGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWxzX3NldEluT2JqZWN0KGluc3RhbmNlLmNvbnRleHQsIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgICAgICAvLyBGdW5jdGlvbiBjb21wb25lbnRzIHVzaW5nIGxlZ2FjeSBjb250ZXh0IGFyZSBub3QgZWRpdGFibGVcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGluc3RhbmNlIG9uIHdoaWNoIHRvIGNyZWF0ZSBhIGNsb25lZCwgbXV0YXRlZCBjb250ZXh0LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdob29rcyc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBvdmVycmlkZUhvb2tTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb3ZlcnJpZGVIb29rU3RhdGUoZmliZXIsIGhvb2tJRCwgcGF0aCwgdmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Byb3BzJzpcbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoaW5zdGFuY2UucHJvcHMsIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIG92ZXJyaWRlUHJvcHMoZmliZXIsIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0YXRlJzpcbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgdXRpbHNfc2V0SW5PYmplY3QoaW5zdGFuY2Uuc3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDb21taXRQcm9maWxpbmdNZXRhZGF0YSA9IG51bGw7XG4gIHZhciBkaXNwbGF5TmFtZXNCeVJvb3RJRCA9IG51bGw7XG4gIHZhciBpZFRvQ29udGV4dHNNYXAgPSBudWxsO1xuICB2YXIgaW5pdGlhbFRyZWVCYXNlRHVyYXRpb25zTWFwID0gbnVsbDtcbiAgdmFyIGluaXRpYWxJRFRvUm9vdE1hcCA9IG51bGw7XG4gIHZhciBpc1Byb2ZpbGluZyA9IGZhbHNlO1xuICB2YXIgcHJvZmlsaW5nU3RhcnRUaW1lID0gMDtcbiAgdmFyIHJlY29yZENoYW5nZURlc2NyaXB0aW9ucyA9IGZhbHNlO1xuICB2YXIgcm9vdFRvQ29tbWl0UHJvZmlsaW5nTWV0YWRhdGFNYXAgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGdldFByb2ZpbGluZ0RhdGEoKSB7XG4gICAgdmFyIGRhdGFGb3JSb290cyA9IFtdO1xuXG4gICAgaWYgKHJvb3RUb0NvbW1pdFByb2ZpbGluZ01ldGFkYXRhTWFwID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignZ2V0UHJvZmlsaW5nRGF0YSgpIGNhbGxlZCBiZWZvcmUgYW55IHByb2ZpbGluZyBkYXRhIHdhcyByZWNvcmRlZCcpO1xuICAgIH1cblxuICAgIHJvb3RUb0NvbW1pdFByb2ZpbGluZ01ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdFByb2ZpbGluZ01ldGFkYXRhLCByb290SUQpIHtcbiAgICAgIHZhciBjb21taXREYXRhID0gW107XG4gICAgICB2YXIgaW5pdGlhbFRyZWVCYXNlRHVyYXRpb25zID0gW107XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZXNCeVJvb3RJRCAhPT0gbnVsbCAmJiBkaXNwbGF5TmFtZXNCeVJvb3RJRC5nZXQocm9vdElEKSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmIChpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnNNYXAgIT0gbnVsbCkge1xuICAgICAgICBpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnNNYXAuZm9yRWFjaChmdW5jdGlvbiAodHJlZUJhc2VEdXJhdGlvbiwgaWQpIHtcbiAgICAgICAgICBpZiAoaW5pdGlhbElEVG9Sb290TWFwICE9IG51bGwgJiYgaW5pdGlhbElEVG9Sb290TWFwLmdldChpZCkgPT09IHJvb3RJRCkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IG1pbGxpc2Vjb25kcyB0byBtaWNyb3NlY29uZHMgaW4gdGhpcyBjYXNlLFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgcHJvZmlsaW5nIHN1bW1hcnkgaXMgSlNPTiBzZXJpYWxpemVkLlxuICAgICAgICAgICAgaW5pdGlhbFRyZWVCYXNlRHVyYXRpb25zLnB1c2goW2lkLCB0cmVlQmFzZUR1cmF0aW9uXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29tbWl0UHJvZmlsaW5nTWV0YWRhdGEuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0UHJvZmlsaW5nRGF0YSwgY29tbWl0SW5kZXgpIHtcbiAgICAgICAgdmFyIGNoYW5nZURlc2NyaXB0aW9ucyA9IGNvbW1pdFByb2ZpbGluZ0RhdGEuY2hhbmdlRGVzY3JpcHRpb25zLFxuICAgICAgICAgICAgZHVyYXRpb25zID0gY29tbWl0UHJvZmlsaW5nRGF0YS5kdXJhdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3REdXJhdGlvbiA9IGNvbW1pdFByb2ZpbGluZ0RhdGEuZWZmZWN0RHVyYXRpb24sXG4gICAgICAgICAgICBtYXhBY3R1YWxEdXJhdGlvbiA9IGNvbW1pdFByb2ZpbGluZ0RhdGEubWF4QWN0dWFsRHVyYXRpb24sXG4gICAgICAgICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb24gPSBjb21taXRQcm9maWxpbmdEYXRhLnBhc3NpdmVFZmZlY3REdXJhdGlvbixcbiAgICAgICAgICAgIHByaW9yaXR5TGV2ZWwgPSBjb21taXRQcm9maWxpbmdEYXRhLnByaW9yaXR5TGV2ZWwsXG4gICAgICAgICAgICBjb21taXRUaW1lID0gY29tbWl0UHJvZmlsaW5nRGF0YS5jb21taXRUaW1lLFxuICAgICAgICAgICAgdXBkYXRlcnMgPSBjb21taXRQcm9maWxpbmdEYXRhLnVwZGF0ZXJzO1xuICAgICAgICB2YXIgZmliZXJBY3R1YWxEdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgdmFyIGZpYmVyU2VsZkR1cmF0aW9ucyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHVyYXRpb25zLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgdmFyIGZpYmVySUQgPSBkdXJhdGlvbnNbaV07XG4gICAgICAgICAgZmliZXJBY3R1YWxEdXJhdGlvbnMucHVzaChbZmliZXJJRCwgZHVyYXRpb25zW2kgKyAxXV0pO1xuICAgICAgICAgIGZpYmVyU2VsZkR1cmF0aW9ucy5wdXNoKFtmaWJlcklELCBkdXJhdGlvbnNbaSArIDJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb21taXREYXRhLnB1c2goe1xuICAgICAgICAgIGNoYW5nZURlc2NyaXB0aW9uczogY2hhbmdlRGVzY3JpcHRpb25zICE9PSBudWxsID8gQXJyYXkuZnJvbShjaGFuZ2VEZXNjcmlwdGlvbnMuZW50cmllcygpKSA6IG51bGwsXG4gICAgICAgICAgZHVyYXRpb246IG1heEFjdHVhbER1cmF0aW9uLFxuICAgICAgICAgIGVmZmVjdER1cmF0aW9uOiBlZmZlY3REdXJhdGlvbixcbiAgICAgICAgICBmaWJlckFjdHVhbER1cmF0aW9uczogZmliZXJBY3R1YWxEdXJhdGlvbnMsXG4gICAgICAgICAgZmliZXJTZWxmRHVyYXRpb25zOiBmaWJlclNlbGZEdXJhdGlvbnMsXG4gICAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiBwYXNzaXZlRWZmZWN0RHVyYXRpb24sXG4gICAgICAgICAgcHJpb3JpdHlMZXZlbDogcHJpb3JpdHlMZXZlbCxcbiAgICAgICAgICB0aW1lc3RhbXA6IGNvbW1pdFRpbWUsXG4gICAgICAgICAgdXBkYXRlcnM6IHVwZGF0ZXJzXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkYXRhRm9yUm9vdHMucHVzaCh7XG4gICAgICAgIGNvbW1pdERhdGE6IGNvbW1pdERhdGEsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgICAgaW5pdGlhbFRyZWVCYXNlRHVyYXRpb25zOiBpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnMsXG4gICAgICAgIHJvb3RJRDogcm9vdElEXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgdGltZWxpbmVEYXRhID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgZ2V0VGltZWxpbmVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWVsaW5lRGF0YSA9IGdldFRpbWVsaW5lRGF0YSgpO1xuXG4gICAgICBpZiAoY3VycmVudFRpbWVsaW5lRGF0YSkge1xuICAgICAgICB2YXIgYmF0Y2hVSURUb01lYXN1cmVzTWFwID0gY3VycmVudFRpbWVsaW5lRGF0YS5iYXRjaFVJRFRvTWVhc3VyZXNNYXAsXG4gICAgICAgICAgICBpbnRlcm5hbE1vZHVsZVNvdXJjZVRvUmFuZ2VzID0gY3VycmVudFRpbWVsaW5lRGF0YS5pbnRlcm5hbE1vZHVsZVNvdXJjZVRvUmFuZ2VzLFxuICAgICAgICAgICAgbGFuZVRvTGFiZWxNYXAgPSBjdXJyZW50VGltZWxpbmVEYXRhLmxhbmVUb0xhYmVsTWFwLFxuICAgICAgICAgICAgbGFuZVRvUmVhY3RNZWFzdXJlTWFwID0gY3VycmVudFRpbWVsaW5lRGF0YS5sYW5lVG9SZWFjdE1lYXN1cmVNYXAsXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGN1cnJlbnRUaW1lbGluZURhdGEsIFtcImJhdGNoVUlEVG9NZWFzdXJlc01hcFwiLCBcImludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXNcIiwgXCJsYW5lVG9MYWJlbE1hcFwiLCBcImxhbmVUb1JlYWN0TWVhc3VyZU1hcFwiXSk7XG5cbiAgICAgICAgdGltZWxpbmVEYXRhID0gcmVuZGVyZXJfb2JqZWN0U3ByZWFkKHJlbmRlcmVyX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgICAgLy8gTW9zdCBvZiB0aGUgZGF0YSBpcyBzYWZlIHRvIHBhcnNlIGFzLWlzLFxuICAgICAgICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIG5lc3RlZCBBcnJheXMgYmFjayB0byBNYXBzLlxuICAgICAgICAgIC8vIE1vc3Qgb2YgdGhlIGRhdGEgaXMgc2FmZSB0byBzZXJpYWxpemUgYXMtaXMsXG4gICAgICAgICAgLy8gYnV0IHdlIG5lZWQgdG8gY29udmVydCB0aGUgTWFwcyB0byBuZXN0ZWQgQXJyYXlzLlxuICAgICAgICAgIGJhdGNoVUlEVG9NZWFzdXJlc0tleVZhbHVlQXJyYXk6IEFycmF5LmZyb20oYmF0Y2hVSURUb01lYXN1cmVzTWFwLmVudHJpZXMoKSksXG4gICAgICAgICAgaW50ZXJuYWxNb2R1bGVTb3VyY2VUb1JhbmdlczogQXJyYXkuZnJvbShpbnRlcm5hbE1vZHVsZVNvdXJjZVRvUmFuZ2VzLmVudHJpZXMoKSksXG4gICAgICAgICAgbGFuZVRvTGFiZWxLZXlWYWx1ZUFycmF5OiBBcnJheS5mcm9tKGxhbmVUb0xhYmVsTWFwLmVudHJpZXMoKSksXG4gICAgICAgICAgbGFuZVRvUmVhY3RNZWFzdXJlS2V5VmFsdWVBcnJheTogQXJyYXkuZnJvbShsYW5lVG9SZWFjdE1lYXN1cmVNYXAuZW50cmllcygpKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YUZvclJvb3RzOiBkYXRhRm9yUm9vdHMsXG4gICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgdGltZWxpbmVEYXRhOiB0aW1lbGluZURhdGFcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRQcm9maWxpbmcoc2hvdWxkUmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zKSB7XG4gICAgaWYgKGlzUHJvZmlsaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zID0gc2hvdWxkUmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zOyAvLyBDYXB0dXJlIGluaXRpYWwgdmFsdWVzIGFzIG9mIHRoZSB0aW1lIHByb2ZpbGluZyBzdGFydHMuXG4gICAgLy8gSXQncyBpbXBvcnRhbnQgd2Ugc25hcHNob3QgYm90aCB0aGUgZHVyYXRpb25zIGFuZCB0aGUgaWQtdG8tcm9vdCBtYXAsXG4gICAgLy8gc2luY2UgZWl0aGVyIG9mIHRoZXNlIG1heSBjaGFuZ2UgZHVyaW5nIHRoZSBwcm9maWxpbmcgc2Vzc2lvblxuICAgIC8vIChlLmcuIHdoZW4gYSBmaWJlciBpcyByZS1yZW5kZXJlZCBvciB3aGVuIGEgZmliZXIgZ2V0cyByZW1vdmVkKS5cblxuICAgIGRpc3BsYXlOYW1lc0J5Um9vdElEID0gbmV3IE1hcCgpO1xuICAgIGluaXRpYWxUcmVlQmFzZUR1cmF0aW9uc01hcCA9IG5ldyBNYXAoaWRUb1RyZWVCYXNlRHVyYXRpb25NYXApO1xuICAgIGluaXRpYWxJRFRvUm9vdE1hcCA9IG5ldyBNYXAoaWRUb1Jvb3RNYXApO1xuICAgIGlkVG9Db250ZXh0c01hcCA9IG5ldyBNYXAoKTtcbiAgICBob29rLmdldEZpYmVyUm9vdHMocmVuZGVyZXJJRCkuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIHJvb3RJRCA9IGdldEZpYmVySURUaHJvd3Mocm9vdC5jdXJyZW50KTtcbiAgICAgIGRpc3BsYXlOYW1lc0J5Um9vdElELnNldChyb290SUQsIGdldERpc3BsYXlOYW1lRm9yUm9vdChyb290LmN1cnJlbnQpKTtcblxuICAgICAgaWYgKHNob3VsZFJlY29yZENoYW5nZURlc2NyaXB0aW9ucykge1xuICAgICAgICAvLyBSZWNvcmQgYWxsIGNvbnRleHRzIGF0IHRoZSB0aW1lIHByb2ZpbGluZyBpcyBzdGFydGVkLlxuICAgICAgICAvLyBGaWJlcnMgb25seSBzdG9yZSB0aGUgY3VycmVudCBjb250ZXh0IHZhbHVlLFxuICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHRyYWNrIHRoZW0gc2VwYXJhdGVseSBpbiBvcmRlciB0byBkZXRlcm1pbmUgY2hhbmdlZCBrZXlzLlxuICAgICAgICBjcmF3bFRvSW5pdGlhbGl6ZUNvbnRleHRzTWFwKHJvb3QuY3VycmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaXNQcm9maWxpbmcgPSB0cnVlO1xuICAgIHByb2ZpbGluZ1N0YXJ0VGltZSA9IHJlbmRlcmVyX2dldEN1cnJlbnRUaW1lKCk7XG4gICAgcm9vdFRvQ29tbWl0UHJvZmlsaW5nTWV0YWRhdGFNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICBpZiAodG9nZ2xlUHJvZmlsaW5nU3RhdHVzICE9PSBudWxsKSB7XG4gICAgICB0b2dnbGVQcm9maWxpbmdTdGF0dXModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcFByb2ZpbGluZygpIHtcbiAgICBpc1Byb2ZpbGluZyA9IGZhbHNlO1xuICAgIHJlY29yZENoYW5nZURlc2NyaXB0aW9ucyA9IGZhbHNlO1xuXG4gICAgaWYgKHRvZ2dsZVByb2ZpbGluZ1N0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgdG9nZ2xlUHJvZmlsaW5nU3RhdHVzKGZhbHNlKTtcbiAgICB9XG4gIH0gLy8gQXV0b21hdGljYWxseSBzdGFydCBwcm9maWxpbmcgc28gdGhhdCB3ZSBkb24ndCBtaXNzIHRpbWluZyBpbmZvIGZyb20gaW5pdGlhbCBcIm1vdW50XCIuXG5cblxuICBpZiAoc2Vzc2lvblN0b3JhZ2VHZXRJdGVtKFNFU1NJT05fU1RPUkFHRV9SRUxPQURfQU5EX1BST0ZJTEVfS0VZKSA9PT0gJ3RydWUnKSB7XG4gICAgc3RhcnRQcm9maWxpbmcoc2Vzc2lvblN0b3JhZ2VHZXRJdGVtKFNFU1NJT05fU1RPUkFHRV9SRUNPUkRfQ0hBTkdFX0RFU0NSSVBUSU9OU19LRVkpID09PSAndHJ1ZScpO1xuICB9IC8vIFJlYWN0IHdpbGwgc3dpdGNoIGJldHdlZW4gdGhlc2UgaW1wbGVtZW50YXRpb25zIGRlcGVuZGluZyBvbiB3aGV0aGVyXG4gIC8vIHdlIGhhdmUgYW55IG1hbnVhbGx5IHN1c3BlbmRlZC9lcnJvcmVkLW91dCBGaWJlcnMgb3Igbm90LlxuXG5cbiAgZnVuY3Rpb24gc2hvdWxkRXJyb3JGaWJlckFsd2F5c051bGwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTWFwIG9mIGlkIGFuZCBpdHMgZm9yY2UgZXJyb3Igc3RhdHVzOiB0cnVlIChlcnJvciksIGZhbHNlICh0b2dnbGVkIG9mZiksXG4gIC8vIG51bGwgKGRvIG5vdGhpbmcpXG5cblxuICB2YXIgZm9yY2VFcnJvckZvckZpYmVySURzID0gbmV3IE1hcCgpO1xuXG4gIGZ1bmN0aW9uIHNob3VsZEVycm9yRmliZXJBY2NvcmRpbmdUb01hcChmaWJlcikge1xuICAgIGlmICh0eXBlb2Ygc2V0RXJyb3JIYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG92ZXJyaWRlRXJyb3IoKSB0byBub3QgZ2V0IGNhbGxlZCBmb3IgZWFybGllciBSZWFjdCB2ZXJzaW9ucy4nKTtcbiAgICB9XG5cbiAgICB2YXIgaWQgPSBnZXRGaWJlcklEVW5zYWZlKGZpYmVyKTtcblxuICAgIGlmIChpZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAoZm9yY2VFcnJvckZvckZpYmVySURzLmhhcyhpZCkpIHtcbiAgICAgIHN0YXR1cyA9IGZvcmNlRXJyb3JGb3JGaWJlcklEcy5nZXQoaWQpO1xuXG4gICAgICBpZiAoc3RhdHVzID09PSBmYWxzZSkge1xuICAgICAgICAvLyBUUklDS1kgb3ZlcnJpZGVFcnJvciBhZGRzIGVudHJpZXMgdG8gdGhpcyBNYXAsXG4gICAgICAgIC8vIHNvIGlkZWFsbHkgaXQgd291bGQgYmUgdGhlIG1ldGhvZCB0aGF0IGNsZWFycyB0aGVtIHRvbyxcbiAgICAgICAgLy8gYnV0IHRoYXQgd291bGQgYnJlYWsgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZlYXR1cmUsXG4gICAgICAgIC8vIHNpbmNlIERldlRvb2xzIG5lZWRzIHRvIHRlbGwgUmVhY3QgdG8gYWN0IGRpZmZlcmVudGx5IHRoYW4gaXQgbm9ybWFsbHkgd291bGRcbiAgICAgICAgLy8gKGRvbid0IGp1c3QgcmUtcmVuZGVyIHRoZSBmYWlsZWQgYm91bmRhcnksIGJ1dCByZXNldCBpdHMgZXJyb3JlZCBzdGF0ZSB0b28pLlxuICAgICAgICAvLyBTbyB3ZSBjYW4gb25seSBjbGVhciBpdCBhZnRlciB0ZWxsaW5nIFJlYWN0IHRvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICAgICAgLy8gVGVjaG5pY2FsbHkgdGhpcyBpcyBwcmVtYXR1cmUgYW5kIHdlIHNob3VsZCBzY2hlZHVsZSBpdCBmb3IgbGF0ZXIsXG4gICAgICAgIC8vIHNpbmNlIHRoZSByZW5kZXIgY291bGQgYWx3YXlzIGZhaWwgd2l0aG91dCBjb21taXR0aW5nIHRoZSB1cGRhdGVkIGVycm9yIGJvdW5kYXJ5LFxuICAgICAgICAvLyBidXQgc2luY2UgdGhpcyBpcyBhIERFVi1vbmx5IGZlYXR1cmUsIHRoZSBzaW1wbGljaXR5IGlzIHdvcnRoIHRoZSB0cmFkZSBvZmYuXG4gICAgICAgIGZvcmNlRXJyb3JGb3JGaWJlcklEcy5kZWxldGUoaWQpO1xuXG4gICAgICAgIGlmIChmb3JjZUVycm9yRm9yRmliZXJJRHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIC8vIExhc3Qgb3ZlcnJpZGUgaXMgZ29uZS4gU3dpdGNoIFJlYWN0IGJhY2sgdG8gZmFzdCBwYXRoLlxuICAgICAgICAgIHNldEVycm9ySGFuZGxlcihzaG91bGRFcnJvckZpYmVyQWx3YXlzTnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgZnVuY3Rpb24gb3ZlcnJpZGVFcnJvcihpZCwgZm9yY2VFcnJvcikge1xuICAgIGlmICh0eXBlb2Ygc2V0RXJyb3JIYW5kbGVyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzY2hlZHVsZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBvdmVycmlkZUVycm9yKCkgdG8gbm90IGdldCBjYWxsZWQgZm9yIGVhcmxpZXIgUmVhY3QgdmVyc2lvbnMuJyk7XG4gICAgfVxuXG4gICAgZm9yY2VFcnJvckZvckZpYmVySURzLnNldChpZCwgZm9yY2VFcnJvcik7XG5cbiAgICBpZiAoZm9yY2VFcnJvckZvckZpYmVySURzLnNpemUgPT09IDEpIHtcbiAgICAgIC8vIEZpcnN0IG92ZXJyaWRlIGlzIGFkZGVkLiBTd2l0Y2ggUmVhY3QgdG8gc2xvd2VyIHBhdGguXG4gICAgICBzZXRFcnJvckhhbmRsZXIoc2hvdWxkRXJyb3JGaWJlckFjY29yZGluZ1RvTWFwKTtcbiAgICB9XG5cbiAgICB2YXIgZmliZXIgPSBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChmaWJlciAhPSBudWxsKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZShmaWJlcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkU3VzcGVuZEZpYmVyQWx3YXlzRmFsc2UoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGZvcmNlRmFsbGJhY2tGb3JTdXNwZW5zZUlEcyA9IG5ldyBTZXQoKTtcblxuICBmdW5jdGlvbiBzaG91bGRTdXNwZW5kRmliZXJBY2NvcmRpbmdUb1NldChmaWJlcikge1xuICAgIHZhciBtYXliZUlEID0gZ2V0RmliZXJJRFVuc2FmZShmaWJlcik7XG4gICAgcmV0dXJuIG1heWJlSUQgIT09IG51bGwgJiYgZm9yY2VGYWxsYmFja0ZvclN1c3BlbnNlSURzLmhhcyhtYXliZUlEKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG92ZXJyaWRlU3VzcGVuc2UoaWQsIGZvcmNlRmFsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIHNldFN1c3BlbnNlSGFuZGxlciAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygc2NoZWR1bGVVcGRhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgb3ZlcnJpZGVTdXNwZW5zZSgpIHRvIG5vdCBnZXQgY2FsbGVkIGZvciBlYXJsaWVyIFJlYWN0IHZlcnNpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChmb3JjZUZhbGxiYWNrKSB7XG4gICAgICBmb3JjZUZhbGxiYWNrRm9yU3VzcGVuc2VJRHMuYWRkKGlkKTtcblxuICAgICAgaWYgKGZvcmNlRmFsbGJhY2tGb3JTdXNwZW5zZUlEcy5zaXplID09PSAxKSB7XG4gICAgICAgIC8vIEZpcnN0IG92ZXJyaWRlIGlzIGFkZGVkLiBTd2l0Y2ggUmVhY3QgdG8gc2xvd2VyIHBhdGguXG4gICAgICAgIHNldFN1c3BlbnNlSGFuZGxlcihzaG91bGRTdXNwZW5kRmliZXJBY2NvcmRpbmdUb1NldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcmNlRmFsbGJhY2tGb3JTdXNwZW5zZUlEcy5kZWxldGUoaWQpO1xuXG4gICAgICBpZiAoZm9yY2VGYWxsYmFja0ZvclN1c3BlbnNlSURzLnNpemUgPT09IDApIHtcbiAgICAgICAgLy8gTGFzdCBvdmVycmlkZSBpcyBnb25lLiBTd2l0Y2ggUmVhY3QgYmFjayB0byBmYXN0IHBhdGguXG4gICAgICAgIHNldFN1c3BlbnNlSGFuZGxlcihzaG91bGRTdXNwZW5kRmliZXJBbHdheXNGYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZpYmVyID0gaWRUb0FyYml0cmFyeUZpYmVyTWFwLmdldChpZCk7XG5cbiAgICBpZiAoZmliZXIgIT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGUoZmliZXIpO1xuICAgIH1cbiAgfSAvLyBSZW1lbWJlciBpZiB3ZSdyZSB0cnlpbmcgdG8gcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGFmdGVyIHJlbG9hZC5cbiAgLy8gSW4gdGhhdCBjYXNlLCB3ZSdsbCBkbyBzb21lIGV4dHJhIGNoZWNrcyBmb3IgbWF0Y2hpbmcgbW91bnRzLlxuXG5cbiAgdmFyIHRyYWNrZWRQYXRoID0gbnVsbDtcbiAgdmFyIHRyYWNrZWRQYXRoTWF0Y2hGaWJlciA9IG51bGw7XG4gIHZhciB0cmFja2VkUGF0aE1hdGNoRGVwdGggPSAtMTtcbiAgdmFyIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gc2V0VHJhY2tlZFBhdGgocGF0aCkge1xuICAgIGlmIChwYXRoID09PSBudWxsKSB7XG4gICAgICB0cmFja2VkUGF0aE1hdGNoRmliZXIgPSBudWxsO1xuICAgICAgdHJhY2tlZFBhdGhNYXRjaERlcHRoID0gLTE7XG4gICAgICBtaWdodEJlT25UcmFja2VkUGF0aCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRyYWNrZWRQYXRoID0gcGF0aDtcbiAgfSAvLyBXZSBjYWxsIHRoaXMgYmVmb3JlIHRyYXZlcnNpbmcgYSBuZXcgbW91bnQuXG4gIC8vIEl0IHJlbWVtYmVycyB3aGV0aGVyIHRoaXMgRmliZXIgaXMgdGhlIG5leHQgYmVzdCBtYXRjaCBmb3IgdHJhY2tlZCBwYXRoLlxuICAvLyBUaGUgcmV0dXJuIHZhbHVlIHNpZ25hbHMgd2hldGhlciB3ZSBzaG91bGQga2VlcCBtYXRjaGluZyBzaWJsaW5ncyBvciBub3QuXG5cblxuICBmdW5jdGlvbiB1cGRhdGVUcmFja2VkUGF0aFN0YXRlQmVmb3JlTW91bnQoZmliZXIpIHtcbiAgICBpZiAodHJhY2tlZFBhdGggPT09IG51bGwgfHwgIW1pZ2h0QmVPblRyYWNrZWRQYXRoKSB7XG4gICAgICAvLyBGYXN0IHBhdGg6IHRoZXJlJ3Mgbm90aGluZyB0byB0cmFjayBzbyBkbyBub3RoaW5nIGFuZCBpZ25vcmUgc2libGluZ3MuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHJldHVybkZpYmVyID0gZmliZXIucmV0dXJuO1xuICAgIHZhciByZXR1cm5BbHRlcm5hdGUgPSByZXR1cm5GaWJlciAhPT0gbnVsbCA/IHJldHVybkZpYmVyLmFsdGVybmF0ZSA6IG51bGw7IC8vIEJ5IG5vdyB3ZSBrbm93IHRoZXJlJ3Mgc29tZSBzZWxlY3Rpb24gdG8gcmVzdG9yZSwgYW5kIHRoaXMgaXMgYSBuZXcgRmliZXIuXG4gICAgLy8gSXMgdGhpcyBuZXdseSBtb3VudGVkIEZpYmVyIGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBjdXJyZW50IGJlc3QgbWF0Y2g/XG4gICAgLy8gKFRoaXMgd2lsbCBhbHNvIGJlIHRydWUgZm9yIG5ldyByb290cyBpZiB3ZSBoYXZlbid0IG1hdGNoZWQgYW55dGhpbmcgeWV0LilcblxuICAgIGlmICh0cmFja2VkUGF0aE1hdGNoRmliZXIgPT09IHJldHVybkZpYmVyIHx8IHRyYWNrZWRQYXRoTWF0Y2hGaWJlciA9PT0gcmV0dXJuQWx0ZXJuYXRlICYmIHJldHVybkFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gSXMgdGhpcyB0aGUgbmV4dCBGaWJlciB3ZSBzaG91bGQgc2VsZWN0PyBMZXQncyBjb21wYXJlIHRoZSBmcmFtZXMuXG4gICAgICB2YXIgYWN0dWFsRnJhbWUgPSBnZXRQYXRoRnJhbWUoZmliZXIpOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgdmFyIGV4cGVjdGVkRnJhbWUgPSB0cmFja2VkUGF0aFt0cmFja2VkUGF0aE1hdGNoRGVwdGggKyAxXTtcblxuICAgICAgaWYgKGV4cGVjdGVkRnJhbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHNlZSBhIGZyYW1lIGF0IHRoZSBuZXh0IGRlcHRoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0dWFsRnJhbWUuaW5kZXggPT09IGV4cGVjdGVkRnJhbWUuaW5kZXggJiYgYWN0dWFsRnJhbWUua2V5ID09PSBleHBlY3RlZEZyYW1lLmtleSAmJiBhY3R1YWxGcmFtZS5kaXNwbGF5TmFtZSA9PT0gZXhwZWN0ZWRGcmFtZS5kaXNwbGF5TmFtZSkge1xuICAgICAgICAvLyBXZSBoYXZlIG91ciBuZXh0IG1hdGNoLlxuICAgICAgICB0cmFja2VkUGF0aE1hdGNoRmliZXIgPSBmaWJlcjtcbiAgICAgICAgdHJhY2tlZFBhdGhNYXRjaERlcHRoKys7IC8vIEFyZSB3ZSBvdXQgb2YgZnJhbWVzIHRvIG1hdGNoP1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICBpZiAodHJhY2tlZFBhdGhNYXRjaERlcHRoID09PSB0cmFja2VkUGF0aC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgLy8gVGhlcmUncyBub3RoaW5nIHRoYXQgY2FuIHBvc3NpYmx5IG1hdGNoIGFmdGVyd2FyZHMuXG4gICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgdGhlIGNoaWxkcmVuLlxuICAgICAgICAgIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2hlY2sgdGhlIGNoaWxkcmVuLCBhcyB0aGV5IG1pZ2h0IHJldmVhbCB0aGUgbmV4dCBtYXRjaC5cbiAgICAgICAgICBtaWdodEJlT25UcmFja2VkUGF0aCA9IHRydWU7XG4gICAgICAgIH0gLy8gSW4gZWl0aGVyIGNhc2UsIHNpbmNlIHdlIGhhdmUgYSBtYXRjaCwgd2UgZG9uJ3QgbmVlZFxuICAgICAgICAvLyB0byBjaGVjayB0aGUgc2libGluZ3MuIFRoZXknbGwgbmV2ZXIgbWF0Y2guXG5cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSAvLyBUaGlzIEZpYmVyJ3MgcGFyZW50IGlzIG9uIHRoZSBwYXRoLCBidXQgdGhpcyBGaWJlciBpdHNlbGYgaXNuJ3QuXG4gICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIGNoZWNrIGl0cyBjaGlsZHJlbi0tdGhleSB3b24ndCBiZSBvbiB0aGUgcGF0aCBlaXRoZXIuXG5cblxuICAgIG1pZ2h0QmVPblRyYWNrZWRQYXRoID0gZmFsc2U7IC8vIEhvd2V2ZXIsIG9uZSBvZiBpdHMgc2libGluZ3MgbWF5IGJlIG9uIHRoZSBwYXRoIHNvIGtlZXAgc2VhcmNoaW5nLlxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVUcmFja2VkUGF0aFN0YXRlQWZ0ZXJNb3VudChtaWdodFNpYmxpbmdzQmVPblRyYWNrZWRQYXRoKSB7XG4gICAgLy8gdXBkYXRlVHJhY2tlZFBhdGhTdGF0ZUJlZm9yZU1vdW50KCkgdG9sZCB1cyB3aGV0aGVyIHRvIG1hdGNoIHNpYmxpbmdzLlxuICAgIC8vIE5vdyB0aGF0IHdlJ3JlIGVudGVyaW5nIHNpYmxpbmdzLCBsZXQncyB1c2UgdGhhdCBpbmZvcm1hdGlvbi5cbiAgICBtaWdodEJlT25UcmFja2VkUGF0aCA9IG1pZ2h0U2libGluZ3NCZU9uVHJhY2tlZFBhdGg7XG4gIH0gLy8gUm9vdHMgZG9uJ3QgaGF2ZSBhIHJlYWwgcGVyc2lzdGVudCBpZGVudGl0eS5cbiAgLy8gQSByb290J3MgXCJwc2V1ZG8ga2V5XCIgaXMgXCJjaGlsZERpc3BsYXlOYW1lOmluZGV4V2l0aFRoYXROYW1lXCIuXG4gIC8vIEZvciBleGFtcGxlLCBcIkFwcDowXCIgb3IsIGluIGNhc2Ugb2Ygc2ltaWxhciByb290cywgXCJTdG9yeTowXCIsIFwiU3Rvcnk6MVwiLCBldGMuXG4gIC8vIFdlIHdpbGwgdXNlIHRoaXMgdG8gdHJ5IHRvIGRpc2FtYmlndWF0ZSByb290cyB3aGVuIHJlc3RvcmluZyBzZWxlY3Rpb24gYmV0d2VlbiByZWxvYWRzLlxuXG5cbiAgdmFyIHJvb3RQc2V1ZG9LZXlzID0gbmV3IE1hcCgpO1xuICB2YXIgcm9vdERpc3BsYXlOYW1lQ291bnRlciA9IG5ldyBNYXAoKTtcblxuICBmdW5jdGlvbiBzZXRSb290UHNldWRvS2V5KGlkLCBmaWJlcikge1xuICAgIHZhciBuYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JSb290KGZpYmVyKTtcbiAgICB2YXIgY291bnRlciA9IHJvb3REaXNwbGF5TmFtZUNvdW50ZXIuZ2V0KG5hbWUpIHx8IDA7XG4gICAgcm9vdERpc3BsYXlOYW1lQ291bnRlci5zZXQobmFtZSwgY291bnRlciArIDEpO1xuICAgIHZhciBwc2V1ZG9LZXkgPSBcIlwiLmNvbmNhdChuYW1lLCBcIjpcIikuY29uY2F0KGNvdW50ZXIpO1xuICAgIHJvb3RQc2V1ZG9LZXlzLnNldChpZCwgcHNldWRvS2V5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVJvb3RQc2V1ZG9LZXkoaWQpIHtcbiAgICB2YXIgcHNldWRvS2V5ID0gcm9vdFBzZXVkb0tleXMuZ2V0KGlkKTtcblxuICAgIGlmIChwc2V1ZG9LZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByb290IHBzZXVkbyBrZXkgdG8gYmUga25vd24uJyk7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBwc2V1ZG9LZXkuc2xpY2UoMCwgcHNldWRvS2V5Lmxhc3RJbmRleE9mKCc6JykpO1xuICAgIHZhciBjb3VudGVyID0gcm9vdERpc3BsYXlOYW1lQ291bnRlci5nZXQobmFtZSk7XG5cbiAgICBpZiAoY291bnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGNvdW50ZXIgdG8gYmUga25vd24uJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50ZXIgPiAxKSB7XG4gICAgICByb290RGlzcGxheU5hbWVDb3VudGVyLnNldChuYW1lLCBjb3VudGVyIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3REaXNwbGF5TmFtZUNvdW50ZXIuZGVsZXRlKG5hbWUpO1xuICAgIH1cblxuICAgIHJvb3RQc2V1ZG9LZXlzLmRlbGV0ZShpZCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZUZvclJvb3QoZmliZXIpIHtcbiAgICB2YXIgcHJlZmVycmVkRGlzcGxheU5hbWUgPSBudWxsO1xuICAgIHZhciBmYWxsYmFja0Rpc3BsYXlOYW1lID0gbnVsbDtcbiAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDsgLy8gR28gYXQgbW9zdCB0aHJlZSBsZXZlbHMgZGVlcCBpbnRvIGRpcmVjdCBjaGlsZHJlblxuICAgIC8vIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBjaGlsZCB0aGF0IGhhcyBhIGRpc3BsYXlOYW1lLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgIGlmIChjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWVGb3JGaWJlcihjaGlsZCk7XG5cbiAgICAgIGlmIChkaXNwbGF5TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBQcmVmZXIgZGlzcGxheSBuYW1lcyB0aGF0IHdlIGdldCBmcm9tIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLlxuICAgICAgICAvLyBXZSB3YW50IHRvIGF2b2lkIHVzaW5nIGUuZy4gJ1N1c3BlbnNlJyB1bmxlc3Mgd2UgZmluZCBub3RoaW5nIGVsc2UuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFRoZXJlJ3MgYSBmZXcgdXNlci1kZWZpbmVkIHRhZ3MsIGJ1dCB3ZSdsbCBwcmVmZXIgdGhlIG9uZXNcbiAgICAgICAgICAvLyB0aGF0IGFyZSB1c3VhbGx5IGV4cGxpY2l0bHkgbmFtZWQgKGZ1bmN0aW9uIG9yIGNsYXNzIGNvbXBvbmVudHMpLlxuICAgICAgICAgIHByZWZlcnJlZERpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZmFsbGJhY2tEaXNwbGF5TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGZhbGxiYWNrRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocHJlZmVycmVkRGlzcGxheU5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuY2hpbGQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWZlcnJlZERpc3BsYXlOYW1lIHx8IGZhbGxiYWNrRGlzcGxheU5hbWUgfHwgJ0Fub255bW91cyc7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQYXRoRnJhbWUoZmliZXIpIHtcbiAgICB2YXIga2V5ID0gZmliZXIua2V5O1xuICAgIHZhciBkaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lRm9yRmliZXIoZmliZXIpO1xuICAgIHZhciBpbmRleCA9IGZpYmVyLmluZGV4O1xuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIC8vIFJvb3RzIGRvbid0IGhhdmUgYSByZWFsIGRpc3BsYXlOYW1lLCBpbmRleCwgb3Iga2V5LlxuICAgICAgICAvLyBJbnN0ZWFkLCB3ZSdsbCB1c2UgdGhlIHBzZXVkbyBrZXkgKGNoaWxkRGlzcGxheU5hbWU6aW5kZXhXaXRoVGhhdE5hbWUpLlxuICAgICAgICB2YXIgaWQgPSBnZXRGaWJlcklEVGhyb3dzKGZpYmVyKTtcbiAgICAgICAgdmFyIHBzZXVkb0tleSA9IHJvb3RQc2V1ZG9LZXlzLmdldChpZCk7XG5cbiAgICAgICAgaWYgKHBzZXVkb0tleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBtb3VudGVkIHJvb3QgdG8gaGF2ZSBrbm93biBwc2V1ZG8ga2V5LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlzcGxheU5hbWUgPSBwc2V1ZG9LZXk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGRpc3BsYXlOYW1lID0gZmliZXIudHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH07XG4gIH0gLy8gUHJvZHVjZXMgYSBzZXJpYWxpemFibGUgcmVwcmVzZW50YXRpb24gdGhhdCBkb2VzIGEgYmVzdCBlZmZvcnRcbiAgLy8gb2YgaWRlbnRpZnlpbmcgYSBwYXJ0aWN1bGFyIEZpYmVyIGJldHdlZW4gcGFnZSByZWxvYWRzLlxuICAvLyBUaGUgcmV0dXJuIHBhdGggd2lsbCBjb250YWluIEZpYmVycyB0aGF0IGFyZSBcImludmlzaWJsZVwiIHRvIHRoZSBzdG9yZVxuICAvLyBiZWNhdXNlIHRoZWlyIGtleXMgYW5kIGluZGV4ZXMgYXJlIGltcG9ydGFudCB0byByZXN0b3JpbmcgdGhlIHNlbGVjdGlvbi5cblxuXG4gIGZ1bmN0aW9uIGdldFBhdGhGb3JFbGVtZW50KGlkKSB7XG4gICAgdmFyIGZpYmVyID0gaWRUb0FyYml0cmFyeUZpYmVyTWFwLmdldChpZCk7XG5cbiAgICBpZiAoZmliZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGtleVBhdGggPSBbXTtcblxuICAgIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAga2V5UGF0aC5wdXNoKGdldFBhdGhGcmFtZShmaWJlcikpOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgfVxuXG4gICAga2V5UGF0aC5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIGtleVBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCZXN0TWF0Y2hGb3JUcmFja2VkUGF0aCgpIHtcbiAgICBpZiAodHJhY2tlZFBhdGggPT09IG51bGwpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gbWF0Y2guXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHJhY2tlZFBhdGhNYXRjaEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhbnl0aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gRmluZCB0aGUgY2xvc2VzdCBGaWJlciBzdG9yZSBpcyBhd2FyZSBvZi5cblxuXG4gICAgdmFyIGZpYmVyID0gdHJhY2tlZFBhdGhNYXRjaEZpYmVyO1xuXG4gICAgd2hpbGUgKGZpYmVyICE9PSBudWxsICYmIHNob3VsZEZpbHRlckZpYmVyKGZpYmVyKSkge1xuICAgICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGdldEZpYmVySURUaHJvd3MoZmliZXIpLFxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICBpc0Z1bGxNYXRjaDogdHJhY2tlZFBhdGhNYXRjaERlcHRoID09PSB0cmFja2VkUGF0aC5sZW5ndGggLSAxXG4gICAgfTtcbiAgfVxuXG4gIHZhciBmb3JtYXRQcmlvcml0eUxldmVsID0gZnVuY3Rpb24gZm9ybWF0UHJpb3JpdHlMZXZlbChwcmlvcml0eUxldmVsKSB7XG4gICAgaWYgKHByaW9yaXR5TGV2ZWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICAgIHJldHVybiAnSW1tZWRpYXRlJztcblxuICAgICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgICAgcmV0dXJuICdVc2VyLUJsb2NraW5nJztcblxuICAgICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuXG4gICAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgICByZXR1cm4gJ0xvdyc7XG5cbiAgICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgICByZXR1cm4gJ0lkbGUnO1xuXG4gICAgICBjYXNlIE5vUHJpb3JpdHk6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzZXRUcmFjZVVwZGF0ZXNFbmFibGVkKGlzRW5hYmxlZCkge1xuICAgIHRyYWNlVXBkYXRlc0VuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBoYXNGaWJlcldpdGhJZChpZCkge1xuICAgIHJldHVybiBpZFRvQXJiaXRyYXJ5RmliZXJNYXAuaGFzKGlkKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xlYW51cDogY2xlYW51cCxcbiAgICBjbGVhckVycm9yc0FuZFdhcm5pbmdzOiBjbGVhckVycm9yc0FuZFdhcm5pbmdzLFxuICAgIGNsZWFyRXJyb3JzRm9yRmliZXJJRDogY2xlYXJFcnJvcnNGb3JGaWJlcklELFxuICAgIGNsZWFyV2FybmluZ3NGb3JGaWJlcklEOiBjbGVhcldhcm5pbmdzRm9yRmliZXJJRCxcbiAgICBnZXRTZXJpYWxpemVkRWxlbWVudFZhbHVlQnlQYXRoOiBnZXRTZXJpYWxpemVkRWxlbWVudFZhbHVlQnlQYXRoLFxuICAgIGRlbGV0ZVBhdGg6IGRlbGV0ZVBhdGgsXG4gICAgZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRDogZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRCxcbiAgICBmbHVzaEluaXRpYWxPcGVyYXRpb25zOiBmbHVzaEluaXRpYWxPcGVyYXRpb25zLFxuICAgIGdldEJlc3RNYXRjaEZvclRyYWNrZWRQYXRoOiBnZXRCZXN0TWF0Y2hGb3JUcmFja2VkUGF0aCxcbiAgICBnZXREaXNwbGF5TmFtZUZvckZpYmVySUQ6IGdldERpc3BsYXlOYW1lRm9yRmliZXJJRCxcbiAgICBnZXRGaWJlckZvck5hdGl2ZTogZ2V0RmliZXJGb3JOYXRpdmUsXG4gICAgZ2V0RmliZXJJREZvck5hdGl2ZTogZ2V0RmliZXJJREZvck5hdGl2ZSxcbiAgICBnZXRJbnN0YW5jZUFuZFN0eWxlOiBnZXRJbnN0YW5jZUFuZFN0eWxlLFxuICAgIGdldE93bmVyc0xpc3Q6IGdldE93bmVyc0xpc3QsXG4gICAgZ2V0UGF0aEZvckVsZW1lbnQ6IGdldFBhdGhGb3JFbGVtZW50LFxuICAgIGdldFByb2ZpbGluZ0RhdGE6IGdldFByb2ZpbGluZ0RhdGEsXG4gICAgaGFuZGxlQ29tbWl0RmliZXJSb290OiBoYW5kbGVDb21taXRGaWJlclJvb3QsXG4gICAgaGFuZGxlQ29tbWl0RmliZXJVbm1vdW50OiBoYW5kbGVDb21taXRGaWJlclVubW91bnQsXG4gICAgaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdDogaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdCxcbiAgICBoYXNGaWJlcldpdGhJZDogaGFzRmliZXJXaXRoSWQsXG4gICAgaW5zcGVjdEVsZW1lbnQ6IGluc3BlY3RFbGVtZW50LFxuICAgIGxvZ0VsZW1lbnRUb0NvbnNvbGU6IGxvZ0VsZW1lbnRUb0NvbnNvbGUsXG4gICAgcGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZTogcGF0Y2hGb3JTdHJpY3RNb2RlLFxuICAgIHByZXBhcmVWaWV3QXR0cmlidXRlU291cmNlOiBwcmVwYXJlVmlld0F0dHJpYnV0ZVNvdXJjZSxcbiAgICBwcmVwYXJlVmlld0VsZW1lbnRTb3VyY2U6IHByZXBhcmVWaWV3RWxlbWVudFNvdXJjZSxcbiAgICBvdmVycmlkZUVycm9yOiBvdmVycmlkZUVycm9yLFxuICAgIG92ZXJyaWRlU3VzcGVuc2U6IG92ZXJyaWRlU3VzcGVuc2UsXG4gICAgb3ZlcnJpZGVWYWx1ZUF0UGF0aDogb3ZlcnJpZGVWYWx1ZUF0UGF0aCxcbiAgICByZW5hbWVQYXRoOiByZW5hbWVQYXRoLFxuICAgIHJlbmRlcmVyOiByZW5kZXJlcixcbiAgICBzZXRUcmFjZVVwZGF0ZXNFbmFibGVkOiBzZXRUcmFjZVVwZGF0ZXNFbmFibGVkLFxuICAgIHNldFRyYWNrZWRQYXRoOiBzZXRUcmFja2VkUGF0aCxcbiAgICBzdGFydFByb2ZpbGluZzogc3RhcnRQcm9maWxpbmcsXG4gICAgc3RvcFByb2ZpbGluZzogc3RvcFByb2ZpbGluZyxcbiAgICBzdG9yZUFzR2xvYmFsOiBzdG9yZUFzR2xvYmFsLFxuICAgIHVucGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZTogdW5wYXRjaEZvclN0cmljdE1vZGUsXG4gICAgdXBkYXRlQ29tcG9uZW50RmlsdGVyczogdXBkYXRlQ29tcG9uZW50RmlsdGVyc1xuICB9O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9jb25zb2xlLmpzXG5mdW5jdGlvbiBjb25zb2xlX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gY29uc29sZV9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGNvbnNvbGVfaXRlcmFibGVUb0FycmF5KGFycikgfHwgY29uc29sZV91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IGNvbnNvbGVfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBjb25zb2xlX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBjb25zb2xlX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIGNvbnNvbGVfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBjb25zb2xlX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBjb25zb2xlX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0OyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBvW1N5bWJvbC5pdGVyYXRvcl0gPT0gbnVsbCkgeyBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBjb25zb2xlX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gb1tTeW1ib2wuaXRlcmF0b3JdKCk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIGNvbnNvbGVfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBjb25zb2xlX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBjb25zb2xlX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBjb25zb2xlX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuXG5cbnZhciBPVkVSUklERV9DT05TT0xFX01FVEhPRFMgPSBbJ2Vycm9yJywgJ3RyYWNlJywgJ3dhcm4nXTtcbnZhciBESU1NRURfTk9ERV9DT05TT0xFX0NPTE9SID0gJ1xceDFiWzJtJXNcXHgxYlswbSc7IC8vIFJlYWN0J3MgY3VzdG9tIGJ1aWx0IGNvbXBvbmVudCBzdGFjayBzdHJpbmdzIG1hdGNoIFwiXFxzezR9aW5cIlxuLy8gQ2hyb21lJ3MgcHJlZml4IG1hdGNoZXMgXCJcXHN7NH1hdFwiXG5cbnZhciBQUkVGSVhfUkVHRVggPSAvXFxzezR9KGlufGF0KVxcc3sxfS87IC8vIEZpcmVmb3ggYW5kIFNhZmFyaSBoYXZlIG5vIHByZWZpeCAoXCJcIilcbi8vIGJ1dCB3ZSBjYW4gZmFsbGJhY2sgdG8gbG9va2luZyBmb3IgbG9jYXRpb24gaW5mbyAoZS5nLiBcImZvby5qczoxMjozNDVcIilcblxudmFyIFJPV19DT0xVTU5fTlVNQkVSX1JFR0VYID0gLzpcXGQrOlxcZCsoXFxufCQpLztcbmZ1bmN0aW9uIGlzU3RyaW5nQ29tcG9uZW50U3RhY2sodGV4dCkge1xuICByZXR1cm4gUFJFRklYX1JFR0VYLnRlc3QodGV4dCkgfHwgUk9XX0NPTFVNTl9OVU1CRVJfUkVHRVgudGVzdCh0ZXh0KTtcbn1cbnZhciBTVFlMRV9ESVJFQ1RJVkVfUkVHRVggPSAvXiVjLzsgLy8gVGhpcyBmdW5jdGlvbiB0ZWxscyB3aGV0aGVyIG9yIG5vdCB0aGUgYXJndW1lbnRzIGZvciBhIGNvbnNvbGVcbi8vIG1ldGhvZCBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IHRoZSBwYXRjaEZvclN0cmljdE1vZGUgZnVuY3Rpb24uXG4vLyBJZiBpdCBoYXMgd2UnbGwgbmVlZCB0byBkbyBzb21lIHNwZWNpYWwgZm9ybWF0dGluZyBvZiB0aGUgYXJndW1lbnRzXG4vLyBzbyB0aGUgY29uc29sZSBjb2xvciBzdGF5cyBjb25zaXN0ZW50XG5cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZU92ZXJyaWRlKGFyZ3MsIG1ldGhvZCkge1xuICByZXR1cm4gYXJncy5sZW5ndGggPj0gMiAmJiBTVFlMRV9ESVJFQ1RJVkVfUkVHRVgudGVzdChhcmdzWzBdKSAmJiBhcmdzWzFdID09PSBcImNvbG9yOiBcIi5jb25jYXQoZ2V0Q29uc29sZUNvbG9yKG1ldGhvZCkgfHwgJycpO1xufVxuXG5mdW5jdGlvbiBnZXRDb25zb2xlQ29sb3IobWV0aG9kKSB7XG4gIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgY2FzZSAnd2Fybic6XG4gICAgICByZXR1cm4gY29uc29sZVNldHRpbmdzUmVmLmJyb3dzZXJUaGVtZSA9PT0gJ2xpZ2h0JyA/IFwicmdiYSgyNTAsIDE4MCwgNTAsIDAuNzUpXCIgOiBcInJnYmEoMjUwLCAxODAsIDUwLCAwLjUpXCI7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gY29uc29sZVNldHRpbmdzUmVmLmJyb3dzZXJUaGVtZSA9PT0gJ2xpZ2h0JyA/IFwicmdiYSgyNTAsIDEyMywgMTMwLCAwLjc1KVwiIDogXCJyZ2JhKDI1MCwgMTIzLCAxMzAsIDAuNSlcIjtcblxuICAgIGNhc2UgJ2xvZyc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb25zb2xlU2V0dGluZ3NSZWYuYnJvd3NlclRoZW1lID09PSAnbGlnaHQnID8gXCJyZ2JhKDEyNSwgMTI1LCAxMjUsIDAuNzUpXCIgOiBcInJnYmEoMTI1LCAxMjUsIDEyNSwgMC41KVwiO1xuICB9XG59XG5cbnZhciBpbmplY3RlZFJlbmRlcmVycyA9IG5ldyBNYXAoKTtcbnZhciB0YXJnZXRDb25zb2xlID0gY29uc29sZTtcbnZhciB0YXJnZXRDb25zb2xlTWV0aG9kcyA9IHt9O1xuXG5mb3IgKHZhciBtZXRob2QgaW4gY29uc29sZSkge1xuICB0YXJnZXRDb25zb2xlTWV0aG9kc1ttZXRob2RdID0gY29uc29sZVttZXRob2RdO1xufVxuXG52YXIgdW5wYXRjaEZuID0gbnVsbDtcbnZhciBpc05vZGUgPSBmYWxzZTtcblxudHJ5IHtcbiAgaXNOb2RlID0gdW5kZWZpbmVkID09PSBnbG9iYWw7XG59IGNhdGNoIChlcnJvcikge30gLy8gRW5hYmxlcyBlLmcuIEplc3QgdGVzdHMgdG8gaW5qZWN0IGEgbW9jayBjb25zb2xlIG9iamVjdC5cblxuXG5mdW5jdGlvbiBkYW5nZXJvdXNfc2V0VGFyZ2V0Q29uc29sZUZvclRlc3RpbmcodGFyZ2V0Q29uc29sZUZvclRlc3RpbmcpIHtcbiAgdGFyZ2V0Q29uc29sZSA9IHRhcmdldENvbnNvbGVGb3JUZXN0aW5nO1xuICB0YXJnZXRDb25zb2xlTWV0aG9kcyA9IHt9O1xuXG4gIGZvciAodmFyIF9tZXRob2QgaW4gdGFyZ2V0Q29uc29sZSkge1xuICAgIHRhcmdldENvbnNvbGVNZXRob2RzW19tZXRob2RdID0gY29uc29sZVtfbWV0aG9kXTtcbiAgfVxufSAvLyB2MTYgcmVuZGVyZXJzIHNob3VsZCB1c2UgdGhpcyBtZXRob2QgdG8gaW5qZWN0IGludGVybmFscyBuZWNlc3NhcnkgdG8gZ2VuZXJhdGUgYSBjb21wb25lbnQgc3RhY2suXG4vLyBUaGVzZSBpbnRlcm5hbHMgd2lsbCBiZSB1c2VkIGlmIHRoZSBjb25zb2xlIGlzIHBhdGNoZWQuXG4vLyBJbmplY3RpbmcgdGhlbSBzZXBhcmF0ZWx5IGFsbG93cyB0aGUgY29uc29sZSB0byBlYXNpbHkgYmUgcGF0Y2hlZCBvciB1bi1wYXRjaGVkIGxhdGVyIChhdCBydW50aW1lKS5cblxuZnVuY3Rpb24gcmVnaXN0ZXJSZW5kZXJlcihyZW5kZXJlciwgb25FcnJvck9yV2FybmluZykge1xuICB2YXIgY3VycmVudERpc3BhdGNoZXJSZWYgPSByZW5kZXJlci5jdXJyZW50RGlzcGF0Y2hlclJlZixcbiAgICAgIGdldEN1cnJlbnRGaWJlciA9IHJlbmRlcmVyLmdldEN1cnJlbnRGaWJlcixcbiAgICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlID0gcmVuZGVyZXIuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UsXG4gICAgICB2ZXJzaW9uID0gcmVuZGVyZXIudmVyc2lvbjsgLy8gSWdub3JlIFJlYWN0IHYxNSBhbmQgb2xkZXIgYmVjYXVzZSB0aGV5IGRvbid0IGV4cG9zZSBhIGNvbXBvbmVudCBzdGFjayBhbnl3YXkuXG5cbiAgaWYgKHR5cGVvZiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfSAvLyBjdXJyZW50RGlzcGF0Y2hlclJlZiBnZXRzIGluamVjdGVkIGZvciB2MTYuOCsgdG8gc3VwcG9ydCBob29rcyBpbnNwZWN0aW9uLlxuICAvLyBnZXRDdXJyZW50RmliZXIgZ2V0cyBpbmplY3RlZCBmb3IgdjE2LjkrLlxuXG5cbiAgaWYgKGN1cnJlbnREaXNwYXRjaGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIGdldEN1cnJlbnRGaWJlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBfZ2V0SW50ZXJuYWxSZWFjdENvbnMgPSBnZXRJbnRlcm5hbFJlYWN0Q29uc3RhbnRzKHZlcnNpb24pLFxuICAgICAgICBSZWFjdFR5cGVPZldvcmsgPSBfZ2V0SW50ZXJuYWxSZWFjdENvbnMuUmVhY3RUeXBlT2ZXb3JrO1xuXG4gICAgaW5qZWN0ZWRSZW5kZXJlcnMuc2V0KHJlbmRlcmVyLCB7XG4gICAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogY3VycmVudERpc3BhdGNoZXJSZWYsXG4gICAgICBnZXRDdXJyZW50RmliZXI6IGdldEN1cnJlbnRGaWJlcixcbiAgICAgIHdvcmtUYWdNYXA6IFJlYWN0VHlwZU9mV29yayxcbiAgICAgIG9uRXJyb3JPcldhcm5pbmc6IG9uRXJyb3JPcldhcm5pbmdcbiAgICB9KTtcbiAgfVxufVxudmFyIGNvbnNvbGVTZXR0aW5nc1JlZiA9IHtcbiAgYXBwZW5kQ29tcG9uZW50U3RhY2s6IGZhbHNlLFxuICBicmVha09uQ29uc29sZUVycm9yczogZmFsc2UsXG4gIHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9yczogZmFsc2UsXG4gIGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZTogZmFsc2UsXG4gIGJyb3dzZXJUaGVtZTogJ2RhcmsnXG59OyAvLyBQYXRjaGVzIGNvbnNvbGUgbWV0aG9kcyB0byBhcHBlbmQgY29tcG9uZW50IHN0YWNrIGZvciB0aGUgY3VycmVudCBmaWJlci5cbi8vIENhbGwgdW5wYXRjaCgpIHRvIHJlbW92ZSB0aGUgaW5qZWN0ZWQgYmVoYXZpb3IuXG5cbmZ1bmN0aW9uIHBhdGNoKF9yZWYpIHtcbiAgdmFyIGFwcGVuZENvbXBvbmVudFN0YWNrID0gX3JlZi5hcHBlbmRDb21wb25lbnRTdGFjayxcbiAgICAgIGJyZWFrT25Db25zb2xlRXJyb3JzID0gX3JlZi5icmVha09uQ29uc29sZUVycm9ycyxcbiAgICAgIHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyA9IF9yZWYuc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzLFxuICAgICAgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlID0gX3JlZi5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgICBicm93c2VyVGhlbWUgPSBfcmVmLmJyb3dzZXJUaGVtZTtcbiAgLy8gU2V0dGluZ3MgbWF5IGNoYW5nZSBhZnRlciB3ZSd2ZSBwYXRjaGVkIHRoZSBjb25zb2xlLlxuICAvLyBVc2luZyBhIHNoYXJlZCByZWYgYWxsb3dzIHRoZSBwYXRjaCBmdW5jdGlvbiB0byByZWFkIHRoZSBsYXRlc3QgdmFsdWVzLlxuICBjb25zb2xlU2V0dGluZ3NSZWYuYXBwZW5kQ29tcG9uZW50U3RhY2sgPSBhcHBlbmRDb21wb25lbnRTdGFjaztcbiAgY29uc29sZVNldHRpbmdzUmVmLmJyZWFrT25Db25zb2xlRXJyb3JzID0gYnJlYWtPbkNvbnNvbGVFcnJvcnM7XG4gIGNvbnNvbGVTZXR0aW5nc1JlZi5zaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMgPSBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnM7XG4gIGNvbnNvbGVTZXR0aW5nc1JlZi5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUgPSBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGU7XG4gIGNvbnNvbGVTZXR0aW5nc1JlZi5icm93c2VyVGhlbWUgPSBicm93c2VyVGhlbWU7XG5cbiAgaWYgKGFwcGVuZENvbXBvbmVudFN0YWNrIHx8IGJyZWFrT25Db25zb2xlRXJyb3JzIHx8IHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycykge1xuICAgIGlmICh1bnBhdGNoRm4gIT09IG51bGwpIHtcbiAgICAgIC8vIERvbid0IHBhdGNoIHR3aWNlLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBvcmlnaW5hbENvbnNvbGVNZXRob2RzID0ge307XG5cbiAgICB1bnBhdGNoRm4gPSBmdW5jdGlvbiB1bnBhdGNoRm4oKSB7XG4gICAgICBmb3IgKHZhciBfbWV0aG9kMiBpbiBvcmlnaW5hbENvbnNvbGVNZXRob2RzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGFyZ2V0Q29uc29sZVtfbWV0aG9kMl0gPSBvcmlnaW5hbENvbnNvbGVNZXRob2RzW19tZXRob2QyXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9WRVJSSURFX0NPTlNPTEVfTUVUSE9EUy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBvcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsQ29uc29sZU1ldGhvZHNbbWV0aG9kXSA9IHRhcmdldENvbnNvbGVbbWV0aG9kXS5fX1JFQUNUX0RFVlRPT0xTX09SSUdJTkFMX01FVEhPRF9fID8gdGFyZ2V0Q29uc29sZVttZXRob2RdLl9fUkVBQ1RfREVWVE9PTFNfT1JJR0lOQUxfTUVUSE9EX18gOiB0YXJnZXRDb25zb2xlW21ldGhvZF07IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgICAgICB2YXIgb3ZlcnJpZGVNZXRob2QgPSBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCgpIHtcbiAgICAgICAgICB2YXIgc2hvdWxkQXBwZW5kV2FybmluZ1N0YWNrID0gZmFsc2U7XG5cbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1ldGhvZCAhPT0gJ2xvZycpIHtcbiAgICAgICAgICAgIGlmIChjb25zb2xlU2V0dGluZ3NSZWYuYXBwZW5kQ29tcG9uZW50U3RhY2spIHtcbiAgICAgICAgICAgICAgdmFyIGxhc3RBcmcgPSBhcmdzLmxlbmd0aCA+IDAgPyBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gOiBudWxsO1xuICAgICAgICAgICAgICB2YXIgYWxyZWFkeUhhc0NvbXBvbmVudFN0YWNrID0gdHlwZW9mIGxhc3RBcmcgPT09ICdzdHJpbmcnICYmIGlzU3RyaW5nQ29tcG9uZW50U3RhY2sobGFzdEFyZyk7IC8vIElmIHdlIGFyZSBldmVyIGNhbGxlZCB3aXRoIGEgc3RyaW5nIHRoYXQgYWxyZWFkeSBoYXMgYSBjb21wb25lbnQgc3RhY2ssXG4gICAgICAgICAgICAgIC8vIGUuZy4gYSBSZWFjdCBlcnJvci93YXJuaW5nLCBkb24ndCBhcHBlbmQgYSBzZWNvbmQgc3RhY2suXG5cbiAgICAgICAgICAgICAgc2hvdWxkQXBwZW5kV2FybmluZ1N0YWNrID0gIWFscmVhZHlIYXNDb21wb25lbnRTdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2hvdWxkU2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzID0gY29uc29sZVNldHRpbmdzUmVmLnNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyAmJiAobWV0aG9kID09PSAnZXJyb3InIHx8IG1ldGhvZCA9PT0gJ3dhcm4nKTsgLy8gU2VhcmNoIGZvciB0aGUgZmlyc3QgcmVuZGVyZXIgdGhhdCBoYXMgYSBjdXJyZW50IEZpYmVyLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGUgZWRnZSBjYXNlIG9mIHN0YWNrcyBmb3IgbW9yZSB0aGFuIG9uZSAoZS5nLiBpbnRlcmxlYXZlZCByZW5kZXJlcnM/KVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mb3Itb2YtbG9vcHMvbm8tZm9yLW9mLWxvb3BzXG5cbiAgICAgICAgICB2YXIgX2l0ZXJhdG9yID0gY29uc29sZV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGluamVjdGVkUmVuZGVyZXJzLnZhbHVlcygpKSxcbiAgICAgICAgICAgICAgX3N0ZXA7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgdmFyIF9zdGVwJHZhbHVlID0gX3N0ZXAudmFsdWUsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50RGlzcGF0Y2hlclJlZiA9IF9zdGVwJHZhbHVlLmN1cnJlbnREaXNwYXRjaGVyUmVmLFxuICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudEZpYmVyID0gX3N0ZXAkdmFsdWUuZ2V0Q3VycmVudEZpYmVyLFxuICAgICAgICAgICAgICAgICAgb25FcnJvck9yV2FybmluZyA9IF9zdGVwJHZhbHVlLm9uRXJyb3JPcldhcm5pbmcsXG4gICAgICAgICAgICAgICAgICB3b3JrVGFnTWFwID0gX3N0ZXAkdmFsdWUud29ya1RhZ01hcDtcbiAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcGF0Y2goKSBpcyBjYWxsZWQgYnkgdHdvIHBsYWNlczogKDEpIHRoZSBob29rIGFuZCAoMikgdGhlIHJlbmRlcmVyIGJhY2tlbmQuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIGlzIHdoYXQgaW1wbGVtZW50cyBhIG1lc3NhZ2UgcXVldWUsIHNvIGl0J3MgdGhlIG9ubHkgb25lIHRoYXQgaW5qZWN0cyBvbkVycm9yT3JXYXJuaW5nLlxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9uRXJyb3JPcldhcm5pbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yT3JXYXJuaW5nKGN1cnJlbnQsIG1ldGhvZCwgLy8gQ29weSBhcmdzIGJlZm9yZSB3ZSBtdXRhdGUgdGhlbSAoZS5nLiBhZGRpbmcgdGhlIGNvbXBvbmVudCBzdGFjaylcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNsaWNlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRBcHBlbmRXYXJuaW5nU3RhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtUYWdNYXAsIGN1cnJlbnQsIGN1cnJlbnREaXNwYXRjaGVyUmVmKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50U3RhY2sgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaWN0TW9kZU92ZXJyaWRlKGFyZ3MsIG1ldGhvZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBcIlwiLmNvbmNhdChhcmdzWzBdLCBcIiAlc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjb21wb25lbnRTdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjb21wb25lbnRTdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIC8vIERvbid0IGxldCBhIERldlRvb2xzIG9yIFJlYWN0IGludGVybmFsIGVycm9yIGludGVyZmVyZSB3aXRoIGxvZ2dpbmcuXG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb25zb2xlU2V0dGluZ3NSZWYuYnJlYWtPbkNvbnNvbGVFcnJvcnMpIHtcbiAgICAgICAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyB3aXRoIFJlYWN0IERldlRvb2xzIC0tLVxuICAgICAgICAgICAgLy8gVGhpcyBkZWJ1Z2dlciBzdGF0ZW1lbnQgbWVhbnMgdGhhdCB5b3UndmUgZW5hYmxlZCB0aGUgXCJicmVhayBvbiB3YXJuaW5nc1wiIGZlYXR1cmUuXG4gICAgICAgICAgICAvLyBVc2UgdGhlIGJyb3dzZXIncyBDYWxsIFN0YWNrIHBhbmVsIHRvIHN0ZXAgb3V0IG9mIHRoaXMgb3ZlcnJpZGUgZnVuY3Rpb24tXG4gICAgICAgICAgICAvLyB0byB3aGVyZSB0aGUgb3JpZ2luYWwgd2FybmluZyBvciBlcnJvciB3YXMgbG9nZ2VkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG92ZXJyaWRlTWV0aG9kLl9fUkVBQ1RfREVWVE9PTFNfT1JJR0lOQUxfTUVUSE9EX18gPSBvcmlnaW5hbE1ldGhvZDtcbiAgICAgICAgb3JpZ2luYWxNZXRob2QuX19SRUFDVF9ERVZUT09MU19PVkVSUklERV9NRVRIT0RfXyA9IG92ZXJyaWRlTWV0aG9kO1xuICAgICAgICB0YXJnZXRDb25zb2xlW21ldGhvZF0gPSBvdmVycmlkZU1ldGhvZDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHVucGF0Y2goKTtcbiAgfVxufSAvLyBSZW1vdmVkIGNvbXBvbmVudCBzdGFjayBwYXRjaCBmcm9tIGNvbnNvbGUgbWV0aG9kcy5cblxuZnVuY3Rpb24gdW5wYXRjaCgpIHtcbiAgaWYgKHVucGF0Y2hGbiAhPT0gbnVsbCkge1xuICAgIHVucGF0Y2hGbigpO1xuICAgIHVucGF0Y2hGbiA9IG51bGw7XG4gIH1cbn1cbnZhciB1bnBhdGNoRm9yU3RyaWN0TW9kZUZuID0gbnVsbDsgLy8gTk9URTogS0VFUCBJTiBTWU5DIHdpdGggc3JjL2hvb2suanM6cGF0Y2hDb25zb2xlRm9ySW5pdGlhbFJlbmRlckluU3RyaWN0TW9kZVxuXG5mdW5jdGlvbiBwYXRjaEZvclN0cmljdE1vZGUoKSB7XG4gIGlmIChjb25zb2xlTWFuYWdlZEJ5RGV2VG9vbHNEdXJpbmdTdHJpY3RNb2RlKSB7XG4gICAgdmFyIG92ZXJyaWRlQ29uc29sZU1ldGhvZHMgPSBbJ2Vycm9yJywgJ2dyb3VwJywgJ2dyb3VwQ29sbGFwc2VkJywgJ2luZm8nLCAnbG9nJywgJ3RyYWNlJywgJ3dhcm4nXTtcblxuICAgIGlmICh1bnBhdGNoRm9yU3RyaWN0TW9kZUZuICE9PSBudWxsKSB7XG4gICAgICAvLyBEb24ndCBwYXRjaCB0d2ljZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3JpZ2luYWxDb25zb2xlTWV0aG9kcyA9IHt9O1xuXG4gICAgdW5wYXRjaEZvclN0cmljdE1vZGVGbiA9IGZ1bmN0aW9uIHVucGF0Y2hGb3JTdHJpY3RNb2RlRm4oKSB7XG4gICAgICBmb3IgKHZhciBfbWV0aG9kMyBpbiBvcmlnaW5hbENvbnNvbGVNZXRob2RzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGFyZ2V0Q29uc29sZVtfbWV0aG9kM10gPSBvcmlnaW5hbENvbnNvbGVNZXRob2RzW19tZXRob2QzXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICB9XG4gICAgfTtcblxuICAgIG92ZXJyaWRlQ29uc29sZU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbENvbnNvbGVNZXRob2RzW21ldGhvZF0gPSB0YXJnZXRDb25zb2xlW21ldGhvZF0uX19SRUFDVF9ERVZUT09MU19TVFJJQ1RfTU9ERV9PUklHSU5BTF9NRVRIT0RfXyA/IHRhcmdldENvbnNvbGVbbWV0aG9kXS5fX1JFQUNUX0RFVlRPT0xTX1NUUklDVF9NT0RFX09SSUdJTkFMX01FVEhPRF9fIDogdGFyZ2V0Q29uc29sZVttZXRob2RdOyAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICAgICAgdmFyIG92ZXJyaWRlTWV0aG9kID0gZnVuY3Rpb24gb3ZlcnJpZGVNZXRob2QoKSB7XG4gICAgICAgICAgaWYgKCFjb25zb2xlU2V0dGluZ3NSZWYuaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaW0gdGhlIHRleHQgY29sb3Igb2YgdGhlIGRvdWJsZSBsb2dzIGlmIHdlJ3JlIG5vdFxuICAgICAgICAgICAgLy8gaGlkaW5nIHRoZW0uXG4gICAgICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kKERJTU1FRF9OT0RFX0NPTlNPTEVfQ09MT1IsIGZvcm1hdC5hcHBseSh2b2lkIDAsIGFyZ3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBjb2xvciA9IGdldENvbnNvbGVDb2xvcihtZXRob2QpO1xuXG4gICAgICAgICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHZvaWQgMCwgY29uc29sZV90b0NvbnN1bWFibGVBcnJheShmb3JtYXRXaXRoU3R5bGVzKGFyZ3MsIFwiY29sb3I6IFwiLmNvbmNhdChjb2xvcikpKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0NvbnNvbGUgY29sb3IgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvdmVycmlkZU1ldGhvZC5fX1JFQUNUX0RFVlRPT0xTX1NUUklDVF9NT0RFX09SSUdJTkFMX01FVEhPRF9fID0gb3JpZ2luYWxNZXRob2Q7XG4gICAgICAgIG9yaWdpbmFsTWV0aG9kLl9fUkVBQ1RfREVWVE9PTFNfU1RSSUNUX01PREVfT1ZFUlJJREVfTUVUSE9EX18gPSBvdmVycmlkZU1ldGhvZDtcbiAgICAgICAgdGFyZ2V0Q29uc29sZVttZXRob2RdID0gb3ZlcnJpZGVNZXRob2Q7XG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9KTtcbiAgfVxufSAvLyBOT1RFOiBLRUVQIElOIFNZTkMgd2l0aCBzcmMvaG9vay5qczp1bnBhdGNoQ29uc29sZUZvckluaXRpYWxSZW5kZXJJblN0cmljdE1vZGVcblxuZnVuY3Rpb24gdW5wYXRjaEZvclN0cmljdE1vZGUoKSB7XG4gIGlmIChjb25zb2xlTWFuYWdlZEJ5RGV2VG9vbHNEdXJpbmdTdHJpY3RNb2RlKSB7XG4gICAgaWYgKHVucGF0Y2hGb3JTdHJpY3RNb2RlRm4gIT09IG51bGwpIHtcbiAgICAgIHVucGF0Y2hGb3JTdHJpY3RNb2RlRm4oKTtcbiAgICAgIHVucGF0Y2hGb3JTdHJpY3RNb2RlRm4gPSBudWxsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcGF0Y2hDb25zb2xlVXNpbmdXaW5kb3dWYWx1ZXMoKSB7XG4gIHZhciBfY2FzdEJvb2wsIF9jYXN0Qm9vbDIsIF9jYXN0Qm9vbDMsIF9jYXN0Qm9vbDQsIF9jYXN0QnJvd3NlclRoZW1lO1xuXG4gIHZhciBhcHBlbmRDb21wb25lbnRTdGFjayA9IChfY2FzdEJvb2wgPSBjYXN0Qm9vbCh3aW5kb3cuX19SRUFDVF9ERVZUT09MU19BUFBFTkRfQ09NUE9ORU5UX1NUQUNLX18pKSAhPT0gbnVsbCAmJiBfY2FzdEJvb2wgIT09IHZvaWQgMCA/IF9jYXN0Qm9vbCA6IHRydWU7XG4gIHZhciBicmVha09uQ29uc29sZUVycm9ycyA9IChfY2FzdEJvb2wyID0gY2FzdEJvb2wod2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQlJFQUtfT05fQ09OU09MRV9FUlJPUlNfXykpICE9PSBudWxsICYmIF9jYXN0Qm9vbDIgIT09IHZvaWQgMCA/IF9jYXN0Qm9vbDIgOiBmYWxzZTtcbiAgdmFyIHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyA9IChfY2FzdEJvb2wzID0gY2FzdEJvb2wod2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfU0hPV19JTkxJTkVfV0FSTklOR1NfQU5EX0VSUk9SU19fKSkgIT09IG51bGwgJiYgX2Nhc3RCb29sMyAhPT0gdm9pZCAwID8gX2Nhc3RCb29sMyA6IHRydWU7XG4gIHZhciBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUgPSAoX2Nhc3RCb29sNCA9IGNhc3RCb29sKHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0hJREVfQ09OU09MRV9MT0dTX0lOX1NUUklDVF9NT0RFX18pKSAhPT0gbnVsbCAmJiBfY2FzdEJvb2w0ICE9PSB2b2lkIDAgPyBfY2FzdEJvb2w0IDogZmFsc2U7XG4gIHZhciBicm93c2VyVGhlbWUgPSAoX2Nhc3RCcm93c2VyVGhlbWUgPSBjYXN0QnJvd3NlclRoZW1lKHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0JST1dTRVJfVEhFTUVfXykpICE9PSBudWxsICYmIF9jYXN0QnJvd3NlclRoZW1lICE9PSB2b2lkIDAgPyBfY2FzdEJyb3dzZXJUaGVtZSA6ICdkYXJrJztcbiAgcGF0Y2goe1xuICAgIGFwcGVuZENvbXBvbmVudFN0YWNrOiBhcHBlbmRDb21wb25lbnRTdGFjayxcbiAgICBicmVha09uQ29uc29sZUVycm9yczogYnJlYWtPbkNvbnNvbGVFcnJvcnMsXG4gICAgc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzOiBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMsXG4gICAgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlOiBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgYnJvd3NlclRoZW1lOiBicm93c2VyVGhlbWVcbiAgfSk7XG59IC8vIEFmdGVyIHJlY2VpdmluZyBjYWNoZWQgY29uc29sZSBwYXRjaCBzZXR0aW5ncyBmcm9tIFJlYWN0IE5hdGl2ZSwgd2Ugc2V0IHRoZW0gb24gd2luZG93LlxuLy8gV2hlbiB0aGUgY29uc29sZSBpcyBpbml0aWFsbHkgcGF0Y2hlZCAoaW4gcmVuZGVyZXIuanMgYW5kIGhvb2suanMpLCB0aGVzZSB2YWx1ZXMgYXJlIHJlYWQuXG4vLyBUaGUgYnJvd3NlciBleHRlbnNpb24gKGV0Yy4pIHNldHMgdGhlc2UgdmFsdWVzIG9uIHdpbmRvdywgYnV0IHRocm91Z2ggYW5vdGhlciBtZXRob2QuXG5cbmZ1bmN0aW9uIHdyaXRlQ29uc29sZVBhdGNoU2V0dGluZ3NUb1dpbmRvdyhzZXR0aW5ncykge1xuICB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19BUFBFTkRfQ09NUE9ORU5UX1NUQUNLX18gPSBzZXR0aW5ncy5hcHBlbmRDb21wb25lbnRTdGFjaztcbiAgd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQlJFQUtfT05fQ09OU09MRV9FUlJPUlNfXyA9IHNldHRpbmdzLmJyZWFrT25Db25zb2xlRXJyb3JzO1xuICB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19TSE9XX0lOTElORV9XQVJOSU5HU19BTkRfRVJST1JTX18gPSBzZXR0aW5ncy5zaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnM7XG4gIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0hJREVfQ09OU09MRV9MT0dTX0lOX1NUUklDVF9NT0RFX18gPSBzZXR0aW5ncy5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGU7XG4gIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0JST1dTRVJfVEhFTUVfXyA9IHNldHRpbmdzLmJyb3dzZXJUaGVtZTtcbn1cbmZ1bmN0aW9uIGluc3RhbGxDb25zb2xlRnVuY3Rpb25zVG9XaW5kb3coKSB7XG4gIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0NPTlNPTEVfRlVOQ1RJT05TX18gPSB7XG4gICAgcGF0Y2hDb25zb2xlVXNpbmdXaW5kb3dWYWx1ZXM6IHBhdGNoQ29uc29sZVVzaW5nV2luZG93VmFsdWVzLFxuICAgIHJlZ2lzdGVyUmVuZGVyZXJXaXRoQ29uc29sZTogcmVnaXN0ZXJSZW5kZXJlclxuICB9O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYnJpZGdlLmpzXG5mdW5jdGlvbiBicmlkZ2VfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBicmlkZ2VfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IGJyaWRnZV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gYnJpZGdlX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGJyaWRnZV90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIGJyaWRnZV9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGJyaWRnZV9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBicmlkZ2VfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBicmlkZ2Vfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBicmlkZ2Vfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIGJyaWRnZV91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGJyaWRnZV9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYnJpZGdlX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBicmlkZ2VfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gYnJpZGdlX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYnJpZGdlX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBicmlkZ2VfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gYnJpZGdlX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gYnJpZGdlX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBicmlkZ2VfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBicmlkZ2VfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGJyaWRnZV9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChicmlkZ2VfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gYnJpZGdlX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbnZhciBCQVRDSF9EVVJBVElPTiA9IDEwMDsgLy8gVGhpcyBtZXNzYWdlIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgRGV2VG9vbHMgcHJvdG9jb2wgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgYmFja2VuZCxcbi8vIGFzIHdlbGwgYXMgdGhlIGVhcmxpZXN0IE5QTSB2ZXJzaW9uIChlLmcuIFwiNC4xMy4wXCIpIHRoYXQgcHJvdG9jb2wgaXMgc3VwcG9ydGVkIGJ5IG9uIHRoZSBmcm9udGVuZC5cbi8vIFRoaXMgZW5hYmxlcyBhbiBvbGRlciBmcm9udGVuZCB0byBkaXNwbGF5IGFuIHVwZ3JhZGUgbWVzc2FnZSB0byB1c2VycyBmb3IgYSBuZXdlciwgdW5zdXBwb3J0ZWQgYmFja2VuZC5cblxuLy8gQnVtcCBwcm90b2NvbCB2ZXJzaW9uIHdoZW5ldmVyIGEgYmFja3dhcmRzIGJyZWFraW5nIGNoYW5nZSBpcyBtYWRlXG4vLyBpbiB0aGUgbWVzc2FnZXMgc2VudCBiZXR3ZWVuIEJhY2tlbmRCcmlkZ2UgYW5kIEZyb250ZW5kQnJpZGdlLlxuLy8gVGhpcyBtYXBwaW5nIGlzIGVtYmVkZGVkIGluIGJvdGggZnJvbnRlbmQgYW5kIGJhY2tlbmQgYnVpbGRzLlxuLy9cbi8vIFRoZSBiYWNrZW5kIHByb3RvY29sIHdpbGwgYWx3YXlzIGJlIHRoZSBsYXRlc3QgZW50cnkgaW4gdGhlIEJSSURHRV9QUk9UT0NPTCBhcnJheS5cbi8vXG4vLyBXaGVuIGFuIG9sZGVyIGZyb250ZW5kIGNvbm5lY3RzIHRvIGEgbmV3ZXIgYmFja2VuZCxcbi8vIHRoZSBiYWNrZW5kIGNhbiBzZW5kIHRoZSBtaW5OcG1WZXJzaW9uIGFuZCB0aGUgZnJvbnRlbmQgY2FuIGRpc3BsYXkgYW4gTlBNIHVwZ3JhZGUgcHJvbXB0LlxuLy9cbi8vIFdoZW4gYSBuZXdlciBmcm9udGVuZCBjb25uZWN0cyB3aXRoIGFuIG9sZGVyIHByb3RvY29sIHZlcnNpb24sXG4vLyB0aGUgZnJvbnRlbmQgY2FuIHVzZSB0aGUgZW1iZWRkZWQgbWluTnBtVmVyc2lvbi9tYXhOcG1WZXJzaW9uIHZhbHVlcyB0byBkaXNwbGF5IGEgZG93bmdyYWRlIHByb21wdC5cbnZhciBCUklER0VfUFJPVE9DT0wgPSBbLy8gVGhpcyB2ZXJzaW9uIHRlY2huaWNhbGx5IG5ldmVyIGV4aXN0ZWQsXG4vLyBidXQgYSBiYWNrd2FyZHMgYnJlYWtpbmcgY2hhbmdlIHdhcyBhZGRlZCBpbiA0LjExLFxuLy8gc28gdGhlIHNhZmVzdCBndWVzcyB0byBkb3duZ3JhZGUgdGhlIGZyb250ZW5kIHdvdWxkIGJlIHRvIHZlcnNpb24gNC4xMC5cbntcbiAgdmVyc2lvbjogMCxcbiAgbWluTnBtVmVyc2lvbjogJ1wiPDQuMTEuMFwiJyxcbiAgbWF4TnBtVmVyc2lvbjogJ1wiPDQuMTEuMFwiJ1xufSwgLy8gVmVyc2lvbnMgNC4xMS54IOKAkyA0LjEyLnggY29udGFpbmVkIHRoZSBiYWNrd2FyZHMgYnJlYWtpbmcgY2hhbmdlLFxuLy8gYnV0IHdlIGRpZG4ndCBhZGQgdGhlIFwiZml4XCIgb2YgY2hlY2tpbmcgdGhlIHByb3RvY29sIHZlcnNpb24gdW50aWwgNC4xMyxcbi8vIHNvIHdlIGRvbid0IHJlY29tbWVuZCBkb3duZ3JhZGluZyB0byA0LjExIG9yIDQuMTIuXG57XG4gIHZlcnNpb246IDEsXG4gIG1pbk5wbVZlcnNpb246ICc0LjEzLjAnLFxuICBtYXhOcG1WZXJzaW9uOiAnNC4yMS4wJ1xufSwgLy8gVmVyc2lvbiAyIGFkZHMgYSBTdHJpY3RNb2RlLWVuYWJsZWQgYW5kIHN1cHBvcnRzLVN0cmljdE1vZGUgYml0cyB0byBhZGQtcm9vdCBvcGVyYXRpb24uXG57XG4gIHZlcnNpb246IDIsXG4gIG1pbk5wbVZlcnNpb246ICc0LjIyLjAnLFxuICBtYXhOcG1WZXJzaW9uOiBudWxsXG59XTtcbnZhciBjdXJyZW50QnJpZGdlUHJvdG9jb2wgPSBCUklER0VfUFJPVE9DT0xbQlJJREdFX1BST1RPQ09MLmxlbmd0aCAtIDFdO1xuXG52YXIgQnJpZGdlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhCcmlkZ2UsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQnJpZGdlKTtcblxuICBmdW5jdGlvbiBCcmlkZ2Uod2FsbCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGJyaWRnZV9jbGFzc0NhbGxDaGVjayh0aGlzLCBCcmlkZ2UpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGJyaWRnZV9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNTaHV0ZG93blwiLCBmYWxzZSk7XG5cbiAgICBicmlkZ2VfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX21lc3NhZ2VRdWV1ZVwiLCBbXSk7XG5cbiAgICBicmlkZ2VfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX3RpbWVvdXRJRFwiLCBudWxsKTtcblxuICAgIGJyaWRnZV9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfd2FsbFVubGlzdGVuXCIsIG51bGwpO1xuXG4gICAgYnJpZGdlX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9mbHVzaFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIGFmdGVyIHRoZSBicmlkZ2UgaXMgbWFya2VkIGFzIGRlc3Ryb3llZCBpbiBzaHV0ZG93biBzZXF1ZW5jZSxcbiAgICAgIC8vIHNvIHdlIGRvIG5vdCBiYWlsIG91dCBpZiB0aGUgYnJpZGdlIG1hcmtlZCBhcyBkZXN0cm95ZWQuXG4gICAgICAvLyBJdCBpcyBhIHByaXZhdGUgbWV0aG9kIHRoYXQgdGhlIGJyaWRnZSBlbnN1cmVzIGlzIG9ubHkgY2FsbGVkIGF0IHRoZSByaWdodCB0aW1lcy5cbiAgICAgIGlmIChfdGhpcy5fdGltZW91dElEICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChfdGhpcy5fdGltZW91dElEKTtcbiAgICAgICAgX3RoaXMuX3RpbWVvdXRJRCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5fbWVzc2FnZVF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLl9tZXNzYWdlUXVldWUubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX3dhbGw7XG5cbiAgICAgICAgICAoX3RoaXMkX3dhbGwgPSBfdGhpcy5fd2FsbCkuc2VuZC5hcHBseShfdGhpcyRfd2FsbCwgW190aGlzLl9tZXNzYWdlUXVldWVbaV1dLmNvbmNhdChicmlkZ2VfdG9Db25zdW1hYmxlQXJyYXkoX3RoaXMuX21lc3NhZ2VRdWV1ZVtpICsgMV0pKSk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fbWVzc2FnZVF1ZXVlLmxlbmd0aCA9IDA7IC8vIENoZWNrIGFnYWluIGZvciBxdWV1ZWQgbWVzc2FnZXMgaW4gQkFUQ0hfRFVSQVRJT04gbXMuIFRoaXMgd2lsbCBrZWVwXG4gICAgICAgIC8vIGZsdXNoaW5nIGluIGEgbG9vcCBhcyBsb25nIGFzIG1lc3NhZ2VzIGNvbnRpbnVlIHRvIGJlIGFkZGVkLiBPbmNlIG5vXG4gICAgICAgIC8vIG1vcmUgYXJlLCB0aGUgdGltZXIgZXhwaXJlcy5cblxuICAgICAgICBfdGhpcy5fdGltZW91dElEID0gc2V0VGltZW91dChfdGhpcy5fZmx1c2gsIEJBVENIX0RVUkFUSU9OKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGJyaWRnZV9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZVZhbHVlQXRQYXRoXCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgaWQgPSBfcmVmLmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmLnBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYucmVuZGVyZXJJRCxcbiAgICAgICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgICAgIHZhbHVlID0gX3JlZi52YWx1ZTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NvbnRleHQnOlxuICAgICAgICAgIF90aGlzLnNlbmQoJ292ZXJyaWRlQ29udGV4dCcsIHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICAgICAgd2FzRm9yd2FyZGVkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdob29rcyc6XG4gICAgICAgICAgX3RoaXMuc2VuZCgnb3ZlcnJpZGVIb29rU3RhdGUnLCB7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgICAgIHdhc0ZvcndhcmRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncHJvcHMnOlxuICAgICAgICAgIF90aGlzLnNlbmQoJ292ZXJyaWRlUHJvcHMnLCB7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgICAgIHdhc0ZvcndhcmRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3RhdGUnOlxuICAgICAgICAgIF90aGlzLnNlbmQoJ292ZXJyaWRlU3RhdGUnLCB7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgICAgIHdhc0ZvcndhcmRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfdGhpcy5fd2FsbCA9IHdhbGw7XG4gICAgX3RoaXMuX3dhbGxVbmxpc3RlbiA9IHdhbGwubGlzdGVuKGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmV2ZW50KSB7XG4gICAgICAgIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLmVtaXQobWVzc2FnZS5ldmVudCwgbWVzc2FnZS5wYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsOyAvLyBUZW1wb3JhcmlseSBzdXBwb3J0IG9sZGVyIHN0YW5kYWxvbmUgZnJvbnQtZW5kcyBzZW5kaW5nIGNvbW1hbmRzIHRvIG5ld2VyIGVtYmVkZGVkIGJhY2tlbmRzLlxuICAgIC8vIFdlIGRvIHRoaXMgYmVjYXVzZSBSZWFjdCBOYXRpdmUgZW1iZWRzIHRoZSBSZWFjdCBEZXZUb29scyBiYWNrZW5kLFxuICAgIC8vIGJ1dCBjYW5ub3QgY29udHJvbCB3aGljaCB2ZXJzaW9uIG9mIHRoZSBmcm9udGVuZCB1c2VycyB1c2UuXG5cbiAgICBfdGhpcy5hZGRMaXN0ZW5lcignb3ZlcnJpZGVWYWx1ZUF0UGF0aCcsIF90aGlzLm92ZXJyaWRlVmFsdWVBdFBhdGgpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9IC8vIExpc3RlbmluZyBkaXJlY3RseSB0byB0aGUgd2FsbCBpc24ndCBhZHZpc2VkLlxuICAvLyBJdCBjYW4gYmUgdXNlZCB0byBsaXN0ZW4gZm9yIGxlZ2FjeSAodjMpIG1lc3NhZ2VzIChzaW5jZSB0aGV5IHVzZSBhIGRpZmZlcmVudCBmb3JtYXQpLlxuXG5cbiAgYnJpZGdlX2NyZWF0ZUNsYXNzKEJyaWRnZSwgW3tcbiAgICBrZXk6IFwic2VuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZW5kKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5faXNTaHV0ZG93bikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJDYW5ub3Qgc2VuZCBtZXNzYWdlIFxcXCJcIi5jb25jYXQoZXZlbnQsIFwiXFxcIiB0aHJvdWdoIGEgQnJpZGdlIHRoYXQgaGFzIGJlZW4gc2h1dGRvd24uXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBXaGVuIHdlIHJlY2VpdmUgYSBtZXNzYWdlOlxuICAgICAgLy8gLSB3ZSBhZGQgaXQgdG8gb3VyIHF1ZXVlIG9mIG1lc3NhZ2VzIHRvIGJlIHNlbnRcbiAgICAgIC8vIC0gaWYgdGhlcmUgaGFzbid0IGJlZW4gYSBtZXNzYWdlIHJlY2VudGx5LCB3ZSBzZXQgYSB0aW1lciBmb3IgMCBtcyBpblxuICAgICAgLy8gICB0aGUgZnV0dXJlLCBhbGxvd2luZyBhbGwgbWVzc2FnZXMgY3JlYXRlZCBpbiB0aGUgc2FtZSB0aWNrIHRvIGJlIHNlbnRcbiAgICAgIC8vICAgdG9nZXRoZXJcbiAgICAgIC8vIC0gaWYgdGhlcmUgKmhhcyogYmVlbiBhIG1lc3NhZ2UgZmx1c2hlZCBpbiB0aGUgbGFzdCBCQVRDSF9EVVJBVElPTiBtc1xuICAgICAgLy8gICAob3Igd2UncmUgd2FpdGluZyBmb3Igb3VyIHNldFRpbWVvdXQtMCB0byBmaXJlKSwgdGhlbiBfdGltZW91dElEIHdpbGxcbiAgICAgIC8vICAgYmUgc2V0LCBhbmQgd2UnbGwgc2ltcGx5IGFkZCB0byB0aGUgcXVldWUgYW5kIHdhaXQgZm9yIHRoYXRcblxuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcGF5bG9hZCA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIHBheWxvYWRbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9tZXNzYWdlUXVldWUucHVzaChldmVudCwgcGF5bG9hZCk7XG5cbiAgICAgIGlmICghdGhpcy5fdGltZW91dElEKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRJRCA9IHNldFRpbWVvdXQodGhpcy5fZmx1c2gsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaHV0ZG93blwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaHV0ZG93bigpIHtcbiAgICAgIGlmICh0aGlzLl9pc1NodXRkb3duKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQnJpZGdlIHdhcyBhbHJlYWR5IHNodXRkb3duLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIFF1ZXVlIHRoZSBzaHV0ZG93biBvdXRnb2luZyBtZXNzYWdlIGZvciBzdWJzY3JpYmVycy5cblxuXG4gICAgICB0aGlzLmVtaXQoJ3NodXRkb3duJyk7XG4gICAgICB0aGlzLnNlbmQoJ3NodXRkb3duJyk7IC8vIE1hcmsgdGhpcyBicmlkZ2UgYXMgZGVzdHJveWVkLCBpLmUuIGRpc2FibGUgaXRzIHB1YmxpYyBBUEkuXG5cbiAgICAgIHRoaXMuX2lzU2h1dGRvd24gPSB0cnVlOyAvLyBEaXNhYmxlIHRoZSBBUEkgaW5oZXJpdGVkIGZyb20gRXZlbnRFbWl0dGVyIHRoYXQgY2FuIGFkZCBtb3JlIGxpc3RlbmVycyBhbmQgc2VuZCBtb3JlIG1lc3NhZ2VzLlxuICAgICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIFRoaXMgcHJvcGVydHkgaXMgbm90IHdyaXRhYmxlLlxuXG4gICAgICB0aGlzLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gKCkge307IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBUaGlzIHByb3BlcnR5IGlzIG5vdCB3cml0YWJsZS5cblxuXG4gICAgICB0aGlzLmVtaXQgPSBmdW5jdGlvbiAoKSB7fTsgLy8gTk9URTogVGhlcmUncyBhbHNvIEV2ZW50RW1pdHRlciBBUEkgbGlrZSBgb25gIGFuZCBgcHJlcGVuZExpc3RlbmVyYCB0aGF0IHdlIGRpZG4ndCBhZGQgdG8gb3VyIEZsb3cgdHlwZSBvZiBFdmVudEVtaXR0ZXIuXG4gICAgICAvLyBVbnN1YnNjcmliZSB0aGlzIGJyaWRnZSBpbmNvbWluZyBtZXNzYWdlIGxpc3RlbmVycyB0byBiZSBzdXJlLCBhbmQgc28gdGhleSBkb24ndCBoYXZlIHRvIGRvIHRoYXQuXG5cblxuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTsgLy8gU3RvcCBhY2NlcHRpbmcgYW5kIGVtaXR0aW5nIGluY29taW5nIG1lc3NhZ2VzIGZyb20gdGhlIHdhbGwuXG5cbiAgICAgIHZhciB3YWxsVW5saXN0ZW4gPSB0aGlzLl93YWxsVW5saXN0ZW47XG5cbiAgICAgIGlmICh3YWxsVW5saXN0ZW4pIHtcbiAgICAgICAgd2FsbFVubGlzdGVuKCk7XG4gICAgICB9IC8vIFN5bmNocm9ub3VzbHkgZmx1c2ggYWxsIHF1ZXVlZCBvdXRnb2luZyBtZXNzYWdlcy5cbiAgICAgIC8vIEF0IHRoaXMgc3RlcCB0aGUgc3Vic2NyaWJlcnMnIGNvZGUgbWF5IHJ1biBpbiB0aGlzIGNhbGwgc3RhY2suXG5cblxuICAgICAgZG8ge1xuICAgICAgICB0aGlzLl9mbHVzaCgpO1xuICAgICAgfSB3aGlsZSAodGhpcy5fbWVzc2FnZVF1ZXVlLmxlbmd0aCk7IC8vIE1ha2Ugc3VyZSBvbmNlIGFnYWluIHRoYXQgdGhlcmUgaXMgbm8gZGFuZ2xpbmcgdGltZXIuXG5cblxuICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJRCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElEKTtcbiAgICAgICAgdGhpcy5fdGltZW91dElEID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid2FsbFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dhbGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJyaWRnZTtcbn0oRXZlbnRFbWl0dGVyKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBjb25zdCBzcmNfYnJpZGdlID0gKEJyaWRnZSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL2FnZW50LmpzXG5mdW5jdGlvbiBhZ2VudF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IGFnZW50X3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBhZ2VudF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gYWdlbnRfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYWdlbnRfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBhZ2VudF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gYWdlbnRfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBhZ2VudF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgYWdlbnRfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gYWdlbnRfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgYWdlbnRfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIGFnZW50X3NldFByb3RvdHlwZU9mKG8sIHApIHsgYWdlbnRfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIGFnZW50X3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIGFnZW50X2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBhZ2VudF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBhZ2VudF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gYWdlbnRfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIGFnZW50X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBhZ2VudF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKGFnZW50X3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIGFnZW50X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBhZ2VudF9nZXRQcm90b3R5cGVPZihvKSB7IGFnZW50X2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIGFnZW50X2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIGFnZW50X2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uIGRlYnVnKG1ldGhvZE5hbWUpIHtcbiAgaWYgKF9fREVCVUdfXykge1xuICAgIHZhciBfY29uc29sZTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIChfY29uc29sZSA9IGNvbnNvbGUpLmxvZy5hcHBseShfY29uc29sZSwgW1wiJWNBZ2VudCAlY1wiLmNvbmNhdChtZXRob2ROYW1lKSwgJ2NvbG9yOiBwdXJwbGU7IGZvbnQtd2VpZ2h0OiBib2xkOycsICdmb250LXdlaWdodDogYm9sZDsnXS5jb25jYXQoYXJncykpO1xuICB9XG59O1xuXG52YXIgQWdlbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgYWdlbnRfaW5oZXJpdHMoQWdlbnQsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBhZ2VudF9jcmVhdGVTdXBlcihBZ2VudCk7XG5cbiAgZnVuY3Rpb24gQWdlbnQoYnJpZGdlKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgYWdlbnRfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWdlbnQpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2lzUHJvZmlsaW5nXCIsIGZhbHNlKTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX3JlY29yZENoYW5nZURlc2NyaXB0aW9uc1wiLCBmYWxzZSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9yZW5kZXJlckludGVyZmFjZXNcIiwge30pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfcGVyc2lzdGVkU2VsZWN0aW9uXCIsIG51bGwpO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfcGVyc2lzdGVkU2VsZWN0aW9uTWF0Y2hcIiwgbnVsbCk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl90cmFjZVVwZGF0ZXNFbmFibGVkXCIsIGZhbHNlKTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJFcnJvcnNBbmRXYXJuaW5nc1wiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHJlbmRlcmVySUQgPSBfcmVmLnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLmNsZWFyRXJyb3JzQW5kV2FybmluZ3MoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJFcnJvcnNGb3JGaWJlcklEXCIsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIGlkID0gX3JlZjIuaWQsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYyLnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLmNsZWFyRXJyb3JzRm9yRmliZXJJRChpZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyV2FybmluZ3NGb3JGaWJlcklEXCIsIGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgdmFyIGlkID0gX3JlZjMuaWQsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYzLnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLmNsZWFyV2FybmluZ3NGb3JGaWJlcklEKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29weUVsZW1lbnRQYXRoXCIsIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIGlkID0gX3JlZjQuaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWY0LnBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWY0LnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiIGZvciBlbGVtZW50IFxcXCJcIikuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcmVuZGVyZXIuZ2V0U2VyaWFsaXplZEVsZW1lbnRWYWx1ZUJ5UGF0aChpZCwgcGF0aCk7XG5cbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ3NhdmVUb0NsaXBib2FyZCcsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gb2J0YWluIHNlcmlhbGl6ZWQgdmFsdWUgZm9yIGVsZW1lbnQgXFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkZWxldGVQYXRoXCIsIGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgdmFyIGhvb2tJRCA9IF9yZWY1Lmhvb2tJRCxcbiAgICAgICAgICBpZCA9IF9yZWY1LmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmNS5wYXRoLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmNS5yZW5kZXJlcklELFxuICAgICAgICAgIHR5cGUgPSBfcmVmNS50eXBlO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLmRlbGV0ZVBhdGgodHlwZSwgaWQsIGhvb2tJRCwgcGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldEJhY2tlbmRWZXJzaW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2ZXJzaW9uID0gXCI1LjAuMC05OTNjNGQwMDNcIjtcblxuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdiYWNrZW5kVmVyc2lvbicsIHZlcnNpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRCcmlkZ2VQcm90b2NvbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ2JyaWRnZVByb3RvY29sJywgY3VycmVudEJyaWRnZVByb3RvY29sKTtcbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZ2V0UHJvZmlsaW5nRGF0YVwiLCBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciByZW5kZXJlcklEID0gX3JlZjYucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCJcIikpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ3Byb2ZpbGluZ0RhdGEnLCByZW5kZXJlci5nZXRQcm9maWxpbmdEYXRhKCkpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRQcm9maWxpbmdTdGF0dXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdwcm9maWxpbmdTdGF0dXMnLCBfdGhpcy5faXNQcm9maWxpbmcpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRPd25lcnNMaXN0XCIsIGZ1bmN0aW9uIChfcmVmNykge1xuICAgICAgdmFyIGlkID0gX3JlZjcuaWQsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWY3LnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiIGZvciBlbGVtZW50IFxcXCJcIikuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG93bmVycyA9IHJlbmRlcmVyLmdldE93bmVyc0xpc3QoaWQpO1xuXG4gICAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnb3duZXJzTGlzdCcsIHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb3duZXJzOiBvd25lcnNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluc3BlY3RFbGVtZW50XCIsIGZ1bmN0aW9uIChfcmVmOCkge1xuICAgICAgdmFyIGZvcmNlRnVsbERhdGEgPSBfcmVmOC5mb3JjZUZ1bGxEYXRhLFxuICAgICAgICAgIGlkID0gX3JlZjguaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWY4LnBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWY4LnJlbmRlcmVySUQsXG4gICAgICAgICAgcmVxdWVzdElEID0gX3JlZjgucmVxdWVzdElEO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnaW5zcGVjdGVkRWxlbWVudCcsIHJlbmRlcmVyLmluc3BlY3RFbGVtZW50KHJlcXVlc3RJRCwgaWQsIHBhdGgsIGZvcmNlRnVsbERhdGEpKTsgLy8gV2hlbiB1c2VyIHNlbGVjdHMgYW4gZWxlbWVudCwgc3RvcCB0cnlpbmcgdG8gcmVzdG9yZSB0aGUgc2VsZWN0aW9uLFxuICAgICAgICAvLyBhbmQgaW5zdGVhZCByZW1lbWJlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gZm9yIHRoZSBuZXh0IHJlbG9hZC5cblxuXG4gICAgICAgIGlmIChfdGhpcy5fcGVyc2lzdGVkU2VsZWN0aW9uTWF0Y2ggPT09IG51bGwgfHwgX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbk1hdGNoLmlkICE9PSBpZCkge1xuICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb25NYXRjaCA9IG51bGw7XG4gICAgICAgICAgcmVuZGVyZXIuc2V0VHJhY2tlZFBhdGgobnVsbCk7XG5cbiAgICAgICAgICBfdGhpcy5fdGhyb3R0bGVkUGVyc2lzdFNlbGVjdGlvbihyZW5kZXJlcklELCBpZCk7XG4gICAgICAgIH0gLy8gVE9ETzogSWYgdGhlcmUgd2FzIGEgd2F5IHRvIGNoYW5nZSB0aGUgc2VsZWN0ZWQgRE9NIGVsZW1lbnRcbiAgICAgICAgLy8gaW4gbmF0aXZlIEVsZW1lbnRzIHRhYiB3aXRob3V0IGZvcmNpbmcgYSBzd2l0Y2ggdG8gaXQsIHdlJ2QgZG8gaXQgaGVyZS5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlcmUgaXMgYSB3YXkgdG8gZG8gdGhhdDpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtZGV2dG9vbHMtZXhwZXJpbWVudGFsL2lzc3Vlcy8xMDJcbiAgICAgICAgLy8gKFNldHRpbmcgJDAgZG9lc24ndCB3b3JrLCBhbmQgY2FsbGluZyBpbnNwZWN0KCkgc3dpdGNoZXMgdGhlIHRhYi4pXG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibG9nRWxlbWVudFRvQ29uc29sZVwiLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICAgIHZhciBpZCA9IF9yZWY5LmlkLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmOS5yZW5kZXJlcklEO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLmxvZ0VsZW1lbnRUb0NvbnNvbGUoaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZUVycm9yXCIsIGZ1bmN0aW9uIChfcmVmMTApIHtcbiAgICAgIHZhciBpZCA9IF9yZWYxMC5pZCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjEwLnJlbmRlcmVySUQsXG4gICAgICAgICAgZm9yY2VFcnJvciA9IF9yZWYxMC5mb3JjZUVycm9yO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLm92ZXJyaWRlRXJyb3IoaWQsIGZvcmNlRXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZVN1c3BlbnNlXCIsIGZ1bmN0aW9uIChfcmVmMTEpIHtcbiAgICAgIHZhciBpZCA9IF9yZWYxMS5pZCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjExLnJlbmRlcmVySUQsXG4gICAgICAgICAgZm9yY2VGYWxsYmFjayA9IF9yZWYxMS5mb3JjZUZhbGxiYWNrO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLm92ZXJyaWRlU3VzcGVuc2UoaWQsIGZvcmNlRmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZVZhbHVlQXRQYXRoXCIsIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICAgIHZhciBob29rSUQgPSBfcmVmMTIuaG9va0lELFxuICAgICAgICAgIGlkID0gX3JlZjEyLmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMTIucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjEyLnJlbmRlcmVySUQsXG4gICAgICAgICAgdHlwZSA9IF9yZWYxMi50eXBlLFxuICAgICAgICAgIHZhbHVlID0gX3JlZjEyLnZhbHVlO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLm92ZXJyaWRlVmFsdWVBdFBhdGgodHlwZSwgaWQsIGhvb2tJRCwgcGF0aCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZUNvbnRleHRcIiwgZnVuY3Rpb24gKF9yZWYxMykge1xuICAgICAgdmFyIGlkID0gX3JlZjEzLmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMTMucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjEzLnJlbmRlcmVySUQsXG4gICAgICAgICAgd2FzRm9yd2FyZGVkID0gX3JlZjEzLndhc0ZvcndhcmRlZCxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYxMy52YWx1ZTtcblxuICAgICAgLy8gRG9uJ3QgZm9yd2FyZCBhIG1lc3NhZ2UgdGhhdCdzIGFscmVhZHkgYmVlbiBmb3J3YXJkZWQgYnkgdGhlIGZyb250LWVuZCBCcmlkZ2UuXG4gICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyB0aGUgb3ZlcnJpZGUgY29tbWFuZCBvbmNlIVxuICAgICAgaWYgKCF3YXNGb3J3YXJkZWQpIHtcbiAgICAgICAgX3RoaXMub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgICB0eXBlOiAnY29udGV4dCcsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvdmVycmlkZUhvb2tTdGF0ZVwiLCBmdW5jdGlvbiAoX3JlZjE0KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMTQuaWQsXG4gICAgICAgICAgaG9va0lEID0gX3JlZjE0Lmhvb2tJRCxcbiAgICAgICAgICBwYXRoID0gX3JlZjE0LnBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYxNC5yZW5kZXJlcklELFxuICAgICAgICAgIHdhc0ZvcndhcmRlZCA9IF9yZWYxNC53YXNGb3J3YXJkZWQsXG4gICAgICAgICAgdmFsdWUgPSBfcmVmMTQudmFsdWU7XG5cbiAgICAgIC8vIERvbid0IGZvcndhcmQgYSBtZXNzYWdlIHRoYXQncyBhbHJlYWR5IGJlZW4gZm9yd2FyZGVkIGJ5IHRoZSBmcm9udC1lbmQgQnJpZGdlLlxuICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHByb2Nlc3MgdGhlIG92ZXJyaWRlIGNvbW1hbmQgb25jZSFcbiAgICAgIGlmICghd2FzRm9yd2FyZGVkKSB7XG4gICAgICAgIF90aGlzLm92ZXJyaWRlVmFsdWVBdFBhdGgoe1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICAgICAgdHlwZTogJ2hvb2tzJyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm92ZXJyaWRlUHJvcHNcIiwgZnVuY3Rpb24gKF9yZWYxNSkge1xuICAgICAgdmFyIGlkID0gX3JlZjE1LmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMTUucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjE1LnJlbmRlcmVySUQsXG4gICAgICAgICAgd2FzRm9yd2FyZGVkID0gX3JlZjE1Lndhc0ZvcndhcmRlZCxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYxNS52YWx1ZTtcblxuICAgICAgLy8gRG9uJ3QgZm9yd2FyZCBhIG1lc3NhZ2UgdGhhdCdzIGFscmVhZHkgYmVlbiBmb3J3YXJkZWQgYnkgdGhlIGZyb250LWVuZCBCcmlkZ2UuXG4gICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyB0aGUgb3ZlcnJpZGUgY29tbWFuZCBvbmNlIVxuICAgICAgaWYgKCF3YXNGb3J3YXJkZWQpIHtcbiAgICAgICAgX3RoaXMub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgICAgICB0eXBlOiAncHJvcHMnLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3ZlcnJpZGVTdGF0ZVwiLCBmdW5jdGlvbiAoX3JlZjE2KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMTYuaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWYxNi5wYXRoLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmMTYucmVuZGVyZXJJRCxcbiAgICAgICAgICB3YXNGb3J3YXJkZWQgPSBfcmVmMTYud2FzRm9yd2FyZGVkLFxuICAgICAgICAgIHZhbHVlID0gX3JlZjE2LnZhbHVlO1xuXG4gICAgICAvLyBEb24ndCBmb3J3YXJkIGEgbWVzc2FnZSB0aGF0J3MgYWxyZWFkeSBiZWVuIGZvcndhcmRlZCBieSB0aGUgZnJvbnQtZW5kIEJyaWRnZS5cbiAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBwcm9jZXNzIHRoZSBvdmVycmlkZSBjb21tYW5kIG9uY2UhXG4gICAgICBpZiAoIXdhc0ZvcndhcmRlZCkge1xuICAgICAgICBfdGhpcy5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICAgIHR5cGU6ICdzdGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWxvYWRBbmRQcm9maWxlXCIsIGZ1bmN0aW9uIChyZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMpIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlU2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVMT0FEX0FORF9QUk9GSUxFX0tFWSwgJ3RydWUnKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlU2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVDT1JEX0NIQU5HRV9ERVNDUklQVElPTlNfS0VZLCByZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMgPyAndHJ1ZScgOiAnZmFsc2UnKTsgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG9ubHkgYmUgaGl0IGlmIHRoZSBzaGVsbCBoYXMgZXhwbGljaXRseSB0b2xkIHRoZSBTdG9yZSB0aGF0IGl0IHN1cHBvcnRzIHByb2ZpbGluZy5cbiAgICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIHNoZWxsIG11c3QgYWxzbyBsaXN0ZW4gZm9yIHRoaXMgc3BlY2lmaWMgbWVzc2FnZSB0byBrbm93IHdoZW4gaXQgbmVlZHMgdG8gcmVsb2FkIHRoZSBhcHAuXG4gICAgICAvLyBUaGUgYWdlbnQgY2FuJ3QgZG8gdGhpcyBpbiBhIHdheSB0aGF0IGlzIHJlbmRlcmVyIGFnbm9zdGljLlxuXG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ3JlbG9hZEFwcEZvclByb2ZpbGluZycpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5hbWVQYXRoXCIsIGZ1bmN0aW9uIChfcmVmMTcpIHtcbiAgICAgIHZhciBob29rSUQgPSBfcmVmMTcuaG9va0lELFxuICAgICAgICAgIGlkID0gX3JlZjE3LmlkLFxuICAgICAgICAgIG5ld1BhdGggPSBfcmVmMTcubmV3UGF0aCxcbiAgICAgICAgICBvbGRQYXRoID0gX3JlZjE3Lm9sZFBhdGgsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYxNy5yZW5kZXJlcklELFxuICAgICAgICAgIHR5cGUgPSBfcmVmMTcudHlwZTtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCIgZm9yIGVsZW1lbnQgXFxcIlwiKS5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5yZW5hbWVQYXRoKHR5cGUsIGlkLCBob29rSUQsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRUcmFjZVVwZGF0ZXNFbmFibGVkXCIsIGZ1bmN0aW9uICh0cmFjZVVwZGF0ZXNFbmFibGVkKSB7XG4gICAgICBfdGhpcy5fdHJhY2VVcGRhdGVzRW5hYmxlZCA9IHRyYWNlVXBkYXRlc0VuYWJsZWQ7XG4gICAgICB0b2dnbGVFbmFibGVkKHRyYWNlVXBkYXRlc0VuYWJsZWQpO1xuXG4gICAgICBmb3IgKHZhciByZW5kZXJlcklEIGluIF90aGlzLl9yZW5kZXJlckludGVyZmFjZXMpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcbiAgICAgICAgcmVuZGVyZXIuc2V0VHJhY2VVcGRhdGVzRW5hYmxlZCh0cmFjZVVwZGF0ZXNFbmFibGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3luY1NlbGVjdGlvbkZyb21OYXRpdmVFbGVtZW50c1BhbmVsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0YXJnZXQgPSB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLiQwO1xuXG4gICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZWxlY3ROb2RlKHRhcmdldCk7XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNodXRkb3duXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIENsZWFuIHVwIHRoZSBvdmVybGF5IGlmIHZpc2libGUsIGFuZCBhc3NvY2lhdGVkIGV2ZW50cy5cbiAgICAgIF90aGlzLmVtaXQoJ3NodXRkb3duJyk7XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXJ0UHJvZmlsaW5nXCIsIGZ1bmN0aW9uIChyZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMpIHtcbiAgICAgIF90aGlzLl9yZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMgPSByZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnM7XG4gICAgICBfdGhpcy5faXNQcm9maWxpbmcgPSB0cnVlO1xuXG4gICAgICBmb3IgKHZhciByZW5kZXJlcklEIGluIF90aGlzLl9yZW5kZXJlckludGVyZmFjZXMpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcbiAgICAgICAgcmVuZGVyZXIuc3RhcnRQcm9maWxpbmcocmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdwcm9maWxpbmdTdGF0dXMnLCBfdGhpcy5faXNQcm9maWxpbmcpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9wUHJvZmlsaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLl9pc1Byb2ZpbGluZyA9IGZhbHNlO1xuICAgICAgX3RoaXMuX3JlY29yZENoYW5nZURlc2NyaXB0aW9ucyA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciByZW5kZXJlcklEIGluIF90aGlzLl9yZW5kZXJlckludGVyZmFjZXMpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcbiAgICAgICAgcmVuZGVyZXIuc3RvcFByb2ZpbGluZygpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ3Byb2ZpbGluZ1N0YXR1cycsIF90aGlzLl9pc1Byb2ZpbGluZyk7XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3BJbnNwZWN0aW5nTmF0aXZlXCIsIGZ1bmN0aW9uIChzZWxlY3RlZCkge1xuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdzdG9wSW5zcGVjdGluZ05hdGl2ZScsIHNlbGVjdGVkKTtcbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RvcmVBc0dsb2JhbFwiLCBmdW5jdGlvbiAoX3JlZjE4KSB7XG4gICAgICB2YXIgY291bnQgPSBfcmVmMTguY291bnQsXG4gICAgICAgICAgaWQgPSBfcmVmMTguaWQsXG4gICAgICAgICAgcGF0aCA9IF9yZWYxOC5wYXRoLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmMTgucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgcmVuZGVyZXIgaWQgXFxcIlwiLmNvbmNhdChyZW5kZXJlcklELCBcIlxcXCIgZm9yIGVsZW1lbnQgXFxcIlwiKS5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5zdG9yZUFzR2xvYmFsKGlkLCBwYXRoLCBjb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZUNvbnNvbGVQYXRjaFNldHRpbmdzXCIsIGZ1bmN0aW9uIChfcmVmMTkpIHtcbiAgICAgIHZhciBhcHBlbmRDb21wb25lbnRTdGFjayA9IF9yZWYxOS5hcHBlbmRDb21wb25lbnRTdGFjayxcbiAgICAgICAgICBicmVha09uQ29uc29sZUVycm9ycyA9IF9yZWYxOS5icmVha09uQ29uc29sZUVycm9ycyxcbiAgICAgICAgICBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMgPSBfcmVmMTkuc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzLFxuICAgICAgICAgIGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSA9IF9yZWYxOS5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgICAgICAgYnJvd3NlclRoZW1lID0gX3JlZjE5LmJyb3dzZXJUaGVtZTtcbiAgICAgIC8vIElmIHRoZSBmcm9udGVuZCBwcmVmZXJlbmNlcyBoYXZlIGNoYW5nZWQsXG4gICAgICAvLyBvciBpbiB0aGUgY2FzZSBvZiBSZWFjdCBOYXRpdmUtIGlmIHRoZSBiYWNrZW5kIGlzIGp1c3QgZmluZGluZyBvdXQgdGhlIHByZWZlcmVuY2VzLVxuICAgICAgLy8gdGhlbiByZWluc3RhbGwgdGhlIGNvbnNvbGUgb3ZlcnJpZGVzLlxuICAgICAgLy8gSXQncyBzYWZlIHRvIGNhbGwgYHBhdGNoQ29uc29sZWAgbXVsdGlwbGUgdGltZXMuXG4gICAgICBwYXRjaCh7XG4gICAgICAgIGFwcGVuZENvbXBvbmVudFN0YWNrOiBhcHBlbmRDb21wb25lbnRTdGFjayxcbiAgICAgICAgYnJlYWtPbkNvbnNvbGVFcnJvcnM6IGJyZWFrT25Db25zb2xlRXJyb3JzLFxuICAgICAgICBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnM6IHNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyxcbiAgICAgICAgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlOiBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgICAgIGJyb3dzZXJUaGVtZTogYnJvd3NlclRoZW1lXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFnZW50X2RlZmluZVByb3BlcnR5KGFnZW50X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlQ29tcG9uZW50RmlsdGVyc1wiLCBmdW5jdGlvbiAoY29tcG9uZW50RmlsdGVycykge1xuICAgICAgZm9yICh2YXIgcmVuZGVyZXJJRCBpbiBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzKSB7XG4gICAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG4gICAgICAgIHJlbmRlcmVyLnVwZGF0ZUNvbXBvbmVudEZpbHRlcnMoY29tcG9uZW50RmlsdGVycyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInZpZXdBdHRyaWJ1dGVTb3VyY2VcIiwgZnVuY3Rpb24gKF9yZWYyMCkge1xuICAgICAgdmFyIGlkID0gX3JlZjIwLmlkLFxuICAgICAgICAgIHBhdGggPSBfcmVmMjAucGF0aCxcbiAgICAgICAgICByZW5kZXJlcklEID0gX3JlZjIwLnJlbmRlcmVySUQ7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfdGhpcy5fcmVuZGVyZXJJbnRlcmZhY2VzW3JlbmRlcmVySURdO1xuXG4gICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIHJlbmRlcmVyIGlkIFxcXCJcIi5jb25jYXQocmVuZGVyZXJJRCwgXCJcXFwiIGZvciBlbGVtZW50IFxcXCJcIikuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIucHJlcGFyZVZpZXdBdHRyaWJ1dGVTb3VyY2UoaWQsIHBhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ2aWV3RWxlbWVudFNvdXJjZVwiLCBmdW5jdGlvbiAoX3JlZjIxKSB7XG4gICAgICB2YXIgaWQgPSBfcmVmMjEuaWQsXG4gICAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYyMS5yZW5kZXJlcklEO1xuICAgICAgdmFyIHJlbmRlcmVyID0gX3RoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIiBmb3IgZWxlbWVudCBcXFwiXCIpLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyLnByZXBhcmVWaWV3RWxlbWVudFNvdXJjZShpZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZ2VudF9kZWZpbmVQcm9wZXJ0eShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVHJhY2VVcGRhdGVzXCIsIGZ1bmN0aW9uIChub2Rlcykge1xuICAgICAgX3RoaXMuZW1pdCgndHJhY2VVcGRhdGVzJywgbm9kZXMpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZhc3RSZWZyZXNoU2NoZWR1bGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgICAgZGVidWcoJ29uRmFzdFJlZnJlc2hTY2hlZHVsZWQnKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdmYXN0UmVmcmVzaFNjaGVkdWxlZCcpO1xuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkhvb2tPcGVyYXRpb25zXCIsIGZ1bmN0aW9uIChvcGVyYXRpb25zKSB7XG4gICAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICAgIGRlYnVnKCdvbkhvb2tPcGVyYXRpb25zJywgXCIoXCIuY29uY2F0KG9wZXJhdGlvbnMubGVuZ3RoLCBcIikgW1wiKS5jb25jYXQob3BlcmF0aW9ucy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfSAvLyBUT0RPOlxuICAgICAgLy8gVGhlIGNocm9tZS5ydW50aW1lIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHRyYW5zZmVyYWJsZXM7IGl0IGZvcmNlcyBKU09OIHNlcmlhbGl6YXRpb24uXG4gICAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTkyNzEzNFxuICAgICAgLy9cbiAgICAgIC8vIFJlZ2FyZGluZyB0cmFuc2ZlcmFibGVzLCB0aGUgcG9zdE1lc3NhZ2UgZG9jIHN0YXRlczpcbiAgICAgIC8vIElmIHRoZSBvd25lcnNoaXAgb2YgYW4gb2JqZWN0IGlzIHRyYW5zZmVycmVkLCBpdCBiZWNvbWVzIHVudXNhYmxlIChuZXV0ZXJlZClcbiAgICAgIC8vIGluIHRoZSBjb250ZXh0IGl0IHdhcyBzZW50IGZyb20gYW5kIGJlY29tZXMgYXZhaWxhYmxlIG9ubHkgdG8gdGhlIHdvcmtlciBpdCB3YXMgc2VudCB0by5cbiAgICAgIC8vXG4gICAgICAvLyBFdmVuIHRob3VnaCBDaHJvbWUgaXMgZXZlbnR1YWxseSBKU09OIHNlcmlhbGl6aW5nIHRoZSBhcnJheSBidWZmZXIsXG4gICAgICAvLyB1c2luZyB0aGUgdHJhbnNmZXJhYmxlIGFwcHJvYWNoIGFsc28gc29tZXRpbWVzIGNhdXNlcyBpdCB0byB0aHJvdzpcbiAgICAgIC8vICAgRE9NRXhjZXB0aW9uOiBGYWlsZWQgdG8gZXhlY3V0ZSAncG9zdE1lc3NhZ2UnIG9uICdXaW5kb3cnOiBBcnJheUJ1ZmZlciBhdCBpbmRleCAwIGlzIGFscmVhZHkgbmV1dGVyZWQuXG4gICAgICAvL1xuICAgICAgLy8gU2VlIGJ1ZyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC1kZXZ0b29scy1leHBlcmltZW50YWwvaXNzdWVzLzI1XG4gICAgICAvL1xuICAgICAgLy8gVGhlIFN0b3JlIGhhcyBhIGZhbGxiYWNrIGluIHBsYWNlIHRoYXQgcGFyc2VzIHRoZSBtZXNzYWdlIGFzIEpTT04gaWYgdGhlIHR5cGUgaXNuJ3QgYW4gYXJyYXkuXG4gICAgICAvLyBGb3Igbm93IHRoZSBzaW1wbGVzdCBmaXggc2VlbXMgdG8gYmUgdG8gbm90IHRyYW5zZmVyIHRoZSBhcnJheS5cbiAgICAgIC8vIFRoaXMgd2lsbCBuZWdhdGl2ZWx5IGltcGFjdCBwZXJmb3JtYW5jZSBvbiBGaXJlZm94IHNvIGl0J3MgdW5mb3J0dW5hdGUsXG4gICAgICAvLyBidXQgdW50aWwgd2UncmUgYWJsZSB0byBmaXggdGhlIENocm9tZSBlcnJvciBtZW50aW9uZWQgYWJvdmUsIGl0IHNlZW1zIG5lY2Vzc2FyeS5cbiAgICAgIC8vXG4gICAgICAvLyB0aGlzLl9icmlkZ2Uuc2VuZCgnb3BlcmF0aW9ucycsIG9wZXJhdGlvbnMsIFtvcGVyYXRpb25zLmJ1ZmZlcl0pO1xuXG5cbiAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnb3BlcmF0aW9ucycsIG9wZXJhdGlvbnMpO1xuXG4gICAgICBpZiAoX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcmVuZGVyZXJJRCA9IG9wZXJhdGlvbnNbMF07XG5cbiAgICAgICAgaWYgKF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb24ucmVuZGVyZXJJRCA9PT0gcmVuZGVyZXJJRCkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBzZWxlY3QgYSBkZWVwZXIgbWF0Y2ggZm9yIHRoZSBwZXJzaXN0ZWQgc2VsZWN0aW9uLlxuICAgICAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG5cbiAgICAgICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2TWF0Y2ggPSBfdGhpcy5fcGVyc2lzdGVkU2VsZWN0aW9uTWF0Y2g7XG4gICAgICAgICAgICB2YXIgbmV4dE1hdGNoID0gcmVuZGVyZXIuZ2V0QmVzdE1hdGNoRm9yVHJhY2tlZFBhdGgoKTtcbiAgICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb25NYXRjaCA9IG5leHRNYXRjaDtcbiAgICAgICAgICAgIHZhciBwcmV2TWF0Y2hJRCA9IHByZXZNYXRjaCAhPT0gbnVsbCA/IHByZXZNYXRjaC5pZCA6IG51bGw7XG4gICAgICAgICAgICB2YXIgbmV4dE1hdGNoSUQgPSBuZXh0TWF0Y2ggIT09IG51bGwgPyBuZXh0TWF0Y2guaWQgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAocHJldk1hdGNoSUQgIT09IG5leHRNYXRjaElEKSB7XG4gICAgICAgICAgICAgIGlmIChuZXh0TWF0Y2hJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1vdmVkIGZvcndhcmQsIHVubG9ja2luZyBhIGRlZXBlciBub2RlLlxuICAgICAgICAgICAgICAgIF90aGlzLl9icmlkZ2Uuc2VuZCgnc2VsZWN0RmliZXInLCBuZXh0TWF0Y2hJRCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5leHRNYXRjaCAhPT0gbnVsbCAmJiBuZXh0TWF0Y2guaXNGdWxsTWF0Y2gpIHtcbiAgICAgICAgICAgICAgLy8gV2UndmUganVzdCB1bmxvY2tlZCB0aGUgaW5uZXJtb3N0IHNlbGVjdGVkIG5vZGUuXG4gICAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9pbnQgdHJhY2tpbmcgaXQgZnVydGhlci5cbiAgICAgICAgICAgICAgX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgIF90aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb25NYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlcmVyLnNldFRyYWNrZWRQYXRoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWdlbnRfZGVmaW5lUHJvcGVydHkoYWdlbnRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfdGhyb3R0bGVkUGVyc2lzdFNlbGVjdGlvblwiLCBsb2Rhc2hfdGhyb3R0bGVfZGVmYXVsdCgpKGZ1bmN0aW9uIChyZW5kZXJlcklELCBpZCkge1xuICAgICAgLy8gVGhpcyBpcyB0aHJvdHRsZWQsIHNvIGJvdGggcmVuZGVyZXIgYW5kIHNlbGVjdGVkIElEXG4gICAgICAvLyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGJ5IHRoZSB0aW1lIHdlIHJlYWQgdGhlbS5cbiAgICAgIC8vIFRoaXMgaXMgd2h5IHdlIG5lZWQgdGhlIGRlZmVuc2l2ZSBjaGVja3MgaGVyZS5cbiAgICAgIHZhciByZW5kZXJlciA9IF90aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG4gICAgICB2YXIgcGF0aCA9IHJlbmRlcmVyICE9IG51bGwgPyByZW5kZXJlci5nZXRQYXRoRm9yRWxlbWVudChpZCkgOiBudWxsO1xuXG4gICAgICBpZiAocGF0aCAhPT0gbnVsbCkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZVNldEl0ZW0oU0VTU0lPTl9TVE9SQUdFX0xBU1RfU0VMRUNUSU9OX0tFWSwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICAgICAgcGF0aDogcGF0aFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZVJlbW92ZUl0ZW0oU0VTU0lPTl9TVE9SQUdFX0xBU1RfU0VMRUNUSU9OX0tFWSk7XG4gICAgICB9XG4gICAgfSwgMTAwMCkpO1xuXG4gICAgaWYgKHNlc3Npb25TdG9yYWdlR2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVMT0FEX0FORF9QUk9GSUxFX0tFWSkgPT09ICd0cnVlJykge1xuICAgICAgX3RoaXMuX3JlY29yZENoYW5nZURlc2NyaXB0aW9ucyA9IHNlc3Npb25TdG9yYWdlR2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfUkVDT1JEX0NIQU5HRV9ERVNDUklQVElPTlNfS0VZKSA9PT0gJ3RydWUnO1xuICAgICAgX3RoaXMuX2lzUHJvZmlsaW5nID0gdHJ1ZTtcbiAgICAgIHNlc3Npb25TdG9yYWdlUmVtb3ZlSXRlbShTRVNTSU9OX1NUT1JBR0VfUkVDT1JEX0NIQU5HRV9ERVNDUklQVElPTlNfS0VZKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlUmVtb3ZlSXRlbShTRVNTSU9OX1NUT1JBR0VfUkVMT0FEX0FORF9QUk9GSUxFX0tFWSk7XG4gICAgfVxuXG4gICAgdmFyIHBlcnNpc3RlZFNlbGVjdGlvblN0cmluZyA9IHNlc3Npb25TdG9yYWdlR2V0SXRlbShTRVNTSU9OX1NUT1JBR0VfTEFTVF9TRUxFQ1RJT05fS0VZKTtcblxuICAgIGlmIChwZXJzaXN0ZWRTZWxlY3Rpb25TdHJpbmcgIT0gbnVsbCkge1xuICAgICAgX3RoaXMuX3BlcnNpc3RlZFNlbGVjdGlvbiA9IEpTT04ucGFyc2UocGVyc2lzdGVkU2VsZWN0aW9uU3RyaW5nKTtcbiAgICB9XG5cbiAgICBfdGhpcy5fYnJpZGdlID0gYnJpZGdlO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignY2xlYXJFcnJvcnNBbmRXYXJuaW5ncycsIF90aGlzLmNsZWFyRXJyb3JzQW5kV2FybmluZ3MpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignY2xlYXJFcnJvcnNGb3JGaWJlcklEJywgX3RoaXMuY2xlYXJFcnJvcnNGb3JGaWJlcklEKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2NsZWFyV2FybmluZ3NGb3JGaWJlcklEJywgX3RoaXMuY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignY29weUVsZW1lbnRQYXRoJywgX3RoaXMuY29weUVsZW1lbnRQYXRoKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2RlbGV0ZVBhdGgnLCBfdGhpcy5kZWxldGVQYXRoKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ2dldEJhY2tlbmRWZXJzaW9uJywgX3RoaXMuZ2V0QmFja2VuZFZlcnNpb24pO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignZ2V0QnJpZGdlUHJvdG9jb2wnLCBfdGhpcy5nZXRCcmlkZ2VQcm90b2NvbCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdnZXRQcm9maWxpbmdEYXRhJywgX3RoaXMuZ2V0UHJvZmlsaW5nRGF0YSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdnZXRQcm9maWxpbmdTdGF0dXMnLCBfdGhpcy5nZXRQcm9maWxpbmdTdGF0dXMpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignZ2V0T3duZXJzTGlzdCcsIF90aGlzLmdldE93bmVyc0xpc3QpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignaW5zcGVjdEVsZW1lbnQnLCBfdGhpcy5pbnNwZWN0RWxlbWVudCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdsb2dFbGVtZW50VG9Db25zb2xlJywgX3RoaXMubG9nRWxlbWVudFRvQ29uc29sZSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdvdmVycmlkZUVycm9yJywgX3RoaXMub3ZlcnJpZGVFcnJvcik7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdvdmVycmlkZVN1c3BlbnNlJywgX3RoaXMub3ZlcnJpZGVTdXNwZW5zZSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdvdmVycmlkZVZhbHVlQXRQYXRoJywgX3RoaXMub3ZlcnJpZGVWYWx1ZUF0UGF0aCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdyZWxvYWRBbmRQcm9maWxlJywgX3RoaXMucmVsb2FkQW5kUHJvZmlsZSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdyZW5hbWVQYXRoJywgX3RoaXMucmVuYW1lUGF0aCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdzZXRUcmFjZVVwZGF0ZXNFbmFibGVkJywgX3RoaXMuc2V0VHJhY2VVcGRhdGVzRW5hYmxlZCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdzdGFydFByb2ZpbGluZycsIF90aGlzLnN0YXJ0UHJvZmlsaW5nKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N0b3BQcm9maWxpbmcnLCBfdGhpcy5zdG9wUHJvZmlsaW5nKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N0b3JlQXNHbG9iYWwnLCBfdGhpcy5zdG9yZUFzR2xvYmFsKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3N5bmNTZWxlY3Rpb25Gcm9tTmF0aXZlRWxlbWVudHNQYW5lbCcsIF90aGlzLnN5bmNTZWxlY3Rpb25Gcm9tTmF0aXZlRWxlbWVudHNQYW5lbCk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCdzaHV0ZG93bicsIF90aGlzLnNodXRkb3duKTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3VwZGF0ZUNvbnNvbGVQYXRjaFNldHRpbmdzJywgX3RoaXMudXBkYXRlQ29uc29sZVBhdGNoU2V0dGluZ3MpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcigndXBkYXRlQ29tcG9uZW50RmlsdGVycycsIF90aGlzLnVwZGF0ZUNvbXBvbmVudEZpbHRlcnMpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcigndmlld0F0dHJpYnV0ZVNvdXJjZScsIF90aGlzLnZpZXdBdHRyaWJ1dGVTb3VyY2UpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcigndmlld0VsZW1lbnRTb3VyY2UnLCBfdGhpcy52aWV3RWxlbWVudFNvdXJjZSk7IC8vIFRlbXBvcmFyaWx5IHN1cHBvcnQgb2xkZXIgc3RhbmRhbG9uZSBmcm9udC1lbmRzIHNlbmRpbmcgY29tbWFuZHMgdG8gbmV3ZXIgZW1iZWRkZWQgYmFja2VuZHMuXG4gICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIFJlYWN0IE5hdGl2ZSBlbWJlZHMgdGhlIFJlYWN0IERldlRvb2xzIGJhY2tlbmQsXG4gICAgLy8gYnV0IGNhbm5vdCBjb250cm9sIHdoaWNoIHZlcnNpb24gb2YgdGhlIGZyb250ZW5kIHVzZXJzIHVzZS5cblxuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignb3ZlcnJpZGVDb250ZXh0JywgX3RoaXMub3ZlcnJpZGVDb250ZXh0KTtcbiAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ292ZXJyaWRlSG9va1N0YXRlJywgX3RoaXMub3ZlcnJpZGVIb29rU3RhdGUpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignb3ZlcnJpZGVQcm9wcycsIF90aGlzLm92ZXJyaWRlUHJvcHMpO1xuICAgIGJyaWRnZS5hZGRMaXN0ZW5lcignb3ZlcnJpZGVTdGF0ZScsIF90aGlzLm92ZXJyaWRlU3RhdGUpO1xuXG4gICAgaWYgKF90aGlzLl9pc1Byb2ZpbGluZykge1xuICAgICAgYnJpZGdlLnNlbmQoJ3Byb2ZpbGluZ1N0YXR1cycsIHRydWUpO1xuICAgIH0gLy8gU2VuZCB0aGUgQnJpZGdlIHByb3RvY29sIGFuZCBiYWNrZW5kIHZlcnNpb25zLCBhZnRlciBpbml0aWFsaXphdGlvbiwgaW4gY2FzZSB0aGUgZnJvbnRlbmQgaGFzIGFscmVhZHkgcmVxdWVzdGVkIGl0LlxuICAgIC8vIFRoZSBTdG9yZSBtYXkgYmUgaW5zdGFudGlhdGVkIGJlb3JlIHRoZSBhZ2VudC5cblxuXG4gICAgdmFyIF92ZXJzaW9uID0gXCI1LjAuMC05OTNjNGQwMDNcIjtcblxuICAgIGlmIChfdmVyc2lvbikge1xuICAgICAgX3RoaXMuX2JyaWRnZS5zZW5kKCdiYWNrZW5kVmVyc2lvbicsIF92ZXJzaW9uKTtcbiAgICB9XG5cbiAgICBfdGhpcy5fYnJpZGdlLnNlbmQoJ2JyaWRnZVByb3RvY29sJywgY3VycmVudEJyaWRnZVByb3RvY29sKTsgLy8gTm90aWZ5IHRoZSBmcm9udGVuZCBpZiB0aGUgYmFja2VuZCBzdXBwb3J0cyB0aGUgU3RvcmFnZSBBUEkgKGUuZy4gbG9jYWxTdG9yYWdlKS5cbiAgICAvLyBJZiBub3QsIGZlYXR1cmVzIGxpa2UgcmVsb2FkLWFuZC1wcm9maWxlIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGFuZCBtdXN0IGJlIGRpc2FibGVkLlxuXG5cbiAgICB2YXIgaXNCYWNrZW5kU3RvcmFnZUFQSVN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZXN0Jyk7XG4gICAgICBpc0JhY2tlbmRTdG9yYWdlQVBJU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgIGJyaWRnZS5zZW5kKCdpc0JhY2tlbmRTdG9yYWdlQVBJU3VwcG9ydGVkJywgaXNCYWNrZW5kU3RvcmFnZUFQSVN1cHBvcnRlZCk7XG4gICAgYnJpZGdlLnNlbmQoJ2lzU3luY2hyb25vdXNYSFJTdXBwb3J0ZWQnLCBpc1N5bmNocm9ub3VzWEhSU3VwcG9ydGVkKCkpO1xuICAgIHNldHVwSGlnaGxpZ2h0ZXIoYnJpZGdlLCBhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICBUcmFjZVVwZGF0ZXNfaW5pdGlhbGl6ZShhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBhZ2VudF9jcmVhdGVDbGFzcyhBZ2VudCwgW3tcbiAgICBrZXk6IFwiZ2V0SW5zdGFuY2VBbmRTdHlsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnN0YW5jZUFuZFN0eWxlKF9yZWYyMikge1xuICAgICAgdmFyIGlkID0gX3JlZjIyLmlkLFxuICAgICAgICAgIHJlbmRlcmVySUQgPSBfcmVmMjIucmVuZGVyZXJJRDtcbiAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXTtcblxuICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCByZW5kZXJlciBpZCBcXFwiXCIuY29uY2F0KHJlbmRlcmVySUQsIFwiXFxcIlwiKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVuZGVyZXIuZ2V0SW5zdGFuY2VBbmRTdHlsZShpZCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEJlc3RNYXRjaGluZ1JlbmRlcmVySW50ZXJmYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJlc3RNYXRjaGluZ1JlbmRlcmVySW50ZXJmYWNlKG5vZGUpIHtcbiAgICAgIHZhciBiZXN0TWF0Y2ggPSBudWxsO1xuXG4gICAgICBmb3IgKHZhciByZW5kZXJlcklEIGluIHRoaXMuX3JlbmRlcmVySW50ZXJmYWNlcykge1xuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlckludGVyZmFjZXNbcmVuZGVyZXJJRF07XG4gICAgICAgIHZhciBmaWJlciA9IHJlbmRlcmVyLmdldEZpYmVyRm9yTmF0aXZlKG5vZGUpO1xuXG4gICAgICAgIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIGNoZWNrIGlmIGZpYmVyLnN0YXRlTm9kZSBpcyBtYXRjaGluZyB0aGUgb3JpZ2luYWwgaG9zdEluc3RhbmNlXG4gICAgICAgICAgaWYgKGZpYmVyLnN0YXRlTm9kZSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYmVzdE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBiZXN0TWF0Y2ggPSByZW5kZXJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaWYgYW4gZXhhY3QgbWF0Y2ggaXMgbm90IGZvdW5kLCByZXR1cm4gdGhlIGZpcnN0IHZhbGlkIHJlbmRlcmVyIGFzIGZhbGxiYWNrXG5cblxuICAgICAgcmV0dXJuIGJlc3RNYXRjaDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SURGb3JOb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldElERm9yTm9kZShub2RlKSB7XG4gICAgICB2YXIgcmVuZGVyZXJJbnRlcmZhY2UgPSB0aGlzLmdldEJlc3RNYXRjaGluZ1JlbmRlcmVySW50ZXJmYWNlKG5vZGUpO1xuXG4gICAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UgIT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZW5kZXJlckludGVyZmFjZS5nZXRGaWJlcklERm9yTmF0aXZlKG5vZGUsIHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikgey8vIFNvbWUgb2xkIFJlYWN0IHZlcnNpb25zIG1pZ2h0IHRocm93IGlmIHRoZXkgY2FuJ3QgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIC8vIElmIHNvIHdlIHNob3VsZCBpZ25vcmUgaXQuLi5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2VsZWN0Tm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZWxlY3ROb2RlKHRhcmdldCkge1xuICAgICAgdmFyIGlkID0gdGhpcy5nZXRJREZvck5vZGUodGFyZ2V0KTtcblxuICAgICAgaWYgKGlkICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2JyaWRnZS5zZW5kKCdzZWxlY3RGaWJlcicsIGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0UmVuZGVyZXJJbnRlcmZhY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UmVuZGVyZXJJbnRlcmZhY2UocmVuZGVyZXJJRCwgcmVuZGVyZXJJbnRlcmZhY2UpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVySW50ZXJmYWNlc1tyZW5kZXJlcklEXSA9IHJlbmRlcmVySW50ZXJmYWNlO1xuXG4gICAgICBpZiAodGhpcy5faXNQcm9maWxpbmcpIHtcbiAgICAgICAgcmVuZGVyZXJJbnRlcmZhY2Uuc3RhcnRQcm9maWxpbmcodGhpcy5fcmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyZXJJbnRlcmZhY2Uuc2V0VHJhY2VVcGRhdGVzRW5hYmxlZCh0aGlzLl90cmFjZVVwZGF0ZXNFbmFibGVkKTsgLy8gV2hlbiB0aGUgcmVuZGVyZXIgaXMgYXR0YWNoZWQsIHdlIG5lZWQgdG8gdGVsbCBpdCB3aGV0aGVyXG4gICAgICAvLyB3ZSByZW1lbWJlciB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIHRoYXQgd2UnZCBsaWtlIHRvIHJlc3RvcmUuXG4gICAgICAvLyBJdCdsbCBzdGFydCB0cmFja2luZyBtb3VudHMgZm9yIG1hdGNoZXMgdG8gdGhlIGxhc3Qgc2VsZWN0aW9uIHBhdGguXG5cbiAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9wZXJzaXN0ZWRTZWxlY3Rpb247XG5cbiAgICAgIGlmIChzZWxlY3Rpb24gIT09IG51bGwgJiYgc2VsZWN0aW9uLnJlbmRlcmVySUQgPT09IHJlbmRlcmVySUQpIHtcbiAgICAgICAgcmVuZGVyZXJJbnRlcmZhY2Uuc2V0VHJhY2tlZFBhdGgoc2VsZWN0aW9uLnBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblVuc3VwcG9ydGVkUmVuZGVyZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25VbnN1cHBvcnRlZFJlbmRlcmVyKHJlbmRlcmVySUQpIHtcbiAgICAgIHRoaXMuX2JyaWRnZS5zZW5kKCd1bnN1cHBvcnRlZFJlbmRlcmVyVmVyc2lvbicsIHJlbmRlcmVySUQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJlckludGVyZmFjZXNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlckludGVyZmFjZXM7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEFnZW50O1xufShFdmVudEVtaXR0ZXIpO1xuXG5cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuLi9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2hvb2suanNcbmZ1bmN0aW9uIGhvb2tfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBob29rX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBob29rX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBob29rX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGhvb2tfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBob29rX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaG9va19pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBob29rX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgaG9va19ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIGhvb2tfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIGhvb2tfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBob29rX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBob29rX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBob29rX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIGhvb2tfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBob29rX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBob29rX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgaG9vayBvbiB3aW5kb3csIHdoaWNoIGlzIGFuIGV2ZW50IGVtaXR0ZXIuXG4gKiBOb3RlOiB0aGlzIGdsb2JhbCBob29rIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyBpcyBhIGRlIGZhY3RvIHB1YmxpYyBBUEkuXG4gKiBJdCdzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIGF2b2lkIGNyZWF0aW5nIGRpcmVjdCBkZXBlbmRlbmN5IG9uIHRoZSBEZXZUb29scyBCYWNrZW5kLlxuICogVGhhdCdzIHdoeSB3ZSBzdGlsbCBpbmxpbmUgdGhlIHdob2xlIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24sXG4gKiB0aGUgc3RyaW5nIGZvcm1hdCBpbXBsZW1lbnRhdGlvbiwgYW5kIHBhcnQgb2YgdGhlIGNvbnNvbGUgaW1wbGVtZW50YXRpb24gaGVyZS5cbiAqXG4gKiBcbiAqL1xuZnVuY3Rpb24gaW5zdGFsbEhvb2sodGFyZ2V0KSB7XG4gIGlmICh0YXJnZXQuaGFzT3duUHJvcGVydHkoJ19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXycpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgdGFyZ2V0Q29uc29sZSA9IGNvbnNvbGU7XG4gIHZhciB0YXJnZXRDb25zb2xlTWV0aG9kcyA9IHt9O1xuXG4gIGZvciAodmFyIG1ldGhvZCBpbiBjb25zb2xlKSB7XG4gICAgdGFyZ2V0Q29uc29sZU1ldGhvZHNbbWV0aG9kXSA9IGNvbnNvbGVbbWV0aG9kXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRhbmdlcm91c19zZXRUYXJnZXRDb25zb2xlRm9yVGVzdGluZyh0YXJnZXRDb25zb2xlRm9yVGVzdGluZykge1xuICAgIHRhcmdldENvbnNvbGUgPSB0YXJnZXRDb25zb2xlRm9yVGVzdGluZztcbiAgICB0YXJnZXRDb25zb2xlTWV0aG9kcyA9IHt9O1xuXG4gICAgZm9yICh2YXIgX21ldGhvZCBpbiB0YXJnZXRDb25zb2xlKSB7XG4gICAgICB0YXJnZXRDb25zb2xlTWV0aG9kc1tfbWV0aG9kXSA9IGNvbnNvbGVbX21ldGhvZF07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGV0ZWN0UmVhY3RCdWlsZFR5cGUocmVuZGVyZXIpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiByZW5kZXJlci52ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBSZWFjdCBET00gRmliZXIgKDE2KylcbiAgICAgICAgaWYgKHJlbmRlcmVyLmJ1bmRsZVR5cGUgPiAwKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAgICAgICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgb25seSB1c2luZyAwIChQUk9EKSBhbmQgMSAoREVWKVxuICAgICAgICAgIC8vIGJ1dCBtaWdodCBhZGQgMiAoUFJPRklMRSkgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICByZXR1cm4gJ2RldmVsb3BtZW50JztcbiAgICAgICAgfSAvLyBSZWFjdCAxNiB1c2VzIGZsYXQgYnVuZGxlcy4gSWYgd2UgcmVwb3J0IHRoZSBidW5kbGUgYXMgcHJvZHVjdGlvblxuICAgICAgICAvLyB2ZXJzaW9uLCBpdCBtZWFucyB3ZSBhbHNvIG1pbmlmaWVkIGFuZCBlbnZpZmllZCBpdCBvdXJzZWx2ZXMuXG5cblxuICAgICAgICByZXR1cm4gJ3Byb2R1Y3Rpb24nOyAvLyBOb3RlOiBUaGVyZSBpcyBzdGlsbCBhIHJpc2sgdGhhdCB0aGUgQ29tbW9uSlMgZW50cnkgcG9pbnQgaGFzIG5vdFxuICAgICAgICAvLyBiZWVuIGVudmlmaWVkIG9yIHVnbGlmaWVkLiBJbiB0aGlzIGNhc2UgdGhlIHVzZXIgd291bGQgaGF2ZSAqYm90aCpcbiAgICAgICAgLy8gZGV2ZWxvcG1lbnQgYW5kIHByb2R1Y3Rpb24gYnVuZGxlLCBidXQgb25seSB0aGUgcHJvZCBvbmUgd291bGQgcnVuLlxuICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIHJlYWxseSBiYWQuIFdlIGhhdmUgYSBzZXBhcmF0ZSBjaGVjayBmb3IgdGhpcyBiZWNhdXNlXG4gICAgICAgIC8vIGl0IGhhcHBlbnMgKm91dHNpZGUqIG9mIHRoZSByZW5kZXJlciBpbmplY3Rpb24uIFNlZSBgY2hlY2tEQ0VgIGJlbG93LlxuICAgICAgfSAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG5cblxuICAgICAgdmFyIF90b1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcblxuICAgICAgaWYgKHJlbmRlcmVyLk1vdW50ICYmIHJlbmRlcmVyLk1vdW50Ll9yZW5kZXJOZXdSb290Q29tcG9uZW50KSB7XG4gICAgICAgIC8vIFJlYWN0IERPTSBTdGFja1xuICAgICAgICB2YXIgcmVuZGVyUm9vdENvZGUgPSBfdG9TdHJpbmcuY2FsbChyZW5kZXJlci5Nb3VudC5fcmVuZGVyTmV3Um9vdENvbXBvbmVudCk7IC8vIEZpbHRlciBvdXQgYmFkIHJlc3VsdHMgKGlmIHRoYXQgaXMgZXZlbiBwb3NzaWJsZSk6XG5cblxuICAgICAgICBpZiAocmVuZGVyUm9vdENvZGUuaW5kZXhPZignZnVuY3Rpb24nKSAhPT0gMCkge1xuICAgICAgICAgIC8vIEhvcGUgZm9yIHRoZSBiZXN0IGlmIHdlJ3JlIG5vdCBzdXJlLlxuICAgICAgICAgIHJldHVybiAncHJvZHVjdGlvbic7XG4gICAgICAgIH0gLy8gQ2hlY2sgZm9yIFJlYWN0IERPTSBTdGFjayA8IDE1LjEuMCBpbiBkZXZlbG9wbWVudC5cbiAgICAgICAgLy8gSWYgaXQgY29udGFpbnMgXCJzdG9yZWRNZWFzdXJlXCIgY2FsbCwgaXQncyB3cmFwcGVkIGluIFJlYWN0UGVyZiAoREVWIG9ubHkpLlxuICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIHRydWUgZXZlbiBpZiBpdCdzIG1pbmlmaWVkLCBhcyBtZXRob2QgbmFtZSBzdGlsbCBtYXRjaGVzLlxuXG5cbiAgICAgICAgaWYgKHJlbmRlclJvb3RDb2RlLmluZGV4T2YoJ3N0b3JlZE1lYXN1cmUnKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gJ2RldmVsb3BtZW50JztcbiAgICAgICAgfSAvLyBGb3Igb3RoZXIgdmVyc2lvbnMgKGFuZCBjb25maWd1cmF0aW9ucykgaXQncyBub3Qgc28gZWFzeS5cbiAgICAgICAgLy8gTGV0J3MgcXVpY2tseSBleGNsdWRlIHByb3BlciBwcm9kdWN0aW9uIGJ1aWxkcy5cbiAgICAgICAgLy8gSWYgaXQgY29udGFpbnMgYSB3YXJuaW5nIG1lc3NhZ2UsIGl0J3MgZWl0aGVyIGEgREVWIGJ1aWxkLFxuICAgICAgICAvLyBvciBhbiBQUk9EIGJ1aWxkIHdpdGhvdXQgcHJvcGVyIGRlYWQgY29kZSBlbGltaW5hdGlvbi5cblxuXG4gICAgICAgIGlmIChyZW5kZXJSb290Q29kZS5pbmRleE9mKCdzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uJykgIT09IC0xKSB7XG4gICAgICAgICAgLy8gTm93IGhvdyBkbyB3ZSB0ZWxsIGEgREVWIGJ1aWxkIGZyb20gYSBiYWQgUFJPRCBidWlsZD9cbiAgICAgICAgICAvLyBJZiB3ZSBzZWUgTk9ERV9FTlYsIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIGEgZGV2IGJ1aWxkXG4gICAgICAgICAgLy8gYmVjYXVzZSBtb3N0IGxpa2VseSBpdCBpcyByZWZlcnJpbmcgdG8gYW4gZW1wdHkgc2hpbS5cbiAgICAgICAgICBpZiAocmVuZGVyUm9vdENvZGUuaW5kZXhPZignTk9ERV9FTlYnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGV2ZWxvcG1lbnQnO1xuICAgICAgICAgIH0gLy8gSWYgd2Ugc2VlIFwiZGV2ZWxvcG1lbnRcIiwgd2UncmUgZGVhbGluZyB3aXRoIGFuIGVudmlmaWVkIERFViBidWlsZFxuICAgICAgICAgIC8vIChzdWNoIGFzIHRoZSBvZmZpY2lhbCBSZWFjdCBERVYgVU1EKS5cblxuXG4gICAgICAgICAgaWYgKHJlbmRlclJvb3RDb2RlLmluZGV4T2YoJ2RldmVsb3BtZW50JykgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2RldmVsb3BtZW50JztcbiAgICAgICAgICB9IC8vIEkndmUgc2VlbiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nIGJlaW5nIHNtYXJ0bHlcbiAgICAgICAgICAvLyByZXBsYWNlZCBieSBgdHJ1ZWAgaW4gREVWIGJ5IFdlYnBhY2suIEkgZG9uJ3Qga25vdyBob3cgdGhhdFxuICAgICAgICAgIC8vIHdvcmtzIGJ1dCB3ZSBjYW4gc2FmZWx5IGd1YXJkIGFnYWluc3QgaXQgYmVjYXVzZSBgdHJ1ZWAgd2FzXG4gICAgICAgICAgLy8gbmV2ZXIgdXNlZCBpbiB0aGUgZnVuY3Rpb24gc291cmNlIHNpbmNlIGl0IHdhcyB3cml0dGVuLlxuXG5cbiAgICAgICAgICBpZiAocmVuZGVyUm9vdENvZGUuaW5kZXhPZigndHJ1ZScpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuICdkZXZlbG9wbWVudCc7XG4gICAgICAgICAgfSAvLyBCeSBub3cgZWl0aGVyIGl0IGlzIGEgcHJvZHVjdGlvbiBidWlsZCB0aGF0IGhhcyBub3QgYmVlbiBtaW5pZmllZCxcbiAgICAgICAgICAvLyBvciAod29yc2UpIHRoaXMgaXMgYSBtaW5pZmllZCBkZXZlbG9wbWVudCBidWlsZCB1c2luZyBub24tc3RhbmRhcmRcbiAgICAgICAgICAvLyBlbnZpcm9ubWVudCAoZS5nLiBcInN0YWdpbmdcIikuIFdlJ3JlIGdvaW5nIHRvIGxvb2sgYXQgd2hldGhlclxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBuYW1lIGlzIG1hbmdsZWQ6XG5cblxuICAgICAgICAgIGlmICggLy8gMC4xMyB0byAxNVxuICAgICAgICAgIHJlbmRlclJvb3RDb2RlLmluZGV4T2YoJ25leHRFbGVtZW50JykgIT09IC0xIHx8IC8vIDAuMTJcbiAgICAgICAgICByZW5kZXJSb290Q29kZS5pbmRleE9mKCduZXh0Q29tcG9uZW50JykgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4ndCBiZSBjZXJ0YWluIHdoZXRoZXIgdGhpcyBpcyBhIGRldmVsb3BtZW50IGJ1aWxkIG9yIG5vdCxcbiAgICAgICAgICAgIC8vIGJ1dCBpdCBpcyBkZWZpbml0ZWx5IHVubWluaWZpZWQuXG4gICAgICAgICAgICByZXR1cm4gJ3VubWluaWZpZWQnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSBhIG1pbmlmaWVkIGRldmVsb3BtZW50IGJ1aWxkLlxuICAgICAgICAgICAgcmV0dXJuICdkZXZlbG9wbWVudCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEJ5IG5vdyB3ZSBrbm93IHRoYXQgaXQncyBlbnZpZmllZCBhbmQgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdvcmtlZCxcbiAgICAgICAgLy8gYnV0IHdoYXQgaWYgaXQncyBzdGlsbCBub3QgbWluaWZpZWQ/IChJcyB0aGlzIGV2ZW4gcG9zc2libGU/KVxuICAgICAgICAvLyBMZXQncyBjaGVjayBtYXRjaGVzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQgbmFtZS5cblxuXG4gICAgICAgIGlmICggLy8gMC4xMyB0byAxNVxuICAgICAgICByZW5kZXJSb290Q29kZS5pbmRleE9mKCduZXh0RWxlbWVudCcpICE9PSAtMSB8fCAvLyAwLjEyXG4gICAgICAgIHJlbmRlclJvb3RDb2RlLmluZGV4T2YoJ25leHRDb21wb25lbnQnKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gJ3VubWluaWZpZWQnO1xuICAgICAgICB9IC8vIFNlZW1zIGxpa2Ugd2UncmUgdXNpbmcgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbi5cbiAgICAgICAgLy8gSG93ZXZlciwgdGhlIGJyYW5jaCBhYm92ZSBpcyBTdGFjay1vbmx5IHNvIHRoaXMgaXMgMTUgb3IgZWFybGllci5cblxuXG4gICAgICAgIHJldHVybiAnb3V0ZGF0ZWQnO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikgey8vIFdlaXJkIGVudmlyb25tZW50cyBtYXkgZXhpc3QuXG4gICAgICAvLyBUaGlzIGNvZGUgbmVlZHMgYSBoaWdoZXIgZmF1bHQgdG9sZXJhbmNlXG4gICAgICAvLyBiZWNhdXNlIGl0IHJ1bnMgZXZlbiB3aXRoIGNsb3NlZCBEZXZUb29scy5cbiAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSBjYXRjaCBlcnJvcnMgaW4gYWxsIGluamVjdGVkIGNvZGUsIGFuZCBub3QganVzdCB0aGlzIHBhcnQ/XG4gICAgfVxuXG4gICAgcmV0dXJuICdwcm9kdWN0aW9uJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRENFKGZuKSB7XG4gICAgLy8gVGhpcyBydW5zIGZvciBwcm9kdWN0aW9uIHZlcnNpb25zIG9mIFJlYWN0LlxuICAgIC8vIE5lZWRzIHRvIGJlIHN1cGVyIHNhZmUuXG4gICAgdHJ5IHtcbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICAgIHZhciBfdG9TdHJpbmcyID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgICB2YXIgY29kZSA9IF90b1N0cmluZzIuY2FsbChmbik7IC8vIFRoaXMgaXMgYSBzdHJpbmcgZW1iZWRkZWQgaW4gdGhlIHBhc3NlZCBmdW5jdGlvbiB1bmRlciBERVYtb25seVxuICAgICAgLy8gY29uZGl0aW9uLiBIb3dldmVyIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBvbmx5IGluIFBST0QuIFRoZXJlZm9yZSxcbiAgICAgIC8vIGlmIHdlIHNlZSBpdCwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGRpZCBub3Qgd29yay5cblxuXG4gICAgICBpZiAoY29kZS5pbmRleE9mKCdeX14nKSA+IC0xKSB7XG4gICAgICAgIC8vIFJlbWVtYmVyIHRvIHJlcG9ydCBkdXJpbmcgbmV4dCBpbmplY3Rpb24uXG4gICAgICAgIGhhc0RldGVjdGVkQmFkRENFID0gdHJ1ZTsgLy8gQm9udXM6IHRocm93IGFuIGV4Y2VwdGlvbiBob3BpbmcgdGhhdCBpdCBnZXRzIHBpY2tlZCB1cCBieSBhIHJlcG9ydGluZyBzeXN0ZW0uXG4gICAgICAgIC8vIE5vdCBzeW5jaHJvbm91c2x5IHNvIHRoYXQgaXQgZG9lc24ndCBicmVhayB0aGUgY2FsbGluZyBjb2RlLlxuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVhY3QgaXMgcnVubmluZyBpbiBwcm9kdWN0aW9uIG1vZGUsIGJ1dCBkZWFkIGNvZGUgJyArICdlbGltaW5hdGlvbiBoYXMgbm90IGJlZW4gYXBwbGllZC4gUmVhZCBob3cgdG8gY29ycmVjdGx5ICcgKyAnY29uZmlndXJlIFJlYWN0IGZvciBwcm9kdWN0aW9uOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wZXJmLXVzZS1wcm9kdWN0aW9uLWJ1aWxkJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge31cbiAgfSAvLyBOT1RFOiBLRUVQIElOIFNZTkMgd2l0aCBzcmMvYmFja2VuZC91dGlscy5qc1xuXG5cbiAgZnVuY3Rpb24gZm9ybWF0V2l0aFN0eWxlcyhpbnB1dEFyZ3MsIHN0eWxlKSB7XG4gICAgaWYgKGlucHV0QXJncyA9PT0gdW5kZWZpbmVkIHx8IGlucHV0QXJncyA9PT0gbnVsbCB8fCBpbnB1dEFyZ3MubGVuZ3RoID09PSAwIHx8IC8vIE1hdGNoZXMgYW55IG9mICVjIGJ1dCBub3QgJSVjXG4gICAgdHlwZW9mIGlucHV0QXJnc1swXSA9PT0gJ3N0cmluZycgJiYgaW5wdXRBcmdzWzBdLm1hdGNoKC8oW14lXXxeKSglYykvZykgfHwgc3R5bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGlucHV0QXJncztcbiAgICB9IC8vIE1hdGNoZXMgYW55IG9mICUob3xPfGR8aXxzfGYpLCBidXQgbm90ICUlKG98T3xkfGl8c3xmKVxuXG5cbiAgICB2YXIgUkVHRVhQID0gLyhbXiVdfF4pKCglJSkqKSglKFtvT2Rpc2ZdKSkvZztcblxuICAgIGlmICh0eXBlb2YgaW5wdXRBcmdzWzBdID09PSAnc3RyaW5nJyAmJiBpbnB1dEFyZ3NbMF0ubWF0Y2goUkVHRVhQKSkge1xuICAgICAgcmV0dXJuIFtcIiVjXCIuY29uY2F0KGlucHV0QXJnc1swXSksIHN0eWxlXS5jb25jYXQoaG9va190b0NvbnN1bWFibGVBcnJheShpbnB1dEFyZ3Muc2xpY2UoMSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0QXJnID0gaW5wdXRBcmdzLnJlZHVjZShmdW5jdGlvbiAoZm9ybWF0U3RyLCBlbGVtLCBpKSB7XG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgIGZvcm1hdFN0ciArPSAnICc7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGhvb2tfdHlwZW9mKGVsZW0pKSB7XG4gICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFN0ciArPSAnJXMnO1xuXG4gICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIHZhciBmb3JtYXR0aW5nID0gTnVtYmVyLmlzSW50ZWdlcihlbGVtKSA/ICclaScgOiAnJWYnO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFN0ciArPSBmb3JtYXR0aW5nO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRTdHIgKz0gJyVvJztcbiAgICAgICAgfVxuICAgICAgfSwgJyVjJyk7XG4gICAgICByZXR1cm4gW2ZpcnN0QXJnLCBzdHlsZV0uY29uY2F0KGhvb2tfdG9Db25zdW1hYmxlQXJyYXkoaW5wdXRBcmdzKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVucGF0Y2hGbiA9IG51bGw7IC8vIE5PVEU6IEtFRVAgSU4gU1lOQyB3aXRoIHNyYy9iYWNrZW5kL2NvbnNvbGUuanM6cGF0Y2hGb3JTdHJpY3RNb2RlXG4gIC8vIFRoaXMgZnVuY3Rpb24gaGlkZXMgb3IgZGltcyBjb25zb2xlIGxvZ3MgZHVyaW5nIHRoZSBpbml0aWFsIGRvdWJsZSByZW5kZXJlclxuICAvLyBpbiBTdHJpY3QgTW9kZS4gV2UgbmVlZCB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIGluaXRpYWwgcmVuZGVyLFxuICAvLyBSZWFjdCBhbmQgRGV2VG9vbHMgYXJlIGNvbm5lY3RpbmcgYW5kIHRoZSByZW5kZXJlciBpbnRlcmZhY2UgaXNuJ3QgYXZhaWFibGVcbiAgLy8gYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBoYXZlIGNvbnNpc3RlbnQgbG9nZ2luZyBiZWhhdmlvciBmb3IgZG91YmxlIGxvZ3NcbiAgLy8gZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlcmVyLlxuXG4gIGZ1bmN0aW9uIHBhdGNoQ29uc29sZUZvckluaXRpYWxSZW5kZXJJblN0cmljdE1vZGUoX3JlZikge1xuICAgIHZhciBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUgPSBfcmVmLmhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSxcbiAgICAgICAgYnJvd3NlclRoZW1lID0gX3JlZi5icm93c2VyVGhlbWU7XG4gICAgdmFyIG92ZXJyaWRlQ29uc29sZU1ldGhvZHMgPSBbJ2Vycm9yJywgJ2dyb3VwJywgJ2dyb3VwQ29sbGFwc2VkJywgJ2luZm8nLCAnbG9nJywgJ3RyYWNlJywgJ3dhcm4nXTtcblxuICAgIGlmICh1bnBhdGNoRm4gIT09IG51bGwpIHtcbiAgICAgIC8vIERvbid0IHBhdGNoIHR3aWNlLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBvcmlnaW5hbENvbnNvbGVNZXRob2RzID0ge307XG5cbiAgICB1bnBhdGNoRm4gPSBmdW5jdGlvbiB1bnBhdGNoRm4oKSB7XG4gICAgICBmb3IgKHZhciBfbWV0aG9kMiBpbiBvcmlnaW5hbENvbnNvbGVNZXRob2RzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGFyZ2V0Q29uc29sZVtfbWV0aG9kMl0gPSBvcmlnaW5hbENvbnNvbGVNZXRob2RzW19tZXRob2QyXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICB9XG4gICAgfTtcblxuICAgIG92ZXJyaWRlQ29uc29sZU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbENvbnNvbGVNZXRob2RzW21ldGhvZF0gPSB0YXJnZXRDb25zb2xlW21ldGhvZF0uX19SRUFDVF9ERVZUT09MU19TVFJJQ1RfTU9ERV9PUklHSU5BTF9NRVRIT0RfXyA/IHRhcmdldENvbnNvbGVbbWV0aG9kXS5fX1JFQUNUX0RFVlRPT0xTX1NUUklDVF9NT0RFX09SSUdJTkFMX01FVEhPRF9fIDogdGFyZ2V0Q29uc29sZVttZXRob2RdO1xuXG4gICAgICAgIHZhciBvdmVycmlkZU1ldGhvZCA9IGZ1bmN0aW9uIG92ZXJyaWRlTWV0aG9kKCkge1xuICAgICAgICAgIGlmICghaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAvLyBEaW0gdGhlIHRleHQgY29sb3Igb2YgdGhlIGRvdWJsZSBsb2dzIGlmIHdlJ3JlIG5vdFxuICAgICAgICAgICAgLy8gaGlkaW5nIHRoZW0uXG4gICAgICAgICAgICB2YXIgY29sb3I7XG5cbiAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgICAgICAgICAgIGNvbG9yID0gYnJvd3NlclRoZW1lID09PSAnbGlnaHQnID8gXCJyZ2JhKDI1MCwgMTgwLCA1MCwgMC43NSlcIiA6IFwicmdiYSgyNTAsIDE4MCwgNTAsIDAuNSlcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgY29sb3IgPSBicm93c2VyVGhlbWUgPT09ICdsaWdodCcgPyBcInJnYmEoMjUwLCAxMjMsIDEzMCwgMC43NSlcIiA6IFwicmdiYSgyNTAsIDEyMywgMTMwLCAwLjUpXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAnbG9nJzpcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb2xvciA9IGJyb3dzZXJUaGVtZSA9PT0gJ2xpZ2h0JyA/IFwicmdiYSgxMjUsIDEyNSwgMTI1LCAwLjc1KVwiIDogXCJyZ2JhKDEyNSwgMTI1LCAxMjUsIDAuNSlcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh2b2lkIDAsIGhvb2tfdG9Db25zdW1hYmxlQXJyYXkoZm9ybWF0V2l0aFN0eWxlcyhhcmdzLCBcImNvbG9yOiBcIi5jb25jYXQoY29sb3IpKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0NvbnNvbGUgY29sb3IgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgb3ZlcnJpZGVNZXRob2QuX19SRUFDVF9ERVZUT09MU19TVFJJQ1RfTU9ERV9PUklHSU5BTF9NRVRIT0RfXyA9IG9yaWdpbmFsTWV0aG9kO1xuICAgICAgICBvcmlnaW5hbE1ldGhvZC5fX1JFQUNUX0RFVlRPT0xTX1NUUklDVF9NT0RFX09WRVJSSURFX01FVEhPRF9fID0gb3ZlcnJpZGVNZXRob2Q7XG4gICAgICAgIHRhcmdldENvbnNvbGVbbWV0aG9kXSA9IG92ZXJyaWRlTWV0aG9kO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfSk7XG4gIH0gLy8gTk9URTogS0VFUCBJTiBTWU5DIHdpdGggc3JjL2JhY2tlbmQvY29uc29sZS5qczp1bnBhdGNoRm9yU3RyaWN0TW9kZVxuXG5cbiAgZnVuY3Rpb24gdW5wYXRjaENvbnNvbGVGb3JJbml0aWFsUmVuZGVySW5TdHJpY3RNb2RlKCkge1xuICAgIGlmICh1bnBhdGNoRm4gIT09IG51bGwpIHtcbiAgICAgIHVucGF0Y2hGbigpO1xuICAgICAgdW5wYXRjaEZuID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgdWlkQ291bnRlciA9IDA7XG5cbiAgZnVuY3Rpb24gaW5qZWN0KHJlbmRlcmVyKSB7XG4gICAgdmFyIGlkID0gKyt1aWRDb3VudGVyO1xuICAgIHJlbmRlcmVycy5zZXQoaWQsIHJlbmRlcmVyKTtcbiAgICB2YXIgcmVhY3RCdWlsZFR5cGUgPSBoYXNEZXRlY3RlZEJhZERDRSA/ICdkZWFkY29kZScgOiBkZXRlY3RSZWFjdEJ1aWxkVHlwZShyZW5kZXJlcik7IC8vIFBhdGNoaW5nIHRoZSBjb25zb2xlIGVuYWJsZXMgRGV2VG9vbHMgdG8gZG8gYSBmZXcgdXNlZnVsIHRoaW5nczpcbiAgICAvLyAqIEFwcGVuZCBjb21wb25lbnQgc3RhY2tzIHRvIHdhcm5pbmdzIGFuZCBlcnJvciBtZXNzYWdlc1xuICAgIC8vICogRGlzYWJsaW5nIG9yIG1hcmtpbmcgbG9ncyBkdXJpbmcgYSBkb3VibGUgcmVuZGVyIGluIFN0cmljdCBNb2RlXG4gICAgLy8gKiBEaXNhYmxlIGxvZ2dpbmcgZHVyaW5nIHJlLXJlbmRlcnMgdG8gaW5zcGVjdCBob29rcyAoc2VlIGluc3BlY3RIb29rc09mRmliZXIpXG4gICAgLy9cbiAgICAvLyBBbGxvdyBwYXRjaGluZyBjb25zb2xlIGVhcmx5IChkdXJpbmcgaW5qZWN0aW9uKSB0b1xuICAgIC8vIHByb3ZpZGUgZGV2ZWxvcGVycyB3aXRoIGNvbXBvbmVudHMgc3RhY2tzIGV2ZW4gaWYgdGhleSBkb24ndCBydW4gRGV2VG9vbHMuXG5cbiAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KCdfX1JFQUNUX0RFVlRPT0xTX0NPTlNPTEVfRlVOQ1RJT05TX18nKSkge1xuICAgICAgdmFyIF90YXJnZXQkX19SRUFDVF9ERVZUTyA9IHRhcmdldC5fX1JFQUNUX0RFVlRPT0xTX0NPTlNPTEVfRlVOQ1RJT05TX18sXG4gICAgICAgICAgcmVnaXN0ZXJSZW5kZXJlcldpdGhDb25zb2xlID0gX3RhcmdldCRfX1JFQUNUX0RFVlRPLnJlZ2lzdGVyUmVuZGVyZXJXaXRoQ29uc29sZSxcbiAgICAgICAgICBwYXRjaENvbnNvbGVVc2luZ1dpbmRvd1ZhbHVlcyA9IF90YXJnZXQkX19SRUFDVF9ERVZUTy5wYXRjaENvbnNvbGVVc2luZ1dpbmRvd1ZhbHVlcztcblxuICAgICAgaWYgKHR5cGVvZiByZWdpc3RlclJlbmRlcmVyV2l0aENvbnNvbGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHBhdGNoQ29uc29sZVVzaW5nV2luZG93VmFsdWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZ2lzdGVyUmVuZGVyZXJXaXRoQ29uc29sZShyZW5kZXJlcik7XG4gICAgICAgIHBhdGNoQ29uc29sZVVzaW5nV2luZG93VmFsdWVzKCk7XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBoYXZlIGp1c3QgcmVsb2FkZWQgdG8gcHJvZmlsZSwgd2UgbmVlZCB0byBpbmplY3QgdGhlIHJlbmRlcmVyIGludGVyZmFjZSBiZWZvcmUgdGhlIGFwcCBsb2Fkcy5cbiAgICAvLyBPdGhlcndpc2UgdGhlIHJlbmRlcmVyIHdvbid0IHlldCBleGlzdCBhbmQgd2UgY2FuIHNraXAgdGhpcyBzdGVwLlxuXG5cbiAgICB2YXIgYXR0YWNoID0gdGFyZ2V0Ll9fUkVBQ1RfREVWVE9PTFNfQVRUQUNIX187XG5cbiAgICBpZiAodHlwZW9mIGF0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHJlbmRlcmVySW50ZXJmYWNlID0gYXR0YWNoKGhvb2ssIGlkLCByZW5kZXJlciwgdGFyZ2V0KTtcbiAgICAgIGhvb2sucmVuZGVyZXJJbnRlcmZhY2VzLnNldChpZCwgcmVuZGVyZXJJbnRlcmZhY2UpO1xuICAgIH1cblxuICAgIGhvb2suZW1pdCgncmVuZGVyZXInLCB7XG4gICAgICBpZDogaWQsXG4gICAgICByZW5kZXJlcjogcmVuZGVyZXIsXG4gICAgICByZWFjdEJ1aWxkVHlwZTogcmVhY3RCdWlsZFR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICB2YXIgaGFzRGV0ZWN0ZWRCYWREQ0UgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzdWIoZXZlbnQsIGZuKSB7XG4gICAgaG9vay5vbihldmVudCwgZm4pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG9vay5vZmYoZXZlbnQsIGZuKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gb24oZXZlbnQsIGZuKSB7XG4gICAgaWYgKCFsaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICBsaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzW2V2ZW50XS5wdXNoKGZuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9mZihldmVudCwgZm4pIHtcbiAgICBpZiAoIWxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnNbZXZlbnRdLmluZGV4T2YoZm4pO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgbGlzdGVuZXJzW2V2ZW50XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGlmICghbGlzdGVuZXJzW2V2ZW50XS5sZW5ndGgpIHtcbiAgICAgIGRlbGV0ZSBsaXN0ZW5lcnNbZXZlbnRdO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGRhdGEpIHtcbiAgICBpZiAobGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgbGlzdGVuZXJzW2V2ZW50XS5tYXAoZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbihkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZpYmVyUm9vdHMocmVuZGVyZXJJRCkge1xuICAgIHZhciByb290cyA9IGZpYmVyUm9vdHM7XG5cbiAgICBpZiAoIXJvb3RzW3JlbmRlcmVySURdKSB7XG4gICAgICByb290c1tyZW5kZXJlcklEXSA9IG5ldyBTZXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdHNbcmVuZGVyZXJJRF07XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBmaWJlcikge1xuICAgIHZhciByZW5kZXJlckludGVyZmFjZSA9IHJlbmRlcmVySW50ZXJmYWNlcy5nZXQocmVuZGVyZXJJRCk7XG5cbiAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UgIT0gbnVsbCkge1xuICAgICAgcmVuZGVyZXJJbnRlcmZhY2UuaGFuZGxlQ29tbWl0RmliZXJVbm1vdW50KGZpYmVyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsKSB7XG4gICAgdmFyIG1vdW50ZWRSb290cyA9IGhvb2suZ2V0RmliZXJSb290cyhyZW5kZXJlcklEKTtcbiAgICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudDtcbiAgICB2YXIgaXNLbm93blJvb3QgPSBtb3VudGVkUm9vdHMuaGFzKHJvb3QpO1xuICAgIHZhciBpc1VubW91bnRpbmcgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgPT0gbnVsbCB8fCBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZWxlbWVudCA9PSBudWxsOyAvLyBLZWVwIHRyYWNrIG9mIG1vdW50ZWQgcm9vdHMgc28gd2UgY2FuIGh5ZHJhdGUgd2hlbiBEZXZUb29scyBjb25uZWN0LlxuXG4gICAgaWYgKCFpc0tub3duUm9vdCAmJiAhaXNVbm1vdW50aW5nKSB7XG4gICAgICBtb3VudGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgIH0gZWxzZSBpZiAoaXNLbm93blJvb3QgJiYgaXNVbm1vdW50aW5nKSB7XG4gICAgICBtb3VudGVkUm9vdHMuZGVsZXRlKHJvb3QpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlckludGVyZmFjZSA9IHJlbmRlcmVySW50ZXJmYWNlcy5nZXQocmVuZGVyZXJJRCk7XG5cbiAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UgIT0gbnVsbCkge1xuICAgICAgcmVuZGVyZXJJbnRlcmZhY2UuaGFuZGxlQ29tbWl0RmliZXJSb290KHJvb3QsIHByaW9yaXR5TGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUG9zdENvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290KSB7XG4gICAgdmFyIHJlbmRlcmVySW50ZXJmYWNlID0gcmVuZGVyZXJJbnRlcmZhY2VzLmdldChyZW5kZXJlcklEKTtcblxuICAgIGlmIChyZW5kZXJlckludGVyZmFjZSAhPSBudWxsKSB7XG4gICAgICByZW5kZXJlckludGVyZmFjZS5oYW5kbGVQb3N0Q29tbWl0RmliZXJSb290KHJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFN0cmljdE1vZGUocmVuZGVyZXJJRCwgaXNTdHJpY3RNb2RlKSB7XG4gICAgdmFyIHJlbmRlcmVySW50ZXJmYWNlID0gcmVuZGVyZXJJbnRlcmZhY2VzLmdldChyZW5kZXJlcklEKTtcblxuICAgIGlmIChyZW5kZXJlckludGVyZmFjZSAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNTdHJpY3RNb2RlKSB7XG4gICAgICAgIHJlbmRlcmVySW50ZXJmYWNlLnBhdGNoQ29uc29sZUZvclN0cmljdE1vZGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVySW50ZXJmYWNlLnVucGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBkdXJpbmcgaW5pdGlhbCByZW5kZXIgaW4gdGhlIGV4dGVuc2lvbiBiZWZvcmUgRGV2VG9vbHNcbiAgICAgIC8vIGZpbmlzaGVzIGl0cyBoYW5kc2hha2Ugd2l0aCB0aGUgaW5qZWN0ZWQgcmVuZGVyZXJcbiAgICAgIGlmIChpc1N0cmljdE1vZGUpIHtcbiAgICAgICAgdmFyIGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSA9IHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0hJREVfQ09OU09MRV9MT0dTX0lOX1NUUklDVF9NT0RFX18gPT09IHRydWU7XG4gICAgICAgIHZhciBicm93c2VyVGhlbWUgPSB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19CUk9XU0VSX1RIRU1FX187XG4gICAgICAgIHBhdGNoQ29uc29sZUZvckluaXRpYWxSZW5kZXJJblN0cmljdE1vZGUoe1xuICAgICAgICAgIGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZTogaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlLFxuICAgICAgICAgIGJyb3dzZXJUaGVtZTogYnJvd3NlclRoZW1lXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5wYXRjaENvbnNvbGVGb3JJbml0aWFsUmVuZGVySW5TdHJpY3RNb2RlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG9wZW5Nb2R1bGVSYW5nZXNTdGFjayA9IFtdO1xuICB2YXIgbW9kdWxlUmFuZ2VzID0gW107XG5cbiAgZnVuY3Rpb24gZ2V0VG9wU3RhY2tGcmFtZVN0cmluZyhlcnJvcikge1xuICAgIHZhciBmcmFtZXMgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIGZyYW1lID0gZnJhbWVzLmxlbmd0aCA+IDEgPyBmcmFtZXNbMV0gOiBudWxsO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEludGVybmFsTW9kdWxlUmFuZ2VzKCkge1xuICAgIHJldHVybiBtb2R1bGVSYW5nZXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQoZXJyb3IpIHtcbiAgICB2YXIgc3RhcnRTdGFja0ZyYW1lID0gZ2V0VG9wU3RhY2tGcmFtZVN0cmluZyhlcnJvcik7XG5cbiAgICBpZiAoc3RhcnRTdGFja0ZyYW1lICE9PSBudWxsKSB7XG4gICAgICBvcGVuTW9kdWxlUmFuZ2VzU3RhY2sucHVzaChzdGFydFN0YWNrRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKGVycm9yKSB7XG4gICAgaWYgKG9wZW5Nb2R1bGVSYW5nZXNTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgc3RhcnRTdGFja0ZyYW1lID0gb3Blbk1vZHVsZVJhbmdlc1N0YWNrLnBvcCgpO1xuICAgICAgdmFyIHN0b3BTdGFja0ZyYW1lID0gZ2V0VG9wU3RhY2tGcmFtZVN0cmluZyhlcnJvcik7XG5cbiAgICAgIGlmIChzdG9wU3RhY2tGcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBtb2R1bGVSYW5nZXMucHVzaChbc3RhcnRTdGFja0ZyYW1lLCBzdG9wU3RhY2tGcmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBUT0RPOiBNb3JlIG1lYW5pbmdmdWwgbmFtZXMgZm9yIFwicmVuZGVyZXJJbnRlcmZhY2VzXCIgYW5kIFwicmVuZGVyZXJzXCIuXG5cblxuICB2YXIgZmliZXJSb290cyA9IHt9O1xuICB2YXIgcmVuZGVyZXJJbnRlcmZhY2VzID0gbmV3IE1hcCgpO1xuICB2YXIgbGlzdGVuZXJzID0ge307XG4gIHZhciByZW5kZXJlcnMgPSBuZXcgTWFwKCk7XG4gIHZhciBiYWNrZW5kcyA9IG5ldyBNYXAoKTtcbiAgdmFyIGhvb2sgPSB7XG4gICAgcmVuZGVyZXJJbnRlcmZhY2VzOiByZW5kZXJlckludGVyZmFjZXMsXG4gICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnMsXG4gICAgYmFja2VuZHM6IGJhY2tlbmRzLFxuICAgIC8vIEZhc3QgUmVmcmVzaCBmb3Igd2ViIHJlbGllcyBvbiB0aGlzLlxuICAgIHJlbmRlcmVyczogcmVuZGVyZXJzLFxuICAgIGVtaXQ6IGVtaXQsXG4gICAgZ2V0RmliZXJSb290czogZ2V0RmliZXJSb290cyxcbiAgICBpbmplY3Q6IGluamVjdCxcbiAgICBvbjogb24sXG4gICAgb2ZmOiBvZmYsXG4gICAgc3ViOiBzdWIsXG4gICAgLy8gVGhpcyBpcyBhIGxlZ2FjeSBmbGFnLlxuICAgIC8vIFJlYWN0IHYxNiBjaGVja3MgdGhlIGhvb2sgZm9yIHRoaXMgdG8gZW5zdXJlIERldlRvb2xzIGlzIG5ldyBlbm91Z2guXG4gICAgc3VwcG9ydHNGaWJlcjogdHJ1ZSxcbiAgICAvLyBSZWFjdCBjYWxscyB0aGVzZSBtZXRob2RzLlxuICAgIGNoZWNrRENFOiBjaGVja0RDRSxcbiAgICBvbkNvbW1pdEZpYmVyVW5tb3VudDogb25Db21taXRGaWJlclVubW91bnQsXG4gICAgb25Db21taXRGaWJlclJvb3Q6IG9uQ29tbWl0RmliZXJSb290LFxuICAgIG9uUG9zdENvbW1pdEZpYmVyUm9vdDogb25Qb3N0Q29tbWl0RmliZXJSb290LFxuICAgIHNldFN0cmljdE1vZGU6IHNldFN0cmljdE1vZGUsXG4gICAgLy8gU2NoZWR1bGUgUHJvZmlsZXIgcnVudGltZSBoZWxwZXJzLlxuICAgIC8vIFRoZXNlIGludGVybmFsIFJlYWN0IG1vZHVsZXMgdG8gcmVwb3J0IHRoZWlyIG93biBib3VuZGFyaWVzXG4gICAgLy8gd2hpY2ggaW4gdHVybiBlbmFibGVzIHRoZSBwcm9maWxlciB0byBkaW0gb3IgZmlsdGVyIGludGVybmFsIGZyYW1lcy5cbiAgICBnZXRJbnRlcm5hbE1vZHVsZVJhbmdlczogZ2V0SW50ZXJuYWxNb2R1bGVSYW5nZXMsXG4gICAgcmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0OiByZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQsXG4gICAgcmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3A6IHJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wXG4gIH07XG5cbiAgaWYgKGZhbHNlKSB7fVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsICdfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18nLCB7XG4gICAgLy8gVGhpcyBwcm9wZXJ0eSBuZWVkcyB0byBiZSBjb25maWd1cmFibGUgZm9yIHRoZSB0ZXN0IGVudmlyb25tZW50LFxuICAgIC8vIGVsc2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBkZWxldGUgYW5kIHJlY3JlYXRlIGl0IGJldHdlZW4gdGVzdHMuXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBob29rO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBob29rO1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9sZWdhY3kvdXRpbHMuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuZnVuY3Rpb24gZGVjb3JhdGUob2JqZWN0LCBhdHRyLCBmbikge1xuICB2YXIgb2xkID0gb2JqZWN0W2F0dHJdOyAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gd2VicGFjayBjb25maWcgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBhbGxvdyBgdGhpc2AgdHlwZSBhbm5vdGF0aW9uc1xuXG4gIG9iamVjdFthdHRyXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIG9sZCwgYXJndW1lbnRzKTtcbiAgfTtcblxuICByZXR1cm4gb2xkO1xufVxuZnVuY3Rpb24gZGVjb3JhdGVNYW55KHNvdXJjZSwgZm5zKSB7XG4gIHZhciBvbGRzID0ge307XG5cbiAgZm9yICh2YXIgbmFtZSBpbiBmbnMpIHtcbiAgICBvbGRzW25hbWVdID0gZGVjb3JhdGUoc291cmNlLCBuYW1lLCBmbnNbbmFtZV0pO1xuICB9XG5cbiAgcmV0dXJuIG9sZHM7XG59XG5mdW5jdGlvbiByZXN0b3JlTWFueShzb3VyY2UsIG9sZHMpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBvbGRzKSB7XG4gICAgc291cmNlW25hbWVdID0gb2xkc1tuYW1lXTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gd2VicGFjayBjb25maWcgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBhbGxvdyBgdGhpc2AgdHlwZSBhbm5vdGF0aW9uc1xuXG5mdW5jdGlvbiBmb3JjZVVwZGF0ZShpbnN0YW5jZSkge1xuICBpZiAodHlwZW9mIGluc3RhbmNlLmZvcmNlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgfSBlbHNlIGlmIChpbnN0YW5jZS51cGRhdGVyICE9IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgZnVuY3Rpb24gKCkge30sICdmb3JjZVVwZGF0ZScpO1xuICB9XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL2xlZ2FjeS9yZW5kZXJlci5qc1xuZnVuY3Rpb24gbGVnYWN5X3JlbmRlcmVyX293bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIGxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgbGVnYWN5X3JlbmRlcmVyX293bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBsZWdhY3lfcmVuZGVyZXJfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgbGVnYWN5X3JlbmRlcmVyX293bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIGxlZ2FjeV9yZW5kZXJlcl9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIGxlZ2FjeV9yZW5kZXJlcl90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IGxlZ2FjeV9yZW5kZXJlcl90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgbGVnYWN5X3JlbmRlcmVyX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBsZWdhY3lfcmVuZGVyZXJfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIGdldERhdGEoaW50ZXJuYWxJbnN0YW5jZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBudWxsO1xuICB2YXIga2V5ID0gbnVsbDsgLy8gIT0gdXNlZCBkZWxpYmVyYXRlbHkgaGVyZSB0byBjYXRjaCB1bmRlZmluZWQgYW5kIG51bGxcblxuICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5rZXkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5rZXkpO1xuICAgIH1cblxuICAgIHZhciBlbGVtZW50VHlwZSA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZW9mIGVsZW1lbnRUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgZGlzcGxheU5hbWUgPSBlbGVtZW50VHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZShlbGVtZW50VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXG4gICAga2V5OiBrZXlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFR5cGUoaW50ZXJuYWxJbnN0YW5jZSkge1xuICAvLyAhPSB1c2VkIGRlbGliZXJhdGVseSBoZXJlIHRvIGNhdGNoIHVuZGVmaW5lZCBhbmQgbnVsbFxuICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHZhciBlbGVtZW50VHlwZSA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZW9mIGVsZW1lbnRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgcHVibGljSW5zdGFuY2UgPSBpbnRlcm5hbEluc3RhbmNlLmdldFB1YmxpY0luc3RhbmNlKCk7XG5cbiAgICAgIGlmIChwdWJsaWNJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHlwZXNfRWxlbWVudFR5cGVDbGFzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlc19FbGVtZW50VHlwZUZ1bmN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnRUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIEVsZW1lbnRUeXBlSG9zdENvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gRWxlbWVudFR5cGVPdGhlck9yVW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oaW50ZXJuYWxJbnN0YW5jZSkge1xuICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gSWYgdGhlIHBhcmVudCBpcyBhIG5hdGl2ZSBub2RlIHdpdGhvdXQgcmVuZGVyZWQgY2hpbGRyZW4sIGJ1dCB3aXRoXG4gIC8vIG11bHRpcGxlIHN0cmluZyBjaGlsZHJlbiwgdGhlbiB0aGUgYGVsZW1lbnRgIHRoYXQgZ2V0cyBwYXNzZWQgaW4gaGVyZSBpc1xuICAvLyBhIHBsYWluIHZhbHVlIC0tIGEgc3RyaW5nIG9yIG51bWJlci5cblxuICBpZiAobGVnYWN5X3JlbmRlcmVyX3R5cGVvZihpbnRlcm5hbEluc3RhbmNlKSAhPT0gJ29iamVjdCcpIHsvLyBObyBjaGlsZHJlblxuICB9IGVsc2UgaWYgKGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ID09PSBudWxsIHx8IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ID09PSBmYWxzZSkgey8vIE5vIGNoaWxkcmVuXG4gIH0gZWxzZSBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcmVuZGVyZWRDb21wb25lbnQpIHtcbiAgICB2YXIgY2hpbGQgPSBpbnRlcm5hbEluc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudDtcblxuICAgIGlmIChnZXRFbGVtZW50VHlwZShjaGlsZCkgIT09IEVsZW1lbnRUeXBlT3RoZXJPclVua25vd24pIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpbnRlcm5hbEluc3RhbmNlLl9yZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSBpbnRlcm5hbEluc3RhbmNlLl9yZW5kZXJlZENoaWxkcmVuO1xuXG4gICAgZm9yICh2YXIgbmFtZSBpbiByZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgICB2YXIgX2NoaWxkID0gcmVuZGVyZWRDaGlsZHJlbltuYW1lXTtcblxuICAgICAgaWYgKGdldEVsZW1lbnRUeXBlKF9jaGlsZCkgIT09IEVsZW1lbnRUeXBlT3RoZXJPclVua25vd24pIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChfY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBOb3RlOiB3ZSBza2lwIHRoZSBjYXNlIHdoZXJlIGNoaWxkcmVuIGFyZSBqdXN0IHN0cmluZ3Mgb3IgbnVtYmVyc1xuICAvLyBiZWNhdXNlIHRoZSBuZXcgRGV2VG9vbHMgc2tpcHMgb3ZlciBob3N0IHRleHQgbm9kZXMgYW55d2F5LlxuXG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiByZW5kZXJlcl9hdHRhY2goaG9vaywgcmVuZGVyZXJJRCwgcmVuZGVyZXIsIGdsb2JhbCkge1xuICB2YXIgaWRUb0ludGVybmFsSW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlVG9JRE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlVG9Sb290SURNYXAgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgZ2V0SW50ZXJuYWxJREZvck5hdGl2ZSA9IG51bGw7XG4gIHZhciBmaW5kTmF0aXZlTm9kZUZvckludGVybmFsSUQ7XG5cbiAgdmFyIGdldEZpYmVyRm9yTmF0aXZlID0gZnVuY3Rpb24gZ2V0RmliZXJGb3JOYXRpdmUobm9kZSkge1xuICAgIC8vIE5vdCBpbXBsZW1lbnRlZC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBpZiAocmVuZGVyZXIuQ29tcG9uZW50VHJlZSkge1xuICAgIGdldEludGVybmFsSURGb3JOYXRpdmUgPSBmdW5jdGlvbiBnZXRJbnRlcm5hbElERm9yTmF0aXZlKG5vZGUsIGZpbmROZWFyZXN0VW5maWx0ZXJlZEFuY2VzdG9yKSB7XG4gICAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IHJlbmRlcmVyLkNvbXBvbmVudFRyZWUuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobm9kZSk7XG4gICAgICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZVRvSURNYXAuZ2V0KGludGVybmFsSW5zdGFuY2UpIHx8IG51bGw7XG4gICAgfTtcblxuICAgIGZpbmROYXRpdmVOb2RlRm9ySW50ZXJuYWxJRCA9IGZ1bmN0aW9uIGZpbmROYXRpdmVOb2RlRm9ySW50ZXJuYWxJRChpZCkge1xuICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5nZXQoaWQpO1xuICAgICAgcmV0dXJuIHJlbmRlcmVyLkNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgICB9O1xuXG4gICAgZ2V0RmliZXJGb3JOYXRpdmUgPSBmdW5jdGlvbiBnZXRGaWJlckZvck5hdGl2ZShub2RlKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIuQ29tcG9uZW50VHJlZS5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShub2RlKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlbmRlcmVyLk1vdW50LmdldElEICYmIHJlbmRlcmVyLk1vdW50LmdldE5vZGUpIHtcbiAgICBnZXRJbnRlcm5hbElERm9yTmF0aXZlID0gZnVuY3Rpb24gZ2V0SW50ZXJuYWxJREZvck5hdGl2ZShub2RlLCBmaW5kTmVhcmVzdFVuZmlsdGVyZWRBbmNlc3Rvcikge1xuICAgICAgLy8gTm90IGltcGxlbWVudGVkLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGZpbmROYXRpdmVOb2RlRm9ySW50ZXJuYWxJRCA9IGZ1bmN0aW9uIGZpbmROYXRpdmVOb2RlRm9ySW50ZXJuYWxJRChpZCkge1xuICAgICAgLy8gTm90IGltcGxlbWVudGVkLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lRm9yRmliZXJJRChpZCkge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gaWRUb0ludGVybmFsSW5zdGFuY2VNYXAuZ2V0KGlkKTtcbiAgICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZSA/IGdldERhdGEoaW50ZXJuYWxJbnN0YW5jZSkuZGlzcGxheU5hbWUgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SUQoaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIGlmIChsZWdhY3lfcmVuZGVyZXJfdHlwZW9mKGludGVybmFsSW5zdGFuY2UpICE9PSAnb2JqZWN0JyB8fCBpbnRlcm5hbEluc3RhbmNlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW50ZXJuYWwgaW5zdGFuY2U6ICcgKyBpbnRlcm5hbEluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2VUb0lETWFwLmhhcyhpbnRlcm5hbEluc3RhbmNlKSkge1xuICAgICAgdmFyIF9pZCA9IGdldFVJRCgpO1xuXG4gICAgICBpbnRlcm5hbEluc3RhbmNlVG9JRE1hcC5zZXQoaW50ZXJuYWxJbnN0YW5jZSwgX2lkKTtcbiAgICAgIGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLnNldChfaWQsIGludGVybmFsSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcm5hbEluc3RhbmNlVG9JRE1hcC5nZXQoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVFcXVhbEFycmF5cyhhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFRoaXMgaXMgc2hhcmVkIG11dGFibGUgc3RhdGUgdGhhdCBsZXRzIHVzIGtlZXAgdHJhY2sgb2Ygd2hlcmUgd2UgYXJlLlxuXG5cbiAgdmFyIHBhcmVudElEU3RhY2sgPSBbXTtcbiAgdmFyIG9sZFJlY29uY2lsZXJNZXRob2RzID0gbnVsbDtcblxuICBpZiAocmVuZGVyZXIuUmVjb25jaWxlcikge1xuICAgIC8vIFJlYWN0IDE1XG4gICAgb2xkUmVjb25jaWxlck1ldGhvZHMgPSBkZWNvcmF0ZU1hbnkocmVuZGVyZXIuUmVjb25jaWxlciwge1xuICAgICAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIG1vdW50Q29tcG9uZW50KGZuLCBhcmdzKSB7XG4gICAgICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGhvc3RDb250YWluZXJJbmZvID0gYXJnc1szXTtcblxuICAgICAgICBpZiAoZ2V0RWxlbWVudFR5cGUoaW50ZXJuYWxJbnN0YW5jZSkgPT09IEVsZW1lbnRUeXBlT3RoZXJPclVua25vd24pIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChob3N0Q29udGFpbmVySW5mby5fdG9wTGV2ZWxXcmFwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBTU1JcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpZCA9IGdldElEKGludGVybmFsSW5zdGFuY2UpOyAvLyBQdXNoIHRoZSBvcGVyYXRpb24uXG5cbiAgICAgICAgdmFyIHBhcmVudElEID0gcGFyZW50SURTdGFjay5sZW5ndGggPiAwID8gcGFyZW50SURTdGFja1twYXJlbnRJRFN0YWNrLmxlbmd0aCAtIDFdIDogMDtcbiAgICAgICAgcmVjb3JkTW91bnQoaW50ZXJuYWxJbnN0YW5jZSwgaWQsIHBhcmVudElEKTtcbiAgICAgICAgcGFyZW50SURTdGFjay5wdXNoKGlkKTsgLy8gUmVtZW1iZXIgdGhlIHJvb3QuXG5cbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZVRvUm9vdElETWFwLnNldChpbnRlcm5hbEluc3RhbmNlLCBnZXRJRChob3N0Q29udGFpbmVySW5mby5fdG9wTGV2ZWxXcmFwcGVyKSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICBwYXJlbnRJRFN0YWNrLnBvcCgpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHBhcmVudElEU3RhY2sgPSBbXTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHBhcmVudElEU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcm9vdElEID0gaW50ZXJuYWxJbnN0YW5jZVRvUm9vdElETWFwLmdldChpbnRlcm5hbEluc3RhbmNlKTtcblxuICAgICAgICAgICAgaWYgKHJvb3RJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gZmluZCByb290IElELicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbHVzaFBlbmRpbmdFdmVudHMocm9vdElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6IGZ1bmN0aW9uIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeShmbiwgYXJncykge1xuICAgICAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGFyZ3NbMF07XG5cbiAgICAgICAgaWYgKGdldEVsZW1lbnRUeXBlKGludGVybmFsSW5zdGFuY2UpID09PSBFbGVtZW50VHlwZU90aGVyT3JVbmtub3duKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaWQgPSBnZXRJRChpbnRlcm5hbEluc3RhbmNlKTtcbiAgICAgICAgcGFyZW50SURTdGFjay5wdXNoKGlkKTtcbiAgICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IGdldENoaWxkcmVuKGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IGdldENoaWxkcmVuKGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKCFhcmVFcXVhbEFycmF5cyhwcmV2Q2hpbGRyZW4sIG5leHRDaGlsZHJlbikpIHtcbiAgICAgICAgICAgIC8vIFB1c2ggdGhlIG9wZXJhdGlvblxuICAgICAgICAgICAgcmVjb3JkUmVvcmRlcihpbnRlcm5hbEluc3RhbmNlLCBpZCwgbmV4dENoaWxkcmVuKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJlbnRJRFN0YWNrLnBvcCgpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHBhcmVudElEU3RhY2sgPSBbXTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHBhcmVudElEU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcm9vdElEID0gaW50ZXJuYWxJbnN0YW5jZVRvUm9vdElETWFwLmdldChpbnRlcm5hbEluc3RhbmNlKTtcblxuICAgICAgICAgICAgaWYgKHJvb3RJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gZmluZCByb290IElELicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbHVzaFBlbmRpbmdFdmVudHMocm9vdElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbiByZWNlaXZlQ29tcG9uZW50KGZuLCBhcmdzKSB7XG4gICAgICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gYXJnc1swXTtcblxuICAgICAgICBpZiAoZ2V0RWxlbWVudFR5cGUoaW50ZXJuYWxJbnN0YW5jZSkgPT09IEVsZW1lbnRUeXBlT3RoZXJPclVua25vd24pIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpZCA9IGdldElEKGludGVybmFsSW5zdGFuY2UpO1xuICAgICAgICBwYXJlbnRJRFN0YWNrLnB1c2goaWQpO1xuICAgICAgICB2YXIgcHJldkNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4oaW50ZXJuYWxJbnN0YW5jZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICB2YXIgbmV4dENoaWxkcmVuID0gZ2V0Q2hpbGRyZW4oaW50ZXJuYWxJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoIWFyZUVxdWFsQXJyYXlzKHByZXZDaGlsZHJlbiwgbmV4dENoaWxkcmVuKSkge1xuICAgICAgICAgICAgLy8gUHVzaCB0aGUgb3BlcmF0aW9uXG4gICAgICAgICAgICByZWNvcmRSZW9yZGVyKGludGVybmFsSW5zdGFuY2UsIGlkLCBuZXh0Q2hpbGRyZW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudElEU3RhY2sucG9wKCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcGFyZW50SURTdGFjayA9IFtdO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAocGFyZW50SURTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZhciByb290SUQgPSBpbnRlcm5hbEluc3RhbmNlVG9Sb290SURNYXAuZ2V0KGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocm9vdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHJvb3QgSUQuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsdXNoUGVuZGluZ0V2ZW50cyhyb290SUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIHVubW91bnRDb21wb25lbnQoZm4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBhcmdzWzBdO1xuXG4gICAgICAgIGlmIChnZXRFbGVtZW50VHlwZShpbnRlcm5hbEluc3RhbmNlKSA9PT0gRWxlbWVudFR5cGVPdGhlck9yVW5rbm93bikge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGlkID0gZ2V0SUQoaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgICAgIHBhcmVudElEU3RhY2sucHVzaChpZCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW29iamVjdC10aGlzLXJlZmVyZW5jZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICBwYXJlbnRJRFN0YWNrLnBvcCgpOyAvLyBQdXNoIHRoZSBvcGVyYXRpb24uXG5cbiAgICAgICAgICByZWNvcmRVbm1vdW50KGludGVybmFsSW5zdGFuY2UsIGlkKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBwYXJlbnRJRFN0YWNrID0gW107XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChwYXJlbnRJRFN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHJvb3RJRCA9IGludGVybmFsSW5zdGFuY2VUb1Jvb3RJRE1hcC5nZXQoaW50ZXJuYWxJbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIGlmIChyb290SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgcm9vdCBJRC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmx1c2hQZW5kaW5nRXZlbnRzKHJvb3RJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGlmIChvbGRSZWNvbmNpbGVyTWV0aG9kcyAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlcmVyLkNvbXBvbmVudCkge1xuICAgICAgICByZXN0b3JlTWFueShyZW5kZXJlci5Db21wb25lbnQuTWl4aW4sIG9sZFJlY29uY2lsZXJNZXRob2RzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3RvcmVNYW55KHJlbmRlcmVyLlJlY29uY2lsZXIsIG9sZFJlY29uY2lsZXJNZXRob2RzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvbGRSZWNvbmNpbGVyTWV0aG9kcyA9IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvcmRNb3VudChpbnRlcm5hbEluc3RhbmNlLCBpZCwgcGFyZW50SUQpIHtcbiAgICB2YXIgaXNSb290ID0gcGFyZW50SUQgPT09IDA7XG5cbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBjb25zb2xlLmxvZygnJWNyZWNvcmRNb3VudCgpJywgJ2NvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7JywgaWQsIGdldERhdGEoaW50ZXJuYWxJbnN0YW5jZSkuZGlzcGxheU5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIC8vIFRPRE8gSXMgdGhpcyByaWdodD8gRm9yIGFsbCB2ZXJzaW9ucz9cbiAgICAgIHZhciBoYXNPd25lck1ldGFkYXRhID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgIT0gbnVsbCAmJiBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXIgIT0gbnVsbDtcbiAgICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fQUREKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oaWQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihFbGVtZW50VHlwZVJvb3QpO1xuICAgICAgcHVzaE9wZXJhdGlvbigwKTsgLy8gU3RyaWN0TW9kZSBjb21wbGlhbnQ/XG5cbiAgICAgIHB1c2hPcGVyYXRpb24oMCk7IC8vIFByb2ZpbGluZyBmbGFnXG5cbiAgICAgIHB1c2hPcGVyYXRpb24oMCk7IC8vIFN0cmljdE1vZGUgc3VwcG9ydGVkP1xuXG4gICAgICBwdXNoT3BlcmF0aW9uKGhhc093bmVyTWV0YWRhdGEgPyAxIDogMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0eXBlID0gZ2V0RWxlbWVudFR5cGUoaW50ZXJuYWxJbnN0YW5jZSk7XG5cbiAgICAgIHZhciBfZ2V0RGF0YSA9IGdldERhdGEoaW50ZXJuYWxJbnN0YW5jZSksXG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBfZ2V0RGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBrZXkgPSBfZ2V0RGF0YS5rZXk7XG5cbiAgICAgIHZhciBvd25lcklEID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgIT0gbnVsbCAmJiBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXIgIT0gbnVsbCA/IGdldElEKGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50Ll9vd25lcikgOiAwO1xuICAgICAgdmFyIGRpc3BsYXlOYW1lU3RyaW5nSUQgPSBnZXRTdHJpbmdJRChkaXNwbGF5TmFtZSk7XG4gICAgICB2YXIga2V5U3RyaW5nSUQgPSBnZXRTdHJpbmdJRChrZXkpO1xuICAgICAgcHVzaE9wZXJhdGlvbihUUkVFX09QRVJBVElPTl9BREQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihpZCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKHR5cGUpO1xuICAgICAgcHVzaE9wZXJhdGlvbihwYXJlbnRJRCk7XG4gICAgICBwdXNoT3BlcmF0aW9uKG93bmVySUQpO1xuICAgICAgcHVzaE9wZXJhdGlvbihkaXNwbGF5TmFtZVN0cmluZ0lEKTtcbiAgICAgIHB1c2hPcGVyYXRpb24oa2V5U3RyaW5nSUQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29yZFJlb3JkZXIoaW50ZXJuYWxJbnN0YW5jZSwgaWQsIG5leHRDaGlsZHJlbikge1xuICAgIHB1c2hPcGVyYXRpb24oVFJFRV9PUEVSQVRJT05fUkVPUkRFUl9DSElMRFJFTik7XG4gICAgcHVzaE9wZXJhdGlvbihpZCk7XG4gICAgdmFyIG5leHRDaGlsZElEcyA9IG5leHRDaGlsZHJlbi5tYXAoZ2V0SUQpO1xuICAgIHB1c2hPcGVyYXRpb24obmV4dENoaWxkSURzLmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRDaGlsZElEcy5sZW5ndGg7IGkrKykge1xuICAgICAgcHVzaE9wZXJhdGlvbihuZXh0Q2hpbGRJRHNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29yZFVubW91bnQoaW50ZXJuYWxJbnN0YW5jZSwgaWQpIHtcbiAgICBwZW5kaW5nVW5tb3VudGVkSURzLnB1c2goaWQpO1xuICAgIGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmRlbGV0ZShpZCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmF3bEFuZFJlY29yZEluaXRpYWxNb3VudHMoaWQsIHBhcmVudElELCByb290SUQpIHtcbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBjb25zb2xlLmdyb3VwKCdjcmF3bEFuZFJlY29yZEluaXRpYWxNb3VudHMoKSBpZDonLCBpZCk7XG4gICAgfVxuXG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZVRvUm9vdElETWFwLnNldChpbnRlcm5hbEluc3RhbmNlLCByb290SUQpO1xuICAgICAgcmVjb3JkTW91bnQoaW50ZXJuYWxJbnN0YW5jZSwgaWQsIHBhcmVudElEKTtcbiAgICAgIGdldENoaWxkcmVuKGludGVybmFsSW5zdGFuY2UpLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBjcmF3bEFuZFJlY29yZEluaXRpYWxNb3VudHMoZ2V0SUQoY2hpbGQpLCBpZCwgcm9vdElEKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaEluaXRpYWxPcGVyYXRpb25zKCkge1xuICAgIC8vIENyYXdsIHJvb3RzIHRob3VnaCBhbmQgcmVnaXN0ZXIgYW55IG5vZGVzIHRoYXQgbW91bnRlZCBiZWZvcmUgd2Ugd2VyZSBpbmplY3RlZC5cbiAgICB2YXIgcm9vdHMgPSByZW5kZXJlci5Nb3VudC5faW5zdGFuY2VzQnlSZWFjdFJvb3RJRCB8fCByZW5kZXJlci5Nb3VudC5faW5zdGFuY2VzQnlDb250YWluZXJJRDtcblxuICAgIGZvciAodmFyIGtleSBpbiByb290cykge1xuICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSByb290c1trZXldO1xuXG4gICAgICB2YXIgX2lkMiA9IGdldElEKGludGVybmFsSW5zdGFuY2UpO1xuXG4gICAgICBjcmF3bEFuZFJlY29yZEluaXRpYWxNb3VudHMoX2lkMiwgMCwgX2lkMik7XG4gICAgICBmbHVzaFBlbmRpbmdFdmVudHMoX2lkMik7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBlbmRpbmdPcGVyYXRpb25zID0gW107XG4gIHZhciBwZW5kaW5nU3RyaW5nVGFibGUgPSBuZXcgTWFwKCk7XG4gIHZhciBwZW5kaW5nVW5tb3VudGVkSURzID0gW107XG4gIHZhciBwZW5kaW5nU3RyaW5nVGFibGVMZW5ndGggPSAwO1xuICB2YXIgcGVuZGluZ1VubW91bnRlZFJvb3RJRCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gZmx1c2hQZW5kaW5nRXZlbnRzKHJvb3RJRCkge1xuICAgIGlmIChwZW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggPT09IDAgJiYgcGVuZGluZ1VubW91bnRlZElEcy5sZW5ndGggPT09IDAgJiYgcGVuZGluZ1VubW91bnRlZFJvb3RJRCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBudW1Vbm1vdW50SURzID0gcGVuZGluZ1VubW91bnRlZElEcy5sZW5ndGggKyAocGVuZGluZ1VubW91bnRlZFJvb3RJRCA9PT0gbnVsbCA/IDAgOiAxKTtcbiAgICB2YXIgb3BlcmF0aW9ucyA9IG5ldyBBcnJheSggLy8gSWRlbnRpZnkgd2hpY2ggcmVuZGVyZXIgdGhpcyB1cGRhdGUgaXMgY29taW5nIGZyb20uXG4gICAgMiArIC8vIFtyZW5kZXJlcklELCByb290RmliZXJJRF1cbiAgICAvLyBIb3cgYmlnIGlzIHRoZSBzdHJpbmcgdGFibGU/XG4gICAgMSArIC8vIFtzdHJpbmdUYWJsZUxlbmd0aF1cbiAgICAvLyBUaGVuIGdvZXMgdGhlIGFjdHVhbCBzdHJpbmcgdGFibGUuXG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoICsgKCAvLyBBbGwgdW5tb3VudHMgYXJlIGJhdGNoZWQgaW4gYSBzaW5nbGUgbWVzc2FnZS5cbiAgICAvLyBbVFJFRV9PUEVSQVRJT05fUkVNT1ZFLCByZW1vdmVkSURMZW5ndGgsIC4uLmlkc11cbiAgICBudW1Vbm1vdW50SURzID4gMCA/IDIgKyBudW1Vbm1vdW50SURzIDogMCkgKyAvLyBNb3VudCBvcGVyYXRpb25zXG4gICAgcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoKTsgLy8gSWRlbnRpZnkgd2hpY2ggcmVuZGVyZXIgdGhpcyB1cGRhdGUgaXMgY29taW5nIGZyb20uXG4gICAgLy8gVGhpcyBlbmFibGVzIHJvb3RzIHRvIGJlIG1hcHBlZCB0byByZW5kZXJlcnMsXG4gICAgLy8gV2hpY2ggaW4gdHVybiBlbmFibGVzIGZpYmVyIHByb3BlcmF0aW9ucywgc3RhdGVzLCBhbmQgaG9va3MgdG8gYmUgaW5zcGVjdGVkLlxuXG4gICAgdmFyIGkgPSAwO1xuICAgIG9wZXJhdGlvbnNbaSsrXSA9IHJlbmRlcmVySUQ7XG4gICAgb3BlcmF0aW9uc1tpKytdID0gcm9vdElEOyAvLyBOb3cgZmlsbCBpbiB0aGUgc3RyaW5nIHRhYmxlLlxuICAgIC8vIFtzdHJpbmdUYWJsZUxlbmd0aCwgc3RyMUxlbmd0aCwgLi4uc3RyMSwgc3RyMkxlbmd0aCwgLi4uc3RyMiwgLi4uXVxuXG4gICAgb3BlcmF0aW9uc1tpKytdID0gcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoO1xuICAgIHBlbmRpbmdTdHJpbmdUYWJsZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBvcGVyYXRpb25zW2krK10gPSBrZXkubGVuZ3RoO1xuICAgICAgdmFyIGVuY29kZWRLZXkgPSB1dGZFbmNvZGVTdHJpbmcoa2V5KTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbmNvZGVkS2V5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG9wZXJhdGlvbnNbaSArIGpdID0gZW5jb2RlZEtleVtqXTtcbiAgICAgIH1cblxuICAgICAgaSArPSBrZXkubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKG51bVVubW91bnRJRHMgPiAwKSB7XG4gICAgICAvLyBBbGwgdW5tb3VudHMgZXhjZXB0IHJvb3RzIGFyZSBiYXRjaGVkIGluIGEgc2luZ2xlIG1lc3NhZ2UuXG4gICAgICBvcGVyYXRpb25zW2krK10gPSBUUkVFX09QRVJBVElPTl9SRU1PVkU7IC8vIFRoZSBmaXJzdCBudW1iZXIgaXMgaG93IG1hbnkgdW5tb3VudGVkIElEcyB3ZSdyZSBnb25uYSBzZW5kLlxuXG4gICAgICBvcGVyYXRpb25zW2krK10gPSBudW1Vbm1vdW50SURzOyAvLyBGaWxsIGluIHRoZSB1bm1vdW50c1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBlbmRpbmdVbm1vdW50ZWRJRHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgb3BlcmF0aW9uc1tpKytdID0gcGVuZGluZ1VubW91bnRlZElEc1tqXTtcbiAgICAgIH0gLy8gVGhlIHJvb3QgSUQgc2hvdWxkIGFsd2F5cyBiZSB1bm1vdW50ZWQgbGFzdC5cblxuXG4gICAgICBpZiAocGVuZGluZ1VubW91bnRlZFJvb3RJRCAhPT0gbnVsbCkge1xuICAgICAgICBvcGVyYXRpb25zW2ldID0gcGVuZGluZ1VubW91bnRlZFJvb3RJRDtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0gLy8gRmlsbCBpbiB0aGUgcmVzdCBvZiB0aGUgb3BlcmF0aW9ucy5cblxuXG4gICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IHBlbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgX2orKykge1xuICAgICAgb3BlcmF0aW9uc1tpICsgX2pdID0gcGVuZGluZ09wZXJhdGlvbnNbX2pdO1xuICAgIH1cblxuICAgIGkgKz0gcGVuZGluZ09wZXJhdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgcHJpbnRPcGVyYXRpb25zQXJyYXkob3BlcmF0aW9ucyk7XG4gICAgfSAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgZnJvbnRlbmQsIGp1c3QgcGFzcyB0aGUgb3BlcmF0aW9ucyB0aHJvdWdoLlxuXG5cbiAgICBob29rLmVtaXQoJ29wZXJhdGlvbnMnLCBvcGVyYXRpb25zKTtcbiAgICBwZW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggPSAwO1xuICAgIHBlbmRpbmdVbm1vdW50ZWRJRHMgPSBbXTtcbiAgICBwZW5kaW5nVW5tb3VudGVkUm9vdElEID0gbnVsbDtcbiAgICBwZW5kaW5nU3RyaW5nVGFibGUuY2xlYXIoKTtcbiAgICBwZW5kaW5nU3RyaW5nVGFibGVMZW5ndGggPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaE9wZXJhdGlvbihvcCkge1xuICAgIGlmIChmYWxzZSkge31cblxuICAgIHBlbmRpbmdPcGVyYXRpb25zLnB1c2gob3ApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U3RyaW5nSUQoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIGV4aXN0aW5nSUQgPSBwZW5kaW5nU3RyaW5nVGFibGUuZ2V0KHN0cik7XG5cbiAgICBpZiAoZXhpc3RpbmdJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdJRDtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nSUQgPSBwZW5kaW5nU3RyaW5nVGFibGUuc2l6ZSArIDE7XG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlLnNldChzdHIsIHN0cmluZ0lEKTsgLy8gVGhlIHN0cmluZyB0YWJsZSB0b3RhbCBsZW5ndGggbmVlZHMgdG8gYWNjb3VudFxuICAgIC8vIGJvdGggZm9yIHRoZSBzdHJpbmcgbGVuZ3RoLCBhbmQgZm9yIHRoZSBhcnJheSBpdGVtXG4gICAgLy8gdGhhdCBjb250YWlucyB0aGUgbGVuZ3RoIGl0c2VsZi4gSGVuY2UgKyAxLlxuXG4gICAgcGVuZGluZ1N0cmluZ1RhYmxlTGVuZ3RoICs9IHN0ci5sZW5ndGggKyAxO1xuICAgIHJldHVybiBzdHJpbmdJRDtcbiAgfVxuXG4gIHZhciBjdXJyZW50bHlJbnNwZWN0ZWRFbGVtZW50SUQgPSBudWxsO1xuICB2YXIgY3VycmVudGx5SW5zcGVjdGVkUGF0aHMgPSB7fTsgLy8gVHJhY2sgdGhlIGludGVyc2VjdGlvbiBvZiBjdXJyZW50bHkgaW5zcGVjdGVkIHBhdGhzLFxuICAvLyBzbyB0aGF0IHdlIGNhbiBzZW5kIHRoZWlyIGRhdGEgYWxvbmcgaWYgdGhlIGVsZW1lbnQgaXMgcmUtcmVuZGVyZWQuXG5cbiAgZnVuY3Rpb24gbWVyZ2VJbnNwZWN0ZWRQYXRocyhwYXRoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlJbnNwZWN0ZWRQYXRocztcbiAgICBwYXRoLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKCFjdXJyZW50W2tleV0pIHtcbiAgICAgICAgY3VycmVudFtrZXldID0ge307XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJc1BhdGhBbGxvd2VkKGtleSkge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaGVscHMgcHJldmVudCBwcmV2aW91c2x5LWluc3BlY3RlZCBwYXRocyBmcm9tIGJlaW5nIGRlaHlkcmF0ZWQgaW4gdXBkYXRlcy5cbiAgICAvLyBUaGlzIGlzIGltcG9ydGFudCB0byBhdm9pZCBhIGJhZCB1c2VyIGV4cGVyaWVuY2Ugd2hlcmUgZXhwYW5kZWQgdG9nZ2xlcyBjb2xsYXBzZSBvbiB1cGRhdGUuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzUGF0aEFsbG93ZWQocGF0aCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlJbnNwZWN0ZWRQYXRoc1trZXldO1xuXG4gICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aFtpXV07XG5cbiAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0gLy8gRmFzdCBwYXRoIHByb3BzIGxvb2t1cCBmb3IgUmVhY3QgTmF0aXZlIHN0eWxlIGVkaXRvci5cblxuXG4gIGZ1bmN0aW9uIGdldEluc3RhbmNlQW5kU3R5bGUoaWQpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBudWxsO1xuICAgIHZhciBzdHlsZSA9IG51bGw7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBpZFRvSW50ZXJuYWxJbnN0YW5jZU1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgaW5zdGFuY2UgPSBpbnRlcm5hbEluc3RhbmNlLl9pbnN0YW5jZSB8fCBudWxsO1xuICAgICAgdmFyIGVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50LnByb3BzICE9IG51bGwpIHtcbiAgICAgICAgc3R5bGUgPSBlbGVtZW50LnByb3BzLnN0eWxlIHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgIHN0eWxlOiBzdHlsZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTZWxlY3RlZEVsZW1lbnQoaWQpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmdldChpZCk7XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgZmluZCBpbnN0YW5jZSB3aXRoIGlkIFxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChnZXRFbGVtZW50VHlwZShpbnRlcm5hbEluc3RhbmNlKSkge1xuICAgICAgY2FzZSB0eXBlc19FbGVtZW50VHlwZUNsYXNzOlxuICAgICAgICBnbG9iYWwuJHIgPSBpbnRlcm5hbEluc3RhbmNlLl9pbnN0YW5jZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgdHlwZXNfRWxlbWVudFR5cGVGdW5jdGlvbjpcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkIFxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2xvYmFsLiRyID0ge1xuICAgICAgICAgIHByb3BzOiBlbGVtZW50LnByb3BzLFxuICAgICAgICAgIHR5cGU6IGVsZW1lbnQudHlwZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZ2xvYmFsLiRyID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcmVBc0dsb2JhbChpZCwgcGF0aCwgY291bnQpIHtcbiAgICB2YXIgaW5zcGVjdGVkRWxlbWVudCA9IGluc3BlY3RFbGVtZW50UmF3KGlkKTtcblxuICAgIGlmIChpbnNwZWN0ZWRFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgdmFsdWUgPSB1dGlsc19nZXRJbk9iamVjdChpbnNwZWN0ZWRFbGVtZW50LCBwYXRoKTtcbiAgICAgIHZhciBrZXkgPSBcIiRyZWFjdFRlbXBcIi5jb25jYXQoY291bnQpO1xuICAgICAgd2luZG93W2tleV0gPSB2YWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VyaWFsaXplZEVsZW1lbnRWYWx1ZUJ5UGF0aChpZCwgcGF0aCkge1xuICAgIHZhciBpbnNwZWN0ZWRFbGVtZW50ID0gaW5zcGVjdEVsZW1lbnRSYXcoaWQpO1xuXG4gICAgaWYgKGluc3BlY3RlZEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciB2YWx1ZVRvQ29weSA9IHV0aWxzX2dldEluT2JqZWN0KGluc3BlY3RlZEVsZW1lbnQsIHBhdGgpO1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRvU3RyaW5nKHZhbHVlVG9Db3B5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0RWxlbWVudChyZXF1ZXN0SUQsIGlkLCBwYXRoLCBmb3JjZUZ1bGxEYXRhKSB7XG4gICAgaWYgKGZvcmNlRnVsbERhdGEgfHwgY3VycmVudGx5SW5zcGVjdGVkRWxlbWVudElEICE9PSBpZCkge1xuICAgICAgY3VycmVudGx5SW5zcGVjdGVkRWxlbWVudElEID0gaWQ7XG4gICAgICBjdXJyZW50bHlJbnNwZWN0ZWRQYXRocyA9IHt9O1xuICAgIH1cblxuICAgIHZhciBpbnNwZWN0ZWRFbGVtZW50ID0gaW5zcGVjdEVsZW1lbnRSYXcoaWQpO1xuXG4gICAgaWYgKGluc3BlY3RlZEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcmVzcG9uc2VJRDogcmVxdWVzdElELFxuICAgICAgICB0eXBlOiAnbm90LWZvdW5kJ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocGF0aCAhPT0gbnVsbCkge1xuICAgICAgbWVyZ2VJbnNwZWN0ZWRQYXRocyhwYXRoKTtcbiAgICB9IC8vIEFueSB0aW1lIGFuIGluc3BlY3RlZCBlbGVtZW50IGhhcyBhbiB1cGRhdGUsXG4gICAgLy8gd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgJHIgdmFsdWUgYXMgd2VsLlxuICAgIC8vIERvIHRoaXMgYmVmb3JlIGRlaHlkcmF0aW9uIChjbGVhbkZvckJyaWRnZSkuXG5cblxuICAgIHVwZGF0ZVNlbGVjdGVkRWxlbWVudChpZCk7XG4gICAgaW5zcGVjdGVkRWxlbWVudC5jb250ZXh0ID0gY2xlYW5Gb3JCcmlkZ2UoaW5zcGVjdGVkRWxlbWVudC5jb250ZXh0LCBjcmVhdGVJc1BhdGhBbGxvd2VkKCdjb250ZXh0JykpO1xuICAgIGluc3BlY3RlZEVsZW1lbnQucHJvcHMgPSBjbGVhbkZvckJyaWRnZShpbnNwZWN0ZWRFbGVtZW50LnByb3BzLCBjcmVhdGVJc1BhdGhBbGxvd2VkKCdwcm9wcycpKTtcbiAgICBpbnNwZWN0ZWRFbGVtZW50LnN0YXRlID0gY2xlYW5Gb3JCcmlkZ2UoaW5zcGVjdGVkRWxlbWVudC5zdGF0ZSwgY3JlYXRlSXNQYXRoQWxsb3dlZCgnc3RhdGUnKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHJlc3BvbnNlSUQ6IHJlcXVlc3RJRCxcbiAgICAgIHR5cGU6ICdmdWxsLWRhdGEnLFxuICAgICAgdmFsdWU6IGluc3BlY3RlZEVsZW1lbnRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEVsZW1lbnRSYXcoaWQpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmdldChpZCk7XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX2dldERhdGEyID0gZ2V0RGF0YShpbnRlcm5hbEluc3RhbmNlKSxcbiAgICAgICAgZGlzcGxheU5hbWUgPSBfZ2V0RGF0YTIuZGlzcGxheU5hbWUsXG4gICAgICAgIGtleSA9IF9nZXREYXRhMi5rZXk7XG5cbiAgICB2YXIgdHlwZSA9IGdldEVsZW1lbnRUeXBlKGludGVybmFsSW5zdGFuY2UpO1xuICAgIHZhciBjb250ZXh0ID0gbnVsbDtcbiAgICB2YXIgb3duZXJzID0gbnVsbDtcbiAgICB2YXIgcHJvcHMgPSBudWxsO1xuICAgIHZhciBzdGF0ZSA9IG51bGw7XG4gICAgdmFyIHNvdXJjZSA9IG51bGw7XG4gICAgdmFyIGVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBwcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gICAgICBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2UgIT0gbnVsbCA/IGVsZW1lbnQuX3NvdXJjZSA6IG51bGw7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIG93bmVycyA9IFtdO1xuXG4gICAgICAgIHdoaWxlIChvd25lciAhPSBudWxsKSB7XG4gICAgICAgICAgb3duZXJzLnB1c2goe1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGdldERhdGEob3duZXIpLmRpc3BsYXlOYW1lIHx8ICdVbmtub3duJyxcbiAgICAgICAgICAgIGlkOiBnZXRJRChvd25lciksXG4gICAgICAgICAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgICAgICAgICAgdHlwZTogZ2V0RWxlbWVudFR5cGUob3duZXIpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAob3duZXIuX2N1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBvd25lciA9IG93bmVyLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHB1YmxpY0luc3RhbmNlID0gaW50ZXJuYWxJbnN0YW5jZS5faW5zdGFuY2U7XG5cbiAgICBpZiAocHVibGljSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgY29udGV4dCA9IHB1YmxpY0luc3RhbmNlLmNvbnRleHQgfHwgbnVsbDtcbiAgICAgIHN0YXRlID0gcHVibGljSW5zdGFuY2Uuc3RhdGUgfHwgbnVsbDtcbiAgICB9IC8vIE5vdCBpbXBsZW1lbnRlZFxuXG5cbiAgICB2YXIgZXJyb3JzID0gW107XG4gICAgdmFyIHdhcm5pbmdzID0gW107XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIC8vIERvZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgc3VwcG9ydCBlZGl0YWJsZSBob29rcyBhbmQgZnVuY3Rpb24gcHJvcHM/XG4gICAgICBjYW5FZGl0SG9va3M6IGZhbHNlLFxuICAgICAgY2FuRWRpdEZ1bmN0aW9uUHJvcHM6IGZhbHNlLFxuICAgICAgLy8gRG9lcyB0aGUgY3VycmVudCByZW5kZXJlciBzdXBwb3J0IGFkdmFuY2VkIGVkaXRpbmcgaW50ZXJmYWNlP1xuICAgICAgY2FuRWRpdEhvb2tzQW5kRGVsZXRlUGF0aHM6IGZhbHNlLFxuICAgICAgY2FuRWRpdEhvb2tzQW5kUmVuYW1lUGF0aHM6IGZhbHNlLFxuICAgICAgY2FuRWRpdEZ1bmN0aW9uUHJvcHNEZWxldGVQYXRoczogZmFsc2UsXG4gICAgICBjYW5FZGl0RnVuY3Rpb25Qcm9wc1JlbmFtZVBhdGhzOiBmYWxzZSxcbiAgICAgIC8vIFRvZ2dsZSBlcnJvciBib3VuZGFyeSBkaWQgbm90IGV4aXN0IGluIGxlZ2FjeSB2ZXJzaW9uc1xuICAgICAgY2FuVG9nZ2xlRXJyb3I6IGZhbHNlLFxuICAgICAgaXNFcnJvcmVkOiBmYWxzZSxcbiAgICAgIHRhcmdldEVycm9yQm91bmRhcnlJRDogbnVsbCxcbiAgICAgIC8vIFN1c3BlbnNlIGRpZCBub3QgZXhpc3QgaW4gbGVnYWN5IHZlcnNpb25zXG4gICAgICBjYW5Ub2dnbGVTdXNwZW5zZTogZmFsc2UsXG4gICAgICAvLyBDYW4gdmlldyBjb21wb25lbnQgc291cmNlIGxvY2F0aW9uLlxuICAgICAgY2FuVmlld1NvdXJjZTogdHlwZSA9PT0gdHlwZXNfRWxlbWVudFR5cGVDbGFzcyB8fCB0eXBlID09PSB0eXBlc19FbGVtZW50VHlwZUZ1bmN0aW9uLFxuICAgICAgLy8gT25seSBsZWdhY3kgY29udGV4dCBleGlzdHMgaW4gbGVnYWN5IHZlcnNpb25zLlxuICAgICAgaGFzTGVnYWN5Q29udGV4dDogdHJ1ZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBrZXk6IGtleSAhPSBudWxsID8ga2V5IDogbnVsbCxcbiAgICAgIC8vIEluc3BlY3RhYmxlIHByb3BlcnRpZXMuXG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgaG9va3M6IG51bGwsXG4gICAgICBwcm9wczogcHJvcHMsXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgIHdhcm5pbmdzOiB3YXJuaW5ncyxcbiAgICAgIC8vIExpc3Qgb2Ygb3duZXJzXG4gICAgICBvd25lcnM6IG93bmVycyxcbiAgICAgIC8vIExvY2F0aW9uIG9mIGNvbXBvbmVudCBpbiBzb3VyY2UgY29kZS5cbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgcm9vdFR5cGU6IG51bGwsXG4gICAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBudWxsLFxuICAgICAgcmVuZGVyZXJWZXJzaW9uOiBudWxsLFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBzdHlsZXg6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9nRWxlbWVudFRvQ29uc29sZShpZCkge1xuICAgIHZhciByZXN1bHQgPSBpbnNwZWN0RWxlbWVudFJhdyhpZCk7XG5cbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgZmluZCBlbGVtZW50IHdpdGggaWQgXFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3VwcG9ydHNHcm91cCA9IHR5cGVvZiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKHN1cHBvcnRzR3JvdXApIHtcbiAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCJbQ2xpY2sgdG8gZXhwYW5kXSAlYzxcIi5jb25jYXQocmVzdWx0LmRpc3BsYXlOYW1lIHx8ICdDb21wb25lbnQnLCBcIiAvPlwiKSwgLy8gLS1kb20tdGFnLW5hbWUtY29sb3IgaXMgdGhlIENTUyB2YXJpYWJsZSBDaHJvbWUgc3R5bGVzIEhUTUwgZWxlbWVudHMgd2l0aCBpbiB0aGUgY29uc29sZS5cbiAgICAgICdjb2xvcjogdmFyKC0tZG9tLXRhZy1uYW1lLWNvbG9yKTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsnKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LnByb3BzICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnUHJvcHM6JywgcmVzdWx0LnByb3BzKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LnN0YXRlICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnU3RhdGU6JywgcmVzdWx0LnN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LmNvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdDb250ZXh0OicsIHJlc3VsdC5jb250ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgbmF0aXZlTm9kZSA9IGZpbmROYXRpdmVOb2RlRm9ySW50ZXJuYWxJRChpZCk7XG5cbiAgICBpZiAobmF0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ05vZGU6JywgbmF0aXZlTm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5jaHJvbWUgfHwgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICBjb25zb2xlLmxvZygnUmlnaHQtY2xpY2sgYW55IHZhbHVlIHRvIHNhdmUgaXQgYXMgYSBnbG9iYWwgdmFyaWFibGUgZm9yIGZ1cnRoZXIgaW5zcGVjdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydHNHcm91cCkge1xuICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmVWaWV3QXR0cmlidXRlU291cmNlKGlkLCBwYXRoKSB7XG4gICAgdmFyIGluc3BlY3RlZEVsZW1lbnQgPSBpbnNwZWN0RWxlbWVudFJhdyhpZCk7XG5cbiAgICBpZiAoaW5zcGVjdGVkRWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LiRhdHRyaWJ1dGUgPSB1dGlsc19nZXRJbk9iamVjdChpbnNwZWN0ZWRFbGVtZW50LCBwYXRoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlVmlld0VsZW1lbnRTb3VyY2UoaWQpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmdldChpZCk7XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgZmluZCBpbnN0YW5jZSB3aXRoIGlkIFxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkNvdWxkIG5vdCBmaW5kIGVsZW1lbnQgd2l0aCBpZCBcXFwiXCIuY29uY2F0KGlkLCBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGdsb2JhbC4kdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVBhdGgodHlwZSwgaWQsIGhvb2tJRCwgcGF0aCkge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gaWRUb0ludGVybmFsSW5zdGFuY2VNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgIHZhciBwdWJsaWNJbnN0YW5jZSA9IGludGVybmFsSW5zdGFuY2UuX2luc3RhbmNlO1xuXG4gICAgICBpZiAocHVibGljSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgICAgIGRlbGV0ZVBhdGhJbk9iamVjdChwdWJsaWNJbnN0YW5jZS5jb250ZXh0LCBwYXRoKTtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnaG9va3MnOlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIb29rcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVuZGVyZXInKTtcblxuICAgICAgICAgIGNhc2UgJ3Byb3BzJzpcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCA9IGxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQobGVnYWN5X3JlbmRlcmVyX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudCksIHt9LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBjb3B5V2l0aERlbGV0ZShlbGVtZW50LnByb3BzLCBwYXRoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3N0YXRlJzpcbiAgICAgICAgICAgIGRlbGV0ZVBhdGhJbk9iamVjdChwdWJsaWNJbnN0YW5jZS5zdGF0ZSwgcGF0aCk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmFtZVBhdGgodHlwZSwgaWQsIGhvb2tJRCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gaWRUb0ludGVybmFsSW5zdGFuY2VNYXAuZ2V0KGlkKTtcblxuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgIHZhciBwdWJsaWNJbnN0YW5jZSA9IGludGVybmFsSW5zdGFuY2UuX2luc3RhbmNlO1xuXG4gICAgICBpZiAocHVibGljSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgICAgIHJlbmFtZVBhdGhJbk9iamVjdChwdWJsaWNJbnN0YW5jZS5jb250ZXh0LCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnaG9va3MnOlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIb29rcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVuZGVyZXInKTtcblxuICAgICAgICAgIGNhc2UgJ3Byb3BzJzpcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCA9IGxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQobGVnYWN5X3JlbmRlcmVyX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudCksIHt9LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBjb3B5V2l0aFJlbmFtZShlbGVtZW50LnByb3BzLCBvbGRQYXRoLCBuZXdQYXRoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3N0YXRlJzpcbiAgICAgICAgICAgIHJlbmFtZVBhdGhJbk9iamVjdChwdWJsaWNJbnN0YW5jZS5zdGF0ZSwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG92ZXJyaWRlVmFsdWVBdFBhdGgodHlwZSwgaWQsIGhvb2tJRCwgcGF0aCwgdmFsdWUpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGlkVG9JbnRlcm5hbEluc3RhbmNlTWFwLmdldChpZCk7XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICB2YXIgcHVibGljSW5zdGFuY2UgPSBpbnRlcm5hbEluc3RhbmNlLl9pbnN0YW5jZTtcblxuICAgICAgaWYgKHB1YmxpY0luc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgICAgICB1dGlsc19zZXRJbk9iamVjdChwdWJsaWNJbnN0YW5jZS5jb250ZXh0LCBwYXRoLCB2YWx1ZSk7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2hvb2tzJzpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSG9va3Mgbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlbmRlcmVyJyk7XG5cbiAgICAgICAgICBjYXNlICdwcm9wcyc6XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgPSBsZWdhY3lfcmVuZGVyZXJfb2JqZWN0U3ByZWFkKGxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnQpLCB7fSwge1xuICAgICAgICAgICAgICBwcm9wczogY29weVdpdGhTZXQoZWxlbWVudC5wcm9wcywgcGF0aCwgdmFsdWUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnc3RhdGUnOlxuICAgICAgICAgICAgdXRpbHNfc2V0SW5PYmplY3QocHVibGljSW5zdGFuY2Uuc3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIHYxNisgb25seSBmZWF0dXJlc1xuXG5cbiAgdmFyIGdldFByb2ZpbGluZ0RhdGEgPSBmdW5jdGlvbiBnZXRQcm9maWxpbmdEYXRhKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0UHJvZmlsaW5nRGF0YSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVuZGVyZXInKTtcbiAgfTtcblxuICB2YXIgaGFuZGxlQ29tbWl0RmliZXJSb290ID0gZnVuY3Rpb24gaGFuZGxlQ29tbWl0RmliZXJSb290KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlQ29tbWl0RmliZXJSb290IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZW5kZXJlcicpO1xuICB9O1xuXG4gIHZhciBoYW5kbGVDb21taXRGaWJlclVubW91bnQgPSBmdW5jdGlvbiBoYW5kbGVDb21taXRGaWJlclVubW91bnQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGVDb21taXRGaWJlclVubW91bnQgbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlbmRlcmVyJyk7XG4gIH07XG5cbiAgdmFyIGhhbmRsZVBvc3RDb21taXRGaWJlclJvb3QgPSBmdW5jdGlvbiBoYW5kbGVQb3N0Q29tbWl0RmliZXJSb290KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVuZGVyZXInKTtcbiAgfTtcblxuICB2YXIgb3ZlcnJpZGVFcnJvciA9IGZ1bmN0aW9uIG92ZXJyaWRlRXJyb3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvdmVycmlkZUVycm9yIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZW5kZXJlcicpO1xuICB9O1xuXG4gIHZhciBvdmVycmlkZVN1c3BlbnNlID0gZnVuY3Rpb24gb3ZlcnJpZGVTdXNwZW5zZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ292ZXJyaWRlU3VzcGVuc2Ugbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlbmRlcmVyJyk7XG4gIH07XG5cbiAgdmFyIHN0YXJ0UHJvZmlsaW5nID0gZnVuY3Rpb24gc3RhcnRQcm9maWxpbmcoKSB7Ly8gRG8gbm90IHRocm93LCBzaW5jZSB0aGlzIHdvdWxkIGJyZWFrIGEgbXVsdGktcm9vdCBzY2VuYXJpbyB3aGVyZSB2MTUgYW5kIHYxNiB3ZXJlIGJvdGggcHJlc2VudC5cbiAgfTtcblxuICB2YXIgc3RvcFByb2ZpbGluZyA9IGZ1bmN0aW9uIHN0b3BQcm9maWxpbmcoKSB7Ly8gRG8gbm90IHRocm93LCBzaW5jZSB0aGlzIHdvdWxkIGJyZWFrIGEgbXVsdGktcm9vdCBzY2VuYXJpbyB3aGVyZSB2MTUgYW5kIHYxNiB3ZXJlIGJvdGggcHJlc2VudC5cbiAgfTtcblxuICBmdW5jdGlvbiBnZXRCZXN0TWF0Y2hGb3JUcmFja2VkUGF0aCgpIHtcbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQYXRoRm9yRWxlbWVudChpZCkge1xuICAgIC8vIE5vdCBpbXBsZW1lbnRlZC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudEZpbHRlcnMoY29tcG9uZW50RmlsdGVycykgey8vIE5vdCBpbXBsZW1lbnRlZC5cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRyYWNlVXBkYXRlc0VuYWJsZWQoZW5hYmxlZCkgey8vIE5vdCBpbXBsZW1lbnRlZC5cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRyYWNrZWRQYXRoKHBhdGgpIHsvLyBOb3QgaW1wbGVtZW50ZWQuXG4gIH1cblxuICBmdW5jdGlvbiBnZXRPd25lcnNMaXN0KGlkKSB7XG4gICAgLy8gTm90IGltcGxlbWVudGVkLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJFcnJvcnNBbmRXYXJuaW5ncygpIHsvLyBOb3QgaW1wbGVtZW50ZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyRXJyb3JzRm9yRmliZXJJRChpZCkgey8vIE5vdCBpbXBsZW1lbnRlZFxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQoaWQpIHsvLyBOb3QgaW1wbGVtZW50ZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoQ29uc29sZUZvclN0cmljdE1vZGUoKSB7fVxuXG4gIGZ1bmN0aW9uIHVucGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZSgpIHt9XG5cbiAgZnVuY3Rpb24gaGFzRmliZXJXaXRoSWQoaWQpIHtcbiAgICByZXR1cm4gaWRUb0ludGVybmFsSW5zdGFuY2VNYXAuaGFzKGlkKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xlYXJFcnJvcnNBbmRXYXJuaW5nczogY2xlYXJFcnJvcnNBbmRXYXJuaW5ncyxcbiAgICBjbGVhckVycm9yc0ZvckZpYmVySUQ6IGNsZWFyRXJyb3JzRm9yRmliZXJJRCxcbiAgICBjbGVhcldhcm5pbmdzRm9yRmliZXJJRDogY2xlYXJXYXJuaW5nc0ZvckZpYmVySUQsXG4gICAgY2xlYW51cDogY2xlYW51cCxcbiAgICBnZXRTZXJpYWxpemVkRWxlbWVudFZhbHVlQnlQYXRoOiBnZXRTZXJpYWxpemVkRWxlbWVudFZhbHVlQnlQYXRoLFxuICAgIGRlbGV0ZVBhdGg6IGRlbGV0ZVBhdGgsXG4gICAgZmx1c2hJbml0aWFsT3BlcmF0aW9uczogZmx1c2hJbml0aWFsT3BlcmF0aW9ucyxcbiAgICBnZXRCZXN0TWF0Y2hGb3JUcmFja2VkUGF0aDogZ2V0QmVzdE1hdGNoRm9yVHJhY2tlZFBhdGgsXG4gICAgZ2V0RGlzcGxheU5hbWVGb3JGaWJlcklEOiBnZXREaXNwbGF5TmFtZUZvckZpYmVySUQsXG4gICAgZ2V0RmliZXJGb3JOYXRpdmU6IGdldEZpYmVyRm9yTmF0aXZlLFxuICAgIGdldEZpYmVySURGb3JOYXRpdmU6IGdldEludGVybmFsSURGb3JOYXRpdmUsXG4gICAgZ2V0SW5zdGFuY2VBbmRTdHlsZTogZ2V0SW5zdGFuY2VBbmRTdHlsZSxcbiAgICBmaW5kTmF0aXZlTm9kZXNGb3JGaWJlcklEOiBmdW5jdGlvbiBmaW5kTmF0aXZlTm9kZXNGb3JGaWJlcklEKGlkKSB7XG4gICAgICB2YXIgbmF0aXZlTm9kZSA9IGZpbmROYXRpdmVOb2RlRm9ySW50ZXJuYWxJRChpZCk7XG4gICAgICByZXR1cm4gbmF0aXZlTm9kZSA9PSBudWxsID8gbnVsbCA6IFtuYXRpdmVOb2RlXTtcbiAgICB9LFxuICAgIGdldE93bmVyc0xpc3Q6IGdldE93bmVyc0xpc3QsXG4gICAgZ2V0UGF0aEZvckVsZW1lbnQ6IGdldFBhdGhGb3JFbGVtZW50LFxuICAgIGdldFByb2ZpbGluZ0RhdGE6IGdldFByb2ZpbGluZ0RhdGEsXG4gICAgaGFuZGxlQ29tbWl0RmliZXJSb290OiBoYW5kbGVDb21taXRGaWJlclJvb3QsXG4gICAgaGFuZGxlQ29tbWl0RmliZXJVbm1vdW50OiBoYW5kbGVDb21taXRGaWJlclVubW91bnQsXG4gICAgaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdDogaGFuZGxlUG9zdENvbW1pdEZpYmVyUm9vdCxcbiAgICBoYXNGaWJlcldpdGhJZDogaGFzRmliZXJXaXRoSWQsXG4gICAgaW5zcGVjdEVsZW1lbnQ6IGluc3BlY3RFbGVtZW50LFxuICAgIGxvZ0VsZW1lbnRUb0NvbnNvbGU6IGxvZ0VsZW1lbnRUb0NvbnNvbGUsXG4gICAgb3ZlcnJpZGVFcnJvcjogb3ZlcnJpZGVFcnJvcixcbiAgICBvdmVycmlkZVN1c3BlbnNlOiBvdmVycmlkZVN1c3BlbnNlLFxuICAgIG92ZXJyaWRlVmFsdWVBdFBhdGg6IG92ZXJyaWRlVmFsdWVBdFBhdGgsXG4gICAgcmVuYW1lUGF0aDogcmVuYW1lUGF0aCxcbiAgICBwYXRjaENvbnNvbGVGb3JTdHJpY3RNb2RlOiBwYXRjaENvbnNvbGVGb3JTdHJpY3RNb2RlLFxuICAgIHByZXBhcmVWaWV3QXR0cmlidXRlU291cmNlOiBwcmVwYXJlVmlld0F0dHJpYnV0ZVNvdXJjZSxcbiAgICBwcmVwYXJlVmlld0VsZW1lbnRTb3VyY2U6IHByZXBhcmVWaWV3RWxlbWVudFNvdXJjZSxcbiAgICByZW5kZXJlcjogcmVuZGVyZXIsXG4gICAgc2V0VHJhY2VVcGRhdGVzRW5hYmxlZDogc2V0VHJhY2VVcGRhdGVzRW5hYmxlZCxcbiAgICBzZXRUcmFja2VkUGF0aDogc2V0VHJhY2tlZFBhdGgsXG4gICAgc3RhcnRQcm9maWxpbmc6IHN0YXJ0UHJvZmlsaW5nLFxuICAgIHN0b3BQcm9maWxpbmc6IHN0b3BQcm9maWxpbmcsXG4gICAgc3RvcmVBc0dsb2JhbDogc3RvcmVBc0dsb2JhbCxcbiAgICB1bnBhdGNoQ29uc29sZUZvclN0cmljdE1vZGU6IHVucGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZSxcbiAgICB1cGRhdGVDb21wb25lbnRGaWx0ZXJzOiB1cGRhdGVDb21wb25lbnRGaWx0ZXJzXG4gIH07XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi4vcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL2luZGV4LmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuXG5cblxuXG4vLyB0aGlzIGlzIHRoZSBiYWNrZW5kIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBvbGRlciBSZWFjdCB2ZXJzaW9uc1xuZnVuY3Rpb24gaXNNYXRjaGluZ1JlbmRlcih2ZXJzaW9uKSB7XG4gIHJldHVybiAhaGFzQXNzaWduZWRCYWNrZW5kKHZlcnNpb24pO1xufVxuXG5mdW5jdGlvbiBpbml0QmFja2VuZChob29rLCBhZ2VudCwgZ2xvYmFsKSB7XG4gIGlmIChob29rID09IG51bGwpIHtcbiAgICAvLyBEZXZUb29scyBkaWRuJ3QgZ2V0IGluamVjdGVkIGludG8gdGhpcyBwYWdlIChtYXliZSBiJ2Mgb2YgdGhlIGNvbnRlbnRUeXBlKS5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge307XG4gIH1cblxuICB2YXIgc3VicyA9IFtob29rLnN1YigncmVuZGVyZXItYXR0YWNoZWQnLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICAgIHJlbmRlcmVyID0gX3JlZi5yZW5kZXJlcixcbiAgICAgICAgcmVuZGVyZXJJbnRlcmZhY2UgPSBfcmVmLnJlbmRlcmVySW50ZXJmYWNlO1xuICAgIGFnZW50LnNldFJlbmRlcmVySW50ZXJmYWNlKGlkLCByZW5kZXJlckludGVyZmFjZSk7IC8vIE5vdyB0aGF0IHRoZSBTdG9yZSBhbmQgdGhlIHJlbmRlcmVyIGludGVyZmFjZSBhcmUgY29ubmVjdGVkLFxuICAgIC8vIGl0J3MgdGltZSB0byBmbHVzaCB0aGUgcGVuZGluZyBvcGVyYXRpb24gY29kZXMgdG8gdGhlIGZyb250ZW5kLlxuXG4gICAgcmVuZGVyZXJJbnRlcmZhY2UuZmx1c2hJbml0aWFsT3BlcmF0aW9ucygpO1xuICB9KSwgaG9vay5zdWIoJ3Vuc3VwcG9ydGVkLXJlbmRlcmVyLXZlcnNpb24nLCBmdW5jdGlvbiAoaWQpIHtcbiAgICBhZ2VudC5vblVuc3VwcG9ydGVkUmVuZGVyZXIoaWQpO1xuICB9KSwgaG9vay5zdWIoJ2Zhc3RSZWZyZXNoU2NoZWR1bGVkJywgYWdlbnQub25GYXN0UmVmcmVzaFNjaGVkdWxlZCksIGhvb2suc3ViKCdvcGVyYXRpb25zJywgYWdlbnQub25Ib29rT3BlcmF0aW9ucyksIGhvb2suc3ViKCd0cmFjZVVwZGF0ZXMnLCBhZ2VudC5vblRyYWNlVXBkYXRlcykgLy8gVE9ETyBBZGQgYWRkaXRpb25hbCBzdWJzY3JpcHRpb25zIHJlcXVpcmVkIGZvciBwcm9maWxpbmcgbW9kZVxuICBdO1xuXG4gIHZhciBhdHRhY2hSZW5kZXJlciA9IGZ1bmN0aW9uIGF0dGFjaFJlbmRlcmVyKGlkLCByZW5kZXJlcikge1xuICAgIC8vIG9ubHkgYXR0YWNoIGlmIHRoZSByZW5kZXJlciBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYmFja2VuZFxuICAgIGlmICghaXNNYXRjaGluZ1JlbmRlcihyZW5kZXJlci5yZWNvbmNpbGVyVmVyc2lvbiB8fCByZW5kZXJlci52ZXJzaW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlckludGVyZmFjZSA9IGhvb2sucmVuZGVyZXJJbnRlcmZhY2VzLmdldChpZCk7IC8vIEluamVjdCBhbnkgbm90LXlldC1pbmplY3RlZCByZW5kZXJlcnMgKGlmIHdlIGRpZG4ndCByZWxvYWQtYW5kLXByb2ZpbGUpXG5cbiAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UgPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiByZW5kZXJlci5maW5kRmliZXJCeUhvc3RJbnN0YW5jZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyByZWFjdC1yZWNvbmNpbGVyIHYxNitcbiAgICAgICAgcmVuZGVyZXJJbnRlcmZhY2UgPSBhdHRhY2goaG9vaywgaWQsIHJlbmRlcmVyLCBnbG9iYWwpO1xuICAgICAgfSBlbHNlIGlmIChyZW5kZXJlci5Db21wb25lbnRUcmVlKSB7XG4gICAgICAgIC8vIHJlYWN0LWRvbSB2MTVcbiAgICAgICAgcmVuZGVyZXJJbnRlcmZhY2UgPSByZW5kZXJlcl9hdHRhY2goaG9vaywgaWQsIHJlbmRlcmVyLCBnbG9iYWwpO1xuICAgICAgfSBlbHNlIHsvLyBPbGRlciByZWFjdC1kb20gb3Igb3RoZXIgdW5zdXBwb3J0ZWQgcmVuZGVyZXIgdmVyc2lvblxuICAgICAgfVxuXG4gICAgICBpZiAocmVuZGVyZXJJbnRlcmZhY2UgIT0gbnVsbCkge1xuICAgICAgICBob29rLnJlbmRlcmVySW50ZXJmYWNlcy5zZXQoaWQsIHJlbmRlcmVySW50ZXJmYWNlKTtcbiAgICAgIH1cbiAgICB9IC8vIE5vdGlmeSB0aGUgRGV2VG9vbHMgZnJvbnRlbmQgYWJvdXQgbmV3IHJlbmRlcmVycy5cbiAgICAvLyBUaGlzIGluY2x1ZGVzIGFueSB0aGF0IHdlcmUgYXR0YWNoZWQgZWFybHkgKHZpYSBfX1JFQUNUX0RFVlRPT0xTX0FUVEFDSF9fKS5cblxuXG4gICAgaWYgKHJlbmRlcmVySW50ZXJmYWNlICE9IG51bGwpIHtcbiAgICAgIGhvb2suZW1pdCgncmVuZGVyZXItYXR0YWNoZWQnLCB7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyLFxuICAgICAgICByZW5kZXJlckludGVyZmFjZTogcmVuZGVyZXJJbnRlcmZhY2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rLmVtaXQoJ3Vuc3VwcG9ydGVkLXJlbmRlcmVyLXZlcnNpb24nLCBpZCk7XG4gICAgfVxuICB9OyAvLyBDb25uZWN0IHJlbmRlcmVycyB0aGF0IGhhdmUgYWxyZWFkeSBpbmplY3RlZCB0aGVtc2VsdmVzLlxuXG5cbiAgaG9vay5yZW5kZXJlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVuZGVyZXIsIGlkKSB7XG4gICAgYXR0YWNoUmVuZGVyZXIoaWQsIHJlbmRlcmVyKTtcbiAgfSk7IC8vIENvbm5lY3QgYW55IG5ldyByZW5kZXJlcnMgdGhhdCBpbmplY3RlZCB0aGVtc2VsdmVzLlxuXG4gIHN1YnMucHVzaChob29rLnN1YigncmVuZGVyZXInLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgaWQgPSBfcmVmMi5pZCxcbiAgICAgICAgcmVuZGVyZXIgPSBfcmVmMi5yZW5kZXJlcjtcbiAgICBhdHRhY2hSZW5kZXJlcihpZCwgcmVuZGVyZXIpO1xuICB9KSk7XG4gIGhvb2suZW1pdCgncmVhY3QtZGV2dG9vbHMnLCBhZ2VudCk7XG4gIGhvb2sucmVhY3REZXZ0b29sc0FnZW50ID0gYWdlbnQ7XG5cbiAgdmFyIG9uQWdlbnRTaHV0ZG93biA9IGZ1bmN0aW9uIG9uQWdlbnRTaHV0ZG93bigpIHtcbiAgICBzdWJzLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9KTtcbiAgICBob29rLnJlbmRlcmVySW50ZXJmYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChyZW5kZXJlckludGVyZmFjZSkge1xuICAgICAgcmVuZGVyZXJJbnRlcmZhY2UuY2xlYW51cCgpO1xuICAgIH0pO1xuICAgIGhvb2sucmVhY3REZXZ0b29sc0FnZW50ID0gbnVsbDtcbiAgfTtcblxuICBhZ2VudC5hZGRMaXN0ZW5lcignc2h1dGRvd24nLCBvbkFnZW50U2h1dGRvd24pO1xuICBzdWJzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgIGFnZW50LnJlbW92ZUxpc3RlbmVyKCdzaHV0ZG93bicsIG9uQWdlbnRTaHV0ZG93bik7XG4gIH0pO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHN1YnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH0pO1xuICB9O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9OYXRpdmVTdHlsZUVkaXRvci9yZXNvbHZlQm94U3R5bGUuanNcbi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG4vKipcbiAqIFRoaXMgbWlycm9ycyByZWFjdC1uYXRpdmUvTGlicmFyaWVzL0luc3BlY3Rvci9yZXNvbHZlQm94U3R5bGUuanMgKGJ1dCB3aXRob3V0IFJUTCBzdXBwb3J0KS5cbiAqXG4gKiBSZXNvbHZlIGEgc3R5bGUgcHJvcGVydHkgaW50byBpdCdzIGNvbXBvbmVudCBwYXJ0cywgZS5nLlxuICpcbiAqIHJlc29sdmVCb3hTdHlsZSgnbWFyZ2luJywge21hcmdpbjogNSwgbWFyZ2luQm90dG9tOiAxMH0pXG4gKiAtPiB7dG9wOiA1LCBsZWZ0OiA1LCByaWdodDogNSwgYm90dG9tOiAxMH1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUJveFN0eWxlKHByZWZpeCwgc3R5bGUpIHtcbiAgdmFyIGhhc1BhcnRzID0gZmFsc2U7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAwXG4gIH07XG4gIHZhciBzdHlsZUZvckFsbCA9IHN0eWxlW3ByZWZpeF07XG5cbiAgaWYgKHN0eWxlRm9yQWxsICE9IG51bGwpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZm9yLW9mLWxvb3BzL25vLWZvci1vZi1sb29wc1xuICAgIGZvciAodmFyIF9pID0gMCwgX09iamVjdCRrZXlzID0gT2JqZWN0LmtleXMocmVzdWx0KTsgX2kgPCBfT2JqZWN0JGtleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIga2V5ID0gX09iamVjdCRrZXlzW19pXTtcbiAgICAgIHJlc3VsdFtrZXldID0gc3R5bGVGb3JBbGw7XG4gICAgfVxuXG4gICAgaGFzUGFydHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN0eWxlRm9ySG9yaXpvbnRhbCA9IHN0eWxlW3ByZWZpeCArICdIb3Jpem9udGFsJ107XG5cbiAgaWYgKHN0eWxlRm9ySG9yaXpvbnRhbCAhPSBudWxsKSB7XG4gICAgcmVzdWx0LmxlZnQgPSBzdHlsZUZvckhvcml6b250YWw7XG4gICAgcmVzdWx0LnJpZ2h0ID0gc3R5bGVGb3JIb3Jpem9udGFsO1xuICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3R5bGVGb3JMZWZ0ID0gc3R5bGVbcHJlZml4ICsgJ0xlZnQnXTtcblxuICAgIGlmIChzdHlsZUZvckxlZnQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0LmxlZnQgPSBzdHlsZUZvckxlZnQ7XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlRm9yUmlnaHQgPSBzdHlsZVtwcmVmaXggKyAnUmlnaHQnXTtcblxuICAgIGlmIChzdHlsZUZvclJpZ2h0ICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdC5yaWdodCA9IHN0eWxlRm9yUmlnaHQ7XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlRm9yRW5kID0gc3R5bGVbcHJlZml4ICsgJ0VuZCddO1xuXG4gICAgaWYgKHN0eWxlRm9yRW5kICE9IG51bGwpIHtcbiAgICAgIC8vIFRPRE8gUlRMIHN1cHBvcnRcbiAgICAgIHJlc3VsdC5yaWdodCA9IHN0eWxlRm9yRW5kO1xuICAgICAgaGFzUGFydHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzdHlsZUZvclN0YXJ0ID0gc3R5bGVbcHJlZml4ICsgJ1N0YXJ0J107XG5cbiAgICBpZiAoc3R5bGVGb3JTdGFydCAhPSBudWxsKSB7XG4gICAgICAvLyBUT0RPIFJUTCBzdXBwb3J0XG4gICAgICByZXN1bHQubGVmdCA9IHN0eWxlRm9yU3RhcnQ7XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0eWxlRm9yVmVydGljYWwgPSBzdHlsZVtwcmVmaXggKyAnVmVydGljYWwnXTtcblxuICBpZiAoc3R5bGVGb3JWZXJ0aWNhbCAhPSBudWxsKSB7XG4gICAgcmVzdWx0LmJvdHRvbSA9IHN0eWxlRm9yVmVydGljYWw7XG4gICAgcmVzdWx0LnRvcCA9IHN0eWxlRm9yVmVydGljYWw7XG4gICAgaGFzUGFydHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBzdHlsZUZvckJvdHRvbSA9IHN0eWxlW3ByZWZpeCArICdCb3R0b20nXTtcblxuICAgIGlmIChzdHlsZUZvckJvdHRvbSAhPSBudWxsKSB7XG4gICAgICByZXN1bHQuYm90dG9tID0gc3R5bGVGb3JCb3R0b207XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlRm9yVG9wID0gc3R5bGVbcHJlZml4ICsgJ1RvcCddO1xuXG4gICAgaWYgKHN0eWxlRm9yVG9wICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdC50b3AgPSBzdHlsZUZvclRvcDtcbiAgICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaGFzUGFydHMgPyByZXN1bHQgOiBudWxsO1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4uL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9OYXRpdmVTdHlsZUVkaXRvci9zZXR1cE5hdGl2ZVN0eWxlRWRpdG9yLmpzXG5mdW5jdGlvbiBzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cblxuXG5mdW5jdGlvbiBzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yKGJyaWRnZSwgYWdlbnQsIHJlc29sdmVOYXRpdmVTdHlsZSwgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gIGJyaWRnZS5hZGRMaXN0ZW5lcignTmF0aXZlU3R5bGVFZGl0b3JfbWVhc3VyZScsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGlkID0gX3JlZi5pZCxcbiAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYucmVuZGVyZXJJRDtcbiAgICBtZWFzdXJlU3R5bGUoYWdlbnQsIGJyaWRnZSwgcmVzb2x2ZU5hdGl2ZVN0eWxlLCBpZCwgcmVuZGVyZXJJRCk7XG4gIH0pO1xuICBicmlkZ2UuYWRkTGlzdGVuZXIoJ05hdGl2ZVN0eWxlRWRpdG9yX3JlbmFtZUF0dHJpYnV0ZScsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBpZCA9IF9yZWYyLmlkLFxuICAgICAgICByZW5kZXJlcklEID0gX3JlZjIucmVuZGVyZXJJRCxcbiAgICAgICAgb2xkTmFtZSA9IF9yZWYyLm9sZE5hbWUsXG4gICAgICAgIG5ld05hbWUgPSBfcmVmMi5uZXdOYW1lLFxuICAgICAgICB2YWx1ZSA9IF9yZWYyLnZhbHVlO1xuICAgIHJlbmFtZVN0eWxlKGFnZW50LCBpZCwgcmVuZGVyZXJJRCwgb2xkTmFtZSwgbmV3TmFtZSwgdmFsdWUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG1lYXN1cmVTdHlsZShhZ2VudCwgYnJpZGdlLCByZXNvbHZlTmF0aXZlU3R5bGUsIGlkLCByZW5kZXJlcklEKTtcbiAgICB9KTtcbiAgfSk7XG4gIGJyaWRnZS5hZGRMaXN0ZW5lcignTmF0aXZlU3R5bGVFZGl0b3Jfc2V0VmFsdWUnLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgaWQgPSBfcmVmMy5pZCxcbiAgICAgICAgcmVuZGVyZXJJRCA9IF9yZWYzLnJlbmRlcmVySUQsXG4gICAgICAgIG5hbWUgPSBfcmVmMy5uYW1lLFxuICAgICAgICB2YWx1ZSA9IF9yZWYzLnZhbHVlO1xuICAgIHNldFN0eWxlKGFnZW50LCBpZCwgcmVuZGVyZXJJRCwgbmFtZSwgdmFsdWUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG1lYXN1cmVTdHlsZShhZ2VudCwgYnJpZGdlLCByZXNvbHZlTmF0aXZlU3R5bGUsIGlkLCByZW5kZXJlcklEKTtcbiAgICB9KTtcbiAgfSk7XG4gIGJyaWRnZS5zZW5kKCdpc05hdGl2ZVN0eWxlRWRpdG9yU3VwcG9ydGVkJywge1xuICAgIGlzU3VwcG9ydGVkOiB0cnVlLFxuICAgIHZhbGlkQXR0cmlidXRlczogdmFsaWRBdHRyaWJ1dGVzXG4gIH0pO1xufVxudmFyIEVNUFRZX0JPWF9TVFlMRSA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwXG59O1xudmFyIGNvbXBvbmVudElEVG9TdHlsZU92ZXJyaWRlcyA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gbWVhc3VyZVN0eWxlKGFnZW50LCBicmlkZ2UsIHJlc29sdmVOYXRpdmVTdHlsZSwgaWQsIHJlbmRlcmVySUQpIHtcbiAgdmFyIGRhdGEgPSBhZ2VudC5nZXRJbnN0YW5jZUFuZFN0eWxlKHtcbiAgICBpZDogaWQsXG4gICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRFxuICB9KTtcblxuICBpZiAoIWRhdGEgfHwgIWRhdGEuc3R5bGUpIHtcbiAgICBicmlkZ2Uuc2VuZCgnTmF0aXZlU3R5bGVFZGl0b3Jfc3R5bGVBbmRMYXlvdXQnLCB7XG4gICAgICBpZDogaWQsXG4gICAgICBsYXlvdXQ6IG51bGwsXG4gICAgICBzdHlsZTogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IGRhdGEuaW5zdGFuY2UsXG4gICAgICBzdHlsZSA9IGRhdGEuc3R5bGU7XG4gIHZhciByZXNvbHZlZFN0eWxlID0gcmVzb2x2ZU5hdGl2ZVN0eWxlKHN0eWxlKTsgLy8gSWYgaXQncyBhIGhvc3QgY29tcG9uZW50IHdlIGVkaXRlZCBiZWZvcmUsIGFtZW5kIHN0eWxlcy5cblxuICB2YXIgc3R5bGVPdmVycmlkZXMgPSBjb21wb25lbnRJRFRvU3R5bGVPdmVycmlkZXMuZ2V0KGlkKTtcblxuICBpZiAoc3R5bGVPdmVycmlkZXMgIT0gbnVsbCkge1xuICAgIHJlc29sdmVkU3R5bGUgPSBPYmplY3QuYXNzaWduKHt9LCByZXNvbHZlZFN0eWxlLCBzdHlsZU92ZXJyaWRlcyk7XG4gIH1cblxuICBpZiAoIWluc3RhbmNlIHx8IHR5cGVvZiBpbnN0YW5jZS5tZWFzdXJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgYnJpZGdlLnNlbmQoJ05hdGl2ZVN0eWxlRWRpdG9yX3N0eWxlQW5kTGF5b3V0Jywge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbGF5b3V0OiBudWxsLFxuICAgICAgc3R5bGU6IHJlc29sdmVkU3R5bGUgfHwgbnVsbFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluc3RhbmNlLm1lYXN1cmUoZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCkge1xuICAgIC8vIFJOIEFuZHJvaWQgc29tZXRpbWVzIHJldHVybnMgdW5kZWZpbmVkIGhlcmUuIERvbid0IHNlbmQgbWVhc3VyZW1lbnRzIGluIHRoaXMgY2FzZS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vamhlbjA0MDkvcmVhY3QtbmF0aXZlLWRlYnVnZ2VyL2lzc3Vlcy84NCNpc3N1ZWNvbW1lbnQtMzA0NjExODE3XG4gICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJykge1xuICAgICAgYnJpZGdlLnNlbmQoJ05hdGl2ZVN0eWxlRWRpdG9yX3N0eWxlQW5kTGF5b3V0Jywge1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIGxheW91dDogbnVsbCxcbiAgICAgICAgc3R5bGU6IHJlc29sdmVkU3R5bGUgfHwgbnVsbFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG1hcmdpbiA9IHJlc29sdmVkU3R5bGUgIT0gbnVsbCAmJiByZXNvbHZlQm94U3R5bGUoJ21hcmdpbicsIHJlc29sdmVkU3R5bGUpIHx8IEVNUFRZX0JPWF9TVFlMRTtcbiAgICB2YXIgcGFkZGluZyA9IHJlc29sdmVkU3R5bGUgIT0gbnVsbCAmJiByZXNvbHZlQm94U3R5bGUoJ3BhZGRpbmcnLCByZXNvbHZlZFN0eWxlKSB8fCBFTVBUWV9CT1hfU1RZTEU7XG4gICAgYnJpZGdlLnNlbmQoJ05hdGl2ZVN0eWxlRWRpdG9yX3N0eWxlQW5kTGF5b3V0Jywge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHg6IHgsXG4gICAgICAgIHk6IHksXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBtYXJnaW46IG1hcmdpbixcbiAgICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgICAgfSxcbiAgICAgIHN0eWxlOiByZXNvbHZlZFN0eWxlIHx8IG51bGxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNoYWxsb3dDbG9uZShvYmplY3QpIHtcbiAgdmFyIGNsb25lZCA9IHt9O1xuXG4gIGZvciAodmFyIG4gaW4gb2JqZWN0KSB7XG4gICAgY2xvbmVkW25dID0gb2JqZWN0W25dO1xuICB9XG5cbiAgcmV0dXJuIGNsb25lZDtcbn1cblxuZnVuY3Rpb24gcmVuYW1lU3R5bGUoYWdlbnQsIGlkLCByZW5kZXJlcklELCBvbGROYW1lLCBuZXdOYW1lLCB2YWx1ZSkge1xuICB2YXIgX3JlZjQ7XG5cbiAgdmFyIGRhdGEgPSBhZ2VudC5nZXRJbnN0YW5jZUFuZFN0eWxlKHtcbiAgICBpZDogaWQsXG4gICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRFxuICB9KTtcblxuICBpZiAoIWRhdGEgfHwgIWRhdGEuc3R5bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSBkYXRhLmluc3RhbmNlLFxuICAgICAgc3R5bGUgPSBkYXRhLnN0eWxlO1xuICB2YXIgbmV3U3R5bGUgPSBuZXdOYW1lID8gKF9yZWY0ID0ge30sIHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfZGVmaW5lUHJvcGVydHkoX3JlZjQsIG9sZE5hbWUsIHVuZGVmaW5lZCksIHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfZGVmaW5lUHJvcGVydHkoX3JlZjQsIG5ld05hbWUsIHZhbHVlKSwgX3JlZjQpIDogc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl9kZWZpbmVQcm9wZXJ0eSh7fSwgb2xkTmFtZSwgdW5kZWZpbmVkKTtcbiAgdmFyIGN1c3RvbVN0eWxlOyAvLyBUT0RPIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIHJlbmRlcmVyIGludGVyZmFjZSBhYnN0cmFjdGVkIHRoaXMgYXdheSBzb21laG93LlxuXG4gIGlmIChpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2V0TmF0aXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGhvc3QgY29tcG9uZW50LCB3ZSBuZWVkIHRvIHVzZSBzZXROYXRpdmVQcm9wcygpLlxuICAgIC8vIFJlbWVtYmVyIHRvIFwiY29ycmVjdFwiIHJlc29sdmVkIHN0eWxlcyB3aGVuIHdlIHJlYWQgdGhlbSBuZXh0IHRpbWUuXG4gICAgdmFyIHN0eWxlT3ZlcnJpZGVzID0gY29tcG9uZW50SURUb1N0eWxlT3ZlcnJpZGVzLmdldChpZCk7XG5cbiAgICBpZiAoIXN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICBjb21wb25lbnRJRFRvU3R5bGVPdmVycmlkZXMuc2V0KGlkLCBuZXdTdHlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGVPdmVycmlkZXMsIG5ld1N0eWxlKTtcbiAgICB9IC8vIFRPRE8gRmFicmljIGRvZXMgbm90IHN1cHBvcnQgc2V0TmF0aXZlUHJvcHM7IGNoYXQgd2l0aCBTZWJhc3RpYW4gb3IgRWxpXG5cblxuICAgIGluc3RhbmNlLnNldE5hdGl2ZVByb3BzKHtcbiAgICAgIHN0eWxlOiBuZXdTdHlsZVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHNyY19pc0FycmF5KHN0eWxlKSkge1xuICAgIHZhciBsYXN0SW5kZXggPSBzdHlsZS5sZW5ndGggLSAxO1xuXG4gICAgaWYgKHNldHVwTmF0aXZlU3R5bGVFZGl0b3JfdHlwZW9mKHN0eWxlW2xhc3RJbmRleF0pID09PSAnb2JqZWN0JyAmJiAhc3JjX2lzQXJyYXkoc3R5bGVbbGFzdEluZGV4XSkpIHtcbiAgICAgIGN1c3RvbVN0eWxlID0gc2hhbGxvd0Nsb25lKHN0eWxlW2xhc3RJbmRleF0pO1xuICAgICAgZGVsZXRlIGN1c3RvbVN0eWxlW29sZE5hbWVdO1xuXG4gICAgICBpZiAobmV3TmFtZSkge1xuICAgICAgICBjdXN0b21TdHlsZVtuZXdOYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VzdG9tU3R5bGVbb2xkTmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGFnZW50Lm92ZXJyaWRlVmFsdWVBdFBhdGgoe1xuICAgICAgICB0eXBlOiAncHJvcHMnLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICAgIHBhdGg6IFsnc3R5bGUnLCBsYXN0SW5kZXhdLFxuICAgICAgICB2YWx1ZTogY3VzdG9tU3R5bGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZ2VudC5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICBwYXRoOiBbJ3N0eWxlJ10sXG4gICAgICAgIHZhbHVlOiBzdHlsZS5jb25jYXQoW25ld1N0eWxlXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX3R5cGVvZihzdHlsZSkgPT09ICdvYmplY3QnKSB7XG4gICAgY3VzdG9tU3R5bGUgPSBzaGFsbG93Q2xvbmUoc3R5bGUpO1xuICAgIGRlbGV0ZSBjdXN0b21TdHlsZVtvbGROYW1lXTtcblxuICAgIGlmIChuZXdOYW1lKSB7XG4gICAgICBjdXN0b21TdHlsZVtuZXdOYW1lXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXN0b21TdHlsZVtvbGROYW1lXSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBhZ2VudC5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgIHR5cGU6ICdwcm9wcycsXG4gICAgICBpZDogaWQsXG4gICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgcGF0aDogWydzdHlsZSddLFxuICAgICAgdmFsdWU6IGN1c3RvbVN0eWxlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYWdlbnQub3ZlcnJpZGVWYWx1ZUF0UGF0aCh7XG4gICAgICB0eXBlOiAncHJvcHMnLFxuICAgICAgaWQ6IGlkLFxuICAgICAgcmVuZGVyZXJJRDogcmVuZGVyZXJJRCxcbiAgICAgIHBhdGg6IFsnc3R5bGUnXSxcbiAgICAgIHZhbHVlOiBbc3R5bGUsIG5ld1N0eWxlXVxuICAgIH0pO1xuICB9XG5cbiAgYWdlbnQuZW1pdCgnaGlkZU5hdGl2ZUhpZ2hsaWdodCcpO1xufVxuXG5mdW5jdGlvbiBzZXRTdHlsZShhZ2VudCwgaWQsIHJlbmRlcmVySUQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gYWdlbnQuZ2V0SW5zdGFuY2VBbmRTdHlsZSh7XG4gICAgaWQ6IGlkLFxuICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySURcbiAgfSk7XG5cbiAgaWYgKCFkYXRhIHx8ICFkYXRhLnN0eWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gZGF0YS5pbnN0YW5jZSxcbiAgICAgIHN0eWxlID0gZGF0YS5zdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX2RlZmluZVByb3BlcnR5KHt9LCBuYW1lLCB2YWx1ZSk7IC8vIFRPRE8gSXQgd291bGQgYmUgbmljZSBpZiB0aGUgcmVuZGVyZXIgaW50ZXJmYWNlIGFic3RyYWN0ZWQgdGhpcyBhd2F5IHNvbWVob3cuXG5cblxuICBpZiAoaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLnNldE5hdGl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBob3N0IGNvbXBvbmVudCwgd2UgbmVlZCB0byB1c2Ugc2V0TmF0aXZlUHJvcHMoKS5cbiAgICAvLyBSZW1lbWJlciB0byBcImNvcnJlY3RcIiByZXNvbHZlZCBzdHlsZXMgd2hlbiB3ZSByZWFkIHRoZW0gbmV4dCB0aW1lLlxuICAgIHZhciBzdHlsZU92ZXJyaWRlcyA9IGNvbXBvbmVudElEVG9TdHlsZU92ZXJyaWRlcy5nZXQoaWQpO1xuXG4gICAgaWYgKCFzdHlsZU92ZXJyaWRlcykge1xuICAgICAgY29tcG9uZW50SURUb1N0eWxlT3ZlcnJpZGVzLnNldChpZCwgbmV3U3R5bGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0eWxlT3ZlcnJpZGVzLCBuZXdTdHlsZSk7XG4gICAgfSAvLyBUT0RPIEZhYnJpYyBkb2VzIG5vdCBzdXBwb3J0IHNldE5hdGl2ZVByb3BzOyBjaGF0IHdpdGggU2ViYXN0aWFuIG9yIEVsaVxuXG5cbiAgICBpbnN0YW5jZS5zZXROYXRpdmVQcm9wcyh7XG4gICAgICBzdHlsZTogbmV3U3R5bGVcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChzcmNfaXNBcnJheShzdHlsZSkpIHtcbiAgICB2YXIgbGFzdExlbmd0aCA9IHN0eWxlLmxlbmd0aCAtIDE7XG5cbiAgICBpZiAoc2V0dXBOYXRpdmVTdHlsZUVkaXRvcl90eXBlb2Yoc3R5bGVbbGFzdExlbmd0aF0pID09PSAnb2JqZWN0JyAmJiAhc3JjX2lzQXJyYXkoc3R5bGVbbGFzdExlbmd0aF0pKSB7XG4gICAgICBhZ2VudC5vdmVycmlkZVZhbHVlQXRQYXRoKHtcbiAgICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByZW5kZXJlcklEOiByZW5kZXJlcklELFxuICAgICAgICBwYXRoOiBbJ3N0eWxlJywgbGFzdExlbmd0aCwgbmFtZV0sXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFnZW50Lm92ZXJyaWRlVmFsdWVBdFBhdGgoe1xuICAgICAgICB0eXBlOiAncHJvcHMnLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICAgIHBhdGg6IFsnc3R5bGUnXSxcbiAgICAgICAgdmFsdWU6IHN0eWxlLmNvbmNhdChbbmV3U3R5bGVdKVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFnZW50Lm92ZXJyaWRlVmFsdWVBdFBhdGgoe1xuICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgIGlkOiBpZCxcbiAgICAgIHJlbmRlcmVySUQ6IHJlbmRlcmVySUQsXG4gICAgICBwYXRoOiBbJ3N0eWxlJ10sXG4gICAgICB2YWx1ZTogW3N0eWxlLCBuZXdTdHlsZV1cbiAgICB9KTtcbiAgfVxuXG4gIGFnZW50LmVtaXQoJ2hpZGVOYXRpdmVIaWdobGlnaHQnKTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jYWNoZWRTZXR0aW5ncy5qc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG4gLy8gTm90ZTogYWxsIGtleXMgc2hvdWxkIGJlIG9wdGlvbmFsIGluIHRoaXMgdHlwZSwgYmVjYXVzZSB1c2VycyBjYW4gdXNlIG5ld2VyXG4vLyB2ZXJzaW9ucyBvZiBSZWFjdCBEZXZUb29scyB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFJlYWN0IE5hdGl2ZSwgYW5kIHRoZSBvYmplY3Rcbi8vIHByb3ZpZGVkIGJ5IFJlYWN0IE5hdGl2ZSBtYXkgbm90IGluY2x1ZGUgYWxsIG9mIHRoaXMgdHlwZSdzIGZpZWxkcy5cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVzaW5nQ2FjaGVkU2V0dGluZ3MoZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIpIHtcbiAgaW5pdGlhbGl6ZUNvbnNvbGVQYXRjaFNldHRpbmdzKGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyKTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbnNvbGVQYXRjaFNldHRpbmdzKGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyKSB7XG4gIGlmIChkZXZUb29sc1NldHRpbmdzTWFuYWdlci5nZXRDb25zb2xlUGF0Y2hTZXR0aW5ncyA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNvbnNvbGVQYXRjaFNldHRpbmdzU3RyaW5nID0gZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIuZ2V0Q29uc29sZVBhdGNoU2V0dGluZ3MoKTtcblxuICBpZiAoY29uc29sZVBhdGNoU2V0dGluZ3NTdHJpbmcgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYXJzZWRDb25zb2xlUGF0Y2hTZXR0aW5ncyA9IHBhcnNlQ29uc29sZVBhdGNoU2V0dGluZ3MoY29uc29sZVBhdGNoU2V0dGluZ3NTdHJpbmcpO1xuXG4gIGlmIChwYXJzZWRDb25zb2xlUGF0Y2hTZXR0aW5ncyA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd3JpdGVDb25zb2xlUGF0Y2hTZXR0aW5nc1RvV2luZG93KHBhcnNlZENvbnNvbGVQYXRjaFNldHRpbmdzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb25zb2xlUGF0Y2hTZXR0aW5ncyhjb25zb2xlUGF0Y2hTZXR0aW5nc1N0cmluZykge1xuICB2YXIgX2Nhc3RCb29sLCBfY2FzdEJvb2wyLCBfY2FzdEJvb2wzLCBfY2FzdEJvb2w0LCBfY2FzdEJyb3dzZXJUaGVtZTtcblxuICB2YXIgcGFyc2VkVmFsdWUgPSBKU09OLnBhcnNlKGNvbnNvbGVQYXRjaFNldHRpbmdzU3RyaW5nICE9PSBudWxsICYmIGNvbnNvbGVQYXRjaFNldHRpbmdzU3RyaW5nICE9PSB2b2lkIDAgPyBjb25zb2xlUGF0Y2hTZXR0aW5nc1N0cmluZyA6ICd7fScpO1xuICB2YXIgYXBwZW5kQ29tcG9uZW50U3RhY2sgPSBwYXJzZWRWYWx1ZS5hcHBlbmRDb21wb25lbnRTdGFjayxcbiAgICAgIGJyZWFrT25Db25zb2xlRXJyb3JzID0gcGFyc2VkVmFsdWUuYnJlYWtPbkNvbnNvbGVFcnJvcnMsXG4gICAgICBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMgPSBwYXJzZWRWYWx1ZS5zaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnMsXG4gICAgICBoaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUgPSBwYXJzZWRWYWx1ZS5oaWRlQ29uc29sZUxvZ3NJblN0cmljdE1vZGUsXG4gICAgICBicm93c2VyVGhlbWUgPSBwYXJzZWRWYWx1ZS5icm93c2VyVGhlbWU7XG4gIHJldHVybiB7XG4gICAgYXBwZW5kQ29tcG9uZW50U3RhY2s6IChfY2FzdEJvb2wgPSBjYXN0Qm9vbChhcHBlbmRDb21wb25lbnRTdGFjaykpICE9PSBudWxsICYmIF9jYXN0Qm9vbCAhPT0gdm9pZCAwID8gX2Nhc3RCb29sIDogdHJ1ZSxcbiAgICBicmVha09uQ29uc29sZUVycm9yczogKF9jYXN0Qm9vbDIgPSBjYXN0Qm9vbChicmVha09uQ29uc29sZUVycm9ycykpICE9PSBudWxsICYmIF9jYXN0Qm9vbDIgIT09IHZvaWQgMCA/IF9jYXN0Qm9vbDIgOiBmYWxzZSxcbiAgICBzaG93SW5saW5lV2FybmluZ3NBbmRFcnJvcnM6IChfY2FzdEJvb2wzID0gY2FzdEJvb2woc2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzKSkgIT09IG51bGwgJiYgX2Nhc3RCb29sMyAhPT0gdm9pZCAwID8gX2Nhc3RCb29sMyA6IHRydWUsXG4gICAgaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlOiAoX2Nhc3RCb29sNCA9IGNhc3RCb29sKGhpZGVDb25zb2xlTG9nc0luU3RyaWN0TW9kZSkpICE9PSBudWxsICYmIF9jYXN0Qm9vbDQgIT09IHZvaWQgMCA/IF9jYXN0Qm9vbDQgOiBmYWxzZSxcbiAgICBicm93c2VyVGhlbWU6IChfY2FzdEJyb3dzZXJUaGVtZSA9IGNhc3RCcm93c2VyVGhlbWUoYnJvd3NlclRoZW1lKSkgIT09IG51bGwgJiYgX2Nhc3RCcm93c2VyVGhlbWUgIT09IHZvaWQgMCA/IF9jYXN0QnJvd3NlclRoZW1lIDogJ2RhcmsnXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29uc29sZVBhdGNoU2V0dGluZ3MoZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIsIHZhbHVlKSB7XG4gIGlmIChkZXZUb29sc1NldHRpbmdzTWFuYWdlci5zZXRDb25zb2xlUGF0Y2hTZXR0aW5ncyA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIuc2V0Q29uc29sZVBhdGNoU2V0dGluZ3MoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9iYWNrZW5kLmpzXG4vKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuXG5cblxuXG5cblxuXG5cbi8vIEluc3RhbGwgYSBnbG9iYWwgdmFyaWFibGUgdG8gYWxsb3cgcGF0Y2hpbmcgY29uc29sZSBlYXJseSAoZHVyaW5nIGluamVjdGlvbikuXG4vLyBUaGlzIHByb3ZpZGVzIFJlYWN0IE5hdGl2ZSBkZXZlbG9wZXJzIHdpdGggY29tcG9uZW50cyBzdGFja3MgZXZlbiBpZiB0aGV5IGRvbid0IHJ1biBEZXZUb29scy5cbmluc3RhbGxDb25zb2xlRnVuY3Rpb25zVG9XaW5kb3coKTtcbmluc3RhbGxIb29rKHdpbmRvdyk7XG52YXIgaG9vayA9IHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG52YXIgc2F2ZWRDb21wb25lbnRGaWx0ZXJzID0gZ2V0RGVmYXVsdENvbXBvbmVudEZpbHRlcnMoKTtcblxuZnVuY3Rpb24gYmFja2VuZF9kZWJ1ZyhtZXRob2ROYW1lKSB7XG4gIGlmIChfX0RFQlVHX18pIHtcbiAgICB2YXIgX2NvbnNvbGU7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAoX2NvbnNvbGUgPSBjb25zb2xlKS5sb2cuYXBwbHkoX2NvbnNvbGUsIFtcIiVjW2NvcmUvYmFja2VuZF0gJWNcIi5jb25jYXQobWV0aG9kTmFtZSksICdjb2xvcjogdGVhbDsgZm9udC13ZWlnaHQ6IGJvbGQ7JywgJ2ZvbnQtd2VpZ2h0OiBib2xkOyddLmNvbmNhdChhcmdzKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdFRvRGV2VG9vbHMob3B0aW9ucykge1xuICBpZiAoaG9vayA9PSBudWxsKSB7XG4gICAgLy8gRGV2VG9vbHMgZGlkbid0IGdldCBpbmplY3RlZCBpbnRvIHRoaXMgcGFnZSAobWF5YmUgYidjIG9mIHRoZSBjb250ZW50VHlwZSkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgX3JlZiRob3N0ID0gX3JlZi5ob3N0LFxuICAgICAgaG9zdCA9IF9yZWYkaG9zdCA9PT0gdm9pZCAwID8gJ2xvY2FsaG9zdCcgOiBfcmVmJGhvc3QsXG4gICAgICBuYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcyA9IF9yZWYubmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXMsXG4gICAgICBfcmVmJHVzZUh0dHBzID0gX3JlZi51c2VIdHRwcyxcbiAgICAgIHVzZUh0dHBzID0gX3JlZiR1c2VIdHRwcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHVzZUh0dHBzLFxuICAgICAgX3JlZiRwb3J0ID0gX3JlZi5wb3J0LFxuICAgICAgcG9ydCA9IF9yZWYkcG9ydCA9PT0gdm9pZCAwID8gODA5NyA6IF9yZWYkcG9ydCxcbiAgICAgIHdlYnNvY2tldCA9IF9yZWYud2Vic29ja2V0LFxuICAgICAgX3JlZiRyZXNvbHZlUk5TdHlsZSA9IF9yZWYucmVzb2x2ZVJOU3R5bGUsXG4gICAgICByZXNvbHZlUk5TdHlsZSA9IF9yZWYkcmVzb2x2ZVJOU3R5bGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJHJlc29sdmVSTlN0eWxlLFxuICAgICAgX3JlZiRyZXRyeUNvbm5lY3Rpb25EID0gX3JlZi5yZXRyeUNvbm5lY3Rpb25EZWxheSxcbiAgICAgIHJldHJ5Q29ubmVjdGlvbkRlbGF5ID0gX3JlZiRyZXRyeUNvbm5lY3Rpb25EID09PSB2b2lkIDAgPyAyMDAwIDogX3JlZiRyZXRyeUNvbm5lY3Rpb25ELFxuICAgICAgX3JlZiRpc0FwcEFjdGl2ZSA9IF9yZWYuaXNBcHBBY3RpdmUsXG4gICAgICBpc0FwcEFjdGl2ZSA9IF9yZWYkaXNBcHBBY3RpdmUgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSA6IF9yZWYkaXNBcHBBY3RpdmUsXG4gICAgICBkZXZUb29sc1NldHRpbmdzTWFuYWdlciA9IF9yZWYuZGV2VG9vbHNTZXR0aW5nc01hbmFnZXI7XG5cbiAgdmFyIHByb3RvY29sID0gdXNlSHR0cHMgPyAnd3NzJyA6ICd3cyc7XG4gIHZhciByZXRyeVRpbWVvdXRJRCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGVSZXRyeSgpIHtcbiAgICBpZiAocmV0cnlUaW1lb3V0SUQgPT09IG51bGwpIHtcbiAgICAgIC8vIFR3byBzZWNvbmRzIGJlY2F1c2UgUk4gaGFkIGlzc3VlcyB3aXRoIHF1aWNrIHJldHJpZXMuXG4gICAgICByZXRyeVRpbWVvdXRJRCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY29ubmVjdFRvRGV2VG9vbHMob3B0aW9ucyk7XG4gICAgICB9LCByZXRyeUNvbm5lY3Rpb25EZWxheSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgaW5pdGlhbGl6ZVVzaW5nQ2FjaGVkU2V0dGluZ3MoZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHdlIGNhbGwgYSBtZXRob2Qgb24gZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIgdGhhdCB0aHJvd3MsIG9yIGlmXG4gICAgICAvLyBpcyBpbnZhbGlkIGRhdGEgcmVhZCBvdXQsIGRvbid0IHRocm93IGFuZCBkb24ndCBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb25cbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc0FwcEFjdGl2ZSgpKSB7XG4gICAgLy8gSWYgdGhlIGFwcCBpcyBpbiBiYWNrZ3JvdW5kLCBtYXliZSByZXRyeSBsYXRlci5cbiAgICAvLyBEb24ndCBhY3R1YWxseSBhdHRlbXB0IHRvIGNvbm5lY3QgdW50aWwgd2UncmUgaW4gZm9yZWdyb3VuZC5cbiAgICBzY2hlZHVsZVJldHJ5KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGJyaWRnZSA9IG51bGw7XG4gIHZhciBtZXNzYWdlTGlzdGVuZXJzID0gW107XG4gIHZhciB1cmkgPSBwcm90b2NvbCArICc6Ly8nICsgaG9zdCArICc6JyArIHBvcnQ7IC8vIElmIGV4aXN0aW5nIHdlYnNvY2tldCBpcyBwYXNzZWQsIHVzZSBpdC5cbiAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBvdXIgY3VzdG9tIGludGVncmF0aW9ucy5cbiAgLy8gU2VlIEQ2MjUxNzQ0LlxuXG4gIHZhciB3cyA9IHdlYnNvY2tldCA/IHdlYnNvY2tldCA6IG5ldyB3aW5kb3cuV2ViU29ja2V0KHVyaSk7XG4gIHdzLm9uY2xvc2UgPSBoYW5kbGVDbG9zZTtcbiAgd3Mub25lcnJvciA9IGhhbmRsZUZhaWxlZDtcbiAgd3Mub25tZXNzYWdlID0gaGFuZGxlTWVzc2FnZTtcblxuICB3cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgYnJpZGdlID0gbmV3IHNyY19icmlkZ2Uoe1xuICAgICAgbGlzdGVuOiBmdW5jdGlvbiBsaXN0ZW4oZm4pIHtcbiAgICAgICAgbWVzc2FnZUxpc3RlbmVycy5wdXNoKGZuKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSBtZXNzYWdlTGlzdGVuZXJzLmluZGV4T2YoZm4pO1xuXG4gICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIG1lc3NhZ2VMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2VuZDogZnVuY3Rpb24gc2VuZChldmVudCwgcGF5bG9hZCwgdHJhbnNmZXJhYmxlKSB7XG4gICAgICAgIGlmICh3cy5yZWFkeVN0YXRlID09PSB3cy5PUEVOKSB7XG4gICAgICAgICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgICAgICAgYmFja2VuZF9kZWJ1Zygnd2FsbC5zZW5kKCknLCBldmVudCwgcGF5bG9hZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChfX0RFQlVHX18pIHtcbiAgICAgICAgICAgIGJhY2tlbmRfZGVidWcoJ3dhbGwuc2VuZCgpJywgJ1NodXR0aW5nIGRvd24gYnJpZGdlIGJlY2F1c2Ugb2YgY2xvc2VkIFdlYlNvY2tldCBjb25uZWN0aW9uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGJyaWRnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYnJpZGdlLnNodXRkb3duKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVSZXRyeSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgYnJpZGdlLmFkZExpc3RlbmVyKCd1cGRhdGVDb21wb25lbnRGaWx0ZXJzJywgZnVuY3Rpb24gKGNvbXBvbmVudEZpbHRlcnMpIHtcbiAgICAgIC8vIFNhdmUgZmlsdGVyIGNoYW5nZXMgaW4gbWVtb3J5LCBpbiBjYXNlIERldlRvb2xzIGlzIHJlbG9hZGVkLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aGUgcmVuZGVyZXIgd2lsbCBhbHJlYWR5IGJlIHVzaW5nIHRoZSB1cGRhdGVkIHZhbHVlcy5cbiAgICAgIC8vIFdlJ2xsIGxvc2UgdGhlc2UgaW4gYmV0d2VlbiBiYWNrZW5kIHJlbG9hZHMgYnV0IHRoYXQgY2FuJ3QgYmUgaGVscGVkLlxuICAgICAgc2F2ZWRDb21wb25lbnRGaWx0ZXJzID0gY29tcG9uZW50RmlsdGVycztcbiAgICB9KTtcblxuICAgIGlmIChkZXZUb29sc1NldHRpbmdzTWFuYWdlciAhPSBudWxsICYmIGJyaWRnZSAhPSBudWxsKSB7XG4gICAgICBicmlkZ2UuYWRkTGlzdGVuZXIoJ3VwZGF0ZUNvbnNvbGVQYXRjaFNldHRpbmdzJywgZnVuY3Rpb24gKGNvbnNvbGVQYXRjaFNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBjYWNoZUNvbnNvbGVQYXRjaFNldHRpbmdzKGRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyLCBjb25zb2xlUGF0Y2hTZXR0aW5ncyk7XG4gICAgICB9KTtcbiAgICB9IC8vIFRoZSByZW5kZXJlciBpbnRlcmZhY2UgZG9lc24ndCByZWFkIHNhdmVkIGNvbXBvbmVudCBmaWx0ZXJzIGRpcmVjdGx5LFxuICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgZ2VuZXJhbGx5IHN0b3JlZCBpbiBsb2NhbFN0b3JhZ2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBleHRlbnNpb24uXG4gICAgLy8gQmVjYXVzZSBvZiB0aGlzIGl0IHJlbGllcyBvbiB0aGUgZXh0ZW5zaW9uIHRvIHBhc3MgZmlsdGVycy5cbiAgICAvLyBJbiB0aGUgY2FzZSBvZiB0aGUgc3RhbmRhbG9uZSBEZXZUb29scyBiZWluZyB1c2VkIHdpdGggYSB3ZWJzaXRlLFxuICAgIC8vIHNhdmVkIGZpbHRlcnMgYXJlIGluamVjdGVkIGFsb25nIHdpdGggdGhlIGJhY2tlbmQgc2NyaXB0IHRhZyBzbyB3ZSBzaG91bGRuJ3Qgb3ZlcnJpZGUgdGhlbSBoZXJlLlxuICAgIC8vIFRoaXMgaW5qZWN0aW9uIHN0cmF0ZWd5IGRvZXNuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIHRob3VnaC5cbiAgICAvLyBJZGVhbGx5IHRoZSBiYWNrZW5kIHdvdWxkIHNhdmUgdGhlIGZpbHRlcnMgaXRzZWxmLCBidXQgUk4gZG9lc24ndCBwcm92aWRlIGEgc3luYyBzdG9yYWdlIHNvbHV0aW9uLlxuICAgIC8vIFNvIGZvciBub3cgd2UganVzdCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGRlZmF1bHQgZmlsdGVycy4uLlxuXG5cbiAgICBpZiAod2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfQ09NUE9ORU5UX0ZJTFRFUlNfXyA9PSBudWxsKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgIGJyaWRnZS5zZW5kKCdvdmVycmlkZUNvbXBvbmVudEZpbHRlcnMnLCBzYXZlZENvbXBvbmVudEZpbHRlcnMpO1xuICAgIH0gLy8gVE9ETyAobnBtLXBhY2thZ2VzKSBXYXJuIGlmIFwiaXNCYWNrZW5kU3RvcmFnZUFQSVN1cHBvcnRlZFwiXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICB2YXIgYWdlbnQgPSBuZXcgQWdlbnQoYnJpZGdlKTtcbiAgICBhZ2VudC5hZGRMaXN0ZW5lcignc2h1dGRvd24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBJZiB3ZSByZWNlaXZlZCAnc2h1dGRvd24nIGZyb20gYGFnZW50YCwgd2UgYXNzdW1lIHRoZSBgYnJpZGdlYCBpcyBhbHJlYWR5IHNodXR0aW5nIGRvd24sXG4gICAgICAvLyBhbmQgdGhhdCBjYXVzZWQgdGhlICdzaHV0ZG93bicgZXZlbnQgb24gdGhlIGBhZ2VudGAsIHNvIHdlIGRvbid0IG5lZWQgdG8gY2FsbCBgYnJpZGdlLnNodXRkb3duKClgIGhlcmUuXG4gICAgICBob29rLmVtaXQoJ3NodXRkb3duJyk7XG4gICAgfSk7XG4gICAgaW5pdEJhY2tlbmQoaG9vaywgYWdlbnQsIHdpbmRvdyk7IC8vIFNldHVwIFJlYWN0IE5hdGl2ZSBzdHlsZSBlZGl0b3IgaWYgdGhlIGVudmlyb25tZW50IHN1cHBvcnRzIGl0LlxuXG4gICAgaWYgKHJlc29sdmVSTlN0eWxlICE9IG51bGwgfHwgaG9vay5yZXNvbHZlUk5TdHlsZSAhPSBudWxsKSB7XG4gICAgICBzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yKCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICBicmlkZ2UsIGFnZW50LCByZXNvbHZlUk5TdHlsZSB8fCBob29rLnJlc29sdmVSTlN0eWxlLCBuYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcyB8fCBob29rLm5hdGl2ZVN0eWxlRWRpdG9yVmFsaWRBdHRyaWJ1dGVzIHx8IG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgbGlzdGVuIHRvIGRldGVjdCBpZiB0aGUgZW52aXJvbm1lbnQgbGF0ZXIgc3VwcG9ydHMgaXQuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgRmxpcHBlciBkb2VzIG5vdCBlYWdlcmx5IGluamVjdCB0aGVzZSB2YWx1ZXMuXG4gICAgICAvLyBJbnN0ZWFkIGl0IHJlbGllcyBvbiB0aGUgUmVhY3QgTmF0aXZlIEluc3BlY3RvciB0byBsYXppbHkgaW5qZWN0IHRoZW0uXG4gICAgICB2YXIgbGF6eVJlc29sdmVSTlN0eWxlO1xuICAgICAgdmFyIGxhenlOYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcztcblxuICAgICAgdmFyIGluaXRBZnRlclRpY2sgPSBmdW5jdGlvbiBpbml0QWZ0ZXJUaWNrKCkge1xuICAgICAgICBpZiAoYnJpZGdlICE9PSBudWxsKSB7XG4gICAgICAgICAgc2V0dXBOYXRpdmVTdHlsZUVkaXRvcihicmlkZ2UsIGFnZW50LCBsYXp5UmVzb2x2ZVJOU3R5bGUsIGxhenlOYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICghaG9vay5oYXNPd25Qcm9wZXJ0eSgncmVzb2x2ZVJOU3R5bGUnKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaG9vaywgJ3Jlc29sdmVSTlN0eWxlJywge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhenlSZXNvbHZlUk5TdHlsZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICBsYXp5UmVzb2x2ZVJOU3R5bGUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGluaXRBZnRlclRpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhvb2suaGFzT3duUHJvcGVydHkoJ25hdGl2ZVN0eWxlRWRpdG9yVmFsaWRBdHRyaWJ1dGVzJykpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhvb2ssICduYXRpdmVTdHlsZUVkaXRvclZhbGlkQXR0cmlidXRlcycsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXp5TmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgbGF6eU5hdGl2ZVN0eWxlRWRpdG9yVmFsaWRBdHRyaWJ1dGVzID0gdmFsdWU7XG4gICAgICAgICAgICBpbml0QWZ0ZXJUaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgYmFja2VuZF9kZWJ1ZygnV2ViU29ja2V0Lm9uY2xvc2UnKTtcbiAgICB9XG5cbiAgICBpZiAoYnJpZGdlICE9PSBudWxsKSB7XG4gICAgICBicmlkZ2UuZW1pdCgnc2h1dGRvd24nKTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZVJldHJ5KCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVGYWlsZWQoKSB7XG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgYmFja2VuZF9kZWJ1ZygnV2ViU29ja2V0Lm9uZXJyb3InKTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZVJldHJ5KCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7XG4gICAgdmFyIGRhdGE7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblxuICAgICAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICAgICAgYmFja2VuZF9kZWJ1ZygnV2ViU29ja2V0Lm9ubWVzc2FnZScsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSZWFjdCBEZXZUb29sc10gRmFpbGVkIHRvIHBhcnNlIEpTT046ICcgKyBldmVudC5kYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtZXNzYWdlTGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmbihkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGpzYyBkb2Vzbid0IHBsYXkgc28gd2VsbCB3aXRoIHRyYWNlYmFja3MgdGhhdCBnbyBpbnRvIGV2YWwnZCBjb2RlLFxuICAgICAgICAvLyBzbyB0aGUgc3RhY2sgdHJhY2UgaGVyZSB3aWxsIHN0b3AgYXQgdGhlIGBldmFsKClgIGNhbGwuIEdldHRpbmcgdGhlXG4gICAgICAgIC8vIG1lc3NhZ2UgdGhhdCBjYXVzZWQgdGhlIGVycm9yIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBmb3Igbm93LlxuICAgICAgICBjb25zb2xlLmxvZygnW1JlYWN0IERldlRvb2xzXSBFcnJvciBjYWxsaW5nIGxpc3RlbmVyJywgZGF0YSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG59KSgpO1xuXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xuLyoqKioqKi8gfSkoKVxuO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrZW5kLmpzLm1hcCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgTmF0aXZlRXZlbnRFbWl0dGVyIGZyb20gJy4uL0V2ZW50RW1pdHRlci9OYXRpdmVFdmVudEVtaXR0ZXInO1xuaW1wb3J0IGxvZ0Vycm9yIGZyb20gJy4uL1V0aWxpdGllcy9sb2dFcnJvcic7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCB7dHlwZSBFdmVudFN1YnNjcmlwdGlvbn0gZnJvbSAnLi4vdmVuZG9yL2VtaXR0ZXIvRXZlbnRFbWl0dGVyJztcbmltcG9ydCBOYXRpdmVBcHBTdGF0ZSBmcm9tICcuL05hdGl2ZUFwcFN0YXRlJztcblxuZXhwb3J0IHR5cGUgQXBwU3RhdGVWYWx1ZXMgPSAnaW5hY3RpdmUnIHwgJ2JhY2tncm91bmQnIHwgJ2FjdGl2ZSc7XG5cbnR5cGUgQXBwU3RhdGVFdmVudERlZmluaXRpb25zID0ge1xuICBjaGFuZ2U6IFtBcHBTdGF0ZVZhbHVlc10sXG4gIG1lbW9yeVdhcm5pbmc6IFtdLFxuICBibHVyOiBbXSxcbiAgZm9jdXM6IFtdLFxufTtcblxudHlwZSBOYXRpdmVBcHBTdGF0ZUV2ZW50RGVmaW5pdGlvbnMgPSB7XG4gIGFwcFN0YXRlRGlkQ2hhbmdlOiBbe2FwcF9zdGF0ZTogQXBwU3RhdGVWYWx1ZXN9XSxcbiAgYXBwU3RhdGVGb2N1c0NoYW5nZTogW2Jvb2xlYW5dLFxuICBtZW1vcnlXYXJuaW5nOiBbXSxcbn07XG5cbi8qKlxuICogYEFwcFN0YXRlYCBjYW4gdGVsbCB5b3UgaWYgdGhlIGFwcCBpcyBpbiB0aGUgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kLFxuICogYW5kIG5vdGlmeSB5b3Ugd2hlbiB0aGUgc3RhdGUgY2hhbmdlcy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hcHBzdGF0ZVxuICovXG5jbGFzcyBBcHBTdGF0ZSB7XG4gIGN1cnJlbnRTdGF0ZTogP3N0cmluZyA9IG51bGw7XG4gIGlzQXZhaWxhYmxlOiBib29sZWFuO1xuXG4gIF9lbWl0dGVyOiA/TmF0aXZlRXZlbnRFbWl0dGVyPE5hdGl2ZUFwcFN0YXRlRXZlbnREZWZpbml0aW9ucz47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKE5hdGl2ZUFwcFN0YXRlID09IG51bGwpIHtcbiAgICAgIHRoaXMuaXNBdmFpbGFibGUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0F2YWlsYWJsZSA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGVtaXR0ZXI6IE5hdGl2ZUV2ZW50RW1pdHRlcjxOYXRpdmVBcHBTdGF0ZUV2ZW50RGVmaW5pdGlvbnM+ID1cbiAgICAgICAgbmV3IE5hdGl2ZUV2ZW50RW1pdHRlcihcbiAgICAgICAgICAvLyBUODg3MTUwNjM6IE5hdGl2ZUV2ZW50RW1pdHRlciBvbmx5IHVzZWQgdGhpcyBwYXJhbWV0ZXIgb24gaU9TLiBOb3cgaXQgdXNlcyBpdCBvbiBhbGwgcGxhdGZvcm1zLCBzbyB0aGlzIGNvZGUgd2FzIG1vZGlmaWVkIGF1dG9tYXRpY2FsbHkgdG8gcHJlc2VydmUgaXRzIGJlaGF2aW9yXG4gICAgICAgICAgLy8gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBuYXRpdmUgbW9kdWxlIG9uIG90aGVyIHBsYXRmb3JtcywgcGxlYXNlIHJlbW92ZSB0aGlzIGNvbmRpdGlvbiBhbmQgdGVzdCBpdHMgYmVoYXZpb3JcbiAgICAgICAgICBQbGF0Zm9ybS5PUyAhPT0gJ2lvcycgPyBudWxsIDogTmF0aXZlQXBwU3RhdGUsXG4gICAgICAgICk7XG4gICAgICB0aGlzLl9lbWl0dGVyID0gZW1pdHRlcjtcblxuICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBOYXRpdmVBcHBTdGF0ZS5nZXRDb25zdGFudHMoKS5pbml0aWFsQXBwU3RhdGU7XG5cbiAgICAgIGxldCBldmVudFVwZGF0ZWQgPSBmYWxzZTtcblxuICAgICAgLy8gVE9ETzogdGhpcyBpcyBhIHRlcnJpYmxlIHNvbHV0aW9uIC0gaW4gb3JkZXIgdG8gZW5zdXJlIGBjdXJyZW50U3RhdGVgXG4gICAgICAvLyBwcm9wIGlzIHVwIHRvIGRhdGUsIHdlIGhhdmUgdG8gcmVnaXN0ZXIgYW4gb2JzZXJ2ZXIgdGhhdCB1cGRhdGVzIGl0XG4gICAgICAvLyB3aGVuZXZlciB0aGUgc3RhdGUgY2hhbmdlcywgZXZlbiBpZiBub2JvZHkgY2FyZXMuIFdlIHNob3VsZCBqdXN0XG4gICAgICAvLyBkZXByZWNhdGUgdGhlIGBjdXJyZW50U3RhdGVgIHByb3BlcnR5IGFuZCBnZXQgcmlkIG9mIHRoaXMuXG4gICAgICBlbWl0dGVyLmFkZExpc3RlbmVyKCdhcHBTdGF0ZURpZENoYW5nZScsIGFwcFN0YXRlRGF0YSA9PiB7XG4gICAgICAgIGV2ZW50VXBkYXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gYXBwU3RhdGVEYXRhLmFwcF9zdGF0ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUT0RPOiBzZWUgYWJvdmUgLSB0aGlzIHJlcXVlc3QganVzdCBwb3B1bGF0ZXMgdGhlIHZhbHVlIG9mIGBjdXJyZW50U3RhdGVgXG4gICAgICAvLyB3aGVuIHRoZSBtb2R1bGUgaXMgZmlyc3QgaW5pdGlhbGl6ZWQuIFdvdWxkIGJlIGJldHRlciB0byBnZXQgcmlkIG9mIHRoZVxuICAgICAgLy8gcHJvcCBhbmQgZXhwb3NlIGBnZXRDdXJyZW50QXBwU3RhdGVgIG1ldGhvZCBkaXJlY3RseS5cbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgIE5hdGl2ZUFwcFN0YXRlLmdldEN1cnJlbnRBcHBTdGF0ZShhcHBTdGF0ZURhdGEgPT4ge1xuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHN0YXRlIHdpbGwgaGF2ZSBjaGFuZ2VkIGhlcmUgJiBsaXN0ZW5lcnMgbmVlZCB0byBiZSBub3RpZmllZFxuICAgICAgICBpZiAoIWV2ZW50VXBkYXRlZCAmJiB0aGlzLmN1cnJlbnRTdGF0ZSAhPT0gYXBwU3RhdGVEYXRhLmFwcF9zdGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gYXBwU3RhdGVEYXRhLmFwcF9zdGF0ZTtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgICAgICAgIGVtaXR0ZXIuZW1pdCgnYXBwU3RhdGVEaWRDaGFuZ2UnLCBhcHBTdGF0ZURhdGEpO1xuICAgICAgICB9XG4gICAgICB9LCBsb2dFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGhhbmRsZXIgdG8gQXBwU3RhdGUgY2hhbmdlcyBieSBsaXN0ZW5pbmcgdG8gdGhlIGBjaGFuZ2VgIGV2ZW50IHR5cGVcbiAgICogYW5kIHByb3ZpZGluZyB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYXBwc3RhdGUjYWRkZXZlbnRsaXN0ZW5lclxuICAgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcjxLOiAkS2V5czxBcHBTdGF0ZUV2ZW50RGVmaW5pdGlvbnM+PihcbiAgICB0eXBlOiBLLFxuICAgIGhhbmRsZXI6ICguLi4kRWxlbWVudFR5cGU8QXBwU3RhdGVFdmVudERlZmluaXRpb25zLCBLPikgPT4gdm9pZCxcbiAgKTogRXZlbnRTdWJzY3JpcHRpb24ge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLl9lbWl0dGVyO1xuICAgIGlmIChlbWl0dGVyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBBcHBTdGF0ZSB3aGVuIGBpc0F2YWlsYWJsZWAgaXMgZmFsc2UuJyk7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnY2hhbmdlJzpcbiAgICAgICAgLy8gJEZsb3dJc3N1ZVtpbnZhbGlkLXR1cGxlLWFyaXR5XSBGbG93IGNhbm5vdCByZWZpbmUgaGFuZGxlciBiYXNlZCBvbiB0aGUgZXZlbnQgdHlwZVxuICAgICAgICBjb25zdCBjaGFuZ2VIYW5kbGVyOiBBcHBTdGF0ZVZhbHVlcyA9PiB2b2lkID0gaGFuZGxlcjtcbiAgICAgICAgcmV0dXJuIGVtaXR0ZXIuYWRkTGlzdGVuZXIoJ2FwcFN0YXRlRGlkQ2hhbmdlJywgYXBwU3RhdGVEYXRhID0+IHtcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyKGFwcFN0YXRlRGF0YS5hcHBfc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ21lbW9yeVdhcm5pbmcnOlxuICAgICAgICAvLyAkRmxvd0lzc3VlW2ludmFsaWQtdHVwbGUtYXJpdHldIEZsb3cgY2Fubm90IHJlZmluZSBoYW5kbGVyIGJhc2VkIG9uIHRoZSBldmVudCB0eXBlXG4gICAgICAgIGNvbnN0IG1lbW9yeVdhcm5pbmdIYW5kbGVyOiAoKSA9PiB2b2lkID0gaGFuZGxlcjtcbiAgICAgICAgcmV0dXJuIGVtaXR0ZXIuYWRkTGlzdGVuZXIoJ21lbW9yeVdhcm5pbmcnLCBtZW1vcnlXYXJuaW5nSGFuZGxlcik7XG4gICAgICBjYXNlICdibHVyJzpcbiAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgLy8gJEZsb3dJc3N1ZVtpbnZhbGlkLXR1cGxlLWFyaXR5XSBGbG93IGNhbm5vdCByZWZpbmUgaGFuZGxlciBiYXNlZCBvbiB0aGUgZXZlbnQgdHlwZVxuICAgICAgICBjb25zdCBmb2N1c09yQmx1ckhhbmRsZXI6ICgpID0+IHZvaWQgPSBoYW5kbGVyO1xuICAgICAgICByZXR1cm4gZW1pdHRlci5hZGRMaXN0ZW5lcignYXBwU3RhdGVGb2N1c0NoYW5nZScsIGhhc0ZvY3VzID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JsdXInICYmICFoYXNGb2N1cykge1xuICAgICAgICAgICAgZm9jdXNPckJsdXJIYW5kbGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlID09PSAnZm9jdXMnICYmIGhhc0ZvY3VzKSB7XG4gICAgICAgICAgICBmb2N1c09yQmx1ckhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBzdWJzY3JpYmUgdG8gdW5rbm93biBldmVudDogJyArIHR5cGUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKG5ldyBBcHBTdGF0ZSgpOiBBcHBTdGF0ZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNtYWxsIHV0aWxpdHkgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBlcnJvciBoYW5kbGVyLiBZb3UgY2Fubm90IGp1c3QgcGFzc1xuICogYGNvbnNvbGUuZXJyb3JgIGFzIGEgZmFpbHVyZSBjYWxsYmFjayAtIGl0J3Mgbm90IHByb3Blcmx5IGJvdW5kLiAgSWYgcGFzc2VzIGFuXG4gKiBgRXJyb3JgIG9iamVjdCwgaXQgd2lsbCBwcmludCB0aGUgbWVzc2FnZSBhbmQgc3RhY2suXG4gKi9cbmNvbnN0IGxvZ0Vycm9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPikge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgY29uc3QgZXJyID0gYXJnc1swXTtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogXCInICsgZXJyLm1lc3NhZ2UgKyAnXCIuICBTdGFjazpcXG4nICsgZXJyLnN0YWNrKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZ0Vycm9yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQXBwU3RhdGUnO1xuaW1wb3J0IE5hdGl2ZUFwcFN0YXRlIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQXBwU3RhdGUnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlQXBwU3RhdGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IHR5cGUgQXBwU3RhdGVDb25zdGFudHMgPSB7fFxuICBpbml0aWFsQXBwU3RhdGU6IHN0cmluZyxcbnx9O1xuXG5leHBvcnQgdHlwZSBBcHBTdGF0ZSA9IHt8YXBwX3N0YXRlOiBzdHJpbmd8fTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArZ2V0Q29uc3RhbnRzOiAoKSA9PiBBcHBTdGF0ZUNvbnN0YW50cztcbiAgK2dldEN1cnJlbnRBcHBTdGF0ZTogKFxuICAgIHN1Y2Nlc3M6IChhcHBTdGF0ZTogQXBwU3RhdGUpID0+IHZvaWQsXG4gICAgZXJyb3I6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG5cbiAgLy8gRXZlbnRzXG4gICthZGRMaXN0ZW5lcjogKGV2ZW50TmFtZTogc3RyaW5nKSA9PiB2b2lkO1xuICArcmVtb3ZlTGlzdGVuZXJzOiAoY291bnQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0RW5mb3JjaW5nPFNwZWM+KCdBcHBTdGF0ZScpOiBTcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0IHN0cmljdC1sb2NhbFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge0FueUF0dHJpYnV0ZVR5cGV9IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5pbXBvcnQgcHJvY2Vzc0FzcGVjdFJhdGlvIGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0FzcGVjdFJhdGlvJztcbmltcG9ydCBwcm9jZXNzQ29sb3IgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IHByb2Nlc3NGb250VmFyaWFudCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NGb250VmFyaWFudCc7XG5pbXBvcnQgcHJvY2Vzc1RyYW5zZm9ybSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NUcmFuc2Zvcm0nO1xuaW1wb3J0IHByb2Nlc3NUcmFuc2Zvcm1PcmlnaW4gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzVHJhbnNmb3JtT3JpZ2luJztcbmltcG9ydCBzaXplc0RpZmZlciBmcm9tICcuLi8uLi9VdGlsaXRpZXMvZGlmZmVyL3NpemVzRGlmZmVyJztcblxuY29uc3QgY29sb3JBdHRyaWJ1dGVzID0ge3Byb2Nlc3M6IHByb2Nlc3NDb2xvcn07XG5cbmNvbnN0IFJlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzOiB7W3N0cmluZ106IEFueUF0dHJpYnV0ZVR5cGUsIC4uLn0gPSB7XG4gIC8qKlxuICAgKiBMYXlvdXRcbiAgICovXG4gIGFsaWduQ29udGVudDogdHJ1ZSxcbiAgYWxpZ25JdGVtczogdHJ1ZSxcbiAgYWxpZ25TZWxmOiB0cnVlLFxuICBhc3BlY3RSYXRpbzoge3Byb2Nlc3M6IHByb2Nlc3NBc3BlY3RSYXRpb30sXG4gIGJvcmRlckJvdHRvbVdpZHRoOiB0cnVlLFxuICBib3JkZXJFbmRXaWR0aDogdHJ1ZSxcbiAgYm9yZGVyTGVmdFdpZHRoOiB0cnVlLFxuICBib3JkZXJSaWdodFdpZHRoOiB0cnVlLFxuICBib3JkZXJTdGFydFdpZHRoOiB0cnVlLFxuICBib3JkZXJUb3BXaWR0aDogdHJ1ZSxcbiAgY29sdW1uR2FwOiB0cnVlLFxuICBib3JkZXJXaWR0aDogdHJ1ZSxcbiAgYm90dG9tOiB0cnVlLFxuICBkaXJlY3Rpb246IHRydWUsXG4gIGRpc3BsYXk6IHRydWUsXG4gIGVuZDogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEJhc2lzOiB0cnVlLFxuICBmbGV4RGlyZWN0aW9uOiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleFdyYXA6IHRydWUsXG4gIGdhcDogdHJ1ZSxcbiAgaGVpZ2h0OiB0cnVlLFxuICBpbnNldDogdHJ1ZSxcbiAgaW5zZXRCbG9jazogdHJ1ZSxcbiAgaW5zZXRCbG9ja0VuZDogdHJ1ZSxcbiAgaW5zZXRCbG9ja1N0YXJ0OiB0cnVlLFxuICBpbnNldElubGluZTogdHJ1ZSxcbiAgaW5zZXRJbmxpbmVFbmQ6IHRydWUsXG4gIGluc2V0SW5saW5lU3RhcnQ6IHRydWUsXG4gIGp1c3RpZnlDb250ZW50OiB0cnVlLFxuICBsZWZ0OiB0cnVlLFxuICBtYXJnaW46IHRydWUsXG4gIG1hcmdpbkJsb2NrOiB0cnVlLFxuICBtYXJnaW5CbG9ja0VuZDogdHJ1ZSxcbiAgbWFyZ2luQmxvY2tTdGFydDogdHJ1ZSxcbiAgbWFyZ2luQm90dG9tOiB0cnVlLFxuICBtYXJnaW5FbmQ6IHRydWUsXG4gIG1hcmdpbkhvcml6b250YWw6IHRydWUsXG4gIG1hcmdpbklubGluZTogdHJ1ZSxcbiAgbWFyZ2luSW5saW5lRW5kOiB0cnVlLFxuICBtYXJnaW5JbmxpbmVTdGFydDogdHJ1ZSxcbiAgbWFyZ2luTGVmdDogdHJ1ZSxcbiAgbWFyZ2luUmlnaHQ6IHRydWUsXG4gIG1hcmdpblN0YXJ0OiB0cnVlLFxuICBtYXJnaW5Ub3A6IHRydWUsXG4gIG1hcmdpblZlcnRpY2FsOiB0cnVlLFxuICBtYXhIZWlnaHQ6IHRydWUsXG4gIG1heFdpZHRoOiB0cnVlLFxuICBtaW5IZWlnaHQ6IHRydWUsXG4gIG1pbldpZHRoOiB0cnVlLFxuICBvdmVyZmxvdzogdHJ1ZSxcbiAgcGFkZGluZzogdHJ1ZSxcbiAgcGFkZGluZ0Jsb2NrOiB0cnVlLFxuICBwYWRkaW5nQmxvY2tFbmQ6IHRydWUsXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB0cnVlLFxuICBwYWRkaW5nQm90dG9tOiB0cnVlLFxuICBwYWRkaW5nRW5kOiB0cnVlLFxuICBwYWRkaW5nSG9yaXpvbnRhbDogdHJ1ZSxcbiAgcGFkZGluZ0lubGluZTogdHJ1ZSxcbiAgcGFkZGluZ0lubGluZUVuZDogdHJ1ZSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB0cnVlLFxuICBwYWRkaW5nTGVmdDogdHJ1ZSxcbiAgcGFkZGluZ1JpZ2h0OiB0cnVlLFxuICBwYWRkaW5nU3RhcnQ6IHRydWUsXG4gIHBhZGRpbmdUb3A6IHRydWUsXG4gIHBhZGRpbmdWZXJ0aWNhbDogdHJ1ZSxcbiAgcG9zaXRpb246IHRydWUsXG4gIHJpZ2h0OiB0cnVlLFxuICByb3dHYXA6IHRydWUsXG4gIHN0YXJ0OiB0cnVlLFxuICB0b3A6IHRydWUsXG4gIHdpZHRoOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG5cbiAgLyoqXG4gICAqIFNoYWRvd1xuICAgKi9cbiAgZWxldmF0aW9uOiB0cnVlLFxuICBzaGFkb3dDb2xvcjogY29sb3JBdHRyaWJ1dGVzLFxuICBzaGFkb3dPZmZzZXQ6IHtkaWZmOiBzaXplc0RpZmZlcn0sXG4gIHNoYWRvd09wYWNpdHk6IHRydWUsXG4gIHNoYWRvd1JhZGl1czogdHJ1ZSxcblxuICAvKipcbiAgICogVHJhbnNmb3JtXG4gICAqL1xuICB0cmFuc2Zvcm06IHtwcm9jZXNzOiBwcm9jZXNzVHJhbnNmb3JtfSxcbiAgdHJhbnNmb3JtT3JpZ2luOiB7cHJvY2VzczogcHJvY2Vzc1RyYW5zZm9ybU9yaWdpbn0sXG5cbiAgLyoqXG4gICAqIFZpZXdcbiAgICovXG4gIGJhY2tmYWNlVmlzaWJpbGl0eTogdHJ1ZSxcbiAgYmFja2dyb3VuZENvbG9yOiBjb2xvckF0dHJpYnV0ZXMsXG4gIGJvcmRlckJsb2NrQ29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgYm9yZGVyQmxvY2tFbmRDb2xvcjogY29sb3JBdHRyaWJ1dGVzLFxuICBib3JkZXJCbG9ja1N0YXJ0Q29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgYm9yZGVyQm90dG9tRW5kUmFkaXVzOiB0cnVlLFxuICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiB0cnVlLFxuICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyQm90dG9tU3RhcnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlckNvbG9yOiBjb2xvckF0dHJpYnV0ZXMsXG4gIGJvcmRlckN1cnZlOiB0cnVlLFxuICBib3JkZXJFbmRDb2xvcjogY29sb3JBdHRyaWJ1dGVzLFxuICBib3JkZXJFbmRFbmRSYWRpdXM6IHRydWUsXG4gIGJvcmRlckVuZFN0YXJ0UmFkaXVzOiB0cnVlLFxuICBib3JkZXJMZWZ0Q29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgYm9yZGVyUmFkaXVzOiB0cnVlLFxuICBib3JkZXJSaWdodENvbG9yOiBjb2xvckF0dHJpYnV0ZXMsXG4gIGJvcmRlclN0YXJ0Q29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgYm9yZGVyU3RhcnRFbmRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclN0YXJ0U3RhcnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclN0eWxlOiB0cnVlLFxuICBib3JkZXJUb3BDb2xvcjogY29sb3JBdHRyaWJ1dGVzLFxuICBib3JkZXJUb3BFbmRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclRvcExlZnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiB0cnVlLFxuICBib3JkZXJUb3BTdGFydFJhZGl1czogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgcG9pbnRlckV2ZW50czogdHJ1ZSxcblxuICAvKipcbiAgICogVGV4dFxuICAgKi9cbiAgY29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgZm9udEZhbWlseTogdHJ1ZSxcbiAgZm9udFNpemU6IHRydWUsXG4gIGZvbnRTdHlsZTogdHJ1ZSxcbiAgZm9udFZhcmlhbnQ6IHtwcm9jZXNzOiBwcm9jZXNzRm9udFZhcmlhbnR9LFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBpbmNsdWRlRm9udFBhZGRpbmc6IHRydWUsXG4gIGxldHRlclNwYWNpbmc6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIHRleHRBbGlnbjogdHJ1ZSxcbiAgdGV4dEFsaWduVmVydGljYWw6IHRydWUsXG4gIHRleHREZWNvcmF0aW9uQ29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgdGV4dERlY29yYXRpb25MaW5lOiB0cnVlLFxuICB0ZXh0RGVjb3JhdGlvblN0eWxlOiB0cnVlLFxuICB0ZXh0U2hhZG93Q29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgdGV4dFNoYWRvd09mZnNldDogdHJ1ZSxcbiAgdGV4dFNoYWRvd1JhZGl1czogdHJ1ZSxcbiAgdGV4dFRyYW5zZm9ybTogdHJ1ZSxcbiAgdXNlclNlbGVjdDogdHJ1ZSxcbiAgdmVydGljYWxBbGlnbjogdHJ1ZSxcbiAgd3JpdGluZ0RpcmVjdGlvbjogdHJ1ZSxcblxuICAvKipcbiAgICogSW1hZ2VcbiAgICovXG4gIG92ZXJsYXlDb2xvcjogY29sb3JBdHRyaWJ1dGVzLFxuICByZXNpemVNb2RlOiB0cnVlLFxuICB0aW50Q29sb3I6IGNvbG9yQXR0cmlidXRlcyxcbiAgb2JqZWN0Rml0OiB0cnVlLFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG5mdW5jdGlvbiBwcm9jZXNzQXNwZWN0UmF0aW8oYXNwZWN0UmF0aW8/OiBudW1iZXIgfCBzdHJpbmcpOiA/bnVtYmVyIHtcbiAgaWYgKHR5cGVvZiBhc3BlY3RSYXRpbyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYXNwZWN0UmF0aW87XG4gIH1cbiAgaWYgKHR5cGVvZiBhc3BlY3RSYXRpbyAhPT0gJ3N0cmluZycpIHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICAhYXNwZWN0UmF0aW8sXG4gICAgICAgICdhc3BlY3RSYXRpbyBtdXN0IGVpdGhlciBiZSBhIG51bWJlciwgYSByYXRpbyBzdHJpbmcgb3IgYGF1dG9gLiBZb3UgcGFzc2VkOiAlcycsXG4gICAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlcyA9IGFzcGVjdFJhdGlvLnNwbGl0KCcvJykubWFwKHMgPT4gcy50cmltKCkpO1xuXG4gIGlmIChtYXRjaGVzLmluY2x1ZGVzKCdhdXRvJykpIHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBtYXRjaGVzLmxlbmd0aCxcbiAgICAgICAgJ2FzcGVjdFJhdGlvIGRvZXMgbm90IHN1cHBvcnQgYGF1dG8gPHJhdGlvPmAuIFlvdSBwYXNzZWQ6ICVzJyxcbiAgICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBoYXNOb25OdW1lcmljVmFsdWVzID0gbWF0Y2hlcy5zb21lKG4gPT4gTnVtYmVyLmlzTmFOKE51bWJlcihuKSkpO1xuICBpZiAoX19ERVZfXykge1xuICAgIGludmFyaWFudChcbiAgICAgICFoYXNOb25OdW1lcmljVmFsdWVzICYmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSB8fCBtYXRjaGVzLmxlbmd0aCA9PT0gMiksXG4gICAgICAnYXNwZWN0UmF0aW8gbXVzdCBlaXRoZXIgYmUgYSBudW1iZXIsIGEgcmF0aW8gc3RyaW5nIG9yIGBhdXRvYC4gWW91IHBhc3NlZDogJXMnLFxuICAgICAgYXNwZWN0UmF0aW8sXG4gICAgKTtcbiAgfVxuXG4gIGlmIChoYXNOb25OdW1lcmljVmFsdWVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIE51bWJlcihtYXRjaGVzWzBdKSAvIE51bWJlcihtYXRjaGVzWzFdKTtcbiAgfVxuXG4gIHJldHVybiBOdW1iZXIobWF0Y2hlc1swXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvY2Vzc0FzcGVjdFJhdGlvO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge19fX19Gb250VmFyaWFudEFycmF5X0ludGVybmFsfSBmcm9tICcuL1N0eWxlU2hlZXRUeXBlcyc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NGb250VmFyaWFudChcbiAgZm9udFZhcmlhbnQ6IF9fX19Gb250VmFyaWFudEFycmF5X0ludGVybmFsIHwgc3RyaW5nLFxuKTogP19fX19Gb250VmFyaWFudEFycmF5X0ludGVybmFsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZm9udFZhcmlhbnQpKSB7XG4gICAgcmV0dXJuIGZvbnRWYXJpYW50O1xuICB9XG5cbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbiAgY29uc3QgbWF0Y2g6ID9fX19fRm9udFZhcmlhbnRBcnJheV9JbnRlcm5hbCA9IGZvbnRWYXJpYW50XG4gICAgLnNwbGl0KCcgJylcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIHJldHVybiBtYXRjaDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzRm9udFZhcmlhbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ2lmeVNhZmUgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvc3RyaW5naWZ5U2FmZScpLmRlZmF1bHQ7XG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHRyYW5zZm9ybSBtYXRyaXggYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRyYW5zZm9ybXMsIGFuZCB1c2UgdGhhdFxuICogd2l0aGluIHRoZSBzdHlsZSBvYmplY3QgaW5zdGVhZC5cbiAqXG4gKiBUaGlzIGFsbG93cyB1cyB0byBwcm92aWRlIGFuIEFQSSB0aGF0IGlzIHNpbWlsYXIgdG8gQ1NTLCB3aGVyZSB0cmFuc2Zvcm1zIG1heVxuICogYmUgYXBwbGllZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIsIGFuZCB5ZXQgaGF2ZSBhIHVuaXZlcnNhbCwgc2luZ3VsYXJcbiAqIGludGVyZmFjZSB0byBuYXRpdmUgY29kZS5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1RyYW5zZm9ybShcbiAgdHJhbnNmb3JtOiBBcnJheTxPYmplY3Q+IHwgc3RyaW5nLFxuKTogQXJyYXk8T2JqZWN0PiB8IEFycmF5PG51bWJlcj4ge1xuICBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoLyhcXHcrKVxcKChbXildKylcXCkvZyk7XG4gICAgbGV0IHRyYW5zZm9ybUFycmF5OiBBcnJheTxPYmplY3Q+ID0gW107XG4gICAgbGV0IG1hdGNoZXM7XG5cbiAgICB3aGlsZSAoKG1hdGNoZXMgPSByZWdleC5leGVjKHRyYW5zZm9ybSkpKSB7XG4gICAgICBjb25zdCB7a2V5LCB2YWx1ZX0gPSBfZ2V0S2V5QW5kVmFsdWVGcm9tQ1NTVHJhbnNmb3JtKFxuICAgICAgICBtYXRjaGVzWzFdLFxuICAgICAgICBtYXRjaGVzWzJdLFxuICAgICAgKTtcblxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJhbnNmb3JtQXJyYXkucHVzaCh7W2tleV06IHZhbHVlfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybUFycmF5O1xuICB9XG5cbiAgaWYgKF9fREVWX18pIHtcbiAgICBfdmFsaWRhdGVUcmFuc2Zvcm1zKHRyYW5zZm9ybSk7XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtO1xufVxuXG5jb25zdCBfZ2V0S2V5QW5kVmFsdWVGcm9tQ1NTVHJhbnNmb3JtOiAoXG4gIGtleTpcbiAgICB8IHN0cmluZ1xuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J21hdHJpeCc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwncGVyc3BlY3RpdmUnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3JvdGF0ZSc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwncm90YXRlWCc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwncm90YXRlWSc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwncm90YXRlWic+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnc2NhbGUnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3NjYWxlWCc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnc2NhbGVZJz5cbiAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdza2V3WCc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnc2tld1knPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3RyYW5zbGF0ZSc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwndHJhbnNsYXRlM2QnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3RyYW5zbGF0ZVgnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3RyYW5zbGF0ZVknPixcbiAgYXJnczogc3RyaW5nLFxuKSA9PiB7a2V5OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyW10gfCBudW1iZXIgfCBzdHJpbmd9ID0gKGtleSwgYXJncykgPT4ge1xuICBjb25zdCBhcmdzV2l0aFVuaXRzUmVnZXggPSBuZXcgUmVnRXhwKC8oWystXT9cXGQrKFxcLlxcZCspPykoW2EtekEtWl0rKT8vZyk7XG5cbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdtYXRyaXgnOlxuICAgICAgcmV0dXJuIHtrZXksIHZhbHVlOiBhcmdzLm1hdGNoKC9bKy1dP1xcZCsoXFwuXFxkKyk/L2cpPy5tYXAoTnVtYmVyKX07XG4gICAgY2FzZSAndHJhbnNsYXRlJzpcbiAgICBjYXNlICd0cmFuc2xhdGUzZCc6XG4gICAgICBjb25zdCBwYXJzZWRBcmdzID0gW107XG4gICAgICBsZXQgbWlzc2luZ1VuaXRPZk1lYXN1cmVtZW50ID0gZmFsc2U7XG5cbiAgICAgIGxldCBtYXRjaGVzO1xuICAgICAgd2hpbGUgKChtYXRjaGVzID0gYXJnc1dpdGhVbml0c1JlZ2V4LmV4ZWMoYXJncykpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKG1hdGNoZXNbMV0pO1xuICAgICAgICBjb25zdCB1bml0T2ZNZWFzdXJlbWVudCA9IG1hdGNoZXNbM107XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSAwICYmICF1bml0T2ZNZWFzdXJlbWVudCkge1xuICAgICAgICAgIG1pc3NpbmdVbml0T2ZNZWFzdXJlbWVudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRBcmdzLnB1c2godmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX19ERVZfXykge1xuICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgIW1pc3NpbmdVbml0T2ZNZWFzdXJlbWVudCxcbiAgICAgICAgICBgVHJhbnNmb3JtIHdpdGgga2V5ICR7a2V5fSBtdXN0IGhhdmUgdW5pdHMgdW5sZXNzIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyAwLCBmb3VuZCAlc2AsXG4gICAgICAgICAgYCR7a2V5fSgke2FyZ3N9KWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3RyYW5zbGF0ZScpIHtcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBwYXJzZWRBcmdzPy5sZW5ndGggPT09IDEgfHwgcGFyc2VkQXJncz8ubGVuZ3RoID09PSAyLFxuICAgICAgICAgICAgJ1RyYW5zZm9ybSB3aXRoIGtleSB0cmFuc2xhdGUgbXVzdCBiZSBhbiBzdHJpbmcgd2l0aCAxIG9yIDIgcGFyYW1ldGVycywgZm91bmQgJXM6ICVzJyxcbiAgICAgICAgICAgIHBhcnNlZEFyZ3M/Lmxlbmd0aCxcbiAgICAgICAgICAgIGAke2tleX0oJHthcmdzfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgcGFyc2VkQXJncz8ubGVuZ3RoID09PSAzLFxuICAgICAgICAgICAgJ1RyYW5zZm9ybSB3aXRoIGtleSB0cmFuc2xhdGUzZCBtdXN0IGJlIGFuIHN0cmluZyB3aXRoIDMgcGFyYW1ldGVycywgZm91bmQgJXM6ICVzJyxcbiAgICAgICAgICAgIHBhcnNlZEFyZ3M/Lmxlbmd0aCxcbiAgICAgICAgICAgIGAke2tleX0oJHthcmdzfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlZEFyZ3M/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBwYXJzZWRBcmdzLnB1c2goMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7a2V5OiAndHJhbnNsYXRlJywgdmFsdWU6IHBhcnNlZEFyZ3N9O1xuICAgIGNhc2UgJ3RyYW5zbGF0ZVgnOlxuICAgIGNhc2UgJ3RyYW5zbGF0ZVknOlxuICAgIGNhc2UgJ3BlcnNwZWN0aXZlJzpcbiAgICAgIGNvbnN0IGFyZ01hdGNoZXMgPSBhcmdzV2l0aFVuaXRzUmVnZXguZXhlYyhhcmdzKTtcblxuICAgICAgaWYgKCFhcmdNYXRjaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtrZXksIHZhbHVlOiB1bmRlZmluZWR9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihhcmdNYXRjaGVzWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRPZk1lYXN1cmVtZW50ID0gYXJnTWF0Y2hlc1szXTtcblxuICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgIHZhbHVlID09PSAwIHx8IHVuaXRPZk1lYXN1cmVtZW50LFxuICAgICAgICAgIGBUcmFuc2Zvcm0gd2l0aCBrZXkgJHtrZXl9IG11c3QgaGF2ZSB1bml0cyB1bmxlc3MgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIDAsIGZvdW5kICVzYCxcbiAgICAgICAgICBgJHtrZXl9KCR7YXJnc30pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtrZXksIHZhbHVlfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge2tleSwgdmFsdWU6ICFpc05hTihhcmdzKSA/IE51bWJlcihhcmdzKSA6IGFyZ3N9O1xuICB9XG59O1xuXG5mdW5jdGlvbiBfdmFsaWRhdGVUcmFuc2Zvcm1zKHRyYW5zZm9ybTogQXJyYXk8T2JqZWN0Pik6IHZvaWQge1xuICB0cmFuc2Zvcm0uZm9yRWFjaCh0cmFuc2Zvcm1hdGlvbiA9PiB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRyYW5zZm9ybWF0aW9uKTtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBrZXlzLmxlbmd0aCA9PT0gMSxcbiAgICAgICdZb3UgbXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIHByb3BlcnR5IHBlciB0cmFuc2Zvcm0gb2JqZWN0LiBQYXNzZWQgcHJvcGVydGllczogJXMnLFxuICAgICAgc3RyaW5naWZ5U2FmZSh0cmFuc2Zvcm1hdGlvbiksXG4gICAgKTtcbiAgICBjb25zdCBrZXkgPSBrZXlzWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdHJhbnNmb3JtYXRpb25ba2V5XTtcbiAgICBfdmFsaWRhdGVUcmFuc2Zvcm0oa2V5LCB2YWx1ZSwgdHJhbnNmb3JtYXRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX3ZhbGlkYXRlVHJhbnNmb3JtKFxuICBrZXk6XG4gICAgfCBzdHJpbmdcbiAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdtYXRyaXgnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3BlcnNwZWN0aXZlJz5cbiAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdyb3RhdGUnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3JvdGF0ZVgnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3JvdGF0ZVknPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3JvdGF0ZVonPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3NjYWxlJz5cbiAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCdzY2FsZVgnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3NjYWxlWSc+XG4gICAgfCAkVEVNUE9SQVJZJHN0cmluZzwnc2tld1gnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3NrZXdZJz5cbiAgICB8ICRURU1QT1JBUlkkc3RyaW5nPCd0cmFuc2xhdGUnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3RyYW5zbGF0ZVgnPlxuICAgIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3RyYW5zbGF0ZVknPixcbiAgdmFsdWU6IGFueSB8IG51bWJlciB8IHN0cmluZyxcbiAgdHJhbnNmb3JtYXRpb246IGFueSxcbikge1xuICBpbnZhcmlhbnQoXG4gICAgIXZhbHVlLmdldFZhbHVlLFxuICAgICdZb3UgcGFzc2VkIGFuIEFuaW1hdGVkLlZhbHVlIHRvIGEgbm9ybWFsIGNvbXBvbmVudC4gJyArXG4gICAgICAnWW91IG5lZWQgdG8gd3JhcCB0aGF0IGNvbXBvbmVudCBpbiBhbiBBbmltYXRlZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgJ3JlcGxhY2UgPFZpZXcgLz4gYnkgPEFuaW1hdGVkLlZpZXcgLz4uJyxcbiAgKTtcblxuICBjb25zdCBtdWx0aXZhbHVlVHJhbnNmb3JtcyA9IFsnbWF0cml4JywgJ3RyYW5zbGF0ZSddO1xuICBpZiAobXVsdGl2YWx1ZVRyYW5zZm9ybXMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgIGludmFyaWFudChcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpLFxuICAgICAgJ1RyYW5zZm9ybSB3aXRoIGtleSBvZiAlcyBtdXN0IGhhdmUgYW4gYXJyYXkgYXMgdGhlIHZhbHVlOiAlcycsXG4gICAgICBrZXksXG4gICAgICBzdHJpbmdpZnlTYWZlKHRyYW5zZm9ybWF0aW9uKSxcbiAgICApO1xuICB9XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnbWF0cml4JzpcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdmFsdWUubGVuZ3RoID09PSA5IHx8IHZhbHVlLmxlbmd0aCA9PT0gMTYsXG4gICAgICAgICdNYXRyaXggdHJhbnNmb3JtIG11c3QgaGF2ZSBhIGxlbmd0aCBvZiA5ICgyZCkgb3IgMTYgKDNkKS4gJyArXG4gICAgICAgICAgJ1Byb3ZpZGVkIG1hdHJpeCBoYXMgYSBsZW5ndGggb2YgJXM6ICVzJyxcbiAgICAgICAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddICg+PTAuODQuMCBzaXRlPXJlYWN0X25hdGl2ZV9mYikgVGhpc1xuICAgICAgICAgKiBjb21tZW50IHN1cHByZXNzZXMgYW4gZXJyb3IgZm91bmQgd2hlbiBGbG93IHYwLjg0IHdhcyBkZXBsb3llZC4gVG9cbiAgICAgICAgICogc2VlIHRoZSBlcnJvciwgZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuICovXG4gICAgICAgIHZhbHVlLmxlbmd0aCxcbiAgICAgICAgc3RyaW5naWZ5U2FmZSh0cmFuc2Zvcm1hdGlvbiksXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHJhbnNsYXRlJzpcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdmFsdWUubGVuZ3RoID09PSAyIHx8IHZhbHVlLmxlbmd0aCA9PT0gMyxcbiAgICAgICAgJ1RyYW5zZm9ybSB3aXRoIGtleSB0cmFuc2xhdGUgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGggMiBvciAzLCBmb3VuZCAlczogJXMnLFxuICAgICAgICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gKD49MC44NC4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKSBUaGlzXG4gICAgICAgICAqIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuODQgd2FzIGRlcGxveWVkLiBUb1xuICAgICAgICAgKiBzZWUgdGhlIGVycm9yLCBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICAgICAgdmFsdWUubGVuZ3RoLFxuICAgICAgICBzdHJpbmdpZnlTYWZlKHRyYW5zZm9ybWF0aW9uKSxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb3RhdGVYJzpcbiAgICBjYXNlICdyb3RhdGVZJzpcbiAgICBjYXNlICdyb3RhdGVaJzpcbiAgICBjYXNlICdyb3RhdGUnOlxuICAgIGNhc2UgJ3NrZXdYJzpcbiAgICBjYXNlICdza2V3WSc6XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycsXG4gICAgICAgICdUcmFuc2Zvcm0gd2l0aCBrZXkgb2YgXCIlc1wiIG11c3QgYmUgYSBzdHJpbmc6ICVzJyxcbiAgICAgICAga2V5LFxuICAgICAgICBzdHJpbmdpZnlTYWZlKHRyYW5zZm9ybWF0aW9uKSxcbiAgICAgICk7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHZhbHVlLmluZGV4T2YoJ2RlZycpID4gLTEgfHwgdmFsdWUuaW5kZXhPZigncmFkJykgPiAtMSxcbiAgICAgICAgJ1JvdGF0ZSB0cmFuc2Zvcm0gbXVzdCBiZSBleHByZXNzZWQgaW4gZGVncmVlcyAoZGVnKSBvciByYWRpYW5zICcgK1xuICAgICAgICAgICcocmFkKTogJXMnLFxuICAgICAgICBzdHJpbmdpZnlTYWZlKHRyYW5zZm9ybWF0aW9uKSxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwZXJzcGVjdGl2ZSc6XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsXG4gICAgICAgICdUcmFuc2Zvcm0gd2l0aCBrZXkgb2YgXCIlc1wiIG11c3QgYmUgYSBudW1iZXI6ICVzJyxcbiAgICAgICAga2V5LFxuICAgICAgICBzdHJpbmdpZnlTYWZlKHRyYW5zZm9ybWF0aW9uKSxcbiAgICAgICk7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHZhbHVlICE9PSAwLFxuICAgICAgICAnVHJhbnNmb3JtIHdpdGgga2V5IG9mIFwiJXNcIiBjYW5ub3QgYmUgemVybzogJXMnLFxuICAgICAgICBrZXksXG4gICAgICAgIHN0cmluZ2lmeVNhZmUodHJhbnNmb3JtYXRpb24pLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RyYW5zbGF0ZVgnOlxuICAgIGNhc2UgJ3RyYW5zbGF0ZVknOlxuICAgIGNhc2UgJ3NjYWxlJzpcbiAgICBjYXNlICdzY2FsZVgnOlxuICAgIGNhc2UgJ3NjYWxlWSc6XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsXG4gICAgICAgICdUcmFuc2Zvcm0gd2l0aCBrZXkgb2YgXCIlc1wiIG11c3QgYmUgYSBudW1iZXI6ICVzJyxcbiAgICAgICAga2V5LFxuICAgICAgICBzdHJpbmdpZnlTYWZlKHRyYW5zZm9ybWF0aW9uKSxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0ludmFsaWQgdHJhbnNmb3JtICVzOiAlcycsXG4gICAgICAgIGtleSxcbiAgICAgICAgc3RyaW5naWZ5U2FmZSh0cmFuc2Zvcm1hdGlvbiksXG4gICAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvY2Vzc1RyYW5zZm9ybTtcbiIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5cbmNvbnN0IElOREVYX1ggPSAwO1xuY29uc3QgSU5ERVhfWSA9IDE7XG5jb25zdCBJTkRFWF9aID0gMjtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbGFiZWxzICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9jZXNzVHJhbnNmb3JtT3JpZ2luKFxuICB0cmFuc2Zvcm1PcmlnaW46IEFycmF5PHN0cmluZyB8IG51bWJlcj4gfCBzdHJpbmcsXG4pOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHtcbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1PcmlnaW4gPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtT3JpZ2luU3RyaW5nID0gdHJhbnNmb3JtT3JpZ2luO1xuICAgIGNvbnN0IHJlZ2V4ID0gLyh0b3B8Ym90dG9tfGxlZnR8cmlnaHR8Y2VudGVyfFxcZCsoPzolfHB4KXwwKS9naTtcbiAgICBjb25zdCB0cmFuc2Zvcm1PcmlnaW5BcnJheTogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9IFsnNTAlJywgJzUwJScsIDBdO1xuXG4gICAgbGV0IGluZGV4ID0gSU5ERVhfWDtcbiAgICBsZXQgbWF0Y2hlcztcbiAgICBvdXRlcjogd2hpbGUgKChtYXRjaGVzID0gcmVnZXguZXhlYyh0cmFuc2Zvcm1PcmlnaW5TdHJpbmcpKSkge1xuICAgICAgbGV0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBtYXRjaGVzWzBdO1xuICAgICAgY29uc3QgdmFsdWVMb3dlciA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAodmFsdWVMb3dlcikge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgaW5kZXggPT09IElOREVYX1gsXG4gICAgICAgICAgICAnVHJhbnNmb3JtLW9yaWdpbiAlcyBjYW4gb25seSBiZSB1c2VkIGZvciB4LXBvc2l0aW9uJyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luQXJyYXlbSU5ERVhfWF0gPSB2YWx1ZUxvd2VyID09PSAnbGVmdCcgPyAwIDogJzEwMCUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBpbmRleCAhPT0gSU5ERVhfWixcbiAgICAgICAgICAgICdUcmFuc2Zvcm0tb3JpZ2luICVzIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHktcG9zaXRpb24nLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5BcnJheVtJTkRFWF9ZXSA9IHZhbHVlTG93ZXIgPT09ICd0b3AnID8gMCA6ICcxMDAlJztcblxuICAgICAgICAgIC8vIEhhbmRsZSBbWyBjZW50ZXIgfCBsZWZ0IHwgcmlnaHQgXSAmJiBbIGNlbnRlciB8IHRvcCB8IGJvdHRvbSBdXSA8bGVuZ3RoPj9cbiAgICAgICAgICBpZiAoaW5kZXggPT09IElOREVYX1gpIHtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWwgPSByZWdleC5leGVjKHRyYW5zZm9ybU9yaWdpblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoaG9yaXpvbnRhbCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGhvcml6b250YWxbMF0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5BcnJheVtJTkRFWF9YXSA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5BcnJheVtJTkRFWF9YXSA9ICcxMDAlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5BcnJheVtJTkRFWF9YXSA9ICc1MCUnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGludmFyaWFudChcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBwYXJzZSB0cmFuc2Zvcm0tb3JpZ2luOiAlcycsXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5TdHJpbmcsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRJbmRleCA9IElOREVYX1o7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnY2VudGVyJzoge1xuICAgICAgICAgIGludmFyaWFudChcbiAgICAgICAgICAgIGluZGV4ICE9PSBJTkRFWF9aLFxuICAgICAgICAgICAgJ1RyYW5zZm9ybS1vcmlnaW4gdmFsdWUgJXMgY2Fubm90IGJlIHVzZWQgZm9yIHotcG9zaXRpb24nLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5BcnJheVtpbmRleF0gPSAnNTAlJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKCclJykpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbkFycmF5W2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5BcnJheVtpbmRleF0gPSBwYXJzZUZsb2F0KHZhbHVlKTsgLy8gUmVtb3ZlIGBweGBcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5kZXggPSBuZXh0SW5kZXg7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtT3JpZ2luID0gdHJhbnNmb3JtT3JpZ2luQXJyYXk7XG4gIH1cblxuICBpZiAoX19ERVZfXykge1xuICAgIF92YWxpZGF0ZVRyYW5zZm9ybU9yaWdpbih0cmFuc2Zvcm1PcmlnaW4pO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zZm9ybU9yaWdpbjtcbn1cblxuZnVuY3Rpb24gX3ZhbGlkYXRlVHJhbnNmb3JtT3JpZ2luKHRyYW5zZm9ybU9yaWdpbjogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPikge1xuICBpbnZhcmlhbnQoXG4gICAgdHJhbnNmb3JtT3JpZ2luLmxlbmd0aCA9PT0gMyxcbiAgICAnVHJhbnNmb3JtIG9yaWdpbiBtdXN0IGhhdmUgZXhhY3RseSAzIHZhbHVlcy4nLFxuICApO1xuICBjb25zdCBbeCwgeSwgel0gPSB0cmFuc2Zvcm1PcmlnaW47XG4gIGludmFyaWFudChcbiAgICB0eXBlb2YgeCA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiB4ID09PSAnc3RyaW5nJyAmJiB4LmVuZHNXaXRoKCclJykpLFxuICAgICdUcmFuc2Zvcm0gb3JpZ2luIHgtcG9zaXRpb24gbXVzdCBiZSBhIG51bWJlci4gUGFzc2VkIHZhbHVlOiAlcy4nLFxuICAgIHgsXG4gICk7XG4gIGludmFyaWFudChcbiAgICB0eXBlb2YgeSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiB5ID09PSAnc3RyaW5nJyAmJiB5LmVuZHNXaXRoKCclJykpLFxuICAgICdUcmFuc2Zvcm0gb3JpZ2luIHktcG9zaXRpb24gbXVzdCBiZSBhIG51bWJlci4gUGFzc2VkIHZhbHVlOiAlcy4nLFxuICAgIHksXG4gICk7XG4gIGludmFyaWFudChcbiAgICB0eXBlb2YgeiA9PT0gJ251bWJlcicsXG4gICAgJ1RyYW5zZm9ybSBvcmlnaW4gei1wb3NpdGlvbiBtdXN0IGJlIGEgbnVtYmVyLiBQYXNzZWQgdmFsdWU6ICVzLicsXG4gICAgeixcbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGR1bW15U2l6ZSA9IHt3aWR0aDogdW5kZWZpbmVkLCBoZWlnaHQ6IHVuZGVmaW5lZH07XG50eXBlIFNpemUgPSB7d2lkdGg6ID9udW1iZXIsIGhlaWdodDogP251bWJlcn07XG5cbmNvbnN0IHNpemVzRGlmZmVyID0gZnVuY3Rpb24gKG9uZTogU2l6ZSwgdHdvOiBTaXplKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRlZmF1bHRlZE9uZSA9IG9uZSB8fCBkdW1teVNpemU7XG4gIGNvbnN0IGRlZmF1bHRlZFR3byA9IHR3byB8fCBkdW1teVNpemU7XG4gIHJldHVybiAoXG4gICAgZGVmYXVsdGVkT25lICE9PSBkZWZhdWx0ZWRUd28gJiZcbiAgICAoZGVmYXVsdGVkT25lLndpZHRoICE9PSBkZWZhdWx0ZWRUd28ud2lkdGggfHxcbiAgICAgIGRlZmF1bHRlZE9uZS5oZWlnaHQgIT09IGRlZmF1bHRlZFR3by5oZWlnaHQpXG4gICk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNpemVzRGlmZmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCBTZXR0aW5ncyBmcm9tICcuLi9TZXR0aW5ncy9TZXR0aW5ncyc7XG5pbXBvcnQgRGV2U2V0dGluZ3MgZnJvbSAnLi4vVXRpbGl0aWVzL0RldlNldHRpbmdzJztcblxuY29uc3QgQ09OU09MRV9QQVRDSF9TRVRUSU5HU19LRVkgPSAnUmVhY3REZXZUb29sczo6Q29uc29sZVBhdGNoU2V0dGluZ3MnO1xuY29uc3QgUFJPRklMSU5HX1NFVFRJTkdTX0tFWSA9ICdSZWFjdERldlRvb2xzOjpQcm9maWxpbmdTZXR0aW5ncyc7XG5cbmNvbnN0IERldlRvb2xzU2V0dGluZ3NNYW5hZ2VyID0ge1xuICBzZXRDb25zb2xlUGF0Y2hTZXR0aW5ncyhuZXdDb25zb2xlUGF0Y2hTZXR0aW5nczogc3RyaW5nKTogdm9pZCB7XG4gICAgU2V0dGluZ3Muc2V0KHtcbiAgICAgIFtDT05TT0xFX1BBVENIX1NFVFRJTkdTX0tFWV06IG5ld0NvbnNvbGVQYXRjaFNldHRpbmdzLFxuICAgIH0pO1xuICB9LFxuICBnZXRDb25zb2xlUGF0Y2hTZXR0aW5ncygpOiA/c3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFNldHRpbmdzLmdldChDT05TT0xFX1BBVENIX1NFVFRJTkdTX0tFWSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgc2V0UHJvZmlsaW5nU2V0dGluZ3MobmV3UHJvZmlsaW5nU2V0dGluZ3M6IHN0cmluZyk6IHZvaWQge1xuICAgIFNldHRpbmdzLnNldCh7XG4gICAgICBbUFJPRklMSU5HX1NFVFRJTkdTX0tFWV06IG5ld1Byb2ZpbGluZ1NldHRpbmdzLFxuICAgIH0pO1xuICB9LFxuICBnZXRQcm9maWxpbmdTZXR0aW5ncygpOiA/c3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFNldHRpbmdzLmdldChQUk9GSUxJTkdfU0VUVElOR1NfS0VZKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICByZWxvYWQoKTogdm9pZCB7XG4gICAgRGV2U2V0dGluZ3M/LnJlbG9hZCgpO1xuICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZXZUb29sc1NldHRpbmdzTWFuYWdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCBSQ1REZXZpY2VFdmVudEVtaXR0ZXIgZnJvbSAnLi4vRXZlbnRFbWl0dGVyL1JDVERldmljZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgTmF0aXZlU2V0dGluZ3NNYW5hZ2VyIGZyb20gJy4vTmF0aXZlU2V0dGluZ3NNYW5hZ2VyJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxuY29uc3Qgc3Vic2NyaXB0aW9uczogQXJyYXk8e1xuICBrZXlzOiBBcnJheTxzdHJpbmc+LFxuICBjYWxsYmFjazogP0Z1bmN0aW9uLFxuICAuLi5cbn0+ID0gW107XG5cbmNvbnN0IFNldHRpbmdzID0ge1xuICBfc2V0dGluZ3M6IChOYXRpdmVTZXR0aW5nc01hbmFnZXIgJiZcbiAgICBOYXRpdmVTZXR0aW5nc01hbmFnZXIuZ2V0Q29uc3RhbnRzKCkuc2V0dGluZ3M6IGFueSksXG5cbiAgZ2V0KGtleTogc3RyaW5nKTogbWl4ZWQge1xuICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXVxuICAgIHJldHVybiB0aGlzLl9zZXR0aW5nc1trZXldO1xuICB9LFxuXG4gIHNldChzZXR0aW5nczogT2JqZWN0KSB7XG4gICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdXG4gICAgdGhpcy5fc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHRoaXMuX3NldHRpbmdzLCBzZXR0aW5ncyk7XG4gICAgTmF0aXZlU2V0dGluZ3NNYW5hZ2VyLnNldFZhbHVlcyhzZXR0aW5ncyk7XG4gIH0sXG5cbiAgd2F0Y2hLZXlzKGtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBGdW5jdGlvbik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJykge1xuICAgICAga2V5cyA9IFtrZXlzXTtcbiAgICB9XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICBBcnJheS5pc0FycmF5KGtleXMpLFxuICAgICAgJ2tleXMgc2hvdWxkIGJlIGEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MnLFxuICAgICk7XG5cbiAgICBjb25zdCBzaWQgPSBzdWJzY3JpcHRpb25zLmxlbmd0aDtcbiAgICBzdWJzY3JpcHRpb25zLnB1c2goe2tleXM6IGtleXMsIGNhbGxiYWNrOiBjYWxsYmFja30pO1xuICAgIHJldHVybiBzaWQ7XG4gIH0sXG5cbiAgY2xlYXJXYXRjaCh3YXRjaElkOiBudW1iZXIpIHtcbiAgICBpZiAod2F0Y2hJZCA8IHN1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICBzdWJzY3JpcHRpb25zW3dhdGNoSWRdID0ge2tleXM6IFtdLCBjYWxsYmFjazogbnVsbH07XG4gICAgfVxuICB9LFxuXG4gIF9zZW5kT2JzZXJ2YXRpb25zKGJvZHk6IE9iamVjdCkge1xuICAgIE9iamVjdC5rZXlzKGJvZHkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gYm9keVtrZXldO1xuICAgICAgLy8gJEZsb3dGaXhNZVtvYmplY3QtdGhpcy1yZWZlcmVuY2VdXG4gICAgICBjb25zdCBkaWRDaGFuZ2UgPSB0aGlzLl9zZXR0aW5nc1trZXldICE9PSBuZXdWYWx1ZTtcbiAgICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXVxuICAgICAgdGhpcy5fc2V0dGluZ3Nba2V5XSA9IG5ld1ZhbHVlO1xuXG4gICAgICBpZiAoZGlkQ2hhbmdlKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4ge1xuICAgICAgICAgIGlmIChzdWIua2V5cy5pbmRleE9mKGtleSkgIT09IC0xICYmIHN1Yi5jYWxsYmFjaykge1xuICAgICAgICAgICAgc3ViLmNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbn07XG5cblJDVERldmljZUV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lcihcbiAgJ3NldHRpbmdzVXBkYXRlZCcsXG4gIFNldHRpbmdzLl9zZW5kT2JzZXJ2YXRpb25zLmJpbmQoU2V0dGluZ3MpLFxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXR0aW5ncztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVNldHRpbmdzTWFuYWdlcic7XG5pbXBvcnQgTmF0aXZlU2V0dGluZ3NNYW5hZ2VyIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlU2V0dGluZ3NNYW5hZ2VyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVNldHRpbmdzTWFuYWdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8XG4gICAgc2V0dGluZ3M6IE9iamVjdCxcbiAgfH07XG4gICtzZXRWYWx1ZXM6ICh2YWx1ZXM6IE9iamVjdCkgPT4gdm9pZDtcbiAgK2RlbGV0ZVZhbHVlczogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0RW5mb3JjaW5nPFNwZWM+KFxuICAnU2V0dGluZ3NNYW5hZ2VyJyxcbik6IFNwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0Rhbmdlcm91c2x5SW1wcmVjaXNlU3R5bGVQcm9wfSBmcm9tICcuL1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge19fX19GbGF0dGVuU3R5bGVQcm9wX0ludGVybmFsfSBmcm9tICcuL1N0eWxlU2hlZXRUeXBlcyc7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5TdHlsZTxUU3R5bGVQcm9wOiBEYW5nZXJvdXNseUltcHJlY2lzZVN0eWxlUHJvcD4oXG4gIHN0eWxlOiA/VFN0eWxlUHJvcCxcbiAgLy8gJEZsb3dGaXhNZVt1bmRlcmNvbnN0cmFpbmVkLWltcGxpY2l0LWluc3RhbnRpYXRpb25dXG4pOiA/X19fX0ZsYXR0ZW5TdHlsZVByb3BfSW50ZXJuYWw8VFN0eWxlUHJvcD4ge1xuICBpZiAoc3R5bGUgPT09IG51bGwgfHwgdHlwZW9mIHN0eWxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3R5bGUpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDoge1tzdHJpbmddOiAkRmxvd0ZpeE1lfSA9IHt9O1xuICBmb3IgKGxldCBpID0gMCwgc3R5bGVMZW5ndGggPSBzdHlsZS5sZW5ndGg7IGkgPCBzdHlsZUxlbmd0aDsgKytpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVt1bmRlcmNvbnN0cmFpbmVkLWltcGxpY2l0LWluc3RhbnRpYXRpb25dXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGZsYXR0ZW5TdHlsZShzdHlsZVtpXSk7XG4gICAgaWYgKGNvbXB1dGVkU3R5bGUpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW52YWxpZC1pbi1yaHNdXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wdXRlZFN0eWxlKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICAgICAgcmVzdWx0W2tleV0gPSBjb21wdXRlZFN0eWxlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuU3R5bGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRTZW5kZXJ9IGZyb20gJy4vSW5zcGVjdG9yQWdlbnQnO1xuXG5pbnRlcmZhY2UgQWdlbnQge1xuICBjb25zdHJ1Y3RvcihldmVudFNlbmRlcjogRXZlbnRTZW5kZXIpOiB2b2lkO1xufVxuXG4vLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBzdGF0aWMgZGVjbGFyYXRpb25zIGluIGludGVyZmFjZVxudHlwZSBBZ2VudENsYXNzID0gQ2xhc3M8QWdlbnQ+ICYge0RPTUFJTjogc3RyaW5nLCAuLi59O1xuXG5jb25zdCBKU0luc3BlY3RvciA9IHtcbiAgcmVnaXN0ZXJBZ2VudCh0eXBlOiBBZ2VudENsYXNzKSB7XG4gICAgaWYgKGdsb2JhbC5fX3JlZ2lzdGVySW5zcGVjdG9yQWdlbnQpIHtcbiAgICAgIGdsb2JhbC5fX3JlZ2lzdGVySW5zcGVjdG9yQWdlbnQodHlwZSk7XG4gICAgfVxuICB9LFxuICBnZXRUaW1lc3RhbXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZ2xvYmFsLl9faW5zcGVjdG9yVGltZXN0YW1wKCk7XG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEpTSW5zcGVjdG9yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgRXZlbnRTZW5kZXIgZnJvbSAnLi9JbnNwZWN0b3JBZ2VudCc7XG5cbmNvbnN0IFhNTEh0dHBSZXF1ZXN0ID0gcmVxdWlyZSgnLi4vTmV0d29yay9YTUxIdHRwUmVxdWVzdCcpO1xuY29uc3QgSW5zcGVjdG9yQWdlbnQgPSByZXF1aXJlKCcuL0luc3BlY3RvckFnZW50Jyk7XG5jb25zdCBKU0luc3BlY3RvciA9IHJlcXVpcmUoJy4vSlNJbnNwZWN0b3InKTtcblxudHlwZSBSZXF1ZXN0SWQgPSBzdHJpbmc7XG5cbnR5cGUgTG9hZGVySWQgPSBzdHJpbmc7XG50eXBlIEZyYW1lSWQgPSBzdHJpbmc7XG50eXBlIFRpbWVzdGFtcCA9IG51bWJlcjtcblxudHlwZSBIZWFkZXJzID0ge1tzdHJpbmddOiBzdHJpbmd9O1xuXG4vLyBXZSBkb24ndCBjdXJyZW50bHkgY2FyZSBhYm91dCB0aGlzXG50eXBlIFJlc291cmNlVGltaW5nID0gbnVsbDtcblxudHlwZSBSZXNvdXJjZVR5cGUgPVxuICB8ICdEb2N1bWVudCdcbiAgfCAnU3R5bGVzaGVldCdcbiAgfCAnSW1hZ2UnXG4gIHwgJ01lZGlhJ1xuICB8ICdGb250J1xuICB8ICdTY3JpcHQnXG4gIHwgJ1RleHRUcmFjaydcbiAgfCAnWEhSJ1xuICB8ICdGZXRjaCdcbiAgfCAnRXZlbnRTb3VyY2UnXG4gIHwgJ1dlYlNvY2tldCdcbiAgfCAnTWFuaWZlc3QnXG4gIHwgJ090aGVyJztcblxudHlwZSBTZWN1cml0eVN0YXRlID1cbiAgfCAndW5rbm93bidcbiAgfCAnbmV1dHJhbCdcbiAgfCAnaW5zZWN1cmUnXG4gIHwgJ3dhcm5pbmcnXG4gIHwgJ3NlY3VyZSdcbiAgfCAnaW5mbyc7XG50eXBlIEJsb2NrZWRSZWFzb24gPVxuICB8ICdjc3AnXG4gIHwgJ21peGVkLWNvbnRlbnQnXG4gIHwgJ29yaWdpbidcbiAgfCAnaW5zcGVjdG9yJ1xuICB8ICdzdWJyZXNvdXJjZS1maWx0ZXInXG4gIHwgJ290aGVyJztcblxudHlwZSBTdGFja1RyYWNlID0gbnVsbDtcblxudHlwZSBJbml0aWF0b3IgPSB7XG4gIHR5cGU6ICdzY3JpcHQnIHwgJ290aGVyJyxcbiAgc3RhY2tUcmFjZT86IFN0YWNrVHJhY2UsXG4gIHVybD86IHN0cmluZyxcbiAgbGluZU51bWJlcj86IG51bWJlcixcbiAgLi4uXG59O1xuXG50eXBlIFJlc291cmNlUHJpb3JpdHkgPSAnVmVyeUxvdycgfCAnTG93JyB8ICdNZWRpdW0nIHwgJ0hpZ2gnIHwgJ1ZlcnlIaWdoJztcblxudHlwZSBSZXF1ZXN0ID0ge1xuICB1cmw6IHN0cmluZyxcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIGhlYWRlcnM6IEhlYWRlcnMsXG4gIHBvc3REYXRhPzogc3RyaW5nLFxuICBtaXhlZENvbnRlbnRUeXBlPzogJ2Jsb2NrYWJsZScgfCAnb3B0aW9uYWxseS1ibG9ja2FibGUnIHwgJ25vbmUnLFxuICBpbml0aWFsUHJpb3JpdHk6IFJlc291cmNlUHJpb3JpdHksXG4gIC4uLlxufTtcblxudHlwZSBSZXNwb25zZSA9IHtcbiAgdXJsOiBzdHJpbmcsXG4gIHN0YXR1czogbnVtYmVyLFxuICBzdGF0dXNUZXh0OiBzdHJpbmcsXG4gIGhlYWRlcnM6IEhlYWRlcnMsXG4gIGhlYWRlcnNUZXh0Pzogc3RyaW5nLFxuICBtaW1lVHlwZTogc3RyaW5nLFxuICByZXF1ZXN0SGVhZGVycz86IEhlYWRlcnMsXG4gIHJlcXVlc3RIZWFkZXJzVGV4dD86IHN0cmluZyxcbiAgY29ubmVjdGlvblJldXNlZDogYm9vbGVhbixcbiAgY29ubmVjdGlvbklkOiBudW1iZXIsXG4gIGZyb21EaXNrQ2FjaGU/OiBib29sZWFuLFxuICBlbmNvZGVkRGF0YUxlbmd0aDogbnVtYmVyLFxuICB0aW1pbmc/OiBSZXNvdXJjZVRpbWluZyxcbiAgc2VjdXJpdHlTdGF0ZTogU2VjdXJpdHlTdGF0ZSxcbiAgLi4uXG59O1xuXG50eXBlIFJlcXVlc3RXaWxsQmVTZW50RXZlbnQgPSB7XG4gIHJlcXVlc3RJZDogUmVxdWVzdElkLFxuICBmcmFtZUlkOiBGcmFtZUlkLFxuICBsb2FkZXJJZDogTG9hZGVySWQsXG4gIGRvY3VtZW50VVJMOiBzdHJpbmcsXG4gIHJlcXVlc3Q6IFJlcXVlc3QsXG4gIHRpbWVzdGFtcDogVGltZXN0YW1wLFxuICBpbml0aWF0b3I6IEluaXRpYXRvcixcbiAgcmVkaXJlY3RSZXNwb25zZT86IFJlc3BvbnNlLFxuICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIG9wdGlvbmFsIGJ1dCB0aGUgaW5zcGVjdG9yIGNyYXNoZXMgd2l0aG91dCBpdCxcbiAgLy8gc2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY1MzEzOFxuICB0eXBlOiBSZXNvdXJjZVR5cGUsXG4gIC4uLlxufTtcblxudHlwZSBSZXNwb25zZVJlY2VpdmVkRXZlbnQgPSB7XG4gIHJlcXVlc3RJZDogUmVxdWVzdElkLFxuICBmcmFtZUlkOiBGcmFtZUlkLFxuICBsb2FkZXJJZDogTG9hZGVySWQsXG4gIHRpbWVzdGFtcDogVGltZXN0YW1wLFxuICB0eXBlOiBSZXNvdXJjZVR5cGUsXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgLi4uXG59O1xuXG50eXBlIERhdGFSZWNlaXZlZCA9IHtcbiAgcmVxdWVzdElkOiBSZXF1ZXN0SWQsXG4gIHRpbWVzdGFtcDogVGltZXN0YW1wLFxuICBkYXRhTGVuZ3RoOiBudW1iZXIsXG4gIGVuY29kZWREYXRhTGVuZ3RoOiBudW1iZXIsXG4gIC4uLlxufTtcblxudHlwZSBMb2FkaW5nRmluaXNoZWRFdmVudCA9IHtcbiAgcmVxdWVzdElkOiBSZXF1ZXN0SWQsXG4gIHRpbWVzdGFtcDogVGltZXN0YW1wLFxuICBlbmNvZGVkRGF0YUxlbmd0aDogbnVtYmVyLFxuICAuLi5cbn07XG5cbnR5cGUgTG9hZGluZ0ZhaWxlZEV2ZW50ID0ge1xuICByZXF1ZXN0SWQ6IFJlcXVlc3RJZCxcbiAgdGltZXN0YW1wOiBUaW1lc3RhbXAsXG4gIHR5cGU6IFJlc291cmNlVHlwZSxcbiAgZXJyb3JUZXh0OiBzdHJpbmcsXG4gIGNhbmNlbGVkPzogYm9vbGVhbixcbiAgYmxvY2tlZFJlYXNvbj86IEJsb2NrZWRSZWFzb24sXG4gIC4uLlxufTtcblxuY2xhc3MgSW50ZXJjZXB0b3Ige1xuICBfYWdlbnQ6IE5ldHdvcmtBZ2VudDtcbiAgX3JlcXVlc3RzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKGFnZW50OiBOZXR3b3JrQWdlbnQpIHtcbiAgICB0aGlzLl9hZ2VudCA9IGFnZW50O1xuICAgIHRoaXMuX3JlcXVlc3RzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgZ2V0RGF0YShyZXF1ZXN0SWQ6IHN0cmluZyk6ID9zdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0cy5nZXQocmVxdWVzdElkKTtcbiAgfVxuXG4gIHJlcXVlc3RTZW50KGlkOiBudW1iZXIsIHVybDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFN0cmluZyhpZCk7XG4gICAgdGhpcy5fcmVxdWVzdHMuc2V0KHJlcXVlc3RJZCwgJycpO1xuXG4gICAgY29uc3QgcmVxdWVzdDogUmVxdWVzdCA9IHtcbiAgICAgIHVybCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBpbml0aWFsUHJpb3JpdHk6ICdNZWRpdW0nLFxuICAgIH07XG4gICAgY29uc3QgZXZlbnQ6IFJlcXVlc3RXaWxsQmVTZW50RXZlbnQgPSB7XG4gICAgICByZXF1ZXN0SWQsXG4gICAgICBkb2N1bWVudFVSTDogJycsXG4gICAgICBmcmFtZUlkOiAnMScsXG4gICAgICBsb2FkZXJJZDogJzEnLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIHRpbWVzdGFtcDogSlNJbnNwZWN0b3IuZ2V0VGltZXN0YW1wKCksXG4gICAgICBpbml0aWF0b3I6IHtcbiAgICAgICAgLy8gVE9ETyhibG9tKTogR2V0IHN0YWNrIHRyYWNlXG4gICAgICAgIC8vIElmIHR5cGUgaXMgJ3NjcmlwdCcgdGhlIGluc3BlY3RvciB3aWxsIHRyeSB0byBleGVjdXRlXG4gICAgICAgIC8vIGBzdGFjay5jYWxsRnJhbWVzWzBdYFxuICAgICAgICB0eXBlOiAnb3RoZXInLFxuICAgICAgfSxcbiAgICAgIHR5cGU6ICdPdGhlcicsXG4gICAgfTtcbiAgICB0aGlzLl9hZ2VudC5zZW5kRXZlbnQoJ3JlcXVlc3RXaWxsQmVTZW50JywgZXZlbnQpO1xuICB9XG5cbiAgcmVzcG9uc2VSZWNlaXZlZChpZDogbnVtYmVyLCB1cmw6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IEhlYWRlcnMpIHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBTdHJpbmcoaWQpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZSA9IHtcbiAgICAgIHVybCxcbiAgICAgIHN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IFN0cmluZyhzdGF0dXMpLFxuICAgICAgaGVhZGVycyxcbiAgICAgIC8vIFRPRE8oYmxvbSkgcmVmaW5lZCBoZWFkZXJzLCBjYW4gd2UgZ2V0IHRoaXM/XG4gICAgICByZXF1ZXN0SGVhZGVyczoge30sXG4gICAgICBtaW1lVHlwZTogdGhpcy5fZ2V0TWltZVR5cGUoaGVhZGVycyksXG4gICAgICBjb25uZWN0aW9uUmV1c2VkOiBmYWxzZSxcbiAgICAgIGNvbm5lY3Rpb25JZDogLTEsXG4gICAgICBlbmNvZGVkRGF0YUxlbmd0aDogMCxcbiAgICAgIHNlY3VyaXR5U3RhdGU6ICd1bmtub3duJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXZlbnQ6IFJlc3BvbnNlUmVjZWl2ZWRFdmVudCA9IHtcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIGZyYW1lSWQ6ICcxJyxcbiAgICAgIGxvYWRlcklkOiAnMScsXG4gICAgICB0aW1lc3RhbXA6IEpTSW5zcGVjdG9yLmdldFRpbWVzdGFtcCgpLFxuICAgICAgdHlwZTogJ090aGVyJyxcbiAgICAgIHJlc3BvbnNlLFxuICAgIH07XG4gICAgdGhpcy5fYWdlbnQuc2VuZEV2ZW50KCdyZXNwb25zZVJlY2VpdmVkJywgZXZlbnQpO1xuICB9XG5cbiAgZGF0YVJlY2VpdmVkKGlkOiBudW1iZXIsIGRhdGE6IHN0cmluZykge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFN0cmluZyhpZCk7XG4gICAgY29uc3QgZXhpc3RpbmdEYXRhID0gdGhpcy5fcmVxdWVzdHMuZ2V0KHJlcXVlc3RJZCkgfHwgJyc7XG4gICAgdGhpcy5fcmVxdWVzdHMuc2V0KHJlcXVlc3RJZCwgZXhpc3RpbmdEYXRhLmNvbmNhdChkYXRhKSk7XG4gICAgY29uc3QgZXZlbnQ6IERhdGFSZWNlaXZlZCA9IHtcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHRpbWVzdGFtcDogSlNJbnNwZWN0b3IuZ2V0VGltZXN0YW1wKCksXG4gICAgICBkYXRhTGVuZ3RoOiBkYXRhLmxlbmd0aCxcbiAgICAgIGVuY29kZWREYXRhTGVuZ3RoOiBkYXRhLmxlbmd0aCxcbiAgICB9O1xuICAgIHRoaXMuX2FnZW50LnNlbmRFdmVudCgnZGF0YVJlY2VpdmVkJywgZXZlbnQpO1xuICB9XG5cbiAgbG9hZGluZ0ZpbmlzaGVkKGlkOiBudW1iZXIsIGVuY29kZWREYXRhTGVuZ3RoOiBudW1iZXIpIHtcbiAgICBjb25zdCBldmVudDogTG9hZGluZ0ZpbmlzaGVkRXZlbnQgPSB7XG4gICAgICByZXF1ZXN0SWQ6IFN0cmluZyhpZCksXG4gICAgICB0aW1lc3RhbXA6IEpTSW5zcGVjdG9yLmdldFRpbWVzdGFtcCgpLFxuICAgICAgZW5jb2RlZERhdGFMZW5ndGg6IGVuY29kZWREYXRhTGVuZ3RoLFxuICAgIH07XG4gICAgdGhpcy5fYWdlbnQuc2VuZEV2ZW50KCdsb2FkaW5nRmluaXNoZWQnLCBldmVudCk7XG4gIH1cblxuICBsb2FkaW5nRmFpbGVkKGlkOiBudW1iZXIsIGVycm9yOiBzdHJpbmcpIHtcbiAgICBjb25zdCBldmVudDogTG9hZGluZ0ZhaWxlZEV2ZW50ID0ge1xuICAgICAgcmVxdWVzdElkOiBTdHJpbmcoaWQpLFxuICAgICAgdGltZXN0YW1wOiBKU0luc3BlY3Rvci5nZXRUaW1lc3RhbXAoKSxcbiAgICAgIHR5cGU6ICdPdGhlcicsXG4gICAgICBlcnJvclRleHQ6IGVycm9yLFxuICAgIH07XG4gICAgdGhpcy5fYWdlbnQuc2VuZEV2ZW50KCdsb2FkaW5nRmFpbGVkJywgZXZlbnQpO1xuICB9XG5cbiAgX2dldE1pbWVUeXBlKGhlYWRlcnM6IEhlYWRlcnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc1snQ29udGVudC1UeXBlJ10gfHwgJyc7XG4gICAgcmV0dXJuIGNvbnRlbnRUeXBlLnNwbGl0KCc7JylbMF07XG4gIH1cbn1cblxudHlwZSBFbmFibGVBcmdzID0ge1xuICBtYXhSZXNvdXJjZUJ1ZmZlclNpemU/OiBudW1iZXIsXG4gIG1heFRvdGFsQnVmZmVyU2l6ZT86IG51bWJlcixcbiAgLi4uXG59O1xuXG5jbGFzcyBOZXR3b3JrQWdlbnQgZXh0ZW5kcyBJbnNwZWN0b3JBZ2VudCB7XG4gIHN0YXRpYyBET01BSU46ICRURU1QT1JBUlkkc3RyaW5nPCdOZXR3b3JrJz4gPSAnTmV0d29yayc7XG5cbiAgX3NlbmRFdmVudDogRXZlbnRTZW5kZXI7XG4gIF9pbnRlcmNlcHRvcjogP0ludGVyY2VwdG9yO1xuXG4gIGVuYWJsZSh7bWF4UmVzb3VyY2VCdWZmZXJTaXplLCBtYXhUb3RhbEJ1ZmZlclNpemV9OiBFbmFibGVBcmdzKSB7XG4gICAgdGhpcy5faW50ZXJjZXB0b3IgPSBuZXcgSW50ZXJjZXB0b3IodGhpcyk7XG4gICAgWE1MSHR0cFJlcXVlc3Quc2V0SW50ZXJjZXB0b3IodGhpcy5faW50ZXJjZXB0b3IpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBYTUxIdHRwUmVxdWVzdC5zZXRJbnRlcmNlcHRvcihudWxsKTtcbiAgICB0aGlzLl9pbnRlcmNlcHRvciA9IG51bGw7XG4gIH1cblxuICBnZXRSZXNwb25zZUJvZHkoe3JlcXVlc3RJZH06IHtyZXF1ZXN0SWQ6IFJlcXVlc3RJZCwgLi4ufSk6IHtcbiAgICBib2R5OiA/c3RyaW5nLFxuICAgIGJhc2U2NEVuY29kZWQ6IGJvb2xlYW4sXG4gICAgLi4uXG4gIH0ge1xuICAgIHJldHVybiB7Ym9keTogdGhpcy5pbnRlcmNlcHRvcigpLmdldERhdGEocmVxdWVzdElkKSwgYmFzZTY0RW5jb2RlZDogZmFsc2V9O1xuICB9XG5cbiAgaW50ZXJjZXB0b3IoKTogSW50ZXJjZXB0b3Ige1xuICAgIGlmICh0aGlzLl9pbnRlcmNlcHRvcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVyY2VwdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcignX2ludGVyY2VwdG9yIGNhbiBub3QgYmUgbnVsbCcpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE5ldHdvcmtBZ2VudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB0eXBlIEV2ZW50U2VuZGVyID0gKG5hbWU6IHN0cmluZywgcGFyYW1zOiBtaXhlZCkgPT4gdm9pZDtcblxuY2xhc3MgSW5zcGVjdG9yQWdlbnQge1xuICBfZXZlbnRTZW5kZXI6IEV2ZW50U2VuZGVyO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50U2VuZGVyOiBFdmVudFNlbmRlcikge1xuICAgIHRoaXMuX2V2ZW50U2VuZGVyID0gZXZlbnRTZW5kZXI7XG4gIH1cblxuICBzZW5kRXZlbnQobmFtZTogc3RyaW5nLCBwYXJhbXM6IG1peGVkKSB7XG4gICAgdGhpcy5fZXZlbnRTZW5kZXIobmFtZSwgcGFyYW1zKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEluc3BlY3RvckFnZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAoX19ERVZfXykge1xuICBjb25zdCBEZXZTZXR0aW5ncyA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9EZXZTZXR0aW5ncycpO1xuXG4gIGlmICh0eXBlb2YgRGV2U2V0dGluZ3MucmVsb2FkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCB0aGUgcmVsb2FkKCkgaW1wbGVtZW50YXRpb24uJyk7XG4gIH1cblxuICAvLyBUaGlzIG5lZWRzIHRvIHJ1biBiZWZvcmUgdGhlIHJlbmRlcmVyIGluaXRpYWxpemVzLlxuICBjb25zdCBSZWFjdFJlZnJlc2hSdW50aW1lID0gcmVxdWlyZSgncmVhY3QtcmVmcmVzaC9ydW50aW1lJyk7XG4gIFJlYWN0UmVmcmVzaFJ1bnRpbWUuaW5qZWN0SW50b0dsb2JhbEhvb2soZ2xvYmFsKTtcblxuICBjb25zdCBSZWZyZXNoID0ge1xuICAgIHBlcmZvcm1GdWxsUmVmcmVzaChyZWFzb246IHN0cmluZykge1xuICAgICAgRGV2U2V0dGluZ3MucmVsb2FkKHJlYXNvbik7XG4gICAgfSxcblxuICAgIGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtOlxuICAgICAgUmVhY3RSZWZyZXNoUnVudGltZS5jcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSxcblxuICAgIGlzTGlrZWx5Q29tcG9uZW50VHlwZTogUmVhY3RSZWZyZXNoUnVudGltZS5pc0xpa2VseUNvbXBvbmVudFR5cGUsXG5cbiAgICBnZXRGYW1pbHlCeVR5cGU6IFJlYWN0UmVmcmVzaFJ1bnRpbWUuZ2V0RmFtaWx5QnlUeXBlLFxuXG4gICAgcmVnaXN0ZXI6IFJlYWN0UmVmcmVzaFJ1bnRpbWUucmVnaXN0ZXIsXG5cbiAgICBwZXJmb3JtUmVhY3RSZWZyZXNoKCkge1xuICAgICAgaWYgKFJlYWN0UmVmcmVzaFJ1bnRpbWUuaGFzVW5yZWNvdmVyYWJsZUVycm9ycygpKSB7XG4gICAgICAgIERldlNldHRpbmdzLnJlbG9hZCgnRmFzdCBSZWZyZXNoIC0gVW5yZWNvdmVyYWJsZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBSZWFjdFJlZnJlc2hSdW50aW1lLnBlcmZvcm1SZWFjdFJlZnJlc2goKTtcbiAgICAgIERldlNldHRpbmdzLm9uRmFzdFJlZnJlc2goKTtcbiAgICB9LFxuICB9O1xuXG4gIC8vIFRoZSBtZXRybyByZXF1aXJlIHBvbHlmaWxsIGNhbiBub3QgaGF2ZSBkZXBlbmRlbmNpZXMgKGFwcGxpZXMgZm9yIGFsbCBwb2x5ZmlsbHMpLlxuICAvLyBFeHBvc2UgYFJlZnJlc2hgIGJ5IGFzc2lnbmluZyBpdCB0byBnbG9iYWwgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gdGhlIHBvbHlmaWxsLlxuICBnbG9iYWxbKGdsb2JhbC5fX01FVFJPX0dMT0JBTF9QUkVGSVhfXyB8fCAnJykgKyAnX19SZWFjdFJlZnJlc2gnXSA9IFJlZnJlc2g7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtcmVmcmVzaC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt0aHJvdyBFcnJvcihcIlJlYWN0IFJlZnJlc2ggcnVudGltZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBwcm9kdWN0aW9uIGJ1bmRsZS5cIik7XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG5cbnZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7IC8vIFdlIG5ldmVyIHJlbW92ZSB0aGVzZSBhc3NvY2lhdGlvbnMuXG4vLyBJdCdzIE9LIHRvIHJlZmVyZW5jZSBmYW1pbGllcywgYnV0IHVzZSBXZWFrTWFwL1NldCBmb3IgdHlwZXMuXG5cbnZhciBhbGxGYW1pbGllc0J5SUQgPSBuZXcgTWFwKCk7XG52YXIgYWxsRmFtaWxpZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG52YXIgYWxsU2lnbmF0dXJlc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBXZWFrTWFwIGlzIHJlYWQgYnkgUmVhY3QsIHNvIHdlIG9ubHkgcHV0IGZhbWlsaWVzXG4vLyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBlZGl0ZWQgaGVyZS4gVGhpcyBrZWVwcyBjaGVja3MgZmFzdC5cbi8vICRGbG93SXNzdWVcblxudmFyIHVwZGF0ZWRGYW1pbGllc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBpcyBjbGVhcmVkIG9uIGV2ZXJ5IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsLlxuLy8gSXQgaXMgYW4gYXJyYXkgb2YgW0ZhbWlseSwgTmV4dFR5cGVdIHR1cGxlcy5cblxudmFyIHBlbmRpbmdVcGRhdGVzID0gW107IC8vIFRoaXMgaXMgaW5qZWN0ZWQgYnkgdGhlIHJlbmRlcmVyIHZpYSBEZXZUb29scyBnbG9iYWwgaG9vay5cblxudmFyIGhlbHBlcnNCeVJlbmRlcmVySUQgPSBuZXcgTWFwKCk7XG52YXIgaGVscGVyc0J5Um9vdCA9IG5ldyBNYXAoKTsgLy8gV2Uga2VlcCB0cmFjayBvZiBtb3VudGVkIHJvb3RzIHNvIHdlIGNhbiBzY2hlZHVsZSB1cGRhdGVzLlxuXG52YXIgbW91bnRlZFJvb3RzID0gbmV3IFNldCgpOyAvLyBJZiBhIHJvb3QgY2FwdHVyZXMgYW4gZXJyb3IsIHdlIHJlbWVtYmVyIGl0IHNvIHdlIGNhbiByZXRyeSBvbiBlZGl0LlxuXG52YXIgZmFpbGVkUm9vdHMgPSBuZXcgU2V0KCk7IC8vIEluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgV2Vha01hcCwgd2UgYWxzbyByZW1lbWJlciB0aGUgbGFzdCBlbGVtZW50IGZvciBldmVyeSByb290LlxuLy8gSXQgbmVlZHMgdG8gYmUgd2VhayBiZWNhdXNlIHdlIGRvIHRoaXMgZXZlbiBmb3Igcm9vdHMgdGhhdCBmYWlsZWQgdG8gbW91bnQuXG4vLyBJZiB0aGVyZSBpcyBubyBXZWFrTWFwLCB3ZSB3b24ndCBhdHRlbXB0IHRvIGRvIHJldHJ5aW5nLlxuLy8gJEZsb3dJc3N1ZVxuXG52YXIgcm9vdEVsZW1lbnRzID0gLy8gJEZsb3dJc3N1ZVxudHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBuZXcgV2Vha01hcCgpIDogbnVsbDtcbnZhciBpc1BlcmZvcm1pbmdSZWZyZXNoID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGNvbXB1dGVGdWxsS2V5KHNpZ25hdHVyZSkge1xuICBpZiAoc2lnbmF0dXJlLmZ1bGxLZXkgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlLmZ1bGxLZXk7XG4gIH1cblxuICB2YXIgZnVsbEtleSA9IHNpZ25hdHVyZS5vd25LZXk7XG4gIHZhciBob29rcztcblxuICB0cnkge1xuICAgIGhvb2tzID0gc2lnbmF0dXJlLmdldEN1c3RvbUhvb2tzKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpbiBhbiBlZGdlIGNhc2UsIGUuZy4gaWYgZXhwcmVzc2lvbiBsaWtlIEZvby51c2VTb21ldGhpbmdcbiAgICAvLyBkZXBlbmRzIG9uIEZvbyB3aGljaCBpcyBsYXppbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHJlbmRlcmluZy5cbiAgICAvLyBJbiB0aGF0IGNhc2UganVzdCBhc3N1bWUgd2UnbGwgaGF2ZSB0byByZW1vdW50LlxuICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgcmV0dXJuIGZ1bGxLZXk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGhvb2sgPSBob29rc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaG9vayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gU29tZXRoaW5nJ3Mgd3JvbmcuIEFzc3VtZSB3ZSBuZWVkIHRvIHJlbW91bnQuXG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgICByZXR1cm4gZnVsbEtleTtcbiAgICB9XG5cbiAgICB2YXIgbmVzdGVkSG9va1NpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KGhvb2spO1xuXG4gICAgaWYgKG5lc3RlZEhvb2tTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gTm8gc2lnbmF0dXJlIG1lYW5zIEhvb2sgd2Fzbid0IGluIHRoZSBzb3VyY2UgY29kZSwgZS5nLiBpbiBhIGxpYnJhcnkuXG4gICAgICAvLyBXZSdsbCBza2lwIGl0IGJlY2F1c2Ugd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBjaGFuZ2UgZHVyaW5nIHRoaXMgc2Vzc2lvbi5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXN0ZWRIb29rS2V5ID0gY29tcHV0ZUZ1bGxLZXkobmVzdGVkSG9va1NpZ25hdHVyZSk7XG5cbiAgICBpZiAobmVzdGVkSG9va1NpZ25hdHVyZS5mb3JjZVJlc2V0KSB7XG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVsbEtleSArPSAnXFxuLS0tXFxuJyArIG5lc3RlZEhvb2tLZXk7XG4gIH1cblxuICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gIHJldHVybiBmdWxsS2V5O1xufVxuXG5mdW5jdGlvbiBoYXZlRXF1YWxTaWduYXR1cmVzKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICB2YXIgcHJldlNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHByZXZUeXBlKTtcbiAgdmFyIG5leHRTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChuZXh0VHlwZSk7XG5cbiAgaWYgKHByZXZTaWduYXR1cmUgPT09IHVuZGVmaW5lZCAmJiBuZXh0U2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcmV2U2lnbmF0dXJlID09PSB1bmRlZmluZWQgfHwgbmV4dFNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbXB1dGVGdWxsS2V5KHByZXZTaWduYXR1cmUpICE9PSBjb21wdXRlRnVsbEtleShuZXh0U2lnbmF0dXJlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuZXh0U2lnbmF0dXJlLmZvcmNlUmVzZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNSZWFjdENsYXNzKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUucHJvdG90eXBlICYmIHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG59XG5cbmZ1bmN0aW9uIGNhblByZXNlcnZlU3RhdGVCZXR3ZWVuKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICBpZiAoaXNSZWFjdENsYXNzKHByZXZUeXBlKSB8fCBpc1JlYWN0Q2xhc3MobmV4dFR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGhhdmVFcXVhbFNpZ25hdHVyZXMocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRmFtaWx5KHR5cGUpIHtcbiAgLy8gT25seSBjaGVjayB1cGRhdGVkIHR5cGVzIHRvIGtlZXAgbG9va3VwcyBmYXN0LlxuICByZXR1cm4gdXBkYXRlZEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbn0gLy8gSWYgd2UgZGlkbid0IGNhcmUgYWJvdXQgSUUxMSwgd2UgY291bGQgdXNlIG5ldyBNYXAvU2V0KGl0ZXJhYmxlKS5cblxuXG5mdW5jdGlvbiBjbG9uZU1hcChtYXApIHtcbiAgdmFyIGNsb25lID0gbmV3IE1hcCgpO1xuICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIGNsb25lLnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gY2xvbmVTZXQoc2V0KSB7XG4gIHZhciBjbG9uZSA9IG5ldyBTZXQoKTtcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgY2xvbmUuYWRkKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn0gLy8gVGhpcyBpcyBhIHNhZmV0eSBtZWNoYW5pc20gdG8gcHJvdGVjdCBhZ2FpbnN0IHJvZ3VlIGdldHRlcnMgYW5kIFByb3hpZXMuXG5cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB0cnkge1xuICAgIHJldHVybiBvYmplY3RbcHJvcGVydHldO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJbnRlbnRpb25hbGx5IGlnbm9yZS5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1SZWFjdFJlZnJlc2goKSB7XG5cbiAgaWYgKHBlbmRpbmdVcGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGlzUGVyZm9ybWluZ1JlZnJlc2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHVwZGF0ZWRGYW1pbGllcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdXBkYXRlcyA9IHBlbmRpbmdVcGRhdGVzO1xuICAgIHBlbmRpbmdVcGRhdGVzID0gW107XG4gICAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gX3JlZlswXSxcbiAgICAgICAgICBuZXh0VHlwZSA9IF9yZWZbMV07XG4gICAgICAvLyBOb3cgdGhhdCB3ZSBnb3QgYSByZWFsIGVkaXQsIHdlIGNhbiBjcmVhdGUgYXNzb2NpYXRpb25zXG4gICAgICAvLyB0aGF0IHdpbGwgYmUgcmVhZCBieSB0aGUgUmVhY3QgcmVjb25jaWxlci5cbiAgICAgIHZhciBwcmV2VHlwZSA9IGZhbWlseS5jdXJyZW50O1xuICAgICAgdXBkYXRlZEZhbWlsaWVzQnlUeXBlLnNldChwcmV2VHlwZSwgZmFtaWx5KTtcbiAgICAgIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5zZXQobmV4dFR5cGUsIGZhbWlseSk7XG4gICAgICBmYW1pbHkuY3VycmVudCA9IG5leHRUeXBlOyAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGlzIHNob3VsZCBiZSBhIHJlLXJlbmRlciBvciBhIHJlLW1vdW50LlxuXG4gICAgICBpZiAoY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4ocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgICAgICB1cGRhdGVkRmFtaWxpZXMuYWRkKGZhbWlseSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFsZUZhbWlsaWVzLmFkZChmYW1pbHkpO1xuICAgICAgfVxuICAgIH0pOyAvLyBUT0RPOiByZW5hbWUgdGhlc2UgZmllbGRzIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwuXG5cbiAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgdXBkYXRlZEZhbWlsaWVzOiB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAvLyBGYW1pbGllcyB0aGF0IHdpbGwgcmUtcmVuZGVyIHByZXNlcnZpbmcgc3RhdGVcbiAgICAgIHN0YWxlRmFtaWxpZXM6IHN0YWxlRmFtaWxpZXMgLy8gRmFtaWxpZXMgdGhhdCB3aWxsIGJlIHJlbW91bnRlZFxuXG4gICAgfTtcbiAgICBoZWxwZXJzQnlSZW5kZXJlcklELmZvckVhY2goZnVuY3Rpb24gKGhlbHBlcnMpIHtcbiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJvb3RzLCBzZXQgdGhlIGhhbmRsZXIgb24gZmlyc3QgdXBkYXRlLlxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgaWYgKm5ldyogcm9vdHMgYXJlIG1vdW50ZWQsIHRoZXknbGwgdXNlIHRoZSByZXNvbHZlIGhhbmRsZXIuXG4gICAgICBoZWxwZXJzLnNldFJlZnJlc2hIYW5kbGVyKHJlc29sdmVGYW1pbHkpO1xuICAgIH0pO1xuICAgIHZhciBkaWRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDsgLy8gV2Ugc25hcHNob3QgbWFwcyBhbmQgc2V0cyB0aGF0IGFyZSBtdXRhdGVkIGR1cmluZyBjb21taXRzLlxuICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZXJlIGlzIGEgcmlzayB0aGV5IHdpbGwgYmUgbXV0YXRlZCB3aGlsZVxuICAgIC8vIHdlIGl0ZXJhdGUgb3ZlciB0aGVtLiBGb3IgZXhhbXBsZSwgdHJ5aW5nIHRvIHJlY292ZXIgYSBmYWlsZWQgcm9vdFxuICAgIC8vIG1heSBjYXVzZSBhbm90aGVyIHJvb3QgdG8gYmUgYWRkZWQgdG8gdGhlIGZhaWxlZCBsaXN0IC0tIGFuIGluZmluaXRlIGxvb3AuXG5cbiAgICB2YXIgZmFpbGVkUm9vdHNTbmFwc2hvdCA9IGNsb25lU2V0KGZhaWxlZFJvb3RzKTtcbiAgICB2YXIgbW91bnRlZFJvb3RzU25hcHNob3QgPSBjbG9uZVNldChtb3VudGVkUm9vdHMpO1xuICAgIHZhciBoZWxwZXJzQnlSb290U25hcHNob3QgPSBjbG9uZU1hcChoZWxwZXJzQnlSb290KTtcbiAgICBmYWlsZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZhaWxlZFJvb3RzLmhhcyhyb290KSkgey8vIE5vIGxvbmdlciBmYWlsZWQuXG4gICAgICB9XG5cbiAgICAgIGlmIChyb290RWxlbWVudHMgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50cy5oYXMocm9vdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudCA9IHJvb3RFbGVtZW50cy5nZXQocm9vdCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhlbHBlcnMuc2NoZWR1bGVSb290KHJvb3QsIGVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZGlkRXJyb3IpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZmlyc3RFcnJvciA9IGVycjtcbiAgICAgICAgfSAvLyBLZWVwIHRyeWluZyBvdGhlciByb290cy5cblxuICAgICAgfVxuICAgIH0pO1xuICAgIG1vdW50ZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1vdW50ZWRSb290cy5oYXMocm9vdCkpIHsvLyBObyBsb25nZXIgbW91bnRlZC5cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaGVscGVycy5zY2hlZHVsZVJlZnJlc2gocm9vdCwgdXBkYXRlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWRpZEVycm9yKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH0gLy8gS2VlcCB0cnlpbmcgb3RoZXIgcm9vdHMuXG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgdGhyb3cgZmlyc3RFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlO1xuICB9IGZpbmFsbHkge1xuICAgIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXIodHlwZSwgaWQpIHtcbiAge1xuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIGluIGFuIGVkZ2UgY2FzZSwgZS5nLiBpZiB3ZSByZWdpc3RlclxuICAgIC8vIHJldHVybiB2YWx1ZSBvZiBhIEhPQyBidXQgaXQgcmV0dXJucyBhIGNhY2hlZCBjb21wb25lbnQuXG4gICAgLy8gSWdub3JlIGFueXRoaW5nIGJ1dCB0aGUgZmlyc3QgcmVnaXN0cmF0aW9uIGZvciBlYWNoIHR5cGUuXG5cblxuICAgIGlmIChhbGxGYW1pbGllc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENyZWF0ZSBmYW1pbHkgb3IgcmVtZW1iZXIgdG8gdXBkYXRlIGl0LlxuICAgIC8vIE5vbmUgb2YgdGhpcyBib29ra2VlcGluZyBhZmZlY3RzIHJlY29uY2lsaWF0aW9uXG4gICAgLy8gdW50aWwgdGhlIGZpcnN0IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsIGFib3ZlLlxuXG5cbiAgICB2YXIgZmFtaWx5ID0gYWxsRmFtaWxpZXNCeUlELmdldChpZCk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZhbWlseSA9IHtcbiAgICAgICAgY3VycmVudDogdHlwZVxuICAgICAgfTtcbiAgICAgIGFsbEZhbWlsaWVzQnlJRC5zZXQoaWQsIGZhbWlseSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdVcGRhdGVzLnB1c2goW2ZhbWlseSwgdHlwZV0pO1xuICAgIH1cblxuICAgIGFsbEZhbWlsaWVzQnlUeXBlLnNldCh0eXBlLCBmYW1pbHkpOyAvLyBWaXNpdCBpbm5lciB0eXBlcyBiZWNhdXNlIHdlIG1pZ2h0IG5vdCBoYXZlIHJlZ2lzdGVyZWQgdGhlbS5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgcmVnaXN0ZXIodHlwZS5yZW5kZXIsIGlkICsgJyRyZW5kZXInKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICByZWdpc3Rlcih0eXBlLnR5cGUsIGlkICsgJyR0eXBlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRTaWduYXR1cmUodHlwZSwga2V5KSB7XG4gIHZhciBmb3JjZVJlc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGdldEN1c3RvbUhvb2tzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG5cbiAge1xuICAgIGlmICghYWxsU2lnbmF0dXJlc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIGFsbFNpZ25hdHVyZXNCeVR5cGUuc2V0KHR5cGUsIHtcbiAgICAgICAgZm9yY2VSZXNldDogZm9yY2VSZXNldCxcbiAgICAgICAgb3duS2V5OiBrZXksXG4gICAgICAgIGZ1bGxLZXk6IG51bGwsXG4gICAgICAgIGdldEN1c3RvbUhvb2tzOiBnZXRDdXN0b21Ib29rcyB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFZpc2l0IGlubmVyIHR5cGVzIGJlY2F1c2Ugd2UgbWlnaHQgbm90IGhhdmUgc2lnbmVkIHRoZW0uXG5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUucmVuZGVyLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZS50eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBsYXppbHkgY2FsbGVkIGR1cmluZyBmaXJzdCByZW5kZXIgZm9yIGEgdHlwZS5cbi8vIEl0IGNhcHR1cmVzIEhvb2sgbGlzdCBhdCB0aGF0IHRpbWUgc28gaW5saW5lIHJlcXVpcmVzIGRvbid0IGJyZWFrIGNvbXBhcmlzb25zLlxuXG5mdW5jdGlvbiBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUodHlwZSkge1xuICB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHR5cGUpO1xuXG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21wdXRlRnVsbEtleShzaWduYXR1cmUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmFtaWx5QnlJRChpZCkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlJRC5nZXQoaWQpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGYW1pbHlCeVR5cGUodHlwZSkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyhmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFmZmVjdGVkSW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIG1vdW50ZWRSb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0YW5jZXNGb3JSb290ID0gaGVscGVycy5maW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2gocm9vdCwgZmFtaWxpZXMpO1xuICAgICAgaW5zdGFuY2VzRm9yUm9vdC5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGFmZmVjdGVkSW5zdGFuY2VzLmFkZChpbnN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhZmZlY3RlZEluc3RhbmNlcztcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0SW50b0dsb2JhbEhvb2soZ2xvYmFsT2JqZWN0KSB7XG4gIHtcbiAgICAvLyBGb3IgUmVhY3QgTmF0aXZlLCB0aGUgZ2xvYmFsIGhvb2sgd2lsbCBiZSBzZXQgdXAgYnkgcmVxdWlyZSgncmVhY3QtZGV2dG9vbHMtY29yZScpLlxuICAgIC8vIFRoYXQgY29kZSB3aWxsIHJ1biBiZWZvcmUgdXMuIFNvIHdlIG5lZWQgdG8gbW9ua2V5cGF0Y2ggZnVuY3Rpb25zIG9uIGV4aXN0aW5nIGhvb2suXG4gICAgLy8gRm9yIFJlYWN0IFdlYiwgdGhlIGdsb2JhbCBob29rIHdpbGwgYmUgc2V0IHVwIGJ5IHRoZSBleHRlbnNpb24uXG4gICAgLy8gVGhpcyB3aWxsIGFsc28gcnVuIGJlZm9yZSB1cy5cbiAgICB2YXIgaG9vayA9IGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgICBpZiAoaG9vayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBIb3dldmVyLCBpZiB0aGVyZSBpcyBubyBEZXZUb29scyBleHRlbnNpb24sIHdlJ2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBnbG9iYWwgaG9vayBvdXJzZWx2ZXMuXG4gICAgICAvLyBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGl0J3MgaW1wb3J0YW50IHRoYXQgcmVuZGVyZXIgY29kZSBydW5zICphZnRlciogdGhpcyBtZXRob2QgY2FsbC5cbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlbmRlcmVyIHdpbGwgdGhpbmsgdGhhdCB0aGVyZSBpcyBubyBnbG9iYWwgaG9vaywgYW5kIHdvbid0IGRvIHRoZSBpbmplY3Rpb24uXG4gICAgICB2YXIgbmV4dElEID0gMDtcbiAgICAgIGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPSBob29rID0ge1xuICAgICAgICByZW5kZXJlcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgc3VwcG9ydHNGaWJlcjogdHJ1ZSxcbiAgICAgICAgaW5qZWN0OiBmdW5jdGlvbiAoaW5qZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dElEKys7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2NoZWR1bGVGaWJlclJvb3Q6IGZ1bmN0aW9uIChpZCwgcm9vdCwgY2hpbGRyZW4pIHt9LFxuICAgICAgICBvbkNvbW1pdEZpYmVyUm9vdDogZnVuY3Rpb24gKGlkLCByb290LCBtYXliZVByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKSB7fSxcbiAgICAgICAgb25Db21taXRGaWJlclVubW91bnQ6IGZ1bmN0aW9uICgpIHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1NvbWV0aGluZyBoYXMgc2hpbW1lZCB0aGUgUmVhY3QgRGV2VG9vbHMgZ2xvYmFsIGhvb2sgKF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykuICcgKyAnRmFzdCBSZWZyZXNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBzaGltIGFuZCB3aWxsIGJlIGRpc2FibGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSGVyZSwgd2UganVzdCB3YW50IHRvIGdldCBhIHJlZmVyZW5jZSB0byBzY2hlZHVsZVJlZnJlc2guXG5cblxuICAgIHZhciBvbGRJbmplY3QgPSBob29rLmluamVjdDtcblxuICAgIGhvb2suaW5qZWN0ID0gZnVuY3Rpb24gKGluamVjdGVkKSB7XG4gICAgICB2YXIgaWQgPSBvbGRJbmplY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKHR5cGVvZiBpbmplY3RlZC5zY2hlZHVsZVJlZnJlc2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluamVjdGVkLnNldFJlZnJlc2hIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBSZWFjdCBSZWZyZXNoLlxuICAgICAgICBoZWxwZXJzQnlSZW5kZXJlcklELnNldChpZCwgaW5qZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaWQ7XG4gICAgfTsgLy8gRG8gdGhlIHNhbWUgZm9yIGFueSBhbHJlYWR5IGluamVjdGVkIHJvb3RzLlxuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIFJlYWN0RE9NIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNzYyNlxuXG5cbiAgICBob29rLnJlbmRlcmVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbmplY3RlZCwgaWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWQuc2NoZWR1bGVSZWZyZXNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbmplY3RlZC5zZXRSZWZyZXNoSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUaGlzIHZlcnNpb24gc3VwcG9ydHMgUmVhY3QgUmVmcmVzaC5cbiAgICAgICAgaGVscGVyc0J5UmVuZGVyZXJJRC5zZXQoaWQsIGluamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gV2UgYWxzbyB3YW50IHRvIHRyYWNrIGN1cnJlbnRseSBtb3VudGVkIHJvb3RzLlxuXG4gICAgdmFyIG9sZE9uQ29tbWl0RmliZXJSb290ID0gaG9vay5vbkNvbW1pdEZpYmVyUm9vdDtcblxuICAgIHZhciBvbGRPblNjaGVkdWxlRmliZXJSb290ID0gaG9vay5vblNjaGVkdWxlRmliZXJSb290IHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgaG9vay5vblNjaGVkdWxlRmliZXJSb290ID0gZnVuY3Rpb24gKGlkLCByb290LCBjaGlsZHJlbikge1xuICAgICAgaWYgKCFpc1BlcmZvcm1pbmdSZWZyZXNoKSB7XG4gICAgICAgIC8vIElmIGl0IHdhcyBpbnRlbnRpb25hbGx5IHNjaGVkdWxlZCwgZG9uJ3QgYXR0ZW1wdCB0byByZXN0b3JlLlxuICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIGludGVudGlvbmFsbHkgc2NoZWR1bGVkIHVubW91bnRzLlxuICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgaWYgKHJvb3RFbGVtZW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJvb3RFbGVtZW50cy5zZXQocm9vdCwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvbGRPblNjaGVkdWxlRmliZXJSb290LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcblxuICAgIGhvb2sub25Db21taXRGaWJlclJvb3QgPSBmdW5jdGlvbiAoaWQsIHJvb3QsIG1heWJlUHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5UmVuZGVyZXJJRC5nZXQoaWQpO1xuXG4gICAgICBpZiAoaGVscGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlbHBlcnNCeVJvb3Quc2V0KHJvb3QsIGhlbHBlcnMpO1xuICAgICAgICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudDtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlOyAvLyBXZSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgcm9vdCBoYXMganVzdCAodW4pbW91bnRlZC5cbiAgICAgICAgLy8gVGhpcyBsb2dpYyBpcyBjb3B5LXBhc3RlZCBmcm9tIHNpbWlsYXIgbG9naWMgaW4gdGhlIERldlRvb2xzIGJhY2tlbmQuXG4gICAgICAgIC8vIElmIHRoaXMgYnJlYWtzIHdpdGggc29tZSByZWZhY3RvcmluZywgeW91J2xsIHdhbnQgdG8gdXBkYXRlIERldlRvb2xzIHRvby5cblxuICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHdhc01vdW50ZWQgPSBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbCAmJiBtb3VudGVkUm9vdHMuaGFzKHJvb3QpO1xuICAgICAgICAgIHZhciBpc01vdW50ZWQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZWxlbWVudCAhPSBudWxsO1xuXG4gICAgICAgICAgaWYgKCF3YXNNb3VudGVkICYmIGlzTW91bnRlZCkge1xuICAgICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNNb3VudGVkICYmIGlzTW91bnRlZCkgOyBlbHNlIGlmICh3YXNNb3VudGVkICYmICFpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIC8vIFVubW91bnQgYW4gZXhpc3Rpbmcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgICAgICAvLyBXZSdsbCByZW1vdW50IGl0IG9uIGZ1dHVyZSBlZGl0cy5cbiAgICAgICAgICAgICAgZmFpbGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaGVscGVyc0J5Um9vdC5kZWxldGUocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghd2FzTW91bnRlZCAmJiAhaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtb3VudCBpdCBvbiBmdXR1cmUgZWRpdHMuXG4gICAgICAgICAgICAgIGZhaWxlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICBtb3VudGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFsd2F5cyBjYWxsIHRoZSBkZWNvcmF0ZWQgRGV2VG9vbHMgaG9vay5cblxuXG4gICAgICByZXR1cm4gb2xkT25Db21taXRGaWJlclJvb3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBoYXNVbnJlY292ZXJhYmxlRXJyb3JzKCkge1xuICAvLyBUT0RPOiBkZWxldGUgdGhpcyBhZnRlciByZW1vdmluZyBkZXBlbmRlbmN5IGluIFJOLlxuICByZXR1cm4gZmFsc2U7XG59IC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcuXG5cbmZ1bmN0aW9uIF9nZXRNb3VudGVkUm9vdENvdW50KCkge1xuICB7XG4gICAgcmV0dXJuIG1vdW50ZWRSb290cy5zaXplO1xuICB9XG59IC8vIFRoaXMgaXMgYSB3cmFwcGVyIG92ZXIgbW9yZSBwcmltaXRpdmUgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHNpZ25hdHVyZS5cbi8vIFNpZ25hdHVyZXMgbGV0IHVzIGRlY2lkZSB3aGV0aGVyIHRoZSBIb29rIG9yZGVyIGhhcyBjaGFuZ2VkIG9uIHJlZnJlc2guXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgdHJhbnNmb3JtIHRhcmdldCwgZS5nLjpcbi8vIHZhciBfcyA9IGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtKClcbi8vXG4vLyBmdW5jdGlvbiBIZWxsbygpIHtcbi8vICAgY29uc3QgW2Zvbywgc2V0Rm9vXSA9IHVzZVN0YXRlKDApO1xuLy8gICBjb25zdCB2YWx1ZSA9IHVzZUN1c3RvbUhvb2soKTtcbi8vICAgX3MoKTsgLyogQ2FsbCB3aXRob3V0IGFyZ3VtZW50cyB0cmlnZ2VycyBjb2xsZWN0aW5nIHRoZSBjdXN0b20gSG9vayBsaXN0LlxuLy8gICAgICAgICAgKiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyB0aGUgbW9kdWxlIGV2YWx1YXRpb24gYmVjYXVzZSB3ZVxuLy8gICAgICAgICAgKiBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgbW9kdWxlIG9yZGVyIHdpdGggaW5saW5lIHJlcXVpcmVzLlxuLy8gICAgICAgICAgKiBOZXh0IGNhbGxzIGFyZSBub29wcy4gKi9cbi8vICAgcmV0dXJuIDxoMT5IaTwvaDE+O1xuLy8gfVxuLy9cbi8vIC8qIENhbGwgd2l0aCBhcmd1bWVudHMgYXR0YWNoZXMgdGhlIHNpZ25hdHVyZSB0byB0aGUgdHlwZTogKi9cbi8vIF9zKFxuLy8gICBIZWxsbyxcbi8vICAgJ3VzZVN0YXRle1tmb28sIHNldEZvb119KDApJyxcbi8vICAgKCkgPT4gW3VzZUN1c3RvbUhvb2tdLCAvKiBMYXp5IHRvIGF2b2lkIHRyaWdnZXJpbmcgaW5saW5lIHJlcXVpcmVzICovXG4vLyApO1xuXG5mdW5jdGlvbiBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSgpIHtcbiAge1xuICAgIHZhciBzYXZlZFR5cGU7XG4gICAgdmFyIGhhc0N1c3RvbUhvb2tzO1xuICAgIHZhciBkaWRDb2xsZWN0SG9va3MgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5pdGlhbCBwaGFzZSB0aGF0IGFzc29jaWF0ZXMgc2lnbmF0dXJlc1xuICAgICAgICAvLyB3aXRoIHRoZSBmdW5jdGlvbnMuIE5vdGUgdGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIC8vIGluIEhPQyBjaGFpbnMgbGlrZSBfcyhob2MxKF9zKGhvYzIoX3MoYWN0dWFsRnVuY3Rpb24pKSkpKS5cbiAgICAgICAgaWYgKCFzYXZlZFR5cGUpIHtcbiAgICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5uZXJtb3N0IGNhbGwsIHNvIHRoaXMgaXMgdGhlIGFjdHVhbCB0eXBlLlxuICAgICAgICAgIHNhdmVkVHlwZSA9IHR5cGU7XG4gICAgICAgICAgaGFzQ3VzdG9tSG9va3MgPSB0eXBlb2YgZ2V0Q3VzdG9tSG9va3MgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIH0gLy8gU2V0IHRoZSBzaWduYXR1cmUgZm9yIGFsbCB0eXBlcyAoZXZlbiB3cmFwcGVycyEpIGluIGNhc2VcbiAgICAgICAgLy8gdGhleSBoYXZlIG5vIHNpZ25hdHVyZXMgb2YgdGhlaXIgb3duLiBUaGlzIGlzIHRvIHByZXZlbnRcbiAgICAgICAgLy8gcHJvYmxlbXMgbGlrZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIwNDE3LlxuXG5cbiAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCAmJiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UncmUgaW4gdGhlIF9zKCkgY2FsbCB3aXRob3V0IGFyZ3VtZW50cywgd2hpY2ggbWVhbnNcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdGltZSB0byBjb2xsZWN0IGN1c3RvbSBIb29rIHNpZ25hdHVyZXMuXG4gICAgICAgIC8vIE9ubHkgZG8gdGhpcyBvbmNlLiBUaGlzIHBhdGggaXMgaG90IGFuZCBydW5zICppbnNpZGUqIGV2ZXJ5IHJlbmRlciFcbiAgICAgICAgaWYgKCFkaWRDb2xsZWN0SG9va3MgJiYgaGFzQ3VzdG9tSG9va3MpIHtcbiAgICAgICAgICBkaWRDb2xsZWN0SG9va3MgPSB0cnVlO1xuICAgICAgICAgIGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZShzYXZlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gaXNMaWtlbHlDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAge1xuICAgIHN3aXRjaCAodHlwZW9mIHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIEZpcnN0LCBkZWFsIHdpdGggY2xhc3Nlcy5cbiAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gUmVhY3QgY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3duTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0eXBlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChvd25OYW1lcy5sZW5ndGggPiAxIHx8IG93bk5hbWVzWzBdICE9PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuXG5cbiAgICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZS5fX3Byb3RvX18gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgLy8gSXQgaGFzIGEgc3VwZXJjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSAvLyBQYXNzIHRocm91Z2guXG4gICAgICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgYSByZWd1bGFyIGZ1bmN0aW9uIHdpdGggZW1wdHkgcHJvdG90eXBlLlxuXG4gICAgICAgICAgfSAvLyBGb3IgcGxhaW4gZnVuY3Rpb25zIGFuZCBhcnJvd3MsIHVzZSBuYW1lIGFzIGEgaGV1cmlzdGljLlxuXG5cbiAgICAgICAgICB2YXIgbmFtZSA9IHR5cGUubmFtZSB8fCB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgL15bQS1aXS8udGVzdChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIC8vIERlZmluaXRlbHkgUmVhY3QgY29tcG9uZW50cy5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9nZXRNb3VudGVkUm9vdENvdW50ID0gX2dldE1vdW50ZWRSb290Q291bnQ7XG5leHBvcnRzLmNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSA9IGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZTtcbmV4cG9ydHMuY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0gPSBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybTtcbmV4cG9ydHMuZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyA9IGZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXM7XG5leHBvcnRzLmdldEZhbWlseUJ5SUQgPSBnZXRGYW1pbHlCeUlEO1xuZXhwb3J0cy5nZXRGYW1pbHlCeVR5cGUgPSBnZXRGYW1pbHlCeVR5cGU7XG5leHBvcnRzLmhhc1VucmVjb3ZlcmFibGVFcnJvcnMgPSBoYXNVbnJlY292ZXJhYmxlRXJyb3JzO1xuZXhwb3J0cy5pbmplY3RJbnRvR2xvYmFsSG9vayA9IGluamVjdEludG9HbG9iYWxIb29rO1xuZXhwb3J0cy5pc0xpa2VseUNvbXBvbmVudFR5cGUgPSBpc0xpa2VseUNvbXBvbmVudFR5cGU7XG5leHBvcnRzLnBlcmZvcm1SZWFjdFJlZnJlc2ggPSBwZXJmb3JtUmVhY3RSZWZyZXNoO1xuZXhwb3J0cy5yZWdpc3RlciA9IHJlZ2lzdGVyO1xuZXhwb3J0cy5zZXRTaWduYXR1cmUgPSBzZXRTaWduYXR1cmU7XG4gIH0pKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbmltcG9ydCBOZXR3b3JraW5nIGZyb20gJy4uLy4uL05ldHdvcmsvUkNUTmV0d29ya2luZyc7XG5pbXBvcnQgSE1SQ2xpZW50IGZyb20gJy4uLy4uL1V0aWxpdGllcy9ITVJDbGllbnQnO1xuaW1wb3J0IExvYWRpbmdWaWV3IGZyb20gJy4uLy4uL1V0aWxpdGllcy9Mb2FkaW5nVmlldyc7XG5pbXBvcnQgZ2V0RGV2U2VydmVyIGZyb20gJy4vZ2V0RGV2U2VydmVyJztcblxuZGVjbGFyZSB2YXIgZ2xvYmFsOiB7Z2xvYmFsRXZhbFdpdGhTb3VyY2VVcmw/OiAoc3RyaW5nLCBzdHJpbmcpID0+IG1peGVkLCAuLi59O1xuXG5sZXQgcGVuZGluZ1JlcXVlc3RzID0gMDtcblxuY29uc3QgY2FjaGVkUHJvbWlzZXNCeVVybCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG5mdW5jdGlvbiBhc3luY1JlcXVlc3QoXG4gIHVybDogc3RyaW5nLFxuKTogUHJvbWlzZTx7Ym9keTogc3RyaW5nLCBoZWFkZXJzOiB7W3N0cmluZ106IHN0cmluZ319PiB7XG4gIGxldCBpZCA9IG51bGw7XG4gIGxldCByZXNwb25zZVRleHQgPSBudWxsO1xuICBsZXQgaGVhZGVycyA9IG51bGw7XG4gIGxldCBkYXRhTGlzdGVuZXI7XG4gIGxldCBjb21wbGV0ZUxpc3RlbmVyO1xuICBsZXQgcmVzcG9uc2VMaXN0ZW5lcjtcbiAgbGV0IGluY3JlbWVudGFsRGF0YUxpc3RlbmVyO1xuICByZXR1cm4gbmV3IFByb21pc2U8e2JvZHk6IHN0cmluZywgaGVhZGVyczoge1tzdHJpbmddOiBzdHJpbmd9fT4oXG4gICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZGF0YUxpc3RlbmVyID0gTmV0d29ya2luZy5hZGRMaXN0ZW5lcihcbiAgICAgICAgJ2RpZFJlY2VpdmVOZXR3b3JrRGF0YScsXG4gICAgICAgIChbcmVxdWVzdElkLCByZXNwb25zZV0pID0+IHtcbiAgICAgICAgICBpZiAocmVxdWVzdElkID09PSBpZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VUZXh0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGluY3JlbWVudGFsRGF0YUxpc3RlbmVyID0gTmV0d29ya2luZy5hZGRMaXN0ZW5lcihcbiAgICAgICAgJ2RpZFJlY2VpdmVOZXR3b3JrSW5jcmVtZW50YWxEYXRhJyxcbiAgICAgICAgKFtyZXF1ZXN0SWQsIGRhdGFdKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcXVlc3RJZCA9PT0gaWQpIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVRleHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXNwb25zZVRleHQgKz0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHJlc3BvbnNlTGlzdGVuZXIgPSBOZXR3b3JraW5nLmFkZExpc3RlbmVyKFxuICAgICAgICAnZGlkUmVjZWl2ZU5ldHdvcmtSZXNwb25zZScsXG4gICAgICAgIChbcmVxdWVzdElkLCBzdGF0dXMsIHJlc3BvbnNlSGVhZGVyc10pID0+IHtcbiAgICAgICAgICBpZiAocmVxdWVzdElkID09PSBpZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgY29tcGxldGVMaXN0ZW5lciA9IE5ldHdvcmtpbmcuYWRkTGlzdGVuZXIoXG4gICAgICAgICdkaWRDb21wbGV0ZU5ldHdvcmtSZXNwb25zZScsXG4gICAgICAgIChbcmVxdWVzdElkLCBlcnJvcl0pID0+IHtcbiAgICAgICAgICBpZiAocmVxdWVzdElkID09PSBpZCkge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICAgIHJlc29sdmUoe2JvZHk6IHJlc3BvbnNlVGV4dCwgaGVhZGVyc30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBOZXR3b3JraW5nLnNlbmRSZXF1ZXN0KFxuICAgICAgICAnR0VUJyxcbiAgICAgICAgJ2FzeW5jUmVxdWVzdCcsXG4gICAgICAgIHVybCxcbiAgICAgICAge30sXG4gICAgICAgICcnLFxuICAgICAgICAndGV4dCcsXG4gICAgICAgIHRydWUsXG4gICAgICAgIDAsXG4gICAgICAgIHJlcXVlc3RJZCA9PiB7XG4gICAgICAgICAgaWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH0sXG4gICkuZmluYWxseSgoKSA9PiB7XG4gICAgZGF0YUxpc3RlbmVyPy5yZW1vdmUoKTtcbiAgICBjb21wbGV0ZUxpc3RlbmVyPy5yZW1vdmUoKTtcbiAgICByZXNwb25zZUxpc3RlbmVyPy5yZW1vdmUoKTtcbiAgICBpbmNyZW1lbnRhbERhdGFMaXN0ZW5lcj8ucmVtb3ZlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybEZvckJ1bmRsZShidW5kbGVQYXRoQW5kUXVlcnk6IHN0cmluZykge1xuICBjb25zdCB7dXJsOiBzZXJ2ZXJVcmx9ID0gZ2V0RGV2U2VydmVyKCk7XG4gIHJldHVybiAoXG4gICAgc2VydmVyVXJsLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYnVuZGxlUGF0aEFuZFF1ZXJ5LnJlcGxhY2UoL15cXC8rLywgJycpXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJ1bmRsZVBhdGhBbmRRdWVyeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlcXVlc3RVcmwgPSBidWlsZFVybEZvckJ1bmRsZShidW5kbGVQYXRoQW5kUXVlcnkpO1xuICBsZXQgbG9hZFByb21pc2UgPSBjYWNoZWRQcm9taXNlc0J5VXJsLmdldChyZXF1ZXN0VXJsKTtcblxuICBpZiAobG9hZFByb21pc2UpIHtcbiAgICByZXR1cm4gbG9hZFByb21pc2U7XG4gIH1cbiAgTG9hZGluZ1ZpZXcuc2hvd01lc3NhZ2UoJ0Rvd25sb2FkaW5nLi4uJywgJ2xvYWQnKTtcbiAgKytwZW5kaW5nUmVxdWVzdHM7XG5cbiAgbG9hZFByb21pc2UgPSBhc3luY1JlcXVlc3QocmVxdWVzdFVybClcbiAgICAudGhlbjx2b2lkPigoe2JvZHksIGhlYWRlcnN9KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddICE9IG51bGwgJiZcbiAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10uaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID49IDBcbiAgICAgICkge1xuICAgICAgICAvLyBFcnJvcnMgYXJlIHJldHVybmVkIGFzIEpTT04uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBKU09OLnBhcnNlKGJvZHkpLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgIGBVbmtub3duIGVycm9yIGZldGNoaW5nICcke2J1bmRsZVBhdGhBbmRRdWVyeX0nYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgSE1SQ2xpZW50LnJlZ2lzdGVyQnVuZGxlKHJlcXVlc3RVcmwpO1xuXG4gICAgICAvLyBTb21lIGVuZ2luZXMgZG8gbm90IHN1cHBvcnQgYHNvdXJjZVVSTGAgYXMgYSBjb21tZW50LiBXZSBleHBvc2UgYVxuICAgICAgLy8gYGdsb2JhbEV2YWxXaXRoU291cmNlVXJsYCBmdW5jdGlvbiB0byBoYW5kbGUgdXBkYXRlcyBpbiB0aGF0IGNhc2UuXG4gICAgICBpZiAoZ2xvYmFsLmdsb2JhbEV2YWxXaXRoU291cmNlVXJsKSB7XG4gICAgICAgIGdsb2JhbC5nbG9iYWxFdmFsV2l0aFNvdXJjZVVybChib2R5LCByZXF1ZXN0VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1ldmFsXG4gICAgICAgIGV2YWwoYm9keSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2g8dm9pZD4oZSA9PiB7XG4gICAgICBjYWNoZWRQcm9taXNlc0J5VXJsLmRlbGV0ZShyZXF1ZXN0VXJsKTtcbiAgICAgIHRocm93IGU7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAoIS0tcGVuZGluZ1JlcXVlc3RzKSB7XG4gICAgICAgIExvYWRpbmdWaWV3LmhpZGUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjYWNoZWRQcm9taXNlc0J5VXJsLnNldChyZXF1ZXN0VXJsLCBsb2FkUHJvbWlzZSk7XG4gIHJldHVybiBsb2FkUHJvbWlzZTtcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Um9vdFRhZ30gZnJvbSAnLi4vVHlwZXMvUm9vdFRhZ1R5cGVzJztcbmltcG9ydCB0eXBlIHtJUGVyZm9ybWFuY2VMb2dnZXJ9IGZyb20gJy4uL1V0aWxpdGllcy9jcmVhdGVQZXJmb3JtYW5jZUxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7RGlzcGxheU1vZGVUeXBlfSBmcm9tICcuL0Rpc3BsYXlNb2RlJztcblxuaW1wb3J0IEJhdGNoZWRCcmlkZ2UgZnJvbSAnLi4vQmF0Y2hlZEJyaWRnZS9CYXRjaGVkQnJpZGdlJztcbmltcG9ydCBCdWdSZXBvcnRpbmcgZnJvbSAnLi4vQnVnUmVwb3J0aW5nL0J1Z1JlcG9ydGluZyc7XG5pbXBvcnQgY3JlYXRlUGVyZm9ybWFuY2VMb2dnZXIgZnJvbSAnLi4vVXRpbGl0aWVzL2NyZWF0ZVBlcmZvcm1hbmNlTG9nZ2VyJztcbmltcG9ydCBpbmZvTG9nIGZyb20gJy4uL1V0aWxpdGllcy9pbmZvTG9nJztcbmltcG9ydCBTY2VuZVRyYWNrZXIgZnJvbSAnLi4vVXRpbGl0aWVzL1NjZW5lVHJhY2tlcic7XG5pbXBvcnQge2NvZXJjZURpc3BsYXlNb2RlfSBmcm9tICcuL0Rpc3BsYXlNb2RlJztcbmltcG9ydCBIZWFkbGVzc0pzVGFza0Vycm9yIGZyb20gJy4vSGVhZGxlc3NKc1Rhc2tFcnJvcic7XG5pbXBvcnQgTmF0aXZlSGVhZGxlc3NKc1Rhc2tTdXBwb3J0IGZyb20gJy4vTmF0aXZlSGVhZGxlc3NKc1Rhc2tTdXBwb3J0JztcbmltcG9ydCByZW5kZXJBcHBsaWNhdGlvbiBmcm9tICcuL3JlbmRlckFwcGxpY2F0aW9uJztcbmltcG9ydCB7dW5tb3VudENvbXBvbmVudEF0Tm9kZUFuZFJlbW92ZUNvbnRhaW5lcn0gZnJvbSAnLi9SZW5kZXJlclByb3h5JztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxudHlwZSBUYXNrID0gKHRhc2tEYXRhOiBhbnkpID0+IFByb21pc2U8dm9pZD47XG5leHBvcnQgdHlwZSBUYXNrUHJvdmlkZXIgPSAoKSA9PiBUYXNrO1xudHlwZSBUYXNrQ2FuY2VsbGVyID0gKCkgPT4gdm9pZDtcbnR5cGUgVGFza0NhbmNlbFByb3ZpZGVyID0gKCkgPT4gVGFza0NhbmNlbGxlcjtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50UHJvdmlkZXIgPSAoKSA9PiBSZWFjdCRDb21wb25lbnRUeXBlPGFueT47XG5leHBvcnQgdHlwZSBDb21wb25lbnRQcm92aWRlckluc3RydW1lbnRhdGlvbkhvb2sgPSAoXG4gIGNvbXBvbmVudF86IENvbXBvbmVudFByb3ZpZGVyLFxuICBzY29wZWRQZXJmb3JtYW5jZUxvZ2dlcjogSVBlcmZvcm1hbmNlTG9nZ2VyLFxuKSA9PiBSZWFjdCRDb21wb25lbnRUeXBlPGFueT47XG5leHBvcnQgdHlwZSBBcHBDb25maWcgPSB7XG4gIGFwcEtleTogc3RyaW5nLFxuICBjb21wb25lbnQ/OiBDb21wb25lbnRQcm92aWRlcixcbiAgcnVuPzogUnVubmFibGUsXG4gIHNlY3Rpb24/OiBib29sZWFuLFxuICAuLi5cbn07XG50eXBlIEFwcFBhcmFtZXRlcnMgPSB7XG4gIGluaXRpYWxQcm9wczogJFJlYWRPbmx5PHtbc3RyaW5nXTogbWl4ZWQsIC4uLn0+LFxuICByb290VGFnOiBSb290VGFnLFxuICBmYWJyaWM/OiBib29sZWFuLFxuICBjb25jdXJyZW50Um9vdD86IGJvb2xlYW4sXG59O1xuZXhwb3J0IHR5cGUgUnVubmFibGUgPSAoXG4gIGFwcFBhcmFtZXRlcnM6IEFwcFBhcmFtZXRlcnMsXG4gIGRpc3BsYXlNb2RlOiBEaXNwbGF5TW9kZVR5cGUsXG4pID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBSdW5uYWJsZXMgPSB7W2FwcEtleTogc3RyaW5nXTogUnVubmFibGV9O1xuZXhwb3J0IHR5cGUgUmVnaXN0cnkgPSB7XG4gIHNlY3Rpb25zOiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICBydW5uYWJsZXM6IFJ1bm5hYmxlcyxcbiAgLi4uXG59O1xuZXhwb3J0IHR5cGUgV3JhcHBlckNvbXBvbmVudFByb3ZpZGVyID0gKFxuICBhcHBQYXJhbWV0ZXJzOiBPYmplY3QsXG4pID0+IFJlYWN0JENvbXBvbmVudFR5cGU8YW55PjtcblxuY29uc3QgcnVubmFibGVzOiBSdW5uYWJsZXMgPSB7fTtcbmxldCBydW5Db3VudCA9IDE7XG5jb25zdCBzZWN0aW9uczogUnVubmFibGVzID0ge307XG5jb25zdCB0YXNrUHJvdmlkZXJzOiBNYXA8c3RyaW5nLCBUYXNrUHJvdmlkZXI+ID0gbmV3IE1hcCgpO1xuY29uc3QgdGFza0NhbmNlbFByb3ZpZGVyczogTWFwPHN0cmluZywgVGFza0NhbmNlbFByb3ZpZGVyPiA9IG5ldyBNYXAoKTtcbmxldCBjb21wb25lbnRQcm92aWRlckluc3RydW1lbnRhdGlvbkhvb2s6IENvbXBvbmVudFByb3ZpZGVySW5zdHJ1bWVudGF0aW9uSG9vayA9XG4gIChjb21wb25lbnQ6IENvbXBvbmVudFByb3ZpZGVyKSA9PiBjb21wb25lbnQoKTtcblxubGV0IHdyYXBwZXJDb21wb25lbnRQcm92aWRlcjogP1dyYXBwZXJDb21wb25lbnRQcm92aWRlcjtcbmxldCBzaG93QXJjaGl0ZWN0dXJlSW5kaWNhdG9yID0gZmFsc2U7XG5cbi8qKlxuICogYEFwcFJlZ2lzdHJ5YCBpcyB0aGUgSmF2YVNjcmlwdCBlbnRyeSBwb2ludCB0byBydW5uaW5nIGFsbCBSZWFjdCBOYXRpdmUgYXBwcy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hcHByZWdpc3RyeVxuICovXG5jb25zdCBBcHBSZWdpc3RyeSA9IHtcbiAgc2V0V3JhcHBlckNvbXBvbmVudFByb3ZpZGVyKHByb3ZpZGVyOiBXcmFwcGVyQ29tcG9uZW50UHJvdmlkZXIpIHtcbiAgICB3cmFwcGVyQ29tcG9uZW50UHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgfSxcblxuICBlbmFibGVBcmNoaXRlY3R1cmVJbmRpY2F0b3IoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHNob3dBcmNoaXRlY3R1cmVJbmRpY2F0b3IgPSBlbmFibGVkO1xuICB9LFxuXG4gIHJlZ2lzdGVyQ29uZmlnKGNvbmZpZzogQXJyYXk8QXBwQ29uZmlnPik6IHZvaWQge1xuICAgIGNvbmZpZy5mb3JFYWNoKGFwcENvbmZpZyA9PiB7XG4gICAgICBpZiAoYXBwQ29uZmlnLnJ1bikge1xuICAgICAgICBBcHBSZWdpc3RyeS5yZWdpc3RlclJ1bm5hYmxlKGFwcENvbmZpZy5hcHBLZXksIGFwcENvbmZpZy5ydW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgIGFwcENvbmZpZy5jb21wb25lbnQgIT0gbnVsbCxcbiAgICAgICAgICAnQXBwUmVnaXN0cnkucmVnaXN0ZXJDb25maWcoLi4uKTogRXZlcnkgY29uZmlnIGlzIGV4cGVjdGVkIHRvIHNldCAnICtcbiAgICAgICAgICAgICdlaXRoZXIgYHJ1bmAgb3IgYGNvbXBvbmVudGAsIGJ1dCBgJXNgIGhhcyBuZWl0aGVyLicsXG4gICAgICAgICAgYXBwQ29uZmlnLmFwcEtleSxcbiAgICAgICAgKTtcbiAgICAgICAgQXBwUmVnaXN0cnkucmVnaXN0ZXJDb21wb25lbnQoXG4gICAgICAgICAgYXBwQ29uZmlnLmFwcEtleSxcbiAgICAgICAgICBhcHBDb25maWcuY29tcG9uZW50LFxuICAgICAgICAgIGFwcENvbmZpZy5zZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gYXBwJ3Mgcm9vdCBjb21wb25lbnQuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FwcHJlZ2lzdHJ5I3JlZ2lzdGVyY29tcG9uZW50XG4gICAqL1xuICByZWdpc3RlckNvbXBvbmVudChcbiAgICBhcHBLZXk6IHN0cmluZyxcbiAgICBjb21wb25lbnRQcm92aWRlcjogQ29tcG9uZW50UHJvdmlkZXIsXG4gICAgc2VjdGlvbj86IGJvb2xlYW4sXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2NvcGVkUGVyZm9ybWFuY2VMb2dnZXIgPSBjcmVhdGVQZXJmb3JtYW5jZUxvZ2dlcigpO1xuICAgIHJ1bm5hYmxlc1thcHBLZXldID0gKGFwcFBhcmFtZXRlcnMsIGRpc3BsYXlNb2RlKSA9PiB7XG4gICAgICBjb25zdCBjb25jdXJyZW50Um9vdEVuYWJsZWQgPSBCb29sZWFuKFxuICAgICAgICBhcHBQYXJhbWV0ZXJzLmluaXRpYWxQcm9wcz8uY29uY3VycmVudFJvb3QgfHxcbiAgICAgICAgICBhcHBQYXJhbWV0ZXJzLmNvbmN1cnJlbnRSb290LFxuICAgICAgKTtcbiAgICAgIHJlbmRlckFwcGxpY2F0aW9uKFxuICAgICAgICBjb21wb25lbnRQcm92aWRlckluc3RydW1lbnRhdGlvbkhvb2soXG4gICAgICAgICAgY29tcG9uZW50UHJvdmlkZXIsXG4gICAgICAgICAgc2NvcGVkUGVyZm9ybWFuY2VMb2dnZXIsXG4gICAgICAgICksXG4gICAgICAgIGFwcFBhcmFtZXRlcnMuaW5pdGlhbFByb3BzLFxuICAgICAgICBhcHBQYXJhbWV0ZXJzLnJvb3RUYWcsXG4gICAgICAgIHdyYXBwZXJDb21wb25lbnRQcm92aWRlciAmJiB3cmFwcGVyQ29tcG9uZW50UHJvdmlkZXIoYXBwUGFyYW1ldGVycyksXG4gICAgICAgIGFwcFBhcmFtZXRlcnMuZmFicmljLFxuICAgICAgICBzaG93QXJjaGl0ZWN0dXJlSW5kaWNhdG9yLFxuICAgICAgICBzY29wZWRQZXJmb3JtYW5jZUxvZ2dlcixcbiAgICAgICAgYXBwS2V5ID09PSAnTG9nQm94JywgLy8gaXMgbG9nYm94XG4gICAgICAgIGFwcEtleSxcbiAgICAgICAgZGlzcGxheU1vZGUsXG4gICAgICAgIGNvbmN1cnJlbnRSb290RW5hYmxlZCxcbiAgICAgICk7XG4gICAgfTtcbiAgICBpZiAoc2VjdGlvbikge1xuICAgICAgc2VjdGlvbnNbYXBwS2V5XSA9IHJ1bm5hYmxlc1thcHBLZXldO1xuICAgIH1cbiAgICByZXR1cm4gYXBwS2V5O1xuICB9LFxuXG4gIHJlZ2lzdGVyUnVubmFibGUoYXBwS2V5OiBzdHJpbmcsIHJ1bjogUnVubmFibGUpOiBzdHJpbmcge1xuICAgIHJ1bm5hYmxlc1thcHBLZXldID0gcnVuO1xuICAgIHJldHVybiBhcHBLZXk7XG4gIH0sXG5cbiAgcmVnaXN0ZXJTZWN0aW9uKGFwcEtleTogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFByb3ZpZGVyKTogdm9pZCB7XG4gICAgQXBwUmVnaXN0cnkucmVnaXN0ZXJDb21wb25lbnQoYXBwS2V5LCBjb21wb25lbnQsIHRydWUpO1xuICB9LFxuXG4gIGdldEFwcEtleXMoKTogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJ1bm5hYmxlcyk7XG4gIH0sXG5cbiAgZ2V0U2VjdGlvbktleXMoKTogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNlY3Rpb25zKTtcbiAgfSxcblxuICBnZXRTZWN0aW9ucygpOiBSdW5uYWJsZXMge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zZWN0aW9ucyxcbiAgICB9O1xuICB9LFxuXG4gIGdldFJ1bm5hYmxlKGFwcEtleTogc3RyaW5nKTogP1J1bm5hYmxlIHtcbiAgICByZXR1cm4gcnVubmFibGVzW2FwcEtleV07XG4gIH0sXG5cbiAgZ2V0UmVnaXN0cnkoKTogUmVnaXN0cnkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWN0aW9uczogQXBwUmVnaXN0cnkuZ2V0U2VjdGlvbktleXMoKSxcbiAgICAgIHJ1bm5hYmxlczogey4uLnJ1bm5hYmxlc30sXG4gICAgfTtcbiAgfSxcblxuICBzZXRDb21wb25lbnRQcm92aWRlckluc3RydW1lbnRhdGlvbkhvb2soXG4gICAgaG9vazogQ29tcG9uZW50UHJvdmlkZXJJbnN0cnVtZW50YXRpb25Ib29rLFxuICApIHtcbiAgICBjb21wb25lbnRQcm92aWRlckluc3RydW1lbnRhdGlvbkhvb2sgPSBob29rO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgSmF2YVNjcmlwdCBidW5kbGUgYW5kIHJ1bnMgdGhlIGFwcC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYXBwcmVnaXN0cnkjcnVuYXBwbGljYXRpb25cbiAgICovXG4gIHJ1bkFwcGxpY2F0aW9uKFxuICAgIGFwcEtleTogc3RyaW5nLFxuICAgIGFwcFBhcmFtZXRlcnM6IEFwcFBhcmFtZXRlcnMsXG4gICAgZGlzcGxheU1vZGU/OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGlmIChhcHBLZXkgIT09ICdMb2dCb3gnKSB7XG4gICAgICBjb25zdCBsb2dQYXJhbXMgPSBfX0RFVl9fXG4gICAgICAgID8gJ1wiIHdpdGggJyArIEpTT04uc3RyaW5naWZ5KGFwcFBhcmFtZXRlcnMpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBtc2cgPSAnUnVubmluZyBcIicgKyBhcHBLZXkgKyBsb2dQYXJhbXM7XG4gICAgICBpbmZvTG9nKG1zZyk7XG4gICAgICBCdWdSZXBvcnRpbmcuYWRkU291cmNlKFxuICAgICAgICAnQXBwUmVnaXN0cnkucnVuQXBwbGljYXRpb24nICsgcnVuQ291bnQrKyxcbiAgICAgICAgKCkgPT4gbXNnLFxuICAgICAgKTtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgcnVubmFibGVzW2FwcEtleV0sXG4gICAgICBgXCIke2FwcEtleX1cIiBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZC4gVGhpcyBjYW4gaGFwcGVuIGlmOlxcbmAgK1xuICAgICAgICAnKiBNZXRybyAodGhlIGxvY2FsIGRldiBzZXJ2ZXIpIGlzIHJ1biBmcm9tIHRoZSB3cm9uZyBmb2xkZXIuICcgK1xuICAgICAgICAnQ2hlY2sgaWYgTWV0cm8gaXMgcnVubmluZywgc3RvcCBpdCBhbmQgcmVzdGFydCBpdCBpbiB0aGUgY3VycmVudCBwcm9qZWN0LlxcbicgK1xuICAgICAgICBcIiogQSBtb2R1bGUgZmFpbGVkIHRvIGxvYWQgZHVlIHRvIGFuIGVycm9yIGFuZCBgQXBwUmVnaXN0cnkucmVnaXN0ZXJDb21wb25lbnRgIHdhc24ndCBjYWxsZWQuXCIsXG4gICAgKTtcblxuICAgIFNjZW5lVHJhY2tlci5zZXRBY3RpdmVTY2VuZSh7bmFtZTogYXBwS2V5fSk7XG4gICAgcnVubmFibGVzW2FwcEtleV0oYXBwUGFyYW1ldGVycywgY29lcmNlRGlzcGxheU1vZGUoZGlzcGxheU1vZGUpKTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlIGluaXRpYWwgcHJvcHMgZm9yIGEgc3VyZmFjZSB0aGF0J3MgYWxyZWFkeSByZW5kZXJlZFxuICAgKi9cbiAgc2V0U3VyZmFjZVByb3BzKFxuICAgIGFwcEtleTogc3RyaW5nLFxuICAgIGFwcFBhcmFtZXRlcnM6IE9iamVjdCxcbiAgICBkaXNwbGF5TW9kZT86IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgaWYgKGFwcEtleSAhPT0gJ0xvZ0JveCcpIHtcbiAgICAgIGNvbnN0IG1zZyA9XG4gICAgICAgICdVcGRhdGluZyBwcm9wcyBmb3IgU3VyZmFjZSBcIicgK1xuICAgICAgICBhcHBLZXkgK1xuICAgICAgICAnXCIgd2l0aCAnICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXBwUGFyYW1ldGVycyk7XG4gICAgICBpbmZvTG9nKG1zZyk7XG4gICAgICBCdWdSZXBvcnRpbmcuYWRkU291cmNlKFxuICAgICAgICAnQXBwUmVnaXN0cnkuc2V0U3VyZmFjZVByb3BzJyArIHJ1bkNvdW50KyssXG4gICAgICAgICgpID0+IG1zZyxcbiAgICAgICk7XG4gICAgfVxuICAgIGludmFyaWFudChcbiAgICAgIHJ1bm5hYmxlc1thcHBLZXldLFxuICAgICAgYFwiJHthcHBLZXl9XCIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuIFRoaXMgY2FuIGhhcHBlbiBpZjpcXG5gICtcbiAgICAgICAgJyogTWV0cm8gKHRoZSBsb2NhbCBkZXYgc2VydmVyKSBpcyBydW4gZnJvbSB0aGUgd3JvbmcgZm9sZGVyLiAnICtcbiAgICAgICAgJ0NoZWNrIGlmIE1ldHJvIGlzIHJ1bm5pbmcsIHN0b3AgaXQgYW5kIHJlc3RhcnQgaXQgaW4gdGhlIGN1cnJlbnQgcHJvamVjdC5cXG4nICtcbiAgICAgICAgXCIqIEEgbW9kdWxlIGZhaWxlZCB0byBsb2FkIGR1ZSB0byBhbiBlcnJvciBhbmQgYEFwcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29tcG9uZW50YCB3YXNuJ3QgY2FsbGVkLlwiLFxuICAgICk7XG5cbiAgICBydW5uYWJsZXNbYXBwS2V5XShhcHBQYXJhbWV0ZXJzLCBjb2VyY2VEaXNwbGF5TW9kZShkaXNwbGF5TW9kZSkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTdG9wcyBhbiBhcHBsaWNhdGlvbiB3aGVuIGEgdmlldyBzaG91bGQgYmUgZGVzdHJveWVkLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hcHByZWdpc3RyeSN1bm1vdW50YXBwbGljYXRpb25jb21wb25lbnRhdHJvb3R0YWdcbiAgICovXG4gIHVubW91bnRBcHBsaWNhdGlvbkNvbXBvbmVudEF0Um9vdFRhZyhyb290VGFnOiBSb290VGFnKTogdm9pZCB7XG4gICAgdW5tb3VudENvbXBvbmVudEF0Tm9kZUFuZFJlbW92ZUNvbnRhaW5lcihyb290VGFnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBoZWFkbGVzcyB0YXNrLiBBIGhlYWRsZXNzIHRhc2sgaXMgYSBiaXQgb2YgY29kZSB0aGF0IHJ1bnMgd2l0aG91dCBhIFVJLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hcHByZWdpc3RyeSNyZWdpc3RlcmhlYWRsZXNzdGFza1xuICAgKi9cbiAgcmVnaXN0ZXJIZWFkbGVzc1Rhc2sodGFza0tleTogc3RyaW5nLCB0YXNrUHJvdmlkZXI6IFRhc2tQcm92aWRlcik6IHZvaWQge1xuICAgIC8vICRGbG93Rml4TWVbb2JqZWN0LXRoaXMtcmVmZXJlbmNlXVxuICAgIHRoaXMucmVnaXN0ZXJDYW5jZWxsYWJsZUhlYWRsZXNzVGFzayh0YXNrS2V5LCB0YXNrUHJvdmlkZXIsICgpID0+ICgpID0+IHtcbiAgICAgIC8qIENhbmNlbCBpcyBuby1vcCAqL1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNhbmNlbGxhYmxlIGhlYWRsZXNzIHRhc2suIEEgaGVhZGxlc3MgdGFzayBpcyBhIGJpdCBvZiBjb2RlIHRoYXQgcnVucyB3aXRob3V0IGEgVUkuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FwcHJlZ2lzdHJ5I3JlZ2lzdGVyY2FuY2VsbGFibGVoZWFkbGVzc3Rhc2tcbiAgICovXG4gIHJlZ2lzdGVyQ2FuY2VsbGFibGVIZWFkbGVzc1Rhc2soXG4gICAgdGFza0tleTogc3RyaW5nLFxuICAgIHRhc2tQcm92aWRlcjogVGFza1Byb3ZpZGVyLFxuICAgIHRhc2tDYW5jZWxQcm92aWRlcjogVGFza0NhbmNlbFByb3ZpZGVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGFza1Byb3ZpZGVycy5oYXModGFza0tleSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYHJlZ2lzdGVySGVhZGxlc3NUYXNrIG9yIHJlZ2lzdGVyQ2FuY2VsbGFibGVIZWFkbGVzc1Rhc2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBzYW1lIGtleSAnJHt0YXNrS2V5fSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGFza1Byb3ZpZGVycy5zZXQodGFza0tleSwgdGFza1Byb3ZpZGVyKTtcbiAgICB0YXNrQ2FuY2VsUHJvdmlkZXJzLnNldCh0YXNrS2V5LCB0YXNrQ2FuY2VsUHJvdmlkZXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBPbmx5IGNhbGxlZCBmcm9tIG5hdGl2ZSBjb2RlLiBTdGFydHMgYSBoZWFkbGVzcyB0YXNrLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hcHByZWdpc3RyeSNzdGFydGhlYWRsZXNzdGFza1xuICAgKi9cbiAgc3RhcnRIZWFkbGVzc1Rhc2sodGFza0lkOiBudW1iZXIsIHRhc2tLZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdGFza1Byb3ZpZGVyID0gdGFza1Byb3ZpZGVycy5nZXQodGFza0tleSk7XG4gICAgaWYgKCF0YXNrUHJvdmlkZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gdGFzayByZWdpc3RlcmVkIGZvciBrZXkgJHt0YXNrS2V5fWApO1xuICAgICAgaWYgKE5hdGl2ZUhlYWRsZXNzSnNUYXNrU3VwcG9ydCkge1xuICAgICAgICBOYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQubm90aWZ5VGFza0ZpbmlzaGVkKHRhc2tJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRhc2tQcm92aWRlcigpKGRhdGEpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChOYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQpIHtcbiAgICAgICAgICBOYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQubm90aWZ5VGFza0ZpbmlzaGVkKHRhc2tJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWFzb24pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBOYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQgJiZcbiAgICAgICAgICByZWFzb24gaW5zdGFuY2VvZiBIZWFkbGVzc0pzVGFza0Vycm9yXG4gICAgICAgICkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbdW51c2VkLXByb21pc2VdXG4gICAgICAgICAgTmF0aXZlSGVhZGxlc3NKc1Rhc2tTdXBwb3J0Lm5vdGlmeVRhc2tSZXRyeSh0YXNrSWQpLnRoZW4oXG4gICAgICAgICAgICByZXRyeVBvc3RlZCA9PiB7XG4gICAgICAgICAgICAgIGlmICghcmV0cnlQb3N0ZWQpIHtcbiAgICAgICAgICAgICAgICBOYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQubm90aWZ5VGFza0ZpbmlzaGVkKHRhc2tJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE9ubHkgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUuIENhbmNlbHMgYSBoZWFkbGVzcyB0YXNrLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hcHByZWdpc3RyeSNjYW5jZWxoZWFkbGVzc3Rhc2tcbiAgICovXG4gIGNhbmNlbEhlYWRsZXNzVGFzayh0YXNrSWQ6IG51bWJlciwgdGFza0tleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGFza0NhbmNlbFByb3ZpZGVyID0gdGFza0NhbmNlbFByb3ZpZGVycy5nZXQodGFza0tleSk7XG4gICAgaWYgKCF0YXNrQ2FuY2VsUHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdGFzayBjYW5jZWxsZXIgcmVnaXN0ZXJlZCBmb3Iga2V5ICcke3Rhc2tLZXl9J2ApO1xuICAgIH1cbiAgICB0YXNrQ2FuY2VsUHJvdmlkZXIoKSgpO1xuICB9LFxufTtcblxuLy8gUmVnaXN0ZXIgTG9nQm94IGFzIGEgZGVmYXVsdCBzdXJmYWNlXG5BcHBSZWdpc3RyeS5yZWdpc3RlckNvbXBvbmVudCgnTG9nQm94JywgKCkgPT4ge1xuICBpZiAoX19ERVZfXyAmJiB0eXBlb2YgamVzdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vTG9nQm94L0xvZ0JveEluc3BlY3RvckNvbnRhaW5lcicpLmRlZmF1bHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE5vT3AoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59KTtcblxuZ2xvYmFsLlJOJEFwcFJlZ2lzdHJ5ID0gQXBwUmVnaXN0cnk7XG5cbi8vIEJhY2t3YXJkcyBjb21wYXQgd2l0aCBTdXJmYWNlUmVnaXN0cnksIHJlbW92ZSBtZSBsYXRlclxuZ2xvYmFsLlJOJFN1cmZhY2VSZWdpc3RyeSA9IHtcbiAgcmVuZGVyU3VyZmFjZTogQXBwUmVnaXN0cnkucnVuQXBwbGljYXRpb24sXG4gIHNldFN1cmZhY2VQcm9wczogQXBwUmVnaXN0cnkuc2V0U3VyZmFjZVByb3BzLFxufTtcblxuaWYgKGdsb2JhbC5STiRCcmlkZ2VsZXNzID09PSB0cnVlKSB7XG4gIGNvbnNvbGUubG9nKCdCcmlkZ2VsZXNzIG1vZGUgaXMgZW5hYmxlZCcpO1xufSBlbHNlIHtcbiAgQmF0Y2hlZEJyaWRnZS5yZWdpc3RlckNhbGxhYmxlTW9kdWxlKCdBcHBSZWdpc3RyeScsIEFwcFJlZ2lzdHJ5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBcHBSZWdpc3RyeTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgUkNURGV2aWNlRXZlbnRFbWl0dGVyIGZyb20gJy4uL0V2ZW50RW1pdHRlci9SQ1REZXZpY2VFdmVudEVtaXR0ZXInO1xuaW1wb3J0IE5hdGl2ZVJlZEJveCBmcm9tICcuLi9OYXRpdmVNb2R1bGVzL3NwZWNzL05hdGl2ZVJlZEJveCc7XG5pbXBvcnQge3R5cGUgRXZlbnRTdWJzY3JpcHRpb259IGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgTmF0aXZlQnVnUmVwb3J0aW5nIGZyb20gJy4vTmF0aXZlQnVnUmVwb3J0aW5nJztcblxudHlwZSBFeHRyYURhdGEgPSB7W2tleTogc3RyaW5nXTogc3RyaW5nLCAuLi59O1xudHlwZSBTb3VyY2VDYWxsYmFjayA9ICgpID0+IHN0cmluZztcbnR5cGUgRGVidWdEYXRhID0ge1xuICBleHRyYXM6IEV4dHJhRGF0YSxcbiAgZmlsZXM6IEV4dHJhRGF0YSxcbiAgLi4uXG59O1xuXG5mdW5jdGlvbiBkZWZhdWx0RXh0cmFzKCkge1xuICBCdWdSZXBvcnRpbmcuYWRkRmlsZVNvdXJjZSgncmVhY3RfaGllcmFyY2h5LnR4dCcsICgpID0+XG4gICAgcmVxdWlyZSgnLi9kdW1wUmVhY3RUcmVlJykoKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSBjbGFzcyBmb3IgY29sbGVjdGluZyBidWcgcmVwb3J0IGRhdGEuIENvbXBvbmVudHMgY2FuIGFkZCBzb3VyY2VzIHRoYXQgd2lsbCBiZSBxdWVyaWVkIHdoZW4gYSBidWcgcmVwb3J0XG4gKiBpcyBjcmVhdGVkIHZpYSBgY29sbGVjdEV4dHJhRGF0YWAuIEZvciBleGFtcGxlLCBhIGxpc3QgY29tcG9uZW50IG1pZ2h0IGFkZCBhIHNvdXJjZSB0aGF0IHByb3ZpZGVzIHRoZSBsaXN0IG9mIHJvd3NcbiAqIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlIG9uIHNjcmVlbi4gQ29tcG9uZW50cyBzaG91bGQgYWxzbyByZW1lbWJlciB0byBjYWxsIGByZW1vdmUoKWAgb24gdGhlIG9iamVjdCB0aGF0IGlzXG4gKiByZXR1cm5lZCBieSBgYWRkU291cmNlYCB3aGVuIHRoZXkgYXJlIHVubW91bnRlZC5cbiAqL1xuY2xhc3MgQnVnUmVwb3J0aW5nIHtcbiAgc3RhdGljIF9leHRyYVNvdXJjZXM6IE1hcDxzdHJpbmcsIFNvdXJjZUNhbGxiYWNrPiA9IG5ldyBNYXAoKTtcbiAgc3RhdGljIF9maWxlU291cmNlczogTWFwPHN0cmluZywgU291cmNlQ2FsbGJhY2s+ID0gbmV3IE1hcCgpO1xuICBzdGF0aWMgX3N1YnNjcmlwdGlvbjogP0V2ZW50U3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgc3RhdGljIF9yZWRib3hTdWJzY3JpcHRpb246ID9FdmVudFN1YnNjcmlwdGlvbiA9IG51bGw7XG5cbiAgc3RhdGljIF9tYXliZUluaXQoKSB7XG4gICAgaWYgKCFCdWdSZXBvcnRpbmcuX3N1YnNjcmlwdGlvbikge1xuICAgICAgQnVnUmVwb3J0aW5nLl9zdWJzY3JpcHRpb24gPSBSQ1REZXZpY2VFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoXG4gICAgICAgICdjb2xsZWN0QnVnRXh0cmFEYXRhJyxcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICBCdWdSZXBvcnRpbmcuY29sbGVjdEV4dHJhRGF0YSxcbiAgICAgICAgbnVsbCxcbiAgICAgICk7XG4gICAgICBkZWZhdWx0RXh0cmFzKCk7XG4gICAgfVxuXG4gICAgaWYgKCFCdWdSZXBvcnRpbmcuX3JlZGJveFN1YnNjcmlwdGlvbikge1xuICAgICAgQnVnUmVwb3J0aW5nLl9yZWRib3hTdWJzY3JpcHRpb24gPSBSQ1REZXZpY2VFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoXG4gICAgICAgICdjb2xsZWN0UmVkQm94RXh0cmFEYXRhJyxcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICBCdWdSZXBvcnRpbmcuY29sbGVjdEV4dHJhRGF0YSxcbiAgICAgICAgbnVsbCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYSBzdHJpbmcga2V5IHRvIGEgc2ltcGxlIGNhbGxiYWNrIHRoYXQgc2hvdWxkIHJldHVybiBhIHN0cmluZyBwYXlsb2FkIHRvIGJlIGF0dGFjaGVkXG4gICAqIHRvIGEgYnVnIHJlcG9ydC4gU291cmNlIGNhbGxiYWNrcyBhcmUgY2FsbGVkIHdoZW4gYGNvbGxlY3RFeHRyYURhdGFgIGlzIGNhbGxlZC5cbiAgICpcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdG8gcmVtb3ZlIHRoZSBzb3VyY2Ugd2hlbiB0aGUgY29tcG9uZW50IHVubW91bnRzLlxuICAgKlxuICAgKiBDb25mbGljdHMgdHJhbXBsZSB3aXRoIGEgd2FybmluZy5cbiAgICovXG4gIHN0YXRpYyBhZGRTb3VyY2UoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IFNvdXJjZUNhbGxiYWNrLFxuICApOiB7cmVtb3ZlOiAoKSA9PiB2b2lkLCAuLi59IHtcbiAgICByZXR1cm4gdGhpcy5fYWRkU291cmNlKGtleSwgY2FsbGJhY2ssIEJ1Z1JlcG9ydGluZy5fZXh0cmFTb3VyY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGEgc3RyaW5nIGtleSB0byBhIHNpbXBsZSBjYWxsYmFjayB0aGF0IHNob3VsZCByZXR1cm4gYSBzdHJpbmcgcGF5bG9hZCB0byBiZSBhdHRhY2hlZFxuICAgKiB0byBhIGJ1ZyByZXBvcnQuIFNvdXJjZSBjYWxsYmFja3MgYXJlIGNhbGxlZCB3aGVuIGBjb2xsZWN0RXh0cmFEYXRhYCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRvIHJlbW92ZSB0aGUgc291cmNlIHdoZW4gdGhlIGNvbXBvbmVudCB1bm1vdW50cy5cbiAgICpcbiAgICogQ29uZmxpY3RzIHRyYW1wbGUgd2l0aCBhIHdhcm5pbmcuXG4gICAqL1xuICBzdGF0aWMgYWRkRmlsZVNvdXJjZShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBjYWxsYmFjazogU291cmNlQ2FsbGJhY2ssXG4gICk6IHtyZW1vdmU6ICgpID0+IHZvaWQsIC4uLn0ge1xuICAgIHJldHVybiB0aGlzLl9hZGRTb3VyY2Uoa2V5LCBjYWxsYmFjaywgQnVnUmVwb3J0aW5nLl9maWxlU291cmNlcyk7XG4gIH1cblxuICBzdGF0aWMgX2FkZFNvdXJjZShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBjYWxsYmFjazogU291cmNlQ2FsbGJhY2ssXG4gICAgc291cmNlOiBNYXA8c3RyaW5nLCBTb3VyY2VDYWxsYmFjaz4sXG4gICk6IHtyZW1vdmU6ICgpID0+IHZvaWQsIC4uLn0ge1xuICAgIEJ1Z1JlcG9ydGluZy5fbWF5YmVJbml0KCk7XG4gICAgaWYgKHNvdXJjZS5oYXMoa2V5KSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgQnVnUmVwb3J0aW5nLmFkZCogY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBzYW1lIGtleSAnJHtrZXl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICBzb3VyY2Uuc2V0KGtleSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB7XG4gICAgICByZW1vdmU6ICgpID0+IHtcbiAgICAgICAgc291cmNlLmRlbGV0ZShrZXkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGEgbmF0aXZlIGJ1ZyByZXBvcnRpbmcgZmxvdywgb3IgZnJvbSBKUyBjb2RlLlxuICAgKlxuICAgKiBJZiBhdmFpbGFibGUsIHRoaXMgd2lsbCBjYWxsIGBOYXRpdmVNb2R1bGVzLkJ1Z1JlcG9ydGluZy5zZXRFeHRyYURhdGEoZXh0cmFEYXRhKWBcbiAgICogYWZ0ZXIgY29sbGVjdGluZyBgZXh0cmFEYXRhYC5cbiAgICovXG4gIHN0YXRpYyBjb2xsZWN0RXh0cmFEYXRhKCk6IERlYnVnRGF0YSB7XG4gICAgY29uc3QgZXh0cmFEYXRhOiBFeHRyYURhdGEgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBCdWdSZXBvcnRpbmcuX2V4dHJhU291cmNlcykge1xuICAgICAgZXh0cmFEYXRhW2tleV0gPSBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBjb25zdCBmaWxlRGF0YTogRXh0cmFEYXRhID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgQnVnUmVwb3J0aW5nLl9maWxlU291cmNlcykge1xuICAgICAgZmlsZURhdGFba2V5XSA9IGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgaWYgKE5hdGl2ZUJ1Z1JlcG9ydGluZyAhPSBudWxsICYmIE5hdGl2ZUJ1Z1JlcG9ydGluZy5zZXRFeHRyYURhdGEgIT0gbnVsbCkge1xuICAgICAgTmF0aXZlQnVnUmVwb3J0aW5nLnNldEV4dHJhRGF0YShleHRyYURhdGEsIGZpbGVEYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoTmF0aXZlUmVkQm94ICE9IG51bGwgJiYgTmF0aXZlUmVkQm94LnNldEV4dHJhRGF0YSAhPSBudWxsKSB7XG4gICAgICBOYXRpdmVSZWRCb3guc2V0RXh0cmFEYXRhKGV4dHJhRGF0YSwgJ0Zyb20gQnVnUmVwb3J0aW5nLmpzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtleHRyYXM6IGV4dHJhRGF0YSwgZmlsZXM6IGZpbGVEYXRhfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1Z1JlcG9ydGluZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUJ1Z1JlcG9ydGluZyc7XG5pbXBvcnQgTmF0aXZlQnVnUmVwb3J0aW5nIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQnVnUmVwb3J0aW5nJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZUJ1Z1JlcG9ydGluZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtzdGFydFJlcG9ydEFQcm9ibGVtRmxvdzogKCkgPT4gdm9pZDtcbiAgK3NldEV4dHJhRGF0YTogKGV4dHJhRGF0YTogT2JqZWN0LCBleHRyYUZpbGVzOiBPYmplY3QpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPignQnVnUmVwb3J0aW5nJyk6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qXG5jb25zdCBnZXRSZWFjdERhdGEgPSByZXF1aXJlKCdnZXRSZWFjdERhdGEnKTtcblxuY29uc3QgSU5ERU5UQVRJT05fU0laRSA9IDI7XG5jb25zdCBNQVhfREVQVEggPSAyO1xuY29uc3QgTUFYX1NUUklOR19MRU5HVEggPSA1MDtcbiovXG5cbi8qKlxuICogRHVtcCBhbGwgUmVhY3QgTmF0aXZlIHJvb3Qgdmlld3MgYW5kIHRoZWlyIGNvbnRlbnQuIFRoaXMgZnVuY3Rpb24gdHJpZXNcbiAqIGl0IGJlc3QgdG8gZ2V0IHRoZSBjb250ZW50IGJ1dCB1bHRpbWF0ZWx5IHJlbGllcyBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzXG4gKiBvZiBSZWFjdCBhbmQgd2lsbCBmYWlsIGluIGZ1dHVyZSB2ZXJzaW9ucy5cbiAqL1xuZnVuY3Rpb24gZHVtcFJlYWN0VHJlZSgpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBnZXRSZWFjdFRyZWUoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiAnRmFpbGVkIHRvIGR1bXAgcmVhY3QgdHJlZTogJyArIGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RUcmVlKCkge1xuICAvLyBUT0RPKHNlbWEpOiBSZWVuYWJsZSB0cmVlIGR1bXBzIHVzaW5nIHRoZSBGaWJlciB0cmVlIHN0cnVjdHVyZS4gIzE1OTQ1Njg0XG4gIHJldHVybiAoXG4gICAgJ1JlYWN0IHRyZWUgZHVtcHMgaGF2ZSBiZWVuIHRlbXBvcmFyaWx5IGRpc2FibGVkIHdoaWxlIFJlYWN0IGlzICcgK1xuICAgICd1cGdyYWRlZCB0byBGaWJlci4nXG4gICk7XG4gIC8qXG4gIGxldCBvdXRwdXQgPSAnJztcbiAgY29uc3Qgcm9vdElkcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFJlYWN0TmF0aXZlTW91bnQuX2luc3RhbmNlc0J5Q29udGFpbmVySUQpO1xuICBmb3IgKGNvbnN0IHJvb3RJZCBvZiByb290SWRzKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBSZWFjdE5hdGl2ZU1vdW50Ll9pbnN0YW5jZXNCeUNvbnRhaW5lcklEW3Jvb3RJZF07XG4gICAgb3V0cHV0ICs9IGA9PT09PT09PT09PT0gUm9vdCBJRDogJHtyb290SWR9ID09PT09PT09PT09PVxcbmA7XG4gICAgb3V0cHV0ICs9IGR1bXBOb2RlKGluc3RhbmNlLCAwKTtcbiAgICBvdXRwdXQgKz0gYD09PT09PT09PT09PSBFbmQgcm9vdCBJRDogJHtyb290SWR9ID09PT09PT09PT09PVxcbmA7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbiovXG59XG5cbi8qXG5mdW5jdGlvbiBkdW1wTm9kZShub2RlOiBPYmplY3QsIGluZGVudGF0aW9uOiBudW1iZXIpIHtcbiAgY29uc3QgZGF0YSA9IGdldFJlYWN0RGF0YShub2RlKTtcbiAgaWYgKGRhdGEubm9kZVR5cGUgPT09ICdUZXh0Jykge1xuICAgIHJldHVybiBpbmRlbnQoaW5kZW50YXRpb24pICsgZGF0YS50ZXh0ICsgJ1xcbic7XG4gIH0gZWxzZSBpZiAoZGF0YS5ub2RlVHlwZSA9PT0gJ0VtcHR5Jykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBsZXQgb3V0cHV0ID0gaW5kZW50KGluZGVudGF0aW9uKSArIGA8JHtkYXRhLm5hbWV9YDtcbiAgaWYgKGRhdGEubm9kZVR5cGUgPT09ICdDb21wb3NpdGUnKSB7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkYXRhLnByb3BzIHx8IHt9KSkge1xuICAgICAgaWYgKGlzTm9ybWFsUHJvcChwcm9wTmFtZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZShkYXRhLnByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gYCAke3Byb3BOYW1lfT0ke3ZhbHVlfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBbRmFpbGVkIHRvIGdldCBwcm9wZXJ0eTogJHtlfV1gO1xuICAgICAgICAgIG91dHB1dCArPSBgICR7cHJvcE5hbWV9PSR7bWVzc2FnZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxldCBjaGlsZE91dHB1dCA9ICcnO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRhdGEuY2hpbGRyZW4gfHwgW10pIHtcbiAgICBjaGlsZE91dHB1dCArPSBkdW1wTm9kZShjaGlsZCwgaW5kZW50YXRpb24gKyAxKTtcbiAgfVxuXG4gIGlmIChjaGlsZE91dHB1dCkge1xuICAgIG91dHB1dCArPSAnPlxcbicgKyBjaGlsZE91dHB1dCArIGluZGVudChpbmRlbnRhdGlvbikgKyBgPC8ke2RhdGEubmFtZX0+XFxuYDtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgKz0gJyAvPlxcbic7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBpc05vcm1hbFByb3AobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ2NoaWxkcmVuJzpcbiAgICBjYXNlICdrZXknOlxuICAgIGNhc2UgJ3JlZic6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPYmplY3Qob2JqZWN0OiBPYmplY3QsIGRlcHRoOiBudW1iZXIpIHtcbiAgaWYgKGRlcHRoID49IE1BWF9ERVBUSCkge1xuICAgIHJldHVybiAnWy4uLm9taXR0ZWRdJztcbiAgfVxuICBsZXQgb3V0cHV0ID0gJ3snO1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpKSB7XG4gICAgaWYgKCFmaXJzdCkge1xuICAgICAgb3V0cHV0ICs9ICcsICc7XG4gICAgfVxuICAgIG91dHB1dCArPSBgJHtrZXl9OiAke2NvbnZlcnRWYWx1ZShvYmplY3Rba2V5XSwgZGVwdGggKyAxKX1gO1xuICAgIGZpcnN0ID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG91dHB1dCArICd9Jztcbn1cblxuZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlLCBkZXB0aCA9IDApOiA/c3RyaW5nIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBvc3NpYmx5RWxsaXBzaXModmFsdWUpLnJlcGxhY2UoJ1xcbicsICdcXFxcbicpKTtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4gJ1tmdW5jdGlvbl0nO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXR1cm4gY29udmVydE9iamVjdCh2YWx1ZSwgZGVwdGgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3NzaWJseUVsbGlwc2lzKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IE1BWF9TVFJJTkdfTEVOR1RIKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKDAsIE1BWF9TVFJJTkdfTEVOR1RIKSArICcuLi4nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRlbnQoc2l6ZTogbnVtYmVyKSB7XG4gIHJldHVybiAnICcucmVwZWF0KHNpemUgKiBJTkRFTlRBVElPTl9TSVpFKTtcbn1cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gZHVtcFJlYWN0VHJlZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB0eXBlIFNjZW5lID0ge25hbWU6IHN0cmluZywgW3N0cmluZ106IG1peGVkLCAuLi59O1xuXG5sZXQgX2xpc3RlbmVyczogQXJyYXk8KHNjZW5lOiBTY2VuZSkgPT4gdm9pZD4gPSBbXTtcblxubGV0IF9hY3RpdmVTY2VuZSA9IHtuYW1lOiAnZGVmYXVsdCd9O1xuXG5jb25zdCBTY2VuZVRyYWNrZXIgPSB7XG4gIHNldEFjdGl2ZVNjZW5lKHNjZW5lOiBTY2VuZSkge1xuICAgIF9hY3RpdmVTY2VuZSA9IHNjZW5lO1xuICAgIF9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcihfYWN0aXZlU2NlbmUpKTtcbiAgfSxcblxuICBnZXRBY3RpdmVTY2VuZSgpOiBTY2VuZSB7XG4gICAgcmV0dXJuIF9hY3RpdmVTY2VuZTtcbiAgfSxcblxuICBhZGRBY3RpdmVTY2VuZUNoYW5nZWRMaXN0ZW5lcihjYWxsYmFjazogKHNjZW5lOiBTY2VuZSkgPT4gdm9pZCk6IHtcbiAgICByZW1vdmU6ICgpID0+IHZvaWQsXG4gICAgLi4uXG4gIH0ge1xuICAgIF9saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbW92ZTogKCkgPT4ge1xuICAgICAgICBfbGlzdGVuZXJzID0gX2xpc3RlbmVycy5maWx0ZXIobGlzdGVuZXIgPT4gY2FsbGJhY2sgIT09IGxpc3RlbmVyKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2NlbmVUcmFja2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYWRsZXNzSnNUYXNrRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSGVhZGxlc3NKc1Rhc2tTdXBwb3J0JztcbmltcG9ydCBOYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlSGVhZGxlc3NKc1Rhc2tTdXBwb3J0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtub3RpZnlUYXNrRmluaXNoZWQ6ICh0YXNrSWQ6IG51bWJlcikgPT4gdm9pZDtcbiAgK25vdGlmeVRhc2tSZXRyeTogKHRhc2tJZDogbnVtYmVyKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ0hlYWRsZXNzSnNUYXNrU3VwcG9ydCcpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7SVBlcmZvcm1hbmNlTG9nZ2VyfSBmcm9tICcuLi9VdGlsaXRpZXMvY3JlYXRlUGVyZm9ybWFuY2VMb2dnZXInO1xuXG5pbXBvcnQgR2xvYmFsUGVyZm9ybWFuY2VMb2dnZXIgZnJvbSAnLi4vVXRpbGl0aWVzL0dsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyJztcbmltcG9ydCBQZXJmb3JtYW5jZUxvZ2dlckNvbnRleHQgZnJvbSAnLi4vVXRpbGl0aWVzL1BlcmZvcm1hbmNlTG9nZ2VyQ29udGV4dCc7XG5pbXBvcnQgQXBwQ29udGFpbmVyIGZyb20gJy4vQXBwQ29udGFpbmVyJztcbmltcG9ydCBEaXNwbGF5TW9kZSwge3R5cGUgRGlzcGxheU1vZGVUeXBlfSBmcm9tICcuL0Rpc3BsYXlNb2RlJztcbmltcG9ydCBnZXRDYWNoZWRDb21wb25lbnRXaXRoRGVidWdOYW1lIGZyb20gJy4vZ2V0Q2FjaGVkQ29tcG9uZW50V2l0aERlYnVnTmFtZSc7XG5pbXBvcnQgKiBhcyBSZW5kZXJlciBmcm9tICcuL1JlbmRlcmVyUHJveHknO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vLyByZXF1aXJlIEJhY2tIYW5kbGVyIHNvIGl0IHNldHMgdGhlIGRlZmF1bHQgaGFuZGxlciB0aGF0IGV4aXRzIHRoZSBhcHAgaWYgbm8gbGlzdGVuZXJzIHJlc3BvbmRcbmltcG9ydCAnLi4vVXRpbGl0aWVzL0JhY2tIYW5kbGVyJztcblxudHlwZSBBY3Rpdml0eVR5cGUgPSBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDx7XG4gIG1vZGU6ICd2aXNpYmxlJyB8ICdoaWRkZW4nLFxuICBjaGlsZHJlbjogUmVhY3QuTm9kZSxcbn0+O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJBcHBsaWNhdGlvbjxQcm9wczogT2JqZWN0PihcbiAgUm9vdENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxQcm9wcz4sXG4gIGluaXRpYWxQcm9wczogUHJvcHMsXG4gIHJvb3RUYWc6IGFueSxcbiAgV3JhcHBlckNvbXBvbmVudD86ID9SZWFjdC5Db21wb25lbnRUeXBlPGFueT4sXG4gIGZhYnJpYz86IGJvb2xlYW4sXG4gIHNob3dBcmNoaXRlY3R1cmVJbmRpY2F0b3I/OiBib29sZWFuLFxuICBzY29wZWRQZXJmb3JtYW5jZUxvZ2dlcj86IElQZXJmb3JtYW5jZUxvZ2dlcixcbiAgaXNMb2dCb3g/OiBib29sZWFuLFxuICBkZWJ1Z05hbWU/OiBzdHJpbmcsXG4gIGRpc3BsYXlNb2RlPzogP0Rpc3BsYXlNb2RlVHlwZSxcbiAgdXNlQ29uY3VycmVudFJvb3Q/OiBib29sZWFuLFxuICB1c2VPZmZzY3JlZW4/OiBib29sZWFuLFxuKSB7XG4gIGludmFyaWFudChyb290VGFnLCAnRXhwZWN0IHRvIGhhdmUgYSB2YWxpZCByb290VGFnLCBpbnN0ZWFkIGdvdCAnLCByb290VGFnKTtcblxuICBjb25zdCBwZXJmb3JtYW5jZUxvZ2dlciA9IHNjb3BlZFBlcmZvcm1hbmNlTG9nZ2VyID8/IEdsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyO1xuXG4gIGxldCByZW5kZXJhYmxlOiBSZWFjdC5NaXhlZEVsZW1lbnQgPSAoXG4gICAgPFBlcmZvcm1hbmNlTG9nZ2VyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17cGVyZm9ybWFuY2VMb2dnZXJ9PlxuICAgICAgPEFwcENvbnRhaW5lclxuICAgICAgICByb290VGFnPXtyb290VGFnfVxuICAgICAgICBmYWJyaWM9e2ZhYnJpY31cbiAgICAgICAgc2hvd0FyY2hpdGVjdHVyZUluZGljYXRvcj17c2hvd0FyY2hpdGVjdHVyZUluZGljYXRvcn1cbiAgICAgICAgV3JhcHBlckNvbXBvbmVudD17V3JhcHBlckNvbXBvbmVudH1cbiAgICAgICAgaW5pdGlhbFByb3BzPXtpbml0aWFsUHJvcHMgPz8gT2JqZWN0LmZyZWV6ZSh7fSl9XG4gICAgICAgIGludGVybmFsX2V4Y2x1ZGVMb2dCb3g9e2lzTG9nQm94fT5cbiAgICAgICAgPFJvb3RDb21wb25lbnQgey4uLmluaXRpYWxQcm9wc30gcm9vdFRhZz17cm9vdFRhZ30gLz5cbiAgICAgIDwvQXBwQ29udGFpbmVyPlxuICAgIDwvUGVyZm9ybWFuY2VMb2dnZXJDb250ZXh0LlByb3ZpZGVyPlxuICApO1xuXG4gIGlmIChfX0RFVl9fICYmIGRlYnVnTmFtZSkge1xuICAgIGNvbnN0IFJvb3RDb21wb25lbnRXaXRoTWVhbmluZ2Z1bE5hbWUgPSBnZXRDYWNoZWRDb21wb25lbnRXaXRoRGVidWdOYW1lKFxuICAgICAgYCR7ZGVidWdOYW1lfShSb290Q29tcG9uZW50KWAsXG4gICAgKTtcbiAgICByZW5kZXJhYmxlID0gKFxuICAgICAgPFJvb3RDb21wb25lbnRXaXRoTWVhbmluZ2Z1bE5hbWU+XG4gICAgICAgIHtyZW5kZXJhYmxlfVxuICAgICAgPC9Sb290Q29tcG9uZW50V2l0aE1lYW5pbmdmdWxOYW1lPlxuICAgICk7XG4gIH1cblxuICBpZiAodXNlT2Zmc2NyZWVuICYmIGRpc3BsYXlNb2RlICE9IG51bGwpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGNvbnN0IEFjdGl2aXR5OiBBY3Rpdml0eVR5cGUgPSBSZWFjdC51bnN0YWJsZV9BY3Rpdml0eTtcblxuICAgIHJlbmRlcmFibGUgPSAoXG4gICAgICA8QWN0aXZpdHlcbiAgICAgICAgbW9kZT17ZGlzcGxheU1vZGUgPT09IERpc3BsYXlNb2RlLlZJU0lCTEUgPyAndmlzaWJsZScgOiAnaGlkZGVuJ30+XG4gICAgICAgIHtyZW5kZXJhYmxlfVxuICAgICAgPC9BY3Rpdml0eT5cbiAgICApO1xuICB9XG5cbiAgLy8gV2Ugd2FudCB0byBoYXZlIGNvbmN1cnJlbnRSb290IGFsd2F5cyBlbmFibGVkIHdoZW4geW91J3JlIG9uIEZhYnJpYy5cbiAgY29uc3QgdXNlQ29uY3VycmVudFJvb3RPdmVycmlkZSA9IGZhYnJpYztcblxuICBwZXJmb3JtYW5jZUxvZ2dlci5zdGFydFRpbWVzcGFuKCdyZW5kZXJBcHBsaWNhdGlvbl9SZWFjdF9yZW5kZXInKTtcbiAgcGVyZm9ybWFuY2VMb2dnZXIuc2V0RXh0cmEoXG4gICAgJ3VzZWRSZWFjdENvbmN1cnJlbnRSb290JyxcbiAgICB1c2VDb25jdXJyZW50Um9vdE92ZXJyaWRlID8gJzEnIDogJzAnLFxuICApO1xuICBwZXJmb3JtYW5jZUxvZ2dlci5zZXRFeHRyYSgndXNlZFJlYWN0RmFicmljJywgZmFicmljID8gJzEnIDogJzAnKTtcbiAgcGVyZm9ybWFuY2VMb2dnZXIuc2V0RXh0cmEoXG4gICAgJ3VzZWRSZWFjdFByb2ZpbGVyJyxcbiAgICBSZW5kZXJlci5pc1Byb2ZpbGluZ1JlbmRlcmVyKCksXG4gICk7XG4gIFJlbmRlcmVyLnJlbmRlckVsZW1lbnQoe1xuICAgIGVsZW1lbnQ6IHJlbmRlcmFibGUsXG4gICAgcm9vdFRhZyxcbiAgICB1c2VGYWJyaWM6IEJvb2xlYW4oZmFicmljKSxcbiAgICB1c2VDb25jdXJyZW50Um9vdDogQm9vbGVhbih1c2VDb25jdXJyZW50Um9vdE92ZXJyaWRlKSxcbiAgfSk7XG4gIHBlcmZvcm1hbmNlTG9nZ2VyLnN0b3BUaW1lc3BhbigncmVuZGVyQXBwbGljYXRpb25fUmVhY3RfcmVuZGVyJyk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0lQZXJmb3JtYW5jZUxvZ2dlcn0gZnJvbSAnLi9jcmVhdGVQZXJmb3JtYW5jZUxvZ2dlcic7XG5cbmltcG9ydCBHbG9iYWxQZXJmb3JtYW5jZUxvZ2dlciBmcm9tICcuL0dsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlQ29udGV4dH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBSZWFjdCBDb250ZXh0IHRoYXQgcHJvdmlkZXMgYSBzY29wZWQgaW5zdGFuY2Ugb2YgSVBlcmZvcm1hbmNlTG9nZ2VyLlxuICogV2Ugd3JhcCBldmVyeSA8QXBwQ29udGFpbmVyIC8+IHdpdGggYSBQcm92aWRlciBmb3IgdGhpcyBjb250ZXh0IHNvIHRoZSBsb2dnZXJcbiAqIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gZXZlcnkgY29tcG9uZW50LlxuICogU2VlIFJlYWN0IGRvY3MgYWJvdXQgdXNpbmcgQ29udGV4dDogaHR0cHM6Ly9yZWFjdC5kZXYvZG9jcy9jb250ZXh0Lmh0bWxcbiAqL1xuY29uc3QgUGVyZm9ybWFuY2VMb2dnZXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PElQZXJmb3JtYW5jZUxvZ2dlcj4gPVxuICBSZWFjdC5jcmVhdGVDb250ZXh0KEdsb2JhbFBlcmZvcm1hbmNlTG9nZ2VyKTtcbmlmIChfX0RFVl9fKSB7XG4gIFBlcmZvcm1hbmNlTG9nZ2VyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdQZXJmb3JtYW5jZUxvZ2dlckNvbnRleHQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUGVyZm9ybWFuY2VMb2dnZXIoKTogSVBlcmZvcm1hbmNlTG9nZ2VyIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoUGVyZm9ybWFuY2VMb2dnZXJDb250ZXh0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGVyZm9ybWFuY2VMb2dnZXJDb250ZXh0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge1Jvb3RUYWd9IGZyb20gJy4vUm9vdFRhZyc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgY2hpbGRyZW4/OiBSZWFjdC5Ob2RlLFxuICBmYWJyaWM/OiBib29sZWFuLFxuICByb290VGFnOiBudW1iZXIgfCBSb290VGFnLFxuICBpbml0aWFsUHJvcHM/OiB7Li4ufSxcbiAgc2hvd0FyY2hpdGVjdHVyZUluZGljYXRvcj86IGJvb2xlYW4sXG4gIFdyYXBwZXJDb21wb25lbnQ/OiA/UmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+LFxuICBpbnRlcm5hbF9leGNsdWRlTG9nQm94PzogYm9vbGVhbixcbiAgaW50ZXJuYWxfZXhjbHVkZUluc3BlY3Rvcj86IGJvb2xlYW4sXG58fT47XG5cbmNvbnN0IEFwcENvbnRhaW5lcjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8UHJvcHM+ID0gX19ERVZfX1xuICA/IHJlcXVpcmUoJy4vQXBwQ29udGFpbmVyLWRldicpLmRlZmF1bHRcbiAgOiByZXF1aXJlKCcuL0FwcENvbnRhaW5lci1wcm9kJykuZGVmYXVsdDtcblxubW9kdWxlLmV4cG9ydHMgPSBBcHBDb250YWluZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgUmVhY3REZXZUb29sc0FnZW50LFxuICBSZWFjdERldlRvb2xzR2xvYmFsSG9vayxcbn0gZnJvbSAnLi4vVHlwZXMvUmVhY3REZXZUb29sc1R5cGVzJztcbmltcG9ydCB0eXBlIHtQcm9wc30gZnJvbSAnLi9BcHBDb250YWluZXInO1xuXG5pbXBvcnQgUmVhY3ROYXRpdmVTdHlsZUF0dHJpYnV0ZXMgZnJvbSAnLi4vQ29tcG9uZW50cy9WaWV3L1JlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzJztcbmltcG9ydCBWaWV3IGZyb20gJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCBEZWJ1Z2dpbmdPdmVybGF5IGZyb20gJy4uL0RlYnVnZ2luZy9EZWJ1Z2dpbmdPdmVybGF5JztcbmltcG9ydCB1c2VTdWJzY3JpYmVUb0RlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeSBmcm9tICcuLi9EZWJ1Z2dpbmcvdXNlU3Vic2NyaWJlVG9EZWJ1Z2dpbmdPdmVybGF5UmVnaXN0cnknO1xuaW1wb3J0IFJDVERldmljZUV2ZW50RW1pdHRlciBmcm9tICcuLi9FdmVudEVtaXR0ZXIvUkNURGV2aWNlRXZlbnRFbWl0dGVyJztcbmltcG9ydCBSZWFjdERldlRvb2xzT3ZlcmxheSBmcm9tICcuLi9JbnNwZWN0b3IvUmVhY3REZXZUb29sc092ZXJsYXknO1xuaW1wb3J0IExvZ0JveE5vdGlmaWNhdGlvbkNvbnRhaW5lciBmcm9tICcuLi9Mb2dCb3gvTG9nQm94Tm90aWZpY2F0aW9uQ29udGFpbmVyJztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQge1Jvb3RUYWdDb250ZXh0LCBjcmVhdGVSb290VGFnfSBmcm9tICcuL1Jvb3RUYWcnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCB7dXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2t9ID0gUmVhY3Q7XG5cbmNvbnN0IHJlYWN0RGV2VG9vbHNIb29rOiBSZWFjdERldlRvb2xzR2xvYmFsSG9vayA9XG4gIHdpbmRvdy5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbi8vIFJlcXVpcmVkIGZvciBSZWFjdCBEZXZUb29scyB0byB2aWV3IC8gZWRpdCBSZWFjdCBOYXRpdmUgc3R5bGVzIGluIEZsaXBwZXIuXG4vLyBGbGlwcGVyIGRvZXNuJ3QgaW5qZWN0IHRoZXNlIHZhbHVlcyB3aGVuIGluaXRpYWxpemluZyBEZXZUb29scy5cbmlmIChyZWFjdERldlRvb2xzSG9vaykge1xuICByZWFjdERldlRvb2xzSG9vay5yZXNvbHZlUk5TdHlsZSA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvZmxhdHRlblN0eWxlJyk7XG4gIHJlYWN0RGV2VG9vbHNIb29rLm5hdGl2ZVN0eWxlRWRpdG9yVmFsaWRBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoXG4gICAgUmVhY3ROYXRpdmVTdHlsZUF0dHJpYnV0ZXMsXG4gICk7XG59XG5cbnR5cGUgSW5zcGVjdG9yRGVmZXJyZWRQcm9wcyA9IHtcbiAgaW5zcGVjdGVkVmlld1JlZjogSW5zcGVjdGVkVmlld1JlZixcbiAgb25JbnNwZWN0ZWRWaWV3UmVyZW5kZXJSZXF1ZXN0OiAoKSA9PiB2b2lkLFxuICByZWFjdERldlRvb2xzQWdlbnQ/OiBSZWFjdERldlRvb2xzQWdlbnQsXG59O1xuXG5jb25zdCBJbnNwZWN0b3JEZWZlcnJlZCA9ICh7XG4gIGluc3BlY3RlZFZpZXdSZWYsXG4gIG9uSW5zcGVjdGVkVmlld1JlcmVuZGVyUmVxdWVzdCxcbiAgcmVhY3REZXZUb29sc0FnZW50LFxufTogSW5zcGVjdG9yRGVmZXJyZWRQcm9wcykgPT4ge1xuICAvLyBEMzkzODI5NjcgYWRkcyBhIHJlcXVpcmUgY3ljbGU6IEluaXRpYWxpemVDb3JlIC0+IEFwcENvbnRhaW5lciAtPiBJbnNwZWN0b3IgLT4gSW5zcGVjdG9yUGFuZWwgLT4gU2Nyb2xsVmlldyAtPiBJbml0aWFsaXplQ29yZVxuICAvLyBXZSBjYW4ndCByZW1vdmUgaXQgeWV0LCBmYWxsYmFjayB0byBkeW5hbWljIHJlcXVpcmUgZm9yIG5vdy4gVGhpcyBpcyB0aGUgb25seSByZWFzb24gd2h5IHRoaXMgbG9naWMgaXMgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbi5cbiAgY29uc3QgSW5zcGVjdG9yID0gcmVxdWlyZSgnLi4vSW5zcGVjdG9yL0luc3BlY3RvcicpO1xuXG4gIHJldHVybiAoXG4gICAgPEluc3BlY3RvclxuICAgICAgaW5zcGVjdGVkVmlld1JlZj17aW5zcGVjdGVkVmlld1JlZn1cbiAgICAgIG9uUmVxdWVzdFJlcmVuZGVyQXBwPXtvbkluc3BlY3RlZFZpZXdSZXJlbmRlclJlcXVlc3R9XG4gICAgICByZWFjdERldlRvb2xzQWdlbnQ9e3JlYWN0RGV2VG9vbHNBZ2VudH1cbiAgICAvPlxuICApO1xufTtcblxuY29uc3QgQXBwQ29udGFpbmVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGZhYnJpYyxcbiAgaW5pdGlhbFByb3BzLFxuICBpbnRlcm5hbF9leGNsdWRlSW5zcGVjdG9yID0gZmFsc2UsXG4gIGludGVybmFsX2V4Y2x1ZGVMb2dCb3ggPSBmYWxzZSxcbiAgcm9vdFRhZyxcbiAgc2hvd0FyY2hpdGVjdHVyZUluZGljYXRvcixcbiAgV3JhcHBlckNvbXBvbmVudCxcbn06IFByb3BzKTogUmVhY3QuTm9kZSA9PiB7XG4gIGNvbnN0IGFwcENvbnRhaW5lclJvb3RWaWV3UmVmOiBBcHBDb250YWluZXJSb290Vmlld1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaW5uZXJWaWV3UmVmOiBJbnNwZWN0ZWRWaWV3UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBkZWJ1Z2dpbmdPdmVybGF5UmVmOiBEZWJ1Z2dpbmdPdmVybGF5UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gIHVzZVN1YnNjcmliZVRvRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5KFxuICAgIGFwcENvbnRhaW5lclJvb3RWaWV3UmVmLFxuICAgIGRlYnVnZ2luZ092ZXJsYXlSZWYsXG4gICk7XG5cbiAgY29uc3QgW2tleSwgc2V0S2V5XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbc2hvdWxkUmVuZGVySW5zcGVjdG9yLCBzZXRTaG91bGRSZW5kZXJJbnNwZWN0b3JdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVhY3REZXZUb29sc0FnZW50LCBzZXRSZWFjdERldlRvb2xzQWdlbnRdID1cbiAgICB1c2VTdGF0ZTxSZWFjdERldlRvb2xzQWdlbnQgfCB2b2lkPihyZWFjdERldlRvb2xzSG9vaz8ucmVhY3REZXZ0b29sc0FnZW50KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBpbnNwZWN0b3JTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIGlmICghaW50ZXJuYWxfZXhjbHVkZUluc3BlY3Rvcikge1xuICAgICAgaW5zcGVjdG9yU3Vic2NyaXB0aW9uID0gUkNURGV2aWNlRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKFxuICAgICAgICAndG9nZ2xlRWxlbWVudEluc3BlY3RvcicsXG4gICAgICAgICgpID0+IHNldFNob3VsZFJlbmRlckluc3BlY3Rvcih2YWx1ZSA9PiAhdmFsdWUpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVhY3REZXZUb29sc0FnZW50TGlzdGVuZXIgPSBudWxsO1xuICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgcmVuZGVyLCBzdWJzY3JpYmUgdG8gdGhlIGV2ZW50IGZyb20gUmVhY3QgRGV2VG9vbHMgaG9va1xuICAgIGlmIChyZWFjdERldlRvb2xzSG9vayAhPSBudWxsICYmIHJlYWN0RGV2VG9vbHNBZ2VudCA9PSBudWxsKSB7XG4gICAgICByZWFjdERldlRvb2xzQWdlbnRMaXN0ZW5lciA9IHNldFJlYWN0RGV2VG9vbHNBZ2VudDtcbiAgICAgIHJlYWN0RGV2VG9vbHNIb29rLm9uPy4oJ3JlYWN0LWRldnRvb2xzJywgcmVhY3REZXZUb29sc0FnZW50TGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpbnNwZWN0b3JTdWJzY3JpcHRpb24/LnJlbW92ZSgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHJlYWN0RGV2VG9vbHNIb29rPy5vZmYgIT0gbnVsbCAmJlxuICAgICAgICByZWFjdERldlRvb2xzQWdlbnRMaXN0ZW5lciAhPSBudWxsXG4gICAgICApIHtcbiAgICAgICAgcmVhY3REZXZUb29sc0hvb2sub2ZmKCdyZWFjdC1kZXZ0b29scycsIHJlYWN0RGV2VG9vbHNBZ2VudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIGxldCBpbm5lclZpZXc6IFJlYWN0Lk5vZGUgPSAoXG4gICAgPFZpZXdcbiAgICAgIGNvbGxhcHNhYmxlPXtyZWFjdERldlRvb2xzQWdlbnQgPT0gbnVsbCAmJiAhc2hvdWxkUmVuZGVySW5zcGVjdG9yfVxuICAgICAgcG9pbnRlckV2ZW50cz1cImJveC1ub25lXCJcbiAgICAgIGtleT17a2V5fVxuICAgICAgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9XG4gICAgICByZWY9e2lubmVyVmlld1JlZn0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9WaWV3PlxuICApO1xuXG4gIGlmIChXcmFwcGVyQ29tcG9uZW50ICE9IG51bGwpIHtcbiAgICBpbm5lclZpZXcgPSAoXG4gICAgICA8V3JhcHBlckNvbXBvbmVudFxuICAgICAgICBpbml0aWFsUHJvcHM9e2luaXRpYWxQcm9wc31cbiAgICAgICAgZmFicmljPXtmYWJyaWMgPT09IHRydWV9XG4gICAgICAgIHNob3dBcmNoaXRlY3R1cmVJbmRpY2F0b3I9e3Nob3dBcmNoaXRlY3R1cmVJbmRpY2F0b3IgPT09IHRydWV9PlxuICAgICAgICB7aW5uZXJWaWV3fVxuICAgICAgPC9XcmFwcGVyQ29tcG9uZW50PlxuICAgICk7XG4gIH1cblxuICBjb25zdCBvbkluc3BlY3RlZFZpZXdSZXJlbmRlclJlcXVlc3QgPSB1c2VDYWxsYmFjayhcbiAgICAoKSA9PiBzZXRLZXkoayA9PiBrICsgMSksXG4gICAgW10sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Um9vdFRhZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NyZWF0ZVJvb3RUYWcocm9vdFRhZyl9PlxuICAgICAgPFZpZXdcbiAgICAgICAgcmVmPXthcHBDb250YWluZXJSb290Vmlld1JlZn1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9XG4gICAgICAgIHBvaW50ZXJFdmVudHM9XCJib3gtbm9uZVwiPlxuICAgICAgICB7aW5uZXJWaWV3fVxuXG4gICAgICAgIDxEZWJ1Z2dpbmdPdmVybGF5IHJlZj17ZGVidWdnaW5nT3ZlcmxheVJlZn0gLz5cblxuICAgICAgICB7cmVhY3REZXZUb29sc0FnZW50ICE9IG51bGwgJiYgKFxuICAgICAgICAgIDxSZWFjdERldlRvb2xzT3ZlcmxheVxuICAgICAgICAgICAgaW5zcGVjdGVkVmlld1JlZj17aW5uZXJWaWV3UmVmfVxuICAgICAgICAgICAgcmVhY3REZXZUb29sc0FnZW50PXtyZWFjdERldlRvb2xzQWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7c2hvdWxkUmVuZGVySW5zcGVjdG9yICYmIChcbiAgICAgICAgICA8SW5zcGVjdG9yRGVmZXJyZWRcbiAgICAgICAgICAgIGluc3BlY3RlZFZpZXdSZWY9e2lubmVyVmlld1JlZn1cbiAgICAgICAgICAgIG9uSW5zcGVjdGVkVmlld1JlcmVuZGVyUmVxdWVzdD17b25JbnNwZWN0ZWRWaWV3UmVyZW5kZXJSZXF1ZXN0fVxuICAgICAgICAgICAgcmVhY3REZXZUb29sc0FnZW50PXtyZWFjdERldlRvb2xzQWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWludGVybmFsX2V4Y2x1ZGVMb2dCb3ggJiYgPExvZ0JveE5vdGlmaWNhdGlvbkNvbnRhaW5lciAvPn1cbiAgICAgIDwvVmlldz5cbiAgICA8L1Jvb3RUYWdDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtmbGV4OiAxfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBBcHBDb250YWluZXJSb290Vmlld1JlZiA9IFJlYWN0LlJlZk9iamVjdDxSZWFjdC5FbGVtZW50UmVmPFxuICB0eXBlb2YgVmlldyxcbj4gfCBudWxsPjtcbmV4cG9ydCB0eXBlIEluc3BlY3RlZFZpZXdSZWYgPSBSZWFjdC5SZWZPYmplY3Q8UmVhY3QuRWxlbWVudFJlZjxcbiAgdHlwZW9mIFZpZXcsXG4+IHwgbnVsbD47XG5leHBvcnQgdHlwZSBEZWJ1Z2dpbmdPdmVybGF5UmVmID0gUmVhY3QuUmVmT2JqZWN0PFJlYWN0LkVsZW1lbnRSZWY8XG4gIHR5cGVvZiBEZWJ1Z2dpbmdPdmVybGF5LFxuPiB8IG51bGw+O1xuXG5leHBvcnQgZGVmYXVsdCBBcHBDb250YWluZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1ZpZXdQcm9wc30gZnJvbSAnLi9WaWV3UHJvcFR5cGVzJztcblxuaW1wb3J0IGZsYXR0ZW5TdHlsZSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L2ZsYXR0ZW5TdHlsZSc7XG5pbXBvcnQgVGV4dEFuY2VzdG9yIGZyb20gJy4uLy4uL1RleHQvVGV4dEFuY2VzdG9yJztcbmltcG9ydCBWaWV3TmF0aXZlQ29tcG9uZW50IGZyb20gJy4vVmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB0eXBlIFByb3BzID0gVmlld1Byb3BzO1xuXG4vKipcbiAqIFRoZSBtb3N0IGZ1bmRhbWVudGFsIGNvbXBvbmVudCBmb3IgYnVpbGRpbmcgYSBVSSwgVmlldyBpcyBhIGNvbnRhaW5lciB0aGF0XG4gKiBzdXBwb3J0cyBsYXlvdXQgd2l0aCBmbGV4Ym94LCBzdHlsZSwgc29tZSB0b3VjaCBoYW5kbGluZywgYW5kIGFjY2Vzc2liaWxpdHlcbiAqIGNvbnRyb2xzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy92aWV3XG4gKi9cbmNvbnN0IFZpZXc6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFxuICBWaWV3UHJvcHMsXG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFZpZXdOYXRpdmVDb21wb25lbnQ+LFxuPiA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChcbiAgICB7XG4gICAgICBhY2Nlc3NpYmlsaXR5RWxlbWVudHNIaWRkZW4sXG4gICAgICBhY2Nlc3NpYmlsaXR5TGFiZWwsXG4gICAgICBhY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeSxcbiAgICAgIGFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uLFxuICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlLFxuICAgICAgYWNjZXNzaWJpbGl0eVZhbHVlLFxuICAgICAgJ2FyaWEtYnVzeSc6IGFyaWFCdXN5LFxuICAgICAgJ2FyaWEtY2hlY2tlZCc6IGFyaWFDaGVja2VkLFxuICAgICAgJ2FyaWEtZGlzYWJsZWQnOiBhcmlhRGlzYWJsZWQsXG4gICAgICAnYXJpYS1leHBhbmRlZCc6IGFyaWFFeHBhbmRlZCxcbiAgICAgICdhcmlhLWhpZGRlbic6IGFyaWFIaWRkZW4sXG4gICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBhcmlhTGFiZWxsZWRCeSxcbiAgICAgICdhcmlhLWxpdmUnOiBhcmlhTGl2ZSxcbiAgICAgICdhcmlhLXNlbGVjdGVkJzogYXJpYVNlbGVjdGVkLFxuICAgICAgJ2FyaWEtdmFsdWVtYXgnOiBhcmlhVmFsdWVNYXgsXG4gICAgICAnYXJpYS12YWx1ZW1pbic6IGFyaWFWYWx1ZU1pbixcbiAgICAgICdhcmlhLXZhbHVlbm93JzogYXJpYVZhbHVlTm93LFxuICAgICAgJ2FyaWEtdmFsdWV0ZXh0JzogYXJpYVZhbHVlVGV4dCxcbiAgICAgIGZvY3VzYWJsZSxcbiAgICAgIGlkLFxuICAgICAgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSxcbiAgICAgIG5hdGl2ZUlELFxuICAgICAgcG9pbnRlckV2ZW50cyxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IFZpZXdQcm9wcyxcbiAgICBmb3J3YXJkZWRSZWYsXG4gICkgPT4ge1xuICAgIGNvbnN0IGhhc1RleHRBbmNlc3RvciA9IFJlYWN0LnVzZUNvbnRleHQoVGV4dEFuY2VzdG9yKTtcbiAgICBjb25zdCBfYWNjZXNzaWJpbGl0eUxhYmVsbGVkQnkgPVxuICAgICAgYXJpYUxhYmVsbGVkQnk/LnNwbGl0KC9cXHMqLFxccyovZykgPz8gYWNjZXNzaWJpbGl0eUxhYmVsbGVkQnk7XG5cbiAgICBsZXQgX2FjY2Vzc2liaWxpdHlTdGF0ZTtcbiAgICBpZiAoXG4gICAgICBhY2Nlc3NpYmlsaXR5U3RhdGUgIT0gbnVsbCB8fFxuICAgICAgYXJpYUJ1c3kgIT0gbnVsbCB8fFxuICAgICAgYXJpYUNoZWNrZWQgIT0gbnVsbCB8fFxuICAgICAgYXJpYURpc2FibGVkICE9IG51bGwgfHxcbiAgICAgIGFyaWFFeHBhbmRlZCAhPSBudWxsIHx8XG4gICAgICBhcmlhU2VsZWN0ZWQgIT0gbnVsbFxuICAgICkge1xuICAgICAgX2FjY2Vzc2liaWxpdHlTdGF0ZSA9IHtcbiAgICAgICAgYnVzeTogYXJpYUJ1c3kgPz8gYWNjZXNzaWJpbGl0eVN0YXRlPy5idXN5LFxuICAgICAgICBjaGVja2VkOiBhcmlhQ2hlY2tlZCA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmNoZWNrZWQsXG4gICAgICAgIGRpc2FibGVkOiBhcmlhRGlzYWJsZWQgPz8gYWNjZXNzaWJpbGl0eVN0YXRlPy5kaXNhYmxlZCxcbiAgICAgICAgZXhwYW5kZWQ6IGFyaWFFeHBhbmRlZCA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmV4cGFuZGVkLFxuICAgICAgICBzZWxlY3RlZDogYXJpYVNlbGVjdGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uc2VsZWN0ZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBsZXQgX2FjY2Vzc2liaWxpdHlWYWx1ZTtcbiAgICBpZiAoXG4gICAgICBhY2Nlc3NpYmlsaXR5VmFsdWUgIT0gbnVsbCB8fFxuICAgICAgYXJpYVZhbHVlTWF4ICE9IG51bGwgfHxcbiAgICAgIGFyaWFWYWx1ZU1pbiAhPSBudWxsIHx8XG4gICAgICBhcmlhVmFsdWVOb3cgIT0gbnVsbCB8fFxuICAgICAgYXJpYVZhbHVlVGV4dCAhPSBudWxsXG4gICAgKSB7XG4gICAgICBfYWNjZXNzaWJpbGl0eVZhbHVlID0ge1xuICAgICAgICBtYXg6IGFyaWFWYWx1ZU1heCA/PyBhY2Nlc3NpYmlsaXR5VmFsdWU/Lm1heCxcbiAgICAgICAgbWluOiBhcmlhVmFsdWVNaW4gPz8gYWNjZXNzaWJpbGl0eVZhbHVlPy5taW4sXG4gICAgICAgIG5vdzogYXJpYVZhbHVlTm93ID8/IGFjY2Vzc2liaWxpdHlWYWx1ZT8ubm93LFxuICAgICAgICB0ZXh0OiBhcmlhVmFsdWVUZXh0ID8/IGFjY2Vzc2liaWxpdHlWYWx1ZT8udGV4dCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gJEZsb3dGaXhNZVt1bmRlcmNvbnN0cmFpbmVkLWltcGxpY2l0LWluc3RhbnRpYXRpb25dXG4gICAgbGV0IHN0eWxlID0gZmxhdHRlblN0eWxlKG90aGVyUHJvcHMuc3R5bGUpO1xuXG4gICAgLy8gJEZsb3dGaXhNZVtza2V0Y2h5LW51bGwtbWl4ZWRdXG4gICAgY29uc3QgbmV3UG9pbnRlckV2ZW50cyA9IHN0eWxlPy5wb2ludGVyRXZlbnRzIHx8IHBvaW50ZXJFdmVudHM7XG5cbiAgICBjb25zdCBhY3R1YWxWaWV3ID0gKFxuICAgICAgPFZpZXdOYXRpdmVDb21wb25lbnRcbiAgICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uPXtcbiAgICAgICAgICBhcmlhTGl2ZSA9PT0gJ29mZicgPyAnbm9uZScgOiBhcmlhTGl2ZSA/PyBhY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvblxuICAgICAgICB9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17YXJpYUxhYmVsID8/IGFjY2Vzc2liaWxpdHlMYWJlbH1cbiAgICAgICAgZm9jdXNhYmxlPXt0YWJJbmRleCAhPT0gdW5kZWZpbmVkID8gIXRhYkluZGV4IDogZm9jdXNhYmxlfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e19hY2Nlc3NpYmlsaXR5U3RhdGV9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlFbGVtZW50c0hpZGRlbj17YXJpYUhpZGRlbiA/PyBhY2Nlc3NpYmlsaXR5RWxlbWVudHNIaWRkZW59XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbGxlZEJ5PXtfYWNjZXNzaWJpbGl0eUxhYmVsbGVkQnl9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlWYWx1ZT17X2FjY2Vzc2liaWxpdHlWYWx1ZX1cbiAgICAgICAgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eT17XG4gICAgICAgICAgYXJpYUhpZGRlbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyAnbm8taGlkZS1kZXNjZW5kYW50cydcbiAgICAgICAgICAgIDogaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eVxuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZUlEPXtpZCA/PyBuYXRpdmVJRH1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICBwb2ludGVyRXZlbnRzPXtuZXdQb2ludGVyRXZlbnRzfVxuICAgICAgICByZWY9e2ZvcndhcmRlZFJlZn1cbiAgICAgIC8+XG4gICAgKTtcblxuICAgIGlmIChoYXNUZXh0QW5jZXN0b3IpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0QW5jZXN0b3IuUHJvdmlkZXIgdmFsdWU9e2ZhbHNlfT5cbiAgICAgICAgICB7YWN0dWFsVmlld31cbiAgICAgICAgPC9UZXh0QW5jZXN0b3IuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhY3R1YWxWaWV3O1xuICB9LFxuKTtcblxuVmlldy5kaXNwbGF5TmFtZSA9ICdWaWV3JztcblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB0aGUgZGVzY2VuZGFudCBvZiBhIDxUZXh0PiBlbGVtZW50LlxuICovXG5jb25zdCBUZXh0QW5jZXN0b3JDb250ZXh0OiBSZWFjdCRDb250ZXh0PCRGbG93Rml4TWU+ID1cbiAgUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7XG5pZiAoX19ERVZfXykge1xuICBUZXh0QW5jZXN0b3JDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1RleHRBbmNlc3RvckNvbnRleHQnO1xufVxubW9kdWxlLmV4cG9ydHMgPSBUZXh0QW5jZXN0b3JDb250ZXh0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgSG9zdENvbXBvbmVudCxcbiAgUGFydGlhbFZpZXdDb25maWcsXG59IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBOYXRpdmVDb21wb25lbnRSZWdpc3RyeSBmcm9tICcuLi8uLi9OYXRpdmVDb21wb25lbnQvTmF0aXZlQ29tcG9uZW50UmVnaXN0cnknO1xuaW1wb3J0IGNvZGVnZW5OYXRpdmVDb21tYW5kcyBmcm9tICcuLi8uLi9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbW1hbmRzJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IHt0eXBlIFZpZXdQcm9wcyBhcyBQcm9wc30gZnJvbSAnLi9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IF9fSU5URVJOQUxfVklFV19DT05GSUc6IFBhcnRpYWxWaWV3Q29uZmlnID1cbiAgUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJ1xuICAgID8ge1xuICAgICAgICB1aVZpZXdDbGFzc05hbWU6ICdSQ1RWaWV3JyxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgLy8gUmVhY3RDbGlwcGluZ1ZpZXdNYW5hZ2VyIEBSZWFjdFByb3BzXG4gICAgICAgICAgcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzOiB0cnVlLFxuXG4gICAgICAgICAgLy8gUmVhY3RWaWV3TWFuYWdlciBAUmVhY3RQcm9wc1xuICAgICAgICAgIGFjY2Vzc2libGU6IHRydWUsXG4gICAgICAgICAgaGFzVFZQcmVmZXJyZWRGb2N1czogdHJ1ZSxcbiAgICAgICAgICBuZXh0Rm9jdXNEb3duOiB0cnVlLFxuICAgICAgICAgIG5leHRGb2N1c0ZvcndhcmQ6IHRydWUsXG4gICAgICAgICAgbmV4dEZvY3VzTGVmdDogdHJ1ZSxcbiAgICAgICAgICBuZXh0Rm9jdXNSaWdodDogdHJ1ZSxcbiAgICAgICAgICBuZXh0Rm9jdXNVcDogdHJ1ZSxcblxuICAgICAgICAgIGJvcmRlclJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiB0cnVlLFxuICAgICAgICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiB0cnVlLFxuICAgICAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB0cnVlLFxuICAgICAgICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IHRydWUsXG4gICAgICAgICAgYm9yZGVyVG9wU3RhcnRSYWRpdXM6IHRydWUsXG4gICAgICAgICAgYm9yZGVyVG9wRW5kUmFkaXVzOiB0cnVlLFxuICAgICAgICAgIGJvcmRlckJvdHRvbVN0YXJ0UmFkaXVzOiB0cnVlLFxuICAgICAgICAgIGJvcmRlckJvdHRvbUVuZFJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJFbmRFbmRSYWRpdXM6IHRydWUsXG4gICAgICAgICAgYm9yZGVyRW5kU3RhcnRSYWRpdXM6IHRydWUsXG4gICAgICAgICAgYm9yZGVyU3RhcnRFbmRSYWRpdXM6IHRydWUsXG4gICAgICAgICAgYm9yZGVyU3RhcnRTdGFydFJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJTdHlsZTogdHJ1ZSxcbiAgICAgICAgICBoaXRTbG9wOiB0cnVlLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IHRydWUsXG4gICAgICAgICAgbmF0aXZlQmFja2dyb3VuZEFuZHJvaWQ6IHRydWUsXG4gICAgICAgICAgbmF0aXZlRm9yZWdyb3VuZEFuZHJvaWQ6IHRydWUsXG4gICAgICAgICAgbmVlZHNPZmZzY3JlZW5BbHBoYUNvbXBvc2l0aW5nOiB0cnVlLFxuXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IHRydWUsXG4gICAgICAgICAgYm9yZGVyTGVmdFdpZHRoOiB0cnVlLFxuICAgICAgICAgIGJvcmRlclJpZ2h0V2lkdGg6IHRydWUsXG4gICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IHRydWUsXG4gICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGg6IHRydWUsXG4gICAgICAgICAgYm9yZGVyU3RhcnRXaWR0aDogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJFbmRXaWR0aDogdHJ1ZSxcblxuICAgICAgICAgIGJvcmRlckNvbG9yOiB7XG4gICAgICAgICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3JkZXJMZWZ0Q29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvcmRlclJpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvcmRlclRvcENvbG9yOiB7XG4gICAgICAgICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3JkZXJCb3R0b21Db2xvcjoge1xuICAgICAgICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9yZGVyU3RhcnRDb2xvcjoge1xuICAgICAgICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9yZGVyRW5kQ29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvcmRlckJsb2NrQ29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvcmRlckJsb2NrRW5kQ29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvcmRlckJsb2NrU3RhcnRDb2xvcjoge1xuICAgICAgICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBmb2N1c2FibGU6IHRydWUsXG4gICAgICAgICAgb3ZlcmZsb3c6IHRydWUsXG4gICAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbF9sYXlvdXRDb25mb3JtYW5jZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgdWlWaWV3Q2xhc3NOYW1lOiAnUkNUVmlldycsXG4gICAgICB9O1xuXG5jb25zdCBWaWV3TmF0aXZlQ29tcG9uZW50OiBIb3N0Q29tcG9uZW50PFByb3BzPiA9XG4gIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldDxQcm9wcz4oJ1JDVFZpZXcnLCAoKSA9PiBfX0lOVEVSTkFMX1ZJRVdfQ09ORklHKTtcblxuaW50ZXJmYWNlIE5hdGl2ZUNvbW1hbmRzIHtcbiAgK2hvdHNwb3RVcGRhdGU6IChcbiAgICB2aWV3UmVmOiBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8bWl4ZWQ+PixcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICApID0+IHZvaWQ7XG4gICtzZXRQcmVzc2VkOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxIb3N0Q29tcG9uZW50PG1peGVkPj4sXG4gICAgcHJlc3NlZDogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQ29tbWFuZHM6IE5hdGl2ZUNvbW1hbmRzID0gY29kZWdlbk5hdGl2ZUNvbW1hbmRzPE5hdGl2ZUNvbW1hbmRzPih7XG4gIHN1cHBvcnRlZENvbW1hbmRzOiBbJ2hvdHNwb3RVcGRhdGUnLCAnc2V0UHJlc3NlZCddLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdOYXRpdmVDb21wb25lbnQ7XG5cbmV4cG9ydCB0eXBlIFZpZXdOYXRpdmVDb21wb25lbnRUeXBlID0gSG9zdENvbXBvbmVudDxQcm9wcz47XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBIb3N0Q29tcG9uZW50LFxuICBQYXJ0aWFsVmlld0NvbmZpZyxcbn0gZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5cbmltcG9ydCBnZXROYXRpdmVDb21wb25lbnRBdHRyaWJ1dGVzIGZyb20gJy4uL1JlYWN0TmF0aXZlL2dldE5hdGl2ZUNvbXBvbmVudEF0dHJpYnV0ZXMnO1xuaW1wb3J0IFVJTWFuYWdlciBmcm9tICcuLi9SZWFjdE5hdGl2ZS9VSU1hbmFnZXInO1xuaW1wb3J0ICogYXMgUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkgZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnknO1xuaW1wb3J0IHZlcmlmeUNvbXBvbmVudEF0dHJpYnV0ZUVxdWl2YWxlbmNlIGZyb20gJy4uL1V0aWxpdGllcy92ZXJpZnlDb21wb25lbnRBdHRyaWJ1dGVFcXVpdmFsZW5jZSc7XG5pbXBvcnQgKiBhcyBTdGF0aWNWaWV3Q29uZmlnVmFsaWRhdG9yIGZyb20gJy4vU3RhdGljVmlld0NvbmZpZ1ZhbGlkYXRvcic7XG5pbXBvcnQge2NyZWF0ZVZpZXdDb25maWd9IGZyb20gJy4vVmlld0NvbmZpZyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmxldCBnZXRSdW50aW1lQ29uZmlnO1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIGNvbXBvbmVudFxuICogc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdXNpbmcgcmVmbGVjdGlvbiBvZiB0aGUgbmF0aXZlIGNvbXBvbmVudCBhdCBydW50aW1lLlxuICpcbiAqIFRoZSBwcm92aWRlciBzaG91bGQgcmV0dXJuIG51bGwgaWYgdGhlIG5hdGl2ZSBjb21wb25lbnQgaXMgdW5hdmFpbGFibGUgaW5cbiAqIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UnVudGltZUNvbmZpZ1Byb3ZpZGVyKFxuICBydW50aW1lQ29uZmlnUHJvdmlkZXI6IChuYW1lOiBzdHJpbmcpID0+ID97XG4gICAgbmF0aXZlOiBib29sZWFuLFxuICAgIHN0cmljdDogYm9vbGVhbixcbiAgICB2ZXJpZnk6IGJvb2xlYW4sXG4gIH0sXG4pOiB2b2lkIHtcbiAgaWYgKGdldFJ1bnRpbWVDb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgIGdldFJ1bnRpbWVDb25maWcgPSBydW50aW1lQ29uZmlnUHJvdmlkZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGEgYE5hdGl2ZUNvbXBvbmVudGAgdGhhdCBjYW4gYmUgcmVuZGVyZWQgYnkgUmVhY3QgTmF0aXZlLlxuICpcbiAqIFRoZSBzdXBwbGllZCBgdmlld0NvbmZpZ1Byb3ZpZGVyYCBtYXkgb3IgbWF5IG5vdCBiZSBpbnZva2VkIGFuZCB1dGlsaXplZCxcbiAqIGRlcGVuZGluZyBvbiBob3cgYHNldFJ1bnRpbWVDb25maWdQcm92aWRlcmAgaXMgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldDxDb25maWc+KFxuICBuYW1lOiBzdHJpbmcsXG4gIHZpZXdDb25maWdQcm92aWRlcjogKCkgPT4gUGFydGlhbFZpZXdDb25maWcsXG4pOiBIb3N0Q29tcG9uZW50PENvbmZpZz4ge1xuICBSZWFjdE5hdGl2ZVZpZXdDb25maWdSZWdpc3RyeS5yZWdpc3RlcihuYW1lLCAoKSA9PiB7XG4gICAgY29uc3Qge25hdGl2ZSwgc3RyaWN0LCB2ZXJpZnl9ID0gZ2V0UnVudGltZUNvbmZpZz8uKG5hbWUpID8/IHtcbiAgICAgIG5hdGl2ZTogIWdsb2JhbC5STiRCcmlkZ2VsZXNzLFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICAgIHZlcmlmeTogZmFsc2UsXG4gICAgfTtcblxuICAgIGxldCB2aWV3Q29uZmlnO1xuICAgIGlmIChuYXRpdmUpIHtcbiAgICAgIHZpZXdDb25maWcgPSBnZXROYXRpdmVDb21wb25lbnRBdHRyaWJ1dGVzKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2aWV3Q29uZmlnID0gY3JlYXRlVmlld0NvbmZpZyh2aWV3Q29uZmlnUHJvdmlkZXIoKSk7XG4gICAgICBpZiAodmlld0NvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgIHZpZXdDb25maWcgPSBnZXROYXRpdmVDb21wb25lbnRBdHRyaWJ1dGVzKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZnkpIHtcbiAgICAgIGNvbnN0IG5hdGl2ZVZpZXdDb25maWcgPSBuYXRpdmVcbiAgICAgICAgPyB2aWV3Q29uZmlnXG4gICAgICAgIDogZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcyhuYW1lKTtcbiAgICAgIGNvbnN0IHN0YXRpY1ZpZXdDb25maWcgPSBuYXRpdmVcbiAgICAgICAgPyBjcmVhdGVWaWV3Q29uZmlnKHZpZXdDb25maWdQcm92aWRlcigpKVxuICAgICAgICA6IHZpZXdDb25maWc7XG5cbiAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk91dHB1dCA9IFN0YXRpY1ZpZXdDb25maWdWYWxpZGF0b3IudmFsaWRhdGUoXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBuYXRpdmVWaWV3Q29uZmlnLFxuICAgICAgICAgIHN0YXRpY1ZpZXdDb25maWcsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRpb25PdXRwdXQudHlwZSA9PT0gJ2ludmFsaWQnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFN0YXRpY1ZpZXdDb25maWdWYWxpZGF0b3Iuc3RyaW5naWZ5VmFsaWRhdGlvblJlc3VsdChcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk91dHB1dCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVyaWZ5Q29tcG9uZW50QXR0cmlidXRlRXF1aXZhbGVuY2UobmF0aXZlVmlld0NvbmZpZywgc3RhdGljVmlld0NvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpZXdDb25maWc7XG4gIH0pO1xuXG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gYE5hdGl2ZUNvbXBvbmVudGAgaXMgYWN0dWFsbHkgc3RyaW5nIVxuICByZXR1cm4gbmFtZTtcbn1cblxuLyoqXG4gKiBTYW1lIGFzIGBOYXRpdmVDb21wb25lbnRSZWdpc3RyeS5nZXQoLi4uKWAsIGV4Y2VwdCB0aGlzIHdpbGwgY2hlY2sgZWl0aGVyXG4gKiB0aGUgYHNldFJ1bnRpbWVDb25maWdQcm92aWRlcmAgY29uZmlndXJhdGlvbiBvciB1c2UgbmF0aXZlIHJlZmxlY3Rpb24gKHNsb3cpXG4gKiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIG5hdGl2ZSBjb21wb25lbnQgaXMgYXZhaWxhYmxlLlxuICpcbiAqIElmIHRoZSBuYXRpdmUgY29tcG9uZW50IGlzIG5vdCBhdmFpbGFibGUsIGEgc3R1YiBjb21wb25lbnQgaXMgcmV0dXJuZWQuIE5vdGVcbiAqIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGlzIG5vdCBgSG9zdENvbXBvbmVudGAgYmVjYXVzZSB0aGUgcmV0dXJuZWRcbiAqIGNvbXBvbmVudCBpbnN0YW5jZSBpcyBub3QgZ3VhcmFudGVlZCB0byBoYXZlIG5hdGl2ZSBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2l0aEZhbGxiYWNrX0RFUFJFQ0FURUQ8Q29uZmlnPihcbiAgbmFtZTogc3RyaW5nLFxuICB2aWV3Q29uZmlnUHJvdmlkZXI6ICgpID0+IFBhcnRpYWxWaWV3Q29uZmlnLFxuKTogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8Q29uZmlnPiB7XG4gIGlmIChnZXRSdW50aW1lQ29uZmlnID09IG51bGwpIHtcbiAgICAvLyBgZ2V0UnVudGltZUNvbmZpZyA9PSBudWxsYCB3aGVuIHN0YXRpYyB2aWV3IGNvbmZpZ3MgYXJlIGRpc2FibGVkXG4gICAgLy8gSWYgYHNldFJ1bnRpbWVDb25maWdQcm92aWRlcmAgaXMgbm90IGNvbmZpZ3VyZWQsIHVzZSBuYXRpdmUgcmVmbGVjdGlvbi5cbiAgICBpZiAoaGFzTmF0aXZlVmlld0NvbmZpZyhuYW1lKSkge1xuICAgICAgcmV0dXJuIGdldDxDb25maWc+KG5hbWUsIHZpZXdDb25maWdQcm92aWRlcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIHJ1bnRpbWUgY29uZmlnLCB0aGVuIHRoZSBuYXRpdmUgY29tcG9uZW50IGlzIHVuYXZhaWxhYmxlLlxuICAgIGlmIChnZXRSdW50aW1lQ29uZmlnKG5hbWUpICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBnZXQ8Q29uZmlnPihuYW1lLCB2aWV3Q29uZmlnUHJvdmlkZXIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IEZhbGxiYWNrTmF0aXZlQ29tcG9uZW50ID0gZnVuY3Rpb24gKHByb3BzOiBDb25maWcpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgRmFsbGJhY2tOYXRpdmVDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmFsbGJhY2soJHtuYW1lfSlgO1xuICByZXR1cm4gRmFsbGJhY2tOYXRpdmVDb21wb25lbnQ7XG59XG5cbmZ1bmN0aW9uIGhhc05hdGl2ZVZpZXdDb25maWcobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGludmFyaWFudChnZXRSdW50aW1lQ29uZmlnID09IG51bGwsICdVbmV4cGVjdGVkIGludm9jYXRpb24hJyk7XG4gIHJldHVybiBVSU1hbmFnZXIuZ2V0Vmlld01hbmFnZXJDb25maWcobmFtZSkgIT0gbnVsbDtcbn1cblxuLyoqXG4gKiBVbnN0YWJsZSBBUEkuIERvIG5vdCB1c2UhXG4gKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGVyZSBpcyBhIFN0YXRpY1ZpZXdDb25maWcgcmVnaXN0ZXJlZCBmb3IgdGhlXG4gKiBjb21wb25lbnQgbmFtZSByZWNlaXZlZCBhcyBhIHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2hhc1N0YXRpY1ZpZXdDb25maWcobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtuYXRpdmV9ID0gZ2V0UnVudGltZUNvbmZpZz8uKG5hbWUpID8/IHtcbiAgICBuYXRpdmU6IHRydWUsXG4gIH07XG4gIHJldHVybiAhbmF0aXZlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlcyA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvVmlldy9SZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlcycpO1xuY29uc3QgcmVzb2x2ZUFzc2V0U291cmNlID0gcmVxdWlyZSgnLi4vSW1hZ2UvcmVzb2x2ZUFzc2V0U291cmNlJyk7XG5jb25zdCBwcm9jZXNzQ29sb3IgPSByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQ7XG5jb25zdCBwcm9jZXNzQ29sb3JBcnJheSA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yQXJyYXknKTtcbmNvbnN0IGluc2V0c0RpZmZlciA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9kaWZmZXIvaW5zZXRzRGlmZmVyJyk7XG5jb25zdCBtYXRyaWNlc0RpZmZlciA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9kaWZmZXIvbWF0cmljZXNEaWZmZXInKTtcbmNvbnN0IHBvaW50c0RpZmZlciA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9kaWZmZXIvcG9pbnRzRGlmZmVyJyk7XG5jb25zdCBzaXplc0RpZmZlciA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9kaWZmZXIvc2l6ZXNEaWZmZXInKTtcbmNvbnN0IFVJTWFuYWdlciA9IHJlcXVpcmUoJy4vVUlNYW5hZ2VyJyk7XG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcbmNvbnN0IG51bGx0aHJvd3MgPSByZXF1aXJlKCdudWxsdGhyb3dzJyk7XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZUNvbXBvbmVudEF0dHJpYnV0ZXModWlWaWV3Q2xhc3NOYW1lOiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCB2aWV3Q29uZmlnID0gVUlNYW5hZ2VyLmdldFZpZXdNYW5hZ2VyQ29uZmlnKHVpVmlld0NsYXNzTmFtZSk7XG5cbiAgaW52YXJpYW50KFxuICAgIHZpZXdDb25maWcgIT0gbnVsbCAmJiB2aWV3Q29uZmlnLk5hdGl2ZVByb3BzICE9IG51bGwsXG4gICAgJ3JlcXVpcmVOYXRpdmVDb21wb25lbnQ6IFwiJXNcIiB3YXMgbm90IGZvdW5kIGluIHRoZSBVSU1hbmFnZXIuJyxcbiAgICB1aVZpZXdDbGFzc05hbWUsXG4gICk7XG5cbiAgLy8gVE9ETzogVGhpcyBzZWVtcyBsaWtlIGEgd2hvbGUgbG90IG9mIHJ1bnRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIGV2ZXJ5XG4gIC8vIG5hdGl2ZSBjb21wb25lbnQgdGhhdCBjYW4gYmUgZWl0aGVyIGF2b2lkZWQgb3Igc2ltcGxpZmllZC5cbiAgbGV0IHtiYXNlTW9kdWxlTmFtZSwgYnViYmxpbmdFdmVudFR5cGVzLCBkaXJlY3RFdmVudFR5cGVzfSA9IHZpZXdDb25maWc7XG4gIGxldCBuYXRpdmVQcm9wcyA9IHZpZXdDb25maWcuTmF0aXZlUHJvcHM7XG5cbiAgYnViYmxpbmdFdmVudFR5cGVzID0gYnViYmxpbmdFdmVudFR5cGVzID8/IHt9O1xuICBkaXJlY3RFdmVudFR5cGVzID0gZGlyZWN0RXZlbnRUeXBlcyA/PyB7fTtcblxuICB3aGlsZSAoYmFzZU1vZHVsZU5hbWUpIHtcbiAgICBjb25zdCBiYXNlTW9kdWxlID0gVUlNYW5hZ2VyLmdldFZpZXdNYW5hZ2VyQ29uZmlnKGJhc2VNb2R1bGVOYW1lKTtcbiAgICBpZiAoIWJhc2VNb2R1bGUpIHtcbiAgICAgIGJhc2VNb2R1bGVOYW1lID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYnViYmxpbmdFdmVudFR5cGVzID0ge1xuICAgICAgICAuLi5iYXNlTW9kdWxlLmJ1YmJsaW5nRXZlbnRUeXBlcyxcbiAgICAgICAgLi4uYnViYmxpbmdFdmVudFR5cGVzLFxuICAgICAgfTtcbiAgICAgIGRpcmVjdEV2ZW50VHlwZXMgPSB7XG4gICAgICAgIC4uLmJhc2VNb2R1bGUuZGlyZWN0RXZlbnRUeXBlcyxcbiAgICAgICAgLi4uZGlyZWN0RXZlbnRUeXBlcyxcbiAgICAgIH07XG4gICAgICBuYXRpdmVQcm9wcyA9IHtcbiAgICAgICAgLi4uYmFzZU1vZHVsZS5OYXRpdmVQcm9wcyxcbiAgICAgICAgLi4ubmF0aXZlUHJvcHMsXG4gICAgICB9O1xuICAgICAgYmFzZU1vZHVsZU5hbWUgPSBiYXNlTW9kdWxlLmJhc2VNb2R1bGVOYW1lO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHZhbGlkQXR0cmlidXRlczoge1tzdHJpbmddOiBtaXhlZH0gPSB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBuYXRpdmVQcm9wcykge1xuICAgIGNvbnN0IHR5cGVOYW1lID0gbmF0aXZlUHJvcHNba2V5XTtcbiAgICBjb25zdCBkaWZmID0gZ2V0RGlmZmVyRm9yVHlwZSh0eXBlTmFtZSk7XG4gICAgY29uc3QgcHJvY2VzcyA9IGdldFByb2Nlc3NvckZvclR5cGUodHlwZU5hbWUpO1xuXG4gICAgLy8gSWYgZGlmZiBvciBwcm9jZXNzID09IG51bGwsIG9taXQgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgZnJvbSB0aGUgQXR0cmlidXRlXG4gICAgLy8gV2h5OlxuICAgIC8vICAxLiBDb25zaXN0ZW5jeSB3aXRoIEF0dHJpYnV0ZVR5cGUgZmxvdyB0eXBlXG4gICAgLy8gIDIuIENvbnNpc3RlbmN5IHdpdGggU3RhdGljIFZpZXcgQ29uZmlncywgd2hpY2ggb21pdCB0aGUgbnVsbCBwcm9wZXJ0aWVzXG4gICAgdmFsaWRBdHRyaWJ1dGVzW2tleV0gPVxuICAgICAgZGlmZiA9PSBudWxsXG4gICAgICAgID8gcHJvY2VzcyA9PSBudWxsXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiB7cHJvY2Vzc31cbiAgICAgICAgOiBwcm9jZXNzID09IG51bGxcbiAgICAgICAgPyB7ZGlmZn1cbiAgICAgICAgOiB7ZGlmZiwgcHJvY2Vzc307XG4gIH1cblxuICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgY3VycmVudCBzZXR1cCBkZWNsYXJlcyBzdHlsZSBwcm9wZXJ0aWVzIGFzIHRvcC1sZXZlbFxuICAvLyBwcm9wcy4gVGhpcyBtYWtlcyBpdCBzbyB3ZSBhbGxvdyBzdHlsZSBwcm9wZXJ0aWVzIGluIHRoZSBgc3R5bGVgIHByb3AuXG4gIC8vIFRPRE86IE1vdmUgc3R5bGUgcHJvcGVydGllcyBpbnRvIGEgYHN0eWxlYCBwcm9wIGFuZCBkaXNhbGxvdyB0aGVtIGFzXG4gIC8vIHRvcC1sZXZlbCBwcm9wcyBvbiB0aGUgbmF0aXZlIHNpZGUuXG4gIHZhbGlkQXR0cmlidXRlcy5zdHlsZSA9IFJlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzO1xuXG4gIE9iamVjdC5hc3NpZ24odmlld0NvbmZpZywge1xuICAgIHVpVmlld0NsYXNzTmFtZSxcbiAgICB2YWxpZEF0dHJpYnV0ZXMsXG4gICAgYnViYmxpbmdFdmVudFR5cGVzLFxuICAgIGRpcmVjdEV2ZW50VHlwZXMsXG4gIH0pO1xuXG4gIGF0dGFjaERlZmF1bHRFdmVudFR5cGVzKHZpZXdDb25maWcpO1xuXG4gIHJldHVybiB2aWV3Q29uZmlnO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hEZWZhdWx0RXZlbnRUeXBlcyh2aWV3Q29uZmlnOiBhbnkpIHtcbiAgLy8gVGhpcyBpcyBzdXBwb3J0ZWQgb24gVUlNYW5hZ2VyIHBsYXRmb3JtcyAoZXg6IEFuZHJvaWQpLFxuICAvLyBhcyBsYXp5IHZpZXcgbWFuYWdlcnMgYXJlIG5vdCBpbXBsZW1lbnRlZCBmb3IgYWxsIHBsYXRmb3Jtcy5cbiAgLy8gU2VlIFtVSU1hbmFnZXJdIGZvciBkZXRhaWxzIG9uIGNvbnN0YW50cyBhbmQgaW1wbGVtZW50YXRpb25zLlxuICBjb25zdCBjb25zdGFudHMgPSBVSU1hbmFnZXIuZ2V0Q29uc3RhbnRzKCk7XG4gIGlmIChjb25zdGFudHMuVmlld01hbmFnZXJOYW1lcyB8fCBjb25zdGFudHMuTGF6eVZpZXdNYW5hZ2Vyc0VuYWJsZWQpIHtcbiAgICAvLyBMYXp5IHZpZXcgbWFuYWdlcnMgZW5hYmxlZC5cbiAgICB2aWV3Q29uZmlnID0gbWVyZ2UoXG4gICAgICB2aWV3Q29uZmlnLFxuICAgICAgbnVsbHRocm93cyhVSU1hbmFnZXIuZ2V0RGVmYXVsdEV2ZW50VHlwZXMpKCksXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB2aWV3Q29uZmlnLmJ1YmJsaW5nRXZlbnRUeXBlcyA9IG1lcmdlKFxuICAgICAgdmlld0NvbmZpZy5idWJibGluZ0V2ZW50VHlwZXMsXG4gICAgICBjb25zdGFudHMuZ2VuZXJpY0J1YmJsaW5nRXZlbnRUeXBlcyxcbiAgICApO1xuICAgIHZpZXdDb25maWcuZGlyZWN0RXZlbnRUeXBlcyA9IG1lcmdlKFxuICAgICAgdmlld0NvbmZpZy5kaXJlY3RFdmVudFR5cGVzLFxuICAgICAgY29uc3RhbnRzLmdlbmVyaWNEaXJlY3RFdmVudFR5cGVzLFxuICAgICk7XG4gIH1cbn1cblxuLy8gVE9ETzogRmlndXJlIG91dCBob3cgdG8gYXZvaWQgYWxsIHRoaXMgcnVudGltZSBpbml0aWFsaXphdGlvbiBjb3N0LlxuZnVuY3Rpb24gbWVyZ2UoZGVzdGluYXRpb246ID9PYmplY3QsIHNvdXJjZTogP09iamVjdCk6ID9PYmplY3Qge1xuICBpZiAoIXNvdXJjZSkge1xuICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgfVxuICBpZiAoIWRlc3RpbmF0aW9uKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xuICAgIGlmICghc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChkZXN0aW5hdGlvbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvblZhbHVlID0gZGVzdGluYXRpb25ba2V5XTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHNvdXJjZVZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgZGVzdGluYXRpb25WYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBzb3VyY2VWYWx1ZSA9IG1lcmdlKGRlc3RpbmF0aW9uVmFsdWUsIHNvdXJjZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVZhbHVlO1xuICB9XG4gIHJldHVybiBkZXN0aW5hdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0RGlmZmVyRm9yVHlwZShcbiAgdHlwZU5hbWU6IHN0cmluZyxcbik6ID8ocHJldlByb3A6IGFueSwgbmV4dFByb3A6IGFueSkgPT4gYm9vbGVhbiB7XG4gIHN3aXRjaCAodHlwZU5hbWUpIHtcbiAgICAvLyBpT1MgVHlwZXNcbiAgICBjYXNlICdDQVRyYW5zZm9ybTNEJzpcbiAgICAgIHJldHVybiBtYXRyaWNlc0RpZmZlcjtcbiAgICBjYXNlICdDR1BvaW50JzpcbiAgICAgIHJldHVybiBwb2ludHNEaWZmZXI7XG4gICAgY2FzZSAnQ0dTaXplJzpcbiAgICAgIHJldHVybiBzaXplc0RpZmZlcjtcbiAgICBjYXNlICdVSUVkZ2VJbnNldHMnOlxuICAgICAgcmV0dXJuIGluc2V0c0RpZmZlcjtcbiAgICAvLyBBbmRyb2lkIFR5cGVzXG4gICAgY2FzZSAnUG9pbnQnOlxuICAgICAgcmV0dXJuIHBvaW50c0RpZmZlcjtcbiAgICBjYXNlICdFZGdlSW5zZXRzJzpcbiAgICAgIHJldHVybiBpbnNldHNEaWZmZXI7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFByb2Nlc3NvckZvclR5cGUodHlwZU5hbWU6IHN0cmluZyk6ID8obmV4dFByb3A6IGFueSkgPT4gYW55IHtcbiAgc3dpdGNoICh0eXBlTmFtZSkge1xuICAgIC8vIGlPUyBUeXBlc1xuICAgIGNhc2UgJ0NHQ29sb3InOlxuICAgIGNhc2UgJ1VJQ29sb3InOlxuICAgICAgcmV0dXJuIHByb2Nlc3NDb2xvcjtcbiAgICBjYXNlICdDR0NvbG9yQXJyYXknOlxuICAgIGNhc2UgJ1VJQ29sb3JBcnJheSc6XG4gICAgICByZXR1cm4gcHJvY2Vzc0NvbG9yQXJyYXk7XG4gICAgY2FzZSAnQ0dJbWFnZSc6XG4gICAgY2FzZSAnVUlJbWFnZSc6XG4gICAgY2FzZSAnUkNUSW1hZ2VTb3VyY2UnOlxuICAgICAgcmV0dXJuIHJlc29sdmVBc3NldFNvdXJjZTtcbiAgICAvLyBBbmRyb2lkIFR5cGVzXG4gICAgY2FzZSAnQ29sb3InOlxuICAgICAgcmV0dXJuIHByb2Nlc3NDb2xvcjtcbiAgICBjYXNlICdDb2xvckFycmF5JzpcbiAgICAgIHJldHVybiBwcm9jZXNzQ29sb3JBcnJheTtcbiAgICBjYXNlICdJbWFnZVNvdXJjZSc6XG4gICAgICByZXR1cm4gcmVzb2x2ZUFzc2V0U291cmNlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZUNvbXBvbmVudEF0dHJpYnV0ZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VUlNYW5hZ2VySlNJbnRlcmZhY2V9IGZyb20gJy4uL1R5cGVzL1VJTWFuYWdlckpTSW50ZXJmYWNlJztcblxuaW1wb3J0IHtnZXRGYWJyaWNVSU1hbmFnZXJ9IGZyb20gJy4vRmFicmljVUlNYW5hZ2VyJztcbmltcG9ydCBudWxsdGhyb3dzIGZyb20gJ251bGx0aHJvd3MnO1xuXG5mdW5jdGlvbiBpc0ZhYnJpY1JlYWN0VGFnKHJlYWN0VGFnOiBudW1iZXIpOiBib29sZWFuIHtcbiAgLy8gUmVhY3QgcmVzZXJ2ZXMgZXZlbiBudW1iZXJzIGZvciBGYWJyaWMuXG4gIHJldHVybiByZWFjdFRhZyAlIDIgPT09IDA7XG59XG5cbmNvbnN0IFVJTWFuYWdlckltcGw6IFVJTWFuYWdlckpTSW50ZXJmYWNlID1cbiAgZ2xvYmFsLlJOJEJyaWRnZWxlc3MgPT09IHRydWVcbiAgICA/IHJlcXVpcmUoJy4vQnJpZGdlbGVzc1VJTWFuYWdlcicpXG4gICAgOiByZXF1aXJlKCcuL1BhcGVyVUlNYW5hZ2VyJyk7XG5cbi8vICRGbG93Rml4TWVbY2Fubm90LXNwcmVhZC1pbnRlcmZhY2VdXG5jb25zdCBVSU1hbmFnZXI6IFVJTWFuYWdlckpTSW50ZXJmYWNlID0ge1xuICAuLi5VSU1hbmFnZXJJbXBsLFxuICBtZWFzdXJlKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIGxlZnQ6IG51bWJlcixcbiAgICAgIHRvcDogbnVtYmVyLFxuICAgICAgd2lkdGg6IG51bWJlcixcbiAgICAgIGhlaWdodDogbnVtYmVyLFxuICAgICAgcGFnZVg6IG51bWJlcixcbiAgICAgIHBhZ2VZOiBudW1iZXIsXG4gICAgKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNGYWJyaWNSZWFjdFRhZyhyZWFjdFRhZykpIHtcbiAgICAgIGNvbnN0IEZhYnJpY1VJTWFuYWdlciA9IG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpO1xuICAgICAgY29uc3Qgc2hhZG93Tm9kZSA9XG4gICAgICAgIEZhYnJpY1VJTWFuYWdlci5maW5kU2hhZG93Tm9kZUJ5VGFnX0RFUFJFQ0FURUQocmVhY3RUYWcpO1xuICAgICAgaWYgKHNoYWRvd05vZGUpIHtcbiAgICAgICAgRmFicmljVUlNYW5hZ2VyLm1lYXN1cmUoc2hhZG93Tm9kZSwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBtZWFzdXJlIGNhbm5vdCBmaW5kIHZpZXcgd2l0aCB0YWcgIyR7cmVhY3RUYWd9YCk7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcGVyXG4gICAgICBVSU1hbmFnZXJJbXBsLm1lYXN1cmUocmVhY3RUYWcsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sXG5cbiAgbWVhc3VyZUluV2luZG93KFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIGxlZnQ6IG51bWJlcixcbiAgICAgIHRvcDogbnVtYmVyLFxuICAgICAgd2lkdGg6IG51bWJlcixcbiAgICAgIGhlaWdodDogbnVtYmVyLFxuICAgICkgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKGlzRmFicmljUmVhY3RUYWcocmVhY3RUYWcpKSB7XG4gICAgICBjb25zdCBGYWJyaWNVSU1hbmFnZXIgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcbiAgICAgIGNvbnN0IHNoYWRvd05vZGUgPVxuICAgICAgICBGYWJyaWNVSU1hbmFnZXIuZmluZFNoYWRvd05vZGVCeVRhZ19ERVBSRUNBVEVEKHJlYWN0VGFnKTtcbiAgICAgIGlmIChzaGFkb3dOb2RlKSB7XG4gICAgICAgIEZhYnJpY1VJTWFuYWdlci5tZWFzdXJlSW5XaW5kb3coc2hhZG93Tm9kZSwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBtZWFzdXJlIGNhbm5vdCBmaW5kIHZpZXcgd2l0aCB0YWcgIyR7cmVhY3RUYWd9YCk7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcGVyXG4gICAgICBVSU1hbmFnZXJJbXBsLm1lYXN1cmVJbldpbmRvdyhyZWFjdFRhZywgY2FsbGJhY2spO1xuICAgIH1cbiAgfSxcblxuICBtZWFzdXJlTGF5b3V0KFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgYW5jZXN0b3JSZWFjdFRhZzogbnVtYmVyLFxuICAgIGVycm9yQ2FsbGJhY2s6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICAgIGNhbGxiYWNrOiAoXG4gICAgICBsZWZ0OiBudW1iZXIsXG4gICAgICB0b3A6IG51bWJlcixcbiAgICAgIHdpZHRoOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICApID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGlmIChpc0ZhYnJpY1JlYWN0VGFnKHJlYWN0VGFnKSkge1xuICAgICAgY29uc3QgRmFicmljVUlNYW5hZ2VyID0gbnVsbHRocm93cyhnZXRGYWJyaWNVSU1hbmFnZXIoKSk7XG4gICAgICBjb25zdCBzaGFkb3dOb2RlID1cbiAgICAgICAgRmFicmljVUlNYW5hZ2VyLmZpbmRTaGFkb3dOb2RlQnlUYWdfREVQUkVDQVRFRChyZWFjdFRhZyk7XG4gICAgICBjb25zdCBhbmNlc3RvclNoYWRvd05vZGUgPVxuICAgICAgICBGYWJyaWNVSU1hbmFnZXIuZmluZFNoYWRvd05vZGVCeVRhZ19ERVBSRUNBVEVEKGFuY2VzdG9yUmVhY3RUYWcpO1xuXG4gICAgICBpZiAoIXNoYWRvd05vZGUgfHwgIWFuY2VzdG9yU2hhZG93Tm9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIEZhYnJpY1VJTWFuYWdlci5tZWFzdXJlTGF5b3V0KFxuICAgICAgICBzaGFkb3dOb2RlLFxuICAgICAgICBhbmNlc3RvclNoYWRvd05vZGUsXG4gICAgICAgIGVycm9yQ2FsbGJhY2ssXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFwZXJcbiAgICAgIFVJTWFuYWdlckltcGwubWVhc3VyZUxheW91dChcbiAgICAgICAgcmVhY3RUYWcsXG4gICAgICAgIGFuY2VzdG9yUmVhY3RUYWcsXG4gICAgICAgIGVycm9yQ2FsbGJhY2ssXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgbWVhc3VyZUxheW91dFJlbGF0aXZlVG9QYXJlbnQoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBlcnJvckNhbGxiYWNrOiAoZXJyb3I6IE9iamVjdCkgPT4gdm9pZCxcbiAgICBjYWxsYmFjazogKFxuICAgICAgbGVmdDogbnVtYmVyLFxuICAgICAgdG9wOiBudW1iZXIsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNGYWJyaWNSZWFjdFRhZyhyZWFjdFRhZykpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1JDVFVJTWFuYWdlci5tZWFzdXJlTGF5b3V0UmVsYXRpdmVUb1BhcmVudCBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgaXQgd2lsbCBub3QgYmUgaW1wbGVtZW50ZWQgaW4gbmV3ZXIgdmVyc2lvbnMgb2YgUk4gKEZhYnJpYykgLSBUNDc2ODY0NTAnLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IEZhYnJpY1VJTWFuYWdlciA9IG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpO1xuICAgICAgY29uc3Qgc2hhZG93Tm9kZSA9XG4gICAgICAgIEZhYnJpY1VJTWFuYWdlci5maW5kU2hhZG93Tm9kZUJ5VGFnX0RFUFJFQ0FURUQocmVhY3RUYWcpO1xuICAgICAgaWYgKHNoYWRvd05vZGUpIHtcbiAgICAgICAgRmFicmljVUlNYW5hZ2VyLm1lYXN1cmUoXG4gICAgICAgICAgc2hhZG93Tm9kZSxcbiAgICAgICAgICAobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LCBwYWdlWCwgcGFnZVkpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFwZXJcbiAgICAgIFVJTWFuYWdlckltcGwubWVhc3VyZUxheW91dFJlbGF0aXZlVG9QYXJlbnQoXG4gICAgICAgIHJlYWN0VGFnLFxuICAgICAgICBlcnJvckNhbGxiYWNrLFxuICAgICAgICBjYWxsYmFjayxcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIGRpc3BhdGNoVmlld01hbmFnZXJDb21tYW5kKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgY29tbWFuZE5hbWU6IG51bWJlciB8IHN0cmluZyxcbiAgICBjb21tYW5kQXJnczogYW55W10sXG4gICkge1xuICAgIC8vIFNvbWV0aW1lcywgbGlicmFyaWVzIGRpcmVjdGx5IHBhc3MgaW4gdGhlIG91dHB1dCBvZiBgZmluZE5vZGVIYW5kbGVgIHRvXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB3aXRob3V0IGNoZWNraW5nIGlmIGl0J3MgbnVsbC4gVGhpcyBndWFyZHMgYWdhaW5zdCB0aGF0XG4gICAgLy8gY2FzZS4gV2UgdGhyb3cgZWFybHkgaGVyZSBpbiBKYXZhc2NyaXB0IHNvIHdlIGNhbiBnZXQgYSBKUyBzdGFja3RyYWNlXG4gICAgLy8gaW5zdGVhZCBvZiBhIGhhcmRlci10by1kZWJ1ZyBuYXRpdmUgSmF2YSBvciBPYmplY3RpdmUtQyBzdGFja3RyYWNlLlxuICAgIGlmICh0eXBlb2YgcmVhY3RUYWcgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rpc3BhdGNoVmlld01hbmFnZXJDb21tYW5kOiBmb3VuZCBudWxsIHJlYWN0VGFnJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzRmFicmljUmVhY3RUYWcocmVhY3RUYWcpKSB7XG4gICAgICBjb25zdCBGYWJyaWNVSU1hbmFnZXIgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcbiAgICAgIGNvbnN0IHNoYWRvd05vZGUgPVxuICAgICAgICBGYWJyaWNVSU1hbmFnZXIuZmluZFNoYWRvd05vZGVCeVRhZ19ERVBSRUNBVEVEKHJlYWN0VGFnKTtcbiAgICAgIGlmIChzaGFkb3dOb2RlKSB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgYWNjaWRlbnRhbCBDb21tYW5kSUQgaW50byBhIENvbW1hbmROYW1lIHdoaWNoIGlzIHRoZSBzdHJpbmdpZmllZCBudW1iZXIuXG4gICAgICAgIC8vIFRoZSBpbnRlcm9wIGxheWVyIGtub3dzIGhvdyB0byBjb252ZXJ0IHRoaXMgbnVtYmVyIGludG8gdGhlIHJpZ2h0IG1ldGhvZCBuYW1lLlxuICAgICAgICAvLyBTdHJpbmdpZnkgYSBzdHJpbmcgaXMgYSBuby1vcCwgc28gaXQncyBzYWZlLlxuICAgICAgICBjb21tYW5kTmFtZSA9IGAke2NvbW1hbmROYW1lfWA7XG4gICAgICAgIEZhYnJpY1VJTWFuYWdlci5kaXNwYXRjaENvbW1hbmQoc2hhZG93Tm9kZSwgY29tbWFuZE5hbWUsIGNvbW1hbmRBcmdzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgVUlNYW5hZ2VySW1wbC5kaXNwYXRjaFZpZXdNYW5hZ2VyQ29tbWFuZChcbiAgICAgICAgcmVhY3RUYWcsXG4gICAgICAgIC8vIFdlIGhhdmUgc29tZSBsZWdhY3kgY29tcG9uZW50cyB0aGF0IGFyZSBhY3R1YWxseSBhbHJlYWR5IHVzaW5nIHN0cmluZ3MuIMKvXFxfKOODhClfL8KvXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICBjb21tYW5kQXJncyxcbiAgICAgICk7XG4gICAgfVxuICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBVSU1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG51bGx0aHJvd3MoeCwgbWVzc2FnZSkge1xuICBpZiAoeCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCA/IG1lc3NhZ2UgOiAnR290IHVuZXhwZWN0ZWQgJyArIHgpO1xuICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIFNraXAgbnVsbHRocm93cydzIG93biBzdGFjayBmcmFtZS5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbnVsbHRocm93cztcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBudWxsdGhyb3dzO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdfX2VzTW9kdWxlJywge3ZhbHVlOiB0cnVlfSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtSb290VGFnfSBmcm9tICcuLi9UeXBlcy9Sb290VGFnVHlwZXMnO1xuaW1wb3J0IHR5cGUge1VJTWFuYWdlckpTSW50ZXJmYWNlfSBmcm9tICcuLi9UeXBlcy9VSU1hbmFnZXJKU0ludGVyZmFjZSc7XG5cbmltcG9ydCB7dW5zdGFibGVfaGFzQ29tcG9uZW50fSBmcm9tICcuLi9OYXRpdmVDb21wb25lbnQvTmF0aXZlQ29tcG9uZW50UmVnaXN0cnlVbnN0YWJsZSc7XG5pbXBvcnQgZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5IGZyb20gJy4uL1V0aWxpdGllcy9kZWZpbmVMYXp5T2JqZWN0UHJvcGVydHknO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQge2dldEZhYnJpY1VJTWFuYWdlcn0gZnJvbSAnLi9GYWJyaWNVSU1hbmFnZXInO1xuaW1wb3J0IG51bGx0aHJvd3MgZnJvbSAnbnVsbHRocm93cyc7XG5cbmZ1bmN0aW9uIHJhaXNlU29mdEVycm9yKG1ldGhvZE5hbWU6IHN0cmluZywgZGV0YWlscz86IHN0cmluZyk6IHZvaWQge1xuICBjb25zb2xlLmVycm9yKFxuICAgIGBbUmVhY3ROYXRpdmUgQXJjaGl0ZWN0dXJlXVtKU10gJyR7bWV0aG9kTmFtZX0nIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIG5ldyBSZWFjdCBOYXRpdmUgYXJjaGl0ZWN0dXJlLmAgK1xuICAgICAgKGRldGFpbHMgPyBgICR7ZGV0YWlsc31gIDogJycpLFxuICApO1xufVxuXG5jb25zdCBnZXRVSU1hbmFnZXJDb25zdGFudHM6ID8oKSA9PiB7W3ZpZXdNYW5hZ2VyTmFtZTogc3RyaW5nXTogT2JqZWN0fSA9XG4gIGdsb2JhbC5STiRMZWdhY3lJbnRlcm9wX1VJTWFuYWdlcl9nZXRDb25zdGFudHM7XG5cbmNvbnN0IGdldFVJTWFuYWdlckNvbnN0YW50c0NhY2hlZCA9IChmdW5jdGlvbiAoKSB7XG4gIGxldCB3YXNDYWxsZWRPbmNlID0gZmFsc2U7XG4gIGxldCByZXN1bHQgPSB7fTtcbiAgcmV0dXJuICgpOiB7W3ZpZXdNYW5hZ2VyTmFtZTogc3RyaW5nXTogT2JqZWN0fSA9PiB7XG4gICAgaWYgKCF3YXNDYWxsZWRPbmNlKSB7XG4gICAgICByZXN1bHQgPSBudWxsdGhyb3dzKGdldFVJTWFuYWdlckNvbnN0YW50cykoKTtcbiAgICAgIHdhc0NhbGxlZE9uY2UgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSkoKTtcblxuY29uc3QgZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXI6ID8odmlld01hbmFnZXJOYW1lOiBzdHJpbmcpID0+ID9PYmplY3QgPVxuICBnbG9iYWwuUk4kTGVnYWN5SW50ZXJvcF9VSU1hbmFnZXJfZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXI7XG5cbmNvbnN0IGdldERlZmF1bHRFdmVudFR5cGVzOiA/KCkgPT4gT2JqZWN0ID1cbiAgZ2xvYmFsLlJOJExlZ2FjeUludGVyb3BfVUlNYW5hZ2VyX2dldERlZmF1bHRFdmVudFR5cGVzO1xuXG5jb25zdCBnZXREZWZhdWx0RXZlbnRUeXBlc0NhY2hlZCA9IChmdW5jdGlvbiAoKSB7XG4gIGxldCB3YXNDYWxsZWRPbmNlID0gZmFsc2U7XG4gIGxldCByZXN1bHQgPSBudWxsO1xuICByZXR1cm4gKCk6IE9iamVjdCA9PiB7XG4gICAgaWYgKCF3YXNDYWxsZWRPbmNlKSB7XG4gICAgICByZXN1bHQgPSBudWxsdGhyb3dzKGdldERlZmF1bHRFdmVudFR5cGVzKSgpO1xuICAgICAgd2FzQ2FsbGVkT25jZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KSgpO1xuXG4vKipcbiAqIFVJTWFuYWdlci5qcyBvdmVycmlkZXMgdGhlc2UgQVBJcy5cbiAqIFB1bGwgdGhlbSBvdXQgZnJvbSB0aGUgQnJpZGdlbGVzc1VJTWFuYWdlciBpbXBsZW1lbnRhdGlvbi4gU28sIHdlIGNhbiBpZ25vcmUgdGhlbS5cbiAqL1xuY29uc3QgVUlNYW5hZ2VySlNPdmVycmlkZW5BUElzID0ge1xuICBtZWFzdXJlOiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBjYWxsYmFjazogKFxuICAgICAgbGVmdDogbnVtYmVyLFxuICAgICAgdG9wOiBudW1iZXIsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgICBwYWdlWDogbnVtYmVyLFxuICAgICAgcGFnZVk6IG51bWJlcixcbiAgICApID0+IHZvaWQsXG4gICk6IHZvaWQgPT4ge1xuICAgIHJhaXNlU29mdEVycm9yKCdtZWFzdXJlJyk7XG4gIH0sXG4gIG1lYXN1cmVJbldpbmRvdzogKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgY2FsbGJhY2s6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IHZvaWQsXG4gICk6IHZvaWQgPT4ge1xuICAgIHJhaXNlU29mdEVycm9yKCdtZWFzdXJlSW5XaW5kb3cnKTtcbiAgfSxcbiAgbWVhc3VyZUxheW91dDogKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgYW5jZXN0b3JSZWFjdFRhZzogbnVtYmVyLFxuICAgIGVycm9yQ2FsbGJhY2s6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICAgIGNhbGxiYWNrOiAoXG4gICAgICBsZWZ0OiBudW1iZXIsXG4gICAgICB0b3A6IG51bWJlcixcbiAgICAgIHdpZHRoOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICApID0+IHZvaWQsXG4gICk6IHZvaWQgPT4ge1xuICAgIHJhaXNlU29mdEVycm9yKCdtZWFzdXJlTGF5b3V0Jyk7XG4gIH0sXG4gIG1lYXN1cmVMYXlvdXRSZWxhdGl2ZVRvUGFyZW50OiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBlcnJvckNhbGxiYWNrOiAoZXJyb3I6IE9iamVjdCkgPT4gdm9pZCxcbiAgICBjYWxsYmFjazogKFxuICAgICAgbGVmdDogbnVtYmVyLFxuICAgICAgdG9wOiBudW1iZXIsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgKSA9PiB2b2lkLFxuICApOiB2b2lkID0+IHtcbiAgICByYWlzZVNvZnRFcnJvcignbWVhc3VyZUxheW91dFJlbGF0aXZlVG9QYXJlbnQnKTtcbiAgfSxcbiAgZGlzcGF0Y2hWaWV3TWFuYWdlckNvbW1hbmQ6IChcbiAgICByZWFjdFRhZzogbnVtYmVyLFxuICAgIGNvbW1hbmRJRDogbnVtYmVyLFxuICAgIGNvbW1hbmRBcmdzOiA/QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4sXG4gICk6IHZvaWQgPT4ge1xuICAgIHJhaXNlU29mdEVycm9yKCdkaXNwYXRjaFZpZXdNYW5hZ2VyQ29tbWFuZCcpO1xuICB9LFxufTtcblxuLyoqXG4gKiBMZWF2ZSBVbmltcGxlbWVudGVkOiBUaGUgb25seSB0aGluZyB0aGF0IGNhbGxlZCB0aGVzZSBtZXRob2RzIHdhcyB0aGUgcGFwZXIgcmVuZGVyZXIuXG4gKiBJbiBPU1MsIHRoZSBOZXcgQXJjaGl0ZWN0dXJlIHdpbGwganVzdCB1c2UgdGhlIEZhYnJpYyByZW5kZXJlciwgd2hpY2ggdXNlc1xuICogZGlmZmVyZW50IEFQSXMuXG4gKi9cbmNvbnN0IFVJTWFuYWdlckpTVW51c2VkSW5OZXdBcmNoQVBJcyA9IHtcbiAgY3JlYXRlVmlldzogKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgdmlld05hbWU6IHN0cmluZyxcbiAgICByb290VGFnOiBSb290VGFnLFxuICAgIHByb3BzOiBPYmplY3QsXG4gICk6IHZvaWQgPT4ge1xuICAgIHJhaXNlU29mdEVycm9yKCdjcmVhdGVWaWV3Jyk7XG4gIH0sXG4gIHVwZGF0ZVZpZXc6IChyZWFjdFRhZzogbnVtYmVyLCB2aWV3TmFtZTogc3RyaW5nLCBwcm9wczogT2JqZWN0KTogdm9pZCA9PiB7XG4gICAgcmFpc2VTb2Z0RXJyb3IoJ3VwZGF0ZVZpZXcnKTtcbiAgfSxcbiAgc2V0Q2hpbGRyZW46IChjb250YWluZXJUYWc6IG51bWJlciwgcmVhY3RUYWdzOiBBcnJheTxudW1iZXI+KTogdm9pZCA9PiB7XG4gICAgcmFpc2VTb2Z0RXJyb3IoJ3NldENoaWxkcmVuJyk7XG4gIH0sXG4gIG1hbmFnZUNoaWxkcmVuOiAoXG4gICAgY29udGFpbmVyVGFnOiBudW1iZXIsXG4gICAgbW92ZUZyb21JbmRpY2VzOiBBcnJheTxudW1iZXI+LFxuICAgIG1vdmVUb0luZGljZXM6IEFycmF5PG51bWJlcj4sXG4gICAgYWRkQ2hpbGRSZWFjdFRhZ3M6IEFycmF5PG51bWJlcj4sXG4gICAgYWRkQXRJbmRpY2VzOiBBcnJheTxudW1iZXI+LFxuICAgIHJlbW92ZUF0SW5kaWNlczogQXJyYXk8bnVtYmVyPixcbiAgKTogdm9pZCA9PiB7XG4gICAgcmFpc2VTb2Z0RXJyb3IoJ21hbmFnZUNoaWxkcmVuJyk7XG4gIH0sXG4gIHNldEpTUmVzcG9uZGVyOiAocmVhY3RUYWc6IG51bWJlciwgYmxvY2tOYXRpdmVSZXNwb25kZXI6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICByYWlzZVNvZnRFcnJvcignc2V0SlNSZXNwb25kZXInKTtcbiAgfSxcbiAgY2xlYXJKU1Jlc3BvbmRlcjogKCk6IHZvaWQgPT4ge1xuICAgIHJhaXNlU29mdEVycm9yKCdjbGVhckpTUmVzcG9uZGVyJyk7XG4gIH0sXG59O1xuXG4vKipcbiAqIExlYXZlIHVuaW1wbGVtZW50ZWQ6IFRoZXNlIEFQSXMgYXJlIGRlcHJlY2F0ZWQgaW4gVUlNYW5hZ2VyLiBXZSB3aWxsIGV2ZW50dWFsbHkgcmVtb3ZlXG4gKiB0aGVtIGZyb20gUmVhY3QgTmF0aXZlLlxuICovXG5jb25zdCBVSU1hbmFnZXJKU0RlcHJlY2F0ZWRQbGF0Zm9ybUFQSXMgPSBQbGF0Zm9ybS5zZWxlY3Qoe1xuICBhbmRyb2lkOiB7XG4gICAgLy8gVE9ETyhUMTc1NDI0OTg2KTogUmVtb3ZlIFVJTWFuYWdlci5zaG93UG9wdXBNZW51KCkgaW4gUmVhY3QgTmF0aXZlIHYwLjc1LlxuICAgIHNob3dQb3B1cE1lbnU6IChcbiAgICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgICBpdGVtczogQXJyYXk8c3RyaW5nPixcbiAgICAgIGVycm9yOiAoZXJyb3I6IE9iamVjdCkgPT4gdm9pZCxcbiAgICAgIHN1Y2Nlc3M6IChldmVudDogc3RyaW5nLCBzZWxlY3RlZD86IG51bWJlcikgPT4gdm9pZCxcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIHJhaXNlU29mdEVycm9yKFxuICAgICAgICAnc2hvd1BvcHVwTWVudScsXG4gICAgICAgICdQbGVhc2UgdXNlIHRoZSA8UG9wdXBNZW51QW5kcm9pZCAvPiBjb21wb25lbnQgaW5zdGVhZC4nLFxuICAgICAgKTtcbiAgICB9LFxuICAgIC8vIFRPRE8oVDE3NTQyNDk4Nik6IFJlbW92ZSBVSU1hbmFnZXIuZGlzbWlzc1BvcHVwTWVudSgpIGluIFJlYWN0IE5hdGl2ZSB2MC43NS5cbiAgICBkaXNtaXNzUG9wdXBNZW51OiAoKTogdm9pZCA9PiB7XG4gICAgICByYWlzZVNvZnRFcnJvcihcbiAgICAgICAgJ2Rpc21pc3NQb3B1cE1lbnUnLFxuICAgICAgICAnUGxlYXNlIHVzZSB0aGUgPFBvcHVwTWVudUFuZHJvaWQgLz4gY29tcG9uZW50IGluc3RlYWQuJyxcbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5jb25zdCBVSU1hbmFnZXJKU1BsYXRmb3JtQVBJcyA9IFBsYXRmb3JtLnNlbGVjdCh7XG4gIGFuZHJvaWQ6IHtcbiAgICBnZXRDb25zdGFudHNGb3JWaWV3TWFuYWdlcjogKHZpZXdNYW5hZ2VyTmFtZTogc3RyaW5nKTogP09iamVjdCA9PiB7XG4gICAgICBpZiAoZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuIGdldENvbnN0YW50c0ZvclZpZXdNYW5hZ2VyKHZpZXdNYW5hZ2VyTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHJhaXNlU29mdEVycm9yKCdnZXRDb25zdGFudHNGb3JWaWV3TWFuYWdlcicpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgZ2V0RGVmYXVsdEV2ZW50VHlwZXM6ICgpOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICAgIGlmIChnZXREZWZhdWx0RXZlbnRUeXBlcykge1xuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdEV2ZW50VHlwZXNDYWNoZWQoKTtcbiAgICAgIH1cblxuICAgICAgcmFpc2VTb2Z0RXJyb3IoJ2dldERlZmF1bHRFdmVudFR5cGVzJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBzZXRMYXlvdXRBbmltYXRpb25FbmFibGVkRXhwZXJpbWVudGFsOiAoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBMYXlvdXQgYW5pbWF0aW9ucyBhcmUgYWx3YXlzIGVuYWJsZWQgaW4gdGhlIE5ldyBBcmNoaXRlY3R1cmUuXG4gICAgICAgKiBUaGV5IGNhbm5vdCBiZSB0dXJuZWQgb2ZmLlxuICAgICAgICovXG4gICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgcmFpc2VTb2Z0RXJyb3IoXG4gICAgICAgICAgJ3NldExheW91dEFuaW1hdGlvbkVuYWJsZWRFeHBlcmltZW50YWwoZmFsc2UpJyxcbiAgICAgICAgICAnTGF5b3V0IGFuaW1hdGlvbnMgYXJlIGFsd2F5cyBlbmFibGVkIGluIHRoZSBOZXcgQXJjaGl0ZWN0dXJlLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50OiAocmVhY3RUYWc6IG51bWJlciwgZXZlbnRUeXBlOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggamF2YTpGYWJyaWNVSU1hbmFnZXIuc2VuZEFjY2Vzc2liaWxpdHlFdmVudEZyb21KU1xuICAgICAgLy8gYW5kIGxlZ2FjeVNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQuYW5kcm9pZC5qc1xuICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUV2ZW50ID0ge1xuICAgICAgICBUWVBFX1ZJRVdfRk9DVVNFRDogMHgwMDAwMDAwOCxcbiAgICAgICAgVFlQRV9XSU5ET1dfU1RBVEVfQ0hBTkdFRDogMHgwMDAwMDAyMCxcbiAgICAgICAgVFlQRV9WSUVXX0NMSUNLRUQ6IDB4MDAwMDAwMDEsXG4gICAgICAgIFRZUEVfVklFV19IT1ZFUl9FTlRFUjogMHgwMDAwMDA4MCxcbiAgICAgIH07XG5cbiAgICAgIGxldCBldmVudE5hbWUgPSBudWxsO1xuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19GT0NVU0VEKSB7XG4gICAgICAgIGV2ZW50TmFtZSA9ICdmb2N1cyc7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfV0lORE9XX1NUQVRFX0NIQU5HRUQpIHtcbiAgICAgICAgZXZlbnROYW1lID0gJ3dpbmRvd1N0YXRlQ2hhbmdlJztcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX0NMSUNLRUQpIHtcbiAgICAgICAgZXZlbnROYW1lID0gJ2NsaWNrJztcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX0hPVkVSX0VOVEVSKSB7XG4gICAgICAgIGV2ZW50TmFtZSA9ICd2aWV3SG92ZXJFbnRlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KCkgZHJvcHBpbmcgZXZlbnQ6IENhbGxlZCB3aXRoIHVuc3VwcG9ydGVkIGV2ZW50VHlwZTogJHtldmVudFR5cGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBGYWJyaWNVSU1hbmFnZXIgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcbiAgICAgIGNvbnN0IHNoYWRvd05vZGUgPVxuICAgICAgICBGYWJyaWNVSU1hbmFnZXIuZmluZFNoYWRvd05vZGVCeVRhZ19ERVBSRUNBVEVEKHJlYWN0VGFnKTtcbiAgICAgIGlmICghc2hhZG93Tm9kZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KCkgZHJvcHBpbmcgZXZlbnQ6IENhbm5vdCBmaW5kIHZpZXcgd2l0aCB0YWcgIyR7cmVhY3RUYWd9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBGYWJyaWNVSU1hbmFnZXIuc2VuZEFjY2Vzc2liaWxpdHlFdmVudChzaGFkb3dOb2RlLCBldmVudE5hbWUpO1xuICAgIH0sXG4gIH0sXG4gIGlvczoge1xuICAgIC8qKlxuICAgICAqIFRPRE8oVDE3NDY3NDI3NCk6IEltcGxlbWVudCBsYXp5IGxvYWRpbmcgb2YgbGVnYWN5IHZpZXcgbWFuYWdlcnMgaW4gdGhlIG5ldyBhcmNoaXRlY3R1cmUuXG4gICAgICpcbiAgICAgKiBMZWF2ZSB0aGlzIHVuaW1wbGVtZW50ZWQgdW50aWwgd2UgaW1wbGVtZW50IGxhenkgbG9hZGluZyBvZiBsZWdhY3kgbW9kdWxlcyBhbmQgdmlldyBtYW5hZ2VycyBpbiB0aGUgbmV3IGFyY2hpdGVjdHVyZS5cbiAgICAgKi9cbiAgICBsYXppbHlMb2FkVmlldzogKG5hbWU6IHN0cmluZyk6IE9iamVjdCA9PiB7XG4gICAgICByYWlzZVNvZnRFcnJvcignbGF6aWx5TG9hZFZpZXcnKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIGZvY3VzOiAocmVhY3RUYWc6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgRmFicmljVUlNYW5hZ2VyID0gbnVsbHRocm93cyhnZXRGYWJyaWNVSU1hbmFnZXIoKSk7XG4gICAgICBjb25zdCBzaGFkb3dOb2RlID1cbiAgICAgICAgRmFicmljVUlNYW5hZ2VyLmZpbmRTaGFkb3dOb2RlQnlUYWdfREVQUkVDQVRFRChyZWFjdFRhZyk7XG4gICAgICBpZiAoIXNoYWRvd05vZGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgZm9jdXMoKSBub29wOiBDYW5ub3QgZmluZCB2aWV3IHdpdGggdGFnICMke3JlYWN0VGFnfWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBGYWJyaWNVSU1hbmFnZXIuZGlzcGF0Y2hDb21tYW5kKHNoYWRvd05vZGUsICdmb2N1cycsIFtdKTtcbiAgICB9LFxuICAgIGJsdXI6IChyZWFjdFRhZzogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBGYWJyaWNVSU1hbmFnZXIgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcbiAgICAgIGNvbnN0IHNoYWRvd05vZGUgPVxuICAgICAgICBGYWJyaWNVSU1hbmFnZXIuZmluZFNoYWRvd05vZGVCeVRhZ19ERVBSRUNBVEVEKHJlYWN0VGFnKTtcbiAgICAgIGlmICghc2hhZG93Tm9kZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBibHVyKCkgbm9vcDogQ2Fubm90IGZpbmQgdmlldyB3aXRoIHRhZyAjJHtyZWFjdFRhZ31gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgRmFicmljVUlNYW5hZ2VyLmRpc3BhdGNoQ29tbWFuZChzaGFkb3dOb2RlLCAnYmx1cicsIFtdKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbmNvbnN0IFVJTWFuYWdlckpTOiBVSU1hbmFnZXJKU0ludGVyZmFjZSAmIHtbc3RyaW5nXTogYW55fSA9IHtcbiAgLi4uVUlNYW5hZ2VySlNPdmVycmlkZW5BUElzLFxuICAuLi5VSU1hbmFnZXJKU0RlcHJlY2F0ZWRQbGF0Zm9ybUFQSXMsXG4gIC4uLlVJTWFuYWdlckpTUGxhdGZvcm1BUElzLFxuICAuLi5VSU1hbmFnZXJKU1VudXNlZEluTmV3QXJjaEFQSXMsXG4gIGdldFZpZXdNYW5hZ2VyQ29uZmlnOiAodmlld01hbmFnZXJOYW1lOiBzdHJpbmcpOiBtaXhlZCA9PiB7XG4gICAgaWYgKGdldFVJTWFuYWdlckNvbnN0YW50cykge1xuICAgICAgY29uc3QgY29uc3RhbnRzID0gZ2V0VUlNYW5hZ2VyQ29uc3RhbnRzQ2FjaGVkKCk7XG4gICAgICBpZiAoXG4gICAgICAgICFjb25zdGFudHNbdmlld01hbmFnZXJOYW1lXSAmJlxuICAgICAgICBVSU1hbmFnZXJKUy5nZXRDb25zdGFudHNGb3JWaWV3TWFuYWdlclxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0YW50c1t2aWV3TWFuYWdlck5hbWVdID1cbiAgICAgICAgICBVSU1hbmFnZXJKUy5nZXRDb25zdGFudHNGb3JWaWV3TWFuYWdlcih2aWV3TWFuYWdlck5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnN0YW50c1t2aWV3TWFuYWdlck5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByYWlzZVNvZnRFcnJvcihcbiAgICAgICAgYGdldFZpZXdNYW5hZ2VyQ29uZmlnKCcke3ZpZXdNYW5hZ2VyTmFtZX0nKWAsXG4gICAgICAgIGBJZiAnJHt2aWV3TWFuYWdlck5hbWV9JyBoYXMgYSBWaWV3TWFuYWdlciBhbmQgeW91IHdhbnQgdG8gcmV0cmlldmUgaXRzIG5hdGl2ZSBWaWV3Q29uZmlnLCBwbGVhc2UgdHVybiBvbiB0aGUgbmF0aXZlIFZpZXdDb25maWcgaW50ZXJvcCBsYXllci4gSWYgeW91IHdhbnQgdG8gc2VlIGlmIHRoaXMgY29tcG9uZW50IGlzIHJlZ2lzdGVyZWQgd2l0aCBSZWFjdCBOYXRpdmUsIHBsZWFzZSBjYWxsIGhhc1ZpZXdNYW5hZ2VyQ29uZmlnKCcke3ZpZXdNYW5hZ2VyTmFtZX0nKSBpbnN0ZWFkLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuICBoYXNWaWV3TWFuYWdlckNvbmZpZzogKHZpZXdNYW5hZ2VyTmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHVuc3RhYmxlX2hhc0NvbXBvbmVudCh2aWV3TWFuYWdlck5hbWUpO1xuICB9LFxuICBnZXRDb25zdGFudHM6ICgpOiBPYmplY3QgPT4ge1xuICAgIGlmIChnZXRVSU1hbmFnZXJDb25zdGFudHMpIHtcbiAgICAgIHJldHVybiBnZXRVSU1hbmFnZXJDb25zdGFudHNDYWNoZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFpc2VTb2Z0RXJyb3IoJ2dldENvbnN0YW50cycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuICBmaW5kU3Vidmlld0luOiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBwb2ludDogQXJyYXk8bnVtYmVyPixcbiAgICBjYWxsYmFjazogKFxuICAgICAgbmF0aXZlVmlld1RhZzogbnVtYmVyLFxuICAgICAgbGVmdDogbnVtYmVyLFxuICAgICAgdG9wOiBudW1iZXIsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgKSA9PiB2b2lkLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBGYWJyaWNVSU1hbmFnZXIgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcbiAgICBjb25zdCBzaGFkb3dOb2RlID0gRmFicmljVUlNYW5hZ2VyLmZpbmRTaGFkb3dOb2RlQnlUYWdfREVQUkVDQVRFRChyZWFjdFRhZyk7XG5cbiAgICBpZiAoIXNoYWRvd05vZGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBmaW5kU3Vidmlld0luKCkgbm9vcDogQ2Fubm90IGZpbmQgdmlldyB3aXRoIHJlYWN0VGFnICR7cmVhY3RUYWd9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgRmFicmljVUlNYW5hZ2VyLmZpbmROb2RlQXRQb2ludChcbiAgICAgIHNoYWRvd05vZGUsXG4gICAgICBwb2ludFswXSxcbiAgICAgIHBvaW50WzFdLFxuICAgICAgZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgICAgICAgaWYgKGludGVybmFsSW5zdGFuY2VIYW5kbGUgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpbmRTdWJ2aWV3SW4oKTogQ2Fubm90IGZpbmQgbm9kZSBhdCBwb2ludCcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpbnN0YW5jZUhhbmRsZTogT2JqZWN0ID0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcbiAgICAgICAgbGV0IG5vZGUgPSBpbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGUubm9kZTtcblxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdmaW5kU3Vidmlld0luKCk6IENhbm5vdCBmaW5kIG5vZGUgYXQgcG9pbnQnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmF0aXZlVmlld1RhZzogbnVtYmVyID1cbiAgICAgICAgICBpbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGUuY2Fub25pY2FsLm5hdGl2ZVRhZztcblxuICAgICAgICBGYWJyaWNVSU1hbmFnZXIubWVhc3VyZShcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYWdlWCwgcGFnZVkpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5hdGl2ZVZpZXdUYWcsIHBhZ2VYLCBwYWdlWSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSxcbiAgdmlld0lzRGVzY2VuZGFudE9mOiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBhbmNlc3RvclJlYWN0VGFnOiBudW1iZXIsXG4gICAgY2FsbGJhY2s6IChyZXN1bHQ6IEFycmF5PGJvb2xlYW4+KSA9PiB2b2lkLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBGYWJyaWNVSU1hbmFnZXIgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcbiAgICBjb25zdCBzaGFkb3dOb2RlID0gRmFicmljVUlNYW5hZ2VyLmZpbmRTaGFkb3dOb2RlQnlUYWdfREVQUkVDQVRFRChyZWFjdFRhZyk7XG4gICAgaWYgKCFzaGFkb3dOb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgdmlld0lzRGVzY2VuZGFudE9mKCkgbm9vcDogQ2Fubm90IGZpbmQgdmlldyB3aXRoIHJlYWN0VGFnICR7cmVhY3RUYWd9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYW5jZXN0b3JTaGFkb3dOb2RlID1cbiAgICAgIEZhYnJpY1VJTWFuYWdlci5maW5kU2hhZG93Tm9kZUJ5VGFnX0RFUFJFQ0FURUQoYW5jZXN0b3JSZWFjdFRhZyk7XG4gICAgaWYgKCFhbmNlc3RvclNoYWRvd05vZGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGB2aWV3SXNEZXNjZW5kYW50T2YoKSBub29wOiBDYW5ub3QgZmluZCB2aWV3IHdpdGggYW5jZXN0b3JSZWFjdFRhZyAke2FuY2VzdG9yUmVhY3RUYWd9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBSZWFkT25seU5vZGUuanNcbiAgICBjb25zdCBET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkgPSAxNjtcblxuICAgIGxldCByZXN1bHQgPSBGYWJyaWNVSU1hbmFnZXIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oXG4gICAgICBhbmNlc3RvclNoYWRvd05vZGUsXG4gICAgICBzaGFkb3dOb2RlLFxuICAgICk7XG5cbiAgICBsZXQgaXNBbmNlc3RvciA9IChyZXN1bHQgJiBET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpICE9PSAwO1xuXG4gICAgY2FsbGJhY2soW2lzQW5jZXN0b3JdKTtcbiAgfSxcbiAgY29uZmlndXJlTmV4dExheW91dEFuaW1hdGlvbjogKFxuICAgIGNvbmZpZzogT2JqZWN0LFxuICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkLFxuICAgIGVycm9yQ2FsbGJhY2s6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBGYWJyaWNVSU1hbmFnZXIgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcbiAgICBGYWJyaWNVSU1hbmFnZXIuY29uZmlndXJlTmV4dExheW91dEFuaW1hdGlvbihcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgZXJyb3JDYWxsYmFjayxcbiAgICApO1xuICB9LFxufTtcblxuaWYgKGdldFVJTWFuYWdlckNvbnN0YW50cykge1xuICBPYmplY3Qua2V5cyhnZXRVSU1hbmFnZXJDb25zdGFudHNDYWNoZWQoKSkuZm9yRWFjaCh2aWV3Q29uZmlnTmFtZSA9PiB7XG4gICAgVUlNYW5hZ2VySlNbdmlld0NvbmZpZ05hbWVdID0gZ2V0VUlNYW5hZ2VyQ29uc3RhbnRzQ2FjaGVkKClbdmlld0NvbmZpZ05hbWVdO1xuICB9KTtcblxuICBpZiAoVUlNYW5hZ2VySlMuZ2V0Q29uc3RhbnRzKCkuVmlld01hbmFnZXJOYW1lcykge1xuICAgIFVJTWFuYWdlckpTLmdldENvbnN0YW50cygpLlZpZXdNYW5hZ2VyTmFtZXMuZm9yRWFjaCh2aWV3TWFuYWdlck5hbWUgPT4ge1xuICAgICAgZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5KFVJTWFuYWdlckpTLCB2aWV3TWFuYWdlck5hbWUsIHtcbiAgICAgICAgZ2V0OiAoKSA9PlxuICAgICAgICAgIG51bGx0aHJvd3MoVUlNYW5hZ2VySlMuZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXIpKHZpZXdNYW5hZ2VyTmFtZSksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVJTWFuYWdlckpTO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1xuICBJbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuICBMYXlvdXRBbmltYXRpb25Db25maWcsXG4gIE1lYXN1cmVJbldpbmRvd09uU3VjY2Vzc0NhbGxiYWNrLFxuICBNZWFzdXJlTGF5b3V0T25TdWNjZXNzQ2FsbGJhY2ssXG4gIE1lYXN1cmVPblN1Y2Nlc3NDYWxsYmFjayxcbiAgTm9kZSxcbn0gZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7Um9vdFRhZ30gZnJvbSAnLi4vVHlwZXMvUm9vdFRhZ1R5cGVzJztcblxuaW1wb3J0IGRlZmluZUxhenlPYmplY3RQcm9wZXJ0eSBmcm9tICcuLi9VdGlsaXRpZXMvZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5JztcblxuZXhwb3J0IHR5cGUgTm9kZVNldCA9IEFycmF5PE5vZGU+O1xuZXhwb3J0IHR5cGUgTm9kZVByb3BzID0gey4uLn07XG5leHBvcnQgaW50ZXJmYWNlIFNwZWMge1xuICArY3JlYXRlTm9kZTogKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgdmlld05hbWU6IHN0cmluZyxcbiAgICByb290VGFnOiBSb290VGFnLFxuICAgIHByb3BzOiBOb2RlUHJvcHMsXG4gICAgaW5zdGFuY2VIYW5kbGU6IEludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICkgPT4gTm9kZTtcbiAgK2Nsb25lTm9kZTogKG5vZGU6IE5vZGUpID0+IE5vZGU7XG4gICtjbG9uZU5vZGVXaXRoTmV3Q2hpbGRyZW46IChub2RlOiBOb2RlKSA9PiBOb2RlO1xuICArY2xvbmVOb2RlV2l0aE5ld1Byb3BzOiAobm9kZTogTm9kZSwgbmV3UHJvcHM6IE5vZGVQcm9wcykgPT4gTm9kZTtcbiAgK2Nsb25lTm9kZVdpdGhOZXdDaGlsZHJlbkFuZFByb3BzOiAobm9kZTogTm9kZSwgbmV3UHJvcHM6IE5vZGVQcm9wcykgPT4gTm9kZTtcbiAgK2NyZWF0ZUNoaWxkU2V0OiAocm9vdFRhZzogUm9vdFRhZykgPT4gTm9kZVNldDtcbiAgK2FwcGVuZENoaWxkOiAocGFyZW50Tm9kZTogTm9kZSwgY2hpbGQ6IE5vZGUpID0+IE5vZGU7XG4gICthcHBlbmRDaGlsZFRvU2V0OiAoY2hpbGRTZXQ6IE5vZGVTZXQsIGNoaWxkOiBOb2RlKSA9PiB2b2lkO1xuICArY29tcGxldGVSb290OiAocm9vdFRhZzogUm9vdFRhZywgY2hpbGRTZXQ6IE5vZGVTZXQpID0+IHZvaWQ7XG4gICttZWFzdXJlOiAobm9kZTogTm9kZSwgY2FsbGJhY2s6IE1lYXN1cmVPblN1Y2Nlc3NDYWxsYmFjaykgPT4gdm9pZDtcbiAgK21lYXN1cmVJbldpbmRvdzogKFxuICAgIG5vZGU6IE5vZGUsXG4gICAgY2FsbGJhY2s6IE1lYXN1cmVJbldpbmRvd09uU3VjY2Vzc0NhbGxiYWNrLFxuICApID0+IHZvaWQ7XG4gICttZWFzdXJlTGF5b3V0OiAoXG4gICAgbm9kZTogTm9kZSxcbiAgICByZWxhdGl2ZU5vZGU6IE5vZGUsXG4gICAgb25GYWlsOiAoKSA9PiB2b2lkLFxuICAgIG9uU3VjY2VzczogTWVhc3VyZUxheW91dE9uU3VjY2Vzc0NhbGxiYWNrLFxuICApID0+IHZvaWQ7XG4gICtjb25maWd1cmVOZXh0TGF5b3V0QW5pbWF0aW9uOiAoXG4gICAgY29uZmlnOiBMYXlvdXRBbmltYXRpb25Db25maWcsXG4gICAgY2FsbGJhY2s6ICgpID0+IHZvaWQsIC8vIGNoZWNrIHdoYXQgaXMgcmV0dXJuZWQgaGVyZVxuICAgIGVycm9yQ2FsbGJhY2s6ICgpID0+IHZvaWQsXG4gICkgPT4gdm9pZDtcbiAgK3NlbmRBY2Nlc3NpYmlsaXR5RXZlbnQ6IChub2RlOiBOb2RlLCBldmVudFR5cGU6IHN0cmluZykgPT4gdm9pZDtcbiAgK2ZpbmRTaGFkb3dOb2RlQnlUYWdfREVQUkVDQVRFRDogKHJlYWN0VGFnOiBudW1iZXIpID0+ID9Ob2RlO1xuICArc2V0TmF0aXZlUHJvcHM6IChub2RlOiBOb2RlLCBuZXdQcm9wczogTm9kZVByb3BzKSA9PiB2b2lkO1xuICArZGlzcGF0Y2hDb21tYW5kOiAoXG4gICAgbm9kZTogTm9kZSxcbiAgICBjb21tYW5kTmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IEFycmF5PG1peGVkPixcbiAgKSA9PiB2b2lkO1xuICArZmluZE5vZGVBdFBvaW50OiAoXG4gICAgbm9kZTogTm9kZSxcbiAgICBsb2NhdGlvblg6IG51bWJlcixcbiAgICBsb2NhdGlvblk6IG51bWJlcixcbiAgICBjYWxsYmFjazogKGluc3RhbmNlSGFuZGxlOiA/SW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTdXBwb3J0IG1ldGhvZHMgZm9yIHRoZSBET00tY29tcGF0aWJsZSBBUElzLlxuICAgKi9cbiAgK2dldFBhcmVudE5vZGU6IChub2RlOiBOb2RlKSA9PiA/SW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcbiAgK2dldENoaWxkTm9kZXM6IChub2RlOiBOb2RlKSA9PiAkUmVhZE9ubHlBcnJheTxJbnRlcm5hbEluc3RhbmNlSGFuZGxlPjtcbiAgK2lzQ29ubmVjdGVkOiAobm9kZTogTm9kZSkgPT4gYm9vbGVhbjtcbiAgK2NvbXBhcmVEb2N1bWVudFBvc2l0aW9uOiAobm9kZTogTm9kZSwgb3RoZXJOb2RlOiBOb2RlKSA9PiBudW1iZXI7XG4gICtnZXRUZXh0Q29udGVudDogKG5vZGU6IE5vZGUpID0+IHN0cmluZztcbiAgK2dldEJvdW5kaW5nQ2xpZW50UmVjdDogKFxuICAgIG5vZGU6IE5vZGUsXG4gICAgaW5jbHVkZVRyYW5zZm9ybTogYm9vbGVhbixcbiAgKSA9PiA/W1xuICAgIC8qIHg6ICovIG51bWJlcixcbiAgICAvKiB5OiAqLyBudW1iZXIsXG4gICAgLyogd2lkdGg6ICovIG51bWJlcixcbiAgICAvKiBoZWlnaHQ6ICovIG51bWJlcixcbiAgXTtcbiAgK2dldE9mZnNldDogKFxuICAgIG5vZGU6IE5vZGUsXG4gICkgPT4gP1tcbiAgICAvKiBvZmZzZXRQYXJlbnQ6ICovIEludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICAgLyogb2Zmc2V0VG9wOiAqLyBudW1iZXIsXG4gICAgLyogb2Zmc2V0TGVmdDogKi8gbnVtYmVyLFxuICBdO1xuICArZ2V0U2Nyb2xsUG9zaXRpb246IChcbiAgICBub2RlOiBOb2RlLFxuICApID0+ID9bLyogc2Nyb2xsTGVmdDogKi8gbnVtYmVyLCAvKiBzY3JvbGxUb3A6ICovIG51bWJlcl07XG4gICtnZXRTY3JvbGxTaXplOiAoXG4gICAgbm9kZTogTm9kZSxcbiAgKSA9PiA/Wy8qIHNjcm9sbFdpZHRoOiAqLyBudW1iZXIsIC8qIHNjcm9sbEhlaWdodDogKi8gbnVtYmVyXTtcbiAgK2dldElubmVyU2l6ZTogKG5vZGU6IE5vZGUpID0+ID9bLyogd2lkdGg6ICovIG51bWJlciwgLyogaGVpZ2h0OiAqLyBudW1iZXJdO1xuICArZ2V0Qm9yZGVyU2l6ZTogKFxuICAgIG5vZGU6IE5vZGUsXG4gICkgPT4gP1tcbiAgICAvKiB0b3BXaWR0aDogKi8gbnVtYmVyLFxuICAgIC8qIHJpZ2h0V2lkdGg6ICovIG51bWJlcixcbiAgICAvKiBib3R0b21XaWR0aDogKi8gbnVtYmVyLFxuICAgIC8qIGxlZnRXaWR0aDogKi8gbnVtYmVyLFxuICBdO1xuICArZ2V0VGFnTmFtZTogKG5vZGU6IE5vZGUpID0+IHN0cmluZztcblxuICAvKipcbiAgICogU3VwcG9ydCBtZXRob2RzIGZvciB0aGUgUG9pbnRlciBDYXB0dXJlIEFQSXMuXG4gICAqL1xuICAraGFzUG9pbnRlckNhcHR1cmU6IChub2RlOiBOb2RlLCBwb2ludGVySWQ6IG51bWJlcikgPT4gYm9vbGVhbjtcbiAgK3NldFBvaW50ZXJDYXB0dXJlOiAobm9kZTogTm9kZSwgcG9pbnRlcklkOiBudW1iZXIpID0+IHZvaWQ7XG4gICtyZWxlYXNlUG9pbnRlckNhcHR1cmU6IChub2RlOiBOb2RlLCBwb2ludGVySWQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxubGV0IG5hdGl2ZUZhYnJpY1VJTWFuYWdlclByb3h5OiA/U3BlYztcblxuLy8gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIHRoZSBtZXRob2RzIGluIGdsb2JhbC5uYXRpdmVGYWJyaWNVSU1hbmFnZXIgdGhhdCB3ZSdsbFxuLy8gY2FjaGUgaW4gSmF2YVNjcmlwdCwgYXMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJpbmRpbmdcbi8vIGNyZWF0ZXMgYSBuZXcgaG9zdCBmdW5jdGlvbiBldmVyeSB0aW1lIG1ldGhvZHMgYXJlIGFjY2Vzc2VkLlxuY29uc3QgQ0FDSEVEX1BST1BFUlRJRVMgPSBbXG4gICdjcmVhdGVOb2RlJyxcbiAgJ2Nsb25lTm9kZScsXG4gICdjbG9uZU5vZGVXaXRoTmV3Q2hpbGRyZW4nLFxuICAnY2xvbmVOb2RlV2l0aE5ld1Byb3BzJyxcbiAgJ2Nsb25lTm9kZVdpdGhOZXdDaGlsZHJlbkFuZFByb3BzJyxcbiAgJ2NyZWF0ZUNoaWxkU2V0JyxcbiAgJ2FwcGVuZENoaWxkJyxcbiAgJ2FwcGVuZENoaWxkVG9TZXQnLFxuICAnY29tcGxldGVSb290JyxcbiAgJ21lYXN1cmUnLFxuICAnbWVhc3VyZUluV2luZG93JyxcbiAgJ21lYXN1cmVMYXlvdXQnLFxuICAnY29uZmlndXJlTmV4dExheW91dEFuaW1hdGlvbicsXG4gICdzZW5kQWNjZXNzaWJpbGl0eUV2ZW50JyxcbiAgJ2ZpbmRTaGFkb3dOb2RlQnlUYWdfREVQUkVDQVRFRCcsXG4gICdzZXROYXRpdmVQcm9wcycsXG4gICdkaXNwYXRjaENvbW1hbmQnLFxuICAnZ2V0UGFyZW50Tm9kZScsXG4gICdnZXRDaGlsZE5vZGVzJyxcbiAgJ2lzQ29ubmVjdGVkJyxcbiAgJ2NvbXBhcmVEb2N1bWVudFBvc2l0aW9uJyxcbiAgJ2dldFRleHRDb250ZW50JyxcbiAgJ2dldEJvdW5kaW5nQ2xpZW50UmVjdCcsXG4gICdnZXRPZmZzZXQnLFxuICAnZ2V0U2Nyb2xsUG9zaXRpb24nLFxuICAnZ2V0U2Nyb2xsU2l6ZScsXG4gICdnZXRJbm5lclNpemUnLFxuICAnZ2V0Qm9yZGVyU2l6ZScsXG4gICdnZXRUYWdOYW1lJyxcbiAgJ2hhc1BvaW50ZXJDYXB0dXJlJyxcbiAgJ3NldFBvaW50ZXJDYXB0dXJlJyxcbiAgJ3JlbGVhc2VQb2ludGVyQ2FwdHVyZScsXG5dO1xuXG4vLyBUaGlzIGlzIGV4cG9zZWQgYXMgYSBnZXR0ZXIgYmVjYXVzZSBhcHBzIHVzaW5nIHRoZSBsZWdhY3kgcmVuZGVyZXIgQU5EXG4vLyBGYWJyaWMgY2FuIGRlZmluZSB0aGUgYmluZGluZyBsYXppbHkuIElmIHdlIGV2YWx1YXRlZCB0aGUgZ2xvYmFsIGFuZCBjYWNoZWRcbi8vIGl0IGluIHRoZSBtb2R1bGUgd2UgbWlnaHQgYmUgY2FjaGluZyBhbiBgdW5kZWZpbmVkYCB2YWx1ZSBiZWZvcmUgaXQgaXMgc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZhYnJpY1VJTWFuYWdlcigpOiA/U3BlYyB7XG4gIGlmIChcbiAgICBuYXRpdmVGYWJyaWNVSU1hbmFnZXJQcm94eSA9PSBudWxsICYmXG4gICAgZ2xvYmFsLm5hdGl2ZUZhYnJpY1VJTWFuYWdlciAhPSBudWxsXG4gICkge1xuICAgIG5hdGl2ZUZhYnJpY1VJTWFuYWdlclByb3h5ID0gY3JlYXRlUHJveHlXaXRoQ2FjaGVkUHJvcGVydGllcyhcbiAgICAgIGdsb2JhbC5uYXRpdmVGYWJyaWNVSU1hbmFnZXIsXG4gICAgICBDQUNIRURfUFJPUEVSVElFUyxcbiAgICApO1xuICB9XG4gIHJldHVybiBuYXRpdmVGYWJyaWNVSU1hbmFnZXJQcm94eTtcbn1cblxuLyoqXG4gKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYWNoZXMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzIHRoZSBmaXJzdCB0aW1lIHRoZXlcbiAqIGFyZSBhY2Nlc3NlZCwgYW5kIGZhbGxzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG9iamVjdCBmb3Igb3RoZXIgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUHJveHlXaXRoQ2FjaGVkUHJvcGVydGllcyhcbiAgaW1wbGVtZW50YXRpb246IFNwZWMsXG4gIHByb3BlcnRpZXNUb0NhY2hlOiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuKTogU3BlYyB7XG4gIGNvbnN0IHByb3h5ID0gT2JqZWN0LmNyZWF0ZShpbXBsZW1lbnRhdGlvbik7XG4gIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHByb3BlcnRpZXNUb0NhY2hlKSB7XG4gICAgZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5KHByb3h5LCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltwcm9wLW1pc3NpbmddXG4gICAgICBnZXQ6ICgpID0+IGltcGxlbWVudGF0aW9uW3Byb3BlcnR5TmFtZV0sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHByb3h5O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmxldCBjb21wb25lbnROYW1lVG9FeGlzdHM6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFVuc3RhYmxlIEFQSS4gRG8gbm90IHVzZSFcbiAqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBjb21wb25lbnQgd2l0aCBuYW1lIHJlY2VpdmVkIGFzIGEgcGFyYW1ldGVyXG4gKiBpcyByZWdpc3RlcmVkIGluIHRoZSBuYXRpdmUgcGxhdGZvcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnN0YWJsZV9oYXNDb21wb25lbnQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBoYXNOYXRpdmVDb21wb25lbnQgPSBjb21wb25lbnROYW1lVG9FeGlzdHMuZ2V0KG5hbWUpO1xuICBpZiAoaGFzTmF0aXZlQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICBpZiAoZ2xvYmFsLl9fbmF0aXZlQ29tcG9uZW50UmVnaXN0cnlfX2hhc0NvbXBvbmVudCkge1xuICAgICAgaGFzTmF0aXZlQ29tcG9uZW50ID0gZ2xvYmFsLl9fbmF0aXZlQ29tcG9uZW50UmVnaXN0cnlfX2hhc0NvbXBvbmVudChuYW1lKTtcbiAgICAgIGNvbXBvbmVudE5hbWVUb0V4aXN0cy5zZXQobmFtZSwgaGFzTmF0aXZlQ29tcG9uZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgYHVuc3RhYmxlX2hhc0NvbXBvbmVudCgnJHtuYW1lfScpOiBHbG9iYWwgZnVuY3Rpb24gaXMgbm90IHJlZ2lzdGVyZWRgO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGFzTmF0aXZlQ29tcG9uZW50O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1Jvb3RUYWd9IGZyb20gJy4uL1R5cGVzL1Jvb3RUYWdUeXBlcyc7XG5pbXBvcnQgdHlwZSB7VUlNYW5hZ2VySlNJbnRlcmZhY2V9IGZyb20gJy4uL1R5cGVzL1VJTWFuYWdlckpTSW50ZXJmYWNlJztcblxuaW1wb3J0IE5hdGl2ZVVJTWFuYWdlciBmcm9tICcuL05hdGl2ZVVJTWFuYWdlcic7XG5pbXBvcnQgbnVsbHRocm93cyBmcm9tICdudWxsdGhyb3dzJztcblxuY29uc3QgTmF0aXZlTW9kdWxlcyA9IHJlcXVpcmUoJy4uL0JhdGNoZWRCcmlkZ2UvTmF0aXZlTW9kdWxlcycpO1xuY29uc3QgZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL2RlZmluZUxhenlPYmplY3RQcm9wZXJ0eScpO1xuY29uc3QgUGxhdGZvcm0gPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nKTtcbmNvbnN0IFVJTWFuYWdlclByb3BlcnRpZXMgPSByZXF1aXJlKCcuL1VJTWFuYWdlclByb3BlcnRpZXMnKTtcblxuY29uc3Qgdmlld01hbmFnZXJDb25maWdzOiB7W3N0cmluZ106IGFueSB8IG51bGx9ID0ge307XG5cbmNvbnN0IHRyaWVkTG9hZGluZ0NvbmZpZyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5sZXQgTmF0aXZlVUlNYW5hZ2VyQ29uc3RhbnRzID0ge307XG5sZXQgaXNOYXRpdmVVSU1hbmFnZXJDb25zdGFudHNTZXQgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldENvbnN0YW50cygpOiBPYmplY3Qge1xuICBpZiAoIWlzTmF0aXZlVUlNYW5hZ2VyQ29uc3RhbnRzU2V0KSB7XG4gICAgTmF0aXZlVUlNYW5hZ2VyQ29uc3RhbnRzID0gTmF0aXZlVUlNYW5hZ2VyLmdldENvbnN0YW50cygpO1xuICAgIGlzTmF0aXZlVUlNYW5hZ2VyQ29uc3RhbnRzU2V0ID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gTmF0aXZlVUlNYW5hZ2VyQ29uc3RhbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3TWFuYWdlckNvbmZpZyh2aWV3TWFuYWdlck5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGlmIChcbiAgICB2aWV3TWFuYWdlckNvbmZpZ3Nbdmlld01hbmFnZXJOYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgZ2xvYmFsLm5hdGl2ZUNhbGxTeW5jSG9vayAmJiAvLyBJZiB3ZSdyZSBpbiB0aGUgQ2hyb21lIERlYnVnZ2VyLCBsZXQncyBub3QgZXZlbiB0cnkgY2FsbGluZyB0aGUgc3luYyBtZXRob2RcbiAgICBOYXRpdmVVSU1hbmFnZXIuZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXJcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZpZXdNYW5hZ2VyQ29uZmlnc1t2aWV3TWFuYWdlck5hbWVdID1cbiAgICAgICAgTmF0aXZlVUlNYW5hZ2VyLmdldENvbnN0YW50c0ZvclZpZXdNYW5hZ2VyKHZpZXdNYW5hZ2VyTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOYXRpdmVVSU1hbmFnZXIuZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXIoJ1wiICtcbiAgICAgICAgICB2aWV3TWFuYWdlck5hbWUgK1xuICAgICAgICAgIFwiJykgdGhyZXcgYW4gZXhjZXB0aW9uLlwiLFxuICAgICAgICBlLFxuICAgICAgKTtcbiAgICAgIHZpZXdNYW5hZ2VyQ29uZmlnc1t2aWV3TWFuYWdlck5hbWVdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25maWcgPSB2aWV3TWFuYWdlckNvbmZpZ3Nbdmlld01hbmFnZXJOYW1lXTtcbiAgaWYgKGNvbmZpZykge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICAvLyBJZiB3ZSdyZSBpbiB0aGUgQ2hyb21lIERlYnVnZ2VyLCBsZXQncyBub3QgZXZlbiB0cnkgY2FsbGluZyB0aGUgc3luY1xuICAvLyBtZXRob2QuXG4gIGlmICghZ2xvYmFsLm5hdGl2ZUNhbGxTeW5jSG9vaykge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBpZiAoXG4gICAgTmF0aXZlVUlNYW5hZ2VyLmxhemlseUxvYWRWaWV3ICYmXG4gICAgIXRyaWVkTG9hZGluZ0NvbmZpZy5oYXModmlld01hbmFnZXJOYW1lKVxuICApIHtcbiAgICBjb25zdCByZXN1bHQgPSBudWxsdGhyb3dzKE5hdGl2ZVVJTWFuYWdlci5sYXppbHlMb2FkVmlldykodmlld01hbmFnZXJOYW1lKTtcbiAgICB0cmllZExvYWRpbmdDb25maWcuYWRkKHZpZXdNYW5hZ2VyTmFtZSk7XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsICYmIHJlc3VsdC52aWV3Q29uZmlnICE9IG51bGwpIHtcbiAgICAgIGdldENvbnN0YW50cygpW3ZpZXdNYW5hZ2VyTmFtZV0gPSByZXN1bHQudmlld0NvbmZpZztcbiAgICAgIGxhemlmeVZpZXdNYW5hZ2VyQ29uZmlnKHZpZXdNYW5hZ2VyTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZpZXdNYW5hZ2VyQ29uZmlnc1t2aWV3TWFuYWdlck5hbWVdO1xufVxuXG4vLyAkRmxvd0ZpeE1lW2Nhbm5vdC1zcHJlYWQtaW50ZXJmYWNlXVxuY29uc3QgVUlNYW5hZ2VySlM6IFVJTWFuYWdlckpTSW50ZXJmYWNlID0ge1xuICAuLi5OYXRpdmVVSU1hbmFnZXIsXG4gIGNyZWF0ZVZpZXcoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICB2aWV3TmFtZTogc3RyaW5nLFxuICAgIHJvb3RUYWc6IFJvb3RUYWcsXG4gICAgcHJvcHM6IE9iamVjdCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJyAmJiB2aWV3TWFuYWdlckNvbmZpZ3Nbdmlld05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGZvcmNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBuYXRpdmUgdmlld01hbmFnZXJcbiAgICAgIC8vIGNsYXNzZXMgaW4gaU9TIHdoZW4gdXNpbmcgc3RhdGljIFZpZXdDb25maWdzXG4gICAgICBnZXRWaWV3TWFuYWdlckNvbmZpZyh2aWV3TmFtZSk7XG4gICAgfVxuXG4gICAgTmF0aXZlVUlNYW5hZ2VyLmNyZWF0ZVZpZXcocmVhY3RUYWcsIHZpZXdOYW1lLCByb290VGFnLCBwcm9wcyk7XG4gIH0sXG4gIGdldENvbnN0YW50cygpOiBPYmplY3Qge1xuICAgIHJldHVybiBnZXRDb25zdGFudHMoKTtcbiAgfSxcbiAgZ2V0Vmlld01hbmFnZXJDb25maWcodmlld01hbmFnZXJOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBnZXRWaWV3TWFuYWdlckNvbmZpZyh2aWV3TWFuYWdlck5hbWUpO1xuICB9LFxuICBoYXNWaWV3TWFuYWdlckNvbmZpZyh2aWV3TWFuYWdlck5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBnZXRWaWV3TWFuYWdlckNvbmZpZyh2aWV3TWFuYWdlck5hbWUpICE9IG51bGw7XG4gIH0sXG59O1xuXG4vLyBUT0RPIChUNDUyMjA0OTgpOiBSZW1vdmUgdGhpcy5cbi8vIDNyZCBwYXJ0eSBsaWJzIG1heSBiZSBjYWxsaW5nIGBOYXRpdmVNb2R1bGVzLlVJTWFuYWdlci5nZXRWaWV3TWFuYWdlckNvbmZpZygpYFxuLy8gaW5zdGVhZCBvZiBgVUlNYW5hZ2VyLmdldFZpZXdNYW5hZ2VyQ29uZmlnKClgIG9mZiBVSU1hbmFnZXIuanMuXG4vLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Igbm93LlxuLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5OYXRpdmVVSU1hbmFnZXIuZ2V0Vmlld01hbmFnZXJDb25maWcgPSBVSU1hbmFnZXJKUy5nZXRWaWV3TWFuYWdlckNvbmZpZztcblxuZnVuY3Rpb24gbGF6aWZ5Vmlld01hbmFnZXJDb25maWcodmlld05hbWU6IHN0cmluZykge1xuICBjb25zdCB2aWV3Q29uZmlnID0gZ2V0Q29uc3RhbnRzKClbdmlld05hbWVdO1xuICB2aWV3TWFuYWdlckNvbmZpZ3Nbdmlld05hbWVdID0gdmlld0NvbmZpZztcbiAgaWYgKHZpZXdDb25maWcuTWFuYWdlcikge1xuICAgIGRlZmluZUxhenlPYmplY3RQcm9wZXJ0eSh2aWV3Q29uZmlnLCAnQ29uc3RhbnRzJywge1xuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdNYW5hZ2VyID0gTmF0aXZlTW9kdWxlc1t2aWV3Q29uZmlnLk1hbmFnZXJdO1xuICAgICAgICBjb25zdCBjb25zdGFudHM6IHtbc3RyaW5nXTogbWl4ZWR9ID0ge307XG4gICAgICAgIHZpZXdNYW5hZ2VyICYmXG4gICAgICAgICAgT2JqZWN0LmtleXModmlld01hbmFnZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmlld01hbmFnZXJba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY29uc3RhbnRzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnN0YW50cztcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5KHZpZXdDb25maWcsICdDb21tYW5kcycsIHtcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICBjb25zdCB2aWV3TWFuYWdlciA9IE5hdGl2ZU1vZHVsZXNbdmlld0NvbmZpZy5NYW5hZ2VyXTtcbiAgICAgICAgY29uc3QgY29tbWFuZHM6IHtbc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICB2aWV3TWFuYWdlciAmJlxuICAgICAgICAgIE9iamVjdC5rZXlzKHZpZXdNYW5hZ2VyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZpZXdNYW5hZ2VyW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGNvbW1hbmRzW2tleV0gPSBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBWaWV3TWFuYWdlciBjb25zdGFudHMgYW5kIGNvbW1hbmRzIGludG8gVUlNYW5hZ2VyLiBUaGlzIGlzXG4gKiBvbmx5IG5lZWRlZCBmb3IgaU9TLCB3aGljaCBwdXRzIHRoZSBjb25zdGFudHMgaW4gdGhlIFZpZXdNYW5hZ2VyXG4gKiBuYW1lc3BhY2UgaW5zdGVhZCBvZiBVSU1hbmFnZXIsIHVubGlrZSBBbmRyb2lkLlxuICovXG5pZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gIE9iamVjdC5rZXlzKGdldENvbnN0YW50cygpKS5mb3JFYWNoKHZpZXdOYW1lID0+IHtcbiAgICBsYXppZnlWaWV3TWFuYWdlckNvbmZpZyh2aWV3TmFtZSk7XG4gIH0pO1xufSBlbHNlIGlmIChnZXRDb25zdGFudHMoKS5WaWV3TWFuYWdlck5hbWVzKSB7XG4gIE5hdGl2ZVVJTWFuYWdlci5nZXRDb25zdGFudHMoKS5WaWV3TWFuYWdlck5hbWVzLmZvckVhY2godmlld01hbmFnZXJOYW1lID0+IHtcbiAgICBkZWZpbmVMYXp5T2JqZWN0UHJvcGVydHkoTmF0aXZlVUlNYW5hZ2VyLCB2aWV3TWFuYWdlck5hbWUsIHtcbiAgICAgIGdldDogKCkgPT5cbiAgICAgICAgbnVsbHRocm93cyhOYXRpdmVVSU1hbmFnZXIuZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXIpKHZpZXdNYW5hZ2VyTmFtZSksXG4gICAgfSk7XG4gIH0pO1xufVxuXG5pZiAoIWdsb2JhbC5uYXRpdmVDYWxsU3luY0hvb2spIHtcbiAgT2JqZWN0LmtleXMoZ2V0Q29uc3RhbnRzKCkpLmZvckVhY2godmlld01hbmFnZXJOYW1lID0+IHtcbiAgICBpZiAoIVVJTWFuYWdlclByb3BlcnRpZXMuaW5jbHVkZXModmlld01hbmFnZXJOYW1lKSkge1xuICAgICAgaWYgKCF2aWV3TWFuYWdlckNvbmZpZ3Nbdmlld01hbmFnZXJOYW1lXSkge1xuICAgICAgICB2aWV3TWFuYWdlckNvbmZpZ3Nbdmlld01hbmFnZXJOYW1lXSA9IGdldENvbnN0YW50cygpW3ZpZXdNYW5hZ2VyTmFtZV07XG4gICAgICB9XG4gICAgICBkZWZpbmVMYXp5T2JqZWN0UHJvcGVydHkoTmF0aXZlVUlNYW5hZ2VyLCB2aWV3TWFuYWdlck5hbWUsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFjY2Vzc2luZyB2aWV3IG1hbmFnZXIgY29uZmlncyBkaXJlY3RseSBvZmYgVUlNYW5hZ2VyIHZpYSBVSU1hbmFnZXJbJyR7dmlld01hbmFnZXJOYW1lfSddIGAgK1xuICAgICAgICAgICAgICBgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVXNlIFVJTWFuYWdlci5nZXRWaWV3TWFuYWdlckNvbmZpZygnJHt2aWV3TWFuYWdlck5hbWV9JykgaW5zdGVhZC5gLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gVUlNYW5hZ2VySlMuZ2V0Vmlld01hbmFnZXJDb25maWcodmlld01hbmFnZXJOYW1lKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVUlNYW5hZ2VySlM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVVSU1hbmFnZXInO1xuaW1wb3J0IE5hdGl2ZVVJTWFuYWdlciBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVVJTWFuYWdlcic7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVVSU1hbmFnZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Um9vdFRhZ30gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArZ2V0Q29uc3RhbnRzOiAoKSA9PiBPYmplY3Q7XG4gICtjcmVhdGVWaWV3OiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICB2aWV3TmFtZTogc3RyaW5nLFxuICAgIHJvb3RUYWc6IFJvb3RUYWcsXG4gICAgcHJvcHM6IE9iamVjdCxcbiAgKSA9PiB2b2lkO1xuICArdXBkYXRlVmlldzogKHJlYWN0VGFnOiBudW1iZXIsIHZpZXdOYW1lOiBzdHJpbmcsIHByb3BzOiBPYmplY3QpID0+IHZvaWQ7XG4gICtmaW5kU3Vidmlld0luOiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBwb2ludDogQXJyYXk8bnVtYmVyPixcbiAgICBjYWxsYmFjazogKFxuICAgICAgbmF0aXZlVmlld1RhZzogbnVtYmVyLFxuICAgICAgbGVmdDogbnVtYmVyLFxuICAgICAgdG9wOiBudW1iZXIsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgKSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG4gICtkaXNwYXRjaFZpZXdNYW5hZ2VyQ29tbWFuZDogKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgY29tbWFuZElEOiBudW1iZXIsIC8vIG51bWJlciB8fCBzdHJpbmdcbiAgICBjb21tYW5kQXJnczogP0FycmF5PGFueT4sXG4gICkgPT4gdm9pZDtcbiAgK21lYXN1cmU6IChcbiAgICByZWFjdFRhZzogbnVtYmVyLFxuICAgIGNhbGxiYWNrOiAoXG4gICAgICBsZWZ0OiBudW1iZXIsXG4gICAgICB0b3A6IG51bWJlcixcbiAgICAgIHdpZHRoOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICAgIHBhZ2VYOiBudW1iZXIsXG4gICAgICBwYWdlWTogbnVtYmVyLFxuICAgICkgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArbWVhc3VyZUluV2luZG93OiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBjYWxsYmFjazogKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArdmlld0lzRGVzY2VuZGFudE9mOiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBhbmNlc3RvclJlYWN0VGFnOiBudW1iZXIsXG4gICAgY2FsbGJhY2s6IChyZXN1bHQ6IEFycmF5PGJvb2xlYW4+KSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG4gICttZWFzdXJlTGF5b3V0OiAoXG4gICAgcmVhY3RUYWc6IG51bWJlcixcbiAgICBhbmNlc3RvclJlYWN0VGFnOiBudW1iZXIsXG4gICAgZXJyb3JDYWxsYmFjazogKGVycm9yOiBPYmplY3QpID0+IHZvaWQsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIGxlZnQ6IG51bWJlcixcbiAgICAgIHRvcDogbnVtYmVyLFxuICAgICAgd2lkdGg6IG51bWJlcixcbiAgICAgIGhlaWdodDogbnVtYmVyLFxuICAgICkgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArbWVhc3VyZUxheW91dFJlbGF0aXZlVG9QYXJlbnQ6IChcbiAgICByZWFjdFRhZzogbnVtYmVyLFxuICAgIGVycm9yQ2FsbGJhY2s6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICAgIGNhbGxiYWNrOiAoXG4gICAgICBsZWZ0OiBudW1iZXIsXG4gICAgICB0b3A6IG51bWJlcixcbiAgICAgIHdpZHRoOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICApID0+IHZvaWQsXG4gICkgPT4gdm9pZDtcbiAgK3NldEpTUmVzcG9uZGVyOiAocmVhY3RUYWc6IG51bWJlciwgYmxvY2tOYXRpdmVSZXNwb25kZXI6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICtjbGVhckpTUmVzcG9uZGVyOiAoKSA9PiB2b2lkO1xuICArY29uZmlndXJlTmV4dExheW91dEFuaW1hdGlvbjogKFxuICAgIGNvbmZpZzogT2JqZWN0LFxuICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkLCAvLyBjaGVjayB3aGF0IGlzIHJldHVybmVkIGhlcmVcbiAgICBlcnJvckNhbGxiYWNrOiAoZXJyb3I6IE9iamVjdCkgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArc2V0Q2hpbGRyZW46IChjb250YWluZXJUYWc6IG51bWJlciwgcmVhY3RUYWdzOiBBcnJheTxudW1iZXI+KSA9PiB2b2lkO1xuICArbWFuYWdlQ2hpbGRyZW46IChcbiAgICBjb250YWluZXJUYWc6IG51bWJlcixcbiAgICBtb3ZlRnJvbUluZGljZXM6IEFycmF5PG51bWJlcj4sXG4gICAgbW92ZVRvSW5kaWNlczogQXJyYXk8bnVtYmVyPixcbiAgICBhZGRDaGlsZFJlYWN0VGFnczogQXJyYXk8bnVtYmVyPixcbiAgICBhZGRBdEluZGljZXM6IEFycmF5PG51bWJlcj4sXG4gICAgcmVtb3ZlQXRJbmRpY2VzOiBBcnJheTxudW1iZXI+LFxuICApID0+IHZvaWQ7XG5cbiAgLy8gQW5kcm9pZCBvbmx5XG4gICtnZXRDb25zdGFudHNGb3JWaWV3TWFuYWdlcj86ICh2aWV3TWFuYWdlck5hbWU6IHN0cmluZykgPT4gP09iamVjdDtcbiAgK2dldERlZmF1bHRFdmVudFR5cGVzPzogKCkgPT4gQXJyYXk8c3RyaW5nPjtcbiAgK3NldExheW91dEFuaW1hdGlvbkVuYWJsZWRFeHBlcmltZW50YWw/OiAoZW5hYmxlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgK3NlbmRBY2Nlc3NpYmlsaXR5RXZlbnQ/OiAocmVhY3RUYWc6IG51bWJlciwgZXZlbnRUeXBlOiBudW1iZXIpID0+IHZvaWQ7XG4gICtzaG93UG9wdXBNZW51PzogKFxuICAgIHJlYWN0VGFnOiBudW1iZXIsXG4gICAgaXRlbXM6IEFycmF5PHN0cmluZz4sXG4gICAgZXJyb3I6IChlcnJvcjogT2JqZWN0KSA9PiB2b2lkLFxuICAgIHN1Y2Nlc3M6IChldmVudDogc3RyaW5nLCBzZWxlY3RlZD86IG51bWJlcikgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArZGlzbWlzc1BvcHVwTWVudT86ICgpID0+IHZvaWQ7XG5cbiAgLy8gaW9zIG9ubHlcbiAgK2xhemlseUxvYWRWaWV3PzogKG5hbWU6IHN0cmluZykgPT4gT2JqZWN0OyAvLyByZXZpc2l0IHJldHVyblxuICArZm9jdXM/OiAocmVhY3RUYWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK2JsdXI/OiAocmVhY3RUYWc6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0RW5mb3JjaW5nPFNwZWM+KCdVSU1hbmFnZXInKTogU3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG5vbi1WaWV3TWFuYWdlciByZWxhdGVkIFVJTWFuYWdlciBwcm9wZXJ0aWVzLlxuICpcbiAqIEluIGFuIGVmZm9ydCB0byBpbXByb3ZlIHN0YXJ0dXAgcGVyZm9ybWFuY2UgYnkgbGF6aWx5IGxvYWRpbmcgdmlldyBtYW5hZ2VycyxcbiAqIHRoZSBpbnRlcmZhY2UgdG8gYWNjZXNzIHZpZXcgbWFuYWdlcnMgd2lsbCBjaGFuZ2UgZnJvbVxuICogVUlNYW5hZ2VyWyd2aWV3TWFuYWdlck5hbWUnXSB0byBVSU1hbmFnZXIuZ2V0Vmlld01hbmFnZXJDb25maWcoJ3ZpZXdNYW5hZ2VyTmFtZScpLlxuICogQnkgdXNpbmcgYSBmdW5jdGlvbiBjYWxsIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBhY2Nlc3MsIHRoZSBVSU1hbmFnZXIgd2lsbFxuICogYmUgYWJsZSB0byBpbml0aWFsaXplIGFuZCBsb2FkIHRoZSByZXF1aXJlZCB2aWV3IG1hbmFnZXIgZnJvbSBuYXRpdmVcbiAqIHN5bmNocm9ub3VzbHkuIEFsbCBvZiBSZWFjdCBOYXRpdmUncyBjb3JlIGNvbXBvbmVudHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG9cbiAqIHVzZSBnZXRWaWV3TWFuYWdlckNvbmZpZygpLiBGb3IgdGhlIG5leHQgZmV3IHJlbGVhc2VzLCBhbnkgdXNhZ2Ugb2ZcbiAqIFVJTWFuYWdlclsndmlld01hbmFnZXJOYW1lJ10gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBCZWNhdXNlIFJlYWN0IE5hdGl2ZVxuICogZG9lcyBub3Qgc3VwcG9ydCBQcm94eSBvYmplY3RzLCBhIHZpZXcgbWFuYWdlciBhY2Nlc3MgaXMgaW1wbGllZCBpZiBhbnkgb2ZcbiAqIFVJTWFuYWdlcidzIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IG9uZSBvZiB0aGUgcHJvcGVydGllcyBiZWxvdyBpcyBiZWluZ1xuICogYWNjZXNzZWQuIE9uY2UgVUlNYW5hZ2VyIHByb3BlcnR5IGFjY2Vzc2VzIGZvciB2aWV3IG1hbmFnZXJzIGhhcyBiZWVuIGZ1bGx5XG4gKiBkZXByZWNhdGVkLCB0aGlzIGZpbGUgd2lsbCBhbHNvIGJlIHJlbW92ZWQuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY2xlYXJKU1Jlc3BvbmRlcicsXG4gICdjb25maWd1cmVOZXh0TGF5b3V0QW5pbWF0aW9uJyxcbiAgJ2NyZWF0ZVZpZXcnLFxuICAnZGlzbWlzc1BvcHVwTWVudScsXG4gICdkaXNwYXRjaFZpZXdNYW5hZ2VyQ29tbWFuZCcsXG4gICdmaW5kU3Vidmlld0luJyxcbiAgJ2dldENvbnN0YW50c0ZvclZpZXdNYW5hZ2VyJyxcbiAgJ2dldERlZmF1bHRFdmVudFR5cGVzJyxcbiAgJ21hbmFnZUNoaWxkcmVuJyxcbiAgJ21lYXN1cmUnLFxuICAnbWVhc3VyZUluV2luZG93JyxcbiAgJ21lYXN1cmVMYXlvdXQnLFxuICAnbWVhc3VyZUxheW91dFJlbGF0aXZlVG9QYXJlbnQnLFxuICAncmVtb3ZlUm9vdFZpZXcnLFxuICAnc2VuZEFjY2Vzc2liaWxpdHlFdmVudCcsXG4gICdzZXRDaGlsZHJlbicsXG4gICdzZXRKU1Jlc3BvbmRlcicsXG4gICdzZXRMYXlvdXRBbmltYXRpb25FbmFibGVkRXhwZXJpbWVudGFsJyxcbiAgJ3Nob3dQb3B1cE1lbnUnLFxuICAndXBkYXRlVmlldycsXG4gICd2aWV3SXNEZXNjZW5kYW50T2YnLFxuICAnUG9wdXBNZW51JyxcbiAgJ0xhenlWaWV3TWFuYWdlcnNFbmFibGVkJyxcbiAgJ1ZpZXdNYW5hZ2VyTmFtZXMnLFxuICAnU3R5bGVDb25zdGFudHMnLFxuICAnQWNjZXNzaWJpbGl0eUV2ZW50VHlwZXMnLFxuICAnVUlWaWV3JyxcbiAgJ2dldFZpZXdNYW5hZ2VyQ29uZmlnJyxcbiAgJ2hhc1ZpZXdNYW5hZ2VyQ29uZmlnJyxcbiAgJ2JsdXInLFxuICAnZm9jdXMnLFxuICAnZ2VuZXJpY0J1YmJsaW5nRXZlbnRUeXBlcycsXG4gICdnZW5lcmljRGlyZWN0RXZlbnRUeXBlcycsXG4gICdsYXppbHlMb2FkVmlldycsXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVbnJvbGxzIGFuIGFycmF5IGNvbXBhcmlzb24gc3BlY2lhbGx5IGZvciBtYXRyaWNlcy4gUHJpb3JpdGl6ZXNcbiAqIGNoZWNraW5nIG9mIGluZGljZXMgdGhhdCBhcmUgbW9zdCBsaWtlbHkgdG8gY2hhbmdlIHNvIHRoYXQgdGhlIGNvbXBhcmlzb25cbiAqIGJhaWxzIGFzIGVhcmx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSB7TWF0cml4TWF0aC5NYXRyaXh9IG9uZSBGaXJzdCBtYXRyaXguXG4gKiBAcGFyYW0ge01hdHJpeE1hdGguTWF0cml4fSB0d28gU2Vjb25kIG1hdHJpeC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSB0d28gbWF0cmljZXMgZGlmZmVyLlxuICovXG5jb25zdCBtYXRyaWNlc0RpZmZlciA9IGZ1bmN0aW9uIChcbiAgb25lOiA/QXJyYXk8bnVtYmVyPixcbiAgdHdvOiA/QXJyYXk8bnVtYmVyPixcbik6IGJvb2xlYW4ge1xuICBpZiAob25lID09PSB0d28pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAhb25lIHx8XG4gICAgIXR3byB8fFxuICAgIG9uZVsxMl0gIT09IHR3b1sxMl0gfHxcbiAgICBvbmVbMTNdICE9PSB0d29bMTNdIHx8XG4gICAgb25lWzE0XSAhPT0gdHdvWzE0XSB8fFxuICAgIG9uZVs1XSAhPT0gdHdvWzVdIHx8XG4gICAgb25lWzEwXSAhPT0gdHdvWzEwXSB8fFxuICAgIG9uZVswXSAhPT0gdHdvWzBdIHx8XG4gICAgb25lWzFdICE9PSB0d29bMV0gfHxcbiAgICBvbmVbMl0gIT09IHR3b1syXSB8fFxuICAgIG9uZVszXSAhPT0gdHdvWzNdIHx8XG4gICAgb25lWzRdICE9PSB0d29bNF0gfHxcbiAgICBvbmVbNl0gIT09IHR3b1s2XSB8fFxuICAgIG9uZVs3XSAhPT0gdHdvWzddIHx8XG4gICAgb25lWzhdICE9PSB0d29bOF0gfHxcbiAgICBvbmVbOV0gIT09IHR3b1s5XSB8fFxuICAgIG9uZVsxMV0gIT09IHR3b1sxMV0gfHxcbiAgICBvbmVbMTVdICE9PSB0d29bMTVdXG4gICk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdHJpY2VzRGlmZmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG50eXBlIFBvaW50ID0ge1xuICB4OiA/bnVtYmVyLFxuICB5OiA/bnVtYmVyLFxuICAuLi5cbn07XG5cbmNvbnN0IGR1bW15UG9pbnQgPSB7eDogdW5kZWZpbmVkLCB5OiB1bmRlZmluZWR9O1xuXG5jb25zdCBwb2ludHNEaWZmZXIgPSBmdW5jdGlvbiAob25lOiA/UG9pbnQsIHR3bzogP1BvaW50KTogYm9vbGVhbiB7XG4gIG9uZSA9IG9uZSB8fCBkdW1teVBvaW50O1xuICB0d28gPSB0d28gfHwgZHVtbXlQb2ludDtcbiAgcmV0dXJuIG9uZSAhPT0gdHdvICYmIChvbmUueCAhPT0gdHdvLnggfHwgb25lLnkgIT09IHR3by55KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gcG9pbnRzRGlmZmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG50eXBlIEluc2V0ID0ge1xuICB0b3A6ID9udW1iZXIsXG4gIGxlZnQ6ID9udW1iZXIsXG4gIHJpZ2h0OiA/bnVtYmVyLFxuICBib3R0b206ID9udW1iZXIsXG4gIC4uLlxufTtcblxuY29uc3QgZHVtbXlJbnNldHMgPSB7XG4gIHRvcDogdW5kZWZpbmVkLFxuICBsZWZ0OiB1bmRlZmluZWQsXG4gIHJpZ2h0OiB1bmRlZmluZWQsXG4gIGJvdHRvbTogdW5kZWZpbmVkLFxufTtcblxuY29uc3QgaW5zZXRzRGlmZmVyID0gZnVuY3Rpb24gKG9uZTogSW5zZXQsIHR3bzogSW5zZXQpOiBib29sZWFuIHtcbiAgb25lID0gb25lIHx8IGR1bW15SW5zZXRzO1xuICB0d28gPSB0d28gfHwgZHVtbXlJbnNldHM7XG4gIHJldHVybiAoXG4gICAgb25lICE9PSB0d28gJiZcbiAgICAob25lLnRvcCAhPT0gdHdvLnRvcCB8fFxuICAgICAgb25lLmxlZnQgIT09IHR3by5sZWZ0IHx8XG4gICAgICBvbmUucmlnaHQgIT09IHR3by5yaWdodCB8fFxuICAgICAgb25lLmJvdHRvbSAhPT0gdHdvLmJvdHRvbSlcbiAgKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXRzRGlmZmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4vU3R5bGVTaGVldCc7XG5cbmltcG9ydCBwcm9jZXNzQ29sb3IsIHt0eXBlIFByb2Nlc3NlZENvbG9yVmFsdWV9IGZyb20gJy4vcHJvY2Vzc0NvbG9yJztcblxuY29uc3QgVFJBTlNQQVJFTlQgPSAwOyAvLyByZ2JhKDAsIDAsIDAsIDApXG5cbmZ1bmN0aW9uIHByb2Nlc3NDb2xvckFycmF5KFxuICBjb2xvcnM6ID8kUmVhZE9ubHlBcnJheTxDb2xvclZhbHVlPixcbik6ID8kUmVhZE9ubHlBcnJheTxQcm9jZXNzZWRDb2xvclZhbHVlPiB7XG4gIHJldHVybiBjb2xvcnMgPT0gbnVsbCA/IG51bGwgOiBjb2xvcnMubWFwKHByb2Nlc3NDb2xvckVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ29sb3JFbGVtZW50KGNvbG9yOiBDb2xvclZhbHVlKTogUHJvY2Vzc2VkQ29sb3JWYWx1ZSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzc0NvbG9yKGNvbG9yKTtcbiAgLy8gRm9yIGludmFsaWQgY29sb3JzLCBmYWxsYmFjayB0byB0cmFuc3BhcmVudC5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHZhbHVlIGluIGNvbG9yIGFycmF5OicsIGNvbG9yKTtcbiAgICByZXR1cm4gVFJBTlNQQVJFTlQ7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3NDb2xvckFycmF5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbi8vIFV0aWxpdGllcyBmb3IgcmVzb2x2aW5nIGFuIGFzc2V0IGludG8gYSBgc291cmNlYCBmb3IgZS5nLiBgSW1hZ2VgXG5cbmltcG9ydCB0eXBlIHtSZXNvbHZlZEFzc2V0U291cmNlfSBmcm9tICcuL0Fzc2V0U291cmNlUmVzb2x2ZXInO1xuaW1wb3J0IHR5cGUge0ltYWdlU291cmNlfSBmcm9tICcuL0ltYWdlU291cmNlJztcblxuaW1wb3J0IFNvdXJjZUNvZGUgZnJvbSAnLi4vTmF0aXZlTW9kdWxlcy9zcGVjcy9OYXRpdmVTb3VyY2VDb2RlJztcblxuY29uc3QgQXNzZXRTb3VyY2VSZXNvbHZlciA9IHJlcXVpcmUoJy4vQXNzZXRTb3VyY2VSZXNvbHZlcicpO1xuY29uc3Qge3BpY2tTY2FsZX0gPSByZXF1aXJlKCcuL0Fzc2V0VXRpbHMnKTtcbmNvbnN0IEFzc2V0UmVnaXN0cnkgPSByZXF1aXJlKCdAcmVhY3QtbmF0aXZlL2Fzc2V0cy1yZWdpc3RyeS9yZWdpc3RyeScpO1xuXG50eXBlIEN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyID0gKFxuICByZXNvbHZlcjogQXNzZXRTb3VyY2VSZXNvbHZlcixcbikgPT4gP1Jlc29sdmVkQXNzZXRTb3VyY2U7XG5cbmxldCBfY3VzdG9tU291cmNlVHJhbnNmb3JtZXJzOiBBcnJheTxDdXN0b21Tb3VyY2VUcmFuc2Zvcm1lcj4gPSBbXTtcbmxldCBfc2VydmVyVVJMOiA/c3RyaW5nO1xubGV0IF9zY3JpcHRVUkw6ID9zdHJpbmc7XG5sZXQgX3NvdXJjZUNvZGVTY3JpcHRVUkw6ID9zdHJpbmc7XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUNvZGVTY3JpcHRVUkwoKTogP3N0cmluZyB7XG4gIGlmIChfc291cmNlQ29kZVNjcmlwdFVSTCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIF9zb3VyY2VDb2RlU2NyaXB0VVJMO1xuICB9XG5cbiAgX3NvdXJjZUNvZGVTY3JpcHRVUkwgPSBTb3VyY2VDb2RlLmdldENvbnN0YW50cygpLnNjcmlwdFVSTDtcbiAgcmV0dXJuIF9zb3VyY2VDb2RlU2NyaXB0VVJMO1xufVxuXG5mdW5jdGlvbiBnZXREZXZTZXJ2ZXJVUkwoKTogP3N0cmluZyB7XG4gIGlmIChfc2VydmVyVVJMID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzb3VyY2VDb2RlU2NyaXB0VVJMID0gZ2V0U291cmNlQ29kZVNjcmlwdFVSTCgpO1xuICAgIGNvbnN0IG1hdGNoID0gc291cmNlQ29kZVNjcmlwdFVSTD8ubWF0Y2goL15odHRwcz86XFwvXFwvLio/XFwvLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAvLyBqc0J1bmRsZSB3YXMgbG9hZGVkIGZyb20gbmV0d29ya1xuICAgICAgX3NlcnZlclVSTCA9IG1hdGNoWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqc0J1bmRsZSB3YXMgbG9hZGVkIGZyb20gZmlsZVxuICAgICAgX3NlcnZlclVSTCA9IG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBfc2VydmVyVVJMO1xufVxuXG5mdW5jdGlvbiBfY29lcmNlTG9jYWxTY3JpcHRVUkwoc2NyaXB0VVJMOiA/c3RyaW5nKTogP3N0cmluZyB7XG4gIGxldCBub3JtYWxpemVkU2NyaXB0VVJMID0gc2NyaXB0VVJMO1xuXG4gIGlmIChub3JtYWxpemVkU2NyaXB0VVJMICE9IG51bGwpIHtcbiAgICBpZiAobm9ybWFsaXplZFNjcmlwdFVSTC5zdGFydHNXaXRoKCdhc3NldHM6Ly8nKSkge1xuICAgICAgLy8gYW5kcm9pZDogcnVubmluZyBmcm9tIHdpdGhpbiBhc3NldHMsIG5vIG9mZmxpbmUgcGF0aCB0byB1c2VcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkU2NyaXB0VVJMID0gbm9ybWFsaXplZFNjcmlwdFVSTC5zdWJzdHJpbmcoXG4gICAgICAwLFxuICAgICAgbm9ybWFsaXplZFNjcmlwdFVSTC5sYXN0SW5kZXhPZignLycpICsgMSxcbiAgICApO1xuICAgIGlmICghbm9ybWFsaXplZFNjcmlwdFVSTC5pbmNsdWRlcygnOi8vJykpIHtcbiAgICAgIC8vIEFkZCBmaWxlIHByb3RvY29sIGluIGNhc2Ugd2UgaGF2ZSBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggYW5kIG5vdCBhIFVSTC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IHJlYWxseSBiZSBuZWNlc3NhcnkuIHNjcmlwdFVSTCBzaG91bGQgYmUgYSBVUkwuXG4gICAgICBub3JtYWxpemVkU2NyaXB0VVJMID0gJ2ZpbGU6Ly8nICsgbm9ybWFsaXplZFNjcmlwdFVSTDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFNjcmlwdFVSTDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NyaXB0VVJMKCk6ID9zdHJpbmcge1xuICBpZiAoX3NjcmlwdFVSTCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgX3NjcmlwdFVSTCA9IF9jb2VyY2VMb2NhbFNjcmlwdFVSTChnZXRTb3VyY2VDb2RlU2NyaXB0VVJMKCkpO1xuICB9XG4gIHJldHVybiBfc2NyaXB0VVJMO1xufVxuXG4vKipcbiAqIGB0cmFuc2Zvcm1lcmAgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBhcHBseSBhIGN1c3RvbSB0cmFuc2Zvcm1hdGlvbiB3aGVuXG4gKiByZXNvbHZpbmcgYW4gYXNzZXQgc291cmNlLiBUaGlzIG1ldGhvZHMgb3ZlcnJpZGVzIGFsbCBvdGhlciBjdXN0b20gdHJhbnNmb3JtZXJzXG4gKiB0aGF0IG1heSBoYXZlIGJlZW4gcHJldmlvdXNseSByZWdpc3RlcmVkLlxuICovXG5mdW5jdGlvbiBzZXRDdXN0b21Tb3VyY2VUcmFuc2Zvcm1lcihcbiAgdHJhbnNmb3JtZXI6IEN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyLFxuKTogdm9pZCB7XG4gIF9jdXN0b21Tb3VyY2VUcmFuc2Zvcm1lcnMgPSBbdHJhbnNmb3JtZXJdO1xufVxuXG4vKipcbiAqIEFkZHMgYSBgdHJhbnNmb3JtZXJgIGludG8gdGhlIGNoYWluIG9mIGN1c3RvbSBzb3VyY2UgdHJhbnNmb3JtZXJzLCB3aGljaCB3aWxsXG4gKiBiZSBhcHBsaWVkIGluIHRoZSBvcmRlciByZWdpc3RlcmVkLCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbi1udWxsIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhZGRDdXN0b21Tb3VyY2VUcmFuc2Zvcm1lcihcbiAgdHJhbnNmb3JtZXI6IEN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyLFxuKTogdm9pZCB7XG4gIF9jdXN0b21Tb3VyY2VUcmFuc2Zvcm1lcnMucHVzaCh0cmFuc2Zvcm1lcik7XG59XG5cbi8qKlxuICogYHNvdXJjZWAgaXMgZWl0aGVyIGEgbnVtYmVyIChvcGFxdWUgdHlwZSByZXR1cm5lZCBieSByZXF1aXJlKCcuL2Zvby5wbmcnKSlcbiAqIG9yIGFuIGBJbWFnZVNvdXJjZWAgbGlrZSB7IHVyaTogJzxodHRwIGxvY2F0aW9uIHx8IGZpbGUgcGF0aD4nIH1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0U291cmNlKHNvdXJjZTogP0ltYWdlU291cmNlKTogP1Jlc29sdmVkQXNzZXRTb3VyY2Uge1xuICBpZiAoc291cmNlID09IG51bGwgfHwgdHlwZW9mIHNvdXJjZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1leGFjdF0gYHNvdXJjZWAgZG9lc24ndCBleGFjdGx5IG1hdGNoIGBSZXNvbHZlZEFzc2V0U291cmNlYFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gYHNvdXJjZWAgZG9lc24ndCBleGFjdGx5IG1hdGNoIGBSZXNvbHZlZEFzc2V0U291cmNlYFxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBhc3NldCA9IEFzc2V0UmVnaXN0cnkuZ2V0QXNzZXRCeUlEKHNvdXJjZSk7XG4gIGlmICghYXNzZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVyID0gbmV3IEFzc2V0U291cmNlUmVzb2x2ZXIoXG4gICAgZ2V0RGV2U2VydmVyVVJMKCksXG4gICAgZ2V0U2NyaXB0VVJMKCksXG4gICAgYXNzZXQsXG4gICk7XG5cbiAgLy8gQXBwbHkgKGNoYWluZWQpIGN1c3RvbSBzb3VyY2UgdHJhbnNmb3JtZXJzLCBpZiBhbnlcbiAgaWYgKF9jdXN0b21Tb3VyY2VUcmFuc2Zvcm1lcnMpIHtcbiAgICBmb3IgKGNvbnN0IGN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyIG9mIF9jdXN0b21Tb3VyY2VUcmFuc2Zvcm1lcnMpIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU291cmNlID0gY3VzdG9tU291cmNlVHJhbnNmb3JtZXIocmVzb2x2ZXIpO1xuICAgICAgaWYgKHRyYW5zZm9ybWVkU291cmNlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkU291cmNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNvbHZlci5kZWZhdWx0QXNzZXQoKTtcbn1cblxucmVzb2x2ZUFzc2V0U291cmNlLnBpY2tTY2FsZSA9IHBpY2tTY2FsZTtcbnJlc29sdmVBc3NldFNvdXJjZS5zZXRDdXN0b21Tb3VyY2VUcmFuc2Zvcm1lciA9IHNldEN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyO1xucmVzb2x2ZUFzc2V0U291cmNlLmFkZEN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyID0gYWRkQ3VzdG9tU291cmNlVHJhbnNmb3JtZXI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmVBc3NldFNvdXJjZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB0eXBlIFBhY2thZ2VyQXNzZXQgPSB7XG4gICtfX3BhY2thZ2VyX2Fzc2V0OiBib29sZWFuLFxuICArZmlsZVN5c3RlbUxvY2F0aW9uOiBzdHJpbmcsXG4gICtodHRwU2VydmVyTG9jYXRpb246IHN0cmluZyxcbiAgK3dpZHRoOiA/bnVtYmVyLFxuICAraGVpZ2h0OiA/bnVtYmVyLFxuICArc2NhbGVzOiBBcnJheTxudW1iZXI+LFxuICAraGFzaDogc3RyaW5nLFxuICArbmFtZTogc3RyaW5nLFxuICArdHlwZTogc3RyaW5nLFxuICAuLi5cbn07XG5cbmNvbnN0IGFzc2V0czogQXJyYXk8UGFja2FnZXJBc3NldD4gPSBbXTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJBc3NldChhc3NldDogUGFja2FnZXJBc3NldCk6IG51bWJlciB7XG4gIC8vIGBwdXNoYCByZXR1cm5zIG5ldyBhcnJheSBsZW5ndGgsIHNvIHRoZSBmaXJzdCBhc3NldCB3aWxsXG4gIC8vIGdldCBpZCAxIChub3QgMCkgdG8gbWFrZSB0aGUgdmFsdWUgdHJ1dGh5XG4gIHJldHVybiBhc3NldHMucHVzaChhc3NldCk7XG59XG5cbmZ1bmN0aW9uIGdldEFzc2V0QnlJRChhc3NldElkOiBudW1iZXIpOiBQYWNrYWdlckFzc2V0IHtcbiAgcmV0dXJuIGFzc2V0c1thc3NldElkIC0gMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge3JlZ2lzdGVyQXNzZXQsIGdldEFzc2V0QnlJRH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEFzc2V0U291cmNlID0ge3xcbiAgK19fcGFja2FnZXJfYXNzZXQ6IGJvb2xlYW4sXG4gICt3aWR0aDogP251bWJlcixcbiAgK2hlaWdodDogP251bWJlcixcbiAgK3VyaTogc3RyaW5nLFxuICArc2NhbGU6IG51bWJlcixcbnx9O1xuXG5pbXBvcnQgdHlwZSB7UGFja2FnZXJBc3NldH0gZnJvbSAnQHJlYWN0LW5hdGl2ZS9hc3NldHMtcmVnaXN0cnkvcmVnaXN0cnknO1xuXG5jb25zdCBQaXhlbFJhdGlvID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL1BpeGVsUmF0aW8nKS5kZWZhdWx0O1xuY29uc3QgUGxhdGZvcm0gPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nKTtcbmNvbnN0IHtwaWNrU2NhbGV9ID0gcmVxdWlyZSgnLi9Bc3NldFV0aWxzJyk7XG5jb25zdCB7XG4gIGdldEFuZHJvaWRSZXNvdXJjZUZvbGRlck5hbWUsXG4gIGdldEFuZHJvaWRSZXNvdXJjZUlkZW50aWZpZXIsXG4gIGdldEJhc2VQYXRoLFxufSA9IHJlcXVpcmUoJ0ByZWFjdC1uYXRpdmUvYXNzZXRzLXJlZ2lzdHJ5L3BhdGgtc3VwcG9ydCcpO1xuY29uc3QgaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbi8qKlxuICogUmV0dXJucyBhIHBhdGggbGlrZSAnYXNzZXRzL0F3ZXNvbWVNb2R1bGUvaWNvbkAyeC5wbmcnXG4gKi9cbmZ1bmN0aW9uIGdldFNjYWxlZEFzc2V0UGF0aChhc3NldDogUGFja2FnZXJBc3NldCk6IHN0cmluZyB7XG4gIGNvbnN0IHNjYWxlID0gcGlja1NjYWxlKGFzc2V0LnNjYWxlcywgUGl4ZWxSYXRpby5nZXQoKSk7XG4gIGNvbnN0IHNjYWxlU3VmZml4ID0gc2NhbGUgPT09IDEgPyAnJyA6ICdAJyArIHNjYWxlICsgJ3gnO1xuICBjb25zdCBhc3NldERpciA9IGdldEJhc2VQYXRoKGFzc2V0KTtcbiAgcmV0dXJuIGFzc2V0RGlyICsgJy8nICsgYXNzZXQubmFtZSArIHNjYWxlU3VmZml4ICsgJy4nICsgYXNzZXQudHlwZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcGF0aCBsaWtlICdkcmF3YWJsZS1tZHBpL2ljb24ucG5nJ1xuICovXG5mdW5jdGlvbiBnZXRBc3NldFBhdGhJbkRyYXdhYmxlRm9sZGVyKGFzc2V0OiBQYWNrYWdlckFzc2V0KTogc3RyaW5nIHtcbiAgY29uc3Qgc2NhbGUgPSBwaWNrU2NhbGUoYXNzZXQuc2NhbGVzLCBQaXhlbFJhdGlvLmdldCgpKTtcbiAgY29uc3QgZHJhd2FibGVGb2xkZXIgPSBnZXRBbmRyb2lkUmVzb3VyY2VGb2xkZXJOYW1lKGFzc2V0LCBzY2FsZSk7XG4gIGNvbnN0IGZpbGVOYW1lID0gZ2V0QW5kcm9pZFJlc291cmNlSWRlbnRpZmllcihhc3NldCk7XG4gIHJldHVybiBkcmF3YWJsZUZvbGRlciArICcvJyArIGZpbGVOYW1lICsgJy4nICsgYXNzZXQudHlwZTtcbn1cblxuY2xhc3MgQXNzZXRTb3VyY2VSZXNvbHZlciB7XG4gIHNlcnZlclVybDogP3N0cmluZztcbiAgLy8gd2hlcmUgdGhlIGpzYnVuZGxlIGlzIGJlaW5nIHJ1biBmcm9tXG4gIGpzYnVuZGxlVXJsOiA/c3RyaW5nO1xuICAvLyB0aGUgYXNzZXQgdG8gcmVzb2x2ZVxuICBhc3NldDogUGFja2FnZXJBc3NldDtcblxuICBjb25zdHJ1Y3RvcihzZXJ2ZXJVcmw6ID9zdHJpbmcsIGpzYnVuZGxlVXJsOiA/c3RyaW5nLCBhc3NldDogUGFja2FnZXJBc3NldCkge1xuICAgIHRoaXMuc2VydmVyVXJsID0gc2VydmVyVXJsO1xuICAgIHRoaXMuanNidW5kbGVVcmwgPSBqc2J1bmRsZVVybDtcbiAgICB0aGlzLmFzc2V0ID0gYXNzZXQ7XG4gIH1cblxuICBpc0xvYWRlZEZyb21TZXJ2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zZXJ2ZXJVcmw7XG4gIH1cblxuICBpc0xvYWRlZEZyb21GaWxlU3lzdGVtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmpzYnVuZGxlVXJsICE9IG51bGwgJiYgdGhpcy5qc2J1bmRsZVVybD8uc3RhcnRzV2l0aCgnZmlsZTovLycpO1xuICB9XG5cbiAgZGVmYXVsdEFzc2V0KCk6IFJlc29sdmVkQXNzZXRTb3VyY2Uge1xuICAgIGlmICh0aGlzLmlzTG9hZGVkRnJvbVNlcnZlcigpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc3NldFNlcnZlclVSTCgpO1xuICAgIH1cblxuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xvYWRlZEZyb21GaWxlU3lzdGVtKClcbiAgICAgICAgPyB0aGlzLmRyYXdhYmxlRm9sZGVySW5CdW5kbGUoKVxuICAgICAgICA6IHRoaXMucmVzb3VyY2VJZGVudGlmaWVyV2l0aG91dFNjYWxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNjYWxlZEFzc2V0VVJMTmVhckJ1bmRsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFic29sdXRlIFVSTCB3aGljaCBjYW4gYmUgdXNlZCB0byBmZXRjaCB0aGUgYXNzZXRcbiAgICogZnJvbSB0aGUgZGV2c2VydmVyXG4gICAqL1xuICBhc3NldFNlcnZlclVSTCgpOiBSZXNvbHZlZEFzc2V0U291cmNlIHtcbiAgICBpbnZhcmlhbnQodGhpcy5zZXJ2ZXJVcmwgIT0gbnVsbCwgJ25lZWQgc2VydmVyIHRvIGxvYWQgZnJvbScpO1xuICAgIHJldHVybiB0aGlzLmZyb21Tb3VyY2UoXG4gICAgICB0aGlzLnNlcnZlclVybCArXG4gICAgICAgIGdldFNjYWxlZEFzc2V0UGF0aCh0aGlzLmFzc2V0KSArXG4gICAgICAgICc/cGxhdGZvcm09JyArXG4gICAgICAgIFBsYXRmb3JtLk9TICtcbiAgICAgICAgJyZoYXNoPScgK1xuICAgICAgICB0aGlzLmFzc2V0Lmhhc2gsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0byBqdXN0IHRoZSBzY2FsZWQgYXNzZXQgZmlsZW5hbWVcbiAgICogRS5nLiAnYXNzZXRzL0F3ZXNvbWVNb2R1bGUvaWNvbkAyeC5wbmcnXG4gICAqL1xuICBzY2FsZWRBc3NldFBhdGgoKTogUmVzb2x2ZWRBc3NldFNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbVNvdXJjZShnZXRTY2FsZWRBc3NldFBhdGgodGhpcy5hc3NldCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRvIHdoZXJlIHRoZSBidW5kbGUgaXMgcnVubmluZyBmcm9tLCB3aXRoIGEgc2NhbGVkIGFzc2V0IGZpbGVuYW1lXG4gICAqIEUuZy4gJ2ZpbGU6Ly8vc2RjYXJkL2J1bmRsZS9hc3NldHMvQXdlc29tZU1vZHVsZS9pY29uQDJ4LnBuZydcbiAgICovXG4gIHNjYWxlZEFzc2V0VVJMTmVhckJ1bmRsZSgpOiBSZXNvbHZlZEFzc2V0U291cmNlIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5qc2J1bmRsZVVybCA/PyAnZmlsZTovLyc7XG4gICAgcmV0dXJuIHRoaXMuZnJvbVNvdXJjZShcbiAgICAgIC8vIEFzc2V0cyBjYW4gaGF2ZSByZWxhdGl2ZSBwYXRocyBvdXRzaWRlIG9mIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAgICAvLyBXaGVuIGJ1bmRsaW5nIHRoZW0gd2UgcmVwbGFjZSBgLi4vYCB3aXRoIGBfYCB0byBtYWtlIHN1cmUgdGhleVxuICAgICAgLy8gZG9uJ3QgZW5kIHVwIG91dHNpZGUgb2YgdGhlIGV4cGVjdGVkIGFzc2V0cyBkaXJlY3RvcnkuXG4gICAgICBwYXRoICsgZ2V0U2NhbGVkQXNzZXRQYXRoKHRoaXMuYXNzZXQpLnJlcGxhY2UoL1xcLlxcLlxcLy9nLCAnXycpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgYXNzZXRzIGJ1bmRsZWQgd2l0aCB0aGUgYXBwLCBsb2NhdGVkIGJ5XG4gICAqIHJlc291cmNlIGlkZW50aWZpZXJcbiAgICogVGhlIEFuZHJvaWQgcmVzb3VyY2Ugc3lzdGVtIHBpY2tzIHRoZSBjb3JyZWN0IHNjYWxlLlxuICAgKiBFLmcuICdhc3NldHNfYXdlc29tZW1vZHVsZV9pY29uJ1xuICAgKi9cbiAgcmVzb3VyY2VJZGVudGlmaWVyV2l0aG91dFNjYWxlKCk6IFJlc29sdmVkQXNzZXRTb3VyY2Uge1xuICAgIGludmFyaWFudChcbiAgICAgIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcsXG4gICAgICAncmVzb3VyY2UgaWRlbnRpZmllcnMgd29yayBvbiBBbmRyb2lkJyxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmZyb21Tb3VyY2UoZ2V0QW5kcm9pZFJlc291cmNlSWRlbnRpZmllcih0aGlzLmFzc2V0KSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGpzYnVuZGxlIGlzIHJ1bm5pbmcgZnJvbSBhIHNpZGVsb2FkIGxvY2F0aW9uLCB0aGlzIHJlc29sdmVzIGFzc2V0c1xuICAgKiByZWxhdGl2ZSB0byBpdHMgbG9jYXRpb25cbiAgICogRS5nLiAnZmlsZTovLy9zZGNhcmQvQXdlc29tZU1vZHVsZS9kcmF3YWJsZS1tZHBpL2ljb24ucG5nJ1xuICAgKi9cbiAgZHJhd2FibGVGb2xkZXJJbkJ1bmRsZSgpOiBSZXNvbHZlZEFzc2V0U291cmNlIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5qc2J1bmRsZVVybCA/PyAnZmlsZTovLyc7XG4gICAgcmV0dXJuIHRoaXMuZnJvbVNvdXJjZShwYXRoICsgZ2V0QXNzZXRQYXRoSW5EcmF3YWJsZUZvbGRlcih0aGlzLmFzc2V0KSk7XG4gIH1cblxuICBmcm9tU291cmNlKHNvdXJjZTogc3RyaW5nKTogUmVzb2x2ZWRBc3NldFNvdXJjZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fcGFja2FnZXJfYXNzZXQ6IHRydWUsXG4gICAgICB3aWR0aDogdGhpcy5hc3NldC53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5hc3NldC5oZWlnaHQsXG4gICAgICB1cmk6IHNvdXJjZSxcbiAgICAgIHNjYWxlOiBwaWNrU2NhbGUodGhpcy5hc3NldC5zY2FsZXMsIFBpeGVsUmF0aW8uZ2V0KCkpLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcGlja1NjYWxlOiAoc2NhbGVzOiBBcnJheTxudW1iZXI+LCBkZXZpY2VTY2FsZT86IG51bWJlcikgPT4gbnVtYmVyID1cbiAgICBwaWNrU2NhbGU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXNzZXRTb3VyY2VSZXNvbHZlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgUGl4ZWxSYXRpbyBmcm9tICcuLi9VdGlsaXRpZXMvUGl4ZWxSYXRpbyc7XG5cbmxldCBjYWNoZUJyZWFrZXI7XG5sZXQgd2FybklmQ2FjaGVCcmVha2VyVW5zZXQgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gcGlja1NjYWxlKHNjYWxlczogQXJyYXk8bnVtYmVyPiwgZGV2aWNlU2NhbGU/OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCByZXF1aXJlZERldmljZVNjYWxlID0gZGV2aWNlU2NhbGUgPz8gUGl4ZWxSYXRpby5nZXQoKTtcblxuICAvLyBQYWNrYWdlciBndWFyYW50ZWVzIHRoYXQgYHNjYWxlc2AgYXJyYXkgaXMgc29ydGVkXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNjYWxlc1tpXSA+PSByZXF1aXJlZERldmljZVNjYWxlKSB7XG4gICAgICByZXR1cm4gc2NhbGVzW2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIG5vdGhpbmcgbWF0Y2hlcywgZGV2aWNlIHNjYWxlIGlzIGxhcmdlciB0aGFuIGFueSBhdmFpbGFibGVcbiAgLy8gc2NhbGVzLCBzbyB3ZSByZXR1cm4gdGhlIGJpZ2dlc3Qgb25lLiBVbmxlc3MgdGhlIGFycmF5IGlzIGVtcHR5LFxuICAvLyBpbiB3aGljaCBjYXNlIHdlIGRlZmF1bHQgdG8gMVxuICByZXR1cm4gc2NhbGVzW3NjYWxlcy5sZW5ndGggLSAxXSB8fCAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXJsQ2FjaGVCcmVha2VyKGFwcGVuZGFnZTogc3RyaW5nKSB7XG4gIGNhY2hlQnJlYWtlciA9IGFwcGVuZGFnZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVybENhY2hlQnJlYWtlcigpOiBzdHJpbmcge1xuICBpZiAoY2FjaGVCcmVha2VyID09IG51bGwpIHtcbiAgICBpZiAoX19ERVZfXyAmJiB3YXJuSWZDYWNoZUJyZWFrZXJVbnNldCkge1xuICAgICAgd2FybklmQ2FjaGVCcmVha2VyVW5zZXQgPSBmYWxzZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0Fzc2V0VXRpbHMuZ2V0VXJsQ2FjaGVCcmVha2VyOiBDYWNoZSBicmVha2VyIHZhbHVlIGlzIHVuc2V0JyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gY2FjaGVCcmVha2VyO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGltZW5zaW9ucyA9IHJlcXVpcmUoJy4vRGltZW5zaW9ucycpLmRlZmF1bHQ7XG5cbi8qKlxuICogUGl4ZWxSYXRpbyBjbGFzcyBnaXZlcyBhY2Nlc3MgdG8gdGhlIGRldmljZSBwaXhlbCBkZW5zaXR5LlxuICpcbiAqICMjIEZldGNoaW5nIGEgY29ycmVjdGx5IHNpemVkIGltYWdlXG4gKlxuICogWW91IHNob3VsZCBnZXQgYSBoaWdoZXIgcmVzb2x1dGlvbiBpbWFnZSBpZiB5b3UgYXJlIG9uIGEgaGlnaCBwaXhlbCBkZW5zaXR5XG4gKiBkZXZpY2UuIEEgZ29vZCBydWxlIG9mIHRodW1iIGlzIHRvIG11bHRpcGx5IHRoZSBzaXplIG9mIHRoZSBpbWFnZSB5b3UgZGlzcGxheVxuICogYnkgdGhlIHBpeGVsIHJhdGlvLlxuICpcbiAqIGBgYFxuICogdmFyIGltYWdlID0gZ2V0SW1hZ2Uoe1xuICogICB3aWR0aDogUGl4ZWxSYXRpby5nZXRQaXhlbFNpemVGb3JMYXlvdXRTaXplKDIwMCksXG4gKiAgIGhlaWdodDogUGl4ZWxSYXRpby5nZXRQaXhlbFNpemVGb3JMYXlvdXRTaXplKDEwMCksXG4gKiB9KTtcbiAqIDxJbWFnZSBzb3VyY2U9e2ltYWdlfSBzdHlsZT17e3dpZHRoOiAyMDAsIGhlaWdodDogMTAwfX0gLz5cbiAqIGBgYFxuICpcbiAqICMjIFBpeGVsIGdyaWQgc25hcHBpbmdcbiAqXG4gKiBJbiBpT1MsIHlvdSBjYW4gc3BlY2lmeSBwb3NpdGlvbnMgYW5kIGRpbWVuc2lvbnMgZm9yIGVsZW1lbnRzIHdpdGggYXJiaXRyYXJ5XG4gKiBwcmVjaXNpb24sIGZvciBleGFtcGxlIDI5LjY3NDgyNS4gQnV0LCB1bHRpbWF0ZWx5IHRoZSBwaHlzaWNhbCBkaXNwbGF5IG9ubHlcbiAqIGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgcGl4ZWxzLCBmb3IgZXhhbXBsZSA2NDDDlzk2MCBmb3IgaVBob25lIDQgb3IgNzUww5cxMzM0XG4gKiBmb3IgaVBob25lIDYuIGlPUyB0cmllcyB0byBiZSBhcyBmYWl0aGZ1bCBhcyBwb3NzaWJsZSB0byB0aGUgdXNlciB2YWx1ZSBieVxuICogc3ByZWFkaW5nIG9uZSBvcmlnaW5hbCBwaXhlbCBpbnRvIG11bHRpcGxlIG9uZXMgdG8gdHJpY2sgdGhlIGV5ZS4gVGhlXG4gKiBkb3duc2lkZSBvZiB0aGlzIHRlY2huaXF1ZSBpcyB0aGF0IGl0IG1ha2VzIHRoZSByZXN1bHRpbmcgZWxlbWVudCBsb29rXG4gKiBibHVycnkuXG4gKlxuICogSW4gcHJhY3RpY2UsIHdlIGZvdW5kIG91dCB0aGF0IGRldmVsb3BlcnMgZG8gbm90IHdhbnQgdGhpcyBmZWF0dXJlIGFuZCB0aGV5XG4gKiBoYXZlIHRvIHdvcmsgYXJvdW5kIGl0IGJ5IGRvaW5nIG1hbnVhbCByb3VuZGluZyBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmdcbiAqIGJsdXJyeSBlbGVtZW50cy4gSW4gUmVhY3QgTmF0aXZlLCB3ZSBhcmUgcm91bmRpbmcgYWxsIHRoZSBwaXhlbHNcbiAqIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIHdoZW4gdG8gZG8gdGhpcyByb3VuZGluZy4gWW91IG5ldmVyIHdhbnQgdG8gd29yayB3aXRoXG4gKiByb3VuZGVkIGFuZCB1bnJvdW5kZWQgdmFsdWVzIGF0IHRoZSBzYW1lIHRpbWUgYXMgeW91J3JlIGdvaW5nIHRvIGFjY3VtdWxhdGVcbiAqIHJvdW5kaW5nIGVycm9ycy4gSGF2aW5nIGV2ZW4gb25lIHJvdW5kaW5nIGVycm9yIGlzIGRlYWRseSBiZWNhdXNlIGEgb25lXG4gKiBwaXhlbCBib3JkZXIgbWF5IHZhbmlzaCBvciBiZSB0d2ljZSBhcyBiaWcuXG4gKlxuICogSW4gUmVhY3QgTmF0aXZlLCBldmVyeXRoaW5nIGluIEphdmFTY3JpcHQgYW5kIHdpdGhpbiB0aGUgbGF5b3V0IGVuZ2luZSB3b3Jrc1xuICogd2l0aCBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlcnMuIEl0J3Mgb25seSB3aGVuIHdlIHNldCB0aGUgcG9zaXRpb24gYW5kXG4gKiBkaW1lbnNpb25zIG9mIHRoZSBuYXRpdmUgZWxlbWVudCBvbiB0aGUgbWFpbiB0aHJlYWQgdGhhdCB3ZSByb3VuZC4gQWxzbyxcbiAqIHJvdW5kaW5nIGlzIGRvbmUgcmVsYXRpdmUgdG8gdGhlIHJvb3QgcmF0aGVyIHRoYW4gdGhlIHBhcmVudCwgYWdhaW4gdG8gYXZvaWRcbiAqIGFjY3VtdWxhdGluZyByb3VuZGluZyBlcnJvcnMuXG4gKlxuICovXG5jbGFzcyBQaXhlbFJhdGlvIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRldmljZSBwaXhlbCBkZW5zaXR5LiBTb21lIGV4YW1wbGVzOlxuICAgKlxuICAgKiAgIC0gUGl4ZWxSYXRpby5nZXQoKSA9PT0gMVxuICAgKiAgICAgLSBtZHBpIEFuZHJvaWQgZGV2aWNlcyAoMTYwIGRwaSlcbiAgICogICAtIFBpeGVsUmF0aW8uZ2V0KCkgPT09IDEuNVxuICAgKiAgICAgLSBoZHBpIEFuZHJvaWQgZGV2aWNlcyAoMjQwIGRwaSlcbiAgICogICAtIFBpeGVsUmF0aW8uZ2V0KCkgPT09IDJcbiAgICogICAgIC0gaVBob25lIDQsIDRTXG4gICAqICAgICAtIGlQaG9uZSA1LCA1YywgNXNcbiAgICogICAgIC0gaVBob25lIDZcbiAgICogICAgIC0gaVBob25lIDdcbiAgICogICAgIC0gaVBob25lIDhcbiAgICogICAgIC0gaVBob25lIFNFXG4gICAqICAgICAtIHhoZHBpIEFuZHJvaWQgZGV2aWNlcyAoMzIwIGRwaSlcbiAgICogICAtIFBpeGVsUmF0aW8uZ2V0KCkgPT09IDNcbiAgICogICAgIC0gaVBob25lIDYgUGx1c1xuICAgKiAgICAgLSBpUGhvbmUgNyBQbHVzXG4gICAqICAgICAtIGlQaG9uZSA4IFBsdXNcbiAgICogICAgIC0gaVBob25lIFhcbiAgICogICAgIC0geHhoZHBpIEFuZHJvaWQgZGV2aWNlcyAoNDgwIGRwaSlcbiAgICogICAtIFBpeGVsUmF0aW8uZ2V0KCkgPT09IDMuNVxuICAgKiAgICAgLSBOZXh1cyA2XG4gICAqL1xuICBzdGF0aWMgZ2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZ2V0KCd3aW5kb3cnKS5zY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzY2FsaW5nIGZhY3RvciBmb3IgZm9udCBzaXplcy4gVGhpcyBpcyB0aGUgcmF0aW8gdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGVcbiAgICogYWJzb2x1dGUgZm9udCBzaXplLCBzbyBhbnkgZWxlbWVudHMgdGhhdCBoZWF2aWx5IGRlcGVuZCBvbiB0aGF0IHNob3VsZCB1c2UgdGhpcyB0byBkb1xuICAgKiBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIElmIGEgZm9udCBzY2FsZSBpcyBub3Qgc2V0LCB0aGlzIHJldHVybnMgdGhlIGRldmljZSBwaXhlbCByYXRpby5cbiAgICpcbiAgICogVGhpcyByZWZsZWN0cyB0aGUgdXNlciBwcmVmZXJlbmNlIHNldCBpbjpcbiAgICogIC0gU2V0dGluZ3MgPiBEaXNwbGF5ID4gRm9udCBzaXplIG9uIEFuZHJvaWQsXG4gICAqICAtIFNldHRpbmdzID4gRGlzcGxheSAmIEJyaWdodG5lc3MgPiBUZXh0IFNpemUgb24gaU9TLlxuICAgKi9cbiAgc3RhdGljIGdldEZvbnRTY2FsZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmdldCgnd2luZG93JykuZm9udFNjYWxlIHx8IFBpeGVsUmF0aW8uZ2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBsYXlvdXQgc2l6ZSAoZHApIHRvIHBpeGVsIHNpemUgKHB4KS5cbiAgICpcbiAgICogR3VhcmFudGVlZCB0byByZXR1cm4gYW4gaW50ZWdlciBudW1iZXIuXG4gICAqL1xuICBzdGF0aWMgZ2V0UGl4ZWxTaXplRm9yTGF5b3V0U2l6ZShsYXlvdXRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGxheW91dFNpemUgKiBQaXhlbFJhdGlvLmdldCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3VuZHMgYSBsYXlvdXQgc2l6ZSAoZHApIHRvIHRoZSBuZWFyZXN0IGxheW91dCBzaXplIHRoYXQgY29ycmVzcG9uZHMgdG9cbiAgICogYW4gaW50ZWdlciBudW1iZXIgb2YgcGl4ZWxzLiBGb3IgZXhhbXBsZSwgb24gYSBkZXZpY2Ugd2l0aCBhIFBpeGVsUmF0aW9cbiAgICogb2YgMywgYFBpeGVsUmF0aW8ucm91bmRUb05lYXJlc3RQaXhlbCg4LjQpID0gOC4zM2AsIHdoaWNoIGNvcnJlc3BvbmRzIHRvXG4gICAqIGV4YWN0bHkgKDguMzMgKiAzKSA9IDI1IHBpeGVscy5cbiAgICovXG4gIHN0YXRpYyByb3VuZFRvTmVhcmVzdFBpeGVsKGxheW91dFNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcmF0aW8gPSBQaXhlbFJhdGlvLmdldCgpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGxheW91dFNpemUgKiByYXRpbykgLyByYXRpbztcbiAgfVxuXG4gIC8vIE5vLW9wIGZvciBpT1MsIGJ1dCB1c2VkIG9uIHRoZSB3ZWIuIFNob3VsZCBub3QgYmUgZG9jdW1lbnRlZC5cbiAgc3RhdGljIHN0YXJ0RGV0ZWN0aW5nKCkge31cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGl4ZWxSYXRpbztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCBSQ1REZXZpY2VFdmVudEVtaXR0ZXIgZnJvbSAnLi4vRXZlbnRFbWl0dGVyL1JDVERldmljZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgRXZlbnRFbWl0dGVyLCB7XG4gIHR5cGUgRXZlbnRTdWJzY3JpcHRpb24sXG59IGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgTmF0aXZlRGV2aWNlSW5mbywge1xuICB0eXBlIERpbWVuc2lvbnNQYXlsb2FkLFxuICB0eXBlIERpc3BsYXlNZXRyaWNzLFxuICB0eXBlIERpc3BsYXlNZXRyaWNzQW5kcm9pZCxcbn0gZnJvbSAnLi9OYXRpdmVEZXZpY2VJbmZvJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxuY29uc3QgZXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gIGNoYW5nZTogW0RpbWVuc2lvbnNQYXlsb2FkXSxcbn0+KCk7XG5sZXQgZGltZW5zaW9uc0luaXRpYWxpemVkID0gZmFsc2U7XG5sZXQgZGltZW5zaW9uczogRGltZW5zaW9uc1BheWxvYWQ7XG5cbmNsYXNzIERpbWVuc2lvbnMge1xuICAvKipcbiAgICogTk9URTogYHVzZVdpbmRvd0RpbWVuc2lvbnNgIGlzIHRoZSBwcmVmZXJyZWQgQVBJIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBJbml0aWFsIGRpbWVuc2lvbnMgYXJlIHNldCBiZWZvcmUgYHJ1bkFwcGxpY2F0aW9uYCBpcyBjYWxsZWQgc28gdGhleSBzaG91bGRcbiAgICogYmUgYXZhaWxhYmxlIGJlZm9yZSBhbnkgb3RoZXIgcmVxdWlyZSdzIGFyZSBydW4sIGJ1dCBtYXkgYmUgdXBkYXRlZCBsYXRlci5cbiAgICpcbiAgICogTm90ZTogQWx0aG91Z2ggZGltZW5zaW9ucyBhcmUgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LCB0aGV5IG1heSBjaGFuZ2UgKGUuZ1xuICAgKiBkdWUgdG8gZGV2aWNlIHJvdGF0aW9uKSBzbyBhbnkgcmVuZGVyaW5nIGxvZ2ljIG9yIHN0eWxlcyB0aGF0IGRlcGVuZCBvblxuICAgKiB0aGVzZSBjb25zdGFudHMgc2hvdWxkIHRyeSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb24gZXZlcnkgcmVuZGVyLCByYXRoZXJcbiAgICogdGhhbiBjYWNoaW5nIHRoZSB2YWx1ZSAoZm9yIGV4YW1wbGUsIHVzaW5nIGlubGluZSBzdHlsZXMgcmF0aGVyIHRoYW5cbiAgICogc2V0dGluZyBhIHZhbHVlIGluIGEgYFN0eWxlU2hlZXRgKS5cbiAgICpcbiAgICogRXhhbXBsZTogYGNvbnN0IHtoZWlnaHQsIHdpZHRofSA9IERpbWVuc2lvbnMuZ2V0KCd3aW5kb3cnKTtgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaW0gTmFtZSBvZiBkaW1lbnNpb24gYXMgZGVmaW5lZCB3aGVuIGNhbGxpbmcgYHNldGAuXG4gICAqIEByZXR1cm5zIHtEaXNwbGF5TWV0cmljcz8gfCBEaXNwbGF5TWV0cmljc0FuZHJvaWQ/fSBWYWx1ZSBmb3IgdGhlIGRpbWVuc2lvbi5cbiAgICovXG4gIHN0YXRpYyBnZXQoZGltOiBzdHJpbmcpOiBEaXNwbGF5TWV0cmljcyB8IERpc3BsYXlNZXRyaWNzQW5kcm9pZCB7XG4gICAgaW52YXJpYW50KGRpbWVuc2lvbnNbZGltXSwgJ05vIGRpbWVuc2lvbiBzZXQgZm9yIGtleSAnICsgZGltKTtcbiAgICByZXR1cm4gZGltZW5zaW9uc1tkaW1dO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUgYnkgc2VuZGluZyB0aGVcbiAgICogZGlkVXBkYXRlRGltZW5zaW9ucyBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtEaW1lbnNpb25zUGF5bG9hZH0gZGltcyBTaW1wbGUgc3RyaW5nLWtleWVkIG9iamVjdCBvZiBkaW1lbnNpb25zIHRvIHNldFxuICAgKi9cbiAgc3RhdGljIHNldChkaW1zOiAkUmVhZE9ubHk8RGltZW5zaW9uc1BheWxvYWQ+KTogdm9pZCB7XG4gICAgLy8gV2UgY2FsY3VsYXRlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyBpbiBKUyBzbyB0aGF0IHdlIGRvbid0IGVuY291bnRlciBsb3NzIG9mXG4gICAgLy8gcHJlY2lzaW9uIGluIHRyYW5zZmVycmluZyB0aGUgZGltZW5zaW9ucyAod2hpY2ggY291bGQgYmUgbm9uLWludGVnZXJzKSBvdmVyXG4gICAgLy8gdGhlIGJyaWRnZS5cbiAgICBsZXQge3NjcmVlbiwgd2luZG93fSA9IGRpbXM7XG4gICAgY29uc3Qge3dpbmRvd1BoeXNpY2FsUGl4ZWxzfSA9IGRpbXM7XG4gICAgaWYgKHdpbmRvd1BoeXNpY2FsUGl4ZWxzKSB7XG4gICAgICB3aW5kb3cgPSB7XG4gICAgICAgIHdpZHRoOiB3aW5kb3dQaHlzaWNhbFBpeGVscy53aWR0aCAvIHdpbmRvd1BoeXNpY2FsUGl4ZWxzLnNjYWxlLFxuICAgICAgICBoZWlnaHQ6IHdpbmRvd1BoeXNpY2FsUGl4ZWxzLmhlaWdodCAvIHdpbmRvd1BoeXNpY2FsUGl4ZWxzLnNjYWxlLFxuICAgICAgICBzY2FsZTogd2luZG93UGh5c2ljYWxQaXhlbHMuc2NhbGUsXG4gICAgICAgIGZvbnRTY2FsZTogd2luZG93UGh5c2ljYWxQaXhlbHMuZm9udFNjYWxlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge3NjcmVlblBoeXNpY2FsUGl4ZWxzfSA9IGRpbXM7XG4gICAgaWYgKHNjcmVlblBoeXNpY2FsUGl4ZWxzKSB7XG4gICAgICBzY3JlZW4gPSB7XG4gICAgICAgIHdpZHRoOiBzY3JlZW5QaHlzaWNhbFBpeGVscy53aWR0aCAvIHNjcmVlblBoeXNpY2FsUGl4ZWxzLnNjYWxlLFxuICAgICAgICBoZWlnaHQ6IHNjcmVlblBoeXNpY2FsUGl4ZWxzLmhlaWdodCAvIHNjcmVlblBoeXNpY2FsUGl4ZWxzLnNjYWxlLFxuICAgICAgICBzY2FsZTogc2NyZWVuUGh5c2ljYWxQaXhlbHMuc2NhbGUsXG4gICAgICAgIGZvbnRTY2FsZTogc2NyZWVuUGh5c2ljYWxQaXhlbHMuZm9udFNjYWxlLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHNjcmVlbiA9PSBudWxsKSB7XG4gICAgICBzY3JlZW4gPSB3aW5kb3c7XG4gICAgfVxuXG4gICAgZGltZW5zaW9ucyA9IHt3aW5kb3csIHNjcmVlbn07XG4gICAgaWYgKGRpbWVuc2lvbnNJbml0aWFsaXplZCkge1xuICAgICAgLy8gRG9uJ3QgZmlyZSAnY2hhbmdlJyB0aGUgZmlyc3QgdGltZSB0aGUgZGltZW5zaW9ucyBhcmUgc2V0LlxuICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoJ2NoYW5nZScsIGRpbWVuc2lvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaW1lbnNpb25zSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgaGFuZGxlci4gU3VwcG9ydGVkIGV2ZW50czpcbiAgICpcbiAgICogLSBgY2hhbmdlYDogRmlyZXMgd2hlbiBhIHByb3BlcnR5IHdpdGhpbiB0aGUgYERpbWVuc2lvbnNgIG9iamVjdCBjaGFuZ2VzLiBUaGUgYXJndW1lbnRcbiAgICogICB0byB0aGUgZXZlbnQgaGFuZGxlciBpcyBhbiBvYmplY3Qgd2l0aCBgd2luZG93YCBhbmQgYHNjcmVlbmAgcHJvcGVydGllcyB3aG9zZSB2YWx1ZXNcbiAgICogICBhcmUgdGhlIHNhbWUgYXMgdGhlIHJldHVybiB2YWx1ZXMgb2YgYERpbWVuc2lvbnMuZ2V0KCd3aW5kb3cnKWAgYW5kXG4gICAqICAgYERpbWVuc2lvbnMuZ2V0KCdzY3JlZW4nKWAsIHJlc3BlY3RpdmVseS5cbiAgICovXG4gIHN0YXRpYyBhZGRFdmVudExpc3RlbmVyKFxuICAgIHR5cGU6ICdjaGFuZ2UnLFxuICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICApOiBFdmVudFN1YnNjcmlwdGlvbiB7XG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZSA9PT0gJ2NoYW5nZScsXG4gICAgICAnVHJ5aW5nIHRvIHN1YnNjcmliZSB0byB1bmtub3duIGV2ZW50OiBcIiVzXCInLFxuICAgICAgdHlwZSxcbiAgICApO1xuICAgIHJldHVybiBldmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIodHlwZSwgaGFuZGxlcik7XG4gIH1cbn1cblxuLy8gU3Vic2NyaWJlIGJlZm9yZSBjYWxsaW5nIGdldENvbnN0YW50cyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbWlzcyBhbnkgdXBkYXRlcyBpbiBiZXR3ZWVuLlxuUkNURGV2aWNlRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKFxuICAnZGlkVXBkYXRlRGltZW5zaW9ucycsXG4gICh1cGRhdGU6IERpbWVuc2lvbnNQYXlsb2FkKSA9PiB7XG4gICAgRGltZW5zaW9ucy5zZXQodXBkYXRlKTtcbiAgfSxcbik7XG5EaW1lbnNpb25zLnNldChOYXRpdmVEZXZpY2VJbmZvLmdldENvbnN0YW50cygpLkRpbWVuc2lvbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBEaW1lbnNpb25zO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlRGV2aWNlSW5mbyc7XG5pbXBvcnQgTmF0aXZlRGV2aWNlSW5mbyBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZURldmljZUluZm8nO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlRGV2aWNlSW5mbztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IHR5cGUgRGlzcGxheU1ldHJpY3NBbmRyb2lkID0ge3xcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4gIGZvbnRTY2FsZTogbnVtYmVyLFxuICBkZW5zaXR5RHBpOiBudW1iZXIsXG58fTtcblxuZXhwb3J0IHR5cGUgRGlzcGxheU1ldHJpY3MgPSB7fFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgc2NhbGU6IG51bWJlcixcbiAgZm9udFNjYWxlOiBudW1iZXIsXG58fTtcblxuZXhwb3J0IHR5cGUgRGltZW5zaW9uc1BheWxvYWQgPSB7fFxuICB3aW5kb3c/OiBEaXNwbGF5TWV0cmljcyxcbiAgc2NyZWVuPzogRGlzcGxheU1ldHJpY3MsXG4gIHdpbmRvd1BoeXNpY2FsUGl4ZWxzPzogRGlzcGxheU1ldHJpY3NBbmRyb2lkLFxuICBzY3JlZW5QaHlzaWNhbFBpeGVscz86IERpc3BsYXlNZXRyaWNzQW5kcm9pZCxcbnx9O1xuXG5leHBvcnQgdHlwZSBEZXZpY2VJbmZvQ29uc3RhbnRzID0ge3xcbiAgK0RpbWVuc2lvbnM6IERpbWVuc2lvbnNQYXlsb2FkLFxuICAraXNJUGhvbmVYX2RlcHJlY2F0ZWQ/OiBib29sZWFuLFxufH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK2dldENvbnN0YW50czogKCkgPT4gRGV2aWNlSW5mb0NvbnN0YW50cztcbn1cblxuY29uc3QgTmF0aXZlTW9kdWxlOiBTcGVjID0gVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXRFbmZvcmNpbmc8U3BlYz4oJ0RldmljZUluZm8nKTtcbmxldCBjb25zdGFudHM6ID9EZXZpY2VJbmZvQ29uc3RhbnRzID0gbnVsbDtcblxuY29uc3QgTmF0aXZlRGV2aWNlSW5mbyA9IHtcbiAgZ2V0Q29uc3RhbnRzKCk6IERldmljZUluZm9Db25zdGFudHMge1xuICAgIGlmIChjb25zdGFudHMgPT0gbnVsbCkge1xuICAgICAgY29uc3RhbnRzID0gTmF0aXZlTW9kdWxlLmdldENvbnN0YW50cygpO1xuICAgIH1cbiAgICByZXR1cm4gY29uc3RhbnRzO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF0aXZlRGV2aWNlSW5mbztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQYWNrYWdlckFzc2V0fSBmcm9tICcuL3JlZ2lzdHJ5LmpzJztcblxuY29uc3QgYW5kcm9pZFNjYWxlU3VmZml4ID0ge1xuICAnMC43NSc6ICdsZHBpJyxcbiAgJzEnOiAnbWRwaScsXG4gICcxLjUnOiAnaGRwaScsXG4gICcyJzogJ3hoZHBpJyxcbiAgJzMnOiAneHhoZHBpJyxcbiAgJzQnOiAneHh4aGRwaScsXG59O1xuXG5jb25zdCBBTkRST0lEX0JBU0VfREVOU0lUWSA9IDE2MDtcblxuLyoqXG4gKiBGSVhNRTogdXNpbmcgbnVtYmVyIHRvIHJlcHJlc2VudCBkaXNjcmV0ZSBzY2FsZSBudW1iZXJzIGlzIGZyYWdpbGUgaW4gZXNzZW5jZSBiZWNhdXNlIG9mXG4gKiBmbG9hdGluZyBwb2ludCBudW1iZXJzIGltcHJlY2lzaW9uLlxuICovXG5mdW5jdGlvbiBnZXRBbmRyb2lkQXNzZXRTdWZmaXgoc2NhbGU6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChzY2FsZS50b1N0cmluZygpIGluIGFuZHJvaWRTY2FsZVN1ZmZpeCkge1xuICAgIHJldHVybiBhbmRyb2lkU2NhbGVTdWZmaXhbc2NhbGUudG9TdHJpbmcoKV07XG4gIH1cbiAgLy8gTk9URTogQW5kcm9pZCBHcmFkbGUgUGx1Z2luIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgdGhlIG5ubmRwaSBmb3JtYXQuXG4gIC8vIFNlZSBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy83Mjg4NDQzNVxuICBpZiAoTnVtYmVyLmlzRmluaXRlKHNjYWxlKSAmJiBzY2FsZSA+IDApIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzY2FsZSAqIEFORFJPSURfQkFTRV9ERU5TSVRZKSArICdkcGknO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignbm8gc3VjaCBzY2FsZSAnICsgc2NhbGUudG9TdHJpbmcoKSk7XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9ndWlkZS90b3BpY3MvcmVzb3VyY2VzL2RyYXdhYmxlLXJlc291cmNlLmh0bWxcbmNvbnN0IGRyYXdhYmxlRmlsZVR5cGVzID0gbmV3IFNldChbXG4gICdnaWYnLFxuICAnanBlZycsXG4gICdqcGcnLFxuICAna3R4JyxcbiAgJ3BuZycsXG4gICdzdmcnLFxuICAnd2VicCcsXG4gICd4bWwnLFxuXSk7XG5cbmZ1bmN0aW9uIGdldEFuZHJvaWRSZXNvdXJjZUZvbGRlck5hbWUoXG4gIGFzc2V0OiBQYWNrYWdlckFzc2V0LFxuICBzY2FsZTogbnVtYmVyLFxuKTogc3RyaW5nIHwgJFRFTVBPUkFSWSRzdHJpbmc8J3Jhdyc+IHtcbiAgaWYgKCFkcmF3YWJsZUZpbGVUeXBlcy5oYXMoYXNzZXQudHlwZSkpIHtcbiAgICByZXR1cm4gJ3Jhdyc7XG4gIH1cbiAgY29uc3Qgc3VmZml4ID0gZ2V0QW5kcm9pZEFzc2V0U3VmZml4KHNjYWxlKTtcbiAgaWYgKCFzdWZmaXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkRvbid0IGtub3cgd2hpY2ggYW5kcm9pZCBkcmF3YWJsZSBzdWZmaXggdG8gdXNlIGZvciBzY2FsZTogXCIgK1xuICAgICAgICBzY2FsZSArXG4gICAgICAgICdcXG5Bc3NldDogJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGFzc2V0LCBudWxsLCAnXFx0JykgK1xuICAgICAgICAnXFxuUG9zc2libGUgc2NhbGVzIGFyZTonICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoYW5kcm9pZFNjYWxlU3VmZml4LCBudWxsLCAnXFx0JyksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gJ2RyYXdhYmxlLScgKyBzdWZmaXg7XG59XG5cbmZ1bmN0aW9uIGdldEFuZHJvaWRSZXNvdXJjZUlkZW50aWZpZXIoYXNzZXQ6IFBhY2thZ2VyQXNzZXQpOiBzdHJpbmcge1xuICByZXR1cm4gKGdldEJhc2VQYXRoKGFzc2V0KSArICcvJyArIGFzc2V0Lm5hbWUpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJykgLy8gRW5jb2RlIGZvbGRlciBzdHJ1Y3R1cmUgaW4gZmlsZSBuYW1lXG4gICAgLnJlcGxhY2UoLyhbXmEtejAtOV9dKS9nLCAnJykgLy8gUmVtb3ZlIGlsbGVnYWwgY2hhcnNcbiAgICAucmVwbGFjZSgvXmFzc2V0c18vLCAnJyk7IC8vIFJlbW92ZSBcImFzc2V0c19cIiBwcmVmaXhcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZVBhdGgoYXNzZXQ6IFBhY2thZ2VyQXNzZXQpOiBzdHJpbmcge1xuICBjb25zdCBiYXNlUGF0aCA9IGFzc2V0Lmh0dHBTZXJ2ZXJMb2NhdGlvbjtcbiAgcmV0dXJuIGJhc2VQYXRoLnN0YXJ0c1dpdGgoJy8nKSA/IGJhc2VQYXRoLnNsaWNlKDEpIDogYmFzZVBhdGg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRBbmRyb2lkUmVzb3VyY2VGb2xkZXJOYW1lLFxuICBnZXRBbmRyb2lkUmVzb3VyY2VJZGVudGlmaWVyLFxuICBnZXRCYXNlUGF0aCxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQG5vZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBub2xpbnRcbiAqIEBnZW5lcmF0ZWQgU2lnbmVkU291cmNlPDw3M2FmNWIzZmUyOWQyMjY2MzRlZDY0YmM4NjE2MzRkZj4+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge3R5cGUgVmlld0NvbmZpZ30gZnJvbSAnLi9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxuLy8gRXZlbnQgY29uZmlnc1xuZXhwb3J0IGNvbnN0IGN1c3RvbUJ1YmJsaW5nRXZlbnRUeXBlczoge1xuICBbZXZlbnROYW1lOiBzdHJpbmddOiAkUmVhZE9ubHk8e1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiAkUmVhZE9ubHk8e1xuICAgICAgY2FwdHVyZWQ6IHN0cmluZyxcbiAgICAgIGJ1YmJsZWQ6IHN0cmluZyxcbiAgICAgIHNraXBCdWJibGluZz86ID9ib29sZWFuLFxuICAgIH0+LFxuICB9Pixcbn0gPSB7fTtcbmV4cG9ydCBjb25zdCBjdXN0b21EaXJlY3RFdmVudFR5cGVzOiB7XG4gIFtldmVudE5hbWU6IHN0cmluZ106ICRSZWFkT25seTx7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogc3RyaW5nLFxuICB9Pixcbn0gPSB7fTtcblxuY29uc3Qgdmlld0NvbmZpZ0NhbGxiYWNrcyA9IG5ldyBNYXA8c3RyaW5nLCA/KCkgPT4gVmlld0NvbmZpZz4oKTtcbmNvbnN0IHZpZXdDb25maWdzID0gbmV3IE1hcDxzdHJpbmcsIFZpZXdDb25maWc+KCk7XG5cbmZ1bmN0aW9uIHByb2Nlc3NFdmVudFR5cGVzKHZpZXdDb25maWc6IFZpZXdDb25maWcpOiB2b2lkIHtcbiAgY29uc3Qge2J1YmJsaW5nRXZlbnRUeXBlcywgZGlyZWN0RXZlbnRUeXBlc30gPSB2aWV3Q29uZmlnO1xuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaWYgKGJ1YmJsaW5nRXZlbnRUeXBlcyAhPSBudWxsICYmIGRpcmVjdEV2ZW50VHlwZXMgIT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCB0b3BMZXZlbFR5cGUgaW4gZGlyZWN0RXZlbnRUeXBlcykge1xuICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgYnViYmxpbmdFdmVudFR5cGVzW3RvcExldmVsVHlwZV0gPT0gbnVsbCxcbiAgICAgICAgICAnRXZlbnQgY2Fubm90IGJlIGJvdGggZGlyZWN0IGFuZCBidWJibGluZzogJXMnLFxuICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoYnViYmxpbmdFdmVudFR5cGVzICE9IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IHRvcExldmVsVHlwZSBpbiBidWJibGluZ0V2ZW50VHlwZXMpIHtcbiAgICAgIGlmIChjdXN0b21CdWJibGluZ0V2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXSA9PSBudWxsKSB7XG4gICAgICAgIGN1c3RvbUJ1YmJsaW5nRXZlbnRUeXBlc1t0b3BMZXZlbFR5cGVdID1cbiAgICAgICAgICBidWJibGluZ0V2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZGlyZWN0RXZlbnRUeXBlcyAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0b3BMZXZlbFR5cGUgaW4gZGlyZWN0RXZlbnRUeXBlcykge1xuICAgICAgaWYgKGN1c3RvbURpcmVjdEV2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXSA9PSBudWxsKSB7XG4gICAgICAgIGN1c3RvbURpcmVjdEV2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXSA9IGRpcmVjdEV2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBuYXRpdmUgdmlldy9jb21wb25lbnQgYnkgbmFtZS5cbiAqIEEgY2FsbGJhY2sgaXMgcHJvdmlkZWQgdG8gbG9hZCB0aGUgdmlldyBjb25maWcgZnJvbSBVSU1hbmFnZXIuXG4gKiBUaGUgY2FsbGJhY2sgaXMgZGVmZXJyZWQgdW50aWwgdGhlIHZpZXcgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoKSA9PiBWaWV3Q29uZmlnKTogc3RyaW5nIHtcbiAgaW52YXJpYW50KFxuICAgICF2aWV3Q29uZmlnQ2FsbGJhY2tzLmhhcyhuYW1lKSxcbiAgICAnVHJpZWQgdG8gcmVnaXN0ZXIgdHdvIHZpZXdzIHdpdGggdGhlIHNhbWUgbmFtZSAlcycsXG4gICAgbmFtZSxcbiAgKTtcbiAgaW52YXJpYW50KFxuICAgIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAnVmlldyBjb25maWcgZ2V0dGVyIGNhbGxiYWNrIGZvciBjb21wb25lbnQgYCVzYCBtdXN0IGJlIGEgZnVuY3Rpb24gKHJlY2VpdmVkIGAlc2ApJyxcbiAgICBuYW1lLFxuICAgIGNhbGxiYWNrID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNhbGxiYWNrLFxuICApO1xuICB2aWV3Q29uZmlnQ2FsbGJhY2tzLnNldChuYW1lLCBjYWxsYmFjayk7XG4gIHJldHVybiBuYW1lO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGNvbmZpZyBmb3IgdGhlIHNwZWNpZmllZCB2aWV3LlxuICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgdmlldyBoYXMgYmVlbiB1c2VkLFxuICogVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgYmUgbGF6eS1sb2FkZWQgZnJvbSBVSU1hbmFnZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQobmFtZTogc3RyaW5nKTogVmlld0NvbmZpZyB7XG4gIGxldCB2aWV3Q29uZmlnO1xuICBpZiAoIXZpZXdDb25maWdzLmhhcyhuYW1lKSkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gdmlld0NvbmZpZ0NhbGxiYWNrcy5nZXQobmFtZSk7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ1ZpZXcgY29uZmlnIGdldHRlciBjYWxsYmFjayBmb3IgY29tcG9uZW50IGAlc2AgbXVzdCBiZSBhIGZ1bmN0aW9uIChyZWNlaXZlZCBgJXNgKS4lcycsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNhbGxiYWNrID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNhbGxiYWNrLFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW3JlY3Vyc2l2ZS1kZWZpbml0aW9uXVxuICAgICAgICB0eXBlb2YgbmFtZVswXSA9PT0gJ3N0cmluZycgJiYgL1thLXpdLy50ZXN0KG5hbWVbMF0pXG4gICAgICAgICAgPyAnIE1ha2Ugc3VyZSB0byBzdGFydCBjb21wb25lbnQgbmFtZXMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLidcbiAgICAgICAgICA6ICcnLFxuICAgICAgKTtcbiAgICB9XG4gICAgdmlld0NvbmZpZyA9IGNhbGxiYWNrKCk7XG4gICAgcHJvY2Vzc0V2ZW50VHlwZXModmlld0NvbmZpZyk7XG4gICAgdmlld0NvbmZpZ3Muc2V0KG5hbWUsIHZpZXdDb25maWcpO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGNhbGxiYWNrIGFmdGVyIHRoZSBjb25maWcgaXMgc2V0IHNvIHRoYXRcbiAgICAvLyB3ZSBkb24ndCBtYXNrIGFueSBlcnJvcnMgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cbiAgICB2aWV3Q29uZmlnQ2FsbGJhY2tzLnNldChuYW1lLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICB2aWV3Q29uZmlnID0gdmlld0NvbmZpZ3MuZ2V0KG5hbWUpO1xuICB9XG4gIGludmFyaWFudCh2aWV3Q29uZmlnLCAnVmlldyBjb25maWcgbm90IGZvdW5kIGZvciBuYW1lICVzJywgbmFtZSk7XG4gIHJldHVybiB2aWV3Q29uZmlnO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IFBsYXRmb3JtQmFzZVZpZXdDb25maWcgZnJvbSAnLi4vTmF0aXZlQ29tcG9uZW50L1BsYXRmb3JtQmFzZVZpZXdDb25maWcnO1xuaW1wb3J0IHt0eXBlIFZpZXdDb25maWd9IGZyb20gJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5jb25zdCBJR05PUkVEX0tFWVMgPSBbJ3RyYW5zZm9ybScsICdoaXRTbG9wJ107XG5cbi8qKlxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byB2YWxpZGF0ZSB0aGF0IHRoZSB2aWV3IGNvbmZpZyB0aGF0XG4gKiBuYXRpdmUgZXhwb3NlcyBmb3IgYSBnaXZlbiB2aWV3IG1hbmFnZXIgaXMgdGhlIHNhbWUgYXMgdGhlIHZpZXcgY29uZmlnXG4gKiB0aGF0IGlzIHNwZWNpZmllZCBmb3IgdGhhdCB2aWV3IG1hbmFnZXIgaW4gSlMuXG4gKlxuICogSW4gb3JkZXIgdG8gaW1wcm92ZSBwZXJmLCB3ZSB3YW50IHRvIGF2b2lkIGNhbGxpbmcgaW50byBuYXRpdmUgdG8gZ2V0XG4gKiB0aGUgdmlldyBjb25maWcgd2hlbiBlYWNoIHZpZXcgbWFuYWdlciBpcyB1c2VkLiBUbyBkbyB0aGlzLCB3ZSBhcmUgbW92aW5nXG4gKiB0aGUgY29uZmlncyB0byBKUy4gSW4gdGhlIGZ1dHVyZSB3ZSB3aWxsIHVzZSB0aGVzZSBKUyBiYXNlZCB2aWV3IGNvbmZpZ3NcbiAqIHRvIGNvZGVnZW4gdGhlIHZpZXcgbWFuYWdlciBvbiBuYXRpdmUgdG8gZW5zdXJlIHRoZXkgc3RheSBpbiBzeW5jIHdpdGhvdXRcbiAqIHRoaXMgcnVudGltZSBjaGVjay5cbiAqXG4gKiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCB0aGF0IGxpa2VseSBtZWFucyBhIGNoYW5nZSB3YXMgbWFkZSB0byB0aGUgbmF0aXZlXG4gKiB2aWV3IG1hbmFnZXIgd2l0aG91dCB1cGRhdGluZyB0aGUgSlMgY29uZmlnIGFzIHdlbGwuIElkZWFsbHkgeW91IGNhbiBtYWtlXG4gKiB0aGF0IGRpcmVjdCBjaGFuZ2UgdG8gdGhlIEpTIGNvbmZpZy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGUgZGlmZmVyZW5jZXNcbiAqIGFyZSwgdGhlIGJlc3QgYXBwcm9hY2ggSSd2ZSBmb3VuZCBpcyB0byBjcmVhdGUgYSB2aWV3IHRoYXQgcHJpbnRzXG4gKiB0aGUgcmV0dXJuIHZhbHVlIG9mIGdldE5hdGl2ZUNvbXBvbmVudEF0dHJpYnV0ZXMsIGFuZCB0aGVuIGNvcHlpbmcgdGhhdFxuICogdGV4dCBhbmQgcGFzdGluZyBpdCBiYWNrIGludG8gSlM6XG4gKiA8VGV4dCBzZWxlY3RhYmxlPXt0cnVlfT57SlNPTi5zdHJpbmdpZnkoZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcygnUkNUVmlldycpKX08L1RleHQ+XG4gKlxuICogVGhpcyBpcyBtZWFudCB0byBiZSBhIHN0b3BnYXAgdW50aWwgdGhlIHRpbWUgY29tZXMgd2hlbiB3ZSBvbmx5IGhhdmUgYVxuICogc2luZ2xlIHNvdXJjZSBvZiB0cnV0aC4gSSB3b25kZXIgaWYgdGhpcyBtZXNzYWdlIHdpbGwgc3RpbGwgYmUgaGVyZSB0d29cbiAqIHllYXJzIGZyb20gbm93Li4uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeUNvbXBvbmVudEF0dHJpYnV0ZUVxdWl2YWxlbmNlKFxuICBuYXRpdmVWaWV3Q29uZmlnOiBWaWV3Q29uZmlnLFxuICBzdGF0aWNWaWV3Q29uZmlnOiBWaWV3Q29uZmlnLFxuKSB7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ3ZhbGlkQXR0cmlidXRlcycsXG4gICAgJ2J1YmJsaW5nRXZlbnRUeXBlcycsXG4gICAgJ2RpcmVjdEV2ZW50VHlwZXMnLFxuICBdKSB7XG4gICAgY29uc3QgZGlmZiA9IE9iamVjdC5rZXlzKFxuICAgICAgbGVmdGhhbmRPYmplY3REaWZmKG5hdGl2ZVZpZXdDb25maWdbcHJvcF0sIHN0YXRpY1ZpZXdDb25maWdbcHJvcF0pLFxuICAgICk7XG5cbiAgICBpZiAoZGlmZi5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgc3RhdGljVmlld0NvbmZpZy51aVZpZXdDbGFzc05hbWUgPz8gbmF0aXZlVmlld0NvbmZpZy51aVZpZXdDbGFzc05hbWU7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJyR7bmFtZX0nIGhhcyBhIHZpZXcgY29uZmlnIHRoYXQgZG9lcyBub3QgbWF0Y2ggbmF0aXZlLiBgICtcbiAgICAgICAgICBgJyR7cHJvcH0nIGlzIG1pc3Npbmc6ICR7ZGlmZi5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vLyBSZXR1cm4gdGhlIGRpZmZlcmVudCBrZXktdmFsdWUgcGFpcnMgb2YgdGhlIHJpZ2h0IG9iamVjdCwgYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGtleXMgaW4gdGhlIGxlZnQgb2JqZWN0XG4vLyBOb3RlIGl0IHdvbid0IHJldHVybiBhIGRpZmZlcmVuY2Ugd2hlcmUgYSBrZXkgaXMgbWlzc2luZyBpbiB0aGUgbGVmdCBidXQgZXhpc3RzIHRoZSByaWdodC5cbmZ1bmN0aW9uIGxlZnRoYW5kT2JqZWN0RGlmZihsZWZ0T2JqOiBPYmplY3QsIHJpZ2h0T2JqOiBPYmplY3QpOiBPYmplY3Qge1xuICBjb25zdCBkaWZmZXJlbnRLZXlzOiB7W3N0cmluZ106IGFueSB8IHsuLi59fSA9IHt9O1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmUobGVmdEl0ZW06IGFueSwgcmlnaHRJdGVtOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBsZWZ0SXRlbSAhPT0gdHlwZW9mIHJpZ2h0SXRlbSAmJiBsZWZ0SXRlbSAhPSBudWxsKSB7XG4gICAgICBkaWZmZXJlbnRLZXlzW2tleV0gPSByaWdodEl0ZW07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBsZWZ0SXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG9iakRpZmYgPSBsZWZ0aGFuZE9iamVjdERpZmYobGVmdEl0ZW0sIHJpZ2h0SXRlbSk7XG4gICAgICBpZiAoT2JqZWN0LmtleXMob2JqRGlmZikubGVuZ3RoID4gMSkge1xuICAgICAgICBkaWZmZXJlbnRLZXlzW2tleV0gPSBvYmpEaWZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsZWZ0SXRlbSAhPT0gcmlnaHRJdGVtKSB7XG4gICAgICBkaWZmZXJlbnRLZXlzW2tleV0gPSByaWdodEl0ZW07XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gbGVmdE9iaikge1xuICAgIGlmIChJR05PUkVEX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFyaWdodE9iaikge1xuICAgICAgZGlmZmVyZW50S2V5c1trZXldID0ge307XG4gICAgfSBlbHNlIGlmIChsZWZ0T2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbXBhcmUobGVmdE9ialtrZXldLCByaWdodE9ialtrZXldLCBrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmZXJlbnRLZXlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnV2l0aG91dFZpZXdQcm9wcyhcbiAgdmlld0NvbmZpZzogVmlld0NvbmZpZyxcbiAgcHJvcE5hbWU6IHN0cmluZyxcbik6IHsuLi59IHtcbiAgaWYgKCF2aWV3Q29uZmlnW3Byb3BOYW1lXSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyh2aWV3Q29uZmlnW3Byb3BOYW1lXSlcbiAgICAuZmlsdGVyKHByb3AgPT4gIVBsYXRmb3JtQmFzZVZpZXdDb25maWdbcHJvcE5hbWVdW3Byb3BdKVxuICAgIC5yZWR1Y2U8e1tzdHJpbmddOiBhbnl9Pigob2JqLCBwcm9wKSA9PiB7XG4gICAgICBvYmpbcHJvcF0gPSB2aWV3Q29uZmlnW3Byb3BOYW1lXVtwcm9wXTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5Vmlld0NvbmZpZyh2aWV3Q29uZmlnOiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgdmlld0NvbmZpZyxcbiAgICAoa2V5LCB2YWwpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBgxpIgJHt2YWwubmFtZX1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuICAgIDIsXG4gICk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1BhcnRpYWxWaWV3Q29uZmlnfSBmcm9tICcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcblxuaW1wb3J0IEJhc2VWaWV3Q29uZmlnIGZyb20gJy4vQmFzZVZpZXdDb25maWcnO1xuXG5leHBvcnQgdHlwZSBQYXJ0aWFsVmlld0NvbmZpZ1dpdGhvdXROYW1lID0gJFJlc3Q8XG4gIFBhcnRpYWxWaWV3Q29uZmlnLFxuICB7dWlWaWV3Q2xhc3NOYW1lOiBzdHJpbmd9LFxuPjtcblxuY29uc3QgUGxhdGZvcm1CYXNlVmlld0NvbmZpZzogUGFydGlhbFZpZXdDb25maWdXaXRob3V0TmFtZSA9IEJhc2VWaWV3Q29uZmlnO1xuXG4vLyBJbiBXaWxkZS9GQjRBLCB1c2UgUk5Ib3N0Q29tcG9uZW50TGlzdFJvdXRlIGluIEJyaWRnZSBtb2RlIHRvIHZlcmlmeVxuLy8gd2hldGhlciB0aGUgSlMgcHJvcHMgZGVmaW5lZCBoZXJlIG1hdGNoIHRoZSBuYXRpdmUgcHJvcHMgZGVmaW5lZFxuLy8gaW4gUkNUVmlld01hbmFnZXJzIGluIGlPUywgYW5kIFZpZXdNYW5hZ2VycyBpbiBBbmRyb2lkLlxuZXhwb3J0IGRlZmF1bHQgUGxhdGZvcm1CYXNlVmlld0NvbmZpZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGFydGlhbFZpZXdDb25maWdXaXRob3V0TmFtZX0gZnJvbSAnLi9QbGF0Zm9ybUJhc2VWaWV3Q29uZmlnJztcblxuaW1wb3J0IFJlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzIGZyb20gJy4uL0NvbXBvbmVudHMvVmlldy9SZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlcyc7XG5pbXBvcnQge1xuICBDb25kaXRpb25hbGx5SWdub3JlZEV2ZW50SGFuZGxlcnMsXG4gIER5bmFtaWNhbGx5SW5qZWN0ZWRCeUdlc3R1cmVIYW5kbGVyLFxufSBmcm9tICcuL1ZpZXdDb25maWdJZ25vcmUnO1xuXG5jb25zdCBidWJibGluZ0V2ZW50VHlwZXMgPSB7XG4gIC8vIEdlbmVyaWMgRXZlbnRzXG4gIHRvcFByZXNzOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvblByZXNzJyxcbiAgICAgIGNhcHR1cmVkOiAnb25QcmVzc0NhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcENoYW5nZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25DaGFuZ2UnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNoYW5nZUNhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcEZvY3VzOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkZvY3VzJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Gb2N1c0NhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcEJsdXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQmx1cicsXG4gICAgICBjYXB0dXJlZDogJ29uQmx1ckNhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcFN1Ym1pdEVkaXRpbmc6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uU3VibWl0RWRpdGluZycsXG4gICAgICBjYXB0dXJlZDogJ29uU3VibWl0RWRpdGluZ0NhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcEVuZEVkaXRpbmc6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uRW5kRWRpdGluZycsXG4gICAgICBjYXB0dXJlZDogJ29uRW5kRWRpdGluZ0NhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcEtleVByZXNzOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbktleVByZXNzJyxcbiAgICAgIGNhcHR1cmVkOiAnb25LZXlQcmVzc0NhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG5cbiAgLy8gVG91Y2ggRXZlbnRzXG4gIHRvcFRvdWNoU3RhcnQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uVG91Y2hTdGFydCcsXG4gICAgICBjYXB0dXJlZDogJ29uVG91Y2hTdGFydENhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcFRvdWNoTW92ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25Ub3VjaE1vdmUnLFxuICAgICAgY2FwdHVyZWQ6ICdvblRvdWNoTW92ZUNhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcFRvdWNoQ2FuY2VsOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvblRvdWNoQ2FuY2VsJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Ub3VjaENhbmNlbENhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG4gIHRvcFRvdWNoRW5kOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvblRvdWNoRW5kJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Ub3VjaEVuZENhcHR1cmUnLFxuICAgIH0sXG4gIH0sXG5cbiAgLy8gRXhwZXJpbWVudGFsL1dvcmsgaW4gUHJvZ3Jlc3MgUG9pbnRlciBFdmVudHMgKG5vdCB5ZXQgcmVhZHkgZm9yIHVzZSlcbiAgdG9wQ2xpY2s6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgY2FwdHVyZWQ6ICdvbkNsaWNrQ2FwdHVyZScsXG4gICAgICBidWJibGVkOiAnb25DbGljaycsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlckNhbmNlbDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBjYXB0dXJlZDogJ29uUG9pbnRlckNhbmNlbENhcHR1cmUnLFxuICAgICAgYnViYmxlZDogJ29uUG9pbnRlckNhbmNlbCcsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlckRvd246IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgY2FwdHVyZWQ6ICdvblBvaW50ZXJEb3duQ2FwdHVyZScsXG4gICAgICBidWJibGVkOiAnb25Qb2ludGVyRG93bicsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlck1vdmU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgY2FwdHVyZWQ6ICdvblBvaW50ZXJNb3ZlQ2FwdHVyZScsXG4gICAgICBidWJibGVkOiAnb25Qb2ludGVyTW92ZScsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlclVwOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGNhcHR1cmVkOiAnb25Qb2ludGVyVXBDYXB0dXJlJyxcbiAgICAgIGJ1YmJsZWQ6ICdvblBvaW50ZXJVcCcsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlckVudGVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGNhcHR1cmVkOiAnb25Qb2ludGVyRW50ZXJDYXB0dXJlJyxcbiAgICAgIGJ1YmJsZWQ6ICdvblBvaW50ZXJFbnRlcicsXG4gICAgICBza2lwQnViYmxpbmc6IHRydWUsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlckxlYXZlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGNhcHR1cmVkOiAnb25Qb2ludGVyTGVhdmVDYXB0dXJlJyxcbiAgICAgIGJ1YmJsZWQ6ICdvblBvaW50ZXJMZWF2ZScsXG4gICAgICBza2lwQnViYmxpbmc6IHRydWUsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlck92ZXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgY2FwdHVyZWQ6ICdvblBvaW50ZXJPdmVyQ2FwdHVyZScsXG4gICAgICBidWJibGVkOiAnb25Qb2ludGVyT3ZlcicsXG4gICAgfSxcbiAgfSxcbiAgdG9wUG9pbnRlck91dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBjYXB0dXJlZDogJ29uUG9pbnRlck91dENhcHR1cmUnLFxuICAgICAgYnViYmxlZDogJ29uUG9pbnRlck91dCcsXG4gICAgfSxcbiAgfSxcbiAgdG9wR290UG9pbnRlckNhcHR1cmU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgY2FwdHVyZWQ6ICdvbkdvdFBvaW50ZXJDYXB0dXJlQ2FwdHVyZScsXG4gICAgICBidWJibGVkOiAnb25Hb3RQb2ludGVyQ2FwdHVyZScsXG4gICAgfSxcbiAgfSxcbiAgdG9wTG9zdFBvaW50ZXJDYXB0dXJlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGNhcHR1cmVkOiAnb25Mb3N0UG9pbnRlckNhcHR1cmVDYXB0dXJlJyxcbiAgICAgIGJ1YmJsZWQ6ICdvbkxvc3RQb2ludGVyQ2FwdHVyZScsXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IGRpcmVjdEV2ZW50VHlwZXMgPSB7XG4gIHRvcEFjY2Vzc2liaWxpdHlBY3Rpb246IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiAnb25BY2Nlc3NpYmlsaXR5QWN0aW9uJyxcbiAgfSxcbiAgdG9wQWNjZXNzaWJpbGl0eVRhcDoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbkFjY2Vzc2liaWxpdHlUYXAnLFxuICB9LFxuICB0b3BNYWdpY1RhcDoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbk1hZ2ljVGFwJyxcbiAgfSxcbiAgdG9wQWNjZXNzaWJpbGl0eUVzY2FwZToge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbkFjY2Vzc2liaWxpdHlFc2NhcGUnLFxuICB9LFxuICB0b3BMYXlvdXQ6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiAnb25MYXlvdXQnLFxuICB9LFxuICBvbkdlc3R1cmVIYW5kbGVyRXZlbnQ6IER5bmFtaWNhbGx5SW5qZWN0ZWRCeUdlc3R1cmVIYW5kbGVyKHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiAnb25HZXN0dXJlSGFuZGxlckV2ZW50JyxcbiAgfSksXG4gIG9uR2VzdHVyZUhhbmRsZXJTdGF0ZUNoYW5nZTogRHluYW1pY2FsbHlJbmplY3RlZEJ5R2VzdHVyZUhhbmRsZXIoe1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbkdlc3R1cmVIYW5kbGVyU3RhdGVDaGFuZ2UnLFxuICB9KSxcbn07XG5cbmNvbnN0IHZhbGlkQXR0cmlidXRlc0Zvck5vbkV2ZW50UHJvcHMgPSB7XG4gIC8vIFZpZXcgUHJvcHNcbiAgYWNjZXNzaWJsZTogdHJ1ZSxcbiAgYWNjZXNzaWJpbGl0eUFjdGlvbnM6IHRydWUsXG4gIGFjY2Vzc2liaWxpdHlMYWJlbDogdHJ1ZSxcbiAgYWNjZXNzaWJpbGl0eUhpbnQ6IHRydWUsXG4gIGFjY2Vzc2liaWxpdHlMYW5ndWFnZTogdHJ1ZSxcbiAgYWNjZXNzaWJpbGl0eVZhbHVlOiB0cnVlLFxuICBhY2Nlc3NpYmlsaXR5Vmlld0lzTW9kYWw6IHRydWUsXG4gIGFjY2Vzc2liaWxpdHlFbGVtZW50c0hpZGRlbjogdHJ1ZSxcbiAgYWNjZXNzaWJpbGl0eUlnbm9yZXNJbnZlcnRDb2xvcnM6IHRydWUsXG4gIHRlc3RJRDogdHJ1ZSxcbiAgYmFja2dyb3VuZENvbG9yOiB7cHJvY2VzczogcmVxdWlyZSgnLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0fSxcbiAgYmFja2ZhY2VWaXNpYmlsaXR5OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBzaGFkb3dDb2xvcjoge3Byb2Nlc3M6IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdH0sXG4gIHNoYWRvd09mZnNldDoge2RpZmY6IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9kaWZmZXIvc2l6ZXNEaWZmZXInKX0sXG4gIHNoYWRvd09wYWNpdHk6IHRydWUsXG4gIHNoYWRvd1JhZGl1czogdHJ1ZSxcbiAgbmVlZHNPZmZzY3JlZW5BbHBoYUNvbXBvc2l0aW5nOiB0cnVlLFxuICBvdmVyZmxvdzogdHJ1ZSxcbiAgc2hvdWxkUmFzdGVyaXplSU9TOiB0cnVlLFxuICB0cmFuc2Zvcm06IHtkaWZmOiByZXF1aXJlKCcuLi9VdGlsaXRpZXMvZGlmZmVyL21hdHJpY2VzRGlmZmVyJyl9LFxuICB0cmFuc2Zvcm1PcmlnaW46IHRydWUsXG4gIGFjY2Vzc2liaWxpdHlSb2xlOiB0cnVlLFxuICBhY2Nlc3NpYmlsaXR5U3RhdGU6IHRydWUsXG4gIG5hdGl2ZUlEOiB0cnVlLFxuICBwb2ludGVyRXZlbnRzOiB0cnVlLFxuICByZW1vdmVDbGlwcGVkU3Vidmlld3M6IHRydWUsXG4gIHJvbGU6IHRydWUsXG4gIGJvcmRlclJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyQ29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuICBib3JkZXJDdXJ2ZTogdHJ1ZSxcbiAgYm9yZGVyV2lkdGg6IHRydWUsXG4gIGJvcmRlclN0eWxlOiB0cnVlLFxuICBoaXRTbG9wOiB7ZGlmZjogcmVxdWlyZSgnLi4vVXRpbGl0aWVzL2RpZmZlci9pbnNldHNEaWZmZXInKX0sXG4gIGNvbGxhcHNhYmxlOiB0cnVlLFxuXG4gIGJvcmRlclRvcFdpZHRoOiB0cnVlLFxuICBib3JkZXJUb3BDb2xvcjoge3Byb2Nlc3M6IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdH0sXG4gIGJvcmRlclJpZ2h0V2lkdGg6IHRydWUsXG4gIGJvcmRlclJpZ2h0Q29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuICBib3JkZXJCb3R0b21XaWR0aDogdHJ1ZSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuICBib3JkZXJMZWZ0V2lkdGg6IHRydWUsXG4gIGJvcmRlckxlZnRDb2xvcjoge3Byb2Nlc3M6IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdH0sXG4gIGJvcmRlclN0YXJ0V2lkdGg6IHRydWUsXG4gIGJvcmRlclN0YXJ0Q29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuICBib3JkZXJFbmRXaWR0aDogdHJ1ZSxcbiAgYm9yZGVyRW5kQ29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuXG4gIGJvcmRlclRvcExlZnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiB0cnVlLFxuICBib3JkZXJUb3BTdGFydFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyVG9wRW5kUmFkaXVzOiB0cnVlLFxuICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiB0cnVlLFxuICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyQm90dG9tU3RhcnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlckJvdHRvbUVuZFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyRW5kRW5kUmFkaXVzOiB0cnVlLFxuICBib3JkZXJFbmRTdGFydFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyU3RhcnRFbmRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclN0YXJ0U3RhcnRSYWRpdXM6IHRydWUsXG4gIGRpc3BsYXk6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcblxuICAvLyBTaGFkb3dWaWV3IHByb3BlcnRpZXNcbiAgdG9wOiB0cnVlLFxuICByaWdodDogdHJ1ZSxcbiAgc3RhcnQ6IHRydWUsXG4gIGVuZDogdHJ1ZSxcbiAgYm90dG9tOiB0cnVlLFxuICBsZWZ0OiB0cnVlLFxuXG4gIGluc2V0OiB0cnVlLFxuICBpbnNldEJsb2NrOiB0cnVlLFxuICBpbnNldEJsb2NrRW5kOiB0cnVlLFxuICBpbnNldEJsb2NrU3RhcnQ6IHRydWUsXG4gIGluc2V0SW5saW5lOiB0cnVlLFxuICBpbnNldElubGluZUVuZDogdHJ1ZSxcbiAgaW5zZXRJbmxpbmVTdGFydDogdHJ1ZSxcblxuICB3aWR0aDogdHJ1ZSxcbiAgaGVpZ2h0OiB0cnVlLFxuXG4gIG1pbldpZHRoOiB0cnVlLFxuICBtYXhXaWR0aDogdHJ1ZSxcbiAgbWluSGVpZ2h0OiB0cnVlLFxuICBtYXhIZWlnaHQ6IHRydWUsXG5cbiAgLy8gQWxzbyBkZWNsYXJlZCBhcyBWaWV3UHJvcHNcbiAgLy8gYm9yZGVyVG9wV2lkdGg6IHRydWUsXG4gIC8vIGJvcmRlclJpZ2h0V2lkdGg6IHRydWUsXG4gIC8vIGJvcmRlckJvdHRvbVdpZHRoOiB0cnVlLFxuICAvLyBib3JkZXJMZWZ0V2lkdGg6IHRydWUsXG4gIC8vIGJvcmRlclN0YXJ0V2lkdGg6IHRydWUsXG4gIC8vIGJvcmRlckVuZFdpZHRoOiB0cnVlLFxuICAvLyBib3JkZXJXaWR0aDogdHJ1ZSxcblxuICBtYXJnaW46IHRydWUsXG4gIG1hcmdpbkJsb2NrOiB0cnVlLFxuICBtYXJnaW5CbG9ja0VuZDogdHJ1ZSxcbiAgbWFyZ2luQmxvY2tTdGFydDogdHJ1ZSxcbiAgbWFyZ2luQm90dG9tOiB0cnVlLFxuICBtYXJnaW5FbmQ6IHRydWUsXG4gIG1hcmdpbkhvcml6b250YWw6IHRydWUsXG4gIG1hcmdpbklubGluZTogdHJ1ZSxcbiAgbWFyZ2luSW5saW5lRW5kOiB0cnVlLFxuICBtYXJnaW5JbmxpbmVTdGFydDogdHJ1ZSxcbiAgbWFyZ2luTGVmdDogdHJ1ZSxcbiAgbWFyZ2luUmlnaHQ6IHRydWUsXG4gIG1hcmdpblN0YXJ0OiB0cnVlLFxuICBtYXJnaW5Ub3A6IHRydWUsXG4gIG1hcmdpblZlcnRpY2FsOiB0cnVlLFxuXG4gIHBhZGRpbmc6IHRydWUsXG4gIHBhZGRpbmdCbG9jazogdHJ1ZSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB0cnVlLFxuICBwYWRkaW5nQmxvY2tTdGFydDogdHJ1ZSxcbiAgcGFkZGluZ0JvdHRvbTogdHJ1ZSxcbiAgcGFkZGluZ0VuZDogdHJ1ZSxcbiAgcGFkZGluZ0hvcml6b250YWw6IHRydWUsXG4gIHBhZGRpbmdJbmxpbmU6IHRydWUsXG4gIHBhZGRpbmdJbmxpbmVFbmQ6IHRydWUsXG4gIHBhZGRpbmdJbmxpbmVTdGFydDogdHJ1ZSxcbiAgcGFkZGluZ0xlZnQ6IHRydWUsXG4gIHBhZGRpbmdSaWdodDogdHJ1ZSxcbiAgcGFkZGluZ1N0YXJ0OiB0cnVlLFxuICBwYWRkaW5nVG9wOiB0cnVlLFxuICBwYWRkaW5nVmVydGljYWw6IHRydWUsXG5cbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIHJvd0dhcDogdHJ1ZSxcbiAgY29sdW1uR2FwOiB0cnVlLFxuICBnYXA6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhCYXNpczogdHJ1ZSxcbiAgZmxleERpcmVjdGlvbjogdHJ1ZSxcbiAgZmxleFdyYXA6IHRydWUsXG4gIGp1c3RpZnlDb250ZW50OiB0cnVlLFxuICBhbGlnbkl0ZW1zOiB0cnVlLFxuICBhbGlnblNlbGY6IHRydWUsXG4gIGFsaWduQ29udGVudDogdHJ1ZSxcbiAgcG9zaXRpb246IHRydWUsXG4gIGFzcGVjdFJhdGlvOiB0cnVlLFxuXG4gIC8vIEFsc28gZGVjbGFyZWQgYXMgVmlld1Byb3BzXG4gIC8vIG92ZXJmbG93OiB0cnVlLFxuICAvLyBkaXNwbGF5OiB0cnVlLFxuXG4gIGRpcmVjdGlvbjogdHJ1ZSxcblxuICBzdHlsZTogUmVhY3ROYXRpdmVTdHlsZUF0dHJpYnV0ZXMsXG5cbiAgZXhwZXJpbWVudGFsX2xheW91dENvbmZvcm1hbmNlOiB0cnVlLFxufTtcblxuLy8gUHJvcHMgZm9yIGJ1YmJsaW5nIGFuZCBkaXJlY3QgZXZlbnRzXG5jb25zdCB2YWxpZEF0dHJpYnV0ZXNGb3JFdmVudFByb3BzID0gQ29uZGl0aW9uYWxseUlnbm9yZWRFdmVudEhhbmRsZXJzKHtcbiAgb25MYXlvdXQ6IHRydWUsXG4gIG9uTWFnaWNUYXA6IHRydWUsXG5cbiAgLy8gQWNjZXNzaWJpbGl0eVxuICBvbkFjY2Vzc2liaWxpdHlBY3Rpb246IHRydWUsXG4gIG9uQWNjZXNzaWJpbGl0eUVzY2FwZTogdHJ1ZSxcbiAgb25BY2Nlc3NpYmlsaXR5VGFwOiB0cnVlLFxuXG4gIC8vIFBhblJlc3BvbmRlciBoYW5kbGVyc1xuICBvbk1vdmVTaG91bGRTZXRSZXNwb25kZXI6IHRydWUsXG4gIG9uTW92ZVNob3VsZFNldFJlc3BvbmRlckNhcHR1cmU6IHRydWUsXG4gIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXI6IHRydWUsXG4gIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlOiB0cnVlLFxuICBvblJlc3BvbmRlckdyYW50OiB0cnVlLFxuICBvblJlc3BvbmRlclJlamVjdDogdHJ1ZSxcbiAgb25SZXNwb25kZXJTdGFydDogdHJ1ZSxcbiAgb25SZXNwb25kZXJFbmQ6IHRydWUsXG4gIG9uUmVzcG9uZGVyUmVsZWFzZTogdHJ1ZSxcbiAgb25SZXNwb25kZXJNb3ZlOiB0cnVlLFxuICBvblJlc3BvbmRlclRlcm1pbmF0ZTogdHJ1ZSxcbiAgb25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3Q6IHRydWUsXG4gIG9uU2hvdWxkQmxvY2tOYXRpdmVSZXNwb25kZXI6IHRydWUsXG5cbiAgLy8gVG91Y2ggZXZlbnRzXG4gIG9uVG91Y2hTdGFydDogdHJ1ZSxcbiAgb25Ub3VjaE1vdmU6IHRydWUsXG4gIG9uVG91Y2hFbmQ6IHRydWUsXG4gIG9uVG91Y2hDYW5jZWw6IHRydWUsXG5cbiAgLy8gUG9pbnRlciBldmVudHNcbiAgb25DbGljazogdHJ1ZSxcbiAgb25Qb2ludGVyVXA6IHRydWUsXG4gIG9uUG9pbnRlckRvd246IHRydWUsXG4gIG9uUG9pbnRlckNhbmNlbDogdHJ1ZSxcbiAgb25Qb2ludGVyRW50ZXI6IHRydWUsXG4gIG9uUG9pbnRlck1vdmU6IHRydWUsXG4gIG9uUG9pbnRlckxlYXZlOiB0cnVlLFxuICBvblBvaW50ZXJPdmVyOiB0cnVlLFxuICBvblBvaW50ZXJPdXQ6IHRydWUsXG4gIG9uR290UG9pbnRlckNhcHR1cmU6IHRydWUsXG4gIG9uTG9zdFBvaW50ZXJDYXB0dXJlOiB0cnVlLFxufSk7XG5cbi8qKlxuICogT24gaU9TLCB2aWV3IG1hbmFnZXJzIGRlZmluZSBhbGwgb2YgYSBjb21wb25lbnQncyBwcm9wcy5cbiAqIEFsbCB2aWV3IG1hbmFnZXJzIGV4dGVuZCBSQ1RWaWV3TWFuYWdlciwgYW5kIFJDVFZpZXdNYW5hZ2VyIGRlY2xhcmVzIHRoZXNlIHByb3BzLlxuICovXG5jb25zdCBQbGF0Zm9ybUJhc2VWaWV3Q29uZmlnSW9zOiBQYXJ0aWFsVmlld0NvbmZpZ1dpdGhvdXROYW1lID0ge1xuICBidWJibGluZ0V2ZW50VHlwZXMsXG4gIGRpcmVjdEV2ZW50VHlwZXMsXG4gIHZhbGlkQXR0cmlidXRlczoge1xuICAgIC4uLnZhbGlkQXR0cmlidXRlc0Zvck5vbkV2ZW50UHJvcHMsXG4gICAgLi4udmFsaWRBdHRyaWJ1dGVzRm9yRXZlbnRQcm9wcyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBsYXRmb3JtQmFzZVZpZXdDb25maWdJb3M7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5cbmNvbnN0IGlnbm9yZWRWaWV3Q29uZmlnUHJvcHMgPSBuZXcgV2Vha1NldDx7Li4ufT4oKTtcblxuLyoqXG4gKiBEZWNvcmF0ZXMgVmlld0NvbmZpZyB2YWx1ZXMgdGhhdCBhcmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgdGhlIGxpYnJhcnksXG4gKiByZWFjdC1uYXRpdmUtZ2VzdHVyZS1oYW5kbGVyLiAoVDQ1NzY1MDc2KVxuICovXG5leHBvcnQgZnVuY3Rpb24gRHluYW1pY2FsbHlJbmplY3RlZEJ5R2VzdHVyZUhhbmRsZXI8VDogey4uLn0+KG9iamVjdDogVCk6IFQge1xuICBpZ25vcmVkVmlld0NvbmZpZ1Byb3BzLmFkZChvYmplY3QpO1xuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vKipcbiAqIE9uIGlPUywgVmlld01hbmFnZXIgZXZlbnQgZGVjbGFyYXRpb25zIGdlbmVyYXRlIHtldmVudE5hbWV9OiB0cnVlIGVudHJpZXNcbiAqIGluIFZpZXdDb25maWcgdmFsdWVBdHRyaWJ1dGVzLiBUaGVzZSBlbnRyaWVzIGFyZW4ndCBnZW5lcmF0ZWQgZm9yIEFuZHJvaWQuXG4gKiBUaGlzIGFubm90YXRpb24gYWxsb3dzIFN0YXRpYyBWaWV3Q29uZmlncyB0byBpbnNlcnQgdGhlc2UgZW50cmllcyBpbnRvXG4gKiBpT1MgYnV0IG5vdCBBbmRyb2lkLlxuICpcbiAqIEluIHRoZSBmdXR1cmUsIHdlIHdhbnQgdG8gcmVtb3ZlIHRoaXMgcGxhdGZvcm0taW5jb25zaXN0ZW5jeS4gV2Ugd2FudFxuICogdG8gc2V0IFJOJFZpZXdDb25maWdFdmVudFZhbGlkQXR0cmlidXRlc0Rpc2FibGVkID0gdHJ1ZSBzZXJ2ZXItc2lkZSxcbiAqIHNvIHRoYXQgaU9TIGRvZXMgbm90IGdlbmVyYXRlIHZhbGlkQXR0cmlidXRlcyBmcm9tIGV2ZW50IHByb3BzIGluIGlPUyBSQ1RWaWV3TWFuYWdlcixcbiAqIHNpbmNlIEFuZHJvaWQgZG9lcyBub3QgZ2VuZXJhdGUgdmFsaWRBdHRyaWJ1dGVzIGZyb20gZXZlbnRzIHByb3BzIGluIEFuZHJvaWQgVmlld01hbmFnZXIuXG4gKlxuICogVE9ETyhUMTEwODcyMjI1KTogUmVtb3ZlIHRoaXMgbG9naWMsIGFmdGVyIGFjaGlldmluZyBwbGF0Zm9ybS1jb25zaXN0ZW5jeVxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29uZGl0aW9uYWxseUlnbm9yZWRFdmVudEhhbmRsZXJzPFQ6IHtbbmFtZTogc3RyaW5nXTogdHJ1ZX0+KFxuICB2YWx1ZTogVCxcbik6IFQgfCB2b2lkIHtcbiAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZ25vcmVkKHZhbHVlOiBtaXhlZCk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGlnbm9yZWRWaWV3Q29uZmlnUHJvcHMuaGFzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHt0eXBlIFZpZXdDb25maWd9IGZyb20gJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHtpc0lnbm9yZWR9IGZyb20gJy4vVmlld0NvbmZpZ0lnbm9yZSc7XG5cbmV4cG9ydCB0eXBlIERpZmZlcmVuY2UgPVxuICB8IHtcbiAgICAgIHR5cGU6ICdtaXNzaW5nJyxcbiAgICAgIHBhdGg6IEFycmF5PHN0cmluZz4sXG4gICAgICBuYXRpdmVWYWx1ZTogbWl4ZWQsXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6ICd1bmVxdWFsJyxcbiAgICAgIHBhdGg6IEFycmF5PHN0cmluZz4sXG4gICAgICBuYXRpdmVWYWx1ZTogbWl4ZWQsXG4gICAgICBzdGF0aWNWYWx1ZTogbWl4ZWQsXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6ICd1bmV4cGVjdGVkJyxcbiAgICAgIHBhdGg6IEFycmF5PHN0cmluZz4sXG4gICAgICBzdGF0aWNWYWx1ZTogbWl4ZWQsXG4gICAgfTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvblJlc3VsdCA9IFZhbGlkUmVzdWx0IHwgSW52YWxpZFJlc3VsdDtcbnR5cGUgVmFsaWRSZXN1bHQgPSB7XG4gIHR5cGU6ICd2YWxpZCcsXG59O1xudHlwZSBJbnZhbGlkUmVzdWx0ID0ge1xuICB0eXBlOiAnaW52YWxpZCcsXG4gIGRpZmZlcmVuY2VzOiBBcnJheTxEaWZmZXJlbmNlPixcbn07XG5cbi8qKlxuICogRHVyaW5nIHRoZSBtaWdyYXRpb24gZnJvbSBuYXRpdmUgdmlldyBjb25maWdzIHRvIHN0YXRpYyB2aWV3IGNvbmZpZ3MsIHRoaXMgaXNcbiAqIHVzZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgdHdvIGFyZSBlcXVpdmFsZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoXG4gIG5hbWU6IHN0cmluZyxcbiAgbmF0aXZlVmlld0NvbmZpZzogVmlld0NvbmZpZyxcbiAgc3RhdGljVmlld0NvbmZpZzogVmlld0NvbmZpZyxcbik6IFZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBkaWZmZXJlbmNlczogQXJyYXk8RGlmZmVyZW5jZT4gPSBbXTtcbiAgYWNjdW11bGF0ZURpZmZlcmVuY2VzKFxuICAgIGRpZmZlcmVuY2VzLFxuICAgIFtdLFxuICAgIHtcbiAgICAgIGJ1YmJsaW5nRXZlbnRUeXBlczogbmF0aXZlVmlld0NvbmZpZy5idWJibGluZ0V2ZW50VHlwZXMsXG4gICAgICBkaXJlY3RFdmVudFR5cGVzOiBuYXRpdmVWaWV3Q29uZmlnLmRpcmVjdEV2ZW50VHlwZXMsXG4gICAgICB1aVZpZXdDbGFzc05hbWU6IG5hdGl2ZVZpZXdDb25maWcudWlWaWV3Q2xhc3NOYW1lLFxuICAgICAgdmFsaWRBdHRyaWJ1dGVzOiBuYXRpdmVWaWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGJ1YmJsaW5nRXZlbnRUeXBlczogc3RhdGljVmlld0NvbmZpZy5idWJibGluZ0V2ZW50VHlwZXMsXG4gICAgICBkaXJlY3RFdmVudFR5cGVzOiBzdGF0aWNWaWV3Q29uZmlnLmRpcmVjdEV2ZW50VHlwZXMsXG4gICAgICB1aVZpZXdDbGFzc05hbWU6IHN0YXRpY1ZpZXdDb25maWcudWlWaWV3Q2xhc3NOYW1lLFxuICAgICAgdmFsaWRBdHRyaWJ1dGVzOiBzdGF0aWNWaWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcyxcbiAgICB9LFxuICApO1xuXG4gIGlmIChkaWZmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge3R5cGU6ICd2YWxpZCd9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnaW52YWxpZCcsXG4gICAgZGlmZmVyZW5jZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlWYWxpZGF0aW9uUmVzdWx0KFxuICBuYW1lOiBzdHJpbmcsXG4gIHZhbGlkYXRpb25SZXN1bHQ6IEludmFsaWRSZXN1bHQsXG4pOiBzdHJpbmcge1xuICBjb25zdCB7ZGlmZmVyZW5jZXN9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgcmV0dXJuIFtcbiAgICBgU3RhdGljVmlld0NvbmZpZ1ZhbGlkYXRvcjogSW52YWxpZCBzdGF0aWMgdmlldyBjb25maWcgZm9yICcke25hbWV9Jy5gLFxuICAgICcnLFxuICAgIC4uLmRpZmZlcmVuY2VzLm1hcChkaWZmZXJlbmNlID0+IHtcbiAgICAgIGNvbnN0IHt0eXBlLCBwYXRofSA9IGRpZmZlcmVuY2U7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnbWlzc2luZyc6XG4gICAgICAgICAgcmV0dXJuIGAtICcke3BhdGguam9pbignLicpfScgaXMgbWlzc2luZy5gO1xuICAgICAgICBjYXNlICd1bmVxdWFsJzpcbiAgICAgICAgICByZXR1cm4gYC0gJyR7cGF0aC5qb2luKCcuJyl9JyBpcyB0aGUgd3JvbmcgdmFsdWUuYDtcbiAgICAgICAgY2FzZSAndW5leHBlY3RlZCc6XG4gICAgICAgICAgcmV0dXJuIGAtICcke3BhdGguam9pbignLicpfScgaXMgcHJlc2VudCBidXQgbm90IGV4cGVjdGVkIHRvIGJlLmA7XG4gICAgICB9XG4gICAgfSksXG4gICAgJycsXG4gIF0uam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaWZmZXJlbmNlcyhcbiAgZGlmZmVyZW5jZXM6IEFycmF5PERpZmZlcmVuY2U+LFxuICBwYXRoOiBBcnJheTxzdHJpbmc+LFxuICBuYXRpdmVPYmplY3Q6IHsuLi59LFxuICBzdGF0aWNPYmplY3Q6IHsuLi59LFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgbmF0aXZlS2V5IGluIG5hdGl2ZU9iamVjdCkge1xuICAgIGNvbnN0IG5hdGl2ZVZhbHVlID0gbmF0aXZlT2JqZWN0W25hdGl2ZUtleV07XG5cbiAgICBpZiAoIXN0YXRpY09iamVjdC5oYXNPd25Qcm9wZXJ0eShuYXRpdmVLZXkpKSB7XG4gICAgICBkaWZmZXJlbmNlcy5wdXNoKHtcbiAgICAgICAgcGF0aDogWy4uLnBhdGgsIG5hdGl2ZUtleV0sXG4gICAgICAgIHR5cGU6ICdtaXNzaW5nJyxcbiAgICAgICAgbmF0aXZlVmFsdWUsXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpY1ZhbHVlID0gc3RhdGljT2JqZWN0W25hdGl2ZUtleV07XG5cbiAgICBjb25zdCBuYXRpdmVWYWx1ZUlmT2JqZWN0ID0gaWZPYmplY3QobmF0aXZlVmFsdWUpO1xuICAgIGlmIChuYXRpdmVWYWx1ZUlmT2JqZWN0ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRpY1ZhbHVlSWZPYmplY3QgPSBpZk9iamVjdChzdGF0aWNWYWx1ZSk7XG4gICAgICBpZiAoc3RhdGljVmFsdWVJZk9iamVjdCAhPSBudWxsKSB7XG4gICAgICAgIHBhdGgucHVzaChuYXRpdmVLZXkpO1xuICAgICAgICBhY2N1bXVsYXRlRGlmZmVyZW5jZXMoXG4gICAgICAgICAgZGlmZmVyZW5jZXMsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBuYXRpdmVWYWx1ZUlmT2JqZWN0LFxuICAgICAgICAgIHN0YXRpY1ZhbHVlSWZPYmplY3QsXG4gICAgICAgICk7XG4gICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYXRpdmVWYWx1ZSAhPT0gc3RhdGljVmFsdWUpIHtcbiAgICAgIGRpZmZlcmVuY2VzLnB1c2goe1xuICAgICAgICBwYXRoOiBbLi4ucGF0aCwgbmF0aXZlS2V5XSxcbiAgICAgICAgdHlwZTogJ3VuZXF1YWwnLFxuICAgICAgICBuYXRpdmVWYWx1ZSxcbiAgICAgICAgc3RhdGljVmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN0YXRpY0tleSBpbiBzdGF0aWNPYmplY3QpIHtcbiAgICBpZiAoXG4gICAgICAhbmF0aXZlT2JqZWN0Lmhhc093blByb3BlcnR5KHN0YXRpY0tleSkgJiZcbiAgICAgICFpc0lnbm9yZWQoc3RhdGljT2JqZWN0W3N0YXRpY0tleV0pXG4gICAgKSB7XG4gICAgICBkaWZmZXJlbmNlcy5wdXNoKHtcbiAgICAgICAgcGF0aDogWy4uLnBhdGgsIHN0YXRpY0tleV0sXG4gICAgICAgIHR5cGU6ICd1bmV4cGVjdGVkJyxcbiAgICAgICAgc3RhdGljVmFsdWU6IHN0YXRpY09iamVjdFtzdGF0aWNLZXldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlmT2JqZWN0KHZhbHVlOiBtaXhlZCk6ID97Li4ufSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogbnVsbDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnRpYWxWaWV3Q29uZmlnLFxuICBWaWV3Q29uZmlnLFxufSBmcm9tICcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcblxuaW1wb3J0IFBsYXRmb3JtQmFzZVZpZXdDb25maWcgZnJvbSAnLi9QbGF0Zm9ybUJhc2VWaWV3Q29uZmlnJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgYFZpZXdDb25maWdgIGZyb20gYSBgUGFydGlhbFZpZXdDb25maWdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmlld0NvbmZpZyhcbiAgcGFydGlhbFZpZXdDb25maWc6IFBhcnRpYWxWaWV3Q29uZmlnLFxuKTogVmlld0NvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdWlWaWV3Q2xhc3NOYW1lOiBwYXJ0aWFsVmlld0NvbmZpZy51aVZpZXdDbGFzc05hbWUsXG4gICAgQ29tbWFuZHM6IHt9LFxuICAgIGJ1YmJsaW5nRXZlbnRUeXBlczogY29tcG9zZUluZGV4ZXJzKFxuICAgICAgUGxhdGZvcm1CYXNlVmlld0NvbmZpZy5idWJibGluZ0V2ZW50VHlwZXMsXG4gICAgICBwYXJ0aWFsVmlld0NvbmZpZy5idWJibGluZ0V2ZW50VHlwZXMsXG4gICAgKSxcbiAgICBkaXJlY3RFdmVudFR5cGVzOiBjb21wb3NlSW5kZXhlcnMoXG4gICAgICBQbGF0Zm9ybUJhc2VWaWV3Q29uZmlnLmRpcmVjdEV2ZW50VHlwZXMsXG4gICAgICBwYXJ0aWFsVmlld0NvbmZpZy5kaXJlY3RFdmVudFR5cGVzLFxuICAgICksXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIHZhbGlkQXR0cmlidXRlczogY29tcG9zZUluZGV4ZXJzKFxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gYHN0eWxlYCBwcm9wZXJ0eSBjb25mdXNlcyBGbG93LlxuICAgICAgUGxhdGZvcm1CYXNlVmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXMsXG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBgc3R5bGVgIHByb3BlcnR5IGNvbmZ1c2VzIEZsb3cuXG4gICAgICBwYXJ0aWFsVmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXMsXG4gICAgKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZUluZGV4ZXJzPFQ+KFxuICBtYXliZUE6ID97K1tzdHJpbmddOiBUfSxcbiAgbWF5YmVCOiA/eytbc3RyaW5nXTogVH0sXG4pOiB7K1tzdHJpbmddOiBUfSB7XG4gIHJldHVybiBtYXliZUEgPT0gbnVsbCB8fCBtYXliZUIgPT0gbnVsbFxuICAgID8gbWF5YmVBID8/IG1heWJlQiA/PyB7fVxuICAgIDogey4uLm1heWJlQSwgLi4ubWF5YmVCfTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmNvbnN0IHtkaXNwYXRjaENvbW1hbmR9ID0gcmVxdWlyZSgnLi4vUmVhY3ROYXRpdmUvUmVuZGVyZXJQcm94eScpO1xuXG50eXBlIE9wdGlvbnM8VCA9IHN0cmluZz4gPSAkUmVhZE9ubHk8e3xcbiAgc3VwcG9ydGVkQ29tbWFuZHM6ICRSZWFkT25seUFycmF5PFQ+LFxufH0+O1xuXG5mdW5jdGlvbiBjb2RlZ2VuTmF0aXZlQ29tbWFuZHM8VDogaW50ZXJmYWNlIHt9PihvcHRpb25zOiBPcHRpb25zPCRLZXlzPFQ+Pik6IFQge1xuICBjb25zdCBjb21tYW5kT2JqOiB7WyRLZXlzPFQ+XTogKC4uLiRSZWFkT25seUFycmF5PG1peGVkPikgPT4gdm9pZH0gPSB7fTtcblxuICBvcHRpb25zLnN1cHBvcnRlZENvbW1hbmRzLmZvckVhY2goY29tbWFuZCA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICAgIGNvbW1hbmRPYmpbY29tbWFuZF0gPSAocmVmLCAuLi5hcmdzKSA9PiB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgICAgZGlzcGF0Y2hDb21tYW5kKHJlZiwgY29tbWFuZCwgYXJncyk7XG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuICgoY29tbWFuZE9iajogYW55KTogVCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvZGVnZW5OYXRpdmVDb21tYW5kcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEVsZW1lbnRSZWN0YW5nbGUsXG4gIFRyYWNlVXBkYXRlLFxufSBmcm9tICcuL0RlYnVnZ2luZ092ZXJsYXlOYXRpdmVDb21wb25lbnQnO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgVUlNYW5hZ2VyIGZyb20gJy4uL1JlYWN0TmF0aXZlL1VJTWFuYWdlcic7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IERlYnVnZ2luZ092ZXJsYXlOYXRpdmVDb21wb25lbnQsIHtcbiAgQ29tbWFuZHMsXG59IGZyb20gJy4vRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHt1c2VSZWYsIHVzZUltcGVyYXRpdmVIYW5kbGV9ID0gUmVhY3Q7XG5jb25zdCBpc05hdGl2ZUNvbXBvbmVudFJlYWR5ID1cbiAgVUlNYW5hZ2VyLmhhc1ZpZXdNYW5hZ2VyQ29uZmlnKCdEZWJ1Z2dpbmdPdmVybGF5Jyk7XG5cbnR5cGUgRGVidWdnaW5nT3ZlcmxheUhhbmRsZSA9IHtcbiAgaGlnaGxpZ2h0VHJhY2VVcGRhdGVzKHVwZGF0ZXM6IFRyYWNlVXBkYXRlW10pOiB2b2lkLFxuICBoaWdobGlnaHRFbGVtZW50cyhlbGVtZW50czogRWxlbWVudFJlY3RhbmdsZVtdKTogdm9pZCxcbiAgY2xlYXJFbGVtZW50c0hpZ2hsaWdodCgpOiB2b2lkLFxufTtcblxuZnVuY3Rpb24gRGVidWdnaW5nT3ZlcmxheShcbiAgX3Byb3BzOiB7fSxcbiAgcmVmOiBSZWFjdC5SZWZTZXR0ZXI8RGVidWdnaW5nT3ZlcmxheUhhbmRsZT4sXG4pOiBSZWFjdC5Ob2RlIHtcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShcbiAgICByZWYsXG4gICAgKCkgPT4gKHtcbiAgICAgIGhpZ2hsaWdodFRyYWNlVXBkYXRlcyh1cGRhdGVzKSB7XG4gICAgICAgIGlmICghaXNOYXRpdmVDb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vbkVtcHR5UmVjdGFuZ2xlcyA9IHVwZGF0ZXMuZmlsdGVyKFxuICAgICAgICAgICh7cmVjdGFuZ2xlLCBjb2xvcn0pID0+IHJlY3RhbmdsZS53aWR0aCA+PSAwICYmIHJlY3RhbmdsZS5oZWlnaHQgPj0gMCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobmF0aXZlQ29tcG9uZW50UmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIENvbW1hbmRzLmhpZ2hsaWdodFRyYWNlVXBkYXRlcyhcbiAgICAgICAgICAgIG5hdGl2ZUNvbXBvbmVudFJlZi5jdXJyZW50LFxuICAgICAgICAgICAgbm9uRW1wdHlSZWN0YW5nbGVzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoaWdobGlnaHRFbGVtZW50cyhlbGVtZW50cykge1xuICAgICAgICBpZiAoIWlzTmF0aXZlQ29tcG9uZW50UmVhZHkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF0aXZlQ29tcG9uZW50UmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIENvbW1hbmRzLmhpZ2hsaWdodEVsZW1lbnRzKG5hdGl2ZUNvbXBvbmVudFJlZi5jdXJyZW50LCBlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbGVhckVsZW1lbnRzSGlnaGxpZ2h0KCkge1xuICAgICAgICBpZiAoIWlzTmF0aXZlQ29tcG9uZW50UmVhZHkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF0aXZlQ29tcG9uZW50UmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIENvbW1hbmRzLmNsZWFyRWxlbWVudHNIaWdobGlnaHRzKG5hdGl2ZUNvbXBvbmVudFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSxcbiAgICBbXSxcbiAgKTtcblxuICBjb25zdCBuYXRpdmVDb21wb25lbnRSZWYgPSB1c2VSZWY8UmVhY3QuRWxlbWVudFJlZjxcbiAgICB0eXBlb2YgRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudCxcbiAgPiB8IG51bGw+KG51bGwpO1xuXG4gIHJldHVybiAoXG4gICAgaXNOYXRpdmVDb21wb25lbnRSZWFkeSAmJiAoXG4gICAgICA8VmlldyBwb2ludGVyRXZlbnRzPVwibm9uZVwiIHN0eWxlPXtzdHlsZXMub3ZlcmxheX0+XG4gICAgICAgIDxEZWJ1Z2dpbmdPdmVybGF5TmF0aXZlQ29tcG9uZW50XG4gICAgICAgICAgcmVmPXtuYXRpdmVDb21wb25lbnRSZWZ9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5vdmVybGF5fVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBvdmVybGF5OiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICB9LFxufSk7XG5cbmNvbnN0IERlYnVnZ2luZ092ZXJsYXlXaXRoRm9yd2FyZGVkUmVmOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxcbiAge30sXG4gIERlYnVnZ2luZ092ZXJsYXlIYW5kbGUsXG4gIFJlYWN0Lk5vZGUsXG4+ID0gUmVhY3QuZm9yd2FyZFJlZihEZWJ1Z2dpbmdPdmVybGF5KTtcblxuZXhwb3J0IGRlZmF1bHQgRGVidWdnaW5nT3ZlcmxheVdpdGhGb3J3YXJkZWRSZWY7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgX19fX0NvbG9yVmFsdWVfSW50ZXJuYWwsXG4gIF9fX19EYW5nZXJvdXNseUltcHJlY2lzZVN0eWxlX0ludGVybmFsLFxuICBfX19fRGFuZ2Vyb3VzbHlJbXByZWNpc2VTdHlsZVByb3BfSW50ZXJuYWwsXG4gIF9fX19JbWFnZVN0eWxlX0ludGVybmFsLFxuICBfX19fSW1hZ2VTdHlsZVByb3BfSW50ZXJuYWwsXG4gIF9fX19TdHlsZXNfSW50ZXJuYWwsXG4gIF9fX19UZXh0U3R5bGVfSW50ZXJuYWwsXG4gIF9fX19UZXh0U3R5bGVQcm9wX0ludGVybmFsLFxuICBfX19fVmlld1N0eWxlX0ludGVybmFsLFxuICBfX19fVmlld1N0eWxlUHJvcF9JbnRlcm5hbCxcbn0gZnJvbSAnLi9TdHlsZVNoZWV0VHlwZXMnO1xuXG5jb25zdCBSZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlcyA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvVmlldy9SZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlcycpO1xuY29uc3QgUGl4ZWxSYXRpbyA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9QaXhlbFJhdGlvJykuZGVmYXVsdDtcbmNvbnN0IGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW5TdHlsZScpO1xuXG5leHBvcnQgdHlwZSB7TmF0aXZlQ29sb3JWYWx1ZX0gZnJvbSAnLi9TdHlsZVNoZWV0VHlwZXMnO1xuXG4vKipcbiAqIFRoaXMgdHlwZSBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdHlwZSBmb3IgYW55dGhpbmcgdGhhdCBpcyBhIGNvbG9yLiBJdCBpc1xuICogbW9zdCB1c2VmdWwgd2hlbiB1c2luZyBEeW5hbWljQ29sb3JJT1Mgd2hpY2ggY2FuIGJlIGEgc3RyaW5nIG9yIGEgZHluYW1pY1xuICogY29sb3Igb2JqZWN0LlxuICpcbiAqIHR5cGUgcHJvcHMgPSB7YmFja2dyb3VuZENvbG9yOiBDb2xvclZhbHVlfTtcbiAqL1xuZXhwb3J0IHR5cGUgQ29sb3JWYWx1ZSA9IF9fX19Db2xvclZhbHVlX0ludGVybmFsO1xuXG4vKipcbiAqIFRoaXMgdHlwZSBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdHlwZSBmb3IgYSBwcm9wIHRoYXQgaXMgcGFzc2VkIHRocm91Z2hcbiAqIHRvIGEgPFZpZXc+J3MgYHN0eWxlYCBwcm9wLiBUaGlzIGVuc3VyZXMgY2FsbCBzaXRlcyBvZiB0aGUgY29tcG9uZW50XG4gKiBjYW4ndCBwYXNzIHN0eWxlcyB0aGF0IFZpZXcgZG9lc24ndCBzdXBwb3J0IHN1Y2ggYXMgYGZvbnRTaXplYC5gXG4gKlxuICogdHlwZSBQcm9wcyA9IHtzdHlsZTogVmlld1N0eWxlUHJvcH1cbiAqIGNvbnN0IE15Q29tcG9uZW50ID0gKHByb3BzOiBQcm9wcykgPT4gPFZpZXcgc3R5bGU9e3Byb3BzLnN0eWxlfSAvPlxuICovXG5leHBvcnQgdHlwZSBWaWV3U3R5bGVQcm9wID0gX19fX1ZpZXdTdHlsZVByb3BfSW50ZXJuYWw7XG5cbi8qKlxuICogVGhpcyB0eXBlIHNob3VsZCBiZSB1c2VkIGFzIHRoZSB0eXBlIGZvciBhIHByb3AgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaFxuICogdG8gYSA8VGV4dD4ncyBgc3R5bGVgIHByb3AuIFRoaXMgZW5zdXJlcyBjYWxsIHNpdGVzIG9mIHRoZSBjb21wb25lbnRcbiAqIGNhbid0IHBhc3Mgc3R5bGVzIHRoYXQgVGV4dCBkb2Vzbid0IHN1cHBvcnQgc3VjaCBhcyBgcmVzaXplTW9kZWAuYFxuICpcbiAqIHR5cGUgUHJvcHMgPSB7c3R5bGU6IFRleHRTdHlsZVByb3B9XG4gKiBjb25zdCBNeUNvbXBvbmVudCA9IChwcm9wczogUHJvcHMpID0+IDxUZXh0IHN0eWxlPXtwcm9wcy5zdHlsZX0gLz5cbiAqL1xuZXhwb3J0IHR5cGUgVGV4dFN0eWxlUHJvcCA9IF9fX19UZXh0U3R5bGVQcm9wX0ludGVybmFsO1xuXG4vKipcbiAqIFRoaXMgdHlwZSBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdHlwZSBmb3IgYSBwcm9wIHRoYXQgaXMgcGFzc2VkIHRocm91Z2hcbiAqIHRvIGFuIDxJbWFnZT4ncyBgc3R5bGVgIHByb3AuIFRoaXMgZW5zdXJlcyBjYWxsIHNpdGVzIG9mIHRoZSBjb21wb25lbnRcbiAqIGNhbid0IHBhc3Mgc3R5bGVzIHRoYXQgSW1hZ2UgZG9lc24ndCBzdXBwb3J0IHN1Y2ggYXMgYGZvbnRTaXplYC5gXG4gKlxuICogdHlwZSBQcm9wcyA9IHtzdHlsZTogSW1hZ2VTdHlsZVByb3B9XG4gKiBjb25zdCBNeUNvbXBvbmVudCA9IChwcm9wczogUHJvcHMpID0+IDxJbWFnZSBzdHlsZT17cHJvcHMuc3R5bGV9IC8+XG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlU3R5bGVQcm9wID0gX19fX0ltYWdlU3R5bGVQcm9wX0ludGVybmFsO1xuXG4vKipcbiAqIFdBUk5JTkc6IFlvdSBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNpbmcgdGhpcyB0eXBlLiBUaGlzIHR5cGVcbiAqIGlzIHNpbWlsYXIgdG8gdGhlIG9uZXMgYWJvdmUgZXhjZXB0IGl0IGFsbG93cyBzdHlsZXMgdGhhdCBhcmUgYWNjZXB0ZWRcbiAqIGJ5IGFsbCBvZiBWaWV3LCBUZXh0LCBvciBJbWFnZS4gSXQgaXMgdGhlcmVmb3JlIHZlcnkgdW5zYWZlIHRvIHBhc3MgdGhpc1xuICogdGhyb3VnaCB0byBhbiB1bmRlcmx5aW5nIGNvbXBvbmVudC4gVXNpbmcgdGhpcyBpcyBhbG1vc3QgYWx3YXlzIGEgbWlzdGFrZVxuICogYW5kIHVzaW5nIG9uZSBvZiB0aGUgb3RoZXIgbW9yZSByZXN0cmljdGl2ZSB0eXBlcyBpcyBsaWtlbHkgdGhlIHJpZ2h0IGNob2ljZS5cbiAqL1xuZXhwb3J0IHR5cGUgRGFuZ2Vyb3VzbHlJbXByZWNpc2VTdHlsZVByb3AgPVxuICBfX19fRGFuZ2Vyb3VzbHlJbXByZWNpc2VTdHlsZVByb3BfSW50ZXJuYWw7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIGZvciBnZXR0aW5nIHRoZSB2YWx1ZXMgZm9yIHNwZWNpZmljIHN0eWxlIGtleXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBpcyBiYWQgYmVjYXVzZSBwb3NpdGlvbiBpcyBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gJ3N0cmluZyc6XG4gKiBgYGBcbiAqIHR5cGUgUHJvcHMgPSB7cG9zaXRpb246IHN0cmluZ307XG4gKiBgYGBcbiAqXG4gKiBZb3Ugc2hvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGluc3RlYWQ6XG4gKlxuICogYGBgXG4gKiB0eXBlIFByb3BzID0ge3Bvc2l0aW9uOiBUeXBlRm9yU3R5bGVLZXk8J3Bvc2l0aW9uJz59O1xuICogYGBgXG4gKlxuICogVGhpcyB3aWxsIGNvcnJlY3RseSBnaXZlIHlvdSB0aGUgdHlwZSAnYWJzb2x1dGUnIHwgJ3JlbGF0aXZlJ1xuICovXG5leHBvcnQgdHlwZSBUeXBlRm9yU3R5bGVLZXk8XG4gICtrZXk6ICRLZXlzPF9fX19EYW5nZXJvdXNseUltcHJlY2lzZVN0eWxlX0ludGVybmFsPixcbj4gPSAkRWxlbWVudFR5cGU8X19fX0Rhbmdlcm91c2x5SW1wcmVjaXNlU3R5bGVfSW50ZXJuYWwsIGtleT47XG5cbi8qKlxuICogVGhpcyB0eXBlIGlzIGFuIG9iamVjdCBvZiB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIHN0eWxlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBmb3IgVmlldy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpc24ndCBhIHNhZmUgd2F5IHRvIHR5cGUgYSBzdHlsZSBwcm9wIGZvciBhIGNvbXBvbmVudCBhc1xuICogcmVzdWx0cyBmcm9tIFN0eWxlU2hlZXQuY3JlYXRlIHJldHVybiBhbiBpbnRlcm5hbCBpZGVudGlmaWVyLCBub3RcbiAqIGFuIG9iamVjdCBvZiBzdHlsZXMuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gdHlwZSB0aGUgc3R5bGUgcHJvcCBvZiBhIGZ1bmN0aW9uLFxuICogY29uc2lkZXIgdXNpbmcgVmlld1N0eWxlUHJvcC5cbiAqXG4gKiBBIHJlYXNvbmFibGUgdXNhZ2Ugb2YgdGhpcyB0eXBlIGlzIGZvciBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGFuXG4gKiBvYmplY3Qgb2Ygc3R5bGVzIHRvIHBhc3MgdG8gYSBWaWV3IHRoYXQgY2FuJ3QgYmUgcHJlY29tcHV0ZWQgd2l0aFxuICogU3R5bGVTaGVldC5jcmVhdGUuXG4gKi9cbmV4cG9ydCB0eXBlIFZpZXdTdHlsZSA9IF9fX19WaWV3U3R5bGVfSW50ZXJuYWw7XG5cbi8qKlxuICogVGhpcyB0eXBlIGlzIGFuIG9iamVjdCBvZiB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIHN0eWxlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBmb3IgVGV4dC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpc24ndCBhIHNhZmUgd2F5IHRvIHR5cGUgYSBzdHlsZSBwcm9wIGZvciBhIGNvbXBvbmVudCBhc1xuICogcmVzdWx0cyBmcm9tIFN0eWxlU2hlZXQuY3JlYXRlIHJldHVybiBhbiBpbnRlcm5hbCBpZGVudGlmaWVyLCBub3RcbiAqIGFuIG9iamVjdCBvZiBzdHlsZXMuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gdHlwZSB0aGUgc3R5bGUgcHJvcCBvZiBhIGZ1bmN0aW9uLFxuICogY29uc2lkZXIgdXNpbmcgVGV4dFN0eWxlUHJvcC5cbiAqXG4gKiBBIHJlYXNvbmFibGUgdXNhZ2Ugb2YgdGhpcyB0eXBlIGlzIGZvciBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGFuXG4gKiBvYmplY3Qgb2Ygc3R5bGVzIHRvIHBhc3MgdG8gYSBUZXh0IHRoYXQgY2FuJ3QgYmUgcHJlY29tcHV0ZWQgd2l0aFxuICogU3R5bGVTaGVldC5jcmVhdGUuXG4gKi9cbmV4cG9ydCB0eXBlIFRleHRTdHlsZSA9IF9fX19UZXh0U3R5bGVfSW50ZXJuYWw7XG5cbi8qKlxuICogVGhpcyB0eXBlIGlzIGFuIG9iamVjdCBvZiB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIHN0eWxlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBmb3IgSW1hZ2UuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXNuJ3QgYSBzYWZlIHdheSB0byB0eXBlIGEgc3R5bGUgcHJvcCBmb3IgYSBjb21wb25lbnQgYXNcbiAqIHJlc3VsdHMgZnJvbSBTdHlsZVNoZWV0LmNyZWF0ZSByZXR1cm4gYW4gaW50ZXJuYWwgaWRlbnRpZmllciwgbm90XG4gKiBhbiBvYmplY3Qgb2Ygc3R5bGVzLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHR5cGUgdGhlIHN0eWxlIHByb3Agb2YgYSBmdW5jdGlvbixcbiAqIGNvbnNpZGVyIHVzaW5nIEltYWdlU3R5bGVQcm9wLlxuICpcbiAqIEEgcmVhc29uYWJsZSB1c2FnZSBvZiB0aGlzIHR5cGUgaXMgZm9yIGhlbHBlciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gYW5cbiAqIG9iamVjdCBvZiBzdHlsZXMgdG8gcGFzcyB0byBhbiBJbWFnZSB0aGF0IGNhbid0IGJlIHByZWNvbXB1dGVkIHdpdGhcbiAqIFN0eWxlU2hlZXQuY3JlYXRlLlxuICovXG5leHBvcnQgdHlwZSBJbWFnZVN0eWxlID0gX19fX0ltYWdlU3R5bGVfSW50ZXJuYWw7XG5cbi8qKlxuICogV0FSTklORzogWW91IHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2luZyB0aGlzIHR5cGUuIFRoaXMgdHlwZSBpcyBhbiBvYmplY3RcbiAqIHdpdGggYWxsIHBvc3NpYmxlIHN0eWxlIGtleXMgYW5kIHRoZWlyIHZhbHVlcy4gTm90ZSB0aGF0IHRoaXMgaXNuJ3RcbiAqIGEgc2FmZSB3YXkgdG8gdHlwZSBhIHN0eWxlIHByb3AgZm9yIGEgY29tcG9uZW50IGFzIHJlc3VsdHMgZnJvbVxuICogU3R5bGVTaGVldC5jcmVhdGUgcmV0dXJuIGFuIGludGVybmFsIGlkZW50aWZpZXIsIG5vdCBhbiBvYmplY3Qgb2Ygc3R5bGVzLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHR5cGUgdGhlIHN0eWxlIHByb3Agb2YgYSBmdW5jdGlvbiwgY29uc2lkZXIgdXNpbmdcbiAqIFZpZXdTdHlsZVByb3AsIFRleHRTdHlsZVByb3AsIG9yIEltYWdlU3R5bGVQcm9wLlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB2ZXJ5IGNvcmUgdXRpbGl0aWVzIHRoYXQgb3BlcmF0ZSBvbiBhbiBvYmplY3RcbiAqIGNvbnRhaW5pbmcgYW55IHBvc3NpYmxlIHN0eWxlIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBEYW5nZXJvdXNseUltcHJlY2lzZVN0eWxlID0gX19fX0Rhbmdlcm91c2x5SW1wcmVjaXNlU3R5bGVfSW50ZXJuYWw7XG5cbmxldCBoYWlybGluZVdpZHRoOiBudW1iZXIgPSBQaXhlbFJhdGlvLnJvdW5kVG9OZWFyZXN0UGl4ZWwoMC40KTtcbmlmIChoYWlybGluZVdpZHRoID09PSAwKSB7XG4gIGhhaXJsaW5lV2lkdGggPSAxIC8gUGl4ZWxSYXRpby5nZXQoKTtcbn1cblxuY29uc3QgYWJzb2x1dGVGaWxsID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgbGVmdDogMCxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogMCxcbiAgYm90dG9tOiAwLFxufTtcbmlmIChfX0RFVl9fKSB7XG4gIE9iamVjdC5mcmVlemUoYWJzb2x1dGVGaWxsKTtcbn1cblxuLyoqXG4gKiBBIFN0eWxlU2hlZXQgaXMgYW4gYWJzdHJhY3Rpb24gc2ltaWxhciB0byBDU1MgU3R5bGVTaGVldHNcbiAqXG4gKiBDcmVhdGUgYSBuZXcgU3R5bGVTaGVldDpcbiAqXG4gKiBgYGBcbiAqIGNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAqICAgY29udGFpbmVyOiB7XG4gKiAgICAgYm9yZGVyUmFkaXVzOiA0LFxuICogICAgIGJvcmRlcldpZHRoOiAwLjUsXG4gKiAgICAgYm9yZGVyQ29sb3I6ICcjZDZkN2RhJyxcbiAqICAgfSxcbiAqICAgdGl0bGU6IHtcbiAqICAgICBmb250U2l6ZTogMTksXG4gKiAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICogICB9LFxuICogICBhY3RpdmVUaXRsZToge1xuICogICAgIGNvbG9yOiAncmVkJyxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogVXNlIGEgU3R5bGVTaGVldDpcbiAqXG4gKiBgYGBcbiAqIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAqICAgPFRleHQgc3R5bGU9e1tzdHlsZXMudGl0bGUsIHRoaXMucHJvcHMuaXNBY3RpdmUgJiYgc3R5bGVzLmFjdGl2ZVRpdGxlXX0gLz5cbiAqIDwvVmlldz5cbiAqIGBgYFxuICpcbiAqIENvZGUgcXVhbGl0eTpcbiAqXG4gKiAgLSBCeSBtb3Zpbmcgc3R5bGVzIGF3YXkgZnJvbSB0aGUgcmVuZGVyIGZ1bmN0aW9uLCB5b3UncmUgbWFraW5nIHRoZSBjb2RlXG4gKiAgICBlYXNpZXIgdG8gdW5kZXJzdGFuZC5cbiAqICAtIE5hbWluZyB0aGUgc3R5bGVzIGlzIGEgZ29vZCB3YXkgdG8gYWRkIG1lYW5pbmcgdG8gdGhlIGxvdyBsZXZlbCBjb21wb25lbnRzXG4gKiAgaW4gdGhlIHJlbmRlciBmdW5jdGlvbiwgYW5kIGVuY291cmFnZSByZXVzZS5cbiAqICAtIEluIG1vc3QgSURFcywgdXNpbmcgYFN0eWxlU2hlZXQuY3JlYXRlKClgIHdpbGwgb2ZmZXIgc3RhdGljIHR5cGUgY2hlY2tpbmdcbiAqICBhbmQgc3VnZ2VzdGlvbnMgdG8gaGVscCB5b3Ugd3JpdGUgdmFsaWQgc3R5bGVzLlxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIGRlZmluZWQgYXMgdGhlIHdpZHRoIG9mIGEgdGhpbiBsaW5lIG9uIHRoZSBwbGF0Zm9ybS4gSXQgY2FuIGJlXG4gICAqIHVzZWQgYXMgdGhlIHRoaWNrbmVzcyBvZiBhIGJvcmRlciBvciBkaXZpc2lvbiBiZXR3ZWVuIHR3byBlbGVtZW50cy5cbiAgICogRXhhbXBsZTpcbiAgICogYGBgXG4gICAqICAge1xuICAgKiAgICAgYm9yZGVyQm90dG9tQ29sb3I6ICcjYmJiJyxcbiAgICogICAgIGJvcmRlckJvdHRvbVdpZHRoOiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGhcbiAgICogICB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGlzIGNvbnN0YW50IHdpbGwgYWx3YXlzIGJlIGEgcm91bmQgbnVtYmVyIG9mIHBpeGVscyAoc28gYSBsaW5lIGRlZmluZWRcbiAgICogYnkgaXQgbG9vayBjcmlzcCkgYW5kIHdpbGwgdHJ5IHRvIG1hdGNoIHRoZSBzdGFuZGFyZCB3aWR0aCBvZiBhIHRoaW4gbGluZVxuICAgKiBvbiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybS4gSG93ZXZlciwgeW91IHNob3VsZCBub3QgcmVseSBvbiBpdCBiZWluZyBhXG4gICAqIGNvbnN0YW50IHNpemUsIGJlY2F1c2Ugb24gZGlmZmVyZW50IHBsYXRmb3JtcyBhbmQgc2NyZWVuIGRlbnNpdGllcyBpdHNcbiAgICogdmFsdWUgbWF5IGJlIGNhbGN1bGF0ZWQgZGlmZmVyZW50bHkuXG4gICAqXG4gICAqIEEgbGluZSB3aXRoIGhhaXJsaW5lIHdpZHRoIG1heSBub3QgYmUgdmlzaWJsZSBpZiB5b3VyIHNpbXVsYXRvciBpcyBkb3duc2NhbGVkLlxuICAgKi9cbiAgaGFpcmxpbmVXaWR0aCxcblxuICAvKipcbiAgICogQSB2ZXJ5IGNvbW1vbiBwYXR0ZXJuIGlzIHRvIGNyZWF0ZSBvdmVybGF5cyB3aXRoIHBvc2l0aW9uIGFic29sdXRlIGFuZCB6ZXJvIHBvc2l0aW9uaW5nLFxuICAgKiBzbyBgYWJzb2x1dGVGaWxsYCBjYW4gYmUgdXNlZCBmb3IgY29udmVuaWVuY2UgYW5kIHRvIHJlZHVjZSBkdXBsaWNhdGlvbiBvZiB0aGVzZSByZXBlYXRlZFxuICAgKiBzdHlsZXMuXG4gICAqL1xuICBhYnNvbHV0ZUZpbGw6IChhYnNvbHV0ZUZpbGw6IGFueSksIC8vIFRPRE86IFRoaXMgc2hvdWxkIGJlIHVwZGF0ZWQgYWZ0ZXIgd2UgZml4IGRvd25zdHJlYW0gRmxvdyBzaXRlcy5cblxuICAvKipcbiAgICogU29tZXRpbWVzIHlvdSBtYXkgd2FudCBgYWJzb2x1dGVGaWxsYCBidXQgd2l0aCBhIGNvdXBsZSB0d2Vha3MgLSBgYWJzb2x1dGVGaWxsT2JqZWN0YCBjYW4gYmVcbiAgICogdXNlZCB0byBjcmVhdGUgYSBjdXN0b21pemVkIGVudHJ5IGluIGEgYFN0eWxlU2hlZXRgLCBlLmcuOlxuICAgKlxuICAgKiAgIGNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgICogICAgIHdyYXBwZXI6IHtcbiAgICogICAgICAgLi4uU3R5bGVTaGVldC5hYnNvbHV0ZUZpbGxPYmplY3QsXG4gICAqICAgICAgIHRvcDogMTAsXG4gICAqICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICogICAgIH0sXG4gICAqICAgfSk7XG4gICAqL1xuICBhYnNvbHV0ZUZpbGxPYmplY3Q6IGFic29sdXRlRmlsbCxcblxuICAvKipcbiAgICogQ29tYmluZXMgdHdvIHN0eWxlcyBzdWNoIHRoYXQgYHN0eWxlMmAgd2lsbCBvdmVycmlkZSBhbnkgc3R5bGVzIGluIGBzdHlsZTFgLlxuICAgKiBJZiBlaXRoZXIgc3R5bGUgaXMgZmFsc3ksIHRoZSBvdGhlciBvbmUgaXMgcmV0dXJuZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFuXG4gICAqIGFycmF5LCBzYXZpbmcgYWxsb2NhdGlvbnMgYW5kIG1haW50YWluaW5nIHJlZmVyZW5jZSBlcXVhbGl0eSBmb3JcbiAgICogUHVyZUNvbXBvbmVudCBjaGVja3MuXG4gICAqL1xuICBjb21wb3NlPFQ6IERhbmdlcm91c2x5SW1wcmVjaXNlU3R5bGVQcm9wPihcbiAgICBzdHlsZTE6ID9ULFxuICAgIHN0eWxlMjogP1QsXG4gICk6ID9UIHwgJFJlYWRPbmx5QXJyYXk8VD4ge1xuICAgIGlmIChzdHlsZTEgIT0gbnVsbCAmJiBzdHlsZTIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIChbc3R5bGUxLCBzdHlsZTJdOiAkUmVhZE9ubHlBcnJheTxUPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdHlsZTEgIT0gbnVsbCA/IHN0eWxlMSA6IHN0eWxlMjtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZsYXR0ZW5zIGFuIGFycmF5IG9mIHN0eWxlIG9iamVjdHMsIGludG8gb25lIGFnZ3JlZ2F0ZWQgc3R5bGUgb2JqZWN0LlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGBcbiAgICogY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICAgKiAgIGxpc3RJdGVtOiB7XG4gICAqICAgICBmbGV4OiAxLFxuICAgKiAgICAgZm9udFNpemU6IDE2LFxuICAgKiAgICAgY29sb3I6ICd3aGl0ZSdcbiAgICogICB9LFxuICAgKiAgIHNlbGVjdGVkTGlzdEl0ZW06IHtcbiAgICogICAgIGNvbG9yOiAnZ3JlZW4nXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICpcbiAgICogU3R5bGVTaGVldC5mbGF0dGVuKFtzdHlsZXMubGlzdEl0ZW0sIHN0eWxlcy5zZWxlY3RlZExpc3RJdGVtXSlcbiAgICogLy8gcmV0dXJucyB7IGZsZXg6IDEsIGZvbnRTaXplOiAxNiwgY29sb3I6ICdncmVlbicgfVxuICAgKiBgYGBcbiAgICovXG4gIGZsYXR0ZW4sXG5cbiAgLyoqXG4gICAqIFdBUk5JTkc6IEVYUEVSSU1FTlRBTC4gQnJlYWtpbmcgY2hhbmdlcyB3aWxsIHByb2JhYmx5IGhhcHBlbiBhIGxvdCBhbmQgd2lsbFxuICAgKiBub3QgYmUgcmVsaWFibHkgYW5ub3VuY2VkLiBUaGUgd2hvbGUgdGhpbmcgbWlnaHQgYmUgZGVsZXRlZCwgd2hvIGtub3dzPyBVc2VcbiAgICogYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogU2V0cyBhIGZ1bmN0aW9uIHRvIHVzZSB0byBwcmUtcHJvY2VzcyBhIHN0eWxlIHByb3BlcnR5IHZhbHVlLiBUaGlzIGlzIHVzZWRcbiAgICogaW50ZXJuYWxseSB0byBwcm9jZXNzIGNvbG9yIGFuZCB0cmFuc2Zvcm0gdmFsdWVzLiBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpc1xuICAgKiB1bmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBhbmQgaGF2ZSBleGhhdXN0ZWQgb3RoZXIgb3B0aW9ucy5cbiAgICovXG4gIHNldFN0eWxlQXR0cmlidXRlUHJlcHJvY2Vzc29yKFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgcHJvY2VzczogKG5leHRQcm9wOiBtaXhlZCkgPT4gbWl4ZWQsXG4gICkge1xuICAgIGxldCB2YWx1ZTtcblxuICAgIGlmIChSZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlc1twcm9wZXJ0eV0gPT09IHRydWUpIHtcbiAgICAgIHZhbHVlID0ge3Byb2Nlc3N9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIFJlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzW3Byb3BlcnR5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0gey4uLlJlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzW3Byb3BlcnR5XSwgcHJvY2Vzc307XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7cHJvcGVydHl9IGlzIG5vdCBhIHZhbGlkIHN0eWxlIGF0dHJpYnV0ZWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIF9fREVWX18gJiZcbiAgICAgIHR5cGVvZiB2YWx1ZS5wcm9jZXNzID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgUmVhY3ROYXRpdmVTdHlsZUF0dHJpYnV0ZXNbcHJvcGVydHldPy5wcm9jZXNzID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB2YWx1ZS5wcm9jZXNzICE9PSBSZWFjdE5hdGl2ZVN0eWxlQXR0cmlidXRlc1twcm9wZXJ0eV0/LnByb2Nlc3NcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihgT3ZlcndyaXRpbmcgJHtwcm9wZXJ0eX0gc3R5bGUgYXR0cmlidXRlIHByZXByb2Nlc3NvcmApO1xuICAgIH1cblxuICAgIFJlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBbiBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgc3R5bGUgc2hlZXRzLlxuICAgKi9cbiAgLy8gJEZsb3dGaXhNZVt1bnN1cHBvcnRlZC12YXJpYW5jZS1hbm5vdGF0aW9uXVxuICBjcmVhdGU8K1M6IF9fX19TdHlsZXNfSW50ZXJuYWw+KG9iajogUyk6ICRSZWFkT25seTxTPiB7XG4gICAgLy8gVE9ETzogVGhpcyBzaG91bGQgcmV0dXJuIFMgYXMgdGhlIHJldHVybiB0eXBlLiBCdXQgZmlyc3QsXG4gICAgLy8gd2UgbmVlZCB0byBjb2RlbW9kIGFsbCB0aGUgY2FsbHNpdGVzIHRoYXQgYXJlIHR5cGluZyB0aGlzXG4gICAgLy8gcmV0dXJuIHZhbHVlIGFzIGEgbnVtYmVyIChldmVuIHRob3VnaCBpdCB3YXMgb3BhcXVlKS5cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmpba2V5XSkge1xuICAgICAgICAgIE9iamVjdC5mcmVlemUob2JqW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL0RlYnVnZ2luZ092ZXJsYXlOYXRpdmVDb21wb25lbnQnO1xuZXhwb3J0IGRlZmF1bHQgRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtQcm9jZXNzZWRDb2xvclZhbHVlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuXG5pbXBvcnQgY29kZWdlbk5hdGl2ZUNvbW1hbmRzIGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbW1hbmRzJztcbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgTmF0aXZlUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLi4uVmlld1Byb3BzLFxufH0+O1xuZXhwb3J0IHR5cGUgRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudFR5cGUgPSBIb3N0Q29tcG9uZW50PE5hdGl2ZVByb3BzPjtcblxuZXhwb3J0IHR5cGUgVHJhY2VVcGRhdGUgPSB7XG4gIGlkOiBudW1iZXIsXG4gIHJlY3RhbmdsZTogRWxlbWVudFJlY3RhbmdsZSxcbiAgY29sb3I6ID9Qcm9jZXNzZWRDb2xvclZhbHVlLFxufTtcblxuZXhwb3J0IHR5cGUgRWxlbWVudFJlY3RhbmdsZSA9IHtcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxufTtcblxuaW50ZXJmYWNlIE5hdGl2ZUNvbW1hbmRzIHtcbiAgK2hpZ2hsaWdodFRyYWNlVXBkYXRlczogKFxuICAgIHZpZXdSZWY6IFJlYWN0LkVsZW1lbnRSZWY8RGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudFR5cGU+LFxuICAgIHVwZGF0ZXM6ICRSZWFkT25seUFycmF5PFRyYWNlVXBkYXRlPixcbiAgKSA9PiB2b2lkO1xuICAraGlnaGxpZ2h0RWxlbWVudHM6IChcbiAgICB2aWV3UmVmOiBSZWFjdC5FbGVtZW50UmVmPERlYnVnZ2luZ092ZXJsYXlOYXRpdmVDb21wb25lbnRUeXBlPixcbiAgICBlbGVtZW50czogJFJlYWRPbmx5QXJyYXk8RWxlbWVudFJlY3RhbmdsZT4sXG4gICkgPT4gdm9pZDtcbiAgK2NsZWFyRWxlbWVudHNIaWdobGlnaHRzOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxEZWJ1Z2dpbmdPdmVybGF5TmF0aXZlQ29tcG9uZW50VHlwZT4sXG4gICkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENvbW1hbmRzOiBOYXRpdmVDb21tYW5kcyA9IGNvZGVnZW5OYXRpdmVDb21tYW5kczxOYXRpdmVDb21tYW5kcz4oe1xuICBzdXBwb3J0ZWRDb21tYW5kczogW1xuICAgICdoaWdobGlnaHRUcmFjZVVwZGF0ZXMnLFxuICAgICdoaWdobGlnaHRFbGVtZW50cycsXG4gICAgJ2NsZWFyRWxlbWVudHNIaWdobGlnaHRzJyxcbiAgXSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCAoY29kZWdlbk5hdGl2ZUNvbXBvbmVudDxOYXRpdmVQcm9wcz4oXG4gICdEZWJ1Z2dpbmdPdmVybGF5Jyxcbik6IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4vLyBUT0RPOiBtb3ZlIHRoaXMgZmlsZSB0byBzaGltcy9SZWFjdE5hdGl2ZSAocmVxdWlyZXMgUmVhY3QgdXBkYXRlIGFuZCBzeW5jKVxuXG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5pbXBvcnQgcmVxdWlyZU5hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvcmVxdWlyZU5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgVUlNYW5hZ2VyIGZyb20gJy4uL1JlYWN0TmF0aXZlL1VJTWFuYWdlcic7XG5cbi8vIFRPRE86IGltcG9ydCBmcm9tIENvZGVnZW5TY2hlbWEgb25jZSB3b3Jrc3BhY2VzIGFyZSBlbmFibGVkXG50eXBlIE9wdGlvbnMgPSAkUmVhZE9ubHk8e3xcbiAgaW50ZXJmYWNlT25seT86IGJvb2xlYW4sXG4gIHBhcGVyQ29tcG9uZW50TmFtZT86IHN0cmluZyxcbiAgcGFwZXJDb21wb25lbnROYW1lRGVwcmVjYXRlZD86IHN0cmluZyxcbiAgZXhjbHVkZWRQbGF0Zm9ybXM/OiAkUmVhZE9ubHlBcnJheTwnaU9TJyB8ICdhbmRyb2lkJz4sXG58fT47XG5cbmV4cG9ydCB0eXBlIE5hdGl2ZUNvbXBvbmVudFR5cGU8VD4gPSBIb3N0Q29tcG9uZW50PFQ+O1xuXG4vLyBJZiB0aGlzIGZ1bmN0aW9uIHJ1bnMgdGhlbiB0aGF0IG1lYW5zIHRoZSB2aWV3IGNvbmZpZ3Mgd2VyZSBub3Rcbi8vIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIHVzaW5nIGBHZW5lcmF0ZVZpZXdDb25maWdKcy5qc2AuIFRodXNcbi8vIHdlIG5lZWQgdG8gYHJlcXVpcmVOYXRpdmVDb21wb25lbnRgIHRvIGdldCB0aGUgdmlldyBjb25maWdzIGZyb20gdmlldyBtYW5hZ2Vycy5cbi8vIGByZXF1aXJlTmF0aXZlQ29tcG9uZW50YCBpcyBub3QgYXZhaWxhYmxlIGluIEJyaWRnZWxlc3MgbW9kZS5cbi8vIGUuZy4gVGhpcyBmdW5jdGlvbiBydW5zIGF0IHJ1bnRpbWUgaWYgYGNvZGVnZW5OYXRpdmVDb21wb25lbnRgIHdhcyBub3QgY2FsbGVkXG4vLyBmcm9tIGEgZmlsZSBzdWZmaXhlZCB3aXRoIE5hdGl2ZUNvbXBvbmVudC5qcy5cbmZ1bmN0aW9uIGNvZGVnZW5OYXRpdmVDb21wb25lbnQ8UHJvcHM+KFxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPcHRpb25zLFxuKTogTmF0aXZlQ29tcG9uZW50VHlwZTxQcm9wcz4ge1xuICBpZiAoZ2xvYmFsLlJOJEJyaWRnZWxlc3MgPT09IHRydWUpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgXCJOYXRpdmUgQ29tcG9uZW50ICdcIiArXG4gICAgICBjb21wb25lbnROYW1lICtcbiAgICAgIFwiJyB0aGF0IGNhbGxzIGNvZGVnZW5OYXRpdmVDb21wb25lbnQgd2FzIG5vdCBjb2RlIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lLiBQbGVhc2UgY2hlY2sgaXRzIGRlZmluaXRpb24uXCI7XG4gICAgY29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xuICB9XG5cbiAgbGV0IGNvbXBvbmVudE5hbWVJblVzZSA9XG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLnBhcGVyQ29tcG9uZW50TmFtZSAhPSBudWxsXG4gICAgICA/IG9wdGlvbnMucGFwZXJDb21wb25lbnROYW1lXG4gICAgICA6IGNvbXBvbmVudE5hbWU7XG5cbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLnBhcGVyQ29tcG9uZW50TmFtZURlcHJlY2F0ZWQgIT0gbnVsbCkge1xuICAgIGlmIChVSU1hbmFnZXIuaGFzVmlld01hbmFnZXJDb25maWcoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgIGNvbXBvbmVudE5hbWVJblVzZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG9wdGlvbnMucGFwZXJDb21wb25lbnROYW1lRGVwcmVjYXRlZCAhPSBudWxsICYmXG4gICAgICBVSU1hbmFnZXIuaGFzVmlld01hbmFnZXJDb25maWcob3B0aW9ucy5wYXBlckNvbXBvbmVudE5hbWVEZXByZWNhdGVkKVxuICAgICkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbiAgICAgIGNvbXBvbmVudE5hbWVJblVzZSA9IG9wdGlvbnMucGFwZXJDb21wb25lbnROYW1lRGVwcmVjYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZpbmQgbmF0aXZlIGNvbXBvbmVudCBmb3IgZWl0aGVyICR7Y29tcG9uZW50TmFtZX0gb3IgJHtcbiAgICAgICAgICBvcHRpb25zLnBhcGVyQ29tcG9uZW50TmFtZURlcHJlY2F0ZWQgPz8gJyh1bmtub3duKSdcbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAocmVxdWlyZU5hdGl2ZUNvbXBvbmVudDxQcm9wcz4oXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICBjb21wb25lbnROYW1lSW5Vc2UsXG4gICk6IEhvc3RDb21wb25lbnQ8UHJvcHM+KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29kZWdlbk5hdGl2ZUNvbXBvbmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5jb25zdCBjcmVhdGVSZWFjdE5hdGl2ZUNvbXBvbmVudENsYXNzID0gcmVxdWlyZSgnLi4vUmVuZGVyZXIvc2hpbXMvY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcycpO1xuY29uc3QgZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgbGlrZSBSZWFjdCBjb21wb25lbnRzIHdoaWNoIHJlcHJlc2VudCBuYXRpdmVcbiAqIHZpZXcgbWFuYWdlcnMuIFlvdSBzaG91bGQgY3JlYXRlIEphdmFTY3JpcHQgbW9kdWxlcyB0aGF0IHdyYXAgdGhlc2UgdmFsdWVzIHNvXG4gKiB0aGF0IHRoZSByZXN1bHRzIGFyZSBtZW1vaXplZC4gRXhhbXBsZTpcbiAqXG4gKiAgIGNvbnN0IFZpZXcgPSByZXF1aXJlTmF0aXZlQ29tcG9uZW50KCdSQ1RWaWV3Jyk7XG4gKlxuICovXG5cbmNvbnN0IHJlcXVpcmVOYXRpdmVDb21wb25lbnQgPSA8VD4odWlWaWV3Q2xhc3NOYW1lOiBzdHJpbmcpOiBIb3N0Q29tcG9uZW50PFQ+ID0+XG4gICgoY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcyh1aVZpZXdDbGFzc05hbWUsICgpID0+XG4gICAgZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcyh1aVZpZXdDbGFzc05hbWUpLFxuICApOiBhbnkpOiBIb3N0Q29tcG9uZW50PFQ+KTtcblxuZXhwb3J0IGRlZmF1bHQgcmVxdWlyZU5hdGl2ZUNvbXBvbmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbm9mb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQG5vbGludFxuICogQGdlbmVyYXRlZCBTaWduZWRTb3VyY2U8PGVkZTU0YWMyZmExYjlhMDllMjM0Y2RmMDk4MDQ4OTg5Pj5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7UmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnl9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3RQcml2YXRlL1JlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZSc7XG5pbXBvcnQge3R5cGUgVmlld0NvbmZpZ30gZnJvbSAnLi9SZWFjdE5hdGl2ZVR5cGVzJztcblxuY29uc3Qge3JlZ2lzdGVyfSA9IFJlYWN0TmF0aXZlVmlld0NvbmZpZ1JlZ2lzdHJ5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZW5kZXJhYmxlIFJlYWN0TmF0aXZlIGhvc3QgY29tcG9uZW50LlxuICogVXNlIHRoaXMgbWV0aG9kIGZvciB2aWV3IGNvbmZpZ3MgdGhhdCBhcmUgbG9hZGVkIGZyb20gVUlNYW5hZ2VyLlxuICogVXNlIGNyZWF0ZVJlYWN0TmF0aXZlQ29tcG9uZW50Q2xhc3MoKSBmb3IgdmlldyBjb25maWdzIGRlZmluZWQgd2l0aGluIEphdmFTY3JpcHQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZyBpT1MgVmlldyBjb25maWd1cmF0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcyA9IGZ1bmN0aW9uIChcbiAgbmFtZTogc3RyaW5nLFxuICBjYWxsYmFjazogKCkgPT4gVmlld0NvbmZpZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiByZWdpc3RlcihuYW1lLCBjYWxsYmFjayk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlYWN0TmF0aXZlQ29tcG9uZW50Q2xhc3M7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGVvZiBCYXRjaGVkQnJpZGdlIGZyb20gJy4uL0JhdGNoZWRCcmlkZ2UvQmF0Y2hlZEJyaWRnZSc7XG5pbXBvcnQgdHlwZW9mIGxlZ2FjeVNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQgZnJvbSAnLi4vQ29tcG9uZW50cy9BY2Nlc3NpYmlsaXR5SW5mby9sZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50JztcbmltcG9ydCB0eXBlb2YgVGV4dElucHV0U3RhdGUgZnJvbSAnLi4vQ29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0U3RhdGUnO1xuaW1wb3J0IHR5cGVvZiBFeGNlcHRpb25zTWFuYWdlciBmcm9tICcuLi9Db3JlL0V4Y2VwdGlvbnNNYW5hZ2VyJztcbmltcG9ydCB0eXBlb2YgUmF3RXZlbnRFbWl0dGVyIGZyb20gJy4uL0NvcmUvUmF3RXZlbnRFbWl0dGVyJztcbmltcG9ydCB0eXBlb2YgUmVhY3RGaWJlckVycm9yRGlhbG9nIGZyb20gJy4uL0NvcmUvUmVhY3RGaWJlckVycm9yRGlhbG9nJztcbmltcG9ydCB0eXBlb2YgUkNURXZlbnRFbWl0dGVyIGZyb20gJy4uL0V2ZW50RW1pdHRlci9SQ1RFdmVudEVtaXR0ZXInO1xuaW1wb3J0IHR5cGVvZiBDdXN0b21FdmVudCBmcm9tICcuLi9FdmVudHMvQ3VzdG9tRXZlbnQnO1xuaW1wb3J0IHR5cGVvZiB7XG4gIGNyZWF0ZVB1YmxpY0luc3RhbmNlLFxuICBjcmVhdGVQdWJsaWNUZXh0SW5zdGFuY2UsXG4gIGdldEludGVybmFsSW5zdGFuY2VIYW5kbGVGcm9tUHVibGljSW5zdGFuY2UsXG4gIGdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZSxcbiAgZ2V0Tm9kZUZyb21QdWJsaWNJbnN0YW5jZSxcbn0gZnJvbSAnLi4vUmVhY3ROYXRpdmUvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlJztcbmltcG9ydCB0eXBlb2Yge1xuICBjcmVhdGUgYXMgY3JlYXRlQXR0cmlidXRlUGF5bG9hZCxcbiAgZGlmZiBhcyBkaWZmQXR0cmlidXRlUGF5bG9hZHMsXG59IGZyb20gJy4uL1JlYWN0TmF0aXZlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2UvUmVhY3ROYXRpdmVBdHRyaWJ1dGVQYXlsb2FkJztcbmltcG9ydCB0eXBlb2YgVUlNYW5hZ2VyIGZyb20gJy4uL1JlYWN0TmF0aXZlL1VJTWFuYWdlcic7XG5pbXBvcnQgdHlwZW9mICogYXMgUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkgZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnknO1xuaW1wb3J0IHR5cGVvZiBmbGF0dGVuU3R5bGUgZnJvbSAnLi4vU3R5bGVTaGVldC9mbGF0dGVuU3R5bGUnO1xuaW1wb3J0IHR5cGUge0Rhbmdlcm91c2x5SW1wcmVjaXNlU3R5bGVQcm9wfSBmcm9tICcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGVvZiBkZWVwRnJlZXplQW5kVGhyb3dPbk11dGF0aW9uSW5EZXYgZnJvbSAnLi4vVXRpbGl0aWVzL2RlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldic7XG5pbXBvcnQgdHlwZW9mIGRlZXBEaWZmZXIgZnJvbSAnLi4vVXRpbGl0aWVzL2RpZmZlci9kZWVwRGlmZmVyJztcbmltcG9ydCB0eXBlb2YgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXQgQmF0Y2hlZEJyaWRnZSgpOiBCYXRjaGVkQnJpZGdlIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vQmF0Y2hlZEJyaWRnZS9CYXRjaGVkQnJpZGdlJyk7XG4gIH0sXG4gIGdldCBFeGNlcHRpb25zTWFuYWdlcigpOiBFeGNlcHRpb25zTWFuYWdlciB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4uL0NvcmUvRXhjZXB0aW9uc01hbmFnZXInKTtcbiAgfSxcbiAgZ2V0IFBsYXRmb3JtKCk6IFBsYXRmb3JtIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJyk7XG4gIH0sXG4gIGdldCBSQ1RFdmVudEVtaXR0ZXIoKTogUkNURXZlbnRFbWl0dGVyIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vRXZlbnRFbWl0dGVyL1JDVEV2ZW50RW1pdHRlcicpO1xuICB9LFxuICBnZXQgUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkoKTogUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVZpZXdDb25maWdSZWdpc3RyeScpO1xuICB9LFxuICBnZXQgVGV4dElucHV0U3RhdGUoKTogVGV4dElucHV0U3RhdGUge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9Db21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXRTdGF0ZScpO1xuICB9LFxuICBnZXQgVUlNYW5hZ2VyKCk6IFVJTWFuYWdlciB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4uL1JlYWN0TmF0aXZlL1VJTWFuYWdlcicpO1xuICB9LFxuICAvLyBUT0RPOiBSZW1vdmUgd2hlbiBSZWFjdCBoYXMgbWlncmF0ZWQgdG8gYGNyZWF0ZUF0dHJpYnV0ZVBheWxvYWRgIGFuZCBgZGlmZkF0dHJpYnV0ZVBheWxvYWRzYFxuICBnZXQgZGVlcERpZmZlcigpOiBkZWVwRGlmZmVyIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL2RpZmZlci9kZWVwRGlmZmVyJyk7XG4gIH0sXG4gIGdldCBkZWVwRnJlZXplQW5kVGhyb3dPbk11dGF0aW9uSW5EZXYoKTogZGVlcEZyZWV6ZUFuZFRocm93T25NdXRhdGlvbkluRGV2PFxuICAgIHsuLi59IHwgQXJyYXk8bWl4ZWQ+LFxuICA+IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL2RlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldicpO1xuICB9LFxuICAvLyBUT0RPOiBSZW1vdmUgd2hlbiBSZWFjdCBoYXMgbWlncmF0ZWQgdG8gYGNyZWF0ZUF0dHJpYnV0ZVBheWxvYWRgIGFuZCBgZGlmZkF0dHJpYnV0ZVBheWxvYWRzYFxuICBnZXQgZmxhdHRlblN0eWxlKCk6IGZsYXR0ZW5TdHlsZTxEYW5nZXJvdXNseUltcHJlY2lzZVN0eWxlUHJvcD4ge1xuICAgIC8vICRGbG93Rml4TWVbdW5kZXJjb25zdHJhaW5lZC1pbXBsaWNpdC1pbnN0YW50aWF0aW9uXVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vU3R5bGVTaGVldC9mbGF0dGVuU3R5bGUnKTtcbiAgfSxcbiAgZ2V0IFJlYWN0RmliZXJFcnJvckRpYWxvZygpOiBSZWFjdEZpYmVyRXJyb3JEaWFsb2cge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9Db3JlL1JlYWN0RmliZXJFcnJvckRpYWxvZycpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBsZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50KCk6IGxlZ2FjeVNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9Db21wb25lbnRzL0FjY2Vzc2liaWxpdHlJbmZvL2xlZ2FjeVNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQnKTtcbiAgfSxcbiAgZ2V0IFJhd0V2ZW50RW1pdHRlcigpOiBSYXdFdmVudEVtaXR0ZXIge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9Db3JlL1Jhd0V2ZW50RW1pdHRlcicpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBDdXN0b21FdmVudCgpOiBDdXN0b21FdmVudCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4uL0V2ZW50cy9DdXN0b21FdmVudCcpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBjcmVhdGVBdHRyaWJ1dGVQYXlsb2FkKCk6IGNyZWF0ZUF0dHJpYnV0ZVBheWxvYWQge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9SZWFjdE5hdGl2ZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlL1JlYWN0TmF0aXZlQXR0cmlidXRlUGF5bG9hZCcpXG4gICAgICAuY3JlYXRlO1xuICB9LFxuICBnZXQgZGlmZkF0dHJpYnV0ZVBheWxvYWRzKCk6IGRpZmZBdHRyaWJ1dGVQYXlsb2FkcyB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4uL1JlYWN0TmF0aXZlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2UvUmVhY3ROYXRpdmVBdHRyaWJ1dGVQYXlsb2FkJylcbiAgICAgIC5kaWZmO1xuICB9LFxuICBnZXQgY3JlYXRlUHVibGljSW5zdGFuY2UoKTogY3JlYXRlUHVibGljSW5zdGFuY2Uge1xuICAgIHJldHVybiByZXF1aXJlKCcuLi9SZWFjdE5hdGl2ZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2UnKVxuICAgICAgLmNyZWF0ZVB1YmxpY0luc3RhbmNlO1xuICB9LFxuICBnZXQgY3JlYXRlUHVibGljVGV4dEluc3RhbmNlKCk6IGNyZWF0ZVB1YmxpY1RleHRJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4uL1JlYWN0TmF0aXZlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2UvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZScpXG4gICAgICAuY3JlYXRlUHVibGljVGV4dEluc3RhbmNlO1xuICB9LFxuICBnZXQgZ2V0TmF0aXZlVGFnRnJvbVB1YmxpY0luc3RhbmNlKCk6IGdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4uL1JlYWN0TmF0aXZlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2UvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZScpXG4gICAgICAuZ2V0TmF0aXZlVGFnRnJvbVB1YmxpY0luc3RhbmNlO1xuICB9LFxuICBnZXQgZ2V0Tm9kZUZyb21QdWJsaWNJbnN0YW5jZSgpOiBnZXROb2RlRnJvbVB1YmxpY0luc3RhbmNlIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vUmVhY3ROYXRpdmUvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlJylcbiAgICAgIC5nZXROb2RlRnJvbVB1YmxpY0luc3RhbmNlO1xuICB9LFxuICBnZXQgZ2V0SW50ZXJuYWxJbnN0YW5jZUhhbmRsZUZyb21QdWJsaWNJbnN0YW5jZSgpOiBnZXRJbnRlcm5hbEluc3RhbmNlSGFuZGxlRnJvbVB1YmxpY0luc3RhbmNlIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi4vUmVhY3ROYXRpdmUvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlJylcbiAgICAgIC5nZXRJbnRlcm5hbEluc3RhbmNlSGFuZGxlRnJvbVB1YmxpY0luc3RhbmNlO1xuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgQmF0Y2hlZEJyaWRnZSA9IHJlcXVpcmUoJy4uL0JhdGNoZWRCcmlkZ2UvQmF0Y2hlZEJyaWRnZScpO1xuXG5jb25zdCBSQ1RFdmVudEVtaXR0ZXIgPSB7XG4gIHJlZ2lzdGVyKGV2ZW50RW1pdHRlcjogYW55KSB7XG4gICAgaWYgKGdsb2JhbC5STiRCcmlkZ2VsZXNzKSB7XG4gICAgICBnbG9iYWwuUk4kcmVnaXN0ZXJDYWxsYWJsZU1vZHVsZSgnUkNURXZlbnRFbWl0dGVyJywgKCkgPT4gZXZlbnRFbWl0dGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQmF0Y2hlZEJyaWRnZS5yZWdpc3RlckNhbGxhYmxlTW9kdWxlKCdSQ1RFdmVudEVtaXR0ZXInLCBldmVudEVtaXR0ZXIpO1xuICAgIH1cbiAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUkNURXZlbnRFbWl0dGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbi8vIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGNvb3JkaW5hdGluZyB0aGUgXCJmb2N1c2VkXCIgc3RhdGUgZm9yXG4vLyBUZXh0SW5wdXRzLiBBbGwgY2FsbHMgcmVsYXRpbmcgdG8gdGhlIGtleWJvYXJkIHNob3VsZCBiZSBmdW5uZWxlZFxuLy8gdGhyb3VnaCBoZXJlLlxuXG5pbXBvcnQgdHlwZSB7XG4gIEhvc3RDb21wb25lbnQsXG4gIE1lYXN1cmVJbldpbmRvd09uU3VjY2Vzc0NhbGxiYWNrLFxuICBNZWFzdXJlTGF5b3V0T25TdWNjZXNzQ2FsbGJhY2ssXG4gIE1lYXN1cmVPblN1Y2Nlc3NDYWxsYmFjayxcbn0gZnJvbSAnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5cbmltcG9ydCB7Q29tbWFuZHMgYXMgQW5kcm9pZFRleHRJbnB1dENvbW1hbmRzfSBmcm9tICcuLi8uLi9Db21wb25lbnRzL1RleHRJbnB1dC9BbmRyb2lkVGV4dElucHV0TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCB7Q29tbWFuZHMgYXMgaU9TVGV4dElucHV0Q29tbWFuZHN9IGZyb20gJy4uLy4uL0NvbXBvbmVudHMvVGV4dElucHV0L1JDVFNpbmdlbGluZVRleHRJbnB1dE5hdGl2ZUNvbXBvbmVudCc7XG5cbmNvbnN0IHtmaW5kTm9kZUhhbmRsZX0gPSByZXF1aXJlKCcuLi8uLi9SZWFjdE5hdGl2ZS9SZW5kZXJlclByb3h5Jyk7XG5jb25zdCBQbGF0Zm9ybSA9IHJlcXVpcmUoJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybScpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudHlwZSBDb21wb25lbnRSZWYgPSBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8bWl4ZWQ+PjtcblxubGV0IGN1cnJlbnRseUZvY3VzZWRJbnB1dFJlZjogP0NvbXBvbmVudFJlZiA9IG51bGw7XG5jb25zdCBpbnB1dHMgPSBuZXcgU2V0PHtcbiAgYmx1cigpOiB2b2lkLFxuICBmb2N1cygpOiB2b2lkLFxuICBtZWFzdXJlKGNhbGxiYWNrOiBNZWFzdXJlT25TdWNjZXNzQ2FsbGJhY2spOiB2b2lkLFxuICBtZWFzdXJlSW5XaW5kb3coY2FsbGJhY2s6IE1lYXN1cmVJbldpbmRvd09uU3VjY2Vzc0NhbGxiYWNrKTogdm9pZCxcbiAgbWVhc3VyZUxheW91dChcbiAgICByZWxhdGl2ZVRvTmF0aXZlTm9kZTogbnVtYmVyIHwgUmVhY3QuRWxlbWVudFJlZjxIb3N0Q29tcG9uZW50PG1peGVkPj4sXG4gICAgb25TdWNjZXNzOiBNZWFzdXJlTGF5b3V0T25TdWNjZXNzQ2FsbGJhY2ssXG4gICAgb25GYWlsPzogKCkgPT4gdm9pZCxcbiAgKTogdm9pZCxcbiAgc2V0TmF0aXZlUHJvcHMobmF0aXZlUHJvcHM6IHsuLi59KTogdm9pZCxcbn0+KCk7XG5cbmZ1bmN0aW9uIGN1cnJlbnRseUZvY3VzZWRJbnB1dCgpOiA/Q29tcG9uZW50UmVmIHtcbiAgcmV0dXJuIGN1cnJlbnRseUZvY3VzZWRJbnB1dFJlZjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgY3VycmVudGx5IGZvY3VzZWQgdGV4dCBmaWVsZCwgaWYgb25lIGV4aXN0c1xuICogSWYgbm8gdGV4dCBmaWVsZCBpcyBmb2N1c2VkIGl0IHJldHVybnMgbnVsbFxuICovXG5mdW5jdGlvbiBjdXJyZW50bHlGb2N1c2VkRmllbGQoKTogP251bWJlciB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICdjdXJyZW50bHlGb2N1c2VkRmllbGQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIFVzZSBjdXJyZW50bHlGb2N1c2VkSW5wdXQnLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZmluZE5vZGVIYW5kbGUoY3VycmVudGx5Rm9jdXNlZElucHV0UmVmKTtcbn1cblxuZnVuY3Rpb24gZm9jdXNJbnB1dCh0ZXh0RmllbGQ6ID9Db21wb25lbnRSZWYpOiB2b2lkIHtcbiAgaWYgKGN1cnJlbnRseUZvY3VzZWRJbnB1dFJlZiAhPT0gdGV4dEZpZWxkICYmIHRleHRGaWVsZCAhPSBudWxsKSB7XG4gICAgY3VycmVudGx5Rm9jdXNlZElucHV0UmVmID0gdGV4dEZpZWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJsdXJJbnB1dCh0ZXh0RmllbGQ6ID9Db21wb25lbnRSZWYpOiB2b2lkIHtcbiAgaWYgKGN1cnJlbnRseUZvY3VzZWRJbnB1dFJlZiA9PT0gdGV4dEZpZWxkICYmIHRleHRGaWVsZCAhPSBudWxsKSB7XG4gICAgY3VycmVudGx5Rm9jdXNlZElucHV0UmVmID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb2N1c0ZpZWxkKHRleHRGaWVsZElEOiA/bnVtYmVyKTogdm9pZCB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgY29uc29sZS5lcnJvcignZm9jdXNGaWVsZCBubyBsb25nZXIgd29ya3MuIFVzZSBmb2N1c0lucHV0Jyk7XG4gIH1cblxuICByZXR1cm47XG59XG5cbmZ1bmN0aW9uIGJsdXJGaWVsZCh0ZXh0RmllbGRJRDogP251bWJlcikge1xuICBpZiAoX19ERVZfXykge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2JsdXJGaWVsZCBubyBsb25nZXIgd29ya3MuIFVzZSBibHVySW5wdXQnKTtcbiAgfVxuXG4gIHJldHVybjtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gVGV4dElucHV0SUQgaWQgb2YgdGhlIHRleHQgZmllbGQgdG8gZm9jdXNcbiAqIEZvY3VzZXMgdGhlIHNwZWNpZmllZCB0ZXh0IGZpZWxkXG4gKiBub29wIGlmIHRoZSB0ZXh0IGZpZWxkIHdhcyBhbHJlYWR5IGZvY3VzZWQgb3IgaWYgdGhlIGZpZWxkIGlzIG5vdCBlZGl0YWJsZVxuICovXG5mdW5jdGlvbiBmb2N1c1RleHRJbnB1dCh0ZXh0RmllbGQ6ID9Db21wb25lbnRSZWYpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0RmllbGQgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdmb2N1c1RleHRJbnB1dCBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgaG9zdCBjb21wb25lbnQuIFBhc3NpbmcgYSByZWFjdCB0YWcgaXMgZGVwcmVjYXRlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGV4dEZpZWxkICE9IG51bGwpIHtcbiAgICBjb25zdCBmaWVsZENhbkJlRm9jdXNlZCA9XG4gICAgICBjdXJyZW50bHlGb2N1c2VkSW5wdXRSZWYgIT09IHRleHRGaWVsZCAmJlxuICAgICAgLy8gJEZsb3dGaXhNZSAtIGBjdXJyZW50UHJvcHNgIGlzIG1pc3NpbmcgaW4gYE5hdGl2ZU1ldGhvZHNgXG4gICAgICB0ZXh0RmllbGQuY3VycmVudFByb3BzPy5lZGl0YWJsZSAhPT0gZmFsc2U7XG5cbiAgICBpZiAoIWZpZWxkQ2FuQmVGb2N1c2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvY3VzSW5wdXQodGV4dEZpZWxkKTtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgICAvLyBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGEgc2luZ2xlIGxpbmUgdGV4dCBpbnB1dFxuICAgICAgLy8gQnV0IGNvbW1hbmRzIGRvbid0IGFjdHVhbGx5IGNhcmUgYXMgbG9uZyBhcyB0aGUgdGhpbmcgYmVpbmcgcGFzc2VkIGluXG4gICAgICAvLyBhY3R1YWxseSBoYXMgYSBjb21tYW5kIHdpdGggdGhhdCBuYW1lLiBTbyB0aGlzIHNob3VsZCB3b3JrIHdpdGggc2luZ2xlXG4gICAgICAvLyBhbmQgbXVsdGlsaW5lIHRleHQgaW5wdXRzLiBJZGVhbGx5IHdlJ2xsIG1lcmdlIHRoZW0gaW50byBvbmUgY29tcG9uZW50XG4gICAgICAvLyBpbiB0aGUgZnV0dXJlLlxuICAgICAgaU9TVGV4dElucHV0Q29tbWFuZHMuZm9jdXModGV4dEZpZWxkKTtcbiAgICB9IGVsc2UgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIEFuZHJvaWRUZXh0SW5wdXRDb21tYW5kcy5mb2N1cyh0ZXh0RmllbGQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0ZXh0RmllbGRJRCBpZCBvZiB0aGUgdGV4dCBmaWVsZCB0byB1bmZvY3VzXG4gKiBVbmZvY3VzZXMgdGhlIHNwZWNpZmllZCB0ZXh0IGZpZWxkXG4gKiBub29wIGlmIGl0IHdhc24ndCBmb2N1c2VkXG4gKi9cbmZ1bmN0aW9uIGJsdXJUZXh0SW5wdXQodGV4dEZpZWxkOiA/Q29tcG9uZW50UmVmKSB7XG4gIGlmICh0eXBlb2YgdGV4dEZpZWxkID09PSAnbnVtYmVyJykge1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnYmx1clRleHRJbnB1dCBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgaG9zdCBjb21wb25lbnQuIFBhc3NpbmcgYSByZWFjdCB0YWcgaXMgZGVwcmVjYXRlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY3VycmVudGx5Rm9jdXNlZElucHV0UmVmID09PSB0ZXh0RmllbGQgJiYgdGV4dEZpZWxkICE9IG51bGwpIHtcbiAgICBibHVySW5wdXQodGV4dEZpZWxkKTtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgICAvLyBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGEgc2luZ2xlIGxpbmUgdGV4dCBpbnB1dFxuICAgICAgLy8gQnV0IGNvbW1hbmRzIGRvbid0IGFjdHVhbGx5IGNhcmUgYXMgbG9uZyBhcyB0aGUgdGhpbmcgYmVpbmcgcGFzc2VkIGluXG4gICAgICAvLyBhY3R1YWxseSBoYXMgYSBjb21tYW5kIHdpdGggdGhhdCBuYW1lLiBTbyB0aGlzIHNob3VsZCB3b3JrIHdpdGggc2luZ2xlXG4gICAgICAvLyBhbmQgbXVsdGlsaW5lIHRleHQgaW5wdXRzLiBJZGVhbGx5IHdlJ2xsIG1lcmdlIHRoZW0gaW50byBvbmUgY29tcG9uZW50XG4gICAgICAvLyBpbiB0aGUgZnV0dXJlLlxuICAgICAgaU9TVGV4dElucHV0Q29tbWFuZHMuYmx1cih0ZXh0RmllbGQpO1xuICAgIH0gZWxzZSBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgQW5kcm9pZFRleHRJbnB1dENvbW1hbmRzLmJsdXIodGV4dEZpZWxkKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJJbnB1dCh0ZXh0RmllbGQ6IENvbXBvbmVudFJlZikge1xuICBpZiAodHlwZW9mIHRleHRGaWVsZCA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3JlZ2lzdGVySW5wdXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGhvc3QgY29tcG9uZW50LiBQYXNzaW5nIGEgcmVhY3QgdGFnIGlzIGRlcHJlY2F0ZWQuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW5wdXRzLmFkZCh0ZXh0RmllbGQpO1xufVxuXG5mdW5jdGlvbiB1bnJlZ2lzdGVySW5wdXQodGV4dEZpZWxkOiBDb21wb25lbnRSZWYpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0RmllbGQgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICd1bnJlZ2lzdGVySW5wdXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGhvc3QgY29tcG9uZW50LiBQYXNzaW5nIGEgcmVhY3QgdGFnIGlzIGRlcHJlY2F0ZWQuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG4gIGlucHV0cy5kZWxldGUodGV4dEZpZWxkKTtcbn1cblxuZnVuY3Rpb24gaXNUZXh0SW5wdXQodGV4dEZpZWxkOiBDb21wb25lbnRSZWYpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiB0ZXh0RmllbGQgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdpc1RleHRJbnB1dCBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgaG9zdCBjb21wb25lbnQuIFBhc3NpbmcgYSByZWFjdCB0YWcgaXMgZGVwcmVjYXRlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaW5wdXRzLmhhcyh0ZXh0RmllbGQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3VycmVudGx5Rm9jdXNlZElucHV0LFxuICBmb2N1c0lucHV0LFxuICBibHVySW5wdXQsXG5cbiAgY3VycmVudGx5Rm9jdXNlZEZpZWxkLFxuICBmb2N1c0ZpZWxkLFxuICBibHVyRmllbGQsXG4gIGZvY3VzVGV4dElucHV0LFxuICBibHVyVGV4dElucHV0LFxuICByZWdpc3RlcklucHV0LFxuICB1bnJlZ2lzdGVySW5wdXQsXG4gIGlzVGV4dElucHV0LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEhvc3RDb21wb25lbnQsXG4gIFBhcnRpYWxWaWV3Q29uZmlnLFxufSBmcm9tICcuLi8uLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtUZXh0SW5wdXROYXRpdmVDb21tYW5kc30gZnJvbSAnLi9UZXh0SW5wdXROYXRpdmVDb21tYW5kcyc7XG5cbmltcG9ydCAqIGFzIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5IGZyb20gJy4uLy4uL05hdGl2ZUNvbXBvbmVudC9OYXRpdmVDb21wb25lbnRSZWdpc3RyeSc7XG5pbXBvcnQgY29kZWdlbk5hdGl2ZUNvbW1hbmRzIGZyb20gJy4uLy4uL1V0aWxpdGllcy9jb2RlZ2VuTmF0aXZlQ29tbWFuZHMnO1xuaW1wb3J0IFJDVFRleHRJbnB1dFZpZXdDb25maWcgZnJvbSAnLi9SQ1RUZXh0SW5wdXRWaWV3Q29uZmlnJztcblxudHlwZSBOYXRpdmVUeXBlID0gSG9zdENvbXBvbmVudDxtaXhlZD47XG5cbnR5cGUgTmF0aXZlQ29tbWFuZHMgPSBUZXh0SW5wdXROYXRpdmVDb21tYW5kczxOYXRpdmVUeXBlPjtcblxuZXhwb3J0IGNvbnN0IENvbW1hbmRzOiBOYXRpdmVDb21tYW5kcyA9IGNvZGVnZW5OYXRpdmVDb21tYW5kczxOYXRpdmVDb21tYW5kcz4oe1xuICBzdXBwb3J0ZWRDb21tYW5kczogWydmb2N1cycsICdibHVyJywgJ3NldFRleHRBbmRTZWxlY3Rpb24nXSxcbn0pO1xuXG5leHBvcnQgY29uc3QgX19JTlRFUk5BTF9WSUVXX0NPTkZJRzogUGFydGlhbFZpZXdDb25maWcgPSB7XG4gIHVpVmlld0NsYXNzTmFtZTogJ1JDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3JyxcbiAgLi4uUkNUVGV4dElucHV0Vmlld0NvbmZpZyxcbn07XG5cbmNvbnN0IFNpbmdsZWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQ6IEhvc3RDb21wb25lbnQ8bWl4ZWQ+ID1cbiAgTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkuZ2V0PG1peGVkPihcbiAgICAnUkNUU2luZ2xlbGluZVRleHRJbnB1dFZpZXcnLFxuICAgICgpID0+IF9fSU5URVJOQUxfVklFV19DT05GSUcsXG4gICk7XG5cbi8vIGZsb3dsaW50LW5leHQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG5leHBvcnQgZGVmYXVsdCAoKFNpbmdsZWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQ6IGFueSk6IEhvc3RDb21wb25lbnQ8bWl4ZWQ+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGFydGlhbFZpZXdDb25maWd9IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5pbXBvcnQge0NvbmRpdGlvbmFsbHlJZ25vcmVkRXZlbnRIYW5kbGVyc30gZnJvbSAnLi4vLi4vTmF0aXZlQ29tcG9uZW50L1ZpZXdDb25maWdJZ25vcmUnO1xuXG50eXBlIFBhcnRpYWxWaWV3Q29uZmlnV2l0aG91dE5hbWUgPSAkUmVzdDxcbiAgUGFydGlhbFZpZXdDb25maWcsXG4gIHt1aVZpZXdDbGFzc05hbWU6IHN0cmluZ30sXG4+O1xuXG5jb25zdCBSQ1RUZXh0SW5wdXRWaWV3Q29uZmlnID0ge1xuICBidWJibGluZ0V2ZW50VHlwZXM6IHtcbiAgICB0b3BCbHVyOiB7XG4gICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICBidWJibGVkOiAnb25CbHVyJyxcbiAgICAgICAgY2FwdHVyZWQ6ICdvbkJsdXJDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b3BDaGFuZ2U6IHtcbiAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICAgIGJ1YmJsZWQ6ICdvbkNoYW5nZScsXG4gICAgICAgIGNhcHR1cmVkOiAnb25DaGFuZ2VDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b3BFbmRFZGl0aW5nOiB7XG4gICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICBidWJibGVkOiAnb25FbmRFZGl0aW5nJyxcbiAgICAgICAgY2FwdHVyZWQ6ICdvbkVuZEVkaXRpbmdDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b3BGb2N1czoge1xuICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgYnViYmxlZDogJ29uRm9jdXMnLFxuICAgICAgICBjYXB0dXJlZDogJ29uRm9jdXNDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b3BLZXlQcmVzczoge1xuICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgYnViYmxlZDogJ29uS2V5UHJlc3MnLFxuICAgICAgICBjYXB0dXJlZDogJ29uS2V5UHJlc3NDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b3BTdWJtaXRFZGl0aW5nOiB7XG4gICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICBidWJibGVkOiAnb25TdWJtaXRFZGl0aW5nJyxcbiAgICAgICAgY2FwdHVyZWQ6ICdvblN1Ym1pdEVkaXRpbmdDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b3BUb3VjaENhbmNlbDoge1xuICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgYnViYmxlZDogJ29uVG91Y2hDYW5jZWwnLFxuICAgICAgICBjYXB0dXJlZDogJ29uVG91Y2hDYW5jZWxDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b3BUb3VjaEVuZDoge1xuICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgYnViYmxlZDogJ29uVG91Y2hFbmQnLFxuICAgICAgICBjYXB0dXJlZDogJ29uVG91Y2hFbmRDYXB0dXJlJyxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHRvcFRvdWNoTW92ZToge1xuICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgYnViYmxlZDogJ29uVG91Y2hNb3ZlJyxcbiAgICAgICAgY2FwdHVyZWQ6ICdvblRvdWNoTW92ZUNhcHR1cmUnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBkaXJlY3RFdmVudFR5cGVzOiB7XG4gICAgdG9wVGV4dElucHV0OiB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25UZXh0SW5wdXQnLFxuICAgIH0sXG4gICAgdG9wS2V5UHJlc3NTeW5jOiB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25LZXlQcmVzc1N5bmMnLFxuICAgIH0sXG4gICAgdG9wU2Nyb2xsOiB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25TY3JvbGwnLFxuICAgIH0sXG4gICAgdG9wU2VsZWN0aW9uQ2hhbmdlOiB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25TZWxlY3Rpb25DaGFuZ2UnLFxuICAgIH0sXG4gICAgdG9wQ2hhbmdlU3luYzoge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uQ2hhbmdlU3luYycsXG4gICAgfSxcbiAgICB0b3BDb250ZW50U2l6ZUNoYW5nZToge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uQ29udGVudFNpemVDaGFuZ2UnLFxuICAgIH0sXG4gIH0sXG4gIHZhbGlkQXR0cmlidXRlczoge1xuICAgIGZvbnRTaXplOiB0cnVlLFxuICAgIGZvbnRXZWlnaHQ6IHRydWUsXG4gICAgZm9udFZhcmlhbnQ6IHRydWUsXG4gICAgLy8gZmxvd2xpbnQtbmV4dC1saW5lIHVudHlwZWQtaW1wb3J0Om9mZlxuICAgIHRleHRTaGFkb3dPZmZzZXQ6IHtkaWZmOiByZXF1aXJlKCcuLi8uLi9VdGlsaXRpZXMvZGlmZmVyL3NpemVzRGlmZmVyJyl9LFxuICAgIGFsbG93Rm9udFNjYWxpbmc6IHRydWUsXG4gICAgZm9udFN0eWxlOiB0cnVlLFxuICAgIHRleHRUcmFuc2Zvcm06IHRydWUsXG4gICAgdGV4dEFsaWduOiB0cnVlLFxuICAgIGZvbnRGYW1pbHk6IHRydWUsXG4gICAgbGluZUhlaWdodDogdHJ1ZSxcbiAgICBpc0hpZ2hsaWdodGVkOiB0cnVlLFxuICAgIHdyaXRpbmdEaXJlY3Rpb246IHRydWUsXG4gICAgdGV4dERlY29yYXRpb25MaW5lOiB0cnVlLFxuICAgIHRleHRTaGFkb3dSYWRpdXM6IHRydWUsXG4gICAgbGV0dGVyU3BhY2luZzogdHJ1ZSxcbiAgICB0ZXh0RGVjb3JhdGlvblN0eWxlOiB0cnVlLFxuICAgIHRleHREZWNvcmF0aW9uQ29sb3I6IHtcbiAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICB9LFxuICAgIGNvbG9yOiB7cHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0fSxcbiAgICBtYXhGb250U2l6ZU11bHRpcGxpZXI6IHRydWUsXG4gICAgdGV4dFNoYWRvd0NvbG9yOiB7XG4gICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgfSxcbiAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICBpbnB1dEFjY2Vzc29yeVZpZXdJRDogdHJ1ZSxcbiAgICBjYXJldEhpZGRlbjogdHJ1ZSxcbiAgICBlbmFibGVzUmV0dXJuS2V5QXV0b21hdGljYWxseTogdHJ1ZSxcbiAgICBwbGFjZWhvbGRlclRleHRDb2xvcjoge1xuICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgIH0sXG4gICAgY2xlYXJCdXR0b25Nb2RlOiB0cnVlLFxuICAgIGtleWJvYXJkVHlwZTogdHJ1ZSxcbiAgICBzZWxlY3Rpb246IHRydWUsXG4gICAgcmV0dXJuS2V5VHlwZTogdHJ1ZSxcbiAgICBzdWJtaXRCZWhhdmlvcjogdHJ1ZSxcbiAgICBtb3N0UmVjZW50RXZlbnRDb3VudDogdHJ1ZSxcbiAgICBzY3JvbGxFbmFibGVkOiB0cnVlLFxuICAgIHNlbGVjdGlvbkNvbG9yOiB7cHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0fSxcbiAgICBjb250ZXh0TWVudUhpZGRlbjogdHJ1ZSxcbiAgICBzZWN1cmVUZXh0RW50cnk6IHRydWUsXG4gICAgcGxhY2Vob2xkZXI6IHRydWUsXG4gICAgYXV0b0NvcnJlY3Q6IHRydWUsXG4gICAgbXVsdGlsaW5lOiB0cnVlLFxuICAgIHRleHRDb250ZW50VHlwZTogdHJ1ZSxcbiAgICBtYXhMZW5ndGg6IHRydWUsXG4gICAgYXV0b0NhcGl0YWxpemU6IHRydWUsXG4gICAga2V5Ym9hcmRBcHBlYXJhbmNlOiB0cnVlLFxuICAgIHBhc3N3b3JkUnVsZXM6IHRydWUsXG4gICAgc3BlbGxDaGVjazogdHJ1ZSxcbiAgICBzZWxlY3RUZXh0T25Gb2N1czogdHJ1ZSxcbiAgICB0ZXh0OiB0cnVlLFxuICAgIGNsZWFyVGV4dE9uRm9jdXM6IHRydWUsXG4gICAgc2hvd1NvZnRJbnB1dE9uRm9jdXM6IHRydWUsXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgIGxpbmVCcmVha1N0cmF0ZWd5SU9TOiB0cnVlLFxuICAgIHNtYXJ0SW5zZXJ0RGVsZXRlOiB0cnVlLFxuICAgIC4uLkNvbmRpdGlvbmFsbHlJZ25vcmVkRXZlbnRIYW5kbGVycyh7XG4gICAgICBvbkNoYW5nZTogdHJ1ZSxcbiAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgb25Db250ZW50U2l6ZUNoYW5nZTogdHJ1ZSxcbiAgICAgIG9uU2Nyb2xsOiB0cnVlLFxuICAgICAgb25DaGFuZ2VTeW5jOiB0cnVlLFxuICAgICAgb25LZXlQcmVzc1N5bmM6IHRydWUsXG4gICAgICBvblRleHRJbnB1dDogdHJ1ZSxcbiAgICB9KSxcbiAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gKFJDVFRleHRJbnB1dFZpZXdDb25maWc6IFBhcnRpYWxWaWV3Q29uZmlnV2l0aG91dE5hbWUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgSG9zdENvbXBvbmVudCxcbiAgUGFydGlhbFZpZXdDb25maWcsXG59IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBDb2xvclZhbHVlLFxuICBUZXh0U3R5bGVQcm9wLFxuICBWaWV3U3R5bGVQcm9wLFxufSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge1xuICBCdWJibGluZ0V2ZW50SGFuZGxlcixcbiAgRGlyZWN0RXZlbnRIYW5kbGVyLFxuICBEb3VibGUsXG4gIEZsb2F0LFxuICBJbnQzMixcbiAgV2l0aERlZmF1bHQsXG59IGZyb20gJy4uLy4uL1R5cGVzL0NvZGVnZW5UeXBlcyc7XG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge1RleHRJbnB1dE5hdGl2ZUNvbW1hbmRzfSBmcm9tICcuL1RleHRJbnB1dE5hdGl2ZUNvbW1hbmRzJztcblxuaW1wb3J0ICogYXMgTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkgZnJvbSAnLi4vLi4vTmF0aXZlQ29tcG9uZW50L05hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5JztcbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tbWFuZHMgZnJvbSAnLi4vLi4vVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21tYW5kcyc7XG5cbmV4cG9ydCB0eXBlIEtleWJvYXJkVHlwZSA9XG4gIC8vIENyb3NzIFBsYXRmb3JtXG4gIHwgJ2RlZmF1bHQnXG4gIHwgJ2VtYWlsLWFkZHJlc3MnXG4gIHwgJ251bWVyaWMnXG4gIHwgJ3Bob25lLXBhZCdcbiAgfCAnbnVtYmVyLXBhZCdcbiAgfCAnZGVjaW1hbC1wYWQnXG4gIHwgJ3VybCdcbiAgLy8gaU9TLW9ubHlcbiAgfCAnYXNjaWktY2FwYWJsZSdcbiAgfCAnbnVtYmVycy1hbmQtcHVuY3R1YXRpb24nXG4gIHwgJ25hbWUtcGhvbmUtcGFkJ1xuICB8ICd0d2l0dGVyJ1xuICB8ICd3ZWItc2VhcmNoJ1xuICAvLyBBbmRyb2lkLW9ubHlcbiAgfCAndmlzaWJsZS1wYXNzd29yZCc7XG5cbmV4cG9ydCB0eXBlIFJldHVybktleVR5cGUgPVxuICAvLyBDcm9zcyBQbGF0Zm9ybVxuICB8ICdkb25lJ1xuICB8ICdnbydcbiAgfCAnbmV4dCdcbiAgfCAnc2VhcmNoJ1xuICB8ICdzZW5kJ1xuICAvLyBBbmRyb2lkLW9ubHlcbiAgfCAnbm9uZSdcbiAgfCAncHJldmlvdXMnXG4gIC8vIGlPUy1vbmx5XG4gIHwgJ2RlZmF1bHQnXG4gIHwgJ2VtZXJnZW5jeS1jYWxsJ1xuICB8ICdnb29nbGUnXG4gIHwgJ2pvaW4nXG4gIHwgJ3JvdXRlJ1xuICB8ICd5YWhvbyc7XG5cbmV4cG9ydCB0eXBlIFN1Ym1pdEJlaGF2aW9yID0gJ3N1Ym1pdCcgfCAnYmx1ckFuZFN1Ym1pdCcgfCAnbmV3bGluZSc7XG5cbmV4cG9ydCB0eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGluaGVyaXQgZXZlcnl0aGluZyBmcm9tIFZpZXdQcm9wcyBleGNlcHQgZm9yIHN0eWxlIChzZWUgYmVsb3cpXG4gIC8vIFRoaXMgbXVzdCBiZSBjb21tZW50ZWQgZm9yIEZhYnJpYyBjb2RlZ2VuIHRvIHdvcmsuXG4gIC4uLiREaWZmPFZpZXdQcm9wcywgJFJlYWRPbmx5PHt8c3R5bGU6ID9WaWV3U3R5bGVQcm9wfH0+PixcblxuICAvKipcbiAgICogQW5kcm9pZCBwcm9wcyBhZnRlciB0aGlzXG4gICAqL1xuICAvKipcbiAgICogU3BlY2lmaWVzIGF1dG9jb21wbGV0ZSBoaW50cyBmb3IgdGhlIHN5c3RlbSwgc28gaXQgY2FuIHByb3ZpZGUgYXV0b2ZpbGwuIE9uIEFuZHJvaWQsIHRoZSBzeXN0ZW0gd2lsbCBhbHdheXMgYXR0ZW1wdCB0byBvZmZlciBhdXRvZmlsbCBieSB1c2luZyBoZXVyaXN0aWNzIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQuXG4gICAqIFRvIGRpc2FibGUgYXV0b2NvbXBsZXRlLCBzZXQgYGF1dG9Db21wbGV0ZWAgdG8gYG9mZmAuXG4gICAqXG4gICAqICpBbmRyb2lkIE9ubHkqXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBmb3IgYGF1dG9Db21wbGV0ZWAgYXJlOlxuICAgKlxuICAgKiAtIGBiaXJ0aGRhdGUtZGF5YFxuICAgKiAtIGBiaXJ0aGRhdGUtZnVsbGBcbiAgICogLSBgYmlydGhkYXRlLW1vbnRoYFxuICAgKiAtIGBiaXJ0aGRhdGUteWVhcmBcbiAgICogLSBgY2MtY3NjYFxuICAgKiAtIGBjYy1leHBgXG4gICAqIC0gYGNjLWV4cC1kYXlgXG4gICAqIC0gYGNjLWV4cC1tb250aGBcbiAgICogLSBgY2MtZXhwLXllYXJgXG4gICAqIC0gYGNjLW51bWJlcmBcbiAgICogLSBgZW1haWxgXG4gICAqIC0gYGdlbmRlcmBcbiAgICogLSBgbmFtZWBcbiAgICogLSBgbmFtZS1mYW1pbHlgXG4gICAqIC0gYG5hbWUtZ2l2ZW5gXG4gICAqIC0gYG5hbWUtbWlkZGxlYFxuICAgKiAtIGBuYW1lLW1pZGRsZS1pbml0aWFsYFxuICAgKiAtIGBuYW1lLXByZWZpeGBcbiAgICogLSBgbmFtZS1zdWZmaXhgXG4gICAqIC0gYHBhc3N3b3JkYFxuICAgKiAtIGBwYXNzd29yZC1uZXdgXG4gICAqIC0gYHBvc3RhbC1hZGRyZXNzYFxuICAgKiAtIGBwb3N0YWwtYWRkcmVzcy1jb3VudHJ5YFxuICAgKiAtIGBwb3N0YWwtYWRkcmVzcy1leHRlbmRlZGBcbiAgICogLSBgcG9zdGFsLWFkZHJlc3MtZXh0ZW5kZWQtcG9zdGFsLWNvZGVgXG4gICAqIC0gYHBvc3RhbC1hZGRyZXNzLWxvY2FsaXR5YFxuICAgKiAtIGBwb3N0YWwtYWRkcmVzcy1yZWdpb25gXG4gICAqIC0gYHBvc3RhbC1jb2RlYFxuICAgKiAtIGBzdHJlZXQtYWRkcmVzc2BcbiAgICogLSBgc21zLW90cGBcbiAgICogLSBgdGVsYFxuICAgKiAtIGB0ZWwtY291bnRyeS1jb2RlYFxuICAgKiAtIGB0ZWwtbmF0aW9uYWxgXG4gICAqIC0gYHRlbC1kZXZpY2VgXG4gICAqIC0gYHVzZXJuYW1lYFxuICAgKiAtIGB1c2VybmFtZS1uZXdgXG4gICAqIC0gYG9mZmBcbiAgICpcbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIGF1dG9Db21wbGV0ZT86IFdpdGhEZWZhdWx0PFxuICAgIHwgJ2JpcnRoZGF0ZS1kYXknXG4gICAgfCAnYmlydGhkYXRlLWZ1bGwnXG4gICAgfCAnYmlydGhkYXRlLW1vbnRoJ1xuICAgIHwgJ2JpcnRoZGF0ZS15ZWFyJ1xuICAgIHwgJ2NjLWNzYydcbiAgICB8ICdjYy1leHAnXG4gICAgfCAnY2MtZXhwLWRheSdcbiAgICB8ICdjYy1leHAtbW9udGgnXG4gICAgfCAnY2MtZXhwLXllYXInXG4gICAgfCAnY2MtbnVtYmVyJ1xuICAgIHwgJ2VtYWlsJ1xuICAgIHwgJ2dlbmRlcidcbiAgICB8ICduYW1lJ1xuICAgIHwgJ25hbWUtZmFtaWx5J1xuICAgIHwgJ25hbWUtZ2l2ZW4nXG4gICAgfCAnbmFtZS1taWRkbGUnXG4gICAgfCAnbmFtZS1taWRkbGUtaW5pdGlhbCdcbiAgICB8ICduYW1lLXByZWZpeCdcbiAgICB8ICduYW1lLXN1ZmZpeCdcbiAgICB8ICdwYXNzd29yZCdcbiAgICB8ICdwYXNzd29yZC1uZXcnXG4gICAgfCAncG9zdGFsLWFkZHJlc3MnXG4gICAgfCAncG9zdGFsLWFkZHJlc3MtY291bnRyeSdcbiAgICB8ICdwb3N0YWwtYWRkcmVzcy1leHRlbmRlZCdcbiAgICB8ICdwb3N0YWwtYWRkcmVzcy1leHRlbmRlZC1wb3N0YWwtY29kZSdcbiAgICB8ICdwb3N0YWwtYWRkcmVzcy1sb2NhbGl0eSdcbiAgICB8ICdwb3N0YWwtYWRkcmVzcy1yZWdpb24nXG4gICAgfCAncG9zdGFsLWNvZGUnXG4gICAgfCAnc3RyZWV0LWFkZHJlc3MnXG4gICAgfCAnc21zLW90cCdcbiAgICB8ICd0ZWwnXG4gICAgfCAndGVsLWNvdW50cnktY29kZSdcbiAgICB8ICd0ZWwtbmF0aW9uYWwnXG4gICAgfCAndGVsLWRldmljZSdcbiAgICB8ICd1c2VybmFtZSdcbiAgICB8ICd1c2VybmFtZS1uZXcnXG4gICAgfCAnb2ZmJyxcbiAgICAnb2ZmJyxcbiAgPixcblxuICAvKipcbiAgICogU2V0cyB0aGUgcmV0dXJuIGtleSB0byB0aGUgbGFiZWwuIFVzZSBpdCBpbnN0ZWFkIG9mIGByZXR1cm5LZXlUeXBlYC5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIHJldHVybktleUxhYmVsPzogP3N0cmluZyxcblxuICAvKipcbiAgICogU2V0cyB0aGUgbnVtYmVyIG9mIGxpbmVzIGZvciBhIGBUZXh0SW5wdXRgLiBVc2UgaXQgd2l0aCBtdWx0aWxpbmUgc2V0IHRvXG4gICAqIGB0cnVlYCB0byBiZSBhYmxlIHRvIGZpbGwgdGhlIGxpbmVzLlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgbnVtYmVyT2ZMaW5lcz86ID9JbnQzMixcblxuICAvKipcbiAgICogV2hlbiBgZmFsc2VgLCBpZiB0aGVyZSBpcyBhIHNtYWxsIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgYXJvdW5kIGEgdGV4dCBpbnB1dFxuICAgKiAoZS5nLiBsYW5kc2NhcGUgb3JpZW50YXRpb24gb24gYSBwaG9uZSksIHRoZSBPUyBtYXkgY2hvb3NlIHRvIGhhdmUgdGhlIHVzZXIgZWRpdFxuICAgKiB0aGUgdGV4dCBpbnNpZGUgb2YgYSBmdWxsIHNjcmVlbiB0ZXh0IGlucHV0IG1vZGUuIFdoZW4gYHRydWVgLCB0aGlzIGZlYXR1cmUgaXNcbiAgICogZGlzYWJsZWQgYW5kIHVzZXJzIHdpbGwgYWx3YXlzIGVkaXQgdGhlIHRleHQgZGlyZWN0bHkgaW5zaWRlIG9mIHRoZSB0ZXh0IGlucHV0LlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgZGlzYWJsZUZ1bGxzY3JlZW5VST86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBTZXQgdGV4dCBicmVhayBzdHJhdGVneSBvbiBBbmRyb2lkIEFQSSBMZXZlbCAyMyssIHBvc3NpYmxlIHZhbHVlcyBhcmUgYHNpbXBsZWAsIGBoaWdoUXVhbGl0eWAsIGBiYWxhbmNlZGBcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHNpbXBsZWAuXG4gICAqIEBwbGF0Zm9ybSBhbmRyb2lkXG4gICAqL1xuICB0ZXh0QnJlYWtTdHJhdGVneT86IFdpdGhEZWZhdWx0PFxuICAgICdzaW1wbGUnIHwgJ2hpZ2hRdWFsaXR5JyB8ICdiYWxhbmNlZCcsXG4gICAgJ3NpbXBsZScsXG4gID4sXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgYFRleHRJbnB1dGAgdW5kZXJsaW5lLlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgdW5kZXJsaW5lQ29sb3JBbmRyb2lkPzogP0NvbG9yVmFsdWUsXG5cbiAgLyoqXG4gICAqIElmIGRlZmluZWQsIHRoZSBwcm92aWRlZCBpbWFnZSByZXNvdXJjZSB3aWxsIGJlIHJlbmRlcmVkIG9uIHRoZSBsZWZ0LlxuICAgKiBUaGUgaW1hZ2UgcmVzb3VyY2UgbXVzdCBiZSBpbnNpZGUgYC9hbmRyb2lkL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGVgIGFuZCByZWZlcmVuY2VkXG4gICAqIGxpa2VcbiAgICogYGBgXG4gICAqIDxUZXh0SW5wdXRcbiAgICogIGlubGluZUltYWdlTGVmdD0nc2VhcmNoX2ljb24nXG4gICAqIC8+XG4gICAqIGBgYFxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgaW5saW5lSW1hZ2VMZWZ0PzogP3N0cmluZyxcblxuICAvKipcbiAgICogUGFkZGluZyBiZXR3ZWVuIHRoZSBpbmxpbmUgaW1hZ2UsIGlmIGFueSwgYW5kIHRoZSB0ZXh0IGlucHV0IGl0c2VsZi5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIGlubGluZUltYWdlUGFkZGluZz86ID9JbnQzMixcblxuICBpbXBvcnRhbnRGb3JBdXRvZmlsbD86IHN0cmluZyAvKj8oXG4gICAgfCAnYXV0bydcbiAgICB8ICdubydcbiAgICB8ICdub0V4Y2x1ZGVEZXNjZW5kYW50cydcbiAgICB8ICd5ZXMnXG4gICAgfCAneWVzRXhjbHVkZURlc2NlbmRhbnRzJ1xuICApLCovLFxuXG4gIC8qKlxuICAgKiBXaGVuIGBmYWxzZWAsIGl0IHdpbGwgcHJldmVudCB0aGUgc29mdCBrZXlib2FyZCBmcm9tIHNob3dpbmcgd2hlbiB0aGUgZmllbGQgaXMgZm9jdXNlZC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgc2hvd1NvZnRJbnB1dE9uRm9jdXM/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogVGV4dElucHV0IHByb3BzIGFmdGVyIHRoaXNcbiAgICovXG4gIC8qKlxuICAgKiBDYW4gdGVsbCBgVGV4dElucHV0YCB0byBhdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgY2VydGFpbiBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiAtIGBjaGFyYWN0ZXJzYDogYWxsIGNoYXJhY3RlcnMuXG4gICAqIC0gYHdvcmRzYDogZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZC5cbiAgICogLSBgc2VudGVuY2VzYDogZmlyc3QgbGV0dGVyIG9mIGVhY2ggc2VudGVuY2UgKCpkZWZhdWx0KikuXG4gICAqIC0gYG5vbmVgOiBkb24ndCBhdXRvIGNhcGl0YWxpemUgYW55dGhpbmcuXG4gICAqL1xuICBhdXRvQ2FwaXRhbGl6ZT86IFdpdGhEZWZhdWx0PFxuICAgICdub25lJyB8ICdzZW50ZW5jZXMnIHwgJ3dvcmRzJyB8ICdjaGFyYWN0ZXJzJyxcbiAgICAnbm9uZScsXG4gID4sXG5cbiAgLyoqXG4gICAqIElmIGBmYWxzZWAsIGRpc2FibGVzIGF1dG8tY29ycmVjdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgKi9cbiAgYXV0b0NvcnJlY3Q/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBmb2N1c2VzIHRoZSBpbnB1dCBvbiBgY29tcG9uZW50RGlkTW91bnRgLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgKi9cbiAgYXV0b0ZvY3VzPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIGZvbnRzIHNob3VsZCBzY2FsZSB0byByZXNwZWN0IFRleHQgU2l6ZSBhY2Nlc3NpYmlsaXR5IHNldHRpbmdzLiBUaGVcbiAgICogZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBhbGxvd0ZvbnRTY2FsaW5nPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBsYXJnZXN0IHBvc3NpYmxlIHNjYWxlIGEgZm9udCBjYW4gcmVhY2ggd2hlbiBgYWxsb3dGb250U2NhbGluZ2AgaXMgZW5hYmxlZC5cbiAgICogUG9zc2libGUgdmFsdWVzOlxuICAgKiBgbnVsbC91bmRlZmluZWRgIChkZWZhdWx0KTogaW5oZXJpdCBmcm9tIHRoZSBwYXJlbnQgbm9kZSBvciB0aGUgZ2xvYmFsIGRlZmF1bHQgKDApXG4gICAqIGAwYDogbm8gbWF4LCBpZ25vcmUgcGFyZW50L2dsb2JhbCBkZWZhdWx0XG4gICAqIGA+PSAxYDogc2V0cyB0aGUgbWF4Rm9udFNpemVNdWx0aXBsaWVyIG9mIHRoaXMgbm9kZSB0byB0aGlzIHZhbHVlXG4gICAqL1xuICBtYXhGb250U2l6ZU11bHRpcGxpZXI/OiA/RmxvYXQsXG5cbiAgLyoqXG4gICAqIElmIGBmYWxzZWAsIHRleHQgaXMgbm90IGVkaXRhYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBlZGl0YWJsZT86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoaWNoIGtleWJvYXJkIHRvIG9wZW4sIGUuZy5gbnVtZXJpY2AuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIHdvcmsgYWNyb3NzIHBsYXRmb3JtczpcbiAgICpcbiAgICogLSBgZGVmYXVsdGBcbiAgICogLSBgbnVtZXJpY2BcbiAgICogLSBgbnVtYmVyLXBhZGBcbiAgICogLSBgZGVjaW1hbC1wYWRgXG4gICAqIC0gYGVtYWlsLWFkZHJlc3NgXG4gICAqIC0gYHBob25lLXBhZGBcbiAgICogLSBgdXJsYFxuICAgKlxuICAgKiAqQW5kcm9pZCBPbmx5KlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyB3b3JrIG9uIEFuZHJvaWQgb25seTpcbiAgICpcbiAgICogLSBgdmlzaWJsZS1wYXNzd29yZGBcbiAgICovXG4gIGtleWJvYXJkVHlwZT86IFdpdGhEZWZhdWx0PEtleWJvYXJkVHlwZSwgJ2RlZmF1bHQnPixcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBob3cgdGhlIHJldHVybiBrZXkgc2hvdWxkIGxvb2suIE9uIEFuZHJvaWQgeW91IGNhbiBhbHNvIHVzZVxuICAgKiBgcmV0dXJuS2V5TGFiZWxgLlxuICAgKlxuICAgKiAqQ3Jvc3MgcGxhdGZvcm0qXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIHdvcmsgYWNyb3NzIHBsYXRmb3JtczpcbiAgICpcbiAgICogLSBgZG9uZWBcbiAgICogLSBgZ29gXG4gICAqIC0gYG5leHRgXG4gICAqIC0gYHNlYXJjaGBcbiAgICogLSBgc2VuZGBcbiAgICpcbiAgICogKkFuZHJvaWQgT25seSpcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyB2YWx1ZXMgd29yayBvbiBBbmRyb2lkIG9ubHk6XG4gICAqXG4gICAqIC0gYG5vbmVgXG4gICAqIC0gYHByZXZpb3VzYFxuICAgKi9cbiAgcmV0dXJuS2V5VHlwZT86IFdpdGhEZWZhdWx0PFJldHVybktleVR5cGUsICdkb25lJz4sXG5cbiAgLyoqXG4gICAqIExpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSBlbnRlcmVkLiBVc2UgdGhpc1xuICAgKiBpbnN0ZWFkIG9mIGltcGxlbWVudGluZyB0aGUgbG9naWMgaW4gSlMgdG8gYXZvaWQgZmxpY2tlci5cbiAgICovXG4gIG1heExlbmd0aD86ID9JbnQzMixcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCBpbnB1dCBjYW4gYmUgbXVsdGlwbGUgbGluZXMuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAqL1xuICBtdWx0aWxpbmU/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCBpcyBibHVycmVkLlxuICAgKiBgdGFyZ2V0YCBpcyB0aGUgcmVhY3RUYWcgb2YgdGhlIGVsZW1lbnRcbiAgICovXG4gIG9uQmx1cj86ID9CdWJibGluZ0V2ZW50SGFuZGxlcjwkUmVhZE9ubHk8e3x0YXJnZXQ6IEludDMyfH0+PixcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCBpcyBmb2N1c2VkLlxuICAgKiBgdGFyZ2V0YCBpcyB0aGUgcmVhY3RUYWcgb2YgdGhlIGVsZW1lbnRcbiAgICovXG4gIG9uRm9jdXM/OiA/QnViYmxpbmdFdmVudEhhbmRsZXI8JFJlYWRPbmx5PHt8dGFyZ2V0OiBJbnQzMnx9Pj4sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRleHQgaW5wdXQncyB0ZXh0IGNoYW5nZXMuXG4gICAqIGB0YXJnZXRgIGlzIHRoZSByZWFjdFRhZyBvZiB0aGUgZWxlbWVudFxuICAgKiBUT0RPOiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gb25DaGFuZ2UgYW5kIG9uQ2hhbmdlVGV4dFxuICAgKi9cbiAgb25DaGFuZ2U/OiA/QnViYmxpbmdFdmVudEhhbmRsZXI8XG4gICAgJFJlYWRPbmx5PHt8dGFyZ2V0OiBJbnQzMiwgZXZlbnRDb3VudDogSW50MzIsIHRleHQ6IHN0cmluZ3x9PixcbiAgPixcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCdzIHRleHQgY2hhbmdlcy5cbiAgICogQ2hhbmdlZCB0ZXh0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgaGFuZGxlci5cbiAgICogVE9ETzogZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG9uQ2hhbmdlIGFuZCBvbkNoYW5nZVRleHRcbiAgICovXG4gIG9uQ2hhbmdlVGV4dD86ID9CdWJibGluZ0V2ZW50SGFuZGxlcjxcbiAgICAkUmVhZE9ubHk8e3x0YXJnZXQ6IEludDMyLCBldmVudENvdW50OiBJbnQzMiwgdGV4dDogc3RyaW5nfH0+LFxuICA+LFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB0ZXh0IGlucHV0J3MgY29udGVudCBzaXplIGNoYW5nZXMuXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgd2l0aFxuICAgKiBgeyBuYXRpdmVFdmVudDogeyBjb250ZW50U2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0gfSB9YC5cbiAgICpcbiAgICogT25seSBjYWxsZWQgZm9yIG11bHRpbGluZSB0ZXh0IGlucHV0cy5cbiAgICovXG4gIG9uQ29udGVudFNpemVDaGFuZ2U/OiA/RGlyZWN0RXZlbnRIYW5kbGVyPFxuICAgICRSZWFkT25seTx7fFxuICAgICAgdGFyZ2V0OiBJbnQzMixcbiAgICAgIGNvbnRlbnRTaXplOiAkUmVhZE9ubHk8e3x3aWR0aDogRG91YmxlLCBoZWlnaHQ6IERvdWJsZXx9PixcbiAgICB8fT4sXG4gID4sXG5cbiAgb25UZXh0SW5wdXQ/OiA/QnViYmxpbmdFdmVudEhhbmRsZXI8XG4gICAgJFJlYWRPbmx5PHt8XG4gICAgICB0YXJnZXQ6IEludDMyLFxuICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgcHJldmlvdXNUZXh0OiBzdHJpbmcsXG4gICAgICByYW5nZTogJFJlYWRPbmx5PHt8c3RhcnQ6IERvdWJsZSwgZW5kOiBEb3VibGV8fT4sXG4gICAgfH0+LFxuICA+LFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRleHQgaW5wdXQgZW5kcy5cbiAgICovXG4gIG9uRW5kRWRpdGluZz86ID9CdWJibGluZ0V2ZW50SGFuZGxlcjxcbiAgICAkUmVhZE9ubHk8e3x0YXJnZXQ6IEludDMyLCB0ZXh0OiBzdHJpbmd8fT4sXG4gID4sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRleHQgaW5wdXQgc2VsZWN0aW9uIGlzIGNoYW5nZWQuXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgd2l0aFxuICAgKiBgeyBuYXRpdmVFdmVudDogeyBzZWxlY3Rpb246IHsgc3RhcnQsIGVuZCB9IH0gfWAuXG4gICAqL1xuICBvblNlbGVjdGlvbkNoYW5nZT86ID9EaXJlY3RFdmVudEhhbmRsZXI8XG4gICAgJFJlYWRPbmx5PHt8XG4gICAgICB0YXJnZXQ6IEludDMyLFxuICAgICAgc2VsZWN0aW9uOiAkUmVhZE9ubHk8e3xzdGFydDogRG91YmxlLCBlbmQ6IERvdWJsZXx9PixcbiAgICB8fT4sXG4gID4sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRleHQgaW5wdXQncyBzdWJtaXQgYnV0dG9uIGlzIHByZXNzZWQuXG4gICAqIEludmFsaWQgaWYgYG11bHRpbGluZT17dHJ1ZX1gIGlzIHNwZWNpZmllZC5cbiAgICovXG4gIG9uU3VibWl0RWRpdGluZz86ID9CdWJibGluZ0V2ZW50SGFuZGxlcjxcbiAgICAkUmVhZE9ubHk8e3x0YXJnZXQ6IEludDMyLCB0ZXh0OiBzdHJpbmd8fT4sXG4gID4sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZC5cbiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCB3aXRoIGB7IG5hdGl2ZUV2ZW50OiB7IGtleToga2V5VmFsdWUgfSB9YFxuICAgKiB3aGVyZSBga2V5VmFsdWVgIGlzIGAnRW50ZXInYCBvciBgJ0JhY2tzcGFjZSdgIGZvciByZXNwZWN0aXZlIGtleXMgYW5kXG4gICAqIHRoZSB0eXBlZC1pbiBjaGFyYWN0ZXIgb3RoZXJ3aXNlIGluY2x1ZGluZyBgJyAnYCBmb3Igc3BhY2UuXG4gICAqIEZpcmVzIGJlZm9yZSBgb25DaGFuZ2VgIGNhbGxiYWNrcy5cbiAgICovXG4gIG9uS2V5UHJlc3M/OiA/QnViYmxpbmdFdmVudEhhbmRsZXI8JFJlYWRPbmx5PHt8dGFyZ2V0OiBJbnQzMiwga2V5OiBzdHJpbmd8fT4+LFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIG9uIGNvbnRlbnQgc2Nyb2xsIHdpdGggYHsgbmF0aXZlRXZlbnQ6IHsgY29udGVudE9mZnNldDogeyB4LCB5IH0gfSB9YC5cbiAgICogTWF5IGFsc28gY29udGFpbiBvdGhlciBwcm9wZXJ0aWVzIGZyb20gU2Nyb2xsRXZlbnQgYnV0IG9uIEFuZHJvaWQgY29udGVudFNpemVcbiAgICogaXMgbm90IHByb3ZpZGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLlxuICAgKi9cbiAgb25TY3JvbGw/OiA/RGlyZWN0RXZlbnRIYW5kbGVyPFxuICAgICRSZWFkT25seTx7fFxuICAgICAgdGFyZ2V0OiBJbnQzMixcbiAgICAgIHJlc3BvbmRlcklnbm9yZVNjcm9sbDogYm9vbGVhbixcbiAgICAgIGNvbnRlbnRJbnNldDogJFJlYWRPbmx5PHt8XG4gICAgICAgIHRvcDogRG91YmxlLCAvLyBhbHdheXMgMCBvbiBBbmRyb2lkXG4gICAgICAgIGJvdHRvbTogRG91YmxlLCAvLyBhbHdheXMgMCBvbiBBbmRyb2lkXG4gICAgICAgIGxlZnQ6IERvdWJsZSwgLy8gYWx3YXlzIDAgb24gQW5kcm9pZFxuICAgICAgICByaWdodDogRG91YmxlLCAvLyBhbHdheXMgMCBvbiBBbmRyb2lkXG4gICAgICB8fT4sXG4gICAgICBjb250ZW50T2Zmc2V0OiAkUmVhZE9ubHk8e3xcbiAgICAgICAgeDogRG91YmxlLFxuICAgICAgICB5OiBEb3VibGUsXG4gICAgICB8fT4sXG4gICAgICBjb250ZW50U2l6ZTogJFJlYWRPbmx5PHt8XG4gICAgICAgIHdpZHRoOiBEb3VibGUsIC8vIGFsd2F5cyAwIG9uIEFuZHJvaWRcbiAgICAgICAgaGVpZ2h0OiBEb3VibGUsIC8vIGFsd2F5cyAwIG9uIEFuZHJvaWRcbiAgICAgIHx9PixcbiAgICAgIGxheW91dE1lYXN1cmVtZW50OiAkUmVhZE9ubHk8e3xcbiAgICAgICAgd2lkdGg6IERvdWJsZSxcbiAgICAgICAgaGVpZ2h0OiBEb3VibGUsXG4gICAgICB8fT4sXG4gICAgICB2ZWxvY2l0eTogJFJlYWRPbmx5PHt8XG4gICAgICAgIHg6IERvdWJsZSwgLy8gYWx3YXlzIDAgb24gQW5kcm9pZFxuICAgICAgICB5OiBEb3VibGUsIC8vIGFsd2F5cyAwIG9uIEFuZHJvaWRcbiAgICAgIHx9PixcbiAgICB8fT4sXG4gID4sXG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGJlZm9yZSB0ZXh0IGlucHV0IGhhcyBiZWVuIGVudGVyZWQuXG4gICAqL1xuICBwbGFjZWhvbGRlcj86ID9TdHJpbmdpc2gsXG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGNvbG9yIG9mIHRoZSBwbGFjZWhvbGRlciBzdHJpbmcuXG4gICAqL1xuICBwbGFjZWhvbGRlclRleHRDb2xvcj86ID9Db2xvclZhbHVlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IGlucHV0IG9ic2N1cmVzIHRoZSB0ZXh0IGVudGVyZWQgc28gdGhhdCBzZW5zaXRpdmUgdGV4dFxuICAgKiBsaWtlIHBhc3N3b3JkcyBzdGF5IHNlY3VyZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4gRG9lcyBub3Qgd29yayB3aXRoICdtdWx0aWxpbmU9e3RydWV9Jy5cbiAgICovXG4gIHNlY3VyZVRleHRFbnRyeT86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBUaGUgaGlnaGxpZ2h0IGFuZCBjdXJzb3IgY29sb3Igb2YgdGhlIHRleHQgaW5wdXQuXG4gICAqL1xuICBzZWxlY3Rpb25Db2xvcj86ID9Db2xvclZhbHVlLFxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBzZWxlY3Rpb24gaGFuZGxlIGNvbG9yLlxuICAgKi9cbiAgc2VsZWN0aW9uSGFuZGxlQ29sb3I/OiA/Q29sb3JWYWx1ZSxcblxuICAvKipcbiAgICogVGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHRleHQgaW5wdXQncyBzZWxlY3Rpb24uIFNldCBzdGFydCBhbmQgZW5kIHRvXG4gICAqIHRoZSBzYW1lIHZhbHVlIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IuXG4gICAqL1xuICBzZWxlY3Rpb24/OiA/JFJlYWRPbmx5PHt8XG4gICAgc3RhcnQ6IEludDMyLFxuICAgIGVuZD86ID9JbnQzMixcbiAgfH0+LFxuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdG8gc2hvdyBmb3IgdGhlIHRleHQgaW5wdXQuIGBUZXh0SW5wdXRgIGlzIGEgY29udHJvbGxlZFxuICAgKiBjb21wb25lbnQsIHdoaWNoIG1lYW5zIHRoZSBuYXRpdmUgdmFsdWUgd2lsbCBiZSBmb3JjZWQgdG8gbWF0Y2ggdGhpc1xuICAgKiB2YWx1ZSBwcm9wIGlmIHByb3ZpZGVkLiBGb3IgbW9zdCB1c2VzLCB0aGlzIHdvcmtzIGdyZWF0LCBidXQgaW4gc29tZVxuICAgKiBjYXNlcyB0aGlzIG1heSBjYXVzZSBmbGlja2VyaW5nIC0gb25lIGNvbW1vbiBjYXVzZSBpcyBwcmV2ZW50aW5nIGVkaXRzXG4gICAqIGJ5IGtlZXBpbmcgdmFsdWUgdGhlIHNhbWUuIEluIGFkZGl0aW9uIHRvIHNpbXBseSBzZXR0aW5nIHRoZSBzYW1lIHZhbHVlLFxuICAgKiBlaXRoZXIgc2V0IGBlZGl0YWJsZT17ZmFsc2V9YCwgb3Igc2V0L3VwZGF0ZSBgbWF4TGVuZ3RoYCB0byBwcmV2ZW50XG4gICAqIHVud2FudGVkIGVkaXRzIHdpdGhvdXQgZmxpY2tlci5cbiAgICovXG4gIHZhbHVlPzogP3N0cmluZyxcblxuICAvKipcbiAgICogUHJvdmlkZXMgYW4gaW5pdGlhbCB2YWx1ZSB0aGF0IHdpbGwgY2hhbmdlIHdoZW4gdGhlIHVzZXIgc3RhcnRzIHR5cGluZy5cbiAgICogVXNlZnVsIGZvciBzaW1wbGUgdXNlLWNhc2VzIHdoZXJlIHlvdSBkbyBub3Qgd2FudCB0byBkZWFsIHdpdGggbGlzdGVuaW5nXG4gICAqIHRvIGV2ZW50cyBhbmQgdXBkYXRpbmcgdGhlIHZhbHVlIHByb3AgdG8ga2VlcCB0aGUgY29udHJvbGxlZCBzdGF0ZSBpbiBzeW5jLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogP3N0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhbGwgdGV4dCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2VsZWN0ZWQgb24gZm9jdXMuXG4gICAqL1xuICBzZWxlY3RUZXh0T25Gb2N1cz86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IGZpZWxkIHdpbGwgYmx1ciB3aGVuIHN1Ym1pdHRlZC5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSBmb3Igc2luZ2xlLWxpbmUgZmllbGRzIGFuZCBmYWxzZSBmb3JcbiAgICogbXVsdGlsaW5lIGZpZWxkcy4gTm90ZSB0aGF0IGZvciBtdWx0aWxpbmUgZmllbGRzLCBzZXR0aW5nIGBibHVyT25TdWJtaXRgXG4gICAqIHRvIGB0cnVlYCBtZWFucyB0aGF0IHByZXNzaW5nIHJldHVybiB3aWxsIGJsdXIgdGhlIGZpZWxkIGFuZCB0cmlnZ2VyIHRoZVxuICAgKiBgb25TdWJtaXRFZGl0aW5nYCBldmVudCBpbnN0ZWFkIG9mIGluc2VydGluZyBhIG5ld2xpbmUgaW50byB0aGUgZmllbGQuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIE5vdGUgdGhhdCBgc3VibWl0QmVoYXZpb3JgIG5vdyB0YWtlcyB0aGUgcGxhY2Ugb2YgYGJsdXJPblN1Ym1pdGAgYW5kIHdpbGxcbiAgICogb3ZlcnJpZGUgYW55IGJlaGF2aW9yIGRlZmluZWQgYnkgYGJsdXJPblN1Ym1pdGAuXG4gICAqIEBzZWUgc3VibWl0QmVoYXZpb3JcbiAgICovXG4gIGJsdXJPblN1Ym1pdD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSByZXR1cm4ga2V5IGlzIHByZXNzZWQsXG4gICAqXG4gICAqIEZvciBzaW5nbGUgbGluZSBpbnB1dHM6XG4gICAqXG4gICAqIC0gYCduZXdsaW5lYCcgZGVmYXVsdHMgdG8gYCdibHVyQW5kU3VibWl0J2BcbiAgICogLSBgdW5kZWZpbmVkYCBkZWZhdWx0cyB0byBgJ2JsdXJBbmRTdWJtaXQnYFxuICAgKlxuICAgKiBGb3IgbXVsdGlsaW5lIGlucHV0czpcbiAgICpcbiAgICogLSBgJ25ld2xpbmUnYCBhZGRzIGEgbmV3bGluZVxuICAgKiAtIGB1bmRlZmluZWRgIGRlZmF1bHRzIHRvIGAnbmV3bGluZSdgXG4gICAqXG4gICAqIEZvciBib3RoIHNpbmdsZSBsaW5lIGFuZCBtdWx0aWxpbmUgaW5wdXRzOlxuICAgKlxuICAgKiAtIGAnc3VibWl0J2Agd2lsbCBvbmx5IHNlbmQgYSBzdWJtaXQgZXZlbnQgYW5kIG5vdCBibHVyIHRoZSBpbnB1dFxuICAgKiAtIGAnYmx1ckFuZFN1Ym1pdGAnIHdpbGwgYm90aCBibHVyIHRoZSBpbnB1dCBhbmQgc2VuZCBhIHN1Ym1pdCBldmVudFxuICAgKi9cbiAgc3VibWl0QmVoYXZpb3I/OiA/U3VibWl0QmVoYXZpb3IsXG5cbiAgLyoqXG4gICAqIE5vdGUgdGhhdCBub3QgYWxsIFRleHQgc3R5bGVzIGFyZSBzdXBwb3J0ZWQsIGFuIGluY29tcGxldGUgbGlzdCBvZiB3aGF0IGlzIG5vdCBzdXBwb3J0ZWQgaW5jbHVkZXM6XG4gICAqXG4gICAqIC0gYGJvcmRlckxlZnRXaWR0aGBcbiAgICogLSBgYm9yZGVyVG9wV2lkdGhgXG4gICAqIC0gYGJvcmRlclJpZ2h0V2lkdGhgXG4gICAqIC0gYGJvcmRlckJvdHRvbVdpZHRoYFxuICAgKiAtIGBib3JkZXJUb3BMZWZ0UmFkaXVzYFxuICAgKiAtIGBib3JkZXJUb3BSaWdodFJhZGl1c2BcbiAgICogLSBgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNgXG4gICAqIC0gYGJvcmRlckJvdHRvbUxlZnRSYWRpdXNgXG4gICAqXG4gICAqIHNlZSBbSXNzdWUjNzA3MF0oaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9pc3N1ZXMvNzA3MClcbiAgICogZm9yIG1vcmUgZGV0YWlsLlxuICAgKlxuICAgKiBbU3R5bGVzXShkb2NzL3N0eWxlLmh0bWwpXG4gICAqL1xuICAvLyBUT0RPOiBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGlzIHN0eWxlIHByb3AgZm9yIGNvZGVnZW4vRmFicmljIHB1cnBvc2VzXG4gIC8vIFRoaXMgbXVzdCBiZSBjb21tZW50ZWQgZm9yIEZhYnJpYyBjb2RlZ2VuIHRvIHdvcms7IGl0J3MgY3VycmVudGx5IG5vdCBwb3NzaWJsZVxuICAvLyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWaWV3IHN0eWxlIHByb3AgaW4gY29kZWdlbi5cbiAgc3R5bGU/OiA/VGV4dFN0eWxlUHJvcCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBjYXJldCBpcyBoaWRkZW4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNpbmdsZS1saW5lIFRleHRJbnB1dCBjb21wb25lbnQgb24gaU9TLlxuICAgKi9cbiAgY2FyZXRIaWRkZW4/OiA/Ym9vbGVhbixcblxuICAvKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbnRleHRNZW51SGlkZGVuIGlzIGhpZGRlbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICovXG4gIGNvbnRleHRNZW51SGlkZGVuPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIFRoZSBmb2xsb3dpbmcgYXJlIHByb3BzIHRoYXQgYEJhc2VUZXh0U2hhZG93Tm9kZWAgdGFrZXMuIEl0IGlzIHVuY2xlYXIgaWYgdGhleVxuICAgKiBhcmUgdXNlZCBieSBUZXh0SW5wdXQuXG4gICAqL1xuICB0ZXh0U2hhZG93Q29sb3I/OiA/Q29sb3JWYWx1ZSxcbiAgdGV4dFNoYWRvd1JhZGl1cz86ID9GbG9hdCxcbiAgdGV4dERlY29yYXRpb25MaW5lPzogP3N0cmluZyxcbiAgZm9udFN0eWxlPzogP3N0cmluZyxcbiAgdGV4dFNoYWRvd09mZnNldD86ID8kUmVhZE9ubHk8e3x3aWR0aD86ID9Eb3VibGUsIGhlaWdodD86ID9Eb3VibGV8fT4sXG4gIGxpbmVIZWlnaHQ/OiA/RmxvYXQsXG4gIHRleHRUcmFuc2Zvcm0/OiA/c3RyaW5nLFxuICBjb2xvcj86ID9JbnQzMixcbiAgbGV0dGVyU3BhY2luZz86ID9GbG9hdCxcbiAgZm9udFNpemU/OiA/RmxvYXQsXG4gIHRleHRBbGlnbj86ID9zdHJpbmcsXG4gIGluY2x1ZGVGb250UGFkZGluZz86ID9ib29sZWFuLFxuICBmb250V2VpZ2h0PzogP3N0cmluZyxcbiAgZm9udEZhbWlseT86ID9zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEkgY2Fubm90IGZpbmQgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQgYnV0IEpTIGNvbXBsYWlucyB3aXRob3V0IHRoZW0uXG4gICAqL1xuICB0ZXh0QWxpZ25WZXJ0aWNhbD86ID9zdHJpbmcsXG4gIGN1cnNvckNvbG9yPzogP0NvbG9yVmFsdWUsXG5cbiAgLyoqXG4gICAqIFwiUHJpdmF0ZVwiIGZpZWxkcyB1c2VkIGJ5IFRleHRJbnB1dC5qcyBhbmQgbm90IHVzZXJzIG9mIHRoaXMgY29tcG9uZW50IGRpcmVjdGx5XG4gICAqL1xuICBtb3N0UmVjZW50RXZlbnRDb3VudDogSW50MzIsXG4gIHRleHQ/OiA/c3RyaW5nLFxufH0+O1xuXG50eXBlIE5hdGl2ZVR5cGUgPSBIb3N0Q29tcG9uZW50PE5hdGl2ZVByb3BzPjtcblxudHlwZSBOYXRpdmVDb21tYW5kcyA9IFRleHRJbnB1dE5hdGl2ZUNvbW1hbmRzPE5hdGl2ZVR5cGU+O1xuXG5leHBvcnQgY29uc3QgQ29tbWFuZHM6IE5hdGl2ZUNvbW1hbmRzID0gY29kZWdlbk5hdGl2ZUNvbW1hbmRzPE5hdGl2ZUNvbW1hbmRzPih7XG4gIHN1cHBvcnRlZENvbW1hbmRzOiBbJ2ZvY3VzJywgJ2JsdXInLCAnc2V0VGV4dEFuZFNlbGVjdGlvbiddLFxufSk7XG5cbmV4cG9ydCBjb25zdCBfX0lOVEVSTkFMX1ZJRVdfQ09ORklHOiBQYXJ0aWFsVmlld0NvbmZpZyA9IHtcbiAgdWlWaWV3Q2xhc3NOYW1lOiAnQW5kcm9pZFRleHRJbnB1dCcsXG4gIGJ1YmJsaW5nRXZlbnRUeXBlczoge1xuICAgIHRvcEJsdXI6IHtcbiAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICAgIGJ1YmJsZWQ6ICdvbkJsdXInLFxuICAgICAgICBjYXB0dXJlZDogJ29uQmx1ckNhcHR1cmUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRvcEVuZEVkaXRpbmc6IHtcbiAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICAgIGJ1YmJsZWQ6ICdvbkVuZEVkaXRpbmcnLFxuICAgICAgICBjYXB0dXJlZDogJ29uRW5kRWRpdGluZ0NhcHR1cmUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRvcEZvY3VzOiB7XG4gICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICBidWJibGVkOiAnb25Gb2N1cycsXG4gICAgICAgIGNhcHR1cmVkOiAnb25Gb2N1c0NhcHR1cmUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRvcEtleVByZXNzOiB7XG4gICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICBidWJibGVkOiAnb25LZXlQcmVzcycsXG4gICAgICAgIGNhcHR1cmVkOiAnb25LZXlQcmVzc0NhcHR1cmUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRvcFN1Ym1pdEVkaXRpbmc6IHtcbiAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICAgIGJ1YmJsZWQ6ICdvblN1Ym1pdEVkaXRpbmcnLFxuICAgICAgICBjYXB0dXJlZDogJ29uU3VibWl0RWRpdGluZ0NhcHR1cmUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRvcFRleHRJbnB1dDoge1xuICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgYnViYmxlZDogJ29uVGV4dElucHV0JyxcbiAgICAgICAgY2FwdHVyZWQ6ICdvblRleHRJbnB1dENhcHR1cmUnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBkaXJlY3RFdmVudFR5cGVzOiB7XG4gICAgdG9wU2Nyb2xsOiB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25TY3JvbGwnLFxuICAgIH0sXG4gIH0sXG4gIHZhbGlkQXR0cmlidXRlczoge1xuICAgIG1heEZvbnRTaXplTXVsdGlwbGllcjogdHJ1ZSxcbiAgICBhZGp1c3RzRm9udFNpemVUb0ZpdDogdHJ1ZSxcbiAgICBtaW5pbXVtRm9udFNjYWxlOiB0cnVlLFxuICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICBwbGFjZWhvbGRlcjogdHJ1ZSxcbiAgICBpbmxpbmVJbWFnZVBhZGRpbmc6IHRydWUsXG4gICAgY29udGV4dE1lbnVIaWRkZW46IHRydWUsXG4gICAgdGV4dFNoYWRvd0NvbG9yOiB7XG4gICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgfSxcbiAgICBtYXhMZW5ndGg6IHRydWUsXG4gICAgc2VsZWN0VGV4dE9uRm9jdXM6IHRydWUsXG4gICAgdGV4dFNoYWRvd1JhZGl1czogdHJ1ZSxcbiAgICB1bmRlcmxpbmVDb2xvckFuZHJvaWQ6IHtcbiAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICB9LFxuICAgIHRleHREZWNvcmF0aW9uTGluZTogdHJ1ZSxcbiAgICBzdWJtaXRCZWhhdmlvcjogdHJ1ZSxcbiAgICB0ZXh0QWxpZ25WZXJ0aWNhbDogdHJ1ZSxcbiAgICBmb250U3R5bGU6IHRydWUsXG4gICAgdGV4dFNoYWRvd09mZnNldDogdHJ1ZSxcbiAgICBzZWxlY3Rpb25Db2xvcjoge3Byb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdH0sXG4gICAgc2VsZWN0aW9uSGFuZGxlQ29sb3I6IHtcbiAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICB9LFxuICAgIHBsYWNlaG9sZGVyVGV4dENvbG9yOiB7XG4gICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgfSxcbiAgICBpbXBvcnRhbnRGb3JBdXRvZmlsbDogdHJ1ZSxcbiAgICBsaW5lSGVpZ2h0OiB0cnVlLFxuICAgIHRleHRUcmFuc2Zvcm06IHRydWUsXG4gICAgcmV0dXJuS2V5VHlwZTogdHJ1ZSxcbiAgICBrZXlib2FyZFR5cGU6IHRydWUsXG4gICAgbXVsdGlsaW5lOiB0cnVlLFxuICAgIGNvbG9yOiB7cHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0fSxcbiAgICBhdXRvQ29tcGxldGU6IHRydWUsXG4gICAgbnVtYmVyT2ZMaW5lczogdHJ1ZSxcbiAgICBsZXR0ZXJTcGFjaW5nOiB0cnVlLFxuICAgIHJldHVybktleUxhYmVsOiB0cnVlLFxuICAgIGZvbnRTaXplOiB0cnVlLFxuICAgIG9uS2V5UHJlc3M6IHRydWUsXG4gICAgY3Vyc29yQ29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuICAgIHRleHQ6IHRydWUsXG4gICAgc2hvd1NvZnRJbnB1dE9uRm9jdXM6IHRydWUsXG4gICAgdGV4dEFsaWduOiB0cnVlLFxuICAgIGF1dG9DYXBpdGFsaXplOiB0cnVlLFxuICAgIGF1dG9Db3JyZWN0OiB0cnVlLFxuICAgIGNhcmV0SGlkZGVuOiB0cnVlLFxuICAgIHNlY3VyZVRleHRFbnRyeTogdHJ1ZSxcbiAgICB0ZXh0QnJlYWtTdHJhdGVneTogdHJ1ZSxcbiAgICBvblNjcm9sbDogdHJ1ZSxcbiAgICBvbkNvbnRlbnRTaXplQ2hhbmdlOiB0cnVlLFxuICAgIGRpc2FibGVGdWxsc2NyZWVuVUk6IHRydWUsXG4gICAgaW5jbHVkZUZvbnRQYWRkaW5nOiB0cnVlLFxuICAgIGZvbnRXZWlnaHQ6IHRydWUsXG4gICAgZm9udEZhbWlseTogdHJ1ZSxcbiAgICBhbGxvd0ZvbnRTY2FsaW5nOiB0cnVlLFxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiB0cnVlLFxuICAgIG1vc3RSZWNlbnRFdmVudENvdW50OiB0cnVlLFxuICAgIGlubGluZUltYWdlTGVmdDogdHJ1ZSxcbiAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICBmb250VmFyaWFudDogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21Db2xvcjoge1xuICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgIH0sXG4gICAgYm9yZGVyUmFkaXVzOiB0cnVlLFxuICAgIGJvcmRlclJpZ2h0Q29sb3I6IHtcbiAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICB9LFxuICAgIGJvcmRlckNvbG9yOiB7cHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0fSxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogdHJ1ZSxcbiAgICBib3JkZXJTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiB0cnVlLFxuICAgIGJvcmRlckxlZnRDb2xvcjoge1xuICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgIH0sXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogdHJ1ZSxcbiAgICBib3JkZXJUb3BDb2xvcjoge3Byb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdH0sXG4gIH0sXG59O1xuXG5sZXQgQW5kcm9pZFRleHRJbnB1dE5hdGl2ZUNvbXBvbmVudCA9IE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldDxOYXRpdmVQcm9wcz4oXG4gICdBbmRyb2lkVGV4dElucHV0JyxcbiAgKCkgPT4gX19JTlRFUk5BTF9WSUVXX0NPTkZJRyxcbik7XG5cbi8vIGZsb3dsaW50LW5leHQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG5leHBvcnQgZGVmYXVsdCAoKEFuZHJvaWRUZXh0SW5wdXROYXRpdmVDb21wb25lbnQ6IGFueSk6IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxubGV0IGxvZ0xpc3RlbmVycztcblxudHlwZSBMb2dMaXN0ZW5lcnMgPSB7fFxuICArb25EaWZmZXJlbnRGdW5jdGlvbnNJZ25vcmVkOiAobmFtZU9uZTogP3N0cmluZywgbmFtZVR3bzogP3N0cmluZykgPT4gdm9pZCxcbnx9O1xuXG50eXBlIE9wdGlvbnMgPSB7fCt1bnNhZmVseUlnbm9yZUZ1bmN0aW9ucz86IGJvb2xlYW58fTtcblxuZnVuY3Rpb24gdW5zdGFibGVfc2V0TG9nTGlzdGVuZXJzKGxpc3RlbmVyczogP0xvZ0xpc3RlbmVycykge1xuICBsb2dMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG59XG5cbi8qXG4gKiBAcmV0dXJucyB7Ym9vbH0gdHJ1ZSBpZiBkaWZmZXJlbnQsIGZhbHNlIGlmIGVxdWFsXG4gKi9cbmNvbnN0IGRlZXBEaWZmZXIgPSBmdW5jdGlvbiAoXG4gIG9uZTogYW55LFxuICB0d286IGFueSxcbiAgbWF4RGVwdGhPck9wdGlvbnM6IE9wdGlvbnMgfCBudW1iZXIgPSAtMSxcbiAgbWF5YmVPcHRpb25zPzogT3B0aW9ucyxcbik6IGJvb2xlYW4ge1xuICBjb25zdCBvcHRpb25zID1cbiAgICB0eXBlb2YgbWF4RGVwdGhPck9wdGlvbnMgPT09ICdudW1iZXInID8gbWF5YmVPcHRpb25zIDogbWF4RGVwdGhPck9wdGlvbnM7XG4gIGNvbnN0IG1heERlcHRoID1cbiAgICB0eXBlb2YgbWF4RGVwdGhPck9wdGlvbnMgPT09ICdudW1iZXInID8gbWF4RGVwdGhPck9wdGlvbnMgOiAtMTtcbiAgaWYgKG1heERlcHRoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKG9uZSA9PT0gdHdvKSB7XG4gICAgLy8gU2hvcnQgY2lyY3VpdCBvbiBpZGVudGljYWwgb2JqZWN0IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiB0cmF2ZXJzaW5nIHRoZW0uXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2Ygb25lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0d28gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBXZSBjb25zaWRlciBhbGwgZnVuY3Rpb25zIGVxdWFsIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgb3RoZXJ3aXNlXG4gICAgbGV0IHVuc2FmZWx5SWdub3JlRnVuY3Rpb25zID0gb3B0aW9ucz8udW5zYWZlbHlJZ25vcmVGdW5jdGlvbnM7XG4gICAgaWYgKHVuc2FmZWx5SWdub3JlRnVuY3Rpb25zID09IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbG9nTGlzdGVuZXJzICYmXG4gICAgICAgIGxvZ0xpc3RlbmVycy5vbkRpZmZlcmVudEZ1bmN0aW9uc0lnbm9yZWQgJiZcbiAgICAgICAgKCFvcHRpb25zIHx8ICEoJ3Vuc2FmZWx5SWdub3JlRnVuY3Rpb25zJyBpbiBvcHRpb25zKSlcbiAgICAgICkge1xuICAgICAgICBsb2dMaXN0ZW5lcnMub25EaWZmZXJlbnRGdW5jdGlvbnNJZ25vcmVkKG9uZS5uYW1lLCB0d28ubmFtZSk7XG4gICAgICB9XG4gICAgICB1bnNhZmVseUlnbm9yZUZ1bmN0aW9ucyA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhdW5zYWZlbHlJZ25vcmVGdW5jdGlvbnM7XG4gIH1cbiAgaWYgKHR5cGVvZiBvbmUgIT09ICdvYmplY3QnIHx8IG9uZSA9PT0gbnVsbCkge1xuICAgIC8vIFByaW1pdGl2ZXMgY2FuIGJlIGRpcmVjdGx5IGNvbXBhcmVkXG4gICAgcmV0dXJuIG9uZSAhPT0gdHdvO1xuICB9XG4gIGlmICh0eXBlb2YgdHdvICE9PSAnb2JqZWN0JyB8fCB0d28gPT09IG51bGwpIHtcbiAgICAvLyBXZSBrbm93IHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHRoZSBwcmV2aW91cyBjYXNlIHdvdWxkIGhhdmUgdHJpZ2dlcmVkXG4gICAgLy8gb3RoZXJ3aXNlLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChvbmUuY29uc3RydWN0b3IgIT09IHR3by5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG9uZSkpIHtcbiAgICAvLyBXZSBrbm93IHR3byBpcyBhbHNvIGFuIGFycmF5IGJlY2F1c2UgdGhlIGNvbnN0cnVjdG9ycyBhcmUgZXF1YWxcbiAgICBjb25zdCBsZW4gPSBvbmUubGVuZ3RoO1xuICAgIGlmICh0d28ubGVuZ3RoICE9PSBsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgbGVuOyBpaSsrKSB7XG4gICAgICBpZiAoZGVlcERpZmZlcihvbmVbaWldLCB0d29baWldLCBtYXhEZXB0aCAtIDEsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvbmUpIHtcbiAgICAgIGlmIChkZWVwRGlmZmVyKG9uZVtrZXldLCB0d29ba2V5XSwgbWF4RGVwdGggLSAxLCBvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCB0d29LZXkgaW4gdHdvKSB7XG4gICAgICAvLyBUaGUgb25seSBjYXNlIHdlIGhhdmVuJ3QgY2hlY2tlZCB5ZXQgaXMga2V5cyB0aGF0IGFyZSBpbiB0d28gYnV0IGFyZW4ndFxuICAgICAgLy8gaW4gb25lLCB3aGljaCBtZWFucyB0aGV5IGFyZSBkaWZmZXJlbnQuXG4gICAgICBpZiAob25lW3R3b0tleV0gPT09IHVuZGVmaW5lZCAmJiB0d29bdHdvS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5kZWVwRGlmZmVyLnVuc3RhYmxlX3NldExvZ0xpc3RlbmVycyA9IHVuc3RhYmxlX3NldExvZ0xpc3RlbmVycztcbm1vZHVsZS5leHBvcnRzID0gZGVlcERpZmZlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RXh0ZW5kZWRFcnJvcn0gZnJvbSAnLi9FeHRlbmRlZEVycm9yJztcblxuaW1wb3J0IHtTeW50aGV0aWNFcnJvciwgaGFuZGxlRXhjZXB0aW9ufSBmcm9tICcuL0V4Y2VwdGlvbnNNYW5hZ2VyJztcblxuZXhwb3J0IHR5cGUgQ2FwdHVyZWRFcnJvciA9IHtcbiAgK2NvbXBvbmVudFN0YWNrOiBzdHJpbmcsXG4gICtlcnJvcjogbWl4ZWQsXG4gICtlcnJvckJvdW5kYXJ5OiA/ey4uLn0sXG4gIC4uLlxufTtcblxuY29uc3QgUmVhY3RGaWJlckVycm9yRGlhbG9nID0ge1xuICAvKipcbiAgICogSW50ZXJjZXB0IGxpZmVjeWNsZSBlcnJvcnMgYW5kIGVuc3VyZSB0aGV5IGFyZSBzaG93biB3aXRoIHRoZSBjb3JyZWN0IHN0YWNrXG4gICAqIHRyYWNlIHdpdGhpbiB0aGUgbmF0aXZlIHJlZGJveCBjb21wb25lbnQuXG4gICAqL1xuICBzaG93RXJyb3JEaWFsb2coe2NvbXBvbmVudFN0YWNrLCBlcnJvcjogZXJyb3JWYWx1ZX06IENhcHR1cmVkRXJyb3IpOiBib29sZWFuIHtcbiAgICBsZXQgZXJyb3I6ID9FeHRlbmRlZEVycm9yO1xuXG4gICAgLy8gVHlwaWNhbGx5LCBgZXJyb3JWYWx1ZWAgc2hvdWxkIGJlIGFuIGVycm9yLiBIb3dldmVyLCBvdGhlciB2YWx1ZXMgc3VjaCBhc1xuICAgIC8vIHN0cmluZ3MgKG9yIGV2ZW4gbnVsbCkgYXJlIHNvbWV0aW1lcyB0aHJvd24uXG4gICAgaWYgKGVycm9yVmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLyogJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yXG4gICAgICAgKiB0aGlzIHBhcmFtZXRlcnMgKi9cbiAgICAgIGVycm9yID0gKGVycm9yVmFsdWU6IEV4dGVuZGVkRXJyb3IpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvKiAkRmxvd0ZpeE1lW2NsYXNzLW9iamVjdC1zdWJ0eXBpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3JcbiAgICAgICAqIHRoaXMgcGFyYW1ldGVycyAqL1xuICAgICAgZXJyb3IgPSAobmV3IFN5bnRoZXRpY0Vycm9yKGVycm9yVmFsdWUpOiBFeHRlbmRlZEVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yXG4gICAgICAgKiB0aGlzIHBhcmFtZXRlcnMgKi9cbiAgICAgIGVycm9yID0gKG5ldyBTeW50aGV0aWNFcnJvcignVW5zcGVjaWZpZWQgZXJyb3InKTogRXh0ZW5kZWRFcnJvcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBlcnJvci5jb21wb25lbnRTdGFjayA9IGNvbXBvbmVudFN0YWNrO1xuICAgICAgZXJyb3IuaXNDb21wb25lbnRFcnJvciA9IHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmVkLlxuICAgIH1cblxuICAgIGhhbmRsZUV4Y2VwdGlvbihlcnJvciwgZmFsc2UpO1xuXG4gICAgLy8gUmV0dXJuIGZhbHNlIGhlcmUgdG8gcHJldmVudCBSZWFjdEZpYmVyRXJyb3JMb2dnZXIgZGVmYXVsdCBiZWhhdmlvciBvZlxuICAgIC8vIGxvZ2dpbmcgZXJyb3IgZGV0YWlscyB0byBjb25zb2xlLmVycm9yLiBDYWxscyB0byBjb25zb2xlLmVycm9yIGFyZVxuICAgIC8vIGF1dG9tYXRpY2FsbHkgcm91dGVkIHRvIHRoZSBuYXRpdmUgcmVkYm94IGNvbnRyb2xsZXIsIHdoaWNoIHdlJ3ZlIGFscmVhZHlcbiAgICAvLyBkb25lIGFib3ZlIGJ5IGNhbGxpbmcgRXhjZXB0aW9uc01hbmFnZXIuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3RGaWJlckVycm9yRGlhbG9nO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtJRXZlbnRFbWl0dGVyfSBmcm9tICcuLi92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbmV4cG9ydCB0eXBlIFJhd0V2ZW50RW1pdHRlckV2ZW50ID0gJFJlYWRPbmx5PHt8XG4gIGV2ZW50TmFtZTogc3RyaW5nLFxuICAvLyBXZSBleHBlY3QsIGJ1dCBkbyBub3QvY2Fubm90IHJlcXVpcmUsIHRoYXQgbmF0aXZlRXZlbnQgaXMgYW4gb2JqZWN0XG4gIC8vIHdpdGggdGhlIHByb3BlcnRpZXM6IGtleSwgZWxlbWVudFR5cGUgKHN0cmluZyksIHR5cGUgKHN0cmluZyksIHRhZyAobnVtZXJpYyksXG4gIC8vIGFuZCBhIHN0YXRlTm9kZSBvZiB0aGUgbmF0aXZlIGVsZW1lbnQvRmliZXIgdGhlIGV2ZW50IHdhcyBlbWl0dGVkIHRvLlxuICBuYXRpdmVFdmVudDoge1tzdHJpbmddOiBtaXhlZH0sXG58fT47XG5cbnR5cGUgUmF3RXZlbnREZWZpbml0aW9ucyA9IHtcbiAgW2V2ZW50Q2hhbm5lbDogc3RyaW5nXTogW1Jhd0V2ZW50RW1pdHRlckV2ZW50XSxcbn07XG5cbmNvbnN0IFJhd0V2ZW50RW1pdHRlcjogSUV2ZW50RW1pdHRlcjxSYXdFdmVudERlZmluaXRpb25zPiA9XG4gIG5ldyBFdmVudEVtaXR0ZXI8UmF3RXZlbnREZWZpbml0aW9ucz4oKTtcblxuLy8gU2VlIHRoZSBSZWFjdCByZW5kZXJlciAvIHJlYWN0IHJlcG8gZm9yIGhvdyB0aGlzIGlzIHVzZWQuXG4vLyBSYXcgZXZlbnRzIGFyZSBlbWl0dGVkIGhlcmUgd2hlbiB0aGV5IGFyZSByZWNlaXZlZCBpbiBKU1xuLy8gYW5kIGJlZm9yZSBhbnkgZXZlbnQgUGx1Z2lucyBwcm9jZXNzIHRoZW0gb3IgYmVmb3JlIGNvbXBvbmVudHNcbi8vIGhhdmUgYSBjaGFuY2UgdG8gcmVzcG9uZCB0byB0aGVtLiBUaGlzIGFsbG93cyB5b3UgdG8gaW1wbGVtZW50XG4vLyBhcHAtc3BlY2lmaWMgcGVyZiBtb25pdG9yaW5nLCB3aGljaCBpcyB1bmltcGxlbWVudGVkIGJ5IGRlZmF1bHQsXG4vLyBtYWtpbmcgdGhpcyBlbnRpcmUgUmF3RXZlbnRFbWl0dGVyIGRvIG5vdGhpbmcgYnkgZGVmYXVsdCB1bnRpbFxuLy8gKnlvdSogYWRkIGxpc3RlbmVycyBmb3IgeW91ciBvd24gYXBwLlxuLy8gQmVzaWRlcyBwZXJmIG1vbml0b3JpbmcgYW5kIG1heWJlIGRlYnVnZ2luZywgdGhpcyBSYXdFdmVudEVtaXR0ZXJcbi8vIHNob3VsZCBub3QgYmUgdXNlZC5cbmV4cG9ydCBkZWZhdWx0IFJhd0V2ZW50RW1pdHRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4vLyBNYWtlIHN1cmUgZ2xvYmFsIEV2ZW50IGlzIGRlZmluZWRcbmltcG9ydCBFdmVudFBvbHlmaWxsIGZyb20gJy4vRXZlbnRQb2x5ZmlsbCc7XG5cbnR5cGUgQ3VzdG9tRXZlbnQkT3B0aW9ucyA9ICRSZWFkT25seTx7fFxuICBidWJibGVzPzogYm9vbGVhbixcbiAgY2FuY2VsYWJsZT86IGJvb2xlYW4sXG4gIGNvbXBvc2VkPzogYm9vbGVhbixcbiAgZGV0YWlsPzogey4uLn0sXG58fT47XG5cbmNsYXNzIEN1c3RvbUV2ZW50IGV4dGVuZHMgRXZlbnRQb2x5ZmlsbCB7XG4gIGRldGFpbDogP3suLi59O1xuXG4gIGNvbnN0cnVjdG9yKHR5cGVBcmc6IHN0cmluZywgb3B0aW9uczogQ3VzdG9tRXZlbnQkT3B0aW9ucykge1xuICAgIGNvbnN0IHtidWJibGVzLCBjYW5jZWxhYmxlLCBjb21wb3NlZH0gPSBvcHRpb25zO1xuICAgIHN1cGVyKHR5cGVBcmcsIHtidWJibGVzLCBjYW5jZWxhYmxlLCBjb21wb3NlZH0pO1xuXG4gICAgdGhpcy5kZXRhaWwgPSBvcHRpb25zLmRldGFpbDsgLy8gdGhpcyB3b3VsZCBjb3JyZXNwb25kIHRvIGBOYXRpdmVFdmVudGAgaW4gU3ludGhldGljRXZlbnRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21FdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4vLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RpY3RkZWYtZXZlbnRpbml0XG50eXBlIEV2ZW50JEluaXQgPSB7XG4gIGJ1YmJsZXM/OiBib29sZWFuLFxuICBjYW5jZWxhYmxlPzogYm9vbGVhbixcbiAgY29tcG9zZWQ/OiBib29sZWFuLFxuICAvKiogTm9uLXN0YW5kYXJkLiBTZWUgYGNvbXBvc2VkYCBpbnN0ZWFkLiAqL1xuICBzY29wZWQ/OiBib29sZWFuLFxuICAuLi5cbn07XG5cbi8qKlxuICogVGhpcyBpcyBhIGNvcHkgb2YgdGhlIEV2ZW50IGludGVyZmFjZSBkZWZpbmVkIGluIEZsb3c6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9ibG9iLzc0MTEwNGU2OWM0MzA1N2ViZDMyODA0ZGQ2YmNjMWI1ZTk3NTQ4ZWEvbGliL2RvbS5qc1xuICogd2hpY2ggaXMgaXRzZWxmIGEgZmFpdGhmdWwgaW50ZXJmYWNlIG9mIHRoZSBXMyBzcGVjOlxuICogaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZXZlbnRcbiAqXG4gKiBTaW5jZSBGbG93IGFzc3VtZXMgdGhhdCBFdmVudCBpcyBwcm92aWRlZCBhbmQgaXMgb24gdGhlIGdsb2JhbCBvYmplY3QsXG4gKiB3ZSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgRXZlbnQgZm9yIEN1c3RvbUV2ZW50IChhbmQgZnV0dXJlXG4gKiBhbGlnbm1lbnQgb2YgUmVhY3QgTmF0aXZlJ3MgZXZlbnQgc3lzdGVtIHdpdGggdGhlIFczIHNwZWMpLlxuICovXG5pbnRlcmZhY2UgSUV2ZW50IHtcbiAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBldmVudEluaXREaWN0PzogRXZlbnQkSW5pdCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIGV2ZW50LCBlLmcuIFwiY2xpY2tcIiwgXCJoYXNoY2hhbmdlXCIsIG9yIFwic3VibWl0XCIuXG4gICAqL1xuICArdHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgb2JqZWN0IHRvIHdoaWNoIGV2ZW50IGlzIGRpc3BhdGNoZWQgKGl0cyB0YXJnZXQpLlxuICAgKi9cbiAgK3RhcmdldDogRXZlbnRUYXJnZXQ7IC8vIFRPRE86IG51bGxhYmxlXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICArc3JjRWxlbWVudDogRWxlbWVudDsgLy8gVE9ETzogbnVsbGFibGVcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9iamVjdCB3aG9zZSBldmVudCBsaXN0ZW5lcidzIGNhbGxiYWNrIGlzIGN1cnJlbnRseSBiZWluZyBpbnZva2VkLlxuICAgKi9cbiAgK2N1cnJlbnRUYXJnZXQ6IEV2ZW50VGFyZ2V0OyAvLyBUT0RPOiBudWxsYWJsZVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW52b2NhdGlvbiB0YXJnZXQgb2JqZWN0cyBvZiBldmVudCdzIHBhdGggKG9iamVjdHMgb24gd2hpY2hcbiAgICogbGlzdGVuZXJzIHdpbGwgYmUgaW52b2tlZCksIGV4Y2VwdCBmb3IgYW55IG5vZGVzIGluIHNoYWRvdyB0cmVlcyBvZiB3aGljaFxuICAgKiB0aGUgc2hhZG93IHJvb3QncyBtb2RlIGlzIFwiY2xvc2VkXCIgdGhhdCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIGV2ZW50J3NcbiAgICogY3VycmVudFRhcmdldC5cbiAgICovXG4gIGNvbXBvc2VkUGF0aCgpOiBBcnJheTxFdmVudFRhcmdldD47XG5cbiAgK05PTkU6IG51bWJlcjtcbiAgK0FUX1RBUkdFVDogbnVtYmVyO1xuICArQlVCQkxJTkdfUEhBU0U6IG51bWJlcjtcbiAgK0NBUFRVUklOR19QSEFTRTogbnVtYmVyO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXZlbnQncyBwaGFzZSwgd2hpY2ggaXMgb25lIG9mIE5PTkUsIENBUFRVUklOR19QSEFTRSwgQVRfVEFSR0VULFxuICAgKiBhbmQgQlVCQkxJTkdfUEhBU0UuXG4gICAqL1xuICArZXZlbnRQaGFzZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGRpc3BhdGNoZWQgaW4gYSB0cmVlLCBpbnZva2luZyB0aGlzIG1ldGhvZCBwcmV2ZW50cyBldmVudCBmcm9tIHJlYWNoaW5nXG4gICAqIGFueSBvYmplY3RzIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgKi9cbiAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBJbnZva2luZyB0aGlzIG1ldGhvZCBwcmV2ZW50cyBldmVudCBmcm9tIHJlYWNoaW5nIGFueSByZWdpc3RlcmVkIGV2ZW50XG4gICAqIGxpc3RlbmVycyBhZnRlciB0aGUgY3VycmVudCBvbmUgZmluaXNoZXMgcnVubmluZyBhbmQsIHdoZW4gZGlzcGF0Y2hlZCBpbiBhXG4gICAqIHRyZWUsIGFsc28gcHJldmVudHMgZXZlbnQgZnJvbSByZWFjaGluZyBhbnkgb3RoZXIgb2JqZWN0cy5cbiAgICovXG4gIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIGhvdyBldmVudCB3YXMgaW5pdGlhbGl6ZWQuIFRydWUgaWZcbiAgICogZXZlbnQgZ29lcyB0aHJvdWdoIGl0cyB0YXJnZXQncyBhbmNlc3RvcnMgaW4gcmV2ZXJzZSB0cmVlIG9yZGVyLCBhbmRcbiAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgK2J1YmJsZXM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIGhvdyBldmVudCB3YXMgaW5pdGlhbGl6ZWQuIEl0c1xuICAgKiByZXR1cm4gdmFsdWUgZG9lcyBub3QgYWx3YXlzIGNhcnJ5IG1lYW5pbmcsIGJ1dCB0cnVlIGNhbiBpbmRpY2F0ZVxuICAgKiB0aGF0IHBhcnQgb2YgdGhlIG9wZXJhdGlvbiBkdXJpbmcgd2hpY2ggZXZlbnQgd2FzIGRpc3BhdGNoZWQsIGNhblxuICAgKiBiZSBjYW5jZWxlZCBieSBpbnZva2luZyB0aGUgcHJldmVudERlZmF1bHQoKSBtZXRob2QuXG4gICAqL1xuICArY2FuY2VsYWJsZTogYm9vbGVhbjtcbiAgLy8gcmV0dXJuVmFsdWU6IGJvb2xlYW47IC8vIGxlZ2FjeSwgYW5kIHNvbWUgc3ViY2xhc3NlcyBzdGlsbCBkZWZpbmUgaXQgYXMgYSBzdHJpbmchXG4gIC8qKlxuICAgKiBJZiBpbnZva2VkIHdoZW4gdGhlIGNhbmNlbGFibGUgYXR0cmlidXRlIHZhbHVlIGlzIHRydWUsIGFuZCB3aGlsZVxuICAgKiBleGVjdXRpbmcgYSBsaXN0ZW5lciBmb3IgdGhlIGV2ZW50IHdpdGggcGFzc2l2ZSBzZXQgdG8gZmFsc2UsIHNpZ25hbHMgdG9cbiAgICogdGhlIG9wZXJhdGlvbiB0aGF0IGNhdXNlZCBldmVudCB0byBiZSBkaXNwYXRjaGVkIHRoYXQgaXQgbmVlZHMgdG8gYmVcbiAgICogY2FuY2VsZWQuXG4gICAqL1xuICBwcmV2ZW50RGVmYXVsdCgpOiB2b2lkO1xuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHByZXZlbnREZWZhdWx0KCkgd2FzIGludm9rZWQgc3VjY2Vzc2Z1bGx5IHRvIGluZGljYXRlXG4gICAqIGNhbmNlbGF0aW9uLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgK2RlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIGhvdyBldmVudCB3YXMgaW5pdGlhbGl6ZWQuIFRydWUgaWZcbiAgICogZXZlbnQgaW52b2tlcyBsaXN0ZW5lcnMgcGFzdCBhIFNoYWRvd1Jvb3Qgbm9kZSB0aGF0IGlzIHRoZSByb290IG9mIGl0c1xuICAgKiB0YXJnZXQsIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICArY29tcG9zZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBldmVudCB3YXMgZGlzcGF0Y2hlZCBieSB0aGUgdXNlciBhZ2VudCwgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gICtpc1RydXN0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBldmVudCdzIHRpbWVzdGFtcCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBtZWFzdXJlZCByZWxhdGl2ZVxuICAgKiB0byB0aGUgdGltZSBvcmlnaW4uXG4gICAqL1xuICArdGltZVN0YW1wOiBudW1iZXI7XG5cbiAgLyoqIE5vbi1zdGFuZGFyZC4gU2VlIEV2ZW50LnByb3RvdHlwZS5jb21wb3NlZFBhdGggKi9cbiAgK2RlZXBQYXRoPzogKCkgPT4gRXZlbnRUYXJnZXRbXTtcbiAgLyoqIE5vbi1zdGFuZGFyZC4gU2VlIEV2ZW50LnByb3RvdHlwZS5jb21wb3NlZCAqL1xuICArc2NvcGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgaW5pdEV2ZW50KHR5cGU6IHN0cmluZywgYnViYmxlczogYm9vbGVhbiwgY2FuY2VsYWJsZTogYm9vbGVhbik6IHZvaWQ7XG59XG5cbmNsYXNzIEV2ZW50UG9seWZpbGwgaW1wbGVtZW50cyBJRXZlbnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIGJ1YmJsZXM6IGJvb2xlYW47XG4gIGNhbmNlbGFibGU6IGJvb2xlYW47XG4gIGNvbXBvc2VkOiBib29sZWFuO1xuICAvLyBOb24tc3RhbmRhcmQuIFNlZSBgY29tcG9zZWRgIGluc3RlYWQuXG4gIHNjb3BlZDogYm9vbGVhbjtcbiAgaXNUcnVzdGVkOiBib29sZWFuO1xuICBkZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuICB0aW1lU3RhbXA6IG51bWJlcjtcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvZXZlbnRQaGFzZVxuICBOT05FOiBudW1iZXI7XG4gIEFUX1RBUkdFVDogbnVtYmVyO1xuICBCVUJCTElOR19QSEFTRTogbnVtYmVyO1xuICBDQVBUVVJJTkdfUEhBU0U6IG51bWJlcjtcblxuICBldmVudFBoYXNlOiBudW1iZXI7XG5cbiAgY3VycmVudFRhcmdldDogRXZlbnRUYXJnZXQ7IC8vIFRPRE86IG51bGxhYmxlXG4gIHRhcmdldDogRXZlbnRUYXJnZXQ7IC8vIFRPRE86IG51bGxhYmxlXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBzcmNFbGVtZW50OiBFbGVtZW50OyAvLyBUT0RPOiBudWxsYWJsZVxuXG4gIC8vIFJlYWN0IE5hdGl2ZS1zcGVjaWZpYzogcHJveHkgZGF0YSB0byBhIFN5bnRoZXRpY0V2ZW50IHdoZW5cbiAgLy8gY2VydGFpbiBtZXRob2RzIGFyZSBjYWxsZWQuXG4gIC8vIFN5bnRoZXRpY0V2ZW50IHdpbGwgYWxzbyBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoaXMgaW5zdGFuY2UgLVxuICAvLyBpdCBpcyBjaXJjdWxhciAtIGFuZCBib3RoIGNsYXNzZXMgdXNlIHRoaXMgcmVmZXJlbmNlIHRvIGtlZXBcbiAgLy8gZGF0YSB3aXRoIHRoZSBvdGhlciBpbiBzeW5jLlxuICBfc3ludGhldGljRXZlbnQ6IG1peGVkO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgZXZlbnRJbml0RGljdD86IEV2ZW50JEluaXQpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYnViYmxlcyA9ICEhKGV2ZW50SW5pdERpY3Q/LmJ1YmJsZXMgfHwgZmFsc2UpO1xuICAgIHRoaXMuY2FuY2VsYWJsZSA9ICEhKGV2ZW50SW5pdERpY3Q/LmNhbmNlbGFibGUgfHwgZmFsc2UpO1xuICAgIHRoaXMuY29tcG9zZWQgPSAhIShldmVudEluaXREaWN0Py5jb21wb3NlZCB8fCBmYWxzZSk7XG4gICAgdGhpcy5zY29wZWQgPSAhIShldmVudEluaXREaWN0Py5zY29wZWQgfHwgZmFsc2UpO1xuXG4gICAgLy8gVE9ETzogc29tZWhvdyBndWFyYW50ZWUgdGhhdCBvbmx5IFwicHJpdmF0ZVwiIGluc3RhbnRpYXRpb25zIG9mIEV2ZW50XG4gICAgLy8gY2FuIHNldCB0aGlzIHRvIHRydWVcbiAgICB0aGlzLmlzVHJ1c3RlZCA9IGZhbHNlO1xuXG4gICAgLy8gVE9ETzogaW4gdGhlIGZ1dHVyZSB3ZSdsbCB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGhhcyB0aGUgc2FtZVxuICAgIC8vIHRpbWUtYmFzaXMgYXMgZXZlbnRzIG9yaWdpbmF0aW5nIGZyb20gbmF0aXZlXG4gICAgdGhpcy50aW1lU3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvZXZlbnRQaGFzZVxuICAgIHRoaXMuTk9ORSA9IDA7XG4gICAgdGhpcy5BVF9UQVJHRVQgPSAxO1xuICAgIHRoaXMuQlVCQkxJTkdfUEhBU0UgPSAyO1xuICAgIHRoaXMuQ0FQVFVSSU5HX1BIQVNFID0gMztcbiAgICB0aGlzLmV2ZW50UGhhc2UgPSB0aGlzLk5PTkU7XG5cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLnNyY0VsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgY29tcG9zZWRQYXRoKCk6IEFycmF5PEV2ZW50VGFyZ2V0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPOiBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwcmV2ZW50RGVmYXVsdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX3N5bnRoZXRpY0V2ZW50ICE9IG51bGwpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHRoaXMuX3N5bnRoZXRpY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgaW5pdEV2ZW50KHR5cGU6IHN0cmluZywgYnViYmxlczogYm9vbGVhbiwgY2FuY2VsYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdUT0RPOiBub3QgeWV0IGltcGxlbWVudGVkLiBUaGlzIG1ldGhvZCBpcyBhbHNvIGRlcHJlY2F0ZWQuJyxcbiAgICApO1xuICB9XG5cbiAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETzogbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zeW50aGV0aWNFdmVudCAhPSBudWxsKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICB0aGlzLl9zeW50aGV0aWNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBzZXRTeW50aGV0aWNFdmVudCh2YWx1ZTogbWl4ZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zeW50aGV0aWNFdmVudCA9IHZhbHVlO1xuICB9XG59XG5cbi8vIEFzc2VydGlvbiBtYWdpYyBmb3IgcG9seWZpbGwgZm9sbG93cy5cbmRlY2xhcmUgdmFyIGNoZWNrRXZlbnQ6IEV2ZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbi8qOjpcbi8vIFRoaXMgY2FuIGJlIGEgc3RyaWN0IG1vZGUgZXJyb3IgYXQgcnVudGltZSBzbyBwdXQgaXQgaW4gYSBGbG93IGNvbW1lbnQuXG4oY2hlY2tFdmVudDogSUV2ZW50KTtcbiovXG5cbmdsb2JhbC5FdmVudCA9IEV2ZW50UG9seWZpbGw7XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50UG9seWZpbGw7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7QXR0cmlidXRlQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5cbmltcG9ydCBmbGF0dGVuU3R5bGUgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9mbGF0dGVuU3R5bGUnO1xuaW1wb3J0IGRlZXBEaWZmZXIgZnJvbSAnLi4vLi4vVXRpbGl0aWVzL2RpZmZlci9kZWVwRGlmZmVyJztcblxuY29uc3QgZW1wdHlPYmplY3QgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwYXlsb2FkIHRoYXQgY29udGFpbnMgYWxsIHRoZSB1cGRhdGVzIGJldHdlZW4gdHdvIHNldHMgb2YgcHJvcHMuXG4gKlxuICogVGhlc2UgaGVscGVycyBhcmUgYWxsIGVuY2Fwc3VsYXRlZCBpbnRvIGEgc2luZ2xlIG1vZHVsZSwgYmVjYXVzZSB0aGV5IHVzZVxuICogbXV0YXRpb24gYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2hpY2ggbGVhZHMgdG8gc3VidGxlIHNoYXJlZFxuICogZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIGNvZGUgcGF0aHMuIFRvIGF2b2lkIHRoaXMgbXV0YWJsZSBzdGF0ZSBsZWFraW5nXG4gKiBhY3Jvc3MgbW9kdWxlcywgSSd2ZSBrZXB0IHRoZW0gaXNvbGF0ZWQgdG8gdGhpcyBtb2R1bGUuXG4gKi9cblxudHlwZSBOZXN0ZWROb2RlID0gQXJyYXk8TmVzdGVkTm9kZT4gfCBPYmplY3Q7XG5cbi8vIFRyYWNrcyByZW1vdmVkIGtleXNcbmxldCByZW1vdmVkS2V5czoge1tzdHJpbmddOiBib29sZWFufSB8IG51bGwgPSBudWxsO1xubGV0IHJlbW92ZWRLZXlDb3VudCA9IDA7XG5cbmNvbnN0IGRlZXBEaWZmZXJPcHRpb25zID0ge1xuICB1bnNhZmVseUlnbm9yZUZ1bmN0aW9uczogdHJ1ZSxcbn07XG5cbmZ1bmN0aW9uIGRlZmF1bHREaWZmZXIocHJldlByb3A6IG1peGVkLCBuZXh0UHJvcDogbWl4ZWQpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBuZXh0UHJvcCAhPT0gJ29iamVjdCcgfHwgbmV4dFByb3AgPT09IG51bGwpIHtcbiAgICAvLyBTY2FsYXJzIGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNrZWQgZm9yIGVxdWFsaXR5XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgLy8gRm9yIG9iamVjdHMgYW5kIGFycmF5cywgdGhlIGRlZmF1bHQgZGlmZmluZyBhbGdvcml0aG0gaXMgYSBkZWVwIGNvbXBhcmVcbiAgICByZXR1cm4gZGVlcERpZmZlcihwcmV2UHJvcCwgbmV4dFByb3AsIGRlZXBEaWZmZXJPcHRpb25zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN0b3JlRGVsZXRlZFZhbHVlc0luTmVzdGVkQXJyYXkoXG4gIHVwZGF0ZVBheWxvYWQ6IE9iamVjdCxcbiAgbm9kZTogTmVzdGVkTm9kZSxcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgbGV0IGkgPSBub2RlLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tICYmIHJlbW92ZWRLZXlDb3VudCA+IDApIHtcbiAgICAgIHJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheShcbiAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgbm9kZVtpXSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzLFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZSAmJiByZW1vdmVkS2V5Q291bnQgPiAwKSB7XG4gICAgY29uc3Qgb2JqID0gbm9kZTtcbiAgICBmb3IgKGNvbnN0IHByb3BLZXkgaW4gcmVtb3ZlZEtleXMpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgaWYgKCFyZW1vdmVkS2V5c1twcm9wS2V5XSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBuZXh0UHJvcCA9IG9ialtwcm9wS2V5XTtcbiAgICAgIGlmIChuZXh0UHJvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVDb25maWcgPSB2YWxpZEF0dHJpYnV0ZXNbcHJvcEtleV07XG4gICAgICBpZiAoIWF0dHJpYnV0ZUNvbmZpZykge1xuICAgICAgICBjb250aW51ZTsgLy8gbm90IGEgdmFsaWQgbmF0aXZlIHByb3BcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgIG5leHRQcm9wID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgbmV4dFByb3AgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZUNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gY2FzZTogIU9iamVjdCBpcyB0aGUgZGVmYXVsdCBjYXNlXG4gICAgICAgIHVwZGF0ZVBheWxvYWRbcHJvcEtleV0gPSBuZXh0UHJvcDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcuZGlmZiA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICAvLyBjYXNlOiBDdXN0b21BdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9XG4gICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzKG5leHRQcm9wKVxuICAgICAgICAgICAgOiBuZXh0UHJvcDtcbiAgICAgICAgdXBkYXRlUGF5bG9hZFtwcm9wS2V5XSA9IG5leHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgcmVtb3ZlZEtleXNbcHJvcEtleV0gPSBmYWxzZTtcbiAgICAgIHJlbW92ZWRLZXlDb3VudC0tO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkaWZmTmVzdGVkQXJyYXlQcm9wZXJ0eShcbiAgdXBkYXRlUGF5bG9hZDogbnVsbCB8IE9iamVjdCxcbiAgcHJldkFycmF5OiBBcnJheTxOZXN0ZWROb2RlPixcbiAgbmV4dEFycmF5OiBBcnJheTxOZXN0ZWROb2RlPixcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKTogbnVsbCB8IE9iamVjdCB7XG4gIGNvbnN0IG1pbkxlbmd0aCA9XG4gICAgcHJldkFycmF5Lmxlbmd0aCA8IG5leHRBcnJheS5sZW5ndGggPyBwcmV2QXJyYXkubGVuZ3RoIDogbmV4dEFycmF5Lmxlbmd0aDtcbiAgbGV0IGk7XG4gIGZvciAoaSA9IDA7IGkgPCBtaW5MZW5ndGg7IGkrKykge1xuICAgIC8vIERpZmYgYW55IGl0ZW1zIGluIHRoZSBhcnJheSBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uIFJlcGVhdGVkIGtleXNcbiAgICAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGxhdGVyIHZhbHVlcy5cbiAgICB1cGRhdGVQYXlsb2FkID0gZGlmZk5lc3RlZFByb3BlcnR5KFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIHByZXZBcnJheVtpXSxcbiAgICAgIG5leHRBcnJheVtpXSxcbiAgICAgIHZhbGlkQXR0cmlidXRlcyxcbiAgICApO1xuICB9XG4gIGZvciAoOyBpIDwgcHJldkFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gQ2xlYXIgb3V0IGFsbCByZW1haW5pbmcgcHJvcGVydGllcy5cbiAgICB1cGRhdGVQYXlsb2FkID0gY2xlYXJOZXN0ZWRQcm9wZXJ0eShcbiAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICBwcmV2QXJyYXlbaV0sXG4gICAgICB2YWxpZEF0dHJpYnV0ZXMsXG4gICAgKTtcbiAgfVxuICBmb3IgKDsgaSA8IG5leHRBcnJheS5sZW5ndGg7IGkrKykge1xuICAgIC8vIEFkZCBhbGwgcmVtYWluaW5nIHByb3BlcnRpZXMuXG4gICAgdXBkYXRlUGF5bG9hZCA9IGFkZE5lc3RlZFByb3BlcnR5KFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIG5leHRBcnJheVtpXSxcbiAgICAgIHZhbGlkQXR0cmlidXRlcyxcbiAgICApO1xuICB9XG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuXG5mdW5jdGlvbiBkaWZmTmVzdGVkUHJvcGVydHkoXG4gIHVwZGF0ZVBheWxvYWQ6IG51bGwgfCBPYmplY3QsXG4gIHByZXZQcm9wOiBOZXN0ZWROb2RlLFxuICBuZXh0UHJvcDogTmVzdGVkTm9kZSxcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKTogbnVsbCB8IE9iamVjdCB7XG4gIGlmICghdXBkYXRlUGF5bG9hZCAmJiBwcmV2UHJvcCA9PT0gbmV4dFByb3ApIHtcbiAgICAvLyBJZiBubyBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhZGRlZCwgdGhlbiB3ZSBjYW4gYmFpbCBvdXQgcXVpY2tseSBvbiBvYmplY3RcbiAgICAvLyBlcXVhbGl0eS5cbiAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgfVxuXG4gIGlmICghcHJldlByb3AgfHwgIW5leHRQcm9wKSB7XG4gICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICByZXR1cm4gYWRkTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgbmV4dFByb3AsIHZhbGlkQXR0cmlidXRlcyk7XG4gICAgfVxuICAgIGlmIChwcmV2UHJvcCkge1xuICAgICAgcmV0dXJuIGNsZWFyTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgcHJldlByb3AsIHZhbGlkQXR0cmlidXRlcyk7XG4gICAgfVxuICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHByZXZQcm9wKSAmJiAhQXJyYXkuaXNBcnJheShuZXh0UHJvcCkpIHtcbiAgICAvLyBCb3RoIGFyZSBsZWF2ZXMsIHdlIGNhbiBkaWZmIHRoZSBsZWF2ZXMuXG4gICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKHVwZGF0ZVBheWxvYWQsIHByZXZQcm9wLCBuZXh0UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHByZXZQcm9wKSAmJiBBcnJheS5pc0FycmF5KG5leHRQcm9wKSkge1xuICAgIC8vIEJvdGggYXJlIGFycmF5cywgd2UgY2FuIGRpZmYgdGhlIGFycmF5cy5cbiAgICByZXR1cm4gZGlmZk5lc3RlZEFycmF5UHJvcGVydHkoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldlByb3AsXG4gICAgICBuZXh0UHJvcCxcbiAgICAgIHZhbGlkQXR0cmlidXRlcyxcbiAgICApO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocHJldlByb3ApKSB7XG4gICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIC8vICRGbG93Rml4TWUgLSBXZSBrbm93IHRoYXQgdGhpcyBpcyBhbHdheXMgYW4gb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzLlxuICAgICAgZmxhdHRlblN0eWxlKHByZXZQcm9wKSxcbiAgICAgIC8vICRGbG93Rml4TWUgLSBXZSBrbm93IHRoYXQgdGhpcyBpc24ndCBhbiBhcnJheSBiZWNhdXNlIG9mIGFib3ZlIGZsb3cuXG4gICAgICBuZXh0UHJvcCxcbiAgICAgIHZhbGlkQXR0cmlidXRlcyxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgcHJldlByb3AsXG4gICAgLy8gJEZsb3dGaXhNZSAtIFdlIGtub3cgdGhhdCB0aGlzIGlzIGFsd2F5cyBhbiBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMuXG4gICAgZmxhdHRlblN0eWxlKG5leHRQcm9wKSxcbiAgICB2YWxpZEF0dHJpYnV0ZXMsXG4gICk7XG59XG5cbi8qKlxuICogYWRkTmVzdGVkUHJvcGVydHkgdGFrZXMgYSBzaW5nbGUgc2V0IG9mIHByb3BzIGFuZCB2YWxpZCBhdHRyaWJ1dGVcbiAqIGF0dHJpYnV0ZSBjb25maWd1cmF0aW9ucy4gSXQgcHJvY2Vzc2VzIGVhY2ggcHJvcCBhbmQgYWRkcyBpdCB0byB0aGVcbiAqIHVwZGF0ZVBheWxvYWQuXG4gKi9cbmZ1bmN0aW9uIGFkZE5lc3RlZFByb3BlcnR5KFxuICB1cGRhdGVQYXlsb2FkOiBudWxsIHwgT2JqZWN0LFxuICBuZXh0UHJvcDogTmVzdGVkTm9kZSxcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKTogJEZsb3dGaXhNZSB7XG4gIGlmICghbmV4dFByb3ApIHtcbiAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShuZXh0UHJvcCkpIHtcbiAgICAvLyBBZGQgZWFjaCBwcm9wZXJ0eSBvZiB0aGUgbGVhZi5cbiAgICByZXR1cm4gYWRkUHJvcGVydGllcyh1cGRhdGVQYXlsb2FkLCBuZXh0UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV4dFByb3AubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBBZGQgYWxsIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhcnJheS5cbiAgICB1cGRhdGVQYXlsb2FkID0gYWRkTmVzdGVkUHJvcGVydHkoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgbmV4dFByb3BbaV0sXG4gICAgICB2YWxpZEF0dHJpYnV0ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuXG4vKipcbiAqIGNsZWFyTmVzdGVkUHJvcGVydHkgdGFrZXMgYSBzaW5nbGUgc2V0IG9mIHByb3BzIGFuZCB2YWxpZCBhdHRyaWJ1dGVzLiBJdFxuICogYWRkcyBhIG51bGwgc2VudGluZWwgdG8gdGhlIHVwZGF0ZVBheWxvYWQsIGZvciBlYWNoIHByb3Aga2V5LlxuICovXG5mdW5jdGlvbiBjbGVhck5lc3RlZFByb3BlcnR5KFxuICB1cGRhdGVQYXlsb2FkOiBudWxsIHwgT2JqZWN0LFxuICBwcmV2UHJvcDogTmVzdGVkTm9kZSxcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKTogbnVsbCB8IE9iamVjdCB7XG4gIGlmICghcHJldlByb3ApIHtcbiAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShwcmV2UHJvcCkpIHtcbiAgICAvLyBBZGQgZWFjaCBwcm9wZXJ0eSBvZiB0aGUgbGVhZi5cbiAgICByZXR1cm4gY2xlYXJQcm9wZXJ0aWVzKHVwZGF0ZVBheWxvYWQsIHByZXZQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2UHJvcC5sZW5ndGg7IGkrKykge1xuICAgIC8vIEFkZCBhbGwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFycmF5LlxuICAgIHVwZGF0ZVBheWxvYWQgPSBjbGVhck5lc3RlZFByb3BlcnR5KFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIHByZXZQcm9wW2ldLFxuICAgICAgdmFsaWRBdHRyaWJ1dGVzLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5cbi8qKlxuICogZGlmZlByb3BlcnRpZXMgdGFrZXMgdHdvIHNldHMgb2YgcHJvcHMgYW5kIGEgc2V0IG9mIHZhbGlkIGF0dHJpYnV0ZXNcbiAqIGFuZCB3cml0ZSB0byB1cGRhdGVQYXlsb2FkIHRoZSB2YWx1ZXMgdGhhdCBjaGFuZ2VkIG9yIHdlcmUgZGVsZXRlZC5cbiAqIElmIG5vIHVwZGF0ZVBheWxvYWQgaXMgcHJvdmlkZWQsIGEgbmV3IG9uZSBpcyBjcmVhdGVkIGFuZCByZXR1cm5lZCBpZlxuICogYW55dGhpbmcgY2hhbmdlZC5cbiAqL1xuZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoXG4gIHVwZGF0ZVBheWxvYWQ6IG51bGwgfCBPYmplY3QsXG4gIHByZXZQcm9wczogT2JqZWN0LFxuICBuZXh0UHJvcHM6IE9iamVjdCxcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKTogbnVsbCB8IE9iamVjdCB7XG4gIGxldCBhdHRyaWJ1dGVDb25maWc7XG4gIGxldCBuZXh0UHJvcDtcbiAgbGV0IHByZXZQcm9wO1xuXG4gIGZvciAoY29uc3QgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICBhdHRyaWJ1dGVDb25maWcgPSB2YWxpZEF0dHJpYnV0ZXNbcHJvcEtleV07XG4gICAgaWYgKCFhdHRyaWJ1dGVDb25maWcpIHtcbiAgICAgIGNvbnRpbnVlOyAvLyBub3QgYSB2YWxpZCBuYXRpdmUgcHJvcFxuICAgIH1cblxuICAgIHByZXZQcm9wID0gcHJldlByb3BzW3Byb3BLZXldO1xuICAgIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuXG4gICAgLy8gZnVuY3Rpb25zIGFyZSBjb252ZXJ0ZWQgdG8gYm9vbGVhbnMgYXMgbWFya2VycyB0aGF0IHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZXZlbnRzIHNob3VsZCBiZSBzZW50IGZyb20gbmF0aXZlLlxuICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG5leHRQcm9wID0gKHRydWU6IGFueSk7XG4gICAgICAvLyBJZiBuZXh0UHJvcCBpcyBub3QgYSBmdW5jdGlvbiwgdGhlbiBkb24ndCBib3RoZXIgY2hhbmdpbmcgcHJldlByb3BcbiAgICAgIC8vIHNpbmNlIG5leHRQcm9wIHdpbGwgd2luIGFuZCBnbyBpbnRvIHRoZSB1cGRhdGVQYXlsb2FkIHJlZ2FyZGxlc3MuXG4gICAgICBpZiAodHlwZW9mIHByZXZQcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByZXZQcm9wID0gKHRydWU6IGFueSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQW4gZXhwbGljaXQgdmFsdWUgb2YgdW5kZWZpbmVkIGlzIHRyZWF0ZWQgYXMgYSBudWxsIGJlY2F1c2UgaXQgb3ZlcnJpZGVzXG4gICAgLy8gYW55IG90aGVyIHByZWNlZGluZyB2YWx1ZS5cbiAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbmV4dFByb3AgPSAobnVsbDogYW55KTtcbiAgICAgIGlmICh0eXBlb2YgcHJldlByb3AgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByZXZQcm9wID0gKG51bGw6IGFueSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWRLZXlzKSB7XG4gICAgICByZW1vdmVkS2V5c1twcm9wS2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVQYXlsb2FkICYmIHVwZGF0ZVBheWxvYWRbcHJvcEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU29tZXRoaW5nIGVsc2UgYWxyZWFkeSB0cmlnZ2VyZWQgYW4gdXBkYXRlIHRvIHRoaXMga2V5IGJlY2F1c2UgYW5vdGhlclxuICAgICAgLy8gdmFsdWUgZGlmZmVkLiBTaW5jZSB3ZSdyZSBub3cgbGF0ZXIgaW4gdGhlIG5lc3RlZCBhcnJheXMgb3VyIHZhbHVlIGlzXG4gICAgICAvLyBtb3JlIGltcG9ydGFudCBzbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBpdCBhbmQgb3ZlcnJpZGUgdGhlIGV4aXN0aW5nXG4gICAgICAvLyB2YWx1ZS4gSXQgZG9lc24ndCBtYXR0ZXIgaWYgbm90aGluZyBjaGFuZ2VkLCB3ZSdsbCBzZXQgaXQgYW55d2F5LlxuXG4gICAgICAvLyBQYXR0ZXJuIG1hdGNoIG9uOiBhdHRyaWJ1dGVDb25maWdcbiAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBjYXNlOiAhT2JqZWN0IGlzIHRoZSBkZWZhdWx0IGNhc2VcbiAgICAgICAgdXBkYXRlUGF5bG9hZFtwcm9wS2V5XSA9IG5leHRQcm9wO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIC8vIGNhc2U6IEN1c3RvbUF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID1cbiAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MobmV4dFByb3ApXG4gICAgICAgICAgICA6IG5leHRQcm9wO1xuICAgICAgICB1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gbmV4dFZhbHVlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByZXZQcm9wID09PSBuZXh0UHJvcCkge1xuICAgICAgY29udGludWU7IC8vIG5vdGhpbmcgY2hhbmdlZFxuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gbWF0Y2ggb246IGF0dHJpYnV0ZUNvbmZpZ1xuICAgIGlmICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgLy8gY2FzZTogIU9iamVjdCBpcyB0aGUgZGVmYXVsdCBjYXNlXG4gICAgICBpZiAoZGVmYXVsdERpZmZlcihwcmV2UHJvcCwgbmV4dFByb3ApKSB7XG4gICAgICAgIC8vIGEgbm9ybWFsIGxlYWYgaGFzIGNoYW5nZWRcbiAgICAgICAgKHVwZGF0ZVBheWxvYWQgfHwgKHVwZGF0ZVBheWxvYWQgPSAoe306IHtbc3RyaW5nXTogJEZsb3dGaXhNZX0pKSlbXG4gICAgICAgICAgcHJvcEtleVxuICAgICAgICBdID0gbmV4dFByb3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcuZGlmZiA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICAvLyBjYXNlOiBDdXN0b21BdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gICAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgICBwcmV2UHJvcCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmRpZmYgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5kaWZmKHByZXZQcm9wLCBuZXh0UHJvcClcbiAgICAgICAgICA6IGRlZmF1bHREaWZmZXIocHJldlByb3AsIG5leHRQcm9wKSk7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9XG4gICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyhuZXh0UHJvcClcbiAgICAgICAgICAgIDogbmV4dFByb3A7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkIHx8ICh1cGRhdGVQYXlsb2FkID0gKHt9OiB7W3N0cmluZ106ICRGbG93Rml4TWV9KSkpW1xuICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgXSA9IG5leHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdDogZmFsbHRocm91Z2ggY2FzZSB3aGVuIG5lc3RlZCBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkXG4gICAgICByZW1vdmVkS2V5cyA9IG51bGw7XG4gICAgICByZW1vdmVkS2V5Q291bnQgPSAwO1xuICAgICAgLy8gV2UgdGhpbmsgdGhhdCBhdHRyaWJ1dGVDb25maWcgaXMgbm90IEN1c3RvbUF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gYXRcbiAgICAgIC8vIHRoaXMgcG9pbnQgc28gd2UgYXNzdW1lIGl0IG11c3QgYmUgQXR0cmlidXRlQ29uZmlndXJhdGlvbi5cbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBkaWZmTmVzdGVkUHJvcGVydHkoXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgIHByZXZQcm9wLFxuICAgICAgICBuZXh0UHJvcCxcbiAgICAgICAgKChhdHRyaWJ1dGVDb25maWc6IGFueSk6IEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24pLFxuICAgICAgKTtcbiAgICAgIGlmIChyZW1vdmVkS2V5Q291bnQgPiAwICYmIHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgcmVzdG9yZURlbGV0ZWRWYWx1ZXNJbk5lc3RlZEFycmF5KFxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgbmV4dFByb3AsXG4gICAgICAgICAgKChhdHRyaWJ1dGVDb25maWc6IGFueSk6IEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24pLFxuICAgICAgICApO1xuICAgICAgICByZW1vdmVkS2V5cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWxzbyBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBwcmV2aW91cyBwcm9wcyB0byBjYXRjaCBhbnkgdGhhdCBoYXZlIGJlZW5cbiAgLy8gcmVtb3ZlZCBhbmQgbWFrZSBzdXJlIG5hdGl2ZSBnZXRzIHRoZSBzaWduYWwgc28gaXQgY2FuIHJlc2V0IHRoZW0gdG8gdGhlXG4gIC8vIGRlZmF1bHQuXG4gIGZvciAoY29uc3QgcHJvcEtleSBpbiBwcmV2UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzW3Byb3BLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlOyAvLyB3ZSd2ZSBhbHJlYWR5IGNvdmVyZWQgdGhpcyBrZXkgaW4gdGhlIHByZXZpb3VzIHBhc3NcbiAgICB9XG4gICAgYXR0cmlidXRlQ29uZmlnID0gdmFsaWRBdHRyaWJ1dGVzW3Byb3BLZXldO1xuICAgIGlmICghYXR0cmlidXRlQ29uZmlnKSB7XG4gICAgICBjb250aW51ZTsgLy8gbm90IGEgdmFsaWQgbmF0aXZlIHByb3BcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlUGF5bG9hZCAmJiB1cGRhdGVQYXlsb2FkW3Byb3BLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgd2FzIGFscmVhZHkgdXBkYXRlZCB0byBhIGRpZmYgcmVzdWx0IGVhcmxpZXIuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwcmV2UHJvcCA9IHByZXZQcm9wc1twcm9wS2V5XTtcbiAgICBpZiAocHJldlByb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7IC8vIHdhcyBhbHJlYWR5IGVtcHR5IGFueXdheVxuICAgIH1cbiAgICAvLyBQYXR0ZXJuIG1hdGNoIG9uOiBhdHRyaWJ1dGVDb25maWdcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIC8vIGNhc2U6IEN1c3RvbUF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gfCAhT2JqZWN0XG4gICAgICAvLyBGbGFnIHRoZSBsZWFmIHByb3BlcnR5IGZvciByZW1vdmFsIGJ5IHNlbmRpbmcgYSBzZW50aW5lbC5cbiAgICAgICh1cGRhdGVQYXlsb2FkIHx8ICh1cGRhdGVQYXlsb2FkID0gKHt9OiB7W3N0cmluZ106ICRGbG93Rml4TWV9KSkpW1xuICAgICAgICBwcm9wS2V5XG4gICAgICBdID0gbnVsbDtcbiAgICAgIGlmICghcmVtb3ZlZEtleXMpIHtcbiAgICAgICAgcmVtb3ZlZEtleXMgPSAoe306IHtbc3RyaW5nXTogYm9vbGVhbn0pO1xuICAgICAgfVxuICAgICAgaWYgKCFyZW1vdmVkS2V5c1twcm9wS2V5XSkge1xuICAgICAgICByZW1vdmVkS2V5c1twcm9wS2V5XSA9IHRydWU7XG4gICAgICAgIHJlbW92ZWRLZXlDb3VudCsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0OlxuICAgICAgLy8gVGhpcyBpcyBhIG5lc3RlZCBhdHRyaWJ1dGUgY29uZmlndXJhdGlvbiB3aGVyZSBhbGwgdGhlIHByb3BlcnRpZXNcbiAgICAgIC8vIHdlcmUgcmVtb3ZlZCBzbyB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggYW5kIGNsZWFyIG91dCBhbGwgb2YgdGhlbS5cbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBjbGVhck5lc3RlZFByb3BlcnR5KFxuICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICBwcmV2UHJvcCxcbiAgICAgICAgKChhdHRyaWJ1dGVDb25maWc6IGFueSk6IEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5cbi8qKlxuICogYWRkUHJvcGVydGllcyBhZGRzIGFsbCB0aGUgdmFsaWQgcHJvcHMgdG8gdGhlIHBheWxvYWQgYWZ0ZXIgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5mdW5jdGlvbiBhZGRQcm9wZXJ0aWVzKFxuICB1cGRhdGVQYXlsb2FkOiBudWxsIHwgT2JqZWN0LFxuICBwcm9wczogT2JqZWN0LFxuICB2YWxpZEF0dHJpYnV0ZXM6IEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24sXG4pOiBudWxsIHwgT2JqZWN0IHtcbiAgLy8gVE9ETzogRmFzdCBwYXRoXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyh1cGRhdGVQYXlsb2FkLCBlbXB0eU9iamVjdCwgcHJvcHMsIHZhbGlkQXR0cmlidXRlcyk7XG59XG5cbi8qKlxuICogY2xlYXJQcm9wZXJ0aWVzIGNsZWFycyBhbGwgdGhlIHByZXZpb3VzIHByb3BzIGJ5IGFkZGluZyBhIG51bGwgc2VudGluZWxcbiAqIHRvIHRoZSBwYXlsb2FkIGZvciBlYWNoIHZhbGlkIGtleS5cbiAqL1xuZnVuY3Rpb24gY2xlYXJQcm9wZXJ0aWVzKFxuICB1cGRhdGVQYXlsb2FkOiBudWxsIHwgT2JqZWN0LFxuICBwcmV2UHJvcHM6IE9iamVjdCxcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKTogbnVsbCB8IE9iamVjdCB7XG4gIC8vIFRPRE86IEZhc3QgcGF0aFxuICByZXR1cm4gZGlmZlByb3BlcnRpZXModXBkYXRlUGF5bG9hZCwgcHJldlByb3BzLCBlbXB0eU9iamVjdCwgdmFsaWRBdHRyaWJ1dGVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShcbiAgcHJvcHM6IE9iamVjdCxcbiAgdmFsaWRBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVDb25maWd1cmF0aW9uLFxuKTogbnVsbCB8IE9iamVjdCB7XG4gIHJldHVybiBhZGRQcm9wZXJ0aWVzKFxuICAgIG51bGwsIC8vIHVwZGF0ZVBheWxvYWRcbiAgICBwcm9wcyxcbiAgICB2YWxpZEF0dHJpYnV0ZXMsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmKFxuICBwcmV2UHJvcHM6IE9iamVjdCxcbiAgbmV4dFByb3BzOiBPYmplY3QsXG4gIHZhbGlkQXR0cmlidXRlczogQXR0cmlidXRlQ29uZmlndXJhdGlvbixcbik6IG51bGwgfCBPYmplY3Qge1xuICByZXR1cm4gZGlmZlByb3BlcnRpZXMoXG4gICAgbnVsbCwgLy8gdXBkYXRlUGF5bG9hZFxuICAgIHByZXZQcm9wcyxcbiAgICBuZXh0UHJvcHMsXG4gICAgdmFsaWRBdHRyaWJ1dGVzLFxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSB0aGUgUmVhY3QgcmVuZGVyZXJzIHRvIGNyZWF0ZSBwdWJsaWNcbiAqIGluc3RhbmNlcyBhbmQgZ2V0IHNvbWUgZGF0YSBmcm9tIHRoZW0gKGxpa2UgdGhlaXIgaW5zdGFuY2UgaGFuZGxlIC8gZmliZXIpLlxuICovXG5cbmltcG9ydCB0eXBlIFJlYWN0TmF0aXZlRWxlbWVudCBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFjdE5hdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHR5cGUgUmVhZE9ubHlUZXh0IGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL25vZGVzL1JlYWRPbmx5VGV4dCc7XG5pbXBvcnQgdHlwZW9mIFJlYWN0RmFicmljVHlwZSBmcm9tICcuLi8uLi9SZW5kZXJlci9zaGltcy9SZWFjdEZhYnJpYyc7XG5pbXBvcnQgdHlwZSB7XG4gIEludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gIE5vZGUsXG4gIFZpZXdDb25maWcsXG59IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUgUmVhY3RGYWJyaWNIb3N0Q29tcG9uZW50IGZyb20gJy4vUmVhY3RGYWJyaWNIb3N0Q29tcG9uZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvZmVhdHVyZWZsYWdzL1JlYWN0TmF0aXZlRmVhdHVyZUZsYWdzJztcblxuLy8gTGF6eSBsb2FkZWQgdG8gYXZvaWQgZXZhbHVhdGluZyB0aGUgbW9kdWxlIHdoZW4gdXNpbmcgdGhlIGxlZ2FjeSByZW5kZXJlci5cbmxldCBQdWJsaWNJbnN0YW5jZUNsYXNzOlxuICB8IENsYXNzPFJlYWN0RmFicmljSG9zdENvbXBvbmVudD5cbiAgfCBDbGFzczxSZWFjdE5hdGl2ZUVsZW1lbnQ+O1xubGV0IFJlYWRPbmx5VGV4dENsYXNzOiBDbGFzczxSZWFkT25seVRleHQ+O1xuXG4vLyBMYXp5IGxvYWRlZCB0byBhdm9pZCBldmFsdWF0aW5nIHRoZSBtb2R1bGUgd2hlbiB1c2luZyB0aGUgbGVnYWN5IHJlbmRlcmVyLlxubGV0IFJlYWN0RmFicmljOiBSZWFjdEZhYnJpY1R5cGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQdWJsaWNJbnN0YW5jZShcbiAgdGFnOiBudW1iZXIsXG4gIHZpZXdDb25maWc6IFZpZXdDb25maWcsXG4gIGludGVybmFsSW5zdGFuY2VIYW5kbGU6IEludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4pOiBSZWFjdEZhYnJpY0hvc3RDb21wb25lbnQgfCBSZWFjdE5hdGl2ZUVsZW1lbnQge1xuICBpZiAoUHVibGljSW5zdGFuY2VDbGFzcyA9PSBudWxsKSB7XG4gICAgLy8gV2UgZG9uJ3QgdXNlIGlubGluZSByZXF1aXJlcyBpbiByZWFjdC1uYXRpdmUsIHNvIHRoaXMgZm9yY2VzIGxhenkgbG9hZGluZ1xuICAgIC8vIHRoZSByaWdodCBtb2R1bGUgdG8gYXZvaWQgZWFnZXJseSBsb2FkaW5nIGJvdGguXG4gICAgaWYgKFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzLmVuYWJsZUFjY2Vzc1RvSG9zdFRyZWVJbkZhYnJpYygpKSB7XG4gICAgICBQdWJsaWNJbnN0YW5jZUNsYXNzID1cbiAgICAgICAgcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhY3ROYXRpdmVFbGVtZW50JykuZGVmYXVsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgUHVibGljSW5zdGFuY2VDbGFzcyA9IHJlcXVpcmUoJy4vUmVhY3RGYWJyaWNIb3N0Q29tcG9uZW50JykuZGVmYXVsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFB1YmxpY0luc3RhbmNlQ2xhc3ModGFnLCB2aWV3Q29uZmlnLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVB1YmxpY1RleHRJbnN0YW5jZShcbiAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTogSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSxcbik6IFJlYWRPbmx5VGV4dCB7XG4gIGlmIChSZWFkT25seVRleHRDbGFzcyA9PSBudWxsKSB7XG4gICAgUmVhZE9ubHlUZXh0Q2xhc3MgPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhZE9ubHlUZXh0JykuZGVmYXVsdDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhZE9ubHlUZXh0Q2xhc3MoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UoXG4gIHB1YmxpY0luc3RhbmNlOiBSZWFjdEZhYnJpY0hvc3RDb21wb25lbnQgfCBSZWFjdE5hdGl2ZUVsZW1lbnQsXG4pOiBudW1iZXIge1xuICByZXR1cm4gcHVibGljSW5zdGFuY2UuX19uYXRpdmVUYWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlRnJvbVB1YmxpY0luc3RhbmNlKFxuICBwdWJsaWNJbnN0YW5jZTogUmVhY3RGYWJyaWNIb3N0Q29tcG9uZW50IHwgUmVhY3ROYXRpdmVFbGVtZW50LFxuKTogP05vZGUge1xuICAvLyBBdm9pZCBsb2FkaW5nIFJlYWN0RmFicmljIGlmIHVzaW5nIGFuIGluc3RhbmNlIGZyb20gdGhlIGxlZ2FjeSByZW5kZXJlci5cbiAgaWYgKHB1YmxpY0luc3RhbmNlLl9faW50ZXJuYWxJbnN0YW5jZUhhbmRsZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoUmVhY3RGYWJyaWMgPT0gbnVsbCkge1xuICAgIFJlYWN0RmFicmljID0gcmVxdWlyZSgnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3RGYWJyaWMnKTtcbiAgfVxuICByZXR1cm4gUmVhY3RGYWJyaWMuZ2V0Tm9kZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlKFxuICAgIHB1YmxpY0luc3RhbmNlLl9faW50ZXJuYWxJbnN0YW5jZUhhbmRsZSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsSW5zdGFuY2VIYW5kbGVGcm9tUHVibGljSW5zdGFuY2UoXG4gIHB1YmxpY0luc3RhbmNlOiBSZWFjdEZhYnJpY0hvc3RDb21wb25lbnQgfCBSZWFjdE5hdGl2ZUVsZW1lbnQsXG4pOiBJbnRlcm5hbEluc3RhbmNlSGFuZGxlIHtcbiAgLy8gVE9ETyhUMTc0NzYyNzY4KTogUmVtb3ZlIHRoaXMgb25jZSBPU1MgdmVyc2lvbnMgb2YgcmVuZGVyZXJzIHdpbGwgYmUgc3luY2VkLlxuICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbcHJvcC1taXNzaW5nXSBLZWVwaW5nIHRoaXMgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggdGhlIHJlbmRlcmVycyB2ZXJzaW9ucyBpbiBvcGVuIHNvdXJjZS5cbiAgaWYgKHB1YmxpY0luc3RhbmNlLl9pbnRlcm5hbEluc3RhbmNlSGFuZGxlICE9IG51bGwpIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXJldHVybl0gS2VlcGluZyB0aGlzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZW5kZXJlcnMgdmVyc2lvbnMgaW4gb3BlbiBzb3VyY2UuXG4gICAgcmV0dXJuIHB1YmxpY0luc3RhbmNlLl9pbnRlcm5hbEluc3RhbmNlSGFuZGxlO1xuICB9XG5cbiAgcmV0dXJuIHB1YmxpY0luc3RhbmNlLl9faW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZ2VuZXJhdGVkIFNpZ25lZFNvdXJjZTw8ZjZmODZmZmE3Mzg3MDVmMTE3YmJkNTBkMzA2MGMzNDY+PlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuLyoqXG4gKiBJTVBPUlRBTlQ6IERvIE5PVCBtb2RpZnkgdGhpcyBmaWxlIGRpcmVjdGx5LlxuICpcbiAqIFRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmxhZ3MsIGVkaXRcbiAqICAgcGFja2FnZXMvcmVhY3QtbmF0aXZlL3NjcmlwdHMvZmVhdHVyZWZsYWdzL1JlYWN0TmF0aXZlRmVhdHVyZUZsYWdzLmNvbmZpZy5qcy5cbiAqXG4gKiBUbyByZWdlbmVyYXRlIHRoaXMgY29kZSwgcnVuIHRoZSBmb2xsb3dpbmcgc2NyaXB0IGZyb20gdGhlIHJlcG8gcm9vdDpcbiAqICAgeWFybiBmZWF0dXJlZmxhZ3MtdXBkYXRlXG4gKi9cblxuaW1wb3J0IHtcbiAgdHlwZSBHZXR0ZXIsXG4gIGNyZWF0ZUphdmFTY3JpcHRGbGFnR2V0dGVyLFxuICBjcmVhdGVOYXRpdmVGbGFnR2V0dGVyLFxuICBzZXRPdmVycmlkZXMsXG59IGZyb20gJy4vUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NCYXNlJztcblxuZXhwb3J0IHR5cGUgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NKc09ubHkgPSB7XG4gIGpzT25seVRlc3RGbGFnOiBHZXR0ZXI8Ym9vbGVhbj4sXG4gIGlzTGF5b3V0QW5pbWF0aW9uRW5hYmxlZDogR2V0dGVyPGJvb2xlYW4+LFxuICBhbmltYXRlZFNob3VsZERlYm91bmNlUXVldWVGbHVzaDogR2V0dGVyPGJvb2xlYW4+LFxuICBhbmltYXRlZFNob3VsZFVzZVNpbmdsZU9wOiBHZXR0ZXI8Ym9vbGVhbj4sXG4gIGVuYWJsZUFjY2Vzc1RvSG9zdFRyZWVJbkZhYnJpYzogR2V0dGVyPGJvb2xlYW4+LFxuICBzaG91bGRVc2VBbmltYXRlZE9iamVjdEZvclRyYW5zZm9ybTogR2V0dGVyPGJvb2xlYW4+LFxuICBzaG91bGRVc2VTZXROYXRpdmVQcm9wc0luRmFicmljOiBHZXR0ZXI8Ym9vbGVhbj4sXG4gIHNob3VsZFVzZVJlbW92ZUNsaXBwZWRTdWJ2aWV3c0FzRGVmYXVsdE9uSU9TOiBHZXR0ZXI8Ym9vbGVhbj4sXG59O1xuXG5leHBvcnQgdHlwZSBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFnc0pzT25seU92ZXJyaWRlcyA9IFBhcnRpYWw8UmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NKc09ubHk+O1xuXG5leHBvcnQgdHlwZSBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyA9IHtcbiAgLi4uUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NKc09ubHksXG4gIGNvbW1vblRlc3RGbGFnOiBHZXR0ZXI8Ym9vbGVhbj4sXG4gIGVuYWJsZUJhY2tncm91bmRFeGVjdXRvcjogR2V0dGVyPGJvb2xlYW4+LFxuICB1c2VNb2Rlcm5SdW50aW1lU2NoZWR1bGVyOiBHZXR0ZXI8Ym9vbGVhbj4sXG4gIGVuYWJsZU1pY3JvdGFza3M6IEdldHRlcjxib29sZWFuPixcbiAgYmF0Y2hSZW5kZXJpbmdVcGRhdGVzSW5FdmVudExvb3A6IEdldHRlcjxib29sZWFuPixcbiAgZW5hYmxlU3Bhbm5hYmxlQnVpbGRpbmdVbmlmaWNhdGlvbjogR2V0dGVyPGJvb2xlYW4+LFxuICBlbmFibGVDdXN0b21EcmF3T3JkZXJGYWJyaWM6IEdldHRlcjxib29sZWFuPixcbiAgZW5hYmxlRml4Rm9yQ2xpcHBlZFN1YnZpZXdzQ3Jhc2g6IEdldHRlcjxib29sZWFuPixcbiAgaW5zcGVjdG9yRW5hYmxlQ3h4SW5zcGVjdG9yUGFja2FnZXJDb25uZWN0aW9uOiBHZXR0ZXI8Ym9vbGVhbj4sXG4gIGluc3BlY3RvckVuYWJsZU1vZGVybkNEUFJlZ2lzdHJ5OiBHZXR0ZXI8Ym9vbGVhbj4sXG59XG5cbi8qKlxuICogSlMtb25seSBmbGFnIGZvciB0ZXN0aW5nLiBEbyBOT1QgbW9kaWZ5LlxuICovXG5leHBvcnQgY29uc3QganNPbmx5VGVzdEZsYWc6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZUphdmFTY3JpcHRGbGFnR2V0dGVyKCdqc09ubHlUZXN0RmxhZycsIGZhbHNlKTtcblxuLyoqXG4gKiBGdW5jdGlvbiB1c2VkIHRvIGVuYWJsZSAvIGRpc2FibGVkIExheW91dCBBbmltYXRpb25zIGluIFJlYWN0IE5hdGl2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTGF5b3V0QW5pbWF0aW9uRW5hYmxlZDogR2V0dGVyPGJvb2xlYW4+ID0gY3JlYXRlSmF2YVNjcmlwdEZsYWdHZXR0ZXIoJ2lzTGF5b3V0QW5pbWF0aW9uRW5hYmxlZCcsIHRydWUpO1xuXG4vKipcbiAqIEVuYWJsZXMgYW4gZXhwZXJpbWVudGFsIGZsdXNoLXF1ZXVlIGRlYm91bmNpbmcgaW4gQW5pbWF0ZWQuanMuXG4gKi9cbmV4cG9ydCBjb25zdCBhbmltYXRlZFNob3VsZERlYm91bmNlUXVldWVGbHVzaDogR2V0dGVyPGJvb2xlYW4+ID0gY3JlYXRlSmF2YVNjcmlwdEZsYWdHZXR0ZXIoJ2FuaW1hdGVkU2hvdWxkRGVib3VuY2VRdWV1ZUZsdXNoJywgZmFsc2UpO1xuXG4vKipcbiAqIEVuYWJsZXMgYW4gZXhwZXJpbWVudGFsIG1lZ2Etb3BlcmF0aW9uIGZvciBBbmltYXRlZC5qcyB0aGF0IHJlcGxhY2VzIG1hbnkgY2FsbHMgdG8gbmF0aXZlIHdpdGggYSBzaW5nbGUgY2FsbCBpbnRvIG5hdGl2ZSwgdG8gcmVkdWNlIEpTSS9KTkkgdHJhZmZpYy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFuaW1hdGVkU2hvdWxkVXNlU2luZ2xlT3A6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZUphdmFTY3JpcHRGbGFnR2V0dGVyKCdhbmltYXRlZFNob3VsZFVzZVNpbmdsZU9wJywgZmFsc2UpO1xuXG4vKipcbiAqIEVuYWJsZXMgYWNjZXNzIHRvIHRoZSBob3N0IHRyZWUgaW4gRmFicmljIHVzaW5nIERPTS1jb21wYXRpYmxlIEFQSXMuXG4gKi9cbmV4cG9ydCBjb25zdCBlbmFibGVBY2Nlc3NUb0hvc3RUcmVlSW5GYWJyaWM6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZUphdmFTY3JpcHRGbGFnR2V0dGVyKCdlbmFibGVBY2Nlc3NUb0hvc3RUcmVlSW5GYWJyaWMnLCBmYWxzZSk7XG5cbi8qKlxuICogRW5hYmxlcyB1c2Ugb2YgQW5pbWF0ZWRPYmplY3QgZm9yIGFuaW1hdGluZyB0cmFuc2Zvcm0gdmFsdWVzLlxuICovXG5leHBvcnQgY29uc3Qgc2hvdWxkVXNlQW5pbWF0ZWRPYmplY3RGb3JUcmFuc2Zvcm06IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZUphdmFTY3JpcHRGbGFnR2V0dGVyKCdzaG91bGRVc2VBbmltYXRlZE9iamVjdEZvclRyYW5zZm9ybScsIGZhbHNlKTtcblxuLyoqXG4gKiBFbmFibGVzIHVzZSBvZiBzZXROYXRpdmVQcm9wcyBpbiBKUyBkcml2ZW4gYW5pbWF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNob3VsZFVzZVNldE5hdGl2ZVByb3BzSW5GYWJyaWM6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZUphdmFTY3JpcHRGbGFnR2V0dGVyKCdzaG91bGRVc2VTZXROYXRpdmVQcm9wc0luRmFicmljJywgdHJ1ZSk7XG5cbi8qKlxuICogcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzIHByb3Agd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGluIEZsYXRMaXN0IG9uIGlPUyB0byBtYXRjaCBBbmRyb2lkXG4gKi9cbmV4cG9ydCBjb25zdCBzaG91bGRVc2VSZW1vdmVDbGlwcGVkU3Vidmlld3NBc0RlZmF1bHRPbklPUzogR2V0dGVyPGJvb2xlYW4+ID0gY3JlYXRlSmF2YVNjcmlwdEZsYWdHZXR0ZXIoJ3Nob3VsZFVzZVJlbW92ZUNsaXBwZWRTdWJ2aWV3c0FzRGVmYXVsdE9uSU9TJywgZmFsc2UpO1xuXG4vKipcbiAqIENvbW1vbiBmbGFnIGZvciB0ZXN0aW5nLiBEbyBOT1QgbW9kaWZ5LlxuICovXG5leHBvcnQgY29uc3QgY29tbW9uVGVzdEZsYWc6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZU5hdGl2ZUZsYWdHZXR0ZXIoJ2NvbW1vblRlc3RGbGFnJywgZmFsc2UpO1xuLyoqXG4gKiBFbmFibGVzIHRoZSB1c2Ugb2YgYSBiYWNrZ3JvdW5kIGV4ZWN1dG9yIHRvIGNvbXB1dGUgbGF5b3V0IGFuZCBjb21taXQgdXBkYXRlcyBvbiBGYWJyaWMgKHRoaXMgc3lzdGVtIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCkuXG4gKi9cbmV4cG9ydCBjb25zdCBlbmFibGVCYWNrZ3JvdW5kRXhlY3V0b3I6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZU5hdGl2ZUZsYWdHZXR0ZXIoJ2VuYWJsZUJhY2tncm91bmRFeGVjdXRvcicsIGZhbHNlKTtcbi8qKlxuICogV2hlbiBlbmFibGVkLCBpdCB1c2VzIHRoZSBtb2Rlcm4gZm9yayBvZiBSdW50aW1lU2NoZWR1bGVyIHRoYXQgYWxsb3dzIHNjaGVkdWxpbmcgdGFza3Mgd2l0aCBwcmlvcml0aWVzIGZyb20gYW55IHRocmVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1vZGVyblJ1bnRpbWVTY2hlZHVsZXI6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZU5hdGl2ZUZsYWdHZXR0ZXIoJ3VzZU1vZGVyblJ1bnRpbWVTY2hlZHVsZXInLCBmYWxzZSk7XG4vKipcbiAqIEVuYWJsZXMgdGhlIHVzZSBvZiBtaWNyb3Rhc2tzIGluIEhlcm1lcyAoc2NoZWR1bGluZykgYW5kIFJ1bnRpbWVTY2hlZHVsZXIgKGV4ZWN1dGlvbikuXG4gKi9cbmV4cG9ydCBjb25zdCBlbmFibGVNaWNyb3Rhc2tzOiBHZXR0ZXI8Ym9vbGVhbj4gPSBjcmVhdGVOYXRpdmVGbGFnR2V0dGVyKCdlbmFibGVNaWNyb3Rhc2tzJywgZmFsc2UpO1xuLyoqXG4gKiBXaGVuIGVuYWJsZWQsIHRoZSBSdW50aW1lU2NoZWR1bGVyIHByb2Nlc3NpbmcgdGhlIGV2ZW50IGxvb3Agd2lsbCBiYXRjaCBhbGwgcmVuZGVyaW5nIHVwZGF0ZXMgYW5kIGRpc3BhdGNoIHRoZW0gdG9nZXRoZXIgYXQgdGhlIGVuZCBvZiBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcC5cbiAqL1xuZXhwb3J0IGNvbnN0IGJhdGNoUmVuZGVyaW5nVXBkYXRlc0luRXZlbnRMb29wOiBHZXR0ZXI8Ym9vbGVhbj4gPSBjcmVhdGVOYXRpdmVGbGFnR2V0dGVyKCdiYXRjaFJlbmRlcmluZ1VwZGF0ZXNJbkV2ZW50TG9vcCcsIGZhbHNlKTtcbi8qKlxuICogVXNlcyBuZXcsIGRlZHVwbGljYXRlZCBsb2dpYyBmb3IgY29uc3RydWN0aW5nIEFuZHJvaWQgU3Bhbm5hYmxlcyBmcm9tIHRleHQgZnJhZ21lbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBlbmFibGVTcGFubmFibGVCdWlsZGluZ1VuaWZpY2F0aW9uOiBHZXR0ZXI8Ym9vbGVhbj4gPSBjcmVhdGVOYXRpdmVGbGFnR2V0dGVyKCdlbmFibGVTcGFubmFibGVCdWlsZGluZ1VuaWZpY2F0aW9uJywgZmFsc2UpO1xuLyoqXG4gKiBXaGVuIGVuYWJsZWQsIEZhYnJpYyB3aWxsIHVzZSBjdXN0b21EcmF3T3JkZXIgaW4gUmVhY3RWaWV3R3JvdXAgKHNpbWlsYXIgdG8gb2xkIGFyY2hpdGVjdHVyZSkuXG4gKi9cbmV4cG9ydCBjb25zdCBlbmFibGVDdXN0b21EcmF3T3JkZXJGYWJyaWM6IEdldHRlcjxib29sZWFuPiA9IGNyZWF0ZU5hdGl2ZUZsYWdHZXR0ZXIoJ2VuYWJsZUN1c3RvbURyYXdPcmRlckZhYnJpYycsIGZhbHNlKTtcbi8qKlxuICogQXR0ZW1wdCBhdCBmaXhpbmcgYSBjcmFzaCByZWxhdGVkIHRvIHN1YnZpZXcgY2xpcHBpbmcgb24gQW5kcm9pZC4gVGhpcyBpcyBhIGtpbGwgc3dpdGNoIGZvciB0aGUgZml4XG4gKi9cbmV4cG9ydCBjb25zdCBlbmFibGVGaXhGb3JDbGlwcGVkU3Vidmlld3NDcmFzaDogR2V0dGVyPGJvb2xlYW4+ID0gY3JlYXRlTmF0aXZlRmxhZ0dldHRlcignZW5hYmxlRml4Rm9yQ2xpcHBlZFN1YnZpZXdzQ3Jhc2gnLCBmYWxzZSk7XG4vKipcbiAqIEZsYWcgZGV0ZXJtaW5pbmcgaWYgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0b3JQYWNrYWdlckNvbm5lY3Rpb24gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcGVyLXBsYXRmb3JtIG9uZS4gVGhpcyBmbGFnIGlzIGdsb2JhbCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFjcm9zcyBSZWFjdCBIb3N0IGxpZmV0aW1lcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc3BlY3RvckVuYWJsZUN4eEluc3BlY3RvclBhY2thZ2VyQ29ubmVjdGlvbjogR2V0dGVyPGJvb2xlYW4+ID0gY3JlYXRlTmF0aXZlRmxhZ0dldHRlcignaW5zcGVjdG9yRW5hYmxlQ3h4SW5zcGVjdG9yUGFja2FnZXJDb25uZWN0aW9uJywgZmFsc2UpO1xuLyoqXG4gKiBGbGFnIGRldGVybWluaW5nIGlmIHRoZSBtb2Rlcm4gQ0RQIGJhY2tlbmQgc2hvdWxkIGJlIGVuYWJsZWQuIFRoaXMgZmxhZyBpcyBnbG9iYWwgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZCBhY3Jvc3MgUmVhY3QgSG9zdCBsaWZldGltZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnNwZWN0b3JFbmFibGVNb2Rlcm5DRFBSZWdpc3RyeTogR2V0dGVyPGJvb2xlYW4+ID0gY3JlYXRlTmF0aXZlRmxhZ0dldHRlcignaW5zcGVjdG9yRW5hYmxlTW9kZXJuQ0RQUmVnaXN0cnknLCBmYWxzZSk7XG5cbi8qKlxuICogT3ZlcnJpZGVzIHRoZSBmZWF0dXJlIGZsYWdzIHdpdGggdGhlIHByb3ZpZGVkIG1ldGhvZHMuXG4gKiBOT1RFOiBPbmx5IEpTLW9ubHkgZmxhZ3MgY2FuIGJlIG92ZXJyaWRkZW4gZnJvbSBKYXZhU2NyaXB0IHVzaW5nIHRoaXMgQVBJLlxuICovXG5leHBvcnQgY29uc3Qgb3ZlcnJpZGUgPSBzZXRPdmVycmlkZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFnc0pzT25seSxcbiAgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NKc09ubHlPdmVycmlkZXMsXG59IGZyb20gJy4vUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MnO1xuXG5pbXBvcnQgTmF0aXZlUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MgZnJvbSAnLi9OYXRpdmVSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyc7XG5cbmNvbnN0IGFjY2Vzc2VkRmVhdHVyZUZsYWdzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbmxldCBvdmVycmlkZXM6ID9SZWFjdE5hdGl2ZUZlYXR1cmVGbGFnc0pzT25seU92ZXJyaWRlcztcblxuZXhwb3J0IHR5cGUgR2V0dGVyPFQ+ID0gKCkgPT4gVDtcblxuZnVuY3Rpb24gY3JlYXRlR2V0dGVyPFQ6IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmc+KFxuICBjb25maWdOYW1lOiBzdHJpbmcsXG4gIGN1c3RvbVZhbHVlR2V0dGVyOiBHZXR0ZXI8P1Q+LFxuICBkZWZhdWx0VmFsdWU6IFQsXG4pOiBHZXR0ZXI8VD4ge1xuICBsZXQgY2FjaGVkVmFsdWU6ID9UO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKGNhY2hlZFZhbHVlID09IG51bGwpIHtcbiAgICAgIGFjY2Vzc2VkRmVhdHVyZUZsYWdzLmFkZChjb25maWdOYW1lKTtcbiAgICAgIGNhY2hlZFZhbHVlID0gY3VzdG9tVmFsdWVHZXR0ZXIoKSA/PyBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUphdmFTY3JpcHRGbGFnR2V0dGVyPFxuICBLOiAkS2V5czxSZWFjdE5hdGl2ZUZlYXR1cmVGbGFnc0pzT25seT4sXG4+KFxuICBjb25maWdOYW1lOiBLLFxuICBkZWZhdWx0VmFsdWU6IFJldHVyblR5cGU8UmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NKc09ubHlbS10+LFxuKTogR2V0dGVyPFJldHVyblR5cGU8UmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NKc09ubHlbS10+PiB7XG4gIHJldHVybiBjcmVhdGVHZXR0ZXIoXG4gICAgY29uZmlnTmFtZSxcbiAgICAoKSA9PiBvdmVycmlkZXM/Lltjb25maWdOYW1lXT8uKCksXG4gICAgZGVmYXVsdFZhbHVlLFxuICApO1xufVxuXG50eXBlIE5hdGl2ZUZlYXR1cmVGbGFncyA9ICROb25NYXliZVR5cGU8dHlwZW9mIE5hdGl2ZVJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5hdGl2ZUZsYWdHZXR0ZXI8SzogJEtleXM8TmF0aXZlRmVhdHVyZUZsYWdzPj4oXG4gIGNvbmZpZ05hbWU6IEssXG4gIGRlZmF1bHRWYWx1ZTogUmV0dXJuVHlwZTwkTm9uTWF5YmVUeXBlPE5hdGl2ZUZlYXR1cmVGbGFnc1tLXT4+LFxuKTogR2V0dGVyPFJldHVyblR5cGU8JE5vbk1heWJlVHlwZTxOYXRpdmVGZWF0dXJlRmxhZ3NbS10+Pj4ge1xuICByZXR1cm4gY3JlYXRlR2V0dGVyKFxuICAgIGNvbmZpZ05hbWUsXG4gICAgKCkgPT4gTmF0aXZlUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3M/Lltjb25maWdOYW1lXT8uKCksXG4gICAgZGVmYXVsdFZhbHVlLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcnJpZGVzKCk6ID9SZWFjdE5hdGl2ZUZlYXR1cmVGbGFnc0pzT25seU92ZXJyaWRlcyB7XG4gIHJldHVybiBvdmVycmlkZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRPdmVycmlkZXMoXG4gIG5ld092ZXJyaWRlczogUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NKc09ubHlPdmVycmlkZXMsXG4pOiB2b2lkIHtcbiAgaWYgKG92ZXJyaWRlcyAhPSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGZWF0dXJlIGZsYWdzIGNhbm5vdCBiZSBvdmVycmlkZGVuIG1vcmUgdGhhbiBvbmNlJyk7XG4gIH1cblxuICBpZiAoYWNjZXNzZWRGZWF0dXJlRmxhZ3Muc2l6ZSA+IDApIHtcbiAgICBjb25zdCBhY2Nlc3NlZEZlYXR1cmVGbGFnc1N0ciA9IEFycmF5LmZyb20oYWNjZXNzZWRGZWF0dXJlRmxhZ3MpLmpvaW4oJywgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZlYXR1cmUgZmxhZ3Mgd2VyZSBhY2Nlc3NlZCBiZWZvcmUgYmVpbmcgb3ZlcnJpZGRlbjogJHthY2Nlc3NlZEZlYXR1cmVGbGFnc1N0cn1gLFxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZXMgPSBuZXdPdmVycmlkZXM7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGdlbmVyYXRlZCBTaWduZWRTb3VyY2U8PDg1MDlkNWVlODdlZmI1YWE4ZGE3ZWZjZDIwODVkMGEyPj5cbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbi8qKlxuICogSU1QT1JUQU5UOiBEbyBOT1QgbW9kaWZ5IHRoaXMgZmlsZSBkaXJlY3RseS5cbiAqXG4gKiBUbyBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGZsYWdzLCBlZGl0XG4gKiAgIHBhY2thZ2VzL3JlYWN0LW5hdGl2ZS9zY3JpcHRzL2ZlYXR1cmVmbGFncy9SZWFjdE5hdGl2ZUZlYXR1cmVGbGFncy5jb25maWcuanMuXG4gKlxuICogVG8gcmVnZW5lcmF0ZSB0aGlzIGNvZGUsIHJ1biB0aGUgZm9sbG93aW5nIHNjcmlwdCBmcm9tIHRoZSByZXBvIHJvb3Q6XG4gKiAgIHlhcm4gZmVhdHVyZWZsYWdzLXVwZGF0ZVxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtjb21tb25UZXN0RmxhZz86ICgpID0+IGJvb2xlYW47XG4gICtlbmFibGVCYWNrZ3JvdW5kRXhlY3V0b3I/OiAoKSA9PiBib29sZWFuO1xuICArdXNlTW9kZXJuUnVudGltZVNjaGVkdWxlcj86ICgpID0+IGJvb2xlYW47XG4gICtlbmFibGVNaWNyb3Rhc2tzPzogKCkgPT4gYm9vbGVhbjtcbiAgK2JhdGNoUmVuZGVyaW5nVXBkYXRlc0luRXZlbnRMb29wPzogKCkgPT4gYm9vbGVhbjtcbiAgK2VuYWJsZVNwYW5uYWJsZUJ1aWxkaW5nVW5pZmljYXRpb24/OiAoKSA9PiBib29sZWFuO1xuICArZW5hYmxlQ3VzdG9tRHJhd09yZGVyRmFicmljPzogKCkgPT4gYm9vbGVhbjtcbiAgK2VuYWJsZUZpeEZvckNsaXBwZWRTdWJ2aWV3c0NyYXNoPzogKCkgPT4gYm9vbGVhbjtcbiAgK2luc3BlY3RvckVuYWJsZUN4eEluc3BlY3RvclBhY2thZ2VyQ29ubmVjdGlvbj86ICgpID0+IGJvb2xlYW47XG4gICtpbnNwZWN0b3JFbmFibGVNb2Rlcm5DRFBSZWdpc3RyeT86ICgpID0+IGJvb2xlYW47XG59XG5cbmNvbnN0IE5hdGl2ZVJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzOiA/U3BlYyA9IFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KFxuICAnTmF0aXZlUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3NDeHgnLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgTmF0aXZlUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3M7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuaW1wb3J0IHR5cGUge1xuICBIb3N0Q29tcG9uZW50LFxuICBJTmF0aXZlTWV0aG9kcyxcbiAgSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSxcbiAgTWVhc3VyZUluV2luZG93T25TdWNjZXNzQ2FsbGJhY2ssXG4gIE1lYXN1cmVMYXlvdXRPblN1Y2Nlc3NDYWxsYmFjayxcbiAgTWVhc3VyZU9uU3VjY2Vzc0NhbGxiYWNrLFxuICBWaWV3Q29uZmlnLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi9MaWJyYXJpZXMvUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7RWxlbWVudFJlZn0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgVGV4dElucHV0U3RhdGUgZnJvbSAnLi4vLi4vLi4vLi4vLi4vTGlicmFyaWVzL0NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dFN0YXRlJztcbmltcG9ydCB7Z2V0RmFicmljVUlNYW5hZ2VyfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvRmFicmljVUlNYW5hZ2VyJztcbmltcG9ydCB7Y3JlYXRlIGFzIGNyZWF0ZUF0dHJpYnV0ZVBheWxvYWR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlL1JlYWN0TmF0aXZlQXR0cmlidXRlUGF5bG9hZCc7XG5pbXBvcnQgd2FybkZvclN0eWxlUHJvcHMgZnJvbSAnLi4vLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlYWN0TmF0aXZlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2Uvd2FybkZvclN0eWxlUHJvcHMnO1xuaW1wb3J0IFJlYWRPbmx5RWxlbWVudCwge2dldEJvdW5kaW5nQ2xpZW50UmVjdH0gZnJvbSAnLi9SZWFkT25seUVsZW1lbnQnO1xuaW1wb3J0IFJlYWRPbmx5Tm9kZSBmcm9tICcuL1JlYWRPbmx5Tm9kZSc7XG5pbXBvcnQge1xuICBnZXRQdWJsaWNJbnN0YW5jZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuICBnZXRTaGFkb3dOb2RlLFxufSBmcm9tICcuL1JlYWRPbmx5Tm9kZSc7XG5pbXBvcnQgbnVsbHRocm93cyBmcm9tICdudWxsdGhyb3dzJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdE5hdGl2ZUVsZW1lbnRcbiAgZXh0ZW5kcyBSZWFkT25seUVsZW1lbnRcbiAgaW1wbGVtZW50cyBJTmF0aXZlTWV0aG9kc1xue1xuICAvLyBUaGVzZSBuZWVkIHRvIGJlIGFjY2Vzc2libGUgZnJvbSBgUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZVV0aWxzYC5cbiAgX19uYXRpdmVUYWc6IG51bWJlcjtcbiAgX19pbnRlcm5hbEluc3RhbmNlSGFuZGxlOiBJbnRlcm5hbEluc3RhbmNlSGFuZGxlO1xuXG4gIF92aWV3Q29uZmlnOiBWaWV3Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhZzogbnVtYmVyLFxuICAgIHZpZXdDb25maWc6IFZpZXdDb25maWcsXG4gICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTogSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSxcbiAgKSB7XG4gICAgc3VwZXIoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSk7XG5cbiAgICB0aGlzLl9fbmF0aXZlVGFnID0gdGFnO1xuICAgIHRoaXMuX19pbnRlcm5hbEluc3RhbmNlSGFuZGxlID0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcbiAgICB0aGlzLl92aWV3Q29uZmlnID0gdmlld0NvbmZpZztcbiAgfVxuXG4gIGdldCBvZmZzZXRIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChcbiAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdCh0aGlzLCB7aW5jbHVkZVRyYW5zZm9ybTogZmFsc2V9KS5oZWlnaHQsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBvZmZzZXRMZWZ0KCk6IG51bWJlciB7XG4gICAgY29uc3Qgbm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG5cbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5nZXRPZmZzZXQobm9kZSk7XG4gICAgICBpZiAob2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQob2Zmc2V0WzJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBvZmZzZXRQYXJlbnQoKTogUmVhZE9ubHlFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3Qgbm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG5cbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5nZXRPZmZzZXQobm9kZSk7XG4gICAgICAvLyBGb3IgY2hpbGRyZW4gb2YgdGhlIHJvb3Qgbm9kZSB3ZSBjdXJyZW50bHkgcmV0dXJuIG9mZnNldCBkYXRhXG4gICAgICAvLyBidXQgYSBgbnVsbGAgcGFyZW50IGJlY2F1c2UgdGhlIHJvb3Qgbm9kZSBpcyBub3QgYWNjZXNzaWJsZVxuICAgICAgLy8gaW4gSmF2YVNjcmlwdCB5ZXQuXG4gICAgICBpZiAob2Zmc2V0ICE9IG51bGwgJiYgb2Zmc2V0WzBdICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0UGFyZW50SW5zdGFuY2VIYW5kbGUgPSBvZmZzZXRbMF07XG4gICAgICAgIGNvbnN0IG9mZnNldFBhcmVudCA9IGdldFB1YmxpY0luc3RhbmNlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUoXG4gICAgICAgICAgb2Zmc2V0UGFyZW50SW5zdGFuY2VIYW5kbGUsXG4gICAgICAgICk7XG4gICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtdHlwZV0gVGhlIHZhbHVlIHJldHVybmVkIGJ5IGBnZXRPZmZzZXRgIGlzIGFsd2F5cyBhbiBpbnN0YW5jZSBoYW5kbGUgZm9yIGBSZWFkT25seUVsZW1lbnRgLlxuICAgICAgICBjb25zdCBvZmZzZXRQYXJlbnRFbGVtZW50OiBSZWFkT25seUVsZW1lbnQgfCBudWxsID0gb2Zmc2V0UGFyZW50O1xuICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBvZmZzZXRUb3AoKTogbnVtYmVyIHtcbiAgICBjb25zdCBub2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcblxuICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmdldE9mZnNldChub2RlKTtcbiAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChvZmZzZXRbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IG9mZnNldFdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoXG4gICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3QodGhpcywge2luY2x1ZGVUcmFuc2Zvcm06IGZhbHNlfSkud2lkdGgsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdCBOYXRpdmUgY29tcGF0aWJpbGl0eSBtZXRob2RzXG4gICAqL1xuXG4gIGJsdXIoKTogdm9pZCB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtZXhhY3RdIE1pZ3JhdGUgYWxsIHVzYWdlcyBvZiBgTmF0aXZlTWV0aG9kc2AgdG8gYW4gaW50ZXJmYWNlIHRvIGZpeCB0aGlzLlxuICAgIFRleHRJbnB1dFN0YXRlLmJsdXJUZXh0SW5wdXQodGhpcyk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1leGFjdF0gTWlncmF0ZSBhbGwgdXNhZ2VzIG9mIGBOYXRpdmVNZXRob2RzYCB0byBhbiBpbnRlcmZhY2UgdG8gZml4IHRoaXMuXG4gICAgVGV4dElucHV0U3RhdGUuZm9jdXNUZXh0SW5wdXQodGhpcyk7XG4gIH1cblxuICBtZWFzdXJlKGNhbGxiYWNrOiBNZWFzdXJlT25TdWNjZXNzQ2FsbGJhY2spIHtcbiAgICBjb25zdCBub2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5tZWFzdXJlKG5vZGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBtZWFzdXJlSW5XaW5kb3coY2FsbGJhY2s6IE1lYXN1cmVJbldpbmRvd09uU3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgY29uc3Qgbm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgbnVsbHRocm93cyhnZXRGYWJyaWNVSU1hbmFnZXIoKSkubWVhc3VyZUluV2luZG93KG5vZGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBtZWFzdXJlTGF5b3V0KFxuICAgIHJlbGF0aXZlVG9OYXRpdmVOb2RlOiBudW1iZXIgfCBFbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8bWl4ZWQ+PixcbiAgICBvblN1Y2Nlc3M6IE1lYXN1cmVMYXlvdXRPblN1Y2Nlc3NDYWxsYmFjayxcbiAgICBvbkZhaWw/OiAoKSA9PiB2b2lkIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8sXG4gICkge1xuICAgIGlmICghKHJlbGF0aXZlVG9OYXRpdmVOb2RlIGluc3RhbmNlb2YgUmVhZE9ubHlOb2RlKSkge1xuICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnV2FybmluZzogcmVmLm1lYXN1cmVMYXlvdXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHJlZiB0byBhIG5hdGl2ZSBjb21wb25lbnQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRvU3RhdGVOb2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcbiAgICBjb25zdCBmcm9tU3RhdGVOb2RlID0gZ2V0U2hhZG93Tm9kZShyZWxhdGl2ZVRvTmF0aXZlTm9kZSk7XG5cbiAgICBpZiAodG9TdGF0ZU5vZGUgIT0gbnVsbCAmJiBmcm9tU3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgIG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLm1lYXN1cmVMYXlvdXQoXG4gICAgICAgIHRvU3RhdGVOb2RlLFxuICAgICAgICBmcm9tU3RhdGVOb2RlLFxuICAgICAgICBvbkZhaWwgIT0gbnVsbCA/IG9uRmFpbCA6IG5vb3AsXG4gICAgICAgIG9uU3VjY2VzcyAhPSBudWxsID8gb25TdWNjZXNzIDogbm9vcCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0TmF0aXZlUHJvcHMobmF0aXZlUHJvcHM6IHsuLi59KTogdm9pZCB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHdhcm5Gb3JTdHlsZVByb3BzKG5hdGl2ZVByb3BzLCB0aGlzLl92aWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlUGF5bG9hZCA9IGNyZWF0ZUF0dHJpYnV0ZVBheWxvYWQoXG4gICAgICBuYXRpdmVQcm9wcyxcbiAgICAgIHRoaXMuX3ZpZXdDb25maWcudmFsaWRBdHRyaWJ1dGVzLFxuICAgICk7XG5cbiAgICBjb25zdCBub2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcblxuICAgIGlmIChub2RlICE9IG51bGwgJiYgdXBkYXRlUGF5bG9hZCAhPSBudWxsKSB7XG4gICAgICBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5zZXROYXRpdmVQcm9wcyhub2RlLCB1cGRhdGVQYXlsb2FkKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7QXR0cmlidXRlQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdhcm5Gb3JTdHlsZVByb3BzKFxuICBwcm9wczogey4uLn0sXG4gIHZhbGlkQXR0cmlidXRlczogQXR0cmlidXRlQ29uZmlndXJhdGlvbixcbik6IHZvaWQge1xuICBpZiAoX19ERVZfXykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbGlkQXR0cmlidXRlcy5zdHlsZSkge1xuICAgICAgaWYgKCEodmFsaWRBdHRyaWJ1dGVzW2tleV0gfHwgcHJvcHNba2V5XSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdZb3UgYXJlIHNldHRpbmcgdGhlIHN0eWxlIGB7ICVzJyArXG4gICAgICAgICAgICAnOiAuLi4gfWAgYXMgYSBwcm9wLiBZb3UgJyArXG4gICAgICAgICAgICAnc2hvdWxkIG5lc3QgaXQgaW4gYSBzdHlsZSBvYmplY3QuICcgK1xuICAgICAgICAgICAgJ0UuZy4gYHsgc3R5bGU6IHsgJXMnICtcbiAgICAgICAgICAgICc6IC4uLiB9IH1gJyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAga2V5LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbi8vIGZsb3dsaW50IHVuc2FmZS1nZXR0ZXJzLXNldHRlcnM6b2ZmXG5cbmltcG9ydCB0eXBlIEhUTUxDb2xsZWN0aW9uIGZyb20gJy4uL29sZHN0eWxlY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24nO1xuXG5pbXBvcnQge2dldEZhYnJpY1VJTWFuYWdlcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlYWN0TmF0aXZlL0ZhYnJpY1VJTWFuYWdlcic7XG5pbXBvcnQgRE9NUmVjdCBmcm9tICcuLi9nZW9tZXRyeS9ET01SZWN0JztcbmltcG9ydCB7Y3JlYXRlSFRNTENvbGxlY3Rpb259IGZyb20gJy4uL29sZHN0eWxlY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24nO1xuaW1wb3J0IFJlYWRPbmx5Tm9kZSwge1xuICBnZXRDaGlsZE5vZGVzLFxuICBnZXRJbnN0YW5jZUhhbmRsZSxcbiAgZ2V0U2hhZG93Tm9kZSxcbn0gZnJvbSAnLi9SZWFkT25seU5vZGUnO1xuaW1wb3J0IHtnZXRFbGVtZW50U2libGluZ30gZnJvbSAnLi91dGlsaXRpZXMvVHJhdmVyc2FsJztcbmltcG9ydCBudWxsdGhyb3dzIGZyb20gJ251bGx0aHJvd3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seUVsZW1lbnQgZXh0ZW5kcyBSZWFkT25seU5vZGUge1xuICBnZXQgY2hpbGRFbGVtZW50Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZ2V0Q2hpbGRFbGVtZW50cyh0aGlzKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogSFRNTENvbGxlY3Rpb248UmVhZE9ubHlFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKGdldENoaWxkRWxlbWVudHModGhpcykpO1xuICB9XG5cbiAgZ2V0IGNsaWVudEhlaWdodCgpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuXG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgY29uc3QgaW5uZXJTaXplID0gbnVsbHRocm93cyhnZXRGYWJyaWNVSU1hbmFnZXIoKSkuZ2V0SW5uZXJTaXplKG5vZGUpO1xuICAgICAgaWYgKGlubmVyU2l6ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBpbm5lclNpemVbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgY2xpZW50TGVmdCgpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuXG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgY29uc3QgYm9yZGVyU2l6ZSA9IG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmdldEJvcmRlclNpemUobm9kZSk7XG4gICAgICBpZiAoYm9yZGVyU2l6ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBib3JkZXJTaXplWzNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IGNsaWVudFRvcCgpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuXG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgY29uc3QgYm9yZGVyU2l6ZSA9IG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmdldEJvcmRlclNpemUobm9kZSk7XG4gICAgICBpZiAoYm9yZGVyU2l6ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBib3JkZXJTaXplWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IGNsaWVudFdpZHRoKCk6IG51bWJlciB7XG4gICAgY29uc3Qgbm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG5cbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBpbm5lclNpemUgPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5nZXRJbm5lclNpemUobm9kZSk7XG4gICAgICBpZiAoaW5uZXJTaXplICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlubmVyU2l6ZVswXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBmaXJzdEVsZW1lbnRDaGlsZCgpOiBSZWFkT25seUVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBjaGlsZEVsZW1lbnRzID0gZ2V0Q2hpbGRFbGVtZW50cyh0aGlzKTtcblxuICAgIGlmIChjaGlsZEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHNbMF07XG4gIH1cblxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbnN0YW5jZUhhbmRsZSA9IGdldEluc3RhbmNlSGFuZGxlKHRoaXMpO1xuICAgIC8vIFRPRE86IG1pZ3JhdGUgb2ZmIHRoaXMgcHJpdmF0ZSBSZWFjdCBBUElcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXVzZV1cbiAgICBjb25zdCBwcm9wcyA9IGluc3RhbmNlSGFuZGxlPy5zdGF0ZU5vZGU/LmNhbm9uaWNhbD8uY3VycmVudFByb3BzO1xuICAgIHJldHVybiBwcm9wcz8uaWQgPz8gcHJvcHM/Lm5hdGl2ZUlEID8/ICcnO1xuICB9XG5cbiAgZ2V0IGxhc3RFbGVtZW50Q2hpbGQoKTogUmVhZE9ubHlFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IGdldENoaWxkRWxlbWVudHModGhpcyk7XG5cbiAgICBpZiAoY2hpbGRFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZEVsZW1lbnRzW2NoaWxkRWxlbWVudHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBnZXQgbmV4dEVsZW1lbnRTaWJsaW5nKCk6IFJlYWRPbmx5RWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBnZXRFbGVtZW50U2libGluZyh0aGlzLCAnbmV4dCcpO1xuICB9XG5cbiAgZ2V0IG5vZGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFnTmFtZTtcbiAgfVxuXG4gIGdldCBub2RlVHlwZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBSZWFkT25seU5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG5cbiAgZ2V0IG5vZGVWYWx1ZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNldCBub2RlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge31cblxuICBnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpOiBSZWFkT25seUVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0RWxlbWVudFNpYmxpbmcodGhpcywgJ3ByZXZpb3VzJyk7XG4gIH1cblxuICBnZXQgc2Nyb2xsSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgY29uc3Qgbm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG5cbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gbnVsbHRocm93cyhnZXRGYWJyaWNVSU1hbmFnZXIoKSkuZ2V0U2Nyb2xsU2l6ZShub2RlKTtcbiAgICAgIGlmIChzY3JvbGxTaXplICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHNjcm9sbFNpemVbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgc2Nyb2xsTGVmdCgpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuXG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5nZXRTY3JvbGxQb3NpdGlvbihcbiAgICAgICAgbm9kZSxcbiAgICAgICk7XG4gICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb25bMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgc2Nyb2xsVG9wKCk6IG51bWJlciB7XG4gICAgY29uc3Qgbm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG5cbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmdldFNjcm9sbFBvc2l0aW9uKFxuICAgICAgICBub2RlLFxuICAgICAgKTtcbiAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvblsxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBzY3JvbGxXaWR0aCgpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuXG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmdldFNjcm9sbFNpemUobm9kZSk7XG4gICAgICBpZiAoc2Nyb2xsU2l6ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxTaXplWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IHRhZ05hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcblxuICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5nZXRUYWdOYW1lKG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldCB0ZXh0Q29udGVudCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzaGFkb3dOb2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcblxuICAgIGlmIChzaGFkb3dOb2RlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5nZXRUZXh0Q29udGVudChzaGFkb3dOb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKTogRE9NUmVjdCB7XG4gICAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdCh0aGlzLCB7aW5jbHVkZVRyYW5zZm9ybTogdHJ1ZX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvaW50ZXIgQ2FwdHVyZSBBUElzXG4gICAqL1xuICBoYXNQb2ludGVyQ2FwdHVyZShwb2ludGVySWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5oYXNQb2ludGVyQ2FwdHVyZShcbiAgICAgICAgbm9kZSxcbiAgICAgICAgcG9pbnRlcklkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2V0UG9pbnRlckNhcHR1cmUocG9pbnRlcklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKS5zZXRQb2ludGVyQ2FwdHVyZShub2RlLCBwb2ludGVySWQpO1xuICAgIH1cbiAgfVxuXG4gIHJlbGVhc2VQb2ludGVyQ2FwdHVyZShwb2ludGVySWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgIG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShub2RlLCBwb2ludGVySWQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDaGlsZEVsZW1lbnRzKG5vZGU6IFJlYWRPbmx5Tm9kZSk6ICRSZWFkT25seUFycmF5PFJlYWRPbmx5RWxlbWVudD4ge1xuICAvLyAkRmxvd0lzc3VlW2luY29tcGF0aWJsZS1jYWxsXVxuICByZXR1cm4gZ2V0Q2hpbGROb2Rlcyhub2RlKS5maWx0ZXIoXG4gICAgY2hpbGROb2RlID0+IGNoaWxkTm9kZSBpbnN0YW5jZW9mIFJlYWRPbmx5RWxlbWVudCxcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgYWx3YXlzIGluY2x1ZGVzIHRyYW5zZm9ybSxcbiAqIHNvIHdlIHVzZSB0aGlzIGludGVybmFsIHZlcnNpb24gdG8gZ2V0IHRoZSBkYXRhIHdpdGhvdXQgdHJhbnNmb3JtIHRvXG4gKiBpbXBsZW1lbnQgbWV0aG9kcyBsaWtlIGBvZmZzZXRXaWR0aGAgYW5kIGBvZmZzZXRIZWlnaHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KFxuICBub2RlOiBSZWFkT25seUVsZW1lbnQsXG4gIHtpbmNsdWRlVHJhbnNmb3JtfToge2luY2x1ZGVUcmFuc2Zvcm06IGJvb2xlYW59LFxuKTogRE9NUmVjdCB7XG4gIGNvbnN0IHNoYWRvd05vZGUgPSBnZXRTaGFkb3dOb2RlKG5vZGUpO1xuXG4gIGlmIChzaGFkb3dOb2RlICE9IG51bGwpIHtcbiAgICBjb25zdCByZWN0ID0gbnVsbHRocm93cyhnZXRGYWJyaWNVSU1hbmFnZXIoKSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KFxuICAgICAgc2hhZG93Tm9kZSxcbiAgICAgIGluY2x1ZGVUcmFuc2Zvcm0sXG4gICAgKTtcblxuICAgIGlmIChyZWN0KSB7XG4gICAgICByZXR1cm4gbmV3IERPTVJlY3QocmVjdFswXSwgcmVjdFsxXSwgcmVjdFsyXSwgcmVjdFszXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW1wdHkgcmVjdCBpZiBhbnkgb2YgdGhlIGFib3ZlIGZhaWxlZFxuICByZXR1cm4gbmV3IERPTVJlY3QoMCwgMCwgMCwgMCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuaW1wb3J0IHR5cGUge1xuICBJbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuICBOb2RlIGFzIFNoYWRvd05vZGUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIE5vZGVMaXN0IGZyb20gJy4uL29sZHN0eWxlY29sbGVjdGlvbnMvTm9kZUxpc3QnO1xuaW1wb3J0IHR5cGUgUmVhZE9ubHlFbGVtZW50IGZyb20gJy4vUmVhZE9ubHlFbGVtZW50JztcblxuaW1wb3J0IHtnZXRGYWJyaWNVSU1hbmFnZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9GYWJyaWNVSU1hbmFnZXInO1xuaW1wb3J0IHtjcmVhdGVOb2RlTGlzdH0gZnJvbSAnLi4vb2xkc3R5bGVjb2xsZWN0aW9ucy9Ob2RlTGlzdCc7XG5pbXBvcnQgbnVsbHRocm93cyBmcm9tICdudWxsdGhyb3dzJztcblxuLy8gV2UgaW5pdGlhbGl6ZSB0aGlzIGxhemlseSB0byBhdm9pZCBhIHJlcXVpcmUgY3ljbGVcbi8vIChgUmVhZE9ubHlFbGVtZW50YCBhbHNvIGRlcGVuZHMgb24gYFJlYWRPbmx5Tm9kZWApLlxubGV0IFJlYWRPbmx5RWxlbWVudENsYXNzOiBDbGFzczxSZWFkT25seUVsZW1lbnQ+O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seU5vZGUge1xuICBjb25zdHJ1Y3RvcihpbnRlcm5hbEluc3RhbmNlSGFuZGxlOiBJbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gICAgc2V0SW5zdGFuY2VIYW5kbGUodGhpcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSk7XG4gIH1cblxuICBnZXQgY2hpbGROb2RlcygpOiBOb2RlTGlzdDxSZWFkT25seU5vZGU+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gZ2V0Q2hpbGROb2Rlcyh0aGlzKTtcbiAgICByZXR1cm4gY3JlYXRlTm9kZUxpc3QoY2hpbGROb2Rlcyk7XG4gIH1cblxuICBnZXQgZmlyc3RDaGlsZCgpOiBSZWFkT25seU5vZGUgfCBudWxsIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gZ2V0Q2hpbGROb2Rlcyh0aGlzKTtcblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNbMF07XG4gIH1cblxuICBnZXQgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2hhZG93Tm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG5cbiAgICBpZiAoc2hhZG93Tm9kZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmlzQ29ubmVjdGVkKHNoYWRvd05vZGUpO1xuICB9XG5cbiAgZ2V0IGxhc3RDaGlsZCgpOiBSZWFkT25seU5vZGUgfCBudWxsIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gZ2V0Q2hpbGROb2Rlcyh0aGlzKTtcblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNbY2hpbGROb2Rlcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIGdldCBuZXh0U2libGluZygpOiBSZWFkT25seU5vZGUgfCBudWxsIHtcbiAgICBjb25zdCBbc2libGluZ3MsIHBvc2l0aW9uXSA9IGdldE5vZGVTaWJsaW5nc0FuZFBvc2l0aW9uKHRoaXMpO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSBzaWJsaW5ncy5sZW5ndGggLSAxKSB7XG4gICAgICAvLyB0aGlzIG5vZGUgaXMgdGhlIGxhc3QgY2hpbGQgb2YgaXRzIHBhcmVudCwgc28gdGhlcmUgaXMgbm8gbmV4dCBzaWJsaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpYmxpbmdzW3Bvc2l0aW9uICsgMV07XG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqL1xuICBnZXQgbm9kZU5hbWUoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ2Bub2RlTmFtZWAgaXMgYWJzdHJhY3QgYW5kIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBzdWJjbGFzcyBvZiBgUmVhZE9ubHlOb2RlYCcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIGdldCBub2RlVHlwZSgpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnYG5vZGVUeXBlYCBpcyBhYnN0cmFjdCBhbmQgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBhIHN1YmNsYXNzIG9mIGBSZWFkT25seU5vZGVgJyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgZ2V0IG5vZGVWYWx1ZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ2Bub2RlVmFsdWVgIGlzIGFic3RyYWN0IGFuZCBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgc3ViY2xhc3Mgb2YgYFJlYWRPbmx5Tm9kZWAnLFxuICAgICk7XG4gIH1cblxuICBnZXQgcGFyZW50RWxlbWVudCgpOiBSZWFkT25seUVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5wYXJlbnROb2RlO1xuXG4gICAgaWYgKFJlYWRPbmx5RWxlbWVudENsYXNzID09IG51bGwpIHtcbiAgICAgIC8vIFdlIGluaXRpYWxpemUgdGhpcyBsYXppbHkgdG8gYXZvaWQgYSByZXF1aXJlIGN5Y2xlLlxuICAgICAgUmVhZE9ubHlFbGVtZW50Q2xhc3MgPSByZXF1aXJlKCcuL1JlYWRPbmx5RWxlbWVudCcpLmRlZmF1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBSZWFkT25seUVsZW1lbnRDbGFzcykge1xuICAgICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgcGFyZW50Tm9kZSgpOiBSZWFkT25seU5vZGUgfCBudWxsIHtcbiAgICBjb25zdCBzaGFkb3dOb2RlID0gZ2V0U2hhZG93Tm9kZSh0aGlzKTtcblxuICAgIGlmIChzaGFkb3dOb2RlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEluc3RhbmNlSGFuZGxlID0gbnVsbHRocm93cyhnZXRGYWJyaWNVSU1hbmFnZXIoKSkuZ2V0UGFyZW50Tm9kZShcbiAgICAgIHNoYWRvd05vZGUsXG4gICAgKTtcblxuICAgIGlmIChwYXJlbnRJbnN0YW5jZUhhbmRsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgZ2V0UHVibGljSW5zdGFuY2VGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShwYXJlbnRJbnN0YW5jZUhhbmRsZSkgPz8gbnVsbFxuICAgICk7XG4gIH1cblxuICBnZXQgcHJldmlvdXNTaWJsaW5nKCk6IFJlYWRPbmx5Tm9kZSB8IG51bGwge1xuICAgIGNvbnN0IFtzaWJsaW5ncywgcG9zaXRpb25dID0gZ2V0Tm9kZVNpYmxpbmdzQW5kUG9zaXRpb24odGhpcyk7XG5cbiAgICBpZiAocG9zaXRpb24gPT09IDApIHtcbiAgICAgIC8vIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCwgc28gdGhlcmUgaXMgbm8gcHJldmlvdXMgc2libGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaWJsaW5nc1twb3NpdGlvbiAtIDFdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgZ2V0IHRleHRDb250ZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnYHRleHRDb250ZW50YCBpcyBhYnN0cmFjdCBhbmQgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBhIHN1YmNsYXNzIG9mIGBSZWFkT25seU5vZGVgJyxcbiAgICApO1xuICB9XG5cbiAgY29tcGFyZURvY3VtZW50UG9zaXRpb24ob3RoZXJOb2RlOiBSZWFkT25seU5vZGUpOiBudW1iZXIge1xuICAgIC8vIFF1aWNrIGNoZWNrIHRvIGF2b2lkIGhhdmluZyB0byBjYWxsIGludG8gRmFicmljIGlmIHRoZSBub2RlcyBhcmUgdGhlIHNhbWUuXG4gICAgaWYgKG90aGVyTm9kZSA9PT0gdGhpcykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhZG93Tm9kZSA9IGdldFNoYWRvd05vZGUodGhpcyk7XG4gICAgY29uc3Qgb3RoZXJTaGFkb3dOb2RlID0gZ2V0U2hhZG93Tm9kZShvdGhlck5vZGUpO1xuXG4gICAgaWYgKHNoYWRvd05vZGUgPT0gbnVsbCB8fCBvdGhlclNoYWRvd05vZGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFJlYWRPbmx5Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKFxuICAgICAgc2hhZG93Tm9kZSxcbiAgICAgIG90aGVyU2hhZG93Tm9kZSxcbiAgICApO1xuICB9XG5cbiAgY29udGFpbnMob3RoZXJOb2RlOiBSZWFkT25seU5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAob3RoZXJOb2RlID09PSB0aGlzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY29tcGFyZURvY3VtZW50UG9zaXRpb24ob3RoZXJOb2RlKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIHJldHVybiAocG9zaXRpb24gJiBSZWFkT25seU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSAhPT0gMDtcbiAgfVxuXG4gIGdldFJvb3ROb2RlKCk6IFJlYWRPbmx5Tm9kZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtdGhpc1xuICAgIGxldCBsYXN0S25vd25QYXJlbnQ6IFJlYWRPbmx5Tm9kZSA9IHRoaXM7XG4gICAgbGV0IG5leHRQb3NzaWJsZVBhcmVudDogP1JlYWRPbmx5Tm9kZSA9IHRoaXMucGFyZW50Tm9kZTtcblxuICAgIHdoaWxlIChuZXh0UG9zc2libGVQYXJlbnQgIT0gbnVsbCkge1xuICAgICAgbGFzdEtub3duUGFyZW50ID0gbmV4dFBvc3NpYmxlUGFyZW50O1xuICAgICAgbmV4dFBvc3NpYmxlUGFyZW50ID0gbmV4dFBvc3NpYmxlUGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RLbm93blBhcmVudDtcbiAgfVxuXG4gIGhhc0NoaWxkTm9kZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldENoaWxkTm9kZXModGhpcykubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qXG4gICAqIE5vZGUgdHlwZXMsIGFzIHJldHVybmVkIGJ5IHRoZSBgbm9kZVR5cGVgIHByb3BlcnR5LlxuICAgKi9cblxuICAvKipcbiAgICogVHlwZSBvZiBFbGVtZW50LCBIVE1MRWxlbWVudCBhbmQgUmVhY3ROYXRpdmVFbGVtZW50IGluc3RhbmNlcy5cbiAgICovXG4gIHN0YXRpYyBFTEVNRU5UX05PREU6IG51bWJlciA9IDE7XG4gIC8qKlxuICAgKiBDdXJyZW50bHkgVW51c2VkIGluIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIHN0YXRpYyBBVFRSSUJVVEVfTk9ERTogbnVtYmVyID0gMjtcbiAgLyoqXG4gICAqIFRleHQgbm9kZXMuXG4gICAqL1xuICBzdGF0aWMgVEVYVF9OT0RFOiBudW1iZXIgPSAzO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVW51c2VkIGluIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIHN0YXRpYyBDREFUQV9TRUNUSU9OX05PREU6IG51bWJlciA9IDQ7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgc3RhdGljIEVOVElUWV9SRUZFUkVOQ0VfTk9ERTogbnVtYmVyID0gNTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzdGF0aWMgRU5USVRZX05PREU6IG51bWJlciA9IDY7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVbnVzZWQgaW4gUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgc3RhdGljIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTogbnVtYmVyID0gNztcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVudXNlZCBpbiBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICBzdGF0aWMgQ09NTUVOVF9OT0RFOiBudW1iZXIgPSA4O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVW51c2VkIGluIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIHN0YXRpYyBET0NVTUVOVF9OT0RFOiBudW1iZXIgPSA5O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVW51c2VkIGluIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIHN0YXRpYyBET0NVTUVOVF9UWVBFX05PREU6IG51bWJlciA9IDEwO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVW51c2VkIGluIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIHN0YXRpYyBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOiBudW1iZXIgPSAxMTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzdGF0aWMgTk9UQVRJT05fTk9ERTogbnVtYmVyID0gMTI7XG5cbiAgLypcbiAgICogRG9jdW1lbnQgcG9zaXRpb24gZmxhZ3MuIFVzZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZlxuICAgKiBgY29tcGFyZURvY3VtZW50UG9zaXRpb24oKWAuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBCb3RoIG5vZGVzIGFyZSBpbiBkaWZmZXJlbnQgZG9jdW1lbnRzLlxuICAgKi9cbiAgc3RhdGljIERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRDogbnVtYmVyID0gMTtcbiAgLyoqXG4gICAqIGBvdGhlck5vZGVgIHByZWNlZGVzIHRoZSBub2RlIGluIGVpdGhlciBhIHByZS1vcmRlciBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgb2YgYSB0cmVlIGNvbnRhaW5pbmcgYm90aFxuICAgKiAoZS5nLiwgYXMgYW4gYW5jZXN0b3Igb3IgcHJldmlvdXMgc2libGluZyBvciBhIGRlc2NlbmRhbnQgb2YgYSBwcmV2aW91cyBzaWJsaW5nIG9yIHByZXZpb3VzIHNpYmxpbmcgb2YgYW4gYW5jZXN0b3IpXG4gICAqIG9yIChpZiB0aGV5IGFyZSBkaXNjb25uZWN0ZWQpIGluIGFuIGFyYml0cmFyeSBidXQgY29uc2lzdGVudCBvcmRlcmluZy5cbiAgICovXG4gIHN0YXRpYyBET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkc6IG51bWJlciA9IDI7XG4gIC8qKlxuICAgKiBgb3RoZXJOb2RlYCBmb2xsb3dzIHRoZSBub2RlIGluIGVpdGhlciBhIHByZS1vcmRlciBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgb2YgYSB0cmVlIGNvbnRhaW5pbmcgYm90aFxuICAgKiAoZS5nLiwgYXMgYSBkZXNjZW5kYW50IG9yIGZvbGxvd2luZyBzaWJsaW5nIG9yIGEgZGVzY2VuZGFudCBvZiBhIGZvbGxvd2luZyBzaWJsaW5nIG9yIGZvbGxvd2luZyBzaWJsaW5nIG9mIGFuIGFuY2VzdG9yKVxuICAgKiBvciAoaWYgdGhleSBhcmUgZGlzY29ubmVjdGVkKSBpbiBhbiBhcmJpdHJhcnkgYnV0IGNvbnNpc3RlbnQgb3JkZXJpbmcuXG4gICAqL1xuICBzdGF0aWMgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HOiBudW1iZXIgPSA0O1xuICAvKipcbiAgICogYG90aGVyTm9kZWAgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIG5vZGUuXG4gICAqL1xuICBzdGF0aWMgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlM6IG51bWJlciA9IDg7XG4gIC8qKlxuICAgKiBgb3RoZXJOb2RlYCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBzdGF0aWMgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZOiBudW1iZXIgPSAxNjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVudXNlZCBpbiBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICBzdGF0aWMgRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUM6IG51bWJlciA9IDMyO1xufVxuXG5jb25zdCBJTlNUQU5DRV9IQU5ETEVfS0VZID0gU3ltYm9sKCdpbnRlcm5hbEluc3RhbmNlSGFuZGxlJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZUhhbmRsZShub2RlOiBSZWFkT25seU5vZGUpOiBJbnRlcm5hbEluc3RhbmNlSGFuZGxlIHtcbiAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW3Byb3AtbWlzc2luZ11cbiAgcmV0dXJuIG5vZGVbSU5TVEFOQ0VfSEFORExFX0tFWV07XG59XG5cbmZ1bmN0aW9uIHNldEluc3RhbmNlSGFuZGxlKFxuICBub2RlOiBSZWFkT25seU5vZGUsXG4gIGluc3RhbmNlSGFuZGxlOiBJbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuKTogdm9pZCB7XG4gIC8vICRGbG93RXhwZWN0ZWRFcnJvcltwcm9wLW1pc3NpbmddXG4gIG5vZGVbSU5TVEFOQ0VfSEFORExFX0tFWV0gPSBpbnN0YW5jZUhhbmRsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNoYWRvd05vZGUobm9kZTogUmVhZE9ubHlOb2RlKTogP1NoYWRvd05vZGUge1xuICAvLyBMYXp5IGltcG9ydCBGYWJyaWMgaGVyZSB0byBhdm9pZCBET00gTm9kZSBBUElzIGNsYXNzZXMgZnJvbSBoYXZpbmcgc2lkZS1lZmZlY3RzLlxuICAvLyBXaXRoIGEgc3RhdGljIGltcG9ydCB3ZSBjYW4ndCB1c2UgdGhlc2UgY2xhc3NlcyBmb3IgUGFwZXItb25seSB2YXJpYW50cy5cbiAgY29uc3QgUmVhY3RGYWJyaWMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9MaWJyYXJpZXMvUmVuZGVyZXIvc2hpbXMvUmVhY3RGYWJyaWMnKTtcbiAgcmV0dXJuIFJlYWN0RmFicmljLmdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShnZXRJbnN0YW5jZUhhbmRsZShub2RlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE5vZGVzKFxuICBub2RlOiBSZWFkT25seU5vZGUsXG4pOiAkUmVhZE9ubHlBcnJheTxSZWFkT25seU5vZGU+IHtcbiAgY29uc3Qgc2hhZG93Tm9kZSA9IGdldFNoYWRvd05vZGUobm9kZSk7XG5cbiAgaWYgKHNoYWRvd05vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkTm9kZUluc3RhbmNlSGFuZGxlcyA9IG51bGx0aHJvd3MoXG4gICAgZ2V0RmFicmljVUlNYW5hZ2VyKCksXG4gICkuZ2V0Q2hpbGROb2RlcyhzaGFkb3dOb2RlKTtcbiAgcmV0dXJuIGNoaWxkTm9kZUluc3RhbmNlSGFuZGxlc1xuICAgIC5tYXAoaW5zdGFuY2VIYW5kbGUgPT5cbiAgICAgIGdldFB1YmxpY0luc3RhbmNlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUoaW5zdGFuY2VIYW5kbGUpLFxuICAgIClcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlU2libGluZ3NBbmRQb3NpdGlvbihcbiAgbm9kZTogUmVhZE9ubHlOb2RlLFxuKTogWyRSZWFkT25seUFycmF5PFJlYWRPbmx5Tm9kZT4sIG51bWJlcl0ge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQgPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgbm9kZSBpcyB0aGUgcm9vdCBvciBpdCdzIGRpc2Nvbm5lY3RlZC5cbiAgICByZXR1cm4gW1tub2RlXSwgMF07XG4gIH1cblxuICBjb25zdCBzaWJsaW5ncyA9IGdldENoaWxkTm9kZXMocGFyZW50KTtcbiAgY29uc3QgcG9zaXRpb24gPSBzaWJsaW5ncy5pbmRleE9mKG5vZGUpO1xuXG4gIGlmIChwb3NpdGlvbiA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWlzc2luZyBub2RlIGluIHBhcmVudCdzIGNoaWxkIG5vZGUgbGlzdFwiKTtcbiAgfVxuXG4gIHJldHVybiBbc2libGluZ3MsIHBvc2l0aW9uXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY0luc3RhbmNlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUoXG4gIGluc3RhbmNlSGFuZGxlOiBJbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuKTogP1JlYWRPbmx5Tm9kZSB7XG4gIC8vIExhenkgaW1wb3J0IEZhYnJpYyBoZXJlIHRvIGF2b2lkIERPTSBOb2RlIEFQSXMgY2xhc3NlcyBmcm9tIGhhdmluZyBzaWRlLWVmZmVjdHMuXG4gIC8vIFdpdGggYSBzdGF0aWMgaW1wb3J0IHdlIGNhbid0IHVzZSB0aGVzZSBjbGFzc2VzIGZvciBQYXBlci1vbmx5IHZhcmlhbnRzLlxuICBjb25zdCBSZWFjdEZhYnJpYyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdEZhYnJpYycpO1xuICBjb25zdCBtaXhlZFB1YmxpY0luc3RhbmNlID1cbiAgICBSZWFjdEZhYnJpYy5nZXRQdWJsaWNJbnN0YW5jZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlKGluc3RhbmNlSGFuZGxlKTtcbiAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS1yZXR1cm5dIFJlYWN0IGRlZmluZXMgcHVibGljIGluc3RhbmNlcyBhcyBcIm1peGVkXCIgYmVjYXVzZSBpdCBjYW4ndCBhY2Nlc3MgdGhlIGRlZmluaXRpb24gZnJvbSBSZWFjdCBOYXRpdmUuXG4gIHJldHVybiBtaXhlZFB1YmxpY0luc3RhbmNlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbi8vIGZsb3dsaW50IHVuc2FmZS1nZXR0ZXJzLXNldHRlcnM6b2ZmXG5cbmltcG9ydCB0eXBlIHtBcnJheUxpa2V9IGZyb20gJy4vQXJyYXlMaWtlVXRpbHMnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVFbnRyaWVzSXRlcmF0b3IsXG4gIGNyZWF0ZUtleUl0ZXJhdG9yLFxuICBjcmVhdGVWYWx1ZUl0ZXJhdG9yLFxufSBmcm9tICcuL0FycmF5TGlrZVV0aWxzJztcblxuLy8gSU1QT1JUQU5UOiBUaGUgRmxvdyB0eXBlIGRlZmluaXRpb24gZm9yIHRoaXMgbW9kdWxlIGlzIGRlZmluZWQgaW4gYE5vZGVMaXN0LmpzLmZsb3dgXG4vLyBiZWNhdXNlIEZsb3cgb25seSBzdXBwb3J0cyBpbmRleGVycyBpbiBjbGFzc2VzIGluIGRlY2xhcmF0aW9uIGZpbGVzLlxuXG4vLyAkRmxvd0lzc3VlW3Byb3AtbWlzc2luZ10gRmxvdyBkb2Vzbid0IHVuZGVyc3RhbmQgW1N5bWJvbC5pdGVyYXRvcl0oKSB7fSBhbmQgdGhpbmtzIHRoaXMgY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgdGhlIEl0ZXJhYmxlPFQ+IGludGVyZmFjZS5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vZGVMaXN0PFQ+IGltcGxlbWVudHMgSXRlcmFibGU8VD4sIEFycmF5TGlrZTxUPiB7XG4gIF9sZW5ndGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVXNlIGBjcmVhdGVOb2RlTGlzdGAgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcHJpdmF0ZSBUaGlzIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBkZWNsYXJhdGlvbiBmaWxlLCBzbyB1c2VycyB3aWxsIG5vdCBzZWVcbiAgICogICAgICAgICAgdGhlIHNpZ25hdHVyZSBvZiB0aGUgY29uc3RydWN0b3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50czogJFJlYWRPbmx5QXJyYXk8VD4pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaSwge1xuICAgICAgICB2YWx1ZTogZWxlbWVudHNbaV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLl9sZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcbiAgfVxuXG4gIGl0ZW0oaW5kZXg6IG51bWJlcik6IFQgfCBudWxsIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX2xlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gYXNzaWduaW5nIHRvIHRoZSBpbnRlcmZhY2UgYWxsb3dzIHVzIHRvIGFjY2VzcyB0aGUgaW5kZXhlciBwcm9wZXJ0eSBpbiBhXG4gICAgLy8gdHlwZS1zYWZlIHdheS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzXG4gICAgY29uc3QgYXJyYXlMaWtlOiBBcnJheUxpa2U8VD4gPSB0aGlzO1xuICAgIHJldHVybiBhcnJheUxpa2VbaW5kZXhdO1xuICB9XG5cbiAgZW50cmllcygpOiBJdGVyYXRvcjxbbnVtYmVyLCBUXT4ge1xuICAgIHJldHVybiBjcmVhdGVFbnRyaWVzSXRlcmF0b3IodGhpcyk7XG4gIH1cblxuICBmb3JFYWNoPFRoaXNUeXBlPihcbiAgICBjYWxsYmFja0ZuOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBOb2RlTGlzdDxUPikgPT4gbWl4ZWQsXG4gICAgdGhpc0FyZz86IFRoaXNUeXBlLFxuICApOiB2b2lkIHtcbiAgICAvLyBhc3NpZ25pbmcgdG8gdGhlIGludGVyZmFjZSBhbGxvd3MgdXMgdG8gYWNjZXNzIHRoZSBpbmRleGVyIHByb3BlcnR5IGluIGFcbiAgICAvLyB0eXBlLXNhZmUgd2F5LlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXRoaXNcbiAgICBjb25zdCBhcnJheUxpa2U6IEFycmF5TGlrZTxUPiA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAodGhpc0FyZyA9PSBudWxsKSB7XG4gICAgICAgIGNhbGxiYWNrRm4oYXJyYXlMaWtlW2luZGV4XSwgaW5kZXgsIHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2tGbi5jYWxsKHRoaXNBcmcsIGFycmF5TGlrZVtpbmRleF0sIGluZGV4LCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBrZXlzKCk6IEl0ZXJhdG9yPG51bWJlcj4ge1xuICAgIHJldHVybiBjcmVhdGVLZXlJdGVyYXRvcih0aGlzKTtcbiAgfVxuXG4gIHZhbHVlcygpOiBJdGVyYXRvcjxUPiB7XG4gICAgcmV0dXJuIGNyZWF0ZVZhbHVlSXRlcmF0b3IodGhpcyk7XG4gIH1cblxuICAvLyAkRmxvd0lzc3VlW3Vuc3VwcG9ydGVkLXN5bnRheF0gRmxvdyBkb2VzIG5vdCBzdXBwb3J0IGNvbXB1dGVkIHByb3BlcnRpZXMgaW4gY2xhc3Nlcy5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmF0b3I8VD4ge1xuICAgIHJldHVybiBjcmVhdGVWYWx1ZUl0ZXJhdG9yKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBgTm9kZUxpc3RgLFxuICogd2hpY2ggYXZvaWRzIGxlYWtpbmcgaXRzIGNvbnN0cnVjdG9yIHRvIGVuZCB1c2Vycy5cbiAqIFdlIGNhbiBkbyB0aGF0IGJlY2F1c2UgdGhlIGV4dGVybmFsIGRlZmluaXRpb24gb2YgYE5vZGVMaXN0YCBsaXZlcyBpblxuICogYE5vZGVMaXN0LmpzLmZsb3dgLCBub3QgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5vZGVMaXN0PFQ+KGVsZW1lbnRzOiAkUmVhZE9ubHlBcnJheTxUPik6IE5vZGVMaXN0PFQ+IHtcbiAgcmV0dXJuIG5ldyBOb2RlTGlzdChlbGVtZW50cyk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuLyoqXG4gKiBUaGlzIGRlZmluaXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgYnVpbHQtaW4gdHlwZSBgJEFycmF5TGlrZWBcbiAqIHByb3ZpZGVkIGJ5IEZsb3csIGluIHRoYXQgdGhpcyBpcyBhbiBpbnRlcmZhY2UgYW5kIHRoYXQgb25lIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBUaGUgZGlmZmVyZW5jZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSwgd2hlbiB1c2luZyBvYmplY3RzLCBGbG93IHRoaW5rc1xuICogYSBgbGVuZ3RoYCBwcm9wZXJ0eSB3b3VsZCBiZSBjb3BpZWQgb3ZlciB3aGVuIHVzaW5nIHRoZSBzcHJlYWQgb3BlcmF0b3IsXG4gKiB3aGljaCBpcyBpbmNvcnJlY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXJyYXlMaWtlPFQ+IGV4dGVuZHMgSXRlcmFibGU8VD4ge1xuICAvLyBUaGlzIHByb3BlcnR5IHNob3VsZCd2ZSBiZWVuIHJlYWQtb25seSBhcyB3ZWxsLCBidXQgRmxvdyBkb2Vzbid0IGhhbmRsZVxuICAvLyByZWFkLW9ubHkgaW5kZXhlcnMgY29ycmVjdGx5ICh0aGlua3MgcmVhZHMgYXJlIHdyaXRlcyBhbmQgZmFpbHMpLlxuICBbaW5kZXhlcjogbnVtYmVyXTogVDtcbiAgK2xlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNyZWF0ZVZhbHVlSXRlcmF0b3I8VD4oYXJyYXlMaWtlOiBBcnJheUxpa2U8VD4pOiBJdGVyYXRvcjxUPiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XG4gICAgeWllbGQgYXJyYXlMaWtlW2ldO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY3JlYXRlS2V5SXRlcmF0b3I8VD4oXG4gIGFycmF5TGlrZTogQXJyYXlMaWtlPFQ+LFxuKTogSXRlcmF0b3I8bnVtYmVyPiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XG4gICAgeWllbGQgaTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNyZWF0ZUVudHJpZXNJdGVyYXRvcjxUPihcbiAgYXJyYXlMaWtlOiBBcnJheUxpa2U8VD4sXG4pOiBJdGVyYXRvcjxbbnVtYmVyLCBUXT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5TGlrZS5sZW5ndGg7IGkrKykge1xuICAgIHlpZWxkIFtpLCBhcnJheUxpa2VbaV1dO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuaW1wb3J0IHR5cGUge0FycmF5TGlrZX0gZnJvbSAnLi9BcnJheUxpa2VVdGlscyc7XG5cbmltcG9ydCB7Y3JlYXRlVmFsdWVJdGVyYXRvcn0gZnJvbSAnLi9BcnJheUxpa2VVdGlscyc7XG5cbi8vIElNUE9SVEFOVDogVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhpcyBtb2R1bGUgaXMgZGVmaW5lZCBpbiBgSFRNTENvbGxlY3Rpb24uanMuZmxvd2Bcbi8vIGJlY2F1c2UgRmxvdyBvbmx5IHN1cHBvcnRzIGluZGV4ZXJzIGluIGNsYXNzZXMgaW4gZGVjbGFyYXRpb24gZmlsZXMuXG5cbi8vICRGbG93SXNzdWVbcHJvcC1taXNzaW5nXSBGbG93IGRvZXNuJ3QgdW5kZXJzdGFuZCBbU3ltYm9sLml0ZXJhdG9yXSgpIHt9IGFuZCB0aGlua3MgdGhpcyBjbGFzcyBkb2Vzbid0IGltcGxlbWVudCB0aGUgSXRlcmFibGU8VD4gaW50ZXJmYWNlLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSFRNTENvbGxlY3Rpb248VD4gaW1wbGVtZW50cyBJdGVyYWJsZTxUPiwgQXJyYXlMaWtlPFQ+IHtcbiAgX2xlbmd0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBVc2UgYGNyZWF0ZUhUTUxDb2xsZWN0aW9uYCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwcml2YXRlIFRoaXMgaXMgbm90IGRlZmluZWQgaW4gdGhlIGRlY2xhcmF0aW9uIGZpbGUsIHNvIHVzZXJzIHdpbGwgbm90IHNlZVxuICAgKiAgICAgICAgICB0aGUgc2lnbmF0dXJlIG9mIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRzOiAkUmVhZE9ubHlBcnJheTxUPikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBpLCB7XG4gICAgICAgIHZhbHVlOiBlbGVtZW50c1tpXSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XG4gIH1cblxuICBpdGVtKGluZGV4OiBudW1iZXIpOiBUIHwgbnVsbCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGFzc2lnbmluZyB0byB0aGUgaW50ZXJmYWNlIGFsbG93cyB1cyB0byBhY2Nlc3MgdGhlIGluZGV4ZXIgcHJvcGVydHkgaW4gYVxuICAgIC8vIHR5cGUtc2FmZSB3YXkuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtdGhpc1xuICAgIGNvbnN0IGFycmF5TGlrZTogQXJyYXlMaWtlPFQ+ID0gdGhpcztcbiAgICByZXR1cm4gYXJyYXlMaWtlW2luZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVbnVzZWQgaW4gUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgbmFtZWRJdGVtKG5hbWU6IHN0cmluZyk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vICRGbG93SXNzdWVbdW5zdXBwb3J0ZWQtc3ludGF4XSBGbG93IGRvZXMgbm90IHN1cHBvcnQgY29tcHV0ZWQgcHJvcGVydGllcyBpbiBjbGFzc2VzLlxuICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYXRvcjxUPiB7XG4gICAgcmV0dXJuIGNyZWF0ZVZhbHVlSXRlcmF0b3IodGhpcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIGBIVE1MQ29sbGVjdGlvbmAsXG4gKiB3aGljaCBhdm9pZHMgbGVha2luZyBpdHMgY29uc3RydWN0b3IgdG8gZW5kIHVzZXJzLlxuICogV2UgY2FuIGRvIHRoYXQgYmVjYXVzZSB0aGUgZXh0ZXJuYWwgZGVmaW5pdGlvbiBvZiBgSFRNTENvbGxlY3Rpb25gIGxpdmVzIGluXG4gKiBgSFRNTENvbGxlY3Rpb24uanMuZmxvd2AsIG5vdCBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSFRNTENvbGxlY3Rpb248VD4oXG4gIGVsZW1lbnRzOiAkUmVhZE9ubHlBcnJheTxUPixcbik6IEhUTUxDb2xsZWN0aW9uPFQ+IHtcbiAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbihlbGVtZW50cyk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUgUmVhZE9ubHlFbGVtZW50IGZyb20gJy4uL1JlYWRPbmx5RWxlbWVudCc7XG5pbXBvcnQgdHlwZSBSZWFkT25seU5vZGUgZnJvbSAnLi4vUmVhZE9ubHlOb2RlJztcblxuaW1wb3J0IHtnZXRDaGlsZE5vZGVzfSBmcm9tICcuLi9SZWFkT25seU5vZGUnO1xuXG4vLyBXZSBpbml0aWFsaXplIHRoaXMgbGF6aWx5IHRvIGF2b2lkIGEgcmVxdWlyZSBjeWNsZVxuLy8gKGBSZWFkT25seUVsZW1lbnRgIGFsc28gZGVwZW5kcyBvbiBgVHJhdmVyc2FsYCkuXG5sZXQgUmVhZE9ubHlFbGVtZW50Q2xhc3M6IENsYXNzPFJlYWRPbmx5RWxlbWVudD47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50U2libGluZyhcbiAgbm9kZTogUmVhZE9ubHlOb2RlLFxuICBkaXJlY3Rpb246ICduZXh0JyB8ICdwcmV2aW91cycsXG4pOiBSZWFkT25seUVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50ID09IG51bGwpIHtcbiAgICAvLyBUaGlzIG5vZGUgaXMgdGhlIHJvb3Qgb3IgaXQncyBkaXNjb25uZWN0ZWQuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjaGlsZE5vZGVzID0gZ2V0Q2hpbGROb2RlcyhwYXJlbnQpO1xuXG4gIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBjaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XG4gIGlmIChzdGFydFBvc2l0aW9uID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaW5jcmVtZW50ID0gZGlyZWN0aW9uID09PSAnbmV4dCcgPyAxIDogLTE7XG5cbiAgbGV0IHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGluY3JlbWVudDtcblxuICBpZiAoUmVhZE9ubHlFbGVtZW50Q2xhc3MgPT0gbnVsbCkge1xuICAgIC8vIFdlIGluaXRpYWxpemUgdGhpcyBsYXppbHkgdG8gYXZvaWQgYSByZXF1aXJlIGN5Y2xlLlxuICAgIFJlYWRPbmx5RWxlbWVudENsYXNzID0gcmVxdWlyZSgnLi4vUmVhZE9ubHlFbGVtZW50JykuZGVmYXVsdDtcbiAgfVxuXG4gIHdoaWxlIChcbiAgICBjaGlsZE5vZGVzW3Bvc2l0aW9uXSAhPSBudWxsICYmXG4gICAgIShjaGlsZE5vZGVzW3Bvc2l0aW9uXSBpbnN0YW5jZW9mIFJlYWRPbmx5RWxlbWVudENsYXNzKVxuICApIHtcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgaW5jcmVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTm9kZXNbcG9zaXRpb25dID8/IG51bGw7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBIb3N0Q29tcG9uZW50LFxuICBJTmF0aXZlTWV0aG9kcyxcbiAgSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSxcbiAgTWVhc3VyZUluV2luZG93T25TdWNjZXNzQ2FsbGJhY2ssXG4gIE1lYXN1cmVMYXlvdXRPblN1Y2Nlc3NDYWxsYmFjayxcbiAgTWVhc3VyZU9uU3VjY2Vzc0NhbGxiYWNrLFxuICBWaWV3Q29uZmlnLFxufSBmcm9tICcuLi8uLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtFbGVtZW50UmVmfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBUZXh0SW5wdXRTdGF0ZSBmcm9tICcuLi8uLi9Db21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXRTdGF0ZSc7XG5pbXBvcnQge2dldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZX0gZnJvbSAnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3RGYWJyaWMnO1xuaW1wb3J0IHtnZXRGYWJyaWNVSU1hbmFnZXJ9IGZyb20gJy4uL0ZhYnJpY1VJTWFuYWdlcic7XG5pbXBvcnQge2NyZWF0ZX0gZnJvbSAnLi9SZWFjdE5hdGl2ZUF0dHJpYnV0ZVBheWxvYWQnO1xuaW1wb3J0IHdhcm5Gb3JTdHlsZVByb3BzIGZyb20gJy4vd2FybkZvclN0eWxlUHJvcHMnO1xuaW1wb3J0IG51bGx0aHJvd3MgZnJvbSAnbnVsbHRocm93cyc7XG5cbmNvbnN0IHtcbiAgbWVhc3VyZTogZmFicmljTWVhc3VyZSxcbiAgbWVhc3VyZUluV2luZG93OiBmYWJyaWNNZWFzdXJlSW5XaW5kb3csXG4gIG1lYXN1cmVMYXlvdXQ6IGZhYnJpY01lYXN1cmVMYXlvdXQsXG4gIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogZmFicmljR2V0Qm91bmRpbmdDbGllbnRSZWN0LFxuICBzZXROYXRpdmVQcm9wcyxcbn0gPSBudWxsdGhyb3dzKGdldEZhYnJpY1VJTWFuYWdlcigpKTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFRoaXMgaXMgdXNlZCBmb3IgcmVmcyBvbiBob3N0IGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0RmFicmljSG9zdENvbXBvbmVudCBpbXBsZW1lbnRzIElOYXRpdmVNZXRob2RzIHtcbiAgLy8gVGhlc2UgbmVlZCB0byBiZSBhY2Nlc3NpYmxlIGZyb20gYFJlYWN0RmFicmljUHVibGljSW5zdGFuY2VVdGlsc2AuXG4gIF9fbmF0aXZlVGFnOiBudW1iZXI7XG4gIF9faW50ZXJuYWxJbnN0YW5jZUhhbmRsZTogSW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcblxuICBfdmlld0NvbmZpZzogVmlld0NvbmZpZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0YWc6IG51bWJlcixcbiAgICB2aWV3Q29uZmlnOiBWaWV3Q29uZmlnLFxuICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGU6IEludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICkge1xuICAgIHRoaXMuX19uYXRpdmVUYWcgPSB0YWc7XG4gICAgdGhpcy5fdmlld0NvbmZpZyA9IHZpZXdDb25maWc7XG4gICAgdGhpcy5fX2ludGVybmFsSW5zdGFuY2VIYW5kbGUgPSBpbnRlcm5hbEluc3RhbmNlSGFuZGxlO1xuICB9XG5cbiAgYmx1cigpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1leGFjdF0gTWlncmF0ZSBhbGwgdXNhZ2VzIG9mIGBOYXRpdmVNZXRob2RzYCB0byBhbiBpbnRlcmZhY2UgdG8gZml4IHRoaXMuXG4gICAgVGV4dElucHV0U3RhdGUuYmx1clRleHRJbnB1dCh0aGlzKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWV4YWN0XSBNaWdyYXRlIGFsbCB1c2FnZXMgb2YgYE5hdGl2ZU1ldGhvZHNgIHRvIGFuIGludGVyZmFjZSB0byBmaXggdGhpcy5cbiAgICBUZXh0SW5wdXRTdGF0ZS5mb2N1c1RleHRJbnB1dCh0aGlzKTtcbiAgfVxuXG4gIG1lYXN1cmUoY2FsbGJhY2s6IE1lYXN1cmVPblN1Y2Nlc3NDYWxsYmFjaykge1xuICAgIGNvbnN0IG5vZGUgPSBnZXROb2RlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUoXG4gICAgICB0aGlzLl9faW50ZXJuYWxJbnN0YW5jZUhhbmRsZSxcbiAgICApO1xuICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgIGZhYnJpY01lYXN1cmUobm9kZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIG1lYXN1cmVJbldpbmRvdyhjYWxsYmFjazogTWVhc3VyZUluV2luZG93T25TdWNjZXNzQ2FsbGJhY2spIHtcbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlKFxuICAgICAgdGhpcy5fX2ludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICAgKTtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBmYWJyaWNNZWFzdXJlSW5XaW5kb3cobm9kZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIG1lYXN1cmVMYXlvdXQoXG4gICAgcmVsYXRpdmVUb05hdGl2ZU5vZGU6IG51bWJlciB8IEVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+LFxuICAgIG9uU3VjY2VzczogTWVhc3VyZUxheW91dE9uU3VjY2Vzc0NhbGxiYWNrLFxuICAgIG9uRmFpbD86ICgpID0+IHZvaWQgLyogY3VycmVudGx5IHVudXNlZCAqLyxcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHJlbGF0aXZlVG9OYXRpdmVOb2RlID09PSAnbnVtYmVyJyB8fFxuICAgICAgIShyZWxhdGl2ZVRvTmF0aXZlTm9kZSBpbnN0YW5jZW9mIFJlYWN0RmFicmljSG9zdENvbXBvbmVudClcbiAgICApIHtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ1dhcm5pbmc6IHJlZi5tZWFzdXJlTGF5b3V0IG11c3QgYmUgY2FsbGVkIHdpdGggYSByZWYgdG8gYSBuYXRpdmUgY29tcG9uZW50LicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b1N0YXRlTm9kZSA9IGdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShcbiAgICAgIHRoaXMuX19pbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuICAgICk7XG4gICAgY29uc3QgZnJvbVN0YXRlTm9kZSA9IGdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShcbiAgICAgIHJlbGF0aXZlVG9OYXRpdmVOb2RlLl9faW50ZXJuYWxJbnN0YW5jZUhhbmRsZSxcbiAgICApO1xuXG4gICAgaWYgKHRvU3RhdGVOb2RlICE9IG51bGwgJiYgZnJvbVN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICBmYWJyaWNNZWFzdXJlTGF5b3V0KFxuICAgICAgICB0b1N0YXRlTm9kZSxcbiAgICAgICAgZnJvbVN0YXRlTm9kZSxcbiAgICAgICAgb25GYWlsICE9IG51bGwgPyBvbkZhaWwgOiBub29wLFxuICAgICAgICBvblN1Y2Nlc3MgIT0gbnVsbCA/IG9uU3VjY2VzcyA6IG5vb3AsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVuc3RhYmxlX2dldEJvdW5kaW5nQ2xpZW50UmVjdCgpOiBET01SZWN0IHtcbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlKFxuICAgICAgdGhpcy5fX2ludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICAgKTtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCByZWN0ID0gZmFicmljR2V0Qm91bmRpbmdDbGllbnRSZWN0KG5vZGUsIHRydWUpO1xuXG4gICAgICBpZiAocmVjdCkge1xuICAgICAgICByZXR1cm4gbmV3IERPTVJlY3QocmVjdFswXSwgcmVjdFsxXSwgcmVjdFsyXSwgcmVjdFszXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1wdHkgcmVjdCBpZiBhbnkgb2YgdGhlIGFib3ZlIGZhaWxlZFxuICAgIHJldHVybiBuZXcgRE9NUmVjdCgwLCAwLCAwLCAwKTtcbiAgfVxuXG4gIHNldE5hdGl2ZVByb3BzKG5hdGl2ZVByb3BzOiB7Li4ufSk6IHZvaWQge1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB3YXJuRm9yU3R5bGVQcm9wcyhuYXRpdmVQcm9wcywgdGhpcy5fdmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVQYXlsb2FkID0gY3JlYXRlKG5hdGl2ZVByb3BzLCB0aGlzLl92aWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcyk7XG5cbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlKFxuICAgICAgdGhpcy5fX2ludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICAgKTtcbiAgICBpZiAobm9kZSAhPSBudWxsICYmIHVwZGF0ZVBheWxvYWQgIT0gbnVsbCkge1xuICAgICAgc2V0TmF0aXZlUHJvcHMobm9kZSwgdXBkYXRlUGF5bG9hZCk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuaW1wb3J0IFJlYWRPbmx5Q2hhcmFjdGVyRGF0YSBmcm9tICcuL1JlYWRPbmx5Q2hhcmFjdGVyRGF0YSc7XG5pbXBvcnQgUmVhZE9ubHlOb2RlIGZyb20gJy4vUmVhZE9ubHlOb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlUZXh0IGV4dGVuZHMgUmVhZE9ubHlDaGFyYWN0ZXJEYXRhIHtcbiAgLyoqXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgZ2V0IG5vZGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcjdGV4dCc7XG4gIH1cblxuICAvKipcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBnZXQgbm9kZVR5cGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gUmVhZE9ubHlOb2RlLlRFWFRfTk9ERTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbi8vIGZsb3dsaW50IHVuc2FmZS1nZXR0ZXJzLXNldHRlcnM6b2ZmXG5cbmltcG9ydCB0eXBlIFJlYWRPbmx5RWxlbWVudCBmcm9tICcuL1JlYWRPbmx5RWxlbWVudCc7XG5cbmltcG9ydCB7Z2V0RmFicmljVUlNYW5hZ2VyfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvRmFicmljVUlNYW5hZ2VyJztcbmltcG9ydCBSZWFkT25seU5vZGUsIHtnZXRTaGFkb3dOb2RlfSBmcm9tICcuL1JlYWRPbmx5Tm9kZSc7XG5pbXBvcnQge2dldEVsZW1lbnRTaWJsaW5nfSBmcm9tICcuL3V0aWxpdGllcy9UcmF2ZXJzYWwnO1xuaW1wb3J0IG51bGx0aHJvd3MgZnJvbSAnbnVsbHRocm93cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5Q2hhcmFjdGVyRGF0YSBleHRlbmRzIFJlYWRPbmx5Tm9kZSB7XG4gIGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKTogUmVhZE9ubHlFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldEVsZW1lbnRTaWJsaW5nKHRoaXMsICduZXh0Jyk7XG4gIH1cblxuICBnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpOiBSZWFkT25seUVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0RWxlbWVudFNpYmxpbmcodGhpcywgJ3ByZXZpb3VzJyk7XG4gIH1cblxuICBnZXQgZGF0YSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNoYWRvd05vZGUgPSBnZXRTaGFkb3dOb2RlKHRoaXMpO1xuXG4gICAgaWYgKHNoYWRvd05vZGUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGx0aHJvd3MoZ2V0RmFicmljVUlNYW5hZ2VyKCkpLmdldFRleHRDb250ZW50KHNoYWRvd05vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGdldCB0ZXh0Q29udGVudCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgZ2V0IG5vZGVWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBzdWJzdHJpbmdEYXRhKG9mZnNldDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGV4ZWN1dGUgJ3N1YnN0cmluZ0RhdGEnIG9uICdDaGFyYWN0ZXJEYXRhJzogVGhlIG9mZnNldCAke29mZnNldH0gaXMgbmVnYXRpdmUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPiBkYXRhLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBleGVjdXRlICdzdWJzdHJpbmdEYXRhJyBvbiAnQ2hhcmFjdGVyRGF0YSc6IFRoZSBvZmZzZXQgJHtvZmZzZXR9IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbm9kZSdzIGxlbmd0aCAoJHtkYXRhLmxlbmd0aH0pLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBsZXQgYWRqdXN0ZWRDb3VudCA9IGNvdW50IDwgMCB8fCBjb3VudCA+IGRhdGEubGVuZ3RoID8gZGF0YS5sZW5ndGggOiBjb3VudDtcbiAgICByZXR1cm4gZGF0YS5zbGljZShvZmZzZXQsIG9mZnNldCArIGFkanVzdGVkQ291bnQpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwQ29udGFpbmVyUm9vdFZpZXdSZWYsXG4gIERlYnVnZ2luZ092ZXJsYXlSZWYsXG59IGZyb20gJy4uL1JlYWN0TmF0aXZlL0FwcENvbnRhaW5lci1kZXYnO1xuXG5pbXBvcnQgRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5IGZyb20gJy4vRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5JztcbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHVzZVN1YnNjcmliZVRvRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5ID0gKFxuICByb290Vmlld1JlZjogQXBwQ29udGFpbmVyUm9vdFZpZXdSZWYsXG4gIGRlYnVnZ2luZ092ZXJsYXlSZWY6IERlYnVnZ2luZ092ZXJsYXlSZWYsXG4pID0+IHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpYmVyID0ge3Jvb3RWaWV3UmVmLCBkZWJ1Z2dpbmdPdmVybGF5UmVmfTtcblxuICAgIERlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgcmV0dXJuICgpID0+IERlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeS51bnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgfSwgW3Jvb3RWaWV3UmVmLCBkZWJ1Z2dpbmdPdmVybGF5UmVmXSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VTdWJzY3JpYmVUb0RlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKi9cblxuaW1wb3J0IHR5cGUgUmVhY3ROYXRpdmVFbGVtZW50IGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL25vZGVzL1JlYWN0TmF0aXZlRWxlbWVudCc7XG5pbXBvcnQgdHlwZSBSZWFkT25seUVsZW1lbnQgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhZE9ubHlFbGVtZW50JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwQ29udGFpbmVyUm9vdFZpZXdSZWYsXG4gIERlYnVnZ2luZ092ZXJsYXlSZWYsXG59IGZyb20gJy4uL1JlYWN0TmF0aXZlL0FwcENvbnRhaW5lci1kZXYnO1xuaW1wb3J0IHR5cGUge05hdGl2ZU1ldGhvZHN9IGZyb20gJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBJbnN0YW5jZUZyb21SZWFjdERldlRvb2xzLFxuICBSZWFjdERldlRvb2xzQWdlbnQsXG4gIFJlYWN0RGV2VG9vbHNBZ2VudEV2ZW50cyxcbiAgUmVhY3REZXZUb29sc0dsb2JhbEhvb2ssXG59IGZyb20gJy4uL1R5cGVzL1JlYWN0RGV2VG9vbHNUeXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVsZW1lbnRSZWN0YW5nbGUsXG4gIFRyYWNlVXBkYXRlLFxufSBmcm9tICcuL0RlYnVnZ2luZ092ZXJsYXlOYXRpdmVDb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBmaW5kTm9kZUhhbmRsZSxcbiAgaXNDaGlsZFB1YmxpY0luc3RhbmNlLFxufSBmcm9tICcuLi9SZWFjdE5hdGl2ZS9SZW5kZXJlclByb3h5JztcbmltcG9ydCBwcm9jZXNzQ29sb3IgZnJvbSAnLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuXG4vLyBUT0RPKFQxNzExOTMwNzUpOiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gaXMgYWx3YXlzIGluamVjdGVkIGluIGRldi1idW5kbGVzLFxuLy8gYnV0IGl0IGlzIG5vdCBtb2NrZWQgaW4gc29tZSBKZXN0IHRlc3RzLiBXZSBzaG91bGQgdXBkYXRlIEplc3QgdGVzdHMgc2V0dXAsIHNvIGl0IHdvdWxkIGJlIHRoZSBzYW1lIGFzIGV4cGVjdGVkIHRlc3RpbmcgZW52aXJvbm1lbnQuXG5jb25zdCByZWFjdERldlRvb2xzSG9vazogP1JlYWN0RGV2VG9vbHNHbG9iYWxIb29rID1cbiAgd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuZXhwb3J0IHR5cGUgRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5U3Vic2NyaWJlclByb3RvY29sID0ge1xuICByb290Vmlld1JlZjogQXBwQ29udGFpbmVyUm9vdFZpZXdSZWYsXG4gIGRlYnVnZ2luZ092ZXJsYXlSZWY6IERlYnVnZ2luZ092ZXJsYXlSZWYsXG59O1xuXG50eXBlIE1vZGVybk5vZGVVcGRhdGUgPSB7XG4gIGlkOiBudW1iZXIsXG4gIGluc3RhbmNlOiBSZWFjdE5hdGl2ZUVsZW1lbnQsXG4gIGNvbG9yOiBzdHJpbmcsXG59O1xuXG50eXBlIExlZ2FjeU5vZGVVcGRhdGUgPSB7XG4gIGlkOiBudW1iZXIsXG4gIGluc3RhbmNlOiBOYXRpdmVNZXRob2RzLFxuICBjb2xvcjogc3RyaW5nLFxufTtcblxuY2xhc3MgRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5IHtcbiAgI3JlZ2lzdHJ5OiBTZXQ8RGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5U3Vic2NyaWJlclByb3RvY29sPiA9IG5ldyBTZXQoKTtcbiAgI3JlYWN0RGV2VG9vbHNBZ2VudDogUmVhY3REZXZUb29sc0FnZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHJlYWN0RGV2VG9vbHNIb29rPy5yZWFjdERldnRvb2xzQWdlbnQgIT0gbnVsbCkge1xuICAgICAgdGhpcy4jb25SZWFjdERldlRvb2xzQWdlbnRBdHRhY2hlZChyZWFjdERldlRvb2xzSG9vay5yZWFjdERldnRvb2xzQWdlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlYWN0RGV2VG9vbHNIb29rPy5vbj8uKFxuICAgICAgJ3JlYWN0LWRldnRvb2xzJyxcbiAgICAgIHRoaXMuI29uUmVhY3REZXZUb29sc0FnZW50QXR0YWNoZWQsXG4gICAgKTtcbiAgfVxuXG4gIHN1YnNjcmliZShzdWJzY3JpYmVyOiBEZWJ1Z2dpbmdPdmVybGF5UmVnaXN0cnlTdWJzY3JpYmVyUHJvdG9jb2wpIHtcbiAgICB0aGlzLiNyZWdpc3RyeS5hZGQoc3Vic2NyaWJlcik7XG4gIH1cblxuICB1bnN1YnNjcmliZShzdWJzY3JpYmVyOiBEZWJ1Z2dpbmdPdmVybGF5UmVnaXN0cnlTdWJzY3JpYmVyUHJvdG9jb2wpIHtcbiAgICBjb25zdCB3YXNQcmVzZW50ID0gdGhpcy4jcmVnaXN0cnkuZGVsZXRlKHN1YnNjcmliZXIpO1xuICAgIGlmICghd2FzUHJlc2VudCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1tEZWJ1Z2dpbmdPdmVybGF5UmVnaXN0cnldIFVuZXhwZWN0ZWQgYXJndW1lbnQgZm9yIHVuc3Vic2NyaXB0aW9uLCB3aGljaCB3YXMgbm90IHByZXZpb3VzbHkgc3Vic2NyaWJlZDonLFxuICAgICAgICBzdWJzY3JpYmVyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAjb25SZWFjdERldlRvb2xzQWdlbnRBdHRhY2hlZCA9IChhZ2VudDogUmVhY3REZXZUb29sc0FnZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy4jcmVhY3REZXZUb29sc0FnZW50ID0gYWdlbnQ7XG5cbiAgICBhZ2VudC5hZGRMaXN0ZW5lcignZHJhd1RyYWNlVXBkYXRlcycsIHRoaXMuI29uRHJhd1RyYWNlVXBkYXRlcyk7XG4gICAgYWdlbnQuYWRkTGlzdGVuZXIoJ3Nob3dOYXRpdmVIaWdobGlnaHQnLCB0aGlzLiNvbkhpZ2hsaWdodEVsZW1lbnRzKTtcbiAgICBhZ2VudC5hZGRMaXN0ZW5lcignaGlkZU5hdGl2ZUhpZ2hsaWdodCcsIHRoaXMuI29uQ2xlYXJFbGVtZW50c0hpZ2hsaWdodHMpO1xuICB9O1xuXG4gICNnZXRQdWJsaWNJbnN0YW5jZUZyb21JbnN0YW5jZSA9IChcbiAgICBpbnN0YW5jZUhhbmRsZTogSW5zdGFuY2VGcm9tUmVhY3REZXZUb29scyxcbiAgKTogTmF0aXZlTWV0aG9kcyB8IG51bGwgPT4ge1xuICAgIC8vIGBjYW5vbmljYWwucHVibGljSW5zdGFuY2VgID0+IEZhYnJpY1xuICAgIGlmIChpbnN0YW5jZUhhbmRsZS5jYW5vbmljYWw/LnB1YmxpY0luc3RhbmNlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZUhhbmRsZS5jYW5vbmljYWw/LnB1YmxpY0luc3RhbmNlO1xuICAgIH1cblxuICAgIC8vIGBjYW5vbmljYWxgID0+IExlZ2FjeSBGYWJyaWNcbiAgICBpZiAoaW5zdGFuY2VIYW5kbGUuY2Fub25pY2FsICE9IG51bGwpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgIHJldHVybiBpbnN0YW5jZUhhbmRsZS5jYW5vbmljYWw7XG4gICAgfVxuXG4gICAgLy8gYGluc3RhbmNlSGFuZGxlYCA9PiBMZWdhY3kgcmVuZGVyZXJcbiAgICBpZiAoaW5zdGFuY2VIYW5kbGUubWVhc3VyZSAhPSBudWxsKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgICByZXR1cm4gaW5zdGFuY2VIYW5kbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgI2ZpbmRMb3dlc3RQYXJlbnRGcm9tUmVnaXN0cnlGb3JJbnN0YW5jZShcbiAgICBpbnN0YW5jZTogUmVhY3ROYXRpdmVFbGVtZW50LFxuICApOiA/RGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5U3Vic2NyaWJlclByb3RvY29sIHtcbiAgICBsZXQgaXRlcmF0b3I6ID9SZWFkT25seUVsZW1lbnQgPSBpbnN0YW5jZTtcbiAgICB3aGlsZSAoaXRlcmF0b3IgIT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBzdWJzY3JpYmVyIG9mIHRoaXMuI3JlZ2lzdHJ5KSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyLnJvb3RWaWV3UmVmLmN1cnJlbnQgPT09IGl0ZXJhdG9yKSB7XG4gICAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaXRlcmF0b3IgPSBpdGVyYXRvci5wYXJlbnRFbGVtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgI2ZpbmRMb3dlc3RQYXJlbnRGcm9tUmVnaXN0cnlGb3JJbnN0YW5jZUxlZ2FjeShcbiAgICBpbnN0YW5jZTogTmF0aXZlTWV0aG9kcyxcbiAgKTogP0RlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeVN1YnNjcmliZXJQcm90b2NvbCB7XG4gICAgY29uc3QgY2FuZGlkYXRlczogQXJyYXk8RGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5U3Vic2NyaWJlclByb3RvY29sPiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzdWJzY3JpYmVyIG9mIHRoaXMuI3JlZ2lzdHJ5KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHN1YnNjcmliZXIucm9vdFZpZXdSZWYuY3VycmVudCAhPSBudWxsICYmXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIFRoZXJlIGlzIGEgbG90IG9mIHN0dWZmIHRvIHVudGFuZ2xlIHRvIG1ha2UgdHlwZXMgZm9yIHJlZnMgd29yay5cbiAgICAgICAgaXNDaGlsZFB1YmxpY0luc3RhbmNlKHN1YnNjcmliZXIucm9vdFZpZXdSZWYuY3VycmVudCwgaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSB3aXRoIExvZ0JveCBpbiBjdXN0b20gaW50ZWdyYXRpb25zLCB0aGUgd2hvbGUgc3VidHJlZSBmb3Igc3BlY2lmaWMgUmVhY3Qgcm9vdCBtaWdodCBub3QgaGF2ZSBhbiBBcHBDb250YWluZXIuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGVzWzBdO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjYW5kaWRhdGVzLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIGxvd2VzdC5cbiAgICAvLyBJbWFnaW5lIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgYSBtb2RhbCBvbiB0aGUgc2NyZWVuLCBib3RoIG9mIHRoZW0gd2lsbCBoYXZlIHRoZWlyIG93biBBcHBDb250YWluZXJzLFxuICAgIC8vIGJ1dCBtb2RhbCdzIEFwcENvbnRhaW5lciBpcyBhIGNoaWxkIG9mIHNjcmVlbidzIEFwcENvbnRhaW5lci5cbiAgICBjb25zdCBjYW5kaWRhdGVzV2l0aE5vQ2hpbGRyZW46IEFycmF5PERlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeVN1YnNjcmliZXJQcm90b2NvbD4gPVxuICAgICAgW107XG4gICAgZm9yIChjb25zdCBwb3RlbnRpYWxQYXJlbnQgb2YgY2FuZGlkYXRlcykge1xuICAgICAgbGV0IHNob3VsZFNraXBUaGlzUGFyZW50ID0gZmFsc2U7XG5cbiAgICAgIGlmIChwb3RlbnRpYWxQYXJlbnQucm9vdFZpZXdSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHBvdGVudGlhbENoaWxkIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgaWYgKHBvdGVudGlhbENoaWxkID09PSBwb3RlbnRpYWxQYXJlbnQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3RlbnRpYWxDaGlsZC5yb290Vmlld1JlZi5jdXJyZW50ID09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc0NoaWxkUHVibGljSW5zdGFuY2UoXG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBUaGVyZSBpcyBhIGxvdCBvZiBzdHVmZiB0byB1bnRhbmdsZSB0byBtYWtlIHR5cGVzIGZvciByZWZzIHdvcmsuXG4gICAgICAgICAgICBwb3RlbnRpYWxQYXJlbnQucm9vdFZpZXdSZWYuY3VycmVudCxcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIFRoZXJlIGlzIGEgbG90IG9mIHN0dWZmIHRvIHVudGFuZ2xlIHRvIG1ha2UgdHlwZXMgZm9yIHJlZnMgd29yay5cbiAgICAgICAgICAgIHBvdGVudGlhbENoaWxkLnJvb3RWaWV3UmVmLmN1cnJlbnQsXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTa2lwVGhpc1BhcmVudCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRTa2lwVGhpc1BhcmVudCkge1xuICAgICAgICBjYW5kaWRhdGVzV2l0aE5vQ2hpbGRyZW4ucHVzaChwb3RlbnRpYWxQYXJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYW5kaWRhdGVzV2l0aE5vQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnW0RlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeV0gVW5leHBlY3RlZCBjaXJjdWxhciByZWxhdGlvbnNoaXAgYmV0d2VlbiBBcHBDb250YWluZXJzJyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZXNXaXRoTm9DaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnW0RlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeV0gVW5leHBlY3RlZCBtdWx0aXBsZSBvcHRpb25zIGZvciBsb3dlc3QgcGFyZW50IEFwcENvbnRhaW5lcicsXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmRpZGF0ZXNXaXRoTm9DaGlsZHJlblswXTtcbiAgfVxuXG4gICNvbkRyYXdUcmFjZVVwZGF0ZXM6IChcbiAgICAuLi5SZWFjdERldlRvb2xzQWdlbnRFdmVudHNbJ2RyYXdUcmFjZVVwZGF0ZXMnXVxuICApID0+IHZvaWQgPSB0cmFjZVVwZGF0ZXMgPT4ge1xuICAgIGNvbnN0IG1vZGVybk5vZGVzVXBkYXRlczogQXJyYXk8TW9kZXJuTm9kZVVwZGF0ZT4gPSBbXTtcbiAgICBjb25zdCBsZWdhY3lOb2Rlc1VwZGF0ZXM6IEFycmF5PExlZ2FjeU5vZGVVcGRhdGU+ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHtub2RlLCBjb2xvcn0gb2YgdHJhY2VVcGRhdGVzKSB7XG4gICAgICBjb25zdCBwdWJsaWNJbnN0YW5jZSA9IHRoaXMuI2dldFB1YmxpY0luc3RhbmNlRnJvbUluc3RhbmNlKG5vZGUpO1xuICAgICAgaWYgKHB1YmxpY0luc3RhbmNlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnN0YW5jZVJlYWN0VGFnID0gZmluZE5vZGVIYW5kbGUobm9kZSk7XG4gICAgICBpZiAoaW5zdGFuY2VSZWFjdFRhZyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTGF6eSBpbXBvcnQgdG8gYXZvaWQgZGVwZW5kZW5jeSBjeWNsZS5cbiAgICAgIGNvbnN0IFJlYWN0TmF0aXZlRWxlbWVudENsYXNzID1cbiAgICAgICAgcmVxdWlyZSgnLi4vLi4vc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhY3ROYXRpdmVFbGVtZW50JykuZGVmYXVsdDtcbiAgICAgIGlmIChwdWJsaWNJbnN0YW5jZSBpbnN0YW5jZW9mIFJlYWN0TmF0aXZlRWxlbWVudENsYXNzKSB7XG4gICAgICAgIG1vZGVybk5vZGVzVXBkYXRlcy5wdXNoKHtcbiAgICAgICAgICBpZDogaW5zdGFuY2VSZWFjdFRhZyxcbiAgICAgICAgICBpbnN0YW5jZTogcHVibGljSW5zdGFuY2UsXG4gICAgICAgICAgY29sb3IsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVnYWN5Tm9kZXNVcGRhdGVzLnB1c2goe1xuICAgICAgICAgIGlkOiBpbnN0YW5jZVJlYWN0VGFnLFxuICAgICAgICAgIGluc3RhbmNlOiBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICAgICBjb2xvcixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZGVybk5vZGVzVXBkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLiNkcmF3VHJhY2VVcGRhdGVzTW9kZXJuKG1vZGVybk5vZGVzVXBkYXRlcyk7XG4gICAgfVxuXG4gICAgaWYgKGxlZ2FjeU5vZGVzVXBkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLiNkcmF3VHJhY2VVcGRhdGVzTGVnYWN5KGxlZ2FjeU5vZGVzVXBkYXRlcyk7XG4gICAgfVxuICB9O1xuXG4gICNkcmF3VHJhY2VVcGRhdGVzTW9kZXJuKHVwZGF0ZXM6IEFycmF5PE1vZGVybk5vZGVVcGRhdGU+KTogdm9pZCB7XG4gICAgY29uc3QgcGFyZW50VG9UcmFjZVVwZGF0ZXNNYXAgPSBuZXcgTWFwPFxuICAgICAgRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5U3Vic2NyaWJlclByb3RvY29sLFxuICAgICAgQXJyYXk8VHJhY2VVcGRhdGU+LFxuICAgID4oKTtcbiAgICBmb3IgKGNvbnN0IHtpZCwgaW5zdGFuY2UsIGNvbG9yfSBvZiB1cGRhdGVzKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNmaW5kTG93ZXN0UGFyZW50RnJvbVJlZ2lzdHJ5Rm9ySW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHJhY2VVcGRhdGVzRm9yUGFyZW50ID0gcGFyZW50VG9UcmFjZVVwZGF0ZXNNYXAuZ2V0KHBhcmVudCk7XG4gICAgICBpZiAodHJhY2VVcGRhdGVzRm9yUGFyZW50ID09IG51bGwpIHtcbiAgICAgICAgdHJhY2VVcGRhdGVzRm9yUGFyZW50ID0gW107XG4gICAgICAgIHBhcmVudFRvVHJhY2VVcGRhdGVzTWFwLnNldChwYXJlbnQsIHRyYWNlVXBkYXRlc0ZvclBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSA9IGluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBjb25zdCByb290Vmlld0luc3RhbmNlID0gcGFyZW50LnJvb3RWaWV3UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAocm9vdFZpZXdJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7eDogcGFyZW50WCwgeTogcGFyZW50WX0gPVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gUmVhY3QgTmF0aXZlIFZpZXcgaXMgbm90IGEgZGVzY2VuZGFudCBvZiBSZWFjdE5hdGl2ZUVsZW1lbnQgeWV0LiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgaXQgb25jZSBQYXBlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICAgICAgICByb290Vmlld0luc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBEZWJ1Z2dpbmdPdmVybGF5IHdpbGwgc2NhbGUgdG8gdGhlIHNhbWUgc2l6ZSBhcyBhIFJvb3Qgdmlldy4gU3Vic3RyYWN0IFJvb3QgdmlldyBwb3NpdGlvbiBmcm9tIHRoZSBlbGVtZW50IHBvc2l0aW9uXG4gICAgICAvLyB0byBjYWxjdWxhdGUgdGhlIGVsZW1lbnQncyBwb3NpdGlvbiByZWxhdGl2ZWx5IHRvIGl0cyBwYXJlbnQgRGVidWdnaW5nT3ZlcmxheS5cbiAgICAgIC8vIFdlIGNhbid0IGNhbGwgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgb24gdGhlIGRlYnVnZ2luZ092ZXJsYXlSZWYsIGJlY2F1c2UgaXRzIGEgcmVmIGZvciB0aGUgbmF0aXZlIGNvbXBvbmVudCwgd2hpY2ggZG9lc24ndCBoYXZlIGl0LCBob3BlZnVsbHkgeWV0LlxuICAgICAgdHJhY2VVcGRhdGVzRm9yUGFyZW50LnB1c2goe1xuICAgICAgICBpZCxcbiAgICAgICAgcmVjdGFuZ2xlOiB7eDogeCAtIHBhcmVudFgsIHk6IHkgLSBwYXJlbnRZLCB3aWR0aCwgaGVpZ2h0fSxcbiAgICAgICAgY29sb3I6IHByb2Nlc3NDb2xvcihjb2xvciksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtwYXJlbnQsIHRyYWNlVXBkYXRlc10gb2YgcGFyZW50VG9UcmFjZVVwZGF0ZXNNYXAuZW50cmllcygpKSB7XG4gICAgICBjb25zdCB7ZGVidWdnaW5nT3ZlcmxheVJlZn0gPSBwYXJlbnQ7XG4gICAgICBkZWJ1Z2dpbmdPdmVybGF5UmVmLmN1cnJlbnQ/LmhpZ2hsaWdodFRyYWNlVXBkYXRlcyh0cmFjZVVwZGF0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IHJlbW92ZSBvbmNlIERPTSBOb2RlIEFQSXMgYXJlIG9wdC1pbiBieSBkZWZhdWx0IGFuZCBQYXBlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICAjZHJhd1RyYWNlVXBkYXRlc0xlZ2FjeSh1cGRhdGVzOiBBcnJheTxMZWdhY3lOb2RlVXBkYXRlPik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudFRvVHJhY2VVcGRhdGVzUHJvbWlzZXNNYXAgPSBuZXcgTWFwPFxuICAgICAgRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5U3Vic2NyaWJlclByb3RvY29sLFxuICAgICAgQXJyYXk8UHJvbWlzZTxUcmFjZVVwZGF0ZT4+LFxuICAgID4oKTtcblxuICAgIGZvciAoY29uc3Qge2lkLCBpbnN0YW5jZSwgY29sb3J9IG9mIHVwZGF0ZXMpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9XG4gICAgICAgIHRoaXMuI2ZpbmRMb3dlc3RQYXJlbnRGcm9tUmVnaXN0cnlGb3JJbnN0YW5jZUxlZ2FjeShpbnN0YW5jZSk7XG5cbiAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHRyYWNlVXBkYXRlc1Byb21pc2VzRm9yUGFyZW50ID1cbiAgICAgICAgcGFyZW50VG9UcmFjZVVwZGF0ZXNQcm9taXNlc01hcC5nZXQocGFyZW50KTtcbiAgICAgIGlmICh0cmFjZVVwZGF0ZXNQcm9taXNlc0ZvclBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgIHRyYWNlVXBkYXRlc1Byb21pc2VzRm9yUGFyZW50ID0gW107XG4gICAgICAgIHBhcmVudFRvVHJhY2VVcGRhdGVzUHJvbWlzZXNNYXAuc2V0KFxuICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICB0cmFjZVVwZGF0ZXNQcm9taXNlc0ZvclBhcmVudCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJhbWVUb0RyYXdQcm9taXNlID0gbmV3IFByb21pc2U8VHJhY2VVcGRhdGU+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaW5zdGFuY2UubWVhc3VyZSgoeCwgeSwgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wKSA9PiB7XG4gICAgICAgICAgLy8gbWVhc3VyZSBjYW4gZXhlY3V0ZSBjYWxsYmFjayB3aXRob3V0IGFueSB2YWx1ZXMgcHJvdmlkZWQgdG8gc2lnbmFsIGVycm9yLlxuICAgICAgICAgIGlmIChsZWZ0ID09IG51bGwgfHwgdG9wID09IG51bGwgfHwgd2lkdGggPT0gbnVsbCB8fCBoZWlnaHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVqZWN0KCdVbmV4cGVjdGVkbHkgZmFpbGVkIHRvIGNhbGwgbWVhc3VyZSBvbiBhbiBpbnN0YW5jZS4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgcmVjdGFuZ2xlOiB7eDogbGVmdCwgeTogdG9wLCB3aWR0aCwgaGVpZ2h0fSxcbiAgICAgICAgICAgIGNvbG9yOiBwcm9jZXNzQ29sb3IoY29sb3IpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0cmFjZVVwZGF0ZXNQcm9taXNlc0ZvclBhcmVudC5wdXNoKGZyYW1lVG9EcmF3UHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbXG4gICAgICBwYXJlbnQsXG4gICAgICB0cmFjZVVwZGF0ZXNQcm9taXNlcyxcbiAgICBdIG9mIHBhcmVudFRvVHJhY2VVcGRhdGVzUHJvbWlzZXNNYXAuZW50cmllcygpKSB7XG4gICAgICBQcm9taXNlLmFsbCh0cmFjZVVwZGF0ZXNQcm9taXNlcylcbiAgICAgICAgLnRoZW4ocmVzb2x2ZWRUcmFjZVVwZGF0ZXMgPT5cbiAgICAgICAgICBwYXJlbnQuZGVidWdnaW5nT3ZlcmxheVJlZi5jdXJyZW50Py5oaWdobGlnaHRUcmFjZVVwZGF0ZXMoXG4gICAgICAgICAgICByZXNvbHZlZFRyYWNlVXBkYXRlcyxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgLy8gbm9vcC4gRm9yIGxlZ2FjeSBhcmNoaXRlY3R1cmUgKFBhcGVyKSB0aGlzIGNhbiBoYXBwZW4gZm9yIHJvb3Qgdmlld3Mgb3IgTG9nQm94IGJ1dHRvbi5cbiAgICAgICAgICAvLyBMb2dCb3ggY2FzZTogaXQgaGFzIGEgc2VwYXJhdGUgUmVhY3Qgcm9vdCwgc28gYG1lYXN1cmVgIGZhaWxzLlxuICAgICAgICAgIC8vIENhbGxpbmcgYGNvbnNvbGUuZXJyb3JgIGhlcmUgd291bGQgdHJpZ2dlciByZW5kZXJpbmcgYSBuZXcgTG9nQm94IGJ1dHRvbiwgZm9yIHdoaWNoIHdlIHdpbGwgY2FsbCBtZWFzdXJlIGFnYWluLCB0aGlzIGlzIGEgY3ljbGUuXG4gICAgICAgICAgLy8gRG9uJ3Qgc3BhbSB0aGUgVUkgd2l0aCBlcnJvcnMgZm9yIHN1Y2ggY2FzZXMuXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICNvbkhpZ2hsaWdodEVsZW1lbnRzOiAoXG4gICAgLi4uUmVhY3REZXZUb29sc0FnZW50RXZlbnRzWydzaG93TmF0aXZlSGlnaGxpZ2h0J11cbiAgKSA9PiB2b2lkID0gbm9kZXMgPT4ge1xuICAgIC8vIEZpcnN0IGNsZWFyIGhpZ2hsaWdodHMgZm9yIGV2ZXJ5IGNvbnRhaW5lclxuICAgIGZvciAoY29uc3Qgc3Vic2NyaWJlciBvZiB0aGlzLiNyZWdpc3RyeSkge1xuICAgICAgc3Vic2NyaWJlci5kZWJ1Z2dpbmdPdmVybGF5UmVmLmN1cnJlbnQ/LmNsZWFyRWxlbWVudHNIaWdobGlnaHQoKTtcbiAgICB9XG5cbiAgICAvLyBMYXp5IGltcG9ydCB0byBhdm9pZCBkZXBlbmRlbmN5IGN5Y2xlLlxuICAgIGNvbnN0IFJlYWN0TmF0aXZlRWxlbWVudENsYXNzID1cbiAgICAgIHJlcXVpcmUoJy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL25vZGVzL1JlYWN0TmF0aXZlRWxlbWVudCcpLmRlZmF1bHQ7XG5cbiAgICBjb25zdCByZWFjdE5hdGl2ZUVsZW1lbnRzOiBBcnJheTxSZWFjdE5hdGl2ZUVsZW1lbnQ+ID0gW107XG4gICAgY29uc3QgbGVnYWN5UHVibGljSW5zdGFuY2VzOiBBcnJheTxOYXRpdmVNZXRob2RzPiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBjb25zdCBwdWJsaWNJbnN0YW5jZSA9IHRoaXMuI2dldFB1YmxpY0luc3RhbmNlRnJvbUluc3RhbmNlKG5vZGUpO1xuICAgICAgaWYgKHB1YmxpY0luc3RhbmNlID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwdWJsaWNJbnN0YW5jZSBpbnN0YW5jZW9mIFJlYWN0TmF0aXZlRWxlbWVudENsYXNzKSB7XG4gICAgICAgIHJlYWN0TmF0aXZlRWxlbWVudHMucHVzaChwdWJsaWNJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWdhY3lQdWJsaWNJbnN0YW5jZXMucHVzaChwdWJsaWNJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlYWN0TmF0aXZlRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy4jb25IaWdobGlnaHRFbGVtZW50c01vZGVybihyZWFjdE5hdGl2ZUVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICBpZiAobGVnYWN5UHVibGljSW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuI29uSGlnaGxpZ2h0RWxlbWVudHNMZWdhY3kobGVnYWN5UHVibGljSW5zdGFuY2VzKTtcbiAgICB9XG4gIH07XG5cbiAgI29uSGlnaGxpZ2h0RWxlbWVudHNNb2Rlcm4oZWxlbWVudHM6IEFycmF5PFJlYWN0TmF0aXZlRWxlbWVudD4pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRUb0VsZW1lbnRzTWFwID0gbmV3IE1hcDxcbiAgICAgIERlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeVN1YnNjcmliZXJQcm90b2NvbCxcbiAgICAgIEFycmF5PFJlYWN0TmF0aXZlRWxlbWVudD4sXG4gICAgPigpO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNmaW5kTG93ZXN0UGFyZW50RnJvbVJlZ2lzdHJ5Rm9ySW5zdGFuY2UoZWxlbWVudCk7XG4gICAgICBpZiAocGFyZW50ID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBjaGlsZEVsZW1lbnRPZkFQYXJlbnQgPSBwYXJlbnRUb0VsZW1lbnRzTWFwLmdldChwYXJlbnQpO1xuICAgICAgaWYgKGNoaWxkRWxlbWVudE9mQVBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgIGNoaWxkRWxlbWVudE9mQVBhcmVudCA9IFtdO1xuICAgICAgICBwYXJlbnRUb0VsZW1lbnRzTWFwLnNldChwYXJlbnQsIGNoaWxkRWxlbWVudE9mQVBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkRWxlbWVudE9mQVBhcmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3BhcmVudCwgZWxlbWVudHNUb0hpZ2hsaWdodF0gb2YgcGFyZW50VG9FbGVtZW50c01hcC5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHJvb3RWaWV3SW5zdGFuY2UgPSBwYXJlbnQucm9vdFZpZXdSZWYuY3VycmVudDtcbiAgICAgIGlmIChyb290Vmlld0luc3RhbmNlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7eDogcGFyZW50WCwgeTogcGFyZW50WX0gPVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gUmVhY3QgTmF0aXZlIFZpZXcgaXMgbm90IGEgZGVzY2VuZGFudCBvZiBSZWFjdE5hdGl2ZUVsZW1lbnQgeWV0LiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgaXQgb25jZSBQYXBlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICAgICAgICByb290Vmlld0luc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBEZWJ1Z2dpbmdPdmVybGF5IHdpbGwgc2NhbGUgdG8gdGhlIHNhbWUgc2l6ZSBhcyBhIFJvb3Qgdmlldy4gU3Vic3RyYWN0IFJvb3QgdmlldyBwb3NpdGlvbiBmcm9tIHRoZSBlbGVtZW50IHBvc2l0aW9uXG4gICAgICAvLyB0byBjYWxjdWxhdGUgdGhlIGVsZW1lbnQncyBwb3NpdGlvbiByZWxhdGl2ZWx5IHRvIGl0cyBwYXJlbnQgRGVidWdnaW5nT3ZlcmxheS5cbiAgICAgIC8vIFdlIGNhbid0IGNhbGwgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgb24gdGhlIGRlYnVnZ2luZ092ZXJsYXlSZWYsIGJlY2F1c2UgaXRzIGEgcmVmIGZvciB0aGUgbmF0aXZlIGNvbXBvbmVudCwgd2hpY2ggZG9lc24ndCBoYXZlIGl0LCBob3BlZnVsbHkgeWV0LlxuICAgICAgY29uc3QgZWxlbWVudHNSZWN0YW5nbGVzID0gZWxlbWVudHNUb0hpZ2hsaWdodC5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7eDogeCAtIHBhcmVudFgsIHk6IHkgLSBwYXJlbnRZLCB3aWR0aCwgaGVpZ2h0fTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXJlbnQuZGVidWdnaW5nT3ZlcmxheVJlZi5jdXJyZW50Py5oaWdobGlnaHRFbGVtZW50cyhlbGVtZW50c1JlY3RhbmdsZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IHJlbW92ZSBvbmNlIERPTSBOb2RlIEFQSXMgYXJlIG9wdC1pbiBieSBkZWZhdWx0IGFuZCBQYXBlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICAjb25IaWdobGlnaHRFbGVtZW50c0xlZ2FjeShlbGVtZW50czogQXJyYXk8TmF0aXZlTWV0aG9kcz4pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRUb0VsZW1lbnRzTWFwID0gbmV3IE1hcDxcbiAgICAgIERlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeVN1YnNjcmliZXJQcm90b2NvbCxcbiAgICAgIEFycmF5PE5hdGl2ZU1ldGhvZHM+LFxuICAgID4oKTtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgY29uc3QgcGFyZW50ID1cbiAgICAgICAgdGhpcy4jZmluZExvd2VzdFBhcmVudEZyb21SZWdpc3RyeUZvckluc3RhbmNlTGVnYWN5KGVsZW1lbnQpO1xuICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgY2hpbGRFbGVtZW50T2ZBUGFyZW50ID0gcGFyZW50VG9FbGVtZW50c01hcC5nZXQocGFyZW50KTtcbiAgICAgIGlmIChjaGlsZEVsZW1lbnRPZkFQYXJlbnQgPT0gbnVsbCkge1xuICAgICAgICBjaGlsZEVsZW1lbnRPZkFQYXJlbnQgPSBbXTtcbiAgICAgICAgcGFyZW50VG9FbGVtZW50c01hcC5zZXQocGFyZW50LCBjaGlsZEVsZW1lbnRPZkFQYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZEVsZW1lbnRPZkFQYXJlbnQucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtwYXJlbnQsIGVsZW1lbnRzVG9IaWdobGlnaHRdIG9mIHBhcmVudFRvRWxlbWVudHNNYXAuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IGVsZW1lbnRzVG9IaWdobGlnaHQubWFwKFxuICAgICAgICBlbGVtZW50ID0+XG4gICAgICAgICAgbmV3IFByb21pc2U8RWxlbWVudFJlY3RhbmdsZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlKCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3ApID0+IHtcbiAgICAgICAgICAgICAgLy8gbWVhc3VyZSBjYW4gZXhlY3V0ZSBjYWxsYmFjayB3aXRob3V0IGFueSB2YWx1ZXMgcHJvdmlkZWQgdG8gc2lnbmFsIGVycm9yLlxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbGVmdCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgdG9wID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICB3aWR0aCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgaGVpZ2h0ID09IG51bGxcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdVbmV4cGVjdGVkbHkgZmFpbGVkIHRvIGNhbGwgbWVhc3VyZSBvbiBhbiBpbnN0YW5jZS4nKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJlc29sdmUoe3g6IGxlZnQsIHk6IHRvcCwgd2lkdGgsIGhlaWdodH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgLnRoZW4ocmVzb2x2ZWRFbGVtZW50c1JlY3RhbmdsZXMgPT5cbiAgICAgICAgICBwYXJlbnQuZGVidWdnaW5nT3ZlcmxheVJlZi5jdXJyZW50Py5oaWdobGlnaHRFbGVtZW50cyhcbiAgICAgICAgICAgIHJlc29sdmVkRWxlbWVudHNSZWN0YW5nbGVzLFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAvLyBub29wLiBGb3IgbGVnYWN5IGFyY2hpdGVjdHVyZSAoUGFwZXIpIHRoaXMgY2FuIGhhcHBlbiBmb3Igcm9vdCB2aWV3cyBvciBMb2dCb3ggYnV0dG9uLlxuICAgICAgICAgIC8vIExvZ0JveCBjYXNlOiBpdCBoYXMgYSBzZXBhcmF0ZSBSZWFjdCByb290LCBzbyBgbWVhc3VyZWAgZmFpbHMuXG4gICAgICAgICAgLy8gQ2FsbGluZyBgY29uc29sZS5lcnJvcmAgaGVyZSB3b3VsZCB0cmlnZ2VyIHJlbmRlcmluZyBhIG5ldyBMb2dCb3ggYnV0dG9uLCBmb3Igd2hpY2ggd2Ugd2lsbCBjYWxsIG1lYXN1cmUgYWdhaW4sIHRoaXMgaXMgYSBjeWNsZS5cbiAgICAgICAgICAvLyBEb24ndCBzcGFtIHRoZSBVSSB3aXRoIGVycm9ycyBmb3Igc3VjaCBjYXNlcy5cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI29uQ2xlYXJFbGVtZW50c0hpZ2hsaWdodHM6IChcbiAgICAuLi5SZWFjdERldlRvb2xzQWdlbnRFdmVudHNbJ2hpZGVOYXRpdmVIaWdobGlnaHQnXVxuICApID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpYmVyIG9mIHRoaXMuI3JlZ2lzdHJ5KSB7XG4gICAgICBzdWJzY3JpYmVyLmRlYnVnZ2luZ092ZXJsYXlSZWYuY3VycmVudD8uY2xlYXJFbGVtZW50c0hpZ2hsaWdodCgpO1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgZGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5SW5zdGFuY2U6IERlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeSA9XG4gIG5ldyBEZWJ1Z2dpbmdPdmVybGF5UmVnaXN0cnkoKTtcbmV4cG9ydCBkZWZhdWx0IGRlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeUluc3RhbmNlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge0luc3BlY3RlZFZpZXdSZWZ9IGZyb20gJy4uL1JlYWN0TmF0aXZlL0FwcENvbnRhaW5lci1kZXYnO1xuaW1wb3J0IHR5cGUge1BvaW50ZXJFdmVudH0gZnJvbSAnLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuaW1wb3J0IHR5cGUge1ByZXNzRXZlbnR9IGZyb20gJy4uL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcbmltcG9ydCB0eXBlIHtSZWFjdERldlRvb2xzQWdlbnR9IGZyb20gJy4uL1R5cGVzL1JlYWN0RGV2VG9vbHNUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SW5zcGVjdGVkRWxlbWVudH0gZnJvbSAnLi9JbnNwZWN0b3InO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MgZnJvbSAnLi4vUmVhY3ROYXRpdmUvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBFbGVtZW50Qm94IGZyb20gJy4vRWxlbWVudEJveCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHtmaW5kTm9kZUhhbmRsZX0gPSByZXF1aXJlKCcuLi9SZWFjdE5hdGl2ZS9SZW5kZXJlclByb3h5Jyk7XG5jb25zdCBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQgPSByZXF1aXJlKCcuL2dldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludCcpO1xuXG5jb25zdCB7dXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2t9ID0gUmVhY3Q7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGluc3BlY3RlZFZpZXdSZWY6IEluc3BlY3RlZFZpZXdSZWYsXG4gIHJlYWN0RGV2VG9vbHNBZ2VudDogUmVhY3REZXZUb29sc0FnZW50LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVhY3REZXZUb29sc092ZXJsYXkoe1xuICBpbnNwZWN0ZWRWaWV3UmVmLFxuICByZWFjdERldlRvb2xzQWdlbnQsXG59OiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbaW5zcGVjdGVkLCBzZXRJbnNwZWN0ZWRdID0gdXNlU3RhdGU8P0luc3BlY3RlZEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaXNJbnNwZWN0aW5nLCBzZXRJc0luc3BlY3RpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgIHJlYWN0RGV2VG9vbHNBZ2VudC5yZW1vdmVMaXN0ZW5lcignc2h1dGRvd24nLCBjbGVhbnVwKTtcbiAgICAgIHJlYWN0RGV2VG9vbHNBZ2VudC5yZW1vdmVMaXN0ZW5lcihcbiAgICAgICAgJ3N0YXJ0SW5zcGVjdGluZ05hdGl2ZScsXG4gICAgICAgIG9uU3RhcnRJbnNwZWN0aW5nTmF0aXZlLFxuICAgICAgKTtcbiAgICAgIHJlYWN0RGV2VG9vbHNBZ2VudC5yZW1vdmVMaXN0ZW5lcihcbiAgICAgICAgJ3N0b3BJbnNwZWN0aW5nTmF0aXZlJyxcbiAgICAgICAgb25TdG9wSW5zcGVjdGluZ05hdGl2ZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25TdGFydEluc3BlY3RpbmdOYXRpdmUoKSB7XG4gICAgICBzZXRJc0luc3BlY3RpbmcodHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25TdG9wSW5zcGVjdGluZ05hdGl2ZSgpIHtcbiAgICAgIHNldElzSW5zcGVjdGluZyhmYWxzZSk7XG4gICAgfVxuXG4gICAgcmVhY3REZXZUb29sc0FnZW50LmFkZExpc3RlbmVyKCdzaHV0ZG93bicsIGNsZWFudXApO1xuICAgIHJlYWN0RGV2VG9vbHNBZ2VudC5hZGRMaXN0ZW5lcihcbiAgICAgICdzdGFydEluc3BlY3RpbmdOYXRpdmUnLFxuICAgICAgb25TdGFydEluc3BlY3RpbmdOYXRpdmUsXG4gICAgKTtcbiAgICByZWFjdERldlRvb2xzQWdlbnQuYWRkTGlzdGVuZXIoXG4gICAgICAnc3RvcEluc3BlY3RpbmdOYXRpdmUnLFxuICAgICAgb25TdG9wSW5zcGVjdGluZ05hdGl2ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGNsZWFudXA7XG4gIH0sIFtyZWFjdERldlRvb2xzQWdlbnRdKTtcblxuICBjb25zdCBmaW5kVmlld0ZvckxvY2F0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XG4gICAgICBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQoXG4gICAgICAgIGluc3BlY3RlZFZpZXdSZWYuY3VycmVudCxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgdmlld0RhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IHt0b3VjaGVkVmlld1RhZywgY2xvc2VzdEluc3RhbmNlLCBmcmFtZX0gPSB2aWV3RGF0YTtcbiAgICAgICAgICBpZiAoY2xvc2VzdEluc3RhbmNlICE9IG51bGwgfHwgdG91Y2hlZFZpZXdUYWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2UgY2FsbCBgc2VsZWN0Tm9kZWAgZm9yIGJvdGggbm9uLWZhYnJpYyh2aWV3VGFnKSBhbmQgZmFicmljKGluc3RhbmNlKSxcbiAgICAgICAgICAgIC8vIHRoaXMgbWFrZXMgc3VyZSBpdCB3b3JrcyBmb3IgYm90aCBhcmNoaXRlY3R1cmVzLlxuICAgICAgICAgICAgcmVhY3REZXZUb29sc0FnZW50LnNlbGVjdE5vZGUoZmluZE5vZGVIYW5kbGUodG91Y2hlZFZpZXdUYWcpKTtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0SW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICByZWFjdERldlRvb2xzQWdlbnQuc2VsZWN0Tm9kZShjbG9zZXN0SW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SW5zcGVjdGVkKHtcbiAgICAgICAgICAgICAgZnJhbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0sXG4gICAgW2luc3BlY3RlZFZpZXdSZWYsIHJlYWN0RGV2VG9vbHNBZ2VudF0sXG4gICk7XG5cbiAgY29uc3Qgc3RvcEluc3BlY3RpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmVhY3REZXZUb29sc0FnZW50LnN0b3BJbnNwZWN0aW5nTmF0aXZlKHRydWUpO1xuICAgIHNldElzSW5zcGVjdGluZyhmYWxzZSk7XG4gICAgc2V0SW5zcGVjdGVkKG51bGwpO1xuICB9LCBbcmVhY3REZXZUb29sc0FnZW50XSk7XG5cbiAgY29uc3Qgb25Qb2ludGVyTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIGZpbmRWaWV3Rm9yTG9jYXRpb24oZS5uYXRpdmVFdmVudC54LCBlLm5hdGl2ZUV2ZW50LnkpO1xuICAgIH0sXG4gICAgW2ZpbmRWaWV3Rm9yTG9jYXRpb25dLFxuICApO1xuXG4gIGNvbnN0IG9uUmVzcG9uZGVyTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBQcmVzc0V2ZW50KSA9PiB7XG4gICAgICBmaW5kVmlld0ZvckxvY2F0aW9uKFxuICAgICAgICBlLm5hdGl2ZUV2ZW50LnRvdWNoZXNbMF0ubG9jYXRpb25YLFxuICAgICAgICBlLm5hdGl2ZUV2ZW50LnRvdWNoZXNbMF0ubG9jYXRpb25ZLFxuICAgICAgKTtcbiAgICB9LFxuICAgIFtmaW5kVmlld0ZvckxvY2F0aW9uXSxcbiAgKTtcblxuICBjb25zdCBzaG91bGRTZXRSZXNwb25kZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUHJlc3NFdmVudCk6IGJvb2xlYW4gPT4ge1xuICAgICAgb25SZXNwb25kZXJNb3ZlKGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbb25SZXNwb25kZXJNb3ZlXSxcbiAgKTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBpbnNwZWN0ZWQgPyA8RWxlbWVudEJveCBmcmFtZT17aW5zcGVjdGVkLmZyYW1lfSAvPiA6IG51bGw7XG5cbiAgaWYgKGlzSW5zcGVjdGluZykge1xuICAgIGNvbnN0IGV2ZW50cyA9XG4gICAgICAvLyBQb2ludGVyIGV2ZW50cyBvbmx5IHdvcmsgb24gZmFicmljXG4gICAgICBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncy5zaG91bGRFbWl0VzNDUG9pbnRlckV2ZW50cygpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgb25Qb2ludGVyTW92ZSxcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd246IG9uUG9pbnRlck1vdmUsXG4gICAgICAgICAgICBvblBvaW50ZXJVcDogc3RvcEluc3BlY3RpbmcsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXI6IHNob3VsZFNldFJlc3BvbmRlcixcbiAgICAgICAgICAgIG9uUmVzcG9uZGVyTW92ZTogb25SZXNwb25kZXJNb3ZlLFxuICAgICAgICAgICAgb25SZXNwb25kZXJSZWxlYXNlOiBzdG9wSW5zcGVjdGluZyxcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIG5hdGl2ZUlEPVwiZGV2VG9vbHNJbnNwZWN0b3JPdmVybGF5XCJcbiAgICAgICAgc3R5bGU9e3N0eWxlcy5pbnNwZWN0b3J9XG4gICAgICAgIHsuLi5ldmVudHN9PlxuICAgICAgICB7aGlnaGxpZ2h0fVxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGluc3BlY3Rvcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlRmxhZ3MgPSB7fFxuICAvKipcbiAgICogRnVuY3Rpb24gdXNlZCB0byBlbmFibGUgLyBkaXNhYmxlIFczQyBwb2ludGVyIGV2ZW50IGVtaXR0aW5nIGluIFJlYWN0IE5hdGl2ZS5cbiAgICogSWYgZW5hYmxlZCB5b3UgbXVzdCBhbHNvIGZsaXAgdGhlIGVxdWl2YWxlbnQgbmF0aXZlIGZsYWdzIG9uIGVhY2ggcGxhdGZvcm06XG4gICAqIGlPUyAtPiBSQ1RTZXREaXNwYXRjaFczQ1BvaW50ZXJFdmVudHNcbiAgICogQW5kcm9pZCAtPiBSZWFjdEZlYXR1cmVGbGFncy5kaXNwYXRjaFBvaW50ZXJFdmVudHNcbiAgICovXG4gIHNob3VsZEVtaXRXM0NQb2ludGVyRXZlbnRzOiAoKSA9PiBib29sZWFuLFxuICAvKipcbiAgICogRnVuY3Rpb24gdXNlZCB0byBlbmFibGUgLyBkaXNhYmxlIFByZXNzaWJpbGl0eSBmcm9tIHVzaW5nIFczQyBQb2ludGVyIEV2ZW50c1xuICAgKiBmb3IgaXRzIGhvdmVyIGNhbGxiYWNrc1xuICAgKi9cbiAgc2hvdWxkUHJlc3NpYmlsaXR5VXNlVzNDUG9pbnRlckV2ZW50c0ZvckhvdmVyOiAoKSA9PiBib29sZWFuLFxufH07XG5cbmNvbnN0IFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzOiBGZWF0dXJlRmxhZ3MgPSB7XG4gIHNob3VsZEVtaXRXM0NQb2ludGVyRXZlbnRzOiAoKSA9PiBmYWxzZSxcbiAgc2hvdWxkUHJlc3NpYmlsaXR5VXNlVzNDUG9pbnRlckV2ZW50c0ZvckhvdmVyOiAoKSA9PiBmYWxzZSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3M7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBWaWV3ID0gcmVxdWlyZSgnLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnKTtcbmNvbnN0IGZsYXR0ZW5TdHlsZSA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvZmxhdHRlblN0eWxlJyk7XG5jb25zdCBTdHlsZVNoZWV0ID0gcmVxdWlyZSgnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0Jyk7XG5jb25zdCBEaW1lbnNpb25zID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL0RpbWVuc2lvbnMnKS5kZWZhdWx0O1xuY29uc3QgQm9yZGVyQm94ID0gcmVxdWlyZSgnLi9Cb3JkZXJCb3gnKTtcbmNvbnN0IHJlc29sdmVCb3hTdHlsZSA9IHJlcXVpcmUoJy4vcmVzb2x2ZUJveFN0eWxlJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbmNsYXNzIEVsZW1lbnRCb3ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8JEZsb3dGaXhNZVByb3BzPiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAvLyAkRmxvd0ZpeE1lW3VuZGVyY29uc3RyYWluZWQtaW1wbGljaXQtaW5zdGFudGlhdGlvbl1cbiAgICBjb25zdCBzdHlsZSA9IGZsYXR0ZW5TdHlsZSh0aGlzLnByb3BzLnN0eWxlKSB8fCB7fTtcbiAgICBsZXQgbWFyZ2luID0gcmVzb2x2ZUJveFN0eWxlKCdtYXJnaW4nLCBzdHlsZSk7XG4gICAgbGV0IHBhZGRpbmcgPSByZXNvbHZlQm94U3R5bGUoJ3BhZGRpbmcnLCBzdHlsZSk7XG5cbiAgICBjb25zdCBmcmFtZVN0eWxlID0gey4uLnRoaXMucHJvcHMuZnJhbWV9O1xuICAgIGNvbnN0IGNvbnRlbnRTdHlsZToge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfSA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLnByb3BzLmZyYW1lLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLnByb3BzLmZyYW1lLmhlaWdodCxcbiAgICB9O1xuXG4gICAgaWYgKG1hcmdpbiAhPSBudWxsKSB7XG4gICAgICBtYXJnaW4gPSByZXNvbHZlUmVsYXRpdmVTaXplcyhtYXJnaW4pO1xuXG4gICAgICBmcmFtZVN0eWxlLnRvcCAtPSBtYXJnaW4udG9wO1xuICAgICAgZnJhbWVTdHlsZS5sZWZ0IC09IG1hcmdpbi5sZWZ0O1xuICAgICAgZnJhbWVTdHlsZS5oZWlnaHQgKz0gbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b207XG4gICAgICBmcmFtZVN0eWxlLndpZHRoICs9IG1hcmdpbi5sZWZ0ICsgbWFyZ2luLnJpZ2h0O1xuXG4gICAgICBpZiAobWFyZ2luLnRvcCA8IDApIHtcbiAgICAgICAgY29udGVudFN0eWxlLmhlaWdodCArPSBtYXJnaW4udG9wO1xuICAgICAgfVxuICAgICAgaWYgKG1hcmdpbi5ib3R0b20gPCAwKSB7XG4gICAgICAgIGNvbnRlbnRTdHlsZS5oZWlnaHQgKz0gbWFyZ2luLmJvdHRvbTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXJnaW4ubGVmdCA8IDApIHtcbiAgICAgICAgY29udGVudFN0eWxlLndpZHRoICs9IG1hcmdpbi5sZWZ0O1xuICAgICAgfVxuICAgICAgaWYgKG1hcmdpbi5yaWdodCA8IDApIHtcbiAgICAgICAgY29udGVudFN0eWxlLndpZHRoICs9IG1hcmdpbi5yaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFkZGluZyAhPSBudWxsKSB7XG4gICAgICBwYWRkaW5nID0gcmVzb2x2ZVJlbGF0aXZlU2l6ZXMocGFkZGluZyk7XG5cbiAgICAgIGNvbnRlbnRTdHlsZS53aWR0aCAtPSBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0O1xuICAgICAgY29udGVudFN0eWxlLmhlaWdodCAtPSBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5mcmFtZSwgZnJhbWVTdHlsZV19IHBvaW50ZXJFdmVudHM9XCJub25lXCI+XG4gICAgICAgIDxCb3JkZXJCb3ggYm94PXttYXJnaW59IHN0eWxlPXtzdHlsZXMubWFyZ2lufT5cbiAgICAgICAgICA8Qm9yZGVyQm94IGJveD17cGFkZGluZ30gc3R5bGU9e3N0eWxlcy5wYWRkaW5nfT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmNvbnRlbnQsIGNvbnRlbnRTdHlsZV19IC8+XG4gICAgICAgICAgPC9Cb3JkZXJCb3g+XG4gICAgICAgIDwvQm9yZGVyQm94PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBmcmFtZToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB9LFxuICBjb250ZW50OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyMDAsIDIzMCwgMjU1LCAwLjgpJywgLy8gYmx1ZVxuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgYm9yZGVyQ29sb3I6ICdyZ2JhKDc3LCAyNTUsIDAsIDAuMyknLCAvLyBncmVlblxuICB9LFxuICBtYXJnaW46IHtcbiAgICBib3JkZXJDb2xvcjogJ3JnYmEoMjU1LCAxMzIsIDAsIDAuMyknLCAvLyBvcmFuZ2VcbiAgfSxcbn0pO1xuXG50eXBlIFN0eWxlID0ge1xuICB0b3A6IG51bWJlcixcbiAgcmlnaHQ6IG51bWJlcixcbiAgYm90dG9tOiBudW1iZXIsXG4gIGxlZnQ6IG51bWJlcixcbiAgLi4uXG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHJlbGF0aXZlIHNpemVzIChwZXJjZW50YWdlcyBhbmQgYXV0bykgaW4gYSBzdHlsZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHN0eWxlIHRoZSBzdHlsZSB0byByZXNvbHZlXG4gKiBAcmV0dXJuIGEgbW9kaWZpZWQgY29weVxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVsYXRpdmVTaXplcyhzdHlsZTogJFJlYWRPbmx5PFN0eWxlPik6IFN0eWxlIHtcbiAgbGV0IHJlc29sdmVkU3R5bGUgPSB7Li4uc3R5bGV9O1xuICByZXNvbHZlU2l6ZUluUGxhY2UocmVzb2x2ZWRTdHlsZSwgJ3RvcCcsICdoZWlnaHQnKTtcbiAgcmVzb2x2ZVNpemVJblBsYWNlKHJlc29sdmVkU3R5bGUsICdyaWdodCcsICd3aWR0aCcpO1xuICByZXNvbHZlU2l6ZUluUGxhY2UocmVzb2x2ZWRTdHlsZSwgJ2JvdHRvbScsICdoZWlnaHQnKTtcbiAgcmVzb2x2ZVNpemVJblBsYWNlKHJlc29sdmVkU3R5bGUsICdsZWZ0JywgJ3dpZHRoJyk7XG4gIHJldHVybiByZXNvbHZlZFN0eWxlO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBnaXZlbiBzaXplIG9mIGEgc3R5bGUgb2JqZWN0IGluIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgb2JqZWN0IHRvIG1vZGlmeVxuICogQHBhcmFtIGRpcmVjdGlvbiB0aGUgZGlyZWN0aW9uIHRvIHJlc29sdmUgKGUuZy4gJ3RvcCcpXG4gKiBAcGFyYW0gZGltZW5zaW9uIHRoZSB3aW5kb3cgZGltZW5zaW9uIHRoYXQgdGhpcyBkaXJlY3Rpb24gYmVsb25ncyB0byAoZS5nLiAnaGVpZ2h0JylcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNpemVJblBsYWNlKFxuICBzdHlsZTogU3R5bGUsXG4gIGRpcmVjdGlvbjogc3RyaW5nLFxuICBkaW1lbnNpb246IHN0cmluZyxcbikge1xuICBpZiAoc3R5bGVbZGlyZWN0aW9uXSAhPT0gbnVsbCAmJiB0eXBlb2Ygc3R5bGVbZGlyZWN0aW9uXSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoc3R5bGVbZGlyZWN0aW9uXS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIHN0eWxlW2RpcmVjdGlvbl0gPVxuICAgICAgICAocGFyc2VGbG9hdChzdHlsZVtkaXJlY3Rpb25dKSAvIDEwMC4wKSAqXG4gICAgICAgIERpbWVuc2lvbnMuZ2V0KCd3aW5kb3cnKVtkaW1lbnNpb25dO1xuICAgIH1cbiAgICBpZiAoc3R5bGVbZGlyZWN0aW9uXSA9PT0gJ2F1dG8nKSB7XG4gICAgICAvLyBJZ25vcmUgYXV0byBzaXppbmcgaW4gZnJhbWUgZHJhd2luZyBkdWUgdG8gY29tcGxleGl0eSBvZiBjb3JyZWN0bHkgcmVuZGVyaW5nIHRoaXNcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgc3R5bGVbZGlyZWN0aW9uXSA9IDA7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRWxlbWVudEJveDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgSTE4bk1hbmFnZXIgPSByZXF1aXJlKCcuLi9SZWFjdE5hdGl2ZS9JMThuTWFuYWdlcicpO1xuXG4vKipcbiAqIFJlc29sdmUgYSBzdHlsZSBwcm9wZXJ0eSBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKlxuICogICA+IHJlc29sdmVQcm9wZXJ0aWVzKCdtYXJnaW4nLCB7bWFyZ2luOiA1LCBtYXJnaW5Cb3R0b206IDEwfSlcbiAqICAge3RvcDogNSwgbGVmdDogNSwgcmlnaHQ6IDUsIGJvdHRvbTogMTB9XG4gKlxuICogSWYgbm8gcGFydHMgZXhpc3QsIHRoaXMgcmV0dXJucyBudWxsLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQm94U3R5bGUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBzdHlsZTogT2JqZWN0LFxuKTogPyRSZWFkT25seTx7fFxuICBib3R0b206IG51bWJlcixcbiAgbGVmdDogbnVtYmVyLFxuICByaWdodDogbnVtYmVyLFxuICB0b3A6IG51bWJlcixcbnx9PiB7XG4gIGxldCBoYXNQYXJ0cyA9IGZhbHNlO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICB9O1xuXG4gIC8vIFRPRE86IEZpeCBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBwcm9wZXJ0aWVzIGFmZmVjdGluZyB0aGUgc2FtZSBzaWRlLlxuXG4gIGNvbnN0IHN0eWxlRm9yQWxsID0gc3R5bGVbcHJlZml4XTtcbiAgaWYgKHN0eWxlRm9yQWxsICE9IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHQpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHN0eWxlRm9yQWxsO1xuICAgIH1cbiAgICBoYXNQYXJ0cyA9IHRydWU7XG4gIH1cblxuICBjb25zdCBzdHlsZUZvckhvcml6b250YWwgPSBzdHlsZVtwcmVmaXggKyAnSG9yaXpvbnRhbCddO1xuICBpZiAoc3R5bGVGb3JIb3Jpem9udGFsICE9IG51bGwpIHtcbiAgICByZXN1bHQubGVmdCA9IHN0eWxlRm9ySG9yaXpvbnRhbDtcbiAgICByZXN1bHQucmlnaHQgPSBzdHlsZUZvckhvcml6b250YWw7XG4gICAgaGFzUGFydHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0eWxlRm9yTGVmdCA9IHN0eWxlW3ByZWZpeCArICdMZWZ0J107XG4gICAgaWYgKHN0eWxlRm9yTGVmdCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQubGVmdCA9IHN0eWxlRm9yTGVmdDtcbiAgICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZUZvclJpZ2h0ID0gc3R5bGVbcHJlZml4ICsgJ1JpZ2h0J107XG4gICAgaWYgKHN0eWxlRm9yUmlnaHQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0LnJpZ2h0ID0gc3R5bGVGb3JSaWdodDtcbiAgICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZUZvckVuZCA9IHN0eWxlW3ByZWZpeCArICdFbmQnXTtcbiAgICBpZiAoc3R5bGVGb3JFbmQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgY29uc3RhbnRzID0gSTE4bk1hbmFnZXIuZ2V0Q29uc3RhbnRzKCk7XG4gICAgICBpZiAoY29uc3RhbnRzLmlzUlRMICYmIGNvbnN0YW50cy5kb0xlZnRBbmRSaWdodFN3YXBJblJUTCkge1xuICAgICAgICByZXN1bHQubGVmdCA9IHN0eWxlRm9yRW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnJpZ2h0ID0gc3R5bGVGb3JFbmQ7XG4gICAgICB9XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRm9yU3RhcnQgPSBzdHlsZVtwcmVmaXggKyAnU3RhcnQnXTtcbiAgICBpZiAoc3R5bGVGb3JTdGFydCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb25zdGFudHMgPSBJMThuTWFuYWdlci5nZXRDb25zdGFudHMoKTtcbiAgICAgIGlmIChjb25zdGFudHMuaXNSVEwgJiYgY29uc3RhbnRzLmRvTGVmdEFuZFJpZ2h0U3dhcEluUlRMKSB7XG4gICAgICAgIHJlc3VsdC5yaWdodCA9IHN0eWxlRm9yU3RhcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQubGVmdCA9IHN0eWxlRm9yU3RhcnQ7XG4gICAgICB9XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3R5bGVGb3JWZXJ0aWNhbCA9IHN0eWxlW3ByZWZpeCArICdWZXJ0aWNhbCddO1xuICBpZiAoc3R5bGVGb3JWZXJ0aWNhbCAhPSBudWxsKSB7XG4gICAgcmVzdWx0LmJvdHRvbSA9IHN0eWxlRm9yVmVydGljYWw7XG4gICAgcmVzdWx0LnRvcCA9IHN0eWxlRm9yVmVydGljYWw7XG4gICAgaGFzUGFydHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0eWxlRm9yQm90dG9tID0gc3R5bGVbcHJlZml4ICsgJ0JvdHRvbSddO1xuICAgIGlmIChzdHlsZUZvckJvdHRvbSAhPSBudWxsKSB7XG4gICAgICByZXN1bHQuYm90dG9tID0gc3R5bGVGb3JCb3R0b207XG4gICAgICBoYXNQYXJ0cyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVGb3JUb3AgPSBzdHlsZVtwcmVmaXggKyAnVG9wJ107XG4gICAgaWYgKHN0eWxlRm9yVG9wICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdC50b3AgPSBzdHlsZUZvclRvcDtcbiAgICAgIGhhc1BhcnRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaGFzUGFydHMgPyByZXN1bHQgOiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmVCb3hTdHlsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7STE4bk1hbmFnZXJDb25zdGFudHN9IGZyb20gJy4vTmF0aXZlSTE4bk1hbmFnZXInO1xuXG5pbXBvcnQgTmF0aXZlSTE4bk1hbmFnZXIgZnJvbSAnLi9OYXRpdmVJMThuTWFuYWdlcic7XG5cbmNvbnN0IGkxOG5Db25zdGFudHM6IEkxOG5NYW5hZ2VyQ29uc3RhbnRzID0gZ2V0STE4bk1hbmFnZXJDb25zdGFudHMoKTtcblxuZnVuY3Rpb24gZ2V0STE4bk1hbmFnZXJDb25zdGFudHMoKTogSTE4bk1hbmFnZXJDb25zdGFudHMge1xuICBpZiAoTmF0aXZlSTE4bk1hbmFnZXIpIHtcbiAgICBjb25zdCB7aXNSVEwsIGRvTGVmdEFuZFJpZ2h0U3dhcEluUlRMLCBsb2NhbGVJZGVudGlmaWVyfSA9XG4gICAgICBOYXRpdmVJMThuTWFuYWdlci5nZXRDb25zdGFudHMoKTtcbiAgICByZXR1cm4ge2lzUlRMLCBkb0xlZnRBbmRSaWdodFN3YXBJblJUTCwgbG9jYWxlSWRlbnRpZmllcn07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzUlRMOiBmYWxzZSxcbiAgICBkb0xlZnRBbmRSaWdodFN3YXBJblJUTDogdHJ1ZSxcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0YW50czogKCk6IEkxOG5NYW5hZ2VyQ29uc3RhbnRzID0+IHtcbiAgICByZXR1cm4gaTE4bkNvbnN0YW50cztcbiAgfSxcblxuICBhbGxvd1JUTDogKHNob3VsZEFsbG93OiBib29sZWFuKSA9PiB7XG4gICAgaWYgKCFOYXRpdmVJMThuTWFuYWdlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE5hdGl2ZUkxOG5NYW5hZ2VyLmFsbG93UlRMKHNob3VsZEFsbG93KTtcbiAgfSxcblxuICBmb3JjZVJUTDogKHNob3VsZEZvcmNlOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKCFOYXRpdmVJMThuTWFuYWdlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE5hdGl2ZUkxOG5NYW5hZ2VyLmZvcmNlUlRMKHNob3VsZEZvcmNlKTtcbiAgfSxcblxuICBzd2FwTGVmdEFuZFJpZ2h0SW5SVEw6IChmbGlwU3R5bGVzOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKCFOYXRpdmVJMThuTWFuYWdlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE5hdGl2ZUkxOG5NYW5hZ2VyLnN3YXBMZWZ0QW5kUmlnaHRJblJUTChmbGlwU3R5bGVzKTtcbiAgfSxcblxuICBpc1JUTDogaTE4bkNvbnN0YW50cy5pc1JUTCxcbiAgZG9MZWZ0QW5kUmlnaHRTd2FwSW5SVEw6IGkxOG5Db25zdGFudHMuZG9MZWZ0QW5kUmlnaHRTd2FwSW5SVEwsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSTE4bk1hbmFnZXInO1xuaW1wb3J0IE5hdGl2ZUkxOG5NYW5hZ2VyIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSTE4bk1hbmFnZXInO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlSTE4bk1hbmFnZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIEkxOG5NYW5hZ2VyQ29uc3RhbnRzID0ge3xcbiAgZG9MZWZ0QW5kUmlnaHRTd2FwSW5SVEw6IGJvb2xlYW4sXG4gIGlzUlRMOiBib29sZWFuLFxuICBsb2NhbGVJZGVudGlmaWVyPzogP3N0cmluZyxcbnx9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IEkxOG5NYW5hZ2VyQ29uc3RhbnRzO1xuICBhbGxvd1JUTDogKGFsbG93UlRMOiBib29sZWFuKSA9PiB2b2lkO1xuICBmb3JjZVJUTDogKGZvcmNlUlRMOiBib29sZWFuKSA9PiB2b2lkO1xuICBzd2FwTGVmdEFuZFJpZ2h0SW5SVEw6IChmbGlwU3R5bGVzOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ0kxOG5NYW5hZ2VyJyk6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFZpZXcgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1ZpZXcvVmlldycpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG5jbGFzcyBCb3JkZXJCb3ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8JEZsb3dGaXhNZVByb3BzPiB7XG4gIHJlbmRlcigpOiAkRmxvd0ZpeE1lIHwgUmVhY3QuTm9kZSB7XG4gICAgY29uc3QgYm94ID0gdGhpcy5wcm9wcy5ib3g7XG4gICAgaWYgKCFib3gpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgIGJvcmRlclRvcFdpZHRoOiBib3gudG9wLFxuICAgICAgYm9yZGVyQm90dG9tV2lkdGg6IGJveC5ib3R0b20sXG4gICAgICBib3JkZXJMZWZ0V2lkdGg6IGJveC5sZWZ0LFxuICAgICAgYm9yZGVyUmlnaHRXaWR0aDogYm94LnJpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIDxWaWV3IHN0eWxlPXtbc3R5bGUsIHRoaXMucHJvcHMuc3R5bGVdfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L1ZpZXc+O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQm9yZGVyQm94O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBIb3N0Q29tcG9uZW50LFxuICBUb3VjaGVkVmlld0RhdGFBdFBvaW50LFxufSBmcm9tICcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcblxuY29uc3QgaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbmV4cG9ydCB0eXBlIEhvc3RSZWYgPSBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8bWl4ZWQ+PjtcbmV4cG9ydCB0eXBlIFJlYWN0UmVuZGVyZXIgPSB7XG4gIHJlbmRlcmVyQ29uZmlnOiB7XG4gICAgZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdBdFBvaW50OiAoXG4gICAgICBpbnNwZWN0ZWRWaWV3OiA/SG9zdFJlZixcbiAgICAgIGxvY2F0aW9uWDogbnVtYmVyLFxuICAgICAgbG9jYXRpb25ZOiBudW1iZXIsXG4gICAgICBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgKSA9PiB2b2lkLFxuICAgIC4uLlxuICB9LFxufTtcbnR5cGUgQXR0YWNoZWRSZW5kZXJlckV2ZW50UGF5bG9hZCA9IHtpZDogbnVtYmVyLCByZW5kZXJlcjogUmVhY3RSZW5kZXJlcn07XG5cbmNvbnN0IHJlYWN0RGV2VG9vbHNIb29rID0gd2luZG93Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbmludmFyaWFudChcbiAgQm9vbGVhbihyZWFjdERldlRvb2xzSG9vayksXG4gICdnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIFJlYWN0IERldlRvb2xzIGhvb2sgaXMgbm90IGluamVjdGVkJyxcbik7XG5cbmNvbnN0IHJlbmRlcmVyczogQXJyYXk8UmVhY3RSZW5kZXJlcj4gPSBBcnJheS5mcm9tKFxuICB3aW5kb3cuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlbmRlcmVycy52YWx1ZXMoKSxcbik7XG5cbmNvbnN0IGFwcGVuZFJlbmRlcmVyID0gKHtyZW5kZXJlcn06IEF0dGFjaGVkUmVuZGVyZXJFdmVudFBheWxvYWQpID0+XG4gIHJlbmRlcmVycy5wdXNoKHJlbmRlcmVyKTtcbnJlYWN0RGV2VG9vbHNIb29rLm9uKCdyZW5kZXJlcicsIGFwcGVuZFJlbmRlcmVyKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVSZW5kZXJlcnMoKTogdm9pZCB7XG4gIGludmFyaWFudChcbiAgICByZW5kZXJlcnMubGVuZ3RoID4gMCxcbiAgICAnRXhwZWN0ZWQgdG8gZmluZCBhdCBsZWFzdCBvbmUgUmVhY3QgTmF0aXZlIHJlbmRlcmVyIG9uIERldlRvb2xzIGhvb2suJyxcbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQoXG4gIGluc3BlY3RlZFZpZXc6ID9Ib3N0UmVmLFxuICBsb2NhdGlvblg6IG51bWJlcixcbiAgbG9jYXRpb25ZOiBudW1iZXIsXG4gIGNhbGxiYWNrOiAodmlld0RhdGE6IFRvdWNoZWRWaWV3RGF0YUF0UG9pbnQpID0+IGJvb2xlYW4sXG4pIHtcbiAgdmFsaWRhdGVSZW5kZXJlcnMoKTtcblxuICBsZXQgc2hvdWxkQnJlYWsgPSBmYWxzZTtcbiAgLy8gQ2hlY2sgYWxsIHJlbmRlcmVycyBmb3IgaW5zcGVjdG9yIGRhdGEuXG4gIGZvciAoY29uc3QgcmVuZGVyZXIgb2YgcmVuZGVyZXJzKSB7XG4gICAgaWYgKHNob3VsZEJyZWFrKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocmVuZGVyZXI/LnJlbmRlcmVyQ29uZmlnPy5nZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQgIT0gbnVsbCkge1xuICAgICAgcmVuZGVyZXIucmVuZGVyZXJDb25maWcuZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdBdFBvaW50KFxuICAgICAgICBpbnNwZWN0ZWRWaWV3LFxuICAgICAgICBsb2NhdGlvblgsXG4gICAgICAgIGxvY2F0aW9uWSxcbiAgICAgICAgdmlld0RhdGEgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgcmV0dXJuIHdpdGggbm9uLWVtcHR5IHZpZXcgZGF0YSBzaW5jZSBvbmx5IG9uZSByZW5kZXJlciB3aWxsIGhhdmUgdGhpcyB2aWV3LlxuICAgICAgICAgIGlmICh2aWV3RGF0YSAmJiB2aWV3RGF0YS5oaWVyYXJjaHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2hvdWxkQnJlYWsgPSBjYWxsYmFjayh2aWV3RGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IFZpZXcgZnJvbSAnLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCAqIGFzIExvZ0JveERhdGEgZnJvbSAnLi9EYXRhL0xvZ0JveERhdGEnO1xuaW1wb3J0IExvZ0JveExvZyBmcm9tICcuL0RhdGEvTG9nQm94TG9nJztcbmltcG9ydCBMb2dCb3hMb2dOb3RpZmljYXRpb24gZnJvbSAnLi9VSS9Mb2dCb3hOb3RpZmljYXRpb24nO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIGxvZ3M6ICRSZWFkT25seUFycmF5PExvZ0JveExvZz4sXG4gIHNlbGVjdGVkTG9nSW5kZXg6IG51bWJlcixcbiAgaXNEaXNhYmxlZD86ID9ib29sZWFuLFxufH0+O1xuXG5leHBvcnQgZnVuY3Rpb24gX0xvZ0JveE5vdGlmaWNhdGlvbkNvbnRhaW5lcihwcm9wczogUHJvcHMpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3Qge2xvZ3N9ID0gcHJvcHM7XG5cbiAgY29uc3Qgb25EaXNtaXNzV2FybnMgPSAoKSA9PiB7XG4gICAgTG9nQm94RGF0YS5jbGVhcldhcm5pbmdzKCk7XG4gIH07XG4gIGNvbnN0IG9uRGlzbWlzc0Vycm9ycyA9ICgpID0+IHtcbiAgICBMb2dCb3hEYXRhLmNsZWFyRXJyb3JzKCk7XG4gIH07XG5cbiAgY29uc3Qgc2V0U2VsZWN0ZWRMb2cgPSAoaW5kZXg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIExvZ0JveERhdGEuc2V0U2VsZWN0ZWRMb2coaW5kZXgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG9wZW5Mb2cobG9nOiBMb2dCb3hMb2cpIHtcbiAgICBsZXQgaW5kZXggPSBsb2dzLmxlbmd0aCAtIDE7XG5cbiAgICAvLyBTdG9wIGF0IHplcm8gYmVjYXVzZSBpZiB3ZSBkb24ndCBmaW5kIGFueSBsb2csIHdlJ2xsIG9wZW4gdGhlIGZpcnN0IGxvZy5cbiAgICB3aGlsZSAoaW5kZXggPiAwICYmIGxvZ3NbaW5kZXhdICE9PSBsb2cpIHtcbiAgICAgIGluZGV4IC09IDE7XG4gICAgfVxuICAgIHNldFNlbGVjdGVkTG9nKGluZGV4KTtcbiAgfVxuXG4gIGlmIChsb2dzLmxlbmd0aCA9PT0gMCB8fCBwcm9wcy5pc0Rpc2FibGVkID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB3YXJuaW5ncyA9IGxvZ3MuZmlsdGVyKGxvZyA9PiBsb2cubGV2ZWwgPT09ICd3YXJuJyk7XG4gIGNvbnN0IGVycm9ycyA9IGxvZ3MuZmlsdGVyKFxuICAgIGxvZyA9PiBsb2cubGV2ZWwgPT09ICdlcnJvcicgfHwgbG9nLmxldmVsID09PSAnZmF0YWwnLFxuICApO1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubGlzdH0+XG4gICAgICB7d2FybmluZ3MubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudG9hc3R9PlxuICAgICAgICAgIDxMb2dCb3hMb2dOb3RpZmljYXRpb25cbiAgICAgICAgICAgIGxvZz17d2FybmluZ3Nbd2FybmluZ3MubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICBsZXZlbD1cIndhcm5cIlxuICAgICAgICAgICAgdG90YWxMb2dDb3VudD17d2FybmluZ3MubGVuZ3RofVxuICAgICAgICAgICAgb25QcmVzc09wZW49eygpID0+IG9wZW5Mb2cod2FybmluZ3Nbd2FybmluZ3MubGVuZ3RoIC0gMV0pfVxuICAgICAgICAgICAgb25QcmVzc0Rpc21pc3M9e29uRGlzbWlzc1dhcm5zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICl9XG4gICAgICB7ZXJyb3JzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRvYXN0fT5cbiAgICAgICAgICA8TG9nQm94TG9nTm90aWZpY2F0aW9uXG4gICAgICAgICAgICBsb2c9e2Vycm9yc1tlcnJvcnMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICBsZXZlbD1cImVycm9yXCJcbiAgICAgICAgICAgIHRvdGFsTG9nQ291bnQ9e2Vycm9ycy5sZW5ndGh9XG4gICAgICAgICAgICBvblByZXNzT3Blbj17KCkgPT4gb3BlbkxvZyhlcnJvcnNbZXJyb3JzLmxlbmd0aCAtIDFdKX1cbiAgICAgICAgICAgIG9uUHJlc3NEaXNtaXNzPXtvbkRpc21pc3NFcnJvcnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKX1cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgbGlzdDoge1xuICAgIGJvdHRvbTogMjAsXG4gICAgbGVmdDogMTAsXG4gICAgcmlnaHQ6IDEwLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB9LFxuICB0b2FzdDoge1xuICAgIGJvcmRlclJhZGl1czogOCxcbiAgICBtYXJnaW5Cb3R0b206IDUsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IChMb2dCb3hEYXRhLndpdGhTdWJzY3JpcHRpb24oXG4gIF9Mb2dCb3hOb3RpZmljYXRpb25Db250YWluZXIsXG4pOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDx7fHx9Pik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge01lc3NhZ2UgYXMgTWVzc2FnZVR5cGV9IGZyb20gJy4uL0RhdGEvcGFyc2VMb2dCb3hMb2cnO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnLi4vLi4vSW1hZ2UvSW1hZ2UnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBUZXh0IGZyb20gJy4uLy4uL1RleHQvVGV4dCc7XG5pbXBvcnQgKiBhcyBMb2dCb3hEYXRhIGZyb20gJy4uL0RhdGEvTG9nQm94RGF0YSc7XG5pbXBvcnQgTG9nQm94TG9nIGZyb20gJy4uL0RhdGEvTG9nQm94TG9nJztcbmltcG9ydCBMb2dCb3hCdXR0b24gZnJvbSAnLi9Mb2dCb3hCdXR0b24nO1xuaW1wb3J0IExvZ0JveE1lc3NhZ2UgZnJvbSAnLi9Mb2dCb3hNZXNzYWdlJztcbmltcG9ydCAqIGFzIExvZ0JveFN0eWxlIGZyb20gJy4vTG9nQm94U3R5bGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHtcbiAgbG9nOiBMb2dCb3hMb2csXG4gIHRvdGFsTG9nQ291bnQ6IG51bWJlcixcbiAgbGV2ZWw6ICd3YXJuJyB8ICdlcnJvcicsXG4gIG9uUHJlc3NPcGVuOiAoKSA9PiB2b2lkLFxuICBvblByZXNzRGlzbWlzczogKCkgPT4gdm9pZCxcbn0+O1xuXG5mdW5jdGlvbiBMb2dCb3hMb2dOb3RpZmljYXRpb24ocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHt0b3RhbExvZ0NvdW50LCBsZXZlbCwgbG9nfSA9IHByb3BzO1xuXG4gIC8vIEVhZ2VybHkgc3ltYm9saWNhdGUgc28gdGhlIHN0YWNrIGlzIGF2YWlsYWJsZSB3aGVuIHByZXNzaW5nIHRvIGluc3BlY3QuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgTG9nQm94RGF0YS5zeW1ib2xpY2F0ZUxvZ0xhenkobG9nKTtcbiAgfSwgW2xvZ10pO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3RvYXN0U3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICA8TG9nQm94QnV0dG9uXG4gICAgICAgIG9uUHJlc3M9e3Byb3BzLm9uUHJlc3NPcGVufVxuICAgICAgICBzdHlsZT17dG9hc3RTdHlsZXMucHJlc3N9XG4gICAgICAgIGJhY2tncm91bmRDb2xvcj17e1xuICAgICAgICAgIGRlZmF1bHQ6IExvZ0JveFN0eWxlLmdldEJhY2tncm91bmRDb2xvcigxKSxcbiAgICAgICAgICBwcmVzc2VkOiBMb2dCb3hTdHlsZS5nZXRCYWNrZ3JvdW5kQ29sb3IoMC45KSxcbiAgICAgICAgfX0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXt0b2FzdFN0eWxlcy5jb250ZW50fT5cbiAgICAgICAgICA8Q291bnRCYWRnZSBjb3VudD17dG90YWxMb2dDb3VudH0gbGV2ZWw9e2xldmVsfSAvPlxuICAgICAgICAgIDxNZXNzYWdlIG1lc3NhZ2U9e2xvZy5tZXNzYWdlfSAvPlxuICAgICAgICAgIDxEaXNtaXNzQnV0dG9uIG9uUHJlc3M9e3Byb3BzLm9uUHJlc3NEaXNtaXNzfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L0xvZ0JveEJ1dHRvbj5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENvdW50QmFkZ2UocHJvcHM6IHtjb3VudDogbnVtYmVyLCBsZXZlbDogJ2Vycm9yJyB8ICd3YXJuJ30pIHtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17Y291bnRTdHlsZXMub3V0c2lkZX0+XG4gICAgICB7LyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gKD49MC4xMTQuMCkgVGhpcyBzdXBwcmVzc2lvbiB3YXMgYWRkZWRcbiAgICAgICAqIHdoZW4gZml4aW5nIHRoZSB0eXBlIG9mIGBTdHlsZVNoZWV0LmNyZWF0ZWAuIFJlbW92ZSB0aGlzIGNvbW1lbnQgdG9cbiAgICAgICAqIHNlZSB0aGUgZXJyb3IuICovfVxuICAgICAgPFZpZXcgc3R5bGU9e1tjb3VudFN0eWxlcy5pbnNpZGUsIGNvdW50U3R5bGVzW3Byb3BzLmxldmVsXV19PlxuICAgICAgICA8VGV4dCBzdHlsZT17Y291bnRTdHlsZXMudGV4dH0+XG4gICAgICAgICAge3Byb3BzLmNvdW50IDw9IDEgPyAnIScgOiBwcm9wcy5jb3VudH1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gTWVzc2FnZShwcm9wczoge21lc3NhZ2U6IE1lc3NhZ2VUeXBlfSkge1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXttZXNzYWdlU3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICA8VGV4dCBudW1iZXJPZkxpbmVzPXsxfSBzdHlsZT17bWVzc2FnZVN0eWxlcy50ZXh0fT5cbiAgICAgICAge3Byb3BzLm1lc3NhZ2UgJiYgKFxuICAgICAgICAgIDxMb2dCb3hNZXNzYWdlXG4gICAgICAgICAgICBwbGFpbnRleHRcbiAgICAgICAgICAgIG1lc3NhZ2U9e3Byb3BzLm1lc3NhZ2V9XG4gICAgICAgICAgICBzdHlsZT17bWVzc2FnZVN0eWxlcy5zdWJzdGl0dXRpb25UZXh0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1RleHQ+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBEaXNtaXNzQnV0dG9uKHByb3BzOiB7b25QcmVzczogKCkgPT4gdm9pZH0pIHtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17ZGlzbWlzc1N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPExvZ0JveEJ1dHRvblxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e3tcbiAgICAgICAgICBkZWZhdWx0OiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMC4zKSxcbiAgICAgICAgICBwcmVzc2VkOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMC41KSxcbiAgICAgICAgfX1cbiAgICAgICAgaGl0U2xvcD17e1xuICAgICAgICAgIHRvcDogMTIsXG4gICAgICAgICAgcmlnaHQ6IDEwLFxuICAgICAgICAgIGJvdHRvbTogMTIsXG4gICAgICAgICAgbGVmdDogMTAsXG4gICAgICAgIH19XG4gICAgICAgIG9uUHJlc3M9e3Byb3BzLm9uUHJlc3N9XG4gICAgICAgIHN0eWxlPXtkaXNtaXNzU3R5bGVzLnByZXNzfT5cbiAgICAgICAgPEltYWdlXG4gICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuL0xvZ0JveEltYWdlcy9jbG9zZS5wbmcnKX1cbiAgICAgICAgICBzdHlsZT17ZGlzbWlzc1N0eWxlcy5pbWFnZX1cbiAgICAgICAgLz5cbiAgICAgIDwvTG9nQm94QnV0dG9uPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3QgY291bnRTdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHdhcm46IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IExvZ0JveFN0eWxlLmdldFdhcm5pbmdDb2xvcigxKSxcbiAgfSxcbiAgZXJyb3I6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IExvZ0JveFN0eWxlLmdldEVycm9yQ29sb3IoMSksXG4gIH0sXG4gIGxvZzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogTG9nQm94U3R5bGUuZ2V0TG9nQ29sb3IoMSksXG4gIH0sXG4gIG91dHNpZGU6IHtcbiAgICBwYWRkaW5nOiAyLFxuICAgIGJvcmRlclJhZGl1czogMjUsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgbWFyZ2luUmlnaHQ6IDgsXG4gIH0sXG4gIGluc2lkZToge1xuICAgIG1pbldpZHRoOiAxOCxcbiAgICBwYWRkaW5nTGVmdDogNCxcbiAgICBwYWRkaW5nUmlnaHQ6IDQsXG4gICAgYm9yZGVyUmFkaXVzOiAyNSxcbiAgICBmb250V2VpZ2h0OiAnNjAwJyxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMSksXG4gICAgZm9udFNpemU6IDE0LFxuICAgIGxpbmVIZWlnaHQ6IDE4LFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udFdlaWdodDogJzYwMCcsXG4gICAgdGV4dFNoYWRvd0NvbG9yOiBMb2dCb3hTdHlsZS5nZXRCYWNrZ3JvdW5kQ29sb3IoMC40KSxcbiAgICB0ZXh0U2hhZG93T2Zmc2V0OiB7d2lkdGg6IDAsIGhlaWdodDogMH0sXG4gICAgdGV4dFNoYWRvd1JhZGl1czogMyxcbiAgfSxcbn0pO1xuXG5jb25zdCBtZXNzYWdlU3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBhbGlnblNlbGY6ICdzdHJldGNoJyxcbiAgICBmbGV4R3JvdzogMSxcbiAgICBmbGV4U2hyaW5rOiAxLFxuICAgIGZsZXhCYXNpczogJ2F1dG8nLFxuICAgIGJvcmRlckxlZnRDb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDAuMiksXG4gICAgYm9yZGVyTGVmdFdpZHRoOiAxLFxuICAgIHBhZGRpbmdMZWZ0OiA4LFxuICB9LFxuICB0ZXh0OiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigxKSxcbiAgICBmbGV4OiAxLFxuICAgIGZvbnRTaXplOiAxNCxcbiAgICBsaW5lSGVpZ2h0OiAyMixcbiAgfSxcbiAgc3Vic3RpdHV0aW9uVGV4dDoge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMC42KSxcbiAgfSxcbn0pO1xuXG5jb25zdCBkaXNtaXNzU3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGZsZXhHcm93OiAwLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgZmxleEJhc2lzOiAnYXV0bycsXG4gICAgbWFyZ2luTGVmdDogNSxcbiAgfSxcbiAgcHJlc3M6IHtcbiAgICBoZWlnaHQ6IDIwLFxuICAgIHdpZHRoOiAyMCxcbiAgICBib3JkZXJSYWRpdXM6IDI1LFxuICAgIGFsaWduU2VsZjogJ2ZsZXgtZW5kJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIGltYWdlOiB7XG4gICAgaGVpZ2h0OiA4LFxuICAgIHdpZHRoOiA4LFxuICAgIHRpbnRDb2xvcjogTG9nQm94U3R5bGUuZ2V0QmFja2dyb3VuZENvbG9yKDEpLFxuICB9LFxufSk7XG5cbmNvbnN0IHRvYXN0U3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBoZWlnaHQ6IDQ4LFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIG1hcmdpblRvcDogMC41LFxuICAgIGJhY2tncm91bmRDb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDEpLFxuICB9LFxuICBwcmVzczoge1xuICAgIGhlaWdodDogNDgsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgbWFyZ2luVG9wOiAwLjUsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDEyLFxuICB9LFxuICBjb250ZW50OiB7XG4gICAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGJvcmRlclJhZGl1czogOCxcbiAgICBmbGV4R3JvdzogMCxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGZsZXhCYXNpczogJ2F1dG8nLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IExvZ0JveExvZ05vdGlmaWNhdGlvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7SW1hZ2VTdHlsZSwgSW1hZ2VTdHlsZVByb3B9IGZyb20gJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7Um9vdFRhZ30gZnJvbSAnLi4vVHlwZXMvUm9vdFRhZ1R5cGVzJztcbmltcG9ydCB0eXBlIHtBYnN0cmFjdEltYWdlSU9TLCBJbWFnZUlPU30gZnJvbSAnLi9JbWFnZVR5cGVzLmZsb3cnO1xuXG5pbXBvcnQge2NyZWF0ZVJvb3RUYWd9IGZyb20gJy4uL1JlYWN0TmF0aXZlL1Jvb3RUYWcnO1xuaW1wb3J0IGZsYXR0ZW5TdHlsZSBmcm9tICcuLi9TdHlsZVNoZWV0L2ZsYXR0ZW5TdHlsZSc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IEltYWdlQW5hbHl0aWNzVGFnQ29udGV4dCBmcm9tICcuL0ltYWdlQW5hbHl0aWNzVGFnQ29udGV4dCc7XG5pbXBvcnQge1xuICB1bnN0YWJsZV9nZXRJbWFnZUNvbXBvbmVudERlY29yYXRvcixcbiAgdXNlV3JhcFJlZldpdGhJbWFnZUF0dGFjaGVkQ2FsbGJhY2tzLFxufSBmcm9tICcuL0ltYWdlSW5qZWN0aW9uJztcbmltcG9ydCB7Z2V0SW1hZ2VTb3VyY2VzRnJvbUltYWdlUHJvcHN9IGZyb20gJy4vSW1hZ2VTb3VyY2VVdGlscyc7XG5pbXBvcnQge2NvbnZlcnRPYmplY3RGaXRUb1Jlc2l6ZU1vZGV9IGZyb20gJy4vSW1hZ2VVdGlscyc7XG5pbXBvcnQgSW1hZ2VWaWV3TmF0aXZlQ29tcG9uZW50IGZyb20gJy4vSW1hZ2VWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBOYXRpdmVJbWFnZUxvYWRlcklPUyBmcm9tICcuL05hdGl2ZUltYWdlTG9hZGVySU9TJztcbmltcG9ydCByZXNvbHZlQXNzZXRTb3VyY2UgZnJvbSAnLi9yZXNvbHZlQXNzZXRTb3VyY2UnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBnZXRTaXplKFxuICB1cmk6IHN0cmluZyxcbiAgc3VjY2VzczogKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiB2b2lkLFxuICBmYWlsdXJlPzogKGVycm9yOiBtaXhlZCkgPT4gdm9pZCxcbik6IHZvaWQge1xuICBOYXRpdmVJbWFnZUxvYWRlcklPUy5nZXRTaXplKHVyaSlcbiAgICAudGhlbigoW3dpZHRoLCBoZWlnaHRdKSA9PiBzdWNjZXNzKHdpZHRoLCBoZWlnaHQpKVxuICAgIC5jYXRjaChcbiAgICAgIGZhaWx1cmUgfHxcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGdldCBzaXplIGZvciBpbWFnZSAnICsgdXJpKTtcbiAgICAgICAgfSxcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplV2l0aEhlYWRlcnMoXG4gIHVyaTogc3RyaW5nLFxuICBoZWFkZXJzOiB7W3N0cmluZ106IHN0cmluZywgLi4ufSxcbiAgc3VjY2VzczogKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiB2b2lkLFxuICBmYWlsdXJlPzogKGVycm9yOiBtaXhlZCkgPT4gdm9pZCxcbik6IHZvaWQge1xuICBOYXRpdmVJbWFnZUxvYWRlcklPUy5nZXRTaXplV2l0aEhlYWRlcnModXJpLCBoZWFkZXJzKVxuICAgIC50aGVuKGZ1bmN0aW9uIChzaXplcykge1xuICAgICAgc3VjY2VzcyhzaXplcy53aWR0aCwgc2l6ZXMuaGVpZ2h0KTtcbiAgICB9KVxuICAgIC5jYXRjaChcbiAgICAgIGZhaWx1cmUgfHxcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGdldCBzaXplIGZvciBpbWFnZTogJyArIHVyaSk7XG4gICAgICAgIH0sXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcHJlZmV0Y2hXaXRoTWV0YWRhdGEoXG4gIHVybDogc3RyaW5nLFxuICBxdWVyeVJvb3ROYW1lOiBzdHJpbmcsXG4gIHJvb3RUYWc/OiA/Um9vdFRhZyxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoTmF0aXZlSW1hZ2VMb2FkZXJJT1MucHJlZmV0Y2hJbWFnZVdpdGhNZXRhZGF0YSkge1xuICAgIC8vIG51bWJlciBwYXJhbXMgbGlrZSByb290VGFnIGNhbm5vdCBiZSBudWxsYWJsZSBiZWZvcmUgVHVyYm9Nb2R1bGVzIGlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBOYXRpdmVJbWFnZUxvYWRlcklPUy5wcmVmZXRjaEltYWdlV2l0aE1ldGFkYXRhKFxuICAgICAgdXJsLFxuICAgICAgcXVlcnlSb290TmFtZSxcbiAgICAgIC8vIE5PVEU6IFJvb3RUYWcgdHlwZVxuICAgICAgcm9vdFRhZyAhPSBudWxsID8gcm9vdFRhZyA6IGNyZWF0ZVJvb3RUYWcoMCksXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gTmF0aXZlSW1hZ2VMb2FkZXJJT1MucHJlZmV0Y2hJbWFnZSh1cmwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZWZldGNoKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiBOYXRpdmVJbWFnZUxvYWRlcklPUy5wcmVmZXRjaEltYWdlKHVybCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5Q2FjaGUoXG4gIHVybHM6IEFycmF5PHN0cmluZz4sXG4pOiBQcm9taXNlPHtbc3RyaW5nXTogJ21lbW9yeScgfCAnZGlzaycgfCAnZGlzay9tZW1vcnknLCAuLi59PiB7XG4gIHJldHVybiBOYXRpdmVJbWFnZUxvYWRlcklPUy5xdWVyeUNhY2hlKHVybHMpO1xufVxuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBpbWFnZXMsXG4gKiBpbmNsdWRpbmcgbmV0d29yayBpbWFnZXMsIHN0YXRpYyByZXNvdXJjZXMsIHRlbXBvcmFyeSBsb2NhbCBpbWFnZXMsIGFuZFxuICogaW1hZ2VzIGZyb20gbG9jYWwgZGlzaywgc3VjaCBhcyB0aGUgY2FtZXJhIHJvbGwuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvaW1hZ2VcbiAqL1xubGV0IEJhc2VJbWFnZTogQWJzdHJhY3RJbWFnZUlPUyA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgY29uc3Qgc291cmNlID0gZ2V0SW1hZ2VTb3VyY2VzRnJvbUltYWdlUHJvcHMocHJvcHMpIHx8IHtcbiAgICB1cmk6IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGxldCBzb3VyY2VzO1xuICBsZXQgc3R5bGU6IEltYWdlU3R5bGU7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgIHN0eWxlID1cbiAgICAgIGZsYXR0ZW5TdHlsZTxJbWFnZVN0eWxlUHJvcD4oW3N0eWxlcy5iYXNlLCBwcm9wcy5zdHlsZV0pIHx8XG4gICAgICAoe306IEltYWdlU3R5bGUpO1xuICAgIHNvdXJjZXMgPSBzb3VyY2U7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qge3VyaX0gPSBzb3VyY2U7XG4gICAgY29uc3Qgd2lkdGggPSBzb3VyY2Uud2lkdGggPz8gcHJvcHMud2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gc291cmNlLmhlaWdodCA/PyBwcm9wcy5oZWlnaHQ7XG4gICAgc3R5bGUgPVxuICAgICAgZmxhdHRlblN0eWxlPEltYWdlU3R5bGVQcm9wPihbXG4gICAgICAgIHt3aWR0aCwgaGVpZ2h0fSxcbiAgICAgICAgc3R5bGVzLmJhc2UsXG4gICAgICAgIHByb3BzLnN0eWxlLFxuICAgICAgXSkgfHwgKHt9OiBJbWFnZVN0eWxlKTtcbiAgICBzb3VyY2VzID0gW3NvdXJjZV07XG5cbiAgICBpZiAodXJpID09PSAnJykge1xuICAgICAgY29uc29sZS53YXJuKCdzb3VyY2UudXJpIHNob3VsZCBub3QgYmUgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb2JqZWN0Rml0ID1cbiAgICBzdHlsZS5vYmplY3RGaXQgIT0gbnVsbFxuICAgICAgPyBjb252ZXJ0T2JqZWN0Rml0VG9SZXNpemVNb2RlKHN0eWxlLm9iamVjdEZpdClcbiAgICAgIDogbnVsbDtcbiAgY29uc3QgcmVzaXplTW9kZSA9XG4gICAgb2JqZWN0Rml0IHx8IHByb3BzLnJlc2l6ZU1vZGUgfHwgc3R5bGUucmVzaXplTW9kZSB8fCAnY292ZXInO1xuICBjb25zdCB0aW50Q29sb3IgPSBwcm9wcy50aW50Q29sb3IgPz8gc3R5bGUudGludENvbG9yO1xuXG4gIGlmIChwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1RoZSA8SW1hZ2U+IGNvbXBvbmVudCBjYW5ub3QgY29udGFpbiBjaGlsZHJlbi4gSWYgeW91IHdhbnQgdG8gcmVuZGVyIGNvbnRlbnQgb24gdG9wIG9mIHRoZSBpbWFnZSwgY29uc2lkZXIgdXNpbmcgdGhlIDxJbWFnZUJhY2tncm91bmQ+IGNvbXBvbmVudCBvciBhYnNvbHV0ZSBwb3NpdGlvbmluZy4nLFxuICAgICk7XG4gIH1cbiAgY29uc3Qge1xuICAgICdhcmlhLWJ1c3knOiBhcmlhQnVzeSxcbiAgICAnYXJpYS1jaGVja2VkJzogYXJpYUNoZWNrZWQsXG4gICAgJ2FyaWEtZGlzYWJsZWQnOiBhcmlhRGlzYWJsZWQsXG4gICAgJ2FyaWEtZXhwYW5kZWQnOiBhcmlhRXhwYW5kZWQsXG4gICAgJ2FyaWEtc2VsZWN0ZWQnOiBhcmlhU2VsZWN0ZWQsXG4gICAgaGVpZ2h0LFxuICAgIHNyYyxcbiAgICB3aWR0aCxcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IF9hY2Nlc3NpYmlsaXR5U3RhdGUgPSB7XG4gICAgYnVzeTogYXJpYUJ1c3kgPz8gcHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5idXN5LFxuICAgIGNoZWNrZWQ6IGFyaWFDaGVja2VkID8/IHByb3BzLmFjY2Vzc2liaWxpdHlTdGF0ZT8uY2hlY2tlZCxcbiAgICBkaXNhYmxlZDogYXJpYURpc2FibGVkID8/IHByb3BzLmFjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWQsXG4gICAgZXhwYW5kZWQ6IGFyaWFFeHBhbmRlZCA/PyBwcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmV4cGFuZGVkLFxuICAgIHNlbGVjdGVkOiBhcmlhU2VsZWN0ZWQgPz8gcHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5zZWxlY3RlZCxcbiAgfTtcbiAgY29uc3QgYWNjZXNzaWJpbGl0eUxhYmVsID0gcHJvcHNbJ2FyaWEtbGFiZWwnXSA/PyBwcm9wcy5hY2Nlc3NpYmlsaXR5TGFiZWw7XG5cbiAgY29uc3QgYWN0dWFsUmVmID0gdXNlV3JhcFJlZldpdGhJbWFnZUF0dGFjaGVkQ2FsbGJhY2tzKGZvcndhcmRlZFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8SW1hZ2VBbmFseXRpY3NUYWdDb250ZXh0LkNvbnN1bWVyPlxuICAgICAge2FuYWx5dGljVGFnID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8SW1hZ2VWaWV3TmF0aXZlQ29tcG9uZW50XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e19hY2Nlc3NpYmlsaXR5U3RhdGV9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgICAgYWNjZXNzaWJsZT17cHJvcHMuYWx0ICE9PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMuYWNjZXNzaWJsZX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17YWNjZXNzaWJpbGl0eUxhYmVsID8/IHByb3BzLmFsdH1cbiAgICAgICAgICAgIHJlZj17YWN0dWFsUmVmfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgcmVzaXplTW9kZT17cmVzaXplTW9kZX1cbiAgICAgICAgICAgIHRpbnRDb2xvcj17dGludENvbG9yfVxuICAgICAgICAgICAgc291cmNlPXtzb3VyY2VzfVxuICAgICAgICAgICAgaW50ZXJuYWxfYW5hbHl0aWNUYWc9e2FuYWx5dGljVGFnfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvSW1hZ2VBbmFseXRpY3NUYWdDb250ZXh0LkNvbnN1bWVyPlxuICApO1xufSk7XG5cbmNvbnN0IGltYWdlQ29tcG9uZW50RGVjb3JhdG9yID0gdW5zdGFibGVfZ2V0SW1hZ2VDb21wb25lbnREZWNvcmF0b3IoKTtcbmlmIChpbWFnZUNvbXBvbmVudERlY29yYXRvciAhPSBudWxsKSB7XG4gIEJhc2VJbWFnZSA9IGltYWdlQ29tcG9uZW50RGVjb3JhdG9yKEJhc2VJbWFnZSk7XG59XG5cbi8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtdHlwZV0gRXZlbnR1YWxseSB3ZSBuZWVkIHRvIG1vdmUgdGhlc2UgZnVuY3Rpb25zIGZyb20gc3RhdGljcyBvZiB0aGUgY29tcG9uZW50IHRvIGV4cG9ydHMgaW4gdGhlIG1vZHVsZS5cbmNvbnN0IEltYWdlOiBJbWFnZUlPUyA9IEJhc2VJbWFnZTtcblxuSW1hZ2UuZGlzcGxheU5hbWUgPSAnSW1hZ2UnO1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGFuIGltYWdlIHByaW9yIHRvIGRpc3BsYXlpbmcgaXQuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvaW1hZ2UjZ2V0c2l6ZVxuICovXG4vLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIFRoaXMgcHJvcGVydHkgaXNuJ3Qgd3JpdGFibGUgYnV0IHdlJ3JlIGFjdHVhbGx5IGRlZmluaW5nIGl0IGhlcmUgZm9yIHRoZSBmaXJzdCB0aW1lLlxuSW1hZ2UuZ2V0U2l6ZSA9IGdldFNpemU7XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgKGluIHBpeGVscykgb2YgYW4gaW1hZ2UgcHJpb3IgdG8gZGlzcGxheWluZyBpdFxuICogd2l0aCB0aGUgYWJpbGl0eSB0byBwcm92aWRlIHRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9pbWFnZSNnZXRzaXpld2l0aGhlYWRlcnNcbiAqL1xuLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIHByb3BlcnR5IGlzbid0IHdyaXRhYmxlIGJ1dCB3ZSdyZSBhY3R1YWxseSBkZWZpbmluZyBpdCBoZXJlIGZvciB0aGUgZmlyc3QgdGltZS5cbkltYWdlLmdldFNpemVXaXRoSGVhZGVycyA9IGdldFNpemVXaXRoSGVhZGVycztcblxuLyoqXG4gKiBQcmVmZXRjaGVzIGEgcmVtb3RlIGltYWdlIGZvciBsYXRlciB1c2UgYnkgZG93bmxvYWRpbmcgaXQgdG8gdGhlIGRpc2tcbiAqIGNhY2hlLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2ltYWdlI3ByZWZldGNoXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gVGhpcyBwcm9wZXJ0eSBpc24ndCB3cml0YWJsZSBidXQgd2UncmUgYWN0dWFsbHkgZGVmaW5pbmcgaXQgaGVyZSBmb3IgdGhlIGZpcnN0IHRpbWUuXG5JbWFnZS5wcmVmZXRjaCA9IHByZWZldGNoO1xuXG4vKipcbiAqIFByZWZldGNoZXMgYSByZW1vdGUgaW1hZ2UgZm9yIGxhdGVyIHVzZSBieSBkb3dubG9hZGluZyBpdCB0byB0aGUgZGlza1xuICogY2FjaGUsIGFuZCBhZGRzIG1ldGFkYXRhIGZvciBxdWVyeVJvb3ROYW1lIGFuZCByb290VGFnLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2ltYWdlI3ByZWZldGNoXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gVGhpcyBwcm9wZXJ0eSBpc24ndCB3cml0YWJsZSBidXQgd2UncmUgYWN0dWFsbHkgZGVmaW5pbmcgaXQgaGVyZSBmb3IgdGhlIGZpcnN0IHRpbWUuXG5JbWFnZS5wcmVmZXRjaFdpdGhNZXRhZGF0YSA9IHByZWZldGNoV2l0aE1ldGFkYXRhO1xuXG4vKipcbiAqIFBlcmZvcm1zIGNhY2hlIGludGVycm9nYXRpb24uXG4gKlxuICogIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2ltYWdlI3F1ZXJ5Y2FjaGVcbiAqL1xuLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIHByb3BlcnR5IGlzbid0IHdyaXRhYmxlIGJ1dCB3ZSdyZSBhY3R1YWxseSBkZWZpbmluZyBpdCBoZXJlIGZvciB0aGUgZmlyc3QgdGltZS5cbkltYWdlLnF1ZXJ5Q2FjaGUgPSBxdWVyeUNhY2hlO1xuXG4vKipcbiAqIFJlc29sdmVzIGFuIGFzc2V0IHJlZmVyZW5jZSBpbnRvIGFuIG9iamVjdC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9pbWFnZSNyZXNvbHZlYXNzZXRzb3VyY2VcbiAqL1xuLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIHByb3BlcnR5IGlzbid0IHdyaXRhYmxlIGJ1dCB3ZSdyZSBhY3R1YWxseSBkZWZpbmluZyBpdCBoZXJlIGZvciB0aGUgZmlyc3QgdGltZS5cbkltYWdlLnJlc29sdmVBc3NldFNvdXJjZSA9IHJlc29sdmVBc3NldFNvdXJjZTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBiYXNlOiB7XG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gSW1hZ2U7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIENvbnRleHRUeXBlID0gP3N0cmluZztcblxuY29uc3QgQ29udGV4dDogUmVhY3QuQ29udGV4dDxDb250ZXh0VHlwZT4gPVxuICBSZWFjdC5jcmVhdGVDb250ZXh0PENvbnRleHRUeXBlPihudWxsKTtcblxuaWYgKF9fREVWX18pIHtcbiAgQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdJbWFnZUFuYWx5dGljc1RhZ0NvbnRleHQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb250ZXh0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgSG9zdENvbXBvbmVudCxcbiAgUGFydGlhbFZpZXdDb25maWcsXG59IGZyb20gJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBDb2xvclZhbHVlLFxuICBEYW5nZXJvdXNseUltcHJlY2lzZVN0eWxlLFxuICBJbWFnZVN0eWxlUHJvcCxcbn0gZnJvbSAnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtSZXNvbHZlZEFzc2V0U291cmNlfSBmcm9tICcuL0Fzc2V0U291cmNlUmVzb2x2ZXInO1xuaW1wb3J0IHR5cGUge0ltYWdlUHJvcHN9IGZyb20gJy4vSW1hZ2VQcm9wcyc7XG5pbXBvcnQgdHlwZSB7RWxlbWVudFJlZn0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgKiBhcyBOYXRpdmVDb21wb25lbnRSZWdpc3RyeSBmcm9tICcuLi9OYXRpdmVDb21wb25lbnQvTmF0aXZlQ29tcG9uZW50UmVnaXN0cnknO1xuaW1wb3J0IHtDb25kaXRpb25hbGx5SWdub3JlZEV2ZW50SGFuZGxlcnN9IGZyb20gJy4uL05hdGl2ZUNvbXBvbmVudC9WaWV3Q29uZmlnSWdub3JlJztcbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tbWFuZHMgZnJvbSAnLi4vVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21tYW5kcyc7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7XG4gIC4uLkltYWdlUHJvcHMsXG4gIC4uLlZpZXdQcm9wcyxcblxuICBzdHlsZT86IEltYWdlU3R5bGVQcm9wIHwgRGFuZ2Vyb3VzbHlJbXByZWNpc2VTdHlsZSxcblxuICAvLyBpT1MgbmF0aXZlIHByb3BzXG4gIHRpbnRDb2xvcj86IENvbG9yVmFsdWUsXG5cbiAgLy8gQW5kcm9pZCBuYXRpdmUgcHJvcHNcbiAgc2hvdWxkTm90aWZ5TG9hZEV2ZW50cz86IGJvb2xlYW4sXG4gIHNyYz86XG4gICAgfCA/UmVzb2x2ZWRBc3NldFNvdXJjZVxuICAgIHwgPyRSZWFkT25seUFycmF5PD8kUmVhZE9ubHk8e3VyaT86ID9zdHJpbmcsIC4uLn0+PixcbiAgaGVhZGVycz86ID97W3N0cmluZ106IHN0cmluZ30sXG4gIGRlZmF1bHRTcmM/OiA/c3RyaW5nLFxuICBsb2FkaW5nSW5kaWNhdG9yU3JjPzogP3N0cmluZyxcbn0+O1xuXG5pbnRlcmZhY2UgTmF0aXZlQ29tbWFuZHMge1xuICArc2V0SXNWaXNpYmxlX0VYUEVSSU1FTlRBTDogKFxuICAgIHZpZXdSZWY6IEVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+LFxuICAgIGlzVmlzaWJsZTogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQ29tbWFuZHM6IE5hdGl2ZUNvbW1hbmRzID0gY29kZWdlbk5hdGl2ZUNvbW1hbmRzPE5hdGl2ZUNvbW1hbmRzPih7XG4gIHN1cHBvcnRlZENvbW1hbmRzOiBbJ3NldElzVmlzaWJsZV9FWFBFUklNRU5UQUwnXSxcbn0pO1xuXG5leHBvcnQgY29uc3QgX19JTlRFUk5BTF9WSUVXX0NPTkZJRzogUGFydGlhbFZpZXdDb25maWcgPVxuICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnXG4gICAgPyB7XG4gICAgICAgIHVpVmlld0NsYXNzTmFtZTogJ1JDVEltYWdlVmlldycsXG4gICAgICAgIGJ1YmJsaW5nRXZlbnRUeXBlczoge30sXG4gICAgICAgIGRpcmVjdEV2ZW50VHlwZXM6IHtcbiAgICAgICAgICB0b3BMb2FkU3RhcnQ6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbkxvYWRTdGFydCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BQcm9ncmVzczoge1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uUHJvZ3Jlc3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9wRXJyb3I6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbkVycm9yJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcExvYWQ6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbkxvYWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9wTG9hZEVuZDoge1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uTG9hZEVuZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgYmx1clJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBpbnRlcm5hbF9hbmFseXRpY1RhZzogdHJ1ZSxcbiAgICAgICAgICByZXNpemVNb2RlOiB0cnVlLFxuICAgICAgICAgIHRpbnRDb2xvcjoge1xuICAgICAgICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiB0cnVlLFxuICAgICAgICAgIHJlc2l6ZU1ldGhvZDogdHJ1ZSxcbiAgICAgICAgICBzcmM6IHRydWUsXG4gICAgICAgICAgLy8gTk9URTogTmV3IEFyY2hpdGVjdHVyZSBleHBlY3RzIHRoaXMgdG8gYmUgY2FsbGVkIGBzb3VyY2VgLFxuICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsYXRmb3JtLCB0aGVyZWZvcmUgcHJvcGFnYXRlIGl0IGFzIHdlbGwuXG4gICAgICAgICAgLy8gRm9yIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGJvdGggYHNyY2BcbiAgICAgICAgICAvLyBhbmQgYHNvdXJjZWAsIHdoaWNoIHdpbGwgYmUgaWRlbnRpY2FsIGF0IHRoaXMgc3RhZ2UuXG4gICAgICAgICAgc291cmNlOiB0cnVlLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBoZWFkZXJzOiB0cnVlLFxuICAgICAgICAgIHNob3VsZE5vdGlmeUxvYWRFdmVudHM6IHRydWUsXG4gICAgICAgICAgZGVmYXVsdFNyYzogdHJ1ZSxcbiAgICAgICAgICBvdmVybGF5Q29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvcmRlckNvbG9yOiB7XG4gICAgICAgICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhY2Nlc3NpYmxlOiB0cnVlLFxuICAgICAgICAgIHByb2dyZXNzaXZlUmVuZGVyaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBmYWRlRHVyYXRpb246IHRydWUsXG4gICAgICAgICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IHRydWUsXG4gICAgICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IHRydWUsXG4gICAgICAgICAgbG9hZGluZ0luZGljYXRvclNyYzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgdWlWaWV3Q2xhc3NOYW1lOiAnUkNUSW1hZ2VWaWV3JyxcbiAgICAgICAgYnViYmxpbmdFdmVudFR5cGVzOiB7fSxcbiAgICAgICAgZGlyZWN0RXZlbnRUeXBlczoge1xuICAgICAgICAgIHRvcExvYWRTdGFydDoge1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uTG9hZFN0YXJ0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcFByb2dyZXNzOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Qcm9ncmVzcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BFcnJvcjoge1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uRXJyb3InLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9wUGFydGlhbExvYWQ6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvblBhcnRpYWxMb2FkJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcExvYWQ6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbkxvYWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9wTG9hZEVuZDoge1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uTG9hZEVuZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgYmx1clJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBjYXBJbnNldHM6IHtcbiAgICAgICAgICAgIGRpZmY6IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9kaWZmZXIvaW5zZXRzRGlmZmVyJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWZhdWx0U291cmNlOiB7XG4gICAgICAgICAgICBwcm9jZXNzOiByZXF1aXJlKCcuL3Jlc29sdmVBc3NldFNvdXJjZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50ZXJuYWxfYW5hbHl0aWNUYWc6IHRydWUsXG4gICAgICAgICAgcmVzaXplTW9kZTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2U6IHRydWUsXG4gICAgICAgICAgdGludENvbG9yOiB7XG4gICAgICAgICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5Db25kaXRpb25hbGx5SWdub3JlZEV2ZW50SGFuZGxlcnMoe1xuICAgICAgICAgICAgb25Mb2FkU3RhcnQ6IHRydWUsXG4gICAgICAgICAgICBvbkxvYWQ6IHRydWUsXG4gICAgICAgICAgICBvbkxvYWRFbmQ6IHRydWUsXG4gICAgICAgICAgICBvblByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgb25FcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIG9uUGFydGlhbExvYWQ6IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG5jb25zdCBJbWFnZVZpZXdOYXRpdmVDb21wb25lbnQ6IEhvc3RDb21wb25lbnQ8UHJvcHM+ID1cbiAgTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkuZ2V0PFByb3BzPihcbiAgICAnUkNUSW1hZ2VWaWV3JyxcbiAgICAoKSA9PiBfX0lOVEVSTkFMX1ZJRVdfQ09ORklHLFxuICApO1xuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVZpZXdOYXRpdmVDb21wb25lbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVJbWFnZUxvYWRlcklPUyc7XG5pbXBvcnQgTmF0aXZlSW1hZ2VMb2FkZXJJT1MgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVJbWFnZUxvYWRlcklPUyc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVJbWFnZUxvYWRlcklPUztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSb290VGFnfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8fH07XG4gIC8vIFJldHVybiBbd2lkdGgsIGhlaWdodF0gb2YgaW1hZ2UgdXJpXG4gICtnZXRTaXplOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8JFJlYWRPbmx5QXJyYXk8bnVtYmVyPj47XG4gICtnZXRTaXplV2l0aEhlYWRlcnM6IChcbiAgICB1cmk6IHN0cmluZyxcbiAgICBoZWFkZXJzOiBPYmplY3QsXG4gICkgPT4gUHJvbWlzZTx7XG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICAuLi5cbiAgfT47XG4gICtwcmVmZXRjaEltYWdlOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICtwcmVmZXRjaEltYWdlV2l0aE1ldGFkYXRhPzogKFxuICAgIHVyaTogc3RyaW5nLFxuICAgIHF1ZXJ5Um9vdE5hbWU6IHN0cmluZyxcbiAgICByb290VGFnOiBSb290VGFnLFxuICApID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICtxdWVyeUNhY2hlOiAodXJpczogQXJyYXk8c3RyaW5nPikgPT4gUHJvbWlzZTxPYmplY3Q+O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXRFbmZvcmNpbmc8U3BlYz4oJ0ltYWdlTG9hZGVyJyk6IFNwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IG9wYXF1ZSB0eXBlIFJvb3RUYWcgPSBudW1iZXI7XG5cbmV4cG9ydCBjb25zdCBSb290VGFnQ29udGV4dDogUmVhY3QkQ29udGV4dDxSb290VGFnPiA9XG4gIFJlYWN0LmNyZWF0ZUNvbnRleHQ8Um9vdFRhZz4oMCk7XG5cbmlmIChfX0RFVl9fKSB7XG4gIFJvb3RUYWdDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1Jvb3RUYWdDb250ZXh0Jztcbn1cblxuLyoqXG4gKiBJbnRlbmRlZCB0byBvbmx5IGJlIHVzZWQgYnkgYEFwcENvbnRhaW5lcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb290VGFnKHJvb3RUYWc6IG51bWJlciB8IFJvb3RUYWcpOiBSb290VGFnIHtcbiAgcmV0dXJuIHJvb3RUYWc7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UmVzb2x2ZWRBc3NldFNvdXJjZX0gZnJvbSAnLi9Bc3NldFNvdXJjZVJlc29sdmVyJztcbmltcG9ydCB0eXBlIHtJbWFnZVByb3BzfSBmcm9tICcuL0ltYWdlUHJvcHMnO1xuXG5pbXBvcnQgcmVzb2x2ZUFzc2V0U291cmNlIGZyb20gJy4vcmVzb2x2ZUFzc2V0U291cmNlJztcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBpbWFnZSBzb3VyY2VcbiAqIGJ5IHJlc29sdmluZyB0aGUgYHNvdXJjZWAsIGBzcmNgIGFuZCBgc3JjU2V0YCBwcm9wcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlU291cmNlc0Zyb21JbWFnZVByb3BzKFxuICBpbWFnZVByb3BzOiBJbWFnZVByb3BzLFxuKTogP1Jlc29sdmVkQXNzZXRTb3VyY2UgfCAkUmVhZE9ubHlBcnJheTx7dXJpOiBzdHJpbmcsIC4uLn0+IHtcbiAgbGV0IHNvdXJjZSA9IHJlc29sdmVBc3NldFNvdXJjZShpbWFnZVByb3BzLnNvdXJjZSk7XG5cbiAgbGV0IHNvdXJjZXM7XG5cbiAgY29uc3Qge2Nyb3NzT3JpZ2luLCByZWZlcnJlclBvbGljeSwgc3JjLCBzcmNTZXQsIHdpZHRoLCBoZWlnaHR9ID0gaW1hZ2VQcm9wcztcblxuICBjb25zdCBoZWFkZXJzOiB7W3N0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgaWYgKGNyb3NzT3JpZ2luID09PSAndXNlLWNyZWRlbnRpYWxzJykge1xuICAgIGhlYWRlcnNbJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJ10gPSAndHJ1ZSc7XG4gIH1cbiAgaWYgKHJlZmVycmVyUG9saWN5ICE9IG51bGwpIHtcbiAgICBoZWFkZXJzWydSZWZlcnJlci1Qb2xpY3knXSA9IHJlZmVycmVyUG9saWN5O1xuICB9XG4gIGlmIChzcmNTZXQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHNvdXJjZUxpc3QgPSBbXTtcbiAgICBjb25zdCBzcmNTZXRMaXN0ID0gc3JjU2V0LnNwbGl0KCcsICcpO1xuICAgIC8vIGBzcmNgIHByb3Agc2hvdWxkIGJlIHVzZWQgd2l0aCBkZWZhdWx0IHNjYWxlIGlmIGBzcmNTZXRgIGRvZXMgbm90IGhhdmUgMXggc2NhbGUuXG4gICAgbGV0IHNob3VsZFVzZVNyY0ZvckRlZmF1bHRTY2FsZSA9IHRydWU7XG4gICAgc3JjU2V0TGlzdC5mb3JFYWNoKGltYWdlU3JjID0+IHtcbiAgICAgIGNvbnN0IFt1cmksIHhTY2FsZSA9ICcxeCddID0gaW1hZ2VTcmMuc3BsaXQoJyAnKTtcbiAgICAgIGlmICgheFNjYWxlLmVuZHNXaXRoKCd4JykpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgcHJvdmlkZWQgZm9ybWF0IGZvciBzY2FsZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4gUGxlYXNlIHVzZSBzY2FsZXMgbGlrZSAxeCwgMngsIGV0Yy4nLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSBwYXJzZUludCh4U2NhbGUuc3BsaXQoJ3gnKVswXSwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKHNjYWxlKSkge1xuICAgICAgICAgIC8vIDF4IHNjYWxlIGlzIHByb3ZpZGVkIGluIGBzcmNTZXRgIHByb3Agc28gaWdub3JlIHRoZSBgc3JjYCBwcm9wIGlmIHByb3ZpZGVkLlxuICAgICAgICAgIHNob3VsZFVzZVNyY0ZvckRlZmF1bHRTY2FsZSA9XG4gICAgICAgICAgICBzY2FsZSA9PT0gMSA/IGZhbHNlIDogc2hvdWxkVXNlU3JjRm9yRGVmYXVsdFNjYWxlO1xuICAgICAgICAgIHNvdXJjZUxpc3QucHVzaCh7aGVhZGVyczogaGVhZGVycywgc2NhbGUsIHVyaSwgd2lkdGgsIGhlaWdodH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2hvdWxkVXNlU3JjRm9yRGVmYXVsdFNjYWxlICYmIHNyYyAhPSBudWxsKSB7XG4gICAgICBzb3VyY2VMaXN0LnB1c2goe1xuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgdXJpOiBzcmMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNvdXJjZUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBwcm92aWRlZCB2YWx1ZSBmb3Igc3JjU2V0IGlzIG5vdCB2YWxpZC4nKTtcbiAgICB9XG5cbiAgICBzb3VyY2VzID0gc291cmNlTGlzdDtcbiAgfSBlbHNlIGlmIChzcmMgIT0gbnVsbCkge1xuICAgIHNvdXJjZXMgPSBbe3VyaTogc3JjLCBoZWFkZXJzOiBoZWFkZXJzLCB3aWR0aCwgaGVpZ2h0fV07XG4gIH0gZWxzZSB7XG4gICAgc291cmNlcyA9IHNvdXJjZTtcbiAgfVxuICByZXR1cm4gc291cmNlcztcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG50eXBlIFJlc2l6ZU1vZGUgPSAnY292ZXInIHwgJ2NvbnRhaW4nIHwgJ3N0cmV0Y2gnIHwgJ3JlcGVhdCcgfCAnY2VudGVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPYmplY3RGaXRUb1Jlc2l6ZU1vZGUob2JqZWN0Rml0OiBzdHJpbmcpOiBSZXNpemVNb2RlIHtcbiAgY29uc3Qgb2JqZWN0Rml0TWFwID0ge1xuICAgIGNvbnRhaW46ICdjb250YWluJyxcbiAgICBjb3ZlcjogJ2NvdmVyJyxcbiAgICBmaWxsOiAnc3RyZXRjaCcsXG4gICAgJ3NjYWxlLWRvd24nOiAnY29udGFpbicsXG4gIH07XG4gIHJldHVybiBvYmplY3RGaXRNYXBbb2JqZWN0Rml0XTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFic3RyYWN0SW1hZ2VBbmRyb2lkLFxuICBBYnN0cmFjdEltYWdlSU9TLFxuICBJbWFnZSBhcyBJbWFnZUNvbXBvbmVudCxcbn0gZnJvbSAnLi9JbWFnZVR5cGVzLmZsb3cnO1xuXG5pbXBvcnQgdXNlTWVyZ2VSZWZzIGZyb20gJy4uL1V0aWxpdGllcy91c2VNZXJnZVJlZnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VSZWZ9IGZyb20gJ3JlYWN0JztcblxudHlwZSBJbWFnZUNvbXBvbmVudERlY29yYXRvciA9IChBYnN0cmFjdEltYWdlQW5kcm9pZCA9PiBBYnN0cmFjdEltYWdlQW5kcm9pZCkgJlxuICAoQWJzdHJhY3RJbWFnZUlPUyA9PiBBYnN0cmFjdEltYWdlSU9TKTtcblxubGV0IGluamVjdGVkSW1hZ2VDb21wb25lbnREZWNvcmF0b3I6ID9JbWFnZUNvbXBvbmVudERlY29yYXRvcjtcblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX3NldEltYWdlQ29tcG9uZW50RGVjb3JhdG9yKFxuICBpbWFnZUNvbXBvbmVudERlY29yYXRvcjogP0ltYWdlQ29tcG9uZW50RGVjb3JhdG9yLFxuKTogdm9pZCB7XG4gIGluamVjdGVkSW1hZ2VDb21wb25lbnREZWNvcmF0b3IgPSBpbWFnZUNvbXBvbmVudERlY29yYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2dldEltYWdlQ29tcG9uZW50RGVjb3JhdG9yKCk6ID9JbWFnZUNvbXBvbmVudERlY29yYXRvciB7XG4gIHJldHVybiBpbmplY3RlZEltYWdlQ29tcG9uZW50RGVjb3JhdG9yO1xufVxuXG50eXBlIEltYWdlSW5zdGFuY2UgPSBSZWFjdC5FbGVtZW50UmVmPEltYWdlQ29tcG9uZW50PjtcblxudHlwZSBJbWFnZUF0dGFjaGVkQ2FsbGJhY2sgPSAoXG4gIGltYWdlSW5zdGFuY2U6IEltYWdlSW5zdGFuY2UsXG4pID0+IHZvaWQgfCAoKCkgPT4gdm9pZCk7XG5cbmNvbnN0IGltYWdlQXR0YWNoZWRDYWxsYmFja3MgPSBuZXcgU2V0PEltYWdlQXR0YWNoZWRDYWxsYmFjaz4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX3JlZ2lzdGVySW1hZ2VBdHRhY2hlZENhbGxiYWNrKFxuICBjYWxsYmFjazogSW1hZ2VBdHRhY2hlZENhbGxiYWNrLFxuKTogdm9pZCB7XG4gIGltYWdlQXR0YWNoZWRDYWxsYmFja3MuYWRkKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX3VucmVnaXN0ZXJJbWFnZUF0dGFjaGVkQ2FsbGJhY2soXG4gIGNhbGxiYWNrOiBJbWFnZUF0dGFjaGVkQ2FsbGJhY2ssXG4pOiB2b2lkIHtcbiAgaW1hZ2VBdHRhY2hlZENhbGxiYWNrcy5kZWxldGUoY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlV3JhcFJlZldpdGhJbWFnZUF0dGFjaGVkQ2FsbGJhY2tzKFxuICBmb3J3YXJkZWRSZWY6IFJlYWN0LlJlZlNldHRlcjxJbWFnZUluc3RhbmNlPixcbik6IFJlYWN0LlJlZlNldHRlcjxJbWFnZUluc3RhbmNlPiB7XG4gIGNvbnN0IHBlbmRpbmdDbGVhbnVwQ2FsbGJhY2tzID0gdXNlUmVmPEFycmF5PCgpID0+IHZvaWQ+PihbXSk7XG5cbiAgY29uc3QgaW1hZ2VBdHRhY2hlZENhbGxiYWNrc1JlZiA9XG4gICAgdXNlUmVmPD8obm9kZTogSW1hZ2VJbnN0YW5jZSB8IG51bGwpID0+IHZvaWQ+KG51bGwpO1xuXG4gIGlmIChpbWFnZUF0dGFjaGVkQ2FsbGJhY2tzUmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgIGltYWdlQXR0YWNoZWRDYWxsYmFja3NSZWYuY3VycmVudCA9IChub2RlOiBJbWFnZUluc3RhbmNlIHwgbnVsbCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICBpZiAocGVuZGluZ0NsZWFudXBDYWxsYmFja3MuY3VycmVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVuZGluZ0NsZWFudXBDYWxsYmFja3MuY3VycmVudC5mb3JFYWNoKGNiID0+IGNiKCkpO1xuICAgICAgICAgIHBlbmRpbmdDbGVhbnVwQ2FsbGJhY2tzLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1hZ2VBdHRhY2hlZENhbGxiYWNrcy5mb3JFYWNoKGltYWdlQXR0YWNoZWRDYWxsYmFjayA9PiB7XG4gICAgICAgICAgY29uc3QgbWF5YmVDbGVhbnVwQ2FsbGJhY2sgPSBpbWFnZUF0dGFjaGVkQ2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgaWYgKG1heWJlQ2xlYW51cENhbGxiYWNrICE9IG51bGwpIHtcbiAgICAgICAgICAgIHBlbmRpbmdDbGVhbnVwQ2FsbGJhY2tzLmN1cnJlbnQucHVzaChtYXliZUNsZWFudXBDYWxsYmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gYHVzZU1lcmdlUmVmc2AgcmV0dXJucyBhIHN0YWJsZSByZWYgaWYgaXRzIGFyZ3VtZW50cyBkb24ndCBjaGFuZ2UuXG4gIHJldHVybiB1c2VNZXJnZVJlZnM8SW1hZ2VJbnN0YW5jZT4oXG4gICAgZm9yd2FyZGVkUmVmLFxuICAgIGltYWdlQXR0YWNoZWRDYWxsYmFja3NSZWYuY3VycmVudCxcbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyByZWYgdGhhdCBmb3J3YXJkcyBuZXcgdmFsdWVzIHRvIGVhY2ggb2YgdGhlIGdpdmVuIHJlZnMuIFRoZVxuICogZ2l2ZW4gcmVmcyB3aWxsIGFsd2F5cyBiZSBpbnZva2VkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIHN1cHBsaWVkLlxuICpcbiAqIFdBUk5JTkc6IEEga25vd24gcHJvYmxlbSBvZiBtZXJnaW5nIHJlZnMgdXNpbmcgdGhpcyBhcHByb2FjaCBpcyB0aGF0IGlmIGFueVxuICogb2YgdGhlIGdpdmVuIHJlZnMgY2hhbmdlLCB0aGUgcmV0dXJuZWQgY2FsbGJhY2sgcmVmIHdpbGwgYWxzbyBiZSBjaGFuZ2VkLiBJZlxuICogdGhlIHJldHVybmVkIGNhbGxiYWNrIHJlZiBpcyBzdXBwbGllZCBhcyBhIGByZWZgIHRvIGEgUmVhY3QgZWxlbWVudCwgdGhpcyBtYXlcbiAqIGxlYWQgdG8gcHJvYmxlbXMgd2l0aCB0aGUgZ2l2ZW4gcmVmcyBiZWluZyBpbnZva2VkIG1vcmUgdGltZXMgdGhhbiBkZXNpcmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VNZXJnZVJlZnM8SW5zdGFuY2U+KFxuICAuLi5yZWZzOiAkUmVhZE9ubHlBcnJheTw/UmVhY3QuUmVmU2V0dGVyPEluc3RhbmNlPj5cbik6IChJbnN0YW5jZSB8IG51bGwpID0+IHZvaWQge1xuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKGN1cnJlbnQ6IEluc3RhbmNlIHwgbnVsbCkgPT4ge1xuICAgICAgZm9yIChjb25zdCByZWYgb2YgcmVmcykge1xuICAgICAgICBpZiAocmVmICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVmKGN1cnJlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWYuY3VycmVudCA9IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbLi4ucmVmc10sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1ByZXNzRXZlbnR9IGZyb20gJy4uL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcbmltcG9ydCB0eXBlIHtUZXh0UHJvcHN9IGZyb20gJy4vVGV4dFByb3BzJztcblxuaW1wb3J0ICogYXMgUHJlc3NhYmlsaXR5RGVidWcgZnJvbSAnLi4vUHJlc3NhYmlsaXR5L1ByZXNzYWJpbGl0eURlYnVnJztcbmltcG9ydCB1c2VQcmVzc2FiaWxpdHkgZnJvbSAnLi4vUHJlc3NhYmlsaXR5L3VzZVByZXNzYWJpbGl0eSc7XG5pbXBvcnQgZmxhdHRlblN0eWxlIGZyb20gJy4uL1N0eWxlU2hlZXQvZmxhdHRlblN0eWxlJztcbmltcG9ydCBwcm9jZXNzQ29sb3IgZnJvbSAnLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgVGV4dEFuY2VzdG9yIGZyb20gJy4vVGV4dEFuY2VzdG9yJztcbmltcG9ydCB7TmF0aXZlVGV4dCwgTmF0aXZlVmlydHVhbFRleHR9IGZyb20gJy4vVGV4dE5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogVGV4dCBpcyB0aGUgZnVuZGFtZW50YWwgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIHRleHQuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3RleHRcbiAqL1xuY29uc3QgVGV4dDogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG4gIFRleHRQcm9wcyxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgTmF0aXZlVGV4dCB8IHR5cGVvZiBOYXRpdmVWaXJ0dWFsVGV4dD4sXG4+ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHM6IFRleHRQcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhY2Nlc3NpYmxlLFxuICAgIGFjY2Vzc2liaWxpdHlMYWJlbCxcbiAgICBhY2Nlc3NpYmlsaXR5U3RhdGUsXG4gICAgYWxsb3dGb250U2NhbGluZyxcbiAgICAnYXJpYS1idXN5JzogYXJpYUJ1c3ksXG4gICAgJ2FyaWEtY2hlY2tlZCc6IGFyaWFDaGVja2VkLFxuICAgICdhcmlhLWRpc2FibGVkJzogYXJpYURpc2FibGVkLFxuICAgICdhcmlhLWV4cGFuZGVkJzogYXJpYUV4cGFuZGVkLFxuICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICdhcmlhLXNlbGVjdGVkJzogYXJpYVNlbGVjdGVkLFxuICAgIGVsbGlwc2l6ZU1vZGUsXG4gICAgaWQsXG4gICAgbmF0aXZlSUQsXG4gICAgb25Mb25nUHJlc3MsXG4gICAgb25QcmVzcyxcbiAgICBvblByZXNzSW4sXG4gICAgb25QcmVzc091dCxcbiAgICBvblJlc3BvbmRlckdyYW50LFxuICAgIG9uUmVzcG9uZGVyTW92ZSxcbiAgICBvblJlc3BvbmRlclJlbGVhc2UsXG4gICAgb25SZXNwb25kZXJUZXJtaW5hdGUsXG4gICAgb25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3QsXG4gICAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcixcbiAgICBwcmVzc1JldGVudGlvbk9mZnNldCxcbiAgICBzdXBwcmVzc0hpZ2hsaWdodGluZyxcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtpc0hpZ2hsaWdodGVkLCBzZXRIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgbGV0IF9hY2Nlc3NpYmlsaXR5U3RhdGU7XG4gIGlmIChcbiAgICBhY2Nlc3NpYmlsaXR5U3RhdGUgIT0gbnVsbCB8fFxuICAgIGFyaWFCdXN5ICE9IG51bGwgfHxcbiAgICBhcmlhQ2hlY2tlZCAhPSBudWxsIHx8XG4gICAgYXJpYURpc2FibGVkICE9IG51bGwgfHxcbiAgICBhcmlhRXhwYW5kZWQgIT0gbnVsbCB8fFxuICAgIGFyaWFTZWxlY3RlZCAhPSBudWxsXG4gICkge1xuICAgIF9hY2Nlc3NpYmlsaXR5U3RhdGUgPSB7XG4gICAgICBidXN5OiBhcmlhQnVzeSA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmJ1c3ksXG4gICAgICBjaGVja2VkOiBhcmlhQ2hlY2tlZCA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmNoZWNrZWQsXG4gICAgICBkaXNhYmxlZDogYXJpYURpc2FibGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWQsXG4gICAgICBleHBhbmRlZDogYXJpYUV4cGFuZGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uZXhwYW5kZWQsXG4gICAgICBzZWxlY3RlZDogYXJpYVNlbGVjdGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uc2VsZWN0ZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IF9kaXNhYmxlZCA9XG4gICAgcmVzdFByb3BzLmRpc2FibGVkICE9IG51bGxcbiAgICAgID8gcmVzdFByb3BzLmRpc2FibGVkXG4gICAgICA6IF9hY2Nlc3NpYmlsaXR5U3RhdGU/LmRpc2FibGVkO1xuXG4gIGNvbnN0IG5hdGl2ZVRleHRBY2Nlc3NpYmlsaXR5U3RhdGUgPVxuICAgIF9kaXNhYmxlZCAhPT0gX2FjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWRcbiAgICAgID8gey4uLl9hY2Nlc3NpYmlsaXR5U3RhdGUsIGRpc2FibGVkOiBfZGlzYWJsZWR9XG4gICAgICA6IF9hY2Nlc3NpYmlsaXR5U3RhdGU7XG5cbiAgY29uc3QgaXNQcmVzc2FibGUgPVxuICAgIChvblByZXNzICE9IG51bGwgfHxcbiAgICAgIG9uTG9uZ1ByZXNzICE9IG51bGwgfHxcbiAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXIgIT0gbnVsbCkgJiZcbiAgICBfZGlzYWJsZWQgIT09IHRydWU7XG5cbiAgY29uc3QgaW5pdGlhbGl6ZWQgPSB1c2VMYXp5SW5pdGlhbGl6YXRpb24oaXNQcmVzc2FibGUpO1xuICBjb25zdCBjb25maWcgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBpbml0aWFsaXplZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpc2FibGVkOiAhaXNQcmVzc2FibGUsXG4gICAgICAgICAgICBwcmVzc1JlY3RPZmZzZXQ6IHByZXNzUmV0ZW50aW9uT2Zmc2V0LFxuICAgICAgICAgICAgb25Mb25nUHJlc3MsXG4gICAgICAgICAgICBvblByZXNzLFxuICAgICAgICAgICAgb25QcmVzc0luKGV2ZW50OiBQcmVzc0V2ZW50KSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0aW5nIGlzSGlnaGxpZ2h0ZWQgY2F1c2VzIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHVzZSBpdFxuICAgICAgICAgICAgICAvLyBpbiB0aGUgYmVzdCBjYXNlLCBhbmQgY2F1c2UgaXNzdWVzIHdpdGggdGV4dCBzZWxlY3Rpb24gaW4gdGhlIHdvcnN0IGNhc2UuIEZvcmNpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGlzSGlnaGxpZ2h0ZWQgcHJvcCB0byBmYWxzZSBvbiBhbGwgcGxhdGZvcm1zIGV4Y2VwdCBpT1MuXG4gICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkKFxuICAgICAgICAgICAgICAgIChzdXBwcmVzc0hpZ2hsaWdodGluZyA9PSBudWxsIHx8ICFzdXBwcmVzc0hpZ2hsaWdodGluZykgJiZcbiAgICAgICAgICAgICAgICAgIFBsYXRmb3JtLk9TID09PSAnaW9zJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb25QcmVzc0luPy4oZXZlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUHJlc3NPdXQoZXZlbnQ6IFByZXNzRXZlbnQpIHtcbiAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICBvblByZXNzT3V0Py4oZXZlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0X0RFUFJFQ0FURUQ6XG4gICAgICAgICAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0LFxuICAgICAgICAgICAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcl9ERVBSRUNBVEVEOiBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgIFtcbiAgICAgIGluaXRpYWxpemVkLFxuICAgICAgaXNQcmVzc2FibGUsXG4gICAgICBwcmVzc1JldGVudGlvbk9mZnNldCxcbiAgICAgIG9uTG9uZ1ByZXNzLFxuICAgICAgb25QcmVzcyxcbiAgICAgIG9uUHJlc3NJbixcbiAgICAgIG9uUHJlc3NPdXQsXG4gICAgICBvblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdCxcbiAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXIsXG4gICAgICBzdXBwcmVzc0hpZ2hsaWdodGluZyxcbiAgICBdLFxuICApO1xuXG4gIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSB1c2VQcmVzc2FiaWxpdHkoY29uZmlnKTtcbiAgY29uc3QgZXZlbnRIYW5kbGVyc0ZvclRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBldmVudEhhbmRsZXJzID09IG51bGxcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDoge1xuICAgICAgICAgICAgb25SZXNwb25kZXJHcmFudChldmVudDogUHJlc3NFdmVudCkge1xuICAgICAgICAgICAgICBldmVudEhhbmRsZXJzLm9uUmVzcG9uZGVyR3JhbnQoZXZlbnQpO1xuICAgICAgICAgICAgICBpZiAob25SZXNwb25kZXJHcmFudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb25SZXNwb25kZXJHcmFudChldmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlc3BvbmRlck1vdmUoZXZlbnQ6IFByZXNzRXZlbnQpIHtcbiAgICAgICAgICAgICAgZXZlbnRIYW5kbGVycy5vblJlc3BvbmRlck1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgICBpZiAob25SZXNwb25kZXJNb3ZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvblJlc3BvbmRlck1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SZXNwb25kZXJSZWxlYXNlKGV2ZW50OiBQcmVzc0V2ZW50KSB7XG4gICAgICAgICAgICAgIGV2ZW50SGFuZGxlcnMub25SZXNwb25kZXJSZWxlYXNlKGV2ZW50KTtcbiAgICAgICAgICAgICAgaWYgKG9uUmVzcG9uZGVyUmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb25SZXNwb25kZXJSZWxlYXNlKGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRlKGV2ZW50OiBQcmVzc0V2ZW50KSB7XG4gICAgICAgICAgICAgIGV2ZW50SGFuZGxlcnMub25SZXNwb25kZXJUZXJtaW5hdGUoZXZlbnQpO1xuICAgICAgICAgICAgICBpZiAob25SZXNwb25kZXJUZXJtaW5hdGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRlKGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xpY2s6IGV2ZW50SGFuZGxlcnMub25DbGljayxcbiAgICAgICAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0OlxuICAgICAgICAgICAgICBldmVudEhhbmRsZXJzLm9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0LFxuICAgICAgICAgICAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcjogZXZlbnRIYW5kbGVycy5vblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyLFxuICAgICAgICAgIH0sXG4gICAgW1xuICAgICAgZXZlbnRIYW5kbGVycyxcbiAgICAgIG9uUmVzcG9uZGVyR3JhbnQsXG4gICAgICBvblJlc3BvbmRlck1vdmUsXG4gICAgICBvblJlc3BvbmRlclJlbGVhc2UsXG4gICAgICBvblJlc3BvbmRlclRlcm1pbmF0ZSxcbiAgICBdLFxuICApO1xuXG4gIC8vIFRPRE86IE1vdmUgdGhpcyBwcm9jZXNzaW5nIHRvIHRoZSB2aWV3IGNvbmZpZ3VyYXRpb24uXG4gIGNvbnN0IHNlbGVjdGlvbkNvbG9yID1cbiAgICByZXN0UHJvcHMuc2VsZWN0aW9uQ29sb3IgPT0gbnVsbFxuICAgICAgPyBudWxsXG4gICAgICA6IHByb2Nlc3NDb2xvcihyZXN0UHJvcHMuc2VsZWN0aW9uQ29sb3IpO1xuXG4gIGxldCBzdHlsZSA9IHJlc3RQcm9wcy5zdHlsZTtcblxuICBpZiAoX19ERVZfXykge1xuICAgIGlmIChQcmVzc2FiaWxpdHlEZWJ1Zy5pc0VuYWJsZWQoKSAmJiBvblByZXNzICE9IG51bGwpIHtcbiAgICAgIHN0eWxlID0gW3Jlc3RQcm9wcy5zdHlsZSwge2NvbG9yOiAnbWFnZW50YSd9XTtcbiAgICB9XG4gIH1cblxuICBsZXQgbnVtYmVyT2ZMaW5lcyA9IHJlc3RQcm9wcy5udW1iZXJPZkxpbmVzO1xuICBpZiAobnVtYmVyT2ZMaW5lcyAhPSBudWxsICYmICEobnVtYmVyT2ZMaW5lcyA+PSAwKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgJ251bWJlck9mTGluZXMnIGluIDxUZXh0PiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgcmVjZWl2ZWQ6ICR7bnVtYmVyT2ZMaW5lc30uIFRoZSB2YWx1ZSB3aWxsIGJlIHNldCB0byAwLmAsXG4gICAgKTtcbiAgICBudW1iZXJPZkxpbmVzID0gMDtcbiAgfVxuXG4gIGNvbnN0IGhhc1RleHRBbmNlc3RvciA9IHVzZUNvbnRleHQoVGV4dEFuY2VzdG9yKTtcblxuICBjb25zdCBfYWNjZXNzaWJsZSA9IFBsYXRmb3JtLnNlbGVjdCh7XG4gICAgaW9zOiBhY2Nlc3NpYmxlICE9PSBmYWxzZSxcbiAgICBkZWZhdWx0OiBhY2Nlc3NpYmxlLFxuICB9KTtcblxuICAvLyAkRmxvd0ZpeE1lW3VuZGVyY29uc3RyYWluZWQtaW1wbGljaXQtaW5zdGFudGlhdGlvbl1cbiAgc3R5bGUgPSBmbGF0dGVuU3R5bGUoc3R5bGUpO1xuXG4gIGlmICh0eXBlb2Ygc3R5bGU/LmZvbnRXZWlnaHQgPT09ICdudW1iZXInKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG4gICAgc3R5bGUuZm9udFdlaWdodCA9IHN0eWxlPy5mb250V2VpZ2h0LnRvU3RyaW5nKCk7XG4gIH1cblxuICBsZXQgX3NlbGVjdGFibGUgPSByZXN0UHJvcHMuc2VsZWN0YWJsZTtcbiAgaWYgKHN0eWxlPy51c2VyU2VsZWN0ICE9IG51bGwpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2ludmFsaWQtY29tcHV0ZWQtcHJvcF1cbiAgICBfc2VsZWN0YWJsZSA9IHVzZXJTZWxlY3RUb1NlbGVjdGFibGVNYXBbc3R5bGUudXNlclNlbGVjdF07XG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG4gICAgZGVsZXRlIHN0eWxlLnVzZXJTZWxlY3Q7XG4gIH1cblxuICBpZiAoc3R5bGU/LnZlcnRpY2FsQWxpZ24gIT0gbnVsbCkge1xuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgIHN0eWxlLnRleHRBbGlnblZlcnRpY2FsID1cbiAgICAgIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb21wdXRlZC1wcm9wXVxuICAgICAgdmVydGljYWxBbGlnblRvVGV4dEFsaWduVmVydGljYWxNYXBbc3R5bGUudmVydGljYWxBbGlnbl07XG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG4gICAgZGVsZXRlIHN0eWxlLnZlcnRpY2FsQWxpZ247XG4gIH1cblxuICBjb25zdCBfaGFzT25QcmVzc09yT25Mb25nUHJlc3MgPVxuICAgIHByb3BzLm9uUHJlc3MgIT0gbnVsbCB8fCBwcm9wcy5vbkxvbmdQcmVzcyAhPSBudWxsO1xuXG4gIHJldHVybiBoYXNUZXh0QW5jZXN0b3IgPyAoXG4gICAgPE5hdGl2ZVZpcnR1YWxUZXh0XG4gICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgey4uLmV2ZW50SGFuZGxlcnNGb3JUZXh0fVxuICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPXthcmlhTGFiZWwgPz8gYWNjZXNzaWJpbGl0eUxhYmVsfVxuICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXtfYWNjZXNzaWJpbGl0eVN0YXRlfVxuICAgICAgaXNIaWdobGlnaHRlZD17aXNIaWdobGlnaHRlZH1cbiAgICAgIGlzUHJlc3NhYmxlPXtpc1ByZXNzYWJsZX1cbiAgICAgIG5hdGl2ZUlEPXtpZCA/PyBuYXRpdmVJRH1cbiAgICAgIG51bWJlck9mTGluZXM9e251bWJlck9mTGluZXN9XG4gICAgICByZWY9e2ZvcndhcmRlZFJlZn1cbiAgICAgIHNlbGVjdGFibGU9e19zZWxlY3RhYmxlfVxuICAgICAgc2VsZWN0aW9uQ29sb3I9e3NlbGVjdGlvbkNvbG9yfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgIC8+XG4gICkgOiAoXG4gICAgPFRleHRBbmNlc3Rvci5Qcm92aWRlciB2YWx1ZT17dHJ1ZX0+XG4gICAgICA8TmF0aXZlVGV4dFxuICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICB7Li4uZXZlbnRIYW5kbGVyc0ZvclRleHR9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17YXJpYUxhYmVsID8/IGFjY2Vzc2liaWxpdHlMYWJlbH1cbiAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXtuYXRpdmVUZXh0QWNjZXNzaWJpbGl0eVN0YXRlfVxuICAgICAgICBhY2Nlc3NpYmxlPXtcbiAgICAgICAgICBhY2Nlc3NpYmxlID09IG51bGwgJiYgUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJ1xuICAgICAgICAgICAgPyBfaGFzT25QcmVzc09yT25Mb25nUHJlc3NcbiAgICAgICAgICAgIDogX2FjY2Vzc2libGVcbiAgICAgICAgfVxuICAgICAgICBhbGxvd0ZvbnRTY2FsaW5nPXthbGxvd0ZvbnRTY2FsaW5nICE9PSBmYWxzZX1cbiAgICAgICAgZGlzYWJsZWQ9e19kaXNhYmxlZH1cbiAgICAgICAgZWxsaXBzaXplTW9kZT17ZWxsaXBzaXplTW9kZSA/PyAndGFpbCd9XG4gICAgICAgIGlzSGlnaGxpZ2h0ZWQ9e2lzSGlnaGxpZ2h0ZWR9XG4gICAgICAgIG5hdGl2ZUlEPXtpZCA/PyBuYXRpdmVJRH1cbiAgICAgICAgbnVtYmVyT2ZMaW5lcz17bnVtYmVyT2ZMaW5lc31cbiAgICAgICAgcmVmPXtmb3J3YXJkZWRSZWZ9XG4gICAgICAgIHNlbGVjdGFibGU9e19zZWxlY3RhYmxlfVxuICAgICAgICBzZWxlY3Rpb25Db2xvcj17c2VsZWN0aW9uQ29sb3J9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgIC8+XG4gICAgPC9UZXh0QW5jZXN0b3IuUHJvdmlkZXI+XG4gICk7XG59KTtcblxuVGV4dC5kaXNwbGF5TmFtZSA9ICdUZXh0JztcblxuLyoqXG4gKiBSZXR1cm5zIGZhbHNlIHVudGlsIHRoZSBmaXJzdCB0aW1lIGBuZXdWYWx1ZWAgaXMgdHJ1ZSwgYWZ0ZXIgd2hpY2ggdGhpcyB3aWxsXG4gKiBhbHdheXMgcmV0dXJuIHRydWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGxhemlseSBpbml0aWFsaXplIGBQcmVzc2FiaWxpdHlgIHNvXG4gKiB3ZSBkbyBub3QgZWFnZXJseSBjcmVhdGUgb25lIGZvciBldmVyeSBwcmVzc2FibGUgYFRleHRgIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gdXNlTGF6eUluaXRpYWxpemF0aW9uKG5ld1ZhbHVlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IFtvbGRWYWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUobmV3VmFsdWUpO1xuICBpZiAoIW9sZFZhbHVlICYmIG5ld1ZhbHVlKSB7XG4gICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICB9XG4gIHJldHVybiBvbGRWYWx1ZTtcbn1cblxuY29uc3QgdXNlclNlbGVjdFRvU2VsZWN0YWJsZU1hcCA9IHtcbiAgYXV0bzogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgbm9uZTogZmFsc2UsXG4gIGNvbnRhaW46IHRydWUsXG4gIGFsbDogdHJ1ZSxcbn07XG5cbmNvbnN0IHZlcnRpY2FsQWxpZ25Ub1RleHRBbGlnblZlcnRpY2FsTWFwID0ge1xuICBhdXRvOiAnYXV0bycsXG4gIHRvcDogJ3RvcCcsXG4gIGJvdHRvbTogJ2JvdHRvbScsXG4gIG1pZGRsZTogJ2NlbnRlcicsXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCBWaWV3IGZyb20gJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCBub3JtYWxpemVDb2xvciBmcm9tICcuLi9TdHlsZVNoZWV0L25vcm1hbGl6ZUNvbG9yJztcbmltcG9ydCB7dHlwZSBSZWN0T3JTaXplLCBub3JtYWxpemVSZWN0fSBmcm9tICcuLi9TdHlsZVNoZWV0L1JlY3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIGNvbG9yOiBDb2xvclZhbHVlLFxuICBoaXRTbG9wOiA/UmVjdE9yU2l6ZSxcbnx9PjtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGRlYnVnIG92ZXJsYXkgdG8gdmlzdWFsaXplIHByZXNzIHRhcmdldHMgd2hlbiBlbmFibGVkIHZpYSB0aGVcbiAqIFJlYWN0IE5hdGl2ZSBJbnNwZWN0b3IuIENhbGxzIHRvIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBndWFyZGVkIGJ5IGBfX0RFVl9fYCxcbiAqIGZvciBleGFtcGxlOlxuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Vmlldz5cbiAqICAgICAgIHtjaGlsZHJlbn1cbiAqICAgICAgIHtfX0RFVl9fID8gKFxuICogICAgICAgICA8UHJlc3NhYmlsaXR5RGVidWdWaWV3IGNvbG9yPVwiLi4uXCIgaGl0U2xvcD17cHJvcHMuaGl0U2xvcH0gLz5cbiAqICAgICAgICkgOiBudWxsfVxuICogICAgIDwvVmlldz5cbiAqICAgKTtcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcmVzc2FiaWxpdHlEZWJ1Z1ZpZXcocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaWYgKGlzRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQ29sb3IgPSBub3JtYWxpemVDb2xvcihwcm9wcy5jb2xvcik7XG4gICAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb2xvciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlQ29sb3IgPVxuICAgICAgICAnIycgKyAobm9ybWFsaXplZENvbG9yID8/IDApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCAnMCcpO1xuICAgICAgY29uc3QgaGl0U2xvcCA9IG5vcm1hbGl6ZVJlY3QocHJvcHMuaGl0U2xvcCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJub25lXCJcbiAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtbmF0aXZlL25vLWlubGluZS1zdHlsZXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBiYXNlQ29sb3Iuc2xpY2UoMCwgLTIpICsgJzBGJywgLy8gMTUlXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBiYXNlQ29sb3Iuc2xpY2UoMCwgLTIpICsgJzU1JywgLy8gODUlXG4gICAgICAgICAgICAgIGJvcmRlclN0eWxlOiAnZGFzaGVkJyxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGJvdHRvbTogLShoaXRTbG9wPy5ib3R0b20gPz8gMCksXG4gICAgICAgICAgICAgIGxlZnQ6IC0oaGl0U2xvcD8ubGVmdCA/PyAwKSxcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIHJpZ2h0OiAtKGhpdFNsb3A/LnJpZ2h0ID8/IDApLFxuICAgICAgICAgICAgICB0b3A6IC0oaGl0U2xvcD8udG9wID8/IDApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5sZXQgaXNEZWJ1Z0VuYWJsZWQgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICByZXR1cm4gaXNEZWJ1Z0VuYWJsZWQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICBpZiAoX19ERVZfXykge1xuICAgIGlzRGVidWdFbmFibGVkID0gdmFsdWU7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5leHBvcnQgdHlwZSBSZWN0ID0gJFJlYWRPbmx5PHt8XG4gIGJvdHRvbT86ID9udW1iZXIsXG4gIGxlZnQ/OiA/bnVtYmVyLFxuICByaWdodD86ID9udW1iZXIsXG4gIHRvcD86ID9udW1iZXIsXG58fT47XG5cbmV4cG9ydCB0eXBlIFJlY3RPclNpemUgPSBSZWN0IHwgbnVtYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3F1YXJlKHNpemU6IG51bWJlcik6IFJlY3Qge1xuICByZXR1cm4ge2JvdHRvbTogc2l6ZSwgbGVmdDogc2l6ZSwgcmlnaHQ6IHNpemUsIHRvcDogc2l6ZX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZWN0KHJlY3RPclNpemU6ID9SZWN0T3JTaXplKTogP1JlY3Qge1xuICByZXR1cm4gdHlwZW9mIHJlY3RPclNpemUgPT09ICdudW1iZXInID8gY3JlYXRlU3F1YXJlKHJlY3RPclNpemUpIDogcmVjdE9yU2l6ZTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgUHJlc3NhYmlsaXR5LCB7XG4gIHR5cGUgRXZlbnRIYW5kbGVycyxcbiAgdHlwZSBQcmVzc2FiaWxpdHlDb25maWcsXG59IGZyb20gJy4vUHJlc3NhYmlsaXR5JztcbmltcG9ydCB7dXNlRWZmZWN0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgcGVyc2lzdGVudCBpbnN0YW5jZSBvZiBgUHJlc3NhYmlsaXR5YCB0aGF0IGF1dG9tYXRpY2FsbHkgY29uZmlndXJlc1xuICogaXRzZWxmIGFuZCByZXNldHMuIEFjY2VwdHMgbnVsbCBgY29uZmlnYCB0byBzdXBwb3J0IGxhenkgaW5pdGlhbGl6YXRpb24uIE9uY2VcbiAqIGluaXRpYWxpemVkLCB3aWxsIG5vdCB1bi1pbml0aWFsaXplIHVudGlsIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdW5tb3VudGVkLlxuICpcbiAqIEluIG9yZGVyIHRvIHVzZSBgdXNlUHJlc3NhYmlsaXR5YCwgZG8gdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgIGNvbnN0IGNvbmZpZyA9IHVzZU1lbW8oLi4uKTtcbiAqICAgY29uc3QgZXZlbnRIYW5kbGVycyA9IHVzZVByZXNzYWJpbGl0eShjb25maWcpO1xuICogICBjb25zdCBwcmVzc2FibGVWaWV3ID0gPFZpZXcgey4uLmV2ZW50SGFuZGxlcnN9IC8+O1xuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJlc3NhYmlsaXR5KFxuICBjb25maWc6ID9QcmVzc2FiaWxpdHlDb25maWcsXG4pOiA/RXZlbnRIYW5kbGVycyB7XG4gIGNvbnN0IHByZXNzYWJpbGl0eVJlZiA9IHVzZVJlZjw/UHJlc3NhYmlsaXR5PihudWxsKTtcbiAgaWYgKGNvbmZpZyAhPSBudWxsICYmIHByZXNzYWJpbGl0eVJlZi5jdXJyZW50ID09IG51bGwpIHtcbiAgICBwcmVzc2FiaWxpdHlSZWYuY3VycmVudCA9IG5ldyBQcmVzc2FiaWxpdHkoY29uZmlnKTtcbiAgfVxuICBjb25zdCBwcmVzc2FiaWxpdHkgPSBwcmVzc2FiaWxpdHlSZWYuY3VycmVudDtcblxuICAvLyBPbiB0aGUgaW5pdGlhbCBtb3VudCwgdGhpcyBpcyBhIG5vLW9wLiBPbiB1cGRhdGVzLCBgcHJlc3NhYmlsaXR5YCB3aWxsIGJlXG4gIC8vIHJlLWNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBuZXcgY29uZmlndXJhdGlvbi5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgcHJlc3NhYmlsaXR5ICE9IG51bGwpIHtcbiAgICAgIHByZXNzYWJpbGl0eS5jb25maWd1cmUoY29uZmlnKTtcbiAgICB9XG4gIH0sIFtjb25maWcsIHByZXNzYWJpbGl0eV0pO1xuXG4gIC8vIE9uIHVubW91bnQsIHJlc2V0IHBlbmRpbmcgc3RhdGUgYW5kIHRpbWVycyBpbnNpZGUgYHByZXNzYWJpbGl0eWAuIFRoaXMgaXNcbiAgLy8gYSBzZXBhcmF0ZSBlZmZlY3QgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byByZXNldCB3aGVuIGBjb25maWdgIGNoYW5nZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZXNzYWJpbGl0eSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBwcmVzc2FiaWxpdHkucmVzZXQoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbcHJlc3NhYmlsaXR5XSk7XG5cbiAgcmV0dXJuIHByZXNzYWJpbGl0eSA9PSBudWxsID8gbnVsbCA6IHByZXNzYWJpbGl0eS5nZXRFdmVudEhhbmRsZXJzKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBCbHVyRXZlbnQsXG4gIEZvY3VzRXZlbnQsXG4gIE1vdXNlRXZlbnQsXG4gIFByZXNzRXZlbnQsXG59IGZyb20gJy4uL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IFNvdW5kTWFuYWdlciBmcm9tICcuLi9Db21wb25lbnRzL1NvdW5kL1NvdW5kTWFuYWdlcic7XG5pbXBvcnQgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MgZnJvbSAnLi4vUmVhY3ROYXRpdmUvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MnO1xuaW1wb3J0IFVJTWFuYWdlciBmcm9tICcuLi9SZWFjdE5hdGl2ZS9VSU1hbmFnZXInO1xuaW1wb3J0IHt0eXBlIFJlY3RPclNpemUsIG5vcm1hbGl6ZVJlY3R9IGZyb20gJy4uL1N0eWxlU2hlZXQvUmVjdCc7XG5pbXBvcnQge3R5cGUgUG9pbnRlckV2ZW50fSBmcm9tICcuLi9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCB7aXNIb3ZlckVuYWJsZWR9IGZyb20gJy4vSG92ZXJTdGF0ZSc7XG5pbXBvcnQgUHJlc3NhYmlsaXR5UGVyZm9ybWFuY2VFdmVudEVtaXR0ZXIgZnJvbSAnLi9QcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlci5qcyc7XG5pbXBvcnQge3R5cGUgUHJlc3NhYmlsaXR5VG91Y2hTaWduYWwgYXMgVG91Y2hTaWduYWx9IGZyb20gJy4vUHJlc3NhYmlsaXR5VHlwZXMuanMnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgdHlwZSBQcmVzc2FiaWxpdHlDb25maWcgPSAkUmVhZE9ubHk8e3xcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBwcmVzcyBnZXN0dXJlIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSBhIHBhcmVudCBnZXN0dXJlIHN1Y2ggYXMgYVxuICAgKiBzY3JvbGwgZXZlbnQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBjYW5jZWxhYmxlPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcHJlc3MgZ2VzdHVyZS5cbiAgICovXG4gIGRpc2FibGVkPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIEFtb3VudCB0byBleHRlbmQgdGhlIGBWaXN1YWxSZWN0YCBieSB0byBjcmVhdGUgYEhpdFJlY3RgLlxuICAgKi9cbiAgaGl0U2xvcD86ID9SZWN0T3JTaXplLFxuXG4gIC8qKlxuICAgKiBBbW91bnQgdG8gZXh0ZW5kIHRoZSBgSGl0UmVjdGAgYnkgdG8gY3JlYXRlIGBQcmVzc1JlY3RgLlxuICAgKi9cbiAgcHJlc3NSZWN0T2Zmc2V0PzogP1JlY3RPclNpemUsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgc3lzdGVtbSBzb3VuZCB3aGVuIGBvblByZXNzYCBmaXJlcyBvbiBBbmRyb2lkLlxuICAgKiovXG4gIGFuZHJvaWRfZGlzYWJsZVNvdW5kPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIER1cmF0aW9uIHRvIHdhaXQgYWZ0ZXIgaG92ZXIgaW4gYmVmb3JlIGNhbGxpbmcgYG9uSG92ZXJJbmAuXG4gICAqL1xuICBkZWxheUhvdmVySW4/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBEdXJhdGlvbiB0byB3YWl0IGFmdGVyIGhvdmVyIG91dCBiZWZvcmUgY2FsbGluZyBgb25Ib3Zlck91dGAuXG4gICAqL1xuICBkZWxheUhvdmVyT3V0PzogP251bWJlcixcblxuICAvKipcbiAgICogRHVyYXRpb24gKGluIGFkZGl0aW9uIHRvIGBkZWxheVByZXNzSW5gKSBhZnRlciB3aGljaCBhIHByZXNzIGdlc3R1cmUgaXNcbiAgICogY29uc2lkZXJlZCBhIGxvbmcgcHJlc3MgZ2VzdHVyZS4gRGVmYXVsdHMgdG8gNTAwIChtaWxsaXNlY29uZHMpLlxuICAgKi9cbiAgZGVsYXlMb25nUHJlc3M/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBEdXJhdGlvbiB0byB3YWl0IGFmdGVyIHByZXNzIGRvd24gYmVmb3JlIGNhbGxpbmcgYG9uUHJlc3NJbmAuXG4gICAqL1xuICBkZWxheVByZXNzSW4/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBEdXJhdGlvbiB0byB3YWl0IGFmdGVyIGxldHRpbmcgdXAgYmVmb3JlIGNhbGxpbmcgYG9uUHJlc3NPdXRgLlxuICAgKi9cbiAgZGVsYXlQcmVzc091dD86ID9udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZHVyYXRpb24gdG8gd2FpdCBiZXR3ZWVuIGNhbGxpbmcgYG9uUHJlc3NJbmAgYW5kIGBvblByZXNzT3V0YC5cbiAgICovXG4gIG1pblByZXNzRHVyYXRpb24/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgbG9zZXMgZm9jdXMuXG4gICAqL1xuICBvbkJsdXI/OiA/KGV2ZW50OiBCbHVyRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgaXMgZm9jdXNlZC5cbiAgICovXG4gIG9uRm9jdXM/OiA/KGV2ZW50OiBGb2N1c0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGhvdmVyIGlzIGFjdGl2YXRlZCB0byBwcm92aWRlIHZpc3VhbCBmZWVkYmFjay5cbiAgICovXG4gIG9uSG92ZXJJbj86ID8oZXZlbnQ6IE1vdXNlRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgaG92ZXIgaXMgZGVhY3RpdmF0ZWQgdG8gdW5kbyB2aXN1YWwgZmVlZGJhY2suXG4gICAqL1xuICBvbkhvdmVyT3V0PzogPyhldmVudDogTW91c2VFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgbG9uZyBwcmVzcyBnZXN0dXJlIGhhcyBiZWVuIHRyaWdnZXJlZC5cbiAgICovXG4gIG9uTG9uZ1ByZXNzPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgcHJlc3MgZ2VzdHVyZSBoYXMgYmVlbiB0cmlnZ2VyZWQuXG4gICAqL1xuICBvblByZXNzPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwcmVzcyBpcyBhY3RpdmF0ZWQgdG8gcHJvdmlkZSB2aXN1YWwgZmVlZGJhY2suXG4gICAqL1xuICBvblByZXNzSW4/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHByZXNzIGxvY2F0aW9uIG1vdmVzLiAoVGhpcyBzaG91bGQgcmFyZWx5IGJlIHVzZWQuKVxuICAgKi9cbiAgb25QcmVzc01vdmU/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHByZXNzIGlzIGRlYWN0aXZhdGVkIHRvIHVuZG8gdmlzdWFsIGZlZWRiYWNrLlxuICAgKi9cbiAgb25QcmVzc091dD86ID8oZXZlbnQ6IFByZXNzRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZXZlbnQgYW55IG90aGVyIG5hdGl2ZSBjb21wb25lbnRzIGZyb20gYmVjb21pbmcgcmVzcG9uZGVyXG4gICAqIHdoaWxlIHRoaXMgcHJlc3NhYmxlIGlzIHJlc3BvbmRlci5cbiAgICovXG4gIGJsb2NrTmF0aXZlUmVzcG9uZGVyPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBhIGxvbmcgcHJlc3MgZ2VzdHVyZSBzaG91bGQgY2FuY2VsIHRoZSBwcmVzcyBnZXN0dXJlLlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgb25Mb25nUHJlc3NTaG91bGRDYW5jZWxQcmVzc19ERVBSRUNBVEVEPzogPygpID0+IGJvb2xlYW4sXG5cbiAgLyoqXG4gICAqIElmIGBjYW5jZWxhYmxlYCBpcyBzZXQsIHRoaXMgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdG8geWllbGQgdG8gYSBsb2NrIHRlcm1pbmF0aW9uIHJlcXVlc3QgKGUuZy4gaWYgYSBuYXRpdmVcbiAgICogc2Nyb2xsIGdlc3R1cmUgYXR0ZW1wdHMgdG8gc3RlYWwgdGhlIHJlc3BvbmRlciBsb2NrKS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0X0RFUFJFQ0FURUQ/OiA/KCkgPT4gYm9vbGVhbixcblxuICAvKipcbiAgICogSWYgYGRpc2FibGVkYCBpcyBzZXQsIHRoaXMgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdG8gc3RhcnQgYSBwcmVzcyBnZXN0dXJlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcl9ERVBSRUNBVEVEPzogPygpID0+IGJvb2xlYW4sXG58fT47XG5cbmV4cG9ydCB0eXBlIEV2ZW50SGFuZGxlcnMgPSAkUmVhZE9ubHk8e3xcbiAgb25CbHVyOiAoZXZlbnQ6IEJsdXJFdmVudCkgPT4gdm9pZCxcbiAgb25DbGljazogKGV2ZW50OiBQcmVzc0V2ZW50KSA9PiB2b2lkLFxuICBvbkZvY3VzOiAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHZvaWQsXG4gIG9uTW91c2VFbnRlcj86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZCxcbiAgb25Nb3VzZUxlYXZlPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkLFxuICBvblBvaW50ZXJFbnRlcj86IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICBvblBvaW50ZXJMZWF2ZT86IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICBvblJlc3BvbmRlckdyYW50OiAoZXZlbnQ6IFByZXNzRXZlbnQpID0+IHZvaWQgfCBib29sZWFuLFxuICBvblJlc3BvbmRlck1vdmU6IChldmVudDogUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgb25SZXNwb25kZXJSZWxlYXNlOiAoZXZlbnQ6IFByZXNzRXZlbnQpID0+IHZvaWQsXG4gIG9uUmVzcG9uZGVyVGVybWluYXRlOiAoZXZlbnQ6IFByZXNzRXZlbnQpID0+IHZvaWQsXG4gIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0OiAoKSA9PiBib29sZWFuLFxuICBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyOiAoKSA9PiBib29sZWFuLFxufH0+O1xuXG50eXBlIFRvdWNoU3RhdGUgPVxuICB8ICdOT1RfUkVTUE9OREVSJ1xuICB8ICdSRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfSU4nXG4gIHwgJ1JFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19PVVQnXG4gIHwgJ1JFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU4nXG4gIHwgJ1JFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfT1VUJ1xuICB8ICdSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU4nXG4gIHwgJ1JFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19PVVQnXG4gIHwgJ0VSUk9SJztcblxuY29uc3QgVHJhbnNpdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX1JFU1BPTkRFUjoge1xuICAgIERFTEFZOiAnRVJST1InLFxuICAgIFJFU1BPTkRFUl9HUkFOVDogJ1JFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTicsXG4gICAgUkVTUE9OREVSX1JFTEVBU0U6ICdFUlJPUicsXG4gICAgUkVTUE9OREVSX1RFUk1JTkFURUQ6ICdFUlJPUicsXG4gICAgRU5URVJfUFJFU1NfUkVDVDogJ0VSUk9SJyxcbiAgICBMRUFWRV9QUkVTU19SRUNUOiAnRVJST1InLFxuICAgIExPTkdfUFJFU1NfREVURUNURUQ6ICdFUlJPUicsXG4gIH0sXG4gIFJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTjoge1xuICAgIERFTEFZOiAnUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTicsXG4gICAgUkVTUE9OREVSX0dSQU5UOiAnRVJST1InLFxuICAgIFJFU1BPTkRFUl9SRUxFQVNFOiAnTk9UX1JFU1BPTkRFUicsXG4gICAgUkVTUE9OREVSX1RFUk1JTkFURUQ6ICdOT1RfUkVTUE9OREVSJyxcbiAgICBFTlRFUl9QUkVTU19SRUNUOiAnUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX0lOJyxcbiAgICBMRUFWRV9QUkVTU19SRUNUOiAnUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX09VVCcsXG4gICAgTE9OR19QUkVTU19ERVRFQ1RFRDogJ0VSUk9SJyxcbiAgfSxcbiAgUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX09VVDoge1xuICAgIERFTEFZOiAnUkVTUE9OREVSX0FDVElWRV9QUkVTU19PVVQnLFxuICAgIFJFU1BPTkRFUl9HUkFOVDogJ0VSUk9SJyxcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogJ05PVF9SRVNQT05ERVInLFxuICAgIFJFU1BPTkRFUl9URVJNSU5BVEVEOiAnTk9UX1JFU1BPTkRFUicsXG4gICAgRU5URVJfUFJFU1NfUkVDVDogJ1JFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTicsXG4gICAgTEVBVkVfUFJFU1NfUkVDVDogJ1JFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19PVVQnLFxuICAgIExPTkdfUFJFU1NfREVURUNURUQ6ICdFUlJPUicsXG4gIH0sXG4gIFJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU46IHtcbiAgICBERUxBWTogJ0VSUk9SJyxcbiAgICBSRVNQT05ERVJfR1JBTlQ6ICdFUlJPUicsXG4gICAgUkVTUE9OREVSX1JFTEVBU0U6ICdOT1RfUkVTUE9OREVSJyxcbiAgICBSRVNQT05ERVJfVEVSTUlOQVRFRDogJ05PVF9SRVNQT05ERVInLFxuICAgIEVOVEVSX1BSRVNTX1JFQ1Q6ICdSRVNQT05ERVJfQUNUSVZFX1BSRVNTX0lOJyxcbiAgICBMRUFWRV9QUkVTU19SRUNUOiAnUkVTUE9OREVSX0FDVElWRV9QUkVTU19PVVQnLFxuICAgIExPTkdfUFJFU1NfREVURUNURUQ6ICdSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU4nLFxuICB9LFxuICBSRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVDoge1xuICAgIERFTEFZOiAnRVJST1InLFxuICAgIFJFU1BPTkRFUl9HUkFOVDogJ0VSUk9SJyxcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogJ05PVF9SRVNQT05ERVInLFxuICAgIFJFU1BPTkRFUl9URVJNSU5BVEVEOiAnTk9UX1JFU1BPTkRFUicsXG4gICAgRU5URVJfUFJFU1NfUkVDVDogJ1JFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU4nLFxuICAgIExFQVZFX1BSRVNTX1JFQ1Q6ICdSRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVCcsXG4gICAgTE9OR19QUkVTU19ERVRFQ1RFRDogJ0VSUk9SJyxcbiAgfSxcbiAgUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOOiB7XG4gICAgREVMQVk6ICdFUlJPUicsXG4gICAgUkVTUE9OREVSX0dSQU5UOiAnRVJST1InLFxuICAgIFJFU1BPTkRFUl9SRUxFQVNFOiAnTk9UX1JFU1BPTkRFUicsXG4gICAgUkVTUE9OREVSX1RFUk1JTkFURUQ6ICdOT1RfUkVTUE9OREVSJyxcbiAgICBFTlRFUl9QUkVTU19SRUNUOiAnUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOJyxcbiAgICBMRUFWRV9QUkVTU19SRUNUOiAnUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX09VVCcsXG4gICAgTE9OR19QUkVTU19ERVRFQ1RFRDogJ1JFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19JTicsXG4gIH0sXG4gIFJFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19PVVQ6IHtcbiAgICBERUxBWTogJ0VSUk9SJyxcbiAgICBSRVNQT05ERVJfR1JBTlQ6ICdFUlJPUicsXG4gICAgUkVTUE9OREVSX1JFTEVBU0U6ICdOT1RfUkVTUE9OREVSJyxcbiAgICBSRVNQT05ERVJfVEVSTUlOQVRFRDogJ05PVF9SRVNQT05ERVInLFxuICAgIEVOVEVSX1BSRVNTX1JFQ1Q6ICdSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU4nLFxuICAgIExFQVZFX1BSRVNTX1JFQ1Q6ICdSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfT1VUJyxcbiAgICBMT05HX1BSRVNTX0RFVEVDVEVEOiAnRVJST1InLFxuICB9LFxuICBFUlJPUjoge1xuICAgIERFTEFZOiAnTk9UX1JFU1BPTkRFUicsXG4gICAgUkVTUE9OREVSX0dSQU5UOiAnUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX0lOJyxcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogJ05PVF9SRVNQT05ERVInLFxuICAgIFJFU1BPTkRFUl9URVJNSU5BVEVEOiAnTk9UX1JFU1BPTkRFUicsXG4gICAgRU5URVJfUFJFU1NfUkVDVDogJ05PVF9SRVNQT05ERVInLFxuICAgIExFQVZFX1BSRVNTX1JFQ1Q6ICdOT1RfUkVTUE9OREVSJyxcbiAgICBMT05HX1BSRVNTX0RFVEVDVEVEOiAnTk9UX1JFU1BPTkRFUicsXG4gIH0sXG59KTtcblxuY29uc3QgaXNBY3RpdmVTaWduYWwgPSAoc2lnbmFsOiBUb3VjaFN0YXRlKSA9PlxuICBzaWduYWwgPT09ICdSRVNQT05ERVJfQUNUSVZFX1BSRVNTX0lOJyB8fFxuICBzaWduYWwgPT09ICdSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU4nO1xuXG5jb25zdCBpc0FjdGl2YXRpb25TaWduYWwgPSAoc2lnbmFsOiBUb3VjaFN0YXRlKSA9PlxuICBzaWduYWwgPT09ICdSRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVCcgfHxcbiAgc2lnbmFsID09PSAnUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTic7XG5cbmNvbnN0IGlzUHJlc3NJblNpZ25hbCA9IChzaWduYWw6IFRvdWNoU3RhdGUpID0+XG4gIHNpZ25hbCA9PT0gJ1JFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTicgfHxcbiAgc2lnbmFsID09PSAnUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTicgfHxcbiAgc2lnbmFsID09PSAnUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOJztcblxuY29uc3QgaXNUZXJtaW5hbFNpZ25hbCA9IChzaWduYWw6IFRvdWNoU2lnbmFsKSA9PlxuICBzaWduYWwgPT09ICdSRVNQT05ERVJfVEVSTUlOQVRFRCcgfHwgc2lnbmFsID09PSAnUkVTUE9OREVSX1JFTEVBU0UnO1xuXG5jb25zdCBERUZBVUxUX0xPTkdfUFJFU1NfREVMQVlfTVMgPSA1MDA7XG5jb25zdCBERUZBVUxUX1BSRVNTX1JFQ1RfT0ZGU0VUUyA9IHtcbiAgYm90dG9tOiAzMCxcbiAgbGVmdDogMjAsXG4gIHJpZ2h0OiAyMCxcbiAgdG9wOiAyMCxcbn07XG5jb25zdCBERUZBVUxUX01JTl9QUkVTU19EVVJBVElPTiA9IDEzMDtcblxuY29uc3QgREVGQVVMVF9MT05HX1BSRVNTX0RFQUNUSVZBVElPTl9ESVNUQU5DRSA9IDEwO1xubGV0IGxvbmdQcmVzc0RlYWN0aXZhdGlvbkRpc3RhbmNlID0gREVGQVVMVF9MT05HX1BSRVNTX0RFQUNUSVZBVElPTl9ESVNUQU5DRTtcblxuLyoqXG4gKiBQcmVzc2FiaWxpdHkgaW1wbGVtZW50cyBwcmVzcyBoYW5kbGluZyBjYXBhYmlsaXRpZXMuXG4gKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09IFByZXNzYWJpbGl0eSBUdXRvcmlhbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiBUaGUgYFByZXNzYWJpbGl0eWAgY2xhc3MgaGVscHMgeW91IGNyZWF0ZSBwcmVzcyBpbnRlcmFjdGlvbnMgYnkgYW5hbHl6aW5nIHRoZVxuICogZ2VvbWV0cnkgb2YgZWxlbWVudHMgYW5kIG9ic2VydmluZyB3aGVuIGFub3RoZXIgcmVzcG9uZGVyIChlLmcuIFNjcm9sbFZpZXcpXG4gKiBoYXMgc3RvbGVuIHRoZSB0b3VjaCBsb2NrLiBJdCBvZmZlcnMgaG9va3MgZm9yIHlvdXIgY29tcG9uZW50IHRvIHByb3ZpZGVcbiAqIGludGVyYWN0aW9uIGZlZWRiYWNrIHRvIHRoZSB1c2VyOlxuICpcbiAqIC0gV2hlbiBhIHByZXNzIGhhcyBhY3RpdmF0ZWQgKGUuZy4gaGlnaGxpZ2h0IGFuIGVsZW1lbnQpXG4gKiAtIFdoZW4gYSBwcmVzcyBoYXMgZGVhY3RpdmF0ZWQgKGUuZy4gdW4taGlnaGxpZ2h0IGFuIGVsZW1lbnQpXG4gKiAtIFdoZW4gYSBwcmVzcyBzaG91bGQgdHJpZ2dlciBhbiBhY3Rpb24sIG1lYW5pbmcgaXQgYWN0aXZhdGVkIGFuZCBkZWFjdGl2YXRlZFxuICogICB3aGlsZSB3aXRoaW4gdGhlIGdlb21ldHJ5IG9mIHRoZSBlbGVtZW50IHdpdGhvdXQgdGhlIGxvY2sgYmVpbmcgc3RvbGVuLlxuICpcbiAqIEEgaGlnaCBxdWFsaXR5IGludGVyYWN0aW9uIGlzbid0IGFzIHNpbXBsZSBhcyB5b3UgbWlnaHQgdGhpbmsuIFRoZXJlIHNob3VsZFxuICogYmUgYSBzbGlnaHQgZGVsYXkgYmVmb3JlIGFjdGl2YXRpb24uIE1vdmluZyB5b3VyIGZpbmdlciBiZXlvbmQgYW4gZWxlbWVudCdzXG4gKiBib3VuZHMgc2hvdWxkIHRyaWdnZXIgZGVhY3RpdmF0aW9uLCBidXQgbW92aW5nIHRoZSBzYW1lIGZpbmdlciBiYWNrIHdpdGhpbiBhblxuICogZWxlbWVudCdzIGJvdW5kcyBzaG91bGQgdHJpZ2dlciByZWFjdGl2YXRpb24uXG4gKlxuICogVGhpcyBzaG91bGQgYmUgY29uc3VtZWQgYnkgZnVuY3Rpb25hbCBjb21wb25lbnRzIHVzaW5nIGB1c2VQcmVzc2FiaWxpdHlgLiBUaGVcbiAqIGZvbGxvd2luZyBzdGVwcyBhcmUgb25seSByZWxldmFudCBmb3IgdXNpbmcgYFByZXNzYWJpbGl0eWAgaW4gY2xhc3NlczpcbiAqXG4gKiAxLiBJbnN0YW50aWF0ZSBgUHJlc3NhYmlsaXR5YCBhbmQgc3RvcmUgaXQgb24geW91ciBjb21wb25lbnQncyBzdGF0ZS5cbiAqXG4gKiAgICBzdGF0ZSA9IHtcbiAqICAgICAgcHJlc3NhYmlsaXR5OiBuZXcgUHJlc3NhYmlsaXR5KHtcbiAqICAgICAgICAvLyAuLi5cbiAqICAgICAgfSksXG4gKiAgICB9O1xuICpcbiAqIDIuIENob29zZSB0aGUgcmVuZGVyZWQgY29tcG9uZW50IHdobyBzaG91bGQgY29sbGVjdCB0aGUgcHJlc3MgZXZlbnRzLiBPbiB0aGF0XG4gKiAgICBlbGVtZW50LCBzcHJlYWQgYHByZXNzYWJpbGl0eS5nZXRFdmVudEhhbmRsZXJzKClgIGludG8gaXRzIHByb3BzLlxuICpcbiAqICAgIHJldHVybiAoXG4gKiAgICAgIDxWaWV3IHsuLi50aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5nZXRFdmVudEhhbmRsZXJzKCl9IC8+XG4gKiAgICApO1xuICpcbiAqIDMuIFVwZGF0ZSBgUHJlc3NhYmlsaXR5YCB3aGVuIHlvdXIgY29tcG9uZW50IG1vdW50cywgdXBkYXRlcywgYW5kIHVubW91bnRzLlxuICpcbiAqICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICogICAgICB0aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5jb25maWd1cmUoLi4uKTtcbiAqICAgIH1cbiAqXG4gKiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gKiAgICAgIHRoaXMuc3RhdGUucHJlc3NhYmlsaXR5LmNvbmZpZ3VyZSguLi4pO1xuICogICAgfVxuICpcbiAqICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICogICAgICB0aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5yZXNldCgpO1xuICogICAgfVxuICpcbiAqID09PT09PT09PT09PT09PT09PT09IFByZXNzYWJpbGl0eSBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzID09PT09PT09PT09PT09PT09PT09XG4gKlxuICogYFByZXNzYWJpbGl0eWAgb25seSBhc3N1bWVzIHRoYXQgdGhlcmUgZXhpc3RzIGEgYEhpdFJlY3RgIG5vZGUuIFRoZSBgUHJlc3NSZWN0YFxuICogaXMgYW4gYWJzdHJhY3QgYm94IHRoYXQgaXMgZXh0ZW5kZWQgYmV5b25kIHRoZSBgSGl0UmVjdGAuXG4gKlxuICogIyBHZW9tZXRyeVxuICpcbiAqICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAqICDilIIgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAg4pSCIC0gUHJlc3NlcyBzdGFydCBhbnl3aGVyZSB3aXRoaW4gYEhpdFJlY3RgLCB3aGljaFxuICogIOKUgiAg4pSCICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgIOKUgiAg4pSCICAgaXMgZXhwYW5kZWQgdmlhIHRoZSBwcm9wIGBoaXRTbG9wYC5cbiAqICDilIIgIOKUgiAg4pSCIFZpc3VhbFJlY3Qg4pSCICDilIIgIOKUglxuICogIOKUgiAg4pSCICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggIOKUgiAg4pSCIC0gV2hlbiBwcmVzc2VkIGRvd24gZm9yIHN1ZmZpY2llbnQgYW1vdW50IG9mIHRpbWVcbiAqICDilIIgIOKUgiAgICBIaXRSZWN0ICAgICAgIOKUgiAg4pSCICAgYmVmb3JlIGxldHRpbmcgdXAsIGBWaXN1YWxSZWN0YCBhY3RpdmF0ZXMgZm9yXG4gKiAg4pSCICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggIOKUgiAgIGFzIGxvbmcgYXMgdGhlIHByZXNzIHN0YXlzIHdpdGhpbiBgUHJlc3NSZWN0YC5cbiAqICDilIIgICAgICAgUHJlc3NSZWN0ICAgIG8gICDilIJcbiAqICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilILilIDilIDilIDilJhcbiAqICAgICAgICAgIE91dCBSZWdpb24gICDilJTilIDilIDilIDilIDilIDilIAgYFByZXNzUmVjdGAsIHdoaWNoIGlzIGV4cGFuZGVkIHZpYSB0aGUgcHJvcFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZXNzUmVjdE9mZnNldGAsIGFsbG93cyBwcmVzc2VzIHRvIG1vdmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJleW9uZCBgSGl0UmVjdGAgd2hpbGUgbWFpbnRhaW5pbmcgYWN0aXZhdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJlaW5nIGVsaWdpYmxlIGZvciBhIFwicHJlc3NcIi5cbiAqXG4gKiAjIFN0YXRlIE1hY2hpbmVcbiAqXG4gKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAg4peA4pSA4pSA4pSA4pSAIFJFU1BPTkRFUl9SRUxFQVNFXG4gKiDilIIgTk9UX1JFU1BPTkRFUiDilIJcbiAqIOKUlOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDil4DilIDilIDilIDilIAgUkVTUE9OREVSX1RFUk1JTkFURURcbiAqICAgICDilIJcbiAqICAgICDilIIgUkVTUE9OREVSX0dSQU5UIChIaXRSZWN0KVxuICogICAgIOKUglxuICogICAgIOKWvFxuICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiDilIIgUkVTUE9OREVSX0lOQUNUSVZFXyDilIIgIERFTEFZICAg4pSCIFJFU1BPTkRFUl9BQ1RJVkVfIOKUgiAgVCArIERFTEFZICAg4pSCIFJFU1BPTkRFUl9BQ1RJVkVfIOKUglxuICog4pSCIFBSRVNTX0lOICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa2IOKUgiBQUkVTU19JTiAgICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilrYg4pSCIExPTkdfUFJFU1NfSU4gICAgIOKUglxuICog4pSU4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICAgIOKUlOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICAg4pSU4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gKiAgIOKUgiAgICAgICAgICAg4payICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgIOKWsiAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgIOKWslxuICogICDilIJMRUFWRV8gICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCTEVBVkVfICAgICDilIIgICAgICAgICAgICAgICAgICAgICAg4pSCTEVBVkVfICAgICDilIJcbiAqICAg4pSCUFJFU1NfUkVDVCDilIJFTlRFUl8gICAgICAgICAgICAgIOKUglBSRVNTX1JFQ1Qg4pSCRU5URVJfICAgICAgICAgICAgICAgIOKUglBSRVNTX1JFQ1Qg4pSCRU5URVJfXG4gKiAgIOKUgiAgICAgICAgICAg4pSCUFJFU1NfUkVDVCAgICAgICAgICDilIIgICAgICAgICAgIOKUglBSRVNTX1JFQ1QgICAgICAgICAgICDilIIgICAgICAgICAgIOKUglBSRVNTX1JFQ1RcbiAqICAg4pa8ICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgIOKWvCAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgIOKWvCAgICAgICAgICAg4pSCXG4gKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilJBcbiAqIOKUgiBSRVNQT05ERVJfSU5BQ1RJVkVfIOKUgiAgREVMQVkgICDilIIgUkVTUE9OREVSX0FDVElWRV8g4pSCICAgICAgICAgICAgICDilIIgUkVTUE9OREVSX0FDVElWRV8g4pSCXG4gKiDilIIgUFJFU1NfT1VUICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilrYg4pSCIFBSRVNTX09VVCAgICAgICAgIOKUgiAgICAgICAgICAgICAg4pSCIExPTkdfUFJFU1NfT1VUICAgIOKUglxuICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gKlxuICogVCArIERFTEFZID0+IExPTkdfUFJFU1NfREVMQVkgKyBERUxBWVxuICpcbiAqIE5vdCBkcmF3biBhcmUgdGhlIHNpZGUgZWZmZWN0cyBvZiBlYWNoIHRyYW5zaXRpb24uIFRoZSBtb3N0IGltcG9ydGFudCBzaWRlXG4gKiBlZmZlY3QgaXMgdGhlIGludm9jYXRpb24gb2YgYG9uUHJlc3NgIGFuZCBgb25Mb25nUHJlc3NgIHRoYXQgb2NjdXIgd2hlbiBhXG4gKiByZXNwb25kZXIgaXMgcmVsZWFzZSB3aGlsZSBpbiB0aGUgXCJwcmVzcyBpblwiIHN0YXRlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJlc3NhYmlsaXR5IHtcbiAgX2NvbmZpZzogUHJlc3NhYmlsaXR5Q29uZmlnO1xuICBfZXZlbnRIYW5kbGVyczogP0V2ZW50SGFuZGxlcnMgPSBudWxsO1xuICBfaG92ZXJJbkRlbGF5VGltZW91dDogP1RpbWVvdXRJRCA9IG51bGw7XG4gIF9ob3Zlck91dERlbGF5VGltZW91dDogP1RpbWVvdXRJRCA9IG51bGw7XG4gIF9pc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX2xvbmdQcmVzc0RlbGF5VGltZW91dDogP1RpbWVvdXRJRCA9IG51bGw7XG4gIF9wcmVzc0RlbGF5VGltZW91dDogP1RpbWVvdXRJRCA9IG51bGw7XG4gIF9wcmVzc091dERlbGF5VGltZW91dDogP1RpbWVvdXRJRCA9IG51bGw7XG4gIF9yZXNwb25kZXJJRDogP251bWJlciB8IFJlYWN0LkVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+ID0gbnVsbDtcbiAgX3Jlc3BvbmRlclJlZ2lvbjogPyRSZWFkT25seTx7fFxuICAgIGJvdHRvbTogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICByaWdodDogbnVtYmVyLFxuICAgIHRvcDogbnVtYmVyLFxuICB8fT4gPSBudWxsO1xuICBfdG91Y2hBY3RpdmF0ZVBvc2l0aW9uOiA/JFJlYWRPbmx5PHt8XG4gICAgcGFnZVg6IG51bWJlcixcbiAgICBwYWdlWTogbnVtYmVyLFxuICB8fT47XG4gIF90b3VjaEFjdGl2YXRlVGltZTogP251bWJlcjtcbiAgX3RvdWNoU3RhdGU6IFRvdWNoU3RhdGUgPSAnTk9UX1JFU1BPTkRFUic7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQcmVzc2FiaWxpdHlDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZ3VyZShjb25maWcpO1xuICB9XG5cbiAgY29uZmlndXJlKGNvbmZpZzogUHJlc3NhYmlsaXR5Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbnkgcGVuZGluZyB0aW1lcnMuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbiB1bm1vdW50LlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FuY2VsSG92ZXJJbkRlbGF5VGltZW91dCgpO1xuICAgIHRoaXMuX2NhbmNlbEhvdmVyT3V0RGVsYXlUaW1lb3V0KCk7XG4gICAgdGhpcy5fY2FuY2VsTG9uZ1ByZXNzRGVsYXlUaW1lb3V0KCk7XG4gICAgdGhpcy5fY2FuY2VsUHJlc3NEZWxheVRpbWVvdXQoKTtcbiAgICB0aGlzLl9jYW5jZWxQcmVzc091dERlbGF5VGltZW91dCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQsIGlmIGFueSBhc3luYyBldmVudCBoYW5kbGVycyBhcmUgZmlyZWQgYWZ0ZXIgdW5tb3VudFxuICAgIC8vIGR1ZSB0byBhIHJhY2UsIHdlIGRvbid0IGNhbGwgYW55IGNvbmZpZ3VyZWQgY2FsbGJhY2tzLlxuICAgIHRoaXMuX2NvbmZpZyA9IE9iamVjdC5mcmVlemUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzZXQgb2YgcHJvcHMgdG8gc3ByZWFkIGludG8gdGhlIGludGVyYWN0aXZlIGVsZW1lbnQuXG4gICAqL1xuICBnZXRFdmVudEhhbmRsZXJzKCk6IEV2ZW50SGFuZGxlcnMge1xuICAgIGlmICh0aGlzLl9ldmVudEhhbmRsZXJzID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMgPSB0aGlzLl9jcmVhdGVFdmVudEhhbmRsZXJzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ldmVudEhhbmRsZXJzO1xuICB9XG5cbiAgc3RhdGljIHNldExvbmdQcmVzc0RlYWN0aXZhdGlvbkRpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsb25nUHJlc3NEZWFjdGl2YXRpb25EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICB9XG5cbiAgX2NyZWF0ZUV2ZW50SGFuZGxlcnMoKTogRXZlbnRIYW5kbGVycyB7XG4gICAgY29uc3QgZm9jdXNFdmVudEhhbmRsZXJzID0ge1xuICAgICAgb25CbHVyOiAoZXZlbnQ6IEJsdXJFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCB7b25CbHVyfSA9IHRoaXMuX2NvbmZpZztcbiAgICAgICAgaWYgKG9uQmx1ciAhPSBudWxsKSB7XG4gICAgICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRm9jdXM6IChldmVudDogRm9jdXNFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCB7b25Gb2N1c30gPSB0aGlzLl9jb25maWc7XG4gICAgICAgIGlmIChvbkZvY3VzICE9IG51bGwpIHtcbiAgICAgICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzcG9uZGVyRXZlbnRIYW5kbGVycyA9IHtcbiAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXI6ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3Qge2Rpc2FibGVkfSA9IHRoaXMuX2NvbmZpZztcbiAgICAgICAgaWYgKGRpc2FibGVkID09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB7b25TdGFydFNob3VsZFNldFJlc3BvbmRlcl9ERVBSRUNBVEVEfSA9IHRoaXMuX2NvbmZpZztcbiAgICAgICAgICByZXR1cm4gb25TdGFydFNob3VsZFNldFJlc3BvbmRlcl9ERVBSRUNBVEVEID09IG51bGxcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyX0RFUFJFQ0FURUQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWRpc2FibGVkO1xuICAgICAgfSxcblxuICAgICAgb25SZXNwb25kZXJHcmFudDogKGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB8IGJvb2xlYW4gPT4ge1xuICAgICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgICAgdGhpcy5fY2FuY2VsUHJlc3NPdXREZWxheVRpbWVvdXQoKTtcblxuICAgICAgICB0aGlzLl9yZXNwb25kZXJJRCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIHRoaXMuX3RvdWNoU3RhdGUgPSAnTk9UX1JFU1BPTkRFUic7XG4gICAgICAgIHRoaXMuX3JlY2VpdmVTaWduYWwoJ1JFU1BPTkRFUl9HUkFOVCcsIGV2ZW50KTtcblxuICAgICAgICBjb25zdCBkZWxheVByZXNzSW4gPSBub3JtYWxpemVEZWxheSh0aGlzLl9jb25maWcuZGVsYXlQcmVzc0luKTtcbiAgICAgICAgaWYgKGRlbGF5UHJlc3NJbiA+IDApIHtcbiAgICAgICAgICB0aGlzLl9wcmVzc0RlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVjZWl2ZVNpZ25hbCgnREVMQVknLCBldmVudCk7XG4gICAgICAgICAgfSwgZGVsYXlQcmVzc0luKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZWNlaXZlU2lnbmFsKCdERUxBWScsIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGF5TG9uZ1ByZXNzID0gbm9ybWFsaXplRGVsYXkoXG4gICAgICAgICAgdGhpcy5fY29uZmlnLmRlbGF5TG9uZ1ByZXNzLFxuICAgICAgICAgIDEwLFxuICAgICAgICAgIERFRkFVTFRfTE9OR19QUkVTU19ERUxBWV9NUyAtIGRlbGF5UHJlc3NJbixcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbG9uZ1ByZXNzRGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5faGFuZGxlTG9uZ1ByZXNzKGV2ZW50KTtcbiAgICAgICAgfSwgZGVsYXlMb25nUHJlc3MgKyBkZWxheVByZXNzSW4pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuYmxvY2tOYXRpdmVSZXNwb25kZXIgPT09IHRydWU7XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlck1vdmU6IChldmVudDogUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCB7b25QcmVzc01vdmV9ID0gdGhpcy5fY29uZmlnO1xuICAgICAgICBpZiAob25QcmVzc01vdmUgIT0gbnVsbCkge1xuICAgICAgICAgIG9uUHJlc3NNb3ZlKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZ2lvbiBtYXkgbm90IGhhdmUgZmluaXNoZWQgYmVpbmcgbWVhc3VyZWQsIHlldC5cbiAgICAgICAgY29uc3QgcmVzcG9uZGVyUmVnaW9uID0gdGhpcy5fcmVzcG9uZGVyUmVnaW9uO1xuICAgICAgICBpZiAocmVzcG9uZGVyUmVnaW9uID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3VjaCA9IGdldFRvdWNoRnJvbVByZXNzRXZlbnQoZXZlbnQpO1xuICAgICAgICBpZiAodG91Y2ggPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX2NhbmNlbExvbmdQcmVzc0RlbGF5VGltZW91dCgpO1xuICAgICAgICAgIHRoaXMuX3JlY2VpdmVTaWduYWwoJ0xFQVZFX1BSRVNTX1JFQ1QnLCBldmVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RvdWNoQWN0aXZhdGVQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gdGhpcy5fdG91Y2hBY3RpdmF0ZVBvc2l0aW9uLnBhZ2VYIC0gdG91Y2gucGFnZVg7XG4gICAgICAgICAgY29uc3QgZGVsdGFZID0gdGhpcy5fdG91Y2hBY3RpdmF0ZVBvc2l0aW9uLnBhZ2VZIC0gdG91Y2gucGFnZVk7XG4gICAgICAgICAgaWYgKE1hdGguaHlwb3QoZGVsdGFYLCBkZWx0YVkpID4gbG9uZ1ByZXNzRGVhY3RpdmF0aW9uRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbExvbmdQcmVzc0RlbGF5VGltZW91dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc1RvdWNoV2l0aGluUmVzcG9uZGVyUmVnaW9uKHRvdWNoLCByZXNwb25kZXJSZWdpb24pKSB7XG4gICAgICAgICAgdGhpcy5fcmVjZWl2ZVNpZ25hbCgnRU5URVJfUFJFU1NfUkVDVCcsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jYW5jZWxMb25nUHJlc3NEZWxheVRpbWVvdXQoKTtcbiAgICAgICAgICB0aGlzLl9yZWNlaXZlU2lnbmFsKCdMRUFWRV9QUkVTU19SRUNUJywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlclJlbGVhc2U6IChldmVudDogUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLl9yZWNlaXZlU2lnbmFsKCdSRVNQT05ERVJfUkVMRUFTRScsIGV2ZW50KTtcbiAgICAgIH0sXG5cbiAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRlOiAoZXZlbnQ6IFByZXNzRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5fcmVjZWl2ZVNpZ25hbCgnUkVTUE9OREVSX1RFUk1JTkFURUQnLCBldmVudCk7XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdDogKCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCB7Y2FuY2VsYWJsZX0gPSB0aGlzLl9jb25maWc7XG4gICAgICAgIGlmIChjYW5jZWxhYmxlID09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB7b25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3RfREVQUkVDQVRFRH0gPSB0aGlzLl9jb25maWc7XG4gICAgICAgICAgcmV0dXJuIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0X0RFUFJFQ0FURUQgPT0gbnVsbFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0X0RFUFJFQ0FURUQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsYWJsZTtcbiAgICAgIH0sXG5cbiAgICAgIG9uQ2xpY2s6IChldmVudDogUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAvLyBJZiBldmVudCBoYXMgYHBvaW50ZXJUeXBlYCwgaXQgd2FzIGVtaXR0ZWQgZnJvbSBhIFBvaW50ZXJFdmVudCBhbmRcbiAgICAgICAgLy8gd2Ugc2hvdWxkIGlnbm9yZSBpdCB0byBhdm9pZCB0cmlnZ2VyaW5nIGBvblByZXNzYCB0d2ljZS5cbiAgICAgICAgaWYgKGV2ZW50Py5uYXRpdmVFdmVudD8uaGFzT3duUHJvcGVydHk/LigncG9pbnRlclR5cGUnKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZvciBub24tcG9pbnRlciBjbGljayBldmVudHMgKGUuZy4gYWNjZXNzaWJpbGl0eSBjbGlja3MpLCB3ZSBzaG91bGQgb25seSBkaXNwYXRjaCB3aGVuIHdlJ3JlIHRoZSBcInJlYWxcIiB0YXJnZXRcbiAgICAgICAgLy8gaW4gcGFydGljdWxhciwgd2Ugc2hvdWxkbid0IHJlc3BvbmQgdG8gY2xpY2tzIGZyb20gbmVzdGVkIHByZXNzYWJsZXNcbiAgICAgICAgaWYgKGV2ZW50Py5jdXJyZW50VGFyZ2V0ICE9PSBldmVudD8udGFyZ2V0KSB7XG4gICAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtvblByZXNzLCBkaXNhYmxlZH0gPSB0aGlzLl9jb25maWc7XG4gICAgICAgIGlmIChvblByZXNzICE9IG51bGwgJiYgZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgICBvblByZXNzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAgIC8vIFdlIGFyZSBzZXR0aW5nIHRoaXMgaW4gb3JkZXIgdG8gZmluZCB0aGlzIG5vZGUgaW4gUmVhY3ROYXRpdmVUZXN0VG9vbHNcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgcmVzcG9uZGVyRXZlbnRIYW5kbGVycy5vblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyLnRlc3RPbmx5X3ByZXNzYWJpbGl0eUNvbmZpZyA9XG4gICAgICAgICgpID0+IHRoaXMuX2NvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncy5zaG91bGRQcmVzc2liaWxpdHlVc2VXM0NQb2ludGVyRXZlbnRzRm9ySG92ZXIoKVxuICAgICkge1xuICAgICAgY29uc3QgaG92ZXJQb2ludGVyRXZlbnRzID0ge1xuICAgICAgICBvblBvaW50ZXJFbnRlcjogKHVuZGVmaW5lZDogdm9pZCB8IChQb2ludGVyRXZlbnQgPT4gdm9pZCkpLFxuICAgICAgICBvblBvaW50ZXJMZWF2ZTogKHVuZGVmaW5lZDogdm9pZCB8IChQb2ludGVyRXZlbnQgPT4gdm9pZCkpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHtvbkhvdmVySW4sIG9uSG92ZXJPdXR9ID0gdGhpcy5fY29uZmlnO1xuICAgICAgaWYgKG9uSG92ZXJJbiAhPSBudWxsKSB7XG4gICAgICAgIGhvdmVyUG9pbnRlckV2ZW50cy5vblBvaW50ZXJFbnRlciA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5faXNIb3ZlcmVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jYW5jZWxIb3Zlck91dERlbGF5VGltZW91dCgpO1xuICAgICAgICAgIGlmIChvbkhvdmVySW4gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGVsYXlIb3ZlckluID0gbm9ybWFsaXplRGVsYXkodGhpcy5fY29uZmlnLmRlbGF5SG92ZXJJbik7XG4gICAgICAgICAgICBpZiAoZGVsYXlIb3ZlckluID4gMCkge1xuICAgICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICAgIHRoaXMuX2hvdmVySW5EZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBvbkhvdmVySW4oY29udmVydFBvaW50ZXJFdmVudFRvTW91c2VFdmVudChldmVudCkpO1xuICAgICAgICAgICAgICB9LCBkZWxheUhvdmVySW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb25Ib3ZlckluKGNvbnZlcnRQb2ludGVyRXZlbnRUb01vdXNlRXZlbnQoZXZlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAob25Ib3Zlck91dCAhPSBudWxsKSB7XG4gICAgICAgIGhvdmVyUG9pbnRlckV2ZW50cy5vblBvaW50ZXJMZWF2ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxIb3ZlckluRGVsYXlUaW1lb3V0KCk7XG4gICAgICAgICAgICBpZiAob25Ib3Zlck91dCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlbGF5SG92ZXJPdXQgPSBub3JtYWxpemVEZWxheSh0aGlzLl9jb25maWcuZGVsYXlIb3Zlck91dCk7XG4gICAgICAgICAgICAgIGlmIChkZWxheUhvdmVyT3V0ID4gMCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3Zlck91dERlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgb25Ib3Zlck91dChjb252ZXJ0UG9pbnRlckV2ZW50VG9Nb3VzZUV2ZW50KGV2ZW50KSk7XG4gICAgICAgICAgICAgICAgfSwgZGVsYXlIb3Zlck91dCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb25Ib3Zlck91dChjb252ZXJ0UG9pbnRlckV2ZW50VG9Nb3VzZUV2ZW50KGV2ZW50KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5mb2N1c0V2ZW50SGFuZGxlcnMsXG4gICAgICAgIC4uLnJlc3BvbmRlckV2ZW50SGFuZGxlcnMsXG4gICAgICAgIC4uLmhvdmVyUG9pbnRlckV2ZW50cyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1vdXNlRXZlbnRIYW5kbGVycyA9XG4gICAgICAgIFBsYXRmb3JtLk9TID09PSAnaW9zJyB8fCBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcjogKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSG92ZXJFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jYW5jZWxIb3Zlck91dERlbGF5VGltZW91dCgpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qge29uSG92ZXJJbn0gPSB0aGlzLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICBpZiAob25Ib3ZlckluICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXlIb3ZlckluID0gbm9ybWFsaXplRGVsYXkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnLmRlbGF5SG92ZXJJbixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGF5SG92ZXJJbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJJbkRlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3ZlckluKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB9LCBkZWxheUhvdmVySW4pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIG9uSG92ZXJJbihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbmNlbEhvdmVySW5EZWxheVRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHtvbkhvdmVyT3V0fSA9IHRoaXMuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgIGlmIChvbkhvdmVyT3V0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXlIb3Zlck91dCA9IG5vcm1hbGl6ZURlbGF5KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5kZWxheUhvdmVyT3V0LFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsYXlIb3Zlck91dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJJbkRlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3Zlck91dChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXlIb3Zlck91dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb25Ib3Zlck91dChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZm9jdXNFdmVudEhhbmRsZXJzLFxuICAgICAgICAuLi5yZXNwb25kZXJFdmVudEhhbmRsZXJzLFxuICAgICAgICAuLi5tb3VzZUV2ZW50SGFuZGxlcnMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhIHN0YXRlIG1hY2hpbmUgc2lnbmFsLCBwZXJmb3JtcyBzaWRlIGVmZmVjdHMgb2YgdGhlIHRyYW5zaXRpb25cbiAgICogYW5kIHN0b3JlcyB0aGUgbmV3IHN0YXRlLiBWYWxpZGF0ZXMgdGhlIHRyYW5zaXRpb24gYXMgd2VsbC5cbiAgICovXG4gIF9yZWNlaXZlU2lnbmFsKHNpZ25hbDogVG91Y2hTaWduYWwsIGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgLy8gRXNwZWNpYWxseSBvbiBpT1MsIG5vdCBhbGwgZXZlbnRzIGhhdmUgdGltZXN0YW1wcyBhc3NvY2lhdGVkLlxuICAgIC8vIEZvciB0ZWxlbWV0cnkgcHVycG9zZXMsIHRoaXMgZG9lc24ndCBtYXR0ZXIgdG9vIG11Y2gsIGFzIGxvbmcgYXMgKnNvbWUqIGRvLlxuICAgIC8vIFNpbmNlIHRoZSBuYXRpdmUgdGltZXN0YW1wIGlzIGludGVncmFsIGZvciBsb2dnaW5nIHRlbGVtZXRyeSwganVzdCBza2lwXG4gICAgLy8gZXZlbnRzIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRpbWVzdGFtcCBhdHRhY2hlZC5cbiAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQudGltZXN0YW1wICE9IG51bGwpIHtcbiAgICAgIFByZXNzYWJpbGl0eVBlcmZvcm1hbmNlRXZlbnRFbWl0dGVyLmVtaXRFdmVudCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgIG5hdGl2ZVRpbWVzdGFtcDogZXZlbnQubmF0aXZlRXZlbnQudGltZXN0YW1wLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5fdG91Y2hTdGF0ZTtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSBUcmFuc2l0aW9uc1twcmV2U3RhdGVdPy5bc2lnbmFsXTtcbiAgICBpZiAodGhpcy5fcmVzcG9uZGVySUQgPT0gbnVsbCAmJiBzaWduYWwgPT09ICdSRVNQT05ERVJfUkVMRUFTRScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgbmV4dFN0YXRlICE9IG51bGwgJiYgbmV4dFN0YXRlICE9PSAnRVJST1InLFxuICAgICAgJ1ByZXNzYWJpbGl0eTogSW52YWxpZCBzaWduYWwgYCVzYCBmb3Igc3RhdGUgYCVzYCBvbiByZXNwb25kZXI6ICVzJyxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHByZXZTdGF0ZSxcbiAgICAgIHR5cGVvZiB0aGlzLl9yZXNwb25kZXJJRCA9PT0gJ251bWJlcidcbiAgICAgICAgPyB0aGlzLl9yZXNwb25kZXJJRFxuICAgICAgICA6ICc8PGhvc3QgY29tcG9uZW50Pj4nLFxuICAgICk7XG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbmV4dFN0YXRlKSB7XG4gICAgICB0aGlzLl9wZXJmb3JtVHJhbnNpdGlvblNpZGVFZmZlY3RzKHByZXZTdGF0ZSwgbmV4dFN0YXRlLCBzaWduYWwsIGV2ZW50KTtcbiAgICAgIHRoaXMuX3RvdWNoU3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgdHJhbnNpdGlvbiBiZXR3ZWVuIHRvdWNoYWJsZSBzdGF0ZXMgYW5kIGlkZW50aWZ5IGFueSBhY3RpdmF0aW9uc1xuICAgKiBvciBkZWFjdGl2YXRpb25zIChhbmQgY2FsbGJhY2sgaW52b2NhdGlvbnMpLlxuICAgKi9cbiAgX3BlcmZvcm1UcmFuc2l0aW9uU2lkZUVmZmVjdHMoXG4gICAgcHJldlN0YXRlOiBUb3VjaFN0YXRlLFxuICAgIG5leHRTdGF0ZTogVG91Y2hTdGF0ZSxcbiAgICBzaWduYWw6IFRvdWNoU2lnbmFsLFxuICAgIGV2ZW50OiBQcmVzc0V2ZW50LFxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNUZXJtaW5hbFNpZ25hbChzaWduYWwpKSB7XG4gICAgICB0aGlzLl90b3VjaEFjdGl2YXRlUG9zaXRpb24gPSBudWxsO1xuICAgICAgdGhpcy5fY2FuY2VsTG9uZ1ByZXNzRGVsYXlUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNJbml0aWFsVHJhbnNpdGlvbiA9XG4gICAgICBwcmV2U3RhdGUgPT09ICdOT1RfUkVTUE9OREVSJyAmJlxuICAgICAgbmV4dFN0YXRlID09PSAnUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX0lOJztcblxuICAgIGNvbnN0IGlzQWN0aXZhdGlvblRyYW5zaXRpb24gPVxuICAgICAgIWlzQWN0aXZhdGlvblNpZ25hbChwcmV2U3RhdGUpICYmIGlzQWN0aXZhdGlvblNpZ25hbChuZXh0U3RhdGUpO1xuXG4gICAgaWYgKGlzSW5pdGlhbFRyYW5zaXRpb24gfHwgaXNBY3RpdmF0aW9uVHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5fbWVhc3VyZVJlc3BvbmRlclJlZ2lvbigpO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXNzSW5TaWduYWwocHJldlN0YXRlKSAmJiBzaWduYWwgPT09ICdMT05HX1BSRVNTX0RFVEVDVEVEJykge1xuICAgICAgY29uc3Qge29uTG9uZ1ByZXNzfSA9IHRoaXMuX2NvbmZpZztcbiAgICAgIGlmIChvbkxvbmdQcmVzcyAhPSBudWxsKSB7XG4gICAgICAgIG9uTG9uZ1ByZXNzKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc1ByZXZBY3RpdmUgPSBpc0FjdGl2ZVNpZ25hbChwcmV2U3RhdGUpO1xuICAgIGNvbnN0IGlzTmV4dEFjdGl2ZSA9IGlzQWN0aXZlU2lnbmFsKG5leHRTdGF0ZSk7XG5cbiAgICBpZiAoIWlzUHJldkFjdGl2ZSAmJiBpc05leHRBY3RpdmUpIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlKGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKGlzUHJldkFjdGl2ZSAmJiAhaXNOZXh0QWN0aXZlKSB7XG4gICAgICB0aGlzLl9kZWFjdGl2YXRlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzc0luU2lnbmFsKHByZXZTdGF0ZSkgJiYgc2lnbmFsID09PSAnUkVTUE9OREVSX1JFTEVBU0UnKSB7XG4gICAgICAvLyBJZiB3ZSBuZXZlciBhY3RpdmF0ZWQgKGR1ZSB0byBkZWxheXMpLCBhY3RpdmF0ZSBhbmQgZGVhY3RpdmF0ZSBub3cuXG4gICAgICBpZiAoIWlzTmV4dEFjdGl2ZSAmJiAhaXNQcmV2QWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZShldmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCB7b25Mb25nUHJlc3MsIG9uUHJlc3MsIGFuZHJvaWRfZGlzYWJsZVNvdW5kfSA9IHRoaXMuX2NvbmZpZztcbiAgICAgIGlmIChvblByZXNzICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgaXNQcmVzc0NhbmNlbGVkQnlMb25nUHJlc3MgPVxuICAgICAgICAgIG9uTG9uZ1ByZXNzICE9IG51bGwgJiZcbiAgICAgICAgICBwcmV2U3RhdGUgPT09ICdSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU4nICYmXG4gICAgICAgICAgdGhpcy5fc2hvdWxkTG9uZ1ByZXNzQ2FuY2VsUHJlc3MoKTtcbiAgICAgICAgaWYgKCFpc1ByZXNzQ2FuY2VsZWRCeUxvbmdQcmVzcykge1xuICAgICAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnICYmIGFuZHJvaWRfZGlzYWJsZVNvdW5kICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBTb3VuZE1hbmFnZXIucGxheVRvdWNoU291bmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25QcmVzcyhldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jYW5jZWxQcmVzc0RlbGF5VGltZW91dCgpO1xuICB9XG5cbiAgX2FjdGl2YXRlKGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qge29uUHJlc3NJbn0gPSB0aGlzLl9jb25maWc7XG4gICAgY29uc3Qge3BhZ2VYLCBwYWdlWX0gPSBnZXRUb3VjaEZyb21QcmVzc0V2ZW50KGV2ZW50KTtcbiAgICB0aGlzLl90b3VjaEFjdGl2YXRlUG9zaXRpb24gPSB7cGFnZVgsIHBhZ2VZfTtcbiAgICB0aGlzLl90b3VjaEFjdGl2YXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKG9uUHJlc3NJbiAhPSBudWxsKSB7XG4gICAgICBvblByZXNzSW4oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIF9kZWFjdGl2YXRlKGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qge29uUHJlc3NPdXR9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmIChvblByZXNzT3V0ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG1pblByZXNzRHVyYXRpb24gPSBub3JtYWxpemVEZWxheShcbiAgICAgICAgdGhpcy5fY29uZmlnLm1pblByZXNzRHVyYXRpb24sXG4gICAgICAgIDAsXG4gICAgICAgIERFRkFVTFRfTUlOX1BSRVNTX0RVUkFUSU9OLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXNzRHVyYXRpb24gPSBEYXRlLm5vdygpIC0gKHRoaXMuX3RvdWNoQWN0aXZhdGVUaW1lID8/IDApO1xuICAgICAgY29uc3QgZGVsYXlQcmVzc091dCA9IE1hdGgubWF4KFxuICAgICAgICBtaW5QcmVzc0R1cmF0aW9uIC0gcHJlc3NEdXJhdGlvbixcbiAgICAgICAgbm9ybWFsaXplRGVsYXkodGhpcy5fY29uZmlnLmRlbGF5UHJlc3NPdXQpLFxuICAgICAgKTtcbiAgICAgIGlmIChkZWxheVByZXNzT3V0ID4gMCkge1xuICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgIHRoaXMuX3ByZXNzT3V0RGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb25QcmVzc091dChldmVudCk7XG4gICAgICAgIH0sIGRlbGF5UHJlc3NPdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25QcmVzc091dChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3RvdWNoQWN0aXZhdGVUaW1lID0gbnVsbDtcbiAgfVxuXG4gIF9tZWFzdXJlUmVzcG9uZGVyUmVnaW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZXNwb25kZXJJRCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9yZXNwb25kZXJJRCA9PT0gJ251bWJlcicpIHtcbiAgICAgIFVJTWFuYWdlci5tZWFzdXJlKHRoaXMuX3Jlc3BvbmRlcklELCB0aGlzLl9tZWFzdXJlQ2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNwb25kZXJJRC5tZWFzdXJlKHRoaXMuX21lYXN1cmVDYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgX21lYXN1cmVDYWxsYmFjayA9IChcbiAgICBsZWZ0OiBudW1iZXIsXG4gICAgdG9wOiBudW1iZXIsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBwYWdlWDogbnVtYmVyLFxuICAgIHBhZ2VZOiBudW1iZXIsXG4gICkgPT4ge1xuICAgIGlmICghbGVmdCAmJiAhdG9wICYmICF3aWR0aCAmJiAhaGVpZ2h0ICYmICFwYWdlWCAmJiAhcGFnZVkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcmVzcG9uZGVyUmVnaW9uID0ge1xuICAgICAgYm90dG9tOiBwYWdlWSArIGhlaWdodCxcbiAgICAgIGxlZnQ6IHBhZ2VYLFxuICAgICAgcmlnaHQ6IHBhZ2VYICsgd2lkdGgsXG4gICAgICB0b3A6IHBhZ2VZLFxuICAgIH07XG4gIH07XG5cbiAgX2lzVG91Y2hXaXRoaW5SZXNwb25kZXJSZWdpb24oXG4gICAgdG91Y2g6ICRQcm9wZXJ0eVR5cGU8UHJlc3NFdmVudCwgJ25hdGl2ZUV2ZW50Jz4sXG4gICAgcmVzcG9uZGVyUmVnaW9uOiAkUmVhZE9ubHk8e3xcbiAgICAgIGJvdHRvbTogbnVtYmVyLFxuICAgICAgbGVmdDogbnVtYmVyLFxuICAgICAgcmlnaHQ6IG51bWJlcixcbiAgICAgIHRvcDogbnVtYmVyLFxuICAgIHx9PixcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGl0U2xvcCA9IG5vcm1hbGl6ZVJlY3QodGhpcy5fY29uZmlnLmhpdFNsb3ApO1xuICAgIGNvbnN0IHByZXNzUmVjdE9mZnNldCA9IG5vcm1hbGl6ZVJlY3QodGhpcy5fY29uZmlnLnByZXNzUmVjdE9mZnNldCk7XG5cbiAgICBsZXQgcmVnaW9uQm90dG9tID0gcmVzcG9uZGVyUmVnaW9uLmJvdHRvbTtcbiAgICBsZXQgcmVnaW9uTGVmdCA9IHJlc3BvbmRlclJlZ2lvbi5sZWZ0O1xuICAgIGxldCByZWdpb25SaWdodCA9IHJlc3BvbmRlclJlZ2lvbi5yaWdodDtcbiAgICBsZXQgcmVnaW9uVG9wID0gcmVzcG9uZGVyUmVnaW9uLnRvcDtcblxuICAgIGlmIChoaXRTbG9wICE9IG51bGwpIHtcbiAgICAgIGlmIChoaXRTbG9wLmJvdHRvbSAhPSBudWxsKSB7XG4gICAgICAgIHJlZ2lvbkJvdHRvbSArPSBoaXRTbG9wLmJvdHRvbTtcbiAgICAgIH1cbiAgICAgIGlmIChoaXRTbG9wLmxlZnQgIT0gbnVsbCkge1xuICAgICAgICByZWdpb25MZWZ0IC09IGhpdFNsb3AubGVmdDtcbiAgICAgIH1cbiAgICAgIGlmIChoaXRTbG9wLnJpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgcmVnaW9uUmlnaHQgKz0gaGl0U2xvcC5yaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChoaXRTbG9wLnRvcCAhPSBudWxsKSB7XG4gICAgICAgIHJlZ2lvblRvcCAtPSBoaXRTbG9wLnRvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpb25Cb3R0b20gKz1cbiAgICAgIHByZXNzUmVjdE9mZnNldD8uYm90dG9tID8/IERFRkFVTFRfUFJFU1NfUkVDVF9PRkZTRVRTLmJvdHRvbTtcbiAgICByZWdpb25MZWZ0IC09IHByZXNzUmVjdE9mZnNldD8ubGVmdCA/PyBERUZBVUxUX1BSRVNTX1JFQ1RfT0ZGU0VUUy5sZWZ0O1xuICAgIHJlZ2lvblJpZ2h0ICs9IHByZXNzUmVjdE9mZnNldD8ucmlnaHQgPz8gREVGQVVMVF9QUkVTU19SRUNUX09GRlNFVFMucmlnaHQ7XG4gICAgcmVnaW9uVG9wIC09IHByZXNzUmVjdE9mZnNldD8udG9wID8/IERFRkFVTFRfUFJFU1NfUkVDVF9PRkZTRVRTLnRvcDtcblxuICAgIHJldHVybiAoXG4gICAgICB0b3VjaC5wYWdlWCA+IHJlZ2lvbkxlZnQgJiZcbiAgICAgIHRvdWNoLnBhZ2VYIDwgcmVnaW9uUmlnaHQgJiZcbiAgICAgIHRvdWNoLnBhZ2VZID4gcmVnaW9uVG9wICYmXG4gICAgICB0b3VjaC5wYWdlWSA8IHJlZ2lvbkJvdHRvbVxuICAgICk7XG4gIH1cblxuICBfaGFuZGxlTG9uZ1ByZXNzKGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fdG91Y2hTdGF0ZSA9PT0gJ1JFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU4nIHx8XG4gICAgICB0aGlzLl90b3VjaFN0YXRlID09PSAnUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOJ1xuICAgICkge1xuICAgICAgdGhpcy5fcmVjZWl2ZVNpZ25hbCgnTE9OR19QUkVTU19ERVRFQ1RFRCcsIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBfc2hvdWxkTG9uZ1ByZXNzQ2FuY2VsUHJlc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2NvbmZpZy5vbkxvbmdQcmVzc1Nob3VsZENhbmNlbFByZXNzX0RFUFJFQ0FURUQgPT0gbnVsbCB8fFxuICAgICAgdGhpcy5fY29uZmlnLm9uTG9uZ1ByZXNzU2hvdWxkQ2FuY2VsUHJlc3NfREVQUkVDQVRFRCgpXG4gICAgKTtcbiAgfVxuXG4gIF9jYW5jZWxIb3ZlckluRGVsYXlUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9ob3ZlckluRGVsYXlUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ob3ZlckluRGVsYXlUaW1lb3V0KTtcbiAgICAgIHRoaXMuX2hvdmVySW5EZWxheVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9jYW5jZWxIb3Zlck91dERlbGF5VGltZW91dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faG92ZXJPdXREZWxheVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2hvdmVyT3V0RGVsYXlUaW1lb3V0KTtcbiAgICAgIHRoaXMuX2hvdmVyT3V0RGVsYXlUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfY2FuY2VsTG9uZ1ByZXNzRGVsYXlUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb25nUHJlc3NEZWxheVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdQcmVzc0RlbGF5VGltZW91dCk7XG4gICAgICB0aGlzLl9sb25nUHJlc3NEZWxheVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9jYW5jZWxQcmVzc0RlbGF5VGltZW91dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHJlc3NEZWxheVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3ByZXNzRGVsYXlUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3ByZXNzRGVsYXlUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfY2FuY2VsUHJlc3NPdXREZWxheVRpbWVvdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ByZXNzT3V0RGVsYXlUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wcmVzc091dERlbGF5VGltZW91dCk7XG4gICAgICB0aGlzLl9wcmVzc091dERlbGF5VGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURlbGF5KFxuICBkZWxheTogP251bWJlcixcbiAgbWluOiBudW1iZXIgPSAwLFxuICBmYWxsYmFjazogbnVtYmVyID0gMCxcbik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIGRlbGF5ID8/IGZhbGxiYWNrKTtcbn1cblxuY29uc3QgZ2V0VG91Y2hGcm9tUHJlc3NFdmVudCA9IChldmVudDogUHJlc3NFdmVudCkgPT4ge1xuICBjb25zdCB7Y2hhbmdlZFRvdWNoZXMsIHRvdWNoZXN9ID0gZXZlbnQubmF0aXZlRXZlbnQ7XG5cbiAgaWYgKHRvdWNoZXMgIT0gbnVsbCAmJiB0b3VjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdG91Y2hlc1swXTtcbiAgfVxuICBpZiAoY2hhbmdlZFRvdWNoZXMgIT0gbnVsbCAmJiBjaGFuZ2VkVG91Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGNoYW5nZWRUb3VjaGVzWzBdO1xuICB9XG4gIHJldHVybiBldmVudC5uYXRpdmVFdmVudDtcbn07XG5cbmZ1bmN0aW9uIGNvbnZlcnRQb2ludGVyRXZlbnRUb01vdXNlRXZlbnQoaW5wdXQ6IFBvaW50ZXJFdmVudCk6IE1vdXNlRXZlbnQge1xuICBjb25zdCB7Y2xpZW50WCwgY2xpZW50WX0gPSBpbnB1dC5uYXRpdmVFdmVudDtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbnB1dCxcbiAgICBuYXRpdmVFdmVudDoge1xuICAgICAgY2xpZW50WCxcbiAgICAgIGNsaWVudFksXG4gICAgICBwYWdlWDogY2xpZW50WCxcbiAgICAgIHBhZ2VZOiBjbGllbnRZLFxuICAgICAgdGltZXN0YW1wOiBpbnB1dC50aW1lU3RhbXAsXG4gICAgfSxcbiAgfTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgTmF0aXZlU291bmRNYW5hZ2VyIGZyb20gJy4vTmF0aXZlU291bmRNYW5hZ2VyJztcblxuY29uc3QgU291bmRNYW5hZ2VyID0ge1xuICBwbGF5VG91Y2hTb3VuZDogZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgIGlmIChOYXRpdmVTb3VuZE1hbmFnZXIpIHtcbiAgICAgIE5hdGl2ZVNvdW5kTWFuYWdlci5wbGF5VG91Y2hTb3VuZCgpO1xuICAgIH1cbiAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU291bmRNYW5hZ2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlU291bmRNYW5hZ2VyJztcbmltcG9ydCBOYXRpdmVTb3VuZE1hbmFnZXIgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTb3VuZE1hbmFnZXInO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlU291bmRNYW5hZ2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG4vKipcbiAqIE5hdGl2ZSBNb2R1bGUgdXNlZCBmb3IgcGxheWluZyBzb3VuZHMgaW4gbmF0aXZlIHBsYXRmb3JtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtwbGF5VG91Y2hTb3VuZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdTb3VuZE1hbmFnZXInKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB7dHlwZSBQcmVzc2FiaWxpdHlUb3VjaFNpZ25hbCBhcyBUb3VjaFNpZ25hbH0gZnJvbSAnLi9QcmVzc2FiaWxpdHlUeXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIFByZXNzYWJpbGl0eVBlcmZvcm1hbmNlRXZlbnQgPSAkUmVhZE9ubHk8e3xcbiAgc2lnbmFsOiBUb3VjaFNpZ25hbCxcbiAgbmF0aXZlVGltZXN0YW1wOiBudW1iZXIsXG58fT47XG5leHBvcnQgdHlwZSBQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50TGlzdGVuZXIgPVxuICBQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50ID0+IHZvaWQ7XG5cbmNsYXNzIFByZXNzYWJpbGl0eVBlcmZvcm1hbmNlRXZlbnRFbWl0dGVyIHtcbiAgX2xpc3RlbmVyczogQXJyYXk8UHJlc3NhYmlsaXR5UGVyZm9ybWFuY2VFdmVudExpc3RlbmVyPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBhZGRMaXN0ZW5lcihsaXN0ZW5lcjogUHJlc3NhYmlsaXR5UGVyZm9ybWFuY2VFdmVudExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXI6IFByZXNzYWJpbGl0eVBlcmZvcm1hbmNlRXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBlbWl0RXZlbnQoY29uc3RydWN0RXZlbnQ6ICgpID0+IFByZXNzYWJpbGl0eVBlcmZvcm1hbmNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0gY29uc3RydWN0RXZlbnQoKTtcbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcihldmVudCkpO1xuICB9XG59XG5cbmNvbnN0IFByZXNzYWJpbGl0eVBlcmZvcm1hbmNlRXZlbnRFbWl0dGVyU2luZ2xldG9uOiBQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlciA9XG4gIG5ldyBQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlcigpO1xuXG5leHBvcnQgZGVmYXVsdCBQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlclNpbmdsZXRvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcblxubGV0IGlzRW5hYmxlZCA9IGZhbHNlO1xuXG5pZiAoUGxhdGZvcm0uT1MgPT09ICd3ZWInKSB7XG4gIGNvbnN0IGNhblVzZURPTSA9IEJvb2xlYW4oXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHdpbmRvdy5kb2N1bWVudCAmJlxuICAgICAgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQsXG4gICk7XG5cbiAgaWYgKGNhblVzZURPTSkge1xuICAgIC8qKlxuICAgICAqIFdlYiBicm93c2VycyBlbXVsYXRlIG1vdXNlIGV2ZW50cyAoYW5kIGhvdmVyIHN0YXRlcykgYWZ0ZXIgdG91Y2ggZXZlbnRzLlxuICAgICAqIFRoaXMgY29kZSBpbmZlcnMgd2hlbiB0aGUgY3VycmVudGx5LWluLXVzZSBtb2RhbGl0eSBzdXBwb3J0cyBob3ZlclxuICAgICAqIChpbmNsdWRpbmcgZm9yIG11bHRpLW1vZGFsaXR5IGRldmljZXMpIGFuZCBjb25zaWRlcnMgXCJob3ZlclwiIHRvIGJlIGVuYWJsZWRcbiAgICAgKiBpZiBhIG1vdXNlIG1vdmVtZW50IG9jY3VycyBtb3JlIHRoYW4gMSBzZWNvbmQgYWZ0ZXIgdGhlIGxhc3QgdG91Y2ggZXZlbnQuXG4gICAgICogVGhpcyB0aHJlc2hvbGQgaXMgbG9uZyBlbm91Z2ggdG8gYWNjb3VudCBmb3IgbG9uZ2VyIGRlbGF5cyBiZXR3ZWVuIHRoZVxuICAgICAqIGJyb3dzZXIgZmlyaW5nIHRvdWNoIGFuZCBtb3VzZSBldmVudHMgb24gbG93LXBvd2VyZWQgZGV2aWNlcy5cbiAgICAgKi9cbiAgICBjb25zdCBIT1ZFUl9USFJFU0hPTERfTVMgPSAxMDAwO1xuICAgIGxldCBsYXN0VG91Y2hUaW1lc3RhbXAgPSAwO1xuXG4gICAgY29uc3QgZW5hYmxlSG92ZXIgPSAoKSA9PiB7XG4gICAgICBpZiAoaXNFbmFibGVkIHx8IERhdGUubm93KCkgLSBsYXN0VG91Y2hUaW1lc3RhbXAgPCBIT1ZFUl9USFJFU0hPTERfTVMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXNFbmFibGVkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGlzYWJsZUhvdmVyID0gKCkgPT4ge1xuICAgICAgbGFzdFRvdWNoVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmIChpc0VuYWJsZWQpIHtcbiAgICAgICAgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBkaXNhYmxlSG92ZXIsIHRydWUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGRpc2FibGVIb3ZlciwgdHJ1ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZW5hYmxlSG92ZXIsIHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hvdmVyRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzRW5hYmxlZDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB7Y3JlYXRlVmlld0NvbmZpZ30gZnJvbSAnLi4vTmF0aXZlQ29tcG9uZW50L1ZpZXdDb25maWcnO1xuaW1wb3J0IFVJTWFuYWdlciBmcm9tICcuLi9SZWFjdE5hdGl2ZS9VSU1hbmFnZXInO1xuaW1wb3J0IGNyZWF0ZVJlYWN0TmF0aXZlQ29tcG9uZW50Q2xhc3MgZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcyc7XG5pbXBvcnQge3R5cGUgSG9zdENvbXBvbmVudH0gZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQge3R5cGUgUHJvY2Vzc2VkQ29sb3JWYWx1ZX0gZnJvbSAnLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IHt0eXBlIFByZXNzRXZlbnR9IGZyb20gJy4uL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcbmltcG9ydCB7dHlwZSBUZXh0UHJvcHN9IGZyb20gJy4vVGV4dFByb3BzJztcblxudHlwZSBOYXRpdmVUZXh0UHJvcHMgPSAkUmVhZE9ubHk8e1xuICAuLi5UZXh0UHJvcHMsXG4gIGlzSGlnaGxpZ2h0ZWQ/OiA/Ym9vbGVhbixcbiAgc2VsZWN0aW9uQ29sb3I/OiA/UHJvY2Vzc2VkQ29sb3JWYWx1ZSxcbiAgb25DbGljaz86ID8oZXZlbnQ6IFByZXNzRXZlbnQpID0+IG1peGVkLFxuICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciBwbGF0Zm9ybXMgdGhhdCBvcHRpbWl6ZSB0ZXh0IGhpdCB0ZXN0aW5nLCBlLmcuLFxuICAvLyByZWFjdC1uYXRpdmUtd2luZG93cy4gSXQgY2FuIGJlIHVzZWQgdG8gb25seSBoaXQgdGVzdCB2aXJ0dWFsIHRleHQgc3BhbnNcbiAgLy8gdGhhdCBoYXZlIHByZXNzYWJsZSBldmVudHMgYXR0YWNoZWQgdG8gdGhlbS5cbiAgaXNQcmVzc2FibGU/OiA/Ym9vbGVhbixcbn0+O1xuXG5jb25zdCB0ZXh0Vmlld0NvbmZpZyA9IHtcbiAgdmFsaWRBdHRyaWJ1dGVzOiB7XG4gICAgaXNIaWdobGlnaHRlZDogdHJ1ZSxcbiAgICBpc1ByZXNzYWJsZTogdHJ1ZSxcbiAgICBudW1iZXJPZkxpbmVzOiB0cnVlLFxuICAgIGVsbGlwc2l6ZU1vZGU6IHRydWUsXG4gICAgYWxsb3dGb250U2NhbGluZzogdHJ1ZSxcbiAgICBkeW5hbWljVHlwZVJhbXA6IHRydWUsXG4gICAgbWF4Rm9udFNpemVNdWx0aXBsaWVyOiB0cnVlLFxuICAgIGRpc2FibGVkOiB0cnVlLFxuICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgc2VsZWN0aW9uQ29sb3I6IHRydWUsXG4gICAgYWRqdXN0c0ZvbnRTaXplVG9GaXQ6IHRydWUsXG4gICAgbWluaW11bUZvbnRTY2FsZTogdHJ1ZSxcbiAgICB0ZXh0QnJlYWtTdHJhdGVneTogdHJ1ZSxcbiAgICBvblRleHRMYXlvdXQ6IHRydWUsXG4gICAgb25JbmxpbmVWaWV3TGF5b3V0OiB0cnVlLFxuICAgIGRhdGFEZXRlY3RvclR5cGU6IHRydWUsXG4gICAgYW5kcm9pZF9oeXBoZW5hdGlvbkZyZXF1ZW5jeTogdHJ1ZSxcbiAgICBsaW5lQnJlYWtTdHJhdGVneUlPUzogdHJ1ZSxcbiAgfSxcbiAgZGlyZWN0RXZlbnRUeXBlczoge1xuICAgIHRvcFRleHRMYXlvdXQ6IHtcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvblRleHRMYXlvdXQnLFxuICAgIH0sXG4gICAgdG9wSW5saW5lVmlld0xheW91dDoge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uSW5saW5lVmlld0xheW91dCcsXG4gICAgfSxcbiAgfSxcbiAgdWlWaWV3Q2xhc3NOYW1lOiAnUkNUVGV4dCcsXG59O1xuXG5jb25zdCB2aXJ0dWFsVGV4dFZpZXdDb25maWcgPSB7XG4gIHZhbGlkQXR0cmlidXRlczoge1xuICAgIGlzSGlnaGxpZ2h0ZWQ6IHRydWUsXG4gICAgaXNQcmVzc2FibGU6IHRydWUsXG4gICAgbWF4Rm9udFNpemVNdWx0aXBsaWVyOiB0cnVlLFxuICB9LFxuICB1aVZpZXdDbGFzc05hbWU6ICdSQ1RWaXJ0dWFsVGV4dCcsXG59O1xuXG5leHBvcnQgY29uc3QgTmF0aXZlVGV4dDogSG9zdENvbXBvbmVudDxOYXRpdmVUZXh0UHJvcHM+ID1cbiAgKGNyZWF0ZVJlYWN0TmF0aXZlQ29tcG9uZW50Q2xhc3MoJ1JDVFRleHQnLCAoKSA9PlxuICAgIGNyZWF0ZVZpZXdDb25maWcodGV4dFZpZXdDb25maWcpLFxuICApOiBhbnkpO1xuXG5leHBvcnQgY29uc3QgTmF0aXZlVmlydHVhbFRleHQ6IEhvc3RDb21wb25lbnQ8TmF0aXZlVGV4dFByb3BzPiA9XG4gICFnbG9iYWwuUk4kQnJpZGdlbGVzcyAmJiAhVUlNYW5hZ2VyLmhhc1ZpZXdNYW5hZ2VyQ29uZmlnKCdSQ1RWaXJ0dWFsVGV4dCcpXG4gICAgPyBOYXRpdmVUZXh0XG4gICAgOiAoY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcygnUkNUVmlydHVhbFRleHQnLCAoKSA9PlxuICAgICAgICBjcmVhdGVWaWV3Q29uZmlnKHZpcnR1YWxUZXh0Vmlld0NvbmZpZyksXG4gICAgICApOiBhbnkpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtFZGdlSW5zZXRzUHJvcH0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9FZGdlSW5zZXRzUHJvcFR5cGUnO1xuaW1wb3J0IHR5cGUge1ZpZXdTdHlsZVByb3B9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIGZyb20gJy4uLy4uL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayc7XG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0ICogYXMgTG9nQm94U3R5bGUgZnJvbSAnLi9Mb2dCb3hTdHlsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgYmFja2dyb3VuZENvbG9yOiAkUmVhZE9ubHk8e3xcbiAgICBkZWZhdWx0OiBzdHJpbmcsXG4gICAgcHJlc3NlZDogc3RyaW5nLFxuICB8fT4sXG4gIGNoaWxkcmVuPzogUmVhY3QuTm9kZSxcbiAgaGl0U2xvcD86ID9FZGdlSW5zZXRzUHJvcCxcbiAgb25QcmVzcz86ID8oZXZlbnQ6IFByZXNzRXZlbnQpID0+IHZvaWQsXG4gIHN0eWxlPzogVmlld1N0eWxlUHJvcCxcbnx9PjtcblxuZnVuY3Rpb24gTG9nQm94QnV0dG9uKHByb3BzOiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbcHJlc3NlZCwgc2V0UHJlc3NlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgbGV0IGJhY2tncm91bmRDb2xvciA9IHByb3BzLmJhY2tncm91bmRDb2xvcjtcbiAgaWYgKCFiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3IgPSB7XG4gICAgICBkZWZhdWx0OiBMb2dCb3hTdHlsZS5nZXRCYWNrZ3JvdW5kQ29sb3IoMC45NSksXG4gICAgICBwcmVzc2VkOiBMb2dCb3hTdHlsZS5nZXRCYWNrZ3JvdW5kQ29sb3IoMC42KSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8Vmlld1xuICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShcbiAgICAgICAge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJlc3NlZFxuICAgICAgICAgICAgPyBiYWNrZ3JvdW5kQ29sb3IucHJlc3NlZFxuICAgICAgICAgICAgOiBiYWNrZ3JvdW5kQ29sb3IuZGVmYXVsdCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHMuc3R5bGUsXG4gICAgICApfT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1ZpZXc+XG4gICk7XG5cbiAgcmV0dXJuIHByb3BzLm9uUHJlc3MgPT0gbnVsbCA/IChcbiAgICBjb250ZW50XG4gICkgOiAoXG4gICAgPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFja1xuICAgICAgaGl0U2xvcD17cHJvcHMuaGl0U2xvcH1cbiAgICAgIG9uUHJlc3M9e3Byb3BzLm9uUHJlc3N9XG4gICAgICBvblByZXNzSW49eygpID0+IHNldFByZXNzZWQodHJ1ZSl9XG4gICAgICBvblByZXNzT3V0PXsoKSA9PiBzZXRQcmVzc2VkKGZhbHNlKX0+XG4gICAgICB7Y29udGVudH1cbiAgICA8L1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nQm94QnV0dG9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQWNjZXNzaWJpbGl0eUFjdGlvbkV2ZW50LFxuICBBY2Nlc3NpYmlsaXR5QWN0aW9uSW5mbyxcbiAgQWNjZXNzaWJpbGl0eVJvbGUsXG4gIEFjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgQWNjZXNzaWJpbGl0eVZhbHVlLFxufSBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlld0FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHR5cGUge0VkZ2VJbnNldHNPclNpemVQcm9wfSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L0VkZ2VJbnNldHNQcm9wVHlwZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEJsdXJFdmVudCxcbiAgRm9jdXNFdmVudCxcbiAgTGF5b3V0RXZlbnQsXG4gIFByZXNzRXZlbnQsXG59IGZyb20gJy4uLy4uL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IFZpZXcgZnJvbSAnLi4vLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IFByZXNzYWJpbGl0eSwge1xuICB0eXBlIFByZXNzYWJpbGl0eUNvbmZpZyxcbn0gZnJvbSAnLi4vLi4vUHJlc3NhYmlsaXR5L1ByZXNzYWJpbGl0eSc7XG5pbXBvcnQge1ByZXNzYWJpbGl0eURlYnVnVmlld30gZnJvbSAnLi4vLi4vUHJlc3NhYmlsaXR5L1ByZXNzYWJpbGl0eURlYnVnJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz86ID8kUmVhZE9ubHlBcnJheTxBY2Nlc3NpYmlsaXR5QWN0aW9uSW5mbz4sXG4gIGFjY2Vzc2liaWxpdHlFbGVtZW50c0hpZGRlbj86ID9ib29sZWFuLFxuICBhY2Nlc3NpYmlsaXR5SGludD86ID9TdHJpbmdpc2gsXG4gIGFjY2Vzc2liaWxpdHlMYW5ndWFnZT86ID9TdHJpbmdpc2gsXG4gIGFjY2Vzc2liaWxpdHlJZ25vcmVzSW52ZXJ0Q29sb3JzPzogP2Jvb2xlYW4sXG4gIGFjY2Vzc2liaWxpdHlMYWJlbD86ID9TdHJpbmdpc2gsXG4gIGFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uPzogPygnbm9uZScgfCAncG9saXRlJyB8ICdhc3NlcnRpdmUnKSxcbiAgYWNjZXNzaWJpbGl0eVJvbGU/OiA/QWNjZXNzaWJpbGl0eVJvbGUsXG4gIGFjY2Vzc2liaWxpdHlTdGF0ZT86ID9BY2Nlc3NpYmlsaXR5U3RhdGUsXG4gIGFjY2Vzc2liaWxpdHlWYWx1ZT86ID9BY2Nlc3NpYmlsaXR5VmFsdWUsXG4gICdhcmlhLXZhbHVlbWF4Jz86IEFjY2Vzc2liaWxpdHlWYWx1ZVsnbWF4J10sXG4gICdhcmlhLXZhbHVlbWluJz86IEFjY2Vzc2liaWxpdHlWYWx1ZVsnbWluJ10sXG4gICdhcmlhLXZhbHVlbm93Jz86IEFjY2Vzc2liaWxpdHlWYWx1ZVsnbm93J10sXG4gICdhcmlhLXZhbHVldGV4dCc/OiBBY2Nlc3NpYmlsaXR5VmFsdWVbJ3RleHQnXSxcbiAgYWNjZXNzaWJpbGl0eVZpZXdJc01vZGFsPzogP2Jvb2xlYW4sXG4gICdhcmlhLW1vZGFsJz86ID9ib29sZWFuLFxuICBhY2Nlc3NpYmxlPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBhbGlhcyBmb3IgYWNjZXNzaWJpbGl0eVN0YXRlXG4gICAqXG4gICAqIHNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjY2Vzc2liaWxpdHkjYWNjZXNzaWJpbGl0eXN0YXRlXG4gICAqL1xuICAnYXJpYS1idXN5Jz86ID9ib29sZWFuLFxuICAnYXJpYS1jaGVja2VkJz86ID9ib29sZWFuIHwgJ21peGVkJyxcbiAgJ2FyaWEtZGlzYWJsZWQnPzogP2Jvb2xlYW4sXG4gICdhcmlhLWV4cGFuZGVkJz86ID9ib29sZWFuLFxuICAnYXJpYS1zZWxlY3RlZCc/OiA/Ym9vbGVhbixcbiAgJ2FyaWEtaGlkZGVuJz86ID9ib29sZWFuLFxuICAnYXJpYS1saXZlJz86ID8oJ3BvbGl0ZScgfCAnYXNzZXJ0aXZlJyB8ICdvZmYnKSxcbiAgJ2FyaWEtbGFiZWwnPzogP1N0cmluZ2lzaCxcbiAgY2hpbGRyZW4/OiA/UmVhY3QuTm9kZSxcbiAgZGVsYXlMb25nUHJlc3M/OiA/bnVtYmVyLFxuICBkZWxheVByZXNzSW4/OiA/bnVtYmVyLFxuICBkZWxheVByZXNzT3V0PzogP251bWJlcixcbiAgZGlzYWJsZWQ/OiA/Ym9vbGVhbixcbiAgZm9jdXNhYmxlPzogP2Jvb2xlYW4sXG4gIGhpdFNsb3A/OiA/RWRnZUluc2V0c09yU2l6ZVByb3AsXG4gIGlkPzogc3RyaW5nLFxuICBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PzogPygnYXV0bycgfCAneWVzJyB8ICdubycgfCAnbm8taGlkZS1kZXNjZW5kYW50cycpLFxuICBuYXRpdmVJRD86ID9zdHJpbmcsXG4gIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj86ID8oZXZlbnQ6IEFjY2Vzc2liaWxpdHlBY3Rpb25FdmVudCkgPT4gbWl4ZWQsXG4gIG9uQmx1cj86ID8oZXZlbnQ6IEJsdXJFdmVudCkgPT4gbWl4ZWQsXG4gIG9uRm9jdXM/OiA/KGV2ZW50OiBGb2N1c0V2ZW50KSA9PiBtaXhlZCxcbiAgb25MYXlvdXQ/OiA/KGV2ZW50OiBMYXlvdXRFdmVudCkgPT4gbWl4ZWQsXG4gIG9uTG9uZ1ByZXNzPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG4gIG9uUHJlc3M/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcbiAgb25QcmVzc0luPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG4gIG9uUHJlc3NPdXQ/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcbiAgcHJlc3NSZXRlbnRpb25PZmZzZXQ/OiA/RWRnZUluc2V0c09yU2l6ZVByb3AsXG4gIHJlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9uPzogP2Jvb2xlYW4sXG4gIHRlc3RJRD86ID9zdHJpbmcsXG4gIHRvdWNoU291bmREaXNhYmxlZD86ID9ib29sZWFuLFxufH0+O1xuXG50eXBlIFN0YXRlID0gJFJlYWRPbmx5PHt8XG4gIHByZXNzYWJpbGl0eTogUHJlc3NhYmlsaXR5LFxufH0+O1xuXG5jb25zdCBQQVNTVEhST1VHSF9QUk9QUyA9IFtcbiAgJ2FjY2Vzc2liaWxpdHlBY3Rpb25zJyxcbiAgJ2FjY2Vzc2liaWxpdHlFbGVtZW50c0hpZGRlbicsXG4gICdhY2Nlc3NpYmlsaXR5SGludCcsXG4gICdhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2UnLFxuICAnYWNjZXNzaWJpbGl0eUlnbm9yZXNJbnZlcnRDb2xvcnMnLFxuICAnYWNjZXNzaWJpbGl0eUxhYmVsJyxcbiAgJ2FjY2Vzc2liaWxpdHlMaXZlUmVnaW9uJyxcbiAgJ2FjY2Vzc2liaWxpdHlSb2xlJyxcbiAgJ2FjY2Vzc2liaWxpdHlWYWx1ZScsXG4gICdhcmlhLXZhbHVlbWF4JyxcbiAgJ2FyaWEtdmFsdWVtaW4nLFxuICAnYXJpYS12YWx1ZW5vdycsXG4gICdhcmlhLXZhbHVldGV4dCcsXG4gICdhY2Nlc3NpYmlsaXR5Vmlld0lzTW9kYWwnLFxuICAnYXJpYS1tb2RhbCcsXG4gICdoaXRTbG9wJyxcbiAgJ2ltcG9ydGFudEZvckFjY2Vzc2liaWxpdHknLFxuICAnbmF0aXZlSUQnLFxuICAnb25BY2Nlc3NpYmlsaXR5QWN0aW9uJyxcbiAgJ29uQmx1cicsXG4gICdvbkZvY3VzJyxcbiAgJ29uTGF5b3V0JyxcbiAgJ3Rlc3RJRCcsXG5dO1xuXG5jbGFzcyBUb3VjaGFibGVXaXRob3V0RmVlZGJhY2sgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICBwcmVzc2FiaWxpdHk6IG5ldyBQcmVzc2FiaWxpdHkoY3JlYXRlUHJlc3NhYmlsaXR5Q29uZmlnKHRoaXMucHJvcHMpKSxcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IFJlYWN0LkNoaWxkcmVuLm9ubHk8JEZsb3dGaXhNZT4odGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgY29uc3QgY2hpbGRyZW46IEFycmF5PFJlYWN0Lk5vZGU+ID0gW2VsZW1lbnQucHJvcHMuY2hpbGRyZW5dO1xuICAgIGNvbnN0IGFyaWFMaXZlID0gdGhpcy5wcm9wc1snYXJpYS1saXZlJ107XG5cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVmlldykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgIDxQcmVzc2FiaWxpdHlEZWJ1Z1ZpZXcgY29sb3I9XCJyZWRcIiBoaXRTbG9wPXt0aGlzLnByb3BzLmhpdFNsb3B9IC8+LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBfYWNjZXNzaWJpbGl0eVN0YXRlID0ge1xuICAgICAgYnVzeTogdGhpcy5wcm9wc1snYXJpYS1idXN5J10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmJ1c3ksXG4gICAgICBjaGVja2VkOlxuICAgICAgICB0aGlzLnByb3BzWydhcmlhLWNoZWNrZWQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlTdGF0ZT8uY2hlY2tlZCxcbiAgICAgIGRpc2FibGVkOlxuICAgICAgICB0aGlzLnByb3BzWydhcmlhLWRpc2FibGVkJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmRpc2FibGVkLFxuICAgICAgZXhwYW5kZWQ6XG4gICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtZXhwYW5kZWQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlTdGF0ZT8uZXhwYW5kZWQsXG4gICAgICBzZWxlY3RlZDpcbiAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1zZWxlY3RlZCddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5zZWxlY3RlZCxcbiAgICB9O1xuXG4gICAgLy8gQkFDS1dBUkQtQ09NUEFUSUJJTElUWTogRm9jdXMgYW5kIGJsdXIgZXZlbnRzIHdlcmUgbmV2ZXIgc3VwcG9ydGVkIGJlZm9yZVxuICAgIC8vIGFkb3B0aW5nIGBQcmVzc2FiaWxpdHlgLCBzbyBwcmVzZXJ2ZSB0aGF0IGJlaGF2aW9yLlxuICAgIGNvbnN0IHtvbkJsdXIsIG9uRm9jdXMsIC4uLmV2ZW50SGFuZGxlcnNXaXRob3V0Qmx1ckFuZEZvY3VzfSA9XG4gICAgICB0aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5nZXRFdmVudEhhbmRsZXJzKCk7XG5cbiAgICBjb25zdCBlbGVtZW50UHJvcHM6IHtbc3RyaW5nXTogbWl4ZWQsIC4uLn0gPSB7XG4gICAgICAuLi5ldmVudEhhbmRsZXJzV2l0aG91dEJsdXJBbmRGb2N1cyxcbiAgICAgIGFjY2Vzc2libGU6IHRoaXMucHJvcHMuYWNjZXNzaWJsZSAhPT0gZmFsc2UsXG4gICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU6XG4gICAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgIT0gbnVsbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5fYWNjZXNzaWJpbGl0eVN0YXRlLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IF9hY2Nlc3NpYmlsaXR5U3RhdGUsXG4gICAgICBmb2N1c2FibGU6XG4gICAgICAgIHRoaXMucHJvcHMuZm9jdXNhYmxlICE9PSBmYWxzZSAmJiB0aGlzLnByb3BzLm9uUHJlc3MgIT09IHVuZGVmaW5lZCxcblxuICAgICAgYWNjZXNzaWJpbGl0eUVsZW1lbnRzSGlkZGVuOlxuICAgICAgICB0aGlzLnByb3BzWydhcmlhLWhpZGRlbiddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eUVsZW1lbnRzSGlkZGVuLFxuICAgICAgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eTpcbiAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1oaWRkZW4nXSA9PT0gdHJ1ZVxuICAgICAgICAgID8gJ25vLWhpZGUtZGVzY2VuZGFudHMnXG4gICAgICAgICAgOiB0aGlzLnByb3BzLmltcG9ydGFudEZvckFjY2Vzc2liaWxpdHksXG4gICAgICBhY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbjpcbiAgICAgICAgYXJpYUxpdmUgPT09ICdvZmYnXG4gICAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgICA6IGFyaWFMaXZlID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eUxpdmVSZWdpb24sXG4gICAgICBuYXRpdmVJRDogdGhpcy5wcm9wcy5pZCA/PyB0aGlzLnByb3BzLm5hdGl2ZUlELFxuICAgIH07XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFBBU1NUSFJPVUdIX1BST1BTKSB7XG4gICAgICBpZiAodGhpcy5wcm9wc1twcm9wXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVsZW1lbnRQcm9wc1twcm9wXSA9IHRoaXMucHJvcHNbcHJvcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnRQcm9wcywgLi4uY2hpbGRyZW4pO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUucHJlc3NhYmlsaXR5LmNvbmZpZ3VyZShjcmVhdGVQcmVzc2FiaWxpdHlDb25maWcodGhpcy5wcm9wcykpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKTogbWl4ZWQge1xuICAgIHRoaXMuc3RhdGUucHJlc3NhYmlsaXR5LmNvbmZpZ3VyZShjcmVhdGVQcmVzc2FiaWxpdHlDb25maWcodGhpcy5wcm9wcykpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5wcmVzc2FiaWxpdHkucmVzZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQcmVzc2FiaWxpdHlDb25maWcoe1xuICAnYXJpYS1kaXNhYmxlZCc6IGFyaWFEaXNhYmxlZCxcbiAgLi4ucHJvcHNcbn06IFByb3BzKTogUHJlc3NhYmlsaXR5Q29uZmlnIHtcbiAgY29uc3QgYWNjZXNzaWJpbGl0eVN0YXRlRGlzYWJsZWQgPVxuICAgIGFyaWFEaXNhYmxlZCA/PyBwcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmRpc2FibGVkO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbGFibGU6ICFwcm9wcy5yZWplY3RSZXNwb25kZXJUZXJtaW5hdGlvbixcbiAgICBkaXNhYmxlZDpcbiAgICAgIHByb3BzLmRpc2FibGVkICE9PSBudWxsID8gcHJvcHMuZGlzYWJsZWQgOiBhY2Nlc3NpYmlsaXR5U3RhdGVEaXNhYmxlZCxcbiAgICBoaXRTbG9wOiBwcm9wcy5oaXRTbG9wLFxuICAgIGRlbGF5TG9uZ1ByZXNzOiBwcm9wcy5kZWxheUxvbmdQcmVzcyxcbiAgICBkZWxheVByZXNzSW46IHByb3BzLmRlbGF5UHJlc3NJbixcbiAgICBkZWxheVByZXNzT3V0OiBwcm9wcy5kZWxheVByZXNzT3V0LFxuICAgIG1pblByZXNzRHVyYXRpb246IDAsXG4gICAgcHJlc3NSZWN0T2Zmc2V0OiBwcm9wcy5wcmVzc1JldGVudGlvbk9mZnNldCxcbiAgICBhbmRyb2lkX2Rpc2FibGVTb3VuZDogcHJvcHMudG91Y2hTb3VuZERpc2FibGVkLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25Mb25nUHJlc3M6IHByb3BzLm9uTG9uZ1ByZXNzLFxuICAgIG9uUHJlc3M6IHByb3BzLm9uUHJlc3MsXG4gICAgb25QcmVzc0luOiBwcm9wcy5vblByZXNzSW4sXG4gICAgb25QcmVzc091dDogcHJvcHMub25QcmVzc091dCxcbiAgfTtcbn1cblxuVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrLmRpc3BsYXlOYW1lID0gJ1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayc7XG5cbm1vZHVsZS5leHBvcnRzID0gVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrZ3JvdW5kQ29sb3Iob3BhY2l0eT86IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSg1MSwgNTEsIDUxLCAke29wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja2dyb3VuZExpZ2h0Q29sb3Iob3BhY2l0eT86IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSg2OSwgNjksIDY5LCAke29wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja2dyb3VuZERhcmtDb2xvcihvcGFjaXR5PzogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGByZ2JhKDM0LCAzNCwgMzQsICR7b3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHl9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYXJuaW5nQ29sb3Iob3BhY2l0eT86IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSgyNTAsIDE4NiwgNDgsICR7b3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHl9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYXJuaW5nRGFya0NvbG9yKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYHJnYmEoMjI0LCAxNjcsIDgsICR7b3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHl9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGYXRhbENvbG9yKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYHJnYmEoMjQzLCA4MywgMTA1LCAke29wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmF0YWxEYXJrQ29sb3Iob3BhY2l0eT86IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSgyMDgsIDc1LCA5NSwgJHtvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yQ29sb3Iob3BhY2l0eT86IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSgyNDMsIDgzLCAxMDUsICR7b3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHl9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvckRhcmtDb2xvcihvcGFjaXR5PzogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGByZ2JhKDIwOCwgNzUsIDk1LCAke29wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nQ29sb3Iob3BhY2l0eT86IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSgxMTksIDExOSwgMTE5LCAke29wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2FybmluZ0hpZ2hsaWdodENvbG9yKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYHJnYmEoMjUyLCAxNzYsIDI5LCAke29wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGl2aWRlckNvbG9yKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYHJnYmEoMjU1LCAyNTUsIDI1NSwgJHtvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZ2hsaWdodENvbG9yKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYHJnYmEoMjUyLCAxNzYsIDI5LCAke29wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dENvbG9yKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYHJnYmEoMjU1LCAyNTUsIDI1NSwgJHtvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eX0pYDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VGV4dFN0eWxlUHJvcH0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtNZXNzYWdlfSBmcm9tICcuLi9EYXRhL3BhcnNlTG9nQm94TG9nJztcblxuaW1wb3J0IExpbmtpbmcgZnJvbSAnLi4vLi4vTGlua2luZy9MaW5raW5nJztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICBtZXNzYWdlOiBNZXNzYWdlLFxuICBzdHlsZTogVGV4dFN0eWxlUHJvcCxcbiAgcGxhaW50ZXh0PzogP2Jvb2xlYW4sXG4gIG1heExlbmd0aD86ID9udW1iZXIsXG4gIC4uLlxufTtcblxudHlwZSBSYW5nZSA9IHtcbiAgbG93ZXJCb3VuZDogbnVtYmVyLFxuICB1cHBlckJvdW5kOiBudW1iZXIsXG59O1xuXG5mdW5jdGlvbiBnZXRMaW5rUmFuZ2VzKHN0cmluZzogc3RyaW5nKTogJFJlYWRPbmx5QXJyYXk8UmFuZ2U+IHtcbiAgY29uc3QgcmVnZXggPSAvaHR0cHM/OlxcL1xcL1teXFxzJC4/I10uW15cXHNdKi9naTtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuXG4gIGxldCByZWdleFJlc3VsdDogUmVnRXhwJG1hdGNoUmVzdWx0IHwgbnVsbDtcbiAgd2hpbGUgKChyZWdleFJlc3VsdCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKSkgIT09IG51bGwpIHtcbiAgICBpZiAocmVnZXhSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgbG93ZXJCb3VuZDogcmVnZXhSZXN1bHQuaW5kZXgsXG4gICAgICAgIHVwcGVyQm91bmQ6IHJlZ2V4Lmxhc3RJbmRleCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBUYXBwYWJsZUxpbmtzKHByb3BzOiB7XG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgc3R5bGU6IHZvaWQgfCBUZXh0U3R5bGVQcm9wLFxufSk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBtYXRjaGVzID0gZ2V0TGlua1Jhbmdlcyhwcm9wcy5jb250ZW50KTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyBVUkxzIGRldGVjdGVkLiBKdXN0IHJldHVybiB0aGUgY29udGVudC5cbiAgICByZXR1cm4gPFRleHQgc3R5bGU9e3Byb3BzLnN0eWxlfT57cHJvcHMuY29udGVudH08L1RleHQ+O1xuICB9XG5cbiAgLy8gVVJMcyB3ZXJlIGRldGVjdGVkLiBDb25zdHJ1Y3QgYXJyYXkgb2YgVGV4dCBub2Rlcy5cblxuICBsZXQgZnJhZ21lbnRzOiBBcnJheTxSZWFjdC5Ob2RlPiA9IFtdO1xuICBsZXQgaW5kZXhDb3VudGVyID0gMDtcbiAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuXG4gIGZvciAoY29uc3QgbGlua1JhbmdlIG9mIG1hdGNoZXMpIHtcbiAgICBpZiAoc3RhcnRJbmRleCA8IGxpbmtSYW5nZS5sb3dlckJvdW5kKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gcHJvcHMuY29udGVudC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgbGlua1JhbmdlLmxvd2VyQm91bmQpO1xuICAgICAgZnJhZ21lbnRzLnB1c2goPFRleHQga2V5PXsrK2luZGV4Q291bnRlcn0+e3RleHR9PC9UZXh0Pik7XG4gICAgfVxuXG4gICAgY29uc3QgbGluayA9IHByb3BzLmNvbnRlbnQuc3Vic3RyaW5nKFxuICAgICAgbGlua1JhbmdlLmxvd2VyQm91bmQsXG4gICAgICBsaW5rUmFuZ2UudXBwZXJCb3VuZCxcbiAgICApO1xuICAgIGZyYWdtZW50cy5wdXNoKFxuICAgICAgPFRleHRcbiAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbdW51c2VkLXByb21pc2VdXG4gICAgICAgICAgTGlua2luZy5vcGVuVVJMKGxpbmspO1xuICAgICAgICB9fVxuICAgICAgICBrZXk9eysraW5kZXhDb3VudGVyfVxuICAgICAgICBzdHlsZT17c3R5bGVzLmxpbmtUZXh0fT5cbiAgICAgICAge2xpbmt9XG4gICAgICA8L1RleHQ+LFxuICAgICk7XG5cbiAgICBzdGFydEluZGV4ID0gbGlua1JhbmdlLnVwcGVyQm91bmQ7XG4gIH1cblxuICBpZiAoc3RhcnRJbmRleCA8IHByb3BzLmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3BzLmNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuICAgIGZyYWdtZW50cy5wdXNoKFxuICAgICAgPFRleHQga2V5PXsrK2luZGV4Q291bnRlcn0gc3R5bGU9e3Byb3BzLnN0eWxlfT5cbiAgICAgICAge3RleHR9XG4gICAgICA8L1RleHQ+LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gPFRleHQgc3R5bGU9e3Byb3BzLnN0eWxlfT57ZnJhZ21lbnRzfTwvVGV4dD47XG59XG5cbmNvbnN0IGNsZWFuQ29udGVudCA9IChjb250ZW50OiBzdHJpbmcpID0+XG4gIGNvbnRlbnQucmVwbGFjZSgvXihUcmFuc2Zvcm1FcnJvciB8V2FybmluZzogKFdhcm5pbmc6ICk/fEVycm9yOiApL2csICcnKTtcblxuZnVuY3Rpb24gTG9nQm94TWVzc2FnZShwcm9wczogUHJvcHMpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3Qge2NvbnRlbnQsIHN1YnN0aXR1dGlvbnN9OiBNZXNzYWdlID0gcHJvcHMubWVzc2FnZTtcblxuICBpZiAocHJvcHMucGxhaW50ZXh0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIDxUZXh0PntjbGVhbkNvbnRlbnQoY29udGVudCl9PC9UZXh0PjtcbiAgfVxuXG4gIGNvbnN0IG1heExlbmd0aCA9IHByb3BzLm1heExlbmd0aCAhPSBudWxsID8gcHJvcHMubWF4TGVuZ3RoIDogSW5maW5pdHk7XG4gIGNvbnN0IHN1YnN0aXR1dGlvblN0eWxlOiBUZXh0U3R5bGVQcm9wID0gcHJvcHMuc3R5bGU7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG4gIGxldCBsZW5ndGggPSAwO1xuICBjb25zdCBjcmVhdGVVbmRlckxlbmd0aCA9IChcbiAgICBrZXk6IHN0cmluZyB8ICRURU1QT1JBUlkkc3RyaW5nPCctMSc+LFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdHlsZTogdm9pZCB8IFRleHRTdHlsZVByb3AsXG4gICkgPT4ge1xuICAgIGxldCBjbGVhbk1lc3NhZ2UgPSBjbGVhbkNvbnRlbnQobWVzc2FnZSk7XG5cbiAgICBpZiAocHJvcHMubWF4TGVuZ3RoICE9IG51bGwpIHtcbiAgICAgIGNsZWFuTWVzc2FnZSA9IGNsZWFuTWVzc2FnZS5zbGljZSgwLCBwcm9wcy5tYXhMZW5ndGggLSBsZW5ndGgpO1xuICAgIH1cblxuICAgIGlmIChsZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgIDxUYXBwYWJsZUxpbmtzIGNvbnRlbnQ9e2NsZWFuTWVzc2FnZX0ga2V5PXtrZXl9IHN0eWxlPXtzdHlsZX0gLz4sXG4gICAgICApO1xuICAgIH1cblxuICAgIGxlbmd0aCArPSBjbGVhbk1lc3NhZ2UubGVuZ3RoO1xuICB9O1xuXG4gIGNvbnN0IGxhc3RPZmZzZXQgPSBzdWJzdGl0dXRpb25zLnJlZHVjZSgocHJldk9mZnNldCwgc3Vic3RpdHV0aW9uLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyhpbmRleCk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uLm9mZnNldCA+IHByZXZPZmZzZXQpIHtcbiAgICAgIGNvbnN0IHByZXZQYXJ0ID0gY29udGVudC5zbGljZShwcmV2T2Zmc2V0LCBzdWJzdGl0dXRpb24ub2Zmc2V0KTtcblxuICAgICAgY3JlYXRlVW5kZXJMZW5ndGgoa2V5LCBwcmV2UGFydCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uUGFydCA9IGNvbnRlbnQuc2xpY2UoXG4gICAgICBzdWJzdGl0dXRpb24ub2Zmc2V0LFxuICAgICAgc3Vic3RpdHV0aW9uLm9mZnNldCArIHN1YnN0aXR1dGlvbi5sZW5ndGgsXG4gICAgKTtcblxuICAgIGNyZWF0ZVVuZGVyTGVuZ3RoKGtleSArICcuNScsIHN1YnN0aXR1dGlvblBhcnQsIHN1YnN0aXR1dGlvblN0eWxlKTtcbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uLm9mZnNldCArIHN1YnN0aXR1dGlvbi5sZW5ndGg7XG4gIH0sIDApO1xuXG4gIGlmIChsYXN0T2Zmc2V0IDwgY29udGVudC5sZW5ndGgpIHtcbiAgICBjb25zdCBsYXN0UGFydCA9IGNvbnRlbnQuc2xpY2UobGFzdE9mZnNldCk7XG4gICAgY3JlYXRlVW5kZXJMZW5ndGgoJy0xJywgbGFzdFBhcnQpO1xuICB9XG5cbiAgcmV0dXJuIDw+e2VsZW1lbnRzfTwvPjtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBsaW5rVGV4dDoge1xuICAgIHRleHREZWNvcmF0aW9uTGluZTogJ3VuZGVybGluZScsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nQm94TWVzc2FnZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRTdWJzY3JpcHRpb259IGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbmltcG9ydCBOYXRpdmVFdmVudEVtaXR0ZXIgZnJvbSAnLi4vRXZlbnRFbWl0dGVyL05hdGl2ZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCBOYXRpdmVJbnRlbnRBbmRyb2lkIGZyb20gJy4vTmF0aXZlSW50ZW50QW5kcm9pZCc7XG5pbXBvcnQgTmF0aXZlTGlua2luZ01hbmFnZXIgZnJvbSAnLi9OYXRpdmVMaW5raW5nTWFuYWdlcic7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgbnVsbHRocm93cyBmcm9tICdudWxsdGhyb3dzJztcblxudHlwZSBMaW5raW5nRXZlbnREZWZpbml0aW9ucyA9IHtcbiAgdXJsOiBbe3VybDogc3RyaW5nfV0sXG59O1xuXG4vKipcbiAqIGBMaW5raW5nYCBnaXZlcyB5b3UgYSBnZW5lcmFsIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIGJvdGggaW5jb21pbmdcbiAqIGFuZCBvdXRnb2luZyBhcHAgbGlua3MuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbGlua2luZ1xuICovXG5jbGFzcyBMaW5raW5nIGV4dGVuZHMgTmF0aXZlRXZlbnRFbWl0dGVyPExpbmtpbmdFdmVudERlZmluaXRpb25zPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFBsYXRmb3JtLk9TID09PSAnaW9zJyA/IG51bGx0aHJvd3MoTmF0aXZlTGlua2luZ01hbmFnZXIpIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBoYW5kbGVyIHRvIExpbmtpbmcgY2hhbmdlcyBieSBsaXN0ZW5pbmcgdG8gdGhlIGB1cmxgIGV2ZW50IHR5cGVcbiAgICogYW5kIHByb3ZpZGluZyB0aGUgaGFuZGxlclxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9saW5raW5nI2FkZGV2ZW50bGlzdGVuZXJcbiAgICovXG4gIGFkZEV2ZW50TGlzdGVuZXI8SzogJEtleXM8TGlua2luZ0V2ZW50RGVmaW5pdGlvbnM+PihcbiAgICBldmVudFR5cGU6IEssXG4gICAgbGlzdGVuZXI6ICguLi4kRWxlbWVudFR5cGU8TGlua2luZ0V2ZW50RGVmaW5pdGlvbnMsIEs+KSA9PiBtaXhlZCxcbiAgICBjb250ZXh0OiAkRmxvd0ZpeE1lLFxuICApOiBFdmVudFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIG9wZW4gdGhlIGdpdmVuIGB1cmxgIHdpdGggYW55IG9mIHRoZSBpbnN0YWxsZWQgYXBwcy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbGlua2luZyNvcGVudXJsXG4gICAqL1xuICBvcGVuVVJMKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fdmFsaWRhdGVVUkwodXJsKTtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgcmV0dXJuIG51bGx0aHJvd3MoTmF0aXZlSW50ZW50QW5kcm9pZCkub3BlblVSTCh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbHRocm93cyhOYXRpdmVMaW5raW5nTWFuYWdlcikub3BlblVSTCh1cmwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgYW4gaW5zdGFsbGVkIGFwcCBjYW4gaGFuZGxlIGEgZ2l2ZW4gVVJMLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9saW5raW5nI2Nhbm9wZW51cmxcbiAgICovXG4gIGNhbk9wZW5VUkwodXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLl92YWxpZGF0ZVVSTCh1cmwpO1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICByZXR1cm4gbnVsbHRocm93cyhOYXRpdmVJbnRlbnRBbmRyb2lkKS5jYW5PcGVuVVJMKHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsdGhyb3dzKE5hdGl2ZUxpbmtpbmdNYW5hZ2VyKS5jYW5PcGVuVVJMKHVybCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYXBwIHNldHRpbmdzLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9saW5raW5nI29wZW5zZXR0aW5nc1xuICAgKi9cbiAgb3BlblNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICByZXR1cm4gbnVsbHRocm93cyhOYXRpdmVJbnRlbnRBbmRyb2lkKS5vcGVuU2V0dGluZ3MoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGx0aHJvd3MoTmF0aXZlTGlua2luZ01hbmFnZXIpLm9wZW5TZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgYXBwIGxhdW5jaCB3YXMgdHJpZ2dlcmVkIGJ5IGFuIGFwcCBsaW5rLFxuICAgKiBpdCB3aWxsIGdpdmUgdGhlIGxpbmsgdXJsLCBvdGhlcndpc2UgaXQgd2lsbCBnaXZlIGBudWxsYFxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9saW5raW5nI2dldGluaXRpYWx1cmxcbiAgICovXG4gIGdldEluaXRpYWxVUkwoKTogUHJvbWlzZTw/c3RyaW5nPiB7XG4gICAgcmV0dXJuIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCdcbiAgICAgID8gbnVsbHRocm93cyhOYXRpdmVJbnRlbnRBbmRyb2lkKS5nZXRJbml0aWFsVVJMKClcbiAgICAgIDogbnVsbHRocm93cyhOYXRpdmVMaW5raW5nTWFuYWdlcikuZ2V0SW5pdGlhbFVSTCgpO1xuICB9XG5cbiAgLypcbiAgICogTGF1bmNoIGFuIEFuZHJvaWQgaW50ZW50IHdpdGggZXh0cmFzIChvcHRpb25hbClcbiAgICpcbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbGlua2luZyNzZW5kaW50ZW50XG4gICAqL1xuICBzZW5kSW50ZW50KFxuICAgIGFjdGlvbjogc3RyaW5nLFxuICAgIGV4dHJhcz86IEFycmF5PHtcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sXG4gICAgICAuLi5cbiAgICB9PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIHJldHVybiBudWxsdGhyb3dzKE5hdGl2ZUludGVudEFuZHJvaWQpLnNlbmRJbnRlbnQoYWN0aW9uLCBleHRyYXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVqZWN0KG5ldyBFcnJvcignVW5zdXBwb3J0ZWQnKSkpO1xuICAgIH1cbiAgfVxuXG4gIF92YWxpZGF0ZVVSTCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnLFxuICAgICAgJ0ludmFsaWQgVVJMOiBzaG91bGQgYmUgYSBzdHJpbmcuIFdhczogJyArIHVybCxcbiAgICApO1xuICAgIGludmFyaWFudCh1cmwsICdJbnZhbGlkIFVSTDogY2Fubm90IGJlIGVtcHR5Jyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAobmV3IExpbmtpbmcoKTogTGlua2luZyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVJbnRlbnRBbmRyb2lkJztcbmltcG9ydCBOYXRpdmVJbnRlbnRBbmRyb2lkIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSW50ZW50QW5kcm9pZCc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVJbnRlbnRBbmRyb2lkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRJbml0aWFsVVJMOiAoKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICtjYW5PcGVuVVJMOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICtvcGVuVVJMOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gICtvcGVuU2V0dGluZ3M6ICgpID0+IFByb21pc2U8dm9pZD47XG4gICtzZW5kSW50ZW50OiAoXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgZXh0cmFzOiA/QXJyYXk8e1xuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiwgLy8gVE9ETyhUNjc2NzI3ODgpOiBVbmlvbiB0eXBlcyBhcmUgbm90IHR5cGUgc2FmZVxuICAgICAgLi4uXG4gICAgfT4sXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdJbnRlbnRBbmRyb2lkJyk6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUxpbmtpbmdNYW5hZ2VyJztcbmltcG9ydCBOYXRpdmVMaW5raW5nTWFuYWdlciBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUxpbmtpbmdNYW5hZ2VyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZUxpbmtpbmdNYW5hZ2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gIC8vIENvbW1vbiBpbnRlcmZhY2VcbiAgK2dldEluaXRpYWxVUkw6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgK2Nhbk9wZW5VUkw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgK29wZW5VUkw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgK29wZW5TZXR0aW5nczogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvLyBFdmVudHNcbiAgK2FkZExpc3RlbmVyOiAoZXZlbnROYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICtyZW1vdmVMaXN0ZW5lcnM6IChjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ0xpbmtpbmdNYW5hZ2VyJyk6ID9TcGVjKTtcbiIsIiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnQHJlYWN0LW5hdGl2ZS9hc3NldHMtcmVnaXN0cnkvcmVnaXN0cnknKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0luc3BlY3RlZFZpZXdSZWZ9IGZyb20gJy4uL1JlYWN0TmF0aXZlL0FwcENvbnRhaW5lci1kZXYnO1xuaW1wb3J0IHR5cGUge1xuICBJbnNwZWN0b3JEYXRhLFxuICBUb3VjaGVkVmlld0RhdGFBdFBvaW50LFxufSBmcm9tICcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtWaWV3U3R5bGVQcm9wfSBmcm9tICcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGV2VG9vbHNBZ2VudH0gZnJvbSAnLi4vVHlwZXMvUmVhY3REZXZUb29sc1R5cGVzJztcblxuY29uc3QgVmlldyA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3Jyk7XG5jb25zdCBQcmVzc2FiaWxpdHlEZWJ1ZyA9IHJlcXVpcmUoJy4uL1ByZXNzYWJpbGl0eS9QcmVzc2FiaWxpdHlEZWJ1ZycpO1xuY29uc3Qge2ZpbmROb2RlSGFuZGxlfSA9IHJlcXVpcmUoJy4uL1JlYWN0TmF0aXZlL1JlbmRlcmVyUHJveHknKTtcbmNvbnN0IFN0eWxlU2hlZXQgPSByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnKTtcbmNvbnN0IERpbWVuc2lvbnMgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvRGltZW5zaW9ucycpLmRlZmF1bHQ7XG5jb25zdCBQbGF0Zm9ybSA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9QbGF0Zm9ybScpO1xuY29uc3QgZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdBdFBvaW50ID0gcmVxdWlyZSgnLi9nZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQnKTtcbmNvbnN0IEluc3BlY3Rvck92ZXJsYXkgPSByZXF1aXJlKCcuL0luc3BlY3Rvck92ZXJsYXknKTtcbmNvbnN0IEluc3BlY3RvclBhbmVsID0gcmVxdWlyZSgnLi9JbnNwZWN0b3JQYW5lbCcpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG5jb25zdCB7dXNlU3RhdGV9ID0gUmVhY3Q7XG5cbnR5cGUgUGFuZWxQb3NpdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbSc7XG50eXBlIFNlbGVjdGVkVGFiID1cbiAgfCAnZWxlbWVudHMtaW5zcGVjdG9yJ1xuICB8ICduZXR3b3JrLXByb2ZpbGluZydcbiAgfCAncGVyZm9ybWFuY2UtcHJvZmlsaW5nJztcblxuZXhwb3J0IHR5cGUgSW5zcGVjdGVkRWxlbWVudEZyYW1lID0gVG91Y2hlZFZpZXdEYXRhQXRQb2ludFsnZnJhbWUnXTtcbmV4cG9ydCB0eXBlIEluc3BlY3RlZEVsZW1lbnQgPSAkUmVhZE9ubHk8e1xuICBmcmFtZTogSW5zcGVjdGVkRWxlbWVudEZyYW1lLFxuICBzdHlsZT86IFZpZXdTdHlsZVByb3AsXG59PjtcbmV4cG9ydCB0eXBlIEVsZW1lbnRzSGllcmFyY2h5ID0gSW5zcGVjdG9yRGF0YVsnaGllcmFyY2h5J107XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGluc3BlY3RlZFZpZXdSZWY6IEluc3BlY3RlZFZpZXdSZWYsXG4gIG9uUmVxdWVzdFJlcmVuZGVyQXBwOiAoKSA9PiB2b2lkLFxuICByZWFjdERldlRvb2xzQWdlbnQ/OiBSZWFjdERldlRvb2xzQWdlbnQsXG59O1xuXG5mdW5jdGlvbiBJbnNwZWN0b3Ioe1xuICBpbnNwZWN0ZWRWaWV3UmVmLFxuICBvblJlcXVlc3RSZXJlbmRlckFwcCxcbiAgcmVhY3REZXZUb29sc0FnZW50LFxufTogUHJvcHMpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW3NlbGVjdGVkVGFiLCBzZXRTZWxlY3RlZFRhYl0gPVxuICAgIHVzZVN0YXRlPD9TZWxlY3RlZFRhYj4oJ2VsZW1lbnRzLWluc3BlY3RvcicpO1xuXG4gIGNvbnN0IFtwYW5lbFBvc2l0aW9uLCBzZXRQYW5lbFBvc2l0aW9uXSA9IHVzZVN0YXRlPFBhbmVsUG9zaXRpb24+KCdib3R0b20nKTtcbiAgY29uc3QgW2luc3BlY3RlZEVsZW1lbnQsIHNldEluc3BlY3RlZEVsZW1lbnRdID1cbiAgICB1c2VTdGF0ZTw/SW5zcGVjdGVkRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtzZWxlY3Rpb25JbmRleCwgc2V0U2VsZWN0aW9uSW5kZXhdID0gdXNlU3RhdGU8P251bWJlcj4obnVsbCk7XG4gIGNvbnN0IFtlbGVtZW50c0hpZXJhcmNoeSwgc2V0RWxlbWVudHNIaWVyYXJjaHldID1cbiAgICB1c2VTdGF0ZTw/RWxlbWVudHNIaWVyYXJjaHk+KG51bGwpO1xuXG4gIGNvbnN0IHNldFNlbGVjdGlvbiA9IChpOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBoaWVyYXJjaHlJdGVtID0gZWxlbWVudHNIaWVyYXJjaHk/LltpXTtcbiAgICBpZiAoaGllcmFyY2h5SXRlbSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgcGFzcyBpbiBmaW5kTm9kZUhhbmRsZSBhcyB0aGUgbWV0aG9kIGlzIGluamVjdGVkXG4gICAgY29uc3Qge21lYXN1cmUsIHByb3BzfSA9IGhpZXJhcmNoeUl0ZW0uZ2V0SW5zcGVjdG9yRGF0YShmaW5kTm9kZUhhbmRsZSk7XG5cbiAgICBtZWFzdXJlKCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3ApID0+IHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIGBwcm9wc2AgZnJvbSBJbnNwZWN0b3JEYXRhIGFyZSBkZWZpbmVkIGFzIDxzdHJpbmcsIHN0cmluZz4gZGljdGlvbmFyeSwgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggVmlld1N0eWxlUHJvcFxuICAgICAgc2V0SW5zcGVjdGVkRWxlbWVudCh7XG4gICAgICAgIGZyYW1lOiB7bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0fSxcbiAgICAgICAgc3R5bGU6IHByb3BzLnN0eWxlLFxuICAgICAgfSk7XG5cbiAgICAgIHNldFNlbGVjdGlvbkluZGV4KGkpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9uVG91Y2hQb2ludCA9IChsb2NhdGlvblg6IG51bWJlciwgbG9jYXRpb25ZOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBzZXRUb3VjaGVkVmlld0RhdGEgPSAodmlld0RhdGE6IFRvdWNoZWRWaWV3RGF0YUF0UG9pbnQpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaGllcmFyY2h5LFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgZnJhbWUsXG4gICAgICAgIHBvaW50ZXJZLFxuICAgICAgICB0b3VjaGVkVmlld1RhZyxcbiAgICAgICAgY2xvc2VzdEluc3RhbmNlLFxuICAgICAgfSA9IHZpZXdEYXRhO1xuXG4gICAgICAvLyBTeW5jIHRoZSB0b3VjaGVkIHZpZXcgd2l0aCBSZWFjdCBEZXZUb29scy5cbiAgICAgIC8vIE5vdGU6IFRoaXMgaXMgUGFwZXIgb25seS4gVG8gc3VwcG9ydCBGYWJyaWMsXG4gICAgICAvLyBEZXZUb29scyBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIG5vdCByZWx5IG9uIHZpZXcgdGFncy5cbiAgICAgIGlmIChyZWFjdERldlRvb2xzQWdlbnQpIHtcbiAgICAgICAgcmVhY3REZXZUb29sc0FnZW50LnNlbGVjdE5vZGUoZmluZE5vZGVIYW5kbGUodG91Y2hlZFZpZXdUYWcpKTtcbiAgICAgICAgaWYgKGNsb3Nlc3RJbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgcmVhY3REZXZUb29sc0FnZW50LnNlbGVjdE5vZGUoY2xvc2VzdEluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRQYW5lbFBvc2l0aW9uKFxuICAgICAgICBwb2ludGVyWSA+IERpbWVuc2lvbnMuZ2V0KCd3aW5kb3cnKS5oZWlnaHQgLyAyID8gJ3RvcCcgOiAnYm90dG9tJyxcbiAgICAgICk7XG4gICAgICBzZXRTZWxlY3Rpb25JbmRleChzZWxlY3RlZEluZGV4KTtcbiAgICAgIHNldEVsZW1lbnRzSGllcmFyY2h5KGhpZXJhcmNoeSk7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBgcHJvcHNgIGZyb20gSW5zcGVjdG9yRGF0YSBhcmUgZGVmaW5lZCBhcyA8c3RyaW5nLCBzdHJpbmc+IGRpY3Rpb25hcnksIHdoaWNoIGlzIGluY29tcGF0aWJsZSB3aXRoIFZpZXdTdHlsZVByb3BcbiAgICAgIHNldEluc3BlY3RlZEVsZW1lbnQoe1xuICAgICAgICBmcmFtZSxcbiAgICAgICAgc3R5bGU6IHByb3BzLnN0eWxlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludChcbiAgICAgIGluc3BlY3RlZFZpZXdSZWYuY3VycmVudCxcbiAgICAgIGxvY2F0aW9uWCxcbiAgICAgIGxvY2F0aW9uWSxcbiAgICAgIHZpZXdEYXRhID0+IHtcbiAgICAgICAgc2V0VG91Y2hlZFZpZXdEYXRhKHZpZXdEYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHNldEluc3BlY3RpbmcgPSAoZW5hYmxlZDogYm9vbGVhbikgPT4ge1xuICAgIHNldFNlbGVjdGVkVGFiKGVuYWJsZWQgPyAnZWxlbWVudHMtaW5zcGVjdG9yJyA6IG51bGwpO1xuICAgIHNldEluc3BlY3RlZEVsZW1lbnQobnVsbCk7XG4gIH07XG5cbiAgY29uc3Qgc2V0UGVyZmluZyA9IChlbmFibGVkOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRUYWIoZW5hYmxlZCA/ICdwZXJmb3JtYW5jZS1wcm9maWxpbmcnIDogbnVsbCk7XG4gICAgc2V0SW5zcGVjdGVkRWxlbWVudChudWxsKTtcbiAgfTtcblxuICBjb25zdCBzZXROZXR3b3JraW5nID0gKGVuYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBzZXRTZWxlY3RlZFRhYihlbmFibGVkID8gJ25ldHdvcmstcHJvZmlsaW5nJyA6IG51bGwpO1xuICAgIHNldEluc3BlY3RlZEVsZW1lbnQobnVsbCk7XG4gIH07XG5cbiAgY29uc3Qgc2V0VG91Y2hUYXJnZXRpbmcgPSAodmFsOiBib29sZWFuKSA9PiB7XG4gICAgUHJlc3NhYmlsaXR5RGVidWcuc2V0RW5hYmxlZCh2YWwpO1xuICAgIG9uUmVxdWVzdFJlcmVuZGVyQXBwKCk7XG4gIH07XG5cbiAgY29uc3QgcGFuZWxDb250YWluZXJTdHlsZSA9XG4gICAgcGFuZWxQb3NpdGlvbiA9PT0gJ2JvdHRvbSdcbiAgICAgID8ge2JvdHRvbTogMH1cbiAgICAgIDogUGxhdGZvcm0uc2VsZWN0KHtpb3M6IHt0b3A6IDB9LCBkZWZhdWx0OiB7dG9wOiAwfX0pO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9IHBvaW50ZXJFdmVudHM9XCJib3gtbm9uZVwiPlxuICAgICAge3NlbGVjdGVkVGFiID09PSAnZWxlbWVudHMtaW5zcGVjdG9yJyAmJiAoXG4gICAgICAgIDxJbnNwZWN0b3JPdmVybGF5XG4gICAgICAgICAgaW5zcGVjdGVkPXtpbnNwZWN0ZWRFbGVtZW50fVxuICAgICAgICAgIG9uVG91Y2hQb2ludD17b25Ub3VjaFBvaW50fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMucGFuZWxDb250YWluZXIsIHBhbmVsQ29udGFpbmVyU3R5bGVdfT5cbiAgICAgICAgPEluc3BlY3RvclBhbmVsXG4gICAgICAgICAgZGV2dG9vbHNJc09wZW49eyEhcmVhY3REZXZUb29sc0FnZW50fVxuICAgICAgICAgIGluc3BlY3Rpbmc9e3NlbGVjdGVkVGFiID09PSAnZWxlbWVudHMtaW5zcGVjdG9yJ31cbiAgICAgICAgICBwZXJmaW5nPXtzZWxlY3RlZFRhYiA9PT0gJ3BlcmZvcm1hbmNlLXByb2ZpbGluZyd9XG4gICAgICAgICAgc2V0UGVyZmluZz17c2V0UGVyZmluZ31cbiAgICAgICAgICBzZXRJbnNwZWN0aW5nPXtzZXRJbnNwZWN0aW5nfVxuICAgICAgICAgIGluc3BlY3RlZD17aW5zcGVjdGVkRWxlbWVudH1cbiAgICAgICAgICBoaWVyYXJjaHk9e2VsZW1lbnRzSGllcmFyY2h5fVxuICAgICAgICAgIHNlbGVjdGlvbj17c2VsZWN0aW9uSW5kZXh9XG4gICAgICAgICAgc2V0U2VsZWN0aW9uPXtzZXRTZWxlY3Rpb259XG4gICAgICAgICAgdG91Y2hUYXJnZXRpbmc9e1ByZXNzYWJpbGl0eURlYnVnLmlzRW5hYmxlZCgpfVxuICAgICAgICAgIHNldFRvdWNoVGFyZ2V0aW5nPXtzZXRUb3VjaFRhcmdldGluZ31cbiAgICAgICAgICBuZXR3b3JraW5nPXtzZWxlY3RlZFRhYiA9PT0gJ25ldHdvcmstcHJvZmlsaW5nJ31cbiAgICAgICAgICBzZXROZXR3b3JraW5nPXtzZXROZXR3b3JraW5nfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICB9LFxuICBwYW5lbENvbnRhaW5lcjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnNwZWN0b3I7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQcmVzc0V2ZW50fSBmcm9tICcuLi9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SW5zcGVjdGVkRWxlbWVudH0gZnJvbSAnLi9JbnNwZWN0b3InO1xuXG5jb25zdCBWaWV3ID0gcmVxdWlyZSgnLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnKTtcbmNvbnN0IFN0eWxlU2hlZXQgPSByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnKTtcbmNvbnN0IEVsZW1lbnRCb3ggPSByZXF1aXJlKCcuL0VsZW1lbnRCb3gnKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBpbnNwZWN0ZWQ/OiA/SW5zcGVjdGVkRWxlbWVudCxcbiAgb25Ub3VjaFBvaW50OiAobG9jYXRpb25YOiBudW1iZXIsIGxvY2F0aW9uWTogbnVtYmVyKSA9PiB2b2lkLFxufH0+O1xuXG5mdW5jdGlvbiBJbnNwZWN0b3JPdmVybGF5KHtpbnNwZWN0ZWQsIG9uVG91Y2hQb2ludH06IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IGZpbmRWaWV3Rm9yVG91Y2hFdmVudCA9IChlOiBQcmVzc0V2ZW50KSA9PiB7XG4gICAgY29uc3Qge2xvY2F0aW9uWCwgbG9jYXRpb25ZfSA9IGUubmF0aXZlRXZlbnQudG91Y2hlc1swXTtcblxuICAgIG9uVG91Y2hQb2ludChsb2NhdGlvblgsIGxvY2F0aW9uWSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3RhcnRTaG91bGRTZXRSZXNwb25kZXIgPSAoZTogUHJlc3NFdmVudCk6IGJvb2xlYW4gPT4ge1xuICAgIGZpbmRWaWV3Rm9yVG91Y2hFdmVudChlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBsZXQgY29udGVudCA9IG51bGw7XG4gIGlmIChpbnNwZWN0ZWQpIHtcbiAgICBjb250ZW50ID0gPEVsZW1lbnRCb3ggZnJhbWU9e2luc3BlY3RlZC5mcmFtZX0gc3R5bGU9e2luc3BlY3RlZC5zdHlsZX0gLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxWaWV3XG4gICAgICBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyPXtoYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlcn1cbiAgICAgIG9uUmVzcG9uZGVyTW92ZT17ZmluZFZpZXdGb3JUb3VjaEV2ZW50fVxuICAgICAgbmF0aXZlSUQ9XCJpbnNwZWN0b3JPdmVybGF5XCIgLyogVE9ETzogVDY4MjU4ODQ2LiAqL1xuICAgICAgc3R5bGU9e3N0eWxlcy5pbnNwZWN0b3J9PlxuICAgICAge2NvbnRlbnR9XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGluc3BlY3Rvcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnNwZWN0b3JPdmVybGF5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0VsZW1lbnRzSGllcmFyY2h5LCBJbnNwZWN0ZWRFbGVtZW50fSBmcm9tICcuL0luc3BlY3Rvcic7XG5cbmltcG9ydCBTYWZlQXJlYVZpZXcgZnJvbSAnLi4vQ29tcG9uZW50cy9TYWZlQXJlYVZpZXcvU2FmZUFyZWFWaWV3JztcblxuY29uc3QgU2Nyb2xsVmlldyA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3Jyk7XG5jb25zdCBUb3VjaGFibGVIaWdobGlnaHQgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1RvdWNoYWJsZS9Ub3VjaGFibGVIaWdobGlnaHQnKTtcbmNvbnN0IFZpZXcgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1ZpZXcvVmlldycpO1xuY29uc3QgU3R5bGVTaGVldCA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCcpO1xuY29uc3QgVGV4dCA9IHJlcXVpcmUoJy4uL1RleHQvVGV4dCcpO1xuY29uc3QgRWxlbWVudFByb3BlcnRpZXMgPSByZXF1aXJlKCcuL0VsZW1lbnRQcm9wZXJ0aWVzJyk7XG5jb25zdCBOZXR3b3JrT3ZlcmxheSA9IHJlcXVpcmUoJy4vTmV0d29ya092ZXJsYXknKTtcbmNvbnN0IFBlcmZvcm1hbmNlT3ZlcmxheSA9IHJlcXVpcmUoJy4vUGVyZm9ybWFuY2VPdmVybGF5Jyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgZGV2dG9vbHNJc09wZW46IGJvb2xlYW4sXG4gIGluc3BlY3Rpbmc6IGJvb2xlYW4sXG4gIHNldEluc3BlY3Rpbmc6ICh2YWw6IGJvb2xlYW4pID0+IHZvaWQsXG4gIHBlcmZpbmc6IGJvb2xlYW4sXG4gIHNldFBlcmZpbmc6ICh2YWw6IGJvb2xlYW4pID0+IHZvaWQsXG4gIHRvdWNoVGFyZ2V0aW5nOiBib29sZWFuLFxuICBzZXRUb3VjaFRhcmdldGluZzogKHZhbDogYm9vbGVhbikgPT4gdm9pZCxcbiAgbmV0d29ya2luZzogYm9vbGVhbixcbiAgc2V0TmV0d29ya2luZzogKHZhbDogYm9vbGVhbikgPT4gdm9pZCxcbiAgaGllcmFyY2h5PzogP0VsZW1lbnRzSGllcmFyY2h5LFxuICBzZWxlY3Rpb24/OiA/bnVtYmVyLFxuICBzZXRTZWxlY3Rpb246IG51bWJlciA9PiBtaXhlZCxcbiAgaW5zcGVjdGVkPzogP0luc3BlY3RlZEVsZW1lbnQsXG58fT47XG5cbmNsYXNzIEluc3BlY3RvclBhbmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcldhaXRpbmcoKTogUmVhY3QuTm9kZSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaW5zcGVjdGluZykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy53YWl0aW5nVGV4dH0+VGFwIHNvbWV0aGluZyB0byBpbnNwZWN0IGl0PC9UZXh0PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxUZXh0IHN0eWxlPXtzdHlsZXMud2FpdGluZ1RleHR9Pk5vdGhpbmcgaXMgaW5zcGVjdGVkPC9UZXh0PjtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBsZXQgY29udGVudHM7XG4gICAgaWYgKHRoaXMucHJvcHMuaW5zcGVjdGVkKSB7XG4gICAgICBjb250ZW50cyA9IChcbiAgICAgICAgPFNjcm9sbFZpZXcgc3R5bGU9e3N0eWxlcy5wcm9wZXJ0aWVzfT5cbiAgICAgICAgICA8RWxlbWVudFByb3BlcnRpZXNcbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnByb3BzLmluc3BlY3RlZC5zdHlsZX1cbiAgICAgICAgICAgIGZyYW1lPXt0aGlzLnByb3BzLmluc3BlY3RlZC5mcmFtZX1cbiAgICAgICAgICAgIGhpZXJhcmNoeT17dGhpcy5wcm9wcy5oaWVyYXJjaHl9XG4gICAgICAgICAgICBzZWxlY3Rpb249e3RoaXMucHJvcHMuc2VsZWN0aW9ufVxuICAgICAgICAgICAgc2V0U2VsZWN0aW9uPXt0aGlzLnByb3BzLnNldFNlbGVjdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5wZXJmaW5nKSB7XG4gICAgICBjb250ZW50cyA9IDxQZXJmb3JtYW5jZU92ZXJsYXkgLz47XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLm5ldHdvcmtpbmcpIHtcbiAgICAgIGNvbnRlbnRzID0gPE5ldHdvcmtPdmVybGF5IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50cyA9IDxWaWV3IHN0eWxlPXtzdHlsZXMud2FpdGluZ30+e3RoaXMucmVuZGVyV2FpdGluZygpfTwvVmlldz47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U2FmZUFyZWFWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgeyF0aGlzLnByb3BzLmRldnRvb2xzSXNPcGVuICYmIGNvbnRlbnRzfVxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvblJvd30+XG4gICAgICAgICAgPEluc3BlY3RvclBhbmVsQnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17J0luc3BlY3QnfVxuICAgICAgICAgICAgcHJlc3NlZD17dGhpcy5wcm9wcy5pbnNwZWN0aW5nfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5zZXRJbnNwZWN0aW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEluc3BlY3RvclBhbmVsQnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17J1BlcmYnfVxuICAgICAgICAgICAgcHJlc3NlZD17dGhpcy5wcm9wcy5wZXJmaW5nfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5zZXRQZXJmaW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEluc3BlY3RvclBhbmVsQnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17J05ldHdvcmsnfVxuICAgICAgICAgICAgcHJlc3NlZD17dGhpcy5wcm9wcy5uZXR3b3JraW5nfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5zZXROZXR3b3JraW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEluc3BlY3RvclBhbmVsQnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17J1RvdWNoYWJsZXMnfVxuICAgICAgICAgICAgcHJlc3NlZD17dGhpcy5wcm9wcy50b3VjaFRhcmdldGluZ31cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuc2V0VG91Y2hUYXJnZXRpbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9TYWZlQXJlYVZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG50eXBlIEluc3BlY3RvclBhbmVsQnV0dG9uUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgb25DbGljazogKHZhbDogYm9vbGVhbikgPT4gdm9pZCxcbiAgcHJlc3NlZDogYm9vbGVhbixcbiAgdGl0bGU6IHN0cmluZyxcbnx9PjtcblxuY2xhc3MgSW5zcGVjdG9yUGFuZWxCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SW5zcGVjdG9yUGFuZWxCdXR0b25Qcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgb25QcmVzcz17KCkgPT4gdGhpcy5wcm9wcy5vbkNsaWNrKCF0aGlzLnByb3BzLnByZXNzZWQpfVxuICAgICAgICBzdHlsZT17W3N0eWxlcy5idXR0b24sIHRoaXMucHJvcHMucHJlc3NlZCAmJiBzdHlsZXMuYnV0dG9uUHJlc3NlZF19PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvblRleHR9Pnt0aGlzLnByb3BzLnRpdGxlfTwvVGV4dD5cbiAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBidXR0b25Sb3c6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjMpJyxcbiAgICBtYXJnaW46IDIsXG4gICAgaGVpZ2h0OiAzMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIGJ1dHRvblByZXNzZWQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICB9LFxuICBidXR0b25UZXh0OiB7XG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBtYXJnaW46IDUsXG4gIH0sXG4gIGNvbnRhaW5lcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC43KScsXG4gIH0sXG4gIHByb3BlcnRpZXM6IHtcbiAgICBoZWlnaHQ6IDIwMCxcbiAgfSxcbiAgd2FpdGluZzoge1xuICAgIGhlaWdodDogMTAwLFxuICB9LFxuICB3YWl0aW5nVGV4dDoge1xuICAgIGZvbnRTaXplOiAyMCxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIG1hcmdpblZlcnRpY2FsOiAyMCxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEluc3BlY3RvclBhbmVsO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5cbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi4vVmlldy9WaWV3JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBSZW5kZXJzIG5lc3RlZCBjb250ZW50IGFuZCBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgcGFkZGluZ3MgcmVmbGVjdCB0aGUgcG9ydGlvblxuICogb2YgdGhlIHZpZXcgdGhhdCBpcyBub3QgY292ZXJlZCBieSBuYXZpZ2F0aW9uIGJhcnMsIHRhYiBiYXJzLCB0b29sYmFycywgYW5kXG4gKiBvdGhlciBhbmNlc3RvciB2aWV3cy5cbiAqXG4gKiBNb3Jlb3ZlciwgYW5kIG1vc3QgaW1wb3J0YW50bHksIFNhZmUgQXJlYSdzIHBhZGRpbmdzIHJlZmxlY3QgcGh5c2ljYWxcbiAqIGxpbWl0YXRpb24gb2YgdGhlIHNjcmVlbiwgc3VjaCBhcyByb3VuZGVkIGNvcm5lcnMgb3IgY2FtZXJhIG5vdGNoZXMgKGFrYVxuICogc2Vuc29yIGhvdXNpbmcgYXJlYSBvbiBpUGhvbmUgWCkuXG4gKi9cbmNvbnN0IGV4cG9ydGVkOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxcbiAgVmlld1Byb3BzLFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBWaWV3Pixcbj4gPSBQbGF0Zm9ybS5zZWxlY3Qoe1xuICBpb3M6IHJlcXVpcmUoJy4vUkNUU2FmZUFyZWFWaWV3TmF0aXZlQ29tcG9uZW50JykuZGVmYXVsdCxcbiAgZGVmYXVsdDogVmlldyxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL1JDVFNhZmVBcmVhVmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgUkNUU2FmZUFyZWFWaWV3TmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvUkNUU2FmZUFyZWFWaWV3TmF0aXZlQ29tcG9uZW50JztcbmV4cG9ydCBkZWZhdWx0IFJDVFNhZmVBcmVhVmlld05hdGl2ZUNvbXBvbmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcblxuaW1wb3J0IGNvZGVnZW5OYXRpdmVDb21wb25lbnQgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1V0aWxpdGllcy9jb2RlZ2VuTmF0aXZlQ29tcG9uZW50JztcblxudHlwZSBOYXRpdmVQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi5WaWV3UHJvcHMsXG5cbiAgLy8gTm8gcHJvcHNcbnx9PjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvZGVnZW5OYXRpdmVDb21wb25lbnQ8TmF0aXZlUHJvcHM+KCdTYWZlQXJlYVZpZXcnLCB7XG4gIHBhcGVyQ29tcG9uZW50TmFtZTogJ1JDVFNhZmVBcmVhVmlldycsXG4gIGludGVyZmFjZU9ubHk6IHRydWUsXG59KTogSG9zdENvbXBvbmVudDxOYXRpdmVQcm9wcz4pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtIb3N0Q29tcG9uZW50fSBmcm9tICcuLi8uLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtFZGdlSW5zZXRzUHJvcH0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9FZGdlSW5zZXRzUHJvcFR5cGUnO1xuaW1wb3J0IHR5cGUge1BvaW50UHJvcH0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9Qb2ludFByb3BUeXBlJztcbmltcG9ydCB0eXBlIHtWaWV3U3R5bGVQcm9wfSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7XG4gIExheW91dEV2ZW50LFxuICBQcmVzc0V2ZW50LFxuICBTY3JvbGxFdmVudCxcbn0gZnJvbSAnLi4vLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuaW1wb3J0IHR5cGUge0V2ZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi8uLi92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuaW1wb3J0IHR5cGUge0tleWJvYXJkRXZlbnQsIEtleWJvYXJkTWV0cmljc30gZnJvbSAnLi4vS2V5Ym9hcmQvS2V5Ym9hcmQnO1xuaW1wb3J0IHR5cGUge1ZpZXdQcm9wc30gZnJvbSAnLi4vVmlldy9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCB0eXBlIHtQcm9wcyBhcyBTY3JvbGxWaWV3U3RpY2t5SGVhZGVyUHJvcHN9IGZyb20gJy4vU2Nyb2xsVmlld1N0aWNreUhlYWRlcic7XG5cbmltcG9ydCBBbmltYXRlZEltcGxlbWVudGF0aW9uIGZyb20gJy4uLy4uL0FuaW1hdGVkL0FuaW1hdGVkSW1wbGVtZW50YXRpb24nO1xuaW1wb3J0IEZyYW1lUmF0ZUxvZ2dlciBmcm9tICcuLi8uLi9JbnRlcmFjdGlvbi9GcmFtZVJhdGVMb2dnZXInO1xuaW1wb3J0IHtmaW5kTm9kZUhhbmRsZX0gZnJvbSAnLi4vLi4vUmVhY3ROYXRpdmUvUmVuZGVyZXJQcm94eSc7XG5pbXBvcnQgVUlNYW5hZ2VyIGZyb20gJy4uLy4uL1JlYWN0TmF0aXZlL1VJTWFuYWdlcic7XG5pbXBvcnQgZmxhdHRlblN0eWxlIGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvZmxhdHRlblN0eWxlJztcbmltcG9ydCBzcGxpdExheW91dFByb3BzIGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvc3BsaXRMYXlvdXRQcm9wcyc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IERpbWVuc2lvbnMgZnJvbSAnLi4vLi4vVXRpbGl0aWVzL0RpbWVuc2lvbnMnO1xuaW1wb3J0IGRpc21pc3NLZXlib2FyZCBmcm9tICcuLi8uLi9VdGlsaXRpZXMvZGlzbWlzc0tleWJvYXJkJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4uL0tleWJvYXJkL0tleWJvYXJkJztcbmltcG9ydCBUZXh0SW5wdXRTdGF0ZSBmcm9tICcuLi9UZXh0SW5wdXQvVGV4dElucHV0U3RhdGUnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi4vVmlldy9WaWV3JztcbmltcG9ydCBBbmRyb2lkSG9yaXpvbnRhbFNjcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50IGZyb20gJy4vQW5kcm9pZEhvcml6b250YWxTY3JvbGxDb250ZW50Vmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgQW5kcm9pZEhvcml6b250YWxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50IGZyb20gJy4vQW5kcm9pZEhvcml6b250YWxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBwcm9jZXNzRGVjZWxlcmF0aW9uUmF0ZSBmcm9tICcuL3Byb2Nlc3NEZWNlbGVyYXRpb25SYXRlJztcbmltcG9ydCBTY3JvbGxDb250ZW50Vmlld05hdGl2ZUNvbXBvbmVudCBmcm9tICcuL1Njcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBDb21tYW5kcyBmcm9tICcuL1Njcm9sbFZpZXdDb21tYW5kcyc7XG5pbXBvcnQgU2Nyb2xsVmlld0NvbnRleHQsIHtIT1JJWk9OVEFMLCBWRVJUSUNBTH0gZnJvbSAnLi9TY3JvbGxWaWV3Q29udGV4dCc7XG5pbXBvcnQgU2Nyb2xsVmlld05hdGl2ZUNvbXBvbmVudCBmcm9tICcuL1Njcm9sbFZpZXdOYXRpdmVDb21wb25lbnQnO1xuaW1wb3J0IFNjcm9sbFZpZXdTdGlja3lIZWFkZXIgZnJvbSAnLi9TY3JvbGxWaWV3U3RpY2t5SGVhZGVyJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCBudWxsdGhyb3dzIGZyb20gJ251bGx0aHJvd3MnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gIHJlcXVpcmUoJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlJyk7IC8vIEZvcmNlIHNpZGUgZWZmZWN0cyB0byBwcmV2ZW50IFQ1NTc0NDMxMVxufVxuXG5jb25zdCB7TmF0aXZlSG9yaXpvbnRhbFNjcm9sbFZpZXdUdXBsZSwgTmF0aXZlVmVydGljYWxTY3JvbGxWaWV3VHVwbGV9ID1cbiAgUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJ1xuICAgID8ge1xuICAgICAgICBOYXRpdmVIb3Jpem9udGFsU2Nyb2xsVmlld1R1cGxlOiBbXG4gICAgICAgICAgQW5kcm9pZEhvcml6b250YWxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50LFxuICAgICAgICAgIEFuZHJvaWRIb3Jpem9udGFsU2Nyb2xsQ29udGVudFZpZXdOYXRpdmVDb21wb25lbnQsXG4gICAgICAgIF0sXG4gICAgICAgIE5hdGl2ZVZlcnRpY2FsU2Nyb2xsVmlld1R1cGxlOiBbU2Nyb2xsVmlld05hdGl2ZUNvbXBvbmVudCwgVmlld10sXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIE5hdGl2ZUhvcml6b250YWxTY3JvbGxWaWV3VHVwbGU6IFtcbiAgICAgICAgICBTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50LFxuICAgICAgICAgIFNjcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50LFxuICAgICAgICBdLFxuICAgICAgICBOYXRpdmVWZXJ0aWNhbFNjcm9sbFZpZXdUdXBsZTogW1xuICAgICAgICAgIFNjcm9sbFZpZXdOYXRpdmVDb21wb25lbnQsXG4gICAgICAgICAgU2Nyb2xsQ29udGVudFZpZXdOYXRpdmVDb21wb25lbnQsXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4vKlxuICogaU9TIHNjcm9sbCBldmVudCB0aW1pbmcgbnVhbmNlczpcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKlxuICogU2Nyb2xsaW5nIHdpdGhvdXQgYm91bmNpbmcsIGlmIHlvdSB0b3VjaCBkb3duOlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIDEuIGBvbk1vbWVudHVtU2Nyb2xsQmVnaW5gICh3aGVuIGFuaW1hdGlvbiBiZWdpbnMgYWZ0ZXIgbGV0dGluZyB1cClcbiAqICAgIC4uLiBwaHlzaWNhbCB0b3VjaCBzdGFydHMgLi4uXG4gKiAyLiBgb25Ub3VjaFN0YXJ0Q2FwdHVyZWAgICAod2hlbiB5b3UgcHJlc3MgZG93biB0byBzdG9wIHRoZSBzY3JvbGwpXG4gKiAzLiBgb25Ub3VjaFN0YXJ0YCAgICAgICAgICAoc2FtZSwgYnV0IGJ1YmJsZSBwaGFzZSlcbiAqIDQuIGBvblJlc3BvbmRlclJlbGVhc2VgICAgICh3aGVuIGxpZnRpbmcgdXAgLSB5b3UgY291bGQgcGF1c2UgZm9yZXZlciBiZWZvcmUgKiBsaWZ0aW5nKVxuICogNS4gYG9uTW9tZW50dW1TY3JvbGxFbmRgXG4gKlxuICpcbiAqIFNjcm9sbGluZyB3aXRoIGJvdW5jaW5nLCBpZiB5b3UgdG91Y2ggZG93bjpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqXG4gKiAxLiBgb25Nb21lbnR1bVNjcm9sbEJlZ2luYCAod2hlbiBhbmltYXRpb24gYmVnaW5zIGFmdGVyIGxldHRpbmcgdXApXG4gKiAgICAuLi4gYm91bmNlIGJlZ2lucyAuLi5cbiAqICAgIC4uLiBzb21lIHRpbWUgZWxhcHNlcyAuLi5cbiAqICAgIC4uLiBwaHlzaWNhbCB0b3VjaCBkdXJpbmcgYm91bmNlIC4uLlxuICogMi4gYG9uTW9tZW50dW1TY3JvbGxFbmRgICAgKE1ha2VzIG5vIHNlbnNlIHdoeSB0aGlzIG9jY3VycyBmaXJzdCBkdXJpbmcgYm91bmNlKVxuICogMy4gYG9uVG91Y2hTdGFydENhcHR1cmVgICAgKGltbWVkaWF0ZWx5IGFmdGVyIGBvbk1vbWVudHVtU2Nyb2xsRW5kYClcbiAqIDQuIGBvblRvdWNoU3RhcnRgICAgICAgICAgIChzYW1lLCBidXQgYnViYmxlIHBoYXNlKVxuICogNS4gYG9uVG91Y2hFbmRgICAgICAgICAgICAgKFlvdSBjb3VsZCBob2xkIHRoZSB0b3VjaCBzdGFydCBmb3IgYSBsb25nIHRpbWUpXG4gKiA2LiBgb25Nb21lbnR1bVNjcm9sbEJlZ2luYCAoV2hlbiByZWxlYXNpbmcgdGhlIHZpZXcgc3RhcnRzIGJvdW5jaW5nIGJhY2spXG4gKlxuICogU28gd2hlbiB3ZSByZWNlaXZlIGFuIGBvblRvdWNoU3RhcnRgLCBob3cgY2FuIHdlIHRlbGwgaWYgd2UgYXJlIHRvdWNoaW5nXG4gKiAqZHVyaW5nKiBhbiBhbmltYXRpb24gKHdoaWNoIHRoZW4gY2F1c2VzIHRoZSBhbmltYXRpb24gdG8gc3RvcCk/IFRoZSBvbmx5IHdheVxuICogdG8gdGVsbCBpcyBpZiB0aGUgYHRvdWNoU3RhcnRgIG9jY3VycmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICogYG9uTW9tZW50dW1TY3JvbGxFbmRgLlxuICpcbiAqIFRoaXMgaXMgYWJzdHJhY3RlZCBvdXQgZm9yIHlvdSwgc28geW91IGNhbiBqdXN0IGNhbGwgdGhpcy5zY3JvbGxSZXNwb25kZXJJc0FuaW1hdGluZygpIGlmXG4gKiBuZWNlc3NhcnlcbiAqXG4gKiBgU2Nyb2xsVmlld2AgYWxzbyBpbmNsdWRlcyBsb2dpYyBmb3IgYmx1cnJpbmcgYSBjdXJyZW50bHkgZm9jdXNlZCBpbnB1dFxuICogaWYgb25lIGlzIGZvY3VzZWQgd2hpbGUgc2Nyb2xsaW5nLiBUaGlzIGlzIGEgbmF0dXJhbCBwbGFjZVxuICogdG8gcHV0IHRoaXMgbG9naWMgc2luY2UgaXQgY2FuIHN1cHBvcnQgbm90IGRpc21pc3NpbmcgdGhlIGtleWJvYXJkIHdoaWxlXG4gKiBzY3JvbGxpbmcsIHVubGVzcyBhIHJlY29nbml6ZWQgXCJ0YXBcIi1saWtlIGdlc3R1cmUgaGFzIG9jY3VycmVkLlxuICpcbiAqIFRoZSBwdWJsaWMgbGlmZWN5Y2xlIEFQSSBpbmNsdWRlcyBldmVudHMgZm9yIGtleWJvYXJkIGludGVyYWN0aW9uLCByZXNwb25kZXJcbiAqIGludGVyYWN0aW9uLCBhbmQgc2Nyb2xsaW5nIChhbW9uZyBvdGhlcnMpLiBUaGUga2V5Ym9hcmQgY2FsbGJhY2tzXG4gKiBgb25LZXlib2FyZFdpbGwvRGlkLypgIGFyZSAqZ2xvYmFsKiBldmVudHMsIGJ1dCBhcmUgaW52b2tlZCBvbiBzY3JvbGxcbiAqIHJlc3BvbmRlcidzIHByb3BzIHNvIHRoYXQgeW91IGNhbiBndWFyYW50ZWUgdGhhdCB0aGUgc2Nyb2xsIHJlc3BvbmRlcidzXG4gKiBpbnRlcm5hbCBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGFjY29yZGluZ2x5IChhbmQgZGV0ZXJtaW5pc3RpY2FsbHkpIGJ5XG4gKiB0aGUgdGltZSB0aGUgcHJvcHMgY2FsbGJhY2tzIGFyZSBpbnZva2UuIE90aGVyd2lzZSwgeW91IHdvdWxkIGFsd2F5cyB3b25kZXJcbiAqIGlmIHRoZSBzY3JvbGwgcmVzcG9uZGVyIGlzIGN1cnJlbnRseSBpbiBhIHN0YXRlIHdoZXJlIGl0IHJlY29nbml6ZXMgbmV3XG4gKiBrZXlib2FyZCBwb3NpdGlvbnMgZXRjLiBJZiBjb29yZGluYXRpbmcgc2Nyb2xsaW5nIHdpdGgga2V5Ym9hcmQgbW92ZW1lbnQsXG4gKiAqYWx3YXlzKiB1c2UgdGhlc2UgaG9va3MgaW5zdGVhZCBvZiBsaXN0ZW5pbmcgdG8geW91ciBvd24gZ2xvYmFsIGtleWJvYXJkXG4gKiBldmVudHMuXG4gKlxuICogUHVibGljIGtleWJvYXJkIGxpZmVjeWNsZSBBUEk6IChwcm9wcyBjYWxsYmFja3MpXG4gKlxuICogU3RhbmRhcmQgS2V5Ym9hcmQgQXBwZWFyYW5jZSBTZXF1ZW5jZTpcbiAqXG4gKiAgIHRoaXMucHJvcHMub25LZXlib2FyZFdpbGxTaG93XG4gKiAgIHRoaXMucHJvcHMub25LZXlib2FyZERpZFNob3dcbiAqXG4gKiBgb25TY3JvbGxSZXNwb25kZXJLZXlib2FyZERpc21pc3NlZGAgd2lsbCBiZSBpbnZva2VkIGlmIGFuIGFwcHJvcHJpYXRlXG4gKiB0YXAgaW5zaWRlIHRoZSBzY3JvbGwgcmVzcG9uZGVyJ3Mgc2Nyb2xsYWJsZSByZWdpb24gd2FzIHJlc3BvbnNpYmxlXG4gKiBmb3IgdGhlIGRpc21pc3NhbCBvZiB0aGUga2V5Ym9hcmQuIFRoZXJlIGFyZSBvdGhlciByZWFzb25zIHdoeSB0aGVcbiAqIGtleWJvYXJkIGNvdWxkIGJlIGRpc21pc3NlZC5cbiAqXG4gKiAgIHRoaXMucHJvcHMub25TY3JvbGxSZXNwb25kZXJLZXlib2FyZERpc21pc3NlZFxuICpcbiAqIFN0YW5kYXJkIEtleWJvYXJkIEhpZGUgU2VxdWVuY2U6XG4gKlxuICogICB0aGlzLnByb3BzLm9uS2V5Ym9hcmRXaWxsSGlkZVxuICogICB0aGlzLnByb3BzLm9uS2V5Ym9hcmREaWRIaWRlXG4gKi9cblxuLy8gUHVibGljIG1ldGhvZHMgZm9yIFNjcm9sbFZpZXdcbmV4cG9ydCB0eXBlIFNjcm9sbFZpZXdJbXBlcmF0aXZlTWV0aG9kcyA9ICRSZWFkT25seTx7fFxuICBnZXRTY3JvbGxSZXNwb25kZXI6ICRQcm9wZXJ0eVR5cGU8U2Nyb2xsVmlldywgJ2dldFNjcm9sbFJlc3BvbmRlcic+LFxuICBnZXRTY3JvbGxhYmxlTm9kZTogJFByb3BlcnR5VHlwZTxTY3JvbGxWaWV3LCAnZ2V0U2Nyb2xsYWJsZU5vZGUnPixcbiAgZ2V0SW5uZXJWaWV3Tm9kZTogJFByb3BlcnR5VHlwZTxTY3JvbGxWaWV3LCAnZ2V0SW5uZXJWaWV3Tm9kZSc+LFxuICBnZXRJbm5lclZpZXdSZWY6ICRQcm9wZXJ0eVR5cGU8U2Nyb2xsVmlldywgJ2dldElubmVyVmlld1JlZic+LFxuICBnZXROYXRpdmVTY3JvbGxSZWY6ICRQcm9wZXJ0eVR5cGU8U2Nyb2xsVmlldywgJ2dldE5hdGl2ZVNjcm9sbFJlZic+LFxuICBzY3JvbGxUbzogJFByb3BlcnR5VHlwZTxTY3JvbGxWaWV3LCAnc2Nyb2xsVG8nPixcbiAgc2Nyb2xsVG9FbmQ6ICRQcm9wZXJ0eVR5cGU8U2Nyb2xsVmlldywgJ3Njcm9sbFRvRW5kJz4sXG4gIGZsYXNoU2Nyb2xsSW5kaWNhdG9yczogJFByb3BlcnR5VHlwZTxTY3JvbGxWaWV3LCAnZmxhc2hTY3JvbGxJbmRpY2F0b3JzJz4sXG4gIHNjcm9sbFJlc3BvbmRlclpvb21UbzogJFByb3BlcnR5VHlwZTxTY3JvbGxWaWV3LCAnc2Nyb2xsUmVzcG9uZGVyWm9vbVRvJz4sXG4gIHNjcm9sbFJlc3BvbmRlclNjcm9sbE5hdGl2ZUhhbmRsZVRvS2V5Ym9hcmQ6ICRQcm9wZXJ0eVR5cGU8XG4gICAgU2Nyb2xsVmlldyxcbiAgICAnc2Nyb2xsUmVzcG9uZGVyU2Nyb2xsTmF0aXZlSGFuZGxlVG9LZXlib2FyZCcsXG4gID4sXG58fT47XG5cbmV4cG9ydCB0eXBlIERlY2VsZXJhdGlvblJhdGVUeXBlID0gJ2Zhc3QnIHwgJ25vcm1hbCcgfCBudW1iZXI7XG5leHBvcnQgdHlwZSBTY3JvbGxSZXNwb25kZXJUeXBlID0gU2Nyb2xsVmlld0ltcGVyYXRpdmVNZXRob2RzO1xuXG50eXBlIE5hdGl2ZVNjcm9sbFZpZXdJbnN0YW5jZSA9IFJlYWN0LkVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+O1xudHlwZSBQdWJsaWNTY3JvbGxWaWV3SW5zdGFuY2UgPSAkUmVhZE9ubHk8e3xcbiAgLi4uJEV4YWN0PE5hdGl2ZVNjcm9sbFZpZXdJbnN0YW5jZT4sXG4gIC4uLlNjcm9sbFZpZXdJbXBlcmF0aXZlTWV0aG9kcyxcbnx9PjtcblxudHlwZSBJbm5lclZpZXdJbnN0YW5jZSA9IFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFZpZXc+O1xuXG50eXBlIElPU1Byb3BzID0gJFJlYWRPbmx5PHt8XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGlPUyBzaG91bGQgYXV0b21hdGljYWxseSBhZGp1c3QgdGhlIGNvbnRlbnQgaW5zZXRcbiAgICogZm9yIHNjcm9sbCB2aWV3cyB0aGF0IGFyZSBwbGFjZWQgYmVoaW5kIGEgbmF2aWdhdGlvbiBiYXIgb3JcbiAgICogdGFiIGJhci8gdG9vbGJhci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgYXV0b21hdGljYWxseUFkanVzdENvbnRlbnRJbnNldHM/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIFNjcm9sbFZpZXcgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYWRqdXN0IGl0cyBgY29udGVudEluc2V0YFxuICAgKiBhbmQgYHNjcm9sbFZpZXdJbnNldHNgIHdoZW4gdGhlIEtleWJvYXJkIGNoYW5nZXMgaXRzIHNpemUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBhdXRvbWF0aWNhbGx5QWRqdXN0S2V5Ym9hcmRJbnNldHM/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgaU9TIHNob3VsZCBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgc2Nyb2xsIGluZGljYXRvclxuICAgKiBpbnNldHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuIEF2YWlsYWJsZSBvbiBpT1MgMTMgYW5kIGxhdGVyLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBhdXRvbWF0aWNhbGx5QWRqdXN0c1Njcm9sbEluZGljYXRvckluc2V0cz86ID9ib29sZWFuLFxuICAvKipcbiAgICogVGhlIGFtb3VudCBieSB3aGljaCB0aGUgc2Nyb2xsIHZpZXcgY29udGVudCBpcyBpbnNldCBmcm9tIHRoZSBlZGdlc1xuICAgKiBvZiB0aGUgc2Nyb2xsIHZpZXcuIERlZmF1bHRzIHRvIGB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwfWAuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIGNvbnRlbnRJbnNldD86ID9FZGdlSW5zZXRzUHJvcCxcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHNjcm9sbCB2aWV3IGJvdW5jZXMgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlXG4gICAqIGNvbnRlbnQgaWYgdGhlIGNvbnRlbnQgaXMgbGFyZ2VyIHRoZW4gdGhlIHNjcm9sbCB2aWV3IGFsb25nIHRoZSBheGlzIG9mXG4gICAqIHRoZSBzY3JvbGwgZGlyZWN0aW9uLiBXaGVuIGZhbHNlLCBpdCBkaXNhYmxlcyBhbGwgYm91bmNpbmcgZXZlbiBpZlxuICAgKiB0aGUgYGFsd2F5c0JvdW5jZSpgIHByb3BzIGFyZSB0cnVlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBib3VuY2VzPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCBTY3JvbGxWaWV3IGhhcyBhbiBhY3RpdmUgcGFuIHJlc3BvbmRlciB0aGF0IGhpamFja3MgcGFucmVzcG9uZGVyc1xuICAgKiBkZWVwZXIgaW4gdGhlIHJlbmRlciB0cmVlIGluIG9yZGVyIHRvIHByZXZlbnQgYWNjaWRlbnRhbCB0b3VjaGVzIHdoaWxlIHNjcm9sbGluZy5cbiAgICogSG93ZXZlciwgaW4gY2VydGFpbiBvY2Nhc2lvbnMgKHN1Y2ggYXMgd2hlbiB1c2luZyBzbmFwVG9JbnRlcnZhbCkgaW4gYSB2ZXJ0aWNhbCBzY3JvbGx2aWV3XG4gICAqIFlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IgaW4gb3JkZXIgdG8gcHJldmVudCB0aGUgU2Nyb2xsVmlldyBmcm9tIGJsb2NraW5nIHRvdWNoZXNcbiAgICovXG4gIGRpc2FibGVTY3JvbGxWaWV3UGFuUmVzcG9uZGVyPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGdlc3R1cmVzIGNhbiBkcml2ZSB6b29tIHBhc3QgbWluL21heCBhbmQgdGhlIHpvb20gd2lsbCBhbmltYXRlXG4gICAqIHRvIHRoZSBtaW4vbWF4IHZhbHVlIGF0IGdlc3R1cmUgZW5kLCBvdGhlcndpc2UgdGhlIHpvb20gd2lsbCBub3QgZXhjZWVkXG4gICAqIHRoZSBsaW1pdHMuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIGJvdW5jZXNab29tPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzY3JvbGwgdmlldyBib3VuY2VzIGhvcml6b250YWxseSB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZFxuICAgKiBldmVuIGlmIHRoZSBjb250ZW50IGlzIHNtYWxsZXIgdGhhbiB0aGUgc2Nyb2xsIHZpZXcgaXRzZWxmLiBUaGUgZGVmYXVsdFxuICAgKiB2YWx1ZSBpcyB0cnVlIHdoZW4gYGhvcml6b250YWw9e3RydWV9YCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBhbHdheXNCb3VuY2VIb3Jpem9udGFsPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzY3JvbGwgdmlldyBib3VuY2VzIHZlcnRpY2FsbHkgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmRcbiAgICogZXZlbiBpZiB0aGUgY29udGVudCBpcyBzbWFsbGVyIHRoYW4gdGhlIHNjcm9sbCB2aWV3IGl0c2VsZi4gVGhlIGRlZmF1bHRcbiAgICogdmFsdWUgaXMgZmFsc2Ugd2hlbiBgaG9yaXpvbnRhbD17dHJ1ZX1gIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgYWx3YXlzQm91bmNlVmVydGljYWw/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHNjcm9sbCB2aWV3IGF1dG9tYXRpY2FsbHkgY2VudGVycyB0aGUgY29udGVudCB3aGVuIHRoZVxuICAgKiBjb250ZW50IGlzIHNtYWxsZXIgdGhhbiB0aGUgc2Nyb2xsIHZpZXcgYm91bmRzOyB3aGVuIHRoZSBjb250ZW50IGlzXG4gICAqIGxhcmdlciB0aGFuIHRoZSBzY3JvbGwgdmlldywgdGhpcyBwcm9wZXJ0eSBoYXMgbm8gZWZmZWN0LiBUaGUgZGVmYXVsdFxuICAgKiB2YWx1ZSBpcyBmYWxzZS5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgY2VudGVyQ29udGVudD86ID9ib29sZWFuLFxuICAvKipcbiAgICogVGhlIHN0eWxlIG9mIHRoZSBzY3JvbGwgaW5kaWNhdG9ycy5cbiAgICpcbiAgICogICAtIGAnZGVmYXVsdCdgICh0aGUgZGVmYXVsdCksIHNhbWUgYXMgYGJsYWNrYC5cbiAgICogICAtIGAnYmxhY2snYCwgc2Nyb2xsIGluZGljYXRvciBpcyBibGFjay4gVGhpcyBzdHlsZSBpcyBnb29kIGFnYWluc3QgYSBsaWdodCBiYWNrZ3JvdW5kLlxuICAgKiAgIC0gYCd3aGl0ZSdgLCBzY3JvbGwgaW5kaWNhdG9yIGlzIHdoaXRlLiBUaGlzIHN0eWxlIGlzIGdvb2QgYWdhaW5zdCBhIGRhcmsgYmFja2dyb3VuZC5cbiAgICpcbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgaW5kaWNhdG9yU3R5bGU/OiA/KCdkZWZhdWx0JyB8ICdibGFjaycgfCAnd2hpdGUnKSxcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIFNjcm9sbFZpZXcgd2lsbCB0cnkgdG8gbG9jayB0byBvbmx5IHZlcnRpY2FsIG9yIGhvcml6b250YWxcbiAgICogc2Nyb2xsaW5nIHdoaWxlIGRyYWdnaW5nLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIGRpcmVjdGlvbmFsTG9ja0VuYWJsZWQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIG9uY2UgdHJhY2tpbmcgc3RhcnRzLCB3b24ndCB0cnkgdG8gZHJhZyBpZiB0aGUgdG91Y2ggbW92ZXMuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIGNhbkNhbmNlbENvbnRlbnRUb3VjaGVzPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBXaGVuIHNldCwgdGhlIHNjcm9sbCB2aWV3IHdpbGwgYWRqdXN0IHRoZSBzY3JvbGwgcG9zaXRpb24gc28gdGhhdCB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpc1xuICAgKiBjdXJyZW50bHkgdmlzaWJsZSBhbmQgYXQgb3IgYmV5b25kIGBtaW5JbmRleEZvclZpc2libGVgIHdpbGwgbm90IGNoYW5nZSBwb3NpdGlvbi4gVGhpcyBpc1xuICAgKiB1c2VmdWwgZm9yIGxpc3RzIHRoYXQgYXJlIGxvYWRpbmcgY29udGVudCBpbiBib3RoIGRpcmVjdGlvbnMsIGUuZy4gYSBjaGF0IHRocmVhZCwgd2hlcmUgbmV3XG4gICAqIG1lc3NhZ2VzIGNvbWluZyBpbiBtaWdodCBvdGhlcndpc2UgY2F1c2UgdGhlIHNjcm9sbCBwb3NpdGlvbiB0byBqdW1wLiBBIHZhbHVlIG9mIDAgaXMgY29tbW9uLFxuICAgKiBidXQgb3RoZXIgdmFsdWVzIHN1Y2ggYXMgMSBjYW4gYmUgdXNlZCB0byBza2lwIGxvYWRpbmcgc3Bpbm5lcnMgb3Igb3RoZXIgY29udGVudCB0aGF0IHNob3VsZFxuICAgKiBub3QgbWFpbnRhaW4gcG9zaXRpb24uXG4gICAqXG4gICAqIFRoZSBvcHRpb25hbCBgYXV0b3Njcm9sbFRvVG9wVGhyZXNob2xkYCBjYW4gYmUgdXNlZCB0byBtYWtlIHRoZSBjb250ZW50IGF1dG9tYXRpY2FsbHkgc2Nyb2xsXG4gICAqIHRvIHRoZSB0b3AgYWZ0ZXIgbWFraW5nIHRoZSBhZGp1c3RtZW50IGlmIHRoZSB1c2VyIHdhcyB3aXRoaW4gdGhlIHRocmVzaG9sZCBvZiB0aGUgdG9wIGJlZm9yZVxuICAgKiB0aGUgYWRqdXN0bWVudCB3YXMgbWFkZS4gVGhpcyBpcyBhbHNvIHVzZWZ1bCBmb3IgY2hhdC1saWtlIGFwcGxpY2F0aW9ucyB3aGVyZSB5b3Ugd2FudCB0byBzZWVcbiAgICogbmV3IG1lc3NhZ2VzIHNjcm9sbCBpbnRvIHBsYWNlLCBidXQgbm90IGlmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB1cCBhIHdheXMgYW5kIGl0IHdvdWxkIGJlXG4gICAqIGRpc3J1cHRpdmUgdG8gc2Nyb2xsIGEgYnVuY2guXG4gICAqXG4gICAqIENhdmVhdCAxOiBSZW9yZGVyaW5nIGVsZW1lbnRzIGluIHRoZSBzY3JvbGx2aWV3IHdpdGggdGhpcyBlbmFibGVkIHdpbGwgcHJvYmFibHkgY2F1c2VcbiAgICoganVtcGluZXNzIGFuZCBqYW5rLiBJdCBjYW4gYmUgZml4ZWQsIGJ1dCB0aGVyZSBhcmUgY3VycmVudGx5IG5vIHBsYW5zIHRvIGRvIHNvLiBGb3Igbm93LFxuICAgKiBkb24ndCByZS1vcmRlciB0aGUgY29udGVudCBvZiBhbnkgU2Nyb2xsVmlld3Mgb3IgTGlzdHMgdGhhdCB1c2UgdGhpcyBmZWF0dXJlLlxuICAgKlxuICAgKiBDYXZlYXQgMjogVGhpcyBzaW1wbHkgdXNlcyBgY29udGVudE9mZnNldGAgYW5kIGBmcmFtZS5vcmlnaW5gIGluIG5hdGl2ZSBjb2RlIHRvIGNvbXB1dGVcbiAgICogdmlzaWJpbGl0eS4gT2NjbHVzaW9uLCB0cmFuc2Zvcm1zLCBhbmQgb3RoZXIgY29tcGxleGl0eSB3b24ndCBiZSB0YWtlbiBpbnRvIGFjY291bnQgYXMgdG9cbiAgICogd2hldGhlciBjb250ZW50IGlzIFwidmlzaWJsZVwiIG9yIG5vdC5cbiAgICpcbiAgICovXG4gIG1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbj86ID8kUmVhZE9ubHk8e3xcbiAgICBtaW5JbmRleEZvclZpc2libGU6IG51bWJlcixcbiAgICBhdXRvc2Nyb2xsVG9Ub3BUaHJlc2hvbGQ/OiA/bnVtYmVyLFxuICB8fT4sXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbGxvd2VkIHpvb20gc2NhbGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuMC5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgbWF4aW11bVpvb21TY2FsZT86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBhbGxvd2VkIHpvb20gc2NhbGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuMC5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgbWluaW11bVpvb21TY2FsZT86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIFNjcm9sbFZpZXcgYWxsb3dzIHVzZSBvZiBwaW5jaCBnZXN0dXJlcyB0byB6b29tIGluIGFuZCBvdXQuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIHBpbmNoR2VzdHVyZUVuYWJsZWQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgYnkgd2hpY2ggdGhlIHNjcm9sbCB2aWV3IGluZGljYXRvcnMgYXJlIGluc2V0IGZyb20gdGhlIGVkZ2VzXG4gICAqIG9mIHRoZSBzY3JvbGwgdmlldy4gVGhpcyBzaG91bGQgbm9ybWFsbHkgYmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFzXG4gICAqIHRoZSBgY29udGVudEluc2V0YC4gRGVmYXVsdHMgdG8gYHswLCAwLCAwLCAwfWAuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIHNjcm9sbEluZGljYXRvckluc2V0cz86ID9FZGdlSW5zZXRzUHJvcCxcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHNjcm9sbCB2aWV3IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkIGJleW9uZCBpdHNcbiAgICogY29udGVudCBzaXplLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgc2Nyb2xsVG9PdmVyZmxvd0VuYWJsZWQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHNjcm9sbCB2aWV3IHNjcm9sbHMgdG8gdG9wIHdoZW4gdGhlIHN0YXR1cyBiYXIgaXMgdGFwcGVkLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBzY3JvbGxzVG9Ub3A/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCB2aWV3IHNjcm9sbHMgdG8gdG9wIGFmdGVyIHRoZSBzdGF0dXMgYmFyIGhhcyBiZWVuIHRhcHBlZFxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBvblNjcm9sbFRvVG9wPzogKGV2ZW50OiBTY3JvbGxFdmVudCkgPT4gdm9pZCxcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgc2hvd3MgYSBob3Jpem9udGFsIHNjcm9sbCBpbmRpY2F0b3IuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3I/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHNjYWxlIG9mIHRoZSBzY3JvbGwgdmlldyBjb250ZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjAuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIHpvb21TY2FsZT86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyBob3cgdGhlIHNhZmUgYXJlYSBpbnNldHMgYXJlIHVzZWQgdG8gbW9kaWZ5IHRoZVxuICAgKiBjb250ZW50IGFyZWEgb2YgdGhlIHNjcm9sbCB2aWV3LiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGlzXG4gICAqIFwibmV2ZXJcIi4gQXZhaWxhYmxlIG9uIGlPUyAxMSBhbmQgbGF0ZXIuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIGNvbnRlbnRJbnNldEFkanVzdG1lbnRCZWhhdmlvcj86ID8oXG4gICAgfCAnYXV0b21hdGljJ1xuICAgIHwgJ3Njcm9sbGFibGVBeGVzJ1xuICAgIHwgJ25ldmVyJ1xuICAgIHwgJ2Fsd2F5cydcbiAgKSxcbnx9PjtcblxudHlwZSBBbmRyb2lkUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLyoqXG4gICAqIEVuYWJsZXMgbmVzdGVkIHNjcm9sbGluZyBmb3IgQW5kcm9pZCBBUEkgbGV2ZWwgMjErLlxuICAgKiBOZXN0ZWQgc2Nyb2xsaW5nIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0IG9uIGlPU1xuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgbmVzdGVkU2Nyb2xsRW5hYmxlZD86ID9ib29sZWFuLFxuICAvKipcbiAgICogU29tZXRpbWVzIGEgc2Nyb2xsdmlldyB0YWtlcyB1cCBtb3JlIHNwYWNlIHRoYW4gaXRzIGNvbnRlbnQgZmlsbHMuIFdoZW4gdGhpcyBpc1xuICAgKiB0aGUgY2FzZSwgdGhpcyBwcm9wIHdpbGwgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc2Nyb2xsdmlldyB3aXRoIGEgY29sb3IgdG8gYXZvaWQgc2V0dGluZ1xuICAgKiBhIGJhY2tncm91bmQgYW5kIGNyZWF0aW5nIHVubmVjZXNzYXJ5IG92ZXJkcmF3LiBUaGlzIGlzIGFuIGFkdmFuY2VkIG9wdGltaXphdGlvblxuICAgKiB0aGF0IGlzIG5vdCBuZWVkZWQgaW4gdGhlIGdlbmVyYWwgY2FzZS5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIGVuZEZpbGxDb2xvcj86ID9Db2xvclZhbHVlLFxuICAvKipcbiAgICogVGFnIHVzZWQgdG8gbG9nIHNjcm9sbCBwZXJmb3JtYW5jZSBvbiB0aGlzIHNjcm9sbCB2aWV3LiBXaWxsIGZvcmNlXG4gICAqIG1vbWVudHVtIGV2ZW50cyB0byBiZSB0dXJuZWQgb24gKHNlZSBzZW5kTW9tZW50dW1FdmVudHMpLiBUaGlzIGRvZXNuJ3QgZG9cbiAgICogYW55dGhpbmcgb3V0IG9mIHRoZSBib3ggYW5kIHlvdSBuZWVkIHRvIGltcGxlbWVudCBhIGN1c3RvbSBuYXRpdmVcbiAgICogRnBzTGlzdGVuZXIgZm9yIGl0IHRvIGJlIHVzZWZ1bC5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIHNjcm9sbFBlcmZUYWc/OiA/c3RyaW5nLFxuICAvKipcbiAgICogVXNlZCB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlIG9mIG92ZXJTY3JvbGwgbW9kZS5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzOlxuICAgKlxuICAgKiAgLSBgJ2F1dG8nYCAtIERlZmF1bHQgdmFsdWUsIGFsbG93IGEgdXNlciB0byBvdmVyLXNjcm9sbFxuICAgKiAgICB0aGlzIHZpZXcgb25seSBpZiB0aGUgY29udGVudCBpcyBsYXJnZSBlbm91Z2ggdG8gbWVhbmluZ2Z1bGx5IHNjcm9sbC5cbiAgICogIC0gYCdhbHdheXMnYCAtIEFsd2F5cyBhbGxvdyBhIHVzZXIgdG8gb3Zlci1zY3JvbGwgdGhpcyB2aWV3LlxuICAgKiAgLSBgJ25ldmVyJ2AgLSBOZXZlciBhbGxvdyBhIHVzZXIgdG8gb3Zlci1zY3JvbGwgdGhpcyB2aWV3LlxuICAgKlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgb3ZlclNjcm9sbE1vZGU/OiA/KCdhdXRvJyB8ICdhbHdheXMnIHwgJ25ldmVyJyksXG4gIC8qKlxuICAgKiBDYXVzZXMgdGhlIHNjcm9sbGJhcnMgbm90IHRvIHR1cm4gdHJhbnNwYXJlbnQgd2hlbiB0aGV5IGFyZSBub3QgaW4gdXNlLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS5cbiAgICpcbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIHBlcnNpc3RlbnRTY3JvbGxiYXI/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIEZhZGVzIG91dCB0aGUgZWRnZXMgb2YgdGhlIHNjcm9sbCBjb250ZW50LlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDAsIHRoZSBmYWRpbmcgZWRnZXMgd2lsbCBiZSBzZXQgYWNjb3JkaW5nbHlcbiAgICogdG8gdGhlIGN1cnJlbnQgc2Nyb2xsIGRpcmVjdGlvbiBhbmQgcG9zaXRpb24sXG4gICAqIGluZGljYXRpbmcgaWYgdGhlcmUgaXMgbW9yZSBjb250ZW50IHRvIHNob3cuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuXG4gICAqXG4gICAqIEBwbGF0Zm9ybSBhbmRyb2lkXG4gICAqL1xuICBmYWRpbmdFZGdlTGVuZ3RoPzogP251bWJlcixcbnx9PjtcblxudHlwZSBTdGlja3lIZWFkZXJDb21wb25lbnRUeXBlID0gUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG4gIFNjcm9sbFZpZXdTdGlja3lIZWFkZXJQcm9wcyxcbiAgJFJlYWRPbmx5PGludGVyZmFjZSB7c2V0TmV4dEhlYWRlclk6IG51bWJlciA9PiB2b2lkfT4sXG4+O1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi5WaWV3UHJvcHMsXG4gIC4uLklPU1Byb3BzLFxuICAuLi5BbmRyb2lkUHJvcHMsXG5cbiAgLyoqXG4gICAqIFRoZXNlIHN0eWxlcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHNjcm9sbCB2aWV3IGNvbnRlbnQgY29udGFpbmVyIHdoaWNoXG4gICAqIHdyYXBzIGFsbCBvZiB0aGUgY2hpbGQgdmlld3MuIEV4YW1wbGU6XG4gICAqXG4gICAqIGBgYFxuICAgKiByZXR1cm4gKFxuICAgKiAgIDxTY3JvbGxWaWV3IGNvbnRlbnRDb250YWluZXJTdHlsZT17c3R5bGVzLmNvbnRlbnRDb250YWluZXJ9PlxuICAgKiAgIDwvU2Nyb2xsVmlldz5cbiAgICogKTtcbiAgICogLi4uXG4gICAqIGNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgICogICBjb250ZW50Q29udGFpbmVyOiB7XG4gICAqICAgICBwYWRkaW5nVmVydGljYWw6IDIwXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBjb250ZW50Q29udGFpbmVyU3R5bGU/OiA/Vmlld1N0eWxlUHJvcCxcbiAgLyoqXG4gICAqIFVzZWQgdG8gbWFudWFsbHkgc2V0IHRoZSBzdGFydGluZyBzY3JvbGwgb2Zmc2V0LlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBge3g6IDAsIHk6IDB9YC5cbiAgICovXG4gIGNvbnRlbnRPZmZzZXQ/OiA/UG9pbnRQcm9wLFxuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgc2Nyb2xsIHZpZXcgc3RvcHMgb24gdGhlIG5leHQgaW5kZXggKGluIHJlbGF0aW9uIHRvIHNjcm9sbFxuICAgKiBwb3NpdGlvbiBhdCByZWxlYXNlKSByZWdhcmRsZXNzIG9mIGhvdyBmYXN0IHRoZSBnZXN0dXJlIGlzLiBUaGlzIGNhbiBiZVxuICAgKiB1c2VkIGZvciBwYWdpbmF0aW9uIHdoZW4gdGhlIHBhZ2UgaXMgbGVzcyB0aGFuIHRoZSB3aWR0aCBvZiB0aGVcbiAgICogaG9yaXpvbnRhbCBTY3JvbGxWaWV3IG9yIHRoZSBoZWlnaHQgb2YgdGhlIHZlcnRpY2FsIFNjcm9sbFZpZXcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxuICAgKi9cbiAgZGlzYWJsZUludGVydmFsTW9tZW50dW0/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIEEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgcXVpY2tseSB0aGUgc2Nyb2xsIHZpZXdcbiAgICogZGVjZWxlcmF0ZXMgYWZ0ZXIgdGhlIHVzZXIgbGlmdHMgdGhlaXIgZmluZ2VyLiBZb3UgbWF5IGFsc28gdXNlIHN0cmluZ1xuICAgKiBzaG9ydGN1dHMgYFwibm9ybWFsXCJgIGFuZCBgXCJmYXN0XCJgIHdoaWNoIG1hdGNoIHRoZSB1bmRlcmx5aW5nIGlPUyBzZXR0aW5nc1xuICAgKiBmb3IgYFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVOb3JtYWxgIGFuZFxuICAgKiBgVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3RgIHJlc3BlY3RpdmVseS5cbiAgICpcbiAgICogICAtIGAnbm9ybWFsJ2A6IDAuOTk4IG9uIGlPUywgMC45ODUgb24gQW5kcm9pZCAodGhlIGRlZmF1bHQpXG4gICAqICAgLSBgJ2Zhc3QnYDogMC45OSBvbiBpT1MsIDAuOSBvbiBBbmRyb2lkXG4gICAqL1xuICBkZWNlbGVyYXRpb25SYXRlPzogP0RlY2VsZXJhdGlvblJhdGVUeXBlLFxuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgc2Nyb2xsIHZpZXcncyBjaGlsZHJlbiBhcmUgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGluIGEgcm93XG4gICAqIGluc3RlYWQgb2YgdmVydGljYWxseSBpbiBhIGNvbHVtbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG4gICAqL1xuICBob3Jpem9udGFsPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBJZiBzdGlja3kgaGVhZGVycyBzaG91bGQgc3RpY2sgYXQgdGhlIGJvdHRvbSBpbnN0ZWFkIG9mIHRoZSB0b3Agb2YgdGhlXG4gICAqIFNjcm9sbFZpZXcuIFRoaXMgaXMgdXN1YWxseSB1c2VkIHdpdGggaW52ZXJ0ZWQgU2Nyb2xsVmlld3MuXG4gICAqL1xuICBpbnZlcnRTdGlja3lIZWFkZXJzPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGtleWJvYXJkIGdldHMgZGlzbWlzc2VkIGluIHJlc3BvbnNlIHRvIGEgZHJhZy5cbiAgICpcbiAgICogKkNyb3NzIHBsYXRmb3JtKlxuICAgKlxuICAgKiAgIC0gYCdub25lJ2AgKHRoZSBkZWZhdWx0KSwgZHJhZ3MgZG8gbm90IGRpc21pc3MgdGhlIGtleWJvYXJkLlxuICAgKiAgIC0gYCdvbi1kcmFnJ2AsIHRoZSBrZXlib2FyZCBpcyBkaXNtaXNzZWQgd2hlbiBhIGRyYWcgYmVnaW5zLlxuICAgKlxuICAgKiAqaU9TIE9ubHkqXG4gICAqXG4gICAqICAgLSBgJ2ludGVyYWN0aXZlJ2AsIHRoZSBrZXlib2FyZCBpcyBkaXNtaXNzZWQgaW50ZXJhY3RpdmVseSB3aXRoIHRoZSBkcmFnIGFuZCBtb3ZlcyBpblxuICAgKiAgICAgc3luY2hyb255IHdpdGggdGhlIHRvdWNoOyBkcmFnZ2luZyB1cHdhcmRzIGNhbmNlbHMgdGhlIGRpc21pc3NhbC5cbiAgICogICAgIE9uIGFuZHJvaWQgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBpdCB3aWxsIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgYXMgJ25vbmUnLlxuICAgKi9cbiAga2V5Ym9hcmREaXNtaXNzTW9kZT86ID8vLyBkZWZhdWx0XG4gIC8vIGNyb3NzLXBsYXRmb3JtXG4gICgnbm9uZScgfCAnb24tZHJhZycgfCAnaW50ZXJhY3RpdmUnKSwgLy8gaW9zIG9ubHlcbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hlbiB0aGUga2V5Ym9hcmQgc2hvdWxkIHN0YXkgdmlzaWJsZSBhZnRlciBhIHRhcC5cbiAgICpcbiAgICogICAtIGAnbmV2ZXInYCAodGhlIGRlZmF1bHQpLCB0YXBwaW5nIG91dHNpZGUgb2YgdGhlIGZvY3VzZWQgdGV4dCBpbnB1dCB3aGVuIHRoZSBrZXlib2FyZFxuICAgKiAgICAgaXMgdXAgZGlzbWlzc2VzIHRoZSBrZXlib2FyZC4gV2hlbiB0aGlzIGhhcHBlbnMsIGNoaWxkcmVuIHdvbid0IHJlY2VpdmUgdGhlIHRhcC5cbiAgICogICAtIGAnYWx3YXlzJ2AsIHRoZSBrZXlib2FyZCB3aWxsIG5vdCBkaXNtaXNzIGF1dG9tYXRpY2FsbHksIGFuZCB0aGUgc2Nyb2xsIHZpZXcgd2lsbCBub3RcbiAgICogICAgIGNhdGNoIHRhcHMsIGJ1dCBjaGlsZHJlbiBvZiB0aGUgc2Nyb2xsIHZpZXcgY2FuIGNhdGNoIHRhcHMuXG4gICAqICAgLSBgJ2hhbmRsZWQnYCwgdGhlIGtleWJvYXJkIHdpbGwgbm90IGRpc21pc3MgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0YXAgd2FzIGhhbmRsZWQgYnlcbiAgICogICAgIGEgY2hpbGRyZW4sIChvciBjYXB0dXJlZCBieSBhbiBhbmNlc3RvcikuXG4gICAqICAgLSBgZmFsc2VgLCBkZXByZWNhdGVkLCB1c2UgJ25ldmVyJyBpbnN0ZWFkXG4gICAqICAgLSBgdHJ1ZWAsIGRlcHJlY2F0ZWQsIHVzZSAnYWx3YXlzJyBpbnN0ZWFkXG4gICAqL1xuICBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPzogPygnYWx3YXlzJyB8ICduZXZlcicgfCAnaGFuZGxlZCcgfCB0cnVlIHwgZmFsc2UpLFxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIG1vbWVudHVtIHNjcm9sbCBzdGFydHMgKHNjcm9sbCB3aGljaCBvY2N1cnMgYXMgdGhlIFNjcm9sbFZpZXcgZ2xpZGVzIHRvIGEgc3RvcCkuXG4gICAqL1xuICBvbk1vbWVudHVtU2Nyb2xsQmVnaW4/OiA/KGV2ZW50OiBTY3JvbGxFdmVudCkgPT4gdm9pZCxcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBtb21lbnR1bSBzY3JvbGwgZW5kcyAoc2Nyb2xsIHdoaWNoIG9jY3VycyBhcyB0aGUgU2Nyb2xsVmlldyBnbGlkZXMgdG8gYSBzdG9wKS5cbiAgICovXG4gIG9uTW9tZW50dW1TY3JvbGxFbmQ/OiA/KGV2ZW50OiBTY3JvbGxFdmVudCkgPT4gdm9pZCxcblxuICAvKipcbiAgICogRmlyZXMgYXQgbW9zdCBvbmNlIHBlciBmcmFtZSBkdXJpbmcgc2Nyb2xsaW5nLlxuICAgKi9cbiAgb25TY3JvbGw/OiA/KGV2ZW50OiBTY3JvbGxFdmVudCkgPT4gdm9pZCxcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGJlZ2lucyB0byBkcmFnIHRoZSBzY3JvbGwgdmlldy5cbiAgICovXG4gIG9uU2Nyb2xsQmVnaW5EcmFnPzogPyhldmVudDogU2Nyb2xsRXZlbnQpID0+IHZvaWQsXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzdG9wcyBkcmFnZ2luZyB0aGUgc2Nyb2xsIHZpZXcgYW5kIGl0IGVpdGhlciBzdG9wc1xuICAgKiBvciBiZWdpbnMgdG8gZ2xpZGUuXG4gICAqL1xuICBvblNjcm9sbEVuZERyYWc/OiA/KGV2ZW50OiBTY3JvbGxFdmVudCkgPT4gdm9pZCxcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHNjcm9sbGFibGUgY29udGVudCB2aWV3IG9mIHRoZSBTY3JvbGxWaWV3IGNoYW5nZXMuXG4gICAqXG4gICAqIEhhbmRsZXIgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBjb250ZW50IHdpZHRoIGFuZCBjb250ZW50IGhlaWdodCBhcyBwYXJhbWV0ZXJzOlxuICAgKiBgKGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodClgXG4gICAqXG4gICAqIEl0J3MgaW1wbGVtZW50ZWQgdXNpbmcgb25MYXlvdXQgaGFuZGxlciBhdHRhY2hlZCB0byB0aGUgY29udGVudCBjb250YWluZXJcbiAgICogd2hpY2ggdGhpcyBTY3JvbGxWaWV3IHJlbmRlcnMuXG4gICAqL1xuICBvbkNvbnRlbnRTaXplQ2hhbmdlPzogKGNvbnRlbnRXaWR0aDogbnVtYmVyLCBjb250ZW50SGVpZ2h0OiBudW1iZXIpID0+IHZvaWQsXG4gIG9uS2V5Ym9hcmREaWRTaG93PzogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLFxuICBvbktleWJvYXJkRGlkSGlkZT86IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCxcbiAgb25LZXlib2FyZFdpbGxTaG93PzogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLFxuICBvbktleWJvYXJkV2lsbEhpZGU/OiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQsXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzY3JvbGwgdmlldyBzdG9wcyBvbiBtdWx0aXBsZXMgb2YgdGhlIHNjcm9sbCB2aWV3J3Mgc2l6ZVxuICAgKiB3aGVuIHNjcm9sbGluZy4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgaG9yaXpvbnRhbCBwYWdpbmF0aW9uLiBUaGUgZGVmYXVsdFxuICAgKiB2YWx1ZSBpcyBmYWxzZS5cbiAgICovXG4gIHBhZ2luZ0VuYWJsZWQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIHRoZSB2aWV3IGNhbm5vdCBiZSBzY3JvbGxlZCB2aWEgdG91Y2ggaW50ZXJhY3Rpb24uXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgdmlldyBjYW4gYWx3YXlzIGJlIHNjcm9sbGVkIGJ5IGNhbGxpbmcgYHNjcm9sbFRvYC5cbiAgICovXG4gIHNjcm9sbEVuYWJsZWQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIExpbWl0cyBob3cgb2Z0ZW4gc2Nyb2xsIGV2ZW50cyB3aWxsIGJlIGZpcmVkIHdoaWxlIHNjcm9sbGluZywgc3BlY2lmaWVkIGFzXG4gICAqIGEgdGltZSBpbnRlcnZhbCBpbiBtcy4gVGhpcyBtYXkgYmUgdXNlZnVsIHdoZW4gZXhwZW5zaXZlIHdvcmsgaXMgcGVyZm9ybWVkXG4gICAqIGluIHJlc3BvbnNlIHRvIHNjcm9sbGluZy4gVmFsdWVzIDw9IGAxNmAgd2lsbCBkaXNhYmxlIHRocm90dGxpbmcsXG4gICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlZnJlc2ggcmF0ZSBvZiB0aGUgZGV2aWNlLlxuICAgKi9cbiAgc2Nyb2xsRXZlbnRUaHJvdHRsZT86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHNob3dzIGEgdmVydGljYWwgc2Nyb2xsIGluZGljYXRvci5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICovXG4gIHNob3dzVmVydGljYWxTY3JvbGxJbmRpY2F0b3I/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgU3RpY2t5IGhlYWRlciBpcyBoaWRkZW4gd2hlbiBzY3JvbGxpbmcgZG93biwgYW5kIGRvY2sgYXQgdGhlIHRvcFxuICAgKiB3aGVuIHNjcm9sbGluZyB1cFxuICAgKi9cbiAgc3RpY2t5SGVhZGVySGlkZGVuT25TY3JvbGw/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGNoaWxkIGluZGljZXMgZGV0ZXJtaW5pbmcgd2hpY2ggY2hpbGRyZW4gZ2V0IGRvY2tlZCB0byB0aGVcbiAgICogdG9wIG9mIHRoZSBzY3JlZW4gd2hlbiBzY3JvbGxpbmcuIEZvciBleGFtcGxlLCBwYXNzaW5nXG4gICAqIGBzdGlja3lIZWFkZXJJbmRpY2VzPXtbMF19YCB3aWxsIGNhdXNlIHRoZSBmaXJzdCBjaGlsZCB0byBiZSBmaXhlZCB0byB0aGVcbiAgICogdG9wIG9mIHRoZSBzY3JvbGwgdmlldy4gVGhpcyBwcm9wZXJ0eSBpcyBub3Qgc3VwcG9ydGVkIGluIGNvbmp1bmN0aW9uXG4gICAqIHdpdGggYGhvcml6b250YWw9e3RydWV9YC5cbiAgICovXG4gIHN0aWNreUhlYWRlckluZGljZXM/OiA/JFJlYWRPbmx5QXJyYXk8bnVtYmVyPixcbiAgLyoqXG4gICAqIEEgUmVhY3QgQ29tcG9uZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciBzdGlja3kgaGVhZGVycy5cbiAgICogVG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIGBzdGlja3lIZWFkZXJJbmRpY2VzYCBvciB3aXRoIGBTZWN0aW9uTGlzdGAsIGRlZmF1bHRzIHRvIGBTY3JvbGxWaWV3U3RpY2t5SGVhZGVyYC5cbiAgICogWW91IG1heSBuZWVkIHRvIHNldCB0aGlzIGlmIHlvdXIgc3RpY2t5IGhlYWRlciB1c2VzIGN1c3RvbSB0cmFuc2Zvcm1zIChlZy4gdHJhbnNsYXRpb24pLFxuICAgKiBmb3IgZXhhbXBsZSB3aGVuIHlvdSB3YW50IHlvdXIgbGlzdCB0byBoYXZlIGFuIGFuaW1hdGVkIGhpZGFibGUgaGVhZGVyLlxuICAgKi9cbiAgU3RpY2t5SGVhZGVyQ29tcG9uZW50PzogU3RpY2t5SGVhZGVyQ29tcG9uZW50VHlwZSxcbiAgLyoqXG4gICAqIFdoZW4gYHNuYXBUb0ludGVydmFsYCBpcyBzZXQsIGBzbmFwVG9BbGlnbm1lbnRgIHdpbGwgZGVmaW5lIHRoZSByZWxhdGlvbnNoaXBcbiAgICogb2YgdGhlIHNuYXBwaW5nIHRvIHRoZSBzY3JvbGwgdmlldy5cbiAgICpcbiAgICogICAtIGAnc3RhcnQnYCAodGhlIGRlZmF1bHQpIHdpbGwgYWxpZ24gdGhlIHNuYXAgYXQgdGhlIGxlZnQgKGhvcml6b250YWwpIG9yIHRvcCAodmVydGljYWwpXG4gICAqICAgLSBgJ2NlbnRlcidgIHdpbGwgYWxpZ24gdGhlIHNuYXAgaW4gdGhlIGNlbnRlclxuICAgKiAgIC0gYCdlbmQnYCB3aWxsIGFsaWduIHRoZSBzbmFwIGF0IHRoZSByaWdodCAoaG9yaXpvbnRhbCkgb3IgYm90dG9tICh2ZXJ0aWNhbClcbiAgICovXG4gIHNuYXBUb0FsaWdubWVudD86ID8oJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcpLFxuICAvKipcbiAgICogV2hlbiBzZXQsIGNhdXNlcyB0aGUgc2Nyb2xsIHZpZXcgdG8gc3RvcCBhdCBtdWx0aXBsZXMgb2YgdGhlIHZhbHVlIG9mXG4gICAqIGBzbmFwVG9JbnRlcnZhbGAuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHBhZ2luYXRpbmcgdGhyb3VnaCBjaGlsZHJlblxuICAgKiB0aGF0IGhhdmUgbGVuZ3RocyBzbWFsbGVyIHRoYW4gdGhlIHNjcm9sbCB2aWV3LiBUeXBpY2FsbHkgdXNlZCBpblxuICAgKiBjb21iaW5hdGlvbiB3aXRoIGBzbmFwVG9BbGlnbm1lbnRgIGFuZCBgZGVjZWxlcmF0aW9uUmF0ZT1cImZhc3RcImAuXG4gICAqXG4gICAqIE92ZXJyaWRlcyBsZXNzIGNvbmZpZ3VyYWJsZSBgcGFnaW5nRW5hYmxlZGAgcHJvcC5cbiAgICovXG4gIHNuYXBUb0ludGVydmFsPzogP251bWJlcixcbiAgLyoqXG4gICAqIFdoZW4gc2V0LCBjYXVzZXMgdGhlIHNjcm9sbCB2aWV3IHRvIHN0b3AgYXQgdGhlIGRlZmluZWQgb2Zmc2V0cy5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCBmb3IgcGFnaW5hdGluZyB0aHJvdWdoIHZhcmlvdXNseSBzaXplZCBjaGlsZHJlblxuICAgKiB0aGF0IGhhdmUgbGVuZ3RocyBzbWFsbGVyIHRoYW4gdGhlIHNjcm9sbCB2aWV3LiBUeXBpY2FsbHkgdXNlZCBpblxuICAgKiBjb21iaW5hdGlvbiB3aXRoIGBkZWNlbGVyYXRpb25SYXRlPVwiZmFzdFwiYC5cbiAgICpcbiAgICogT3ZlcnJpZGVzIGxlc3MgY29uZmlndXJhYmxlIGBwYWdpbmdFbmFibGVkYCBhbmQgYHNuYXBUb0ludGVydmFsYCBwcm9wcy5cbiAgICovXG4gIHNuYXBUb09mZnNldHM/OiA/JFJlYWRPbmx5QXJyYXk8bnVtYmVyPixcbiAgLyoqXG4gICAqIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBzbmFwVG9PZmZzZXRzYC4gQnkgZGVmYXVsdCwgdGhlIGJlZ2lubmluZ1xuICAgKiBvZiB0aGUgbGlzdCBjb3VudHMgYXMgYSBzbmFwIG9mZnNldC4gU2V0IGBzbmFwVG9TdGFydGAgdG8gZmFsc2UgdG8gZGlzYWJsZVxuICAgKiB0aGlzIGJlaGF2aW9yIGFuZCBhbGxvdyB0aGUgbGlzdCB0byBzY3JvbGwgZnJlZWx5IGJldHdlZW4gaXRzIHN0YXJ0IGFuZFxuICAgKiB0aGUgZmlyc3QgYHNuYXBUb09mZnNldHNgIG9mZnNldC5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICovXG4gIHNuYXBUb1N0YXJ0PzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgc25hcFRvT2Zmc2V0c2AuIEJ5IGRlZmF1bHQsIHRoZSBlbmRcbiAgICogb2YgdGhlIGxpc3QgY291bnRzIGFzIGEgc25hcCBvZmZzZXQuIFNldCBgc25hcFRvRW5kYCB0byBmYWxzZSB0byBkaXNhYmxlXG4gICAqIHRoaXMgYmVoYXZpb3IgYW5kIGFsbG93IHRoZSBsaXN0IHRvIHNjcm9sbCBmcmVlbHkgYmV0d2VlbiBpdHMgZW5kIGFuZFxuICAgKiB0aGUgbGFzdCBgc25hcFRvT2Zmc2V0c2Agb2Zmc2V0LlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgc25hcFRvRW5kPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBFeHBlcmltZW50YWw6IFdoZW4gdHJ1ZSwgb2Zmc2NyZWVuIGNoaWxkIHZpZXdzICh3aG9zZSBgb3ZlcmZsb3dgIHZhbHVlIGlzXG4gICAqIGBoaWRkZW5gKSBhcmUgcmVtb3ZlZCBmcm9tIHRoZWlyIG5hdGl2ZSBiYWNraW5nIHN1cGVydmlldyB3aGVuIG9mZnNjcmVlbi5cbiAgICogVGhpcyBjYW4gaW1wcm92ZSBzY3JvbGxpbmcgcGVyZm9ybWFuY2Ugb24gbG9uZyBsaXN0cy4gVGhlIGRlZmF1bHQgdmFsdWUgaXNcbiAgICogdHJ1ZS5cbiAgICovXG4gIHJlbW92ZUNsaXBwZWRTdWJ2aWV3cz86ID9ib29sZWFuLFxuICAvKipcbiAgICogQSBSZWZyZXNoQ29udHJvbCBjb21wb25lbnQsIHVzZWQgdG8gcHJvdmlkZSBwdWxsLXRvLXJlZnJlc2hcbiAgICogZnVuY3Rpb25hbGl0eSBmb3IgdGhlIFNjcm9sbFZpZXcuIE9ubHkgd29ya3MgZm9yIHZlcnRpY2FsIFNjcm9sbFZpZXdzXG4gICAqIChgaG9yaXpvbnRhbGAgcHJvcCBtdXN0IGJlIGBmYWxzZWApLlxuICAgKlxuICAgKiBTZWUgW1JlZnJlc2hDb250cm9sXShkb2NzL3JlZnJlc2hjb250cm9sLmh0bWwpLlxuICAgKi9cbiAgLyogJEZsb3dGaXhNZVt1bmNsZWFyLXR5cGVdIC0gaG93IHRvIGhhbmRsZSBnZW5lcmljIHR5cGUgd2l0aG91dCBleGlzdGVudGlhbFxuICAgKiBvcGVyYXRvcj8gKi9cbiAgcmVmcmVzaENvbnRyb2w/OiA/UmVhY3QuRWxlbWVudDxhbnk+LFxuICBjaGlsZHJlbj86IFJlYWN0Lk5vZGUsXG4gIC8qKlxuICAgKiBBIHJlZiB0byB0aGUgaW5uZXIgVmlldyBlbGVtZW50IG9mIHRoZSBTY3JvbGxWaWV3LiBUaGlzIHNob3VsZCBiZSB1c2VkXG4gICAqIGluc3RlYWQgb2YgY2FsbGluZyBgZ2V0SW5uZXJWaWV3UmVmYC5cbiAgICovXG4gIGlubmVyVmlld1JlZj86IEZvcndhcmRlZFJlZjxJbm5lclZpZXdJbnN0YW5jZT4sXG4gIC8qKlxuICAgKiBBIHJlZiB0byB0aGUgTmF0aXZlIFNjcm9sbFZpZXcgY29tcG9uZW50LiBUaGlzIHJlZiBjYW4gYmUgdXNlZCB0byBjYWxsXG4gICAqIGFsbCBvZiBTY3JvbGxWaWV3J3MgcHVibGljIG1ldGhvZHMsIGluIGFkZGl0aW9uIHRvIG5hdGl2ZSBtZXRob2RzIGxpa2VcbiAgICogbWVhc3VyZSwgbWVhc3VyZUxheW91dCwgZXRjLlxuICAgKi9cbiAgc2Nyb2xsVmlld1JlZj86IEZvcndhcmRlZFJlZjxQdWJsaWNTY3JvbGxWaWV3SW5zdGFuY2U+LFxufH0+O1xuXG50eXBlIFN0YXRlID0ge3xcbiAgbGF5b3V0SGVpZ2h0OiA/bnVtYmVyLFxufH07XG5cbmNvbnN0IElTX0FOSU1BVElOR19UT1VDSF9TVEFSVF9USFJFU0hPTERfTVMgPSAxNjtcblxuZXhwb3J0IHR5cGUgU2Nyb2xsVmlld0NvbXBvbmVudFN0YXRpY3MgPSAkUmVhZE9ubHk8e3xcbiAgQ29udGV4dDogdHlwZW9mIFNjcm9sbFZpZXdDb250ZXh0LFxufH0+O1xuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IHdyYXBzIHBsYXRmb3JtIFNjcm9sbFZpZXcgd2hpbGUgcHJvdmlkaW5nXG4gKiBpbnRlZ3JhdGlvbiB3aXRoIHRvdWNoIGxvY2tpbmcgXCJyZXNwb25kZXJcIiBzeXN0ZW0uXG4gKlxuICogS2VlcCBpbiBtaW5kIHRoYXQgU2Nyb2xsVmlld3MgbXVzdCBoYXZlIGEgYm91bmRlZCBoZWlnaHQgaW4gb3JkZXIgdG8gd29yayxcbiAqIHNpbmNlIHRoZXkgY29udGFpbiB1bmJvdW5kZWQtaGVpZ2h0IGNoaWxkcmVuIGludG8gYSBib3VuZGVkIGNvbnRhaW5lciAodmlhXG4gKiBhIHNjcm9sbCBpbnRlcmFjdGlvbikuIEluIG9yZGVyIHRvIGJvdW5kIHRoZSBoZWlnaHQgb2YgYSBTY3JvbGxWaWV3LCBlaXRoZXJcbiAqIHNldCB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3IGRpcmVjdGx5IChkaXNjb3VyYWdlZCkgb3IgbWFrZSBzdXJlIGFsbCBwYXJlbnRcbiAqIHZpZXdzIGhhdmUgYm91bmRlZCBoZWlnaHQuIEZvcmdldHRpbmcgdG8gdHJhbnNmZXIgYHtmbGV4OiAxfWAgZG93biB0aGVcbiAqIHZpZXcgc3RhY2sgY2FuIGxlYWQgdG8gZXJyb3JzIGhlcmUsIHdoaWNoIHRoZSBlbGVtZW50IGluc3BlY3RvciBtYWtlc1xuICogZWFzeSB0byBkZWJ1Zy5cbiAqXG4gKiBEb2Vzbid0IHlldCBzdXBwb3J0IG90aGVyIGNvbnRhaW5lZCByZXNwb25kZXJzIGZyb20gYmxvY2tpbmcgdGhpcyBzY3JvbGxcbiAqIHZpZXcgZnJvbSBiZWNvbWluZyB0aGUgcmVzcG9uZGVyLlxuICpcbiAqXG4gKiBgPFNjcm9sbFZpZXc+YCB2cyBbYDxGbGF0TGlzdD5gXShodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2ZsYXRsaXN0KSAtIHdoaWNoIG9uZSB0byB1c2U/XG4gKlxuICogYFNjcm9sbFZpZXdgIHNpbXBseSByZW5kZXJzIGFsbCBpdHMgcmVhY3QgY2hpbGQgY29tcG9uZW50cyBhdCBvbmNlLiBUaGF0XG4gKiBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gdW5kZXJzdGFuZCBhbmQgdXNlLlxuICpcbiAqIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGhhcyBhIHBlcmZvcm1hbmNlIGRvd25zaWRlLiBJbWFnaW5lIHlvdSBoYXZlIGEgdmVyeVxuICogbG9uZyBsaXN0IG9mIGl0ZW1zIHlvdSB3YW50IHRvIGRpc3BsYXksIG1heWJlIHNldmVyYWwgc2NyZWVucyB3b3J0aCBvZlxuICogY29udGVudC4gQ3JlYXRpbmcgSlMgY29tcG9uZW50cyBhbmQgbmF0aXZlIHZpZXdzIGZvciBldmVyeXRoaW5nIGFsbCBhdCBvbmNlLFxuICogbXVjaCBvZiB3aGljaCBtYXkgbm90IGV2ZW4gYmUgc2hvd24sIHdpbGwgY29udHJpYnV0ZSB0byBzbG93IHJlbmRlcmluZyBhbmRcbiAqIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UuXG4gKlxuICogVGhpcyBpcyB3aGVyZSBgRmxhdExpc3RgIGNvbWVzIGludG8gcGxheS4gYEZsYXRMaXN0YCByZW5kZXJzIGl0ZW1zIGxhemlseSxcbiAqIGp1c3Qgd2hlbiB0aGV5IGFyZSBhYm91dCB0byBhcHBlYXIsIGFuZCByZW1vdmVzIGl0ZW1zIHRoYXQgc2Nyb2xsIHdheSBvZmZcbiAqIHNjcmVlbiB0byBzYXZlIG1lbW9yeSBhbmQgcHJvY2Vzc2luZyB0aW1lLlxuICpcbiAqIGBGbGF0TGlzdGAgaXMgYWxzbyBoYW5keSBpZiB5b3Ugd2FudCB0byByZW5kZXIgc2VwYXJhdG9ycyBiZXR3ZWVuIHlvdXIgaXRlbXMsXG4gKiBtdWx0aXBsZSBjb2x1bW5zLCBpbmZpbml0ZSBzY3JvbGwgbG9hZGluZywgb3IgYW55IG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyBpdFxuICogc3VwcG9ydHMgb3V0IG9mIHRoZSBib3guXG4gKi9cbmNsYXNzIFNjcm9sbFZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRpYyBDb250ZXh0OiB0eXBlb2YgU2Nyb2xsVmlld0NvbnRleHQgPSBTY3JvbGxWaWV3Q29udGV4dDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLl9zY3JvbGxBbmltYXRlZFZhbHVlID0gbmV3IEFuaW1hdGVkSW1wbGVtZW50YXRpb24uVmFsdWUoXG4gICAgICB0aGlzLnByb3BzLmNvbnRlbnRPZmZzZXQ/LnkgPz8gMCxcbiAgICApO1xuICAgIHRoaXMuX3Njcm9sbEFuaW1hdGVkVmFsdWUuc2V0T2Zmc2V0KHRoaXMucHJvcHMuY29udGVudEluc2V0Py50b3AgPz8gMCk7XG4gIH1cblxuICBfc2Nyb2xsQW5pbWF0ZWRWYWx1ZTogQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbi5WYWx1ZTtcbiAgX3Njcm9sbEFuaW1hdGVkVmFsdWVBdHRhY2htZW50OiA/e2RldGFjaDogKCkgPT4gdm9pZCwgLi4ufSA9IG51bGw7XG4gIF9zdGlja3lIZWFkZXJSZWZzOiBNYXA8c3RyaW5nLCBSZWFjdC5FbGVtZW50UmVmPFN0aWNreUhlYWRlckNvbXBvbmVudFR5cGU+PiA9XG4gICAgbmV3IE1hcCgpO1xuICBfaGVhZGVyTGF5b3V0WXM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgX2tleWJvYXJkTWV0cmljczogP0tleWJvYXJkTWV0cmljcyA9IG51bGw7XG4gIF9hZGRpdGlvbmFsU2Nyb2xsT2Zmc2V0OiBudW1iZXIgPSAwO1xuICBfaXNUb3VjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBfbGFzdE1vbWVudHVtU2Nyb2xsQmVnaW5UaW1lOiBudW1iZXIgPSAwO1xuICBfbGFzdE1vbWVudHVtU2Nyb2xsRW5kVGltZTogbnVtYmVyID0gMDtcblxuICAvLyBSZXNldCB0byBmYWxzZSBldmVyeSB0aW1lIGJlY29tZXMgcmVzcG9uZGVyLiBUaGlzIGlzIHVzZWQgdG86XG4gIC8vIC0gRGV0ZXJtaW5lIGlmIHRoZSBzY3JvbGwgdmlldyBoYXMgYmVlbiBzY3JvbGxlZCBhbmQgdGhlcmVmb3JlIHNob3VsZFxuICAvLyByZWZ1c2UgdG8gZ2l2ZSB1cCBpdHMgcmVzcG9uZGVyIGxvY2suXG4gIC8vIC0gRGV0ZXJtaW5lIGlmIHJlbGVhc2luZyBzaG91bGQgZGlzbWlzcyB0aGUga2V5Ym9hcmQgd2hlbiB3ZSBhcmUgaW5cbiAgLy8gdGFwLXRvLWRpc21pc3MgbW9kZSAodGhpcy5wcm9wcy5rZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzICE9PSAnYWx3YXlzJykuXG4gIF9vYnNlcnZlZFNjcm9sbFNpbmNlQmVjb21pbmdSZXNwb25kZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX2JlY2FtZVJlc3BvbmRlcldoaWxlQW5pbWF0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIF9wcmV2ZW50TmVnYXRpdmVTY3JvbGxPZmZzZXQ6ID9ib29sZWFuID0gbnVsbDtcblxuICBfYW5pbWF0ZWQ6ID9ib29sZWFuID0gbnVsbDtcblxuICBfc3Vic2NyaXB0aW9uS2V5Ym9hcmRXaWxsU2hvdzogP0V2ZW50U3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgX3N1YnNjcmlwdGlvbktleWJvYXJkV2lsbEhpZGU6ID9FdmVudFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gIF9zdWJzY3JpcHRpb25LZXlib2FyZERpZFNob3c6ID9FdmVudFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gIF9zdWJzY3JpcHRpb25LZXlib2FyZERpZEhpZGU6ID9FdmVudFN1YnNjcmlwdGlvbiA9IG51bGw7XG5cbiAgc3RhdGU6IFN0YXRlID0ge1xuICAgIGxheW91dEhlaWdodDogbnVsbCxcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMua2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAna2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcz17JHtcbiAgICAgICAgICB0aGlzLnByb3BzLmtleWJvYXJkU2hvdWxkUGVyc2lzdFRhcHMgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnXG4gICAgICAgIH19JyBpcyBkZXByZWNhdGVkLiBgICtcbiAgICAgICAgICBgVXNlICdrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPVwiJHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMua2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcyA/ICdhbHdheXMnIDogJ25ldmVyJ1xuICAgICAgICAgIH1cIicgaW5zdGVhZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2tleWJvYXJkTWV0cmljcyA9IEtleWJvYXJkLm1ldHJpY3MoKTtcbiAgICB0aGlzLl9hZGRpdGlvbmFsU2Nyb2xsT2Zmc2V0ID0gMDtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbktleWJvYXJkV2lsbFNob3cgPSBLZXlib2FyZC5hZGRMaXN0ZW5lcihcbiAgICAgICdrZXlib2FyZFdpbGxTaG93JyxcbiAgICAgIHRoaXMuc2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmRXaWxsU2hvdyxcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbktleWJvYXJkV2lsbEhpZGUgPSBLZXlib2FyZC5hZGRMaXN0ZW5lcihcbiAgICAgICdrZXlib2FyZFdpbGxIaWRlJyxcbiAgICAgIHRoaXMuc2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmRXaWxsSGlkZSxcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbktleWJvYXJkRGlkU2hvdyA9IEtleWJvYXJkLmFkZExpc3RlbmVyKFxuICAgICAgJ2tleWJvYXJkRGlkU2hvdycsXG4gICAgICB0aGlzLnNjcm9sbFJlc3BvbmRlcktleWJvYXJkRGlkU2hvdyxcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbktleWJvYXJkRGlkSGlkZSA9IEtleWJvYXJkLmFkZExpc3RlbmVyKFxuICAgICAgJ2tleWJvYXJkRGlkSGlkZScsXG4gICAgICB0aGlzLnNjcm9sbFJlc3BvbmRlcktleWJvYXJkRGlkSGlkZSxcbiAgICApO1xuXG4gICAgdGhpcy5fdXBkYXRlQW5pbWF0ZWROb2RlQXR0YWNobWVudCgpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUHJvcHMpIHtcbiAgICBjb25zdCBwcmV2Q29udGVudEluc2V0VG9wID0gcHJldlByb3BzLmNvbnRlbnRJbnNldFxuICAgICAgPyBwcmV2UHJvcHMuY29udGVudEluc2V0LnRvcFxuICAgICAgOiAwO1xuICAgIGNvbnN0IG5ld0NvbnRlbnRJbnNldFRvcCA9IHRoaXMucHJvcHMuY29udGVudEluc2V0XG4gICAgICA/IHRoaXMucHJvcHMuY29udGVudEluc2V0LnRvcFxuICAgICAgOiAwO1xuICAgIGlmIChwcmV2Q29udGVudEluc2V0VG9wICE9PSBuZXdDb250ZW50SW5zZXRUb3ApIHtcbiAgICAgIHRoaXMuX3Njcm9sbEFuaW1hdGVkVmFsdWUuc2V0T2Zmc2V0KG5ld0NvbnRlbnRJbnNldFRvcCB8fCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVBbmltYXRlZE5vZGVBdHRhY2htZW50KCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uS2V5Ym9hcmRXaWxsU2hvdyAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25LZXlib2FyZFdpbGxTaG93LnJlbW92ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uS2V5Ym9hcmRXaWxsSGlkZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25LZXlib2FyZFdpbGxIaWRlLnJlbW92ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uS2V5Ym9hcmREaWRTaG93ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbktleWJvYXJkRGlkU2hvdy5yZW1vdmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbktleWJvYXJkRGlkSGlkZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25LZXlib2FyZERpZEhpZGUucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Njcm9sbEFuaW1hdGVkVmFsdWVBdHRhY2htZW50KSB7XG4gICAgICB0aGlzLl9zY3JvbGxBbmltYXRlZFZhbHVlQXR0YWNobWVudC5kZXRhY2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBzY3JvbGwgcmVzcG9uZGVyLCB3aGljaCBzdXBwb3J0c1xuICAgKiBvcGVyYXRpb25zIGxpa2UgYHNjcm9sbFRvYC4gQWxsIFNjcm9sbFZpZXctbGlrZSBjb21wb25lbnRzIHNob3VsZFxuICAgKiBpbXBsZW1lbnQgdGhpcyBtZXRob2Qgc28gdGhhdCB0aGV5IGNhbiBiZSBjb21wb3NlZCB3aGlsZSBwcm92aWRpbmcgYWNjZXNzXG4gICAqIHRvIHRoZSB1bmRlcmx5aW5nIHNjcm9sbCByZXNwb25kZXIncyBtZXRob2RzLlxuICAgKi9cbiAgZ2V0U2Nyb2xsUmVzcG9uZGVyOiAoKSA9PiBTY3JvbGxSZXNwb25kZXJUeXBlID0gKCkgPT4ge1xuICAgIC8vICRGbG93Rml4TWVbdW5jbGVhci10eXBlXVxuICAgIHJldHVybiAoKHRoaXM6IGFueSk6IFNjcm9sbFJlc3BvbmRlclR5cGUpO1xuICB9O1xuXG4gIGdldFNjcm9sbGFibGVOb2RlOiAoKSA9PiA/bnVtYmVyID0gKCkgPT4ge1xuICAgIHJldHVybiBmaW5kTm9kZUhhbmRsZSh0aGlzLl9zY3JvbGxWaWV3Lm5hdGl2ZUluc3RhbmNlKTtcbiAgfTtcblxuICBnZXRJbm5lclZpZXdOb2RlOiAoKSA9PiA/bnVtYmVyID0gKCkgPT4ge1xuICAgIHJldHVybiBmaW5kTm9kZUhhbmRsZSh0aGlzLl9pbm5lclZpZXcubmF0aXZlSW5zdGFuY2UpO1xuICB9O1xuXG4gIGdldElubmVyVmlld1JlZjogKCkgPT4gSW5uZXJWaWV3SW5zdGFuY2UgfCBudWxsID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9pbm5lclZpZXcubmF0aXZlSW5zdGFuY2U7XG4gIH07XG5cbiAgZ2V0TmF0aXZlU2Nyb2xsUmVmOiAoKSA9PiBOYXRpdmVTY3JvbGxWaWV3SW5zdGFuY2UgfCBudWxsID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9zY3JvbGxWaWV3Lm5hdGl2ZUluc3RhbmNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRvIGEgZ2l2ZW4geCwgeSBvZmZzZXQsIGVpdGhlciBpbW1lZGlhdGVseSBvciB3aXRoIGEgc21vb3RoIGFuaW1hdGlvbi5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogYHNjcm9sbFRvKHt4OiAwLCB5OiAwLCBhbmltYXRlZDogdHJ1ZX0pYFxuICAgKlxuICAgKiBOb3RlOiBUaGUgd2VpcmQgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0LCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLFxuICAgKiB0aGUgZnVuY3Rpb24gYWxzbyBhY2NlcHRzIHNlcGFyYXRlIGFyZ3VtZW50cyBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgb3B0aW9ucyBvYmplY3QuXG4gICAqIFRoaXMgaXMgZGVwcmVjYXRlZCBkdWUgdG8gYW1iaWd1aXR5ICh5IGJlZm9yZSB4KSwgYW5kIFNIT1VMRCBOT1QgQkUgVVNFRC5cbiAgICovXG4gIHNjcm9sbFRvOiAoXG4gICAgb3B0aW9ucz86XG4gICAgICB8IHtcbiAgICAgICAgICB4PzogbnVtYmVyLFxuICAgICAgICAgIHk/OiBudW1iZXIsXG4gICAgICAgICAgYW5pbWF0ZWQ/OiBib29sZWFuLFxuICAgICAgICAgIC4uLlxuICAgICAgICB9XG4gICAgICB8IG51bWJlcixcbiAgICBkZXByZWNhdGVkWD86IG51bWJlcixcbiAgICBkZXByZWNhdGVkQW5pbWF0ZWQ/OiBib29sZWFuLFxuICApID0+IHZvaWQgPSAoXG4gICAgb3B0aW9ucz86XG4gICAgICB8IHtcbiAgICAgICAgICB4PzogbnVtYmVyLFxuICAgICAgICAgIHk/OiBudW1iZXIsXG4gICAgICAgICAgYW5pbWF0ZWQ/OiBib29sZWFuLFxuICAgICAgICAgIC4uLlxuICAgICAgICB9XG4gICAgICB8IG51bWJlcixcbiAgICBkZXByZWNhdGVkWD86IG51bWJlcixcbiAgICBkZXByZWNhdGVkQW5pbWF0ZWQ/OiBib29sZWFuLFxuICApID0+IHtcbiAgICBsZXQgeCwgeSwgYW5pbWF0ZWQ7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnYHNjcm9sbFRvKHksIHgsIGFuaW1hdGVkKWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBzY3JvbGxUbyh7eDogNSwgeTogNSwgJyArXG4gICAgICAgICAgJ2FuaW1hdGVkOiB0cnVlfSlgIGluc3RlYWQuJyxcbiAgICAgICk7XG4gICAgICB5ID0gb3B0aW9ucztcbiAgICAgIHggPSBkZXByZWNhdGVkWDtcbiAgICAgIGFuaW1hdGVkID0gZGVwcmVjYXRlZEFuaW1hdGVkO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucykge1xuICAgICAgeSA9IG9wdGlvbnMueTtcbiAgICAgIHggPSBvcHRpb25zLng7XG4gICAgICBhbmltYXRlZCA9IG9wdGlvbnMuYW5pbWF0ZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zY3JvbGxWaWV3Lm5hdGl2ZUluc3RhbmNlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQ29tbWFuZHMuc2Nyb2xsVG8oXG4gICAgICB0aGlzLl9zY3JvbGxWaWV3Lm5hdGl2ZUluc3RhbmNlLFxuICAgICAgeCB8fCAwLFxuICAgICAgeSB8fCAwLFxuICAgICAgYW5pbWF0ZWQgIT09IGZhbHNlLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgYSB2ZXJ0aWNhbCBTY3JvbGxWaWV3IHNjcm9sbHMgdG8gdGhlIGJvdHRvbS5cbiAgICogSWYgdGhpcyBpcyBhIGhvcml6b250YWwgU2Nyb2xsVmlldyBzY3JvbGxzIHRvIHRoZSByaWdodC5cbiAgICpcbiAgICogVXNlIGBzY3JvbGxUb0VuZCh7YW5pbWF0ZWQ6IHRydWV9KWAgZm9yIHNtb290aCBhbmltYXRlZCBzY3JvbGxpbmcsXG4gICAqIGBzY3JvbGxUb0VuZCh7YW5pbWF0ZWQ6IGZhbHNlfSlgIGZvciBpbW1lZGlhdGUgc2Nyb2xsaW5nLlxuICAgKiBJZiBubyBvcHRpb25zIGFyZSBwYXNzZWQsIGBhbmltYXRlZGAgZGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHNjcm9sbFRvRW5kOiAob3B0aW9ucz86ID97YW5pbWF0ZWQ/OiBib29sZWFuLCAuLi59KSA9PiB2b2lkID0gKFxuICAgIG9wdGlvbnM/OiA/e2FuaW1hdGVkPzogYm9vbGVhbiwgLi4ufSxcbiAgKSA9PiB7XG4gICAgLy8gRGVmYXVsdCB0byB0cnVlXG4gICAgY29uc3QgYW5pbWF0ZWQgPSAob3B0aW9ucyAmJiBvcHRpb25zLmFuaW1hdGVkKSAhPT0gZmFsc2U7XG4gICAgaWYgKHRoaXMuX3Njcm9sbFZpZXcubmF0aXZlSW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBDb21tYW5kcy5zY3JvbGxUb0VuZCh0aGlzLl9zY3JvbGxWaWV3Lm5hdGl2ZUluc3RhbmNlLCBhbmltYXRlZCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBzY3JvbGwgaW5kaWNhdG9ycyBtb21lbnRhcmlseS5cbiAgICpcbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgZmxhc2hTY3JvbGxJbmRpY2F0b3JzOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLl9zY3JvbGxWaWV3Lm5hdGl2ZUluc3RhbmNlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQ29tbWFuZHMuZmxhc2hTY3JvbGxJbmRpY2F0b3JzKHRoaXMuX3Njcm9sbFZpZXcubmF0aXZlSW5zdGFuY2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgY2FsbGJhY2sgdG8gb25Gb2N1cyBpbiBhIFRleHRJbnB1dHMnXG4gICAqIHBhcmVudCB2aWV3LiBOb3RlIHRoYXQgYW55IG1vZHVsZSB1c2luZyB0aGlzIG1peGluIG5lZWRzIHRvIHJldHVyblxuICAgKiB0aGUgcGFyZW50IHZpZXcncyByZWYgaW4gZ2V0U2Nyb2xsVmlld1JlZigpIGluIG9yZGVyIHRvIHVzZSB0aGlzIG1ldGhvZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG5vZGVIYW5kbGUgVGhlIFRleHRJbnB1dCBub2RlIGhhbmRsZVxuICAgKiBAcGFyYW0ge251bWJlcn0gYWRkaXRpb25hbE9mZnNldCBUaGUgc2Nyb2xsIHZpZXcncyBib3R0b20gXCJjb250ZW50SW5zZXRcIi5cbiAgICogICAgICAgIERlZmF1bHQgaXMgMC5cbiAgICogQHBhcmFtIHtib29sfSBwcmV2ZW50TmVnYXRpdmVTY3JvbGxpbmcgV2hldGhlciB0byBhbGxvdyBwdWxsaW5nIHRoZSBjb250ZW50XG4gICAqICAgICAgICBkb3duIHRvIG1ha2UgaXQgbWVldCB0aGUga2V5Ym9hcmQncyB0b3AuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqL1xuICBzY3JvbGxSZXNwb25kZXJTY3JvbGxOYXRpdmVIYW5kbGVUb0tleWJvYXJkOiA8VD4oXG4gICAgbm9kZUhhbmRsZTogbnVtYmVyIHwgUmVhY3QuRWxlbWVudFJlZjxIb3N0Q29tcG9uZW50PFQ+PixcbiAgICBhZGRpdGlvbmFsT2Zmc2V0PzogbnVtYmVyLFxuICAgIHByZXZlbnROZWdhdGl2ZVNjcm9sbE9mZnNldD86IGJvb2xlYW4sXG4gICkgPT4gdm9pZCA9IDxUPihcbiAgICBub2RlSGFuZGxlOiBudW1iZXIgfCBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8VD4+LFxuICAgIGFkZGl0aW9uYWxPZmZzZXQ/OiBudW1iZXIsXG4gICAgcHJldmVudE5lZ2F0aXZlU2Nyb2xsT2Zmc2V0PzogYm9vbGVhbixcbiAgKSA9PiB7XG4gICAgdGhpcy5fYWRkaXRpb25hbFNjcm9sbE9mZnNldCA9IGFkZGl0aW9uYWxPZmZzZXQgfHwgMDtcbiAgICB0aGlzLl9wcmV2ZW50TmVnYXRpdmVTY3JvbGxPZmZzZXQgPSAhIXByZXZlbnROZWdhdGl2ZVNjcm9sbE9mZnNldDtcblxuICAgIGlmICh0aGlzLl9pbm5lclZpZXcubmF0aXZlSW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygbm9kZUhhbmRsZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIFVJTWFuYWdlci5tZWFzdXJlTGF5b3V0KFxuICAgICAgICBub2RlSGFuZGxlLFxuICAgICAgICBudWxsdGhyb3dzKGZpbmROb2RlSGFuZGxlKHRoaXMpKSxcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgICAgICB0aGlzLl90ZXh0SW5wdXRGb2N1c0Vycm9yLFxuICAgICAgICB0aGlzLl9pbnB1dE1lYXN1cmVBbmRTY3JvbGxUb0tleWJvYXJkLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZUhhbmRsZS5tZWFzdXJlTGF5b3V0KFxuICAgICAgICB0aGlzLl9pbm5lclZpZXcubmF0aXZlSW5zdGFuY2UsXG4gICAgICAgIHRoaXMuX2lucHV0TWVhc3VyZUFuZFNjcm9sbFRvS2V5Ym9hcmQsXG4gICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICAgdGhpcy5fdGV4dElucHV0Rm9jdXNFcnJvcixcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0byB6b29tIHRvIGEgc3BlY2lmaWMgcmVjdCBpbiB0aGUgc2Nyb2xsdmlldy4gVGhlIGFyZ3VtZW50IGhhcyB0aGUgc2hhcGVcbiAgICoge3g6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcjsgYW5pbWF0ZWQ6IGJvb2xlYW4gPSB0cnVlfVxuICAgKlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBzY3JvbGxSZXNwb25kZXJab29tVG86IChcbiAgICByZWN0OiB7fFxuICAgICAgeDogbnVtYmVyLFxuICAgICAgeTogbnVtYmVyLFxuICAgICAgd2lkdGg6IG51bWJlcixcbiAgICAgIGhlaWdodDogbnVtYmVyLFxuICAgICAgYW5pbWF0ZWQ/OiBib29sZWFuLFxuICAgIHx9LFxuICAgIGFuaW1hdGVkPzogYm9vbGVhbiwgLy8gZGVwcmVjYXRlZCwgcHV0IHRoaXMgaW5zaWRlIHRoZSByZWN0IGFyZ3VtZW50IGluc3RlYWRcbiAgKSA9PiB2b2lkID0gKFxuICAgIHJlY3Q6IHt8XG4gICAgICB4OiBudW1iZXIsXG4gICAgICB5OiBudW1iZXIsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgICBhbmltYXRlZD86IGJvb2xlYW4sXG4gICAgfH0sXG4gICAgYW5pbWF0ZWQ/OiBib29sZWFuLCAvLyBkZXByZWNhdGVkLCBwdXQgdGhpcyBpbnNpZGUgdGhlIHJlY3QgYXJndW1lbnQgaW5zdGVhZFxuICApID0+IHtcbiAgICBpbnZhcmlhbnQoUGxhdGZvcm0uT1MgPT09ICdpb3MnLCAnem9vbVRvUmVjdCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICBpZiAoJ2FuaW1hdGVkJyBpbiByZWN0KSB7XG4gICAgICB0aGlzLl9hbmltYXRlZCA9IHJlY3QuYW5pbWF0ZWQ7XG4gICAgICBkZWxldGUgcmVjdC5hbmltYXRlZDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhbmltYXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ2BzY3JvbGxSZXNwb25kZXJab29tVG9gIGBhbmltYXRlZGAgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gVXNlIGBvcHRpb25zLmFuaW1hdGVkYCBpbnN0ZWFkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Njcm9sbFZpZXcubmF0aXZlSW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBDb21tYW5kcy56b29tVG9SZWN0KFxuICAgICAgdGhpcy5fc2Nyb2xsVmlldy5uYXRpdmVJbnN0YW5jZSxcbiAgICAgIHJlY3QsXG4gICAgICBhbmltYXRlZCAhPT0gZmFsc2UsXG4gICAgKTtcbiAgfTtcblxuICBfdGV4dElucHV0Rm9jdXNFcnJvcigpIHtcbiAgICBjb25zb2xlLndhcm4oJ0Vycm9yIG1lYXN1cmluZyB0ZXh0IGZpZWxkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxjdWxhdGlvbnMgcGVyZm9ybWVkIGhlcmUgYXNzdW1lIHRoZSBzY3JvbGwgdmlldyB0YWtlcyB1cCB0aGUgZW50aXJlXG4gICAqIHNjcmVlbiAtIGV2ZW4gaWYgaGFzIHNvbWUgY29udGVudCBpbnNldC4gV2UgdGhlbiBtZWFzdXJlIHRoZSBvZmZzZXRzIG9mIHRoZVxuICAgKiBrZXlib2FyZCwgYW5kIGNvbXBlbnNhdGUgYm90aCBmb3IgdGhlIHNjcm9sbCB2aWV3J3MgXCJjb250ZW50SW5zZXRcIi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgUG9zaXRpb24gb2YgaW5wdXQgdy5yLnQuIHRhYmxlIHZpZXcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgUG9zaXRpb24gb2YgaW5wdXQgdy5yLnQuIHRhYmxlIHZpZXcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBXaWR0aCBvZiB0aGUgdGV4dCBpbnB1dC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBIZWlnaHQgb2YgdGhlIHRleHQgaW5wdXQuXG4gICAqL1xuICBfaW5wdXRNZWFzdXJlQW5kU2Nyb2xsVG9LZXlib2FyZDogKFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICB0b3A6IG51bWJlcixcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApID0+IHZvaWQgPSAobGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBsZXQga2V5Ym9hcmRTY3JlZW5ZID0gRGltZW5zaW9ucy5nZXQoJ3dpbmRvdycpLmhlaWdodDtcblxuICAgIGNvbnN0IHNjcm9sbFRleHRJbnB1dEludG9WaXNpYmxlUmVjdCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9rZXlib2FyZE1ldHJpY3MgIT0gbnVsbCkge1xuICAgICAgICBrZXlib2FyZFNjcmVlblkgPSB0aGlzLl9rZXlib2FyZE1ldHJpY3Muc2NyZWVuWTtcbiAgICAgIH1cbiAgICAgIGxldCBzY3JvbGxPZmZzZXRZID1cbiAgICAgICAgdG9wIC0ga2V5Ym9hcmRTY3JlZW5ZICsgaGVpZ2h0ICsgdGhpcy5fYWRkaXRpb25hbFNjcm9sbE9mZnNldDtcblxuICAgICAgLy8gQnkgZGVmYXVsdCwgdGhpcyBjYW4gc2Nyb2xsIHdpdGggbmVnYXRpdmUgb2Zmc2V0LCBwdWxsaW5nIHRoZSBjb250ZW50XG4gICAgICAvLyBkb3duIHNvIHRoYXQgdGhlIHRhcmdldCBjb21wb25lbnQncyBib3R0b20gbWVldHMgdGhlIGtleWJvYXJkJ3MgdG9wLlxuICAgICAgLy8gSWYgcmVxdWVzdGVkIG90aGVyd2lzZSwgY2FwIHRoZSBvZmZzZXQgYXQgMCBtaW5pbXVtIHRvIGF2b2lkIGNvbnRlbnRcbiAgICAgIC8vIHNoaWZ0aW5nIGRvd24uXG4gICAgICBpZiAodGhpcy5fcHJldmVudE5lZ2F0aXZlU2Nyb2xsT2Zmc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHNjcm9sbE9mZnNldFkgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXRZKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Nyb2xsVG8oe3g6IDAsIHk6IHNjcm9sbE9mZnNldFksIGFuaW1hdGVkOiB0cnVlfSk7XG5cbiAgICAgIHRoaXMuX2FkZGl0aW9uYWxTY3JvbGxPZmZzZXQgPSAwO1xuICAgICAgdGhpcy5fcHJldmVudE5lZ2F0aXZlU2Nyb2xsT2Zmc2V0ID0gZmFsc2U7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9rZXlib2FyZE1ldHJpY3MgPT0gbnVsbCkge1xuICAgICAgLy8gYF9rZXlib2FyZE1ldHJpY3NgIGlzIHNldCBpbnNpZGUgYHNjcm9sbFJlc3BvbmRlcktleWJvYXJkV2lsbFNob3dgIHdoaWNoXG4gICAgICAvLyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgYmVmb3JlIGBfaW5wdXRNZWFzdXJlQW5kU2Nyb2xsVG9LZXlib2FyZGAgYnV0IG5hdGl2ZSBoYXMgYWxyZWFkeSBzY2hlZHVsZWQgaXQuXG4gICAgICAvLyBJbiBjYXNlIGl0IHdhcyBub3QgY2FsbGVkIGJlZm9yZSBgX2lucHV0TWVhc3VyZUFuZFNjcm9sbFRvS2V5Ym9hcmRgLCB3ZSBwb3N0cG9uZSBzY3JvbGxpbmcgdG9cbiAgICAgIC8vIHRleHQgaW5wdXQuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2Nyb2xsVGV4dElucHV0SW50b1Zpc2libGVSZWN0KCk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2Nyb2xsVGV4dElucHV0SW50b1Zpc2libGVSZWN0KCk7XG4gICAgfVxuICB9O1xuXG4gIF9nZXRLZXlGb3JJbmRleChpbmRleDogJEZsb3dGaXhNZSwgY2hpbGRBcnJheTogJEZsb3dGaXhNZSk6ICRGbG93Rml4TWUge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRBcnJheVtpbmRleF07XG4gICAgcmV0dXJuIGNoaWxkICYmIGNoaWxkLmtleTtcbiAgfVxuXG4gIF91cGRhdGVBbmltYXRlZE5vZGVBdHRhY2htZW50KCkge1xuICAgIGlmICh0aGlzLl9zY3JvbGxBbmltYXRlZFZhbHVlQXR0YWNobWVudCkge1xuICAgICAgdGhpcy5fc2Nyb2xsQW5pbWF0ZWRWYWx1ZUF0dGFjaG1lbnQuZGV0YWNoKCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuc3RpY2t5SGVhZGVySW5kaWNlcyAmJlxuICAgICAgdGhpcy5wcm9wcy5zdGlja3lIZWFkZXJJbmRpY2VzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuX3Njcm9sbEFuaW1hdGVkVmFsdWVBdHRhY2htZW50ID1cbiAgICAgICAgQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbi5hdHRhY2hOYXRpdmVFdmVudChcbiAgICAgICAgICB0aGlzLl9zY3JvbGxWaWV3Lm5hdGl2ZUluc3RhbmNlLFxuICAgICAgICAgICdvblNjcm9sbCcsXG4gICAgICAgICAgW3tuYXRpdmVFdmVudDoge2NvbnRlbnRPZmZzZXQ6IHt5OiB0aGlzLl9zY3JvbGxBbmltYXRlZFZhbHVlfX19XSxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfc2V0U3RpY2t5SGVhZGVyUmVmKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHJlZjogP1JlYWN0LkVsZW1lbnRSZWY8U3RpY2t5SGVhZGVyQ29tcG9uZW50VHlwZT4sXG4gICkge1xuICAgIGlmIChyZWYpIHtcbiAgICAgIHRoaXMuX3N0aWNreUhlYWRlclJlZnMuc2V0KGtleSwgcmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3RpY2t5SGVhZGVyUmVmcy5kZWxldGUoa2V5KTtcbiAgICB9XG4gIH1cblxuICBfb25TdGlja3lIZWFkZXJMYXlvdXQoaW5kZXg6ICRGbG93Rml4TWUsIGV2ZW50OiAkRmxvd0ZpeE1lLCBrZXk6ICRGbG93Rml4TWUpIHtcbiAgICBjb25zdCB7c3RpY2t5SGVhZGVySW5kaWNlc30gPSB0aGlzLnByb3BzO1xuICAgIGlmICghc3RpY2t5SGVhZGVySW5kaWNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZEFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheTwkRmxvd0ZpeE1lPih0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoa2V5ICE9PSB0aGlzLl9nZXRLZXlGb3JJbmRleChpbmRleCwgY2hpbGRBcnJheSkpIHtcbiAgICAgIC8vIGlnbm9yZSBzdGFsZSBsYXlvdXQgdXBkYXRlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGF5b3V0WSA9IGV2ZW50Lm5hdGl2ZUV2ZW50LmxheW91dC55O1xuICAgIHRoaXMuX2hlYWRlckxheW91dFlzLnNldChrZXksIGxheW91dFkpO1xuXG4gICAgY29uc3QgaW5kZXhPZkluZGV4ID0gc3RpY2t5SGVhZGVySW5kaWNlcy5pbmRleE9mKGluZGV4KTtcbiAgICBjb25zdCBwcmV2aW91c0hlYWRlckluZGV4ID0gc3RpY2t5SGVhZGVySW5kaWNlc1tpbmRleE9mSW5kZXggLSAxXTtcbiAgICBpZiAocHJldmlvdXNIZWFkZXJJbmRleCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0hlYWRlciA9IHRoaXMuX3N0aWNreUhlYWRlclJlZnMuZ2V0KFxuICAgICAgICB0aGlzLl9nZXRLZXlGb3JJbmRleChwcmV2aW91c0hlYWRlckluZGV4LCBjaGlsZEFycmF5KSxcbiAgICAgICk7XG4gICAgICBwcmV2aW91c0hlYWRlciAmJlxuICAgICAgICBwcmV2aW91c0hlYWRlci5zZXROZXh0SGVhZGVyWSAmJlxuICAgICAgICBwcmV2aW91c0hlYWRlci5zZXROZXh0SGVhZGVyWShsYXlvdXRZKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlU2Nyb2xsID0gKGU6IFNjcm9sbEV2ZW50KSA9PiB7XG4gICAgdGhpcy5fb2JzZXJ2ZWRTY3JvbGxTaW5jZUJlY29taW5nUmVzcG9uZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnByb3BzLm9uU2Nyb2xsICYmIHRoaXMucHJvcHMub25TY3JvbGwoZSk7XG4gIH07XG5cbiAgX2hhbmRsZUxheW91dCA9IChlOiBMYXlvdXRFdmVudCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmludmVydFN0aWNreUhlYWRlcnMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2xheW91dEhlaWdodDogZS5uYXRpdmVFdmVudC5sYXlvdXQuaGVpZ2h0fSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLm9uTGF5b3V0KSB7XG4gICAgICB0aGlzLnByb3BzLm9uTGF5b3V0KGUpO1xuICAgIH1cbiAgfTtcblxuICBfaGFuZGxlQ29udGVudE9uTGF5b3V0ID0gKGU6IExheW91dEV2ZW50KSA9PiB7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gZS5uYXRpdmVFdmVudC5sYXlvdXQ7XG4gICAgdGhpcy5wcm9wcy5vbkNvbnRlbnRTaXplQ2hhbmdlICYmXG4gICAgICB0aGlzLnByb3BzLm9uQ29udGVudFNpemVDaGFuZ2Uod2lkdGgsIGhlaWdodCk7XG4gIH07XG5cbiAgX2lubmVyVmlldzogUmVmRm9yd2FyZGVyPElubmVyVmlld0luc3RhbmNlLCBJbm5lclZpZXdJbnN0YW5jZT4gPVxuICAgIGNyZWF0ZVJlZkZvcndhcmRlcihcbiAgICAgIChpbnN0YW5jZTogSW5uZXJWaWV3SW5zdGFuY2UpOiBJbm5lclZpZXdJbnN0YW5jZSA9PiBpbnN0YW5jZSxcbiAgICApO1xuXG4gIF9zY3JvbGxWaWV3OiBSZWZGb3J3YXJkZXI8XG4gICAgTmF0aXZlU2Nyb2xsVmlld0luc3RhbmNlLFxuICAgIFB1YmxpY1Njcm9sbFZpZXdJbnN0YW5jZSxcbiAgPiA9IGNyZWF0ZVJlZkZvcndhcmRlcihcbiAgICAobmF0aXZlSW5zdGFuY2U6IE5hdGl2ZVNjcm9sbFZpZXdJbnN0YW5jZSk6IFB1YmxpY1Njcm9sbFZpZXdJbnN0YW5jZSA9PiB7XG4gICAgICAvLyBUaGlzIGlzIGEgaGFjay4gSWRlYWxseSB3ZSB3b3VsZCBmb3J3YXJkUmVmICB0byB0aGUgdW5kZXJseWluZ1xuICAgICAgLy8gaG9zdCBjb21wb25lbnQuIEhvd2V2ZXIsIHNpbmNlIFNjcm9sbFZpZXcgaGFzIGl0J3Mgb3duIG1ldGhvZHMgdGhhdCBjYW4gYmVcbiAgICAgIC8vIGNhbGxlZCBhcyB3ZWxsLCBpZiB3ZSB1c2VkIHRoZSBzdGFuZGFyZCBmb3J3YXJkUmVmIHRoZW4gdGhlc2VcbiAgICAgIC8vIG1ldGhvZHMgd291bGRuJ3QgYmUgYWNjZXNzaWJsZSBhbmQgdGh1cyBiZSBhIGJyZWFraW5nIGNoYW5nZS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGVyZWZvcmUgd2UgZWRpdCByZWYgdG8gaW5jbHVkZSBTY3JvbGxWaWV3J3MgcHVibGljIG1ldGhvZHMgc28gdGhhdFxuICAgICAgLy8gdGhleSBhcmUgY2FsbGFibGUgZnJvbSB0aGUgcmVmLlxuXG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gLSBLbm93biBpc3N1ZSB3aXRoIGFwcGVuZGluZyBjdXN0b20gbWV0aG9kcy5cbiAgICAgIGNvbnN0IHB1YmxpY0luc3RhbmNlOiBQdWJsaWNTY3JvbGxWaWV3SW5zdGFuY2UgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICBuYXRpdmVJbnN0YW5jZSxcbiAgICAgICAge1xuICAgICAgICAgIGdldFNjcm9sbFJlc3BvbmRlcjogdGhpcy5nZXRTY3JvbGxSZXNwb25kZXIsXG4gICAgICAgICAgZ2V0U2Nyb2xsYWJsZU5vZGU6IHRoaXMuZ2V0U2Nyb2xsYWJsZU5vZGUsXG4gICAgICAgICAgZ2V0SW5uZXJWaWV3Tm9kZTogdGhpcy5nZXRJbm5lclZpZXdOb2RlLFxuICAgICAgICAgIGdldElubmVyVmlld1JlZjogdGhpcy5nZXRJbm5lclZpZXdSZWYsXG4gICAgICAgICAgZ2V0TmF0aXZlU2Nyb2xsUmVmOiB0aGlzLmdldE5hdGl2ZVNjcm9sbFJlZixcbiAgICAgICAgICBzY3JvbGxUbzogdGhpcy5zY3JvbGxUbyxcbiAgICAgICAgICBzY3JvbGxUb0VuZDogdGhpcy5zY3JvbGxUb0VuZCxcbiAgICAgICAgICBmbGFzaFNjcm9sbEluZGljYXRvcnM6IHRoaXMuZmxhc2hTY3JvbGxJbmRpY2F0b3JzLFxuICAgICAgICAgIHNjcm9sbFJlc3BvbmRlclpvb21UbzogdGhpcy5zY3JvbGxSZXNwb25kZXJab29tVG8sXG4gICAgICAgICAgc2Nyb2xsUmVzcG9uZGVyU2Nyb2xsTmF0aXZlSGFuZGxlVG9LZXlib2FyZDpcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsUmVzcG9uZGVyU2Nyb2xsTmF0aXZlSGFuZGxlVG9LZXlib2FyZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwdWJsaWNJbnN0YW5jZTtcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBXYXJuaW5nLCB0aGlzIG1heSBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmb3IgYSBzaW5nbGUga2V5Ym9hcmQgb3BlbmluZy5cbiAgICogSXQncyBiZXN0IHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIG1ldGhvZCBhbmQgdGhlbiB0YWtlIGFueSBhY3Rpb25cbiAgICogYXQgYSBsYXRlciBwb2ludCAoZWl0aGVyIGluIGBrZXlib2FyZERpZFNob3dgIG9yIG90aGVyKS5cbiAgICpcbiAgICogSGVyZSdzIHRoZSBvcmRlciB0aGF0IGV2ZW50cyBvY2N1ciBpbjpcbiAgICogLSBmb2N1c1xuICAgKiAtIHdpbGxTaG93IHtzdGFydENvb3JkaW5hdGVzLCBlbmRDb29yZGluYXRlc30gc2V2ZXJhbCB0aW1lc1xuICAgKiAtIGRpZFNob3cgc2V2ZXJhbCB0aW1lc1xuICAgKiAtIGJsdXJcbiAgICogLSB3aWxsSGlkZSB7c3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXN9IHNldmVyYWwgdGltZXNcbiAgICogLSBkaWRIaWRlIHNldmVyYWwgdGltZXNcbiAgICpcbiAgICogVGhlIGBTY3JvbGxSZXNwb25kZXJgIG1vZHVsZSBjYWxsYmFja3MgZm9yIGVhY2ggb2YgdGhlc2UgZXZlbnRzLlxuICAgKiBFdmVuIHRob3VnaCBhbnkgdXNlciBjb3VsZCBoYXZlIGVhc2lseSBsaXN0ZW5lZCB0byBrZXlib2FyZCBldmVudHNcbiAgICogdGhlbXNlbHZlcywgdXNpbmcgdGhlc2UgYHByb3BzYCBjYWxsYmFja3MgZW5zdXJlcyB0aGF0IG9yZGVyaW5nIG9mIGV2ZW50c1xuICAgKiBpcyBjb25zaXN0ZW50IC0gYW5kIG5vdCBkZXBlbmRlbnQgb24gdGhlIG9yZGVyIHRoYXQgdGhlIGtleWJvYXJkIGV2ZW50cyBhcmVcbiAgICogc3Vic2NyaWJlZCB0by4gVGhpcyBtYXR0ZXJzIHdoZW4gdGVsbGluZyB0aGUgc2Nyb2xsIHZpZXcgdG8gc2Nyb2xsIHRvIHdoZXJlXG4gICAqIHRoZSBrZXlib2FyZCBpcyBoZWFkZWQgLSB0aGUgc2Nyb2xsIHJlc3BvbmRlciBiZXR0ZXIgaGF2ZSBiZWVuIG5vdGlmaWVkIG9mXG4gICAqIHRoZSBrZXlib2FyZCBkZXN0aW5hdGlvbiBiZWZvcmUgYmVpbmcgaW5zdHJ1Y3RlZCB0byBzY3JvbGwgdG8gd2hlcmUgdGhlXG4gICAqIGtleWJvYXJkIHdpbGwgYmUuIFN0aWNrIHRvIHRoZSBgU2Nyb2xsUmVzcG9uZGVyYCBjYWxsYmFja3MsIGFuZCBldmVyeXRoaW5nXG4gICAqIHdpbGwgd29yay5cbiAgICpcbiAgICogV0FSTklORzogVGhlc2UgY2FsbGJhY2tzIHdpbGwgZmlyZSBldmVuIGlmIGEga2V5Ym9hcmQgaXMgZGlzcGxheWVkIGluIGFcbiAgICogZGlmZmVyZW50IG5hdmlnYXRpb24gcGFuZS4gRmlsdGVyIG91dCB0aGUgZXZlbnRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICAgKiByZWxldmFudCB0byB5b3UuIChGb3IgZXhhbXBsZSwgb25seSBpZiB5b3UgcmVjZWl2ZSB0aGVzZSBjYWxsYmFja3MgYWZ0ZXJcbiAgICogeW91IGhhZCBleHBsaWNpdGx5IGZvY3VzZWQgYSBub2RlIGV0YykuXG4gICAqL1xuXG4gIHNjcm9sbFJlc3BvbmRlcktleWJvYXJkV2lsbFNob3c6IChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkID0gKFxuICAgIGU6IEtleWJvYXJkRXZlbnQsXG4gICkgPT4ge1xuICAgIHRoaXMuX2tleWJvYXJkTWV0cmljcyA9IGUuZW5kQ29vcmRpbmF0ZXM7XG4gICAgdGhpcy5wcm9wcy5vbktleWJvYXJkV2lsbFNob3cgJiYgdGhpcy5wcm9wcy5vbktleWJvYXJkV2lsbFNob3coZSk7XG4gIH07XG5cbiAgc2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmRXaWxsSGlkZTogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQgPSAoXG4gICAgZTogS2V5Ym9hcmRFdmVudCxcbiAgKSA9PiB7XG4gICAgdGhpcy5fa2V5Ym9hcmRNZXRyaWNzID0gbnVsbDtcbiAgICB0aGlzLnByb3BzLm9uS2V5Ym9hcmRXaWxsSGlkZSAmJiB0aGlzLnByb3BzLm9uS2V5Ym9hcmRXaWxsSGlkZShlKTtcbiAgfTtcblxuICBzY3JvbGxSZXNwb25kZXJLZXlib2FyZERpZFNob3c6IChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkID0gKFxuICAgIGU6IEtleWJvYXJkRXZlbnQsXG4gICkgPT4ge1xuICAgIHRoaXMuX2tleWJvYXJkTWV0cmljcyA9IGUuZW5kQ29vcmRpbmF0ZXM7XG4gICAgdGhpcy5wcm9wcy5vbktleWJvYXJkRGlkU2hvdyAmJiB0aGlzLnByb3BzLm9uS2V5Ym9hcmREaWRTaG93KGUpO1xuICB9O1xuXG4gIHNjcm9sbFJlc3BvbmRlcktleWJvYXJkRGlkSGlkZTogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQgPSAoXG4gICAgZTogS2V5Ym9hcmRFdmVudCxcbiAgKSA9PiB7XG4gICAgdGhpcy5fa2V5Ym9hcmRNZXRyaWNzID0gbnVsbDtcbiAgICB0aGlzLnByb3BzLm9uS2V5Ym9hcmREaWRIaWRlICYmIHRoaXMucHJvcHMub25LZXlib2FyZERpZEhpZGUoZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGlzIGZyb20gYW4gYG9uTW9tZW50dW1TY3JvbGxCZWdpbmAgZXZlbnQuXG4gICAqL1xuICBfaGFuZGxlTW9tZW50dW1TY3JvbGxCZWdpbjogKGU6IFNjcm9sbEV2ZW50KSA9PiB2b2lkID0gKGU6IFNjcm9sbEV2ZW50KSA9PiB7XG4gICAgdGhpcy5fbGFzdE1vbWVudHVtU2Nyb2xsQmVnaW5UaW1lID0gZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHRoaXMucHJvcHMub25Nb21lbnR1bVNjcm9sbEJlZ2luICYmIHRoaXMucHJvcHMub25Nb21lbnR1bVNjcm9sbEJlZ2luKGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBmcm9tIGFuIGBvbk1vbWVudHVtU2Nyb2xsRW5kYCBldmVudC5cbiAgICovXG4gIF9oYW5kbGVNb21lbnR1bVNjcm9sbEVuZDogKGU6IFNjcm9sbEV2ZW50KSA9PiB2b2lkID0gKGU6IFNjcm9sbEV2ZW50KSA9PiB7XG4gICAgRnJhbWVSYXRlTG9nZ2VyLmVuZFNjcm9sbCgpO1xuICAgIHRoaXMuX2xhc3RNb21lbnR1bVNjcm9sbEVuZFRpbWUgPSBnbG9iYWwucGVyZm9ybWFuY2Uubm93KCk7XG4gICAgdGhpcy5wcm9wcy5vbk1vbWVudHVtU2Nyb2xsRW5kICYmIHRoaXMucHJvcHMub25Nb21lbnR1bVNjcm9sbEVuZChlKTtcbiAgfTtcblxuICAvKipcbiAgICogVW5mb3J0dW5hdGVseSwgYG9uU2Nyb2xsQmVnaW5EcmFnYCBhbHNvIGZpcmVzIHdoZW4gKnN0b3BwaW5nKiB0aGUgc2Nyb2xsXG4gICAqIGFuaW1hdGlvbiwgYW5kIHRoZXJlJ3Mgbm90IGFuIGVhc3kgd2F5IHRvIGRpc3Rpbmd1aXNoIGEgZHJhZyB2cy4gc3RvcHBpbmdcbiAgICogbW9tZW50dW0uXG4gICAqXG4gICAqIEludm9rZSB0aGlzIGZyb20gYW4gYG9uU2Nyb2xsQmVnaW5EcmFnYCBldmVudC5cbiAgICovXG4gIF9oYW5kbGVTY3JvbGxCZWdpbkRyYWc6IChlOiBTY3JvbGxFdmVudCkgPT4gdm9pZCA9IChlOiBTY3JvbGxFdmVudCkgPT4ge1xuICAgIEZyYW1lUmF0ZUxvZ2dlci5iZWdpblNjcm9sbCgpOyAvLyBUT0RPOiB0cmFjayBhbGwgc2Nyb2xscyBhZnRlciBpbXBsZW1lbnRpbmcgb25TY3JvbGxFbmRBbmltYXRpb25cblxuICAgIGlmIChcbiAgICAgIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcgJiZcbiAgICAgIHRoaXMucHJvcHMua2V5Ym9hcmREaXNtaXNzTW9kZSA9PT0gJ29uLWRyYWcnXG4gICAgKSB7XG4gICAgICBkaXNtaXNzS2V5Ym9hcmQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uU2Nyb2xsQmVnaW5EcmFnICYmIHRoaXMucHJvcHMub25TY3JvbGxCZWdpbkRyYWcoZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGlzIGZyb20gYW4gYG9uU2Nyb2xsRW5kRHJhZ2AgZXZlbnQuXG4gICAqL1xuICBfaGFuZGxlU2Nyb2xsRW5kRHJhZzogKGU6IFNjcm9sbEV2ZW50KSA9PiB2b2lkID0gKGU6IFNjcm9sbEV2ZW50KSA9PiB7XG4gICAgY29uc3Qge3ZlbG9jaXR5fSA9IGUubmF0aXZlRXZlbnQ7XG4gICAgLy8gLSBJZiB3ZSBhcmUgYW5pbWF0aW5nLCB0aGVuIHRoaXMgaXMgYSBcImRyYWdcIiB0aGF0IGlzIHN0b3BwaW5nIHRoZSBzY3JvbGx2aWV3IGFuZCBtb21lbnR1bSBlbmRcbiAgICAvLyAgIHdpbGwgZmlyZS5cbiAgICAvLyAtIElmIHZlbG9jaXR5IGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBpbnRlcmFjdGlvbiB3aWxsIHN0b3Agd2hlbiBtb21lbnR1bSBzY3JvbGwgZW5kcyBvclxuICAgIC8vICAgYW5vdGhlciBkcmFnIHN0YXJ0cyBhbmQgZW5kcy5cbiAgICAvLyAtIElmIHdlIGRvbid0IGdldCB2ZWxvY2l0eSwgYmV0dGVyIHRvIHN0b3AgdGhlIGludGVyYWN0aW9uIHR3aWNlIHRoYW4gbm90IHN0b3AgaXQuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2lzQW5pbWF0aW5nKCkgJiZcbiAgICAgICghdmVsb2NpdHkgfHwgKHZlbG9jaXR5LnggPT09IDAgJiYgdmVsb2NpdHkueSA9PT0gMCkpXG4gICAgKSB7XG4gICAgICBGcmFtZVJhdGVMb2dnZXIuZW5kU2Nyb2xsKCk7XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25TY3JvbGxFbmREcmFnICYmIHRoaXMucHJvcHMub25TY3JvbGxFbmREcmFnKGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhpcyBjbGFzcyB0aGF0IGxldHMgdXMgcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlXG4gICAqIHZpZXcgaXMgY3VycmVudGx5IGFuaW1hdGluZy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHRvIGtub3cgd2hlblxuICAgKiBhIHRvdWNoIGhhcyBqdXN0IHN0YXJ0ZWQgb3IgZW5kZWQuXG4gICAqL1xuICBfaXNBbmltYXRpbmc6ICgpID0+IGJvb2xlYW4gPSAoKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RNb21lbnR1bVNjcm9sbEVuZCA9XG4gICAgICBub3cgLSB0aGlzLl9sYXN0TW9tZW50dW1TY3JvbGxFbmRUaW1lO1xuICAgIGNvbnN0IGlzQW5pbWF0aW5nID1cbiAgICAgIHRpbWVTaW5jZUxhc3RNb21lbnR1bVNjcm9sbEVuZCA8IElTX0FOSU1BVElOR19UT1VDSF9TVEFSVF9USFJFU0hPTERfTVMgfHxcbiAgICAgIHRoaXMuX2xhc3RNb21lbnR1bVNjcm9sbEVuZFRpbWUgPCB0aGlzLl9sYXN0TW9tZW50dW1TY3JvbGxCZWdpblRpbWU7XG4gICAgcmV0dXJuIGlzQW5pbWF0aW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBmcm9tIGFuIGBvblJlc3BvbmRlckdyYW50YCBldmVudC5cbiAgICovXG4gIF9oYW5kbGVSZXNwb25kZXJHcmFudDogKGU6IFByZXNzRXZlbnQpID0+IHZvaWQgPSAoZTogUHJlc3NFdmVudCkgPT4ge1xuICAgIHRoaXMuX29ic2VydmVkU2Nyb2xsU2luY2VCZWNvbWluZ1Jlc3BvbmRlciA9IGZhbHNlO1xuICAgIHRoaXMucHJvcHMub25SZXNwb25kZXJHcmFudCAmJiB0aGlzLnByb3BzLm9uUmVzcG9uZGVyR3JhbnQoZSk7XG4gICAgdGhpcy5fYmVjYW1lUmVzcG9uZGVyV2hpbGVBbmltYXRpbmcgPSB0aGlzLl9pc0FuaW1hdGluZygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBmcm9tIGFuIGBvblJlc3BvbmRlclJlamVjdGAgZXZlbnQuXG4gICAqXG4gICAqIFNvbWUgb3RoZXIgZWxlbWVudCBpcyBub3QgeWllbGRpbmcgaXRzIHJvbGUgYXMgcmVzcG9uZGVyLiBOb3JtYWxseSwgd2UnZFxuICAgKiBqdXN0IGRpc2FibGUgdGhlIGBVSVNjcm9sbFZpZXdgLCBidXQgYSB0b3VjaCBoYXMgYWxyZWFkeSBiZWdhbiBvbiBpdCwgdGhlXG4gICAqIGBVSVNjcm9sbFZpZXdgIHdpbGwgbm90IGFjY2VwdCBiZWluZyBkaXNhYmxlZCBhZnRlciB0aGF0LiBUaGUgZWFzaWVzdFxuICAgKiBzb2x1dGlvbiBmb3Igbm93IGlzIHRvIGFjY2VwdCB0aGUgbGltaXRhdGlvbiBvZiBkaXNhbGxvd2luZyB0aGlzXG4gICAqIGFsdG9nZXRoZXIuIFRvIGltcHJvdmUgdGhpcywgZmluZCBhIHdheSB0byBkaXNhYmxlIHRoZSBgVUlTY3JvbGxWaWV3YCBhZnRlclxuICAgKiBhIHRvdWNoIGhhcyBhbHJlYWR5IHN0YXJ0ZWQuXG4gICAqL1xuICBfaGFuZGxlUmVzcG9uZGVyUmVqZWN0OiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGlzIGZyb20gYW4gYG9uUmVzcG9uZGVyUmVsZWFzZWAgZXZlbnQuXG4gICAqL1xuICBfaGFuZGxlUmVzcG9uZGVyUmVsZWFzZTogKGU6IFByZXNzRXZlbnQpID0+IHZvaWQgPSAoZTogUHJlc3NFdmVudCkgPT4ge1xuICAgIHRoaXMuX2lzVG91Y2hpbmcgPSBlLm5hdGl2ZUV2ZW50LnRvdWNoZXMubGVuZ3RoICE9PSAwO1xuICAgIHRoaXMucHJvcHMub25SZXNwb25kZXJSZWxlYXNlICYmIHRoaXMucHJvcHMub25SZXNwb25kZXJSZWxlYXNlKGUpO1xuXG4gICAgaWYgKHR5cGVvZiBlLnRhcmdldCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0RpZCBub3QgZXhwZWN0IGV2ZW50IHRhcmdldCB0byBiZSBhIG51bWJlci4gU2hvdWxkIGhhdmUgYmVlbiBhIG5hdGl2ZSBjb21wb25lbnQnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCBzY3JvbGwgdmlld3Mgd2lsbCB1bmZvY3VzIGEgdGV4dEZpZWxkXG4gICAgLy8gaWYgYW5vdGhlciB0b3VjaCBvY2N1cnMgb3V0c2lkZSBvZiBpdFxuICAgIGNvbnN0IGN1cnJlbnRseUZvY3VzZWRUZXh0SW5wdXQgPSBUZXh0SW5wdXRTdGF0ZS5jdXJyZW50bHlGb2N1c2VkSW5wdXQoKTtcbiAgICBpZiAoXG4gICAgICBjdXJyZW50bHlGb2N1c2VkVGV4dElucHV0ICE9IG51bGwgJiZcbiAgICAgIHRoaXMucHJvcHMua2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcyAhPT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wcm9wcy5rZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzICE9PSAnYWx3YXlzJyAmJlxuICAgICAgdGhpcy5fa2V5Ym9hcmRJc0Rpc21pc3NpYmxlKCkgJiZcbiAgICAgIGUudGFyZ2V0ICE9PSBjdXJyZW50bHlGb2N1c2VkVGV4dElucHV0ICYmXG4gICAgICAhdGhpcy5fb2JzZXJ2ZWRTY3JvbGxTaW5jZUJlY29taW5nUmVzcG9uZGVyICYmXG4gICAgICAhdGhpcy5fYmVjYW1lUmVzcG9uZGVyV2hpbGVBbmltYXRpbmdcbiAgICApIHtcbiAgICAgIFRleHRJbnB1dFN0YXRlLmJsdXJUZXh0SW5wdXQoY3VycmVudGx5Rm9jdXNlZFRleHRJbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBXZSB3aWxsIGFsbG93IHRoZSBzY3JvbGwgdmlldyB0byBnaXZlIHVwIGl0cyBsb2NrIGlmZiBpdCBhY3F1aXJlZCB0aGUgbG9ja1xuICAgKiBkdXJpbmcgYW4gYW5pbWF0aW9uLiBUaGlzIGlzIGEgdmVyeSB1c2VmdWwgZGVmYXVsdCB0aGF0IGhhcHBlbnMgdG8gc2F0aXNmeVxuICAgKiBtYW55IGNvbW1vbiB1c2VyIGV4cGVyaWVuY2VzLlxuICAgKlxuICAgKiAtIFN0b3AgYSBzY3JvbGwgb24gdGhlIGxlZnQgZWRnZSwgdGhlbiB0dXJuIHRoYXQgaW50byBhbiBvdXRlciB2aWV3J3NcbiAgICogICBiYWNrc3dpcGUuXG4gICAqIC0gU3RvcCBhIHNjcm9sbCBtaWQtYm91bmNlIGF0IHRoZSB0b3AsIGNvbnRpbnVlIHB1bGxpbmcgdG8gaGF2ZSB0aGUgb3V0ZXJcbiAgICogICB2aWV3IGRpc21pc3MuXG4gICAqIC0gSG93ZXZlciwgd2l0aG91dCBjYXRjaGluZyB0aGUgc2Nyb2xsIHZpZXcgbWlkLWJvdW5jZSAod2hpbGUgaXQgaXNcbiAgICogICBtb3Rpb25sZXNzKSwgaWYgeW91IGRyYWcgZmFyIGVub3VnaCBmb3IgdGhlIHNjcm9sbCB2aWV3IHRvIGJlY29tZVxuICAgKiAgIHJlc3BvbmRlciAoYW5kIHRoZXJlZm9yZSBkcmFnIHRoZSBzY3JvbGwgdmlldyBhIGJpdCksIGFueSBiYWNrc3dpcGVcbiAgICogICBuYXZpZ2F0aW9uIG9mIGEgc3dpcGUgZ2VzdHVyZSBoaWdoZXIgaW4gdGhlIHZpZXcgaGllcmFyY2h5LCBzaG91bGQgYmVcbiAgICogICByZWplY3RlZC5cbiAgICovXG4gIF9oYW5kbGVSZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3Q6ICgpID0+IGJvb2xlYW4gPSAoKSA9PiB7XG4gICAgcmV0dXJuICF0aGlzLl9vYnNlcnZlZFNjcm9sbFNpbmNlQmVjb21pbmdSZXNwb25kZXI7XG4gIH07XG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGlzIGZyb20gYW4gYG9uU2Nyb2xsYCBldmVudC5cbiAgICovXG4gIF9oYW5kbGVTY3JvbGxTaG91bGRTZXRSZXNwb25kZXI6ICgpID0+IGJvb2xlYW4gPSAoKSA9PiB7XG4gICAgLy8gQWxsb3cgYW55IGV2ZW50IHRvdWNoIHBhc3MgdGhyb3VnaCBpZiB0aGUgZGVmYXVsdCBwYW4gcmVzcG9uZGVyIGlzIGRpc2FibGVkXG4gICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZVNjcm9sbFZpZXdQYW5SZXNwb25kZXIgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2lzVG91Y2hpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1lcmVseSB0b3VjaCBzdGFydGluZyBpcyBub3Qgc3VmZmljaWVudCBmb3IgYSBzY3JvbGwgdmlldyB0byBiZWNvbWUgdGhlXG4gICAqIHJlc3BvbmRlci4gQmVpbmcgdGhlIFwicmVzcG9uZGVyXCIgbWVhbnMgdGhhdCB0aGUgdmVyeSBuZXh0IHRvdWNoIG1vdmUvZW5kXG4gICAqIGV2ZW50IHdpbGwgcmVzdWx0IGluIGFuIGFjdGlvbi9tb3ZlbWVudC5cbiAgICpcbiAgICogSW52b2tlIHRoaXMgZnJvbSBhbiBgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcmAgZXZlbnQuXG4gICAqXG4gICAqIGBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyYCBpcyB1c2VkIHdoZW4gdGhlIG5leHQgbW92ZS9lbmQgd2lsbCB0cmlnZ2VyXG4gICAqIHNvbWUgVUkgbW92ZW1lbnQvYWN0aW9uLCBidXQgd2hlbiB5b3Ugd2FudCB0byB5aWVsZCBwcmlvcml0eSB0byB2aWV3c1xuICAgKiBuZXN0ZWQgaW5zaWRlIG9mIHRoZSB2aWV3LlxuICAgKlxuICAgKiBUaGVyZSBtYXkgYmUgc29tZSBjYXNlcyB3aGVyZSBzY3JvbGwgdmlld3MgYWN0dWFsbHkgc2hvdWxkIHJldHVybiBgdHJ1ZWBcbiAgICogZnJvbSBgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcmA6IEFueSB0aW1lIHdlIGFyZSBkZXRlY3RpbmcgYSBzdGFuZGFyZCB0YXBcbiAgICogdGhhdCBnaXZlcyBwcmlvcml0eSB0byBuZXN0ZWQgdmlld3MuXG4gICAqXG4gICAqIC0gSWYgYSBzaW5nbGUgdGFwIG9uIHRoZSBzY3JvbGwgdmlldyB0cmlnZ2VycyBhbiBhY3Rpb24gc3VjaCBhc1xuICAgKiAgIHJlY2VudGVyaW5nIGEgbWFwIHN0eWxlIHZpZXcgeWV0IHdhbnRzIHRvIGdpdmUgcHJpb3JpdHkgdG8gaW50ZXJhY3Rpb25cbiAgICogICB2aWV3cyBpbnNpZGUgKHN1Y2ggYXMgZHJvcHBlZCBwaW5zIG9yIGxhYmVscyksIHRoZW4gd2Ugd291bGQgcmV0dXJuIHRydWVcbiAgICogICBmcm9tIHRoaXMgbWV0aG9kIHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgdG91Y2guXG4gICAqXG4gICAqIC0gU2ltaWxhciB0byB0aGUgcHJldmlvdXMgY2FzZSwgaWYgYSB0d28gZmluZ2VyIFwidGFwXCIgc2hvdWxkIHRyaWdnZXIgYVxuICAgKiAgIHpvb20sIHdlIHdvdWxkIGNoZWNrIHRoZSBgdG91Y2hlc2AgY291bnQsIGFuZCBpZiBgPj0gMmAsIHdlIHdvdWxkIHJldHVyblxuICAgKiAgIHRydWUuXG4gICAqXG4gICAqL1xuICBfaGFuZGxlU3RhcnRTaG91bGRTZXRSZXNwb25kZXI6IChlOiBQcmVzc0V2ZW50KSA9PiBib29sZWFuID0gKFxuICAgIGU6IFByZXNzRXZlbnQsXG4gICkgPT4ge1xuICAgIC8vIEFsbG93IGFueSBldmVudCB0b3VjaCBwYXNzIHRocm91Z2ggaWYgdGhlIGRlZmF1bHQgcGFuIHJlc3BvbmRlciBpcyBkaXNhYmxlZFxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVTY3JvbGxWaWV3UGFuUmVzcG9uZGVyID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudGx5Rm9jdXNlZElucHV0ID0gVGV4dElucHV0U3RhdGUuY3VycmVudGx5Rm9jdXNlZElucHV0KCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm9wcy5rZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzID09PSAnaGFuZGxlZCcgJiZcbiAgICAgIHRoaXMuX2tleWJvYXJkSXNEaXNtaXNzaWJsZSgpICYmXG4gICAgICBlLnRhcmdldCAhPT0gY3VycmVudGx5Rm9jdXNlZElucHV0XG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGVyZSBhcmUgdGltZXMgd2hlbiB0aGUgc2Nyb2xsIHZpZXcgd2FudHMgdG8gYmVjb21lIHRoZSByZXNwb25kZXJcbiAgICogKG1lYW5pbmcgcmVzcG9uZCB0byB0aGUgbmV4dCBpbW1lZGlhdGUgYHRvdWNoU3RhcnQvdG91Y2hFbmRgKSwgaW4gYSB3YXlcbiAgICogdGhhdCAqZG9lc24ndCogZ2l2ZSBwcmlvcml0eSB0byBuZXN0ZWQgdmlld3MgKGhlbmNlIHRoZSBjYXB0dXJlIHBoYXNlKTpcbiAgICpcbiAgICogLSBDdXJyZW50bHkgYW5pbWF0aW5nLlxuICAgKiAtIFRhcHBpbmcgYW55d2hlcmUgdGhhdCBpcyBub3QgYSB0ZXh0IGlucHV0LCB3aGlsZSB0aGUga2V5Ym9hcmQgaXNcbiAgICogICB1cCAod2hpY2ggc2hvdWxkIGRpc21pc3MgdGhlIGtleWJvYXJkKS5cbiAgICpcbiAgICogSW52b2tlIHRoaXMgZnJvbSBhbiBgb25TdGFydFNob3VsZFNldFJlc3BvbmRlckNhcHR1cmVgIGV2ZW50LlxuICAgKi9cbiAgX2hhbmRsZVN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZTogKGU6IFByZXNzRXZlbnQpID0+IGJvb2xlYW4gPSAoXG4gICAgZTogUHJlc3NFdmVudCxcbiAgKSA9PiB7XG4gICAgLy8gVGhlIHNjcm9sbCB2aWV3IHNob3VsZCByZWNlaXZlIHRhcHMgaW5zdGVhZCBvZiBpdHMgZGVzY2VuZGFudHMgaWY6XG4gICAgLy8gKiBpdCBpcyBhbHJlYWR5IGFuaW1hdGluZy9kZWNlbGVyYXRpbmdcbiAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgYW55IGV2ZW50IHRvdWNoIHBhc3MgdGhyb3VnaCBpZiB0aGUgZGVmYXVsdCBwYW4gcmVzcG9uZGVyIGlzIGRpc2FibGVkXG4gICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZVNjcm9sbFZpZXdQYW5SZXNwb25kZXIgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqIHRoZSBrZXlib2FyZCBpcyB1cCwga2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcyBpcyAnbmV2ZXInICh0aGUgZGVmYXVsdCksXG4gICAgLy8gYW5kIGEgbmV3IHRvdWNoIHN0YXJ0cyB3aXRoIGEgbm9uLXRleHRpbnB1dCB0YXJnZXQgKGluIHdoaWNoIGNhc2UgdGhlXG4gICAgLy8gZmlyc3QgdGFwIHNob3VsZCBiZSBzZW50IHRvIHRoZSBzY3JvbGwgdmlldyBhbmQgZGlzbWlzcyB0aGUga2V5Ym9hcmQsXG4gICAgLy8gdGhlbiB0aGUgc2Vjb25kIHRhcCBnb2VzIHRvIHRoZSBhY3R1YWwgaW50ZXJpb3IgdmlldylcbiAgICBjb25zdCB7a2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwc30gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGtleWJvYXJkTmV2ZXJQZXJzaXN0VGFwcyA9XG4gICAgICAha2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcyB8fCBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzID09PSAnbmV2ZXInO1xuXG4gICAgaWYgKHR5cGVvZiBlLnRhcmdldCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0RpZCBub3QgZXhwZWN0IGV2ZW50IHRhcmdldCB0byBiZSBhIG51bWJlci4gU2hvdWxkIGhhdmUgYmVlbiBhIG5hdGl2ZSBjb21wb25lbnQnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gTGV0IHByZXNzZXMgdGhyb3VnaCBpZiB0aGUgc29mdCBrZXlib2FyZCBpcyBkZXRhY2hlZCBmcm9tIHRoZSB2aWV3cG9ydFxuICAgIGlmICh0aGlzLl9zb2Z0S2V5Ym9hcmRJc0RldGFjaGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBrZXlib2FyZE5ldmVyUGVyc2lzdFRhcHMgJiZcbiAgICAgIHRoaXMuX2tleWJvYXJkSXNEaXNtaXNzaWJsZSgpICYmXG4gICAgICBlLnRhcmdldCAhPSBudWxsICYmXG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgICAgIVRleHRJbnB1dFN0YXRlLmlzVGV4dElucHV0KGUudGFyZ2V0KVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEbyB3ZSBjb25zaWRlciB0aGVyZSB0byBiZSBhIGRpc21pc3NpYmxlIHNvZnQta2V5Ym9hcmQgb3Blbj9cbiAgICovXG4gIF9rZXlib2FyZElzRGlzbWlzc2libGU6ICgpID0+IGJvb2xlYW4gPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudGx5Rm9jdXNlZElucHV0ID0gVGV4dElucHV0U3RhdGUuY3VycmVudGx5Rm9jdXNlZElucHV0KCk7XG5cbiAgICAvLyBXZSBjYW5ub3QgZGlzbWlzcyB0aGUga2V5Ym9hcmQgd2l0aG91dCBhbiBpbnB1dCB0byBibHVyLCBldmVuIGlmIGEgc29mdFxuICAgIC8vIGtleWJvYXJkIGlzIG9wZW4gKGUuZy4gd2hlbiBrZXlib2FyZCBpcyBvcGVuIGR1ZSB0byBhIG5hdGl2ZSBjb21wb25lbnRcbiAgICAvLyBub3QgcGFydGljaXBhdGluZyBpbiBUZXh0SW5wdXRTdGF0ZSkuIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZVxuICAgIC8vIGN1cnJlbnRseSBmb2N1c2VkIGlucHV0IGlzbid0IGEgVGV4dElucHV0IChzdWNoIGFzIGJ5IGNhbGxpbmcgcmVmLmZvY3VzXG4gICAgLy8gb24gYSBub24tVGV4dElucHV0KS5cbiAgICBjb25zdCBoYXNGb2N1c2VkVGV4dElucHV0ID1cbiAgICAgIGN1cnJlbnRseUZvY3VzZWRJbnB1dCAhPSBudWxsICYmXG4gICAgICBUZXh0SW5wdXRTdGF0ZS5pc1RleHRJbnB1dChjdXJyZW50bHlGb2N1c2VkSW5wdXQpO1xuXG4gICAgLy8gRXZlbiBpZiBhbiBpbnB1dCBpcyBmb2N1c2VkLCB3ZSBtYXkgbm90IGhhdmUgYSBrZXlib2FyZCB0byBkaXNtaXNzLiBFLmdcbiAgICAvLyB3aGVuIHVzaW5nIGEgcGh5c2ljYWwga2V5Ym9hcmQuIEVuc3VyZSB3ZSBoYXZlIGFuIGV2ZW50IGZvciBhbiBvcGVuZWRcbiAgICAvLyBrZXlib2FyZC5cbiAgICBjb25zdCBzb2Z0S2V5Ym9hcmRNYXlCZU9wZW4gPVxuICAgICAgdGhpcy5fa2V5Ym9hcmRNZXRyaWNzICE9IG51bGwgfHwgdGhpcy5fa2V5Ym9hcmRFdmVudHNBcmVVbnJlbGlhYmxlKCk7XG5cbiAgICByZXR1cm4gaGFzRm9jdXNlZFRleHRJbnB1dCAmJiBzb2Z0S2V5Ym9hcmRNYXlCZU9wZW47XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW4gb3BlbiBzb2Z0IGtleWJvYXJkIGlzIHByZXNlbnQgd2hpY2ggZG9lcyBub3Qgb3ZlcmxhcCB0aGVcbiAgICogdmlld3BvcnQuIEUuZy4gZm9yIGEgVlIgc29mdC1rZXlib2FyZCB3aGljaCBpcyBkZXRhY2hlZCBmcm9tIHRoZSBhcHBcbiAgICogdmlld3BvcnQuXG4gICAqL1xuICBfc29mdEtleWJvYXJkSXNEZXRhY2hlZDogKCkgPT4gYm9vbGVhbiA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fa2V5Ym9hcmRNZXRyaWNzICE9IG51bGwgJiYgdGhpcy5fa2V5Ym9hcmRNZXRyaWNzLmhlaWdodCA9PT0gMDtcbiAgfTtcblxuICBfa2V5Ym9hcmRFdmVudHNBcmVVbnJlbGlhYmxlOiAoKSA9PiBib29sZWFuID0gKCkgPT4ge1xuICAgIC8vIEFuZHJvaWQgdmVyc2lvbnMgcHJpb3IgdG8gQVBJIDMwIHJlbHkgb24gb2JzZXJ2aW5nIGxheW91dCBjaGFuZ2VzIHdoZW5cbiAgICAvLyBgYW5kcm9pZDp3aW5kb3dTb2Z0SW5wdXRNb2RlYCBpcyBzZXQgdG8gYGFkanVzdFJlc2l6ZWAgb3IgYGFkanVzdFBhbmAuXG4gICAgcmV0dXJuIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcgJiYgUGxhdGZvcm0uVmVyc2lvbiA8IDMwO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBmcm9tIGFuIGBvblRvdWNoRW5kYCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtQcmVzc0V2ZW50fSBlIEV2ZW50LlxuICAgKi9cbiAgX2hhbmRsZVRvdWNoRW5kOiAoZTogUHJlc3NFdmVudCkgPT4gdm9pZCA9IChlOiBQcmVzc0V2ZW50KSA9PiB7XG4gICAgY29uc3QgbmF0aXZlRXZlbnQgPSBlLm5hdGl2ZUV2ZW50O1xuICAgIHRoaXMuX2lzVG91Y2hpbmcgPSBuYXRpdmVFdmVudC50b3VjaGVzLmxlbmd0aCAhPT0gMDtcblxuICAgIGNvbnN0IHtrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qga2V5Ym9hcmROZXZlclBlcnNpc3RzVGFwcyA9XG4gICAgICAha2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcyB8fCBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzID09PSAnbmV2ZXInO1xuXG4gICAgLy8gRGlzbWlzcyB0aGUga2V5Ym9hcmQgbm93IGlmIHdlIGRpZG4ndCBiZWNvbWUgcmVzcG9uZGVyIGluIGNhcHR1cmUgcGhhc2VcbiAgICAvLyB0byBlYXQgcHJlc3NlcywgYnV0IHN0aWxsIHdhbnQgdG8gZGlzbWlzcyBvbiBpbnRlcmFjdGlvbi5cbiAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgdGFyZ2V0IG9mIHRoZSB0b3VjaCBldmVudCBpcyB0aGUgY3VycmVudCBpbnB1dC5cbiAgICBjb25zdCBjdXJyZW50bHlGb2N1c2VkVGV4dElucHV0ID0gVGV4dElucHV0U3RhdGUuY3VycmVudGx5Rm9jdXNlZElucHV0KCk7XG4gICAgaWYgKFxuICAgICAgY3VycmVudGx5Rm9jdXNlZFRleHRJbnB1dCAhPSBudWxsICYmXG4gICAgICBlLnRhcmdldCAhPT0gY3VycmVudGx5Rm9jdXNlZFRleHRJbnB1dCAmJlxuICAgICAgdGhpcy5fc29mdEtleWJvYXJkSXNEZXRhY2hlZCgpICYmXG4gICAgICB0aGlzLl9rZXlib2FyZElzRGlzbWlzc2libGUoKSAmJlxuICAgICAga2V5Ym9hcmROZXZlclBlcnNpc3RzVGFwc1xuICAgICkge1xuICAgICAgVGV4dElucHV0U3RhdGUuYmx1clRleHRJbnB1dChjdXJyZW50bHlGb2N1c2VkVGV4dElucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uVG91Y2hFbmQgJiYgdGhpcy5wcm9wcy5vblRvdWNoRW5kKGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBmcm9tIGFuIGBvblRvdWNoQ2FuY2VsYCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtQcmVzc0V2ZW50fSBlIEV2ZW50LlxuICAgKi9cbiAgX2hhbmRsZVRvdWNoQ2FuY2VsOiAoZTogUHJlc3NFdmVudCkgPT4gdm9pZCA9IChlOiBQcmVzc0V2ZW50KSA9PiB7XG4gICAgdGhpcy5faXNUb3VjaGluZyA9IGZhbHNlO1xuICAgIHRoaXMucHJvcHMub25Ub3VjaENhbmNlbCAmJiB0aGlzLnByb3BzLm9uVG91Y2hDYW5jZWwoZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGlzIGZyb20gYW4gYG9uVG91Y2hTdGFydGAgZXZlbnQuXG4gICAqXG4gICAqIFNpbmNlIHdlIGtub3cgdGhhdCB0aGUgYFNpbXBsZUV2ZW50UGx1Z2luYCBvY2N1cnMgbGF0ZXIgaW4gdGhlIHBsdWdpblxuICAgKiBvcmRlciwgYWZ0ZXIgYFJlc3BvbmRlckV2ZW50UGx1Z2luYCwgd2UgY2FuIGRldGVjdCB0aGF0IHdlIHdlcmUgKm5vdCpcbiAgICogcGVybWl0dGVkIHRvIGJlIHRoZSByZXNwb25kZXIgKHByZXN1bWFibHkgYmVjYXVzZSBhIGNvbnRhaW5lZCB2aWV3IGJlY2FtZVxuICAgKiByZXNwb25kZXIpLiBUaGUgYG9uUmVzcG9uZGVyUmVqZWN0YCB3b24ndCBmaXJlIGluIHRoYXQgY2FzZSAtIGl0IG9ubHlcbiAgICogZmlyZXMgd2hlbiBhICpjdXJyZW50KiByZXNwb25kZXIgcmVqZWN0cyBvdXIgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHtQcmVzc0V2ZW50fSBlIFRvdWNoIFN0YXJ0IGV2ZW50LlxuICAgKi9cbiAgX2hhbmRsZVRvdWNoU3RhcnQ6IChlOiBQcmVzc0V2ZW50KSA9PiB2b2lkID0gKGU6IFByZXNzRXZlbnQpID0+IHtcbiAgICB0aGlzLl9pc1RvdWNoaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByb3BzLm9uVG91Y2hTdGFydCAmJiB0aGlzLnByb3BzLm9uVG91Y2hTdGFydChlKTtcbiAgfTtcblxuICAvKipcbiAgICogSW52b2tlIHRoaXMgZnJvbSBhbiBgb25Ub3VjaE1vdmVgIGV2ZW50LlxuICAgKlxuICAgKiBTaW5jZSB3ZSBrbm93IHRoYXQgdGhlIGBTaW1wbGVFdmVudFBsdWdpbmAgb2NjdXJzIGxhdGVyIGluIHRoZSBwbHVnaW5cbiAgICogb3JkZXIsIGFmdGVyIGBSZXNwb25kZXJFdmVudFBsdWdpbmAsIHdlIGNhbiBkZXRlY3QgdGhhdCB3ZSB3ZXJlICpub3QqXG4gICAqIHBlcm1pdHRlZCB0byBiZSB0aGUgcmVzcG9uZGVyIChwcmVzdW1hYmx5IGJlY2F1c2UgYSBjb250YWluZWQgdmlldyBiZWNhbWVcbiAgICogcmVzcG9uZGVyKS4gVGhlIGBvblJlc3BvbmRlclJlamVjdGAgd29uJ3QgZmlyZSBpbiB0aGF0IGNhc2UgLSBpdCBvbmx5XG4gICAqIGZpcmVzIHdoZW4gYSAqY3VycmVudCogcmVzcG9uZGVyIHJlamVjdHMgb3VyIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7UHJlc3NFdmVudH0gZSBUb3VjaCBTdGFydCBldmVudC5cbiAgICovXG4gIF9oYW5kbGVUb3VjaE1vdmU6IChlOiBQcmVzc0V2ZW50KSA9PiB2b2lkID0gKGU6IFByZXNzRXZlbnQpID0+IHtcbiAgICB0aGlzLnByb3BzLm9uVG91Y2hNb3ZlICYmIHRoaXMucHJvcHMub25Ub3VjaE1vdmUoZSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUgfCBSZWFjdC5FbGVtZW50PHN0cmluZz4ge1xuICAgIGNvbnN0IFtOYXRpdmVEaXJlY3Rpb25hbFNjcm9sbFZpZXcsIE5hdGl2ZURpcmVjdGlvbmFsU2Nyb2xsQ29udGVudFZpZXddID1cbiAgICAgIHRoaXMucHJvcHMuaG9yaXpvbnRhbCA9PT0gdHJ1ZVxuICAgICAgICA/IE5hdGl2ZUhvcml6b250YWxTY3JvbGxWaWV3VHVwbGVcbiAgICAgICAgOiBOYXRpdmVWZXJ0aWNhbFNjcm9sbFZpZXdUdXBsZTtcblxuICAgIGNvbnN0IGNvbnRlbnRDb250YWluZXJTdHlsZSA9IFtcbiAgICAgIHRoaXMucHJvcHMuaG9yaXpvbnRhbCA9PT0gdHJ1ZSAmJiBzdHlsZXMuY29udGVudENvbnRhaW5lckhvcml6b250YWwsXG4gICAgICB0aGlzLnByb3BzLmNvbnRlbnRDb250YWluZXJTdHlsZSxcbiAgICBdO1xuICAgIGlmIChfX0RFVl9fICYmIHRoaXMucHJvcHMuc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVt1bmRlcmNvbnN0cmFpbmVkLWltcGxpY2l0LWluc3RhbnRpYXRpb25dXG4gICAgICBjb25zdCBzdHlsZSA9IGZsYXR0ZW5TdHlsZSh0aGlzLnByb3BzLnN0eWxlKTtcbiAgICAgIGNvbnN0IGNoaWxkTGF5b3V0UHJvcHMgPSBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUNvbnRlbnQnXS5maWx0ZXIoXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICAgICAgcHJvcCA9PiBzdHlsZSAmJiBzdHlsZVtwcm9wXSAhPT0gdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgY2hpbGRMYXlvdXRQcm9wcy5sZW5ndGggPT09IDAsXG4gICAgICAgICdTY3JvbGxWaWV3IGNoaWxkIGxheW91dCAoJyArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hpbGRMYXlvdXRQcm9wcykgK1xuICAgICAgICAgICcpIG11c3QgYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBjb250ZW50Q29udGFpbmVyU3R5bGUgcHJvcC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50U2l6ZUNoYW5nZVByb3BzID1cbiAgICAgIHRoaXMucHJvcHMub25Db250ZW50U2l6ZUNoYW5nZSA9PSBudWxsXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG9uTGF5b3V0OiB0aGlzLl9oYW5kbGVDb250ZW50T25MYXlvdXQsXG4gICAgICAgICAgfTtcblxuICAgIGNvbnN0IHtzdGlja3lIZWFkZXJJbmRpY2VzfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBjYXVzZSB1bm5lY2Vzc2FyeSByZW1vdW50IHdoZW4gbmVzdGVkIGluIGNvbmRpdGlvbmFscyBhcyBpdCBjYXVzZXMgcmVtYXAgb2YgY2hpbGRyZW4ga2V5cy5cbiAgICAgKiBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvQ2hpbGRyZW4jY2hpbGRyZW4tdG9hcnJheS1jYXZlYXRzXG4gICAgICovXG4gICAgY2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5PCRGbG93Rml4TWU+KGNoaWxkcmVuKTtcblxuICAgIGlmIChzdGlja3lIZWFkZXJJbmRpY2VzICE9IG51bGwgJiYgc3RpY2t5SGVhZGVySW5kaWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJbmRleCA9IGNoaWxkID8gc3RpY2t5SGVhZGVySW5kaWNlcy5pbmRleE9mKGluZGV4KSA6IC0xO1xuICAgICAgICBpZiAoaW5kZXhPZkluZGV4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBjaGlsZC5rZXk7XG4gICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gc3RpY2t5SGVhZGVySW5kaWNlc1tpbmRleE9mSW5kZXggKyAxXTtcbiAgICAgICAgICBjb25zdCBTdGlja3lIZWFkZXJDb21wb25lbnQgPVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5TdGlja3lIZWFkZXJDb21wb25lbnQgfHwgU2Nyb2xsVmlld1N0aWNreUhlYWRlcjtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFN0aWNreUhlYWRlckNvbXBvbmVudFxuICAgICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgICAgcmVmPXtyZWYgPT4gdGhpcy5fc2V0U3RpY2t5SGVhZGVyUmVmKGtleSwgcmVmKX1cbiAgICAgICAgICAgICAgbmV4dEhlYWRlckxheW91dFk9e3RoaXMuX2hlYWRlckxheW91dFlzLmdldChcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRLZXlGb3JJbmRleChuZXh0SW5kZXgsIGNoaWxkcmVuKSxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25MYXlvdXQ9e2V2ZW50ID0+IHRoaXMuX29uU3RpY2t5SGVhZGVyTGF5b3V0KGluZGV4LCBldmVudCwga2V5KX1cbiAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0ZWRWYWx1ZT17dGhpcy5fc2Nyb2xsQW5pbWF0ZWRWYWx1ZX1cbiAgICAgICAgICAgICAgaW52ZXJ0ZWQ9e3RoaXMucHJvcHMuaW52ZXJ0U3RpY2t5SGVhZGVyc31cbiAgICAgICAgICAgICAgaGlkZGVuT25TY3JvbGw9e3RoaXMucHJvcHMuc3RpY2t5SGVhZGVySGlkZGVuT25TY3JvbGx9XG4gICAgICAgICAgICAgIHNjcm9sbFZpZXdIZWlnaHQ9e3RoaXMuc3RhdGUubGF5b3V0SGVpZ2h0fT5cbiAgICAgICAgICAgICAge2NoaWxkfVxuICAgICAgICAgICAgPC9TdGlja3lIZWFkZXJDb21wb25lbnQ+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjaGlsZHJlbiA9IChcbiAgICAgIDxTY3JvbGxWaWV3Q29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17dGhpcy5wcm9wcy5ob3Jpem9udGFsID09PSB0cnVlID8gSE9SSVpPTlRBTCA6IFZFUlRJQ0FMfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9TY3JvbGxWaWV3Q29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuXG4gICAgY29uc3QgaGFzU3RpY2t5SGVhZGVycyA9XG4gICAgICBBcnJheS5pc0FycmF5KHN0aWNreUhlYWRlckluZGljZXMpICYmIHN0aWNreUhlYWRlckluZGljZXMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IGNvbnRlbnRDb250YWluZXIgPSAoXG4gICAgICA8TmF0aXZlRGlyZWN0aW9uYWxTY3JvbGxDb250ZW50Vmlld1xuICAgICAgICB7Li4uY29udGVudFNpemVDaGFuZ2VQcm9wc31cbiAgICAgICAgcmVmPXt0aGlzLl9pbm5lclZpZXcuZ2V0Rm9yd2FyZGluZ1JlZih0aGlzLnByb3BzLmlubmVyVmlld1JlZil9XG4gICAgICAgIHN0eWxlPXtjb250ZW50Q29udGFpbmVyU3R5bGV9XG4gICAgICAgIHJlbW92ZUNsaXBwZWRTdWJ2aWV3cz17XG4gICAgICAgICAgLy8gU3VidmlldyBjbGlwcGluZyBjYXVzZXMgaXNzdWVzIHdpdGggc3RpY2t5IGhlYWRlcnMgb24gQW5kcm9pZCBhbmRcbiAgICAgICAgICAvLyB3b3VsZCBiZSBoYXJkIHRvIGZpeCBwcm9wZXJseSBpbiBhIHBlcmZvcm1hbnQgd2F5LlxuICAgICAgICAgIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcgJiYgaGFzU3RpY2t5SGVhZGVyc1xuICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgOiB0aGlzLnByb3BzLnJlbW92ZUNsaXBwZWRTdWJ2aWV3c1xuICAgICAgICB9XG4gICAgICAgIGNvbGxhcHNhYmxlPXtmYWxzZX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvTmF0aXZlRGlyZWN0aW9uYWxTY3JvbGxDb250ZW50Vmlldz5cbiAgICApO1xuXG4gICAgY29uc3QgYWx3YXlzQm91bmNlSG9yaXpvbnRhbCA9XG4gICAgICB0aGlzLnByb3BzLmFsd2F5c0JvdW5jZUhvcml6b250YWwgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMucHJvcHMuYWx3YXlzQm91bmNlSG9yaXpvbnRhbFxuICAgICAgICA6IHRoaXMucHJvcHMuaG9yaXpvbnRhbDtcblxuICAgIGNvbnN0IGFsd2F5c0JvdW5jZVZlcnRpY2FsID1cbiAgICAgIHRoaXMucHJvcHMuYWx3YXlzQm91bmNlVmVydGljYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMucHJvcHMuYWx3YXlzQm91bmNlVmVydGljYWxcbiAgICAgICAgOiAhdGhpcy5wcm9wcy5ob3Jpem9udGFsO1xuXG4gICAgY29uc3QgYmFzZVN0eWxlID1cbiAgICAgIHRoaXMucHJvcHMuaG9yaXpvbnRhbCA9PT0gdHJ1ZVxuICAgICAgICA/IHN0eWxlcy5iYXNlSG9yaXpvbnRhbFxuICAgICAgICA6IHN0eWxlcy5iYXNlVmVydGljYWw7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgYWx3YXlzQm91bmNlSG9yaXpvbnRhbCxcbiAgICAgIGFsd2F5c0JvdW5jZVZlcnRpY2FsLFxuICAgICAgc3R5bGU6IFN0eWxlU2hlZXQuY29tcG9zZShiYXNlU3R5bGUsIHRoaXMucHJvcHMuc3R5bGUpLFxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIG9uQ29udGVudFNpemVDaGFuZ2UgZnJvbSBwcm9wcywgc2luY2UgdGhpcyBldmVudCBjYW5cbiAgICAgIC8vIGJ1YmJsZSB1cCBmcm9tIFRleHRJbnB1dHNcbiAgICAgIG9uQ29udGVudFNpemVDaGFuZ2U6IG51bGwsXG4gICAgICBvbkxheW91dDogdGhpcy5faGFuZGxlTGF5b3V0LFxuICAgICAgb25Nb21lbnR1bVNjcm9sbEJlZ2luOiB0aGlzLl9oYW5kbGVNb21lbnR1bVNjcm9sbEJlZ2luLFxuICAgICAgb25Nb21lbnR1bVNjcm9sbEVuZDogdGhpcy5faGFuZGxlTW9tZW50dW1TY3JvbGxFbmQsXG4gICAgICBvblJlc3BvbmRlckdyYW50OiB0aGlzLl9oYW5kbGVSZXNwb25kZXJHcmFudCxcbiAgICAgIG9uUmVzcG9uZGVyUmVqZWN0OiB0aGlzLl9oYW5kbGVSZXNwb25kZXJSZWplY3QsXG4gICAgICBvblJlc3BvbmRlclJlbGVhc2U6IHRoaXMuX2hhbmRsZVJlc3BvbmRlclJlbGVhc2UsXG4gICAgICBvblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdDogdGhpcy5faGFuZGxlUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0LFxuICAgICAgb25TY3JvbGxCZWdpbkRyYWc6IHRoaXMuX2hhbmRsZVNjcm9sbEJlZ2luRHJhZyxcbiAgICAgIG9uU2Nyb2xsRW5kRHJhZzogdGhpcy5faGFuZGxlU2Nyb2xsRW5kRHJhZyxcbiAgICAgIG9uU2Nyb2xsU2hvdWxkU2V0UmVzcG9uZGVyOiB0aGlzLl9oYW5kbGVTY3JvbGxTaG91bGRTZXRSZXNwb25kZXIsXG4gICAgICBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyOiB0aGlzLl9oYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlcixcbiAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlOlxuICAgICAgICB0aGlzLl9oYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlckNhcHR1cmUsXG4gICAgICBvblRvdWNoRW5kOiB0aGlzLl9oYW5kbGVUb3VjaEVuZCxcbiAgICAgIG9uVG91Y2hNb3ZlOiB0aGlzLl9oYW5kbGVUb3VjaE1vdmUsXG4gICAgICBvblRvdWNoU3RhcnQ6IHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsXG4gICAgICBvblRvdWNoQ2FuY2VsOiB0aGlzLl9oYW5kbGVUb3VjaENhbmNlbCxcbiAgICAgIG9uU2Nyb2xsOiB0aGlzLl9oYW5kbGVTY3JvbGwsXG4gICAgICBzY3JvbGxFdmVudFRocm90dGxlOiBoYXNTdGlja3lIZWFkZXJzXG4gICAgICAgID8gMVxuICAgICAgICA6IHRoaXMucHJvcHMuc2Nyb2xsRXZlbnRUaHJvdHRsZSxcbiAgICAgIHNlbmRNb21lbnR1bUV2ZW50czpcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1vbWVudHVtU2Nyb2xsQmVnaW4gfHwgdGhpcy5wcm9wcy5vbk1vbWVudHVtU2Nyb2xsRW5kXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBmYWxzZSxcbiAgICAgIC8vIGRlZmF1bHQgdG8gdHJ1ZVxuICAgICAgc25hcFRvU3RhcnQ6IHRoaXMucHJvcHMuc25hcFRvU3RhcnQgIT09IGZhbHNlLFxuICAgICAgLy8gZGVmYXVsdCB0byB0cnVlXG4gICAgICBzbmFwVG9FbmQ6IHRoaXMucHJvcHMuc25hcFRvRW5kICE9PSBmYWxzZSxcbiAgICAgIC8vIHBhZ2luZ0VuYWJsZWQgaXMgb3ZlcnJpZGRlbiBieSBzbmFwVG9JbnRlcnZhbCAvIHNuYXBUb09mZnNldHNcbiAgICAgIHBhZ2luZ0VuYWJsZWQ6IFBsYXRmb3JtLnNlbGVjdCh7XG4gICAgICAgIC8vIG9uIGlPUywgcGFnaW5nRW5hYmxlZCBtdXN0IGJlIHNldCB0byBmYWxzZSB0byBoYXZlIHNuYXBUb0ludGVydmFsIC8gc25hcFRvT2Zmc2V0cyB3b3JrXG4gICAgICAgIGlvczpcbiAgICAgICAgICB0aGlzLnByb3BzLnBhZ2luZ0VuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICB0aGlzLnByb3BzLnNuYXBUb0ludGVydmFsID09IG51bGwgJiZcbiAgICAgICAgICB0aGlzLnByb3BzLnNuYXBUb09mZnNldHMgPT0gbnVsbCxcbiAgICAgICAgLy8gb24gQW5kcm9pZCwgcGFnaW5nRW5hYmxlZCBtdXN0IGJlIHNldCB0byB0cnVlIHRvIGhhdmUgc25hcFRvSW50ZXJ2YWwgLyBzbmFwVG9PZmZzZXRzIHdvcmtcbiAgICAgICAgYW5kcm9pZDpcbiAgICAgICAgICB0aGlzLnByb3BzLnBhZ2luZ0VuYWJsZWQgPT09IHRydWUgfHxcbiAgICAgICAgICB0aGlzLnByb3BzLnNuYXBUb0ludGVydmFsICE9IG51bGwgfHxcbiAgICAgICAgICB0aGlzLnByb3BzLnNuYXBUb09mZnNldHMgIT0gbnVsbCxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCB7ZGVjZWxlcmF0aW9uUmF0ZX0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChkZWNlbGVyYXRpb25SYXRlICE9IG51bGwpIHtcbiAgICAgIHByb3BzLmRlY2VsZXJhdGlvblJhdGUgPSBwcm9jZXNzRGVjZWxlcmF0aW9uUmF0ZShkZWNlbGVyYXRpb25SYXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWZyZXNoQ29udHJvbCA9IHRoaXMucHJvcHMucmVmcmVzaENvbnRyb2w7XG4gICAgY29uc3Qgc2Nyb2xsVmlld1JlZiA9IHRoaXMuX3Njcm9sbFZpZXcuZ2V0Rm9yd2FyZGluZ1JlZihcbiAgICAgIHRoaXMucHJvcHMuc2Nyb2xsVmlld1JlZixcbiAgICApO1xuXG4gICAgaWYgKHJlZnJlc2hDb250cm9sKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgICAgIC8vIE9uIGlPUyB0aGUgUmVmcmVzaENvbnRyb2wgaXMgYSBjaGlsZCBvZiB0aGUgU2Nyb2xsVmlldy5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8TmF0aXZlRGlyZWN0aW9uYWxTY3JvbGxWaWV3IHsuLi5wcm9wc30gcmVmPXtzY3JvbGxWaWV3UmVmfT5cbiAgICAgICAgICAgIHtyZWZyZXNoQ29udHJvbH1cbiAgICAgICAgICAgIHtjb250ZW50Q29udGFpbmVyfVxuICAgICAgICAgIDwvTmF0aXZlRGlyZWN0aW9uYWxTY3JvbGxWaWV3PlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICAgIC8vIE9uIEFuZHJvaWQgd3JhcCB0aGUgU2Nyb2xsVmlldyB3aXRoIGEgQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dC5cbiAgICAgICAgLy8gU2luY2UgdGhlIFNjcm9sbFZpZXcgaXMgd3JhcHBlZCBhZGQgdGhlIHN0eWxlIHByb3BzIHRvIHRoZVxuICAgICAgICAvLyBBbmRyb2lkU3dpcGVSZWZyZXNoTGF5b3V0IGFuZCB1c2UgZmxleDogMSBmb3IgdGhlIFNjcm9sbFZpZXcuXG4gICAgICAgIC8vIE5vdGU6IHdlIHNob3VsZCBzcGxpdCBwcm9wcy5zdHlsZSBvbiB0aGUgaW5uZXIgYW5kIG91dGVyIHByb3BzXG4gICAgICAgIC8vIGhvd2V2ZXIsIHRoZSBTY3JvbGxWaWV3IHN0aWxsIG5lZWRzIHRoZSBiYXNlU3R5bGUgdG8gYmUgc2Nyb2xsYWJsZVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW3VuZGVyY29uc3RyYWluZWQtaW1wbGljaXQtaW5zdGFudGlhdGlvbl1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgICAgY29uc3Qge291dGVyLCBpbm5lcn0gPSBzcGxpdExheW91dFByb3BzKGZsYXR0ZW5TdHlsZShwcm9wcy5zdHlsZSkpO1xuICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgICAgICAgIHJlZnJlc2hDb250cm9sLFxuICAgICAgICAgIHtzdHlsZTogU3R5bGVTaGVldC5jb21wb3NlKGJhc2VTdHlsZSwgb3V0ZXIpfSxcbiAgICAgICAgICA8TmF0aXZlRGlyZWN0aW9uYWxTY3JvbGxWaWV3XG4gICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKGJhc2VTdHlsZSwgaW5uZXIpfVxuICAgICAgICAgICAgcmVmPXtzY3JvbGxWaWV3UmVmfT5cbiAgICAgICAgICAgIHtjb250ZW50Q29udGFpbmVyfVxuICAgICAgICAgIDwvTmF0aXZlRGlyZWN0aW9uYWxTY3JvbGxWaWV3PixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxOYXRpdmVEaXJlY3Rpb25hbFNjcm9sbFZpZXcgey4uLnByb3BzfSByZWY9e3Njcm9sbFZpZXdSZWZ9PlxuICAgICAgICB7Y29udGVudENvbnRhaW5lcn1cbiAgICAgIDwvTmF0aXZlRGlyZWN0aW9uYWxTY3JvbGxWaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBiYXNlVmVydGljYWw6IHtcbiAgICBmbGV4R3JvdzogMSxcbiAgICBmbGV4U2hyaW5rOiAxLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIG92ZXJmbG93OiAnc2Nyb2xsJyxcbiAgfSxcbiAgYmFzZUhvcml6b250YWw6IHtcbiAgICBmbGV4R3JvdzogMSxcbiAgICBmbGV4U2hyaW5rOiAxLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIG92ZXJmbG93OiAnc2Nyb2xsJyxcbiAgfSxcbiAgY29udGVudENvbnRhaW5lckhvcml6b250YWw6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbn0pO1xuXG50eXBlIEZvcndhcmRlZFJlZjxUPiA9IHtjdXJyZW50OiBudWxsIHwgVCwgLi4ufSB8ICgobnVsbCB8IFQpID0+IG1peGVkKTtcblxudHlwZSBSZWZGb3J3YXJkZXI8VE5hdGl2ZUluc3RhbmNlLCBUUHVibGljSW5zdGFuY2U+ID0ge1xuICBnZXRGb3J3YXJkaW5nUmVmOiAoXG4gICAgP0ZvcndhcmRlZFJlZjxUUHVibGljSW5zdGFuY2U+LFxuICApID0+IChUTmF0aXZlSW5zdGFuY2UgfCBudWxsKSA9PiB2b2lkLFxuICBuYXRpdmVJbnN0YW5jZTogVE5hdGl2ZUluc3RhbmNlIHwgbnVsbCxcbiAgcHVibGljSW5zdGFuY2U6IFRQdWJsaWNJbnN0YW5jZSB8IG51bGwsXG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGB1c2VDYWxsYmFja2AgYW5kIGB1c2VNZXJnZVJlZnNgXG4gKiBvbmNlIGBTY3JvbGxWaWV3YCBpcyByZWltcGxlbWVudGVkIGFzIGEgZnVuY3Rpb25hbCBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlZkZvcndhcmRlcjxUTmF0aXZlSW5zdGFuY2UsIFRQdWJsaWNJbnN0YW5jZT4oXG4gIG11dGF0b3I6IFROYXRpdmVJbnN0YW5jZSA9PiBUUHVibGljSW5zdGFuY2UsXG4pOiBSZWZGb3J3YXJkZXI8VE5hdGl2ZUluc3RhbmNlLCBUUHVibGljSW5zdGFuY2U+IHtcbiAgY29uc3Qgc3RhdGU6IFJlZkZvcndhcmRlcjxUTmF0aXZlSW5zdGFuY2UsIFRQdWJsaWNJbnN0YW5jZT4gPSB7XG4gICAgZ2V0Rm9yd2FyZGluZ1JlZjogbWVtb2l6ZShmb3J3YXJkZWRSZWYgPT4ge1xuICAgICAgcmV0dXJuIChuYXRpdmVJbnN0YW5jZTogVE5hdGl2ZUluc3RhbmNlIHwgbnVsbCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBwdWJsaWNJbnN0YW5jZSA9XG4gICAgICAgICAgbmF0aXZlSW5zdGFuY2UgPT0gbnVsbCA/IG51bGwgOiBtdXRhdG9yKG5hdGl2ZUluc3RhbmNlKTtcblxuICAgICAgICBzdGF0ZS5uYXRpdmVJbnN0YW5jZSA9IG5hdGl2ZUluc3RhbmNlO1xuICAgICAgICBzdGF0ZS5wdWJsaWNJbnN0YW5jZSA9IHB1YmxpY0luc3RhbmNlO1xuXG4gICAgICAgIGlmIChmb3J3YXJkZWRSZWYgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZm9yd2FyZGVkUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmb3J3YXJkZWRSZWYocHVibGljSW5zdGFuY2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3J3YXJkZWRSZWYuY3VycmVudCA9IHB1YmxpY0luc3RhbmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSxcbiAgICBuYXRpdmVJbnN0YW5jZTogbnVsbCxcbiAgICBwdWJsaWNJbnN0YW5jZTogbnVsbCxcbiAgfTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAqIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG5mdW5jdGlvbiBXcmFwcGVyKHByb3BzLCByZWY6IChtaXhlZCA9PiBtaXhlZCkgfCB7Y3VycmVudDogbWl4ZWQsIC4uLn0pIHtcbiAgcmV0dXJuIDxTY3JvbGxWaWV3IHsuLi5wcm9wc30gc2Nyb2xsVmlld1JlZj17cmVmfSAvPjtcbn1cbldyYXBwZXIuZGlzcGxheU5hbWUgPSAnU2Nyb2xsVmlldyc7XG4vLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuY29uc3QgRm9yd2FyZGVkU2Nyb2xsVmlldyA9IFJlYWN0LmZvcndhcmRSZWYoV3JhcHBlcik7XG5cbi8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBBZGQgc3RhdGljIGNvbnRleHQgdG8gRm9yd2FyZGVkU2Nyb2xsVmlld1xuRm9yd2FyZGVkU2Nyb2xsVmlldy5Db250ZXh0ID0gU2Nyb2xsVmlld0NvbnRleHQ7XG5cbkZvcndhcmRlZFNjcm9sbFZpZXcuZGlzcGxheU5hbWUgPSAnU2Nyb2xsVmlldyc7XG5cbm1vZHVsZS5leHBvcnRzID0gKChGb3J3YXJkZWRTY3JvbGxWaWV3OiAkRmxvd0ZpeE1lKTogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG4gIFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFNjcm9sbFZpZXc+LFxuICBQdWJsaWNTY3JvbGxWaWV3SW5zdGFuY2UsXG4+ICZcbiAgU2Nyb2xsVmlld0NvbXBvbmVudFN0YXRpY3MpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRDb25maWcsIE1hcHBpbmd9IGZyb20gJy4vQW5pbWF0ZWRFdmVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRW5kQ2FsbGJhY2ssXG4gIEVuZFJlc3VsdCxcbn0gZnJvbSAnLi9hbmltYXRpb25zL0FuaW1hdGlvbic7XG5pbXBvcnQgdHlwZSB7RGVjYXlBbmltYXRpb25Db25maWd9IGZyb20gJy4vYW5pbWF0aW9ucy9EZWNheUFuaW1hdGlvbic7XG5pbXBvcnQgdHlwZSB7U3ByaW5nQW5pbWF0aW9uQ29uZmlnfSBmcm9tICcuL2FuaW1hdGlvbnMvU3ByaW5nQW5pbWF0aW9uJztcbmltcG9ydCB0eXBlIHtUaW1pbmdBbmltYXRpb25Db25maWd9IGZyb20gJy4vYW5pbWF0aW9ucy9UaW1pbmdBbmltYXRpb24nO1xuXG5pbXBvcnQge0FuaW1hdGVkRXZlbnQsIGF0dGFjaE5hdGl2ZUV2ZW50fSBmcm9tICcuL0FuaW1hdGVkRXZlbnQnO1xuaW1wb3J0IERlY2F5QW5pbWF0aW9uIGZyb20gJy4vYW5pbWF0aW9ucy9EZWNheUFuaW1hdGlvbic7XG5pbXBvcnQgU3ByaW5nQW5pbWF0aW9uIGZyb20gJy4vYW5pbWF0aW9ucy9TcHJpbmdBbmltYXRpb24nO1xuaW1wb3J0IFRpbWluZ0FuaW1hdGlvbiBmcm9tICcuL2FuaW1hdGlvbnMvVGltaW5nQW5pbWF0aW9uJztcbmltcG9ydCBjcmVhdGVBbmltYXRlZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUFuaW1hdGVkQ29tcG9uZW50JztcbmltcG9ydCBBbmltYXRlZEFkZGl0aW9uIGZyb20gJy4vbm9kZXMvQW5pbWF0ZWRBZGRpdGlvbic7XG5pbXBvcnQgQW5pbWF0ZWRDb2xvciBmcm9tICcuL25vZGVzL0FuaW1hdGVkQ29sb3InO1xuaW1wb3J0IEFuaW1hdGVkRGlmZkNsYW1wIGZyb20gJy4vbm9kZXMvQW5pbWF0ZWREaWZmQ2xhbXAnO1xuaW1wb3J0IEFuaW1hdGVkRGl2aXNpb24gZnJvbSAnLi9ub2Rlcy9BbmltYXRlZERpdmlzaW9uJztcbmltcG9ydCBBbmltYXRlZEludGVycG9sYXRpb24gZnJvbSAnLi9ub2Rlcy9BbmltYXRlZEludGVycG9sYXRpb24nO1xuaW1wb3J0IEFuaW1hdGVkTW9kdWxvIGZyb20gJy4vbm9kZXMvQW5pbWF0ZWRNb2R1bG8nO1xuaW1wb3J0IEFuaW1hdGVkTXVsdGlwbGljYXRpb24gZnJvbSAnLi9ub2Rlcy9BbmltYXRlZE11bHRpcGxpY2F0aW9uJztcbmltcG9ydCBBbmltYXRlZE5vZGUgZnJvbSAnLi9ub2Rlcy9BbmltYXRlZE5vZGUnO1xuaW1wb3J0IEFuaW1hdGVkU3VidHJhY3Rpb24gZnJvbSAnLi9ub2Rlcy9BbmltYXRlZFN1YnRyYWN0aW9uJztcbmltcG9ydCBBbmltYXRlZFRyYWNraW5nIGZyb20gJy4vbm9kZXMvQW5pbWF0ZWRUcmFja2luZyc7XG5pbXBvcnQgQW5pbWF0ZWRWYWx1ZSBmcm9tICcuL25vZGVzL0FuaW1hdGVkVmFsdWUnO1xuaW1wb3J0IEFuaW1hdGVkVmFsdWVYWSBmcm9tICcuL25vZGVzL0FuaW1hdGVkVmFsdWVYWSc7XG5cbmV4cG9ydCB0eXBlIENvbXBvc2l0ZUFuaW1hdGlvbiA9IHtcbiAgc3RhcnQ6IChjYWxsYmFjaz86ID9FbmRDYWxsYmFjaykgPT4gdm9pZCxcbiAgc3RvcDogKCkgPT4gdm9pZCxcbiAgcmVzZXQ6ICgpID0+IHZvaWQsXG4gIF9zdGFydE5hdGl2ZUxvb3A6IChpdGVyYXRpb25zPzogbnVtYmVyKSA9PiB2b2lkLFxuICBfaXNVc2luZ05hdGl2ZURyaXZlcjogKCkgPT4gYm9vbGVhbixcbiAgLi4uXG59O1xuXG5jb25zdCBhZGQgPSBmdW5jdGlvbiAoXG4gIGE6IEFuaW1hdGVkTm9kZSB8IG51bWJlcixcbiAgYjogQW5pbWF0ZWROb2RlIHwgbnVtYmVyLFxuKTogQW5pbWF0ZWRBZGRpdGlvbiB7XG4gIHJldHVybiBuZXcgQW5pbWF0ZWRBZGRpdGlvbihhLCBiKTtcbn07XG5cbmNvbnN0IHN1YnRyYWN0ID0gZnVuY3Rpb24gKFxuICBhOiBBbmltYXRlZE5vZGUgfCBudW1iZXIsXG4gIGI6IEFuaW1hdGVkTm9kZSB8IG51bWJlcixcbik6IEFuaW1hdGVkU3VidHJhY3Rpb24ge1xuICByZXR1cm4gbmV3IEFuaW1hdGVkU3VidHJhY3Rpb24oYSwgYik7XG59O1xuXG5jb25zdCBkaXZpZGUgPSBmdW5jdGlvbiAoXG4gIGE6IEFuaW1hdGVkTm9kZSB8IG51bWJlcixcbiAgYjogQW5pbWF0ZWROb2RlIHwgbnVtYmVyLFxuKTogQW5pbWF0ZWREaXZpc2lvbiB7XG4gIHJldHVybiBuZXcgQW5pbWF0ZWREaXZpc2lvbihhLCBiKTtcbn07XG5cbmNvbnN0IG11bHRpcGx5ID0gZnVuY3Rpb24gKFxuICBhOiBBbmltYXRlZE5vZGUgfCBudW1iZXIsXG4gIGI6IEFuaW1hdGVkTm9kZSB8IG51bWJlcixcbik6IEFuaW1hdGVkTXVsdGlwbGljYXRpb24ge1xuICByZXR1cm4gbmV3IEFuaW1hdGVkTXVsdGlwbGljYXRpb24oYSwgYik7XG59O1xuXG5jb25zdCBtb2R1bG8gPSBmdW5jdGlvbiAoYTogQW5pbWF0ZWROb2RlLCBtb2R1bHVzOiBudW1iZXIpOiBBbmltYXRlZE1vZHVsbyB7XG4gIHJldHVybiBuZXcgQW5pbWF0ZWRNb2R1bG8oYSwgbW9kdWx1cyk7XG59O1xuXG5jb25zdCBkaWZmQ2xhbXAgPSBmdW5jdGlvbiAoXG4gIGE6IEFuaW1hdGVkTm9kZSxcbiAgbWluOiBudW1iZXIsXG4gIG1heDogbnVtYmVyLFxuKTogQW5pbWF0ZWREaWZmQ2xhbXAge1xuICByZXR1cm4gbmV3IEFuaW1hdGVkRGlmZkNsYW1wKGEsIG1pbiwgbWF4KTtcbn07XG5cbmNvbnN0IF9jb21iaW5lQ2FsbGJhY2tzID0gZnVuY3Rpb24gKFxuICBjYWxsYmFjazogP0VuZENhbGxiYWNrLFxuICBjb25maWc6ICRSZWFkT25seTx7Li4uQW5pbWF0aW9uQ29uZmlnLCAuLi59Pixcbikge1xuICBpZiAoY2FsbGJhY2sgJiYgY29uZmlnLm9uQ29tcGxldGUpIHtcbiAgICByZXR1cm4gKC4uLmFyZ3M6IEFycmF5PEVuZFJlc3VsdD4pID0+IHtcbiAgICAgIGNvbmZpZy5vbkNvbXBsZXRlICYmIGNvbmZpZy5vbkNvbXBsZXRlKC4uLmFyZ3MpO1xuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soLi4uYXJncyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FsbGJhY2sgfHwgY29uZmlnLm9uQ29tcGxldGU7XG4gIH1cbn07XG5cbmNvbnN0IG1heWJlVmVjdG9yQW5pbSA9IGZ1bmN0aW9uIChcbiAgdmFsdWU6IEFuaW1hdGVkVmFsdWUgfCBBbmltYXRlZFZhbHVlWFkgfCBBbmltYXRlZENvbG9yLFxuICBjb25maWc6IE9iamVjdCxcbiAgYW5pbTogKHZhbHVlOiBBbmltYXRlZFZhbHVlLCBjb25maWc6IE9iamVjdCkgPT4gQ29tcG9zaXRlQW5pbWF0aW9uLFxuKTogP0NvbXBvc2l0ZUFuaW1hdGlvbiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFuaW1hdGVkVmFsdWVYWSkge1xuICAgIGNvbnN0IGNvbmZpZ1ggPSB7Li4uY29uZmlnfTtcbiAgICBjb25zdCBjb25maWdZID0gey4uLmNvbmZpZ307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uZmlnKSB7XG4gICAgICBjb25zdCB7eCwgeX0gPSBjb25maWdba2V5XTtcbiAgICAgIGlmICh4ICE9PSB1bmRlZmluZWQgJiYgeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmZpZ1hba2V5XSA9IHg7XG4gICAgICAgIGNvbmZpZ1lba2V5XSA9IHk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFYID0gYW5pbSgodmFsdWU6IEFuaW1hdGVkVmFsdWVYWSkueCwgY29uZmlnWCk7XG4gICAgY29uc3QgYVkgPSBhbmltKCh2YWx1ZTogQW5pbWF0ZWRWYWx1ZVhZKS55LCBjb25maWdZKTtcbiAgICAvLyBXZSB1c2UgYHN0b3BUb2dldGhlcjogZmFsc2VgIGhlcmUgYmVjYXVzZSBvdGhlcndpc2UgdHJhY2tpbmcgd2lsbCBicmVha1xuICAgIC8vIGJlY2F1c2UgdGhlIHNlY29uZCBhbmltYXRpb24gd2lsbCBnZXQgc3RvcHBlZCBiZWZvcmUgaXQgY2FuIHVwZGF0ZS5cbiAgICByZXR1cm4gcGFyYWxsZWwoW2FYLCBhWV0sIHtzdG9wVG9nZXRoZXI6IGZhbHNlfSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZENvbG9yKSB7XG4gICAgY29uc3QgY29uZmlnUiA9IHsuLi5jb25maWd9O1xuICAgIGNvbnN0IGNvbmZpZ0cgPSB7Li4uY29uZmlnfTtcbiAgICBjb25zdCBjb25maWdCID0gey4uLmNvbmZpZ307XG4gICAgY29uc3QgY29uZmlnQSA9IHsuLi5jb25maWd9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmZpZykge1xuICAgICAgY29uc3Qge3IsIGcsIGIsIGF9ID0gY29uZmlnW2tleV07XG4gICAgICBpZiAoXG4gICAgICAgIHIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBnICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGEgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbmZpZ1Jba2V5XSA9IHI7XG4gICAgICAgIGNvbmZpZ0dba2V5XSA9IGc7XG4gICAgICAgIGNvbmZpZ0Jba2V5XSA9IGI7XG4gICAgICAgIGNvbmZpZ0Fba2V5XSA9IGE7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFSID0gYW5pbSgodmFsdWU6IEFuaW1hdGVkQ29sb3IpLnIsIGNvbmZpZ1IpO1xuICAgIGNvbnN0IGFHID0gYW5pbSgodmFsdWU6IEFuaW1hdGVkQ29sb3IpLmcsIGNvbmZpZ0cpO1xuICAgIGNvbnN0IGFCID0gYW5pbSgodmFsdWU6IEFuaW1hdGVkQ29sb3IpLmIsIGNvbmZpZ0IpO1xuICAgIGNvbnN0IGFBID0gYW5pbSgodmFsdWU6IEFuaW1hdGVkQ29sb3IpLmEsIGNvbmZpZ0EpO1xuICAgIC8vIFdlIHVzZSBgc3RvcFRvZ2V0aGVyOiBmYWxzZWAgaGVyZSBiZWNhdXNlIG90aGVyd2lzZSB0cmFja2luZyB3aWxsIGJyZWFrXG4gICAgLy8gYmVjYXVzZSB0aGUgc2Vjb25kIGFuaW1hdGlvbiB3aWxsIGdldCBzdG9wcGVkIGJlZm9yZSBpdCBjYW4gdXBkYXRlLlxuICAgIHJldHVybiBwYXJhbGxlbChbYVIsIGFHLCBhQiwgYUFdLCB7c3RvcFRvZ2V0aGVyOiBmYWxzZX0pO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3Qgc3ByaW5nID0gZnVuY3Rpb24gKFxuICB2YWx1ZTogQW5pbWF0ZWRWYWx1ZSB8IEFuaW1hdGVkVmFsdWVYWSB8IEFuaW1hdGVkQ29sb3IsXG4gIGNvbmZpZzogU3ByaW5nQW5pbWF0aW9uQ29uZmlnLFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgY29uc3Qgc3RhcnQgPSBmdW5jdGlvbiAoXG4gICAgYW5pbWF0ZWRWYWx1ZTogQW5pbWF0ZWRWYWx1ZSB8IEFuaW1hdGVkVmFsdWVYWSB8IEFuaW1hdGVkQ29sb3IsXG4gICAgY29uZmlndXJhdGlvbjogU3ByaW5nQW5pbWF0aW9uQ29uZmlnLFxuICAgIGNhbGxiYWNrPzogP0VuZENhbGxiYWNrLFxuICApOiB2b2lkIHtcbiAgICBjYWxsYmFjayA9IF9jb21iaW5lQ2FsbGJhY2tzKGNhbGxiYWNrLCBjb25maWd1cmF0aW9uKTtcbiAgICBjb25zdCBzaW5nbGVWYWx1ZTogYW55ID0gYW5pbWF0ZWRWYWx1ZTtcbiAgICBjb25zdCBzaW5nbGVDb25maWc6IGFueSA9IGNvbmZpZ3VyYXRpb247XG4gICAgc2luZ2xlVmFsdWUuc3RvcFRyYWNraW5nKCk7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24udG9WYWx1ZSBpbnN0YW5jZW9mIEFuaW1hdGVkTm9kZSkge1xuICAgICAgc2luZ2xlVmFsdWUudHJhY2soXG4gICAgICAgIG5ldyBBbmltYXRlZFRyYWNraW5nKFxuICAgICAgICAgIHNpbmdsZVZhbHVlLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24udG9WYWx1ZSxcbiAgICAgICAgICBTcHJpbmdBbmltYXRpb24sXG4gICAgICAgICAgc2luZ2xlQ29uZmlnLFxuICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2luZ2xlVmFsdWUuYW5pbWF0ZShuZXcgU3ByaW5nQW5pbWF0aW9uKHNpbmdsZUNvbmZpZyksIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAoXG4gICAgbWF5YmVWZWN0b3JBbmltKHZhbHVlLCBjb25maWcsIHNwcmluZykgfHwge1xuICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChjYWxsYmFjaz86ID9FbmRDYWxsYmFjayk6IHZvaWQge1xuICAgICAgICBzdGFydCh2YWx1ZSwgY29uZmlnLCBjYWxsYmFjayk7XG4gICAgICB9LFxuXG4gICAgICBzdG9wOiBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIHZhbHVlLnN0b3BBbmltYXRpb24oKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIHZhbHVlLnJlc2V0QW5pbWF0aW9uKCk7XG4gICAgICB9LFxuXG4gICAgICBfc3RhcnROYXRpdmVMb29wOiBmdW5jdGlvbiAoaXRlcmF0aW9ucz86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzaW5nbGVDb25maWcgPSB7Li4uY29uZmlnLCBpdGVyYXRpb25zfTtcbiAgICAgICAgc3RhcnQodmFsdWUsIHNpbmdsZUNvbmZpZyk7XG4gICAgICB9LFxuXG4gICAgICBfaXNVc2luZ05hdGl2ZURyaXZlcjogZnVuY3Rpb24gKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY29uZmlnLnVzZU5hdGl2ZURyaXZlciB8fCBmYWxzZTtcbiAgICAgIH0sXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgdGltaW5nID0gZnVuY3Rpb24gKFxuICB2YWx1ZTogQW5pbWF0ZWRWYWx1ZSB8IEFuaW1hdGVkVmFsdWVYWSB8IEFuaW1hdGVkQ29sb3IsXG4gIGNvbmZpZzogVGltaW5nQW5pbWF0aW9uQ29uZmlnLFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgY29uc3Qgc3RhcnQgPSBmdW5jdGlvbiAoXG4gICAgYW5pbWF0ZWRWYWx1ZTogQW5pbWF0ZWRWYWx1ZSB8IEFuaW1hdGVkVmFsdWVYWSB8IEFuaW1hdGVkQ29sb3IsXG4gICAgY29uZmlndXJhdGlvbjogVGltaW5nQW5pbWF0aW9uQ29uZmlnLFxuICAgIGNhbGxiYWNrPzogP0VuZENhbGxiYWNrLFxuICApOiB2b2lkIHtcbiAgICBjYWxsYmFjayA9IF9jb21iaW5lQ2FsbGJhY2tzKGNhbGxiYWNrLCBjb25maWd1cmF0aW9uKTtcbiAgICBjb25zdCBzaW5nbGVWYWx1ZTogYW55ID0gYW5pbWF0ZWRWYWx1ZTtcbiAgICBjb25zdCBzaW5nbGVDb25maWc6IGFueSA9IGNvbmZpZ3VyYXRpb247XG4gICAgc2luZ2xlVmFsdWUuc3RvcFRyYWNraW5nKCk7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24udG9WYWx1ZSBpbnN0YW5jZW9mIEFuaW1hdGVkTm9kZSkge1xuICAgICAgc2luZ2xlVmFsdWUudHJhY2soXG4gICAgICAgIG5ldyBBbmltYXRlZFRyYWNraW5nKFxuICAgICAgICAgIHNpbmdsZVZhbHVlLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24udG9WYWx1ZSxcbiAgICAgICAgICBUaW1pbmdBbmltYXRpb24sXG4gICAgICAgICAgc2luZ2xlQ29uZmlnLFxuICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2luZ2xlVmFsdWUuYW5pbWF0ZShuZXcgVGltaW5nQW5pbWF0aW9uKHNpbmdsZUNvbmZpZyksIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICBtYXliZVZlY3RvckFuaW0odmFsdWUsIGNvbmZpZywgdGltaW5nKSB8fCB7XG4gICAgICBzdGFydDogZnVuY3Rpb24gKGNhbGxiYWNrPzogP0VuZENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAgIHN0YXJ0KHZhbHVlLCBjb25maWcsIGNhbGxiYWNrKTtcbiAgICAgIH0sXG5cbiAgICAgIHN0b3A6IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgdmFsdWUuc3RvcEFuaW1hdGlvbigpO1xuICAgICAgfSxcblxuICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgdmFsdWUucmVzZXRBbmltYXRpb24oKTtcbiAgICAgIH0sXG5cbiAgICAgIF9zdGFydE5hdGl2ZUxvb3A6IGZ1bmN0aW9uIChpdGVyYXRpb25zPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUNvbmZpZyA9IHsuLi5jb25maWcsIGl0ZXJhdGlvbnN9O1xuICAgICAgICBzdGFydCh2YWx1ZSwgc2luZ2xlQ29uZmlnKTtcbiAgICAgIH0sXG5cbiAgICAgIF9pc1VzaW5nTmF0aXZlRHJpdmVyOiBmdW5jdGlvbiAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjb25maWcudXNlTmF0aXZlRHJpdmVyIHx8IGZhbHNlO1xuICAgICAgfSxcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBkZWNheSA9IGZ1bmN0aW9uIChcbiAgdmFsdWU6IEFuaW1hdGVkVmFsdWUgfCBBbmltYXRlZFZhbHVlWFkgfCBBbmltYXRlZENvbG9yLFxuICBjb25maWc6IERlY2F5QW5pbWF0aW9uQ29uZmlnLFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgY29uc3Qgc3RhcnQgPSBmdW5jdGlvbiAoXG4gICAgYW5pbWF0ZWRWYWx1ZTogQW5pbWF0ZWRWYWx1ZSB8IEFuaW1hdGVkVmFsdWVYWSB8IEFuaW1hdGVkQ29sb3IsXG4gICAgY29uZmlndXJhdGlvbjogRGVjYXlBbmltYXRpb25Db25maWcsXG4gICAgY2FsbGJhY2s/OiA/RW5kQ2FsbGJhY2ssXG4gICk6IHZvaWQge1xuICAgIGNhbGxiYWNrID0gX2NvbWJpbmVDYWxsYmFja3MoY2FsbGJhY2ssIGNvbmZpZ3VyYXRpb24pO1xuICAgIGNvbnN0IHNpbmdsZVZhbHVlOiBhbnkgPSBhbmltYXRlZFZhbHVlO1xuICAgIGNvbnN0IHNpbmdsZUNvbmZpZzogYW55ID0gY29uZmlndXJhdGlvbjtcbiAgICBzaW5nbGVWYWx1ZS5zdG9wVHJhY2tpbmcoKTtcbiAgICBzaW5nbGVWYWx1ZS5hbmltYXRlKG5ldyBEZWNheUFuaW1hdGlvbihzaW5nbGVDb25maWcpLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICBtYXliZVZlY3RvckFuaW0odmFsdWUsIGNvbmZpZywgZGVjYXkpIHx8IHtcbiAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoY2FsbGJhY2s/OiA/RW5kQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgICAgc3RhcnQodmFsdWUsIGNvbmZpZywgY2FsbGJhY2spO1xuICAgICAgfSxcblxuICAgICAgc3RvcDogZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICB2YWx1ZS5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICB9LFxuXG4gICAgICByZXNldDogZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICB2YWx1ZS5yZXNldEFuaW1hdGlvbigpO1xuICAgICAgfSxcblxuICAgICAgX3N0YXJ0TmF0aXZlTG9vcDogZnVuY3Rpb24gKGl0ZXJhdGlvbnM/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2luZ2xlQ29uZmlnID0gey4uLmNvbmZpZywgaXRlcmF0aW9uc307XG4gICAgICAgIHN0YXJ0KHZhbHVlLCBzaW5nbGVDb25maWcpO1xuICAgICAgfSxcblxuICAgICAgX2lzVXNpbmdOYXRpdmVEcml2ZXI6IGZ1bmN0aW9uICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy51c2VOYXRpdmVEcml2ZXIgfHwgZmFsc2U7XG4gICAgICB9LFxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IHNlcXVlbmNlID0gZnVuY3Rpb24gKFxuICBhbmltYXRpb25zOiBBcnJheTxDb21wb3NpdGVBbmltYXRpb24+LFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgbGV0IGN1cnJlbnQgPSAwO1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBmdW5jdGlvbiAoY2FsbGJhY2s/OiA/RW5kQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uQ29tcGxldGUgPSBmdW5jdGlvbiAocmVzdWx0OiBFbmRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCFyZXN1bHQuZmluaXNoZWQpIHtcbiAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnQrKztcblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gYW5pbWF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFuaW1hdGlvbnNbY3VycmVudF0uc3RhcnQob25Db21wbGV0ZSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoYW5pbWF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soe2ZpbmlzaGVkOiB0cnVlfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbmltYXRpb25zW2N1cnJlbnRdLnN0YXJ0KG9uQ29tcGxldGUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY3VycmVudCA8IGFuaW1hdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGFuaW1hdGlvbnNbY3VycmVudF0uc3RvcCgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNldDogZnVuY3Rpb24gKCkge1xuICAgICAgYW5pbWF0aW9ucy5mb3JFYWNoKChhbmltYXRpb24sIGlkeCkgPT4ge1xuICAgICAgICBpZiAoaWR4IDw9IGN1cnJlbnQpIHtcbiAgICAgICAgICBhbmltYXRpb24ucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjdXJyZW50ID0gMDtcbiAgICB9LFxuXG4gICAgX3N0YXJ0TmF0aXZlTG9vcDogZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTG9vcHMgcnVuIHVzaW5nIHRoZSBuYXRpdmUgZHJpdmVyIGNhbm5vdCBjb250YWluIEFuaW1hdGVkLnNlcXVlbmNlIGFuaW1hdGlvbnMnLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2lzVXNpbmdOYXRpdmVEcml2ZXI6IGZ1bmN0aW9uICgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICB9O1xufTtcblxudHlwZSBQYXJhbGxlbENvbmZpZyA9IHtcbiAgLy8gSWYgb25lIGlzIHN0b3BwZWQsIHN0b3AgYWxsLiAgZGVmYXVsdDogdHJ1ZVxuICBzdG9wVG9nZXRoZXI/OiBib29sZWFuLFxuICAuLi5cbn07XG5jb25zdCBwYXJhbGxlbCA9IGZ1bmN0aW9uIChcbiAgYW5pbWF0aW9uczogQXJyYXk8Q29tcG9zaXRlQW5pbWF0aW9uPixcbiAgY29uZmlnPzogP1BhcmFsbGVsQ29uZmlnLFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgbGV0IGRvbmVDb3VudCA9IDA7XG4gIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGNhbGwgc3RvcCgpIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBhbmltYXRpb25cbiAgY29uc3QgaGFzRW5kZWQ6IHtbbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcbiAgY29uc3Qgc3RvcFRvZ2V0aGVyID0gIShjb25maWcgJiYgY29uZmlnLnN0b3BUb2dldGhlciA9PT0gZmFsc2UpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzdGFydDogZnVuY3Rpb24gKGNhbGxiYWNrPzogP0VuZENhbGxiYWNrKSB7XG4gICAgICBpZiAoZG9uZUNvdW50ID09PSBhbmltYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayh7ZmluaXNoZWQ6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRpb25zLmZvckVhY2goKGFuaW1hdGlvbiwgaWR4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNiID0gZnVuY3Rpb24gKGVuZFJlc3VsdDogRW5kUmVzdWx0KSB7XG4gICAgICAgICAgaGFzRW5kZWRbaWR4XSA9IHRydWU7XG4gICAgICAgICAgZG9uZUNvdW50Kys7XG4gICAgICAgICAgaWYgKGRvbmVDb3VudCA9PT0gYW5pbWF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRvbmVDb3VudCA9IDA7XG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhlbmRSZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZW5kUmVzdWx0LmZpbmlzaGVkICYmIHN0b3BUb2dldGhlcikge1xuICAgICAgICAgICAgcmVzdWx0LnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFhbmltYXRpb24pIHtcbiAgICAgICAgICBjYih7ZmluaXNoZWQ6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbmltYXRpb24uc3RhcnQoY2IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgYW5pbWF0aW9ucy5mb3JFYWNoKChhbmltYXRpb24sIGlkeCkgPT4ge1xuICAgICAgICAhaGFzRW5kZWRbaWR4XSAmJiBhbmltYXRpb24uc3RvcCgpO1xuICAgICAgICBoYXNFbmRlZFtpZHhdID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZXNldDogZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgYW5pbWF0aW9ucy5mb3JFYWNoKChhbmltYXRpb24sIGlkeCkgPT4ge1xuICAgICAgICBhbmltYXRpb24ucmVzZXQoKTtcbiAgICAgICAgaGFzRW5kZWRbaWR4XSA9IGZhbHNlO1xuICAgICAgICBkb25lQ291bnQgPSAwO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9zdGFydE5hdGl2ZUxvb3A6IGZ1bmN0aW9uICgpOiBlbXB0eSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMb29wcyBydW4gdXNpbmcgdGhlIG5hdGl2ZSBkcml2ZXIgY2Fubm90IGNvbnRhaW4gQW5pbWF0ZWQucGFyYWxsZWwgYW5pbWF0aW9ucycsXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfaXNVc2luZ05hdGl2ZURyaXZlcjogZnVuY3Rpb24gKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGRlbGF5ID0gZnVuY3Rpb24gKHRpbWU6IG51bWJlcik6IENvbXBvc2l0ZUFuaW1hdGlvbiB7XG4gIC8vIFdvdWxkIGJlIG5pY2UgdG8gbWFrZSBhIHNwZWNpYWxpemVkIGltcGxlbWVudGF0aW9uXG4gIHJldHVybiB0aW1pbmcobmV3IEFuaW1hdGVkVmFsdWUoMCksIHtcbiAgICB0b1ZhbHVlOiAwLFxuICAgIGRlbGF5OiB0aW1lLFxuICAgIGR1cmF0aW9uOiAwLFxuICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gIH0pO1xufTtcblxuY29uc3Qgc3RhZ2dlciA9IGZ1bmN0aW9uIChcbiAgdGltZTogbnVtYmVyLFxuICBhbmltYXRpb25zOiBBcnJheTxDb21wb3NpdGVBbmltYXRpb24+LFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgcmV0dXJuIHBhcmFsbGVsKFxuICAgIGFuaW1hdGlvbnMubWFwKChhbmltYXRpb24sIGkpID0+IHtcbiAgICAgIHJldHVybiBzZXF1ZW5jZShbZGVsYXkodGltZSAqIGkpLCBhbmltYXRpb25dKTtcbiAgICB9KSxcbiAgKTtcbn07XG5cbnR5cGUgTG9vcEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgaXRlcmF0aW9uczogbnVtYmVyLFxuICByZXNldEJlZm9yZUl0ZXJhdGlvbj86IGJvb2xlYW4sXG4gIC4uLlxufTtcblxuY29uc3QgbG9vcCA9IGZ1bmN0aW9uIChcbiAgYW5pbWF0aW9uOiBDb21wb3NpdGVBbmltYXRpb24sXG4gIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICB7aXRlcmF0aW9ucyA9IC0xLCByZXNldEJlZm9yZUl0ZXJhdGlvbiA9IHRydWV9OiBMb29wQW5pbWF0aW9uQ29uZmlnID0ge30sXG4pOiBDb21wb3NpdGVBbmltYXRpb24ge1xuICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICBsZXQgaXRlcmF0aW9uc1NvRmFyID0gMDtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogZnVuY3Rpb24gKGNhbGxiYWNrPzogP0VuZENhbGxiYWNrKSB7XG4gICAgICBjb25zdCByZXN0YXJ0ID0gZnVuY3Rpb24gKHJlc3VsdDogRW5kUmVzdWx0ID0ge2ZpbmlzaGVkOiB0cnVlfSk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaXNGaW5pc2hlZCB8fFxuICAgICAgICAgIGl0ZXJhdGlvbnNTb0ZhciA9PT0gaXRlcmF0aW9ucyB8fFxuICAgICAgICAgIHJlc3VsdC5maW5pc2hlZCA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVyYXRpb25zU29GYXIrKztcbiAgICAgICAgICByZXNldEJlZm9yZUl0ZXJhdGlvbiAmJiBhbmltYXRpb24ucmVzZXQoKTtcbiAgICAgICAgICBhbmltYXRpb24uc3RhcnQocmVzdGFydCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoIWFuaW1hdGlvbiB8fCBpdGVyYXRpb25zID09PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHtmaW5pc2hlZDogdHJ1ZX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFuaW1hdGlvbi5faXNVc2luZ05hdGl2ZURyaXZlcigpKSB7XG4gICAgICAgICAgYW5pbWF0aW9uLl9zdGFydE5hdGl2ZUxvb3AoaXRlcmF0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdGFydCgpOyAvLyBTdGFydCBsb29waW5nIHJlY3Vyc2l2ZWx5IG9uIHRoZSBqcyB0aHJlYWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICBpc0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIGFuaW1hdGlvbi5zdG9wKCk7XG4gICAgfSxcblxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICBpdGVyYXRpb25zU29GYXIgPSAwO1xuICAgICAgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgICAgYW5pbWF0aW9uLnJlc2V0KCk7XG4gICAgfSxcblxuICAgIF9zdGFydE5hdGl2ZUxvb3A6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xvb3BzIHJ1biB1c2luZyB0aGUgbmF0aXZlIGRyaXZlciBjYW5ub3QgY29udGFpbiBBbmltYXRlZC5sb29wIGFuaW1hdGlvbnMnLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2lzVXNpbmdOYXRpdmVEcml2ZXI6IGZ1bmN0aW9uICgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhbmltYXRpb24uX2lzVXNpbmdOYXRpdmVEcml2ZXIoKTtcbiAgICB9LFxuICB9O1xufTtcblxuZnVuY3Rpb24gZm9ya0V2ZW50KFxuICBldmVudDogP0FuaW1hdGVkRXZlbnQgfCA/RnVuY3Rpb24sXG4gIGxpc3RlbmVyOiBGdW5jdGlvbixcbik6IEFuaW1hdGVkRXZlbnQgfCBGdW5jdGlvbiB7XG4gIGlmICghZXZlbnQpIHtcbiAgICByZXR1cm4gbGlzdGVuZXI7XG4gIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBBbmltYXRlZEV2ZW50KSB7XG4gICAgZXZlbnQuX19hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgdHlwZW9mIGV2ZW50ID09PSAnZnVuY3Rpb24nICYmIGV2ZW50KC4uLmFyZ3MpO1xuICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmZvcmtFdmVudChcbiAgZXZlbnQ6ID9BbmltYXRlZEV2ZW50IHwgP0Z1bmN0aW9uLFxuICBsaXN0ZW5lcjogRnVuY3Rpb24sXG4pOiB2b2lkIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50IGluc3RhbmNlb2YgQW5pbWF0ZWRFdmVudCkge1xuICAgIGV2ZW50Ll9fcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuICB9XG59XG5cbmNvbnN0IGV2ZW50ID0gZnVuY3Rpb24gKFxuICBhcmdNYXBwaW5nOiAkUmVhZE9ubHlBcnJheTw/TWFwcGluZz4sXG4gIGNvbmZpZzogRXZlbnRDb25maWcsXG4pOiBhbnkge1xuICBjb25zdCBhbmltYXRlZEV2ZW50ID0gbmV3IEFuaW1hdGVkRXZlbnQoYXJnTWFwcGluZywgY29uZmlnKTtcbiAgaWYgKGFuaW1hdGVkRXZlbnQuX19pc05hdGl2ZSkge1xuICAgIHJldHVybiBhbmltYXRlZEV2ZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhbmltYXRlZEV2ZW50Ll9fZ2V0SGFuZGxlcigpO1xuICB9XG59O1xuXG4vLyBBbGwgdHlwZXMgb2YgYW5pbWF0ZWQgbm9kZXMgdGhhdCByZXByZXNlbnQgc2NhbGFyIG51bWJlcnMgYW5kIGNhbiBiZSBpbnRlcnBvbGF0ZWQgKGV0YylcbnR5cGUgQW5pbWF0ZWROdW1lcmljID1cbiAgfCBBbmltYXRlZEFkZGl0aW9uXG4gIHwgQW5pbWF0ZWREaWZmQ2xhbXBcbiAgfCBBbmltYXRlZERpdmlzaW9uXG4gIHwgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uPG51bWJlcj5cbiAgfCBBbmltYXRlZE1vZHVsb1xuICB8IEFuaW1hdGVkTXVsdGlwbGljYXRpb25cbiAgfCBBbmltYXRlZFN1YnRyYWN0aW9uXG4gIHwgQW5pbWF0ZWRWYWx1ZTtcblxuZXhwb3J0IHR5cGUge0FuaW1hdGVkTnVtZXJpYyBhcyBOdW1lcmljfTtcblxuLyoqXG4gKiBUaGUgYEFuaW1hdGVkYCBsaWJyYXJ5IGlzIGRlc2lnbmVkIHRvIG1ha2UgYW5pbWF0aW9ucyBmbHVpZCwgcG93ZXJmdWwsIGFuZFxuICogZWFzeSB0byBidWlsZCBhbmQgbWFpbnRhaW4uIGBBbmltYXRlZGAgZm9jdXNlcyBvbiBkZWNsYXJhdGl2ZSByZWxhdGlvbnNoaXBzXG4gKiBiZXR3ZWVuIGlucHV0cyBhbmQgb3V0cHV0cywgd2l0aCBjb25maWd1cmFibGUgdHJhbnNmb3JtcyBpbiBiZXR3ZWVuLCBhbmRcbiAqIHNpbXBsZSBgc3RhcnRgL2BzdG9wYCBtZXRob2RzIHRvIGNvbnRyb2wgdGltZS1iYXNlZCBhbmltYXRpb24gZXhlY3V0aW9uLlxuICogSWYgYWRkaXRpb25hbCB0cmFuc2Zvcm1zIGFyZSBhZGRlZCwgYmUgc3VyZSB0byBpbmNsdWRlIHRoZW0gaW5cbiAqIEFuaW1hdGVkTW9jay5qcyBhcyB3ZWxsLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIHZhbHVlIGNsYXNzIGZvciBkcml2aW5nIGFuaW1hdGlvbnMuICBUeXBpY2FsbHkgaW5pdGlhbGl6ZWQgd2l0aFxuICAgKiBgbmV3IEFuaW1hdGVkLlZhbHVlKDApO2BcbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjdmFsdWVcbiAgICovXG4gIFZhbHVlOiBBbmltYXRlZFZhbHVlLFxuICAvKipcbiAgICogMkQgdmFsdWUgY2xhc3MgZm9yIGRyaXZpbmcgMkQgYW5pbWF0aW9ucywgc3VjaCBhcyBwYW4gZ2VzdHVyZXMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkdmFsdWV4eVxuICAgKi9cbiAgVmFsdWVYWTogQW5pbWF0ZWRWYWx1ZVhZLFxuICAvKipcbiAgICogVmFsdWUgY2xhc3MgZm9yIGRyaXZpbmcgY29sb3IgYW5pbWF0aW9ucy5cbiAgICovXG4gIENvbG9yOiBBbmltYXRlZENvbG9yLFxuICAvKipcbiAgICogRXhwb3J0ZWQgdG8gdXNlIHRoZSBJbnRlcnBvbGF0aW9uIHR5cGUgaW4gZmxvdy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjaW50ZXJwb2xhdGlvblxuICAgKi9cbiAgSW50ZXJwb2xhdGlvbjogQW5pbWF0ZWRJbnRlcnBvbGF0aW9uLFxuICAvKipcbiAgICogRXhwb3J0ZWQgZm9yIGVhc2Ugb2YgdHlwZSBjaGVja2luZy4gQWxsIGFuaW1hdGVkIHZhbHVlcyBkZXJpdmUgZnJvbSB0aGlzXG4gICAqIGNsYXNzLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCNub2RlXG4gICAqL1xuICBOb2RlOiBBbmltYXRlZE5vZGUsXG5cbiAgLyoqXG4gICAqIEFuaW1hdGVzIGEgdmFsdWUgZnJvbSBhbiBpbml0aWFsIHZlbG9jaXR5IHRvIHplcm8gYmFzZWQgb24gYSBkZWNheVxuICAgKiBjb2VmZmljaWVudC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjZGVjYXlcbiAgICovXG4gIGRlY2F5LFxuICAvKipcbiAgICogQW5pbWF0ZXMgYSB2YWx1ZSBhbG9uZyBhIHRpbWVkIGVhc2luZyBjdXJ2ZS4gVGhlIEVhc2luZyBtb2R1bGUgaGFzIHRvbnMgb2ZcbiAgICogcHJlZGVmaW5lZCBjdXJ2ZXMsIG9yIHlvdSBjYW4gdXNlIHlvdXIgb3duIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCN0aW1pbmdcbiAgICovXG4gIHRpbWluZyxcbiAgLyoqXG4gICAqIEFuaW1hdGVzIGEgdmFsdWUgYWNjb3JkaW5nIHRvIGFuIGFuYWx5dGljYWwgc3ByaW5nIG1vZGVsIGJhc2VkIG9uXG4gICAqIGRhbXBlZCBoYXJtb25pYyBvc2NpbGxhdGlvbi5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjc3ByaW5nXG4gICAqL1xuICBzcHJpbmcsXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQW5pbWF0ZWQgdmFsdWUgY29tcG9zZWQgZnJvbSB0d28gQW5pbWF0ZWQgdmFsdWVzIGFkZGVkXG4gICAqIHRvZ2V0aGVyLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCNhZGRcbiAgICovXG4gIGFkZCxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBbmltYXRlZCB2YWx1ZSBjb21wb3NlZCBieSBzdWJ0cmFjdGluZyB0aGUgc2Vjb25kIEFuaW1hdGVkXG4gICAqIHZhbHVlIGZyb20gdGhlIGZpcnN0IEFuaW1hdGVkIHZhbHVlLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCNzdWJ0cmFjdFxuICAgKi9cbiAgc3VidHJhY3QsXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQW5pbWF0ZWQgdmFsdWUgY29tcG9zZWQgYnkgZGl2aWRpbmcgdGhlIGZpcnN0IEFuaW1hdGVkIHZhbHVlXG4gICAqIGJ5IHRoZSBzZWNvbmQgQW5pbWF0ZWQgdmFsdWUuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkI2RpdmlkZVxuICAgKi9cbiAgZGl2aWRlLFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEFuaW1hdGVkIHZhbHVlIGNvbXBvc2VkIGZyb20gdHdvIEFuaW1hdGVkIHZhbHVlcyBtdWx0aXBsaWVkXG4gICAqIHRvZ2V0aGVyLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCNtdWx0aXBseVxuICAgKi9cbiAgbXVsdGlwbHksXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQW5pbWF0ZWQgdmFsdWUgdGhhdCBpcyB0aGUgKG5vbi1uZWdhdGl2ZSkgbW9kdWxvIG9mIHRoZVxuICAgKiBwcm92aWRlZCBBbmltYXRlZCB2YWx1ZS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjbW9kdWxvXG4gICAqL1xuICBtb2R1bG8sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBBbmltYXRlZCB2YWx1ZSB0aGF0IGlzIGxpbWl0ZWQgYmV0d2VlbiAyIHZhbHVlcy4gSXQgdXNlcyB0aGVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsYXN0IHZhbHVlIHNvIGV2ZW4gaWYgdGhlIHZhbHVlIGlzIGZhciBmcm9tIHRoZVxuICAgKiBib3VuZHMgaXQgd2lsbCBzdGFydCBjaGFuZ2luZyB3aGVuIHRoZSB2YWx1ZSBzdGFydHMgZ2V0dGluZyBjbG9zZXIgYWdhaW4uXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkI2RpZmZjbGFtcFxuICAgKi9cbiAgZGlmZkNsYW1wLFxuXG4gIC8qKlxuICAgKiBTdGFydHMgYW4gYW5pbWF0aW9uIGFmdGVyIHRoZSBnaXZlbiBkZWxheS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjZGVsYXlcbiAgICovXG4gIGRlbGF5LFxuICAvKipcbiAgICogU3RhcnRzIGFuIGFycmF5IG9mIGFuaW1hdGlvbnMgaW4gb3JkZXIsIHdhaXRpbmcgZm9yIGVhY2ggdG8gY29tcGxldGVcbiAgICogYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0LiBJZiB0aGUgY3VycmVudCBydW5uaW5nIGFuaW1hdGlvbiBpcyBzdG9wcGVkLCBub1xuICAgKiBmb2xsb3dpbmcgYW5pbWF0aW9ucyB3aWxsIGJlIHN0YXJ0ZWQuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkI3NlcXVlbmNlXG4gICAqL1xuICBzZXF1ZW5jZSxcbiAgLyoqXG4gICAqIFN0YXJ0cyBhbiBhcnJheSBvZiBhbmltYXRpb25zIGFsbCBhdCB0aGUgc2FtZSB0aW1lLiBCeSBkZWZhdWx0LCBpZiBvbmVcbiAgICogb2YgdGhlIGFuaW1hdGlvbnMgaXMgc3RvcHBlZCwgdGhleSB3aWxsIGFsbCBiZSBzdG9wcGVkLiBZb3UgY2FuIG92ZXJyaWRlXG4gICAqIHRoaXMgd2l0aCB0aGUgYHN0b3BUb2dldGhlcmAgZmxhZy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjcGFyYWxsZWxcbiAgICovXG4gIHBhcmFsbGVsLFxuICAvKipcbiAgICogQXJyYXkgb2YgYW5pbWF0aW9ucyBtYXkgcnVuIGluIHBhcmFsbGVsIChvdmVybGFwKSwgYnV0IGFyZSBzdGFydGVkIGluXG4gICAqIHNlcXVlbmNlIHdpdGggc3VjY2Vzc2l2ZSBkZWxheXMuICBOaWNlIGZvciBkb2luZyB0cmFpbGluZyBlZmZlY3RzLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCNzdGFnZ2VyXG4gICAqL1xuICBzdGFnZ2VyLFxuICAvKipcbiAgICogTG9vcHMgYSBnaXZlbiBhbmltYXRpb24gY29udGludW91c2x5LCBzbyB0aGF0IGVhY2ggdGltZSBpdCByZWFjaGVzIHRoZVxuICAgKiBlbmQsIGl0IHJlc2V0cyBhbmQgYmVnaW5zIGFnYWluIGZyb20gdGhlIHN0YXJ0LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCNsb29wXG4gICAqL1xuICBsb29wLFxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbiBhcnJheSBvZiBtYXBwaW5ncyBhbmQgZXh0cmFjdHMgdmFsdWVzIGZyb20gZWFjaCBhcmcgYWNjb3JkaW5nbHksXG4gICAqIHRoZW4gY2FsbHMgYHNldFZhbHVlYCBvbiB0aGUgbWFwcGVkIG91dHB1dHMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkI2V2ZW50XG4gICAqL1xuICBldmVudCxcblxuICAvKipcbiAgICogTWFrZSBhbnkgUmVhY3QgY29tcG9uZW50IEFuaW1hdGFibGUuICBVc2VkIHRvIGNyZWF0ZSBgQW5pbWF0ZWQuVmlld2AsIGV0Yy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjY3JlYXRlYW5pbWF0ZWRjb21wb25lbnRcbiAgICovXG4gIGNyZWF0ZUFuaW1hdGVkQ29tcG9uZW50LFxuXG4gIC8qKlxuICAgKiBJbXBlcmF0aXZlIEFQSSB0byBhdHRhY2ggYW4gYW5pbWF0ZWQgdmFsdWUgdG8gYW4gZXZlbnQgb24gYSB2aWV3LiBQcmVmZXJcbiAgICogdXNpbmcgYEFuaW1hdGVkLmV2ZW50YCB3aXRoIGB1c2VOYXRpdmVEcml2ZTogdHJ1ZWAgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkI2F0dGFjaG5hdGl2ZWV2ZW50XG4gICAqL1xuICBhdHRhY2hOYXRpdmVFdmVudCxcblxuICAvKipcbiAgICogQWR2YW5jZWQgaW1wZXJhdGl2ZSBBUEkgZm9yIHNub29waW5nIG9uIGFuaW1hdGVkIGV2ZW50cyB0aGF0IGFyZSBwYXNzZWQgaW5cbiAgICogdGhyb3VnaCBwcm9wcy4gVXNlIHZhbHVlcyBkaXJlY3RseSB3aGVyZSBwb3NzaWJsZS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWQjZm9ya2V2ZW50XG4gICAqL1xuICBmb3JrRXZlbnQsXG4gIHVuZm9ya0V2ZW50LFxuXG4gIC8qKlxuICAgKiBFeHBvc2UgRXZlbnQgY2xhc3MsIHNvIGl0IGNhbiBiZSB1c2VkIGFzIGEgdHlwZSBmb3IgdHlwZSBjaGVja2Vycy5cbiAgICovXG4gIEV2ZW50OiBBbmltYXRlZEV2ZW50LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtQ29uZmlnfSBmcm9tICcuLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcbmltcG9ydCB0eXBlIEFuaW1hdGVkVmFsdWUgZnJvbSAnLi4vbm9kZXMvQW5pbWF0ZWRWYWx1ZSc7XG5pbXBvcnQgdHlwZSB7QW5pbWF0aW9uQ29uZmlnLCBFbmRDYWxsYmFja30gZnJvbSAnLi9BbmltYXRpb24nO1xuXG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRIZWxwZXIgZnJvbSAnLi4vTmF0aXZlQW5pbWF0ZWRIZWxwZXInO1xuaW1wb3J0IEFuaW1hdGlvbiBmcm9tICcuL0FuaW1hdGlvbic7XG5cbmV4cG9ydCB0eXBlIERlY2F5QW5pbWF0aW9uQ29uZmlnID0ge1xuICAuLi5BbmltYXRpb25Db25maWcsXG4gIHZlbG9jaXR5OlxuICAgIHwgbnVtYmVyXG4gICAgfCB7XG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgeTogbnVtYmVyLFxuICAgICAgICAuLi5cbiAgICAgIH0sXG4gIGRlY2VsZXJhdGlvbj86IG51bWJlcixcbn07XG5cbmV4cG9ydCB0eXBlIERlY2F5QW5pbWF0aW9uQ29uZmlnU2luZ2xlID0ge1xuICAuLi5BbmltYXRpb25Db25maWcsXG4gIHZlbG9jaXR5OiBudW1iZXIsXG4gIGRlY2VsZXJhdGlvbj86IG51bWJlcixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2F5QW5pbWF0aW9uIGV4dGVuZHMgQW5pbWF0aW9uIHtcbiAgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBfbGFzdFZhbHVlOiBudW1iZXI7XG4gIF9mcm9tVmFsdWU6IG51bWJlcjtcbiAgX2RlY2VsZXJhdGlvbjogbnVtYmVyO1xuICBfdmVsb2NpdHk6IG51bWJlcjtcbiAgX29uVXBkYXRlOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcbiAgX2FuaW1hdGlvbkZyYW1lOiBhbnk7XG4gIF91c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW47XG4gIF9wbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogRGVjYXlBbmltYXRpb25Db25maWdTaW5nbGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RlY2VsZXJhdGlvbiA9IGNvbmZpZy5kZWNlbGVyYXRpb24gPz8gMC45OTg7XG4gICAgdGhpcy5fdmVsb2NpdHkgPSBjb25maWcudmVsb2NpdHk7XG4gICAgdGhpcy5fdXNlTmF0aXZlRHJpdmVyID0gTmF0aXZlQW5pbWF0ZWRIZWxwZXIuc2hvdWxkVXNlTmF0aXZlRHJpdmVyKGNvbmZpZyk7XG4gICAgdGhpcy5fcGxhdGZvcm1Db25maWcgPSBjb25maWcucGxhdGZvcm1Db25maWc7XG4gICAgdGhpcy5fX2lzSW50ZXJhY3Rpb24gPSBjb25maWcuaXNJbnRlcmFjdGlvbiA/PyAhdGhpcy5fdXNlTmF0aXZlRHJpdmVyO1xuICAgIHRoaXMuX19pdGVyYXRpb25zID0gY29uZmlnLml0ZXJhdGlvbnMgPz8gMTtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQW5pbWF0aW9uQ29uZmlnKCk6IHt8XG4gICAgZGVjZWxlcmF0aW9uOiBudW1iZXIsXG4gICAgaXRlcmF0aW9uczogbnVtYmVyLFxuICAgIHBsYXRmb3JtQ29uZmlnOiA/UGxhdGZvcm1Db25maWcsXG4gICAgdHlwZTogJFRFTVBPUkFSWSRzdHJpbmc8J2RlY2F5Jz4sXG4gICAgdmVsb2NpdHk6IG51bWJlcixcbiAgfH0ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZGVjYXknLFxuICAgICAgZGVjZWxlcmF0aW9uOiB0aGlzLl9kZWNlbGVyYXRpb24sXG4gICAgICB2ZWxvY2l0eTogdGhpcy5fdmVsb2NpdHksXG4gICAgICBpdGVyYXRpb25zOiB0aGlzLl9faXRlcmF0aW9ucyxcbiAgICAgIHBsYXRmb3JtQ29uZmlnOiB0aGlzLl9wbGF0Zm9ybUNvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgc3RhcnQoXG4gICAgZnJvbVZhbHVlOiBudW1iZXIsXG4gICAgb25VcGRhdGU6ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uRW5kOiA/RW5kQ2FsbGJhY2ssXG4gICAgcHJldmlvdXNBbmltYXRpb246ID9BbmltYXRpb24sXG4gICAgYW5pbWF0ZWRWYWx1ZTogQW5pbWF0ZWRWYWx1ZSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fX2FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5fbGFzdFZhbHVlID0gZnJvbVZhbHVlO1xuICAgIHRoaXMuX2Zyb21WYWx1ZSA9IGZyb21WYWx1ZTtcbiAgICB0aGlzLl9vblVwZGF0ZSA9IG9uVXBkYXRlO1xuICAgIHRoaXMuX19vbkVuZCA9IG9uRW5kO1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXRoaXMuX3VzZU5hdGl2ZURyaXZlciAmJiBhbmltYXRlZFZhbHVlLl9faXNOYXRpdmUgPT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0F0dGVtcHRpbmcgdG8gcnVuIEpTIGRyaXZlbiBhbmltYXRpb24gb24gYW5pbWF0ZWQgbm9kZSAnICtcbiAgICAgICAgICAndGhhdCBoYXMgYmVlbiBtb3ZlZCB0byBcIm5hdGl2ZVwiIGVhcmxpZXIgYnkgc3RhcnRpbmcgYW4gJyArXG4gICAgICAgICAgJ2FuaW1hdGlvbiB3aXRoIGB1c2VOYXRpdmVEcml2ZXI6IHRydWVgJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VzZU5hdGl2ZURyaXZlcikge1xuICAgICAgdGhpcy5fX3N0YXJ0TmF0aXZlQW5pbWF0aW9uKGFuaW1hdGVkVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3IgdGhpcyBwYXJhbWV0ZXJzXG4gICAgICB0aGlzLl9hbmltYXRpb25GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLm9uVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIG9uVXBkYXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICB0aGlzLl9mcm9tVmFsdWUgK1xuICAgICAgKHRoaXMuX3ZlbG9jaXR5IC8gKDEgLSB0aGlzLl9kZWNlbGVyYXRpb24pKSAqXG4gICAgICAgICgxIC0gTWF0aC5leHAoLSgxIC0gdGhpcy5fZGVjZWxlcmF0aW9uKSAqIChub3cgLSB0aGlzLl9zdGFydFRpbWUpKSk7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSh2YWx1ZSk7XG5cbiAgICBpZiAoTWF0aC5hYnModGhpcy5fbGFzdFZhbHVlIC0gdmFsdWUpIDwgMC4xKSB7XG4gICAgICB0aGlzLl9fZGVib3VuY2VkT25FbmQoe2ZpbmlzaGVkOiB0cnVlfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX19hY3RpdmUpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMub25VcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgc3RvcCgpOiB2b2lkIHtcbiAgICBzdXBlci5zdG9wKCk7XG4gICAgdGhpcy5fX2FjdGl2ZSA9IGZhbHNlO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZSk7XG4gICAgdGhpcy5fX2RlYm91bmNlZE9uRW5kKHtmaW5pc2hlZDogZmFsc2V9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtFdmVudFN1YnNjcmlwdGlvbn0gZnJvbSAnLi4vdmVuZG9yL2VtaXR0ZXIvRXZlbnRFbWl0dGVyJztcbmltcG9ydCB0eXBlIHtFdmVudENvbmZpZ30gZnJvbSAnLi9BbmltYXRlZEV2ZW50JztcbmltcG9ydCB0eXBlIHtBbmltYXRpb25Db25maWcsIEVuZENhbGxiYWNrfSBmcm9tICcuL2FuaW1hdGlvbnMvQW5pbWF0aW9uJztcbmltcG9ydCB0eXBlIHtcbiAgQW5pbWF0ZWROb2RlQ29uZmlnLFxuICBBbmltYXRpbmdOb2RlQ29uZmlnLFxuICBFdmVudE1hcHBpbmcsXG59IGZyb20gJy4vTmF0aXZlQW5pbWF0ZWRNb2R1bGUnO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25Db25maWdUeXBlfSBmcm9tICcuL25vZGVzL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5cbmltcG9ydCAqIGFzIFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL2ZlYXR1cmVmbGFncy9SZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyc7XG5pbXBvcnQgTmF0aXZlRXZlbnRFbWl0dGVyIGZyb20gJy4uL0V2ZW50RW1pdHRlci9OYXRpdmVFdmVudEVtaXR0ZXInO1xuaW1wb3J0IFJDVERldmljZUV2ZW50RW1pdHRlciBmcm9tICcuLi9FdmVudEVtaXR0ZXIvUkNURGV2aWNlRXZlbnRFbWl0dGVyJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IE5hdGl2ZUFuaW1hdGVkTm9uVHVyYm9Nb2R1bGUgZnJvbSAnLi9OYXRpdmVBbmltYXRlZE1vZHVsZSc7XG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRUdXJib01vZHVsZSBmcm9tICcuL05hdGl2ZUFuaW1hdGVkVHVyYm9Nb2R1bGUnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG4vLyBUT0RPIFQ2OTQzNzE1MiBAcGV0ZXRoZWhlYXQgLSBEZWxldGUgdGhpcyBmb3JrIHdoZW4gRmFicmljIHNoaXBzIHRvIDEwMCUuXG5jb25zdCBOYXRpdmVBbmltYXRlZE1vZHVsZSA9XG4gIE5hdGl2ZUFuaW1hdGVkTm9uVHVyYm9Nb2R1bGUgPz8gTmF0aXZlQW5pbWF0ZWRUdXJib01vZHVsZTtcblxubGV0IF9fbmF0aXZlQW5pbWF0ZWROb2RlVGFnQ291bnQgPSAxOyAvKiB1c2VkIGZvciBhbmltYXRlZCBub2RlcyAqL1xubGV0IF9fbmF0aXZlQW5pbWF0aW9uSWRDb3VudCA9IDE7IC8qIHVzZWQgZm9yIHN0YXJ0ZWQgYW5pbWF0aW9ucyAqL1xuXG5sZXQgbmF0aXZlRXZlbnRFbWl0dGVyO1xuXG5sZXQgd2FpdGluZ0ZvclF1ZXVlZE9wZXJhdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmxldCBxdWV1ZU9wZXJhdGlvbnMgPSBmYWxzZTtcbmxldCBxdWV1ZTogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbi8vICRGbG93Rml4TWVcbmxldCBzaW5nbGVPcFF1ZXVlOiBBcnJheTxhbnk+ID0gW107XG5cbmNvbnN0IHVzZVNpbmdsZU9wQmF0Y2hpbmcgPVxuICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnICYmXG4gICEhTmF0aXZlQW5pbWF0ZWRNb2R1bGU/LnF1ZXVlQW5kRXhlY3V0ZUJhdGNoZWRPcGVyYXRpb25zICYmXG4gIFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzLmFuaW1hdGVkU2hvdWxkVXNlU2luZ2xlT3AoKTtcbmxldCBmbHVzaFF1ZXVlVGltZW91dCA9IG51bGw7XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJHZXRWYWx1ZUNhbGxiYWNrczoge1xuICBbbnVtYmVyXTogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQsXG59ID0ge307XG5jb25zdCBldmVudExpc3RlbmVyQW5pbWF0aW9uRmluaXNoZWRDYWxsYmFja3M6IHtcbiAgW251bWJlcl06IEVuZENhbGxiYWNrLFxufSA9IHt9O1xubGV0IGdsb2JhbEV2ZW50RW1pdHRlckdldFZhbHVlTGlzdGVuZXI6ID9FdmVudFN1YnNjcmlwdGlvbiA9IG51bGw7XG5sZXQgZ2xvYmFsRXZlbnRFbWl0dGVyQW5pbWF0aW9uRmluaXNoZWRMaXN0ZW5lcjogP0V2ZW50U3Vic2NyaXB0aW9uID0gbnVsbDtcblxuY29uc3QgbmF0aXZlT3BzOiA/dHlwZW9mIE5hdGl2ZUFuaW1hdGVkTW9kdWxlID0gdXNlU2luZ2xlT3BCYXRjaGluZ1xuICA/ICgoZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYXBpcyA9IFtcbiAgICAgICAgJ2NyZWF0ZUFuaW1hdGVkTm9kZScsIC8vIDFcbiAgICAgICAgJ3VwZGF0ZUFuaW1hdGVkTm9kZUNvbmZpZycsIC8vIDJcbiAgICAgICAgJ2dldFZhbHVlJywgLy8gM1xuICAgICAgICAnc3RhcnRMaXN0ZW5pbmdUb0FuaW1hdGVkTm9kZVZhbHVlJywgLy8gNFxuICAgICAgICAnc3RvcExpc3RlbmluZ1RvQW5pbWF0ZWROb2RlVmFsdWUnLCAvLyA1XG4gICAgICAgICdjb25uZWN0QW5pbWF0ZWROb2RlcycsIC8vIDZcbiAgICAgICAgJ2Rpc2Nvbm5lY3RBbmltYXRlZE5vZGVzJywgLy8gN1xuICAgICAgICAnc3RhcnRBbmltYXRpbmdOb2RlJywgLy8gOFxuICAgICAgICAnc3RvcEFuaW1hdGlvbicsIC8vIDlcbiAgICAgICAgJ3NldEFuaW1hdGVkTm9kZVZhbHVlJywgLy8gMTBcbiAgICAgICAgJ3NldEFuaW1hdGVkTm9kZU9mZnNldCcsIC8vIDExXG4gICAgICAgICdmbGF0dGVuQW5pbWF0ZWROb2RlT2Zmc2V0JywgLy8gMTJcbiAgICAgICAgJ2V4dHJhY3RBbmltYXRlZE5vZGVPZmZzZXQnLCAvLyAxM1xuICAgICAgICAnY29ubmVjdEFuaW1hdGVkTm9kZVRvVmlldycsIC8vIDE0XG4gICAgICAgICdkaXNjb25uZWN0QW5pbWF0ZWROb2RlRnJvbVZpZXcnLCAvLyAxNVxuICAgICAgICAncmVzdG9yZURlZmF1bHRWYWx1ZXMnLCAvLyAxNlxuICAgICAgICAnZHJvcEFuaW1hdGVkTm9kZScsIC8vIDE3XG4gICAgICAgICdhZGRBbmltYXRlZEV2ZW50VG9WaWV3JywgLy8gMThcbiAgICAgICAgJ3JlbW92ZUFuaW1hdGVkRXZlbnRGcm9tVmlldycsIC8vIDE5XG4gICAgICAgICdhZGRMaXN0ZW5lcicsIC8vIDIwXG4gICAgICAgICdyZW1vdmVMaXN0ZW5lcicsIC8vIDIxXG4gICAgICBdO1xuICAgICAgcmV0dXJuIGFwaXMucmVkdWNlPHtbc3RyaW5nXTogbnVtYmVyfT4oKGFjYywgZnVuY3Rpb25OYW1lLCBpKSA9PiB7XG4gICAgICAgIC8vIFRoZXNlIGluZGljZXMgbmVlZCB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgaW5kaWNlcyBpbiBuYXRpdmUgKHNlZSBOYXRpdmVBbmltYXRlZE1vZHVsZSBpbiBKYXZhLCBvciB0aGUgZXF1aXZhbGVudCBmb3IgYW55IG90aGVyIG5hdGl2ZSBwbGF0Zm9ybSkuXG4gICAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgICBhY2NbZnVuY3Rpb25OYW1lXSA9IGkgKyAxO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgIH0pKCk6ICRGbG93Rml4TWUpXG4gIDogTmF0aXZlQW5pbWF0ZWRNb2R1bGU7XG5cbi8qKlxuICogV3JhcHBlcnMgYXJvdW5kIE5hdGl2ZUFuaW1hdGVkTW9kdWxlIHRvIHByb3ZpZGUgZmxvdyBhbmQgYXV0b2NvbXBsZXRlIHN1cHBvcnQgZm9yXG4gKiB0aGUgbmF0aXZlIG1vZHVsZSBtZXRob2RzLCBhbmQgYXV0b21hdGljIHF1ZXVlIG1hbmFnZW1lbnQgb24gQW5kcm9pZFxuICovXG5jb25zdCBBUEkgPSB7XG4gIGdldFZhbHVlOiBmdW5jdGlvbiAoXG4gICAgdGFnOiBudW1iZXIsXG4gICAgc2F2ZVZhbHVlQ2FsbGJhY2s6ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgaWYgKHVzZVNpbmdsZU9wQmF0Y2hpbmcpIHtcbiAgICAgIGlmIChzYXZlVmFsdWVDYWxsYmFjaykge1xuICAgICAgICBldmVudExpc3RlbmVyR2V0VmFsdWVDYWxsYmFja3NbdGFnXSA9IHNhdmVWYWx1ZUNhbGxiYWNrO1xuICAgICAgfVxuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5nZXRWYWx1ZSwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5nZXRWYWx1ZSwgdGFnLCBzYXZlVmFsdWVDYWxsYmFjayk7XG4gICAgfVxuICB9LFxuICBzZXRXYWl0aW5nRm9ySWRlbnRpZmllcjogZnVuY3Rpb24gKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3YWl0aW5nRm9yUXVldWVkT3BlcmF0aW9ucy5hZGQoaWQpO1xuICAgIHF1ZXVlT3BlcmF0aW9ucyA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MuYW5pbWF0ZWRTaG91bGREZWJvdW5jZVF1ZXVlRmx1c2goKSAmJlxuICAgICAgZmx1c2hRdWV1ZVRpbWVvdXRcbiAgICApIHtcbiAgICAgIGNsZWFyVGltZW91dChmbHVzaFF1ZXVlVGltZW91dCk7XG4gICAgfVxuICB9LFxuICB1bnNldFdhaXRpbmdGb3JJZGVudGlmaWVyOiBmdW5jdGlvbiAoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdhaXRpbmdGb3JRdWV1ZWRPcGVyYXRpb25zLmRlbGV0ZShpZCk7XG5cbiAgICBpZiAod2FpdGluZ0ZvclF1ZXVlZE9wZXJhdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgcXVldWVPcGVyYXRpb25zID0gZmFsc2U7XG4gICAgICBBUEkuZGlzYWJsZVF1ZXVlKCk7XG4gICAgfVxuICB9LFxuICBkaXNhYmxlUXVldWU6IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG5cbiAgICBpZiAoUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MuYW5pbWF0ZWRTaG91bGREZWJvdW5jZVF1ZXVlRmx1c2goKSkge1xuICAgICAgY29uc3QgcHJldlRpbWVvdXQgPSBmbHVzaFF1ZXVlVGltZW91dDtcbiAgICAgIGNsZWFySW1tZWRpYXRlKHByZXZUaW1lb3V0KTtcbiAgICAgIGZsdXNoUXVldWVUaW1lb3V0ID0gc2V0SW1tZWRpYXRlKEFQSS5mbHVzaFF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQVBJLmZsdXNoUXVldWUoKTtcbiAgICB9XG4gIH0sXG4gIGZsdXNoUXVldWU6IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAvLyBUT0RPOiAoVDEzNjk3MTEzMilcbiAgICBpbnZhcmlhbnQoXG4gICAgICBOYXRpdmVBbmltYXRlZE1vZHVsZSB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnLFxuICAgICAgJ05hdGl2ZSBhbmltYXRlZCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZScsXG4gICAgKTtcbiAgICBmbHVzaFF1ZXVlVGltZW91dCA9IG51bGw7XG5cbiAgICAvLyBFYXJseSByZXR1cm5zIGJlZm9yZSBjYWxsaW5nIGFueSBBUElzXG4gICAgaWYgKHVzZVNpbmdsZU9wQmF0Y2hpbmcgJiYgc2luZ2xlT3BRdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF1c2VTaW5nbGVPcEJhdGNoaW5nICYmIHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh1c2VTaW5nbGVPcEJhdGNoaW5nKSB7XG4gICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXIgZm9yIGNhbGxiYWNrcyBpZiBpdCdzIG5vdCBzZXQgdXBcbiAgICAgIGlmIChcbiAgICAgICAgIWdsb2JhbEV2ZW50RW1pdHRlckdldFZhbHVlTGlzdGVuZXIgfHxcbiAgICAgICAgIWdsb2JhbEV2ZW50RW1pdHRlckFuaW1hdGlvbkZpbmlzaGVkTGlzdGVuZXJcbiAgICAgICkge1xuICAgICAgICBzZXR1cEdsb2JhbEV2ZW50RW1pdHRlckxpc3RlbmVycygpO1xuICAgICAgfVxuICAgICAgLy8gU2luZ2xlIG9wIGJhdGNoaW5nIGRvZXNuJ3QgdXNlIGNhbGxiYWNrIGZ1bmN0aW9ucywgaW5zdGVhZCB3ZVxuICAgICAgLy8gdXNlIFJDVERldmljZUV2ZW50RW1pdHRlci4gVGhpcyByZWR1Y2VzIG92ZXJoZWFkIG9mIHNlbmRpbmcgbG90cyBvZlxuICAgICAgLy8gSlNJIGZ1bmN0aW9ucyBhY3Jvc3MgdG8gbmF0aXZlIGNvZGU7IGJ1dCBhbHNvLCBUTSBpbmZyYXN0cnVjdHVyZSBjdXJyZW50bHlcbiAgICAgIC8vIGRvZXMgbm90IHN1cHBvcnQgcGFja2luZyBhIGZ1bmN0aW9uIGludG8gbmF0aXZlIGFycmF5cy5cbiAgICAgIE5hdGl2ZUFuaW1hdGVkTW9kdWxlPy5xdWV1ZUFuZEV4ZWN1dGVCYXRjaGVkT3BlcmF0aW9ucz8uKHNpbmdsZU9wUXVldWUpO1xuICAgICAgc2luZ2xlT3BRdWV1ZS5sZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnICYmXG4gICAgICAgIE5hdGl2ZUFuaW1hdGVkTW9kdWxlPy5zdGFydE9wZXJhdGlvbkJhdGNoPy4oKTtcblxuICAgICAgZm9yIChsZXQgcSA9IDAsIGwgPSBxdWV1ZS5sZW5ndGg7IHEgPCBsOyBxKyspIHtcbiAgICAgICAgcXVldWVbcV0oKTtcbiAgICAgIH1cbiAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnICYmXG4gICAgICAgIE5hdGl2ZUFuaW1hdGVkTW9kdWxlPy5maW5pc2hPcGVyYXRpb25CYXRjaD8uKCk7XG4gICAgfVxuICB9LFxuICBxdWV1ZU9wZXJhdGlvbjogPEFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgRm46ICguLi5BcmdzKSA9PiB2b2lkPihcbiAgICBmbjogRm4sXG4gICAgLi4uYXJnczogQXJnc1xuICApOiB2b2lkID0+IHtcbiAgICBpZiAodXNlU2luZ2xlT3BCYXRjaGluZykge1xuICAgICAgLy8gR2V0IHRoZSBjb21tYW5kIElEIGZyb20gdGhlIHF1ZXVlZCBmdW5jdGlvbiwgYW5kIHB1c2ggdGhhdCBJRCBhbmQgYW55IGFyZ3VtZW50cyBuZWVkZWQgdG8gZXhlY3V0ZSB0aGUgb3BlcmF0aW9uXG4gICAgICAvLyAkRmxvd0ZpeE1lOiBzdXJwcmlzZSwgZm4gaXMgYWN0dWFsbHkgYSBudW1iZXJcbiAgICAgIHNpbmdsZU9wUXVldWUucHVzaChmbiwgLi4uYXJncyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgcXVldWVpbmcgaXMgZXhwbGljaXRseSBvbiwgKm9yKiB0aGUgcXVldWUgaGFzIG5vdCB5ZXRcbiAgICAvLyBiZWVuIGZsdXNoZWQsIHVzZSB0aGUgcXVldWUuIFRoaXMgaXMgdG8gcHJldmVudCBvcGVyYXRpb25zXG4gICAgLy8gZnJvbSBiZWluZyBleGVjdXRlZCBvdXQgb2Ygb3JkZXIuXG4gICAgaWYgKHF1ZXVlT3BlcmF0aW9ucyB8fCBxdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHF1ZXVlLnB1c2goKCkgPT4gZm4oLi4uYXJncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZUFuaW1hdGVkTm9kZTogZnVuY3Rpb24gKHRhZzogbnVtYmVyLCBjb25maWc6IEFuaW1hdGVkTm9kZUNvbmZpZyk6IHZvaWQge1xuICAgIGludmFyaWFudChuYXRpdmVPcHMsICdOYXRpdmUgYW5pbWF0ZWQgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICBBUEkucXVldWVPcGVyYXRpb24obmF0aXZlT3BzLmNyZWF0ZUFuaW1hdGVkTm9kZSwgdGFnLCBjb25maWcpO1xuICB9LFxuICB1cGRhdGVBbmltYXRlZE5vZGVDb25maWc6IGZ1bmN0aW9uIChcbiAgICB0YWc6IG51bWJlcixcbiAgICBjb25maWc6IEFuaW1hdGVkTm9kZUNvbmZpZyxcbiAgKTogdm9pZCB7XG4gICAgaW52YXJpYW50KG5hdGl2ZU9wcywgJ05hdGl2ZSBhbmltYXRlZCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIGlmIChuYXRpdmVPcHMudXBkYXRlQW5pbWF0ZWROb2RlQ29uZmlnKSB7XG4gICAgICBBUEkucXVldWVPcGVyYXRpb24obmF0aXZlT3BzLnVwZGF0ZUFuaW1hdGVkTm9kZUNvbmZpZywgdGFnLCBjb25maWcpO1xuICAgIH1cbiAgfSxcbiAgc3RhcnRMaXN0ZW5pbmdUb0FuaW1hdGVkTm9kZVZhbHVlOiBmdW5jdGlvbiAodGFnOiBudW1iZXIpIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5zdGFydExpc3RlbmluZ1RvQW5pbWF0ZWROb2RlVmFsdWUsIHRhZyk7XG4gIH0sXG4gIHN0b3BMaXN0ZW5pbmdUb0FuaW1hdGVkTm9kZVZhbHVlOiBmdW5jdGlvbiAodGFnOiBudW1iZXIpIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5zdG9wTGlzdGVuaW5nVG9BbmltYXRlZE5vZGVWYWx1ZSwgdGFnKTtcbiAgfSxcbiAgY29ubmVjdEFuaW1hdGVkTm9kZXM6IGZ1bmN0aW9uIChwYXJlbnRUYWc6IG51bWJlciwgY2hpbGRUYWc6IG51bWJlcik6IHZvaWQge1xuICAgIGludmFyaWFudChuYXRpdmVPcHMsICdOYXRpdmUgYW5pbWF0ZWQgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICBBUEkucXVldWVPcGVyYXRpb24obmF0aXZlT3BzLmNvbm5lY3RBbmltYXRlZE5vZGVzLCBwYXJlbnRUYWcsIGNoaWxkVGFnKTtcbiAgfSxcbiAgZGlzY29ubmVjdEFuaW1hdGVkTm9kZXM6IGZ1bmN0aW9uIChcbiAgICBwYXJlbnRUYWc6IG51bWJlcixcbiAgICBjaGlsZFRhZzogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5kaXNjb25uZWN0QW5pbWF0ZWROb2RlcywgcGFyZW50VGFnLCBjaGlsZFRhZyk7XG4gIH0sXG4gIHN0YXJ0QW5pbWF0aW5nTm9kZTogZnVuY3Rpb24gKFxuICAgIGFuaW1hdGlvbklkOiBudW1iZXIsXG4gICAgbm9kZVRhZzogbnVtYmVyLFxuICAgIGNvbmZpZzogQW5pbWF0aW5nTm9kZUNvbmZpZyxcbiAgICBlbmRDYWxsYmFjazogRW5kQ2FsbGJhY2ssXG4gICk6IHZvaWQge1xuICAgIGludmFyaWFudChuYXRpdmVPcHMsICdOYXRpdmUgYW5pbWF0ZWQgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICBpZiAodXNlU2luZ2xlT3BCYXRjaGluZykge1xuICAgICAgaWYgKGVuZENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJBbmltYXRpb25GaW5pc2hlZENhbGxiYWNrc1thbmltYXRpb25JZF0gPSBlbmRDYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIEFQSS5xdWV1ZU9wZXJhdGlvbihcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgICAgbmF0aXZlT3BzLnN0YXJ0QW5pbWF0aW5nTm9kZSxcbiAgICAgICAgYW5pbWF0aW9uSWQsXG4gICAgICAgIG5vZGVUYWcsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEFQSS5xdWV1ZU9wZXJhdGlvbihcbiAgICAgICAgbmF0aXZlT3BzLnN0YXJ0QW5pbWF0aW5nTm9kZSxcbiAgICAgICAgYW5pbWF0aW9uSWQsXG4gICAgICAgIG5vZGVUYWcsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZW5kQ2FsbGJhY2ssXG4gICAgICApO1xuICAgIH1cbiAgfSxcbiAgc3RvcEFuaW1hdGlvbjogZnVuY3Rpb24gKGFuaW1hdGlvbklkOiBudW1iZXIpIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5zdG9wQW5pbWF0aW9uLCBhbmltYXRpb25JZCk7XG4gIH0sXG4gIHNldEFuaW1hdGVkTm9kZVZhbHVlOiBmdW5jdGlvbiAobm9kZVRhZzogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaW52YXJpYW50KG5hdGl2ZU9wcywgJ05hdGl2ZSBhbmltYXRlZCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIEFQSS5xdWV1ZU9wZXJhdGlvbihuYXRpdmVPcHMuc2V0QW5pbWF0ZWROb2RlVmFsdWUsIG5vZGVUYWcsIHZhbHVlKTtcbiAgfSxcbiAgc2V0QW5pbWF0ZWROb2RlT2Zmc2V0OiBmdW5jdGlvbiAobm9kZVRhZzogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGludmFyaWFudChuYXRpdmVPcHMsICdOYXRpdmUgYW5pbWF0ZWQgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICBBUEkucXVldWVPcGVyYXRpb24obmF0aXZlT3BzLnNldEFuaW1hdGVkTm9kZU9mZnNldCwgbm9kZVRhZywgb2Zmc2V0KTtcbiAgfSxcbiAgZmxhdHRlbkFuaW1hdGVkTm9kZU9mZnNldDogZnVuY3Rpb24gKG5vZGVUYWc6IG51bWJlcik6IHZvaWQge1xuICAgIGludmFyaWFudChuYXRpdmVPcHMsICdOYXRpdmUgYW5pbWF0ZWQgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICBBUEkucXVldWVPcGVyYXRpb24obmF0aXZlT3BzLmZsYXR0ZW5BbmltYXRlZE5vZGVPZmZzZXQsIG5vZGVUYWcpO1xuICB9LFxuICBleHRyYWN0QW5pbWF0ZWROb2RlT2Zmc2V0OiBmdW5jdGlvbiAobm9kZVRhZzogbnVtYmVyKTogdm9pZCB7XG4gICAgaW52YXJpYW50KG5hdGl2ZU9wcywgJ05hdGl2ZSBhbmltYXRlZCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIEFQSS5xdWV1ZU9wZXJhdGlvbihuYXRpdmVPcHMuZXh0cmFjdEFuaW1hdGVkTm9kZU9mZnNldCwgbm9kZVRhZyk7XG4gIH0sXG4gIGNvbm5lY3RBbmltYXRlZE5vZGVUb1ZpZXc6IGZ1bmN0aW9uIChub2RlVGFnOiBudW1iZXIsIHZpZXdUYWc6IG51bWJlcik6IHZvaWQge1xuICAgIGludmFyaWFudChuYXRpdmVPcHMsICdOYXRpdmUgYW5pbWF0ZWQgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICBBUEkucXVldWVPcGVyYXRpb24obmF0aXZlT3BzLmNvbm5lY3RBbmltYXRlZE5vZGVUb1ZpZXcsIG5vZGVUYWcsIHZpZXdUYWcpO1xuICB9LFxuICBkaXNjb25uZWN0QW5pbWF0ZWROb2RlRnJvbVZpZXc6IGZ1bmN0aW9uIChcbiAgICBub2RlVGFnOiBudW1iZXIsXG4gICAgdmlld1RhZzogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgQVBJLnF1ZXVlT3BlcmF0aW9uKFxuICAgICAgbmF0aXZlT3BzLmRpc2Nvbm5lY3RBbmltYXRlZE5vZGVGcm9tVmlldyxcbiAgICAgIG5vZGVUYWcsXG4gICAgICB2aWV3VGFnLFxuICAgICk7XG4gIH0sXG4gIHJlc3RvcmVEZWZhdWx0VmFsdWVzOiBmdW5jdGlvbiAobm9kZVRhZzogbnVtYmVyKTogdm9pZCB7XG4gICAgaW52YXJpYW50KG5hdGl2ZU9wcywgJ05hdGl2ZSBhbmltYXRlZCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIC8vIEJhY2t3YXJkcyBjb21wYXQgd2l0aCBvbGRlciBuYXRpdmUgcnVudGltZXMsIGNhbiBiZSByZW1vdmVkIGxhdGVyLlxuICAgIGlmIChuYXRpdmVPcHMucmVzdG9yZURlZmF1bHRWYWx1ZXMgIT0gbnVsbCkge1xuICAgICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5yZXN0b3JlRGVmYXVsdFZhbHVlcywgbm9kZVRhZyk7XG4gICAgfVxuICB9LFxuICBkcm9wQW5pbWF0ZWROb2RlOiBmdW5jdGlvbiAodGFnOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgQVBJLnF1ZXVlT3BlcmF0aW9uKG5hdGl2ZU9wcy5kcm9wQW5pbWF0ZWROb2RlLCB0YWcpO1xuICB9LFxuICBhZGRBbmltYXRlZEV2ZW50VG9WaWV3OiBmdW5jdGlvbiAoXG4gICAgdmlld1RhZzogbnVtYmVyLFxuICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgIGV2ZW50TWFwcGluZzogRXZlbnRNYXBwaW5nLFxuICApIHtcbiAgICBpbnZhcmlhbnQobmF0aXZlT3BzLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgQVBJLnF1ZXVlT3BlcmF0aW9uKFxuICAgICAgbmF0aXZlT3BzLmFkZEFuaW1hdGVkRXZlbnRUb1ZpZXcsXG4gICAgICB2aWV3VGFnLFxuICAgICAgZXZlbnROYW1lLFxuICAgICAgZXZlbnRNYXBwaW5nLFxuICAgICk7XG4gIH0sXG4gIHJlbW92ZUFuaW1hdGVkRXZlbnRGcm9tVmlldyhcbiAgICB2aWV3VGFnOiBudW1iZXIsXG4gICAgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgYW5pbWF0ZWROb2RlVGFnOiBudW1iZXIsXG4gICkge1xuICAgIGludmFyaWFudChuYXRpdmVPcHMsICdOYXRpdmUgYW5pbWF0ZWQgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICBBUEkucXVldWVPcGVyYXRpb24oXG4gICAgICBuYXRpdmVPcHMucmVtb3ZlQW5pbWF0ZWRFdmVudEZyb21WaWV3LFxuICAgICAgdmlld1RhZyxcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIGFuaW1hdGVkTm9kZVRhZyxcbiAgICApO1xuICB9LFxufTtcblxuZnVuY3Rpb24gc2V0dXBHbG9iYWxFdmVudEVtaXR0ZXJMaXN0ZW5lcnMoKSB7XG4gIGdsb2JhbEV2ZW50RW1pdHRlckdldFZhbHVlTGlzdGVuZXIgPSBSQ1REZXZpY2VFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoXG4gICAgJ29uTmF0aXZlQW5pbWF0ZWRNb2R1bGVHZXRWYWx1ZScsXG4gICAgcGFyYW1zID0+IHtcbiAgICAgIGNvbnN0IHt0YWd9ID0gcGFyYW1zO1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBldmVudExpc3RlbmVyR2V0VmFsdWVDYWxsYmFja3NbdGFnXTtcbiAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2socGFyYW1zLnZhbHVlKTtcbiAgICAgIGRlbGV0ZSBldmVudExpc3RlbmVyR2V0VmFsdWVDYWxsYmFja3NbdGFnXTtcbiAgICB9LFxuICApO1xuICBnbG9iYWxFdmVudEVtaXR0ZXJBbmltYXRpb25GaW5pc2hlZExpc3RlbmVyID1cbiAgICBSQ1REZXZpY2VFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoXG4gICAgICAnb25OYXRpdmVBbmltYXRlZE1vZHVsZUFuaW1hdGlvbkZpbmlzaGVkJyxcbiAgICAgIHBhcmFtcyA9PiB7XG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBBcnJheS5pc0FycmF5IG9uY2UgbmF0aXZlIGNoYW5nZXMgaGF2ZSBwcm9wYWdhdGVkXG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbcGFyYW1zXTtcbiAgICAgICAgZm9yIChjb25zdCBhbmltYXRpb24gb2YgYW5pbWF0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHthbmltYXRpb25JZH0gPSBhbmltYXRpb247XG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBldmVudExpc3RlbmVyQW5pbWF0aW9uRmluaXNoZWRDYWxsYmFja3NbYW5pbWF0aW9uSWRdO1xuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2soYW5pbWF0aW9uKTtcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudExpc3RlbmVyQW5pbWF0aW9uRmluaXNoZWRDYWxsYmFja3NbYW5pbWF0aW9uSWRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xufVxuXG4vKipcbiAqIFN0eWxlcyBhbGxvd2VkIGJ5IHRoZSBuYXRpdmUgYW5pbWF0ZWQgaW1wbGVtZW50YXRpb24uXG4gKlxuICogSW4gZ2VuZXJhbCBuYXRpdmUgYW5pbWF0ZWQgaW1wbGVtZW50YXRpb24gc2hvdWxkIHN1cHBvcnQgYW55IG51bWVyaWMgb3IgY29sb3IgcHJvcGVydHkgdGhhdFxuICogZG9lc24ndCBuZWVkIHRvIGJlIHVwZGF0ZWQgdGhyb3VnaCB0aGUgc2hhZG93IHZpZXcgaGllcmFyY2h5IChhbGwgbm9uLWxheW91dCBwcm9wZXJ0aWVzKS5cbiAqL1xuY29uc3QgU1VQUE9SVEVEX0NPTE9SX1NUWUxFUyA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiB0cnVlLFxuICBib3JkZXJCb3R0b21Db2xvcjogdHJ1ZSxcbiAgYm9yZGVyQ29sb3I6IHRydWUsXG4gIGJvcmRlckVuZENvbG9yOiB0cnVlLFxuICBib3JkZXJMZWZ0Q29sb3I6IHRydWUsXG4gIGJvcmRlclJpZ2h0Q29sb3I6IHRydWUsXG4gIGJvcmRlclN0YXJ0Q29sb3I6IHRydWUsXG4gIGJvcmRlclRvcENvbG9yOiB0cnVlLFxuICBjb2xvcjogdHJ1ZSxcbiAgdGludENvbG9yOiB0cnVlLFxufTtcblxuY29uc3QgU1VQUE9SVEVEX1NUWUxFUyA9IHtcbiAgLi4uU1VQUE9SVEVEX0NPTE9SX1NUWUxFUyxcbiAgYm9yZGVyQm90dG9tRW5kUmFkaXVzOiB0cnVlLFxuICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiB0cnVlLFxuICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyQm90dG9tU3RhcnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlckVuZEVuZFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyRW5kU3RhcnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyVG9wRW5kUmFkaXVzOiB0cnVlLFxuICBib3JkZXJUb3BMZWZ0UmFkaXVzOiB0cnVlLFxuICBib3JkZXJUb3BSaWdodFJhZGl1czogdHJ1ZSxcbiAgYm9yZGVyVG9wU3RhcnRSYWRpdXM6IHRydWUsXG4gIGJvcmRlclN0YXJ0RW5kUmFkaXVzOiB0cnVlLFxuICBib3JkZXJTdGFydFN0YXJ0UmFkaXVzOiB0cnVlLFxuICBlbGV2YXRpb246IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIHRyYW5zZm9ybTogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICAvKiBpb3Mgc3R5bGVzICovXG4gIHNoYWRvd09wYWNpdHk6IHRydWUsXG4gIHNoYWRvd1JhZGl1czogdHJ1ZSxcbiAgLyogbGVnYWN5IGFuZHJvaWQgdHJhbnNmb3JtIHByb3BlcnRpZXMgKi9cbiAgc2NhbGVYOiB0cnVlLFxuICBzY2FsZVk6IHRydWUsXG4gIHRyYW5zbGF0ZVg6IHRydWUsXG4gIHRyYW5zbGF0ZVk6IHRydWUsXG59O1xuXG5jb25zdCBTVVBQT1JURURfVFJBTlNGT1JNUyA9IHtcbiAgdHJhbnNsYXRlWDogdHJ1ZSxcbiAgdHJhbnNsYXRlWTogdHJ1ZSxcbiAgc2NhbGU6IHRydWUsXG4gIHNjYWxlWDogdHJ1ZSxcbiAgc2NhbGVZOiB0cnVlLFxuICByb3RhdGU6IHRydWUsXG4gIHJvdGF0ZVg6IHRydWUsXG4gIHJvdGF0ZVk6IHRydWUsXG4gIHJvdGF0ZVo6IHRydWUsXG4gIHBlcnNwZWN0aXZlOiB0cnVlLFxuICBza2V3WDogdHJ1ZSxcbiAgc2tld1k6IHRydWUsXG4gIG1hdHJpeDogUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3Muc2hvdWxkVXNlQW5pbWF0ZWRPYmplY3RGb3JUcmFuc2Zvcm0oKSxcbn07XG5cbmNvbnN0IFNVUFBPUlRFRF9JTlRFUlBPTEFUSU9OX1BBUkFNUyA9IHtcbiAgaW5wdXRSYW5nZTogdHJ1ZSxcbiAgb3V0cHV0UmFuZ2U6IHRydWUsXG4gIGV4dHJhcG9sYXRlOiB0cnVlLFxuICBleHRyYXBvbGF0ZVJpZ2h0OiB0cnVlLFxuICBleHRyYXBvbGF0ZUxlZnQ6IHRydWUsXG59O1xuXG5mdW5jdGlvbiBhZGRXaGl0ZWxpc3RlZFN0eWxlUHJvcChwcm9wOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIFNVUFBPUlRFRF9TVFlMRVNbcHJvcF0gPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBhZGRXaGl0ZWxpc3RlZFRyYW5zZm9ybVByb3AocHJvcDogc3RyaW5nKTogdm9pZCB7XG4gIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBTVVBQT1JURURfVFJBTlNGT1JNU1twcm9wXSA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGFkZFdoaXRlbGlzdGVkSW50ZXJwb2xhdGlvblBhcmFtKHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIFNVUFBPUlRFRF9JTlRFUlBPTEFUSU9OX1BBUkFNU1twYXJhbV0gPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1N1cHBvcnRlZENvbG9yU3R5bGVQcm9wKHByb3A6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gU1VQUE9SVEVEX0NPTE9SX1NUWUxFU1twcm9wXSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRTdHlsZVByb3AocHJvcDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBTVVBQT1JURURfU1RZTEVTW3Byb3BdID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1N1cHBvcnRlZFRyYW5zZm9ybVByb3AocHJvcDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBTVVBQT1JURURfVFJBTlNGT1JNU1twcm9wXSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRJbnRlcnBvbGF0aW9uUGFyYW0ocGFyYW06IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gU1VQUE9SVEVEX0lOVEVSUE9MQVRJT05fUEFSQU1TW3BhcmFtXSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUcmFuc2Zvcm0oXG4gIGNvbmZpZ3M6IEFycmF5PFxuICAgIHwge1xuICAgICAgICB0eXBlOiAnYW5pbWF0ZWQnLFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBub2RlVGFnOiA/bnVtYmVyLFxuICAgICAgICAuLi5cbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3N0YXRpYycsXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgICAgIC4uLlxuICAgICAgfSxcbiAgPixcbik6IHZvaWQge1xuICBjb25maWdzLmZvckVhY2goY29uZmlnID0+IHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkVHJhbnNmb3JtUHJvcChjb25maWcucHJvcGVydHkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm9wZXJ0eSAnJHtjb25maWcucHJvcGVydHl9JyBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSBhbmltYXRlZCBtb2R1bGVgLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0eWxlcyhzdHlsZXM6IHtba2V5OiBzdHJpbmddOiA/bnVtYmVyLCAuLi59KTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5IGluIHN0eWxlcykge1xuICAgIGlmICghaXNTdXBwb3J0ZWRTdHlsZVByb3Aoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3R5bGUgcHJvcGVydHkgJyR7a2V5fScgaXMgbm90IHN1cHBvcnRlZCBieSBuYXRpdmUgYW5pbWF0ZWQgbW9kdWxlYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbjxPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+KFxuICBjb25maWc6IEludGVycG9sYXRpb25Db25maWdUeXBlPE91dHB1dFQ+LFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5IGluIGNvbmZpZykge1xuICAgIGlmICghaXNTdXBwb3J0ZWRJbnRlcnBvbGF0aW9uUGFyYW0oa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW50ZXJwb2xhdGlvbiBwcm9wZXJ0eSAnJHtrZXl9JyBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSBhbmltYXRlZCBtb2R1bGVgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVOZXdOb2RlVGFnKCk6IG51bWJlciB7XG4gIHJldHVybiBfX25hdGl2ZUFuaW1hdGVkTm9kZVRhZ0NvdW50Kys7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmV3QW5pbWF0aW9uSWQoKTogbnVtYmVyIHtcbiAgcmV0dXJuIF9fbmF0aXZlQW5pbWF0aW9uSWRDb3VudCsrO1xufVxuXG5mdW5jdGlvbiBhc3NlcnROYXRpdmVBbmltYXRlZE1vZHVsZSgpOiB2b2lkIHtcbiAgaW52YXJpYW50KE5hdGl2ZUFuaW1hdGVkTW9kdWxlLCAnTmF0aXZlIGFuaW1hdGVkIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlJyk7XG59XG5cbmxldCBfd2FybmVkTWlzc2luZ05hdGl2ZUFuaW1hdGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZURyaXZlcihcbiAgY29uZmlnOiAkUmVhZE9ubHk8ey4uLkFuaW1hdGlvbkNvbmZpZywgLi4ufT4gfCBFdmVudENvbmZpZyxcbik6IGJvb2xlYW4ge1xuICBpZiAoY29uZmlnLnVzZU5hdGl2ZURyaXZlciA9PSBudWxsKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0FuaW1hdGVkOiBgdXNlTmF0aXZlRHJpdmVyYCB3YXMgbm90IHNwZWNpZmllZC4gVGhpcyBpcyBhIHJlcXVpcmVkICcgK1xuICAgICAgICAnb3B0aW9uIGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCBvciBgZmFsc2VgJyxcbiAgICApO1xuICB9XG5cbiAgaWYgKGNvbmZpZy51c2VOYXRpdmVEcml2ZXIgPT09IHRydWUgJiYgIU5hdGl2ZUFuaW1hdGVkTW9kdWxlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcpIHtcbiAgICAgIGlmICghX3dhcm5lZE1pc3NpbmdOYXRpdmVBbmltYXRlZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ0FuaW1hdGVkOiBgdXNlTmF0aXZlRHJpdmVyYCBpcyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdGhlIG5hdGl2ZSAnICtcbiAgICAgICAgICAgICdhbmltYXRlZCBtb2R1bGUgaXMgbWlzc2luZy4gRmFsbGluZyBiYWNrIHRvIEpTLWJhc2VkIGFuaW1hdGlvbi4gVG8gJyArXG4gICAgICAgICAgICAncmVzb2x2ZSB0aGlzLCBhZGQgYFJDVEFuaW1hdGlvbmAgbW9kdWxlIHRvIHRoaXMgYXBwLCBvciByZW1vdmUgJyArXG4gICAgICAgICAgICAnYHVzZU5hdGl2ZURyaXZlcmAuICcgK1xuICAgICAgICAgICAgJ01ha2Ugc3VyZSB0byBydW4gYGJ1bmRsZSBleGVjIHBvZCBpbnN0YWxsYCBmaXJzdC4gUmVhZCBtb3JlIGFib3V0IGF1dG9saW5raW5nOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtbmF0aXZlLWNvbW11bml0eS9jbGkvYmxvYi9tYXN0ZXIvZG9jcy9hdXRvbGlua2luZy5tZCcsXG4gICAgICAgICk7XG4gICAgICAgIF93YXJuZWRNaXNzaW5nTmF0aXZlQW5pbWF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnVzZU5hdGl2ZURyaXZlciB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YVR5cGUodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gIC8vIENoYW5nZSB0aGUgc3RyaW5nIHR5cGUgdG8gbnVtYmVyIHR5cGUgc28gd2UgY2FuIHJldXNlIHRoZSBzYW1lIGxvZ2ljIGluXG4gIC8vIGlPUyBhbmQgQW5kcm9pZCBwbGF0Zm9ybVxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBkZWdyZWVzIGFuZCByYWRpYW5zIHRvIGEgbnVtYmVyIGV4cHJlc3NlZCBpbiByYWRpYW5zXG4gIGlmICh2YWx1ZS5lbmRzV2l0aCgnZGVnJykpIHtcbiAgICBjb25zdCBkZWdyZWVzID0gcGFyc2VGbG9hdCh2YWx1ZSkgfHwgMDtcbiAgICByZXR1cm4gKGRlZ3JlZXMgKiBNYXRoLlBJKSAvIDE4MC4wO1xuICB9IGVsc2UgaWYgKHZhbHVlLmVuZHNXaXRoKCdyYWQnKSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEFQSSxcbiAgaXNTdXBwb3J0ZWRDb2xvclN0eWxlUHJvcCxcbiAgaXNTdXBwb3J0ZWRTdHlsZVByb3AsXG4gIGlzU3VwcG9ydGVkVHJhbnNmb3JtUHJvcCxcbiAgaXNTdXBwb3J0ZWRJbnRlcnBvbGF0aW9uUGFyYW0sXG4gIGFkZFdoaXRlbGlzdGVkU3R5bGVQcm9wLFxuICBhZGRXaGl0ZWxpc3RlZFRyYW5zZm9ybVByb3AsXG4gIGFkZFdoaXRlbGlzdGVkSW50ZXJwb2xhdGlvblBhcmFtLFxuICB2YWxpZGF0ZVN0eWxlcyxcbiAgdmFsaWRhdGVUcmFuc2Zvcm0sXG4gIHZhbGlkYXRlSW50ZXJwb2xhdGlvbixcbiAgZ2VuZXJhdGVOZXdOb2RlVGFnLFxuICBnZW5lcmF0ZU5ld0FuaW1hdGlvbklkLFxuICBhc3NlcnROYXRpdmVBbmltYXRlZE1vZHVsZSxcbiAgc2hvdWxkVXNlTmF0aXZlRHJpdmVyLFxuICB0cmFuc2Zvcm1EYXRhVHlwZSxcbiAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW3Vuc2FmZS1nZXR0ZXJzLXNldHRlcnNdIC0gdW5zYWZlIGdldHRlciBsaW50IHN1cHByZXNzaW9uXG4gIC8vICRGbG93RXhwZWN0ZWRFcnJvclttaXNzaW5nLXR5cGUtYXJnXSAtIHVuc2FmZSBnZXR0ZXIgbGludCBzdXBwcmVzc2lvblxuICBnZXQgbmF0aXZlRXZlbnRFbWl0dGVyKCk6IE5hdGl2ZUV2ZW50RW1pdHRlciB7XG4gICAgaWYgKCFuYXRpdmVFdmVudEVtaXR0ZXIpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbdW5kZXJjb25zdHJhaW5lZC1pbXBsaWNpdC1pbnN0YW50aWF0aW9uXVxuICAgICAgbmF0aXZlRXZlbnRFbWl0dGVyID0gbmV3IE5hdGl2ZUV2ZW50RW1pdHRlcihcbiAgICAgICAgLy8gVDg4NzE1MDYzOiBOYXRpdmVFdmVudEVtaXR0ZXIgb25seSB1c2VkIHRoaXMgcGFyYW1ldGVyIG9uIGlPUy4gTm93IGl0IHVzZXMgaXQgb24gYWxsIHBsYXRmb3Jtcywgc28gdGhpcyBjb2RlIHdhcyBtb2RpZmllZCBhdXRvbWF0aWNhbGx5IHRvIHByZXNlcnZlIGl0cyBiZWhhdmlvclxuICAgICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG5hdGl2ZSBtb2R1bGUgb24gb3RoZXIgcGxhdGZvcm1zLCBwbGVhc2UgcmVtb3ZlIHRoaXMgY29uZGl0aW9uIGFuZCB0ZXN0IGl0cyBiZWhhdmlvclxuICAgICAgICBQbGF0Zm9ybS5PUyAhPT0gJ2lvcycgPyBudWxsIDogTmF0aXZlQW5pbWF0ZWRNb2R1bGUsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmF0aXZlRXZlbnRFbWl0dGVyO1xuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUFuaW1hdGVkTW9kdWxlJztcbmltcG9ydCBOYXRpdmVBbmltYXRlZE1vZHVsZSBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUFuaW1hdGVkTW9kdWxlJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZUFuaW1hdGVkTW9kdWxlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0IHNob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGUgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL0FuaW1hdGVkL3Nob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGUnO1xuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbnR5cGUgRW5kUmVzdWx0ID0ge2ZpbmlzaGVkOiBib29sZWFuLCB2YWx1ZT86IG51bWJlciwgLi4ufTtcbnR5cGUgRW5kQ2FsbGJhY2sgPSAocmVzdWx0OiBFbmRSZXN1bHQpID0+IHZvaWQ7XG50eXBlIFNhdmVWYWx1ZUNhbGxiYWNrID0gKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIEV2ZW50TWFwcGluZyA9IHt8XG4gIG5hdGl2ZUV2ZW50UGF0aDogQXJyYXk8c3RyaW5nPixcbiAgYW5pbWF0ZWRWYWx1ZVRhZzogP251bWJlcixcbnx9O1xuXG4vLyBUaGUgY29uZmlnIGhhcyBkaWZmZXJlbnQga2V5cyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIE5vZGVcbi8vIFRPRE8oVDU0ODk2ODg4KTogTWFrZSB0aGVzZSB0eXBlcyBzdHJpY3RcbmV4cG9ydCB0eXBlIEFuaW1hdGVkTm9kZUNvbmZpZyA9IE9iamVjdDtcbmV4cG9ydCB0eXBlIEFuaW1hdGluZ05vZGVDb25maWcgPSBPYmplY3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK3N0YXJ0T3BlcmF0aW9uQmF0Y2g6ICgpID0+IHZvaWQ7XG4gICtmaW5pc2hPcGVyYXRpb25CYXRjaDogKCkgPT4gdm9pZDtcbiAgK2NyZWF0ZUFuaW1hdGVkTm9kZTogKHRhZzogbnVtYmVyLCBjb25maWc6IEFuaW1hdGVkTm9kZUNvbmZpZykgPT4gdm9pZDtcbiAgK3VwZGF0ZUFuaW1hdGVkTm9kZUNvbmZpZz86ICh0YWc6IG51bWJlciwgY29uZmlnOiBBbmltYXRlZE5vZGVDb25maWcpID0+IHZvaWQ7XG4gICtnZXRWYWx1ZTogKHRhZzogbnVtYmVyLCBzYXZlVmFsdWVDYWxsYmFjazogU2F2ZVZhbHVlQ2FsbGJhY2spID0+IHZvaWQ7XG4gICtzdGFydExpc3RlbmluZ1RvQW5pbWF0ZWROb2RlVmFsdWU6ICh0YWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK3N0b3BMaXN0ZW5pbmdUb0FuaW1hdGVkTm9kZVZhbHVlOiAodGFnOiBudW1iZXIpID0+IHZvaWQ7XG4gICtjb25uZWN0QW5pbWF0ZWROb2RlczogKHBhcmVudFRhZzogbnVtYmVyLCBjaGlsZFRhZzogbnVtYmVyKSA9PiB2b2lkO1xuICArZGlzY29ubmVjdEFuaW1hdGVkTm9kZXM6IChwYXJlbnRUYWc6IG51bWJlciwgY2hpbGRUYWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK3N0YXJ0QW5pbWF0aW5nTm9kZTogKFxuICAgIGFuaW1hdGlvbklkOiBudW1iZXIsXG4gICAgbm9kZVRhZzogbnVtYmVyLFxuICAgIGNvbmZpZzogQW5pbWF0aW5nTm9kZUNvbmZpZyxcbiAgICBlbmRDYWxsYmFjazogRW5kQ2FsbGJhY2ssXG4gICkgPT4gdm9pZDtcbiAgK3N0b3BBbmltYXRpb246IChhbmltYXRpb25JZDogbnVtYmVyKSA9PiB2b2lkO1xuICArc2V0QW5pbWF0ZWROb2RlVmFsdWU6IChub2RlVGFnOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG4gICtzZXRBbmltYXRlZE5vZGVPZmZzZXQ6IChub2RlVGFnOiBudW1iZXIsIG9mZnNldDogbnVtYmVyKSA9PiB2b2lkO1xuICArZmxhdHRlbkFuaW1hdGVkTm9kZU9mZnNldDogKG5vZGVUYWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK2V4dHJhY3RBbmltYXRlZE5vZGVPZmZzZXQ6IChub2RlVGFnOiBudW1iZXIpID0+IHZvaWQ7XG4gICtjb25uZWN0QW5pbWF0ZWROb2RlVG9WaWV3OiAobm9kZVRhZzogbnVtYmVyLCB2aWV3VGFnOiBudW1iZXIpID0+IHZvaWQ7XG4gICtkaXNjb25uZWN0QW5pbWF0ZWROb2RlRnJvbVZpZXc6IChub2RlVGFnOiBudW1iZXIsIHZpZXdUYWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK3Jlc3RvcmVEZWZhdWx0VmFsdWVzOiAobm9kZVRhZzogbnVtYmVyKSA9PiB2b2lkO1xuICArZHJvcEFuaW1hdGVkTm9kZTogKHRhZzogbnVtYmVyKSA9PiB2b2lkO1xuICArYWRkQW5pbWF0ZWRFdmVudFRvVmlldzogKFxuICAgIHZpZXdUYWc6IG51bWJlcixcbiAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICBldmVudE1hcHBpbmc6IEV2ZW50TWFwcGluZyxcbiAgKSA9PiB2b2lkO1xuICArcmVtb3ZlQW5pbWF0ZWRFdmVudEZyb21WaWV3OiAoXG4gICAgdmlld1RhZzogbnVtYmVyLFxuICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgIGFuaW1hdGVkTm9kZVRhZzogbnVtYmVyLFxuICApID0+IHZvaWQ7XG5cbiAgLy8gRXZlbnRzXG4gICthZGRMaXN0ZW5lcjogKGV2ZW50TmFtZTogc3RyaW5nKSA9PiB2b2lkO1xuICArcmVtb3ZlTGlzdGVuZXJzOiAoY291bnQ6IG51bWJlcikgPT4gdm9pZDtcblxuICAvLyBBbGwgb2YgdGhlIGFib3ZlIGluIGEgYmF0Y2hlZCBtb2RlXG4gICtxdWV1ZUFuZEV4ZWN1dGVCYXRjaGVkT3BlcmF0aW9ucz86IChvcGVyYXRpb25zQW5kQXJnczogQXJyYXk8YW55PikgPT4gdm9pZDtcbn1cblxuY29uc3QgTmF0aXZlTW9kdWxlOiA/U3BlYyA9ICFzaG91bGRVc2VUdXJib0FuaW1hdGVkTW9kdWxlKClcbiAgPyBUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPignTmF0aXZlQW5pbWF0ZWRNb2R1bGUnKVxuICA6IG51bGw7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVNb2R1bGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5cbmZ1bmN0aW9uIHNob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgJiYgZ2xvYmFsLlJOJEJyaWRnZWxlc3MgPT09IHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVBbmltYXRlZFR1cmJvTW9kdWxlJztcbmltcG9ydCBOYXRpdmVBbmltYXRlZFR1cmJvTW9kdWxlIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQW5pbWF0ZWRUdXJib01vZHVsZSc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVBbmltYXRlZFR1cmJvTW9kdWxlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0IHNob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGUgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL0FuaW1hdGVkL3Nob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGUnO1xuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbnR5cGUgRW5kUmVzdWx0ID0ge2ZpbmlzaGVkOiBib29sZWFuLCB2YWx1ZT86IG51bWJlciwgLi4ufTtcbnR5cGUgRW5kQ2FsbGJhY2sgPSAocmVzdWx0OiBFbmRSZXN1bHQpID0+IHZvaWQ7XG50eXBlIFNhdmVWYWx1ZUNhbGxiYWNrID0gKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIEV2ZW50TWFwcGluZyA9IHt8XG4gIG5hdGl2ZUV2ZW50UGF0aDogQXJyYXk8c3RyaW5nPixcbiAgYW5pbWF0ZWRWYWx1ZVRhZzogP251bWJlcixcbnx9O1xuXG4vLyBUaGUgY29uZmlnIGhhcyBkaWZmZXJlbnQga2V5cyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIE5vZGVcbi8vIFRPRE8oVDU0ODk2ODg4KTogTWFrZSB0aGVzZSB0eXBlcyBzdHJpY3RcbmV4cG9ydCB0eXBlIEFuaW1hdGVkTm9kZUNvbmZpZyA9IE9iamVjdDtcbmV4cG9ydCB0eXBlIEFuaW1hdGluZ05vZGVDb25maWcgPSBPYmplY3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK3N0YXJ0T3BlcmF0aW9uQmF0Y2g6ICgpID0+IHZvaWQ7XG4gICtmaW5pc2hPcGVyYXRpb25CYXRjaDogKCkgPT4gdm9pZDtcbiAgK2NyZWF0ZUFuaW1hdGVkTm9kZTogKHRhZzogbnVtYmVyLCBjb25maWc6IEFuaW1hdGVkTm9kZUNvbmZpZykgPT4gdm9pZDtcbiAgK3VwZGF0ZUFuaW1hdGVkTm9kZUNvbmZpZz86ICh0YWc6IG51bWJlciwgY29uZmlnOiBBbmltYXRlZE5vZGVDb25maWcpID0+IHZvaWQ7XG4gICtnZXRWYWx1ZTogKHRhZzogbnVtYmVyLCBzYXZlVmFsdWVDYWxsYmFjazogU2F2ZVZhbHVlQ2FsbGJhY2spID0+IHZvaWQ7XG4gICtzdGFydExpc3RlbmluZ1RvQW5pbWF0ZWROb2RlVmFsdWU6ICh0YWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK3N0b3BMaXN0ZW5pbmdUb0FuaW1hdGVkTm9kZVZhbHVlOiAodGFnOiBudW1iZXIpID0+IHZvaWQ7XG4gICtjb25uZWN0QW5pbWF0ZWROb2RlczogKHBhcmVudFRhZzogbnVtYmVyLCBjaGlsZFRhZzogbnVtYmVyKSA9PiB2b2lkO1xuICArZGlzY29ubmVjdEFuaW1hdGVkTm9kZXM6IChwYXJlbnRUYWc6IG51bWJlciwgY2hpbGRUYWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK3N0YXJ0QW5pbWF0aW5nTm9kZTogKFxuICAgIGFuaW1hdGlvbklkOiBudW1iZXIsXG4gICAgbm9kZVRhZzogbnVtYmVyLFxuICAgIGNvbmZpZzogQW5pbWF0aW5nTm9kZUNvbmZpZyxcbiAgICBlbmRDYWxsYmFjazogRW5kQ2FsbGJhY2ssXG4gICkgPT4gdm9pZDtcbiAgK3N0b3BBbmltYXRpb246IChhbmltYXRpb25JZDogbnVtYmVyKSA9PiB2b2lkO1xuICArc2V0QW5pbWF0ZWROb2RlVmFsdWU6IChub2RlVGFnOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG4gICtzZXRBbmltYXRlZE5vZGVPZmZzZXQ6IChub2RlVGFnOiBudW1iZXIsIG9mZnNldDogbnVtYmVyKSA9PiB2b2lkO1xuICArZmxhdHRlbkFuaW1hdGVkTm9kZU9mZnNldDogKG5vZGVUYWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK2V4dHJhY3RBbmltYXRlZE5vZGVPZmZzZXQ6IChub2RlVGFnOiBudW1iZXIpID0+IHZvaWQ7XG4gICtjb25uZWN0QW5pbWF0ZWROb2RlVG9WaWV3OiAobm9kZVRhZzogbnVtYmVyLCB2aWV3VGFnOiBudW1iZXIpID0+IHZvaWQ7XG4gICtkaXNjb25uZWN0QW5pbWF0ZWROb2RlRnJvbVZpZXc6IChub2RlVGFnOiBudW1iZXIsIHZpZXdUYWc6IG51bWJlcikgPT4gdm9pZDtcbiAgK3Jlc3RvcmVEZWZhdWx0VmFsdWVzOiAobm9kZVRhZzogbnVtYmVyKSA9PiB2b2lkO1xuICArZHJvcEFuaW1hdGVkTm9kZTogKHRhZzogbnVtYmVyKSA9PiB2b2lkO1xuICArYWRkQW5pbWF0ZWRFdmVudFRvVmlldzogKFxuICAgIHZpZXdUYWc6IG51bWJlcixcbiAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICBldmVudE1hcHBpbmc6IEV2ZW50TWFwcGluZyxcbiAgKSA9PiB2b2lkO1xuICArcmVtb3ZlQW5pbWF0ZWRFdmVudEZyb21WaWV3OiAoXG4gICAgdmlld1RhZzogbnVtYmVyLFxuICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgIGFuaW1hdGVkTm9kZVRhZzogbnVtYmVyLFxuICApID0+IHZvaWQ7XG5cbiAgLy8gRXZlbnRzXG4gICthZGRMaXN0ZW5lcjogKGV2ZW50TmFtZTogc3RyaW5nKSA9PiB2b2lkO1xuICArcmVtb3ZlTGlzdGVuZXJzOiAoY291bnQ6IG51bWJlcikgPT4gdm9pZDtcblxuICAvLyBBbGwgb2YgdGhlIGFib3ZlIGluIGEgYmF0Y2hlZCBtb2RlXG4gICtxdWV1ZUFuZEV4ZWN1dGVCYXRjaGVkT3BlcmF0aW9ucz86IChvcGVyYXRpb25zQW5kQXJnczogQXJyYXk8YW55PikgPT4gdm9pZDtcbn1cblxuY29uc3QgTmF0aXZlTW9kdWxlOiA/U3BlYyA9IHNob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGUoKVxuICA/IFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdOYXRpdmVBbmltYXRlZFR1cmJvTW9kdWxlJylcbiAgOiBudWxsO1xuXG5leHBvcnQgZGVmYXVsdCBOYXRpdmVNb2R1bGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybUNvbmZpZ30gZnJvbSAnLi4vQW5pbWF0ZWRQbGF0Zm9ybUNvbmZpZyc7XG5pbXBvcnQgdHlwZSBBbmltYXRlZE5vZGUgZnJvbSAnLi4vbm9kZXMvQW5pbWF0ZWROb2RlJztcbmltcG9ydCB0eXBlIEFuaW1hdGVkVmFsdWUgZnJvbSAnLi4vbm9kZXMvQW5pbWF0ZWRWYWx1ZSc7XG5cbmltcG9ydCBOYXRpdmVBbmltYXRlZEhlbHBlciBmcm9tICcuLi9OYXRpdmVBbmltYXRlZEhlbHBlcic7XG5pbXBvcnQgQW5pbWF0ZWRQcm9wcyBmcm9tICcuLi9ub2Rlcy9BbmltYXRlZFByb3BzJztcblxuZXhwb3J0IHR5cGUgRW5kUmVzdWx0ID0ge2ZpbmlzaGVkOiBib29sZWFuLCB2YWx1ZT86IG51bWJlciwgLi4ufTtcbmV4cG9ydCB0eXBlIEVuZENhbGxiYWNrID0gKHJlc3VsdDogRW5kUmVzdWx0KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBBbmltYXRpb25Db25maWcgPSB7XG4gIGlzSW50ZXJhY3Rpb24/OiBib29sZWFuLFxuICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG4gIHBsYXRmb3JtQ29uZmlnPzogUGxhdGZvcm1Db25maWcsXG4gIG9uQ29tcGxldGU/OiA/RW5kQ2FsbGJhY2ssXG4gIGl0ZXJhdGlvbnM/OiBudW1iZXIsXG59O1xuXG5sZXQgc3RhcnROYXRpdmVBbmltYXRpb25OZXh0SWQgPSAxO1xuXG4vLyBJbXBvcnRhbnQgbm90ZTogc3RhcnQoKSBhbmQgc3RvcCgpIHdpbGwgb25seSBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlLlxuLy8gT25jZSBhbiBhbmltYXRpb24gaGFzIGJlZW4gc3RvcHBlZCBvciBmaW5pc2hlZCBpdHMgY291cnNlLCBpdCB3aWxsXG4vLyBub3QgYmUgcmV1c2VkLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0aW9uIHtcbiAgX19hY3RpdmU6IGJvb2xlYW47XG4gIF9faXNJbnRlcmFjdGlvbjogYm9vbGVhbjtcbiAgX19vbkVuZDogP0VuZENhbGxiYWNrO1xuICBfX2l0ZXJhdGlvbnM6IG51bWJlcjtcblxuICBfbmF0aXZlSWQ6IG51bWJlcjtcblxuICBzdGFydChcbiAgICBmcm9tVmFsdWU6IG51bWJlcixcbiAgICBvblVwZGF0ZTogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25FbmQ6ID9FbmRDYWxsYmFjayxcbiAgICBwcmV2aW91c0FuaW1hdGlvbjogP0FuaW1hdGlvbixcbiAgICBhbmltYXRlZFZhbHVlOiBBbmltYXRlZFZhbHVlLFxuICApOiB2b2lkIHt9XG5cbiAgc3RvcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbmF0aXZlSWQpIHtcbiAgICAgIE5hdGl2ZUFuaW1hdGVkSGVscGVyLkFQSS5zdG9wQW5pbWF0aW9uKHRoaXMuX25hdGl2ZUlkKTtcbiAgICB9XG4gIH1cblxuICBfX2dldE5hdGl2ZUFuaW1hdGlvbkNvbmZpZygpOiBhbnkge1xuICAgIC8vIFN1YmNsYXNzZXMgdGhhdCBoYXZlIGNvcnJlc3BvbmRpbmcgYW5pbWF0aW9uIGltcGxlbWVudGF0aW9uIGRvbmUgaW4gbmF0aXZlXG4gICAgLy8gc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kXG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGFuaW1hdGlvbiB0eXBlIGNhbm5vdCBiZSBvZmZsb2FkZWQgdG8gbmF0aXZlJyk7XG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHN1YmNsYXNzZXMgdG8gbWFrZSBzdXJlIG9uRW5kIGlzIG9ubHkgY2FsbGVkIG9uY2UuXG4gIF9fZGVib3VuY2VkT25FbmQocmVzdWx0OiBFbmRSZXN1bHQpOiB2b2lkIHtcbiAgICBjb25zdCBvbkVuZCA9IHRoaXMuX19vbkVuZDtcbiAgICB0aGlzLl9fb25FbmQgPSBudWxsO1xuICAgIG9uRW5kICYmIG9uRW5kKHJlc3VsdCk7XG4gIH1cblxuICBfX2ZpbmRBbmltYXRlZFByb3BzTm9kZXMobm9kZTogQW5pbWF0ZWROb2RlKTogQXJyYXk8QW5pbWF0ZWRQcm9wcz4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBbmltYXRlZFByb3BzKSB7XG4gICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLl9fZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5fX2ZpbmRBbmltYXRlZFByb3BzTm9kZXMoY2hpbGQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgX19zdGFydE5hdGl2ZUFuaW1hdGlvbihhbmltYXRlZFZhbHVlOiBBbmltYXRlZFZhbHVlKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnROYXRpdmVBbmltYXRpb25XYWl0SWQgPSBgJHtzdGFydE5hdGl2ZUFuaW1hdGlvbk5leHRJZH06c3RhcnRBbmltYXRpb25gO1xuICAgIHN0YXJ0TmF0aXZlQW5pbWF0aW9uTmV4dElkICs9IDE7XG4gICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJLnNldFdhaXRpbmdGb3JJZGVudGlmaWVyKFxuICAgICAgc3RhcnROYXRpdmVBbmltYXRpb25XYWl0SWQsXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fX2dldE5hdGl2ZUFuaW1hdGlvbkNvbmZpZygpO1xuICAgICAgYW5pbWF0ZWRWYWx1ZS5fX21ha2VOYXRpdmUoY29uZmlnLnBsYXRmb3JtQ29uZmlnKTtcbiAgICAgIHRoaXMuX25hdGl2ZUlkID0gTmF0aXZlQW5pbWF0ZWRIZWxwZXIuZ2VuZXJhdGVOZXdBbmltYXRpb25JZCgpO1xuICAgICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJLnN0YXJ0QW5pbWF0aW5nTm9kZShcbiAgICAgICAgdGhpcy5fbmF0aXZlSWQsXG4gICAgICAgIGFuaW1hdGVkVmFsdWUuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgIHRoaXMuX19kZWJvdW5jZWRPbkVuZChyZXN1bHQpO1xuXG4gICAgICAgICAgLy8gV2hlbiB1c2luZyBuYXRpdmVseSBkcml2ZW4gYW5pbWF0aW9ucywgb25jZSB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlcyxcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBKUyBzaWRlIG5vZGVzIGFyZSBzeW5jZWQgd2l0aCB0aGUgdXBkYXRlZFxuICAgICAgICAgIC8vIHZhbHVlcy5cbiAgICAgICAgICBjb25zdCB7dmFsdWV9ID0gcmVzdWx0O1xuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBhbmltYXRlZFZhbHVlLl9fb25BbmltYXRlZFZhbHVlVXBkYXRlUmVjZWl2ZWQodmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBPbmNlIHRoZSBKUyBzaWRlIG5vZGUgaXMgc3luY2VkIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzLCB0cmlnZ2VyIGFuXG4gICAgICAgICAgICAvLyB1cGRhdGUgb24gdGhlIEFuaW1hdGVkUHJvcHMgbm9kZXMgdG8gY2FsbCBhbnkgcmVnaXN0ZXJlZCBjYWxsYmFja3MuXG4gICAgICAgICAgICB0aGlzLl9fZmluZEFuaW1hdGVkUHJvcHNOb2RlcyhhbmltYXRlZFZhbHVlKS5mb3JFYWNoKG5vZGUgPT5cbiAgICAgICAgICAgICAgbm9kZS51cGRhdGUoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBOYXRpdmVBbmltYXRlZEhlbHBlci5BUEkudW5zZXRXYWl0aW5nRm9ySWRlbnRpZmllcihcbiAgICAgICAgc3RhcnROYXRpdmVBbmltYXRpb25XYWl0SWQsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1Db25maWd9IGZyb20gJy4uL0FuaW1hdGVkUGxhdGZvcm1Db25maWcnO1xuXG5pbXBvcnQge2ZpbmROb2RlSGFuZGxlfSBmcm9tICcuLi8uLi9SZWFjdE5hdGl2ZS9SZW5kZXJlclByb3h5JztcbmltcG9ydCB7QW5pbWF0ZWRFdmVudH0gZnJvbSAnLi4vQW5pbWF0ZWRFdmVudCc7XG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRIZWxwZXIgZnJvbSAnLi4vTmF0aXZlQW5pbWF0ZWRIZWxwZXInO1xuaW1wb3J0IEFuaW1hdGVkTm9kZSBmcm9tICcuL0FuaW1hdGVkTm9kZSc7XG5pbXBvcnQgQW5pbWF0ZWRPYmplY3QsIHtoYXNBbmltYXRlZE5vZGV9IGZyb20gJy4vQW5pbWF0ZWRPYmplY3QnO1xuaW1wb3J0IEFuaW1hdGVkU3R5bGUgZnJvbSAnLi9BbmltYXRlZFN0eWxlJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxuZnVuY3Rpb24gY3JlYXRlQW5pbWF0ZWRQcm9wcyhpbnB1dFByb3BzOiBPYmplY3QpOiBPYmplY3Qge1xuICBjb25zdCBwcm9wczogT2JqZWN0ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIGlucHV0UHJvcHMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0UHJvcHNba2V5XTtcbiAgICBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XG4gICAgICBwcm9wc1trZXldID0gbmV3IEFuaW1hdGVkU3R5bGUodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGhhc0FuaW1hdGVkTm9kZSh2YWx1ZSkpIHtcbiAgICAgIHByb3BzW2tleV0gPSBuZXcgQW5pbWF0ZWRPYmplY3QodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRQcm9wcyBleHRlbmRzIEFuaW1hdGVkTm9kZSB7XG4gIF9wcm9wczogT2JqZWN0O1xuICBfYW5pbWF0ZWRWaWV3OiBhbnk7XG4gIF9jYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogT2JqZWN0LCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcHJvcHMgPSBjcmVhdGVBbmltYXRlZFByb3BzKHByb3BzKTtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgX19nZXRWYWx1ZSgpOiBPYmplY3Qge1xuICAgIGNvbnN0IHByb3BzOiB7W3N0cmluZ106IGFueSB8ICgoLi4uYXJnczogYW55KSA9PiB2b2lkKX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9wcm9wcykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9wcm9wc1trZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgIHByb3BzW2tleV0gPSB2YWx1ZS5fX2dldFZhbHVlKCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWRFdmVudCkge1xuICAgICAgICBwcm9wc1trZXldID0gdmFsdWUuX19nZXRIYW5kbGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgX19nZXRBbmltYXRlZFZhbHVlKCk6IE9iamVjdCB7XG4gICAgY29uc3QgcHJvcHM6IHtbc3RyaW5nXTogYW55fSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3Byb3BzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3Byb3BzW2tleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgcHJvcHNba2V5XSA9IHZhbHVlLl9fZ2V0QW5pbWF0ZWRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICBfX2F0dGFjaCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9wcm9wcykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9wcm9wc1trZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgIHZhbHVlLl9fYWRkQ2hpbGQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX19kZXRhY2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX19pc05hdGl2ZSAmJiB0aGlzLl9hbmltYXRlZFZpZXcpIHtcbiAgICAgIHRoaXMuX19kaXNjb25uZWN0QW5pbWF0ZWRWaWV3KCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3Byb3BzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3Byb3BzW2tleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgdmFsdWUuX19yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuX19kZXRhY2goKTtcbiAgfVxuXG4gIHVwZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWxsYmFjaygpO1xuICB9XG5cbiAgX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnOiA/UGxhdGZvcm1Db25maWcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9wcm9wcykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9wcm9wc1trZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgIHZhbHVlLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9faXNOYXRpdmUpIHtcbiAgICAgIHRoaXMuX19pc05hdGl2ZSA9IHRydWU7XG5cbiAgICAgIC8vIFNpbmNlIHRoaXMgZG9lcyBub3QgY2FsbCB0aGUgc3VwZXIuX19tYWtlTmF0aXZlLCB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAgICAgLy8gc3VwcGxpZWQgcGxhdGZvcm1Db25maWcgaGVyZSwgYmVmb3JlIGNhbGxpbmcgX19jb25uZWN0QW5pbWF0ZWRWaWV3XG4gICAgICAvLyB3aGVyZSBpdCB3aWxsIGJlIG5lZWRlZCB0byB0cmF2ZXJzZSB0aGUgZ3JhcGggb2YgYXR0YWNoZWQgdmFsdWVzLlxuICAgICAgc3VwZXIuX19zZXRQbGF0Zm9ybUNvbmZpZyhwbGF0Zm9ybUNvbmZpZyk7XG5cbiAgICAgIGlmICh0aGlzLl9hbmltYXRlZFZpZXcpIHtcbiAgICAgICAgdGhpcy5fX2Nvbm5lY3RBbmltYXRlZFZpZXcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXROYXRpdmVWaWV3KGFuaW1hdGVkVmlldzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2FuaW1hdGVkVmlldyA9PT0gYW5pbWF0ZWRWaWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FuaW1hdGVkVmlldyA9IGFuaW1hdGVkVmlldztcbiAgICBpZiAodGhpcy5fX2lzTmF0aXZlKSB7XG4gICAgICB0aGlzLl9fY29ubmVjdEFuaW1hdGVkVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIF9fY29ubmVjdEFuaW1hdGVkVmlldygpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQodGhpcy5fX2lzTmF0aXZlLCAnRXhwZWN0ZWQgbm9kZSB0byBiZSBtYXJrZWQgYXMgXCJuYXRpdmVcIicpO1xuICAgIGNvbnN0IG5hdGl2ZVZpZXdUYWc6ID9udW1iZXIgPSBmaW5kTm9kZUhhbmRsZSh0aGlzLl9hbmltYXRlZFZpZXcpO1xuICAgIGludmFyaWFudChcbiAgICAgIG5hdGl2ZVZpZXdUYWcgIT0gbnVsbCxcbiAgICAgICdVbmFibGUgdG8gbG9jYXRlIGF0dGFjaGVkIHZpZXcgaW4gdGhlIG5hdGl2ZSB0cmVlJyxcbiAgICApO1xuICAgIE5hdGl2ZUFuaW1hdGVkSGVscGVyLkFQSS5jb25uZWN0QW5pbWF0ZWROb2RlVG9WaWV3KFxuICAgICAgdGhpcy5fX2dldE5hdGl2ZVRhZygpLFxuICAgICAgbmF0aXZlVmlld1RhZyxcbiAgICApO1xuICB9XG5cbiAgX19kaXNjb25uZWN0QW5pbWF0ZWRWaWV3KCk6IHZvaWQge1xuICAgIGludmFyaWFudCh0aGlzLl9faXNOYXRpdmUsICdFeHBlY3RlZCBub2RlIHRvIGJlIG1hcmtlZCBhcyBcIm5hdGl2ZVwiJyk7XG4gICAgY29uc3QgbmF0aXZlVmlld1RhZzogP251bWJlciA9IGZpbmROb2RlSGFuZGxlKHRoaXMuX2FuaW1hdGVkVmlldyk7XG4gICAgaW52YXJpYW50KFxuICAgICAgbmF0aXZlVmlld1RhZyAhPSBudWxsLFxuICAgICAgJ1VuYWJsZSB0byBsb2NhdGUgYXR0YWNoZWQgdmlldyBpbiB0aGUgbmF0aXZlIHRyZWUnLFxuICAgICk7XG4gICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJLmRpc2Nvbm5lY3RBbmltYXRlZE5vZGVGcm9tVmlldyhcbiAgICAgIHRoaXMuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgIG5hdGl2ZVZpZXdUYWcsXG4gICAgKTtcbiAgfVxuXG4gIF9fcmVzdG9yZURlZmF1bHRWYWx1ZXMoKTogdm9pZCB7XG4gICAgLy8gV2hlbiB1c2luZyB0aGUgbmF0aXZlIGRyaXZlciwgdmlldyBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgcmVzdG9yZWQgdG9cbiAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcyBtYW51YWxseSBzaW5jZSByZWFjdCBubyBsb25nZXIgdHJhY2tzIHRoZW0uIFRoaXNcbiAgICAvLyBpcyBuZWVkZWQgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIGEgcHJvcCBkcml2ZW4gYnkgbmF0aXZlIGFuaW1hdGVkIGlzIHJlbW92ZWRcbiAgICAvLyBhZnRlciBoYXZpbmcgYmVlbiBjaGFuZ2VkIG5hdGl2ZWx5IGJ5IGFuIGFuaW1hdGlvbi5cbiAgICBpZiAodGhpcy5fX2lzTmF0aXZlKSB7XG4gICAgICBOYXRpdmVBbmltYXRlZEhlbHBlci5BUEkucmVzdG9yZURlZmF1bHRWYWx1ZXModGhpcy5fX2dldE5hdGl2ZVRhZygpKTtcbiAgICB9XG4gIH1cblxuICBfX2dldE5hdGl2ZUNvbmZpZygpOiBPYmplY3Qge1xuICAgIGNvbnN0IHByb3BzQ29uZmlnOiB7W3N0cmluZ106IG51bWJlcn0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3BLZXkgaW4gdGhpcy5fcHJvcHMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fcHJvcHNbcHJvcEtleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgdmFsdWUuX19tYWtlTmF0aXZlKHRoaXMuX19nZXRQbGF0Zm9ybUNvbmZpZygpKTtcbiAgICAgICAgcHJvcHNDb25maWdbcHJvcEtleV0gPSB2YWx1ZS5fX2dldE5hdGl2ZVRhZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgIHByb3BzOiBwcm9wc0NvbmZpZyxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybUNvbmZpZ30gZnJvbSAnLi4vQW5pbWF0ZWRQbGF0Zm9ybUNvbmZpZyc7XG5cbmltcG9ydCBOYXRpdmVBbmltYXRlZEhlbHBlciBmcm9tICcuLi9OYXRpdmVBbmltYXRlZEhlbHBlcic7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5cbmNvbnN0IE5hdGl2ZUFuaW1hdGVkQVBJID0gTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJO1xuXG50eXBlIFZhbHVlTGlzdGVuZXJDYWxsYmFjayA9IChzdGF0ZToge3ZhbHVlOiBudW1iZXIsIC4uLn0pID0+IG1peGVkO1xuXG5sZXQgX3VuaXF1ZUlkID0gMTtcblxuLy8gTm90ZSh2amV1eCk6IHRoaXMgd291bGQgYmUgYmV0dGVyIGFzIGFuIGludGVyZmFjZSBidXQgZmxvdyBkb2Vzbid0XG4vLyBzdXBwb3J0IHRoZW0geWV0XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmltYXRlZE5vZGUge1xuICBfbGlzdGVuZXJzOiB7W2tleTogc3RyaW5nXTogVmFsdWVMaXN0ZW5lckNhbGxiYWNrLCAuLi59O1xuICBfcGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZztcbiAgX19uYXRpdmVBbmltYXRlZFZhbHVlTGlzdGVuZXI6ID9hbnk7XG4gIF9fYXR0YWNoKCk6IHZvaWQge31cbiAgX19kZXRhY2goKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICBpZiAodGhpcy5fX2lzTmF0aXZlICYmIHRoaXMuX19uYXRpdmVUYWcgIT0gbnVsbCkge1xuICAgICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJLmRyb3BBbmltYXRlZE5vZGUodGhpcy5fX25hdGl2ZVRhZyk7XG4gICAgICB0aGlzLl9fbmF0aXZlVGFnID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBfX2dldFZhbHVlKCk6IGFueSB7fVxuICBfX2dldEFuaW1hdGVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fX2dldFZhbHVlKCk7XG4gIH1cbiAgX19hZGRDaGlsZChjaGlsZDogQW5pbWF0ZWROb2RlKSB7fVxuICBfX3JlbW92ZUNoaWxkKGNoaWxkOiBBbmltYXRlZE5vZGUpIHt9XG4gIF9fZ2V0Q2hpbGRyZW4oKTogJFJlYWRPbmx5QXJyYXk8QW5pbWF0ZWROb2RlPiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyogTWV0aG9kcyBhbmQgcHJvcHMgdXNlZCBieSBuYXRpdmUgQW5pbWF0ZWQgaW1wbCAqL1xuICBfX2lzTmF0aXZlOiBib29sZWFuO1xuICBfX25hdGl2ZVRhZzogP251bWJlcjtcbiAgX19zaG91bGRVcGRhdGVMaXN0ZW5lcnNGb3JOZXdOYXRpdmVUYWc6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0ge307XG4gIH1cblxuICBfX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fX2lzTmF0aXZlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbm9kZSBjYW5ub3QgYmUgbWFkZSBhIFwibmF0aXZlXCIgYW5pbWF0ZWQgbm9kZScpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXRmb3JtQ29uZmlnID0gcGxhdGZvcm1Db25maWc7XG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuX3N0YXJ0TGlzdGVuaW5nVG9OYXRpdmVWYWx1ZVVwZGF0ZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBhc3luY2hyb25vdXMgbGlzdGVuZXIgdG8gdGhlIHZhbHVlIHNvIHlvdSBjYW4gb2JzZXJ2ZSB1cGRhdGVzIGZyb21cbiAgICogYW5pbWF0aW9ucy4gIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvXG4gICAqIHN5bmNocm9ub3VzbHkgcmVhZCB0aGUgdmFsdWUgYmVjYXVzZSBpdCBtaWdodCBiZSBkcml2ZW4gbmF0aXZlbHkuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkdmFsdWUjYWRkbGlzdGVuZXJcbiAgICovXG4gIGFkZExpc3RlbmVyKGNhbGxiYWNrOiAodmFsdWU6IGFueSkgPT4gbWl4ZWQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkID0gU3RyaW5nKF91bmlxdWVJZCsrKTtcbiAgICB0aGlzLl9saXN0ZW5lcnNbaWRdID0gY2FsbGJhY2s7XG4gICAgaWYgKHRoaXMuX19pc05hdGl2ZSkge1xuICAgICAgdGhpcy5fc3RhcnRMaXN0ZW5pbmdUb05hdGl2ZVZhbHVlVXBkYXRlcygpO1xuICAgIH1cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlciBhIGxpc3RlbmVyLiBUaGUgYGlkYCBwYXJhbSBzaGFsbCBtYXRjaCB0aGUgaWRlbnRpZmllclxuICAgKiBwcmV2aW91c2x5IHJldHVybmVkIGJ5IGBhZGRMaXN0ZW5lcigpYC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWR2YWx1ZSNyZW1vdmVsaXN0ZW5lclxuICAgKi9cbiAgcmVtb3ZlTGlzdGVuZXIoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbaWRdO1xuICAgIGlmICh0aGlzLl9faXNOYXRpdmUgJiYgIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuX3N0b3BMaXN0ZW5pbmdGb3JOYXRpdmVWYWx1ZVVwZGF0ZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWR2YWx1ZSNyZW1vdmVhbGxsaXN0ZW5lcnNcbiAgICovXG4gIHJlbW92ZUFsbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbiAgICBpZiAodGhpcy5fX2lzTmF0aXZlKSB7XG4gICAgICB0aGlzLl9zdG9wTGlzdGVuaW5nRm9yTmF0aXZlVmFsdWVVcGRhdGVzKCk7XG4gICAgfVxuICB9XG5cbiAgaGFzTGlzdGVuZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIU9iamVjdC5rZXlzKHRoaXMuX2xpc3RlbmVycykubGVuZ3RoO1xuICB9XG5cbiAgX3N0YXJ0TGlzdGVuaW5nVG9OYXRpdmVWYWx1ZVVwZGF0ZXMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fX25hdGl2ZUFuaW1hdGVkVmFsdWVMaXN0ZW5lciAmJlxuICAgICAgIXRoaXMuX19zaG91bGRVcGRhdGVMaXN0ZW5lcnNGb3JOZXdOYXRpdmVUYWdcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fX3Nob3VsZFVwZGF0ZUxpc3RlbmVyc0Zvck5ld05hdGl2ZVRhZykge1xuICAgICAgdGhpcy5fX3Nob3VsZFVwZGF0ZUxpc3RlbmVyc0Zvck5ld05hdGl2ZVRhZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RvcExpc3RlbmluZ0Zvck5hdGl2ZVZhbHVlVXBkYXRlcygpO1xuICAgIH1cblxuICAgIE5hdGl2ZUFuaW1hdGVkQVBJLnN0YXJ0TGlzdGVuaW5nVG9BbmltYXRlZE5vZGVWYWx1ZSh0aGlzLl9fZ2V0TmF0aXZlVGFnKCkpO1xuICAgIHRoaXMuX19uYXRpdmVBbmltYXRlZFZhbHVlTGlzdGVuZXIgPVxuICAgICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIubmF0aXZlRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKFxuICAgICAgICAnb25BbmltYXRlZFZhbHVlVXBkYXRlJyxcbiAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEudGFnICE9PSB0aGlzLl9fZ2V0TmF0aXZlVGFnKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fX29uQW5pbWF0ZWRWYWx1ZVVwZGF0ZVJlY2VpdmVkKGRhdGEudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuXG4gIF9fb25BbmltYXRlZFZhbHVlVXBkYXRlUmVjZWl2ZWQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX19jYWxsTGlzdGVuZXJzKHZhbHVlKTtcbiAgfVxuXG4gIF9fY2FsbExpc3RlbmVycyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnNba2V5XSh7dmFsdWV9KTtcbiAgICB9XG4gIH1cblxuICBfc3RvcExpc3RlbmluZ0Zvck5hdGl2ZVZhbHVlVXBkYXRlcygpIHtcbiAgICBpZiAoIXRoaXMuX19uYXRpdmVBbmltYXRlZFZhbHVlTGlzdGVuZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9fbmF0aXZlQW5pbWF0ZWRWYWx1ZUxpc3RlbmVyLnJlbW92ZSgpO1xuICAgIHRoaXMuX19uYXRpdmVBbmltYXRlZFZhbHVlTGlzdGVuZXIgPSBudWxsO1xuICAgIE5hdGl2ZUFuaW1hdGVkQVBJLnN0b3BMaXN0ZW5pbmdUb0FuaW1hdGVkTm9kZVZhbHVlKHRoaXMuX19nZXROYXRpdmVUYWcoKSk7XG4gIH1cblxuICBfX2dldE5hdGl2ZVRhZygpOiBudW1iZXIge1xuICAgIE5hdGl2ZUFuaW1hdGVkSGVscGVyLmFzc2VydE5hdGl2ZUFuaW1hdGVkTW9kdWxlKCk7XG4gICAgaW52YXJpYW50KFxuICAgICAgdGhpcy5fX2lzTmF0aXZlLFxuICAgICAgJ0F0dGVtcHQgdG8gZ2V0IG5hdGl2ZSB0YWcgZnJvbSBub2RlIG5vdCBtYXJrZWQgYXMgXCJuYXRpdmVcIicsXG4gICAgKTtcblxuICAgIGNvbnN0IG5hdGl2ZVRhZyA9XG4gICAgICB0aGlzLl9fbmF0aXZlVGFnID8/IE5hdGl2ZUFuaW1hdGVkSGVscGVyLmdlbmVyYXRlTmV3Tm9kZVRhZygpO1xuXG4gICAgaWYgKHRoaXMuX19uYXRpdmVUYWcgPT0gbnVsbCkge1xuICAgICAgdGhpcy5fX25hdGl2ZVRhZyA9IG5hdGl2ZVRhZztcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX19nZXROYXRpdmVDb25maWcoKTtcbiAgICAgIGlmICh0aGlzLl9wbGF0Zm9ybUNvbmZpZykge1xuICAgICAgICBjb25maWcucGxhdGZvcm1Db25maWcgPSB0aGlzLl9wbGF0Zm9ybUNvbmZpZztcbiAgICAgIH1cbiAgICAgIE5hdGl2ZUFuaW1hdGVkSGVscGVyLkFQSS5jcmVhdGVBbmltYXRlZE5vZGUobmF0aXZlVGFnLCBjb25maWcpO1xuICAgICAgdGhpcy5fX3Nob3VsZFVwZGF0ZUxpc3RlbmVyc0Zvck5ld05hdGl2ZVRhZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdGl2ZVRhZztcbiAgfVxuICBfX2dldE5hdGl2ZUNvbmZpZygpOiBPYmplY3Qge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdUaGlzIEpTIGFuaW1hdGVkIG5vZGUgdHlwZSBjYW5ub3QgYmUgdXNlZCBhcyBuYXRpdmUgYW5pbWF0ZWQgbm9kZScsXG4gICAgKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9fZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIF9fZ2V0UGxhdGZvcm1Db25maWcoKTogP1BsYXRmb3JtQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhdGZvcm1Db25maWc7XG4gIH1cbiAgX19zZXRQbGF0Zm9ybUNvbmZpZyhwbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fcGxhdGZvcm1Db25maWcgPSBwbGF0Zm9ybUNvbmZpZztcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtQ29uZmlnfSBmcm9tICcuLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcblxuaW1wb3J0IEFuaW1hdGVkTm9kZSBmcm9tICcuL0FuaW1hdGVkTm9kZSc7XG5pbXBvcnQgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4gZnJvbSAnLi9BbmltYXRlZFdpdGhDaGlsZHJlbic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IE1BWF9ERVBUSCA9IDU7XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkuaXNQcm90b3R5cGVPZihPYmplY3QpXG4gICk7XG59XG5cbi8vIFJlY3Vyc2UgdGhyb3VnaCB2YWx1ZXMsIGV4ZWN1dGluZyBmbiBmb3IgYW55IEFuaW1hdGVkTm9kZXNcbmZ1bmN0aW9uIHZpc2l0KHZhbHVlOiBhbnksIGZuOiBhbnkgPT4gdm9pZCwgZGVwdGg6IG51bWJlciA9IDApOiB2b2lkIHtcbiAgaWYgKGRlcHRoID49IE1BWF9ERVBUSCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFuaW1hdGVkTm9kZSkge1xuICAgIGZuKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2aXNpdChlbGVtZW50LCBmbiwgZGVwdGggKyAxKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIE9iamVjdC52YWx1ZXModmFsdWUpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2aXNpdChlbGVtZW50LCBmbiwgZGVwdGggKyAxKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGEgY29weSBvZiB2YWx1ZSB3aXRoIGEgdHJhbnNmb3JtYXRpb24gZm4gYXBwbGllZCB0byBhbnkgQW5pbWF0ZWROb2Rlc1xuZnVuY3Rpb24gbWFwQW5pbWF0ZWROb2Rlcyh2YWx1ZTogYW55LCBmbjogYW55ID0+IGFueSwgZGVwdGg6IG51bWJlciA9IDApOiBhbnkge1xuICBpZiAoZGVwdGggPj0gTUFYX0RFUFRIKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoZWxlbWVudCA9PiBtYXBBbmltYXRlZE5vZGVzKGVsZW1lbnQsIGZuLCBkZXB0aCArIDEpKTtcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IHJlc3VsdDoge1tzdHJpbmddOiBhbnl9ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWFwQW5pbWF0ZWROb2Rlcyh2YWx1ZVtrZXldLCBmbiwgZGVwdGggKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0FuaW1hdGVkTm9kZSh2YWx1ZTogYW55LCBkZXB0aDogbnVtYmVyID0gMCk6IGJvb2xlYW4ge1xuICBpZiAoZGVwdGggPj0gTUFYX0RFUFRIKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdmFsdWUpIHtcbiAgICAgIGlmIChoYXNBbmltYXRlZE5vZGUoZWxlbWVudCwgZGVwdGggKyAxKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAvLyBEb24ndCBjb25zaWRlciBSZWFjdCBlbGVtZW50c1xuICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgIGlmIChoYXNBbmltYXRlZE5vZGUodmFsdWVba2V5XSwgZGVwdGggKyAxKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmltYXRlZE9iamVjdCBleHRlbmRzIEFuaW1hdGVkV2l0aENoaWxkcmVuIHtcbiAgX3ZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IGFueSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIF9fZ2V0VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gbWFwQW5pbWF0ZWROb2Rlcyh0aGlzLl92YWx1ZSwgbm9kZSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5fX2dldFZhbHVlKCk7XG4gICAgfSk7XG4gIH1cblxuICBfX2dldEFuaW1hdGVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gbWFwQW5pbWF0ZWROb2Rlcyh0aGlzLl92YWx1ZSwgbm9kZSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5fX2dldEFuaW1hdGVkVmFsdWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9fYXR0YWNoKCk6IHZvaWQge1xuICAgIHN1cGVyLl9fYXR0YWNoKCk7XG4gICAgdmlzaXQodGhpcy5fdmFsdWUsIG5vZGUgPT4ge1xuICAgICAgbm9kZS5fX2FkZENoaWxkKHRoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX19kZXRhY2goKTogdm9pZCB7XG4gICAgdmlzaXQodGhpcy5fdmFsdWUsIG5vZGUgPT4ge1xuICAgICAgbm9kZS5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIH0pO1xuICAgIHN1cGVyLl9fZGV0YWNoKCk7XG4gIH1cblxuICBfX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZyk6IHZvaWQge1xuICAgIHZpc2l0KHRoaXMuX3ZhbHVlLCB2YWx1ZSA9PiB7XG4gICAgICB2YWx1ZS5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIH0pO1xuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2dldE5hdGl2ZUNvbmZpZygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHZhbHVlOiBtYXBBbmltYXRlZE5vZGVzKHRoaXMuX3ZhbHVlLCBub2RlID0+IHtcbiAgICAgICAgcmV0dXJuIHtub2RlVGFnOiBub2RlLl9fZ2V0TmF0aXZlVGFnKCl9O1xuICAgICAgfSksXG4gICAgfTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtQ29uZmlnfSBmcm9tICcuLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcblxuaW1wb3J0IE5hdGl2ZUFuaW1hdGVkSGVscGVyIGZyb20gJy4uL05hdGl2ZUFuaW1hdGVkSGVscGVyJztcbmltcG9ydCBBbmltYXRlZE5vZGUgZnJvbSAnLi9BbmltYXRlZE5vZGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmltYXRlZFdpdGhDaGlsZHJlbiBleHRlbmRzIEFuaW1hdGVkTm9kZSB7XG4gIF9jaGlsZHJlbjogQXJyYXk8QW5pbWF0ZWROb2RlPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG4gIH1cblxuICBfX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZykge1xuICAgIGlmICghdGhpcy5fX2lzTmF0aXZlKSB7XG4gICAgICB0aGlzLl9faXNOYXRpdmUgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLl9jaGlsZHJlbikge1xuICAgICAgICBjaGlsZC5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgICAgICBOYXRpdmVBbmltYXRlZEhlbHBlci5BUEkuY29ubmVjdEFuaW1hdGVkTm9kZXMoXG4gICAgICAgICAgdGhpcy5fX2dldE5hdGl2ZVRhZygpLFxuICAgICAgICAgIGNoaWxkLl9fZ2V0TmF0aXZlVGFnKCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2FkZENoaWxkKGNoaWxkOiBBbmltYXRlZE5vZGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9fYXR0YWNoKCk7XG4gICAgfVxuICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIGlmICh0aGlzLl9faXNOYXRpdmUpIHtcbiAgICAgIC8vIE9ubHkgYWNjZXB0IFwibmF0aXZlXCIgYW5pbWF0ZWQgbm9kZXMgYXMgY2hpbGRyZW5cbiAgICAgIGNoaWxkLl9fbWFrZU5hdGl2ZSh0aGlzLl9fZ2V0UGxhdGZvcm1Db25maWcoKSk7XG4gICAgICBOYXRpdmVBbmltYXRlZEhlbHBlci5BUEkuY29ubmVjdEFuaW1hdGVkTm9kZXMoXG4gICAgICAgIHRoaXMuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgICAgY2hpbGQuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX19yZW1vdmVDaGlsZChjaGlsZDogQW5pbWF0ZWROb2RlKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJUcnlpbmcgdG8gcmVtb3ZlIGEgY2hpbGQgdGhhdCBkb2Vzbid0IGV4aXN0XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fX2lzTmF0aXZlICYmIGNoaWxkLl9faXNOYXRpdmUpIHtcbiAgICAgIE5hdGl2ZUFuaW1hdGVkSGVscGVyLkFQSS5kaXNjb25uZWN0QW5pbWF0ZWROb2RlcyhcbiAgICAgICAgdGhpcy5fX2dldE5hdGl2ZVRhZygpLFxuICAgICAgICBjaGlsZC5fX2dldE5hdGl2ZVRhZygpLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9fZGV0YWNoKCk7XG4gICAgfVxuICB9XG5cbiAgX19nZXRDaGlsZHJlbigpOiAkUmVhZE9ubHlBcnJheTxBbmltYXRlZE5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gIH1cblxuICBfX2NhbGxMaXN0ZW5lcnModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHN1cGVyLl9fY2FsbExpc3RlbmVycyh2YWx1ZSk7XG4gICAgaWYgKCF0aGlzLl9faXNOYXRpdmUpIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5fY2hpbGRyZW4pIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgICAgICBpZiAoY2hpbGQuX19nZXRWYWx1ZSkge1xuICAgICAgICAgIGNoaWxkLl9fY2FsbExpc3RlbmVycyhjaGlsZC5fX2dldFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybUNvbmZpZ30gZnJvbSAnLi4vQW5pbWF0ZWRQbGF0Zm9ybUNvbmZpZyc7XG5cbmltcG9ydCAqIGFzIFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL2ZlYXR1cmVmbGFncy9SZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyc7XG5pbXBvcnQgZmxhdHRlblN0eWxlIGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvZmxhdHRlblN0eWxlJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IE5hdGl2ZUFuaW1hdGVkSGVscGVyIGZyb20gJy4uL05hdGl2ZUFuaW1hdGVkSGVscGVyJztcbmltcG9ydCBBbmltYXRlZE5vZGUgZnJvbSAnLi9BbmltYXRlZE5vZGUnO1xuaW1wb3J0IEFuaW1hdGVkT2JqZWN0LCB7aGFzQW5pbWF0ZWROb2RlfSBmcm9tICcuL0FuaW1hdGVkT2JqZWN0JztcbmltcG9ydCBBbmltYXRlZFRyYW5zZm9ybSBmcm9tICcuL0FuaW1hdGVkVHJhbnNmb3JtJztcbmltcG9ydCBBbmltYXRlZFdpdGhDaGlsZHJlbiBmcm9tICcuL0FuaW1hdGVkV2l0aENoaWxkcmVuJztcblxuZnVuY3Rpb24gY3JlYXRlQW5pbWF0ZWRTdHlsZShcbiAgaW5wdXRTdHlsZTogYW55LFxuICBrZWVwVW5hbmltYXRlZFZhbHVlczogYm9vbGVhbixcbik6IE9iamVjdCB7XG4gIC8vICRGbG93Rml4TWVbdW5kZXJjb25zdHJhaW5lZC1pbXBsaWNpdC1pbnN0YW50aWF0aW9uXVxuICBjb25zdCBzdHlsZSA9IGZsYXR0ZW5TdHlsZShpbnB1dFN0eWxlKTtcbiAgY29uc3QgYW5pbWF0ZWRTdHlsZXM6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZSkge1xuICAgIGNvbnN0IHZhbHVlID0gc3R5bGVba2V5XTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBrZXkgPT09ICd0cmFuc2Zvcm0nKSB7XG4gICAgICBhbmltYXRlZFN0eWxlc1trZXldID1cbiAgICAgICAgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3Muc2hvdWxkVXNlQW5pbWF0ZWRPYmplY3RGb3JUcmFuc2Zvcm0oKVxuICAgICAgICAgID8gbmV3IEFuaW1hdGVkT2JqZWN0KHZhbHVlKVxuICAgICAgICAgIDogbmV3IEFuaW1hdGVkVHJhbnNmb3JtKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICBhbmltYXRlZFN0eWxlc1trZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChoYXNBbmltYXRlZE5vZGUodmFsdWUpKSB7XG4gICAgICBhbmltYXRlZFN0eWxlc1trZXldID0gbmV3IEFuaW1hdGVkT2JqZWN0KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGtlZXBVbmFuaW1hdGVkVmFsdWVzKSB7XG4gICAgICBhbmltYXRlZFN0eWxlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmltYXRlZFN0eWxlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRTdHlsZSBleHRlbmRzIEFuaW1hdGVkV2l0aENoaWxkcmVuIHtcbiAgX2lucHV0U3R5bGU6IGFueTtcbiAgX3N0eWxlOiBPYmplY3Q7XG5cbiAgY29uc3RydWN0b3Ioc3R5bGU6IGFueSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5faW5wdXRTdHlsZSA9IHN0eWxlO1xuICAgIHRoaXMuX3N0eWxlID0gY3JlYXRlQW5pbWF0ZWRTdHlsZShzdHlsZSwgUGxhdGZvcm0uT1MgIT09ICd3ZWInKTtcbiAgfVxuXG4gIF9fZ2V0VmFsdWUoKTogT2JqZWN0IHwgQXJyYXk8T2JqZWN0PiB7XG4gICAgY29uc3QgcmVzdWx0OiB7W3N0cmluZ106IGFueX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9zdHlsZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9zdHlsZVtrZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUuX19nZXRWYWx1ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUGxhdGZvcm0uT1MgPT09ICd3ZWInID8gW3RoaXMuX2lucHV0U3R5bGUsIHJlc3VsdF0gOiByZXN1bHQ7XG4gIH1cblxuICBfX2dldEFuaW1hdGVkVmFsdWUoKTogT2JqZWN0IHtcbiAgICBjb25zdCByZXN1bHQ6IHtbc3RyaW5nXTogYW55fSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3N0eWxlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3N0eWxlW2tleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZS5fX2dldEFuaW1hdGVkVmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9fYXR0YWNoKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3N0eWxlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3N0eWxlW2tleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgdmFsdWUuX19hZGRDaGlsZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfX2RldGFjaCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9zdHlsZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9zdHlsZVtrZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgIHZhbHVlLl9fcmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLl9fZGV0YWNoKCk7XG4gIH1cblxuICBfX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3N0eWxlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3N0eWxlW2tleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgdmFsdWUuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQ29uZmlnKCk6IE9iamVjdCB7XG4gICAgY29uc3Qgc3R5bGVDb25maWc6IHtbc3RyaW5nXTogP251bWJlcn0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHN0eWxlS2V5IGluIHRoaXMuX3N0eWxlKSB7XG4gICAgICBpZiAodGhpcy5fc3R5bGVbc3R5bGVLZXldIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5fc3R5bGVbc3R5bGVLZXldO1xuICAgICAgICBzdHlsZS5fX21ha2VOYXRpdmUodGhpcy5fX2dldFBsYXRmb3JtQ29uZmlnKCkpO1xuICAgICAgICBzdHlsZUNvbmZpZ1tzdHlsZUtleV0gPSBzdHlsZS5fX2dldE5hdGl2ZVRhZygpO1xuICAgICAgfVxuICAgICAgLy8gTm9uLWFuaW1hdGVkIHN0eWxlcyBhcmUgc2V0IHVzaW5nIGBzZXROYXRpdmVQcm9wc2AsIG5vIG5lZWRcbiAgICAgIC8vIHRvIHBhc3MgdGhvc2UgYXMgYSBwYXJ0IG9mIHRoZSBub2RlIGNvbmZpZ1xuICAgIH1cbiAgICBOYXRpdmVBbmltYXRlZEhlbHBlci52YWxpZGF0ZVN0eWxlcyhzdHlsZUNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdzdHlsZScsXG4gICAgICBzdHlsZTogc3R5bGVDb25maWcsXG4gICAgfTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1Db25maWd9IGZyb20gJy4uL0FuaW1hdGVkUGxhdGZvcm1Db25maWcnO1xuXG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRIZWxwZXIgZnJvbSAnLi4vTmF0aXZlQW5pbWF0ZWRIZWxwZXInO1xuaW1wb3J0IEFuaW1hdGVkTm9kZSBmcm9tICcuL0FuaW1hdGVkTm9kZSc7XG5pbXBvcnQgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4gZnJvbSAnLi9BbmltYXRlZFdpdGhDaGlsZHJlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFuaW1hdGVkVHJhbnNmb3JtIGV4dGVuZHMgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4ge1xuICBfdHJhbnNmb3JtczogJFJlYWRPbmx5QXJyYXk8T2JqZWN0PjtcblxuICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm1zOiAkUmVhZE9ubHlBcnJheTxPYmplY3Q+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90cmFuc2Zvcm1zID0gdHJhbnNmb3JtcztcbiAgfVxuXG4gIF9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fdHJhbnNmb3Jtcy5mb3JFYWNoKHRyYW5zZm9ybSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0cmFuc2Zvcm0pIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0cmFuc2Zvcm1ba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgICAgdmFsdWUuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6ICRSZWFkT25seUFycmF5PE9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLl9nZXQoYW5pbWF0ZWROb2RlID0+IGFuaW1hdGVkTm9kZS5fX2dldFZhbHVlKCkpO1xuICB9XG5cbiAgX19nZXRBbmltYXRlZFZhbHVlKCk6ICRSZWFkT25seUFycmF5PE9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLl9nZXQoYW5pbWF0ZWROb2RlID0+IGFuaW1hdGVkTm9kZS5fX2dldEFuaW1hdGVkVmFsdWUoKSk7XG4gIH1cblxuICBfX2F0dGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm1zLmZvckVhY2godHJhbnNmb3JtID0+IHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRyYW5zZm9ybVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgICB2YWx1ZS5fX2FkZENoaWxkKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfX2RldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm1zLmZvckVhY2godHJhbnNmb3JtID0+IHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRyYW5zZm9ybVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgICB2YWx1ZS5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3VwZXIuX19kZXRhY2goKTtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQ29uZmlnKCk6IGFueSB7XG4gICAgY29uc3QgdHJhbnNDb25maWdzOiBBcnJheTxhbnk+ID0gW107XG5cbiAgICB0aGlzLl90cmFuc2Zvcm1zLmZvckVhY2godHJhbnNmb3JtID0+IHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRyYW5zZm9ybVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgICB0cmFuc0NvbmZpZ3MucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYW5pbWF0ZWQnLFxuICAgICAgICAgICAgcHJvcGVydHk6IGtleSxcbiAgICAgICAgICAgIG5vZGVUYWc6IHZhbHVlLl9fZ2V0TmF0aXZlVGFnKCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNDb25maWdzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3N0YXRpYycsXG4gICAgICAgICAgICBwcm9wZXJ0eToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IE5hdGl2ZUFuaW1hdGVkSGVscGVyLnRyYW5zZm9ybURhdGFUeXBlKHZhbHVlKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIudmFsaWRhdGVUcmFuc2Zvcm0odHJhbnNDb25maWdzKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3RyYW5zZm9ybScsXG4gICAgICB0cmFuc2Zvcm1zOiB0cmFuc0NvbmZpZ3MsXG4gICAgfTtcbiAgfVxuXG4gIF9nZXQoZ2V0dGVyOiBBbmltYXRlZE5vZGUgPT4gYW55KTogJFJlYWRPbmx5QXJyYXk8T2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybXMubWFwKHRyYW5zZm9ybSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IHtbc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdHJhbnNmb3JtKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHJhbnNmb3JtW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFuaW1hdGVkTm9kZSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gZ2V0dGVyKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcihlbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgW25lc3RlZEtleSwgbmVzdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKG5lc3RlZFZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWROb2RlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdFtrZXldW25lc3RlZEtleV0gPSBnZXR0ZXIobmVzdGVkVmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0W2tleV1bbmVzdGVkS2V5XSA9IG5lc3RlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybUNvbmZpZ30gZnJvbSAnLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcblxuaW1wb3J0IHtmaW5kTm9kZUhhbmRsZX0gZnJvbSAnLi4vUmVhY3ROYXRpdmUvUmVuZGVyZXJQcm94eSc7XG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRIZWxwZXIgZnJvbSAnLi9OYXRpdmVBbmltYXRlZEhlbHBlcic7XG5pbXBvcnQgQW5pbWF0ZWRWYWx1ZSBmcm9tICcuL25vZGVzL0FuaW1hdGVkVmFsdWUnO1xuaW1wb3J0IEFuaW1hdGVkVmFsdWVYWSBmcm9tICcuL25vZGVzL0FuaW1hdGVkVmFsdWVYWSc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5cbmV4cG9ydCB0eXBlIE1hcHBpbmcgPVxuICB8IHtba2V5OiBzdHJpbmddOiBNYXBwaW5nLCAuLi59XG4gIHwgQW5pbWF0ZWRWYWx1ZVxuICB8IEFuaW1hdGVkVmFsdWVYWTtcbmV4cG9ydCB0eXBlIEV2ZW50Q29uZmlnID0ge1xuICBsaXN0ZW5lcj86ID9GdW5jdGlvbixcbiAgdXNlTmF0aXZlRHJpdmVyOiBib29sZWFuLFxuICBwbGF0Zm9ybUNvbmZpZz86IFBsYXRmb3JtQ29uZmlnLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaE5hdGl2ZUV2ZW50KFxuICB2aWV3UmVmOiBhbnksXG4gIGV2ZW50TmFtZTogc3RyaW5nLFxuICBhcmdNYXBwaW5nOiAkUmVhZE9ubHlBcnJheTw/TWFwcGluZz4sXG4gIHBsYXRmb3JtQ29uZmlnOiA/UGxhdGZvcm1Db25maWcsXG4pOiB7ZGV0YWNoOiAoKSA9PiB2b2lkfSB7XG4gIC8vIEZpbmQgYW5pbWF0ZWQgdmFsdWVzIGluIGBhcmdNYXBwaW5nYCBhbmQgY3JlYXRlIGFuIGFycmF5IHJlcHJlc2VudGluZyB0aGVpclxuICAvLyBrZXkgcGF0aCBpbnNpZGUgdGhlIGBuYXRpdmVFdmVudGAgb2JqZWN0LiBFeC46IFsnY29udGVudE9mZnNldCcsICd4J10uXG4gIGNvbnN0IGV2ZW50TWFwcGluZ3MgPSBbXTtcblxuICBjb25zdCB0cmF2ZXJzZSA9ICh2YWx1ZTogbWl4ZWQsIHBhdGg6IEFycmF5PHN0cmluZz4pID0+IHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbmltYXRlZFZhbHVlKSB7XG4gICAgICB2YWx1ZS5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuXG4gICAgICBldmVudE1hcHBpbmdzLnB1c2goe1xuICAgICAgICBuYXRpdmVFdmVudFBhdGg6IHBhdGgsXG4gICAgICAgIGFuaW1hdGVkVmFsdWVUYWc6IHZhbHVlLl9fZ2V0TmF0aXZlVGFnKCksXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWRWYWx1ZVhZKSB7XG4gICAgICB0cmF2ZXJzZSh2YWx1ZS54LCBwYXRoLmNvbmNhdCgneCcpKTtcbiAgICAgIHRyYXZlcnNlKHZhbHVlLnksIHBhdGguY29uY2F0KCd5JykpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdHJhdmVyc2UodmFsdWVba2V5XSwgcGF0aC5jb25jYXQoa2V5KSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGludmFyaWFudChcbiAgICBhcmdNYXBwaW5nWzBdICYmIGFyZ01hcHBpbmdbMF0ubmF0aXZlRXZlbnQsXG4gICAgJ05hdGl2ZSBkcml2ZW4gZXZlbnRzIG9ubHkgc3VwcG9ydCBhbmltYXRlZCB2YWx1ZXMgY29udGFpbmVkIGluc2lkZSBgbmF0aXZlRXZlbnRgLicsXG4gICk7XG5cbiAgLy8gQXNzdW1lIHRoYXQgdGhlIGV2ZW50IGNvbnRhaW5pbmcgYG5hdGl2ZUV2ZW50YCBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICB0cmF2ZXJzZShhcmdNYXBwaW5nWzBdLm5hdGl2ZUV2ZW50LCBbXSk7XG5cbiAgY29uc3Qgdmlld1RhZyA9IGZpbmROb2RlSGFuZGxlKHZpZXdSZWYpO1xuICBpZiAodmlld1RhZyAhPSBudWxsKSB7XG4gICAgZXZlbnRNYXBwaW5ncy5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJLmFkZEFuaW1hdGVkRXZlbnRUb1ZpZXcoXG4gICAgICAgIHZpZXdUYWcsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgbWFwcGluZyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRldGFjaCgpIHtcbiAgICAgIGlmICh2aWV3VGFnICE9IG51bGwpIHtcbiAgICAgICAgZXZlbnRNYXBwaW5ncy5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgICAgIE5hdGl2ZUFuaW1hdGVkSGVscGVyLkFQSS5yZW1vdmVBbmltYXRlZEV2ZW50RnJvbVZpZXcoXG4gICAgICAgICAgICB2aWV3VGFnLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgICAgICAgIG1hcHBpbmcuYW5pbWF0ZWRWYWx1ZVRhZyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU1hcHBpbmcoYXJnTWFwcGluZzogJFJlYWRPbmx5QXJyYXk8P01hcHBpbmc+LCBhcmdzOiBhbnkpIHtcbiAgY29uc3QgdmFsaWRhdGUgPSAocmVjTWFwcGluZzogP01hcHBpbmcsIHJlY0V2dDogYW55LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGlmIChyZWNNYXBwaW5nIGluc3RhbmNlb2YgQW5pbWF0ZWRWYWx1ZSkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICB0eXBlb2YgcmVjRXZ0ID09PSAnbnVtYmVyJyxcbiAgICAgICAgJ0JhZCBtYXBwaW5nIG9mIGV2ZW50IGtleSAnICtcbiAgICAgICAgICBrZXkgK1xuICAgICAgICAgICcsIHNob3VsZCBiZSBudW1iZXIgYnV0IGdvdCAnICtcbiAgICAgICAgICB0eXBlb2YgcmVjRXZ0LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlY01hcHBpbmcgaW5zdGFuY2VvZiBBbmltYXRlZFZhbHVlWFkpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdHlwZW9mIHJlY0V2dC54ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgcmVjRXZ0LnkgPT09ICdudW1iZXInLFxuICAgICAgICAnQmFkIG1hcHBpbmcgb2YgZXZlbnQga2V5ICcgKyBrZXkgKyAnLCBzaG91bGQgYmUgWFkgYnV0IGdvdCAnICsgcmVjRXZ0LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZWNFdnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHJlY01hcHBpbmcgaW5zdGFuY2VvZiBBbmltYXRlZFZhbHVlLFxuICAgICAgICAnQmFkIG1hcHBpbmcgb2YgdHlwZSAnICtcbiAgICAgICAgICB0eXBlb2YgcmVjTWFwcGluZyArXG4gICAgICAgICAgJyBmb3Iga2V5ICcgK1xuICAgICAgICAgIGtleSArXG4gICAgICAgICAgJywgZXZlbnQgdmFsdWUgbXVzdCBtYXAgdG8gQW5pbWF0ZWRWYWx1ZScsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgcmVjTWFwcGluZyA9PT0gJ29iamVjdCcsXG4gICAgICAnQmFkIG1hcHBpbmcgb2YgdHlwZSAnICsgdHlwZW9mIHJlY01hcHBpbmcgKyAnIGZvciBrZXkgJyArIGtleSxcbiAgICApO1xuICAgIGludmFyaWFudChcbiAgICAgIHR5cGVvZiByZWNFdnQgPT09ICdvYmplY3QnLFxuICAgICAgJ0JhZCBldmVudCBvZiB0eXBlICcgKyB0eXBlb2YgcmVjRXZ0ICsgJyBmb3Iga2V5ICcgKyBrZXksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IG1hcHBpbmdLZXkgaW4gcmVjTWFwcGluZykge1xuICAgICAgdmFsaWRhdGUocmVjTWFwcGluZ1ttYXBwaW5nS2V5XSwgcmVjRXZ0W21hcHBpbmdLZXldLCBtYXBwaW5nS2V5KTtcbiAgICB9XG4gIH07XG5cbiAgaW52YXJpYW50KFxuICAgIGFyZ3MubGVuZ3RoID49IGFyZ01hcHBpbmcubGVuZ3RoLFxuICAgICdFdmVudCBoYXMgbGVzcyBhcmd1bWVudHMgdGhhbiBtYXBwaW5nJyxcbiAgKTtcbiAgYXJnTWFwcGluZy5mb3JFYWNoKChtYXBwaW5nLCBpZHgpID0+IHtcbiAgICB2YWxpZGF0ZShtYXBwaW5nLCBhcmdzW2lkeF0sICdhcmcnICsgaWR4KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRlZEV2ZW50IHtcbiAgX2FyZ01hcHBpbmc6ICRSZWFkT25seUFycmF5PD9NYXBwaW5nPjtcbiAgX2xpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gIF9hdHRhY2hlZEV2ZW50OiA/e2RldGFjaDogKCkgPT4gdm9pZCwgLi4ufTtcbiAgX19pc05hdGl2ZTogYm9vbGVhbjtcbiAgX19wbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGFyZ01hcHBpbmc6ICRSZWFkT25seUFycmF5PD9NYXBwaW5nPiwgY29uZmlnOiBFdmVudENvbmZpZykge1xuICAgIHRoaXMuX2FyZ01hcHBpbmcgPSBhcmdNYXBwaW5nO1xuXG4gICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0FuaW1hdGVkLmV2ZW50IG5vdyByZXF1aXJlcyBhIHNlY29uZCBhcmd1bWVudCBmb3Igb3B0aW9ucycpO1xuICAgICAgY29uZmlnID0ge3VzZU5hdGl2ZURyaXZlcjogZmFsc2V9O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuX19hZGRMaXN0ZW5lcihjb25maWcubGlzdGVuZXIpO1xuICAgIH1cbiAgICB0aGlzLl9hdHRhY2hlZEV2ZW50ID0gbnVsbDtcbiAgICB0aGlzLl9faXNOYXRpdmUgPSBOYXRpdmVBbmltYXRlZEhlbHBlci5zaG91bGRVc2VOYXRpdmVEcml2ZXIoY29uZmlnKTtcbiAgICB0aGlzLl9fcGxhdGZvcm1Db25maWcgPSBjb25maWcucGxhdGZvcm1Db25maWc7XG4gIH1cblxuICBfX2FkZExpc3RlbmVyKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIF9fcmVtb3ZlTGlzdGVuZXIoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lciAhPT0gY2FsbGJhY2spO1xuICB9XG5cbiAgX19hdHRhY2godmlld1JlZjogYW55LCBldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIHRoaXMuX19pc05hdGl2ZSxcbiAgICAgICdPbmx5IG5hdGl2ZSBkcml2ZW4gZXZlbnRzIG5lZWQgdG8gYmUgYXR0YWNoZWQuJyxcbiAgICApO1xuXG4gICAgdGhpcy5fYXR0YWNoZWRFdmVudCA9IGF0dGFjaE5hdGl2ZUV2ZW50KFxuICAgICAgdmlld1JlZixcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHRoaXMuX2FyZ01hcHBpbmcsXG4gICAgICB0aGlzLl9fcGxhdGZvcm1Db25maWcsXG4gICAgKTtcbiAgfVxuXG4gIF9fZGV0YWNoKHZpZXdUYWc6IGFueSwgZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0aGlzLl9faXNOYXRpdmUsXG4gICAgICAnT25seSBuYXRpdmUgZHJpdmVuIGV2ZW50cyBuZWVkIHRvIGJlIGRldGFjaGVkLicsXG4gICAgKTtcblxuICAgIHRoaXMuX2F0dGFjaGVkRXZlbnQgJiYgdGhpcy5fYXR0YWNoZWRFdmVudC5kZXRhY2goKTtcbiAgfVxuXG4gIF9fZ2V0SGFuZGxlcigpOiBhbnkgfCAoKC4uLmFyZ3M6IGFueSkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLl9faXNOYXRpdmUpIHtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIGxldCB2YWxpZGF0ZWRNYXBwaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiAoLi4uYXJnczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZWRNYXBwaW5nKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZU1hcHBpbmcodGhpcy5fYXJnTWFwcGluZywgYXJncyk7XG4gICAgICAgICAgICB2YWxpZGF0ZWRNYXBwaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY2FsbExpc3RlbmVycyguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxsTGlzdGVuZXJzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB2YWxpZGF0ZWRNYXBwaW5nID0gZmFsc2U7XG4gICAgcmV0dXJuICguLi5hcmdzOiBhbnkpID0+IHtcbiAgICAgIGlmIChfX0RFVl9fICYmICF2YWxpZGF0ZWRNYXBwaW5nKSB7XG4gICAgICAgIHZhbGlkYXRlTWFwcGluZyh0aGlzLl9hcmdNYXBwaW5nLCBhcmdzKTtcbiAgICAgICAgdmFsaWRhdGVkTWFwcGluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYXZlcnNlID0gKFxuICAgICAgICByZWNNYXBwaW5nOiA/KE1hcHBpbmcgfCBBbmltYXRlZFZhbHVlKSxcbiAgICAgICAgcmVjRXZ0OiBhbnksXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKHJlY01hcHBpbmcgaW5zdGFuY2VvZiBBbmltYXRlZFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZWNFdnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZWNNYXBwaW5nLnNldFZhbHVlKHJlY0V2dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlY01hcHBpbmcgaW5zdGFuY2VvZiBBbmltYXRlZFZhbHVlWFkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlY0V2dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRyYXZlcnNlKHJlY01hcHBpbmcueCwgcmVjRXZ0LngpO1xuICAgICAgICAgICAgdHJhdmVyc2UocmVjTWFwcGluZy55LCByZWNFdnQueSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWNNYXBwaW5nID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZvciAoY29uc3QgbWFwcGluZ0tleSBpbiByZWNNYXBwaW5nKSB7XG4gICAgICAgICAgICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gKD49MC4xMjAuMCkgVGhpcyBjb21tZW50IHN1cHByZXNzZXMgYW5cbiAgICAgICAgICAgICAqIGVycm9yIGZvdW5kIHdoZW4gRmxvdyB2MC4xMjAgd2FzIGRlcGxveWVkLiBUbyBzZWUgdGhlIGVycm9yLFxuICAgICAgICAgICAgICogZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuICovXG4gICAgICAgICAgICB0cmF2ZXJzZShyZWNNYXBwaW5nW21hcHBpbmdLZXldLCByZWNFdnRbbWFwcGluZ0tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuX2FyZ01hcHBpbmcuZm9yRWFjaCgobWFwcGluZywgaWR4KSA9PiB7XG4gICAgICAgIHRyYXZlcnNlKG1hcHBpbmcsIGFyZ3NbaWR4XSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fY2FsbExpc3RlbmVycyguLi5hcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgX2NhbGxMaXN0ZW5lcnMgPSAoLi4uYXJnczogYW55KSA9PiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoLi4uYXJncykpO1xuICB9O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSBBbmltYXRpb24sIHtFbmRDYWxsYmFja30gZnJvbSAnLi4vYW5pbWF0aW9ucy9BbmltYXRpb24nO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25Db25maWdUeXBlfSBmcm9tICcuL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5pbXBvcnQgdHlwZSBBbmltYXRlZE5vZGUgZnJvbSAnLi9BbmltYXRlZE5vZGUnO1xuaW1wb3J0IHR5cGUgQW5pbWF0ZWRUcmFja2luZyBmcm9tICcuL0FuaW1hdGVkVHJhY2tpbmcnO1xuXG5pbXBvcnQgSW50ZXJhY3Rpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0ludGVyYWN0aW9uL0ludGVyYWN0aW9uTWFuYWdlcic7XG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRIZWxwZXIgZnJvbSAnLi4vTmF0aXZlQW5pbWF0ZWRIZWxwZXInO1xuaW1wb3J0IEFuaW1hdGVkSW50ZXJwb2xhdGlvbiBmcm9tICcuL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5pbXBvcnQgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4gZnJvbSAnLi9BbmltYXRlZFdpdGhDaGlsZHJlbic7XG5cbmV4cG9ydCB0eXBlIEFuaW1hdGVkVmFsdWVDb25maWcgPSAkUmVhZE9ubHk8e1xuICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG59PjtcblxuY29uc3QgTmF0aXZlQW5pbWF0ZWRBUEkgPSBOYXRpdmVBbmltYXRlZEhlbHBlci5BUEk7XG5cbi8qKlxuICogQW5pbWF0ZWQgd29ya3MgYnkgYnVpbGRpbmcgYSBkaXJlY3RlZCBhY3ljbGljIGdyYXBoIG9mIGRlcGVuZGVuY2llc1xuICogdHJhbnNwYXJlbnRseSB3aGVuIHlvdSByZW5kZXIgeW91ciBBbmltYXRlZCBjb21wb25lbnRzLlxuICpcbiAqICAgICAgICAgICAgICAgbmV3IEFuaW1hdGVkLlZhbHVlKDApXG4gKiAgICAgLmludGVycG9sYXRlKCkgICAgICAgIC5pbnRlcnBvbGF0ZSgpICAgIG5ldyBBbmltYXRlZC5WYWx1ZSgxKVxuICogICAgICAgICBvcGFjaXR5ICAgICAgICAgICAgICAgdHJhbnNsYXRlWSAgICAgIHNjYWxlXG4gKiAgICAgICAgICBzdHlsZSAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1cbiAqICAgICAgICAgVmlldyMyMzQgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IzEyM1xuICpcbiAqIEEpIFRvcCBEb3duIHBoYXNlXG4gKiBXaGVuIGFuIEFuaW1hdGVkLlZhbHVlIGlzIHVwZGF0ZWQsIHdlIHJlY3Vyc2l2ZWx5IGdvIGRvd24gdGhyb3VnaCB0aGlzXG4gKiBncmFwaCBpbiBvcmRlciB0byBmaW5kIGxlYWYgbm9kZXM6IHRoZSB2aWV3cyB0aGF0IHdlIGZsYWcgYXMgbmVlZGluZ1xuICogYW4gdXBkYXRlLlxuICpcbiAqIEIpIEJvdHRvbSBVcCBwaGFzZVxuICogV2hlbiBhIHZpZXcgaXMgZmxhZ2dlZCBhcyBuZWVkaW5nIGFuIHVwZGF0ZSwgd2UgcmVjdXJzaXZlbHkgZ28gYmFjayB1cFxuICogaW4gb3JkZXIgdG8gYnVpbGQgdGhlIG5ldyB2YWx1ZSB0aGF0IGl0IG5lZWRzLiBUaGUgcmVhc29uIHdoeSB3ZSBuZWVkXG4gKiB0aGlzIHR3by1waGFzZXMgcHJvY2VzcyBpcyB0byBkZWFsIHdpdGggY29tcG9zaXRlIHByb3BzIHN1Y2ggYXNcbiAqIHRyYW5zZm9ybSB3aGljaCBjYW4gcmVjZWl2ZSB2YWx1ZXMgZnJvbSBtdWx0aXBsZSBwYXJlbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmx1c2hWYWx1ZShyb290Tm9kZTogQW5pbWF0ZWROb2RlKTogdm9pZCB7XG4gIGNvbnN0IGxlYXZlcyA9IG5ldyBTZXQ8e3VwZGF0ZTogKCkgPT4gdm9pZCwgLi4ufT4oKTtcbiAgZnVuY3Rpb24gZmluZEFuaW1hdGVkU3R5bGVzKG5vZGU6IEFuaW1hdGVkTm9kZSkge1xuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGlmICh0eXBlb2Ygbm9kZS51cGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxlYXZlcy5hZGQoKG5vZGU6IGFueSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLl9fZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKGZpbmRBbmltYXRlZFN0eWxlcyk7XG4gICAgfVxuICB9XG4gIGZpbmRBbmltYXRlZFN0eWxlcyhyb290Tm9kZSk7XG4gIGxlYXZlcy5mb3JFYWNoKGxlYWYgPT4gbGVhZi51cGRhdGUoKSk7XG59XG5cbi8qKlxuICogU29tZSBvcGVyYXRpb25zIGFyZSBleGVjdXRlZCBvbmx5IG9uIGJhdGNoIGVuZCwgd2hpY2ggaXMgX21vc3RseV8gc2NoZWR1bGVkIHdoZW5cbiAqIEFuaW1hdGVkIGNvbXBvbmVudCBwcm9wcyBjaGFuZ2UuIEZvciBzb21lIG9mIHRoZSBjaGFuZ2VzIHdoaWNoIHJlcXVpcmUgaW1tZWRpYXRlIGV4ZWN1dGlvblxuICogKGUuZy4gc2V0VmFsdWUpLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBiYXRjaCBpbiBjYXNlIG5vbmUgaXMgc2NoZWR1bGVkLlxuICovXG5mdW5jdGlvbiBfZXhlY3V0ZUFzQW5pbWF0ZWRCYXRjaChpZDogc3RyaW5nLCBvcGVyYXRpb246ICgpID0+IHZvaWQpIHtcbiAgTmF0aXZlQW5pbWF0ZWRBUEkuc2V0V2FpdGluZ0ZvcklkZW50aWZpZXIoaWQpO1xuICBvcGVyYXRpb24oKTtcbiAgTmF0aXZlQW5pbWF0ZWRBUEkudW5zZXRXYWl0aW5nRm9ySWRlbnRpZmllcihpZCk7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgdmFsdWUgZm9yIGRyaXZpbmcgYW5pbWF0aW9ucy4gIE9uZSBgQW5pbWF0ZWQuVmFsdWVgIGNhbiBkcml2ZVxuICogbXVsdGlwbGUgcHJvcGVydGllcyBpbiBhIHN5bmNocm9uaXplZCBmYXNoaW9uLCBidXQgY2FuIG9ubHkgYmUgZHJpdmVuIGJ5IG9uZVxuICogbWVjaGFuaXNtIGF0IGEgdGltZS4gIFVzaW5nIGEgbmV3IG1lY2hhbmlzbSAoZS5nLiBzdGFydGluZyBhIG5ldyBhbmltYXRpb24sXG4gKiBvciBjYWxsaW5nIGBzZXRWYWx1ZWApIHdpbGwgc3RvcCBhbnkgcHJldmlvdXMgb25lcy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFuaW1hdGVkVmFsdWUgZXh0ZW5kcyBBbmltYXRlZFdpdGhDaGlsZHJlbiB7XG4gIF92YWx1ZTogbnVtYmVyO1xuICBfc3RhcnRpbmdWYWx1ZTogbnVtYmVyO1xuICBfb2Zmc2V0OiBudW1iZXI7XG4gIF9hbmltYXRpb246ID9BbmltYXRpb247XG4gIF90cmFja2luZzogP0FuaW1hdGVkVHJhY2tpbmc7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgY29uZmlnPzogP0FuaW1hdGVkVmFsdWVDb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuaW1hdGVkVmFsdWU6IEF0dGVtcHRpbmcgdG8gc2V0IHZhbHVlIHRvIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB0aGlzLl9zdGFydGluZ1ZhbHVlID0gdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICAgIHRoaXMuX2FuaW1hdGlvbiA9IG51bGw7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcudXNlTmF0aXZlRHJpdmVyKSB7XG4gICAgICB0aGlzLl9fbWFrZU5hdGl2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9fZGV0YWNoKCkge1xuICAgIGlmICh0aGlzLl9faXNOYXRpdmUpIHtcbiAgICAgIE5hdGl2ZUFuaW1hdGVkQVBJLmdldFZhbHVlKHRoaXMuX19nZXROYXRpdmVUYWcoKSwgdmFsdWUgPT4ge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlIC0gdGhpcy5fb2Zmc2V0O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgIHN1cGVyLl9fZGV0YWNoKCk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlICsgdGhpcy5fb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIERpcmVjdGx5IHNldCB0aGUgdmFsdWUuICBUaGlzIHdpbGwgc3RvcCBhbnkgYW5pbWF0aW9ucyBydW5uaW5nIG9uIHRoZSB2YWx1ZVxuICAgKiBhbmQgdXBkYXRlIGFsbCB0aGUgYm91bmQgcHJvcGVydGllcy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWR2YWx1ZSNzZXR2YWx1ZVxuICAgKi9cbiAgc2V0VmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9hbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX2FuaW1hdGlvbi5zdG9wKCk7XG4gICAgICB0aGlzLl9hbmltYXRpb24gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGVWYWx1ZShcbiAgICAgIHZhbHVlLFxuICAgICAgIXRoaXMuX19pc05hdGl2ZSAvKiBkb24ndCBwZXJmb3JtIGEgZmx1c2ggZm9yIG5hdGl2ZWx5IGRyaXZlbiB2YWx1ZXMgKi8sXG4gICAgKTtcbiAgICBpZiAodGhpcy5fX2lzTmF0aXZlKSB7XG4gICAgICBfZXhlY3V0ZUFzQW5pbWF0ZWRCYXRjaCh0aGlzLl9fZ2V0TmF0aXZlVGFnKCkudG9TdHJpbmcoKSwgKCkgPT5cbiAgICAgICAgTmF0aXZlQW5pbWF0ZWRBUEkuc2V0QW5pbWF0ZWROb2RlVmFsdWUodGhpcy5fX2dldE5hdGl2ZVRhZygpLCB2YWx1ZSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIG9mZnNldCB0aGF0IGlzIGFwcGxpZWQgb24gdG9wIG9mIHdoYXRldmVyIHZhbHVlIGlzIHNldCwgd2hldGhlciB2aWFcbiAgICogYHNldFZhbHVlYCwgYW4gYW5pbWF0aW9uLCBvciBgQW5pbWF0ZWQuZXZlbnRgLiAgVXNlZnVsIGZvciBjb21wZW5zYXRpbmdcbiAgICogdGhpbmdzIGxpa2UgdGhlIHN0YXJ0IG9mIGEgcGFuIGdlc3R1cmUuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkdmFsdWUjc2V0b2Zmc2V0XG4gICAqL1xuICBzZXRPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG4gICAgaWYgKHRoaXMuX19pc05hdGl2ZSkge1xuICAgICAgTmF0aXZlQW5pbWF0ZWRBUEkuc2V0QW5pbWF0ZWROb2RlT2Zmc2V0KHRoaXMuX19nZXROYXRpdmVUYWcoKSwgb2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHRoZSBvZmZzZXQgdmFsdWUgaW50byB0aGUgYmFzZSB2YWx1ZSBhbmQgcmVzZXRzIHRoZSBvZmZzZXQgdG8gemVyby5cbiAgICogVGhlIGZpbmFsIG91dHB1dCBvZiB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVlI2ZsYXR0ZW5vZmZzZXRcbiAgICovXG4gIGZsYXR0ZW5PZmZzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgKz0gdGhpcy5fb2Zmc2V0O1xuICAgIHRoaXMuX29mZnNldCA9IDA7XG4gICAgaWYgKHRoaXMuX19pc05hdGl2ZSkge1xuICAgICAgTmF0aXZlQW5pbWF0ZWRBUEkuZmxhdHRlbkFuaW1hdGVkTm9kZU9mZnNldCh0aGlzLl9fZ2V0TmF0aXZlVGFnKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvZmZzZXQgdmFsdWUgdG8gdGhlIGJhc2UgdmFsdWUsIGFuZCByZXNldHMgdGhlIGJhc2UgdmFsdWUgdG8gemVyby5cbiAgICogVGhlIGZpbmFsIG91dHB1dCBvZiB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVlI2V4dHJhY3RvZmZzZXRcbiAgICovXG4gIGV4dHJhY3RPZmZzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fb2Zmc2V0ICs9IHRoaXMuX3ZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gMDtcbiAgICBpZiAodGhpcy5fX2lzTmF0aXZlKSB7XG4gICAgICBOYXRpdmVBbmltYXRlZEFQSS5leHRyYWN0QW5pbWF0ZWROb2RlT2Zmc2V0KHRoaXMuX19nZXROYXRpdmVUYWcoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIGFueSBydW5uaW5nIGFuaW1hdGlvbiBvciB0cmFja2luZy4gYGNhbGxiYWNrYCBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAqIGZpbmFsIHZhbHVlIGFmdGVyIHN0b3BwaW5nIHRoZSBhbmltYXRpb24sIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdXBkYXRpbmdcbiAgICogc3RhdGUgdG8gbWF0Y2ggdGhlIGFuaW1hdGlvbiBwb3NpdGlvbiB3aXRoIGxheW91dC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWR2YWx1ZSNzdG9wYW5pbWF0aW9uXG4gICAqL1xuICBzdG9wQW5pbWF0aW9uKGNhbGxiYWNrPzogPyh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wVHJhY2tpbmcoKTtcbiAgICB0aGlzLl9hbmltYXRpb24gJiYgdGhpcy5fYW5pbWF0aW9uLnN0b3AoKTtcbiAgICB0aGlzLl9hbmltYXRpb24gPSBudWxsO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgaWYgKHRoaXMuX19pc05hdGl2ZSkge1xuICAgICAgICBOYXRpdmVBbmltYXRlZEFQSS5nZXRWYWx1ZSh0aGlzLl9fZ2V0TmF0aXZlVGFnKCksIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMuX19nZXRWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgYW55IGFuaW1hdGlvbiBhbmQgcmVzZXRzIHRoZSB2YWx1ZSB0byBpdHMgb3JpZ2luYWwuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkdmFsdWUjcmVzZXRhbmltYXRpb25cbiAgICovXG4gIHJlc2V0QW5pbWF0aW9uKGNhbGxiYWNrPzogPyh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wQW5pbWF0aW9uKGNhbGxiYWNrKTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX3N0YXJ0aW5nVmFsdWU7XG4gICAgaWYgKHRoaXMuX19pc05hdGl2ZSkge1xuICAgICAgTmF0aXZlQW5pbWF0ZWRBUEkuc2V0QW5pbWF0ZWROb2RlVmFsdWUoXG4gICAgICAgIHRoaXMuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgICAgdGhpcy5fc3RhcnRpbmdWYWx1ZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX19vbkFuaW1hdGVkVmFsdWVVcGRhdGVSZWNlaXZlZCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlVmFsdWUodmFsdWUsIGZhbHNlIC8qZmx1c2gqLyk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJwb2xhdGVzIHRoZSB2YWx1ZSBiZWZvcmUgdXBkYXRpbmcgdGhlIHByb3BlcnR5LCBlLmcuIG1hcHBpbmcgMC0xIHRvXG4gICAqIDAtMTAuXG4gICAqL1xuICBpbnRlcnBvbGF0ZTxPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+KFxuICAgIGNvbmZpZzogSW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGU8T3V0cHV0VD4sXG4gICk6IEFuaW1hdGVkSW50ZXJwb2xhdGlvbjxPdXRwdXRUPiB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRlZEludGVycG9sYXRpb24odGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBpY2FsbHkgb25seSB1c2VkIGludGVybmFsbHksIGJ1dCBjb3VsZCBiZSB1c2VkIGJ5IGEgY3VzdG9tIEFuaW1hdGlvblxuICAgKiBjbGFzcy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWR2YWx1ZSNhbmltYXRlXG4gICAqL1xuICBhbmltYXRlKGFuaW1hdGlvbjogQW5pbWF0aW9uLCBjYWxsYmFjazogP0VuZENhbGxiYWNrKTogdm9pZCB7XG4gICAgbGV0IGhhbmRsZSA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbi5fX2lzSW50ZXJhY3Rpb24pIHtcbiAgICAgIGhhbmRsZSA9IEludGVyYWN0aW9uTWFuYWdlci5jcmVhdGVJbnRlcmFjdGlvbkhhbmRsZSgpO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91c0FuaW1hdGlvbiA9IHRoaXMuX2FuaW1hdGlvbjtcbiAgICB0aGlzLl9hbmltYXRpb24gJiYgdGhpcy5fYW5pbWF0aW9uLnN0b3AoKTtcbiAgICB0aGlzLl9hbmltYXRpb24gPSBhbmltYXRpb247XG4gICAgYW5pbWF0aW9uLnN0YXJ0KFxuICAgICAgdGhpcy5fdmFsdWUsXG4gICAgICB2YWx1ZSA9PiB7XG4gICAgICAgIC8vIE5hdGl2ZWx5IGRyaXZlbiBhbmltYXRpb25zIHdpbGwgbmV2ZXIgY2FsbCBpbnRvIHRoYXQgY2FsbGJhY2ssIHRoZXJlZm9yZSB3ZSBjYW4gYWx3YXlzXG4gICAgICAgIC8vIHBhc3MgZmx1c2ggPSB0cnVlIHRvIGFsbG93IHRoZSB1cGRhdGVkIHZhbHVlIHRvIHByb3BhZ2F0ZSB0byBuYXRpdmUgd2l0aCBzZXROYXRpdmVQcm9wc1xuICAgICAgICB0aGlzLl91cGRhdGVWYWx1ZSh2YWx1ZSwgdHJ1ZSAvKiBmbHVzaCAqLyk7XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKGhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIEludGVyYWN0aW9uTWFuYWdlci5jbGVhckludGVyYWN0aW9uSGFuZGxlKGhhbmRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzdWx0KTtcbiAgICAgIH0sXG4gICAgICBwcmV2aW91c0FuaW1hdGlvbixcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBpY2FsbHkgb25seSB1c2VkIGludGVybmFsbHkuXG4gICAqL1xuICBzdG9wVHJhY2tpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhY2tpbmcgJiYgdGhpcy5fdHJhY2tpbmcuX19kZXRhY2goKTtcbiAgICB0aGlzLl90cmFja2luZyA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVHlwaWNhbGx5IG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICAgKi9cbiAgdHJhY2sodHJhY2tpbmc6IEFuaW1hdGVkVHJhY2tpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BUcmFja2luZygpO1xuICAgIHRoaXMuX3RyYWNraW5nID0gdHJhY2tpbmc7XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRyYWNraW5nIGFuaW1hdGlvbiBzdGFydHMgZXhlY3V0aW5nXG4gICAgdGhpcy5fdHJhY2tpbmcgJiYgdGhpcy5fdHJhY2tpbmcudXBkYXRlKCk7XG4gIH1cblxuICBfdXBkYXRlVmFsdWUodmFsdWU6IG51bWJlciwgZmx1c2g6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbmltYXRlZFZhbHVlOiBBdHRlbXB0aW5nIHRvIHNldCB2YWx1ZSB0byB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIGlmIChmbHVzaCkge1xuICAgICAgZmx1c2hWYWx1ZSh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5fX2NhbGxMaXN0ZW5lcnModGhpcy5fX2dldFZhbHVlKCkpO1xuICB9XG5cbiAgX19nZXROYXRpdmVDb25maWcoKTogT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiB0aGlzLl92YWx1ZSxcbiAgICAgIG9mZnNldDogdGhpcy5fb2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VGFza30gZnJvbSAnLi9UYXNrUXVldWUnO1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbmNvbnN0IEJhdGNoZWRCcmlkZ2UgPSByZXF1aXJlKCcuLi9CYXRjaGVkQnJpZGdlL0JhdGNoZWRCcmlkZ2UnKTtcbmNvbnN0IGluZm9Mb2cgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvaW5mb0xvZycpO1xuY29uc3QgVGFza1F1ZXVlID0gcmVxdWlyZSgnLi9UYXNrUXVldWUnKTtcbmNvbnN0IGludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG5leHBvcnQgdHlwZSBIYW5kbGUgPSBudW1iZXI7XG5cbmNvbnN0IF9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gIGludGVyYWN0aW9uQ29tcGxldGU6IFtdLFxuICBpbnRlcmFjdGlvblN0YXJ0OiBbXSxcbn0+KCk7XG5cbmNvbnN0IERFQlVHX0RFTEFZOiAwID0gMDtcbmNvbnN0IERFQlVHOiBmYWxzZSA9IGZhbHNlO1xuXG4vKipcbiAqIEludGVyYWN0aW9uTWFuYWdlciBhbGxvd3MgbG9uZy1ydW5uaW5nIHdvcmsgdG8gYmUgc2NoZWR1bGVkIGFmdGVyIGFueVxuICogaW50ZXJhY3Rpb25zL2FuaW1hdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxsb3dzIEphdmFTY3JpcHRcbiAqIGFuaW1hdGlvbnMgdG8gcnVuIHNtb290aGx5LlxuICpcbiAqIEFwcGxpY2F0aW9ucyBjYW4gc2NoZWR1bGUgdGFza3MgdG8gcnVuIGFmdGVyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogYGBgXG4gKiBJbnRlcmFjdGlvbk1hbmFnZXIucnVuQWZ0ZXJJbnRlcmFjdGlvbnMoKCkgPT4ge1xuICogICAvLyAuLi5sb25nLXJ1bm5pbmcgc3luY2hyb25vdXMgdGFzay4uLlxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBDb21wYXJlIHRoaXMgdG8gb3RoZXIgc2NoZWR1bGluZyBhbHRlcm5hdGl2ZXM6XG4gKlxuICogLSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTogZm9yIGNvZGUgdGhhdCBhbmltYXRlcyBhIHZpZXcgb3ZlciB0aW1lLlxuICogLSBzZXRJbW1lZGlhdGUvc2V0VGltZW91dCgpOiBydW4gY29kZSBsYXRlciwgbm90ZSB0aGlzIG1heSBkZWxheSBhbmltYXRpb25zLlxuICogLSBydW5BZnRlckludGVyYWN0aW9ucygpOiBydW4gY29kZSBsYXRlciwgd2l0aG91dCBkZWxheWluZyBhY3RpdmUgYW5pbWF0aW9ucy5cbiAqXG4gKiBUaGUgdG91Y2ggaGFuZGxpbmcgc3lzdGVtIGNvbnNpZGVycyBvbmUgb3IgbW9yZSBhY3RpdmUgdG91Y2hlcyB0byBiZSBhblxuICogJ2ludGVyYWN0aW9uJyBhbmQgd2lsbCBkZWxheSBgcnVuQWZ0ZXJJbnRlcmFjdGlvbnMoKWAgY2FsbGJhY2tzIHVudGlsIGFsbFxuICogdG91Y2hlcyBoYXZlIGVuZGVkIG9yIGJlZW4gY2FuY2VsbGVkLlxuICpcbiAqIEludGVyYWN0aW9uTWFuYWdlciBhbHNvIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcmVnaXN0ZXIgYW5pbWF0aW9ucyBieVxuICogY3JlYXRpbmcgYW4gaW50ZXJhY3Rpb24gJ2hhbmRsZScgb24gYW5pbWF0aW9uIHN0YXJ0LCBhbmQgY2xlYXJpbmcgaXQgdXBvblxuICogY29tcGxldGlvbjpcbiAqXG4gKiBgYGBcbiAqIHZhciBoYW5kbGUgPSBJbnRlcmFjdGlvbk1hbmFnZXIuY3JlYXRlSW50ZXJhY3Rpb25IYW5kbGUoKTtcbiAqIC8vIHJ1biBhbmltYXRpb24uLi4gKGBydW5BZnRlckludGVyYWN0aW9uc2AgdGFza3MgYXJlIHF1ZXVlZClcbiAqIC8vIGxhdGVyLCBvbiBhbmltYXRpb24gY29tcGxldGlvbjpcbiAqIEludGVyYWN0aW9uTWFuYWdlci5jbGVhckludGVyYWN0aW9uSGFuZGxlKGhhbmRsZSk7XG4gKiAvLyBxdWV1ZWQgdGFza3MgcnVuIGlmIGFsbCBoYW5kbGVzIHdlcmUgY2xlYXJlZFxuICogYGBgXG4gKlxuICogYHJ1bkFmdGVySW50ZXJhY3Rpb25zYCB0YWtlcyBlaXRoZXIgYSBwbGFpbiBjYWxsYmFjayBmdW5jdGlvbiwgb3IgYVxuICogYFByb21pc2VUYXNrYCBvYmplY3Qgd2l0aCBhIGBnZW5gIG1ldGhvZCB0aGF0IHJldHVybnMgYSBgUHJvbWlzZWAuICBJZiBhXG4gKiBgUHJvbWlzZVRhc2tgIGlzIHN1cHBsaWVkLCB0aGVuIGl0IGlzIGZ1bGx5IHJlc29sdmVkIChpbmNsdWRpbmcgYXN5bmNocm9ub3VzXG4gKiBkZXBlbmRlbmNpZXMgdGhhdCBhbHNvIHNjaGVkdWxlIG1vcmUgdGFza3MgdmlhIGBydW5BZnRlckludGVyYWN0aW9uc2ApIGJlZm9yZVxuICogc3RhcnRpbmcgb24gdGhlIG5leHQgdGFzayB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBxdWV1ZWQgdXAgc3luY2hyb25vdXNseVxuICogZWFybGllci5cbiAqXG4gKiBCeSBkZWZhdWx0LCBxdWV1ZWQgdGFza3MgYXJlIGV4ZWN1dGVkIHRvZ2V0aGVyIGluIGEgbG9vcCBpbiBvbmVcbiAqIGBzZXRJbW1lZGlhdGVgIGJhdGNoLiBJZiBgc2V0RGVhZGxpbmVgIGlzIGNhbGxlZCB3aXRoIGEgcG9zaXRpdmUgbnVtYmVyLCB0aGVuXG4gKiB0YXNrcyB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIGRlYWRsaW5lIChpbiB0ZXJtcyBvZiBqcyBldmVudCBsb29wIHJ1blxuICogdGltZSkgYXBwcm9hY2hlcywgYXQgd2hpY2ggcG9pbnQgZXhlY3V0aW9uIHdpbGwgeWllbGQgdmlhIHNldFRpbWVvdXQsXG4gKiBhbGxvd2luZyBldmVudHMgc3VjaCBhcyB0b3VjaGVzIHRvIHN0YXJ0IGludGVyYWN0aW9ucyBhbmQgYmxvY2sgcXVldWVkIHRhc2tzXG4gKiBmcm9tIGV4ZWN1dGluZywgbWFraW5nIGFwcHMgbW9yZSByZXNwb25zaXZlLlxuICovXG5jb25zdCBJbnRlcmFjdGlvbk1hbmFnZXIgPSB7XG4gIEV2ZW50czoge1xuICAgIGludGVyYWN0aW9uU3RhcnQ6ICdpbnRlcmFjdGlvblN0YXJ0JyxcbiAgICBpbnRlcmFjdGlvbkNvbXBsZXRlOiAnaW50ZXJhY3Rpb25Db21wbGV0ZScsXG4gIH0sXG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIGEgZnVuY3Rpb24gdG8gcnVuIGFmdGVyIGFsbCBpbnRlcmFjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIFJldHVybnMgYSBjYW5jZWxsYWJsZVxuICAgKiBcInByb21pc2VcIi5cbiAgICovXG4gIHJ1bkFmdGVySW50ZXJhY3Rpb25zKHRhc2s6ID9UYXNrKToge1xuICAgIHRoZW46IDxVPihcbiAgICAgIG9uRnVsZmlsbD86ID8odm9pZCkgPT4gPyhQcm9taXNlPFU+IHwgVSksXG4gICAgICBvblJlamVjdD86ID8oZXJyb3I6IG1peGVkKSA9PiA/KFByb21pc2U8VT4gfCBVKSxcbiAgICApID0+IFByb21pc2U8VT4sXG4gICAgY2FuY2VsOiAoKSA9PiB2b2lkLFxuICAgIC4uLlxuICB9IHtcbiAgICBjb25zdCB0YXNrczogQXJyYXk8VGFzaz4gPSBbXTtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIF9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgdGFza3MucHVzaCh0YXNrKTtcbiAgICAgIH1cbiAgICAgIHRhc2tzLnB1c2goe1xuICAgICAgICBydW46IHJlc29sdmUsXG4gICAgICAgIG5hbWU6ICdyZXNvbHZlICcgKyAoKHRhc2sgJiYgdGFzay5uYW1lKSB8fCAnPycpLFxuICAgICAgfSk7XG4gICAgICBfdGFza1F1ZXVlLmVucXVldWVUYXNrcyh0YXNrcyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgIHRoZW46IHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpLFxuICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90YXNrUXVldWUuY2FuY2VsVGFza3ModGFza3MpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBOb3RpZnkgbWFuYWdlciB0aGF0IGFuIGludGVyYWN0aW9uIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgY3JlYXRlSW50ZXJhY3Rpb25IYW5kbGUoKTogSGFuZGxlIHtcbiAgICBERUJVRyAmJiBpbmZvTG9nKCdJbnRlcmFjdGlvbk1hbmFnZXI6IGNyZWF0ZSBpbnRlcmFjdGlvbiBoYW5kbGUnKTtcbiAgICBfc2NoZWR1bGVVcGRhdGUoKTtcbiAgICBjb25zdCBoYW5kbGUgPSArK19pbmM7XG4gICAgX2FkZEludGVyYWN0aW9uU2V0LmFkZChoYW5kbGUpO1xuICAgIHJldHVybiBoYW5kbGU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE5vdGlmeSBtYW5hZ2VyIHRoYXQgYW4gaW50ZXJhY3Rpb24gaGFzIGNvbXBsZXRlZC5cbiAgICovXG4gIGNsZWFySW50ZXJhY3Rpb25IYW5kbGUoaGFuZGxlOiBIYW5kbGUpIHtcbiAgICBERUJVRyAmJiBpbmZvTG9nKCdJbnRlcmFjdGlvbk1hbmFnZXI6IGNsZWFyIGludGVyYWN0aW9uIGhhbmRsZScpO1xuICAgIGludmFyaWFudCghIWhhbmRsZSwgJ0ludGVyYWN0aW9uTWFuYWdlcjogTXVzdCBwcm92aWRlIGEgaGFuZGxlIHRvIGNsZWFyLicpO1xuICAgIF9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgIF9hZGRJbnRlcmFjdGlvblNldC5kZWxldGUoaGFuZGxlKTtcbiAgICBfZGVsZXRlSW50ZXJhY3Rpb25TZXQuYWRkKGhhbmRsZSk7XG4gIH0sXG5cbiAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICBhZGRMaXN0ZW5lcjogKF9lbWl0dGVyLmFkZExpc3RlbmVyLmJpbmQoX2VtaXR0ZXIpOiAkRmxvd0ZpeE1lKSxcblxuICAvKipcbiAgICogQSBwb3NpdGl2ZSBudW1iZXIgd2lsbCB1c2Ugc2V0VGltZW91dCB0byBzY2hlZHVsZSBhbnkgdGFza3MgYWZ0ZXIgdGhlXG4gICAqIGV2ZW50TG9vcFJ1bm5pbmdUaW1lIGhpdHMgdGhlIGRlYWRsaW5lIHZhbHVlLCBvdGhlcndpc2UgYWxsIHRhc2tzIHdpbGwgYmVcbiAgICogZXhlY3V0ZWQgaW4gb25lIHNldEltbWVkaWF0ZSBiYXRjaCAoZGVmYXVsdCkuXG4gICAqL1xuICBzZXREZWFkbGluZShkZWFkbGluZTogbnVtYmVyKSB7XG4gICAgX2RlYWRsaW5lID0gZGVhZGxpbmU7XG4gIH0sXG59O1xuXG5jb25zdCBfaW50ZXJhY3Rpb25TZXQgPSBuZXcgU2V0PG51bWJlciB8IEhhbmRsZT4oKTtcbmNvbnN0IF9hZGRJbnRlcmFjdGlvblNldCA9IG5ldyBTZXQ8bnVtYmVyIHwgSGFuZGxlPigpO1xuY29uc3QgX2RlbGV0ZUludGVyYWN0aW9uU2V0ID0gbmV3IFNldDxIYW5kbGU+KCk7XG5jb25zdCBfdGFza1F1ZXVlID0gbmV3IFRhc2tRdWV1ZSh7b25Nb3JlVGFza3M6IF9zY2hlZHVsZVVwZGF0ZX0pO1xubGV0IF9uZXh0VXBkYXRlSGFuZGxlOiAkRmxvd0ZpeE1lIHwgVGltZW91dElEID0gMDtcbmxldCBfaW5jID0gMDtcbmxldCBfZGVhZGxpbmUgPSAtMTtcblxuLyoqXG4gKiBTY2hlZHVsZSBhbiBhc3luY2hyb25vdXMgdXBkYXRlIHRvIHRoZSBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gX3NjaGVkdWxlVXBkYXRlKCkge1xuICBpZiAoIV9uZXh0VXBkYXRlSGFuZGxlKSB7XG4gICAgaWYgKF9kZWFkbGluZSA+IDApIHtcbiAgICAgIF9uZXh0VXBkYXRlSGFuZGxlID0gc2V0VGltZW91dChfcHJvY2Vzc1VwZGF0ZSwgMCArIERFQlVHX0RFTEFZKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX25leHRVcGRhdGVIYW5kbGUgPSBzZXRJbW1lZGlhdGUoX3Byb2Nlc3NVcGRhdGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE5vdGlmeSBsaXN0ZW5lcnMsIHByb2Nlc3MgcXVldWUsIGV0Y1xuICovXG5mdW5jdGlvbiBfcHJvY2Vzc1VwZGF0ZSgpIHtcbiAgX25leHRVcGRhdGVIYW5kbGUgPSAwO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ291bnQgPSBfaW50ZXJhY3Rpb25TZXQuc2l6ZTtcbiAgX2FkZEludGVyYWN0aW9uU2V0LmZvckVhY2goaGFuZGxlID0+IF9pbnRlcmFjdGlvblNldC5hZGQoaGFuZGxlKSk7XG4gIF9kZWxldGVJbnRlcmFjdGlvblNldC5mb3JFYWNoKGhhbmRsZSA9PiBfaW50ZXJhY3Rpb25TZXQuZGVsZXRlKGhhbmRsZSkpO1xuICBjb25zdCBuZXh0SW50ZXJhY3Rpb25Db3VudCA9IF9pbnRlcmFjdGlvblNldC5zaXplO1xuXG4gIGlmIChpbnRlcmFjdGlvbkNvdW50ICE9PSAwICYmIG5leHRJbnRlcmFjdGlvbkNvdW50ID09PSAwKSB7XG4gICAgLy8gdHJhbnNpdGlvbiBmcm9tIDErIC0tPiAwIGludGVyYWN0aW9uc1xuICAgIF9lbWl0dGVyLmVtaXQoSW50ZXJhY3Rpb25NYW5hZ2VyLkV2ZW50cy5pbnRlcmFjdGlvbkNvbXBsZXRlKTtcbiAgfSBlbHNlIGlmIChpbnRlcmFjdGlvbkNvdW50ID09PSAwICYmIG5leHRJbnRlcmFjdGlvbkNvdW50ICE9PSAwKSB7XG4gICAgLy8gdHJhbnNpdGlvbiBmcm9tIDAgLS0+IDErIGludGVyYWN0aW9uc1xuICAgIF9lbWl0dGVyLmVtaXQoSW50ZXJhY3Rpb25NYW5hZ2VyLkV2ZW50cy5pbnRlcmFjdGlvblN0YXJ0KTtcbiAgfVxuXG4gIC8vIHByb2Nlc3MgdGhlIHF1ZXVlIHJlZ2FyZGxlc3Mgb2YgYSB0cmFuc2l0aW9uXG4gIGlmIChuZXh0SW50ZXJhY3Rpb25Db3VudCA9PT0gMCkge1xuICAgIHdoaWxlIChfdGFza1F1ZXVlLmhhc1Rhc2tzVG9Qcm9jZXNzKCkpIHtcbiAgICAgIF90YXNrUXVldWUucHJvY2Vzc05leHQoKTtcbiAgICAgIGlmIChcbiAgICAgICAgX2RlYWRsaW5lID4gMCAmJlxuICAgICAgICBCYXRjaGVkQnJpZGdlLmdldEV2ZW50TG9vcFJ1bm5pbmdUaW1lKCkgPj0gX2RlYWRsaW5lXG4gICAgICApIHtcbiAgICAgICAgLy8gSGl0IGRlYWRsaW5lIGJlZm9yZSBwcm9jZXNzaW5nIGFsbCB0YXNrcywgc28gcHJvY2VzcyBtb3JlIGxhdGVyLlxuICAgICAgICBfc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9hZGRJbnRlcmFjdGlvblNldC5jbGVhcigpO1xuICBfZGVsZXRlSW50ZXJhY3Rpb25TZXQuY2xlYXIoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpbmZvTG9nID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL2luZm9Mb2cnKTtcbmNvbnN0IGludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG50eXBlIFNpbXBsZVRhc2sgPSB7XG4gIG5hbWU6IHN0cmluZyxcbiAgcnVuOiAoKSA9PiB2b2lkLFxufTtcbnR5cGUgUHJvbWlzZVRhc2sgPSB7XG4gIG5hbWU6IHN0cmluZyxcbiAgZ2VuOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxufTtcbmV4cG9ydCB0eXBlIFRhc2sgPSBTaW1wbGVUYXNrIHwgUHJvbWlzZVRhc2sgfCAoKCkgPT4gdm9pZCk7XG5cbmNvbnN0IERFQlVHOiBmYWxzZSA9IGZhbHNlO1xuXG4vKipcbiAqIFRhc2tRdWV1ZSAtIEEgc3lzdGVtIGZvciBxdWV1ZWluZyBhbmQgZXhlY3V0aW5nIGEgbWl4IG9mIHNpbXBsZSBjYWxsYmFja3MgYW5kXG4gKiB0cmVlcyBvZiBkZXBlbmRlbnQgdGFza3MgYmFzZWQgb24gUHJvbWlzZXMuIE5vIHRhc2tzIGFyZSBleGVjdXRlZCB1bmxlc3NcbiAqIGBwcm9jZXNzTmV4dGAgaXMgY2FsbGVkLlxuICpcbiAqIGBlbnF1ZXVlYCB0YWtlcyBhIFRhc2sgb2JqZWN0IHdpdGggZWl0aGVyIGEgc2ltcGxlIGBydW5gIGNhbGxiYWNrLCBvciBhXG4gKiBgZ2VuYCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBgUHJvbWlzZWAgYW5kIHB1dHMgaXQgaW4gdGhlIHF1ZXVlLiAgSWYgYSBnZW5cbiAqIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLCB0aGVuIHRoZSBwcm9taXNlIGl0IHJldHVybnMgd2lsbCBibG9jayBleGVjdXRpb24gb2ZcbiAqIHRhc2tzIGFscmVhZHkgaW4gdGhlIHF1ZXVlIHVudGlsIGl0IHJlc29sdmVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2Ugc3VyZVxuICogdGhlIGZpcnN0IHRhc2sgaXMgZnVsbHkgcmVzb2x2ZWQgKGluY2x1ZGluZyBhc3luY2hyb25vdXMgZGVwZW5kZW5jaWVzIHRoYXRcbiAqIGFsc28gc2NoZWR1bGUgbW9yZSB0YXNrcyB2aWEgYGVucXVldWVgKSBiZWZvcmUgc3RhcnRpbmcgb24gdGhlIG5leHQgdGFzay5cbiAqIFRoZSBgb25Nb3JlVGFza3NgIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBvd25lciB0aGF0IGFuXG4gKiBhc3luYyB0YXNrIGhhcyByZXNvbHZlZCBhbmQgdGhhdCB0aGUgcXVldWUgc2hvdWxkIGJlIHByb2Nlc3NlZCBhZ2Fpbi5cbiAqXG4gKiBOb3RlOiBUYXNrcyBhcmUgb25seSBhY3R1YWxseSBleGVjdXRlZCB3aXRoIGV4cGxpY2l0IGNhbGxzIHRvIGBwcm9jZXNzTmV4dGAuXG4gKi9cbmNsYXNzIFRhc2tRdWV1ZSB7XG4gIC8qKlxuICAgKiBUYXNrUXVldWUgaW5zdGFuY2VzIGFyZSBzZWxmIGNvbnRhaW5lZCBhbmQgaW5kZXBlbmRlbnQsIHNvIG11bHRpcGxlIHRhc2tzXG4gICAqIG9mIHZhcnlpbmcgc2VtYW50aWNzIGFuZCBwcmlvcml0eSBjYW4gb3BlcmF0ZSB0b2dldGhlci5cbiAgICpcbiAgICogYG9uTW9yZVRhc2tzYCBpcyBpbnZva2VkIHdoZW4gYFByb21pc2VUYXNrYHMgcmVzb2x2ZSBpZiB0aGVyZSBhcmUgbW9yZVxuICAgKiB0YXNrcyB0byBwcm9jZXNzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe29uTW9yZVRhc2tzfToge29uTW9yZVRhc2tzOiAoKSA9PiB2b2lkLCAuLi59KSB7XG4gICAgdGhpcy5fb25Nb3JlVGFza3MgPSBvbk1vcmVUYXNrcztcbiAgICB0aGlzLl9xdWV1ZVN0YWNrID0gW3t0YXNrczogW10sIHBvcGFibGU6IGZhbHNlfV07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGFzayB0byB0aGUgcXVldWUuICBJdCBpcyByZWNvbW1lbmRlZCB0byBuYW1lIHlvdXIgdGFza3MgZm9yIGVhc2llclxuICAgKiBhc3luYyBkZWJ1Z2dpbmcuIFRhc2tzIHdpbGwgbm90IGJlIGV4ZWN1dGVkIHVudGlsIGBwcm9jZXNzTmV4dGAgaXMgY2FsbGVkXG4gICAqIGV4cGxpY2l0bHkuXG4gICAqL1xuICBlbnF1ZXVlKHRhc2s6IFRhc2spOiB2b2lkIHtcbiAgICB0aGlzLl9nZXRDdXJyZW50UXVldWUoKS5wdXNoKHRhc2spO1xuICB9XG5cbiAgZW5xdWV1ZVRhc2tzKHRhc2tzOiBBcnJheTxUYXNrPik6IHZvaWQge1xuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB0aGlzLmVucXVldWUodGFzaykpO1xuICB9XG5cbiAgY2FuY2VsVGFza3ModGFza3NUb0NhbmNlbDogQXJyYXk8VGFzaz4pOiB2b2lkIHtcbiAgICAvLyBzZWFyY2ggdGhyb3VnaCBhbGwgdGFza3MgYW5kIHJlbW92ZSB0aGVtLlxuICAgIHRoaXMuX3F1ZXVlU3RhY2sgPSB0aGlzLl9xdWV1ZVN0YWNrXG4gICAgICAubWFwKHF1ZXVlID0+ICh7XG4gICAgICAgIC4uLnF1ZXVlLFxuICAgICAgICB0YXNrczogcXVldWUudGFza3MuZmlsdGVyKHRhc2sgPT4gdGFza3NUb0NhbmNlbC5pbmRleE9mKHRhc2spID09PSAtMSksXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKHF1ZXVlLCBpZHgpID0+IHF1ZXVlLnRhc2tzLmxlbmd0aCA+IDAgfHwgaWR4ID09PSAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgYHByb2Nlc3NOZXh0YCBzaG91bGQgYmUgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSB0YXNrcyB0aGF0IGFyZSByZWFkeSB0byBiZVxuICAgKiBwcm9jZXNzZWQgd2l0aCBgcHJvY2Vzc05leHRgLCBvciByZXR1cm5zIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBtb3JlIHRhc2tzXG4gICAqIHRvIGJlIHByb2Nlc3NlZCByaWdodCBub3csIGFsdGhvdWdoIHRoZXJlIG1heSBiZSB0YXNrcyBpbiB0aGUgcXVldWUgdGhhdFxuICAgKiBhcmUgYmxvY2tlZCBieSBlYXJsaWVyIGBQcm9taXNlVGFza2BzIHRoYXQgaGF2ZW4ndCByZXNvbHZlZCB5ZXQuXG4gICAqIGBvbk1vcmVUYXNrc2Agd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCBgUHJvbWlzZVRhc2tgIHJlc29sdmVzIGlmIHRoZXJlIGFyZVxuICAgKiB0YXNrcyByZWFkeSB0byBydW4gYXQgdGhhdCBwb2ludC5cbiAgICovXG4gIGhhc1Rhc2tzVG9Qcm9jZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9nZXRDdXJyZW50UXVldWUoKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBuZXh0IHRhc2sgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcHJvY2Vzc05leHQoKTogdm9pZCB7XG4gICAgY29uc3QgcXVldWUgPSB0aGlzLl9nZXRDdXJyZW50UXVldWUoKTtcbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0YXNrID0gcXVldWUuc2hpZnQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFzayA9PT0gJ29iamVjdCcgJiYgdGFzay5nZW4pIHtcbiAgICAgICAgICBERUJVRyAmJiBpbmZvTG9nKCdUYXNrUXVldWU6IGdlblByb21pc2UgZm9yIHRhc2sgJyArIHRhc2submFtZSk7XG4gICAgICAgICAgdGhpcy5fZ2VuUHJvbWlzZSh0YXNrKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGFzayA9PT0gJ29iamVjdCcgJiYgdGFzay5ydW4pIHtcbiAgICAgICAgICBERUJVRyAmJiBpbmZvTG9nKCdUYXNrUXVldWU6IHJ1biB0YXNrICcgKyB0YXNrLm5hbWUpO1xuICAgICAgICAgIHRhc2sucnVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgdHlwZW9mIHRhc2sgPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgICAnRXhwZWN0ZWQgRnVuY3Rpb24sIFNpbXBsZVRhc2ssIG9yIFByb21pc2VUYXNrLCBidXQgZ290OlxcbicgK1xuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YXNrLCBudWxsLCAyKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIERFQlVHICYmIGluZm9Mb2coJ1Rhc2tRdWV1ZTogcnVuIGFub255bW91cyB0YXNrJyk7XG4gICAgICAgICAgdGFzaygpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZSA9XG4gICAgICAgICAgJ1Rhc2tRdWV1ZTogRXJyb3Igd2l0aCB0YXNrICcgKyAodGFzay5uYW1lIHx8ICcnKSArICc6ICcgKyBlLm1lc3NhZ2U7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3F1ZXVlU3RhY2s6IEFycmF5PHtcbiAgICB0YXNrczogQXJyYXk8VGFzaz4sXG4gICAgcG9wYWJsZTogYm9vbGVhbixcbiAgICAuLi5cbiAgfT47XG4gIF9vbk1vcmVUYXNrczogKCkgPT4gdm9pZDtcblxuICBfZ2V0Q3VycmVudFF1ZXVlKCk6IEFycmF5PFRhc2s+IHtcbiAgICBjb25zdCBzdGFja0lkeCA9IHRoaXMuX3F1ZXVlU3RhY2subGVuZ3RoIC0gMTtcbiAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX3F1ZXVlU3RhY2tbc3RhY2tJZHhdO1xuICAgIGlmIChcbiAgICAgIHF1ZXVlLnBvcGFibGUgJiZcbiAgICAgIHF1ZXVlLnRhc2tzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgdGhpcy5fcXVldWVTdGFjay5sZW5ndGggPiAxXG4gICAgKSB7XG4gICAgICB0aGlzLl9xdWV1ZVN0YWNrLnBvcCgpO1xuICAgICAgREVCVUcgJiZcbiAgICAgICAgaW5mb0xvZygnVGFza1F1ZXVlOiBwb3BwZWQgcXVldWU6ICcsIHtcbiAgICAgICAgICBzdGFja0lkeCxcbiAgICAgICAgICBxdWV1ZVN0YWNrU2l6ZTogdGhpcy5fcXVldWVTdGFjay5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEN1cnJlbnRRdWV1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcXVldWUudGFza3M7XG4gICAgfVxuICB9XG5cbiAgX2dlblByb21pc2UodGFzazogUHJvbWlzZVRhc2spIHtcbiAgICAvLyBFYWNoIGFzeW5jIHRhc2sgcHVzaGVzIGl0J3Mgb3duIHF1ZXVlIG9udG8gdGhlIHF1ZXVlIHN0YWNrLiBUaGlzXG4gICAgLy8gZWZmZWN0aXZlbHkgZGVmZXJzIGV4ZWN1dGlvbiBvZiBwcmV2aW91c2x5IHF1ZXVlZCB0YXNrcyB1bnRpbCB0aGUgcHJvbWlzZVxuICAgIC8vIHJlc29sdmVzLCBhdCB3aGljaCBwb2ludCB3ZSBhbGxvdyB0aGUgbmV3IHF1ZXVlIHRvIGJlIHBvcHBlZCwgd2hpY2hcbiAgICAvLyBoYXBwZW5zIG9uY2UgaXQgaXMgZnVsbHkgcHJvY2Vzc2VkLlxuICAgIHRoaXMuX3F1ZXVlU3RhY2sucHVzaCh7dGFza3M6IFtdLCBwb3BhYmxlOiBmYWxzZX0pO1xuICAgIGNvbnN0IHN0YWNrSWR4ID0gdGhpcy5fcXVldWVTdGFjay5sZW5ndGggLSAxO1xuICAgIGNvbnN0IHN0YWNrSXRlbSA9IHRoaXMuX3F1ZXVlU3RhY2tbc3RhY2tJZHhdO1xuICAgIERFQlVHICYmIGluZm9Mb2coJ1Rhc2tRdWV1ZTogcHVzaCBuZXcgcXVldWU6ICcsIHtzdGFja0lkeH0pO1xuICAgIERFQlVHICYmIGluZm9Mb2coJ1Rhc2tRdWV1ZTogZXhlYyBnZW4gdGFzayAnICsgdGFzay5uYW1lKTtcbiAgICB0YXNrXG4gICAgICAuZ2VuKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgREVCVUcgJiZcbiAgICAgICAgICBpbmZvTG9nKCdUYXNrUXVldWU6IG9uVGhlbiBmb3IgZ2VuIHRhc2sgJyArIHRhc2submFtZSwge1xuICAgICAgICAgICAgc3RhY2tJZHgsXG4gICAgICAgICAgICBxdWV1ZVN0YWNrU2l6ZTogdGhpcy5fcXVldWVTdGFjay5sZW5ndGgsXG4gICAgICAgICAgfSk7XG4gICAgICAgIHN0YWNrSXRlbS5wb3BhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oYXNUYXNrc1RvUHJvY2VzcygpICYmIHRoaXMuX29uTW9yZVRhc2tzKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGV4ID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZXgubWVzc2FnZSA9IGBUYXNrUXVldWU6IEVycm9yIHJlc29sdmluZyBQcm9taXNlIGluIHRhc2sgJHt0YXNrLm5hbWV9OiAke2V4Lm1lc3NhZ2V9YDtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRhc2tRdWV1ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbi8qIGVzbGludCBuby1iaXR3aXNlOiAwICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtQ29uZmlnfSBmcm9tICcuLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcbmltcG9ydCB0eXBlIEFuaW1hdGVkTm9kZSBmcm9tICcuL0FuaW1hdGVkTm9kZSc7XG5cbmltcG9ydCBub3JtYWxpemVDb2xvciBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L25vcm1hbGl6ZUNvbG9yJztcbmltcG9ydCBwcm9jZXNzQ29sb3IgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IEVhc2luZyBmcm9tICcuLi9FYXNpbmcnO1xuaW1wb3J0IE5hdGl2ZUFuaW1hdGVkSGVscGVyIGZyb20gJy4uL05hdGl2ZUFuaW1hdGVkSGVscGVyJztcbmltcG9ydCBBbmltYXRlZFdpdGhDaGlsZHJlbiBmcm9tICcuL0FuaW1hdGVkV2l0aENoaWxkcmVuJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxudHlwZSBFeHRyYXBvbGF0ZVR5cGUgPSAnZXh0ZW5kJyB8ICdpZGVudGl0eScgfCAnY2xhbXAnO1xuXG5leHBvcnQgdHlwZSBJbnRlcnBvbGF0aW9uQ29uZmlnVHlwZTxPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+ID0gJFJlYWRPbmx5PHtcbiAgaW5wdXRSYW5nZTogJFJlYWRPbmx5QXJyYXk8bnVtYmVyPixcbiAgb3V0cHV0UmFuZ2U6ICRSZWFkT25seUFycmF5PE91dHB1dFQ+LFxuICBlYXNpbmc/OiAoaW5wdXQ6IG51bWJlcikgPT4gbnVtYmVyLFxuICBleHRyYXBvbGF0ZT86IEV4dHJhcG9sYXRlVHlwZSxcbiAgZXh0cmFwb2xhdGVMZWZ0PzogRXh0cmFwb2xhdGVUeXBlLFxuICBleHRyYXBvbGF0ZVJpZ2h0PzogRXh0cmFwb2xhdGVUeXBlLFxufT47XG5cbi8qKlxuICogVmVyeSBoYW5keSBoZWxwZXIgdG8gbWFwIGlucHV0IHJhbmdlcyB0byBvdXRwdXQgcmFuZ2VzIHdpdGggYW4gZWFzaW5nXG4gKiBmdW5jdGlvbiBhbmQgY3VzdG9tIGJlaGF2aW9yIG91dHNpZGUgb2YgdGhlIHJhbmdlcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ludGVycG9sYXRpb24oXG4gIGNvbmZpZzogSW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGU8bnVtYmVyPixcbik6IChpbnB1dDogbnVtYmVyKSA9PiBudW1iZXIge1xuICBjb25zdCBvdXRwdXRSYW5nZTogJFJlYWRPbmx5QXJyYXk8bnVtYmVyPiA9IChjb25maWcub3V0cHV0UmFuZ2U6IGFueSk7XG4gIGNvbnN0IGlucHV0UmFuZ2UgPSBjb25maWcuaW5wdXRSYW5nZTtcblxuICBjb25zdCBlYXNpbmcgPSBjb25maWcuZWFzaW5nIHx8IEVhc2luZy5saW5lYXI7XG5cbiAgbGV0IGV4dHJhcG9sYXRlTGVmdDogRXh0cmFwb2xhdGVUeXBlID0gJ2V4dGVuZCc7XG4gIGlmIChjb25maWcuZXh0cmFwb2xhdGVMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBleHRyYXBvbGF0ZUxlZnQgPSBjb25maWcuZXh0cmFwb2xhdGVMZWZ0O1xuICB9IGVsc2UgaWYgKGNvbmZpZy5leHRyYXBvbGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXh0cmFwb2xhdGVMZWZ0ID0gY29uZmlnLmV4dHJhcG9sYXRlO1xuICB9XG5cbiAgbGV0IGV4dHJhcG9sYXRlUmlnaHQ6IEV4dHJhcG9sYXRlVHlwZSA9ICdleHRlbmQnO1xuICBpZiAoY29uZmlnLmV4dHJhcG9sYXRlUmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgIGV4dHJhcG9sYXRlUmlnaHQgPSBjb25maWcuZXh0cmFwb2xhdGVSaWdodDtcbiAgfSBlbHNlIGlmIChjb25maWcuZXh0cmFwb2xhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGV4dHJhcG9sYXRlUmlnaHQgPSBjb25maWcuZXh0cmFwb2xhdGU7XG4gIH1cblxuICByZXR1cm4gaW5wdXQgPT4ge1xuICAgIGludmFyaWFudChcbiAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicsXG4gICAgICAnQ2Fubm90IGludGVycG9sYXRpb24gYW4gaW5wdXQgd2hpY2ggaXMgbm90IGEgbnVtYmVyJyxcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBmaW5kUmFuZ2UoaW5wdXQsIGlucHV0UmFuZ2UpO1xuICAgIHJldHVybiAoaW50ZXJwb2xhdGUoXG4gICAgICBpbnB1dCxcbiAgICAgIGlucHV0UmFuZ2VbcmFuZ2VdLFxuICAgICAgaW5wdXRSYW5nZVtyYW5nZSArIDFdLFxuICAgICAgb3V0cHV0UmFuZ2VbcmFuZ2VdLFxuICAgICAgb3V0cHV0UmFuZ2VbcmFuZ2UgKyAxXSxcbiAgICAgIGVhc2luZyxcbiAgICAgIGV4dHJhcG9sYXRlTGVmdCxcbiAgICAgIGV4dHJhcG9sYXRlUmlnaHQsXG4gICAgKTogYW55KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoXG4gIGlucHV0OiBudW1iZXIsXG4gIGlucHV0TWluOiBudW1iZXIsXG4gIGlucHV0TWF4OiBudW1iZXIsXG4gIG91dHB1dE1pbjogbnVtYmVyLFxuICBvdXRwdXRNYXg6IG51bWJlcixcbiAgZWFzaW5nOiAoaW5wdXQ6IG51bWJlcikgPT4gbnVtYmVyLFxuICBleHRyYXBvbGF0ZUxlZnQ6IEV4dHJhcG9sYXRlVHlwZSxcbiAgZXh0cmFwb2xhdGVSaWdodDogRXh0cmFwb2xhdGVUeXBlLFxuKSB7XG4gIGxldCByZXN1bHQgPSBpbnB1dDtcblxuICAvLyBFeHRyYXBvbGF0ZVxuICBpZiAocmVzdWx0IDwgaW5wdXRNaW4pIHtcbiAgICBpZiAoZXh0cmFwb2xhdGVMZWZ0ID09PSAnaWRlbnRpdHknKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSBpZiAoZXh0cmFwb2xhdGVMZWZ0ID09PSAnY2xhbXAnKSB7XG4gICAgICByZXN1bHQgPSBpbnB1dE1pbjtcbiAgICB9IGVsc2UgaWYgKGV4dHJhcG9sYXRlTGVmdCA9PT0gJ2V4dGVuZCcpIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG4gIH1cblxuICBpZiAocmVzdWx0ID4gaW5wdXRNYXgpIHtcbiAgICBpZiAoZXh0cmFwb2xhdGVSaWdodCA9PT0gJ2lkZW50aXR5Jykge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2UgaWYgKGV4dHJhcG9sYXRlUmlnaHQgPT09ICdjbGFtcCcpIHtcbiAgICAgIHJlc3VsdCA9IGlucHV0TWF4O1xuICAgIH0gZWxzZSBpZiAoZXh0cmFwb2xhdGVSaWdodCA9PT0gJ2V4dGVuZCcpIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG4gIH1cblxuICBpZiAob3V0cHV0TWluID09PSBvdXRwdXRNYXgpIHtcbiAgICByZXR1cm4gb3V0cHV0TWluO1xuICB9XG5cbiAgaWYgKGlucHV0TWluID09PSBpbnB1dE1heCkge1xuICAgIGlmIChpbnB1dCA8PSBpbnB1dE1pbikge1xuICAgICAgcmV0dXJuIG91dHB1dE1pbjtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dE1heDtcbiAgfVxuXG4gIC8vIElucHV0IFJhbmdlXG4gIGlmIChpbnB1dE1pbiA9PT0gLUluZmluaXR5KSB7XG4gICAgcmVzdWx0ID0gLXJlc3VsdDtcbiAgfSBlbHNlIGlmIChpbnB1dE1heCA9PT0gSW5maW5pdHkpIHtcbiAgICByZXN1bHQgPSByZXN1bHQgLSBpbnB1dE1pbjtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAocmVzdWx0IC0gaW5wdXRNaW4pIC8gKGlucHV0TWF4IC0gaW5wdXRNaW4pO1xuICB9XG5cbiAgLy8gRWFzaW5nXG4gIHJlc3VsdCA9IGVhc2luZyhyZXN1bHQpO1xuXG4gIC8vIE91dHB1dCBSYW5nZVxuICBpZiAob3V0cHV0TWluID09PSAtSW5maW5pdHkpIHtcbiAgICByZXN1bHQgPSAtcmVzdWx0O1xuICB9IGVsc2UgaWYgKG91dHB1dE1heCA9PT0gSW5maW5pdHkpIHtcbiAgICByZXN1bHQgPSByZXN1bHQgKyBvdXRwdXRNaW47XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICogKG91dHB1dE1heCAtIG91dHB1dE1pbikgKyBvdXRwdXRNaW47XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBudW1lcmljQ29tcG9uZW50UmVnZXggPSAvWystXT8oPzpcXGQrXFwuP1xcZCp8XFwuXFxkKykoPzpbZUVdWystXT9cXGQrKT8vZztcblxuLy8gTWFwcyBzdHJpbmcgaW5wdXRzIGFuIFJHQkEgY29sb3Igb3IgYW4gYXJyYXkgb2YgbnVtZXJpYyBjb21wb25lbnRzXG5mdW5jdGlvbiBtYXBTdHJpbmdUb051bWVyaWNDb21wb25lbnRzKFxuICBpbnB1dDogc3RyaW5nLFxuKTpcbiAgfCB7aXNDb2xvcjogdHJ1ZSwgY29tcG9uZW50czogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl19XG4gIHwge2lzQ29sb3I6IGZhbHNlLCBjb21wb25lbnRzOiAkUmVhZE9ubHlBcnJheTxudW1iZXIgfCBzdHJpbmc+fSB7XG4gIGxldCBub3JtYWxpemVkQ29sb3IgPSBub3JtYWxpemVDb2xvcihpbnB1dCk7XG4gIGludmFyaWFudChcbiAgICBub3JtYWxpemVkQ29sb3IgPT0gbnVsbCB8fCB0eXBlb2Ygbm9ybWFsaXplZENvbG9yICE9PSAnb2JqZWN0JyxcbiAgICAnUGxhdGZvcm1Db2xvcnMgYXJlIG5vdCBzdXBwb3J0ZWQnLFxuICApO1xuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbG9yID09PSAnbnVtYmVyJykge1xuICAgIG5vcm1hbGl6ZWRDb2xvciA9IG5vcm1hbGl6ZWRDb2xvciB8fCAwO1xuICAgIGNvbnN0IHIgPSAobm9ybWFsaXplZENvbG9yICYgMHhmZjAwMDAwMCkgPj4+IDI0O1xuICAgIGNvbnN0IGcgPSAobm9ybWFsaXplZENvbG9yICYgMHgwMGZmMDAwMCkgPj4+IDE2O1xuICAgIGNvbnN0IGIgPSAobm9ybWFsaXplZENvbG9yICYgMHgwMDAwZmYwMCkgPj4+IDg7XG4gICAgY29uc3QgYSA9IChub3JtYWxpemVkQ29sb3IgJiAweDAwMDAwMGZmKSAvIDI1NTtcbiAgICByZXR1cm4ge2lzQ29sb3I6IHRydWUsIGNvbXBvbmVudHM6IFtyLCBnLCBiLCBhXX07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29tcG9uZW50czogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9IFtdO1xuICAgIGxldCBsYXN0TWF0Y2hFbmQgPSAwO1xuICAgIGxldCBtYXRjaDogUmVnRXhwJG1hdGNoUmVzdWx0O1xuICAgIHdoaWxlICgobWF0Y2ggPSAobnVtZXJpY0NvbXBvbmVudFJlZ2V4LmV4ZWMoaW5wdXQpOiBhbnkpKSAhPSBudWxsKSB7XG4gICAgICBpZiAobWF0Y2guaW5kZXggPiBsYXN0TWF0Y2hFbmQpIHtcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKGlucHV0LnN1YnN0cmluZyhsYXN0TWF0Y2hFbmQsIG1hdGNoLmluZGV4KSk7XG4gICAgICB9XG4gICAgICBjb21wb25lbnRzLnB1c2gocGFyc2VGbG9hdChtYXRjaFswXSkpO1xuICAgICAgbGFzdE1hdGNoRW5kID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgfVxuICAgIGludmFyaWFudChcbiAgICAgIGNvbXBvbmVudHMubGVuZ3RoID4gMCxcbiAgICAgICdvdXRwdXRSYW5nZSBtdXN0IGNvbnRhaW4gY29sb3Igb3IgdmFsdWUgd2l0aCBudW1lcmljIGNvbXBvbmVudCcsXG4gICAgKTtcbiAgICBpZiAobGFzdE1hdGNoRW5kIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goaW5wdXQuc3Vic3RyaW5nKGxhc3RNYXRjaEVuZCwgaW5wdXQubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiB7aXNDb2xvcjogZmFsc2UsIGNvbXBvbmVudHN9O1xuICB9XG59XG5cbi8qKlxuICogU3VwcG9ydHMgc3RyaW5nIHNoYXBlcyBieSBleHRyYWN0aW5nIG51bWJlcnMgc28gbmV3IHZhbHVlcyBjYW4gYmUgY29tcHV0ZWQsXG4gKiBhbmQgcmVjb21iaW5lcyB0aG9zZSB2YWx1ZXMgaW50byBuZXcgc3RyaW5ncyBvZiB0aGUgc2FtZSBzaGFwZS4gIFN1cHBvcnRzXG4gKiB0aGluZ3MgbGlrZTpcbiAqXG4gKiAgIHJnYmEoMTIzLCA0MiwgOTksIDAuMzYpIC8vIGNvbG9yc1xuICogICAtNDVkZWcgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgd2l0aCB1bml0c1xuICovXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdJbnRlcnBvbGF0aW9uKFxuICBjb25maWc6IEludGVycG9sYXRpb25Db25maWdUeXBlPHN0cmluZz4sXG4pOiAoaW5wdXQ6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgaW52YXJpYW50KGNvbmZpZy5vdXRwdXRSYW5nZS5sZW5ndGggPj0gMiwgJ0JhZCBvdXRwdXQgcmFuZ2UnKTtcbiAgY29uc3Qgb3V0cHV0UmFuZ2UgPSBjb25maWcub3V0cHV0UmFuZ2UubWFwKG1hcFN0cmluZ1RvTnVtZXJpY0NvbXBvbmVudHMpO1xuXG4gIGNvbnN0IGlzQ29sb3IgPSBvdXRwdXRSYW5nZVswXS5pc0NvbG9yO1xuICBpZiAoX19ERVZfXykge1xuICAgIGludmFyaWFudChcbiAgICAgIG91dHB1dFJhbmdlLmV2ZXJ5KG91dHB1dCA9PiBvdXRwdXQuaXNDb2xvciA9PT0gaXNDb2xvciksXG4gICAgICAnQWxsIGVsZW1lbnRzIG9mIG91dHB1dCByYW5nZSBzaG91bGQgZWl0aGVyIGJlIGEgY29sb3Igb3IgYSBzdHJpbmcgd2l0aCBudW1lcmljIGNvbXBvbmVudHMnLFxuICAgICk7XG4gICAgY29uc3QgZmlyc3RPdXRwdXQgPSBvdXRwdXRSYW5nZVswXS5jb21wb25lbnRzO1xuICAgIGludmFyaWFudChcbiAgICAgIG91dHB1dFJhbmdlLmV2ZXJ5KFxuICAgICAgICBvdXRwdXQgPT4gb3V0cHV0LmNvbXBvbmVudHMubGVuZ3RoID09PSBmaXJzdE91dHB1dC5sZW5ndGgsXG4gICAgICApLFxuICAgICAgJ0FsbCBlbGVtZW50cyBvZiBvdXRwdXQgcmFuZ2Ugc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGNvbXBvbmVudHMnLFxuICAgICk7XG4gICAgaW52YXJpYW50KFxuICAgICAgb3V0cHV0UmFuZ2UuZXZlcnkob3V0cHV0ID0+XG4gICAgICAgIG91dHB1dC5jb21wb25lbnRzLmV2ZXJ5KFxuICAgICAgICAgIChjb21wb25lbnQsIGkpID0+XG4gICAgICAgICAgICAvLyAkRmxvd0lnbm9yZU1lW2ludmFsaWQtY29tcGFyZV1cbiAgICAgICAgICAgIHR5cGVvZiBjb21wb25lbnQgPT09ICdudW1iZXInIHx8IGNvbXBvbmVudCA9PT0gZmlyc3RPdXRwdXRbaV0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgJ0FsbCBlbGVtZW50cyBvZiBvdXRwdXQgcmFuZ2Ugc2hvdWxkIGhhdmUgdGhlIHNhbWUgbm9uLW51bWVyaWMgY29tcG9uZW50cycsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG51bWVyaWNDb21wb25lbnRzOiAkUmVhZE9ubHlBcnJheTwkUmVhZE9ubHlBcnJheTxudW1iZXI+PiA9XG4gICAgb3V0cHV0UmFuZ2UubWFwKG91dHB1dCA9PlxuICAgICAgaXNDb2xvclxuICAgICAgICA/IC8vICRGbG93SWdub3JlTWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgb3V0cHV0LmNvbXBvbmVudHNcbiAgICAgICAgOiAvLyAkRmxvd0lnbm9yZU1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgICAgICAgIG91dHB1dC5jb21wb25lbnRzLmZpbHRlcihjID0+IHR5cGVvZiBjID09PSAnbnVtYmVyJyksXG4gICAgKTtcbiAgY29uc3QgaW50ZXJwb2xhdGlvbnMgPSBudW1lcmljQ29tcG9uZW50c1swXS5tYXAoKF8sIGkpID0+XG4gICAgY3JlYXRlTnVtZXJpY0ludGVycG9sYXRpb24oe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgb3V0cHV0UmFuZ2U6IG51bWVyaWNDb21wb25lbnRzLm1hcChjb21wb25lbnRzID0+IGNvbXBvbmVudHNbaV0pLFxuICAgIH0pLFxuICApO1xuICBpZiAoIWlzQ29sb3IpIHtcbiAgICByZXR1cm4gaW5wdXQgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gaW50ZXJwb2xhdGlvbnMubWFwKGludGVycG9sYXRpb24gPT4gaW50ZXJwb2xhdGlvbihpbnB1dCkpO1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgcmV0dXJuIG91dHB1dFJhbmdlWzBdLmNvbXBvbmVudHNcbiAgICAgICAgLm1hcChjID0+ICh0eXBlb2YgYyA9PT0gJ251bWJlcicgPyB2YWx1ZXNbaSsrXSA6IGMpKVxuICAgICAgICAuam9pbignJyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW5wdXQgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbnMubWFwKChpbnRlcnBvbGF0aW9uLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW50ZXJwb2xhdGlvbihpbnB1dCk7XG4gICAgICAgIC8vIHJnYmEgcmVxdWlyZXMgdGhhdCB0aGUgcixnLGIgYXJlIGludGVnZXJzLi4uLiBzbyB3ZSB3YW50IHRvIHJvdW5kIHRoZW0sIGJ1dCB3ZSAqZG9udCogd2FudCB0b1xuICAgICAgICAvLyByb3VuZCB0aGUgb3BhY2l0eSAoNHRoIGNvbHVtbikuXG4gICAgICAgIHJldHVybiBpIDwgMyA/IE1hdGgucm91bmQodmFsdWUpIDogTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMDApIC8gMTAwMDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGByZ2JhKCR7cmVzdWx0WzBdfSwgJHtyZXN1bHRbMV19LCAke3Jlc3VsdFsyXX0sICR7cmVzdWx0WzNdfSlgO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZFJhbmdlKGlucHV0OiBudW1iZXIsIGlucHV0UmFuZ2U6ICRSZWFkT25seUFycmF5PG51bWJlcj4pIHtcbiAgbGV0IGk7XG4gIGZvciAoaSA9IDE7IGkgPCBpbnB1dFJhbmdlLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIGlmIChpbnB1dFJhbmdlW2ldID49IGlucHV0KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkgLSAxO1xufVxuXG5mdW5jdGlvbiBjaGVja1ZhbGlkUmFuZ2VzPE91dHB1dFQ6IG51bWJlciB8IHN0cmluZz4oXG4gIGlucHV0UmFuZ2U6ICRSZWFkT25seUFycmF5PG51bWJlcj4sXG4gIG91dHB1dFJhbmdlOiAkUmVhZE9ubHlBcnJheTxPdXRwdXRUPixcbikge1xuICBjaGVja0luZmluaXRlUmFuZ2UoJ291dHB1dFJhbmdlJywgb3V0cHV0UmFuZ2UpO1xuICBjaGVja0luZmluaXRlUmFuZ2UoJ2lucHV0UmFuZ2UnLCBpbnB1dFJhbmdlKTtcbiAgY2hlY2tWYWxpZElucHV0UmFuZ2UoaW5wdXRSYW5nZSk7XG5cbiAgaW52YXJpYW50KFxuICAgIGlucHV0UmFuZ2UubGVuZ3RoID09PSBvdXRwdXRSYW5nZS5sZW5ndGgsXG4gICAgJ2lucHV0UmFuZ2UgKCcgK1xuICAgICAgaW5wdXRSYW5nZS5sZW5ndGggK1xuICAgICAgJykgYW5kIG91dHB1dFJhbmdlICgnICtcbiAgICAgIG91dHB1dFJhbmdlLmxlbmd0aCArXG4gICAgICAnKSBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tWYWxpZElucHV0UmFuZ2UoYXJyOiAkUmVhZE9ubHlBcnJheTxudW1iZXI+KSB7XG4gIGludmFyaWFudChhcnIubGVuZ3RoID49IDIsICdpbnB1dFJhbmdlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzJyk7XG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgICdpbnB1dFJhbmdlIG11c3QgYmUgbW9ub3RvbmljYWxseSBub24tZGVjcmVhc2luZyAnICsgU3RyaW5nKGFycik7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgaW52YXJpYW50KGFycltpXSA+PSBhcnJbaSAtIDFdLCBtZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0luZmluaXRlUmFuZ2U8T3V0cHV0VDogbnVtYmVyIHwgc3RyaW5nPihcbiAgbmFtZTogc3RyaW5nLFxuICBhcnI6ICRSZWFkT25seUFycmF5PE91dHB1dFQ+LFxuKSB7XG4gIGludmFyaWFudChhcnIubGVuZ3RoID49IDIsIG5hbWUgKyAnIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzJyk7XG4gIGludmFyaWFudChcbiAgICBhcnIubGVuZ3RoICE9PSAyIHx8IGFyclswXSAhPT0gLUluZmluaXR5IHx8IGFyclsxXSAhPT0gSW5maW5pdHksXG4gICAgLyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gKD49MC4xMy4wKSAtIEluIHRoZSBhZGRpdGlvbiBleHByZXNzaW9uXG4gICAgICogYmVsb3cgdGhpcyBjb21tZW50LCBvbmUgb3IgYm90aCBvZiB0aGUgb3BlcmFuZHMgbWF5IGJlIHNvbWV0aGluZyB0aGF0XG4gICAgICogZG9lc24ndCBjbGVhbmx5IGNvbnZlcnQgdG8gYSBzdHJpbmcsIGxpa2UgdW5kZWZpbmVkLCBudWxsLCBhbmQgb2JqZWN0LFxuICAgICAqIGV0Yy4gSWYgeW91IHJlYWxseSBtZWFuIHRoaXMgaW1wbGljaXQgc3RyaW5nIGNvbnZlcnNpb24sIHlvdSBjYW4gZG9cbiAgICAgKiBzb21ldGhpbmcgbGlrZSBTdHJpbmcobXlUaGluZykgKi9cbiAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hZGRpdGlvbl1cbiAgICBuYW1lICsgJ2Nhbm5vdCBiZSBdLWluZmluaXR5OytpbmZpbml0eVsgJyArIGFycixcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uPFxuICBPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmcsXG4+IGV4dGVuZHMgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4ge1xuICBfcGFyZW50OiBBbmltYXRlZE5vZGU7XG4gIF9jb25maWc6IEludGVycG9sYXRpb25Db25maWdUeXBlPE91dHB1dFQ+O1xuICBfaW50ZXJwb2xhdGlvbjogPyhpbnB1dDogbnVtYmVyKSA9PiBPdXRwdXRUO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQW5pbWF0ZWROb2RlLCBjb25maWc6IEludGVycG9sYXRpb25Db25maWdUeXBlPE91dHB1dFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGNoZWNrVmFsaWRSYW5nZXMoY29uZmlnLmlucHV0UmFuZ2UsIGNvbmZpZy5vdXRwdXRSYW5nZSk7XG5cbiAgICAgIC8vIENyZWF0ZSBpbnRlcnBvbGF0aW9uIGVhZ2VybHkgaW4gZGV2LCBzbyB3ZSBjYW4gc2lnbmFsIGVycm9ycyBmYXN0ZXJcbiAgICAgIC8vIGV2ZW4gd2hlbiB1c2luZyB0aGUgbmF0aXZlIGRyaXZlclxuICAgICAgdGhpcy5fZ2V0SW50ZXJwb2xhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRJbnRlcnBvbGF0aW9uKCk6IG51bWJlciA9PiBPdXRwdXRUIHtcbiAgICBpZiAoIXRoaXMuX2ludGVycG9sYXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX2NvbmZpZztcbiAgICAgIGlmIChjb25maWcub3V0cHV0UmFuZ2UgJiYgdHlwZW9mIGNvbmZpZy5vdXRwdXRSYW5nZVswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5faW50ZXJwb2xhdGlvbiA9IChjcmVhdGVTdHJpbmdJbnRlcnBvbGF0aW9uKChjb25maWc6IGFueSkpOiBhbnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW50ZXJwb2xhdGlvbiA9IChjcmVhdGVOdW1lcmljSW50ZXJwb2xhdGlvbigoY29uZmlnOiBhbnkpKTogYW55KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ludGVycG9sYXRpb247XG4gIH1cblxuICBfX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZykge1xuICAgIHRoaXMuX3BhcmVudC5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6IE91dHB1dFQge1xuICAgIGNvbnN0IHBhcmVudFZhbHVlOiBudW1iZXIgPSB0aGlzLl9wYXJlbnQuX19nZXRWYWx1ZSgpO1xuICAgIGludmFyaWFudChcbiAgICAgIHR5cGVvZiBwYXJlbnRWYWx1ZSA9PT0gJ251bWJlcicsXG4gICAgICAnQ2Fubm90IGludGVycG9sYXRlIGFuIGlucHV0IHdoaWNoIGlzIG5vdCBhIG51bWJlci4nLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2dldEludGVycG9sYXRpb24oKShwYXJlbnRWYWx1ZSk7XG4gIH1cblxuICBpbnRlcnBvbGF0ZTxOZXdPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+KFxuICAgIGNvbmZpZzogSW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGU8TmV3T3V0cHV0VD4sXG4gICk6IEFuaW1hdGVkSW50ZXJwb2xhdGlvbjxOZXdPdXRwdXRUPiB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRlZEludGVycG9sYXRpb24odGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIF9fYXR0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3BhcmVudC5fX2FkZENoaWxkKHRoaXMpO1xuICB9XG5cbiAgX19kZXRhY2goKTogdm9pZCB7XG4gICAgdGhpcy5fcGFyZW50Ll9fcmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgc3VwZXIuX19kZXRhY2goKTtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQ29uZmlnKCk6IGFueSB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIE5hdGl2ZUFuaW1hdGVkSGVscGVyLnZhbGlkYXRlSW50ZXJwb2xhdGlvbih0aGlzLl9jb25maWcpO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdGhlIGBvdXRwdXRSYW5nZWAgY2FuIGNvbnRhaW4gc3RyaW5ncyBzbyB3ZSBkb24ndCBuZWVkIHRvIHRyYW5zZm9ybSBgaW5wdXRSYW5nZWAgaGVyZVxuICAgIGxldCBvdXRwdXRSYW5nZSA9IHRoaXMuX2NvbmZpZy5vdXRwdXRSYW5nZTtcbiAgICBsZXQgb3V0cHV0VHlwZSA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBvdXRwdXRSYW5nZVswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vICRGbG93SWdub3JlTWVbaW5jb21wYXRpYmxlLWNhc3RdXG4gICAgICBvdXRwdXRSYW5nZSA9ICgob3V0cHV0UmFuZ2U6ICRSZWFkT25seUFycmF5PHN0cmluZz4pLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZENvbG9yID0gcHJvY2Vzc0NvbG9yKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzZWRDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRwdXRUeXBlID0gJ2NvbG9yJztcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc2VkQ29sb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE5hdGl2ZUFuaW1hdGVkSGVscGVyLnRyYW5zZm9ybURhdGFUeXBlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk6IGFueSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0UmFuZ2U6IHRoaXMuX2NvbmZpZy5pbnB1dFJhbmdlLFxuICAgICAgb3V0cHV0UmFuZ2UsXG4gICAgICBvdXRwdXRUeXBlLFxuICAgICAgZXh0cmFwb2xhdGVMZWZ0OlxuICAgICAgICB0aGlzLl9jb25maWcuZXh0cmFwb2xhdGVMZWZ0IHx8IHRoaXMuX2NvbmZpZy5leHRyYXBvbGF0ZSB8fCAnZXh0ZW5kJyxcbiAgICAgIGV4dHJhcG9sYXRlUmlnaHQ6XG4gICAgICAgIHRoaXMuX2NvbmZpZy5leHRyYXBvbGF0ZVJpZ2h0IHx8IHRoaXMuX2NvbmZpZy5leHRyYXBvbGF0ZSB8fCAnZXh0ZW5kJyxcbiAgICAgIHR5cGU6ICdpbnRlcnBvbGF0aW9uJyxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5sZXQgZWFzZTtcblxuLyoqXG4gKiBUaGUgYEVhc2luZ2AgbW9kdWxlIGltcGxlbWVudHMgY29tbW9uIGVhc2luZyBmdW5jdGlvbnMuIFRoaXMgbW9kdWxlIGlzIHVzZWRcbiAqIGJ5IFtBbmltYXRlLnRpbWluZygpXShkb2NzL2FuaW1hdGUuaHRtbCN0aW1pbmcpIHRvIGNvbnZleSBwaHlzaWNhbGx5XG4gKiBiZWxpZXZhYmxlIG1vdGlvbiBpbiBhbmltYXRpb25zLlxuICpcbiAqIFlvdSBjYW4gZmluZCBhIHZpc3VhbGl6YXRpb24gb2Ygc29tZSBjb21tb24gZWFzaW5nIGZ1bmN0aW9ucyBhdFxuICogaHR0cDovL2Vhc2luZ3MubmV0L1xuICpcbiAqICMjIyBQcmVkZWZpbmVkIGFuaW1hdGlvbnNcbiAqXG4gKiBUaGUgYEVhc2luZ2AgbW9kdWxlIHByb3ZpZGVzIHNldmVyYWwgcHJlZGVmaW5lZCBhbmltYXRpb25zIHRocm91Z2ggdGhlXG4gKiBmb2xsb3dpbmcgbWV0aG9kczpcbiAqXG4gKiAtIFtgYmFja2BdKGRvY3MvZWFzaW5nLmh0bWwjYmFjaykgcHJvdmlkZXMgYSBzaW1wbGUgYW5pbWF0aW9uIHdoZXJlIHRoZVxuICogICBvYmplY3QgZ29lcyBzbGlnaHRseSBiYWNrIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZFxuICogLSBbYGJvdW5jZWBdKGRvY3MvZWFzaW5nLmh0bWwjYm91bmNlKSBwcm92aWRlcyBhIGJvdW5jaW5nIGFuaW1hdGlvblxuICogLSBbYGVhc2VgXShkb2NzL2Vhc2luZy5odG1sI2Vhc2UpIHByb3ZpZGVzIGEgc2ltcGxlIGluZXJ0aWFsIGFuaW1hdGlvblxuICogLSBbYGVsYXN0aWNgXShkb2NzL2Vhc2luZy5odG1sI2VsYXN0aWMpIHByb3ZpZGVzIGEgc2ltcGxlIHNwcmluZyBpbnRlcmFjdGlvblxuICpcbiAqICMjIyBTdGFuZGFyZCBmdW5jdGlvbnNcbiAqXG4gKiBUaHJlZSBzdGFuZGFyZCBlYXNpbmcgZnVuY3Rpb25zIGFyZSBwcm92aWRlZDpcbiAqXG4gKiAtIFtgbGluZWFyYF0oZG9jcy9lYXNpbmcuaHRtbCNsaW5lYXIpXG4gKiAtIFtgcXVhZGBdKGRvY3MvZWFzaW5nLmh0bWwjcXVhZClcbiAqIC0gW2BjdWJpY2BdKGRvY3MvZWFzaW5nLmh0bWwjY3ViaWMpXG4gKlxuICogVGhlIFtgcG9seWBdKGRvY3MvZWFzaW5nLmh0bWwjcG9seSkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50XG4gKiBxdWFydGljLCBxdWludGljLCBhbmQgb3RoZXIgaGlnaGVyIHBvd2VyIGZ1bmN0aW9ucy5cbiAqXG4gKiAjIyMgQWRkaXRpb25hbCBmdW5jdGlvbnNcbiAqXG4gKiBBZGRpdGlvbmFsIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgbWV0aG9kczpcbiAqXG4gKiAtIFtgYmV6aWVyYF0oZG9jcy9lYXNpbmcuaHRtbCNiZXppZXIpIHByb3ZpZGVzIGEgY3ViaWMgYmV6aWVyIGN1cnZlXG4gKiAtIFtgY2lyY2xlYF0oZG9jcy9lYXNpbmcuaHRtbCNjaXJjbGUpIHByb3ZpZGVzIGEgY2lyY3VsYXIgZnVuY3Rpb25cbiAqIC0gW2BzaW5gXShkb2NzL2Vhc2luZy5odG1sI3NpbikgcHJvdmlkZXMgYSBzaW51c29pZGFsIGZ1bmN0aW9uXG4gKiAtIFtgZXhwYF0oZG9jcy9lYXNpbmcuaHRtbCNleHApIHByb3ZpZGVzIGFuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKlxuICogVGhlIGZvbGxvd2luZyBoZWxwZXJzIGFyZSB1c2VkIHRvIG1vZGlmeSBvdGhlciBlYXNpbmcgZnVuY3Rpb25zLlxuICpcbiAqIC0gW2BpbmBdKGRvY3MvZWFzaW5nLmh0bWwjaW4pIHJ1bnMgYW4gZWFzaW5nIGZ1bmN0aW9uIGZvcndhcmRzXG4gKiAtIFtgaW5PdXRgXShkb2NzL2Vhc2luZy5odG1sI2lub3V0KSBtYWtlcyBhbnkgZWFzaW5nIGZ1bmN0aW9uIHN5bW1ldHJpY2FsXG4gKiAtIFtgb3V0YF0oZG9jcy9lYXNpbmcuaHRtbCNvdXQpIHJ1bnMgYW4gZWFzaW5nIGZ1bmN0aW9uIGJhY2t3YXJkc1xuICovXG5jb25zdCBFYXNpbmcgPSB7XG4gIC8qKlxuICAgKiBBIHN0ZXBwaW5nIGZ1bmN0aW9uLCByZXR1cm5zIDEgZm9yIGFueSBwb3NpdGl2ZSB2YWx1ZSBvZiBgbmAuXG4gICAqL1xuICBzdGVwMChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBuID4gMCA/IDEgOiAwO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBIHN0ZXBwaW5nIGZ1bmN0aW9uLCByZXR1cm5zIDEgaWYgYG5gIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLlxuICAgKi9cbiAgc3RlcDEobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbiA+PSAxID8gMSA6IDA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEEgbGluZWFyIGZ1bmN0aW9uLCBgZih0KSA9IHRgLiBQb3NpdGlvbiBjb3JyZWxhdGVzIHRvIGVsYXBzZWQgdGltZSBvbmUgdG9cbiAgICogb25lLlxuICAgKlxuICAgKiBodHRwOi8vY3ViaWMtYmV6aWVyLmNvbS8jMCwwLDEsMVxuICAgKi9cbiAgbGluZWFyKHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEEgc2ltcGxlIGluZXJ0aWFsIGludGVyYWN0aW9uLCBzaW1pbGFyIHRvIGFuIG9iamVjdCBzbG93bHkgYWNjZWxlcmF0aW5nIHRvXG4gICAqIHNwZWVkLlxuICAgKlxuICAgKiBodHRwOi8vY3ViaWMtYmV6aWVyLmNvbS8jLjQyLDAsMSwxXG4gICAqL1xuICBlYXNlKHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFlYXNlKSB7XG4gICAgICBlYXNlID0gRWFzaW5nLmJlemllcigwLjQyLCAwLCAxLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGVhc2UodCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEEgcXVhZHJhdGljIGZ1bmN0aW9uLCBgZih0KSA9IHQgKiB0YC4gUG9zaXRpb24gZXF1YWxzIHRoZSBzcXVhcmUgb2YgZWxhcHNlZFxuICAgKiB0aW1lLlxuICAgKlxuICAgKiBodHRwOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YWRcbiAgICovXG4gIHF1YWQodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdCAqIHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEEgY3ViaWMgZnVuY3Rpb24sIGBmKHQpID0gdCAqIHQgKiB0YC4gUG9zaXRpb24gZXF1YWxzIHRoZSBjdWJlIG9mIGVsYXBzZWRcbiAgICogdGltZS5cbiAgICpcbiAgICogaHR0cDovL2Vhc2luZ3MubmV0LyNlYXNlSW5DdWJpY1xuICAgKi9cbiAgY3ViaWModDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdCAqIHQgKiB0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBBIHBvd2VyIGZ1bmN0aW9uLiBQb3NpdGlvbiBpcyBlcXVhbCB0byB0aGUgTnRoIHBvd2VyIG9mIGVsYXBzZWQgdGltZS5cbiAgICpcbiAgICogbiA9IDQ6IGh0dHA6Ly9lYXNpbmdzLm5ldC8jZWFzZUluUXVhcnRcbiAgICogbiA9IDU6IGh0dHA6Ly9lYXNpbmdzLm5ldC8jZWFzZUluUXVpbnRcbiAgICovXG4gIHBvbHkobjogbnVtYmVyKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gKHQ6IG51bWJlcikgPT4gTWF0aC5wb3codCwgbik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEEgc2ludXNvaWRhbCBmdW5jdGlvbi5cbiAgICpcbiAgICogaHR0cDovL2Vhc2luZ3MubmV0LyNlYXNlSW5TaW5lXG4gICAqL1xuICBzaW4odDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMSAtIE1hdGguY29zKCh0ICogTWF0aC5QSSkgLyAyKTtcbiAgfSxcblxuICAvKipcbiAgICogQSBjaXJjdWxhciBmdW5jdGlvbi5cbiAgICpcbiAgICogaHR0cDovL2Vhc2luZ3MubmV0LyNlYXNlSW5DaXJjXG4gICAqL1xuICBjaXJjbGUodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gdCAqIHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBbiBleHBvbmVudGlhbCBmdW5jdGlvbi5cbiAgICpcbiAgICogaHR0cDovL2Vhc2luZ3MubmV0LyNlYXNlSW5FeHBvXG4gICAqL1xuICBleHAodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKTtcbiAgfSxcblxuICAvKipcbiAgICogQSBzaW1wbGUgZWxhc3RpYyBpbnRlcmFjdGlvbiwgc2ltaWxhciB0byBhIHNwcmluZyBvc2NpbGxhdGluZyBiYWNrIGFuZFxuICAgKiBmb3J0aC5cbiAgICpcbiAgICogRGVmYXVsdCBib3VuY2luZXNzIGlzIDEsIHdoaWNoIG92ZXJzaG9vdHMgYSBsaXR0bGUgYml0IG9uY2UuIDAgYm91bmNpbmVzc1xuICAgKiBkb2Vzbid0IG92ZXJzaG9vdCBhdCBhbGwsIGFuZCBib3VuY2luZXNzIG9mIE4gPiAxIHdpbGwgb3ZlcnNob290IGFib3V0IE5cbiAgICogdGltZXMuXG4gICAqXG4gICAqIGh0dHA6Ly9lYXNpbmdzLm5ldC8jZWFzZUluRWxhc3RpY1xuICAgKi9cbiAgZWxhc3RpYyhib3VuY2luZXNzOiBudW1iZXIgPSAxKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBwID0gYm91bmNpbmVzcyAqIE1hdGguUEk7XG4gICAgcmV0dXJuIHQgPT4gMSAtIE1hdGgucG93KE1hdGguY29zKCh0ICogTWF0aC5QSSkgLyAyKSwgMykgKiBNYXRoLmNvcyh0ICogcCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVzZSB3aXRoIGBBbmltYXRlZC5wYXJhbGxlbCgpYCB0byBjcmVhdGUgYSBzaW1wbGUgZWZmZWN0IHdoZXJlIHRoZSBvYmplY3RcbiAgICogYW5pbWF0ZXMgYmFjayBzbGlnaHRseSBhcyB0aGUgYW5pbWF0aW9uIHN0YXJ0cy5cbiAgICpcbiAgICogaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQmFja1xuICAgKi9cbiAgYmFjayhzOiBudW1iZXIgPSAxLjcwMTU4KTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdCA9PiB0ICogdCAqICgocyArIDEpICogdCAtIHMpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIHNpbXBsZSBib3VuY2luZyBlZmZlY3QuXG4gICAqXG4gICAqIGh0dHA6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQm91bmNlXG4gICAqL1xuICBib3VuY2UodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodCA8IDEgLyAyLjc1KSB7XG4gICAgICByZXR1cm4gNy41NjI1ICogdCAqIHQ7XG4gICAgfVxuXG4gICAgaWYgKHQgPCAyIC8gMi43NSkge1xuICAgICAgY29uc3QgdDIgPSB0IC0gMS41IC8gMi43NTtcbiAgICAgIHJldHVybiA3LjU2MjUgKiB0MiAqIHQyICsgMC43NTtcbiAgICB9XG5cbiAgICBpZiAodCA8IDIuNSAvIDIuNzUpIHtcbiAgICAgIGNvbnN0IHQyID0gdCAtIDIuMjUgLyAyLjc1O1xuICAgICAgcmV0dXJuIDcuNTYyNSAqIHQyICogdDIgKyAwLjkzNzU7XG4gICAgfVxuXG4gICAgY29uc3QgdDIgPSB0IC0gMi42MjUgLyAyLjc1O1xuICAgIHJldHVybiA3LjU2MjUgKiB0MiAqIHQyICsgMC45ODQzNzU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgY3ViaWMgYmV6aWVyIGN1cnZlLCBlcXVpdmFsZW50IHRvIENTUyBUcmFuc2l0aW9ucydcbiAgICogYHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uYC5cbiAgICpcbiAgICogQSB1c2VmdWwgdG9vbCB0byB2aXN1YWxpemUgY3ViaWMgYmV6aWVyIGN1cnZlcyBjYW4gYmUgZm91bmQgYXRcbiAgICogaHR0cDovL2N1YmljLWJlemllci5jb20vXG4gICAqL1xuICBiZXppZXIoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBfYmV6aWVyID0gcmVxdWlyZSgnLi9iZXppZXInKS5kZWZhdWx0O1xuICAgIHJldHVybiBfYmV6aWVyKHgxLCB5MSwgeDIsIHkyKTtcbiAgfSxcblxuICAvKipcbiAgICogUnVucyBhbiBlYXNpbmcgZnVuY3Rpb24gZm9yd2FyZHMuXG4gICAqL1xuICBpbihlYXNpbmc6ICh0OiBudW1iZXIpID0+IG51bWJlcik6ICh0OiBudW1iZXIpID0+IG51bWJlciB7XG4gICAgcmV0dXJuIGVhc2luZztcbiAgfSxcblxuICAvKipcbiAgICogUnVucyBhbiBlYXNpbmcgZnVuY3Rpb24gYmFja3dhcmRzLlxuICAgKi9cbiAgb3V0KGVhc2luZzogKHQ6IG51bWJlcikgPT4gbnVtYmVyKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdCA9PiAxIC0gZWFzaW5nKDEgLSB0KTtcbiAgfSxcblxuICAvKipcbiAgICogTWFrZXMgYW55IGVhc2luZyBmdW5jdGlvbiBzeW1tZXRyaWNhbC4gVGhlIGVhc2luZyBmdW5jdGlvbiB3aWxsIHJ1blxuICAgKiBmb3J3YXJkcyBmb3IgaGFsZiBvZiB0aGUgZHVyYXRpb24sIHRoZW4gYmFja3dhcmRzIGZvciB0aGUgcmVzdCBvZiB0aGVcbiAgICogZHVyYXRpb24uXG4gICAqL1xuICBpbk91dChlYXNpbmc6ICh0OiBudW1iZXIpID0+IG51bWJlcik6ICh0OiBudW1iZXIpID0+IG51bWJlciB7XG4gICAgcmV0dXJuIHQgPT4ge1xuICAgICAgaWYgKHQgPCAwLjUpIHtcbiAgICAgICAgcmV0dXJuIGVhc2luZyh0ICogMikgLyAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDEgLSBlYXNpbmcoKDEgLSB0KSAqIDIpIC8gMjtcbiAgICB9O1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRWFzaW5nO1xuIiwiLyoqXG4gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbi8qKlxuICogQmV6aWVyRWFzaW5nIC0gdXNlIGJlemllciBjdXJ2ZSBmb3IgdHJhbnNpdGlvbiBlYXNpbmcgZnVuY3Rpb25cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ncmUvYmV6aWVyLWVhc2luZ1xuICogQGNvcHlyaWdodCAyMDE0LTIwMTUgR2HDq3RhbiBSZW5hdWRlYXUuIE1JVCBMaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlc2UgdmFsdWVzIGFyZSBlc3RhYmxpc2hlZCBieSBlbXBpcmljaXNtIHdpdGggdGVzdHMgKHRyYWRlb2ZmOiBwZXJmb3JtYW5jZSBWUyBwcmVjaXNpb24pXG5jb25zdCBORVdUT05fSVRFUkFUSU9OUyA9IDQ7XG5jb25zdCBORVdUT05fTUlOX1NMT1BFID0gMC4wMDE7XG5jb25zdCBTVUJESVZJU0lPTl9QUkVDSVNJT04gPSAwLjAwMDAwMDE7XG5jb25zdCBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyA9IDEwO1xuXG5jb25zdCBrU3BsaW5lVGFibGVTaXplID0gMTE7XG5jb25zdCBrU2FtcGxlU3RlcFNpemUgPSAxLjAgLyAoa1NwbGluZVRhYmxlU2l6ZSAtIDEuMCk7XG5cbmNvbnN0IGZsb2F0MzJBcnJheVN1cHBvcnRlZCA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIEEoYUExOiBudW1iZXIsIGFBMjogbnVtYmVyKSB7XG4gIHJldHVybiAxLjAgLSAzLjAgKiBhQTIgKyAzLjAgKiBhQTE7XG59XG5mdW5jdGlvbiBCKGFBMTogbnVtYmVyLCBhQTI6IG51bWJlcikge1xuICByZXR1cm4gMy4wICogYUEyIC0gNi4wICogYUExO1xufVxuZnVuY3Rpb24gQyhhQTE6IG51bWJlcikge1xuICByZXR1cm4gMy4wICogYUExO1xufVxuXG4vLyBSZXR1cm5zIHgodCkgZ2l2ZW4gdCwgeDEsIGFuZCB4Miwgb3IgeSh0KSBnaXZlbiB0LCB5MSwgYW5kIHkyLlxuZnVuY3Rpb24gY2FsY0JlemllcihhVDogbnVtYmVyLCBhQTE6IG51bWJlciwgYUEyOiBudW1iZXIpIHtcbiAgcmV0dXJuICgoQShhQTEsIGFBMikgKiBhVCArIEIoYUExLCBhQTIpKSAqIGFUICsgQyhhQTEpKSAqIGFUO1xufVxuXG4vLyBSZXR1cm5zIGR4L2R0IGdpdmVuIHQsIHgxLCBhbmQgeDIsIG9yIGR5L2R0IGdpdmVuIHQsIHkxLCBhbmQgeTIuXG5mdW5jdGlvbiBnZXRTbG9wZShhVDogbnVtYmVyLCBhQTE6IG51bWJlciwgYUEyOiBudW1iZXIpIHtcbiAgcmV0dXJuIDMuMCAqIEEoYUExLCBhQTIpICogYVQgKiBhVCArIDIuMCAqIEIoYUExLCBhQTIpICogYVQgKyBDKGFBMSk7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVN1YmRpdmlkZShcbiAgYVg6IG51bWJlcixcbiAgX2FBOiBudW1iZXIsXG4gIF9hQjogbnVtYmVyLFxuICBtWDE6IG51bWJlcixcbiAgbVgyOiBudW1iZXIsXG4pIHtcbiAgbGV0IGN1cnJlbnRYLFxuICAgIGN1cnJlbnRULFxuICAgIGkgPSAwLFxuICAgIGFBID0gX2FBLFxuICAgIGFCID0gX2FCO1xuICBkbyB7XG4gICAgY3VycmVudFQgPSBhQSArIChhQiAtIGFBKSAvIDIuMDtcbiAgICBjdXJyZW50WCA9IGNhbGNCZXppZXIoY3VycmVudFQsIG1YMSwgbVgyKSAtIGFYO1xuICAgIGlmIChjdXJyZW50WCA+IDAuMCkge1xuICAgICAgYUIgPSBjdXJyZW50VDtcbiAgICB9IGVsc2Uge1xuICAgICAgYUEgPSBjdXJyZW50VDtcbiAgICB9XG4gIH0gd2hpbGUgKFxuICAgIE1hdGguYWJzKGN1cnJlbnRYKSA+IFNVQkRJVklTSU9OX1BSRUNJU0lPTiAmJlxuICAgICsraSA8IFNVQkRJVklTSU9OX01BWF9JVEVSQVRJT05TXG4gICk7XG4gIHJldHVybiBjdXJyZW50VDtcbn1cblxuZnVuY3Rpb24gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoXG4gIGFYOiBudW1iZXIsXG4gIF9hR3Vlc3NUOiBudW1iZXIsXG4gIG1YMTogbnVtYmVyLFxuICBtWDI6IG51bWJlcixcbikge1xuICBsZXQgYUd1ZXNzVCA9IF9hR3Vlc3NUO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE5FV1RPTl9JVEVSQVRJT05TOyArK2kpIHtcbiAgICBjb25zdCBjdXJyZW50U2xvcGUgPSBnZXRTbG9wZShhR3Vlc3NULCBtWDEsIG1YMik7XG4gICAgaWYgKGN1cnJlbnRTbG9wZSA9PT0gMC4wKSB7XG4gICAgICByZXR1cm4gYUd1ZXNzVDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIG1YMSwgbVgyKSAtIGFYO1xuICAgIGFHdWVzc1QgLT0gY3VycmVudFggLyBjdXJyZW50U2xvcGU7XG4gIH1cbiAgcmV0dXJuIGFHdWVzc1Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJlemllcihcbiAgbVgxOiBudW1iZXIsXG4gIG1ZMTogbnVtYmVyLFxuICBtWDI6IG51bWJlcixcbiAgbVkyOiBudW1iZXIsXG4pOiAoeDogbnVtYmVyKSA9PiBudW1iZXIge1xuICBpZiAoIShtWDEgPj0gMCAmJiBtWDEgPD0gMSAmJiBtWDIgPj0gMCAmJiBtWDIgPD0gMSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JlemllciB4IHZhbHVlcyBtdXN0IGJlIGluIFswLCAxXSByYW5nZScpO1xuICB9XG5cbiAgLy8gUHJlY29tcHV0ZSBzYW1wbGVzIHRhYmxlXG4gIGNvbnN0IHNhbXBsZVZhbHVlcyA9IGZsb2F0MzJBcnJheVN1cHBvcnRlZFxuICAgID8gbmV3IEZsb2F0MzJBcnJheShrU3BsaW5lVGFibGVTaXplKVxuICAgIDogbmV3IEFycmF5PG51bWJlcj4oa1NwbGluZVRhYmxlU2l6ZSk7XG4gIGlmIChtWDEgIT09IG1ZMSB8fCBtWDIgIT09IG1ZMikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga1NwbGluZVRhYmxlU2l6ZTsgKytpKSB7XG4gICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBjYWxjQmV6aWVyKGkgKiBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRURm9yWChhWDogbnVtYmVyKSB7XG4gICAgbGV0IGludGVydmFsU3RhcnQgPSAwLjA7XG4gICAgbGV0IGN1cnJlbnRTYW1wbGUgPSAxO1xuICAgIGNvbnN0IGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcblxuICAgIGZvciAoXG4gICAgICA7XG4gICAgICBjdXJyZW50U2FtcGxlICE9PSBsYXN0U2FtcGxlICYmIHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSA8PSBhWDtcbiAgICAgICsrY3VycmVudFNhbXBsZVxuICAgICkge1xuICAgICAgaW50ZXJ2YWxTdGFydCArPSBrU2FtcGxlU3RlcFNpemU7XG4gICAgfVxuICAgIC0tY3VycmVudFNhbXBsZTtcblxuICAgIC8vIEludGVycG9sYXRlIHRvIHByb3ZpZGUgYW4gaW5pdGlhbCBndWVzcyBmb3IgdFxuICAgIGNvbnN0IGRpc3QgPVxuICAgICAgKGFYIC0gc2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSAvXG4gICAgICAoc2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGUgKyAxXSAtIHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSk7XG4gICAgY29uc3QgZ3Vlc3NGb3JUID0gaW50ZXJ2YWxTdGFydCArIGRpc3QgKiBrU2FtcGxlU3RlcFNpemU7XG5cbiAgICBjb25zdCBpbml0aWFsU2xvcGUgPSBnZXRTbG9wZShndWVzc0ZvclQsIG1YMSwgbVgyKTtcbiAgICBpZiAoaW5pdGlhbFNsb3BlID49IE5FV1RPTl9NSU5fU0xPUEUpIHtcbiAgICAgIHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JULCBtWDEsIG1YMik7XG4gICAgfSBlbHNlIGlmIChpbml0aWFsU2xvcGUgPT09IDAuMCkge1xuICAgICAgcmV0dXJuIGd1ZXNzRm9yVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJpbmFyeVN1YmRpdmlkZShcbiAgICAgICAgYVgsXG4gICAgICAgIGludGVydmFsU3RhcnQsXG4gICAgICAgIGludGVydmFsU3RhcnQgKyBrU2FtcGxlU3RlcFNpemUsXG4gICAgICAgIG1YMSxcbiAgICAgICAgbVgyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gQmV6aWVyRWFzaW5nKHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG1YMSA9PT0gbVkxICYmIG1YMiA9PT0gbVkyKSB7XG4gICAgICByZXR1cm4geDsgLy8gbGluZWFyXG4gICAgfVxuICAgIC8vIEJlY2F1c2UgSmF2YVNjcmlwdCBudW1iZXIgYXJlIGltcHJlY2lzZSwgd2Ugc2hvdWxkIGd1YXJhbnRlZSB0aGUgZXh0cmVtZXMgYXJlIHJpZ2h0LlxuICAgIGlmICh4ID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKHggPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gY2FsY0JlemllcihnZXRURm9yWCh4KSwgbVkxLCBtWTIpO1xuICB9O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1Db25maWd9IGZyb20gJy4uL0FuaW1hdGVkUGxhdGZvcm1Db25maWcnO1xuXG5pbXBvcnQgQW5pbWF0ZWRWYWx1ZSBmcm9tICcuL0FuaW1hdGVkVmFsdWUnO1xuaW1wb3J0IEFuaW1hdGVkV2l0aENoaWxkcmVuIGZyb20gJy4vQW5pbWF0ZWRXaXRoQ2hpbGRyZW4nO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG5leHBvcnQgdHlwZSBBbmltYXRlZFZhbHVlWFlDb25maWcgPSAkUmVhZE9ubHk8e1xuICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG59PjtcbnR5cGUgVmFsdWVYWUxpc3RlbmVyQ2FsbGJhY2sgPSAodmFsdWU6IHt4OiBudW1iZXIsIHk6IG51bWJlciwgLi4ufSkgPT4gbWl4ZWQ7XG5cbmxldCBfdW5pcXVlSWQgPSAxO1xuXG4vKipcbiAqIDJEIFZhbHVlIGZvciBkcml2aW5nIDJEIGFuaW1hdGlvbnMsIHN1Y2ggYXMgcGFuIGdlc3R1cmVzLiBBbG1vc3QgaWRlbnRpY2FsXG4gKiBBUEkgdG8gbm9ybWFsIGBBbmltYXRlZC5WYWx1ZWAsIGJ1dCBtdWx0aXBsZXhlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVleHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRWYWx1ZVhZIGV4dGVuZHMgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4ge1xuICB4OiBBbmltYXRlZFZhbHVlO1xuICB5OiBBbmltYXRlZFZhbHVlO1xuICBfbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgeDogc3RyaW5nLFxuICAgICAgeTogc3RyaW5nLFxuICAgICAgLi4uXG4gICAgfSxcbiAgICAuLi5cbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZUluPzogP3tcbiAgICAgICt4OiBudW1iZXIgfCBBbmltYXRlZFZhbHVlLFxuICAgICAgK3k6IG51bWJlciB8IEFuaW1hdGVkVmFsdWUsXG4gICAgICAuLi5cbiAgICB9LFxuICAgIGNvbmZpZz86ID9BbmltYXRlZFZhbHVlWFlDb25maWcsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgdmFsdWU6IGFueSA9IHZhbHVlSW4gfHwge3g6IDAsIHk6IDB9OyAvLyBAZmxvd2ZpeG1lOiBzaG91bGRuJ3QgbmVlZCBgOiBhbnlgXG4gICAgaWYgKHR5cGVvZiB2YWx1ZS54ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUueSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMueCA9IG5ldyBBbmltYXRlZFZhbHVlKHZhbHVlLngpO1xuICAgICAgdGhpcy55ID0gbmV3IEFuaW1hdGVkVmFsdWUodmFsdWUueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdmFsdWUueCBpbnN0YW5jZW9mIEFuaW1hdGVkVmFsdWUgJiYgdmFsdWUueSBpbnN0YW5jZW9mIEFuaW1hdGVkVmFsdWUsXG4gICAgICAgICdBbmltYXRlZFZhbHVlWFkgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIG9iamVjdCBvZiBudW1iZXJzIG9yICcgK1xuICAgICAgICAgICdBbmltYXRlZFZhbHVlcy4nLFxuICAgICAgKTtcbiAgICAgIHRoaXMueCA9IHZhbHVlLng7XG4gICAgICB0aGlzLnkgPSB2YWx1ZS55O1xuICAgIH1cbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy51c2VOYXRpdmVEcml2ZXIpIHtcbiAgICAgIHRoaXMuX19tYWtlTmF0aXZlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpcmVjdGx5IHNldCB0aGUgdmFsdWUuIFRoaXMgd2lsbCBzdG9wIGFueSBhbmltYXRpb25zIHJ1bm5pbmcgb24gdGhlIHZhbHVlXG4gICAqIGFuZCB1cGRhdGUgYWxsIHRoZSBib3VuZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVleHkjc2V0dmFsdWVcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlOiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIC4uLn0pIHtcbiAgICB0aGlzLnguc2V0VmFsdWUodmFsdWUueCk7XG4gICAgdGhpcy55LnNldFZhbHVlKHZhbHVlLnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYW4gb2Zmc2V0IHRoYXQgaXMgYXBwbGllZCBvbiB0b3Agb2Ygd2hhdGV2ZXIgdmFsdWUgaXMgc2V0LCB3aGV0aGVyXG4gICAqIHZpYSBgc2V0VmFsdWVgLCBhbiBhbmltYXRpb24sIG9yIGBBbmltYXRlZC5ldmVudGAuIFVzZWZ1bCBmb3IgY29tcGVuc2F0aW5nXG4gICAqIHRoaW5ncyBsaWtlIHRoZSBzdGFydCBvZiBhIHBhbiBnZXN0dXJlLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVleHkjc2V0b2Zmc2V0XG4gICAqL1xuICBzZXRPZmZzZXQob2Zmc2V0OiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIC4uLn0pIHtcbiAgICB0aGlzLnguc2V0T2Zmc2V0KG9mZnNldC54KTtcbiAgICB0aGlzLnkuc2V0T2Zmc2V0KG9mZnNldC55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgdGhlIG9mZnNldCB2YWx1ZSBpbnRvIHRoZSBiYXNlIHZhbHVlIGFuZCByZXNldHMgdGhlIG9mZnNldCB0byB6ZXJvLlxuICAgKiBUaGUgZmluYWwgb3V0cHV0IG9mIHRoZSB2YWx1ZSBpcyB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkdmFsdWV4eSNmbGF0dGVub2Zmc2V0XG4gICAqL1xuICBmbGF0dGVuT2Zmc2V0KCk6IHZvaWQge1xuICAgIHRoaXMueC5mbGF0dGVuT2Zmc2V0KCk7XG4gICAgdGhpcy55LmZsYXR0ZW5PZmZzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvZmZzZXQgdmFsdWUgdG8gdGhlIGJhc2UgdmFsdWUsIGFuZCByZXNldHMgdGhlIGJhc2UgdmFsdWUgdG9cbiAgICogemVyby4gVGhlIGZpbmFsIG91dHB1dCBvZiB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVleHkjZXh0cmFjdG9mZnNldFxuICAgKi9cbiAgZXh0cmFjdE9mZnNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnguZXh0cmFjdE9mZnNldCgpO1xuICAgIHRoaXMueS5leHRyYWN0T2Zmc2V0KCk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIC4uLlxuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogdGhpcy54Ll9fZ2V0VmFsdWUoKSxcbiAgICAgIHk6IHRoaXMueS5fX2dldFZhbHVlKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBhbnkgYW5pbWF0aW9uIGFuZCByZXNldHMgdGhlIHZhbHVlIHRvIGl0cyBvcmlnaW5hbC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWR2YWx1ZXh5I3Jlc2V0YW5pbWF0aW9uXG4gICAqL1xuICByZXNldEFuaW1hdGlvbihcbiAgICBjYWxsYmFjaz86ICh2YWx1ZToge3g6IG51bWJlciwgeTogbnVtYmVyLCAuLi59KSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLngucmVzZXRBbmltYXRpb24oKTtcbiAgICB0aGlzLnkucmVzZXRBbmltYXRpb24oKTtcbiAgICBjYWxsYmFjayAmJiBjYWxsYmFjayh0aGlzLl9fZ2V0VmFsdWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgYW55IHJ1bm5pbmcgYW5pbWF0aW9uIG9yIHRyYWNraW5nLiBgY2FsbGJhY2tgIGlzIGludm9rZWQgd2l0aCB0aGVcbiAgICogZmluYWwgdmFsdWUgYWZ0ZXIgc3RvcHBpbmcgdGhlIGFuaW1hdGlvbiwgd2hpY2ggaXMgdXNlZnVsIGZvciB1cGRhdGluZ1xuICAgKiBzdGF0ZSB0byBtYXRjaCB0aGUgYW5pbWF0aW9uIHBvc2l0aW9uIHdpdGggbGF5b3V0LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVleHkjc3RvcGFuaW1hdGlvblxuICAgKi9cbiAgc3RvcEFuaW1hdGlvbihjYWxsYmFjaz86ICh2YWx1ZToge3g6IG51bWJlciwgeTogbnVtYmVyLCAuLi59KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy54LnN0b3BBbmltYXRpb24oKTtcbiAgICB0aGlzLnkuc3RvcEFuaW1hdGlvbigpO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHRoaXMuX19nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGFzeW5jaHJvbm91cyBsaXN0ZW5lciB0byB0aGUgdmFsdWUgc28geW91IGNhbiBvYnNlcnZlIHVwZGF0ZXMgZnJvbVxuICAgKiBhbmltYXRpb25zLiAgVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25vdXNseSByZWFkXG4gICAqIHRoZSB2YWx1ZSBiZWNhdXNlIGl0IG1pZ2h0IGJlIGRyaXZlbiBuYXRpdmVseS5cbiAgICpcbiAgICogUmV0dXJucyBhIHN0cmluZyB0aGF0IHNlcnZlcyBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGUgbGlzdGVuZXIuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkdmFsdWV4eSNhZGRsaXN0ZW5lclxuICAgKi9cbiAgYWRkTGlzdGVuZXIoY2FsbGJhY2s6IFZhbHVlWFlMaXN0ZW5lckNhbGxiYWNrKTogc3RyaW5nIHtcbiAgICBjb25zdCBpZCA9IFN0cmluZyhfdW5pcXVlSWQrKyk7XG4gICAgY29uc3Qgam9pbnRDYWxsYmFjayA9ICh7dmFsdWU6IG51bWJlcn06IGFueSkgPT4ge1xuICAgICAgY2FsbGJhY2sodGhpcy5fX2dldFZhbHVlKCkpO1xuICAgIH07XG4gICAgdGhpcy5fbGlzdGVuZXJzW2lkXSA9IHtcbiAgICAgIHg6IHRoaXMueC5hZGRMaXN0ZW5lcihqb2ludENhbGxiYWNrKSxcbiAgICAgIHk6IHRoaXMueS5hZGRMaXN0ZW5lcihqb2ludENhbGxiYWNrKSxcbiAgICB9O1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIGEgbGlzdGVuZXIuIFRoZSBgaWRgIHBhcmFtIHNoYWxsIG1hdGNoIHRoZSBpZGVudGlmaWVyXG4gICAqIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgYGFkZExpc3RlbmVyKClgLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVleHkjcmVtb3ZlbGlzdGVuZXJcbiAgICovXG4gIHJlbW92ZUxpc3RlbmVyKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLngucmVtb3ZlTGlzdGVuZXIodGhpcy5fbGlzdGVuZXJzW2lkXS54KTtcbiAgICB0aGlzLnkucmVtb3ZlTGlzdGVuZXIodGhpcy5fbGlzdGVuZXJzW2lkXS55KTtcbiAgICBkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZHZhbHVleHkjcmVtb3ZlYWxsbGlzdGVuZXJzXG4gICAqL1xuICByZW1vdmVBbGxMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy54LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHRoaXMueS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBge3gsIHl9YCBpbnRvIGB7bGVmdCwgdG9wfWAgZm9yIHVzZSBpbiBzdHlsZS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYW5pbWF0ZWR2YWx1ZXh5I2dldGxheW91dFxuICAgKi9cbiAgZ2V0TGF5b3V0KCk6IHtba2V5OiBzdHJpbmddOiBBbmltYXRlZFZhbHVlLCAuLi59IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogdGhpcy54LFxuICAgICAgdG9wOiB0aGlzLnksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBge3gsIHl9YCBpbnRvIGEgdXNlYWJsZSB0cmFuc2xhdGlvbiB0cmFuc2Zvcm0uXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FuaW1hdGVkdmFsdWV4eSNnZXR0cmFuc2xhdGV0cmFuc2Zvcm1cbiAgICovXG4gIGdldFRyYW5zbGF0ZVRyYW5zZm9ybSgpOiBBcnJheTx7W2tleTogc3RyaW5nXTogQW5pbWF0ZWRWYWx1ZSwgLi4ufT4ge1xuICAgIHJldHVybiBbe3RyYW5zbGF0ZVg6IHRoaXMueH0sIHt0cmFuc2xhdGVZOiB0aGlzLnl9XTtcbiAgfVxuXG4gIF9fYXR0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMueC5fX2FkZENoaWxkKHRoaXMpO1xuICAgIHRoaXMueS5fX2FkZENoaWxkKHRoaXMpO1xuICAgIHN1cGVyLl9fYXR0YWNoKCk7XG4gIH1cblxuICBfX2RldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnguX19yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICB0aGlzLnkuX19yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICBzdXBlci5fX2RldGFjaCgpO1xuICB9XG5cbiAgX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnOiA/UGxhdGZvcm1Db25maWcpIHtcbiAgICB0aGlzLnguX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICB0aGlzLnkuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICBzdXBlci5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybUNvbmZpZ30gZnJvbSAnLi4vQW5pbWF0ZWRQbGF0Zm9ybUNvbmZpZyc7XG5pbXBvcnQgdHlwZSBBbmltYXRlZEludGVycG9sYXRpb24gZnJvbSAnLi4vbm9kZXMvQW5pbWF0ZWRJbnRlcnBvbGF0aW9uJztcbmltcG9ydCB0eXBlIEFuaW1hdGVkVmFsdWUgZnJvbSAnLi4vbm9kZXMvQW5pbWF0ZWRWYWx1ZSc7XG5pbXBvcnQgdHlwZSBBbmltYXRlZFZhbHVlWFkgZnJvbSAnLi4vbm9kZXMvQW5pbWF0ZWRWYWx1ZVhZJztcbmltcG9ydCB0eXBlIHtBbmltYXRpb25Db25maWcsIEVuZENhbGxiYWNrfSBmcm9tICcuL0FuaW1hdGlvbic7XG5cbmltcG9ydCBOYXRpdmVBbmltYXRlZEhlbHBlciBmcm9tICcuLi9OYXRpdmVBbmltYXRlZEhlbHBlcic7XG5pbXBvcnQgQW5pbWF0ZWRDb2xvciBmcm9tICcuLi9ub2Rlcy9BbmltYXRlZENvbG9yJztcbmltcG9ydCAqIGFzIFNwcmluZ0NvbmZpZyBmcm9tICcuLi9TcHJpbmdDb25maWcnO1xuaW1wb3J0IEFuaW1hdGlvbiBmcm9tICcuL0FuaW1hdGlvbic7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5cbmV4cG9ydCB0eXBlIFNwcmluZ0FuaW1hdGlvbkNvbmZpZyA9IHtcbiAgLi4uQW5pbWF0aW9uQ29uZmlnLFxuICB0b1ZhbHVlOlxuICAgIHwgbnVtYmVyXG4gICAgfCBBbmltYXRlZFZhbHVlXG4gICAgfCB7XG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgeTogbnVtYmVyLFxuICAgICAgICAuLi5cbiAgICAgIH1cbiAgICB8IEFuaW1hdGVkVmFsdWVYWVxuICAgIHwge1xuICAgICAgICByOiBudW1iZXIsXG4gICAgICAgIGc6IG51bWJlcixcbiAgICAgICAgYjogbnVtYmVyLFxuICAgICAgICBhOiBudW1iZXIsXG4gICAgICAgIC4uLlxuICAgICAgfVxuICAgIHwgQW5pbWF0ZWRDb2xvclxuICAgIHwgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uPG51bWJlcj4sXG4gIG92ZXJzaG9vdENsYW1waW5nPzogYm9vbGVhbixcbiAgcmVzdERpc3BsYWNlbWVudFRocmVzaG9sZD86IG51bWJlcixcbiAgcmVzdFNwZWVkVGhyZXNob2xkPzogbnVtYmVyLFxuICB2ZWxvY2l0eT86XG4gICAgfCBudW1iZXJcbiAgICB8IHtcbiAgICAgICAgeDogbnVtYmVyLFxuICAgICAgICB5OiBudW1iZXIsXG4gICAgICAgIC4uLlxuICAgICAgfSxcbiAgYm91bmNpbmVzcz86IG51bWJlcixcbiAgc3BlZWQ/OiBudW1iZXIsXG4gIHRlbnNpb24/OiBudW1iZXIsXG4gIGZyaWN0aW9uPzogbnVtYmVyLFxuICBzdGlmZm5lc3M/OiBudW1iZXIsXG4gIGRhbXBpbmc/OiBudW1iZXIsXG4gIG1hc3M/OiBudW1iZXIsXG4gIGRlbGF5PzogbnVtYmVyLFxufTtcblxuZXhwb3J0IHR5cGUgU3ByaW5nQW5pbWF0aW9uQ29uZmlnU2luZ2xlID0ge1xuICAuLi5BbmltYXRpb25Db25maWcsXG4gIHRvVmFsdWU6IG51bWJlcixcbiAgb3ZlcnNob290Q2xhbXBpbmc/OiBib29sZWFuLFxuICByZXN0RGlzcGxhY2VtZW50VGhyZXNob2xkPzogbnVtYmVyLFxuICByZXN0U3BlZWRUaHJlc2hvbGQ/OiBudW1iZXIsXG4gIHZlbG9jaXR5PzogbnVtYmVyLFxuICBib3VuY2luZXNzPzogbnVtYmVyLFxuICBzcGVlZD86IG51bWJlcixcbiAgdGVuc2lvbj86IG51bWJlcixcbiAgZnJpY3Rpb24/OiBudW1iZXIsXG4gIHN0aWZmbmVzcz86IG51bWJlcixcbiAgZGFtcGluZz86IG51bWJlcixcbiAgbWFzcz86IG51bWJlcixcbiAgZGVsYXk/OiBudW1iZXIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcHJpbmdBbmltYXRpb24gZXh0ZW5kcyBBbmltYXRpb24ge1xuICBfb3ZlcnNob290Q2xhbXBpbmc6IGJvb2xlYW47XG4gIF9yZXN0RGlzcGxhY2VtZW50VGhyZXNob2xkOiBudW1iZXI7XG4gIF9yZXN0U3BlZWRUaHJlc2hvbGQ6IG51bWJlcjtcbiAgX2xhc3RWZWxvY2l0eTogbnVtYmVyO1xuICBfc3RhcnRQb3NpdGlvbjogbnVtYmVyO1xuICBfbGFzdFBvc2l0aW9uOiBudW1iZXI7XG4gIF9mcm9tVmFsdWU6IG51bWJlcjtcbiAgX3RvVmFsdWU6IG51bWJlcjtcbiAgX3N0aWZmbmVzczogbnVtYmVyO1xuICBfZGFtcGluZzogbnVtYmVyO1xuICBfbWFzczogbnVtYmVyO1xuICBfaW5pdGlhbFZlbG9jaXR5OiBudW1iZXI7XG4gIF9kZWxheTogbnVtYmVyO1xuICBfdGltZW91dDogYW55O1xuICBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIF9sYXN0VGltZTogbnVtYmVyO1xuICBfZnJhbWVUaW1lOiBudW1iZXI7XG4gIF9vblVwZGF0ZTogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG4gIF9hbmltYXRpb25GcmFtZTogYW55O1xuICBfdXNlTmF0aXZlRHJpdmVyOiBib29sZWFuO1xuICBfcGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNwcmluZ0FuaW1hdGlvbkNvbmZpZ1NpbmdsZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9vdmVyc2hvb3RDbGFtcGluZyA9IGNvbmZpZy5vdmVyc2hvb3RDbGFtcGluZyA/PyBmYWxzZTtcbiAgICB0aGlzLl9yZXN0RGlzcGxhY2VtZW50VGhyZXNob2xkID0gY29uZmlnLnJlc3REaXNwbGFjZW1lbnRUaHJlc2hvbGQgPz8gMC4wMDE7XG4gICAgdGhpcy5fcmVzdFNwZWVkVGhyZXNob2xkID0gY29uZmlnLnJlc3RTcGVlZFRocmVzaG9sZCA/PyAwLjAwMTtcbiAgICB0aGlzLl9pbml0aWFsVmVsb2NpdHkgPSBjb25maWcudmVsb2NpdHkgPz8gMDtcbiAgICB0aGlzLl9sYXN0VmVsb2NpdHkgPSBjb25maWcudmVsb2NpdHkgPz8gMDtcbiAgICB0aGlzLl90b1ZhbHVlID0gY29uZmlnLnRvVmFsdWU7XG4gICAgdGhpcy5fZGVsYXkgPSBjb25maWcuZGVsYXkgPz8gMDtcbiAgICB0aGlzLl91c2VOYXRpdmVEcml2ZXIgPSBOYXRpdmVBbmltYXRlZEhlbHBlci5zaG91bGRVc2VOYXRpdmVEcml2ZXIoY29uZmlnKTtcbiAgICB0aGlzLl9wbGF0Zm9ybUNvbmZpZyA9IGNvbmZpZy5wbGF0Zm9ybUNvbmZpZztcbiAgICB0aGlzLl9faXNJbnRlcmFjdGlvbiA9IGNvbmZpZy5pc0ludGVyYWN0aW9uID8/ICF0aGlzLl91c2VOYXRpdmVEcml2ZXI7XG4gICAgdGhpcy5fX2l0ZXJhdGlvbnMgPSBjb25maWcuaXRlcmF0aW9ucyA/PyAxO1xuXG4gICAgaWYgKFxuICAgICAgY29uZmlnLnN0aWZmbmVzcyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBjb25maWcuZGFtcGluZyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBjb25maWcubWFzcyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIGNvbmZpZy5ib3VuY2luZXNzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb25maWcuc3BlZWQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbmZpZy50ZW5zaW9uID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb25maWcuZnJpY3Rpb24gPT09IHVuZGVmaW5lZCxcbiAgICAgICAgJ1lvdSBjYW4gZGVmaW5lIG9uZSBvZiBib3VuY2luZXNzL3NwZWVkLCB0ZW5zaW9uL2ZyaWN0aW9uLCBvciBzdGlmZm5lc3MvZGFtcGluZy9tYXNzLCBidXQgbm90IG1vcmUgdGhhbiBvbmUnLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N0aWZmbmVzcyA9IGNvbmZpZy5zdGlmZm5lc3MgPz8gMTAwO1xuICAgICAgdGhpcy5fZGFtcGluZyA9IGNvbmZpZy5kYW1waW5nID8/IDEwO1xuICAgICAgdGhpcy5fbWFzcyA9IGNvbmZpZy5tYXNzID8/IDE7XG4gICAgfSBlbHNlIGlmIChjb25maWcuYm91bmNpbmVzcyAhPT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zcGVlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBvcmlnYW1pIGJvdW5jaW5lc3Mvc3BlZWQgdmFsdWVzIHRvIHN0aWZmbmVzcy9kYW1waW5nXG4gICAgICAvLyBXZSBhc3N1bWUgbWFzcyBpcyAxLlxuICAgICAgaW52YXJpYW50KFxuICAgICAgICBjb25maWcudGVuc2lvbiA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgY29uZmlnLmZyaWN0aW9uID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb25maWcuc3RpZmZuZXNzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb25maWcuZGFtcGluZyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgY29uZmlnLm1hc3MgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgJ1lvdSBjYW4gZGVmaW5lIG9uZSBvZiBib3VuY2luZXNzL3NwZWVkLCB0ZW5zaW9uL2ZyaWN0aW9uLCBvciBzdGlmZm5lc3MvZGFtcGluZy9tYXNzLCBidXQgbm90IG1vcmUgdGhhbiBvbmUnLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNwcmluZ0NvbmZpZyA9IFNwcmluZ0NvbmZpZy5mcm9tQm91bmNpbmVzc0FuZFNwZWVkKFxuICAgICAgICBjb25maWcuYm91bmNpbmVzcyA/PyA4LFxuICAgICAgICBjb25maWcuc3BlZWQgPz8gMTIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3RpZmZuZXNzID0gc3ByaW5nQ29uZmlnLnN0aWZmbmVzcztcbiAgICAgIHRoaXMuX2RhbXBpbmcgPSBzcHJpbmdDb25maWcuZGFtcGluZztcbiAgICAgIHRoaXMuX21hc3MgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBvcmlnYW1pIHRlbnNpb24vZnJpY3Rpb24gdmFsdWVzIHRvIHN0aWZmbmVzcy9kYW1waW5nXG4gICAgICAvLyBXZSBhc3N1bWUgbWFzcyBpcyAxLlxuICAgICAgY29uc3Qgc3ByaW5nQ29uZmlnID0gU3ByaW5nQ29uZmlnLmZyb21PcmlnYW1pVGVuc2lvbkFuZEZyaWN0aW9uKFxuICAgICAgICBjb25maWcudGVuc2lvbiA/PyA0MCxcbiAgICAgICAgY29uZmlnLmZyaWN0aW9uID8/IDcsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3RpZmZuZXNzID0gc3ByaW5nQ29uZmlnLnN0aWZmbmVzcztcbiAgICAgIHRoaXMuX2RhbXBpbmcgPSBzcHJpbmdDb25maWcuZGFtcGluZztcbiAgICAgIHRoaXMuX21hc3MgPSAxO1xuICAgIH1cblxuICAgIGludmFyaWFudCh0aGlzLl9zdGlmZm5lc3MgPiAwLCAnU3RpZmZuZXNzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICBpbnZhcmlhbnQodGhpcy5fZGFtcGluZyA+IDAsICdEYW1waW5nIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICBpbnZhcmlhbnQodGhpcy5fbWFzcyA+IDAsICdNYXNzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQW5pbWF0aW9uQ29uZmlnKCk6IHt8XG4gICAgZGFtcGluZzogbnVtYmVyLFxuICAgIGluaXRpYWxWZWxvY2l0eTogbnVtYmVyLFxuICAgIGl0ZXJhdGlvbnM6IG51bWJlcixcbiAgICBtYXNzOiBudW1iZXIsXG4gICAgcGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZyxcbiAgICBvdmVyc2hvb3RDbGFtcGluZzogYm9vbGVhbixcbiAgICByZXN0RGlzcGxhY2VtZW50VGhyZXNob2xkOiBudW1iZXIsXG4gICAgcmVzdFNwZWVkVGhyZXNob2xkOiBudW1iZXIsXG4gICAgc3RpZmZuZXNzOiBudW1iZXIsXG4gICAgdG9WYWx1ZTogYW55LFxuICAgIHR5cGU6ICRURU1QT1JBUlkkc3RyaW5nPCdzcHJpbmcnPixcbiAgfH0ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnc3ByaW5nJyxcbiAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0aGlzLl9vdmVyc2hvb3RDbGFtcGluZyxcbiAgICAgIHJlc3REaXNwbGFjZW1lbnRUaHJlc2hvbGQ6IHRoaXMuX3Jlc3REaXNwbGFjZW1lbnRUaHJlc2hvbGQsXG4gICAgICByZXN0U3BlZWRUaHJlc2hvbGQ6IHRoaXMuX3Jlc3RTcGVlZFRocmVzaG9sZCxcbiAgICAgIHN0aWZmbmVzczogdGhpcy5fc3RpZmZuZXNzLFxuICAgICAgZGFtcGluZzogdGhpcy5fZGFtcGluZyxcbiAgICAgIG1hc3M6IHRoaXMuX21hc3MsXG4gICAgICBpbml0aWFsVmVsb2NpdHk6IHRoaXMuX2luaXRpYWxWZWxvY2l0eSA/PyB0aGlzLl9sYXN0VmVsb2NpdHksXG4gICAgICB0b1ZhbHVlOiB0aGlzLl90b1ZhbHVlLFxuICAgICAgaXRlcmF0aW9uczogdGhpcy5fX2l0ZXJhdGlvbnMsXG4gICAgICBwbGF0Zm9ybUNvbmZpZzogdGhpcy5fcGxhdGZvcm1Db25maWcsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXJ0KFxuICAgIGZyb21WYWx1ZTogbnVtYmVyLFxuICAgIG9uVXBkYXRlOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvbkVuZDogP0VuZENhbGxiYWNrLFxuICAgIHByZXZpb3VzQW5pbWF0aW9uOiA/QW5pbWF0aW9uLFxuICAgIGFuaW1hdGVkVmFsdWU6IEFuaW1hdGVkVmFsdWUsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX19hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSBmcm9tVmFsdWU7XG4gICAgdGhpcy5fbGFzdFBvc2l0aW9uID0gdGhpcy5fc3RhcnRQb3NpdGlvbjtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gb25VcGRhdGU7XG4gICAgdGhpcy5fX29uRW5kID0gb25FbmQ7XG4gICAgdGhpcy5fbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX2ZyYW1lVGltZSA9IDAuMDtcblxuICAgIGlmIChwcmV2aW91c0FuaW1hdGlvbiBpbnN0YW5jZW9mIFNwcmluZ0FuaW1hdGlvbikge1xuICAgICAgY29uc3QgaW50ZXJuYWxTdGF0ZSA9IHByZXZpb3VzQW5pbWF0aW9uLmdldEludGVybmFsU3RhdGUoKTtcbiAgICAgIHRoaXMuX2xhc3RQb3NpdGlvbiA9IGludGVybmFsU3RhdGUubGFzdFBvc2l0aW9uO1xuICAgICAgdGhpcy5fbGFzdFZlbG9jaXR5ID0gaW50ZXJuYWxTdGF0ZS5sYXN0VmVsb2NpdHk7XG4gICAgICAvLyBTZXQgdGhlIGluaXRpYWwgdmVsb2NpdHkgdG8gdGhlIGxhc3QgdmVsb2NpdHlcbiAgICAgIHRoaXMuX2luaXRpYWxWZWxvY2l0eSA9IHRoaXMuX2xhc3RWZWxvY2l0eTtcbiAgICAgIHRoaXMuX2xhc3RUaW1lID0gaW50ZXJuYWxTdGF0ZS5sYXN0VGltZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fdXNlTmF0aXZlRHJpdmVyICYmIGFuaW1hdGVkVmFsdWUuX19pc05hdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0F0dGVtcHRpbmcgdG8gcnVuIEpTIGRyaXZlbiBhbmltYXRpb24gb24gYW5pbWF0ZWQgbm9kZSAnICtcbiAgICAgICAgICAgICd0aGF0IGhhcyBiZWVuIG1vdmVkIHRvIFwibmF0aXZlXCIgZWFybGllciBieSBzdGFydGluZyBhbiAnICtcbiAgICAgICAgICAgICdhbmltYXRpb24gd2l0aCBgdXNlTmF0aXZlRHJpdmVyOiB0cnVlYCcsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl91c2VOYXRpdmVEcml2ZXIpIHtcbiAgICAgICAgdGhpcy5fX3N0YXJ0TmF0aXZlQW5pbWF0aW9uKGFuaW1hdGVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vblVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyAgSWYgdGhpcy5fZGVsYXkgaXMgbW9yZSB0aGFuIDAsIHdlIHN0YXJ0IGFmdGVyIHRoZSB0aW1lb3V0LlxuICAgIGlmICh0aGlzLl9kZWxheSkge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoc3RhcnQsIHRoaXMuX2RlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBnZXRJbnRlcm5hbFN0YXRlKCk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhc3RQb3NpdGlvbjogdGhpcy5fbGFzdFBvc2l0aW9uLFxuICAgICAgbGFzdFZlbG9jaXR5OiB0aGlzLl9sYXN0VmVsb2NpdHksXG4gICAgICBsYXN0VGltZTogdGhpcy5fbGFzdFRpbWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHNwcmluZyBtb2RlbCBpcyBiYXNlZCBvZmYgb2YgYSBkYW1wZWQgaGFybW9uaWMgb3NjaWxsYXRvclxuICAgKiAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFybW9uaWNfb3NjaWxsYXRvciNEYW1wZWRfaGFybW9uaWNfb3NjaWxsYXRvcikuXG4gICAqXG4gICAqIFdlIHVzZSB0aGUgY2xvc2VkIGZvcm0gb2YgdGhlIHNlY29uZCBvcmRlciBkaWZmZXJlbnRpYWwgZXF1YXRpb246XG4gICAqXG4gICAqIHgnJyArICgyzrbijbVfMCl4JyArIOKNtV4yeCA9IDBcbiAgICpcbiAgICogd2hlcmVcbiAgICogICAg4o21XzAgPSDiiJooayAvIG0pICh1bmRhbXBlZCBhbmd1bGFyIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvciksXG4gICAqICAgIM62ID0gYyAvIDLiiJptayAoZGFtcGluZyByYXRpbyksXG4gICAqICAgIGMgPSBkYW1waW5nIGNvbnN0YW50XG4gICAqICAgIGsgPSBzdGlmZm5lc3NcbiAgICogICAgbSA9IG1hc3NcbiAgICpcbiAgICogVGhlIGRlcml2YXRpb24gb2YgdGhlIGNsb3NlZCBmb3JtIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgaGVyZTpcbiAgICogaHR0cDovL3BsYW5ldG1hdGgub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvdGV4cGRmLzM5NzQ1LnBkZlxuICAgKlxuICAgKiBUaGlzIGFsZ29yaXRobSBoYXBwZW5zIHRvIG1hdGNoIHRoZSBhbGdvcml0aG0gdXNlZCBieSBDQVNwcmluZ0FuaW1hdGlvbixcbiAgICogYSBRdWFydHpDb3JlIChpT1MpIEFQSSB0aGF0IGNyZWF0ZXMgc3ByaW5nIGFuaW1hdGlvbnMuXG4gICAqL1xuICBvblVwZGF0ZSgpOiB2b2lkIHtcbiAgICAvLyBJZiBmb3Igc29tZSByZWFzb24gd2UgbG9zdCBhIGxvdCBvZiBmcmFtZXMgKGUuZy4gcHJvY2VzcyBsYXJnZSBwYXlsb2FkIG9yXG4gICAgLy8gc3RvcHBlZCBpbiB0aGUgZGVidWdnZXIpLCB3ZSBvbmx5IGFkdmFuY2UgYnkgNCBmcmFtZXMgd29ydGggb2ZcbiAgICAvLyBjb21wdXRhdGlvbiBhbmQgd2lsbCBjb250aW51ZSBvbiB0aGUgbmV4dCBmcmFtZS4gSXQncyBiZXR0ZXIgdG8gaGF2ZSBpdFxuICAgIC8vIHJ1bm5pbmcgYXQgZmFzdGVyIHNwZWVkIHRoYW4ganVtcGluZyB0byB0aGUgZW5kLlxuICAgIGNvbnN0IE1BWF9TVEVQUyA9IDY0O1xuICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgPiB0aGlzLl9sYXN0VGltZSArIE1BWF9TVEVQUykge1xuICAgICAgbm93ID0gdGhpcy5fbGFzdFRpbWUgKyBNQVhfU1RFUFM7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gKG5vdyAtIHRoaXMuX2xhc3RUaW1lKSAvIDEwMDA7XG4gICAgdGhpcy5fZnJhbWVUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGNvbnN0IGM6IG51bWJlciA9IHRoaXMuX2RhbXBpbmc7XG4gICAgY29uc3QgbTogbnVtYmVyID0gdGhpcy5fbWFzcztcbiAgICBjb25zdCBrOiBudW1iZXIgPSB0aGlzLl9zdGlmZm5lc3M7XG4gICAgY29uc3QgdjA6IG51bWJlciA9IC10aGlzLl9pbml0aWFsVmVsb2NpdHk7XG5cbiAgICBjb25zdCB6ZXRhID0gYyAvICgyICogTWF0aC5zcXJ0KGsgKiBtKSk7IC8vIGRhbXBpbmcgcmF0aW9cbiAgICBjb25zdCBvbWVnYTAgPSBNYXRoLnNxcnQoayAvIG0pOyAvLyB1bmRhbXBlZCBhbmd1bGFyIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvciAocmFkL21zKVxuICAgIGNvbnN0IG9tZWdhMSA9IG9tZWdhMCAqIE1hdGguc3FydCgxLjAgLSB6ZXRhICogemV0YSk7IC8vIGV4cG9uZW50aWFsIGRlY2F5XG4gICAgY29uc3QgeDAgPSB0aGlzLl90b1ZhbHVlIC0gdGhpcy5fc3RhcnRQb3NpdGlvbjsgLy8gY2FsY3VsYXRlIHRoZSBvc2NpbGxhdGlvbiBmcm9tIHgwID0gMSB0byB4ID0gMFxuXG4gICAgbGV0IHBvc2l0aW9uID0gMC4wO1xuICAgIGxldCB2ZWxvY2l0eSA9IDAuMDtcbiAgICBjb25zdCB0ID0gdGhpcy5fZnJhbWVUaW1lO1xuICAgIGlmICh6ZXRhIDwgMSkge1xuICAgICAgLy8gVW5kZXIgZGFtcGVkXG4gICAgICBjb25zdCBlbnZlbG9wZSA9IE1hdGguZXhwKC16ZXRhICogb21lZ2EwICogdCk7XG4gICAgICBwb3NpdGlvbiA9XG4gICAgICAgIHRoaXMuX3RvVmFsdWUgLVxuICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgKCgodjAgKyB6ZXRhICogb21lZ2EwICogeDApIC8gb21lZ2ExKSAqIE1hdGguc2luKG9tZWdhMSAqIHQpICtcbiAgICAgICAgICAgIHgwICogTWF0aC5jb3Mob21lZ2ExICogdCkpO1xuICAgICAgLy8gVGhpcyBsb29rcyBjcmF6eSAtLSBpdCdzIGFjdHVhbGx5IGp1c3QgdGhlIGRlcml2YXRpdmUgb2YgdGhlXG4gICAgICAvLyBvc2NpbGxhdGlvbiBmdW5jdGlvblxuICAgICAgdmVsb2NpdHkgPVxuICAgICAgICB6ZXRhICpcbiAgICAgICAgICBvbWVnYTAgKlxuICAgICAgICAgIGVudmVsb3BlICpcbiAgICAgICAgICAoKE1hdGguc2luKG9tZWdhMSAqIHQpICogKHYwICsgemV0YSAqIG9tZWdhMCAqIHgwKSkgLyBvbWVnYTEgK1xuICAgICAgICAgICAgeDAgKiBNYXRoLmNvcyhvbWVnYTEgKiB0KSkgLVxuICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgKE1hdGguY29zKG9tZWdhMSAqIHQpICogKHYwICsgemV0YSAqIG9tZWdhMCAqIHgwKSAtXG4gICAgICAgICAgICBvbWVnYTEgKiB4MCAqIE1hdGguc2luKG9tZWdhMSAqIHQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JpdGljYWxseSBkYW1wZWRcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gTWF0aC5leHAoLW9tZWdhMCAqIHQpO1xuICAgICAgcG9zaXRpb24gPSB0aGlzLl90b1ZhbHVlIC0gZW52ZWxvcGUgKiAoeDAgKyAodjAgKyBvbWVnYTAgKiB4MCkgKiB0KTtcbiAgICAgIHZlbG9jaXR5ID1cbiAgICAgICAgZW52ZWxvcGUgKiAodjAgKiAodCAqIG9tZWdhMCAtIDEpICsgdCAqIHgwICogKG9tZWdhMCAqIG9tZWdhMCkpO1xuICAgIH1cblxuICAgIHRoaXMuX2xhc3RUaW1lID0gbm93O1xuICAgIHRoaXMuX2xhc3RQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRoaXMuX2xhc3RWZWxvY2l0eSA9IHZlbG9jaXR5O1xuXG4gICAgdGhpcy5fb25VcGRhdGUocG9zaXRpb24pO1xuICAgIGlmICghdGhpcy5fX2FjdGl2ZSkge1xuICAgICAgLy8gYSBsaXN0ZW5lciBtaWdodCBoYXZlIHN0b3BwZWQgdXMgaW4gX29uVXBkYXRlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29uZGl0aW9ucyBmb3Igc3RvcHBpbmcgdGhlIHNwcmluZyBhbmltYXRpb25cbiAgICBsZXQgaXNPdmVyc2hvb3RpbmcgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5fb3ZlcnNob290Q2xhbXBpbmcgJiYgdGhpcy5fc3RpZmZuZXNzICE9PSAwKSB7XG4gICAgICBpZiAodGhpcy5fc3RhcnRQb3NpdGlvbiA8IHRoaXMuX3RvVmFsdWUpIHtcbiAgICAgICAgaXNPdmVyc2hvb3RpbmcgPSBwb3NpdGlvbiA+IHRoaXMuX3RvVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc092ZXJzaG9vdGluZyA9IHBvc2l0aW9uIDwgdGhpcy5fdG9WYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaXNWZWxvY2l0eSA9IE1hdGguYWJzKHZlbG9jaXR5KSA8PSB0aGlzLl9yZXN0U3BlZWRUaHJlc2hvbGQ7XG4gICAgbGV0IGlzRGlzcGxhY2VtZW50ID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5fc3RpZmZuZXNzICE9PSAwKSB7XG4gICAgICBpc0Rpc3BsYWNlbWVudCA9XG4gICAgICAgIE1hdGguYWJzKHRoaXMuX3RvVmFsdWUgLSBwb3NpdGlvbikgPD0gdGhpcy5fcmVzdERpc3BsYWNlbWVudFRocmVzaG9sZDtcbiAgICB9XG5cbiAgICBpZiAoaXNPdmVyc2hvb3RpbmcgfHwgKGlzVmVsb2NpdHkgJiYgaXNEaXNwbGFjZW1lbnQpKSB7XG4gICAgICBpZiAodGhpcy5fc3RpZmZuZXNzICE9PSAwKSB7XG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGVuZCB1cCB3aXRoIGEgcm91bmQgdmFsdWVcbiAgICAgICAgdGhpcy5fbGFzdFBvc2l0aW9uID0gdGhpcy5fdG9WYWx1ZTtcbiAgICAgICAgdGhpcy5fbGFzdFZlbG9jaXR5ID0gMDtcbiAgICAgICAgdGhpcy5fb25VcGRhdGUodGhpcy5fdG9WYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX19kZWJvdW5jZWRPbkVuZCh7ZmluaXNoZWQ6IHRydWV9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMub25VcGRhdGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBzdG9wKCk6IHZvaWQge1xuICAgIHN1cGVyLnN0b3AoKTtcbiAgICB0aGlzLl9fYWN0aXZlID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZSk7XG4gICAgdGhpcy5fX2RlYm91bmNlZE9uRW5kKHtmaW5pc2hlZDogZmFsc2V9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UHJvY2Vzc2VkQ29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7TmF0aXZlQ29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0VHlwZXMnO1xuaW1wb3J0IHR5cGUge1BsYXRmb3JtQ29uZmlnfSBmcm9tICcuLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcblxuaW1wb3J0IG5vcm1hbGl6ZUNvbG9yIGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvbm9ybWFsaXplQ29sb3InO1xuaW1wb3J0IHtwcm9jZXNzQ29sb3JPYmplY3R9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvUGxhdGZvcm1Db2xvclZhbHVlVHlwZXMnO1xuaW1wb3J0IE5hdGl2ZUFuaW1hdGVkSGVscGVyIGZyb20gJy4uL05hdGl2ZUFuaW1hdGVkSGVscGVyJztcbmltcG9ydCBBbmltYXRlZFZhbHVlLCB7Zmx1c2hWYWx1ZX0gZnJvbSAnLi9BbmltYXRlZFZhbHVlJztcbmltcG9ydCBBbmltYXRlZFdpdGhDaGlsZHJlbiBmcm9tICcuL0FuaW1hdGVkV2l0aENoaWxkcmVuJztcblxuZXhwb3J0IHR5cGUgQW5pbWF0ZWRDb2xvckNvbmZpZyA9ICRSZWFkT25seTx7XG4gIHVzZU5hdGl2ZURyaXZlcjogYm9vbGVhbixcbn0+O1xuXG50eXBlIENvbG9yTGlzdGVuZXJDYWxsYmFjayA9ICh2YWx1ZTogQ29sb3JWYWx1ZSkgPT4gbWl4ZWQ7XG5cbmV4cG9ydCB0eXBlIFJnYmFWYWx1ZSA9IHtcbiAgK3I6IG51bWJlcixcbiAgK2c6IG51bWJlcixcbiAgK2I6IG51bWJlcixcbiAgK2E6IG51bWJlcixcbiAgLi4uXG59O1xuXG50eXBlIFJnYmFBbmltYXRlZFZhbHVlID0ge1xuICArcjogQW5pbWF0ZWRWYWx1ZSxcbiAgK2c6IEFuaW1hdGVkVmFsdWUsXG4gICtiOiBBbmltYXRlZFZhbHVlLFxuICArYTogQW5pbWF0ZWRWYWx1ZSxcbiAgLi4uXG59O1xuXG5leHBvcnQgdHlwZSBJbnB1dFZhbHVlID0gPyhSZ2JhVmFsdWUgfCBSZ2JhQW5pbWF0ZWRWYWx1ZSB8IENvbG9yVmFsdWUpO1xuXG5jb25zdCBOYXRpdmVBbmltYXRlZEFQSSA9IE5hdGl2ZUFuaW1hdGVkSGVscGVyLkFQSTtcblxuY29uc3QgZGVmYXVsdENvbG9yOiBSZ2JhVmFsdWUgPSB7cjogMCwgZzogMCwgYjogMCwgYTogMS4wfTtcblxuLyogZXNsaW50IG5vLWJpdHdpc2U6IDAgKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb2xvcihcbiAgY29sb3I/OiA/KENvbG9yVmFsdWUgfCBSZ2JhVmFsdWUpLFxuKTogPyhSZ2JhVmFsdWUgfCBOYXRpdmVDb2xvclZhbHVlKSB7XG4gIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkIHx8IGNvbG9yID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaXNSZ2JhVmFsdWUoY29sb3IpKSB7XG4gICAgLy8gJEZsb3dJZ25vcmVbaW5jb21wYXRpYmxlLWNhc3RdIC0gVHlwZSBpcyB2ZXJpZmllZCBhYm92ZVxuICAgIHJldHVybiAoY29sb3I6IFJnYmFWYWx1ZSk7XG4gIH1cblxuICBsZXQgbm9ybWFsaXplZENvbG9yOiA/UHJvY2Vzc2VkQ29sb3JWYWx1ZSA9IG5vcm1hbGl6ZUNvbG9yKFxuICAgIC8vICRGbG93SWdub3JlW2luY29tcGF0aWJsZS1jYXN0XSAtIFR5cGUgaXMgdmVyaWZpZWQgYWJvdmVcbiAgICAoY29sb3I6IENvbG9yVmFsdWUpLFxuICApO1xuICBpZiAobm9ybWFsaXplZENvbG9yID09PSB1bmRlZmluZWQgfHwgbm9ybWFsaXplZENvbG9yID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb2xvciA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBwcm9jZXNzZWRDb2xvck9iajogP05hdGl2ZUNvbG9yVmFsdWUgPVxuICAgICAgcHJvY2Vzc0NvbG9yT2JqZWN0KG5vcm1hbGl6ZWRDb2xvcik7XG4gICAgaWYgKHByb2Nlc3NlZENvbG9yT2JqICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzZWRDb2xvck9iajtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICBjb25zdCByOiBudW1iZXIgPSAobm9ybWFsaXplZENvbG9yICYgMHhmZjAwMDAwMCkgPj4+IDI0O1xuICAgIGNvbnN0IGc6IG51bWJlciA9IChub3JtYWxpemVkQ29sb3IgJiAweDAwZmYwMDAwKSA+Pj4gMTY7XG4gICAgY29uc3QgYjogbnVtYmVyID0gKG5vcm1hbGl6ZWRDb2xvciAmIDB4MDAwMGZmMDApID4+PiA4O1xuICAgIGNvbnN0IGE6IG51bWJlciA9IChub3JtYWxpemVkQ29sb3IgJiAweDAwMDAwMGZmKSAvIDI1NTtcblxuICAgIHJldHVybiB7ciwgZywgYiwgYX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNSZ2JhVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlLnIgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHZhbHVlLmcgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHZhbHVlLmIgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHZhbHVlLmEgPT09ICdudW1iZXInXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUmdiYUFuaW1hdGVkVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICYmXG4gICAgdmFsdWUuciBpbnN0YW5jZW9mIEFuaW1hdGVkVmFsdWUgJiZcbiAgICB2YWx1ZS5nIGluc3RhbmNlb2YgQW5pbWF0ZWRWYWx1ZSAmJlxuICAgIHZhbHVlLmIgaW5zdGFuY2VvZiBBbmltYXRlZFZhbHVlICYmXG4gICAgdmFsdWUuYSBpbnN0YW5jZW9mIEFuaW1hdGVkVmFsdWVcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRDb2xvciBleHRlbmRzIEFuaW1hdGVkV2l0aENoaWxkcmVuIHtcbiAgcjogQW5pbWF0ZWRWYWx1ZTtcbiAgZzogQW5pbWF0ZWRWYWx1ZTtcbiAgYjogQW5pbWF0ZWRWYWx1ZTtcbiAgYTogQW5pbWF0ZWRWYWx1ZTtcbiAgbmF0aXZlQ29sb3I6ID9OYXRpdmVDb2xvclZhbHVlO1xuXG4gIF9zdXNwZW5kQ2FsbGJhY2tzOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlSW4/OiBJbnB1dFZhbHVlLCBjb25maWc/OiA/QW5pbWF0ZWRDb2xvckNvbmZpZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBsZXQgdmFsdWU6IFJnYmFWYWx1ZSB8IFJnYmFBbmltYXRlZFZhbHVlIHwgQ29sb3JWYWx1ZSA9XG4gICAgICB2YWx1ZUluID8/IGRlZmF1bHRDb2xvcjtcbiAgICBpZiAoaXNSZ2JhQW5pbWF0ZWRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIC8vICRGbG93SWdub3JlW2luY29tcGF0aWJsZS1jYXN0XSAtIFR5cGUgaXMgdmVyaWZpZWQgYWJvdmVcbiAgICAgIGNvbnN0IHJnYmFBbmltYXRlZFZhbHVlOiBSZ2JhQW5pbWF0ZWRWYWx1ZSA9ICh2YWx1ZTogUmdiYUFuaW1hdGVkVmFsdWUpO1xuICAgICAgdGhpcy5yID0gcmdiYUFuaW1hdGVkVmFsdWUucjtcbiAgICAgIHRoaXMuZyA9IHJnYmFBbmltYXRlZFZhbHVlLmc7XG4gICAgICB0aGlzLmIgPSByZ2JhQW5pbWF0ZWRWYWx1ZS5iO1xuICAgICAgdGhpcy5hID0gcmdiYUFuaW1hdGVkVmFsdWUuYTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJvY2Vzc2VkQ29sb3I6IFJnYmFWYWx1ZSB8IE5hdGl2ZUNvbG9yVmFsdWUgPVxuICAgICAgICAvLyAkRmxvd0lnbm9yZVtpbmNvbXBhdGlibGUtY2FzdF0gLSBUeXBlIGlzIHZlcmlmaWVkIGFib3ZlXG4gICAgICAgIHByb2Nlc3NDb2xvcigodmFsdWU6IENvbG9yVmFsdWUgfCBSZ2JhVmFsdWUpKSA/PyBkZWZhdWx0Q29sb3I7XG4gICAgICBsZXQgaW5pdENvbG9yOiBSZ2JhVmFsdWUgPSBkZWZhdWx0Q29sb3I7XG4gICAgICBpZiAoaXNSZ2JhVmFsdWUocHJvY2Vzc2VkQ29sb3IpKSB7XG4gICAgICAgIC8vICRGbG93SWdub3JlW2luY29tcGF0aWJsZS1jYXN0XSAtIFR5cGUgaXMgdmVyaWZpZWQgYWJvdmVcbiAgICAgICAgaW5pdENvbG9yID0gKHByb2Nlc3NlZENvbG9yOiBSZ2JhVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dJZ25vcmVbaW5jb21wYXRpYmxlLWNhc3RdIC0gVHlwZSBpcyB2ZXJpZmllZCBhYm92ZVxuICAgICAgICB0aGlzLm5hdGl2ZUNvbG9yID0gKHByb2Nlc3NlZENvbG9yOiBOYXRpdmVDb2xvclZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yID0gbmV3IEFuaW1hdGVkVmFsdWUoaW5pdENvbG9yLnIpO1xuICAgICAgdGhpcy5nID0gbmV3IEFuaW1hdGVkVmFsdWUoaW5pdENvbG9yLmcpO1xuICAgICAgdGhpcy5iID0gbmV3IEFuaW1hdGVkVmFsdWUoaW5pdENvbG9yLmIpO1xuICAgICAgdGhpcy5hID0gbmV3IEFuaW1hdGVkVmFsdWUoaW5pdENvbG9yLmEpO1xuICAgIH1cblxuICAgIGlmIChjb25maWc/LnVzZU5hdGl2ZURyaXZlcikge1xuICAgICAgdGhpcy5fX21ha2VOYXRpdmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlyZWN0bHkgc2V0IHRoZSB2YWx1ZS4gVGhpcyB3aWxsIHN0b3AgYW55IGFuaW1hdGlvbnMgcnVubmluZyBvbiB0aGUgdmFsdWVcbiAgICogYW5kIHVwZGF0ZSBhbGwgdGhlIGJvdW5kIHByb3BlcnRpZXMuXG4gICAqL1xuICBzZXRWYWx1ZSh2YWx1ZTogUmdiYVZhbHVlIHwgQ29sb3JWYWx1ZSk6IHZvaWQge1xuICAgIGxldCBzaG91bGRVcGRhdGVOb2RlQ29uZmlnID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuX19pc05hdGl2ZSkge1xuICAgICAgY29uc3QgbmF0aXZlVGFnID0gdGhpcy5fX2dldE5hdGl2ZVRhZygpO1xuICAgICAgTmF0aXZlQW5pbWF0ZWRBUEkuc2V0V2FpdGluZ0ZvcklkZW50aWZpZXIobmF0aXZlVGFnLnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2Nlc3NlZENvbG9yOiBSZ2JhVmFsdWUgfCBOYXRpdmVDb2xvclZhbHVlID1cbiAgICAgIHByb2Nlc3NDb2xvcih2YWx1ZSkgPz8gZGVmYXVsdENvbG9yO1xuICAgIHRoaXMuX3dpdGhTdXNwZW5kZWRDYWxsYmFja3MoKCkgPT4ge1xuICAgICAgaWYgKGlzUmdiYVZhbHVlKHByb2Nlc3NlZENvbG9yKSkge1xuICAgICAgICAvLyAkRmxvd0lnbm9yZVtpbmNvbXBhdGlibGUtdHlwZV0gLSBUeXBlIGlzIHZlcmlmaWVkIGFib3ZlXG4gICAgICAgIGNvbnN0IHJnYmFWYWx1ZTogUmdiYVZhbHVlID0gcHJvY2Vzc2VkQ29sb3I7XG4gICAgICAgIHRoaXMuci5zZXRWYWx1ZShyZ2JhVmFsdWUucik7XG4gICAgICAgIHRoaXMuZy5zZXRWYWx1ZShyZ2JhVmFsdWUuZyk7XG4gICAgICAgIHRoaXMuYi5zZXRWYWx1ZShyZ2JhVmFsdWUuYik7XG4gICAgICAgIHRoaXMuYS5zZXRWYWx1ZShyZ2JhVmFsdWUuYSk7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUNvbG9yICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm5hdGl2ZUNvbG9yID0gbnVsbDtcbiAgICAgICAgICBzaG91bGRVcGRhdGVOb2RlQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dJZ25vcmVbaW5jb21wYXRpYmxlLXR5cGVdIC0gVHlwZSBpcyB2ZXJpZmllZCBhYm92ZVxuICAgICAgICBjb25zdCBuYXRpdmVDb2xvcjogTmF0aXZlQ29sb3JWYWx1ZSA9IHByb2Nlc3NlZENvbG9yO1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVDb2xvciAhPT0gbmF0aXZlQ29sb3IpIHtcbiAgICAgICAgICB0aGlzLm5hdGl2ZUNvbG9yID0gbmF0aXZlQ29sb3I7XG4gICAgICAgICAgc2hvdWxkVXBkYXRlTm9kZUNvbmZpZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9faXNOYXRpdmUpIHtcbiAgICAgIGNvbnN0IG5hdGl2ZVRhZyA9IHRoaXMuX19nZXROYXRpdmVUYWcoKTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVOb2RlQ29uZmlnKSB7XG4gICAgICAgIE5hdGl2ZUFuaW1hdGVkQVBJLnVwZGF0ZUFuaW1hdGVkTm9kZUNvbmZpZyhcbiAgICAgICAgICBuYXRpdmVUYWcsXG4gICAgICAgICAgdGhpcy5fX2dldE5hdGl2ZUNvbmZpZygpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgTmF0aXZlQW5pbWF0ZWRBUEkudW5zZXRXYWl0aW5nRm9ySWRlbnRpZmllcihuYXRpdmVUYWcudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoVmFsdWUodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICB0aGlzLl9fY2FsbExpc3RlbmVycyh0aGlzLl9fZ2V0VmFsdWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbiBvZmZzZXQgdGhhdCBpcyBhcHBsaWVkIG9uIHRvcCBvZiB3aGF0ZXZlciB2YWx1ZSBpcyBzZXQsIHdoZXRoZXJcbiAgICogdmlhIGBzZXRWYWx1ZWAsIGFuIGFuaW1hdGlvbiwgb3IgYEFuaW1hdGVkLmV2ZW50YC4gVXNlZnVsIGZvciBjb21wZW5zYXRpbmdcbiAgICogdGhpbmdzIGxpa2UgdGhlIHN0YXJ0IG9mIGEgcGFuIGdlc3R1cmUuXG4gICAqL1xuICBzZXRPZmZzZXQob2Zmc2V0OiBSZ2JhVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLnIuc2V0T2Zmc2V0KG9mZnNldC5yKTtcbiAgICB0aGlzLmcuc2V0T2Zmc2V0KG9mZnNldC5nKTtcbiAgICB0aGlzLmIuc2V0T2Zmc2V0KG9mZnNldC5iKTtcbiAgICB0aGlzLmEuc2V0T2Zmc2V0KG9mZnNldC5hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgdGhlIG9mZnNldCB2YWx1ZSBpbnRvIHRoZSBiYXNlIHZhbHVlIGFuZCByZXNldHMgdGhlIG9mZnNldCB0byB6ZXJvLlxuICAgKiBUaGUgZmluYWwgb3V0cHV0IG9mIHRoZSB2YWx1ZSBpcyB1bmNoYW5nZWQuXG4gICAqL1xuICBmbGF0dGVuT2Zmc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuci5mbGF0dGVuT2Zmc2V0KCk7XG4gICAgdGhpcy5nLmZsYXR0ZW5PZmZzZXQoKTtcbiAgICB0aGlzLmIuZmxhdHRlbk9mZnNldCgpO1xuICAgIHRoaXMuYS5mbGF0dGVuT2Zmc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgb2Zmc2V0IHZhbHVlIHRvIHRoZSBiYXNlIHZhbHVlLCBhbmQgcmVzZXRzIHRoZSBiYXNlIHZhbHVlIHRvXG4gICAqIHplcm8uIFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIHZhbHVlIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIGV4dHJhY3RPZmZzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5yLmV4dHJhY3RPZmZzZXQoKTtcbiAgICB0aGlzLmcuZXh0cmFjdE9mZnNldCgpO1xuICAgIHRoaXMuYi5leHRyYWN0T2Zmc2V0KCk7XG4gICAgdGhpcy5hLmV4dHJhY3RPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBhbnkgcnVubmluZyBhbmltYXRpb24gb3IgdHJhY2tpbmcuIGBjYWxsYmFja2AgaXMgaW52b2tlZCB3aXRoIHRoZVxuICAgKiBmaW5hbCB2YWx1ZSBhZnRlciBzdG9wcGluZyB0aGUgYW5pbWF0aW9uLCB3aGljaCBpcyB1c2VmdWwgZm9yIHVwZGF0aW5nXG4gICAqIHN0YXRlIHRvIG1hdGNoIHRoZSBhbmltYXRpb24gcG9zaXRpb24gd2l0aCBsYXlvdXQuXG4gICAqL1xuICBzdG9wQW5pbWF0aW9uKGNhbGxiYWNrPzogQ29sb3JMaXN0ZW5lckNhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5yLnN0b3BBbmltYXRpb24oKTtcbiAgICB0aGlzLmcuc3RvcEFuaW1hdGlvbigpO1xuICAgIHRoaXMuYi5zdG9wQW5pbWF0aW9uKCk7XG4gICAgdGhpcy5hLnN0b3BBbmltYXRpb24oKTtcbiAgICBjYWxsYmFjayAmJiBjYWxsYmFjayh0aGlzLl9fZ2V0VmFsdWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgYW55IGFuaW1hdGlvbiBhbmQgcmVzZXRzIHRoZSB2YWx1ZSB0byBpdHMgb3JpZ2luYWwuXG4gICAqL1xuICByZXNldEFuaW1hdGlvbihjYWxsYmFjaz86IENvbG9yTGlzdGVuZXJDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuci5yZXNldEFuaW1hdGlvbigpO1xuICAgIHRoaXMuZy5yZXNldEFuaW1hdGlvbigpO1xuICAgIHRoaXMuYi5yZXNldEFuaW1hdGlvbigpO1xuICAgIHRoaXMuYS5yZXNldEFuaW1hdGlvbigpO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHRoaXMuX19nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIF9fZ2V0VmFsdWUoKTogQ29sb3JWYWx1ZSB7XG4gICAgaWYgKHRoaXMubmF0aXZlQ29sb3IgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF0aXZlQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgcmdiYSgke3RoaXMuci5fX2dldFZhbHVlKCl9LCAke3RoaXMuZy5fX2dldFZhbHVlKCl9LCAke3RoaXMuYi5fX2dldFZhbHVlKCl9LCAke3RoaXMuYS5fX2dldFZhbHVlKCl9KWA7XG4gICAgfVxuICB9XG5cbiAgX19hdHRhY2goKTogdm9pZCB7XG4gICAgdGhpcy5yLl9fYWRkQ2hpbGQodGhpcyk7XG4gICAgdGhpcy5nLl9fYWRkQ2hpbGQodGhpcyk7XG4gICAgdGhpcy5iLl9fYWRkQ2hpbGQodGhpcyk7XG4gICAgdGhpcy5hLl9fYWRkQ2hpbGQodGhpcyk7XG4gICAgc3VwZXIuX19hdHRhY2goKTtcbiAgfVxuXG4gIF9fZGV0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuci5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIHRoaXMuZy5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIHRoaXMuYi5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIHRoaXMuYS5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIHN1cGVyLl9fZGV0YWNoKCk7XG4gIH1cblxuICBfd2l0aFN1c3BlbmRlZENhbGxiYWNrcyhjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX3N1c3BlbmRDYWxsYmFja3MrKztcbiAgICBjYWxsYmFjaygpO1xuICAgIHRoaXMuX3N1c3BlbmRDYWxsYmFja3MtLTtcbiAgfVxuXG4gIF9fY2FsbExpc3RlbmVycyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N1c3BlbmRDYWxsYmFja3MgPT09IDApIHtcbiAgICAgIHN1cGVyLl9fY2FsbExpc3RlbmVycyh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnOiA/UGxhdGZvcm1Db25maWcpIHtcbiAgICB0aGlzLnIuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICB0aGlzLmcuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICB0aGlzLmIuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICB0aGlzLmEuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICBzdXBlci5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICB9XG5cbiAgX19nZXROYXRpdmVDb25maWcoKTogey4uLn0ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgcjogdGhpcy5yLl9fZ2V0TmF0aXZlVGFnKCksXG4gICAgICBnOiB0aGlzLmcuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgIGI6IHRoaXMuYi5fX2dldE5hdGl2ZVRhZygpLFxuICAgICAgYTogdGhpcy5hLl9fZ2V0TmF0aXZlVGFnKCksXG4gICAgICBuYXRpdmVDb2xvcjogdGhpcy5uYXRpdmVDb2xvcixcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG50eXBlIFNwcmluZ0NvbmZpZ1R5cGUgPSB7XG4gIHN0aWZmbmVzczogbnVtYmVyLFxuICBkYW1waW5nOiBudW1iZXIsXG4gIC4uLlxufTtcblxuZnVuY3Rpb24gc3RpZmZuZXNzRnJvbU9yaWdhbWlWYWx1ZShvVmFsdWU6IG51bWJlcikge1xuICByZXR1cm4gKG9WYWx1ZSAtIDMwKSAqIDMuNjIgKyAxOTQ7XG59XG5cbmZ1bmN0aW9uIGRhbXBpbmdGcm9tT3JpZ2FtaVZhbHVlKG9WYWx1ZTogbnVtYmVyKSB7XG4gIHJldHVybiAob1ZhbHVlIC0gOCkgKiAzICsgMjU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3JpZ2FtaVRlbnNpb25BbmRGcmljdGlvbihcbiAgdGVuc2lvbjogbnVtYmVyLFxuICBmcmljdGlvbjogbnVtYmVyLFxuKTogU3ByaW5nQ29uZmlnVHlwZSB7XG4gIHJldHVybiB7XG4gICAgc3RpZmZuZXNzOiBzdGlmZm5lc3NGcm9tT3JpZ2FtaVZhbHVlKHRlbnNpb24pLFxuICAgIGRhbXBpbmc6IGRhbXBpbmdGcm9tT3JpZ2FtaVZhbHVlKGZyaWN0aW9uKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Cb3VuY2luZXNzQW5kU3BlZWQoXG4gIGJvdW5jaW5lc3M6IG51bWJlcixcbiAgc3BlZWQ6IG51bWJlcixcbik6IFNwcmluZ0NvbmZpZ1R5cGUge1xuICBmdW5jdGlvbiBub3JtYWxpemUodmFsdWU6IG51bWJlciwgc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAtIHN0YXJ0VmFsdWUpIC8gKGVuZFZhbHVlIC0gc3RhcnRWYWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9qZWN0Tm9ybWFsKG46IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICByZXR1cm4gc3RhcnQgKyBuICogKGVuZCAtIHN0YXJ0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVhckludGVycG9sYXRpb24odDogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgIHJldHVybiB0ICogZW5kICsgKDEgLSB0KSAqIHN0YXJ0O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhZHJhdGljT3V0SW50ZXJwb2xhdGlvbih0OiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oMiAqIHQgLSB0ICogdCwgc3RhcnQsIGVuZCk7XG4gIH1cblxuICBmdW5jdGlvbiBiM0ZyaWN0aW9uMSh4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gMC4wMDA3ICogTWF0aC5wb3coeCwgMykgLSAwLjAzMSAqIE1hdGgucG93KHgsIDIpICsgMC42NCAqIHggKyAxLjI4O1xuICB9XG5cbiAgZnVuY3Rpb24gYjNGcmljdGlvbjIoeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIDAuMDAwMDQ0ICogTWF0aC5wb3coeCwgMykgLSAwLjAwNiAqIE1hdGgucG93KHgsIDIpICsgMC4zNiAqIHggKyAyO1xuICB9XG5cbiAgZnVuY3Rpb24gYjNGcmljdGlvbjMoeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDAuMDAwMDAwNDUgKiBNYXRoLnBvdyh4LCAzKSAtXG4gICAgICAwLjAwMDMzMiAqIE1hdGgucG93KHgsIDIpICtcbiAgICAgIDAuMTA3OCAqIHggK1xuICAgICAgNS44NFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBiM05vYm91bmNlKHRlbnNpb246IG51bWJlcikge1xuICAgIGlmICh0ZW5zaW9uIDw9IDE4KSB7XG4gICAgICByZXR1cm4gYjNGcmljdGlvbjEodGVuc2lvbik7XG4gICAgfSBlbHNlIGlmICh0ZW5zaW9uID4gMTggJiYgdGVuc2lvbiA8PSA0NCkge1xuICAgICAgcmV0dXJuIGIzRnJpY3Rpb24yKHRlbnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYjNGcmljdGlvbjModGVuc2lvbik7XG4gICAgfVxuICB9XG5cbiAgbGV0IGIgPSBub3JtYWxpemUoYm91bmNpbmVzcyAvIDEuNywgMCwgMjApO1xuICBiID0gcHJvamVjdE5vcm1hbChiLCAwLCAwLjgpO1xuICBjb25zdCBzID0gbm9ybWFsaXplKHNwZWVkIC8gMS43LCAwLCAyMCk7XG4gIGNvbnN0IGJvdW5jeVRlbnNpb24gPSBwcm9qZWN0Tm9ybWFsKHMsIDAuNSwgMjAwKTtcbiAgY29uc3QgYm91bmN5RnJpY3Rpb24gPSBxdWFkcmF0aWNPdXRJbnRlcnBvbGF0aW9uKFxuICAgIGIsXG4gICAgYjNOb2JvdW5jZShib3VuY3lUZW5zaW9uKSxcbiAgICAwLjAxLFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgc3RpZmZuZXNzOiBzdGlmZm5lc3NGcm9tT3JpZ2FtaVZhbHVlKGJvdW5jeVRlbnNpb24pLFxuICAgIGRhbXBpbmc6IGRhbXBpbmdGcm9tT3JpZ2FtaVZhbHVlKGJvdW5jeUZyaWN0aW9uKSxcbiAgfTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtQ29uZmlnfSBmcm9tICcuLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcbmltcG9ydCB0eXBlIHtSZ2JhVmFsdWV9IGZyb20gJy4uL25vZGVzL0FuaW1hdGVkQ29sb3InO1xuaW1wb3J0IHR5cGUgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uIGZyb20gJy4uL25vZGVzL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5pbXBvcnQgdHlwZSBBbmltYXRlZFZhbHVlIGZyb20gJy4uL25vZGVzL0FuaW1hdGVkVmFsdWUnO1xuaW1wb3J0IHR5cGUgQW5pbWF0ZWRWYWx1ZVhZIGZyb20gJy4uL25vZGVzL0FuaW1hdGVkVmFsdWVYWSc7XG5pbXBvcnQgdHlwZSB7QW5pbWF0aW9uQ29uZmlnLCBFbmRDYWxsYmFja30gZnJvbSAnLi9BbmltYXRpb24nO1xuXG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRIZWxwZXIgZnJvbSAnLi4vTmF0aXZlQW5pbWF0ZWRIZWxwZXInO1xuaW1wb3J0IEFuaW1hdGVkQ29sb3IgZnJvbSAnLi4vbm9kZXMvQW5pbWF0ZWRDb2xvcic7XG5pbXBvcnQgQW5pbWF0aW9uIGZyb20gJy4vQW5pbWF0aW9uJztcblxuZXhwb3J0IHR5cGUgVGltaW5nQW5pbWF0aW9uQ29uZmlnID0gJFJlYWRPbmx5PHtcbiAgLi4uQW5pbWF0aW9uQ29uZmlnLFxuICB0b1ZhbHVlOlxuICAgIHwgbnVtYmVyXG4gICAgfCBBbmltYXRlZFZhbHVlXG4gICAgfCB7XG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgeTogbnVtYmVyLFxuICAgICAgICAuLi5cbiAgICAgIH1cbiAgICB8IEFuaW1hdGVkVmFsdWVYWVxuICAgIHwgUmdiYVZhbHVlXG4gICAgfCBBbmltYXRlZENvbG9yXG4gICAgfCBBbmltYXRlZEludGVycG9sYXRpb248bnVtYmVyPixcbiAgZWFzaW5nPzogKHZhbHVlOiBudW1iZXIpID0+IG51bWJlcixcbiAgZHVyYXRpb24/OiBudW1iZXIsXG4gIGRlbGF5PzogbnVtYmVyLFxufT47XG5cbmV4cG9ydCB0eXBlIFRpbWluZ0FuaW1hdGlvbkNvbmZpZ1NpbmdsZSA9ICRSZWFkT25seTx7XG4gIC4uLkFuaW1hdGlvbkNvbmZpZyxcbiAgdG9WYWx1ZTogbnVtYmVyLFxuICBlYXNpbmc/OiAodmFsdWU6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkdXJhdGlvbj86IG51bWJlcixcbiAgZGVsYXk/OiBudW1iZXIsXG59PjtcblxubGV0IF9lYXNlSW5PdXQ7XG5mdW5jdGlvbiBlYXNlSW5PdXQoKSB7XG4gIGlmICghX2Vhc2VJbk91dCkge1xuICAgIGNvbnN0IEVhc2luZyA9IHJlcXVpcmUoJy4uL0Vhc2luZycpLmRlZmF1bHQ7XG4gICAgX2Vhc2VJbk91dCA9IEVhc2luZy5pbk91dChFYXNpbmcuZWFzZSk7XG4gIH1cbiAgcmV0dXJuIF9lYXNlSW5PdXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbWluZ0FuaW1hdGlvbiBleHRlbmRzIEFuaW1hdGlvbiB7XG4gIF9zdGFydFRpbWU6IG51bWJlcjtcbiAgX2Zyb21WYWx1ZTogbnVtYmVyO1xuICBfdG9WYWx1ZTogbnVtYmVyO1xuICBfZHVyYXRpb246IG51bWJlcjtcbiAgX2RlbGF5OiBudW1iZXI7XG4gIF9lYXNpbmc6ICh2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXI7XG4gIF9vblVwZGF0ZTogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG4gIF9hbmltYXRpb25GcmFtZTogYW55O1xuICBfdGltZW91dDogYW55O1xuICBfdXNlTmF0aXZlRHJpdmVyOiBib29sZWFuO1xuICBfcGxhdGZvcm1Db25maWc6ID9QbGF0Zm9ybUNvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFRpbWluZ0FuaW1hdGlvbkNvbmZpZ1NpbmdsZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdG9WYWx1ZSA9IGNvbmZpZy50b1ZhbHVlO1xuICAgIHRoaXMuX2Vhc2luZyA9IGNvbmZpZy5lYXNpbmcgPz8gZWFzZUluT3V0KCk7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBjb25maWcuZHVyYXRpb24gPz8gNTAwO1xuICAgIHRoaXMuX2RlbGF5ID0gY29uZmlnLmRlbGF5ID8/IDA7XG4gICAgdGhpcy5fX2l0ZXJhdGlvbnMgPSBjb25maWcuaXRlcmF0aW9ucyA/PyAxO1xuICAgIHRoaXMuX3VzZU5hdGl2ZURyaXZlciA9IE5hdGl2ZUFuaW1hdGVkSGVscGVyLnNob3VsZFVzZU5hdGl2ZURyaXZlcihjb25maWcpO1xuICAgIHRoaXMuX3BsYXRmb3JtQ29uZmlnID0gY29uZmlnLnBsYXRmb3JtQ29uZmlnO1xuICAgIHRoaXMuX19pc0ludGVyYWN0aW9uID0gY29uZmlnLmlzSW50ZXJhY3Rpb24gPz8gIXRoaXMuX3VzZU5hdGl2ZURyaXZlcjtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQW5pbWF0aW9uQ29uZmlnKCk6IGFueSB7XG4gICAgY29uc3QgZnJhbWVEdXJhdGlvbiA9IDEwMDAuMCAvIDYwLjA7XG4gICAgY29uc3QgZnJhbWVzID0gW107XG4gICAgY29uc3QgbnVtRnJhbWVzID0gTWF0aC5yb3VuZCh0aGlzLl9kdXJhdGlvbiAvIGZyYW1lRHVyYXRpb24pO1xuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCBudW1GcmFtZXM7IGZyYW1lKyspIHtcbiAgICAgIGZyYW1lcy5wdXNoKHRoaXMuX2Vhc2luZyhmcmFtZSAvIG51bUZyYW1lcykpO1xuICAgIH1cbiAgICBmcmFtZXMucHVzaCh0aGlzLl9lYXNpbmcoMSkpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZnJhbWVzJyxcbiAgICAgIGZyYW1lcyxcbiAgICAgIHRvVmFsdWU6IHRoaXMuX3RvVmFsdWUsXG4gICAgICBpdGVyYXRpb25zOiB0aGlzLl9faXRlcmF0aW9ucyxcbiAgICAgIHBsYXRmb3JtQ29uZmlnOiB0aGlzLl9wbGF0Zm9ybUNvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgc3RhcnQoXG4gICAgZnJvbVZhbHVlOiBudW1iZXIsXG4gICAgb25VcGRhdGU6ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uRW5kOiA/RW5kQ2FsbGJhY2ssXG4gICAgcHJldmlvdXNBbmltYXRpb246ID9BbmltYXRpb24sXG4gICAgYW5pbWF0ZWRWYWx1ZTogQW5pbWF0ZWRWYWx1ZSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fX2FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5fZnJvbVZhbHVlID0gZnJvbVZhbHVlO1xuICAgIHRoaXMuX29uVXBkYXRlID0gb25VcGRhdGU7XG4gICAgdGhpcy5fX29uRW5kID0gb25FbmQ7XG5cbiAgICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fdXNlTmF0aXZlRHJpdmVyICYmIGFuaW1hdGVkVmFsdWUuX19pc05hdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0F0dGVtcHRpbmcgdG8gcnVuIEpTIGRyaXZlbiBhbmltYXRpb24gb24gYW5pbWF0ZWQgbm9kZSAnICtcbiAgICAgICAgICAgICd0aGF0IGhhcyBiZWVuIG1vdmVkIHRvIFwibmF0aXZlXCIgZWFybGllciBieSBzdGFydGluZyBhbiAnICtcbiAgICAgICAgICAgICdhbmltYXRpb24gd2l0aCBgdXNlTmF0aXZlRHJpdmVyOiB0cnVlYCcsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFuaW1hdGlvbnMgdGhhdCBzb21ldGltZXMgaGF2ZSAwIGR1cmF0aW9uIGFuZCBzb21ldGltZXMgZG8gbm90XG4gICAgICAvLyBzdGlsbCBuZWVkIHRvIHVzZSB0aGUgbmF0aXZlIGRyaXZlciB3aGVuIGR1cmF0aW9uIGlzIDAgc28gYXMgdG9cbiAgICAgIC8vIG5vdCBjYXVzZSBpbnRlcm1peGVkIEpTIGFuZCBuYXRpdmUgYW5pbWF0aW9ucy5cbiAgICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCAmJiAhdGhpcy5fdXNlTmF0aXZlRHJpdmVyKSB7XG4gICAgICAgIHRoaXMuX29uVXBkYXRlKHRoaXMuX3RvVmFsdWUpO1xuICAgICAgICB0aGlzLl9fZGVib3VuY2VkT25FbmQoe2ZpbmlzaGVkOiB0cnVlfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGhpcy5fdXNlTmF0aXZlRHJpdmVyKSB7XG4gICAgICAgICAgdGhpcy5fX3N0YXJ0TmF0aXZlQW5pbWF0aW9uKGFuaW1hdGVkVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgICAgICAgICAgdGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0aGlzLl9kZWxheSkge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoc3RhcnQsIHRoaXMuX2RlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBvblVwZGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgPj0gdGhpcy5fc3RhcnRUaW1lICsgdGhpcy5fZHVyYXRpb24pIHtcbiAgICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgICB0aGlzLl9vblVwZGF0ZSh0aGlzLl90b1ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX29uVXBkYXRlKFxuICAgICAgICAgIHRoaXMuX2Zyb21WYWx1ZSArIHRoaXMuX2Vhc2luZygxKSAqICh0aGlzLl90b1ZhbHVlIC0gdGhpcy5fZnJvbVZhbHVlKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19kZWJvdW5jZWRPbkVuZCh7ZmluaXNoZWQ6IHRydWV9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9vblVwZGF0ZShcbiAgICAgIHRoaXMuX2Zyb21WYWx1ZSArXG4gICAgICAgIHRoaXMuX2Vhc2luZygobm93IC0gdGhpcy5fc3RhcnRUaW1lKSAvIHRoaXMuX2R1cmF0aW9uKSAqXG4gICAgICAgICAgKHRoaXMuX3RvVmFsdWUgLSB0aGlzLl9mcm9tVmFsdWUpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX19hY3RpdmUpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMub25VcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgc3RvcCgpOiB2b2lkIHtcbiAgICBzdXBlci5zdG9wKCk7XG4gICAgdGhpcy5fX2FjdGl2ZSA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWUpO1xuICAgIHRoaXMuX19kZWJvdW5jZWRPbkVuZCh7ZmluaXNoZWQ6IGZhbHNlfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCBWaWV3IGZyb20gJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCB1c2VNZXJnZVJlZnMgZnJvbSAnLi4vVXRpbGl0aWVzL3VzZU1lcmdlUmVmcyc7XG5pbXBvcnQgdXNlQW5pbWF0ZWRQcm9wcyBmcm9tICcuL3VzZUFuaW1hdGVkUHJvcHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vLyAkRmxvd0ZpeE1lW2RlcHJlY2F0ZWQtdHlwZV1cbmV4cG9ydCB0eXBlIEFuaW1hdGVkUHJvcHM8UHJvcHM6IHsuLi59PiA9ICRPYmpNYXA8XG4gIFByb3BzICZcbiAgICAkUmVhZE9ubHk8e1xuICAgICAgcGFzc3Rocm91Z2hBbmltYXRlZFByb3BFeHBsaWNpdFZhbHVlcz86IFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFZpZXc+LFxuICAgIH0+LFxuICAoKSA9PiBhbnksXG4+O1xuXG5leHBvcnQgdHlwZSBBbmltYXRlZENvbXBvbmVudFR5cGU8XG4gIFByb3BzOiB7Li4ufSxcbiAgK0luc3RhbmNlID0gbWl4ZWQsXG4+ID0gUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8QW5pbWF0ZWRQcm9wczxQcm9wcz4sIEluc3RhbmNlPjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQ8VFByb3BzOiB7Li4ufSwgVEluc3RhbmNlPihcbiAgQ29tcG9uZW50OiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxUUHJvcHMsIFRJbnN0YW5jZT4sXG4pOiBBbmltYXRlZENvbXBvbmVudFR5cGU8VFByb3BzLCBUSW5zdGFuY2U+IHtcbiAgY29uc3QgQW5pbWF0ZWRDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmPEFuaW1hdGVkUHJvcHM8VFByb3BzPiwgVEluc3RhbmNlPihcbiAgICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgICAgY29uc3QgW3JlZHVjZWRQcm9wcywgY2FsbGJhY2tSZWZdID0gdXNlQW5pbWF0ZWRQcm9wczxUUHJvcHMsIFRJbnN0YW5jZT4oXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgIHByb3BzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlZiA9IHVzZU1lcmdlUmVmczxUSW5zdGFuY2U+KGNhbGxiYWNrUmVmLCBmb3J3YXJkZWRSZWYpO1xuXG4gICAgICAvLyBTb21lIGNvbXBvbmVudHMgcmVxdWlyZSBleHBsaWNpdCBwYXNzdGhyb3VnaCB2YWx1ZXMgZm9yIGFuaW1hdGlvblxuICAgICAgLy8gdG8gd29yayBwcm9wZXJseS4gRm9yIGV4YW1wbGUsIGlmIGFuIGFuaW1hdGVkIGNvbXBvbmVudCBpc1xuICAgICAgLy8gdHJhbnNmb3JtZWQgYW5kIFByZXNzYWJsZSwgb25QcmVzcyB3aWxsIG5vdCB3b3JrIGFmdGVyIHRyYW5zZm9ybVxuICAgICAgLy8gd2l0aG91dCB0aGVzZSBwYXNzdGhyb3VnaCB2YWx1ZXMuXG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIGNvbnN0IHtwYXNzdGhyb3VnaEFuaW1hdGVkUHJvcEV4cGxpY2l0VmFsdWVzLCBzdHlsZX0gPSByZWR1Y2VkUHJvcHM7XG4gICAgICBjb25zdCB7c3R5bGU6IHBhc3N0aHJvdWdoU3R5bGUsIC4uLnBhc3N0aHJvdWdoUHJvcHN9ID1cbiAgICAgICAgcGFzc3Rocm91Z2hBbmltYXRlZFByb3BFeHBsaWNpdFZhbHVlcyA/PyB7fTtcbiAgICAgIGNvbnN0IG1lcmdlZFN0eWxlID0gey4uLnN0eWxlLCAuLi5wYXNzdGhyb3VnaFN0eWxlfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbXBvbmVudFxuICAgICAgICAgIHsuLi5yZWR1Y2VkUHJvcHN9XG4gICAgICAgICAgey4uLnBhc3N0aHJvdWdoUHJvcHN9XG4gICAgICAgICAgc3R5bGU9e21lcmdlZFN0eWxlfVxuICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIEFuaW1hdGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEFuaW1hdGVkKCR7XG4gICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8ICdBbm9ueW1vdXMnXG4gIH0pYDtcblxuICByZXR1cm4gQW5pbWF0ZWRDb21wb25lbnQ7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9mZWF0dXJlZmxhZ3MvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MnO1xuaW1wb3J0IHtpc1B1YmxpY0luc3RhbmNlIGFzIGlzRmFicmljUHVibGljSW5zdGFuY2V9IGZyb20gJy4uL1JlYWN0TmF0aXZlL1JlYWN0RmFicmljUHVibGljSW5zdGFuY2UvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZVV0aWxzJztcbmltcG9ydCB1c2VSZWZFZmZlY3QgZnJvbSAnLi4vVXRpbGl0aWVzL3VzZVJlZkVmZmVjdCc7XG5pbXBvcnQge0FuaW1hdGVkRXZlbnR9IGZyb20gJy4vQW5pbWF0ZWRFdmVudCc7XG5pbXBvcnQgTmF0aXZlQW5pbWF0ZWRIZWxwZXIgZnJvbSAnLi9OYXRpdmVBbmltYXRlZEhlbHBlcic7XG5pbXBvcnQgQW5pbWF0ZWRQcm9wcyBmcm9tICcuL25vZGVzL0FuaW1hdGVkUHJvcHMnO1xuaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG59IGZyb20gJ3JlYWN0JztcblxudHlwZSBSZWR1Y2VkUHJvcHM8VFByb3BzPiA9IHtcbiAgLi4uVFByb3BzLFxuICBjb2xsYXBzYWJsZTogYm9vbGVhbixcbiAgLi4uXG59O1xudHlwZSBDYWxsYmFja1JlZjxUPiA9IFQgPT4gbWl4ZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUFuaW1hdGVkUHJvcHM8VFByb3BzOiB7Li4ufSwgVEluc3RhbmNlPihcbiAgcHJvcHM6IFRQcm9wcyxcbik6IFtSZWR1Y2VkUHJvcHM8VFByb3BzPiwgQ2FsbGJhY2tSZWY8VEluc3RhbmNlIHwgbnVsbD5dIHtcbiAgY29uc3QgWywgc2NoZWR1bGVVcGRhdGVdID0gdXNlUmVkdWNlcjxudW1iZXIsIHZvaWQ+KGNvdW50ID0+IGNvdW50ICsgMSwgMCk7XG4gIGNvbnN0IG9uVXBkYXRlUmVmID0gdXNlUmVmPD8oKSA9PiB2b2lkPihudWxsKTtcbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWY8VGltZW91dElEIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gVE9ETzogT25seSBpbnZhbGlkYXRlIGBub2RlYCBpZiBhbmltYXRlZCBwcm9wcyBvciBgc3R5bGVgIGNoYW5nZS4gSW4gdGhlXG4gIC8vIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCB3ZSBwZXJtaXR0ZWQgYHN0eWxlYCB0byBvdmVycmlkZSBwcm9wcyB3aXRoIHRoZVxuICAvLyBzYW1lIG5hbWUgcHJvcGVydHkgbmFtZSBhcyBzdHlsZXMsIHNvIHdlIGNhbiBwcm9iYWJseSBjb250aW51ZSBkb2luZyB0aGF0LlxuICAvLyBUaGUgb3JkZXJpbmcgb2Ygb3RoZXIgcHJvcHMgKnNob3VsZCogbm90IG1hdHRlci5cbiAgY29uc3Qgbm9kZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbmV3IEFuaW1hdGVkUHJvcHMocHJvcHMsICgpID0+IG9uVXBkYXRlUmVmLmN1cnJlbnQ/LigpKSxcbiAgICBbcHJvcHNdLFxuICApO1xuICBjb25zdCB1c2VOYXRpdmVQcm9wc0luRmFicmljID1cbiAgICBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncy5zaG91bGRVc2VTZXROYXRpdmVQcm9wc0luRmFicmljKCk7XG4gIHVzZUFuaW1hdGVkUHJvcHNMaWZlY3ljbGUobm9kZSk7XG5cbiAgLy8gVE9ETzogVGhpcyBcImVmZmVjdFwiIGRvZXMgdGhyZWUgdGhpbmdzOlxuICAvL1xuICAvLyAgIDEpIENhbGwgYHNldE5hdGl2ZVZpZXdgLlxuICAvLyAgIDIpIFVwZGF0ZSBgb25VcGRhdGVSZWZgLlxuICAvLyAgIDMpIFVwZGF0ZSBsaXN0ZW5lcnMgZm9yIGBBbmltYXRlZEV2ZW50YCBwcm9wcy5cbiAgLy9cbiAgLy8gSWRlYWxseSwgZWFjaCBvZiB0aGVzZSB3b3VsZCBiZSBzZXBhcmF0ZSBcImVmZmVjdHNcIiBzbyB0aGF0IHRoZXkgYXJlIG5vdFxuICAvLyB1bm5lY2Vzc2FyaWx5IHJlLXJ1biB3aGVuIGlycmVsZXZhbnQgZGVwZW5kZW5jaWVzIGNoYW5nZS4gRm9yIGV4YW1wbGUsIHdlXG4gIC8vIHNob3VsZCBiZSBhYmxlIHRvIGhvaXN0IGFsbCBgQW5pbWF0ZWRFdmVudGAgcHJvcHMgYW5kIG9ubHkgZG8gIzMgaWYgZWl0aGVyXG4gIC8vIHRoZSBgQW5pbWF0ZWRFdmVudGAgcHJvcHMgY2hhbmdlIG9yIGBpbnN0YW5jZWAgY2hhbmdlcy5cbiAgLy9cbiAgLy8gQnV0IHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc3BhcmVudGx5IGNvbXBvc2UgdGhyZWUgc2VwYXJhdGUgY2FsbGJhY2sgcmVmcyxcbiAgLy8gc28gd2UganVzdCBjb21iaW5lIHRoZW0gYWxsIGludG8gb25lIGZvciBub3cuXG4gIGNvbnN0IHJlZkVmZmVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChpbnN0YW5jZTogVEluc3RhbmNlKSA9PiB7XG4gICAgICAvLyBOT1RFOiBUaGlzIG1heSBiZSBjYWxsZWQgbW9yZSBvZnRlbiB0aGFuIG5lY2Vzc2FyeSAoZS5nLiB3aGVuIGBwcm9wc2BcbiAgICAgIC8vIGNoYW5nZXMpLCBidXQgYHNldE5hdGl2ZVZpZXdgIGFscmVhZHkgb3B0aW1pemVzIGZvciB0aGF0LlxuICAgICAgbm9kZS5zZXROYXRpdmVWaWV3KGluc3RhbmNlKTtcblxuICAgICAgLy8gTk9URTogV2hlbiB1c2luZyB0aGUgSlMgYW5pbWF0aW9uIGRyaXZlciwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgb25cbiAgICAgIC8vIGV2ZXJ5IGFuaW1hdGlvbiBmcmFtZS4gV2hlbiB1c2luZyB0aGUgbmF0aXZlIGRyaXZlciwgdGhpcyBjYWxsYmFjayBpc1xuICAgICAgLy8gY2FsbGVkIHdoZW4gdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXMuXG4gICAgICBvblVwZGF0ZVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyB8fFxuICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZSAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2U/LnNldE5hdGl2ZVByb3BzICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgKGlzRmFicmljSW5zdGFuY2UoaW5zdGFuY2UpICYmICF1c2VOYXRpdmVQcm9wc0luRmFicmljKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBTY2hlZHVsZSBhbiB1cGRhdGUgZm9yIHRoaXMgY29tcG9uZW50IHRvIHVwZGF0ZSBgcmVkdWNlZFByb3BzYCxcbiAgICAgICAgICAvLyBidXQgZG8gbm90IGNvbXB1dGUgaXQgaW1tZWRpYXRlbHkuIElmIGEgcGFyZW50IGFsc28gdXBkYXRlZCwgd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIG1lcmdlIHRob3NlIG5ldyBwcm9wcyBpbiBiZWZvcmUgdXBkYXRpbmcuXG4gICAgICAgICAgc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICghbm9kZS5fX2lzTmF0aXZlKSB7XG4gICAgICAgICAgLy8gJEZsb3dJZ25vcmVbbm90LWEtZnVuY3Rpb25dIC0gQXNzdW1lIGl0J3Mgc3RpbGwgYSBmdW5jdGlvbi5cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgICAgaW5zdGFuY2Uuc2V0TmF0aXZlUHJvcHMobm9kZS5fX2dldEFuaW1hdGVkVmFsdWUoKSk7XG4gICAgICAgICAgaWYgKGlzRmFicmljSW5zdGFuY2UoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAvLyBLZWVwaW5nIHN0YXRlIG9mIEZpYmVyIHRyZWUgYW5kIFNoYWRvdyB0cmVlIGluIHN5bmMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgYHNjaGVkdWxlVXBkYXRlYCB3aGljaCB3aWxsIHRyaWdnZXIgYSBjb21taXQuXG4gICAgICAgICAgICAvLyBIb3dldmVyLCBSZWFjdCBjb21taXQgaXMgbm90IGZhc3QgZW5vdWdoIHRvIGRyaXZlIGFuaW1hdGlvbnMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHdoZXJlIHNldE5hdGl2ZVByb3BzIGNvbWVzIGluIGhhbmR5IGJ1dCB0aGUgc3RhdGUgYmV0d2VlblxuICAgICAgICAgICAgLy8gRmliZXIgdHJlZSBhbmQgU2hhZG93IHRyZWUgbmVlZHMgdG8gYmUga2VwdCBpbiBzeW5jLlxuICAgICAgICAgICAgLy8gVGhlIGdvYWwgaXMgdG8gY2FsbCBgc2NoZWR1bGVVcGRhdGVgIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSB0byBtYWludGFpblxuICAgICAgICAgICAgLy8gcGVyZm9ybWFuY2UgYnV0IGZyZXF1ZW50bHkgZW5vdWdoIHRvIGtlZXAgc3RhdGUgaW4gc3luYy5cbiAgICAgICAgICAgIC8vIERlYm91bmNlIGlzIHNldCB0byA0OG1zLCB3aGljaCBpcyAzICogdGhlIGR1cmF0aW9uIG9mIGEgZnJhbWUuXG4gICAgICAgICAgICAvLyAzIGZyYW1lcyB3YXMgdGhlIGhpZ2hlc3QgdmFsdWUgd2hlcmUgZmxpY2tlcmluZyBzdGF0ZSB3YXMgbm90IG9ic2VydmVkLlxuICAgICAgICAgICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfSwgNDgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoaW5zdGFuY2UpO1xuICAgICAgY29uc3QgZXZlbnRzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcE5hbWUgaW4gcHJvcHMpIHtcbiAgICAgICAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgQW5pbWF0ZWRFdmVudCAmJiBwcm9wVmFsdWUuX19pc05hdGl2ZSkge1xuICAgICAgICAgIHByb3BWYWx1ZS5fX2F0dGFjaCh0YXJnZXQsIHByb3BOYW1lKTtcbiAgICAgICAgICBldmVudHMucHVzaChbcHJvcE5hbWUsIHByb3BWYWx1ZV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIG9uVXBkYXRlUmVmLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3Byb3BOYW1lLCBwcm9wVmFsdWVdIG9mIGV2ZW50cykge1xuICAgICAgICAgIHByb3BWYWx1ZS5fX2RldGFjaCh0YXJnZXQsIHByb3BOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIFtwcm9wcywgbm9kZSwgdXNlTmF0aXZlUHJvcHNJbkZhYnJpY10sXG4gICk7XG4gIGNvbnN0IGNhbGxiYWNrUmVmID0gdXNlUmVmRWZmZWN0PFRJbnN0YW5jZT4ocmVmRWZmZWN0KTtcblxuICByZXR1cm4gW3JlZHVjZUFuaW1hdGVkUHJvcHM8VFByb3BzPihub2RlKSwgY2FsbGJhY2tSZWZdO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VBbmltYXRlZFByb3BzPFRQcm9wcz4oXG4gIG5vZGU6IEFuaW1hdGVkUHJvcHMsXG4pOiBSZWR1Y2VkUHJvcHM8VFByb3BzPiB7XG4gIC8vIEZvcmNlIGBjb2xsYXBzYWJsZWAgdG8gYmUgZmFsc2Ugc28gdGhhdCB0aGUgbmF0aXZlIHZpZXcgaXMgbm90IGZsYXR0ZW5lZC5cbiAgLy8gRmxhdHRlbmVkIHZpZXdzIGNhbm5vdCBiZSBhY2N1cmF0ZWx5IHJlZmVyZW5jZWQgYnkgdGhlIG5hdGl2ZSBkcml2ZXIuXG4gIHJldHVybiB7XG4gICAgLi4ubm9kZS5fX2dldFZhbHVlKCksXG4gICAgY29sbGFwc2FibGU6IGZhbHNlLFxuICB9O1xufVxuXG4vKipcbiAqIE1hbmFnZXMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgc3VwcGxpZWQgYEFuaW1hdGVkUHJvcHNgIGJ5IGludm9raW5nIGBfX2F0dGFjaGBcbiAqIGFuZCBgX19kZXRhY2hgLiBIb3dldmVyLCB0aGlzIGlzIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSBgQW5pbWF0ZWRQcm9wc2BcbiAqIHVzZXMgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGRldGVybWluZSB3aGVuIHRvIHJlY3Vyc2l2ZWx5IGRldGFjaCBpdHMgY2hpbGRyZW5cbiAqIG5vZGVzLiBTbyBpbiBvcmRlciB0byBvcHRpbWl6ZSB0aGlzLCB3ZSBhdm9pZCBkZXRhY2hpbmcgdW50aWwgdGhlIG5leHQgYXR0YWNoXG4gKiB1bmxlc3Mgd2UgYXJlIHVubW91bnRpbmcuXG4gKi9cbmZ1bmN0aW9uIHVzZUFuaW1hdGVkUHJvcHNMaWZlY3ljbGUobm9kZTogQW5pbWF0ZWRQcm9wcyk6IHZvaWQge1xuICBjb25zdCBwcmV2Tm9kZVJlZiA9IHVzZVJlZjw/QW5pbWF0ZWRQcm9wcz4obnVsbCk7XG4gIGNvbnN0IGlzVW5tb3VudGluZ1JlZiA9IHVzZVJlZjxib29sZWFuPihmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBJdCBpcyBvayBmb3IgbXVsdGlwbGUgY29tcG9uZW50cyB0byBjYWxsIGBmbHVzaFF1ZXVlYCBiZWNhdXNlIGl0IG5vb3BzXG4gICAgLy8gaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LiBXaGVuIG11bHRpcGxlIGFuaW1hdGVkIGNvbXBvbmVudHMgYXJlIG1vdW50ZWQgYXRcbiAgICAvLyB0aGUgc2FtZSB0aW1lLiBPbmx5IGZpcnN0IGNvbXBvbmVudCBmbHVzaGVzIHRoZSBxdWV1ZSBhbmQgdGhlIG90aGVycyB3aWxsIG5vb3AuXG4gICAgTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJLmZsdXNoUXVldWUoKTtcbiAgfSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpc1VubW91bnRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpc1VubW91bnRpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgbm9kZS5fX2F0dGFjaCgpO1xuICAgIGlmIChwcmV2Tm9kZVJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZXZOb2RlID0gcHJldk5vZGVSZWYuY3VycmVudDtcbiAgICAgIC8vIFRPRE86IFN0b3AgcmVzdG9yaW5nIGRlZmF1bHQgdmFsdWVzICh1bmxlc3MgYHJlc2V0YCBpcyBjYWxsZWQpLlxuICAgICAgcHJldk5vZGUuX19yZXN0b3JlRGVmYXVsdFZhbHVlcygpO1xuICAgICAgcHJldk5vZGUuX19kZXRhY2goKTtcbiAgICAgIHByZXZOb2RlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGlzVW5tb3VudGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgIC8vIE5PVEU6IERvIG5vdCByZXN0b3JlIGRlZmF1bHQgdmFsdWVzIG9uIHVubW91bnQsIHNlZSBEMTgxOTc3MzUuXG4gICAgICAgIG5vZGUuX19kZXRhY2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZOb2RlUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtub2RlXSk7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0PFRJbnN0YW5jZT4oaW5zdGFuY2U6IFRJbnN0YW5jZSk6IFRJbnN0YW5jZSB7XG4gIHJldHVybiB0eXBlb2YgaW5zdGFuY2UgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIGluc3RhbmNlPy5nZXRTY3JvbGxhYmxlTm9kZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSAtIExlZ2FjeSBpbnN0YW5jZSBhc3N1bXB0aW9ucy5cbiAgICAgIGluc3RhbmNlLmdldFNjcm9sbGFibGVOb2RlKClcbiAgICA6IGluc3RhbmNlO1xufVxuXG4vLyAkRmxvd0ZpeE1lW3VuY2xlYXItdHlwZV0gLSBMZWdhY3kgaW5zdGFuY2UgYXNzdW1wdGlvbnMuXG5mdW5jdGlvbiBpc0ZhYnJpY0luc3RhbmNlKGluc3RhbmNlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBpc0ZhYnJpY1B1YmxpY0luc3RhbmNlKGluc3RhbmNlKSB8fFxuICAgIC8vIFNvbWUgY29tcG9uZW50cyBoYXZlIGEgc2V0TmF0aXZlUHJvcHMgZnVuY3Rpb24gYnV0IGFyZW4ndCBhIGhvc3QgY29tcG9uZW50XG4gICAgLy8gc3VjaCBhcyBsaXN0cyBsaWtlIEZsYXRMaXN0IGFuZCBTZWN0aW9uTGlzdC4gVGhlc2Ugc2hvdWxkIGFsc28gdXNlXG4gICAgLy8gZm9yY2VVcGRhdGUgaW4gRmFicmljIHNpbmNlIHNldE5hdGl2ZVByb3BzIGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHVuZGVybHlpbmdcbiAgICAvLyBob3N0IGNvbXBvbmVudC4gVGhpcyBjcmF6eSBoYWNrIGlzIGVzc2VudGlhbGx5IHNwZWNpYWwgY2FzaW5nIHRob3NlIGxpc3RzIGFuZFxuICAgIC8vIFNjcm9sbFZpZXcgaXRzZWxmIHRvIHVzZSBmb3JjZVVwZGF0ZSBpbiBGYWJyaWMuXG4gICAgLy8gSWYgdGhlc2UgY29tcG9uZW50cyBlbmQgdXAgdXNpbmcgZm9yd2FyZFJlZiB0aGVuIHRoZXNlIGhhY2tzIGNhbiBnbyBhd2F5XG4gICAgLy8gYXMgaW5zdGFuY2Ugd291bGQgYWN0dWFsbHkgYmUgdGhlIHVuZGVybHlpbmcgaG9zdCBjb21wb25lbnQgYW5kIHRoZSBhYm92ZSBjaGVja1xuICAgIC8vIHdvdWxkIGJlIHN1ZmZpY2llbnQuXG4gICAgaXNGYWJyaWNQdWJsaWNJbnN0YW5jZShpbnN0YW5jZT8uZ2V0TmF0aXZlU2Nyb2xsUmVmPy4oKSkgfHxcbiAgICBpc0ZhYnJpY1B1YmxpY0luc3RhbmNlKFxuICAgICAgaW5zdGFuY2U/LmdldFNjcm9sbFJlc3BvbmRlcj8uKCk/LmdldE5hdGl2ZVNjcm9sbFJlZj8uKCksXG4gICAgKVxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuXG50eXBlIENhbGxiYWNrUmVmPFQ+ID0gVCA9PiBtaXhlZDtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgY2FsbGJhY2sgcmVmIHRoYXQgcHJvdmlkZXMgc2ltaWxhciBzZW1hbnRpY3MgYXMgYHVzZUVmZmVjdGAuIFRoZVxuICogc3VwcGxpZWQgYGVmZmVjdGAgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCBub24tbnVsbCBjb21wb25lbnQgaW5zdGFuY2VzLlxuICogVGhlIGBlZmZlY3RgIGNhbGxiYWNrIGNhbiBhbHNvIG9wdGlvbmFsbHkgcmV0dXJuIGEgY2xlYW51cCBmdW5jdGlvbi5cbiAqXG4gKiBXaGVuIGEgY29tcG9uZW50IGlzIHVwZGF0ZWQgb3IgdW5tb3VudGVkLCB0aGUgY2xlYW51cCBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZVxuICogYGVmZmVjdGAgY2FsbGJhY2sgd2lsbCB0aGVuIGJlIGNhbGxlZCBhZ2FpbiwgaWYgYXBwbGljYWJsZS5cbiAqXG4gKiBXaGVuIGEgbmV3IGBlZmZlY3RgIGNhbGxiYWNrIGlzIHN1cHBsaWVkLCB0aGUgcHJldmlvdXNseSByZXR1cm5lZCBjbGVhbnVwXG4gKiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIG5ldyBgZWZmZWN0YCBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGVcbiAqIHNhbWUgaW5zdGFuY2UuXG4gKlxuICogV0FSTklORzogVGhlIGBlZmZlY3RgIGNhbGxiYWNrIHNob3VsZCBiZSBzdGFibGUgKGUuZy4gdXNpbmcgYHVzZUNhbGxiYWNrYCkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVJlZkVmZmVjdDxUSW5zdGFuY2U+KFxuICBlZmZlY3Q6IFRJbnN0YW5jZSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkLFxuKTogQ2FsbGJhY2tSZWY8VEluc3RhbmNlIHwgbnVsbD4ge1xuICBjb25zdCBjbGVhbnVwUmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IHZvaWQ+KHVuZGVmaW5lZCk7XG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAoaW5zdGFuY2U6IG51bGwgfCBUSW5zdGFuY2UpID0+IHtcbiAgICAgIGlmIChjbGVhbnVwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYW51cFJlZi5jdXJyZW50KCk7XG4gICAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IGVmZmVjdChpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZWZmZWN0XSxcbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4vKipcbiAqIElNUE9SVEFOVCEhXG4gKlxuICogVGhpcyBtb2R1bGUgY2Fubm90IGltcG9ydCBgUmVhY3RGYWJyaWNgIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KVxuICogYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBieSBhcHBzIG9ubHkgdXNpbmcgdGhlIGxlZ2FjeSByZW5kZXJlci5cbiAqIEluIHRoYXQgY2FzZSBgbmF0aXZlRmFicmljVUlNYW5hZ2VyYCBpc24ndCBkZWZpbmVkIGFuZCBgUmVhY3RGYWJyaWNgIHRocm93cy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQdWJsaWNJbnN0YW5jZShtYXliZUluc3RhbmNlOiBtaXhlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIG1heWJlSW5zdGFuY2UgIT0gbnVsbCAmJlxuICAgIC8vIFRPRE86IGltcGxlbWVudCBhIGJldHRlciBjaGVjayB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZWZpbmVkIGluIHRoZSBSZWFjdCBOYXRpdmUgcmVwb3NpdG9yeS5cbiAgICAobWF5YmVJbnN0YW5jZS5fX25hdGl2ZVRhZyAhPSBudWxsIHx8XG4gICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBjaGVjayB3aGVuIHN5bmNpbmcgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSByZW5kZXJlciBmcm9tIFJlYWN0IHRvIFJlYWN0IE5hdGl2ZS5cbiAgICAgIGlzTGVnYWN5RmFicmljSW5zdGFuY2UobWF5YmVJbnN0YW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzTGVnYWN5RmFicmljSW5zdGFuY2UobWF5YmVJbnN0YW5jZTogbWl4ZWQpOiBib29sZWFuIHtcbiAgLyogZXNsaW50LWRpc2FibGUgZG90LW5vdGF0aW9uICovXG4gIHJldHVybiAoXG4gICAgbWF5YmVJbnN0YW5jZSAhPSBudWxsICYmXG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS11c2VdXG4gICAgbWF5YmVJbnN0YW5jZVsnX2ludGVybmFsSW5zdGFuY2VIYW5kbGUnXSAhPSBudWxsICYmXG4gICAgbWF5YmVJbnN0YW5jZVsnX2ludGVybmFsSW5zdGFuY2VIYW5kbGUnXS5zdGF0ZU5vZGUgIT0gbnVsbCAmJlxuICAgIG1heWJlSW5zdGFuY2VbJ19pbnRlcm5hbEluc3RhbmNlSGFuZGxlJ10uc3RhdGVOb2RlLmNhbm9uaWNhbCAhPSBudWxsXG4gICk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybUNvbmZpZ30gZnJvbSAnLi4vQW5pbWF0ZWRQbGF0Zm9ybUNvbmZpZyc7XG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGV9IGZyb20gJy4vQW5pbWF0ZWRJbnRlcnBvbGF0aW9uJztcbmltcG9ydCB0eXBlIEFuaW1hdGVkTm9kZSBmcm9tICcuL0FuaW1hdGVkTm9kZSc7XG5cbmltcG9ydCBBbmltYXRlZEludGVycG9sYXRpb24gZnJvbSAnLi9BbmltYXRlZEludGVycG9sYXRpb24nO1xuaW1wb3J0IEFuaW1hdGVkVmFsdWUgZnJvbSAnLi9BbmltYXRlZFZhbHVlJztcbmltcG9ydCBBbmltYXRlZFdpdGhDaGlsZHJlbiBmcm9tICcuL0FuaW1hdGVkV2l0aENoaWxkcmVuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRBZGRpdGlvbiBleHRlbmRzIEFuaW1hdGVkV2l0aENoaWxkcmVuIHtcbiAgX2E6IEFuaW1hdGVkTm9kZTtcbiAgX2I6IEFuaW1hdGVkTm9kZTtcblxuICBjb25zdHJ1Y3RvcihhOiBBbmltYXRlZE5vZGUgfCBudW1iZXIsIGI6IEFuaW1hdGVkTm9kZSB8IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fYSA9IHR5cGVvZiBhID09PSAnbnVtYmVyJyA/IG5ldyBBbmltYXRlZFZhbHVlKGEpIDogYTtcbiAgICB0aGlzLl9iID0gdHlwZW9mIGIgPT09ICdudW1iZXInID8gbmV3IEFuaW1hdGVkVmFsdWUoYikgOiBiO1xuICB9XG5cbiAgX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnOiA/UGxhdGZvcm1Db25maWcpIHtcbiAgICB0aGlzLl9hLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gICAgdGhpcy5fYi5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2EuX19nZXRWYWx1ZSgpICsgdGhpcy5fYi5fX2dldFZhbHVlKCk7XG4gIH1cblxuICBpbnRlcnBvbGF0ZTxPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+KFxuICAgIGNvbmZpZzogSW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGU8T3V0cHV0VD4sXG4gICk6IEFuaW1hdGVkSW50ZXJwb2xhdGlvbjxPdXRwdXRUPiB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRlZEludGVycG9sYXRpb24odGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIF9fYXR0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuX2EuX19hZGRDaGlsZCh0aGlzKTtcbiAgICB0aGlzLl9iLl9fYWRkQ2hpbGQodGhpcyk7XG4gIH1cblxuICBfX2RldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hLl9fcmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgdGhpcy5fYi5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIHN1cGVyLl9fZGV0YWNoKCk7XG4gIH1cblxuICBfX2dldE5hdGl2ZUNvbmZpZygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYWRkaXRpb24nLFxuICAgICAgaW5wdXQ6IFt0aGlzLl9hLl9fZ2V0TmF0aXZlVGFnKCksIHRoaXMuX2IuX19nZXROYXRpdmVUYWcoKV0sXG4gICAgfTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1Db25maWd9IGZyb20gJy4uL0FuaW1hdGVkUGxhdGZvcm1Db25maWcnO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25Db25maWdUeXBlfSBmcm9tICcuL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5pbXBvcnQgdHlwZSBBbmltYXRlZE5vZGUgZnJvbSAnLi9BbmltYXRlZE5vZGUnO1xuXG5pbXBvcnQgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uIGZyb20gJy4vQW5pbWF0ZWRJbnRlcnBvbGF0aW9uJztcbmltcG9ydCBBbmltYXRlZFdpdGhDaGlsZHJlbiBmcm9tICcuL0FuaW1hdGVkV2l0aENoaWxkcmVuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWREaWZmQ2xhbXAgZXh0ZW5kcyBBbmltYXRlZFdpdGhDaGlsZHJlbiB7XG4gIF9hOiBBbmltYXRlZE5vZGU7XG4gIF9taW46IG51bWJlcjtcbiAgX21heDogbnVtYmVyO1xuICBfdmFsdWU6IG51bWJlcjtcbiAgX2xhc3RWYWx1ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGE6IEFuaW1hdGVkTm9kZSwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2EgPSBhO1xuICAgIHRoaXMuX21pbiA9IG1pbjtcbiAgICB0aGlzLl9tYXggPSBtYXg7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9sYXN0VmFsdWUgPSB0aGlzLl9hLl9fZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIF9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fYS5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBpbnRlcnBvbGF0ZTxPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+KFxuICAgIGNvbmZpZzogSW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGU8T3V0cHV0VD4sXG4gICk6IEFuaW1hdGVkSW50ZXJwb2xhdGlvbjxPdXRwdXRUPiB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRlZEludGVycG9sYXRpb24odGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIF9fZ2V0VmFsdWUoKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2EuX19nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IGRpZmYgPSB2YWx1ZSAtIHRoaXMuX2xhc3RWYWx1ZTtcbiAgICB0aGlzLl9sYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IE1hdGgubWluKE1hdGgubWF4KHRoaXMuX3ZhbHVlICsgZGlmZiwgdGhpcy5fbWluKSwgdGhpcy5fbWF4KTtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBfX2F0dGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hLl9fYWRkQ2hpbGQodGhpcyk7XG4gIH1cblxuICBfX2RldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hLl9fcmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgc3VwZXIuX19kZXRhY2goKTtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdkaWZmY2xhbXAnLFxuICAgICAgaW5wdXQ6IHRoaXMuX2EuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgIG1pbjogdGhpcy5fbWluLFxuICAgICAgbWF4OiB0aGlzLl9tYXgsXG4gICAgfTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1Db25maWd9IGZyb20gJy4uL0FuaW1hdGVkUGxhdGZvcm1Db25maWcnO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25Db25maWdUeXBlfSBmcm9tICcuL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5cbmltcG9ydCBBbmltYXRlZEludGVycG9sYXRpb24gZnJvbSAnLi9BbmltYXRlZEludGVycG9sYXRpb24nO1xuaW1wb3J0IEFuaW1hdGVkTm9kZSBmcm9tICcuL0FuaW1hdGVkTm9kZSc7XG5pbXBvcnQgQW5pbWF0ZWRWYWx1ZSBmcm9tICcuL0FuaW1hdGVkVmFsdWUnO1xuaW1wb3J0IEFuaW1hdGVkV2l0aENoaWxkcmVuIGZyb20gJy4vQW5pbWF0ZWRXaXRoQ2hpbGRyZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmltYXRlZERpdmlzaW9uIGV4dGVuZHMgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4ge1xuICBfYTogQW5pbWF0ZWROb2RlO1xuICBfYjogQW5pbWF0ZWROb2RlO1xuICBfd2FybmVkQWJvdXREaXZpZGVCeVplcm86IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihhOiBBbmltYXRlZE5vZGUgfCBudW1iZXIsIGI6IEFuaW1hdGVkTm9kZSB8IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGIgPT09IDAgfHwgKGIgaW5zdGFuY2VvZiBBbmltYXRlZE5vZGUgJiYgYi5fX2dldFZhbHVlKCkgPT09IDApKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdEZXRlY3RlZCBwb3RlbnRpYWwgZGl2aXNpb24gYnkgemVybyBpbiBBbmltYXRlZERpdmlzaW9uJyk7XG4gICAgfVxuICAgIHRoaXMuX2EgPSB0eXBlb2YgYSA9PT0gJ251bWJlcicgPyBuZXcgQW5pbWF0ZWRWYWx1ZShhKSA6IGE7XG4gICAgdGhpcy5fYiA9IHR5cGVvZiBiID09PSAnbnVtYmVyJyA/IG5ldyBBbmltYXRlZFZhbHVlKGIpIDogYjtcbiAgfVxuXG4gIF9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fYS5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHRoaXMuX2IuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICBzdXBlci5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICB9XG5cbiAgX19nZXRWYWx1ZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGEgPSB0aGlzLl9hLl9fZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBiID0gdGhpcy5fYi5fX2dldFZhbHVlKCk7XG4gICAgaWYgKGIgPT09IDApIHtcbiAgICAgIC8vIFByZXZlbnQgc3BhbW1pbmcgdGhlIGNvbnNvbGUvTG9nQm94XG4gICAgICBpZiAoIXRoaXMuX3dhcm5lZEFib3V0RGl2aWRlQnlaZXJvKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RldGVjdGVkIGRpdmlzaW9uIGJ5IHplcm8gaW4gQW5pbWF0ZWREaXZpc2lvbicpO1xuICAgICAgICB0aGlzLl93YXJuZWRBYm91dERpdmlkZUJ5WmVybyA9IHRydWU7XG4gICAgICB9XG4gICAgICAvLyBQYXNzaW5nIGluZmluaXR5L05hTiB0byBGYWJyaWMgd2lsbCBjYXVzZSBhIG5hdGl2ZSBjcmFzaFxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRoaXMuX3dhcm5lZEFib3V0RGl2aWRlQnlaZXJvID0gZmFsc2U7XG4gICAgcmV0dXJuIGEgLyBiO1xuICB9XG5cbiAgaW50ZXJwb2xhdGU8T3V0cHV0VDogbnVtYmVyIHwgc3RyaW5nPihcbiAgICBjb25maWc6IEludGVycG9sYXRpb25Db25maWdUeXBlPE91dHB1dFQ+LFxuICApOiBBbmltYXRlZEludGVycG9sYXRpb248T3V0cHV0VD4ge1xuICAgIHJldHVybiBuZXcgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uKHRoaXMsIGNvbmZpZyk7XG4gIH1cblxuICBfX2F0dGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hLl9fYWRkQ2hpbGQodGhpcyk7XG4gICAgdGhpcy5fYi5fX2FkZENoaWxkKHRoaXMpO1xuICB9XG5cbiAgX19kZXRhY2goKTogdm9pZCB7XG4gICAgdGhpcy5fYS5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIHRoaXMuX2IuX19yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICBzdXBlci5fX2RldGFjaCgpO1xuICB9XG5cbiAgX19nZXROYXRpdmVDb25maWcoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2RpdmlzaW9uJyxcbiAgICAgIGlucHV0OiBbdGhpcy5fYS5fX2dldE5hdGl2ZVRhZygpLCB0aGlzLl9iLl9fZ2V0TmF0aXZlVGFnKCldLFxuICAgIH07XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtQ29uZmlnfSBmcm9tICcuLi9BbmltYXRlZFBsYXRmb3JtQ29uZmlnJztcbmltcG9ydCB0eXBlIHtJbnRlcnBvbGF0aW9uQ29uZmlnVHlwZX0gZnJvbSAnLi9BbmltYXRlZEludGVycG9sYXRpb24nO1xuaW1wb3J0IHR5cGUgQW5pbWF0ZWROb2RlIGZyb20gJy4vQW5pbWF0ZWROb2RlJztcblxuaW1wb3J0IEFuaW1hdGVkSW50ZXJwb2xhdGlvbiBmcm9tICcuL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5pbXBvcnQgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4gZnJvbSAnLi9BbmltYXRlZFdpdGhDaGlsZHJlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFuaW1hdGVkTW9kdWxvIGV4dGVuZHMgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4ge1xuICBfYTogQW5pbWF0ZWROb2RlO1xuICBfbW9kdWx1czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGE6IEFuaW1hdGVkTm9kZSwgbW9kdWx1czogbnVtYmVyKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9hID0gYTtcbiAgICB0aGlzLl9tb2R1bHVzID0gbW9kdWx1cztcbiAgfVxuXG4gIF9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fYS5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgICgodGhpcy5fYS5fX2dldFZhbHVlKCkgJSB0aGlzLl9tb2R1bHVzKSArIHRoaXMuX21vZHVsdXMpICUgdGhpcy5fbW9kdWx1c1xuICAgICk7XG4gIH1cblxuICBpbnRlcnBvbGF0ZTxPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+KFxuICAgIGNvbmZpZzogSW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGU8T3V0cHV0VD4sXG4gICk6IEFuaW1hdGVkSW50ZXJwb2xhdGlvbjxPdXRwdXRUPiB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRlZEludGVycG9sYXRpb24odGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIF9fYXR0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuX2EuX19hZGRDaGlsZCh0aGlzKTtcbiAgfVxuXG4gIF9fZGV0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuX2EuX19yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICBzdXBlci5fX2RldGFjaCgpO1xuICB9XG5cbiAgX19nZXROYXRpdmVDb25maWcoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ21vZHVsdXMnLFxuICAgICAgaW5wdXQ6IHRoaXMuX2EuX19nZXROYXRpdmVUYWcoKSxcbiAgICAgIG1vZHVsdXM6IHRoaXMuX21vZHVsdXMsXG4gICAgfTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1Db25maWd9IGZyb20gJy4uL0FuaW1hdGVkUGxhdGZvcm1Db25maWcnO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25Db25maWdUeXBlfSBmcm9tICcuL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5pbXBvcnQgdHlwZSBBbmltYXRlZE5vZGUgZnJvbSAnLi9BbmltYXRlZE5vZGUnO1xuXG5pbXBvcnQgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uIGZyb20gJy4vQW5pbWF0ZWRJbnRlcnBvbGF0aW9uJztcbmltcG9ydCBBbmltYXRlZFZhbHVlIGZyb20gJy4vQW5pbWF0ZWRWYWx1ZSc7XG5pbXBvcnQgQW5pbWF0ZWRXaXRoQ2hpbGRyZW4gZnJvbSAnLi9BbmltYXRlZFdpdGhDaGlsZHJlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFuaW1hdGVkTXVsdGlwbGljYXRpb24gZXh0ZW5kcyBBbmltYXRlZFdpdGhDaGlsZHJlbiB7XG4gIF9hOiBBbmltYXRlZE5vZGU7XG4gIF9iOiBBbmltYXRlZE5vZGU7XG5cbiAgY29uc3RydWN0b3IoYTogQW5pbWF0ZWROb2RlIHwgbnVtYmVyLCBiOiBBbmltYXRlZE5vZGUgfCBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2EgPSB0eXBlb2YgYSA9PT0gJ251bWJlcicgPyBuZXcgQW5pbWF0ZWRWYWx1ZShhKSA6IGE7XG4gICAgdGhpcy5fYiA9IHR5cGVvZiBiID09PSAnbnVtYmVyJyA/IG5ldyBBbmltYXRlZFZhbHVlKGIpIDogYjtcbiAgfVxuXG4gIF9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fYS5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHRoaXMuX2IuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICBzdXBlci5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICB9XG5cbiAgX19nZXRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hLl9fZ2V0VmFsdWUoKSAqIHRoaXMuX2IuX19nZXRWYWx1ZSgpO1xuICB9XG5cbiAgaW50ZXJwb2xhdGU8T3V0cHV0VDogbnVtYmVyIHwgc3RyaW5nPihcbiAgICBjb25maWc6IEludGVycG9sYXRpb25Db25maWdUeXBlPE91dHB1dFQ+LFxuICApOiBBbmltYXRlZEludGVycG9sYXRpb248T3V0cHV0VD4ge1xuICAgIHJldHVybiBuZXcgQW5pbWF0ZWRJbnRlcnBvbGF0aW9uKHRoaXMsIGNvbmZpZyk7XG4gIH1cbiAgX19hdHRhY2goKTogdm9pZCB7XG4gICAgdGhpcy5fYS5fX2FkZENoaWxkKHRoaXMpO1xuICAgIHRoaXMuX2IuX19hZGRDaGlsZCh0aGlzKTtcbiAgfVxuXG4gIF9fZGV0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuX2EuX19yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICB0aGlzLl9iLl9fcmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgc3VwZXIuX19kZXRhY2goKTtcbiAgfVxuXG4gIF9fZ2V0TmF0aXZlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdtdWx0aXBsaWNhdGlvbicsXG4gICAgICBpbnB1dDogW3RoaXMuX2EuX19nZXROYXRpdmVUYWcoKSwgdGhpcy5fYi5fX2dldE5hdGl2ZVRhZygpXSxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybUNvbmZpZ30gZnJvbSAnLi4vQW5pbWF0ZWRQbGF0Zm9ybUNvbmZpZyc7XG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGV9IGZyb20gJy4vQW5pbWF0ZWRJbnRlcnBvbGF0aW9uJztcbmltcG9ydCB0eXBlIEFuaW1hdGVkTm9kZSBmcm9tICcuL0FuaW1hdGVkTm9kZSc7XG5cbmltcG9ydCBBbmltYXRlZEludGVycG9sYXRpb24gZnJvbSAnLi9BbmltYXRlZEludGVycG9sYXRpb24nO1xuaW1wb3J0IEFuaW1hdGVkVmFsdWUgZnJvbSAnLi9BbmltYXRlZFZhbHVlJztcbmltcG9ydCBBbmltYXRlZFdpdGhDaGlsZHJlbiBmcm9tICcuL0FuaW1hdGVkV2l0aENoaWxkcmVuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRTdWJ0cmFjdGlvbiBleHRlbmRzIEFuaW1hdGVkV2l0aENoaWxkcmVuIHtcbiAgX2E6IEFuaW1hdGVkTm9kZTtcbiAgX2I6IEFuaW1hdGVkTm9kZTtcblxuICBjb25zdHJ1Y3RvcihhOiBBbmltYXRlZE5vZGUgfCBudW1iZXIsIGI6IEFuaW1hdGVkTm9kZSB8IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fYSA9IHR5cGVvZiBhID09PSAnbnVtYmVyJyA/IG5ldyBBbmltYXRlZFZhbHVlKGEpIDogYTtcbiAgICB0aGlzLl9iID0gdHlwZW9mIGIgPT09ICdudW1iZXInID8gbmV3IEFuaW1hdGVkVmFsdWUoYikgOiBiO1xuICB9XG5cbiAgX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnOiA/UGxhdGZvcm1Db25maWcpIHtcbiAgICB0aGlzLl9hLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gICAgdGhpcy5fYi5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHN1cGVyLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2EuX19nZXRWYWx1ZSgpIC0gdGhpcy5fYi5fX2dldFZhbHVlKCk7XG4gIH1cblxuICBpbnRlcnBvbGF0ZTxPdXRwdXRUOiBudW1iZXIgfCBzdHJpbmc+KFxuICAgIGNvbmZpZzogSW50ZXJwb2xhdGlvbkNvbmZpZ1R5cGU8T3V0cHV0VD4sXG4gICk6IEFuaW1hdGVkSW50ZXJwb2xhdGlvbjxPdXRwdXRUPiB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRlZEludGVycG9sYXRpb24odGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIF9fYXR0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuX2EuX19hZGRDaGlsZCh0aGlzKTtcbiAgICB0aGlzLl9iLl9fYWRkQ2hpbGQodGhpcyk7XG4gIH1cblxuICBfX2RldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hLl9fcmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgdGhpcy5fYi5fX3JlbW92ZUNoaWxkKHRoaXMpO1xuICAgIHN1cGVyLl9fZGV0YWNoKCk7XG4gIH1cblxuICBfX2dldE5hdGl2ZUNvbmZpZygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnc3VidHJhY3Rpb24nLFxuICAgICAgaW5wdXQ6IFt0aGlzLl9hLl9fZ2V0TmF0aXZlVGFnKCksIHRoaXMuX2IuX19nZXROYXRpdmVUYWcoKV0sXG4gICAgfTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1Db25maWd9IGZyb20gJy4uL0FuaW1hdGVkUGxhdGZvcm1Db25maWcnO1xuaW1wb3J0IHR5cGUge0VuZENhbGxiYWNrfSBmcm9tICcuLi9hbmltYXRpb25zL0FuaW1hdGlvbic7XG5pbXBvcnQgdHlwZSBBbmltYXRlZFZhbHVlIGZyb20gJy4vQW5pbWF0ZWRWYWx1ZSc7XG5cbmltcG9ydCBOYXRpdmVBbmltYXRlZEhlbHBlciBmcm9tICcuLi9OYXRpdmVBbmltYXRlZEhlbHBlcic7XG5pbXBvcnQgQW5pbWF0ZWROb2RlIGZyb20gJy4vQW5pbWF0ZWROb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5pbWF0ZWRUcmFja2luZyBleHRlbmRzIEFuaW1hdGVkTm9kZSB7XG4gIF92YWx1ZTogQW5pbWF0ZWRWYWx1ZTtcbiAgX3BhcmVudDogQW5pbWF0ZWROb2RlO1xuICBfY2FsbGJhY2s6ID9FbmRDYWxsYmFjaztcbiAgX2FuaW1hdGlvbkNvbmZpZzogT2JqZWN0O1xuICBfYW5pbWF0aW9uQ2xhc3M6IGFueTtcbiAgX3VzZU5hdGl2ZURyaXZlcjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTogQW5pbWF0ZWRWYWx1ZSxcbiAgICBwYXJlbnQ6IEFuaW1hdGVkTm9kZSxcbiAgICBhbmltYXRpb25DbGFzczogYW55LFxuICAgIGFuaW1hdGlvbkNvbmZpZzogT2JqZWN0LFxuICAgIGNhbGxiYWNrPzogP0VuZENhbGxiYWNrLFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMuX2FuaW1hdGlvbkNsYXNzID0gYW5pbWF0aW9uQ2xhc3M7XG4gICAgdGhpcy5fYW5pbWF0aW9uQ29uZmlnID0gYW5pbWF0aW9uQ29uZmlnO1xuICAgIHRoaXMuX3VzZU5hdGl2ZURyaXZlciA9XG4gICAgICBOYXRpdmVBbmltYXRlZEhlbHBlci5zaG91bGRVc2VOYXRpdmVEcml2ZXIoYW5pbWF0aW9uQ29uZmlnKTtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX19hdHRhY2goKTtcbiAgfVxuXG4gIF9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZzogP1BsYXRmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fX2lzTmF0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLl9wYXJlbnQuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICBzdXBlci5fX21ha2VOYXRpdmUocGxhdGZvcm1Db25maWcpO1xuICAgIHRoaXMuX3ZhbHVlLl9fbWFrZU5hdGl2ZShwbGF0Zm9ybUNvbmZpZyk7XG4gIH1cblxuICBfX2dldFZhbHVlKCk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudC5fX2dldFZhbHVlKCk7XG4gIH1cblxuICBfX2F0dGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wYXJlbnQuX19hZGRDaGlsZCh0aGlzKTtcbiAgICBpZiAodGhpcy5fdXNlTmF0aXZlRHJpdmVyKSB7XG4gICAgICAvLyB3aGVuIHRoZSB0cmFja2luZyBzdGFydHMgd2UgbmVlZCB0byBjb252ZXJ0IHRoaXMgbm9kZSB0byBhIFwibmF0aXZlIG5vZGVcIlxuICAgICAgLy8gc28gdGhhdCB0aGUgcGFyZW50IG5vZGUgd2lsbCBiZSBtYWRlIFwibmF0aXZlXCIgdG9vLiBUaGlzIGlzIG5lY2Vzc2FyeSBhc1xuICAgICAgLy8gaWYgd2UgZG9uJ3QgZG8gdGhpcyBgdXBkYXRlYCBtZXRob2Qgd2lsbCBnZXQgY2FsbGVkLiBBdCB0aGF0IHBvaW50IGl0XG4gICAgICAvLyBtYXkgYmUgdG9vIGxhdGUgYXMgaXQgd291bGQgbWVhbiB0aGUgSlMgZHJpdmVyIGhhcyBhbHJlYWR5IHN0YXJ0ZWRcbiAgICAgIC8vIHVwZGF0aW5nIG5vZGUgdmFsdWVzXG4gICAgICBsZXQge3BsYXRmb3JtQ29uZmlnfSA9IHRoaXMuX2FuaW1hdGlvbkNvbmZpZztcbiAgICAgIHRoaXMuX19tYWtlTmF0aXZlKHBsYXRmb3JtQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBfX2RldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wYXJlbnQuX19yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICBzdXBlci5fX2RldGFjaCgpO1xuICB9XG5cbiAgdXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlLmFuaW1hdGUoXG4gICAgICBuZXcgdGhpcy5fYW5pbWF0aW9uQ2xhc3Moe1xuICAgICAgICAuLi50aGlzLl9hbmltYXRpb25Db25maWcsXG4gICAgICAgIHRvVmFsdWU6ICh0aGlzLl9hbmltYXRpb25Db25maWcudG9WYWx1ZTogYW55KS5fX2dldFZhbHVlKCksXG4gICAgICB9KSxcbiAgICAgIHRoaXMuX2NhbGxiYWNrLFxuICAgICk7XG4gIH1cblxuICBfX2dldE5hdGl2ZUNvbmZpZygpOiBhbnkge1xuICAgIGNvbnN0IGFuaW1hdGlvbiA9IG5ldyB0aGlzLl9hbmltYXRpb25DbGFzcyh7XG4gICAgICAuLi50aGlzLl9hbmltYXRpb25Db25maWcsXG4gICAgICAvLyByZW1vdmUgdG9WYWx1ZSBmcm9tIHRoZSBjb25maWcgYXMgaXQncyBhIHJlZiB0byBBbmltYXRlZC5WYWx1ZVxuICAgICAgdG9WYWx1ZTogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIGNvbnN0IGFuaW1hdGlvbkNvbmZpZyA9IGFuaW1hdGlvbi5fX2dldE5hdGl2ZUFuaW1hdGlvbkNvbmZpZygpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAndHJhY2tpbmcnLFxuICAgICAgYW5pbWF0aW9uSWQ6IE5hdGl2ZUFuaW1hdGVkSGVscGVyLmdlbmVyYXRlTmV3QW5pbWF0aW9uSWQoKSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHRvVmFsdWU6IHRoaXMuX3BhcmVudC5fX2dldE5hdGl2ZVRhZygpLFxuICAgICAgdmFsdWU6IHRoaXMuX3ZhbHVlLl9fZ2V0TmF0aXZlVGFnKCksXG4gICAgfTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCBOYXRpdmVGcmFtZVJhdGVMb2dnZXIgZnJvbSAnLi9OYXRpdmVGcmFtZVJhdGVMb2dnZXInO1xuXG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBGbG93IEFQSSBmb3IgbmF0aXZlIEZyYW1lUmF0ZUxvZ2dlciBtb2R1bGUuIElmIHRoZSBuYXRpdmUgbW9kdWxlIGlzIG5vdCBpbnN0YWxsZWQsIGZ1bmN0aW9uIGNhbGxzXG4gKiBhcmUganVzdCBuby1vcHMuXG4gKlxuICogVHlwaWNhbCBiZWhhdmlvciBpcyB0aGF0IGBzZXRDb250ZXh0YCBpcyBjYWxsZWQgd2hlbiBhIG5ldyBzY3JlZW4gaXMgbG9hZGVkIChlLmcuIHZpYSBhXG4gKiBuYXZpZ2F0aW9uIGludGVncmF0aW9uKSwgYW5kIHRoZW4gYGJlZ2luU2Nyb2xsYCBpcyBjYWxsZWQgYnkgYFNjcm9sbFJlc3BvbmRlcmAgYXQgd2hpY2ggcG9pbnQgdGhlXG4gKiBuYXRpdmUgbW9kdWxlIHRoZW4gYmVnaW5zIHRyYWNraW5nIGZyYW1lIGRyb3BzLiBXaGVuIGBTY3JvbGxSZXNwb25kZXJgIGNhbGxzIGBlbmRTY3JvbGxgLCB0aGVcbiAqIG5hdGl2ZSBtb2R1bGUgZ2F0aGVycyB1cCBhbGwgaXQncyBmcmFtZSBkcm9wIGRhdGEgYW5kIHJlcG9ydHMgaXQgdmlhIGFuIGFuYWx5dGljcyBwaXBlbGluZSBmb3JcbiAqIGFuYWx5c2lzLlxuICpcbiAqIE5vdGUgdGhhdCBgYmVnaW5TY3JvbGxgIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYnkgYFNjcm9sbFJlc3BvbmRlcmAgLSB1bmNsZWFyIGlmIHRoYXQncyBhXG4gKiBidWcsIGJ1dCB0aGUgbmF0aXZlIG1vZHVsZSBzaG91bGQgYmUgcm9idXN0IHRvIHRoYXQuXG4gKlxuICogSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgYWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGZyYW1lIGRyb3BzIGluIG90aGVyIHR5cGVzIG9mIGludGVyYWN0aW9ucyBiZXlvbmRcbiAqIHNjcm9sbGluZy5cbiAqL1xuY29uc3QgRnJhbWVSYXRlTG9nZ2VyID0ge1xuICAvKipcbiAgICogRW5hYmxlIGBkZWJ1Z2AgdG8gc2VlIGxvY2FsIGxvZ3Mgb2Ygd2hhdCdzIGdvaW5nIG9uLlxuICAgKi9cbiAgc2V0R2xvYmFsT3B0aW9uczogZnVuY3Rpb24gKG9wdGlvbnM6IHtkZWJ1Zz86IGJvb2xlYW4sIC4uLn0pIHtcbiAgICBpZiAob3B0aW9ucy5kZWJ1ZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIE5hdGl2ZUZyYW1lUmF0ZUxvZ2dlcixcbiAgICAgICAgJ1RyeWluZyB0byBkZWJ1ZyBGcmFtZVJhdGVMb2dnZXIgd2l0aG91dCB0aGUgbmF0aXZlIG1vZHVsZSEnLFxuICAgICAgKTtcbiAgICB9XG4gICAgTmF0aXZlRnJhbWVSYXRlTG9nZ2VyPy5zZXRHbG9iYWxPcHRpb25zKHtcbiAgICAgIGRlYnVnOiAhIW9wdGlvbnMuZGVidWcsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE11c3QgY2FsbCBgc2V0Q29udGV4dGAgYmVmb3JlIGFueSBldmVudHMgY2FuIGJlIHByb3Blcmx5IHRyYWNrZWQsIHdoaWNoIGlzIGRvbmUgYXV0b21hdGljYWxseVxuICAgKiBpbiBgQXBwUmVnaXN0cnlgLCBidXQgbmF2aWdhdGlvbiBpcyBhbHNvIGEgY29tbW9uIHBsYWNlIHRvIGhvb2sgaW4uXG4gICAqL1xuICBzZXRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dDogc3RyaW5nKSB7XG4gICAgTmF0aXZlRnJhbWVSYXRlTG9nZ2VyPy5zZXRDb250ZXh0KGNvbnRleHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgaW4gYFNjcm9sbFJlc3BvbmRlcmAgc28gYW55IGNvbXBvbmVudCB0aGF0IHVzZXMgdGhhdCBtb2R1bGUgd2lsbCBoYW5kbGUgdGhpc1xuICAgKiBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgYmVnaW5TY3JvbGwoKSB7XG4gICAgTmF0aXZlRnJhbWVSYXRlTG9nZ2VyPy5iZWdpblNjcm9sbCgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgaW4gYFNjcm9sbFJlc3BvbmRlcmAgc28gYW55IGNvbXBvbmVudCB0aGF0IHVzZXMgdGhhdCBtb2R1bGUgd2lsbCBoYW5kbGUgdGhpc1xuICAgKiBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgZW5kU2Nyb2xsKCkge1xuICAgIE5hdGl2ZUZyYW1lUmF0ZUxvZ2dlcj8uZW5kU2Nyb2xsKCk7XG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lUmF0ZUxvZ2dlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUZyYW1lUmF0ZUxvZ2dlcic7XG5pbXBvcnQgTmF0aXZlRnJhbWVSYXRlTG9nZ2VyIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlRnJhbWVSYXRlTG9nZ2VyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZUZyYW1lUmF0ZUxvZ2dlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArc2V0R2xvYmFsT3B0aW9uczogKG9wdGlvbnM6IHt8K2RlYnVnPzogP2Jvb2xlYW58fSkgPT4gdm9pZDtcbiAgK3NldENvbnRleHQ6IChjb250ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gICtiZWdpblNjcm9sbDogKCkgPT4gdm9pZDtcbiAgK2VuZFNjcm9sbDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdGcmFtZVJhdGVMb2dnZXInKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtfX19fVmlld1N0eWxlX0ludGVybmFsfSBmcm9tICcuL1N0eWxlU2hlZXRUeXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwbGl0TGF5b3V0UHJvcHMocHJvcHM6ID9fX19fVmlld1N0eWxlX0ludGVybmFsKToge1xuICBvdXRlcjogP19fX19WaWV3U3R5bGVfSW50ZXJuYWwsXG4gIGlubmVyOiA/X19fX1ZpZXdTdHlsZV9JbnRlcm5hbCxcbn0ge1xuICBsZXQgb3V0ZXI6ID9fX19fVmlld1N0eWxlX0ludGVybmFsID0gbnVsbDtcbiAgbGV0IGlubmVyOiA/X19fX1ZpZXdTdHlsZV9JbnRlcm5hbCA9IG51bGw7XG5cbiAgaWYgKHByb3BzICE9IG51bGwpIHtcbiAgICAvLyAkRmxvd0lnbm9yZVtpbmNvbXBhdGlibGUtZXhhY3RdIFdpbGwgY29udGFpbiBhIHN1YnNldCBvZiBrZXlzIGZyb20gYHByb3BzYC5cbiAgICBvdXRlciA9IHt9O1xuICAgIC8vICRGbG93SWdub3JlW2luY29tcGF0aWJsZS1leGFjdF0gV2lsbCBjb250YWluIGEgc3Vic2V0IG9mIGtleXMgZnJvbSBgcHJvcHNgLlxuICAgIGlubmVyID0ge307XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgICAgY2FzZSAnbWFyZ2luJzpcbiAgICAgICAgY2FzZSAnbWFyZ2luSG9yaXpvbnRhbCc6XG4gICAgICAgIGNhc2UgJ21hcmdpblZlcnRpY2FsJzpcbiAgICAgICAgY2FzZSAnbWFyZ2luQm90dG9tJzpcbiAgICAgICAgY2FzZSAnbWFyZ2luVG9wJzpcbiAgICAgICAgY2FzZSAnbWFyZ2luTGVmdCc6XG4gICAgICAgIGNhc2UgJ21hcmdpblJpZ2h0JzpcbiAgICAgICAgY2FzZSAnZmxleCc6XG4gICAgICAgIGNhc2UgJ2ZsZXhHcm93JzpcbiAgICAgICAgY2FzZSAnZmxleFNocmluayc6XG4gICAgICAgIGNhc2UgJ2ZsZXhCYXNpcyc6XG4gICAgICAgIGNhc2UgJ2FsaWduU2VsZic6XG4gICAgICAgIGNhc2UgJ2hlaWdodCc6XG4gICAgICAgIGNhc2UgJ21pbkhlaWdodCc6XG4gICAgICAgIGNhc2UgJ21heEhlaWdodCc6XG4gICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgY2FzZSAnbWluV2lkdGgnOlxuICAgICAgICBjYXNlICdtYXhXaWR0aCc6XG4gICAgICAgIGNhc2UgJ3Bvc2l0aW9uJzpcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAndHJhbnNmb3JtJzpcbiAgICAgICAgY2FzZSAndHJhbnNmb3JtT3JpZ2luJzpcbiAgICAgICAgY2FzZSAncm93R2FwJzpcbiAgICAgICAgY2FzZSAnY29sdW1uR2FwJzpcbiAgICAgICAgY2FzZSAnZ2FwJzpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgICAgb3V0ZXJbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgICAgaW5uZXJbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge291dGVyLCBpbm5lcn07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuLy8gVGhpcyBmdW5jdGlvbiBkaXNtaXNzZXMgdGhlIGN1cnJlbnRseS1vcGVuIGtleWJvYXJkLCBpZiBhbnkuXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgVGV4dElucHV0U3RhdGUgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXRTdGF0ZScpO1xuXG5mdW5jdGlvbiBkaXNtaXNzS2V5Ym9hcmQoKSB7XG4gIFRleHRJbnB1dFN0YXRlLmJsdXJUZXh0SW5wdXQoVGV4dElucHV0U3RhdGUuY3VycmVudGx5Rm9jdXNlZElucHV0KCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpc21pc3NLZXlib2FyZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRTdWJzY3JpcHRpb259IGZyb20gJy4uLy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbmltcG9ydCBOYXRpdmVFdmVudEVtaXR0ZXIgZnJvbSAnLi4vLi4vRXZlbnRFbWl0dGVyL05hdGl2ZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgTGF5b3V0QW5pbWF0aW9uIGZyb20gJy4uLy4uL0xheW91dEFuaW1hdGlvbi9MYXlvdXRBbmltYXRpb24nO1xuaW1wb3J0IGRpc21pc3NLZXlib2FyZCBmcm9tICcuLi8uLi9VdGlsaXRpZXMvZGlzbWlzc0tleWJvYXJkJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IE5hdGl2ZUtleWJvYXJkT2JzZXJ2ZXIgZnJvbSAnLi9OYXRpdmVLZXlib2FyZE9ic2VydmVyJztcblxuZXhwb3J0IHR5cGUgS2V5Ym9hcmRFdmVudE5hbWUgPSAkS2V5czxLZXlib2FyZEV2ZW50RGVmaW5pdGlvbnM+O1xuXG5leHBvcnQgdHlwZSBLZXlib2FyZEV2ZW50RWFzaW5nID1cbiAgfCAnZWFzZUluJ1xuICB8ICdlYXNlSW5FYXNlT3V0J1xuICB8ICdlYXNlT3V0J1xuICB8ICdsaW5lYXInXG4gIHwgJ2tleWJvYXJkJztcblxuZXhwb3J0IHR5cGUgS2V5Ym9hcmRNZXRyaWNzID0gJFJlYWRPbmx5PHt8XG4gIHNjcmVlblg6IG51bWJlcixcbiAgc2NyZWVuWTogbnVtYmVyLFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbnx9PjtcblxuZXhwb3J0IHR5cGUgS2V5Ym9hcmRFdmVudCA9IEFuZHJvaWRLZXlib2FyZEV2ZW50IHwgSU9TS2V5Ym9hcmRFdmVudDtcblxudHlwZSBCYXNlS2V5Ym9hcmRFdmVudCA9IHt8XG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGVhc2luZzogS2V5Ym9hcmRFdmVudEVhc2luZyxcbiAgZW5kQ29vcmRpbmF0ZXM6IEtleWJvYXJkTWV0cmljcyxcbnx9O1xuXG5leHBvcnQgdHlwZSBBbmRyb2lkS2V5Ym9hcmRFdmVudCA9ICRSZWFkT25seTx7fFxuICAuLi5CYXNlS2V5Ym9hcmRFdmVudCxcbiAgZHVyYXRpb246IDAsXG4gIGVhc2luZzogJ2tleWJvYXJkJyxcbnx9PjtcblxuZXhwb3J0IHR5cGUgSU9TS2V5Ym9hcmRFdmVudCA9ICRSZWFkT25seTx7fFxuICAuLi5CYXNlS2V5Ym9hcmRFdmVudCxcbiAgc3RhcnRDb29yZGluYXRlczogS2V5Ym9hcmRNZXRyaWNzLFxuICBpc0V2ZW50RnJvbVRoaXNBcHA6IGJvb2xlYW4sXG58fT47XG5cbnR5cGUgS2V5Ym9hcmRFdmVudERlZmluaXRpb25zID0ge1xuICBrZXlib2FyZFdpbGxTaG93OiBbS2V5Ym9hcmRFdmVudF0sXG4gIGtleWJvYXJkRGlkU2hvdzogW0tleWJvYXJkRXZlbnRdLFxuICBrZXlib2FyZFdpbGxIaWRlOiBbS2V5Ym9hcmRFdmVudF0sXG4gIGtleWJvYXJkRGlkSGlkZTogW0tleWJvYXJkRXZlbnRdLFxuICBrZXlib2FyZFdpbGxDaGFuZ2VGcmFtZTogW0tleWJvYXJkRXZlbnRdLFxuICBrZXlib2FyZERpZENoYW5nZUZyYW1lOiBbS2V5Ym9hcmRFdmVudF0sXG59O1xuXG4vKipcbiAqIGBLZXlib2FyZGAgbW9kdWxlIHRvIGNvbnRyb2wga2V5Ym9hcmQgZXZlbnRzLlxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIFRoZSBLZXlib2FyZCBtb2R1bGUgYWxsb3dzIHlvdSB0byBsaXN0ZW4gZm9yIG5hdGl2ZSBldmVudHMgYW5kIHJlYWN0IHRvIHRoZW0sIGFzXG4gKiB3ZWxsIGFzIG1ha2UgY2hhbmdlcyB0byB0aGUga2V5Ym9hcmQsIGxpa2UgZGlzbWlzc2luZyBpdC5cbiAqXG4gKmBgYFxuICogaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbiAqIGltcG9ydCB7IEtleWJvYXJkLCBUZXh0SW5wdXQgfSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuICpcbiAqIGNsYXNzIEV4YW1wbGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICogICBjb21wb25lbnRXaWxsTW91bnQgKCkge1xuICogICAgIHRoaXMua2V5Ym9hcmREaWRTaG93TGlzdGVuZXIgPSBLZXlib2FyZC5hZGRMaXN0ZW5lcigna2V5Ym9hcmREaWRTaG93JywgdGhpcy5fa2V5Ym9hcmREaWRTaG93KTtcbiAqICAgICB0aGlzLmtleWJvYXJkRGlkSGlkZUxpc3RlbmVyID0gS2V5Ym9hcmQuYWRkTGlzdGVuZXIoJ2tleWJvYXJkRGlkSGlkZScsIHRoaXMuX2tleWJvYXJkRGlkSGlkZSk7XG4gKiAgIH1cbiAqXG4gKiAgIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAqICAgICB0aGlzLmtleWJvYXJkRGlkU2hvd0xpc3RlbmVyLnJlbW92ZSgpO1xuICogICAgIHRoaXMua2V5Ym9hcmREaWRIaWRlTGlzdGVuZXIucmVtb3ZlKCk7XG4gKiAgIH1cbiAqXG4gKiAgIF9rZXlib2FyZERpZFNob3cgKCkge1xuICogICAgIGFsZXJ0KCdLZXlib2FyZCBTaG93bicpO1xuICogICB9XG4gKlxuICogICBfa2V5Ym9hcmREaWRIaWRlICgpIHtcbiAqICAgICBhbGVydCgnS2V5Ym9hcmQgSGlkZGVuJyk7XG4gKiAgIH1cbiAqXG4gKiAgIHJlbmRlcigpIHtcbiAqICAgICByZXR1cm4gKFxuICogICAgICAgPFRleHRJbnB1dFxuICogICAgICAgICBvblN1Ym1pdEVkaXRpbmc9e0tleWJvYXJkLmRpc21pc3N9XG4gKiAgICAgICAvPlxuICogICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqYGBgXG4gKi9cblxuY2xhc3MgS2V5Ym9hcmQge1xuICBfY3VycmVudGx5U2hvd2luZzogP0tleWJvYXJkRXZlbnQ7XG5cbiAgX2VtaXR0ZXI6IE5hdGl2ZUV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50RGVmaW5pdGlvbnM+ID1cbiAgICBuZXcgTmF0aXZlRXZlbnRFbWl0dGVyKFxuICAgICAgLy8gVDg4NzE1MDYzOiBOYXRpdmVFdmVudEVtaXR0ZXIgb25seSB1c2VkIHRoaXMgcGFyYW1ldGVyIG9uIGlPUy4gTm93IGl0IHVzZXMgaXQgb24gYWxsIHBsYXRmb3Jtcywgc28gdGhpcyBjb2RlIHdhcyBtb2RpZmllZCBhdXRvbWF0aWNhbGx5IHRvIHByZXNlcnZlIGl0cyBiZWhhdmlvclxuICAgICAgLy8gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBuYXRpdmUgbW9kdWxlIG9uIG90aGVyIHBsYXRmb3JtcywgcGxlYXNlIHJlbW92ZSB0aGlzIGNvbmRpdGlvbiBhbmQgdGVzdCBpdHMgYmVoYXZpb3JcbiAgICAgIFBsYXRmb3JtLk9TICE9PSAnaW9zJyA/IG51bGwgOiBOYXRpdmVLZXlib2FyZE9ic2VydmVyLFxuICAgICk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hZGRMaXN0ZW5lcigna2V5Ym9hcmREaWRTaG93JywgZXYgPT4ge1xuICAgICAgdGhpcy5fY3VycmVudGx5U2hvd2luZyA9IGV2O1xuICAgIH0pO1xuICAgIHRoaXMuYWRkTGlzdGVuZXIoJ2tleWJvYXJkRGlkSGlkZScsIF9ldiA9PiB7XG4gICAgICB0aGlzLl9jdXJyZW50bHlTaG93aW5nID0gbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYGFkZExpc3RlbmVyYCBmdW5jdGlvbiBjb25uZWN0cyBhIEphdmFTY3JpcHQgZnVuY3Rpb24gdG8gYW4gaWRlbnRpZmllZCBuYXRpdmVcbiAgICoga2V5Ym9hcmQgbm90aWZpY2F0aW9uIGV2ZW50LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRoZW4gcmV0dXJucyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgYG5hdGl2ZUV2ZW50YCBpcyB0aGUgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgZXZlbnQgeW91J3JlIGxpc3RlbmluZyBmb3IuICBUaGlzXG4gICAqY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiAtIGBrZXlib2FyZFdpbGxTaG93YFxuICAgKiAtIGBrZXlib2FyZERpZFNob3dgXG4gICAqIC0gYGtleWJvYXJkV2lsbEhpZGVgXG4gICAqIC0gYGtleWJvYXJkRGlkSGlkZWBcbiAgICogLSBga2V5Ym9hcmRXaWxsQ2hhbmdlRnJhbWVgXG4gICAqIC0gYGtleWJvYXJkRGlkQ2hhbmdlRnJhbWVgXG4gICAqXG4gICAqIEFuZHJvaWQgdmVyc2lvbnMgcHJpb3IgdG8gQVBJIDMwIHJlbHkgb24gb2JzZXJ2aW5nIGxheW91dCBjaGFuZ2VzIHdoZW5cbiAgICogYGFuZHJvaWQ6d2luZG93U29mdElucHV0TW9kZWAgaXMgc2V0IHRvIGBhZGp1c3RSZXNpemVgIG9yIGBhZGp1c3RQYW5gLlxuICAgKlxuICAgKiBga2V5Ym9hcmRXaWxsU2hvd2AgYXMgd2VsbCBhcyBga2V5Ym9hcmRXaWxsSGlkZWAgYXJlIG5vdCBhdmFpbGFibGUgb24gQW5kcm9pZCBzaW5jZSB0aGVyZSBpc1xuICAgKiBubyBuYXRpdmUgY29ycmVzcG9uZGluZyBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGZpcmVzLlxuICAgKi9cbiAgYWRkTGlzdGVuZXI8SzogJEtleXM8S2V5Ym9hcmRFdmVudERlZmluaXRpb25zPj4oXG4gICAgZXZlbnRUeXBlOiBLLFxuICAgIGxpc3RlbmVyOiAoLi4uJEVsZW1lbnRUeXBlPEtleWJvYXJkRXZlbnREZWZpbml0aW9ucywgSz4pID0+IG1peGVkLFxuICAgIGNvbnRleHQ/OiBtaXhlZCxcbiAgKTogRXZlbnRTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLl9lbWl0dGVyLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBmb3IgYSBzcGVjaWZpYyBldmVudCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIFRoZSBuYXRpdmUgZXZlbnQgc3RyaW5nIGxpc3RlbmVycyBhcmUgd2F0Y2hpbmcgd2hpY2ggd2lsbCBiZSByZW1vdmVkLlxuICAgKi9cbiAgcmVtb3ZlQWxsTGlzdGVuZXJzPEs6ICRLZXlzPEtleWJvYXJkRXZlbnREZWZpbml0aW9ucz4+KGV2ZW50VHlwZTogP0spOiB2b2lkIHtcbiAgICB0aGlzLl9lbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycyhldmVudFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgYWN0aXZlIGtleWJvYXJkIGFuZCByZW1vdmVzIGZvY3VzLlxuICAgKi9cbiAgZGlzbWlzcygpOiB2b2lkIHtcbiAgICBkaXNtaXNzS2V5Ym9hcmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBrZXlib2FyZCBpcyBsYXN0IGtub3duIHRvIGJlIHZpc2libGUuXG4gICAqL1xuICBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fY3VycmVudGx5U2hvd2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1ldHJpY3Mgb2YgdGhlIHNvZnQta2V5Ym9hcmQgaWYgdmlzaWJsZS5cbiAgICovXG4gIG1ldHJpY3MoKTogP0tleWJvYXJkTWV0cmljcyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRseVNob3dpbmc/LmVuZENvb3JkaW5hdGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWZ1bCBmb3Igc3luY2luZyBUZXh0SW5wdXQgKG9yIG90aGVyIGtleWJvYXJkIGFjY2Vzc29yeSB2aWV3KSBzaXplIG9mXG4gICAqIHBvc2l0aW9uIGNoYW5nZXMgd2l0aCBrZXlib2FyZCBtb3ZlbWVudHMuXG4gICAqL1xuICBzY2hlZHVsZUxheW91dEFuaW1hdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHtkdXJhdGlvbiwgZWFzaW5nfSA9IGV2ZW50O1xuICAgIGlmIChkdXJhdGlvbiAhPSBudWxsICYmIGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICBMYXlvdXRBbmltYXRpb24uY29uZmlndXJlTmV4dCh7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxuICAgICAgICAgIHR5cGU6IChlYXNpbmcgIT0gbnVsbCAmJiBMYXlvdXRBbmltYXRpb24uVHlwZXNbZWFzaW5nXSkgfHwgJ2tleWJvYXJkJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChuZXcgS2V5Ym9hcmQoKTogS2V5Ym9hcmQpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1xuICBMYXlvdXRBbmltYXRpb25Db25maWcgYXMgTGF5b3V0QW5pbWF0aW9uQ29uZmlnXyxcbiAgTGF5b3V0QW5pbWF0aW9uUHJvcGVydHksXG4gIExheW91dEFuaW1hdGlvblR5cGUsXG59IGZyb20gJy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9mZWF0dXJlZmxhZ3MvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MnO1xuaW1wb3J0IHtnZXRGYWJyaWNVSU1hbmFnZXJ9IGZyb20gJy4uL1JlYWN0TmF0aXZlL0ZhYnJpY1VJTWFuYWdlcic7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcblxuY29uc3QgVUlNYW5hZ2VyID0gcmVxdWlyZSgnLi4vUmVhY3ROYXRpdmUvVUlNYW5hZ2VyJyk7XG5cbi8vIFJlZXhwb3J0IHR5cGVcbmV4cG9ydCB0eXBlIExheW91dEFuaW1hdGlvbkNvbmZpZyA9IExheW91dEFuaW1hdGlvbkNvbmZpZ187XG5cbnR5cGUgT25BbmltYXRpb25EaWRFbmRDYWxsYmFjayA9ICgpID0+IHZvaWQ7XG50eXBlIE9uQW5pbWF0aW9uRGlkRmFpbENhbGxiYWNrID0gKCkgPT4gdm9pZDtcblxubGV0IGlzTGF5b3V0QW5pbWF0aW9uRW5hYmxlZDogYm9vbGVhbiA9XG4gIFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzLmlzTGF5b3V0QW5pbWF0aW9uRW5hYmxlZCgpO1xuXG5mdW5jdGlvbiBzZXRFbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gIGlzTGF5b3V0QW5pbWF0aW9uRW5hYmxlZCA9IGlzTGF5b3V0QW5pbWF0aW9uRW5hYmxlZDtcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBuZXh0IGNvbW1pdCB0byBiZSBhbmltYXRlZC5cbiAqXG4gKiBvbkFuaW1hdGlvbkRpZEVuZCBpcyBndWFyYW50ZWVkIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBhbmltYXRpb24gY29tcGxldGVzLlxuICogb25BbmltYXRpb25EaWRGYWlsIGlzICpuZXZlciogY2FsbGVkIGluIHRoZSBjbGFzc2ljLCBwcmUtRmFicmljIHJlbmRlcmVyLFxuICogYW5kIG5ldmVyIGhhcyBiZWVuLiBJbiB0aGUgbmV3IHJlbmRlcmVyIChGYWJyaWMpIGl0IGlzIGNhbGxlZCBvbmx5IGlmIGNvbmZpZ3VyYXRpb25cbiAqIHBhcnNpbmcgZmFpbHMuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZU5leHQoXG4gIGNvbmZpZzogTGF5b3V0QW5pbWF0aW9uQ29uZmlnLFxuICBvbkFuaW1hdGlvbkRpZEVuZD86IE9uQW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2ssXG4gIG9uQW5pbWF0aW9uRGlkRmFpbD86IE9uQW5pbWF0aW9uRGlkRmFpbENhbGxiYWNrLFxuKSB7XG4gIGlmIChQbGF0Zm9ybS5pc0Rpc2FibGVBbmltYXRpb25zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc0xheW91dEFuaW1hdGlvbkVuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTaW5jZSBMYXlvdXRBbmltYXRpb25zIG1heSBwb3NzaWJseSBiZSBkaXNhYmxlZCBmb3Igbm93IG9uIGlPUyAoRmFicmljKSxcbiAgLy8gb3IgQW5kcm9pZCAobm9uLUZhYnJpYykgd2UgcmFjZSBhIHNldFRpbWVvdXQgd2l0aCBhbmltYXRpb24gY29tcGxldGlvbixcbiAgLy8gaW4gY2FzZSBvbkNvbXBsZXRlIGlzIG5ldmVyIGNhbGxlZFxuICAvLyBmcm9tIG5hdGl2ZS4gT25jZSBMYXlvdXRBbmltYXRpb25zK0ZhYnJpYyB1bmNvbmRpdGlvbmFsbHkgc2hpcCBldmVyeXdoZXJlLCB3ZSBjYW5cbiAgLy8gZGVsZXRlIHRoaXMgbWVjaGFuaXNtIGF0IGxlYXN0IGluIHRoZSBGYWJyaWMgYnJhbmNoLlxuICBsZXQgYW5pbWF0aW9uQ29tcGxldGlvbkhhc1J1biA9IGZhbHNlO1xuICBjb25zdCBvbkFuaW1hdGlvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgIGlmIChhbmltYXRpb25Db21wbGV0aW9uSGFzUnVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFuaW1hdGlvbkNvbXBsZXRpb25IYXNSdW4gPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dChyYWNlV2l0aEFuaW1hdGlvbklkKTtcbiAgICBvbkFuaW1hdGlvbkRpZEVuZD8uKCk7XG4gIH07XG4gIGNvbnN0IHJhY2VXaXRoQW5pbWF0aW9uSWQgPSBzZXRUaW1lb3V0KFxuICAgIG9uQW5pbWF0aW9uQ29tcGxldGUsXG4gICAgKGNvbmZpZy5kdXJhdGlvbiA/PyAwKSArIDE3IC8qIG9uZSBmcmFtZSArIDFtcyAqLyxcbiAgKTtcblxuICAvLyBJbiBGYWJyaWMsIExheW91dEFuaW1hdGlvbnMgYXJlIHVuY29uZGl0aW9uYWxseSBlbmFibGVkIGZvciBBbmRyb2lkLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBlbmFibGVkIG9uIGlPUyAocGVuZGluZyBmdWxseSBzaGlwcGluZzsgdGhpcyBpcyBhIHRlbXBvcmFyeSBzdGF0ZSkuXG4gIGNvbnN0IEZhYnJpY1VJTWFuYWdlciA9IGdldEZhYnJpY1VJTWFuYWdlcigpO1xuICBpZiAoRmFicmljVUlNYW5hZ2VyPy5jb25maWd1cmVOZXh0TGF5b3V0QW5pbWF0aW9uKSB7XG4gICAgZ2xvYmFsPy5uYXRpdmVGYWJyaWNVSU1hbmFnZXI/LmNvbmZpZ3VyZU5leHRMYXlvdXRBbmltYXRpb24oXG4gICAgICBjb25maWcsXG4gICAgICBvbkFuaW1hdGlvbkNvbXBsZXRlLFxuICAgICAgb25BbmltYXRpb25EaWRGYWlsID8/XG4gICAgICAgIGZ1bmN0aW9uICgpIHt9IC8qIHRoaXMgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBjb25maWd1cmF0aW9uIHBhcnNpbmcgZmFpbHMgKi8sXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGlzIHdpbGwgb25seSBydW4gaWYgRmFicmljIGlzICpub3QqIGluc3RhbGxlZC5cbiAgLy8gSWYgeW91IGhhdmUgRmFicmljICsgbm9uLUZhYnJpYyBydW5uaW5nIGluIHRoZSBzYW1lIFZNLCBub24tRmFicmljIExheW91dEFuaW1hdGlvbnNcbiAgLy8gd2lsbCBub3Qgd29yay5cbiAgaWYgKFVJTWFuYWdlcj8uY29uZmlndXJlTmV4dExheW91dEFuaW1hdGlvbikge1xuICAgIFVJTWFuYWdlci5jb25maWd1cmVOZXh0TGF5b3V0QW5pbWF0aW9uKFxuICAgICAgY29uZmlnLFxuICAgICAgb25BbmltYXRpb25Db21wbGV0ZSA/PyBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uQW5pbWF0aW9uRGlkRmFpbCA/P1xuICAgICAgICBmdW5jdGlvbiAoKSB7fSAvKiB0aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gTm9uLUZhYnJpYyAqLyxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShcbiAgZHVyYXRpb246IG51bWJlcixcbiAgdHlwZTogTGF5b3V0QW5pbWF0aW9uVHlwZSxcbiAgcHJvcGVydHk6IExheW91dEFuaW1hdGlvblByb3BlcnR5LFxuKTogTGF5b3V0QW5pbWF0aW9uQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBkdXJhdGlvbixcbiAgICBjcmVhdGU6IHt0eXBlLCBwcm9wZXJ0eX0sXG4gICAgdXBkYXRlOiB7dHlwZX0sXG4gICAgZGVsZXRlOiB7dHlwZSwgcHJvcGVydHl9LFxuICB9O1xufVxuXG5jb25zdCBQcmVzZXRzID0ge1xuICBlYXNlSW5FYXNlT3V0OiAoY3JlYXRlKFxuICAgIDMwMCxcbiAgICAnZWFzZUluRWFzZU91dCcsXG4gICAgJ29wYWNpdHknLFxuICApOiBMYXlvdXRBbmltYXRpb25Db25maWcpLFxuICBsaW5lYXI6IChjcmVhdGUoNTAwLCAnbGluZWFyJywgJ29wYWNpdHknKTogTGF5b3V0QW5pbWF0aW9uQ29uZmlnKSxcbiAgc3ByaW5nOiB7XG4gICAgZHVyYXRpb246IDcwMCxcbiAgICBjcmVhdGU6IHtcbiAgICAgIHR5cGU6ICdsaW5lYXInLFxuICAgICAgcHJvcGVydHk6ICdvcGFjaXR5JyxcbiAgICB9LFxuICAgIHVwZGF0ZToge1xuICAgICAgdHlwZTogJ3NwcmluZycsXG4gICAgICBzcHJpbmdEYW1waW5nOiAwLjQsXG4gICAgfSxcbiAgICBkZWxldGU6IHtcbiAgICAgIHR5cGU6ICdsaW5lYXInLFxuICAgICAgcHJvcGVydHk6ICdvcGFjaXR5JyxcbiAgICB9LFxuICB9LFxufTtcblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IGFuaW1hdGVzIHZpZXdzIHRvIHRoZWlyIG5ldyBwb3NpdGlvbnMgd2hlbiB0aGVcbiAqIG5leHQgbGF5b3V0IGhhcHBlbnMuXG4gKlxuICogQSBjb21tb24gd2F5IHRvIHVzZSB0aGlzIEFQSSBpcyB0byBjYWxsIGl0IGJlZm9yZSBjYWxsaW5nIGBzZXRTdGF0ZWAuXG4gKlxuICogTm90ZSB0aGF0IGluIG9yZGVyIHRvIGdldCB0aGlzIHRvIHdvcmsgb24gKipBbmRyb2lkKiogeW91IG5lZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgZmxhZ3MgdmlhIGBVSU1hbmFnZXJgOlxuICpcbiAqICAgICBVSU1hbmFnZXIuc2V0TGF5b3V0QW5pbWF0aW9uRW5hYmxlZEV4cGVyaW1lbnRhbCAmJiBVSU1hbmFnZXIuc2V0TGF5b3V0QW5pbWF0aW9uRW5hYmxlZEV4cGVyaW1lbnRhbCh0cnVlKTtcbiAqL1xuY29uc3QgTGF5b3V0QW5pbWF0aW9uID0ge1xuICAvKipcbiAgICogU2NoZWR1bGVzIGFuIGFuaW1hdGlvbiB0byBoYXBwZW4gb24gdGhlIG5leHQgbGF5b3V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIFNwZWNpZmllcyBhbmltYXRpb24gcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGBkdXJhdGlvbmAgaW4gbWlsbGlzZWNvbmRzXG4gICAqICAgLSBgY3JlYXRlYCwgYEFuaW1hdGlvbkNvbmZpZ2AgZm9yIGFuaW1hdGluZyBpbiBuZXcgdmlld3NcbiAgICogICAtIGB1cGRhdGVgLCBgQW5pbWF0aW9uQ29uZmlnYCBmb3IgYW5pbWF0aW5nIHZpZXdzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWRcbiAgICpcbiAgICogQHBhcmFtIG9uQW5pbWF0aW9uRGlkRW5kIENhbGxlZCB3aGVuIHRoZSBhbmltYXRpb24gZmluaXNoZWQuXG4gICAqIE9ubHkgc3VwcG9ydGVkIG9uIGlPUy5cbiAgICogQHBhcmFtIG9uRXJyb3IgQ2FsbGVkIG9uIGVycm9yLiBPbmx5IHN1cHBvcnRlZCBvbiBpT1MuXG4gICAqL1xuICBjb25maWd1cmVOZXh0LFxuICAvKipcbiAgICogSGVscGVyIGZvciBjcmVhdGluZyBhIGNvbmZpZyBmb3IgYGNvbmZpZ3VyZU5leHRgLlxuICAgKi9cbiAgY3JlYXRlLFxuICBUeXBlczogT2JqZWN0LmZyZWV6ZSh7XG4gICAgc3ByaW5nOiAnc3ByaW5nJyxcbiAgICBsaW5lYXI6ICdsaW5lYXInLFxuICAgIGVhc2VJbkVhc2VPdXQ6ICdlYXNlSW5FYXNlT3V0JyxcbiAgICBlYXNlSW46ICdlYXNlSW4nLFxuICAgIGVhc2VPdXQ6ICdlYXNlT3V0JyxcbiAgICBrZXlib2FyZDogJ2tleWJvYXJkJyxcbiAgfSksXG4gIFByb3BlcnRpZXM6IE9iamVjdC5mcmVlemUoe1xuICAgIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgICBzY2FsZVg6ICdzY2FsZVgnLFxuICAgIHNjYWxlWTogJ3NjYWxlWScsXG4gICAgc2NhbGVYWTogJ3NjYWxlWFknLFxuICB9KSxcbiAgY2hlY2tDb25maWcoLi4uYXJnczogQXJyYXk8bWl4ZWQ+KSB7XG4gICAgY29uc29sZS5lcnJvcignTGF5b3V0QW5pbWF0aW9uLmNoZWNrQ29uZmlnKC4uLikgaGFzIGJlZW4gZGlzYWJsZWQuJyk7XG4gIH0sXG4gIFByZXNldHMsXG4gIGVhc2VJbkVhc2VPdXQ6IChjb25maWd1cmVOZXh0LmJpbmQobnVsbCwgUHJlc2V0cy5lYXNlSW5FYXNlT3V0KTogKFxuICAgIG9uQW5pbWF0aW9uRGlkRW5kPzogT25BbmltYXRpb25EaWRFbmRDYWxsYmFjayxcbiAgKSA9PiB2b2lkKSxcbiAgbGluZWFyOiAoY29uZmlndXJlTmV4dC5iaW5kKG51bGwsIFByZXNldHMubGluZWFyKTogKFxuICAgIG9uQW5pbWF0aW9uRGlkRW5kPzogT25BbmltYXRpb25EaWRFbmRDYWxsYmFjayxcbiAgKSA9PiB2b2lkKSxcbiAgc3ByaW5nOiAoY29uZmlndXJlTmV4dC5iaW5kKG51bGwsIFByZXNldHMuc3ByaW5nKTogKFxuICAgIG9uQW5pbWF0aW9uRGlkRW5kPzogT25BbmltYXRpb25EaWRFbmRDYWxsYmFjayxcbiAgKSA9PiB2b2lkKSxcbiAgc2V0RW5hYmxlZCxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGF5b3V0QW5pbWF0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlS2V5Ym9hcmRPYnNlcnZlcic7XG5pbXBvcnQgTmF0aXZlS2V5Ym9hcmRPYnNlcnZlciBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUtleWJvYXJkT2JzZXJ2ZXInO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlS2V5Ym9hcmRPYnNlcnZlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArYWRkTGlzdGVuZXI6IChldmVudE5hbWU6IHN0cmluZykgPT4gdm9pZDtcbiAgK3JlbW92ZUxpc3RlbmVyczogKGNvdW50OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPignS2V5Ym9hcmRPYnNlcnZlcicpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9BbmRyb2lkSG9yaXpvbnRhbFNjcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBBbmRyb2lkSG9yaXpvbnRhbFNjcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvQW5kcm9pZEhvcml6b250YWxTY3JvbGxDb250ZW50Vmlld05hdGl2ZUNvbXBvbmVudCc7XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkSG9yaXpvbnRhbFNjcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5pbXBvcnQgY29kZWdlbk5hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21wb25lbnQnO1xuXG50eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcblxuICByZW1vdmVDbGlwcGVkU3Vidmlld3M/OiA/Ym9vbGVhbixcbnx9PjtcblxudHlwZSBOYXRpdmVUeXBlID0gSG9zdENvbXBvbmVudDxOYXRpdmVQcm9wcz47XG5cbmV4cG9ydCBkZWZhdWx0IChjb2RlZ2VuTmF0aXZlQ29tcG9uZW50PE5hdGl2ZVByb3BzPihcbiAgJ0FuZHJvaWRIb3Jpem9udGFsU2Nyb2xsQ29udGVudFZpZXcnLFxuKTogTmF0aXZlVHlwZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBIb3N0Q29tcG9uZW50LFxuICBQYXJ0aWFsVmlld0NvbmZpZyxcbn0gZnJvbSAnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7U2Nyb2xsVmlld05hdGl2ZVByb3BzIGFzIFByb3BzfSBmcm9tICcuL1Njcm9sbFZpZXdOYXRpdmVDb21wb25lbnRUeXBlJztcblxuaW1wb3J0ICogYXMgTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkgZnJvbSAnLi4vLi4vTmF0aXZlQ29tcG9uZW50L05hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5JztcblxuZXhwb3J0IGNvbnN0IF9fSU5URVJOQUxfVklFV19DT05GSUc6IFBhcnRpYWxWaWV3Q29uZmlnID0ge1xuICB1aVZpZXdDbGFzc05hbWU6ICdBbmRyb2lkSG9yaXpvbnRhbFNjcm9sbFZpZXcnLFxuICBidWJibGluZ0V2ZW50VHlwZXM6IHt9LFxuICBkaXJlY3RFdmVudFR5cGVzOiB7fSxcbiAgdmFsaWRBdHRyaWJ1dGVzOiB7XG4gICAgZGVjZWxlcmF0aW9uUmF0ZTogdHJ1ZSxcbiAgICBkaXNhYmxlSW50ZXJ2YWxNb21lbnR1bTogdHJ1ZSxcbiAgICBlbmRGaWxsQ29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuICAgIGZhZGluZ0VkZ2VMZW5ndGg6IHRydWUsXG4gICAgbmVzdGVkU2Nyb2xsRW5hYmxlZDogdHJ1ZSxcbiAgICBvdmVyU2Nyb2xsTW9kZTogdHJ1ZSxcbiAgICBwYWdpbmdFbmFibGVkOiB0cnVlLFxuICAgIHBlcnNpc3RlbnRTY3JvbGxiYXI6IHRydWUsXG4gICAgc2Nyb2xsRW5hYmxlZDogdHJ1ZSxcbiAgICBzY3JvbGxQZXJmVGFnOiB0cnVlLFxuICAgIHNlbmRNb21lbnR1bUV2ZW50czogdHJ1ZSxcbiAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3I6IHRydWUsXG4gICAgc25hcFRvQWxpZ25tZW50OiB0cnVlLFxuICAgIHNuYXBUb0VuZDogdHJ1ZSxcbiAgICBzbmFwVG9JbnRlcnZhbDogdHJ1ZSxcbiAgICBzbmFwVG9TdGFydDogdHJ1ZSxcbiAgICBzbmFwVG9PZmZzZXRzOiB0cnVlLFxuICAgIGNvbnRlbnRPZmZzZXQ6IHRydWUsXG4gICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogdHJ1ZSxcbiAgICBib3JkZXJSYWRpdXM6IHRydWUsXG4gICAgYm9yZGVyU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgIH0sXG4gICAgYm9yZGVyQ29sb3I6IHtwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHR9LFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiB7XG4gICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgfSxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiB0cnVlLFxuICAgIGJvcmRlclRvcENvbG9yOiB7cHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0fSxcbiAgICByZW1vdmVDbGlwcGVkU3Vidmlld3M6IHRydWUsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IHRydWUsXG4gICAgYm9yZGVyTGVmdENvbG9yOiB7XG4gICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwb2ludGVyRXZlbnRzOiB0cnVlLFxuICB9LFxufTtcblxuY29uc3QgQW5kcm9pZEhvcml6b250YWxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50OiBIb3N0Q29tcG9uZW50PFByb3BzPiA9XG4gIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldDxQcm9wcz4oXG4gICAgJ0FuZHJvaWRIb3Jpem9udGFsU2Nyb2xsVmlldycsXG4gICAgKCkgPT4gX19JTlRFUk5BTF9WSUVXX0NPTkZJRyxcbiAgKTtcblxuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZEhvcml6b250YWxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuXG5mdW5jdGlvbiBwcm9jZXNzRGVjZWxlcmF0aW9uUmF0ZShcbiAgZGVjZWxlcmF0aW9uUmF0ZTogbnVtYmVyIHwgJ25vcm1hbCcgfCAnZmFzdCcsXG4pOiBudW1iZXIge1xuICBpZiAoZGVjZWxlcmF0aW9uUmF0ZSA9PT0gJ25vcm1hbCcpIHtcbiAgICByZXR1cm4gUGxhdGZvcm0uc2VsZWN0KHtcbiAgICAgIGlvczogMC45OTgsXG4gICAgICBhbmRyb2lkOiAwLjk4NSxcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChkZWNlbGVyYXRpb25SYXRlID09PSAnZmFzdCcpIHtcbiAgICByZXR1cm4gUGxhdGZvcm0uc2VsZWN0KHtcbiAgICAgIGlvczogMC45OSxcbiAgICAgIGFuZHJvaWQ6IDAuOSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGVjZWxlcmF0aW9uUmF0ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzRGVjZWxlcmF0aW9uUmF0ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEhvc3RDb21wb25lbnQsXG4gIFBhcnRpYWxWaWV3Q29uZmlnLFxufSBmcm9tICcuLi8uLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtWaWV3UHJvcHMgYXMgUHJvcHN9IGZyb20gJy4uL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5cbmltcG9ydCAqIGFzIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5IGZyb20gJy4uLy4uL05hdGl2ZUNvbXBvbmVudC9OYXRpdmVDb21wb25lbnRSZWdpc3RyeSc7XG5cbmV4cG9ydCBjb25zdCBfX0lOVEVSTkFMX1ZJRVdfQ09ORklHOiBQYXJ0aWFsVmlld0NvbmZpZyA9IHtcbiAgdWlWaWV3Q2xhc3NOYW1lOiAnUkNUU2Nyb2xsQ29udGVudFZpZXcnLFxuICBidWJibGluZ0V2ZW50VHlwZXM6IHt9LFxuICBkaXJlY3RFdmVudFR5cGVzOiB7fSxcbiAgdmFsaWRBdHRyaWJ1dGVzOiB7fSxcbn07XG5cbmNvbnN0IFNjcm9sbENvbnRlbnRWaWV3TmF0aXZlQ29tcG9uZW50OiBIb3N0Q29tcG9uZW50PFByb3BzPiA9XG4gIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldDxQcm9wcz4oXG4gICAgJ1JDVFNjcm9sbENvbnRlbnRWaWV3JyxcbiAgICAoKSA9PiBfX0lOVEVSTkFMX1ZJRVdfQ09ORklHLFxuICApO1xuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxDb250ZW50Vmlld05hdGl2ZUNvbXBvbmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7RG91YmxlfSBmcm9tICcuLi8uLi9UeXBlcy9Db2RlZ2VuVHlwZXMnO1xuXG5pbXBvcnQgY29kZWdlbk5hdGl2ZUNvbW1hbmRzIGZyb20gJy4uLy4uL1V0aWxpdGllcy9jb2RlZ2VuTmF0aXZlQ29tbWFuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFNjcm9sbFZpZXdOYXRpdmVDb21wb25lbnRUeXBlID0gSG9zdENvbXBvbmVudDxtaXhlZD47XG5pbnRlcmZhY2UgTmF0aXZlQ29tbWFuZHMge1xuICArZmxhc2hTY3JvbGxJbmRpY2F0b3JzOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50VHlwZT4sXG4gICkgPT4gdm9pZDtcbiAgK3Njcm9sbFRvOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50VHlwZT4sXG4gICAgeDogRG91YmxlLFxuICAgIHk6IERvdWJsZSxcbiAgICBhbmltYXRlZDogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xuICArc2Nyb2xsVG9FbmQ6IChcbiAgICB2aWV3UmVmOiBSZWFjdC5FbGVtZW50UmVmPFNjcm9sbFZpZXdOYXRpdmVDb21wb25lbnRUeXBlPixcbiAgICBhbmltYXRlZDogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xuICArem9vbVRvUmVjdDogKFxuICAgIHZpZXdSZWY6IFJlYWN0LkVsZW1lbnRSZWY8U2Nyb2xsVmlld05hdGl2ZUNvbXBvbmVudFR5cGU+LFxuICAgIHJlY3Q6IHt8XG4gICAgICB4OiBEb3VibGUsXG4gICAgICB5OiBEb3VibGUsXG4gICAgICB3aWR0aDogRG91YmxlLFxuICAgICAgaGVpZ2h0OiBEb3VibGUsXG4gICAgICBhbmltYXRlZD86IGJvb2xlYW4sXG4gICAgfH0sXG4gICAgYW5pbWF0ZWQ/OiBib29sZWFuLFxuICApID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChjb2RlZ2VuTmF0aXZlQ29tbWFuZHM8TmF0aXZlQ29tbWFuZHM+KHtcbiAgc3VwcG9ydGVkQ29tbWFuZHM6IFtcbiAgICAnZmxhc2hTY3JvbGxJbmRpY2F0b3JzJyxcbiAgICAnc2Nyb2xsVG8nLFxuICAgICdzY3JvbGxUb0VuZCcsXG4gICAgJ3pvb21Ub1JlY3QnLFxuICBdLFxufSk6IE5hdGl2ZUNvbW1hbmRzKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgVmFsdWUgPSB7aG9yaXpvbnRhbDogYm9vbGVhbn0gfCBudWxsO1xuXG5jb25zdCBTY3JvbGxWaWV3Q29udGV4dDogUmVhY3QuQ29udGV4dDxWYWx1ZT4gPSBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKF9fREVWX18pIHtcbiAgU2Nyb2xsVmlld0NvbnRleHQuZGlzcGxheU5hbWUgPSAnU2Nyb2xsVmlld0NvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsVmlld0NvbnRleHQ7XG5cbmV4cG9ydCBjb25zdCBIT1JJWk9OVEFMOiBWYWx1ZSA9IE9iamVjdC5mcmVlemUoe2hvcml6b250YWw6IHRydWV9KTtcbmV4cG9ydCBjb25zdCBWRVJUSUNBTDogVmFsdWUgPSBPYmplY3QuZnJlZXplKHtob3Jpem9udGFsOiBmYWxzZX0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgSG9zdENvbXBvbmVudCxcbiAgUGFydGlhbFZpZXdDb25maWcsXG59IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1Njcm9sbFZpZXdOYXRpdmVQcm9wcyBhcyBQcm9wc30gZnJvbSAnLi9TY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50VHlwZSc7XG5cbmltcG9ydCAqIGFzIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5IGZyb20gJy4uLy4uL05hdGl2ZUNvbXBvbmVudC9OYXRpdmVDb21wb25lbnRSZWdpc3RyeSc7XG5pbXBvcnQge0NvbmRpdGlvbmFsbHlJZ25vcmVkRXZlbnRIYW5kbGVyc30gZnJvbSAnLi4vLi4vTmF0aXZlQ29tcG9uZW50L1ZpZXdDb25maWdJZ25vcmUnO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5cbmV4cG9ydCBjb25zdCBfX0lOVEVSTkFMX1ZJRVdfQ09ORklHOiBQYXJ0aWFsVmlld0NvbmZpZyA9XG4gIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCdcbiAgICA/IHtcbiAgICAgICAgdWlWaWV3Q2xhc3NOYW1lOiAnUkNUU2Nyb2xsVmlldycsXG4gICAgICAgIGJ1YmJsaW5nRXZlbnRUeXBlczoge30sXG4gICAgICAgIGRpcmVjdEV2ZW50VHlwZXM6IHtcbiAgICAgICAgICB0b3BNb21lbnR1bVNjcm9sbEJlZ2luOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Nb21lbnR1bVNjcm9sbEJlZ2luJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcE1vbWVudHVtU2Nyb2xsRW5kOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Nb21lbnR1bVNjcm9sbEVuZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BTY3JvbGw6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvblNjcm9sbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BTY3JvbGxCZWdpbkRyYWc6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvblNjcm9sbEJlZ2luRHJhZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BTY3JvbGxFbmREcmFnOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25TY3JvbGxFbmREcmFnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjb250ZW50T2Zmc2V0OiB7XG4gICAgICAgICAgICBkaWZmOiByZXF1aXJlKCcuLi8uLi9VdGlsaXRpZXMvZGlmZmVyL3BvaW50c0RpZmZlcicpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVjZWxlcmF0aW9uUmF0ZTogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlSW50ZXJ2YWxNb21lbnR1bTogdHJ1ZSxcbiAgICAgICAgICBwYWdpbmdFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbEVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc2hvd3NWZXJ0aWNhbFNjcm9sbEluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICBzbmFwVG9BbGlnbm1lbnQ6IHRydWUsXG4gICAgICAgICAgc25hcFRvRW5kOiB0cnVlLFxuICAgICAgICAgIHNuYXBUb0ludGVydmFsOiB0cnVlLFxuICAgICAgICAgIHNuYXBUb09mZnNldHM6IHRydWUsXG4gICAgICAgICAgc25hcFRvU3RhcnQ6IHRydWUsXG4gICAgICAgICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBzZW5kTW9tZW50dW1FdmVudHM6IHRydWUsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiB0cnVlLFxuICAgICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgYm9yZGVyU3R5bGU6IHRydWUsXG4gICAgICAgICAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgICAgICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9yZGVyQ29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiB7XG4gICAgICAgICAgICBwcm9jZXNzOiByZXF1aXJlKCcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJzaXN0ZW50U2Nyb2xsYmFyOiB0cnVlLFxuICAgICAgICAgIGVuZEZpbGxDb2xvcjoge1xuICAgICAgICAgICAgcHJvY2VzczogcmVxdWlyZSgnLi4vLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InKS5kZWZhdWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFkaW5nRWRnZUxlbmd0aDogdHJ1ZSxcbiAgICAgICAgICBvdmVyU2Nyb2xsTW9kZTogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbFBlcmZUYWc6IHRydWUsXG4gICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbW92ZUNsaXBwZWRTdWJ2aWV3czogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJMZWZ0Q29sb3I6IHtcbiAgICAgICAgICAgIHByb2Nlc3M6IHJlcXVpcmUoJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IHRydWUsXG4gICAgICAgICAgaXNJbnZlcnRlZFZpcnR1YWxpemVkTGlzdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgdWlWaWV3Q2xhc3NOYW1lOiAnUkNUU2Nyb2xsVmlldycsXG4gICAgICAgIGJ1YmJsaW5nRXZlbnRUeXBlczoge30sXG4gICAgICAgIGRpcmVjdEV2ZW50VHlwZXM6IHtcbiAgICAgICAgICB0b3BNb21lbnR1bVNjcm9sbEJlZ2luOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Nb21lbnR1bVNjcm9sbEJlZ2luJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcE1vbWVudHVtU2Nyb2xsRW5kOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Nb21lbnR1bVNjcm9sbEVuZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BTY3JvbGw6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvblNjcm9sbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BTY3JvbGxCZWdpbkRyYWc6IHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvblNjcm9sbEJlZ2luRHJhZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3BTY3JvbGxFbmREcmFnOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25TY3JvbGxFbmREcmFnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcFNjcm9sbFRvVG9wOiB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lOiAnb25TY3JvbGxUb1RvcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgYWx3YXlzQm91bmNlSG9yaXpvbnRhbDogdHJ1ZSxcbiAgICAgICAgICBhbHdheXNCb3VuY2VWZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICBhdXRvbWF0aWNhbGx5QWRqdXN0Q29udGVudEluc2V0czogdHJ1ZSxcbiAgICAgICAgICBhdXRvbWF0aWNhbGx5QWRqdXN0S2V5Ym9hcmRJbnNldHM6IHRydWUsXG4gICAgICAgICAgYXV0b21hdGljYWxseUFkanVzdHNTY3JvbGxJbmRpY2F0b3JJbnNldHM6IHRydWUsXG4gICAgICAgICAgYm91bmNlczogdHJ1ZSxcbiAgICAgICAgICBib3VuY2VzWm9vbTogdHJ1ZSxcbiAgICAgICAgICBjYW5DYW5jZWxDb250ZW50VG91Y2hlczogdHJ1ZSxcbiAgICAgICAgICBjZW50ZXJDb250ZW50OiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnRJbnNldDoge1xuICAgICAgICAgICAgZGlmZjogcmVxdWlyZSgnLi4vLi4vVXRpbGl0aWVzL2RpZmZlci9pbnNldHNEaWZmZXInKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRlbnRPZmZzZXQ6IHtcbiAgICAgICAgICAgIGRpZmY6IHJlcXVpcmUoJy4uLy4uL1V0aWxpdGllcy9kaWZmZXIvcG9pbnRzRGlmZmVyJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250ZW50SW5zZXRBZGp1c3RtZW50QmVoYXZpb3I6IHRydWUsXG4gICAgICAgICAgZGVjZWxlcmF0aW9uUmF0ZTogdHJ1ZSxcbiAgICAgICAgICBkaXJlY3Rpb25hbExvY2tFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGRpc2FibGVJbnRlcnZhbE1vbWVudHVtOiB0cnVlLFxuICAgICAgICAgIGluZGljYXRvclN0eWxlOiB0cnVlLFxuICAgICAgICAgIGludmVydGVkOiB0cnVlLFxuICAgICAgICAgIGtleWJvYXJkRGlzbWlzc01vZGU6IHRydWUsXG4gICAgICAgICAgbWFpbnRhaW5WaXNpYmxlQ29udGVudFBvc2l0aW9uOiB0cnVlLFxuICAgICAgICAgIG1heGltdW1ab29tU2NhbGU6IHRydWUsXG4gICAgICAgICAgbWluaW11bVpvb21TY2FsZTogdHJ1ZSxcbiAgICAgICAgICBwYWdpbmdFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHBpbmNoR2VzdHVyZUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc2Nyb2xsRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxFdmVudFRocm90dGxlOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbEluZGljYXRvckluc2V0czoge1xuICAgICAgICAgICAgZGlmZjogcmVxdWlyZSgnLi4vLi4vVXRpbGl0aWVzL2RpZmZlci9pbnNldHNEaWZmZXInKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNjcm9sbFRvT3ZlcmZsb3dFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbHNUb1RvcDogdHJ1ZSxcbiAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgc2hvd3NWZXJ0aWNhbFNjcm9sbEluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICBzbmFwVG9BbGlnbm1lbnQ6IHRydWUsXG4gICAgICAgICAgc25hcFRvRW5kOiB0cnVlLFxuICAgICAgICAgIHNuYXBUb0ludGVydmFsOiB0cnVlLFxuICAgICAgICAgIHNuYXBUb09mZnNldHM6IHRydWUsXG4gICAgICAgICAgc25hcFRvU3RhcnQ6IHRydWUsXG4gICAgICAgICAgem9vbVNjYWxlOiB0cnVlLFxuICAgICAgICAgIC4uLkNvbmRpdGlvbmFsbHlJZ25vcmVkRXZlbnRIYW5kbGVycyh7XG4gICAgICAgICAgICBvblNjcm9sbEJlZ2luRHJhZzogdHJ1ZSxcbiAgICAgICAgICAgIG9uTW9tZW50dW1TY3JvbGxFbmQ6IHRydWUsXG4gICAgICAgICAgICBvblNjcm9sbEVuZERyYWc6IHRydWUsXG4gICAgICAgICAgICBvbk1vbWVudHVtU2Nyb2xsQmVnaW46IHRydWUsXG4gICAgICAgICAgICBvblNjcm9sbFRvVG9wOiB0cnVlLFxuICAgICAgICAgICAgb25TY3JvbGw6IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG5jb25zdCBTY3JvbGxWaWV3TmF0aXZlQ29tcG9uZW50OiBIb3N0Q29tcG9uZW50PFByb3BzPiA9XG4gIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldDxQcm9wcz4oXG4gICAgJ1JDVFNjcm9sbFZpZXcnLFxuICAgICgpID0+IF9fSU5URVJOQUxfVklFV19DT05GSUcsXG4gICk7XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbFZpZXdOYXRpdmVDb21wb25lbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0xheW91dEV2ZW50fSBmcm9tICcuLi8uLi9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCBBbmltYXRlZCBmcm9tICcuLi8uLi9BbmltYXRlZC9BbmltYXRlZCc7XG5pbXBvcnQge2lzUHVibGljSW5zdGFuY2UgYXMgaXNGYWJyaWNQdWJsaWNJbnN0YW5jZX0gZnJvbSAnLi4vLi4vUmVhY3ROYXRpdmUvUmVhY3RGYWJyaWNQdWJsaWNJbnN0YW5jZS9SZWFjdEZhYnJpY1B1YmxpY0luc3RhbmNlVXRpbHMnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IHVzZU1lcmdlUmVmcyBmcm9tICcuLi8uLi9VdGlsaXRpZXMvdXNlTWVyZ2VSZWZzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9ICRSZWFkT25seTx7XG4gIGNoaWxkcmVuPzogUmVhY3QuRWxlbWVudDwkRmxvd0ZpeE1lPixcbiAgbmV4dEhlYWRlckxheW91dFk6ID9udW1iZXIsXG4gIG9uTGF5b3V0OiAoZXZlbnQ6IExheW91dEV2ZW50KSA9PiB2b2lkLFxuICBzY3JvbGxBbmltYXRlZFZhbHVlOiBBbmltYXRlZC5WYWx1ZSxcbiAgLy8gV2lsbCBjYXVzZSBzdGlja3kgaGVhZGVycyB0byBzdGljayBhdCB0aGUgYm90dG9tIG9mIHRoZSBTY3JvbGxWaWV3IGluc3RlYWRcbiAgLy8gb2YgdGhlIHRvcC5cbiAgaW52ZXJ0ZWQ6ID9ib29sZWFuLFxuICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSBwYXJlbnQgU2Nyb2xsVmlldy4gQ3VycmVudGx5IG9ubHkgc2V0IHdoZW4gaW52ZXJ0ZWQuXG4gIHNjcm9sbFZpZXdIZWlnaHQ6ID9udW1iZXIsXG4gIG5hdGl2ZUlEPzogP3N0cmluZyxcbiAgaGlkZGVuT25TY3JvbGw/OiA/Ym9vbGVhbixcbn0+O1xuXG50eXBlIEluc3RhbmNlID0ge1xuICAuLi5SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBBbmltYXRlZC5WaWV3PixcbiAgc2V0TmV4dEhlYWRlclk6IG51bWJlciA9PiB2b2lkLFxuICAuLi5cbn07XG5cbmNvbnN0IFNjcm9sbFZpZXdTdGlja3lIZWFkZXJXaXRoRm9yd2FyZGVkUmVmOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxcbiAgUHJvcHMsXG4gIEluc3RhbmNlLFxuPiA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2Nyb2xsVmlld1N0aWNreUhlYWRlcihwcm9wcywgZm9yd2FyZGVkUmVmKSB7XG4gIGNvbnN0IHtcbiAgICBpbnZlcnRlZCxcbiAgICBzY3JvbGxWaWV3SGVpZ2h0LFxuICAgIGhpZGRlbk9uU2Nyb2xsLFxuICAgIHNjcm9sbEFuaW1hdGVkVmFsdWUsXG4gICAgbmV4dEhlYWRlckxheW91dFk6IF9uZXh0SGVhZGVyTGF5b3V0WSxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFttZWFzdXJlZCwgc2V0TWVhc3VyZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbbGF5b3V0WSwgc2V0TGF5b3V0WV0gPSB1c2VTdGF0ZTxudW1iZXI+KDApO1xuICBjb25zdCBbbGF5b3V0SGVpZ2h0LCBzZXRMYXlvdXRIZWlnaHRdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgY29uc3QgW3RyYW5zbGF0ZVksIHNldFRyYW5zbGF0ZVldID0gdXNlU3RhdGU8P251bWJlcj4obnVsbCk7XG4gIGNvbnN0IFtuZXh0SGVhZGVyTGF5b3V0WSwgc2V0TmV4dEhlYWRlckxheW91dFldID1cbiAgICB1c2VTdGF0ZTw/bnVtYmVyPihfbmV4dEhlYWRlckxheW91dFkpO1xuICBjb25zdCBbaXNGYWJyaWMsIHNldElzRmFicmljXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdCBjYWxsYmFja1JlZiA9IHVzZUNhbGxiYWNrKChyZWY6IEluc3RhbmNlIHwgbnVsbCk6IHZvaWQgPT4ge1xuICAgIGlmIChyZWYgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZWYuc2V0TmV4dEhlYWRlclkgPSBzZXROZXh0SGVhZGVyTGF5b3V0WTtcbiAgICBzZXRJc0ZhYnJpYyhpc0ZhYnJpY1B1YmxpY0luc3RhbmNlKHJlZikpO1xuICB9LCBbXSk7XG4gIGNvbnN0IHJlZjogKFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEFuaW1hdGVkLlZpZXc+IHwgbnVsbCkgPT4gdm9pZCA9XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gLSBSZWYgaXMgbXV0YXRlZCBieSBgY2FsbGJhY2tSZWZgLlxuICAgIHVzZU1lcmdlUmVmczxJbnN0YW5jZT4oY2FsbGJhY2tSZWYsIGZvcndhcmRlZFJlZik7XG5cbiAgY29uc3Qgb2Zmc2V0ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgaGlkZGVuT25TY3JvbGwgPT09IHRydWVcbiAgICAgICAgPyBBbmltYXRlZC5kaWZmQ2xhbXAoXG4gICAgICAgICAgICBzY3JvbGxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgIC5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgZXh0cmFwb2xhdGVMZWZ0OiAnY2xhbXAnLFxuICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFtsYXlvdXRZLCBsYXlvdXRZICsgMV0sXG4gICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IChbMCwgMV06IEFycmF5PG51bWJlcj4pLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogKFswLCAtMV06IEFycmF5PG51bWJlcj4pLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC1sYXlvdXRIZWlnaHQsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgIClcbiAgICAgICAgOiBudWxsLFxuICAgIFtzY3JvbGxBbmltYXRlZFZhbHVlLCBsYXlvdXRIZWlnaHQsIGxheW91dFksIGhpZGRlbk9uU2Nyb2xsXSxcbiAgKTtcblxuICBjb25zdCBbYW5pbWF0ZWRUcmFuc2xhdGVZLCBzZXRBbmltYXRlZFRyYW5zbGF0ZVldID0gdXNlU3RhdGU8QW5pbWF0ZWQuTm9kZT4oXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRSYW5nZTogQXJyYXk8bnVtYmVyPiA9IFstMSwgMF07XG4gICAgICBjb25zdCBvdXRwdXRSYW5nZTogQXJyYXk8bnVtYmVyPiA9IFswLCAwXTtcbiAgICAgIGNvbnN0IGluaXRpYWxUcmFuc2xhdGVZID0gc2Nyb2xsQW5pbWF0ZWRWYWx1ZS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgIGlucHV0UmFuZ2UsXG4gICAgICAgIG91dHB1dFJhbmdlLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gQW5pbWF0ZWQuYWRkKGluaXRpYWxUcmFuc2xhdGVZLCBvZmZzZXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluaXRpYWxUcmFuc2xhdGVZO1xuICAgIH0sXG4gICk7XG5cbiAgY29uc3QgaGF2ZVJlY2VpdmVkSW5pdGlhbFplcm9UcmFuc2xhdGVZID0gdXNlUmVmPGJvb2xlYW4+KHRydWUpO1xuICBjb25zdCB0cmFuc2xhdGVZRGVib3VuY2VUaW1lciA9IHVzZVJlZjw/VGltZW91dElEPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0cmFuc2xhdGVZICE9PSAwICYmIHRyYW5zbGF0ZVkgIT0gbnVsbCkge1xuICAgICAgaGF2ZVJlY2VpdmVkSW5pdGlhbFplcm9UcmFuc2xhdGVZLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFt0cmFuc2xhdGVZXSk7XG5cbiAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIChJbnRlcnBvbGF0ZWQpIEFuaW1hdGVkIFZhbHVlXG4gIC8vIHVwZGF0ZXMsIHdoaWNoIGlzIHNldmVyYWwgdGltZXMgcGVyIGZyYW1lIGR1cmluZyBzY3JvbGxpbmcuXG4gIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBGYWJyaWMgU2hhZG93VHJlZSBoYXMgdGhlIG1vc3QgcmVjZW50XG4gIC8vIHRyYW5zbGF0ZSBzdHlsZSBvZiB0aGlzIG5vZGUsIHdlIGRlYm91bmNlIHRoZSB2YWx1ZSBhbmQgdGhlblxuICAvLyBwYXNzIGl0IHRocm91Z2ggdG8gdGhlIHVuZGVybHlpbmcgbm9kZSBkdXJpbmcgcmVuZGVyLlxuICAvLyBUaGlzIGlzOlxuICAvLyAxLiBPbmx5IGFuIGlzc3VlIGluIEZhYnJpYy5cbiAgLy8gMi4gV29yc2UgaW4gQW5kcm9pZCB0aGFuIGlPUy4gSW4gQW5kcm9pZCwgYnV0IG5vdCBpT1MsIHlvdVxuICAvLyAgICBjYW4gdG91Y2ggYW5kIG1vdmUgeW91ciBmaW5nZXIgc2xpZ2h0bHkgYW5kIHN0aWxsIHRyaWdnZXJcbiAgLy8gICAgYSBcInRhcFwiIGV2ZW50LiBJbiBpT1MsIG1vdmluZyB3aWxsIGNhbmNlbCB0aGUgdGFwIGluXG4gIC8vICAgIGJvdGggRmFicmljIGFuZCBub24tRmFicmljLiBPbiBBbmRyb2lkIHdoZW4geW91IG1vdmVcbiAgLy8gICAgeW91ciBmaW5nZXIsIHRoZSBoaXQtZGV0ZWN0aW9uIG1vdmVzIGZyb20gdGhlIEFuZHJvaWRcbiAgLy8gICAgcGxhdGZvcm0gdG8gSlMsIHNvIHdlIG5lZWQgdGhlIFNoYWRvd1RyZWUgdG8gaGF2ZSBrbm93bGVkZ2VcbiAgLy8gICAgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gIGNvbnN0IGFuaW1hdGVkVmFsdWVMaXN0ZW5lciA9IHVzZUNhbGxiYWNrKCh7dmFsdWV9OiAkRmxvd0ZpeE1lKSA9PiB7XG4gICAgY29uc3QgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnID8gMTUgOiA2NDtcbiAgICAvLyBXaGVuIHRoZSBBbmltYXRlZEludGVycG9sYXRpb24gaXMgcmVjcmVhdGVkLCBpdCBhbHdheXMgaW5pdGlhbGl6ZXNcbiAgICAvLyB0byBhIHZhbHVlIG9mIHplcm8gYW5kIGVtaXRzIGEgdmFsdWUgY2hhbmdlIG9mIDAgdG8gaXRzIGxpc3RlbmVycy5cbiAgICBpZiAodmFsdWUgPT09IDAgJiYgIWhhdmVSZWNlaXZlZEluaXRpYWxaZXJvVHJhbnNsYXRlWS5jdXJyZW50KSB7XG4gICAgICBoYXZlUmVjZWl2ZWRJbml0aWFsWmVyb1RyYW5zbGF0ZVkuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0cmFuc2xhdGVZRGVib3VuY2VUaW1lci5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0cmFuc2xhdGVZRGVib3VuY2VUaW1lci5jdXJyZW50KTtcbiAgICB9XG4gICAgdHJhbnNsYXRlWURlYm91bmNlVGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiBzZXRUcmFuc2xhdGVZKHZhbHVlKSxcbiAgICAgIGRlYm91bmNlVGltZW91dCxcbiAgICApO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpbnB1dFJhbmdlOiBBcnJheTxudW1iZXI+ID0gWy0xLCAwXTtcbiAgICBjb25zdCBvdXRwdXRSYW5nZTogQXJyYXk8bnVtYmVyPiA9IFswLCAwXTtcblxuICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgaWYgKGludmVydGVkID09PSB0cnVlKSB7XG4gICAgICAgIC8vIFRoZSBpbnRlcnBvbGF0aW9uIGxvb2tzIGxpa2U6XG4gICAgICAgIC8vIC0gTmVnYXRpdmUgc2Nyb2xsOiBubyB0cmFuc2xhdGlvblxuICAgICAgICAvLyAtIGBzdGlja1N0YXJ0UG9pbnRgIGlzIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgaGVhZGVyIHdpbGwgc3RhcnQgc3RpY2tpbmcuXG4gICAgICAgIC8vICAgSXQgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgU2Nyb2xsVmlldyB2aWV3cG9ydCBoZWlnaHQgc28gaXQgaXMgYSB0aGUgYm90dG9tLlxuICAgICAgICAvLyAtIEhlYWRlcnMgdGhhdCBhcmUgaW4gdGhlIGluaXRpYWwgdmlld3BvcnQgd2lsbCBuZXZlciBzdGljaywgYHN0aWNrU3RhcnRQb2ludGBcbiAgICAgICAgLy8gICB3aWxsIGJlIG5lZ2F0aXZlLlxuICAgICAgICAvLyAtIEZyb20gMCB0byBgc3RpY2tTdGFydFBvaW50YCBubyB0cmFuc2xhdGlvbi4gVGhpcyB3aWxsIGNhdXNlIHRoZSBoZWFkZXJcbiAgICAgICAgLy8gICB0byBzY3JvbGwgbm9ybWFsbHkgdW50aWwgaXQgcmVhY2hlcyB0aGUgdG9wIG9mIHRoZSBzY3JvbGwgdmlldy5cbiAgICAgICAgLy8gLSBGcm9tIGBzdGlja1N0YXJ0UG9pbnRgIHRvIHdoZW4gdGhlIG5leHQgaGVhZGVyIHkgaGl0cyB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGhlYWRlcjogdHJhbnNsYXRlXG4gICAgICAgIC8vICAgZXF1YWxseSB0byBzY3JvbGwuIFRoaXMgd2lsbCBjYXVzZSB0aGUgaGVhZGVyIHRvIHN0YXkgYXQgdGhlIHRvcCBvZiB0aGUgc2Nyb2xsIHZpZXcuXG4gICAgICAgIC8vIC0gUGFzdCB0aGUgY29sbGlzaW9uIHdpdGggdGhlIG5leHQgaGVhZGVyIHk6IG5vIG1vcmUgdHJhbnNsYXRpb24uIFRoaXMgd2lsbCBjYXVzZSB0aGVcbiAgICAgICAgLy8gICBoZWFkZXIgdG8gY29udGludWUgc2Nyb2xsaW5nIHVwIGFuZCBtYWtlIHJvb20gZm9yIHRoZSBuZXh0IHN0aWNreSBoZWFkZXIuXG4gICAgICAgIC8vICAgSW4gdGhlIGNhc2UgdGhhdCB0aGVyZSBpcyBubyBuZXh0IGhlYWRlciBqdXN0IHRyYW5zbGF0ZSBlcXVhbGx5IHRvXG4gICAgICAgIC8vICAgc2Nyb2xsIGluZGVmaW5pdGVseS5cbiAgICAgICAgaWYgKHNjcm9sbFZpZXdIZWlnaHQgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHN0aWNrU3RhcnRQb2ludCA9IGxheW91dFkgKyBsYXlvdXRIZWlnaHQgLSBzY3JvbGxWaWV3SGVpZ2h0O1xuICAgICAgICAgIGlmIChzdGlja1N0YXJ0UG9pbnQgPiAwKSB7XG4gICAgICAgICAgICBpbnB1dFJhbmdlLnB1c2goc3RpY2tTdGFydFBvaW50KTtcbiAgICAgICAgICAgIG91dHB1dFJhbmdlLnB1c2goMCk7XG4gICAgICAgICAgICBpbnB1dFJhbmdlLnB1c2goc3RpY2tTdGFydFBvaW50ICsgMSk7XG4gICAgICAgICAgICBvdXRwdXRSYW5nZS5wdXNoKDEpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc3RpY2t5IGhlYWRlciBoYXMgbm90IGxvYWRlZCB5ZXQgKHByb2JhYmx5IHdpbmRvd2luZykgb3IgaXMgdGhlIGxhc3RcbiAgICAgICAgICAgIC8vIHdlIGNhbiBqdXN0IGtlZXAgaXQgc3RpY2tlZCBmb3JldmVyLlxuICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uUG9pbnQgPVxuICAgICAgICAgICAgICAobmV4dEhlYWRlckxheW91dFkgfHwgMCkgLSBsYXlvdXRIZWlnaHQgLSBzY3JvbGxWaWV3SGVpZ2h0O1xuICAgICAgICAgICAgaWYgKGNvbGxpc2lvblBvaW50ID4gc3RpY2tTdGFydFBvaW50KSB7XG4gICAgICAgICAgICAgIGlucHV0UmFuZ2UucHVzaChjb2xsaXNpb25Qb2ludCwgY29sbGlzaW9uUG9pbnQgKyAxKTtcbiAgICAgICAgICAgICAgb3V0cHV0UmFuZ2UucHVzaChcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25Qb2ludCAtIHN0aWNrU3RhcnRQb2ludCxcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25Qb2ludCAtIHN0aWNrU3RhcnRQb2ludCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBpbnRlcnBvbGF0aW9uIGxvb2tzIGxpa2U6XG4gICAgICAgIC8vIC0gTmVnYXRpdmUgc2Nyb2xsOiBubyB0cmFuc2xhdGlvblxuICAgICAgICAvLyAtIEZyb20gMCB0byB0aGUgeSBvZiB0aGUgaGVhZGVyOiBubyB0cmFuc2xhdGlvbi4gVGhpcyB3aWxsIGNhdXNlIHRoZSBoZWFkZXJcbiAgICAgICAgLy8gICB0byBzY3JvbGwgbm9ybWFsbHkgdW50aWwgaXQgcmVhY2hlcyB0aGUgdG9wIG9mIHRoZSBzY3JvbGwgdmlldy5cbiAgICAgICAgLy8gLSBGcm9tIGhlYWRlciB5IHRvIHdoZW4gdGhlIG5leHQgaGVhZGVyIHkgaGl0cyB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGhlYWRlcjogdHJhbnNsYXRlXG4gICAgICAgIC8vICAgZXF1YWxseSB0byBzY3JvbGwuIFRoaXMgd2lsbCBjYXVzZSB0aGUgaGVhZGVyIHRvIHN0YXkgYXQgdGhlIHRvcCBvZiB0aGUgc2Nyb2xsIHZpZXcuXG4gICAgICAgIC8vIC0gUGFzdCB0aGUgY29sbGlzaW9uIHdpdGggdGhlIG5leHQgaGVhZGVyIHk6IG5vIG1vcmUgdHJhbnNsYXRpb24uIFRoaXMgd2lsbCBjYXVzZSB0aGVcbiAgICAgICAgLy8gICBoZWFkZXIgdG8gY29udGludWUgc2Nyb2xsaW5nIHVwIGFuZCBtYWtlIHJvb20gZm9yIHRoZSBuZXh0IHN0aWNreSBoZWFkZXIuXG4gICAgICAgIC8vICAgSW4gdGhlIGNhc2UgdGhhdCB0aGVyZSBpcyBubyBuZXh0IGhlYWRlciBqdXN0IHRyYW5zbGF0ZSBlcXVhbGx5IHRvXG4gICAgICAgIC8vICAgc2Nyb2xsIGluZGVmaW5pdGVseS5cbiAgICAgICAgaW5wdXRSYW5nZS5wdXNoKGxheW91dFkpO1xuICAgICAgICBvdXRwdXRSYW5nZS5wdXNoKDApO1xuICAgICAgICAvLyBJZiB0aGUgbmV4dCBzdGlja3kgaGVhZGVyIGhhcyBub3QgbG9hZGVkIHlldCAocHJvYmFibHkgd2luZG93aW5nKSBvciBpcyB0aGUgbGFzdFxuICAgICAgICAvLyB3ZSBjYW4ganVzdCBrZWVwIGl0IHN0aWNrZWQgZm9yZXZlci5cbiAgICAgICAgY29uc3QgY29sbGlzaW9uUG9pbnQgPSAobmV4dEhlYWRlckxheW91dFkgfHwgMCkgLSBsYXlvdXRIZWlnaHQ7XG4gICAgICAgIGlmIChjb2xsaXNpb25Qb2ludCA+PSBsYXlvdXRZKSB7XG4gICAgICAgICAgaW5wdXRSYW5nZS5wdXNoKGNvbGxpc2lvblBvaW50LCBjb2xsaXNpb25Qb2ludCArIDEpO1xuICAgICAgICAgIG91dHB1dFJhbmdlLnB1c2goY29sbGlzaW9uUG9pbnQgLSBsYXlvdXRZLCBjb2xsaXNpb25Qb2ludCAtIGxheW91dFkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0UmFuZ2UucHVzaChsYXlvdXRZICsgMSk7XG4gICAgICAgICAgb3V0cHV0UmFuZ2UucHVzaCgxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXdBbmltYXRlZFRyYW5zbGF0ZVk6IEFuaW1hdGVkLk5vZGUgPSBzY3JvbGxBbmltYXRlZFZhbHVlLmludGVycG9sYXRlKHtcbiAgICAgIGlucHV0UmFuZ2UsXG4gICAgICBvdXRwdXRSYW5nZSxcbiAgICB9KTtcblxuICAgIGlmIChvZmZzZXQgIT0gbnVsbCkge1xuICAgICAgbmV3QW5pbWF0ZWRUcmFuc2xhdGVZID0gQW5pbWF0ZWQuYWRkKG5ld0FuaW1hdGVkVHJhbnNsYXRlWSwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGV2ZW50IGxpc3RlbmVyXG4gICAgbGV0IGFuaW1hdGVkTGlzdGVuZXJJZDtcbiAgICBpZiAoaXNGYWJyaWMpIHtcbiAgICAgIGFuaW1hdGVkTGlzdGVuZXJJZCA9IG5ld0FuaW1hdGVkVHJhbnNsYXRlWS5hZGRMaXN0ZW5lcihcbiAgICAgICAgYW5pbWF0ZWRWYWx1ZUxpc3RlbmVyLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRBbmltYXRlZFRyYW5zbGF0ZVkobmV3QW5pbWF0ZWRUcmFuc2xhdGVZKTtcblxuICAgIC8vIGNsZWFuIHVwIHRoZSBldmVudCBsaXN0ZW5lciBhbmQgdGltZXJcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGFuaW1hdGVkTGlzdGVuZXJJZCkge1xuICAgICAgICBuZXdBbmltYXRlZFRyYW5zbGF0ZVkucmVtb3ZlTGlzdGVuZXIoYW5pbWF0ZWRMaXN0ZW5lcklkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2xhdGVZRGVib3VuY2VUaW1lci5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRyYW5zbGF0ZVlEZWJvdW5jZVRpbWVyLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtcbiAgICBuZXh0SGVhZGVyTGF5b3V0WSxcbiAgICBtZWFzdXJlZCxcbiAgICBsYXlvdXRIZWlnaHQsXG4gICAgbGF5b3V0WSxcbiAgICBzY3JvbGxWaWV3SGVpZ2h0LFxuICAgIHNjcm9sbEFuaW1hdGVkVmFsdWUsXG4gICAgaW52ZXJ0ZWQsXG4gICAgb2Zmc2V0LFxuICAgIGFuaW1hdGVkVmFsdWVMaXN0ZW5lcixcbiAgICBpc0ZhYnJpYyxcbiAgXSk7XG5cbiAgY29uc3QgX29uTGF5b3V0ID0gKGV2ZW50OiBMYXlvdXRFdmVudCkgPT4ge1xuICAgIHNldExheW91dFkoZXZlbnQubmF0aXZlRXZlbnQubGF5b3V0LnkpO1xuICAgIHNldExheW91dEhlaWdodChldmVudC5uYXRpdmVFdmVudC5sYXlvdXQuaGVpZ2h0KTtcbiAgICBzZXRNZWFzdXJlZCh0cnVlKTtcblxuICAgIHByb3BzLm9uTGF5b3V0KGV2ZW50KTtcbiAgICBjb25zdCBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLm9ubHk8JEZsb3dGaXhNZT4ocHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChjaGlsZC5wcm9wcy5vbkxheW91dCkge1xuICAgICAgY2hpbGQucHJvcHMub25MYXlvdXQoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLm9ubHk8JEZsb3dGaXhNZT4ocHJvcHMuY2hpbGRyZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgIGNvbGxhcHNhYmxlPXtmYWxzZX1cbiAgICAgIG5hdGl2ZUlEPXtwcm9wcy5uYXRpdmVJRH1cbiAgICAgIG9uTGF5b3V0PXtfb25MYXlvdXR9XG4gICAgICByZWY9e3JlZn1cbiAgICAgIHN0eWxlPXtbXG4gICAgICAgIGNoaWxkLnByb3BzLnN0eWxlLFxuICAgICAgICBzdHlsZXMuaGVhZGVyLFxuICAgICAgICB7dHJhbnNmb3JtOiBbe3RyYW5zbGF0ZVk6IGFuaW1hdGVkVHJhbnNsYXRlWX1dfSxcbiAgICAgIF19PlxuICAgICAge1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBzdHlsZTogc3R5bGVzLmZpbGwsIC8vIFdlIHRyYW5zZmVyIHRoZSBjaGlsZCBzdHlsZSB0byB0aGUgd3JhcHBlci5cbiAgICAgICAgb25MYXlvdXQ6IHVuZGVmaW5lZCwgLy8gd2UgY2FsbCB0aGlzIG1hbnVhbGx5IHRocm91Z2ggb3VyIHRoaXMuX29uTGF5b3V0XG4gICAgICB9KX1cbiAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBoZWFkZXI6IHtcbiAgICB6SW5kZXg6IDEwLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB9LFxuICBmaWxsOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxWaWV3U3RpY2t5SGVhZGVyV2l0aEZvcndhcmRlZFJlZjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCB0eXBlIHtDb21wb3NpdGVBbmltYXRpb24sIE51bWVyaWN9IGZyb20gJy4vQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbic7XG5cbmltcG9ydCB0eXBlb2YgQW5pbWF0ZWRGbGF0TGlzdCBmcm9tICcuL2NvbXBvbmVudHMvQW5pbWF0ZWRGbGF0TGlzdCc7XG5pbXBvcnQgdHlwZW9mIEFuaW1hdGVkSW1hZ2UgZnJvbSAnLi9jb21wb25lbnRzL0FuaW1hdGVkSW1hZ2UnO1xuaW1wb3J0IHR5cGVvZiBBbmltYXRlZFNjcm9sbFZpZXcgZnJvbSAnLi9jb21wb25lbnRzL0FuaW1hdGVkU2Nyb2xsVmlldyc7XG5pbXBvcnQgdHlwZW9mIEFuaW1hdGVkU2VjdGlvbkxpc3QgZnJvbSAnLi9jb21wb25lbnRzL0FuaW1hdGVkU2VjdGlvbkxpc3QnO1xuaW1wb3J0IHR5cGVvZiBBbmltYXRlZFRleHQgZnJvbSAnLi9jb21wb25lbnRzL0FuaW1hdGVkVGV4dCc7XG5pbXBvcnQgdHlwZW9mIEFuaW1hdGVkVmlldyBmcm9tICcuL2NvbXBvbmVudHMvQW5pbWF0ZWRWaWV3JztcblxuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbiBmcm9tICcuL0FuaW1hdGVkSW1wbGVtZW50YXRpb24nO1xuaW1wb3J0IEFuaW1hdGVkTW9jayBmcm9tICcuL0FuaW1hdGVkTW9jayc7XG5cbmNvbnN0IEFuaW1hdGVkOiB0eXBlb2YgQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbiA9IFBsYXRmb3JtLmlzRGlzYWJsZUFuaW1hdGlvbnNcbiAgPyBBbmltYXRlZE1vY2tcbiAgOiBBbmltYXRlZEltcGxlbWVudGF0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCBGbGF0TGlzdCgpOiBBbmltYXRlZEZsYXRMaXN0IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9jb21wb25lbnRzL0FuaW1hdGVkRmxhdExpc3QnKS5kZWZhdWx0O1xuICB9LFxuICBnZXQgSW1hZ2UoKTogQW5pbWF0ZWRJbWFnZSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vY29tcG9uZW50cy9BbmltYXRlZEltYWdlJykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IFNjcm9sbFZpZXcoKTogQW5pbWF0ZWRTY3JvbGxWaWV3IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9jb21wb25lbnRzL0FuaW1hdGVkU2Nyb2xsVmlldycpLmRlZmF1bHQ7XG4gIH0sXG4gIGdldCBTZWN0aW9uTGlzdCgpOiBBbmltYXRlZFNlY3Rpb25MaXN0IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9jb21wb25lbnRzL0FuaW1hdGVkU2VjdGlvbkxpc3QnKS5kZWZhdWx0O1xuICB9LFxuICBnZXQgVGV4dCgpOiBBbmltYXRlZFRleHQge1xuICAgIHJldHVybiByZXF1aXJlKCcuL2NvbXBvbmVudHMvQW5pbWF0ZWRUZXh0JykuZGVmYXVsdDtcbiAgfSxcbiAgZ2V0IFZpZXcoKTogQW5pbWF0ZWRWaWV3IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9jb21wb25lbnRzL0FuaW1hdGVkVmlldycpLmRlZmF1bHQ7XG4gIH0sXG4gIC4uLkFuaW1hdGVkLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge051bWVyaWMgYXMgQW5pbWF0ZWROdW1lcmljfSBmcm9tICcuL0FuaW1hdGVkSW1wbGVtZW50YXRpb24nO1xuaW1wb3J0IHR5cGUge0VuZFJlc3VsdH0gZnJvbSAnLi9hbmltYXRpb25zL0FuaW1hdGlvbic7XG5pbXBvcnQgdHlwZSB7RW5kQ2FsbGJhY2t9IGZyb20gJy4vYW5pbWF0aW9ucy9BbmltYXRpb24nO1xuaW1wb3J0IHR5cGUge0RlY2F5QW5pbWF0aW9uQ29uZmlnfSBmcm9tICcuL2FuaW1hdGlvbnMvRGVjYXlBbmltYXRpb24nO1xuaW1wb3J0IHR5cGUge1NwcmluZ0FuaW1hdGlvbkNvbmZpZ30gZnJvbSAnLi9hbmltYXRpb25zL1NwcmluZ0FuaW1hdGlvbic7XG5pbXBvcnQgdHlwZSB7VGltaW5nQW5pbWF0aW9uQ29uZmlnfSBmcm9tICcuL2FuaW1hdGlvbnMvVGltaW5nQW5pbWF0aW9uJztcblxuaW1wb3J0IHtBbmltYXRlZEV2ZW50LCBhdHRhY2hOYXRpdmVFdmVudH0gZnJvbSAnLi9BbmltYXRlZEV2ZW50JztcbmltcG9ydCBBbmltYXRlZEltcGxlbWVudGF0aW9uIGZyb20gJy4vQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbic7XG5pbXBvcnQgY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVBbmltYXRlZENvbXBvbmVudCc7XG5pbXBvcnQgQW5pbWF0ZWRDb2xvciBmcm9tICcuL25vZGVzL0FuaW1hdGVkQ29sb3InO1xuaW1wb3J0IEFuaW1hdGVkSW50ZXJwb2xhdGlvbiBmcm9tICcuL25vZGVzL0FuaW1hdGVkSW50ZXJwb2xhdGlvbic7XG5pbXBvcnQgQW5pbWF0ZWROb2RlIGZyb20gJy4vbm9kZXMvQW5pbWF0ZWROb2RlJztcbmltcG9ydCBBbmltYXRlZFZhbHVlIGZyb20gJy4vbm9kZXMvQW5pbWF0ZWRWYWx1ZSc7XG5pbXBvcnQgQW5pbWF0ZWRWYWx1ZVhZIGZyb20gJy4vbm9kZXMvQW5pbWF0ZWRWYWx1ZVhZJztcblxuLyoqXG4gKiBBbmltYXRpb25zIGFyZSBhIHNvdXJjZSBvZiBmbGFraW5lc3MgaW4gc25hcHNob3QgdGVzdGluZy4gVGhpcyBtb2NrIHJlcGxhY2VzXG4gKiBhbmltYXRpb24gZnVuY3Rpb25zIGZyb20gQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbiB3aXRoIGVtcHR5IGFuaW1hdGlvbnMgZm9yXG4gKiBwcmVkaWN0YWJpbGl0eSBpbiB0ZXN0cy4gV2hlbiBwb3NzaWJsZSB0aGUgYW5pbWF0aW9uIHdpbGwgcnVuIGltbWVkaWF0ZWx5XG4gKiB0byB0aGUgZmluYWwgc3RhdGUuXG4gKi9cblxuLy8gUHJldmVudCBhbnkgY2FsbGJhY2sgaW52b2NhdGlvbiBmcm9tIHJlY3Vyc2l2ZWx5IHRyaWdnZXJpbmcgYW5vdGhlclxuLy8gY2FsbGJhY2ssIHdoaWNoIG1heSB0cmlnZ2VyIGFub3RoZXIgYW5pbWF0aW9uXG5sZXQgaW5BbmltYXRpb25DYWxsYmFjayA9IGZhbHNlO1xuZnVuY3Rpb24gbW9ja0FuaW1hdGlvblN0YXJ0KFxuICBzdGFydDogKGNhbGxiYWNrPzogP0VuZENhbGxiYWNrKSA9PiB2b2lkLFxuKTogKGNhbGxiYWNrPzogP0VuZENhbGxiYWNrKSA9PiB2b2lkIHtcbiAgcmV0dXJuIGNhbGxiYWNrID0+IHtcbiAgICBjb25zdCBndWFyZGVkQ2FsbGJhY2sgPVxuICAgICAgY2FsbGJhY2sgPT0gbnVsbFxuICAgICAgICA/IGNhbGxiYWNrXG4gICAgICAgIDogKC4uLmFyZ3M6IEFycmF5PEVuZFJlc3VsdD4pID0+IHtcbiAgICAgICAgICAgIGlmIChpbkFuaW1hdGlvbkNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAnSWdub3JpbmcgcmVjdXJzaXZlIGFuaW1hdGlvbiBjYWxsYmFjayB3aGVuIHJ1bm5pbmcgbW9jayBhbmltYXRpb25zJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5BbmltYXRpb25DYWxsYmFjayA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGluQW5pbWF0aW9uQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgIHN0YXJ0KGd1YXJkZWRDYWxsYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbXBvc2l0ZUFuaW1hdGlvbiA9IHtcbiAgc3RhcnQ6IChjYWxsYmFjaz86ID9FbmRDYWxsYmFjaykgPT4gdm9pZCxcbiAgc3RvcDogKCkgPT4gdm9pZCxcbiAgcmVzZXQ6ICgpID0+IHZvaWQsXG4gIF9zdGFydE5hdGl2ZUxvb3A6IChpdGVyYXRpb25zPzogbnVtYmVyKSA9PiB2b2lkLFxuICBfaXNVc2luZ05hdGl2ZURyaXZlcjogKCkgPT4gYm9vbGVhbixcbiAgLi4uXG59O1xuXG5jb25zdCBlbXB0eUFuaW1hdGlvbiA9IHtcbiAgc3RhcnQ6ICgpID0+IHt9LFxuICBzdG9wOiAoKSA9PiB7fSxcbiAgcmVzZXQ6ICgpID0+IHt9LFxuICBfc3RhcnROYXRpdmVMb29wOiAoKSA9PiB7fSxcbiAgX2lzVXNpbmdOYXRpdmVEcml2ZXI6ICgpID0+IHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG59O1xuXG5jb25zdCBtb2NrQ29tcG9zaXRlQW5pbWF0aW9uID0gKFxuICBhbmltYXRpb25zOiBBcnJheTxDb21wb3NpdGVBbmltYXRpb24+LFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uID0+ICh7XG4gIC4uLmVtcHR5QW5pbWF0aW9uLFxuICBzdGFydDogbW9ja0FuaW1hdGlvblN0YXJ0KChjYWxsYmFjaz86ID9FbmRDYWxsYmFjayk6IHZvaWQgPT4ge1xuICAgIGFuaW1hdGlvbnMuZm9yRWFjaChhbmltYXRpb24gPT4gYW5pbWF0aW9uLnN0YXJ0KCkpO1xuICAgIGNhbGxiYWNrPy4oe2ZpbmlzaGVkOiB0cnVlfSk7XG4gIH0pLFxufSk7XG5cbmNvbnN0IHNwcmluZyA9IGZ1bmN0aW9uIChcbiAgdmFsdWU6IEFuaW1hdGVkVmFsdWUgfCBBbmltYXRlZFZhbHVlWFkgfCBBbmltYXRlZENvbG9yLFxuICBjb25maWc6IFNwcmluZ0FuaW1hdGlvbkNvbmZpZyxcbik6IENvbXBvc2l0ZUFuaW1hdGlvbiB7XG4gIGNvbnN0IGFueVZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbXB0eUFuaW1hdGlvbixcbiAgICBzdGFydDogbW9ja0FuaW1hdGlvblN0YXJ0KChjYWxsYmFjaz86ID9FbmRDYWxsYmFjayk6IHZvaWQgPT4ge1xuICAgICAgYW55VmFsdWUuc2V0VmFsdWUoY29uZmlnLnRvVmFsdWUpO1xuICAgICAgY2FsbGJhY2s/Lih7ZmluaXNoZWQ6IHRydWV9KTtcbiAgICB9KSxcbiAgfTtcbn07XG5cbmNvbnN0IHRpbWluZyA9IGZ1bmN0aW9uIChcbiAgdmFsdWU6IEFuaW1hdGVkVmFsdWUgfCBBbmltYXRlZFZhbHVlWFkgfCBBbmltYXRlZENvbG9yLFxuICBjb25maWc6IFRpbWluZ0FuaW1hdGlvbkNvbmZpZyxcbik6IENvbXBvc2l0ZUFuaW1hdGlvbiB7XG4gIGNvbnN0IGFueVZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbXB0eUFuaW1hdGlvbixcbiAgICBzdGFydDogbW9ja0FuaW1hdGlvblN0YXJ0KChjYWxsYmFjaz86ID9FbmRDYWxsYmFjayk6IHZvaWQgPT4ge1xuICAgICAgYW55VmFsdWUuc2V0VmFsdWUoY29uZmlnLnRvVmFsdWUpO1xuICAgICAgY2FsbGJhY2s/Lih7ZmluaXNoZWQ6IHRydWV9KTtcbiAgICB9KSxcbiAgfTtcbn07XG5cbmNvbnN0IGRlY2F5ID0gZnVuY3Rpb24gKFxuICB2YWx1ZTogQW5pbWF0ZWRWYWx1ZSB8IEFuaW1hdGVkVmFsdWVYWSB8IEFuaW1hdGVkQ29sb3IsXG4gIGNvbmZpZzogRGVjYXlBbmltYXRpb25Db25maWcsXG4pOiBDb21wb3NpdGVBbmltYXRpb24ge1xuICByZXR1cm4gZW1wdHlBbmltYXRpb247XG59O1xuXG5jb25zdCBzZXF1ZW5jZSA9IGZ1bmN0aW9uIChcbiAgYW5pbWF0aW9uczogQXJyYXk8Q29tcG9zaXRlQW5pbWF0aW9uPixcbik6IENvbXBvc2l0ZUFuaW1hdGlvbiB7XG4gIHJldHVybiBtb2NrQ29tcG9zaXRlQW5pbWF0aW9uKGFuaW1hdGlvbnMpO1xufTtcblxudHlwZSBQYXJhbGxlbENvbmZpZyA9IHtzdG9wVG9nZXRoZXI/OiBib29sZWFuLCAuLi59O1xuY29uc3QgcGFyYWxsZWwgPSBmdW5jdGlvbiAoXG4gIGFuaW1hdGlvbnM6IEFycmF5PENvbXBvc2l0ZUFuaW1hdGlvbj4sXG4gIGNvbmZpZz86ID9QYXJhbGxlbENvbmZpZyxcbik6IENvbXBvc2l0ZUFuaW1hdGlvbiB7XG4gIHJldHVybiBtb2NrQ29tcG9zaXRlQW5pbWF0aW9uKGFuaW1hdGlvbnMpO1xufTtcblxuY29uc3QgZGVsYXkgPSBmdW5jdGlvbiAodGltZTogbnVtYmVyKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgcmV0dXJuIGVtcHR5QW5pbWF0aW9uO1xufTtcblxuY29uc3Qgc3RhZ2dlciA9IGZ1bmN0aW9uIChcbiAgdGltZTogbnVtYmVyLFxuICBhbmltYXRpb25zOiBBcnJheTxDb21wb3NpdGVBbmltYXRpb24+LFxuKTogQ29tcG9zaXRlQW5pbWF0aW9uIHtcbiAgcmV0dXJuIG1vY2tDb21wb3NpdGVBbmltYXRpb24oYW5pbWF0aW9ucyk7XG59O1xuXG50eXBlIExvb3BBbmltYXRpb25Db25maWcgPSB7XG4gIGl0ZXJhdGlvbnM6IG51bWJlcixcbiAgcmVzZXRCZWZvcmVJdGVyYXRpb24/OiBib29sZWFuLFxuICAuLi5cbn07XG5cbmNvbnN0IGxvb3AgPSBmdW5jdGlvbiAoXG4gIGFuaW1hdGlvbjogQ29tcG9zaXRlQW5pbWF0aW9uLFxuICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAge2l0ZXJhdGlvbnMgPSAtMX06IExvb3BBbmltYXRpb25Db25maWcgPSB7fSxcbik6IENvbXBvc2l0ZUFuaW1hdGlvbiB7XG4gIHJldHVybiBlbXB0eUFuaW1hdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIHtBbmltYXRlZE51bWVyaWMgYXMgTnVtZXJpY307XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVmFsdWU6IEFuaW1hdGVkVmFsdWUsXG4gIFZhbHVlWFk6IEFuaW1hdGVkVmFsdWVYWSxcbiAgQ29sb3I6IEFuaW1hdGVkQ29sb3IsXG4gIEludGVycG9sYXRpb246IEFuaW1hdGVkSW50ZXJwb2xhdGlvbixcbiAgTm9kZTogQW5pbWF0ZWROb2RlLFxuICBkZWNheSxcbiAgdGltaW5nLFxuICBzcHJpbmcsXG4gIGFkZDogQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbi5hZGQsXG4gIHN1YnRyYWN0OiBBbmltYXRlZEltcGxlbWVudGF0aW9uLnN1YnRyYWN0LFxuICBkaXZpZGU6IEFuaW1hdGVkSW1wbGVtZW50YXRpb24uZGl2aWRlLFxuICBtdWx0aXBseTogQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbi5tdWx0aXBseSxcbiAgbW9kdWxvOiBBbmltYXRlZEltcGxlbWVudGF0aW9uLm1vZHVsbyxcbiAgZGlmZkNsYW1wOiBBbmltYXRlZEltcGxlbWVudGF0aW9uLmRpZmZDbGFtcCxcbiAgZGVsYXksXG4gIHNlcXVlbmNlLFxuICBwYXJhbGxlbCxcbiAgc3RhZ2dlcixcbiAgbG9vcCxcbiAgZXZlbnQ6IEFuaW1hdGVkSW1wbGVtZW50YXRpb24uZXZlbnQsXG4gIGNyZWF0ZUFuaW1hdGVkQ29tcG9uZW50LFxuICBhdHRhY2hOYXRpdmVFdmVudCxcbiAgZm9ya0V2ZW50OiBBbmltYXRlZEltcGxlbWVudGF0aW9uLmZvcmtFdmVudCxcbiAgdW5mb3JrRXZlbnQ6IEFuaW1hdGVkSW1wbGVtZW50YXRpb24udW5mb3JrRXZlbnQsXG4gIEV2ZW50OiBBbmltYXRlZEV2ZW50LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7QW5pbWF0ZWRDb21wb25lbnRUeXBlfSBmcm9tICcuLi9jcmVhdGVBbmltYXRlZENvbXBvbmVudCc7XG5cbmltcG9ydCBGbGF0TGlzdCBmcm9tICcuLi8uLi9MaXN0cy9GbGF0TGlzdCc7XG5pbXBvcnQgY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQgZnJvbSAnLi4vY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCAoY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQoRmxhdExpc3QpOiBBbmltYXRlZENvbXBvbmVudFR5cGU8XG4gIFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIEZsYXRMaXN0PixcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgRmxhdExpc3Q+LFxuPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZW9mIFNjcm9sbFZpZXdOYXRpdmVDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50cy9TY3JvbGxWaWV3L1Njcm9sbFZpZXdOYXRpdmVDb21wb25lbnQnO1xuaW1wb3J0IHR5cGUge1ZpZXdTdHlsZVByb3B9IGZyb20gJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7XG4gIFJlbmRlckl0ZW1Qcm9wcyxcbiAgUmVuZGVySXRlbVR5cGUsXG4gIFZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlyLFxuICBWaWV3VG9rZW4sXG59IGZyb20gJ0ByZWFjdC1uYXRpdmUvdmlydHVhbGl6ZWQtbGlzdHMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9mZWF0dXJlZmxhZ3MvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MnO1xuaW1wb3J0IHt0eXBlIFNjcm9sbFJlc3BvbmRlclR5cGV9IGZyb20gJy4uL0NvbXBvbmVudHMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3JztcbmltcG9ydCB7XG4gIFZpcnR1YWxpemVkTGlzdCxcbiAga2V5RXh0cmFjdG9yIGFzIGRlZmF1bHRLZXlFeHRyYWN0b3IsXG59IGZyb20gJ0ByZWFjdC1uYXRpdmUvdmlydHVhbGl6ZWQtbGlzdHMnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuXG5jb25zdCBWaWV3ID0gcmVxdWlyZSgnLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnKTtcbmNvbnN0IFN0eWxlU2hlZXQgPSByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnKTtcbmNvbnN0IGRlZXBEaWZmZXIgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvZGlmZmVyL2RlZXBEaWZmZXInKTtcbmNvbnN0IFBsYXRmb3JtID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJyk7XG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudHlwZSBSZXF1aXJlZFByb3BzPEl0ZW1UPiA9IHt8XG4gIC8qKlxuICAgKiBBbiBhcnJheSAob3IgYXJyYXktbGlrZSBsaXN0KSBvZiBpdGVtcyB0byByZW5kZXIuIE90aGVyIGRhdGEgdHlwZXMgY2FuIGJlXG4gICAqIHVzZWQgYnkgdGFyZ2V0aW5nIFZpcnR1YWxpemVkTGlzdCBkaXJlY3RseS5cbiAgICovXG4gIGRhdGE6ID8kUmVhZE9ubHk8JEFycmF5TGlrZTxJdGVtVD4+LFxufH07XG50eXBlIE9wdGlvbmFsUHJvcHM8SXRlbVQ+ID0ge3xcbiAgLyoqXG4gICAqIFRha2VzIGFuIGl0ZW0gZnJvbSBgZGF0YWAgYW5kIHJlbmRlcnMgaXQgaW50byB0aGUgbGlzdC4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIDxGbGF0TGlzdFxuICAgKiAgICAgICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50PXtQbGF0Zm9ybS5PUyAhPT0gJ2FuZHJvaWQnICYmICh7aGlnaGxpZ2h0ZWR9KSA9PiAoXG4gICAqICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZS5zZXBhcmF0b3IsIGhpZ2hsaWdodGVkICYmIHttYXJnaW5MZWZ0OiAwfV19IC8+XG4gICAqICAgICAgICl9XG4gICAqICAgICAgIGRhdGE9e1t7dGl0bGU6ICdUaXRsZSBUZXh0Jywga2V5OiAnaXRlbTEnfV19XG4gICAqICAgICAgIHJlbmRlckl0ZW09eyh7aXRlbSwgc2VwYXJhdG9yc30pID0+IChcbiAgICogICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAqICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLl9vblByZXNzKGl0ZW0pfVxuICAgKiAgICAgICAgICAgb25TaG93VW5kZXJsYXk9e3NlcGFyYXRvcnMuaGlnaGxpZ2h0fVxuICAgKiAgICAgICAgICAgb25IaWRlVW5kZXJsYXk9e3NlcGFyYXRvcnMudW5oaWdobGlnaHR9PlxuICAgKiAgICAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSd9fT5cbiAgICogICAgICAgICAgICAgPFRleHQ+e2l0ZW0udGl0bGV9PC9UZXh0PlxuICAgKiAgICAgICAgICAgPC9WaWV3PlxuICAgKiAgICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgKiAgICAgICApfVxuICAgKiAgICAgLz5cbiAgICpcbiAgICogUHJvdmlkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBsaWtlIGBpbmRleGAgaWYgeW91IG5lZWQgaXQsIGFzIHdlbGwgYXMgYSBtb3JlIGdlbmVyaWNcbiAgICogYHNlcGFyYXRvcnMudXBkYXRlUHJvcHNgIGZ1bmN0aW9uIHdoaWNoIGxldCdzIHlvdSBzZXQgd2hhdGV2ZXIgcHJvcHMgeW91IHdhbnQgdG8gY2hhbmdlIHRoZVxuICAgKiByZW5kZXJpbmcgb2YgZWl0aGVyIHRoZSBsZWFkaW5nIHNlcGFyYXRvciBvciB0cmFpbGluZyBzZXBhcmF0b3IgaW4gY2FzZSB0aGUgbW9yZSBjb21tb25cbiAgICogYGhpZ2hsaWdodGAgYW5kIGB1bmhpZ2hsaWdodGAgKHdoaWNoIHNldCB0aGUgYGhpZ2hsaWdodGVkOiBib29sZWFuYCBwcm9wKSBhcmUgaW5zdWZmaWNpZW50IGZvclxuICAgKiB5b3VyIHVzZS1jYXNlLlxuICAgKi9cbiAgcmVuZGVySXRlbT86ID9SZW5kZXJJdGVtVHlwZTxJdGVtVD4sXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBzdHlsZSBmb3IgbXVsdGktaXRlbSByb3dzIGdlbmVyYXRlZCB3aGVuIG51bUNvbHVtbnMgPiAxLlxuICAgKi9cbiAgY29sdW1uV3JhcHBlclN0eWxlPzogVmlld1N0eWxlUHJvcCxcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IGZvciB0ZWxsaW5nIHRoZSBsaXN0IHRvIHJlLXJlbmRlciAoc2luY2UgaXQgaW1wbGVtZW50cyBgUHVyZUNvbXBvbmVudGApLiBJZlxuICAgKiBhbnkgb2YgeW91ciBgcmVuZGVySXRlbWAsIEhlYWRlciwgRm9vdGVyLCBldGMuIGZ1bmN0aW9ucyBkZXBlbmQgb24gYW55dGhpbmcgb3V0c2lkZSBvZiB0aGVcbiAgICogYGRhdGFgIHByb3AsIHN0aWNrIGl0IGhlcmUgYW5kIHRyZWF0IGl0IGltbXV0YWJseS5cbiAgICovXG4gIGV4dHJhRGF0YT86IGFueSxcbiAgLyoqXG4gICAqIGBnZXRJdGVtTGF5b3V0YCBpcyBhbiBvcHRpb25hbCBvcHRpbWl6YXRpb25zIHRoYXQgbGV0IHVzIHNraXAgbWVhc3VyZW1lbnQgb2YgZHluYW1pYyBjb250ZW50IGlmXG4gICAqIHlvdSBrbm93IHRoZSBoZWlnaHQgb2YgaXRlbXMgYSBwcmlvcmkuIGBnZXRJdGVtTGF5b3V0YCBpcyB0aGUgbW9zdCBlZmZpY2llbnQsIGFuZCBpcyBlYXN5IHRvXG4gICAqIHVzZSBpZiB5b3UgaGF2ZSBmaXhlZCBoZWlnaHQgaXRlbXMsIGZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgICAgZ2V0SXRlbUxheW91dD17KGRhdGEsIGluZGV4KSA9PiAoXG4gICAqICAgICAgIHtsZW5ndGg6IElURU1fSEVJR0hULCBvZmZzZXQ6IElURU1fSEVJR0hUICogaW5kZXgsIGluZGV4fVxuICAgKiAgICAgKX1cbiAgICpcbiAgICogQWRkaW5nIGBnZXRJdGVtTGF5b3V0YCBjYW4gYmUgYSBncmVhdCBwZXJmb3JtYW5jZSBib29zdCBmb3IgbGlzdHMgb2Ygc2V2ZXJhbCBodW5kcmVkIGl0ZW1zLlxuICAgKiBSZW1lbWJlciB0byBpbmNsdWRlIHNlcGFyYXRvciBsZW5ndGggKGhlaWdodCBvciB3aWR0aCkgaW4geW91ciBvZmZzZXQgY2FsY3VsYXRpb24gaWYgeW91XG4gICAqIHNwZWNpZnkgYEl0ZW1TZXBhcmF0b3JDb21wb25lbnRgLlxuICAgKi9cbiAgZ2V0SXRlbUxheW91dD86IChcbiAgICBkYXRhOiA/JFJlYWRPbmx5PCRBcnJheUxpa2U8SXRlbVQ+PixcbiAgICBpbmRleDogbnVtYmVyLFxuICApID0+IHtcbiAgICBsZW5ndGg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIC4uLlxuICB9LFxuICAvKipcbiAgICogSWYgdHJ1ZSwgcmVuZGVycyBpdGVtcyBuZXh0IHRvIGVhY2ggb3RoZXIgaG9yaXpvbnRhbGx5IGluc3RlYWQgb2Ygc3RhY2tlZCB2ZXJ0aWNhbGx5LlxuICAgKi9cbiAgaG9yaXpvbnRhbD86ID9ib29sZWFuLFxuICAvKipcbiAgICogSG93IG1hbnkgaXRlbXMgdG8gcmVuZGVyIGluIHRoZSBpbml0aWFsIGJhdGNoLiBUaGlzIHNob3VsZCBiZSBlbm91Z2ggdG8gZmlsbCB0aGUgc2NyZWVuIGJ1dCBub3RcbiAgICogbXVjaCBtb3JlLiBOb3RlIHRoZXNlIGl0ZW1zIHdpbGwgbmV2ZXIgYmUgdW5tb3VudGVkIGFzIHBhcnQgb2YgdGhlIHdpbmRvd2VkIHJlbmRlcmluZyBpbiBvcmRlclxuICAgKiB0byBpbXByb3ZlIHBlcmNlaXZlZCBwZXJmb3JtYW5jZSBvZiBzY3JvbGwtdG8tdG9wIGFjdGlvbnMuXG4gICAqL1xuICBpbml0aWFsTnVtVG9SZW5kZXI/OiA/bnVtYmVyLFxuICAvKipcbiAgICogSW5zdGVhZCBvZiBzdGFydGluZyBhdCB0aGUgdG9wIHdpdGggdGhlIGZpcnN0IGl0ZW0sIHN0YXJ0IGF0IGBpbml0aWFsU2Nyb2xsSW5kZXhgLiBUaGlzXG4gICAqIGRpc2FibGVzIHRoZSBcInNjcm9sbCB0byB0b3BcIiBvcHRpbWl6YXRpb24gdGhhdCBrZWVwcyB0aGUgZmlyc3QgYGluaXRpYWxOdW1Ub1JlbmRlcmAgaXRlbXNcbiAgICogYWx3YXlzIHJlbmRlcmVkIGFuZCBpbW1lZGlhdGVseSByZW5kZXJzIHRoZSBpdGVtcyBzdGFydGluZyBhdCB0aGlzIGluaXRpYWwgaW5kZXguIFJlcXVpcmVzXG4gICAqIGBnZXRJdGVtTGF5b3V0YCB0byBiZSBpbXBsZW1lbnRlZC5cbiAgICovXG4gIGluaXRpYWxTY3JvbGxJbmRleD86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBSZXZlcnNlcyB0aGUgZGlyZWN0aW9uIG9mIHNjcm9sbC4gVXNlcyBzY2FsZSB0cmFuc2Zvcm1zIG9mIC0xLlxuICAgKi9cbiAgaW52ZXJ0ZWQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFVzZWQgdG8gZXh0cmFjdCBhIHVuaXF1ZSBrZXkgZm9yIGEgZ2l2ZW4gaXRlbSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiBLZXkgaXMgdXNlZCBmb3IgY2FjaGluZ1xuICAgKiBhbmQgYXMgdGhlIHJlYWN0IGtleSB0byB0cmFjayBpdGVtIHJlLW9yZGVyaW5nLiBUaGUgZGVmYXVsdCBleHRyYWN0b3IgY2hlY2tzIGBpdGVtLmtleWAsIHRoZW5cbiAgICogZmFsbHMgYmFjayB0byB1c2luZyB0aGUgaW5kZXgsIGxpa2UgUmVhY3QgZG9lcy5cbiAgICovXG4gIGtleUV4dHJhY3Rvcj86ID8oaXRlbTogSXRlbVQsIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyxcbiAgLyoqXG4gICAqIE11bHRpcGxlIGNvbHVtbnMgY2FuIG9ubHkgYmUgcmVuZGVyZWQgd2l0aCBgaG9yaXpvbnRhbD17ZmFsc2V9YCBhbmQgd2lsbCB6aWctemFnIGxpa2UgYVxuICAgKiBgZmxleFdyYXBgIGxheW91dC4gSXRlbXMgc2hvdWxkIGFsbCBiZSB0aGUgc2FtZSBoZWlnaHQgLSBtYXNvbnJ5IGxheW91dHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqL1xuICBudW1Db2x1bW5zPzogbnVtYmVyLFxuICAvKipcbiAgICogTm90ZTogbWF5IGhhdmUgYnVncyAobWlzc2luZyBjb250ZW50KSBpbiBzb21lIGNpcmN1bXN0YW5jZXMgLSB1c2UgYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogVGhpcyBtYXkgaW1wcm92ZSBzY3JvbGwgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIGxpc3RzLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlIGZvciBBbmRyb2lkLlxuICAgKi9cbiAgcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzPzogYm9vbGVhbixcbiAgLyoqXG4gICAqIFNlZSBgU2Nyb2xsVmlld2AgZm9yIGZsb3cgdHlwZSBhbmQgZnVydGhlciBkb2N1bWVudGF0aW9uLlxuICAgKi9cbiAgZmFkaW5nRWRnZUxlbmd0aD86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBFbmFibGUgYW4gb3B0aW1pemF0aW9uIHRvIG1lbW9pemUgdGhlIGl0ZW0gcmVuZGVyZXIgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZXJlbmRlcnMuXG4gICAqL1xuICBzdHJpY3RNb2RlPzogYm9vbGVhbixcbnx9O1xuXG4vKipcbiAqIERlZmF1bHQgUHJvcHMgSGVscGVyIEZ1bmN0aW9uc1xuICogVXNlIHRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZGVmYXVsdCB2YWx1ZXNcbiAqL1xuXG4vLyByZW1vdmVDbGlwcGVkU3Vidmlld3NPckRlZmF1bHQodGhpcy5wcm9wcy5yZW1vdmVDbGlwcGVkU3Vidmlld3MpXG5mdW5jdGlvbiByZW1vdmVDbGlwcGVkU3Vidmlld3NPckRlZmF1bHQocmVtb3ZlQ2xpcHBlZFN1YnZpZXdzOiA/Ym9vbGVhbikge1xuICBpZiAoUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3Muc2hvdWxkVXNlUmVtb3ZlQ2xpcHBlZFN1YnZpZXdzQXNEZWZhdWx0T25JT1MoKSkge1xuICAgIHJldHVybiByZW1vdmVDbGlwcGVkU3Vidmlld3MgPz8gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzID8/IFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCc7XG4gIH1cbn1cblxuLy8gbnVtQ29sdW1uc09yRGVmYXVsdCh0aGlzLnByb3BzLm51bUNvbHVtbnMpXG5mdW5jdGlvbiBudW1Db2x1bW5zT3JEZWZhdWx0KG51bUNvbHVtbnM6ID9udW1iZXIpIHtcbiAgcmV0dXJuIG51bUNvbHVtbnMgPz8gMTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoZGF0YTogbWl4ZWQpOiBib29sZWFuIHtcbiAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS11c2VdXG4gIHJldHVybiB0eXBlb2YgT2JqZWN0KGRhdGEpLmxlbmd0aCA9PT0gJ251bWJlcic7XG59XG5cbnR5cGUgRmxhdExpc3RQcm9wczxJdGVtVD4gPSB7fFxuICAuLi5SZXF1aXJlZFByb3BzPEl0ZW1UPixcbiAgLi4uT3B0aW9uYWxQcm9wczxJdGVtVD4sXG58fTtcblxudHlwZSBWaXJ0dWFsaXplZExpc3RQcm9wcyA9IFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFZpcnR1YWxpemVkTGlzdD47XG5cbmV4cG9ydCB0eXBlIFByb3BzPEl0ZW1UPiA9IHtcbiAgLi4uJERpZmY8XG4gICAgVmlydHVhbGl6ZWRMaXN0UHJvcHMsXG4gICAge1xuICAgICAgZ2V0SXRlbTogJFByb3BlcnR5VHlwZTxWaXJ0dWFsaXplZExpc3RQcm9wcywgJ2dldEl0ZW0nPixcbiAgICAgIGdldEl0ZW1Db3VudDogJFByb3BlcnR5VHlwZTxWaXJ0dWFsaXplZExpc3RQcm9wcywgJ2dldEl0ZW1Db3VudCc+LFxuICAgICAgZ2V0SXRlbUxheW91dDogJFByb3BlcnR5VHlwZTxWaXJ0dWFsaXplZExpc3RQcm9wcywgJ2dldEl0ZW1MYXlvdXQnPixcbiAgICAgIHJlbmRlckl0ZW06ICRQcm9wZXJ0eVR5cGU8VmlydHVhbGl6ZWRMaXN0UHJvcHMsICdyZW5kZXJJdGVtJz4sXG4gICAgICBrZXlFeHRyYWN0b3I6ICRQcm9wZXJ0eVR5cGU8VmlydHVhbGl6ZWRMaXN0UHJvcHMsICdrZXlFeHRyYWN0b3InPixcbiAgICAgIC4uLlxuICAgIH0sXG4gID4sXG4gIC4uLkZsYXRMaXN0UHJvcHM8SXRlbVQ+LFxuICAuLi5cbn07XG5cbi8qKlxuICogQSBwZXJmb3JtYW50IGludGVyZmFjZSBmb3IgcmVuZGVyaW5nIHNpbXBsZSwgZmxhdCBsaXN0cywgc3VwcG9ydGluZyB0aGUgbW9zdCBoYW5keSBmZWF0dXJlczpcbiAqXG4gKiAgLSBGdWxseSBjcm9zcy1wbGF0Zm9ybS5cbiAqICAtIE9wdGlvbmFsIGhvcml6b250YWwgbW9kZS5cbiAqICAtIENvbmZpZ3VyYWJsZSB2aWV3YWJpbGl0eSBjYWxsYmFja3MuXG4gKiAgLSBIZWFkZXIgc3VwcG9ydC5cbiAqICAtIEZvb3RlciBzdXBwb3J0LlxuICogIC0gU2VwYXJhdG9yIHN1cHBvcnQuXG4gKiAgLSBQdWxsIHRvIFJlZnJlc2guXG4gKiAgLSBTY3JvbGwgbG9hZGluZy5cbiAqICAtIFNjcm9sbFRvSW5kZXggc3VwcG9ydC5cbiAqXG4gKiBJZiB5b3UgbmVlZCBzZWN0aW9uIHN1cHBvcnQsIHVzZSBbYDxTZWN0aW9uTGlzdD5gXShkb2NzL3NlY3Rpb25saXN0Lmh0bWwpLlxuICpcbiAqIE1pbmltYWwgRXhhbXBsZTpcbiAqXG4gKiAgICAgPEZsYXRMaXN0XG4gKiAgICAgICBkYXRhPXtbe2tleTogJ2EnfSwge2tleTogJ2InfV19XG4gKiAgICAgICByZW5kZXJJdGVtPXsoe2l0ZW19KSA9PiA8VGV4dD57aXRlbS5rZXl9PC9UZXh0Pn1cbiAqICAgICAvPlxuICpcbiAqIE1vcmUgY29tcGxleCwgbXVsdGktc2VsZWN0IGV4YW1wbGUgZGVtb25zdHJhdGluZyBgUHVyZUNvbXBvbmVudGAgdXNhZ2UgZm9yIHBlcmYgb3B0aW1pemF0aW9uIGFuZCBhdm9pZGluZyBidWdzLlxuICpcbiAqIC0gQnkgYmluZGluZyB0aGUgYG9uUHJlc3NJdGVtYCBoYW5kbGVyLCB0aGUgcHJvcHMgd2lsbCByZW1haW4gYD09PWAgYW5kIGBQdXJlQ29tcG9uZW50YCB3aWxsXG4gKiAgIHByZXZlbnQgd2FzdGVmdWwgcmUtcmVuZGVycyB1bmxlc3MgdGhlIGFjdHVhbCBgaWRgLCBgc2VsZWN0ZWRgLCBvciBgdGl0bGVgIHByb3BzIGNoYW5nZSwgZXZlblxuICogICBpZiB0aGUgY29tcG9uZW50cyByZW5kZXJlZCBpbiBgTXlMaXN0SXRlbWAgZGlkIG5vdCBoYXZlIHN1Y2ggb3B0aW1pemF0aW9ucy5cbiAqIC0gQnkgcGFzc2luZyBgZXh0cmFEYXRhPXt0aGlzLnN0YXRlfWAgdG8gYEZsYXRMaXN0YCB3ZSBtYWtlIHN1cmUgYEZsYXRMaXN0YCBpdHNlbGYgd2lsbCByZS1yZW5kZXJcbiAqICAgd2hlbiB0aGUgYHN0YXRlLnNlbGVjdGVkYCBjaGFuZ2VzLiBXaXRob3V0IHNldHRpbmcgdGhpcyBwcm9wLCBgRmxhdExpc3RgIHdvdWxkIG5vdCBrbm93IGl0XG4gKiAgIG5lZWRzIHRvIHJlLXJlbmRlciBhbnkgaXRlbXMgYmVjYXVzZSBpdCBpcyBhbHNvIGEgYFB1cmVDb21wb25lbnRgIGFuZCB0aGUgcHJvcCBjb21wYXJpc29uIHdpbGxcbiAqICAgbm90IHNob3cgYW55IGNoYW5nZXMuXG4gKiAtIGBrZXlFeHRyYWN0b3JgIHRlbGxzIHRoZSBsaXN0IHRvIHVzZSB0aGUgYGlkYHMgZm9yIHRoZSByZWFjdCBrZXlzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGtleWAgcHJvcGVydHkuXG4gKlxuICpcbiAqICAgICBjbGFzcyBNeUxpc3RJdGVtIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gKiAgICAgICBfb25QcmVzcyA9ICgpID0+IHtcbiAqICAgICAgICAgdGhpcy5wcm9wcy5vblByZXNzSXRlbSh0aGlzLnByb3BzLmlkKTtcbiAqICAgICAgIH07XG4gKlxuICogICAgICAgcmVuZGVyKCkge1xuICogICAgICAgICBjb25zdCB0ZXh0Q29sb3IgPSB0aGlzLnByb3BzLnNlbGVjdGVkID8gXCJyZWRcIiA6IFwiYmxhY2tcIjtcbiAqICAgICAgICAgcmV0dXJuIChcbiAqICAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eSBvblByZXNzPXt0aGlzLl9vblByZXNzfT5cbiAqICAgICAgICAgICAgIDxWaWV3PlxuICogICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17eyBjb2xvcjogdGV4dENvbG9yIH19PlxuICogICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxuICogICAgICAgICAgICAgICA8L1RleHQ+XG4gKiAgICAgICAgICAgICA8L1ZpZXc+XG4gKiAgICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICogICAgICAgICApO1xuICogICAgICAgfVxuICogICAgIH1cbiAqXG4gKiAgICAgY2xhc3MgTXVsdGlTZWxlY3RMaXN0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gKiAgICAgICBzdGF0ZSA9IHtzZWxlY3RlZDogKG5ldyBNYXAoKTogTWFwPHN0cmluZywgYm9vbGVhbj4pfTtcbiAqXG4gKiAgICAgICBfa2V5RXh0cmFjdG9yID0gKGl0ZW0sIGluZGV4KSA9PiBpdGVtLmlkO1xuICpcbiAqICAgICAgIF9vblByZXNzSXRlbSA9IChpZDogc3RyaW5nKSA9PiB7XG4gKiAgICAgICAgIC8vIHVwZGF0ZXIgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQgZm9yIHRyYW5zYWN0aW9uYWwgdXBkYXRlc1xuICogICAgICAgICB0aGlzLnNldFN0YXRlKChzdGF0ZSkgPT4ge1xuICogICAgICAgICAgIC8vIGNvcHkgdGhlIG1hcCByYXRoZXIgdGhhbiBtb2RpZnlpbmcgc3RhdGUuXG4gKiAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgTWFwKHN0YXRlLnNlbGVjdGVkKTtcbiAqICAgICAgICAgICBzZWxlY3RlZC5zZXQoaWQsICFzZWxlY3RlZC5nZXQoaWQpKTsgLy8gdG9nZ2xlXG4gKiAgICAgICAgICAgcmV0dXJuIHtzZWxlY3RlZH07XG4gKiAgICAgICAgIH0pO1xuICogICAgICAgfTtcbiAqXG4gKiAgICAgICBfcmVuZGVySXRlbSA9ICh7aXRlbX0pID0+IChcbiAqICAgICAgICAgPE15TGlzdEl0ZW1cbiAqICAgICAgICAgICBpZD17aXRlbS5pZH1cbiAqICAgICAgICAgICBvblByZXNzSXRlbT17dGhpcy5fb25QcmVzc0l0ZW19XG4gKiAgICAgICAgICAgc2VsZWN0ZWQ9eyEhdGhpcy5zdGF0ZS5zZWxlY3RlZC5nZXQoaXRlbS5pZCl9XG4gKiAgICAgICAgICAgdGl0bGU9e2l0ZW0udGl0bGV9XG4gKiAgICAgICAgIC8+XG4gKiAgICAgICApO1xuICpcbiAqICAgICAgIHJlbmRlcigpIHtcbiAqICAgICAgICAgcmV0dXJuIChcbiAqICAgICAgICAgICA8RmxhdExpc3RcbiAqICAgICAgICAgICAgIGRhdGE9e3RoaXMucHJvcHMuZGF0YX1cbiAqICAgICAgICAgICAgIGV4dHJhRGF0YT17dGhpcy5zdGF0ZX1cbiAqICAgICAgICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy5fa2V5RXh0cmFjdG9yfVxuICogICAgICAgICAgICAgcmVuZGVySXRlbT17dGhpcy5fcmVuZGVySXRlbX1cbiAqICAgICAgICAgICAvPlxuICogICAgICAgICApO1xuICogICAgICAgfVxuICogICAgIH1cbiAqXG4gKiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgW2A8VmlydHVhbGl6ZWRMaXN0PmBdKGRvY3MvdmlydHVhbGl6ZWRsaXN0Lmh0bWwpLFxuICogYW5kIHRodXMgaW5oZXJpdHMgaXRzIHByb3BzIChhcyB3ZWxsIGFzIHRob3NlIG9mIGBTY3JvbGxWaWV3YCkgdGhhdCBhcmVuJ3QgZXhwbGljaXRseSBsaXN0ZWRcbiAqIGhlcmUsIGFsb25nIHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuICpcbiAqIC0gSW50ZXJuYWwgc3RhdGUgaXMgbm90IHByZXNlcnZlZCB3aGVuIGNvbnRlbnQgc2Nyb2xscyBvdXQgb2YgdGhlIHJlbmRlciB3aW5kb3cuIE1ha2Ugc3VyZSBhbGxcbiAqICAgeW91ciBkYXRhIGlzIGNhcHR1cmVkIGluIHRoZSBpdGVtIGRhdGEgb3IgZXh0ZXJuYWwgc3RvcmVzIGxpa2UgRmx1eCwgUmVkdXgsIG9yIFJlbGF5LlxuICogLSBUaGlzIGlzIGEgYFB1cmVDb21wb25lbnRgIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBub3QgcmUtcmVuZGVyIGlmIGBwcm9wc2AgcmVtYWluIHNoYWxsb3ctXG4gKiAgIGVxdWFsLiBNYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIHlvdXIgYHJlbmRlckl0ZW1gIGZ1bmN0aW9uIGRlcGVuZHMgb24gaXMgcGFzc2VkIGFzIGEgcHJvcFxuICogICAoZS5nLiBgZXh0cmFEYXRhYCkgdGhhdCBpcyBub3QgYD09PWAgYWZ0ZXIgdXBkYXRlcywgb3RoZXJ3aXNlIHlvdXIgVUkgbWF5IG5vdCB1cGRhdGUgb25cbiAqICAgY2hhbmdlcy4gVGhpcyBpbmNsdWRlcyB0aGUgYGRhdGFgIHByb3AgYW5kIHBhcmVudCBjb21wb25lbnQgc3RhdGUuXG4gKiAtIEluIG9yZGVyIHRvIGNvbnN0cmFpbiBtZW1vcnkgYW5kIGVuYWJsZSBzbW9vdGggc2Nyb2xsaW5nLCBjb250ZW50IGlzIHJlbmRlcmVkIGFzeW5jaHJvbm91c2x5XG4gKiAgIG9mZnNjcmVlbi4gVGhpcyBtZWFucyBpdCdzIHBvc3NpYmxlIHRvIHNjcm9sbCBmYXN0ZXIgdGhhbiB0aGUgZmlsbCByYXRlIGFuZHMgbW9tZW50YXJpbHkgc2VlXG4gKiAgIGJsYW5rIGNvbnRlbnQuIFRoaXMgaXMgYSB0cmFkZW9mZiB0aGF0IGNhbiBiZSBhZGp1c3RlZCB0byBzdWl0IHRoZSBuZWVkcyBvZiBlYWNoIGFwcGxpY2F0aW9uLFxuICogICBhbmQgd2UgYXJlIHdvcmtpbmcgb24gaW1wcm92aW5nIGl0IGJlaGluZCB0aGUgc2NlbmVzLlxuICogLSBCeSBkZWZhdWx0LCB0aGUgbGlzdCBsb29rcyBmb3IgYSBga2V5YCBwcm9wIG9uIGVhY2ggaXRlbSBhbmQgdXNlcyB0aGF0IGZvciB0aGUgUmVhY3Qga2V5LlxuICogICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHByb3ZpZGUgYSBjdXN0b20gYGtleUV4dHJhY3RvcmAgcHJvcC5cbiAqXG4gKiBBbHNvIGluaGVyaXRzIFtTY3JvbGxWaWV3IFByb3BzXShkb2NzL3Njcm9sbHZpZXcuaHRtbCNwcm9wcyksIHVubGVzcyBpdCBpcyBuZXN0ZWQgaW4gYW5vdGhlciBGbGF0TGlzdCBvZiBzYW1lIG9yaWVudGF0aW9uLlxuICovXG5jbGFzcyBGbGF0TGlzdDxJdGVtVD4gZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPEl0ZW1UPiwgdm9pZD4ge1xuICBwcm9wczogUHJvcHM8SXRlbVQ+O1xuICAvKipcbiAgICogU2Nyb2xscyB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50LiBNYXkgYmUgamFua3kgd2l0aG91dCBgZ2V0SXRlbUxheW91dGAgcHJvcC5cbiAgICovXG4gIHNjcm9sbFRvRW5kKHBhcmFtcz86ID97YW5pbWF0ZWQ/OiA/Ym9vbGVhbiwgLi4ufSkge1xuICAgIGlmICh0aGlzLl9saXN0UmVmKSB7XG4gICAgICB0aGlzLl9saXN0UmVmLnNjcm9sbFRvRW5kKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdG8gdGhlIGl0ZW0gYXQgdGhlIHNwZWNpZmllZCBpbmRleCBzdWNoIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgdmlld2FibGUgYXJlYVxuICAgKiBzdWNoIHRoYXQgYHZpZXdQb3NpdGlvbmAgMCBwbGFjZXMgaXQgYXQgdGhlIHRvcCwgMSBhdCB0aGUgYm90dG9tLCBhbmQgMC41IGNlbnRlcmVkIGluIHRoZVxuICAgKiBtaWRkbGUuIGB2aWV3T2Zmc2V0YCBpcyBhIGZpeGVkIG51bWJlciBvZiBwaXhlbHMgdG8gb2Zmc2V0IHRoZSBmaW5hbCB0YXJnZXQgcG9zaXRpb24uXG4gICAqXG4gICAqIE5vdGU6IGNhbm5vdCBzY3JvbGwgdG8gbG9jYXRpb25zIG91dHNpZGUgdGhlIHJlbmRlciB3aW5kb3cgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZVxuICAgKiBgZ2V0SXRlbUxheW91dGAgcHJvcC5cbiAgICovXG4gIHNjcm9sbFRvSW5kZXgocGFyYW1zOiB7XG4gICAgYW5pbWF0ZWQ/OiA/Ym9vbGVhbixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHZpZXdPZmZzZXQ/OiBudW1iZXIsXG4gICAgdmlld1Bvc2l0aW9uPzogbnVtYmVyLFxuICAgIC4uLlxuICB9KSB7XG4gICAgaWYgKHRoaXMuX2xpc3RSZWYpIHtcbiAgICAgIHRoaXMuX2xpc3RSZWYuc2Nyb2xsVG9JbmRleChwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBsaW5lYXIgc2NhbiB0aHJvdWdoIGRhdGEgLSB1c2UgYHNjcm9sbFRvSW5kZXhgIGluc3RlYWQgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIE5vdGU6IGNhbm5vdCBzY3JvbGwgdG8gbG9jYXRpb25zIG91dHNpZGUgdGhlIHJlbmRlciB3aW5kb3cgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZVxuICAgKiBgZ2V0SXRlbUxheW91dGAgcHJvcC5cbiAgICovXG4gIHNjcm9sbFRvSXRlbShwYXJhbXM6IHtcbiAgICBhbmltYXRlZD86ID9ib29sZWFuLFxuICAgIGl0ZW06IEl0ZW1ULFxuICAgIHZpZXdPZmZzZXQ/OiBudW1iZXIsXG4gICAgdmlld1Bvc2l0aW9uPzogbnVtYmVyLFxuICAgIC4uLlxuICB9KSB7XG4gICAgaWYgKHRoaXMuX2xpc3RSZWYpIHtcbiAgICAgIHRoaXMuX2xpc3RSZWYuc2Nyb2xsVG9JdGVtKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byBhIHNwZWNpZmljIGNvbnRlbnQgcGl4ZWwgb2Zmc2V0IGluIHRoZSBsaXN0LlxuICAgKlxuICAgKiBDaGVjayBvdXQgW3Njcm9sbFRvT2Zmc2V0XShkb2NzL3ZpcnR1YWxpemVkbGlzdC5odG1sI3Njcm9sbHRvb2Zmc2V0KSBvZiBWaXJ0dWFsaXplZExpc3RcbiAgICovXG4gIHNjcm9sbFRvT2Zmc2V0KHBhcmFtczoge2FuaW1hdGVkPzogP2Jvb2xlYW4sIG9mZnNldDogbnVtYmVyLCAuLi59KSB7XG4gICAgaWYgKHRoaXMuX2xpc3RSZWYpIHtcbiAgICAgIHRoaXMuX2xpc3RSZWYuc2Nyb2xsVG9PZmZzZXQocGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVsbHMgdGhlIGxpc3QgYW4gaW50ZXJhY3Rpb24gaGFzIG9jY3VycmVkLCB3aGljaCBzaG91bGQgdHJpZ2dlciB2aWV3YWJpbGl0eSBjYWxjdWxhdGlvbnMsIGUuZy5cbiAgICogaWYgYHdhaXRGb3JJbnRlcmFjdGlvbnNgIGlzIHRydWUgYW5kIHRoZSB1c2VyIGhhcyBub3Qgc2Nyb2xsZWQuIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBieVxuICAgKiB0YXBzIG9uIGl0ZW1zIG9yIGJ5IG5hdmlnYXRpb24gYWN0aW9ucy5cbiAgICovXG4gIHJlY29yZEludGVyYWN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saXN0UmVmKSB7XG4gICAgICB0aGlzLl9saXN0UmVmLnJlY29yZEludGVyYWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBzY3JvbGwgaW5kaWNhdG9ycyBtb21lbnRhcmlseS5cbiAgICpcbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgZmxhc2hTY3JvbGxJbmRpY2F0b3JzKCkge1xuICAgIGlmICh0aGlzLl9saXN0UmVmKSB7XG4gICAgICB0aGlzLl9saXN0UmVmLmZsYXNoU2Nyb2xsSW5kaWNhdG9ycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGhhbmRsZSB0byB0aGUgdW5kZXJseWluZyBzY3JvbGwgcmVzcG9uZGVyLlxuICAgKi9cbiAgZ2V0U2Nyb2xsUmVzcG9uZGVyKCk6ID9TY3JvbGxSZXNwb25kZXJUeXBlIHtcbiAgICBpZiAodGhpcy5fbGlzdFJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RSZWYuZ2V0U2Nyb2xsUmVzcG9uZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGhvc3QgY29tcG9uZW50XG4gICAqL1xuICBnZXROYXRpdmVTY3JvbGxSZWYoKTpcbiAgICB8ID9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBWaWV3PlxuICAgIHwgP1JlYWN0LkVsZW1lbnRSZWY8U2Nyb2xsVmlld05hdGl2ZUNvbXBvbmVudD4ge1xuICAgIGlmICh0aGlzLl9saXN0UmVmKSB7XG4gICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIFN1cHByZXNzZXMgZXJyb3JzIGZvdW5kIHdoZW4gZml4aW5nXG4gICAgICAgKiBUZXh0SW5wdXQgdHlwaW5nICovXG4gICAgICByZXR1cm4gdGhpcy5fbGlzdFJlZi5nZXRTY3JvbGxSZWYoKTtcbiAgICB9XG4gIH1cblxuICBnZXRTY3JvbGxhYmxlTm9kZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLl9saXN0UmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdFJlZi5nZXRTY3JvbGxhYmxlTm9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldE5hdGl2ZVByb3BzKHByb3BzOiB7W3N0cmluZ106IG1peGVkLCAuLi59KSB7XG4gICAgaWYgKHRoaXMuX2xpc3RSZWYpIHtcbiAgICAgIHRoaXMuX2xpc3RSZWYuc2V0TmF0aXZlUHJvcHMocHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxJdGVtVD4pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5fY2hlY2tQcm9wcyh0aGlzLnByb3BzKTtcbiAgICBpZiAodGhpcy5wcm9wcy52aWV3YWJpbGl0eUNvbmZpZ0NhbGxiYWNrUGFpcnMpIHtcbiAgICAgIHRoaXMuX3ZpcnR1YWxpemVkTGlzdFBhaXJzID1cbiAgICAgICAgdGhpcy5wcm9wcy52aWV3YWJpbGl0eUNvbmZpZ0NhbGxiYWNrUGFpcnMubWFwKHBhaXIgPT4gKHtcbiAgICAgICAgICB2aWV3YWJpbGl0eUNvbmZpZzogcGFpci52aWV3YWJpbGl0eUNvbmZpZyxcbiAgICAgICAgICBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkOiB0aGlzLl9jcmVhdGVPblZpZXdhYmxlSXRlbXNDaGFuZ2VkKFxuICAgICAgICAgICAgcGFpci5vblZpZXdhYmxlSXRlbXNDaGFuZ2VkLFxuICAgICAgICAgICksXG4gICAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMub25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCkge1xuICAgICAgdGhpcy5fdmlydHVhbGl6ZWRMaXN0UGFpcnMucHVzaCh7XG4gICAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdICg+PTAuNjMuMCBzaXRlPXJlYWN0X25hdGl2ZV9mYikgVGhpc1xuICAgICAgICAgKiBjb21tZW50IHN1cHByZXNzZXMgYW4gZXJyb3IgZm91bmQgd2hlbiBGbG93IHYwLjYzIHdhcyBkZXBsb3llZC4gVG9cbiAgICAgICAgICogc2VlIHRoZSBlcnJvciBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICAgICAgdmlld2FiaWxpdHlDb25maWc6IHRoaXMucHJvcHMudmlld2FiaWxpdHlDb25maWcsXG4gICAgICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6IHRoaXMuX2NyZWF0ZU9uVmlld2FibGVJdGVtc0NoYW5nZWQoXG4gICAgICAgICAgLy8gTk9URTogd2UgdXNlIGEgd3JhcHBlciBmdW5jdGlvbiB0byBhbGxvdyB0aGUgYWN0dWFsIGNhbGxiYWNrIHRvIGNoYW5nZVxuICAgICAgICAgIC8vIHdoaWxlIHN0aWxsIGtlZXBpbmcgdGhlIGZ1bmN0aW9uIHByb3ZpZGVkIHRvIG5hdGl2ZSB0byBiZSBzdGFibGVcbiAgICAgICAgICAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uVmlld2FibGVJdGVtc0NoYW5nZWQsXG4gICAgICAgICAgICAgICdDaGFuZ2luZyB0aGUgbnVsbGFiaWxpdHkgb2Ygb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCBpcyBub3Qgc3VwcG9ydGVkLiAnICtcbiAgICAgICAgICAgICAgICAnT25jZSBhIGZ1bmN0aW9uIG9yIG51bGwgaXMgc3VwcGxpZWQgdGhhdCBjYW5ub3QgYmUgY2hhbmdlZC4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLm9uVmlld2FibGVJdGVtc0NoYW5nZWQoLi4uYXJncyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUHJvcHM8SXRlbVQ+KSB7XG4gICAgaW52YXJpYW50KFxuICAgICAgcHJldlByb3BzLm51bUNvbHVtbnMgPT09IHRoaXMucHJvcHMubnVtQ29sdW1ucyxcbiAgICAgICdDaGFuZ2luZyBudW1Db2x1bW5zIG9uIHRoZSBmbHkgaXMgbm90IHN1cHBvcnRlZC4gQ2hhbmdlIHRoZSBrZXkgcHJvcCBvbiBGbGF0TGlzdCB3aGVuICcgK1xuICAgICAgICAnY2hhbmdpbmcgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRvIGZvcmNlIGEgZnJlc2ggcmVuZGVyIG9mIHRoZSBjb21wb25lbnQuJyxcbiAgICApO1xuICAgIGludmFyaWFudChcbiAgICAgIChwcmV2UHJvcHMub25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCA9PSBudWxsKSA9PT1cbiAgICAgICAgKHRoaXMucHJvcHMub25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCA9PSBudWxsKSxcbiAgICAgICdDaGFuZ2luZyBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkIG51bGxhYmlsaXR5IG9uIHRoZSBmbHkgaXMgbm90IHN1cHBvcnRlZCcsXG4gICAgKTtcbiAgICBpbnZhcmlhbnQoXG4gICAgICAhZGVlcERpZmZlcihwcmV2UHJvcHMudmlld2FiaWxpdHlDb25maWcsIHRoaXMucHJvcHMudmlld2FiaWxpdHlDb25maWcpLFxuICAgICAgJ0NoYW5naW5nIHZpZXdhYmlsaXR5Q29uZmlnIG9uIHRoZSBmbHkgaXMgbm90IHN1cHBvcnRlZCcsXG4gICAgKTtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBwcmV2UHJvcHMudmlld2FiaWxpdHlDb25maWdDYWxsYmFja1BhaXJzID09PVxuICAgICAgICB0aGlzLnByb3BzLnZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlycyxcbiAgICAgICdDaGFuZ2luZyB2aWV3YWJpbGl0eUNvbmZpZ0NhbGxiYWNrUGFpcnMgb24gdGhlIGZseSBpcyBub3Qgc3VwcG9ydGVkJyxcbiAgICApO1xuXG4gICAgdGhpcy5fY2hlY2tQcm9wcyh0aGlzLnByb3BzKTtcbiAgfVxuXG4gIF9saXN0UmVmOiA/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlydHVhbGl6ZWRMaXN0PjtcbiAgX3ZpcnR1YWxpemVkTGlzdFBhaXJzOiBBcnJheTxWaWV3YWJpbGl0eUNvbmZpZ0NhbGxiYWNrUGFpcj4gPSBbXTtcblxuICBfY2FwdHVyZVJlZiA9IChyZWY6ID9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBWaXJ0dWFsaXplZExpc3Q+KSA9PiB7XG4gICAgdGhpcy5fbGlzdFJlZiA9IHJlZjtcbiAgfTtcblxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF9jaGVja1Byb3BzKHByb3BzOiBQcm9wczxJdGVtVD4pIHtcbiAgICBjb25zdCB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gdGhpcyBwcm9wIGRvZXNuJ3QgZXhpc3QsIGlzIG9ubHkgdXNlZCBmb3IgYW4gaW52YXJpYW50XG4gICAgICBnZXRJdGVtLFxuICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIHRoaXMgcHJvcCBkb2Vzbid0IGV4aXN0LCBpcyBvbmx5IHVzZWQgZm9yIGFuIGludmFyaWFudFxuICAgICAgZ2V0SXRlbUNvdW50LFxuICAgICAgaG9yaXpvbnRhbCxcbiAgICAgIGNvbHVtbldyYXBwZXJTdHlsZSxcbiAgICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQsXG4gICAgICB2aWV3YWJpbGl0eUNvbmZpZ0NhbGxiYWNrUGFpcnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IG51bUNvbHVtbnMgPSBudW1Db2x1bW5zT3JEZWZhdWx0KHRoaXMucHJvcHMubnVtQ29sdW1ucyk7XG4gICAgaW52YXJpYW50KFxuICAgICAgIWdldEl0ZW0gJiYgIWdldEl0ZW1Db3VudCxcbiAgICAgICdGbGF0TGlzdCBkb2VzIG5vdCBzdXBwb3J0IGN1c3RvbSBkYXRhIGZvcm1hdHMuJyxcbiAgICApO1xuICAgIGlmIChudW1Db2x1bW5zID4gMSkge1xuICAgICAgaW52YXJpYW50KCFob3Jpem9udGFsLCAnbnVtQ29sdW1ucyBkb2VzIG5vdCBzdXBwb3J0IGhvcml6b250YWwuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgIWNvbHVtbldyYXBwZXJTdHlsZSxcbiAgICAgICAgJ2NvbHVtbldyYXBwZXJTdHlsZSBub3Qgc3VwcG9ydGVkIGZvciBzaW5nbGUgY29sdW1uIGxpc3RzJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGludmFyaWFudChcbiAgICAgICEob25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCAmJiB2aWV3YWJpbGl0eUNvbmZpZ0NhbGxiYWNrUGFpcnMpLFxuICAgICAgJ0ZsYXRMaXN0IGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBib3RoIG9uVmlld2FibGVJdGVtc0NoYW5nZWQgYW5kICcgK1xuICAgICAgICAndmlld2FiaWxpdHlDb25maWdDYWxsYmFja1BhaXJzLicsXG4gICAgKTtcbiAgfVxuXG4gIF9nZXRJdGVtID0gKFxuICAgIGRhdGE6ICRBcnJheUxpa2U8SXRlbVQ+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICk6ID8oSXRlbVQgfCAkUmVhZE9ubHlBcnJheTxJdGVtVD4pID0+IHtcbiAgICBjb25zdCBudW1Db2x1bW5zID0gbnVtQ29sdW1uc09yRGVmYXVsdCh0aGlzLnByb3BzLm51bUNvbHVtbnMpO1xuICAgIGlmIChudW1Db2x1bW5zID4gMSkge1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICBmb3IgKGxldCBrayA9IDA7IGtrIDwgbnVtQ29sdW1uczsga2srKykge1xuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBpbmRleCAqIG51bUNvbHVtbnMgKyBraztcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbaXRlbUluZGV4XTtcbiAgICAgICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGFbaW5kZXhdO1xuICAgIH1cbiAgfTtcblxuICBfZ2V0SXRlbUNvdW50ID0gKGRhdGE6ID8kQXJyYXlMaWtlPEl0ZW1UPik6IG51bWJlciA9PiB7XG4gICAgLy8gTGVnYWN5IGJlaGF2aW9yIG9mIEZsYXRMaXN0IHdhcyB0byBmb3J3YXJkIFwidW5kZWZpbmVkXCIgbGVuZ3RoIGlmIGludmFsaWRcbiAgICAvLyBkYXRhIGxpa2UgYSBub24tYXJyYXlsaWtlIG9iamVjdCBpcyBwYXNzZWQuIFZpcnR1YWxpemVkTGlzdCB3b3VsZCB0aGVuXG4gICAgLy8gY29lcmNlIHRoaXMsIGFuZCB0aGUgbWF0aCB3b3VsZCB3b3JrIG91dCB0byBuby1vcC4gRm9yIGNvbXBhdGliaWxpdHksIGlmXG4gICAgLy8gaW52YWxpZCBkYXRhIGlzIHBhc3NlZCwgd2UgdGVsbCBWaXJ0dWFsaXplZExpc3QgdGhlcmUgYXJlIHplcm8gaXRlbXNcbiAgICAvLyBhdmFpbGFibGUgdG8gcHJldmVudCBpdCBmcm9tIHRyeWluZyB0byByZWFkIGZyb20gdGhlIGludmFsaWQgZGF0YVxuICAgIC8vICh3aXRob3V0IHByb3BhZ2F0aW5nIGludmFsaWRseSB0eXBlZCBkYXRhKS5cbiAgICBpZiAoZGF0YSAhPSBudWxsICYmIGlzQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICBjb25zdCBudW1Db2x1bW5zID0gbnVtQ29sdW1uc09yRGVmYXVsdCh0aGlzLnByb3BzLm51bUNvbHVtbnMpO1xuICAgICAgcmV0dXJuIG51bUNvbHVtbnMgPiAxID8gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gbnVtQ29sdW1ucykgOiBkYXRhLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9O1xuXG4gIF9rZXlFeHRyYWN0b3IgPSAoaXRlbXM6IEl0ZW1UIHwgQXJyYXk8SXRlbVQ+LCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBudW1Db2x1bW5zID0gbnVtQ29sdW1uc09yRGVmYXVsdCh0aGlzLnByb3BzLm51bUNvbHVtbnMpO1xuICAgIGNvbnN0IGtleUV4dHJhY3RvciA9IHRoaXMucHJvcHMua2V5RXh0cmFjdG9yID8/IGRlZmF1bHRLZXlFeHRyYWN0b3I7XG5cbiAgICBpZiAobnVtQ29sdW1ucyA+IDEpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgQXJyYXkuaXNBcnJheShpdGVtcyksXG4gICAgICAgICdGbGF0TGlzdDogRW5jb3VudGVyZWQgaW50ZXJuYWwgY29uc2lzdGVuY3kgZXJyb3IsIGV4cGVjdGVkIGVhY2ggaXRlbSB0byBjb25zaXN0IG9mIGFuICcgK1xuICAgICAgICAgICdhcnJheSB3aXRoIDEtJXMgY29sdW1uczsgaW5zdGVhZCwgcmVjZWl2ZWQgYSBzaW5nbGUgaXRlbS4nLFxuICAgICAgICBudW1Db2x1bW5zLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBpdGVtc1xuICAgICAgICAubWFwKChpdGVtLCBraykgPT5cbiAgICAgICAgICBrZXlFeHRyYWN0b3IoKChpdGVtOiAkRmxvd0ZpeE1lKTogSXRlbVQpLCBpbmRleCAqIG51bUNvbHVtbnMgKyBrayksXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJzonKTtcbiAgICB9XG5cbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBDYW4ndCBjYWxsIGtleUV4dHJhY3RvciB3aXRoIGFuIGFycmF5XG4gICAgcmV0dXJuIGtleUV4dHJhY3RvcihpdGVtcywgaW5kZXgpO1xuICB9O1xuXG4gIF9wdXNoTXVsdGlDb2x1bW5WaWV3YWJsZShhcnI6IEFycmF5PFZpZXdUb2tlbj4sIHY6IFZpZXdUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IG51bUNvbHVtbnMgPSBudW1Db2x1bW5zT3JEZWZhdWx0KHRoaXMucHJvcHMubnVtQ29sdW1ucyk7XG4gICAgY29uc3Qga2V5RXh0cmFjdG9yID0gdGhpcy5wcm9wcy5rZXlFeHRyYWN0b3IgPz8gZGVmYXVsdEtleUV4dHJhY3RvcjtcbiAgICB2Lml0ZW0uZm9yRWFjaCgoaXRlbSwgaWkpID0+IHtcbiAgICAgIGludmFyaWFudCh2LmluZGV4ICE9IG51bGwsICdNaXNzaW5nIGluZGV4IScpO1xuICAgICAgY29uc3QgaW5kZXggPSB2LmluZGV4ICogbnVtQ29sdW1ucyArIGlpO1xuICAgICAgYXJyLnB1c2goey4uLnYsIGl0ZW0sIGtleToga2V5RXh0cmFjdG9yKGl0ZW0sIGluZGV4KSwgaW5kZXh9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVPblZpZXdhYmxlSXRlbXNDaGFuZ2VkKFxuICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6ID8oaW5mbzoge1xuICAgICAgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPixcbiAgICAgIGNoYW5nZWQ6IEFycmF5PFZpZXdUb2tlbj4sXG4gICAgICAuLi5cbiAgICB9KSA9PiB2b2lkLFxuICAgIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgKSB7XG4gICAgcmV0dXJuIChpbmZvOiB7XG4gICAgICB2aWV3YWJsZUl0ZW1zOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgICAgY2hhbmdlZDogQXJyYXk8Vmlld1Rva2VuPixcbiAgICAgIC4uLlxuICAgIH0pID0+IHtcbiAgICAgIGNvbnN0IG51bUNvbHVtbnMgPSBudW1Db2x1bW5zT3JEZWZhdWx0KHRoaXMucHJvcHMubnVtQ29sdW1ucyk7XG4gICAgICBpZiAob25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCkge1xuICAgICAgICBpZiAobnVtQ29sdW1ucyA+IDEpIHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkOiBBcnJheTxWaWV3VG9rZW4+ID0gW107XG4gICAgICAgICAgY29uc3Qgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPiA9IFtdO1xuICAgICAgICAgIGluZm8udmlld2FibGVJdGVtcy5mb3JFYWNoKHYgPT5cbiAgICAgICAgICAgIHRoaXMuX3B1c2hNdWx0aUNvbHVtblZpZXdhYmxlKHZpZXdhYmxlSXRlbXMsIHYpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaW5mby5jaGFuZ2VkLmZvckVhY2godiA9PiB0aGlzLl9wdXNoTXVsdGlDb2x1bW5WaWV3YWJsZShjaGFuZ2VkLCB2KSk7XG4gICAgICAgICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCh7dmlld2FibGVJdGVtcywgY2hhbmdlZH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQoaW5mbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgX3JlbmRlcmVyID0gKFxuICAgIExpc3RJdGVtQ29tcG9uZW50OiA/KFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PiB8IFJlYWN0LkVsZW1lbnQ8YW55PiksXG4gICAgcmVuZGVySXRlbTogP1JlbmRlckl0ZW1UeXBlPEl0ZW1UPixcbiAgICBjb2x1bW5XcmFwcGVyU3R5bGU6ID9WaWV3U3R5bGVQcm9wLFxuICAgIG51bUNvbHVtbnM6ID9udW1iZXIsXG4gICAgZXh0cmFEYXRhOiA/YW55LFxuICAgIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgKSA9PiB7XG4gICAgY29uc3QgY29scyA9IG51bUNvbHVtbnNPckRlZmF1bHQobnVtQ29sdW1ucyk7XG5cbiAgICBjb25zdCByZW5kZXIgPSAocHJvcHM6IFJlbmRlckl0ZW1Qcm9wczxJdGVtVD4pOiBSZWFjdC5Ob2RlID0+IHtcbiAgICAgIGlmIChMaXN0SXRlbUNvbXBvbmVudCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW25vdC1hLWNvbXBvbmVudF0gQ29tcG9uZW50IGlzbid0IHZhbGlkXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGUtYXJnXSBDb21wb25lbnQgaXNuJ3QgdmFsaWRcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBDb21wb25lbnQgaXNuJ3QgdmFsaWRcbiAgICAgICAgcmV0dXJuIDxMaXN0SXRlbUNvbXBvbmVudCB7Li4ucHJvcHN9IC8+O1xuICAgICAgfSBlbHNlIGlmIChyZW5kZXJJdGVtKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgIHJldHVybiByZW5kZXJJdGVtKHByb3BzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJQcm9wID0gKGluZm86IFJlbmRlckl0ZW1Qcm9wczxJdGVtVD4pID0+IHtcbiAgICAgIGlmIChjb2xzID4gMSkge1xuICAgICAgICBjb25zdCB7aXRlbSwgaW5kZXh9ID0gaW5mbztcbiAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbSksXG4gICAgICAgICAgJ0V4cGVjdGVkIGFycmF5IG9mIGl0ZW1zIHdpdGggbnVtQ29sdW1ucyA+IDEnLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtTdHlsZVNoZWV0LmNvbXBvc2Uoc3R5bGVzLnJvdywgY29sdW1uV3JhcHBlclN0eWxlKX0+XG4gICAgICAgICAgICB7aXRlbS5tYXAoKGl0LCBraykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVuZGVyKHtcbiAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgICAgICAgICAgICAgIGl0ZW06IGl0LFxuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCAqIGNvbHMgKyBrayxcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3JzOiBpbmZvLnNlcGFyYXRvcnMsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCAhPSBudWxsID8gKFxuICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2trfT57ZWxlbWVudH08L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICApIDogbnVsbDtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZW5kZXIoaW5mbyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBMaXN0SXRlbUNvbXBvbmVudFxuICAgICAgPyB7TGlzdEl0ZW1Db21wb25lbnQ6IHJlbmRlclByb3B9XG4gICAgICA6IHtyZW5kZXJJdGVtOiByZW5kZXJQcm9wfTtcbiAgfTtcblxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF9tZW1vaXplZFJlbmRlcmVyID0gbWVtb2l6ZU9uZSh0aGlzLl9yZW5kZXJlcik7XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHtcbiAgICAgIG51bUNvbHVtbnMsXG4gICAgICBjb2x1bW5XcmFwcGVyU3R5bGUsXG4gICAgICByZW1vdmVDbGlwcGVkU3Vidmlld3M6IF9yZW1vdmVDbGlwcGVkU3Vidmlld3MsXG4gICAgICBzdHJpY3RNb2RlID0gZmFsc2UsXG4gICAgICAuLi5yZXN0UHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHJlbmRlcmVyID0gc3RyaWN0TW9kZSA/IHRoaXMuX21lbW9pemVkUmVuZGVyZXIgOiB0aGlzLl9yZW5kZXJlcjtcblxuICAgIHJldHVybiAoXG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1leGFjdF0gLSBgcmVzdFByb3BzYCAoYFByb3BzYCkgaXMgaW5leGFjdC5cbiAgICAgIDxWaXJ0dWFsaXplZExpc3RcbiAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgZ2V0SXRlbT17dGhpcy5fZ2V0SXRlbX1cbiAgICAgICAgZ2V0SXRlbUNvdW50PXt0aGlzLl9nZXRJdGVtQ291bnR9XG4gICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy5fa2V5RXh0cmFjdG9yfVxuICAgICAgICByZWY9e3RoaXMuX2NhcHR1cmVSZWZ9XG4gICAgICAgIHZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlycz17dGhpcy5fdmlydHVhbGl6ZWRMaXN0UGFpcnN9XG4gICAgICAgIHJlbW92ZUNsaXBwZWRTdWJ2aWV3cz17cmVtb3ZlQ2xpcHBlZFN1YnZpZXdzT3JEZWZhdWx0KFxuICAgICAgICAgIF9yZW1vdmVDbGlwcGVkU3Vidmlld3MsXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5yZW5kZXJlcihcbiAgICAgICAgICB0aGlzLnByb3BzLkxpc3RJdGVtQ29tcG9uZW50LFxuICAgICAgICAgIHRoaXMucHJvcHMucmVuZGVySXRlbSxcbiAgICAgICAgICBjb2x1bW5XcmFwcGVyU3R5bGUsXG4gICAgICAgICAgbnVtQ29sdW1ucyxcbiAgICAgICAgICB0aGlzLnByb3BzLmV4dHJhRGF0YSxcbiAgICAgICAgKX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvdzoge2ZsZXhEaXJlY3Rpb246ICdyb3cnfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZsYXRMaXN0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplT25lO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZW9mIEZpbGxSYXRlSGVscGVyIGZyb20gJy4vTGlzdHMvRmlsbFJhdGVIZWxwZXInO1xuaW1wb3J0IHR5cGVvZiBWaWV3YWJpbGl0eUhlbHBlciBmcm9tICcuL0xpc3RzL1ZpZXdhYmlsaXR5SGVscGVyJztcbmltcG9ydCB0eXBlb2YgVmlydHVhbGl6ZWRMaXN0IGZyb20gJy4vTGlzdHMvVmlydHVhbGl6ZWRMaXN0JztcbmltcG9ydCB0eXBlb2YgVmlydHVhbGl6ZWRTZWN0aW9uTGlzdCBmcm9tICcuL0xpc3RzL1ZpcnR1YWxpemVkU2VjdGlvbkxpc3QnO1xuXG5pbXBvcnQge3R5cGVvZiBWaXJ0dWFsaXplZExpc3RDb250ZXh0UmVzZXR0ZXJ9IGZyb20gJy4vTGlzdHMvVmlydHVhbGl6ZWRMaXN0Q29udGV4dCc7XG5pbXBvcnQge2tleUV4dHJhY3Rvcn0gZnJvbSAnLi9MaXN0cy9WaXJ0dWFsaXplVXRpbHMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIFZpZXdUb2tlbixcbiAgVmlld2FiaWxpdHlDb25maWcsXG4gIFZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlyLFxufSBmcm9tICcuL0xpc3RzL1ZpZXdhYmlsaXR5SGVscGVyJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2VsbFJlbmRlcmVyUHJvcHMsXG4gIFJlbmRlckl0ZW1Qcm9wcyxcbiAgUmVuZGVySXRlbVR5cGUsXG4gIFNlcGFyYXRvcnMsXG59IGZyb20gJy4vTGlzdHMvVmlydHVhbGl6ZWRMaXN0UHJvcHMnO1xuZXhwb3J0IHR5cGUge1xuICBQcm9wcyBhcyBWaXJ0dWFsaXplZFNlY3Rpb25MaXN0UHJvcHMsXG4gIFNjcm9sbFRvTG9jYXRpb25QYXJhbXNUeXBlLFxuICBTZWN0aW9uQmFzZSxcbn0gZnJvbSAnLi9MaXN0cy9WaXJ0dWFsaXplZFNlY3Rpb25MaXN0JztcbmV4cG9ydCB0eXBlIHtGaWxsUmF0ZUluZm99IGZyb20gJy4vTGlzdHMvRmlsbFJhdGVIZWxwZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga2V5RXh0cmFjdG9yLFxuXG4gIGdldCBWaXJ0dWFsaXplZExpc3QoKTogVmlydHVhbGl6ZWRMaXN0IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaXN0cy9WaXJ0dWFsaXplZExpc3QnKTtcbiAgfSxcbiAgZ2V0IFZpcnR1YWxpemVkU2VjdGlvbkxpc3QoKTogVmlydHVhbGl6ZWRTZWN0aW9uTGlzdCB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vTGlzdHMvVmlydHVhbGl6ZWRTZWN0aW9uTGlzdCcpO1xuICB9LFxuICBnZXQgVmlydHVhbGl6ZWRMaXN0Q29udGV4dFJlc2V0dGVyKCk6IFZpcnR1YWxpemVkTGlzdENvbnRleHRSZXNldHRlciB7XG4gICAgY29uc3QgVmlydHVhbGl6ZWRMaXN0Q29udGV4dCA9IHJlcXVpcmUoJy4vTGlzdHMvVmlydHVhbGl6ZWRMaXN0Q29udGV4dCcpO1xuICAgIHJldHVybiBWaXJ0dWFsaXplZExpc3RDb250ZXh0LlZpcnR1YWxpemVkTGlzdENvbnRleHRSZXNldHRlcjtcbiAgfSxcbiAgZ2V0IFZpZXdhYmlsaXR5SGVscGVyKCk6IFZpZXdhYmlsaXR5SGVscGVyIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnLi9MaXN0cy9WaWV3YWJpbGl0eUhlbHBlcicpO1xuICB9LFxuICBnZXQgRmlsbFJhdGVIZWxwZXIoKTogRmlsbFJhdGVIZWxwZXIge1xuICAgIHJldHVybiByZXF1aXJlKCcuL0xpc3RzL0ZpbGxSYXRlSGVscGVyJyk7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSBMaXN0TWV0cmljc0FnZ3JlZ2F0b3IsIHtcbiAgQ2VsbE1ldHJpY1Byb3BzLFxufSBmcm9tICcuL0xpc3RNZXRyaWNzQWdncmVnYXRvcic7XG5cbi8qKlxuICogVXNlZCB0byBmaW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBmcmFtZXMgdGhhdCBvdmVybGFwIHRoZSBnaXZlbiBvZmZzZXRzLiBVc2VmdWwgZm9yIGZpbmRpbmcgdGhlXG4gKiBpdGVtcyB0aGF0IGJvdW5kIGRpZmZlcmVudCB3aW5kb3dzIG9mIGNvbnRlbnQsIHN1Y2ggYXMgdGhlIHZpc2libGUgYXJlYSBvciB0aGUgYnVmZmVyZWQgb3ZlcnNjYW5cbiAqIGFyZWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50c1RoYXRPdmVybGFwT2Zmc2V0cyhcbiAgb2Zmc2V0czogQXJyYXk8bnVtYmVyPixcbiAgcHJvcHM6IENlbGxNZXRyaWNQcm9wcyxcbiAgbGlzdE1ldHJpY3M6IExpc3RNZXRyaWNzQWdncmVnYXRvcixcbiAgem9vbVNjYWxlOiBudW1iZXIgPSAxLFxuKTogQXJyYXk8bnVtYmVyPiB7XG4gIGNvbnN0IGl0ZW1Db3VudCA9IHByb3BzLmdldEl0ZW1Db3VudChwcm9wcy5kYXRhKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IG9mZnNldEluZGV4ID0gMDsgb2Zmc2V0SW5kZXggPCBvZmZzZXRzLmxlbmd0aDsgb2Zmc2V0SW5kZXgrKykge1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBvZmZzZXRzW29mZnNldEluZGV4XTtcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgbGV0IHJpZ2h0ID0gaXRlbUNvdW50IC0gMTtcblxuICAgIHdoaWxlIChsZWZ0IDw9IHJpZ2h0KSB7XG4gICAgICBjb25zdCBtaWQgPSBsZWZ0ICsgTWF0aC5mbG9vcigocmlnaHQgLSBsZWZ0KSAvIDIpO1xuICAgICAgY29uc3QgZnJhbWUgPSBsaXN0TWV0cmljcy5nZXRDZWxsTWV0cmljc0FwcHJveChtaWQsIHByb3BzKTtcbiAgICAgIGNvbnN0IHNjYWxlZE9mZnNldFN0YXJ0ID0gZnJhbWUub2Zmc2V0ICogem9vbVNjYWxlO1xuICAgICAgY29uc3Qgc2NhbGVkT2Zmc2V0RW5kID0gKGZyYW1lLm9mZnNldCArIGZyYW1lLmxlbmd0aCkgKiB6b29tU2NhbGU7XG5cbiAgICAgIC8vIFdlIHdhbnQgdGhlIGZpcnN0IGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIG9mZnNldCwgd2l0aCBpbmNsdXNpdmUgYm91bmRzLiBUaHVzLCBmb3IgdGhlXG4gICAgICAvLyBmaXJzdCBmcmFtZSB0aGUgc2NhbGVkT2Zmc2V0U3RhcnQgaXMgaW5jbHVzaXZlLCB3aGlsZSBmb3Igb3RoZXIgZnJhbWVzIGl0IGlzIGV4Y2x1c2l2ZS5cbiAgICAgIGlmIChcbiAgICAgICAgKG1pZCA9PT0gMCAmJiBjdXJyZW50T2Zmc2V0IDwgc2NhbGVkT2Zmc2V0U3RhcnQpIHx8XG4gICAgICAgIChtaWQgIT09IDAgJiYgY3VycmVudE9mZnNldCA8PSBzY2FsZWRPZmZzZXRTdGFydClcbiAgICAgICkge1xuICAgICAgICByaWdodCA9IG1pZCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBzY2FsZWRPZmZzZXRFbmQpIHtcbiAgICAgICAgbGVmdCA9IG1pZCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbb2Zmc2V0SW5kZXhdID0gbWlkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGBuZXh0YCByYW5nZSB0aGF0IGFyZSBuZXcgY29tcGFyZWQgdG8gdGhlIGBwcmV2YCByYW5nZS5cbiAqIEhhbmR5IGZvciBjYWxjdWxhdGluZyBob3cgbWFueSBuZXcgaXRlbXMgd2lsbCBiZSByZW5kZXJlZCB3aGVuIHRoZSByZW5kZXIgd2luZG93IGNoYW5nZXMgc28gd2VcbiAqIGNhbiByZXN0cmljdCB0aGUgbnVtYmVyIG9mIG5ldyBpdGVtcyByZW5kZXIgYXQgb25jZSBzbyB0aGF0IGNvbnRlbnQgY2FuIGFwcGVhciBvbiB0aGUgc2NyZWVuXG4gKiBmYXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXdSYW5nZUNvdW50KFxuICBwcmV2OiB7XG4gICAgZmlyc3Q6IG51bWJlcixcbiAgICBsYXN0OiBudW1iZXIsXG4gICAgLi4uXG4gIH0sXG4gIG5leHQ6IHtcbiAgICBmaXJzdDogbnVtYmVyLFxuICAgIGxhc3Q6IG51bWJlcixcbiAgICAuLi5cbiAgfSxcbik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgbmV4dC5sYXN0IC1cbiAgICBuZXh0LmZpcnN0ICtcbiAgICAxIC1cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICAxICsgTWF0aC5taW4obmV4dC5sYXN0LCBwcmV2Lmxhc3QpIC0gTWF0aC5tYXgobmV4dC5maXJzdCwgcHJldi5maXJzdCksXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEN1c3RvbSBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggaXRlbXMgc2hvdWxkIGJlIHJlbmRlcmVkIGdpdmVuIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBzY3JvbGxcbiAqIG1ldHJpY3MsIGFzIHdlbGwgYXMgdGhlIHByZXZpb3VzIHJlbmRlciBzdGF0ZS4gVGhlIGFsZ29yaXRobSBtYXkgZXZvbHZlIG92ZXIgdGltZSwgYnV0IGdlbmVyYWxseVxuICogcHJpb3JpdGl6ZXMgdGhlIHZpc2libGUgYXJlYSBmaXJzdCwgdGhlbiBleHBhbmRzIHRoYXQgd2l0aCBvdmVyc2NhbiByZWdpb25zIGFoZWFkIGFuZCBiZWhpbmQsXG4gKiBiaWFzZWQgaW4gdGhlIGRpcmVjdGlvbiBvZiBzY3JvbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlV2luZG93ZWRSZW5kZXJMaW1pdHMoXG4gIHByb3BzOiBDZWxsTWV0cmljUHJvcHMsXG4gIG1heFRvUmVuZGVyUGVyQmF0Y2g6IG51bWJlcixcbiAgd2luZG93U2l6ZTogbnVtYmVyLFxuICBwcmV2OiB7XG4gICAgZmlyc3Q6IG51bWJlcixcbiAgICBsYXN0OiBudW1iZXIsXG4gIH0sXG4gIGxpc3RNZXRyaWNzOiBMaXN0TWV0cmljc0FnZ3JlZ2F0b3IsXG4gIHNjcm9sbE1ldHJpY3M6IHtcbiAgICBkdDogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHZlbG9jaXR5OiBudW1iZXIsXG4gICAgdmlzaWJsZUxlbmd0aDogbnVtYmVyLFxuICAgIHpvb21TY2FsZTogbnVtYmVyLFxuICAgIC4uLlxuICB9LFxuKToge1xuICBmaXJzdDogbnVtYmVyLFxuICBsYXN0OiBudW1iZXIsXG59IHtcbiAgY29uc3QgaXRlbUNvdW50ID0gcHJvcHMuZ2V0SXRlbUNvdW50KHByb3BzLmRhdGEpO1xuICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIHtmaXJzdDogMCwgbGFzdDogLTF9O1xuICB9XG4gIGNvbnN0IHtvZmZzZXQsIHZlbG9jaXR5LCB2aXNpYmxlTGVuZ3RoLCB6b29tU2NhbGUgPSAxfSA9IHNjcm9sbE1ldHJpY3M7XG5cbiAgLy8gU3RhcnQgd2l0aCB2aXNpYmxlIGFyZWEsIHRoZW4gY29tcHV0ZSBtYXhpbXVtIG92ZXJzY2FuIHJlZ2lvbiBieSBleHBhbmRpbmcgZnJvbSB0aGVyZSwgYmlhc2VkXG4gIC8vIGluIHRoZSBkaXJlY3Rpb24gb2Ygc2Nyb2xsLiBUb3RhbCBvdmVyc2NhbiBhcmVhIGlzIGNhcHBlZCwgd2hpY2ggc2hvdWxkIGNhcCBtZW1vcnkgY29uc3VtcHRpb25cbiAgLy8gdG9vLlxuICBjb25zdCB2aXNpYmxlQmVnaW4gPSBNYXRoLm1heCgwLCBvZmZzZXQpO1xuICBjb25zdCB2aXNpYmxlRW5kID0gdmlzaWJsZUJlZ2luICsgdmlzaWJsZUxlbmd0aDtcbiAgY29uc3Qgb3ZlcnNjYW5MZW5ndGggPSAod2luZG93U2l6ZSAtIDEpICogdmlzaWJsZUxlbmd0aDtcblxuICAvLyBDb25zaWRlcmluZyB2ZWxvY2l0eSBzZWVtcyB0byBpbnRyb2R1Y2UgbW9yZSBjaHVybiB0aGFuIGl0J3Mgd29ydGguXG4gIGNvbnN0IGxlYWRGYWN0b3IgPSAwLjU7IC8vIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZlbG9jaXR5IC8gMjUgKyAwLjUpKTtcblxuICBjb25zdCBmaWxsUHJlZmVyZW5jZSA9XG4gICAgdmVsb2NpdHkgPiAxID8gJ2FmdGVyJyA6IHZlbG9jaXR5IDwgLTEgPyAnYmVmb3JlJyA6ICdub25lJztcblxuICBjb25zdCBvdmVyc2NhbkJlZ2luID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICB2aXNpYmxlQmVnaW4gLSAoMSAtIGxlYWRGYWN0b3IpICogb3ZlcnNjYW5MZW5ndGgsXG4gICk7XG4gIGNvbnN0IG92ZXJzY2FuRW5kID0gTWF0aC5tYXgoMCwgdmlzaWJsZUVuZCArIGxlYWRGYWN0b3IgKiBvdmVyc2Nhbkxlbmd0aCk7XG5cbiAgY29uc3QgbGFzdEl0ZW1PZmZzZXQgPVxuICAgIGxpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzQXBwcm94KGl0ZW1Db3VudCAtIDEsIHByb3BzKS5vZmZzZXQgKiB6b29tU2NhbGU7XG4gIGlmIChsYXN0SXRlbU9mZnNldCA8IG92ZXJzY2FuQmVnaW4pIHtcbiAgICAvLyBFbnRpcmUgbGlzdCBpcyBiZWZvcmUgb3VyIG92ZXJzY2FuIHdpbmRvd1xuICAgIHJldHVybiB7XG4gICAgICBmaXJzdDogTWF0aC5tYXgoMCwgaXRlbUNvdW50IC0gMSAtIG1heFRvUmVuZGVyUGVyQmF0Y2gpLFxuICAgICAgbGFzdDogaXRlbUNvdW50IC0gMSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRmluZCB0aGUgaW5kaWNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGl0ZW1zIGF0IHRoZSByZW5kZXIgYm91bmRhcmllcyB3ZSdyZSB0YXJnZXRpbmcuXG4gIGxldCBbb3ZlcnNjYW5GaXJzdCwgZmlyc3QsIGxhc3QsIG92ZXJzY2FuTGFzdF0gPSBlbGVtZW50c1RoYXRPdmVybGFwT2Zmc2V0cyhcbiAgICBbb3ZlcnNjYW5CZWdpbiwgdmlzaWJsZUJlZ2luLCB2aXNpYmxlRW5kLCBvdmVyc2NhbkVuZF0sXG4gICAgcHJvcHMsXG4gICAgbGlzdE1ldHJpY3MsXG4gICAgem9vbVNjYWxlLFxuICApO1xuICBvdmVyc2NhbkZpcnN0ID0gb3ZlcnNjYW5GaXJzdCA9PSBudWxsID8gMCA6IG92ZXJzY2FuRmlyc3Q7XG4gIGZpcnN0ID0gZmlyc3QgPT0gbnVsbCA/IE1hdGgubWF4KDAsIG92ZXJzY2FuRmlyc3QpIDogZmlyc3Q7XG4gIG92ZXJzY2FuTGFzdCA9IG92ZXJzY2FuTGFzdCA9PSBudWxsID8gaXRlbUNvdW50IC0gMSA6IG92ZXJzY2FuTGFzdDtcbiAgbGFzdCA9XG4gICAgbGFzdCA9PSBudWxsXG4gICAgICA/IE1hdGgubWluKG92ZXJzY2FuTGFzdCwgZmlyc3QgKyBtYXhUb1JlbmRlclBlckJhdGNoIC0gMSlcbiAgICAgIDogbGFzdDtcbiAgY29uc3QgdmlzaWJsZSA9IHtmaXJzdCwgbGFzdH07XG5cbiAgLy8gV2Ugd2FudCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG5ldyBjZWxscyB3ZSdyZSByZW5kZXJpbmcgcGVyIGJhdGNoIHNvIHRoYXQgd2UgY2FuIGZpbGwgdGhlXG4gIC8vIGNvbnRlbnQgb24gdGhlIHNjcmVlbiBxdWlja2x5LiBJZiB3ZSByZW5kZXJlZCB0aGUgZW50aXJlIG92ZXJzY2FuIHdpbmRvdyBhdCBvbmNlLCB0aGUgdXNlclxuICAvLyBjb3VsZCBiZSBzdGFyaW5nIGF0IHdoaXRlIHNwYWNlIGZvciBhIGxvbmcgdGltZSB3YWl0aW5nIGZvciBhIGJ1bmNoIG9mIG9mZnNjcmVlbiBjb250ZW50IHRvXG4gIC8vIHJlbmRlci5cbiAgbGV0IG5ld0NlbGxDb3VudCA9IG5ld1JhbmdlQ291bnQocHJldiwgdmlzaWJsZSk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoZmlyc3QgPD0gb3ZlcnNjYW5GaXJzdCAmJiBsYXN0ID49IG92ZXJzY2FuTGFzdCkge1xuICAgICAgLy8gSWYgd2UgZmlsbCB0aGUgZW50aXJlIG92ZXJzY2FuIHJhbmdlLCB3ZSdyZSBkb25lLlxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1heE5ld0NlbGxzID0gbmV3Q2VsbENvdW50ID49IG1heFRvUmVuZGVyUGVyQmF0Y2g7XG4gICAgY29uc3QgZmlyc3RXaWxsQWRkTW9yZSA9IGZpcnN0IDw9IHByZXYuZmlyc3QgfHwgZmlyc3QgPiBwcmV2Lmxhc3Q7XG4gICAgY29uc3QgZmlyc3RTaG91bGRJbmNyZW1lbnQgPVxuICAgICAgZmlyc3QgPiBvdmVyc2NhbkZpcnN0ICYmICghbWF4TmV3Q2VsbHMgfHwgIWZpcnN0V2lsbEFkZE1vcmUpO1xuICAgIGNvbnN0IGxhc3RXaWxsQWRkTW9yZSA9IGxhc3QgPj0gcHJldi5sYXN0IHx8IGxhc3QgPCBwcmV2LmZpcnN0O1xuICAgIGNvbnN0IGxhc3RTaG91bGRJbmNyZW1lbnQgPVxuICAgICAgbGFzdCA8IG92ZXJzY2FuTGFzdCAmJiAoIW1heE5ld0NlbGxzIHx8ICFsYXN0V2lsbEFkZE1vcmUpO1xuICAgIGlmIChtYXhOZXdDZWxscyAmJiAhZmlyc3RTaG91bGRJbmNyZW1lbnQgJiYgIWxhc3RTaG91bGRJbmNyZW1lbnQpIHtcbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBzdG9wIGlmIHdlJ3ZlIGhpdCBtYXhOZXdDZWxscyBBTkQgd2UgY2Fubm90IGluY3JlbWVudCBmaXJzdCBvciBsYXN0XG4gICAgICAvLyB3aXRob3V0IHJlbmRlcmluZyBuZXcgaXRlbXMuIFRoaXMgbGV0J3MgdXMgcHJlc2VydmUgYXMgbWFueSBhbHJlYWR5IHJlbmRlcmVkIGl0ZW1zIGFzXG4gICAgICAvLyBwb3NzaWJsZSwgcmVkdWNpbmcgcmVuZGVyIGNodXJuIGFuZCBrZWVwaW5nIHRoZSByZW5kZXJlZCBvdmVyc2NhbiByYW5nZSBhcyBsYXJnZSBhc1xuICAgICAgLy8gcG9zc2libGUuXG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZmlyc3RTaG91bGRJbmNyZW1lbnQgJiZcbiAgICAgICEoZmlsbFByZWZlcmVuY2UgPT09ICdhZnRlcicgJiYgbGFzdFNob3VsZEluY3JlbWVudCAmJiBsYXN0V2lsbEFkZE1vcmUpXG4gICAgKSB7XG4gICAgICBpZiAoZmlyc3RXaWxsQWRkTW9yZSkge1xuICAgICAgICBuZXdDZWxsQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGZpcnN0LS07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxhc3RTaG91bGRJbmNyZW1lbnQgJiZcbiAgICAgICEoZmlsbFByZWZlcmVuY2UgPT09ICdiZWZvcmUnICYmIGZpcnN0U2hvdWxkSW5jcmVtZW50ICYmIGZpcnN0V2lsbEFkZE1vcmUpXG4gICAgKSB7XG4gICAgICBpZiAobGFzdFdpbGxBZGRNb3JlKSB7XG4gICAgICAgIG5ld0NlbGxDb3VudCsrO1xuICAgICAgfVxuICAgICAgbGFzdCsrO1xuICAgIH1cbiAgfVxuICBpZiAoXG4gICAgIShcbiAgICAgIGxhc3QgPj0gZmlyc3QgJiZcbiAgICAgIGZpcnN0ID49IDAgJiZcbiAgICAgIGxhc3QgPCBpdGVtQ291bnQgJiZcbiAgICAgIGZpcnN0ID49IG92ZXJzY2FuRmlyc3QgJiZcbiAgICAgIGxhc3QgPD0gb3ZlcnNjYW5MYXN0ICYmXG4gICAgICBmaXJzdCA8PSB2aXNpYmxlLmZpcnN0ICYmXG4gICAgICBsYXN0ID49IHZpc2libGUubGFzdFxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0JhZCB3aW5kb3cgY2FsY3VsYXRpb24gJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICBsYXN0LFxuICAgICAgICAgIGl0ZW1Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkZpcnN0LFxuICAgICAgICAgIG92ZXJzY2FuTGFzdCxcbiAgICAgICAgICB2aXNpYmxlLFxuICAgICAgICB9KSxcbiAgICApO1xuICB9XG4gIHJldHVybiB7Zmlyc3QsIGxhc3R9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga2V5RXh0cmFjdG9yKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbT8ua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm4gaXRlbS5rZXk7XG4gIH1cbiAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtPy5pZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhpbmRleCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Q2VsbE1ldHJpY1Byb3BzLCBMaXN0T3JpZW50YXRpb259IGZyb20gJy4vTGlzdE1ldHJpY3NBZ2dyZWdhdG9yJztcbmltcG9ydCB0eXBlIHtWaWV3VG9rZW59IGZyb20gJy4vVmlld2FiaWxpdHlIZWxwZXInO1xuaW1wb3J0IHR5cGUge1xuICBJdGVtLFxuICBQcm9wcyxcbiAgUmVuZGVySXRlbVByb3BzLFxuICBSZW5kZXJJdGVtVHlwZSxcbiAgU2VwYXJhdG9ycyxcbn0gZnJvbSAnLi9WaXJ0dWFsaXplZExpc3RQcm9wcyc7XG5pbXBvcnQgdHlwZSB7U2Nyb2xsUmVzcG9uZGVyVHlwZX0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1Njcm9sbFZpZXcvU2Nyb2xsVmlldyc7XG5pbXBvcnQgdHlwZSB7Vmlld1N0eWxlUHJvcH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge1xuICBMYXlvdXRFdmVudCxcbiAgU2Nyb2xsRXZlbnQsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgQmF0Y2hpbmF0b3IgZnJvbSAnLi4vSW50ZXJhY3Rpb24vQmF0Y2hpbmF0b3InO1xuaW1wb3J0IGNsYW1wIGZyb20gJy4uL1V0aWxpdGllcy9jbGFtcCc7XG5pbXBvcnQgaW5mb0xvZyBmcm9tICcuLi9VdGlsaXRpZXMvaW5mb0xvZyc7XG5pbXBvcnQge0NlbGxSZW5kZXJNYXNrfSBmcm9tICcuL0NlbGxSZW5kZXJNYXNrJztcbmltcG9ydCBDaGlsZExpc3RDb2xsZWN0aW9uIGZyb20gJy4vQ2hpbGRMaXN0Q29sbGVjdGlvbic7XG5pbXBvcnQgRmlsbFJhdGVIZWxwZXIgZnJvbSAnLi9GaWxsUmF0ZUhlbHBlcic7XG5pbXBvcnQgTGlzdE1ldHJpY3NBZ2dyZWdhdG9yIGZyb20gJy4vTGlzdE1ldHJpY3NBZ2dyZWdhdG9yJztcbmltcG9ydCBTdGF0ZVNhZmVQdXJlQ29tcG9uZW50IGZyb20gJy4vU3RhdGVTYWZlUHVyZUNvbXBvbmVudCc7XG5pbXBvcnQgVmlld2FiaWxpdHlIZWxwZXIgZnJvbSAnLi9WaWV3YWJpbGl0eUhlbHBlcic7XG5pbXBvcnQgQ2VsbFJlbmRlcmVyIGZyb20gJy4vVmlydHVhbGl6ZWRMaXN0Q2VsbFJlbmRlcmVyJztcbmltcG9ydCB7XG4gIFZpcnR1YWxpemVkTGlzdENlbGxDb250ZXh0UHJvdmlkZXIsXG4gIFZpcnR1YWxpemVkTGlzdENvbnRleHQsXG4gIFZpcnR1YWxpemVkTGlzdENvbnRleHRQcm92aWRlcixcbn0gZnJvbSAnLi9WaXJ0dWFsaXplZExpc3RDb250ZXh0LmpzJztcbmltcG9ydCB7XG4gIGhvcml6b250YWxPckRlZmF1bHQsXG4gIGluaXRpYWxOdW1Ub1JlbmRlck9yRGVmYXVsdCxcbiAgbWF4VG9SZW5kZXJQZXJCYXRjaE9yRGVmYXVsdCxcbiAgb25FbmRSZWFjaGVkVGhyZXNob2xkT3JEZWZhdWx0LFxuICBvblN0YXJ0UmVhY2hlZFRocmVzaG9sZE9yRGVmYXVsdCxcbiAgd2luZG93U2l6ZU9yRGVmYXVsdCxcbn0gZnJvbSAnLi9WaXJ0dWFsaXplZExpc3RQcm9wcyc7XG5pbXBvcnQge1xuICBjb21wdXRlV2luZG93ZWRSZW5kZXJMaW1pdHMsXG4gIGtleUV4dHJhY3RvciBhcyBkZWZhdWx0S2V5RXh0cmFjdG9yLFxufSBmcm9tICcuL1ZpcnR1YWxpemVVdGlscyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgbnVsbHRocm93cyBmcm9tICdudWxsdGhyb3dzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEkxOG5NYW5hZ2VyLFxuICBQbGF0Zm9ybSxcbiAgUmVmcmVzaENvbnRyb2wsXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFZpZXcsXG4gIGZpbmROb2RlSGFuZGxlLFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5leHBvcnQgdHlwZSB7UmVuZGVySXRlbVByb3BzLCBSZW5kZXJJdGVtVHlwZSwgU2VwYXJhdG9yc307XG5cbmNvbnN0IE9OX0VER0VfUkVBQ0hFRF9FUFNJTE9OID0gMC4wMDE7XG5cbmxldCBfdXNlZEluZGV4Rm9yS2V5ID0gZmFsc2U7XG5sZXQgX2tleWxlc3NJdGVtQ29tcG9uZW50TmFtZTogc3RyaW5nID0gJyc7XG5cbnR5cGUgVmlld2FiaWxpdHlIZWxwZXJDYWxsYmFja1R1cGxlID0ge1xuICB2aWV3YWJpbGl0eUhlbHBlcjogVmlld2FiaWxpdHlIZWxwZXIsXG4gIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6IChpbmZvOiB7XG4gICAgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPixcbiAgICBjaGFuZ2VkOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgIC4uLlxuICB9KSA9PiB2b2lkLFxuICAuLi5cbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIHJlbmRlck1hc2s6IENlbGxSZW5kZXJNYXNrLFxuICBjZWxsc0Fyb3VuZFZpZXdwb3J0OiB7Zmlyc3Q6IG51bWJlciwgbGFzdDogbnVtYmVyfSxcbiAgLy8gVXNlZCB0byB0cmFjayBpdGVtcyBhZGRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgZm9yIG1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbi5cbiAgZmlyc3RWaXNpYmxlSXRlbUtleTogP3N0cmluZyxcbiAgLy8gV2hlbiA+IDAgdGhlIHNjcm9sbCBwb3NpdGlvbiBhdmFpbGFibGUgaW4gSlMgaXMgY29uc2lkZXJlZCBzdGFsZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICBwZW5kaW5nU2Nyb2xsVXBkYXRlQ291bnQ6IG51bWJlcixcbn07XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ1RocmVzaG9sZCh0aHJlc2hvbGQ6IG51bWJlciwgdmlzaWJsZUxlbmd0aDogbnVtYmVyKSB7XG4gIHJldHVybiAodGhyZXNob2xkICogdmlzaWJsZUxlbmd0aCkgLyAyO1xufVxuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtb3JlIGNvbnZlbmllbnQgW2A8RmxhdExpc3Q+YF0oaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9mbGF0bGlzdClcbiAqIGFuZCBbYDxTZWN0aW9uTGlzdD5gXShodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3NlY3Rpb25saXN0KSBjb21wb25lbnRzLCB3aGljaCBhcmUgYWxzbyBiZXR0ZXJcbiAqIGRvY3VtZW50ZWQuIEluIGdlbmVyYWwsIHRoaXMgc2hvdWxkIG9ubHkgcmVhbGx5IGJlIHVzZWQgaWYgeW91IG5lZWQgbW9yZSBmbGV4aWJpbGl0eSB0aGFuXG4gKiBgRmxhdExpc3RgIHByb3ZpZGVzLCBlLmcuIGZvciB1c2Ugd2l0aCBpbW11dGFibGUgZGF0YSBpbnN0ZWFkIG9mIHBsYWluIGFycmF5cy5cbiAqXG4gKiBWaXJ0dWFsaXphdGlvbiBtYXNzaXZlbHkgaW1wcm92ZXMgbWVtb3J5IGNvbnN1bXB0aW9uIGFuZCBwZXJmb3JtYW5jZSBvZiBsYXJnZSBsaXN0cyBieVxuICogbWFpbnRhaW5pbmcgYSBmaW5pdGUgcmVuZGVyIHdpbmRvdyBvZiBhY3RpdmUgaXRlbXMgYW5kIHJlcGxhY2luZyBhbGwgaXRlbXMgb3V0c2lkZSBvZiB0aGUgcmVuZGVyXG4gKiB3aW5kb3cgd2l0aCBhcHByb3ByaWF0ZWx5IHNpemVkIGJsYW5rIHNwYWNlLiBUaGUgd2luZG93IGFkYXB0cyB0byBzY3JvbGxpbmcgYmVoYXZpb3IsIGFuZCBpdGVtc1xuICogYXJlIHJlbmRlcmVkIGluY3JlbWVudGFsbHkgd2l0aCBsb3ctcHJpIChhZnRlciBhbnkgcnVubmluZyBpbnRlcmFjdGlvbnMpIGlmIHRoZXkgYXJlIGZhciBmcm9tIHRoZVxuICogdmlzaWJsZSBhcmVhLCBvciB3aXRoIGhpLXByaSBvdGhlcndpc2UgdG8gbWluaW1pemUgdGhlIHBvdGVudGlhbCBvZiBzZWVpbmcgYmxhbmsgc3BhY2UuXG4gKlxuICogU29tZSBjYXZlYXRzOlxuICpcbiAqIC0gSW50ZXJuYWwgc3RhdGUgaXMgbm90IHByZXNlcnZlZCB3aGVuIGNvbnRlbnQgc2Nyb2xscyBvdXQgb2YgdGhlIHJlbmRlciB3aW5kb3cuIE1ha2Ugc3VyZSBhbGxcbiAqICAgeW91ciBkYXRhIGlzIGNhcHR1cmVkIGluIHRoZSBpdGVtIGRhdGEgb3IgZXh0ZXJuYWwgc3RvcmVzIGxpa2UgRmx1eCwgUmVkdXgsIG9yIFJlbGF5LlxuICogLSBUaGlzIGlzIGEgYFB1cmVDb21wb25lbnRgIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBub3QgcmUtcmVuZGVyIGlmIGBwcm9wc2AgcmVtYWluIHNoYWxsb3ctXG4gKiAgIGVxdWFsLiBNYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIHlvdXIgYHJlbmRlckl0ZW1gIGZ1bmN0aW9uIGRlcGVuZHMgb24gaXMgcGFzc2VkIGFzIGEgcHJvcFxuICogICAoZS5nLiBgZXh0cmFEYXRhYCkgdGhhdCBpcyBub3QgYD09PWAgYWZ0ZXIgdXBkYXRlcywgb3RoZXJ3aXNlIHlvdXIgVUkgbWF5IG5vdCB1cGRhdGUgb25cbiAqICAgY2hhbmdlcy4gVGhpcyBpbmNsdWRlcyB0aGUgYGRhdGFgIHByb3AgYW5kIHBhcmVudCBjb21wb25lbnQgc3RhdGUuXG4gKiAtIEluIG9yZGVyIHRvIGNvbnN0cmFpbiBtZW1vcnkgYW5kIGVuYWJsZSBzbW9vdGggc2Nyb2xsaW5nLCBjb250ZW50IGlzIHJlbmRlcmVkIGFzeW5jaHJvbm91c2x5XG4gKiAgIG9mZnNjcmVlbi4gVGhpcyBtZWFucyBpdCdzIHBvc3NpYmxlIHRvIHNjcm9sbCBmYXN0ZXIgdGhhbiB0aGUgZmlsbCByYXRlIGFuZHMgbW9tZW50YXJpbHkgc2VlXG4gKiAgIGJsYW5rIGNvbnRlbnQuIFRoaXMgaXMgYSB0cmFkZW9mZiB0aGF0IGNhbiBiZSBhZGp1c3RlZCB0byBzdWl0IHRoZSBuZWVkcyBvZiBlYWNoIGFwcGxpY2F0aW9uLFxuICogICBhbmQgd2UgYXJlIHdvcmtpbmcgb24gaW1wcm92aW5nIGl0IGJlaGluZCB0aGUgc2NlbmVzLlxuICogLSBCeSBkZWZhdWx0LCB0aGUgbGlzdCBsb29rcyBmb3IgYSBga2V5YCBvciBgaWRgIHByb3Agb24gZWFjaCBpdGVtIGFuZCB1c2VzIHRoYXQgZm9yIHRoZSBSZWFjdCBrZXkuXG4gKiAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSBhIGN1c3RvbSBga2V5RXh0cmFjdG9yYCBwcm9wLlxuICogLSBBcyBhbiBlZmZvcnQgdG8gcmVtb3ZlIGRlZmF1bHRQcm9wcywgdXNlIGhlbHBlciBmdW5jdGlvbnMgd2hlbiByZWZlcmVuY2luZyBjZXJ0YWluIHByb3BzXG4gKlxuICovXG5jbGFzcyBWaXJ0dWFsaXplZExpc3QgZXh0ZW5kcyBTdGF0ZVNhZmVQdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0aWMgY29udGV4dFR5cGU6IHR5cGVvZiBWaXJ0dWFsaXplZExpc3RDb250ZXh0ID0gVmlydHVhbGl6ZWRMaXN0Q29udGV4dDtcblxuICAvLyBzY3JvbGxUb0VuZCBtYXkgYmUgamFua3kgd2l0aG91dCBnZXRJdGVtTGF5b3V0IHByb3BcbiAgc2Nyb2xsVG9FbmQocGFyYW1zPzogP3thbmltYXRlZD86ID9ib29sZWFuLCAuLi59KSB7XG4gICAgY29uc3QgYW5pbWF0ZWQgPSBwYXJhbXMgPyBwYXJhbXMuYW5pbWF0ZWQgOiB0cnVlO1xuICAgIGNvbnN0IHZlcnlMYXN0ID0gdGhpcy5wcm9wcy5nZXRJdGVtQ291bnQodGhpcy5wcm9wcy5kYXRhKSAtIDE7XG4gICAgaWYgKHZlcnlMYXN0IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzQXBwcm94KHZlcnlMYXN0LCB0aGlzLnByb3BzKTtcbiAgICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBmcmFtZS5vZmZzZXQgK1xuICAgICAgICBmcmFtZS5sZW5ndGggK1xuICAgICAgICB0aGlzLl9mb290ZXJMZW5ndGggLVxuICAgICAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGgsXG4gICAgKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIGByZWYuc2Nyb2xsVG9FbmRgIGRpcmVjdGx5XG4gICAgdGhpcy5zY3JvbGxUb09mZnNldCh7YW5pbWF0ZWQsIG9mZnNldH0pO1xuICB9XG5cbiAgLy8gc2Nyb2xsVG9JbmRleCBtYXkgYmUgamFua3kgd2l0aG91dCBnZXRJdGVtTGF5b3V0IHByb3BcbiAgc2Nyb2xsVG9JbmRleChwYXJhbXM6IHtcbiAgICBhbmltYXRlZD86ID9ib29sZWFuLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgdmlld09mZnNldD86IG51bWJlcixcbiAgICB2aWV3UG9zaXRpb24/OiBudW1iZXIsXG4gICAgLi4uXG4gIH0pOiAkRmxvd0ZpeE1lIHtcbiAgICBjb25zdCB7ZGF0YSwgZ2V0SXRlbUNvdW50LCBnZXRJdGVtTGF5b3V0LCBvblNjcm9sbFRvSW5kZXhGYWlsZWR9ID1cbiAgICAgIHRoaXMucHJvcHM7XG4gICAgY29uc3Qge2FuaW1hdGVkLCBpbmRleCwgdmlld09mZnNldCwgdmlld1Bvc2l0aW9ufSA9IHBhcmFtcztcbiAgICBpbnZhcmlhbnQoXG4gICAgICBpbmRleCA+PSAwLFxuICAgICAgYHNjcm9sbFRvSW5kZXggb3V0IG9mIHJhbmdlOiByZXF1ZXN0ZWQgaW5kZXggJHtpbmRleH0gYnV0IG1pbmltdW0gaXMgMGAsXG4gICAgKTtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBnZXRJdGVtQ291bnQoZGF0YSkgPj0gMSxcbiAgICAgIGBzY3JvbGxUb0luZGV4IG91dCBvZiByYW5nZTogaXRlbSBsZW5ndGggJHtnZXRJdGVtQ291bnQoXG4gICAgICAgIGRhdGEsXG4gICAgICApfSBidXQgbWluaW11bSBpcyAxYCxcbiAgICApO1xuICAgIGludmFyaWFudChcbiAgICAgIGluZGV4IDwgZ2V0SXRlbUNvdW50KGRhdGEpLFxuICAgICAgYHNjcm9sbFRvSW5kZXggb3V0IG9mIHJhbmdlOiByZXF1ZXN0ZWQgaW5kZXggJHtpbmRleH0gaXMgb3V0IG9mIDAgdG8gJHtcbiAgICAgICAgZ2V0SXRlbUNvdW50KGRhdGEpIC0gMVxuICAgICAgfWAsXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICAhZ2V0SXRlbUxheW91dCAmJlxuICAgICAgaW5kZXggPiB0aGlzLl9saXN0TWV0cmljcy5nZXRIaWdoZXN0TWVhc3VyZWRDZWxsSW5kZXgoKVxuICAgICkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICAhIW9uU2Nyb2xsVG9JbmRleEZhaWxlZCxcbiAgICAgICAgJ3Njcm9sbFRvSW5kZXggc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBnZXRJdGVtTGF5b3V0IG9yIG9uU2Nyb2xsVG9JbmRleEZhaWxlZCwgJyArXG4gICAgICAgICAgJ290aGVyd2lzZSB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyB0aGUgbG9jYXRpb24gb2Ygb2Zmc2NyZWVuIGluZGljZXMgb3IgaGFuZGxlIGZhaWx1cmVzLicsXG4gICAgICApO1xuICAgICAgb25TY3JvbGxUb0luZGV4RmFpbGVkKHtcbiAgICAgICAgYXZlcmFnZUl0ZW1MZW5ndGg6IHRoaXMuX2xpc3RNZXRyaWNzLmdldEF2ZXJhZ2VDZWxsTGVuZ3RoKCksXG4gICAgICAgIGhpZ2hlc3RNZWFzdXJlZEZyYW1lSW5kZXg6XG4gICAgICAgICAgdGhpcy5fbGlzdE1ldHJpY3MuZ2V0SGlnaGVzdE1lYXN1cmVkQ2VsbEluZGV4KCksXG4gICAgICAgIGluZGV4LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q2VsbE1ldHJpY3NBcHByb3goXG4gICAgICBNYXRoLmZsb29yKGluZGV4KSxcbiAgICAgIHRoaXMucHJvcHMsXG4gICAgKTtcbiAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxPZmZzZXRBcHByb3goaW5kZXgsIHRoaXMucHJvcHMpIC1cbiAgICAgICAgICAodmlld1Bvc2l0aW9uIHx8IDApICpcbiAgICAgICAgICAgICh0aGlzLl9zY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGggLSBmcmFtZS5sZW5ndGgpLFxuICAgICAgKSAtICh2aWV3T2Zmc2V0IHx8IDApO1xuXG4gICAgdGhpcy5zY3JvbGxUb09mZnNldCh7b2Zmc2V0LCBhbmltYXRlZH0pO1xuICB9XG5cbiAgLy8gc2Nyb2xsVG9JdGVtIG1heSBiZSBqYW5reSB3aXRob3V0IGdldEl0ZW1MYXlvdXQgcHJvcC4gUmVxdWlyZWQgbGluZWFyIHNjYW4gdGhyb3VnaCBpdGVtcyAtXG4gIC8vIHVzZSBzY3JvbGxUb0luZGV4IGluc3RlYWQgaWYgcG9zc2libGUuXG4gIHNjcm9sbFRvSXRlbShwYXJhbXM6IHtcbiAgICBhbmltYXRlZD86ID9ib29sZWFuLFxuICAgIGl0ZW06IEl0ZW0sXG4gICAgdmlld09mZnNldD86IG51bWJlcixcbiAgICB2aWV3UG9zaXRpb24/OiBudW1iZXIsXG4gICAgLi4uXG4gIH0pIHtcbiAgICBjb25zdCB7aXRlbX0gPSBwYXJhbXM7XG4gICAgY29uc3Qge2RhdGEsIGdldEl0ZW0sIGdldEl0ZW1Db3VudH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGl0ZW1Db3VudCA9IGdldEl0ZW1Db3VudChkYXRhKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaXRlbUNvdW50OyBpbmRleCsrKSB7XG4gICAgICBpZiAoZ2V0SXRlbShkYXRhLCBpbmRleCkgPT09IGl0ZW0pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0luZGV4KHsuLi5wYXJhbXMsIGluZGV4fSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gYSBzcGVjaWZpYyBjb250ZW50IHBpeGVsIG9mZnNldCBpbiB0aGUgbGlzdC5cbiAgICpcbiAgICogUGFyYW0gYG9mZnNldGAgZXhwZWN0cyB0aGUgb2Zmc2V0IHRvIHNjcm9sbCB0by5cbiAgICogSW4gY2FzZSBvZiBgaG9yaXpvbnRhbGAgaXMgdHJ1ZSwgdGhlIG9mZnNldCBpcyB0aGUgeC12YWx1ZSxcbiAgICogaW4gYW55IG90aGVyIGNhc2UgdGhlIG9mZnNldCBpcyB0aGUgeS12YWx1ZS5cbiAgICpcbiAgICogUGFyYW0gYGFuaW1hdGVkYCAoYHRydWVgIGJ5IGRlZmF1bHQpIGRlZmluZXMgd2hldGhlciB0aGUgbGlzdFxuICAgKiBzaG91bGQgZG8gYW4gYW5pbWF0aW9uIHdoaWxlIHNjcm9sbGluZy5cbiAgICovXG4gIHNjcm9sbFRvT2Zmc2V0KHBhcmFtczoge2FuaW1hdGVkPzogP2Jvb2xlYW4sIG9mZnNldDogbnVtYmVyLCAuLi59KSB7XG4gICAgY29uc3Qge2FuaW1hdGVkLCBvZmZzZXR9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHNjcm9sbFJlZiA9IHRoaXMuX3Njcm9sbFJlZjtcblxuICAgIGlmIChzY3JvbGxSZWYgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxSZWYuc2Nyb2xsVG8gPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnTm8gc2Nyb2xsVG8gbWV0aG9kIHByb3ZpZGVkLiBUaGlzIG1heSBiZSBiZWNhdXNlIHlvdSBoYXZlIHR3byBuZXN0ZWQgJyArXG4gICAgICAgICAgJ1ZpcnR1YWxpemVkTGlzdHMgd2l0aCB0aGUgc2FtZSBvcmllbnRhdGlvbiwgb3IgYmVjYXVzZSB5b3UgYXJlICcgK1xuICAgICAgICAgICd1c2luZyBhIGN1c3RvbSBjb21wb25lbnQgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgc2Nyb2xsVG8uJyxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2hvcml6b250YWwsIHJ0bH0gPSB0aGlzLl9vcmllbnRhdGlvbigpO1xuICAgIGlmIChob3Jpem9udGFsICYmIHJ0bCAmJiAhdGhpcy5fbGlzdE1ldHJpY3MuaGFzQ29udGVudExlbmd0aCgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdzY3JvbGxUb09mZnNldCBtYXkgbm90IGJlIGNhbGxlZCBpbiBSVEwgYmVmb3JlIGNvbnRlbnQgaXMgbGFpZCBvdXQnLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzY3JvbGxSZWYuc2Nyb2xsVG8oe1xuICAgICAgYW5pbWF0ZWQsXG4gICAgICAuLi50aGlzLl9zY3JvbGxUb1BhcmFtc0Zyb21PZmZzZXQob2Zmc2V0KSxcbiAgICB9KTtcbiAgfVxuXG4gIF9zY3JvbGxUb1BhcmFtc0Zyb21PZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB7eD86IG51bWJlciwgeT86IG51bWJlcn0ge1xuICAgIGNvbnN0IHtob3Jpem9udGFsLCBydGx9ID0gdGhpcy5fb3JpZW50YXRpb24oKTtcbiAgICBpZiAoaG9yaXpvbnRhbCAmJiBydGwpIHtcbiAgICAgIC8vIEFkZCB0aGUgdmlzaWJsZSBsZW5ndGggb2YgdGhlIHNjcm9sbHZpZXcgc28gdGhhdCB0aGUgb2Zmc2V0IGlzIHJpZ2h0LWFsaWduZWRcbiAgICAgIGNvbnN0IGNhcnRPZmZzZXQgPSB0aGlzLl9saXN0TWV0cmljcy5jYXJ0ZXNpYW5PZmZzZXQoXG4gICAgICAgIG9mZnNldCArIHRoaXMuX3Njcm9sbE1ldHJpY3MudmlzaWJsZUxlbmd0aCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gaG9yaXpvbnRhbCA/IHt4OiBjYXJ0T2Zmc2V0fSA6IHt5OiBjYXJ0T2Zmc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGhvcml6b250YWwgPyB7eDogb2Zmc2V0fSA6IHt5OiBvZmZzZXR9O1xuICAgIH1cbiAgfVxuXG4gIHJlY29yZEludGVyYWN0aW9uKCkge1xuICAgIHRoaXMuX25lc3RlZENoaWxkTGlzdHMuZm9yRWFjaChjaGlsZExpc3QgPT4ge1xuICAgICAgY2hpbGRMaXN0LnJlY29yZEludGVyYWN0aW9uKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fdmlld2FiaWxpdHlUdXBsZXMuZm9yRWFjaCh0ID0+IHtcbiAgICAgIHQudmlld2FiaWxpdHlIZWxwZXIucmVjb3JkSW50ZXJhY3Rpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLl91cGRhdGVWaWV3YWJsZUl0ZW1zKHRoaXMucHJvcHMsIHRoaXMuc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydCk7XG4gIH1cblxuICBmbGFzaFNjcm9sbEluZGljYXRvcnMoKSB7XG4gICAgaWYgKHRoaXMuX3Njcm9sbFJlZiA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2Nyb2xsUmVmLmZsYXNoU2Nyb2xsSW5kaWNhdG9ycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgaGFuZGxlIHRvIHRoZSB1bmRlcmx5aW5nIHNjcm9sbCByZXNwb25kZXIuXG4gICAqIE5vdGUgdGhhdCBgdGhpcy5fc2Nyb2xsUmVmYCBtaWdodCBub3QgYmUgYSBgU2Nyb2xsVmlld2AsIHNvIHdlXG4gICAqIG5lZWQgdG8gY2hlY2sgdGhhdCBpdCByZXNwb25kcyB0byBgZ2V0U2Nyb2xsUmVzcG9uZGVyYCBiZWZvcmUgY2FsbGluZyBpdC5cbiAgICovXG4gIGdldFNjcm9sbFJlc3BvbmRlcigpOiA/U2Nyb2xsUmVzcG9uZGVyVHlwZSB7XG4gICAgaWYgKHRoaXMuX3Njcm9sbFJlZiAmJiB0aGlzLl9zY3JvbGxSZWYuZ2V0U2Nyb2xsUmVzcG9uZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsUmVmLmdldFNjcm9sbFJlc3BvbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNjcm9sbGFibGVOb2RlKCk6ID9udW1iZXIge1xuICAgIGlmICh0aGlzLl9zY3JvbGxSZWYgJiYgdGhpcy5fc2Nyb2xsUmVmLmdldFNjcm9sbGFibGVOb2RlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsUmVmLmdldFNjcm9sbGFibGVOb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaW5kTm9kZUhhbmRsZSh0aGlzLl9zY3JvbGxSZWYpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNjcm9sbFJlZigpOlxuICAgIHwgP1JlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFNjcm9sbFZpZXc+XG4gICAgfCA/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlldz4ge1xuICAgIGlmICh0aGlzLl9zY3JvbGxSZWYgJiYgdGhpcy5fc2Nyb2xsUmVmLmdldFNjcm9sbFJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbFJlZi5nZXRTY3JvbGxSZWYoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbFJlZjtcbiAgICB9XG4gIH1cblxuICBzZXROYXRpdmVQcm9wcyhwcm9wczogT2JqZWN0KSB7XG4gICAgaWYgKHRoaXMuX3Njcm9sbFJlZikge1xuICAgICAgdGhpcy5fc2Nyb2xsUmVmLnNldE5hdGl2ZVByb3BzKHByb3BzKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q2VsbEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ/LmNlbGxLZXkgfHwgJ3Jvb3RMaXN0JztcbiAgfVxuXG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgX2dldFNjcm9sbE1ldHJpY3MgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbE1ldHJpY3M7XG4gIH07XG5cbiAgaGFzTW9yZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGFzTW9yZTtcbiAgfVxuXG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgX2dldE91dGVybW9zdFBhcmVudExpc3RSZWYgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2lzTmVzdGVkV2l0aFNhbWVPcmllbnRhdGlvbigpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmdldE91dGVybW9zdFBhcmVudExpc3RSZWYoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xuXG4gIF9yZWdpc3RlckFzTmVzdGVkQ2hpbGQgPSAoY2hpbGRMaXN0OiB7XG4gICAgY2VsbEtleTogc3RyaW5nLFxuICAgIHJlZjogUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlydHVhbGl6ZWRMaXN0PixcbiAgfSk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX25lc3RlZENoaWxkTGlzdHMuYWRkKGNoaWxkTGlzdC5yZWYsIGNoaWxkTGlzdC5jZWxsS2V5KTtcbiAgICBpZiAodGhpcy5faGFzSW50ZXJhY3RlZCkge1xuICAgICAgY2hpbGRMaXN0LnJlZi5yZWNvcmRJbnRlcmFjdGlvbigpO1xuICAgIH1cbiAgfTtcblxuICBfdW5yZWdpc3RlckFzTmVzdGVkQ2hpbGQgPSAoY2hpbGRMaXN0OiB7XG4gICAgcmVmOiBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBWaXJ0dWFsaXplZExpc3Q+LFxuICB9KTogdm9pZCA9PiB7XG4gICAgdGhpcy5fbmVzdGVkQ2hpbGRMaXN0cy5yZW1vdmUoY2hpbGRMaXN0LnJlZik7XG4gIH07XG5cbiAgc3RhdGU6IFN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLl9jaGVja1Byb3BzKHByb3BzKTtcblxuICAgIHRoaXMuX2ZpbGxSYXRlSGVscGVyID0gbmV3IEZpbGxSYXRlSGVscGVyKHRoaXMuX2xpc3RNZXRyaWNzKTtcbiAgICB0aGlzLl91cGRhdGVDZWxsc1RvUmVuZGVyQmF0Y2hlciA9IG5ldyBCYXRjaGluYXRvcihcbiAgICAgIHRoaXMuX3VwZGF0ZUNlbGxzVG9SZW5kZXIsXG4gICAgICB0aGlzLnByb3BzLnVwZGF0ZUNlbGxzQmF0Y2hpbmdQZXJpb2QgPz8gNTAsXG4gICAgKTtcblxuICAgIGlmICh0aGlzLnByb3BzLnZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlycykge1xuICAgICAgdGhpcy5fdmlld2FiaWxpdHlUdXBsZXMgPSB0aGlzLnByb3BzLnZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlycy5tYXAoXG4gICAgICAgIHBhaXIgPT4gKHtcbiAgICAgICAgICB2aWV3YWJpbGl0eUhlbHBlcjogbmV3IFZpZXdhYmlsaXR5SGVscGVyKHBhaXIudmlld2FiaWxpdHlDb25maWcpLFxuICAgICAgICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6IHBhaXIub25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7b25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCwgdmlld2FiaWxpdHlDb25maWd9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChvblZpZXdhYmxlSXRlbXNDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdhYmlsaXR5VHVwbGVzLnB1c2goe1xuICAgICAgICAgIHZpZXdhYmlsaXR5SGVscGVyOiBuZXcgVmlld2FiaWxpdHlIZWxwZXIodmlld2FiaWxpdHlDb25maWcpLFxuICAgICAgICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6IG9uVmlld2FibGVJdGVtc0NoYW5nZWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxSZW5kZXJSZWdpb24gPSBWaXJ0dWFsaXplZExpc3QuX2luaXRpYWxSZW5kZXJSZWdpb24ocHJvcHMpO1xuXG4gICAgY29uc3QgbWluSW5kZXhGb3JWaXNpYmxlID1cbiAgICAgIHRoaXMucHJvcHMubWFpbnRhaW5WaXNpYmxlQ29udGVudFBvc2l0aW9uPy5taW5JbmRleEZvclZpc2libGUgPz8gMDtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0OiBpbml0aWFsUmVuZGVyUmVnaW9uLFxuICAgICAgcmVuZGVyTWFzazogVmlydHVhbGl6ZWRMaXN0Ll9jcmVhdGVSZW5kZXJNYXNrKHByb3BzLCBpbml0aWFsUmVuZGVyUmVnaW9uKSxcbiAgICAgIGZpcnN0VmlzaWJsZUl0ZW1LZXk6XG4gICAgICAgIHRoaXMucHJvcHMuZ2V0SXRlbUNvdW50KHRoaXMucHJvcHMuZGF0YSkgPiBtaW5JbmRleEZvclZpc2libGVcbiAgICAgICAgICA/IFZpcnR1YWxpemVkTGlzdC5fZ2V0SXRlbUtleSh0aGlzLnByb3BzLCBtaW5JbmRleEZvclZpc2libGUpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgLy8gV2hlbiB3ZSBoYXZlIGEgbm9uLXplcm8gaW5pdGlhbFNjcm9sbEluZGV4LCB3ZSB3aWxsIHJlY2VpdmUgYVxuICAgICAgLy8gc2Nyb2xsIGV2ZW50IGxhdGVyIHNvIHRoaXMgd2lsbCBwcmV2ZW50IHRoZSB3aW5kb3cgZnJvbSB1cGRhdGluZ1xuICAgICAgLy8gdW50aWwgd2UgZ2V0IGEgdmFsaWQgb2Zmc2V0LlxuICAgICAgcGVuZGluZ1Njcm9sbFVwZGF0ZUNvdW50OlxuICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxJbmRleCAhPSBudWxsICYmXG4gICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbEluZGV4ID4gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcbiAgICB9O1xuICB9XG5cbiAgX2NoZWNrUHJvcHMocHJvcHM6IFByb3BzKSB7XG4gICAgY29uc3Qge29uU2Nyb2xsLCB3aW5kb3dTaXplLCBnZXRJdGVtQ291bnQsIGRhdGEsIGluaXRpYWxTY3JvbGxJbmRleH0gPVxuICAgICAgcHJvcHM7XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICFvblNjcm9sbCB8fCAhb25TY3JvbGwuX19pc05hdGl2ZSxcbiAgICAgICdDb21wb25lbnRzIGJhc2VkIG9uIFZpcnR1YWxpemVkTGlzdCBtdXN0IGJlIHdyYXBwZWQgd2l0aCBBbmltYXRlZC5jcmVhdGVBbmltYXRlZENvbXBvbmVudCAnICtcbiAgICAgICAgJ3RvIHN1cHBvcnQgbmF0aXZlIG9uU2Nyb2xsIGV2ZW50cyB3aXRoIHVzZU5hdGl2ZURyaXZlcicsXG4gICAgKTtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB3aW5kb3dTaXplT3JEZWZhdWx0KHdpbmRvd1NpemUpID4gMCxcbiAgICAgICdWaXJ0dWFsaXplZExpc3Q6IFRoZSB3aW5kb3dTaXplIHByb3AgbXVzdCBiZSBwcmVzZW50IGFuZCBzZXQgdG8gYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nLFxuICAgICk7XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICBnZXRJdGVtQ291bnQsXG4gICAgICAnVmlydHVhbGl6ZWRMaXN0OiBUaGUgXCJnZXRJdGVtQ291bnRcIiBwcm9wIG11c3QgYmUgcHJvdmlkZWQnLFxuICAgICk7XG5cbiAgICBjb25zdCBpdGVtQ291bnQgPSBnZXRJdGVtQ291bnQoZGF0YSk7XG5cbiAgICBpZiAoXG4gICAgICBpbml0aWFsU2Nyb2xsSW5kZXggIT0gbnVsbCAmJlxuICAgICAgIXRoaXMuX2hhc1RyaWdnZXJlZEluaXRpYWxTY3JvbGxUb0luZGV4ICYmXG4gICAgICAoaW5pdGlhbFNjcm9sbEluZGV4IDwgMCB8fFxuICAgICAgICAoaXRlbUNvdW50ID4gMCAmJiBpbml0aWFsU2Nyb2xsSW5kZXggPj0gaXRlbUNvdW50KSkgJiZcbiAgICAgICF0aGlzLl9oYXNXYXJuZWQuaW5pdGlhbFNjcm9sbEluZGV4XG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBpbml0aWFsU2Nyb2xsSW5kZXggXCIke2luaXRpYWxTY3JvbGxJbmRleH1cIiBpcyBub3QgdmFsaWQgKGxpc3QgaGFzICR7aXRlbUNvdW50fSBpdGVtcylgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX2hhc1dhcm5lZC5pbml0aWFsU2Nyb2xsSW5kZXggPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChfX0RFVl9fICYmICF0aGlzLl9oYXNXYXJuZWQuZmxleFdyYXApIHtcbiAgICAgIC8vICRGbG93Rml4TWVbdW5kZXJjb25zdHJhaW5lZC1pbXBsaWNpdC1pbnN0YW50aWF0aW9uXVxuICAgICAgY29uc3QgZmxhdFN0eWxlcyA9IFN0eWxlU2hlZXQuZmxhdHRlbih0aGlzLnByb3BzLmNvbnRlbnRDb250YWluZXJTdHlsZSk7XG4gICAgICBpZiAoZmxhdFN0eWxlcyAhPSBudWxsICYmIGZsYXRTdHlsZXMuZmxleFdyYXAgPT09ICd3cmFwJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ2BmbGV4V3JhcDogYHdyYXBgYCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggdGhlIGBWaXJ0dWFsaXplZExpc3RgIGNvbXBvbmVudHMuJyArXG4gICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgYG51bUNvbHVtbnNgIHdpdGggYEZsYXRMaXN0YCBpbnN0ZWFkLicsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hhc1dhcm5lZC5mbGV4V3JhcCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIF9maW5kSXRlbUluZGV4V2l0aEtleShcbiAgICBwcm9wczogUHJvcHMsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaGludDogP251bWJlcixcbiAgKTogP251bWJlciB7XG4gICAgY29uc3QgaXRlbUNvdW50ID0gcHJvcHMuZ2V0SXRlbUNvdW50KHByb3BzLmRhdGEpO1xuICAgIGlmIChoaW50ICE9IG51bGwgJiYgaGludCA+PSAwICYmIGhpbnQgPCBpdGVtQ291bnQpIHtcbiAgICAgIGNvbnN0IGN1cktleSA9IFZpcnR1YWxpemVkTGlzdC5fZ2V0SXRlbUtleShwcm9wcywgaGludCk7XG4gICAgICBpZiAoY3VyS2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGhpbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBpdGVtQ291bnQ7IGlpKyspIHtcbiAgICAgIGNvbnN0IGN1cktleSA9IFZpcnR1YWxpemVkTGlzdC5fZ2V0SXRlbUtleShwcm9wcywgaWkpO1xuICAgICAgaWYgKGN1cktleSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiBpaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgX2dldEl0ZW1LZXkoXG4gICAgcHJvcHM6IHtcbiAgICAgIGRhdGE6IFByb3BzWydkYXRhJ10sXG4gICAgICBnZXRJdGVtOiBQcm9wc1snZ2V0SXRlbSddLFxuICAgICAga2V5RXh0cmFjdG9yOiBQcm9wc1sna2V5RXh0cmFjdG9yJ10sXG4gICAgICAuLi5cbiAgICB9LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgaXRlbSA9IHByb3BzLmdldEl0ZW0ocHJvcHMuZGF0YSwgaW5kZXgpO1xuICAgIHJldHVybiBWaXJ0dWFsaXplZExpc3QuX2tleUV4dHJhY3RvcihpdGVtLCBpbmRleCwgcHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIF9jcmVhdGVSZW5kZXJNYXNrKFxuICAgIHByb3BzOiBQcm9wcyxcbiAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0OiB7Zmlyc3Q6IG51bWJlciwgbGFzdDogbnVtYmVyfSxcbiAgICBhZGRpdGlvbmFsUmVnaW9ucz86ID8kUmVhZE9ubHlBcnJheTx7Zmlyc3Q6IG51bWJlciwgbGFzdDogbnVtYmVyfT4sXG4gICk6IENlbGxSZW5kZXJNYXNrIHtcbiAgICBjb25zdCBpdGVtQ291bnQgPSBwcm9wcy5nZXRJdGVtQ291bnQocHJvcHMuZGF0YSk7XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0LmZpcnN0ID49IDAgJiZcbiAgICAgICAgY2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0ID49IGNlbGxzQXJvdW5kVmlld3BvcnQuZmlyc3QgLSAxICYmXG4gICAgICAgIGNlbGxzQXJvdW5kVmlld3BvcnQubGFzdCA8IGl0ZW1Db3VudCxcbiAgICAgIGBJbnZhbGlkIGNlbGxzIGFyb3VuZCB2aWV3cG9ydCBcIlske2NlbGxzQXJvdW5kVmlld3BvcnQuZmlyc3R9LCAke2NlbGxzQXJvdW5kVmlld3BvcnQubGFzdH1dXCIgd2FzIHBhc3NlZCB0byBWaXJ0dWFsaXplZExpc3QuX2NyZWF0ZVJlbmRlck1hc2tgLFxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJNYXNrID0gbmV3IENlbGxSZW5kZXJNYXNrKGl0ZW1Db3VudCk7XG5cbiAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgYWxsUmVnaW9ucyA9IFtjZWxsc0Fyb3VuZFZpZXdwb3J0LCAuLi4oYWRkaXRpb25hbFJlZ2lvbnMgPz8gW10pXTtcbiAgICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIGFsbFJlZ2lvbnMpIHtcbiAgICAgICAgcmVuZGVyTWFzay5hZGRDZWxscyhyZWdpb24pO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgaW5pdGlhbGx5IHJlbmRlcmVkIGNlbGxzIGFyZSByZXRhaW5lZCBhcyBwYXJ0IG9mIHRoZVxuICAgICAgLy8gXCJzY3JvbGwtdG8tdG9wXCIgb3B0aW1pemF0aW9uXG4gICAgICBpZiAocHJvcHMuaW5pdGlhbFNjcm9sbEluZGV4ID09IG51bGwgfHwgcHJvcHMuaW5pdGlhbFNjcm9sbEluZGV4IDw9IDApIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFJlZ2lvbiA9IFZpcnR1YWxpemVkTGlzdC5faW5pdGlhbFJlbmRlclJlZ2lvbihwcm9wcyk7XG4gICAgICAgIHJlbmRlck1hc2suYWRkQ2VsbHMoaW5pdGlhbFJlZ2lvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXlvdXQgY29vcmRpbmF0ZXMgb2Ygc3RpY2tlciBoZWFkZXJzIG1heSBiZSBvZmYtc2NyZWVuIHdoaWxlIHRoZVxuICAgICAgLy8gYWN0dWFsIGhlYWRlciBpcyBvbi1zY3JlZW4uIEtlZXAgdGhlIG1vc3QgcmVjZW50IGJlZm9yZSB0aGUgdmlld3BvcnRcbiAgICAgIC8vIHJlbmRlcmVkLCBldmVuIGlmIGl0cyBsYXlvdXQgY29vcmRpbmF0ZXMgYXJlIG5vdCBpbiB2aWV3cG9ydC5cbiAgICAgIGNvbnN0IHN0aWNreUluZGljZXNTZXQgPSBuZXcgU2V0KHByb3BzLnN0aWNreUhlYWRlckluZGljZXMpO1xuICAgICAgVmlydHVhbGl6ZWRMaXN0Ll9lbnN1cmVDbG9zZXN0U3RpY2t5SGVhZGVyKFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgc3RpY2t5SW5kaWNlc1NldCxcbiAgICAgICAgcmVuZGVyTWFzayxcbiAgICAgICAgY2VsbHNBcm91bmRWaWV3cG9ydC5maXJzdCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlck1hc2s7XG4gIH1cblxuICBzdGF0aWMgX2luaXRpYWxSZW5kZXJSZWdpb24ocHJvcHM6IFByb3BzKToge2ZpcnN0OiBudW1iZXIsIGxhc3Q6IG51bWJlcn0ge1xuICAgIGNvbnN0IGl0ZW1Db3VudCA9IHByb3BzLmdldEl0ZW1Db3VudChwcm9wcy5kYXRhKTtcblxuICAgIGNvbnN0IGZpcnN0Q2VsbEluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihwcm9wcy5pbml0aWFsU2Nyb2xsSW5kZXggPz8gMCkpLFxuICAgICk7XG5cbiAgICBjb25zdCBsYXN0Q2VsbEluZGV4ID1cbiAgICAgIE1hdGgubWluKFxuICAgICAgICBpdGVtQ291bnQsXG4gICAgICAgIGZpcnN0Q2VsbEluZGV4ICsgaW5pdGlhbE51bVRvUmVuZGVyT3JEZWZhdWx0KHByb3BzLmluaXRpYWxOdW1Ub1JlbmRlciksXG4gICAgICApIC0gMTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaXJzdDogZmlyc3RDZWxsSW5kZXgsXG4gICAgICBsYXN0OiBsYXN0Q2VsbEluZGV4LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgX2Vuc3VyZUNsb3Nlc3RTdGlja3lIZWFkZXIoXG4gICAgcHJvcHM6IFByb3BzLFxuICAgIHN0aWNreUluZGljZXNTZXQ6IFNldDxudW1iZXI+LFxuICAgIHJlbmRlck1hc2s6IENlbGxSZW5kZXJNYXNrLFxuICAgIGNlbGxJZHg6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc3Qgc3RpY2t5T2Zmc2V0ID0gcHJvcHMuTGlzdEhlYWRlckNvbXBvbmVudCA/IDEgOiAwO1xuXG4gICAgZm9yIChsZXQgaXRlbUlkeCA9IGNlbGxJZHggLSAxOyBpdGVtSWR4ID49IDA7IGl0ZW1JZHgtLSkge1xuICAgICAgaWYgKHN0aWNreUluZGljZXNTZXQuaGFzKGl0ZW1JZHggKyBzdGlja3lPZmZzZXQpKSB7XG4gICAgICAgIHJlbmRlck1hc2suYWRkQ2VsbHMoe2ZpcnN0OiBpdGVtSWR4LCBsYXN0OiBpdGVtSWR4fSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9hZGp1c3RDZWxsc0Fyb3VuZFZpZXdwb3J0KFxuICAgIHByb3BzOiBQcm9wcyxcbiAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0OiB7Zmlyc3Q6IG51bWJlciwgbGFzdDogbnVtYmVyfSxcbiAgICBwZW5kaW5nU2Nyb2xsVXBkYXRlQ291bnQ6IG51bWJlcixcbiAgKToge2ZpcnN0OiBudW1iZXIsIGxhc3Q6IG51bWJlcn0ge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRJdGVtQ291bnR9ID0gcHJvcHM7XG4gICAgY29uc3Qgb25FbmRSZWFjaGVkVGhyZXNob2xkID0gb25FbmRSZWFjaGVkVGhyZXNob2xkT3JEZWZhdWx0KFxuICAgICAgcHJvcHMub25FbmRSZWFjaGVkVGhyZXNob2xkLFxuICAgICk7XG4gICAgY29uc3Qge29mZnNldCwgdmlzaWJsZUxlbmd0aH0gPSB0aGlzLl9zY3JvbGxNZXRyaWNzO1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLl9saXN0TWV0cmljcy5nZXRDb250ZW50TGVuZ3RoKCk7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tRW5kID0gY29udGVudExlbmd0aCAtIHZpc2libGVMZW5ndGggLSBvZmZzZXQ7XG5cbiAgICAvLyBXYWl0IHVudGlsIHRoZSBzY3JvbGwgdmlldyBtZXRyaWNzIGhhdmUgYmVlbiBzZXQgdXAuIEFuZCB1bnRpbCB0aGVuLFxuICAgIC8vIHdlIHdpbGwgdHJ1c3QgdGhlIGluaXRpYWxOdW1Ub1JlbmRlciBzdWdnZXN0aW9uXG4gICAgaWYgKHZpc2libGVMZW5ndGggPD0gMCB8fCBjb250ZW50TGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiBjZWxsc0Fyb3VuZFZpZXdwb3J0Lmxhc3QgPj0gZ2V0SXRlbUNvdW50KGRhdGEpXG4gICAgICAgID8gVmlydHVhbGl6ZWRMaXN0Ll9jb25zdHJhaW5Ub0l0ZW1Db3VudChjZWxsc0Fyb3VuZFZpZXdwb3J0LCBwcm9wcylcbiAgICAgICAgOiBjZWxsc0Fyb3VuZFZpZXdwb3J0O1xuICAgIH1cblxuICAgIGxldCBuZXdDZWxsc0Fyb3VuZFZpZXdwb3J0OiB7Zmlyc3Q6IG51bWJlciwgbGFzdDogbnVtYmVyfTtcbiAgICBpZiAocHJvcHMuZGlzYWJsZVZpcnR1YWxpemF0aW9uKSB7XG4gICAgICBjb25zdCByZW5kZXJBaGVhZCA9XG4gICAgICAgIGRpc3RhbmNlRnJvbUVuZCA8IG9uRW5kUmVhY2hlZFRocmVzaG9sZCAqIHZpc2libGVMZW5ndGhcbiAgICAgICAgICA/IG1heFRvUmVuZGVyUGVyQmF0Y2hPckRlZmF1bHQocHJvcHMubWF4VG9SZW5kZXJQZXJCYXRjaClcbiAgICAgICAgICA6IDA7XG5cbiAgICAgIG5ld0NlbGxzQXJvdW5kVmlld3BvcnQgPSB7XG4gICAgICAgIGZpcnN0OiAwLFxuICAgICAgICBsYXN0OiBNYXRoLm1pbihcbiAgICAgICAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0Lmxhc3QgKyByZW5kZXJBaGVhZCxcbiAgICAgICAgICBnZXRJdGVtQ291bnQoZGF0YSkgLSAxLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmcgc2Nyb2xsIHVwZGF0ZSwgd2Ugc2hvdWxkIG5vdCBhZGp1c3QgdGhlIHJlbmRlciB3aW5kb3cgYXMgaXRcbiAgICAgIC8vIG1pZ2h0IG92ZXJyaWRlIHRoZSBjb3JyZWN0IHdpbmRvdy5cbiAgICAgIGlmIChwZW5kaW5nU2Nyb2xsVXBkYXRlQ291bnQgPiAwKSB7XG4gICAgICAgIHJldHVybiBjZWxsc0Fyb3VuZFZpZXdwb3J0Lmxhc3QgPj0gZ2V0SXRlbUNvdW50KGRhdGEpXG4gICAgICAgICAgPyBWaXJ0dWFsaXplZExpc3QuX2NvbnN0cmFpblRvSXRlbUNvdW50KGNlbGxzQXJvdW5kVmlld3BvcnQsIHByb3BzKVxuICAgICAgICAgIDogY2VsbHNBcm91bmRWaWV3cG9ydDtcbiAgICAgIH1cblxuICAgICAgbmV3Q2VsbHNBcm91bmRWaWV3cG9ydCA9IGNvbXB1dGVXaW5kb3dlZFJlbmRlckxpbWl0cyhcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIG1heFRvUmVuZGVyUGVyQmF0Y2hPckRlZmF1bHQocHJvcHMubWF4VG9SZW5kZXJQZXJCYXRjaCksXG4gICAgICAgIHdpbmRvd1NpemVPckRlZmF1bHQocHJvcHMud2luZG93U2l6ZSksXG4gICAgICAgIGNlbGxzQXJvdW5kVmlld3BvcnQsXG4gICAgICAgIHRoaXMuX2xpc3RNZXRyaWNzLFxuICAgICAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLFxuICAgICAgKTtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgbmV3Q2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0IDwgZ2V0SXRlbUNvdW50KGRhdGEpLFxuICAgICAgICAnY29tcHV0ZVdpbmRvd2VkUmVuZGVyTGltaXRzKCkgc2hvdWxkIHJldHVybiByYW5nZSBpbi1ib3VuZHMnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbmVzdGVkQ2hpbGRMaXN0cy5zaXplKCkgPiAwKSB7XG4gICAgICAvLyBJZiBzb21lIGNlbGwgaW4gdGhlIG5ldyBzdGF0ZSBoYXMgYSBjaGlsZCBsaXN0IGluIGl0LCB3ZSBzaG91bGQgb25seSByZW5kZXJcbiAgICAgIC8vIHVwIHRocm91Z2ggdGhhdCBpdGVtLCBzbyB0aGF0IHdlIGdpdmUgdGhhdCBsaXN0IGEgY2hhbmNlIHRvIHJlbmRlci5cbiAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSdzIGNodXJuIGZyb20gbXVsdGlwbGUgY2hpbGQgbGlzdHMgbW91bnRpbmcgYW5kIHVuLW1vdW50aW5nXG4gICAgICAvLyB0aGVpciBpdGVtcy5cblxuICAgICAgLy8gV2lsbCB0aGlzIHByZXZlbnQgcmVuZGVyaW5nIGlmIHRoZSBuZXN0ZWQgbGlzdCBkb2Vzbid0IHJlYWxpemUgdGhlIGVuZD9cbiAgICAgIGNvbnN0IGNoaWxkSWR4ID0gdGhpcy5fZmluZEZpcnN0Q2hpbGRXaXRoTW9yZShcbiAgICAgICAgbmV3Q2VsbHNBcm91bmRWaWV3cG9ydC5maXJzdCxcbiAgICAgICAgbmV3Q2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0LFxuICAgICAgKTtcblxuICAgICAgbmV3Q2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0ID0gY2hpbGRJZHggPz8gbmV3Q2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdDZWxsc0Fyb3VuZFZpZXdwb3J0O1xuICB9XG5cbiAgX2ZpbmRGaXJzdENoaWxkV2l0aE1vcmUoZmlyc3Q6IG51bWJlciwgbGFzdDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaWkgPSBmaXJzdDsgaWkgPD0gbGFzdDsgaWkrKykge1xuICAgICAgY29uc3QgY2VsbEtleUZvckluZGV4ID0gdGhpcy5faW5kaWNlc1RvS2V5cy5nZXQoaWkpO1xuICAgICAgaWYgKFxuICAgICAgICBjZWxsS2V5Rm9ySW5kZXggIT0gbnVsbCAmJlxuICAgICAgICB0aGlzLl9uZXN0ZWRDaGlsZExpc3RzLmFueUluQ2VsbChjZWxsS2V5Rm9ySW5kZXgsIGNoaWxkTGlzdCA9PlxuICAgICAgICAgIGNoaWxkTGlzdC5oYXNNb3JlKCksXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaWk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5faXNOZXN0ZWRXaXRoU2FtZU9yaWVudGF0aW9uKCkpIHtcbiAgICAgIHRoaXMuY29udGV4dC5yZWdpc3RlckFzTmVzdGVkQ2hpbGQoe1xuICAgICAgICByZWY6IHRoaXMsXG4gICAgICAgIGNlbGxLZXk6IHRoaXMuY29udGV4dC5jZWxsS2V5LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzTmVzdGVkV2l0aFNhbWVPcmllbnRhdGlvbigpKSB7XG4gICAgICB0aGlzLmNvbnRleHQudW5yZWdpc3RlckFzTmVzdGVkQ2hpbGQoe3JlZjogdGhpc30pO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGVDZWxsc1RvUmVuZGVyQmF0Y2hlci5kaXNwb3NlKHthYm9ydDogdHJ1ZX0pO1xuICAgIHRoaXMuX3ZpZXdhYmlsaXR5VHVwbGVzLmZvckVhY2godHVwbGUgPT4ge1xuICAgICAgdHVwbGUudmlld2FiaWxpdHlIZWxwZXIuZGlzcG9zZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2ZpbGxSYXRlSGVscGVyLmRlYWN0aXZhdGVBbmRGbHVzaCgpO1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXdQcm9wczogUHJvcHMsIHByZXZTdGF0ZTogU3RhdGUpOiBTdGF0ZSB7XG4gICAgLy8gZmlyc3QgYW5kIGxhc3QgY291bGQgYmUgc3RhbGUgKGUuZy4gaWYgYSBuZXcsIHNob3J0ZXIgaXRlbXMgcHJvcHMgaXMgcGFzc2VkIGluKSwgc28gd2UgbWFrZVxuICAgIC8vIHN1cmUgd2UncmUgcmVuZGVyaW5nIGEgcmVhc29uYWJsZSByYW5nZSBoZXJlLlxuICAgIGNvbnN0IGl0ZW1Db3VudCA9IG5ld1Byb3BzLmdldEl0ZW1Db3VudChuZXdQcm9wcy5kYXRhKTtcbiAgICBpZiAoaXRlbUNvdW50ID09PSBwcmV2U3RhdGUucmVuZGVyTWFzay5udW1DZWxscygpKSB7XG4gICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgIH1cblxuICAgIGxldCBtYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb25BZGp1c3RtZW50OiA/bnVtYmVyID0gbnVsbDtcbiAgICBjb25zdCBwcmV2Rmlyc3RWaXNpYmxlSXRlbUtleSA9IHByZXZTdGF0ZS5maXJzdFZpc2libGVJdGVtS2V5O1xuICAgIGNvbnN0IG1pbkluZGV4Rm9yVmlzaWJsZSA9XG4gICAgICBuZXdQcm9wcy5tYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb24/Lm1pbkluZGV4Rm9yVmlzaWJsZSA/PyAwO1xuICAgIGNvbnN0IG5ld0ZpcnN0VmlzaWJsZUl0ZW1LZXkgPVxuICAgICAgbmV3UHJvcHMuZ2V0SXRlbUNvdW50KG5ld1Byb3BzLmRhdGEpID4gbWluSW5kZXhGb3JWaXNpYmxlXG4gICAgICAgID8gVmlydHVhbGl6ZWRMaXN0Ll9nZXRJdGVtS2V5KG5ld1Byb3BzLCBtaW5JbmRleEZvclZpc2libGUpXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoXG4gICAgICBuZXdQcm9wcy5tYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb24gIT0gbnVsbCAmJlxuICAgICAgcHJldkZpcnN0VmlzaWJsZUl0ZW1LZXkgIT0gbnVsbCAmJlxuICAgICAgbmV3Rmlyc3RWaXNpYmxlSXRlbUtleSAhPSBudWxsXG4gICAgKSB7XG4gICAgICBpZiAobmV3Rmlyc3RWaXNpYmxlSXRlbUtleSAhPT0gcHJldkZpcnN0VmlzaWJsZUl0ZW1LZXkpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoIGlmIGl0ZW1zIHdlcmUgYWRkZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LlxuICAgICAgICBjb25zdCBoaW50ID1cbiAgICAgICAgICBpdGVtQ291bnQgLSBwcmV2U3RhdGUucmVuZGVyTWFzay5udW1DZWxscygpICsgbWluSW5kZXhGb3JWaXNpYmxlO1xuICAgICAgICBjb25zdCBmaXJzdFZpc2libGVJdGVtSW5kZXggPSBWaXJ0dWFsaXplZExpc3QuX2ZpbmRJdGVtSW5kZXhXaXRoS2V5KFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIHByZXZGaXJzdFZpc2libGVJdGVtS2V5LFxuICAgICAgICAgIGhpbnQsXG4gICAgICAgICk7XG4gICAgICAgIG1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbkFkanVzdG1lbnQgPVxuICAgICAgICAgIGZpcnN0VmlzaWJsZUl0ZW1JbmRleCAhPSBudWxsXG4gICAgICAgICAgICA/IGZpcnN0VmlzaWJsZUl0ZW1JbmRleCAtIG1pbkluZGV4Rm9yVmlzaWJsZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFpbnRhaW5WaXNpYmxlQ29udGVudFBvc2l0aW9uQWRqdXN0bWVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RyYWluZWRDZWxscyA9IFZpcnR1YWxpemVkTGlzdC5fY29uc3RyYWluVG9JdGVtQ291bnQoXG4gICAgICBtYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb25BZGp1c3RtZW50ICE9IG51bGxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBmaXJzdDpcbiAgICAgICAgICAgICAgcHJldlN0YXRlLmNlbGxzQXJvdW5kVmlld3BvcnQuZmlyc3QgK1xuICAgICAgICAgICAgICBtYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb25BZGp1c3RtZW50LFxuICAgICAgICAgICAgbGFzdDpcbiAgICAgICAgICAgICAgcHJldlN0YXRlLmNlbGxzQXJvdW5kVmlld3BvcnQubGFzdCArXG4gICAgICAgICAgICAgIG1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbkFkanVzdG1lbnQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHByZXZTdGF0ZS5jZWxsc0Fyb3VuZFZpZXdwb3J0LFxuICAgICAgbmV3UHJvcHMsXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0OiBjb25zdHJhaW5lZENlbGxzLFxuICAgICAgcmVuZGVyTWFzazogVmlydHVhbGl6ZWRMaXN0Ll9jcmVhdGVSZW5kZXJNYXNrKG5ld1Byb3BzLCBjb25zdHJhaW5lZENlbGxzKSxcbiAgICAgIGZpcnN0VmlzaWJsZUl0ZW1LZXk6IG5ld0ZpcnN0VmlzaWJsZUl0ZW1LZXksXG4gICAgICBwZW5kaW5nU2Nyb2xsVXBkYXRlQ291bnQ6XG4gICAgICAgIG1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbkFkanVzdG1lbnQgIT0gbnVsbFxuICAgICAgICAgID8gcHJldlN0YXRlLnBlbmRpbmdTY3JvbGxVcGRhdGVDb3VudCArIDFcbiAgICAgICAgICA6IHByZXZTdGF0ZS5wZW5kaW5nU2Nyb2xsVXBkYXRlQ291bnQsXG4gICAgfTtcbiAgfVxuXG4gIF9wdXNoQ2VsbHMoXG4gICAgY2VsbHM6IEFycmF5PE9iamVjdD4sXG4gICAgc3RpY2t5SGVhZGVySW5kaWNlczogQXJyYXk8bnVtYmVyPixcbiAgICBzdGlja3lJbmRpY2VzRnJvbVByb3BzOiBTZXQ8bnVtYmVyPixcbiAgICBmaXJzdDogbnVtYmVyLFxuICAgIGxhc3Q6IG51bWJlcixcbiAgICBpbnZlcnNpb25TdHlsZTogVmlld1N0eWxlUHJvcCxcbiAgKSB7XG4gICAgY29uc3Qge1xuICAgICAgQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgSXRlbVNlcGFyYXRvckNvbXBvbmVudCxcbiAgICAgIExpc3RIZWFkZXJDb21wb25lbnQsXG4gICAgICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgIGRhdGEsXG4gICAgICBkZWJ1ZyxcbiAgICAgIGdldEl0ZW0sXG4gICAgICBnZXRJdGVtQ291bnQsXG4gICAgICBnZXRJdGVtTGF5b3V0LFxuICAgICAgaG9yaXpvbnRhbCxcbiAgICAgIHJlbmRlckl0ZW0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgc3RpY2t5T2Zmc2V0ID0gTGlzdEhlYWRlckNvbXBvbmVudCA/IDEgOiAwO1xuICAgIGNvbnN0IGVuZCA9IGdldEl0ZW1Db3VudChkYXRhKSAtIDE7XG4gICAgbGV0IHByZXZDZWxsS2V5O1xuICAgIGxhc3QgPSBNYXRoLm1pbihlbmQsIGxhc3QpO1xuXG4gICAgZm9yIChsZXQgaWkgPSBmaXJzdDsgaWkgPD0gbGFzdDsgaWkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGdldEl0ZW0oZGF0YSwgaWkpO1xuICAgICAgY29uc3Qga2V5ID0gVmlydHVhbGl6ZWRMaXN0Ll9rZXlFeHRyYWN0b3IoaXRlbSwgaWksIHRoaXMucHJvcHMpO1xuXG4gICAgICB0aGlzLl9pbmRpY2VzVG9LZXlzLnNldChpaSwga2V5KTtcbiAgICAgIGlmIChzdGlja3lJbmRpY2VzRnJvbVByb3BzLmhhcyhpaSArIHN0aWNreU9mZnNldCkpIHtcbiAgICAgICAgc3RpY2t5SGVhZGVySW5kaWNlcy5wdXNoKGNlbGxzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZExpc3RlbkZvckxheW91dCA9XG4gICAgICAgIGdldEl0ZW1MYXlvdXQgPT0gbnVsbCB8fCBkZWJ1ZyB8fCB0aGlzLl9maWxsUmF0ZUhlbHBlci5lbmFibGVkKCk7XG5cbiAgICAgIGNlbGxzLnB1c2goXG4gICAgICAgIDxDZWxsUmVuZGVyZXJcbiAgICAgICAgICBDZWxsUmVuZGVyZXJDb21wb25lbnQ9e0NlbGxSZW5kZXJlckNvbXBvbmVudH1cbiAgICAgICAgICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50PXtpaSA8IGVuZCA/IEl0ZW1TZXBhcmF0b3JDb21wb25lbnQgOiB1bmRlZmluZWR9XG4gICAgICAgICAgTGlzdEl0ZW1Db21wb25lbnQ9e0xpc3RJdGVtQ29tcG9uZW50fVxuICAgICAgICAgIGNlbGxLZXk9e2tleX1cbiAgICAgICAgICBob3Jpem9udGFsPXtob3Jpem9udGFsfVxuICAgICAgICAgIGluZGV4PXtpaX1cbiAgICAgICAgICBpbnZlcnNpb25TdHlsZT17aW52ZXJzaW9uU3R5bGV9XG4gICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBwcmV2Q2VsbEtleT17cHJldkNlbGxLZXl9XG4gICAgICAgICAgb25VcGRhdGVTZXBhcmF0b3JzPXt0aGlzLl9vblVwZGF0ZVNlcGFyYXRvcnN9XG4gICAgICAgICAgb25DZWxsRm9jdXNDYXB0dXJlPXt0aGlzLl9vbkNlbGxGb2N1c0NhcHR1cmV9XG4gICAgICAgICAgb25Vbm1vdW50PXt0aGlzLl9vbkNlbGxVbm1vdW50fVxuICAgICAgICAgIHJlZj17cmVmID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NlbGxSZWZzW2tleV0gPSByZWY7XG4gICAgICAgICAgfX1cbiAgICAgICAgICByZW5kZXJJdGVtPXtyZW5kZXJJdGVtfVxuICAgICAgICAgIHsuLi4oc2hvdWxkTGlzdGVuRm9yTGF5b3V0ICYmIHtcbiAgICAgICAgICAgIG9uQ2VsbExheW91dDogdGhpcy5fb25DZWxsTGF5b3V0LFxuICAgICAgICAgIH0pfVxuICAgICAgICAvPixcbiAgICAgICk7XG4gICAgICBwcmV2Q2VsbEtleSA9IGtleTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgX2NvbnN0cmFpblRvSXRlbUNvdW50KFxuICAgIGNlbGxzOiB7Zmlyc3Q6IG51bWJlciwgbGFzdDogbnVtYmVyfSxcbiAgICBwcm9wczogUHJvcHMsXG4gICk6IHtmaXJzdDogbnVtYmVyLCBsYXN0OiBudW1iZXJ9IHtcbiAgICBjb25zdCBpdGVtQ291bnQgPSBwcm9wcy5nZXRJdGVtQ291bnQocHJvcHMuZGF0YSk7XG4gICAgY29uc3QgbGFzdFBvc3NpYmxlQ2VsbEluZGV4ID0gaXRlbUNvdW50IC0gMTtcblxuICAgIC8vIENvbnN0cmFpbmluZyBgbGFzdGAgbWF5IHNpZ25pZmljYW50bHkgc2hyaW5rIHRoZSB3aW5kb3cuIEFkanVzdCBgZmlyc3RgXG4gICAgLy8gdG8gZXhwYW5kIHRoZSB3aW5kb3cgaWYgdGhlIG5ldyBgbGFzdGAgcmVzdWx0cyBpbiBhIG5ldyB3aW5kb3cgc21hbGxlclxuICAgIC8vIHRoYW4gdGhlIG51bWJlciBvZiBjZWxscyByZW5kZXJlZCBwZXIgYmF0Y2guXG4gICAgY29uc3QgbWF4VG9SZW5kZXJQZXJCYXRjaCA9IG1heFRvUmVuZGVyUGVyQmF0Y2hPckRlZmF1bHQoXG4gICAgICBwcm9wcy5tYXhUb1JlbmRlclBlckJhdGNoLFxuICAgICk7XG4gICAgY29uc3QgbWF4Rmlyc3QgPSBNYXRoLm1heCgwLCBsYXN0UG9zc2libGVDZWxsSW5kZXggLSBtYXhUb1JlbmRlclBlckJhdGNoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaXJzdDogY2xhbXAoMCwgY2VsbHMuZmlyc3QsIG1heEZpcnN0KSxcbiAgICAgIGxhc3Q6IE1hdGgubWluKGxhc3RQb3NzaWJsZUNlbGxJbmRleCwgY2VsbHMubGFzdCksXG4gICAgfTtcbiAgfVxuXG4gIF9vblVwZGF0ZVNlcGFyYXRvcnMgPSAoa2V5czogQXJyYXk8P3N0cmluZz4sIG5ld1Byb3BzOiBPYmplY3QpID0+IHtcbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IGtleSAhPSBudWxsICYmIHRoaXMuX2NlbGxSZWZzW2tleV07XG4gICAgICByZWYgJiYgcmVmLnVwZGF0ZVNlcGFyYXRvclByb3BzKG5ld1Byb3BzKTtcbiAgICB9KTtcbiAgfTtcblxuICBfaXNOZXN0ZWRXaXRoU2FtZU9yaWVudGF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5lc3RlZENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgcmV0dXJuICEhKFxuICAgICAgbmVzdGVkQ29udGV4dCAmJlxuICAgICAgISFuZXN0ZWRDb250ZXh0Lmhvcml6b250YWwgPT09IGhvcml6b250YWxPckRlZmF1bHQodGhpcy5wcm9wcy5ob3Jpem9udGFsKVxuICAgICk7XG4gIH1cblxuICBfZ2V0U3BhY2VyS2V5ID0gKGlzVmVydGljYWw6IGJvb2xlYW4pOiBzdHJpbmcgPT5cbiAgICBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIHN0YXRpYyBfa2V5RXh0cmFjdG9yKFxuICAgIGl0ZW06IEl0ZW0sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwcm9wczoge1xuICAgICAga2V5RXh0cmFjdG9yPzogPyhpdGVtOiBJdGVtLCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcsXG4gICAgICAuLi5cbiAgICB9LFxuICApOiBzdHJpbmcge1xuICAgIGlmIChwcm9wcy5rZXlFeHRyYWN0b3IgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHByb3BzLmtleUV4dHJhY3RvcihpdGVtLCBpbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZGVmYXVsdEtleUV4dHJhY3RvcihpdGVtLCBpbmRleCk7XG4gICAgaWYgKGtleSA9PT0gU3RyaW5nKGluZGV4KSkge1xuICAgICAgX3VzZWRJbmRleEZvcktleSA9IHRydWU7XG4gICAgICBpZiAoaXRlbS50eXBlICYmIGl0ZW0udHlwZS5kaXNwbGF5TmFtZSkge1xuICAgICAgICBfa2V5bGVzc0l0ZW1Db21wb25lbnROYW1lID0gaXRlbS50eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHRoaXMuX2NoZWNrUHJvcHModGhpcy5wcm9wcyk7XG4gICAgY29uc3Qge0xpc3RFbXB0eUNvbXBvbmVudCwgTGlzdEZvb3RlckNvbXBvbmVudCwgTGlzdEhlYWRlckNvbXBvbmVudH0gPVxuICAgICAgdGhpcy5wcm9wcztcbiAgICBjb25zdCB7ZGF0YSwgaG9yaXpvbnRhbH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGludmVyc2lvblN0eWxlID0gdGhpcy5wcm9wcy5pbnZlcnRlZFxuICAgICAgPyBob3Jpem9udGFsT3JEZWZhdWx0KHRoaXMucHJvcHMuaG9yaXpvbnRhbClcbiAgICAgICAgPyBzdHlsZXMuaG9yaXpvbnRhbGx5SW52ZXJ0ZWRcbiAgICAgICAgOiBzdHlsZXMudmVydGljYWxseUludmVydGVkXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgY2VsbHM6IEFycmF5PGFueSB8IFJlYWN0Lk5vZGU+ID0gW107XG4gICAgY29uc3Qgc3RpY2t5SW5kaWNlc0Zyb21Qcm9wcyA9IG5ldyBTZXQodGhpcy5wcm9wcy5zdGlja3lIZWFkZXJJbmRpY2VzKTtcbiAgICBjb25zdCBzdGlja3lIZWFkZXJJbmRpY2VzID0gW107XG5cbiAgICAvLyAxLiBBZGQgY2VsbCBmb3IgTGlzdEhlYWRlckNvbXBvbmVudFxuICAgIGlmIChMaXN0SGVhZGVyQ29tcG9uZW50KSB7XG4gICAgICBpZiAoc3RpY2t5SW5kaWNlc0Zyb21Qcm9wcy5oYXMoMCkpIHtcbiAgICAgICAgc3RpY2t5SGVhZGVySW5kaWNlcy5wdXNoKDApO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IFJlYWN0LmlzVmFsaWRFbGVtZW50KExpc3RIZWFkZXJDb21wb25lbnQpID8gKFxuICAgICAgICBMaXN0SGVhZGVyQ29tcG9uZW50XG4gICAgICApIDogKFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW25vdC1hLWNvbXBvbmVudF1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZS1hcmddXG4gICAgICAgIDxMaXN0SGVhZGVyQ29tcG9uZW50IC8+XG4gICAgICApO1xuICAgICAgY2VsbHMucHVzaChcbiAgICAgICAgPFZpcnR1YWxpemVkTGlzdENlbGxDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgICBjZWxsS2V5PXt0aGlzLl9nZXRDZWxsS2V5KCkgKyAnLWhlYWRlcid9XG4gICAgICAgICAga2V5PVwiJGhlYWRlclwiPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhhdCBoZWFkZXIgY29tcG9uZW50IHdpbGwgYmUgYSBzaW5nbGUgbmF0aXZlIHZpZXcgc28gbWFrZSBpdFxuICAgICAgICAgICAgLy8gbm90IGNvbGxhcHNhYmxlIHRvIGF2b2lkIHRoaXMgdmlldyBiZWluZyBmbGF0dGVuZWQgYW5kIG1ha2UgdGhpcyBhc3N1bXB0aW9uXG4gICAgICAgICAgICAvLyBubyBsb25nZXIgdHJ1ZS5cbiAgICAgICAgICAgIGNvbGxhcHNhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLl9vbkxheW91dEhlYWRlcn1cbiAgICAgICAgICAgIHN0eWxlPXtTdHlsZVNoZWV0LmNvbXBvc2UoXG4gICAgICAgICAgICAgIGludmVyc2lvblN0eWxlLFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLkxpc3RIZWFkZXJDb21wb25lbnRTdHlsZSxcbiAgICAgICAgICAgICl9PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSAtIFR5cGluZyBSZWFjdE5hdGl2ZUNvbXBvbmVudCByZXZlYWxlZCBlcnJvcnNcbiAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaXJ0dWFsaXplZExpc3RDZWxsQ29udGV4dFByb3ZpZGVyPixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gMmEuIEFkZCBhIGNlbGwgZm9yIExpc3RFbXB0eUNvbXBvbmVudCBpZiBhcHBsaWNhYmxlXG4gICAgY29uc3QgaXRlbUNvdW50ID0gdGhpcy5wcm9wcy5nZXRJdGVtQ291bnQoZGF0YSk7XG4gICAgaWYgKGl0ZW1Db3VudCA9PT0gMCAmJiBMaXN0RW1wdHlDb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQ6IFJlYWN0LkVsZW1lbnQ8YW55PiA9ICgoUmVhY3QuaXNWYWxpZEVsZW1lbnQoXG4gICAgICAgIExpc3RFbXB0eUNvbXBvbmVudCxcbiAgICAgICkgPyAoXG4gICAgICAgIExpc3RFbXB0eUNvbXBvbmVudFxuICAgICAgKSA6IChcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtub3QtYS1jb21wb25lbnRdXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGUtYXJnXVxuICAgICAgICA8TGlzdEVtcHR5Q29tcG9uZW50IC8+XG4gICAgICApKTogYW55KTtcbiAgICAgIGNlbGxzLnB1c2goXG4gICAgICAgIDxWaXJ0dWFsaXplZExpc3RDZWxsQ29udGV4dFByb3ZpZGVyXG4gICAgICAgICAgY2VsbEtleT17dGhpcy5fZ2V0Q2VsbEtleSgpICsgJy1lbXB0eSd9XG4gICAgICAgICAga2V5PVwiJGVtcHR5XCI+XG4gICAgICAgICAge1JlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7XG4gICAgICAgICAgICBvbkxheW91dDogKGV2ZW50OiBMYXlvdXRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9vbkxheW91dEVtcHR5KGV2ZW50KTtcbiAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFJlYWN0LkVsZW1lbnQgaW50ZXJuYWwgaW5zcGVjdGlvblxuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wcm9wcy5vbkxheW91dCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQucHJvcHMub25MYXlvdXQoZXZlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFJlYWN0LkVsZW1lbnQgaW50ZXJuYWwgaW5zcGVjdGlvblxuICAgICAgICAgICAgc3R5bGU6IFN0eWxlU2hlZXQuY29tcG9zZShpbnZlcnNpb25TdHlsZSwgZWxlbWVudC5wcm9wcy5zdHlsZSksXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlydHVhbGl6ZWRMaXN0Q2VsbENvbnRleHRQcm92aWRlcj4sXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIDJiLiBBZGQgY2VsbHMgYW5kIHNwYWNlcnMgZm9yIGVhY2ggaXRlbVxuICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICBfdXNlZEluZGV4Rm9yS2V5ID0gZmFsc2U7XG4gICAgICBfa2V5bGVzc0l0ZW1Db21wb25lbnROYW1lID0gJyc7XG4gICAgICBjb25zdCBzcGFjZXJLZXkgPSB0aGlzLl9nZXRTcGFjZXJLZXkoIWhvcml6b250YWwpO1xuXG4gICAgICBjb25zdCByZW5kZXJSZWdpb25zID0gdGhpcy5zdGF0ZS5yZW5kZXJNYXNrLmVudW1lcmF0ZVJlZ2lvbnMoKTtcbiAgICAgIGNvbnN0IGxhc3RSZWdpb24gPSByZW5kZXJSZWdpb25zW3JlbmRlclJlZ2lvbnMubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBsYXN0U3BhY2VyID0gbGFzdFJlZ2lvbj8uaXNTcGFjZXIgPyBsYXN0UmVnaW9uIDogbnVsbDtcblxuICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHJlbmRlclJlZ2lvbnMpIHtcbiAgICAgICAgaWYgKHNlY3Rpb24uaXNTcGFjZXIpIHtcbiAgICAgICAgICAvLyBMZWdhY3kgYmVoYXZpb3IgaXMgdG8gYXZvaWQgc3BhY2VycyB3aGVuIHZpcnR1YWxpemF0aW9uIGlzXG4gICAgICAgICAgLy8gZGlzYWJsZWQgKGluY2x1ZGluZyBoZWFkIHNwYWNlcnMgb24gaW5pdGlhbCByZW5kZXIpLlxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVWaXJ0dWFsaXphdGlvbikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gV2l0aG91dCBnZXRJdGVtTGF5b3V0LCB3ZSBsaW1pdCBvdXIgdGFpbCBzcGFjZXIgdG8gdGhlIF9oaWdoZXN0TWVhc3VyZWRGcmFtZUluZGV4IHRvXG4gICAgICAgICAgLy8gcHJldmVudCB0aGUgdXNlciBmb3IgaHlwZXJzY3JvbGxpbmcgaW50byB1bi1tZWFzdXJlZCBhcmVhIGJlY2F1c2Ugb3RoZXJ3aXNlIGNvbnRlbnQgd2lsbFxuICAgICAgICAgIC8vIGxpa2VseSBqdW1wIGFyb3VuZCBhcyBpdCByZW5kZXJzIGluIGFib3ZlIHRoZSB2aWV3cG9ydC5cbiAgICAgICAgICBjb25zdCBpc0xhc3RTcGFjZXIgPSBzZWN0aW9uID09PSBsYXN0U3BhY2VyO1xuICAgICAgICAgIGNvbnN0IGNvbnN0cmFpblRvTWVhc3VyZWQgPSBpc0xhc3RTcGFjZXIgJiYgIXRoaXMucHJvcHMuZ2V0SXRlbUxheW91dDtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gY29uc3RyYWluVG9NZWFzdXJlZFxuICAgICAgICAgICAgPyBjbGFtcChcbiAgICAgICAgICAgICAgICBzZWN0aW9uLmZpcnN0IC0gMSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uLmxhc3QsXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlzdE1ldHJpY3MuZ2V0SGlnaGVzdE1lYXN1cmVkQ2VsbEluZGV4KCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2VjdGlvbi5sYXN0O1xuXG4gICAgICAgICAgY29uc3QgZmlyc3RNZXRyaWNzID0gdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q2VsbE1ldHJpY3NBcHByb3goXG4gICAgICAgICAgICBzZWN0aW9uLmZpcnN0LFxuICAgICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxhc3RNZXRyaWNzID0gdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q2VsbE1ldHJpY3NBcHByb3goXG4gICAgICAgICAgICBsYXN0LFxuICAgICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHNwYWNlclNpemUgPVxuICAgICAgICAgICAgbGFzdE1ldHJpY3Mub2Zmc2V0ICsgbGFzdE1ldHJpY3MubGVuZ3RoIC0gZmlyc3RNZXRyaWNzLm9mZnNldDtcbiAgICAgICAgICBjZWxscy5wdXNoKFxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAga2V5PXtgJHNwYWNlci0ke3NlY3Rpb24uZmlyc3R9YH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tbc3BhY2VyS2V5XTogc3BhY2VyU2l6ZX19XG4gICAgICAgICAgICAvPixcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3B1c2hDZWxscyhcbiAgICAgICAgICAgIGNlbGxzLFxuICAgICAgICAgICAgc3RpY2t5SGVhZGVySW5kaWNlcyxcbiAgICAgICAgICAgIHN0aWNreUluZGljZXNGcm9tUHJvcHMsXG4gICAgICAgICAgICBzZWN0aW9uLmZpcnN0LFxuICAgICAgICAgICAgc2VjdGlvbi5sYXN0LFxuICAgICAgICAgICAgaW52ZXJzaW9uU3R5bGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2hhc1dhcm5lZC5rZXlzICYmIF91c2VkSW5kZXhGb3JLZXkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdWaXJ0dWFsaXplZExpc3Q6IG1pc3Npbmcga2V5cyBmb3IgaXRlbXMsIG1ha2Ugc3VyZSB0byBzcGVjaWZ5IGEga2V5IG9yIGlkIHByb3BlcnR5IG9uIGVhY2ggJyArXG4gICAgICAgICAgICAnaXRlbSBvciBwcm92aWRlIGEgY3VzdG9tIGtleUV4dHJhY3Rvci4nLFxuICAgICAgICAgIF9rZXlsZXNzSXRlbUNvbXBvbmVudE5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hhc1dhcm5lZC5rZXlzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBBZGQgY2VsbCBmb3IgTGlzdEZvb3RlckNvbXBvbmVudFxuICAgIGlmIChMaXN0Rm9vdGVyQ29tcG9uZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gUmVhY3QuaXNWYWxpZEVsZW1lbnQoTGlzdEZvb3RlckNvbXBvbmVudCkgPyAoXG4gICAgICAgIExpc3RGb290ZXJDb21wb25lbnRcbiAgICAgICkgOiAoXG4gICAgICAgIC8vICRGbG93Rml4TWVbbm90LWEtY29tcG9uZW50XVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlLWFyZ11cbiAgICAgICAgPExpc3RGb290ZXJDb21wb25lbnQgLz5cbiAgICAgICk7XG4gICAgICBjZWxscy5wdXNoKFxuICAgICAgICA8VmlydHVhbGl6ZWRMaXN0Q2VsbENvbnRleHRQcm92aWRlclxuICAgICAgICAgIGNlbGxLZXk9e3RoaXMuX2dldEZvb3RlckNlbGxLZXkoKX1cbiAgICAgICAgICBrZXk9XCIkZm9vdGVyXCI+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLl9vbkxheW91dEZvb3Rlcn1cbiAgICAgICAgICAgIHN0eWxlPXtTdHlsZVNoZWV0LmNvbXBvc2UoXG4gICAgICAgICAgICAgIGludmVyc2lvblN0eWxlLFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLkxpc3RGb290ZXJDb21wb25lbnRTdHlsZSxcbiAgICAgICAgICAgICl9PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSAtIFR5cGluZyBSZWFjdE5hdGl2ZUNvbXBvbmVudCByZXZlYWxlZCBlcnJvcnNcbiAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaXJ0dWFsaXplZExpc3RDZWxsQ29udGV4dFByb3ZpZGVyPixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gNC4gUmVuZGVyIHRoZSBTY3JvbGxWaWV3XG4gICAgY29uc3Qgc2Nyb2xsUHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgb25Db250ZW50U2l6ZUNoYW5nZTogdGhpcy5fb25Db250ZW50U2l6ZUNoYW5nZSxcbiAgICAgIG9uTGF5b3V0OiB0aGlzLl9vbkxheW91dCxcbiAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgIG9uU2Nyb2xsQmVnaW5EcmFnOiB0aGlzLl9vblNjcm9sbEJlZ2luRHJhZyxcbiAgICAgIG9uU2Nyb2xsRW5kRHJhZzogdGhpcy5fb25TY3JvbGxFbmREcmFnLFxuICAgICAgb25Nb21lbnR1bVNjcm9sbEJlZ2luOiB0aGlzLl9vbk1vbWVudHVtU2Nyb2xsQmVnaW4sXG4gICAgICBvbk1vbWVudHVtU2Nyb2xsRW5kOiB0aGlzLl9vbk1vbWVudHVtU2Nyb2xsRW5kLFxuICAgICAgLy8gaU9TL21hY09TIHJlcXVpcmVzIGEgbm9uLXplcm8gc2Nyb2xsRXZlbnRUaHJvdHRsZSB0byBmaXJlIG1vcmUgdGhhbiBhXG4gICAgICAvLyBzaW5nbGUgbm90aWZpY2F0aW9uIHdoaWxlIHNjcm9sbGluZy4gVGhpcyB3aWxsIG90aGVyd2lzZSBuby1vcC5cbiAgICAgIHNjcm9sbEV2ZW50VGhyb3R0bGU6IHRoaXMucHJvcHMuc2Nyb2xsRXZlbnRUaHJvdHRsZSA/PyAwLjAwMDEsXG4gICAgICBpbnZlcnRTdGlja3lIZWFkZXJzOlxuICAgICAgICB0aGlzLnByb3BzLmludmVydFN0aWNreUhlYWRlcnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbnZlcnRTdGlja3lIZWFkZXJzXG4gICAgICAgICAgOiB0aGlzLnByb3BzLmludmVydGVkLFxuICAgICAgc3RpY2t5SGVhZGVySW5kaWNlcyxcbiAgICAgIHN0eWxlOiBpbnZlcnNpb25TdHlsZVxuICAgICAgICA/IFtpbnZlcnNpb25TdHlsZSwgdGhpcy5wcm9wcy5zdHlsZV1cbiAgICAgICAgOiB0aGlzLnByb3BzLnN0eWxlLFxuICAgICAgaXNJbnZlcnRlZFZpcnR1YWxpemVkTGlzdDogdGhpcy5wcm9wcy5pbnZlcnRlZCxcbiAgICAgIG1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbjpcbiAgICAgICAgdGhpcy5wcm9wcy5tYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb24gIT0gbnVsbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLm1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbixcbiAgICAgICAgICAgICAgLy8gQWRqdXN0IGluZGV4IHRvIGFjY291bnQgZm9yIExpc3RIZWFkZXJDb21wb25lbnQuXG4gICAgICAgICAgICAgIG1pbkluZGV4Rm9yVmlzaWJsZTpcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbi5taW5JbmRleEZvclZpc2libGUgK1xuICAgICAgICAgICAgICAgICh0aGlzLnByb3BzLkxpc3RIZWFkZXJDb21wb25lbnQgPyAxIDogMCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIHRoaXMuX2hhc01vcmUgPSB0aGlzLnN0YXRlLmNlbGxzQXJvdW5kVmlld3BvcnQubGFzdCA8IGl0ZW1Db3VudCAtIDE7XG5cbiAgICBjb25zdCBpbm5lclJldCA9IChcbiAgICAgIDxWaXJ0dWFsaXplZExpc3RDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBjZWxsS2V5OiBudWxsLFxuICAgICAgICAgIGdldFNjcm9sbE1ldHJpY3M6IHRoaXMuX2dldFNjcm9sbE1ldHJpY3MsXG4gICAgICAgICAgaG9yaXpvbnRhbDogaG9yaXpvbnRhbE9yRGVmYXVsdCh0aGlzLnByb3BzLmhvcml6b250YWwpLFxuICAgICAgICAgIGdldE91dGVybW9zdFBhcmVudExpc3RSZWY6IHRoaXMuX2dldE91dGVybW9zdFBhcmVudExpc3RSZWYsXG4gICAgICAgICAgcmVnaXN0ZXJBc05lc3RlZENoaWxkOiB0aGlzLl9yZWdpc3RlckFzTmVzdGVkQ2hpbGQsXG4gICAgICAgICAgdW5yZWdpc3RlckFzTmVzdGVkQ2hpbGQ6IHRoaXMuX3VucmVnaXN0ZXJBc05lc3RlZENoaWxkLFxuICAgICAgICB9fT5cbiAgICAgICAge1JlYWN0LmNsb25lRWxlbWVudChcbiAgICAgICAgICAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlbmRlclNjcm9sbENvbXBvbmVudCB8fFxuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFJlbmRlclNjcm9sbENvbXBvbmVudFxuICAgICAgICAgICkoc2Nyb2xsUHJvcHMpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZjogdGhpcy5fY2FwdHVyZVNjcm9sbFJlZixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNlbGxzLFxuICAgICAgICApfVxuICAgICAgPC9WaXJ0dWFsaXplZExpc3RDb250ZXh0UHJvdmlkZXI+XG4gICAgKTtcbiAgICBsZXQgcmV0OiBSZWFjdC5Ob2RlID0gaW5uZXJSZXQ7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHJldCA9IChcbiAgICAgICAgPFNjcm9sbFZpZXcuQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICB7c2Nyb2xsQ29udGV4dCA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNjcm9sbENvbnRleHQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAhc2Nyb2xsQ29udGV4dC5ob3Jpem9udGFsID09PVxuICAgICAgICAgICAgICAgICFob3Jpem9udGFsT3JEZWZhdWx0KHRoaXMucHJvcHMuaG9yaXpvbnRhbCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuX2hhc1dhcm5lZC5uZXN0aW5nICYmXG4gICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9PSBudWxsICYmXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuc2Nyb2xsRW5hYmxlZCAhPT0gZmFsc2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdWaXJ0dWFsaXplZExpc3RzIHNob3VsZCBuZXZlciBiZSBuZXN0ZWQgaW5zaWRlIHBsYWluIFNjcm9sbFZpZXdzIHdpdGggdGhlIHNhbWUgJyArXG4gICAgICAgICAgICAgICAgICAnb3JpZW50YXRpb24gYmVjYXVzZSBpdCBjYW4gYnJlYWsgd2luZG93aW5nIGFuZCBvdGhlciBmdW5jdGlvbmFsaXR5IC0gdXNlIGFub3RoZXIgJyArXG4gICAgICAgICAgICAgICAgICAnVmlydHVhbGl6ZWRMaXN0LWJhY2tlZCBjb250YWluZXIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLl9oYXNXYXJuZWQubmVzdGluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5uZXJSZXQ7XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9TY3JvbGxWaWV3LkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5kZWJ1Zykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5kZWJ1Z30+XG4gICAgICAgICAge3JldH1cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyRGVidWdPdmVybGF5KCl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUHJvcHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgZXh0cmFEYXRhfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGRhdGEgIT09IHByZXZQcm9wcy5kYXRhIHx8IGV4dHJhRGF0YSAhPT0gcHJldlByb3BzLmV4dHJhRGF0YSkge1xuICAgICAgLy8gY2xlYXIgdGhlIHZpZXdhYmxlSW5kaWNlcyBjYWNoZSB0byBhbHNvIHRyaWdnZXJcbiAgICAgIC8vIHRoZSBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkIGNhbGxiYWNrIHdpdGggdGhlIG5ldyBkYXRhXG4gICAgICB0aGlzLl92aWV3YWJpbGl0eVR1cGxlcy5mb3JFYWNoKHR1cGxlID0+IHtcbiAgICAgICAgdHVwbGUudmlld2FiaWxpdHlIZWxwZXIucmVzZXRWaWV3YWJsZUluZGljZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBUaGUgYHRoaXMuX2hpUHJpSW5Qcm9ncmVzc2AgaXMgZ3VhcmFudGVlaW5nIGEgaGlQcmkgY2VsbCB1cGRhdGUgd2lsbCBvbmx5IGhhcHBlblxuICAgIC8vIG9uY2UgcGVyIGZpYmVyIHVwZGF0ZS4gVGhlIGBfc2NoZWR1bGVDZWxsc1RvUmVuZGVyVXBkYXRlYCB3aWxsIHNldCBpdCB0byB0cnVlXG4gICAgLy8gaWYgYSBoaVByaSB1cGRhdGUgbmVlZHMgdG8gcGVyZm9ybS4gSWYgYGNvbXBvbmVudERpZFVwZGF0ZWAgaXMgdHJpZ2dlcmVkIHdpdGhcbiAgICAvLyBgdGhpcy5faGlQcmlJblByb2dyZXNzPXRydWVgLCBtZWFucyBpdCdzIHRyaWdnZXJlZCBieSB0aGUgaGlQcmkgdXBkYXRlLiBUaGVcbiAgICAvLyBgX3NjaGVkdWxlQ2VsbHNUb1JlbmRlclVwZGF0ZWAgd2lsbCBjaGVjayB0aGlzIGNvbmRpdGlvbiBhbmQgbm90IHBlcmZvcm1cbiAgICAvLyBhbm90aGVyIGhpUHJpIHVwZGF0ZS5cbiAgICBjb25zdCBoaVByaUluUHJvZ3Jlc3MgPSB0aGlzLl9oaVByaUluUHJvZ3Jlc3M7XG4gICAgdGhpcy5fc2NoZWR1bGVDZWxsc1RvUmVuZGVyVXBkYXRlKCk7XG4gICAgLy8gTWFrZSBzdXJlIHNldHRpbmcgYHRoaXMuX2hpUHJpSW5Qcm9ncmVzc2AgYmFjayB0byBmYWxzZSBhZnRlciBgY29tcG9uZW50RGlkVXBkYXRlYFxuICAgIC8vIGlzIHRyaWdnZXJlZCB3aXRoIGB0aGlzLl9oaVByaUluUHJvZ3Jlc3MgPSB0cnVlYFxuICAgIGlmIChoaVByaUluUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMuX2hpUHJpSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIF9jZWxsUmVmczoge1tzdHJpbmddOiBudWxsIHwgQ2VsbFJlbmRlcmVyPGFueT59ID0ge307XG4gIF9maWxsUmF0ZUhlbHBlcjogRmlsbFJhdGVIZWxwZXI7XG4gIF9saXN0TWV0cmljczogTGlzdE1ldHJpY3NBZ2dyZWdhdG9yID0gbmV3IExpc3RNZXRyaWNzQWdncmVnYXRvcigpO1xuICBfZm9vdGVyTGVuZ3RoID0gMDtcbiAgLy8gVXNlZCBmb3IgcHJldmVudGluZyBzY3JvbGxUb0luZGV4IGZyb20gYmVpbmcgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBpbml0aWFsU2Nyb2xsSW5kZXhcbiAgX2hhc1RyaWdnZXJlZEluaXRpYWxTY3JvbGxUb0luZGV4ID0gZmFsc2U7XG4gIF9oYXNJbnRlcmFjdGVkID0gZmFsc2U7XG4gIF9oYXNNb3JlID0gZmFsc2U7XG4gIF9oYXNXYXJuZWQ6IHtbc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcbiAgX2hlYWRlckxlbmd0aCA9IDA7XG4gIF9oaVByaUluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZmxhZyB0byBwcmV2ZW50IGluZmluaXRlIGhpUHJpIGNlbGwgbGltaXQgdXBkYXRlXG4gIF9pbmRpY2VzVG9LZXlzOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBfbGFzdEZvY3VzZWRDZWxsS2V5OiA/c3RyaW5nID0gbnVsbDtcbiAgX25lc3RlZENoaWxkTGlzdHM6IENoaWxkTGlzdENvbGxlY3Rpb248VmlydHVhbGl6ZWRMaXN0PiA9XG4gICAgbmV3IENoaWxkTGlzdENvbGxlY3Rpb24oKTtcbiAgX29mZnNldEZyb21QYXJlbnRWaXJ0dWFsaXplZExpc3Q6IG51bWJlciA9IDA7XG4gIF9wZW5kaW5nVmlld2FiaWxpdHlVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX3ByZXZQYXJlbnRPZmZzZXQ6IG51bWJlciA9IDA7XG4gIF9zY3JvbGxNZXRyaWNzOiB7XG4gICAgZE9mZnNldDogbnVtYmVyLFxuICAgIGR0OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgdmVsb2NpdHk6IG51bWJlcixcbiAgICB2aXNpYmxlTGVuZ3RoOiBudW1iZXIsXG4gICAgem9vbVNjYWxlOiBudW1iZXIsXG4gIH0gPSB7XG4gICAgZE9mZnNldDogMCxcbiAgICBkdDogMTAsXG4gICAgb2Zmc2V0OiAwLFxuICAgIHRpbWVzdGFtcDogMCxcbiAgICB2ZWxvY2l0eTogMCxcbiAgICB2aXNpYmxlTGVuZ3RoOiAwLFxuICAgIHpvb21TY2FsZTogMSxcbiAgfTtcbiAgX3Njcm9sbFJlZjogP1JlYWN0LkVsZW1lbnRSZWY8YW55PiA9IG51bGw7XG4gIF9zZW50U3RhcnRGb3JDb250ZW50TGVuZ3RoID0gMDtcbiAgX3NlbnRFbmRGb3JDb250ZW50TGVuZ3RoID0gMDtcbiAgX3VwZGF0ZUNlbGxzVG9SZW5kZXJCYXRjaGVyOiBCYXRjaGluYXRvcjtcbiAgX3ZpZXdhYmlsaXR5VHVwbGVzOiBBcnJheTxWaWV3YWJpbGl0eUhlbHBlckNhbGxiYWNrVHVwbGU+ID0gW107XG5cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5IEZsb3cnc1xuICAgKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICBfY2FwdHVyZVNjcm9sbFJlZiA9IHJlZiA9PiB7XG4gICAgdGhpcy5fc2Nyb2xsUmVmID0gcmVmO1xuICB9O1xuXG4gIF9jb21wdXRlQmxhbmtuZXNzKCkge1xuICAgIHRoaXMuX2ZpbGxSYXRlSGVscGVyLmNvbXB1dGVCbGFua25lc3MoXG4gICAgICB0aGlzLnByb3BzLFxuICAgICAgdGhpcy5zdGF0ZS5jZWxsc0Fyb3VuZFZpZXdwb3J0LFxuICAgICAgdGhpcy5fc2Nyb2xsTWV0cmljcyxcbiAgICApO1xuICB9XG5cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5IEZsb3cnc1xuICAgKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICBfZGVmYXVsdFJlbmRlclNjcm9sbENvbXBvbmVudCA9IHByb3BzID0+IHtcbiAgICBjb25zdCBvblJlZnJlc2ggPSBwcm9wcy5vblJlZnJlc2g7XG4gICAgaWYgKHRoaXMuX2lzTmVzdGVkV2l0aFNhbWVPcmllbnRhdGlvbigpKSB7XG4gICAgICAvLyBQcmV2ZW50IFZpcnR1YWxpemVkTGlzdC5fb25Db250ZW50U2l6ZUNoYW5nZSBmcm9tIGJlaW5nIHRyaWdnZXJlZCBieSBhIGJ1YmJsaW5nIG9uQ29udGVudFNpemVDaGFuZ2UgZXZlbnQuXG4gICAgICAvLyBUaGlzIGNvdWxkIGxlYWQgdG8gaW50ZXJuYWwgaW5jb25zaXN0ZW5jaWVzIHdpdGhpbiBWaXJ0dWFsaXplZExpc3QuXG4gICAgICBjb25zdCB7b25Db250ZW50U2l6ZUNoYW5nZSwgLi4ub3RoZXJQcm9wc30gPSBwcm9wcztcbiAgICAgIHJldHVybiA8VmlldyB7Li4ub3RoZXJQcm9wc30gLz47XG4gICAgfSBlbHNlIGlmIChvblJlZnJlc2gpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdHlwZW9mIHByb3BzLnJlZnJlc2hpbmcgPT09ICdib29sZWFuJyxcbiAgICAgICAgJ2ByZWZyZXNoaW5nYCBwcm9wIG11c3QgYmUgc2V0IGFzIGEgYm9vbGVhbiBpbiBvcmRlciB0byB1c2UgYG9uUmVmcmVzaGAsIGJ1dCBnb3QgYCcgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHByb3BzLnJlZnJlc2hpbmcgPz8gJ3VuZGVmaW5lZCcpICtcbiAgICAgICAgICAnYCcsXG4gICAgICApO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIEludmFsaWQgcHJvcCB1c2FnZVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgIHJlZnJlc2hDb250cm9sPXtcbiAgICAgICAgICAgIHByb3BzLnJlZnJlc2hDb250cm9sID09IG51bGwgPyAoXG4gICAgICAgICAgICAgIDxSZWZyZXNoQ29udHJvbFxuICAgICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgICAgICAgcmVmcmVzaGluZz17cHJvcHMucmVmcmVzaGluZ31cbiAgICAgICAgICAgICAgICBvblJlZnJlc2g9e29uUmVmcmVzaH1cbiAgICAgICAgICAgICAgICBwcm9ncmVzc1ZpZXdPZmZzZXQ9e3Byb3BzLnByb2dyZXNzVmlld09mZnNldH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIHByb3BzLnJlZnJlc2hDb250cm9sXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIEludmFsaWQgcHJvcCB1c2FnZVxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXVxuICAgICAgcmV0dXJuIDxTY3JvbGxWaWV3IHsuLi5wcm9wc30gLz47XG4gICAgfVxuICB9O1xuXG4gIF9vbkNlbGxMYXlvdXQgPSAoXG4gICAgZTogTGF5b3V0RXZlbnQsXG4gICAgY2VsbEtleTogc3RyaW5nLFxuICAgIGNlbGxJbmRleDogbnVtYmVyLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBsYXlvdXRIYXNDaGFuZ2VkID0gdGhpcy5fbGlzdE1ldHJpY3Mubm90aWZ5Q2VsbExheW91dCh7XG4gICAgICBjZWxsSW5kZXgsXG4gICAgICBjZWxsS2V5LFxuICAgICAgbGF5b3V0OiBlLm5hdGl2ZUV2ZW50LmxheW91dCxcbiAgICAgIG9yaWVudGF0aW9uOiB0aGlzLl9vcmllbnRhdGlvbigpLFxuICAgIH0pO1xuXG4gICAgaWYgKGxheW91dEhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NjaGVkdWxlQ2VsbHNUb1JlbmRlclVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3RyaWdnZXJSZW1lYXN1cmVGb3JDaGlsZExpc3RzSW5DZWxsKGNlbGxLZXkpO1xuICAgIHRoaXMuX2NvbXB1dGVCbGFua25lc3MoKTtcbiAgICB0aGlzLl91cGRhdGVWaWV3YWJsZUl0ZW1zKHRoaXMucHJvcHMsIHRoaXMuc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydCk7XG4gIH07XG5cbiAgX29uQ2VsbEZvY3VzQ2FwdHVyZSA9IChjZWxsS2V5OiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLl9sYXN0Rm9jdXNlZENlbGxLZXkgPSBjZWxsS2V5O1xuICAgIHRoaXMuX3VwZGF0ZUNlbGxzVG9SZW5kZXIoKTtcbiAgfTtcblxuICBfb25DZWxsVW5tb3VudCA9IChjZWxsS2V5OiBzdHJpbmcpID0+IHtcbiAgICBkZWxldGUgdGhpcy5fY2VsbFJlZnNbY2VsbEtleV07XG4gICAgdGhpcy5fbGlzdE1ldHJpY3Mubm90aWZ5Q2VsbFVubW91bnRlZChjZWxsS2V5KTtcbiAgfTtcblxuICBfdHJpZ2dlclJlbWVhc3VyZUZvckNoaWxkTGlzdHNJbkNlbGwoY2VsbEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbmVzdGVkQ2hpbGRMaXN0cy5mb3JFYWNoSW5DZWxsKGNlbGxLZXksIGNoaWxkTGlzdCA9PiB7XG4gICAgICBjaGlsZExpc3QubWVhc3VyZUxheW91dFJlbGF0aXZlVG9Db250YWluaW5nTGlzdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbWVhc3VyZUxheW91dFJlbGF0aXZlVG9Db250YWluaW5nTGlzdCgpOiB2b2lkIHtcbiAgICAvLyBUT0RPIChUMzU1NzQ1MzgpOiBmaW5kTm9kZUhhbmRsZSBzb21ldGltZXMgY3Jhc2hlcyB3aXRoIFwiVW5hYmxlIHRvIGZpbmRcbiAgICAvLyBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnRcIiBkdXJpbmcgc2Nyb2xsaW5nXG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5fc2Nyb2xsUmVmKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGFyZSBhc3N1bWluZyB0aGF0IGdldE91dGVybW9zdFBhcmVudExpc3RSZWYoKS5nZXRTY3JvbGxSZWYoKVxuICAgICAgLy8gaXMgYSBub24tbnVsbCByZWZlcmVuY2UgdG8gYSBTY3JvbGxWaWV3XG4gICAgICB0aGlzLl9zY3JvbGxSZWYubWVhc3VyZUxheW91dChcbiAgICAgICAgdGhpcy5jb250ZXh0LmdldE91dGVybW9zdFBhcmVudExpc3RSZWYoKS5nZXRTY3JvbGxSZWYoKSxcbiAgICAgICAgKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgICAgICB0aGlzLl9vZmZzZXRGcm9tUGFyZW50VmlydHVhbGl6ZWRMaXN0ID0gdGhpcy5fc2VsZWN0T2Zmc2V0KHt4LCB5fSk7XG4gICAgICAgICAgdGhpcy5fbGlzdE1ldHJpY3Mubm90aWZ5TGlzdENvbnRlbnRMYXlvdXQoe1xuICAgICAgICAgICAgbGF5b3V0OiB7d2lkdGgsIGhlaWdodH0sXG4gICAgICAgICAgICBvcmllbnRhdGlvbjogdGhpcy5fb3JpZW50YXRpb24oKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzY3JvbGxNZXRyaWNzID0gdGhpcy5fY29udmVydFBhcmVudFNjcm9sbE1ldHJpY3MoXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0U2Nyb2xsTWV0cmljcygpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBtZXRyaWNzQ2hhbmdlZCA9XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGggIT09IHNjcm9sbE1ldHJpY3MudmlzaWJsZUxlbmd0aCB8fFxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsTWV0cmljcy5vZmZzZXQgIT09IHNjcm9sbE1ldHJpY3Mub2Zmc2V0O1xuXG4gICAgICAgICAgaWYgKG1ldHJpY3NDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGggPSBzY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGg7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLm9mZnNldCA9IHNjcm9sbE1ldHJpY3Mub2Zmc2V0O1xuXG4gICAgICAgICAgICAvLyBJZiBtZXRyaWNzIG9mIHRoZSBzY3JvbGxWaWV3IGNoYW5nZWQsIHRoZW4gd2UgdHJpZ2dlcmVkIHJlbWVhc3VyZSBmb3IgY2hpbGQgbGlzdFxuICAgICAgICAgICAgLy8gdG8gZW5zdXJlIFZpcnR1YWxpemVkTGlzdCBoYXMgdGhlIHJpZ2h0IGluZm9ybWF0aW9uLlxuICAgICAgICAgICAgdGhpcy5fbmVzdGVkQ2hpbGRMaXN0cy5mb3JFYWNoKGNoaWxkTGlzdCA9PiB7XG4gICAgICAgICAgICAgIGNoaWxkTGlzdC5tZWFzdXJlTGF5b3V0UmVsYXRpdmVUb0NvbnRhaW5pbmdMaXN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlZpcnR1YWxpemVkTGlzdDogRW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgbWVhc3VyaW5nIGEgbGlzdCdzXCIgK1xuICAgICAgICAgICAgICAnIG9mZnNldCBmcm9tIGl0cyBjb250YWluaW5nIFZpcnR1YWxpemVkTGlzdC4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdtZWFzdXJlTGF5b3V0UmVsYXRpdmVUb0NvbnRhaW5pbmdMaXN0IHRocmV3IGFuIGVycm9yJyxcbiAgICAgICAgZXJyb3Iuc3RhY2ssXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIF9vbkxheW91dCA9IChlOiBMYXlvdXRFdmVudCkgPT4ge1xuICAgIGlmICh0aGlzLl9pc05lc3RlZFdpdGhTYW1lT3JpZW50YXRpb24oKSkge1xuICAgICAgLy8gTmVlZCB0byBhZGp1c3Qgb3VyIHNjcm9sbCBtZXRyaWNzIHRvIGJlIHJlbGF0aXZlIHRvIG91ciBjb250YWluaW5nXG4gICAgICAvLyBWaXJ0dWFsaXplZExpc3QgYmVmb3JlIHdlIGNhbiBtYWtlIGNsYWltcyBhYm91dCBsaXN0IGl0ZW0gdmlld2FiaWxpdHlcbiAgICAgIHRoaXMubWVhc3VyZUxheW91dFJlbGF0aXZlVG9Db250YWluaW5nTGlzdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGggPSB0aGlzLl9zZWxlY3RMZW5ndGgoXG4gICAgICAgIGUubmF0aXZlRXZlbnQubGF5b3V0LFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vbkxheW91dCAmJiB0aGlzLnByb3BzLm9uTGF5b3V0KGUpO1xuICAgIHRoaXMuX3NjaGVkdWxlQ2VsbHNUb1JlbmRlclVwZGF0ZSgpO1xuICAgIHRoaXMuX21heWJlQ2FsbE9uRWRnZVJlYWNoZWQoKTtcbiAgfTtcblxuICBfb25MYXlvdXRFbXB0eSA9IChlOiBMYXlvdXRFdmVudCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25MYXlvdXQgJiYgdGhpcy5wcm9wcy5vbkxheW91dChlKTtcbiAgfTtcblxuICBfZ2V0Rm9vdGVyQ2VsbEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsS2V5KCkgKyAnLWZvb3Rlcic7XG4gIH1cblxuICBfb25MYXlvdXRGb290ZXIgPSAoZTogTGF5b3V0RXZlbnQpID0+IHtcbiAgICB0aGlzLl90cmlnZ2VyUmVtZWFzdXJlRm9yQ2hpbGRMaXN0c0luQ2VsbCh0aGlzLl9nZXRGb290ZXJDZWxsS2V5KCkpO1xuICAgIHRoaXMuX2Zvb3Rlckxlbmd0aCA9IHRoaXMuX3NlbGVjdExlbmd0aChlLm5hdGl2ZUV2ZW50LmxheW91dCk7XG4gIH07XG5cbiAgX29uTGF5b3V0SGVhZGVyID0gKGU6IExheW91dEV2ZW50KSA9PiB7XG4gICAgdGhpcy5faGVhZGVyTGVuZ3RoID0gdGhpcy5fc2VsZWN0TGVuZ3RoKGUubmF0aXZlRXZlbnQubGF5b3V0KTtcbiAgfTtcblxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF9yZW5kZXJEZWJ1Z092ZXJsYXkoKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplID1cbiAgICAgIHRoaXMuX3Njcm9sbE1ldHJpY3MudmlzaWJsZUxlbmd0aCAvXG4gICAgICAodGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q29udGVudExlbmd0aCgpIHx8IDEpO1xuICAgIGNvbnN0IGZyYW1lc0luTGF5b3V0ID0gW107XG4gICAgY29uc3QgaXRlbUNvdW50ID0gdGhpcy5wcm9wcy5nZXRJdGVtQ291bnQodGhpcy5wcm9wcy5kYXRhKTtcbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgaXRlbUNvdW50OyBpaSsrKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzQXBwcm94KGlpLCB0aGlzLnByb3BzKTtcbiAgICAgIGlmIChmcmFtZS5pc01vdW50ZWQpIHtcbiAgICAgICAgZnJhbWVzSW5MYXlvdXQucHVzaChmcmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHdpbmRvd1RvcCA9IHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzQXBwcm94KFxuICAgICAgdGhpcy5zdGF0ZS5jZWxsc0Fyb3VuZFZpZXdwb3J0LmZpcnN0LFxuICAgICAgdGhpcy5wcm9wcyxcbiAgICApLm9mZnNldDtcbiAgICBjb25zdCBmcmFtZUxhc3QgPSB0aGlzLl9saXN0TWV0cmljcy5nZXRDZWxsTWV0cmljc0FwcHJveChcbiAgICAgIHRoaXMuc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0LFxuICAgICAgdGhpcy5wcm9wcyxcbiAgICApO1xuICAgIGNvbnN0IHdpbmRvd0xlbiA9IGZyYW1lTGFzdC5vZmZzZXQgKyBmcmFtZUxhc3QubGVuZ3RoIC0gd2luZG93VG9wO1xuICAgIGNvbnN0IHZpc1RvcCA9IHRoaXMuX3Njcm9sbE1ldHJpY3Mub2Zmc2V0O1xuICAgIGNvbnN0IHZpc0xlbiA9IHRoaXMuX3Njcm9sbE1ldHJpY3MudmlzaWJsZUxlbmd0aDtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5kZWJ1Z092ZXJsYXlCYXNlLCBzdHlsZXMuZGVidWdPdmVybGF5XX0+XG4gICAgICAgIHtmcmFtZXNJbkxheW91dC5tYXAoKGYsIGlpKSA9PiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGtleT17J2YnICsgaWl9XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBzdHlsZXMuZGVidWdPdmVybGF5QmFzZSxcbiAgICAgICAgICAgICAgc3R5bGVzLmRlYnVnT3ZlcmxheUZyYW1lLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdG9wOiBmLm9mZnNldCAqIG5vcm1hbGl6ZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGYubGVuZ3RoICogbm9ybWFsaXplLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc3R5bGVzLmRlYnVnT3ZlcmxheUJhc2UsXG4gICAgICAgICAgICBzdHlsZXMuZGVidWdPdmVybGF5RnJhbWVMYXN0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b3A6IHdpbmRvd1RvcCAqIG5vcm1hbGl6ZSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiB3aW5kb3dMZW4gKiBub3JtYWxpemUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF19XG4gICAgICAgIC8+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5kZWJ1Z092ZXJsYXlCYXNlLFxuICAgICAgICAgICAgc3R5bGVzLmRlYnVnT3ZlcmxheUZyYW1lVmlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b3A6IHZpc1RvcCAqIG5vcm1hbGl6ZSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiB2aXNMZW4gKiBub3JtYWxpemUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF19XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIF9zZWxlY3RMZW5ndGgoXG4gICAgbWV0cmljczogJFJlYWRPbmx5PHtcbiAgICAgIGhlaWdodDogbnVtYmVyLFxuICAgICAgd2lkdGg6IG51bWJlcixcbiAgICAgIC4uLlxuICAgIH0+LFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiAhaG9yaXpvbnRhbE9yRGVmYXVsdCh0aGlzLnByb3BzLmhvcml6b250YWwpXG4gICAgICA/IG1ldHJpY3MuaGVpZ2h0XG4gICAgICA6IG1ldHJpY3Mud2lkdGg7XG4gIH1cblxuICBfc2VsZWN0T2Zmc2V0KHt4LCB5fTogJFJlYWRPbmx5PHt4OiBudW1iZXIsIHk6IG51bWJlciwgLi4ufT4pOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbigpLmhvcml6b250YWwgPyB4IDogeTtcbiAgfVxuXG4gIF9vcmllbnRhdGlvbigpOiBMaXN0T3JpZW50YXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBob3Jpem9udGFsOiBob3Jpem9udGFsT3JEZWZhdWx0KHRoaXMucHJvcHMuaG9yaXpvbnRhbCksXG4gICAgICBydGw6IEkxOG5NYW5hZ2VyLmlzUlRMLFxuICAgIH07XG4gIH1cblxuICBfbWF5YmVDYWxsT25FZGdlUmVhY2hlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0SXRlbUNvdW50LFxuICAgICAgb25TdGFydFJlYWNoZWQsXG4gICAgICBvblN0YXJ0UmVhY2hlZFRocmVzaG9sZCxcbiAgICAgIG9uRW5kUmVhY2hlZCxcbiAgICAgIG9uRW5kUmVhY2hlZFRocmVzaG9sZCxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAvLyBJZiB3ZSBoYXZlIGFueSBwZW5kaW5nIHNjcm9sbCB1cGRhdGVzIGl0IG1lYW5zIHRoYXQgdGhlIHNjcm9sbCBtZXRyaWNzXG4gICAgLy8gYXJlIG91dCBvZiBkYXRlIGFuZCB3ZSBzaG91bGQgbm90IGNhbGwgYW55IG9mIHRoZSBlZGdlIHJlYWNoZWQgY2FsbGJhY2tzLlxuICAgIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTY3JvbGxVcGRhdGVDb3VudCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7dmlzaWJsZUxlbmd0aCwgb2Zmc2V0fSA9IHRoaXMuX3Njcm9sbE1ldHJpY3M7XG4gICAgbGV0IGRpc3RhbmNlRnJvbVN0YXJ0ID0gb2Zmc2V0O1xuICAgIGxldCBkaXN0YW5jZUZyb21FbmQgPVxuICAgICAgdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q29udGVudExlbmd0aCgpIC0gdmlzaWJsZUxlbmd0aCAtIG9mZnNldDtcblxuICAgIC8vIEVzcGVjaWFsbHkgd2hlbiBvRVJUIGlzIHplcm8gaXQncyBuZWNlc3NhcnkgdG8gJ2Zsb29yJyB2ZXJ5IHNtYWxsIGRpc3RhbmNlIHZhbHVlcyB0byBiZSAwXG4gICAgLy8gc2luY2UgZGVib3VuY2luZyBjYXVzZXMgdXMgdG8gbm90IGZpcmUgdGhpcyBldmVudCBmb3IgZXZlcnkgc2luZ2xlIFwicGl4ZWxcIiB3ZSBzY3JvbGwgYW5kIGNhbiB0aHVzXG4gICAgLy8gYmUgYXQgdGhlIGVkZ2Ugb2YgdGhlIGxpc3Qgd2l0aCBhIGRpc3RhbmNlIGFwcHJveGltYXRpbmcgMCBidXQgbm90IHF1aXRlIHRoZXJlLlxuICAgIGlmIChkaXN0YW5jZUZyb21TdGFydCA8IE9OX0VER0VfUkVBQ0hFRF9FUFNJTE9OKSB7XG4gICAgICBkaXN0YW5jZUZyb21TdGFydCA9IDA7XG4gICAgfVxuICAgIGlmIChkaXN0YW5jZUZyb21FbmQgPCBPTl9FREdFX1JFQUNIRURfRVBTSUxPTikge1xuICAgICAgZGlzdGFuY2VGcm9tRW5kID0gMDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUMTIxMTcyMTcyIExvb2sgaW50byB3aHkgd2UncmUgXCJkZWZhdWx0aW5nXCIgdG8gYSB0aHJlc2hvbGQgb2YgMnB4XG4gICAgLy8gd2hlbiBvRVJUIGlzIG5vdCBwcmVzZW50IChkaWZmZXJlbnQgZnJvbSAyIHZpZXdwb3J0cyB1c2VkIGVsc2V3aGVyZSlcbiAgICBjb25zdCBERUZBVUxUX1RIUkVTSE9MRF9QWCA9IDI7XG5cbiAgICBjb25zdCBzdGFydFRocmVzaG9sZCA9XG4gICAgICBvblN0YXJ0UmVhY2hlZFRocmVzaG9sZCAhPSBudWxsXG4gICAgICAgID8gb25TdGFydFJlYWNoZWRUaHJlc2hvbGQgKiB2aXNpYmxlTGVuZ3RoXG4gICAgICAgIDogREVGQVVMVF9USFJFU0hPTERfUFg7XG4gICAgY29uc3QgZW5kVGhyZXNob2xkID1cbiAgICAgIG9uRW5kUmVhY2hlZFRocmVzaG9sZCAhPSBudWxsXG4gICAgICAgID8gb25FbmRSZWFjaGVkVGhyZXNob2xkICogdmlzaWJsZUxlbmd0aFxuICAgICAgICA6IERFRkFVTFRfVEhSRVNIT0xEX1BYO1xuICAgIGNvbnN0IGlzV2l0aGluU3RhcnRUaHJlc2hvbGQgPSBkaXN0YW5jZUZyb21TdGFydCA8PSBzdGFydFRocmVzaG9sZDtcbiAgICBjb25zdCBpc1dpdGhpbkVuZFRocmVzaG9sZCA9IGRpc3RhbmNlRnJvbUVuZCA8PSBlbmRUaHJlc2hvbGQ7XG5cbiAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGUgdXNlciBqdXN0IHNjcm9sbGVkIHdpdGhpbiB0aGUgZW5kIHRocmVzaG9sZFxuICAgIC8vIGFuZCBjYWxsIG9uRW5kUmVhY2hlZCBvbmx5IG9uY2UgZm9yIGEgZ2l2ZW4gY29udGVudCBsZW5ndGgsXG4gICAgLy8gYW5kIG9ubHkgaWYgb25TdGFydFJlYWNoZWQgaXMgbm90IGJlaW5nIGV4ZWN1dGVkXG4gICAgaWYgKFxuICAgICAgb25FbmRSZWFjaGVkICYmXG4gICAgICB0aGlzLnN0YXRlLmNlbGxzQXJvdW5kVmlld3BvcnQubGFzdCA9PT0gZ2V0SXRlbUNvdW50KGRhdGEpIC0gMSAmJlxuICAgICAgaXNXaXRoaW5FbmRUaHJlc2hvbGQgJiZcbiAgICAgIHRoaXMuX2xpc3RNZXRyaWNzLmdldENvbnRlbnRMZW5ndGgoKSAhPT0gdGhpcy5fc2VudEVuZEZvckNvbnRlbnRMZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuX3NlbnRFbmRGb3JDb250ZW50TGVuZ3RoID0gdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q29udGVudExlbmd0aCgpO1xuICAgICAgb25FbmRSZWFjaGVkKHtkaXN0YW5jZUZyb21FbmR9KTtcbiAgICB9XG5cbiAgICAvLyBOZXh0IGNoZWNrIGlmIHRoZSB1c2VyIGp1c3Qgc2Nyb2xsZWQgd2l0aGluIHRoZSBzdGFydCB0aHJlc2hvbGRcbiAgICAvLyBhbmQgY2FsbCBvblN0YXJ0UmVhY2hlZCBvbmx5IG9uY2UgZm9yIGEgZ2l2ZW4gY29udGVudCBsZW5ndGgsXG4gICAgLy8gYW5kIG9ubHkgaWYgb25FbmRSZWFjaGVkIGlzIG5vdCBiZWluZyBleGVjdXRlZFxuICAgIGlmIChcbiAgICAgIG9uU3RhcnRSZWFjaGVkICE9IG51bGwgJiZcbiAgICAgIHRoaXMuc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydC5maXJzdCA9PT0gMCAmJlxuICAgICAgaXNXaXRoaW5TdGFydFRocmVzaG9sZCAmJlxuICAgICAgdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q29udGVudExlbmd0aCgpICE9PSB0aGlzLl9zZW50U3RhcnRGb3JDb250ZW50TGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLl9zZW50U3RhcnRGb3JDb250ZW50TGVuZ3RoID0gdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q29udGVudExlbmd0aCgpO1xuICAgICAgb25TdGFydFJlYWNoZWQoe2Rpc3RhbmNlRnJvbVN0YXJ0fSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHVzZXIgc2Nyb2xscyBhd2F5IGZyb20gdGhlIHN0YXJ0IG9yIGVuZCBhbmQgYmFjayBhZ2FpbixcbiAgICAvLyBjYXVzZSBvblN0YXJ0UmVhY2hlZCBvciBvbkVuZFJlYWNoZWQgdG8gYmUgdHJpZ2dlcmVkIGFnYWluXG4gICAgaWYgKCFpc1dpdGhpblN0YXJ0VGhyZXNob2xkKSB7XG4gICAgICB0aGlzLl9zZW50U3RhcnRGb3JDb250ZW50TGVuZ3RoID0gMDtcbiAgICB9XG4gICAgaWYgKCFpc1dpdGhpbkVuZFRocmVzaG9sZCkge1xuICAgICAgdGhpcy5fc2VudEVuZEZvckNvbnRlbnRMZW5ndGggPSAwO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNvbnRlbnRTaXplQ2hhbmdlID0gKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5fbGlzdE1ldHJpY3Mubm90aWZ5TGlzdENvbnRlbnRMYXlvdXQoe1xuICAgICAgbGF5b3V0OiB7d2lkdGgsIGhlaWdodH0sXG4gICAgICBvcmllbnRhdGlvbjogdGhpcy5fb3JpZW50YXRpb24oKSxcbiAgICB9KTtcblxuICAgIHRoaXMuX21heWJlU2Nyb2xsVG9Jbml0aWFsU2Nyb2xsSW5kZXgod2lkdGgsIGhlaWdodCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkNvbnRlbnRTaXplQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ29udGVudFNpemVDaGFuZ2Uod2lkdGgsIGhlaWdodCk7XG4gICAgfVxuICAgIHRoaXMuX3NjaGVkdWxlQ2VsbHNUb1JlbmRlclVwZGF0ZSgpO1xuICAgIHRoaXMuX21heWJlQ2FsbE9uRWRnZVJlYWNoZWQoKTtcbiAgfTtcblxuICAvKipcbiAgICogU2Nyb2xsIHRvIGEgc3BlY2lmaWVkIGBpbml0aWFsU2Nyb2xsSW5kZXhgIHByb3AgYWZ0ZXIgdGhlIFNjcm9sbFZpZXdcbiAgICogY29udGVudCBoYXMgYmVlbiBsYWlkIG91dCwgaWYgaXQgaXMgc3RpbGwgdmFsaWQuIE9ubHkgYSBzaW5nbGUgc2Nyb2xsIGlzXG4gICAqIHRyaWdnZXJlZCB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgbGlzdC5cbiAgICovXG4gIF9tYXliZVNjcm9sbFRvSW5pdGlhbFNjcm9sbEluZGV4KFxuICAgIGNvbnRlbnRXaWR0aDogbnVtYmVyLFxuICAgIGNvbnRlbnRIZWlnaHQ6IG51bWJlcixcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgY29udGVudFdpZHRoID4gMCAmJlxuICAgICAgY29udGVudEhlaWdodCA+IDAgJiZcbiAgICAgIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbEluZGV4ICE9IG51bGwgJiZcbiAgICAgIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbEluZGV4ID4gMCAmJlxuICAgICAgIXRoaXMuX2hhc1RyaWdnZXJlZEluaXRpYWxTY3JvbGxUb0luZGV4XG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5jb250ZW50T2Zmc2V0ID09IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbEluZGV4IDxcbiAgICAgICAgICB0aGlzLnByb3BzLmdldEl0ZW1Db3VudCh0aGlzLnByb3BzLmRhdGEpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9JbmRleCh7XG4gICAgICAgICAgICBhbmltYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpbmRleDogbnVsbHRocm93cyh0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxJbmRleCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0VuZCh7YW5pbWF0ZWQ6IGZhbHNlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2hhc1RyaWdnZXJlZEluaXRpYWxTY3JvbGxUb0luZGV4ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKiBUcmFuc2xhdGVzIG1ldHJpY3MgZnJvbSBhIHNjcm9sbCBldmVudCBpbiBhIHBhcmVudCBWaXJ0dWFsaXplZExpc3QgaW50b1xuICAgKiBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgY2hpbGQgbGlzdC5cbiAgICovXG4gIF9jb252ZXJ0UGFyZW50U2Nyb2xsTWV0cmljcyA9IChtZXRyaWNzOiB7XG4gICAgdmlzaWJsZUxlbmd0aDogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIC4uLlxuICB9KTogJEZsb3dGaXhNZSA9PiB7XG4gICAgLy8gT2Zmc2V0IG9mIHRoZSB0b3Agb2YgdGhlIG5lc3RlZCBsaXN0IHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgaXRzIHBhcmVudCdzIHZpZXdwb3J0XG4gICAgY29uc3Qgb2Zmc2V0ID0gbWV0cmljcy5vZmZzZXQgLSB0aGlzLl9vZmZzZXRGcm9tUGFyZW50VmlydHVhbGl6ZWRMaXN0O1xuICAgIC8vIENoaWxkJ3MgdmlzaWJsZSBsZW5ndGggaXMgdGhlIHNhbWUgYXMgaXRzIHBhcmVudCdzXG4gICAgY29uc3QgdmlzaWJsZUxlbmd0aCA9IG1ldHJpY3MudmlzaWJsZUxlbmd0aDtcbiAgICBjb25zdCBkT2Zmc2V0ID0gb2Zmc2V0IC0gdGhpcy5fc2Nyb2xsTWV0cmljcy5vZmZzZXQ7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuX2xpc3RNZXRyaWNzLmdldENvbnRlbnRMZW5ndGgoKTtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlTGVuZ3RoLFxuICAgICAgY29udGVudExlbmd0aCxcbiAgICAgIG9mZnNldCxcbiAgICAgIGRPZmZzZXQsXG4gICAgfTtcbiAgfTtcblxuICBfb25TY3JvbGwgPSAoZTogT2JqZWN0KSA9PiB7XG4gICAgdGhpcy5fbmVzdGVkQ2hpbGRMaXN0cy5mb3JFYWNoKGNoaWxkTGlzdCA9PiB7XG4gICAgICBjaGlsZExpc3QuX29uU2Nyb2xsKGUpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLm9uU2Nyb2xsKSB7XG4gICAgICB0aGlzLnByb3BzLm9uU2Nyb2xsKGUpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lc3RhbXAgPSBlLnRpbWVTdGFtcDtcbiAgICBsZXQgdmlzaWJsZUxlbmd0aCA9IHRoaXMuX3NlbGVjdExlbmd0aChlLm5hdGl2ZUV2ZW50LmxheW91dE1lYXN1cmVtZW50KTtcbiAgICBsZXQgY29udGVudExlbmd0aCA9IHRoaXMuX3NlbGVjdExlbmd0aChlLm5hdGl2ZUV2ZW50LmNvbnRlbnRTaXplKTtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0RnJvbVNjcm9sbEV2ZW50KGUpO1xuICAgIGxldCBkT2Zmc2V0ID0gb2Zmc2V0IC0gdGhpcy5fc2Nyb2xsTWV0cmljcy5vZmZzZXQ7XG5cbiAgICBpZiAodGhpcy5faXNOZXN0ZWRXaXRoU2FtZU9yaWVudGF0aW9uKCkpIHtcbiAgICAgIGlmICh0aGlzLl9saXN0TWV0cmljcy5nZXRDb250ZW50TGVuZ3RoKCkgPT09IDApIHtcbiAgICAgICAgLy8gSWdub3JlIHNjcm9sbCBldmVudHMgdW50aWwgb25MYXlvdXQgaGFzIGJlZW4gY2FsbGVkIGFuZCB3ZVxuICAgICAgICAvLyBrbm93IG91ciBvZmZzZXQgZnJvbSBvdXIgb2Zmc2V0IGZyb20gb3VyIHBhcmVudFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAoe3Zpc2libGVMZW5ndGgsIGNvbnRlbnRMZW5ndGgsIG9mZnNldCwgZE9mZnNldH0gPVxuICAgICAgICB0aGlzLl9jb252ZXJ0UGFyZW50U2Nyb2xsTWV0cmljcyh7XG4gICAgICAgICAgdmlzaWJsZUxlbmd0aCxcbiAgICAgICAgICBvZmZzZXQsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdCA9IHRoaXMuX3Njcm9sbE1ldHJpY3MudGltZXN0YW1wXG4gICAgICA/IE1hdGgubWF4KDEsIHRpbWVzdGFtcCAtIHRoaXMuX3Njcm9sbE1ldHJpY3MudGltZXN0YW1wKVxuICAgICAgOiAxO1xuICAgIGNvbnN0IHZlbG9jaXR5ID0gZE9mZnNldCAvIGR0O1xuXG4gICAgaWYgKFxuICAgICAgZHQgPiA1MDAgJiZcbiAgICAgIHRoaXMuX3Njcm9sbE1ldHJpY3MuZHQgPiA1MDAgJiZcbiAgICAgIGNvbnRlbnRMZW5ndGggPiA1ICogdmlzaWJsZUxlbmd0aCAmJlxuICAgICAgIXRoaXMuX2hhc1dhcm5lZC5wZXJmXG4gICAgKSB7XG4gICAgICBpbmZvTG9nKFxuICAgICAgICAnVmlydHVhbGl6ZWRMaXN0OiBZb3UgaGF2ZSBhIGxhcmdlIGxpc3QgdGhhdCBpcyBzbG93IHRvIHVwZGF0ZSAtIG1ha2Ugc3VyZSB5b3VyICcgK1xuICAgICAgICAgICdyZW5kZXJJdGVtIGZ1bmN0aW9uIHJlbmRlcnMgY29tcG9uZW50cyB0aGF0IGZvbGxvdyBSZWFjdCBwZXJmb3JtYW5jZSBiZXN0IHByYWN0aWNlcyAnICtcbiAgICAgICAgICAnbGlrZSBQdXJlQ29tcG9uZW50LCBzaG91bGRDb21wb25lbnRVcGRhdGUsIGV0Yy4nLFxuICAgICAgICB7ZHQsIHByZXZEdDogdGhpcy5fc2Nyb2xsTWV0cmljcy5kdCwgY29udGVudExlbmd0aH0sXG4gICAgICApO1xuICAgICAgdGhpcy5faGFzV2FybmVkLnBlcmYgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZvciBpbnZhbGlkIG5lZ2F0aXZlIHZhbHVlcyAody8gUlRMKSwgc2V0IHRoaXMgdG8gMS5cbiAgICBjb25zdCB6b29tU2NhbGUgPSBlLm5hdGl2ZUV2ZW50Lnpvb21TY2FsZSA8IDAgPyAxIDogZS5uYXRpdmVFdmVudC56b29tU2NhbGU7XG4gICAgdGhpcy5fc2Nyb2xsTWV0cmljcyA9IHtcbiAgICAgIGR0LFxuICAgICAgZE9mZnNldCxcbiAgICAgIG9mZnNldCxcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHZlbG9jaXR5LFxuICAgICAgdmlzaWJsZUxlbmd0aCxcbiAgICAgIHpvb21TY2FsZSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTY3JvbGxVcGRhdGVDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgcGVuZGluZ1Njcm9sbFVwZGF0ZUNvdW50OiBzdGF0ZS5wZW5kaW5nU2Nyb2xsVXBkYXRlQ291bnQgLSAxLFxuICAgICAgfSkpO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGVWaWV3YWJsZUl0ZW1zKHRoaXMucHJvcHMsIHRoaXMuc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydCk7XG4gICAgaWYgKCF0aGlzLnByb3BzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX21heWJlQ2FsbE9uRWRnZVJlYWNoZWQoKTtcbiAgICBpZiAodmVsb2NpdHkgIT09IDApIHtcbiAgICAgIHRoaXMuX2ZpbGxSYXRlSGVscGVyLmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIHRoaXMuX2NvbXB1dGVCbGFua25lc3MoKTtcbiAgICB0aGlzLl9zY2hlZHVsZUNlbGxzVG9SZW5kZXJVcGRhdGUoKTtcbiAgfTtcblxuICBfb2Zmc2V0RnJvbVNjcm9sbEV2ZW50KGU6IFNjcm9sbEV2ZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCB7Y29udGVudE9mZnNldCwgY29udGVudFNpemUsIGxheW91dE1lYXN1cmVtZW50fSA9IGUubmF0aXZlRXZlbnQ7XG4gICAgY29uc3Qge2hvcml6b250YWwsIHJ0bH0gPSB0aGlzLl9vcmllbnRhdGlvbigpO1xuICAgIGlmIChob3Jpem9udGFsICYmIHJ0bCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fc2VsZWN0TGVuZ3RoKGNvbnRlbnRTaXplKSAtXG4gICAgICAgICh0aGlzLl9zZWxlY3RPZmZzZXQoY29udGVudE9mZnNldCkgK1xuICAgICAgICAgIHRoaXMuX3NlbGVjdExlbmd0aChsYXlvdXRNZWFzdXJlbWVudCkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0T2Zmc2V0KGNvbnRlbnRPZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIF9zY2hlZHVsZUNlbGxzVG9SZW5kZXJVcGRhdGUoKSB7XG4gICAgLy8gT25seSB0cmlnZ2VyIGhpZ2gtcHJpb3JpdHkgdXBkYXRlcyBpZiB3ZSd2ZSBhY3R1YWxseSByZW5kZXJlZCBjZWxscyxcbiAgICAvLyBhbmQgd2l0aCB0aGF0IHNpemUgZXN0aW1hdGUsIGFjY3VyYXRlbHkgY29tcHV0ZSBob3cgbWFueSBjZWxscyB3ZSBzaG91bGQgcmVuZGVyLlxuICAgIC8vIE90aGVyd2lzZSwgaXQgd291bGQganVzdCByZW5kZXIgYXMgbWFueSBjZWxscyBhcyBpdCBjYW4gKG9mIHplcm8gZGltZW5zaW9uKSxcbiAgICAvLyBlYWNoIHRpbWUgdGhyb3VnaCBhdHRlbXB0aW5nIHRvIHJlbmRlciBtb3JlIChsaW1pdGVkIGJ5IG1heFRvUmVuZGVyUGVyQmF0Y2gpLFxuICAgIC8vIHN0YXJ2aW5nIHRoZSByZW5kZXJlciBmcm9tIGFjdHVhbGx5IGxheWluZyBvdXQgdGhlIG9iamVjdHMgYW5kIGNvbXB1dGluZyBfYXZlcmFnZUNlbGxMZW5ndGguXG4gICAgLy8gSWYgdGhpcyBpcyB0cmlnZ2VyZWQgaW4gYW4gYGNvbXBvbmVudERpZFVwZGF0ZWAgZm9sbG93ZWQgYnkgYSBoaVByaSBjZWxsVG9SZW5kZXJVcGRhdGVcbiAgICAvLyBXZSBzaG91bGRuJ3QgZG8gYW5vdGhlciBoaXByaSBjZWxsVG9SZW5kZXJVcGRhdGVcbiAgICBpZiAoXG4gICAgICAodGhpcy5fbGlzdE1ldHJpY3MuZ2V0QXZlcmFnZUNlbGxMZW5ndGgoKSA+IDAgfHxcbiAgICAgICAgdGhpcy5wcm9wcy5nZXRJdGVtTGF5b3V0ICE9IG51bGwpICYmXG4gICAgICB0aGlzLl9zaG91bGRSZW5kZXJXaXRoUHJpb3JpdHkoKSAmJlxuICAgICAgIXRoaXMuX2hpUHJpSW5Qcm9ncmVzc1xuICAgICkge1xuICAgICAgdGhpcy5faGlQcmlJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIC8vIERvbid0IHdvcnJ5IGFib3V0IGludGVyYWN0aW9ucyB3aGVuIHNjcm9sbGluZyBxdWlja2x5OyBmb2N1cyBvbiBmaWxsaW5nIGNvbnRlbnQgYXMgZmFzdFxuICAgICAgLy8gYXMgcG9zc2libGUuXG4gICAgICB0aGlzLl91cGRhdGVDZWxsc1RvUmVuZGVyQmF0Y2hlci5kaXNwb3NlKHthYm9ydDogdHJ1ZX0pO1xuICAgICAgdGhpcy5fdXBkYXRlQ2VsbHNUb1JlbmRlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cGRhdGVDZWxsc1RvUmVuZGVyQmF0Y2hlci5zY2hlZHVsZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9zaG91bGRSZW5kZXJXaXRoUHJpb3JpdHkoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge2ZpcnN0LCBsYXN0fSA9IHRoaXMuc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydDtcbiAgICBjb25zdCB7b2Zmc2V0LCB2aXNpYmxlTGVuZ3RoLCB2ZWxvY2l0eX0gPSB0aGlzLl9zY3JvbGxNZXRyaWNzO1xuICAgIGNvbnN0IGl0ZW1Db3VudCA9IHRoaXMucHJvcHMuZ2V0SXRlbUNvdW50KHRoaXMucHJvcHMuZGF0YSk7XG4gICAgbGV0IGhpUHJpID0gZmFsc2U7XG4gICAgY29uc3Qgb25TdGFydFJlYWNoZWRUaHJlc2hvbGQgPSBvblN0YXJ0UmVhY2hlZFRocmVzaG9sZE9yRGVmYXVsdChcbiAgICAgIHRoaXMucHJvcHMub25TdGFydFJlYWNoZWRUaHJlc2hvbGQsXG4gICAgKTtcbiAgICBjb25zdCBvbkVuZFJlYWNoZWRUaHJlc2hvbGQgPSBvbkVuZFJlYWNoZWRUaHJlc2hvbGRPckRlZmF1bHQoXG4gICAgICB0aGlzLnByb3BzLm9uRW5kUmVhY2hlZFRocmVzaG9sZCxcbiAgICApO1xuICAgIC8vIE1hcmsgYXMgaGlnaCBwcmlvcml0eSBpZiB3ZSdyZSBjbG9zZSB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGl0ZW1cbiAgICAvLyBCdXQgb25seSBpZiB0aGVyZSBhcmUgaXRlbXMgYmVmb3JlIHRoZSBmaXJzdCByZW5kZXJlZCBpdGVtXG4gICAgaWYgKGZpcnN0ID4gMCkge1xuICAgICAgY29uc3QgZGlzdFRvcCA9XG4gICAgICAgIG9mZnNldCAtXG4gICAgICAgIHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzQXBwcm94KGZpcnN0LCB0aGlzLnByb3BzKS5vZmZzZXQ7XG4gICAgICBoaVByaSA9XG4gICAgICAgIGRpc3RUb3AgPCAwIHx8XG4gICAgICAgICh2ZWxvY2l0eSA8IC0yICYmXG4gICAgICAgICAgZGlzdFRvcCA8XG4gICAgICAgICAgICBnZXRTY3JvbGxpbmdUaHJlc2hvbGQob25TdGFydFJlYWNoZWRUaHJlc2hvbGQsIHZpc2libGVMZW5ndGgpKTtcbiAgICB9XG4gICAgLy8gTWFyayBhcyBoaWdoIHByaW9yaXR5IGlmIHdlJ3JlIGNsb3NlIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgaXRlbVxuICAgIC8vIEJ1dCBvbmx5IGlmIHRoZXJlIGFyZSBpdGVtcyBhZnRlciB0aGUgbGFzdCByZW5kZXJlZCBpdGVtXG4gICAgaWYgKCFoaVByaSAmJiBsYXN0ID49IDAgJiYgbGFzdCA8IGl0ZW1Db3VudCAtIDEpIHtcbiAgICAgIGNvbnN0IGRpc3RCb3R0b20gPVxuICAgICAgICB0aGlzLl9saXN0TWV0cmljcy5nZXRDZWxsTWV0cmljc0FwcHJveChsYXN0LCB0aGlzLnByb3BzKS5vZmZzZXQgLVxuICAgICAgICAob2Zmc2V0ICsgdmlzaWJsZUxlbmd0aCk7XG4gICAgICBoaVByaSA9XG4gICAgICAgIGRpc3RCb3R0b20gPCAwIHx8XG4gICAgICAgICh2ZWxvY2l0eSA+IDIgJiZcbiAgICAgICAgICBkaXN0Qm90dG9tIDxcbiAgICAgICAgICAgIGdldFNjcm9sbGluZ1RocmVzaG9sZChvbkVuZFJlYWNoZWRUaHJlc2hvbGQsIHZpc2libGVMZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGlQcmk7XG4gIH1cblxuICBfb25TY3JvbGxCZWdpbkRyYWcgPSAoZTogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9uZXN0ZWRDaGlsZExpc3RzLmZvckVhY2goY2hpbGRMaXN0ID0+IHtcbiAgICAgIGNoaWxkTGlzdC5fb25TY3JvbGxCZWdpbkRyYWcoZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fdmlld2FiaWxpdHlUdXBsZXMuZm9yRWFjaCh0dXBsZSA9PiB7XG4gICAgICB0dXBsZS52aWV3YWJpbGl0eUhlbHBlci5yZWNvcmRJbnRlcmFjdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuX2hhc0ludGVyYWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucHJvcHMub25TY3JvbGxCZWdpbkRyYWcgJiYgdGhpcy5wcm9wcy5vblNjcm9sbEJlZ2luRHJhZyhlKTtcbiAgfTtcblxuICBfb25TY3JvbGxFbmREcmFnID0gKGU6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5fbmVzdGVkQ2hpbGRMaXN0cy5mb3JFYWNoKGNoaWxkTGlzdCA9PiB7XG4gICAgICBjaGlsZExpc3QuX29uU2Nyb2xsRW5kRHJhZyhlKTtcbiAgICB9KTtcbiAgICBjb25zdCB7dmVsb2NpdHl9ID0gZS5uYXRpdmVFdmVudDtcbiAgICBpZiAodmVsb2NpdHkpIHtcbiAgICAgIHRoaXMuX3Njcm9sbE1ldHJpY3MudmVsb2NpdHkgPSB0aGlzLl9zZWxlY3RPZmZzZXQodmVsb2NpdHkpO1xuICAgIH1cbiAgICB0aGlzLl9jb21wdXRlQmxhbmtuZXNzKCk7XG4gICAgdGhpcy5wcm9wcy5vblNjcm9sbEVuZERyYWcgJiYgdGhpcy5wcm9wcy5vblNjcm9sbEVuZERyYWcoZSk7XG4gIH07XG5cbiAgX29uTW9tZW50dW1TY3JvbGxCZWdpbiA9IChlOiBTY3JvbGxFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX25lc3RlZENoaWxkTGlzdHMuZm9yRWFjaChjaGlsZExpc3QgPT4ge1xuICAgICAgY2hpbGRMaXN0Ll9vbk1vbWVudHVtU2Nyb2xsQmVnaW4oZSk7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9wcy5vbk1vbWVudHVtU2Nyb2xsQmVnaW4gJiYgdGhpcy5wcm9wcy5vbk1vbWVudHVtU2Nyb2xsQmVnaW4oZSk7XG4gIH07XG5cbiAgX29uTW9tZW50dW1TY3JvbGxFbmQgPSAoZTogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9uZXN0ZWRDaGlsZExpc3RzLmZvckVhY2goY2hpbGRMaXN0ID0+IHtcbiAgICAgIGNoaWxkTGlzdC5fb25Nb21lbnR1bVNjcm9sbEVuZChlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLnZlbG9jaXR5ID0gMDtcbiAgICB0aGlzLl9jb21wdXRlQmxhbmtuZXNzKCk7XG4gICAgdGhpcy5wcm9wcy5vbk1vbWVudHVtU2Nyb2xsRW5kICYmIHRoaXMucHJvcHMub25Nb21lbnR1bVNjcm9sbEVuZChlKTtcbiAgfTtcblxuICBfdXBkYXRlQ2VsbHNUb1JlbmRlciA9ICgpID0+IHtcbiAgICB0aGlzLl91cGRhdGVWaWV3YWJsZUl0ZW1zKHRoaXMucHJvcHMsIHRoaXMuc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydCk7XG5cbiAgICB0aGlzLnNldFN0YXRlKChzdGF0ZSwgcHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzQXJvdW5kVmlld3BvcnQgPSB0aGlzLl9hZGp1c3RDZWxsc0Fyb3VuZFZpZXdwb3J0KFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydCxcbiAgICAgICAgc3RhdGUucGVuZGluZ1Njcm9sbFVwZGF0ZUNvdW50LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlbmRlck1hc2sgPSBWaXJ0dWFsaXplZExpc3QuX2NyZWF0ZVJlbmRlck1hc2soXG4gICAgICAgIHByb3BzLFxuICAgICAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0LFxuICAgICAgICB0aGlzLl9nZXROb25WaWV3cG9ydFJlbmRlclJlZ2lvbnMocHJvcHMpLFxuICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0LmZpcnN0ID09PSBzdGF0ZS5jZWxsc0Fyb3VuZFZpZXdwb3J0LmZpcnN0ICYmXG4gICAgICAgIGNlbGxzQXJvdW5kVmlld3BvcnQubGFzdCA9PT0gc3RhdGUuY2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0ICYmXG4gICAgICAgIHJlbmRlck1hc2suZXF1YWxzKHN0YXRlLnJlbmRlck1hc2spXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7Y2VsbHNBcm91bmRWaWV3cG9ydCwgcmVuZGVyTWFza307XG4gICAgfSk7XG4gIH07XG5cbiAgX2NyZWF0ZVZpZXdUb2tlbiA9IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGlzVmlld2FibGU6IGJvb2xlYW4sXG4gICAgcHJvcHM6IENlbGxNZXRyaWNQcm9wcyxcbiAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICkgPT4ge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRJdGVtfSA9IHByb3BzO1xuICAgIGNvbnN0IGl0ZW0gPSBnZXRJdGVtKGRhdGEsIGluZGV4KTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXgsXG4gICAgICBpdGVtLFxuICAgICAga2V5OiBWaXJ0dWFsaXplZExpc3QuX2tleUV4dHJhY3RvcihpdGVtLCBpbmRleCwgcHJvcHMpLFxuICAgICAgaXNWaWV3YWJsZSxcbiAgICB9O1xuICB9O1xuXG4gIF9fZ2V0TGlzdE1ldHJpY3MoKTogTGlzdE1ldHJpY3NBZ2dyZWdhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdE1ldHJpY3M7XG4gIH1cblxuICBfZ2V0Tm9uVmlld3BvcnRSZW5kZXJSZWdpb25zID0gKFxuICAgIHByb3BzOiBDZWxsTWV0cmljUHJvcHMsXG4gICk6ICRSZWFkT25seUFycmF5PHtcbiAgICBmaXJzdDogbnVtYmVyLFxuICAgIGxhc3Q6IG51bWJlcixcbiAgfT4gPT4ge1xuICAgIC8vIEtlZXAgYSB2aWV3cG9ydCdzIHdvcnRoIG9mIGNvbnRlbnQgYXJvdW5kIHRoZSBsYXN0IGZvY3VzZWQgY2VsbCB0byBhbGxvd1xuICAgIC8vIHJhbmRvbSBuYXZpZ2F0aW9uIGFyb3VuZCBpdCB3aXRob3V0IGFueSBibGFua2luZy4gRS5nLiB0YWJiaW5nIGZyb20gb25lXG4gICAgLy8gZm9jdXNlZCBpdGVtIG91dCBvZiB2aWV3cG9ydCB0byBhbm90aGVyLlxuICAgIGlmIChcbiAgICAgICEodGhpcy5fbGFzdEZvY3VzZWRDZWxsS2V5ICYmIHRoaXMuX2NlbGxSZWZzW3RoaXMuX2xhc3RGb2N1c2VkQ2VsbEtleV0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEZvY3VzZWRDZWxsUmVuZGVyZXIgPSB0aGlzLl9jZWxsUmVmc1t0aGlzLl9sYXN0Rm9jdXNlZENlbGxLZXldO1xuICAgIGNvbnN0IGZvY3VzZWRDZWxsSW5kZXggPSBsYXN0Rm9jdXNlZENlbGxSZW5kZXJlci5wcm9wcy5pbmRleDtcbiAgICBjb25zdCBpdGVtQ291bnQgPSBwcm9wcy5nZXRJdGVtQ291bnQocHJvcHMuZGF0YSk7XG5cbiAgICAvLyBUaGUgbGFzdCBjZWxsIHdlIHJlbmRlcmVkIG1heSBiZSBhdCBhIG5ldyBpbmRleC4gQmFpbCBpZiB3ZSBkb24ndCBrbm93XG4gICAgLy8gd2hlcmUgaXQgaXMuXG4gICAgaWYgKFxuICAgICAgZm9jdXNlZENlbGxJbmRleCA+PSBpdGVtQ291bnQgfHxcbiAgICAgIFZpcnR1YWxpemVkTGlzdC5fZ2V0SXRlbUtleShwcm9wcywgZm9jdXNlZENlbGxJbmRleCkgIT09XG4gICAgICAgIHRoaXMuX2xhc3RGb2N1c2VkQ2VsbEtleVxuICAgICkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCBmaXJzdCA9IGZvY3VzZWRDZWxsSW5kZXg7XG4gICAgbGV0IGhlaWdodE9mQ2VsbHNCZWZvcmVGb2N1c2VkID0gMDtcbiAgICBmb3IgKFxuICAgICAgbGV0IGkgPSBmaXJzdCAtIDE7XG4gICAgICBpID49IDAgJiYgaGVpZ2h0T2ZDZWxsc0JlZm9yZUZvY3VzZWQgPCB0aGlzLl9zY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGg7XG4gICAgICBpLS1cbiAgICApIHtcbiAgICAgIGZpcnN0LS07XG4gICAgICBoZWlnaHRPZkNlbGxzQmVmb3JlRm9jdXNlZCArPSB0aGlzLl9saXN0TWV0cmljcy5nZXRDZWxsTWV0cmljc0FwcHJveChcbiAgICAgICAgaSxcbiAgICAgICAgcHJvcHMsXG4gICAgICApLmxlbmd0aDtcbiAgICB9XG5cbiAgICBsZXQgbGFzdCA9IGZvY3VzZWRDZWxsSW5kZXg7XG4gICAgbGV0IGhlaWdodE9mQ2VsbHNBZnRlckZvY3VzZWQgPSAwO1xuICAgIGZvciAoXG4gICAgICBsZXQgaSA9IGxhc3QgKyAxO1xuICAgICAgaSA8IGl0ZW1Db3VudCAmJlxuICAgICAgaGVpZ2h0T2ZDZWxsc0FmdGVyRm9jdXNlZCA8IHRoaXMuX3Njcm9sbE1ldHJpY3MudmlzaWJsZUxlbmd0aDtcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgbGFzdCsrO1xuICAgICAgaGVpZ2h0T2ZDZWxsc0FmdGVyRm9jdXNlZCArPSB0aGlzLl9saXN0TWV0cmljcy5nZXRDZWxsTWV0cmljc0FwcHJveChcbiAgICAgICAgaSxcbiAgICAgICAgcHJvcHMsXG4gICAgICApLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3tmaXJzdCwgbGFzdH1dO1xuICB9O1xuXG4gIF91cGRhdGVWaWV3YWJsZUl0ZW1zKFxuICAgIHByb3BzOiBDZWxsTWV0cmljUHJvcHMsXG4gICAgY2VsbHNBcm91bmRWaWV3cG9ydDoge2ZpcnN0OiBudW1iZXIsIGxhc3Q6IG51bWJlcn0sXG4gICkge1xuICAgIC8vIElmIHdlIGhhdmUgYW55IHBlbmRpbmcgc2Nyb2xsIHVwZGF0ZXMgaXQgbWVhbnMgdGhhdCB0aGUgc2Nyb2xsIG1ldHJpY3NcbiAgICAvLyBhcmUgb3V0IG9mIGRhdGUgYW5kIHdlIHNob3VsZCBub3QgY2FsbCBhbnkgb2YgdGhlIHZpc2liaWxpdHkgY2FsbGJhY2tzLlxuICAgIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTY3JvbGxVcGRhdGVDb3VudCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdmlld2FiaWxpdHlUdXBsZXMuZm9yRWFjaCh0dXBsZSA9PiB7XG4gICAgICB0dXBsZS52aWV3YWJpbGl0eUhlbHBlci5vblVwZGF0ZShcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIHRoaXMuX3Njcm9sbE1ldHJpY3Mub2Zmc2V0LFxuICAgICAgICB0aGlzLl9zY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGgsXG4gICAgICAgIHRoaXMuX2xpc3RNZXRyaWNzLFxuICAgICAgICB0aGlzLl9jcmVhdGVWaWV3VG9rZW4sXG4gICAgICAgIHR1cGxlLm9uVmlld2FibGVJdGVtc0NoYW5nZWQsXG4gICAgICAgIGNlbGxzQXJvdW5kVmlld3BvcnQsXG4gICAgICApO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgdmVydGljYWxseUludmVydGVkOlxuICAgIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCdcbiAgICAgID8ge3RyYW5zZm9ybTogW3tzY2FsZTogLTF9XX1cbiAgICAgIDoge3RyYW5zZm9ybTogW3tzY2FsZVk6IC0xfV19LFxuICBob3Jpem9udGFsbHlJbnZlcnRlZDoge1xuICAgIHRyYW5zZm9ybTogW3tzY2FsZVg6IC0xfV0sXG4gIH0sXG4gIGRlYnVnOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgZGVidWdPdmVybGF5QmFzZToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgfSxcbiAgZGVidWdPdmVybGF5OiB7XG4gICAgYm90dG9tOiAwLFxuICAgIHdpZHRoOiAyMCxcbiAgICBib3JkZXJDb2xvcjogJ2JsdWUnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICB9LFxuICBkZWJ1Z092ZXJsYXlGcmFtZToge1xuICAgIGxlZnQ6IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnb3JhbmdlJyxcbiAgfSxcbiAgZGVidWdPdmVybGF5RnJhbWVMYXN0OiB7XG4gICAgbGVmdDogMCxcbiAgICBib3JkZXJDb2xvcjogJ2dyZWVuJyxcbiAgICBib3JkZXJXaWR0aDogMixcbiAgfSxcbiAgZGVidWdPdmVybGF5RnJhbWVWaXM6IHtcbiAgICBsZWZ0OiAwLFxuICAgIGJvcmRlckNvbG9yOiAncmVkJyxcbiAgICBib3JkZXJXaWR0aDogMixcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpcnR1YWxpemVkTGlzdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHtJbnRlcmFjdGlvbk1hbmFnZXJ9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbi8qKlxuICogQSBzaW1wbGUgY2xhc3MgZm9yIGJhdGNoaW5nIHVwIGludm9jYXRpb25zIG9mIGEgbG93LXByaSBjYWxsYmFjay4gQSB0aW1lb3V0IGlzIHNldCB0byBydW4gdGhlXG4gKiBjYWxsYmFjayBvbmNlIGFmdGVyIGEgZGVsYXksIG5vIG1hdHRlciBob3cgbWFueSB0aW1lcyBpdCdzIHNjaGVkdWxlZC4gT25jZSB0aGUgZGVsYXkgaXMgcmVhY2hlZCxcbiAqIEludGVyYWN0aW9uTWFuYWdlci5ydW5BZnRlckludGVyYWN0aW9ucyBpcyB1c2VkIHRvIGludm9rZSB0aGUgY2FsbGJhY2sgYWZ0ZXIgYW55IGhpLXByaVxuICogaW50ZXJhY3Rpb25zIGFyZSBkb25lIHJ1bm5pbmcuXG4gKlxuICogTWFrZSBzdXJlIHRvIGNsZWFudXAgd2l0aCBkaXNwb3NlKCkuICBFeGFtcGxlOlxuICpcbiAqICAgY2xhc3MgV2lkZ2V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAqICAgICBfYmF0Y2hlZFNhdmU6IG5ldyBCYXRjaGluYXRvcigoKSA9PiB0aGlzLl9zYXZlU3RhdGUsIDEwMDApO1xuICogICAgIF9zYXZlU2F0ZSgpIHtcbiAqICAgICAgIC8vIHNhdmUgdGhpcy5zdGF0ZSB0byBkaXNrXG4gKiAgICAgfVxuICogICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAqICAgICAgIHRoaXMuX2JhdGNoZWRTYXZlLnNjaGVkdWxlKCk7XG4gKiAgICAgfVxuICogICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICogICAgICAgdGhpcy5fYmF0Y2hlZFNhdmUuZGlzcG9zZSgpO1xuICogICAgIH1cbiAqICAgICAuLi5cbiAqICAgfVxuICovXG5jbGFzcyBCYXRjaGluYXRvciB7XG4gIF9jYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgX2RlbGF5OiBudW1iZXI7XG4gIF90YXNrSGFuZGxlOiA/e2NhbmNlbDogKCkgPT4gdm9pZCwgLi4ufTtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2s6ICgpID0+IHZvaWQsIGRlbGF5TVM6IG51bWJlcikge1xuICAgIHRoaXMuX2RlbGF5ID0gZGVsYXlNUztcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG4gIC8qXG4gICAqIENsZWFudXAgYW55IHBlbmRpbmcgdGFza3MuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGlmIHRoZXJlIGlzIGEgcGVuZGluZyB0YXNrIHRoZSBjYWxsYmFjayBpcyBydW4gaW1tZWRpYXRlbHkuIFNldCB0aGUgb3B0aW9uIGFib3J0IHRvXG4gICAqIHRydWUgdG8gbm90IGNhbGwgdGhlIGNhbGxiYWNrIGlmIGl0IHdhcyBwZW5kaW5nLlxuICAgKi9cbiAgZGlzcG9zZShvcHRpb25zOiB7YWJvcnQ6IGJvb2xlYW4sIC4uLn0gPSB7YWJvcnQ6IGZhbHNlfSkge1xuICAgIGlmICh0aGlzLl90YXNrSGFuZGxlKSB7XG4gICAgICB0aGlzLl90YXNrSGFuZGxlLmNhbmNlbCgpO1xuICAgICAgaWYgKCFvcHRpb25zLmFib3J0KSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl90YXNrSGFuZGxlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2NoZWR1bGUoKSB7XG4gICAgaWYgKHRoaXMuX3Rhc2tIYW5kbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdGFza0hhbmRsZSA9IEludGVyYWN0aW9uTWFuYWdlci5ydW5BZnRlckludGVyYWN0aW9ucygoKSA9PiB7XG4gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjbGVhciB0aGUgaGFuZGxlIGJlZm9yZSBpbnZva2luZyB0aGUgY2FsbGJhY2sgc28gdGhhdCBpZiB0aGUgY2FsbGJhY2sgY2FsbHNcbiAgICAgICAgLy8gc2NoZWR1bGUgYWdhaW4sIGl0IHdpbGwgYWN0dWFsbHkgc2NoZWR1bGUgYW5vdGhlciB0YXNrLlxuICAgICAgICB0aGlzLl90YXNrSGFuZGxlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2RlbGF5KTtcbiAgICB0aGlzLl90YXNrSGFuZGxlID0ge2NhbmNlbDogKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhdGNoaW5hdG9yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2xhbXAobWluOiBudW1iZXIsIHZhbHVlOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgcmV0dXJuIG1pbjtcbiAgfVxuICBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICByZXR1cm4gbWF4O1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFtcDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogSW50ZW50aW9uYWwgaW5mby1sZXZlbCBsb2dnaW5nIGZvciBjbGVhciBzZXBhcmF0aW9uIGZyb20gYWQtaG9jIGNvbnNvbGUgZGVidWcgbG9nZ2luZy5cbiAqL1xuZnVuY3Rpb24gaW5mb0xvZyguLi5hcmdzOiBBcnJheTxtaXhlZD4pOiB2b2lkIHtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluZm9Mb2c7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGlsZExpc3RDb2xsZWN0aW9uPFRMaXN0PiB7XG4gIF9jZWxsS2V5VG9DaGlsZHJlbjogTWFwPHN0cmluZywgU2V0PFRMaXN0Pj4gPSBuZXcgTWFwKCk7XG4gIF9jaGlsZHJlblRvQ2VsbEtleTogTWFwPFRMaXN0LCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIGFkZChsaXN0OiBUTGlzdCwgY2VsbEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaW52YXJpYW50KFxuICAgICAgIXRoaXMuX2NoaWxkcmVuVG9DZWxsS2V5LmhhcyhsaXN0KSxcbiAgICAgICdUcnlpbmcgdG8gYWRkIGFscmVhZHkgcHJlc2VudCBjaGlsZCBsaXN0JyxcbiAgICApO1xuXG4gICAgY29uc3QgY2VsbExpc3RzID0gdGhpcy5fY2VsbEtleVRvQ2hpbGRyZW4uZ2V0KGNlbGxLZXkpID8/IG5ldyBTZXQoKTtcbiAgICBjZWxsTGlzdHMuYWRkKGxpc3QpO1xuICAgIHRoaXMuX2NlbGxLZXlUb0NoaWxkcmVuLnNldChjZWxsS2V5LCBjZWxsTGlzdHMpO1xuXG4gICAgdGhpcy5fY2hpbGRyZW5Ub0NlbGxLZXkuc2V0KGxpc3QsIGNlbGxLZXkpO1xuICB9XG5cbiAgcmVtb3ZlKGxpc3Q6IFRMaXN0KTogdm9pZCB7XG4gICAgY29uc3QgY2VsbEtleSA9IHRoaXMuX2NoaWxkcmVuVG9DZWxsS2V5LmdldChsaXN0KTtcbiAgICBpbnZhcmlhbnQoY2VsbEtleSAhPSBudWxsLCAnVHJ5aW5nIHRvIHJlbW92ZSBub24tcHJlc2VudCBjaGlsZCBsaXN0Jyk7XG4gICAgdGhpcy5fY2hpbGRyZW5Ub0NlbGxLZXkuZGVsZXRlKGxpc3QpO1xuXG4gICAgY29uc3QgY2VsbExpc3RzID0gdGhpcy5fY2VsbEtleVRvQ2hpbGRyZW4uZ2V0KGNlbGxLZXkpO1xuICAgIGludmFyaWFudChjZWxsTGlzdHMsICdfY2VsbEtleVRvQ2hpbGRyZW4gc2hvdWxkIGNvbnRhaW4gY2VsbEtleScpO1xuICAgIGNlbGxMaXN0cy5kZWxldGUobGlzdCk7XG5cbiAgICBpZiAoY2VsbExpc3RzLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuX2NlbGxLZXlUb0NoaWxkcmVuLmRlbGV0ZShjZWxsS2V5KTtcbiAgICB9XG4gIH1cblxuICBmb3JFYWNoKGZuOiBUTGlzdCA9PiB2b2lkKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBsaXN0U2V0IG9mIHRoaXMuX2NlbGxLZXlUb0NoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICBmb3IgKGNvbnN0IGxpc3Qgb2YgbGlzdFNldCkge1xuICAgICAgICBmbihsaXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3JFYWNoSW5DZWxsKGNlbGxLZXk6IHN0cmluZywgZm46IFRMaXN0ID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0U2V0ID0gdGhpcy5fY2VsbEtleVRvQ2hpbGRyZW4uZ2V0KGNlbGxLZXkpID8/IFtdO1xuICAgIGZvciAoY29uc3QgbGlzdCBvZiBsaXN0U2V0KSB7XG4gICAgICBmbihsaXN0KTtcbiAgICB9XG4gIH1cblxuICBhbnlJbkNlbGwoY2VsbEtleTogc3RyaW5nLCBmbjogVExpc3QgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxpc3RTZXQgPSB0aGlzLl9jZWxsS2V5VG9DaGlsZHJlbi5nZXQoY2VsbEtleSkgPz8gW107XG4gICAgZm9yIChjb25zdCBsaXN0IG9mIGxpc3RTZXQpIHtcbiAgICAgIGlmIChmbihsaXN0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlblRvQ2VsbEtleS5zaXplO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtDZWxsTWV0cmljUHJvcHN9IGZyb20gJy4vTGlzdE1ldHJpY3NBZ2dyZWdhdG9yJztcblxuaW1wb3J0IExpc3RNZXRyaWNzQWdncmVnYXRvciBmcm9tICcuL0xpc3RNZXRyaWNzQWdncmVnYXRvcic7XG5cbmV4cG9ydCB0eXBlIEZpbGxSYXRlSW5mbyA9IEluZm87XG5cbmNsYXNzIEluZm8ge1xuICBhbnlfYmxhbmtfY291bnQ6IG51bWJlciA9IDA7XG4gIGFueV9ibGFua19tczogbnVtYmVyID0gMDtcbiAgYW55X2JsYW5rX3NwZWVkX3N1bTogbnVtYmVyID0gMDtcbiAgbW9zdGx5X2JsYW5rX2NvdW50OiBudW1iZXIgPSAwO1xuICBtb3N0bHlfYmxhbmtfbXM6IG51bWJlciA9IDA7XG4gIHBpeGVsc19ibGFuazogbnVtYmVyID0gMDtcbiAgcGl4ZWxzX3NhbXBsZWQ6IG51bWJlciA9IDA7XG4gIHBpeGVsc19zY3JvbGxlZDogbnVtYmVyID0gMDtcbiAgdG90YWxfdGltZV9zcGVudDogbnVtYmVyID0gMDtcbiAgc2FtcGxlX2NvdW50OiBudW1iZXIgPSAwO1xufVxuXG5jb25zdCBERUJVRyA9IGZhbHNlO1xuXG5sZXQgX2xpc3RlbmVyczogQXJyYXk8KEluZm8pID0+IHZvaWQ+ID0gW107XG5sZXQgX21pblNhbXBsZUNvdW50ID0gMTA7XG5sZXQgX3NhbXBsZVJhdGUgPSBERUJVRyA/IDEgOiBudWxsO1xuXG4vKipcbiAqIEEgaGVscGVyIGNsYXNzIGZvciBkZXRlY3Rpbmcgd2hlbiB0aGUgbWF4aW1lbSBmaWxsIHJhdGUgb2YgYFZpcnR1YWxpemVkTGlzdGAgaXMgZXhjZWVkZWQuXG4gKiBCeSBkZWZhdWx0IHRoZSBzYW1wbGluZyByYXRlIGlzIHNldCB0byB6ZXJvIGFuZCB0aGlzIHdpbGwgZG8gbm90aGluZy4gSWYgeW91IHdhbnQgdG8gY29sbGVjdFxuICogc2FtcGxlcyAoZS5nLiB0byBsb2cgdGhlbSksIG1ha2Ugc3VyZSB0byBjYWxsIGBGaWxsUmF0ZUhlbHBlci5zZXRTYW1wbGVSYXRlKDAuMC0xLjApYC5cbiAqXG4gKiBMaXN0ZW5lcnMgYW5kIHNhbXBsZSByYXRlIGFyZSBnbG9iYWwgZm9yIGFsbCBgVmlydHVhbGl6ZWRMaXN0YHMgLSB0eXBpY2FsIHVzYWdlIHdpbGwgY29tYmluZSB3aXRoXG4gKiBgU2NlbmVUcmFja2VyLmdldEFjdGl2ZVNjZW5lYCB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhlIGV2ZW50cy5cbiAqL1xuY2xhc3MgRmlsbFJhdGVIZWxwZXIge1xuICBfYW55QmxhbmtTdGFydFRpbWU6ID9udW1iZXIgPSBudWxsO1xuICBfZW5hYmxlZCA9IGZhbHNlO1xuICBfbGlzdE1ldHJpY3M6IExpc3RNZXRyaWNzQWdncmVnYXRvcjtcbiAgX2luZm86IEluZm8gPSBuZXcgSW5mbygpO1xuICBfbW9zdGx5QmxhbmtTdGFydFRpbWU6ID9udW1iZXIgPSBudWxsO1xuICBfc2FtcGxlc1N0YXJ0VGltZTogP251bWJlciA9IG51bGw7XG5cbiAgc3RhdGljIGFkZExpc3RlbmVyKGNhbGxiYWNrOiBGaWxsUmF0ZUluZm8gPT4gdm9pZCk6IHtcbiAgICByZW1vdmU6ICgpID0+IHZvaWQsXG4gICAgLi4uXG4gIH0ge1xuICAgIGlmIChfc2FtcGxlUmF0ZSA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKCdDYWxsIGBGaWxsUmF0ZUhlbHBlci5zZXRTYW1wbGVSYXRlYCBiZWZvcmUgYGFkZExpc3RlbmVyYC4nKTtcbiAgICB9XG4gICAgX2xpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVtb3ZlOiAoKSA9PiB7XG4gICAgICAgIF9saXN0ZW5lcnMgPSBfbGlzdGVuZXJzLmZpbHRlcihsaXN0ZW5lciA9PiBjYWxsYmFjayAhPT0gbGlzdGVuZXIpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHNldFNhbXBsZVJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKSB7XG4gICAgX3NhbXBsZVJhdGUgPSBzYW1wbGVSYXRlO1xuICB9XG5cbiAgc3RhdGljIHNldE1pblNhbXBsZUNvdW50KG1pblNhbXBsZUNvdW50OiBudW1iZXIpIHtcbiAgICBfbWluU2FtcGxlQ291bnQgPSBtaW5TYW1wbGVDb3VudDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxpc3RNZXRyaWNzOiBMaXN0TWV0cmljc0FnZ3JlZ2F0b3IpIHtcbiAgICB0aGlzLl9saXN0TWV0cmljcyA9IGxpc3RNZXRyaWNzO1xuICAgIHRoaXMuX2VuYWJsZWQgPSAoX3NhbXBsZVJhdGUgfHwgMCkgPiBNYXRoLnJhbmRvbSgpO1xuICAgIHRoaXMuX3Jlc2V0RGF0YSgpO1xuICB9XG5cbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5fc2FtcGxlc1N0YXJ0VGltZSA9PSBudWxsKSB7XG4gICAgICBERUJVRyAmJiBjb25zb2xlLmRlYnVnKCdGaWxsUmF0ZUhlbHBlcjogYWN0aXZhdGUnKTtcbiAgICAgIHRoaXMuX3NhbXBsZXNTdGFydFRpbWUgPSBnbG9iYWwucGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfVxuICB9XG5cbiAgZGVhY3RpdmF0ZUFuZEZsdXNoKCkge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuX3NhbXBsZXNTdGFydFRpbWU7IC8vIGNvbnN0IGZvciBmbG93XG4gICAgaWYgKHN0YXJ0ID09IG51bGwpIHtcbiAgICAgIERFQlVHICYmXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ0ZpbGxSYXRlSGVscGVyOiBiYWlsIG9uIGRlYWN0aXZhdGUgd2l0aCBubyBzdGFydCB0aW1lJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbmZvLnNhbXBsZV9jb3VudCA8IF9taW5TYW1wbGVDb3VudCkge1xuICAgICAgLy8gRG9uJ3QgYm90aGVyIHdpdGggdW5kZXItc2FtcGxlZCBldmVudHMuXG4gICAgICB0aGlzLl9yZXNldERhdGEoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG90YWxfdGltZV9zcGVudCA9IGdsb2JhbC5wZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0O1xuICAgIGNvbnN0IGluZm86IGFueSA9IHtcbiAgICAgIC4uLnRoaXMuX2luZm8sXG4gICAgICB0b3RhbF90aW1lX3NwZW50LFxuICAgIH07XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBjb25zdCBkZXJpdmVkID0ge1xuICAgICAgICBhdmdfYmxhbmtuZXNzOiB0aGlzLl9pbmZvLnBpeGVsc19ibGFuayAvIHRoaXMuX2luZm8ucGl4ZWxzX3NhbXBsZWQsXG4gICAgICAgIGF2Z19zcGVlZDogdGhpcy5faW5mby5waXhlbHNfc2Nyb2xsZWQgLyAodG90YWxfdGltZV9zcGVudCAvIDEwMDApLFxuICAgICAgICBhdmdfc3BlZWRfd2hlbl9hbnlfYmxhbms6XG4gICAgICAgICAgdGhpcy5faW5mby5hbnlfYmxhbmtfc3BlZWRfc3VtIC8gdGhpcy5faW5mby5hbnlfYmxhbmtfY291bnQsXG4gICAgICAgIGFueV9ibGFua19wZXJfbWluOlxuICAgICAgICAgIHRoaXMuX2luZm8uYW55X2JsYW5rX2NvdW50IC8gKHRvdGFsX3RpbWVfc3BlbnQgLyAxMDAwIC8gNjApLFxuICAgICAgICBhbnlfYmxhbmtfdGltZV9mcmFjOiB0aGlzLl9pbmZvLmFueV9ibGFua19tcyAvIHRvdGFsX3RpbWVfc3BlbnQsXG4gICAgICAgIG1vc3RseV9ibGFua19wZXJfbWluOlxuICAgICAgICAgIHRoaXMuX2luZm8ubW9zdGx5X2JsYW5rX2NvdW50IC8gKHRvdGFsX3RpbWVfc3BlbnQgLyAxMDAwIC8gNjApLFxuICAgICAgICBtb3N0bHlfYmxhbmtfdGltZV9mcmFjOiB0aGlzLl9pbmZvLm1vc3RseV9ibGFua19tcyAvIHRvdGFsX3RpbWVfc3BlbnQsXG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGVyaXZlZCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICAgZGVyaXZlZFtrZXldID0gTWF0aC5yb3VuZCgxMDAwICogZGVyaXZlZFtrZXldKSAvIDEwMDA7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmRlYnVnKCdGaWxsUmF0ZUhlbHBlciBkZWFjdGl2YXRlQW5kRmx1c2g6ICcsIHtkZXJpdmVkLCBpbmZvfSk7XG4gICAgfVxuICAgIF9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcihpbmZvKSk7XG4gICAgdGhpcy5fcmVzZXREYXRhKCk7XG4gIH1cblxuICBjb21wdXRlQmxhbmtuZXNzKFxuICAgIHByb3BzOiB7XG4gICAgICAuLi5DZWxsTWV0cmljUHJvcHMsXG4gICAgICBpbml0aWFsTnVtVG9SZW5kZXI/OiA/bnVtYmVyLFxuICAgICAgLi4uXG4gICAgfSxcbiAgICBjZWxsc0Fyb3VuZFZpZXdwb3J0OiB7XG4gICAgICBmaXJzdDogbnVtYmVyLFxuICAgICAgbGFzdDogbnVtYmVyLFxuICAgICAgLi4uXG4gICAgfSxcbiAgICBzY3JvbGxNZXRyaWNzOiB7XG4gICAgICBkT2Zmc2V0OiBudW1iZXIsXG4gICAgICBvZmZzZXQ6IG51bWJlcixcbiAgICAgIHZlbG9jaXR5OiBudW1iZXIsXG4gICAgICB2aXNpYmxlTGVuZ3RoOiBudW1iZXIsXG4gICAgICAuLi5cbiAgICB9LFxuICApOiBudW1iZXIge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9lbmFibGVkIHx8XG4gICAgICBwcm9wcy5nZXRJdGVtQ291bnQocHJvcHMuZGF0YSkgPT09IDAgfHxcbiAgICAgIGNlbGxzQXJvdW5kVmlld3BvcnQubGFzdCA8IGNlbGxzQXJvdW5kVmlld3BvcnQuZmlyc3QgfHxcbiAgICAgIHRoaXMuX3NhbXBsZXNTdGFydFRpbWUgPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHtkT2Zmc2V0LCBvZmZzZXQsIHZlbG9jaXR5LCB2aXNpYmxlTGVuZ3RofSA9IHNjcm9sbE1ldHJpY3M7XG5cbiAgICAvLyBEZW5vbWluYXRvciBtZXRyaWNzIHRoYXQgd2UgdHJhY2sgZm9yIGFsbCBldmVudHMgLSBtb3N0IG9mIHRoZSB0aW1lIHRoZXJlIGlzIG5vIGJsYW5rbmVzcyBhbmRcbiAgICAvLyB3ZSB3YW50IHRvIGNhcHR1cmUgdGhhdC5cbiAgICB0aGlzLl9pbmZvLnNhbXBsZV9jb3VudCsrO1xuICAgIHRoaXMuX2luZm8ucGl4ZWxzX3NhbXBsZWQgKz0gTWF0aC5yb3VuZCh2aXNpYmxlTGVuZ3RoKTtcbiAgICB0aGlzLl9pbmZvLnBpeGVsc19zY3JvbGxlZCArPSBNYXRoLnJvdW5kKE1hdGguYWJzKGRPZmZzZXQpKTtcbiAgICBjb25zdCBzY3JvbGxTcGVlZCA9IE1hdGgucm91bmQoTWF0aC5hYnModmVsb2NpdHkpICogMTAwMCk7IC8vIHB4IC8gc2VjXG5cbiAgICAvLyBXaGV0aGVyIGJsYW5rIG5vdyBvciBub3QsIHJlY29yZCB0aGUgZWxhcHNlZCB0aW1lIGJsYW5rIGlmIHdlIHdlcmUgYmxhbmsgbGFzdCB0aW1lLlxuICAgIGNvbnN0IG5vdyA9IGdsb2JhbC5wZXJmb3JtYW5jZS5ub3coKTtcbiAgICBpZiAodGhpcy5fYW55QmxhbmtTdGFydFRpbWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5mby5hbnlfYmxhbmtfbXMgKz0gbm93IC0gdGhpcy5fYW55QmxhbmtTdGFydFRpbWU7XG4gICAgfVxuICAgIHRoaXMuX2FueUJsYW5rU3RhcnRUaW1lID0gbnVsbDtcbiAgICBpZiAodGhpcy5fbW9zdGx5QmxhbmtTdGFydFRpbWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5mby5tb3N0bHlfYmxhbmtfbXMgKz0gbm93IC0gdGhpcy5fbW9zdGx5QmxhbmtTdGFydFRpbWU7XG4gICAgfVxuICAgIHRoaXMuX21vc3RseUJsYW5rU3RhcnRUaW1lID0gbnVsbDtcblxuICAgIGxldCBibGFua1RvcCA9IDA7XG4gICAgbGV0IGZpcnN0ID0gY2VsbHNBcm91bmRWaWV3cG9ydC5maXJzdDtcbiAgICBsZXQgZmlyc3RGcmFtZSA9IHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzKGZpcnN0LCBwcm9wcyk7XG4gICAgd2hpbGUgKFxuICAgICAgZmlyc3QgPD0gY2VsbHNBcm91bmRWaWV3cG9ydC5sYXN0ICYmXG4gICAgICAoIWZpcnN0RnJhbWUgfHwgIWZpcnN0RnJhbWUuaXNNb3VudGVkKVxuICAgICkge1xuICAgICAgZmlyc3RGcmFtZSA9IHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzKGZpcnN0LCBwcm9wcyk7XG4gICAgICBmaXJzdCsrO1xuICAgIH1cbiAgICAvLyBPbmx5IGNvdW50IGJsYW5rVG9wIGlmIHdlIGFyZW4ndCByZW5kZXJpbmcgdGhlIGZpcnN0IGl0ZW0sIG90aGVyd2lzZSB3ZSB3aWxsIGNvdW50IHRoZSBoZWFkZXJcbiAgICAvLyBhcyBibGFuay5cbiAgICBpZiAoZmlyc3RGcmFtZSAmJiBmaXJzdCA+IDApIHtcbiAgICAgIGJsYW5rVG9wID0gTWF0aC5taW4oXG4gICAgICAgIHZpc2libGVMZW5ndGgsXG4gICAgICAgIE1hdGgubWF4KDAsIGZpcnN0RnJhbWUub2Zmc2V0IC0gb2Zmc2V0KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBibGFua0JvdHRvbSA9IDA7XG4gICAgbGV0IGxhc3QgPSBjZWxsc0Fyb3VuZFZpZXdwb3J0Lmxhc3Q7XG4gICAgbGV0IGxhc3RGcmFtZSA9IHRoaXMuX2xpc3RNZXRyaWNzLmdldENlbGxNZXRyaWNzKGxhc3QsIHByb3BzKTtcbiAgICB3aGlsZSAoXG4gICAgICBsYXN0ID49IGNlbGxzQXJvdW5kVmlld3BvcnQuZmlyc3QgJiZcbiAgICAgICghbGFzdEZyYW1lIHx8ICFsYXN0RnJhbWUuaXNNb3VudGVkKVxuICAgICkge1xuICAgICAgbGFzdEZyYW1lID0gdGhpcy5fbGlzdE1ldHJpY3MuZ2V0Q2VsbE1ldHJpY3MobGFzdCwgcHJvcHMpO1xuICAgICAgbGFzdC0tO1xuICAgIH1cbiAgICAvLyBPbmx5IGNvdW50IGJsYW5rQm90dG9tIGlmIHdlIGFyZW4ndCByZW5kZXJpbmcgdGhlIGxhc3QgaXRlbSwgb3RoZXJ3aXNlIHdlIHdpbGwgY291bnQgdGhlXG4gICAgLy8gZm9vdGVyIGFzIGJsYW5rLlxuICAgIGlmIChsYXN0RnJhbWUgJiYgbGFzdCA8IHByb3BzLmdldEl0ZW1Db3VudChwcm9wcy5kYXRhKSAtIDEpIHtcbiAgICAgIGNvbnN0IGJvdHRvbUVkZ2UgPSBsYXN0RnJhbWUub2Zmc2V0ICsgbGFzdEZyYW1lLmxlbmd0aDtcbiAgICAgIGJsYW5rQm90dG9tID0gTWF0aC5taW4oXG4gICAgICAgIHZpc2libGVMZW5ndGgsXG4gICAgICAgIE1hdGgubWF4KDAsIG9mZnNldCArIHZpc2libGVMZW5ndGggLSBib3R0b21FZGdlKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBpeGVsc19ibGFuayA9IE1hdGgucm91bmQoYmxhbmtUb3AgKyBibGFua0JvdHRvbSk7XG4gICAgY29uc3QgYmxhbmtuZXNzID0gcGl4ZWxzX2JsYW5rIC8gdmlzaWJsZUxlbmd0aDtcbiAgICBpZiAoYmxhbmtuZXNzID4gMCkge1xuICAgICAgdGhpcy5fYW55QmxhbmtTdGFydFRpbWUgPSBub3c7XG4gICAgICB0aGlzLl9pbmZvLmFueV9ibGFua19zcGVlZF9zdW0gKz0gc2Nyb2xsU3BlZWQ7XG4gICAgICB0aGlzLl9pbmZvLmFueV9ibGFua19jb3VudCsrO1xuICAgICAgdGhpcy5faW5mby5waXhlbHNfYmxhbmsgKz0gcGl4ZWxzX2JsYW5rO1xuICAgICAgaWYgKGJsYW5rbmVzcyA+IDAuNSkge1xuICAgICAgICB0aGlzLl9tb3N0bHlCbGFua1N0YXJ0VGltZSA9IG5vdztcbiAgICAgICAgdGhpcy5faW5mby5tb3N0bHlfYmxhbmtfY291bnQrKztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNjcm9sbFNwZWVkIDwgMC4wMSB8fCBNYXRoLmFicyhkT2Zmc2V0KSA8IDEpIHtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZUFuZEZsdXNoKCk7XG4gICAgfVxuICAgIHJldHVybiBibGFua25lc3M7XG4gIH1cblxuICBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgX3Jlc2V0RGF0YSgpIHtcbiAgICB0aGlzLl9hbnlCbGFua1N0YXJ0VGltZSA9IG51bGw7XG4gICAgdGhpcy5faW5mbyA9IG5ldyBJbmZvKCk7XG4gICAgdGhpcy5fbW9zdGx5QmxhbmtTdGFydFRpbWUgPSBudWxsO1xuICAgIHRoaXMuX3NhbXBsZXNTdGFydFRpbWUgPSBudWxsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRmlsbFJhdGVIZWxwZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1Byb3BzIGFzIFZpcnR1YWxpemVkTGlzdFByb3BzfSBmcm9tICcuL1ZpcnR1YWxpemVkTGlzdFByb3BzJztcbmltcG9ydCB0eXBlIHtMYXlvdXR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQge2tleUV4dHJhY3RvciBhcyBkZWZhdWx0S2V5RXh0cmFjdG9yfSBmcm9tICcuL1ZpcnR1YWxpemVVdGlscyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5cbmV4cG9ydCB0eXBlIENlbGxNZXRyaWNzID0ge1xuICAvKipcbiAgICogSW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIGxpc3RcbiAgICovXG4gIGluZGV4OiBudW1iZXIsXG4gIC8qKlxuICAgKiBMZW5ndGggb2YgdGhlIGNlbGwgYWxvbmcgdGhlIHNjcm9sbGluZyBheGlzXG4gICAqL1xuICBsZW5ndGg6IG51bWJlcixcbiAgLyoqXG4gICAqIERpc3RhbmNlIGJldHdlZW4gdGhpcyBjZWxsIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgYWxvbmcgdGhlIHNjcm9sbGluZ1xuICAgKiBheGlzXG4gICAqL1xuICBvZmZzZXQ6IG51bWJlcixcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNlbGwgaXMgbGFzdCBrbm93biB0byBiZSBtb3VudGVkXG4gICAqL1xuICBpc01vdW50ZWQ6IGJvb2xlYW4sXG59O1xuXG4vLyBUT0RPOiBgaW52ZXJ0ZWRgIGNhbiBiZSBpbmNvcnBvcmF0ZWQgaGVyZSBpZiBpdCBpcyBtb3ZlZCB0byBhbiBvcmRlclxuLy8gYmFzZWQgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBvZiB0cmFuc2Zvcm0uXG5leHBvcnQgdHlwZSBMaXN0T3JpZW50YXRpb24gPSB7XG4gIGhvcml6b250YWw6IGJvb2xlYW4sXG4gIHJ0bDogYm9vbGVhbixcbn07XG5cbi8qKlxuICogU3Vic2V0IG9mIFZpcnR1YWxpemVkTGlzdCBwcm9wcyBuZWVkZWQgdG8gY2FsY3VsYXRlIGNlbGwgbWV0cmljc1xuICovXG5leHBvcnQgdHlwZSBDZWxsTWV0cmljUHJvcHMgPSB7XG4gIGRhdGE6IFZpcnR1YWxpemVkTGlzdFByb3BzWydkYXRhJ10sXG4gIGdldEl0ZW1Db3VudDogVmlydHVhbGl6ZWRMaXN0UHJvcHNbJ2dldEl0ZW1Db3VudCddLFxuICBnZXRJdGVtOiBWaXJ0dWFsaXplZExpc3RQcm9wc1snZ2V0SXRlbSddLFxuICBnZXRJdGVtTGF5b3V0PzogVmlydHVhbGl6ZWRMaXN0UHJvcHNbJ2dldEl0ZW1MYXlvdXQnXSxcbiAga2V5RXh0cmFjdG9yPzogVmlydHVhbGl6ZWRMaXN0UHJvcHNbJ2tleUV4dHJhY3RvciddLFxuICAuLi5cbn07XG5cbi8qKlxuICogUHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHF1ZXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXRyaWNzIG9mIGEgbGlzdCBhbmQgaXRzIGNlbGxzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0TWV0cmljc0FnZ3JlZ2F0b3Ige1xuICBfYXZlcmFnZUNlbGxMZW5ndGggPSAwO1xuICBfY2VsbE1ldHJpY3M6IE1hcDxzdHJpbmcsIENlbGxNZXRyaWNzPiA9IG5ldyBNYXAoKTtcbiAgX2NvbnRlbnRMZW5ndGg6ID9udW1iZXI7XG4gIF9oaWdoZXN0TWVhc3VyZWRDZWxsSW5kZXggPSAwO1xuICBfbWVhc3VyZWRDZWxsc0xlbmd0aCA9IDA7XG4gIF9tZWFzdXJlZENlbGxzQ291bnQgPSAwO1xuICBfb3JpZW50YXRpb246IExpc3RPcmllbnRhdGlvbiA9IHtcbiAgICBob3Jpem9udGFsOiBmYWxzZSxcbiAgICBydGw6IGZhbHNlLFxuICB9O1xuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIExpc3RNZXRyaWNzQWdncmVnYXRvciB0aGF0IGEgY2VsbCBoYXMgYmVlbiBsYWlkIG91dC5cbiAgICpcbiAgICogQHJldHVybnMgd2hldGhlciB0aGUgY2VsbCBsYXlvdXQgaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBub3RpZmljYXRpb25cbiAgICovXG4gIG5vdGlmeUNlbGxMYXlvdXQoe1xuICAgIGNlbGxJbmRleCxcbiAgICBjZWxsS2V5LFxuICAgIG9yaWVudGF0aW9uLFxuICAgIGxheW91dCxcbiAgfToge1xuICAgIGNlbGxJbmRleDogbnVtYmVyLFxuICAgIGNlbGxLZXk6IHN0cmluZyxcbiAgICBvcmllbnRhdGlvbjogTGlzdE9yaWVudGF0aW9uLFxuICAgIGxheW91dDogTGF5b3V0LFxuICB9KTogYm9vbGVhbiB7XG4gICAgdGhpcy5faW52YWxpZGF0ZUlmT3JpZW50YXRpb25DaGFuZ2VkKG9yaWVudGF0aW9uKTtcblxuICAgIGNvbnN0IG5leHQ6IENlbGxNZXRyaWNzID0ge1xuICAgICAgaW5kZXg6IGNlbGxJbmRleCxcbiAgICAgIGxlbmd0aDogdGhpcy5fc2VsZWN0TGVuZ3RoKGxheW91dCksXG4gICAgICBpc01vdW50ZWQ6IHRydWUsXG4gICAgICBvZmZzZXQ6IHRoaXMuZmxvd1JlbGF0aXZlT2Zmc2V0KGxheW91dCksXG4gICAgfTtcbiAgICBjb25zdCBjdXJyID0gdGhpcy5fY2VsbE1ldHJpY3MuZ2V0KGNlbGxLZXkpO1xuXG4gICAgaWYgKCFjdXJyIHx8IG5leHQub2Zmc2V0ICE9PSBjdXJyLm9mZnNldCB8fCBuZXh0Lmxlbmd0aCAhPT0gY3Vyci5sZW5ndGgpIHtcbiAgICAgIGlmIChjdXJyKSB7XG4gICAgICAgIGNvbnN0IGRMZW5ndGggPSBuZXh0Lmxlbmd0aCAtIGN1cnIubGVuZ3RoO1xuICAgICAgICB0aGlzLl9tZWFzdXJlZENlbGxzTGVuZ3RoICs9IGRMZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tZWFzdXJlZENlbGxzTGVuZ3RoICs9IG5leHQubGVuZ3RoO1xuICAgICAgICB0aGlzLl9tZWFzdXJlZENlbGxzQ291bnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fYXZlcmFnZUNlbGxMZW5ndGggPVxuICAgICAgICB0aGlzLl9tZWFzdXJlZENlbGxzTGVuZ3RoIC8gdGhpcy5fbWVhc3VyZWRDZWxsc0NvdW50O1xuICAgICAgdGhpcy5fY2VsbE1ldHJpY3Muc2V0KGNlbGxLZXksIG5leHQpO1xuICAgICAgdGhpcy5faGlnaGVzdE1lYXN1cmVkQ2VsbEluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuX2hpZ2hlc3RNZWFzdXJlZENlbGxJbmRleCxcbiAgICAgICAgY2VsbEluZGV4LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyLmlzTW91bnRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmeSBMaXN0TWV0cmljc0FnZ3JlZ2F0b3IgdGhhdCBhIGNlbGwgaGFzIGJlZW4gdW5tb3VudGVkLlxuICAgKi9cbiAgbm90aWZ5Q2VsbFVubW91bnRlZChjZWxsS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyID0gdGhpcy5fY2VsbE1ldHJpY3MuZ2V0KGNlbGxLZXkpO1xuICAgIGlmIChjdXJyKSB7XG4gICAgICBjdXJyLmlzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgTGlzdE1ldHJpY3NBZ2dyZWdhdG9yIHRoYXQgdGhlIGxpc3RzIGNvbnRlbnQgY29udGFpbmVyIGhhcyBiZWVuIGxhaWQgb3V0LlxuICAgKi9cbiAgbm90aWZ5TGlzdENvbnRlbnRMYXlvdXQoe1xuICAgIG9yaWVudGF0aW9uLFxuICAgIGxheW91dCxcbiAgfToge1xuICAgIG9yaWVudGF0aW9uOiBMaXN0T3JpZW50YXRpb24sXG4gICAgbGF5b3V0OiAkUmVhZE9ubHk8e3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfT4sXG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZhbGlkYXRlSWZPcmllbnRhdGlvbkNoYW5nZWQob3JpZW50YXRpb24pO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSB0aGlzLl9zZWxlY3RMZW5ndGgobGF5b3V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIHRoZSBjZWxscyB3aGljaCBoYXZlIGJlZW4gbWVhc3VyZWRcbiAgICovXG4gIGdldEF2ZXJhZ2VDZWxsTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2F2ZXJhZ2VDZWxsTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaGlnaGVzdCBtZWFzdXJlZCBjZWxsIGluZGV4IChvciAwIGlmIG5vdGhpbmcgaGFzIGJlZW4gbWVhc3VyZWRcbiAgICogeWV0KVxuICAgKi9cbiAgZ2V0SGlnaGVzdE1lYXN1cmVkQ2VsbEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZ2hlc3RNZWFzdXJlZENlbGxJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleGFjdCBtZXRyaWNzIG9mIGEgY2VsbCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGxhaWQgb3V0LFxuICAgKiBvdGhlcndpc2UgYW4gZXN0aW1hdGUgYmFzZWQgb24gdGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIHByZXZpb3VzbHkgbWVhc3VyZWRcbiAgICogY2VsbHNcbiAgICovXG4gIGdldENlbGxNZXRyaWNzQXBwcm94KGluZGV4OiBudW1iZXIsIHByb3BzOiBDZWxsTWV0cmljUHJvcHMpOiBDZWxsTWV0cmljcyB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmdldENlbGxNZXRyaWNzKGluZGV4LCBwcm9wcyk7XG4gICAgaWYgKGZyYW1lICYmIGZyYW1lLmluZGV4ID09PSBpbmRleCkge1xuICAgICAgLy8gY2hlY2sgZm9yIGludmFsaWQgZnJhbWVzIGR1ZSB0byByb3cgcmUtb3JkZXJpbmdcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge2RhdGEsIGdldEl0ZW1Db3VudH0gPSBwcm9wcztcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgaW5kZXggPj0gMCAmJiBpbmRleCA8IGdldEl0ZW1Db3VudChkYXRhKSxcbiAgICAgICAgJ1RyaWVkIHRvIGdldCBmcmFtZSBmb3Igb3V0IG9mIHJhbmdlIGluZGV4ICcgKyBpbmRleCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZW5ndGg6IHRoaXMuX2F2ZXJhZ2VDZWxsTGVuZ3RoLFxuICAgICAgICBvZmZzZXQ6IHRoaXMuX2F2ZXJhZ2VDZWxsTGVuZ3RoICogaW5kZXgsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhhY3QgbWV0cmljcyBvZiBhIGNlbGwgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBsYWlkIG91dFxuICAgKi9cbiAgZ2V0Q2VsbE1ldHJpY3MoaW5kZXg6IG51bWJlciwgcHJvcHM6IENlbGxNZXRyaWNQcm9wcyk6ID9DZWxsTWV0cmljcyB7XG4gICAgY29uc3Qge2RhdGEsIGdldEl0ZW0sIGdldEl0ZW1Db3VudCwgZ2V0SXRlbUxheW91dH0gPSBwcm9wcztcbiAgICBpbnZhcmlhbnQoXG4gICAgICBpbmRleCA+PSAwICYmIGluZGV4IDwgZ2V0SXRlbUNvdW50KGRhdGEpLFxuICAgICAgJ1RyaWVkIHRvIGdldCBtZXRyaWNzIGZvciBvdXQgb2YgcmFuZ2UgY2VsbCBpbmRleCAnICsgaW5kZXgsXG4gICAgKTtcbiAgICBjb25zdCBrZXlFeHRyYWN0b3IgPSBwcm9wcy5rZXlFeHRyYWN0b3IgPz8gZGVmYXVsdEtleUV4dHJhY3RvcjtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuX2NlbGxNZXRyaWNzLmdldChcbiAgICAgIGtleUV4dHJhY3RvcihnZXRJdGVtKGRhdGEsIGluZGV4KSwgaW5kZXgpLFxuICAgICk7XG4gICAgaWYgKGZyYW1lICYmIGZyYW1lLmluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cblxuICAgIGlmIChnZXRJdGVtTGF5b3V0KSB7XG4gICAgICBjb25zdCB7bGVuZ3RoLCBvZmZzZXR9ID0gZ2V0SXRlbUxheW91dChkYXRhLCBpbmRleCk7XG4gICAgICAvLyBUT0RPOiBgaXNNb3VudGVkYCBpcyB1c2VkIGZvciBib3RoIFwiaXMgZXhhY3QgbGF5b3V0XCIgYW5kIFwiaGFzIGJlZW5cbiAgICAgIC8vIHVubW91bnRlZFwiLiBTaG91bGQgYmUgcmVmYWN0b3JlZC5cbiAgICAgIHJldHVybiB7aW5kZXgsIGxlbmd0aCwgb2Zmc2V0LCBpc01vdW50ZWQ6IHRydWV9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gYXBwcm94aW1hdGUgb2Zmc2V0IHRvIGFuIGl0ZW0gYXQgYSBnaXZlbiBpbmRleC4gU3VwcG9ydHNcbiAgICogZnJhY3Rpb25hbCBpbmRpY2VzLlxuICAgKi9cbiAgZ2V0Q2VsbE9mZnNldEFwcHJveChpbmRleDogbnVtYmVyLCBwcm9wczogQ2VsbE1ldHJpY1Byb3BzKTogbnVtYmVyIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbmRleCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENlbGxNZXRyaWNzQXBwcm94KGluZGV4LCBwcm9wcykub2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmcmFtZU1ldHJpY3MgPSB0aGlzLmdldENlbGxNZXRyaWNzQXBwcm94KE1hdGguZmxvb3IoaW5kZXgpLCBwcm9wcyk7XG4gICAgICBjb25zdCByZW1haW5kZXIgPSBpbmRleCAtIE1hdGguZmxvb3IoaW5kZXgpO1xuICAgICAgcmV0dXJuIGZyYW1lTWV0cmljcy5vZmZzZXQgKyByZW1haW5kZXIgKiBmcmFtZU1ldHJpY3MubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgYWxsIFNjcm9sbFZpZXcgY29udGVudCBhbG9uZyB0aGUgc2Nyb2xsaW5nIGF4aXMuXG4gICAqL1xuICBnZXRDb250ZW50TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGggPz8gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgY29udGVudCBsZW5ndGggaGFzIGJlZW4gb2JzZXJ2ZWRcbiAgICovXG4gIGhhc0NvbnRlbnRMZW5ndGgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGggIT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgZmxvdy1yZWxhdGl2ZSBvZmZzZXQgKGUuZy4gc3RhcnRpbmcgZnJvbSB0aGUgbGVmdCBpbiBMVFIsIGJ1dFxuICAgKiByaWdodCBpbiBSVEwpIGZyb20gYSBsYXlvdXQgYm94LlxuICAgKi9cbiAgZmxvd1JlbGF0aXZlT2Zmc2V0KGxheW91dDogTGF5b3V0LCByZWZlcmVuY2VDb250ZW50TGVuZ3RoPzogP251bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qge2hvcml6b250YWwsIHJ0bH0gPSB0aGlzLl9vcmllbnRhdGlvbjtcblxuICAgIGlmIChob3Jpem9udGFsICYmIHJ0bCkge1xuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IHJlZmVyZW5jZUNvbnRlbnRMZW5ndGggPz8gdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgY29udGVudExlbmd0aCAhPSBudWxsLFxuICAgICAgICAnTGlzdE1ldHJpY3NBZ2dyZWdhdG9yIG11c3QgYmUgbm90aWZpZWQgb2YgbGlzdCBjb250ZW50IGxheW91dCBiZWZvcmUgcmVzb2x2aW5nIG9mZnNldHMnLFxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvbnRlbnRMZW5ndGggLVxuICAgICAgICAodGhpcy5fc2VsZWN0T2Zmc2V0KGxheW91dCkgKyB0aGlzLl9zZWxlY3RMZW5ndGgobGF5b3V0KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RPZmZzZXQobGF5b3V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBmbG93LXJlbGF0aXZlIG9mZnNldCB0byBhIGNhcnRlc2lhbiBvZmZzZXRcbiAgICovXG4gIGNhcnRlc2lhbk9mZnNldChmbG93UmVsYXRpdmVPZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qge2hvcml6b250YWwsIHJ0bH0gPSB0aGlzLl9vcmllbnRhdGlvbjtcblxuICAgIGlmIChob3Jpem9udGFsICYmIHJ0bCkge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICB0aGlzLl9jb250ZW50TGVuZ3RoICE9IG51bGwsXG4gICAgICAgICdMaXN0TWV0cmljc0FnZ3JlZ2F0b3IgbXVzdCBiZSBub3RpZmllZCBvZiBsaXN0IGNvbnRlbnQgbGF5b3V0IGJlZm9yZSByZXNvbHZpbmcgb2Zmc2V0cycsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGggLSBmbG93UmVsYXRpdmVPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbG93UmVsYXRpdmVPZmZzZXQ7XG4gICAgfVxuICB9XG5cbiAgX2ludmFsaWRhdGVJZk9yaWVudGF0aW9uQ2hhbmdlZChvcmllbnRhdGlvbjogTGlzdE9yaWVudGF0aW9uKTogdm9pZCB7XG4gICAgaWYgKG9yaWVudGF0aW9uLnJ0bCAhPT0gdGhpcy5fb3JpZW50YXRpb24ucnRsKSB7XG4gICAgICB0aGlzLl9jZWxsTWV0cmljcy5jbGVhcigpO1xuICAgIH1cblxuICAgIGlmIChvcmllbnRhdGlvbi5ob3Jpem9udGFsICE9PSB0aGlzLl9vcmllbnRhdGlvbi5ob3Jpem9udGFsKSB7XG4gICAgICB0aGlzLl9hdmVyYWdlQ2VsbExlbmd0aCA9IDA7XG4gICAgICB0aGlzLl9oaWdoZXN0TWVhc3VyZWRDZWxsSW5kZXggPSAwO1xuICAgICAgdGhpcy5fbWVhc3VyZWRDZWxsc0xlbmd0aCA9IDA7XG4gICAgICB0aGlzLl9tZWFzdXJlZENlbGxzQ291bnQgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gIH1cblxuICBfc2VsZWN0TGVuZ3RoKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gIH06ICRSZWFkT25seTx7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIC4uLn0+KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb24uaG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICB9XG5cbiAgX3NlbGVjdE9mZnNldCh7eCwgeX06ICRSZWFkT25seTx7eDogbnVtYmVyLCB5OiBudW1iZXIsIC4uLn0+KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb24uaG9yaXpvbnRhbCA/IHggOiB5O1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIGBzZXRTdGF0ZWAgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5LCBhbmQgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZlxuICogYHRoaXMucHJvcHNgIG9yIGB0aGlzLnN0YXRlYDpcbiAqIGh0dHBzOi8vcmVhY3QuZGV2L2RvY3Mvc3RhdGUtYW5kLWxpZmVjeWNsZS5odG1sI3N0YXRlLXVwZGF0ZXMtbWF5LWJlLWFzeW5jaHJvbm91c1xuICpcbiAqIFNhZmVQdXJlQ29tcG9uZW50IGFkZHMgcnVudGltZSBlbmZvcmNlbWVudCwgdG8gY2F0Y2ggY2FzZXMgd2hlcmUgdGhlc2VcbiAqIHZhcmlhYmxlcyBhcmUgcmVhZCBpbiBhIHN0YXRlIHVwZGF0ZXIgZnVuY3Rpb24sIGluc3RlYWQgb2YgdGhlIG9uZXMgcGFzc2VkXG4gKiBpbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVTYWZlUHVyZUNvbXBvbmVudDxcbiAgUHJvcHMsXG4gIFN0YXRlOiBpbnRlcmZhY2Uge30sXG4+IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgX2luQXN5bmNTdGF0ZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLl9pbnN0YWxsU2V0U3RhdGVIb29rcygpO1xuICB9XG5cbiAgc2V0U3RhdGUoXG4gICAgcGFydGlhbFN0YXRlOiA/KFBhcnRpYWw8U3RhdGU+IHwgKChTdGF0ZSwgUHJvcHMpID0+ID9QYXJ0aWFsPFN0YXRlPikpLFxuICAgIGNhbGxiYWNrPzogKCkgPT4gbWl4ZWQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdXBlci5zZXRTdGF0ZSgoc3RhdGUsIHByb3BzKSA9PiB7XG4gICAgICAgIHRoaXMuX2luQXN5bmNTdGF0ZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIGxldCByZXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0ID0gcGFydGlhbFN0YXRlKHN0YXRlLCBwcm9wcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLl9pbkFzeW5jU3RhdGVVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5zZXRTdGF0ZShwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBfaW5zdGFsbFNldFN0YXRlSG9va3MoKSB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgbGV0IHtwcm9wcywgc3RhdGV9ID0gdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncHJvcHMnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGludmFyaWFudChcbiAgICAgICAgICAhdGhhdC5faW5Bc3luY1N0YXRlVXBkYXRlLFxuICAgICAgICAgICdcInRoaXMucHJvcHNcIiBzaG91bGQgbm90IGJlIGFjY2Vzc2VkIGR1cmluZyBzdGF0ZSB1cGRhdGVzJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgfSxcbiAgICAgIHNldChuZXdQcm9wczogUHJvcHMpIHtcbiAgICAgICAgcHJvcHMgPSBuZXdQcm9wcztcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdGF0ZScsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICF0aGF0Ll9pbkFzeW5jU3RhdGVVcGRhdGUsXG4gICAgICAgICAgJ1widGhpcy5zdGF0ZVwiIHNob3VsZCBub3QgYmUgYWNjZWVzc2VkIGR1cmluZyBzdGF0ZSB1cGRhdGVzJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfSxcbiAgICAgIHNldChuZXdTdGF0ZTogU3RhdGUpIHtcbiAgICAgICAgc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0NlbGxNZXRyaWNQcm9wc30gZnJvbSAnLi9MaXN0TWV0cmljc0FnZ3JlZ2F0b3InO1xuXG5pbXBvcnQgTGlzdE1ldHJpY3NBZ2dyZWdhdG9yIGZyb20gJy4vTGlzdE1ldHJpY3NBZ2dyZWdhdG9yJztcblxuY29uc3QgaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbmV4cG9ydCB0eXBlIFZpZXdUb2tlbiA9IHtcbiAgaXRlbTogYW55LFxuICBrZXk6IHN0cmluZyxcbiAgaW5kZXg6ID9udW1iZXIsXG4gIGlzVmlld2FibGU6IGJvb2xlYW4sXG4gIHNlY3Rpb24/OiBhbnksXG4gIC4uLlxufTtcblxuZXhwb3J0IHR5cGUgVmlld2FiaWxpdHlDb25maWdDYWxsYmFja1BhaXIgPSB7XG4gIHZpZXdhYmlsaXR5Q29uZmlnOiBWaWV3YWJpbGl0eUNvbmZpZyxcbiAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZDogKGluZm86IHtcbiAgICB2aWV3YWJsZUl0ZW1zOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgIGNoYW5nZWQ6IEFycmF5PFZpZXdUb2tlbj4sXG4gICAgLi4uXG4gIH0pID0+IHZvaWQsXG4gIC4uLlxufTtcblxuZXhwb3J0IHR5cGUgVmlld2FiaWxpdHlDb25maWcgPSB7fFxuICAvKipcbiAgICogTWluaW11bSBhbW91bnQgb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0aGF0IGFuIGl0ZW0gbXVzdCBiZSBwaHlzaWNhbGx5IHZpZXdhYmxlIGJlZm9yZSB0aGVcbiAgICogdmlld2FiaWxpdHkgY2FsbGJhY2sgd2lsbCBiZSBmaXJlZC4gQSBoaWdoIG51bWJlciBtZWFucyB0aGF0IHNjcm9sbGluZyB0aHJvdWdoIGNvbnRlbnQgd2l0aG91dFxuICAgKiBzdG9wcGluZyB3aWxsIG5vdCBtYXJrIHRoZSBjb250ZW50IGFzIHZpZXdhYmxlLlxuICAgKi9cbiAgbWluaW11bVZpZXdUaW1lPzogbnVtYmVyLFxuXG4gIC8qKlxuICAgKiBQZXJjZW50IG9mIHZpZXdwb3J0IHRoYXQgbXVzdCBiZSBjb3ZlcmVkIGZvciBhIHBhcnRpYWxseSBvY2NsdWRlZCBpdGVtIHRvIGNvdW50IGFzXG4gICAqIFwidmlld2FibGVcIiwgMC0xMDAuIEZ1bGx5IHZpc2libGUgaXRlbXMgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHZpZXdhYmxlLiBBIHZhbHVlIG9mIDAgbWVhbnNcbiAgICogdGhhdCBhIHNpbmdsZSBwaXhlbCBpbiB0aGUgdmlld3BvcnQgbWFrZXMgdGhlIGl0ZW0gdmlld2FibGUsIGFuZCBhIHZhbHVlIG9mIDEwMCBtZWFucyB0aGF0XG4gICAqIGFuIGl0ZW0gbXVzdCBiZSBlaXRoZXIgZW50aXJlbHkgdmlzaWJsZSBvciBjb3ZlciB0aGUgZW50aXJlIHZpZXdwb3J0IHRvIGNvdW50IGFzIHZpZXdhYmxlLlxuICAgKi9cbiAgdmlld0FyZWFDb3ZlcmFnZVBlcmNlbnRUaHJlc2hvbGQ/OiBudW1iZXIsXG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gYHZpZXdBcmVhUGVyY2VudFRocmVzaG9sZGAsIGJ1dCBjb25zaWRlcnMgdGhlIHBlcmNlbnQgb2YgdGhlIGl0ZW0gdGhhdCBpcyB2aXNpYmxlLFxuICAgKiByYXRoZXIgdGhhbiB0aGUgZnJhY3Rpb24gb2YgdGhlIHZpZXdhYmxlIGFyZWEgaXQgY292ZXJzLlxuICAgKi9cbiAgaXRlbVZpc2libGVQZXJjZW50VGhyZXNob2xkPzogbnVtYmVyLFxuXG4gIC8qKlxuICAgKiBOb3RoaW5nIGlzIGNvbnNpZGVyZWQgdmlld2FibGUgdW50aWwgdGhlIHVzZXIgc2Nyb2xscyBvciBgcmVjb3JkSW50ZXJhY3Rpb25gIGlzIGNhbGxlZCBhZnRlclxuICAgKiByZW5kZXIuXG4gICAqL1xuICB3YWl0Rm9ySW50ZXJhY3Rpb24/OiBib29sZWFuLFxufH07XG5cbi8qKlxuICogQSBVdGlsaXR5IGNsYXNzIGZvciBjYWxjdWxhdGluZyB2aWV3YWJsZSBpdGVtcyBiYXNlZCBvbiBjdXJyZW50IG1ldHJpY3MgbGlrZSBzY3JvbGwgcG9zaXRpb24gYW5kXG4gKiBsYXlvdXQuXG4gKlxuICogQW4gaXRlbSBpcyBzYWlkIHRvIGJlIGluIGEgXCJ2aWV3YWJsZVwiIHN0YXRlIHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmdcbiAqIGlzIHRydWUgZm9yIGxvbmdlciB0aGFuIGBtaW5pbXVtVmlld1RpbWVgIG1pbGxpc2Vjb25kcyAoYWZ0ZXIgYW4gaW50ZXJhY3Rpb24gaWYgYHdhaXRGb3JJbnRlcmFjdGlvbmBcbiAqIGlzIHRydWUpOlxuICpcbiAqIC0gT2NjdXB5aW5nID49IGB2aWV3QXJlYUNvdmVyYWdlUGVyY2VudFRocmVzaG9sZGAgb2YgdGhlIHZpZXcgYXJlYSBYT1IgZnJhY3Rpb24gb2YgdGhlIGl0ZW1cbiAqICAgdmlzaWJsZSBpbiB0aGUgdmlldyBhcmVhID49IGBpdGVtVmlzaWJsZVBlcmNlbnRUaHJlc2hvbGRgLlxuICogLSBFbnRpcmVseSB2aXNpYmxlIG9uIHNjcmVlblxuICovXG5jbGFzcyBWaWV3YWJpbGl0eUhlbHBlciB7XG4gIF9jb25maWc6IFZpZXdhYmlsaXR5Q29uZmlnO1xuICBfaGFzSW50ZXJhY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBfdGltZXJzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcbiAgX3ZpZXdhYmxlSW5kaWNlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICBfdmlld2FibGVJdGVtczogTWFwPHN0cmluZywgVmlld1Rva2VuPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb25maWc6IFZpZXdhYmlsaXR5Q29uZmlnID0ge3ZpZXdBcmVhQ292ZXJhZ2VQZXJjZW50VGhyZXNob2xkOiAwfSxcbiAgKSB7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFudXAsIGUuZy4gb24gdW5tb3VudC4gQ2xlYXJzIGFueSBwZW5kaW5nIHRpbWVycy5cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgLyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gKD49MC42My4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKSBUaGlzXG4gICAgICogY29tbWVudCBzdXBwcmVzc2VzIGFuIGVycm9yIGZvdW5kIHdoZW4gRmxvdyB2MC42MyB3YXMgZGVwbG95ZWQuIFRvIHNlZVxuICAgICAqIHRoZSBlcnJvciBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICB0aGlzLl90aW1lcnMuZm9yRWFjaChjbGVhclRpbWVvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hpY2ggaXRlbXMgYXJlIHZpZXdhYmxlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1ldHJpY3MgYW5kIGNvbmZpZy5cbiAgICovXG4gIGNvbXB1dGVWaWV3YWJsZUl0ZW1zKFxuICAgIHByb3BzOiBDZWxsTWV0cmljUHJvcHMsXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgdmlld3BvcnRIZWlnaHQ6IG51bWJlcixcbiAgICBsaXN0TWV0cmljczogTGlzdE1ldHJpY3NBZ2dyZWdhdG9yLFxuICAgIC8vIE9wdGlvbmFsIG9wdGltaXphdGlvbiB0byByZWR1Y2UgdGhlIHNjYW4gc2l6ZVxuICAgIHJlbmRlclJhbmdlPzoge1xuICAgICAgZmlyc3Q6IG51bWJlcixcbiAgICAgIGxhc3Q6IG51bWJlcixcbiAgICAgIC4uLlxuICAgIH0sXG4gICk6IEFycmF5PG51bWJlcj4ge1xuICAgIGNvbnN0IGl0ZW1Db3VudCA9IHByb3BzLmdldEl0ZW1Db3VudChwcm9wcy5kYXRhKTtcbiAgICBjb25zdCB7aXRlbVZpc2libGVQZXJjZW50VGhyZXNob2xkLCB2aWV3QXJlYUNvdmVyYWdlUGVyY2VudFRocmVzaG9sZH0gPVxuICAgICAgdGhpcy5fY29uZmlnO1xuICAgIGNvbnN0IHZpZXdBcmVhTW9kZSA9IHZpZXdBcmVhQ292ZXJhZ2VQZXJjZW50VGhyZXNob2xkICE9IG51bGw7XG4gICAgY29uc3Qgdmlld2FibGVQZXJjZW50VGhyZXNob2xkID0gdmlld0FyZWFNb2RlXG4gICAgICA/IHZpZXdBcmVhQ292ZXJhZ2VQZXJjZW50VGhyZXNob2xkXG4gICAgICA6IGl0ZW1WaXNpYmxlUGVyY2VudFRocmVzaG9sZDtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB2aWV3YWJsZVBlcmNlbnRUaHJlc2hvbGQgIT0gbnVsbCAmJlxuICAgICAgICAoaXRlbVZpc2libGVQZXJjZW50VGhyZXNob2xkICE9IG51bGwpICE9PVxuICAgICAgICAgICh2aWV3QXJlYUNvdmVyYWdlUGVyY2VudFRocmVzaG9sZCAhPSBudWxsKSxcbiAgICAgICdNdXN0IHNldCBleGFjdGx5IG9uZSBvZiBpdGVtVmlzaWJsZVBlcmNlbnRUaHJlc2hvbGQgb3Igdmlld0FyZWFDb3ZlcmFnZVBlcmNlbnRUaHJlc2hvbGQnLFxuICAgICk7XG4gICAgY29uc3Qgdmlld2FibGVJbmRpY2VzID0gW107XG4gICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZpZXdhYmxlSW5kaWNlcztcbiAgICB9XG4gICAgbGV0IGZpcnN0VmlzaWJsZSA9IC0xO1xuICAgIGNvbnN0IHtmaXJzdCwgbGFzdH0gPSByZW5kZXJSYW5nZSB8fCB7Zmlyc3Q6IDAsIGxhc3Q6IGl0ZW1Db3VudCAtIDF9O1xuICAgIGlmIChsYXN0ID49IGl0ZW1Db3VudCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSW52YWxpZCByZW5kZXIgcmFuZ2UgY29tcHV0aW5nIHZpZXdhYmlsaXR5ICcgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtyZW5kZXJSYW5nZSwgaXRlbUNvdW50fSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpZHggPSBmaXJzdDsgaWR4IDw9IGxhc3Q7IGlkeCsrKSB7XG4gICAgICBjb25zdCBtZXRyaWNzID0gbGlzdE1ldHJpY3MuZ2V0Q2VsbE1ldHJpY3MoaWR4LCBwcm9wcyk7XG4gICAgICBpZiAoIW1ldHJpY3MpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0b3AgPSBNYXRoLmZsb29yKG1ldHJpY3Mub2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KTtcbiAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGguZmxvb3IodG9wICsgbWV0cmljcy5sZW5ndGgpO1xuXG4gICAgICBpZiAodG9wIDwgdmlld3BvcnRIZWlnaHQgJiYgYm90dG9tID4gMCkge1xuICAgICAgICBmaXJzdFZpc2libGUgPSBpZHg7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBfaXNWaWV3YWJsZShcbiAgICAgICAgICAgIHZpZXdBcmVhTW9kZSxcbiAgICAgICAgICAgIHZpZXdhYmxlUGVyY2VudFRocmVzaG9sZCxcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgICAgICAgICAgbWV0cmljcy5sZW5ndGgsXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB2aWV3YWJsZUluZGljZXMucHVzaChpZHgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpcnN0VmlzaWJsZSA+PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlld2FibGVJbmRpY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpZ3VyZXMgb3V0IHdoaWNoIGl0ZW1zIGFyZSB2aWV3YWJsZSBhbmQgaG93IHRoYXQgaGFzIGNoYW5nZWQgZnJvbSBiZWZvcmUgYW5kIGNhbGxzXG4gICAqIGBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkYCBhcyBhcHByb3ByaWF0ZS5cbiAgICovXG4gIG9uVXBkYXRlKFxuICAgIHByb3BzOiBDZWxsTWV0cmljUHJvcHMsXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgdmlld3BvcnRIZWlnaHQ6IG51bWJlcixcbiAgICBsaXN0TWV0cmljczogTGlzdE1ldHJpY3NBZ2dyZWdhdG9yLFxuICAgIGNyZWF0ZVZpZXdUb2tlbjogKFxuICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgIGlzVmlld2FibGU6IGJvb2xlYW4sXG4gICAgICBwcm9wczogQ2VsbE1ldHJpY1Byb3BzLFxuICAgICkgPT4gVmlld1Rva2VuLFxuICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6ICh7XG4gICAgICB2aWV3YWJsZUl0ZW1zOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgICAgY2hhbmdlZDogQXJyYXk8Vmlld1Rva2VuPixcbiAgICAgIC4uLlxuICAgIH0pID0+IHZvaWQsXG4gICAgLy8gT3B0aW9uYWwgb3B0aW1pemF0aW9uIHRvIHJlZHVjZSB0aGUgc2NhbiBzaXplXG4gICAgcmVuZGVyUmFuZ2U/OiB7XG4gICAgICBmaXJzdDogbnVtYmVyLFxuICAgICAgbGFzdDogbnVtYmVyLFxuICAgICAgLi4uXG4gICAgfSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNvdW50ID0gcHJvcHMuZ2V0SXRlbUNvdW50KHByb3BzLmRhdGEpO1xuICAgIGlmIChcbiAgICAgICh0aGlzLl9jb25maWcud2FpdEZvckludGVyYWN0aW9uICYmICF0aGlzLl9oYXNJbnRlcmFjdGVkKSB8fFxuICAgICAgaXRlbUNvdW50ID09PSAwIHx8XG4gICAgICAhbGlzdE1ldHJpY3MuZ2V0Q2VsbE1ldHJpY3MoMCwgcHJvcHMpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB2aWV3YWJsZUluZGljZXM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICBpZiAoaXRlbUNvdW50KSB7XG4gICAgICB2aWV3YWJsZUluZGljZXMgPSB0aGlzLmNvbXB1dGVWaWV3YWJsZUl0ZW1zKFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICB2aWV3cG9ydEhlaWdodCxcbiAgICAgICAgbGlzdE1ldHJpY3MsXG4gICAgICAgIHJlbmRlclJhbmdlLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5fdmlld2FibGVJbmRpY2VzLmxlbmd0aCA9PT0gdmlld2FibGVJbmRpY2VzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5fdmlld2FibGVJbmRpY2VzLmV2ZXJ5KCh2LCBpaSkgPT4gdiA9PT0gdmlld2FibGVJbmRpY2VzW2lpXSlcbiAgICApIHtcbiAgICAgIC8vIFdlIG1pZ2h0IGdldCBhIGxvdCBvZiBzY3JvbGwgZXZlbnRzIHdoZXJlIHZpc2liaWxpdHkgZG9lc24ndCBjaGFuZ2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gZG9cbiAgICAgIC8vIGV4dHJhIHdvcmsgaW4gdGhvc2UgY2FzZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3ZpZXdhYmxlSW5kaWNlcyA9IHZpZXdhYmxlSW5kaWNlcztcbiAgICBpZiAodGhpcy5fY29uZmlnLm1pbmltdW1WaWV3VGltZSkge1xuICAgICAgY29uc3QgaGFuZGxlOiBUaW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gKD49MC42My4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKSBUaGlzXG4gICAgICAgICAqIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuNjMgd2FzIGRlcGxveWVkLiBUb1xuICAgICAgICAgKiBzZWUgdGhlIGVycm9yIGRlbGV0ZSB0aGlzIGNvbW1lbnQgYW5kIHJ1biBGbG93LiAqL1xuICAgICAgICB0aGlzLl90aW1lcnMuZGVsZXRlKGhhbmRsZSk7XG4gICAgICAgIHRoaXMuX29uVXBkYXRlU3luYyhcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICB2aWV3YWJsZUluZGljZXMsXG4gICAgICAgICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCxcbiAgICAgICAgICBjcmVhdGVWaWV3VG9rZW4sXG4gICAgICAgICk7XG4gICAgICB9LCB0aGlzLl9jb25maWcubWluaW11bVZpZXdUaW1lKTtcbiAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdICg+PTAuNjMuMCBzaXRlPXJlYWN0X25hdGl2ZV9mYikgVGhpc1xuICAgICAgICogY29tbWVudCBzdXBwcmVzc2VzIGFuIGVycm9yIGZvdW5kIHdoZW4gRmxvdyB2MC42MyB3YXMgZGVwbG95ZWQuIFRvIHNlZVxuICAgICAgICogdGhlIGVycm9yIGRlbGV0ZSB0aGlzIGNvbW1lbnQgYW5kIHJ1biBGbG93LiAqL1xuICAgICAgdGhpcy5fdGltZXJzLmFkZChoYW5kbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vblVwZGF0ZVN5bmMoXG4gICAgICAgIHByb3BzLFxuICAgICAgICB2aWV3YWJsZUluZGljZXMsXG4gICAgICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQsXG4gICAgICAgIGNyZWF0ZVZpZXdUb2tlbixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNsZWFuLXVwIGNhY2hlZCBfdmlld2FibGVJbmRpY2VzIHRvIGV2YWx1YXRlIGNoYW5nZWQgaXRlbXMgb24gbmV4dCB1cGRhdGVcbiAgICovXG4gIHJlc2V0Vmlld2FibGVJbmRpY2VzKCkge1xuICAgIHRoaXMuX3ZpZXdhYmxlSW5kaWNlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgdGhhdCBhbiBpbnRlcmFjdGlvbiBoYXMgaGFwcGVuZWQgZXZlbiBpZiB0aGVyZSBoYXMgYmVlbiBubyBzY3JvbGwuXG4gICAqL1xuICByZWNvcmRJbnRlcmFjdGlvbigpIHtcbiAgICB0aGlzLl9oYXNJbnRlcmFjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblVwZGF0ZVN5bmMoXG4gICAgcHJvcHM6IENlbGxNZXRyaWNQcm9wcyxcbiAgICB2aWV3YWJsZUluZGljZXNUb0NoZWNrOiBBcnJheTxudW1iZXI+LFxuICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6ICh7XG4gICAgICBjaGFuZ2VkOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgICAgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPixcbiAgICAgIC4uLlxuICAgIH0pID0+IHZvaWQsXG4gICAgY3JlYXRlVmlld1Rva2VuOiAoXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgaXNWaWV3YWJsZTogYm9vbGVhbixcbiAgICAgIHByb3BzOiBDZWxsTWV0cmljUHJvcHMsXG4gICAgKSA9PiBWaWV3VG9rZW4sXG4gICkge1xuICAgIC8vIEZpbHRlciBvdXQgaW5kaWNlcyB0aGF0IGhhdmUgZ29uZSBvdXQgb2YgdmlldyBzaW5jZSB0aGlzIGNhbGwgd2FzIHNjaGVkdWxlZC5cbiAgICB2aWV3YWJsZUluZGljZXNUb0NoZWNrID0gdmlld2FibGVJbmRpY2VzVG9DaGVjay5maWx0ZXIoaWkgPT5cbiAgICAgIHRoaXMuX3ZpZXdhYmxlSW5kaWNlcy5pbmNsdWRlcyhpaSksXG4gICAgKTtcbiAgICBjb25zdCBwcmV2SXRlbXMgPSB0aGlzLl92aWV3YWJsZUl0ZW1zO1xuICAgIGNvbnN0IG5leHRJdGVtcyA9IG5ldyBNYXAoXG4gICAgICB2aWV3YWJsZUluZGljZXNUb0NoZWNrLm1hcChpaSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdhYmxlID0gY3JlYXRlVmlld1Rva2VuKGlpLCB0cnVlLCBwcm9wcyk7XG4gICAgICAgIHJldHVybiBbdmlld2FibGUua2V5LCB2aWV3YWJsZV07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY2hhbmdlZCA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmlld2FibGVdIG9mIG5leHRJdGVtcykge1xuICAgICAgaWYgKCFwcmV2SXRlbXMuaGFzKGtleSkpIHtcbiAgICAgICAgY2hhbmdlZC5wdXNoKHZpZXdhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2aWV3YWJsZV0gb2YgcHJldkl0ZW1zKSB7XG4gICAgICBpZiAoIW5leHRJdGVtcy5oYXMoa2V5KSkge1xuICAgICAgICBjaGFuZ2VkLnB1c2goey4uLnZpZXdhYmxlLCBpc1ZpZXdhYmxlOiBmYWxzZX0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl92aWV3YWJsZUl0ZW1zID0gbmV4dEl0ZW1zO1xuICAgICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCh7XG4gICAgICAgIHZpZXdhYmxlSXRlbXM6IEFycmF5LmZyb20obmV4dEl0ZW1zLnZhbHVlcygpKSxcbiAgICAgICAgY2hhbmdlZCxcbiAgICAgICAgdmlld2FiaWxpdHlDb25maWc6IHRoaXMuX2NvbmZpZyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfaXNWaWV3YWJsZShcbiAgdmlld0FyZWFNb2RlOiBib29sZWFuLFxuICB2aWV3YWJsZVBlcmNlbnRUaHJlc2hvbGQ6IG51bWJlcixcbiAgdG9wOiBudW1iZXIsXG4gIGJvdHRvbTogbnVtYmVyLFxuICB2aWV3cG9ydEhlaWdodDogbnVtYmVyLFxuICBpdGVtTGVuZ3RoOiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgaWYgKF9pc0VudGlyZWx5VmlzaWJsZSh0b3AsIGJvdHRvbSwgdmlld3BvcnRIZWlnaHQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGl4ZWxzID0gX2dldFBpeGVsc1Zpc2libGUodG9wLCBib3R0b20sIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICBjb25zdCBwZXJjZW50ID1cbiAgICAgIDEwMCAqICh2aWV3QXJlYU1vZGUgPyBwaXhlbHMgLyB2aWV3cG9ydEhlaWdodCA6IHBpeGVscyAvIGl0ZW1MZW5ndGgpO1xuICAgIHJldHVybiBwZXJjZW50ID49IHZpZXdhYmxlUGVyY2VudFRocmVzaG9sZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0UGl4ZWxzVmlzaWJsZShcbiAgdG9wOiBudW1iZXIsXG4gIGJvdHRvbTogbnVtYmVyLFxuICB2aWV3cG9ydEhlaWdodDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgdmlzaWJsZUhlaWdodCA9IE1hdGgubWluKGJvdHRvbSwgdmlld3BvcnRIZWlnaHQpIC0gTWF0aC5tYXgodG9wLCAwKTtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIHZpc2libGVIZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBfaXNFbnRpcmVseVZpc2libGUoXG4gIHRvcDogbnVtYmVyLFxuICBib3R0b206IG51bWJlcixcbiAgdmlld3BvcnRIZWlnaHQ6IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9wID49IDAgJiYgYm90dG9tIDw9IHZpZXdwb3J0SGVpZ2h0ICYmIGJvdHRvbSA+IHRvcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3YWJpbGl0eUhlbHBlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtDZWxsUmVuZGVyZXJQcm9wcywgUmVuZGVySXRlbVR5cGV9IGZyb20gJy4vVmlydHVhbGl6ZWRMaXN0UHJvcHMnO1xuaW1wb3J0IHR5cGUge1ZpZXdTdHlsZVByb3B9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtcbiAgRm9jdXNFdmVudCxcbiAgTGF5b3V0RXZlbnQsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQge1ZpcnR1YWxpemVkTGlzdENlbGxDb250ZXh0UHJvdmlkZXJ9IGZyb20gJy4vVmlydHVhbGl6ZWRMaXN0Q29udGV4dC5qcyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCB0eXBlIFByb3BzPEl0ZW1UPiA9IHtcbiAgQ2VsbFJlbmRlcmVyQ29tcG9uZW50PzogP1JlYWN0LkNvbXBvbmVudFR5cGU8Q2VsbFJlbmRlcmVyUHJvcHM8SXRlbVQ+PixcbiAgSXRlbVNlcGFyYXRvckNvbXBvbmVudDogP1JlYWN0LkNvbXBvbmVudFR5cGU8XG4gICAgYW55IHwge2hpZ2hsaWdodGVkOiBib29sZWFuLCBsZWFkaW5nSXRlbTogP0l0ZW1UfSxcbiAgPixcbiAgTGlzdEl0ZW1Db21wb25lbnQ/OiA/KFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PiB8IFJlYWN0LkVsZW1lbnQ8YW55PiksXG4gIGNlbGxLZXk6IHN0cmluZyxcbiAgaG9yaXpvbnRhbDogP2Jvb2xlYW4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGludmVyc2lvblN0eWxlOiBWaWV3U3R5bGVQcm9wLFxuICBpdGVtOiBJdGVtVCxcbiAgb25DZWxsTGF5b3V0PzogKGV2ZW50OiBMYXlvdXRFdmVudCwgY2VsbEtleTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB2b2lkLFxuICBvbkNlbGxGb2N1c0NhcHR1cmU/OiAoY2VsbEtleTogc3RyaW5nKSA9PiB2b2lkLFxuICBvblVubW91bnQ6IChjZWxsS2V5OiBzdHJpbmcpID0+IHZvaWQsXG4gIG9uVXBkYXRlU2VwYXJhdG9yczogKFxuICAgIGNlbGxLZXlzOiBBcnJheTw/c3RyaW5nPixcbiAgICBwcm9wczogUGFydGlhbDxTZXBhcmF0b3JQcm9wczxJdGVtVD4+LFxuICApID0+IHZvaWQsXG4gIHByZXZDZWxsS2V5OiA/c3RyaW5nLFxuICByZW5kZXJJdGVtPzogP1JlbmRlckl0ZW1UeXBlPEl0ZW1UPixcbiAgLi4uXG59O1xuXG50eXBlIFNlcGFyYXRvclByb3BzPEl0ZW1UPiA9ICRSZWFkT25seTx7fFxuICBoaWdobGlnaHRlZDogYm9vbGVhbixcbiAgbGVhZGluZ0l0ZW06ID9JdGVtVCxcbnx9PjtcblxudHlwZSBTdGF0ZTxJdGVtVD4gPSB7XG4gIHNlcGFyYXRvclByb3BzOiBTZXBhcmF0b3JQcm9wczxJdGVtVD4sXG4gIC4uLlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2VsbFJlbmRlcmVyPEl0ZW1UPiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgUHJvcHM8SXRlbVQ+LFxuICBTdGF0ZTxJdGVtVD4sXG4+IHtcbiAgc3RhdGU6IFN0YXRlPEl0ZW1UPiA9IHtcbiAgICBzZXBhcmF0b3JQcm9wczoge1xuICAgICAgaGlnaGxpZ2h0ZWQ6IGZhbHNlLFxuICAgICAgbGVhZGluZ0l0ZW06IHRoaXMucHJvcHMuaXRlbSxcbiAgICB9LFxuICB9O1xuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgcHJvcHM6IFByb3BzPEl0ZW1UPixcbiAgICBwcmV2U3RhdGU6IFN0YXRlPEl0ZW1UPixcbiAgKTogP1N0YXRlPEl0ZW1UPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcGFyYXRvclByb3BzOiB7XG4gICAgICAgIC4uLnByZXZTdGF0ZS5zZXBhcmF0b3JQcm9wcyxcbiAgICAgICAgbGVhZGluZ0l0ZW06IHByb3BzLml0ZW0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUT0RPOiBjb25zaWRlciBmYWN0b3Jpbmcgc2VwYXJhdG9yIHN0dWZmIG91dCBvZiBWaXJ0dWFsaXplZExpc3QgaW50byBGbGF0TGlzdCBzaW5jZSBpdCdzIG5vdFxuICAvLyByZXVzZWQgYnkgU2VjdGlvbkxpc3QgYW5kIHdlIGNhbiBrZWVwIFZpcnR1YWxpemVkTGlzdCBzaW1wbGVyLlxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF9zZXBhcmF0b3JzID0ge1xuICAgIGhpZ2hsaWdodDogKCkgPT4ge1xuICAgICAgY29uc3Qge2NlbGxLZXksIHByZXZDZWxsS2V5fSA9IHRoaXMucHJvcHM7XG4gICAgICB0aGlzLnByb3BzLm9uVXBkYXRlU2VwYXJhdG9ycyhbY2VsbEtleSwgcHJldkNlbGxLZXldLCB7XG4gICAgICAgIGhpZ2hsaWdodGVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1bmhpZ2hsaWdodDogKCkgPT4ge1xuICAgICAgY29uc3Qge2NlbGxLZXksIHByZXZDZWxsS2V5fSA9IHRoaXMucHJvcHM7XG4gICAgICB0aGlzLnByb3BzLm9uVXBkYXRlU2VwYXJhdG9ycyhbY2VsbEtleSwgcHJldkNlbGxLZXldLCB7XG4gICAgICAgIGhpZ2hsaWdodGVkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdXBkYXRlUHJvcHM6IChcbiAgICAgIHNlbGVjdDogJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJyxcbiAgICAgIG5ld1Byb3BzOiBTZXBhcmF0b3JQcm9wczxJdGVtVD4sXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7Y2VsbEtleSwgcHJldkNlbGxLZXl9ID0gdGhpcy5wcm9wcztcbiAgICAgIHRoaXMucHJvcHMub25VcGRhdGVTZXBhcmF0b3JzKFxuICAgICAgICBbc2VsZWN0ID09PSAnbGVhZGluZycgPyBwcmV2Q2VsbEtleSA6IGNlbGxLZXldLFxuICAgICAgICBuZXdQcm9wcyxcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcblxuICB1cGRhdGVTZXBhcmF0b3JQcm9wcyhuZXdQcm9wczogU2VwYXJhdG9yUHJvcHM8SXRlbVQ+KSB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiAoe1xuICAgICAgc2VwYXJhdG9yUHJvcHM6IHsuLi5zdGF0ZS5zZXBhcmF0b3JQcm9wcywgLi4ubmV3UHJvcHN9LFxuICAgIH0pKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucHJvcHMub25Vbm1vdW50KHRoaXMucHJvcHMuY2VsbEtleSk7XG4gIH1cblxuICBfb25MYXlvdXQgPSAobmF0aXZlRXZlbnQ6IExheW91dEV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5wcm9wcy5vbkNlbGxMYXlvdXQ/LihcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgdGhpcy5wcm9wcy5jZWxsS2V5LFxuICAgICAgdGhpcy5wcm9wcy5pbmRleCxcbiAgICApO1xuICB9O1xuXG4gIF9vbkNlbGxGb2N1c0NhcHR1cmUgPSAoZTogRm9jdXNFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMucHJvcHMub25DZWxsRm9jdXNDYXB0dXJlPy4odGhpcy5wcm9wcy5jZWxsS2V5KTtcbiAgfTtcblxuICBfcmVuZGVyRWxlbWVudChcbiAgICByZW5kZXJJdGVtOiA/UmVuZGVySXRlbVR5cGU8SXRlbVQ+LFxuICAgIExpc3RJdGVtQ29tcG9uZW50OiBhbnksXG4gICAgaXRlbTogSXRlbVQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgKTogUmVhY3QuTm9kZSB7XG4gICAgaWYgKHJlbmRlckl0ZW0gJiYgTGlzdEl0ZW1Db21wb25lbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1ZpcnR1YWxpemVkTGlzdDogQm90aCBMaXN0SXRlbUNvbXBvbmVudCBhbmQgcmVuZGVySXRlbSBwcm9wcyBhcmUgcHJlc2VudC4gTGlzdEl0ZW1Db21wb25lbnQgd2lsbCB0YWtlJyArXG4gICAgICAgICAgJyBwcmVjZWRlbmNlIG92ZXIgcmVuZGVySXRlbS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoTGlzdEl0ZW1Db21wb25lbnQpIHtcbiAgICAgIC8qICRGbG93Rml4TWVbbm90LWEtY29tcG9uZW50XSAoPj0wLjEwOC4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKSBUaGlzXG4gICAgICAgKiBjb21tZW50IHN1cHByZXNzZXMgYW4gZXJyb3IgZm91bmQgd2hlbiBGbG93IHYwLjEwOCB3YXMgZGVwbG95ZWQuIFRvXG4gICAgICAgKiBzZWUgdGhlIGVycm9yLCBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGUtYXJnXSAoPj0wLjEwOC4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKVxuICAgICAgICogVGhpcyBjb21tZW50IHN1cHByZXNzZXMgYW4gZXJyb3IgZm91bmQgd2hlbiBGbG93IHYwLjEwOCB3YXMgZGVwbG95ZWQuXG4gICAgICAgKiBUbyBzZWUgdGhlIGVycm9yLCBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExpc3RJdGVtQ29tcG9uZW50LCB7XG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBzZXBhcmF0b3JzOiB0aGlzLl9zZXBhcmF0b3JzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlckl0ZW0pIHtcbiAgICAgIHJldHVybiByZW5kZXJJdGVtKHtcbiAgICAgICAgaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHNlcGFyYXRvcnM6IHRoaXMuX3NlcGFyYXRvcnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICBmYWxzZSxcbiAgICAgICdWaXJ0dWFsaXplZExpc3Q6IEVpdGhlciBMaXN0SXRlbUNvbXBvbmVudCBvciByZW5kZXJJdGVtIHByb3BzIGFyZSByZXF1aXJlZCBidXQgbm9uZSB3ZXJlIGZvdW5kLicsXG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCB7XG4gICAgICBDZWxsUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50LFxuICAgICAgTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICBjZWxsS2V5LFxuICAgICAgaG9yaXpvbnRhbCxcbiAgICAgIGl0ZW0sXG4gICAgICBpbmRleCxcbiAgICAgIGludmVyc2lvblN0eWxlLFxuICAgICAgb25DZWxsTGF5b3V0LFxuICAgICAgcmVuZGVySXRlbSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fcmVuZGVyRWxlbWVudChcbiAgICAgIHJlbmRlckl0ZW0sXG4gICAgICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgIGl0ZW0sXG4gICAgICBpbmRleCxcbiAgICApO1xuXG4gICAgLy8gTk9URTogdGhhdCB3aGVuIHRoaXMgaXMgYSBzdGlja3kgaGVhZGVyLCBgb25MYXlvdXRgIHdpbGwgZ2V0IGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGFuZFxuICAgIC8vIGNhbGxlZCBleHBsaWNpdGx5IGJ5IGBTY3JvbGxWaWV3U3RpY2t5SGVhZGVyYC5cbiAgICBjb25zdCBpdGVtU2VwYXJhdG9yOiBSZWFjdC5Ob2RlID0gUmVhY3QuaXNWYWxpZEVsZW1lbnQoXG4gICAgICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50LFxuICAgIClcbiAgICAgID8gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbiAgICAgICAgSXRlbVNlcGFyYXRvckNvbXBvbmVudFxuICAgICAgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50ICYmIChcbiAgICAgICAgICA8SXRlbVNlcGFyYXRvckNvbXBvbmVudCB7Li4udGhpcy5zdGF0ZS5zZXBhcmF0b3JQcm9wc30gLz5cbiAgICAgICAgKTtcbiAgICBjb25zdCBjZWxsU3R5bGUgPSBpbnZlcnNpb25TdHlsZVxuICAgICAgPyBob3Jpem9udGFsXG4gICAgICAgID8gW3N0eWxlcy5yb3dSZXZlcnNlLCBpbnZlcnNpb25TdHlsZV1cbiAgICAgICAgOiBbc3R5bGVzLmNvbHVtblJldmVyc2UsIGludmVyc2lvblN0eWxlXVxuICAgICAgOiBob3Jpem9udGFsXG4gICAgICA/IFtzdHlsZXMucm93LCBpbnZlcnNpb25TdHlsZV1cbiAgICAgIDogaW52ZXJzaW9uU3R5bGU7XG4gICAgY29uc3QgcmVzdWx0ID0gIUNlbGxSZW5kZXJlckNvbXBvbmVudCA/IChcbiAgICAgIDxWaWV3XG4gICAgICAgIHN0eWxlPXtjZWxsU3R5bGV9XG4gICAgICAgIG9uRm9jdXNDYXB0dXJlPXt0aGlzLl9vbkNlbGxGb2N1c0NhcHR1cmV9XG4gICAgICAgIHsuLi4ob25DZWxsTGF5b3V0ICYmIHtvbkxheW91dDogdGhpcy5fb25MYXlvdXR9KX0+XG4gICAgICAgIHtlbGVtZW50fVxuICAgICAgICB7aXRlbVNlcGFyYXRvcn1cbiAgICAgIDwvVmlldz5cbiAgICApIDogKFxuICAgICAgPENlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgICAgICBjZWxsS2V5PXtjZWxsS2V5fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgIHN0eWxlPXtjZWxsU3R5bGV9XG4gICAgICAgIG9uRm9jdXNDYXB0dXJlPXt0aGlzLl9vbkNlbGxGb2N1c0NhcHR1cmV9XG4gICAgICAgIHsuLi4ob25DZWxsTGF5b3V0ICYmIHtvbkxheW91dDogdGhpcy5fb25MYXlvdXR9KX0+XG4gICAgICAgIHtlbGVtZW50fVxuICAgICAgICB7aXRlbVNlcGFyYXRvcn1cbiAgICAgIDwvQ2VsbFJlbmRlcmVyQ29tcG9uZW50PlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpcnR1YWxpemVkTGlzdENlbGxDb250ZXh0UHJvdmlkZXIgY2VsbEtleT17dGhpcy5wcm9wcy5jZWxsS2V5fT5cbiAgICAgICAge3Jlc3VsdH1cbiAgICAgIDwvVmlydHVhbGl6ZWRMaXN0Q2VsbENvbnRleHRQcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgcm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gIH0sXG4gIHJvd1JldmVyc2U6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93LXJldmVyc2UnLFxuICB9LFxuICBjb2x1bW5SZXZlcnNlOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbi1yZXZlcnNlJyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlb2YgVmlydHVhbGl6ZWRMaXN0IGZyb20gJy4vVmlydHVhbGl6ZWRMaXN0JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDb250ZXh0LCB1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5cbnR5cGUgQ29udGV4dCA9ICRSZWFkT25seTx7XG4gIGNlbGxLZXk6ID9zdHJpbmcsXG4gIGdldFNjcm9sbE1ldHJpY3M6ICgpID0+IHtcbiAgICBjb250ZW50TGVuZ3RoOiBudW1iZXIsXG4gICAgZE9mZnNldDogbnVtYmVyLFxuICAgIGR0OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgdmVsb2NpdHk6IG51bWJlcixcbiAgICB2aXNpYmxlTGVuZ3RoOiBudW1iZXIsXG4gICAgem9vbVNjYWxlOiBudW1iZXIsXG4gIH0sXG4gIGhvcml6b250YWw6ID9ib29sZWFuLFxuICBnZXRPdXRlcm1vc3RQYXJlbnRMaXN0UmVmOiAoKSA9PiBSZWFjdC5FbGVtZW50UmVmPFZpcnR1YWxpemVkTGlzdD4sXG4gIHJlZ2lzdGVyQXNOZXN0ZWRDaGlsZDogKHtcbiAgICBjZWxsS2V5OiBzdHJpbmcsXG4gICAgcmVmOiBSZWFjdC5FbGVtZW50UmVmPFZpcnR1YWxpemVkTGlzdD4sXG4gIH0pID0+IHZvaWQsXG4gIHVucmVnaXN0ZXJBc05lc3RlZENoaWxkOiAoe3JlZjogUmVhY3QuRWxlbWVudFJlZjxWaXJ0dWFsaXplZExpc3Q+fSkgPT4gdm9pZCxcbn0+O1xuXG5leHBvcnQgY29uc3QgVmlydHVhbGl6ZWRMaXN0Q29udGV4dDogUmVhY3QuQ29udGV4dDw/Q29udGV4dD4gPVxuICBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKF9fREVWX18pIHtcbiAgVmlydHVhbGl6ZWRMaXN0Q29udGV4dC5kaXNwbGF5TmFtZSA9ICdWaXJ0dWFsaXplZExpc3RDb250ZXh0Jztcbn1cblxuLyoqXG4gKiBSZXNldHMgdGhlIGNvbnRleHQuIEludGVuZGVkIGZvciB1c2UgYnkgcG9ydGFsLWxpa2UgY29tcG9uZW50cyAoZS5nLiBNb2RhbCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWaXJ0dWFsaXplZExpc3RDb250ZXh0UmVzZXR0ZXIoe1xuICBjaGlsZHJlbixcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Lk5vZGUsXG59KTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFZpcnR1YWxpemVkTGlzdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e251bGx9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvVmlydHVhbGl6ZWRMaXN0Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBjb250ZXh0IHdpdGggbWVtb2l6YXRpb24uIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgYFZpcnR1YWxpemVkTGlzdGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWaXJ0dWFsaXplZExpc3RDb250ZXh0UHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgdmFsdWUsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlLFxuICB2YWx1ZTogQ29udGV4dCxcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgLy8gQXZvaWQgc2V0dGluZyBhIG5ld2x5IGNyZWF0ZWQgY29udGV4dCBvYmplY3QgaWYgdGhlIHZhbHVlcyBhcmUgaWRlbnRpY2FsLlxuICBjb25zdCBjb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgY2VsbEtleTogbnVsbCxcbiAgICAgIGdldFNjcm9sbE1ldHJpY3M6IHZhbHVlLmdldFNjcm9sbE1ldHJpY3MsXG4gICAgICBob3Jpem9udGFsOiB2YWx1ZS5ob3Jpem9udGFsLFxuICAgICAgZ2V0T3V0ZXJtb3N0UGFyZW50TGlzdFJlZjogdmFsdWUuZ2V0T3V0ZXJtb3N0UGFyZW50TGlzdFJlZixcbiAgICAgIHJlZ2lzdGVyQXNOZXN0ZWRDaGlsZDogdmFsdWUucmVnaXN0ZXJBc05lc3RlZENoaWxkLFxuICAgICAgdW5yZWdpc3RlckFzTmVzdGVkQ2hpbGQ6IHZhbHVlLnVucmVnaXN0ZXJBc05lc3RlZENoaWxkLFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHZhbHVlLmdldFNjcm9sbE1ldHJpY3MsXG4gICAgICB2YWx1ZS5ob3Jpem9udGFsLFxuICAgICAgdmFsdWUuZ2V0T3V0ZXJtb3N0UGFyZW50TGlzdFJlZixcbiAgICAgIHZhbHVlLnJlZ2lzdGVyQXNOZXN0ZWRDaGlsZCxcbiAgICAgIHZhbHVlLnVucmVnaXN0ZXJBc05lc3RlZENoaWxkLFxuICAgIF0sXG4gICk7XG4gIHJldHVybiAoXG4gICAgPFZpcnR1YWxpemVkTGlzdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvVmlydHVhbGl6ZWRMaXN0Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY2VsbEtleWAuIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgYFZpcnR1YWxpemVkTGlzdGAgZm9yIGVhY2ggY2VsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFZpcnR1YWxpemVkTGlzdENlbGxDb250ZXh0UHJvdmlkZXIoe1xuICBjZWxsS2V5LFxuICBjaGlsZHJlbixcbn06IHtcbiAgY2VsbEtleTogc3RyaW5nLFxuICBjaGlsZHJlbjogUmVhY3QuTm9kZSxcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgLy8gQXZvaWQgc2V0dGluZyBhIG5ld2x5IGNyZWF0ZWQgY29udGV4dCBvYmplY3QgaWYgdGhlIHZhbHVlcyBhcmUgaWRlbnRpY2FsLlxuICBjb25zdCBjdXJyQ29udGV4dCA9IHVzZUNvbnRleHQoVmlydHVhbGl6ZWRMaXN0Q29udGV4dCk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+IChjdXJyQ29udGV4dCA9PSBudWxsID8gbnVsbCA6IHsuLi5jdXJyQ29udGV4dCwgY2VsbEtleX0pLFxuICAgIFtjdXJyQ29udGV4dCwgY2VsbEtleV0sXG4gICk7XG4gIHJldHVybiAoXG4gICAgPFZpcnR1YWxpemVkTGlzdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvVmlydHVhbGl6ZWRMaXN0Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgVmlld2FiaWxpdHlDb25maWcsXG4gIFZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlyLFxuICBWaWV3VG9rZW4sXG59IGZyb20gJy4vVmlld2FiaWxpdHlIZWxwZXInO1xuaW1wb3J0IHR5cGUge1ZpZXdTdHlsZVByb3B9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtcbiAgRm9jdXNFdmVudCxcbiAgTGF5b3V0RXZlbnQsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3R5cGVvZiBTY3JvbGxWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5leHBvcnQgdHlwZSBJdGVtID0gYW55O1xuXG5leHBvcnQgdHlwZSBTZXBhcmF0b3JzID0ge1xuICBoaWdobGlnaHQ6ICgpID0+IHZvaWQsXG4gIHVuaGlnaGxpZ2h0OiAoKSA9PiB2b2lkLFxuICB1cGRhdGVQcm9wczogKHNlbGVjdDogJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJywgbmV3UHJvcHM6IE9iamVjdCkgPT4gdm9pZCxcbiAgLi4uXG59O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJJdGVtUHJvcHM8SXRlbVQ+ID0ge1xuICBpdGVtOiBJdGVtVCxcbiAgaW5kZXg6IG51bWJlcixcbiAgc2VwYXJhdG9yczogU2VwYXJhdG9ycyxcbiAgLi4uXG59O1xuXG5leHBvcnQgdHlwZSBDZWxsUmVuZGVyZXJQcm9wczxJdGVtVD4gPSAkUmVhZE9ubHk8e1xuICBjZWxsS2V5OiBzdHJpbmcsXG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlLFxuICBpbmRleDogbnVtYmVyLFxuICBpdGVtOiBJdGVtVCxcbiAgb25Gb2N1c0NhcHR1cmU/OiAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHZvaWQsXG4gIG9uTGF5b3V0PzogKGV2ZW50OiBMYXlvdXRFdmVudCkgPT4gdm9pZCxcbiAgc3R5bGU6IFZpZXdTdHlsZVByb3AsXG59PjtcblxuZXhwb3J0IHR5cGUgUmVuZGVySXRlbVR5cGU8SXRlbVQ+ID0gKFxuICBpbmZvOiBSZW5kZXJJdGVtUHJvcHM8SXRlbVQ+LFxuKSA9PiBSZWFjdC5Ob2RlO1xuXG50eXBlIFJlcXVpcmVkUHJvcHMgPSB7fFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgYWNjZXNzb3IgZnVuY3Rpb25zIGFzc3VtZSB0aGlzIGlzIGFuIEFycmF5PHtrZXk6IHN0cmluZ30gfCB7aWQ6IHN0cmluZ30+IGJ1dCB5b3UgY2FuIG92ZXJyaWRlXG4gICAqIGdldEl0ZW0sIGdldEl0ZW1Db3VudCwgYW5kIGtleUV4dHJhY3RvciB0byBoYW5kbGUgYW55IHR5cGUgb2YgaW5kZXgtYmFzZWQgZGF0YS5cbiAgICovXG4gIGRhdGE/OiBhbnksXG4gIC8qKlxuICAgKiBBIGdlbmVyaWMgYWNjZXNzb3IgZm9yIGV4dHJhY3RpbmcgYW4gaXRlbSBmcm9tIGFueSBzb3J0IG9mIGRhdGEgYmxvYi5cbiAgICovXG4gIGdldEl0ZW06IChkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpID0+ID9JdGVtLFxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBob3cgbWFueSBpdGVtcyBhcmUgaW4gdGhlIGRhdGEgYmxvYi5cbiAgICovXG4gIGdldEl0ZW1Db3VudDogKGRhdGE6IGFueSkgPT4gbnVtYmVyLFxufH07XG50eXBlIE9wdGlvbmFsUHJvcHMgPSB7fFxuICByZW5kZXJJdGVtPzogP1JlbmRlckl0ZW1UeXBlPEl0ZW0+LFxuICAvKipcbiAgICogYGRlYnVnYCB3aWxsIHR1cm4gb24gZXh0cmEgbG9nZ2luZyBhbmQgdmlzdWFsIG92ZXJsYXlzIHRvIGFpZCB3aXRoIGRlYnVnZ2luZyBib3RoIHVzYWdlIGFuZFxuICAgKiBpbXBsZW1lbnRhdGlvbiwgYnV0IHdpdGggYSBzaWduaWZpY2FudCBwZXJmIGhpdC5cbiAgICovXG4gIGRlYnVnPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBERVBSRUNBVEVEOiBWaXJ0dWFsaXphdGlvbiBwcm92aWRlcyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG9wdGltaXphdGlvbnMsIGJ1dCBmdWxseVxuICAgKiB1bm1vdW50cyByZWFjdCBpbnN0YW5jZXMgdGhhdCBhcmUgb3V0c2lkZSBvZiB0aGUgcmVuZGVyIHdpbmRvdy4gWW91IHNob3VsZCBvbmx5IG5lZWQgdG8gZGlzYWJsZVxuICAgKiB0aGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgZGlzYWJsZVZpcnR1YWxpemF0aW9uPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBBIG1hcmtlciBwcm9wZXJ0eSBmb3IgdGVsbGluZyB0aGUgbGlzdCB0byByZS1yZW5kZXIgKHNpbmNlIGl0IGltcGxlbWVudHMgYFB1cmVDb21wb25lbnRgKS4gSWZcbiAgICogYW55IG9mIHlvdXIgYHJlbmRlckl0ZW1gLCBIZWFkZXIsIEZvb3RlciwgZXRjLiBmdW5jdGlvbnMgZGVwZW5kIG9uIGFueXRoaW5nIG91dHNpZGUgb2YgdGhlXG4gICAqIGBkYXRhYCBwcm9wLCBzdGljayBpdCBoZXJlIGFuZCB0cmVhdCBpdCBpbW11dGFibHkuXG4gICAqL1xuICBleHRyYURhdGE/OiBhbnksXG4gIC8vIGUuZy4gaGVpZ2h0LCB5XG4gIGdldEl0ZW1MYXlvdXQ/OiAoXG4gICAgZGF0YTogYW55LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICkgPT4ge1xuICAgIGxlbmd0aDogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgLi4uXG4gIH0sXG4gIGhvcml6b250YWw/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIEhvdyBtYW55IGl0ZW1zIHRvIHJlbmRlciBpbiB0aGUgaW5pdGlhbCBiYXRjaC4gVGhpcyBzaG91bGQgYmUgZW5vdWdoIHRvIGZpbGwgdGhlIHNjcmVlbiBidXQgbm90XG4gICAqIG11Y2ggbW9yZS4gTm90ZSB0aGVzZSBpdGVtcyB3aWxsIG5ldmVyIGJlIHVubW91bnRlZCBhcyBwYXJ0IG9mIHRoZSB3aW5kb3dlZCByZW5kZXJpbmcgaW4gb3JkZXJcbiAgICogdG8gaW1wcm92ZSBwZXJjZWl2ZWQgcGVyZm9ybWFuY2Ugb2Ygc2Nyb2xsLXRvLXRvcCBhY3Rpb25zLlxuICAgKi9cbiAgaW5pdGlhbE51bVRvUmVuZGVyPzogP251bWJlcixcbiAgLyoqXG4gICAqIEluc3RlYWQgb2Ygc3RhcnRpbmcgYXQgdGhlIHRvcCB3aXRoIHRoZSBmaXJzdCBpdGVtLCBzdGFydCBhdCBgaW5pdGlhbFNjcm9sbEluZGV4YC4gVGhpc1xuICAgKiBkaXNhYmxlcyB0aGUgXCJzY3JvbGwgdG8gdG9wXCIgb3B0aW1pemF0aW9uIHRoYXQga2VlcHMgdGhlIGZpcnN0IGBpbml0aWFsTnVtVG9SZW5kZXJgIGl0ZW1zXG4gICAqIGFsd2F5cyByZW5kZXJlZCBhbmQgaW1tZWRpYXRlbHkgcmVuZGVycyB0aGUgaXRlbXMgc3RhcnRpbmcgYXQgdGhpcyBpbml0aWFsIGluZGV4LiBSZXF1aXJlc1xuICAgKiBgZ2V0SXRlbUxheW91dGAgdG8gYmUgaW1wbGVtZW50ZWQuXG4gICAqL1xuICBpbml0aWFsU2Nyb2xsSW5kZXg/OiA/bnVtYmVyLFxuICAvKipcbiAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBzY3JvbGwuIFVzZXMgc2NhbGUgdHJhbnNmb3JtcyBvZiAtMS5cbiAgICovXG4gIGludmVydGVkPzogP2Jvb2xlYW4sXG4gIGtleUV4dHJhY3Rvcj86ID8oaXRlbTogSXRlbSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nLFxuICAvKipcbiAgICogQ2VsbFJlbmRlcmVyQ29tcG9uZW50IGFsbG93cyBjdXN0b21pemluZyBob3cgY2VsbHMgcmVuZGVyZWQgYnlcbiAgICogYHJlbmRlckl0ZW1gL2BMaXN0SXRlbUNvbXBvbmVudGAgYXJlIHdyYXBwZWQgd2hlbiBwbGFjZWQgaW50byB0aGVcbiAgICogdW5kZXJseWluZyBTY3JvbGxWaWV3LiBUaGlzIGNvbXBvbmVudCBtdXN0IGFjY2VwdCBldmVudCBoYW5kbGVycyB3aGljaFxuICAgKiBub3RpZnkgVmlydHVhbGl6ZWRMaXN0IG9mIGNoYW5nZXMgd2l0aGluIHRoZSBjZWxsLlxuICAgKi9cbiAgQ2VsbFJlbmRlcmVyQ29tcG9uZW50PzogP1JlYWN0LkNvbXBvbmVudFR5cGU8Q2VsbFJlbmRlcmVyUHJvcHM8SXRlbT4+LFxuICAvKipcbiAgICogUmVuZGVyZWQgaW4gYmV0d2VlbiBlYWNoIGl0ZW0sIGJ1dCBub3QgYXQgdGhlIHRvcCBvciBib3R0b20uIEJ5IGRlZmF1bHQsIGBoaWdobGlnaHRlZGAgYW5kXG4gICAqIGBsZWFkaW5nSXRlbWAgcHJvcHMgYXJlIHByb3ZpZGVkLiBgcmVuZGVySXRlbWAgcHJvdmlkZXMgYHNlcGFyYXRvcnMuaGlnaGxpZ2h0YC9gdW5oaWdobGlnaHRgXG4gICAqIHdoaWNoIHdpbGwgdXBkYXRlIHRoZSBgaGlnaGxpZ2h0ZWRgIHByb3AsIGJ1dCB5b3UgY2FuIGFsc28gYWRkIGN1c3RvbSBwcm9wcyB3aXRoXG4gICAqIGBzZXBhcmF0b3JzLnVwZGF0ZVByb3BzYC5cbiAgICovXG4gIEl0ZW1TZXBhcmF0b3JDb21wb25lbnQ/OiA/UmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+LFxuICAvKipcbiAgICogVGFrZXMgYW4gaXRlbSBmcm9tIGBkYXRhYCBhbmQgcmVuZGVycyBpdCBpbnRvIHRoZSBsaXN0LiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgICAgPEZsYXRMaXN0XG4gICAqICAgICAgIEl0ZW1TZXBhcmF0b3JDb21wb25lbnQ9e1BsYXRmb3JtLk9TICE9PSAnYW5kcm9pZCcgJiYgKHtoaWdobGlnaHRlZH0pID0+IChcbiAgICogICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlLnNlcGFyYXRvciwgaGlnaGxpZ2h0ZWQgJiYge21hcmdpbkxlZnQ6IDB9XX0gLz5cbiAgICogICAgICAgKX1cbiAgICogICAgICAgZGF0YT17W3t0aXRsZTogJ1RpdGxlIFRleHQnLCBrZXk6ICdpdGVtMSd9XX1cbiAgICogICAgICAgTGlzdEl0ZW1Db21wb25lbnQ9eyh7aXRlbSwgc2VwYXJhdG9yc30pID0+IChcbiAgICogICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAqICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLl9vblByZXNzKGl0ZW0pfVxuICAgKiAgICAgICAgICAgb25TaG93VW5kZXJsYXk9e3NlcGFyYXRvcnMuaGlnaGxpZ2h0fVxuICAgKiAgICAgICAgICAgb25IaWRlVW5kZXJsYXk9e3NlcGFyYXRvcnMudW5oaWdobGlnaHR9PlxuICAgKiAgICAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSd9fT5cbiAgICogICAgICAgICAgICAgPFRleHQ+e2l0ZW0udGl0bGV9PC9UZXh0PlxuICAgKiAgICAgICAgICAgPC9WaWV3PlxuICAgKiAgICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgKiAgICAgICApfVxuICAgKiAgICAgLz5cbiAgICpcbiAgICogUHJvdmlkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBsaWtlIGBpbmRleGAgaWYgeW91IG5lZWQgaXQsIGFzIHdlbGwgYXMgYSBtb3JlIGdlbmVyaWNcbiAgICogYHNlcGFyYXRvcnMudXBkYXRlUHJvcHNgIGZ1bmN0aW9uIHdoaWNoIGxldCdzIHlvdSBzZXQgd2hhdGV2ZXIgcHJvcHMgeW91IHdhbnQgdG8gY2hhbmdlIHRoZVxuICAgKiByZW5kZXJpbmcgb2YgZWl0aGVyIHRoZSBsZWFkaW5nIHNlcGFyYXRvciBvciB0cmFpbGluZyBzZXBhcmF0b3IgaW4gY2FzZSB0aGUgbW9yZSBjb21tb25cbiAgICogYGhpZ2hsaWdodGAgYW5kIGB1bmhpZ2hsaWdodGAgKHdoaWNoIHNldCB0aGUgYGhpZ2hsaWdodGVkOiBib29sZWFuYCBwcm9wKSBhcmUgaW5zdWZmaWNpZW50IGZvclxuICAgKiB5b3VyIHVzZS1jYXNlLlxuICAgKi9cbiAgTGlzdEl0ZW1Db21wb25lbnQ/OiA/KFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PiB8IFJlYWN0LkVsZW1lbnQ8YW55PiksXG4gIC8qKlxuICAgKiBSZW5kZXJlZCB3aGVuIHRoZSBsaXN0IGlzIGVtcHR5LiBDYW4gYmUgYSBSZWFjdCBDb21wb25lbnQgQ2xhc3MsIGEgcmVuZGVyIGZ1bmN0aW9uLCBvclxuICAgKiBhIHJlbmRlcmVkIGVsZW1lbnQuXG4gICAqL1xuICBMaXN0RW1wdHlDb21wb25lbnQ/OiA/KFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PiB8IFJlYWN0LkVsZW1lbnQ8YW55PiksXG4gIC8qKlxuICAgKiBSZW5kZXJlZCBhdCB0aGUgYm90dG9tIG9mIGFsbCB0aGUgaXRlbXMuIENhbiBiZSBhIFJlYWN0IENvbXBvbmVudCBDbGFzcywgYSByZW5kZXIgZnVuY3Rpb24sIG9yXG4gICAqIGEgcmVuZGVyZWQgZWxlbWVudC5cbiAgICovXG4gIExpc3RGb290ZXJDb21wb25lbnQ/OiA/KFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PiB8IFJlYWN0LkVsZW1lbnQ8YW55PiksXG4gIC8qKlxuICAgKiBTdHlsaW5nIGZvciBpbnRlcm5hbCBWaWV3IGZvciBMaXN0Rm9vdGVyQ29tcG9uZW50XG4gICAqL1xuICBMaXN0Rm9vdGVyQ29tcG9uZW50U3R5bGU/OiBWaWV3U3R5bGVQcm9wLFxuICAvKipcbiAgICogUmVuZGVyZWQgYXQgdGhlIHRvcCBvZiBhbGwgdGhlIGl0ZW1zLiBDYW4gYmUgYSBSZWFjdCBDb21wb25lbnQgQ2xhc3MsIGEgcmVuZGVyIGZ1bmN0aW9uLCBvclxuICAgKiBhIHJlbmRlcmVkIGVsZW1lbnQuXG4gICAqL1xuICBMaXN0SGVhZGVyQ29tcG9uZW50PzogPyhSZWFjdC5Db21wb25lbnRUeXBlPGFueT4gfCBSZWFjdC5FbGVtZW50PGFueT4pLFxuICAvKipcbiAgICogU3R5bGluZyBmb3IgaW50ZXJuYWwgVmlldyBmb3IgTGlzdEhlYWRlckNvbXBvbmVudFxuICAgKi9cbiAgTGlzdEhlYWRlckNvbXBvbmVudFN0eWxlPzogVmlld1N0eWxlUHJvcCxcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byByZW5kZXIgaW4gZWFjaCBpbmNyZW1lbnRhbCByZW5kZXIgYmF0Y2guIFRoZSBtb3JlIHJlbmRlcmVkIGF0XG4gICAqIG9uY2UsIHRoZSBiZXR0ZXIgdGhlIGZpbGwgcmF0ZSwgYnV0IHJlc3BvbnNpdmVuZXNzIG1heSBzdWZmZXIgYmVjYXVzZSByZW5kZXJpbmcgY29udGVudCBtYXlcbiAgICogaW50ZXJmZXJlIHdpdGggcmVzcG9uZGluZyB0byBidXR0b24gdGFwcyBvciBvdGhlciBpbnRlcmFjdGlvbnMuXG4gICAqL1xuICBtYXhUb1JlbmRlclBlckJhdGNoPzogP251bWJlcixcbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdoZW4gdGhlIHNjcm9sbCBwb3NpdGlvbiBnZXRzIHdpdGhpbiB3aXRoaW4gYG9uRW5kUmVhY2hlZFRocmVzaG9sZGBcbiAgICogZnJvbSB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGxpc3QuXG4gICAqL1xuICBvbkVuZFJlYWNoZWQ/OiA/KGluZm86IHtkaXN0YW5jZUZyb21FbmQ6IG51bWJlciwgLi4ufSkgPT4gdm9pZCxcbiAgLyoqXG4gICAqIEhvdyBmYXIgZnJvbSB0aGUgZW5kIChpbiB1bml0cyBvZiB2aXNpYmxlIGxlbmd0aCBvZiB0aGUgbGlzdCkgdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlXG4gICAqIGxpc3QgbXVzdCBiZSBmcm9tIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgdG8gdHJpZ2dlciB0aGUgYG9uRW5kUmVhY2hlZGAgY2FsbGJhY2suXG4gICAqIFRodXMsIGEgdmFsdWUgb2YgMC41IHdpbGwgdHJpZ2dlciBgb25FbmRSZWFjaGVkYCB3aGVuIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgaXNcbiAgICogd2l0aGluIGhhbGYgdGhlIHZpc2libGUgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgKi9cbiAgb25FbmRSZWFjaGVkVGhyZXNob2xkPzogP251bWJlcixcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBhIHN0YW5kYXJkIFJlZnJlc2hDb250cm9sIHdpbGwgYmUgYWRkZWQgZm9yIFwiUHVsbCB0byBSZWZyZXNoXCIgZnVuY3Rpb25hbGl0eS4gTWFrZVxuICAgKiBzdXJlIHRvIGFsc28gc2V0IHRoZSBgcmVmcmVzaGluZ2AgcHJvcCBjb3JyZWN0bHkuXG4gICAqL1xuICBvblJlZnJlc2g/OiA/KCkgPT4gdm9pZCxcbiAgLyoqXG4gICAqIFVzZWQgdG8gaGFuZGxlIGZhaWx1cmVzIHdoZW4gc2Nyb2xsaW5nIHRvIGFuIGluZGV4IHRoYXQgaGFzIG5vdCBiZWVuIG1lYXN1cmVkIHlldC4gUmVjb21tZW5kZWRcbiAgICogYWN0aW9uIGlzIHRvIGVpdGhlciBjb21wdXRlIHlvdXIgb3duIG9mZnNldCBhbmQgYHNjcm9sbFRvYCBpdCwgb3Igc2Nyb2xsIGFzIGZhciBhcyBwb3NzaWJsZSBhbmRcbiAgICogdGhlbiB0cnkgYWdhaW4gYWZ0ZXIgbW9yZSBpdGVtcyBoYXZlIGJlZW4gcmVuZGVyZWQuXG4gICAqL1xuICBvblNjcm9sbFRvSW5kZXhGYWlsZWQ/OiA/KGluZm86IHtcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGhpZ2hlc3RNZWFzdXJlZEZyYW1lSW5kZXg6IG51bWJlcixcbiAgICBhdmVyYWdlSXRlbUxlbmd0aDogbnVtYmVyLFxuICAgIC4uLlxuICB9KSA9PiB2b2lkLFxuICAvKipcbiAgICogQ2FsbGVkIG9uY2Ugd2hlbiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGdldHMgd2l0aGluIHdpdGhpbiBgb25TdGFydFJlYWNoZWRUaHJlc2hvbGRgXG4gICAqIGZyb20gdGhlIGxvZ2ljYWwgc3RhcnQgb2YgdGhlIGxpc3QuXG4gICAqL1xuICBvblN0YXJ0UmVhY2hlZD86ID8oaW5mbzoge2Rpc3RhbmNlRnJvbVN0YXJ0OiBudW1iZXIsIC4uLn0pID0+IHZvaWQsXG4gIC8qKlxuICAgKiBIb3cgZmFyIGZyb20gdGhlIHN0YXJ0IChpbiB1bml0cyBvZiB2aXNpYmxlIGxlbmd0aCBvZiB0aGUgbGlzdCkgdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGVcbiAgICogbGlzdCBtdXN0IGJlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjb250ZW50IHRvIHRyaWdnZXIgdGhlIGBvblN0YXJ0UmVhY2hlZGAgY2FsbGJhY2suXG4gICAqIFRodXMsIGEgdmFsdWUgb2YgMC41IHdpbGwgdHJpZ2dlciBgb25TdGFydFJlYWNoZWRgIHdoZW4gdGhlIHN0YXJ0IG9mIHRoZSBjb250ZW50IGlzXG4gICAqIHdpdGhpbiBoYWxmIHRoZSB2aXNpYmxlIGxlbmd0aCBvZiB0aGUgbGlzdC5cbiAgICovXG4gIG9uU3RhcnRSZWFjaGVkVGhyZXNob2xkPzogP251bWJlcixcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB2aWV3YWJpbGl0eSBvZiByb3dzIGNoYW5nZXMsIGFzIGRlZmluZWQgYnkgdGhlXG4gICAqIGB2aWV3YWJpbGl0eUNvbmZpZ2AgcHJvcC5cbiAgICovXG4gIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ/OiA/KGluZm86IHtcbiAgICB2aWV3YWJsZUl0ZW1zOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgIGNoYW5nZWQ6IEFycmF5PFZpZXdUb2tlbj4sXG4gICAgLi4uXG4gIH0pID0+IHZvaWQsXG4gIHBlcnNpc3RlbnRTY3JvbGxiYXI/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFNldCB0aGlzIHdoZW4gb2Zmc2V0IGlzIG5lZWRlZCBmb3IgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIHRvIHNob3cgY29ycmVjdGx5LlxuICAgKi9cbiAgcHJvZ3Jlc3NWaWV3T2Zmc2V0PzogbnVtYmVyLFxuICAvKipcbiAgICogQSBjdXN0b20gcmVmcmVzaCBjb250cm9sIGVsZW1lbnQuIFdoZW4gc2V0LCBpdCBvdmVycmlkZXMgdGhlIGRlZmF1bHRcbiAgICogPFJlZnJlc2hDb250cm9sPiBjb21wb25lbnQgYnVpbHQgaW50ZXJuYWxseS4gVGhlIG9uUmVmcmVzaCBhbmQgcmVmcmVzaGluZ1xuICAgKiBwcm9wcyBhcmUgYWxzbyBpZ25vcmVkLiBPbmx5IHdvcmtzIGZvciB2ZXJ0aWNhbCBWaXJ0dWFsaXplZExpc3QuXG4gICAqL1xuICByZWZyZXNoQ29udHJvbD86ID9SZWFjdC5FbGVtZW50PGFueT4sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0cnVlIHdoaWxlIHdhaXRpbmcgZm9yIG5ldyBkYXRhIGZyb20gYSByZWZyZXNoLlxuICAgKi9cbiAgcmVmcmVzaGluZz86ID9ib29sZWFuLFxuICAvKipcbiAgICogTm90ZTogbWF5IGhhdmUgYnVncyAobWlzc2luZyBjb250ZW50KSBpbiBzb21lIGNpcmN1bXN0YW5jZXMgLSB1c2UgYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogVGhpcyBtYXkgaW1wcm92ZSBzY3JvbGwgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIGxpc3RzLlxuICAgKi9cbiAgcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzPzogYm9vbGVhbixcbiAgLyoqXG4gICAqIFJlbmRlciBhIGN1c3RvbSBzY3JvbGwgY29tcG9uZW50LCBlLmcuIHdpdGggYSBkaWZmZXJlbnRseSBzdHlsZWQgYFJlZnJlc2hDb250cm9sYC5cbiAgICovXG4gIHJlbmRlclNjcm9sbENvbXBvbmVudD86IChwcm9wczogT2JqZWN0KSA9PiBSZWFjdC5FbGVtZW50PGFueT4sXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSBiZXR3ZWVuIGxvdy1wcmkgaXRlbSByZW5kZXIgYmF0Y2hlcywgZS5nLiBmb3IgcmVuZGVyaW5nIGl0ZW1zIHF1aXRlIGEgd2F5cyBvZmZcbiAgICogc2NyZWVuLiBTaW1pbGFyIGZpbGwgcmF0ZS9yZXNwb25zaXZlbmVzcyB0cmFkZW9mZiBhcyBgbWF4VG9SZW5kZXJQZXJCYXRjaGAuXG4gICAqL1xuICB1cGRhdGVDZWxsc0JhdGNoaW5nUGVyaW9kPzogP251bWJlcixcbiAgLyoqXG4gICAqIFNlZSBgVmlld2FiaWxpdHlIZWxwZXJgIGZvciBmbG93IHR5cGUgYW5kIGZ1cnRoZXIgZG9jdW1lbnRhdGlvbi5cbiAgICovXG4gIHZpZXdhYmlsaXR5Q29uZmlnPzogVmlld2FiaWxpdHlDb25maWcsXG4gIC8qKlxuICAgKiBMaXN0IG9mIFZpZXdhYmlsaXR5Q29uZmlnL29uVmlld2FibGVJdGVtc0NoYW5nZWQgcGFpcnMuIEEgc3BlY2lmaWMgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZFxuICAgKiB3aWxsIGJlIGNhbGxlZCB3aGVuIGl0cyBjb3JyZXNwb25kaW5nIFZpZXdhYmlsaXR5Q29uZmlnJ3MgY29uZGl0aW9ucyBhcmUgbWV0LlxuICAgKi9cbiAgdmlld2FiaWxpdHlDb25maWdDYWxsYmFja1BhaXJzPzogQXJyYXk8Vmlld2FiaWxpdHlDb25maWdDYWxsYmFja1BhaXI+LFxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgcmVuZGVyZWQgb3V0c2lkZSBvZiB0aGUgdmlzaWJsZSBhcmVhLCBpbiB1bml0cyBvZlxuICAgKiB2aXNpYmxlIGxlbmd0aHMuIFNvIGlmIHlvdXIgbGlzdCBmaWxscyB0aGUgc2NyZWVuLCB0aGVuIGB3aW5kb3dTaXplPXsyMX1gICh0aGUgZGVmYXVsdCkgd2lsbFxuICAgKiByZW5kZXIgdGhlIHZpc2libGUgc2NyZWVuIGFyZWEgcGx1cyB1cCB0byAxMCBzY3JlZW5zIGFib3ZlIGFuZCAxMCBiZWxvdyB0aGUgdmlld3BvcnQuIFJlZHVjaW5nXG4gICAqIHRoaXMgbnVtYmVyIHdpbGwgcmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgbWF5IGltcHJvdmUgcGVyZm9ybWFuY2UsIGJ1dCB3aWxsIGluY3JlYXNlIHRoZVxuICAgKiBjaGFuY2UgdGhhdCBmYXN0IHNjcm9sbGluZyBtYXkgcmV2ZWFsIG1vbWVudGFyeSBibGFuayBhcmVhcyBvZiB1bnJlbmRlcmVkIGNvbnRlbnQuXG4gICAqL1xuICB3aW5kb3dTaXplPzogP251bWJlcixcbiAgLyoqXG4gICAqIFRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgICovXG4gIGxlZ2FjeUltcGxlbWVudGF0aW9uPzogZW1wdHksXG58fTtcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7fFxuICAuLi5SZWFjdC5FbGVtZW50Q29uZmlnPFNjcm9sbFZpZXc+LFxuICAuLi5SZXF1aXJlZFByb3BzLFxuICAuLi5PcHRpb25hbFByb3BzLFxufH07XG5cbi8qKlxuICogRGVmYXVsdCBQcm9wcyBIZWxwZXIgRnVuY3Rpb25zXG4gKiBVc2UgdGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb25zIGZvciBkZWZhdWx0IHZhbHVlc1xuICovXG5cbi8vIGhvcml6b250YWxPckRlZmF1bHQodGhpcy5wcm9wcy5ob3Jpem9udGFsKVxuZXhwb3J0IGZ1bmN0aW9uIGhvcml6b250YWxPckRlZmF1bHQoaG9yaXpvbnRhbDogP2Jvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGhvcml6b250YWwgPz8gZmFsc2U7XG59XG5cbi8vIGluaXRpYWxOdW1Ub1JlbmRlck9yRGVmYXVsdCh0aGlzLnByb3BzLmluaXRpYWxOdW1Ub1JlbmRlcilcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsTnVtVG9SZW5kZXJPckRlZmF1bHQoXG4gIGluaXRpYWxOdW1Ub1JlbmRlcjogP251bWJlcixcbik6IG51bWJlciB7XG4gIHJldHVybiBpbml0aWFsTnVtVG9SZW5kZXIgPz8gMTA7XG59XG5cbi8vIG1heFRvUmVuZGVyUGVyQmF0Y2hPckRlZmF1bHQodGhpcy5wcm9wcy5tYXhUb1JlbmRlclBlckJhdGNoKVxuZXhwb3J0IGZ1bmN0aW9uIG1heFRvUmVuZGVyUGVyQmF0Y2hPckRlZmF1bHQoXG4gIG1heFRvUmVuZGVyUGVyQmF0Y2g6ID9udW1iZXIsXG4pOiBudW1iZXIge1xuICByZXR1cm4gbWF4VG9SZW5kZXJQZXJCYXRjaCA/PyAxMDtcbn1cblxuLy8gb25TdGFydFJlYWNoZWRUaHJlc2hvbGRPckRlZmF1bHQodGhpcy5wcm9wcy5vblN0YXJ0UmVhY2hlZFRocmVzaG9sZClcbmV4cG9ydCBmdW5jdGlvbiBvblN0YXJ0UmVhY2hlZFRocmVzaG9sZE9yRGVmYXVsdChcbiAgb25TdGFydFJlYWNoZWRUaHJlc2hvbGQ6ID9udW1iZXIsXG4pOiBudW1iZXIge1xuICByZXR1cm4gb25TdGFydFJlYWNoZWRUaHJlc2hvbGQgPz8gMjtcbn1cblxuLy8gb25FbmRSZWFjaGVkVGhyZXNob2xkT3JEZWZhdWx0KHRoaXMucHJvcHMub25FbmRSZWFjaGVkVGhyZXNob2xkKVxuZXhwb3J0IGZ1bmN0aW9uIG9uRW5kUmVhY2hlZFRocmVzaG9sZE9yRGVmYXVsdChcbiAgb25FbmRSZWFjaGVkVGhyZXNob2xkOiA/bnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgcmV0dXJuIG9uRW5kUmVhY2hlZFRocmVzaG9sZCA/PyAyO1xufVxuXG4vLyB3aW5kb3dTaXplT3JEZWZhdWx0KHRoaXMucHJvcHMud2luZG93U2l6ZSlcbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dTaXplT3JEZWZhdWx0KHdpbmRvd1NpemU6ID9udW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gd2luZG93U2l6ZSA/PyAyMTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5cbmV4cG9ydCB0eXBlIENlbGxSZWdpb24gPSB7XG4gIGZpcnN0OiBudW1iZXIsXG4gIGxhc3Q6IG51bWJlcixcbiAgaXNTcGFjZXI6IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlck1hc2sge1xuICBfbnVtQ2VsbHM6IG51bWJlcjtcbiAgX3JlZ2lvbnM6IEFycmF5PENlbGxSZWdpb24+O1xuXG4gIGNvbnN0cnVjdG9yKG51bUNlbGxzOiBudW1iZXIpIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBudW1DZWxscyA+PSAwLFxuICAgICAgJ0NlbGxSZW5kZXJNYXNrIG11c3QgY29udGFpbiBhIG5vbi1uZWdhdGl2ZSBudW1iZXIgb3MgY2VsbHMnLFxuICAgICk7XG5cbiAgICB0aGlzLl9udW1DZWxscyA9IG51bUNlbGxzO1xuXG4gICAgaWYgKG51bUNlbGxzID09PSAwKSB7XG4gICAgICB0aGlzLl9yZWdpb25zID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlZ2lvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaXJzdDogMCxcbiAgICAgICAgICBsYXN0OiBudW1DZWxscyAtIDEsXG4gICAgICAgICAgaXNTcGFjZXI6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGVudW1lcmF0ZVJlZ2lvbnMoKTogJFJlYWRPbmx5QXJyYXk8Q2VsbFJlZ2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWdpb25zO1xuICB9XG5cbiAgYWRkQ2VsbHMoY2VsbHM6IHtmaXJzdDogbnVtYmVyLCBsYXN0OiBudW1iZXJ9KTogdm9pZCB7XG4gICAgaW52YXJpYW50KFxuICAgICAgY2VsbHMuZmlyc3QgPj0gMCAmJlxuICAgICAgICBjZWxscy5maXJzdCA8IHRoaXMuX251bUNlbGxzICYmXG4gICAgICAgIGNlbGxzLmxhc3QgPj0gLTEgJiZcbiAgICAgICAgY2VsbHMubGFzdCA8IHRoaXMuX251bUNlbGxzICYmXG4gICAgICAgIGNlbGxzLmxhc3QgPj0gY2VsbHMuZmlyc3QgLSAxLFxuICAgICAgJ0NlbGxSZW5kZXJNYXNrLmFkZENlbGxzIGNhbGxlZCB3aXRoIGludmFsaWQgY2VsbCByYW5nZScsXG4gICAgKTtcblxuICAgIC8vIFZpcnR1YWxpemVkTGlzdCB1c2VzIGluY2x1c2l2ZSByYW5nZXMsIHdoZXJlIHplcm8tY291bnQgc3RhdGVzIGFyZVxuICAgIC8vIHBvc3NpYmxlLiBFLmcuIFswLCAtMV0gZm9yIG5vIGNlbGxzLCBzdGFydGluZyBhdCAwLlxuICAgIGlmIChjZWxscy5sYXN0IDwgY2VsbHMuZmlyc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbZmlyc3RJbnRlcnNlY3QsIGZpcnN0SW50ZXJzZWN0SWR4XSA9IHRoaXMuX2ZpbmRSZWdpb24oY2VsbHMuZmlyc3QpO1xuICAgIGNvbnN0IFtsYXN0SW50ZXJzZWN0LCBsYXN0SW50ZXJzZWN0SWR4XSA9IHRoaXMuX2ZpbmRSZWdpb24oY2VsbHMubGFzdCk7XG5cbiAgICAvLyBGYXN0LXBhdGggaWYgdGhlIGNlbGxzIHRvIGFkZCBhcmUgYWxyZWFkeSBhbGwgcHJlc2VudCBpbiB0aGUgbWFzay4gV2VcbiAgICAvLyB3aWxsIG90aGVyd2lzZSBuZWVkIHRvIGRvIHNvbWUgbXV0YXRpb24uXG4gICAgaWYgKGZpcnN0SW50ZXJzZWN0SWR4ID09PSBsYXN0SW50ZXJzZWN0SWR4ICYmICFmaXJzdEludGVyc2VjdC5pc1NwYWNlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgY292ZXJlZCByZWdpb25zIHdpdGggMS0zIG5ldyByZWdpb25zXG4gICAgLy8gZGVwZW5kaW5nIHdoZXRoZXIgd2UgbmVlZCB0byBzcGxpdCBzcGFjZXJzIG91dCBvZiBvdmVybGFwcGluZyByZWdpb25zLlxuICAgIGNvbnN0IG5ld0xlYWRSZWdpb246IEFycmF5PENlbGxSZWdpb24+ID0gW107XG4gICAgY29uc3QgbmV3VGFpbFJlZ2lvbjogQXJyYXk8Q2VsbFJlZ2lvbj4gPSBbXTtcbiAgICBjb25zdCBuZXdNYWluUmVnaW9uOiBDZWxsUmVnaW9uID0ge1xuICAgICAgLi4uY2VsbHMsXG4gICAgICBpc1NwYWNlcjogZmFsc2UsXG4gICAgfTtcblxuICAgIGlmIChmaXJzdEludGVyc2VjdC5maXJzdCA8IG5ld01haW5SZWdpb24uZmlyc3QpIHtcbiAgICAgIGlmIChmaXJzdEludGVyc2VjdC5pc1NwYWNlcikge1xuICAgICAgICBuZXdMZWFkUmVnaW9uLnB1c2goe1xuICAgICAgICAgIGZpcnN0OiBmaXJzdEludGVyc2VjdC5maXJzdCxcbiAgICAgICAgICBsYXN0OiBuZXdNYWluUmVnaW9uLmZpcnN0IC0gMSxcbiAgICAgICAgICBpc1NwYWNlcjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdNYWluUmVnaW9uLmZpcnN0ID0gZmlyc3RJbnRlcnNlY3QuZmlyc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhc3RJbnRlcnNlY3QubGFzdCA+IG5ld01haW5SZWdpb24ubGFzdCkge1xuICAgICAgaWYgKGxhc3RJbnRlcnNlY3QuaXNTcGFjZXIpIHtcbiAgICAgICAgbmV3VGFpbFJlZ2lvbi5wdXNoKHtcbiAgICAgICAgICBmaXJzdDogbmV3TWFpblJlZ2lvbi5sYXN0ICsgMSxcbiAgICAgICAgICBsYXN0OiBsYXN0SW50ZXJzZWN0Lmxhc3QsXG4gICAgICAgICAgaXNTcGFjZXI6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3TWFpblJlZ2lvbi5sYXN0ID0gbGFzdEludGVyc2VjdC5sYXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVnaW9uczogQXJyYXk8Q2VsbFJlZ2lvbj4gPSBbXG4gICAgICAuLi5uZXdMZWFkUmVnaW9uLFxuICAgICAgbmV3TWFpblJlZ2lvbixcbiAgICAgIC4uLm5ld1RhaWxSZWdpb24sXG4gICAgXTtcbiAgICBjb25zdCBudW1SZWdpb25zVG9EZWxldGUgPSBsYXN0SW50ZXJzZWN0SWR4IC0gZmlyc3RJbnRlcnNlY3RJZHggKyAxO1xuICAgIHRoaXMuX3JlZ2lvbnMuc3BsaWNlKFxuICAgICAgZmlyc3RJbnRlcnNlY3RJZHgsXG4gICAgICBudW1SZWdpb25zVG9EZWxldGUsXG4gICAgICAuLi5yZXBsYWNlbWVudFJlZ2lvbnMsXG4gICAgKTtcbiAgfVxuXG4gIG51bUNlbGxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX251bUNlbGxzO1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBDZWxsUmVuZGVyTWFzayk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9udW1DZWxscyA9PT0gb3RoZXIuX251bUNlbGxzICYmXG4gICAgICB0aGlzLl9yZWdpb25zLmxlbmd0aCA9PT0gb3RoZXIuX3JlZ2lvbnMubGVuZ3RoICYmXG4gICAgICB0aGlzLl9yZWdpb25zLmV2ZXJ5KFxuICAgICAgICAocmVnaW9uLCBpKSA9PlxuICAgICAgICAgIHJlZ2lvbi5maXJzdCA9PT0gb3RoZXIuX3JlZ2lvbnNbaV0uZmlyc3QgJiZcbiAgICAgICAgICByZWdpb24ubGFzdCA9PT0gb3RoZXIuX3JlZ2lvbnNbaV0ubGFzdCAmJlxuICAgICAgICAgIHJlZ2lvbi5pc1NwYWNlciA9PT0gb3RoZXIuX3JlZ2lvbnNbaV0uaXNTcGFjZXIsXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIF9maW5kUmVnaW9uKGNlbGxJZHg6IG51bWJlcik6IFtDZWxsUmVnaW9uLCBudW1iZXJdIHtcbiAgICBsZXQgZmlyc3RJZHggPSAwO1xuICAgIGxldCBsYXN0SWR4ID0gdGhpcy5fcmVnaW9ucy5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKGZpcnN0SWR4IDw9IGxhc3RJZHgpIHtcbiAgICAgIGNvbnN0IG1pZGRsZUlkeCA9IE1hdGguZmxvb3IoKGZpcnN0SWR4ICsgbGFzdElkeCkgLyAyKTtcbiAgICAgIGNvbnN0IG1pZGRsZVJlZ2lvbiA9IHRoaXMuX3JlZ2lvbnNbbWlkZGxlSWR4XTtcblxuICAgICAgaWYgKGNlbGxJZHggPj0gbWlkZGxlUmVnaW9uLmZpcnN0ICYmIGNlbGxJZHggPD0gbWlkZGxlUmVnaW9uLmxhc3QpIHtcbiAgICAgICAgcmV0dXJuIFttaWRkbGVSZWdpb24sIG1pZGRsZUlkeF07XG4gICAgICB9IGVsc2UgaWYgKGNlbGxJZHggPCBtaWRkbGVSZWdpb24uZmlyc3QpIHtcbiAgICAgICAgbGFzdElkeCA9IG1pZGRsZUlkeCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGNlbGxJZHggPiBtaWRkbGVSZWdpb24ubGFzdCkge1xuICAgICAgICBmaXJzdElkeCA9IG1pZGRsZUlkeCArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW52YXJpYW50KGZhbHNlLCBgQSByZWdpb24gd2FzIG5vdCBmb3VuZCBjb250YWluaW5nIGNlbGxJZHggJHtjZWxsSWR4fWApO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Rva2VufSBmcm9tICcuL1ZpZXdhYmlsaXR5SGVscGVyJztcblxuaW1wb3J0IFZpcnR1YWxpemVkTGlzdCBmcm9tICcuL1ZpcnR1YWxpemVkTGlzdCc7XG5pbXBvcnQge2tleUV4dHJhY3RvciBhcyBkZWZhdWx0S2V5RXh0cmFjdG9yfSBmcm9tICcuL1ZpcnR1YWxpemVVdGlscyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1ZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbnR5cGUgSXRlbSA9IGFueTtcblxuZXhwb3J0IHR5cGUgU2VjdGlvbkJhc2U8U2VjdGlvbkl0ZW1UPiA9IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhIGZvciByZW5kZXJpbmcgaXRlbXMgaW4gdGhpcyBzZWN0aW9uLlxuICAgKi9cbiAgZGF0YTogJFJlYWRPbmx5QXJyYXk8U2VjdGlvbkl0ZW1UPixcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGtleSB0byBrZWVwIHRyYWNrIG9mIHNlY3Rpb24gcmUtb3JkZXJpbmcuIElmIHlvdSBkb24ndCBwbGFuIG9uIHJlLW9yZGVyaW5nIHNlY3Rpb25zLFxuICAgKiB0aGUgYXJyYXkgaW5kZXggd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBrZXk/OiBzdHJpbmcsXG4gIC8vIE9wdGlvbmFsIHByb3BzIHdpbGwgb3ZlcnJpZGUgbGlzdC13aWRlIHByb3BzIGp1c3QgZm9yIHRoaXMgc2VjdGlvbi5cbiAgcmVuZGVySXRlbT86ID8oaW5mbzoge1xuICAgIGl0ZW06IFNlY3Rpb25JdGVtVCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNlY3Rpb246IFNlY3Rpb25CYXNlPFNlY3Rpb25JdGVtVD4sXG4gICAgc2VwYXJhdG9yczoge1xuICAgICAgaGlnaGxpZ2h0OiAoKSA9PiB2b2lkLFxuICAgICAgdW5oaWdobGlnaHQ6ICgpID0+IHZvaWQsXG4gICAgICB1cGRhdGVQcm9wczogKHNlbGVjdDogJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJywgbmV3UHJvcHM6IE9iamVjdCkgPT4gdm9pZCxcbiAgICAgIC4uLlxuICAgIH0sXG4gICAgLi4uXG4gIH0pID0+IG51bGwgfCBSZWFjdC5FbGVtZW50PGFueT4sXG4gIEl0ZW1TZXBhcmF0b3JDb21wb25lbnQ/OiA/UmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+LFxuICBrZXlFeHRyYWN0b3I/OiAoaXRlbTogU2VjdGlvbkl0ZW1ULCBpbmRleD86ID9udW1iZXIpID0+IHN0cmluZyxcbiAgLi4uXG59O1xuXG50eXBlIFJlcXVpcmVkUHJvcHM8U2VjdGlvblQ6IFNlY3Rpb25CYXNlPGFueT4+ID0ge3xcbiAgc2VjdGlvbnM6ICRSZWFkT25seUFycmF5PFNlY3Rpb25UPixcbnx9O1xuXG50eXBlIE9wdGlvbmFsUHJvcHM8U2VjdGlvblQ6IFNlY3Rpb25CYXNlPGFueT4+ID0ge3xcbiAgLyoqXG4gICAqIERlZmF1bHQgcmVuZGVyZXIgZm9yIGV2ZXJ5IGl0ZW0gaW4gZXZlcnkgc2VjdGlvbi5cbiAgICovXG4gIHJlbmRlckl0ZW0/OiAoaW5mbzoge1xuICAgIGl0ZW06IEl0ZW0sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzZWN0aW9uOiBTZWN0aW9uVCxcbiAgICBzZXBhcmF0b3JzOiB7XG4gICAgICBoaWdobGlnaHQ6ICgpID0+IHZvaWQsXG4gICAgICB1bmhpZ2hsaWdodDogKCkgPT4gdm9pZCxcbiAgICAgIHVwZGF0ZVByb3BzOiAoc2VsZWN0OiAnbGVhZGluZycgfCAndHJhaWxpbmcnLCBuZXdQcm9wczogT2JqZWN0KSA9PiB2b2lkLFxuICAgICAgLi4uXG4gICAgfSxcbiAgICAuLi5cbiAgfSkgPT4gbnVsbCB8IFJlYWN0LkVsZW1lbnQ8YW55PixcbiAgLyoqXG4gICAqIFJlbmRlcmVkIGF0IHRoZSB0b3Agb2YgZWFjaCBzZWN0aW9uLiBUaGVzZSBzdGljayB0byB0aGUgdG9wIG9mIHRoZSBgU2Nyb2xsVmlld2AgYnkgZGVmYXVsdCBvblxuICAgKiBpT1MuIFNlZSBgc3RpY2t5U2VjdGlvbkhlYWRlcnNFbmFibGVkYC5cbiAgICovXG4gIHJlbmRlclNlY3Rpb25IZWFkZXI/OiA/KGluZm86IHtcbiAgICBzZWN0aW9uOiBTZWN0aW9uVCxcbiAgICAuLi5cbiAgfSkgPT4gbnVsbCB8IFJlYWN0LkVsZW1lbnQ8YW55PixcbiAgLyoqXG4gICAqIFJlbmRlcmVkIGF0IHRoZSBib3R0b20gb2YgZWFjaCBzZWN0aW9uLlxuICAgKi9cbiAgcmVuZGVyU2VjdGlvbkZvb3Rlcj86ID8oaW5mbzoge1xuICAgIHNlY3Rpb246IFNlY3Rpb25ULFxuICAgIC4uLlxuICB9KSA9PiBudWxsIHwgUmVhY3QuRWxlbWVudDxhbnk+LFxuICAvKipcbiAgICogUmVuZGVyZWQgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGVhY2ggc2VjdGlvbiAobm90ZSB0aGlzIGlzIGRpZmZlcmVudCBmcm9tXG4gICAqIGBJdGVtU2VwYXJhdG9yQ29tcG9uZW50YCB3aGljaCBpcyBvbmx5IHJlbmRlcmVkIGJldHdlZW4gaXRlbXMpLiBUaGVzZSBhcmUgaW50ZW5kZWQgdG8gc2VwYXJhdGVcbiAgICogc2VjdGlvbnMgZnJvbSB0aGUgaGVhZGVycyBhYm92ZSBhbmQgYmVsb3cgYW5kIHR5cGljYWxseSBoYXZlIHRoZSBzYW1lIGhpZ2hsaWdodCByZXNwb25zZSBhc1xuICAgKiBgSXRlbVNlcGFyYXRvckNvbXBvbmVudGAuIEFsc28gcmVjZWl2ZXMgYGhpZ2hsaWdodGVkYCwgYFtsZWFkaW5nL3RyYWlsaW5nXVtJdGVtL1NlcGFyYXRvcl1gLFxuICAgKiBhbmQgYW55IGN1c3RvbSBwcm9wcyBmcm9tIGBzZXBhcmF0b3JzLnVwZGF0ZVByb3BzYC5cbiAgICovXG4gIFNlY3Rpb25TZXBhcmF0b3JDb21wb25lbnQ/OiA/UmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+LFxuICAvKipcbiAgICogTWFrZXMgc2VjdGlvbiBoZWFkZXJzIHN0aWNrIHRvIHRoZSB0b3Agb2YgdGhlIHNjcmVlbiB1bnRpbCB0aGUgbmV4dCBvbmUgcHVzaGVzIGl0IG9mZi4gT25seVxuICAgKiBlbmFibGVkIGJ5IGRlZmF1bHQgb24gaU9TIGJlY2F1c2UgdGhhdCBpcyB0aGUgcGxhdGZvcm0gc3RhbmRhcmQgdGhlcmUuXG4gICAqL1xuICBzdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQ/OiBib29sZWFuLFxuICBvbkVuZFJlYWNoZWQ/OiA/KHtkaXN0YW5jZUZyb21FbmQ6IG51bWJlciwgLi4ufSkgPT4gdm9pZCxcbnx9O1xuXG50eXBlIFZpcnR1YWxpemVkTGlzdFByb3BzID0gUmVhY3QuRWxlbWVudENvbmZpZzx0eXBlb2YgVmlydHVhbGl6ZWRMaXN0PjtcblxuZXhwb3J0IHR5cGUgUHJvcHM8U2VjdGlvblQ+ID0ge3xcbiAgLi4uUmVxdWlyZWRQcm9wczxTZWN0aW9uVD4sXG4gIC4uLk9wdGlvbmFsUHJvcHM8U2VjdGlvblQ+LFxuICAuLi4kRGlmZjxcbiAgICBWaXJ0dWFsaXplZExpc3RQcm9wcyxcbiAgICB7XG4gICAgICByZW5kZXJJdGVtOiAkUHJvcGVydHlUeXBlPFZpcnR1YWxpemVkTGlzdFByb3BzLCAncmVuZGVySXRlbSc+LFxuICAgICAgZGF0YTogJFByb3BlcnR5VHlwZTxWaXJ0dWFsaXplZExpc3RQcm9wcywgJ2RhdGEnPixcbiAgICAgIC4uLlxuICAgIH0sXG4gID4sXG58fTtcbmV4cG9ydCB0eXBlIFNjcm9sbFRvTG9jYXRpb25QYXJhbXNUeXBlID0ge3xcbiAgYW5pbWF0ZWQ/OiA/Ym9vbGVhbixcbiAgaXRlbUluZGV4OiBudW1iZXIsXG4gIHNlY3Rpb25JbmRleDogbnVtYmVyLFxuICB2aWV3T2Zmc2V0PzogbnVtYmVyLFxuICB2aWV3UG9zaXRpb24/OiBudW1iZXIsXG58fTtcblxudHlwZSBTdGF0ZSA9IHtjaGlsZFByb3BzOiBWaXJ0dWFsaXplZExpc3RQcm9wcywgLi4ufTtcblxuLyoqXG4gKiBSaWdodCBub3cgdGhpcyBqdXN0IGZsYXR0ZW5zIGV2ZXJ5dGhpbmcgaW50byBvbmUgbGlzdCBhbmQgdXNlcyBWaXJ0dWFsaXplZExpc3QgdW5kZXIgdGhlXG4gKiBob29kLiBUaGUgb25seSBvcGVyYXRpb24gdGhhdCBtaWdodCBub3Qgc2NhbGUgd2VsbCBpcyBjb25jYXR0aW5nIHRoZSBkYXRhIGFycmF5cyBvZiBhbGwgdGhlXG4gKiBzZWN0aW9ucyB3aGVuIG5ldyBwcm9wcyBhcmUgcmVjZWl2ZWQsIHdoaWNoIHNob3VsZCBiZSBwbGVudHkgZmFzdCBmb3IgdXAgdG8gfjEwLDAwMCBpdGVtcy5cbiAqL1xuY2xhc3MgVmlydHVhbGl6ZWRTZWN0aW9uTGlzdDxcbiAgU2VjdGlvblQ6IFNlY3Rpb25CYXNlPGFueT4sXG4+IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wczxTZWN0aW9uVD4sIFN0YXRlPiB7XG4gIHNjcm9sbFRvTG9jYXRpb24ocGFyYW1zOiBTY3JvbGxUb0xvY2F0aW9uUGFyYW1zVHlwZSkge1xuICAgIGxldCBpbmRleCA9IHBhcmFtcy5pdGVtSW5kZXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMuc2VjdGlvbkluZGV4OyBpKyspIHtcbiAgICAgIGluZGV4ICs9IHRoaXMucHJvcHMuZ2V0SXRlbUNvdW50KHRoaXMucHJvcHMuc2VjdGlvbnNbaV0uZGF0YSkgKyAyO1xuICAgIH1cbiAgICBsZXQgdmlld09mZnNldCA9IHBhcmFtcy52aWV3T2Zmc2V0IHx8IDA7XG4gICAgaWYgKHRoaXMuX2xpc3RSZWYgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0UmVmID0gdGhpcy5fbGlzdFJlZjtcbiAgICBpZiAocGFyYW1zLml0ZW1JbmRleCA+IDAgJiYgdGhpcy5wcm9wcy5zdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGZyYW1lID0gbGlzdFJlZlxuICAgICAgICAuX19nZXRMaXN0TWV0cmljcygpXG4gICAgICAgIC5nZXRDZWxsTWV0cmljc0FwcHJveChpbmRleCAtIHBhcmFtcy5pdGVtSW5kZXgsIGxpc3RSZWYucHJvcHMpO1xuICAgICAgdmlld09mZnNldCArPSBmcmFtZS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHRvSW5kZXhQYXJhbXMgPSB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICB2aWV3T2Zmc2V0LFxuICAgICAgaW5kZXgsXG4gICAgfTtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgdGhpcy5fbGlzdFJlZi5zY3JvbGxUb0luZGV4KHRvSW5kZXhQYXJhbXMpO1xuICB9XG5cbiAgZ2V0TGlzdFJlZigpOiA/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlydHVhbGl6ZWRMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3RSZWY7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qge1xuICAgICAgSXRlbVNlcGFyYXRvckNvbXBvbmVudCwgLy8gZG9uJ3QgcGFzcyB0aHJvdWdoLCByZW5kZXJlZCB3aXRoIHJlbmRlckl0ZW1cbiAgICAgIFNlY3Rpb25TZXBhcmF0b3JDb21wb25lbnQsXG4gICAgICByZW5kZXJJdGVtOiBfcmVuZGVySXRlbSxcbiAgICAgIHJlbmRlclNlY3Rpb25Gb290ZXIsXG4gICAgICByZW5kZXJTZWN0aW9uSGVhZGVyLFxuICAgICAgc2VjdGlvbnM6IF9zZWN0aW9ucyxcbiAgICAgIHN0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZCxcbiAgICAgIC4uLnBhc3NUaHJvdWdoUHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGxpc3RIZWFkZXJPZmZzZXQgPSB0aGlzLnByb3BzLkxpc3RIZWFkZXJDb21wb25lbnQgPyAxIDogMDtcblxuICAgIGNvbnN0IHN0aWNreUhlYWRlckluZGljZXMgPSB0aGlzLnByb3BzLnN0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZFxuICAgICAgPyAoW106IEFycmF5PG51bWJlcj4pXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGxldCBpdGVtQ291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLnByb3BzLnNlY3Rpb25zKSB7XG4gICAgICAvLyBUcmFjayB0aGUgc2VjdGlvbiBoZWFkZXIgaW5kaWNlc1xuICAgICAgaWYgKHN0aWNreUhlYWRlckluZGljZXMgIT0gbnVsbCkge1xuICAgICAgICBzdGlja3lIZWFkZXJJbmRpY2VzLnB1c2goaXRlbUNvdW50ICsgbGlzdEhlYWRlck9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0d28gZm9yIHRoZSBzZWN0aW9uIGhlYWRlciBhbmQgZm9vdGVyLlxuICAgICAgaXRlbUNvdW50ICs9IDI7XG4gICAgICBpdGVtQ291bnQgKz0gdGhpcy5wcm9wcy5nZXRJdGVtQ291bnQoc2VjdGlvbi5kYXRhKTtcbiAgICB9XG4gICAgY29uc3QgcmVuZGVySXRlbSA9IHRoaXMuX3JlbmRlckl0ZW0oaXRlbUNvdW50KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlydHVhbGl6ZWRMaXN0XG4gICAgICAgIHsuLi5wYXNzVGhyb3VnaFByb3BzfVxuICAgICAgICBrZXlFeHRyYWN0b3I9e3RoaXMuX2tleUV4dHJhY3Rvcn1cbiAgICAgICAgc3RpY2t5SGVhZGVySW5kaWNlcz17c3RpY2t5SGVhZGVySW5kaWNlc31cbiAgICAgICAgcmVuZGVySXRlbT17cmVuZGVySXRlbX1cbiAgICAgICAgZGF0YT17dGhpcy5wcm9wcy5zZWN0aW9uc31cbiAgICAgICAgZ2V0SXRlbT17KHNlY3Rpb25zLCBpbmRleCkgPT5cbiAgICAgICAgICB0aGlzLl9nZXRJdGVtKHRoaXMucHJvcHMsIHNlY3Rpb25zLCBpbmRleClcbiAgICAgICAgfVxuICAgICAgICBnZXRJdGVtQ291bnQ9eygpID0+IGl0ZW1Db3VudH1cbiAgICAgICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZD17XG4gICAgICAgICAgdGhpcy5wcm9wcy5vblZpZXdhYmxlSXRlbXNDaGFuZ2VkXG4gICAgICAgICAgICA/IHRoaXMuX29uVmlld2FibGVJdGVtc0NoYW5nZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgcmVmPXt0aGlzLl9jYXB0dXJlUmVmfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgX2dldEl0ZW0oXG4gICAgcHJvcHM6IFByb3BzPFNlY3Rpb25UPixcbiAgICBzZWN0aW9uczogPyRSZWFkT25seUFycmF5PEl0ZW0+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICk6ID9JdGVtIHtcbiAgICBpZiAoIXNlY3Rpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IGl0ZW1JZHggPSBpbmRleCAtIDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2ldO1xuICAgICAgY29uc3Qgc2VjdGlvbkRhdGEgPSBzZWN0aW9uLmRhdGE7XG4gICAgICBjb25zdCBpdGVtQ291bnQgPSBwcm9wcy5nZXRJdGVtQ291bnQoc2VjdGlvbkRhdGEpO1xuICAgICAgaWYgKGl0ZW1JZHggPT09IC0xIHx8IGl0ZW1JZHggPT09IGl0ZW1Db3VudCkge1xuICAgICAgICAvLyBXZSBpbnRlbmQgZm9yIHRoZXJlIHRvIGJlIG92ZXJmbG93IGJ5IG9uZSBvbiBib3RoIGVuZHMgb2YgdGhlIGxpc3QuXG4gICAgICAgIC8vIFRoaXMgd2lsbCBiZSBmb3IgaGVhZGVycyBhbmQgZm9vdGVycy4gV2hlbiByZXR1cm5pbmcgYSBoZWFkZXIgb3IgZm9vdGVyXG4gICAgICAgIC8vIGl0ZW0gdGhlIHNlY3Rpb24gaXRzZWxmIGlzIHRoZSBpdGVtLlxuICAgICAgICByZXR1cm4gc2VjdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbUlkeCA8IGl0ZW1Db3VudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gdGhlIGJvdW5kcyBvZiB0aGUgbGlzdCdzIGRhdGEgdGhlbiByZXR1cm4gdGhlIGl0ZW0uXG4gICAgICAgIHJldHVybiBwcm9wcy5nZXRJdGVtKHNlY3Rpb25EYXRhLCBpdGVtSWR4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1JZHggLT0gaXRlbUNvdW50ICsgMjsgLy8gQWRkIHR3byBmb3IgdGhlIGhlYWRlciBhbmQgZm9vdGVyXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICBfa2V5RXh0cmFjdG9yID0gKGl0ZW06IEl0ZW0sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpbmZvID0gdGhpcy5fc3ViRXh0cmFjdG9yKGluZGV4KTtcbiAgICByZXR1cm4gKGluZm8gJiYgaW5mby5rZXkpIHx8IFN0cmluZyhpbmRleCk7XG4gIH07XG5cbiAgX3N1YkV4dHJhY3RvcihpbmRleDogbnVtYmVyKTogP3tcbiAgICBzZWN0aW9uOiBTZWN0aW9uVCxcbiAgICAvLyBLZXkgb2YgdGhlIHNlY3Rpb24gb3IgY29tYmluZWQga2V5IGZvciBzZWN0aW9uICsgaXRlbVxuICAgIGtleTogc3RyaW5nLFxuICAgIC8vIFJlbGF0aXZlIGluZGV4IHdpdGhpbiB0aGUgc2VjdGlvblxuICAgIGluZGV4OiA/bnVtYmVyLFxuICAgIC8vIFRydWUgaWYgdGhpcyBpcyB0aGUgc2VjdGlvbiBoZWFkZXJcbiAgICBoZWFkZXI/OiA/Ym9vbGVhbixcbiAgICBsZWFkaW5nSXRlbT86ID9JdGVtLFxuICAgIGxlYWRpbmdTZWN0aW9uPzogP1NlY3Rpb25ULFxuICAgIHRyYWlsaW5nSXRlbT86ID9JdGVtLFxuICAgIHRyYWlsaW5nU2VjdGlvbj86ID9TZWN0aW9uVCxcbiAgICAuLi5cbiAgfSB7XG4gICAgbGV0IGl0ZW1JbmRleCA9IGluZGV4O1xuICAgIGNvbnN0IHtnZXRJdGVtLCBnZXRJdGVtQ291bnQsIGtleUV4dHJhY3Rvciwgc2VjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzZWN0aW9uID0gc2VjdGlvbnNbaV07XG4gICAgICBjb25zdCBzZWN0aW9uRGF0YSA9IHNlY3Rpb24uZGF0YTtcbiAgICAgIGNvbnN0IGtleSA9IHNlY3Rpb24ua2V5IHx8IFN0cmluZyhpKTtcbiAgICAgIGl0ZW1JbmRleCAtPSAxOyAvLyBUaGUgc2VjdGlvbiBhZGRzIGFuIGl0ZW0gZm9yIHRoZSBoZWFkZXJcbiAgICAgIGlmIChpdGVtSW5kZXggPj0gZ2V0SXRlbUNvdW50KHNlY3Rpb25EYXRhKSArIDEpIHtcbiAgICAgICAgaXRlbUluZGV4IC09IGdldEl0ZW1Db3VudChzZWN0aW9uRGF0YSkgKyAxOyAvLyBUaGUgc2VjdGlvbiBhZGRzIGFuIGl0ZW0gZm9yIHRoZSBmb290ZXIuXG4gICAgICB9IGVsc2UgaWYgKGl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWN0aW9uLFxuICAgICAgICAgIGtleToga2V5ICsgJzpoZWFkZXInLFxuICAgICAgICAgIGluZGV4OiBudWxsLFxuICAgICAgICAgIGhlYWRlcjogdHJ1ZSxcbiAgICAgICAgICB0cmFpbGluZ1NlY3Rpb246IHNlY3Rpb25zW2kgKyAxXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbUluZGV4ID09PSBnZXRJdGVtQ291bnQoc2VjdGlvbkRhdGEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VjdGlvbixcbiAgICAgICAgICBrZXk6IGtleSArICc6Zm9vdGVyJyxcbiAgICAgICAgICBpbmRleDogbnVsbCxcbiAgICAgICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgICAgIHRyYWlsaW5nU2VjdGlvbjogc2VjdGlvbnNbaSArIDFdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXh0cmFjdG9yID1cbiAgICAgICAgICBzZWN0aW9uLmtleUV4dHJhY3RvciB8fCBrZXlFeHRyYWN0b3IgfHwgZGVmYXVsdEtleUV4dHJhY3RvcjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWN0aW9uLFxuICAgICAgICAgIGtleTpcbiAgICAgICAgICAgIGtleSArICc6JyArIGV4dHJhY3RvcihnZXRJdGVtKHNlY3Rpb25EYXRhLCBpdGVtSW5kZXgpLCBpdGVtSW5kZXgpLFxuICAgICAgICAgIGluZGV4OiBpdGVtSW5kZXgsXG4gICAgICAgICAgbGVhZGluZ0l0ZW06IGdldEl0ZW0oc2VjdGlvbkRhdGEsIGl0ZW1JbmRleCAtIDEpLFxuICAgICAgICAgIGxlYWRpbmdTZWN0aW9uOiBzZWN0aW9uc1tpIC0gMV0sXG4gICAgICAgICAgdHJhaWxpbmdJdGVtOiBnZXRJdGVtKHNlY3Rpb25EYXRhLCBpdGVtSW5kZXggKyAxKSxcbiAgICAgICAgICB0cmFpbGluZ1NlY3Rpb246IHNlY3Rpb25zW2kgKyAxXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfY29udmVydFZpZXdhYmxlID0gKHZpZXdhYmxlOiBWaWV3VG9rZW4pOiA/Vmlld1Rva2VuID0+IHtcbiAgICBpbnZhcmlhbnQodmlld2FibGUuaW5kZXggIT0gbnVsbCwgJ1JlY2VpdmVkIGEgYnJva2VuIFZpZXdUb2tlbicpO1xuICAgIGNvbnN0IGluZm8gPSB0aGlzLl9zdWJFeHRyYWN0b3Iodmlld2FibGUuaW5kZXgpO1xuICAgIGlmICghaW5mbykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGtleUV4dHJhY3RvcldpdGhOdWxsYWJsZUluZGV4ID0gaW5mby5zZWN0aW9uLmtleUV4dHJhY3RvcjtcbiAgICBjb25zdCBrZXlFeHRyYWN0b3JXaXRoTm9uTnVsbGFibGVJbmRleCA9XG4gICAgICB0aGlzLnByb3BzLmtleUV4dHJhY3RvciB8fCBkZWZhdWx0S2V5RXh0cmFjdG9yO1xuICAgIGNvbnN0IGtleSA9XG4gICAgICBrZXlFeHRyYWN0b3JXaXRoTnVsbGFibGVJbmRleCAhPSBudWxsXG4gICAgICAgID8ga2V5RXh0cmFjdG9yV2l0aE51bGxhYmxlSW5kZXgodmlld2FibGUuaXRlbSwgaW5mby5pbmRleClcbiAgICAgICAgOiBrZXlFeHRyYWN0b3JXaXRoTm9uTnVsbGFibGVJbmRleCh2aWV3YWJsZS5pdGVtLCBpbmZvLmluZGV4ID8/IDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZpZXdhYmxlLFxuICAgICAgaW5kZXg6IGluZm8uaW5kZXgsXG4gICAgICBrZXksXG4gICAgICBzZWN0aW9uOiBpbmZvLnNlY3Rpb24sXG4gICAgfTtcbiAgfTtcblxuICBfb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCA9ICh7XG4gICAgdmlld2FibGVJdGVtcyxcbiAgICBjaGFuZ2VkLFxuICB9OiB7XG4gICAgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPixcbiAgICBjaGFuZ2VkOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgIC4uLlxuICB9KSA9PiB7XG4gICAgY29uc3Qgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCA9IHRoaXMucHJvcHMub25WaWV3YWJsZUl0ZW1zQ2hhbmdlZDtcbiAgICBpZiAob25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCAhPSBudWxsKSB7XG4gICAgICBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkKHtcbiAgICAgICAgdmlld2FibGVJdGVtczogdmlld2FibGVJdGVtc1xuICAgICAgICAgIC5tYXAodGhpcy5fY29udmVydFZpZXdhYmxlLCB0aGlzKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICAgICAgIGNoYW5nZWQ6IGNoYW5nZWQubWFwKHRoaXMuX2NvbnZlcnRWaWV3YWJsZSwgdGhpcykuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9yZW5kZXJJdGVtID1cbiAgICAobGlzdEl0ZW1Db3VudDogbnVtYmVyKTogJEZsb3dGaXhNZSA9PlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50c1xuICAgICh7aXRlbSwgaW5kZXh9OiB7aXRlbTogSXRlbSwgaW5kZXg6IG51bWJlciwgLi4ufSkgPT4ge1xuICAgICAgY29uc3QgaW5mbyA9IHRoaXMuX3N1YkV4dHJhY3RvcihpbmRleCk7XG4gICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBpbmZvSW5kZXggPSBpbmZvLmluZGV4O1xuICAgICAgaWYgKGluZm9JbmRleCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHtzZWN0aW9ufSA9IGluZm87XG4gICAgICAgIGlmIChpbmZvLmhlYWRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHtyZW5kZXJTZWN0aW9uSGVhZGVyfSA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgcmV0dXJuIHJlbmRlclNlY3Rpb25IZWFkZXIgPyByZW5kZXJTZWN0aW9uSGVhZGVyKHtzZWN0aW9ufSkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHtyZW5kZXJTZWN0aW9uRm9vdGVyfSA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgcmV0dXJuIHJlbmRlclNlY3Rpb25Gb290ZXIgPyByZW5kZXJTZWN0aW9uRm9vdGVyKHtzZWN0aW9ufSkgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZW5kZXJJdGVtID0gaW5mby5zZWN0aW9uLnJlbmRlckl0ZW0gfHwgdGhpcy5wcm9wcy5yZW5kZXJJdGVtO1xuICAgICAgICBjb25zdCBTZXBhcmF0b3JDb21wb25lbnQgPSB0aGlzLl9nZXRTZXBhcmF0b3JDb21wb25lbnQoXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgaW5mbyxcbiAgICAgICAgICBsaXN0SXRlbUNvdW50LFxuICAgICAgICApO1xuICAgICAgICBpbnZhcmlhbnQocmVuZGVySXRlbSwgJ25vIHJlbmRlckl0ZW0hJyk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEl0ZW1XaXRoU2VwYXJhdG9yXG4gICAgICAgICAgICBTZXBhcmF0b3JDb21wb25lbnQ9e1NlcGFyYXRvckNvbXBvbmVudH1cbiAgICAgICAgICAgIExlYWRpbmdTZXBhcmF0b3JDb21wb25lbnQ9e1xuICAgICAgICAgICAgICBpbmZvSW5kZXggPT09IDAgPyB0aGlzLnByb3BzLlNlY3Rpb25TZXBhcmF0b3JDb21wb25lbnQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxLZXk9e2luZm8ua2V5fVxuICAgICAgICAgICAgaW5kZXg9e2luZm9JbmRleH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICBsZWFkaW5nSXRlbT17aW5mby5sZWFkaW5nSXRlbX1cbiAgICAgICAgICAgIGxlYWRpbmdTZWN0aW9uPXtpbmZvLmxlYWRpbmdTZWN0aW9ufVxuICAgICAgICAgICAgcHJldkNlbGxLZXk9eyh0aGlzLl9zdWJFeHRyYWN0b3IoaW5kZXggLSAxKSB8fCB7fSkua2V5fVxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgdG8gcHJvdmlkZSB1cGRhdGVIaWdobGlnaHQgZm9yIHRoaXMgaXRlbVxuICAgICAgICAgICAgc2V0U2VsZkhpZ2hsaWdodENhbGxiYWNrPXt0aGlzLl9zZXRVcGRhdGVIaWdobGlnaHRGb3J9XG4gICAgICAgICAgICBzZXRTZWxmVXBkYXRlUHJvcHNDYWxsYmFjaz17dGhpcy5fc2V0VXBkYXRlUHJvcHNGb3J9XG4gICAgICAgICAgICAvLyBQcm92aWRlIGNoaWxkIGFiaWxpdHkgdG8gc2V0IGhpZ2hsaWdodC91cGRhdGVQcm9wcyBmb3IgcHJldmlvdXMgaXRlbSB1c2luZyBwcmV2Q2VsbEtleVxuICAgICAgICAgICAgdXBkYXRlSGlnaGxpZ2h0Rm9yPXt0aGlzLl91cGRhdGVIaWdobGlnaHRGb3J9XG4gICAgICAgICAgICB1cGRhdGVQcm9wc0Zvcj17dGhpcy5fdXBkYXRlUHJvcHNGb3J9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXtyZW5kZXJJdGVtfVxuICAgICAgICAgICAgc2VjdGlvbj17aW5mby5zZWN0aW9ufVxuICAgICAgICAgICAgdHJhaWxpbmdJdGVtPXtpbmZvLnRyYWlsaW5nSXRlbX1cbiAgICAgICAgICAgIHRyYWlsaW5nU2VjdGlvbj17aW5mby50cmFpbGluZ1NlY3Rpb259XG4gICAgICAgICAgICBpbnZlcnRlZD17ISF0aGlzLnByb3BzLmludmVydGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICBfdXBkYXRlUHJvcHNGb3IgPSAoY2VsbEtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgY29uc3QgdXBkYXRlUHJvcHMgPSB0aGlzLl91cGRhdGVQcm9wc01hcFtjZWxsS2V5XTtcbiAgICBpZiAodXBkYXRlUHJvcHMgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlUHJvcHModmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICBfdXBkYXRlSGlnaGxpZ2h0Rm9yID0gKGNlbGxLZXk6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB1cGRhdGVIaWdobGlnaHQgPSB0aGlzLl91cGRhdGVIaWdobGlnaHRNYXBbY2VsbEtleV07XG4gICAgaWYgKHVwZGF0ZUhpZ2hsaWdodCAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVIaWdobGlnaHQodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICBfc2V0VXBkYXRlSGlnaGxpZ2h0Rm9yID0gKFxuICAgIGNlbGxLZXk6IHN0cmluZyxcbiAgICB1cGRhdGVIaWdobGlnaHRGbjogPyhib29sZWFuKSA9PiB2b2lkLFxuICApID0+IHtcbiAgICBpZiAodXBkYXRlSGlnaGxpZ2h0Rm4gIT0gbnVsbCkge1xuICAgICAgdGhpcy5fdXBkYXRlSGlnaGxpZ2h0TWFwW2NlbGxLZXldID0gdXBkYXRlSGlnaGxpZ2h0Rm47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZUhpZ2hsaWdodEZvcltjZWxsS2V5XTtcbiAgICB9XG4gIH07XG5cbiAgX3NldFVwZGF0ZVByb3BzRm9yID0gKGNlbGxLZXk6IHN0cmluZywgdXBkYXRlUHJvcHNGbjogPyhib29sZWFuKSA9PiB2b2lkKSA9PiB7XG4gICAgaWYgKHVwZGF0ZVByb3BzRm4gIT0gbnVsbCkge1xuICAgICAgdGhpcy5fdXBkYXRlUHJvcHNNYXBbY2VsbEtleV0gPSB1cGRhdGVQcm9wc0ZuO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5fdXBkYXRlUHJvcHNNYXBbY2VsbEtleV07XG4gICAgfVxuICB9O1xuXG4gIF9nZXRTZXBhcmF0b3JDb21wb25lbnQoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbmZvPzogP09iamVjdCxcbiAgICBsaXN0SXRlbUNvdW50OiBudW1iZXIsXG4gICk6ID9SZWFjdC5Db21wb25lbnRUeXBlPGFueT4ge1xuICAgIGluZm8gPSBpbmZvIHx8IHRoaXMuX3N1YkV4dHJhY3RvcihpbmRleCk7XG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgSXRlbVNlcGFyYXRvckNvbXBvbmVudCA9XG4gICAgICBpbmZvLnNlY3Rpb24uSXRlbVNlcGFyYXRvckNvbXBvbmVudCB8fCB0aGlzLnByb3BzLkl0ZW1TZXBhcmF0b3JDb21wb25lbnQ7XG4gICAgY29uc3Qge1NlY3Rpb25TZXBhcmF0b3JDb21wb25lbnR9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpc0xhc3RJdGVtSW5MaXN0ID0gaW5kZXggPT09IGxpc3RJdGVtQ291bnQgLSAxO1xuICAgIGNvbnN0IGlzTGFzdEl0ZW1JblNlY3Rpb24gPVxuICAgICAgaW5mby5pbmRleCA9PT0gdGhpcy5wcm9wcy5nZXRJdGVtQ291bnQoaW5mby5zZWN0aW9uLmRhdGEpIC0gMTtcbiAgICBpZiAoU2VjdGlvblNlcGFyYXRvckNvbXBvbmVudCAmJiBpc0xhc3RJdGVtSW5TZWN0aW9uKSB7XG4gICAgICByZXR1cm4gU2VjdGlvblNlcGFyYXRvckNvbXBvbmVudDtcbiAgICB9XG4gICAgaWYgKEl0ZW1TZXBhcmF0b3JDb21wb25lbnQgJiYgIWlzTGFzdEl0ZW1JblNlY3Rpb24gJiYgIWlzTGFzdEl0ZW1Jbkxpc3QpIHtcbiAgICAgIHJldHVybiBJdGVtU2VwYXJhdG9yQ29tcG9uZW50O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF91cGRhdGVIaWdobGlnaHRNYXA6IHtbc3RyaW5nXTogKGJvb2xlYW4pID0+IHZvaWR9ID0ge307XG4gIF91cGRhdGVQcm9wc01hcDoge1tzdHJpbmddOiB2b2lkIHwgKGJvb2xlYW4gPT4gdm9pZCl9ID0ge307XG4gIF9saXN0UmVmOiA/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlydHVhbGl6ZWRMaXN0PjtcbiAgX2NhcHR1cmVSZWYgPSAocmVmOiBudWxsIHwgUmVhY3QkRWxlbWVudFJlZjxDbGFzczxWaXJ0dWFsaXplZExpc3Q+PikgPT4ge1xuICAgIHRoaXMuX2xpc3RSZWYgPSByZWY7XG4gIH07XG59XG5cbnR5cGUgSXRlbVdpdGhTZXBhcmF0b3JDb21tb25Qcm9wcyA9ICRSZWFkT25seTx7fFxuICBsZWFkaW5nSXRlbTogP0l0ZW0sXG4gIGxlYWRpbmdTZWN0aW9uOiA/T2JqZWN0LFxuICBzZWN0aW9uOiBPYmplY3QsXG4gIHRyYWlsaW5nSXRlbTogP0l0ZW0sXG4gIHRyYWlsaW5nU2VjdGlvbjogP09iamVjdCxcbnx9PjtcblxudHlwZSBJdGVtV2l0aFNlcGFyYXRvclByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLkl0ZW1XaXRoU2VwYXJhdG9yQ29tbW9uUHJvcHMsXG4gIExlYWRpbmdTZXBhcmF0b3JDb21wb25lbnQ6ID9SZWFjdC5Db21wb25lbnRUeXBlPGFueT4sXG4gIFNlcGFyYXRvckNvbXBvbmVudDogP1JlYWN0LkNvbXBvbmVudFR5cGU8YW55PixcbiAgY2VsbEtleTogc3RyaW5nLFxuICBpbmRleDogbnVtYmVyLFxuICBpdGVtOiBJdGVtLFxuICBzZXRTZWxmSGlnaGxpZ2h0Q2FsbGJhY2s6IChcbiAgICBjZWxsS2V5OiBzdHJpbmcsXG4gICAgdXBkYXRlRm46ID8oYm9vbGVhbikgPT4gdm9pZCxcbiAgKSA9PiB2b2lkLFxuICBzZXRTZWxmVXBkYXRlUHJvcHNDYWxsYmFjazogKFxuICAgIGNlbGxLZXk6IHN0cmluZyxcbiAgICB1cGRhdGVGbjogPyhib29sZWFuKSA9PiB2b2lkLFxuICApID0+IHZvaWQsXG4gIHByZXZDZWxsS2V5PzogP3N0cmluZyxcbiAgdXBkYXRlSGlnaGxpZ2h0Rm9yOiAocHJldkNlbGxLZXk6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pID0+IHZvaWQsXG4gIHVwZGF0ZVByb3BzRm9yOiAocHJldkNlbGxLZXk6IHN0cmluZywgdmFsdWU6IE9iamVjdCkgPT4gdm9pZCxcbiAgcmVuZGVySXRlbTogRnVuY3Rpb24sXG4gIGludmVydGVkOiBib29sZWFuLFxufH0+O1xuXG5mdW5jdGlvbiBJdGVtV2l0aFNlcGFyYXRvcihwcm9wczogSXRlbVdpdGhTZXBhcmF0b3JQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB7XG4gICAgTGVhZGluZ1NlcGFyYXRvckNvbXBvbmVudCxcbiAgICAvLyB0aGlzIGlzIHRoZSB0cmFpbGluZyBzZXBhcmF0b3IgYW5kIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZW1cbiAgICBTZXBhcmF0b3JDb21wb25lbnQsXG4gICAgY2VsbEtleSxcbiAgICBwcmV2Q2VsbEtleSxcbiAgICBzZXRTZWxmSGlnaGxpZ2h0Q2FsbGJhY2ssXG4gICAgdXBkYXRlSGlnaGxpZ2h0Rm9yLFxuICAgIHNldFNlbGZVcGRhdGVQcm9wc0NhbGxiYWNrLFxuICAgIHVwZGF0ZVByb3BzRm9yLFxuICAgIGl0ZW0sXG4gICAgaW5kZXgsXG4gICAgc2VjdGlvbixcbiAgICBpbnZlcnRlZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtsZWFkaW5nU2VwYXJhdG9ySGlnbGlnaHRlZCwgc2V0TGVhZGluZ1NlcGFyYXRvckhpZ2hsaWdodGVkXSA9XG4gICAgUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IFtzZXBhcmF0b3JIaWdobGlnaHRlZCwgc2V0U2VwYXJhdG9ySGlnaGxpZ2h0ZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IFtsZWFkaW5nU2VwYXJhdG9yUHJvcHMsIHNldExlYWRpbmdTZXBhcmF0b3JQcm9wc10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgbGVhZGluZ0l0ZW06IHByb3BzLmxlYWRpbmdJdGVtLFxuICAgIGxlYWRpbmdTZWN0aW9uOiBwcm9wcy5sZWFkaW5nU2VjdGlvbixcbiAgICBzZWN0aW9uOiBwcm9wcy5zZWN0aW9uLFxuICAgIHRyYWlsaW5nSXRlbTogcHJvcHMuaXRlbSxcbiAgICB0cmFpbGluZ1NlY3Rpb246IHByb3BzLnRyYWlsaW5nU2VjdGlvbixcbiAgfSk7XG4gIGNvbnN0IFtzZXBhcmF0b3JQcm9wcywgc2V0U2VwYXJhdG9yUHJvcHNdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGxlYWRpbmdJdGVtOiBwcm9wcy5pdGVtLFxuICAgIGxlYWRpbmdTZWN0aW9uOiBwcm9wcy5sZWFkaW5nU2VjdGlvbixcbiAgICBzZWN0aW9uOiBwcm9wcy5zZWN0aW9uLFxuICAgIHRyYWlsaW5nSXRlbTogcHJvcHMudHJhaWxpbmdJdGVtLFxuICAgIHRyYWlsaW5nU2VjdGlvbjogcHJvcHMudHJhaWxpbmdTZWN0aW9uLFxuICB9KTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlbGZIaWdobGlnaHRDYWxsYmFjayhjZWxsS2V5LCBzZXRTZXBhcmF0b3JIaWdobGlnaHRlZCk7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICBzZXRTZWxmVXBkYXRlUHJvcHNDYWxsYmFjayhjZWxsS2V5LCBzZXRTZXBhcmF0b3JQcm9wcyk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2V0U2VsZlVwZGF0ZVByb3BzQ2FsbGJhY2soY2VsbEtleSwgbnVsbCk7XG4gICAgICBzZXRTZWxmSGlnaGxpZ2h0Q2FsbGJhY2soY2VsbEtleSwgbnVsbCk7XG4gICAgfTtcbiAgfSwgW1xuICAgIGNlbGxLZXksXG4gICAgc2V0U2VsZkhpZ2hsaWdodENhbGxiYWNrLFxuICAgIHNldFNlcGFyYXRvclByb3BzLFxuICAgIHNldFNlbGZVcGRhdGVQcm9wc0NhbGxiYWNrLFxuICBdKTtcblxuICBjb25zdCBzZXBhcmF0b3JzID0ge1xuICAgIGhpZ2hsaWdodDogKCkgPT4ge1xuICAgICAgc2V0TGVhZGluZ1NlcGFyYXRvckhpZ2hsaWdodGVkKHRydWUpO1xuICAgICAgc2V0U2VwYXJhdG9ySGlnaGxpZ2h0ZWQodHJ1ZSk7XG4gICAgICBpZiAocHJldkNlbGxLZXkgIT0gbnVsbCkge1xuICAgICAgICB1cGRhdGVIaWdobGlnaHRGb3IocHJldkNlbGxLZXksIHRydWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdW5oaWdobGlnaHQ6ICgpID0+IHtcbiAgICAgIHNldExlYWRpbmdTZXBhcmF0b3JIaWdobGlnaHRlZChmYWxzZSk7XG4gICAgICBzZXRTZXBhcmF0b3JIaWdobGlnaHRlZChmYWxzZSk7XG4gICAgICBpZiAocHJldkNlbGxLZXkgIT0gbnVsbCkge1xuICAgICAgICB1cGRhdGVIaWdobGlnaHRGb3IocHJldkNlbGxLZXksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVByb3BzOiAoXG4gICAgICBzZWxlY3Q6ICdsZWFkaW5nJyB8ICd0cmFpbGluZycsXG4gICAgICBuZXdQcm9wczogUGFydGlhbDxJdGVtV2l0aFNlcGFyYXRvckNvbW1vblByb3BzPixcbiAgICApID0+IHtcbiAgICAgIGlmIChzZWxlY3QgPT09ICdsZWFkaW5nJykge1xuICAgICAgICBpZiAoTGVhZGluZ1NlcGFyYXRvckNvbXBvbmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgc2V0TGVhZGluZ1NlcGFyYXRvclByb3BzKHsuLi5sZWFkaW5nU2VwYXJhdG9yUHJvcHMsIC4uLm5ld1Byb3BzfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldkNlbGxLZXkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcHJldmlvdXMgaXRlbSdzIHNlcGFyYXRvclxuICAgICAgICAgIHVwZGF0ZVByb3BzRm9yKHByZXZDZWxsS2V5LCB7Li4ubGVhZGluZ1NlcGFyYXRvclByb3BzLCAuLi5uZXdQcm9wc30pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdCA9PT0gJ3RyYWlsaW5nJyAmJiBTZXBhcmF0b3JDb21wb25lbnQgIT0gbnVsbCkge1xuICAgICAgICBzZXRTZXBhcmF0b3JQcm9wcyh7Li4uc2VwYXJhdG9yUHJvcHMsIC4uLm5ld1Byb3BzfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbiAgY29uc3QgZWxlbWVudCA9IHByb3BzLnJlbmRlckl0ZW0oe1xuICAgIGl0ZW0sXG4gICAgaW5kZXgsXG4gICAgc2VjdGlvbixcbiAgICBzZXBhcmF0b3JzLFxuICB9KTtcbiAgY29uc3QgbGVhZGluZ1NlcGFyYXRvciA9IExlYWRpbmdTZXBhcmF0b3JDb21wb25lbnQgIT0gbnVsbCAmJiAoXG4gICAgPExlYWRpbmdTZXBhcmF0b3JDb21wb25lbnRcbiAgICAgIGhpZ2hsaWdodGVkPXtsZWFkaW5nU2VwYXJhdG9ySGlnbGlnaHRlZH1cbiAgICAgIHsuLi5sZWFkaW5nU2VwYXJhdG9yUHJvcHN9XG4gICAgLz5cbiAgKTtcbiAgY29uc3Qgc2VwYXJhdG9yID0gU2VwYXJhdG9yQ29tcG9uZW50ICE9IG51bGwgJiYgKFxuICAgIDxTZXBhcmF0b3JDb21wb25lbnRcbiAgICAgIGhpZ2hsaWdodGVkPXtzZXBhcmF0b3JIaWdobGlnaHRlZH1cbiAgICAgIHsuLi5zZXBhcmF0b3JQcm9wc31cbiAgICAvPlxuICApO1xuICByZXR1cm4gbGVhZGluZ1NlcGFyYXRvciB8fCBzZXBhcmF0b3IgPyAoXG4gICAgPFZpZXc+XG4gICAgICB7aW52ZXJ0ZWQgPT09IGZhbHNlID8gbGVhZGluZ1NlcGFyYXRvciA6IHNlcGFyYXRvcn1cbiAgICAgIHtlbGVtZW50fVxuICAgICAge2ludmVydGVkID09PSBmYWxzZSA/IHNlcGFyYXRvciA6IGxlYWRpbmdTZXBhcmF0b3J9XG4gICAgPC9WaWV3PlxuICApIDogKFxuICAgIGVsZW1lbnRcbiAgKTtcbn1cblxuLyogJEZsb3dGaXhNZVtjbGFzcy1vYmplY3Qtc3VidHlwaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXNcbiAqIHBhcmFtZXRlcnMgKi9cbi8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbm1vZHVsZS5leHBvcnRzID0gKFZpcnR1YWxpemVkU2VjdGlvbkxpc3Q6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFxuICBSZWFjdC5FbGVtZW50Q29uZmlnPHR5cGVvZiBWaXJ0dWFsaXplZFNlY3Rpb25MaXN0PixcbiAgJFJlYWRPbmx5PHtcbiAgICBnZXRMaXN0UmVmOiAoKSA9PiA/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlydHVhbGl6ZWRMaXN0PixcbiAgICBzY3JvbGxUb0xvY2F0aW9uOiAocGFyYW1zOiBTY3JvbGxUb0xvY2F0aW9uUGFyYW1zVHlwZSkgPT4gdm9pZCxcbiAgICAuLi5cbiAgfT4sXG4+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7QW5pbWF0ZWRDb21wb25lbnRUeXBlfSBmcm9tICcuLi9jcmVhdGVBbmltYXRlZENvbXBvbmVudCc7XG5cbmltcG9ydCBJbWFnZSBmcm9tICcuLi8uLi9JbWFnZS9JbWFnZSc7XG5pbXBvcnQgY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQgZnJvbSAnLi4vY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCAoY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQoXG4gIChJbWFnZTogJEZsb3dGaXhNZSksXG4pOiBBbmltYXRlZENvbXBvbmVudFR5cGU8XG4gIFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIEltYWdlPixcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgSW1hZ2U+LFxuPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge19fX19WaWV3U3R5bGVfSW50ZXJuYWx9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldFR5cGVzJztcbmltcG9ydCB0eXBlIHtBbmltYXRlZENvbXBvbmVudFR5cGV9IGZyb20gJy4uL2NyZWF0ZUFuaW1hdGVkQ29tcG9uZW50JztcblxuaW1wb3J0IFJlZnJlc2hDb250cm9sIGZyb20gJy4uLy4uL0NvbXBvbmVudHMvUmVmcmVzaENvbnRyb2wvUmVmcmVzaENvbnRyb2wnO1xuaW1wb3J0IFNjcm9sbFZpZXcgZnJvbSAnLi4vLi4vQ29tcG9uZW50cy9TY3JvbGxWaWV3L1Njcm9sbFZpZXcnO1xuaW1wb3J0IGZsYXR0ZW5TdHlsZSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L2ZsYXR0ZW5TdHlsZSc7XG5pbXBvcnQgc3BsaXRMYXlvdXRQcm9wcyBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L3NwbGl0TGF5b3V0UHJvcHMnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IHVzZU1lcmdlUmVmcyBmcm9tICcuLi8uLi9VdGlsaXRpZXMvdXNlTWVyZ2VSZWZzJztcbmltcG9ydCBjcmVhdGVBbmltYXRlZENvbXBvbmVudCBmcm9tICcuLi9jcmVhdGVBbmltYXRlZENvbXBvbmVudCc7XG5pbXBvcnQgdXNlQW5pbWF0ZWRQcm9wcyBmcm9tICcuLi91c2VBbmltYXRlZFByb3BzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0gUmVhY3QuRWxlbWVudENvbmZpZzx0eXBlb2YgU2Nyb2xsVmlldz47XG50eXBlIEluc3RhbmNlID0gUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgU2Nyb2xsVmlldz47XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2NvbW1pdC9iOGM4NTYyXG4gKi9cbmNvbnN0IEFuaW1hdGVkU2Nyb2xsVmlldzogQW5pbWF0ZWRDb21wb25lbnRUeXBlPFByb3BzLCBJbnN0YW5jZT4gPVxuICBSZWFjdC5mb3J3YXJkUmVmKFxuICAgIGZ1bmN0aW9uIEFuaW1hdGVkU2Nyb2xsVmlld1dpdGhPcldpdGhvdXRJbnZlcnRlZFJlZnJlc2hDb250cm9sKFxuICAgICAgcHJvcHMsXG4gICAgICBmb3J3YXJkZWRSZWYsXG4gICAgKSB7XG4gICAgICAvLyAoQW5kcm9pZCBvbmx5KSBXaGVuIGEgU2Nyb2xsVmlldyBoYXMgYSBSZWZyZXNoQ29udHJvbCBhbmRcbiAgICAgIC8vIGFueSBgc3R5bGVgIHByb3BlcnR5IHNldCB3aXRoIGFuIEFuaW1hdGVkLlZhbHVlLCB0aGUgQ1NTXG4gICAgICAvLyBnZXRzIGluY29ycmVjdGx5IGFwcGxpZWQgdHdpY2UuIFRoaXMgaXMgYmVjYXVzZSBTY3JvbGxWaWV3XG4gICAgICAvLyBzd2FwcyB0aGUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBvZiBpdHNlbGYgYW5kIHRoZVxuICAgICAgLy8gUmVmcmVzaENvbnRyb2wgY29tcG9uZW50IChzZWUgU2Nyb2xsVmlldy5qcyBmb3IgbW9yZSBkZXRhaWxzKS5cbiAgICAgIGlmIChcbiAgICAgICAgUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJyAmJlxuICAgICAgICBwcm9wcy5yZWZyZXNoQ29udHJvbCAhPSBudWxsICYmXG4gICAgICAgIHByb3BzLnN0eWxlICE9IG51bGxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxBbmltYXRlZFNjcm9sbFZpZXdXaXRoSW52ZXJ0ZWRSZWZyZXNoQ29udHJvbFxuICAgICAgICAgICAgc2Nyb2xsRXZlbnRUaHJvdHRsZT17MC4wMDAxfVxuICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgcmVmPXtmb3J3YXJkZWRSZWZ9XG4gICAgICAgICAgICByZWZyZXNoQ29udHJvbD17cHJvcHMucmVmcmVzaENvbnRyb2x9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEFuaW1hdGVkU2Nyb2xsVmlld1dpdGhvdXRJbnZlcnRlZFJlZnJlc2hDb250cm9sXG4gICAgICAgICAgICBzY3JvbGxFdmVudFRocm90dGxlPXswLjAwMDF9XG4gICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICByZWY9e2ZvcndhcmRlZFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbmNvbnN0IEFuaW1hdGVkU2Nyb2xsVmlld1dpdGhJbnZlcnRlZFJlZnJlc2hDb250cm9sID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgZnVuY3Rpb24gQW5pbWF0ZWRTY3JvbGxWaWV3V2l0aEludmVydGVkUmVmcmVzaENvbnRyb2woXG4gICAgcHJvcHM6IHtcbiAgICAgIC4uLlJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFNjcm9sbFZpZXc+LFxuICAgICAgLy8gJEZsb3dGaXhNZVt1bmNsZWFyLXR5cGVdIFNhbWUgRmxvdyB0eXBlIGFzIGByZWZyZXNoQ29udHJvbGAgaW4gU2Nyb2xsVmlld1xuICAgICAgcmVmcmVzaENvbnRyb2w6IFJlYWN0LkVsZW1lbnQ8YW55PixcbiAgICB9LFxuICAgIGZvcndhcmRlZFJlZjpcbiAgICAgIHwge2N1cnJlbnQ6IEluc3RhbmNlIHwgbnVsbCwgLi4ufVxuICAgICAgfCAoKEluc3RhbmNlIHwgbnVsbCkgPT4gbWl4ZWQpLFxuICApIHtcbiAgICAvLyBTcGxpdCBgcHJvcHNgIGludG8gdGhlIGFuaW1hdGUtYWJsZSBwcm9wcyBmb3IgdGhlIHBhcmVudCAoUmVmcmVzaENvbnRyb2wpXG4gICAgLy8gYW5kIGNoaWxkIChTY3JvbGxWaWV3KS5cbiAgICBjb25zdCB7aW50ZXJtZWRpYXRlUHJvcHNGb3JSZWZyZXNoQ29udHJvbCwgaW50ZXJtZWRpYXRlUHJvcHNGb3JTY3JvbGxWaWV3fSA9XG4gICAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVt1bmRlcmNvbnN0cmFpbmVkLWltcGxpY2l0LWluc3RhbnRpYXRpb25dXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgIGNvbnN0IHtvdXRlciwgaW5uZXJ9ID0gc3BsaXRMYXlvdXRQcm9wcyhmbGF0dGVuU3R5bGUocHJvcHMuc3R5bGUpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbnRlcm1lZGlhdGVQcm9wc0ZvclJlZnJlc2hDb250cm9sOiB7c3R5bGU6IG91dGVyfSxcbiAgICAgICAgICBpbnRlcm1lZGlhdGVQcm9wc0ZvclNjcm9sbFZpZXc6IHsuLi5wcm9wcywgc3R5bGU6IGlubmVyfSxcbiAgICAgICAgfTtcbiAgICAgIH0sIFtwcm9wc10pO1xuXG4gICAgLy8gSGFuZGxlIGFuaW1hdGVkIHByb3BzIG9uIGByZWZyZXNoQ29udHJvbGAuXG4gICAgY29uc3QgW3JlZnJlc2hDb250cm9sQW5pbWF0ZWRQcm9wcywgcmVmcmVzaENvbnRyb2xSZWZdID0gdXNlQW5pbWF0ZWRQcm9wczxcbiAgICAgIHtzdHlsZTogP19fX19WaWV3U3R5bGVfSW50ZXJuYWx9LFxuICAgICAgJEZsb3dGaXhNZSxcbiAgICA+KGludGVybWVkaWF0ZVByb3BzRm9yUmVmcmVzaENvbnRyb2wpO1xuICAgIC8vIE5PVEU6IEFzc3VtZXMgdGhhdCByZWZyZXNoQ29udHJvbC5yZWZgIGFuZCBgcmVmcmVzaENvbnRyb2wuc3R5bGVgIGNhbiBiZVxuICAgIC8vIHNhZmVseSBjbG9iYmVyZWQuXG4gICAgY29uc3QgcmVmcmVzaENvbnRyb2w6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIFJlZnJlc2hDb250cm9sPiA9XG4gICAgICBSZWFjdC5jbG9uZUVsZW1lbnQocHJvcHMucmVmcmVzaENvbnRyb2wsIHtcbiAgICAgICAgLi4ucmVmcmVzaENvbnRyb2xBbmltYXRlZFByb3BzLFxuICAgICAgICByZWY6IHJlZnJlc2hDb250cm9sUmVmLFxuICAgICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgYW5pbWF0ZWQgcHJvcHMgb24gYE5hdGl2ZURpcmVjdGlvbmFsU2Nyb2xsVmlld2AuXG4gICAgY29uc3QgW3Njcm9sbFZpZXdBbmltYXRlZFByb3BzLCBzY3JvbGxWaWV3UmVmXSA9IHVzZUFuaW1hdGVkUHJvcHM8XG4gICAgICBQcm9wcyxcbiAgICAgIEluc3RhbmNlLFxuICAgID4oaW50ZXJtZWRpYXRlUHJvcHNGb3JTY3JvbGxWaWV3KTtcbiAgICBjb25zdCByZWYgPSB1c2VNZXJnZVJlZnM8SW5zdGFuY2U+KHNjcm9sbFZpZXdSZWYsIGZvcndhcmRlZFJlZik7XG5cbiAgICByZXR1cm4gKFxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBJbnZlc3RpZ2F0ZSB1c2VBbmltYXRlZFByb3BzIHJldHVybiB2YWx1ZVxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgey4uLnNjcm9sbFZpZXdBbmltYXRlZFByb3BzfVxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgcmVmcmVzaENvbnRyb2w9e3JlZnJlc2hDb250cm9sfVxuICAgICAgICAvLyBCZWNhdXNlIGByZWZyZXNoQ29udHJvbGAgaXMgYSBjbG9uZSBvZiBgcHJvcHMucmVmcmVzaENvbnRyb2xgIHdpdGhcbiAgICAgICAgLy8gYHJlZnJlc2hDb250cm9sQW5pbWF0ZWRQcm9wc2AgYWRkZWQsIHdlIG5lZWQgdG8gcGFzcyBTY3JvbGxWaWV3LmpzXG4gICAgICAgIC8vIHRoZSBjb21iaW5lZCBzdHlsZXMgc2luY2UgaXQgYWxzbyBzcGxpdHMgdGhlIG91dGVyL2lubmVyIHN0eWxlcyBmb3JcbiAgICAgICAgLy8gaXRzIHBhcmVudC9jaGlsZCwgcmVzcGVjdGl2ZWx5LiBXaXRob3V0IHRoaXMsIHRoZSByZWZyZXNoQ29udHJvbFxuICAgICAgICAvLyBzdHlsZXMgd291bGQgYmUgaWdub3JlZC5cbiAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShcbiAgICAgICAgICBzY3JvbGxWaWV3QW5pbWF0ZWRQcm9wcy5zdHlsZSxcbiAgICAgICAgICByZWZyZXNoQ29udHJvbEFuaW1hdGVkUHJvcHMuc3R5bGUsXG4gICAgICAgICl9XG4gICAgICAvPlxuICAgICk7XG4gIH0sXG4pO1xuXG5jb25zdCBBbmltYXRlZFNjcm9sbFZpZXdXaXRob3V0SW52ZXJ0ZWRSZWZyZXNoQ29udHJvbCA9XG4gIGNyZWF0ZUFuaW1hdGVkQ29tcG9uZW50KFNjcm9sbFZpZXcpO1xuXG5leHBvcnQgZGVmYXVsdCBBbmltYXRlZFNjcm9sbFZpZXc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuXG5pbXBvcnQgQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dE5hdGl2ZUNvbXBvbmVudCwge1xuICBDb21tYW5kcyBhcyBBbmRyb2lkU3dpcGVSZWZyZXNoTGF5b3V0Q29tbWFuZHMsXG59IGZyb20gJy4vQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dE5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgUHVsbFRvUmVmcmVzaFZpZXdOYXRpdmVDb21wb25lbnQsIHtcbiAgQ29tbWFuZHMgYXMgUHVsbFRvUmVmcmVzaENvbW1hbmRzLFxufSBmcm9tICcuL1B1bGxUb1JlZnJlc2hWaWV3TmF0aXZlQ29tcG9uZW50JztcblxuY29uc3QgUGxhdGZvcm0gPSByZXF1aXJlKCcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudHlwZSBJT1NQcm9wcyA9ICRSZWFkT25seTx7fFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSByZWZyZXNoIGluZGljYXRvci5cbiAgICovXG4gIHRpbnRDb2xvcj86ID9Db2xvclZhbHVlLFxuICAvKipcbiAgICogVGl0bGUgY29sb3IuXG4gICAqL1xuICB0aXRsZUNvbG9yPzogP0NvbG9yVmFsdWUsXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgZGlzcGxheWVkIHVuZGVyIHRoZSByZWZyZXNoIGluZGljYXRvci5cbiAgICovXG4gIHRpdGxlPzogP3N0cmluZyxcbnx9PjtcblxudHlwZSBBbmRyb2lkUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHB1bGwgdG8gcmVmcmVzaCBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQuXG4gICAqL1xuICBlbmFibGVkPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBUaGUgY29sb3JzIChhdCBsZWFzdCBvbmUpIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRyYXcgdGhlIHJlZnJlc2ggaW5kaWNhdG9yLlxuICAgKi9cbiAgY29sb3JzPzogPyRSZWFkT25seUFycmF5PENvbG9yVmFsdWU+LFxuICAvKipcbiAgICogVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlZnJlc2ggaW5kaWNhdG9yLlxuICAgKi9cbiAgcHJvZ3Jlc3NCYWNrZ3JvdW5kQ29sb3I/OiA/Q29sb3JWYWx1ZSxcbiAgLyoqXG4gICAqIFNpemUgb2YgdGhlIHJlZnJlc2ggaW5kaWNhdG9yLlxuICAgKi9cbiAgc2l6ZT86ID8oJ2RlZmF1bHQnIHwgJ2xhcmdlJyksXG58fT47XG5cbmV4cG9ydCB0eXBlIFJlZnJlc2hDb250cm9sUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLi4uVmlld1Byb3BzLFxuICAuLi5JT1NQcm9wcyxcbiAgLi4uQW5kcm9pZFByb3BzLFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdmlldyBzdGFydHMgcmVmcmVzaGluZy5cbiAgICovXG4gIG9uUmVmcmVzaD86ID8oKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlldyBzaG91bGQgYmUgaW5kaWNhdGluZyBhbiBhY3RpdmUgcmVmcmVzaC5cbiAgICovXG4gIHJlZnJlc2hpbmc6IGJvb2xlYW4sXG5cbiAgLyoqXG4gICAqIFByb2dyZXNzIHZpZXcgdG9wIG9mZnNldFxuICAgKi9cbiAgcHJvZ3Jlc3NWaWV3T2Zmc2V0PzogP251bWJlcixcbnx9PjtcblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIGluc2lkZSBhIFNjcm9sbFZpZXcgb3IgTGlzdFZpZXcgdG8gYWRkIHB1bGwgdG8gcmVmcmVzaFxuICogZnVuY3Rpb25hbGl0eS4gV2hlbiB0aGUgU2Nyb2xsVmlldyBpcyBhdCBgc2Nyb2xsWTogMGAsIHN3aXBpbmcgZG93blxuICogdHJpZ2dlcnMgYW4gYG9uUmVmcmVzaGAgZXZlbnQuXG4gKlxuICogIyMjIFVzYWdlIGV4YW1wbGVcbiAqXG4gKiBgYGAganNcbiAqIGNsYXNzIFJlZnJlc2hhYmxlTGlzdCBleHRlbmRzIENvbXBvbmVudCB7XG4gKiAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gKiAgICAgc3VwZXIocHJvcHMpO1xuICogICAgIHRoaXMuc3RhdGUgPSB7XG4gKiAgICAgICByZWZyZXNoaW5nOiBmYWxzZSxcbiAqICAgICB9O1xuICogICB9XG4gKlxuICogICBfb25SZWZyZXNoKCkge1xuICogICAgIHRoaXMuc2V0U3RhdGUoe3JlZnJlc2hpbmc6IHRydWV9KTtcbiAqICAgICBmZXRjaERhdGEoKS50aGVuKCgpID0+IHtcbiAqICAgICAgIHRoaXMuc2V0U3RhdGUoe3JlZnJlc2hpbmc6IGZhbHNlfSk7XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIHJlbmRlcigpIHtcbiAqICAgICByZXR1cm4gKFxuICogICAgICAgPExpc3RWaWV3XG4gKiAgICAgICAgIHJlZnJlc2hDb250cm9sPXtcbiAqICAgICAgICAgICA8UmVmcmVzaENvbnRyb2xcbiAqICAgICAgICAgICAgIHJlZnJlc2hpbmc9e3RoaXMuc3RhdGUucmVmcmVzaGluZ31cbiAqICAgICAgICAgICAgIG9uUmVmcmVzaD17dGhpcy5fb25SZWZyZXNoLmJpbmQodGhpcyl9XG4gKiAgICAgICAgICAgLz5cbiAqICAgICAgICAgfVxuICogICAgICAgICAuLi5cbiAqICAgICAgID5cbiAqICAgICAgIC4uLlxuICogICAgICAgPC9MaXN0Vmlldz5cbiAqICAgICApO1xuICogICB9XG4gKiAgIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogX19Ob3RlOl9fIGByZWZyZXNoaW5nYCBpcyBhIGNvbnRyb2xsZWQgcHJvcCwgdGhpcyBpcyB3aHkgaXQgbmVlZHMgdG8gYmUgc2V0IHRvIHRydWVcbiAqIGluIHRoZSBgb25SZWZyZXNoYCBmdW5jdGlvbiBvdGhlcndpc2UgdGhlIHJlZnJlc2ggaW5kaWNhdG9yIHdpbGwgc3RvcCBpbW1lZGlhdGVseS5cbiAqL1xuY2xhc3MgUmVmcmVzaENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UmVmcmVzaENvbnRyb2xQcm9wcz4ge1xuICBfbmF0aXZlUmVmOiA/UmVhY3QuRWxlbWVudFJlZjxcbiAgICB8IHR5cGVvZiBQdWxsVG9SZWZyZXNoVmlld05hdGl2ZUNvbXBvbmVudFxuICAgIHwgdHlwZW9mIEFuZHJvaWRTd2lwZVJlZnJlc2hMYXlvdXROYXRpdmVDb21wb25lbnQsXG4gID47XG4gIF9sYXN0TmF0aXZlUmVmcmVzaGluZyA9IGZhbHNlO1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuX2xhc3ROYXRpdmVSZWZyZXNoaW5nID0gdGhpcy5wcm9wcy5yZWZyZXNoaW5nO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUmVmcmVzaENvbnRyb2xQcm9wcykge1xuICAgIC8vIFJlZnJlc2hDb250cm9sIGlzIGEgY29udHJvbGxlZCBjb21wb25lbnQgc28gaWYgdGhlIG5hdGl2ZSByZWZyZXNoaW5nXG4gICAgLy8gdmFsdWUgZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBqcyByZWZyZXNoaW5nIHByb3AgdXBkYXRlIGl0IHRvXG4gICAgLy8gdGhlIGpzIHZhbHVlLlxuICAgIGlmICh0aGlzLnByb3BzLnJlZnJlc2hpbmcgIT09IHByZXZQcm9wcy5yZWZyZXNoaW5nKSB7XG4gICAgICB0aGlzLl9sYXN0TmF0aXZlUmVmcmVzaGluZyA9IHRoaXMucHJvcHMucmVmcmVzaGluZztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5wcm9wcy5yZWZyZXNoaW5nICE9PSB0aGlzLl9sYXN0TmF0aXZlUmVmcmVzaGluZyAmJlxuICAgICAgdGhpcy5fbmF0aXZlUmVmXG4gICAgKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgICBBbmRyb2lkU3dpcGVSZWZyZXNoTGF5b3V0Q29tbWFuZHMuc2V0TmF0aXZlUmVmcmVzaGluZyhcbiAgICAgICAgICB0aGlzLl9uYXRpdmVSZWYsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWZyZXNoaW5nLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUHVsbFRvUmVmcmVzaENvbW1hbmRzLnNldE5hdGl2ZVJlZnJlc2hpbmcoXG4gICAgICAgICAgdGhpcy5fbmF0aXZlUmVmLFxuICAgICAgICAgIHRoaXMucHJvcHMucmVmcmVzaGluZyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3ROYXRpdmVSZWZyZXNoaW5nID0gdGhpcy5wcm9wcy5yZWZyZXNoaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgICBjb25zdCB7ZW5hYmxlZCwgY29sb3JzLCBwcm9ncmVzc0JhY2tncm91bmRDb2xvciwgc2l6ZSwgLi4ucHJvcHN9ID1cbiAgICAgICAgdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQdWxsVG9SZWZyZXNoVmlld05hdGl2ZUNvbXBvbmVudFxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICByZWY9e3RoaXMuX3NldE5hdGl2ZVJlZn1cbiAgICAgICAgICBvblJlZnJlc2g9e3RoaXMuX29uUmVmcmVzaH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHt0aW50Q29sb3IsIHRpdGxlQ29sb3IsIHRpdGxlLCAuLi5wcm9wc30gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFuZHJvaWRTd2lwZVJlZnJlc2hMYXlvdXROYXRpdmVDb21wb25lbnRcbiAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgcmVmPXt0aGlzLl9zZXROYXRpdmVSZWZ9XG4gICAgICAgICAgb25SZWZyZXNoPXt0aGlzLl9vblJlZnJlc2h9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIF9vblJlZnJlc2ggPSAoKSA9PiB7XG4gICAgdGhpcy5fbGFzdE5hdGl2ZVJlZnJlc2hpbmcgPSB0cnVlO1xuXG4gICAgLy8gJEZsb3dGaXhNZVt1bnVzZWQtcHJvbWlzZV1cbiAgICB0aGlzLnByb3BzLm9uUmVmcmVzaCAmJiB0aGlzLnByb3BzLm9uUmVmcmVzaCgpO1xuXG4gICAgLy8gVGhlIG5hdGl2ZSBjb21wb25lbnQgd2lsbCBzdGFydCByZWZyZXNoaW5nIHNvIGZvcmNlIGFuIHVwZGF0ZSB0b1xuICAgIC8vIG1ha2Ugc3VyZSBpdCBzdGF5cyBpbiBzeW5jIHdpdGggdGhlIGpzIGNvbXBvbmVudC5cbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH07XG5cbiAgX3NldE5hdGl2ZVJlZiA9IChcbiAgICByZWY6ID9SZWFjdC5FbGVtZW50UmVmPFxuICAgICAgfCB0eXBlb2YgUHVsbFRvUmVmcmVzaFZpZXdOYXRpdmVDb21wb25lbnRcbiAgICAgIHwgdHlwZW9mIEFuZHJvaWRTd2lwZVJlZnJlc2hMYXlvdXROYXRpdmVDb21wb25lbnQsXG4gICAgPixcbiAgKSA9PiB7XG4gICAgdGhpcy5fbmF0aXZlUmVmID0gcmVmO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZnJlc2hDb250cm9sO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dE5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dE5hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL0FuZHJvaWRTd2lwZVJlZnJlc2hMYXlvdXROYXRpdmVDb21wb25lbnQnO1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dE5hdGl2ZUNvbXBvbmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtDb2xvclZhbHVlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtcbiAgRGlyZWN0RXZlbnRIYW5kbGVyLFxuICBGbG9hdCxcbiAgV2l0aERlZmF1bHQsXG59IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UeXBlcy9Db2RlZ2VuVHlwZXMnO1xuXG5pbXBvcnQgY29kZWdlbk5hdGl2ZUNvbW1hbmRzIGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbW1hbmRzJztcbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgTmF0aXZlUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLi4uVmlld1Byb3BzLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwdWxsIHRvIHJlZnJlc2ggZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLlxuICAgKi9cbiAgZW5hYmxlZD86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIHRydWU+LFxuICAvKipcbiAgICogVGhlIGNvbG9ycyAoYXQgbGVhc3Qgb25lKSB0aGF0IHdpbGwgYmUgdXNlZCB0byBkcmF3IHRoZSByZWZyZXNoIGluZGljYXRvci5cbiAgICovXG4gIGNvbG9ycz86ID8kUmVhZE9ubHlBcnJheTxDb2xvclZhbHVlPixcbiAgLyoqXG4gICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZWZyZXNoIGluZGljYXRvci5cbiAgICovXG4gIHByb2dyZXNzQmFja2dyb3VuZENvbG9yPzogP0NvbG9yVmFsdWUsXG4gIC8qKlxuICAgKiBTaXplIG9mIHRoZSByZWZyZXNoIGluZGljYXRvci5cbiAgICovXG4gIHNpemU/OiBXaXRoRGVmYXVsdDwnZGVmYXVsdCcgfCAnbGFyZ2UnLCAnZGVmYXVsdCc+LFxuICAvKipcbiAgICogUHJvZ3Jlc3MgdmlldyB0b3Agb2Zmc2V0XG4gICAqL1xuICBwcm9ncmVzc1ZpZXdPZmZzZXQ/OiBXaXRoRGVmYXVsdDxGbG9hdCwgMD4sXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB2aWV3IHN0YXJ0cyByZWZyZXNoaW5nLlxuICAgKi9cbiAgb25SZWZyZXNoPzogP0RpcmVjdEV2ZW50SGFuZGxlcjxudWxsPixcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlldyBzaG91bGQgYmUgaW5kaWNhdGluZyBhbiBhY3RpdmUgcmVmcmVzaC5cbiAgICovXG4gIHJlZnJlc2hpbmc6IGJvb2xlYW4sXG58fT47XG5cbnR5cGUgTmF0aXZlVHlwZSA9IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+O1xuXG5pbnRlcmZhY2UgTmF0aXZlQ29tbWFuZHMge1xuICArc2V0TmF0aXZlUmVmcmVzaGluZzogKFxuICAgIHZpZXdSZWY6IFJlYWN0LkVsZW1lbnRSZWY8TmF0aXZlVHlwZT4sXG4gICAgdmFsdWU6IGJvb2xlYW4sXG4gICkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENvbW1hbmRzOiBOYXRpdmVDb21tYW5kcyA9IGNvZGVnZW5OYXRpdmVDb21tYW5kczxOYXRpdmVDb21tYW5kcz4oe1xuICBzdXBwb3J0ZWRDb21tYW5kczogWydzZXROYXRpdmVSZWZyZXNoaW5nJ10sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgKGNvZGVnZW5OYXRpdmVDb21wb25lbnQ8TmF0aXZlUHJvcHM+KFxuICAnQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dCcsXG4pOiBOYXRpdmVUeXBlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL1B1bGxUb1JlZnJlc2hWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBQdWxsVG9SZWZyZXNoVmlld05hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL1B1bGxUb1JlZnJlc2hWaWV3TmF0aXZlQ29tcG9uZW50JztcbmV4cG9ydCBkZWZhdWx0IFB1bGxUb1JlZnJlc2hWaWV3TmF0aXZlQ29tcG9uZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge1xuICBEaXJlY3RFdmVudEhhbmRsZXIsXG4gIEZsb2F0LFxuICBXaXRoRGVmYXVsdCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R5cGVzL0NvZGVnZW5UeXBlcyc7XG5cbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tbWFuZHMgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1V0aWxpdGllcy9jb2RlZ2VuTmF0aXZlQ29tbWFuZHMnO1xuaW1wb3J0IGNvZGVnZW5OYXRpdmVDb21wb25lbnQgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1V0aWxpdGllcy9jb2RlZ2VuTmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBOYXRpdmVQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi5WaWV3UHJvcHMsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgcmVmcmVzaCBpbmRpY2F0b3IuXG4gICAqL1xuICB0aW50Q29sb3I/OiA/Q29sb3JWYWx1ZSxcbiAgLyoqXG4gICAqIFRpdGxlIGNvbG9yLlxuICAgKi9cbiAgdGl0bGVDb2xvcj86ID9Db2xvclZhbHVlLFxuICAvKipcbiAgICogVGhlIHRpdGxlIGRpc3BsYXllZCB1bmRlciB0aGUgcmVmcmVzaCBpbmRpY2F0b3IuXG4gICAqL1xuICB0aXRsZT86IFdpdGhEZWZhdWx0PHN0cmluZywgbnVsbD4sXG4gIC8qKlxuICAgKiBQcm9ncmVzcyB2aWV3IHRvcCBvZmZzZXRcbiAgICovXG4gIHByb2dyZXNzVmlld09mZnNldD86IFdpdGhEZWZhdWx0PEZsb2F0LCAwPixcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHZpZXcgc3RhcnRzIHJlZnJlc2hpbmcuXG4gICAqL1xuICBvblJlZnJlc2g/OiA/RGlyZWN0RXZlbnRIYW5kbGVyPG51bGw+LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IHNob3VsZCBiZSBpbmRpY2F0aW5nIGFuIGFjdGl2ZSByZWZyZXNoLlxuICAgKi9cbiAgcmVmcmVzaGluZzogYm9vbGVhbixcbnx9PjtcblxudHlwZSBDb21wb25lbnRUeXBlID0gSG9zdENvbXBvbmVudDxOYXRpdmVQcm9wcz47XG5cbmludGVyZmFjZSBOYXRpdmVDb21tYW5kcyB7XG4gICtzZXROYXRpdmVSZWZyZXNoaW5nOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxDb21wb25lbnRUeXBlPixcbiAgICByZWZyZXNoaW5nOiBib29sZWFuLFxuICApID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBDb21tYW5kczogTmF0aXZlQ29tbWFuZHMgPSBjb2RlZ2VuTmF0aXZlQ29tbWFuZHM8TmF0aXZlQ29tbWFuZHM+KHtcbiAgc3VwcG9ydGVkQ29tbWFuZHM6IFsnc2V0TmF0aXZlUmVmcmVzaGluZyddLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2RlZ2VuTmF0aXZlQ29tcG9uZW50PE5hdGl2ZVByb3BzPignUHVsbFRvUmVmcmVzaFZpZXcnLCB7XG4gIHBhcGVyQ29tcG9uZW50TmFtZTogJ1JDVFJlZnJlc2hDb250cm9sJyxcbiAgZXhjbHVkZWRQbGF0Zm9ybXM6IFsnYW5kcm9pZCddLFxufSk6IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7QW5pbWF0ZWRDb21wb25lbnRUeXBlfSBmcm9tICcuLi9jcmVhdGVBbmltYXRlZENvbXBvbmVudCc7XG5cbmltcG9ydCBTZWN0aW9uTGlzdCBmcm9tICcuLi8uLi9MaXN0cy9TZWN0aW9uTGlzdCc7XG5pbXBvcnQgY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQgZnJvbSAnLi4vY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCAoY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQoU2VjdGlvbkxpc3QpOiBBbmltYXRlZENvbXBvbmVudFR5cGU8XG4gIFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFNlY3Rpb25MaXN0PixcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgU2VjdGlvbkxpc3Q+LFxuPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtTY3JvbGxSZXNwb25kZXJUeXBlfSBmcm9tICcuLi9Db21wb25lbnRzL1Njcm9sbFZpZXcvU2Nyb2xsVmlldyc7XG5pbXBvcnQgdHlwZSB7XG4gIFNjcm9sbFRvTG9jYXRpb25QYXJhbXNUeXBlLFxuICBTZWN0aW9uQmFzZSBhcyBfU2VjdGlvbkJhc2UsXG4gIFZpcnR1YWxpemVkU2VjdGlvbkxpc3RQcm9wcyxcbn0gZnJvbSAnQHJlYWN0LW5hdGl2ZS92aXJ0dWFsaXplZC1saXN0cyc7XG5cbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IHtWaXJ0dWFsaXplZFNlY3Rpb25MaXN0fSBmcm9tICdAcmVhY3QtbmF0aXZlL3ZpcnR1YWxpemVkLWxpc3RzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBJdGVtID0gYW55O1xuXG5leHBvcnQgdHlwZSBTZWN0aW9uQmFzZTxTZWN0aW9uSXRlbVQ+ID0gX1NlY3Rpb25CYXNlPFNlY3Rpb25JdGVtVD47XG5cbnR5cGUgUmVxdWlyZWRQcm9wczxTZWN0aW9uVDogU2VjdGlvbkJhc2U8YW55Pj4gPSB7fFxuICAvKipcbiAgICogVGhlIGFjdHVhbCBkYXRhIHRvIHJlbmRlciwgYWtpbiB0byB0aGUgYGRhdGFgIHByb3AgaW4gW2A8RmxhdExpc3Q+YF0oaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9mbGF0bGlzdCkuXG4gICAqXG4gICAqIEdlbmVyYWwgc2hhcGU6XG4gICAqXG4gICAqICAgICBzZWN0aW9uczogJFJlYWRPbmx5QXJyYXk8e1xuICAgKiAgICAgICBkYXRhOiAkUmVhZE9ubHlBcnJheTxTZWN0aW9uSXRlbT4sXG4gICAqICAgICAgIHJlbmRlckl0ZW0/OiAoe2l0ZW06IFNlY3Rpb25JdGVtLCAuLi59KSA9PiA/UmVhY3QuRWxlbWVudDwqPixcbiAgICogICAgICAgSXRlbVNlcGFyYXRvckNvbXBvbmVudD86ID9SZWFjdENsYXNzPHtoaWdobGlnaHRlZDogYm9vbGVhbiwgLi4ufT4sXG4gICAqICAgICB9PlxuICAgKi9cbiAgc2VjdGlvbnM6ICRSZWFkT25seUFycmF5PFNlY3Rpb25UPixcbnx9O1xuXG50eXBlIE9wdGlvbmFsUHJvcHM8U2VjdGlvblQ6IFNlY3Rpb25CYXNlPGFueT4+ID0ge3xcbiAgLyoqXG4gICAqIERlZmF1bHQgcmVuZGVyZXIgZm9yIGV2ZXJ5IGl0ZW0gaW4gZXZlcnkgc2VjdGlvbi4gQ2FuIGJlIG92ZXItcmlkZGVuIG9uIGEgcGVyLXNlY3Rpb24gYmFzaXMuXG4gICAqL1xuICByZW5kZXJJdGVtPzogKGluZm86IHtcbiAgICBpdGVtOiBJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc2VjdGlvbjogU2VjdGlvblQsXG4gICAgc2VwYXJhdG9yczoge1xuICAgICAgaGlnaGxpZ2h0OiAoKSA9PiB2b2lkLFxuICAgICAgdW5oaWdobGlnaHQ6ICgpID0+IHZvaWQsXG4gICAgICB1cGRhdGVQcm9wczogKHNlbGVjdDogJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJywgbmV3UHJvcHM6IE9iamVjdCkgPT4gdm9pZCxcbiAgICAgIC4uLlxuICAgIH0sXG4gICAgLi4uXG4gIH0pID0+IG51bGwgfCBSZWFjdC5FbGVtZW50PGFueT4sXG4gIC8qKlxuICAgKiBBIG1hcmtlciBwcm9wZXJ0eSBmb3IgdGVsbGluZyB0aGUgbGlzdCB0byByZS1yZW5kZXIgKHNpbmNlIGl0IGltcGxlbWVudHMgYFB1cmVDb21wb25lbnRgKS4gSWZcbiAgICogYW55IG9mIHlvdXIgYHJlbmRlckl0ZW1gLCBIZWFkZXIsIEZvb3RlciwgZXRjLiBmdW5jdGlvbnMgZGVwZW5kIG9uIGFueXRoaW5nIG91dHNpZGUgb2YgdGhlXG4gICAqIGBkYXRhYCBwcm9wLCBzdGljayBpdCBoZXJlIGFuZCB0cmVhdCBpdCBpbW11dGFibHkuXG4gICAqL1xuICBleHRyYURhdGE/OiBhbnksXG4gIC8qKlxuICAgKiBIb3cgbWFueSBpdGVtcyB0byByZW5kZXIgaW4gdGhlIGluaXRpYWwgYmF0Y2guIFRoaXMgc2hvdWxkIGJlIGVub3VnaCB0byBmaWxsIHRoZSBzY3JlZW4gYnV0IG5vdFxuICAgKiBtdWNoIG1vcmUuIE5vdGUgdGhlc2UgaXRlbXMgd2lsbCBuZXZlciBiZSB1bm1vdW50ZWQgYXMgcGFydCBvZiB0aGUgd2luZG93ZWQgcmVuZGVyaW5nIGluIG9yZGVyXG4gICAqIHRvIGltcHJvdmUgcGVyY2VpdmVkIHBlcmZvcm1hbmNlIG9mIHNjcm9sbC10by10b3AgYWN0aW9ucy5cbiAgICovXG4gIGluaXRpYWxOdW1Ub1JlbmRlcj86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBSZXZlcnNlcyB0aGUgZGlyZWN0aW9uIG9mIHNjcm9sbC4gVXNlcyBzY2FsZSB0cmFuc2Zvcm1zIG9mIC0xLlxuICAgKi9cbiAgaW52ZXJ0ZWQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFVzZWQgdG8gZXh0cmFjdCBhIHVuaXF1ZSBrZXkgZm9yIGEgZ2l2ZW4gaXRlbSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiBLZXkgaXMgdXNlZCBmb3IgY2FjaGluZ1xuICAgKiBhbmQgYXMgdGhlIHJlYWN0IGtleSB0byB0cmFjayBpdGVtIHJlLW9yZGVyaW5nLiBUaGUgZGVmYXVsdCBleHRyYWN0b3IgY2hlY2tzIGl0ZW0ua2V5LCB0aGVuXG4gICAqIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGluZGV4LCBsaWtlIHJlYWN0IGRvZXMuIE5vdGUgdGhhdCB0aGlzIHNldHMga2V5cyBmb3IgZWFjaCBpdGVtLCBidXRcbiAgICogZWFjaCBvdmVyYWxsIHNlY3Rpb24gc3RpbGwgbmVlZHMgaXRzIG93biBrZXkuXG4gICAqL1xuICBrZXlFeHRyYWN0b3I/OiA/KGl0ZW06IEl0ZW0sIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdoZW4gdGhlIHNjcm9sbCBwb3NpdGlvbiBnZXRzIHdpdGhpbiBgb25FbmRSZWFjaGVkVGhyZXNob2xkYCBvZiB0aGUgcmVuZGVyZWRcbiAgICogY29udGVudC5cbiAgICovXG4gIG9uRW5kUmVhY2hlZD86ID8oaW5mbzoge2Rpc3RhbmNlRnJvbUVuZDogbnVtYmVyLCAuLi59KSA9PiB2b2lkLFxuICAvKipcbiAgICogTm90ZTogbWF5IGhhdmUgYnVncyAobWlzc2luZyBjb250ZW50KSBpbiBzb21lIGNpcmN1bXN0YW5jZXMgLSB1c2UgYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogVGhpcyBtYXkgaW1wcm92ZSBzY3JvbGwgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIGxpc3RzLlxuICAgKi9cbiAgcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzPzogYm9vbGVhbixcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxTZWN0aW9uVD4gPSB7fFxuICAuLi4kRGlmZjxcbiAgICBWaXJ0dWFsaXplZFNlY3Rpb25MaXN0UHJvcHM8U2VjdGlvblQ+LFxuICAgIHtcbiAgICAgIGdldEl0ZW06ICRQcm9wZXJ0eVR5cGU8VmlydHVhbGl6ZWRTZWN0aW9uTGlzdFByb3BzPFNlY3Rpb25UPiwgJ2dldEl0ZW0nPixcbiAgICAgIGdldEl0ZW1Db3VudDogJFByb3BlcnR5VHlwZTxcbiAgICAgICAgVmlydHVhbGl6ZWRTZWN0aW9uTGlzdFByb3BzPFNlY3Rpb25UPixcbiAgICAgICAgJ2dldEl0ZW1Db3VudCcsXG4gICAgICA+LFxuICAgICAgcmVuZGVySXRlbTogJFByb3BlcnR5VHlwZTxcbiAgICAgICAgVmlydHVhbGl6ZWRTZWN0aW9uTGlzdFByb3BzPFNlY3Rpb25UPixcbiAgICAgICAgJ3JlbmRlckl0ZW0nLFxuICAgICAgPixcbiAgICAgIGtleUV4dHJhY3RvcjogJFByb3BlcnR5VHlwZTxcbiAgICAgICAgVmlydHVhbGl6ZWRTZWN0aW9uTGlzdFByb3BzPFNlY3Rpb25UPixcbiAgICAgICAgJ2tleUV4dHJhY3RvcicsXG4gICAgICA+LFxuICAgICAgLi4uXG4gICAgfSxcbiAgPixcbiAgLi4uUmVxdWlyZWRQcm9wczxTZWN0aW9uVD4sXG4gIC4uLk9wdGlvbmFsUHJvcHM8U2VjdGlvblQ+LFxufH07XG5cbi8qKlxuICogQSBwZXJmb3JtYW50IGludGVyZmFjZSBmb3IgcmVuZGVyaW5nIHNlY3Rpb25lZCBsaXN0cywgc3VwcG9ydGluZyB0aGUgbW9zdCBoYW5keSBmZWF0dXJlczpcbiAqXG4gKiAgLSBGdWxseSBjcm9zcy1wbGF0Zm9ybS5cbiAqICAtIENvbmZpZ3VyYWJsZSB2aWV3YWJpbGl0eSBjYWxsYmFja3MuXG4gKiAgLSBMaXN0IGhlYWRlciBzdXBwb3J0LlxuICogIC0gTGlzdCBmb290ZXIgc3VwcG9ydC5cbiAqICAtIEl0ZW0gc2VwYXJhdG9yIHN1cHBvcnQuXG4gKiAgLSBTZWN0aW9uIGhlYWRlciBzdXBwb3J0LlxuICogIC0gU2VjdGlvbiBzZXBhcmF0b3Igc3VwcG9ydC5cbiAqICAtIEhldGVyb2dlbmVvdXMgZGF0YSBhbmQgaXRlbSByZW5kZXJpbmcgc3VwcG9ydC5cbiAqICAtIFB1bGwgdG8gUmVmcmVzaC5cbiAqICAtIFNjcm9sbCBsb2FkaW5nLlxuICpcbiAqIElmIHlvdSBkb24ndCBuZWVkIHNlY3Rpb24gc3VwcG9ydCBhbmQgd2FudCBhIHNpbXBsZXIgaW50ZXJmYWNlLCB1c2VcbiAqIFtgPEZsYXRMaXN0PmBdKGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvZmxhdGxpc3QpLlxuICpcbiAqIFNpbXBsZSBFeGFtcGxlczpcbiAqXG4gKiAgICAgPFNlY3Rpb25MaXN0XG4gKiAgICAgICByZW5kZXJJdGVtPXsoe2l0ZW19KSA9PiA8TGlzdEl0ZW0gdGl0bGU9e2l0ZW19IC8+fVxuICogICAgICAgcmVuZGVyU2VjdGlvbkhlYWRlcj17KHtzZWN0aW9ufSkgPT4gPEhlYWRlciB0aXRsZT17c2VjdGlvbi50aXRsZX0gLz59XG4gKiAgICAgICBzZWN0aW9ucz17WyAvLyBob21vZ2VuZW91cyByZW5kZXJpbmcgYmV0d2VlbiBzZWN0aW9uc1xuICogICAgICAgICB7ZGF0YTogWy4uLl0sIHRpdGxlOiAuLi59LFxuICogICAgICAgICB7ZGF0YTogWy4uLl0sIHRpdGxlOiAuLi59LFxuICogICAgICAgICB7ZGF0YTogWy4uLl0sIHRpdGxlOiAuLi59LFxuICogICAgICAgXX1cbiAqICAgICAvPlxuICpcbiAqICAgICA8U2VjdGlvbkxpc3RcbiAqICAgICAgIHNlY3Rpb25zPXtbIC8vIGhldGVyb2dlbmVvdXMgcmVuZGVyaW5nIGJldHdlZW4gc2VjdGlvbnNcbiAqICAgICAgICAge2RhdGE6IFsuLi5dLCByZW5kZXJJdGVtOiAuLi59LFxuICogICAgICAgICB7ZGF0YTogWy4uLl0sIHJlbmRlckl0ZW06IC4uLn0sXG4gKiAgICAgICAgIHtkYXRhOiBbLi4uXSwgcmVuZGVySXRlbTogLi4ufSxcbiAqICAgICAgIF19XG4gKiAgICAgLz5cbiAqXG4gKiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgW2A8VmlydHVhbGl6ZWRMaXN0PmBdKGRvY3MvdmlydHVhbGl6ZWRsaXN0KSxcbiAqIGFuZCB0aHVzIGluaGVyaXRzIGl0cyBwcm9wcyAoYXMgd2VsbCBhcyB0aG9zZSBvZiBgU2Nyb2xsVmlld2ApIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkgbGlzdGVkXG4gKiBoZXJlLCBhbG9uZyB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcbiAqXG4gKiAtIEludGVybmFsIHN0YXRlIGlzIG5vdCBwcmVzZXJ2ZWQgd2hlbiBjb250ZW50IHNjcm9sbHMgb3V0IG9mIHRoZSByZW5kZXIgd2luZG93LiBNYWtlIHN1cmUgYWxsXG4gKiAgIHlvdXIgZGF0YSBpcyBjYXB0dXJlZCBpbiB0aGUgaXRlbSBkYXRhIG9yIGV4dGVybmFsIHN0b3JlcyBsaWtlIEZsdXgsIFJlZHV4LCBvciBSZWxheS5cbiAqIC0gVGhpcyBpcyBhIGBQdXJlQ29tcG9uZW50YCB3aGljaCBtZWFucyB0aGF0IGl0IHdpbGwgbm90IHJlLXJlbmRlciBpZiBgcHJvcHNgIHJlbWFpbiBzaGFsbG93LVxuICogICBlcXVhbC4gTWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyB5b3VyIGByZW5kZXJJdGVtYCBmdW5jdGlvbiBkZXBlbmRzIG9uIGlzIHBhc3NlZCBhcyBhIHByb3BcbiAqICAgKGUuZy4gYGV4dHJhRGF0YWApIHRoYXQgaXMgbm90IGA9PT1gIGFmdGVyIHVwZGF0ZXMsIG90aGVyd2lzZSB5b3VyIFVJIG1heSBub3QgdXBkYXRlIG9uXG4gKiAgIGNoYW5nZXMuIFRoaXMgaW5jbHVkZXMgdGhlIGBkYXRhYCBwcm9wIGFuZCBwYXJlbnQgY29tcG9uZW50IHN0YXRlLlxuICogLSBJbiBvcmRlciB0byBjb25zdHJhaW4gbWVtb3J5IGFuZCBlbmFibGUgc21vb3RoIHNjcm9sbGluZywgY29udGVudCBpcyByZW5kZXJlZCBhc3luY2hyb25vdXNseVxuICogICBvZmZzY3JlZW4uIFRoaXMgbWVhbnMgaXQncyBwb3NzaWJsZSB0byBzY3JvbGwgZmFzdGVyIHRoYW4gdGhlIGZpbGwgcmF0ZSBhbmQgbW9tZW50YXJpbHkgc2VlXG4gKiAgIGJsYW5rIGNvbnRlbnQuIFRoaXMgaXMgYSB0cmFkZW9mZiB0aGF0IGNhbiBiZSBhZGp1c3RlZCB0byBzdWl0IHRoZSBuZWVkcyBvZiBlYWNoIGFwcGxpY2F0aW9uLFxuICogICBhbmQgd2UgYXJlIHdvcmtpbmcgb24gaW1wcm92aW5nIGl0IGJlaGluZCB0aGUgc2NlbmVzLlxuICogLSBCeSBkZWZhdWx0LCB0aGUgbGlzdCBsb29rcyBmb3IgYSBga2V5YCBwcm9wIG9uIGVhY2ggaXRlbSBhbmQgdXNlcyB0aGF0IGZvciB0aGUgUmVhY3Qga2V5LlxuICogICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHByb3ZpZGUgYSBjdXN0b20gYGtleUV4dHJhY3RvcmAgcHJvcC5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlY3Rpb25MaXN0PFxuICBTZWN0aW9uVDogU2VjdGlvbkJhc2U8YW55Pixcbj4gZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPFNlY3Rpb25UPiwgdm9pZD4ge1xuICBwcm9wczogUHJvcHM8U2VjdGlvblQ+O1xuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRvIHRoZSBpdGVtIGF0IHRoZSBzcGVjaWZpZWQgYHNlY3Rpb25JbmRleGAgYW5kIGBpdGVtSW5kZXhgICh3aXRoaW4gdGhlIHNlY3Rpb24pXG4gICAqIHBvc2l0aW9uZWQgaW4gdGhlIHZpZXdhYmxlIGFyZWEgc3VjaCB0aGF0IGB2aWV3UG9zaXRpb25gIDAgcGxhY2VzIGl0IGF0IHRoZSB0b3AgKGFuZCBtYXkgYmVcbiAgICogY292ZXJlZCBieSBhIHN0aWNreSBoZWFkZXIpLCAxIGF0IHRoZSBib3R0b20sIGFuZCAwLjUgY2VudGVyZWQgaW4gdGhlIG1pZGRsZS4gYHZpZXdPZmZzZXRgIGlzIGFcbiAgICogZml4ZWQgbnVtYmVyIG9mIHBpeGVscyB0byBvZmZzZXQgdGhlIGZpbmFsIHRhcmdldCBwb3NpdGlvbiwgZS5nLiB0byBjb21wZW5zYXRlIGZvciBzdGlja3lcbiAgICogaGVhZGVycy5cbiAgICpcbiAgICogTm90ZTogY2Fubm90IHNjcm9sbCB0byBsb2NhdGlvbnMgb3V0c2lkZSB0aGUgcmVuZGVyIHdpbmRvdyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlXG4gICAqIGBnZXRJdGVtTGF5b3V0YCBwcm9wLlxuICAgKi9cbiAgc2Nyb2xsVG9Mb2NhdGlvbihwYXJhbXM6IFNjcm9sbFRvTG9jYXRpb25QYXJhbXNUeXBlKSB7XG4gICAgaWYgKHRoaXMuX3dyYXBwZXJMaXN0UmVmICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3dyYXBwZXJMaXN0UmVmLnNjcm9sbFRvTG9jYXRpb24ocGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVsbHMgdGhlIGxpc3QgYW4gaW50ZXJhY3Rpb24gaGFzIG9jY3VycmVkLCB3aGljaCBzaG91bGQgdHJpZ2dlciB2aWV3YWJpbGl0eSBjYWxjdWxhdGlvbnMsIGUuZy5cbiAgICogaWYgYHdhaXRGb3JJbnRlcmFjdGlvbnNgIGlzIHRydWUgYW5kIHRoZSB1c2VyIGhhcyBub3Qgc2Nyb2xsZWQuIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBieVxuICAgKiB0YXBzIG9uIGl0ZW1zIG9yIGJ5IG5hdmlnYXRpb24gYWN0aW9ucy5cbiAgICovXG4gIHJlY29yZEludGVyYWN0aW9uKCkge1xuICAgIGNvbnN0IGxpc3RSZWYgPSB0aGlzLl93cmFwcGVyTGlzdFJlZiAmJiB0aGlzLl93cmFwcGVyTGlzdFJlZi5nZXRMaXN0UmVmKCk7XG4gICAgbGlzdFJlZiAmJiBsaXN0UmVmLnJlY29yZEludGVyYWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIHNjcm9sbCBpbmRpY2F0b3JzIG1vbWVudGFyaWx5LlxuICAgKlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBmbGFzaFNjcm9sbEluZGljYXRvcnMoKSB7XG4gICAgY29uc3QgbGlzdFJlZiA9IHRoaXMuX3dyYXBwZXJMaXN0UmVmICYmIHRoaXMuX3dyYXBwZXJMaXN0UmVmLmdldExpc3RSZWYoKTtcbiAgICBsaXN0UmVmICYmIGxpc3RSZWYuZmxhc2hTY3JvbGxJbmRpY2F0b3JzKCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgYSBoYW5kbGUgdG8gdGhlIHVuZGVybHlpbmcgc2Nyb2xsIHJlc3BvbmRlci5cbiAgICovXG4gIGdldFNjcm9sbFJlc3BvbmRlcigpOiA/U2Nyb2xsUmVzcG9uZGVyVHlwZSB7XG4gICAgY29uc3QgbGlzdFJlZiA9IHRoaXMuX3dyYXBwZXJMaXN0UmVmICYmIHRoaXMuX3dyYXBwZXJMaXN0UmVmLmdldExpc3RSZWYoKTtcbiAgICBpZiAobGlzdFJlZikge1xuICAgICAgcmV0dXJuIGxpc3RSZWYuZ2V0U2Nyb2xsUmVzcG9uZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2Nyb2xsYWJsZU5vZGUoKTogYW55IHtcbiAgICBjb25zdCBsaXN0UmVmID0gdGhpcy5fd3JhcHBlckxpc3RSZWYgJiYgdGhpcy5fd3JhcHBlckxpc3RSZWYuZ2V0TGlzdFJlZigpO1xuICAgIGlmIChsaXN0UmVmKSB7XG4gICAgICByZXR1cm4gbGlzdFJlZi5nZXRTY3JvbGxhYmxlTm9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldE5hdGl2ZVByb3BzKHByb3BzOiBPYmplY3QpIHtcbiAgICBjb25zdCBsaXN0UmVmID0gdGhpcy5fd3JhcHBlckxpc3RSZWYgJiYgdGhpcy5fd3JhcHBlckxpc3RSZWYuZ2V0TGlzdFJlZigpO1xuICAgIGlmIChsaXN0UmVmKSB7XG4gICAgICBsaXN0UmVmLnNldE5hdGl2ZVByb3BzKHByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RpY2t5U2VjdGlvbkhlYWRlcnNFbmFibGVkOiBfc3RpY2t5U2VjdGlvbkhlYWRlcnNFbmFibGVkLFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgc3RpY2t5U2VjdGlvbkhlYWRlcnNFbmFibGVkID1cbiAgICAgIF9zdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQgPz8gUGxhdGZvcm0uT1MgPT09ICdpb3MnO1xuICAgIHJldHVybiAoXG4gICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBFcnJvciByZXZlYWxlZCBhZnRlciBpbXByb3ZlZCBidWlsdGluXG4gICAgICAgKiBSZWFjdCB1dGlsaXR5IHR5cGVzICovXG4gICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBFcnJvciByZXZlYWxlZCBhZnRlciBpbXByb3ZlZCBidWlsdGluXG4gICAgICAgKiBSZWFjdCB1dGlsaXR5IHR5cGVzICovXG4gICAgICA8VmlydHVhbGl6ZWRTZWN0aW9uTGlzdFxuICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICBzdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQ9e3N0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZH1cbiAgICAgICAgcmVmPXt0aGlzLl9jYXB0dXJlUmVmfVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICAgICAgIGdldEl0ZW1Db3VudD17aXRlbXMgPT4gaXRlbXMubGVuZ3RofVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICAgICAgIGdldEl0ZW09eyhpdGVtcywgaW5kZXgpID0+IGl0ZW1zW2luZGV4XX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIF93cmFwcGVyTGlzdFJlZjogP1JlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFZpcnR1YWxpemVkU2VjdGlvbkxpc3Q+O1xuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gICAqIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIF9jYXB0dXJlUmVmID0gcmVmID0+IHtcbiAgICB0aGlzLl93cmFwcGVyTGlzdFJlZiA9IHJlZjtcbiAgfTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7QW5pbWF0ZWRDb21wb25lbnRUeXBlfSBmcm9tICcuLi9jcmVhdGVBbmltYXRlZENvbXBvbmVudCc7XG5cbmltcG9ydCBUZXh0IGZyb20gJy4uLy4uL1RleHQvVGV4dCc7XG5pbXBvcnQgY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQgZnJvbSAnLi4vY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCAoY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQoXG4gIChUZXh0OiAkRmxvd0ZpeE1lKSxcbik6IEFuaW1hdGVkQ29tcG9uZW50VHlwZTxcbiAgUmVhY3QuRWxlbWVudENvbmZpZzx0eXBlb2YgVGV4dD4sXG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFRleHQ+LFxuPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0FuaW1hdGVkQ29tcG9uZW50VHlwZX0gZnJvbSAnLi4vY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQnO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQgZnJvbSAnLi4vY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCAoY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQoVmlldyk6IEFuaW1hdGVkQ29tcG9uZW50VHlwZTxcbiAgUmVhY3QuRWxlbWVudENvbmZpZzx0eXBlb2YgVmlldz4sXG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFZpZXc+LFxuPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQG5vZm9ybWF0XG4gKiBAZmxvd1xuICogQG5vbGludFxuICogQGdlbmVyYXRlZCBTaWduZWRTb3VyY2U8PDBkZWJkNmU1YTE3ZGMwMzdjYjQ2NjEzMTVhODg2ZGU2Pj5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtSZWFjdE5hdGl2ZVR5cGV9IGZyb20gJy4vUmVhY3ROYXRpdmVUeXBlcyc7XG5cbmxldCBSZWFjdE5hdGl2ZTtcblxuaWYgKF9fREVWX18pIHtcbiAgUmVhY3ROYXRpdmUgPSByZXF1aXJlKCcuLi9pbXBsZW1lbnRhdGlvbnMvUmVhY3ROYXRpdmVSZW5kZXJlci1kZXYnKTtcbn0gZWxzZSB7XG4gIFJlYWN0TmF0aXZlID0gcmVxdWlyZSgnLi4vaW1wbGVtZW50YXRpb25zL1JlYWN0TmF0aXZlUmVuZGVyZXItcHJvZCcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChSZWFjdE5hdGl2ZTogUmVhY3ROYXRpdmVUeXBlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbm9mbG93XG4gKiBAbm9saW50XG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3ROYXRpdmVSZW5kZXJlci1kZXZcbiAqIEBwcmV2ZW50TXVuZ2VcbiAqIEBnZW5lcmF0ZWQgU2lnbmVkU291cmNlPDw0MzQ5MzdkYmMzYjFjMzU5MmQ4ZWY4MTk2ZDBjMWE1Mj4+XG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmlmIChfX0RFVl9fKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgPT09XG4gICAgICAgIFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChuZXcgRXJyb3IoKSk7XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbiAgICByZXF1aXJlKFwicmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdFByaXZhdGUvUmVhY3ROYXRpdmVQcml2YXRlSW5pdGlhbGl6ZUNvcmVcIik7XG4gICAgdmFyIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZSA9IHJlcXVpcmUoXCJyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0UHJpdmF0ZS9SZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2VcIik7XG4gICAgdmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoXCJzY2hlZHVsZXJcIik7XG5cbiAgICB2YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbiAgICAvLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuICAgIC8vXG4gICAgLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbiAgICAvLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbiAgICBmdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksXG4gICAgICAgICAgICAgIF9rZXkgPSAxO1xuICAgICAgICAgICAgX2tleSA8IF9sZW47XG4gICAgICAgICAgICBfa2V5KytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByaW50V2FybmluZyhcIndhcm5cIiwgZm9ybWF0LCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgICBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLFxuICAgICAgICAgICAgICBfa2V5MiA9IDE7XG4gICAgICAgICAgICBfa2V5MiA8IF9sZW4yO1xuICAgICAgICAgICAgX2tleTIrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXCJlcnJvclwiLCBmb3JtYXQsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICAgIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAgICAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gICAgICB7XG4gICAgICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID1cbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgICAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgICAgICBpZiAoc3RhY2sgIT09IFwiXCIpIHtcbiAgICAgICAgICBmb3JtYXQgKz0gXCIlc1wiO1xuICAgICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICAgICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuICAgICAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoXCJXYXJuaW5nOiBcIiArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZha2VOb2RlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIGZha2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInJlYWN0XCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwobmFtZSwgZnVuYywgY29udGV4dCkge1xuICAgICAge1xuICAgICAgICAvLyBJbiBERVYgbW9kZSwgd2UgdXNlIGEgc3BlY2lhbCB2ZXJzaW9uXG4gICAgICAgIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAgICAgICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAgICAgICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAgICAgICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAgICAgICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gICAgICAgIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gICAgICAgIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgICAgICAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgICAgICAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gICAgICAgIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gICAgICAgIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgICAgICAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gICAgICAgIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gICAgICAgIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgICAgICAgLy8gZmFrZU5vZGUgc2lnbmlmaWVzIHdlIGFyZSBpbiBhbiBlbnZpcm9ubWVudCB3aXRoIGEgZG9jdW1lbnQgYW5kIHdpbmRvdyBvYmplY3RcbiAgICAgICAgaWYgKGZha2VOb2RlKSB7XG4gICAgICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgICAgICAgdmFyIGRpZENhbGwgPSBmYWxzZTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAgICAgLy8gY2FsbGluZyB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBlcnJvcnMsIGBkaWRFcnJvcmAgd2lsbCBuZXZlciBiZVxuICAgICAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgICAgIC8vIHRoZSBlcnJvciBldmVudCBhdCBhbGwuXG5cbiAgICAgICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAgICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LlxuXG4gICAgICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgICAgICB2YXIgd2luZG93RXZlbnREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgIHdpbmRvdyxcbiAgICAgICAgICAgIFwiZXZlbnRcIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB2YXIgcmVzdG9yZUFmdGVyRGlzcGF0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgICAgIC8vIG5lc3RlZCBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBjYWxscyBkbyBub3QgY2xhc2guIE90aGVyd2lzZSwgYVxuICAgICAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFdlIGNoZWNrIGZvciB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykgdG8gcHJldmVudCB0aGVcbiAgICAgICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgICAgICAvLyBzdXBwb3J0IHdpbmRvdy5ldmVudC5cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eShcImV2ZW50XCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgd2luZG93LmV2ZW50ID0gd2luZG93RXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTsgLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgICAgICAvLyBkaXNwYXRjaCBvdXIgZmFrZSBldmVudCB1c2luZyBgZGlzcGF0Y2hFdmVudGAuIEluc2lkZSB0aGUgaGFuZGxlciwgd2VcbiAgICAgICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuICAgICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cblxuICAgICAgICAgIHZhciBfZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgICAgICAgdmFyIGNhbGxDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRpZENhbGwgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gRmxvdyBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIGFyZ3VtZW50cyBzcGxpY2luZy5cblxuICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBfZnVuY0FyZ3MpO1xuICAgICAgICAgICAgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICB9OyAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgICAgICAvLyB0aGF0IHdhcyB0aHJvd24uIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGVycm9yIGhhbmRsZXIgd2lsbCBmaXJlIG1vcmVcbiAgICAgICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgICAgICAvLyB0aG9zZSBjYXNlcy4gRXZlbiBpZiBvdXIgZXJyb3IgZXZlbnQgaGFuZGxlciBmaXJlcyBtb3JlIHRoYW4gb25jZSwgdGhlXG4gICAgICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgICAgIC8vIHBvc3NpYmxlIGZvciBhbnl0aGluZyBlbHNlIHRvIGhhdmUgaGFwcGVuZWQgaW4gYmV0d2VlbiBvdXIgY2FsbGJhY2tcbiAgICAgICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgICAgICAvLyBpZ25vcmUgaXQgYmVjYXVzZSBgZGlkRXJyb3JgIHdpbGwgYmUgZmFsc2UsIGFzIGRlc2NyaWJlZCBhYm92ZS5cblxuICAgICAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgICAgICB2YXIgZGlkU2V0RXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICB2YXIgaXNDcm9zc09yaWdpbkVycm9yID0gZmFsc2U7XG5cbiAgICAgICAgICB2YXIgaGFuZGxlV2luZG93RXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGVycm9yID0gZXZlbnQuZXJyb3I7XG4gICAgICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICAgICAgaXNDcm9zc09yaWdpbkVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtZW1iZXIgdGhpcyB0byBsYXRlciBkZWNpZGUgd2hldGhlciB0byBsb2cgaXQgb3Igbm90LlxuICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIpIHtcbiAgICAgICAgICAgICAgICAgIC8vIElnbm9yZS5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9OyAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cbiAgICAgICAgICB2YXIgZXZ0VHlwZSA9IFwicmVhY3QtXCIgKyAobmFtZSA/IG5hbWUgOiBcImludm9rZWd1YXJkZWRjYWxsYmFja1wiKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaCBvdXIgZmFrZSBldmVudC4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZnVuY3Rpb25cbiAgICAgICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgZmFrZU5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xuXG4gICAgICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgXCJldmVudFwiLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaWRDYWxsICYmIGRpZEVycm9yKSB7XG4gICAgICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkFuIGVycm9yIHdhcyB0aHJvd24gaW5zaWRlIG9uZSBvZiB5b3VyIGNvbXBvbmVudHMsIGJ1dCBSZWFjdCBcIiArXG4gICAgICAgICAgICAgICAgICBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgK1xuICAgICAgICAgICAgICAgICAgJ2ZsYWtpbmVzcy4gUmVhY3QgZG9lcyBpdHMgYmVzdCB0byBwcmVzZXJ2ZSB0aGUgXCJQYXVzZSBvbiAnICtcbiAgICAgICAgICAgICAgICAgICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgK1xuICAgICAgICAgICAgICAgICAgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsIFwiICtcbiAgICAgICAgICAgICAgICAgIFwib3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyBcIiArXG4gICAgICAgICAgICAgICAgICBcImFjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkEgY3Jvc3Mtb3JpZ2luIGVycm9yIHdhcyB0aHJvd24uIFJlYWN0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICAgICAgfSAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgICAgICBpZiAoZGlkQ2FsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjczNFxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjU4NVxuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTsgLy8gd2UgZmFsbCB0aHJvdWdoIGFuZCBjYWxsIHRoZSBwcm9kIHZlcnNpb24gaW5zdGVhZFxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXZSBvbmx5IGdldCBoZXJlIGlmIHdlIGFyZSBpbiBhbiBlbnZpcm9ubWVudCB0aGF0IGVpdGhlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBicm93c2VyXG4gICAgICAgIC8vIHZhcmlhbnQgb3Igd2UgaGFkIHRyb3VibGUgZ2V0dGluZyB0aGUgYnJvd3NlciB0byBlbWl0IHRoZSBlcnJvci5cbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG4gICAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBGbG93IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgYXJndW1lbnRzIHNwbGljaW5nLlxuICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG4gICAgdmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHZhciByZXRocm93RXJyb3IgPSBudWxsO1xuICAgIHZhciByZXBvcnRlciA9IHtcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAgICAgKiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IHRocm93cywgb3RoZXJ3aXNlIG51bGwuXG4gICAgICpcbiAgICAgKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gICAgICogdXNlIGEgdHJ5LWNhdGNoIGRpcmVjdGx5IGlzIHNvIHRoYXQgd2UgY2FuIHN3YXAgb3V0IGEgZGlmZmVyZW50XG4gICAgICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICAgICAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwuYXBwbHkocmVwb3J0ZXIsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMgaW52b2tlR3VhcmRlZENhbGxiYWNrLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IsIGl0IHN0b3Jlc1xuICAgICAqIGl0IGluIGEgZ2xvYmFsIHNvIGl0IGNhbiBiZSByZXRocm93biBieSBgcmV0aHJvd0NhdWdodEVycm9yYCBsYXRlci5cbiAgICAgKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gICAgICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihcbiAgICAgIG5hbWUsXG4gICAgICBmdW5jLFxuICAgICAgY29udGV4dCxcbiAgICAgIGEsXG4gICAgICBiLFxuICAgICAgYyxcbiAgICAgIGQsXG4gICAgICBlLFxuICAgICAgZlxuICAgICkge1xuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgICAgICBoYXNSZXRocm93RXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHJldGhyb3dFcnJvciA9IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIER1cmluZyBleGVjdXRpb24gb2YgZ3VhcmRlZCBmdW5jdGlvbnMgd2Ugd2lsbCBjYXB0dXJlIHRoZSBmaXJzdCBlcnJvciB3aGljaFxuICAgICAqIHdlIHdpbGwgcmV0aHJvdyB0byBiZSBoYW5kbGVkIGJ5IHRoZSB0b3AgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJldGhyb3dDYXVnaHRFcnJvcigpIHtcbiAgICAgIGlmIChoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgICAgICBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbiAgICAgICAgcmV0aHJvd0Vycm9yID0gbnVsbDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICAgICAgcmV0dXJuIGhhc0Vycm9yO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgICAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIFwiICtcbiAgICAgICAgICAgIFwiaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgICAgIHJldHVybiBpc0FycmF5SW1wbChhKTtcbiAgICB9XG5cbiAgICB2YXIgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxID0gbnVsbDtcbiAgICB2YXIgZ2V0SW5zdGFuY2VGcm9tTm9kZSA9IG51bGw7XG4gICAgdmFyIGdldE5vZGVGcm9tSW5zdGFuY2UgPSBudWxsO1xuICAgIGZ1bmN0aW9uIHNldENvbXBvbmVudFRyZWUoXG4gICAgICBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlSW1wbCxcbiAgICAgIGdldEluc3RhbmNlRnJvbU5vZGVJbXBsLFxuICAgICAgZ2V0Tm9kZUZyb21JbnN0YW5jZUltcGxcbiAgICApIHtcbiAgICAgIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMSA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGVJbXBsO1xuICAgICAgZ2V0SW5zdGFuY2VGcm9tTm9kZSA9IGdldEluc3RhbmNlRnJvbU5vZGVJbXBsO1xuICAgICAgZ2V0Tm9kZUZyb21JbnN0YW5jZSA9IGdldE5vZGVGcm9tSW5zdGFuY2VJbXBsO1xuXG4gICAgICB7XG4gICAgICAgIGlmICghZ2V0Tm9kZUZyb21JbnN0YW5jZSB8fCAhZ2V0SW5zdGFuY2VGcm9tTm9kZSkge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJFdmVudFBsdWdpblV0aWxzLnNldENvbXBvbmVudFRyZWUoLi4uKTogSW5qZWN0ZWQgXCIgK1xuICAgICAgICAgICAgICBcIm1vZHVsZSBpcyBtaXNzaW5nIGdldE5vZGVGcm9tSW5zdGFuY2Ugb3IgZ2V0SW5zdGFuY2VGcm9tTm9kZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCkge1xuICAgICAge1xuICAgICAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgICAgIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgICAgICAgdmFyIGxpc3RlbmVyc0lzQXJyID0gaXNBcnJheShkaXNwYXRjaExpc3RlbmVycyk7XG4gICAgICAgIHZhciBsaXN0ZW5lcnNMZW4gPSBsaXN0ZW5lcnNJc0FyclxuICAgICAgICAgID8gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAgICAgOiBkaXNwYXRjaExpc3RlbmVyc1xuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcbiAgICAgICAgdmFyIGluc3RhbmNlc0lzQXJyID0gaXNBcnJheShkaXNwYXRjaEluc3RhbmNlcyk7XG4gICAgICAgIHZhciBpbnN0YW5jZXNMZW4gPSBpbnN0YW5jZXNJc0FyclxuICAgICAgICAgID8gZGlzcGF0Y2hJbnN0YW5jZXMubGVuZ3RoXG4gICAgICAgICAgOiBkaXNwYXRjaEluc3RhbmNlc1xuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5zdGFuY2VzSXNBcnIgIT09IGxpc3RlbmVyc0lzQXJyIHx8XG4gICAgICAgICAgaW5zdGFuY2VzTGVuICE9PSBsaXN0ZW5lcnNMZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgZXJyb3IoXCJFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoIHRoZSBldmVudCB0byB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQgU3ludGhldGljRXZlbnQgdG8gaGFuZGxlXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0geyp9IGluc3QgSW50ZXJuYWwgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBpbnN0KSB7XG4gICAgICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgXCJ1bmtub3duLWV2ZW50XCI7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcih0eXBlLCBsaXN0ZW5lciwgdW5kZWZpbmVkLCBldmVudCk7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQpIHtcbiAgICAgIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgICAgIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcblxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gLy8gTGlzdGVuZXJzIGFuZCBJbnN0YW5jZXMgYXJlIHR3byBwYXJhbGxlbCBhcnJheXMgdGhhdCBhcmUgYWx3YXlzIGluIHN5bmMuXG5cbiAgICAgICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzW2ldLCBkaXNwYXRjaEluc3RhbmNlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHtcbiAgICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgZGlzcGF0Y2hJbnN0YW5jZXMpO1xuICAgICAgfVxuXG4gICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMsIGJ1dCBzdG9wc1xuICAgICAqIGF0IHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gcmV0dXJuaW5nIHRydWUsIGFuZCByZXR1cm5zIHRoYXQgaWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBpZCBvZiB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHdobydzIGxpc3RlbmVyIHJldHVybnNcbiAgICAgKiB0cnVlLCBvciBudWxsIGlmIG5vIGxpc3RlbmVyIHJldHVybmVkIHRydWUuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCkge1xuICAgICAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgICAgdmFyIGRpc3BhdGNoSW5zdGFuY2VzID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSAvLyBMaXN0ZW5lcnMgYW5kIEluc3RhbmNlcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cblxuICAgICAgICAgIGlmIChkaXNwYXRjaExpc3RlbmVyc1tpXShldmVudCwgZGlzcGF0Y2hJbnN0YW5jZXNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hJbnN0YW5jZXNbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7XG4gICAgICAgIGlmIChkaXNwYXRjaExpc3RlbmVycyhldmVudCwgZGlzcGF0Y2hJbnN0YW5jZXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGRpc3BhdGNoSW5zdGFuY2VzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlKGV2ZW50KSB7XG4gICAgICB2YXIgcmV0ID0gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGwoZXZlbnQpO1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRpb24gb2YgYSBcImRpcmVjdFwiIGRpc3BhdGNoIC0gdGhlcmUgbXVzdCBiZSBhdCBtb3N0IG9uZSBkaXNwYXRjaFxuICAgICAqIGFjY3VtdWxhdGVkIG9uIHRoZSBldmVudCBvciBpdCBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiBJdCBkb2Vzbid0IHJlYWxseSBtYWtlXG4gICAgICogc2Vuc2UgZm9yIGFuIGV2ZW50IHdpdGggbXVsdGlwbGUgZGlzcGF0Y2hlcyAoYnViYmxlZCkgdG8ga2VlcCB0cmFjayBvZiB0aGVcbiAgICAgKiByZXR1cm4gdmFsdWVzIGF0IGVhY2ggZGlzcGF0Y2ggZXhlY3V0aW9uLCBidXQgaXQgZG9lcyB0ZW5kIHRvIG1ha2Ugc2Vuc2Ugd2hlblxuICAgICAqIGRlYWxpbmcgd2l0aCBcImRpcmVjdFwiIGRpc3BhdGNoZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGV4ZWN1dGluZyB0aGUgc2luZ2xlIGRpc3BhdGNoLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gZXhlY3V0ZURpcmVjdERpc3BhdGNoKGV2ZW50KSB7XG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpc3BhdGNoTGlzdGVuZXIgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgICB2YXIgZGlzcGF0Y2hJbnN0YW5jZSA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcblxuICAgICAgaWYgKGlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXhlY3V0ZURpcmVjdERpc3BhdGNoKC4uLik6IEludmFsaWQgYGV2ZW50YC5cIik7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBkaXNwYXRjaExpc3RlbmVyXG4gICAgICAgID8gZ2V0Tm9kZUZyb21JbnN0YW5jZShkaXNwYXRjaEluc3RhbmNlKVxuICAgICAgICA6IG51bGw7XG4gICAgICB2YXIgcmVzID0gZGlzcGF0Y2hMaXN0ZW5lciA/IGRpc3BhdGNoTGlzdGVuZXIoZXZlbnQpIDogbnVsbDtcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBldmVudFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWZmIG51bWJlciBvZiBkaXNwYXRjaGVzIGFjY3VtdWxhdGVkIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gaGFzRGlzcGF0Y2hlcyhldmVudCkge1xuICAgICAgcmV0dXJuICEhZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgIH1cblxuICAgIHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4gICAgdmFyIEVWRU5UX1BPT0xfU0laRSA9IDEwO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcmZhY2UgRXZlbnRcbiAgICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAgICAgKi9cblxuICAgIHZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgICAgIHR5cGU6IG51bGwsXG4gICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAvLyBjdXJyZW50VGFyZ2V0IGlzIHNldCB3aGVuIGRpc3BhdGNoaW5nOyBubyB1c2UgaW4gY29weWluZyBpdCBoZXJlXG4gICAgICBjdXJyZW50VGFyZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSxcbiAgICAgIGV2ZW50UGhhc2U6IG51bGwsXG4gICAgICBidWJibGVzOiBudWxsLFxuICAgICAgY2FuY2VsYWJsZTogbnVsbCxcbiAgICAgIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0UHJldmVudGVkOiBudWxsLFxuICAgICAgaXNUcnVzdGVkOiBudWxsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gICAgICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAgICAgKlxuICAgICAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gICAgICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gICAgICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICAgICAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gICAgICpcbiAgICAgKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gICAgICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAgICAgKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gICAgICogQHBhcmFtIHsqfSB0YXJnZXRJbnN0IE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSBuYXRpdmVFdmVudFRhcmdldCBUYXJnZXQgbm9kZS5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIFN5bnRoZXRpY0V2ZW50KFxuICAgICAgZGlzcGF0Y2hDb25maWcsXG4gICAgICB0YXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICkge1xuICAgICAge1xuICAgICAgICAvLyB0aGVzZSBoYXZlIGEgZ2V0dGVyL3NldHRlciBmb3Igd2FybmluZ3NcbiAgICAgICAgZGVsZXRlIHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnByZXZlbnREZWZhdWx0O1xuICAgICAgICBkZWxldGUgdGhpcy5zdG9wUHJvcGFnYXRpb247XG4gICAgICAgIGRlbGV0ZSB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZDtcbiAgICAgICAgZGVsZXRlIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hDb25maWcgPSBkaXNwYXRjaENvbmZpZztcbiAgICAgIHRoaXMuX3RhcmdldEluc3QgPSB0YXJnZXRJbnN0O1xuICAgICAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgdGhpcy5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICAgICAgdmFyIEludGVyZmFjZSA9IHRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO1xuXG4gICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgZGVsZXRlIHRoaXNbcHJvcE5hbWVdOyAvLyB0aGlzIGhhcyBhIGdldHRlci9zZXR0ZXIgZm9yIHdhcm5pbmdzXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW3Byb3BOYW1lXTtcblxuICAgICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gXCJ0YXJnZXRcIikge1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpc1twcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtwcm9wTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID1cbiAgICAgICAgbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsXG4gICAgICAgICAgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgICAgICAgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG5cbiAgICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGFzc2lnbihTeW50aGV0aWNFdmVudC5wcm90b3R5cGUsIHtcbiAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSBcInVua25vd25cIikge1xuICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgICAgfSxcbiAgICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gXCJ1bmtub3duXCIpIHtcbiAgICAgICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgICAgLy8gYW55IHJlZmVyZW5jZXMgdG8gY2FuY2VsQnViYmxlIHRocm93IFwiTWVtYmVyIG5vdCBmb3VuZFwiLiAgQVxuICAgICAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXRcbiAgICAgICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgICAqL1xuICAgICAgcGVyc2lzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzUGVyc2lzdGVudCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICAgKi9cbiAgICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlLFxuXG4gICAgICAvKipcbiAgICAgICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIGBkZXN0cnVjdG9yYCBvbiBlYWNoIGluc3RhbmNlIGl0IHJlbGVhc2VzLlxuICAgICAgICovXG4gICAgICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcblxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgICBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKHByb3BOYW1lLCBJbnRlcmZhY2VbcHJvcE5hbWVdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICAgIHRoaXMubmF0aXZlRXZlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG5cbiAgICAgICAge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBcIm5hdGl2ZUV2ZW50XCIsXG4gICAgICAgICAgICBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKFwibmF0aXZlRXZlbnRcIiwgbnVsbClcbiAgICAgICAgICApO1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBcImlzRGVmYXVsdFByZXZlbnRlZFwiLFxuICAgICAgICAgICAgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgXCJpc0RlZmF1bHRQcmV2ZW50ZWRcIixcbiAgICAgICAgICAgICAgZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgXCJpc1Byb3BhZ2F0aW9uU3RvcHBlZFwiLFxuICAgICAgICAgICAgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgXCJpc1Byb3BhZ2F0aW9uU3RvcHBlZFwiLFxuICAgICAgICAgICAgICBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBcInByZXZlbnREZWZhdWx0XCIsXG4gICAgICAgICAgICBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKFwicHJldmVudERlZmF1bHRcIiwgZnVuY3Rpb24gKCkge30pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgXCJzdG9wUHJvcGFnYXRpb25cIixcbiAgICAgICAgICAgIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oXG4gICAgICAgICAgICAgIFwic3RvcFByb3BhZ2F0aW9uXCIsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt9XG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIFN5bnRoZXRpY0V2ZW50LkludGVyZmFjZSA9IEV2ZW50SW50ZXJmYWNlO1xuICAgIC8qKlxuICAgICAqIEhlbHBlciB0byByZWR1Y2UgYm9pbGVycGxhdGUgd2hlbiBjcmVhdGluZyBzdWJjbGFzc2VzLlxuICAgICAqL1xuXG4gICAgU3ludGhldGljRXZlbnQuZXh0ZW5kID0gZnVuY3Rpb24gKEludGVyZmFjZSkge1xuICAgICAgdmFyIFN1cGVyID0gdGhpcztcblxuICAgICAgdmFyIEUgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgICAgRS5wcm90b3R5cGUgPSBTdXBlci5wcm90b3R5cGU7XG4gICAgICB2YXIgcHJvdG90eXBlID0gbmV3IEUoKTtcblxuICAgICAgZnVuY3Rpb24gQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24ocHJvdG90eXBlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgICAgQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3M7XG4gICAgICBDbGFzcy5JbnRlcmZhY2UgPSBhc3NpZ24oe30sIFN1cGVyLkludGVyZmFjZSwgSW50ZXJmYWNlKTtcbiAgICAgIENsYXNzLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICAgIGFkZEV2ZW50UG9vbGluZ1RvKENsYXNzKTtcbiAgICAgIHJldHVybiBDbGFzcztcbiAgICB9O1xuXG4gICAgYWRkRXZlbnRQb29saW5nVG8oU3ludGhldGljRXZlbnQpO1xuICAgIC8qKlxuICAgICAqIEhlbHBlciB0byBudWxsaWZ5IHN5bnRoZXRpY0V2ZW50IGluc3RhbmNlIHByb3BlcnRpZXMgd2hlbiBkZXN0cnVjdGluZ1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BOYW1lXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBnZXRWYWxcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IGRlZmluZVByb3BlcnR5IG9iamVjdFxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihwcm9wTmFtZSwgZ2V0VmFsKSB7XG4gICAgICBmdW5jdGlvbiBzZXQodmFsKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBpc0Z1bmN0aW9uID8gXCJzZXR0aW5nIHRoZSBtZXRob2RcIiA6IFwic2V0dGluZyB0aGUgcHJvcGVydHlcIjtcbiAgICAgICAgd2FybihhY3Rpb24sIFwiVGhpcyBpcyBlZmZlY3RpdmVseSBhIG5vLW9wXCIpO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBpc0Z1bmN0aW9uXG4gICAgICAgICAgPyBcImFjY2Vzc2luZyB0aGUgbWV0aG9kXCJcbiAgICAgICAgICA6IFwiYWNjZXNzaW5nIHRoZSBwcm9wZXJ0eVwiO1xuICAgICAgICB2YXIgcmVzdWx0ID0gaXNGdW5jdGlvblxuICAgICAgICAgID8gXCJUaGlzIGlzIGEgbm8tb3AgZnVuY3Rpb25cIlxuICAgICAgICAgIDogXCJUaGlzIGlzIHNldCB0byBudWxsXCI7XG4gICAgICAgIHdhcm4oYWN0aW9uLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gZ2V0VmFsO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB3YXJuKGFjdGlvbiwgcmVzdWx0KSB7XG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhpcyBzeW50aGV0aWMgZXZlbnQgaXMgcmV1c2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBJZiB5b3UncmUgc2VlaW5nIHRoaXMsIFwiICtcbiAgICAgICAgICAgICAgXCJ5b3UncmUgJXMgYCVzYCBvbiBhIHJlbGVhc2VkL251bGxpZmllZCBzeW50aGV0aWMgZXZlbnQuICVzLiBcIiArXG4gICAgICAgICAgICAgIFwiSWYgeW91IG11c3Qga2VlcCB0aGUgb3JpZ2luYWwgc3ludGhldGljIGV2ZW50IGFyb3VuZCwgdXNlIGV2ZW50LnBlcnNpc3QoKS4gXCIgK1xuICAgICAgICAgICAgICBcIlNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIixcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBnZXRWYWwgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgc2V0OiBzZXQsXG4gICAgICAgIGdldDogZ2V0XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9yR2V0UG9vbGVkRXZlbnQoXG4gICAgICBkaXNwYXRjaENvbmZpZyxcbiAgICAgIHRhcmdldEluc3QsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIG5hdGl2ZUluc3RcbiAgICApIHtcbiAgICAgIHZhciBFdmVudENvbnN0cnVjdG9yID0gdGhpcztcblxuICAgICAgaWYgKEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sLmxlbmd0aCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbC5wb3AoKTtcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3Rvci5jYWxsKFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIGRpc3BhdGNoQ29uZmlnLFxuICAgICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgbmF0aXZlSW5zdFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRXZlbnRDb25zdHJ1Y3RvcihcbiAgICAgICAgZGlzcGF0Y2hDb25maWcsXG4gICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVJbnN0XG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbGVhc2VQb29sZWRFdmVudChldmVudCkge1xuICAgICAgdmFyIEV2ZW50Q29uc3RydWN0b3IgPSB0aGlzO1xuXG4gICAgICBpZiAoIShldmVudCBpbnN0YW5jZW9mIEV2ZW50Q29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRyeWluZyB0byByZWxlYXNlIGFuIGV2ZW50IGluc3RhbmNlIGludG8gYSBwb29sIG9mIGEgZGlmZmVyZW50IHR5cGUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQuZGVzdHJ1Y3RvcigpO1xuXG4gICAgICBpZiAoRXZlbnRDb25zdHJ1Y3Rvci5ldmVudFBvb2wubGVuZ3RoIDwgRVZFTlRfUE9PTF9TSVpFKSB7XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZEV2ZW50UG9vbGluZ1RvKEV2ZW50Q29uc3RydWN0b3IpIHtcbiAgICAgIEV2ZW50Q29uc3RydWN0b3IuZ2V0UG9vbGVkID0gY3JlYXRlT3JHZXRQb29sZWRFdmVudDtcbiAgICAgIEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sID0gW107XG4gICAgICBFdmVudENvbnN0cnVjdG9yLnJlbGVhc2UgPSByZWxlYXNlUG9vbGVkRXZlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRvdWNoSGlzdG9yeWAgaXNuJ3QgYWN0dWFsbHkgb24gdGhlIG5hdGl2ZSBldmVudCwgYnV0IHB1dHRpbmcgaXQgaW4gdGhlXG4gICAgICogaW50ZXJmYWNlIHdpbGwgZW5zdXJlIHRoYXQgaXQgaXMgY2xlYW5lZCB1cCB3aGVuIHBvb2xlZC9kZXN0cm95ZWQuIFRoZVxuICAgICAqIGBSZXNwb25kZXJFdmVudFBsdWdpbmAgd2lsbCBwb3B1bGF0ZSBpdCBhcHByb3ByaWF0ZWx5LlxuICAgICAqL1xuXG4gICAgdmFyIFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgICAgIHRvdWNoSGlzdG9yeTogZnVuY3Rpb24gKG5hdGl2ZUV2ZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsOyAvLyBBY3R1YWxseSBkb2Vzbid0IGV2ZW4gbG9vayBhdCB0aGUgbmF0aXZlIGV2ZW50LlxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIFRPUF9UT1VDSF9TVEFSVCA9IFwidG9wVG91Y2hTdGFydFwiO1xuICAgIHZhciBUT1BfVE9VQ0hfTU9WRSA9IFwidG9wVG91Y2hNb3ZlXCI7XG4gICAgdmFyIFRPUF9UT1VDSF9FTkQgPSBcInRvcFRvdWNoRW5kXCI7XG4gICAgdmFyIFRPUF9UT1VDSF9DQU5DRUwgPSBcInRvcFRvdWNoQ2FuY2VsXCI7XG4gICAgdmFyIFRPUF9TQ1JPTEwgPSBcInRvcFNjcm9sbFwiO1xuICAgIHZhciBUT1BfU0VMRUNUSU9OX0NIQU5HRSA9IFwidG9wU2VsZWN0aW9uQ2hhbmdlXCI7XG4gICAgZnVuY3Rpb24gaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgICAgIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IFRPUF9UT1VDSF9TVEFSVDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNNb3ZlaXNoKHRvcExldmVsVHlwZSkge1xuICAgICAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0gVE9QX1RPVUNIX01PVkU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRW5kaXNoKHRvcExldmVsVHlwZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdG9wTGV2ZWxUeXBlID09PSBUT1BfVE9VQ0hfRU5EIHx8IHRvcExldmVsVHlwZSA9PT0gVE9QX1RPVUNIX0NBTkNFTFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHN0YXJ0RGVwZW5kZW5jaWVzID0gW1RPUF9UT1VDSF9TVEFSVF07XG4gICAgdmFyIG1vdmVEZXBlbmRlbmNpZXMgPSBbVE9QX1RPVUNIX01PVkVdO1xuICAgIHZhciBlbmREZXBlbmRlbmNpZXMgPSBbVE9QX1RPVUNIX0NBTkNFTCwgVE9QX1RPVUNIX0VORF07XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIHBvc2l0aW9uIGFuZCB0aW1lIG9mIGVhY2ggYWN0aXZlIHRvdWNoIGJ5IGB0b3VjaC5pZGVudGlmaWVyYC4gV2VcbiAgICAgKiBzaG91bGQgdHlwaWNhbGx5IG9ubHkgc2VlIElEcyBpbiB0aGUgcmFuZ2Ugb2YgMS0yMCBiZWNhdXNlIElEcyBnZXQgcmVjeWNsZWRcbiAgICAgKiB3aGVuIHRvdWNoZXMgZW5kIGFuZCBzdGFydCBhZ2Fpbi5cbiAgICAgKi9cblxuICAgIHZhciBNQVhfVE9VQ0hfQkFOSyA9IDIwO1xuICAgIHZhciB0b3VjaEJhbmsgPSBbXTtcbiAgICB2YXIgdG91Y2hIaXN0b3J5ID0ge1xuICAgICAgdG91Y2hCYW5rOiB0b3VjaEJhbmssXG4gICAgICBudW1iZXJBY3RpdmVUb3VjaGVzOiAwLFxuICAgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgYWN0aXZlIHRvdWNoLCB3ZSByZW1lbWJlciBpdHMgbG9jYXRpb24uIFRoaXMgcHJldmVudHNcbiAgICAgIC8vIHVzIGhhdmluZyB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZSB0b3VjaGVzIGFsbCB0aGUgdGltZSBpbiB0aGUgbW9zdFxuICAgICAgLy8gY29tbW9uIGNhc2UuXG4gICAgICBpbmRleE9mU2luZ2xlQWN0aXZlVG91Y2g6IC0xLFxuICAgICAgbW9zdFJlY2VudFRpbWVTdGFtcDogMFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCkge1xuICAgICAgLy8gVGhlIGxlZ2FjeSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBcInRpbWVTdGFtcFwiLCB3aGljaCBoYXMgYmVlblxuICAgICAgLy8gcmVuYW1lZCB0byBcInRpbWVzdGFtcFwiLiBMZXQgYm90aCB3b3JrIGZvciBub3cgd2hpbGUgd2UgaXJvbiBpdCBvdXRcbiAgICAgIC8vIFRPRE8gKGV2dik6IHJlbmFtZSB0aW1lU3RhbXAgdG8gdGltZXN0YW1wIGluIGludGVybmFsIGNvZGVcbiAgICAgIHJldHVybiB0b3VjaC50aW1lU3RhbXAgfHwgdG91Y2gudGltZXN0YW1wO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUT0RPOiBJbnN0ZWFkIG9mIG1ha2luZyBnZXN0dXJlcyByZWNvbXB1dGUgZmlsdGVyZWQgdmVsb2NpdHksIHdlIGNvdWxkXG4gICAgICogaW5jbHVkZSBhIGJ1aWx0IGluIHZlbG9jaXR5IGNvbXB1dGF0aW9uIHRoYXQgY2FuIGJlIHJldXNlZCBnbG9iYWxseS5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRvdWNoUmVjb3JkKHRvdWNoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3VjaEFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgc3RhcnRQYWdlWDogdG91Y2gucGFnZVgsXG4gICAgICAgIHN0YXJ0UGFnZVk6IHRvdWNoLnBhZ2VZLFxuICAgICAgICBzdGFydFRpbWVTdGFtcDogdGltZXN0YW1wRm9yVG91Y2godG91Y2gpLFxuICAgICAgICBjdXJyZW50UGFnZVg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICBjdXJyZW50UGFnZVk6IHRvdWNoLnBhZ2VZLFxuICAgICAgICBjdXJyZW50VGltZVN0YW1wOiB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCksXG4gICAgICAgIHByZXZpb3VzUGFnZVg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICBwcmV2aW91c1BhZ2VZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgcHJldmlvdXNUaW1lU3RhbXA6IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNldFRvdWNoUmVjb3JkKHRvdWNoUmVjb3JkLCB0b3VjaCkge1xuICAgICAgdG91Y2hSZWNvcmQudG91Y2hBY3RpdmUgPSB0cnVlO1xuICAgICAgdG91Y2hSZWNvcmQuc3RhcnRQYWdlWCA9IHRvdWNoLnBhZ2VYO1xuICAgICAgdG91Y2hSZWNvcmQuc3RhcnRQYWdlWSA9IHRvdWNoLnBhZ2VZO1xuICAgICAgdG91Y2hSZWNvcmQuc3RhcnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCk7XG4gICAgICB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVggPSB0b3VjaC5wYWdlWDtcbiAgICAgIHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWSA9IHRvdWNoLnBhZ2VZO1xuICAgICAgdG91Y2hSZWNvcmQuY3VycmVudFRpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKTtcbiAgICAgIHRvdWNoUmVjb3JkLnByZXZpb3VzUGFnZVggPSB0b3VjaC5wYWdlWDtcbiAgICAgIHRvdWNoUmVjb3JkLnByZXZpb3VzUGFnZVkgPSB0b3VjaC5wYWdlWTtcbiAgICAgIHRvdWNoUmVjb3JkLnByZXZpb3VzVGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFRvdWNoSWRlbnRpZmllcihfcmVmKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IF9yZWYuaWRlbnRpZmllcjtcblxuICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUb3VjaCBvYmplY3QgaXMgbWlzc2luZyBpZGVudGlmaWVyLlwiKTtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAoaWRlbnRpZmllciA+IE1BWF9UT1VDSF9CQU5LKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIlRvdWNoIGlkZW50aWZpZXIgJXMgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gc3VwcG9ydGVkICVzIHdoaWNoIGNhdXNlcyBcIiArXG4gICAgICAgICAgICAgIFwicGVyZm9ybWFuY2UgaXNzdWVzIGJhY2tmaWxsaW5nIGFycmF5IGxvY2F0aW9ucyBmb3IgYWxsIG9mIHRoZSBpbmRpY2VzLlwiLFxuICAgICAgICAgICAgaWRlbnRpZmllcixcbiAgICAgICAgICAgIE1BWF9UT1VDSF9CQU5LXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWNvcmRUb3VjaFN0YXJ0KHRvdWNoKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGdldFRvdWNoSWRlbnRpZmllcih0b3VjaCk7XG4gICAgICB2YXIgdG91Y2hSZWNvcmQgPSB0b3VjaEJhbmtbaWRlbnRpZmllcl07XG5cbiAgICAgIGlmICh0b3VjaFJlY29yZCkge1xuICAgICAgICByZXNldFRvdWNoUmVjb3JkKHRvdWNoUmVjb3JkLCB0b3VjaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3VjaEJhbmtbaWRlbnRpZmllcl0gPSBjcmVhdGVUb3VjaFJlY29yZCh0b3VjaCk7XG4gICAgICB9XG5cbiAgICAgIHRvdWNoSGlzdG9yeS5tb3N0UmVjZW50VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY29yZFRvdWNoTW92ZSh0b3VjaCkge1xuICAgICAgdmFyIHRvdWNoUmVjb3JkID0gdG91Y2hCYW5rW2dldFRvdWNoSWRlbnRpZmllcih0b3VjaCldO1xuXG4gICAgICBpZiAodG91Y2hSZWNvcmQpIHtcbiAgICAgICAgdG91Y2hSZWNvcmQudG91Y2hBY3RpdmUgPSB0cnVlO1xuICAgICAgICB0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VYID0gdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VYO1xuICAgICAgICB0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VZID0gdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZO1xuICAgICAgICB0b3VjaFJlY29yZC5wcmV2aW91c1RpbWVTdGFtcCA9IHRvdWNoUmVjb3JkLmN1cnJlbnRUaW1lU3RhbXA7XG4gICAgICAgIHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWCA9IHRvdWNoLnBhZ2VYO1xuICAgICAgICB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVkgPSB0b3VjaC5wYWdlWTtcbiAgICAgICAgdG91Y2hSZWNvcmQuY3VycmVudFRpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKTtcbiAgICAgICAgdG91Y2hIaXN0b3J5Lm1vc3RSZWNlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQ2Fubm90IHJlY29yZCB0b3VjaCBtb3ZlIHdpdGhvdXQgYSB0b3VjaCBzdGFydC5cXG5cIiArXG4gICAgICAgICAgICAgIFwiVG91Y2ggTW92ZTogJXNcXG5cIiArXG4gICAgICAgICAgICAgIFwiVG91Y2ggQmFuazogJXNcIixcbiAgICAgICAgICAgIHByaW50VG91Y2godG91Y2gpLFxuICAgICAgICAgICAgcHJpbnRUb3VjaEJhbmsoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWNvcmRUb3VjaEVuZCh0b3VjaCkge1xuICAgICAgdmFyIHRvdWNoUmVjb3JkID0gdG91Y2hCYW5rW2dldFRvdWNoSWRlbnRpZmllcih0b3VjaCldO1xuXG4gICAgICBpZiAodG91Y2hSZWNvcmQpIHtcbiAgICAgICAgdG91Y2hSZWNvcmQudG91Y2hBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWCA9IHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWDtcbiAgICAgICAgdG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWSA9IHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWTtcbiAgICAgICAgdG91Y2hSZWNvcmQucHJldmlvdXNUaW1lU3RhbXAgPSB0b3VjaFJlY29yZC5jdXJyZW50VGltZVN0YW1wO1xuICAgICAgICB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVggPSB0b3VjaC5wYWdlWDtcbiAgICAgICAgdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZID0gdG91Y2gucGFnZVk7XG4gICAgICAgIHRvdWNoUmVjb3JkLmN1cnJlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCk7XG4gICAgICAgIHRvdWNoSGlzdG9yeS5tb3N0UmVjZW50VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIkNhbm5vdCByZWNvcmQgdG91Y2ggZW5kIHdpdGhvdXQgYSB0b3VjaCBzdGFydC5cXG5cIiArXG4gICAgICAgICAgICAgIFwiVG91Y2ggRW5kOiAlc1xcblwiICtcbiAgICAgICAgICAgICAgXCJUb3VjaCBCYW5rOiAlc1wiLFxuICAgICAgICAgICAgcHJpbnRUb3VjaCh0b3VjaCksXG4gICAgICAgICAgICBwcmludFRvdWNoQmFuaygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByaW50VG91Y2godG91Y2gpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkZW50aWZpZXI6IHRvdWNoLmlkZW50aWZpZXIsXG4gICAgICAgIHBhZ2VYOiB0b3VjaC5wYWdlWCxcbiAgICAgICAgcGFnZVk6IHRvdWNoLnBhZ2VZLFxuICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJpbnRUb3VjaEJhbmsoKSB7XG4gICAgICB2YXIgcHJpbnRlZCA9IEpTT04uc3RyaW5naWZ5KHRvdWNoQmFuay5zbGljZSgwLCBNQVhfVE9VQ0hfQkFOSykpO1xuXG4gICAgICBpZiAodG91Y2hCYW5rLmxlbmd0aCA+IE1BWF9UT1VDSF9CQU5LKSB7XG4gICAgICAgIHByaW50ZWQgKz0gXCIgKG9yaWdpbmFsIHNpemU6IFwiICsgdG91Y2hCYW5rLmxlbmd0aCArIFwiKVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJpbnRlZDtcbiAgICB9XG5cbiAgICB2YXIgaW5zdHJ1bWVudGF0aW9uQ2FsbGJhY2s7XG4gICAgdmFyIFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciB3aGljaCBjYW4gYmUgdXNlZCB0byBpbnN0cnVtZW50IGV2ZXJ5IHRvdWNoIGV2ZW50LlxuICAgICAgICovXG4gICAgICBpbnN0cnVtZW50OiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgICByZWNvcmRUb3VjaFRyYWNrOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgIGluc3RydW1lbnRhdGlvbkNhbGxiYWNrKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpKSB7XG4gICAgICAgICAgbmF0aXZlRXZlbnQuY2hhbmdlZFRvdWNoZXMuZm9yRWFjaChyZWNvcmRUb3VjaE1vdmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSkge1xuICAgICAgICAgIG5hdGl2ZUV2ZW50LmNoYW5nZWRUb3VjaGVzLmZvckVhY2gocmVjb3JkVG91Y2hTdGFydCk7XG4gICAgICAgICAgdG91Y2hIaXN0b3J5Lm51bWJlckFjdGl2ZVRvdWNoZXMgPSBuYXRpdmVFdmVudC50b3VjaGVzLmxlbmd0aDtcblxuICAgICAgICAgIGlmICh0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcyA9PT0gMSkge1xuICAgICAgICAgICAgdG91Y2hIaXN0b3J5LmluZGV4T2ZTaW5nbGVBY3RpdmVUb3VjaCA9XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LnRvdWNoZXNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNFbmRpc2godG9wTGV2ZWxUeXBlKSkge1xuICAgICAgICAgIG5hdGl2ZUV2ZW50LmNoYW5nZWRUb3VjaGVzLmZvckVhY2gocmVjb3JkVG91Y2hFbmQpO1xuICAgICAgICAgIHRvdWNoSGlzdG9yeS5udW1iZXJBY3RpdmVUb3VjaGVzID0gbmF0aXZlRXZlbnQudG91Y2hlcy5sZW5ndGg7XG5cbiAgICAgICAgICBpZiAodG91Y2hIaXN0b3J5Lm51bWJlckFjdGl2ZVRvdWNoZXMgPT09IDEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG91Y2hCYW5rLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciB0b3VjaFRyYWNrVG9DaGVjayA9IHRvdWNoQmFua1tpXTtcblxuICAgICAgICAgICAgICBpZiAodG91Y2hUcmFja1RvQ2hlY2sgIT0gbnVsbCAmJiB0b3VjaFRyYWNrVG9DaGVjay50b3VjaEFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRvdWNoSGlzdG9yeS5pbmRleE9mU2luZ2xlQWN0aXZlVG91Y2ggPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGFjdGl2ZVJlY29yZCA9XG4gICAgICAgICAgICAgICAgdG91Y2hCYW5rW3RvdWNoSGlzdG9yeS5pbmRleE9mU2luZ2xlQWN0aXZlVG91Y2hdO1xuXG4gICAgICAgICAgICAgIGlmIChhY3RpdmVSZWNvcmQgPT0gbnVsbCB8fCAhYWN0aXZlUmVjb3JkLnRvdWNoQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoXCJDYW5ub3QgZmluZCBzaW5nbGUgYWN0aXZlIHRvdWNoLlwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvdWNoSGlzdG9yeTogdG91Y2hIaXN0b3J5XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFjY3VtdWxhdGVzIGl0ZW1zIHRoYXQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gY29uc2VydmUgbWVtb3J5IGJ5IGF2b2lkaW5nIGFycmF5IGFsbG9jYXRpb25zLlxuICAgICAqXG4gICAgICogQHJldHVybiB7KnxhcnJheTwqPn0gQW4gYWNjdW11bGF0aW9uIG9mIGl0ZW1zLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZShjdXJyZW50LCBuZXh0KSB7XG4gICAgICBpZiAobmV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImFjY3VtdWxhdGUoLi4uKTogQWNjdW11bGF0ZWQgaXRlbXMgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgIH0gLy8gQm90aCBhcmUgbm90IGVtcHR5LiBXYXJuaW5nOiBOZXZlciBjYWxsIHguY29uY2F0KHkpIHdoZW4geW91IGFyZSBub3RcbiAgICAgIC8vIGNlcnRhaW4gdGhhdCB4IGlzIGFuIEFycmF5ICh4IGNvdWxkIGJlIGEgc3RyaW5nIHdpdGggY29uY2F0IG1ldGhvZCkuXG5cbiAgICAgIGlmIChpc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gaWYgYGN1cnJlbnRgIGlzIGBUYCBhbmQgYFRgIGFuIGFycmF5LFxuICAgICAgICAgKiBgaXNBcnJheWAgbWlnaHQgcmVmaW5lIHRvIHRoZSBhcnJheSBlbGVtZW50IHR5cGUgb2YgYFRgICovXG4gICAgICAgIHJldHVybiBjdXJyZW50LmNvbmNhdChuZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV4dCkpIHtcbiAgICAgICAgLyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSB1bnNvdW5kIGlmIGBuZXh0YCBpcyBgVGAgYW5kIGBUYCBhbiBhcnJheSxcbiAgICAgICAgICogYGlzQXJyYXlgIG1pZ2h0IHJlZmluZSB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlIG9mIGBUYCAqL1xuICAgICAgICByZXR1cm4gW2N1cnJlbnRdLmNvbmNhdChuZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtjdXJyZW50LCBuZXh0XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBY2N1bXVsYXRlcyBpdGVtcyB0aGF0IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIGludG8gdGhlIGZpcnN0IG9uZS4gVGhpc1xuICAgICAqIGlzIHVzZWQgdG8gY29uc2VydmUgbWVtb3J5IGJ5IGF2b2lkaW5nIGFycmF5IGFsbG9jYXRpb25zLCBhbmQgdGh1cyBzYWNyaWZpY2VzXG4gICAgICogQVBJIGNsZWFubmVzcy4gU2luY2UgYGN1cnJlbnRgIGNhbiBiZSBudWxsIGJlZm9yZSBiZWluZyBwYXNzZWQgaW4gYW5kIG5vdFxuICAgICAqIG51bGwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGFzc2lnbiBpdCBiYWNrIHRvIGBjdXJyZW50YDpcbiAgICAgKlxuICAgICAqIGBhID0gYWNjdW11bGF0ZUludG8oYSwgYik7YFxuICAgICAqXG4gICAgICogVGhpcyBBUEkgc2hvdWxkIGJlIHNwYXJpbmdseSB1c2VkLiBUcnkgYGFjY3VtdWxhdGVgIGZvciBzb21ldGhpbmcgY2xlYW5lci5cbiAgICAgKlxuICAgICAqIEByZXR1cm4geyp8YXJyYXk8Kj59IEFuIGFjY3VtdWxhdGlvbiBvZiBpdGVtcy5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVJbnRvKGN1cnJlbnQsIG5leHQpIHtcbiAgICAgIGlmIChuZXh0ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiYWNjdW11bGF0ZUludG8oLi4uKTogQWNjdW11bGF0ZWQgaXRlbXMgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgIH0gLy8gQm90aCBhcmUgbm90IGVtcHR5LiBXYXJuaW5nOiBOZXZlciBjYWxsIHguY29uY2F0KHkpIHdoZW4geW91IGFyZSBub3RcbiAgICAgIC8vIGNlcnRhaW4gdGhhdCB4IGlzIGFuIEFycmF5ICh4IGNvdWxkIGJlIGEgc3RyaW5nIHdpdGggY29uY2F0IG1ldGhvZCkuXG5cbiAgICAgIGlmIChpc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KG5leHQpKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGBpc0FycmF5YCBkb2VzIG5vdCBlbnN1cmUgYXJyYXkgaXMgbXV0YWJsZVxuICAgICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICAgICAgICBjdXJyZW50LnB1c2guYXBwbHkoY3VycmVudCwgbmV4dCk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGBpc0FycmF5YCBkb2VzIG5vdCBlbnN1cmUgYXJyYXkgaXMgbXV0YWJsZVxuXG4gICAgICAgIGN1cnJlbnQucHVzaChuZXh0KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KG5leHQpKSB7XG4gICAgICAgIC8vIEEgYml0IHRvbyBkYW5nZXJvdXMgdG8gbXV0YXRlIGBuZXh0YC5cblxuICAgICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIHVuc291bmQgaWYgYG5leHRgIGlzIGBUYCBhbmQgYFRgIGFuIGFycmF5LFxuICAgICAgICAgKiBgaXNBcnJheWAgbWlnaHQgcmVmaW5lIHRvIHRoZSBhcnJheSBlbGVtZW50IHR5cGUgb2YgYFRgICovXG4gICAgICAgIHJldHVybiBbY3VycmVudF0uY29uY2F0KG5leHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2N1cnJlbnQsIG5leHRdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBhbiBcImFjY3VtdWxhdGlvblwiIG9mIGl0ZW1zIHdoaWNoIGlzIGVpdGhlciBhbiBBcnJheSBvclxuICAgICAqIGEgc2luZ2xlIGl0ZW0uIFVzZWZ1bCB3aGVuIHBhaXJlZCB3aXRoIHRoZSBgYWNjdW11bGF0ZWAgbW9kdWxlLiBUaGlzIGlzIGFcbiAgICAgKiBzaW1wbGUgdXRpbGl0eSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gYWJvdXQgYSBjb2xsZWN0aW9uIG9mIGl0ZW1zLCBidXRcbiAgICAgKiBoYW5kbGluZyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gKGFuZCB3ZSBkbyBub3QgbmVlZCB0b1xuICAgICAqIGFsbG9jYXRlIGFuIGFycmF5KS5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayBpbnZva2VkIHdpdGggZWFjaCBlbGVtZW50IG9yIGEgY29sbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gez99IFtzY29wZV0gU2NvcGUgdXNlZCBhcyBgdGhpc2AgaW4gYSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JFYWNoQWNjdW11bGF0ZWQoYXJyLCBjYiwgc2NvcGUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gaWYgYFRgIGlzIGFuIGFycmF5LCBgY2JgIGNhbm5vdCBiZSBjYWxsZWRcbiAgICAgICAgYXJyLmZvckVhY2goY2IsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJyKSB7XG4gICAgICAgIGNiLmNhbGwoc2NvcGUsIGFycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIEZ1bmN0aW9uQ29tcG9uZW50ID0gMDtcbiAgICB2YXIgQ2xhc3NDb21wb25lbnQgPSAxO1xuICAgIHZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG4gICAgdmFyIEhvc3RSb290ID0gMzsgLy8gUm9vdCBvZiBhIGhvc3QgdHJlZS4gQ291bGQgYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIG5vZGUuXG5cbiAgICB2YXIgSG9zdFBvcnRhbCA9IDQ7IC8vIEEgc3VidHJlZS4gQ291bGQgYmUgYW4gZW50cnkgcG9pbnQgdG8gYSBkaWZmZXJlbnQgcmVuZGVyZXIuXG5cbiAgICB2YXIgSG9zdENvbXBvbmVudCA9IDU7XG4gICAgdmFyIEhvc3RUZXh0ID0gNjtcbiAgICB2YXIgRnJhZ21lbnQgPSA3O1xuICAgIHZhciBNb2RlID0gODtcbiAgICB2YXIgQ29udGV4dENvbnN1bWVyID0gOTtcbiAgICB2YXIgQ29udGV4dFByb3ZpZGVyID0gMTA7XG4gICAgdmFyIEZvcndhcmRSZWYgPSAxMTtcbiAgICB2YXIgUHJvZmlsZXIgPSAxMjtcbiAgICB2YXIgU3VzcGVuc2VDb21wb25lbnQgPSAxMztcbiAgICB2YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xuICAgIHZhciBTaW1wbGVNZW1vQ29tcG9uZW50ID0gMTU7XG4gICAgdmFyIExhenlDb21wb25lbnQgPSAxNjtcbiAgICB2YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG4gICAgdmFyIERlaHlkcmF0ZWRGcmFnbWVudCA9IDE4O1xuICAgIHZhciBTdXNwZW5zZUxpc3RDb21wb25lbnQgPSAxOTtcbiAgICB2YXIgU2NvcGVDb21wb25lbnQgPSAyMTtcbiAgICB2YXIgT2Zmc2NyZWVuQ29tcG9uZW50ID0gMjI7XG4gICAgdmFyIExlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IDIzO1xuICAgIHZhciBDYWNoZUNvbXBvbmVudCA9IDI0O1xuICAgIHZhciBUcmFjaW5nTWFya2VyQ29tcG9uZW50ID0gMjU7XG4gICAgdmFyIEhvc3RIb2lzdGFibGUgPSAyNjtcbiAgICB2YXIgSG9zdFNpbmdsZXRvbiA9IDI3O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2YgZWxlbWVudCB0aGF0IHNob3VsZCByZXNwb25kIHRvIHRvdWNoL21vdmUgdHlwZXMgb2YgaW50ZXJhY3Rpb25zLFxuICAgICAqIGFzIGluZGljYXRlZCBleHBsaWNpdGx5IGJ5IHJlbGV2YW50IGNhbGxiYWNrcy5cbiAgICAgKi9cblxuICAgIHZhciByZXNwb25kZXJJbnN0ID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBDb3VudCBvZiBjdXJyZW50IHRvdWNoZXMuIEEgdGV4dElucHV0IHNob3VsZCBiZWNvbWUgcmVzcG9uZGVyIGlmZiB0aGVcbiAgICAgKiBzZWxlY3Rpb24gY2hhbmdlcyB3aGlsZSB0aGVyZSBpcyBhIHRvdWNoIG9uIHRoZSBzY3JlZW4uXG4gICAgICovXG5cbiAgICB2YXIgdHJhY2tlZFRvdWNoQ291bnQgPSAwO1xuXG4gICAgZnVuY3Rpb24gY2hhbmdlUmVzcG9uZGVyKG5leHRSZXNwb25kZXJJbnN0LCBibG9ja0hvc3RSZXNwb25kZXIpIHtcbiAgICAgIHZhciBvbGRSZXNwb25kZXJJbnN0ID0gcmVzcG9uZGVySW5zdDtcbiAgICAgIHJlc3BvbmRlckluc3QgPSBuZXh0UmVzcG9uZGVySW5zdDtcblxuICAgICAgaWYgKFJlc3BvbmRlckV2ZW50UGx1Z2luLkdsb2JhbFJlc3BvbmRlckhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgUmVzcG9uZGVyRXZlbnRQbHVnaW4uR2xvYmFsUmVzcG9uZGVySGFuZGxlci5vbkNoYW5nZShcbiAgICAgICAgICBvbGRSZXNwb25kZXJJbnN0LFxuICAgICAgICAgIG5leHRSZXNwb25kZXJJbnN0LFxuICAgICAgICAgIGJsb2NrSG9zdFJlc3BvbmRlclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBldmVudFR5cGVzID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBPbiBhIGB0b3VjaFN0YXJ0YC9gbW91c2VEb3duYCwgaXMgaXQgZGVzaXJlZCB0aGF0IHRoaXMgZWxlbWVudCBiZWNvbWUgdGhlXG4gICAgICAgKiByZXNwb25kZXI/XG4gICAgICAgKi9cbiAgICAgIHN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyOiB7XG4gICAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICAgICAgYnViYmxlZDogXCJvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyXCIsXG4gICAgICAgICAgY2FwdHVyZWQ6IFwib25TdGFydFNob3VsZFNldFJlc3BvbmRlckNhcHR1cmVcIlxuICAgICAgICB9LFxuICAgICAgICBkZXBlbmRlbmNpZXM6IHN0YXJ0RGVwZW5kZW5jaWVzXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIE9uIGEgYHNjcm9sbGAsIGlzIGl0IGRlc2lyZWQgdGhhdCB0aGlzIGVsZW1lbnQgYmVjb21lIHRoZSByZXNwb25kZXI/IFRoaXNcbiAgICAgICAqIGlzIHVzdWFsbHkgbm90IG5lZWRlZCwgYnV0IHNob3VsZCBiZSB1c2VkIHRvIHJldHJvYWN0aXZlbHkgaW5mZXIgdGhhdCBhXG4gICAgICAgKiBgdG91Y2hTdGFydGAgaGFkIG9jY3VycmVkIGR1cmluZyBtb21lbnR1bSBzY3JvbGwuIER1cmluZyBhIG1vbWVudHVtIHNjcm9sbCxcbiAgICAgICAqIGEgdG91Y2ggc3RhcnQgd2lsbCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHNjcm9sbCBldmVudCBpZiB0aGUgdmlldyBpc1xuICAgICAgICogY3VycmVudGx5IHNjcm9sbGluZy5cbiAgICAgICAqXG4gICAgICAgKiBUT0RPOiBUaGlzIHNob3VsZG4ndCBidWJibGUuXG4gICAgICAgKi9cbiAgICAgIHNjcm9sbFNob3VsZFNldFJlc3BvbmRlcjoge1xuICAgICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgICAgIGJ1YmJsZWQ6IFwib25TY3JvbGxTaG91bGRTZXRSZXNwb25kZXJcIixcbiAgICAgICAgICBjYXB0dXJlZDogXCJvblNjcm9sbFNob3VsZFNldFJlc3BvbmRlckNhcHR1cmVcIlxuICAgICAgICB9LFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtUT1BfU0NST0xMXVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBPbiB0ZXh0IHNlbGVjdGlvbiBjaGFuZ2UsIHNob3VsZCB0aGlzIGVsZW1lbnQgYmVjb21lIHRoZSByZXNwb25kZXI/IFRoaXNcbiAgICAgICAqIGlzIG5lZWRlZCBmb3IgdGV4dCBpbnB1dHMgb3Igb3RoZXIgdmlld3Mgd2l0aCBuYXRpdmUgc2VsZWN0aW9uLCBzbyB0aGVcbiAgICAgICAqIEpTIHZpZXcgY2FuIGNsYWltIHRoZSByZXNwb25kZXIuXG4gICAgICAgKlxuICAgICAgICogVE9ETzogVGhpcyBzaG91bGRuJ3QgYnViYmxlLlxuICAgICAgICovXG4gICAgICBzZWxlY3Rpb25DaGFuZ2VTaG91bGRTZXRSZXNwb25kZXI6IHtcbiAgICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgICAgICBidWJibGVkOiBcIm9uU2VsZWN0aW9uQ2hhbmdlU2hvdWxkU2V0UmVzcG9uZGVyXCIsXG4gICAgICAgICAgY2FwdHVyZWQ6IFwib25TZWxlY3Rpb25DaGFuZ2VTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlXCJcbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbVE9QX1NFTEVDVElPTl9DSEFOR0VdXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIE9uIGEgYHRvdWNoTW92ZWAvYG1vdXNlTW92ZWAsIGlzIGl0IGRlc2lyZWQgdGhhdCB0aGlzIGVsZW1lbnQgYmVjb21lIHRoZVxuICAgICAgICogcmVzcG9uZGVyP1xuICAgICAgICovXG4gICAgICBtb3ZlU2hvdWxkU2V0UmVzcG9uZGVyOiB7XG4gICAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICAgICAgYnViYmxlZDogXCJvbk1vdmVTaG91bGRTZXRSZXNwb25kZXJcIixcbiAgICAgICAgICBjYXB0dXJlZDogXCJvbk1vdmVTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlXCJcbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBtb3ZlRGVwZW5kZW5jaWVzXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIERpcmVjdCByZXNwb25kZXIgZXZlbnRzIGRpc3BhdGNoZWQgZGlyZWN0bHkgdG8gcmVzcG9uZGVyLiBEbyBub3QgYnViYmxlLlxuICAgICAgICovXG4gICAgICByZXNwb25kZXJTdGFydDoge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyU3RhcnRcIixcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBzdGFydERlcGVuZGVuY2llc1xuICAgICAgfSxcbiAgICAgIHJlc3BvbmRlck1vdmU6IHtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlck1vdmVcIixcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBtb3ZlRGVwZW5kZW5jaWVzXG4gICAgICB9LFxuICAgICAgcmVzcG9uZGVyRW5kOiB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJFbmRcIixcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBlbmREZXBlbmRlbmNpZXNcbiAgICAgIH0sXG4gICAgICByZXNwb25kZXJSZWxlYXNlOiB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJSZWxlYXNlXCIsXG4gICAgICAgIGRlcGVuZGVuY2llczogZW5kRGVwZW5kZW5jaWVzXG4gICAgICB9LFxuICAgICAgcmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0OiB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3RcIixcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXVxuICAgICAgfSxcbiAgICAgIHJlc3BvbmRlckdyYW50OiB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJHcmFudFwiLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtdXG4gICAgICB9LFxuICAgICAgcmVzcG9uZGVyUmVqZWN0OiB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJSZWplY3RcIixcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXVxuICAgICAgfSxcbiAgICAgIHJlc3BvbmRlclRlcm1pbmF0ZToge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyVGVybWluYXRlXCIsXG4gICAgICAgIGRlcGVuZGVuY2llczogW11cbiAgICAgIH1cbiAgICB9OyAvLyBTdGFydCBvZiBpbmxpbmU6IHRoZSBiZWxvdyBmdW5jdGlvbnMgd2VyZSBpbmxpbmVkIGZyb21cbiAgICAvLyBFdmVudFByb3BhZ2F0b3IuanMsIGFzIHRoZXkgZGV2aWF0ZWQgZnJvbSBSZWFjdERPTSdzIG5ld2VyXG4gICAgLy8gaW1wbGVtZW50YXRpb25zLlxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50JDEoaW5zdCkge1xuICAgICAgZG8ge1xuICAgICAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgICAgICAvLyBUaGF0IGlzIGRlcGVuZGluZyBvbiBpZiB3ZSB3YW50IG5lc3RlZCBzdWJ0cmVlcyAobGF5ZXJzKSB0byBidWJibGVcbiAgICAgICAgLy8gZXZlbnRzIHRvIHRoZWlyIHBhcmVudC4gV2UgY291bGQgYWxzbyBnbyB0aHJvdWdoIHBhcmVudE5vZGUgb24gdGhlXG4gICAgICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgICAgIC8vIGRvIHRoZSBwb3J0YWwgZmVhdHVyZS5cbiAgICAgIH0gd2hpbGUgKGluc3QgJiYgaW5zdC50YWcgIT09IEhvc3RDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5zdCkge1xuICAgICAgICByZXR1cm4gaW5zdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gICAgICogZGlmZmVyZW50IHRyZWVzLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gICAgICB2YXIgZGVwdGhBID0gMDtcblxuICAgICAgZm9yICh2YXIgdGVtcEEgPSBpbnN0QTsgdGVtcEE7IHRlbXBBID0gZ2V0UGFyZW50JDEodGVtcEEpKSB7XG4gICAgICAgIGRlcHRoQSsrO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGVwdGhCID0gMDtcblxuICAgICAgZm9yICh2YXIgdGVtcEIgPSBpbnN0QjsgdGVtcEI7IHRlbXBCID0gZ2V0UGFyZW50JDEodGVtcEIpKSB7XG4gICAgICAgIGRlcHRoQisrO1xuICAgICAgfSAvLyBJZiBBIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cbiAgICAgIHdoaWxlIChkZXB0aEEgLSBkZXB0aEIgPiAwKSB7XG4gICAgICAgIGluc3RBID0gZ2V0UGFyZW50JDEoaW5zdEEpO1xuICAgICAgICBkZXB0aEEtLTtcbiAgICAgIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG4gICAgICB3aGlsZSAoZGVwdGhCIC0gZGVwdGhBID4gMCkge1xuICAgICAgICBpbnN0QiA9IGdldFBhcmVudCQxKGluc3RCKTtcbiAgICAgICAgZGVwdGhCLS07XG4gICAgICB9IC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuXG4gICAgICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgICAgIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgICAgIGlmIChpbnN0QSA9PT0gaW5zdEIgfHwgaW5zdEEgPT09IGluc3RCLmFsdGVybmF0ZSkge1xuICAgICAgICAgIHJldHVybiBpbnN0QTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc3RBID0gZ2V0UGFyZW50JDEoaW5zdEEpO1xuICAgICAgICBpbnN0QiA9IGdldFBhcmVudCQxKGluc3RCKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBpZiBBIGlzIGFuIGFuY2VzdG9yIG9mIEIuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBpc0FuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICAgICAgd2hpbGUgKGluc3RCKSB7XG4gICAgICAgIGlmIChpbnN0QSA9PT0gaW5zdEIgfHwgaW5zdEEgPT09IGluc3RCLmFsdGVybmF0ZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdEIgPSBnZXRQYXJlbnQkMShpbnN0Qik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltdWxhdGVzIHRoZSB0cmF2ZXJzYWwgb2YgYSB0d28tcGhhc2UsIGNhcHR1cmUvYnViYmxlIGV2ZW50IGRpc3BhdGNoLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gdHJhdmVyc2VUd29QaGFzZSQxKGluc3QsIGZuLCBhcmcpIHtcbiAgICAgIHZhciBwYXRoID0gW107XG5cbiAgICAgIHdoaWxlIChpbnN0KSB7XG4gICAgICAgIHBhdGgucHVzaChpbnN0KTtcbiAgICAgICAgaW5zdCA9IGdldFBhcmVudCQxKGluc3QpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaTtcblxuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGg7IGktLSA+IDA7ICkge1xuICAgICAgICBmbihwYXRoW2ldLCBcImNhcHR1cmVkXCIsIGFyZyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZuKHBhdGhbaV0sIFwiYnViYmxlZFwiLCBhcmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldExpc3RlbmVyJDEoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxKHN0YXRlTm9kZSk7XG5cbiAgICAgIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgICAgIGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBgXCIgK1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSArXG4gICAgICAgICAgICBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgK1xuICAgICAgICAgICAgdHlwZW9mIGxpc3RlbmVyICtcbiAgICAgICAgICAgIFwiYCB0eXBlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0ZW5lckF0UGhhc2UkMShpbnN0LCBldmVudCwgcHJvcGFnYXRpb25QaGFzZSkge1xuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPVxuICAgICAgICBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lc1twcm9wYWdhdGlvblBoYXNlXTtcbiAgICAgIHJldHVybiBnZXRMaXN0ZW5lciQxKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMkMShpbnN0LCBwaGFzZSwgZXZlbnQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFpbnN0KSB7XG4gICAgICAgICAgZXJyb3IoXCJEaXNwYXRjaGluZyBpbnN0IG11c3Qgbm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJBdFBoYXNlJDEoaW5zdCwgZXZlbnQsIHBoYXNlKTtcblxuICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IGFjY3VtdWxhdGVJbnRvKFxuICAgICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICApO1xuICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgICAgaW5zdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY2N1bXVsYXRlcyB3aXRob3V0IHJlZ2FyZCB0byBkaXJlY3Rpb24sIGRvZXMgbm90IGxvb2sgZm9yIHBoYXNlZFxuICAgICAqIHJlZ2lzdHJhdGlvbiBuYW1lcy4gU2FtZSBhcyBgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGVgIGJ1dCB3aXRob3V0XG4gICAgICogcmVxdWlyaW5nIHRoYXQgdGhlIGBkaXNwYXRjaE1hcmtlcmAgYmUgdGhlIHNhbWUgYXMgdGhlIGRpc3BhdGNoZWQgSUQuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlzcGF0Y2hlcyQxKGluc3QsIGlnbm9yZWREaXJlY3Rpb24sIGV2ZW50KSB7XG4gICAgICBpZiAoaW5zdCAmJiBldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZTtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIkMShpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgICAgICAgIGxpc3RlbmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICAgIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyxcbiAgICAgICAgICAgIGluc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFjY3VtdWxhdGVzIGRpc3BhdGNoZXMgb24gYW4gYFN5bnRoZXRpY0V2ZW50YCwgYnV0IG9ubHkgZm9yIHRoZVxuICAgICAqIGBkaXNwYXRjaE1hcmtlcmAuXG4gICAgICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlJDEoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICAgIGFjY3VtdWxhdGVEaXNwYXRjaGVzJDEoZXZlbnQuX3RhcmdldEluc3QsIG51bGwsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyQxKGV2ZW50cykge1xuICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgICB2YXIgdGFyZ2V0SW5zdCA9IGV2ZW50Ll90YXJnZXRJbnN0O1xuICAgICAgICB2YXIgcGFyZW50SW5zdCA9IHRhcmdldEluc3QgPyBnZXRQYXJlbnQkMSh0YXJnZXRJbnN0KSA6IG51bGw7XG4gICAgICAgIHRyYXZlcnNlVHdvUGhhc2UkMShcbiAgICAgICAgICBwYXJlbnRJbnN0LFxuICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMkMSxcbiAgICAgICAgICBldmVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0KGV2ZW50cykge1xuICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUkMShldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIHRyYXZlcnNlVHdvUGhhc2UkMShcbiAgICAgICAgICBldmVudC5fdGFyZ2V0SW5zdCxcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEsXG4gICAgICAgICAgZXZlbnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzJDEoZXZlbnRzKSB7XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlJDEpO1xuICAgIH0gLy8gRW5kIG9mIGlubGluZVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBSZXNwb25kZXIgU3lzdGVtOlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKlxuICAgICAqIC0gQSBnbG9iYWwsIHNvbGl0YXJ5IFwiaW50ZXJhY3Rpb24gbG9ja1wiIG9uIGEgdmlldy5cbiAgICAgKiAtIElmIGEgbm9kZSBiZWNvbWVzIHRoZSByZXNwb25kZXIsIGl0IHNob3VsZCBjb252ZXkgdmlzdWFsIGZlZWRiYWNrXG4gICAgICogICBpbW1lZGlhdGVseSB0byBpbmRpY2F0ZSBzbywgZWl0aGVyIGJ5IGhpZ2hsaWdodGluZyBvciBtb3ZpbmcgYWNjb3JkaW5nbHkuXG4gICAgICogLSBUbyBiZSB0aGUgcmVzcG9uZGVyIG1lYW5zLCB0aGF0IHRvdWNoZXMgYXJlIGV4Y2x1c2l2ZWx5IGltcG9ydGFudCB0byB0aGF0XG4gICAgICogICByZXNwb25kZXIgdmlldywgYW5kIG5vIG90aGVyIHZpZXcuXG4gICAgICogLSBXaGlsZSB0b3VjaGVzIGFyZSBzdGlsbCBvY2N1cnJpbmcsIHRoZSByZXNwb25kZXIgbG9jayBjYW4gYmUgdHJhbnNmZXJyZWQgdG9cbiAgICAgKiAgIGEgbmV3IHZpZXcsIGJ1dCBvbmx5IHRvIGluY3JlYXNpbmdseSBcImhpZ2hlclwiIHZpZXdzIChtZWFuaW5nIGFuY2VzdG9ycyBvZlxuICAgICAqICAgdGhlIGN1cnJlbnQgcmVzcG9uZGVyKS5cbiAgICAgKlxuICAgICAqIFJlc3BvbmRlciBiZWluZyBncmFudGVkOlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqXG4gICAgICogLSBUb3VjaCBzdGFydHMsIG1vdmVzLCBhbmQgc2Nyb2xscyBjYW4gY2F1c2UgYW4gSUQgdG8gYmVjb21lIHRoZSByZXNwb25kZXIuXG4gICAgICogLSBXZSBjYXB0dXJlL2J1YmJsZSBgc3RhcnRTaG91bGRTZXRSZXNwb25kZXJgL2Btb3ZlU2hvdWxkU2V0UmVzcG9uZGVyYCB0b1xuICAgICAqICAgdGhlIFwiYXBwcm9wcmlhdGUgcGxhY2VcIi5cbiAgICAgKiAtIElmIG5vdGhpbmcgaXMgY3VycmVudGx5IHRoZSByZXNwb25kZXIsIHRoZSBcImFwcHJvcHJpYXRlIHBsYWNlXCIgaXMgdGhlXG4gICAgICogICBpbml0aWF0aW5nIGV2ZW50J3MgYHRhcmdldElEYC5cbiAgICAgKiAtIElmIHNvbWV0aGluZyAqaXMqIGFscmVhZHkgdGhlIHJlc3BvbmRlciwgdGhlIFwiYXBwcm9wcmlhdGUgcGxhY2VcIiBpcyB0aGVcbiAgICAgKiAgIGZpcnN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZXZlbnQgdGFyZ2V0IGFuZCB0aGUgY3VycmVudCBgcmVzcG9uZGVySW5zdGAuXG4gICAgICogLSBTb21lIG5lZ290aWF0aW9uIGhhcHBlbnM6IFNlZSB0aGUgdGltaW5nIGRpYWdyYW0gYmVsb3cuXG4gICAgICogLSBTY3JvbGxlZCB2aWV3cyBhdXRvbWF0aWNhbGx5IGJlY29tZSByZXNwb25kZXIuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBhXG4gICAgICogICBwbGF0Zm9ybSBzY3JvbGwgdmlldyB0aGF0IGlzbid0IGJ1aWx0IG9uIHRvcCBvZiB0aGUgcmVzcG9uZGVyIHN5c3RlbSBoYXNcbiAgICAgKiAgIGJlZ2FuIHNjcm9sbGluZywgYW5kIHRoZSBhY3RpdmUgcmVzcG9uZGVyIG11c3Qgbm93IGJlIG5vdGlmaWVkIHRoYXQgdGhlXG4gICAgICogICBpbnRlcmFjdGlvbiBpcyBubyBsb25nZXIgbG9ja2VkIHRvIGl0IC0gdGhlIHN5c3RlbSBoYXMgdGFrZW4gb3Zlci5cbiAgICAgKlxuICAgICAqIC0gUmVzcG9uZGVyIGJlaW5nIHJlbGVhc2VkOlxuICAgICAqICAgQXMgc29vbiBhcyBubyBtb3JlIHRvdWNoZXMgdGhhdCAqc3RhcnRlZCogaW5zaWRlIG9mIGRlc2NlbmRhbnRzIG9mIHRoZVxuICAgICAqICAgKmN1cnJlbnQqIHJlc3BvbmRlckluc3QsIGFuIGBvblJlc3BvbmRlclJlbGVhc2VgIGV2ZW50IGlzIGRpc3BhdGNoZWQgdG8gdGhlXG4gICAgICogICBjdXJyZW50IHJlc3BvbmRlciwgYW5kIHRoZSByZXNwb25kZXIgbG9jayBpcyByZWxlYXNlZC5cbiAgICAgKlxuICAgICAqIFRPRE86XG4gICAgICogLSBvbiBcImVuZFwiLCBhIGNhbGxiYWNrIGhvb2sgZm9yIGBvblJlc3BvbmRlckVuZFNob3VsZFJlbWFpblJlc3BvbmRlcmAgdGhhdFxuICAgICAqICAgZGV0ZXJtaW5lcyBpZiB0aGUgcmVzcG9uZGVyIGxvY2sgc2hvdWxkIHJlbWFpbi5cbiAgICAgKiAtIElmIGEgdmlldyBzaG91bGRuJ3QgXCJyZW1haW5cIiB0aGUgcmVzcG9uZGVyLCBhbnkgYWN0aXZlIHRvdWNoZXMgc2hvdWxkIGJ5XG4gICAgICogICBkZWZhdWx0IGJlIGNvbnNpZGVyZWQgXCJkZWFkXCIgYW5kIGRvIG5vdCBpbmZsdWVuY2UgZnV0dXJlIG5lZ290aWF0aW9ucyBvclxuICAgICAqICAgYnViYmxlIHBhdGhzLiBJdCBzaG91bGQgYmUgYXMgaWYgdGhvc2UgdG91Y2hlcyBkbyBub3QgZXhpc3QuXG4gICAgICogLS0gRm9yIG11bHRpdG91Y2g6IFVzdWFsbHkgYSB0cmFuc2xhdGUteiB3aWxsIGNob29zZSB0byBcInJlbWFpblwiIHJlc3BvbmRlclxuICAgICAqICBhZnRlciBvbmUgb3V0IG9mIG1hbnkgdG91Y2hlcyBlbmRlZC4gRm9yIHRyYW5zbGF0ZS15LCB1c3VhbGx5IHRoZSB2aWV3XG4gICAgICogIGRvZXNuJ3Qgd2lzaCB0byBcInJlbWFpblwiIHJlc3BvbmRlciBhZnRlciBvbmUgb2YgbWFueSB0b3VjaGVzIGVuZC5cbiAgICAgKiAtIENvbnNpZGVyIGJ1aWxkaW5nIHRoaXMgb24gdG9wIG9mIGEgYHN0b3BQcm9wYWdhdGlvbmAgbW9kZWwgc2ltaWxhciB0b1xuICAgICAqICAgYFczQ2AgZXZlbnRzLlxuICAgICAqIC0gRW5zdXJlIHRoYXQgYG9uUmVzcG9uZGVyVGVybWluYXRlYCBpcyBjYWxsZWQgb24gdG91Y2ggY2FuY2Vscywgd2hldGhlciBvclxuICAgICAqICAgbm90IGBvblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdGAgcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqL1xuXG4gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZWdvdGlhdGlvbiBQZXJmb3JtZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuUHJvY2VzcyBsb3cgbGV2ZWwgZXZlbnRzIHRvICAgICsgICAgIEN1cnJlbnQgUmVzcG9uZGVyICAgICAgKyAgIHdhbnRzUmVzcG9uZGVySURcbmRldGVybWluZSB3aG8gdG8gcGVyZm9ybSBuZWdvdC18ICAgKGlmIGFueSBleGlzdHMgYXQgYWxsKSAgIHxcbmlhdGlvbi90cmFuc2l0aW9uICAgICAgICAgICAgICB8IE90aGVyd2lzZSBqdXN0IHBhc3MgdGhyb3VnaHxcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rXG5CdWJibGUgdG8gZmluZCBmaXJzdCBJRCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG50byByZXR1cm4gdHJ1ZTp3YW50c1Jlc3BvbmRlcklEfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICstLS0tLS0tLS0tLS0tKyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgIHwgb25Ub3VjaFN0YXJ0fCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICstLS0tLS0rLS0tLS0tKyAgICAgbm9uZSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICB8ICAgICAgICAgICAgcmV0dXJufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS12LS0tLS0tLS0tLS0tLSt0cnVlfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8XG58b25TdGFydFNob3VsZFNldFJlc3BvbmRlcnwtLS0tLT58b25SZXNwb25kZXJTdGFydCAoY3VyKSAgfDwtLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKyAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICAgICAgICAgfFxuICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0rLS0tLS0tLStcbiAgICAgICAgICAgIHwgcmV0dXJuZWQgdHJ1ZSBmb3J8ICAgICAgIGZhbHNlOlJFSkVDVCArLS0tLS0tLS0+fG9uUmVzcG9uZGVyUmVqZWN0XG4gICAgICAgICAgICB8IHdhbnRzUmVzcG9uZGVySUQgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tK1xuICAgICAgICAgICAgfCAobm93IGF0dGVtcHQgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSsgfFxuICAgICAgICAgICAgfCAgaGFuZG9mZikgICAgICAgIHwgfCAgIG9uUmVzcG9uZGVyICAgICAgICAgIHwgfFxuICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgIFRlcm1pbmF0aW9uUmVxdWVzdHwgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSsgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgdHJ1ZTpHUkFOVCArLS0tLS0tLS0+fG9uUmVzcG9uZGVyR3JhbnR8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLSstLS0tLS0tK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgb25SZXNwb25kZXJUZXJtaW5hdGUgfDwtLS0tLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tPnxvblJlc3BvbmRlclN0YXJ0fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLStcbkJ1YmJsZSB0byBmaW5kIGZpcnN0IElEICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbnRvIHJldHVybiB0cnVlOndhbnRzUmVzcG9uZGVySUR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKy0tLS0tLS0tLS0tLS0rICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgfCBvblRvdWNoTW92ZSB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKy0tLS0tLSstLS0tLS0rICAgICBub25lICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgIHwgICAgICAgICAgICByZXR1cm58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLXYtLS0tLS0tLS0tLS0tK3RydWV8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHxcbnxvbk1vdmVTaG91bGRTZXRSZXNwb25kZXIgfC0tLS0tPnxvblJlc3BvbmRlck1vdmUgKGN1cikgICB8PC0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICB8XG4gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLSstLS0tLS0tK1xuICAgICAgICAgICAgfCByZXR1cm5lZCB0cnVlIGZvcnwgICAgICAgZmFsc2U6UkVKRUNUICstLS0tLS0tLT58b25SZXNwb25kZXJSZWplY3xcbiAgICAgICAgICAgIHwgd2FudHNSZXNwb25kZXJJRCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0rXG4gICAgICAgICAgICB8IChub3cgYXR0ZW1wdCAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tKyB8XG4gICAgICAgICAgICB8ICBoYW5kb2ZmKSAgICAgICAgfCB8ICAgb25SZXNwb25kZXIgICAgICAgICAgfCB8XG4gICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLT58ICAgICAgVGVybWluYXRpb25SZXF1ZXN0fCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tKyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB0cnVlOkdSQU5UICstLS0tLS0tLT58b25SZXNwb25kZXJHcmFudHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tKy0tLS0tLS0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICBvblJlc3BvbmRlclRlcm1pbmF0ZSB8PC0tLS0tLS0tLS0tK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSsgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0+fG9uUmVzcG9uZGVyTW92ZSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgU29tZSBhY3RpdmUgdG91Y2ggc3RhcnRlZHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgaW5zaWRlIGN1cnJlbnQgcmVzcG9uZGVyIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgIG9uUmVzcG9uZGVyRW5kICAgIHwgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfFxuICArLS0tKy0tLS0tLS0tLSsgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICB8IG9uVG91Y2hFbmQgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICArLS0tKy0tLS0tLS0tLSsgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgb25SZXNwb25kZXJFbmQgICAgIHwgfFxuICAgICAgTm8gYWN0aXZlIHRvdWNoZXMgc3RhcnRlZHwgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsgfFxuICAgICAgaW5zaWRlIGN1cnJlbnQgcmVzcG9uZGVyIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgdiAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICBvblJlc3BvbmRlclJlbGVhc2UgIHwgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAqL1xuXG4gICAgLyoqXG4gICAgICogQSBub3RlIGFib3V0IGV2ZW50IG9yZGVyaW5nIGluIHRoZSBgRXZlbnRQbHVnaW5SZWdpc3RyeWAuXG4gICAgICpcbiAgICAgKiBTdXBwb3NlIHBsdWdpbnMgYXJlIGluamVjdGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gICAgICpcbiAgICAgKiBgW1IsIFMsIENdYFxuICAgICAqXG4gICAgICogVG8gaGVscCBpbGx1c3RyYXRlIHRoZSBleGFtcGxlLCBhc3N1bWUgYFNgIGlzIGBTaW1wbGVFdmVudFBsdWdpbmAgKGZvclxuICAgICAqIGBvbkNsaWNrYCBldGMpIGFuZCBgUmAgaXMgYFJlc3BvbmRlckV2ZW50UGx1Z2luYC5cbiAgICAgKlxuICAgICAqIFwiRGVmZXJyZWQtRGlzcGF0Y2hlZCBFdmVudHNcIjpcbiAgICAgKlxuICAgICAqIC0gVGhlIGN1cnJlbnQgZXZlbnQgcGx1Z2luIHN5c3RlbSB3aWxsIHRyYXZlcnNlIHRoZSBsaXN0IG9mIGluamVjdGVkIHBsdWdpbnMsXG4gICAgICogICBpbiBvcmRlciwgYW5kIGV4dHJhY3QgZXZlbnRzIGJ5IGNvbGxlY3RpbmcgdGhlIHBsdWdpbidzIHJldHVybiB2YWx1ZSBvZlxuICAgICAqICAgYGV4dHJhY3RFdmVudHMoKWAuXG4gICAgICogLSBUaGVzZSBldmVudHMgdGhhdCBhcmUgcmV0dXJuZWQgZnJvbSBgZXh0cmFjdEV2ZW50c2AgYXJlIFwiZGVmZXJyZWRcbiAgICAgKiAgIGRpc3BhdGNoZWQgZXZlbnRzXCIuXG4gICAgICogLSBXaGVuIHJldHVybmVkIGZyb20gYGV4dHJhY3RFdmVudHNgLCBkZWZlcnJlZC1kaXNwYXRjaGVkIGV2ZW50cyBjb250YWluIGFuXG4gICAgICogICBcImFjY3VtdWxhdGlvblwiIG9mIGRlZmVycmVkIGRpc3BhdGNoZXMuXG4gICAgICogLSBUaGVzZSBkZWZlcnJlZCBkaXNwYXRjaGVzIGFyZSBhY2N1bXVsYXRlZC9jb2xsZWN0ZWQgYmVmb3JlIHRoZXkgYXJlXG4gICAgICogICByZXR1cm5lZCwgYnV0IHByb2Nlc3NlZCBhdCBhIGxhdGVyIHRpbWUgYnkgdGhlIGBFdmVudFBsdWdpblJlZ2lzdHJ5YCAoaGVuY2UgdGhlXG4gICAgICogICBuYW1lIGRlZmVycmVkKS5cbiAgICAgKlxuICAgICAqIEluIHRoZSBwcm9jZXNzIG9mIHJldHVybmluZyB0aGVpciBkZWZlcnJlZC1kaXNwYXRjaGVkIGV2ZW50cywgZXZlbnQgcGx1Z2luc1xuICAgICAqIHRoZW1zZWx2ZXMgY2FuIGRpc3BhdGNoIGV2ZW50cyBvbi1kZW1hbmQgd2l0aG91dCByZXR1cm5pbmcgdGhlbSBmcm9tXG4gICAgICogYGV4dHJhY3RFdmVudHNgLiBQbHVnaW5zIG1pZ2h0IHdhbnQgdG8gZG8gdGhpcywgc28gdGhhdCB0aGV5IGNhbiB1c2UgZXZlbnRcbiAgICAgKiBkaXNwYXRjaGluZyBhcyBhIHRvb2wgdGhhdCBoZWxwcyB0aGVtIGRlY2lkZSB3aGljaCBldmVudHMgc2hvdWxkIGJlIGV4dHJhY3RlZFxuICAgICAqIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICAgKlxuICAgICAqIFwiT24tRGVtYW5kLURpc3BhdGNoZWQgRXZlbnRzXCI6XG4gICAgICpcbiAgICAgKiAtIE9uLWRlbWFuZC1kaXNwYXRjaGVkIGV2ZW50cyBhcmUgbm90IHJldHVybmVkIGZyb20gYGV4dHJhY3RFdmVudHNgLlxuICAgICAqIC0gT24tZGVtYW5kLWRpc3BhdGNoZWQgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGR1cmluZyB0aGUgcHJvY2VzcyBvZiByZXR1cm5pbmdcbiAgICAgKiAgIHRoZSBkZWZlcnJlZC1kaXNwYXRjaGVkIGV2ZW50cy5cbiAgICAgKiAtIFRoZXkgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgKiAtIFRoZXkgc2hvdWxkIGJlIGF2b2lkZWQsIGFuZC9vciBldmVudHVhbGx5IGJlIHJlcGxhY2VkIHdpdGggYW5vdGhlclxuICAgICAqICAgYWJzdHJhY3Rpb24gdGhhdCBhbGxvd3MgZXZlbnQgcGx1Z2lucyB0byBwZXJmb3JtIG11bHRpcGxlIFwicm91bmRzXCIgb2YgZXZlbnRcbiAgICAgKiAgIGV4dHJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGVyZWZvcmUsIHRoZSBzZXF1ZW5jZSBvZiBldmVudCBkaXNwYXRjaGVzIGJlY29tZXM6XG4gICAgICpcbiAgICAgKiAtIGBSYHMgb24tZGVtYW5kIGV2ZW50cyAoaWYgYW55KSAgIChkaXNwYXRjaGVkIGJ5IGBSYCBvbi1kZW1hbmQpXG4gICAgICogLSBgU2BzIG9uLWRlbWFuZCBldmVudHMgKGlmIGFueSkgICAoZGlzcGF0Y2hlZCBieSBgU2Agb24tZGVtYW5kKVxuICAgICAqIC0gYENgcyBvbi1kZW1hbmQgZXZlbnRzIChpZiBhbnkpICAgKGRpc3BhdGNoZWQgYnkgYENgIG9uLWRlbWFuZClcbiAgICAgKiAtIGBSYHMgZXh0cmFjdGVkIGV2ZW50cyAoaWYgYW55KSAgIChkaXNwYXRjaGVkIGJ5IGBFdmVudFBsdWdpblJlZ2lzdHJ5YClcbiAgICAgKiAtIGBTYHMgZXh0cmFjdGVkIGV2ZW50cyAoaWYgYW55KSAgIChkaXNwYXRjaGVkIGJ5IGBFdmVudFBsdWdpblJlZ2lzdHJ5YClcbiAgICAgKiAtIGBDYHMgZXh0cmFjdGVkIGV2ZW50cyAoaWYgYW55KSAgIChkaXNwYXRjaGVkIGJ5IGBFdmVudFBsdWdpblJlZ2lzdHJ5YClcbiAgICAgKlxuICAgICAqIEluIHRoZSBjYXNlIG9mIGBSZXNwb25kZXJFdmVudFBsdWdpbmA6IElmIHRoZSBgc3RhcnRTaG91bGRTZXRSZXNwb25kZXJgXG4gICAgICogb24tZGVtYW5kIGRpc3BhdGNoIHJldHVybnMgYHRydWVgIChhbmQgc29tZSBvdGhlciBkZXRhaWxzIGFyZSBzYXRpc2ZpZWQpIHRoZVxuICAgICAqIGBvblJlc3BvbmRlckdyYW50YCBkZWZlcnJlZCBkaXNwYXRjaGVkIGV2ZW50IGlzIHJldHVybmVkIGZyb21cbiAgICAgKiBgZXh0cmFjdEV2ZW50c2AuIFRoZSBzZXF1ZW5jZSBvZiBkaXNwYXRjaCBleGVjdXRpb25zIGluIHRoaXMgY2FzZVxuICAgICAqIHdpbGwgYXBwZWFyIGFzIGZvbGxvd3M6XG4gICAgICpcbiAgICAgKiAtIGBzdGFydFNob3VsZFNldFJlc3BvbmRlcmAgKGBSZXNwb25kZXJFdmVudFBsdWdpbmAgZGlzcGF0Y2hlcyBvbi1kZW1hbmQpXG4gICAgICogLSBgdG91Y2hTdGFydENhcHR1cmVgICAgICAgIChgRXZlbnRQbHVnaW5SZWdpc3RyeWAgZGlzcGF0Y2hlcyBhcyB1c3VhbClcbiAgICAgKiAtIGB0b3VjaFN0YXJ0YCAgICAgICAgICAgICAgKGBFdmVudFBsdWdpblJlZ2lzdHJ5YCBkaXNwYXRjaGVzIGFzIHVzdWFsKVxuICAgICAqIC0gYHJlc3BvbmRlckdyYW50L1JlamVjdGAgICAoYEV2ZW50UGx1Z2luUmVnaXN0cnlgIGRpc3BhdGNoZXMgYXMgdXN1YWwpXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBzZXRSZXNwb25kZXJBbmRFeHRyYWN0VHJhbnNmZXIoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0YXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICkge1xuICAgICAgdmFyIHNob3VsZFNldEV2ZW50VHlwZSA9IGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKVxuICAgICAgICA/IGV2ZW50VHlwZXMuc3RhcnRTaG91bGRTZXRSZXNwb25kZXJcbiAgICAgICAgOiBpc01vdmVpc2godG9wTGV2ZWxUeXBlKVxuICAgICAgICA/IGV2ZW50VHlwZXMubW92ZVNob3VsZFNldFJlc3BvbmRlclxuICAgICAgICA6IHRvcExldmVsVHlwZSA9PT0gVE9QX1NFTEVDVElPTl9DSEFOR0VcbiAgICAgICAgPyBldmVudFR5cGVzLnNlbGVjdGlvbkNoYW5nZVNob3VsZFNldFJlc3BvbmRlclxuICAgICAgICA6IGV2ZW50VHlwZXMuc2Nyb2xsU2hvdWxkU2V0UmVzcG9uZGVyOyAvLyBUT0RPOiBzdG9wIG9uZSBzaG9ydCBvZiB0aGUgY3VycmVudCByZXNwb25kZXIuXG5cbiAgICAgIHZhciBidWJibGVTaG91bGRTZXRGcm9tID0gIXJlc3BvbmRlckluc3RcbiAgICAgICAgPyB0YXJnZXRJbnN0XG4gICAgICAgIDogZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IocmVzcG9uZGVySW5zdCwgdGFyZ2V0SW5zdCk7IC8vIFdoZW4gY2FwdHVyaW5nL2J1YmJsaW5nIHRoZSBcInNob3VsZFNldFwiIGV2ZW50LCB3ZSB3YW50IHRvIHNraXAgdGhlIHRhcmdldFxuICAgICAgLy8gKGRlZXBlc3QgSUQpIGlmIGl0IGhhcHBlbnMgdG8gYmUgdGhlIGN1cnJlbnQgcmVzcG9uZGVyLiBUaGUgcmVhc29uaW5nOlxuICAgICAgLy8gSXQncyBzdHJhbmdlIHRvIGdldCBhbiBgb25Nb3ZlU2hvdWxkU2V0UmVzcG9uZGVyYCB3aGVuIHlvdSdyZSAqYWxyZWFkeSpcbiAgICAgIC8vIHRoZSByZXNwb25kZXIuXG5cbiAgICAgIHZhciBza2lwT3ZlckJ1YmJsZVNob3VsZFNldEZyb20gPSBidWJibGVTaG91bGRTZXRGcm9tID09PSByZXNwb25kZXJJbnN0O1xuICAgICAgdmFyIHNob3VsZFNldEV2ZW50ID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUsXG4gICAgICAgIGJ1YmJsZVNob3VsZFNldEZyb20sXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKTtcbiAgICAgIHNob3VsZFNldEV2ZW50LnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcblxuICAgICAgaWYgKHNraXBPdmVyQnViYmxlU2hvdWxkU2V0RnJvbSkge1xuICAgICAgICBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2tpcFRhcmdldChzaG91bGRTZXRFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzJDEoc2hvdWxkU2V0RXZlbnQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2FudHNSZXNwb25kZXJJbnN0ID1cbiAgICAgICAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZShzaG91bGRTZXRFdmVudCk7XG5cbiAgICAgIGlmICghc2hvdWxkU2V0RXZlbnQuaXNQZXJzaXN0ZW50KCkpIHtcbiAgICAgICAgc2hvdWxkU2V0RXZlbnQuY29uc3RydWN0b3IucmVsZWFzZShzaG91bGRTZXRFdmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghd2FudHNSZXNwb25kZXJJbnN0IHx8IHdhbnRzUmVzcG9uZGVySW5zdCA9PT0gcmVzcG9uZGVySW5zdCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGV4dHJhY3RlZDtcbiAgICAgIHZhciBncmFudEV2ZW50ID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICBldmVudFR5cGVzLnJlc3BvbmRlckdyYW50LFxuICAgICAgICB3YW50c1Jlc3BvbmRlckluc3QsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKTtcbiAgICAgIGdyYW50RXZlbnQudG91Y2hIaXN0b3J5ID0gUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5O1xuICAgICAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMkMShncmFudEV2ZW50KTtcbiAgICAgIHZhciBibG9ja0hvc3RSZXNwb25kZXIgPSBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZ3JhbnRFdmVudCkgPT09IHRydWU7XG5cbiAgICAgIGlmIChyZXNwb25kZXJJbnN0KSB7XG4gICAgICAgIHZhciB0ZXJtaW5hdGlvblJlcXVlc3RFdmVudCA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICBldmVudFR5cGVzLnJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdCxcbiAgICAgICAgICByZXNwb25kZXJJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICk7XG4gICAgICAgIHRlcm1pbmF0aW9uUmVxdWVzdEV2ZW50LnRvdWNoSGlzdG9yeSA9XG4gICAgICAgICAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5O1xuICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyQxKHRlcm1pbmF0aW9uUmVxdWVzdEV2ZW50KTtcbiAgICAgICAgdmFyIHNob3VsZFN3aXRjaCA9XG4gICAgICAgICAgIWhhc0Rpc3BhdGNoZXModGVybWluYXRpb25SZXF1ZXN0RXZlbnQpIHx8XG4gICAgICAgICAgZXhlY3V0ZURpcmVjdERpc3BhdGNoKHRlcm1pbmF0aW9uUmVxdWVzdEV2ZW50KTtcblxuICAgICAgICBpZiAoIXRlcm1pbmF0aW9uUmVxdWVzdEV2ZW50LmlzUGVyc2lzdGVudCgpKSB7XG4gICAgICAgICAgdGVybWluYXRpb25SZXF1ZXN0RXZlbnQuY29uc3RydWN0b3IucmVsZWFzZSh0ZXJtaW5hdGlvblJlcXVlc3RFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkU3dpdGNoKSB7XG4gICAgICAgICAgdmFyIHRlcm1pbmF0ZUV2ZW50ID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgICAgZXZlbnRUeXBlcy5yZXNwb25kZXJUZXJtaW5hdGUsXG4gICAgICAgICAgICByZXNwb25kZXJJbnN0LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGVybWluYXRlRXZlbnQudG91Y2hIaXN0b3J5ID0gUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5O1xuICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzJDEodGVybWluYXRlRXZlbnQpO1xuICAgICAgICAgIGV4dHJhY3RlZCA9IGFjY3VtdWxhdGUoZXh0cmFjdGVkLCBbZ3JhbnRFdmVudCwgdGVybWluYXRlRXZlbnRdKTtcbiAgICAgICAgICBjaGFuZ2VSZXNwb25kZXIod2FudHNSZXNwb25kZXJJbnN0LCBibG9ja0hvc3RSZXNwb25kZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciByZWplY3RFdmVudCA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICAgIGV2ZW50VHlwZXMucmVzcG9uZGVyUmVqZWN0LFxuICAgICAgICAgICAgd2FudHNSZXNwb25kZXJJbnN0LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVqZWN0RXZlbnQudG91Y2hIaXN0b3J5ID0gUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5O1xuICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzJDEocmVqZWN0RXZlbnQpO1xuICAgICAgICAgIGV4dHJhY3RlZCA9IGFjY3VtdWxhdGUoZXh0cmFjdGVkLCByZWplY3RFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhY3RlZCA9IGFjY3VtdWxhdGUoZXh0cmFjdGVkLCBncmFudEV2ZW50KTtcbiAgICAgICAgY2hhbmdlUmVzcG9uZGVyKHdhbnRzUmVzcG9uZGVySW5zdCwgYmxvY2tIb3N0UmVzcG9uZGVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV4dHJhY3RlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSB0cmFuc2ZlciBpcyBhIG5lZ290aWF0aW9uIGJldHdlZW4gYSBjdXJyZW50bHkgc2V0IHJlc3BvbmRlciBhbmQgdGhlIG5leHRcbiAgICAgKiBlbGVtZW50IHRvIGNsYWltIHJlc3BvbmRlciBzdGF0dXMuIEFueSBzdGFydCBldmVudCBjb3VsZCB0cmlnZ2VyIGEgdHJhbnNmZXJcbiAgICAgKiBvZiByZXNwb25kZXJJbnN0LiBBbnkgbW92ZSBldmVudCBjb3VsZCB0cmlnZ2VyIGEgdHJhbnNmZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBCcm93c2VyRXZlbnRDb25zdGFudHNgLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSB0cmFuc2ZlciBvZiByZXNwb25kZXIgY291bGQgcG9zc2libHkgb2NjdXIuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBjYW5UcmlnZ2VyVHJhbnNmZXIodG9wTGV2ZWxUeXBlLCB0b3BMZXZlbEluc3QsIG5hdGl2ZUV2ZW50KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3BMZXZlbEluc3QgJiYgLy8gcmVzcG9uZGVySWdub3JlU2Nyb2xsOiBXZSBhcmUgdHJ5aW5nIHRvIG1pZ3JhdGUgYXdheSBmcm9tIHNwZWNpZmljYWxseVxuICAgICAgICAvLyB0cmFja2luZyBuYXRpdmUgc2Nyb2xsIGV2ZW50cyBoZXJlIGFuZCByZXNwb25kZXJJZ25vcmVTY3JvbGwgaW5kaWNhdGVzIHdlXG4gICAgICAgIC8vIHdpbGwgc2VuZCB0b3BUb3VjaENhbmNlbCB0byBoYW5kbGUgY2FuY2VsaW5nIHRvdWNoIGV2ZW50cyBpbnN0ZWFkXG4gICAgICAgICgodG9wTGV2ZWxUeXBlID09PSBUT1BfU0NST0xMICYmICFuYXRpdmVFdmVudC5yZXNwb25kZXJJZ25vcmVTY3JvbGwpIHx8XG4gICAgICAgICAgKHRyYWNrZWRUb3VjaENvdW50ID4gMCAmJiB0b3BMZXZlbFR5cGUgPT09IFRPUF9TRUxFQ1RJT05fQ0hBTkdFKSB8fFxuICAgICAgICAgIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSB8fFxuICAgICAgICAgIGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpKVxuICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGlzIHRvdWNoIGVuZCBldmVudCBtYWtlcyBpdCBzdWNoIHRoYXQgdGhlcmUgYXJlIG5vXG4gICAgICogbG9uZ2VyIGFueSB0b3VjaGVzIHRoYXQgc3RhcnRlZCBpbnNpZGUgb2YgdGhlIGN1cnJlbnQgYHJlc3BvbmRlckluc3RgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOYXRpdmVFdmVudH0gbmF0aXZlRXZlbnQgTmF0aXZlIHRvdWNoIGVuZCBldmVudC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGlzIHRvdWNoIGVuZCBldmVudCBlbmRzIHRoZSByZXNwb25kZXIuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBub1Jlc3BvbmRlclRvdWNoZXMobmF0aXZlRXZlbnQpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gbmF0aXZlRXZlbnQudG91Y2hlcztcblxuICAgICAgaWYgKCF0b3VjaGVzIHx8IHRvdWNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGFjdGl2ZVRvdWNoID0gdG91Y2hlc1tpXTtcbiAgICAgICAgdmFyIHRhcmdldCA9IGFjdGl2ZVRvdWNoLnRhcmdldDtcblxuICAgICAgICBpZiAodGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gMCkge1xuICAgICAgICAgIC8vIElzIHRoZSBvcmlnaW5hbCB0b3VjaCBsb2NhdGlvbiBpbnNpZGUgb2YgdGhlIGN1cnJlbnQgcmVzcG9uZGVyP1xuICAgICAgICAgIHZhciB0YXJnZXRJbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gICAgICAgICAgaWYgKGlzQW5jZXN0b3IocmVzcG9uZGVySW5zdCwgdGFyZ2V0SW5zdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIFJlc3BvbmRlckV2ZW50UGx1Z2luID0ge1xuICAgICAgLyogRm9yIHVuaXQgdGVzdGluZyBvbmx5ICovXG4gICAgICBfZ2V0UmVzcG9uZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXNwb25kZXJJbnN0O1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgICAgIC8qKlxuICAgICAgICogV2UgbXVzdCBiZSByZXNpbGllbnQgdG8gYHRhcmdldEluc3RgIGJlaW5nIGBudWxsYCBvbiBgdG91Y2hNb3ZlYCBvclxuICAgICAgICogYHRvdWNoRW5kYC4gT24gY2VydGFpbiBwbGF0Zm9ybXMsIHRoaXMgbWVhbnMgdGhhdCBhIG5hdGl2ZSBzY3JvbGwgaGFzXG4gICAgICAgKiBhc3N1bWVkIGNvbnRyb2wgYW5kIHRoZSBvcmlnaW5hbCB0b3VjaCB0YXJnZXRzIGFyZSBkZXN0cm95ZWQuXG4gICAgICAgKi9cbiAgICAgIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uIChcbiAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50U3lzdGVtRmxhZ3NcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpKSB7XG4gICAgICAgICAgdHJhY2tlZFRvdWNoQ291bnQgKz0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0VuZGlzaCh0b3BMZXZlbFR5cGUpKSB7XG4gICAgICAgICAgaWYgKHRyYWNrZWRUb3VjaENvdW50ID49IDApIHtcbiAgICAgICAgICAgIHRyYWNrZWRUb3VjaENvdW50IC09IDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICBcIkVuZGVkIGEgdG91Y2ggZXZlbnQgd2hpY2ggd2FzIG5vdCBjb3VudGVkIGluIGB0cmFja2VkVG91Y2hDb3VudGAuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUucmVjb3JkVG91Y2hUcmFjayh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgdmFyIGV4dHJhY3RlZCA9IGNhblRyaWdnZXJUcmFuc2ZlcihcbiAgICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICApXG4gICAgICAgICAgPyBzZXRSZXNwb25kZXJBbmRFeHRyYWN0VHJhbnNmZXIoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBudWxsOyAvLyBSZXNwb25kZXIgbWF5IG9yIG1heSBub3QgaGF2ZSB0cmFuc2ZlcnJlZCBvbiBhIG5ldyB0b3VjaCBzdGFydC9tb3ZlLlxuICAgICAgICAvLyBSZWdhcmRsZXNzLCB3aG9ldmVyIGlzIHRoZSByZXNwb25kZXIgYWZ0ZXIgYW55IHBvdGVudGlhbCB0cmFuc2Zlciwgd2VcbiAgICAgICAgLy8gZGlyZWN0IGFsbCB0b3VjaCBzdGFydC9tb3ZlL2VuZHMgdG8gdGhlbSBpbiB0aGUgZm9ybSBvZlxuICAgICAgICAvLyBgb25SZXNwb25kZXJNb3ZlL1N0YXJ0L0VuZGAuIFRoZXNlIHdpbGwgYmUgY2FsbGVkIGZvciAqZXZlcnkqIGFkZGl0aW9uYWxcbiAgICAgICAgLy8gZmluZ2VyIHRoYXQgbW92ZS9zdGFydC9lbmQsIGRpc3BhdGNoZWQgZGlyZWN0bHkgdG8gd2hvZXZlciBpcyB0aGVcbiAgICAgICAgLy8gY3VycmVudCByZXNwb25kZXIgYXQgdGhhdCBtb21lbnQsIHVudGlsIHRoZSByZXNwb25kZXIgaXMgXCJyZWxlYXNlZFwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVzZSBtdWx0aXBsZSBpbmRpdmlkdWFsIGNoYW5nZSB0b3VjaCBldmVudHMgYXJlIGFyZSBhbHdheXMgYm9va2VuZGVkXG4gICAgICAgIC8vIGJ5IGBvblJlc3BvbmRlckdyYW50YCwgYW5kIG9uZSBvZlxuICAgICAgICAvLyAoYG9uUmVzcG9uZGVyUmVsZWFzZS9vblJlc3BvbmRlclRlcm1pbmF0ZWApLlxuXG4gICAgICAgIHZhciBpc1Jlc3BvbmRlclRvdWNoU3RhcnQgPSByZXNwb25kZXJJbnN0ICYmIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKTtcbiAgICAgICAgdmFyIGlzUmVzcG9uZGVyVG91Y2hNb3ZlID0gcmVzcG9uZGVySW5zdCAmJiBpc01vdmVpc2godG9wTGV2ZWxUeXBlKTtcbiAgICAgICAgdmFyIGlzUmVzcG9uZGVyVG91Y2hFbmQgPSByZXNwb25kZXJJbnN0ICYmIGlzRW5kaXNoKHRvcExldmVsVHlwZSk7XG4gICAgICAgIHZhciBpbmNyZW1lbnRhbFRvdWNoID0gaXNSZXNwb25kZXJUb3VjaFN0YXJ0XG4gICAgICAgICAgPyBldmVudFR5cGVzLnJlc3BvbmRlclN0YXJ0XG4gICAgICAgICAgOiBpc1Jlc3BvbmRlclRvdWNoTW92ZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJNb3ZlXG4gICAgICAgICAgOiBpc1Jlc3BvbmRlclRvdWNoRW5kXG4gICAgICAgICAgPyBldmVudFR5cGVzLnJlc3BvbmRlckVuZFxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBpZiAoaW5jcmVtZW50YWxUb3VjaCkge1xuICAgICAgICAgIHZhciBnZXN0dXJlID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgICAgaW5jcmVtZW50YWxUb3VjaCxcbiAgICAgICAgICAgIHJlc3BvbmRlckluc3QsXG4gICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBnZXN0dXJlLnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyQxKGdlc3R1cmUpO1xuICAgICAgICAgIGV4dHJhY3RlZCA9IGFjY3VtdWxhdGUoZXh0cmFjdGVkLCBnZXN0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpc1Jlc3BvbmRlclRlcm1pbmF0ZSA9XG4gICAgICAgICAgcmVzcG9uZGVySW5zdCAmJiB0b3BMZXZlbFR5cGUgPT09IFRPUF9UT1VDSF9DQU5DRUw7XG4gICAgICAgIHZhciBpc1Jlc3BvbmRlclJlbGVhc2UgPVxuICAgICAgICAgIHJlc3BvbmRlckluc3QgJiZcbiAgICAgICAgICAhaXNSZXNwb25kZXJUZXJtaW5hdGUgJiZcbiAgICAgICAgICBpc0VuZGlzaCh0b3BMZXZlbFR5cGUpICYmXG4gICAgICAgICAgbm9SZXNwb25kZXJUb3VjaGVzKG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgdmFyIGZpbmFsVG91Y2ggPSBpc1Jlc3BvbmRlclRlcm1pbmF0ZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJUZXJtaW5hdGVcbiAgICAgICAgICA6IGlzUmVzcG9uZGVyUmVsZWFzZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJSZWxlYXNlXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmIChmaW5hbFRvdWNoKSB7XG4gICAgICAgICAgdmFyIGZpbmFsRXZlbnQgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgICBmaW5hbFRvdWNoLFxuICAgICAgICAgICAgcmVzcG9uZGVySW5zdCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApO1xuICAgICAgICAgIGZpbmFsRXZlbnQudG91Y2hIaXN0b3J5ID0gUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5O1xuICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzJDEoZmluYWxFdmVudCk7XG4gICAgICAgICAgZXh0cmFjdGVkID0gYWNjdW11bGF0ZShleHRyYWN0ZWQsIGZpbmFsRXZlbnQpO1xuICAgICAgICAgIGNoYW5nZVJlc3BvbmRlcihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHRyYWN0ZWQ7XG4gICAgICB9LFxuICAgICAgR2xvYmFsUmVzcG9uZGVySGFuZGxlcjogbnVsbCxcbiAgICAgIGluamVjdGlvbjoge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHt7b25DaGFuZ2U6IChSZWFjdElELCBSZWFjdElEKSA9PiB2b2lkfSBHbG9iYWxSZXNwb25kZXJIYW5kbGVyXG4gICAgICAgICAqIE9iamVjdCB0aGF0IGhhbmRsZXMgYW55IGNoYW5nZSBpbiByZXNwb25kZXIuIFVzZSB0aGlzIHRvIGluamVjdFxuICAgICAgICAgKiBpbnRlZ3JhdGlvbiB3aXRoIGFuIGV4aXN0aW5nIHRvdWNoIGhhbmRsaW5nIHN5c3RlbSBldGMuXG4gICAgICAgICAqL1xuICAgICAgICBpbmplY3RHbG9iYWxSZXNwb25kZXJIYW5kbGVyOiBmdW5jdGlvbiAoR2xvYmFsUmVzcG9uZGVySGFuZGxlcikge1xuICAgICAgICAgIFJlc3BvbmRlckV2ZW50UGx1Z2luLkdsb2JhbFJlc3BvbmRlckhhbmRsZXIgPSBHbG9iYWxSZXNwb25kZXJIYW5kbGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluamVjdGFibGUgb3JkZXJpbmcgb2YgZXZlbnQgcGx1Z2lucy5cbiAgICAgKi9cbiAgICB2YXIgZXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG4gICAgLyoqXG4gICAgICogSW5qZWN0YWJsZSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gICAgICovXG5cbiAgICB2YXIgbmFtZXNUb1BsdWdpbnMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBSZWNvbXB1dGVzIHRoZSBwbHVnaW4gbGlzdCB1c2luZyB0aGUgaW5qZWN0ZWQgcGx1Z2lucyBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCkge1xuICAgICAgaWYgKCFldmVudFBsdWdpbk9yZGVyKSB7XG4gICAgICAgIC8vIFdhaXQgdW50aWwgYW4gYGV2ZW50UGx1Z2luT3JkZXJgIGlzIGluamVjdGVkLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgICAgdmFyIHBsdWdpbk1vZHVsZSA9IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICB2YXIgcGx1Z2luSW5kZXggPSBldmVudFBsdWdpbk9yZGVyLmluZGV4T2YocGx1Z2luTmFtZSk7XG5cbiAgICAgICAgaWYgKHBsdWdpbkluZGV4IDw9IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gXCIgK1xuICAgICAgICAgICAgICAoXCJ0aGUgcGx1Z2luIG9yZGVyaW5nLCBgXCIgKyBwbHVnaW5OYW1lICsgXCJgLlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGx1Z2luc1twbHVnaW5JbmRleF0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IEV2ZW50IHBsdWdpbnMgbXVzdCBpbXBsZW1lbnQgYW4gYGV4dHJhY3RFdmVudHNgIFwiICtcbiAgICAgICAgICAgICAgKFwibWV0aG9kLCBidXQgYFwiICsgcGx1Z2luTmFtZSArIFwiYCBkb2VzIG5vdC5cIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcGx1Z2luc1twbHVnaW5JbmRleF0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgICAgIHZhciBwdWJsaXNoZWRFdmVudHMgPSBwbHVnaW5Nb2R1bGUuZXZlbnRUeXBlcztcblxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcHVibGlzaGVkRXZlbnRzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXB1Ymxpc2hFdmVudEZvclBsdWdpbihcbiAgICAgICAgICAgICAgcHVibGlzaGVkRXZlbnRzW2V2ZW50TmFtZV0sXG4gICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSxcbiAgICAgICAgICAgICAgZXZlbnROYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogRmFpbGVkIHRvIHB1Ymxpc2ggZXZlbnQgYFwiICtcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgK1xuICAgICAgICAgICAgICAgIFwiYCBmb3IgcGx1Z2luIGBcIiArXG4gICAgICAgICAgICAgICAgcGx1Z2luTmFtZSArXG4gICAgICAgICAgICAgICAgXCJgLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBieSB0aGUgc3VwcGxpZWQgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIERpc3BhdGNoIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBldmVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmlnLCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICAgICAgaWYgKGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lIFwiICtcbiAgICAgICAgICAgIChcImV2ZW50IG5hbWUsIGBcIiArIGV2ZW50TmFtZSArIFwiYC5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV0gPSBkaXNwYXRjaENvbmZpZztcbiAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgICAgZm9yICh2YXIgcGhhc2VOYW1lIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgICAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlTmFtZSkpIHtcbiAgICAgICAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lID0gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcGhhc2VOYW1lXTtcbiAgICAgICAgICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVibGlzaGVzIGEgcmVnaXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGRpc3BhdGNoZWQgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgUmVnaXN0cmF0aW9uIG5hbWUgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICBwbHVnaW5Nb2R1bGUsXG4gICAgICBldmVudE5hbWVcbiAgICApIHtcbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSBcIiArXG4gICAgICAgICAgICAoXCJyZWdpc3RyYXRpb24gbmFtZSwgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYC5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBwbHVnaW5Nb2R1bGU7XG5cbiAgICAgIHtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgcGx1Z2lucyBzbyB0aGF0IHRoZXkgY2FuIGV4dHJhY3QgYW5kIGRpc3BhdGNoIGV2ZW50cy5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIE9yZGVyZWQgbGlzdCBvZiBpbmplY3RlZCBwbHVnaW5zLlxuICAgICAqL1xuXG4gICAgdmFyIHBsdWdpbnMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBNYXBwaW5nIGZyb20gZXZlbnQgbmFtZSB0byBkaXNwYXRjaCBjb25maWdcbiAgICAgKi9cblxuICAgIHZhciBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MgPSB7fTtcbiAgICAvKipcbiAgICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gcGx1Z2luIG1vZHVsZVxuICAgICAqL1xuXG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3RzIGFuIG9yZGVyaW5nIG9mIHBsdWdpbnMgKGJ5IHBsdWdpbiBuYW1lKS4gVGhpcyBhbGxvd3MgdGhlIG9yZGVyaW5nXG4gICAgICogdG8gYmUgZGVjb3VwbGVkIGZyb20gaW5qZWN0aW9uIG9mIHRoZSBhY3R1YWwgcGx1Z2lucyBzbyB0aGF0IG9yZGVyaW5nIGlzXG4gICAgICogYWx3YXlzIGRldGVybWluaXN0aWMgcmVnYXJkbGVzcyBvZiBwYWNrYWdpbmcsIG9uLXRoZS1mbHkgaW5qZWN0aW9uLCBldGMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGluamVjdEV2ZW50UGx1Z2luT3JkZXIoaW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyKSB7XG4gICAgICBpZiAoZXZlbnRQbHVnaW5PcmRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbiBvcmRlcmluZyBtb3JlIHRoYW4gXCIgK1xuICAgICAgICAgICAgXCJvbmNlLiBZb3UgYXJlIGxpa2VseSB0cnlpbmcgdG8gbG9hZCBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIH0gLy8gQ2xvbmUgdGhlIG9yZGVyaW5nIHNvIGl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBtdXRhdGVkLlxuICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgIGV2ZW50UGx1Z2luT3JkZXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpO1xuICAgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgcGx1Z2luIGV2ZW50IHN5c3RlbS4gVGhlIHBsdWdpbiBuYW1lcyBtdXN0IGJlXG4gICAgICogaW4gdGhlIG9yZGVyaW5nIGluamVjdGVkIGJ5IGBpbmplY3RFdmVudFBsdWdpbk9yZGVyYC5cbiAgICAgKlxuICAgICAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVkIGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1Z2luIG1vZHVsZXMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgICAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIGluamVjdGVkTmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgICAgaWYgKCFpbmplY3RlZE5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGx1Z2luTW9kdWxlID0gaW5qZWN0ZWROYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpIHx8XG4gICAgICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gIT09IHBsdWdpbk1vZHVsZVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAobmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IHR3byBkaWZmZXJlbnQgZXZlbnQgcGx1Z2lucyBcIiArXG4gICAgICAgICAgICAgICAgKFwidXNpbmcgdGhlIHNhbWUgbmFtZSwgYFwiICsgcGx1Z2luTmFtZSArIFwiYC5cIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgICAgICAgaXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNPcmRlcmluZ0RpcnR5KSB7XG4gICAgICAgIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxKHN0YXRlTm9kZSk7XG5cbiAgICAgIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgICAgIGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBgXCIgK1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSArXG4gICAgICAgICAgICBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgK1xuICAgICAgICAgICAgdHlwZW9mIGxpc3RlbmVyICtcbiAgICAgICAgICAgIFwiYCB0eXBlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgICB9XG5cbiAgICB2YXIgY3VzdG9tQnViYmxpbmdFdmVudFR5cGVzID1cbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0TmF0aXZlVmlld0NvbmZpZ1JlZ2lzdHJ5XG4gICAgICAgICAgLmN1c3RvbUJ1YmJsaW5nRXZlbnRUeXBlcyxcbiAgICAgIGN1c3RvbURpcmVjdEV2ZW50VHlwZXMgPVxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnlcbiAgICAgICAgICAuY3VzdG9tRGlyZWN0RXZlbnRUeXBlczsgLy8gU3RhcnQgb2YgaW5saW5lOiB0aGUgYmVsb3cgZnVuY3Rpb25zIHdlcmUgaW5saW5lZCBmcm9tXG4gICAgLy8gRXZlbnRQcm9wYWdhdG9yLmpzLCBhcyB0aGV5IGRldmlhdGVkIGZyb20gUmVhY3RET00ncyBuZXdlclxuICAgIC8vIGltcGxlbWVudGF0aW9ucy5cbiAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHByb3BhZ2F0aW9uUGhhc2UpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID1cbiAgICAgICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcHJvcGFnYXRpb25QaGFzZV07XG4gICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzKGluc3QsIHBoYXNlLCBldmVudCkge1xuICAgICAge1xuICAgICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAgICBlcnJvcihcIkRpc3BhdGNoaW5nIGluc3QgbXVzdCBub3QgYmUgbnVsbFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHBoYXNlKTtcblxuICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IGFjY3VtdWxhdGVJbnRvKFxuICAgICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICApO1xuICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgICAgaW5zdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaW5zdCA9IGluc3QucmV0dXJuOyAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAgICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgICAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgICAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gICAgICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICAgICAgaWYgKGluc3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW11bGF0ZXMgdGhlIHRyYXZlcnNhbCBvZiBhIHR3by1waGFzZSwgY2FwdHVyZS9idWJibGUgZXZlbnQgZGlzcGF0Y2guXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZVR3b1BoYXNlKGluc3QsIGZuLCBhcmcsIHNraXBCdWJibGluZykge1xuICAgICAgdmFyIHBhdGggPSBbXTtcblxuICAgICAgd2hpbGUgKGluc3QpIHtcbiAgICAgICAgcGF0aC5wdXNoKGluc3QpO1xuICAgICAgICBpbnN0ID0gZ2V0UGFyZW50KGluc3QpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaTtcblxuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGg7IGktLSA+IDA7ICkge1xuICAgICAgICBmbihwYXRoW2ldLCBcImNhcHR1cmVkXCIsIGFyZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChza2lwQnViYmxpbmcpIHtcbiAgICAgICAgLy8gRGlzcGF0Y2ggb24gdGFyZ2V0IG9ubHlcbiAgICAgICAgZm4ocGF0aFswXSwgXCJidWJibGVkXCIsIGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZuKHBhdGhbaV0sIFwiYnViYmxlZFwiLCBhcmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgICAgdHJhdmVyc2VUd29QaGFzZShcbiAgICAgICAgICBldmVudC5fdGFyZ2V0SW5zdCxcbiAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50cykge1xuICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlQ2FwdHVyZVBoYXNlRGlzcGF0Y2hlcyhldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIHRyYXZlcnNlVHdvUGhhc2UoXG4gICAgICAgICAgZXZlbnQuX3RhcmdldEluc3QsXG4gICAgICAgICAgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFjY3VtdWxhdGVzIHdpdGhvdXQgcmVnYXJkIHRvIGRpcmVjdGlvbiwgZG9lcyBub3QgbG9vayBmb3IgcGhhc2VkXG4gICAgICogcmVnaXN0cmF0aW9uIG5hbWVzLiBTYW1lIGFzIGBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZWAgYnV0IHdpdGhvdXRcbiAgICAgKiByZXF1aXJpbmcgdGhhdCB0aGUgYGRpc3BhdGNoTWFya2VyYCBiZSB0aGUgc2FtZSBhcyB0aGUgZGlzcGF0Y2hlZCBJRC5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGluc3QsIGlnbm9yZWREaXJlY3Rpb24sIGV2ZW50KSB7XG4gICAgICBpZiAoaW5zdCAmJiBldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZTtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICAgICk7XG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY2N1bXVsYXRlcyBkaXNwYXRjaGVzIG9uIGFuIGBTeW50aGV0aWNFdmVudGAsIGJ1dCBvbmx5IGZvciB0aGVcbiAgICAgKiBgZGlzcGF0Y2hNYXJrZXJgLlxuICAgICAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgICAgYWNjdW11bGF0ZURpc3BhdGNoZXMoZXZlbnQuX3RhcmdldEluc3QsIG51bGwsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKTtcbiAgICB9IC8vIEVuZCBvZiBpbmxpbmVcblxuICAgIHZhciBSZWFjdE5hdGl2ZUJyaWRnZUV2ZW50UGx1Z2luID0ge1xuICAgICAgZXZlbnRUeXBlczoge30sXG4gICAgICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApIHtcbiAgICAgICAgaWYgKHRhcmdldEluc3QgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFByb2JhYmx5IGEgbm9kZSBiZWxvbmdpbmcgdG8gYW5vdGhlciByZW5kZXJlcidzIHRyZWUuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnViYmxlRGlzcGF0Y2hDb25maWcgPSBjdXN0b21CdWJibGluZ0V2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXTtcbiAgICAgICAgdmFyIGRpcmVjdERpc3BhdGNoQ29uZmlnID0gY3VzdG9tRGlyZWN0RXZlbnRUeXBlc1t0b3BMZXZlbFR5cGVdO1xuXG4gICAgICAgIGlmICghYnViYmxlRGlzcGF0Y2hDb25maWcgJiYgIWRpcmVjdERpc3BhdGNoQ29uZmlnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSAtIEZsb3cgZG9lc24ndCBsaWtlIHRoaXMgc3RyaW5nIGNvZXJjaW9uIGJlY2F1c2UgRE9NVG9wTGV2ZWxFdmVudFR5cGUgaXMgb3BhcXVlXG4gICAgICAgICAgICAnVW5zdXBwb3J0ZWQgdG9wIGxldmVsIGV2ZW50IHR5cGUgXCInICsgdG9wTGV2ZWxUeXBlICsgJ1wiIGRpc3BhdGNoZWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBldmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICBidWJibGVEaXNwYXRjaENvbmZpZyB8fCBkaXJlY3REaXNwYXRjaENvbmZpZyxcbiAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGJ1YmJsZURpc3BhdGNoQ29uZmlnKSB7XG4gICAgICAgICAgdmFyIHNraXBCdWJibGluZyA9XG4gICAgICAgICAgICBldmVudCAhPSBudWxsICYmXG4gICAgICAgICAgICBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyAhPSBudWxsICYmXG4gICAgICAgICAgICBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcy5za2lwQnViYmxpbmc7XG5cbiAgICAgICAgICBpZiAoc2tpcEJ1YmJsaW5nKSB7XG4gICAgICAgICAgICBhY2N1bXVsYXRlQ2FwdHVyZVBoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3REaXNwYXRjaENvbmZpZykge1xuICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIFJlYWN0TmF0aXZlRXZlbnRQbHVnaW5PcmRlciA9IFtcbiAgICAgIFwiUmVzcG9uZGVyRXZlbnRQbHVnaW5cIixcbiAgICAgIFwiUmVhY3ROYXRpdmVCcmlkZ2VFdmVudFBsdWdpblwiXG4gICAgXTtcblxuICAgIC8qKlxuICAgICAqIE1ha2Ugc3VyZSBlc3NlbnRpYWwgZ2xvYmFscyBhcmUgYXZhaWxhYmxlIGFuZCBhcmUgcGF0Y2hlZCBjb3JyZWN0bHkuIFBsZWFzZSBkb24ndCByZW1vdmUgdGhpc1xuICAgICAqIGxpbmUuIEJ1bmRsZXMgY3JlYXRlZCBieSByZWFjdC1wYWNrYWdlciBgcmVxdWlyZWAgaXQgYmVmb3JlIGV4ZWN1dGluZyBhbnkgYXBwbGljYXRpb24gY29kZS4gVGhpc1xuICAgICAqIGVuc3VyZXMgaXQgZXhpc3RzIGluIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBjYW4gYmUgYHJlcXVpcmVgZC5cbiAgICAgKiBUT0RPOiByZXF1aXJlIHRoaXMgaW4gcGFja2FnZXIsIG5vdCBpbiBSZWFjdCAjMTA5MzI1MTdcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBJbmplY3QgbW9kdWxlIGZvciByZXNvbHZpbmcgRE9NIGhpZXJhcmNoeSBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICAgICAqL1xuXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcihSZWFjdE5hdGl2ZUV2ZW50UGx1Z2luT3JkZXIpO1xuICAgIC8qKlxuICAgICAqIFNvbWUgaW1wb3J0YW50IGV2ZW50IHBsdWdpbnMgaW5jbHVkZWQgYnkgZGVmYXVsdCAod2l0aG91dCBoYXZpbmcgdG8gcmVxdWlyZVxuICAgICAqIHRoZW0pLlxuICAgICAqL1xuXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtcbiAgICAgIFJlc3BvbmRlckV2ZW50UGx1Z2luOiBSZXNwb25kZXJFdmVudFBsdWdpbixcbiAgICAgIFJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW46IFJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW5cbiAgICB9KTtcblxuICAgIHZhciBpbnN0YW5jZUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0gbmV3IE1hcCgpO1xuICAgIGZ1bmN0aW9uIHByZWNhY2hlRmliZXJOb2RlKGhvc3RJbnN0LCB0YWcpIHtcbiAgICAgIGluc3RhbmNlQ2FjaGUuc2V0KHRhZywgaG9zdEluc3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmNhY2hlRmliZXJOb2RlKHRhZykge1xuICAgICAgaW5zdGFuY2VDYWNoZS5kZWxldGUodGFnKTtcbiAgICAgIGluc3RhbmNlUHJvcHMuZGVsZXRlKHRhZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tVGFnKHRhZykge1xuICAgICAgcmV0dXJuIGluc3RhbmNlQ2FjaGUuZ2V0KHRhZykgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRUYWdGcm9tSW5zdGFuY2UoaW5zdCkge1xuICAgICAgdmFyIG5hdGl2ZUluc3RhbmNlID0gaW5zdC5zdGF0ZU5vZGU7XG4gICAgICB2YXIgdGFnID0gbmF0aXZlSW5zdGFuY2UuX25hdGl2ZVRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gdW5kZWZpbmVkICYmIG5hdGl2ZUluc3RhbmNlLmNhbm9uaWNhbCAhPSBudWxsKSB7XG4gICAgICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggRmFicmljXG4gICAgICAgIHRhZyA9IG5hdGl2ZUluc3RhbmNlLmNhbm9uaWNhbC5uYXRpdmVUYWc7XG4gICAgICAgIG5hdGl2ZUluc3RhbmNlID0gbmF0aXZlSW5zdGFuY2UuY2Fub25pY2FsLnB1YmxpY0luc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbGwgbmF0aXZlIGluc3RhbmNlcyBzaG91bGQgaGF2ZSBhIHRhZy5cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYXRpdmVJbnN0YW5jZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZVByb3BzLmdldChzdGF0ZU5vZGUuX25hdGl2ZVRhZykgfHwgbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyh0YWcsIHByb3BzKSB7XG4gICAgICBpbnN0YW5jZVByb3BzLnNldCh0YWcsIHByb3BzKTtcbiAgICB9XG5cbiAgICAvLyBVc2VkIGFzIGEgd2F5IHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMgd2hlbiB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHRvXG4gICAgLy8gdGhlIHJlbmRlcmVyLiBTdWNoIGFzIHdoZW4gd2UncmUgZGlzcGF0Y2hpbmcgZXZlbnRzIG9yIGlmIHRoaXJkIHBhcnR5XG4gICAgLy8gbGlicmFyaWVzIG5lZWQgdG8gY2FsbCBiYXRjaGVkVXBkYXRlcy4gRXZlbnR1YWxseSwgdGhpcyBBUEkgd2lsbCBnbyBhd2F5IHdoZW5cbiAgICAvLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuICAgIC8vIHNjaGVkdWxlZCB3b3JrIGFuZCBpbnN0ZWFkIGRvIHN5bmNocm9ub3VzIHdvcmsuXG4gICAgLy8gRGVmYXVsdHNcbiAgICB2YXIgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICAgICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgICB9O1xuXG4gICAgdmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMkMShmbiwgYm9va2tlZXBpbmcpIHtcbiAgICAgIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAgICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgICAgIHJldHVybiBmbihib29ra2VlcGluZyk7XG4gICAgICB9XG5cbiAgICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzSW1wbChmbiwgYm9va2tlZXBpbmcpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihcbiAgICAgIF9iYXRjaGVkVXBkYXRlc0ltcGwsXG4gICAgICBfZGlzY3JldGVVcGRhdGVzSW1wbFxuICAgICkge1xuICAgICAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBxdWV1ZSBvZiBldmVudHMgdGhhdCBoYXZlIGFjY3VtdWxhdGVkIHRoZWlyIGRpc3BhdGNoZXMgYW5kIGFyZVxuICAgICAqIHdhaXRpbmcgdG8gaGF2ZSB0aGVpciBkaXNwYXRjaGVzIGV4ZWN1dGVkLlxuICAgICAqL1xuXG4gICAgdmFyIGV2ZW50UXVldWUgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIERpc3BhdGNoZXMgYW4gZXZlbnQgYW5kIHJlbGVhc2VzIGl0IGJhY2sgaW50byB0aGUgcG9vbCwgdW5sZXNzIHBlcnNpc3RlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IGV2ZW50IFN5bnRoZXRpYyBldmVudCB0byBiZSBkaXNwYXRjaGVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2UoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQpO1xuXG4gICAgICAgIGlmICghZXZlbnQuaXNQZXJzaXN0ZW50KCkpIHtcbiAgICAgICAgICBldmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuXG4gICAgZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwoZSkge1xuICAgICAgcmV0dXJuIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZShlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5FdmVudHNJbkJhdGNoKGV2ZW50cykge1xuICAgICAgaWYgKGV2ZW50cyAhPT0gbnVsbCkge1xuICAgICAgICBldmVudFF1ZXVlID0gYWNjdW11bGF0ZUludG8oZXZlbnRRdWV1ZSwgZXZlbnRzKTtcbiAgICAgIH0gLy8gU2V0IGBldmVudFF1ZXVlYCB0byBudWxsIGJlZm9yZSBwcm9jZXNzaW5nIGl0IHNvIHRoYXQgd2UgY2FuIHRlbGwgaWYgbW9yZVxuICAgICAgLy8gZXZlbnRzIGdldCBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nLlxuXG4gICAgICB2YXIgcHJvY2Vzc2luZ0V2ZW50UXVldWUgPSBldmVudFF1ZXVlO1xuICAgICAgZXZlbnRRdWV1ZSA9IG51bGw7XG5cbiAgICAgIGlmICghcHJvY2Vzc2luZ0V2ZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQoXG4gICAgICAgIHByb2Nlc3NpbmdFdmVudFF1ZXVlLFxuICAgICAgICBleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2VUb3BMZXZlbFxuICAgICAgKTtcblxuICAgICAgaWYgKGV2ZW50UXVldWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwicHJvY2Vzc0V2ZW50UXVldWUoKTogQWRkaXRpb25hbCBldmVudHMgd2VyZSBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nIFwiICtcbiAgICAgICAgICAgIFwiYW4gZXZlbnQgcXVldWUuIFN1cHBvcnQgZm9yIHRoaXMgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZC5cIlxuICAgICAgICApO1xuICAgICAgfSAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cblxuICAgICAgcmV0aHJvd0NhdWdodEVycm9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBvZiBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCB0aGF0IHdvcmtzIG9uIHRoZSByZWNlaXZpbmcgc2lkZSBvZiBhXG4gICAgICogc2VyaWFsaXplZCB3b3JrZXIgYm91bmRhcnkuXG4gICAgICovXG4gICAgLy8gU2hhcmVkIGRlZmF1bHQgZW1wdHkgbmF0aXZlIGV2ZW50IC0gY29uc2VydmUgbWVtb3J5LlxuXG4gICAgdmFyIEVNUFRZX05BVElWRV9FVkVOVCA9IHt9O1xuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYSBzdWJzZXF1ZW5jZSBvZiBgVG91Y2hgZXMsIHdpdGhvdXQgZGVzdHJveWluZyBgdG91Y2hlc2AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PFRvdWNoPn0gdG91Y2hlcyBEZXNlcmlhbGl6ZWQgdG91Y2ggb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGluZGljZXMgSW5kaWNlcyBieSB3aGljaCB0byBwdWxsIHN1YnNlcXVlbmNlLlxuICAgICAqIEByZXR1cm4ge0FycmF5PFRvdWNoPn0gU3Vic2VxdWVuY2Ugb2YgdG91Y2ggb2JqZWN0cy5cbiAgICAgKi9cbiAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiB0b3VjaFN1YnNlcXVlbmNlKHRvdWNoZXMsIGluZGljZXMpIHtcbiAgICAgIHZhciByZXQgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJldC5wdXNoKHRvdWNoZXNbaW5kaWNlc1tpXV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUT0RPOiBQb29sIGFsbCBvZiB0aGlzLlxuICAgICAqXG4gICAgICogRGVzdHJveXMgYHRvdWNoZXNgIGJ5IHJlbW92aW5nIHRvdWNoIG9iamVjdHMgYXQgaW5kaWNlcyBgaW5kaWNlc2AuIFRoaXMgaXNcbiAgICAgKiB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggVzNDIHRvdWNoIFwiZW5kXCIgZXZlbnRzLCB3aGVyZSB0aGUgYWN0aXZlXG4gICAgICogdG91Y2hlcyBkb24ndCBpbmNsdWRlIHRoZSBzZXQgdGhhdCBoYXMganVzdCBiZWVuIFwiZW5kZWRcIi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXk8VG91Y2g+fSB0b3VjaGVzIERlc2VyaWFsaXplZCB0b3VjaCBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gaW5kaWNlcyBJbmRpY2VzIHRvIHJlbW92ZSBmcm9tIGB0b3VjaGVzYC5cbiAgICAgKiBAcmV0dXJuIHtBcnJheTxUb3VjaD59IFN1YnNlcXVlbmNlIG9mIHJlbW92ZWQgdG91Y2ggb2JqZWN0cy5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlbW92ZVRvdWNoZXNBdEluZGljZXModG91Y2hlcywgaW5kaWNlcykge1xuICAgICAgdmFyIHJpcHBlZE91dCA9IFtdOyAvLyB1c2UgYW4gdW5zYWZlIGRvd25jYXN0IHRvIGFsaWFzIHRvIG51bGxhYmxlIGVsZW1lbnRzLFxuICAgICAgLy8gc28gd2UgY2FuIGRlbGV0ZSBhbmQgdGhlbiBjb21wYWN0LlxuXG4gICAgICB2YXIgdGVtcCA9IHRvdWNoZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRpY2VzW2ldO1xuICAgICAgICByaXBwZWRPdXQucHVzaCh0b3VjaGVzW2luZGV4XSk7XG4gICAgICAgIHRlbXBbaW5kZXhdID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpbGxBdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGVtcC5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgY3VyID0gdGVtcFtqXTtcblxuICAgICAgICBpZiAoY3VyICE9PSBudWxsKSB7XG4gICAgICAgICAgdGVtcFtmaWxsQXQrK10gPSBjdXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGVtcC5sZW5ndGggPSBmaWxsQXQ7XG4gICAgICByZXR1cm4gcmlwcGVkT3V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGByZWNlaXZlRXZlbnRgIGluIHRlcm1zIG9mIG5vcm1hbGl6ZWQgKG5vbi10YWcpXG4gICAgICogYHJvb3ROb2RlSURgLlxuICAgICAqXG4gICAgICogQHNlZSByZWNlaXZlRXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3Jvb3ROb2RlSUR9IHJvb3ROb2RlSUQgUmVhY3Qgcm9vdCBub2RlIElEIHRoYXQgZXZlbnQgb2NjdXJyZWQgb24uXG4gICAgICogQHBhcmFtIHtUb3BMZXZlbFR5cGV9IHRvcExldmVsVHlwZSBUb3AgbGV2ZWwgdHlwZSBvZiBldmVudC5cbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5hdGl2ZUV2ZW50UGFyYW0gT2JqZWN0IHBhc3NlZCBmcm9tIG5hdGl2ZS5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIF9yZWNlaXZlUm9vdE5vZGVJREV2ZW50KFxuICAgICAgcm9vdE5vZGVJRCxcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIG5hdGl2ZUV2ZW50UGFyYW1cbiAgICApIHtcbiAgICAgIHZhciBuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50UGFyYW0gfHwgRU1QVFlfTkFUSVZFX0VWRU5UO1xuICAgICAgdmFyIGluc3QgPSBnZXRJbnN0YW5jZUZyb21UYWcocm9vdE5vZGVJRCk7XG4gICAgICB2YXIgdGFyZ2V0ID0gbnVsbDtcblxuICAgICAgaWYgKGluc3QgIT0gbnVsbCkge1xuICAgICAgICB0YXJnZXQgPSBpbnN0LnN0YXRlTm9kZTtcbiAgICAgIH1cblxuICAgICAgYmF0Y2hlZFVwZGF0ZXMkMShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1bkV4dHJhY3RlZFBsdWdpbkV2ZW50c0luQmF0Y2goXG4gICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgIGluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgICk7XG4gICAgICB9KTsgLy8gUmVhY3QgTmF0aXZlIGRvZXNuJ3QgdXNlIFJlYWN0Q29udHJvbGxlZENvbXBvbmVudCBidXQgaWYgaXQgZGlkLCBoZXJlJ3NcbiAgICAgIC8vIHdoZXJlIGl0IHdvdWxkIGRvIGl0LlxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgcmVnaXN0ZXJlZCBwbHVnaW5zIGFuIG9wcG9ydHVuaXR5IHRvIGV4dHJhY3QgZXZlbnRzIGZyb20gdG9wLWxldmVsXG4gICAgICogbmF0aXZlIGJyb3dzZXIgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBleHRyYWN0UGx1Z2luRXZlbnRzKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHZhciBldmVudHMgPSBudWxsO1xuICAgICAgdmFyIGxlZ2FjeVBsdWdpbnMgPSBwbHVnaW5zO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlZ2FjeVBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gTm90IGV2ZXJ5IHBsdWdpbiBpbiB0aGUgb3JkZXJpbmcgbWF5IGJlIGxvYWRlZCBhdCBydW50aW1lLlxuICAgICAgICB2YXIgcG9zc2libGVQbHVnaW4gPSBsZWdhY3lQbHVnaW5zW2ldO1xuXG4gICAgICAgIGlmIChwb3NzaWJsZVBsdWdpbikge1xuICAgICAgICAgIHZhciBleHRyYWN0ZWRFdmVudHMgPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKFxuICAgICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGV4dHJhY3RlZEV2ZW50cykge1xuICAgICAgICAgICAgZXZlbnRzID0gYWNjdW11bGF0ZUludG8oZXZlbnRzLCBleHRyYWN0ZWRFdmVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bkV4dHJhY3RlZFBsdWdpbkV2ZW50c0luQmF0Y2goXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0YXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICkge1xuICAgICAgdmFyIGV2ZW50cyA9IGV4dHJhY3RQbHVnaW5FdmVudHMoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApO1xuICAgICAgcnVuRXZlbnRzSW5CYXRjaChldmVudHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdWJsaWNseSBleHBvc2VkIG1ldGhvZCBvbiBtb2R1bGUgZm9yIG5hdGl2ZSBvYmpjIHRvIGludm9rZSB3aGVuIGEgdG9wXG4gICAgICogbGV2ZWwgZXZlbnQgaXMgZXh0cmFjdGVkLlxuICAgICAqIEBwYXJhbSB7cm9vdE5vZGVJRH0gcm9vdE5vZGVJRCBSZWFjdCByb290IG5vZGUgSUQgdGhhdCBldmVudCBvY2N1cnJlZCBvbi5cbiAgICAgKiBAcGFyYW0ge1RvcExldmVsVHlwZX0gdG9wTGV2ZWxUeXBlIFRvcCBsZXZlbCB0eXBlIG9mIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFBhcmFtIE9iamVjdCBwYXNzZWQgZnJvbSBuYXRpdmUuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiByZWNlaXZlRXZlbnQocm9vdE5vZGVJRCwgdG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudFBhcmFtKSB7XG4gICAgICBfcmVjZWl2ZVJvb3ROb2RlSURFdmVudChyb290Tm9kZUlELCB0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50UGFyYW0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbGUgbXVsdGktd3JhcHBlciBhcm91bmQgYHJlY2VpdmVFdmVudGAgdGhhdCBpcyBpbnRlbmRlZCB0byByZWNlaXZlIGFuXG4gICAgICogZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9mIGBUb3VjaGAgb2JqZWN0cywgYW5kIG90aGVyIGluZm9ybWF0aW9uIHRoYXRcbiAgICAgKiBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgVzNDIGNvbXBsaWFudCBgRXZlbnRgIGFuZCBgVG91Y2hgIGxpc3RzLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgY3JlYXRlIGRpc3BhdGNoIGJlaGF2aW9yIHRoYXQgZGlmZmVycyB0aGFuIHdlYiB0b3VjaCBoYW5kbGluZy4gV2VcbiAgICAgKiBsb29wIHRocm91Z2ggZWFjaCBvZiB0aGUgY2hhbmdlZCB0b3VjaGVzIGFuZCByZWNlaXZlIGl0IGFzIGEgc2luZ2xlIGV2ZW50LlxuICAgICAqIFNvIHR3byBgdG91Y2hTdGFydGAvYHRvdWNoTW92ZWBzIHRoYXQgb2NjdXIgc2ltdWx0YW5lb3VzbHkgYXJlIHJlY2VpdmVkIGFzXG4gICAgICogdHdvIHNlcGFyYXRlIHRvdWNoIGV2ZW50IGRpc3BhdGNoZXMgLSB3aGVuIHRoZXkgYXJndWFibHkgc2hvdWxkIGJlIG9uZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV1c2VzIHRoZSBgVG91Y2hgIG9iamVjdHMgdGhlbXNlbHZlcyBhcyB0aGUgYEV2ZW50YHNcbiAgICAgKiBzaW5jZSB3ZSBkaXNwYXRjaCBhbiBldmVudCBmb3IgZWFjaCB0b3VjaCAodGhvdWdoIHRoYXQgbWlnaHQgbm90IGJlIHNwZWNcbiAgICAgKiBjb21wbGlhbnQpLiBUaGUgbWFpbiBwdXJwb3NlIG9mIHJldXNpbmcgdGhlbSBpcyB0byBzYXZlIGFsbG9jYXRpb25zLlxuICAgICAqXG4gICAgICogVE9ETzogRGlzcGF0Y2ggbXVsdGlwbGUgY2hhbmdlZCB0b3VjaGVzIGluIG9uZSBldmVudC4gVGhlIGJ1YmJsZSBwYXRoXG4gICAgICogY291bGQgYmUgdGhlIGZpcnN0IGNvbW1vbiBhbmNlc3RvciBvZiBhbGwgdGhlIGBjaGFuZ2VkVG91Y2hlc2AuXG4gICAgICpcbiAgICAgKiBPbmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYmVoYXZpb3IgYW5kIFczQyBzcGVjOiBjYW5jZWxsZWQgdG91Y2hlcyB3aWxsXG4gICAgICogbm90IGFwcGVhciBpbiBgLnRvdWNoZXNgLCBvciBpbiBhbnkgZnV0dXJlIGAudG91Y2hlc2AsIHRob3VnaCB0aGV5IG1heVxuICAgICAqIHN0aWxsIGJlIFwiYWN0aXZlbHkgdG91Y2hpbmcgdGhlIHN1cmZhY2VcIi5cbiAgICAgKlxuICAgICAqIFdlYiBkZXNrdG9wIHBvbHlmaWxscyBvbmx5IG5lZWQgdG8gY29uc3RydWN0IGEgZmFrZSB0b3VjaCBldmVudCB3aXRoXG4gICAgICogaWRlbnRpZmllciAwLCBhbHNvIGFiYW5kb25pbmcgdHJhZGl0aW9uYWwgY2xpY2sgaGFuZGxlcnMuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiByZWNlaXZlVG91Y2hlcyhldmVudFRvcExldmVsVHlwZSwgdG91Y2hlcywgY2hhbmdlZEluZGljZXMpIHtcbiAgICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9XG4gICAgICAgIGV2ZW50VG9wTGV2ZWxUeXBlID09PSBcInRvcFRvdWNoRW5kXCIgfHxcbiAgICAgICAgZXZlbnRUb3BMZXZlbFR5cGUgPT09IFwidG9wVG91Y2hDYW5jZWxcIlxuICAgICAgICAgID8gcmVtb3ZlVG91Y2hlc0F0SW5kaWNlcyh0b3VjaGVzLCBjaGFuZ2VkSW5kaWNlcylcbiAgICAgICAgICA6IHRvdWNoU3Vic2VxdWVuY2UodG91Y2hlcywgY2hhbmdlZEluZGljZXMpO1xuXG4gICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoOyBqaisrKSB7XG4gICAgICAgIHZhciB0b3VjaCA9IGNoYW5nZWRUb3VjaGVzW2pqXTsgLy8gVG91Y2ggb2JqZWN0cyBjYW4gZnVsZmlsbCB0aGUgcm9sZSBvZiBgRE9NYCBgRXZlbnRgIG9iamVjdHMgaWYgd2Ugc2V0XG4gICAgICAgIC8vIHRoZSBgY2hhbmdlZFRvdWNoZXNgL2B0b3VjaGVzYC4gVGhpcyBzYXZlcyBhbGxvY2F0aW9ucy5cblxuICAgICAgICB0b3VjaC5jaGFuZ2VkVG91Y2hlcyA9IGNoYW5nZWRUb3VjaGVzO1xuICAgICAgICB0b3VjaC50b3VjaGVzID0gdG91Y2hlcztcbiAgICAgICAgdmFyIG5hdGl2ZUV2ZW50ID0gdG91Y2g7XG4gICAgICAgIHZhciByb290Tm9kZUlEID0gbnVsbDtcbiAgICAgICAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldDtcblxuICAgICAgICBpZiAodGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRhcmdldCA8IDEpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoXCJBIHZpZXcgaXMgcmVwb3J0aW5nIHRoYXQgYSB0b3VjaCBvY2N1cnJlZCBvbiB0YWcgemVyby5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvb3ROb2RlSUQgPSB0YXJnZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIFNob3VsZG4ndCB3ZSAqbm90KiBjYWxsIGl0IGlmIHJvb3ROb2RlSUQgaXMgbnVsbD9cblxuICAgICAgICBfcmVjZWl2ZVJvb3ROb2RlSURFdmVudChyb290Tm9kZUlELCBldmVudFRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1vZHVsZSBwcm92aWRlZCBieSBSTjpcbiAgICB2YXIgUmVhY3ROYXRpdmVHbG9iYWxSZXNwb25kZXJIYW5kbGVyID0ge1xuICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIChmcm9tLCB0bywgYmxvY2tOYXRpdmVSZXNwb25kZXIpIHtcbiAgICAgICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHRhZyA9IHRvLnN0YXRlTm9kZS5fbmF0aXZlVGFnO1xuICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIuc2V0SlNSZXNwb25kZXIoXG4gICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICBibG9ja05hdGl2ZVJlc3BvbmRlclxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5jbGVhckpTUmVzcG9uZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgdGhlIGV2ZW50IGVtaXR0ZXIgd2l0aCB0aGUgbmF0aXZlIGJyaWRnZVxuICAgICAqL1xuXG4gICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJDVEV2ZW50RW1pdHRlci5yZWdpc3Rlcih7XG4gICAgICByZWNlaXZlRXZlbnQ6IHJlY2VpdmVFdmVudCxcbiAgICAgIHJlY2VpdmVUb3VjaGVzOiByZWNlaXZlVG91Y2hlc1xuICAgIH0pO1xuICAgIHNldENvbXBvbmVudFRyZWUoXG4gICAgICBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlLFxuICAgICAgZ2V0SW5zdGFuY2VGcm9tVGFnLFxuICAgICAgZ2V0VGFnRnJvbUluc3RhbmNlXG4gICAgKTtcbiAgICBSZXNwb25kZXJFdmVudFBsdWdpbi5pbmplY3Rpb24uaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlcihcbiAgICAgIFJlYWN0TmF0aXZlR2xvYmFsUmVzcG9uZGVySGFuZGxlclxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICAgICAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gICAgICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gICAgICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAgICAgKiBJZiB0aGlzIGJlY29tZXMgYW4gYWN0dWFsIE1hcCwgdGhhdCB3aWxsIGJyZWFrLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAga2V5Ll9yZWFjdEludGVybmFscyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBlbmFibGVTY2hlZHVsaW5nUHJvZmlsZXIgPSBmYWxzZTtcbiAgICB2YXIgZW5hYmxlUHJvZmlsZXJUaW1lciA9IHRydWU7XG4gICAgdmFyIGVuYWJsZVByb2ZpbGVyQ29tbWl0SG9va3MgPSB0cnVlO1xuICAgIHZhciBlbmFibGVQcm9maWxlck5lc3RlZFVwZGF0ZVBoYXNlID0gdHJ1ZTtcbiAgICB2YXIgc3luY0xhbmVFeHBpcmF0aW9uTXMgPSAyNTA7XG4gICAgdmFyIHRyYW5zaXRpb25MYW5lRXhwaXJhdGlvbk1zID0gNTAwMDtcbiAgICB2YXIgZW5hYmxlTGF6eUNvbnRleHRQcm9wYWdhdGlvbiA9IGZhbHNlO1xuICAgIHZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTtcbiAgICB2YXIgZW5hYmxlQXN5bmNBY3Rpb25zID0gZmFsc2U7XG5cbiAgICAvLyBBVFRFTlRJT05cbiAgICAvLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4gICAgLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuICAgIC8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTtcbiAgICB2YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpO1xuICAgIHZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpO1xuICAgIHZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpO1xuICAgIHZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpO1xuICAgIHZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpO1xuICAgIHZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTtcbiAgICB2YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtcbiAgICB2YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTtcbiAgICB2YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik7XG4gICAgdmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpO1xuICAgIHZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTtcbiAgICB2YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTtcbiAgICB2YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZGVidWdfdHJhY2VfbW9kZVwiKTtcbiAgICB2YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpO1xuICAgIHZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGVnYWN5X2hpZGRlblwiKTtcbiAgICB2YXIgUkVBQ1RfQ0FDSEVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jYWNoZVwiKTtcbiAgICB2YXIgUkVBQ1RfVFJBQ0lOR19NQVJLRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFjaW5nX21hcmtlclwiKTtcbiAgICB2YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xuICAgIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9IFwiQEBpdGVyYXRvclwiO1xuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgICAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXliZUl0ZXJhdG9yID1cbiAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgIG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gICAgICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUkMShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICAgICAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgICAgIHJldHVybiBkaXNwbGF5TmFtZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gXCJcIlxuICAgICAgICA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIlxuICAgICAgICA6IHdyYXBwZXJOYW1lO1xuICAgIH0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cbiAgICBmdW5jdGlvbiBnZXRDb250ZXh0TmFtZSQxKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiO1xuICAgIH1cblxuICAgIHZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIik7IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIHtcbiAgICAgICAgICAvLyBUT0RPOiBDcmVhdGUgYSBjb252ZW50aW9uIGZvciBuYW1pbmcgY2xpZW50IHJlZmVyZW5jZXMgd2l0aCBkZWJ1ZyBpbmZvLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcblxuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcblxuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lJDEoY29udGV4dCkgKyBcIi5Db25zdW1lclwiO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZSQxKHByb3ZpZGVyLl9jb250ZXh0KSArIFwiLlByb3ZpZGVyXCI7XG5cbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUkMSh0eXBlLCB0eXBlLnJlbmRlciwgXCJGb3J3YXJkUmVmXCIpO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIjtcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOiB7XG4gICAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAoZnVuY3Rpb25OYW1lICE9PSBcIlwiXG4gICAgICAgICAgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCJcbiAgICAgICAgICA6IHdyYXBwZXJOYW1lKVxuICAgICAgKTtcbiAgICB9IC8vIEtlZXAgaW4gc3luYyB3aXRoIHNoYXJlZC9nZXRDb21wb25lbnROYW1lRnJvbVR5cGVcblxuICAgIGZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHtcbiAgICAgIHZhciB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuXG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIENhY2hlQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBcIkNhY2hlXCI7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArIFwiLkNvbnN1bWVyXCI7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgXCIuUHJvdmlkZXJcIjtcblxuICAgICAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgICAgICByZXR1cm4gXCJEZWh5ZHJhdGVkRnJhZ21lbnRcIjtcblxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCBcIkZvcndhcmRSZWZcIik7XG5cbiAgICAgICAgY2FzZSBGcmFnbWVudDpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuXG4gICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgLy8gSG9zdCBjb21wb25lbnQgdHlwZSBpcyB0aGUgZGlzcGxheSBuYW1lIChlLmcuIFwiZGl2XCIsIFwiVmlld1wiKVxuICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcblxuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHJldHVybiBcIlJvb3RcIjtcblxuICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgIHJldHVybiBcIlRleHRcIjtcblxuICAgICAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICAgICAgLy8gTmFtZSBjb21lcyBmcm9tIHRoZSB0eXBlIGluIHRoaXMgY2FzZTsgd2UgZG9uJ3QgaGF2ZSBhIHRhZy5cbiAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuXG4gICAgICAgIGNhc2UgTW9kZTpcbiAgICAgICAgICBpZiAodHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSkge1xuICAgICAgICAgICAgLy8gRG9uJ3QgYmUgbGVzcyBzcGVjaWZpYyB0aGFuIHNoYXJlZC9nZXRDb21wb25lbnROYW1lRnJvbVR5cGVcbiAgICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gXCJNb2RlXCI7XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFwiT2Zmc2NyZWVuXCI7XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICByZXR1cm4gXCJQcm9maWxlclwiO1xuXG4gICAgICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFwiU2NvcGVcIjtcblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG5cbiAgICAgICAgY2FzZSBUcmFjaW5nTWFya2VyQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBcIlRyYWNpbmdNYXJrZXJcIjtcbiAgICAgICAgLy8gVGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhpcyB0YWdzIGNvbWUgZnJvbSB0aGUgdXNlci1wcm92aWRlZCB0eXBlOlxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgTm9GbGFncyQxID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAwO1xuICAgIHZhciBQZXJmb3JtZWRXb3JrID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICovXG4gICAgICAxO1xuICAgIHZhciBQbGFjZW1lbnQgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyO1xuICAgIHZhciBEaWRDYXB0dXJlID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxMjg7XG4gICAgdmFyIEh5ZHJhdGluZyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQwOTY7IC8vIFlvdSBjYW4gY2hhbmdlIHRoZSByZXN0IChhbmQgYWRkIG1vcmUpLlxuXG4gICAgdmFyIFVwZGF0ZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQ7XG4gICAgLyogU2tpcHBlZCB2YWx1ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDA7ICovXG5cbiAgICB2YXIgQ2hpbGREZWxldGlvbiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAqL1xuICAgICAgMTY7XG4gICAgdmFyIENvbnRlbnRSZXNldCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDMyO1xuICAgIHZhciBDYWxsYmFjayA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICA2NDtcbiAgICAvKiBVc2VkIGJ5IERpZENhcHR1cmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDsgKi9cblxuICAgIHZhciBGb3JjZUNsaWVudFJlbmRlciA9XG4gICAgICAvKiAgICAgICAgICAgICovXG4gICAgICAyNTY7XG4gICAgdmFyIFJlZiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDUxMjtcbiAgICB2YXIgU25hcHNob3QgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMTAyNDtcbiAgICB2YXIgUGFzc2l2ZSQxID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyMDQ4O1xuICAgIC8qIFVzZWQgYnkgSHlkcmF0aW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMGIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwOyAqL1xuXG4gICAgdmFyIFZpc2liaWxpdHkgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDgxOTI7XG4gICAgdmFyIFN0b3JlQ29uc2lzdGVuY3kgPVxuICAgICAgLyogICAgICAgICAgICAgKi9cbiAgICAgIDE2Mzg0OyAvLyBJdCdzIE9LIHRvIHJldXNlIHRoZXNlIGJpdHMgYmVjYXVzZSB0aGVzZSBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZvclxuICAgIC8vIGRpZmZlcmVudCBmaWJlciB0eXBlcy4gV2Ugc2hvdWxkIHJlYWxseSBiZSBkb2luZyB0aGlzIGZvciBhcyBtYW55IGZsYWdzIGFzXG4gICAgLy8gcG9zc2libGUsIGJlY2F1c2Ugd2UncmUgYWJvdXQgdG8gcnVuIG91dCBvZiBiaXRzLlxuXG4gICAgdmFyIFNjaGVkdWxlUmV0cnkgPSBTdG9yZUNvbnNpc3RlbmN5O1xuICAgIHZhciBTaG91bGRTdXNwZW5kQ29tbWl0ID0gVmlzaWJpbGl0eTtcbiAgICB2YXIgRGlkRGVmZXIgPSBDb250ZW50UmVzZXQ7XG4gICAgdmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuICAgICAgUGFzc2l2ZSQxIHwgVXBkYXRlIHwgQ2FsbGJhY2sgfCBSZWYgfCBTbmFwc2hvdCB8IFN0b3JlQ29uc2lzdGVuY3k7IC8vIFVuaW9uIG9mIGFsbCBjb21taXQgZmxhZ3MgKGZsYWdzIHdpdGggdGhlIGxpZmV0aW1lIG9mIGEgcGFydGljdWxhciBjb21taXQpXG5cbiAgICB2YXIgSG9zdEVmZmVjdE1hc2sgPVxuICAgICAgLyogICAgICAgICAgICAgICAqL1xuICAgICAgMzI3Njc7IC8vIFRoZXNlIGFyZSBub3QgcmVhbGx5IHNpZGUgZWZmZWN0cywgYnV0IHdlIHN0aWxsIHJldXNlIHRoaXMgZmllbGQuXG5cbiAgICB2YXIgSW5jb21wbGV0ZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMzI3Njg7XG4gICAgdmFyIFNob3VsZENhcHR1cmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgKi9cbiAgICAgIDY1NTM2O1xuICAgIHZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbiAgICAgIC8qICovXG4gICAgICAxMzEwNzI7XG4gICAgdmFyIEZvcmtlZCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDEwNDg1NzY7IC8vIFN0YXRpYyB0YWdzIGRlc2NyaWJlIGFzcGVjdHMgb2YgYSBmaWJlciB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIsXG4gICAgLy8gZS5nLiBhIGZpYmVyIHVzZXMgYSBwYXNzaXZlIGVmZmVjdCAoZXZlbiBpZiB0aGVyZSBhcmUgbm8gdXBkYXRlcyBvbiB0aGlzIHBhcnRpY3VsYXIgcmVuZGVyKS5cbiAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gZGVmZXIgbW9yZSB3b3JrIGluIHRoZSB1bm1vdW50IGNhc2UsXG4gICAgLy8gc2luY2Ugd2UgY2FuIGRlZmVyIHRyYXZlcnNpbmcgdGhlIHRyZWUgZHVyaW5nIGxheW91dCB0byBsb29rIGZvciBQYXNzaXZlIGVmZmVjdHMsXG4gICAgLy8gYW5kIGluc3RlYWQgcmVseSBvbiB0aGUgc3RhdGljIGZsYWcgYXMgYSBzaWduYWwgdGhhdCB0aGVyZSBtYXkgYmUgY2xlYW51cCB3b3JrLlxuXG4gICAgdmFyIFJlZlN0YXRpYyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDIwOTcxNTI7XG4gICAgdmFyIExheW91dFN0YXRpYyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQxOTQzMDQ7XG4gICAgdmFyIFBhc3NpdmVTdGF0aWMgPVxuICAgICAgLyogICAgICAgICAgICAgICAgKi9cbiAgICAgIDgzODg2MDg7XG4gICAgdmFyIE1heVN1c3BlbmRDb21taXQgPVxuICAgICAgLyogICAgICAgICAgICAgKi9cbiAgICAgIDE2Nzc3MjE2OyAvLyBGbGFnIHVzZWQgdG8gaWRlbnRpZnkgbmV3bHkgaW5zZXJ0ZWQgZmliZXJzLiBJdCBpc24ndCByZXNldCBhZnRlciBjb21taXQgdW5saWtlIGBQbGFjZW1lbnRgLlxuXG4gICAgdmFyIFBsYWNlbWVudERFViA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDMzNTU0NDMyO1xuICAgIHZhciBNb3VudExheW91dERldiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICovXG4gICAgICA2NzEwODg2NDtcbiAgICB2YXIgTW91bnRQYXNzaXZlRGV2ID1cbiAgICAgIC8qICAgICAgICAgICAgICAqL1xuICAgICAgMTM0MjE3NzI4OyAvLyBHcm91cHMgb2YgZmxhZ3MgdGhhdCBhcmUgdXNlZCBpbiB0aGUgY29tbWl0IHBoYXNlIHRvIHNraXAgb3ZlciB0cmVlcyB0aGF0XG4gICAgLy8gZG9uJ3QgY29udGFpbiBlZmZlY3RzLCBieSBjaGVja2luZyBzdWJ0cmVlRmxhZ3MuXG5cbiAgICB2YXIgQmVmb3JlTXV0YXRpb25NYXNrID0gLy8gVE9ETzogUmVtb3ZlIFVwZGF0ZSBmbGFnIGZyb20gYmVmb3JlIG11dGF0aW9uIHBoYXNlIGJ5IHJlLWxhbmRpbmcgVmlzaWJpbGl0eVxuICAgICAgLy8gZmxhZyBsb2dpYyAoc2VlICMyMDA0MylcbiAgICAgIFVwZGF0ZSB8IFNuYXBzaG90IHwgMDtcbiAgICB2YXIgTXV0YXRpb25NYXNrID1cbiAgICAgIFBsYWNlbWVudCB8XG4gICAgICBVcGRhdGUgfFxuICAgICAgQ2hpbGREZWxldGlvbiB8XG4gICAgICBDb250ZW50UmVzZXQgfFxuICAgICAgUmVmIHxcbiAgICAgIEh5ZHJhdGluZyB8XG4gICAgICBWaXNpYmlsaXR5O1xuICAgIHZhciBMYXlvdXRNYXNrID0gVXBkYXRlIHwgQ2FsbGJhY2sgfCBSZWYgfCBWaXNpYmlsaXR5OyAvLyBUT0RPOiBTcGxpdCBpbnRvIFBhc3NpdmVNb3VudE1hc2sgYW5kIFBhc3NpdmVVbm1vdW50TWFza1xuXG4gICAgdmFyIFBhc3NpdmVNYXNrID0gUGFzc2l2ZSQxIHwgVmlzaWJpbGl0eSB8IENoaWxkRGVsZXRpb247IC8vIFVuaW9uIG9mIHRhZ3MgdGhhdCBkb24ndCBnZXQgcmVzZXQgb24gY2xvbmVzLlxuICAgIC8vIFRoaXMgYWxsb3dzIGNlcnRhaW4gY29uY2VwdHMgdG8gcGVyc2lzdCB3aXRob3V0IHJlY2FsY3VsYXRpbmcgdGhlbSxcbiAgICAvLyBlLmcuIHdoZXRoZXIgYSBzdWJ0cmVlIGNvbnRhaW5zIHBhc3NpdmUgZWZmZWN0cyBvciBwb3J0YWxzLlxuXG4gICAgdmFyIFN0YXRpY01hc2sgPVxuICAgICAgTGF5b3V0U3RhdGljIHwgUGFzc2l2ZVN0YXRpYyB8IFJlZlN0YXRpYyB8IE1heVN1c3BlbmRDb21taXQ7XG5cbiAgICB2YXIgUmVhY3RDdXJyZW50T3duZXIkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuICAgIGZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgICAgIHZhciBub2RlID0gZmliZXI7XG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcblxuICAgICAgaWYgKCFmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgICAgICAvLyB5ZXQuIElmIGl0IGlzLCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHBlbmRpbmcgaW5zZXJ0aW9uIGVmZmVjdCBvbiBpdC5cbiAgICAgICAgdmFyIG5leHROb2RlID0gbm9kZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgbm9kZSA9IG5leHROb2RlO1xuXG4gICAgICAgICAgaWYgKChub2RlLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgICAgICAvLyBpZiB0aGF0IG9uZSBpcyBzdGlsbCBtb3VudGVkLlxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyB3YXMgYSBuZXN0ZWQgSG9zdFJvb3Qgd2hlbiB1c2VkIHdpdGhcbiAgICAgICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgICAgIH0gLy8gSWYgd2UgZGlkbid0IGhpdCB0aGUgcm9vdCwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIGluIGFuIGRpc2Nvbm5lY3RlZCB0cmVlXG4gICAgICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gICAgICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gICAgICB7XG4gICAgICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudDtcblxuICAgICAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoIWluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiBcIiArXG4gICAgICAgICAgICAgICAgXCJyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkIFwiICtcbiAgICAgICAgICAgICAgICBcIm5ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzIFwiICtcbiAgICAgICAgICAgICAgICBcInJlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kIFwiICtcbiAgICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKG93bmVyRmliZXIpIHx8IFwiQSBjb21wb25lbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgICBpZiAoIWZpYmVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgICAgIGlmIChnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSAhPT0gZmliZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcikge1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBpZiAobmVhcmVzdE1vdW50ZWQgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgfSAvLyBJZiB3ZSBoYXZlIHR3byBwb3NzaWJsZSBicmFuY2hlcywgd2UnbGwgd2FsayBiYWNrd2FyZHMgdXAgdG8gdGhlIHJvb3RcbiAgICAgIC8vIHRvIHNlZSB3aGF0IHBhdGggdGhlIHJvb3QgcG9pbnRzIHRvLiBPbiB0aGUgd2F5IHdlIG1heSBoaXQgb25lIG9mIHRoZVxuICAgICAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cbiAgICAgIHZhciBhID0gZmliZXI7XG4gICAgICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcblxuICAgICAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSByb290LlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAocGFyZW50QiA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIFN1c3BlbnNlIGNvbXBvbmVudCBpcyBoaWRkZW4uIEFuIGV4dHJhIGZyYWdtZW50IGZpYmVyXG4gICAgICAgICAgLy8gaXMgaW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgU3VzcGVuc2UgZmliZXIgYW5kIGl0cyBjaGlsZHJlbi4gU2tpcFxuICAgICAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICAgICAgdmFyIG5leHRQYXJlbnQgPSBwYXJlbnRBLnJldHVybjtcblxuICAgICAgICAgIGlmIChuZXh0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSdyZSBhdCB0aGUgcm9vdC5cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgICAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAgICAgLy8gcHJpb3JpdHk6IHRoZSBiYWlsZWQgb3V0IGZpYmVyJ3MgY2hpbGQgcmV1c2VzIHRoZSBjdXJyZW50IGNoaWxkLlxuXG4gICAgICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFsdGVybmF0ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgIH0gLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gYWx0ZXJuYXRlIGZvciBhbnkgbW91bnRpbmcgbm9kZS4gU28gdGhlIG9ubHlcbiAgICAgICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlciBvZiBBIGFuZCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgQiBwb2ludCB0byBkaWZmZXJlbnRcbiAgICAgICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgICAgIC8vIHNldCBvZiBCLnJldHVybi5cbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgICAgIC8vIHdoaWNoIGNoaWxkIGJlbG9uZ3MgdG8gd2hpY2ggc2V0LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICAgICAgdmFyIGRpZEZpbmRDaGlsZCA9IGZhbHNlO1xuICAgICAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEIncyBjaGlsZCBzZXRcbiAgICAgICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBcIiArXG4gICAgICAgICAgICAgICAgICBcImluIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhLmFsdGVybmF0ZSAhPT0gYikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBcIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gSWYgdGhlIHJvb3QgaXMgbm90IGEgaG9zdCBjb250YWluZXIsIHdlJ3JlIGluIGEgZGlzY29ubmVjdGVkIHRyZWUuIEkuZS5cbiAgICAgIC8vIHVubW91bnRlZC5cblxuICAgICAgaWYgKGEudGFnICE9PSBIb3N0Um9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSkge1xuICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgIH0gLy8gT3RoZXJ3aXNlIEIgaGFzIHRvIGJlIGN1cnJlbnQgYnJhbmNoLlxuXG4gICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcbiAgICAgIHJldHVybiBjdXJyZW50UGFyZW50ICE9PSBudWxsXG4gICAgICAgID8gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKGN1cnJlbnRQYXJlbnQpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSkge1xuICAgICAgLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cbiAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcblxuICAgICAgaWYgKFxuICAgICAgICB0YWcgPT09IEhvc3RDb21wb25lbnQgfHxcbiAgICAgICAgdGFnID09PSBIb3N0SG9pc3RhYmxlIHx8XG4gICAgICAgIHRhZyA9PT0gSG9zdFNpbmdsZXRvbiB8fFxuICAgICAgICB0YWcgPT09IEhvc3RUZXh0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwoY2hpbGQpO1xuXG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvZXNGaWJlckNvbnRhaW4ocGFyZW50RmliZXIsIGNoaWxkRmliZXIpIHtcbiAgICAgIHZhciBub2RlID0gY2hpbGRGaWJlcjtcbiAgICAgIHZhciBwYXJlbnRGaWJlckFsdGVybmF0ZSA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IHBhcmVudEZpYmVyIHx8IG5vZGUgPT09IHBhcmVudEZpYmVyQWx0ZXJuYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBNb2R1bGVzIHByb3ZpZGVkIGJ5IFJOOlxuICAgIHZhciBlbXB0eU9iamVjdCQxID0ge307XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdXBkYXRlcyBiZXR3ZWVuIHR3byBzZXRzIG9mIHByb3BzLlxuICAgICAqXG4gICAgICogVGhlc2UgaGVscGVycyBhcmUgYWxsIGVuY2Fwc3VsYXRlZCBpbnRvIGEgc2luZ2xlIG1vZHVsZSwgYmVjYXVzZSB0aGV5IHVzZVxuICAgICAqIG11dGF0aW9uIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdoaWNoIGxlYWRzIHRvIHN1YnRsZSBzaGFyZWRcbiAgICAgKiBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgY29kZSBwYXRocy4gVG8gYXZvaWQgdGhpcyBtdXRhYmxlIHN0YXRlIGxlYWtpbmdcbiAgICAgKiBhY3Jvc3MgbW9kdWxlcywgSSd2ZSBrZXB0IHRoZW0gaXNvbGF0ZWQgdG8gdGhpcyBtb2R1bGUuXG4gICAgICovXG4gICAgLy8gVHJhY2tzIHJlbW92ZWQga2V5c1xuXG4gICAgdmFyIHJlbW92ZWRLZXlzID0gbnVsbDtcbiAgICB2YXIgcmVtb3ZlZEtleUNvdW50ID0gMDtcbiAgICB2YXIgZGVlcERpZmZlck9wdGlvbnMgPSB7XG4gICAgICB1bnNhZmVseUlnbm9yZUZ1bmN0aW9uczogdHJ1ZVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0RGlmZmVyKHByZXZQcm9wLCBuZXh0UHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCAhPT0gXCJvYmplY3RcIiB8fCBuZXh0UHJvcCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBTY2FsYXJzIGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNrZWQgZm9yIGVxdWFsaXR5XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9iamVjdHMgYW5kIGFycmF5cywgdGhlIGRlZmF1bHQgZGlmZmluZyBhbGdvcml0aG0gaXMgYSBkZWVwIGNvbXBhcmVcbiAgICAgICAgcmV0dXJuIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5kZWVwRGlmZmVyKFxuICAgICAgICAgIHByZXZQcm9wLFxuICAgICAgICAgIG5leHRQcm9wLFxuICAgICAgICAgIGRlZXBEaWZmZXJPcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzdG9yZURlbGV0ZWRWYWx1ZXNJbk5lc3RlZEFycmF5KFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIG5vZGUsXG4gICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICApIHtcbiAgICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICAgIHZhciBpID0gbm9kZS5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGktLSAmJiByZW1vdmVkS2V5Q291bnQgPiAwKSB7XG4gICAgICAgICAgcmVzdG9yZURlbGV0ZWRWYWx1ZXNJbk5lc3RlZEFycmF5KFxuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICAgIG5vZGVbaV0sXG4gICAgICAgICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUgJiYgcmVtb3ZlZEtleUNvdW50ID4gMCkge1xuICAgICAgICB2YXIgb2JqID0gbm9kZTtcblxuICAgICAgICBmb3IgKHZhciBwcm9wS2V5IGluIHJlbW92ZWRLZXlzKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgaWYgKCFyZW1vdmVkS2V5c1twcm9wS2V5XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRQcm9wID0gb2JqW3Byb3BLZXldO1xuXG4gICAgICAgICAgaWYgKG5leHRQcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBhdHRyaWJ1dGVDb25maWcgPSB2YWxpZEF0dHJpYnV0ZXNbcHJvcEtleV07XG5cbiAgICAgICAgICBpZiAoIWF0dHJpYnV0ZUNvbmZpZykge1xuICAgICAgICAgICAgY29udGludWU7IC8vIG5vdCBhIHZhbGlkIG5hdGl2ZSBwcm9wXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICBuZXh0UHJvcCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICAgICAgbmV4dFByb3AgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBjYXNlOiAhT2JqZWN0IGlzIHRoZSBkZWZhdWx0IGNhc2VcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWRbcHJvcEtleV0gPSBuZXh0UHJvcDtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBjYXNlOiBDdXN0b21BdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gICAgICAgICAgICB2YXIgbmV4dFZhbHVlID1cbiAgICAgICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzKG5leHRQcm9wKVxuICAgICAgICAgICAgICAgIDogbmV4dFByb3A7XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gbmV4dFZhbHVlO1xuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICByZW1vdmVkS2V5c1twcm9wS2V5XSA9IGZhbHNlO1xuICAgICAgICAgIHJlbW92ZWRLZXlDb3VudC0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZk5lc3RlZEFycmF5UHJvcGVydHkoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldkFycmF5LFxuICAgICAgbmV4dEFycmF5LFxuICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgKSB7XG4gICAgICB2YXIgbWluTGVuZ3RoID1cbiAgICAgICAgcHJldkFycmF5Lmxlbmd0aCA8IG5leHRBcnJheS5sZW5ndGhcbiAgICAgICAgICA/IHByZXZBcnJheS5sZW5ndGhcbiAgICAgICAgICA6IG5leHRBcnJheS5sZW5ndGg7XG4gICAgICB2YXIgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG1pbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIERpZmYgYW55IGl0ZW1zIGluIHRoZSBhcnJheSBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uIFJlcGVhdGVkIGtleXNcbiAgICAgICAgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBsYXRlciB2YWx1ZXMuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBkaWZmTmVzdGVkUHJvcGVydHkoXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICBwcmV2QXJyYXlbaV0sXG4gICAgICAgICAgbmV4dEFycmF5W2ldLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHByZXZBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBDbGVhciBvdXQgYWxsIHJlbWFpbmluZyBwcm9wZXJ0aWVzLlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gY2xlYXJOZXN0ZWRQcm9wZXJ0eShcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgIHByZXZBcnJheVtpXSxcbiAgICAgICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCBuZXh0QXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gQWRkIGFsbCByZW1haW5pbmcgcHJvcGVydGllcy5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IGFkZE5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgbmV4dEFycmF5W2ldLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmTmVzdGVkUHJvcGVydHkoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldlByb3AsXG4gICAgICBuZXh0UHJvcCxcbiAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICkge1xuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkICYmIHByZXZQcm9wID09PSBuZXh0UHJvcCkge1xuICAgICAgICAvLyBJZiBubyBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhZGRlZCwgdGhlbiB3ZSBjYW4gYmFpbCBvdXQgcXVpY2tseSBvbiBvYmplY3RcbiAgICAgICAgLy8gZXF1YWxpdHkuXG4gICAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXByZXZQcm9wIHx8ICFuZXh0UHJvcCkge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICByZXR1cm4gYWRkTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgbmV4dFByb3AsIHZhbGlkQXR0cmlidXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldlByb3ApIHtcbiAgICAgICAgICByZXR1cm4gY2xlYXJOZXN0ZWRQcm9wZXJ0eSh1cGRhdGVQYXlsb2FkLCBwcmV2UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXJyYXkocHJldlByb3ApICYmICFpc0FycmF5KG5leHRQcm9wKSkge1xuICAgICAgICAvLyBCb3RoIGFyZSBsZWF2ZXMsIHdlIGNhbiBkaWZmIHRoZSBsZWF2ZXMuXG4gICAgICAgIHJldHVybiBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgIHByZXZQcm9wLFxuICAgICAgICAgIG5leHRQcm9wLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShwcmV2UHJvcCkgJiYgaXNBcnJheShuZXh0UHJvcCkpIHtcbiAgICAgICAgLy8gQm90aCBhcmUgYXJyYXlzLCB3ZSBjYW4gZGlmZiB0aGUgYXJyYXlzLlxuICAgICAgICByZXR1cm4gZGlmZk5lc3RlZEFycmF5UHJvcGVydHkoXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICBwcmV2UHJvcCxcbiAgICAgICAgICBuZXh0UHJvcCxcbiAgICAgICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkocHJldlByb3ApKSB7XG4gICAgICAgIHJldHVybiBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5mbGF0dGVuU3R5bGUocHJldlByb3ApLFxuICAgICAgICAgIG5leHRQcm9wLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlmZlByb3BlcnRpZXMoXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgIHByZXZQcm9wLFxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZmxhdHRlblN0eWxlKG5leHRQcm9wKSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBhZGROZXN0ZWRQcm9wZXJ0eSB0YWtlcyBhIHNpbmdsZSBzZXQgb2YgcHJvcHMgYW5kIHZhbGlkIGF0dHJpYnV0ZVxuICAgICAqIGF0dHJpYnV0ZSBjb25maWd1cmF0aW9ucy4gSXQgcHJvY2Vzc2VzIGVhY2ggcHJvcCBhbmQgYWRkcyBpdCB0byB0aGVcbiAgICAgKiB1cGRhdGVQYXlsb2FkLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gYWRkTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgbmV4dFByb3AsIHZhbGlkQXR0cmlidXRlcykge1xuICAgICAgaWYgKCFuZXh0UHJvcCkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0FycmF5KG5leHRQcm9wKSkge1xuICAgICAgICAvLyBBZGQgZWFjaCBwcm9wZXJ0eSBvZiB0aGUgbGVhZi5cbiAgICAgICAgcmV0dXJuIGFkZFByb3BlcnRpZXModXBkYXRlUGF5bG9hZCwgbmV4dFByb3AsIHZhbGlkQXR0cmlidXRlcyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dFByb3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gQWRkIGFsbCB0aGUgcHJvcGVydGllcyBvZiB0aGUgYXJyYXkuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBhZGROZXN0ZWRQcm9wZXJ0eShcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgIG5leHRQcm9wW2ldLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xlYXJOZXN0ZWRQcm9wZXJ0eSB0YWtlcyBhIHNpbmdsZSBzZXQgb2YgcHJvcHMgYW5kIHZhbGlkIGF0dHJpYnV0ZXMuIEl0XG4gICAgICogYWRkcyBhIG51bGwgc2VudGluZWwgdG8gdGhlIHVwZGF0ZVBheWxvYWQsIGZvciBlYWNoIHByb3Aga2V5LlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gY2xlYXJOZXN0ZWRQcm9wZXJ0eSh1cGRhdGVQYXlsb2FkLCBwcmV2UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoIXByZXZQcm9wKSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXJyYXkocHJldlByb3ApKSB7XG4gICAgICAgIC8vIEFkZCBlYWNoIHByb3BlcnR5IG9mIHRoZSBsZWFmLlxuICAgICAgICByZXR1cm4gY2xlYXJQcm9wZXJ0aWVzKHVwZGF0ZVBheWxvYWQsIHByZXZQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZQcm9wLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIEFkZCBhbGwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFycmF5LlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gY2xlYXJOZXN0ZWRQcm9wZXJ0eShcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgIHByZXZQcm9wW2ldLFxuICAgICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZGlmZlByb3BlcnRpZXMgdGFrZXMgdHdvIHNldHMgb2YgcHJvcHMgYW5kIGEgc2V0IG9mIHZhbGlkIGF0dHJpYnV0ZXNcbiAgICAgKiBhbmQgd3JpdGUgdG8gdXBkYXRlUGF5bG9hZCB0aGUgdmFsdWVzIHRoYXQgY2hhbmdlZCBvciB3ZXJlIGRlbGV0ZWQuXG4gICAgICogSWYgbm8gdXBkYXRlUGF5bG9hZCBpcyBwcm92aWRlZCwgYSBuZXcgb25lIGlzIGNyZWF0ZWQgYW5kIHJldHVybmVkIGlmXG4gICAgICogYW55dGhpbmcgY2hhbmdlZC5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIHByZXZQcm9wcyxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICkge1xuICAgICAgdmFyIGF0dHJpYnV0ZUNvbmZpZztcbiAgICAgIHZhciBuZXh0UHJvcDtcbiAgICAgIHZhciBwcmV2UHJvcDtcblxuICAgICAgZm9yICh2YXIgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICAgICAgYXR0cmlidXRlQ29uZmlnID0gdmFsaWRBdHRyaWJ1dGVzW3Byb3BLZXldO1xuXG4gICAgICAgIGlmICghYXR0cmlidXRlQ29uZmlnKSB7XG4gICAgICAgICAgY29udGludWU7IC8vIG5vdCBhIHZhbGlkIG5hdGl2ZSBwcm9wXG4gICAgICAgIH1cblxuICAgICAgICBwcmV2UHJvcCA9IHByZXZQcm9wc1twcm9wS2V5XTtcbiAgICAgICAgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07IC8vIGZ1bmN0aW9ucyBhcmUgY29udmVydGVkIHRvIGJvb2xlYW5zIGFzIG1hcmtlcnMgdGhhdCB0aGUgYXNzb2NpYXRlZFxuICAgICAgICAvLyBldmVudHMgc2hvdWxkIGJlIHNlbnQgZnJvbSBuYXRpdmUuXG5cbiAgICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgbmV4dFByb3AgPSB0cnVlOyAvLyBJZiBuZXh0UHJvcCBpcyBub3QgYSBmdW5jdGlvbiwgdGhlbiBkb24ndCBib3RoZXIgY2hhbmdpbmcgcHJldlByb3BcbiAgICAgICAgICAvLyBzaW5jZSBuZXh0UHJvcCB3aWxsIHdpbiBhbmQgZ28gaW50byB0aGUgdXBkYXRlUGF5bG9hZCByZWdhcmRsZXNzLlxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwcmV2UHJvcCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBwcmV2UHJvcCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEFuIGV4cGxpY2l0IHZhbHVlIG9mIHVuZGVmaW5lZCBpcyB0cmVhdGVkIGFzIGEgbnVsbCBiZWNhdXNlIGl0IG92ZXJyaWRlc1xuICAgICAgICAvLyBhbnkgb3RoZXIgcHJlY2VkaW5nIHZhbHVlLlxuXG4gICAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBuZXh0UHJvcCA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHByZXZQcm9wID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBwcmV2UHJvcCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbW92ZWRLZXlzKSB7XG4gICAgICAgICAgcmVtb3ZlZEtleXNbcHJvcEtleV0gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICYmIHVwZGF0ZVBheWxvYWRbcHJvcEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBlbHNlIGFscmVhZHkgdHJpZ2dlcmVkIGFuIHVwZGF0ZSB0byB0aGlzIGtleSBiZWNhdXNlIGFub3RoZXJcbiAgICAgICAgICAvLyB2YWx1ZSBkaWZmZWQuIFNpbmNlIHdlJ3JlIG5vdyBsYXRlciBpbiB0aGUgbmVzdGVkIGFycmF5cyBvdXIgdmFsdWUgaXNcbiAgICAgICAgICAvLyBtb3JlIGltcG9ydGFudCBzbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBpdCBhbmQgb3ZlcnJpZGUgdGhlIGV4aXN0aW5nXG4gICAgICAgICAgLy8gdmFsdWUuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIG5vdGhpbmcgY2hhbmdlZCwgd2UnbGwgc2V0IGl0IGFueXdheS5cbiAgICAgICAgICAvLyBQYXR0ZXJuIG1hdGNoIG9uOiBhdHRyaWJ1dGVDb25maWdcbiAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZUNvbmZpZyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgLy8gY2FzZTogIU9iamVjdCBpcyB0aGUgZGVmYXVsdCBjYXNlXG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gbmV4dFByb3A7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcuZGlmZiA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gY2FzZTogQ3VzdG9tQXR0cmlidXRlQ29uZmlndXJhdGlvblxuICAgICAgICAgICAgdmFyIG5leHRWYWx1ZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgPyBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyhuZXh0UHJvcClcbiAgICAgICAgICAgICAgICA6IG5leHRQcm9wO1xuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFtwcm9wS2V5XSA9IG5leHRWYWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2UHJvcCA9PT0gbmV4dFByb3ApIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gbm90aGluZyBjaGFuZ2VkXG4gICAgICAgIH0gLy8gUGF0dGVybiBtYXRjaCBvbjogYXR0cmlidXRlQ29uZmlnXG5cbiAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVDb25maWcgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAvLyBjYXNlOiAhT2JqZWN0IGlzIHRoZSBkZWZhdWx0IGNhc2VcbiAgICAgICAgICBpZiAoZGVmYXVsdERpZmZlcihwcmV2UHJvcCwgbmV4dFByb3ApKSB7XG4gICAgICAgICAgICAvLyBhIG5vcm1hbCBsZWFmIGhhcyBjaGFuZ2VkXG4gICAgICAgICAgICAodXBkYXRlUGF5bG9hZCB8fCAodXBkYXRlUGF5bG9hZCA9IHt9KSlbcHJvcEtleV0gPSBuZXh0UHJvcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBjYXNlOiBDdXN0b21BdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gICAgICAgICAgdmFyIHNob3VsZFVwZGF0ZSA9XG4gICAgICAgICAgICBwcmV2UHJvcCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAodHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgPyBhdHRyaWJ1dGVDb25maWcuZGlmZihwcmV2UHJvcCwgbmV4dFByb3ApXG4gICAgICAgICAgICAgIDogZGVmYXVsdERpZmZlcihwcmV2UHJvcCwgbmV4dFByb3ApKTtcblxuICAgICAgICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBfbmV4dFZhbHVlID1cbiAgICAgICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzID09PSBcImZ1bmN0aW9uXCIgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICAgICAgPyBhdHRyaWJ1dGVDb25maWcucHJvY2VzcyhuZXh0UHJvcClcbiAgICAgICAgICAgICAgICA6IG5leHRQcm9wO1xuXG4gICAgICAgICAgICAodXBkYXRlUGF5bG9hZCB8fCAodXBkYXRlUGF5bG9hZCA9IHt9KSlbcHJvcEtleV0gPSBfbmV4dFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZWZhdWx0OiBmYWxsdGhyb3VnaCBjYXNlIHdoZW4gbmVzdGVkIHByb3BlcnRpZXMgYXJlIGRlZmluZWRcbiAgICAgICAgICByZW1vdmVkS2V5cyA9IG51bGw7XG4gICAgICAgICAgcmVtb3ZlZEtleUNvdW50ID0gMDsgLy8gV2UgdGhpbmsgdGhhdCBhdHRyaWJ1dGVDb25maWcgaXMgbm90IEN1c3RvbUF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gYXRcbiAgICAgICAgICAvLyB0aGlzIHBvaW50IHNvIHdlIGFzc3VtZSBpdCBtdXN0IGJlIEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24uXG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gZGlmZk5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICAgIHByZXZQcm9wLFxuICAgICAgICAgICAgbmV4dFByb3AsXG4gICAgICAgICAgICBhdHRyaWJ1dGVDb25maWdcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHJlbW92ZWRLZXlDb3VudCA+IDAgJiYgdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICAgICAgcmVzdG9yZURlbGV0ZWRWYWx1ZXNJbk5lc3RlZEFycmF5KFxuICAgICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgICBuZXh0UHJvcCxcbiAgICAgICAgICAgICAgYXR0cmlidXRlQ29uZmlnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVtb3ZlZEtleXMgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBBbHNvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHByZXZpb3VzIHByb3BzIHRvIGNhdGNoIGFueSB0aGF0IGhhdmUgYmVlblxuICAgICAgLy8gcmVtb3ZlZCBhbmQgbWFrZSBzdXJlIG5hdGl2ZSBnZXRzIHRoZSBzaWduYWwgc28gaXQgY2FuIHJlc2V0IHRoZW0gdG8gdGhlXG4gICAgICAvLyBkZWZhdWx0LlxuXG4gICAgICBmb3IgKHZhciBfcHJvcEtleSBpbiBwcmV2UHJvcHMpIHtcbiAgICAgICAgaWYgKG5leHRQcm9wc1tfcHJvcEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyB3ZSd2ZSBhbHJlYWR5IGNvdmVyZWQgdGhpcyBrZXkgaW4gdGhlIHByZXZpb3VzIHBhc3NcbiAgICAgICAgfVxuXG4gICAgICAgIGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1tfcHJvcEtleV07XG5cbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVDb25maWcpIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gbm90IGEgdmFsaWQgbmF0aXZlIHByb3BcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICYmIHVwZGF0ZVBheWxvYWRbX3Byb3BLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIHdhcyBhbHJlYWR5IHVwZGF0ZWQgdG8gYSBkaWZmIHJlc3VsdCBlYXJsaWVyLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldlByb3AgPSBwcmV2UHJvcHNbX3Byb3BLZXldO1xuXG4gICAgICAgIGlmIChwcmV2UHJvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29udGludWU7IC8vIHdhcyBhbHJlYWR5IGVtcHR5IGFueXdheVxuICAgICAgICB9IC8vIFBhdHRlcm4gbWF0Y2ggb246IGF0dHJpYnV0ZUNvbmZpZ1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSBcIm9iamVjdFwiIHx8XG4gICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBjYXNlOiBDdXN0b21BdHRyaWJ1dGVDb25maWd1cmF0aW9uIHwgIU9iamVjdFxuICAgICAgICAgIC8vIEZsYWcgdGhlIGxlYWYgcHJvcGVydHkgZm9yIHJlbW92YWwgYnkgc2VuZGluZyBhIHNlbnRpbmVsLlxuICAgICAgICAgICh1cGRhdGVQYXlsb2FkIHx8ICh1cGRhdGVQYXlsb2FkID0ge30pKVtfcHJvcEtleV0gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKCFyZW1vdmVkS2V5cykge1xuICAgICAgICAgICAgcmVtb3ZlZEtleXMgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXJlbW92ZWRLZXlzW19wcm9wS2V5XSkge1xuICAgICAgICAgICAgcmVtb3ZlZEtleXNbX3Byb3BLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlbW92ZWRLZXlDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZWZhdWx0OlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXN0ZWQgYXR0cmlidXRlIGNvbmZpZ3VyYXRpb24gd2hlcmUgYWxsIHRoZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgLy8gd2VyZSByZW1vdmVkIHNvIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBhbmQgY2xlYXIgb3V0IGFsbCBvZiB0aGVtLlxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBjbGVhck5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICAgIHByZXZQcm9wLFxuICAgICAgICAgICAgYXR0cmlidXRlQ29uZmlnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogYWRkUHJvcGVydGllcyBhZGRzIGFsbCB0aGUgdmFsaWQgcHJvcHMgdG8gdGhlIHBheWxvYWQgYWZ0ZXIgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gYWRkUHJvcGVydGllcyh1cGRhdGVQYXlsb2FkLCBwcm9wcywgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBUT0RPOiBGYXN0IHBhdGhcbiAgICAgIHJldHVybiBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgZW1wdHlPYmplY3QkMSxcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xlYXJQcm9wZXJ0aWVzIGNsZWFycyBhbGwgdGhlIHByZXZpb3VzIHByb3BzIGJ5IGFkZGluZyBhIG51bGwgc2VudGluZWxcbiAgICAgKiB0byB0aGUgcGF5bG9hZCBmb3IgZWFjaCB2YWxpZCBrZXkuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBjbGVhclByb3BlcnRpZXModXBkYXRlUGF5bG9hZCwgcHJldlByb3BzLCB2YWxpZEF0dHJpYnV0ZXMpIHtcbiAgICAgIC8vIFRPRE86IEZhc3QgcGF0aFxuICAgICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgIGVtcHR5T2JqZWN0JDEsXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGUocHJvcHMsIHZhbGlkQXR0cmlidXRlcykge1xuICAgICAgcmV0dXJuIGFkZFByb3BlcnRpZXMoXG4gICAgICAgIG51bGwsIC8vIHVwZGF0ZVBheWxvYWRcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlmZihwcmV2UHJvcHMsIG5leHRQcm9wcywgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gZGlmZlByb3BlcnRpZXMoXG4gICAgICAgIG51bGwsIC8vIHVwZGF0ZVBheWxvYWRcbiAgICAgICAgcHJldlByb3BzLFxuICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgY2xlYW51cCBjYWxsYmFja3MgYnkgY2FuY2VsbGluZyB0aGVtIGluc3RlYWQgb2ZcbiAgICAgKiB1c2luZyB0aGlzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1vdW50U2FmZUNhbGxiYWNrX05PVF9SRUFMTFlfU0FGRShjb250ZXh0LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gLy8gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGNyZWF0ZUNsYXNzKCkgY29tcG9uZW50cy5cbiAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBpcyBjb2RlIGRlcGVuZGluZyBvbiBpdC5cbiAgICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgaXNNb3VudGVkKCkgYmVjYXVzZSBldmVuIGFjY2Vzc2luZ1xuICAgICAgICAvLyBpc01vdW50ZWQgcHJvcGVydHkgb24gYSBSZWFjdCBFUzYgY2xhc3Mgd2lsbCB0cmlnZ2VyIGEgd2FybmluZy5cblxuICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQuX19pc01vdW50ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgaWYgKCFjb250ZXh0Ll9faXNNb3VudGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBGSVhNRTogdGhlcmUgdXNlZCB0byBiZSBvdGhlciBicmFuY2hlcyB0aGF0IHByb3RlY3RlZFxuICAgICAgICAvLyBhZ2FpbnN0IHVubW91bnRlZCBob3N0IGNvbXBvbmVudHMuIEJ1dCBSTiBob3N0IGNvbXBvbmVudHMgZG9uJ3RcbiAgICAgICAgLy8gZGVmaW5lIGlzTW91bnRlZCgpIGFueW1vcmUsIHNvIHRob3NlIGNoZWNrcyBkaWRuJ3QgZG8gYW55dGhpbmcuXG4gICAgICAgIC8vIFRoZXkgY2F1c2VkIGZhbHNlIHBvc2l0aXZlIHdhcm5pbmcgbm9pc2Ugc28gd2UgcmVtb3ZlZCB0aGVtOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2lzc3Vlcy8xODg2OCNpc3N1ZWNvbW1lbnQtNDEzNTc5MDk1XG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCB0aGUgY2FsbGJhY2sgaXMgTk9UIGd1YXJhbnRlZWQgdG8gYmUgc2FmZVxuICAgICAgICAvLyBmb3IgaG9zdCBjb21wb25lbnRzLiBUaGUgc29sdXRpb24gd2Ugc2hvdWxkIGltcGxlbWVudCBpcyB0byBtYWtlXG4gICAgICAgIC8vIFVJTWFuYWdlci5tZWFzdXJlKCkgYW5kIHNpbWlsYXIgY2FsbHMgdHJ1bHkgY2FuY2VsYWJsZS4gVGhlbiB3ZVxuICAgICAgICAvLyBjYW4gY2hhbmdlIG91ciBvd24gY29kZSBjYWxsaW5nIHRoZW0gdG8gY2FuY2VsIHdoZW4gc29tZXRoaW5nIHVubW91bnRzLlxuXG4gICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkZvclN0eWxlUHJvcHMocHJvcHMsIHZhbGlkQXR0cmlidXRlcykge1xuICAgICAge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsaWRBdHRyaWJ1dGVzLnN0eWxlKSB7XG4gICAgICAgICAgaWYgKCEodmFsaWRBdHRyaWJ1dGVzW2tleV0gfHwgcHJvcHNba2V5XSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IGFyZSBzZXR0aW5nIHRoZSBzdHlsZSBgeyAlc1wiICtcbiAgICAgICAgICAgICAgICBcIjogLi4uIH1gIGFzIGEgcHJvcC4gWW91IFwiICtcbiAgICAgICAgICAgICAgICBcInNob3VsZCBuZXN0IGl0IGluIGEgc3R5bGUgb2JqZWN0LiBcIiArXG4gICAgICAgICAgICAgICAgXCJFLmcuIGB7IHN0eWxlOiB7ICVzXCIgK1xuICAgICAgICAgICAgICAgIFwiOiAuLi4gfSB9YFwiLFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUmVhY3ROYXRpdmVGaWJlckhvc3RDb21wb25lbnQgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBSZWFjdE5hdGl2ZUZpYmVySG9zdENvbXBvbmVudChcbiAgICAgICAgdGFnLFxuICAgICAgICB2aWV3Q29uZmlnLFxuICAgICAgICBpbnRlcm5hbEluc3RhbmNlSGFuZGxlREVWXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuX25hdGl2ZVRhZyA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5faW50ZXJuYWxGaWJlckluc3RhbmNlSGFuZGxlREVWID0gdm9pZCAwO1xuICAgICAgICB0aGlzLnZpZXdDb25maWcgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuX25hdGl2ZVRhZyA9IHRhZztcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy52aWV3Q29uZmlnID0gdmlld0NvbmZpZztcblxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5faW50ZXJuYWxGaWJlckluc3RhbmNlSGFuZGxlREVWID0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZURFVjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3Byb3RvID0gUmVhY3ROYXRpdmVGaWJlckhvc3RDb21wb25lbnQucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8uYmx1ciA9IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5UZXh0SW5wdXRTdGF0ZS5ibHVyVGV4dElucHV0KHRoaXMpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmZvY3VzID0gZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5UZXh0SW5wdXRTdGF0ZS5mb2N1c1RleHRJbnB1dCh0aGlzKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5tZWFzdXJlID0gZnVuY3Rpb24gbWVhc3VyZShjYWxsYmFjaykge1xuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLm1lYXN1cmUoXG4gICAgICAgICAgdGhpcy5fbmF0aXZlVGFnLFxuICAgICAgICAgIG1vdW50U2FmZUNhbGxiYWNrX05PVF9SRUFMTFlfU0FGRSh0aGlzLCBjYWxsYmFjaylcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5tZWFzdXJlSW5XaW5kb3cgPSBmdW5jdGlvbiBtZWFzdXJlSW5XaW5kb3coY2FsbGJhY2spIHtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tZWFzdXJlSW5XaW5kb3coXG4gICAgICAgICAgdGhpcy5fbmF0aXZlVGFnLFxuICAgICAgICAgIG1vdW50U2FmZUNhbGxiYWNrX05PVF9SRUFMTFlfU0FGRSh0aGlzLCBjYWxsYmFjaylcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5tZWFzdXJlTGF5b3V0ID0gZnVuY3Rpb24gbWVhc3VyZUxheW91dChcbiAgICAgICAgcmVsYXRpdmVUb05hdGl2ZU5vZGUsXG4gICAgICAgIG9uU3VjY2VzcyxcbiAgICAgICAgb25GYWlsXG4gICAgICAgIC8qIGN1cnJlbnRseSB1bnVzZWQgKi9cbiAgICAgICkge1xuICAgICAgICB2YXIgcmVsYXRpdmVOb2RlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVsYXRpdmVUb05hdGl2ZU5vZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IGEgbm9kZSBoYW5kbGVcbiAgICAgICAgICByZWxhdGl2ZU5vZGUgPSByZWxhdGl2ZVRvTmF0aXZlTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgbmF0aXZlTm9kZSA9IHJlbGF0aXZlVG9OYXRpdmVOb2RlO1xuXG4gICAgICAgICAgaWYgKG5hdGl2ZU5vZGUuX25hdGl2ZVRhZykge1xuICAgICAgICAgICAgcmVsYXRpdmVOb2RlID0gbmF0aXZlTm9kZS5fbmF0aXZlVGFnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWxhdGl2ZU5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIldhcm5pbmc6IHJlZi5tZWFzdXJlTGF5b3V0IG11c3QgYmUgY2FsbGVkIHdpdGggYSBub2RlIGhhbmRsZSBvciBhIHJlZiB0byBhIG5hdGl2ZSBjb21wb25lbnQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tZWFzdXJlTGF5b3V0KFxuICAgICAgICAgIHRoaXMuX25hdGl2ZVRhZyxcbiAgICAgICAgICByZWxhdGl2ZU5vZGUsXG4gICAgICAgICAgbW91bnRTYWZlQ2FsbGJhY2tfTk9UX1JFQUxMWV9TQUZFKHRoaXMsIG9uRmFpbCksXG4gICAgICAgICAgbW91bnRTYWZlQ2FsbGJhY2tfTk9UX1JFQUxMWV9TQUZFKHRoaXMsIG9uU3VjY2VzcylcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5zZXROYXRpdmVQcm9wcyA9IGZ1bmN0aW9uIHNldE5hdGl2ZVByb3BzKG5hdGl2ZVByb3BzKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuRm9yU3R5bGVQcm9wcyhuYXRpdmVQcm9wcywgdGhpcy52aWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGNyZWF0ZShcbiAgICAgICAgICBuYXRpdmVQcm9wcyxcbiAgICAgICAgICB0aGlzLnZpZXdDb25maWcudmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICk7IC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBicmlkZ2UgY2FsbHMgaWYgdGhlcmUncyBubyB1cGRhdGUuXG4gICAgICAgIC8vIFRoaXMgaXMgYW4gZXhwZW5zaXZlIG5vLW9wIGZvciBBbmRyb2lkLCBhbmQgY2F1c2VzIGFuIHVubmVjZXNzYXJ5XG4gICAgICAgIC8vIHZpZXcgaW52YWxpZGF0aW9uIGZvciBjZXJ0YWluIGNvbXBvbmVudHMgKGVnIFJDVFRleHRJbnB1dCkgb24gaU9TLlxuXG4gICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICE9IG51bGwpIHtcbiAgICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLnVwZGF0ZVZpZXcoXG4gICAgICAgICAgICB0aGlzLl9uYXRpdmVUYWcsXG4gICAgICAgICAgICB0aGlzLnZpZXdDb25maWcudWlWaWV3Q2xhc3NOYW1lLFxuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBSZWFjdE5hdGl2ZUZpYmVySG9zdENvbXBvbmVudDtcbiAgICB9KSgpO1xuXG4gICAgLy8gVGhpcyBtb2R1bGUgb25seSBleGlzdHMgYXMgYW4gRVNNIHdyYXBwZXIgYXJvdW5kIHRoZSBleHRlcm5hbCBDb21tb25KU1xuICAgIHZhciBzY2hlZHVsZUNhbGxiYWNrJDIgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbiAgICB2YXIgY2FuY2VsQ2FsbGJhY2skMSA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbiAgICB2YXIgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQ7XG4gICAgdmFyIHJlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ7XG4gICAgdmFyIG5vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcbiAgICB2YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgdmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgIHZhciBOb3JtYWxQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eTtcbiAgICB2YXIgSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTsgLy8gdGhpcyBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0IG9uIHRoZSBzY2hlZHVsZXIsIGJ1dCBpdCAqZG9lcypcblxuICAgIC8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbiAgICAvLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuICAgIC8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbiAgICAvLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbiAgICB2YXIgZGlzYWJsZWREZXB0aCA9IDA7XG4gICAgdmFyIHByZXZMb2c7XG4gICAgdmFyIHByZXZJbmZvO1xuICAgIHZhciBwcmV2V2FybjtcbiAgICB2YXIgcHJldkVycm9yO1xuICAgIHZhciBwcmV2R3JvdXA7XG4gICAgdmFyIHByZXZHcm91cENvbGxhcHNlZDtcbiAgICB2YXIgcHJldkdyb3VwRW5kO1xuXG4gICAgZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG4gICAgZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgICB9XG5cbiAgICAgICAgZGlzYWJsZWREZXB0aCsrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gICAgICB7XG4gICAgICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgICAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXJJRCA9IG51bGw7XG4gICAgdmFyIGluamVjdGVkSG9vayA9IG51bGw7XG4gICAgdmFyIGhhc0xvZ2dlZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIGlzRGV2VG9vbHNQcmVzZW50ID1cbiAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICAgICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gTm8gRGV2VG9vbHNcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICAgICAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgICAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgICAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcikge1xuICAgICAgICB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrIFwiICtcbiAgICAgICAgICAgICAgXCJ3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuIFwiICtcbiAgICAgICAgICAgICAgXCJodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHNcIlxuICAgICAgICAgICk7XG4gICAgICAgIH0gLy8gRGV2VG9vbHMgZXhpc3RzLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHN1cHBvcnQgRmliZXIuXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlbmFibGVTY2hlZHVsaW5nUHJvZmlsZXIpO1xuXG4gICAgICAgIHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpOyAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBpbmplY3RlZCwgc28gbm93IGl0IGlzIHNhZmUgdG8gc2V0IHVwIGhvb2tzLlxuXG4gICAgICAgIGluamVjdGVkSG9vayA9IGhvb2s7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gQ2F0Y2ggYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byB0aHJvdyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcihcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuXCIsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGhvb2suY2hlY2tEQ0UpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBEZXZUb29scy5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSBhIGhvb2sgaW5zdGFsbGVkIGJ5IEZhc3QgUmVmcmVzaCBydW50aW1lLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uU2NoZWR1bGVSb290KHJvb3QsIGNoaWxkcmVuKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgY2hpbGRyZW4pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICAgICAgZXJyb3IoXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290LCBldmVudFByaW9yaXR5KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBkaWRFcnJvciA9IChyb290LmN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gRGlkQ2FwdHVyZTtcblxuICAgICAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICAgICAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRQcmlvcml0eSkge1xuICAgICAgICAgICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIERlZmF1bHRFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBJZGxlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChcbiAgICAgICAgICAgICAgcmVuZGVyZXJJRCxcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHksXG4gICAgICAgICAgICAgIGRpZEVycm9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICAgICAgZXJyb3IoXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uUG9zdENvbW1pdFJvb3Qocm9vdCkge1xuICAgICAgaWYgKFxuICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgdHlwZW9mIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3QgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5qZWN0ZWRIb29rLm9uUG9zdENvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICAgICAgZXJyb3IoXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICAgICAgaWYgKFxuICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZmliZXIpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBlcnJvcihcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIiwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMobmV3SXNTdHJpY3RNb2RlKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXdJc1N0cmljdE1vZGUpIHtcbiAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBQcm9maWxlciBBUEkgaG9va3NcblxuICAgIGZ1bmN0aW9uIGluamVjdFByb2ZpbGluZ0hvb2tzKHByb2ZpbGluZ0hvb2tzKSB7fVxuXG4gICAgZnVuY3Rpb24gZ2V0TGFuZUxhYmVsTWFwKCkge1xuICAgICAge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgTm9Nb2RlID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAwOyAvLyBUT0RPOiBSZW1vdmUgQ29uY3VycmVudE1vZGUgYnkgcmVhZGluZyBmcm9tIHRoZSByb290IHRhZyBpbnN0ZWFkXG5cbiAgICB2YXIgQ29uY3VycmVudE1vZGUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICovXG4gICAgICAxO1xuICAgIHZhciBQcm9maWxlTW9kZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDI7XG4gICAgdmFyIFN0cmljdExlZ2FjeU1vZGUgPVxuICAgICAgLyogICAgICAgICAgICAgICAqL1xuICAgICAgODtcbiAgICB2YXIgU3RyaWN0RWZmZWN0c01vZGUgPVxuICAgICAgLyogICAgICAgICAgICAgICovXG4gICAgICAxNjtcbiAgICB2YXIgTm9TdHJpY3RQYXNzaXZlRWZmZWN0c01vZGUgPVxuICAgICAgLyogICAgICovXG4gICAgICA2NDtcblxuICAgIC8vIFRPRE86IFRoaXMgaXMgcHJldHR5IHdlbGwgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzLiBNYXliZSB3ZSBjYW4gZHJvcCBpdC5cbiAgICB2YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2s7IC8vIENvdW50IGxlYWRpbmcgemVyb3MuXG4gICAgLy8gQmFzZWQgb246XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxuXG4gICAgdmFyIGxvZyA9IE1hdGgubG9nO1xuICAgIHZhciBMTjIgPSBNYXRoLkxOMjtcblxuICAgIGZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICAgICAgdmFyIGFzVWludCA9IHggPj4+IDA7XG5cbiAgICAgIGlmIChhc1VpbnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDMyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDMxIC0gKChsb2coYXNVaW50KSAvIExOMikgfCAwKSkgfCAwO1xuICAgIH1cblxuICAgIC8vIElmIHRob3NlIHZhbHVlcyBhcmUgY2hhbmdlZCB0aGF0IHBhY2thZ2Ugc2hvdWxkIGJlIHJlYnVpbHQgYW5kIHJlZGVwbG95ZWQuXG5cbiAgICB2YXIgVG90YWxMYW5lcyA9IDMxO1xuICAgIHZhciBOb0xhbmVzID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDA7XG4gICAgdmFyIE5vTGFuZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDA7XG4gICAgdmFyIFN5bmNIeWRyYXRpb25MYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgICAgKi9cbiAgICAgIDE7XG4gICAgdmFyIFN5bmNMYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDI7XG4gICAgdmFyIFN5bmNMYW5lSW5kZXggPSAxO1xuICAgIHZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lID1cbiAgICAgIC8qICAgICovXG4gICAgICA0O1xuICAgIHZhciBJbnB1dENvbnRpbnVvdXNMYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgICovXG4gICAgICA4O1xuICAgIHZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZSA9XG4gICAgICAvKiAgICAgICAgICAgICovXG4gICAgICAxNjtcbiAgICB2YXIgRGVmYXVsdExhbmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMzI7XG4gICAgdmFyIFN5bmNVcGRhdGVMYW5lcyA9IFN5bmNMYW5lIHwgSW5wdXRDb250aW51b3VzTGFuZSB8IERlZmF1bHRMYW5lO1xuICAgIHZhciBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAqL1xuICAgICAgNjQ7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lcyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQxOTQxNzY7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lMSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxMjg7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lMiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyNTY7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lMyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICA1MTI7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lNCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxMDI0O1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMjA0ODtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmU2ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDQwOTY7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lNyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICA4MTkyO1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTggPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMTYzODQ7XG4gICAgdmFyIFRyYW5zaXRpb25MYW5lOSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAzMjc2ODtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmUxMCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDY1NTM2O1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTExID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMTMxMDcyO1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTEyID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMjYyMTQ0O1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTEzID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgNTI0Mjg4O1xuICAgIHZhciBUcmFuc2l0aW9uTGFuZTE0ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMTA0ODU3NjtcbiAgICB2YXIgVHJhbnNpdGlvbkxhbmUxNSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDIwOTcxNTI7XG4gICAgdmFyIFJldHJ5TGFuZXMgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDYyOTE0NTYwO1xuICAgIHZhciBSZXRyeUxhbmUxID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgNDE5NDMwNDtcbiAgICB2YXIgUmV0cnlMYW5lMiA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDgzODg2MDg7XG4gICAgdmFyIFJldHJ5TGFuZTMgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAxNjc3NzIxNjtcbiAgICB2YXIgUmV0cnlMYW5lNCA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDMzNTU0NDMyO1xuICAgIHZhciBTb21lUmV0cnlMYW5lID0gUmV0cnlMYW5lMTtcbiAgICB2YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSA9XG4gICAgICAvKiAgICAgICAgICAqL1xuICAgICAgNjcxMDg4NjQ7XG4gICAgdmFyIE5vbklkbGVMYW5lcyA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDEzNDIxNzcyNztcbiAgICB2YXIgSWRsZUh5ZHJhdGlvbkxhbmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAqL1xuICAgICAgMTM0MjE3NzI4O1xuICAgIHZhciBJZGxlTGFuZSA9XG4gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAyNjg0MzU0NTY7XG4gICAgdmFyIE9mZnNjcmVlbkxhbmUgPVxuICAgICAgLyogICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDUzNjg3MDkxMjtcbiAgICB2YXIgRGVmZXJyZWRMYW5lID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMTA3Mzc0MTgyNDsgLy8gQW55IGxhbmUgdGhhdCBtaWdodCBzY2hlZHVsZSBhbiB1cGRhdGUuIFRoaXMgaXMgdXNlZCB0byBkZXRlY3QgaW5maW5pdGVcbiAgICAvLyB1cGRhdGUgbG9vcHMsIHNvIGl0IGRvZXNuJ3QgaW5jbHVkZSBoeWRyYXRpb24gbGFuZXMgb3IgcmV0cmllcy5cblxuICAgIHZhciBVcGRhdGVMYW5lcyA9XG4gICAgICBTeW5jTGFuZSB8IElucHV0Q29udGludW91c0xhbmUgfCBEZWZhdWx0TGFuZSB8IFRyYW5zaXRpb25MYW5lczsgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB0aGUgZXhwZXJpbWVudGFsIHRpbWVsaW5lIChyZWFjdC1kZXZ0b29scy10aW1lbGluZSlcbiAgICB2YXIgTm9UaW1lc3RhbXAgPSAtMTtcbiAgICB2YXIgbmV4dFRyYW5zaXRpb25MYW5lID0gVHJhbnNpdGlvbkxhbmUxO1xuICAgIHZhciBuZXh0UmV0cnlMYW5lID0gUmV0cnlMYW5lMTtcblxuICAgIGZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBwZW5kaW5nU3luY0xhbmVzID0gbGFuZXMgJiBTeW5jVXBkYXRlTGFuZXM7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdTeW5jTGFuZXMgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gcGVuZGluZ1N5bmNMYW5lcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpKSB7XG4gICAgICAgIGNhc2UgU3luY0h5ZHJhdGlvbkxhbmU6XG4gICAgICAgICAgcmV0dXJuIFN5bmNIeWRyYXRpb25MYW5lO1xuXG4gICAgICAgIGNhc2UgU3luY0xhbmU6XG4gICAgICAgICAgcmV0dXJuIFN5bmNMYW5lO1xuXG4gICAgICAgIGNhc2UgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcblxuICAgICAgICBjYXNlIElucHV0Q29udGludW91c0xhbmU6XG4gICAgICAgICAgcmV0dXJuIElucHV0Q29udGludW91c0xhbmU7XG5cbiAgICAgICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZTpcbiAgICAgICAgICByZXR1cm4gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG5cbiAgICAgICAgY2FzZSBEZWZhdWx0TGFuZTpcbiAgICAgICAgICByZXR1cm4gRGVmYXVsdExhbmU7XG5cbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgICByZXR1cm4gVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmU7XG5cbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUyOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMzpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTQ6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU1OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNjpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTc6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU4OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lOTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEwOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTE6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMjpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEzOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTQ6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNTpcbiAgICAgICAgICByZXR1cm4gbGFuZXMgJiBUcmFuc2l0aW9uTGFuZXM7XG5cbiAgICAgICAgY2FzZSBSZXRyeUxhbmUxOlxuICAgICAgICBjYXNlIFJldHJ5TGFuZTI6XG4gICAgICAgIGNhc2UgUmV0cnlMYW5lMzpcbiAgICAgICAgY2FzZSBSZXRyeUxhbmU0OlxuICAgICAgICAgIHJldHVybiBsYW5lcyAmIFJldHJ5TGFuZXM7XG5cbiAgICAgICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lOlxuICAgICAgICAgIHJldHVybiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuXG4gICAgICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmU6XG4gICAgICAgICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuXG4gICAgICAgIGNhc2UgSWRsZUxhbmU6XG4gICAgICAgICAgcmV0dXJuIElkbGVMYW5lO1xuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuTGFuZTpcbiAgICAgICAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcblxuICAgICAgICBjYXNlIERlZmVycmVkTGFuZTpcbiAgICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUgYmVjYXVzZSBkZWZlcnJlZCB3b3JrIGlzIGFsd2F5cyBlbnRhbmdsZWRcbiAgICAgICAgICAvLyB3aXRoIHNvbWV0aGluZyBlbHNlLlxuICAgICAgICAgIHJldHVybiBOb0xhbmVzO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3IoXCJTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgICAgfSAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCBhcyBhIGZhbGxiYWNrLCByZXR1cm4gdGhlIGVudGlyZSBiaXRtYXNrLlxuXG4gICAgICAgICAgcmV0dXJuIGxhbmVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcykge1xuICAgICAgLy8gRWFybHkgYmFpbG91dCBpZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yayBsZWZ0LlxuICAgICAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuXG4gICAgICBpZiAocGVuZGluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgICAgIHJldHVybiBOb0xhbmVzO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gICAgICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBEbyBub3Qgd29yayBvbiBhbnkgaWRsZSB3b3JrIHVudGlsIGFsbCB0aGUgbm9uLWlkbGUgd29yayBoYXMgZmluaXNoZWQsXG4gICAgICAvLyBldmVuIGlmIHRoZSB3b3JrIGlzIHN1c3BlbmRlZC5cblxuICAgICAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBOb25JZGxlTGFuZXM7XG5cbiAgICAgIGlmIChub25JZGxlUGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICAgIGlmIChub25JZGxlVW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlVW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBub25JZGxlUGluZ2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgcGluZ2VkTGFuZXM7XG5cbiAgICAgICAgICBpZiAobm9uSWRsZVBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlUGluZ2VkTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIHdvcmsgaXMgSWRsZS5cbiAgICAgICAgdmFyIHVuYmxvY2tlZExhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHJlYWNoYWJsZSBpZiB3ZSdyZSBzdXNwZW5kZWRcbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpbiB0aGlzIHBhdGggaWYgYSBmYWxsYmFjayB0aW1lciBpcyBub3Qgc2NoZWR1bGVkLlxuICAgICAgICByZXR1cm4gTm9MYW5lcztcbiAgICAgIH0gLy8gSWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVuZGVyLCBzd2l0Y2hpbmcgbGFuZXMgd2lsbCBpbnRlcnJ1cHRcbiAgICAgIC8vIGl0IGFuZCB3ZSdsbCBsb3NlIG91ciBwcm9ncmVzcy4gV2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiB0aGUgbmV3IGxhbmVzIGFyZVxuICAgICAgLy8gaGlnaGVyIHByaW9yaXR5LlxuXG4gICAgICBpZiAoXG4gICAgICAgIHdpcExhbmVzICE9PSBOb0xhbmVzICYmXG4gICAgICAgIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAgICAgICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgICAgICAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzXG4gICAgICApIHtcbiAgICAgICAgdmFyIG5leHRMYW5lID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShuZXh0TGFuZXMpO1xuICAgICAgICB2YXIgd2lwTGFuZSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUod2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBUZXN0cyB3aGV0aGVyIHRoZSBuZXh0IGxhbmUgaXMgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgd2lwXG4gICAgICAgICAgLy8gb25lLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGJpdHMgZGVjcmVhc2UgaW4gcHJpb3JpdHkgYXMgeW91IGdvIGxlZnQuXG4gICAgICAgICAgbmV4dExhbmUgPj0gd2lwTGFuZSB8fCAvLyBEZWZhdWx0IHByaW9yaXR5IHVwZGF0ZXMgc2hvdWxkIG5vdCBpbnRlcnJ1cHQgdHJhbnNpdGlvbiB1cGRhdGVzLiBUaGVcbiAgICAgICAgICAvLyBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBkZWZhdWx0IHVwZGF0ZXMgYW5kIHRyYW5zaXRpb24gdXBkYXRlcyBpcyB0aGF0XG4gICAgICAgICAgLy8gZGVmYXVsdCB1cGRhdGVzIGRvIG5vdCBzdXBwb3J0IHJlZnJlc2ggdHJhbnNpdGlvbnMuXG4gICAgICAgICAgKG5leHRMYW5lID09PSBEZWZhdWx0TGFuZSAmJiAod2lwTGFuZSAmIFRyYW5zaXRpb25MYW5lcykgIT09IE5vTGFuZXMpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEtlZXAgd29ya2luZyBvbiB0aGUgZXhpc3RpbmcgaW4tcHJvZ3Jlc3MgdHJlZS4gRG8gbm90IGludGVycnVwdC5cbiAgICAgICAgICByZXR1cm4gd2lwTGFuZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHRMYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RW50YW5nbGVkTGFuZXMocm9vdCwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBlbnRhbmdsZWRMYW5lcyA9IHJlbmRlckxhbmVzO1xuXG4gICAgICBpZiAoKGVudGFuZ2xlZExhbmVzICYgSW5wdXRDb250aW51b3VzTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gV2hlbiB1cGRhdGVzIGFyZSBzeW5jIGJ5IGRlZmF1bHQsIHdlIGVudGFuZ2xlIGNvbnRpbnVvdXMgcHJpb3JpdHkgdXBkYXRlc1xuICAgICAgICAvLyBhbmQgZGVmYXVsdCB1cGRhdGVzLCBzbyB0aGV5IHJlbmRlciBpbiB0aGUgc2FtZSBiYXRjaC4gVGhlIG9ubHkgcmVhc29uXG4gICAgICAgIC8vIHRoZXkgdXNlIHNlcGFyYXRlIGxhbmVzIGlzIGJlY2F1c2UgY29udGludW91cyB1cGRhdGVzIHNob3VsZCBpbnRlcnJ1cHRcbiAgICAgICAgLy8gdHJhbnNpdGlvbnMsIGJ1dCBkZWZhdWx0IHVwZGF0ZXMgc2hvdWxkIG5vdC5cbiAgICAgICAgZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXMgJiBEZWZhdWx0TGFuZTtcbiAgICAgIH0gLy8gQ2hlY2sgZm9yIGVudGFuZ2xlZCBsYW5lcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhdGNoLlxuICAgICAgLy9cbiAgICAgIC8vIEEgbGFuZSBpcyBzYWlkIHRvIGJlIGVudGFuZ2xlZCB3aXRoIGFub3RoZXIgd2hlbiBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlbmRlclxuICAgICAgLy8gaW4gYSBiYXRjaCB0aGF0IGRvZXMgbm90IGFsc28gaW5jbHVkZSB0aGUgb3RoZXIgbGFuZS4gVHlwaWNhbGx5IHdlIGRvIHRoaXNcbiAgICAgIC8vIHdoZW4gbXVsdGlwbGUgdXBkYXRlcyBoYXZlIHRoZSBzYW1lIHNvdXJjZSwgYW5kIHdlIG9ubHkgd2FudCB0byByZXNwb25kIHRvXG4gICAgICAvLyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSB0aGF0IHNvdXJjZS5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgZW50YW5nbGVtZW50cyAqYWZ0ZXIqIGNoZWNraW5nIGZvciBwYXJ0aWFsIHdvcmsgYWJvdmUuXG4gICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgYSBsYW5lIGlzIGVudGFuZ2xlZCBkdXJpbmcgYW4gaW50ZXJsZWF2ZWQgZXZlbnQgd2hpbGVcbiAgICAgIC8vIGl0J3MgYWxyZWFkeSByZW5kZXJpbmcsIHdlIHdvbid0IGludGVycnVwdCBpdC4gVGhpcyBpcyBpbnRlbnRpb25hbCwgc2luY2VcbiAgICAgIC8vIGVudGFuZ2xlbWVudCBpcyB1c3VhbGx5IFwiYmVzdCBlZmZvcnRcIjogd2UnbGwgdHJ5IG91ciBiZXN0IHRvIHJlbmRlciB0aGVcbiAgICAgIC8vIGxhbmVzIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgaXQncyBub3Qgd29ydGggdGhyb3dpbmcgb3V0IHBhcnRpYWxseVxuICAgICAgLy8gY29tcGxldGVkIHdvcmsgaW4gb3JkZXIgdG8gZG8gaXQuXG4gICAgICAvLyBUT0RPOiBSZWNvbnNpZGVyIHRoaXMuIFRoZSBjb3VudGVyLWFyZ3VtZW50IGlzIHRoYXQgdGhlIHBhcnRpYWwgd29ya1xuICAgICAgLy8gcmVwcmVzZW50cyBhbiBpbnRlcm1lZGlhdGUgc3RhdGUsIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gc2hvdyB0byB0aGUgdXNlci5cbiAgICAgIC8vIEFuZCBieSBzcGVuZGluZyBleHRyYSB0aW1lIGZpbmlzaGluZyBpdCwgd2UncmUgaW5jcmVhc2luZyB0aGUgYW1vdW50IG9mXG4gICAgICAvLyB0aW1lIGl0IHRha2VzIHRvIHNob3cgdGhlIGZpbmFsIHN0YXRlLCB3aGljaCBpcyB3aGF0IHRoZXkgYXJlIGFjdHVhbGx5XG4gICAgICAvLyB3YWl0aW5nIGZvci5cbiAgICAgIC8vXG4gICAgICAvLyBGb3IgdGhvc2UgZXhjZXB0aW9ucyB3aGVyZSBlbnRhbmdsZW1lbnQgaXMgc2VtYW50aWNhbGx5IGltcG9ydGFudCxcbiAgICAgIC8vIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBwYXJ0aWFsIHdvcmsgYXQgdGhlXG4gICAgICAvLyB0aW1lIHdlIGFwcGx5IHRoZSBlbnRhbmdsZW1lbnQuXG5cbiAgICAgIHZhciBhbGxFbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG5cbiAgICAgIGlmIChhbGxFbnRhbmdsZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICAgICAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXMgJiBhbGxFbnRhbmdsZWRMYW5lcztcblxuICAgICAgICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICAgIGVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlbWVudHNbaW5kZXhdO1xuICAgICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnRhbmdsZWRMYW5lcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgICAgIHN3aXRjaCAobGFuZSkge1xuICAgICAgICBjYXNlIFN5bmNIeWRyYXRpb25MYW5lOlxuICAgICAgICBjYXNlIFN5bmNMYW5lOlxuICAgICAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU6XG4gICAgICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZTpcbiAgICAgICAgICAvLyBVc2VyIGludGVyYWN0aW9ucyBzaG91bGQgZXhwaXJlIHNsaWdodGx5IG1vcmUgcXVpY2tseS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50IGFzIGluIFNjaGVkdWxlci5qcy5cbiAgICAgICAgICAvLyBXaGVuIHdlIG1hZGUgaXQgbGFyZ2VyLCBhIHByb2R1Y3QgbWV0cmljIGluIHd3dyByZWdyZXNzZWQsIHN1Z2dlc3RpbmdcbiAgICAgICAgICAvLyB0aGVyZSdzIGEgdXNlciBpbnRlcmFjdGlvbiB0aGF0J3MgYmVpbmcgc3RhcnZlZCBieSBhIHNlcmllcyBvZlxuICAgICAgICAgIC8vIHN5bmNocm9ub3VzIHVwZGF0ZXMuIElmIHRoYXQgdGhlb3J5IGlzIGNvcnJlY3QsIHRoZSBwcm9wZXIgc29sdXRpb24gaXNcbiAgICAgICAgICAvLyB0byBmaXggdGhlIHN0YXJ2YXRpb24uIEhvd2V2ZXIsIHRoaXMgc2NlbmFyaW8gc3VwcG9ydHMgdGhlIGlkZWEgdGhhdFxuICAgICAgICAgIC8vIGV4cGlyYXRpb24gdGltZXMgYXJlIGFuIGltcG9ydGFudCBzYWZlZ3VhcmQgd2hlbiBzdGFydmF0aW9uXG4gICAgICAgICAgLy8gZG9lcyBoYXBwZW4uXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgc3luY0xhbmVFeHBpcmF0aW9uTXM7XG5cbiAgICAgICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZTpcbiAgICAgICAgY2FzZSBEZWZhdWx0TGFuZTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUyOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMzpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTQ6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU1OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNjpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTc6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU4OlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lOTpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEwOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTE6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMjpcbiAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEzOlxuICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTQ6XG4gICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNTpcbiAgICAgICAgICByZXR1cm4gY3VycmVudFRpbWUgKyB0cmFuc2l0aW9uTGFuZUV4cGlyYXRpb25NcztcblxuICAgICAgICBjYXNlIFJldHJ5TGFuZTE6XG4gICAgICAgIGNhc2UgUmV0cnlMYW5lMjpcbiAgICAgICAgY2FzZSBSZXRyeUxhbmUzOlxuICAgICAgICBjYXNlIFJldHJ5TGFuZTQ6XG4gICAgICAgICAgLy8gVE9ETzogUmV0cmllcyBzaG91bGQgYmUgYWxsb3dlZCB0byBleHBpcmUgaWYgdGhleSBhcmUgQ1BVIGJvdW5kIGZvclxuICAgICAgICAgIC8vIHRvbyBsb25nLCBidXQgd2hlbiBJIG1hZGUgdGhpcyBjaGFuZ2UgaXQgY2F1c2VkIGEgc3Bpa2UgaW4gYnJvd3NlclxuICAgICAgICAgIC8vIGNyYXNoZXMuIFRoZXJlIG11c3QgYmUgc29tZSBvdGhlciB1bmRlcmx5aW5nIGJ1Zzsgbm90IHN1cGVyIHVyZ2VudCBidXRcbiAgICAgICAgICAvLyBpZGVhbGx5IHNob3VsZCBmaWd1cmUgb3V0IHdoeSBhbmQgZml4IGl0LiBVbmZvcnR1bmF0ZWx5IHdlIGRvbid0IGhhdmVcbiAgICAgICAgICAvLyBhIHJlcHJvIGZvciB0aGUgY3Jhc2hlcywgb25seSBkZXRlY3RlZCB2aWEgcHJvZHVjdGlvbiBtZXRyaWNzLlxuICAgICAgICAgIHJldHVybiBOb1RpbWVzdGFtcDtcblxuICAgICAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU6XG4gICAgICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmU6XG4gICAgICAgIGNhc2UgSWRsZUxhbmU6XG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuTGFuZTpcbiAgICAgICAgY2FzZSBEZWZlcnJlZExhbmU6XG4gICAgICAgICAgLy8gQW55dGhpbmcgaWRsZSBwcmlvcml0eSBvciBsb3dlciBzaG91bGQgbmV2ZXIgZXhwaXJlLlxuICAgICAgICAgIHJldHVybiBOb1RpbWVzdGFtcDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yKFwiU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBOb1RpbWVzdGFtcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gICAgICAvLyB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lIG9uIHRoZSByb290LiBUaGVuIHVzZSB0aGF0IHRvIHF1aWNrbHkgYmFpbCBvdXRcbiAgICAgIC8vIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAgICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICAgICAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcztcbiAgICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gICAgICAvLyBleHBpcmF0aW9uIHRpbWUuIElmIHNvLCB3ZSdsbCBhc3N1bWUgdGhlIHVwZGF0ZSBpcyBiZWluZyBzdGFydmVkIGFuZCBtYXJrXG4gICAgICAvLyBpdCBhcyBleHBpcmVkIHRvIGZvcmNlIGl0IHRvIGZpbmlzaC5cbiAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyB3aXRoIHVwZ3JhZGVQZW5kaW5nTGFuZXNUb1N5bmNcbiAgICAgIC8vXG4gICAgICAvLyBXZSBleGNsdWRlIHJldHJ5IGxhbmVzIGJlY2F1c2UgdGhvc2UgbXVzdCBhbHdheXMgYmUgdGltZSBzbGljZWQsIGluIG9yZGVyXG4gICAgICAvLyB0byB1bndyYXAgdW5jYWNoZWQgcHJvbWlzZXMuXG4gICAgICAvLyBUT0RPOiBXcml0ZSBhIHRlc3QgZm9yIHRoaXNcblxuICAgICAgdmFyIGxhbmVzID0gcGVuZGluZ0xhbmVzICYgflJldHJ5TGFuZXM7XG5cbiAgICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgICAgICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IE5vVGltZXN0YW1wKSB7XG4gICAgICAgICAgLy8gRm91bmQgYSBwZW5kaW5nIGxhbmUgd2l0aCBubyBleHBpcmF0aW9uIHRpbWUuIElmIGl0J3Mgbm90IHN1c3BlbmRlZCwgb3JcbiAgICAgICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgICAgIC8vIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMgfHxcbiAgICAgICAgICAgIChsYW5lICYgcGluZ2VkTGFuZXMpICE9PSBOb0xhbmVzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgICAgIC8vIFRoaXMgbGFuZSBleHBpcmVkXG4gICAgICAgICAgcm9vdC5leHBpcmVkTGFuZXMgfD0gbGFuZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgIH0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbiAgICBmdW5jdGlvbiBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihcbiAgICAgIHJvb3QsXG4gICAgICBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXNcbiAgICApIHtcbiAgICAgIGlmIChyb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzICYgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzKSB7XG4gICAgICAgIC8vIFRoZSBlcnJvciByZWNvdmVyeSBtZWNoYW5pc20gaXMgZGlzYWJsZWQgdW50aWwgdGhlc2UgbGFuZXMgYXJlIGNsZWFyZWQuXG4gICAgICAgIHJldHVybiBOb0xhbmVzO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiA9IHJvb3QucGVuZGluZ0xhbmVzICYgfk9mZnNjcmVlbkxhbmU7XG5cbiAgICAgIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIHJldHVybiBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBOb0xhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmNsdWRlc1N5bmNMYW5lKGxhbmVzKSB7XG4gICAgICByZXR1cm4gKGxhbmVzICYgKFN5bmNMYW5lIHwgU3luY0h5ZHJhdGlvbkxhbmUpKSAhPT0gTm9MYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5jbHVkZXNOb25JZGxlV29yayhsYW5lcykge1xuICAgICAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpIHtcbiAgICAgIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzT25seU5vblVyZ2VudExhbmVzKGxhbmVzKSB7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgaHlkcmF0aW9uIGxhbmVzIGJlIGluY2x1ZGVkIGhlcmU/IFRoaXMgZnVuY3Rpb24gaXMgb25seVxuICAgICAgLy8gdXNlZCBpbiBgdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGxgLlxuICAgICAgdmFyIFVyZ2VudExhbmVzID0gU3luY0xhbmUgfCBJbnB1dENvbnRpbnVvdXNMYW5lIHwgRGVmYXVsdExhbmU7XG4gICAgICByZXR1cm4gKGxhbmVzICYgVXJnZW50TGFuZXMpID09PSBOb0xhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICAgICAgcmV0dXJuIChsYW5lcyAmIFRyYW5zaXRpb25MYW5lcykgPT09IGxhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCBsYW5lcykge1xuICAgICAgdmFyIFN5bmNEZWZhdWx0TGFuZXMgPVxuICAgICAgICBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lIHxcbiAgICAgICAgSW5wdXRDb250aW51b3VzTGFuZSB8XG4gICAgICAgIERlZmF1bHRIeWRyYXRpb25MYW5lIHxcbiAgICAgICAgRGVmYXVsdExhbmU7XG4gICAgICByZXR1cm4gKGxhbmVzICYgU3luY0RlZmF1bHRMYW5lcykgIT09IE5vTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzRXhwaXJlZExhbmUocm9vdCwgbGFuZXMpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzZXBhcmF0ZSBjaGVjayBmcm9tIGluY2x1ZGVzQmxvY2tpbmdMYW5lIGJlY2F1c2UgYSBsYW5lIGNhblxuICAgICAgLy8gZXhwaXJlIGFmdGVyIGEgcmVuZGVyIGhhcyBhbHJlYWR5IHN0YXJ0ZWQuXG4gICAgICByZXR1cm4gKGxhbmVzICYgcm9vdC5leHBpcmVkTGFuZXMpICE9PSBOb0xhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RyYW5zaXRpb25MYW5lKGxhbmUpIHtcbiAgICAgIHJldHVybiAobGFuZSAmIFRyYW5zaXRpb25MYW5lcykgIT09IE5vTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCkge1xuICAgICAgLy8gQ3ljbGUgdGhyb3VnaCB0aGUgbGFuZXMsIGFzc2lnbmluZyBlYWNoIG5ldyB0cmFuc2l0aW9uIHRvIHRoZSBuZXh0IGxhbmUuXG4gICAgICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIG1lYW5zIGV2ZXJ5IHRyYW5zaXRpb24gZ2V0cyBpdHMgb3duIGxhbmUsIHVudGlsIHdlXG4gICAgICAvLyBydW4gb3V0IG9mIGxhbmVzIGFuZCBjeWNsZSBiYWNrIHRvIHRoZSBiZWdpbm5pbmcuXG4gICAgICB2YXIgbGFuZSA9IG5leHRUcmFuc2l0aW9uTGFuZTtcbiAgICAgIG5leHRUcmFuc2l0aW9uTGFuZSA8PD0gMTtcblxuICAgICAgaWYgKChuZXh0VHJhbnNpdGlvbkxhbmUgJiBUcmFuc2l0aW9uTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRUcmFuc2l0aW9uTGFuZSA9IFRyYW5zaXRpb25MYW5lMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsYWltTmV4dFJldHJ5TGFuZSgpIHtcbiAgICAgIHZhciBsYW5lID0gbmV4dFJldHJ5TGFuZTtcbiAgICAgIG5leHRSZXRyeUxhbmUgPDw9IDE7XG5cbiAgICAgIGlmICgobmV4dFJldHJ5TGFuZSAmIFJldHJ5TGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRSZXRyeUxhbmUgPSBSZXRyeUxhbmUxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICAgICAgcmV0dXJuIGxhbmVzICYgLWxhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZShsYW5lcykge1xuICAgICAgLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGdldHMgaW5saW5lZC4gT25seSBleGlzdHMgc28gdG8gY29tbXVuaWNhdGUgdGhhdCBpdFxuICAgICAgLy8gZG9lc24ndCBtYXR0ZXIgd2hpY2ggYml0IGlzIHNlbGVjdGVkOyB5b3UgY2FuIHBpY2sgYW55IGJpdCB3aXRob3V0XG4gICAgICAvLyBhZmZlY3RpbmcgdGhlIGFsZ29yaXRobXMgd2hlcmUgaXRzIHVzZWQuIEhlcmUgSSdtIHVzaW5nXG4gICAgICAvLyBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhlIGZld2VzdCBvcGVyYXRpb25zLlxuICAgICAgcmV0dXJuIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpIHtcbiAgICAgIHJldHVybiAzMSAtIGNsejMyKGxhbmVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsYW5lVG9JbmRleChsYW5lKSB7XG4gICAgICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmNsdWRlc1NvbWVMYW5lKGEsIGIpIHtcbiAgICAgIHJldHVybiAoYSAmIGIpICE9PSBOb0xhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1N1YnNldE9mTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgICAgIHJldHVybiAoc2V0ICYgc3Vic2V0KSA9PT0gc3Vic2V0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZUxhbmVzKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIHwgYjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgICAgIHJldHVybiBzZXQgJiB+c3Vic2V0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnRlcnNlY3RMYW5lcyhhLCBiKSB7XG4gICAgICByZXR1cm4gYSAmIGI7XG4gICAgfSAvLyBTZWVtcyByZWR1bmRhbnQsIGJ1dCBpdCBjaGFuZ2VzIHRoZSB0eXBlIGZyb20gYSBzaW5nbGUgbGFuZSAodXNlZCBmb3JcbiAgICAvLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuICAgIGZ1bmN0aW9uIGxhbmVUb0xhbmVzKGxhbmUpIHtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAgICAgLy8gaHR0cHM6Ly92OC5kZXYvYmxvZy9lbGVtZW50cy1raW5kcyNhdm9pZC1jcmVhdGluZy1ob2xlc1xuICAgICAgdmFyIGxhbmVNYXAgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICAgICAgbGFuZU1hcC5wdXNoKGluaXRpYWwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZU1hcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHVwZGF0ZUxhbmUpIHtcbiAgICAgIHJvb3QucGVuZGluZ0xhbmVzIHw9IHVwZGF0ZUxhbmU7IC8vIElmIHRoZXJlIGFyZSBhbnkgc3VzcGVuZGVkIHRyYW5zaXRpb25zLCBpdCdzIHBvc3NpYmxlIHRoaXMgbmV3IHVwZGF0ZVxuICAgICAgLy8gY291bGQgdW5ibG9jayB0aGVtLiBDbGVhciB0aGUgc3VzcGVuZGVkIGxhbmVzIHNvIHRoYXQgd2UgY2FuIHRyeSByZW5kZXJpbmdcbiAgICAgIC8vIHRoZW0gYWdhaW4uXG4gICAgICAvL1xuICAgICAgLy8gVE9ETzogV2UgcmVhbGx5IG9ubHkgbmVlZCB0byB1bnN1c3BlbmQgb25seSBsYW5lcyB0aGF0IGFyZSBpbiB0aGVcbiAgICAgIC8vIGBzdWJ0cmVlTGFuZXNgIG9mIHRoZSB1cGRhdGVkIGZpYmVyLCBvciB0aGUgdXBkYXRlIGxhbmVzIG9mIHRoZSByZXR1cm5cbiAgICAgIC8vIHBhdGguIFRoaXMgd291bGQgZXhjbHVkZSBzdXNwZW5kZWQgdXBkYXRlcyBpbiBhbiB1bnJlbGF0ZWQgc2libGluZyB0cmVlLFxuICAgICAgLy8gc2luY2UgdGhlcmUncyBubyB3YXkgZm9yIHRoaXMgdXBkYXRlIHRvIHVuYmxvY2sgaXQuXG4gICAgICAvL1xuICAgICAgLy8gV2UgZG9uJ3QgZG8gdGhpcyBpZiB0aGUgaW5jb21pbmcgdXBkYXRlIGlzIGlkbGUsIGJlY2F1c2Ugd2UgbmV2ZXIgcHJvY2Vzc1xuICAgICAgLy8gaWRsZSB1cGRhdGVzIHVudGlsIGFmdGVyIGFsbCB0aGUgcmVndWxhciB1cGRhdGVzIGhhdmUgZmluaXNoZWQ7IHRoZXJlJ3Mgbm9cbiAgICAgIC8vIHdheSBpdCBjb3VsZCB1bmJsb2NrIGEgdHJhbnNpdGlvbi5cblxuICAgICAgaWYgKHVwZGF0ZUxhbmUgIT09IElkbGVMYW5lKSB7XG4gICAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICByb290LnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBzdXNwZW5kZWRMYW5lcywgc3Bhd25lZExhbmUpIHtcbiAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gICAgICByb290LnBpbmdlZExhbmVzICY9IH5zdXNwZW5kZWRMYW5lczsgLy8gVGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIENQVS1ib3VuZC4gQ2xlYXIgdGhlaXIgZXhwaXJhdGlvbiB0aW1lcy5cblxuICAgICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICAgICAgdmFyIGxhbmVzID0gc3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwYXduZWRMYW5lICE9PSBOb0xhbmUpIHtcbiAgICAgICAgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMpIHtcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzLCBzcGF3bmVkTGFuZSkge1xuICAgICAgdmFyIG5vTG9uZ2VyUGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gICAgICByb290LnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LmVudGFuZ2xlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlciA9IDA7XG4gICAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcztcbiAgICAgIHZhciBoaWRkZW5VcGRhdGVzID0gcm9vdC5oaWRkZW5VcGRhdGVzOyAvLyBDbGVhciB0aGUgbGFuZXMgdGhhdCBubyBsb25nZXIgaGF2ZSBwZW5kaW5nIHdvcmtcblxuICAgICAgdmFyIGxhbmVzID0gbm9Mb25nZXJQZW5kaW5nTGFuZXM7XG5cbiAgICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgICAgIHZhciBoaWRkZW5VcGRhdGVzRm9yTGFuZSA9IGhpZGRlblVwZGF0ZXNbaW5kZXhdO1xuXG4gICAgICAgIGlmIChoaWRkZW5VcGRhdGVzRm9yTGFuZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGhpZGRlblVwZGF0ZXNbaW5kZXhdID0gbnVsbDsgLy8gXCJIaWRkZW5cIiB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgd2VyZSBtYWRlIHRvIGEgaGlkZGVuIGNvbXBvbmVudC4gVGhleVxuICAgICAgICAgIC8vIGhhdmUgc3BlY2lhbCBsb2dpYyBhc3NvY2lhdGVkIHdpdGggdGhlbSBiZWNhdXNlIHRoZXkgbWF5IGJlIGVudGFuZ2xlZFxuICAgICAgICAgIC8vIHdpdGggdXBkYXRlcyB0aGF0IG9jY3VyIG91dHNpZGUgdGhhdCB0cmVlLiBCdXQgb25jZSB0aGUgb3V0ZXIgdHJlZVxuICAgICAgICAgIC8vIGNvbW1pdHMsIHRoZXkgYmVoYXZlIGxpa2UgcmVndWxhciB1cGRhdGVzLlxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5VcGRhdGVzRm9yTGFuZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGhpZGRlblVwZGF0ZXNGb3JMYW5lW2ldO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZS5sYW5lICY9IH5PZmZzY3JlZW5MYW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3Bhd25lZExhbmUgIT09IE5vTGFuZSkge1xuICAgICAgICBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShcbiAgICAgICAgICByb290LFxuICAgICAgICAgIHNwYXduZWRMYW5lLCAvLyBUaGlzIHJlbmRlciBmaW5pc2hlZCBzdWNjZXNzZnVsbHkgd2l0aG91dCBzdXNwZW5kaW5nLCBzbyB3ZSBkb24ndCBuZWVkXG4gICAgICAgICAgLy8gdG8gZW50YW5nbGUgdGhlIHNwYXduZWQgdGFzayB3aXRoIHRoZSBwYXJlbnQgdGFzay5cbiAgICAgICAgICBOb0xhbmVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIGVudGFuZ2xlZExhbmVzKSB7XG4gICAgICAvLyBUaGlzIHJlbmRlciBzcGF3bmVkIGEgZGVmZXJyZWQgdGFzay4gTWFyayBpdCBhcyBwZW5kaW5nLlxuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gc3Bhd25lZExhbmU7XG4gICAgICByb290LnN1c3BlbmRlZExhbmVzICY9IH5zcGF3bmVkTGFuZTsgLy8gRW50YW5nbGUgdGhlIHNwYXduZWQgbGFuZSB3aXRoIHRoZSBEZWZlcnJlZExhbmUgYml0IHNvIHRoYXQgd2Uga25vdyBpdFxuICAgICAgLy8gd2FzIHRoZSByZXN1bHQgb2YgYW5vdGhlciByZW5kZXIuIFRoaXMgbGV0cyB1cyBhdm9pZCBhIHVzZURlZmVycmVkVmFsdWVcbiAgICAgIC8vIHdhdGVyZmFsbCDigJQgb25seSB0aGUgZmlyc3QgbGV2ZWwgd2lsbCBkZWZlci5cblxuICAgICAgdmFyIHNwYXduZWRMYW5lSW5kZXggPSBsYW5lVG9JbmRleChzcGF3bmVkTGFuZSk7XG4gICAgICByb290LmVudGFuZ2xlZExhbmVzIHw9IHNwYXduZWRMYW5lO1xuICAgICAgcm9vdC5lbnRhbmdsZW1lbnRzW3NwYXduZWRMYW5lSW5kZXhdIHw9XG4gICAgICAgIERlZmVycmVkTGFuZSB8IC8vIElmIHRoZSBwYXJlbnQgcmVuZGVyIHRhc2sgc3VzcGVuZGVkLCB3ZSBtdXN0IGFsc28gZW50YW5nbGUgdGhvc2UgbGFuZXNcbiAgICAgICAgLy8gd2l0aCB0aGUgc3Bhd25lZCB0YXNrLCBzbyB0aGF0IHRoZSBkZWZlcnJlZCB0YXNrIGluY2x1ZGVzIGFsbCB0aGUgc2FtZVxuICAgICAgICAvLyB1cGRhdGVzIHRoYXQgdGhlIHBhcmVudCB0YXNrIGRpZC4gV2UgY2FuIGV4Y2x1ZGUgYW55IGxhbmUgdGhhdCBpcyBub3RcbiAgICAgICAgLy8gdXNlZCBmb3IgdXBkYXRlcyAoZS5nLiBPZmZzY3JlZW4pLlxuICAgICAgICAoZW50YW5nbGVkTGFuZXMgJiBVcGRhdGVMYW5lcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgICAgIC8vIEluIGFkZGl0aW9uIHRvIGVudGFuZ2xpbmcgZWFjaCBvZiB0aGUgZ2l2ZW4gbGFuZXMgd2l0aCBlYWNoIG90aGVyLCB3ZSBhbHNvXG4gICAgICAvLyBoYXZlIHRvIGNvbnNpZGVyIF90cmFuc2l0aXZlXyBlbnRhbmdsZW1lbnRzLiBGb3IgZWFjaCBsYW5lIHRoYXQgaXMgYWxyZWFkeVxuICAgICAgLy8gZW50YW5nbGVkIHdpdGggKmFueSogb2YgdGhlIGdpdmVuIGxhbmVzLCB0aGF0IGxhbmUgaXMgbm93IHRyYW5zaXRpdmVseVxuICAgICAgLy8gZW50YW5nbGVkIHdpdGggKmFsbCogdGhlIGdpdmVuIGxhbmVzLlxuICAgICAgLy9cbiAgICAgIC8vIFRyYW5zbGF0ZWQ6IElmIEMgaXMgZW50YW5nbGVkIHdpdGggQSwgdGhlbiBlbnRhbmdsaW5nIEEgd2l0aCBCIGFsc29cbiAgICAgIC8vIGVudGFuZ2xlcyBDIHdpdGggQi5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB0aGlzIGlzIGhhcmQgdG8gZ3Jhc3AsIGl0IG1pZ2h0IGhlbHAgdG8gaW50ZW50aW9uYWxseSBicmVhayB0aGlzXG4gICAgICAvLyBmdW5jdGlvbiBhbmQgbG9vayBhdCB0aGUgdGVzdHMgdGhhdCBmYWlsIGluIFJlYWN0VHJhbnNpdGlvbi10ZXN0LmpzLiBUcnlcbiAgICAgIC8vIGNvbW1lbnRpbmcgb3V0IG9uZSBvZiB0aGUgY29uZGl0aW9ucyBiZWxvdy5cbiAgICAgIHZhciByb290RW50YW5nbGVkTGFuZXMgPSAocm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcyk7XG4gICAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICAgIHZhciBsYW5lcyA9IHJvb3RFbnRhbmdsZWRMYW5lcztcblxuICAgICAgd2hpbGUgKGxhbmVzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIElzIHRoaXMgb25lIG9mIHRoZSBuZXdseSBlbnRhbmdsZWQgbGFuZXM/XG4gICAgICAgICAgKGxhbmUgJiBlbnRhbmdsZWRMYW5lcykgfCAvLyBJcyB0aGlzIGxhbmUgdHJhbnNpdGl2ZWx5IGVudGFuZ2xlZCB3aXRoIHRoZSBuZXdseSBlbnRhbmdsZWQgbGFuZXM/XG4gICAgICAgICAgKGVudGFuZ2xlbWVudHNbaW5kZXhdICYgZW50YW5nbGVkTGFuZXMpXG4gICAgICAgICkge1xuICAgICAgICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdIHw9IGVudGFuZ2xlZExhbmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZ3JhZGVQZW5kaW5nTGFuZVRvU3luYyhyb290LCBsYW5lKSB7XG4gICAgICAvLyBTaW5jZSB3ZSdyZSB1cGdyYWRpbmcgdGhlIHByaW9yaXR5IG9mIHRoZSBnaXZlbiBsYW5lLCB0aGVyZSBpcyBub3cgcGVuZGluZ1xuICAgICAgLy8gc3luYyB3b3JrLlxuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gU3luY0xhbmU7IC8vIEVudGFuZ2xlIHRoZSBzeW5jIGxhbmUgd2l0aCB0aGUgbGFuZSB3ZSdyZSB1cGdyYWRpbmcuIFRoaXMgbWVhbnMgU3luY0xhbmVcbiAgICAgIC8vIHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gZmluaXNoIHdpdGhvdXQgYWxzbyBmaW5pc2hpbmcgdGhlIGdpdmVuIGxhbmUuXG5cbiAgICAgIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gU3luY0xhbmU7XG4gICAgICByb290LmVudGFuZ2xlbWVudHNbU3luY0xhbmVJbmRleF0gfD0gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0hpZGRlblVwZGF0ZShyb290LCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KGxhbmUpO1xuICAgICAgdmFyIGhpZGRlblVwZGF0ZXMgPSByb290LmhpZGRlblVwZGF0ZXM7XG4gICAgICB2YXIgaGlkZGVuVXBkYXRlc0ZvckxhbmUgPSBoaWRkZW5VcGRhdGVzW2luZGV4XTtcblxuICAgICAgaWYgKGhpZGRlblVwZGF0ZXNGb3JMYW5lID09PSBudWxsKSB7XG4gICAgICAgIGhpZGRlblVwZGF0ZXNbaW5kZXhdID0gW3VwZGF0ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWRkZW5VcGRhdGVzRm9yTGFuZS5wdXNoKHVwZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5sYW5lID0gbGFuZSB8IE9mZnNjcmVlbkxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb24ocm9vdCwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciByZW5kZXJMYW5lID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShyZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgbGFuZTtcblxuICAgICAgaWYgKChyZW5kZXJMYW5lICYgU3luY1VwZGF0ZUxhbmVzKSAhPT0gTm9MYW5lKSB7XG4gICAgICAgIGxhbmUgPSBTeW5jSHlkcmF0aW9uTGFuZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAocmVuZGVyTGFuZSkge1xuICAgICAgICAgIGNhc2UgU3luY0xhbmU6XG4gICAgICAgICAgICBsYW5lID0gU3luY0h5ZHJhdGlvbkxhbmU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZTpcbiAgICAgICAgICAgIGxhbmUgPSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIERlZmF1bHRMYW5lOlxuICAgICAgICAgICAgbGFuZSA9IERlZmF1bHRIeWRyYXRpb25MYW5lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMjpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMzpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNDpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNTpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNjpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNzpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lODpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lOTpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTA6XG4gICAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTExOlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMjpcbiAgICAgICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTM6XG4gICAgICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE0OlxuICAgICAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNTpcbiAgICAgICAgICBjYXNlIFJldHJ5TGFuZTE6XG4gICAgICAgICAgY2FzZSBSZXRyeUxhbmUyOlxuICAgICAgICAgIGNhc2UgUmV0cnlMYW5lMzpcbiAgICAgICAgICBjYXNlIFJldHJ5TGFuZTQ6XG4gICAgICAgICAgICBsYW5lID0gVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgSWRsZUxhbmU6XG4gICAgICAgICAgICBsYW5lID0gSWRsZUh5ZHJhdGlvbkxhbmU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgYWxyZWFkeSBlaXRoZXIgYSBoeWRyYXRpb24gbGFuZSwgb3Igc2hvdWxkbid0XG4gICAgICAgICAgICAvLyBiZSByZXRyaWVkIGF0IGEgaHlkcmF0aW9uIGxhbmUuXG4gICAgICAgICAgICBsYW5lID0gTm9MYW5lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ2hlY2sgaWYgdGhlIGxhbmUgd2UgY2hvc2UgaXMgc3VzcGVuZGVkLiBJZiBzbywgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZVxuICAgICAgLy8gYWxyZWFkeSBhdHRlbXB0ZWQgYW5kIGZhaWxlZCB0byBoeWRyYXRlIGF0IHRoYXQgbGV2ZWwuIEFsc28gY2hlY2sgaWYgd2UncmVcbiAgICAgIC8vIGFscmVhZHkgcmVuZGVyaW5nIHRoYXQgbGFuZSwgd2hpY2ggaXMgcmFyZSBidXQgY291bGQgaGFwcGVuLlxuXG4gICAgICBpZiAoKGxhbmUgJiAocm9vdC5zdXNwZW5kZWRMYW5lcyB8IHJlbmRlckxhbmVzKSkgIT09IE5vTGFuZSkge1xuICAgICAgICAvLyBHaXZlIHVwIHRyeWluZyB0byBoeWRyYXRlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHJlbmRlci5cbiAgICAgICAgcmV0dXJuIE5vTGFuZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEZpYmVyVG9MYW5lc01hcChyb290LCBmaWJlciwgbGFuZXMpIHtcbiAgICAgIGlmICghaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCA9IHJvb3QucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcDtcblxuICAgICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleChsYW5lcyk7XG4gICAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgdmFyIHVwZGF0ZXJzID0gcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcFtpbmRleF07XG4gICAgICAgIHVwZGF0ZXJzLmFkZChmaWJlcik7XG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpIHtcbiAgICAgIGlmICghaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCA9IHJvb3QucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcDtcbiAgICAgIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuXG4gICAgICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KGxhbmVzKTtcbiAgICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICB2YXIgdXBkYXRlcnMgPSBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwW2luZGV4XTtcblxuICAgICAgICBpZiAodXBkYXRlcnMuc2l6ZSA+IDApIHtcbiAgICAgICAgICB1cGRhdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCAhbWVtb2l6ZWRVcGRhdGVycy5oYXMoYWx0ZXJuYXRlKSkge1xuICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmFkZChmaWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdXBkYXRlcnMuY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uc0ZvckxhbmVzKHJvb3QsIGxhbmVzKSB7XG4gICAgICB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBEaXNjcmV0ZUV2ZW50UHJpb3JpdHkgPSBTeW5jTGFuZTtcbiAgICB2YXIgQ29udGludW91c0V2ZW50UHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNMYW5lO1xuICAgIHZhciBEZWZhdWx0RXZlbnRQcmlvcml0eSA9IERlZmF1bHRMYW5lO1xuICAgIHZhciBJZGxlRXZlbnRQcmlvcml0eSA9IElkbGVMYW5lO1xuICAgIHZhciBjdXJyZW50VXBkYXRlUHJpb3JpdHkgPSBOb0xhbmU7XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRVcGRhdGVQcmlvcml0eTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KG5ld1ByaW9yaXR5KSB7XG4gICAgICBjdXJyZW50VXBkYXRlUHJpb3JpdHkgPSBuZXdQcmlvcml0eTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlnaGVyRXZlbnRQcmlvcml0eShhLCBiKSB7XG4gICAgICByZXR1cm4gYSAhPT0gMCAmJiBhIDwgYiA/IGEgOiBiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb3dlckV2ZW50UHJpb3JpdHkoYSwgYikge1xuICAgICAgcmV0dXJuIGEgPT09IDAgfHwgYSA+IGIgPyBhIDogYjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNIaWdoZXJFdmVudFByaW9yaXR5KGEsIGIpIHtcbiAgICAgIHJldHVybiBhICE9PSAwICYmIGEgPCBiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsYW5lc1RvRXZlbnRQcmlvcml0eShsYW5lcykge1xuICAgICAgdmFyIGxhbmUgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcblxuICAgICAgaWYgKCFpc0hpZ2hlckV2ZW50UHJpb3JpdHkoRGlzY3JldGVFdmVudFByaW9yaXR5LCBsYW5lKSkge1xuICAgICAgICByZXR1cm4gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzSGlnaGVyRXZlbnRQcmlvcml0eShDb250aW51b3VzRXZlbnRQcmlvcml0eSwgbGFuZSkpIHtcbiAgICAgICAgcmV0dXJuIENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5jbHVkZXNOb25JZGxlV29yayhsYW5lKSkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBJZGxlRXZlbnRQcmlvcml0eTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXJlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGh5ZHJhdGlvblxuICAgIC8vIGNhbiByZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHRoaXMgbW9kdWxlLlxuICAgIGZ1bmN0aW9uIHNoaW0kMSgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgY3VycmVudCByZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IGh5ZHJhdGlvbi4gXCIgK1xuICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBcIiArXG4gICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9IC8vIEh5ZHJhdGlvbiAod2hlbiB1bnN1cHBvcnRlZClcbiAgICB2YXIgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyA9IHNoaW0kMTtcbiAgICB2YXIgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2sgPSBzaGltJDE7XG4gICAgdmFyIGdldFN1c3BlbnNlSW5zdGFuY2VGYWxsYmFja0Vycm9yRGV0YWlscyA9IHNoaW0kMTtcbiAgICB2YXIgcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkgPSBzaGltJDE7XG4gICAgdmFyIGNsZWFyU3VzcGVuc2VCb3VuZGFyeSA9IHNoaW0kMTtcbiAgICB2YXIgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5RnJvbUNvbnRhaW5lciA9IHNoaW0kMTtcbiAgICB2YXIgZXJyb3JIeWRyYXRpbmdDb250YWluZXIgPSBzaGltJDE7XG5cbiAgICAvLyBSZW5kZXJlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGh5ZHJhdGlvblxuICAgIC8vIGNhbiByZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHRoaXMgbW9kdWxlLlxuICAgIGZ1bmN0aW9uIHNoaW0oKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIGN1cnJlbnQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBSZXNvdXJjZXMuIFwiICtcbiAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gXCIgK1xuICAgICAgICAgIFwiUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfSAvLyBSZXNvdXJjZXMgKHdoZW4gdW5zdXBwb3J0ZWQpXG4gICAgdmFyIHN1c3BlbmRSZXNvdXJjZSA9IHNoaW07XG5cbiAgICB2YXIgZ2V0Vmlld0NvbmZpZ0ZvclR5cGUgPVxuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0TmF0aXZlVmlld0NvbmZpZ1JlZ2lzdHJ5LmdldDsgLy8gVW51c2VkXG4gICAgLy8gVW51c2VkXG4gICAgLy8gQ291bnRlciBmb3IgdW5pcXVlbHkgaWRlbnRpZnlpbmcgdmlld3MuXG4gICAgLy8gJSAxMCA9PT0gMSBtZWFucyBpdCBpcyBhIHJvb3RUYWcuXG4gICAgLy8gJSAyID09PSAwIG1lYW5zIGl0IGlzIGEgRmFicmljIHRhZy5cblxuICAgIHZhciBuZXh0UmVhY3RUYWcgPSAzO1xuXG4gICAgZnVuY3Rpb24gYWxsb2NhdGVUYWcoKSB7XG4gICAgICB2YXIgdGFnID0gbmV4dFJlYWN0VGFnO1xuXG4gICAgICBpZiAodGFnICUgMTAgPT09IDEpIHtcbiAgICAgICAgdGFnICs9IDI7XG4gICAgICB9XG5cbiAgICAgIG5leHRSZWFjdFRhZyA9IHRhZyArIDI7XG4gICAgICByZXR1cm4gdGFnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VW5jYWNoZUZpYmVyTm9kZShub2RlKSB7XG4gICAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgLy8gTGVhZiBub2RlIChlZyB0ZXh0KVxuICAgICAgICB1bmNhY2hlRmliZXJOb2RlKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5jYWNoZUZpYmVyTm9kZShub2RlLl9uYXRpdmVUYWcpO1xuXG4gICAgICAgIG5vZGUuX2NoaWxkcmVuLmZvckVhY2gocmVjdXJzaXZlbHlVbmNhY2hlRmliZXJOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICAgICAgcGFyZW50SW5zdGFuY2UuX2NoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIHJvb3RDb250YWluZXJJbnN0YW5jZSxcbiAgICAgIGhvc3RDb250ZXh0LFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICkge1xuICAgICAgdmFyIHRhZyA9IGFsbG9jYXRlVGFnKCk7XG4gICAgICB2YXIgdmlld0NvbmZpZyA9IGdldFZpZXdDb25maWdGb3JUeXBlKHR5cGUpO1xuXG4gICAgICB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2aWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcykge1xuICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZGVlcEZyZWV6ZUFuZFRocm93T25NdXRhdGlvbkluRGV2KFxuICAgICAgICAgICAgICBwcm9wc1trZXldXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGNyZWF0ZShwcm9wcywgdmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXMpO1xuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5jcmVhdGVWaWV3KFxuICAgICAgICB0YWcsIC8vIHJlYWN0VGFnXG4gICAgICAgIHZpZXdDb25maWcudWlWaWV3Q2xhc3NOYW1lLCAvLyB2aWV3TmFtZVxuICAgICAgICByb290Q29udGFpbmVySW5zdGFuY2UsIC8vIHJvb3RUYWdcbiAgICAgICAgdXBkYXRlUGF5bG9hZCAvLyBwcm9wc1xuICAgICAgKTtcbiAgICAgIHZhciBjb21wb25lbnQgPSBuZXcgUmVhY3ROYXRpdmVGaWJlckhvc3RDb21wb25lbnQoXG4gICAgICAgIHRhZyxcbiAgICAgICAgdmlld0NvbmZpZyxcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICAgKTtcbiAgICAgIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRhZyk7XG4gICAgICB1cGRhdGVGaWJlclByb3BzKHRhZywgcHJvcHMpOyAvLyBOb3Qgc3VyZSBob3cgdG8gYXZvaWQgdGhpcyBjYXN0LiBGbG93IGlzIG9rYXkgaWYgdGhlIGNvbXBvbmVudCBpcyBkZWZpbmVkXG4gICAgICAvLyBpbiB0aGUgc2FtZSBmaWxlIGJ1dCBpZiBpdCdzIGV4dGVybmFsIGl0IGNhbid0IHNlZSB0aGUgdHlwZXMuXG5cbiAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZShcbiAgICAgIHRleHQsXG4gICAgICByb290Q29udGFpbmVySW5zdGFuY2UsXG4gICAgICBob3N0Q29udGV4dCxcbiAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGVcbiAgICApIHtcbiAgICAgIGlmICghaG9zdENvbnRleHQuaXNJbkFQYXJlbnRUZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRleHQgc3RyaW5ncyBtdXN0IGJlIHJlbmRlcmVkIHdpdGhpbiBhIDxUZXh0PiBjb21wb25lbnQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhZyA9IGFsbG9jYXRlVGFnKCk7XG4gICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLmNyZWF0ZVZpZXcoXG4gICAgICAgIHRhZywgLy8gcmVhY3RUYWdcbiAgICAgICAgXCJSQ1RSYXdUZXh0XCIsIC8vIHZpZXdOYW1lXG4gICAgICAgIHJvb3RDb250YWluZXJJbnN0YW5jZSwgLy8gcm9vdFRhZ1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9IC8vIHByb3BzXG4gICAgICApO1xuICAgICAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGFnKTtcbiAgICAgIHJldHVybiB0YWc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKHBhcmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcywgaG9zdENvbnRleHQpIHtcbiAgICAgIC8vIERvbid0IHNlbmQgYSBuby1vcCBtZXNzYWdlIG92ZXIgdGhlIGJyaWRnZS5cbiAgICAgIGlmIChwYXJlbnRJbnN0YW5jZS5fY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gTWFwIGZyb20gY2hpbGQgb2JqZWN0cyB0byBuYXRpdmUgdGFncy5cbiAgICAgIC8vIEVpdGhlciB3YXkgd2UgbmVlZCB0byBwYXNzIGEgY29weSBvZiB0aGUgQXJyYXkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGZyb3plbi5cblxuICAgICAgdmFyIG5hdGl2ZVRhZ3MgPSBwYXJlbnRJbnN0YW5jZS5fY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGNoaWxkID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBjaGlsZCAvLyBMZWFmIG5vZGUgKGVnIHRleHQpXG4gICAgICAgICAgOiBjaGlsZC5fbmF0aXZlVGFnO1xuICAgICAgfSk7XG5cbiAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIuc2V0Q2hpbGRyZW4oXG4gICAgICAgIHBhcmVudEluc3RhbmNlLl9uYXRpdmVUYWcsIC8vIGNvbnRhaW5lclRhZ1xuICAgICAgICBuYXRpdmVUYWdzIC8vIHJlYWN0VGFnc1xuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250ZXh0KHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNJbkFQYXJlbnRUZXh0OiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2hpbGRIb3N0Q29udGV4dChwYXJlbnRIb3N0Q29udGV4dCwgdHlwZSkge1xuICAgICAgdmFyIHByZXZJc0luQVBhcmVudFRleHQgPSBwYXJlbnRIb3N0Q29udGV4dC5pc0luQVBhcmVudFRleHQ7XG4gICAgICB2YXIgaXNJbkFQYXJlbnRUZXh0ID1cbiAgICAgICAgdHlwZSA9PT0gXCJBbmRyb2lkVGV4dElucHV0XCIgfHwgLy8gQW5kcm9pZFxuICAgICAgICB0eXBlID09PSBcIlJDVE11bHRpbGluZVRleHRJbnB1dFZpZXdcIiB8fCAvLyBpT1NcbiAgICAgICAgdHlwZSA9PT0gXCJSQ1RTaW5nbGVsaW5lVGV4dElucHV0Vmlld1wiIHx8IC8vIGlPU1xuICAgICAgICB0eXBlID09PSBcIlJDVFRleHRcIiB8fFxuICAgICAgICB0eXBlID09PSBcIlJDVFZpcnR1YWxUZXh0XCI7XG5cbiAgICAgIGlmIChwcmV2SXNJbkFQYXJlbnRUZXh0ICE9PSBpc0luQVBhcmVudFRleHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc0luQVBhcmVudFRleHQ6IGlzSW5BUGFyZW50VGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudEhvc3RDb250ZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW3Byb3AtbWlzc2luZ10gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGYWJyaWNcbiAgICAgIGlmIChcbiAgICAgICAgaW5zdGFuY2UuY2Fub25pY2FsICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UuY2Fub25pY2FsLnB1YmxpY0luc3RhbmNlICE9IG51bGxcbiAgICAgICkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5jYW5vbmljYWwucHVibGljSW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlVGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgdmFyIGNhbmNlbFRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgdmFyIG5vVGltZW91dCA9IC0xO1xuICAgIGZ1bmN0aW9uIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByb3BzKSB7XG4gICAgICAvLyBUT0RPIChidmF1Z2huKSBSZXZpc2l0IHRoaXMgZGVjaXNpb24uXG4gICAgICAvLyBBbHdheXMgcmV0dXJuaW5nIGZhbHNlIHNpbXBsaWZpZXMgdGhlIGNyZWF0ZUluc3RhbmNlKCkgaW1wbGVtZW50YXRpb24sXG4gICAgICAvLyBCdXQgY3JlYXRlcyBhbiBhZGRpdGlvbmFsIGNoaWxkIEZpYmVyIGZvciByYXcgdGV4dCBjaGlsZHJlbi5cbiAgICAgIC8vIE5vIGFkZGl0aW9uYWwgbmF0aXZlIHZpZXdzIGFyZSBjcmVhdGVkIHRob3VnaC5cbiAgICAgIC8vIEl0J3Mgbm90IGNsZWFyIHRvIG1lIHdoaWNoIGlzIGJldHRlciBzbyBJJ20gZGVmZXJyaW5nIGZvciBub3cuXG4gICAgICAvLyBNb3JlIGNvbnRleHQgQCBnaXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvODU2MCNkaXNjdXNzaW9uX3I5MjExMTMwM1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50RXZlbnRQcmlvcml0eSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkQXR0ZW1wdEVhZ2VyVHJhbnNpdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZFRhZyA9IHR5cGVvZiBjaGlsZCA9PT0gXCJudW1iZXJcIiA/IGNoaWxkIDogY2hpbGQuX25hdGl2ZVRhZztcbiAgICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudEluc3RhbmNlLl9jaGlsZHJlbjtcbiAgICAgIHZhciBpbmRleCA9IGNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tYW5hZ2VDaGlsZHJlbihcbiAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5fbmF0aXZlVGFnLCAvLyBjb250YWluZXJUYWdcbiAgICAgICAgICBbaW5kZXhdLCAvLyBtb3ZlRnJvbUluZGljZXNcbiAgICAgICAgICBbY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIC8vIG1vdmVUb0luZGljZXNcbiAgICAgICAgICBbXSwgLy8gYWRkQ2hpbGRSZWFjdFRhZ3NcbiAgICAgICAgICBbXSwgLy8gYWRkQXRJbmRpY2VzXG4gICAgICAgICAgW10gLy8gcmVtb3ZlQXRJbmRpY2VzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tYW5hZ2VDaGlsZHJlbihcbiAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5fbmF0aXZlVGFnLCAvLyBjb250YWluZXJUYWdcbiAgICAgICAgICBbXSwgLy8gbW92ZUZyb21JbmRpY2VzXG4gICAgICAgICAgW10sIC8vIG1vdmVUb0luZGljZXNcbiAgICAgICAgICBbY2hpbGRUYWddLCAvLyBhZGRDaGlsZFJlYWN0VGFnc1xuICAgICAgICAgIFtjaGlsZHJlbi5sZW5ndGggLSAxXSwgLy8gYWRkQXRJbmRpY2VzXG4gICAgICAgICAgW10gLy8gcmVtb3ZlQXRJbmRpY2VzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGRUYWcgPSB0eXBlb2YgY2hpbGQgPT09IFwibnVtYmVyXCIgPyBjaGlsZCA6IGNoaWxkLl9uYXRpdmVUYWc7XG4gICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLnNldENoaWxkcmVuKFxuICAgICAgICBwYXJlbnRJbnN0YW5jZSwgLy8gY29udGFpbmVyVGFnXG4gICAgICAgIFtjaGlsZFRhZ10gLy8gcmVhY3RUYWdzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci51cGRhdGVWaWV3KFxuICAgICAgICB0ZXh0SW5zdGFuY2UsIC8vIHJlYWN0VGFnXG4gICAgICAgIFwiUkNUUmF3VGV4dFwiLCAvLyB2aWV3TmFtZVxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogbmV3VGV4dFxuICAgICAgICB9IC8vIHByb3BzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRNb3VudChpbnN0YW5jZSwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgICAgIC8vIE5vb3BcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0VXBkYXRlKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICB1cGRhdGVQYXlsb2FkVE9ETyxcbiAgICAgIHR5cGUsXG4gICAgICBvbGRQcm9wcyxcbiAgICAgIG5ld1Byb3BzLFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICkge1xuICAgICAgdmFyIHZpZXdDb25maWcgPSBpbnN0YW5jZS52aWV3Q29uZmlnO1xuICAgICAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZS5fbmF0aXZlVGFnLCBuZXdQcm9wcyk7XG4gICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGRpZmYob2xkUHJvcHMsIG5ld1Byb3BzLCB2aWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlcyk7IC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBicmlkZ2UgY2FsbHMgaWYgdGhlcmUncyBubyB1cGRhdGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGV4cGVuc2l2ZSBuby1vcCBmb3IgQW5kcm9pZCwgYW5kIGNhdXNlcyBhbiB1bm5lY2Vzc2FyeVxuICAgICAgLy8gdmlldyBpbnZhbGlkYXRpb24gZm9yIGNlcnRhaW4gY29tcG9uZW50cyAoZWcgUkNUVGV4dElucHV0KSBvbiBpT1MuXG5cbiAgICAgIGlmICh1cGRhdGVQYXlsb2FkICE9IG51bGwpIHtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci51cGRhdGVWaWV3KFxuICAgICAgICAgIGluc3RhbmNlLl9uYXRpdmVUYWcsIC8vIHJlYWN0VGFnXG4gICAgICAgICAgdmlld0NvbmZpZy51aVZpZXdDbGFzc05hbWUsIC8vIHZpZXdOYW1lXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCAvLyBwcm9wc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50SW5zdGFuY2UsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gcGFyZW50SW5zdGFuY2UuX2NoaWxkcmVuO1xuICAgICAgdmFyIGluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7IC8vIE1vdmUgZXhpc3RpbmcgY2hpbGQgb3IgYWRkIG5ldyBjaGlsZD9cblxuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdmFyIGJlZm9yZUNoaWxkSW5kZXggPSBjaGlsZHJlbi5pbmRleE9mKGJlZm9yZUNoaWxkKTtcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGJlZm9yZUNoaWxkSW5kZXgsIDAsIGNoaWxkKTtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tYW5hZ2VDaGlsZHJlbihcbiAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5fbmF0aXZlVGFnLCAvLyBjb250YWluZXJJRFxuICAgICAgICAgIFtpbmRleF0sIC8vIG1vdmVGcm9tSW5kaWNlc1xuICAgICAgICAgIFtiZWZvcmVDaGlsZEluZGV4XSwgLy8gbW92ZVRvSW5kaWNlc1xuICAgICAgICAgIFtdLCAvLyBhZGRDaGlsZFJlYWN0VGFnc1xuICAgICAgICAgIFtdLCAvLyBhZGRBdEluZGljZXNcbiAgICAgICAgICBbXSAvLyByZW1vdmVBdEluZGljZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfYmVmb3JlQ2hpbGRJbmRleCA9IGNoaWxkcmVuLmluZGV4T2YoYmVmb3JlQ2hpbGQpO1xuXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShfYmVmb3JlQ2hpbGRJbmRleCwgMCwgY2hpbGQpO1xuICAgICAgICB2YXIgY2hpbGRUYWcgPSB0eXBlb2YgY2hpbGQgPT09IFwibnVtYmVyXCIgPyBjaGlsZCA6IGNoaWxkLl9uYXRpdmVUYWc7XG4gICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIubWFuYWdlQ2hpbGRyZW4oXG4gICAgICAgICAgcGFyZW50SW5zdGFuY2UuX25hdGl2ZVRhZywgLy8gY29udGFpbmVySURcbiAgICAgICAgICBbXSwgLy8gbW92ZUZyb21JbmRpY2VzXG4gICAgICAgICAgW10sIC8vIG1vdmVUb0luZGljZXNcbiAgICAgICAgICBbY2hpbGRUYWddLCAvLyBhZGRDaGlsZFJlYWN0VGFnc1xuICAgICAgICAgIFtfYmVmb3JlQ2hpbGRJbmRleF0sIC8vIGFkZEF0SW5kaWNlc1xuICAgICAgICAgIFtdIC8vIHJlbW92ZUF0SW5kaWNlc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShwYXJlbnRJbnN0YW5jZSwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gICAgICAvLyBUT0RPIChidmF1Z2huKTogUmVtb3ZlIHRoaXMgY2hlY2sgd2hlbi4uLlxuICAgICAgLy8gV2UgY3JlYXRlIGEgd3JhcHBlciBvYmplY3QgZm9yIHRoZSBjb250YWluZXIgaW4gUmVhY3ROYXRpdmUgcmVuZGVyKClcbiAgICAgIC8vIE9yIHdlIHJlZmFjdG9yIHRvIHJlbW92ZSB3cmFwcGVyIG9iamVjdHMgZW50aXJlbHkuXG4gICAgICAvLyBGb3IgbW9yZSBpbmZvIG9uIHByb3MvY29ucyBzZWUgUFIgIzg1NjAgZGVzY3JpcHRpb24uXG4gICAgICBpZiAodHlwZW9mIHBhcmVudEluc3RhbmNlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnRhaW5lciBkb2VzIG5vdCBzdXBwb3J0IGluc2VydEJlZm9yZSBvcGVyYXRpb25cIik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICAgICAgcmVjdXJzaXZlbHlVbmNhY2hlRmliZXJOb2RlKGNoaWxkKTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudEluc3RhbmNlLl9jaGlsZHJlbjtcbiAgICAgIHZhciBpbmRleCA9IGNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuICAgICAgY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIubWFuYWdlQ2hpbGRyZW4oXG4gICAgICAgIHBhcmVudEluc3RhbmNlLl9uYXRpdmVUYWcsIC8vIGNvbnRhaW5lcklEXG4gICAgICAgIFtdLCAvLyBtb3ZlRnJvbUluZGljZXNcbiAgICAgICAgW10sIC8vIG1vdmVUb0luZGljZXNcbiAgICAgICAgW10sIC8vIGFkZENoaWxkUmVhY3RUYWdzXG4gICAgICAgIFtdLCAvLyBhZGRBdEluZGljZXNcbiAgICAgICAgW2luZGV4XSAvLyByZW1vdmVBdEluZGljZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgICAgIHJlY3Vyc2l2ZWx5VW5jYWNoZUZpYmVyTm9kZShjaGlsZCk7XG4gICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLm1hbmFnZUNoaWxkcmVuKFxuICAgICAgICBwYXJlbnRJbnN0YW5jZSwgLy8gY29udGFpbmVySURcbiAgICAgICAgW10sIC8vIG1vdmVGcm9tSW5kaWNlc1xuICAgICAgICBbXSwgLy8gbW92ZVRvSW5kaWNlc1xuICAgICAgICBbXSwgLy8gYWRkQ2hpbGRSZWFjdFRhZ3NcbiAgICAgICAgW10sIC8vIGFkZEF0SW5kaWNlc1xuICAgICAgICBbMF0gLy8gcmVtb3ZlQXRJbmRpY2VzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFRleHRDb250ZW50KGluc3RhbmNlKSB7XG4gICAgICAvLyBOb29wXG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAgICAgdmFyIHZpZXdDb25maWcgPSBpbnN0YW5jZS52aWV3Q29uZmlnO1xuICAgICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBjcmVhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpZXdDb25maWcudmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci51cGRhdGVWaWV3KFxuICAgICAgICBpbnN0YW5jZS5fbmF0aXZlVGFnLFxuICAgICAgICB2aWV3Q29uZmlnLnVpVmlld0NsYXNzTmFtZSxcbiAgICAgICAgdXBkYXRlUGF5bG9hZFxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgICAgIHZhciB2aWV3Q29uZmlnID0gaW5zdGFuY2Uudmlld0NvbmZpZztcbiAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZGlmZihcbiAgICAgICAgYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHN0eWxlOiBbXG4gICAgICAgICAgICBwcm9wcy5zdHlsZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgdmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXNcbiAgICAgICk7XG4gICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLnVwZGF0ZVZpZXcoXG4gICAgICAgIGluc3RhbmNlLl9uYXRpdmVUYWcsXG4gICAgICAgIHZpZXdDb25maWcudWlWaWV3Q2xhc3NOYW1lLFxuICAgICAgICB1cGRhdGVQYXlsb2FkXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgeWV0IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlbG9hZEluc3RhbmNlKHR5cGUsIHByb3BzKSB7XG4gICAgICAvLyBSZXR1cm4gdHJ1ZSB0byBpbmRpY2F0ZSBpdCdzIGFscmVhZHkgbG9hZGVkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FpdEZvckNvbW1pdFRvQmVSZWFkeSgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIG93bmVyRm4pIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIG93bmVyTmFtZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKG93bmVyRm4pIHtcbiAgICAgICAgICBvd25lck5hbWUgPSBvd25lckZuLmRpc3BsYXlOYW1lIHx8IG93bmVyRm4ubmFtZSB8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgUG9zc2libHlXZWFrTWFwJDEgPSB0eXBlb2YgV2Vha01hcCA9PT0gXCJmdW5jdGlvblwiID8gV2Vha01hcCA6IE1hcDtcbiAgICAgIG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJOYW1lKSB7XG4gICAgICB2YXIgc291cmNlSW5mbyA9IFwiXCI7XG5cbiAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgc291cmNlSW5mbyA9IFwiIChjcmVhdGVkIGJ5IFwiICsgb3duZXJOYW1lICsgXCIpXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcIlxcbiAgICBpbiBcIiArIChuYW1lIHx8IFwiVW5rbm93blwiKSArIHNvdXJjZUluZm87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGN0b3IsIG93bmVyRm4pIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShjdG9yLCBvd25lckZuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBvd25lckZuKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghZm4pIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lID0gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSB8fCBudWxsO1xuICAgICAgICB2YXIgb3duZXJOYW1lID0gbnVsbDtcblxuICAgICAgICBpZiAob3duZXJGbikge1xuICAgICAgICAgIG93bmVyTmFtZSA9IG93bmVyRm4uZGlzcGxheU5hbWUgfHwgb3duZXJGbi5uYW1lIHx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBvd25lck5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBvd25lckZuKSB7XG4gICAgICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLCBvd25lckZuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUsIG93bmVyRm4pO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIsIG93bmVyRm4pO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiLCBvd25lckZuKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIsIG93bmVyRm4pO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIG93bmVyRm4pO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6IHtcbiAgICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihcbiAgICAgICAgICAgICAgICBpbml0KHBheWxvYWQpLFxuICAgICAgICAgICAgICAgIG93bmVyRm5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4gICAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG4gICAgZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAge1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihcbiAgICAgICAgICAgIGVsZW1lbnQudHlwZSxcbiAgICAgICAgICAgIG93bmVyID8gb3duZXIudHlwZSA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1Byb3BUeXBlcyhcbiAgICAgIHR5cGVTcGVjcyxcbiAgICAgIHZhbHVlcyxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgIGVsZW1lbnRcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgICAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcblxuICAgICAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8IFwiUmVhY3QgY2xhc3NcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIjogXCIgK1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiArXG4gICAgICAgICAgICAgICAgICAgIFwiIHR5cGUgYFwiICtcbiAgICAgICAgICAgICAgICAgICAgdHlwZVNwZWNOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgXCJgIGlzIGludmFsaWQ7IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gK1xuICAgICAgICAgICAgICAgICAgICBcImAuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlRoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlcnIubmFtZSA9IFwiSW52YXJpYW50IFZpb2xhdGlvblwiO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXShcbiAgICAgICAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgdHlwZVNwZWNOYW1lLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBcIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlc1wiICtcbiAgICAgICAgICAgICAgICAgIFwiIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciBcIiArXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICBcInNoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS5cIixcbiAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lIHx8IFwiUmVhY3QgY2xhc3NcIixcbiAgICAgICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgICAgICB0eXBlU3BlY05hbWUsXG4gICAgICAgICAgICAgICAgdHlwZW9mIGVycm9yJDFcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgICAgICAgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgIGVycm9yKFwiRmFpbGVkICVzIHR5cGU6ICVzXCIsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB2YWx1ZVN0YWNrID0gW107XG4gICAgdmFyIGZpYmVyU3RhY2s7XG5cbiAgICB7XG4gICAgICBmaWJlclN0YWNrID0gW107XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gLTE7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKFwiVW5leHBlY3RlZCBwb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgICAgICBlcnJvcihcIlVuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICAgICAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaW5kZXgtLTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICAgICAge1xuICAgICAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICAgICAgfVxuXG4gICAgICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbiAgICB7XG4gICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgZW1wdHlDb250ZXh0T2JqZWN0ID0ge307XG5cbiAgICB7XG4gICAgICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG4gICAgfSAvLyBBIGN1cnNvciB0byB0aGUgY3VycmVudCBtZXJnZWQgY29udGV4dCBvYmplY3Qgb24gdGhlIHN0YWNrLlxuXG4gICAgdmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbiAgICB2YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbiAgICAvLyBXZSB1c2UgdGhpcyB0byBnZXQgYWNjZXNzIHRvIHRoZSBwYXJlbnQgY29udGV4dCBhZnRlciB3ZSBoYXZlIGFscmVhZHlcbiAgICAvLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICAgIGZ1bmN0aW9uIGdldFVubWFza2VkQ29udGV4dChcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIgJiYgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgICAgICAvLyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHB1c2hlZCBpdHMgb3duIGNoaWxkIGNvbnRleHQgb24gdGhlIHN0YWNrLiBBIGNvbnRleHRcbiAgICAgICAgICAvLyBwcm92aWRlciBzaG91bGQgbm90IFwic2VlXCIgaXRzIG93biBjaGlsZCBjb250ZXh0LiBUaGVyZWZvcmUgd2UgcmVhZCB0aGVcbiAgICAgICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgICAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIG1hc2tlZENvbnRleHQpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgICAgICAgLy8gVGhpcyBtYXkgdHJpZ2dlciBpbmZpbml0ZSBsb29wcyBpZiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGNhbGxzIHNldFN0YXRlLlxuXG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5zdGFuY2UgJiZcbiAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PVxuICAgICAgICAgICAgdW5tYXNrZWRDb250ZXh0XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIGNvbnRleHRUeXBlcykge1xuICAgICAgICAgIGNvbnRleHRba2V5XSA9IHVubWFza2VkQ29udGV4dFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJVbmtub3duXCI7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCBcImNvbnRleHRcIiwgbmFtZSk7XG4gICAgICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgICAgICAvLyBDb250ZXh0IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjbGFzcyBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHNvIGNoZWNrIGZvciBpbnN0YW5jZS5cblxuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgICAgIHJldHVybiBjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICAgICAge1xuICAgICAgICBpZiAoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIGNvbnRleHQsIGZpYmVyKTtcbiAgICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlczsgLy8gVE9ETyAoYnZhdWdobikgUmVwbGFjZSB0aGlzIGJlaGF2aW9yIHdpdGggYW4gaW52YXJpYW50KCkgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgLy8gSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCBpbiBGaWJlciB0byBtYXRjaCB0aGUgKHVuaW50ZW50aW9uYWwpIGJlaGF2aW9yIGluIFN0YWNrLlxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiO1xuXG4gICAgICAgICAgICBpZiAoIXdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpO1xuXG4gICAgICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiKSArXG4gICAgICAgICAgICAgICAgJy5nZXRDaGlsZENvbnRleHQoKToga2V5IFwiJyArXG4gICAgICAgICAgICAgICAgY29udGV4dEtleSArXG4gICAgICAgICAgICAgICAgJ1wiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJVbmtub3duXCI7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICBjaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgICAgIGNoaWxkQ29udGV4dCxcbiAgICAgICAgICAgIFwiY2hpbGQgY29udGV4dFwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBXZSBwdXNoIHRoZSBjb250ZXh0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBzdGFjayBpbnRlZ3JpdHkuXG4gICAgICAgIC8vIElmIHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIHdpbGwgcHVzaCBudWxsIGF0IGZpcnN0LFxuICAgICAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICAgICAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID1cbiAgICAgICAgICAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQpIHx8XG4gICAgICAgICAgZW1wdHlDb250ZXh0T2JqZWN0OyAvLyBSZW1lbWJlciB0aGUgcGFyZW50IGNvbnRleHQgc28gd2UgY2FuIG1lcmdlIHdpdGggaXQgbGF0ZXIuXG4gICAgICAgIC8vIEluaGVyaXQgdGhlIHBhcmVudCdzIGRpZC1wZXJmb3JtLXdvcmsgdmFsdWUgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBibG9ja2luZyB1cGRhdGVzLlxuXG4gICAgICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQ7XG4gICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHB1c2goXG4gICAgICAgICAgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvcixcbiAgICAgICAgICBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBoYXZlIGFuIGluc3RhbmNlIGJ5IHRoaXMgcG9pbnQuIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgICAgICAvLyBNZXJnZSBwYXJlbnQgYW5kIG93biBjb250ZXh0LlxuICAgICAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgICAgICB2YXIgbWVyZ2VkQ29udGV4dCA9IHByb2Nlc3NDaGlsZENvbnRleHQoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcmV2aW91c0NvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB1bndpbmQgdGhlIGNvbnRleHQgaW4gdGhlIHJldmVyc2Ugb3JkZXIuXG5cbiAgICAgICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgICAgICAvLyBtYWtlcyBzZW5zZSBlbHNld2hlcmVcbiAgICAgICAgaWYgKCFpc0ZpYmVyTW91bnRlZChmaWJlcikgfHwgZmliZXIudGFnICE9PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IG5vZGUudHlwZTtcblxuICAgICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFwiICtcbiAgICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBMZWdhY3lSb290ID0gMDtcbiAgICB2YXIgQ29uY3VycmVudFJvb3QgPSAxO1xuXG4gICAgLy8gV2UgdXNlIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHN0YXRlIG9iamVjdCBhcyBhbiBpbmRpY2F0b3IgdGhhdCB0aGUgY29tcG9uZW50XG4gICAgLy8gaXMgaGlkZGVuLlxuICAgIHZhciBPZmZzY3JlZW5WaXNpYmxlID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIDE7XG4gICAgdmFyIE9mZnNjcmVlbkRldGFjaGVkID1cbiAgICAgIC8qICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgMjtcbiAgICB2YXIgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQgPVxuICAgICAgLyogICAgICovXG4gICAgICA0O1xuICAgIGZ1bmN0aW9uIGlzT2Zmc2NyZWVuTWFudWFsKG9mZnNjcmVlbkZpYmVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBvZmZzY3JlZW5GaWJlci5tZW1vaXplZFByb3BzICE9PSBudWxsICYmXG4gICAgICAgIG9mZnNjcmVlbkZpYmVyLm1lbW9pemVkUHJvcHMubW9kZSA9PT0gXCJtYW51YWxcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIG9iamVjdElzID0gdHlwZW9mIE9iamVjdC5pcyA9PT0gXCJmdW5jdGlvblwiID8gT2JqZWN0LmlzIDogaXM7IC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cblxuICAgIC8vIFRoaXMgaXMgaW1wb3J0ZWQgYnkgdGhlIGV2ZW50IHJlcGxheWluZyBpbXBsZW1lbnRhdGlvbiBpbiBSZWFjdCBET00uIEl0J3NcbiAgICAvLyBpbiBhIHNlcGFyYXRlIGZpbGUgdG8gYnJlYWsgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFuZFxuICAgIC8vIHRoZSByZWNvbmNpbGVyLlxuICAgIGZ1bmN0aW9uIGlzUm9vdERlaHlkcmF0ZWQocm9vdCkge1xuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHJvb3QuY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZS5pc0RlaHlkcmF0ZWQ7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbiAgICB2YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG4gICAgdmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpOyAvLyBSZXByZXNlbnRzIHRoZSBuZWFyZXN0IGhvc3QgdHJhbnNpdGlvbiBwcm92aWRlciAoaW4gUmVhY3QgRE9NLCBhIDxmb3JtIC8+KVxuXG4gICAgZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGMgPT09IG51bGwpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgXCIgK1xuICAgICAgICAgICAgICBcImluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gICAgICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAgICAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICAgICAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gICAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgICAgIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7IC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgICAgIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gICAgICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAgICAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAgICAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbnVsbCwgZmliZXIpO1xuICAgICAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dCgpOyAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB0aHJvdywgcmVwbGFjZSBpdC5cblxuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gICAgICBpZiAoY29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgICAgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAgICAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gICAgICAgIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBuZXh0Q29udGV4dCwgZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gICAgICBpZiAoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZmliZXIpIHtcbiAgICAgICAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgICAgICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTsgLy8gVGhpcyBmbGFnIGFsbG93cyBmb3Igd2FybmluZyBzdXByZXNzaW9uIHdoZW4gd2UgZXhwZWN0IHRoZXJlIHRvIGJlIG1pc21hdGNoZXNcbiAgICAvLyBkdWUgdG8gZWFybGllciBtaXNtYXRjaGVzIG9yIGEgc3VzcGVuZGVkIGZpYmVyLlxuXG4gICAgdmFyIGRpZFN1c3BlbmRPckVycm9yREVWID0gZmFsc2U7IC8vIEh5ZHJhdGlvbiBlcnJvcnMgdGhhdCB3ZXJlIHRocm93biBpbnNpZGUgdGhpcyBib3VuZGFyeVxuXG4gICAgdmFyIGh5ZHJhdGlvbkVycm9ycyA9IG51bGw7XG4gICAgZnVuY3Rpb24gZGlkU3VzcGVuZE9yRXJyb3JXaGlsZUh5ZHJhdGluZ0RFVigpIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGRpZFN1c3BlbmRPckVycm9yREVWO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIGhvc3RDb250ZXh0KSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoKSB0byBuZXZlciBiZSBjYWxsZWQuIFwiICtcbiAgICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBcIiArXG4gICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RTdXNwZW5zZUluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBcIiArXG4gICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuICAgICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKSB7XG4gICAgICBpZiAoaHlkcmF0aW9uRXJyb3JzICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYSBmb3JjZWQgY2xpZW50IHJlbmRlci4gVGhlIGVycm9ycyB0aGF0IG9jY3VycmVkXG4gICAgICAgIC8vIGR1cmluZyB0aGUgaHlkcmF0aW9uIGF0dGVtcHQgYXJlIG5vdyByZWNvdmVyZWQuIFdlIHdpbGwgbG9nIHRoZW0gaW5cbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLCBvbmNlIHRoZSBlbnRpcmUgdHJlZSBoYXMgZmluaXNoZWQuXG4gICAgICAgIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoaHlkcmF0aW9uRXJyb3JzKTtcbiAgICAgICAgaHlkcmF0aW9uRXJyb3JzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJc0h5ZHJhdGluZygpIHtcbiAgICAgIHJldHVybiBpc0h5ZHJhdGluZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWV1ZUh5ZHJhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgICBpZiAoaHlkcmF0aW9uRXJyb3JzID09PSBudWxsKSB7XG4gICAgICAgIGh5ZHJhdGlvbkVycm9ycyA9IFtlcnJvcl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoeWRyYXRpb25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2Ugd2FpdCB1bnRpbCB0aGUgY3VycmVudCByZW5kZXIgaXMgb3ZlciAoZWl0aGVyIGZpbmlzaGVkIG9yIGludGVycnVwdGVkKVxuICAgIC8vIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGZpYmVyL2hvb2sgcXVldWUuIFB1c2ggdG8gdGhpcyBhcnJheSBzbyB3ZSBjYW5cbiAgICAvLyBhY2Nlc3MgdGhlIHF1ZXVlLCBmaWJlciwgdXBkYXRlLCBldCBhbCBsYXRlci5cblxuICAgIHZhciBjb25jdXJyZW50UXVldWVzID0gW107XG4gICAgdmFyIGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDA7XG4gICAgdmFyIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgZnVuY3Rpb24gZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpIHtcbiAgICAgIHZhciBlbmRJbmRleCA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleDtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDA7XG4gICAgICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA8IGVuZEluZGV4KSB7XG4gICAgICAgIHZhciBmaWJlciA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciBxdWV1ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICB2YXIgbGFuZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHF1ZXVlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICAgICAgICAgIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgICAgICAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgICAgICAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYW5lICE9PSBOb0xhbmUpIHtcbiAgICAgICAgICBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb25jdXJyZW50bHlVcGRhdGVkTGFuZXMoKSB7XG4gICAgICByZXR1cm4gY29uY3VycmVudGx5VXBkYXRlZExhbmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBgY2hpbGRMYW5lc2Agb24gdGhlIHJldHVybiBwYXRoIHlldC4gSWYgd2UgYWxyZWFkeSBpblxuICAgICAgLy8gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcsIHdhaXQgdW50aWwgYWZ0ZXIgaXQgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gZmliZXI7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IHF1ZXVlO1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSB1cGRhdGU7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IGxhbmU7XG4gICAgICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcywgbGFuZSk7IC8vIFRoZSBmaWJlcidzIGBsYW5lYCBmaWVsZCBpcyB1c2VkIGluIHNvbWUgcGxhY2VzIHRvIGNoZWNrIGlmIGFueSB3b3JrIGlzXG4gICAgICAvLyBzY2hlZHVsZWQsIHRvIHBlcmZvcm0gYW4gZWFnZXIgYmFpbG91dCwgc28gd2UgbmVlZCB0byB1cGRhdGUgaXQgaW1tZWRpYXRlbHkuXG4gICAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgbW92ZSB0aGlzIHRvIHRoZSBcInNoYXJlZFwiIHF1ZXVlIGluc3RlYWQuXG5cbiAgICAgIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgbGFuZSk7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIHZhciBjb25jdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgIHZhciBjb25jdXJyZW50VXBkYXRlID0gdXBkYXRlO1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBjb25jdXJyZW50UXVldWUsIGNvbmN1cnJlbnRVcGRhdGUsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGVBbmRFYWdlcmx5QmFpbG91dChcbiAgICAgIGZpYmVyLFxuICAgICAgcXVldWUsXG4gICAgICB1cGRhdGVcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBxdWV1ZSBhbiB1cGRhdGUgdGhhdCBkb2Vzbid0IG5lZWQgYSByZXJlbmRlci4gVGhlXG4gICAgICAvLyBvbmx5IHJlYXNvbiB3ZSBxdWV1ZSBpdCBpcyBpbiBjYXNlIHRoZXJlJ3MgYSBzdWJzZXF1ZW50IGhpZ2hlciBwcmlvcml0eVxuICAgICAgLy8gdXBkYXRlIHRoYXQgY2F1c2VzIGl0IHRvIGJlIHJlYmFzZWQuXG4gICAgICB2YXIgbGFuZSA9IE5vTGFuZTtcbiAgICAgIHZhciBjb25jdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgIHZhciBjb25jdXJyZW50VXBkYXRlID0gdXBkYXRlO1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBjb25jdXJyZW50UXVldWUsIGNvbmN1cnJlbnRVcGRhdGUsIGxhbmUpOyAvLyBVc3VhbGx5IHdlIGNhbiByZWx5IG9uIHRoZSB1cGNvbWluZyByZW5kZXIgcGhhc2UgdG8gcHJvY2VzcyB0aGUgY29uY3VycmVudFxuICAgICAgLy8gcXVldWUuIEhvd2V2ZXIsIHNpbmNlIHRoaXMgaXMgYSBiYWlsIG91dCwgd2UncmUgbm90IHNjaGVkdWxpbmcgYW55IHdvcmtcbiAgICAgIC8vIGhlcmUuIFNvIHRoZSB1cGRhdGUgd2UganVzdCBxdWV1ZWQgd2lsbCBsZWFrIHVudGlsIHNvbWV0aGluZyBlbHNlIGhhcHBlbnNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgKGlmIGV2ZXIpLlxuICAgICAgLy9cbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZyBhIHRyZWUsIGFuZCBpZiBub3QsXG4gICAgICAvLyBwcm9jZXNzIHRoZSBxdWV1ZSBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGEgbGVhay5cblxuICAgICAgdmFyIGlzQ29uY3VycmVudGx5UmVuZGVyaW5nID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkgIT09IG51bGw7XG5cbiAgICAgIGlmICghaXNDb25jdXJyZW50bHlSZW5kZXJpbmcpIHtcbiAgICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudENsYXNzVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICB2YXIgY29uY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICB2YXIgY29uY3VycmVudFVwZGF0ZSA9IHVwZGF0ZTtcbiAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgY29uY3VycmVudFF1ZXVlLCBjb25jdXJyZW50VXBkYXRlLCBsYW5lKTtcbiAgICAgIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKSB7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIG51bGwsIG51bGwsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH0gLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgYmUgZG9uZSBmb3IgYmFja3dhcmRzXG4gICAgLy8gY29tcGF0aWJpbGl0eSBhbmQgc2hvdWxkIGFsd2F5cyBiZSBhY2NvbXBhbmllZCBieSBhIHdhcm5pbmcuXG5cbiAgICBmdW5jdGlvbiB1bnNhZmVfbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIGxhbmUpIHtcbiAgICAgIC8vIE5PVEU6IEZvciBIeXJ1bSdzIExhdyByZWFzb25zLCBpZiBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCBpcyBkZXRlY3RlZCwgaXRcbiAgICAgIC8vIHNob3VsZCB0aHJvdyBiZWZvcmUgYG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290YCBpcyBjYWxsZWQuIEJ1dCB0aGlzIGlzXG4gICAgICAvLyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHdlIGNhbiBjaGFuZ2UgaXQgaWYgd2UgbmVlZCB0bzsgaXQganVzdCBzbyBoYXBwZW5zXG4gICAgICAvLyB0aGF0LCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIHRoZXJlJ3MgYW4gaW50ZXJuYWwgcHJvZHVjdCB0ZXN0IHRoYXRcbiAgICAgIC8vIGhhcHBlbnMgdG8gcmVseSBvbiB0aGlzLlxuICAgICAgdmFyIHJvb3QgPSBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKHNvdXJjZUZpYmVyKTtcbiAgICAgIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBudWxsLCBsYW5lKTtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgc291cmNlIGZpYmVyJ3MgbGFuZXNcbiAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgICAgIH0gLy8gV2FsayB0aGUgcGFyZW50IHBhdGggdG8gdGhlIHJvb3QgYW5kIHVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMuXG5cbiAgICAgIHZhciBpc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcbiAgICAgIHZhciBub2RlID0gc291cmNlRmliZXI7XG5cbiAgICAgIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICAgICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnQudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9mZnNjcmVlbiBib3VuZGFyeSBpcyBjdXJyZW50bHkgaGlkZGVuLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIGluc3RhbmNlIG1heSBiZSBudWxsIGlmIHRoZSBPZmZzY3JlZW4gcGFyZW50IHdhcyB1bm1vdW50ZWQuIFVzdWFsbHlcbiAgICAgICAgICAvLyB0aGUgcGFyZW50IHdvdWxkbid0IGJlIHJlYWNoYWJsZSBpbiB0aGF0IGNhc2UgYmVjYXVzZSB3ZSBkaXNjb25uZWN0XG4gICAgICAgICAgLy8gZmliZXJzIGZyb20gdGhlIHRyZWUgd2hlbiB0aGV5IGFyZSBkZWxldGVkLiBIb3dldmVyLCB0aGVyZSdzIGEgd2VpcmRcbiAgICAgICAgICAvLyBlZGdlIGNhc2Ugd2hlcmUgc2V0U3RhdGUgaXMgY2FsbGVkIG9uIGEgZmliZXIgdGhhdCB3YXMgaW50ZXJydXB0ZWRcbiAgICAgICAgICAvLyBiZWZvcmUgaXQgZXZlciBtb3VudGVkLiBCZWNhdXNlIGl0IG5ldmVyIG1vdW50cywgaXQgYWxzbyBuZXZlciBnZXRzXG4gICAgICAgICAgLy8gZGVsZXRlZC4gQmVjYXVzZSBpdCBuZXZlciBnZXRzIGRlbGV0ZWQsIGl0cyByZXR1cm4gcG9pbnRlciBuZXZlciBnZXRzXG4gICAgICAgICAgLy8gZGlzY29ubmVjdGVkLiBXaGljaCBtZWFucyBpdCBtYXkgYmUgYXR0YWNoZWQgdG8gYSBkZWxldGVkIE9mZnNjcmVlblxuICAgICAgICAgIC8vIHBhcmVudCBub2RlLiAoVGhpcyBkaXNjb3Zlcnkgc3VnZ2VzdHMgaXQgbWF5IGJlIGJldHRlciBmb3IgbWVtb3J5IHVzYWdlXG4gICAgICAgICAgLy8gaWYgd2UgZG9uJ3QgYXR0YWNoIHRoZSBgcmV0dXJuYCBwb2ludGVyIHVudGlsIHRoZSBjb21taXQgcGhhc2UsIHRob3VnaFxuICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGRvIHRoYXQgd2UnZCBuZWVkIHNvbWUgb3RoZXIgd2F5IHRvIHRyYWNrIHRoZSByZXR1cm5cbiAgICAgICAgICAvLyBwb2ludGVyIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIsIGxpa2Ugb24gdGhlIHN0YWNrLilcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgY2FzZSBpcyBhbHdheXMgYWNjb21wYW5pZWQgYnkgYSB3YXJuaW5nLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgICAgICAgIC8vIGFjY291bnQgZm9yIGl0LiAoVGhlcmUgbWF5IGJlIG90aGVyIGNhc2VzIHRoYXQgd2UgaGF2ZW4ndCBkaXNjb3ZlcmVkLFxuICAgICAgICAgIC8vIHRvby4pXG4gICAgICAgICAgdmFyIG9mZnNjcmVlbkluc3RhbmNlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9mZnNjcmVlbkluc3RhbmNlICE9PSBudWxsICYmXG4gICAgICAgICAgICAhKG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuVmlzaWJsZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNIaWRkZW4gJiYgdXBkYXRlICE9PSBudWxsICYmIG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICBtYXJrSGlkZGVuVXBkYXRlKHJvb3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihzb3VyY2VGaWJlcikge1xuICAgICAgLy8gVE9ETzogV2Ugd2lsbCBkZXRlY3QgYW5kIGluZmluaXRlIHVwZGF0ZSBsb29wIGFuZCB0aHJvdyBldmVuIGlmIHRoaXMgZmliZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHVubW91bnRlZC4gVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGJ1dCBpdCBoYXBwZW5zIHRvIGJlIHRoZVxuICAgICAgLy8gY3VycmVudCBiZWhhdmlvciB3ZSd2ZSB1c2VkIGZvciBzZXZlcmFsIHJlbGVhc2UgY3ljbGVzLiBDb25zaWRlciBub3RcbiAgICAgIC8vIHBlcmZvcm1pbmcgdGhpcyBjaGVjayBpZiB0aGUgdXBkYXRlZCBmaWJlciBhbHJlYWR5IHVubW91bnRlZCwgc2luY2UgaXQnc1xuICAgICAgLy8gbm90IHBvc3NpYmxlIGZvciB0aGF0IHRvIGNhdXNlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuICAgICAgdGhyb3dJZkluZmluaXRlVXBkYXRlTG9vcERldGVjdGVkKCk7IC8vIFdoZW4gYSBzZXRTdGF0ZSBoYXBwZW5zLCB3ZSBtdXN0IGVuc3VyZSB0aGUgcm9vdCBpcyBzY2hlZHVsZWQuIEJlY2F1c2VcbiAgICAgIC8vIHVwZGF0ZSBxdWV1ZXMgZG8gbm90IGhhdmUgYSBiYWNrcG9pbnRlciB0byB0aGUgcm9vdCwgdGhlIG9ubHkgd2F5IHRvIGRvXG4gICAgICAvLyB0aGlzIGN1cnJlbnRseSBpcyB0byB3YWxrIHVwIHRoZSByZXR1cm4gcGF0aC4gVGhpcyB1c2VkIHRvIG5vdCBiZSBhIGJpZ1xuICAgICAgLy8gZGVhbCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FsayB1cCB0aGUgcmV0dXJuIHBhdGggdG8gc2V0XG4gICAgICAvLyB0aGUgYGNoaWxkTGFuZXNgLCBhbnl3YXksIGJ1dCBub3cgdGhvc2UgdHdvIHRyYXZlcnNhbHMgaGFwcGVuIGF0XG4gICAgICAvLyBkaWZmZXJlbnQgdGltZXMuXG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBhZGRpbmcgYSBgcm9vdGAgYmFja3BvaW50ZXIgb24gdGhlIHVwZGF0ZSBxdWV1ZS5cblxuICAgICAgZGV0ZWN0VXBkYXRlT25Vbm1vdW50ZWRGaWJlcihzb3VyY2VGaWJlciwgc291cmNlRmliZXIpO1xuICAgICAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBkZXRlY3RVcGRhdGVPblVubW91bnRlZEZpYmVyKHNvdXJjZUZpYmVyLCBub2RlKTtcbiAgICAgICAgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgcGFyZW50ID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlLnRhZyA9PT0gSG9zdFJvb3QgPyBub2RlLnN0YXRlTm9kZSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGV0ZWN0VXBkYXRlT25Vbm1vdW50ZWRGaWJlcihzb3VyY2VGaWJlciwgcGFyZW50KSB7XG4gICAgICB7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBhbHRlcm5hdGUgPT09IG51bGwgJiZcbiAgICAgICAgICAocGFyZW50LmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzJDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUmVhY3RDdXJyZW50QWN0UXVldWUkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEFjdFF1ZXVlOyAvLyBBIGxpbmtlZCBsaXN0IG9mIGFsbCB0aGUgcm9vdHMgd2l0aCBwZW5kaW5nIHdvcmsuIEluIGFuIGlkaW9tYXRpYyBhcHAsXG4gICAgLy8gdGhlcmUncyBvbmx5IGEgc2luZ2xlIHJvb3QsIGJ1dCB3ZSBkbyBzdXBwb3J0IG11bHRpIHJvb3QgYXBwcywgaGVuY2UgdGhpc1xuICAgIC8vIGV4dHJhIGNvbXBsZXhpdHkuIEJ1dCB0aGlzIG1vZHVsZSBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBzaW5nbGUgcm9vdCBjYXNlLlxuXG4gICAgdmFyIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGw7XG4gICAgdmFyIGxhc3RTY2hlZHVsZWRSb290ID0gbnVsbDsgLy8gVXNlZCB0byBwcmV2ZW50IHJlZHVuZGFudCBtaXJjb3Rhc2tzIGZyb20gYmVpbmcgc2NoZWR1bGVkLlxuXG4gICAgdmFyIGRpZFNjaGVkdWxlTWljcm90YXNrID0gZmFsc2U7IC8vIGBhY3RgIFwibWljcm90YXNrc1wiIGFyZSBzY2hlZHVsZWQgb24gdGhlIGBhY3RgIHF1ZXVlIGluc3RlYWQgb2YgYW4gYWN0dWFsXG4gICAgLy8gbWljcm90YXNrLCBzbyB3ZSBoYXZlIHRvIGRlZHVwZSB0aG9zZSBzZXBhcmF0ZWx5LiBUaGlzIHdvdWxkbid0IGJlIGFuIGlzc3VlXG4gICAgLy8gaWYgd2UgcmVxdWlyZWQgYWxsIGBhY3RgIGNhbGxzIHRvIGJlIGF3YWl0ZWQsIHdoaWNoIHdlIG1pZ2h0IGluIHRoZSBmdXR1cmUuXG5cbiAgICB2YXIgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID0gZmFsc2U7IC8vIFVzZWQgdG8gcXVpY2tseSBiYWlsIG91dCBvZiBmbHVzaFN5bmMgaWYgdGhlcmUncyBubyBzeW5jIHdvcmsgdG8gZG8uXG5cbiAgICB2YXIgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gZmFsc2U7XG4gICAgdmFyIGlzRmx1c2hpbmdXb3JrID0gZmFsc2U7XG4gICAgdmFyIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gTm9MYW5lO1xuICAgIGZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIHJvb3QgcmVjZWl2ZXMgYW4gdXBkYXRlLiBJdCBkb2VzIHR3b1xuICAgICAgLy8gdGhpbmdzIDEpIGl0IGVuc3VyZXMgdGhlIHJvb3QgaXMgaW4gdGhlIHJvb3Qgc2NoZWR1bGUsIGFuZCAyKSBpdCBlbnN1cmVzXG4gICAgICAvLyB0aGVyZSdzIGEgcGVuZGluZyBtaWNyb3Rhc2sgdG8gcHJvY2VzcyB0aGUgcm9vdCBzY2hlZHVsZS5cbiAgICAgIC8vXG4gICAgICAvLyBNb3N0IG9mIHRoZSBhY3R1YWwgc2NoZWR1bGluZyBsb2dpYyBkb2VzIG5vdCBoYXBwZW4gdW50aWxcbiAgICAgIC8vIGBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrYCBydW5zLlxuICAgICAgLy8gQWRkIHRoZSByb290IHRvIHRoZSBzY2hlZHVsZVxuICAgICAgaWYgKHJvb3QgPT09IGxhc3RTY2hlZHVsZWRSb290IHx8IHJvb3QubmV4dCAhPT0gbnVsbCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGxhc3RTY2hlZHVsZWRSb290ID09PSBudWxsKSB7XG4gICAgICAgICAgZmlyc3RTY2hlZHVsZWRSb290ID0gbGFzdFNjaGVkdWxlZFJvb3QgPSByb290O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RTY2hlZHVsZWRSb290Lm5leHQgPSByb290O1xuICAgICAgICAgIGxhc3RTY2hlZHVsZWRSb290ID0gcm9vdDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbnkgdGltZSBhIHJvb3QgcmVjZWl2ZWQgYW4gdXBkYXRlLCB3ZSBzZXQgdGhpcyB0byB0cnVlIHVudGlsIHRoZSBuZXh0IHRpbWVcbiAgICAgIC8vIHdlIHByb2Nlc3MgdGhlIHNjaGVkdWxlLiBJZiBpdCdzIGZhbHNlLCB0aGVuIHdlIGNhbiBxdWlja2x5IGV4aXQgZmx1c2hTeW5jXG4gICAgICAvLyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIHNjaGVkdWxlLlxuXG4gICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSB0cnVlOyAvLyBBdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGV2ZW50LCBnbyB0aHJvdWdoIGVhY2ggb2YgdGhlIHJvb3RzIGFuZCBlbnN1cmVcbiAgICAgIC8vIHRoZXJlJ3MgYSB0YXNrIHNjaGVkdWxlZCBmb3IgZWFjaCBvbmUgYXQgdGhlIGNvcnJlY3QgcHJpb3JpdHkuXG5cbiAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgaW5zaWRlIGFuIGBhY3RgIHNjb3BlLlxuICAgICAgICBpZiAoIWRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCkge1xuICAgICAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9IHRydWU7XG4gICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZGlkU2NoZWR1bGVNaWNyb3Rhc2spIHtcbiAgICAgICAgICBkaWRTY2hlZHVsZU1pY3JvdGFzayA9IHRydWU7XG4gICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICAvLyBXaGlsZSB0aGlzIGZsYWcgaXMgZGlzYWJsZWQsIHdlIHNjaGVkdWxlIHRoZSByZW5kZXIgdGFzayBpbW1lZGlhdGVseVxuICAgICAgICAvLyBpbnN0ZWFkIG9mIHdhaXRpbmcgYSBtaWNyb3Rhc2suXG4gICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gbGFuZCBlbmFibGVEZWZlclJvb3RTY2hlZHVsaW5nVG9NaWNyb3Rhc2sgQVNBUCB0b1xuICAgICAgICAvLyB1bmJsb2NrIGFkZGl0aW9uYWwgZmVhdHVyZXMgd2UgaGF2ZSBwbGFubmVkLlxuICAgICAgICBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIG5vdyQxKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUkMy5pc0JhdGNoaW5nTGVnYWN5ICYmIHJvb3QudGFnID09PSBMZWdhY3lSb290KSB7XG4gICAgICAgIC8vIFNwZWNpYWwgYGFjdGAgY2FzZTogUmVjb3JkIHdoZW5ldmVyIGEgbGVnYWN5IHVwZGF0ZSBpcyBzY2hlZHVsZWQuXG4gICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDMuZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFN5bmNXb3JrT25BbGxSb290cygpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB0byBiZSBjYWxsZWQgc3luY2hyb25vdXNseSwgYnV0IHRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrXG4gICAgICAvLyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgZmlyc3QuXG4gICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChmYWxzZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoU3luY1dvcmtPbkxlZ2FjeVJvb3RzT25seSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB0byBiZSBjYWxsZWQgc3luY2hyb25vdXNseSwgYnV0IHRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrXG4gICAgICAvLyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgZmlyc3QuXG4gICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCh0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChvbmx5TGVnYWN5KSB7XG4gICAgICBpZiAoaXNGbHVzaGluZ1dvcmspIHtcbiAgICAgICAgLy8gUHJldmVudCByZWVudHJhbmN5LlxuICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIG92ZXJseSBkZWZlbnNpdmU/IFRoZSBjYWxsZXJzIG11c3QgY2hlY2sgdGhlIGV4ZWN1dGlvblxuICAgICAgICAvLyBjb250ZXh0IGZpcnN0IHJlZ2FyZGxlc3MuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFtaWdodEhhdmVQZW5kaW5nU3luY1dvcmspIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoLiBUaGVyZSdzIG5vIHN5bmMgd29yayB0byBkby5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGVyZSBtYXkgb3IgbWF5IG5vdCBiZSBzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxlZC4gTGV0J3MgY2hlY2suXG5cbiAgICAgIHZhciBkaWRQZXJmb3JtU29tZVdvcms7XG4gICAgICB2YXIgZXJyb3JzID0gbnVsbDtcbiAgICAgIGlzRmx1c2hpbmdXb3JrID0gdHJ1ZTtcblxuICAgICAgZG8ge1xuICAgICAgICBkaWRQZXJmb3JtU29tZVdvcmsgPSBmYWxzZTtcbiAgICAgICAgdmFyIHJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG5cbiAgICAgICAgd2hpbGUgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAob25seUxlZ2FjeSAmJiByb290LnRhZyAhPT0gTGVnYWN5Um9vdCk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG4gICAgICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPVxuICAgICAgICAgICAgICBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpO1xuICAgICAgICAgICAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290XG4gICAgICAgICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgIDogTm9MYW5lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGluY2x1ZGVzU3luY0xhbmUobmV4dExhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIHJvb3QgaGFzIHBlbmRpbmcgc3luYyB3b3JrLiBGbHVzaCBpdCBub3cuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGlkUGVyZm9ybVNvbWVXb3JrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCwgbmV4dExhbmVzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBDb2xsZWN0IGVycm9ycyBzbyB3ZSBjYW4gcmV0aHJvdyB0aGVtIGF0IHRoZSBlbmRcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcnMgPSBbZXJyb3JdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm9vdCA9IHJvb3QubmV4dDtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoZGlkUGVyZm9ybVNvbWVXb3JrKTtcblxuICAgICAgaXNGbHVzaGluZ1dvcmsgPSBmYWxzZTsgLy8gSWYgYW55IGVycm9ycyB3ZXJlIHRocm93biwgcmV0aHJvdyB0aGVtIHJpZ2h0IGJlZm9yZSBleGl0aW5nLlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgcmV0dXJuaW5nIHRoZXNlIHRvIHRoZSBjYWxsZXIsIHRvIGFsbG93IHRoZW0gdG8gZGVjaWRlXG4gICAgICAvLyBob3cvd2hlbiB0byByZXRocm93LlxuXG4gICAgICBpZiAoZXJyb3JzICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRocm93RXJyb3IuYmluZChudWxsLCBlcnJvcnNbaV0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZpcnN0RXJyb3IgPSBlcnJvcnNbMF07XG4gICAgICAgICAgICB0aHJvdyBmaXJzdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSBlcnJvcnNbMF07XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2soKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWxsZWQgaW5zaWRlIGEgbWljcm90YXNrLiBJdCBzaG91bGQgbmV2ZXIgYmVcbiAgICAgIC8vIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSBmYWxzZTtcblxuICAgICAge1xuICAgICAgICBkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QgPSBmYWxzZTtcbiAgICAgIH0gLy8gV2UnbGwgcmVjb21wdXRlIHRoaXMgYXMgd2UgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgcm9vdHMgYW5kIHNjaGVkdWxlIHRoZW0uXG5cbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9IGZhbHNlO1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gbm93JDEoKTtcbiAgICAgIHZhciBwcmV2ID0gbnVsbDtcbiAgICAgIHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290O1xuXG4gICAgICB3aGlsZSAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbmV4dCA9IHJvb3QubmV4dDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgIT09IE5vTGFuZSAmJlxuICAgICAgICAgIHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBBIHRyYW5zaXRpb24gd2FzIHNjaGVkdWxlZCBkdXJpbmcgYW4gZXZlbnQsIGJ1dCB3ZSdyZSBnb2luZyB0byB0cnkgdG9cbiAgICAgICAgICAvLyByZW5kZXIgaXQgc3luY2hyb25vdXNseSBhbnl3YXkuIFdlIGRvIHRoaXMgZHVyaW5nIGEgcG9wc3RhdGUgZXZlbnQgdG9cbiAgICAgICAgICAvLyBwcmVzZXJ2ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBwcmV2aW91cyBwYWdlLlxuICAgICAgICAgIHVwZ3JhZGVQZW5kaW5nTGFuZVRvU3luYyhyb290LCBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dExhbmVzID0gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gVGhpcyByb290IGhhcyBubyBtb3JlIHBlbmRpbmcgd29yay4gUmVtb3ZlIGl0IGZyb20gdGhlIHNjaGVkdWxlLiBUb1xuICAgICAgICAgIC8vIGd1YXJkIGFnYWluc3Qgc3VidGxlIHJlZW50cmFuY3kgYnVncywgdGhpcyBtaWNyb3Rhc2sgaXMgdGhlIG9ubHkgcGxhY2VcbiAgICAgICAgICAvLyB3ZSBkbyB0aGlzIOKAlCB5b3UgY2FuIGFkZCByb290cyB0byB0aGUgc2NoZWR1bGUgd2hlbmV2ZXIsIGJ1dCB5b3UgY2FuXG4gICAgICAgICAgLy8gb25seSByZW1vdmUgdGhlbSBoZXJlLlxuICAgICAgICAgIC8vIE51bGwgdGhpcyBvdXQgc28gd2Uga25vdyBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzY2hlZHVsZS5cbiAgICAgICAgICByb290Lm5leHQgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG5ldyBoZWFkIG9mIHRoZSBsaXN0XG4gICAgICAgICAgICBmaXJzdFNjaGVkdWxlZFJvb3QgPSBuZXh0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBuZXcgdGFpbCBvZiB0aGUgbGlzdFxuICAgICAgICAgICAgbGFzdFNjaGVkdWxlZFJvb3QgPSBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIHJvb3Qgc3RpbGwgaGFzIHdvcmsuIEtlZXAgaXQgaW4gdGhlIGxpc3QuXG4gICAgICAgICAgcHJldiA9IHJvb3Q7XG5cbiAgICAgICAgICBpZiAoaW5jbHVkZXNTeW5jTGFuZShuZXh0TGFuZXMpKSB7XG4gICAgICAgICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QgPSBuZXh0O1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IE5vTGFuZTsgLy8gQXQgdGhlIGVuZCBvZiB0aGUgbWljcm90YXNrLCBmbHVzaCBhbnkgcGVuZGluZyBzeW5jaHJvbm91cyB3b3JrLiBUaGlzIGhhc1xuICAgICAgLy8gdG8gY29tZSBhdCB0aGUgZW5kLCBiZWNhdXNlIGl0IGRvZXMgYWN0dWFsIHJlbmRlcmluZyB3b3JrIHRoYXQgbWlnaHQgdGhyb3cuXG5cbiAgICAgIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkIGluc2lkZSBhIG1pY3JvdGFzaywgb3IgYXQgdGhlIHZlcnkgZW5kIG9mIGFcbiAgICAgIC8vIHJlbmRlcmluZyB0YXNrIHJpZ2h0IGJlZm9yZSB3ZSB5aWVsZCB0byB0aGUgbWFpbiB0aHJlYWQuIEl0IHNob3VsZCBuZXZlciBiZVxuICAgICAgLy8gY2FsbGVkIHN5bmNocm9ub3VzbHkuXG4gICAgICAvL1xuICAgICAgLy8gVE9ETzogVW5sZXNzIGVuYWJsZURlZmVyUm9vdFNjaGVkdWxpbmdUb01pY3JvdGFzayBpcyBvZmYuIFdlIG5lZWQgdG8gbGFuZFxuICAgICAgLy8gdGhhdCBBU0FQIHRvIHVuYmxvY2sgYWRkaXRpb25hbCBmZWF0dXJlcyB3ZSBoYXZlIHBsYW5uZWQuXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIG5ldmVyIHBlcmZvcm1zIFJlYWN0IHdvcmsgc3luY2hyb25vdXNseTsgaXQgc2hvdWxkXG4gICAgICAvLyBvbmx5IHNjaGVkdWxlIHdvcmsgdG8gYmUgcGVyZm9ybWVkIGxhdGVyLCBpbiBhIHNlcGFyYXRlIHRhc2sgb3IgbWljcm90YXNrLlxuICAgICAgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgICAgIC8vIGV4cGlyZWQgc28gd2Uga25vdyB0byB3b3JrIG9uIHRob3NlIG5leHQuXG4gICAgICBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKTsgLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIGFuZCB0aGVpciBwcmlvcml0eS5cblxuICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMoKTtcbiAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lc1xuICAgICAgKTtcbiAgICAgIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uXG4gICAgICAgIG5leHRMYW5lcyA9PT0gTm9MYW5lcyB8fCAvLyBJZiB0aGlzIHJvb3QgaXMgY3VycmVudGx5IHN1c3BlbmRlZCBhbmQgd2FpdGluZyBmb3IgZGF0YSB0byByZXNvbHZlLCBkb24ndFxuICAgICAgICAvLyBzY2hlZHVsZSBhIHRhc2sgdG8gcmVuZGVyIGl0LiBXZSdsbCBlaXRoZXIgd2FpdCBmb3IgYSBwaW5nLCBvciB3YWl0IHRvXG4gICAgICAgIC8vIHJlY2VpdmUgYW4gdXBkYXRlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTdXNwZW5kZWQgcmVuZGVyIHBoYXNlXG4gICAgICAgIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgaXNXb3JrTG9vcFN1c3BlbmRlZE9uRGF0YSgpKSB8fCAvLyBTdXNwZW5kZWQgY29tbWl0IHBoYXNlXG4gICAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lO1xuICAgICAgICByZXR1cm4gTm9MYW5lO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjayBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudC5cblxuICAgICAgaWYgKGluY2x1ZGVzU3luY0xhbmUobmV4dExhbmVzKSkge1xuICAgICAgICAvLyBTeW5jaHJvbm91cyB3b3JrIGlzIGFsd2F5cyBmbHVzaGVkIGF0IHRoZSBlbmQgb2YgdGhlIG1pY3JvdGFzaywgc28gd2VcbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBzY2hlZHVsZSBhbiBhZGRpdGlvbmFsIHRhc2suXG4gICAgICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IFN5bmNMYW5lO1xuICAgICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBTeW5jTGFuZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIHVzZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBsYW5lIHRvIHJlcHJlc2VudCB0aGUgcHJpb3JpdHkgb2YgdGhlIGNhbGxiYWNrLlxuICAgICAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuICAgICAgICB2YXIgbmV3Q2FsbGJhY2tQcmlvcml0eSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobmV4dExhbmVzKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ICYmIC8vIFNwZWNpYWwgY2FzZSByZWxhdGVkIHRvIGBhY3RgLiBJZiB0aGUgY3VycmVudGx5IHNjaGVkdWxlZCB0YXNrIGlzIGFcbiAgICAgICAgICAvLyBTY2hlZHVsZXIgdGFzaywgcmF0aGVyIHRoYW4gYW4gYGFjdGAgdGFzaywgY2FuY2VsIGl0IGFuZCByZS1zY2hlZHVsZVxuICAgICAgICAgIC8vIG9uIHRoZSBgYWN0YCBxdWV1ZS5cbiAgICAgICAgICAhKFxuICAgICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMy5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgICAgICAgICBleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gZmFrZUFjdENhbGxiYWNrTm9kZSQxXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUaGUgcHJpb3JpdHkgaGFzbid0IGNoYW5nZWQuIFdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdGFzay5cbiAgICAgICAgICByZXR1cm4gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDYW5jZWwgdGhlIGV4aXN0aW5nIGNhbGxiYWNrLiBXZSdsbCBzY2hlZHVsZSBhIG5ldyBvbmUgYmVsb3cuXG4gICAgICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNjaGVkdWxlclByaW9yaXR5TGV2ZWw7XG5cbiAgICAgICAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShuZXh0TGFuZXMpKSB7XG4gICAgICAgICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgRGVmYXVsdEV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gSWRsZVByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayQxKFxuICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwsXG4gICAgICAgICAgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdClcbiAgICAgICAgKTtcbiAgICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBuZXdDYWxsYmFja05vZGU7XG4gICAgICAgIHJldHVybiBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbnRpbnVhdGlvbkZvclJvb3Qocm9vdCwgb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdGAgdG8gZGV0ZXJtaW5lXG4gICAgICAvLyBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY29udGludWF0aW9uIHRhc2suXG4gICAgICAvL1xuICAgICAgLy8gVXN1YWxseSBgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFza2Agb25seSBydW5zIGluc2lkZSBhIG1pY3JvdGFzaztcbiAgICAgIC8vIGhvd2V2ZXIsIHNpbmNlIG1vc3Qgb2YgdGhlIGxvZ2ljIGZvciBkZXRlcm1pbmluZyBpZiB3ZSBuZWVkIGEgY29udGludWF0aW9uXG4gICAgICAvLyB2ZXJzdXMgYSBuZXcgdGFzayBpcyB0aGUgc2FtZSwgd2UgY2hlYXQgYSBiaXQgYW5kIGNhbGwgaXQgaGVyZS4gVGhpcyBpc1xuICAgICAgLy8gb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ugd2Uga25vdyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBicm93c2VyIHRhc2suXG4gICAgICAvLyBTbyBhbHRob3VnaCBpdCdzIG5vdCBhbiBhY3R1YWwgbWljcm90YXNrLCBpdCBtaWdodCBhcyB3ZWxsIGJlLlxuICAgICAgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBub3ckMSgpKTtcblxuICAgICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgICAvLyBUaGUgdGFzayBub2RlIHNjaGVkdWxlZCBmb3IgdGhpcyByb290IGlzIHRoZSBzYW1lIG9uZSB0aGF0J3NcbiAgICAgICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICAgICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGZha2VBY3RDYWxsYmFja05vZGUkMSA9IHt9O1xuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayQxKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUkMy5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogV2UncmUgaW5zaWRlIGFuIGBhY3RgIHNjb3BlIChhIHRlc3RpbmcgdXRpbGl0eSkuXG4gICAgICAgIC8vIEluc3RlYWQgb2Ygc2NoZWR1bGluZyB3b3JrIGluIHRoZSBob3N0IGVudmlyb25tZW50LCBhZGQgaXQgdG8gYVxuICAgICAgICAvLyBmYWtlIGludGVybmFsIHF1ZXVlIHRoYXQncyBtYW5hZ2VkIGJ5IHRoZSBgYWN0YCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMy5jdXJyZW50LnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gZmFrZUFjdENhbGxiYWNrTm9kZSQxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2skMihwcmlvcml0eUxldmVsLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gICAgICBpZiAoY2FsbGJhY2tOb2RlID09PSBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEpO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbENhbGxiYWNrJDEoY2FsbGJhY2tOb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUltbWVkaWF0ZVRhc2soY2IpIHtcbiAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBJbnNpZGUgYW4gYGFjdGAgc2NvcGUsIHdlIHB1c2ggbWljcm90YXNrcyB0byB0aGUgZmFrZSBgYWN0YFxuICAgICAgICAvLyBjYWxsYmFjayBxdWV1ZS4gVGhpcyBpcyBiZWNhdXNlIHdlIGN1cnJlbnRseSBzdXBwb3J0IGNhbGxpbmcgYGFjdGBcbiAgICAgICAgLy8gd2l0aG91dCBhd2FpdGluZyB0aGUgcmVzdWx0LiBUaGUgcGxhbiBpcyB0byBkZXByZWNhdGUgdGhhdCwgYW5kIHJlcXVpcmVcbiAgICAgICAgLy8gdGhhdCB5b3UgYWx3YXlzIGF3YWl0IHRoZSByZXN1bHQgc28gdGhhdCB0aGUgbWljcm90YXNrcyBoYXZlIGEgY2hhbmNlIHRvXG4gICAgICAgIC8vIHJ1bi4gQnV0IGl0IGhhc24ndCBoYXBwZW5lZCB5ZXQuXG4gICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDMuY3VycmVudC5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYigpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gVE9ETzogQ2FuIHdlIGxhbmQgc3VwcG9ydHNNaWNyb3Rhc2tzPyBXaGljaCBlbnZpcm9ubWVudHMgZG9uJ3Qgc3VwcG9ydCBpdD9cbiAgICAgIC8vIEFsdGVybmF0aXZlbHksIGNhbiB3ZSBtb3ZlIHRoaXMgY2hlY2sgdG8gdGhlIGhvc3QgY29uZmlnP1xuXG4gICAgICB7XG4gICAgICAgIC8vIElmIG1pY3JvdGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQsIHVzZSBTY2hlZHVsZXIuXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMihJbW1lZGlhdGVQcmlvcml0eSwgY2IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSggLy8gVGhpcyBhcmd1bWVudCBpc24ndCB1c2VkLCBpdCdzIG9ubHkgaGVyZSB0byBlbmNvdXJhZ2UgdGhlIGNhbGxlciB0b1xuICAgICAgLy8gY2hlY2sgdGhhdCBpdCdzIGluc2lkZSBhIHRyYW5zaXRpb24gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBub24tbnVsbGFibGUuIFJlcXVpcmVzIGEgdHdlYWsgdG8gdXNlT3B0aW1pc3RpYy5cbiAgICAgIHRyYW5zaXRpb25cbiAgICApIHtcbiAgICAgIC8vIFRoZSBhbGdvcml0aG0gZm9yIGFzc2lnbmluZyBhbiB1cGRhdGUgdG8gYSBsYW5lIHNob3VsZCBiZSBzdGFibGUgZm9yIGFsbFxuICAgICAgLy8gdXBkYXRlcyBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoaW4gdGhlIHNhbWUgZXZlbnQuIFRvIGRvIHRoaXMsIHRoZVxuICAgICAgLy8gaW5wdXRzIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgdHJpY2sgd2UgdXNlIGlzIHRvIGNhY2hlIHRoZSBmaXJzdCBvZiBlYWNoIG9mIHRoZXNlIGlucHV0cyB3aXRoaW4gYW5cbiAgICAgIC8vIGV2ZW50LiBUaGVuIHJlc2V0IHRoZSBjYWNoZWQgdmFsdWVzIG9uY2Ugd2UgY2FuIGJlIHN1cmUgdGhlIGV2ZW50IGlzXG4gICAgICAvLyBvdmVyLiBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gICAgICBpZiAoY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAvLyBBbGwgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBzYW1lIGV2ZW50IGFyZSBhc3NpZ25lZCB0aGUgc2FtZSBsYW5lLlxuICAgICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEVudGFuZ2xlZExhbmUgPSBOb0xhbmU7IC8vIEEgdGhlbmFibGUgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbnRhbmdsZWQgc2NvcGUgY29tcGxldGVzLiBJdCBkb2VzIG5vdFxuICAgIC8vIHJlc29sdmUgdG8gYSBwYXJ0aWN1bGFyIHZhbHVlIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgZm9yIHN1c3BlbmRpbmcgdGhlIFVJXG4gICAgLy8gdW50aWwgdGhlIGFzeW5jIGFjdGlvbiBzY29wZSBoYXMgY29tcGxldGVkLlxuXG4gICAgdmFyIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBjaGFpblRoZW5hYmxlVmFsdWUodGhlbmFibGUsIHJlc3VsdCkge1xuICAgICAgLy8gRXF1aXZhbGVudCB0bzogUHJvbWlzZS5yZXNvbHZlKHRoZW5hYmxlKS50aGVuKCgpID0+IHJlc3VsdCksIGV4Y2VwdCB3ZSBjYW5cbiAgICAgIC8vIGNoZWF0IGEgYml0IHNpbmNlIHdlIGtub3cgdGhhdCB0aGF0IHRoaXMgdGhlbmFibGUgaXMgb25seSBldmVyIGNvbnN1bWVkXG4gICAgICAvLyBieSBSZWFjdC5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBkb24ndCB0ZWNobmljYWxseSByZXF1aXJlIHByb21pc2Ugc3VwcG9ydCBvbiB0aGUgY2xpZW50IHlldCwgaGVuY2UgdGhpc1xuICAgICAgLy8gZXh0cmEgY29kZS5cbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgIHZhciB0aGVuYWJsZVdpdGhPdmVycmlkZSA9IHtcbiAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHJlYXNvbjogbnVsbCxcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciBmdWxmaWxsZWRUaGVuYWJsZSA9IHRoZW5hYmxlV2l0aE92ZXJyaWRlO1xuICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUudmFsdWUgPSByZXN1bHQ7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgICAgICAgbGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGVXaXRoT3ZlcnJpZGU7XG4gICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb24gPSBlcnJvcjtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07IC8vIFRoaXMgaXMgYSBwZXJmIGhhY2sgd2hlcmUgd2UgY2FsbCB0aGUgYG9uRnVsZmlsbGAgcGluZyBmdW5jdGlvblxuICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBgb25SZWplY3RgLCBiZWNhdXNlIHdlIGtub3cgdGhhdCBSZWFjdCBpcyB0aGUgb25seVxuICAgICAgICAgICAgLy8gY29uc3VtZXIgb2YgdGhlc2UgcHJvbWlzZXMsIGFuZCBpdCBwYXNzZXMgdGhlIHNhbWUgbGlzdGVuZXIgdG8gYm90aC5cbiAgICAgICAgICAgIC8vIFdlIGFsc28ga25vdyB0aGF0IGl0IHdpbGwgcmVhZCB0aGUgZXJyb3IgZGlyZWN0bHkgb2ZmIHRoZVxuICAgICAgICAgICAgLy8gYC5yZWFzb25gIGZpZWxkLlxuXG4gICAgICAgICAgICBsaXN0ZW5lcih1bmRlZmluZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZVdpdGhPdmVycmlkZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVla0VudGFuZ2xlZEFjdGlvbkxhbmUoKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVudGFuZ2xlZExhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZWtFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGU7XG4gICAgfVxuXG4gICAgdmFyIFVwZGF0ZVN0YXRlID0gMDtcbiAgICB2YXIgUmVwbGFjZVN0YXRlID0gMTtcbiAgICB2YXIgRm9yY2VVcGRhdGUgPSAyO1xuICAgIHZhciBDYXB0dXJlVXBkYXRlID0gMzsgLy8gR2xvYmFsIHN0YXRlIHRoYXQgaXMgcmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLlxuICAgIC8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4gICAgLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG4gICAgdmFyIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG4gICAgdmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGU7XG4gICAgdmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gICAgICB2YXIgcXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICAgICAgc2hhcmVkOiB7XG4gICAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgICBoaWRkZW5DYWxsYmFja3M6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgICB9O1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICAgIGNhbGxiYWNrczogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVVcGRhdGUobGFuZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgICAgbGFuZTogbGFuZSxcbiAgICAgICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICAgICAgcGF5bG9hZDogbnVsbCxcbiAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcblxuICAgICAge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBzaGFyZWRRdWV1ZSAmJlxuICAgICAgICAgICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcik7XG5cbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQW4gdXBkYXRlIChzZXRTdGF0ZSwgcmVwbGFjZVN0YXRlLCBvciBmb3JjZVVwZGF0ZSkgd2FzIHNjaGVkdWxlZCBcIiArXG4gICAgICAgICAgICAgIFwiZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCBcIiArXG4gICAgICAgICAgICAgIFwid2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgXCIgK1xuICAgICAgICAgICAgICBcImNhbGxiYWNrLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnQ6ICVzXCIsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUoKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIHVuc2FmZSByZW5kZXIgcGhhc2UgdXBkYXRlLiBBZGQgZGlyZWN0bHkgdG8gdGhlIHVwZGF0ZVxuICAgICAgICAvLyBxdWV1ZSBzbyB3ZSBjYW4gcHJvY2VzcyBpdCBpbW1lZGlhdGVseSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLlxuICAgICAgICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgICAgICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgICAgICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTsgLy8gVXBkYXRlIHRoZSBjaGlsZExhbmVzIGV2ZW4gdGhvdWdoIHdlJ3JlIG1vc3QgbGlrZWx5IGFscmVhZHkgcmVuZGVyaW5nXG4gICAgICAgIC8vIHRoaXMgZmliZXIuIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIHRoZSBjYXNlIHdoZXJlIHlvdVxuICAgICAgICAvLyB1cGRhdGUgYSBkaWZmZXJlbnQgY29tcG9uZW50IGR1cmluZyByZW5kZXIgcGhhc2UgdGhhbiB0aGUgb25lIHRoYXQgaXNcbiAgICAgICAgLy8gY3VycmVudGx5IHJlbmRlcmluZ3MgKGEgcGF0dGVybiB0aGF0IGlzIGFjY29tcGFuaWVkIGJ5IGEgd2FybmluZykuXG5cbiAgICAgICAgcmV0dXJuIHVuc2FmZV9tYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5xdWV1ZUNvbmN1cnJlbnRDbGFzc1VwZGF0ZShmaWJlciwgc2hhcmVkUXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG5cbiAgICAgIGlmIChpc1RyYW5zaXRpb25MYW5lKGxhbmUpKSB7XG4gICAgICAgIHZhciBxdWV1ZUxhbmVzID0gc2hhcmVkUXVldWUubGFuZXM7IC8vIElmIGFueSBlbnRhbmdsZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBwZW5kaW5nIG9uIHRoZSByb290LCB0aGVuIHRoZXkgbXVzdFxuICAgICAgICAvLyBoYXZlIGZpbmlzaGVkLiBXZSBjYW4gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc2hhcmVkIHF1ZXVlLCB3aGljaCByZXByZXNlbnRzXG4gICAgICAgIC8vIGEgc3VwZXJzZXQgb2YgdGhlIGFjdHVhbGx5IHBlbmRpbmcgbGFuZXMuIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVudGFuZ2xlXG4gICAgICAgIC8vIG1vcmUgdGhhbiB3ZSBuZWVkIHRvLCBidXQgdGhhdCdzIE9LLiBJbiBmYWN0IGl0J3Mgd29yc2UgaWYgd2UgKmRvbid0KlxuICAgICAgICAvLyBlbnRhbmdsZSB3aGVuIHdlIHNob3VsZC5cblxuICAgICAgICBxdWV1ZUxhbmVzID0gaW50ZXJzZWN0TGFuZXMocXVldWVMYW5lcywgcm9vdC5wZW5kaW5nTGFuZXMpOyAvLyBFbnRhbmdsZSB0aGUgbmV3IHRyYW5zaXRpb24gbGFuZSB3aXRoIHRoZSBvdGhlciB0cmFuc2l0aW9uIGxhbmVzLlxuXG4gICAgICAgIHZhciBuZXdRdWV1ZUxhbmVzID0gbWVyZ2VMYW5lcyhxdWV1ZUxhbmVzLCBsYW5lKTtcbiAgICAgICAgc2hhcmVkUXVldWUubGFuZXMgPSBuZXdRdWV1ZUxhbmVzOyAvLyBFdmVuIGlmIHF1ZXVlLmxhbmVzIGFscmVhZHkgaW5jbHVkZSBsYW5lLCB3ZSBkb24ndCBrbm93IGZvciBjZXJ0YWluIGlmXG4gICAgICAgIC8vIHRoZSBsYW5lIGZpbmlzaGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgZW50YW5nbGVkIGl0LiBTbyB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIGVudGFuZ2xlIGl0IGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuXG5cbiAgICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbmV3UXVldWVMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgICAgIC8vIENhcHR1cmVkIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCBhcmUgdGhyb3duIGJ5IGEgY2hpbGQgZHVyaW5nIHRoZSByZW5kZXJcbiAgICAgIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gICAgICAvLyB3ZSBzaG91bGQgb25seSBwdXQgdGhlbSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSwgbm90IHRoZSBjdXJyZW50IG9uZS5cbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBDaGVjayBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBhIGNsb25lLlxuXG4gICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyB0aGUgc2FtZSBhcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlblxuICAgICAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIGEgcGFyZW50IGZpYmVyIHRoYXQgdGhlbiBjYXB0dXJlcyBhbiBlcnJvciB0aHJvd24gYnlcbiAgICAgICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgICAgICAvLyAtcHJvZ3Jlc3MgcXVldWUsIHdlIG5lZWQgdG8gY2xvbmUgdGhlIHVwZGF0ZXMuIFdlIHVzdWFsbHkgY2xvbmUgZHVyaW5nXG4gICAgICAgICAgLy8gcHJvY2Vzc1VwZGF0ZVF1ZXVlLCBidXQgdGhhdCBkaWRuJ3QgaGFwcGVuIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgICAgIHZhciBuZXdGaXJzdCA9IG51bGw7XG4gICAgICAgICAgdmFyIG5ld0xhc3QgPSBudWxsO1xuICAgICAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVwZGF0ZXMgYW5kIGNsb25lIHRoZW0uXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIHVwZGF0ZSBpcyByZWJhc2VkLCB3ZSBzaG91bGQgbm90IGZpcmUgaXRzXG4gICAgICAgICAgICAgICAgLy8gY2FsbGJhY2sgYWdhaW4uXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgICAgICAgICAgbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cbiAgICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHF1ZXVlID0ge1xuICAgICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICAgICAgY2FsbGJhY2tzOiBjdXJyZW50UXVldWUuY2FsbGJhY2tzXG4gICAgICAgICAgfTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gICAgICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcXVldWUsXG4gICAgICB1cGRhdGUsXG4gICAgICBwcmV2U3RhdGUsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgICAgIGNhc2UgUmVwbGFjZVN0YXRlOiB7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcblxuICAgICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDYXB0dXJlVXBkYXRlOiB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPVxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUpIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgVXBkYXRlU3RhdGU6IHtcbiAgICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBQYXJ0aWFsIHN0YXRlIG9iamVjdFxuICAgICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICAgICAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG4gICAgICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBGb3JjZVVwZGF0ZToge1xuICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSBmYWxzZTsgLy8gRWFjaCBjYWxsIHRvIHByb2Nlc3NVcGRhdGVRdWV1ZSBzaG91bGQgYmUgYWNjb21wYW5pZWQgYnkgYSBjYWxsIHRvIHRoaXMuIEl0J3NcbiAgICAvLyBvbmx5IGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSBpbiB1cGRhdGVIb3N0Um9vdCwgaXQgbXVzdCBoYXBwZW4gYWZ0ZXJcbiAgICAvLyBhbGwgdGhlIGNvbnRleHQgc3RhY2tzIGhhdmUgYmVlbiBwdXNoZWQgdG8sIHRvIHByZXZlbnQgYSBzdGFjayBtaXNtYXRjaC4gQVxuICAgIC8vIGJpdCB1bmZvcnR1bmF0ZS5cblxuICAgIGZ1bmN0aW9uIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSBpcyBwYXJ0IG9mIGEgcGVuZGluZyBhc3luYyBhY3Rpb24uIElmIHNvLCB3ZSdsbFxuICAgICAgLy8gbmVlZCB0byBzdXNwZW5kIHVudGlsIHRoZSBhY3Rpb24gaGFzIGZpbmlzaGVkLCBzbyB0aGF0IGl0J3MgYmF0Y2hlZFxuICAgICAgLy8gdG9nZXRoZXIgd2l0aCBmdXR1cmUgdXBkYXRlcyBpbiB0aGUgc2FtZSBhY3Rpb24uXG4gICAgICAvLyBUT0RPOiBPbmNlIHdlIHN1cHBvcnQgaG9va3MgaW5zaWRlIHVzZU1lbW8gKG9yIGFuIGVxdWl2YWxlbnRcbiAgICAgIC8vIG1lbW9pemF0aW9uIGJvdW5kYXJ5IGxpa2UgRm9yZ2V0KSwgaG9pc3QgdGhpcyBsb2dpYyBzbyB0aGF0IGl0IG9ubHlcbiAgICAgIC8vIHN1c3BlbmRzIGlmIHRoZSBtZW1vIGJvdW5kYXJ5IHByb2R1Y2VzIGEgbmV3IHZhbHVlLlxuICAgICAgaWYgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24pIHtcbiAgICAgICAgdmFyIGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gcGVla0VudGFuZ2xlZEFjdGlvblRoZW5hYmxlKCk7XG5cbiAgICAgICAgaWYgKGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogSW5zdGVhZCBvZiB0aGUgdGhyb3dpbmcgdGhlIHRoZW5hYmxlIGRpcmVjdGx5LCB0aHJvdyBhXG4gICAgICAgICAgLy8gc3BlY2lhbCBvYmplY3QgbGlrZSBgdXNlYCBkb2VzIHNvIHdlIGNhbiBkZXRlY3QgaWYgaXQncyBjYXB0dXJlZFxuICAgICAgICAgIC8vIGJ5IHVzZXJzcGFjZS5cbiAgICAgICAgICB0aHJvdyBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSBmYWxzZTsgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuXG4gICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIHtcbiAgICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuICAgICAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICAgICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgICAgIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHVwZGF0ZXMgdG8gdGhhdCBxdWV1ZSwgdG9vLiBCZWNhdXNlIHRoZSBiYXNlXG4gICAgICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAgICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAgICAgLy8gVE9ETzogUGFzcyBgY3VycmVudGAgYXMgYXJndW1lbnRcblxuICAgICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgICAgICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSAhPT0gbGFzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhlc2UgdmFsdWVzIG1heSBjaGFuZ2UgYXMgd2UgcHJvY2VzcyB0aGUgcXVldWUuXG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHVwZGF0ZXMgdG8gY29tcHV0ZSB0aGUgcmVzdWx0LlxuICAgICAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgICAgIHZhciBuZXdMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgICAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICAgICAgdmFyIG5ld0xhc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gQW4gZXh0cmEgT2Zmc2NyZWVuTGFuZSBiaXQgaXMgYWRkZWQgdG8gdXBkYXRlcyB0aGF0IHdlcmUgbWFkZSB0b1xuICAgICAgICAgIC8vIGEgaGlkZGVuIHRyZWUsIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB1cGRhdGVzIHRoYXQgd2VyZVxuICAgICAgICAgIC8vIGFscmVhZHkgdGhlcmUgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLlxuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gcmVtb3ZlTGFuZXModXBkYXRlLmxhbmUsIE9mZnNjcmVlbkxhbmUpO1xuICAgICAgICAgIHZhciBpc0hpZGRlblVwZGF0ZSA9IHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lOyAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSB3YXMgbWFkZSB3aGlsZSB0aGUgdHJlZSB3YXMgaGlkZGVuLiBJZiBzbywgdGhlblxuICAgICAgICAgIC8vIGl0J3Mgbm90IGEgXCJiYXNlXCIgdXBkYXRlIGFuZCB3ZSBzaG91bGQgZGlzcmVnYXJkIHRoZSBleHRyYSBiYXNlIGxhbmVzXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlIGFkZGVkIHRvIHJlbmRlckxhbmVzIHdoZW4gd2UgZW50ZXJlZCB0aGUgT2Zmc2NyZWVuIHRyZWUuXG5cbiAgICAgICAgICB2YXIgc2hvdWxkU2tpcFVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICA/ICFpc1N1YnNldE9mTGFuZXMoZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMoKSwgdXBkYXRlTGFuZSlcbiAgICAgICAgICAgIDogIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkU2tpcFVwZGF0ZSkge1xuICAgICAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG5cbiAgICAgICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyB1cGRhdGUgaXMgcGFydCBvZiBhIHBlbmRpbmcgYXN5bmMgYWN0aW9uLiBJZiBzbyxcbiAgICAgICAgICAgIC8vIHdlJ2xsIG5lZWQgdG8gc3VzcGVuZCB1bnRpbCB0aGUgYWN0aW9uIGhhcyBmaW5pc2hlZCwgc28gdGhhdCBpdCdzXG4gICAgICAgICAgICAvLyBiYXRjaGVkIHRvZ2V0aGVyIHdpdGggZnV0dXJlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgYWN0aW9uLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB1cGRhdGVMYW5lICE9PSBOb0xhbmUgJiZcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gcGVla0VudGFuZ2xlZEFjdGlvbkxhbmUoKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgdXBkYXRlIGlzIHJlYmFzZWQsIHdlIHNob3VsZCBub3QgZmlyZSBpdHNcbiAgICAgICAgICAgICAgICAvLyBjYWxsYmFjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuICAgICAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG5cbiAgICAgICAgICAgICAgaWYgKGlzSGlkZGVuVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBxdWV1ZS5jYWxsYmFja3M7XG5cbiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLmNhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSB3ZSBiYWlsIG91dCB3aGVuIHdlIGdldCBhIG51bGxcblxuICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgICAgIC8vIHBlbmRpbmcgdXBkYXRlcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCBrZWVwIHByb2Nlc3NpbmcuXG4gICAgICAgICAgICAgIHZhciBfbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7IC8vIEludGVudGlvbmFsbHkgdW5zb3VuZC4gUGVuZGluZyB1cGRhdGVzIGZvcm0gYSBjaXJjdWxhciBsaXN0LCBidXQgd2VcbiAgICAgICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICAgICAgdmFyIF9maXJzdFBlbmRpbmdVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgICAgICAgX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IG5ld0ZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gYHF1ZXVlLmxhbmVzYCBpcyB1c2VkIGZvciBlbnRhbmdsaW5nIHRyYW5zaXRpb25zLiBXZSBjYW4gc2V0IGl0IGJhY2sgdG9cbiAgICAgICAgICAvLyB6ZXJvIG9uY2UgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIH0gLy8gU2V0IHRoZSByZW1haW5pbmcgZXhwaXJhdGlvbiB0aW1lIHRvIGJlIHdoYXRldmVyIGlzIHJlbWFpbmluZyBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgICAgICAvLyBleHBpcmF0aW9uIHRpbWUgYXJlIHByb3BzIGFuZCBjb250ZXh0LiBXZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgdGhlXG4gICAgICAgIC8vIGJlZ2luIHBoYXNlIGJ5IHRoZSB0aW1lIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHF1ZXVlLCBzbyB3ZSd2ZSBhbHJlYWR5XG4gICAgICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB0cmlja3k7IGJ1dCB3ZSdsbCBoYXZlIHRvIGFjY291bnQgZm9yXG4gICAgICAgIC8vIHRoYXQgcmVnYXJkbGVzcy5cblxuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBuZXdMYW5lcztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgXCIgK1xuICAgICAgICAgICAgKFwicmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2spXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gICAgICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkge1xuICAgICAgcmV0dXJuIGhhc0ZvcmNlVXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZlckhpZGRlbkNhbGxiYWNrcyh1cGRhdGVRdWV1ZSkge1xuICAgICAgLy8gV2hlbiBhbiB1cGRhdGUgZmluaXNoZXMgb24gYSBoaWRkZW4gY29tcG9uZW50LCBpdHMgY2FsbGJhY2sgc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgZmlyZWQgdW50aWwvdW5sZXNzIHRoZSBjb21wb25lbnQgaXMgbWFkZSB2aXNpYmxlIGFnYWluLiBTdGFzaCB0aGVcbiAgICAgIC8vIGNhbGxiYWNrIG9uIHRoZSBzaGFyZWQgcXVldWUgb2JqZWN0IHNvIGl0IGNhbiBiZSBmaXJlZCBsYXRlci5cbiAgICAgIHZhciBuZXdIaWRkZW5DYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5jYWxsYmFja3M7XG5cbiAgICAgIGlmIChuZXdIaWRkZW5DYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nSGlkZGVuQ2FsbGJhY2tzID0gdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcztcblxuICAgICAgICBpZiAoZXhpc3RpbmdIaWRkZW5DYWxsYmFja3MgPT09IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID0gbmV3SGlkZGVuQ2FsbGJhY2tzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MgPVxuICAgICAgICAgICAgZXhpc3RpbmdIaWRkZW5DYWxsYmFja3MuY29uY2F0KG5ld0hpZGRlbkNhbGxiYWNrcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SGlkZGVuQ2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBjb250ZXh0KSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBzd2l0Y2hpbmcgZnJvbSBoaWRkZW4gLT4gdmlzaWJsZS4gQ29tbWl0IGFueSBjYWxsYmFja3NcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IGRlZmVycmVkLlxuICAgICAgdmFyIGhpZGRlbkNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7XG5cbiAgICAgIGlmIChoaWRkZW5DYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5DYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBoaWRkZW5DYWxsYmFja3NbaV07XG4gICAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5jYWxsYmFja3M7XG5cbiAgICAgIGlmIChjYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgdXBkYXRlUXVldWUuY2FsbGJhY2tzID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXTtcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICAgICAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICAgICAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgICAgIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb2JqQSAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICBvYmpBID09PSBudWxsIHx8XG4gICAgICAgIHR5cGVvZiBvYmpCICE9PSBcIm9iamVjdFwiIHx8XG4gICAgICAgIG9iakIgPT09IG51bGxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzQVtpXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwgY3VycmVudEtleSkgfHwgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBsb3N0IHJlZmluZW1lbnQgb2YgYG9iakJgXG4gICAgICAgICAgIW9iamVjdElzKG9iakFbY3VycmVudEtleV0sIG9iakJbY3VycmVudEtleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBmaWJlci5fZGVidWdPd25lciA/IGZpYmVyLl9kZWJ1Z093bmVyLnR5cGUgOiBudWxsO1xuXG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmaWJlci50eXBlLCBvd25lcik7XG5cbiAgICAgICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIkxhenlcIiwgb3duZXIpO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIiwgb3duZXIpO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiLCBvd25lcik7XG5cbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLCBvd25lcik7XG5cbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIsIG93bmVyKTtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSwgb3duZXIpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaW5mbyA9IFwiXCI7XG4gICAgICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH0gd2hpbGUgKG5vZGUpO1xuXG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gXCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIiArIHgubWVzc2FnZSArIFwiXFxuXCIgKyB4LnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgY3VycmVudCA9IG51bGw7XG4gICAgdmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihvd25lcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfSAvLyBTYWZlIGJlY2F1c2UgaWYgY3VycmVudCBmaWJlciBleGlzdHMsIHdlIGFyZSByZWNvbmNpbGluZyxcbiAgICAgICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cblxuICAgICAgICByZXR1cm4gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0Q3VycmVudEZpYmVyKCkge1xuICAgICAge1xuICAgICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDdXJyZW50RmliZXIoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPVxuICAgICAgICAgIGZpYmVyID09PSBudWxsID8gbnVsbCA6IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICAgICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyKCkge1xuICAgICAge1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SXNSZW5kZXJpbmcocmVuZGVyaW5nKSB7XG4gICAgICB7XG4gICAgICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgICAgIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgICAgIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgICAgIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbiAgICB9O1xuXG4gICAge1xuICAgICAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHZhciBtYXliZVN0cmljdFJvb3QgPSBudWxsO1xuICAgICAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKG5vZGUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgIG1heWJlU3RyaWN0Um9vdCA9IG5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoKS5qb2luKFwiLCBcIik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgICAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICAgIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICAgIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gICAgICB2YXIgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcblxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoXG4gICAgICAgIGZpYmVyLFxuICAgICAgICBpbnN0YW5jZVxuICAgICAgKSB7XG4gICAgICAgIC8vIERlZHVwZSBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG4gICAgICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIgJiYgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09XG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPVxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICAgICAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgICAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgICAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgICAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICAgICAgICB9IC8vIEZpbmFsbHksIHdlIGZsdXNoIGFsbCB0aGUgd2FybmluZ3NcbiAgICAgICAgICAvLyBVTlNBRkVfIG9uZXMgYmVmb3JlIHRoZSBkZXByZWNhdGVkIG9uZXMsIHNpbmNlIHRoZXknbGwgYmUgJ2xvdWRlcidcblxuICAgICAgICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlVzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuIFwiICtcbiAgICAgICAgICAgICAgICBcIlNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgXCIgK1xuICAgICAgICAgICAgICAgIFwiYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgK1xuICAgICAgICAgICAgICAgIFwicmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gXCIgK1xuICAgICAgICAgICAgICAgIFwic3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICAgICAgX3NvcnRlZE5hbWVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnRlZE5hbWVzMiA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgXCIgK1xuICAgICAgICAgICAgICAgIFwiYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgICAgICBfc29ydGVkTmFtZXMyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdmFyIF9zb3J0ZWROYW1lczMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgXCIgK1xuICAgICAgICAgICAgICAgIFwidGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBcIiArXG4gICAgICAgICAgICAgICAgXCJgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICAgICAgX3NvcnRlZE5hbWVzM1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnRlZE5hbWVzNCA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuIFwiICtcbiAgICAgICAgICAgICAgICBcIlNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgK1xuICAgICAgICAgICAgICAgIFwiY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvIFwiICtcbiAgICAgICAgICAgICAgICBcInN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyBcIiArXG4gICAgICAgICAgICAgICAgXCJ0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIFwiICtcbiAgICAgICAgICAgICAgICBcImBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgICAgICBfc29ydGVkTmFtZXM0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgXCJjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIiogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgXCIgK1xuICAgICAgICAgICAgICAgIFwidGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBcIiArXG4gICAgICAgICAgICAgICAgXCJgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICAgICAgX3NvcnRlZE5hbWVzNVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgICAgIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuXG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChcbiAgICAgICAgZmliZXIsXG4gICAgICAgIGluc3RhbmNlXG4gICAgICApIHtcbiAgICAgICAgdmFyIHN0cmljdFJvb3QgPSBmaW5kU3RyaWN0Um9vdChmaWJlcik7XG5cbiAgICAgICAgaWYgKHN0cmljdFJvb3QgPT09IG51bGwpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cblxuICAgICAgICBpZiAoZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2FybmluZ3NGb3JSb290ID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmliZXIudHlwZS5jb250ZXh0VHlwZXMgIT0gbnVsbCB8fFxuICAgICAgICAgIGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgIT0gbnVsbCB8fFxuICAgICAgICAgIChpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd2FybmluZ3NGb3JSb290ID0gW107XG4gICAgICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIHdhcm5pbmdzRm9yUm9vdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSwgc3RyaWN0Um9vdCkge1xuICAgICAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgZmliZXJBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCIpO1xuICAgICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaXJzdEZpYmVyKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgXCIgK1xuICAgICAgICAgICAgICAgIFwidXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLlwiICtcbiAgICAgICAgICAgICAgICBcIlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiICtcbiAgICAgICAgICAgICAgICBcIlxcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dFwiLFxuICAgICAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcbiAgICAgKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxuICAgICAqXG4gICAgICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxuICAgICAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcbiAgICAgKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAgICAgKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxuICAgICAqL1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG4gICAgZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgICAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgICAgICB2YXIgdHlwZSA9XG4gICAgICAgICAgKGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIFwiT2JqZWN0XCI7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cblxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cbiAgICBmdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICAgICAge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAgICAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcbiAgICAgIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgICAgIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAgICAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgICAgIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xuICAgICAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gICAgICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgICAgIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXG4gICAgICAvL1xuICAgICAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAgICAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxuICAgICAgLy9cbiAgICAgIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gICAgICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcbiAgICAgIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgICAgIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gICAgICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXG4gICAgICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gICAgICAvL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICB7XG4gICAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLlwiICtcbiAgICAgICAgICAgICAgXCIgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICB0eXBlTmFtZSh2YWx1ZSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BOYW1lKSB7XG4gICAgICB7XG4gICAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGAlc2AgcHJvcCBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLlwiICtcbiAgICAgICAgICAgICAgXCIgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgIHR5cGVOYW1lKHZhbHVlKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7XG5cbiAgICBmdW5jdGlvbiBnZXRUaGVuYWJsZXNGcm9tU3RhdGUoc3RhdGUpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGRldlN0YXRlID0gc3RhdGU7XG4gICAgICAgIHJldHVybiBkZXZTdGF0ZS50aGVuYWJsZXM7XG4gICAgICB9XG4gICAgfSAvLyBBbiBlcnJvciB0aGF0IGlzIHRocm93biAoZS5nLiBieSBgdXNlYCkgdG8gdHJpZ2dlciBTdXNwZW5zZS4gSWYgd2VcbiAgICAvLyBkZXRlY3QgdGhpcyBpcyBjYXVnaHQgYnkgdXNlcnNwYWNlLCB3ZSdsbCBsb2cgYSB3YXJuaW5nIGluIGRldmVsb3BtZW50LlxuXG4gICAgdmFyIFN1c3BlbnNlRXhjZXB0aW9uID0gbmV3IEVycm9yKFxuICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciEgSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBcIiArXG4gICAgICAgIFwiZGV0YWlsIG9mIGB1c2VgIHRvIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuIFlvdSBtdXN0IGVpdGhlciBcIiArXG4gICAgICAgIFwicmV0aHJvdyBpdCBpbW1lZGlhdGVseSwgb3IgbW92ZSB0aGUgYHVzZWAgY2FsbCBvdXRzaWRlIG9mIHRoZSBcIiArXG4gICAgICAgIFwiYHRyeS9jYXRjaGAgYmxvY2suIENhcHR1cmluZyB3aXRob3V0IHJldGhyb3dpbmcgd2lsbCBsZWFkIHRvIFwiICtcbiAgICAgICAgXCJ1bmV4cGVjdGVkIGJlaGF2aW9yLlxcblxcblwiICtcbiAgICAgICAgXCJUbyBoYW5kbGUgYXN5bmMgZXJyb3JzLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGFuIGVycm9yIGJvdW5kYXJ5LCBvciBcIiArXG4gICAgICAgIFwiY2FsbCB0aGUgcHJvbWlzZSdzIGAuY2F0Y2hgIG1ldGhvZCBhbmQgcGFzcyB0aGUgcmVzdWx0IHRvIGB1c2VgXCJcbiAgICApO1xuICAgIHZhciBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24gPSBuZXcgRXJyb3IoXG4gICAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLCBhbmQgc2hvdWxkIG5vdCBsZWFrIGludG8gXCIgK1xuICAgICAgICBcInVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICk7IC8vIFRoaXMgaXMgYSBub29wIHRoZW5hYmxlIHRoYXQgd2UgdXNlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBpbiB0aHJvd0V4Y2VwdGlvbi5cbiAgICAvLyBUT0RPOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmVmYWN0b3IgdGhyb3dFeGNlcHRpb24gaW50byBtdWx0aXBsZSBmdW5jdGlvbnNcbiAgICAvLyBzbyB3ZSBjYW4gdHJpZ2dlciBhIGZhbGxiYWNrIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIGNoZWNrIHRoZSB0eXBlLiBCdXRcbiAgICAvLyBmb3Igbm93IHRoaXMgd2lsbCBkby5cblxuICAgIHZhciBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUgPSB7XG4gICAgICB0aGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEEgbGlzdGVuZXIgd2FzIHVuZXhwZWN0ZWRseSBhdHRhY2hlZCB0byBhIFwiICtcbiAgICAgICAgICAgICAgJ1wibm9vcFwiIHRoZW5hYmxlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlVGhlbmFibGVTdGF0ZSgpIHtcbiAgICAgIC8vIFRoZSBUaGVuYWJsZVN0YXRlIGlzIGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYSBjb21wb25lbnQgc3VzcGVuZHMuIElmIGl0XG4gICAgICAvLyBzdXNwZW5kcyBhZ2Fpbiwgd2UnbGwgcmV1c2UgdGhlIHNhbWUgc3RhdGUuXG4gICAgICB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlOiBmYWxzZSxcbiAgICAgICAgICB0aGVuYWJsZXM6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVGhlbmFibGVSZXNvbHZlZCh0aGVuYWJsZSkge1xuICAgICAgdmFyIHN0YXR1cyA9IHRoZW5hYmxlLnN0YXR1cztcbiAgICAgIHJldHVybiBzdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgfHwgc3RhdHVzID09PSBcInJlamVjdGVkXCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG5cbiAgICBmdW5jdGlvbiB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpIHtcbiAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQyLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMi5kaWRVc2VQcm9taXNlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRyYWNrZWRUaGVuYWJsZXMgPSBnZXRUaGVuYWJsZXNGcm9tU3RhdGUodGhlbmFibGVTdGF0ZSk7XG4gICAgICB2YXIgcHJldmlvdXMgPSB0cmFja2VkVGhlbmFibGVzW2luZGV4XTtcblxuICAgICAgaWYgKHByZXZpb3VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJhY2tlZFRoZW5hYmxlcy5wdXNoKHRoZW5hYmxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2aW91cyAhPT0gdGhlbmFibGUpIHtcbiAgICAgICAgICAvLyBSZXVzZSB0aGUgcHJldmlvdXMgdGhlbmFibGUsIGFuZCBkcm9wIHRoZSBuZXcgb25lLiBXZSBjYW4gYXNzdW1lXG4gICAgICAgICAgLy8gdGhleSByZXByZXNlbnQgdGhlIHNhbWUgdmFsdWUsIGJlY2F1c2UgY29tcG9uZW50cyBhcmUgaWRlbXBvdGVudC5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdGhlbmFibGVTdGF0ZURldiA9IHRoZW5hYmxlU3RhdGU7XG5cbiAgICAgICAgICAgIGlmICghdGhlbmFibGVTdGF0ZURldi5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgd2FybiB0aGUgZmlyc3QgdGltZSBhbiB1bmNhY2hlZCB0aGVuYWJsZSBpc1xuICAgICAgICAgICAgICAvLyBkaXNjb3ZlcmVkIHBlciBjb21wb25lbnQsIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG11bHRpcGxlLCB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2VxdWVudCBvbmVzIGFyZSBsaWtlbHkgZGVyaXZlZCBmcm9tIHRoZSBmaXJzdC5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gV2UgdHJhY2sgdGhpcyBvbiB0aGUgdGhlbmFibGVTdGF0ZSBpbnN0ZWFkIG9mIGRlZHVwaW5nIHVzaW5nIHRoZVxuICAgICAgICAgICAgICAvLyBjb21wb25lbnQgbmFtZSBsaWtlIHdlIHVzdWFsbHkgZG8sIGJlY2F1c2UgaW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAgICAgICAvLyBwcm9taXNlLWFzLVJlYWN0LW5vZGUsIHRoZSBvd25lciBjb21wb25lbnQgaXMgbGlrZWx5IGRpZmZlcmVudCBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgdGhhdCdzIGN1cnJlbnRseSBiZWluZyByZWNvbmNpbGVkLiBXZSdkIGhhdmUgdG8gdHJhY2tcbiAgICAgICAgICAgICAgLy8gdGhlIG93bmVyIHVzaW5nIHN0YXRlLCB3aGljaCB3ZSdyZSB0cnlpbmcgdG8gbW92ZSBhd2F5IGZyb20uIFRob3VnaFxuICAgICAgICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGRldi1vbmx5LCBtYXliZSB0aGF0J2QgYmUgT0suXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGFub3RoZXIgYmVuZWZpdCBvZiBkb2luZyBpdCB0aGlzIHdheSBpcyB3ZSBtaWdodFxuICAgICAgICAgICAgICAvLyBldmVudHVhbGx5IGhhdmUgYSB0aGVuYWJsZVN0YXRlIHBlciBtZW1vL0ZvcmdldCBib3VuZGFyeSBpbnN0ZWFkXG4gICAgICAgICAgICAgIC8vIG9mIHBlciBjb21wb25lbnQsIHNvIHRoaXMgd291bGQgYWxsb3cgdXMgdG8gaGF2ZSBtb3JlXG4gICAgICAgICAgICAgIC8vIGdyYW51bGFyIHdhcm5pbmdzLlxuICAgICAgICAgICAgICB0aGVuYWJsZVN0YXRlRGV2LmRpZFdhcm5BYm91dFVuY2FjaGVkUHJvbWlzZSA9IHRydWU7IC8vIFRPRE86IFRoaXMgd2FybmluZyBzaG91bGQgbGluayB0byBhIGNvcnJlc3BvbmRpbmcgZG9jcyBwYWdlLlxuXG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgd2FzIHN1c3BlbmRlZCBieSBhbiB1bmNhY2hlZCBwcm9taXNlLiBDcmVhdGluZyBcIiArXG4gICAgICAgICAgICAgICAgICBcInByb21pc2VzIGluc2lkZSBhIENsaWVudCBDb21wb25lbnQgb3IgaG9vayBpcyBub3QgeWV0IFwiICtcbiAgICAgICAgICAgICAgICAgIFwic3VwcG9ydGVkLCBleGNlcHQgdmlhIGEgU3VzcGVuc2UtY29tcGF0aWJsZSBsaWJyYXJ5IG9yIGZyYW1ld29yay5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gQXZvaWQgYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBlcnJvcnMgZm9yIHRoZSBQcm9taXNlcyB0aGF0IHdlJ2xsXG4gICAgICAgICAgLy8gaW50ZW50aW9uYWxseSBpZ25vcmUuXG5cbiAgICAgICAgICB0aGVuYWJsZS50aGVuKG5vb3AsIG5vb3ApO1xuICAgICAgICAgIHRoZW5hYmxlID0gcHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UgdXNlIGFuIGV4cGFuZG8gdG8gdHJhY2sgdGhlIHN0YXR1cyBhbmQgcmVzdWx0IG9mIGEgdGhlbmFibGUgc28gdGhhdCB3ZVxuICAgICAgLy8gY2FuIHN5bmNocm9ub3VzbHkgdW53cmFwIHRoZSB2YWx1ZS4gVGhpbmsgb2YgdGhpcyBhcyBhbiBleHRlbnNpb24gb2YgdGhlXG4gICAgICAvLyBQcm9taXNlIEFQSSwgb3IgYSBjdXN0b20gaW50ZXJmYWNlIHRoYXQgaXMgYSBzdXBlcnNldCBvZiBUaGVuYWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB0aGUgdGhlbmFibGUgZG9lc24ndCBoYXZlIGEgc3RhdHVzLCBzZXQgaXQgdG8gXCJwZW5kaW5nXCIgYW5kIGF0dGFjaFxuICAgICAgLy8gYSBsaXN0ZW5lciB0aGF0IHdpbGwgdXBkYXRlIGl0cyBzdGF0dXMgYW5kIHJlc3VsdCB3aGVuIGl0IHJlc29sdmVzLlxuXG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6IHtcbiAgICAgICAgICB2YXIgZnVsZmlsbGVkVmFsdWUgPSB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjoge1xuICAgICAgICAgIHZhciByZWplY3RlZEVycm9yID0gdGhlbmFibGUucmVhc29uO1xuICAgICAgICAgIGNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoKHJlamVjdGVkRXJyb3IpO1xuICAgICAgICAgIHRocm93IHJlamVjdGVkRXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGVuYWJsZS5zdGF0dXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgaW5zdHJ1bWVudCB0aGUgdGhlbmFibGUgaWYgdGhlIHN0YXR1cyBpZiBub3QgZGVmaW5lZC4gSWZcbiAgICAgICAgICAgIC8vIGl0J3MgZGVmaW5lZCwgYnV0IGFuIHVua25vd24gdmFsdWUsIGFzc3VtZSBpdCdzIGJlZW4gaW5zdHJ1bWVudGVkIGJ5XG4gICAgICAgICAgICAvLyBzb21lIGN1c3RvbSB1c2Vyc3BhY2UgaW1wbGVtZW50YXRpb24uIFdlIHRyZWF0IGl0IGFzIFwicGVuZGluZ1wiLlxuICAgICAgICAgICAgLy8gQXR0YWNoIGEgZHVtbXkgbGlzdGVuZXIsIHRvIGVuc3VyZSB0aGF0IGFueSBsYXp5IGluaXRpYWxpemF0aW9uIGNhblxuICAgICAgICAgICAgLy8gaGFwcGVuLiBGbGlnaHQgbGF6aWx5IHBhcnNlcyBKU09OIHdoZW4gdGhlIHZhbHVlIGlzIGFjdHVhbGx5IGF3YWl0ZWQuXG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKG5vb3AsIG5vb3ApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIHVuY2FjaGVkIHRoZW5hYmxlIHRoYXQgd2UgaGF2ZW4ndCBzZWVuIGJlZm9yZS5cbiAgICAgICAgICAgIC8vIERldGVjdCBpbmZpbml0ZSBwaW5nIGxvb3BzIGNhdXNlZCBieSB1bmNhY2hlZCBwcm9taXNlcy5cbiAgICAgICAgICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICAgICAgICAgIGlmIChyb290ICE9PSBudWxsICYmIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlciA+IDEwMCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIHJvb3QgaGFzIHN1c3BlbmRlZCByZXBlYXRlZGx5IGluIHRoZSBzaGVsbCB3aXRob3V0IG1ha2luZyBhbnlcbiAgICAgICAgICAgICAgLy8gcHJvZ3Jlc3MgKGkuZS4gY29tbWl0dGluZyBzb21ldGhpbmcpLiBUaGlzIGlzIGhpZ2hseSBzdWdnZXN0aXZlIG9mXG4gICAgICAgICAgICAgIC8vIGFuIGluZmluaXRlIHBpbmcgbG9vcCwgb2Z0ZW4gY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgQXN5bmMgQ2xpZW50XG4gICAgICAgICAgICAgIC8vIENvbXBvbmVudC5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gRHVyaW5nIGEgdHJhbnNpdGlvbiwgd2UgY2FuIHN1c3BlbmQgdGhlIHdvcmsgbG9vcCB1bnRpbCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAvLyB0byByZXNvbHZlLCBidXQgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB0aGF0J3Mgbm90IGFuIG9wdGlvbi4gV2VcbiAgICAgICAgICAgICAgLy8gYWxzbyBjYW4ndCBzaG93IGEgZmFsbGJhY2ssIGJlY2F1c2Ugbm9uZSB3YXMgcHJvdmlkZWQuIFNvIG91ciBsYXN0XG4gICAgICAgICAgICAgIC8vIHJlc29ydCBpcyB0byB0aHJvdyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgZXJyb3IgaW4gYSBmdXR1cmUgcmVsZWFzZS4gT3RoZXIgd2F5cyBvZiBoYW5kbGluZ1xuICAgICAgICAgICAgICAvLyB0aGlzIGNhc2UgaW5jbHVkZSBmb3JjaW5nIGEgY29uY3VycmVudCByZW5kZXIsIG9yIHB1dHRpbmcgdGhlIHdob2xlXG4gICAgICAgICAgICAgIC8vIHJvb3QgaW50byBvZmZzY3JlZW4gbW9kZS5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiYXN5bmMvYXdhaXQgaXMgbm90IHlldCBzdXBwb3J0ZWQgaW4gQ2xpZW50IENvbXBvbmVudHMsIG9ubHkgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJTZXJ2ZXIgQ29tcG9uZW50cy4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IFwiICtcbiAgICAgICAgICAgICAgICAgIFwiYWRkaW5nIGAndXNlIGNsaWVudCdgIHRvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBcIiArXG4gICAgICAgICAgICAgICAgICBcImZvciB0aGUgc2VydmVyLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwZW5kaW5nVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgIHBlbmRpbmdUaGVuYWJsZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgICAgICAgICAgIHBlbmRpbmdUaGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZnVsZmlsbGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhlbmFibGUuc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICAgICAgICAgICAgdmFyIGZ1bGZpbGxlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgICBmdWxmaWxsZWRUaGVuYWJsZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUudmFsdWUgPSBmdWxmaWxsZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGVuYWJsZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnJlYXNvbiA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTsgLy8gQ2hlY2sgb25lIG1vcmUgdGltZSBpbiBjYXNlIHRoZSB0aGVuYWJsZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6IHtcbiAgICAgICAgICAgICAgICB2YXIgZnVsZmlsbGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkVGhlbmFibGUudmFsdWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjoge1xuICAgICAgICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgdmFyIF9yZWplY3RlZEVycm9yID0gcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2goX3JlamVjdGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgIHRocm93IF9yZWplY3RlZEVycm9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBTdXNwZW5kLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhyb3dpbmcgaGVyZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdCBhbGxvd3MgdXMgdG8gdW53aW5kIHRoZVxuICAgICAgICAgIC8vIGNhbGwgc3RhY2suIEJ1dCB3ZSBzaG91bGRuJ3QgYWxsb3cgaXQgdG8gbGVhayBpbnRvIHVzZXJzcGFjZS4gVGhyb3cgYW5cbiAgICAgICAgICAvLyBvcGFxdWUgcGxhY2Vob2xkZXIgdmFsdWUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHRoZW5hYmxlLiBJZiBpdCBkb2Vzbid0XG4gICAgICAgICAgLy8gZ2V0IGNhcHR1cmVkIGJ5IHRoZSB3b3JrIGxvb3AsIGxvZyBhIHdhcm5pbmcsIGJlY2F1c2UgdGhhdCBtZWFuc1xuICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB1c2Vyc3BhY2UgbXVzdCBoYXZlIGNhdWdodCBpdC5cblxuICAgICAgICAgIHN1c3BlbmRlZFRoZW5hYmxlID0gdGhlbmFibGU7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgU3VzcGVuc2VFeGNlcHRpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcGFzc2VkIHRvIHRoZSByZXN0IG9mIHRoZSBTdXNwZW5zZSBpbXBsZW1lbnRhdGlvbiDigJQgd2hpY2gsIGZvciBoaXN0b3JpY2FsXG4gICAgLy8gcmVhc29ucywgZXhwZWN0cyB0byByZWNlaXZlIGEgdGhlbmFibGUuXG5cbiAgICB2YXIgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuICAgIHZhciBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZFRoZW5hYmxlKCkge1xuICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgYHVzZWAgc3VzcGVuZHMgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLiBgdXNlYFxuICAgICAgLy8gdGhyb3dzIGFuIG9wYXF1ZSB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSB0aGVuYWJsZSBpdHNlbGYgc28gdGhhdCBpdCBjYW4ndCBiZVxuICAgICAgLy8gY2F1Z2h0IGluIHVzZXJzcGFjZS4gVGhlbiB0aGUgd29yayBsb29wIGFjY2Vzc2VzIHRoZSBhY3R1YWwgdGhlbmFibGUgdXNpbmdcbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24uXG4gICAgICBpZiAoc3VzcGVuZGVkVGhlbmFibGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgYSBzdXNwZW5kZWQgdGhlbmFibGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIFwiICtcbiAgICAgICAgICAgIFwiYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRoZW5hYmxlID0gc3VzcGVuZGVkVGhlbmFibGU7XG4gICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmVXNlV3JhcHBlZEluVHJ5Q2F0Y2goKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFRoaXMgd2FzIHNldCByaWdodCBiZWZvcmUgU3VzcGVuc2VFeGNlcHRpb24gd2FzIHRocm93biwgYW5kIGl0IHNob3VsZFxuICAgICAgICAvLyBoYXZlIGJlZW4gY2xlYXJlZCB3aGVuIHRoZSBleGNlcHRpb24gd2FzIGhhbmRsZWQuIElmIGl0IHdhc24ndCxcbiAgICAgICAgLy8gaXQgbXVzdCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IHVzZXJzcGFjZS5cbiAgICAgICAgaWYgKG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWKSB7XG4gICAgICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoKHJlamVjdGVkUmVhc29uKSB7XG4gICAgICAvLyBUaGlzIGNoZWNrIHJ1bnMgaW4gcHJvZCwgdG9vLCBiZWNhdXNlIGl0IHByZXZlbnRzIGEgbW9yZSBjb25mdXNpbmdcbiAgICAgIC8vIGRvd25zdHJlYW0gZXJyb3IsIHdoZXJlIFN1c3BlbnNlRXhjZXB0aW9uIGlzIGNhdWdodCBieSBhIHByb21pc2UgYW5kXG4gICAgICAvLyB0aHJvd24gYXN5bmNocm9ub3VzbHkuXG4gICAgICAvLyBUT0RPOiBBbm90aGVyIHdheSB0byBwcmV2ZW50IFN1c3BlbnNlRXhjZXB0aW9uIGZyb20gbGVha2luZyBpbnRvIGFuIGFzeW5jXG4gICAgICAvLyBleGVjdXRpb24gY29udGV4dCBpcyB0byBjaGVjayB0aGUgZGlzcGF0Y2hlciBldmVyeSB0aW1lIGB1c2VgIGlzIGNhbGxlZCxcbiAgICAgIC8vIG9yIHNvbWUgZXF1aXZhbGVudC4gVGhhdCBtaWdodCBiZSBwcmVmZXJhYmxlIGZvciBvdGhlciByZWFzb25zLCB0b28sIHNpbmNlXG4gICAgICAvLyBpdCBtYXRjaGVzIGhvdyB3ZSBwcmV2ZW50IHNpbWlsYXIgbWlzdGFrZXMgZm9yIG90aGVyIGhvb2tzLlxuICAgICAgaWYgKHJlamVjdGVkUmVhc29uID09PSBTdXNwZW5zZUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJIb29rcyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYW4gYXN5bmMgY29tcG9uZW50LiBUaGlzIFwiICtcbiAgICAgICAgICAgIFwiZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgXCIgK1xuICAgICAgICAgICAgXCJ0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdGhlbmFibGVTdGF0ZSQxID0gbnVsbDtcbiAgICB2YXIgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgdmFyIGRpZFdhcm5BYm91dE1hcHM7XG4gICAgdmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnM7XG4gICAgdmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG4gICAgdmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbiAgICB2YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nO1xuXG4gICAgdmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge307XG5cbiAgICB7XG4gICAgICBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG4gICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gZmFsc2U7XG4gICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gICAgICAvKipcbiAgICAgICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICAgICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgICAgICogdXBkYXRlcy5cbiAgICAgICAqL1xuXG4gICAgICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuXG4gICAgICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLl9zdG9yZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBcIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIHVuYWJsZSB0byBuYXJyb3cgdHlwZSBmcm9tIG1peGVkIHRvIHdyaXRhYmxlIG9iamVjdFxuXG4gICAgICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkVhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwiICtcbiAgICAgICAgICAgICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciAnICtcbiAgICAgICAgICAgIFwibW9yZSBpbmZvcm1hdGlvbi5cIlxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1JlYWN0Q2xhc3ModHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUucHJvdG90eXBlICYmIHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW53cmFwVGhlbmFibGUodGhlbmFibGUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoZW5hYmxlSW5kZXhDb3VudGVyJDE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxICs9IDE7XG5cbiAgICAgIGlmICh0aGVuYWJsZVN0YXRlJDEgPT09IG51bGwpIHtcbiAgICAgICAgdGhlbmFibGVTdGF0ZSQxID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSQxLCB0aGVuYWJsZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1peGVkUmVmID0gZWxlbWVudC5yZWY7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWl4ZWRSZWYgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG1peGVkUmVmICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdHlwZW9mIG1peGVkUmVmICE9PSBcIm9iamVjdFwiXG4gICAgICApIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIFdpbGwgYWxyZWFkeSB0aHJvdyB3aXRoIFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmc1wiXG4gICAgICAgICAgICAhKGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyLnRhZyAhPT0gQ2xhc3NDb21wb25lbnQpICYmIC8vIFdpbGwgYWxyZWFkeSB3YXJuIHdpdGggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzXCJcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnR5cGUgPT09IFwiZnVuY3Rpb25cIiAmJiAhaXNSZWFjdENsYXNzKGVsZW1lbnQudHlwZSlcbiAgICAgICAgICAgICkgJiYgLy8gV2lsbCBhbHJlYWR5IHRocm93IHdpdGggXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChzb21lU3RyaW5nUmVmKSBidXQgbm8gb3duZXIgd2FzIHNldFwiXG4gICAgICAgICAgICBlbGVtZW50Ll9vd25lclxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPVxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCBcIkNvbXBvbmVudFwiO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiBTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyAnICtcbiAgICAgICAgICAgICAgICAgIFwid2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCB1c2luZyBcIiArXG4gICAgICAgICAgICAgICAgICBcInVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBcIiArXG4gICAgICAgICAgICAgICAgICBcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCIsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICBtaXhlZFJlZlxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgIHZhciBpbnN0O1xuXG4gICAgICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgICAgICBpZiAob3duZXJGaWJlci50YWcgIT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkZ1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgc3RyaW5nIHJlZnMuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBcIiArXG4gICAgICAgICAgICAgICAgICBcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5zdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgK1xuICAgICAgICAgICAgICAgIG1peGVkUmVmICtcbiAgICAgICAgICAgICAgICBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgXCIgK1xuICAgICAgICAgICAgICAgIFwiYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IC8vIEFzc2lnbmluZyB0aGlzIHRvIGEgY29uc3Qgc28gRmxvdyBrbm93cyBpdCB3b24ndCBjaGFuZ2UgaW4gdGhlIGNsb3N1cmVcblxuICAgICAgICAgIHZhciByZXNvbHZlZEluc3QgPSBpbnN0O1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24obWl4ZWRSZWYsIFwicmVmXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHJpbmdSZWYgPSBcIlwiICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3VycmVudCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgY3VycmVudC5yZWYgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjdXJyZW50LnJlZiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICBjdXJyZW50LnJlZi5fc3RyaW5nUmVmID09PSBzdHJpbmdSZWZcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmVmID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVmcyA9IHJlc29sdmVkSW5zdC5yZWZzO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbWl4ZWRSZWYgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoXCIgK1xuICAgICAgICAgICAgICAgIG1peGVkUmVmICtcbiAgICAgICAgICAgICAgICBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2ZcIiArXG4gICAgICAgICAgICAgICAgXCIgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcblwiICtcbiAgICAgICAgICAgICAgICBcIjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcblwiICtcbiAgICAgICAgICAgICAgICBcIjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWl4ZWRSZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgdmFyIGNoaWxkU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICtcbiAgICAgICAgICAoY2hpbGRTdHJpbmcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgOiBjaGlsZFN0cmluZykgK1xuICAgICAgICAgIFwiKS4gXCIgK1xuICAgICAgICAgIFwiSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBcIiArXG4gICAgICAgICAgXCJpbnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcikge1xuICAgICAge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkZ1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiBcIiArXG4gICAgICAgICAgICBcInlvdSByZXR1cm4gYSBDb21wb25lbnQgaW5zdGVhZCBvZiA8Q29tcG9uZW50IC8+IGZyb20gcmVuZGVyLiBcIiArXG4gICAgICAgICAgICBcIk9yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZUxhenkobGF6eVR5cGUpIHtcbiAgICAgIHZhciBwYXlsb2FkID0gbGF6eVR5cGUuX3BheWxvYWQ7XG4gICAgICB2YXIgaW5pdCA9IGxhenlUeXBlLl9pbml0O1xuICAgICAgcmV0dXJuIGluaXQocGF5bG9hZCk7XG4gICAgfSAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZXhpc3RzIGJlY2F1c2UgSSBleHBlY3QgdG8gY2xvbmUgdGhlIGNvZGUgaW4gZWFjaCBwYXRoXG4gICAgLy8gdG8gYmUgYWJsZSB0byBvcHRpbWl6ZSBlYWNoIHBhdGggaW5kaXZpZHVhbGx5IGJ5IGJyYW5jaGluZyBlYXJseS4gVGhpcyBuZWVkc1xuICAgIC8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuICAgIC8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIC8vIE5vb3AuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcblxuICAgICAgICBpZiAoZGVsZXRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2NoaWxkVG9EZWxldGVdO1xuICAgICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IENoaWxkRGVsZXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRpb25zLnB1c2goY2hpbGRUb0RlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIC8vIE5vb3AuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgICAgICAvLyBhc3N1bWluZyB0aGF0IGFmdGVyIHRoZSBmaXJzdCBjaGlsZCB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGV2ZXJ5dGhpbmcuXG5cbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGRUb0RlbGV0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgICAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyBjaGlsZHJlbiB0byBhIHRlbXBvcmFyeSBtYXAgc28gdGhhdCB3ZSBjYW4gZmluZCB0aGVtIGJ5XG4gICAgICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAgICAgLy8gaW5zdGVhZC5cbiAgICAgICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdDaGlsZC5rZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5pbmRleCwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXhpc3RpbmdDaGlsZCA9IGV4aXN0aW5nQ2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgICAgIHZhciBjbG9uZSA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgICAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgICAgIGNsb25lLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICAgICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcblxuICAgICAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAvLyBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgdXNlSWQgYWxnb3JpdGhtIG5lZWRzIHRvIGtub3cgd2hpY2ggZmliZXJzIGFyZVxuICAgICAgICAgIC8vIHBhcnQgb2YgYSBsaXN0IG9mIGNoaWxkcmVuIChhcnJheXMsIGl0ZXJhdG9ycykuXG4gICAgICAgICAgbmV3RmliZXIuZmxhZ3MgfD0gRm9ya2VkO1xuICAgICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgICAgICBpZiAob2xkSW5kZXggPCBsYXN0UGxhY2VkSW5kZXgpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICAgICAgbmV3RmliZXIuZmxhZ3MgfD0gUGxhY2VtZW50IHwgUGxhY2VtZW50REVWO1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpdGVtIGNhbiBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgcmV0dXJuIG9sZEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbi5cbiAgICAgICAgICBuZXdGaWJlci5mbGFncyB8PSBQbGFjZW1lbnQgfCBQbGFjZW1lbnRERVY7XG4gICAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgICAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IFBsYWNlbWVudCB8IFBsYWNlbWVudERFVjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAvLyBJbnNlcnRcbiAgICAgICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoXG4gICAgICAgICAgICB0ZXh0Q29udGVudCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVcGRhdGVcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICBlbGVtZW50LmtleVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8IC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpIHx8IC8vIExhenkgdHlwZXMgc2hvdWxkIHJlY29uY2lsZSB0aGVpciByZXNvbHZlZCB0eXBlLlxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGFmdGVyIHRoZSBIb3QgUmVsb2FkaW5nIGNoZWNrIGFib3ZlLFxuICAgICAgICAgICAgLy8gYmVjYXVzZSBob3QgcmVsb2FkaW5nIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIHRoYW4gcHJvZCBiZWNhdXNlXG4gICAgICAgICAgICAvLyBpdCBkb2Vzbid0IHJlc3VzcGVuZC4gU28gd2UgY2FuJ3QgbGV0IHRoZSBjYWxsIGJlbG93IHN1c3BlbmQuXG4gICAgICAgICAgICAodHlwZW9mIGVsZW1lbnRUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgcmVzb2x2ZUxhenkoZWxlbWVudFR5cGUpID09PSBjdXJyZW50LnR5cGUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBNb3ZlIGJhc2VkIG9uIGluZGV4XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKTtcbiAgICAgICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEluc2VydFxuXG4gICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudCA9PT0gbnVsbCB8fFxuICAgICAgICAgIGN1cnJlbnQudGFnICE9PSBIb3N0UG9ydGFsIHx8XG4gICAgICAgICAgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHxcbiAgICAgICAgICBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEluc2VydFxuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXBkYXRlXG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBGcmFnbWVudCkge1xuICAgICAgICAgIC8vIEluc2VydFxuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIGtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVcGRhdGVcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwic3RyaW5nXCIgJiYgbmV3Q2hpbGQgIT09IFwiXCIpIHx8XG4gICAgICAgICAgdHlwZW9mIG5ld0NoaWxkID09PSBcIm51bWJlclwiXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgICAgICAvLyBub2RlLlxuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgIFwiXCIgKyBuZXdDaGlsZCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgX2NyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOiB7XG4gICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbmV3Q2hpbGQuX3BheWxvYWQ7XG4gICAgICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgaW5pdChwYXlsb2FkKSwgbGFuZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkMyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICAgICAgfSAvLyBVc2FibGUgbm9kZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVW53cmFwIHRoZSBpbm5lciB2YWx1ZSBhbmQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLlxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciB0aGVuYWJsZSA9IG5ld0NoaWxkO1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSksIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihyZXR1cm5GaWJlciwgY29udGV4dCwgbGFuZXMpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuICAgICAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAodHlwZW9mIG5ld0NoaWxkID09PSBcInN0cmluZ1wiICYmIG5ld0NoaWxkICE9PSBcIlwiKSB8fFxuICAgICAgICAgIHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJudW1iZXJcIlxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAgICAgLy8gbm9kZS5cbiAgICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBcIlwiICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRToge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRToge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IG5ld0NoaWxkLl9wYXlsb2FkO1xuICAgICAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0O1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIGluaXQocGF5bG9hZCksIGxhbmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICAgICAgfSAvLyBVc2FibGUgbm9kZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVW53cmFwIHRoZSBpbm5lciB2YWx1ZSBhbmQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLlxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciB0aGVuYWJsZSA9IG5ld0NoaWxkO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUodGhlbmFibGUpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVTbG90KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihyZXR1cm5GaWJlciwgY29udGV4dCwgbGFuZXMpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBuZXdJZHgsXG4gICAgICAgIG5ld0NoaWxkLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodHlwZW9mIG5ld0NoaWxkID09PSBcInN0cmluZ1wiICYmIG5ld0NoaWxkICE9PSBcIlwiKSB8fFxuICAgICAgICAgIHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJudW1iZXJcIlxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cywgc28gd2UgbmVpdGhlciBoYXZlIHRvIGNoZWNrIHRoZSBvbGQgbm9yXG4gICAgICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICAgICAgdmFyIG1hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG1hdGNoZWRGaWJlcixcbiAgICAgICAgICAgIFwiXCIgKyBuZXdDaGlsZCxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRToge1xuICAgICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5nZXQoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICApIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6IHtcbiAgICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID1cbiAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICAgICkgfHwgbnVsbDtcblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbmV3Q2hpbGQuX3BheWxvYWQ7XG4gICAgICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIGluaXQocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgX21hdGNoZWRGaWJlcjMsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IC8vIFVzYWJsZSBub2RlIHR5cGVzXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBVbndyYXAgdGhlIGlubmVyIHZhbHVlIGFuZCByZWN1cnNpdmVseSBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uXG5cbiAgICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkLnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIHRoZW5hYmxlID0gbmV3Q2hpbGQ7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUodGhlbmFibGUpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24ocmV0dXJuRmliZXIsIGNvbnRleHQsIGxhbmVzKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBXYXJucyBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBvciBtaXNzaW5nIGtleVxuICAgICAgICovXG5cbiAgICAgIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09IFwib2JqZWN0XCIgfHwgY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShjaGlsZCwgcmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSBcIiArXG4gICAgICAgICAgICAgICAgICBcImFjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCDigJQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICBcImNvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlwiLFxuICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBjaGlsZC5fcGF5bG9hZDtcbiAgICAgICAgICAgICAgdmFyIGluaXQgPSBjaGlsZC5faW5pdDtcbiAgICAgICAgICAgICAgd2Fybk9uSW52YWxpZEtleShpbml0KHBheWxvYWQpLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtub3duS2V5cztcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZHJlbixcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGFsZ29yaXRobSBjYW4ndCBvcHRpbWl6ZSBieSBzZWFyY2hpbmcgZnJvbSBib3RoIGVuZHMgc2luY2Ugd2VcbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAgICAgLy8gd2l0aCB0aGF0IG1vZGVsLiBJZiBpdCBlbmRzIHVwIG5vdCBiZWluZyB3b3J0aCB0aGUgdHJhZGVvZmZzLCB3ZSBjYW5cbiAgICAgICAgLy8gYWRkIGl0IGxhdGVyLlxuICAgICAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgICAgIC8vIHdoZXJlIHRoZXJlIGFyZSBmZXcgY2hhbmdlcyBhbmQgYnJ1dGUgZm9yY2UgdGhlIGNvbXBhcmlzb24gaW5zdGVhZCBvZlxuICAgICAgICAvLyBnb2luZyBmb3IgdGhlIE1hcC4gSXQnZCBsaWtlIHRvIGV4cGxvcmUgaGl0dGluZyB0aGF0IHBhdGggZmlyc3QgaW5cbiAgICAgICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgICAgIC8vIGxvdHMgb2YgbG9vayBhaGVhZC4gVGhpcyBkb2Vzbid0IGhhbmRsZSByZXZlcnNhbCBhcyB3ZWxsIGFzIHR3byBlbmRlZFxuICAgICAgICAvLyBzZWFyY2ggYnV0IHRoYXQncyB1bnVzdWFsLiBCZXNpZGVzLCBmb3IgdGhlIHR3byBlbmRlZCBvcHRpbWl6YXRpb24gdG9cbiAgICAgICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgICAgICAvLyAoYWRkaW5nIGV2ZXJ5dGhpbmcgdG8gYSBNYXApIGluIGZvciBldmVyeSBpbnNlcnQvbW92ZS5cbiAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgICAgICAvLyB1c2VzIHRoZSBzYW1lIGFsZ29yaXRobS5cbiAgICAgICAge1xuICAgICAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgICAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICAgICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICAgICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcblxuICAgICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICAgICAgdmFyIF9uZXdGaWJlciA9IGNyZWF0ZUNoaWxkKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuICAgICAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICAgIHZhciBfbmV3RmliZXIyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAgICAgaWYgKF9uZXdGaWJlcjIuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShcbiAgICAgICAgICAgICAgICAgIF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGUsXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyByZWNvbmNpbGVDaGlsZHJlbkFycmF5KCksXG4gICAgICAgIC8vIGJ1dCB1c2luZyB0aGUgaXRlcmF0b3IgaW5zdGVhZC5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gXCIgK1xuICAgICAgICAgICAgICBcIlJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjk5NVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gXCJHZW5lcmF0b3JcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiBcIiArXG4gICAgICAgICAgICAgICAgICBcIllvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImBbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kIFwiICtcbiAgICAgICAgICAgICAgICAgIFwieW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgICAgIH0gLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgICB9IC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuICAgICAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICAgICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgICAgICAgdmFyIF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgICAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgICAgICBpZiAobmV3Q2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgICAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICAgICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgO1xuICAgICAgICAgIG9sZEZpYmVyICE9PSBudWxsICYmICFzdGVwLmRvbmU7XG4gICAgICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcblxuICAgICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICAgICAgaWYgKF9uZXdGaWJlcjMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMywgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cbiAgICAgICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChfbmV3RmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKFxuICAgICAgICAgICAgICAgICAgX25ld0ZpYmVyNC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXI0LmtleVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXI0LCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVRleHROb2RlKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIHRleHRDb250ZW50LFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayBmb3Iga2V5cyBvbiB0ZXh0IG5vZGVzIHNpbmNlIHdlIGRvbid0IGhhdmUgYVxuICAgICAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZCAhPT0gbnVsbCAmJiBjdXJyZW50Rmlyc3RDaGlsZC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG5vZGUgc28gbGV0J3MganVzdCB1cGRhdGUgaXQgYW5kIGRlbGV0ZVxuICAgICAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSAvLyBUaGUgZXhpc3RpbmcgZmlyc3QgY2hpbGQgaXMgbm90IGEgdGV4dCBub2RlIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgICAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlRWxlbWVudChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICAgICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnRUeXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IEZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8IC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjaGlsZCwgZWxlbWVudCkgfHwgLy8gTGF6eSB0eXBlcyBzaG91bGQgcmVjb25jaWxlIHRoZWlyIHJlc29sdmVkIHR5cGUuXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGFmdGVyIHRoZSBIb3QgUmVsb2FkaW5nIGNoZWNrIGFib3ZlLFxuICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaG90IHJlbG9hZGluZyBoYXMgZGlmZmVyZW50IHNlbWFudGljcyB0aGFuIHByb2QgYmVjYXVzZVxuICAgICAgICAgICAgICAgIC8vIGl0IGRvZXNuJ3QgcmVzdXNwZW5kLiBTbyB3ZSBjYW4ndCBsZXQgdGhlIGNhbGwgYmVsb3cgc3VzcGVuZC5cbiAgICAgICAgICAgICAgICAodHlwZW9mIGVsZW1lbnRUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICBlbGVtZW50VHlwZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgZWxlbWVudFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUxhenkoZWxlbWVudFR5cGUpID09PSBjaGlsZC50eXBlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gRGlkbid0IG1hdGNoLlxuXG4gICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgZWxlbWVudC5rZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIF9jcmVhdGVkNC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgcG9ydGFsLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIHZhciBrZXkgPSBwb3J0YWwua2V5O1xuICAgICAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiZcbiAgICAgICAgICAgICAgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmXG4gICAgICAgICAgICAgIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgIH0gLy8gVGhpcyBBUEkgd2lsbCB0YWcgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSByZWNvbmNpbGlhdGlvblxuICAgICAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAgICAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgICAgIC8vIElmIHRoZSB0b3AgbGV2ZWwgaXRlbSBpcyBhbiBhcnJheSwgd2UgdHJlYXQgaXQgYXMgYSBzZXQgb2YgY2hpbGRyZW4sXG4gICAgICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgICAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuICAgICAgICAvLyBIYW5kbGUgdG9wIGxldmVsIHVua2V5ZWQgZnJhZ21lbnRzIGFzIGlmIHRoZXkgd2VyZSBhcnJheXMuXG4gICAgICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAgICAgLy8gV2UgdHJlYXQgdGhlIGFtYmlndW91cyBjYXNlcyBhYm92ZSB0aGUgc2FtZS5cbiAgICAgICAgLy8gVE9ETzogTGV0J3MgdXNlIHJlY3Vyc2lvbiBsaWtlIHdlIGRvIGZvciBVc2FibGUgbm9kZXM/XG4gICAgICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID1cbiAgICAgICAgICB0eXBlb2YgbmV3Q2hpbGQgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICBuZXdDaGlsZCAhPT0gbnVsbCAmJlxuICAgICAgICAgIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiZcbiAgICAgICAgICBuZXdDaGlsZC5rZXkgPT09IG51bGw7XG5cbiAgICAgICAgaWYgKGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgICAgICB9IC8vIEhhbmRsZSBvYmplY3QgdHlwZXNcblxuICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSBcIm9iamVjdFwiICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKFxuICAgICAgICAgICAgICAgIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQoXG4gICAgICAgICAgICAgICAgcmVjb25jaWxlU2luZ2xlUG9ydGFsKFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IG5ld0NoaWxkLl9wYXlsb2FkO1xuICAgICAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0OyAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIG5vbi1yZWN1cnNpdmUuXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIGluaXQocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IC8vIFVzYWJsZXMgYXJlIGEgdmFsaWQgUmVhY3Qgbm9kZSB0eXBlLiBXaGVuIFJlYWN0IGVuY291bnRlcnMgYSBVc2FibGUgaW5cbiAgICAgICAgICAvLyBhIGNoaWxkIHBvc2l0aW9uLCBpdCB1bndyYXBzIGl0IHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobSBhcyBgdXNlYC4gRm9yXG4gICAgICAgICAgLy8gZXhhbXBsZSwgZm9yIHByb21pc2VzLCBSZWFjdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiB0byB1bndpbmQgdGhlXG4gICAgICAgICAgLy8gc3RhY2ssIHRoZW4gcmVwbGF5IHRoZSBjb21wb25lbnQgb25jZSB0aGUgcHJvbWlzZSByZXNvbHZlcy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEEgZGlmZmVyZW5jZSBmcm9tIGB1c2VgIGlzIHRoYXQgUmVhY3Qgd2lsbCBrZWVwIHVud3JhcHBpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgLy8gdW50aWwgaXQgcmVhY2hlcyBhIG5vbi1Vc2FibGUgdHlwZS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIGUuZy4gVXNhYmxlPFVzYWJsZTxVc2FibGU8VD4+PiBzaG91bGQgcmVzb2x2ZSB0byBUXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgc3RydWN0dXJlIGlzIGEgYml0IHVuZm9ydHVuYXRlLiBJZGVhbGx5LCB3ZSBzaG91bGRuJ3QgbmVlZCB0b1xuICAgICAgICAgIC8vIHJlcGxheSB0aGUgZW50aXJlIGJlZ2luIHBoYXNlIG9mIHRoZSBwYXJlbnQgZmliZXIgaW4gb3JkZXIgdG8gcmVjb25jaWxlXG4gICAgICAgICAgLy8gdGhlIGNoaWxkcmVuIGFnYWluLiBUaGlzIHdvdWxkIHJlcXVpcmUgYSBzb21ld2hhdCBzaWduaWZpY2FudCByZWZhY3RvcixcbiAgICAgICAgICAvLyBiZWNhdXNlIHJlY29uY2lsYXRpb24gaGFwcGVucyBkZWVwIHdpdGhpbiB0aGUgYmVnaW4gcGhhc2UsIGFuZFxuICAgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB3b3JrLCBub3QgYWx3YXlzIGF0IHRoZSBlbmQuIFdlIHNob3VsZFxuICAgICAgICAgIC8vIGNvbnNpZGVyIGFzIGFuIGZ1dHVyZSBpbXByb3ZlbWVudC5cblxuICAgICAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQudGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YXIgdGhlbmFibGUgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUodGhlbmFibGUpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKHJldHVybkZpYmVyLCBjb250ZXh0LCBsYW5lcyksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0eXBlb2YgbmV3Q2hpbGQgPT09IFwic3RyaW5nXCIgJiYgbmV3Q2hpbGQgIT09IFwiXCIpIHx8XG4gICAgICAgICAgdHlwZW9mIG5ld0NoaWxkID09PSBcIm51bWJlclwiXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKFxuICAgICAgICAgICAgcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgXCJcIiArIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG4gICAgICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGluZGlyZWN0aW9uIG9ubHkgZXhpc3RzIHNvIHdlIGNhbiByZXNldCBgdGhlbmFibGVTdGF0ZWAgYXQgdGhlIGVuZC5cbiAgICAgICAgLy8gSXQgc2hvdWxkIGdldCBpbmxpbmVkIGJ5IENsb3N1cmUuXG4gICAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuICAgICAgICB2YXIgZmlyc3RDaGlsZEZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7IC8vIERvbid0IGJvdGhlciB0byByZXNldCBgdGhlbmFibGVJbmRleENvdW50ZXJgIHRvIDAgYmVjYXVzZSBpdCBhbHdheXMgZ2V0c1xuICAgICAgICAvLyBzZXQgYXQgdGhlIGJlZ2lubmluZy5cblxuICAgICAgICByZXR1cm4gZmlyc3RDaGlsZEZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnM7XG4gICAgfVxuXG4gICAgdmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xuICAgIHZhciBtb3VudENoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKGZhbHNlKTtcbiAgICBmdW5jdGlvbiByZXNldENoaWxkUmVjb25jaWxlck9uVW53aW5kKCkge1xuICAgICAgLy8gT24gdW53aW5kLCBjbGVhciBhbnkgcGVuZGluZyB0aGVuYWJsZXMgdGhhdCB3ZXJlIHVzZWQuXG4gICAgICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICBjdXJyZW50Q2hpbGQsXG4gICAgICAgIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHNcbiAgICAgICk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICAgICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICAgIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQuc2libGluZztcbiAgICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgY3VycmVudENoaWxkLFxuICAgICAgICAgIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xuICAgIH0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuICAgIGZ1bmN0aW9uIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gICAgICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3MoY2hpbGQsIGxhbmVzKTtcbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFRoaXMgaXNuJ3QgYmVpbmcgdXNlZCB5ZXQsIGJ1dCBpdCdzIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlXG4gICAgLy8gSW52aXNpYmxlUGFyZW50Q29udGV4dCB0aGF0IGlzIGN1cnJlbnRseSBtYW5hZ2VkIGJ5IFN1c3BlbnNlQ29udGV4dC5cblxuICAgIHZhciBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTm9MYW5lcyk7XG4gICAgZnVuY3Rpb24gcHVzaEhpZGRlbkNvbnRleHQoZmliZXIsIGNvbnRleHQpIHtcbiAgICAgIHZhciBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMgPSBnZXRFbnRhbmdsZWRSZW5kZXJMYW5lcygpO1xuICAgICAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcywgZmliZXIpO1xuICAgICAgcHVzaChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7IC8vIFdoZW4gcmVuZGVyaW5nIGEgc3VidHJlZSB0aGF0J3MgY3VycmVudGx5IGhpZGRlbiwgd2UgbXVzdCBpbmNsdWRlIGFsbFxuICAgICAgLy8gbGFuZXMgdGhhdCB3b3VsZCBoYXZlIHJlbmRlcmVkIGlmIHRoZSBoaWRkZW4gc3VidHJlZSBoYWRuJ3QgYmVlbiBkZWZlcnJlZC5cbiAgICAgIC8vIFRoYXQgaXMsIGluIG9yZGVyIHRvIHJldmVhbCBjb250ZW50IGZyb20gaGlkZGVuIC0+IHZpc2libGUsIHdlIG11c3QgY29tbWl0XG4gICAgICAvLyBhbGwgdGhlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHdoZW4gd2Ugb3JpZ2luYWxseSBoaWQgdGhlIHRyZWUuXG5cbiAgICAgIHNldEVudGFuZ2xlZFJlbmRlckxhbmVzKFxuICAgICAgICBtZXJnZUxhbmVzKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcywgY29udGV4dC5iYXNlTGFuZXMpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKGZpYmVyKSB7XG4gICAgICAvLyBUaGlzIHN1YnRyZWUgaXMgbm90IGN1cnJlbnRseSBoaWRkZW4sIHNvIHdlIGRvbid0IG5lZWQgdG8gYWRkIGFueSBsYW5lc1xuICAgICAgLy8gdG8gdGhlIHJlbmRlciBsYW5lcy4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gcHVzaCBzb21ldGhpbmcgdG8gYXZvaWQgYVxuICAgICAgLy8gY29udGV4dCBtaXNtYXRjaC4gUmV1c2UgdGhlIGV4aXN0aW5nIGNvbnRleHQgb24gdGhlIHN0YWNrLlxuICAgICAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGdldEVudGFuZ2xlZFJlbmRlckxhbmVzKCksIGZpYmVyKTtcbiAgICAgIHB1c2goXG4gICAgICAgIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsXG4gICAgICAgIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgZmliZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhpZGRlbkNvbnRleHQoZmliZXIpIHtcbiAgICAgIC8vIFJlc3RvcmUgdGhlIHByZXZpb3VzIHJlbmRlciBsYW5lcyBmcm9tIHRoZSBzdGFja1xuICAgICAgc2V0RW50YW5nbGVkUmVuZGVyTGFuZXMocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgcG9wKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDdXJyZW50VHJlZUhpZGRlbigpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IG51bGw7XG4gICAgfVxuXG4gICAgLy8gc3VzcGVuZHMsIGkuZS4gaXQncyB0aGUgbmVhcmVzdCBgY2F0Y2hgIGJsb2NrIG9uIHRoZSBzdGFjay5cblxuICAgIHZhciBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTsgLy8gUmVwcmVzZW50cyB0aGUgb3V0ZXJtb3N0IGJvdW5kYXJ5IHRoYXQgaXMgbm90IHZpc2libGUgaW4gdGhlIGN1cnJlbnQgdHJlZS5cbiAgICAvLyBFdmVyeXRoaW5nIGFib3ZlIHRoaXMgaXMgdGhlIFwic2hlbGxcIi4gV2hlbiB0aGlzIGlzIG51bGwsIGl0IG1lYW5zIHdlJ3JlXG4gICAgLy8gcmVuZGVyaW5nIGluIHRoZSBzaGVsbCBvZiB0aGUgYXBwLiBJZiBpdCdzIG5vbi1udWxsLCBpdCBtZWFucyB3ZSdyZSByZW5kZXJpbmdcbiAgICAvLyBkZWVwZXIgdGhhbiB0aGUgc2hlbGwsIGluc2lkZSBhIG5ldyB0cmVlIHRoYXQgd2Fzbid0IGFscmVhZHkgdmlzaWJsZS5cbiAgICAvL1xuICAgIC8vIFRoZSBtYWluIHdheSB3ZSB1c2UgdGhpcyBjb25jZXB0IGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHNob3dpbmcgYSBmYWxsYmFja1xuICAgIC8vIHdvdWxkIHJlc3VsdCBpbiBhIGRlc2lyYWJsZSBvciB1bmRlc2lyYWJsZSBsb2FkaW5nIHN0YXRlLiBBY3RpdmluZyBhIGZhbGxiYWNrXG4gICAgLy8gaW4gdGhlIHNoZWxsIGlzIGNvbnNpZGVyZWQgYW4gdW5kZXJzaXJhYmxlIGxvYWRpbmcgc3RhdGUsIGJlY2F1c2UgaXQgd291bGRcbiAgICAvLyBtZWFuIGhpZGluZyB2aXNpYmxlIChhbGJlaXQgc3RhbGUpIGNvbnRlbnQgaW4gdGhlIGN1cnJlbnQgdHJlZSDigJQgd2UgcHJlZmVyIHRvXG4gICAgLy8gc2hvdyB0aGUgc3RhbGUgY29udGVudCwgcmF0aGVyIHRoYW4gc3dpdGNoIHRvIGEgZmFsbGJhY2suIEJ1dCBzaG93aW5nIGFcbiAgICAvLyBmYWxsYmFjayBpbiBhIG5ldyB0cmVlIGlzIGZpbmUsIGJlY2F1c2UgdGhlcmUncyBubyBzdGFsZSBjb250ZW50IHRvXG4gICAgLy8gcHJlZmVyIGluc3RlYWQuXG5cbiAgICB2YXIgc2hlbGxCb3VuZGFyeSA9IG51bGw7XG4gICAgZnVuY3Rpb24gZ2V0U2hlbGxCb3VuZGFyeSgpIHtcbiAgICAgIHJldHVybiBzaGVsbEJvdW5kYXJ5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgLy8gVE9ETzogUGFzcyBhcyBhcmd1bWVudFxuICAgICAgdmFyIGN1cnJlbnQgPSBoYW5kbGVyLmFsdGVybmF0ZTtcbiAgICAgIC8vIHByb3BhZ2F0ZWQgYSBzaW5nbGUgbGV2ZWwuIEZvciBleGFtcGxlLCB3aGVuIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBpcyBzZXQsXG4gICAgICAvLyBpdCBzaG91bGQgb25seSBmb3JjZSB0aGUgbmVhcmVzdCBTdXNwZW5zZSBib3VuZGFyeSBpbnRvIGZhbGxiYWNrIG1vZGUuXG5cbiAgICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgICBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KVxuICAgICAgKTsgLy8gRXhwZXJpbWVudGFsIGZlYXR1cmU6IFNvbWUgU3VzcGVuc2UgYm91bmRhcmllcyBhcmUgbWFya2VkIGFzIGhhdmluZyBhblxuICAgICAgLy8gdG8gcHVzaCBhIG5lc3RlZCBTdXNwZW5zZSBoYW5kbGVyLCBiZWNhdXNlIGl0IHdpbGwgZ2V0IHJlcGxhY2VkIGJ5IHRoZVxuICAgICAgLy8gb3V0ZXIgZmFsbGJhY2ssIGFueXdheS4gQ29uc2lkZXIgdGhpcyBhcyBhIGZ1dHVyZSBvcHRpbWl6YXRpb24uXG5cbiAgICAgIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGhhbmRsZXIsIGhhbmRsZXIpO1xuXG4gICAgICBpZiAoc2hlbGxCb3VuZGFyeSA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBpc0N1cnJlbnRUcmVlSGlkZGVuKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIG5vdCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IFVJLlxuICAgICAgICAgIHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIHNob3dpbmcgYSBmYWxsYmFjayBpbiB0aGUgY3VycmVudCBVSS5cbiAgICAgICAgICAgIHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoRmFsbGJhY2tUcmVlU3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gICAgICAvLyBXZSdyZSBhYm91dCB0byByZW5kZXIgdGhlIGZhbGxiYWNrLiBJZiBzb21ldGhpbmcgaW4gdGhlIGZhbGxiYWNrIHN1c3BlbmRzLFxuICAgICAgLy8gaXQncyBha2luIHRvIHRocm93aW5nIGluc2lkZSBvZiBhIGBjYXRjaGAgYmxvY2suIFRoaXMgYm91bmRhcnkgc2hvdWxkIG5vdFxuICAgICAgLy8gY2FwdHVyZS4gUmV1c2UgdGhlIGV4aXN0aW5nIGhhbmRsZXIgb24gdGhlIHN0YWNrLlxuICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIEEgU3VzcGVuc2VMaXN0IGNvbnRleHQgaXMgb25seSBwdXNoZWQgaGVyZSB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc21hdGNoLlxuICAgICAgICAvLyBSZXVzZSB0aGUgY3VycmVudCB2YWx1ZSBvbiB0aGUgc3RhY2suXG4gICAgICAgIC8vIFRPRE86IFdlIGNhbiBhdm9pZCBuZWVkaW5nIHRvIHB1c2ggaGVyZSBieSBieSBmb3JraW5nIHBvcFN1c3BlbnNlSGFuZGxlclxuICAgICAgICAvLyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgU3VzcGVuc2UgYW5kIE9mZnNjcmVlbi5cbiAgICAgICAgcHVzaFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICAgIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG5cbiAgICAgICAgaWYgKHNoZWxsQm91bmRhcnkgIT09IG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGJvdW5kYXJ5IGluIHRoZSBzdGFjayB0aGF0J3MgYWxyZWFkeSBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIGEgZmFsbGJhY2suIFNvIGV2ZXJ5dGhpbmcgb3V0c2lkZSBpcyBjb25zaWRlcmVkIHRoZSBzaGVsbC5cbiAgICAgICAgICAgICAgc2hlbGxCb3VuZGFyeSA9IGZpYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIExlZ2FjeUhpZGRlbiBjb21wb25lbnQuXG4gICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayhmaWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayhmaWJlcikge1xuICAgICAgcHVzaFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBnZXRTdXNwZW5zZUhhbmRsZXIoKSwgZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5zZUhhbmRsZXIoKSB7XG4gICAgICByZXR1cm4gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wU3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gICAgICBwb3Aoc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcblxuICAgICAgaWYgKHNoZWxsQm91bmRhcnkgPT09IGZpYmVyKSB7XG4gICAgICAgIC8vIFBvcHBpbmcgYmFjayBpbnRvIHRoZSBzaGVsbC5cbiAgICAgICAgc2hlbGxCb3VuZGFyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHBvcFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIpO1xuICAgIH0gLy8gU3VzcGVuc2VMaXN0IGNvbnRleHRcbiAgICAvLyBUT0RPOiBNb3ZlIHRvIGEgc2VwYXJhdGUgbW9kdWxlPyBXZSBtYXkgY2hhbmdlIHRoZSBTdXNwZW5zZUxpc3RcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiB0byBoaWRlL3Nob3cgaW4gdGhlIGNvbW1pdCBwaGFzZSwgYW55d2F5LlxuXG4gICAgdmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwO1xuICAgIHZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBjYW4gYmUgdXNlZCBieSBTdXNwZW5zZUxpc3QgdG8gZm9yY2UgbmV3bHkgYWRkZWRcbiAgICAvLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbiAgICB2YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbiAgICB2YXIgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihEZWZhdWx0U3VzcGVuc2VDb250ZXh0KTtcbiAgICBmdW5jdGlvbiBoYXNTdXNwZW5zZUxpc3RDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgICAgIHJldHVybiAocGFyZW50Q29udGV4dCAmIGZsYWcpICE9PSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgICAgIHJldHVybiAocGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSB8IHNoYWxsb3dDb250ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoU3VzcGVuc2VMaXN0Q29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFN1c3BlbnNlTGlzdENvbnRleHQoZmliZXIpIHtcbiAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuXG4gICAgLy8gQSBub24tbnVsbCBTdXNwZW5zZVN0YXRlIG1lYW5zIHRoYXQgaXQgaXMgYmxvY2tlZCBmb3Igb25lIHJlYXNvbiBvciBhbm90aGVyLlxuICAgIC8vIC0gQSBub24tbnVsbCBkZWh5ZHJhdGVkIGZpZWxkIG1lYW5zIGl0J3MgYmxvY2tlZCBwZW5kaW5nIGh5ZHJhdGlvbi5cbiAgICAvLyAgIC0gQSBub24tbnVsbCBkZWh5ZHJhdGVkIGZpZWxkIGNhbiB1c2UgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyBvclxuICAgIC8vICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayB0byBxdWVyeSB0aGUgcmVhc29uIGZvciBiZWluZyBkZWh5ZHJhdGVkLlxuICAgIC8vIC0gQSBudWxsIGRlaHlkcmF0ZWQgZmllbGQgbWVhbnMgaXQncyBibG9ja2VkIGJ5IHNvbWV0aGluZyBzdXNwZW5kaW5nIGFuZFxuICAgIC8vICAgd2UncmUgY3VycmVudGx5IHNob3dpbmcgYSBmYWxsYmFjayBpbnN0ZWFkLlxuXG4gICAgZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICAgICAgdmFyIG5vZGUgPSByb3c7XG5cbiAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkZWh5ZHJhdGVkID09PSBudWxsIHx8XG4gICAgICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoKSB8fFxuICAgICAgICAgICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjaygpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQgJiYgLy8gcmV2ZWFsT3JkZXIgdW5kZWZpbmVkIGNhbid0IGJlIHRydXN0ZWQgYmVjYXVzZSBpdCBkb24ndFxuICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpdCBzdXNwZW5kZWQgb3Igbm90LlxuICAgICAgICAgIG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHJvdykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBOb0ZsYWdzID1cbiAgICAgIC8qICAgKi9cbiAgICAgIDA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbiAgICB2YXIgSGFzRWZmZWN0ID1cbiAgICAgIC8qICovXG4gICAgICAxOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxuICAgIHZhciBJbnNlcnRpb24gPVxuICAgICAgLyogKi9cbiAgICAgIDI7XG4gICAgdmFyIExheW91dCA9XG4gICAgICAvKiAgICAqL1xuICAgICAgNDtcbiAgICB2YXIgUGFzc2l2ZSA9XG4gICAgICAvKiAgICovXG4gICAgICA4O1xuXG4gICAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG4gICAgdmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcbiAgICB2YXIgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3Q7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoO1xuICAgIHZhciBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudDtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICAgIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoID0gbmV3IFNldCgpO1xuICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgfSAvLyBUaGUgZWZmZWN0IFwiaW5zdGFuY2VcIiBpcyBhIHNoYXJlZCBvYmplY3QgdGhhdCByZW1haW5zIHRoZSBzYW1lIGZvciB0aGUgZW50aXJlXG4gICAgLy8gbGlmZXRpbWUgb2YgYW4gZWZmZWN0LiBJbiBSdXN0IHRlcm1zLCBhIFJlZkNlbGwuIFdlIHVzZSBpdCB0byBzdG9yZSB0aGVcbiAgICAvLyBcImRlc3Ryb3lcIiBmdW5jdGlvbiB0aGF0IGlzIHJldHVybmVkIGZyb20gYW4gZWZmZWN0LCBiZWNhdXNlIHRoYXQgaXMgc3RhdGVmdWwuXG4gICAgLy8gVGhlIGZpZWxkIGlzIGB1bmRlZmluZWRgIGlmIHRoZSBlZmZlY3QgaXMgdW5tb3VudGVkLCBvciBpZiB0aGUgZWZmZWN0IHJhblxuICAgIC8vIGJ1dCBpcyBub3Qgc3RhdGVmdWwuIFdlIGRvbid0IGV4cGxpY2l0bHkgdHJhY2sgd2hldGhlciB0aGUgZWZmZWN0IGlzIG1vdW50ZWRcbiAgICAvLyBvciB1bm1vdW50ZWQgYmVjYXVzZSB0aGF0IGNhbiBiZSBpbmZlcnJlZCBieSB0aGUgaGlkZGVubmVzcyBvZiB0aGUgZmliZXIgaW5cbiAgICAvLyB0aGUgdHJlZSwgaS5lLiB3aGV0aGVyIHRoZXJlIGlzIGEgaGlkZGVuIE9mZnNjcmVlbiBmaWJlciBhYm92ZSBpdC5cbiAgICAvL1xuICAgIC8vIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB0aGlzIGlzIHN0b3JlZCBvbiBhIHNlcGFyYXRlIG9iamVjdCwgYmVjYXVzZSBpdCBhZGRzXG4gICAgLy8gbW9yZSBtZW1vcnkgcGVyIGVmZmVjdCBpbnN0YW5jZSwgYnV0IGl0J3MgY29uY2VwdHVhbGx5IHNvdW5kLiBJIHRoaW5rIHRoZXJlJ3NcbiAgICAvLyBsaWtlbHkgYSBiZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUgd2UgY291bGQgdXNlIGZvciBlZmZlY3RzOyBwZXJoYXBzIGp1c3Qgb25lXG4gICAgLy8gYXJyYXkgb2YgZWZmZWN0IGluc3RhbmNlcyBwZXIgZmliZXIuIEJ1dCBJIHRoaW5rIHRoaXMgaXMgT0sgZm9yIG5vdyBkZXNwaXRlXG4gICAgLy8gdGhlIGFkZGl0aW9uYWwgbWVtb3J5IGFuZCB3ZSBjYW4gZm9sbG93IHVwIHdpdGggcGVyZm9ybWFuY2VcbiAgICAvLyBvcHRpbWl6YXRpb25zIGxhdGVyLlxuICAgIC8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cblxuICAgIHZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbiAgICAvLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG4gICAgdmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsOyAvLyBIb29rcyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIGZpYmVyJ3MgbWVtb2l6ZWRTdGF0ZSBmaWVsZC4gVGhlXG4gICAgLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbiAgICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgICAvLyB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDsgLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXNcbiAgICAvLyBkb2VzIG5vdCBnZXQgcmVzZXQgaWYgd2UgZG8gYW5vdGhlciByZW5kZXIgcGFzczsgb25seSB3aGVuIHdlJ3JlIGNvbXBsZXRlbHlcbiAgICAvLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4gICAgLy8gd2hldGhlciB3ZSBuZWVkIHRvIGNsZWFyIHJlbmRlciBwaGFzZSB1cGRhdGVzIGFmdGVyIGEgdGhyb3cuXG5cbiAgICB2YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBXaGVyZSBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbmx5IGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcy4gVGhpc1xuICAgIC8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3Mgc29tZSB3YXkgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoXG4gICAgLy8gYGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVgLiBPciB3aXRoIGBudW1iZXJPZlJlUmVuZGVyc2AuXG5cbiAgICB2YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG4gICAgdmFyIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gZmFsc2U7IC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIHVzZUlkIGhvb2tzIGluIHRoaXMgY29tcG9uZW50LlxuXG4gICAgdmFyIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICB2YXIgdGhlbmFibGVTdGF0ZSA9IG51bGw7IC8vIFVzZWQgZm9yIGlkcyB0aGF0IGFyZSBnZW5lcmF0ZWQgY29tcGxldGVseSBjbGllbnQtc2lkZSAoaS5lLiBub3QgZHVyaW5nXG4gICAgLy8gaHlkcmF0aW9uKS4gVGhpcyBjb3VudGVyIGlzIGdsb2JhbCwgc28gY2xpZW50IGlkcyBhcmUgbm90IHN0YWJsZSBhY3Jvc3NcbiAgICAvLyByZW5kZXIgYXR0ZW1wdHMuXG5cbiAgICB2YXIgZ2xvYmFsQ2xpZW50SWRDb3VudGVyID0gMDtcbiAgICB2YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG4gICAgdmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuICAgIC8vIFRoZSBsaXN0IHN0b3JlcyB0aGUgb3JkZXIgb2YgaG9va3MgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmVuZGVyIChtb3VudCkuXG4gICAgLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG4gICAgdmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgdmFyIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIEluIERFViwgdGhpcyB0cmFja3Mgd2hldGhlciBjdXJyZW50bHkgcmVuZGVyaW5nIGNvbXBvbmVudCBuZWVkcyB0byBpZ25vcmVcbiAgICAvLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4gICAgLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxuICAgIHZhciBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2Kys7XG5cbiAgICAgICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChkZXBzICE9PSB1bmRlZmluZWQgJiYgZGVwcyAhPT0gbnVsbCAmJiAhaXNBcnJheShkZXBzKSkge1xuICAgICAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgdGhhdCBpcyBub3QgYW4gYXJyYXkgKGluc3RlYWQsIHJlY2VpdmVkIGAlc2ApLiBXaGVuIFwiICtcbiAgICAgICAgICAgICAgXCJzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LlwiLFxuICAgICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYsXG4gICAgICAgICAgICB0eXBlb2YgZGVwc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihjdXJyZW50SG9va05hbWUpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKFxuICAgICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDFcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHRhYmxlID0gXCJcIjtcbiAgICAgICAgICAgIHZhciBzZWNvbmRDb2x1bW5TdGFydCA9IDMwO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICAgICAgdmFyIG5ld0hvb2tOYW1lID1cbiAgICAgICAgICAgICAgICBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgICAgICB2YXIgcm93ID0gaSArIDEgKyBcIi4gXCIgKyBvbGRIb29rTmFtZTsgLy8gRXh0cmEgc3BhY2Ugc28gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cFxuICAgICAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgICAgIHJvdyArPSBcIiBcIjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArIFwiXFxuXCI7XG4gICAgICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuIFwiICtcbiAgICAgICAgICAgICAgICBcIkZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG5cIiArXG4gICAgICAgICAgICAgICAgXCIgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cIiArXG4gICAgICAgICAgICAgICAgXCIlc1wiICtcbiAgICAgICAgICAgICAgICBcIiAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcblwiLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICB0YWJsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuSWZBc3luY0NsaWVudENvbXBvbmVudChDb21wb25lbnQpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gVGhpcyBkZXYtb25seSBjaGVjayBvbmx5IHdvcmtzIGZvciBkZXRlY3RpbmcgbmF0aXZlIGFzeW5jIGZ1bmN0aW9ucyxcbiAgICAgICAgLy8gbm90IHRyYW5zcGlsZWQgb25lcy4gVGhlcmUncyBhbHNvIGEgcHJvZCBjaGVjayB0aGF0IHdlIHVzZSB0byBwcmV2ZW50XG4gICAgICAgIC8vIGFzeW5jIGNsaWVudCBjb21wb25lbnRzIGZyb20gY3Jhc2hpbmcgdGhlIGFwcDsgdGhlIHByb2Qgb25lIHdvcmtzIGV2ZW5cbiAgICAgICAgLy8gZm9yIHRyYW5zcGlsZWQgYXN5bmMgZnVuY3Rpb25zLiBOZWl0aGVyIG1lY2hhbmlzbSBpcyBjb21wbGV0ZWx5XG4gICAgICAgIC8vIGJ1bGxldHByb29mIGJ1dCB0b2dldGhlciB0aGV5IGNvdmVyIHRoZSBtb3N0IGNvbW1vbiBjYXNlcy5cbiAgICAgICAgdmFyIGlzQXN5bmNGdW5jdGlvbiA9IC8vICRGbG93SWdub3JlW21ldGhvZC11bmJpbmRpbmddXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENvbXBvbmVudCkgPT09XG4gICAgICAgICAgXCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCI7XG5cbiAgICAgICAgaWYgKGlzQXN5bmNGdW5jdGlvbikge1xuICAgICAgICAgIC8vIEVuY291bnRlcmVkIGFuIGFzeW5jIENsaWVudCBDb21wb25lbnQuIFRoaXMgaXMgbm90IHlldCBzdXBwb3J0ZWQuXG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKFxuICAgICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJhc3luYy9hd2FpdCBpcyBub3QgeWV0IHN1cHBvcnRlZCBpbiBDbGllbnQgQ29tcG9uZW50cywgb25seSBcIiArXG4gICAgICAgICAgICAgICAgXCJTZXJ2ZXIgQ29tcG9uZW50cy4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IFwiICtcbiAgICAgICAgICAgICAgICBcImFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gXCIgK1xuICAgICAgICAgICAgICAgIFwiZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3JcIiArXG4gICAgICAgICAgXCIgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG5cIiArXG4gICAgICAgICAgXCIxLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG5cIiArXG4gICAgICAgICAgXCIyLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuXCIgK1xuICAgICAgICAgIFwiMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblwiICtcbiAgICAgICAgICBcIlNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgLy8gT25seSB0cnVlIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgYmVpbmcgaG90IHJlbG9hZGVkLlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCIlcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgXCIgK1xuICAgICAgICAgICAgICBcInRoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgXCIgK1xuICAgICAgICAgICAgICBcIml0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLlwiLFxuICAgICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXZcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgICAgICAvLyBwYXNzZWQgaW5saW5lLlxuICAgICAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgXCIgK1xuICAgICAgICAgICAgICBcIm9yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBcIlByZXZpb3VzOiAlc1xcblwiICtcbiAgICAgICAgICAgICAgXCJJbmNvbWluZzogJXNcIixcbiAgICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2LFxuICAgICAgICAgICAgXCJbXCIgKyBwcmV2RGVwcy5qb2luKFwiLCBcIikgKyBcIl1cIixcbiAgICAgICAgICAgIFwiW1wiICsgbmV4dERlcHMuam9pbihcIiwgXCIpICsgXCJdXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgIGlmIChvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgc2Vjb25kQXJnLFxuICAgICAgbmV4dFJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgICAge1xuICAgICAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID1cbiAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgd2FybklmQXN5bmNDbGllbnRDb21wb25lbnQoQ29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0XG4gICAgICAvLyBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgLy8gbG9jYWxJZENvdW50ZXIgPSAwO1xuICAgICAgLy8gdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgLy8gdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gICAgICAvLyBDdXJyZW50bHkgd2Ugd2lsbCBpZGVudGlmeSB0aGUgdXBkYXRlIHJlbmRlciBhcyBhIG1vdW50IGJlY2F1c2UgbWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbC5cbiAgICAgIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gICAgICAvLyBVc2luZyBtZW1vaXplZFN0YXRlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb3VudC91cGRhdGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgc3RhdGVmdWwgaG9vayBpcyB1c2VkLlxuICAgICAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAgICAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBoYW5kbGVzIGFuIGVkZ2UgY2FzZSB3aGVyZSBhIGNvbXBvbmVudCBpcyB1cGRhdGluZyxcbiAgICAgICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgICAgICAvLyBidXQgd2l0aCB0aGUgZXh0cmEgREVWIHZhbGlkYXRpb24gdG8gZW5zdXJlIGhvb2tzIG9yZGVyaW5nIGhhc24ndCBjaGFuZ2VkLlxuICAgICAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBJbiBTdHJpY3QgTW9kZSwgZHVyaW5nIGRldmVsb3BtZW50LCB1c2VyIGZ1bmN0aW9ucyBhcmUgZG91YmxlIGludm9rZWQgdG9cbiAgICAgIC8vIGhlbHAgZGV0ZWN0IHNpZGUgZWZmZWN0cy4gVGhlIGxvZ2ljIGZvciBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZCBmb3IgaW5cbiAgICAgIC8vIGhvb2sgY29tcG9uZW50cyBpcyBhIGJpdCBjb21wbGV4IHNvIGxldCdzIGJyZWFrIGl0IGRvd24uXG4gICAgICAvL1xuICAgICAgLy8gV2Ugd2lsbCBpbnZva2UgdGhlIGVudGlyZSBjb21wb25lbnQgZnVuY3Rpb24gdHdpY2UuIEhvd2V2ZXIsIGR1cmluZyB0aGVcbiAgICAgIC8vIHNlY29uZCBpbnZvY2F0aW9uIG9mIHRoZSBjb21wb25lbnQsIHRoZSBob29rIHN0YXRlIGZyb20gdGhlIGZpcnN0XG4gICAgICAvLyBpbnZvY2F0aW9uIHdpbGwgYmUgcmV1c2VkLiBUaGF0IG1lYW5zIHRoaW5ncyBsaWtlIGB1c2VNZW1vYCBmdW5jdGlvbnMgd29uJ3RcbiAgICAgIC8vIHJ1biBhZ2FpbiwgYmVjYXVzZSB0aGUgZGVwcyB3aWxsIG1hdGNoIGFuZCB0aGUgbWVtb2l6ZWQgcmVzdWx0IHdpbGxcbiAgICAgIC8vIGJlIHJldXNlZC5cbiAgICAgIC8vXG4gICAgICAvLyBXZSB3YW50IG1lbW9pemVkIGZ1bmN0aW9ucyB0byBydW4gdHdpY2UsIHRvbywgc28gYWNjb3VudCBmb3IgdGhpcywgdXNlclxuICAgICAgLy8gZnVuY3Rpb25zIGFyZSBkb3VibGUgaW52b2tlZCBkdXJpbmcgdGhlICpmaXJzdCogaW52b2NhdGlvbiBvZiB0aGUgY29tcG9uZW50XG4gICAgICAvLyBmdW5jdGlvbiwgYW5kIGFyZSAqbm90KiBkb3VibGUgaW52b2tlZCBkdXJpbmcgdGhlIHNlY29uZCBpbmNvdmF0aW9uOlxuICAgICAgLy9cbiAgICAgIC8vIC0gRmlyc3QgZXhlY3V0aW9uIG9mIGNvbXBvbmVudCBmdW5jdGlvbjogdXNlciBmdW5jdGlvbnMgYXJlIGRvdWJsZSBpbnZva2VkXG4gICAgICAvLyAtIFNlY29uZCBleGVjdXRpb24gb2YgY29tcG9uZW50IGZ1bmN0aW9uIChpbiBTdHJpY3QgTW9kZSwgZHVyaW5nXG4gICAgICAvLyAgIGRldmVsb3BtZW50KTogdXNlciBmdW5jdGlvbnMgYXJlIG5vdCBkb3VibGUgaW52b2tlZC5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsIGZvciBhIGZldyByZWFzb25zOyBtb3N0IGltcG9ydGFudGx5LCBpdCdzIGJlY2F1c2Ugb2ZcbiAgICAgIC8vIGhvdyBgdXNlYCB3b3JrcyB3aGVuIHNvbWV0aGluZyBzdXNwZW5kczogaXQgcmV1c2VzIHRoZSBwcm9taXNlIHRoYXQgd2FzXG4gICAgICAvLyBwYXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBhdHRlbXB0LiBUaGlzIGlzIGl0c2VsZiBhIGZvcm0gb2YgbWVtb2l6YXRpb24uXG4gICAgICAvLyBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbWVtb2l6ZSB0aGUgcmVhY3RpdmUgaW5wdXRzIHRvIHRoZSBgdXNlYCBjYWxsIHVzaW5nXG4gICAgICAvLyBhIGhvb2sgKGkuZS4gYHVzZU1lbW9gKSwgd2hpY2ggbWVhbnMsIHRoZSByZWFjdGl2ZSBpbnB1dHMgdG8gYHVzZWAgbXVzdFxuICAgICAgLy8gY29tZSBmcm9tIHRoZSBzYW1lIGNvbXBvbmVudCBpbnZvY2F0aW9uIGFzIHRoZSBvdXRwdXQuXG4gICAgICAvL1xuICAgICAgLy8gVGhlcmUgYXJlIHBsZW50eSBvZiB0ZXN0cyB0byBlbnN1cmUgdGhpcyBiZWhhdmlvciBpcyBjb3JyZWN0LlxuXG4gICAgICB2YXIgc2hvdWxkRG91YmxlUmVuZGVyREVWID1cbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSBzaG91bGREb3VibGVSZW5kZXJERVY7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9IGZhbHNlOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlXG5cbiAgICAgIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAgICAgLy8gS2VlcCByZW5kZXJpbmcgdW50aWwgdGhlIGNvbXBvbmVudCBzdGFiaWxpemVzICh0aGVyZSBhcmUgbm8gbW9yZSByZW5kZXJcbiAgICAgICAgLy8gcGhhc2UgdXBkYXRlcykuXG4gICAgICAgIGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkRG91YmxlUmVuZGVyREVWKSB7XG4gICAgICAgIC8vIEluIGRldmVsb3BtZW50LCBjb21wb25lbnRzIGFyZSBpbnZva2VkIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUgZWZmZWN0cy5cbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgICAgIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAgICAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmNlLlxuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjsgLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gICAgICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuICAgICAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID1cbiAgICAgICAgY3VycmVudEhvb2sgIT09IG51bGwgJiYgY3VycmVudEhvb2submV4dCAhPT0gbnVsbDtcbiAgICAgIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIENvbmZpcm0gdGhhdCBhIHN0YXRpYyBmbGFnIHdhcyBub3QgYWRkZWQgb3IgcmVtb3ZlZCBzaW5jZSB0aGUgbGFzdFxuICAgICAgICAvLyByZW5kZXIuIElmIHRoaXMgZmlyZXMsIGl0IHN1Z2dlc3RzIHRoYXQgd2UgaW5jb3JyZWN0bHkgcmVzZXQgdGhlIHN0YXRpY1xuICAgICAgICAvLyBmbGFncyBpbiBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBUaGlzIGhhcyBoYXBwZW5lZCBiZWZvcmUsIGZvclxuICAgICAgICAvLyBleGFtcGxlLCBpbiB0aGUgU3VzcGVuc2VMaXN0IGltcGxlbWVudGF0aW9uLlxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmXG4gICAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiBTdGF0aWNNYXNrKSAhPT1cbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIFN0YXRpY01hc2spICYmIC8vIERpc2FibGUgdGhpcyB3YXJuaW5nIGluIGxlZ2FjeSBtb2RlLCBiZWNhdXNlIGxlZ2FjeSBTdXNwZW5zZSBpcyB3ZWlyZFxuICAgICAgICAgIC8vIGFuZCBjcmVhdGVzIGZhbHNlIHBvc2l0aXZlcy4gVG8gbWFrZSB0aGlzIHdvcmsgaW4gbGVnYWN5IG1vZGUsIHdlJ2RcbiAgICAgICAgICAvLyBuZWVkIHRvIG1hcmsgZmliZXJzIHRoYXQgY29tbWl0IGluIGFuIGluY29tcGxldGUgc3RhdGUsIHNvbWVob3cuIEZvclxuICAgICAgICAgIC8vIG5vdyBJJ2xsIGRpc2FibGUgdGhlIHdhcm5pbmcgdGhhdCBtb3N0IG9mIHRoZSBidWdzIHRoYXQgd291bGQgdHJpZ2dlclxuICAgICAgICAgIC8vIGl0IGFyZSBlaXRoZXIgZXhjbHVzaXZlIHRvIGNvbmN1cnJlbnQgbW9kZSBvciBleGlzdCBpbiBib3RoLlxuICAgICAgICAgIChjdXJyZW50Lm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZVxuICAgICAgICApIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEV4cGVjdGVkIHN0YXRpYyBmbGFnIHdhcyBtaXNzaW5nLiBQbGVhc2UgXCIgK1xuICAgICAgICAgICAgICBcIm5vdGlmeSB0aGUgUmVhY3QgdGVhbS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGlzIGlzIHJlc2V0IGJ5IGNoZWNrRGlkUmVuZGVySWRIb29rXG4gICAgICAvLyBsb2NhbElkQ291bnRlciA9IDA7XG5cbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgXCIgK1xuICAgICAgICAgICAgXCJlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGNoZWNrSWZVc2VXcmFwcGVkSW5UcnlDYXRjaCgpKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPVxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJVbmtub3duXCI7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZGlkV2FybkFib3V0VXNlV3JhcHBlZEluVHJ5Q2F0Y2guaGFzKGNvbXBvbmVudE5hbWUpICYmIC8vIFRoaXMgd2FybmluZyBhbHNvIGZpcmVzIGlmIHlvdSBzdXNwZW5kIHdpdGggYHVzZWAgaW5zaWRlIGFuXG4gICAgICAgICAgICAvLyBhc3luYyBjb21wb25lbnQuIFNpbmNlIHdlIHdhcm4gZm9yIHRoYXQgYWJvdmUsIHdlJ2xsIHNpbGVuY2UgdGhpc1xuICAgICAgICAgICAgLy8gc2Vjb25kIHdhcm5pbmcgYnkgY2hlY2tpbmcgaGVyZS5cbiAgICAgICAgICAgICFkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiYHVzZWAgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIHRyeS9jYXRjaCBibG9jay4gVGhpcyBpcyBub3QgYWxsb3dlZCBcIiArXG4gICAgICAgICAgICAgICAgXCJhbmQgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gVG8gaGFuZGxlIGVycm9ycyB0cmlnZ2VyZWQgXCIgK1xuICAgICAgICAgICAgICAgIFwiYnkgYHVzZWAsIHdyYXAgeW91ciBjb21wb25lbnQgaW4gYSBlcnJvciBib3VuZGFyeS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYXlTdXNwZW5kZWRDb21wb25lbnRXaXRoSG9va3MoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBwcm9wcyxcbiAgICAgIHNlY29uZEFyZ1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlcGxheSBhIGNvbXBvbmVudCB0aGF0IHByZXZpb3VzbHkgc3VzcGVuZGVkLFxuICAgICAgLy8gYWZ0ZXIgaXRzIGRhdGEgcmVzb2x2ZXMuXG4gICAgICAvL1xuICAgICAgLy8gSXQncyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiByZW5kZXJXaXRoSG9va3MsIGJ1dCBpdCBkb2Vzbid0IG5lZWQgdG8gZG9cbiAgICAgIC8vIG1vc3Qgb2YgdGhlIHNldCB1cCB3b3JrIGJlY2F1c2UgdGhleSB3ZXJlbid0IHJlc2V0IHdoZW4gd2Ugc3VzcGVuZGVkOyB0aGV5XG4gICAgICAvLyBvbmx5IGdldCByZXNldCB3aGVuIHRoZSBjb21wb25lbnQgZWl0aGVyIGNvbXBsZXRlcyAoZmluaXNoUmVuZGVyaW5nSG9va3MpXG4gICAgICAvLyBvciB1bndpbmRzIChyZXNldEhvb2tzT25VbndpbmQpLlxuICAgICAge1xuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID1cbiAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHByb3BzLFxuICAgICAgICBzZWNvbmRBcmdcbiAgICAgICk7XG4gICAgICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzQWdhaW4od29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZykge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIHBlcmZvcm0gYW5vdGhlciByZW5kZXIgcGFzcy4gSXQncyB1c2VkIHdoZW4gc2V0U3RhdGUgaXNcbiAgICAgIC8vIGNhbGxlZCBkdXJpbmcgcmVuZGVyLCBhbmQgZm9yIGRvdWJsZSBpbnZva2luZyBjb21wb25lbnRzIGluIFN0cmljdCBNb2RlXG4gICAgICAvLyBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIHBhc3MgaXMgcmV1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLiBTbywgc3RhdGVcbiAgICAgIC8vIHVwZGF0ZXMgdGhhdCB3ZXJlIGFscmVhZHkgcHJvY2Vzc2VkIGFyZSBub3QgcHJvY2Vzc2VkIGFnYWluLCBhbmQgbWVtb2l6ZWRcbiAgICAgIC8vIGZ1bmN0aW9ucyAoYHVzZU1lbW9gKSBhcmUgbm90IGludm9rZWQgYWdhaW4uXG4gICAgICAvL1xuICAgICAgLy8gS2VlcCByZW5kZXJpbmcgaW4gYSBsb29wIGZvciBhcyBsb25nIGFzIHJlbmRlciBwaGFzZSB1cGRhdGVzIGNvbnRpbnVlIHRvXG4gICAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG4gICAgICB2YXIgY2hpbGRyZW47XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcykge1xuICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBhIHVzZSgpIHZhbHVlIGRlcGVuZGVkIG9uIGEgc3RhdGUgdGhhdCB3YXMgdXBkYXRlZCBpblxuICAgICAgICAgIC8vIHRoaXMgcmVyZW5kZXIsIHNvIHdlIG5lZWQgdG8gd2F0Y2ggZm9yIGRpZmZlcmVudCB0aGVuYWJsZXMgdGhpcyB0aW1lLlxuICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcblxuICAgICAgICBpZiAobnVtYmVyT2ZSZVJlbmRlcnMgPj0gUkVfUkVOREVSX0xJTUlUKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgXCIgK1xuICAgICAgICAgICAgICBcImFuIGluZmluaXRlIGxvb3AuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcblxuICAgICAgICB7XG4gICAgICAgICAgLy8gRXZlbiB3aGVuIGhvdCByZWxvYWRpbmcsIGFsbG93IGRlcGVuZGVuY2llcyB0byBzdGFiaWxpemVcbiAgICAgICAgICAvLyBhZnRlciBmaXJzdCByZW5kZXIgdG8gcHJldmVudCBpbmZpbml0ZSByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgICB9IC8vIFN0YXJ0IG92ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cbiAgICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIEFsc28gdmFsaWRhdGUgaG9vayBvcmRlciBmb3IgY2FzY2FkaW5nIHVwZGF0ZXMuXG4gICAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG5cbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBmbGFncyBoZXJlLCBiZWNhdXNlIHRoZXkncmUgcmVzZXQgaW4gdGhlXG4gICAgICAvLyBjb21wbGV0ZSBwaGFzZSAoYnViYmxlUHJvcGVydGllcykuXG5cbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oXG4gICAgICAgICAgTW91bnRQYXNzaXZlRGV2IHxcbiAgICAgICAgICBNb3VudExheW91dERldiB8XG4gICAgICAgICAgUGFzc2l2ZSQxIHxcbiAgICAgICAgICBVcGRhdGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oUGFzc2l2ZSQxIHwgVXBkYXRlKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gICAgICAvLyBUaGlzIGlzIGNhbGxlZCBpbW1lZGlhZXRseSBhZnRlciBhIHRocm93LiBJdCBzaG91bGRuJ3QgcmVzZXQgdGhlIGVudGlyZVxuICAgICAgLy8gbW9kdWxlIHN0YXRlLCBiZWNhdXNlIHRoZSB3b3JrIGxvb3AgbWlnaHQgZGVjaWRlIHRvIHJlcGxheSB0aGUgY29tcG9uZW50XG4gICAgICAvLyBhZ2FpbiB3aXRob3V0IHJld2luZGluZy5cbiAgICAgIC8vXG4gICAgICAvLyBJdCBzaG91bGQgb25seSByZXNldCB0aGluZ3MgbGlrZSB0aGUgY3VycmVudCBkaXNwYXRjaGVyLCB0byBwcmV2ZW50IGhvb2tzXG4gICAgICAvLyBmcm9tIGJlaW5nIGNhbGxlZCBvdXRzaWRlIG9mIGEgY29tcG9uZW50LlxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgICAgIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jZS5cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0SG9va3NPblVud2luZCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAgICAgLy8gVGhlcmUgd2VyZSByZW5kZXIgcGhhc2UgdXBkYXRlcy4gVGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIHRoaXMgcmVuZGVyXG4gICAgICAgIC8vIHBoYXNlLCB3aGljaCB3ZSBhcmUgbm93IGFib3J0aW5nLiBSZW1vdmUgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWVzIHNvXG4gICAgICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgcHJvY2Vzc2VkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgICAgIC8vIG5vdCBoYXZlIGEgY2xvbmUsIHRoYXQgbWVhbnMgaXQgd2Fzbid0IHByb2Nlc3NlZCwgYW5kIHRoZSB1cGRhdGVzIHdlcmVcbiAgICAgICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIHZhciBob29rID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICB3aGlsZSAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhvb2sgPSBob29rLm5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gICAgICB2YXIgaG9vayA9IHtcbiAgICAgICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICAgICAgYmFzZVN0YXRlOiBudWxsLFxuICAgICAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgICAgIHF1ZXVlOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYm90aCBmb3IgdXBkYXRlcyBhbmQgZm9yIHJlLXJlbmRlcnMgdHJpZ2dlcmVkIGJ5IGFcbiAgICAgIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAgICAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAgICAgLy8gdXNlIGFzIGEgYmFzZS5cbiAgICAgIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgICAgIGlmIChjdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgICAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgICAgICBpZiAobmV4dEN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRGaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW5pdGlhbCByZW5kZXIuIFRoaXMgYnJhbmNoIGlzIHJlYWNoZWQgd2hlbiB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAvLyBzdXNwZW5kcywgcmVzdW1lcywgdGhlbiByZW5kZXJzIGFuIGFkZGl0aW9uYWwgaG9vay5cbiAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBiZSByZWFjaGVkIGJlY2F1c2Ugd2Ugc2hvdWxkIHN3aXRjaCB0byB0aGUgbW91bnQgZGlzcGF0Y2hlciBmaXJzdC5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJVcGRhdGUgaG9vayBjYWxsZWQgb24gaW5pdGlhbCByZW5kZXIuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuIFdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIGN1cnJlbnQgaG9vay5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICAgICAgbmV3SG9vaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5ld0hvb2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbiAgICB9IC8vIE5PVEU6IGRlZmluaW5nIHR3byB2ZXJzaW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHRvIGF2b2lkIHNpemUgaW1wYWN0IHdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLlxuICAgIC8vIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlvbiB3YXMgaW5saW5lZCwgdGhlIGFkZGl0aW9uYWwgYG1lbW9DYWNoZWAgcHJvcGVydHkgbWFrZXMgaXQgbm90IGlubGluZWQuXG5cbiAgICB2YXIgY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZTtcblxuICAgIHtcbiAgICAgIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFzdEVmZmVjdDogbnVsbCxcbiAgICAgICAgICBldmVudHM6IG51bGwsXG4gICAgICAgICAgc3RvcmVzOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVzZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICAvLyBUcmFjayB0aGUgcG9zaXRpb24gb2YgdGhlIHRoZW5hYmxlIHdpdGhpbiB0aGlzIGZpYmVyLlxuICAgICAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXI7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciArPSAxO1xuXG4gICAgICBpZiAodGhlbmFibGVTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGVuYWJsZVN0YXRlID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KTtcblxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZSA9PT0gbnVsbCAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsXG4gICAgICAgICAgPyBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPT09IG51bGxcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID09PSBudWxsKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEluaXRpYWwgcmVuZGVyLCBhbmQgZWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIGNvbXBvbmVudCBpc1xuICAgICAgICAvLyBjYWxsZWQsIG9yIHRoZXJlIHdlcmUgbm8gSG9va3MgY2FsbGVkIGFmdGVyIHRoaXMgdXNlKCkgdGhlIHByZXZpb3VzXG4gICAgICAgIC8vIHRpbWUgKHBlcmhhcHMgYmVjYXVzZSBpdCB0aHJldykuIFN1YnNlcXVlbnQgSG9vayBjYWxscyBzaG91bGQgdXNlIHRoZVxuICAgICAgICAvLyBtb3VudCBkaXNwYXRjaGVyLlxuICAgICAgICB7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1c2UodXNhYmxlKSB7XG4gICAgICBpZiAodXNhYmxlICE9PSBudWxsICYmIHR5cGVvZiB1c2FibGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgICBpZiAodHlwZW9mIHVzYWJsZS50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgdGhlbmFibGUuXG4gICAgICAgICAgdmFyIHRoZW5hYmxlID0gdXNhYmxlO1xuICAgICAgICAgIHJldHVybiB1c2VUaGVuYWJsZSh0aGVuYWJsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodXNhYmxlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpIHtcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHVzYWJsZTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBbiB1bnN1cHBvcnRlZCB0eXBlIHdhcyBwYXNzZWQgdG8gdXNlKCk6IFwiICsgU3RyaW5nKHVzYWJsZSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgICAgIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gICAgICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG5cbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG4gICAgICAgICAgaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gICAgICB9XG5cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgICAgdmFyIHF1ZXVlID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gcXVldWU7XG4gICAgICB2YXIgZGlzcGF0Y2ggPSAocXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaFJlZHVjZXJBY3Rpb24uYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgcXVldWVcbiAgICAgICkpO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVkdWNlckltcGwoaG9vaywgY3VycmVudEhvb2ssIHJlZHVjZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXJJbXBsKGhvb2ssIGN1cnJlbnQsIHJlZHVjZXIpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICAgICAgdmFyIGJhc2VRdWV1ZSA9IGhvb2suYmFzZVF1ZXVlOyAvLyBUaGUgbGFzdCBwZW5kaW5nIHVwZGF0ZSB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG5cbiAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gICAgICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGhhdmUgbmV3IHVwZGF0ZXMgdGhhdCBoYXZlbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cbiAgICAgICAgLy8gV2UnbGwgYWRkIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG4gICAgICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBNZXJnZSB0aGUgcGVuZGluZyBxdWV1ZSBhbmQgdGhlIGJhc2UgcXVldWUuXG4gICAgICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdGaXJzdDtcbiAgICAgICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgICAgICAvLyB0aGUgZnV0dXJlIGlmIHdlIGltcGxlbWVudCByZXN1bWluZywgb3Igc29tZSBmb3JtIG9mIHRoYXQuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGJhc2VTdGF0ZSA9IGhvb2suYmFzZVN0YXRlO1xuXG4gICAgICBpZiAoYmFzZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHVwZGF0ZXMsIHRoZW4gdGhlIG1lbW9pemVkIHN0YXRlIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gc2FtZSBhcyB0aGUgYmFzZSBzdGF0ZS4gQ3VycmVudGx5IHRoZXNlIG9ubHkgZGl2ZXJnZSBpbiB0aGUgY2FzZSBvZlxuICAgICAgICAvLyB1c2VPcHRpbWlzdGljLCBiZWNhdXNlIHVzZU9wdGltaXN0aWMgYWNjZXB0cyBhIG5ldyBiYXNlU3RhdGUgb25cbiAgICAgICAgLy8gZXZlcnkgcmVuZGVyLlxuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBiYXNlU3RhdGU7IC8vIFdlIGRvbid0IG5lZWQgdG8gY2FsbCBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSBiZWNhdXNlXG4gICAgICAgIC8vIGJhc2VTdGF0ZSBpcyBkZXJpdmVkIGZyb20gb3RoZXIgcmVhY3RpdmUgdmFsdWVzLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgICAgIHZhciBmaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBiYXNlU3RhdGU7XG4gICAgICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgICAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgICAgICB2YXIgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSBmaXJzdDtcbiAgICAgICAgdmFyIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSBmYWxzZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gQW4gZXh0cmEgT2Zmc2NyZWVuTGFuZSBiaXQgaXMgYWRkZWQgdG8gdXBkYXRlcyB0aGF0IHdlcmUgbWFkZSB0b1xuICAgICAgICAgIC8vIGEgaGlkZGVuIHRyZWUsIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB1cGRhdGVzIHRoYXQgd2VyZVxuICAgICAgICAgIC8vIGFscmVhZHkgdGhlcmUgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLlxuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gcmVtb3ZlTGFuZXModXBkYXRlLmxhbmUsIE9mZnNjcmVlbkxhbmUpO1xuICAgICAgICAgIHZhciBpc0hpZGRlblVwZGF0ZSA9IHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lOyAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSB3YXMgbWFkZSB3aGlsZSB0aGUgdHJlZSB3YXMgaGlkZGVuLiBJZiBzbywgdGhlblxuICAgICAgICAgIC8vIGl0J3Mgbm90IGEgXCJiYXNlXCIgdXBkYXRlIGFuZCB3ZSBzaG91bGQgZGlzcmVnYXJkIHRoZSBleHRyYSBiYXNlIGxhbmVzXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlIGFkZGVkIHRvIHJlbmRlckxhbmVzIHdoZW4gd2UgZW50ZXJlZCB0aGUgT2Zmc2NyZWVuIHRyZWUuXG5cbiAgICAgICAgICB2YXIgc2hvdWxkU2tpcFVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICA/ICFpc1N1YnNldE9mTGFuZXMoZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMoKSwgdXBkYXRlTGFuZSlcbiAgICAgICAgICAgIDogIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkU2tpcFVwZGF0ZSkge1xuICAgICAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHJldmVydExhbmU6IHVwZGF0ZS5yZXZlcnRMYW5lLFxuICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgbmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAgICAgLy8gcmVuZGVyTGFuZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICAgICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLFxuICAgICAgICAgICAgICB1cGRhdGVMYW5lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh1cGRhdGVMYW5lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhbiBvcHRpbWlzdGljIHVwZGF0ZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIGFwcGx5IGl0IG5vdy5cbiAgICAgICAgICAgICAgLy8gQnV0LCBpZiB0aGVyZSB3ZXJlIGVhcmxpZXIgdXBkYXRlcyB0aGF0IHdlcmUgc2tpcHBlZCwgd2UgbmVlZCB0b1xuICAgICAgICAgICAgICAvLyBsZWF2ZSB0aGlzIHVwZGF0ZSBpbiB0aGUgcXVldWUgc28gaXQgY2FuIGJlIHJlYmFzZWQgbGF0ZXIuXG4gICAgICAgICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICAgICAgICByZXZlcnRMYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgICAgICAgfSAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSBpcyBwYXJ0IG9mIGEgcGVuZGluZyBhc3luYyBhY3Rpb24uIElmIHNvLFxuICAgICAgICAgICAgICAvLyB3ZSdsbCBuZWVkIHRvIHN1c3BlbmQgdW50aWwgdGhlIGFjdGlvbiBoYXMgZmluaXNoZWQsIHNvIHRoYXQgaXQnc1xuICAgICAgICAgICAgICAvLyBiYXRjaGVkIHRvZ2V0aGVyIHdpdGggZnV0dXJlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgYWN0aW9uLlxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVMYW5lID09PSBwZWVrRW50YW5nbGVkQWN0aW9uTGFuZSgpKSB7XG4gICAgICAgICAgICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG5cbiAgICAgICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgICAgICByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlLmhhc0VhZ2VyU3RhdGUpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgaXMgYSBzdGF0ZSB1cGRhdGUgKG5vdCBhIHJlZHVjZXIpIGFuZCB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksXG4gICAgICAgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGVcbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSB1cGRhdGUuZWFnZXJTdGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gZmlyc3QpO1xuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3Q7XG4gICAgICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuICAgICAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTsgLy8gQ2hlY2sgaWYgdGhpcyB1cGRhdGUgaXMgcGFydCBvZiBhIHBlbmRpbmcgYXN5bmMgYWN0aW9uLiBJZiBzbywgd2UnbGxcbiAgICAgICAgICAvLyBuZWVkIHRvIHN1c3BlbmQgdW50aWwgdGhlIGFjdGlvbiBoYXMgZmluaXNoZWQsIHNvIHRoYXQgaXQncyBiYXRjaGVkXG4gICAgICAgICAgLy8gdG9nZXRoZXIgd2l0aCBmdXR1cmUgdXBkYXRlcyBpbiB0aGUgc2FtZSBhY3Rpb24uXG4gICAgICAgICAgLy8gVE9ETzogT25jZSB3ZSBzdXBwb3J0IGhvb2tzIGluc2lkZSB1c2VNZW1vIChvciBhbiBlcXVpdmFsZW50XG4gICAgICAgICAgLy8gbWVtb2l6YXRpb24gYm91bmRhcnkgbGlrZSBGb3JnZXQpLCBob2lzdCB0aGlzIGxvZ2ljIHNvIHRoYXQgaXQgb25seVxuICAgICAgICAgIC8vIHN1c3BlbmRzIGlmIHRoZSBtZW1vIGJvdW5kYXJ5IHByb2R1Y2VzIGEgbmV3IHZhbHVlLlxuXG4gICAgICAgICAgaWYgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IHBlZWtFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSgpO1xuXG4gICAgICAgICAgICBpZiAoZW50YW5nbGVkQWN0aW9uVGhlbmFibGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogSW5zdGVhZCBvZiB0aGUgdGhyb3dpbmcgdGhlIHRoZW5hYmxlIGRpcmVjdGx5LCB0aHJvdyBhXG4gICAgICAgICAgICAgIC8vIHNwZWNpYWwgb2JqZWN0IGxpa2UgYHVzZWAgZG9lcyBzbyB3ZSBjYW4gZGV0ZWN0IGlmIGl0J3MgY2FwdHVyZWRcbiAgICAgICAgICAgICAgLy8gYnkgdXNlcnNwYWNlLlxuICAgICAgICAgICAgICB0aHJvdyBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICAgICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBgcXVldWUubGFuZXNgIGlzIHVzZWQgZm9yIGVudGFuZ2xpbmcgdHJhbnNpdGlvbnMuIFdlIGNhbiBzZXQgaXQgYmFjayB0b1xuICAgICAgICAvLyB6ZXJvIG9uY2UgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICBxdWV1ZS5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gICAgICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbiAgICAgIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICAgICAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0O1xuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuICAgICAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlOyAvLyBEb24ndCBwZXJzaXN0IHRoZSBzdGF0ZSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgICAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgICAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuXG4gICAgICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICAgICAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBuZXh0U25hcHNob3Q7XG5cbiAgICAgIHtcbiAgICAgICAgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIGNhY2hlZFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0U25hcHNob3QsIGNhY2hlZFNuYXBzaG90KSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVubGVzcyB3ZSdyZSByZW5kZXJpbmcgYSBibG9ja2luZyBsYW5lLCBzY2hlZHVsZSBhIGNvbnNpc3RlbmN5IGNoZWNrLlxuICAgICAgICAvLyBSaWdodCBiZWZvcmUgY29tbWl0dGluZywgd2Ugd2lsbCB3YWxrIHRoZSB0cmVlIGFuZCBjaGVjayBpZiBhbnkgb2YgdGhlXG4gICAgICAgIC8vIHN0b3JlcyB3ZXJlIG11dGF0ZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHdvbid0IGRvIHRoaXMgaWYgd2UncmUgaHlkcmF0aW5nIHNlcnZlci1yZW5kZXJlZCBjb250ZW50LCBiZWNhdXNlIGlmXG4gICAgICAgIC8vIHRoZSBjb250ZW50IGlzIHN0YWxlLCBpdCdzIGFscmVhZHkgdmlzaWJsZSBhbnl3YXkuIEluc3RlYWQgd2UnbGwgcGF0Y2hcbiAgICAgICAgLy8gaXQgdXAgaW4gYSBwYXNzaXZlIGVmZmVjdC5cblxuICAgICAgICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gICAgICAgIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJvb3RSZW5kZXJMYW5lcyA9IGdldFdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKCk7XG5cbiAgICAgICAgaWYgKCFpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCByb290UmVuZGVyTGFuZXMpKSB7XG4gICAgICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIG5leHRTbmFwc2hvdCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGUgY3VycmVudCBzbmFwc2hvdCBmcm9tIHRoZSBzdG9yZSBvbiBldmVyeSByZW5kZXIuIFRoaXMgYnJlYWtzIHRoZVxuICAgICAgLy8gbm9ybWFsIHJ1bGVzIG9mIFJlYWN0LCBhbmQgb25seSB3b3JrcyBiZWNhdXNlIHN0b3JlIHVwZGF0ZXMgYXJlXG4gICAgICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5leHRTbmFwc2hvdDtcbiAgICAgIHZhciBpbnN0ID0ge1xuICAgICAgICB2YWx1ZTogbmV4dFNuYXBzaG90LFxuICAgICAgICBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3RcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gaW5zdDsgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIHN1YnNjcmliZSB0byB0aGUgc3RvcmUuXG5cbiAgICAgIG1vdW50RWZmZWN0KHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSwgW1xuICAgICAgICBzdWJzY3JpYmVcbiAgICAgIF0pOyAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gdXBkYXRlIHRoZSBtdXRhYmxlIGluc3RhbmNlIGZpZWxkcy4gV2Ugd2lsbCB1cGRhdGVcbiAgICAgIC8vIHRoaXMgd2hlbmV2ZXIgc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgb3IgdmFsdWUgY2hhbmdlcy4gQmVjYXVzZSB0aGVyZSdzIG5vXG4gICAgICAvLyBjbGVhbi11cCBmdW5jdGlvbiwgYW5kIHdlIHRyYWNrIHRoZSBkZXBzIGNvcnJlY3RseSwgd2UgY2FuIGNhbGwgcHVzaEVmZmVjdFxuICAgICAgLy8gZGlyZWN0bHksIHdpdGhvdXQgc3RvcmluZyBhbnkgYWRkaXRpb25hbCBzdGF0ZS4gRm9yIHRoZSBzYW1lIHJlYXNvbiwgd2VcbiAgICAgIC8vIGRvbid0IG5lZWQgdG8gc2V0IGEgc3RhdGljIGZsYWcsIGVpdGhlci5cblxuICAgICAgZmliZXIuZmxhZ3MgfD0gUGFzc2l2ZSQxO1xuICAgICAgcHVzaEVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKG51bGwsIGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSxcbiAgICAgICAgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXh0U25hcHNob3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBnZXRTbmFwc2hvdCxcbiAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTsgLy8gUmVhZCB0aGUgY3VycmVudCBzbmFwc2hvdCBmcm9tIHRoZSBzdG9yZSBvbiBldmVyeSByZW5kZXIuIFRoaXMgYnJlYWtzIHRoZVxuICAgICAgLy8gbm9ybWFsIHJ1bGVzIG9mIFJlYWN0LCBhbmQgb25seSB3b3JrcyBiZWNhdXNlIHN0b3JlIHVwZGF0ZXMgYXJlXG4gICAgICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cbiAgICAgIHZhciBuZXh0U25hcHNob3Q7XG5cbiAgICAgIHtcbiAgICAgICAgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIGNhY2hlZFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0U25hcHNob3QsIGNhY2hlZFNuYXBzaG90KSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2U25hcHNob3QgPSAoY3VycmVudEhvb2sgfHwgaG9vaykubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHZhciBzbmFwc2hvdENoYW5nZWQgPSAhb2JqZWN0SXMocHJldlNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuXG4gICAgICBpZiAoc25hcHNob3RDaGFuZ2VkKSB7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5leHRTbmFwc2hvdDtcbiAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3QgPSBob29rLnF1ZXVlO1xuICAgICAgdXBkYXRlRWZmZWN0KHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSwgW1xuICAgICAgICBzdWJzY3JpYmVcbiAgICAgIF0pOyAvLyBXaGVuZXZlciBnZXRTbmFwc2hvdCBvciBzdWJzY3JpYmUgY2hhbmdlcywgd2UgbmVlZCB0byBjaGVjayBpbiB0aGVcbiAgICAgIC8vIGNvbW1pdCBwaGFzZSBpZiB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgbXV0YXRpb24uIEluIGNvbmN1cnJlbnQgbW9kZVxuICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGFsbCB0aGUgdGltZSwgYnV0IGV2ZW4gaW4gc3luY2hyb25vdXMgbW9kZSwgYW4gZWFybGllclxuICAgICAgLy8gZWZmZWN0IG1heSBoYXZlIG11dGF0ZWQgdGhlIHN0b3JlLlxuXG4gICAgICBpZiAoXG4gICAgICAgIGluc3QuZ2V0U25hcHNob3QgIT09IGdldFNuYXBzaG90IHx8XG4gICAgICAgIHNuYXBzaG90Q2hhbmdlZCB8fCAvLyBDaGVjayBpZiB0aGUgc3Vic2NyaWJlIGZ1bmN0aW9uIGNoYW5nZWQuIFdlIGNhbiBzYXZlIHNvbWUgbWVtb3J5IGJ5XG4gICAgICAgIC8vIGNoZWNraW5nIHdoZXRoZXIgd2Ugc2NoZWR1bGVkIGEgc3Vic2NyaXB0aW9uIGVmZmVjdCBhYm92ZS5cbiAgICAgICAgKHdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzSG9vay5tZW1vaXplZFN0YXRlLnRhZyAmIEhhc0VmZmVjdClcbiAgICAgICkge1xuICAgICAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlJDE7XG4gICAgICAgIHB1c2hFZmZlY3QoXG4gICAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgICB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgbmV4dFNuYXBzaG90LFxuICAgICAgICAgICAgZ2V0U25hcHNob3RcbiAgICAgICAgICApLFxuICAgICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgICAgbnVsbFxuICAgICAgICApOyAvLyBVbmxlc3Mgd2UncmUgcmVuZGVyaW5nIGEgYmxvY2tpbmcgbGFuZSwgc2NoZWR1bGUgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiAgICAgICAgLy8gUmlnaHQgYmVmb3JlIGNvbW1pdHRpbmcsIHdlIHdpbGwgd2FsayB0aGUgdHJlZSBhbmQgY2hlY2sgaWYgYW55IG9mIHRoZVxuICAgICAgICAvLyBzdG9yZXMgd2VyZSBtdXRhdGVkLlxuXG4gICAgICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICAgICAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0U25hcHNob3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIHJlbmRlcmVkU25hcHNob3QpIHtcbiAgICAgIGZpYmVyLmZsYWdzIHw9IFN0b3JlQ29uc2lzdGVuY3k7XG4gICAgICB2YXIgY2hlY2sgPSB7XG4gICAgICAgIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCxcbiAgICAgICAgdmFsdWU6IHJlbmRlcmVkU25hcHNob3RcbiAgICAgIH07XG4gICAgICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUuc3RvcmVzID0gW2NoZWNrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzdG9yZXMgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5zdG9yZXM7XG5cbiAgICAgICAgaWYgKHN0b3JlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLnN0b3JlcyA9IFtjaGVja107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RvcmVzLnB1c2goY2hlY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3RvcmVJbnN0YW5jZShmaWJlciwgaW5zdCwgbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdCkge1xuICAgICAgLy8gVGhlc2UgYXJlIHVwZGF0ZWQgaW4gdGhlIHBhc3NpdmUgcGhhc2VcbiAgICAgIGluc3QudmFsdWUgPSBuZXh0U25hcHNob3Q7XG4gICAgICBpbnN0LmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIFNvbWV0aGluZyBtYXkgaGF2ZSBiZWVuIG11dGF0ZWQgaW4gYmV0d2VlbiByZW5kZXIgYW5kIGNvbW1pdC4gVGhpcyBjb3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIGluIGFuIGV2ZW50IHRoYXQgZmlyZWQgYmVmb3JlIHRoZSBwYXNzaXZlIGVmZmVjdHMsIG9yIGl0IGNvdWxkXG4gICAgICAvLyBoYXZlIGJlZW4gaW4gYSBsYXlvdXQgZWZmZWN0LiBJbiB0aGF0IGNhc2UsIHdlIHdvdWxkIGhhdmUgdXNlZCB0aGUgb2xkXG4gICAgICAvLyBzbmFwc2hvIGFuZCBnZXRTbmFwc2hvdCB2YWx1ZXMgdG8gYmFpbCBvdXQuIFdlIG5lZWQgdG8gY2hlY2sgb25lIG1vcmUgdGltZS5cblxuICAgICAgaWYgKGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkpIHtcbiAgICAgICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgICAgIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3Vic2NyaWJlVG9TdG9yZShmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSB7XG4gICAgICB2YXIgaGFuZGxlU3RvcmVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoZSBzdG9yZSBjaGFuZ2VkLiBDaGVjayBpZiB0aGUgc25hcHNob3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlXG4gICAgICAgIC8vIHJlYWQgZnJvbSB0aGUgc3RvcmUuXG4gICAgICAgIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgICAgICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgICAgICAgZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdG9yZSBhbmQgcmV0dXJuIGEgY2xlYW4tdXAgZnVuY3Rpb24uXG5cbiAgICAgIHJldHVybiBzdWJzY3JpYmUoaGFuZGxlU3RvcmVDaGFuZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBwcmV2VmFsdWUgPSBpbnN0LnZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuICFvYmplY3RJcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpIHtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBpbml0aWFsU3RhdGVJbml0aWFsaXplciA9IGluaXRpYWxTdGF0ZTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcblxuICAgICAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuXG4gICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuXG4gICAgICAgICAgaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICB2YXIgcXVldWUgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gcXVldWU7XG4gICAgICByZXR1cm4gaG9vaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFN0YXRlSW1wbChpbml0aWFsU3RhdGUpO1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgICAgIHZhciBkaXNwYXRjaCA9IGRpc3BhdGNoU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgcXVldWVcbiAgICAgICk7XG4gICAgICBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgaW5zdCwgZGVwcykge1xuICAgICAgdmFyIGVmZmVjdCA9IHtcbiAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgICAgICBpbnN0OiBpbnN0LFxuICAgICAgICBkZXBzOiBkZXBzLFxuICAgICAgICAvLyBDaXJjdWxhclxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICAgICAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWZmZWN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gICAgICB7XG4gICAgICAgIHZhciBfcmVmMiA9IHtcbiAgICAgICAgICBjdXJyZW50OiBpbml0aWFsVmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gX3JlZjI7XG4gICAgICAgIHJldHVybiBfcmVmMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgaG9va0ZsYWdzLFxuICAgICAgICBjcmVhdGUsXG4gICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgIG5leHREZXBzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBlZmZlY3QgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gICAgICB2YXIgaW5zdCA9IGVmZmVjdC5pbnN0OyAvLyBjdXJyZW50SG9vayBpcyBudWxsIG9uIGluaXRpYWwgbW91bnQgd2hlbiByZXJlbmRlcmluZyBhZnRlciBhIHJlbmRlciBwaGFzZVxuICAgICAgLy8gc3RhdGUgdXBkYXRlIG9yIGZvciBzdHJpY3QgbW9kZS5cblxuICAgICAgaWYgKGN1cnJlbnRIb29rICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoaG9va0ZsYWdzLCBjcmVhdGUsIGluc3QsIG5leHREZXBzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgaG9va0ZsYWdzLFxuICAgICAgICBjcmVhdGUsXG4gICAgICAgIGluc3QsXG4gICAgICAgIG5leHREZXBzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgaWYgKFxuICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIE5vU3RyaWN0UGFzc2l2ZUVmZmVjdHNNb2RlKSA9PT0gTm9Nb2RlXG4gICAgICApIHtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKFxuICAgICAgICAgIE1vdW50UGFzc2l2ZURldiB8IFBhc3NpdmUkMSB8IFBhc3NpdmVTdGF0aWMsXG4gICAgICAgICAgUGFzc2l2ZSxcbiAgICAgICAgICBjcmVhdGUsXG4gICAgICAgICAgZGVwc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKFBhc3NpdmUkMSB8IFBhc3NpdmVTdGF0aWMsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbChQYXNzaXZlJDEsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgZmliZXJGbGFncyA9IFVwZGF0ZSB8IExheW91dFN0YXRpYztcblxuICAgICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICBmaWJlckZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcbiAgICAgICAgdmFyIGluc3QgPSBjcmVhdGUoKTtcbiAgICAgICAgcmVmQ2FsbGJhY2soaW5zdCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmVmQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgcmVmT2JqZWN0ID0gcmVmO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIXJlZk9iamVjdC5oYXNPd25Qcm9wZXJ0eShcImN1cnJlbnRcIikpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgICAgXCJhbiBvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZWZPYmplY3QuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgICAgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6IFwibnVsbFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG4gICAgICB2YXIgZWZmZWN0RGVwcyA9XG4gICAgICAgIGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgICAgIHZhciBmaWJlckZsYWdzID0gVXBkYXRlIHwgTGF5b3V0U3RhdGljO1xuXG4gICAgICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIGZpYmVyRmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gICAgICB9XG5cbiAgICAgIG1vdW50RWZmZWN0SW1wbChcbiAgICAgICAgZmliZXJGbGFncyxcbiAgICAgICAgTGF5b3V0LFxuICAgICAgICBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLFxuICAgICAgICBlZmZlY3REZXBzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gXCIgK1xuICAgICAgICAgICAgICBcInRoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogXCJudWxsXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cbiAgICAgIHZhciBlZmZlY3REZXBzID1cbiAgICAgICAgZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbChcbiAgICAgICAgVXBkYXRlLFxuICAgICAgICBMYXlvdXQsXG4gICAgICAgIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksXG4gICAgICAgIGVmZmVjdERlcHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgLy8gVGhpcyBob29rIGlzIG5vcm1hbGx5IGEgbm8tb3AuXG4gICAgICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG4gICAgfVxuXG4gICAgdmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbiAgICBmdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcblxuICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuICAgICAgICBuZXh0Q3JlYXRlKCk7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICAgICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7IC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG5cbiAgICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuXG4gICAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG4gICAgICAgIG5leHRDcmVhdGUoKTtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gICAgICByZXR1cm4gbmV4dFZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgcmVzb2x2ZWRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rO1xuICAgICAgdmFyIHByZXZWYWx1ZSA9IHJlc29sdmVkQ3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChob29rLCBwcmV2VmFsdWUsIHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gICAgICBpZiAoY3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHJlcmVuZGVyIGR1cmluZyBhIG1vdW50LlxuICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSByZXJlbmRlciBkdXJpbmcgYW4gdXBkYXRlLlxuICAgICAgICB2YXIgcHJldlZhbHVlID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHByZXZWYWx1ZSwgdmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIC8vIFdoZW4gYGluaXRpYWxWYWx1ZWAgaXMgcHJvdmlkZWQsIHdlIGRlZmVyIHRoZSBpbml0aWFsIHJlbmRlciBldmVuIGlmIHRoZVxuICAgICAgICAvLyBjdXJyZW50IHJlbmRlciBpcyBub3Qgc3luY2hyb25vdXMuXG4gICAgICAgIGluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIC8vIEhvd2V2ZXIsIHRvIGF2b2lkIHdhdGVyZmFsbHMsIHdlIGRvIG5vdCBkZWZlciBpZiB0aGlzIHJlbmRlclxuICAgICAgICAvLyB3YXMgaXRzZWxmIHNwYXduZWQgYnkgYW4gZWFybGllciB1c2VEZWZlcnJlZFZhbHVlLiBDaGVjayBpZiBEZWZlcnJlZExhbmVcbiAgICAgICAgLy8gaXMgcGFydCBvZiB0aGUgcmVuZGVyIGxhbmVzLlxuICAgICAgICAhaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgRGVmZXJyZWRMYW5lKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFJlbmRlciB3aXRoIHRoZSBpbml0aWFsIHZhbHVlXG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZTsgLy8gU2NoZWR1bGUgYSBkZWZlcnJlZCByZW5kZXIgdG8gc3dpdGNoIHRvIHRoZSBmaW5hbCB2YWx1ZS5cblxuICAgICAgICB2YXIgZGVmZXJyZWRMYW5lID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLFxuICAgICAgICAgIGRlZmVycmVkTGFuZVxuICAgICAgICApO1xuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGRlZmVycmVkTGFuZSk7XG4gICAgICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHByZXZWYWx1ZSwgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgaWYgKG9iamVjdElzKHZhbHVlLCBwcmV2VmFsdWUpKSB7XG4gICAgICAgIC8vIFRoZSBpbmNvbWluZyB2YWx1ZSBpcyByZWZlcmVudGlhbGx5IGlkZW50aWNhbCB0byB0aGUgY3VycmVudGx5IHJlbmRlcmVkXG4gICAgICAgIC8vIHZhbHVlLCBzbyB3ZSBjYW4gYmFpbCBvdXQgcXVpY2tseS5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVjZWl2ZWQgYSBuZXcgdmFsdWUgdGhhdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgYSBoaWRkZW4gdHJlZVxuICAgICAgICBpZiAoaXNDdXJyZW50VHJlZUhpZGRlbigpKSB7XG4gICAgICAgICAgLy8gUmV2ZWFsaW5nIGEgcHJlcmVuZGVyZWQgdHJlZSBpcyBjb25zaWRlcmVkIHRoZSBzYW1lIGFzIG1vdW50aW5nIG5ld1xuICAgICAgICAgIC8vIG9uZSwgc28gd2UgcmV1c2UgdGhlIFwibW91bnRcIiBwYXRoIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICB2YXIgcmVzdWx0VmFsdWUgPSBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpOyAvLyBVbmxpa2UgZHVyaW5nIGFuIGFjdHVhbCBtb3VudCwgd2UgbmVlZCB0byBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlIGlmXG4gICAgICAgICAgLy8gdGhlIHZhbHVlIGNoYW5nZWQuXG5cbiAgICAgICAgICBpZiAoIW9iamVjdElzKHJlc3VsdFZhbHVlLCBwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG91bGREZWZlclZhbHVlID0gIWluY2x1ZGVzT25seU5vblVyZ2VudExhbmVzKHJlbmRlckxhbmVzKTtcblxuICAgICAgICBpZiAoc2hvdWxkRGVmZXJWYWx1ZSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYW4gdXJnZW50IHVwZGF0ZS4gU2luY2UgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLCBrZWVwIHVzaW5nIHRoZVxuICAgICAgICAgIC8vIHByZXZpb3VzIHZhbHVlIGFuZCBzcGF3biBhIGRlZmVycmVkIHJlbmRlciB0byB1cGRhdGUgaXQgbGF0ZXIuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBkZWZlcnJlZCByZW5kZXJcbiAgICAgICAgICB2YXIgZGVmZXJyZWRMYW5lID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICAgICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyxcbiAgICAgICAgICAgIGRlZmVycmVkTGFuZVxuICAgICAgICAgICk7XG4gICAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyhkZWZlcnJlZExhbmUpOyAvLyBSZXVzZSB0aGUgcHJldmlvdXMgdmFsdWUuIFdlIGRvIG5vdCBuZWVkIHRvIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUsXG4gICAgICAgICAgLy8gYmVjYXVzZSB3ZSBkaWQgbm90IHJlbmRlciBhIG5ldyB2YWx1ZS5cblxuICAgICAgICAgIHJldHVybiBwcmV2VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYW4gdXJnZW50IHVwZGF0ZSwgc28gd2UgY2FuIHVzZSB0aGUgbGF0ZXN0IHZhbHVlIHJlZ2FyZGxlc3NcbiAgICAgICAgICAvLyBvZiB3aGF0IGl0IGlzLiBObyBuZWVkIHRvIGRlZmVyIGl0LlxuICAgICAgICAgIC8vIE1hcmsgdGhpcyBhcyBhbiB1cGRhdGUgdG8gcHJldmVudCB0aGUgZmliZXIgZnJvbSBiYWlsaW5nIG91dC5cbiAgICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihcbiAgICAgIGZpYmVyLFxuICAgICAgcXVldWUsXG4gICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICBmaW5pc2hlZFN0YXRlLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KFxuICAgICAgICBoaWdoZXJFdmVudFByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHksIENvbnRpbnVvdXNFdmVudFByaW9yaXR5KVxuICAgICAgKTtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIudHJhbnNpdGlvbjtcbiAgICAgIHZhciBjdXJyZW50VHJhbnNpdGlvbiA9IHtcbiAgICAgICAgX2NhbGxiYWNrczogbmV3IFNldCgpXG4gICAgICB9O1xuXG4gICAgICB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBwZW5kaW5nU3RhdGUpO1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24gPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSwgdGhlbmFibGUsIHRoZW5hYmxlRm9yRmluaXNoZWRTdGF0ZTtcbiAgICAgICAgaWYgKGVuYWJsZUFzeW5jQWN0aW9ucyk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIEFzeW5jIGFjdGlvbnMgYXJlIG5vdCBlbmFibGVkLlxuICAgICAgICAgIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBmaW5pc2hlZFN0YXRlKTtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGVycm9yIHJldGhyb3dpbmcgYmVoYXZpb3IgaXMgb25seSBlbmFibGVkIHdoZW4gdGhlIGFzeW5jIGFjdGlvbnNcbiAgICAgICAgICAvLyBmZWF0dXJlIGlzIG9uLCBldmVuIGZvciBzeW5jIGFjdGlvbnMuXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChwcmV2VHJhbnNpdGlvbiA9PT0gbnVsbCAmJiBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycykge1xuICAgICAgICAgICAgdmFyIHVwZGF0ZWRGaWJlcnNDb3VudCA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemU7XG5cbiAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCk7XG5cbiAgICAgICAgICAgIGlmICh1cGRhdGVkRmliZXJzQ291bnQgPiAxMCkge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgIFwiRGV0ZWN0ZWQgYSBsYXJnZSBudW1iZXIgb2YgdXBkYXRlcyBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIklmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlSG9vayA9IG1vdW50U3RhdGVJbXBsKGZhbHNlKTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIG5ldmVyIGNoYW5nZXMuXG5cbiAgICAgIHZhciBzdGFydCA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICBzdGF0ZUhvb2sucXVldWUsXG4gICAgICAgIHRydWUsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gc3RhcnQ7XG4gICAgICByZXR1cm4gW2ZhbHNlLCBzdGFydF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciBfdXBkYXRlU3RhdGUgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgICBib29sZWFuT3JUaGVuYWJsZSA9IF91cGRhdGVTdGF0ZVswXTtcblxuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBzdGFydCA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHZhciBpc1BlbmRpbmcgPVxuICAgICAgICB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGUgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZSAvLyBUaGlzIHdpbGwgc3VzcGVuZCB1bnRpbCB0aGUgYXN5bmMgYWN0aW9uIHNjb3BlIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKTtcbiAgICAgIHJldHVybiBbaXNQZW5kaW5nLCBzdGFydF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIF9yZXJlbmRlclN0YXRlID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgICBib29sZWFuT3JUaGVuYWJsZSA9IF9yZXJlbmRlclN0YXRlWzBdO1xuXG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIHN0YXJ0ID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgdmFyIGlzUGVuZGluZyA9XG4gICAgICAgIHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICA/IGJvb2xlYW5PclRoZW5hYmxlIC8vIFRoaXMgd2lsbCBzdXNwZW5kIHVudGlsIHRoZSBhc3luYyBhY3Rpb24gc2NvcGUgaGFzIGZpbmlzaGVkLlxuICAgICAgICAgIDogdXNlVGhlbmFibGUoYm9vbGVhbk9yVGhlbmFibGUpO1xuICAgICAgcmV0dXJuIFtpc1BlbmRpbmcsIHN0YXJ0XTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudElkKCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTsgLy8gVE9ETzogSW4gRml6eiwgaWQgZ2VuZXJhdGlvbiBpcyBzcGVjaWZpYyB0byBlYWNoIHNlcnZlciBjb25maWcuIE1heWJlIHdlXG4gICAgICAvLyBzaG91bGQgZG8gdGhpcyBpbiBGaWJlciwgdG9vPyBEZWZlcnJpbmcgdGhpcyBkZWNpc2lvbiBmb3Igbm93IGJlY2F1c2VcbiAgICAgIC8vIHRoZXJlJ3Mgbm8gb3RoZXIgcGxhY2UgdG8gc3RvcmUgdGhlIHByZWZpeCBleGNlcHQgZm9yIGFuIGludGVybmFsIGZpZWxkIG9uXG4gICAgICAvLyB0aGUgcHVibGljIGNyZWF0ZVJvb3Qgb2JqZWN0LCB3aGljaCB0aGUgZmliZXIgdHJlZSBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZVxuICAgICAgLy8gYSByZWZlcmVuY2UgdG8uXG5cbiAgICAgIHZhciBpZGVudGlmaWVyUHJlZml4ID0gcm9vdC5pZGVudGlmaWVyUHJlZml4O1xuICAgICAgdmFyIGlkO1xuXG4gICAgICB7XG4gICAgICAgIC8vIFVzZSBhIGxvd2VyY2FzZSByIHByZWZpeCBmb3IgY2xpZW50LWdlbmVyYXRlZCBpZHMuXG4gICAgICAgIHZhciBnbG9iYWxDbGllbnRJZCA9IGdsb2JhbENsaWVudElkQ291bnRlcisrO1xuICAgICAgICBpZCA9IFwiOlwiICsgaWRlbnRpZmllclByZWZpeCArIFwiclwiICsgZ2xvYmFsQ2xpZW50SWQudG9TdHJpbmcoMzIpICsgXCI6XCI7XG4gICAgICB9XG5cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGlkO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUlkKCkge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBpZCA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXNwYXRjaFJlZHVjZXJBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArXG4gICAgICAgICAgICAgIFwic2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgXCIgK1xuICAgICAgICAgICAgICBcInJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICByZXZlcnRMYW5lOiBOb0xhbmUsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcblxuICAgICAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSB7XG4gICAgICAgIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKHJvb3QsIHF1ZXVlLCBsYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArXG4gICAgICAgICAgICAgIFwic2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgXCIgK1xuICAgICAgICAgICAgICBcInJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICByZXZlcnRMYW5lOiBOb0xhbmUsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcblxuICAgICAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSB7XG4gICAgICAgIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpYmVyLmxhbmVzID09PSBOb0xhbmVzICYmXG4gICAgICAgICAgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUubGFuZXMgPT09IE5vTGFuZXMpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgICAgICAvLyBzYW1lIGFzIHRoZSBjdXJyZW50IHN0YXRlLCB3ZSBtYXkgYmUgYWJsZSB0byBiYWlsIG91dCBlbnRpcmVseS5cbiAgICAgICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgICAgICBpZiAobGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlO1xuICAgICAgICAgICAgICB2YXIgZWFnZXJTdGF0ZSA9IGxhc3RSZW5kZXJlZFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pOyAvLyBTdGFzaCB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZSwgYW5kIHRoZSByZWR1Y2VyIHVzZWQgdG8gY29tcHV0ZVxuICAgICAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgICAgIC8vIHdpdGhvdXQgY2FsbGluZyB0aGUgcmVkdWNlciBhZ2Fpbi5cblxuICAgICAgICAgICAgICB1cGRhdGUuaGFzRWFnZXJTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcblxuICAgICAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gcmViYXNlIHRoaXMgdXBkYXRlIGxhdGVyLFxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEbyB3ZSBzdGlsbCBuZWVkIHRvIGVudGFuZ2xlIHRyYW5zaXRpb25zIGluIHRoaXMgY2FzZT9cbiAgICAgICAgICAgICAgICBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGVBbmRFYWdlcmx5QmFpbG91dChcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgcXVldWUsXG4gICAgICAgICAgICAgICAgICB1cGRhdGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKHJvb3QsIHF1ZXVlLCBsYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fFxuICAgICAgICAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAgICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgICAgLy8gYW5kIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgb24gdG9wIG9mIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICAgICAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgICAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgICAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgfSAvLyBUT0RPOiBNb3ZlIHRvIFJlYWN0RmliZXJDb25jdXJyZW50VXBkYXRlcz9cblxuICAgIGZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShyb290LCBxdWV1ZSwgbGFuZSkge1xuICAgICAgaWYgKGlzVHJhbnNpdGlvbkxhbmUobGFuZSkpIHtcbiAgICAgICAgdmFyIHF1ZXVlTGFuZXMgPSBxdWV1ZS5sYW5lczsgLy8gSWYgYW55IGVudGFuZ2xlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIHBlbmRpbmcgb24gdGhlIHJvb3QsIHRoZW4gdGhleVxuICAgICAgICAvLyBtdXN0IGhhdmUgZmluaXNoZWQuIFdlIGNhbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBzaGFyZWQgcXVldWUsIHdoaWNoXG4gICAgICAgIC8vIHJlcHJlc2VudHMgYSBzdXBlcnNldCBvZiB0aGUgYWN0dWFsbHkgcGVuZGluZyBsYW5lcy4gSW4gc29tZSBjYXNlcyB3ZVxuICAgICAgICAvLyBtYXkgZW50YW5nbGUgbW9yZSB0aGFuIHdlIG5lZWQgdG8sIGJ1dCB0aGF0J3MgT0suIEluIGZhY3QgaXQncyB3b3JzZSBpZlxuICAgICAgICAvLyB3ZSAqZG9uJ3QqIGVudGFuZ2xlIHdoZW4gd2Ugc2hvdWxkLlxuXG4gICAgICAgIHF1ZXVlTGFuZXMgPSBpbnRlcnNlY3RMYW5lcyhxdWV1ZUxhbmVzLCByb290LnBlbmRpbmdMYW5lcyk7IC8vIEVudGFuZ2xlIHRoZSBuZXcgdHJhbnNpdGlvbiBsYW5lIHdpdGggdGhlIG90aGVyIHRyYW5zaXRpb24gbGFuZXMuXG5cbiAgICAgICAgdmFyIG5ld1F1ZXVlTGFuZXMgPSBtZXJnZUxhbmVzKHF1ZXVlTGFuZXMsIGxhbmUpO1xuICAgICAgICBxdWV1ZS5sYW5lcyA9IG5ld1F1ZXVlTGFuZXM7IC8vIEV2ZW4gaWYgcXVldWUubGFuZXMgYWxyZWFkeSBpbmNsdWRlIGxhbmUsIHdlIGRvbid0IGtub3cgZm9yIGNlcnRhaW4gaWZcbiAgICAgICAgLy8gdGhlIGxhbmUgZmluaXNoZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBlbnRhbmdsZWQgaXQuIFNvIHdlIG5lZWQgdG9cbiAgICAgICAgLy8gZW50YW5nbGUgaXQgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZS5cblxuICAgICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBuZXdRdWV1ZUxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICAgICAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZUlkOiB0aHJvd0ludmFsaWRIb29rRXJyb3JcbiAgICB9O1xuXG4gICAgdmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG4gICAgdmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSBudWxsO1xuICAgIHZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbiAgICB2YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbiAgICB2YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG4gICAgdmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbiAgICB2YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbiAgICB7XG4gICAgICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIFwiICtcbiAgICAgICAgICAgIFwiSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gXCIgK1xuICAgICAgICAgICAgXCJJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgXCIgK1xuICAgICAgICAgICAgXCJpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkRvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gXCIgK1xuICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uIFwiICtcbiAgICAgICAgICAgIFwiRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBcIiArXG4gICAgICAgICAgICBcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1wiXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlOiB1c2UsXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlOiB1c2UsXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudEluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlOiB1c2UsXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSWQoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZTogdXNlLFxuICAgICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSWQoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICByZXR1cm4gdXNlKHVzYWJsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgICAgICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVJZCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9XG4gICAgICAgICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICAgICAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApIHtcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUlkKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG4gICAgdmFyIGNvbW1pdFRpbWUgPSAwO1xuICAgIHZhciBsYXlvdXRFZmZlY3RTdGFydFRpbWUgPSAtMTtcbiAgICB2YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICB2YXIgcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA9IC0xO1xuICAgIC8qKlxuICAgICAqIFRyYWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHVwZGF0ZSB3YXMgYSBuZXN0ZWQvY2FzY2FkaW5nIHVwZGF0ZSAoc2NoZWR1bGVkIGZyb20gYSBsYXlvdXQgZWZmZWN0KS5cbiAgICAgKlxuICAgICAqIFRoZSBvdmVyYWxsIHNlcXVlbmNlIGlzOlxuICAgICAqICAgMS4gcmVuZGVyXG4gICAgICogICAyLiBjb21taXQgKGFuZCBjYWxsIGBvblJlbmRlcmAsIGBvbkNvbW1pdGApXG4gICAgICogICAzLiBjaGVjayBmb3IgbmVzdGVkIHVwZGF0ZXNcbiAgICAgKiAgIDQuIGZsdXNoIHBhc3NpdmUgZWZmZWN0cyAoYW5kIGNhbGwgYG9uUG9zdENvbW1pdGApXG4gICAgICpcbiAgICAgKiBOZXN0ZWQgdXBkYXRlcyBhcmUgaWRlbnRpZmllZCBpbiBzdGVwIDMgYWJvdmUsXG4gICAgICogYnV0IHN0ZXAgNCBzdGlsbCBhcHBsaWVzIHRvIHRoZSB3b3JrIHRoYXQgd2FzIGp1c3QgY29tbWl0dGVkLlxuICAgICAqIFdlIHVzZSB0d28gZmxhZ3MgdG8gdHJhY2sgbmVzdGVkIHVwZGF0ZXMgdGhlbjpcbiAgICAgKiBvbmUgdHJhY2tzIHdoZXRoZXIgdGhlIHVwY29taW5nIHVwZGF0ZSBpcyBhIG5lc3RlZCB1cGRhdGUsXG4gICAgICogYW5kIHRoZSBvdGhlciB0cmFja3Mgd2hldGhlciB0aGUgY3VycmVudCB1cGRhdGUgd2FzIGEgbmVzdGVkIHVwZGF0ZS5cbiAgICAgKiBUaGUgZmlyc3QgdmFsdWUgZ2V0cyBzeW5jZWQgdG8gdGhlIHNlY29uZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgKi9cblxuICAgIHZhciBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBpc0N1cnJlbnRVcGRhdGVOZXN0ZWQoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVwZGF0ZUlzTmVzdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtOZXN0ZWRVcGRhdGVTY2hlZHVsZWQoKSB7XG4gICAgICB7XG4gICAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXROZXN0ZWRVcGRhdGVGbGFnKCkge1xuICAgICAge1xuICAgICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3luY05lc3RlZFVwZGF0ZUZsYWcoKSB7XG4gICAgICB7XG4gICAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9IG5lc3RlZFVwZGF0ZVNjaGVkdWxlZDtcbiAgICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgICAgIHJldHVybiBjb21taXRUaW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG4gICAgICBjb21taXRUaW1lID0gbm93KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdygpO1xuXG4gICAgICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgICAgICBmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBub3coKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyhmaWJlcikge1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgICAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgICAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmIChsYXlvdXRFZmZlY3RTdGFydFRpbWUgPj0gMCkge1xuICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIGxheW91dEVmZmVjdFN0YXJ0VGltZTtcbiAgICAgICAgbGF5b3V0RWZmZWN0U3RhcnRUaW1lID0gLTE7IC8vIFN0b3JlIGR1cmF0aW9uIG9uIHRoZSBuZXh0IG5lYXJlc3QgUHJvZmlsZXIgYW5jZXN0b3JcbiAgICAgICAgLy8gT3IgdGhlIHJvb3QgKGZvciB0aGUgRGV2VG9vbHMgUHJvZmlsZXIgdG8gcmVhZClcblxuICAgICAgICB2YXIgcGFyZW50RmliZXIgPSBmaWJlci5yZXR1cm47XG5cbiAgICAgICAgd2hpbGUgKHBhcmVudEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICAgIHZhciByb290ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICByb290LmVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIHBhcmVudFN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICBpZiAocGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA+PSAwKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZTtcbiAgICAgICAgcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA9IC0xOyAvLyBTdG9yZSBkdXJhdGlvbiBvbiB0aGUgbmV4dCBuZWFyZXN0IFByb2ZpbGVyIGFuY2VzdG9yXG4gICAgICAgIC8vIE9yIHRoZSByb290IChmb3IgdGhlIERldlRvb2xzIFByb2ZpbGVyIHRvIHJlYWQpXG5cbiAgICAgICAgdmFyIHBhcmVudEZpYmVyID0gZmliZXIucmV0dXJuO1xuXG4gICAgICAgIHdoaWxlIChwYXJlbnRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgICB2YXIgcm9vdCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChwYXJlbnRTdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBEZXRhY2hlZCBmaWJlcnMgaGF2ZSB0aGVpciBzdGF0ZSBub2RlIGNsZWFyZWQgb3V0LlxuICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHJldHVybiBwb2ludGVyIGlzIGFsc28gY2xlYXJlZCBvdXQsXG4gICAgICAgICAgICAgICAgLy8gc28gd2Ugd29uJ3QgYmUgYWJsZSB0byByZXBvcnQgdGhlIHRpbWUgc3BlbnQgaW4gdGhpcyBQcm9maWxlcidzIHN1YnRyZWUuXG4gICAgICAgICAgICAgICAgcGFyZW50U3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKSB7XG4gICAgICBsYXlvdXRFZmZlY3RTdGFydFRpbWUgPSBub3coKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydFBhc3NpdmVFZmZlY3RUaW1lcigpIHtcbiAgICAgIHBhc3NpdmVFZmZlY3RTdGFydFRpbWUgPSBub3coKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gICAgICAvLyBhZnRlciB3ZSByZXJlbmRlci4gVGhpcyBpcyB1c2VkIGFzIGEgaGVscGVyIGluIHNwZWNpYWwgY2FzZXNcbiAgICAgIC8vIHdoZXJlIHdlIHNob3VsZCBjb3VudCB0aGUgd29yayBvZiBtdWx0aXBsZSBwYXNzZXMuXG4gICAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG4gICAgICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICAgICAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICAgICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuICAgICAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFzZVByb3BzO1xuICAgIH1cblxuICAgIHZhciBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQ7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbiAgICB2YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG4gICAgdmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcztcbiAgICB2YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuICAgIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2s7XG5cbiAgICB7XG4gICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTsgLy8gVGhpcyBpcyBzbyBncm9zcyBidXQgaXQncyBhdCBsZWFzdCBub24tY3JpdGljYWwgYW5kIGNhbiBiZSByZW1vdmVkIGlmXG4gICAgICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gICAgICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gICAgICAvLyAuLi4pKSB3aGljaCBvdGhlcndpc2UgdGhyb3dzIGEgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYSBmdW5jdGlvblwiXG4gICAgICAvLyBleGNlcHRpb24uXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmYWtlSW50ZXJuYWxJbnN0YW5jZSwgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dFwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IFwiICtcbiAgICAgICAgICAgICAgXCJtZWFucyB5b3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgYW5kIGFyZSBhdHRlbXB0aW5nIHRvIG5lc3QgXCIgK1xuICAgICAgICAgICAgICBcImEgUmVhY3QgMTUgdHJlZSBpbnNpZGUgYSBSZWFjdCAxNiB0cmVlIHVzaW5nIFwiICtcbiAgICAgICAgICAgICAgXCJ1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgXCIgK1xuICAgICAgICAgICAgICBcInRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoIFwiICtcbiAgICAgICAgICAgICAgXCJ0byBSZWFjdERPTS5jcmVhdGVQb3J0YWwpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleSA9IGNhbGxlck5hbWUgKyBcIl9cIiArIGNhbGxiYWNrO1xuXG4gICAgICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBcIiArXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgICAgY2FsbGVyTmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBcIiArXG4gICAgICAgICAgICAgICAgXCJZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuXCIsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGN0b3IsXG4gICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsXG4gICAgICBuZXh0UHJvcHNcbiAgICApIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgdmFyIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgICAgIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuICAgICAgdmFyIG1lbW9pemVkU3RhdGUgPVxuICAgICAgICBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByZXZTdGF0ZVxuICAgICAgICAgIDogYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTsgLy8gT25jZSB0aGUgdXBkYXRlIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlXG4gICAgICAvLyBiYXNlIHN0YXRlLlxuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gUXVldWUgaXMgYWx3YXlzIG5vbi1udWxsIGZvciBjbGFzc2VzXG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gICAgICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgICAgIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgICAgIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgXCJzZXRTdGF0ZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICAgICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCBcInJlcGxhY2VTdGF0ZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICAgICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgb2xkUHJvcHMsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG9sZFN0YXRlLFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICkge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgbmV4dENvbnRleHRcbiAgICAgICAgKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICAgICAgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICB7XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICAgIHZhciByZW5kZXJQcmVzZW50ID0gaW5zdGFuY2UucmVuZGVyO1xuXG4gICAgICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiB0eXBlb2YgY3Rvci5wcm90b3R5cGUucmVuZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgICAgICBcImluc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yP1wiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICAgICAgXCJpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuXCIsXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJlxuICAgICAgICAgICFpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgJiZcbiAgICAgICAgICAhaW5zdGFuY2Uuc3RhdGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcImdldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiBcIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiBcIiArXG4gICAgICAgICAgICAgIFwiRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/XCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiZcbiAgICAgICAgICAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gXCIgK1xuICAgICAgICAgICAgICBcIlVzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwicHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgXCIgK1xuICAgICAgICAgICAgICBcInByb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcImNvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgXCIgK1xuICAgICAgICAgICAgICBcInByb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlcykge1xuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiY29udGV4dFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgXCIgK1xuICAgICAgICAgICAgICAgIFwicHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGN0b3IuY29udGV4dFR5cGUgJiZcbiAgICAgICAgICAgIGN0b3IuY29udGV4dFR5cGVzICYmXG4gICAgICAgICAgICAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5hZGQoY3Rvcik7XG5cbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50U2hvdWxkVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBcIiArXG4gICAgICAgICAgICAgIFwiY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gXCIgK1xuICAgICAgICAgICAgICBcIlRoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBcIiArXG4gICAgICAgICAgICAgIFwiZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdG9yLnByb3RvdHlwZSAmJlxuICAgICAgICAgIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ICYmXG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICApIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gXCIgK1xuICAgICAgICAgICAgICBcInNob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gXCIgK1xuICAgICAgICAgICAgICBcIlBsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8IFwiQSBwdXJlIGNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gXCIgK1xuICAgICAgICAgICAgICBcIkRpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpP1wiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiBcIiArXG4gICAgICAgICAgICAgIFwiSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsIFwiICtcbiAgICAgICAgICAgICAgXCJ1c2UgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpLiBJZiB5b3UgbWVhbnQgdG8gZmV0Y2ggZGF0YSBvciBcIiArXG4gICAgICAgICAgICAgIFwicnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcImNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT9cIixcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgXCIgK1xuICAgICAgICAgICAgICBcIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpP1wiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGFzTXV0YXRlZFByb3BzID0gaW5zdGFuY2UucHJvcHMgIT09IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gdW5kZWZpbmVkICYmIGhhc011dGF0ZWRQcm9wcykge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCIlcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyBcIiArXG4gICAgICAgICAgICAgIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2UuZGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIlNldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIiArXG4gICAgICAgICAgICAgIFwiIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuXCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKVxuICAgICAgICApIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuIFwiICtcbiAgICAgICAgICAgICAgXCJUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCBcIiArXG4gICAgICAgICAgICAgIFwiYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIFwiICtcbiAgICAgICAgICAgICAgXCJhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC5cIixcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgXCIgK1xuICAgICAgICAgICAgICBcImFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLlwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgJiYgKHR5cGVvZiBzdGF0ZSAhPT0gXCJvYmplY3RcIiB8fCBpc0FycmF5KHN0YXRlKSkpIHtcbiAgICAgICAgICBlcnJvcihcIiVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbFwiLCBuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gXCJvYmplY3RcIlxuICAgICAgICApIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBcIiArXG4gICAgICAgICAgICAgIFwidXNlIGdldENoaWxkQ29udGV4dCgpLlwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZS51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICAgICAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIHtcbiAgICAgICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gICAgICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKFwiY29udGV4dFR5cGVcIiBpbiBjdG9yKSB7XG4gICAgICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHxcbiAgICAgICAgICAgIChjb250ZXh0VHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgIGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgJiZcbiAgICAgICAgICAgICAgY29udGV4dFR5cGUuX2NvbnRleHQgPT09IHVuZGVmaW5lZCk7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKGN0b3IpO1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvIFwiICtcbiAgICAgICAgICAgICAgICBcInRyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgXCIgKyB0eXBlb2YgY29udGV4dFR5cGUgKyBcIi5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD9cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD9cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID1cbiAgICAgICAgICAgICAgICBcIiBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7XCIgK1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgIFwifS5cIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMgZGVmaW5lcyBhbiBpbnZhbGlkIGNvbnRleHRUeXBlLiBcIiArXG4gICAgICAgICAgICAgICAgXCJjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lc1wiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIixcbiAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09IFwib2JqZWN0XCIgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgICAgIHZhciBjb250ZXh0VHlwZXMgPSBjdG9yLmNvbnRleHRUeXBlcztcbiAgICAgICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPVxuICAgICAgICAgIGNvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyXG4gICAgICAgICAgPyBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpXG4gICAgICAgICAgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG4gICAgICB7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGF0ZSA9ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gaW5zdGFuY2Uuc3RhdGVcbiAgICAgICAgICA6IG51bGwpO1xuICAgICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgc3RhdGUgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyBcIiArXG4gICAgICAgICAgICAgICAgXCIlcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSBcIiArXG4gICAgICAgICAgICAgICAgXCJhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLlwiLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogXCJ1bmRlZmluZWRcIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAgICAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAgICAgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIG1ldGhvZHMgdGhvdWdoLlxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSBcImNvbXBvbmVudFdpbGxNb3VudFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50XCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PVxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IFwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiO1xuXG4gICAgICAgICAgICB2YXIgbmV3QXBpTmFtZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgPyBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpXCJcbiAgICAgICAgICAgICAgICA6IFwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKVwiO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfY29tcG9uZW50TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICBcIiVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICBcIlRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcblwiICtcbiAgICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlc1wiLFxuICAgICAgICAgICAgICAgIF9jb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgIG5ld0FwaU5hbWUsXG4gICAgICAgICAgICAgICAgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogXCJcIixcbiAgICAgICAgICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWVcbiAgICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6IFwiXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgICAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuICAgICAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gICAgICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkU3RhdGUgIT09IGluc3RhbmNlLnN0YXRlKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzIFwiICtcbiAgICAgICAgICAgICAgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgK1xuICAgICAgICAgICAgICBcImNvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIGluc3RhbmNlLnN0YXRlLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPVxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gXCIgK1xuICAgICAgICAgICAgICAgIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgK1xuICAgICAgICAgICAgICAgIFwiY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSxcbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSAvLyBJbnZva2VzIHRoZSBtb3VudCBsaWZlLWN5Y2xlcyBvbiBhIHByZXZpb3VzbHkgbmV2ZXIgcmVuZGVyZWQgaW5zdGFuY2UuXG5cbiAgICBmdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICAgICAge1xuICAgICAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGluc3RhbmNlLnJlZnMgPSB7fTtcbiAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSBcIm9iamVjdFwiICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICAgICAgaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBuZXdQcm9wcykge1xuICAgICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8IFwiQ29tcG9uZW50XCI7XG5cbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSBcIiArXG4gICAgICAgICAgICAgICAgXCJiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBcIiArXG4gICAgICAgICAgICAgICAgXCJJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LlwiLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3RvcixcbiAgICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsXG4gICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgfSAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICApIHtcbiAgICAgICAgY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpOyAvLyBJZiB3ZSBoYWQgYWRkaXRpb25hbCBzdGF0ZSB1cGRhdGVzIGR1cmluZyB0aGlzIGxpZmUtY3ljbGUsIGxldCdzXG4gICAgICAgIC8vIHByb2Nlc3MgdGhlbSBub3cuXG5cbiAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGUgfCBMYXlvdXRTdGF0aWM7XG4gICAgICB9XG5cbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgY3RvcixcbiAgICAgIG5ld1Byb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICAgICAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgICAgIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICAgICAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gXCJvYmplY3RcIiAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGN0b3IsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9XG4gICAgICAgIHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09IFwiZnVuY3Rpb25cIjsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAgICAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgICAgIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gICAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgICAgIGlmIChcbiAgICAgICAgIWhhc05ld0xpZmVjeWNsZXMgJiZcbiAgICAgICAgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICkge1xuICAgICAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgICAgIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB2YXIgbmV3U3RhdGUgPSAoaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZSk7XG4gICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG9sZFByb3BzID09PSBuZXdQcm9wcyAmJlxuICAgICAgICBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiZcbiAgICAgICAgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiZcbiAgICAgICAgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgICAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGUgfCBMYXlvdXRTdGF0aWM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGN0b3IsXG4gICAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLFxuICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICk7XG4gICAgICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3VsZFVwZGF0ZSA9XG4gICAgICAgIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fFxuICAgICAgICBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdG9yLFxuICAgICAgICAgIG9sZFByb3BzLFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICk7XG5cbiAgICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFzTmV3TGlmZWN5Y2xlcyAmJlxuICAgICAgICAgICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlIHwgTGF5b3V0U3RhdGljO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBNb3VudExheW91dERldjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZSB8IExheW91dFN0YXRpYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gICAgICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgICAgICAvLyBtZW1vaXplZCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gICAgICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuICAgICAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICAgIH0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgbmV3UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgIHZhciBvbGRQcm9wcyA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlXG4gICAgICAgICAgPyB1bnJlc29sdmVkT2xkUHJvcHNcbiAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gICAgICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgICAgIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICAgICAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gXCJvYmplY3RcIiAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGN0b3IsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9XG4gICAgICAgIHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09IFwiZnVuY3Rpb25cIjsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAgICAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgICAgIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gICAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgICAgIGlmIChcbiAgICAgICAgIWhhc05ld0xpZmVjeWNsZXMgJiZcbiAgICAgICAgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzICE9PSB1bnJlc29sdmVkTmV3UHJvcHMgfHxcbiAgICAgICAgICBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dFxuICAgICAgICApIHtcbiAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICAgICAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IChpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlKTtcbiAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiZcbiAgICAgICAgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmXG4gICAgICAgICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmXG4gICAgICAgICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgJiZcbiAgICAgICAgIWVuYWJsZUxhenlDb250ZXh0UHJvcGFnYXRpb25cbiAgICAgICkge1xuICAgICAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAgICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgICAgICBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICAgIG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdG9yLFxuICAgICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxcbiAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICApO1xuICAgICAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG91bGRVcGRhdGUgPVxuICAgICAgICBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHxcbiAgICAgICAgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3RvcixcbiAgICAgICAgICBvbGRQcm9wcyxcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICBvbGRTdGF0ZSxcbiAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICApIHx8IC8vIFRPRE86IEluIHNvbWUgY2FzZXMsIHdlJ2xsIGVuZCB1cCBjaGVja2luZyBpZiBjb250ZXh0IGhhcyBjaGFuZ2VkIHR3aWNlLFxuICAgICAgICAvLyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAgaGFzIGJlZW4gY2FsbGVkLiBOb3QgaWRlYWwsXG4gICAgICAgIC8vIGJ1dCBJJ20gbG9hdGggdG8gcmVmYWN0b3IgdGhpcyBmdW5jdGlvbi4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIG1lbW9pemVkXG4gICAgICAgIC8vIGNvbXBvbmVudHMgc28gaXQncyBub3QgdGhhdCBjb21tb24uXG4gICAgICAgIGVuYWJsZUxhenlDb250ZXh0UHJvcGFnYXRpb247XG5cbiAgICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFzTmV3TGlmZWN5Y2xlcyAmJlxuICAgICAgICAgICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShcbiAgICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgICAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICAgIG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgICAgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAgICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAgICAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cbiAgICAgIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gICAgICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlKSB7XG4gICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyB0aHJvd25cbiAgICAgIC8vIHNvIHRoZSBzdGFjayBpcyBhY2N1cmF0ZS5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKSxcbiAgICAgICAgZGlnZXN0OiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBkaWdlc3QsIHN0YWNrKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgc3RhY2s6IHN0YWNrICE9IG51bGwgPyBzdGFjayA6IG51bGwsXG4gICAgICAgIGRpZ2VzdDogZGlnZXN0ICE9IG51bGwgPyBkaWdlc3QgOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3RGaWJlckVycm9yRGlhbG9nXG4gICAgICAgIC5zaG93RXJyb3JEaWFsb2cgIT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkV4cGVjdGVkIFJlYWN0RmliZXJFcnJvckRpYWxvZy5zaG93RXJyb3JEaWFsb2cgdG8gYmUgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbykge1xuICAgICAgdmFyIGNhcHR1cmVkRXJyb3IgPSB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBlcnJvckluZm8uc3RhY2sgIT09IG51bGwgPyBlcnJvckluZm8uc3RhY2sgOiBcIlwiLFxuICAgICAgICBlcnJvcjogZXJyb3JJbmZvLnZhbHVlLFxuICAgICAgICBlcnJvckJvdW5kYXJ5OlxuICAgICAgICAgIGJvdW5kYXJ5ICE9PSBudWxsICYmIGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnRcbiAgICAgICAgICAgID8gYm91bmRhcnkuc3RhdGVOb2RlXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0RmliZXJFcnJvckRpYWxvZy5zaG93RXJyb3JEaWFsb2coXG4gICAgICAgIGNhcHR1cmVkRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgICAgIC8vIFRoaXMgZW5hYmxlcyByZW5kZXJlcnMgbGlrZSBSZWFjdE5hdGl2ZSB0byBiZXR0ZXIgbWFuYWdlIHJlZGJveCBiZWhhdmlvci5cblxuICAgICAgICBpZiAobG9nRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgICAgIGlmICh0cnVlKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IGVycm9ySW5mby5zb3VyY2U7XG4gICAgICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiBcIlwiOyAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgICAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSAvLyBUaGUgZXJyb3IgaXMgZmF0YWwuIFNpbmNlIHRoZSBzaWxlbmNpbmcgbWlnaHQgaGF2ZVxuICAgICAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicm93c2VyIHdvdWxkIGhhdmUgc2lsZW5jZWQgdGhlIG9yaWdpbmFsIGVycm9yXG4gICAgICAgICAgICAvLyBzbyB3ZSdsbCBwcmludCBpdCBmaXJzdCwgYW5kIHRoZW4gcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuXG4gICAgICAgICAgICBjb25zb2xlW1wiZXJyb3JcIl0oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgICAgIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBibG9jaywgc2VlOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMzODRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHNvdXJjZSA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoc291cmNlKSA6IG51bGw7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgPyBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICtcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiPiBjb21wb25lbnQ6XCJcbiAgICAgICAgICAgIDogXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czpcIjtcbiAgICAgICAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7XG5cbiAgICAgICAgICBpZiAoYm91bmRhcnkudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPVxuICAgICAgICAgICAgICBcIkNvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcblwiICtcbiAgICAgICAgICAgICAgXCJWaXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZXJyb3ItYm91bmRhcmllcyB0byBsZWFybiBtb3JlIGFib3V0IGVycm9yIGJvdW5kYXJpZXMuXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBlcnJvckJvdW5kYXJ5TmFtZSA9XG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoYm91bmRhcnkpIHx8IFwiQW5vbnltb3VzXCI7XG4gICAgICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9XG4gICAgICAgICAgICAgIFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggXCIgK1xuICAgICAgICAgICAgICAoXCJ1c2luZyB0aGUgZXJyb3IgYm91bmRhcnkgeW91IHByb3ZpZGVkLCBcIiArXG4gICAgICAgICAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgK1xuICAgICAgICAgICAgICAgIFwiLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY29tYmluZWRNZXNzYWdlID1cbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVNZXNzYWdlICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2sgK1xuICAgICAgICAgICAgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICAoXCJcIiArIGVycm9yQm91bmRhcnlNZXNzYWdlKTsgLy8gSW4gZGV2ZWxvcG1lbnQsIHdlIHByb3ZpZGUgb3VyIG93biBtZXNzYWdlIHdpdGgganVzdCB0aGUgY29tcG9uZW50IHN0YWNrLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgICAgICAvLyBoYXMgYWxyZWFkeSBwcmludGVkIGl0LiBFdmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBzd2FsbG93cyB0aGUgZXJyb3IsIGl0IGlzIHN0aWxsXG4gICAgICAgICAgLy8gZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIHRoYW5rcyB0byB0aGUgREVWLW9ubHkgZmFrZSBldmVudCB0cmljayBpbiBSZWFjdEVycm9yVXRpbHMuXG5cbiAgICAgICAgICBjb25zb2xlW1wiZXJyb3JcIl0oY29tYmluZWRNZXNzYWdlKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAgICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgICAgIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gICAgICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgICAgIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgICAgICBlbGVtZW50OiBudWxsXG4gICAgICB9O1xuICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcihlcnJvcik7XG4gICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdXBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICAgICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IkMSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgICAgIC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb25lcyBhbHJlYWR5IGZhaWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgICAgICAvLyBub3QgZGVmaW5lZC5cbiAgICAgICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2s6IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiBcIlwiXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgICAgICAvLyB0aGVuIGl0IG5lZWRzIHRvIGNhbGwgc2V0U3RhdGUgdG8gcmVjb3ZlciBmcm9tIGVycm9ycy5cbiAgICAgICAgICAgICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGlzIHNjaGVkdWxlZCB0aGVuIHRoZSBib3VuZGFyeSB3aWxsIHN3YWxsb3cgdGhlIGVycm9yLlxuICAgICAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgXCIlczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuXCIsXG4gICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRDb21wb25lbnQoc291cmNlRmliZXIsIHJvb3RSZW5kZXJMYW5lcykge1xuICAgICAgLy8gQSBsZWdhY3kgbW9kZSBTdXNwZW5zZSBxdWlyaywgb25seSByZWxldmFudCB0byBob29rIGNvbXBvbmVudHMuXG5cbiAgICAgIHZhciB0YWcgPSBzb3VyY2VGaWJlci50YWc7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKHNvdXJjZUZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSAmJlxuICAgICAgICAodGFnID09PSBGdW5jdGlvbkNvbXBvbmVudCB8fFxuICAgICAgICAgIHRhZyA9PT0gRm9yd2FyZFJlZiB8fFxuICAgICAgICAgIHRhZyA9PT0gU2ltcGxlTWVtb0NvbXBvbmVudClcbiAgICAgICkge1xuICAgICAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gY3VycmVudFNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrU3VzcGVuc2VCb3VuZGFyeVNob3VsZENhcHR1cmUoXG4gICAgICBzdXNwZW5zZUJvdW5kYXJ5LFxuICAgICAgcmV0dXJuRmliZXIsXG4gICAgICBzb3VyY2VGaWJlcixcbiAgICAgIHJvb3QsXG4gICAgICByb290UmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgbWFya3MgYSBTdXNwZW5zZSBib3VuZGFyeSBzbyB0aGF0IHdoZW4gd2UncmUgdW53aW5kaW5nIHRoZSBzdGFjayxcbiAgICAgIC8vIGl0IGNhcHR1cmVzIHRoZSBzdXNwZW5kZWQgXCJleGNlcHRpb25cIiBhbmQgZG9lcyBhIHNlY29uZCAoZmFsbGJhY2spIHBhc3MuXG4gICAgICBpZiAoKHN1c3BlbnNlQm91bmRhcnkubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIExlZ2FjeSBNb2RlIFN1c3BlbnNlXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZSBib3VuZGFyeSBpcyBpbiBsZWdhY3kgbW9kZSwgd2Ugc2hvdWxkICpub3QqXG4gICAgICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgICAgICAvLyBudWxsIGFuZCBrZWVwIHJlbmRlcmluZy4gV2hlbiB0aGUgU3VzcGVuc2UgYm91bmRhcnkgY29tcGxldGVzLFxuICAgICAgICAvLyB3ZSdsbCBkbyBhIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2suXG4gICAgICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5ID09PSByZXR1cm5GaWJlcikge1xuICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBzdXNwZW5kZWQgd2hpbGUgcmVjb25jaWxpbmcgdGhlIGNoaWxkcmVuIG9mXG4gICAgICAgICAgLy8gYSBTdXNwZW5zZSBib3VuZGFyeSdzIGlubmVyIE9mZnNjcmVlbiB3cmFwcGVyIGZpYmVyLiBUaGlzIGhhcHBlbnNcbiAgICAgICAgICAvLyB3aGVuIGEgUmVhY3QubGF6eSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuICAgICAgICAgIC8vIFN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcmllcyBhcmUgaW1wbGVtZW50ZWQgYXMgbXVsdGlwbGUgZmliZXJzLCBidXQgdGhleVxuICAgICAgICAgIC8vIGFyZSBhIHNpbmdsZSBjb25jZXB0dWFsIHVuaXQuIFRoZSBsZWdhY3kgbW9kZSBiZWhhdmlvciB3aGVyZSB3ZVxuICAgICAgICAgIC8vIHByZXRlbmQgdGhlIHN1c3BlbmRlZCBmaWJlciBjb21taXR0ZWQgYXMgYG51bGxgIHdvbid0IHdvcmssXG4gICAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlIFwic3VzcGVuZGVkXCIgZmliZXIgaXMgdGhlIGlubmVyXG4gICAgICAgICAgLy8gT2Zmc2NyZWVuIHdyYXBwZXIuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBCZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgYm91bmRhcnkgaGF2ZW4ndCBzdGFydGVkIHJlbmRlcmluZ1xuICAgICAgICAgIC8vIHlldCAoaS5lLiBub3RoaW5nIGluIHRoZSB0cmVlIGhhcyBwYXJ0aWFsbHkgcmVuZGVyZWQpIHdlIGNhblxuICAgICAgICAgIC8vIHN3aXRjaCB0byB0aGUgcmVndWxhciwgY29uY3VycmVudCBtb2RlIGJlaGF2aW9yOiBtYXJrIHRoZVxuICAgICAgICAgIC8vIGJvdW5kYXJ5IHdpdGggU2hvdWxkQ2FwdHVyZSBhbmQgZW50ZXIgdGhlIHVud2luZCBwaGFzZS5cbiAgICAgICAgICBzdXNwZW5zZUJvdW5kYXJ5LmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2U7IC8vIFdlJ3JlIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGZpYmVyIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBjb21wbGV0ZS5cbiAgICAgICAgICAvLyBCdXQgd2Ugc2hvdWxkbid0IGNhbGwgYW55IGxpZmVjeWNsZSBtZXRob2RzIG9yIGNhbGxiYWNrcy4gUmVtb3ZlXG4gICAgICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzICY9IH4oTGlmZWN5Y2xlRWZmZWN0TWFzayB8IEluY29tcGxldGUpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U291cmNlRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudC4gQ2hhbmdlIHRoZSB0YWcgc28gaXQncyBub3QgbWlzdGFrZW4gZm9yIGFcbiAgICAgICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBpZiBpdCBpcyBkZWxldGVkLlxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgPSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIHRyeSByZW5kZXJpbmcgYWdhaW4sIHdlIHNob3VsZCBub3QgcmV1c2UgdGhlIGN1cnJlbnQgZmliZXIsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mga25vd24gdG8gYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgYSBmb3JjZSB1cGRhdGUgdG9cbiAgICAgICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKFN5bmNMYW5lKTtcbiAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCB1cGRhdGUsIFN5bmNMYW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS4gTWFyayBpdCB3aXRoIFN5bmMgcHJpb3JpdHkgdG9cbiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdXNwZW5zZUJvdW5kYXJ5O1xuICAgICAgfSAvLyBDb25maXJtZWQgdGhhdCB0aGUgYm91bmRhcnkgaXMgaW4gYSBjb25jdXJyZW50IG1vZGUgdHJlZS4gQ29udGludWVcbiAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAvL1xuICAgICAgLy8gQWZ0ZXIgdGhpcyB3ZSdsbCB1c2UgYSBzZXQgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzXG4gICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgIC8vIFRoZSBhY3R1YWwgbG9naWMgZm9yIHRoaXMgaXMgc3ByZWFkIG91dCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAvLyBhIHJvb3QsIHRoZW4gd2Ugc2hvdWxkIGFsc28gcmVzdGFydCBpZiB3ZSBnZXQgYW4gdXBkYXRlIG9yIHBpbmcgdGhhdFxuICAgICAgLy8gbWlnaHQgdW5zdXNwZW5kIGl0LCBhbmQgdmljZSB2ZXJzYS4gVGhlIG9ubHkgcmVhc29uIHRvIHN1c3BlbmQgaXNcbiAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAvLyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmVzdGFydCBvbmx5IHdoaWxlIGluIHRoZSBwZXJpb2Qgd2UncmUgc3VzcGVuZGVkLlxuICAgICAgLy9cbiAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAvLyBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gU28gd2UgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZW4uXG4gICAgICAvLyBTdXNwZW5zZSBIZXVyaXN0aWNzXG4gICAgICAvL1xuICAgICAgLy8gSWYgbm90aGluZyB0aHJldyBhIFByb21pc2Ugb3IgYWxsIHRoZSBzYW1lIGZhbGxiYWNrcyBhcmUgYWxyZWFkeSBzaG93aW5nLFxuICAgICAgLy8gdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuXG4gICAgICAvL1xuICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIHJlbmRlciBvZiBhIG5ldyB0cmVlIG9mIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gICAgICAvLyB0aG9zZSB0cmlnZ2VyIGEgZmFsbGJhY2ssIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LiBXZSB3YW50IHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgaGl0IGEgXCJEZWxheWVkXCIgY2FzZSwgc3VjaCBhcyB3aGVuIHdlJ2Qgc3dpdGNoIGZyb20gY29udGVudCBiYWNrIGludG9cbiAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAvLyB0byB0aGlzIGNhc2UuIElmIG5vbmUgaXMgZGVmaW5lZCwgSk5EIGlzIHVzZWQgaW5zdGVhZC5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgLy8gYW5vdGhlciBsZXZlbCwgYnV0IHRoZXJlJ3Mgc3RpbGwgYW4gaW5uZXIgYm91bmRhcnkgdGhhdCB3b3VsZCBzaG93IGEgZmFsbGJhY2ssXG4gICAgICAvLyB0aGVuIHdlIHN1c3BlbmQvcmVzdGFydCBmb3IgNTAwbXMgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzaG93ZWQgYSBmYWxsYmFja1xuICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAvLyBjb25zaXN0ZW50IHRyYWluIG9mIGNvbW1pdHMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhbiBvcHBvcnR1bml0eSB0byByZXN0YXJ0IHRvXG4gICAgICAvLyBnZXQgdG8gdGhlIGNvbXBsZXRlZCBzdGF0ZSBzbGlnaHRseSBlYXJsaWVyLlxuICAgICAgLy9cbiAgICAgIC8vIElmIHRoZXJlJ3MgYW1iaWd1aXR5IGR1ZSB0byBiYXRjaGluZyBpdCdzIHJlc29sdmVkIGluIHByZWZlcmVuY2Ugb2Y6XG4gICAgICAvLyAxKSBcImRlbGF5ZWRcIiwgMikgXCJpbml0aWFsIHJlbmRlclwiLCAzKSBcInJldHJ5XCIuXG4gICAgICAvL1xuICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIFwiYnVzeVwiIHN0YXRlIGRvZXNuJ3QgZ2V0IGZvcmNlIGNvbW1pdHRlZC4gV2Ugd2FudCB0b1xuICAgICAgLy8gZW5zdXJlIHRoYXQgbmV3IGluaXRpYWwgbG9hZGluZyBzdGF0ZXMgY2FuIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuXG4gICAgICBzdXNwZW5zZUJvdW5kYXJ5LmZsYWdzIHw9IFNob3VsZENhcHR1cmU7IC8vIFRPRE86IEkgdGhpbmsgd2UgY2FuIHJlbW92ZSB0aGlzLCBzaW5jZSB3ZSBub3cgdXNlIGBEaWRDYXB0dXJlYCBpblxuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlIHRvIHByZXZlbnQgYW4gZWFybHkgYmFpbG91dC5cblxuICAgICAgc3VzcGVuc2VCb3VuZGFyeS5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgIHJldHVybiBzdXNwZW5zZUJvdW5kYXJ5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKFxuICAgICAgcm9vdCxcbiAgICAgIHJldHVybkZpYmVyLFxuICAgICAgc291cmNlRmliZXIsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTtcblxuICAgICAge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgd29yayBzdGlsbCwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgdXBkYXRlcnNcbiAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB3YWtlYWJsZS4gVGhlIGNvbXBvbmVudCBzdXNwZW5kZWQuXG4gICAgICAgICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG4gICAgICAgICAgcmVzZXRTdXNwZW5kZWRDb21wb25lbnQoc291cmNlRmliZXIpO1xuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQm91bmRhcnkgPSBnZXRTdXNwZW5zZUhhbmRsZXIoKTtcblxuICAgICAgICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN1c3BlbnNlQm91bmRhcnkudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5IGlzIG5vdCBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjaywgbWFya1xuICAgICAgICAgICAgICAgIC8vIHRoZSBpbi1wcm9ncmVzcyByZW5kZXIgYXMgc3VzcGVuZGVkLiBXZSB0cnkgdG8gcGVyZm9ybSB0aGlzIGxvZ2ljXG4gICAgICAgICAgICAgICAgLy8gYXMgc29vbiBhcyBzb29uIGFzIHBvc3NpYmxlIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzbyB0aGUgd29ya1xuICAgICAgICAgICAgICAgIC8vIGxvb3AgY2FuIGtub3cgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCdzIE9LIHRvIHN3aXRjaCB0byBvdGhlciB0YXNrcyxcbiAgICAgICAgICAgICAgICAvLyBvciB3aGV0aGVyIGl0IGNhbiB3YWl0IGZvciBkYXRhIHRvIHJlc29sdmUgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogTW9zdCBvZiB0aGVzZSBjaGVja3MgYXJlIGFscmVhZHkgcGVyZm9ybWVkIHdoZW4gZW50ZXJpbmcgYVxuICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlIGJvdW5kYXJ5LiBXZSBzaG91bGQgdHJhY2sgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFjayBzb1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gcmVjb21wdXRlIGl0IG9uIGRlbWFuZC4gVGhpcyB3b3VsZCBhbHNvIGFsbG93IHVzXG4gICAgICAgICAgICAgICAgLy8gdG8gdW5pZnkgd2l0aCBgdXNlYCB3aGljaCBuZWVkcyB0byBwZXJmb3JtIHRoaXMgbG9naWMgZXZlbiBzb29uZXIsXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIGB0aHJvd0V4Y2VwdGlvbmAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChnZXRTaGVsbEJvdW5kYXJ5KCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuZGVkIGluIHRoZSBcInNoZWxsXCIgb2YgdGhlIGFwcC4gVGhpcyBpcyBhbiB1bmRlc2lyYWJsZVxuICAgICAgICAgICAgICAgICAgICAvLyBsb2FkaW5nIHN0YXRlLiBXZSBzaG91bGQgYXZvaWQgY29tbWl0dGluZyB0aGlzIHRyZWUuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHN1c3BlbmRlZCBkZWVwZXIgdGhhbiB0aGUgc2hlbGwsIHdlIGRvbid0IG5lZWQgdG8gZGVsYXlcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNvbW1taXQuIEhvd2V2ZXIsIHdlIHN0aWxsIGNhbGwgcmVuZGVyRGlkU3VzcGVuZCBpZiB0aGlzIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJvdW5kYXJ5LCB0byB0ZWxsIHRoZSB3b3JrIGxvb3AgdGhhdCBhIG5ldyBmYWxsYmFjayBoYXNcbiAgICAgICAgICAgICAgICAgICAgLy8gYXBwZWFyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGVvcmV0aWNhbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSB0aGlzIGJyYW5jaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBjdXJyZW50bHkgdXNlZCBmb3IgdHdvIHRoaW5nczogMSkgdG8gdGhyb3R0bGUgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIGFwcGVhcmFuY2Ugb2Ygc3VjY2Vzc2l2ZSBsb2FkaW5nIHN0YXRlcywgYW5kIDIpIGluXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNoaWxkcmVuIGluY2x1ZGUgYW55XG4gICAgICAgICAgICAgICAgICAgIC8vIHBlbmRpbmcgZmFsbGJhY2tzLiBGb3IgMSwgd2Ugc2hvdWxkIGFwcGx5IHRocm90dGxpbmcgdG8gYWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXMsIG5vdCBqdXN0IG9uZXMgdGhhdCByZW5kZXIgYW4gYWRkaXRpb25hbCBmYWxsYmFjay4gRm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIDIsIHdlIHNob3VsZCBjaGVjayBzdWJ0cmVlRmxhZ3MgaW5zdGVhZC4gVGhlbiB3ZSBjYW4gZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgYnJhbmNoLlxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHN1c3BlbnNlQm91bmRhcnkuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyAmPSB+Rm9yY2VDbGllbnRSZW5kZXI7XG4gICAgICAgICAgICAgICAgbWFya1N1c3BlbnNlQm91bmRhcnlTaG91bGRDYXB0dXJlKFxuICAgICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeSxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTsgLy8gUmV0cnkgbGlzdGVuZXJcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmYWxsYmFjayBkb2VzIGNvbW1pdCwgd2UgbmVlZCB0byBhdHRhY2ggYSBkaWZmZXJlbnQgdHlwZSBvZlxuICAgICAgICAgICAgICAgIC8vIGxpc3RlbmVyLiBUaGlzIG9uZSBzY2hlZHVsZXMgYW4gdXBkYXRlIG9uIHRoZSBTdXNwZW5zZSBib3VuZGFyeSB0b1xuICAgICAgICAgICAgICAgIC8vIHR1cm4gdGhlIGZhbGxiYWNrIHN0YXRlIG9mZi5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIFN0YXNoIHRoZSB3YWtlYWJsZSBvbiB0aGUgYm91bmRhcnkgZmliZXIgc28gd2UgY2FuIGFjY2VzcyBpdCBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyBjb21taXQgcGhhc2UuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSB3YWtlYWJsZSByZXNvbHZlcywgd2UnbGwgYXR0ZW1wdCB0byByZW5kZXIgdGhlIGJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgLy8gYWdhaW4gKFwicmV0cnlcIikuXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFN1c3BlbnNleSByZXNvdXJjZS4gV2UgZG8gbm90IGF0dGFjaCByZXRyeVxuICAgICAgICAgICAgICAgIC8vIGxpc3RlbmVycyB0byB0aGVzZSwgYmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZW0gZm9yXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLiBPbmx5IGZvciBjb21taXR0aW5nLiBJbnN0ZWFkLCBpZiBhIGZhbGxiYWNrIGNvbW1pdHNcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIG9ubHkgdGhpbmcgdGhhdCBzdXNwZW5kZWQgd2FzIGEgU3VzcGVuc2V5IHJlc291cmNlLCB3ZVxuICAgICAgICAgICAgICAgIC8vIHJldHJ5IGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlZmFjdG9yIHRocm93RXhjZXB0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR5cGVcbiAgICAgICAgICAgICAgICAvLyBjaGVjay4gVGhlIGNhbGxlciBhbHJlYWR5IGtub3dzIHdoYXQgdGhlIGNhdXNlIHdhcy5cblxuICAgICAgICAgICAgICAgIHZhciBpc1N1c3BlbnNleVJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgIHdha2VhYmxlID09PSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGU7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNTdXNwZW5zZXlSZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBTY2hlZHVsZVJldHJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmV0cnlRdWV1ZSA9IHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZXRyeVF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWUgPSBuZXcgU2V0KFt3YWtlYWJsZV0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cnlRdWV1ZS5hZGQod2FrZWFibGUpO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSBvbmx5IGF0dGFjaCBwaW5nIGxpc3RlbmVycyBpbiBjb25jdXJyZW50IG1vZGUuIExlZ2FjeVxuICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuc2UgYWx3YXlzIGNvbW1pdHMgZmFsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZXJlIGFyZVxuICAgICAgICAgICAgICAgICAgLy8gbm8gcGluZ3MuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5Lm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuc2VCb3VuZGFyeS5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgICAgICAgICAgdmFyIF9pc1N1c3BlbnNleVJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgd2FrZWFibGUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKF9pc1N1c3BlbnNleVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2NoZWR1bGVSZXRyeTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzY3JlZW5RdWV1ZSA9IHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNjcmVlblF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld09mZnNjcmVlblF1ZXVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeVF1ZXVlOiBuZXcgU2V0KFt3YWtlYWJsZV0pXG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZUJvdW5kYXJ5LnVwZGF0ZVF1ZXVlID0gbmV3T2Zmc2NyZWVuUXVldWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXRyeVF1ZXVlID0gb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChfcmV0cnlRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZSA9IG5ldyBTZXQoW3dha2VhYmxlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZXRyeVF1ZXVlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS50YWcgK1xuICAgICAgICAgICAgICAgIFwiKS4gVGhpcyBcIiArXG4gICAgICAgICAgICAgICAgXCJpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBVbmxlc3MgdGhpcyBpcyBhIHN5bmMgdXBkYXRlLCB0aGlzIGlzIE9LLlxuICAgICAgICAgICAgLy8gV2UgY2FuIHN1c3BlbmQgYW5kIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG4gICAgICAgICAgICBpZiAocm9vdC50YWcgPT09IENvbmN1cnJlbnRSb290KSB7XG4gICAgICAgICAgICAgIC8vIEluIGEgY29uY3VycmVudCByb290LCBzdXNwZW5kaW5nIHdpdGhvdXQgYSBTdXNwZW5zZSBib3VuZGFyeSBpc1xuICAgICAgICAgICAgICAvLyBhbGxvd2VkLiBJdCB3aWxsIHN1c3BlbmQgaW5kZWZpbml0ZWx5IHdpdGhvdXQgY29tbWl0dGluZy5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciBkaXNjcmV0ZSB1cGRhdGVzPyBXaGF0XG4gICAgICAgICAgICAgIC8vIGFib3V0IGZsdXNoU3luYz8gTWF5YmUgaXQgc2hvdWxkIHB1dCB0aGUgdHJlZSBpbnRvIGFuIGluZXJ0IHN0YXRlLFxuICAgICAgICAgICAgICAvLyBhbmQgcG90ZW50aWFsbHkgbG9nIGEgd2FybmluZy4gUmV2aXNpdCB0aGlzIGZvciBhIGZ1dHVyZSByZWxlYXNlLlxuICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSW4gYSBsZWdhY3kgcm9vdCwgc3VzcGVuZGluZyB3aXRob3V0IGEgYm91bmRhcnkgaXMgYWx3YXlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICB2YXIgdW5jYXVnaHRTdXNwZW5zZUVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgc3VzcGVuZGVkIHdoaWxlIHJlc3BvbmRpbmcgdG8gc3luY2hyb25vdXMgaW5wdXQuIFRoaXMgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJ3aWxsIGNhdXNlIHRoZSBVSSB0byBiZSByZXBsYWNlZCB3aXRoIGEgbG9hZGluZyBpbmRpY2F0b3IuIFRvIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiZml4LCB1cGRhdGVzIHRoYXQgc3VzcGVuZCBzaG91bGQgYmUgd3JhcHBlZCBcIiArXG4gICAgICAgICAgICAgICAgICBcIndpdGggc3RhcnRUcmFuc2l0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHZhbHVlID0gdW5jYXVnaHRTdXNwZW5zZUVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGlzIGEgcmVndWxhciBlcnJvciwgbm90IGEgU3VzcGVuc2Ugd2FrZWFibGUuXG5cbiAgICAgIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgICAgIHJlbmRlckRpZEVycm9yKHZhbHVlKTsgLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAgICAgLy8gb3ZlciBhbmQgdHJhdmVyc2UgcGFyZW50IHBhdGggYWdhaW4sIHRoaXMgdGltZSB0cmVhdGluZyB0aGUgZXhjZXB0aW9uXG4gICAgICAvLyBhcyBhbiBlcnJvci5cblxuICAgICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gcmV0dXJuIGZpYmVyLCB3aGljaCBtZWFucyB0aGUgcm9vdCBlcnJvcmVkLiBUaGlzIHNob3VsZCBuZXZlclxuICAgICAgICAvLyBoYXBwZW4uIFJldHVybiBgdHJ1ZWAgdG8gdHJpZ2dlciBhIGZhdGFsIGVycm9yIChwYW5pYykuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgICAgZG8ge1xuICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgICAgIHZhciBfZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBsYW5lKTtcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBfZXJyb3JJbmZvLFxuICAgICAgICAgICAgICBsYW5lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCB1cGRhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICAgICAgdmFyIGVycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzJDEgJiZcbiAgICAgICAgICAgICAgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICAgICAgKGluc3RhbmNlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBfbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBlcnJvckluZm8sXG4gICAgICAgICAgICAgICAgX2xhbmVcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjsgLy8gQSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGF0J3MgdXNlZCB0byB1bndpbmQgdGhlIHN0YWNrIHdoZW4gYW4gdXBkYXRlIGZsb3dzXG4gICAgLy8gaW50byBhIGRlaHlkcmF0ZWQgYm91bmRhcnkuXG5cbiAgICB2YXIgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uID0gbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IuIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFJlYWN0J3MgXCIgK1xuICAgICAgICBcInNlbGVjdGl2ZSBoeWRyYXRpb24gZmVhdHVyZS4gSWYgdGhpcyBsZWFrcyBpbnRvIHVzZXJzcGFjZSwgaXQncyBhIGJ1ZyBpbiBcIiArXG4gICAgICAgIFwiUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgICB2YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICAgIHZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcztcbiAgICB2YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbiAgICB2YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xuICAgIHZhciBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xuICAgIHZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG4gICAgdmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG4gICAgdmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyO1xuICAgIHZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcbiAgICB2YXIgZGlkV2FybkFib3V0RGVmYXVsdFByb3BzT25GdW5jdGlvbkNvbXBvbmVudDtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICAgIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IGZhbHNlO1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXIgPSB7fTtcbiAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG4gICAgICBkaWRXYXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgICAgIC8vIHdvbid0IHVwZGF0ZSBpdHMgY2hpbGQgc2V0IGJ5IGFwcGx5aW5nIG1pbmltYWwgc2lkZS1lZmZlY3RzLiBJbnN0ZWFkLFxuICAgICAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAgICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB3b3JrIGluIHByb2dyZXNzLCBpdCBtZWFucyB0aGF0XG4gICAgICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgICAgIC8vIElmIHdlIGhhZCBhbnkgcHJvZ3Jlc3NlZCB3b3JrIGFscmVhZHksIHRoYXQgaXMgaW52YWxpZCBhdCB0aGlzIHBvaW50IHNvXG4gICAgICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3JrIG9mIHJlY29uY2lsZUNoaWxkcmVuLiBJdCdzIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2VcbiAgICAgIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAgICAgLy8gYXJlIHRoZSBzYW1lLCB0aGUgb2xkIGNoaWxkIGlzIHVubW91bnRlZCBhbmQgYSBuZXcgY2hpbGQgaXMgY3JlYXRlZC5cbiAgICAgIC8vXG4gICAgICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAgICAgLy8gdGhlIGZpcnN0IHBhc3MsIHdlIHNjaGVkdWxlIGEgZGVsZXRpb24gZm9yIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbiBieVxuICAgICAgLy8gcGFzc2luZyBudWxsLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgICAgIC8vIHBhc3MgbnVsbCBpbiBwbGFjZSBvZiB3aGVyZSB3ZSB1c3VhbGx5IHBhc3MgdGhlIGN1cnJlbnQgY2hpbGQgc2V0LiBUaGlzIGhhc1xuICAgICAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXJcbiAgICAgIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBudWxsLFxuICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgICAgIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gICAgICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gICAgICB7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgICBpbm5lclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICAgICAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjsgLy8gVGhlIHJlc3QgaXMgYSBmb3JrIG9mIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50XG5cbiAgICAgIHZhciBuZXh0Q2hpbGRyZW47XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB7XG4gICAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgcmVuZGVyLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICByZWYsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJlxuICAgICAgICAgIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICAgICAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgcGxhaW4gZnVuY3Rpb24gY29tcG9uZW50IHdpdGhvdXQgZGVmYXVsdCBwcm9wcyxcbiAgICAgICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZXNvbHZlZFR5cGUsXG4gICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICAgIGlubmVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICAgICAgIFwicHJvcFwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKENvbXBvbmVudC5kZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkgfHwgXCJVbmtub3duXCI7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0RGVmYXVsdFByb3BzT25GdW5jdGlvbkNvbXBvbmVudFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIiVzOiBTdXBwb3J0IGZvciBkZWZhdWx0UHJvcHMgd2lsbCBiZSByZW1vdmVkIGZyb20gbWVtbyBjb21wb25lbnRzIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gVXNlIEphdmFTY3JpcHQgZGVmYXVsdCBwYXJhbWV0ZXJzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgICBDb21wb25lbnQudHlwZSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIGNoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgICAgY2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICAgICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgX2lubmVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAgICAgXCJwcm9wXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoX3R5cGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudENoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhpcyBpcyBhbHdheXMgZXhhY3RseSBvbmUgY2hpbGRcblxuICAgICAgdmFyIGhhc1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dCA9IGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcblxuICAgICAgaWYgKCFoYXNTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQpIHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBwcm9wcyB3aXRoIHJlc29sdmVkIGRlZmF1bHRQcm9wcyxcbiAgICAgICAgLy8gdW5saWtlIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB3aGljaCB3aWxsIGJlIHRoZSB1bnJlc29sdmVkIG9uZXMuXG4gICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgICAgICB2YXIgY29tcGFyZSA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgICAgICBjb21wYXJlID0gY29tcGFyZSAhPT0gbnVsbCA/IGNvbXBhcmUgOiBzaGFsbG93RXF1YWw7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICAgICAgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcyk7XG4gICAgICBuZXdDaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gICAgICByZXR1cm4gbmV3Q2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAgICAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAgICAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICAgICAge1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2Ugd2FybiB3aGVuIHlvdSBkZWZpbmUgcHJvcFR5cGVzIG9uIGxhenkoKVxuICAgICAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IG91dGVyTWVtb1R5cGU7XG4gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBpbml0KHBheWxvYWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBvdXRlck1lbW9UeXBlID0gbnVsbDtcbiAgICAgICAgICAgIH0gLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cblxuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgICAgIG91dGVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgKFNpbXBsZU1lbW9Db21wb25lbnQgaGFzIG5vIGRlZmF1bHRQcm9wcylcbiAgICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3V0ZXJNZW1vVHlwZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJlxuICAgICAgICAgIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZVxuICAgICAgICApIHtcbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoZSBwcm9wcyBhcmUgc2hhbGxvd2x5IGVxdWFsLiBSZXVzZSB0aGUgcHJldmlvdXMgcHJvcHMgb2JqZWN0LCBsaWtlIHdlXG4gICAgICAgICAgLy8gd291bGQgZHVyaW5nIGEgbm9ybWFsIGZpYmVyIGJhaWxvdXQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHN0cm9uZyBndWFyYW50ZWVzIHRoYXQgdGhlIHByb3BzIG9iamVjdCBpcyByZWZlcmVudGlhbGx5XG4gICAgICAgICAgLy8gZXF1YWwgZHVyaW5nIHVwZGF0ZXMgd2hlcmUgd2UgY2FuJ3QgYmFpbCBvdXQgYW55d2F5IOKAlCBsaWtlIGlmIHRoZSBwcm9wc1xuICAgICAgICAgIC8vIGFyZSBzaGFsbG93bHkgZXF1YWwsIGJ1dCB0aGVyZSdzIGEgbG9jYWwgc3RhdGUgb3IgY29udGV4dCB1cGRhdGUgaW4gdGhlXG4gICAgICAgICAgLy8gc2FtZSBiYXRjaC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEhvd2V2ZXIsIGFzIGEgcHJpbmNpcGxlLCB3ZSBzaG91bGQgYWltIHRvIG1ha2UgdGhlIGJlaGF2aW9yIGNvbnNpc3RlbnRcbiAgICAgICAgICAvLyBhY3Jvc3MgZGlmZmVyZW50IHdheXMgb2YgbWVtb2l6aW5nIGEgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgUmVhY3QubWVtb1xuICAgICAgICAgIC8vIGhhcyBhIGRpZmZlcmVudCBpbnRlcm5hbCBGaWJlciBsYXlvdXQgaWYgeW91IHBhc3MgYSBub3JtYWwgZnVuY3Rpb25cbiAgICAgICAgICAvLyBjb21wb25lbnQgKFNpbXBsZU1lbW9Db21wb25lbnQpIHZlcnN1cyBpZiB5b3UgcGFzcyBhIGRpZmZlcmVudCB0eXBlXG4gICAgICAgICAgLy8gbGlrZSBmb3J3YXJkUmVmIChNZW1vQ29tcG9uZW50KS4gQnV0IHRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuICAgICAgICAgIC8vIFdyYXBwaW5nIGEgY29tcG9uZW50IGluIGZvcndhcmRSZWYgKG9yIFJlYWN0LmxhenksIGV0Yykgc2hvdWxkbid0XG4gICAgICAgICAgLy8gYWZmZWN0IHdoZXRoZXIgdGhlIHByb3BzIG9iamVjdCBpcyByZXVzZWQgZHVyaW5nIGEgYmFpbG91dC5cblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IG5leHRQcm9wcyA9IHByZXZQcm9wcztcblxuICAgICAgICAgIGlmICghY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgICAgICAvLyBUaGUgcGVuZGluZyBsYW5lcyB3ZXJlIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBiZWdpbldvcmsuIFdlJ3JlXG4gICAgICAgICAgICAvLyBhYm91dCB0byBiYWlsIG91dCwgYnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGxhbmVzIHRoYXQgd2VyZW4ndFxuICAgICAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgICAgICAvLyByZW1haW5pbmcgdXBkYXRlcyBpcyBhY2N1bXVsYXRlZCBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgdGhlXG4gICAgICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIGFjY291bnQgZm9yIGl0IGhlcmUsIHRvby4gUmVzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGZpYmVyLlxuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgICAgIC8vIHJhdGhlciwgaXQgd3JhcHMgYXJvdW5kIGFuIGlubmVyIGNvbXBvbmVudCwgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAgICAgICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAgICAgLy8gdGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT1cbiAgICAgICAgICAgIE5vRmxhZ3MkMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgbmV4dElzRGV0YWNoZWQgPVxuICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIE9mZnNjcmVlbkRldGFjaGVkKSAhPT0gMDtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIGlmIChuZXh0UHJvcHMubW9kZSA9PT0gXCJoaWRkZW5cIiB8fCBlbmFibGVMZWdhY3lIaWRkZW4gfHwgbmV4dElzRGV0YWNoZWQpIHtcbiAgICAgICAgLy8gUmVuZGVyaW5nIGEgaGlkZGVuIHRyZWUuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MkMTtcblxuICAgICAgICBpZiAoZGlkU3VzcGVuZCkge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQgaW5zaWRlIGEgaGlkZGVuIHRyZWVcbiAgICAgICAgICAvLyBJbmNsdWRlIHRoZSBiYXNlIGxhbmVzIGZyb20gdGhlIGxhc3QgcmVuZGVyXG4gICAgICAgICAgdmFyIG5leHRCYXNlTGFuZXMgPVxuICAgICAgICAgICAgcHJldlN0YXRlICE9PSBudWxsXG4gICAgICAgICAgICAgID8gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcztcblxuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0byB0aGUgY3VycmVudCBjaGlsZHJlblxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDaGlsZCA9ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpOyAvLyBUaGUgY3VycmVudCByZW5kZXIgc3VzcGVuZGVkLCBidXQgdGhlcmUgbWF5IGJlIG90aGVyIGxhbmVzIHdpdGhcbiAgICAgICAgICAgIC8vIHBlbmRpbmcgd29yay4gV2UgY2FuJ3QgcmVhZCBgY2hpbGRMYW5lc2AgZnJvbSB0aGUgY3VycmVudCBPZmZzY3JlZW5cbiAgICAgICAgICAgIC8vIGZpYmVyIGJlY2F1c2Ugd2UgcmVzZXQgaXQgd2hlbiBpdCB3YXMgZGVmZXJyZWQ7IGhvd2V2ZXIsIHdlIGNhbiByZWFkXG4gICAgICAgICAgICAvLyB0aGUgcGVuZGluZyBsYW5lcyBmcm9tIHRoZSBjaGlsZCBmaWJlcnMuXG5cbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2hpbGRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY3VycmVudENoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICAgIG1lcmdlTGFuZXMoY3VycmVudENoaWxkTGFuZXMsIGN1cnJlbnRDaGlsZC5sYW5lcyksXG4gICAgICAgICAgICAgICAgY3VycmVudENoaWxkLmNoaWxkTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBsYW5lc1dlSnVzdEF0dGVtcHRlZCA9IG5leHRCYXNlTGFuZXM7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nQ2hpbGRMYW5lcyA9IHJlbW92ZUxhbmVzKFxuICAgICAgICAgICAgICBjdXJyZW50Q2hpbGRMYW5lcyxcbiAgICAgICAgICAgICAgbGFuZXNXZUp1c3RBdHRlbXB0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gcmVtYWluaW5nQ2hpbGRMYW5lcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgbmV4dEJhc2VMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGhvdyBPZmZzY3JlZW4gc2hvdWxkIHdvcmsgd2l0aCB0cmFuc2l0aW9ucyBpbiB0aGUgZnV0dXJlXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgICAgIGJhc2VMYW5lczogTm9MYW5lcyxcbiAgICAgICAgICAgIGNhY2hlUG9vbDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcblxuICAgICAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgICAgICAgIC8vIFdlJ3JlIGhpZGRlbiwgYW5kIHdlJ3JlIG5vdCByZW5kZXJpbmcgYXQgT2Zmc2NyZWVuLiBXZSB3aWxsIGJhaWwgb3V0XG4gICAgICAgICAgLy8gYW5kIHJlc3VtZSB0aGlzIHRyZWUgbGF0ZXIuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgT2Zmc2NyZWVuIHByaW9yaXR5XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID1cbiAgICAgICAgICAgIGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpOyAvLyBJbmNsdWRlIHRoZSBiYXNlIGxhbmVzIGZyb20gdGhlIGxhc3QgcmVuZGVyXG5cbiAgICAgICAgICB2YXIgX25leHRCYXNlTGFuZXMgPVxuICAgICAgICAgICAgcHJldlN0YXRlICE9PSBudWxsXG4gICAgICAgICAgICAgID8gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcztcblxuICAgICAgICAgIHJldHVybiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF9uZXh0QmFzZUxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzZWNvbmQgcmVuZGVyLiBUaGUgc3Vycm91bmRpbmcgdmlzaWJsZSBjb250ZW50IGhhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gY29tbWl0dGVkLiBOb3cgd2UgcmVzdW1lIHJlbmRlcmluZyB0aGUgaGlkZGVuIHRyZWUuXG4gICAgICAgICAgLy8gUmVuZGVyaW5nIGF0IG9mZnNjcmVlbiwgc28gd2UgY2FuIGNsZWFyIHRoZSBiYXNlIGxhbmVzLlxuICAgICAgICAgIHZhciBfbmV4dFN0YXRlID0ge1xuICAgICAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzLFxuICAgICAgICAgICAgY2FjaGVQb29sOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTtcblxuICAgICAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVuZGVyaW5nIGEgdmlzaWJsZSB0cmVlLlxuICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSk7XG4gICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTsgLy8gU2luY2Ugd2UncmUgbm90IGhpZGRlbiBhbnltb3JlLCByZXNldCB0aGUgc3RhdGVcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICAgICAgcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0QmFzZUxhbmVzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lcyxcbiAgICAgICAgLy8gU2F2ZSB0aGUgY2FjaGUgcG9vbCBzbyB3ZSBjYW4gcmVzdW1lIGxhdGVyLlxuICAgICAgICBjYWNoZVBvb2w6IG51bGxcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgLy8gdG8gYXZvaWQgYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG5cbiAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcbiAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gICAgICBpZiAoXG4gICAgICAgIChjdXJyZW50ID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCkgfHxcbiAgICAgICAgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZilcbiAgICAgICkge1xuICAgICAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWZTdGF0aWM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAge1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICAgICAgaW5uZXJQcm9wVHlwZXMsXG4gICAgICAgICAgICAgIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgICAgICAgXCJwcm9wXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dDtcblxuICAgICAge1xuICAgICAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV4dENoaWxkcmVuO1xuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAge1xuICAgICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBzZWNvbmRBcmcsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlcGxheSBhIGNvbXBvbmVudCB0aGF0IHByZXZpb3VzbHkgc3VzcGVuZGVkLFxuICAgICAgLy8gYWZ0ZXIgaXRzIGRhdGEgcmVzb2x2ZXMuIEl0J3MgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2ZcbiAgICAgIC8vIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50IHRoYXQgcmV1c2VzIHRoZSBob29rcyBmcm9tIHRoZSBwcmV2aW91cyBhdHRlbXB0LlxuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHJlcGxheVN1c3BlbmRlZENvbXBvbmVudFdpdGhIb29rcyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICBzZWNvbmRBcmdcbiAgICAgICk7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAge1xuICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBlcnJvci5cbiAgICAgICAgc3dpdGNoIChzaG91bGRFcnJvcih3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICBjYXNlIGZhbHNlOiB7XG4gICAgICAgICAgICB2YXIgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUT0RPIFRoaXMgd2F5IG9mIHJlc2V0dGluZyB0aGUgZXJyb3IgYm91bmRhcnkgc3RhdGUgaXMgYSBoYWNrLlxuICAgICAgICAgICAgLy8gSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM/XG5cbiAgICAgICAgICAgIHZhciB0ZW1wSW5zdGFuY2UgPSBuZXcgY3RvcihcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLmNvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB0ZW1wSW5zdGFuY2Uuc3RhdGU7XG5cbiAgICAgICAgICAgIF9pbnN0YW5jZS51cGRhdGVyLmVucXVldWVTZXRTdGF0ZShfaW5zdGFuY2UsIHN0YXRlLCBudWxsKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSB0cnVlOiB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcblxuICAgICAgICAgICAgdmFyIGVycm9yJDEgPSBuZXcgRXJyb3IoXCJTaW11bGF0ZWQgZXJyb3IgY29taW5nIGZyb20gRGV2VG9vbHNcIik7XG4gICAgICAgICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yJDEsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgdXBkYXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgICAgICBpbm5lclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICAgIHZhciBoYXNDb250ZXh0O1xuXG4gICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICAgICAgcmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7IC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuXG4gICAgICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIEluIGEgcmVzdW1lLCB3ZSdsbCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2Ugd2UgY2FuIHJldXNlLlxuICAgICAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2UoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRVbml0T2ZXb3JrID0gZmluaXNoQ2xhc3NDb21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHNob3VsZFVwZGF0ZSxcbiAgICAgICAgaGFzQ29udGV4dCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG5cbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSAmJiBpbnN0LnByb3BzICE9PSBuZXh0UHJvcHMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIkl0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcImEgY29tcG9uZW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmlzaENsYXNzQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgc2hvdWxkVXBkYXRlLFxuICAgICAgaGFzQ29udGV4dCxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICAgICAgbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgICBpZiAoIXNob3VsZFVwZGF0ZSAmJiAhZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgICAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFJlcmVuZGVyXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgdmFyIG5leHRDaGlsZHJlbjtcblxuICAgICAgaWYgKFxuICAgICAgICBkaWRDYXB0dXJlRXJyb3IgJiZcbiAgICAgICAgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09IFwiZnVuY3Rpb25cIlxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIHdlIGNhcHR1cmVkIGFuIGVycm9yLCBidXQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzIG5vdCBkZWZpbmVkLFxuICAgICAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgICAgIC8vIHRoZSBuZXcgQVBJLlxuICAgICAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICAgICAge1xuICAgICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHtcbiAgICAgICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcblxuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGRpZENhcHR1cmVFcnJvcikge1xuICAgICAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgICAgIC8vIHRoZSBleGlzdGluZyBjaGlsZHJlbi4gQ29uY2VwdHVhbGx5LCB0aGUgbm9ybWFsIGNoaWxkcmVuIGFuZCB0aGUgY2hpbGRyZW5cbiAgICAgICAgLy8gdGhhdCBhcmUgc2hvd24gb24gZXJyb3IgYXJlIHR3byBkaWZmZXJlbnQgc2V0cywgc28gd2Ugc2hvdWxkbid0IHJldXNlXG4gICAgICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgICAgIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gICAgICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOyAvLyBUaGUgY29udGV4dCBtaWdodCBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdC5cblxuICAgICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICBpZiAocm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgICAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJvb3QucGVuZGluZ0NvbnRleHQsXG4gICAgICAgICAgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgICAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgICAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZS5lbGVtZW50O1xuICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAvLyBpdCBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdGhlIGBwdXNoQ2FjaGVQcm92aWRlcmAgY2FsbCBhYm92ZSB0byBhdm9pZCBhXG4gICAgICAvLyBjb250ZXh0IHN0YWNrIG1pc21hdGNoLiBBIGJpdCB1bmZvcnR1bmF0ZS5cblxuICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gICAgICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0U3RhdGUuZWxlbWVudDtcblxuICAgICAge1xuICAgICAgICBpZiAobmV4dENoaWxkcmVuID09PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCgpKSB7XG4gICAgICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgICAgIC8vIGVtcHR5LCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSB0ZXh0IGNvbnRlbnQgdG8gYmUgcmVzZXQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENvbnRlbnRSZXNldDtcbiAgICAgIH1cblxuICAgICAgbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVIb3N0VGV4dCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRMYXp5Q29tcG9uZW50KFxuICAgICAgX2N1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gZWxlbWVudFR5cGU7XG4gICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gICAgICB2YXIgQ29tcG9uZW50ID0gaW5pdChwYXlsb2FkKTsgLy8gU3RvcmUgdGhlIHVud3JhcHBlZCBjb21wb25lbnQgaW4gdGhlIHR5cGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gICAgICB2YXIgcmVzb2x2ZWRUYWcgPSAod29ya0luUHJvZ3Jlc3MudGFnID1cbiAgICAgICAgcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSk7XG4gICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gICAgICB2YXIgY2hpbGQ7XG5cbiAgICAgIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPVxuICAgICAgICAgICAgICByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgcmVzb2x2ZWRQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9XG4gICAgICAgICAgICAgIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICByZXNvbHZlZFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPVxuICAgICAgICAgICAgICByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHJlc29sdmVkUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICAgICAgICBvdXRlclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LnR5cGUsIHJlc29sdmVkUHJvcHMpLCAvLyBUaGUgaW5uZXIgdHlwZSBjYW4gaGF2ZSBkZWZhdWx0cyB0b29cbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGhpbnQgPSBcIlwiO1xuXG4gICAgICB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBDb21wb25lbnQgIT09IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgQ29tcG9uZW50ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGludCA9IFwiIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/XCI7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAgICAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbC5cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgK1xuICAgICAgICAgIENvbXBvbmVudCArXG4gICAgICAgICAgXCIuIFwiICtcbiAgICAgICAgICAoXCJMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArIGhpbnQpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgX2N1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlKF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7IC8vIFByb21vdGUgdGhlIGZpYmVyIHRvIGEgY2xhc3MgYW5kIHRyeSByZW5kZXJpbmcgYWdhaW4uXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yayBvZiBgdXBkYXRlQ2xhc3NDb21wb25lbnRgXG4gICAgICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgICAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gICAgICB2YXIgaGFzQ29udGV4dDtcblxuICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KFxuICAgICAgICBudWxsLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICB0cnVlLFxuICAgICAgICBoYXNDb250ZXh0LFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoXG4gICAgICBfY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBjb250ZXh0O1xuXG4gICAgICB7XG4gICAgICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIHZhbHVlO1xuXG4gICAgICB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBDb21wb25lbnQucHJvdG90eXBlICYmXG4gICAgICAgICAgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFwiICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3IgbW9kdWxlIGNvbXBvbmVudHMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgcmVtb3ZlZCBiZWhpbmQgYSBmbGFnLlxuICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuIFwiICtcbiAgICAgICAgICAgICAgICBcIkNoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gXCIgK1xuICAgICAgICAgICAgICAgIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArXG4gICAgICAgICAgICAgICAgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArXG4gICAgICAgICAgICAgICAgXCJjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuXCIsXG4gICAgICAgICAgICAgIF9jb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICBfY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gICAgICAgIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUucmVuZGVyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID1cbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiO1xuXG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuIFwiICtcbiAgICAgICAgICAgICAgICBcIkNoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gXCIgK1xuICAgICAgICAgICAgICAgIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArXG4gICAgICAgICAgICAgICAgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArXG4gICAgICAgICAgICAgICAgXCJjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuXCIsXG4gICAgICAgICAgICAgIF9jb21wb25lbnROYW1lMixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWUyLFxuICAgICAgICAgICAgICBfY29tcG9uZW50TmFtZTJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhyb3cgb3V0IGFueSBob29rcyB0aGF0IHdlcmUgdXNlZC5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgICAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgICAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB2YWx1ZS5zdGF0ZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIGhhc0NvbnRleHQsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgICAgIGlmIChDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LlwiLFxuICAgICAgICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGluZm8gPSBcIlwiO1xuICAgICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCI7XG4gICAgICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICBpbmZvICs9IFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgb3duZXJOYW1lICsgXCJgLlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB3YXJuaW5nS2V5ID0gY29tcG9uZW50TmFtZSArIFwifFwiICsgKG93bmVyTmFtZSB8fCBcIlwiKTtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzLiBcIiArXG4gICAgICAgICAgICAgICAgXCJBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiBcIiArXG4gICAgICAgICAgICAgICAgXCJEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lc1wiLFxuICAgICAgICAgICAgICBpbmZvXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChDb21wb25lbnQuZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID1cbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiO1xuXG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzOiBTdXBwb3J0IGZvciBkZWZhdWx0UHJvcHMgd2lsbCBiZSByZW1vdmVkIGZyb20gZnVuY3Rpb24gY29tcG9uZW50cyBcIiArXG4gICAgICAgICAgICAgICAgXCJpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBVc2UgSmF2YVNjcmlwdCBkZWZhdWx0IHBhcmFtZXRlcnMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWUzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9XG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIjtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy5cIixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWU0XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPVxuICAgICAgICAgICAgICB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgQ29tcG9uZW50LmNvbnRleHRUeXBlICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBfY29tcG9uZW50TmFtZTUgPVxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCI7XG5cbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTVdKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS5cIixcbiAgICAgICAgICAgICAgX2NvbXBvbmVudE5hbWU1XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU1XSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gICAgICBkZWh5ZHJhdGVkOiBudWxsLFxuICAgICAgdHJlZUNvbnRleHQ6IG51bGwsXG4gICAgICByZXRyeUxhbmU6IE5vTGFuZVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXMsXG4gICAgICAgIGNhY2hlUG9vbDogZ2V0U3VzcGVuZGVkQ2FjaGUoKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBjYWNoZVBvb2wgPSBudWxsO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlTGFuZXM6IG1lcmdlTGFuZXMocHJldk9mZnNjcmVlblN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICBjYWNoZVBvb2w6IGNhY2hlUG9vbFxuICAgICAgfTtcbiAgICB9IC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCBpbmxpbmUgdGhpcyBiYWNrXG5cbiAgICBmdW5jdGlvbiBzaG91bGRSZW1haW5PbkZhbGxiYWNrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gICAgICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIFN1c3BlbnNlTGlzdCBjb29yZGluYXRlcyB3aGVuIG5lc3RlZCBjb250ZW50IGFwcGVhcnMuXG4gICAgICAvLyBUT0RPOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9mZnNjcmVlbiBwcmVyZW5kZXJpbmcsIHRoaXMgc2hvdWxkIGFsc28gY2hlY2tcbiAgICAgIC8vIHdoZXRoZXIgdGhlIGN1cnJlbnQgZmliZXIgKGlmIGl0IGV4aXN0cykgd2FzIHZpc2libGUgaW4gdGhlIHByZXZpb3VzIHRyZWUuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICAgLy8gaXMgdHJ1ZS4gTW9yZSBwcmVjaXNlIG5hbWUgbWlnaHQgYmUgXCJGb3JjZVJlbWFpblN1c3BlbnNlRmFsbGJhY2tcIi5cbiAgICAgICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAgICAgLy8gbm8gZmFsbGJhY2sgdG8gcmVtYWluIG9uLlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBOb3QgY3VycmVudGx5IHNob3dpbmcgY29udGVudC4gQ29uc3VsdCB0aGUgU3VzcGVuc2UgY29udGV4dC5cblxuICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIHJldHVybiBoYXNTdXNwZW5zZUxpc3RDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgIGN1cnJlbnQsXG4gICAgICBwcmltYXJ5VHJlZURpZERlZmVyLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciByZW1haW5pbmdMYW5lcyA9XG4gICAgICAgIGN1cnJlbnQgIT09IG51bGxcbiAgICAgICAgICA/IHJlbW92ZUxhbmVzKGN1cnJlbnQuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgOiBOb0xhbmVzO1xuXG4gICAgICBpZiAocHJpbWFyeVRyZWVEaWREZWZlcikge1xuICAgICAgICAvLyBBIHVzZURlZmVycmVkVmFsdWUgaG9vayBzcGF3bmVkIGEgZGVmZXJyZWQgdGFzayBpbnNpZGUgdGhlIHByaW1hcnkgdHJlZS5cbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgcmV0cnkgdGhpcyBjb21wb25lbnQgYXQgdGhlIGRlZmVycmVkIHByaW9yaXR5LlxuICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBtYWtlIHRoaXMgYSBwZXItc3VidHJlZSB2YWx1ZSBpbnN0ZWFkIG9mIGEgZ2xvYmFsIG9uZS5cbiAgICAgICAgLy8gV291bGQgbmVlZCB0byB0cmFjayBpdCBvbiB0aGUgY29udGV4dCBzdGFjayBzb21laG93LCBzaW1pbGFyIHRvIHdoYXRcbiAgICAgICAgLy8gd2UnZCBoYXZlIHRvIGRvIGZvciByZXN1bWFibGUgY29udGV4dHMuXG4gICAgICAgIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhyZW1haW5pbmdMYW5lcywgcGVla0RlZmVycmVkTGFuZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbWFpbmluZ0xhbmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gc3VzcGVuZC5cblxuICAgICAge1xuICAgICAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93RmFsbGJhY2sgPSBmYWxzZTtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MkMTtcblxuICAgICAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhjdXJyZW50KSkge1xuICAgICAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgICAgICAvLyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+RGlkQ2FwdHVyZTtcbiAgICAgIH0gLy8gQ2hlY2sgaWYgdGhlIHByaW1hcnkgY2hpbGRyZW4gc3Bhd25lZCBhIGRlZmVycmVkIHRhc2sgKHVzZURlZmVycmVkVmFsdWUpXG4gICAgICAvLyBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG5cbiAgICAgIHZhciBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciA9XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZERlZmVyKSAhPT0gTm9GbGFncyQxO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkRpZERlZmVyOyAvLyBPSywgdGhlIG5leHQgcGFydCBpcyBjb25mdXNpbmcuIFdlJ3JlIGFib3V0IHRvIHJlY29uY2lsZSB0aGUgU3VzcGVuc2VcbiAgICAgIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxpYXRpb24gbG9naWMuIFR3b1xuICAgICAgLy8gbWFpbiByZWFzb25zIHRoaXMgaXMgc28gY29tcGxpY2F0ZWQuXG4gICAgICAvL1xuICAgICAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gICAgICAvLyBwcmltYXJ5IHRyZWUgd2lsbCBjb21taXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCBzbyB3aGVuIHdlIGRvIHRoZVxuICAgICAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAgICAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAgICAgLy8gZGVsZXRpb25zIGZyb20gaGlkZGVuIHRyZWUuIEluIENvbmN1cnJlbnQgTW9kZSwgaXQncyBtdWNoIHNpbXBsZXIsXG4gICAgICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gICAgICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gICAgICAvLyBPZmZzY3JlZW4gZG9lc24ndCBoYXZlIHRoZSBmaXJzdCByZW5kZXIgcGFzcykuXG4gICAgICAvL1xuICAgICAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gICAgICAvLyBkaWZmZXJlbnQgbGF5b3V0LCB3aGVyZSB0aGUgY2hpbGQgcG9pbnRzIHRvIGEgZGVoeWRyYXRlZCBmcmFnbWVudCwgd2hpY2hcbiAgICAgIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlyZCwgZXZlbiBpZiB5b3Ugc2V0IGFsbCB0aGF0IGFzaWRlLCBTdXNwZW5zZSBpcyBsaWtlIGVycm9yIGJvdW5kYXJpZXMgaW5cbiAgICAgIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAgICAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gICAgICAvLyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IHJlbmRlcmluZy4gSWRlYWxseSB3ZSB3b3VsZCBtb2RlbCB0aGlzIHVzaW5nXG4gICAgICAvLyBhIHN0YWNrLlxuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgICBwdXNoRmFsbGJhY2tUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgICBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcblxuICAgICAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW5cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIHVwZGF0ZS5cbiAgICAgICAgLy8gU3BlY2lhbCBwYXRoIGZvciBoeWRyYXRpb25cbiAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9kZWh5ZHJhdGVkID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgICBpZiAoX2RlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBkaWRTdXNwZW5kLFxuICAgICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICBfZGVoeWRyYXRlZCxcbiAgICAgICAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgICAgcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF9uZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgX25leHRGYWxsYmFja0NoaWxkcmVuLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsXG4gICAgICAgICAgICAgID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKVxuICAgICAgICAgICAgICA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBfbmV4dFByaW1hcnlDaGlsZHJlbjIsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50MztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHByaW1hcnlDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgICAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICBwcmltYXJ5Q2hpbGRQcm9wcyxcbiAgICAgICAgbW9kZVxuICAgICAgKTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICAgIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcHJpbWFyeUNoaWxkcmVuLFxuICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgICAgICBtb2RlOiBcImhpZGRlblwiLFxuICAgICAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICAgICAgaWYgKFxuICAgICAgICAobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlICYmXG4gICAgICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgIHByaW1hcnlDaGlsZFByb3BzLFxuICAgICAgICAgIG1vZGVcbiAgICAgICAgKTtcbiAgICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgICAgIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgb2Zmc2NyZWVuUHJvcHMsXG4gICAgICBtb2RlLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIC8vIFRoZSBwcm9wcyBhcmd1bWVudCB0byBgY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlXG4gICAgICAvLyB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihvZmZzY3JlZW5Qcm9wcywgbW9kZSwgTm9MYW5lcywgbnVsbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAgICAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gICAgICAvLyB3cmFwcGVyIGZ1bmN0aW9uIHRvIGNvbnN0cmFpbiBpdC5cbiAgICAgIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBwcmltYXJ5Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZTogXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgICAgfVxuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gICAgICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBEZWxldGUgdGhlIGZhbGxiYWNrIGNoaWxkIGZyYWdtZW50XG4gICAgICAgIHZhciBkZWxldGlvbnMgPSB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnM7XG5cbiAgICAgICAgaWYgKGRlbGV0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IFtjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50XTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDaGlsZERlbGV0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0aW9ucy5wdXNoKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gICAgICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcHJpbWFyeUNoaWxkcmVuLFxuICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgICAgIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgICAgIG1vZGU6IFwiaGlkZGVuXCIsXG4gICAgICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgICAgIH07XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAgICAgICAobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gICAgICAgIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgICAgICAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgICAgICAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgICAgICAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gICAgICAgIC8vIG9ubHkgY29kZXBhdGguKVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50XG4gICAgICApIHtcbiAgICAgICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9XG4gICAgICAgICAgICBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID1cbiAgICAgICAgICAgIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICB9IC8vIFRoZSBmYWxsYmFjayBmaWJlciB3YXMgYWRkZWQgYXMgYSBkZWxldGlvbiBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG4gICAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlbWFpbiBvbiB0aGUgZmFsbGJhY2ssIHdlIG5vIGxvbmdlciB3YW50XG4gICAgICAgIC8vIHRvIGRlbGV0ZSBpdC5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCxcbiAgICAgICAgICBwcmltYXJ5Q2hpbGRQcm9wc1xuICAgICAgICApOyAvLyBTaW5jZSB3ZSdyZSByZXVzaW5nIGEgY3VycmVudCB0cmVlLCB3ZSBuZWVkIHRvIHJldXNlIHRoZSBmbGFncywgdG9vLlxuICAgICAgICAvLyAoV2UgZG9uJ3QgZG8gdGhpcyBpbiBsZWdhY3kgbW9kZSwgYmVjYXVzZSBpbiBsZWdhY3kgbW9kZSB3ZSBkb24ndCByZS11c2VcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgdHJlZTsgc2VlIHByZXZpb3VzIGJyYW5jaC4pXG5cbiAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc3VidHJlZUZsYWdzID1cbiAgICAgICAgICBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc3VidHJlZUZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgIH1cblxuICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICAgICAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCxcbiAgICAgICAgICBmYWxsYmFja0NoaWxkcmVuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICBmYWxsYmFja0NoaWxkcmVuLFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAgICAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgICAgfVxuXG4gICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgICAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgcmVjb3ZlcmFibGVFcnJvclxuICAgICkge1xuICAgICAgLy8gRmFsbGluZyBiYWNrIHRvIGNsaWVudCByZW5kZXJpbmcuIEJlY2F1c2UgdGhpcyBoYXMgcGVyZm9ybWFuY2VcbiAgICAgIC8vIGltcGxpY2F0aW9ucywgaXQncyBjb25zaWRlcmVkIGEgcmVjb3ZlcmFibGUgZXJyb3IsIGV2ZW4gdGhvdWdoIHRoZSB1c2VyXG4gICAgICAvLyBsaWtlbHkgd29uJ3Qgb2JzZXJ2ZSBhbnl0aGluZyB3cm9uZyB3aXRoIHRoZSBVSS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgZXJyb3IgaXMgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50IHRvIGVuZm9yY2UgdGhhdCBldmVyeSBjYWxsZXIgcHJvdmlkZVxuICAgICAgLy8gYSBjdXN0b20gbWVzc2FnZSwgb3IgZXhwbGljaXRseSBvcHQgb3V0IChjdXJyZW50bHkgdGhlIG9ubHkgcGF0aCB0aGF0IG9wdHNcbiAgICAgIC8vIG91dCBpcyBsZWdhY3kgbW9kZTsgZXZlcnkgY29uY3VycmVudCBwYXRoIHByb3ZpZGVzIGFuIGVycm9yKS5cbiAgICAgIGlmIChyZWNvdmVyYWJsZUVycm9yICE9PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IocmVjb3ZlcmFibGVFcnJvcik7XG4gICAgICB9IC8vIFRoaXMgd2lsbCBhZGQgdGhlIG9sZCBmaWJlciB0byB0aGUgZGVsZXRpb24gbGlzdFxuXG4gICAgICByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBXZSdyZSBub3cgbm90IHN1c3BlbmRlZCBub3IgZGVoeWRyYXRlZC5cblxuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgcHJpbWFyeUNoaWxkcmVuXG4gICAgICApOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAgIC8vIG1vdW50ZWQgYnV0IHRoaXMgaXMgYSBuZXcgZmliZXIuXG5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0FmdGVyUmV0cnlXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcHJpbWFyeUNoaWxkcmVuLFxuICAgICAgZmFsbGJhY2tDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgZmliZXJNb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICAgICAgbW9kZTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgICAgIH07XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgIHByaW1hcnlDaGlsZFByb3BzLFxuICAgICAgICBmaWJlck1vZGVcbiAgICAgICk7XG4gICAgICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgIGZhbGxiYWNrQ2hpbGRyZW4sXG4gICAgICAgIGZpYmVyTW9kZSxcbiAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgIG51bGxcbiAgICAgICk7IC8vIE5lZWRzIGEgcGxhY2VtZW50IGVmZmVjdCBiZWNhdXNlIHRoZSBwYXJlbnQgKHRoZSBTdXNwZW5zZVxuICAgICAgLy8gYm91bmRhcnkpIGFscmVhZHkgbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBkcm9wcGVkIHRoZSBlZmZlY3QgbGlzdCB3aGljaCBjb250YWlucyB0aGVcbiAgICAgICAgLy8gZGVsZXRpb24uIFdlIG5lZWQgdG8gcmVjb25jaWxlIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBjaGlsZC5cbiAgICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBkaWRTdXNwZW5kLFxuICAgICAgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICBzdXNwZW5zZUluc3RhbmNlLFxuICAgICAgc3VzcGVuc2VTdGF0ZSxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAoIWRpZFN1c3BlbmQpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcmVuZGVyIHBhc3MuIEF0dGVtcHQgdG8gaHlkcmF0ZS5cbiAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGh5ZHJhdGluZyBhdCB0aGlzIHBvaW50IGJlY2F1c2UgaXQgaXMgdGhlIGZpcnN0IHBhc3MsXG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIGluIGEgcGVybWFuZW50IGZhbGxiYWNrIHN0YXRlLiBJbiB0aGlzIGNhc2UsIHdlJ2xsIG5ldmVyXG4gICAgICAgICAgLy8gZ2V0IGFuIHVwZGF0ZSBhbmQgd2UnbGwgbmV2ZXIgYmUgYWJsZSB0byBoeWRyYXRlIHRoZSBmaW5hbCBjb250ZW50LiBMZXQncyBqdXN0IHRyeSB0aGVcbiAgICAgICAgICAvLyBjbGllbnQgc2lkZSByZW5kZXIgaW5zdGVhZC5cbiAgICAgICAgICB2YXIgZGlnZXN0O1xuICAgICAgICAgIHZhciBtZXNzYWdlLCBzdGFjaztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfZ2V0U3VzcGVuc2VJbnN0YW5jZUYgPVxuICAgICAgICAgICAgICBnZXRTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2tFcnJvckRldGFpbHMoKTtcblxuICAgICAgICAgICAgZGlnZXN0ID0gX2dldFN1c3BlbnNlSW5zdGFuY2VGLmRpZ2VzdDtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBfZ2V0U3VzcGVuc2VJbnN0YW5jZUYubWVzc2FnZTtcbiAgICAgICAgICAgIHN0YWNrID0gX2dldFN1c3BlbnNlSW5zdGFuY2VGLnN0YWNrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjYXB0dXJlZFZhbHVlID0gbnVsbDsgLy8gVE9ETzogRmlndXJlIG91dCBhIGJldHRlciBzaWduYWwgdGhhbiBlbmNvZGluZyBhIG1hZ2ljIGRpZ2VzdCB2YWx1ZS5cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBlcnJvcjtcblxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBzZXJ2ZXIgY291bGQgbm90IGZpbmlzaCB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LCBsaWtlbHkgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJkdWUgdG8gYW4gZXJyb3IgZHVyaW5nIHNlcnZlciByZW5kZXJpbmcuIFN3aXRjaGVkIHRvIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5kaWdlc3QgPSBkaWdlc3Q7XG4gICAgICAgICAgICBjYXB0dXJlZFZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgZGlnZXN0LCBzdGFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICBjYXB0dXJlZFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhbnkgY29udGV4dCBoYXMgY2hhbmdlZCwgd2UgbmVlZCB0byB0cmVhdCBpcyBhcyBpZiB0aGUgaW5wdXQgbWlnaHQgaGF2ZSBjaGFuZ2VkLlxuXG4gICAgICAgIHZhciBoYXNDb250ZXh0Q2hhbmdlZCA9IGluY2x1ZGVzU29tZUxhbmUoXG4gICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgY3VycmVudC5jaGlsZExhbmVzXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRpZFJlY2VpdmVVcGRhdGUgfHwgaGFzQ29udGV4dENoYW5nZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBmaXJzdCByZW5kZXIuIFRoaXMgbWVhbnMgdGhhdCB3ZSBhcmUgbm93IHVuYWJsZSB0b1xuICAgICAgICAgIC8vIGh5ZHJhdGUgaXQuIFdlIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gaHlkcmF0ZSBpdCB1c2luZyBhIGhpZ2hlciBwcmlvcml0eSBsYW5lLlxuICAgICAgICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGF0dGVtcHRIeWRyYXRpb25BdExhbmUgPSBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uKFxuICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRMYW5lICE9PSBOb0xhbmUgJiZcbiAgICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0TGFuZSAhPT0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IG11dGF0aW5nIHNpbmNlIHRoaXMgcmVuZGVyIHdpbGwgZ2V0IGludGVycnVwdGVkLiBUaGlzXG4gICAgICAgICAgICAgIC8vIGlzIG9uZSBvZiB0aGUgdmVyeSByYXJlIHRpbWVzIHdoZXJlIHdlIG11dGF0ZSB0aGUgY3VycmVudCB0cmVlXG4gICAgICAgICAgICAgIC8vIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgICAgICAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGF0dGVtcHRIeWRyYXRpb25BdExhbmU7XG4gICAgICAgICAgICAgIGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShjdXJyZW50LCBhdHRlbXB0SHlkcmF0aW9uQXRMYW5lKTtcbiAgICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGN1cnJlbnQsIGF0dGVtcHRIeWRyYXRpb25BdExhbmUpOyAvLyBUaHJvdyBhIHNwZWNpYWwgb2JqZWN0IHRoYXQgc2lnbmFscyB0byB0aGUgd29yayBsb29wIHRoYXQgaXQgc2hvdWxkXG4gICAgICAgICAgICAgIC8vIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UncmUgaW5zaWRlIGEgUmVhY3Qtb25seSBleGVjdXRpb24gc3RhY2ssIHdlIGRvbid0XG4gICAgICAgICAgICAgIC8vIHN0cmljdGx5IG5lZWQgdG8gdGhyb3cgaGVyZSDigJQgd2UgY291bGQgaW5zdGVhZCBtb2RpZnkgc29tZSBpbnRlcm5hbFxuICAgICAgICAgICAgICAvLyB3b3JrIGxvb3Agc3RhdGUuIEJ1dCB1c2luZyBhbiBleGNlcHRpb24gbWVhbnMgd2UgZG9uJ3QgbmVlZCB0b1xuICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgdGhpcyBjYXNlIG9uIGV2ZXJ5IGl0ZXJhdGlvbiBvZiB0aGUgd29yayBsb29wLiBTbyBkb2luZ1xuICAgICAgICAgICAgICAvLyBpdCB0aGlzIHdheSBtb3ZlcyB0aGUgY2hlY2sgb3V0IG9mIHRoZSBmYXN0IHBhdGguXG5cbiAgICAgICAgICAgICAgdGhyb3cgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gSWYgd2UgZGlkIG5vdCBzZWxlY3RpdmVseSBoeWRyYXRlLCB3ZSdsbCBjb250aW51ZSByZW5kZXJpbmcgd2l0aG91dFxuICAgICAgICAgIC8vIGh5ZHJhdGluZy4gTWFyayB0aGlzIHRyZWUgYXMgc3VzcGVuZGVkIHRvIHByZXZlbnQgaXQgZnJvbSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gb3V0c2lkZSBhIHRyYW5zaXRpb24uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIHBhdGggc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBoeWRyYXRpb24gbGFuZSBhbHJlYWR5IHN1c3BlbmRlZC5cbiAgICAgICAgICAvLyBDdXJyZW50bHksIGl0IGFsc28gaGFwcGVucyBkdXJpbmcgc3luYyB1cGRhdGVzIGJlY2F1c2UgdGhlcmUgaXMgbm9cbiAgICAgICAgICAvLyBoeWRyYXRpb24gbGFuZSBmb3Igc3luYyB1cGRhdGVzLlxuICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBpZGVhbGx5IGhhdmUgYSBzeW5jIGh5ZHJhdGlvbiBsYW5lIHRoYXQgd2UgY2FuIGFwcGx5IHRvIGRvXG4gICAgICAgICAgLy8gYSBwYXNzIHdoZXJlIHdlIGh5ZHJhdGUgdGhpcyBzdWJ0cmVlIGluIHBsYWNlIHVzaW5nIHRoZSBwcmV2aW91cyBDb250ZXh0IGFuZCB0aGVuXG4gICAgICAgICAgLy8gcmVhcHBseSB0aGUgdXBkYXRlIGFmdGVyd2FyZHMuXG5cbiAgICAgICAgICBpZiAoaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZygpKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoKSkge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIHN0aWxsIHBlbmRpbmcgbW9yZSBkYXRhIGZyb20gdGhlIHNlcnZlciwgc28gd2UgY2FuJ3QgaHlkcmF0ZSBpdHNcbiAgICAgICAgICAvLyBjb250ZW50LiBXZSB0cmVhdCBpdCBhcyBpZiB0aGlzIGNvbXBvbmVudCBzdXNwZW5kZWQgaXRzZWxmLiBJdCBtaWdodCBzZWVtIGFzIGlmXG4gICAgICAgICAgLy8gd2UgY291bGQganVzdCB0cnkgdG8gcmVuZGVyIGl0IGNsaWVudC1zaWRlIGluc3RlYWQuIEhvd2V2ZXIsIHRoaXMgd2lsbCBwZXJmb3JtIGFcbiAgICAgICAgICAvLyBsb3Qgb2YgdW5uZWNlc3Nhcnkgd29yayBhbmQgaXMgdW5saWtlbHkgdG8gY29tcGxldGUgc2luY2UgaXQgb2Z0ZW4gd2lsbCBzdXNwZW5kXG4gICAgICAgICAgLy8gb24gbWlzc2luZyBkYXRhIGFueXdheS4gQWRkaXRpb25hbGx5LCB0aGUgc2VydmVyIG1pZ2h0IGJlIGFibGUgdG8gcmVuZGVyIG1vcmVcbiAgICAgICAgICAvLyB0aGFuIHdlIGNhbiBvbiB0aGUgY2xpZW50IHlldC4gSW4gdGhhdCBjYXNlIHdlJ2QgZW5kIHVwIHdpdGggbW9yZSBmYWxsYmFjayBzdGF0ZXNcbiAgICAgICAgICAvLyBvbiB0aGUgY2xpZW50IHRoYW4gaWYgd2UganVzdCBsZWF2ZSBpdCBhbG9uZS4gSWYgdGhlIHNlcnZlciB0aW1lcyBvdXQgb3IgZXJyb3JzXG4gICAgICAgICAgLy8gdGhlc2Ugc2hvdWxkIHVwZGF0ZSB0aGlzIGJvdW5kYXJ5IHRvIHRoZSBwZXJtYW5lbnQgRmFsbGJhY2sgc3RhdGUgaW5zdGVhZC5cbiAgICAgICAgICAvLyBNYXJrIGl0IGFzIGhhdmluZyBjYXB0dXJlZCAoaS5lLiBzdXNwZW5kZWQpLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7IC8vIExlYXZlIHRoZSBjaGlsZCBpbiBwbGFjZS4gSS5lLiB0aGUgZGVoeWRyYXRlZCBmcmFnbWVudC5cblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gUmVnaXN0ZXIgYSBjYWxsYmFjayB0byByZXRyeSB0aGlzIGJvdW5kYXJ5IG9uY2UgdGhlIHNlcnZlciBoYXMgc2VudCB0aGUgcmVzdWx0LlxuXG4gICAgICAgICAgcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeS5iaW5kKG51bGwsIGN1cnJlbnQpO1xuICAgICAgICAgIHJlZ2lzdGVyU3VzcGVuc2VJbnN0YW5jZVJldHJ5KCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBwcmltYXJ5Q2hpbGRyZW5cbiAgICAgICAgICApOyAvLyBNYXJrIHRoZSBjaGlsZHJlbiBhcyBoeWRyYXRpbmcuIFRoaXMgaXMgYSBmYXN0IHBhdGggdG8ga25vdyB3aGV0aGVyIHRoaXNcbiAgICAgICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAgICAgLy8gbm9kZSBoYXMgZnVsbHkgbW91bnRlZCB5ZXQsIGFuZCBmb3Igc2NoZWR1bGluZyBldmVudCByZXBsYXlpbmcuXG4gICAgICAgICAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBQbGFjZW1lbnQgaW4gdGhhdCBhIG5ldyBzdWJ0cmVlIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAgICAgLy8gbXV0YXRpb25zIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG5cbiAgICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5mbGFncyB8PSBIeWRyYXRpbmc7XG4gICAgICAgICAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSBzZWNvbmQgcmVuZGVyIHBhc3MuIFdlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIGh5ZHJhdGVkLCBidXRcbiAgICAgICAgLy8gc29tZXRoaW5nIGVpdGhlciBzdXNwZW5kZWQgb3IgZXJyb3JlZC5cbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRm9yY2VDbGllbnRSZW5kZXIpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgZXJyb3JlZCBkdXJpbmcgaHlkcmF0aW9uLiBUcnkgYWdhaW4gd2l0aG91dCBoeWRyYXRpbmcuXG4gICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+Rm9yY2VDbGllbnRSZW5kZXI7XG5cbiAgICAgICAgICB2YXIgX2NhcHR1cmVkVmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKFxuICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcgdGhpcyBTdXNwZW5zZSBib3VuZGFyeS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiU3dpdGNoZWQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIF9jYXB0dXJlZFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZCBhbmQgd2Ugc2hvdWxkIHN0aWxsIGJlIGluIGRlaHlkcmF0ZWQgbW9kZS5cbiAgICAgICAgICAvLyBMZWF2ZSB0aGUgZXhpc3RpbmcgY2hpbGQgaW4gcGxhY2UuXG4gICAgICAgICAgLy8gUHVzaCB0byBhdm9pZCBhIG1pc21hdGNoXG4gICAgICAgICAgcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGUgZGVoeWRyYXRlZCBjb21wbGV0aW9uIHBhc3MgZXhwZWN0cyB0aGlzIGZsYWcgdG8gYmUgdGhlcmVcbiAgICAgICAgICAvLyBidXQgdGhlIG5vcm1hbCBzdXNwZW5zZSBwYXNzIGRvZXNuJ3QuXG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFN1c3BlbmRlZCBidXQgd2Ugc2hvdWxkIG5vIGxvbmdlciBiZSBpbiBkZWh5ZHJhdGVkIG1vZGUuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5vdyBoYXZlIHRvIHJlbmRlciB0aGUgZmFsbGJhY2suXG4gICAgICAgICAgcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICAgICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPVxuICAgICAgICAgICAgbW91bnRTdXNwZW5zZUZhbGxiYWNrQWZ0ZXJSZXRyeVdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgICBuZXh0RmFsbGJhY2tDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0Lm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgcHJvcGFnYXRpb25Sb290XG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgZmlyc3RDaGlsZCxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICAvLyBNYXJrIGFueSBTdXNwZW5zZSBib3VuZGFyaWVzIHdpdGggZmFsbGJhY2tzIGFzIGhhdmluZyB3b3JrIHRvIGRvLlxuICAgICAgLy8gSWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIGludG8gZmFsbGJhY2tzLCB0aGV5IG1heSBub3cgYmUgYWJsZVxuICAgICAgLy8gdG8gdW5ibG9jay5cbiAgICAgIHZhciBub2RlID0gZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSB3b3JrIG9uLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBvbiB0aGVcbiAgICAgICAgICAvLyBsaXN0IGl0c2VsZi5cbiAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgICAgIC8vIHRoZSBsaXN0IHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFuZ2Ugd2hlbiBpdCByZXJlbmRlcnMuXG4gICAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgICAgIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gICAgICAvLyBzaG93aW5nIGNvbnRlbnQgb24gdGhlIHNjcmVlbiwgYXMgb3Bwb3NlZCB0byBiZWluZyBpbiBmYWxsYmFjayBzdGF0ZSBvclxuICAgICAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gICAgICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgXCJyb3dzXCIgd2lsbCBiZSB3b3JrSW5Qcm9ncmVzcywgYnV0IGFueSBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAgICAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgICAgIHZhciByb3cgPSBmaXJzdENoaWxkO1xuICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFzdENvbnRlbnRSb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICAgICAge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJldmVhbE9yZGVyICE9PSBcImZvcndhcmRzXCIgJiZcbiAgICAgICAgICByZXZlYWxPcmRlciAhPT0gXCJiYWNrd2FyZHNcIiAmJlxuICAgICAgICAgIHJldmVhbE9yZGVyICE9PSBcInRvZ2V0aGVyXCIgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdXG4gICAgICAgICkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHJldmVhbE9yZGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJmb3J3YXJkc1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6IHtcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIsXG4gICAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBcImZvcndhcmRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImJhY2t3YXJkXCI6IHtcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgICAnUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIsXG4gICAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgICAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JyxcbiAgICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIFwiICtcbiAgICAgICAgICAgICAgICAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JyxcbiAgICAgICAgICAgICAgcmV2ZWFsT3JkZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgICAgIGlmICh0YWlsTW9kZSAhPT0gXCJjb2xsYXBzZWRcIiAmJiB0YWlsTW9kZSAhPT0gXCJoaWRkZW5cIikge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgK1xuICAgICAgICAgICAgICAgICdEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByZXZlYWxPcmRlciAhPT0gXCJmb3J3YXJkc1wiICYmXG4gICAgICAgICAgICByZXZlYWxPcmRlciAhPT0gXCJiYWNrd2FyZHNcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArXG4gICAgICAgICAgICAgICAgJ1wiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiLiAnICtcbiAgICAgICAgICAgICAgICAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICAgICAge1xuICAgICAgICB2YXIgaXNBbkFycmF5ID0gaXNBcnJheShjaGlsZFNsb3QpO1xuICAgICAgICB2YXIgaXNJdGVyYWJsZSA9XG4gICAgICAgICAgIWlzQW5BcnJheSAmJiB0eXBlb2YgZ2V0SXRlcmF0b3JGbihjaGlsZFNsb3QpID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICAgICAgaWYgKGlzQW5BcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBpc0FuQXJyYXkgPyBcImFycmF5XCIgOiBcIml0ZXJhYmxlXCI7XG5cbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQSBuZXN0ZWQgJXMgd2FzIHBhc3NlZCB0byByb3cgIyVzIGluIDxTdXNwZW5zZUxpc3QgLz4uIFdyYXAgaXQgaW4gXCIgK1xuICAgICAgICAgICAgICBcImFuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6IFwiICtcbiAgICAgICAgICAgICAgXCI8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uIFwiICtcbiAgICAgICAgICAgICAgXCI8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj57JXN9PC9TdXNwZW5zZUxpc3Q+IC4uLiBcIiArXG4gICAgICAgICAgICAgIFwiPC9TdXNwZW5zZUxpc3Q+XCIsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKGNoaWxkcmVuLCByZXZlYWxPcmRlcikge1xuICAgICAge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHJldmVhbE9yZGVyID09PSBcImZvcndhcmRzXCIgfHwgcmV2ZWFsT3JkZXIgPT09IFwiYmFja3dhcmRzXCIpICYmXG4gICAgICAgICAgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNoaWxkcmVuICE9PSBudWxsICYmXG4gICAgICAgICAgY2hpbGRyZW4gIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgICAgIHZhciBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBfaSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJEaWQgeW91IG1lYW4gdG8gcGFzcyBtdWx0aXBsZSBjaGlsZHJlbiBvciBhbiBhcnJheT9cIixcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaXNCYWNrd2FyZHMsXG4gICAgICB0YWlsLFxuICAgICAgbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsTW9kZVxuICAgICkge1xuICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICAgICAgdGFpbDogdGFpbCxcbiAgICAgICAgICB0YWlsTW9kZTogdGFpbE1vZGVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIGNhbiByZXVzZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGZyb20gcHJldmlvdXMgcmVuZGVycy5cbiAgICAgICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMDtcbiAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gdGFpbDtcbiAgICAgICAgcmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZTtcbiAgICAgIH1cbiAgICB9IC8vIFRoaXMgY2FuIGVuZCB1cCByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgbXVsdGlwbGUgcGFzc2VzLlxuICAgIC8vIFRoZSBmaXJzdCBwYXNzIHNwbGl0cyB0aGUgY2hpbGRyZW4gZmliZXJzIGludG8gdHdvIHNldHMuIEEgaGVhZCBhbmQgdGFpbC5cbiAgICAvLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4gICAgLy8gcGFzcyB0aHJvdWdoIGJlZ2luV29yayB0byByZXJlbmRlciBhbGwgY2hpbGRyZW4gKGluY2x1ZGluZyB0aGUgdGFpbCkgd2l0aFxuICAgIC8vIHRoZSBmb3JjZSBzdXNwZW5kIGNvbnRleHQuIElmIHRoZSBmaXJzdCByZW5kZXIgZGlkbid0IGhhdmUgYW55dGhpbmcgaW5cbiAgICAvLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbiAgICAvLyBUaGF0IGhhcHBlbnMgaW4gdGhlIGNvbXBsZXRlV29yayBwaGFzZSB3aXRob3V0IGdvaW5nIGJhY2sgdG8gYmVnaW5Xb3JrLlxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcjtcbiAgICAgIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICAgICAgdmFyIG5ld0NoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcik7XG4gICAgICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gICAgICB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKG5ld0NoaWxkcmVuLCByZXZlYWxPcmRlcik7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VGYWxsYmFjayA9IGhhc1N1c3BlbnNlTGlzdENvbnRleHQoXG4gICAgICAgIHN1c3BlbnNlQ29udGV4dCxcbiAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICApO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dChcbiAgICAgICAgICBzdXNwZW5zZUNvbnRleHQsXG4gICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9XG4gICAgICAgICAgY3VycmVudCAhPT0gbnVsbCAmJiAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzJDE7XG5cbiAgICAgICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZvcmNlZCBhIGZhbGxiYWNrLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHdvcmtcbiAgICAgICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAgICAgLy8gYWdhaW4uIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29udGV4dCB1cGRhdGluZy5cbiAgICAgICAgICBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2UoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAvLyBJbiBsZWdhY3kgbW9kZSwgU3VzcGVuc2VMaXN0IGRvZXNuJ3Qgd29yayBzbyB3ZSBqdXN0XG4gICAgICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICAgICAgY2FzZSBcImZvcndhcmRzXCI6IHtcbiAgICAgICAgICAgIHZhciBsYXN0Q29udGVudFJvdyA9IGZpbmRMYXN0Q29udGVudFJvdyh3b3JrSW5Qcm9ncmVzcy5jaGlsZCk7XG4gICAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBsaXN0IGlzIHBhcnQgb2YgdGhlIHRhaWwuXG4gICAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZW0gc2VwYXJhdGVseSBsYXRlci5cbiAgICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICAgICAgdGFpbCxcbiAgICAgICAgICAgICAgbGFzdENvbnRlbnRSb3csXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBcImJhY2t3YXJkc1wiOiB7XG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBmaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBoYXMgZXhpc3RpbmcgY29udGVudC5cbiAgICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAgIC8vIG9yZGVyLlxuICAgICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY3VycmVudFJvdyAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIHJvdy5zaWJsaW5nID0gX3RhaWw7XG4gICAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgICAgfSAvLyBUT0RPOiBJZiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCBpcyBudWxsLCB3ZSBjYW4gY29udGludWUgb24gdGhlIHRhaWwgaW1tZWRpYXRlbHkuXG5cbiAgICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgICAgIF90YWlsLFxuICAgICAgICAgICAgICBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6IHtcbiAgICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgcmV2ZWFsIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5vdCBoYXZpbmdcbiAgICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBQb3J0YWxzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZW5kIHRoZSBjaGlsZHJlbiBkdXJpbmcgbW91bnRcbiAgICAgICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcm9vdCBhbHdheXMgc3RhcnRzIHdpdGggYSBcImN1cnJlbnRcIiB3aXRoIGEgbnVsbCBjaGlsZC5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIHZhciBjb250ZXh0ID0gcHJvdmlkZXJUeXBlLl9jb250ZXh0O1xuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgIHZhciBuZXdWYWx1ZSA9IG5ld1Byb3BzLnZhbHVlO1xuXG4gICAgICB7XG4gICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBuZXdQcm9wcykpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvdmlkZXJQcm9wVHlwZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICBjaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICAgIHByb3ZpZGVyUHJvcFR5cGVzLFxuICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICBcInByb3BcIixcbiAgICAgICAgICAgIFwiQ29udGV4dC5Qcm92aWRlclwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIG5ld1ZhbHVlKTtcblxuICAgICAge1xuICAgICAgICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcblxuICAgICAgICAgIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvbGRQcm9wcy5jaGlsZHJlbiA9PT0gbmV3UHJvcHMuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgIWhhc0NvbnRleHRDaGFuZ2VkKClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb250ZXh0IHZhbHVlIGNoYW5nZWQuIFNlYXJjaCBmb3IgbWF0Y2hpbmcgY29uc3VtZXJzIGFuZCBzY2hlZHVsZVxuICAgICAgICAgICAgLy8gdGhlbSB0byB1cGRhdGUuXG4gICAgICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdDaGlsZHJlbiA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuXG4gICAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUaGUgbG9naWMgYmVsb3cgZm9yIENvbnRleHQgZGlmZmVycyBkZXBlbmRpbmcgb24gUFJPRCBvciBERVYgbW9kZS4gSW5cbiAgICAgIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gICAgICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgICAgIC8vIHNvIHdlIHVzZSB0aGUgb2xkIGJlaGF2aW91ciAoQ29udGV4dC5Db25zdW1lciByZWZlcmVuY2VzIENvbnRleHQpIHRvXG4gICAgICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAgICAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gICAgICAvLyBpbiBERVYgbW9kZSBpZiB0aGlzIHByb3BlcnR5IGV4aXN0cyBvciBub3QgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QuXG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFRoaXMgbWF5IGJlIGJlY2F1c2UgaXQncyBhIENvbnRleHQgKHJhdGhlciB0aGFuIGEgQ29uc3VtZXIpLlxuICAgICAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICAgICAgaWYgKGNvbnRleHQgIT09IGNvbnRleHQuQ29uc3VtZXIpIHtcbiAgICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBcIiArXG4gICAgICAgICAgICAgICAgICBcImEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/XCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgXCIgK1xuICAgICAgICAgICAgICBcImlzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0KTtcblxuICAgICAgdmFyIG5ld0NoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gQSBsYXp5IGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgICAgICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAgICAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gUmV1c2UgcHJldmlvdXMgZGVwZW5kZW5jaWVzXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICAgICAgfVxuXG4gICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkge1xuICAgICAgICAvLyBUaGUgY2hpbGRyZW4gZG9uJ3QgaGF2ZSBhbnkgd29yayBlaXRoZXIuIFdlIGNhbiBza2lwIHRoZW0uXG4gICAgICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuXG4gICAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdW50RmliZXIoY3VycmVudCwgb2xkV29ya0luUHJvZ3Jlc3MsIG5ld1dvcmtJblByb2dyZXNzKSB7XG4gICAgICB7XG4gICAgICAgIHZhciByZXR1cm5GaWJlciA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgICAgICBpZiAocmV0dXJuRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLlwiKTtcbiAgICAgICAgfSAvLyBEaXNjb25uZWN0IGZyb20gdGhlIG9sZCBjdXJyZW50LlxuICAgICAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG4gICAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICAgICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICAgICAgbmV3V29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG9sZFdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgICAgIGlmIChvbGRXb3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpIHtcbiAgICAgICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U2libGluZyA9IHJldHVybkZpYmVyLmNoaWxkO1xuXG4gICAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC5cIik7XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgICAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAgICAgLy8gU2luY2UgdGhlIG9sZCBmaWJlciBpcyBkaXNjb25uZWN0ZWQsIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgbWFudWFsbHkuXG5cbiAgICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcblxuICAgICAgICBpZiAoZGVsZXRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2N1cnJlbnRdO1xuICAgICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IENoaWxkRGVsZXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRpb25zLnB1c2goY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdXb3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7IC8vIFJlc3RhcnQgd29yayBmcm9tIHRoZSBuZXcgZmliZXIuXG5cbiAgICAgICAgcmV0dXJuIG5ld1dvcmtJblByb2dyZXNzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gICAgICAvLyBCZWZvcmUgcGVyZm9ybWluZyBhbiBlYXJseSBiYWlsb3V0LCB3ZSBtdXN0IGNoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nXG4gICAgICAvLyB1cGRhdGVzIG9yIGNvbnRleHQuXG4gICAgICB2YXIgdXBkYXRlTGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuXG4gICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZSh1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBObyBwZW5kaW5nIHVwZGF0ZSwgYnV0IGJlY2F1c2UgY29udGV4dCBpcyBwcm9wYWdhdGVkIGxhemlseSwgd2UgbmVlZFxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmaWJlciBkb2VzIG5vdCBoYXZlIGFueSBwZW5kaW5nIHdvcmsuIEJhaWxvdXQgd2l0aG91dCBlbnRlcmluZ1xuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlLiBUaGVyZSdzIHN0aWxsIHNvbWUgYm9va2tlZXBpbmcgd2UgdGhhdCBuZWVkcyB0byBiZSBkb25lXG4gICAgICAvLyBpbiB0aGlzIG9wdGltaXplZCBwYXRoLCBtb3N0bHkgcHVzaGluZyBzdHVmZiBvbnRvIHRoZSBzdGFjay5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjoge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWU7XG4gICAgICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0O1xuICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgbmV3VmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBQcm9maWxlciBzaG91bGQgb25seSBjYWxsIG9uUmVuZGVyIHdoZW4gb25lIG9mIGl0cyBkZXNjZW5kYW50cyBhY3R1YWxseSByZW5kZXJlZC5cbiAgICAgICAgICAgIHZhciBoYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuICAgICAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHJlbmRlciB0aGUgY2hpbGRyZW4sIHNvIHRoaXMgaXMganVzdCB0byBtYWludGFpblxuICAgICAgICAgICAgICAvLyBwdXNoL3BvcCBzeW1tZXRyeVxuICAgICAgICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpOyAvLyBXZSBrbm93IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCBzdXNwZW5kIGFnYWluIGJlY2F1c2UgaWYgaXQgaGFzXG4gICAgICAgICAgICAgIC8vIGJlZW4gdW5zdXNwZW5kZWQgaXQgaGFzIGNvbW1pdHRlZCBhcyBhIHJlc29sdmVkIFN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgLy8gSWYgaXQgbmVlZHMgdG8gYmUgcmV0cmllZCwgaXQgc2hvdWxkIGhhdmUgd29yayBzY2hlZHVsZWQgb24gaXQuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTsgLy8gV2Ugc2hvdWxkIG5ldmVyIHJlbmRlciB0aGUgY2hpbGRyZW4gb2YgYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IHVudGlsIHdlXG4gICAgICAgICAgICAgIC8vIHVwZ3JhZGUgaXQuIFdlIHJldHVybiBudWxsIGluc3RlYWQgb2YgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yay5cblxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gLy8gSWYgdGhpcyBib3VuZGFyeSBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB3ZSBuZWVkIHRvIGRlY2lkZVxuICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAgIC8vIGNoaWxkIGZyYWdtZW50LlxuXG4gICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRMYW5lcyA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXM7XG5cbiAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFVzZSB0aGUgbm9ybWFsIHBhdGhcbiAgICAgICAgICAgICAgLy8gdG8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gYWdhaW4uXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCBkb2VzIG5vdCBoYXZlIHBlbmRpbmcgd29yayBtYXJrZWRcbiAgICAgICAgICAgICAgLy8gb24gaXRcbiAgICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgZmFsbGJhY2sgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFNraXAgb3ZlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBjYW4gcmV0dXJuIGBudWxsYCBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBjaGVja2VkXG4gICAgICAgICAgICAgICAgLy8gd2hldGhlciB0aGVyZSB3ZXJlIG5lc3RlZCBjb250ZXh0IGNvbnN1bWVycywgdmlhIHRoZSBjYWxsIHRvXG4gICAgICAgICAgICAgICAgLy8gYGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmtgIGFib3ZlLlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgICAgICAgdmFyIF9oYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2FzIGluIGZhbGxiYWNrIHN0YXRlIGxhc3QgdGltZSwgYW5kIHdlIGhhdmUgYWxsIHRoZVxuICAgICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAvLyB0cmVlIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSB0YWlsLiBTbyB3ZSBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQgYmVmb3JlIGFuZCB3ZSdyZSByZW5kZXJpbmcgdGhlIHNhbWUgY2hpbGRyZW4sXG4gICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgLy8gaW4gdGhlIFwidG9nZXRoZXJcIiBtb2RlLCBzbyB3ZSBjYW4gY29udGludWUgZnJvbSB0aGUgc3RhdGUgd2UgaGFkLlxuXG4gICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVzZXQgdG8gdGhlIFwidG9nZXRoZXJcIiBtb2RlIGluIGNhc2Ugd2UndmUgc3RhcnRlZCBhIGRpZmZlcmVudFxuICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VMaXN0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiB0aGUgdHJlZSBzdGlsbCBuZWVkcyB0byBiZSBkZWZlcnJlZC4gVGhpcyBpc1xuICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAvLyBzbyB3ZSdsbCBqdXN0IGVudGVyIHRoYXQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2UnbGwgYmFpbCBvdXRcbiAgICAgICAgICAvLyBhdCB0aGUgbmV4dCBsZXZlbCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjaGlsZCBwcm9wc1xuICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIHJlZmFjdG9yIGBiZWdpbldvcmtgIHRvIHNwbGl0IHRoZSBiYWlsb3V0XG4gICAgICAgICAgLy8gcGF0aCBmcm9tIHRoZSBub3JtYWwgcGF0aC4gSSdtIHRlbXB0ZWQgdG8gZG8gYSBsYWJlbGVkIGJyZWFrIGhlcmVcbiAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcbiAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiZWdpbldvcmskMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCAmJiBjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Mua2V5LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8XG4gICAgICAgICAgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAvLyBGb3JjZSBhIHJlLXJlbmRlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZDpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgICAgLy8gVGhpcyBtYXkgYmUgdW5zZXQgaWYgdGhlIHByb3BzIGFyZSBkZXRlcm1pbmVkIHRvIGJlIGVxdWFsIGxhdGVyIChtZW1vKS5cbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOZWl0aGVyIHByb3BzIG5vciBsZWdhY3kgY29udGV4dCBjaGFuZ2VzLiBDaGVjayBpZiB0aGVyZSdzIGEgcGVuZGluZ1xuICAgICAgICAgIC8vIHVwZGF0ZSBvciBjb250ZXh0IGNoYW5nZS5cbiAgICAgICAgICB2YXIgaGFzU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0ID0gY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWhhc1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dCAmJiAvLyBJZiB0aGlzIGlzIHRoZSBzZWNvbmQgcGFzcyBvZiBhbiBlcnJvciBvciBzdXNwZW5zZSBib3VuZGFyeSwgdGhlcmVcbiAgICAgICAgICAgIC8vIG1heSBub3QgYmUgd29yayBzY2hlZHVsZWQgb24gYGN1cnJlbnRgLCBzbyB3ZSBjaGVjayBmb3IgdGhpcyBmbGFnLlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MkMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gTm8gcGVuZGluZyB1cGRhdGVzIG9yIGNvbnRleHQuIEJhaWwgb3V0IG5vdy5cbiAgICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZShcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb24gdGhpcyBmaWJlciwgYnV0IHRoZXJlIGFyZSBubyBuZXcgcHJvcHNcbiAgICAgICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgICAgICAvLyBjb25zdW1lciBwcm9kdWNlcyBhIGNoYW5nZWQgdmFsdWUsIGl0IHdpbGwgc2V0IHRoaXMgdG8gdHJ1ZS4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB3aWxsIGFzc3VtZSB0aGUgY2hpbGRyZW4gaGF2ZSBub3QgY2hhbmdlZCBhbmQgYmFpbCBvdXQuXG4gICAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9IC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNsZWFyIHBlbmRpbmcgdXBkYXRlIHByaW9yaXR5LlxuICAgICAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAgICAgLy8gdGhlIHVwZGF0ZSBxdWV1ZS4gSG93ZXZlciwgdGhlcmUncyBhbiBleGNlcHRpb246IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgICAgIC8vIHNvbWV0aW1lcyBiYWlscyBvdXQgbGF0ZXIgaW4gdGhlIGJlZ2luIHBoYXNlLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZFxuICAgICAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuXG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgTGF6eUNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBlbGVtZW50VHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuICAgICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICAgIHZhciByZXNvbHZlZFByb3BzID1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBDb21wb25lbnRcbiAgICAgICAgICAgICAgPyB1bnJlc29sdmVkUHJvcHNcbiAgICAgICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICByZXNvbHZlZFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudFxuICAgICAgICAgICAgICA/IF91bnJlc29sdmVkUHJvcHNcbiAgICAgICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgX0NvbXBvbmVudCxcbiAgICAgICAgICAgIF9yZXNvbHZlZFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG5cbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuXG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlSG9zdFRleHQkMSgpO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6IHtcbiAgICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMiA9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZVxuICAgICAgICAgICAgICA/IF91bnJlc29sdmVkUHJvcHMyXG4gICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBfcmVzb2x2ZWRQcm9wczIsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIGNhc2UgTW9kZTpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICBjYXNlIE1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMiwgX3VucmVzb2x2ZWRQcm9wczMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IF90eXBlMi5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgICAgICAgICBvdXRlclByb3BUeXBlcyxcbiAgICAgICAgICAgICAgICAgIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgICAgIFwicHJvcFwiLFxuICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKF90eXBlMilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIudHlwZSwgX3Jlc29sdmVkUHJvcHMzKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF90eXBlMixcbiAgICAgICAgICAgIF9yZXNvbHZlZFByb3BzMyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHM0ID1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MlxuICAgICAgICAgICAgICA/IF91bnJlc29sdmVkUHJvcHM0XG4gICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgICAgcmV0dXJuIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgX0NvbXBvbmVudDIsXG4gICAgICAgICAgICBfcmVzb2x2ZWRQcm9wczQsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFNjb3BlQ29tcG9uZW50OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnICtcbiAgICAgICAgICBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBcIiArXG4gICAgICAgICAgXCJSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciByZW5kZXJlckN1cnNvckRFVjtcblxuICAgIHtcbiAgICAgIHJlbmRlcmVyQ3Vyc29yREVWID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlclNpZ2lsO1xuXG4gICAge1xuICAgICAgLy8gVXNlIHRoaXMgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBjb250ZXh0XG4gICAgICByZW5kZXJlclNpZ2lsID0ge307XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgICB2YXIgbGFzdEZ1bGx5T2JzZXJ2ZWRDb250ZXh0ID0gbnVsbDtcbiAgICB2YXIgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAgICAgLy8gY2Fubm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICAgICAgbGFzdEZ1bGx5T2JzZXJ2ZWRDb250ZXh0ID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gICAgICB7XG4gICAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gICAgICB7XG4gICAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIGNvbnRleHQsIG5leHRWYWx1ZSkge1xuICAgICAge1xuICAgICAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG5cbiAgICAgICAge1xuICAgICAgICAgIHB1c2gocmVuZGVyZXJDdXJzb3JERVYsIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciwgcHJvdmlkZXJGaWJlcik7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSBudWxsICYmXG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIkRldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgXCJzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wUHJvdmlkZXIoY29udGV4dCwgcHJvdmlkZXJGaWJlcikge1xuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgIHtcbiAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJDdXJzb3JERVYuY3VycmVudDtcbiAgICAgICAgICBwb3AocmVuZGVyZXJDdXJzb3JERVYsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwb3AodmFsdWVDdXJzb3IsIHByb3ZpZGVyRmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgcGFyZW50LFxuICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICBwcm9wYWdhdGlvblJvb3RcbiAgICApIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMgb2YgYWxsIHRoZSBhbmNlc3RvcnMsIGluY2x1ZGluZyB0aGUgYWx0ZXJuYXRlcy5cbiAgICAgIHZhciBub2RlID0gcGFyZW50O1xuXG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGU7XG5cbiAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgICBub2RlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGFsdGVybmF0ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICFpc1N1YnNldE9mTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKVxuICAgICAgICApIHtcbiAgICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBlbHNlO1xuXG4gICAgICAgIGlmIChub2RlID09PSBwcm9wYWdhdGlvblJvb3QpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAobm9kZSAhPT0gcHJvcGFnYXRpb25Sb290KSB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgdGhlIHByb3BhZ2F0aW9uIHJvb3Qgd2hlbiBzY2hlZHVsaW5nIGNvbnRleHQgd29yay4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gICAgICB7XG4gICAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VfZWFnZXIod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlX2VhZ2VyKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjb250ZXh0LFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgIGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDsgLy8gVmlzaXQgdGhpcyBmaWJlci5cblxuICAgICAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgICAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgLy8gTWF0Y2ghIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGlzIGZpYmVyLlxuICAgICAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0byB0aGUgY3VycmVudCBmaWJlciwgdG9vLCB3aGljaCBtZWFucyBpdCB3aWxsIHBlcnNpc3QgZXZlbiBpZlxuICAgICAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG4gICAgICAgICAgICAgICAgLy8gSW5saW5lZCBgZW5xdWV1ZVVwZGF0ZWAgdG8gcmVtb3ZlIGludGVybGVhdmVkIHVwZGF0ZSBjaGVja1xuXG4gICAgICAgICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICAgICAgICAgICAgICAgICAgdmFyIHBlbmRpbmcgPSBzaGFyZWRRdWV1ZS5wZW5kaW5nO1xuXG4gICAgICAgICAgICAgICAgICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoXG4gICAgICAgICAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICk7IC8vIE1hcmsgdGhlIHVwZGF0ZWQgbGFuZXMgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jeSBsaXN0LlxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgICAgIC8vIERvbid0IHNjYW4gZGVlcGVyIGlmIHRoaXMgaXMgYSBtYXRjaGluZyBwcm92aWRlclxuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgICAgICAvLyBJZiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgYm91bmRhcnkgaXMgaW4gdGhpcyBzdWJ0cmVlLCB3ZSBkb24ndCBrbm93XG4gICAgICAgICAgLy8gaWYgaXQgd2lsbCBoYXZlIGFueSBjb250ZXh0IGNvbnN1bWVycyBpbiBpdC4gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzXG4gICAgICAgICAgLy8gbWFyayBpdCBhcyBoYXZpbmcgdXBkYXRlcy5cbiAgICAgICAgICB2YXIgcGFyZW50U3VzcGVuc2UgPSBmaWJlci5yZXR1cm47XG5cbiAgICAgICAgICBpZiAocGFyZW50U3VzcGVuc2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJXZSBqdXN0IGNhbWUgZnJvbSBhIHBhcmVudCBzbyB3ZSBtdXN0IGhhdmUgaGFkIGEgcGFyZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLmxhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnRTdXNwZW5zZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHZhciBfYWx0ZXJuYXRlID0gcGFyZW50U3VzcGVuc2UuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKF9hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9hbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKF9hbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwYXNzaW5nIHRoaXMgZmliZXIgYXMgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ugd2FudCB0byBzY2hlZHVsZSB0aGlzIGZpYmVyIGFzIGhhdmluZyB3b3JrXG4gICAgICAgICAgLy8gb24gaXRzIGNoaWxkcmVuLiBXZSdsbCB1c2UgdGhlIGNoaWxkTGFuZXMgb25cbiAgICAgICAgICAvLyB0aGlzIGZpYmVyIHRvIGluZGljYXRlIHRoYXQgYSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG4gICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEZpYmVyID0gZmliZXIuc2libGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgIG5leHRGaWJlci5yZXR1cm4gPSBmaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuXG4gICAgICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYmFjayB0byB0aGUgcm9vdCBvZiB0aGlzIHN1YnRyZWUuIEV4aXQuXG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBzaWJsaW5nIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuICAgICAgICAgICAgbmV4dEZpYmVyID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgICAgIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IG51bGw7XG4gICAgICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gICAgICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgICAgICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICAgICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAgICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjaGVjayBiZWxvdywgaXQncyBub3QgZW5mb3JjZWQgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZi5cbiAgICAgICAgaWYgKGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gXCIgK1xuICAgICAgICAgICAgICBcIkluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIFwiICtcbiAgICAgICAgICAgICAgXCJJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgXCIgK1xuICAgICAgICAgICAgICBcImluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKGNvbnN1bWVyLCBjb250ZXh0LCByZW5kZXJMYW5lcykge1xuICAgICAgaWYgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KGNvbnN1bWVyLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmIChsYXN0RnVsbHlPYnNlcnZlZENvbnRleHQgPT09IGNvbnRleHQpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgIG1lbW9pemVkVmFsdWU6IHZhbHVlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKGNvbnN1bWVyID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gXCIgK1xuICAgICAgICAgICAgICAgIFwiSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gXCIgK1xuICAgICAgICAgICAgICAgIFwiSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IFwiICtcbiAgICAgICAgICAgICAgICBcImluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCBkZXBlbmRlbmN5IGZvciB0aGlzIGNvbXBvbmVudC4gQ3JlYXRlIGEgbmV3IGxpc3QuXG5cbiAgICAgICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjb250ZXh0SXRlbTtcbiAgICAgICAgICBjb25zdW1lci5kZXBlbmRlbmNpZXMgPSB7XG4gICAgICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dEl0ZW1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFwcGVuZCBhIG5ldyBjb250ZXh0IGl0ZW0uXG4gICAgICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0SXRlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEgPVxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG4gICAgZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIHRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG5cbiAgICAgIGlmICh0cmFuc2l0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW5ldmVyIGEgdHJhbnNpdGlvbiB1cGRhdGUgaXMgc2NoZWR1bGVkLCByZWdpc3RlciBhIGNhbGxiYWNrIG9uIHRoZVxuICAgICAgICAvLyB0cmFuc2l0aW9uIG9iamVjdCBzbyB3ZSBjYW4gZ2V0IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHNjb3BlIGZ1bmN0aW9uLlxuICAgICAgICB0cmFuc2l0aW9uLl9jYWxsYmFja3MuYWRkKGhhbmRsZUFzeW5jQWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlQXN5bmNBY3Rpb24odHJhbnNpdGlvbiwgdGhlbmFibGUpIHt9XG5cbiAgICBmdW5jdGlvbiBub3RpZnlUcmFuc2l0aW9uQ2FsbGJhY2tzKHRyYW5zaXRpb24sIHJldHVyblZhbHVlKSB7XG4gICAgICB2YXIgY2FsbGJhY2tzID0gdHJhbnNpdGlvbi5fY2FsbGJhY2tzO1xuICAgICAgY2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9IC8vIFdoZW4gcmV0cnlpbmcgYSBTdXNwZW5zZS9PZmZzY3JlZW4gYm91bmRhcnksIHdlIHJlc3RvcmUgdGhlIGNhY2hlIHRoYXQgd2FzXG4gICAgZnVuY3Rpb24gZ2V0U3VzcGVuZGVkQ2FjaGUoKSB7XG4gICAgICB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgc3VzcGVuZHMuIEl0IHJldHVybnMgdGhlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFnIHRoZSBmaWJlciB3aXRoIGFuIHVwZGF0ZSBlZmZlY3QuIFRoaXMgdHVybnMgYSBQbGFjZW1lbnQgaW50b1xuICAgICAqIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtSZWYod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZiB8IFJlZlN0YXRpYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBlbmRBbGxDaGlsZHJlbihcbiAgICAgIHBhcmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLFxuICAgICAgaXNIaWRkZW5cbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgY3JlYXRlZCBidXQgd2UgbmVlZCByZWN1cnNlIGRvd24gaXRzXG4gICAgICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICAgICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsIHx8IGZhbHNlKTtcbiAgICAgICAgICBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBBbiB1bmZvcnR1bmF0ZSBmb3JrIG9mIGFwcGVuZEFsbENoaWxkcmVuIGJlY2F1c2Ugd2UgaGF2ZSB0d28gZGlmZmVyZW50IHBhcmVudCB0eXBlcy5cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICB0eXBlLFxuICAgICAgbmV3UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICAgICAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcykge1xuICAgICAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgICAgICAvLyB3ZSB3b24ndCB0b3VjaCB0aGlzIG5vZGUgZXZlbiBpZiBjaGlsZHJlbiBjaGFuZ2VkLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH0gLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGNvbXBsZXRlIHBoYXNlLCBiZWNhdXNlXG4gICAgLy8gaXQgbWlnaHQgdGhyb3cgdG8gc3VzcGVuZCwgYW5kIGlmIHRoZSByZXNvdXJjZSBpbW1lZGlhdGVseSBsb2FkcywgdGhlIHdvcmtcbiAgICAvLyBsb29wIHdpbGwgcmVzdW1lIHJlbmRlcmluZyBhcyBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBjb21wbGV0ZWQuIFNvIGl0IG11c3RcbiAgICAvLyBmdWxseSBjb21wbGV0ZS5cbiAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBpZGVhbGx5IG1vdmUgdG8gYmVnaW4gcGhhc2UsIGJ1dCBjdXJyZW50bHkgdGhlIGluc3RhbmNlIGlzXG4gICAgLy8gbm90IGNyZWF0ZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBGb3Igb3VyIGV4aXN0aW5nIHVzZSBjYXNlcywgaG9zdCBub2Rlc1xuICAgIC8vIHRoYXQgc3VzcGVuZCBkb24ndCBoYXZlIGNoaWxkcmVuLCBzbyBpdCBkb2Vzbid0IG1hdHRlci4gQnV0IHRoYXQgbWlnaHQgbm90XG4gICAgLy8gYWx3YXlzIGJlIHRydWUgaW4gdGhlIGZ1dHVyZS5cblxuICAgIGZ1bmN0aW9uIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgdHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgLy8gSWYgdGhpcyBmbGFnIHdhcyBzZXQgcHJldmlvdXNseSwgd2UgY2FuIHJlbW92ZSBpdC4gVGhlIGZsYWdcbiAgICAgICAgLy8gcmVwcmVzZW50cyB3aGV0aGVyIHRoaXMgcGFydGljdWxhciBzZXQgb2YgcHJvcHMgbWlnaHQgZXZlciBuZWVkIHRvXG4gICAgICAgIC8vIHN1c3BlbmQuIFRoZSBzYWZlc3QgdGhpbmcgdG8gZG8gaXMgZm9yIG1heVN1c3BlbmRDb21taXQgdG8gYWx3YXlzXG4gICAgICAgIC8vIHJldHVybiB0cnVlLCBidXQgaWYgdGhlIHJlbmRlcmVyIGlzIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgdGhlXG4gICAgICAgIC8vIHVuZGVybHlpbmcgcmVzb3VyY2Ugd29uJ3QgYmUgZXZpY3RlZCwgaXQgY2FuIHJldHVybiBmYWxzZSBhcyBhXG4gICAgICAgIC8vIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfk1heVN1c3BlbmRDb21taXQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gTWFyayB0aGlzIGZpYmVyIHdpdGggYSBmbGFnLiBUaGlzIGdldHMgc2V0IG9uIGFsbCBob3N0IGluc3RhbmNlc1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJldHJ5UXVldWUpIHtcbiAgICAgIHZhciB3YWtlYWJsZXMgPSByZXRyeVF1ZXVlO1xuXG4gICAgICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYSByZXRyeSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZS5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0byBwYXNzaXZlIHBoYXNlXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgYm91bmRhcnkgc3VzcGVuZGVkLCBidXQgbm8gd2FrZWFibGVzIHdlcmUgYWRkZWQgdG8gdGhlIHJldHJ5XG4gICAgICAgIC8vIHF1ZXVlLiBDaGVjayBpZiB0aGUgcmVuZGVyZXIgc3VzcGVuZGVkIGNvbW1pdC4gSWYgc28sIHRoaXMgbWVhbnNcbiAgICAgICAgLy8gdGhhdCBvbmNlIHRoZSBmYWxsYmFjayBpcyBjb21taXR0ZWQsIHdlIGNhbiBpbW1lZGlhdGVseSByZXRyeVxuICAgICAgICAvLyByZW5kZXJpbmcgYWdhaW4sIGJlY2F1c2UgcmVuZGVyaW5nIHdhc24ndCBhY3R1YWxseSBibG9ja2VkLiBPbmx5XG4gICAgICAgIC8vIHRoZSBjb21taXQgcGhhc2UuXG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGEgbW9kZWwgd2hlcmUgd2UgYWx3YXlzIHNjaGVkdWxlIGFuIGltbWVkaWF0ZSByZXRyeSwgZXZlblxuICAgICAgICAvLyBmb3Igbm9ybWFsIFN1c3BlbnNlLiBUaGF0IHdheSB0aGUgcmV0cnkgY2FuIHBhcnRpYWxseSByZW5kZXIgdXAgdG8gdGhlXG4gICAgICAgIC8vIGZpcnN0IHRoaW5nIHRoYXQgc3VzcGVuZHMuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIFNjaGVkdWxlUmV0cnkpIHtcbiAgICAgICAgICB2YXIgcmV0cnlMYW5lID0gLy8gVE9ETzogVGhpcyBjaGVjayBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgaW50byBjbGFpbU5leHRSZXRyeUxhbmVcbiAgICAgICAgICAgIC8vIEkgYWxzbyBzdXNwZWN0IHRoYXQgd2UgbmVlZCBzb21lIGZ1cnRoZXIgY29uc29saWRhdGlvbiBvZiBvZmZzY3JlZW5cbiAgICAgICAgICAgIC8vIGFuZCByZXRyeSBsYW5lcy5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyAhPT0gT2Zmc2NyZWVuQ29tcG9uZW50XG4gICAgICAgICAgICAgID8gY2xhaW1OZXh0UmV0cnlMYW5lKClcbiAgICAgICAgICAgICAgOiBPZmZzY3JlZW5MYW5lO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgcmV0cnlMYW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgICB7XG4gICAgICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgICAgICBpZiAob2xkVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgICAgIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICAgICAgY2FzZSBcImhpZGRlblwiOiB7XG4gICAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgICB2YXIgdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHRhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWlsTm9kZSA9IHRhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG4gICAgICAgICAgaWYgKGxhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgICAgbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcImNvbGxhcHNlZFwiOiB7XG4gICAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgICB2YXIgX3RhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAoX3RhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoX3RhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfdGFpbE5vZGUgPSBfdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cbiAgICAgICAgICBpZiAoX2xhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZGVkIGR1cmluZyB0aGUgaGVhZC4gV2Ugd2FudCB0byBzaG93IGF0IGxlYXN0IG9uZVxuICAgICAgICAgICAgICAvLyByb3cgYXQgdGhlIHRhaWwuIFNvIHdlJ2xsIGtlZXAgb24gYW5kIGN1dCBvZmYgdGhlIHJlc3QuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICAgIF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGVQcm9wZXJ0aWVzKGNvbXBsZXRlZFdvcmspIHtcbiAgICAgIHZhciBkaWRCYWlsb3V0ID1cbiAgICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUgIT09IG51bGwgJiZcbiAgICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQgPT09IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB2YXIgc3VidHJlZUZsYWdzID0gTm9GbGFncyQxO1xuXG4gICAgICBpZiAoIWRpZEJhaWxvdXQpIHtcbiAgICAgICAgLy8gQnViYmxlIHVwIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUuXG4gICAgICAgIGlmICgoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgICAgICAgIC8vIHByb2ZpbGVyIGR1cmF0aW9ucy5cbiAgICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBuZXdDaGlsZExhbmVzLFxuICAgICAgICAgICAgICBtZXJnZUxhbmVzKGNoaWxkLmxhbmVzLCBjaGlsZC5jaGlsZExhbmVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHN1YnRyZWVGbGFncyB8PSBjaGlsZC5zdWJ0cmVlRmxhZ3M7XG4gICAgICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQuZmxhZ3M7IC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLiBUaGlzIHZhbHVlIHdpbGxcbiAgICAgICAgICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgICAgICAgICAvLyBXaGVuIHdvcmsgaXMgZG9uZSwgaXQgc2hvdWxkIGJ1YmJsZSB0byB0aGUgcGFyZW50J3MgYWN0dWFsRHVyYXRpb24uIElmXG4gICAgICAgICAgICAvLyB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLCB0aGVuXG4gICAgICAgICAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgICAgICAgICAvLyByZW5kZXIuIEluIHRoYXQgY2FzZSBpdCBzaG91bGQgbm90IGJ1YmJsZS4gV2UgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgd2FzXG4gICAgICAgICAgICAvLyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYWRkaXRpb25dIGFkZGl0aW9uIHdpdGggcG9zc2libGUgbnVsbC91bmRlZmluZWQgdmFsdWVcblxuICAgICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247IC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG5cbiAgICAgICAgICAgIHRyZWVCYXNlRHVyYXRpb24gKz0gY2hpbGQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX2NoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBuZXdDaGlsZExhbmVzLFxuICAgICAgICAgICAgICBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZC5zdWJ0cmVlRmxhZ3M7XG4gICAgICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkLmZsYWdzOyAvLyBVcGRhdGUgdGhlIHJldHVybiBwb2ludGVyIHNvIHRoZSB0cmVlIGlzIGNvbnNpc3RlbnQuIFRoaXMgaXMgYSBjb2RlXG4gICAgICAgICAgICAvLyBzbWVsbCBiZWNhdXNlIGl0IGFzc3VtZXMgdGhlIGNvbW1pdCBwaGFzZSBpcyBuZXZlciBjb25jdXJyZW50IHdpdGhcbiAgICAgICAgICAgIC8vIHRoZSByZW5kZXIgcGhhc2UuIFdpbGwgYWRkcmVzcyBkdXJpbmcgcmVmYWN0b3IgdG8gYWx0ZXJuYXRlIG1vZGVsLlxuXG4gICAgICAgICAgICBfY2hpbGQucmV0dXJuID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsuc3VidHJlZUZsYWdzIHw9IHN1YnRyZWVGbGFncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuICAgICAgICBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAgICAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgICAgICAgdmFyIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgICAgIHZhciBfY2hpbGQyID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICAgIHdoaWxlIChfY2hpbGQyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgICAgICAgbmV3Q2hpbGRMYW5lcyxcbiAgICAgICAgICAgICAgbWVyZ2VMYW5lcyhfY2hpbGQyLmxhbmVzLCBfY2hpbGQyLmNoaWxkTGFuZXMpXG4gICAgICAgICAgICApOyAvLyBcIlN0YXRpY1wiIGZsYWdzIHNoYXJlIHRoZSBsaWZldGltZSBvZiB0aGUgZmliZXIvaG9vayB0aGV5IGJlbG9uZyB0byxcbiAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBidWJibGUgdGhvc2UgdXAgZXZlbiBkdXJpbmcgYSBiYWlsb3V0LiBBbGwgdGhlIG90aGVyXG4gICAgICAgICAgICAvLyBmbGFncyBoYXZlIGEgbGlmZXRpbWUgb25seSBvZiBhIHNpbmdsZSByZW5kZXIgKyBjb21taXQsIHNvIHdlIHNob3VsZFxuICAgICAgICAgICAgLy8gaWdub3JlIHRoZW0uXG5cbiAgICAgICAgICAgIHN1YnRyZWVGbGFncyB8PSBfY2hpbGQyLnN1YnRyZWVGbGFncyAmIFN0YXRpY01hc2s7XG4gICAgICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkMi5mbGFncyAmIFN0YXRpY01hc2s7IC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG5cbiAgICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uICs9IF9jaGlsZDIudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIF9jaGlsZDIgPSBfY2hpbGQyLnNpYmxpbmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9jaGlsZDMgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKF9jaGlsZDMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICAgICAgICBuZXdDaGlsZExhbmVzLFxuICAgICAgICAgICAgICBtZXJnZUxhbmVzKF9jaGlsZDMubGFuZXMsIF9jaGlsZDMuY2hpbGRMYW5lcylcbiAgICAgICAgICAgICk7IC8vIFwiU3RhdGljXCIgZmxhZ3Mgc2hhcmUgdGhlIGxpZmV0aW1lIG9mIHRoZSBmaWJlci9ob29rIHRoZXkgYmVsb25nIHRvLFxuICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGJ1YmJsZSB0aG9zZSB1cCBldmVuIGR1cmluZyBhIGJhaWxvdXQuIEFsbCB0aGUgb3RoZXJcbiAgICAgICAgICAgIC8vIGZsYWdzIGhhdmUgYSBsaWZldGltZSBvbmx5IG9mIGEgc2luZ2xlIHJlbmRlciArIGNvbW1pdCwgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAvLyBpZ25vcmUgdGhlbS5cblxuICAgICAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZDMuc3VidHJlZUZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgICAgICAgIHN1YnRyZWVGbGFncyB8PSBfY2hpbGQzLmZsYWdzICYgU3RhdGljTWFzazsgLy8gVXBkYXRlIHRoZSByZXR1cm4gcG9pbnRlciBzbyB0aGUgdHJlZSBpcyBjb25zaXN0ZW50LiBUaGlzIGlzIGEgY29kZVxuICAgICAgICAgICAgLy8gc21lbGwgYmVjYXVzZSBpdCBhc3N1bWVzIHRoZSBjb21taXQgcGhhc2UgaXMgbmV2ZXIgY29uY3VycmVudCB3aXRoXG4gICAgICAgICAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLiBXaWxsIGFkZHJlc3MgZHVyaW5nIHJlZmFjdG9yIHRvIGFsdGVybmF0ZSBtb2RlbC5cblxuICAgICAgICAgICAgX2NoaWxkMy5yZXR1cm4gPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgICAgX2NoaWxkMyA9IF9jaGlsZDMuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLnN1YnRyZWVGbGFncyB8PSBzdWJ0cmVlRmxhZ3M7XG4gICAgICB9XG5cbiAgICAgIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG4gICAgICByZXR1cm4gZGlkQmFpbG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dFN0YXRlXG4gICAgKSB7XG4gICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSgpO1xuXG4gICAgICBpZiAobmV4dFN0YXRlICE9PSBudWxsICYmIG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlIG1pZ2h0IGJlIGluc2lkZSBhIGh5ZHJhdGlvbiBzdGF0ZSB0aGUgZmlyc3QgdGltZSB3ZSdyZSBwaWNraW5nIHVwIHRoaXNcbiAgICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcnksIGFuZCBhbHNvIGFmdGVyIHdlJ3ZlIHJlZW50ZXJlZCBpdCBmb3IgZnVydGhlciBoeWRyYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKCF3YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQgd2FzIGNvbXBsZXRlZCB3aXRob3V0IGEgaHlkcmF0ZWQgbm9kZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UoKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hcml0aG1ldGljXSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0eXBlIGNhc3RpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgLT0gb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgYm91bmRhcnkgZGlkIG5vdCBzdXNwZW5kIHNvIGl0J3Mgbm93IGh5ZHJhdGVkIGFuZCB1bnN1c3BlbmRlZC5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQsIHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gZWZmZWN0IHRvIG1hcmsgdGhpcyBib3VuZGFyeVxuICAgICAgICAgIC8vIGFzIGhhdmluZyBoeWRyYXRlZCBzbyBldmVudHMga25vdyB0aGF0IHRoZXkncmUgZnJlZSB0byBiZSBpbnZva2VkLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBhIHNpZ25hbCB0byByZXBsYXkgZXZlbnRzIGFuZCB0aGUgc3VzcGVuc2UgY2FsbGJhY2suXG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHN1c3BlbmRlZCwgc2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCByZXRyeSBsaXN0ZW5lcnMuXG4gICAgICAgICAgLy8gU28gd2UgbWlnaHQgYXMgd2VsbCBhbHdheXMgbWFyayB0aGlzLlxuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgdmFyIF9pc1RpbWVkT3V0U3VzcGVuc2UgPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKF9pc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoX3ByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hcml0aG1ldGljXSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0eXBlIGNhc3RpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgLT0gb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdWNjZXNzZnVsbHkgY29tcGxldGVkIHRoaXMgdHJlZS4gSWYgdGhpcyB3YXMgYSBmb3JjZWQgY2xpZW50IHJlbmRlcixcbiAgICAgICAgLy8gdGhlcmUgbWF5IGhhdmUgYmVlbiByZWNvdmVyYWJsZSBlcnJvcnMgZHVyaW5nIGZpcnN0IGh5ZHJhdGlvblxuICAgICAgICAvLyBhdHRlbXB0LiBJZiBzbywgYWRkIHRoZW0gdG8gYSBxdWV1ZSBzbyB3ZSBjYW4gbG9nIHRoZW0gaW4gdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS5cbiAgICAgICAgdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKTsgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBTdXNwZW5zZSBwYXRoXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBOb3RlOiBUaGlzIGludGVudGlvbmFsbHkgZG9lc24ndCBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcgYmVjYXVzZSBjb21wYXJpbmdcblxuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICBjYXNlIE1vZGU6XG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDoge1xuICAgICAgICAgIHZhciBmaWJlclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICAgIGZpYmVyUm9vdC5jb250ZXh0ID0gZmliZXJSb290LnBlbmRpbmdDb250ZXh0O1xuICAgICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgcG9wIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSBhbnkgcmVtYWluaW5nIGNoaWxkcmVuXG4gICAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHRoZW4gd2UnbGwgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUgZm9yXG4gICAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBjbGllbnQgcm9vdFxuICAgICAgICAgICAgICAgICAgIXByZXZTdGF0ZS5pc0RlaHlkcmF0ZWQgfHwgLy8gQ2hlY2sgaWYgd2UgcmV2ZXJ0ZWQgdG8gY2xpZW50IHJlbmRlcmluZyAoZS5nLiBkdWUgdG8gYW4gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBGb3JjZUNsaWVudFJlbmRlcikgIT09IE5vRmxhZ3MkMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGNsZWFyIHRoaXMgY29udGFpbmVyIGF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIG5leHQgY29tbWl0LiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgUmVhY3QgcmVuZGVyaW5nIGludG8gYVxuICAgICAgICAgICAgICAgICAgLy8gY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvclxuICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGwgaWYgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSBjb250YWluZXIgd291bGQgYWxyZWFkeVxuICAgICAgICAgICAgICAgICAgLy8gYmUgZW1wdHkpLlxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7IC8vIElmIHRoaXMgd2FzIGEgZm9yY2VkIGNsaWVudCByZW5kZXIsIHRoZXJlIG1heSBoYXZlIGJlZW5cbiAgICAgICAgICAgICAgICAgIC8vIHJlY292ZXJhYmxlIGVycm9ycyBkdXJpbmcgZmlyc3QgaHlkcmF0aW9uIGF0dGVtcHQuIElmIHNvLCBhZGRcbiAgICAgICAgICAgICAgICAgIC8vIHRoZW0gdG8gYSBxdWV1ZSBzbyB3ZSBjYW4gbG9nIHRoZW0gaW4gdGhlIGNvbW1pdCBwaGFzZS5cblxuICAgICAgICAgICAgICAgICAgdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcblxuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OiB7XG4gICAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF90eXBlMiwgbmV3UHJvcHMpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgICBtYXJrUmVmKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogTW92ZSBjcmVhdGVJbnN0YW5jZSB0byBiZWdpbldvcmsgYW5kIGtlZXAgaXQgb24gYSBjb250ZXh0XG4gICAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgICAvLyBvciBjb21wbGV0ZVdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBhZGQgdGhlbSB0b3AtPmRvd24gb3JcbiAgICAgICAgICAgIC8vIGJvdHRvbS0+dXAuIFRvcC0+ZG93biBpcyBmYXN0ZXIgaW4gSUUxMS5cblxuICAgICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYW5kIGNyZWF0ZUluc3RhbmNlIHN0ZXAgaW50byB0aGUgYmVnaW5QaGFzZVxuICAgICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgICAgcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgICAgIHZhciBfaW5zdGFuY2UzID0gY3JlYXRlSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgX3R5cGUyLFxuICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgIF9yb290Q29udGFpbmVySW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICApOyAvLyBUT0RPOiBGb3IgcGVyc2lzdGVudCByZW5kZXJlcnMsIHdlIHNob3VsZCBwYXNzIGNoaWxkcmVuIGFzIHBhcnRcbiAgICAgICAgICAgICAgLy8gb2YgdGhlIGluaXRpYWwgaW5zdGFuY2UgY3JlYXRpb25cblxuICAgICAgICAgICAgICBhcHBlbmRBbGxDaGlsZHJlbihfaW5zdGFuY2UzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IF9pbnN0YW5jZTM7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBzdXBwb3J0cyBhdXRvLWZvY3VzIGZvciBjZXJ0YWluIGVsZW1lbnRzKS5cbiAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHN1Y2ggcmVuZGVyZXJzIGdldCBzY2hlZHVsZWQgZm9yIGxhdGVyIHdvcmsuXG5cbiAgICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKF9pbnN0YW5jZTMpKSB7XG4gICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgICAgbWFya1JlZih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7IC8vIFRoaXMgbXVzdCBjb21lIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgY29tcGxldGUgcGhhc2UsIGJlY2F1c2UgaXQgbWlnaHRcbiAgICAgICAgICAvLyB0aHJvdyB0byBzdXNwZW5kLCBhbmQgaWYgdGhlIHJlc291cmNlIGltbWVkaWF0ZWx5IGxvYWRzLCB0aGUgd29yayBsb29wXG4gICAgICAgICAgLy8gd2lsbCByZXN1bWUgcmVuZGVyaW5nIGFzIGlmIHRoZSB3b3JrLWluLXByb2dyZXNzIGNvbXBsZXRlZC4gU28gaXQgbXVzdFxuICAgICAgICAgIC8vIGZ1bGx5IGNvbXBsZXRlLlxuXG4gICAgICAgICAgcHJlbG9hZEluc3RhbmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFRleHQ6IHtcbiAgICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudC5tZW1vaXplZFByb3BzOyAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZFxuICAgICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgICAgdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5ld1RleHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBfcm9vdENvbnRhaW5lckluc3RhbmNlMiA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0MiA9IGdldEhvc3RDb250ZXh0KCk7XG5cbiAgICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQzID0gcG9wSHlkcmF0aW9uU3RhdGUoKTtcblxuICAgICAgICAgICAgaWYgKF93YXNIeWRyYXRlZDMpIHtcbiAgICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKCkpIHtcbiAgICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKFxuICAgICAgICAgICAgICAgIG5ld1RleHQsXG4gICAgICAgICAgICAgICAgX3Jvb3RDb250YWluZXJJbnN0YW5jZTIsXG4gICAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dDIsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6IHtcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlOyAvLyBTcGVjaWFsIHBhdGggZm9yIGRlaHlkcmF0ZWQgYm91bmRhcmllcy4gV2UgbWF5IGV2ZW50dWFsbHkgbW92ZSB0aGlzXG4gICAgICAgICAgLy8gdG8gaXRzIG93biBmaWJlciB0eXBlIHNvIHRoYXQgd2UgY2FuIGFkZCBvdGhlciBraW5kcyBvZiBoeWRyYXRpb25cbiAgICAgICAgICAvLyBib3VuZGFyaWVzIHRoYXQgYXJlbid0IGFzc29jaWF0ZWQgd2l0aCBhIFN1c3BlbnNlIHRyZWUuIEluIGFudGljaXBhdGlvblxuICAgICAgICAgIC8vIG9mIHN1Y2ggYSByZWZhY3RvciwgYWxsIHRoZSBoeWRyYXRpb24gbG9naWMgaXMgY29udGFpbmVkIGluXG4gICAgICAgICAgLy8gdGhpcyBicmFuY2guXG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjdXJyZW50ID09PSBudWxsIHx8XG4gICAgICAgICAgICAoY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIGZhbGx0aHJvdWdoVG9Ob3JtYWxTdXNwZW5zZVBhdGggPVxuICAgICAgICAgICAgICBjb21wbGV0ZURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5KFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgbmV4dFN0YXRlXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmFsbHRocm91Z2hUb05vcm1hbFN1c3BlbnNlUGF0aCkge1xuICAgICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBGb3JjZUNsaWVudFJlbmRlcikge1xuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZS4gVGhlcmUgd2VyZSByZW1haW5pbmcgdW5oeWRyYXRlZCBub2Rlcy4gV2UgdHJlYXRcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGFzIGEgbWlzbWF0Y2guIFJldmVydCB0byBjbGllbnQgcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEaWQgbm90IGZpbmlzaCBoeWRyYXRpbmcsIGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgdGhlIGluaXRpYWxcbiAgICAgICAgICAgICAgICAvLyByZW5kZXIgb3IgYmVjYXVzZSBzb21ldGhpbmcgc3VzcGVuZGVkLlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIENvbnRpbnVlIHdpdGggdGhlIG5vcm1hbCBTdXNwZW5zZSBwYXRoLlxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgc3VzcGVuZGVkLiBSZS1yZW5kZXIgd2l0aCB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH0gLy8gRG9uJ3QgYnViYmxlIHByb3BlcnRpZXMgaW4gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHREaWRUaW1lb3V0ID0gbmV4dFN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9XG4gICAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICAvLyBhIHBhc3NpdmUgZWZmZWN0LCB3aGljaCBpcyB3aGVuIHdlIHByb2Nlc3MgdGhlIHRyYW5zaXRpb25zXG5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgIT09IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBhbiBlZmZlY3QgdG8gdG9nZ2xlIHRoZSBzdWJ0cmVlJ3MgdmlzaWJpbGl0eS4gV2hlbiB3ZSBzd2l0Y2ggZnJvbVxuICAgICAgICAgICAgLy8gZmFsbGJhY2sgLT4gcHJpbWFyeSwgdGhlIGlubmVyIE9mZnNjcmVlbiBmaWJlciBzY2hlZHVsZXMgdGhpcyBlZmZlY3RcbiAgICAgICAgICAgIC8vIGFzIHBhcnQgb2YgaXRzIG5vcm1hbCBjb21wbGV0ZSBwaGFzZS4gQnV0IHdoZW4gd2Ugc3dpdGNoIGZyb21cbiAgICAgICAgICAgIC8vIHByaW1hcnkgLT4gZmFsbGJhY2ssIHRoZSBpbm5lciBPZmZzY3JlZW4gZmliZXIgZG9lcyBub3QgaGF2ZSBhIGNvbXBsZXRlXG4gICAgICAgICAgICAvLyBwaGFzZS4gU28gd2UgbmVlZCB0byBzY2hlZHVsZSBpdHMgZWZmZWN0IGhlcmUuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gV2UgYWxzbyB1c2UgdGhpcyBmbGFnIHRvIGNvbm5lY3QvZGlzY29ubmVjdCB0aGUgZWZmZWN0cywgYnV0IHRoZSBzYW1lXG4gICAgICAgICAgICAvLyBsb2dpYyBhcHBsaWVzOiB3aGVuIHJlLWNvbm5lY3RpbmcsIHRoZSBPZmZzY3JlZW4gZmliZXIncyBjb21wbGV0ZVxuICAgICAgICAgICAgLy8gcGhhc2Ugd2lsbCBoYW5kbGUgc2NoZWR1bGluZyB0aGUgZWZmZWN0LiBJdCdzIG9ubHkgd2hlbiB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAgIC8vIGlzIGFjdGl2ZSB0aGF0IHdlIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC5cblxuICAgICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAgIHZhciBfb2Zmc2NyZWVuRmliZXIyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIF9vZmZzY3JlZW5GaWJlcjIuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmV0cnlRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJldHJ5UXVldWUpO1xuXG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYXJpdGhtZXRpY10gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdHlwZSBjYXN0aW5nIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIC09IG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uIC09XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICAvLyBQb3AgcHJvdmlkZXIgZmliZXJcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICAgICAgcG9wUHJvdmlkZXIoY29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgLy8gU2FtZSBhcyBjbGFzcyBjb21wb25lbnQgY2FzZS4gSSBwdXQgaXQgZG93biBoZXJlIHNvIHRoYXQgdGhlIHRhZ3MgYXJlXG4gICAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihfQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDoge1xuICAgICAgICAgIHBvcFN1c3BlbnNlTGlzdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaW4gdGhpcyBtb2RlLlxuICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlkU3VzcGVuZEFscmVhZHkgPVxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MkMTtcbiAgICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgICAgaWYgKHJlbmRlcmVkVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2UganVzdCByZW5kZXJlZCB0aGUgaGVhZC5cbiAgICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcGFzcy4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGFueXRoaW5nIGlzIHN0aWxsXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBpbiB0aGUgcmVuZGVyZWQgc2V0LlxuICAgICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgICAgLy8gZGlkbid0LiBUaGVuIHdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgcGFzcyB0aGF0IGZvcmNlcyBldmVyeXRoaW5nXG4gICAgICAgICAgICAgIC8vIHRvIGtlZXAgc2hvd2luZyB0aGVpciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgcHJldmlvdXMgY29tbWl0dGVkIHBhc3Mgc3VzcGVuZGVkLiBPdGhlcndpc2UsXG4gICAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gY2hhbmNlIHNvIHdlIGNhbiBza2lwIHRoZSBleHBlbnNpdmUgY2FsbCB0b1xuICAgICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICAgIHZhciBjYW5ub3RCZVN1c3BlbmRlZCA9XG4gICAgICAgICAgICAgICAgcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkgJiZcbiAgICAgICAgICAgICAgICAoY3VycmVudCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyQxKTtcblxuICAgICAgICAgICAgICBpZiAoIWNhbm5vdEJlU3VzcGVuZGVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIElmIHRoaXMgaXMgYSBuZXdseSBzdXNwZW5kZWQgdHJlZSwgaXQgbWlnaHQgbm90IGdldCBjb21taXR0ZWQgYXNcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0cyB0aGVuYWJsZXMuIEluc3RlYWQsIHdlJ2xsIHRyYW5zZmVyIGl0cyB0aGVuYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCBzbyB0aGF0IGl0IGNhbiByZXRyeSBpZiB0aGV5IHJlc29sdmUuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9mIHRoZXNlIGluIHRoZSBsaXN0IGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBvbmVzIGdldHMgdG8gcGluZy4gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBjbGV2ZXIgYW5kIGtlZXBcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgb2YgaG93IG1hbnkgZGVwZW5kZW5jaWVzIHJlbWFpbiBidXQgaXQgZ2V0cyB0cmlja3kgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBtaWdodCBiYWlsIG91dCBvZiB0aGUgbG9vcCBiZWZvcmUgZmluZGluZyBhbnkgYnV0IHRoYXRcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIgc2luY2UgdGhhdCBtZWFucyB0aGF0IHRoZSBvdGhlciBib3VuZGFyaWVzIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmV0cnlRdWV1ZSA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfcmV0cnlRdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgX3JldHJ5UXVldWUpOyAvLyBSZXJlbmRlciB0aGUgd2hvbGUgbGlzdCwgYnV0IHRoaXMgdGltZSwgd2UnbGwgZm9yY2UgZmFsbGJhY2tzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgZmxhZ3MgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBjaGlsZCBmaWJlcnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG5cbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gTm9GbGFncyQxO1xuICAgICAgICAgICAgICAgICAgICByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7IC8vIFNldCB1cCB0aGUgU3VzcGVuc2UgTGlzdCBDb250ZXh0IHRvIGZvcmNlIHN1c3BlbnNlIGFuZFxuICAgICAgICAgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlTGlzdENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVN1c3BlbnNlRmFsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7IC8vIERvbid0IGJ1YmJsZSBwcm9wZXJ0aWVzIGluIHRoaXMgY2FzZS5cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgbm93JDEoKSA+IGdldFJlbmRlclRhcmdldFRpbWUoKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYnV0IHdlIHN0aWxsIGhhdmUgcm93c1xuICAgICAgICAgICAgICAgIC8vIGxlZnQgaW4gdGhlIHRhaWwuIFdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHJlbmRlclxuICAgICAgICAgICAgICAgIC8vIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGUgdGFpbC5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSByZW5kZXJlZCByb3cgdG8gdGhlIGNoaWxkIGxpc3QuXG4gICAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICAgIHZhciBfc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJlbmRlcmVkVGFpbCk7XG5cbiAgICAgICAgICAgICAgaWYgKF9zdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgICAvLyBnZXQgbG9zdCBpZiB0aGlzIHJvdyBlbmRzIHVwIGRyb3BwZWQgZHVyaW5nIGEgc2Vjb25kIHBhc3MuXG5cbiAgICAgICAgICAgICAgICB2YXIgX3JldHJ5UXVldWUyID0gX3N1c3BlbmRlZC51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IF9yZXRyeVF1ZXVlMjtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCBfcmV0cnlRdWV1ZTIpO1xuICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgdHJ1ZSk7IC8vIFRoaXMgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbE1vZGUgPT09IFwiaGlkZGVuXCIgJiZcbiAgICAgICAgICAgICAgICAgICFyZW5kZXJlZFRhaWwuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgICAhZ2V0SXNIeWRyYXRpbmcoKSAvLyBXZSBkb24ndCBjdXQgaXQgaWYgd2UncmUgaHlkcmF0aW5nLlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gV2UncmUgZG9uZS5cbiAgICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgLy8gdGltZSB3ZSBoYXZlIHRvIHJlbmRlci4gU28gcmVuZGVyaW5nIG9uZSBtb3JlIHJvdyB3b3VsZCBsaWtlbHlcbiAgICAgICAgICAgICAgICAvLyBleGNlZWQgaXQuXG4gICAgICAgICAgICAgICAgbm93JDEoKSAqIDIgLSByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPlxuICAgICAgICAgICAgICAgICAgZ2V0UmVuZGVyVGFyZ2V0VGltZSgpICYmXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMgIT09IE9mZnNjcmVlbkxhbmVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3cgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYW5kIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyXG4gICAgICAgICAgICAgICAgLy8gYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcykge1xuICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0IGxpc3Qgb2YgdGhlIGJhY2t3YXJkcyB0YWlsIHdpbGwgaGF2ZSBiZWVuIGFkZGVkXG4gICAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAgIC8vIHNpYmxpbmcgb3JkZXIgYnV0IHRoYXQgaXNuJ3QgYSBzdHJvbmcgZ3VhcmFudGVlIHByb21pc2VkIGJ5IFJlYWN0LlxuICAgICAgICAgICAgICAvLyBFc3BlY2lhbGx5IHNpbmNlIHRoZXNlIG1pZ2h0IGFsc28ganVzdCBwb3AgaW4gZHVyaW5nIGZ1dHVyZSBjb21taXRzLlxuICAgICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgcmVuZGVyZWRUYWlsLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgcHJldmlvdXNTaWJsaW5nID0gcmVuZGVyU3RhdGUubGFzdDtcblxuICAgICAgICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0ID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIHRhaWwgcm93cyB0byByZW5kZXIuXG4gICAgICAgICAgICAvLyBQb3AgYSByb3cuXG4gICAgICAgICAgICB2YXIgbmV4dCA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBuZXh0O1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG5leHQuc2libGluZztcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdyQxKCk7XG4gICAgICAgICAgICBuZXh0LnNpYmxpbmcgPSBudWxsOyAvLyBSZXN0b3JlIHRoZSBjb250ZXh0LlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgICAvLyBzZXR0aW5nIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdvIGZyb20gbm90IHN1c3BlbmRlZCB0byBzdXNwZW5kZWQuXG5cbiAgICAgICAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dChcbiAgICAgICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQsXG4gICAgICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPVxuICAgICAgICAgICAgICAgIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VMaXN0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuICAgICAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHByb3BlcnRpZXMgaW4gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6IHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcG9wSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsOyAvLyBTY2hlZHVsZSBhIFZpc2liaWxpdHkgZWZmZWN0IGlmIHRoZSB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkXG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgX3ByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgdmFyIHByZXZJc0hpZGRlbiA9IF9wcmV2U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gT24gaW5pdGlhbCBtb3VudCwgd2Ugb25seSBuZWVkIGEgVmlzaWJpbGl0eSBlZmZlY3QgaWYgdGhlIHRyZWVcbiAgICAgICAgICAgICAgLy8gaXMgaGlkZGVuLlxuICAgICAgICAgICAgICBpZiAobmV4dElzSGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFuZXh0SXNIaWRkZW4gfHxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEb24ndCBidWJibGUgcHJvcGVydGllcyBmb3IgaGlkZGVuIGNoaWxkcmVuIHVubGVzcyB3ZSdyZSByZW5kZXJpbmdcbiAgICAgICAgICAgIC8vIGF0IG9mZnNjcmVlbiBwcmlvcml0eS5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkgJiYgLy8gQWxzbyBkb24ndCBidWJibGUgaWYgdGhlIHRyZWUgc3VzcGVuZGVkXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0xhbmVzXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7IC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBpbnNlcnRpb24gb3IgdXBkYXRlIGluIHRoZSBoaWRkZW4gc3VidHJlZS5cbiAgICAgICAgICAgICAgLy8gSWYgc28sIHdlIG5lZWQgdG8gaGlkZSB0aG9zZSBub2RlcyBpbiB0aGUgY29tbWl0IHBoYXNlLCBzb1xuICAgICAgICAgICAgICAvLyBzY2hlZHVsZSBhIHZpc2liaWxpdHkgZWZmZWN0LlxuXG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgJiAoUGxhY2VtZW50IHwgVXBkYXRlKSkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFZpc2liaWxpdHk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgb2Zmc2NyZWVuUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgIGlmIChvZmZzY3JlZW5RdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIF9yZXRyeVF1ZXVlMyA9IG9mZnNjcmVlblF1ZXVlLnJldHJ5UXVldWU7XG4gICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCBfcmV0cnlRdWV1ZTMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6IHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVHJhY2luZ01hcmtlckNvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFwiICtcbiAgICAgICAgICBcIlJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bndpbmRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSkgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDoge1xuICAgICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIF9mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKF9mbGFncyAmIFNob3VsZENhcHR1cmUpICE9PSBOb0ZsYWdzJDEgJiZcbiAgICAgICAgICAgIChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyQxXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHJlbmRlciB0aGF0IHdhc24ndCBjYXB0dXJlZCBieSBhIHN1c3BlbnNlXG4gICAgICAgICAgICAvLyBib3VuZGFyeS4gRG8gYSBzZWNvbmQgcGFzcyBvbiB0aGUgcm9vdCB0byB1bm1vdW50IHRoZSBjaGlsZHJlbi5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gKF9mbGFncyAmIH5TaG91bGRDYXB0dXJlKSB8IERpZENhcHR1cmU7XG4gICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgfSAvLyBXZSB1bndvdW5kIHRvIHRoZSByb290IHdpdGhvdXQgY29tcGxldGluZyBpdC4gRXhpdC5cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFRPRE86IHBvcEh5ZHJhdGlvblN0YXRlXG4gICAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDoge1xuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRocmV3IGluIG5ld2x5IG1vdW50ZWQgZGVoeWRyYXRlZCBjb21wb25lbnQuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9mbGFnczIgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICAgIGlmIChfZmxhZ3MyICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoX2ZsYWdzMiAmIH5TaG91bGRDYXB0dXJlKSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICBwb3BTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTsgLy8gU3VzcGVuc2VMaXN0IGRvZXNuJ3QgYWN0dWFsbHkgY2F0Y2ggYW55dGhpbmcuIEl0IHNob3VsZCd2ZSBiZWVuXG4gICAgICAgICAgLy8gY2F1Z2h0IGJ5IGEgbmVzdGVkIGJvdW5kYXJ5LiBJZiBub3QsIGl0IHNob3VsZCBidWJibGUgdGhyb3VnaC5cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgICAgIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZS5fY29udGV4dDtcbiAgICAgICAgICBwb3BQcm92aWRlcihjb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwb3BIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgX2ZsYWdzMyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgICAgaWYgKF9mbGFnczMgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChfZmxhZ3MzICYgflNob3VsZENhcHR1cmUpIHwgRGlkQ2FwdHVyZTsgLy8gQ2FwdHVyZWQgYSBzdXNwZW5zZSBlZmZlY3QuIFJlLXJlbmRlciB0aGUgYm91bmRhcnkuXG5cbiAgICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENhY2hlQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNhc2UgVHJhY2luZ01hcmtlckNvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCBpbnRlcnJ1cHRlZFdvcmssIHJlbmRlckxhbmVzKSB7XG4gICAgICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgICAgaWYgKGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OiB7XG4gICAgICAgICAgcG9wSG9zdENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgICBwb3BTdXNwZW5zZUxpc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAgdmFyIGNvbnRleHQgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5fY29udGV4dDtcbiAgICAgICAgICBwb3BQcm92aWRlcihjb250ZXh0LCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBwb3BIaWRkZW5Db250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xuICAgIH0gLy8gVXNlZCBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZSB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgc3RhY2suXG4gICAgLy8gQWxsb3dzIHVzIHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHJldHVybiBwYXRoIHRvIGZpbmQgdGhlIG5lYXJlc3QgT2Zmc2NyZWVuIGFuY2VzdG9yLlxuXG4gICAgdmFyIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IGZhbHNlO1xuICAgIHZhciBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gZmFsc2U7XG4gICAgdmFyIFBvc3NpYmx5V2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrU2V0IDogU2V0O1xuICAgIHZhciBuZXh0RWZmZWN0ID0gbnVsbDsgLy8gVXNlZCBmb3IgUHJvZmlsaW5nIGJ1aWxkcyB0byB0cmFjayB1cGRhdGVycy5cblxuICAgIHZhciBpblByb2dyZXNzTGFuZXMgPSBudWxsO1xuICAgIHZhciBpblByb2dyZXNzUm9vdCA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBzaG91bGRQcm9maWxlKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjdXJyZW50Lm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAoZ2V0RXhlY3V0aW9uQ29udGV4dCgpICYgQ29tbWl0Q29udGV4dCkgIT09IE5vQ29udGV4dFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRVbmNhdWdodEVycm9ySW5ERVYoZXJyb3IpIHtcbiAgICAgIC8vIFdyYXBwaW5nIGVhY2ggc21hbGwgcGFydCBvZiB0aGUgY29tbWl0IHBoYXNlIGludG8gYSBndWFyZGVkXG4gICAgICAvLyBjYWxsYmFjayBpcyBhIGJpdCB0b28gc2xvdyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMjE2NjYpLlxuICAgICAgLy8gQnV0IHdlIHJlbHkgb24gaXQgdG8gc3VyZmFjZSBlcnJvcnMgdG8gREVWIHRvb2xzIGxpa2Ugb3ZlcmxheXNcbiAgICAgIC8vIChodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIxNzEyKS5cbiAgICAgIC8vIEFzIGEgY29tcHJvbWlzZSwgcmV0aHJvdyBvbmx5IGNhdWdodCBlcnJvcnMgaW4gYSBndWFyZC5cbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzaG91bGRQcm9maWxlKGN1cnJlbnQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICB9XG4gICAgfSAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG4gICAgZnVuY3Rpb24gc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyKGN1cnJlbnQsIGluc3RhbmNlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9IC8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IG1vdW50aW5nLlxuXG4gICAgZnVuY3Rpb24gc2FmZWx5QXR0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbW1pdEF0dGFjaFJlZihjdXJyZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICAgICAgdmFyIHJlZiA9IGN1cnJlbnQucmVmO1xuICAgICAgdmFyIHJlZkNsZWFudXAgPSBjdXJyZW50LnJlZkNsZWFudXA7XG5cbiAgICAgIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZWZDbGVhbnVwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgcmVmQ2xlYW51cCgpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWZDbGVhbnVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gYHJlZkNsZWFudXBgIGhhcyBiZWVuIGNhbGxlZC4gTnVsbGlmeSBhbGwgcmVmZXJlbmNlcyB0byBpdCB0byBwcmV2ZW50IGRvdWJsZSBpbnZvY2F0aW9uLlxuICAgICAgICAgICAgY3VycmVudC5yZWZDbGVhbnVwID0gbnVsbDtcbiAgICAgICAgICAgIHZhciBmaW5pc2hlZFdvcmsgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdmFyIHJldFZhbDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShjdXJyZW50KSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgICAgICByZXRWYWwgPSByZWYobnVsbCk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldFZhbCA9IHJlZihudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmV0VmFsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIHJldHVybiB2YWx1ZSBmcm9tIGEgY2FsbGJhY2sgcmVmIGluICVzLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIkEgY2FsbGJhY2sgcmVmIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24uXCIsXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIHVuYWJsZSB0byBuYXJyb3cgdHlwZSB0byBSZWZPYmplY3RcbiAgICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZXN0cm95KSB7XG4gICAgICB0cnkge1xuICAgICAgICBkZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmlyc3RDaGlsZCkge1xuICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQ7XG4gICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNfYmVnaW4oKTsgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSBpbnN0YW5jZSBmaWJlclxuXG4gICAgICB2YXIgc2hvdWxkRmlyZSA9IHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1cjtcbiAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHNob3VsZEZpcmU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzX2JlZ2luKCkge1xuICAgICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDsgLy8gVGhpcyBwaGFzZSBpcyBvbmx5IHVzZWQgZm9yIGJlZm9yZUFjdGl2ZUluc3RhbmNlQmx1ci5cblxuICAgICAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZpYmVyLnN1YnRyZWVGbGFncyAmIEJlZm9yZU11dGF0aW9uTWFzaykgIT09IE5vRmxhZ3MkMSAmJlxuICAgICAgICAgIGNoaWxkICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGNoaWxkLnJldHVybiA9IGZpYmVyO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNfY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19jb21wbGV0ZSgpIHtcbiAgICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB2YXIgc2libGluZyA9IGZpYmVyLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gc2libGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0RWZmZWN0ID0gZmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG5cbiAgICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6IHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgc25hcHNob3QgPSBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlXG4gICAgICAgICAgICAgICAgICA/IHByZXZQcm9wc1xuICAgICAgICAgICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLFxuICAgICAgICAgICAgICAgIHByZXZTdGF0ZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGlkV2FyblNldCA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgIWRpZFdhcm5TZXQuaGFzKGZpbmlzaGVkV29yay50eXBlKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCIlcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgXCJtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGVzZSBjb21wb25lbnQgdHlwZXNcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgXCIgK1xuICAgICAgICAgICAgICAgIFwibGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgIGZsYWdzLFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICkge1xuICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgaWYgKChlZmZlY3QudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICAgICAgLy8gVW5tb3VudFxuICAgICAgICAgICAgdmFyIGluc3QgPSBlZmZlY3QuaW5zdDtcbiAgICAgICAgICAgIHZhciBkZXN0cm95ID0gaW5zdC5kZXN0cm95O1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGluc3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShmaW5pc2hlZFdvcmssIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlc3Ryb3kpO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgICAgICAgICAgc2V0SXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChmbGFncywgZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAoKGVmZmVjdC50YWcgJiBmbGFncykgPT09IGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgICAgICAgIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaW5zdCA9IGVmZmVjdC5pbnN0O1xuICAgICAgICAgICAgdmFyIGRlc3Ryb3kgPSBjcmVhdGUoKTtcbiAgICAgICAgICAgIGluc3QuZGVzdHJveSA9IGRlc3Ryb3k7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgICBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGhvb2tOYW1lID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKChlZmZlY3QudGFnICYgTGF5b3V0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICBob29rTmFtZSA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZWZmZWN0LnRhZyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICAgICAgaG9va05hbWUgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBob29rTmFtZSA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGFkZGVuZHVtID1cbiAgICAgICAgICAgICAgICAgICAgXCIgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInVwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS5cIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cm95LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgICAgICBcIlxcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgaG9va05hbWUgK1xuICAgICAgICAgICAgICAgICAgICBcIihhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIkluc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImFuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgaG9va05hbWUgK1xuICAgICAgICAgICAgICAgICAgICBcIigoKSA9PiB7XFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIFwiICAgIC8vIC4uLlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgIH1cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIFwiICBmZXRjaERhdGEoKTtcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIFwifSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc24ndCBuZWVkIHByb3BzIG9yIHN0YXRlXFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIkxlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZ1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBhZGRlbmR1bSA9IFwiIFlvdSByZXR1cm5lZDogXCIgKyBkZXN0cm95O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgXCIlcyBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwid2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXNcIixcbiAgICAgICAgICAgICAgICAgIGhvb2tOYW1lLFxuICAgICAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVFZmZlY3REdXJhdGlvbnMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIGlmIChnZXRFeGVjdXRpb25Db250ZXh0KCkgJiBDb21taXRDb250ZXh0KSB7XG4gICAgICAgIC8vIE9ubHkgUHJvZmlsZXJzIHdpdGggd29yayBpbiB0aGVpciBzdWJ0cmVlIHdpbGwgaGF2ZSBhbiBVcGRhdGUgZWZmZWN0IHNjaGVkdWxlZC5cbiAgICAgICAgaWYgKChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgUHJvZmlsZXI6IHtcbiAgICAgICAgICAgICAgdmFyIHBhc3NpdmVFZmZlY3REdXJhdGlvbiA9XG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgICBpZCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZS5pZCxcbiAgICAgICAgICAgICAgICBvblBvc3RDb21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUub25Qb3N0Q29tbWl0OyAvLyBUaGlzIHZhbHVlIHdpbGwgc3RpbGwgcmVmbGVjdCB0aGUgcHJldmlvdXMgY29tbWl0IHBoYXNlLlxuICAgICAgICAgICAgICAvLyBJdCBkb2VzIG5vdCBnZXQgcmVzZXQgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNvbW1pdCBwaGFzZS5cblxuICAgICAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IGdldENvbW1pdFRpbWUoKTtcbiAgICAgICAgICAgICAgdmFyIHBoYXNlID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSA9PT0gbnVsbCA/IFwibW91bnRcIiA6IFwidXBkYXRlXCI7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRVcGRhdGVOZXN0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgcGhhc2UgPSBcIm5lc3RlZC11cGRhdGVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodHlwZW9mIG9uUG9zdENvbW1pdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb25Qb3N0Q29tbWl0KGlkLCBwaGFzZSwgcGFzc2l2ZUVmZmVjdER1cmF0aW9uLCBjb21taXRUaW1lKTtcbiAgICAgICAgICAgICAgfSAvLyBCdWJibGUgdGltZXMgdG8gdGhlIG5leHQgbmVhcmVzdCBhbmNlc3RvciBQcm9maWxlci5cbiAgICAgICAgICAgICAgLy8gQWZ0ZXIgd2UgcHJvY2VzcyB0aGF0IFByb2ZpbGVyLCB3ZSdsbCBidWJibGUgZnVydGhlciB1cC5cblxuICAgICAgICAgICAgICB2YXIgcGFyZW50RmliZXIgPSBmaW5pc2hlZFdvcmsucmV0dXJuO1xuXG4gICAgICAgICAgICAgIG91dGVyOiB3aGlsZSAocGFyZW50RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9IHBhc3NpdmVFZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgICAgICAgICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0xheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCBob29rRmxhZ3MpIHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgbGF5b3V0IGVmZmVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIChkdXJpbmcgbXV0YXRpb24gcGhhc2UpLlxuICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdENsYXNzTGF5b3V0TGlmZWN5Y2xlcyhmaW5pc2hlZFdvcmssIGN1cnJlbnQpIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICAgICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiY29tcG9uZW50RGlkTW91bnQuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJjb21wb25lbnREaWRNb3VudC4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByZXZQcm9wcyA9XG4gICAgICAgICAgZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZVxuICAgICAgICAgICAgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgY3VycmVudC5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFVwZGF0ZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBcIiArXG4gICAgICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFVwZGF0ZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShcbiAgICAgICAgICAgICAgcHJldlByb3BzLFxuICAgICAgICAgICAgICBwcmV2U3RhdGUsXG4gICAgICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUoXG4gICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKSB7XG4gICAgICAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICAgICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwicHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwicHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvc3RDb21wb25lbnRNb3VudChmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbW1pdE1vdW50KGluc3RhbmNlLCB0eXBlLCBwcm9wcywgZmluaXNoZWRXb3JrKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdFByb2ZpbGVyVXBkYXRlKGZpbmlzaGVkV29yaywgY3VycmVudCkge1xuICAgICAgaWYgKGdldEV4ZWN1dGlvbkNvbnRleHQoKSAmIENvbW1pdENvbnRleHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uQ29tbWl0LFxuICAgICAgICAgICAgb25SZW5kZXIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUmVuZGVyO1xuICAgICAgICAgIHZhciBlZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgdmFyIGNvbW1pdFRpbWUgPSBnZXRDb21taXRUaW1lKCk7XG4gICAgICAgICAgdmFyIHBoYXNlID0gY3VycmVudCA9PT0gbnVsbCA/IFwibW91bnRcIiA6IFwidXBkYXRlXCI7XG5cbiAgICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJOZXN0ZWRVcGRhdGVQaGFzZSkge1xuICAgICAgICAgICAgaWYgKGlzQ3VycmVudFVwZGF0ZU5lc3RlZCgpKSB7XG4gICAgICAgICAgICAgIHBoYXNlID0gXCJuZXN0ZWQtdXBkYXRlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBvblJlbmRlcihcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsXG4gICAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLFxuICAgICAgICAgICAgICBjb21taXRUaW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbmFibGVQcm9maWxlckNvbW1pdEhvb2tzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9uQ29tbWl0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgb25Db21taXQoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgcGhhc2UsXG4gICAgICAgICAgICAgICAgZWZmZWN0RHVyYXRpb24sXG4gICAgICAgICAgICAgICAgY29tbWl0VGltZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSAvLyBTY2hlZHVsZSBhIHBhc3NpdmUgZWZmZWN0IGZvciB0aGlzIFByb2ZpbGVyIHRvIGNhbGwgb25Qb3N0Q29tbWl0IGhvb2tzLlxuICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3Qgc2hvdWxkIGJlIHNjaGVkdWxlZCBldmVuIGlmIHRoZXJlIGlzIG5vIG9uUG9zdENvbW1pdCBjYWxsYmFjayBmb3IgdGhpcyBQcm9maWxlcixcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGVmZmVjdCBpcyBhbHNvIHdoZXJlIHRpbWVzIGJ1YmJsZSB0byBwYXJlbnQgUHJvZmlsZXJzLlxuXG4gICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdChmaW5pc2hlZFdvcmspOyAvLyBQcm9wYWdhdGUgbGF5b3V0IGVmZmVjdCBkdXJhdGlvbnMgdG8gdGhlIG5leHQgbmVhcmVzdCBQcm9maWxlciBhbmNlc3Rvci5cbiAgICAgICAgICAgIC8vIERvIG5vdCByZXNldCB0aGVzZSB2YWx1ZXMgdW50aWwgdGhlIG5leHQgcmVuZGVyIHNvIERldlRvb2xzIGhhcyBhIGNoYW5jZSB0byByZWFkIHRoZW0gZmlyc3QuXG5cbiAgICAgICAgICAgIHZhciBwYXJlbnRGaWJlciA9IGZpbmlzaGVkV29yay5yZXR1cm47XG5cbiAgICAgICAgICAgIG91dGVyOiB3aGlsZSAocGFyZW50RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICByb290LmVmZmVjdER1cmF0aW9uICs9IGVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgIHBhcmVudFN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiArPSBlZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGN1cnJlbnQsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjb21taXR0ZWRMYW5lc1xuICAgICkge1xuICAgICAgLy8gV2hlbiB1cGRhdGluZyB0aGlzIGZ1bmN0aW9uLCBhbHNvIHVwZGF0ZSByZWFwcGVhckxheW91dEVmZmVjdHMsIHdoaWNoIGRvZXNcbiAgICAgIC8vIG1vc3Qgb2YgdGhlIHNhbWUgdGhpbmdzIHdoZW4gYW4gb2Zmc2NyZWVuIHRyZWUgZ29lcyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlLlxuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuXG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0IHwgSGFzRWZmZWN0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIGNvbW1pdENsYXNzTGF5b3V0TGlmZWN5Y2xlcyhmaW5pc2hlZFdvcmssIGN1cnJlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGFncyAmIENhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RSb290OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29tbWl0Q2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG5cbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7IC8vIFJlbmRlcmVycyBtYXkgc2NoZWR1bGUgd29yayB0byBiZSBkb25lIGFmdGVyIGhvc3QgY29tcG9uZW50cyBhcmUgbW91bnRlZFxuICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAgIC8vIGFrYSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQvYWx0ZXJuYXRlLlxuXG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIGNvbW1pdEhvc3RDb21wb25lbnRNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFByb2ZpbGVyOiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspOyAvLyBUT0RPOiBTaG91bGQgdGhpcyBmaXJlIGluc2lkZSBhbiBvZmZzY3JlZW4gdHJlZT8gT3Igc2hvdWxkIGl0IHdhaXQgdG9cbiAgICAgICAgICAvLyBmaXJlIHdoZW4gdGhlIHRyZWUgYmVjb21lcyB2aXNpYmxlIGFnYWluLlxuXG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICBjb21taXRQcm9maWxlclVwZGF0ZShmaW5pc2hlZFdvcmssIGN1cnJlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgaXNNb2Rlcm5Sb290ID0gKGZpbmlzaGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGU7XG5cbiAgICAgICAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIHZhciBuZXdPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPVxuICAgICAgICAgICAgICBpc0hpZGRlbiB8fCBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG5cbiAgICAgICAgICAgIGlmIChuZXdPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBPZmZzY3JlZW4gdHJlZSBpcyB2aXNpYmxlLlxuICAgICAgICAgICAgICB2YXIgd2FzSGlkZGVuID1cbiAgICAgICAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgdmFyIG5ld09mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPVxuICAgICAgICAgICAgICAgIHdhc0hpZGRlbiB8fCBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gbmV3T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gbmV3T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcblxuICAgICAgICAgICAgICBpZiAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiAmJiAhcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByb290IG9mIGEgcmVhcHBlYXJpbmcgYm91bmRhcnkuIEFzIHdlIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgLy8gdHJhdmVyc2luZyB0aGUgbGF5b3V0IGVmZmVjdHMsIHdlIG11c3QgYWxzbyByZS1tb3VudCBsYXlvdXRcbiAgICAgICAgICAgICAgICAvLyBlZmZlY3RzIHRoYXQgd2VyZSB1bm1vdW50ZWQgd2hlbiB0aGUgT2Zmc2NyZWVuIHN1YnRyZWUgd2FzXG4gICAgICAgICAgICAgICAgLy8gaGlkZGVuLiBTbyB0aGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIG5vcm1hbCBjb21taXRMYXlvdXRFZmZlY3RzLlxuICAgICAgICAgICAgICAgIHZhciBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID1cbiAgICAgICAgICAgICAgICAgIChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgTGF5b3V0TWFzaykgIT09IE5vRmxhZ3MkMTtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcblxuICAgICAgICAgICAgaWYgKHByb3BzLm1vZGUgPT09IFwibWFudWFsXCIpIHtcbiAgICAgICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gICAgICAvLyBPbmx5IGhpZGUgb3IgdW5oaWRlIHRoZSB0b3AtbW9zdCBob3N0IG5vZGVzLlxuICAgICAgdmFyIGhvc3RTdWJ0cmVlUm9vdCA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgICAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGZhbHNlIHx8IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoaG9zdFN1YnRyZWVSb290ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGhvc3RTdWJ0cmVlUm9vdCA9IG5vZGU7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgICAgICAgaGlkZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdW5oaWRlSW5zdGFuY2Uobm9kZS5zdGF0ZU5vZGUsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgICAgICBpZiAoaG9zdFN1YnRyZWVSb290ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAobm9kZS50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCB8fFxuICAgICAgICAgICAgICBub2RlLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50KSAmJlxuICAgICAgICAgICAgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICBub2RlICE9PSBmaW5pc2hlZFdvcmtcbiAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhvc3RTdWJ0cmVlUm9vdCA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICBob3N0U3VidHJlZVJvb3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhvc3RTdWJ0cmVlUm9vdCA9PT0gbm9kZSkge1xuICAgICAgICAgICAgaG9zdFN1YnRyZWVSb290ID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuXG4gICAgICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBpbnN0YW5jZVRvVXNlO1xuXG4gICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGluc3RhbmNlVG9Vc2UgPSBpbnN0YW5jZTtcbiAgICAgICAgfSAvLyBNb3ZlZCBvdXRzaWRlIHRvIGVuc3VyZSBEQ0Ugd29ya3Mgd2l0aCB0aGlzIGZsYWdcblxuICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmVmQ2xlYW51cCA9IHJlZihpbnN0YW5jZVRvVXNlKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXJlZi5oYXNPd25Qcm9wZXJ0eShcImN1cnJlbnRcIikpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIlVzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSB1bmFibGUgdG8gbmFycm93IHR5cGUgdG8gdGhlIG5vbi1mdW5jdGlvbiBjYXNlXG5cbiAgICAgICAgICByZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXRhY2hGaWJlck11dGF0aW9uKGZpYmVyKSB7XG4gICAgICAvLyBDdXQgb2ZmIHRoZSByZXR1cm4gcG9pbnRlciB0byBkaXNjb25uZWN0IGl0IGZyb20gdGhlIHRyZWUuXG4gICAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gZGV0ZWN0IGFuZCB3YXJuIGFnYWluc3Qgc3RhdGUgdXBkYXRlcyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAgICAgLy8gSXQgYWxzbyBwcmV2ZW50cyBldmVudHMgZnJvbSBidWJibGluZyBmcm9tIHdpdGhpbiBkaXNjb25uZWN0ZWQgY29tcG9uZW50cy5cbiAgICAgIC8vXG4gICAgICAvLyBJZGVhbGx5LCB3ZSBzaG91bGQgYWxzbyBjbGVhciB0aGUgY2hpbGQgcG9pbnRlciBvZiB0aGUgcGFyZW50IGFsdGVybmF0ZSB0byBsZXQgdGhpc1xuICAgICAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAgICAgLy8gb25lIHNvIHdlJ2xsIHNldHRsZSBmb3IgR0M6aW5nIHRoZSBzdWJ0cmVlIG9mIHRoaXMgY2hpbGQuXG4gICAgICAvLyBUaGlzIGNoaWxkIGl0c2VsZiB3aWxsIGJlIEdDOmVkIHdoZW4gdGhlIHBhcmVudCB1cGRhdGVzIHRoZSBuZXh0IHRpbWUuXG4gICAgICAvL1xuICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbid0IGNsZWFyIGNoaWxkIG9yIHNpYmxpbmcgcG9pbnRlcnMgeWV0LlxuICAgICAgLy8gVGhleSdyZSBuZWVkZWQgZm9yIHBhc3NpdmUgZWZmZWN0cyBhbmQgZm9yIGZpbmRET01Ob2RlLlxuICAgICAgLy8gV2UgZGVmZXIgdGhvc2UgZmllbGRzLCBhbmQgYWxsIG90aGVyIGNsZWFudXAsIHRvIHRoZSBwYXNzaXZlIHBoYXNlIChzZWUgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMpLlxuICAgICAgLy9cbiAgICAgIC8vIERvbid0IHJlc2V0IHRoZSBhbHRlcm5hdGUgeWV0LCBlaXRoZXIuIFdlIG5lZWQgdGhhdCBzbyB3ZSBjYW4gZGV0YWNoIHRoZVxuICAgICAgLy8gYWx0ZXJuYXRlJ3MgZmllbGRzIGluIHRoZSBwYXNzaXZlIHBoYXNlLiBDbGVhcmluZyB0aGUgcmV0dXJuIHBvaW50ZXIgaXNcbiAgICAgIC8vIHN1ZmZpY2llbnQgZm9yIGZpbmRET01Ob2RlIHNlbWFudGljcy5cbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLnJldHVybiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZpYmVyLnJldHVybiA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoYWx0ZXJuYXRlKTtcbiAgICAgIH0gLy8gQ2xlYXIgY3ljbGljYWwgRmliZXIgZmllbGRzLiBUaGlzIGxldmVsIGFsb25lIGlzIGRlc2lnbmVkIHRvIHJvdWdobHlcbiAgICAgIC8vIGFwcHJveGltYXRlIHRoZSBwbGFubmVkIEZpYmVyIHJlZmFjdG9yLiBJbiB0aGF0IHdvcmxkLCBgc2V0U3RhdGVgIHdpbGwgYmVcbiAgICAgIC8vIGJvdW5kIHRvIGEgc3BlY2lhbCBcImluc3RhbmNlXCIgb2JqZWN0IGluc3RlYWQgb2YgYSBGaWJlci4gVGhlIEluc3RhbmNlXG4gICAgICAvLyBvYmplY3Qgd2lsbCBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmllbGRzLiBJdCB3aWxsIG9ubHkgYmUgY29ubmVjdGVkIHRvXG4gICAgICAvLyB0aGUgZmliZXIgdHJlZSB2aWEgYSBzaW5nbGUgbGluayBhdCB0aGUgcm9vdC4gU28gaWYgdGhpcyBsZXZlbCBhbG9uZSBpc1xuICAgICAgLy8gc3VmZmljaWVudCB0byBmaXggbWVtb3J5IGlzc3VlcywgdGhhdCBib2RlcyB3ZWxsIGZvciBvdXIgcGxhbnMuXG5cbiAgICAgIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgICAgIGZpYmVyLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICBmaWJlci5zaWJsaW5nID0gbnVsbDsgLy8gVGhlIGBzdGF0ZU5vZGVgIGlzIGN5Y2xpY2FsIGJlY2F1c2Ugb24gaG9zdCBub2RlcyBpdCBwb2ludHMgdG8gdGhlIGhvc3RcblxuICAgICAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICBmaWJlci5fZGVidWdPd25lciA9IG51bGw7XG4gICAgICB9IC8vIFRoZW9yZXRpY2FsbHksIG5vdGhpbmcgaW4gaGVyZSBzaG91bGQgYmUgbmVjZXNzYXJ5LCBiZWNhdXNlIHdlIGFscmVhZHlcbiAgICAgIC8vIGRpc2Nvbm5lY3RlZCB0aGUgZmliZXIgZnJvbSB0aGUgdHJlZS4gU28gZXZlbiBpZiBzb21ldGhpbmcgbGVha3MgdGhpc1xuICAgICAgLy8gcGFydGljdWxhciBmaWJlciwgaXQgd29uJ3QgbGVhayBhbnl0aGluZyBlbHNlLlxuXG4gICAgICBmaWJlci5yZXR1cm4gPSBudWxsO1xuICAgICAgZmliZXIuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgICAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBudWxsO1xuICAgICAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDsgLy8gVE9ETzogTW92ZSB0byBgY29tbWl0UGFzc2l2ZVVubW91bnRJbnNpZGVEZWxldGVkVHJlZU9uRmliZXJgIGluc3RlYWQuXG5cbiAgICAgIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRIb3N0UGFyZW50RmliZXIoZmliZXIpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgICAgIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBcIiArXG4gICAgICAgICAgXCJpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHxcbiAgICAgICAgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fFxuICAgICAgICBmYWxzZSB8fFxuICAgICAgICBmYWxzZSB8fFxuICAgICAgICBmaWJlci50YWcgPT09IEhvc3RQb3J0YWxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNlYXJjaCBmb3J3YXJkIGludG8gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIHNpYmxpbmcgaG9zdFxuICAgICAgLy8gbm9kZS4gVW5mb3J0dW5hdGVseSwgaWYgbXVsdGlwbGUgaW5zZXJ0aW9ucyBhcmUgZG9uZSBpbiBhIHJvdyB3ZSBoYXZlIHRvXG4gICAgICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgICAgIC8vIFRPRE86IEZpbmQgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcy5cbiAgICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICAgIHNpYmxpbmdzOiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBuZXh0IHNpYmxpbmcuXG4gICAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgaXNIb3N0UGFyZW50KG5vZGUucmV0dXJuKSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgcG9wIG91dCBvZiB0aGUgcm9vdCBvciBoaXQgdGhlIHBhcmVudCB0aGUgZmliZXIgd2UgYXJlIHRoZVxuICAgICAgICAgICAgLy8gbGFzdCBzaWJsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgIG5vZGUudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmXG4gICAgICAgICAgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmXG4gICAgICAgICAgdHJ1ZSAmJlxuICAgICAgICAgIG5vZGUudGFnICE9PSBEZWh5ZHJhdGVkRnJhZ21lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGhvc3Qgbm9kZSBhbmQsIHdlIG1pZ2h0IGhhdmUgYSBob3N0IG5vZGUgaW5zaWRlIGl0LlxuICAgICAgICAgIC8vIFRyeSB0byBzZWFyY2ggZG93biB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgICAgICAgICBpZiAobm9kZS5mbGFncyAmIFBsYWNlbWVudCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cbiAgICAgICAgICBpZiAobm9kZS5jaGlsZCA9PT0gbnVsbCB8fCBub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDaGVjayBpZiB0aGlzIGhvc3Qgbm9kZSBpcyBzdGFibGUgb3IgYWJvdXQgdG8gYmUgcGxhY2VkLlxuXG4gICAgICAgIGlmICghKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAgICAgLy8gRm91bmQgaXQhXG4gICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG5cbiAgICAgIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgX3BhcmVudCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChwYXJlbnRGaWJlci5mbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgICAgICAgcGFyZW50RmliZXIuZmxhZ3MgJj0gfkNvbnRlbnRSZXNldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2JlZm9yZSA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7IC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgICAgICAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBfYmVmb3JlLCBfcGFyZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDoge1xuICAgICAgICAgIHZhciBfcGFyZW50MiA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgdmFyIF9iZWZvcmUyID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBfYmVmb3JlMixcbiAgICAgICAgICAgIF9wYXJlbnQyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgXCIgK1xuICAgICAgICAgICAgICBcImluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gICAgICBpZiAoaXNIb3N0KSB7XG4gICAgICAgIHZhciBzdGF0ZU5vZGUgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwgfHwgZmFsc2UpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gICAgICB2YXIgdGFnID0gbm9kZS50YWc7XG4gICAgICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgICAgIGlmIChpc0hvc3QpIHtcbiAgICAgICAgdmFyIHN0YXRlTm9kZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCB8fCBmYWxzZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBUaGVzZSBhcmUgdHJhY2tlZCBvbiB0aGUgc3RhY2sgYXMgd2UgcmVjdXJzaXZlbHkgdHJhdmVyc2UgYVxuICAgIC8vIGRlbGV0ZWQgc3VidHJlZS5cbiAgICAvLyBUT0RPOiBVcGRhdGUgdGhlc2UgZHVyaW5nIHRoZSB3aG9sZSBtdXRhdGlvbiBwaGFzZSwgbm90IGp1c3QgZHVyaW5nXG4gICAgLy8gYSBkZWxldGlvbi5cblxuICAgIHZhciBob3N0UGFyZW50ID0gbnVsbDtcbiAgICB2YXIgaG9zdFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb21taXREZWxldGlvbkVmZmVjdHMocm9vdCwgcmV0dXJuRmliZXIsIGRlbGV0ZWRGaWJlcikge1xuICAgICAge1xuICAgICAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBkZWxldGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgICAgICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgICAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LCBkZXRhY2ggcmVmcywgY2xlYW5cbiAgICAgICAgLy8gdXAgbW91bnRlZCBsYXlvdXQgZWZmZWN0cywgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQuXG4gICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byByZW1vdmUgdGhlIHRvcG1vc3QgaG9zdCBjaGlsZCBpbiBlYWNoIGJyYW5jaC4gQnV0IHRoZW4gd2VcbiAgICAgICAgLy8gc3RpbGwgbmVlZCB0byBrZWVwIHRyYXZlcnNpbmcgdG8gdW5tb3VudCBlZmZlY3RzLCByZWZzLCBhbmQgY1dVLiBUT0RPOiBXZVxuICAgICAgICAvLyBjb3VsZCBzcGxpdCB0aGlzIGludG8gdHdvIHNlcGFyYXRlIHRyYXZlcnNhbHMgZnVuY3Rpb25zLCB3aGVyZSB0aGUgc2Vjb25kXG4gICAgICAgIC8vIG9uZSBkb2Vzbid0IGluY2x1ZGUgYW55IHJlbW92ZUNoaWxkIGxvZ2ljLiBUaGlzIGlzIG1heWJlIHRoZSBzYW1lXG4gICAgICAgIC8vIGZ1bmN0aW9uIGFzIFwiZGlzYXBwZWFyTGF5b3V0RWZmZWN0c1wiIChvciB3aGF0ZXZlciB0aGF0IHR1cm5zIGludG8gYWZ0ZXJcbiAgICAgICAgLy8gdGhlIGxheW91dCBwaGFzZSBpcyByZWZhY3RvcmVkIHRvIHVzZSByZWN1cnNpb24pLlxuICAgICAgICAvLyBCZWZvcmUgc3RhcnRpbmcsIGZpbmQgdGhlIG5lYXJlc3QgaG9zdCBwYXJlbnQgb24gdGhlIHN0YWNrIHNvIHdlIGtub3dcbiAgICAgICAgLy8gd2hpY2ggaW5zdGFuY2UvY29udGFpbmVyIHRvIHJlbW92ZSB0aGUgY2hpbGRyZW4gZnJvbS5cbiAgICAgICAgLy8gVE9ETzogSW5zdGVhZCBvZiBzZWFyY2hpbmcgdXAgdGhlIGZpYmVyIHJldHVybiBwYXRoIG9uIGV2ZXJ5IGRlbGV0aW9uLCB3ZVxuICAgICAgICAvLyBjYW4gdHJhY2sgdGhlIG5lYXJlc3QgaG9zdCBjb21wb25lbnQgb24gdGhlIEpTIHN0YWNrIGFzIHdlIHRyYXZlcnNlIHRoZVxuICAgICAgICAvLyB0cmVlIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIHdvdWxkIG1ha2UgaW5zZXJ0aW9ucyBmYXN0ZXIsIHRvby5cbiAgICAgICAgdmFyIHBhcmVudCA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIGZpbmRQYXJlbnQ6IHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDoge1xuICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOiB7XG4gICAgICAgICAgICAgIGhvc3RQYXJlbnQgPSBwYXJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChob3N0UGFyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBcIiArXG4gICAgICAgICAgICAgIFwiYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIocm9vdCwgcmV0dXJuRmliZXIsIGRlbGV0ZWRGaWJlcik7XG4gICAgICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZGV0YWNoRmliZXJNdXRhdGlvbihkZWxldGVkRmliZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgcGFyZW50XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBVc2UgYSBzdGF0aWMgZmxhZyB0byBza2lwIHRyZWVzIHRoYXQgZG9uJ3QgaGF2ZSB1bm1vdW50IGVmZmVjdHNcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudC5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgY2hpbGRcbiAgICAgICAgKTtcbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgZGVsZXRlZEZpYmVyXG4gICAgKSB7XG4gICAgICBvbkNvbW1pdFVubW91bnQoZGVsZXRlZEZpYmVyKTsgLy8gVGhlIGNhc2VzIGluIHRoaXMgb3V0ZXIgc3dpdGNoIG1vZGlmeSB0aGUgc3RhY2sgYmVmb3JlIHRoZXkgdHJhdmVyc2VcbiAgICAgIC8vIGludG8gdGhlaXIgc3VidHJlZS4gVGhlcmUgYXJlIHNpbXBsZXIgY2FzZXMgaW4gdGhlIGlubmVyIHN3aXRjaFxuICAgICAgLy8gdGhhdCBkb24ndCBtb2RpZnkgdGhlIHN0YWNrLlxuXG4gICAgICBzd2l0Y2ggKGRlbGV0ZWRGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuXG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICAgIH0gLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2ggdG8gbmV4dCBicmFuY2hcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFRleHQ6IHtcbiAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcmVtb3ZlIHRoZSBuZWFyZXN0IGhvc3QgY2hpbGQuIFNldCB0aGUgaG9zdCBwYXJlbnRcbiAgICAgICAgICAvLyB0byBgbnVsbGAgb24gdGhlIHN0YWNrIHRvIGluZGljYXRlIHRoYXQgbmVzdGVkIGNoaWxkcmVuIGRvbid0XG4gICAgICAgICAgLy8gbmVlZCB0byBiZSByZW1vdmVkLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgICAgICAgICAgdmFyIF9wcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgICAgaG9zdFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhvc3RQYXJlbnQgPSBfcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBfcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcblxuICAgICAgICAgICAgaWYgKGhvc3RQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gTm93IHRoYXQgYWxsIHRoZSBjaGlsZCBlZmZlY3RzIGhhdmUgdW5tb3VudGVkLCB3ZSBjYW4gcmVtb3ZlIHRoZVxuICAgICAgICAgICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG4gICAgICAgICAgICAgIGlmIChob3N0UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDaGlsZEZyb21Db250YWluZXIoaG9zdFBhcmVudCwgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGQoaG9zdFBhcmVudCwgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDoge1xuICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZGVoeWRyYXRlZCBzdXNwZW5zZSBib3VuZGFyeSBhbmQgYWxsIG9mIGl0cyBjb250ZW50LlxuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGhvc3RQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKGhvc3RQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeUZyb21Db250YWluZXIoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjbGVhclN1c3BlbnNlQm91bmRhcnkoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAgICAgdmFyIF9wcmV2SG9zdFBhcmVudDIgPSBob3N0UGFyZW50O1xuICAgICAgICAgICAgdmFyIF9wcmV2SG9zdFBhcmVudElzQ29udGFpbmVyMiA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICAgIGhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBob3N0UGFyZW50ID0gX3ByZXZIb3N0UGFyZW50MjtcbiAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IF9wcmV2SG9zdFBhcmVudElzQ29udGFpbmVyMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgaWYgKCFvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBkZWxldGVkRmliZXIudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IGVmZmVjdC50YWc7XG4gICAgICAgICAgICAgICAgICB2YXIgaW5zdCA9IGVmZmVjdC5pbnN0O1xuICAgICAgICAgICAgICAgICAgdmFyIGRlc3Ryb3kgPSBpbnN0LmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0YWcgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5zdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0YWcgJiBMYXlvdXQpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZGVsZXRlZEZpYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGRlbGV0ZWRGaWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFNjb3BlQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG5cbiAgICAgICAgICBpZiAoZGVsZXRlZEZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBvZmZzY3JlZW4gY29tcG9uZW50IGlzIGhpZGRlbiwgd2UgYWxyZWFkeSB1bm1vdW50ZWQgaXQuIEJlZm9yZVxuICAgICAgICAgICAgLy8gZGVsZXRpbmcgdGhlIGNoaWxkcmVuLCB0cmFjayB0aGF0IGl0J3MgYWxyZWFkeSB1bm1vdW50ZWQgc28gdGhhdCB3ZVxuICAgICAgICAgICAgLy8gZG9uJ3QgYXR0ZW1wdCB0byB1bm1vdW50IHRoZSBlZmZlY3RzIGFnYWluLlxuICAgICAgICAgICAgLy8gVE9ETzogSWYgdGhlIHRyZWUgaXMgaGlkZGVuLCBpbiBtb3N0IGNhc2VzIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNraXBcbiAgICAgICAgICAgIC8vIG92ZXIgdGhlIG5lc3RlZCBjaGlsZHJlbiBlbnRpcmVseS4gQW4gZXhjZXB0aW9uIGlzIHdlIGhhdmVuJ3QgeWV0IGZvdW5kXG4gICAgICAgICAgICAvLyB0aGUgdG9wbW9zdCBob3N0IG5vZGUgdG8gZGVsZXRlLCB3aGljaCB3ZSBhbHJlYWR5IHRyYWNrIG9uIHRoZSBzdGFjay5cbiAgICAgICAgICAgIC8vIEJ1dCB0aGUgb3RoZXIgY2FzZSBpcyBwb3J0YWxzLCB3aGljaCBuZWVkIHRvIGJlIGRldGFjaGVkIG5vIG1hdHRlciBob3dcbiAgICAgICAgICAgIC8vIGRlZXBseSB0aGV5IGFyZSBuZXN0ZWQuIFdlIHNob3VsZCB1c2UgYSBzdWJ0cmVlIGZsYWcgdG8gdHJhY2sgd2hldGhlciBhXG4gICAgICAgICAgICAvLyBzdWJ0cmVlIGluY2x1ZGVzIGEgbmVzdGVkIHBvcnRhbC5cbiAgICAgICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID1cbiAgICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlQ2FsbGJhY2soZmluaXNoZWRXb3JrKSB7fVxuXG4gICAgZnVuY3Rpb24gZ2V0UmV0cnlDYWNoZShmaW5pc2hlZFdvcmspIHtcbiAgICAgIC8vIFRPRE86IFVuaWZ5IHRoZSBpbnRlcmZhY2UgZm9yIHRoZSByZXRyeSBjYWNoZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHN3aXRjaFxuICAgICAgLy8gb24gdGhlIHRhZyBsaWtlIHRoaXMuXG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJldHJ5Q2FjaGU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIF9yZXRyeUNhY2hlID0gaW5zdGFuY2UuX3JldHJ5Q2FjaGU7XG5cbiAgICAgICAgICBpZiAoX3JldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIF9yZXRyeUNhY2hlID0gaW5zdGFuY2UuX3JldHJ5Q2FjaGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9yZXRyeUNhY2hlO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVW5leHBlY3RlZCBTdXNwZW5zZSBoYW5kbGVyIHRhZyAoXCIgK1xuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudGFnICtcbiAgICAgICAgICAgICAgXCIpLiBUaGlzIGlzIGEgXCIgK1xuICAgICAgICAgICAgICBcImJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXRhY2hPZmZzY3JlZW5JbnN0YW5jZShpbnN0YW5jZSkge1xuICAgICAgdmFyIGZpYmVyID0gaW5zdGFuY2UuX2N1cnJlbnQ7XG5cbiAgICAgIGlmIChmaWJlciA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDYWxsaW5nIE9mZnNjcmVlbi5kZXRhY2ggYmVmb3JlIGluc3RhbmNlIGhhbmRsZSBoYXMgYmVlbiBzZXQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgYWxyZWFkeSBkZXRhY2hlZCwgdGhpcyBpcyBhIG5vb3AuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVE9ETzogVGhlcmUgaXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3B0aW1pc2UgdGhpcyBieSBub3QgZW50ZXJpbmcgY29tbWl0IHBoYXNlXG4gICAgICAvLyBhbmQgdW5tb3VudGluZyBlZmZlY3RzIGRpcmVjdGx5LlxuXG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuRGV0YWNoZWQ7XG4gICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRhY2hPZmZzY3JlZW5JbnN0YW5jZShpbnN0YW5jZSkge1xuICAgICAgdmFyIGZpYmVyID0gaW5zdGFuY2UuX2N1cnJlbnQ7XG5cbiAgICAgIGlmIChmaWJlciA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDYWxsaW5nIE9mZnNjcmVlbi5kZXRhY2ggYmVmb3JlIGluc3RhbmNlIGhhbmRsZSBoYXMgYmVlbiBzZXQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZCkgPT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgYWxyZWFkeSBhdHRhY2hlZCwgdGhpcyBpcyBhIG5vb3AuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgaW5zdGFuY2UuX3BlbmRpbmdWaXNpYmlsaXR5ICY9IH5PZmZzY3JlZW5EZXRhY2hlZDtcbiAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIHdha2VhYmxlcykge1xuICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2Ygd2FrZWFibGVzLlxuICAgICAgLy8gRm9yIGVhY2ggd2FrZWFibGUsIGF0dGFjaCBhIGxpc3RlbmVyIHNvIHRoYXQgd2hlbiBpdCByZXNvbHZlcywgUmVhY3RcbiAgICAgIC8vIGF0dGVtcHRzIHRvIHJlLXJlbmRlciB0aGUgYm91bmRhcnkgaW4gdGhlIHByaW1hcnkgKHByZS10aW1lb3V0KSBzdGF0ZS5cbiAgICAgIHZhciByZXRyeUNhY2hlID0gZ2V0UmV0cnlDYWNoZShmaW5pc2hlZFdvcmspO1xuICAgICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIGJvdW5kYXJ5IGZpYmVyIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcblxuICAgICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAgICAgICBpZiAoaW5Qcm9ncmVzc0xhbmVzICE9PSBudWxsICYmIGluUHJvZ3Jlc3NSb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHdvcmsgc3RpbGwsIGFzc29jaWF0ZSB0aGUgb3JpZ2luYWwgdXBkYXRlcnMgd2l0aCBpdC5cbiAgICAgICAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKGluUHJvZ3Jlc3NSb290LCBpblByb2dyZXNzTGFuZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBmaW5pc2hlZCByb290IGFuZCBsYW5lcyB0byBiZSBzZXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2FrZWFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgZ29lcyBmcm9tIHZpc2libGUgdG8gaGlkZGVuLlxuICAgIGZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gICAgICBpblByb2dyZXNzTGFuZXMgPSBjb21taXR0ZWRMYW5lcztcbiAgICAgIGluUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFdvcmssIHJvb3QpO1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG4gICAgICBpblByb2dyZXNzTGFuZXMgPSBudWxsO1xuICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgcGFyZW50RmliZXIsIGxhbmVzKSB7XG4gICAgICAvLyBEZWxldGlvbnMgZWZmZWN0cyBjYW4gYmUgc2NoZWR1bGVkIG9uIGFueSBmaWJlciB0eXBlLiBUaGV5IG5lZWQgdG8gaGFwcGVuXG4gICAgICAvLyBiZWZvcmUgdGhlIGNoaWxkcmVuIGVmZmVjdHMgaGFlIGZpcmVkLlxuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcblxuICAgICAgaWYgKGRlbGV0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjaGlsZFRvRGVsZXRlID0gZGVsZXRpb25zW2ldO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0cyhyb290LCBwYXJlbnRGaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGNoaWxkVG9EZWxldGUsIHBhcmVudEZpYmVyLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgTXV0YXRpb25NYXNrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihjaGlsZCk7XG4gICAgICAgICAgY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihjaGlsZCwgcm9vdCk7XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFdvcmssIHJvb3QsIGxhbmVzKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7IC8vIFRoZSBlZmZlY3QgZmxhZyBzaG91bGQgYmUgY2hlY2tlZCAqYWZ0ZXIqIHdlIHJlZmluZSB0aGUgdHlwZSBvZiBmaWJlcixcbiAgICAgIC8vIGJlY2F1c2UgdGhlIGZpYmVyIHRhZyBpcyBtb3JlIHNwZWNpZmljLiBBbiBleGNlcHRpb24gaXMgYW55IGZsYWcgcmVsYXRlZFxuICAgICAgLy8gdG8gcmVjb25jaWxpYXRpb24sIGJlY2F1c2UgdGhvc2UgY2FuIGJlIHNldCBvbiBhbGwgZmliZXIgdHlwZXMuXG5cbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgICAgSW5zZXJ0aW9uIHwgSGFzRWZmZWN0LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoSW5zZXJ0aW9uIHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9IC8vIExheW91dCBlZmZlY3RzIGFyZSBkZXN0cm95ZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBwaGFzZSBzbyB0aGF0IGFsbFxuICAgICAgICAgICAgLy8gZGVzdHJveSBmdW5jdGlvbnMgZm9yIGFsbCBmaWJlcnMgYXJlIGNhbGxlZCBiZWZvcmUgYW55IGNyZWF0ZSBmdW5jdGlvbnMuXG4gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG5cbiAgICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgICAgICAgTGF5b3V0IHwgSGFzRWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVyblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgICAgICAgTGF5b3V0IHwgSGFzRWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVyblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBDYWxsYmFjayAmJiBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGRlZmVySGlkZGVuQ2FsbGJhY2tzKHVwZGF0ZVF1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG5cbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPOiBDb250ZW50UmVzZXQgZ2V0cyBjbGVhcmVkIGJ5IHRoZSBjaGlsZHJlbiBkdXJpbmcgdGhlIGNvbW1pdFxuICAgICAgICAgICAgLy8gcGhhc2UuIFRoaXMgaXMgYSByZWZhY3RvciBoYXphcmQgYmVjYXVzZSBpdCBtZWFucyB3ZSBtdXN0IHJlYWRcbiAgICAgICAgICAgIC8vIGZsYWdzIHRoZSBmbGFncyBhZnRlciBgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzYCBoYXMgYWxyZWFkeSBydW47XG4gICAgICAgICAgICAvLyB0aGUgb3JkZXIgbWF0dGVycy4gV2Ugc2hvdWxkIHJlZmFjdG9yIHNvIHRoYXQgQ29udGVudFJlc2V0IGRvZXMgbm90XG4gICAgICAgICAgICAvLyByZWx5IG9uIG11dGF0aW5nIHRoZSBmbGFnIGR1cmluZyBjb21taXQuIExpa2UgYnkgc2V0dGluZyBhIGZsYWdcbiAgICAgICAgICAgIC8vIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIGluc3RlYWQuXG4gICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNldFRleHRDb250ZW50KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoX2luc3RhbmNlMiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gQ29tbWl0IHRoZSB3b3JrIHByZXBhcmVkIGVhcmxpZXIuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgICAgICAgICB2YXIgb2xkUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1Byb3BzO1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgICAgICAgIHZhciBfdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMixcbiAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZVBheWxvYWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG9sZFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RUZXh0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgdmFyIG5ld1RleHQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1RleHQ7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7IC8vIFRPRE86IFdlIHNob3VsZCBtYXJrIGEgZmxhZyBvbiB0aGUgU3VzcGVuc2UgZmliZXIgaXRzZWxmLCByYXRoZXIgdGhhblxuICAgICAgICAgIC8vIHJlbHlpbmcgb24gdGhlIE9mZnNjcmVlbiBmaWJlciBoYXZpbmcgYSBmbGFnIGFsc28gYmVpbmcgbWFya2VkLiBUaGVcbiAgICAgICAgICAvLyByZWFzb24gaXMgdGhhdCB0aGlzIG9mZnNjcmVlbiBmaWJlciBtaWdodCBub3QgYmUgcGFydCBvZiB0aGUgd29yay1pbi1cbiAgICAgICAgICAvLyBwcm9ncmVzcyB0cmVlISBJdCBjb3VsZCBoYXZlIGJlZW4gcmV1c2VkIGZyb20gYSBwcmV2aW91cyByZW5kZXIuIFRoaXNcbiAgICAgICAgICAvLyBkb2Vzbid0IGxlYWQgdG8gaW5jb3JyZWN0IGJlaGF2aW9yIGJlY2F1c2Ugd2UgZG9uJ3QgcmVseSBvbiB0aGUgZmxhZ1xuICAgICAgICAgIC8vIGNoZWNrIGFsb25lOyB3ZSBhbHNvIGNvbXBhcmUgdGhlIHN0YXRlcyBleHBsaWNpdGx5IGJlbG93LiBCdXQgZm9yXG4gICAgICAgICAgLy8gbW9kZWxpbmcgcHVycG9zZXMsIHdlIF9zaG91bGRfIGJlIGFibGUgdG8gcmVseSBvbiB0aGUgZmxhZyBjaGVjayBhbG9uZS5cbiAgICAgICAgICAvLyBTbyB0aGlzIGlzIGEgYml0IGZyYWdpbGUuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBBbHNvLCBhbGwgdGhpcyBsb2dpYyBjb3VsZC9zaG91bGQgbW92ZSB0byB0aGUgcGFzc2l2ZSBwaGFzZSBzbyBpdFxuICAgICAgICAgIC8vIGRvZXNuJ3QgYmxvY2sgcGFpbnQuXG5cbiAgICAgICAgICB2YXIgb2Zmc2NyZWVuRmliZXIgPSBmaW5pc2hlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgICBpZiAob2Zmc2NyZWVuRmliZXIuZmxhZ3MgJiBWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAvLyBUaHJvdHRsZSB0aGUgYXBwZWFyYW5jZSBhbmQgZGlzYXBwZWFyYW5jZSBvZiBTdXNwZW5zZSBmYWxsYmFja3MuXG4gICAgICAgICAgICB2YXIgaXNTaG93aW5nRmFsbGJhY2sgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIHZhciB3YXNTaG93aW5nRmFsbGJhY2sgPVxuICAgICAgICAgICAgICBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoaXNTaG93aW5nRmFsbGJhY2sgJiYgIXdhc1Nob3dpbmdGYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIC8vIE9sZCBiZWhhdmlvci4gT25seSBtYXJrIHdoZW4gYSBmYWxsYmFjayBhcHBlYXJzLCBub3Qgd2hlblxuICAgICAgICAgICAgICAgIC8vIGl0IGRpc2FwcGVhcnMuXG4gICAgICAgICAgICAgICAgbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdFN1c3BlbnNlQ2FsbGJhY2soZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmV0cnlRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKHJldHJ5UXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIHJldHJ5UXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IG5ld1N0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciB3YXNIaWRkZW4gPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgICAvLyBCZWZvcmUgY29tbWl0dGluZyB0aGUgY2hpbGRyZW4sIHRyYWNrIG9uIHRoZSBzdGFjayB3aGV0aGVyIHRoaXNcbiAgICAgICAgICAgIC8vIG9mZnNjcmVlbiBzdWJ0cmVlIHdhcyBhbHJlYWR5IGhpZGRlbiwgc28gdGhhdCB3ZSBkb24ndCB1bm1vdW50IHRoZVxuICAgICAgICAgICAgLy8gZWZmZWN0cyBhZ2Fpbi5cbiAgICAgICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgaXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID1cbiAgICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHwgd2FzSGlkZGVuO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHZhciBvZmZzY3JlZW5JbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFRPRE86IEFkZCBleHBsaWNpdCBlZmZlY3QgZmxhZyB0byBzZXQgX2N1cnJlbnQuXG5cbiAgICAgICAgICBvZmZzY3JlZW5JbnN0YW5jZS5fY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gT2Zmc2NyZWVuIHN0b3JlcyBwZW5kaW5nIGNoYW5nZXMgdG8gdmlzaWJpbGl0eSBpbiBgX3BlbmRpbmdWaXNpYmlsaXR5YC4gVGhpcyBpc1xuICAgICAgICAgIC8vIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgYGF0dGFjaGAgYW5kIGBkZXRhY2hgIGNhbGxzLlxuXG4gICAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlbkRldGFjaGVkO1xuICAgICAgICAgIG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5IHw9XG4gICAgICAgICAgICBvZmZzY3JlZW5JbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZDtcblxuICAgICAgICAgIGlmIChmbGFncyAmIFZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgIC8vIFRyYWNrIHRoZSBjdXJyZW50IHN0YXRlIG9uIHRoZSBPZmZzY3JlZW4gaW5zdGFuY2Ugc28gd2UgY2FuXG4gICAgICAgICAgICAvLyByZWFkIGl0IGR1cmluZyBhbiBldmVudFxuICAgICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5ICY9IH5PZmZzY3JlZW5WaXNpYmxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuX3Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuVmlzaWJsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIHZhciBpc1VwZGF0ZSA9IGN1cnJlbnQgIT09IG51bGw7XG4gICAgICAgICAgICAgIHZhciB3YXNIaWRkZW5CeUFuY2VzdG9yT2Zmc2NyZWVuID1cbiAgICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjsgLy8gT25seSB0cmlnZ2VyIGRpc2FwcGVyIGxheW91dCBlZmZlY3RzIGlmOlxuICAgICAgICAgICAgICAvLyAgIC0gVGhpcyBpcyBhbiB1cGRhdGUsIG5vdCBmaXJzdCBtb3VudC5cbiAgICAgICAgICAgICAgLy8gICAtIFRoaXMgT2Zmc2NyZWVuIHdhcyBub3QgaGlkZGVuIGJlZm9yZS5cbiAgICAgICAgICAgICAgLy8gICAtIEFuY2VzdG9yIE9mZnNjcmVlbiB3YXMgbm90IGhpZGRlbiBpbiBwcmV2aW91cyBjb21taXQuXG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBkYXRlICYmICF3YXNIaWRkZW4gJiYgIXdhc0hpZGRlbkJ5QW5jZXN0b3JPZmZzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoKGZpbmlzaGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIERpc2FwcGVhciB0aGUgbGF5b3V0IGVmZmVjdHMgb2YgYWxsIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gT2Zmc2NyZWVuIHdpdGggbWFudWFsIG1vZGUgbWFuYWdlcyB2aXNpYmlsaXR5IG1hbnVhbGx5LlxuXG4gICAgICAgICAgICBpZiAoIWlzT2Zmc2NyZWVuTWFudWFsKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBuZWVkcyB0byBydW4gd2hlbmV2ZXIgdGhlcmUncyBhbiBpbnNlcnRpb24gb3IgdXBkYXRlXG4gICAgICAgICAgICAgIC8vIGluc2lkZSBhIGhpZGRlbiBPZmZzY3JlZW4gdHJlZS5cbiAgICAgICAgICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBUT0RPOiBNb3ZlIHRvIHBhc3NpdmUgcGhhc2VcblxuICAgICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNjcmVlblF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICBpZiAob2Zmc2NyZWVuUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZXRyeVF1ZXVlID0gb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZTtcblxuICAgICAgICAgICAgICBpZiAoX3JldHJ5UXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW5RdWV1ZS5yZXRyeVF1ZXVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgX3JldHJ5UXVldWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBfcmV0cnlRdWV1ZTIgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgIGlmIChfcmV0cnlRdWV1ZTIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIF9yZXRyeVF1ZXVlMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTY29wZUNvbXBvbmVudDoge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICAgICAgLy8gUGxhY2VtZW50IGVmZmVjdHMgKGluc2VydGlvbnMsIHJlb3JkZXJzKSBjYW4gYmUgc2NoZWR1bGVkIG9uIGFueSBmaWJlclxuICAgICAgLy8gdHlwZS4gVGhleSBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdGhlIGNoaWxkcmVuIGVmZmVjdHMgaGF2ZSBmaXJlZCwgYnV0XG4gICAgICAvLyBiZWZvcmUgdGhlIGVmZmVjdHMgb24gdGhpcyBmaWJlciBoYXZlIGZpcmVkLlxuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuXG4gICAgICBpZiAoZmxhZ3MgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfSAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAgICAgLy8gYW5kIGlzTW91bnRlZCBpcyBkZXByZWNhdGVkIGFueXdheSBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBraWxsIHRoaXMuXG5cbiAgICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICY9IH5QbGFjZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChmbGFncyAmIEh5ZHJhdGluZykge1xuICAgICAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gfkh5ZHJhdGluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgcm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcbiAgICAgIGluUHJvZ3Jlc3NMYW5lcyA9IGNvbW1pdHRlZExhbmVzO1xuICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihyb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmspO1xuICAgICAgaW5Qcm9ncmVzc0xhbmVzID0gbnVsbDtcbiAgICAgIGluUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhyb290LCBwYXJlbnRGaWJlciwgbGFuZXMpIHtcbiAgICAgIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgTGF5b3V0TWFzaykge1xuICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoY2hpbGQpO1xuICAgICAgICAgIHZhciBjdXJyZW50ID0gY2hpbGQuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIocm9vdCwgY3VycmVudCwgY2hpbGQpO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRDdXJyZW50RmliZXIocHJldkRlYnVnRmliZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgTGF5b3V0U3RhdGljXG4gICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgICAgTGF5b3V0LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgIExheW91dCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgLy8gVE9ETyAoT2Zmc2NyZWVuKSBDaGVjazogZmxhZ3MgJiBSZWZTdGF0aWNcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBUT0RPIChPZmZzY3JlZW4pIENoZWNrOiBmbGFncyAmIFJlZlN0YXRpY1xuICAgICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgUmVmU3RhdGljXG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgdmFyIGlzSGlkZGVuID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAoaXNIaWRkZW4pO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgICAgIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgKFJlZlN0YXRpYyB8IExheW91dFN0YXRpYylcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhjaGlsZCk7XG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBjdXJyZW50LFxuICAgICAgZmluaXNoZWRXb3JrLCAvLyBUaGlzIGZ1bmN0aW9uIHZpc2l0cyBib3RoIG5ld2x5IGZpbmlzaGVkIHdvcmsgYW5kIG5vZGVzIHRoYXQgd2VyZSByZS11c2VkXG4gICAgICAvLyBmcm9tIGEgcHJldmlvdXNseSBjb21taXR0ZWQgdHJlZS4gV2UgY2Fubm90IGNoZWNrIG5vbi1zdGF0aWMgZmxhZ3MgaWYgdGhlXG4gICAgICAvLyBub2RlIHdhcyByZXVzZWQuXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICAvLyBUdXJuIG9uIGxheW91dCBlZmZlY3RzIGluIGEgdHJlZSB0aGF0IHByZXZpb3VzbHkgZGlzYXBwZWFyZWQuXG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG5cbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTsgLy8gVE9ETzogQ2hlY2sgZmxhZ3MgJiBMYXlvdXRTdGF0aWNcblxuICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7IC8vIFRPRE86IENoZWNrIGZvciBMYXlvdXRTdGF0aWMgZmxhZ1xuXG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gQ29tbWl0IGFueSBjYWxsYmFja3MgdGhhdCB3b3VsZCBoYXZlIGZpcmVkIHdoaWxlIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAvLyB3YXMgaGlkZGVuLlxuXG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21taXRIaWRkZW5DYWxsYmFja3ModXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgICB9IC8vIElmIHRoaXMgaXMgbmV3bHkgZmluaXNoZWQgd29yaywgY2hlY2sgZm9yIHNldFN0YXRlIGNhbGxiYWNrc1xuXG4gICAgICAgICAgaWYgKGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgZmxhZ3MgJiBDYWxsYmFjaykge1xuICAgICAgICAgICAgY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9IC8vIFRPRE86IENoZWNrIGZsYWdzICYgUmVmU3RhdGljXG5cbiAgICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBVbmxpa2UgY29tbWl0TGF5b3V0RWZmZWN0c09uRmliZXIsIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIEhvc3RSb290XG4gICAgICAgIC8vIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBvbmx5IHZpc2l0cyBub2RlcyB0aGF0IGFyZSBpbnNpZGUgYW5cbiAgICAgICAgLy8gT2Zmc2NyZWVuIGZpYmVyLlxuICAgICAgICAvLyBjYXNlIEhvc3RSb290OiB7XG4gICAgICAgIC8vICAuLi5cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7IC8vIFJlbmRlcmVycyBtYXkgc2NoZWR1bGUgd29yayB0byBiZSBkb25lIGFmdGVyIGhvc3QgY29tcG9uZW50cyBhcmUgbW91bnRlZFxuICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAgIC8vIGFrYSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQvYWx0ZXJuYXRlLlxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgY3VycmVudCA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgZmxhZ3MgJiBVcGRhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbW1pdEhvc3RDb21wb25lbnRNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH0gLy8gVE9ETzogQ2hlY2sgZmxhZ3MgJiBSZWZcblxuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTsgLy8gVE9ETzogRmlndXJlIG91dCBob3cgUHJvZmlsZXIgdXBkYXRlcyBzaG91bGQgd29yayB3aXRoIE9mZnNjcmVlblxuXG4gICAgICAgICAgaWYgKGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIGNvbW1pdFByb2ZpbGVyVXBkYXRlKGZpbmlzaGVkV29yaywgY3VycmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApOyAvLyBUT0RPOiBGaWd1cmUgb3V0IGhvdyBTdXNwZW5zZSBoeWRyYXRpb24gY2FsbGJhY2tzIHNob3VsZCB3b3JrXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIG9mZnNjcmVlblN0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIGlzSGlkZGVuID0gb2Zmc2NyZWVuU3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAoaXNIaWRkZW4pO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSAvLyBUT0RPOiBDaGVjayBmbGFncyAmIFJlZlxuXG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB2aXNpdHMgYm90aCBuZXdseSBmaW5pc2hlZCB3b3JrIGFuZCBub2RlcyB0aGF0IHdlcmUgcmUtdXNlZFxuICAgICAgLy8gZnJvbSBhIHByZXZpb3VzbHkgY29tbWl0dGVkIHRyZWUuIFdlIGNhbm5vdCBjaGVjayBub24tc3RhdGljIGZsYWdzIGlmIHRoZVxuICAgICAgLy8gbm9kZSB3YXMgcmV1c2VkLlxuICAgICAgdmFyIGNoaWxkU2hvdWxkSW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9XG4gICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIExheW91dE1hc2spICE9PSBOb0ZsYWdzJDE7IC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgKFJlZlN0YXRpYyB8IExheW91dFN0YXRpYylcblxuICAgICAgdmFyIHByZXZEZWJ1Z0ZpYmVyID0gZ2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gY2hpbGQuYWx0ZXJuYXRlO1xuICAgICAgICByZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgY2hpbGRTaG91bGRJbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICk7XG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIGhvb2tGbGFncykge1xuICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICBzdGFydFBhc3NpdmVFZmZlY3RUaW1lcigpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZWNvcmRQYXNzaXZlRWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICApIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgIHJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICApIHtcbiAgICAgIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgUGFzc2l2ZU1hc2spIHtcbiAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGNoaWxkKTtcbiAgICAgICAgICBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKHJvb3QsIGNoaWxkKTtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICkge1xuICAgICAgLy8gV2hlbiB1cGRhdGluZyB0aGlzIGZ1bmN0aW9uLCBhbHNvIHVwZGF0ZSByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cywgd2hpY2ggZG9lc1xuICAgICAgLy8gbW9zdCBvZiB0aGUgc2FtZSB0aGluZ3Mgd2hlbiBhbiBvZmZzY3JlZW4gdHJlZSBnb2VzIGZyb20gaGlkZGVuIC0+IHZpc2libGUsXG4gICAgICAvLyBvciB3aGVuIHRvZ2dsaW5nIGVmZmVjdHMgaW5zaWRlIGEgaGlkZGVuIHRyZWUuXG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG5cbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGlmIChmbGFncyAmIFBhc3NpdmUkMSkge1xuICAgICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBQYXNzaXZlIHwgSGFzRWZmZWN0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb25cbiAgICAgICAgICB2YXIgX2luc3RhbmNlMyA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgaWYgKF9pbnN0YW5jZTMuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGNvbm5lY3RlZC4gVXBkYXRlIHRoZW0uXG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKTtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTGVnYWN5IE1vZGU6IEZpcmUgdGhlIGVmZmVjdHMgZXZlbiBpZiB0aGUgdHJlZSBpcyBoaWRkZW4uXG4gICAgICAgICAgICAgICAgX2luc3RhbmNlMy5fdmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZDtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVHJlZSBpcyB2aXNpYmxlXG4gICAgICAgICAgICBpZiAoX2luc3RhbmNlMy5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgY29ubmVjdGVkLiBVcGRhdGUgdGhlbS5cbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBkaXNjb25uZWN0ZWQuIFJlY29ubmVjdCB0aGVtLCB3aGlsZSBhbHNvXG4gICAgICAgICAgICAgIC8vIGZpcmluZyBlZmZlY3RzIGluc2lkZSBuZXdseSBtb3VudGVkIHRyZWVzLiBUaGlzIGFsc28gYXBwbGllcyB0b1xuICAgICAgICAgICAgICAvLyB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgICAgICAgICAgIF9pbnN0YW5jZTMuX3Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQ7XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIENhY2hlQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuICAgICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGNoaWxkKTtcbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBzZXRDdXJyZW50RmliZXIocHJldkRlYnVnRmliZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucywgLy8gVGhpcyBmdW5jdGlvbiB2aXNpdHMgYm90aCBuZXdseSBmaW5pc2hlZCB3b3JrIGFuZCBub2RlcyB0aGF0IHdlcmUgcmUtdXNlZFxuICAgICAgLy8gZnJvbSBhIHByZXZpb3VzbHkgY29tbWl0dGVkIHRyZWUuIFdlIGNhbm5vdCBjaGVjayBub24tc3RhdGljIGZsYWdzIGlmIHRoZVxuICAgICAgLy8gbm9kZSB3YXMgcmV1c2VkLlxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgKTsgLy8gVE9ETzogQ2hlY2sgZm9yIFBhc3NpdmVTdGF0aWMgZmxhZ1xuXG4gICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBQYXNzaXZlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBVbmxpa2UgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlciwgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgSG9zdFJvb3RcbiAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgdmlzaXRzIG5vZGVzIHRoYXQgYXJlIGluc2lkZSBhblxuICAgICAgICAvLyBPZmZzY3JlZW4gZmliZXIuXG4gICAgICAgIC8vIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAgICAgLy8gIC4uLlxuICAgICAgICAvLyB9XG5cbiAgICAgICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6IHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZTQgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIGlmIChfaW5zdGFuY2U0Ll92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBjb25uZWN0ZWQuIFVwZGF0ZSB0aGVtLlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBMZWdhY3kgTW9kZTogRmlyZSB0aGUgZWZmZWN0cyBldmVuIGlmIHRoZSB0cmVlIGlzIGhpZGRlbi5cbiAgICAgICAgICAgICAgICBfaW5zdGFuY2U0Ll92aXNpYmlsaXR5IHw9IE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkO1xuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVHJlZSBpcyB2aXNpYmxlXG4gICAgICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhbHJlYWR5IGluc2lkZSBhIHJlY29ubmVjdGluZyB0cmVlLCBpdCBkb2Vzbid0IG1hdHRlclxuICAgICAgICAgICAgLy8gd2hldGhlciB0aGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGNvbm5lY3RlZC4gSW4gZWl0aGVyIGNhc2UsIHdlJ2xsXG4gICAgICAgICAgICAvLyBjb250aW51ZSB0cmF2ZXJzaW5nIHRoZSB0cmVlIGFuZCBmaXJpbmcgYWxsIHRoZSBlZmZlY3RzLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFdlIGRvIG5lZWQgdG8gc2V0IHRoZSBcImNvbm5lY3RlZFwiIGZsYWcgb24gdGhlIGluc3RhbmNlLCB0aG91Z2guXG4gICAgICAgICAgICBfaW5zdGFuY2U0Ll92aXNpYmlsaXR5IHw9IE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmluaXNoZWRXb3JrKTtcbiAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihmaW5pc2hlZFdvcmspO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9IC8vIElmIHdlJ3JlIGluc2lkZSBhIGJyYW5kIG5ldyB0cmVlLCBvciBhIHRyZWUgdGhhdCB3YXMgYWxyZWFkeSB2aXNpYmxlLCB0aGVuIHdlXG4gICAgLy8gc2hvdWxkIG9ubHkgc3VzcGVuZCBob3N0IGNvbXBvbmVudHMgdGhhdCBoYXZlIGEgU2hvdWxkU3VzcGVuZENvbW1pdCBmbGFnLlxuICAgIC8vIENvbXBvbmVudHMgd2l0aG91dCBpdCBoYXZlbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY29tbWl0LCBzbyB3ZSBjYW4gc2tpcFxuICAgIC8vIG92ZXIgdGhvc2UuXG4gICAgLy9cbiAgICAvLyBXaGVuIHdlIGVudGVyIGEgdHJlZSB0aGF0IGlzIGJlaW5nIHJldmVhbGVkIChnb2luZyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlKSxcbiAgICAvLyB3ZSBuZWVkIHRvIHN1c3BlbmQgX2FueV8gY29tcG9uZW50IHRoYXQgX21heV8gc3VzcGVuZC4gRXZlbiBpZiB0aGV5J3JlXG4gICAgLy8gYWxyZWFkeSBpbiB0aGUgXCJjdXJyZW50XCIgdHJlZS4gQmVjYXVzZSB0aGVpciB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLCB0aGVcbiAgICAvLyBicm93c2VyIG1heSBub3QgaGF2ZSBwcmVyZW5kZXJlZCB0aGVtIHlldC4gU28gd2UgY2hlY2sgdGhlIE1heVN1c3BlbmRDb21taXRcbiAgICAvLyBmbGFnIGluc3RlYWQuXG5cbiAgICB2YXIgc3VzcGVuc2V5Q29tbWl0RmxhZyA9IFNob3VsZFN1c3BlbmRDb21taXQ7XG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaW5pc2hlZFdvcmspIHtcbiAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKGZpbmlzaGVkV29yayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KHBhcmVudEZpYmVyKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZykge1xuICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihjaGlsZCk7XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmliZXIpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZToge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG5cbiAgICAgICAgICBpZiAoZmliZXIuZmxhZ3MgJiBzdXNwZW5zZXlDb21taXRGbGFnKSB7XG4gICAgICAgICAgICBpZiAoZmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzdXNwZW5kUmVzb3VyY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDoge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IGZpYmVyLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAoaXNIaWRkZW4pO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgICAgICB2YXIgd2FzSGlkZGVuID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICAgIGlmICh3YXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyB0cmVlIGlzIGJlaW5nIHJldmVhbGVkLiBWaXNpdCBhbGwgbmV3bHkgdmlzaWJsZSBzdXNwZW5zZXlcbiAgICAgICAgICAgICAgLy8gaW5zdGFuY2VzLCBldmVuIGlmIHRoZXkncmUgaW4gdGhlIGN1cnJlbnQgdHJlZS5cbiAgICAgICAgICAgICAgdmFyIHByZXZGbGFncyA9IHN1c3BlbnNleUNvbW1pdEZsYWc7XG4gICAgICAgICAgICAgIHN1c3BlbnNleUNvbW1pdEZsYWcgPSBNYXlTdXNwZW5kQ29tbWl0O1xuICAgICAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgICAgICBzdXNwZW5zZXlDb21taXRGbGFnID0gcHJldkZsYWdzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpIHtcbiAgICAgIC8vIEEgZmliZXIgd2FzIGRlbGV0ZWQgZnJvbSB0aGlzIHBhcmVudCBmaWJlciwgYnV0IGl0J3Mgc3RpbGwgcGFydCBvZiB0aGVcbiAgICAgIC8vIHByZXZpb3VzIChhbHRlcm5hdGUpIHBhcmVudCBmaWJlcidzIGxpc3Qgb2YgY2hpbGRyZW4uIEJlY2F1c2UgY2hpbGRyZW5cbiAgICAgIC8vIGFyZSBhIGxpbmtlZCBsaXN0LCBhbiBlYXJsaWVyIHNpYmxpbmcgdGhhdCdzIHN0aWxsIGFsaXZlIHdpbGwgYmVcbiAgICAgIC8vIGNvbm5lY3RlZCB0byB0aGUgZGVsZXRlZCBmaWJlciB2aWEgaXRzIGBhbHRlcm5hdGVgOlxuICAgICAgLy9cbiAgICAgIC8vICAgbGl2ZSBmaWJlciAtLWFsdGVybmF0ZS0tPiBwcmV2aW91cyBsaXZlIGZpYmVyIC0tc2libGluZy0tPiBkZWxldGVkXG4gICAgICAvLyAgIGZpYmVyXG4gICAgICAvL1xuICAgICAgLy8gV2UgY2FuJ3QgZGlzY29ubmVjdCBgYWx0ZXJuYXRlYCBvbiBub2RlcyB0aGF0IGhhdmVuJ3QgYmVlbiBkZWxldGVkIHlldCxcbiAgICAgIC8vIGJ1dCB3ZSBjYW4gZGlzY29ubmVjdCB0aGUgYHNpYmxpbmdgIGFuZCBgY2hpbGRgIHBvaW50ZXJzLlxuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZXRhY2hlZENoaWxkID0gcHJldmlvdXNGaWJlci5jaGlsZDtcblxuICAgICAgICBpZiAoZGV0YWNoZWRDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHByZXZpb3VzRmliZXIuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICB2YXIgZGV0YWNoZWRTaWJsaW5nID0gZGV0YWNoZWRDaGlsZC5zaWJsaW5nOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgICAgZGV0YWNoZWRDaGlsZC5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICAgIGRldGFjaGVkQ2hpbGQgPSBkZXRhY2hlZFNpYmxpbmc7XG4gICAgICAgICAgfSB3aGlsZSAoZGV0YWNoZWRDaGlsZCAhPT0gbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGhvb2tGbGFnc1xuICAgICkge1xuICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICBzdGFydFBhc3NpdmVFZmZlY3RUaW1lcigpO1xuICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICk7XG4gICAgICAgIHJlY29yZFBhc3NpdmVFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgICAgIC8vIERlbGV0aW9ucyBlZmZlY3RzIGNhbiBiZSBzY2hlZHVsZWQgb24gYW55IGZpYmVyIHR5cGUuIFRoZXkgbmVlZCB0byBoYXBwZW5cbiAgICAgIC8vIGJlZm9yZSB0aGUgY2hpbGRyZW4gZWZmZWN0cyBoYXZlIGZpcmVkLlxuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcblxuICAgICAgaWYgKChwYXJlbnRGaWJlci5mbGFncyAmIENoaWxkRGVsZXRpb24pICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgaWYgKGRlbGV0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTsgLy8gVE9ETzogQ29udmVydCB0aGlzIHRvIHVzZSByZWN1cnNpb25cblxuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgICAgICBjaGlsZFRvRGVsZXRlLFxuICAgICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBTcGxpdCBQYXNzaXZlTWFzayBpbnRvIHNlcGFyYXRlIG1hc2tzIGZvciBtb3VudCBhbmQgdW5tb3VudD9cblxuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihjaGlsZCk7XG4gICAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGNoaWxkKTtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIoZmluaXNoZWRXb3JrKSB7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgUGFzc2l2ZSQxKSB7XG4gICAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgIFBhc3NpdmUgfCBIYXNFZmZlY3RcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzSGlkZGVuICYmXG4gICAgICAgICAgICBpbnN0YW5jZS5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkICYmIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgZG9uJ3QgdW5tb3VudCB3aGVuIGEgdHJlZSBzdXNwZW5kcy4gSW5cbiAgICAgICAgICAgIC8vIHRoZSBmdXR1cmUgd2UgbWF5IGNoYW5nZSB0aGlzIHRvIHVubW91bnQgYWZ0ZXIgYSBkZWxheS5cbiAgICAgICAgICAgIChmaW5pc2hlZFdvcmsucmV0dXJuID09PSBudWxsIHx8XG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4udGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgY29ubmVjdGVkLiBEaXNjb25uZWN0IHRoZW0uXG4gICAgICAgICAgICAvLyBUT0RPOiBBZGQgb3B0aW9uIG9yIGhldXJpc3RpYyB0byBkZWxheSBiZWZvcmUgZGlzY29ubmVjdGluZyB0aGVcbiAgICAgICAgICAgIC8vIGVmZmVjdHMuIFRoZW4gaWYgdGhlIHRyZWUgcmVhcHBlYXJzIGJlZm9yZSB0aGUgZGVsYXkgaGFzIGVsYXBzZWQsIHdlXG4gICAgICAgICAgICAvLyBjYW4gc2tpcCB0b2dnbGluZyB0aGUgZWZmZWN0cyBlbnRpcmVseS5cbiAgICAgICAgICAgIGluc3RhbmNlLl92aXNpYmlsaXR5ICY9IH5PZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZDtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgICAgIC8vIERlbGV0aW9ucyBlZmZlY3RzIGNhbiBiZSBzY2hlZHVsZWQgb24gYW55IGZpYmVyIHR5cGUuIFRoZXkgbmVlZCB0byBoYXBwZW5cbiAgICAgIC8vIGJlZm9yZSB0aGUgY2hpbGRyZW4gZWZmZWN0cyBoYXZlIGZpcmVkLlxuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcblxuICAgICAgaWYgKChwYXJlbnRGaWJlci5mbGFncyAmIENoaWxkRGVsZXRpb24pICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgaWYgKGRlbGV0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTsgLy8gVE9ETzogQ29udmVydCB0aGlzIHRvIHVzZSByZWN1cnNpb25cblxuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgICAgICBjaGlsZFRvRGVsZXRlLFxuICAgICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBDaGVjayBQYXNzaXZlU3RhdGljIGZsYWdcblxuICAgICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoY2hpbGQpO1xuICAgICAgICBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChjaGlsZCk7XG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgIC8vIFRPRE86IENoZWNrIFBhc3NpdmVTdGF0aWMgZmxhZ1xuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgUGFzc2l2ZVxuICAgICAgICAgICk7IC8vIFdoZW4gZGlzY29ubmVjdGluZyBwYXNzaXZlIGVmZmVjdHMsIHdlIGZpcmUgdGhlIGVmZmVjdHMgaW4gdGhlIHNhbWVcbiAgICAgICAgICAvLyBvcmRlciBhcyBkdXJpbmcgYSBkZWxldGlvbmc6IHBhcmVudCBiZWZvcmUgY2hpbGRcblxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OiB7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChpbnN0YW5jZS5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5fdmlzaWJpbGl0eSAmPSB+T2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQ7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihcbiAgICAgIGRlbGV0ZWRTdWJ0cmVlUm9vdCxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICApIHtcbiAgICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7IC8vIERlbGV0aW9uIGVmZmVjdHMgZmlyZSBpbiBwYXJlbnQgLT4gY2hpbGQgb3JkZXJcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgZmliZXIgaGFzIGEgUGFzc2l2ZVN0YXRpYyBmbGFnXG5cbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRJbnNpZGVEZWxldGVkVHJlZU9uRmliZXIoXG4gICAgICAgICAgZmliZXIsXG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICApO1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDsgLy8gVE9ETzogT25seSB0cmF2ZXJzZSBzdWJ0cmVlIGlmIGl0IGhhcyBhIFBhc3NpdmVTdGF0aWMgZmxhZy5cblxuICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBjaGlsZC5yZXR1cm4gPSBmaWJlcjtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9jb21wbGV0ZShcbiAgICAgICAgICAgIGRlbGV0ZWRTdWJ0cmVlUm9vdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2NvbXBsZXRlKFxuICAgICAgZGVsZXRlZFN1YnRyZWVSb290XG4gICAgKSB7XG4gICAgICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgICAgICB2YXIgc2libGluZyA9IGZpYmVyLnNpYmxpbmc7XG4gICAgICAgIHZhciByZXR1cm5GaWJlciA9IGZpYmVyLnJldHVybjsgLy8gUmVjdXJzaXZlbHkgdHJhdmVyc2UgdGhlIGVudGlyZSBkZWxldGVkIHRyZWUgYW5kIGNsZWFuIHVwIGZpYmVyIGZpZWxkcy5cbiAgICAgICAgLy8gVGhpcyBpcyBtb3JlIGFnZ3Jlc3NpdmUgdGhhbiBpZGVhbCwgYW5kIHRoZSBsb25nIHRlcm0gZ29hbCBpcyB0byBvbmx5XG4gICAgICAgIC8vIGhhdmUgdG8gZGV0YWNoIHRoZSBkZWxldGVkIHRyZWUgYXQgdGhlIHJvb3QuXG5cbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpO1xuXG4gICAgICAgIGlmIChmaWJlciA9PT0gZGVsZXRlZFN1YnRyZWVSb290KSB7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHRFZmZlY3QgPSByZXR1cm5GaWJlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEluc2lkZURlbGV0ZWRUcmVlT25GaWJlcihcbiAgICAgIGN1cnJlbnQsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgUGFzc2l2ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VMYXlvdXRFZmZlY3RNb3VudEluREVWKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtY2hlY2sgU3RyaWN0RWZmZWN0c01vZGUgaGVyZS5cbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiB0aGF0IGNoZWNrIGhhcyBhbHJlYWR5IHBhc3NlZC5cbiAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaWJlcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52b2tlUGFzc2l2ZUVmZmVjdE1vdW50SW5ERVYoZmliZXIpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZS1jaGVjayBTdHJpY3RFZmZlY3RzTW9kZSBoZXJlLlxuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoYXQgY2hlY2sgaGFzIGFscmVhZHkgcGFzc2VkLlxuICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChQYXNzaXZlIHwgSGFzRWZmZWN0LCBmaWJlcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUxheW91dEVmZmVjdFVubW91bnRJbkRFVihmaWJlcikge1xuICAgICAge1xuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWNoZWNrIFN0cmljdEVmZmVjdHNNb2RlIGhlcmUuXG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgdGhhdCBjaGVjayBoYXMgYWxyZWFkeSBwYXNzZWQuXG4gICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgICAgTGF5b3V0IHwgSGFzRWZmZWN0LFxuICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgIGZpYmVyLnJldHVyblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoZmliZXIsIGZpYmVyLnJldHVybiwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VQYXNzaXZlRWZmZWN0VW5tb3VudEluREVWKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtY2hlY2sgU3RyaWN0RWZmZWN0c01vZGUgaGVyZS5cbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiB0aGF0IGNoZWNrIGhhcyBhbHJlYWR5IHBhc3NlZC5cbiAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgICAgICBQYXNzaXZlIHwgSGFzRWZmZWN0LFxuICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgIGZpYmVyLnJldHVyblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLmZvcikge1xuICAgICAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci5jb21wb25lbnRcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzXCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3Iucm9sZVwiKTtcbiAgICAgIHN5bWJvbEZvcihcInNlbGVjdG9yLnRlc3RfaWRcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci50ZXh0XCIpO1xuICAgIH1cblxuICAgIHZhciBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7XG4gICAgZnVuY3Rpb24gaXNMZWdhY3lBY3RFbnZpcm9ubWVudChmaWJlcikge1xuICAgICAge1xuICAgICAgICAvLyBMZWdhY3kgbW9kZS4gV2UgcHJlc2VydmUgdGhlIGJlaGF2aW9yIG9mIFJlYWN0IDE3J3MgYWN0LiBJdCBhc3N1bWVzIGFuXG4gICAgICAgIC8vIGFjdCBlbnZpcm9ubWVudCB3aGVuZXZlciBgamVzdGAgaXMgZGVmaW5lZCwgYnV0IHlvdSBjYW4gc3RpbGwgdHVybiBvZmZcbiAgICAgICAgLy8gc3B1cmlvdXMgd2FybmluZ3MgYnkgc2V0dGluZyBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgZXhwbGljaXRseVxuICAgICAgICAvLyB0byBmYWxzZS5cbiAgICAgICAgdmFyIGlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCA9IC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV0gRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UIGdsb2JhbFxuICAgICAgICAgIHR5cGVvZiBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgIT09IFwidW5kZWZpbmVkXCIgLy8gJEZsb3dGaXhNZVtjYW5ub3QtcmVzb2x2ZS1uYW1lXVxuICAgICAgICAgICAgPyBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkOyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdIC0gRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgamVzdFxuXG4gICAgICAgIHZhciBqZXN0SXNEZWZpbmVkID0gdHlwZW9mIGplc3QgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICAgIHJldHVybiBqZXN0SXNEZWZpbmVkICYmIGlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCAhPT0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ29uY3VycmVudEFjdEVudmlyb25tZW50KCkge1xuICAgICAge1xuICAgICAgICB2YXIgaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsID0gLy8gJEZsb3dGaXhNZVtjYW5ub3QtcmVzb2x2ZS1uYW1lXSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgZ2xvYmFsXG4gICAgICAgICAgdHlwZW9mIElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVCAhPT0gXCJ1bmRlZmluZWRcIiAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdXG4gICAgICAgICAgICA/IElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVFxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgJiZcbiAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxLmN1cnJlbnQgIT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogSW5jbHVkZSBsaW5rIHRvIHJlbGV2YW50IGRvY3VtZW50YXRpb24gcGFnZS5cbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBub3QgY29uZmlndXJlZCB0byBzdXBwb3J0IFwiICtcbiAgICAgICAgICAgICAgXCJhY3QoLi4uKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogTWFwO1xuICAgIHZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsXG4gICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEFjdFF1ZXVlO1xuICAgIHZhciBOb0NvbnRleHQgPVxuICAgICAgLyogICAgICAgICAgICAgKi9cbiAgICAgIDA7XG4gICAgdmFyIEJhdGNoZWRDb250ZXh0ID1cbiAgICAgIC8qICAgICAgICAgICAgICAgKi9cbiAgICAgIDE7XG4gICAgdmFyIFJlbmRlckNvbnRleHQgPVxuICAgICAgLyogICAgICAgICAqL1xuICAgICAgMjtcbiAgICB2YXIgQ29tbWl0Q29udGV4dCA9XG4gICAgICAvKiAgICAgICAgICovXG4gICAgICA0O1xuICAgIHZhciBSb290SW5Qcm9ncmVzcyA9IDA7XG4gICAgdmFyIFJvb3RGYXRhbEVycm9yZWQgPSAxO1xuICAgIHZhciBSb290RXJyb3JlZCA9IDI7XG4gICAgdmFyIFJvb3RTdXNwZW5kZWQgPSAzO1xuICAgIHZhciBSb290U3VzcGVuZGVkV2l0aERlbGF5ID0gNDtcbiAgICB2YXIgUm9vdENvbXBsZXRlZCA9IDU7XG4gICAgdmFyIFJvb3REaWROb3RDb21wbGV0ZSA9IDY7IC8vIERlc2NyaWJlcyB3aGVyZSB3ZSBhcmUgaW4gdGhlIFJlYWN0IGV4ZWN1dGlvbiBzdGFja1xuXG4gICAgdmFyIGV4ZWN1dGlvbkNvbnRleHQgPSBOb0NvbnRleHQ7IC8vIFRoZSByb290IHdlJ3JlIHdvcmtpbmcgb25cblxuICAgIHZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzID0gbnVsbDsgLy8gVGhlIGxhbmVzIHdlJ3JlIHJlbmRlcmluZ1xuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgICB2YXIgTm90U3VzcGVuZGVkID0gMDtcbiAgICB2YXIgU3VzcGVuZGVkT25FcnJvciA9IDE7XG4gICAgdmFyIFN1c3BlbmRlZE9uRGF0YSA9IDI7XG4gICAgdmFyIFN1c3BlbmRlZE9uSW1tZWRpYXRlID0gMztcbiAgICB2YXIgU3VzcGVuZGVkT25JbnN0YW5jZSA9IDQ7XG4gICAgdmFyIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWUgPSA1O1xuICAgIHZhciBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2UgPSA2O1xuICAgIHZhciBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWUgPSA3O1xuICAgIHZhciBTdXNwZW5kZWRPbkh5ZHJhdGlvbiA9IDg7IC8vIFdoZW4gdGhpcyBpcyB0cnVlLCB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlciBqdXN0IHN1c3BlbmRlZCAob3IgZXJyb3JlZCkgYW5kXG4gICAgLy8gd2UndmUgeWV0IHRvIHVud2luZCB0aGUgc3RhY2suIEluIHNvbWUgY2FzZXMsIHdlIG1heSB5aWVsZCB0byB0aGUgbWFpbiB0aHJlYWRcbiAgICAvLyBhZnRlciB0aGlzIGhhcHBlbnMuIElmIHRoZSBmaWJlciBpcyBwaW5nZWQgYmVmb3JlIHdlIHJlc3VtZSwgd2UgY2FuIHJldHJ5XG4gICAgLy8gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiB1bndpbmRpbmcgdGhlIHN0YWNrLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgIHZhciB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDsgLy8gV2hldGhlciBhIHBpbmcgbGlzdGVuZXIgd2FzIGF0dGFjaGVkIGR1cmluZyB0aGlzIHJlbmRlci4gVGhpcyBpcyBzbGlnaHRseVxuICAgIC8vIGRpZmZlcmVudCB0aGF0IHdoZXRoZXIgc29tZXRoaW5nIHN1c3BlbmRlZCwgYmVjYXVzZSB3ZSBkb24ndCBhZGQgbXVsdGlwbGVcbiAgICAvLyBsaXN0ZW5lcnMgdG8gYSBwcm9taXNlIHdlJ3ZlIGFscmVhZHkgc2VlbiAocGVyIHJvb3QgYW5kIGxhbmUpLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9IGZhbHNlOyAvLyBBIGNvbnRleHR1YWwgdmVyc2lvbiBvZiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy4gSXQgaXMgYSBzdXBlcnNldCBvZlxuICAgIC8vIHRoZSBsYW5lcyB0aGF0IHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gV2hlbiB3ZSBlbnRlciBhIHN1YnRyZWVcbiAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBoaWRkZW4sIHdlIGFkZCB0aGUgbGFuZXMgdGhhdCB3b3VsZCBoYXZlIGNvbW1pdHRlZCBpZlxuICAgIC8vIHRoZSBoaWRkZW4gdHJlZSBoYWRuJ3QgYmVlbiBkZWZlcnJlZC4gVGhpcyBpcyBtb2RpZmllZCBieSB0aGVcbiAgICAvLyBIaWRkZW5Db250ZXh0IG1vZHVsZS5cbiAgICAvL1xuICAgIC8vIE1vc3QgdGhpbmdzIGluIHRoZSB3b3JrIGxvb3Agc2hvdWxkIGRlYWwgd2l0aCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy5cbiAgICAvLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBlbnRhbmdsZWRSZW5kZXJMYW5lcy5cblxuICAgIHZhciBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFdoZXRoZXIgdG8gcm9vdCBjb21wbGV0ZWQsIGVycm9yZWQsIHN1c3BlbmRlZCwgZXRjLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5Qcm9ncmVzczsgLy8gQSBmYXRhbCBlcnJvciwgaWYgb25lIGlzIHRocm93blxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBUaGUgd29yayBsZWZ0IG92ZXIgYnkgY29tcG9uZW50cyB0aGF0IHdlcmUgdmlzaXRlZCBkdXJpbmcgdGhpcyByZW5kZXIuIE9ubHlcbiAgICAvLyBpbmNsdWRlcyB1bnByb2Nlc3NlZCB1cGRhdGVzLCBub3Qgd29yayBpbiBiYWlsZWQgb3V0IGNoaWxkcmVuLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UgKCpub3QqIGFuIGludGVybGVhdmVkIGV2ZW50KS5cblxuICAgIHZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7IC8vIElmIHRoaXMgbGFuZSBzY2hlZHVsZWQgZGVmZXJyZWQgd29yaywgdGhpcyBpcyB0aGUgbGFuZSBvZiB0aGUgZGVmZXJyZWQgdGFzay5cblxuICAgIHZhciB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IE5vTGFuZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cblxuICAgIHZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gbnVsbDsgLy8gVGhlc2UgYXJlIGVycm9ycyB0aGF0IHdlIHJlY292ZXJlZCBmcm9tIHdpdGhvdXQgc3VyZmFjaW5nIHRoZW0gdG8gdGhlIFVJLlxuICAgIC8vIFdlIHdpbGwgbG9nIHRoZW0gb25jZSB0aGUgdHJlZSBjb21taXRzLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbDsgLy8gVGhlIG1vc3QgcmVjZW50IHRpbWUgd2UgZWl0aGVyIGNvbW1pdHRlZCBhIGZhbGxiYWNrLCBvciB3aGVuIGEgZmFsbGJhY2sgd2FzXG4gICAgLy8gZmlsbGVkIGluIHdpdGggdGhlIHJlc29sdmVkIFVJLiBUaGlzIGxldHMgdXMgdGhyb3R0bGUgdGhlIGFwcGVhcmFuY2Ugb2YgbmV3XG4gICAgLy8gY29udGVudCBhcyBpdCBzdHJlYW1zIGluLCB0byBtaW5pbWl6ZSBqYW5rLlxuICAgIC8vIFRPRE86IFRoaW5rIG9mIGEgYmV0dGVyIG5hbWUgZm9yIHRoaXMgdmFyaWFibGU/XG5cbiAgICB2YXIgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDA7XG4gICAgdmFyIEZBTExCQUNLX1RIUk9UVExFX01TID0gMzAwOyAvLyBUaGUgYWJzb2x1dGUgdGltZSBmb3Igd2hlbiB3ZSBzaG91bGQgc3RhcnQgZ2l2aW5nIHVwIG9uIHJlbmRlcmluZ1xuICAgIC8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG4gICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eTsgLy8gSG93IGxvbmcgYSByZW5kZXIgaXMgc3VwcG9zZWQgdG8gdGFrZSBiZWZvcmUgd2Ugc3RhcnQgZm9sbG93aW5nIENQVVxuICAgIC8vIHN1c3BlbnNlIGhldXJpc3RpY3MgYW5kIG9wdCBvdXQgb2YgcmVuZGVyaW5nIG1vcmUgY29udGVudC5cblxuICAgIHZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcbiAgICB2YXIgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiByZXNldFJlbmRlclRpbWVyKCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdyQxKCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkge1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWU7XG4gICAgfVxuICAgIHZhciBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgdmFyIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgdmFyIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDsgLy8gT25seSB1c2VkIHdoZW4gZW5hYmxlUHJvZmlsZXJOZXN0ZWRVcGRhdGVTY2hlZHVsZWRIb29rIGlzIHRydWU7XG4gICAgdmFyIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgdmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbiAgICB2YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBwZW5kaW5nUGFzc2l2ZVByb2ZpbGVyRWZmZWN0cyA9IFtdO1xuXG4gICAgdmFyIE5FU1RFRF9VUERBVEVfTElNSVQgPSA1MDtcbiAgICB2YXIgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgIHZhciByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuICAgIHZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICB2YXIgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHZhciBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgPSA1MDtcbiAgICB2YXIgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICB2YXIgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGw7XG4gICAgdmFyIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdCgpIHtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKCkge1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1dvcmtMb29wU3VzcGVuZGVkT25EYXRhKCkge1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2VzXG4gICAgICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgICAgIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIHJldHVybiBTeW5jTGFuZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gTm9MYW5lc1xuICAgICAgKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBUaGVzZSBhcmUgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkLiBUaGVcbiAgICAgICAgLy8gb2xkIGJlaGF2aW9yIGlzIHRvIGdpdmUgdGhpcyB0aGUgc2FtZSBcInRocmVhZFwiIChsYW5lcykgYXNcbiAgICAgICAgLy8gd2hhdGV2ZXIgaXMgY3VycmVudGx5IHJlbmRlcmluZy4gU28gaWYgeW91IGNhbGwgYHNldFN0YXRlYCBvbiBhIGNvbXBvbmVudFxuICAgICAgICAvLyB0aGF0IGhhcHBlbnMgbGF0ZXIgaW4gdGhlIHNhbWUgcmVuZGVyLCBpdCB3aWxsIGZsdXNoLiBJZGVhbGx5LCB3ZSB3YW50IHRvXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGFuZCB0cmVhdCB0aGVtIGFzIGlmIHRoZXkgY2FtZSBmcm9tIGFuXG4gICAgICAgIC8vIGludGVybGVhdmVkIGV2ZW50LiBSZWdhcmRsZXNzLCB0aGlzIHBhdHRlcm4gaXMgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkLlxuICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIGlzIG9ubHkgYSBmYWxsYmFjay4gVGhlIGZsYWcgb25seSBleGlzdHMgdW50aWwgd2UgY2FuIHJvbGxcbiAgICAgICAgLy8gb3V0IHRoZSBzZXRTdGF0ZSB3YXJuaW5nLCBzaW5jZSBleGlzdGluZyBjb2RlIG1pZ2h0IGFjY2lkZW50YWxseSByZWx5IG9uXG4gICAgICAgIC8vIHRoZSBjdXJyZW50IGJlaGF2aW9yLlxuICAgICAgICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmUod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHJhbnNpdGlvbiA9IHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpO1xuXG4gICAgICBpZiAodHJhbnNpdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIGJhdGNoQ29uZmlnVHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG5cbiAgICAgICAgICBpZiAoIWJhdGNoQ29uZmlnVHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycykge1xuICAgICAgICAgICAgYmF0Y2hDb25maWdUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJhdGNoQ29uZmlnVHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5hZGQoZmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdGlvblNjb3BlTGFuZSA9IHBlZWtFbnRhbmdsZWRBY3Rpb25MYW5lKCk7XG4gICAgICAgIHJldHVybiBhY3Rpb25TY29wZUxhbmUgIT09IE5vTGFuZSAvLyBXZSdyZSBpbnNpZGUgYW4gYXN5bmMgYWN0aW9uIHNjb3BlLiBSZXVzZSB0aGUgc2FtZSBsYW5lLlxuICAgICAgICAgID8gYWN0aW9uU2NvcGVMYW5lIC8vIFdlIG1heSBvciBtYXkgbm90IGJlIGluc2lkZSBhbiBhc3luYyBhY3Rpb24gc2NvcGUuIElmIHdlIGFyZSwgdGhpc1xuICAgICAgICAgIDogLy8gaXMgdGhlIGZpcnN0IHVwZGF0ZSBpbiB0aGF0IHNjb3BlLiBFaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIGdldCBhXG4gICAgICAgICAgICAvLyBmcmVzaCB0cmFuc2l0aW9uIGxhbmUuXG4gICAgICAgICAgICByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKTtcbiAgICAgIH0gLy8gVXBkYXRlcyBvcmlnaW5hdGluZyBpbnNpZGUgY2VydGFpbiBSZWFjdCBtZXRob2RzLCBsaWtlIGZsdXNoU3luYywgaGF2ZVxuICAgICAgLy8gdGhlaXIgcHJpb3JpdHkgc2V0IGJ5IHRyYWNraW5nIGl0IHdpdGggYSBjb250ZXh0IHZhcmlhYmxlLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBvcGFxdWUgdHlwZSByZXR1cm5lZCBieSB0aGUgaG9zdCBjb25maWcgaXMgaW50ZXJuYWxseSBhIGxhbmUsIHNvIHdlIGNhblxuICAgICAgLy8gdXNlIHRoYXQgZGlyZWN0bHkuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdHlwZSBjb252ZXJzaW9uIHRvIHRoZSBldmVudCBwcmlvcml0eSBtb2R1bGUuXG5cbiAgICAgIHZhciB1cGRhdGVMYW5lID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG5cbiAgICAgIGlmICh1cGRhdGVMYW5lICE9PSBOb0xhbmUpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxhbmU7XG4gICAgICB9IC8vIFRoaXMgdXBkYXRlIG9yaWdpbmF0ZWQgb3V0c2lkZSBSZWFjdC4gQXNrIHRoZSBob3N0IGVudmlyb25tZW50IGZvciBhblxuICAgICAgLy8gYXBwcm9wcmlhdGUgcHJpb3JpdHksIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGV2ZW50LlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBvcGFxdWUgdHlwZSByZXR1cm5lZCBieSB0aGUgaG9zdCBjb25maWcgaXMgaW50ZXJuYWxseSBhIGxhbmUsIHNvIHdlIGNhblxuICAgICAgLy8gdXNlIHRoYXQgZGlyZWN0bHkuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdHlwZSBjb252ZXJzaW9uIHRvIHRoZSBldmVudCBwcmlvcml0eSBtb2R1bGUuXG5cbiAgICAgIHZhciBldmVudExhbmUgPSBnZXRDdXJyZW50RXZlbnRQcmlvcml0eSgpO1xuICAgICAgcmV0dXJuIGV2ZW50TGFuZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXF1ZXN0UmV0cnlMYW5lKGZpYmVyKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgcmVxdWVzdFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgICAgIC8vIFwicmV0cmllc1wiIOKAlCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gICAgICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgICAgIC8vIFNwZWNpYWwgY2FzZXNcbiAgICAgIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICAgICAgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgcmV0dXJuIFN5bmNMYW5lO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xhaW1OZXh0UmV0cnlMYW5lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVxdWVzdERlZmVycmVkTGFuZSgpIHtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB1c2VEZWZlcnJlZFZhbHVlIGhvb2tzIGluIHRoZSBzYW1lIHJlbmRlciwgdGhlXG4gICAgICAgIC8vIHRhc2tzIHRoYXQgdGhleSBzcGF3biBzaG91bGQgYWxsIGJlIGJhdGNoZWQgdG9nZXRoZXIsIHNvIHRoZXkgc2hvdWxkIGFsbFxuICAgICAgICAvLyByZWNlaXZlIHRoZSBzYW1lIGxhbmUuXG4gICAgICAgIC8vIENoZWNrIHRoZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudCByZW5kZXIgdG8gZGVjaWRlIHRoZSBwcmlvcml0eSBvZiB0aGVcbiAgICAgICAgLy8gZGVmZXJyZWQgdGFzay5cbiAgICAgICAgLy8gT2Zmc2NyZWVuTGFuZSBpcyB1c2VkIGZvciBwcmVyZW5kZXJpbmcsIGJ1dCB3ZSBhbHNvIHVzZSBPZmZzY3JlZW5MYW5lXG4gICAgICAgIC8vIGZvciBpbmNyZW1lbnRhbCBoeWRyYXRpb24uIEl0J3MgZ2l2ZW4gdGhlIGxvd2VzdCBwcmlvcml0eSBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBpbml0aWFsIEhUTUwgaXMgdGhlIHNhbWUgYXMgdGhlIGZpbmFsIFVJLiBCdXQgdXNlRGVmZXJyZWRWYWx1ZSBkdXJpbmdcbiAgICAgICAgLy8gaHlkcmF0aW9uIGlzIGFuIGV4Y2VwdGlvbiDigJQgd2UgbmVlZCB0byB1cGdyYWRlIHRoZSBVSSB0byB0aGUgZmluYWxcbiAgICAgICAgLy8gdmFsdWUuIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHdlIHRyZWF0IGl0IGxpa2UgYSB0cmFuc2l0aW9uLlxuICAgICAgICB2YXIgaXNQcmVyZW5kZXJpbmcgPVxuICAgICAgICAgIGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmXG4gICAgICAgICAgIWdldElzSHlkcmF0aW5nKCk7XG5cbiAgICAgICAgaWYgKGlzUHJlcmVuZGVyaW5nKSB7XG4gICAgICAgICAgLy8gVGhlcmUncyBvbmx5IG9uZSBPZmZzY3JlZW5MYW5lLCBzbyBpZiBpdCBjb250YWlucyBkZWZlcnJlZCB3b3JrLCB3ZVxuICAgICAgICAgIC8vIHNob3VsZCBqdXN0IHJlc2NoZWR1bGUgdXNpbmcgdGhlIHNhbWUgbGFuZS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IE9mZnNjcmVlbkxhbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXZlcnl0aGluZyBlbHNlIGlzIHNwYXduZWQgYXMgYSB0cmFuc2l0aW9uLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBNYXJrIHRoZSBwYXJlbnQgU3VzcGVuc2UgYm91bmRhcnkgc28gaXQga25vd3MgdG8gc3Bhd24gdGhlIGRlZmVycmVkIGxhbmUuXG5cbiAgICAgIHZhciBzdXNwZW5zZUhhbmRsZXIgPSBnZXRTdXNwZW5zZUhhbmRsZXIoKTtcblxuICAgICAgaWYgKHN1c3BlbnNlSGFuZGxlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBBcyBhbiBvcHRpbWl6YXRpb24sIHdlIHNob3VsZG4ndCBlbnRhbmdsZSB0aGUgbGFuZXMgYXQgdGhlIHJvb3Q7IHdlXG4gICAgICAgIC8vIGNhbiBlbnRhbmdsZSB0aGVtIHVzaW5nIHRoZSBiYXNlTGFuZXMgb2YgdGhlIFN1c3BlbnNlIGJvdW5kYXJ5IGluc3RlYWQuXG4gICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbCBpZiB0aGVyZSdzIG5vIFN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgICAgICBzdXNwZW5zZUhhbmRsZXIuZmxhZ3MgfD0gRGlkRGVmZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVla0RlZmVycmVkTGFuZSgpIHtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QpIHtcbiAgICAgICAgICBlcnJvcihcInVzZUluc2VydGlvbkVmZmVjdCBtdXN0IG5vdCBzY2hlZHVsZSB1cGRhdGVzLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmIChpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDaGVjayBpZiB0aGUgd29yayBsb29wIGlzIGN1cnJlbnRseSBzdXNwZW5kZWQgYW5kIHdhaXRpbmcgZm9yIGRhdGEgdG9cbiAgICAgIC8vIGZpbmlzaCBsb2FkaW5nLlxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIFN1c3BlbmRlZCByZW5kZXIgcGhhc2VcbiAgICAgICAgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEpIHx8IC8vIFN1c3BlbmRlZCBjb21taXQgcGhhc2VcbiAgICAgICAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhlIGluY29taW5nIHVwZGF0ZSBtaWdodCB1bmJsb2NrIHRoZSBjdXJyZW50IHJlbmRlci4gSW50ZXJydXB0IHRoZVxuICAgICAgICAvLyBjdXJyZW50IGF0dGVtcHQgYW5kIHJlc3RhcnQgZnJvbSB0aGUgdG9wLlxuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICApO1xuICAgICAgfSAvLyBNYXJrIHRoYXQgdGhlIHJvb3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuXG5cbiAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lKTtcblxuICAgICAgaWYgKFxuICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0xhbmVzICYmXG4gICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdFxuICAgICAgKSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIHdhcyBkaXNwYXRjaGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLiBUaGlzIGlzIGEgbWlzdGFrZVxuICAgICAgICAvLyBpZiB0aGUgdXBkYXRlIG9yaWdpbmF0ZXMgZnJvbSB1c2VyIHNwYWNlICh3aXRoIHRoZSBleGNlcHRpb24gb2YgbG9jYWxcbiAgICAgICAgLy8gaG9vayB1cGRhdGVzLCB3aGljaCBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSBhbmQgZG9uJ3QgcmVhY2ggdGhpc1xuICAgICAgICAvLyBmdW5jdGlvbiksIGJ1dCB0aGVyZSBhcmUgc29tZSBpbnRlcm5hbCBSZWFjdCBmZWF0dXJlcyB0aGF0IHVzZSB0aGlzIGFzXG4gICAgICAgIC8vIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbGlrZSBzZWxlY3RpdmUgaHlkcmF0aW9uLlxuICAgICAgICB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcik7IC8vIFRyYWNrIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbm9ybWFsIHVwZGF0ZSwgc2NoZWR1bGVkIGZyb20gb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLiBGb3JcbiAgICAgICAgLy8gZXhhbXBsZSwgZHVyaW5nIGFuIGlucHV0IGV2ZW50LlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgICBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5JZlVwZGF0ZXNOb3RXcmFwcGVkV2l0aEFjdERFVihmaWJlcik7XG5cbiAgICAgICAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgICAgICAgIC8vIFJlY2VpdmVkIGFuIHVwZGF0ZSB0byBhIHRyZWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLiBNYXJrXG4gICAgICAgICAgLy8gdGhhdCB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgdXBkYXRlIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgICAgICAgIC8vIFRoZSByb290IGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgd2hpY2ggbWVhbnMgdGhpcyByZW5kZXJcbiAgICAgICAgICAgIC8vIGRlZmluaXRlbHkgd29uJ3QgZmluaXNoLiBTaW5jZSB3ZSBoYXZlIGEgbmV3IHVwZGF0ZSwgbGV0J3MgbWFyayBpdCBhc1xuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIG5vdywgcmlnaHQgYmVmb3JlIG1hcmtpbmcgdGhlIGluY29taW5nIHVwZGF0ZS4gVGhpcyBoYXMgdGhlXG4gICAgICAgICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHJlbmRlciBhbmQgc3dpdGNoaW5nIHRvIHRoZSB1cGRhdGUuXG4gICAgICAgICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJyaWRlIHBpbmdzIHRoYXQgaGFwcGVuIHdoaWxlIHdlJ3ZlXG4gICAgICAgICAgICAvLyBhbHJlYWR5IHN0YXJ0ZWQgcmVuZGVyaW5nLlxuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxhbmUgPT09IFN5bmNMYW5lICYmXG4gICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0ICYmXG4gICAgICAgICAgKGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBGbHVzaCB0aGUgc3luY2hyb25vdXMgd29yayBub3csIHVubGVzcyB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb3IgaW5zaWRlXG4gICAgICAgICAgICAvLyBhIGJhdGNoLiBUaGlzIGlzIGludGVudGlvbmFsbHkgaW5zaWRlIHNjaGVkdWxlVXBkYXRlT25GaWJlciBpbnN0ZWFkIG9mXG4gICAgICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAgICAgLy8gd2l0aG91dCBpbW1lZGlhdGVseSBmbHVzaGluZyBpdC4gV2Ugb25seSBkbyB0aGlzIGZvciB1c2VyLWluaXRpYXRlZFxuICAgICAgICAgICAgLy8gdXBkYXRlcywgdG8gcHJlc2VydmUgaGlzdG9yaWNhbCBiZWhhdmlvciBvZiBsZWdhY3kgbW9kZS5cbiAgICAgICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgICAgIGZsdXNoU3luY1dvcmtPbkxlZ2FjeVJvb3RzT25seSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBPbmx5IGNhbGxlZCBieSBjbGFzcyBjb21wb25lbnRzLFxuICAgICAgLy8gd2hpY2ggc3BlY2lhbCAoZGVwcmVjYXRlZCkgYmVoYXZpb3IgZm9yIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZSBwcm9wcy5cbiAgICAgIHJldHVybiAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQ7XG4gICAgfSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbiAgICAvLyBnb2VzIHRocm91Z2ggU2NoZWR1bGVyLlxuXG4gICAgZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAgICAgIHtcbiAgICAgICAgcmVzZXROZXN0ZWRVcGRhdGVGbGFnKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICAgICAgfSAvLyBGbHVzaCBhbnkgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYmVmb3JlIGRlY2lkaW5nIHdoaWNoIGxhbmVzIHRvIHdvcmsgb24sXG4gICAgICAvLyBpbiBjYXNlIHRoZXkgc2NoZWR1bGUgYWRkaXRpb25hbCB3b3JrLlxuXG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgICAgIHZhciBkaWRGbHVzaFBhc3NpdmVFZmZlY3RzID0gZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuXG4gICAgICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHBhc3NpdmUgZWZmZWN0IHBoYXNlIG1heSBoYXZlIGNhbmNlbGVkIHRoZSBjdXJyZW50IHRhc2suXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSB0YXNrIG5vZGUgZm9yIHRoaXMgcm9vdCB3YXMgY2hhbmdlZC5cbiAgICAgICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgICAgIC8vIFRoZSBjdXJyZW50IHRhc2sgd2FzIGNhbmNlbGVkLiBFeGl0LiBXZSBkb24ndCBuZWVkIHRvIGNhbGxcbiAgICAgICAgICAvLyBgZW5zdXJlUm9vdElzU2NoZWR1bGVkYCBiZWNhdXNlIHRoZSBjaGVjayBhYm92ZSBpbXBsaWVzIGVpdGhlciB0aGF0XG4gICAgICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCB1c2luZyB0aGUgZmllbGRzIHN0b3JlZFxuICAgICAgLy8gb24gdGhlIHJvb3QuXG4gICAgICAvLyBUT0RPOiBUaGlzIHdhcyBhbHJlYWR5IGNvbXB1dGVkIGluIHRoZSBjYWxsZXIuIFBhc3MgaXQgYXMgYW4gYXJndW1lbnQuXG5cbiAgICAgIHZhciBsYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzXG4gICAgICApO1xuXG4gICAgICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gRGVmZW5zaXZlIGNvZGluZy4gVGhpcyBpcyBuZXZlciBleHBlY3RlZCB0byBoYXBwZW4uXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyBXZSBkaXNhYmxlIHRpbWUtc2xpY2luZyBpbiBzb21lIGNhc2VzOiBpZiB0aGUgd29yayBoYXMgYmVlbiBDUFUtYm91bmRcbiAgICAgIC8vIGZvciB0b28gbG9uZyAoXCJleHBpcmVkXCIgd29yaywgdG8gcHJldmVudCBzdGFydmF0aW9uKSwgb3Igd2UncmUgaW5cbiAgICAgIC8vIHN5bmMtdXBkYXRlcy1ieS1kZWZhdWx0IG1vZGUuXG4gICAgICAvLyBUT0RPOiBXZSBvbmx5IGNoZWNrIGBkaWRUaW1lb3V0YCBkZWZlbnNpdmVseSwgdG8gYWNjb3VudCBmb3IgYSBTY2hlZHVsZXJcbiAgICAgIC8vIGJ1ZyB3ZSdyZSBzdGlsbCBpbnZlc3RpZ2F0aW5nLiBPbmNlIHRoZSBidWcgaW4gU2NoZWR1bGVyIGlzIGZpeGVkLFxuICAgICAgLy8gd2UgY2FuIHJlbW92ZSB0aGlzLCBzaW5jZSB3ZSB0cmFjayBleHBpcmF0aW9uIG91cnNlbHZlcy5cblxuICAgICAgdmFyIHNob3VsZFRpbWVTbGljZSA9XG4gICAgICAgICFpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCBsYW5lcykgJiZcbiAgICAgICAgIWluY2x1ZGVzRXhwaXJlZExhbmUocm9vdCwgbGFuZXMpICYmXG4gICAgICAgICFkaWRUaW1lb3V0O1xuICAgICAgdmFyIGV4aXRTdGF0dXMgPSBzaG91bGRUaW1lU2xpY2VcbiAgICAgICAgPyByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcylcbiAgICAgICAgOiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG5cbiAgICAgIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5Qcm9ncmVzcykge1xuICAgICAgICB2YXIgcmVuZGVyV2FzQ29uY3VycmVudCA9IHNob3VsZFRpbWVTbGljZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3REaWROb3RDb21wbGV0ZSkge1xuICAgICAgICAgICAgLy8gVGhlIHJlbmRlciB1bndvdW5kIHdpdGhvdXQgY29tcGxldGluZyB0aGUgdHJlZS4gVGhpcyBoYXBwZW5zIGluIHNwZWNpYWxcbiAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIG5lZWQgdG8gZXhpdCB0aGUgY3VycmVudCByZW5kZXIgd2l0aG91dCBwcm9kdWNpbmcgYVxuICAgICAgICAgICAgLy8gY29uc2lzdGVudCB0cmVlIG9yIGNvbW1pdHRpbmcuXG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgTm9MYW5lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHJlbmRlciBjb21wbGV0ZWQuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHJlbmRlciBtYXkgaGF2ZSB5aWVsZGVkIHRvIGEgY29uY3VycmVudCBldmVudCwgYW5kIGlmIHNvLFxuICAgICAgICAgICAgLy8gY29uZmlybSB0aGF0IGFueSBuZXdseSByZW5kZXJlZCBzdG9yZXMgYXJlIGNvbnNpc3RlbnQuXG4gICAgICAgICAgICAvLyBUT0RPOiBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiBhIGNvbmN1cnJlbnQgcmVuZGVyIG1heSBuZXZlciBoYXZlIHlpZWxkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBtYWluIHRocmVhZCwgaWYgaXQgd2FzIGZhc3QgZW5vdWdoLCBvciBpZiBpdCBleHBpcmVkLiBXZSBjb3VsZFxuICAgICAgICAgICAgLy8gc2tpcCB0aGUgY29uc2lzdGVuY3kgY2hlY2sgaW4gdGhhdCBjYXNlLCB0b28uXG4gICAgICAgICAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ICYmXG4gICAgICAgICAgICAgICFpc1JlbmRlckNvbnNpc3RlbnRXaXRoRXh0ZXJuYWxTdG9yZXMoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEEgc3RvcmUgd2FzIG11dGF0ZWQgaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQuIFJlbmRlciBhZ2FpbixcbiAgICAgICAgICAgICAgLy8gc3luY2hyb25vdXNseSwgdG8gYmxvY2sgZnVydGhlciBtdXRhdGlvbnMuXG4gICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7IC8vIFdlIGFzc3VtZSB0aGUgdHJlZSBpcyBub3cgY29uc2lzdGVudCBiZWNhdXNlIHdlIGRpZG4ndCB5aWVsZCB0byBhbnlcbiAgICAgICAgICAgICAgLy8gY29uY3VycmVudCBldmVudHMuXG5cbiAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGZhbHNlOyAvLyBOZWVkIHRvIGNoZWNrIHRoZSBleGl0IHN0YXR1cyBhZ2Fpbi5cblxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gLy8gQ2hlY2sgaWYgc29tZXRoaW5nIHRocmV3XG5cbiAgICAgICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzID0gbGFuZXM7XG4gICAgICAgICAgICAgIHZhciBlcnJvclJldHJ5TGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lc1xuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGlmIChlcnJvclJldHJ5TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgICBsYW5lcyA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gcmVjb3ZlckZyb21Db25jdXJyZW50RXJyb3IoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgICAgICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIE5vTGFuZSk7XG4gICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICAgICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgICAgICAgICAgIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIFRoZSBuZXh0IHN0ZXAgaXMgZWl0aGVyIHRvIGNvbW1pdCBpdCxcbiAgICAgICAgICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cbiAgICAgICAgICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gICAgICAgICAgICBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGZpbmlzaGVkV29yaywgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IHdoaWxlICh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgcmV0dXJuIGdldENvbnRpbnVhdGlvbkZvclJvb3Qocm9vdCwgb3JpZ2luYWxDYWxsYmFja05vZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY292ZXJGcm9tQ29uY3VycmVudEVycm9yKFxuICAgICAgcm9vdCxcbiAgICAgIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyxcbiAgICAgIGVycm9yUmV0cnlMYW5lc1xuICAgICkge1xuICAgICAgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbiwgZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGxcbiAgICAgIC8vIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuICAgICAgLy8gQmVmb3JlIHJlbmRlcmluZyBhZ2Fpbiwgc2F2ZSB0aGUgZXJyb3JzIGZyb20gdGhlIHByZXZpb3VzIGF0dGVtcHQuXG4gICAgICB2YXIgZXJyb3JzRnJvbUZpcnN0QXR0ZW1wdCA9IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnM7XG4gICAgICB2YXIgd2FzUm9vdERlaHlkcmF0ZWQgPSBpc1Jvb3REZWh5ZHJhdGVkKHJvb3QpO1xuXG4gICAgICBpZiAod2FzUm9vdERlaHlkcmF0ZWQpIHtcbiAgICAgICAgLy8gVGhlIHNoZWxsIGZhaWxlZCB0byBoeWRyYXRlLiBTZXQgYSBmbGFnIHRvIGZvcmNlIGEgY2xpZW50IHJlbmRlcmluZ1xuICAgICAgICAvLyBkdXJpbmcgdGhlIG5leHQgYXR0ZW1wdC4gVG8gZG8gdGhpcywgd2UgY2FsbCBwcmVwYXJlRnJlc2hTdGFjayBub3dcbiAgICAgICAgLy8gdG8gY3JlYXRlIHRoZSByb290IHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuIFRoaXMgaXMgYSBiaXQgd2VpcmQgaW4gdGVybXNcbiAgICAgICAgLy8gb2YgZmFjdG9yaW5nLCBiZWNhdXNlIGl0IHJlbGllcyBvbiByZW5kZXJSb290U3luYyBub3QgY2FsbGluZ1xuICAgICAgICAvLyBwcmVwYXJlRnJlc2hTdGFjayBhZ2FpbiBpbiB0aGUgY2FsbCBiZWxvdywgd2hpY2ggaGFwcGVucyBiZWNhdXNlIHRoZVxuICAgICAgICAvLyByb290IGFuZCBsYW5lcyBoYXZlbid0IGNoYW5nZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRPRE86IEkgdGhpbmsgd2hhdCB3ZSBzaG91bGQgZG8gaXMgc2V0IEZvcmNlQ2xpZW50UmVuZGVyIGluc2lkZVxuICAgICAgICAvLyB0aHJvd0V4Y2VwdGlvbiwgbGlrZSB3ZSBkbyBmb3IgbmVzdGVkIFN1c3BlbnNlIGJvdW5kYXJpZXMuIFRoZSByZWFzb25cbiAgICAgICAgLy8gaXQncyBoZXJlIGluc3RlYWQgaXMgc28gd2UgY2FuIHN3aXRjaCB0byB0aGUgc3luY2hyb25vdXMgd29yayBsb29wLCB0b28uXG4gICAgICAgIC8vIFNvbWV0aGluZyB0byBjb25zaWRlciBmb3IgYSBmdXR1cmUgcmVmYWN0b3IuXG4gICAgICAgIHZhciByb290V29ya0luUHJvZ3Jlc3MgPSBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBlcnJvclJldHJ5TGFuZXMpO1xuICAgICAgICByb290V29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRm9yY2VDbGllbnRSZW5kZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIGVycm9ySHlkcmF0aW5nQ29udGFpbmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBlcnJvclJldHJ5TGFuZXMpO1xuXG4gICAgICBpZiAoZXhpdFN0YXR1cyAhPT0gUm9vdEVycm9yZWQpIHtcbiAgICAgICAgLy8gU3VjY2Vzc2Z1bGx5IGZpbmlzaGVkIHJlbmRlcmluZyBvbiByZXRyeVxuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyICYmICF3YXNSb290RGVoeWRyYXRlZCkge1xuICAgICAgICAgIC8vIER1cmluZyB0aGUgc3luY2hyb25vdXMgcmVuZGVyLCB3ZSBhdHRhY2hlZCBhZGRpdGlvbmFsIHBpbmcgbGlzdGVuZXJzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgaGlnaGx5IHN1Z2dlc3RpdmUgb2YgYW4gdW5jYWNoZWQgcHJvbWlzZSAodGhvdWdoIGl0J3Mgbm90IHRoZVxuICAgICAgICAgIC8vIG9ubHkgcmVhc29uIHRoaXMgd291bGQgaGFwcGVuKS4gSWYgaXQgd2FzIGFuIHVuY2FjaGVkIHByb21pc2UsIHRoZW5cbiAgICAgICAgICAvLyBpdCBtYXkgaGF2ZSBtYXNrZWQgYSBkb3duc3RyZWFtIGVycm9yIGZyb20gb2N1cnJpbmcgd2l0aG91dCBhY3R1YWxseVxuICAgICAgICAgIC8vIGZpeGluZyBpdC4gRXhhbXBsZTpcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vICAgIHVzZShQcm9taXNlLnJlc29sdmUoJ3VuY2FjaGVkJykpXG4gICAgICAgICAgLy8gICAgdGhyb3cgbmV3IEVycm9yKCdPb3BzIScpXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgdGhlcmUncyBhIGNvbmZsaWN0IGJldHdlZW4gYmxvY2tpbmcgcG90ZW50aWFsXG4gICAgICAgICAgLy8gY29uY3VycmVudCBkYXRhIHJhY2VzIGFuZCB1bndyYXBwaW5nIHVuY2FjaGVkIHByb21pc2UgdmFsdWVzLiBXZVxuICAgICAgICAgIC8vIGhhdmUgdG8gY2hvb3NlIG9uZSBvciB0aGUgb3RoZXIuIEJlY2F1c2UgdGhlIGRhdGEgcmFjZSByZWNvdmVyeSBpc1xuICAgICAgICAgIC8vIGEgbGFzdCBkaXRjaCBlZmZvcnQsIHdlJ2xsIGRpc2FibGUgaXQuXG4gICAgICAgICAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyA9IG1lcmdlTGFuZXMoXG4gICAgICAgICAgICByb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzLFxuICAgICAgICAgICAgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzXG4gICAgICAgICAgKTsgLy8gTWFyayB0aGUgY3VycmVudCByZW5kZXIgYXMgc3VzcGVuZGVkIGFuZCBmb3JjZSBpdCB0byByZXN0YXJ0LiBPbmNlXG4gICAgICAgICAgLy8gdGhlc2UgbGFuZXMgZmluaXNoIHN1Y2Nlc3NmdWxseSwgd2UnbGwgcmUtZW5hYmxlIHRoZSBlcnJvciByZWNvdmVyeVxuICAgICAgICAgIC8vIG1lY2hhbmlzbSBmb3Igc3Vic2VxdWVudCB1cGRhdGVzLlxuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD0gb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzO1xuICAgICAgICAgIHJldHVybiBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICAgICAgICB9IC8vIFRoZSBlcnJvcnMgZnJvbSB0aGUgZmFpbGVkIGZpcnN0IGF0dGVtcHQgaGF2ZSBiZWVuIHJlY292ZXJlZC4gQWRkXG4gICAgICAgIC8vIHRoZW0gdG8gdGhlIGNvbGxlY3Rpb24gb2YgcmVjb3ZlcmFibGUgZXJyb3JzLiBXZSdsbCBsb2cgdGhlbSBpbiB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLlxuXG4gICAgICAgIHZhciBlcnJvcnNGcm9tU2Vjb25kQXR0ZW1wdCA9IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGVycm9yc0Zyb21GaXJzdEF0dGVtcHQ7IC8vIFRoZSBlcnJvcnMgZnJvbSB0aGUgc2Vjb25kIGF0dGVtcHQgc2hvdWxkIGJlIHF1ZXVlZCBhZnRlciB0aGUgZXJyb3JzXG4gICAgICAgIC8vIGZyb20gdGhlIGZpcnN0IGF0dGVtcHQsIHRvIHByZXNlcnZlIHRoZSBjYXVzYWwgc2VxdWVuY2UuXG5cbiAgICAgICAgaWYgKGVycm9yc0Zyb21TZWNvbmRBdHRlbXB0ICE9PSBudWxsKSB7XG4gICAgICAgICAgcXVldWVSZWNvdmVyYWJsZUVycm9ycyhlcnJvcnNGcm9tU2Vjb25kQXR0ZW1wdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV4aXRTdGF0dXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcXVldWVSZWNvdmVyYWJsZUVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGVycm9ycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMucHVzaC5hcHBseShcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICBlcnJvcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGZpbmlzaGVkV29yaywgbGFuZXMpIHtcbiAgICAgIC8vIFRPRE86IFRoZSBmYWN0IHRoYXQgbW9zdCBvZiB0aGVzZSBicmFuY2hlcyBhcmUgaWRlbnRpY2FsIHN1Z2dlc3RzIHRoYXQgc29tZVxuICAgICAgLy8gb2YgdGhlIGV4aXQgc3RhdHVzZXMgYXJlIG5vdCBiZXN0IG1vZGVsZWQgYXMgZXhpdCBzdGF0dXNlcyBhbmQgc2hvdWxkIGJlXG4gICAgICAvLyB0cmFja2VkIG9ydGhvZ29uYWxseS5cbiAgICAgIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgICAgICBjYXNlIFJvb3RJblByb2dyZXNzOlxuICAgICAgICBjYXNlIFJvb3RGYXRhbEVycm9yZWQ6IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OiB7XG4gICAgICAgICAgaWYgKGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHRyYW5zaXRpb24sIHNvIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgY29tbWl0dGluZyBhXG4gICAgICAgICAgICAvLyBwbGFjZWhvbGRlciBhbmQgd2l0aG91dCBzY2hlZHVsaW5nIGEgdGltZW91dC4gRGVsYXkgaW5kZWZpbml0ZWx5XG4gICAgICAgICAgICAvLyB1bnRpbCB3ZSByZWNlaXZlIG1vcmUgZGF0YS5cbiAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgICAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICAgIGNhc2UgUm9vdENvbXBsZXRlZDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gcm9vdCBleGl0IHN0YXR1cy5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgIC8vIFdlJ3JlIGluc2lkZSBhbiBgYWN0YCBzY29wZS4gQ29tbWl0IGltbWVkaWF0ZWx5LlxuICAgICAgICBjb21taXRSb290KFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIGV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIHJlbmRlciBvbmx5IGluY2x1ZGVkIHJldHJpZXMsIG5vIHVwZGF0ZXMuIFRocm90dGxlIGNvbW1pdHRpbmdcbiAgICAgICAgICAvLyByZXRyaWVzIHNvIHRoYXQgd2UgZG9uJ3Qgc2hvdyB0b28gbWFueSBsb2FkaW5nIHN0YXRlcyB0b28gcXVpY2tseS5cbiAgICAgICAgICB2YXIgbXNVbnRpbFRpbWVvdXQgPVxuICAgICAgICAgICAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93JDEoKTsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cbiAgICAgICAgICBpZiAobXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgd2UgY2FuIGRvIG9uIHRoaXMgcm9vdC4gV2UgbWlnaHQgYXMgd2VsbFxuICAgICAgICAgICAgICAvLyBhdHRlbXB0IHRvIHdvcmsgb24gdGhhdCB3aGlsZSB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gLy8gVGhlIHJlbmRlciBpcyBzdXNwZW5kZWQsIGl0IGhhc24ndCB0aW1lZCBvdXQsIGFuZCB0aGVyZSdzIG5vXG4gICAgICAgICAgICAvLyBsb3dlciBwcmlvcml0eSB3b3JrIHRvIGRvLiBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IENvbWJpbmUgcmV0cnkgdGhyb3R0bGluZyB3aXRoIFN1c3BlbnNleSBjb21taXRzLiBSaWdodCBub3cgdGhleVxuICAgICAgICAgICAgLy8gcnVuIG9uZSBhZnRlciB0aGUgb3RoZXIuXG5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChcbiAgICAgICAgICAgICAgY29tbWl0Um9vdFdoZW5SZWFkeS5iaW5kKFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBtc1VudGlsVGltZW91dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICBsYW5lcyxcbiAgICAgIHNwYXduZWRMYW5lXG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBDb21iaW5lIHJldHJ5IHRocm90dGxpbmcgd2l0aCBTdXNwZW5zZXkgY29tbWl0cy4gUmlnaHQgbm93IHRoZXkgcnVuXG4gICAgICAvLyBvbmUgYWZ0ZXIgdGhlIG90aGVyLlxuICAgICAgaWYgKGluY2x1ZGVzT25seU5vblVyZ2VudExhbmVzKGxhbmVzKSkge1xuICAgICAgICAvLyB0aGUgc3VzcGVuc2V5IHJlc291cmNlcy4gVGhlIHJlbmRlcmVyIGlzIHJlc3BvbnNpYmxlIGZvciBhY2N1bXVsYXRpbmdcbiAgICAgICAgLy8gYWxsIHRoZSBsb2FkIGV2ZW50cy4gVGhpcyBhbGwgaGFwcGVucyBpbiBhIHNpbmdsZSBzeW5jaHJvbm91c1xuICAgICAgICAvLyB0cmFuc2FjdGlvbiwgc28gaXQgdHJhY2sgc3RhdGUgaW4gaXRzIG93biBtb2R1bGUgc2NvcGUuXG5cbiAgICAgICAgYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaW5pc2hlZFdvcmspOyAvLyBBdCB0aGUgZW5kLCBhc2sgdGhlIHJlbmRlcmVyIGlmIGl0J3MgcmVhZHkgdG8gY29tbWl0LCBvciBpZiB3ZSBzaG91bGRcbiAgICAgICAgLy8gc3VzcGVuZC4gSWYgaXQncyBub3QgcmVhZHksIGl0IHdpbGwgcmV0dXJuIGEgY2FsbGJhY2sgdG8gc3Vic2NyaWJlIHRvXG4gICAgICAgIC8vIGEgcmVhZHkgZXZlbnQuXG5cbiAgICAgICAgdmFyIHNjaGVkdWxlUGVuZGluZ0NvbW1pdCA9IHdhaXRGb3JDb21taXRUb0JlUmVhZHkoKTtcblxuICAgICAgICBpZiAoc2NoZWR1bGVQZW5kaW5nQ29tbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gTk9URTogd2FpdEZvckNvbW1pdFRvQmVSZWFkeSByZXR1cm5zIGEgc3Vic2NyaWJlIGZ1bmN0aW9uIHNvIHRoYXQgd2VcbiAgICAgICAgICAvLyBvbmx5IGFsbG9jYXRlIGEgZnVuY3Rpb24gaWYgdGhlIGNvbW1pdCBpc24ndCByZWFkeSB5ZXQuIFRoZSBvdGhlclxuICAgICAgICAgIC8vIHBhdHRlcm4gd291bGQgYmUgdG8gYWx3YXlzIHBhc3MgYSBjYWxsYmFjayB0byB3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5LlxuICAgICAgICAgIC8vIE5vdCB5ZXQgcmVhZHkgdG8gY29tbWl0LiBEZWxheSB0aGUgY29tbWl0IHVudGlsIHRoZSByZW5kZXJlciBub3RpZmllc1xuICAgICAgICAgIC8vIHVzIHRoYXQgaXQncyByZWFkeS4gVGhpcyB3aWxsIGJlIGNhbmNlbGVkIGlmIHdlIHN0YXJ0IHdvcmsgb24gdGhlXG4gICAgICAgICAgLy8gcm9vdCBhZ2Fpbi5cbiAgICAgICAgICByb290LmNhbmNlbFBlbmRpbmdDb21taXQgPSBzY2hlZHVsZVBlbmRpbmdDb21taXQoXG4gICAgICAgICAgICBjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCwgcmVjb3ZlcmFibGVFcnJvcnMsIHRyYW5zaXRpb25zKVxuICAgICAgICAgICk7XG4gICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIHNwYXduZWRMYW5lKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gLy8gT3RoZXJ3aXNlLCBjb21taXQgaW1tZWRpYXRlbHkuXG5cbiAgICAgIGNvbW1pdFJvb3Qocm9vdCwgcmVjb3ZlcmFibGVFcnJvcnMsIHRyYW5zaXRpb25zLCBzcGF3bmVkTGFuZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZpbmlzaGVkV29yaykge1xuICAgICAgLy8gU2VhcmNoIHRoZSByZW5kZXJlZCB0cmVlIGZvciBleHRlcm5hbCBzdG9yZSByZWFkcywgYW5kIGNoZWNrIHdoZXRoZXIgdGhlXG4gICAgICAvLyBzdG9yZXMgd2VyZSBtdXRhdGVkIGluIGEgY29uY3VycmVudCBldmVudC4gSW50ZW50aW9uYWxseSB1c2luZyBhbiBpdGVyYXRpdmVcbiAgICAgIC8vIGxvb3AgaW5zdGVhZCBvZiByZWN1cnNpb24gc28gd2UgY2FuIGV4aXQgZWFybHkuXG4gICAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBTdG9yZUNvbnNpc3RlbmN5KSB7XG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gbm9kZS51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGNoZWNrcyA9IHVwZGF0ZVF1ZXVlLnN0b3JlcztcblxuICAgICAgICAgICAgaWYgKGNoZWNrcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBjaGVjayA9IGNoZWNrc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgZ2V0U25hcHNob3QgPSBjaGVjay5nZXRTbmFwc2hvdDtcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyZWRWYWx1ZSA9IGNoZWNrLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGlmICghb2JqZWN0SXMoZ2V0U25hcHNob3QoKSwgcmVuZGVyZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgYW4gaW5jb25zaXN0ZW50IHN0b3JlLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIC8vIElmIGBnZXRTbmFwc2hvdGAgdGhyb3dzLCByZXR1cm4gYGZhbHNlYC4gVGhpcyB3aWxsIHNjaGVkdWxlXG4gICAgICAgICAgICAgICAgICAvLyBhIHJlLXJlbmRlciwgYW5kIHRoZSBlcnJvciB3aWxsIGJlIHJldGhyb3duIGR1cmluZyByZW5kZXIuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgICAgICBpZiAobm9kZS5zdWJ0cmVlRmxhZ3MgJiBTdG9yZUNvbnNpc3RlbmN5ICYmIGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICBub2RlID0gY2hpbGQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgIH0gLy8gRmxvdyBkb2Vzbid0IGtub3cgdGhpcyBpcyB1bnJlYWNoYWJsZSwgYnV0IGVzbGludCBkb2VzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMsIHNwYXduZWRMYW5lKSB7XG4gICAgICAvLyBXaGVuIHN1c3BlbmRpbmcsIHdlIHNob3VsZCBhbHdheXMgZXhjbHVkZSBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIG9yIChtb3JlXG4gICAgICAvLyByYXJlbHksIHNpbmNlIHdlIHRyeSB0byBhdm9pZCBpdCkgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIC8vIFRPRE86IExvbCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBmYWN0b3IgdGhpcyBiZXNpZGVzIHRoaXNcbiAgICAgIC8vIG9ibm94aW91c2x5IG5hbWVkIGZ1bmN0aW9uIDopXG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKFxuICAgICAgICBzdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXNcbiAgICAgICk7XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKFxuICAgICAgICBzdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXNcbiAgICAgICk7XG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzLCBzcGF3bmVkTGFuZSk7XG4gICAgfSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3luY2hyb25vdXMgdGFza3MgdGhhdCBkb24ndCBnb1xuICAgIC8vIHRocm91Z2ggU2NoZWR1bGVyXG5cbiAgICBmdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCwgbGFuZXMpIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICAgICAgaWYgKGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgLy8gSWYgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZCwgZXhpdCB0byB0aGUgb3V0ZXIgd29yayBsb29wIGluIHRoZSByb290XG4gICAgICAgIC8vIHNjaGVkdWxlciwgc28gd2UgY2FuIHJlY29tcHV0ZSB0aGUgcHJpb3JpdHkuXG4gICAgICAgIC8vIFRPRE86IFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhpcyBgZW5zdXJlUm9vdElzU2NoZWR1bGVkYCBjYWxsIGJlY2F1c2VcbiAgICAgICAgLy8gdGhpcyBwYXRoIGlzIG9ubHkgcmVhY2hhYmxlIGlmIHRoZSByb290IGlzIGFscmVhZHkgcGFydCBvZiB0aGUgc2NoZWR1bGUuXG4gICAgICAgIC8vIEknbSBpbmNsdWRpbmcgaXQgb25seSBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgZXhpdCBwb2ludHMgZnJvbVxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uLiBDYW4gYWRkcmVzcyBpbiBhIHN1YnNlcXVlbnQgcmVmYWN0b3IuXG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgc3luY05lc3RlZFVwZGF0ZUZsYWcoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG5cbiAgICAgIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG4gICAgICAgIHZhciBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMgPSBsYW5lcztcbiAgICAgICAgdmFyIGVycm9yUmV0cnlMYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGVycm9yUmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIGxhbmVzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgIGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMsXG4gICAgICAgICAgICBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCBOb0xhbmUpO1xuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RGlkTm90Q29tcGxldGUpIHtcbiAgICAgICAgLy8gVGhlIHJlbmRlciB1bndvdW5kIHdpdGhvdXQgY29tcGxldGluZyB0aGUgdHJlZS4gVGhpcyBoYXBwZW5zIGluIHNwZWNpYWxcbiAgICAgICAgLy8gY2FzZXMgd2hlcmUgbmVlZCB0byBleGl0IHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHByb2R1Y2luZyBhXG4gICAgICAgIC8vIGNvbnNpc3RlbnQgdHJlZSBvciBjb21taXR0aW5nLlxuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gQmVjYXVzZSB0aGlzIGlzIGEgc3luYyByZW5kZXIsIHdlXG4gICAgICAvLyB3aWxsIGNvbW1pdCBpdCBldmVuIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQuXG5cbiAgICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgICAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgICAgIGNvbW1pdFJvb3QoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgKTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAgICAgLy8gcGVuZGluZyBsZXZlbC5cblxuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gZXhlY3V0aW9uQ29udGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZm4oYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIElmIHRoZXJlIHdlcmUgbGVnYWN5IHN5bmMgdXBkYXRlcywgZmx1c2ggdGhlbSBhdCB0aGUgZW5kIG9mIHRoZSBvdXRlclxuICAgICAgICAvLyBtb3N0IGJhdGNoZWRVcGRhdGVzLWxpa2UgbWV0aG9kLlxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQgJiYgLy8gVHJlYXQgYGFjdGAgYXMgaWYgaXQncyBpbnNpZGUgYGJhdGNoZWRVcGRhdGVzYCwgZXZlbiBpbiBsZWdhY3kgbW9kZS5cbiAgICAgICAgICAhUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeVxuICAgICAgICApIHtcbiAgICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgICAgZmx1c2hTeW5jV29ya09uTGVnYWN5Um9vdHNPbmx5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gV2FybmluZywgdGhpcyBvcHRzLW91dCBvZiBjaGVja2luZyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG4gICAgZnVuY3Rpb24gZmx1c2hTeW5jKGZuKSB7XG4gICAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgZmx1c2ggcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAgIC8vIG5leHQgZXZlbnQsIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICBpZiAoXG4gICAgICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsICYmXG4gICAgICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzLnRhZyA9PT0gTGVnYWN5Um9vdCAmJlxuICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHRcbiAgICAgICkge1xuICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoRGlzY3JldGVFdmVudFByaW9yaXR5KTtcblxuICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgICAgICAvLyB0aGUgc3RhY2suXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09XG4gICAgICAgICAgTm9Db250ZXh0XG4gICAgICAgICkge1xuICAgICAgICAgIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gaGlkZGVuIHN1YnRyZWUuIFRoZSBzdGFjayBsb2dpYyBpcyBtYW5hZ2VkIHRoZXJlIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5XG4gICAgLy8gcGxhY2UgdGhhdCBldmVyIG1vZGlmaWVzIGl0LiBXaGljaCBtb2R1bGUgaXQgbGl2ZXMgaW4gZG9lc24ndCBtYXR0ZXIgZm9yXG4gICAgLy8gcGVyZm9ybWFuY2UgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IGlubGluZWQgcmVnYXJkbGVzc1xuXG4gICAgZnVuY3Rpb24gc2V0RW50YW5nbGVkUmVuZGVyTGFuZXMobmV3RW50YW5nbGVkUmVuZGVyTGFuZXMpIHtcbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gbmV3RW50YW5nbGVkUmVuZGVyTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEVudGFuZ2xlZFJlbmRlckxhbmVzKCkge1xuICAgICAgcmV0dXJuIGVudGFuZ2xlZFJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpIHtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgdmFyIGludGVycnVwdGVkV29yaztcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBOb3RTdXNwZW5kZWQpIHtcbiAgICAgICAgLy8gTm9ybWFsIGNhc2UuIFdvcmstaW4tcHJvZ3Jlc3MgaGFzbid0IHN0YXJ0ZWQgeWV0LiBVbndpbmQgYWxsXG4gICAgICAgIC8vIGl0cyBwYXJlbnRzLlxuICAgICAgICBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXb3JrLWluLXByb2dyZXNzIGlzIGluIHN1c3BlbmRlZCBzdGF0ZS4gUmVzZXQgdGhlIHdvcmsgbG9vcCBhbmQgdW53aW5kXG4gICAgICAgIC8vIGJvdGggdGhlIHN1c3BlbmRlZCBmaWJlciBhbmQgYWxsIGl0cyBwYXJlbnRzLlxuICAgICAgICByZXNldFN1c3BlbmRlZFdvcmtMb29wT25VbndpbmQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGludGVycnVwdGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IGludGVycnVwdGVkV29yay5hbHRlcm5hdGU7XG4gICAgICAgIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgICAgIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICAgICAgaWYgKHRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dCkge1xuICAgICAgICAvLyBUaGUgcm9vdCBwcmV2aW91cyBzdXNwZW5kZWQgYW5kIHNjaGVkdWxlZCBhIHRpbWVvdXQgdG8gY29tbWl0IGEgZmFsbGJhY2tcbiAgICAgICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gQ29tcGxhaW5zIG5vVGltZW91dCBpcyBub3QgYSBUaW1lb3V0SUQsIGRlc3BpdGUgdGhlIGNoZWNrIGFib3ZlXG5cbiAgICAgICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbmNlbFBlbmRpbmdDb21taXQgPSByb290LmNhbmNlbFBlbmRpbmdDb21taXQ7XG5cbiAgICAgIGlmIChjYW5jZWxQZW5kaW5nQ29tbWl0ICE9PSBudWxsKSB7XG4gICAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gICAgICAgIGNhbmNlbFBlbmRpbmdDb21taXQoKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgdmFyIHJvb3RXb3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJvb3QuY3VycmVudCwgbnVsbCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJvb3RXb3JrSW5Qcm9ncmVzcztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gbGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gZmFsc2U7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluUHJvZ3Jlc3M7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IE5vTGFuZTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsOyAvLyBHZXQgdGhlIGxhbmVzIHRoYXQgYXJlIGVudGFuZ2xlZCB3aXRoIHdoYXRldmVyIHdlJ3JlIGFib3V0IHRvIHJlbmRlci4gV2VcbiAgICAgIC8vIHRyYWNrIHRoZXNlIHNlcGFyYXRlbHkgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZSBwcmlvcml0eSBvZiB0aGUgcmVuZGVyXG4gICAgICAvLyB0YXNrIGZyb20gdGhlIHByaW9yaXR5IG9mIHRoZSBsYW5lcyBpdCBpcyBlbnRhbmdsZWQgd2l0aC4gRm9yIGV4YW1wbGUsIGFcbiAgICAgIC8vIHRyYW5zaXRpb24gbWF5IG5vdCBiZSBhbGxvd2VkIHRvIGZpbmlzaCB1bmxlc3MgaXQgaW5jbHVkZXMgdGhlIFN5bmMgbGFuZSxcbiAgICAgIC8vIHdoaWNoIGlzIGN1cnJlbnRseSBzdXNwZW5kZWQuIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbmRlciB0aGUgVHJhbnNpdGlvblxuICAgICAgLy8gYW5kIFN5bmMgbGFuZSBpbiB0aGUgc2FtZSBiYXRjaCwgYnV0IGF0IFRyYW5zaXRpb24gcHJpb3JpdHksIGJlY2F1c2UgdGhlXG4gICAgICAvLyBTeW5jIGxhbmUgYWxyZWFkeSBzdXNwZW5kZWQuXG5cbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gZ2V0RW50YW5nbGVkTGFuZXMocm9vdCwgbGFuZXMpO1xuICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuXG4gICAgICB7XG4gICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvb3RXb3JrSW5Qcm9ncmVzcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNldFN1c3BlbmRlZFdvcmtMb29wT25VbndpbmQoZmliZXIpIHtcbiAgICAgIC8vIFJlc2V0IG1vZHVsZS1sZXZlbCBzdGF0ZSB0aGF0IHdhcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NPblVud2luZChmaWJlcik7XG4gICAgICByZXNldENoaWxkUmVjb25jaWxlck9uVW53aW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgICAgIC8vIEEgY29tcG9uZW50IHRocmV3IGFuIGV4Y2VwdGlvbi4gVXN1YWxseSB0aGlzIGlzIGJlY2F1c2UgaXQgc3VzcGVuZGVkLCBidXRcbiAgICAgIC8vIGl0IGFsc28gaW5jbHVkZXMgcmVndWxhciBwcm9ncmFtIGVycm9ycy5cbiAgICAgIC8vXG4gICAgICAvLyBXZSdyZSBlaXRoZXIgZ29pbmcgdG8gdW53aW5kIHRoZSBzdGFjayB0byBzaG93IGEgU3VzcGVuc2Ugb3IgZXJyb3JcbiAgICAgIC8vIGJvdW5kYXJ5LCBvciB3ZSdyZSBnb2luZyB0byByZXBsYXkgdGhlIGNvbXBvbmVudCBhZ2Fpbi4gTGlrZSBhZnRlciBhXG4gICAgICAvLyBwcm9taXNlIHJlc29sdmVzLlxuICAgICAgLy9cbiAgICAgIC8vIFVudGlsIHdlIGRlY2lkZSB3aGV0aGVyIHdlJ3JlIGdvaW5nIHRvIHVud2luZCBvciByZXBsYXksIHdlIHNob3VsZCBwcmVzZXJ2ZVxuICAgICAgLy8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHdvcmsgbG9vcCB3aXRob3V0IHJlc2V0dGluZyBhbnl0aGluZy5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBkbyBkZWNpZGUgdG8gdW53aW5kIHRoZSBzdGFjaywgbW9kdWxlLWxldmVsIHZhcmlhYmxlcyB3aWxsIGJlIHJlc2V0XG4gICAgICAvLyBpbiByZXNldFN1c3BlbmRlZFdvcmtMb29wT25VbndpbmQuXG4gICAgICAvLyBUaGVzZSBzaG91bGQgYmUgcmVzZXQgaW1tZWRpYXRlbHkgYmVjYXVzZSB0aGV5J3JlIG9ubHkgc3VwcG9zZWQgdG8gYmUgc2V0XG4gICAgICAvLyB3aGVuIFJlYWN0IGlzIGV4ZWN1dGluZyB1c2VyIGNvZGUuXG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIGlmICh0aHJvd25WYWx1ZSA9PT0gU3VzcGVuc2VFeGNlcHRpb24pIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgdHlwZSBvZiBleGNlcHRpb24gdXNlZCBmb3IgU3VzcGVuc2UuIEZvciBoaXN0b3JpY2FsXG4gICAgICAgIC8vIHJlYXNvbnMsIHRoZSByZXN0IG9mIHRoZSBTdXNwZW5zZSBpbXBsZW1lbnRhdGlvbiBleHBlY3RzIHRoZSB0aHJvd24gdmFsdWVcbiAgICAgICAgLy8gdG8gYmUgYSB0aGVuYWJsZSwgYmVjYXVzZSBiZWZvcmUgYHVzZWAgZXhpc3RlZCB0aGF0IHdhcyB0aGUgKHVuc3RhYmxlKVxuICAgICAgICAvLyBBUEkgZm9yIHN1c3BlbmRpbmcuIFRoaXMgaW1wbGVtZW50YXRpb24gZGV0YWlsIGNhbiBjaGFuZ2UgbGF0ZXIsIG9uY2Ugd2VcbiAgICAgICAgLy8gZGVwcmVjYXRlIHRoZSBvbGQgQVBJIGluIGZhdm9yIG9mIGB1c2VgLlxuICAgICAgICB0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgICBzaG91bGRSZW1haW5PblByZXZpb3VzU2NyZWVuKCkgJiYgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHBlbmRpbmcgdXBkYXRlcyB0aGF0IG1pZ2h0IHBvc3NpYmx5IHVuYmxvY2sgdGhpc1xuICAgICAgICAgIC8vIGNvbXBvbmVudCBmcm9tIHN1c3BlbmRpbmcuIFRoaXMgbWlycm9ycyB0aGUgY2hlY2sgaW5cbiAgICAgICAgICAvLyByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlLiBXZSBzaG91bGQgYXR0ZW1wdCB0byB1bmlmeSB0aGVtIHNvbWVob3cuXG4gICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgdW53aW5kaW5nIGltbWVkaWF0ZWx5LCB1c2luZyB0aGVcbiAgICAgICAgICAvLyBTdXNwZW5kZWRPbkh5ZHJhdGlvbiBtZWNoYW5pc20uXG4gICAgICAgICAgIWluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKSAmJlxuICAgICAgICAgICFpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzKSAvLyBTdXNwZW5kIHdvcmsgbG9vcCB1bnRpbCBkYXRhIHJlc29sdmVzXG4gICAgICAgICAgICA/IFN1c3BlbmRlZE9uRGF0YSAvLyBEb24ndCBzdXNwZW5kIHdvcmsgbG9vcCwgZXhjZXB0IHRvIGNoZWNrIGlmIHRoZSBkYXRhIGhhc1xuICAgICAgICAgICAgOiAvLyBpbW1lZGlhdGVseSByZXNvbHZlZCAoaS5lLiBpbiBhIG1pY3JvdGFzaykuIE90aGVyd2lzZSwgdHJpZ2dlciB0aGVcbiAgICAgICAgICAgICAgLy8gbmVhcmVzdCBTdXNwZW5zZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgU3VzcGVuZGVkT25JbW1lZGlhdGU7XG4gICAgICB9IGVsc2UgaWYgKHRocm93blZhbHVlID09PSBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZE9uSW5zdGFuY2U7XG4gICAgICB9IGVsc2UgaWYgKHRocm93blZhbHVlID09PSBTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb24pIHtcbiAgICAgICAgLy8gQW4gdXBkYXRlIGZsb3dlZCBpbnRvIGEgZGVoeWRyYXRlZCBib3VuZGFyeS4gQmVmb3JlIHdlIGNhbiBhcHBseSB0aGVcbiAgICAgICAgLy8gdXBkYXRlLCB3ZSBuZWVkIHRvIGZpbmlzaCBoeWRyYXRpbmcuIEludGVycnVwdCB0aGUgd29yay1pbi1wcm9ncmVzc1xuICAgICAgICAvLyByZW5kZXIgc28gd2UgY2FuIHJlc3RhcnQgYXQgdGhlIGh5ZHJhdGlvbiBsYW5lLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgaWRlYWwgaW1wbGVtZW50YXRpb24gd291bGQgYmUgYWJsZSB0byBzd2l0Y2ggY29udGV4dHMgd2l0aG91dFxuICAgICAgICAvLyB1bndpbmRpbmcgdGhlIGN1cnJlbnQgc3RhY2suXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGNvdWxkIG5hbWUgdGhpcyBzb21ldGhpbmcgbW9yZSBnZW5lcmFsIGJ1dCBhcyBvZiBub3cgaXQncyB0aGUgb25seVxuICAgICAgICAvLyBjYXNlIHdoZXJlIHdlIHRoaW5rIHRoaXMgc2hvdWxkIGhhcHBlbi5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSByZWd1bGFyIGVycm9yLlxuICAgICAgICB2YXIgaXNXYWtlYWJsZSA9XG4gICAgICAgICAgdGhyb3duVmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgdGhyb3duVmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICB0eXBlb2YgdGhyb3duVmFsdWUudGhlbiA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IGlzV2FrZWFibGUgLy8gQSB3YWtlYWJsZSBvYmplY3Qgd2FzIHRocm93biBieSBhIGxlZ2FjeSBTdXNwZW5zZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICA/IC8vIFRoaXMgaGFzIHNsaWdodGx5IGRpZmZlcmVudCBiZWhhdmlvciB0aGFuIHN1c3BlbmRpbmcgd2l0aCBgdXNlYC5cbiAgICAgICAgICAgIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZSAvLyBUaGlzIGlzIGEgcmVndWxhciBlcnJvci4gSWYgc29tZXRoaW5nIGVhcmxpZXIgaW4gdGhlIGNvbXBvbmVudCBhbHJlYWR5XG4gICAgICAgICAgOiAvLyBzdXNwZW5kZWQsIHdlIG11c3QgY2xlYXIgdGhlIHRoZW5hYmxlIHN0YXRlIHRvIHVuYmxvY2sgdGhlIHdvcmsgbG9vcC5cbiAgICAgICAgICAgIFN1c3BlbmRlZE9uRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSB0aHJvd25WYWx1ZTtcbiAgICAgIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgICBpZiAoZXJyb3JlZFdvcmsgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIGZhdGFsIGVycm9yXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHRpbWUgc3BlbnQgcmVuZGVyaW5nIGJlZm9yZSBhbiBlcnJvciB3YXMgdGhyb3duLiBUaGlzXG4gICAgICAgIC8vIGF2b2lkcyBpbmFjY3VyYXRlIFByb2ZpbGVyIGR1cmF0aW9ucyBpbiB0aGUgY2FzZSBvZiBhXG4gICAgICAgIC8vIHN1c3BlbmRlZCByZW5kZXIuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZXJyb3JlZFdvcmssIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uUHJldmlvdXNTY3JlZW4oKSB7XG4gICAgICAvLyBUaGlzIGlzIGFza2luZyB3aGV0aGVyIGl0J3MgYmV0dGVyIHRvIHN1c3BlbmQgdGhlIHRyYW5zaXRpb24gYW5kIHJlbWFpblxuICAgICAgLy8gb24gdGhlIHByZXZpb3VzIHNjcmVlbiwgdmVyc3VzIHNob3dpbmcgYSBmYWxsYmFjayBhcyBzb29uIGFzIHBvc3NpYmxlLiBJdFxuICAgICAgLy8gdGFrZXMgaW50byBhY2NvdW50IGJvdGggdGhlIHByaW9yaXR5IG9mIHJlbmRlciBhbmQgYWxzbyB3aGV0aGVyIHNob3dpbmcgYVxuICAgICAgLy8gZmFsbGJhY2sgd291bGQgcHJvZHVjZSBhIGRlc2lyYWJsZSB1c2VyIGV4cGVyaWVuY2UuXG4gICAgICB2YXIgaGFuZGxlciA9IGdldFN1c3BlbnNlSGFuZGxlcigpO1xuXG4gICAgICBpZiAoaGFuZGxlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGVyZSdzIG5vIFN1c3BlbnNlIGJvdW5kYXJ5IHRoYXQgY2FuIHByb3ZpZGUgYSBmYWxsYmFjay4gV2UgaGF2ZSBub1xuICAgICAgICAvLyBjaG9pY2UgYnV0IHRvIHJlbWFpbiBvbiB0aGUgcHJldmlvdXMgc2NyZWVuLlxuICAgICAgICAvLyBOT1RFOiBXZSBkbyB0aGlzIGV2ZW4gZm9yIHN5bmMgdXBkYXRlcywgZm9yIGxhY2sgb2YgYW55IGJldHRlciBvcHRpb24uIEluXG4gICAgICAgIC8vIHRoZSBmdXR1cmUsIHdlIG1heSBjaGFuZ2UgaG93IHdlIGhhbmRsZSB0aGlzLCBsaWtlIGJ5IHB1dHRpbmcgdGhlIHdob2xlXG4gICAgICAgIC8vIHJvb3QgaW50byBhIFwiZGV0YWNoZWRcIiBtb2RlLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gVE9ETzogT25jZSBgdXNlYCBoYXMgZnVsbHkgcmVwbGFjZWQgdGhlIGB0aHJvdyBwcm9taXNlYCBwYXR0ZXJuLCB3ZSBzaG91bGRcbiAgICAgIC8vIGJlIGFibGUgdG8gcmVtb3ZlIHRoZSBlcXVpdmFsZW50IGNoZWNrIGluIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIsIGFuZCByZWx5XG4gICAgICAvLyBqdXN0IG9uIHRoaXMgb25lLlxuXG4gICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIGlmIChnZXRTaGVsbEJvdW5kYXJ5KCkgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSByZW5kZXJpbmcgaW5zaWRlIHRoZSBcInNoZWxsXCIgb2YgdGhlIGFwcC4gQWN0aXZhdGluZyB0aGUgbmVhcmVzdFxuICAgICAgICAgIC8vIGZhbGxiYWNrIHdvdWxkIGNhdXNlIHZpc2libGUgY29udGVudCB0byBkaXNhcHBlYXIuIEl0J3MgYmV0dGVyIHRvXG4gICAgICAgICAgLy8gc3VzcGVuZCB0aGUgdHJhbnNpdGlvbiBhbmQgcmVtYWluIG9uIHRoZSBwcmV2aW91cyBzY3JlZW4uXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2UncmUgcmVuZGVyaW5nIGNvbnRlbnQgdGhhdCB3YXNuJ3QgcGFydCBvZiB0aGUgcHJldmlvdXMgc2NyZWVuLlxuICAgICAgICAgIC8vIFJhdGhlciB0aGFuIGJsb2NrIHRoZSB0cmFuc2l0aW9uLCBpdCdzIGJldHRlciB0byBzaG93IGEgZmFsbGJhY2sgYXNcbiAgICAgICAgICAvLyBzb29uIGFzIHBvc3NpYmxlLiBUaGUgYXBwZWFyYW5jZSBvZiBhbnkgbmVzdGVkIGZhbGxiYWNrcyB3aWxsIGJlXG4gICAgICAgICAgLy8gdGhyb3R0bGVkIHRvIGF2b2lkIGphbmsuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgfHwgLy8gSW4gdGhpcyBjb250ZXh0LCBhbiBPZmZzY3JlZW5MYW5lIGNvdW50cyBhcyBhIFJldHJ5XG4gICAgICAgIC8vIFRPRE86IEl0J3MgYmVjb21lIGluY3JlYXNpbmdseSBjbGVhciB0aGF0IFJldHJpZXMgYW5kIE9mZnNjcmVlbiBhcmVcbiAgICAgICAgLy8gZGVlcGx5IGNvbm5lY3RlZC4gVGhleSBwcm9iYWJseSBjYW4gYmUgdW5pZmllZCBmdXJ0aGVyLlxuICAgICAgICBpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKVxuICAgICAgKSB7XG4gICAgICAgIC8vIER1cmluZyBhIHJldHJ5LCB3ZSBjYW4gc3VzcGVuZCByZW5kZXJpbmcgaWYgdGhlIG5lYXJlc3QgU3VzcGVuc2UgYm91bmRhcnlcbiAgICAgICAgLy8gaXMgdGhlIGJvdW5kYXJ5IG9mIHRoZSBcInNoZWxsXCIsIGJlY2F1c2Ugd2UncmUgZ3VhcmFudGVlZCBub3QgdG8gYmxvY2tcbiAgICAgICAgLy8gYW55IG5ldyBjb250ZW50IGZyb20gYXBwZWFyaW5nLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgcmVhc29uIHdlIG11c3QgY2hlY2sgaWYgdGhpcyBpcyBhIHJldHJ5IGlzIGJlY2F1c2UgaXQgZ3VhcmFudGVlc1xuICAgICAgICAvLyB0aGF0IHN1c3BlbmRpbmcgdGhlIHdvcmsgbG9vcCB3b24ndCBibG9jayBhbiBhY3R1YWwgdXBkYXRlLCBiZWNhdXNlXG4gICAgICAgIC8vIHJldHJpZXMgZG9uJ3QgXCJ1cGRhdGVcIiBhbnl0aGluZzsgdGhleSBmaWxsIGluIGZhbGxiYWNrcyB0aGF0IHdlcmUgbGVmdFxuICAgICAgICAvLyBiZWhpbmQgYnkgYSBwcmV2aW91cyB0cmFuc2l0aW9uLlxuICAgICAgICByZXR1cm4gaGFuZGxlciA9PT0gZ2V0U2hlbGxCb3VuZGFyeSgpO1xuICAgICAgfSAvLyBGb3IgYWxsIG90aGVyIExhbmVzIGJlc2lkZXMgVHJhbnNpdGlvbnMgYW5kIFJldHJpZXMsIHdlIHNob3VsZCBub3Qgd2FpdFxuICAgICAgLy8gZm9yIHRoZSBkYXRhIHRvIGxvYWQuXG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcihjb250YWluZXIpIHtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICAgICAgaWYgKHByZXZEaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAgICAgLy8gSW5zdGVhZCB0aGUgZmlyc3QgcmVuZGVyZXIgd2lsbCBsYXppbHkgYXR0YWNoIG9uZSwgaW4gb3JkZXIgdG8gZ2l2ZVxuICAgICAgICAvLyBuaWNlciBlcnJvciBtZXNzYWdlcy5cbiAgICAgICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gICAgICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93JDEoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1NraXBwZWRVcGRhdGVMYW5lcyhsYW5lKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKFxuICAgICAgICBsYW5lLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmQoKSB7XG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTsgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHRyZWUgdGhhdCBtaWdodCBoYXZlIHVuYmxvY2tlZFxuICAgICAgLy8gdGhpcyByZW5kZXIuXG5cbiAgICAgIGlmIChcbiAgICAgICAgKGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKSB8fFxuICAgICAgICAgIGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMpKSAmJlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgc28gdGhhdCB3ZSBzd2l0Y2ggdG8gd29ya2luZyBvblxuICAgICAgICAvLyB0aGUgdXBkYXRlcyB0aGF0IHdlcmUgc2tpcHBlZC4gVXN1YWxseSB3ZSBvbmx5IHN1c3BlbmQgYXQgdGhlIGVuZCBvZlxuICAgICAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWx3YXlzIG1hcmsgdGhlIHJvb3QgYXMgc3VzcGVuZGVkIGltbWVkaWF0ZWx5XG4gICAgICAgIC8vIChpbnNpZGUgdGhpcyBmdW5jdGlvbiksIHNpbmNlIGJ5IHN1c3BlbmRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyXG4gICAgICAgIC8vIHBoYXNlIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgbWlzdGFrZSB3aGVyZSB3ZSBzdXNwZW5kIGxhbmVzIHRoYXQgd2VyZVxuICAgICAgICAvLyBwaW5nZWQgb3IgdXBkYXRlZCB3aGlsZSB3ZSB3ZXJlIHJlbmRlcmluZy5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgdW53aW5kaW5nIGltbWVkaWF0ZWx5LCB1c2luZyB0aGVcbiAgICAgICAgLy8gU3VzcGVuZGVkT25IeWRyYXRpb24gbWVjaGFuaXNtLlxuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyRGlkRXJyb3IoZXJyb3IpIHtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290U3VzcGVuZGVkV2l0aERlbGF5KSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPT09IG51bGwpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IFtlcnJvcl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgIH0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4gICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSdyZSBub3Qgc3VyZS5cblxuICAgIGZ1bmN0aW9uIHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpIHtcbiAgICAgIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gICAgICAvLyBzbyB0aG9zZSBhcmUgZmFsc2UuXG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3M7XG4gICAgfSAvLyBUT0RPOiBPdmVyIHRpbWUsIHRoaXMgZnVuY3Rpb24gYW5kIHJlbmRlclJvb3RDb25jdXJyZW50IGhhdmUgYmVjb21lIG1vcmVcbiAgICAvLyBhbmQgbW9yZSBzaW1pbGFyLiBOb3Qgc3VyZSBpdCBtYWtlcyBzZW5zZSB0byBtYWludGFpbiBmb3JrZWQgcGF0aHMuIENvbnNpZGVyXG4gICAgLy8gdW5pZnlpbmcgdGhlbSBhZ2Fpbi5cblxuICAgIGZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKSB7XG4gICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTtcbiAgICAgIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgICAgIGlmIChcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICAgIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuXG4gICAgICAgICAgICBpZiAobWVtb2l6ZWRVcGRhdGVycy5zaXplID4gMCkge1xuICAgICAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycy5jbGVhcigpO1xuICAgICAgICAgICAgfSAvLyBBdCB0aGlzIHBvaW50LCBtb3ZlIEZpYmVycyB0aGF0IHNjaGVkdWxlZCB0aGUgdXBjb21pbmcgd29yayBmcm9tIHRoZSBNYXAgdG8gdGhlIFNldC5cbiAgICAgICAgICAgIC8vIElmIHdlIGJhaWxvdXQgb24gdGhpcyB3b3JrLCB3ZSdsbCBtb3ZlIHRoZW0gYmFjayAobGlrZSBhYm92ZSkuXG4gICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtb3ZlIHRoZW0gbm93IGluIGNhc2UgdGhlIHdvcmsgc3Bhd25zIG1vcmUgd29yayBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoIGRpZmZlcmVudCB1cGRhdGVycy5cbiAgICAgICAgICAgIC8vIFRoYXQgd2F5IHdlIGNhbiBrZWVwIHRoZSBjdXJyZW50IHVwZGF0ZSBhbmQgZnV0dXJlIHVwZGF0ZXMgc2VwYXJhdGUuXG5cbiAgICAgICAgICAgIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IGdldFRyYW5zaXRpb25zRm9yTGFuZXMoKTtcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlkU3VzcGVuZEluU2hlbGwgPSBmYWxzZTtcblxuICAgICAgb3V0ZXI6IGRvIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gTm90U3VzcGVuZGVkICYmXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhlIHdvcmsgbG9vcCBpcyBzdXNwZW5kZWQuIER1cmluZyBhIHN5bmNocm9ub3VzIHJlbmRlciwgd2UgZG9uJ3RcbiAgICAgICAgICAgIC8vIHlpZWxkIHRvIHRoZSBtYWluIHRocmVhZC4gSW1tZWRpYXRlbHkgdW53aW5kIHRoZSBzdGFjay4gVGhpcyB3aWxsXG4gICAgICAgICAgICAvLyB0cmlnZ2VyIGVpdGhlciBhIGZhbGxiYWNrIG9yIGFuIGVycm9yIGJvdW5kYXJ5LlxuICAgICAgICAgICAgLy8gVE9ETzogRm9yIGRpc2NyZXRlIGFuZCBcImRlZmF1bHRcIiB1cGRhdGVzIChhbnl0aGluZyB0aGF0J3Mgbm90XG4gICAgICAgICAgICAvLyBmbHVzaFN5bmMpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRoZSBtaWNyb3Rhc2tzIHRoZSBmbHVzaCBiZWZvcmVcbiAgICAgICAgICAgIC8vIHVud2luZGluZy4gV2lsbCBwcm9iYWJseSBpbXBsZW1lbnQgdGhpcyB1c2luZyByZW5kZXJSb290Q29uY3VycmVudCxcbiAgICAgICAgICAgIC8vIG9yIG1lcmdlIHJlbmRlclJvb3RTeW5jIGFuZCByZW5kZXJSb290Q29uY3VycmVudCBpbnRvIHRoZSBzYW1lXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBhbmQgZm9yayB0aGUgYmVoYXZpb3Igc29tZSBvdGhlciB3YXkuXG4gICAgICAgICAgICB2YXIgdW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgdmFyIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcblxuICAgICAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSHlkcmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgLy8gU2VsZWN0aXZlIGh5ZHJhdGlvbi4gQW4gdXBkYXRlIGZsb3dlZCBpbnRvIGEgZGVoeWRyYXRlZCB0cmVlLlxuICAgICAgICAgICAgICAgIC8vIEludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIgc28gdGhlIHdvcmsgbG9vcCBjYW4gc3dpdGNoIHRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGh5ZHJhdGlvbiBsYW5lLlxuICAgICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RGlkTm90Q29tcGxldGU7XG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOlxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGF0YToge1xuICAgICAgICAgICAgICAgIGlmICghZGlkU3VzcGVuZEluU2hlbGwgJiYgZ2V0U3VzcGVuc2VIYW5kbGVyKCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRJblNoZWxsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgLy8gVW53aW5kIHRoZW4gY29udGludWUgd2l0aCB0aGUgbm9ybWFsIHdvcmsgbG9vcC5cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHJvb3QsIHVuaXRPZldvcmssIHRocm93blZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgICAgIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodHJ1ZSk7IC8vIENoZWNrIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQgaW4gdGhlIHNoZWxsLiBXZSB1c2UgdGhpcyB0byBkZXRlY3QgYW5cbiAgICAgIC8vIGluZmluaXRlIHBpbmcgbG9vcCBjYXVzZWQgYnkgYW4gdW5jYWNoZWQgcHJvbWlzZS5cbiAgICAgIC8vXG4gICAgICAvLyBPbmx5IGluY3JlbWVudCB0aGlzIGNvdW50ZXIgb25jZSBwZXIgc3luY2hyb25vdXMgcmVuZGVyIGF0dGVtcHQgYWNyb3NzIHRoZVxuICAgICAgLy8gd2hvbGUgdHJlZS4gRXZlbiBpZiB0aGVyZSBhcmUgbWFueSBzaWJsaW5nIGNvbXBvbmVudHMgdGhhdCBzdXNwZW5kLCB0aGlzXG4gICAgICAvLyBjb3VudGVyIG9ubHkgZ2V0cyBpbmNyZW1lbnRlZCBvbmNlLlxuXG4gICAgICBpZiAoZGlkU3VzcGVuZEluU2hlbGwpIHtcbiAgICAgICAgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyKys7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICAgICAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgY29tbWl0IGFuIGluY29tcGxldGUgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgXCIgK1xuICAgICAgICAgICAgXCJidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIEl0J3Mgc2FmZSB0byBwcm9jZXNzIHRoZSBxdWV1ZSBub3cgdGhhdCB0aGUgcmVuZGVyIHBoYXNlIGlzIGNvbXBsZXRlLlxuXG4gICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICB9IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuICAgIC8qKiBAbm9pbmxpbmUgKi9cblxuICAgIGZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgICAgIC8vIFBlcmZvcm0gd29yayB3aXRob3V0IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8geWllbGQgYmV0d2VlbiBmaWJlci5cbiAgICAgIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgICAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIHtcbiAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpO1xuICAgICAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICAgICAgaWYgKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzXG4gICAgICApIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG5cbiAgICAgICAgICAgIGlmIChtZW1vaXplZFVwZGF0ZXJzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICAgICAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIG1vdmUgRmliZXJzIHRoYXQgc2NoZWR1bGVkIHRoZSB1cGNvbWluZyB3b3JrIGZyb20gdGhlIE1hcCB0byB0aGUgU2V0LlxuICAgICAgICAgICAgLy8gSWYgd2UgYmFpbG91dCBvbiB0aGlzIHdvcmssIHdlJ2xsIG1vdmUgdGhlbSBiYWNrIChsaWtlIGFib3ZlKS5cbiAgICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1vdmUgdGhlbSBub3cgaW4gY2FzZSB0aGUgd29yayBzcGF3bnMgbW9yZSB3b3JrIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGggZGlmZmVyZW50IHVwZGF0ZXJzLlxuICAgICAgICAgICAgLy8gVGhhdCB3YXkgd2UgY2FuIGtlZXAgdGhlIGN1cnJlbnQgdXBkYXRlIGFuZCBmdXR1cmUgdXBkYXRlcyBzZXBhcmF0ZS5cblxuICAgICAgICAgICAgbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gZ2V0VHJhbnNpdGlvbnNGb3JMYW5lcygpO1xuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgb3V0ZXI6IGRvIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gTm90U3VzcGVuZGVkICYmXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhlIHdvcmsgbG9vcCBpcyBzdXNwZW5kZWQuIFdlIG5lZWQgdG8gZWl0aGVyIHVud2luZCB0aGUgc3RhY2sgb3JcbiAgICAgICAgICAgIC8vIHJlcGxheSB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudC5cbiAgICAgICAgICAgIHZhciB1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICB2YXIgdGhyb3duVmFsdWUgPSB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlO1xuXG4gICAgICAgICAgICByZXN1bWVPclVud2luZDogc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRXJyb3I6IHtcbiAgICAgICAgICAgICAgICAvLyBVbndpbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBub3JtYWwgd29yayBsb29wLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6IHtcbiAgICAgICAgICAgICAgICB2YXIgdGhlbmFibGUgPSB0aHJvd25WYWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlUmVzb2x2ZWQodGhlbmFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgZGF0YSByZXNvbHZlZC4gVHJ5IHJlbmRlcmluZyB0aGUgY29tcG9uZW50IGFnYWluLlxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IC8vIFRoZSB3b3JrIGxvb3AgaXMgc3VzcGVuZGVkIG9uIGRhdGEuIFdlIHNob3VsZCB3YWl0IGZvciBpdCB0b1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgYmVmb3JlIGNvbnRpbnVpbmcgdG8gcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvbWlzZSByZXNvbHZlcyBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgICAgIC8vIFVzdWFsbHkgdGhpcyBpcyBoYW5kbGVkIHdoZW4gd2UgaW5zdHJ1bWVudCB0aGUgcHJvbWlzZSB0byBhZGQgYVxuICAgICAgICAgICAgICAgIC8vIGBzdGF0dXNgIGZpZWxkLCBidXQgaWYgdGhlIHByb21pc2UgYWxyZWFkeSBoYXMgYSBzdGF0dXMsIHdlIHdvbid0XG4gICAgICAgICAgICAgICAgLy8gaGF2ZSBhZGRlZCBhIGxpc3RlbmVyIHVudGlsIHJpZ2h0IGhlcmUuXG5cbiAgICAgICAgICAgICAgICB2YXIgb25SZXNvbHV0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJvb3QgaXMgc3RpbGwgc3VzcGVuZGVkIG9uIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3RcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIHRoZSByb290IGFzIHJlYWR5IHRvIGNvbnRpbnVlIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgICAgICB9IC8vIEVuc3VyZSB0aGUgcm9vdCBpcyBzY2hlZHVsZWQuIFdlIHNob3VsZCBkbyB0aGlzIGV2ZW4gaWYgd2UncmVcbiAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSB3b3JraW5nIG9uIGEgZGlmZmVyZW50IHJvb3QsIHNvIHRoYXQgd2UgcmVzdW1lXG4gICAgICAgICAgICAgICAgICAvLyByZW5kZXJpbmcgbGF0ZXIuXG5cbiAgICAgICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhlbmFibGUudGhlbihvblJlc29sdXRpb24sIG9uUmVzb2x1dGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmaWJlciBqdXN0IHN1c3BlbmRlZCwgaXQncyBwb3NzaWJsZSB0aGUgZGF0YSBpcyBhbHJlYWR5XG4gICAgICAgICAgICAgICAgLy8gY2FjaGVkLiBZaWVsZCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2l2ZSBpdCBhIGNoYW5jZSB0byBwaW5nLiBJZlxuICAgICAgICAgICAgICAgIC8vIGl0IGRvZXMsIHdlIGNhbiByZXRyeSBpbW1lZGlhdGVseSB3aXRob3V0IHVud2luZGluZyB0aGUgc3RhY2suXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW5zdGFuY2U6IHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9XG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU6IHtcbiAgICAgICAgICAgICAgICB2YXIgX3RoZW5hYmxlID0gdGhyb3duVmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZVJlc29sdmVkKF90aGVuYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRhIHJlc29sdmVkLiBUcnkgcmVuZGVyaW5nIHRoZSBjb21wb25lbnQgYWdhaW4uXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1bndpbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBub3JtYWwgd29yayBsb29wLlxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlOiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjoge1xuICAgICAgICAgICAgICAgICAgICAvLyBCZWZvcmUgdW53aW5kaW5nIHRoZSBzdGFjaywgY2hlY2sgb25lIG1vcmUgdGltZSBpZiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5zdGFuY2UgaXMgcmVhZHkuIEl0IG1heSBoYXZlIGxvYWRlZCB3aGVuIFJlYWN0IHlpZWxkZWQgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1haW4gdGhyZWFkLlxuICAgICAgICAgICAgICAgICAgICAvLyBBc3NpZ25pbmcgdGhpcyB0byBhIGNvbnN0YW50IHNvIEZsb3cga25vd3MgdGhlIGJpbmRpbmcgd29uJ3RcbiAgICAgICAgICAgICAgICAgICAgLy8gYmUgbXV0YXRlZCBieSBgcHJlbG9hZEluc3RhbmNlYC5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3RGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGhvc3RGaWJlci50eXBlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBob3N0RmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZWFkeSA9IHByZWxvYWRJbnN0YW5jZSh0eXBlLCBwcm9wcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGF0YSByZXNvbHZlZC4gUmVzdW1lIHRoZSB3b3JrIGxvb3AgYXMgaWYgbm90aGluZ1xuICAgICAgICAgICAgICAgICAgICAgIC8vIHN1c3BlbmRlZC4gVW5saWtlIHdoZW4gYSB1c2VyIGNvbXBvbmVudCBzdXNwZW5kcywgd2UgZG9uJ3RcbiAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIHJlcGxheSBhbnl0aGluZyBiZWNhdXNlIHRoZSBob3N0IGZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBjb21wbGV0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBob3N0RmliZXIuc2libGluZztcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5GaWJlciA9IGhvc3RGaWJlci5yZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsocmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHJlc3VtZU9yVW53aW5kO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGZhaWwgZ3JhY2VmdWxseSBidXQgaXQncyBub3QgY29ycmVjdCwgc28gbG9nIGFcbiAgICAgICAgICAgICAgICAgICAgLy8gd2FybmluZyBpbiBkZXYuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgdHlwZSBvZiBmaWJlciB0cmlnZ2VyZWQgYSBzdXNwZW5zZXkgY29tbWl0LiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIE90aGVyd2lzZSwgdW53aW5kIHRoZW4gY29udGludWUgd2l0aCB0aGUgbm9ybWFsIHdvcmsgbG9vcC5cblxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2U6IHtcbiAgICAgICAgICAgICAgICAvLyBTdXNwZW5kZWQgYnkgYW4gb2xkIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyB0aGUgYHRocm93IHByb21pc2VgXG4gICAgICAgICAgICAgICAgLy8gcGF0dGVybi4gVGhlIG5ld2VyIHJlcGxheWluZyBiZWhhdmlvciBjYW4gY2F1c2Ugc3VidGxlIGlzc3Vlc1xuICAgICAgICAgICAgICAgIC8vIGxpa2UgaW5maW5pdGUgcGluZyBsb29wcy4gU28gd2UgbWFpbnRhaW4gdGhlIG9sZCBiZWhhdmlvciBhbmRcbiAgICAgICAgICAgICAgICAvLyBhbHdheXMgdW53aW5kLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjoge1xuICAgICAgICAgICAgICAgIC8vIFNlbGVjdGl2ZSBoeWRyYXRpb24uIEFuIHVwZGF0ZSBmbG93ZWQgaW50byBhIGRlaHlkcmF0ZWQgdHJlZS5cbiAgICAgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgdGhlIGN1cnJlbnQgcmVuZGVyIHNvIHRoZSB3b3JrIGxvb3AgY2FuIHN3aXRjaCB0byB0aGVcbiAgICAgICAgICAgICAgICAvLyBoeWRyYXRpb24gbGFuZS5cbiAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdERpZE5vdENvbXBsZXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBTdXNwZW5kZWRSZWFzb24uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRydWUgJiYgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gYGFjdGAgc3BlY2lhbCBjYXNlOiBJZiB3ZSdyZSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIGRvbid0IGNvbnN1bHRcbiAgICAgICAgICAgIC8vIGBzaG91bGRZaWVsZGAuIEFsd2F5cyBrZWVwIHdvcmtpbmcgdW50aWwgdGhlIHJlbmRlciBpcyBjb21wbGV0ZS5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uOiBpbiBhIHVuaXQgdGVzdCBlbnZpcm9ubWVudCwgd2VcbiAgICAgICAgICAgIC8vIGNhbid0IHRydXN0IHRoZSByZXN1bHQgb2YgYHNob3VsZFlpZWxkYCwgYmVjYXVzZSB0aGUgaG9zdCBJL08gaXNcbiAgICAgICAgICAgIC8vIGxpa2VseSBtb2NrZWQuXG4gICAgICAgICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBSb290SW5Qcm9ncmVzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gSXQncyBzYWZlIHRvIHByb2Nlc3MgdGhlIHF1ZXVlIG5vdyB0aGF0IHRoZSByZW5kZXIgcGhhc2UgaXMgY29tcGxldGUuXG5cbiAgICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpOyAvLyBSZXR1cm4gdGhlIGZpbmFsIGV4aXQgc3RhdHVzLlxuXG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiogQG5vaW5saW5lICovXG5cbiAgICBmdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnQoKSB7XG4gICAgICAvLyBQZXJmb3JtIHdvcmsgdW50aWwgU2NoZWR1bGVyIGFza3MgdXMgdG8geWllbGRcbiAgICAgIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gICAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgICAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgICAgIHNldEN1cnJlbnRGaWJlcih1bml0T2ZXb3JrKTtcbiAgICAgIHZhciBuZXh0O1xuXG4gICAgICBpZiAoKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgICAgbmV4dCA9IGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7XG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGlzIGRvZXNuJ3Qgc3Bhd24gbmV3IHdvcmssIGNvbXBsZXRlIHRoZSBjdXJyZW50IHdvcmsuXG4gICAgICAgIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHBlcmZvcm1Vbml0T2ZXb3JrIHNwZWNpZmNhbGx5IGZvciByZXBsYXlpbmcgYSBmaWJlciB0aGF0XG4gICAgICAvLyBqdXN0IHN1c3BlbmRlZC5cbiAgICAgIC8vXG4gICAgICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICAgICAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICAgICAgdmFyIG5leHQ7XG4gICAgICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gICAgICB2YXIgaXNQcm9maWxpbmdNb2RlID0gKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlO1xuXG4gICAgICBpZiAoaXNQcm9maWxpbmdNb2RlKSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh1bml0T2ZXb3JrLnRhZykge1xuICAgICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBCZWNhdXNlIGl0IHN1c3BlbmRlZCB3aXRoIGB1c2VgLCB3ZSBjYW4gYXNzdW1lIGl0J3MgYVxuICAgICAgICAgIC8vIGZ1bmN0aW9uIGNvbXBvbmVudC5cbiAgICAgICAgICB1bml0T2ZXb3JrLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50OyAvLyBGYWxsdGhyb3VnaCB0byB0aGUgbmV4dCBicmFuY2guXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6IHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGBkZWZhdWx0UHJvcHNgLiBUaGlzIGxvZ2ljIGlzIGNvcGllZCBmcm9tIGBiZWdpbldvcmtgLlxuICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQgaW50byB0aGF0IG1vZHVsZS4gQWxzbyxcbiAgICAgICAgICAvLyBjb3VsZCBtYXliZSB1c2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBzYXkgYHVzZWAgZG9lc24ndCB3b3JrIHdpdGhcbiAgICAgICAgICAvLyBgZGVmYXVsdFByb3BzYCA6KVxuICAgICAgICAgIHZhciBDb21wb25lbnQgPSB1bml0T2ZXb3JrLnR5cGU7XG4gICAgICAgICAgdmFyIHVucmVzb2x2ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICAgICAgICAgIHZhciByZXNvbHZlZFByb3BzID1cbiAgICAgICAgICAgIHVuaXRPZldvcmsuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgICAgICA/IHVucmVzb2x2ZWRQcm9wc1xuICAgICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCB1bnJlc29sdmVkUHJvcHMpO1xuICAgICAgICAgIHZhciBjb250ZXh0O1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dChcbiAgICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQodW5pdE9mV29yaywgdW5tYXNrZWRDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0ID0gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIHJlc29sdmVkUHJvcHMsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOiB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBgZGVmYXVsdFByb3BzYC4gVGhpcyBsb2dpYyBpcyBjb3BpZWQgZnJvbSBgYmVnaW5Xb3JrYC5cbiAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBtb3ZpbmcgdGhpcyBzd2l0Y2ggc3RhdGVtZW50IGludG8gdGhhdCBtb2R1bGUuIEFsc28sXG4gICAgICAgICAgLy8gY291bGQgbWF5YmUgdXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gc2F5IGB1c2VgIGRvZXNuJ3Qgd29yayB3aXRoXG4gICAgICAgICAgLy8gYGRlZmF1bHRQcm9wc2AgOilcbiAgICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHVuaXRPZldvcmsudHlwZS5yZW5kZXI7XG4gICAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICAgICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9XG4gICAgICAgICAgICB1bml0T2ZXb3JrLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50XG4gICAgICAgICAgICAgID8gX3VucmVzb2x2ZWRQcm9wc1xuICAgICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudCwgX3VucmVzb2x2ZWRQcm9wcyk7XG5cbiAgICAgICAgICBuZXh0ID0gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIF9yZXNvbHZlZFByb3BzLFxuICAgICAgICAgICAgX0NvbXBvbmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmsucmVmLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OiB7XG4gICAgICAgICAgLy8gU29tZSBob3N0IGNvbXBvbmVudHMgYXJlIHN0YXRlZnVsICh0aGF0J3MgaG93IHdlIGltcGxlbWVudCBmb3JtXG4gICAgICAgICAgLy8gYWN0aW9ucykgYnV0IHdlIGRvbid0IGJvdGhlciB0byByZXVzZSB0aGUgbWVtb2l6ZWQgc3RhdGUgYmVjYXVzZSBpdCdzXG4gICAgICAgICAgLy8gbm90IHdvcnRoIHRoZSBleHRyYSBjb2RlLiBUaGUgbWFpbiByZWFzb24gdG8gcmV1c2UgdGhlIHByZXZpb3VzIGhvb2tzXG4gICAgICAgICAgLy8gaXMgdG8gcmV1c2UgdW5jYWNoZWQgcHJvbWlzZXMsIGJ1dCB3ZSBoYXBwZW4gdG8ga25vdyB0aGF0IHRoZSBvbmx5XG4gICAgICAgICAgLy8gcHJvbWlzZXMgdGhhdCBhIGhvc3QgY29tcG9uZW50IG1pZ2h0IHN1c3BlbmQgb24gYXJlIGRlZmluaXRlbHkgY2FjaGVkXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGV5IGFyZSBjb250cm9sbGVkIGJ5IHVzLiBTbyBkb24ndCBib3RoZXIuXG4gICAgICAgICAgcmVzZXRIb29rc09uVW53aW5kKHVuaXRPZldvcmspOyAvLyBGYWxsdGhyb3VnaCB0byB0aGUgbmV4dCBicmFuY2guXG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgLy8gT3RoZXIgdHlwZXMgYmVzaWRlcyBmdW5jdGlvbiBjb21wb25lbnRzIGFyZSByZXNldCBjb21wbGV0ZWx5IGJlZm9yZVxuICAgICAgICAgIC8vIGJlaW5nIHJlcGxheWVkLiBDdXJyZW50bHkgdGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBhIFVzYWJsZSB0eXBlIGlzXG4gICAgICAgICAgLy8gcmVjb25jaWxlZCDigJQgdGhlIHJlY29uY2lsZXIgd2lsbCBzdXNwZW5kLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gV2UgcmVzZXQgdGhlIGZpYmVyIGJhY2sgdG8gaXRzIG9yaWdpbmFsIHN0YXRlOyBob3dldmVyLCB0aGlzIGlzbid0XG4gICAgICAgICAgLy8gYSBmdWxsIFwidW53aW5kXCIgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgcHJvbWlzZXMgdGhhdCB3ZXJlXG4gICAgICAgICAgLy8gcmVjb25jaWxlZCBwcmV2aW91c2x5LiBTbyBpdCdzIGludGVudGlvbmFsIHRoYXQgd2UgZG9uJ3QgY2FsbFxuICAgICAgICAgIC8vIHJlc2V0U3VzcGVuZGVkV29ya0xvb3BPblVud2luZCBoZXJlLlxuICAgICAgICAgIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCB1bml0T2ZXb3JrKTtcbiAgICAgICAgICB1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3MgPSByZXNldFdvcmtJblByb2dyZXNzKFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0ID0gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNQcm9maWxpbmdNb2RlKSB7XG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gICAgICB9IC8vIFRoZSBiZWdpbiBwaGFzZSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkgd2l0aG91dCBzdXNwZW5kaW5nLiBSZXR1cm4gdG8gdGhlXG4gICAgICAvLyBub3JtYWwgd29yayBsb29wLlxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG5cbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICAgICAgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgfVxuXG4gICAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHBlcmZvcm1Vbml0T2ZXb3JrIHNwZWNpZmNhbGx5IGZvciB1bndpbmRpbmcgYSBmaWJlclxuICAgICAgLy8gdGhhdCB0aHJldyBhbiBleGNlcHRpb24uXG4gICAgICAvL1xuICAgICAgLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgd29yayBsb29wLiBUaGlzIHdpbGwgdW53aW5kIHRoZSBzdGFjaywgYW5kIHBvdGVudGlhbGx5XG4gICAgICAvLyByZXN1bHQgaW4gc2hvd2luZyBhIGZhbGxiYWNrLlxuICAgICAgcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kKHVuaXRPZldvcmspO1xuICAgICAgdmFyIHJldHVybkZpYmVyID0gdW5pdE9mV29yay5yZXR1cm47XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEZpbmQgYW5kIG1hcmsgdGhlIG5lYXJlc3QgU3VzcGVuc2Ugb3IgZXJyb3IgYm91bmRhcnkgdGhhdCBjYW4gaGFuZGxlXG4gICAgICAgIC8vIHRoaXMgXCJleGNlcHRpb25cIi5cbiAgICAgICAgdmFyIGRpZEZhdGFsID0gdGhyb3dFeGNlcHRpb24oXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRpZEZhdGFsKSB7XG4gICAgICAgICAgcGFuaWNPblJvb3RFcnJvcih0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBXZSBoYWQgdHJvdWJsZSBwcm9jZXNzaW5nIHRoZSBlcnJvci4gQW4gZXhhbXBsZSBvZiB0aGlzIGhhcHBlbmluZyBpc1xuICAgICAgICAvLyB3aGVuIGFjY2Vzc2luZyB0aGUgYGNvbXBvbmVudERpZENhdGNoYCBwcm9wZXJ0eSBvZiBhbiBlcnJvciBib3VuZGFyeVxuICAgICAgICAvLyB0aHJvd3MgYW4gZXJyb3IuIEEgd2VpcmQgZWRnZSBjYXNlLiBUaGVyZSdzIGEgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGlzLlxuICAgICAgICAvLyBUbyBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AsIGJ1YmJsZSB0aGUgZXJyb3IgdXAgdG8gdGhlIG5leHQgcGFyZW50LlxuICAgICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhbmljT25Sb290RXJyb3IodGhyb3duVmFsdWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodW5pdE9mV29yay5mbGFncyAmIEluY29tcGxldGUpIHtcbiAgICAgICAgLy8gVW53aW5kIHRoZSBzdGFjayB1bnRpbCB3ZSByZWFjaCB0aGUgbmVhcmVzdCBib3VuZGFyeS5cbiAgICAgICAgdW53aW5kVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBmaWJlciBzdXNwZW5kZWQsIHdlJ3JlIGludGVudGlvbmFsbHkgZ29pbmcgdG8gY29tbWl0IGl0IGluXG4gICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2UgY2FuIGRvIHRoaXMgc2FmZWx5IGluIGNhc2VzIHdoZXJlIHdlIGtub3cgdGhlXG4gICAgICAgIC8vIGluY29uc2lzdGVudCB0cmVlIHdpbGwgYmUgaGlkZGVuLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGN1cnJlbnRseSBvbmx5IGFwcGxpZXMgdG8gTGVnYWN5IFN1c3BlbnNlIGltcGxlbWVudGF0aW9uLCBidXQgd2UgbWF5XG4gICAgICAgIC8vIHBvcnQgYSB2ZXJzaW9uIG9mIHRoaXMgdG8gY29uY3VycmVudCByb290cywgdG9vLCB3aGVuIHBlcmZvcm1pbmcgYVxuICAgICAgICAvLyBzeW5jaHJvbm91cyByZW5kZXIuIEJlY2F1c2UgdGhhdCB3aWxsIGFsbG93IHVzIHRvIG11dGF0ZSB0aGUgdHJlZSBhcyB3ZVxuICAgICAgICAvLyBnbyBpbnN0ZWFkIG9mIGJ1ZmZlcmluZyBtdXRhdGlvbnMgdW50aWwgdGhlIGVuZC4gVGhvdWdoIGl0J3MgdW5jbGVhciBpZlxuICAgICAgICAvLyB0aGlzIHBhcnRpY3VsYXIgcGF0aCBpcyBob3cgdGhhdCB3b3VsZCBiZSBpbXBsZW1lbnRlZC5cbiAgICAgICAgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhbmljT25Sb290RXJyb3IoZXJyb3IpIHtcbiAgICAgIC8vIFRoZXJlJ3Mgbm8gYW5jZXN0b3IgdGhhdCBjYW4gaGFuZGxlIHRoaXMgZXhjZXB0aW9uLiBUaGlzIHNob3VsZCBuZXZlclxuICAgICAgLy8gaGFwcGVuIGJlY2F1c2UgdGhlIHJvb3QgaXMgc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndFxuICAgICAgLy8gY2F1Z2h0IGJ5IGFuIGVycm9yIGJvdW5kYXJ5LiBUaGlzIGlzIGEgZmF0YWwgZXJyb3IsIG9yIHBhbmljIGNvbmRpdGlvbixcbiAgICAgIC8vIGJlY2F1c2Ugd2UndmUgcnVuIG91dCBvZiB3YXlzIHRvIHJlY292ZXIuXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBlcnJvcjsgLy8gU2V0IGB3b3JrSW5Qcm9ncmVzc2AgdG8gbnVsbC4gVGhpcyByZXByZXNlbnRzIGFkdmFuY2luZyB0byB0aGUgbmV4dFxuICAgICAgLy8gc2libGluZywgb3IgdGhlIHBhcmVudCBpZiB0aGVyZSBhcmUgbm8gc2libGluZ3MuIEJ1dCBzaW5jZSB0aGUgcm9vdFxuICAgICAgLy8gaGFzIG5vIHNpYmxpbmdzIG5vciBhIHBhcmVudCwgd2Ugc2V0IGl0IHRvIG51bGwuIFVzdWFsbHkgdGhpcyBpc1xuICAgICAgLy8gaGFuZGxlZCBieSBgY29tcGxldGVVbml0T2ZXb3JrYCBvciBgdW53aW5kV29ya2AsIGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgY2FsbGluZyB0aG9zZSwgd2UgbmVlZCBzZXQgaXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGxpbmcgYHVud2luZFdvcmtgIHRvIHBvcCB0aGUgY29udGV4dHMuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAgICAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAgICAgLy8gc2libGluZy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2libGluZ3MsIHJldHVybiB0byB0aGUgcGFyZW50IGZpYmVyLlxuICAgICAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuXG4gICAgICBkbyB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBJZiB3ZSByZS1lbmFibGUgc2libGluZyBwcmVyZW5kZXJpbmcgaW4gc29tZSBjYXNlcywgdGhpcyBicmFuY2hcbiAgICAgICAgICAgIC8vIGlzIHdoZXJlIHdlIHdvdWxkIHN3aXRjaCB0byB0aGUgdW53aW5kaW5nIHBhdGguXG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBlcnJvcjogRXhwZWN0ZWQgdGhpcyBmaWJlciB0byBiZSBjb21wbGV0ZSwgYnV0IFwiICtcbiAgICAgICAgICAgICAgICBcIml0IGlzbid0LiBJdCBzaG91bGQgaGF2ZSBiZWVuIHVud291bmQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAgICAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuXG4gICAgICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgICAgIHZhciByZXR1cm5GaWJlciA9IGNvbXBsZXRlZFdvcmsucmV0dXJuO1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoY29tcGxldGVkV29yayk7XG4gICAgICAgIHZhciBuZXh0ID0gdm9pZCAwO1xuXG4gICAgICAgIGlmICgoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIoY29tcGxldGVkV29yayk7XG4gICAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7IC8vIFVwZGF0ZSByZW5kZXIgZHVyYXRpb24gYXNzdW1pbmcgd2UgZGlkbid0IGVycm9yLlxuXG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZ0ZpYmVyID0gY29tcGxldGVkV29yay5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZ0ZpYmVyO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgICAgIH0gd2hpbGUgKGNvbXBsZXRlZFdvcmsgIT09IG51bGwpOyAvLyBXZSd2ZSByZWFjaGVkIHRoZSByb290LlxuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW53aW5kVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICB2YXIgaW5jb21wbGV0ZVdvcmsgPSB1bml0T2ZXb3JrO1xuXG4gICAgICBkbyB7XG4gICAgICAgIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAgICAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgICAgICB2YXIgY3VycmVudCA9IGluY29tcGxldGVXb3JrLmFsdGVybmF0ZTsgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgICAvLyB0aGUgc3RhY2sgd2l0aG91dCBlbnRlcmluZyB0aGUgY29tcGxldGUgcGhhc2UuIElmIHRoaXMgaXMgYSBib3VuZGFyeSxcbiAgICAgICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG5cbiAgICAgICAgdmFyIG5leHQgPSB1bndpbmRXb3JrKGN1cnJlbnQsIGluY29tcGxldGVXb3JrKTsgLy8gQmVjYXVzZSB0aGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUsIGRvbid0IHJlc2V0IGl0cyBsYW5lcy5cblxuICAgICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZvdW5kIGEgYm91bmRhcnkgdGhhdCBjYW4gaGFuZGxlIHRoaXMgZXhjZXB0aW9uLiBSZS1yZW50ZXIgdGhlXG4gICAgICAgICAgLy8gYmVnaW4gcGhhc2UuIFRoaXMgYnJhbmNoIHdpbGwgcmV0dXJuIHVzIHRvIHRoZSBub3JtYWwgd29yayBsb29wLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gU2luY2Ugd2UncmUgcmVzdGFydGluZywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgaG9zdCBlZmZlY3RcbiAgICAgICAgICAvLyBmcm9tIHRoZSBlZmZlY3QgdGFnLlxuICAgICAgICAgIG5leHQuZmxhZ3MgJj0gSG9zdEVmZmVjdE1hc2s7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBLZWVwIHVud2luZGluZyB1bnRpbCB3ZSByZWFjaCBlaXRoZXIgYSBib3VuZGFyeSBvciB0aGUgcm9vdC5cblxuICAgICAgICBpZiAoKGluY29tcGxldGVXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIC8vIFJlY29yZCB0aGUgcmVuZGVyIGR1cmF0aW9uIGZvciB0aGUgZmliZXIgdGhhdCBlcnJvcmVkLlxuICAgICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoaW5jb21wbGV0ZVdvcmssIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGluY29tcGxldGVXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjaGlsZCA9IGluY29tcGxldGVXb3JrLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hZGRpdGlvbl0gYWRkaXRpb24gd2l0aCBwb3NzaWJsZSBudWxsL3VuZGVmaW5lZCB2YWx1ZVxuICAgICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5jb21wbGV0ZVdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgfSAvLyBUT0RPOiBPbmNlIHdlIHN0b3AgcHJlcmVuZGVyaW5nIHNpYmxpbmdzLCBpbnN0ZWFkIG9mIHJlc2V0dGluZyB0aGUgcGFyZW50XG4gICAgICAgIC8vIG9mIHRoZSBub2RlIGJlaW5nIHVud291bmQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlc2V0IG5vZGUgaXRzZWxmIGFzIHdlXG4gICAgICAgIC8vIHVud2luZCB0aGUgc3RhY2suIFNhdmVzIGFuIGFkZGl0aW9uYWwgbnVsbCBjaGVjay5cblxuICAgICAgICB2YXIgcmV0dXJuRmliZXIgPSBpbmNvbXBsZXRlV29yay5yZXR1cm47XG5cbiAgICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBzdWJ0cmVlIGZsYWdzLlxuICAgICAgICAgIC8vIFRPRE86IE9uY2Ugd2Ugc3RvcCBwcmVyZW5kZXJpbmcgc2libGluZ3MsIHdlIG1heSBiZSBhYmxlIHRvIGdldCByaWQgb2ZcbiAgICAgICAgICAvLyB0aGUgSW5jb21wbGV0ZSBmbGFnIGJlY2F1c2UgdW53aW5kaW5nIHRvIHRoZSBuZWFyZXN0IGJvdW5kYXJ5IHdpbGxcbiAgICAgICAgICAvLyBoYXBwZW4gc3luY2hyb25vdXNseS5cbiAgICAgICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuICAgICAgICAgIHJldHVybkZpYmVyLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICAgICAgICByZXR1cm5GaWJlci5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgICB9IC8vIE5PVEU6IElmIHdlIHJlLWVuYWJsZSBzaWJsaW5nIHByZXJlbmRlcmluZyBpbiBzb21lIGNhc2VzLCBoZXJlIHdlXG4gICAgICAgIC8vIHdvdWxkIHN3aXRjaCB0byB0aGUgbm9ybWFsIGNvbXBsZXRpb24gcGF0aDogY2hlY2sgaWYgYSBzaWJsaW5nXG4gICAgICAgIC8vIGV4aXN0cywgYW5kIGlmIHNvLCBiZWdpbiB3b3JrIG9uIGl0LlxuICAgICAgICAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG4gICAgICAgIGluY29tcGxldGVXb3JrID0gcmV0dXJuRmliZXI7IC8vIFVwZGF0ZSB0aGUgbmV4dCB0aGluZyB3ZSdyZSB3b3JraW5nIG9uIGluIGNhc2Ugc29tZXRoaW5nIHRocm93cy5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGluY29tcGxldGVXb3JrO1xuICAgICAgfSB3aGlsZSAoaW5jb21wbGV0ZVdvcmsgIT09IG51bGwpOyAvLyBXZSd2ZSB1bndvdW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290LlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdERpZE5vdENvbXBsZXRlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCwgcmVjb3ZlcmFibGVFcnJvcnMsIHRyYW5zaXRpb25zLCBzcGF3bmVkTGFuZSkge1xuICAgICAgLy8gVE9ETzogVGhpcyBubyBsb25nZXIgbWFrZXMgYW55IHNlbnNlLiBXZSBhbHJlYWR5IHdyYXAgdGhlIG11dGF0aW9uIGFuZFxuICAgICAgLy8gbGF5b3V0IHBoYXNlcy4gU2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlLlxuICAgICAgdmFyIHByZXZpb3VzVXBkYXRlTGFuZVByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuXG4gICAgICB0cnkge1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcbiAgICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KERpc2NyZXRlRXZlbnRQcmlvcml0eSk7XG4gICAgICAgIGNvbW1pdFJvb3RJbXBsKFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgICAgcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHksXG4gICAgICAgICAgc3Bhd25lZExhbmVcbiAgICAgICAgKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KHByZXZpb3VzVXBkYXRlTGFuZVByaW9yaXR5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0Um9vdEltcGwoXG4gICAgICByb290LFxuICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICB0cmFuc2l0aW9ucyxcbiAgICAgIHJlbmRlclByaW9yaXR5TGV2ZWwsXG4gICAgICBzcGF3bmVkTGFuZVxuICAgICkge1xuICAgICAgZG8ge1xuICAgICAgICAvLyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBjYWxsIGBmbHVzaFN5bmNVcGRhdGVRdWV1ZWAgYXQgdGhlIGVuZCwgd2hpY2hcbiAgICAgICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgICAgIC8vIHBhc3NpdmUgZWZmZWN0cy4gU28gd2UgbmVlZCB0byBrZWVwIGZsdXNoaW5nIGluIGEgbG9vcCB1bnRpbCB0aGVyZSBhcmVcbiAgICAgICAgLy8gbm8gbW9yZSBwZW5kaW5nIGVmZmVjdHMuXG4gICAgICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIC8vIGZsdXNoIHN5bmNocm9ub3VzIHdvcmsgYXQgdGhlIGVuZCwgdG8gYXZvaWQgZmFjdG9yaW5nIGhhemFyZHMgbGlrZSB0aGlzLlxuICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgICAgIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpO1xuXG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICAgICAgdmFyIGxhbmVzID0gcm9vdC5maW5pc2hlZExhbmVzO1xuXG4gICAgICBpZiAoZmluaXNoZWRXb3JrID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChsYW5lcyA9PT0gTm9MYW5lcykge1xuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwicm9vdC5maW5pc2hlZExhbmVzIHNob3VsZCBub3QgYmUgZW1wdHkgZHVyaW5nIGEgY29tbWl0LiBUaGlzIGlzIGEgXCIgK1xuICAgICAgICAgICAgICAgIFwiYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gICAgICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuXG4gICAgICBpZiAoZmluaXNoZWRXb3JrID09PSByb290LmN1cnJlbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IFwiICtcbiAgICAgICAgICAgIFwiYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICB9IC8vIGNvbW1pdFJvb3QgbmV2ZXIgcmV0dXJucyBhIGNvbnRpbnVhdGlvbjsgaXQgYWx3YXlzIGZpbmlzaGVzIHN5bmNocm9ub3VzbHkuXG4gICAgICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lO1xuICAgICAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbDsgLy8gQ2hlY2sgd2hpY2ggbGFuZXMgbm8gbG9uZ2VyIGhhdmUgYW55IHdvcmsgc2NoZWR1bGVkIG9uIHRoZW0sIGFuZCBtYXJrXG4gICAgICAvLyB0aG9zZSBhcyBmaW5pc2hlZC5cblxuICAgICAgdmFyIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhcbiAgICAgICAgZmluaXNoZWRXb3JrLmxhbmVzLFxuICAgICAgICBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lc1xuICAgICAgKTsgLy8gTWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGJ5IGEgY29uY3VycmVudCBldmVudFxuICAgICAgLy8gZHVyaW5nIHRoZSByZW5kZXIgcGhhc2U7IGRvbid0IG1hcmsgdGhlbSBhcyBmaW5pc2hlZC5cblxuICAgICAgdmFyIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IGdldENvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcygpO1xuICAgICAgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKHJlbWFpbmluZ0xhbmVzLCBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMpO1xuICAgICAgbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcywgc3Bhd25lZExhbmUpO1xuXG4gICAgICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgICAgIC8vIFdlIGNhbiByZXNldCB0aGVzZSBub3cgdGhhdCB0aGV5IGFyZSBmaW5pc2hlZC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cywgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBwcm9jZXNzIHRoZW0uXG4gICAgICAvLyBEbyB0aGlzIGFzIGVhcmx5IGFzIHBvc3NpYmxlLCBzbyBpdCBpcyBxdWV1ZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UgdGhhdFxuICAgICAgLy8gbWlnaHQgZ2V0IHNjaGVkdWxlZCBpbiB0aGUgY29tbWl0IHBoYXNlLiAoU2VlICMxNjcxNC4pXG4gICAgICAvLyBUT0RPOiBEZWxldGUgYWxsIG90aGVyIHBsYWNlcyB0aGF0IHNjaGVkdWxlIHRoZSBwYXNzaXZlIGVmZmVjdCBjYWxsYmFja1xuICAgICAgLy8gVGhleSdyZSByZWR1bmRhbnQuXG5cbiAgICAgIGlmIChcbiAgICAgICAgKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiBQYXNzaXZlTWFzaykgIT09IE5vRmxhZ3MkMSB8fFxuICAgICAgICAoZmluaXNoZWRXb3JrLmZsYWdzICYgUGFzc2l2ZU1hc2spICE9PSBOb0ZsYWdzJDFcbiAgICAgICkge1xuICAgICAgICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTsgLy8gVGhpcyByZW5kZXIgdHJpZ2dlcmVkIHBhc3NpdmUgZWZmZWN0czogcmVsZWFzZSB0aGUgcm9vdCBjYWNoZSBwb29sXG4gICAgICAgICAgICAvLyAqYWZ0ZXIqIHBhc3NpdmUgZWZmZWN0cyBmaXJlIHRvIGF2b2lkIGZyZWVpbmcgYSBjYWNoZSBwb29sIHRoYXQgbWF5XG4gICAgICAgICAgICAvLyBiZSByZWZlcmVuY2VkIGJ5IGEgbm9kZSBpbiB0aGUgdHJlZSAoSG9zdFJvb3QsIENhY2hlIGJvdW5kYXJ5IGV0YylcblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBlZmZlY3RzIGluIHRoZSB3aG9sZSB0cmVlLlxuICAgICAgLy8gVE9ETzogVGhpcyBpcyBsZWZ0IG92ZXIgZnJvbSB0aGUgZWZmZWN0IGxpc3QgaW1wbGVtZW50YXRpb24sIHdoZXJlIHdlIGhhZFxuICAgICAgLy8gdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYGZpcnN0RWZmZWN0YCB0byBzYXRpc2Z5IEZsb3cuIEkgdGhpbmsgdGhlXG4gICAgICAvLyBvbmx5IG90aGVyIHJlYXNvbiB0aGlzIG9wdGltaXphdGlvbiBleGlzdHMgaXMgYmVjYXVzZSBpdCBhZmZlY3RzIHByb2ZpbGluZy5cbiAgICAgIC8vIFJlY29uc2lkZXIgd2hldGhlciB0aGlzIGlzIG5lY2Vzc2FyeS5cblxuICAgICAgdmFyIHN1YnRyZWVIYXNFZmZlY3RzID1cbiAgICAgICAgKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJlxuICAgICAgICAgIChCZWZvcmVNdXRhdGlvbk1hc2sgfCBNdXRhdGlvbk1hc2sgfCBMYXlvdXRNYXNrIHwgUGFzc2l2ZU1hc2spKSAhPT1cbiAgICAgICAgTm9GbGFncyQxO1xuICAgICAgdmFyIHJvb3RIYXNFZmZlY3QgPVxuICAgICAgICAoZmluaXNoZWRXb3JrLmZsYWdzICZcbiAgICAgICAgICAoQmVmb3JlTXV0YXRpb25NYXNrIHwgTXV0YXRpb25NYXNrIHwgTGF5b3V0TWFzayB8IFBhc3NpdmVNYXNrKSkgIT09XG4gICAgICAgIE5vRmxhZ3MkMTtcblxuICAgICAgaWYgKHN1YnRyZWVIYXNFZmZlY3RzIHx8IHJvb3RIYXNFZmZlY3QpIHtcbiAgICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG4gICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuICAgICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7IC8vIFJlc2V0IHRoaXMgdG8gbnVsbCBiZWZvcmUgY2FsbGluZyBsaWZlY3ljbGVzXG5cbiAgICAgICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gbnVsbDsgLy8gVGhlIGNvbW1pdCBwaGFzZSBpcyBicm9rZW4gaW50byBzZXZlcmFsIHN1Yi1waGFzZXMuIFdlIGRvIGEgc2VwYXJhdGUgcGFzc1xuICAgICAgICAvLyBvZiB0aGUgZWZmZWN0IGxpc3QgZm9yIGVhY2ggcGhhc2U6IGFsbCBtdXRhdGlvbiBlZmZlY3RzIGNvbWUgYmVmb3JlIGFsbFxuICAgICAgICAvLyBsYXlvdXQgZWZmZWN0cywgYW5kIHNvIG9uLlxuICAgICAgICAvLyBUaGUgZmlyc3QgcGhhc2UgYSBcImJlZm9yZSBtdXRhdGlvblwiIHBoYXNlLiBXZSB1c2UgdGhpcyBwaGFzZSB0byByZWFkIHRoZVxuICAgICAgICAvLyBzdGF0ZSBvZiB0aGUgaG9zdCB0cmVlIHJpZ2h0IGJlZm9yZSB3ZSBtdXRhdGUgaXQuIFRoaXMgaXMgd2hlcmVcbiAgICAgICAgLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaXMgY2FsbGVkLlxuXG4gICAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgICAgICAvLyBiYXRjaC4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgZ3JvdXBlZCBsYXRlci5cbiAgICAgICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb21taXRNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrLCBsYW5lcyk7XG4gICAgICAgIC8vIHRoZSBtdXRhdGlvbiBwaGFzZSwgc28gdGhhdCB0aGUgcHJldmlvdXMgdHJlZSBpcyBzdGlsbCBjdXJyZW50IGR1cmluZ1xuICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCwgYnV0IGJlZm9yZSB0aGUgbGF5b3V0IHBoYXNlLCBzbyB0aGF0IHRoZSBmaW5pc2hlZFxuICAgICAgICAvLyB3b3JrIGlzIGN1cnJlbnQgZHVyaW5nIGNvbXBvbmVudERpZE1vdW50L1VwZGF0ZS5cblxuICAgICAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBsYXlvdXQgcGhhc2UsIHdoZXJlIHdlIGNhbGwgZWZmZWN0cyB0aGF0IHJlYWRcblxuICAgICAgICBjb21taXRMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgcm9vdCwgbGFuZXMpO1xuICAgICAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgICAgICByZXF1ZXN0UGFpbnQoKTtcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBSZXNldCB0aGUgcHJpb3JpdHkgdG8gdGhlIHByZXZpb3VzIG5vbi1zeW5jIHZhbHVlLlxuXG4gICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gZWZmZWN0cy5cbiAgICAgICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBNZWFzdXJlIHRoZXNlIGFueXdheSBzbyB0aGUgZmxhbWVncmFwaCBleHBsaWNpdGx5IHNob3dzIHRoYXQgdGhlcmUgd2VyZVxuICAgICAgICAvLyBubyBlZmZlY3RzLlxuICAgICAgICAvLyBUT0RPOiBNYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byByZXBvcnQgdGhpcy5cblxuICAgICAgICB7XG4gICAgICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzID0gcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHM7XG5cbiAgICAgIGlmIChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAvLyBUaGlzIGNvbW1pdCBoYXMgcGFzc2l2ZSBlZmZlY3RzLiBTdGFzaCBhIHJlZmVyZW5jZSB0byB0aGVtLiBCdXQgZG9uJ3RcbiAgICAgICAgLy8gc2NoZWR1bGUgYSBjYWxsYmFjayB1bnRpbCBhZnRlciBmbHVzaGluZyBsYXlvdXQgd29yay5cbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICAgICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290O1xuICAgICAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG4gICAgICAgICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cbiAgICAgIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7IC8vIENoZWNrIGlmIHRoZXJlJ3MgcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290XG4gICAgICAvLyBUT0RPOiBUaGlzIGlzIHBhcnQgb2YgdGhlIGBjb21wb25lbnREaWRDYXRjaGAgaW1wbGVtZW50YXRpb24uIEl0cyBwdXJwb3NlXG4gICAgICAvLyBpcyB0byBkZXRlY3Qgd2hldGhlciBzb21ldGhpbmcgbWlnaHQgaGF2ZSBjYWxsZWQgc2V0U3RhdGUgaW5zaWRlXG4gICAgICAvLyBgY29tcG9uZW50RGlkQ2F0Y2hgLiBUaGUgbWVjaGFuaXNtIGlzIGtub3duIHRvIGJlIGZsYXdlZCBiZWNhdXNlIGBzZXRTdGF0ZWBcbiAgICAgIC8vIGluc2lkZSBgY29tcG9uZW50RGlkQ2F0Y2hgIGlzIGl0c2VsZiBmbGF3ZWQg4oCUIHRoYXQncyB3aHkgd2UgcmVjb21tZW5kXG4gICAgICAvLyBgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yYCBpbnN0ZWFkLiBIb3dldmVyLCBpdCBjb3VsZCBiZSBpbXByb3ZlZCBieVxuICAgICAgLy8gY2hlY2tpbmcgaWYgcmVtYWluaW5nTGFuZXMgaW5jbHVkZXMgU3luYyB3b3JrLCBpbnN0ZWFkIG9mIHdoZXRoZXIgdGhlcmUnc1xuICAgICAgLy8gYW55IHdvcmsgcmVtYWluaW5nIGF0IGFsbCAod2hpY2ggd291bGQgYWxzbyBpbmNsdWRlIHN0dWZmIGxpa2UgU3VzcGVuc2VcbiAgICAgIC8vIHJldHJpZXMgb3IgdHJhbnNpdGlvbnMpLiBJdCdzIGJlZW4gbGlrZSB0aGlzIGZvciBhIHdoaWxlLCB0aG91Z2gsIHNvIGZpeGluZ1xuICAgICAgLy8gaXQgcHJvYmFibHkgaXNuJ3QgdGhhdCB1cmdlbnQuXG5cbiAgICAgIGlmIChyZW1haW5pbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrLCB3ZSBjYW4gY2xlYXIgdGhlIHNldCBvZiBhbHJlYWR5IGZhaWxlZFxuICAgICAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgICAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCFyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgICAgY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvbkNvbW1pdFJvb3QoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgcm9vdC5tZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QgaXMgc2NoZWR1bGVkLlxuXG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG5cbiAgICAgIGlmIChyZWNvdmVyYWJsZUVycm9ycyAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUaGVyZSB3ZXJlIGVycm9ycyBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCByZWNvdmVyZWQgZnJvbSB0aGVtIHdpdGhvdXRcbiAgICAgICAgLy8gbmVlZGluZyB0byBzdXJmYWNlIGl0IHRvIHRoZSBVSS4gV2UgbG9nIHRoZW0gaGVyZS5cbiAgICAgICAgdmFyIG9uUmVjb3ZlcmFibGVFcnJvciA9IHJvb3Qub25SZWNvdmVyYWJsZUVycm9yO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjb3ZlcmFibGVFcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgcmVjb3ZlcmFibGVFcnJvciA9IHJlY292ZXJhYmxlRXJyb3JzW2ldO1xuICAgICAgICAgIHZhciBlcnJvckluZm8gPSBtYWtlRXJyb3JJbmZvKFxuICAgICAgICAgICAgcmVjb3ZlcmFibGVFcnJvci5kaWdlc3QsXG4gICAgICAgICAgICByZWNvdmVyYWJsZUVycm9yLnN0YWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcmFibGVFcnJvci52YWx1ZSwgZXJyb3JJbmZvKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzVW5jYXVnaHRFcnJvcikge1xuICAgICAgICBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciQxID0gZmlyc3RVbmNhdWdodEVycm9yO1xuICAgICAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgICAgICB0aHJvdyBlcnJvciQxO1xuICAgICAgfSAvLyBJZiB0aGUgcGFzc2l2ZSBlZmZlY3RzIGFyZSB0aGUgcmVzdWx0IG9mIGEgZGlzY3JldGUgcmVuZGVyLCBmbHVzaCB0aGVtXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgdGFzayBzbyB0aGF0IHRoZSByZXN1bHQgaXNcbiAgICAgIC8vIGltbWVkaWF0ZWx5IG9ic2VydmFibGUuIE90aGVyd2lzZSwgd2UgYXNzdW1lIHRoYXQgdGhleSBhcmUgbm90XG4gICAgICAvLyBvcmRlci1kZXBlbmRlbnQgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIG9ic2VydmVkIGJ5IGV4dGVybmFsIHN5c3RlbXMsIHNvIHdlXG4gICAgICAvLyBjYW4gd2FpdCB1bnRpbCBhZnRlciBwYWludC5cbiAgICAgIC8vIFRPRE86IFdlIGNhbiBvcHRpbWl6ZSB0aGlzIGJ5IG5vdCBzY2hlZHVsaW5nIHRoZSBjYWxsYmFjayBlYXJsaWVyLiBTaW5jZSB3ZVxuICAgICAgLy8gY3VycmVudGx5IHNjaGVkdWxlIHRoZSBjYWxsYmFjayBpbiBtdWx0aXBsZSBwbGFjZXMsIHdpbGwgd2FpdCB1bnRpbCB0aG9zZVxuICAgICAgLy8gYXJlIGNvbnNvbGlkYXRlZC5cblxuICAgICAgaWYgKFxuICAgICAgICBpbmNsdWRlc1N5bmNMYW5lKHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzKSAmJlxuICAgICAgICByb290LnRhZyAhPT0gTGVnYWN5Um9vdFxuICAgICAgKSB7XG4gICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhIHBhc3NpdmUgZWZmZWN0IG1pZ2h0IGhhdmUgdXBkYXRlZCBpdFxuXG4gICAgICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGlzIHJlbmRlciBzY2hlZHVsZWQgYSBjYXNjYWRpbmcgc3luY2hyb25vdXMgdXBkYXRlLiBUaGlzIGlzIGFcbiAgICAgIC8vIGhldXJzdGljIHRvIGRldGVjdCBpbmZpbml0ZSB1cGRhdGUgbG9vcHMuIFdlIGFyZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGluZ1xuICAgICAgLy8gaHlkcmF0aW9uIGxhbmVzIGluIHRoaXMgY2hlY2ssIGJlY2F1c2UgcmVuZGVyIHRyaWdnZXJlZCBieSBzZWxlY3RpdmVcbiAgICAgIC8vIGh5ZHJhdGlvbiBpcyBjb25jZXB0dWFsbHkgbm90IGFuIHVwZGF0ZS5cblxuICAgICAgaWYgKFxuICAgICAgICAvLyBXYXMgdGhlIGZpbmlzaGVkIHJlbmRlciB0aGUgcmVzdWx0IG9mIGFuIHVwZGF0ZSAobm90IGh5ZHJhdGlvbik/XG4gICAgICAgIGluY2x1ZGVzU29tZUxhbmUobGFuZXMsIFVwZGF0ZUxhbmVzKSAmJiAvLyBEaWQgaXQgc2NoZWR1bGUgYSBzeW5jIHVwZGF0ZT9cbiAgICAgICAgaW5jbHVkZXNTb21lTGFuZShyZW1haW5pbmdMYW5lcywgU3luY1VwZGF0ZUxhbmVzKVxuICAgICAgKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBtYXJrTmVzdGVkVXBkYXRlU2NoZWR1bGVkKCk7XG4gICAgICAgIH0gLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgICAgICAvLyBmaW5pc2hpbmcuIElmIHRoZXJlIGFyZSB0b28gbWFueSwgaXQgaW5kaWNhdGVzIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuXG4gICAgICAgIGlmIChyb290ID09PSByb290V2l0aE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgICAgICBuZXN0ZWRVcGRhdGVDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgICB9IC8vIElmIGxheW91dCB3b3JrIHdhcyBzY2hlZHVsZWQsIGZsdXNoIGl0IG5vdy5cblxuICAgICAgZmx1c2hTeW5jV29ya09uQWxsUm9vdHMoKTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUVycm9ySW5mbyhkaWdlc3QsIGNvbXBvbmVudFN0YWNrKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBlcnJvckluZm8gPSB7XG4gICAgICAgICAgY29tcG9uZW50U3RhY2s6IGNvbXBvbmVudFN0YWNrLFxuICAgICAgICAgIGRpZ2VzdDogZGlnZXN0XG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvckluZm8sIFwiZGlnZXN0XCIsIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgYWNjZXNzaW5nIFwiZGlnZXN0XCIgZnJvbSB0aGUgZXJyb3JJbmZvIG9iamVjdCBwYXNzZWQgdG8gb25SZWNvdmVyYWJsZUVycm9yLicgK1xuICAgICAgICAgICAgICAgIFwiIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3QuXCIgK1xuICAgICAgICAgICAgICAgIFwiIFRvIGFjY2VzcyB0aGUgZGlnZXN0IG9mIGFuIEVycm9yIGxvb2sgZm9yIHRoaXMgcHJvcGVydHkgb24gdGhlIEVycm9yIGluc3RhbmNlIGl0c2VsZi5cIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRpZ2VzdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JJbmZvO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZC5cbiAgICAgIC8vIFRPRE86IENvbWJpbmUgdGhpcyBjaGVjayB3aXRoIHRoZSBvbmUgaW4gZmx1c2hQYXNzaXZlRUZmZWN0c0ltcGwuIFdlIHNob3VsZFxuICAgICAgLy8gcHJvYmFibHkganVzdCBjb21iaW5lIHRoZSB0d28gZnVuY3Rpb25zLiBJIGJlbGlldmUgdGhleSB3ZXJlIG9ubHkgc2VwYXJhdGVcbiAgICAgIC8vIGluIHRoZSBmaXJzdCBwbGFjZSBiZWNhdXNlIHdlIHVzZWQgdG8gd3JhcCBpdCB3aXRoXG4gICAgICAvLyBgU2NoZWR1bGVyLnJ1bldpdGhQcmlvcml0eWAsIHdoaWNoIGFjY2VwdHMgYSBmdW5jdGlvbi4gQnV0IG5vdyB3ZSB0cmFjayB0aGVcbiAgICAgIC8vIHByaW9yaXR5IHdpdGhpbiBSZWFjdCBpdHNlbGYsIHNvIHdlIGNhbiBtdXRhdGUgdGhlIHZhcmlhYmxlIGRpcmVjdGx5LlxuICAgICAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKSB7XG4gICAgICAgIHZhciByZW5kZXJQcmlvcml0eSA9IGxhbmVzVG9FdmVudFByaW9yaXR5KHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzKTtcbiAgICAgICAgdmFyIHByaW9yaXR5ID0gbG93ZXJFdmVudFByaW9yaXR5KERlZmF1bHRFdmVudFByaW9yaXR5LCByZW5kZXJQcmlvcml0eSk7XG4gICAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG4gICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcbiAgICAgICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgICAgICAgIHJldHVybiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247IC8vIE9uY2UgcGFzc2l2ZSBlZmZlY3RzIGhhdmUgcnVuIGZvciB0aGUgdHJlZSAtIGdpdmluZyBjb21wb25lbnRzIGFcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZVByb2ZpbGVyRWZmZWN0KGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIHBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3RzLnB1c2goZmliZXIpO1xuXG4gICAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpIHtcbiAgICAgIGlmIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIENhY2hlIGFuZCBjbGVhciB0aGUgdHJhbnNpdGlvbnMgZmxhZ1xuICAgICAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDsgLy8gVE9ETzogVGhpcyBpcyBzb21ldGltZXMgb3V0IG9mIHN5bmMgd2l0aCByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cy5cbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2h5IGFuZCBmaXggaXQuIEl0J3Mgbm90IGNhdXNpbmcgYW55IGtub3duIGlzc3VlcyAocHJvYmFibHlcbiAgICAgIC8vIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgZm9yIHByb2ZpbGluZyksIGJ1dCBpdCdzIGEgcmVmYWN0b3IgaGF6YXJkLlxuXG4gICAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG5cbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy5cIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0cyhyb290LmN1cnJlbnQpO1xuICAgICAgY29tbWl0UGFzc2l2ZU1vdW50RWZmZWN0cyhyb290LCByb290LmN1cnJlbnQpOyAvLyBUT0RPOiBNb3ZlIHRvIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHNcblxuICAgICAge1xuICAgICAgICB2YXIgcHJvZmlsZXJFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdHM7XG4gICAgICAgIHBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3RzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxlckVmZmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZmliZXIgPSBwcm9maWxlckVmZmVjdHNbaV07XG4gICAgICAgICAgY29tbWl0UGFzc2l2ZUVmZmVjdER1cmF0aW9ucyhyb290LCBmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCk7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gSWYgYWRkaXRpb25hbCBwYXNzaXZlIGVmZmVjdHMgd2VyZSBzY2hlZHVsZWQsIGluY3JlbWVudCBhIGNvdW50ZXIuIElmIHRoaXNcbiAgICAgICAgLy8gZXhjZWVkcyB0aGUgbGltaXQsIHdlJ2xsIGZpcmUgYSB3YXJuaW5nLlxuICAgICAgICBpZiAoZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChyb290ID09PSByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzKSB7XG4gICAgICAgICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICAgICAgICAgIHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICAgIH0gLy8gVE9ETzogTW92ZSB0byBjb21taXRQYXNzaXZlTW91bnRFZmZlY3RzXG5cbiAgICAgIG9uUG9zdENvbW1pdFJvb3Qocm9vdCk7XG5cbiAgICAgIHtcbiAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHJvb3QuY3VycmVudC5zdGF0ZU5vZGU7XG4gICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCAhPT0gbnVsbCAmJlxuICAgICAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoaW5zdGFuY2UpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKGluc3RhbmNlKSB7XG4gICAgICBpZiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPT09IG51bGwpIHtcbiAgICAgICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgICAgIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgICAgICBoYXNVbmNhdWdodEVycm9yID0gdHJ1ZTtcbiAgICAgICAgZmlyc3RVbmNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG9uVW5jYXVnaHRFcnJvciA9IHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcjtcblxuICAgIGZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICBzb3VyY2VGaWJlcixcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBlcnJvciQxXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIHJlcG9ydFVuY2F1Z2h0RXJyb3JJbkRFVihlcnJvciQxKTtcbiAgICAgICAgc2V0SXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0KGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgLy8gRXJyb3Igd2FzIHRocm93biBhdCB0aGUgcm9vdC4gVGhlcmUgaXMgbm8gcGFyZW50LCBzbyB0aGUgcm9vdFxuICAgICAgICAvLyBpdHNlbGYgc2hvdWxkIGNhcHR1cmUgaXQuXG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IkMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpYmVyID0gbmVhcmVzdE1vdW50ZWRBbmNlc3RvcjtcblxuICAgICAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChmaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvciQxKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIHZhciBjdG9yID0gZmliZXIudHlwZTtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgICAgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciQxLCBzb3VyY2VGaWJlcik7XG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgU3luY0xhbmUpO1xuXG4gICAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBcIkludGVybmFsIFJlYWN0IGVycm9yOiBBdHRlbXB0ZWQgdG8gY2FwdHVyZSBhIGNvbW1pdCBwaGFzZSBlcnJvciBcIiArXG4gICAgICAgICAgICBcImluc2lkZSBhIGRldGFjaGVkIHRyZWUuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LiBQb3RlbnRpYWwgXCIgK1xuICAgICAgICAgICAgXCJjYXVzZXMgaW5jbHVkZSBkZWxldGluZyB0aGUgc2FtZSBmaWJlciBtb3JlIHRoYW4gb25jZSwgY29tbWl0dGluZyBhbiBcIiArXG4gICAgICAgICAgICBcImFscmVhZHktZmluaXNoZWQgdHJlZSwgb3IgYW4gaW5jb25zaXN0ZW50IHJldHVybiBwb2ludGVyLlxcblxcblwiICtcbiAgICAgICAgICAgIFwiRXJyb3IgbWVzc2FnZTpcXG5cXG4lc1wiLFxuICAgICAgICAgIGVycm9yJDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAgICAgLy8gQXR0YWNoIGEgcGluZyBsaXN0ZW5lclxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBkYXRhIG1pZ2h0IHJlc29sdmUgYmVmb3JlIHdlIGhhdmUgYSBjaGFuY2UgdG8gY29tbWl0IHRoZSBmYWxsYmFjay4gT3IsXG4gICAgICAvLyBpbiB0aGUgY2FzZSBvZiBhIHJlZnJlc2gsIHdlJ2xsIG5ldmVyIGNvbW1pdCBhIGZhbGxiYWNrLiBTbyB3ZSBuZWVkIHRvXG4gICAgICAvLyBhdHRhY2ggYSBsaXN0ZW5lciBub3cuIFdoZW4gaXQgcmVzb2x2ZXMgKFwicGluZ3NcIiksIHdlIGNhbiBkZWNpZGUgd2hldGhlciB0b1xuICAgICAgLy8gdHJ5IHJlbmRlcmluZyB0aGUgdHJlZSBhZ2Fpbi5cbiAgICAgIC8vXG4gICAgICAvLyBPbmx5IGF0dGFjaCBhIGxpc3RlbmVyIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGZvciB0aGUgbGFuZXNcbiAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgKHdoaWNoIGFjdHMgbGlrZSBhIFwidGhyZWFkIElEXCIgaGVyZSkuXG4gICAgICAvL1xuICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgaW4gY29uY3VycmVudCBtb2RlLiBMZWdhY3kgU3VzcGVuc2UgYWx3YXlzXG4gICAgICAvLyBjb21taXRzIGZhbGxiYWNrcyBzeW5jaHJvbm91c2x5LCBzbyB0aGVyZSBhcmUgbm8gcGluZ3MuXG4gICAgICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gICAgICB2YXIgdGhyZWFkSURzO1xuXG4gICAgICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xuICAgICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKTtcblxuICAgICAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRocmVhZElEcy5oYXMobGFuZXMpKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9IHRydWU7IC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG5cbiAgICAgICAgdGhyZWFkSURzLmFkZChsYW5lcyk7XG4gICAgICAgIHZhciBwaW5nID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB3YWtlYWJsZSwgbGFuZXMpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyB3b3JrIHN0aWxsLCByZXN0b3JlIHRoZSBvcmlnaW5hbCB1cGRhdGVyc1xuICAgICAgICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCBsYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgICAgIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcblxuICAgICAgaWYgKHBpbmdDYWNoZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgICAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgICAgIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICAgICAgfVxuXG4gICAgICBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcyk7XG4gICAgICB3YXJuSWZTdXNwZW5zZVJlc29sdXRpb25Ob3RXcmFwcGVkV2l0aEFjdERFVihyb290KTtcblxuICAgICAgaWYgKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiZcbiAgICAgICAgaXNTdWJzZXRPZkxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBwaW5nZWRMYW5lcylcbiAgICAgICkge1xuICAgICAgICAvLyBSZWNlaXZlZCBhIHBpbmcgYXQgdGhlIHNhbWUgcHJpb3JpdHkgbGV2ZWwgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5XG4gICAgICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAgICAgLy8gdGhlIGxvZ2ljIG9mIHdoZXRoZXIgb3Igbm90IGEgcm9vdCBzdXNwZW5kcyBvbmNlIGl0IGNvbXBsZXRlcy5cbiAgICAgICAgLy8gVE9ETzogSWYgd2UncmUgcmVuZGVyaW5nIHN5bmMgZWl0aGVyIGR1ZSB0byBTeW5jLCBCYXRjaGVkIG9yIGV4cGlyZWQsXG4gICAgICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgICAgICAvLyBJZiB3ZSdyZSBzdXNwZW5kZWQgd2l0aCBkZWxheSwgb3IgaWYgaXQncyBhIHJldHJ5LCB3ZSdsbCBhbHdheXMgc3VzcGVuZFxuICAgICAgICAvLyBzbyB3ZSBjYW4gYWx3YXlzIHJlc3RhcnQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8XG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgIGluY2x1ZGVzT25seVJldHJpZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpICYmXG4gICAgICAgICAgICBub3ckMSgpIC0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA8IEZBTExCQUNLX1RIUk9UVExFX01TKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBGb3JjZSBhIHJlc3RhcnQgZnJvbSB0aGUgcm9vdCBieSB1bndpbmRpbmcgdGhlIHN0YWNrLiBVbmxlc3MgdGhpcyBpc1xuICAgICAgICAgIC8vIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UsIGJlY2F1c2UgdGhhdCB3b3VsZCBjYXVzZSBhIGNyYXNoLlxuICAgICAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAgICAgLy8gb3Bwb3J0dW5pdHkgbGF0ZXIuIFNvIHdlIG1hcmsgdGhpcyByZW5kZXIgYXMgaGF2aW5nIGEgcGluZy5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IG1lcmdlTGFuZXMoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyxcbiAgICAgICAgICAgIHBpbmdlZExhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAgICAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAgICAgLy8gcHJldmlvdXNseSB3YXMgcmVuZGVyZWQgaW4gaXRzIGZhbGxiYWNrIHN0YXRlLiBPbmUgb2YgdGhlIHByb21pc2VzIHRoYXRcbiAgICAgIC8vIHN1c3BlbmRlZCBpdCBoYXMgcmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGF0IGxlYXN0IHBhcnQgb2YgdGhlIHRyZWUgd2FzXG4gICAgICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBsYW5lcy5cbiAgICAgIGlmIChyZXRyeUxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAvLyBUT0RPOiBBc3NpZ24gdGhpcyB0byBgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmVgPyB0byBhdm9pZFxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSBlbnRhbmdsZW1lbnQ/XG4gICAgICAgIHJldHJ5TGFuZSA9IHJlcXVlc3RSZXRyeUxhbmUoYm91bmRhcnlGaWJlcik7XG4gICAgICB9IC8vIFRPRE86IFNwZWNpYWwgY2FzZSBpZGxlIHByaW9yaXR5P1xuXG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lKTtcbiAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoYm91bmRhcnlGaWJlcikge1xuICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBib3VuZGFyeUZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lO1xuXG4gICAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZTtcbiAgICAgIH1cblxuICAgICAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gICAgICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgICAgIHZhciByZXRyeUNhY2hlO1xuXG4gICAgICBzd2l0Y2ggKGJvdW5kYXJ5RmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHJ5TGFuZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDoge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIHJldHJ5Q2FjaGUgPSBpbnN0YW5jZS5fcmV0cnlDYWNoZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJQaW5nZWQgdW5rbm93biBzdXNwZW5zZSBib3VuZGFyeSB0eXBlLiBcIiArXG4gICAgICAgICAgICAgIFwiVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICAgICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICAgICAgfVxuXG4gICAgICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dJZkluZmluaXRlVXBkYXRlTG9vcERldGVjdGVkKCkge1xuICAgICAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVCkge1xuICAgICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG4gICAgICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG4gICAgICAgIHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgXCIgK1xuICAgICAgICAgICAgXCJyZXBlYXRlZGx5IGNhbGxzIHNldFN0YXRlIGluc2lkZSBjb21wb25lbnRXaWxsVXBkYXRlIG9yIFwiICtcbiAgICAgICAgICAgIFwiY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBcIiArXG4gICAgICAgICAgICBcInByZXZlbnQgaW5maW5pdGUgbG9vcHMuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUKSB7XG4gICAgICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICAgICAgICByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgXCIgK1xuICAgICAgICAgICAgICBcImNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgXCIgK1xuICAgICAgICAgICAgICBcImhhdmUgYSBkZXBlbmRlbmN5IGFycmF5LCBvciBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VzIG9uIFwiICtcbiAgICAgICAgICAgICAgXCJldmVyeSByZW5kZXIuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICAgICAge1xuICAgICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nKCk7XG4gICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QsIGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBsZWdhY3lDb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdC5jdXJyZW50LCBoYXNQYXNzaXZlRWZmZWN0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsZWdhY3lDb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYoZmliZXIsIGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAvLyBUT0RPIChTdHJpY3RFZmZlY3RzKSBTaG91bGQgd2Ugc2V0IGEgbWFya2VyIG9uIHRoZSByb290IGlmIGl0IGNvbnRhaW5zIHN0cmljdCBlZmZlY3RzXG4gICAgICAvLyBzbyB3ZSBkb24ndCB0cmF2ZXJzZSB1bm5lY2Vzc2FyaWx5PyBzaW1pbGFyIHRvIHN1YnRyZWVGbGFncyBidXQganVzdCBhdCB0aGUgcm9vdCBsZXZlbC5cbiAgICAgIC8vIE1heWJlIG5vdCBhIGJpZyBkZWFsIHNpbmNlIHRoaXMgaXMgREVWIG9ubHkgYmVoYXZpb3IuXG4gICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgaW52b2tlRWZmZWN0c0luRGV2KGZpYmVyLCBNb3VudExheW91dERldiwgaW52b2tlTGF5b3V0RWZmZWN0VW5tb3VudEluREVWKTtcblxuICAgICAgaWYgKGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIGludm9rZUVmZmVjdHNJbkRldihcbiAgICAgICAgICBmaWJlcixcbiAgICAgICAgICBNb3VudFBhc3NpdmVEZXYsXG4gICAgICAgICAgaW52b2tlUGFzc2l2ZUVmZmVjdFVubW91bnRJbkRFVlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpbnZva2VFZmZlY3RzSW5EZXYoZmliZXIsIE1vdW50TGF5b3V0RGV2LCBpbnZva2VMYXlvdXRFZmZlY3RNb3VudEluREVWKTtcblxuICAgICAgaWYgKGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIGludm9rZUVmZmVjdHNJbkRldihcbiAgICAgICAgICBmaWJlcixcbiAgICAgICAgICBNb3VudFBhc3NpdmVEZXYsXG4gICAgICAgICAgaW52b2tlUGFzc2l2ZUVmZmVjdE1vdW50SW5ERVZcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VFZmZlY3RzSW5EZXYoZmlyc3RDaGlsZCwgZmliZXJGbGFncywgaW52b2tlRWZmZWN0Rm4pIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmlyc3RDaGlsZDtcbiAgICAgIHZhciBzdWJ0cmVlUm9vdCA9IG51bGw7XG5cbiAgICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgdmFyIHByaW1hcnlTdWJ0cmVlRmxhZyA9IGN1cnJlbnQuc3VidHJlZUZsYWdzICYgZmliZXJGbGFncztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudCAhPT0gc3VidHJlZVJvb3QgJiZcbiAgICAgICAgICBjdXJyZW50LmNoaWxkICE9IG51bGwgJiZcbiAgICAgICAgICBwcmltYXJ5U3VidHJlZUZsYWcgIT09IE5vRmxhZ3MkMVxuICAgICAgICApIHtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBmaWJlckZsYWdzKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICBpbnZva2VFZmZlY3RGbihjdXJyZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gc3VidHJlZVJvb3QgPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGw7XG4gICAgZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICAgICAge1xuICAgICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgICAgLy8gV2UgbGV0IHRoZSBvdGhlciB3YXJuaW5nIGFib3V0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGRlYWwgd2l0aCB0aGlzIG9uZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShmaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmXG4gICAgICAgICAgdGFnICE9PSBIb3N0Um9vdCAmJlxuICAgICAgICAgIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiZcbiAgICAgICAgICB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmXG4gICAgICAgICAgdGFnICE9PSBGb3J3YXJkUmVmICYmXG4gICAgICAgICAgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmXG4gICAgICAgICAgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50XG4gICAgICAgICkge1xuICAgICAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJSZWFjdENvbXBvbmVudFwiO1xuXG4gICAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgIFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgYSBzaWRlLWVmZmVjdCBpbiB5b3VyIHJlbmRlciBmdW5jdGlvbiB0aGF0IFwiICtcbiAgICAgICAgICAgICAgXCJhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gXCIgK1xuICAgICAgICAgICAgICBcInVzZUVmZmVjdCBpbnN0ZWFkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGJlZ2luV29yaztcblxuICAgIHtcbiAgICAgIHZhciBkdW1teUZpYmVyID0gbnVsbDtcblxuICAgICAgYmVnaW5Xb3JrID0gZnVuY3Rpb24gKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKSB7XG4gICAgICAgIC8vIElmIGEgY29tcG9uZW50IHRocm93cyBhbiBlcnJvciwgd2UgcmVwbGF5IGl0IGFnYWluIGluIGEgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBkaXNwYXRjaGVkIGV2ZW50LCBzbyB0aGF0IHRoZSBkZWJ1Z2dlciB3aWxsIHRyZWF0IGl0IGFzIGFuIHVuY2F1Z2h0XG4gICAgICAgIC8vIGVycm9yIFNlZSBSZWFjdEVycm9yVXRpbHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICAgIC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNvcHkgdGhlIHdvcmstaW4tcHJvZ3Jlc3Mgb250byBhIGR1bW15XG4gICAgICAgIC8vIGZpYmVyLiBJZiBiZWdpbldvcmsgdGhyb3dzLCB3ZSdsbCB1c2UgdGhpcyB0byByZXNldCB0aGUgc3RhdGUuXG4gICAgICAgIHZhciBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSA9IGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKFxuICAgICAgICAgIGR1bW15RmliZXIsXG4gICAgICAgICAgdW5pdE9mV29ya1xuICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcbiAgICAgICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRpZFN1c3BlbmRPckVycm9yV2hpbGVIeWRyYXRpbmdERVYoKSB8fFxuICAgICAgICAgICAgb3JpZ2luYWxFcnJvciA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHxcbiAgICAgICAgICAgIG9yaWdpbmFsRXJyb3IgPT09IFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbiB8fFxuICAgICAgICAgICAgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIG9yaWdpbmFsRXJyb3IudGhlbiA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLlxuICAgICAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IGVycm9ycyBpZiB3ZSBhcmUgaHlkcmF0aW5nIGFuZCBoYXZlIGFscmVhZHkgc3VzcGVuZGVkIG9yIGhhbmRsZWQgYW4gZXJyb3JcbiAgICAgICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICAgICAgfSAvLyBEb24ndCByZXNldCBjdXJyZW50IGRlYnVnIGZpYmVyLCBzaW5jZSB3ZSdyZSBhYm91dCB0byB3b3JrIG9uIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZmliZXIgYWdhaW4uXG4gICAgICAgICAgLy8gVW53aW5kIHRoZSBmYWlsZWQgc3RhY2sgZnJhbWVcblxuICAgICAgICAgIHJlc2V0U3VzcGVuZGVkV29ya0xvb3BPblVud2luZCh1bml0T2ZXb3JrKTtcbiAgICAgICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoY3VycmVudCwgdW5pdE9mV29yayk7IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3BlcnRpZXMgb2YgdGhlIGZpYmVyLlxuXG4gICAgICAgICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodW5pdE9mV29yaywgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkpO1xuXG4gICAgICAgICAgaWYgKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgcHJvZmlsZXIgdGltZXIuXG4gICAgICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICAgICAgfSAvLyBSdW4gYmVnaW5Xb3JrIGFnYWluLlxuXG4gICAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGJlZ2luV29yayQxLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICAgIHZhciByZXBsYXlFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0eXBlb2YgcmVwbGF5RXJyb3IgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgcmVwbGF5RXJyb3IgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgcmVwbGF5RXJyb3IuX3N1cHByZXNzTG9nZ2luZyAmJlxuICAgICAgICAgICAgICB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICBvcmlnaW5hbEVycm9yICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICFvcmlnaW5hbEVycm9yLl9zdXBwcmVzc0xvZ2dpbmdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBJZiBzdXBwcmVzc2VkLCBsZXQgdGhlIGZsYWcgY2Fycnkgb3ZlciB0byB0aGUgb3JpZ2luYWwgZXJyb3Igd2hpY2ggaXMgdGhlIG9uZSB3ZSdsbCByZXRocm93LlxuICAgICAgICAgICAgICBvcmlnaW5hbEVycm9yLl9zdXBwcmVzc0xvZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gV2UgYWx3YXlzIHRocm93IHRoZSBvcmlnaW5hbCBlcnJvciBpbiBjYXNlIHRoZSBzZWNvbmQgcmVuZGVyIHBhc3MgaXMgbm90IGlkZW1wb3RlbnQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGEgbWVtb2l6ZWQgZnVuY3Rpb24gb3IgQ29tbW9uSlMgbW9kdWxlIGRvZXNuJ3QgdGhyb3cgYWZ0ZXIgZmlyc3QgaW52b2NhdGlvbi5cblxuICAgICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gZmFsc2U7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudDtcblxuICAgIHtcbiAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcikge1xuICAgICAge1xuICAgICAgICBpZiAoaXNSZW5kZXJpbmcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDoge1xuICAgICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9XG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpKSB8fFxuICAgICAgICAgICAgICAgIFwiVW5rbm93blwiOyAvLyBEZWR1cGUgYnkgdGhlIHJlbmRlcmluZyBjb21wb25lbnQgYmVjYXVzZSBpdCdzIHRoZSBvbmUgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuICAgICAgICAgICAgICB2YXIgZGVkdXBlS2V5ID0gcmVuZGVyaW5nQ29tcG9uZW50TmFtZTtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMoZGVkdXBlS2V5KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKGRlZHVwZUtleSk7XG4gICAgICAgICAgICAgICAgdmFyIHNldFN0YXRlQ29tcG9uZW50TmFtZSA9XG4gICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIjtcblxuICAgICAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImZvbGxvdyB0aGUgc3RhY2sgdHJhY2UgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zZXRzdGF0ZS1pbi1yZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgIHNldFN0YXRlQ29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgICByZW5kZXJpbmdDb21wb25lbnROYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OiB7XG4gICAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwid2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLlwiXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgbGFuZXMpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG4gICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsaW5nRmliZXIpIHtcbiAgICAgICAgICAgIGFkZEZpYmVyVG9MYW5lc01hcChyb290LCBzY2hlZHVsaW5nRmliZXIsIGxhbmVzKTtcbiAgICAgICAgICB9KTsgLy8gVGhpcyBmdW5jdGlvbiBpbnRlbnRpb25hbGx5IGRvZXMgbm90IGNsZWFyIG1lbW9pemVkIHVwZGF0ZXJzLlxuICAgICAgICAgIC8vIFRob3NlIG1heSBzdGlsbCBiZSByZWxldmFudCB0byB0aGUgY3VycmVudCBjb21taXRcbiAgICAgICAgICAvLyBhbmQgYSBmdXR1cmUgb25lIChlLmcuIFN1c3BlbnNlKS5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgZmFrZUFjdENhbGxiYWNrTm9kZSA9IHt9OyAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKSB7XG4gICAgICB7XG4gICAgICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIGJ5cGFzcyBTY2hlZHVsZXIgYW5kIHB1c2ggdG9cbiAgICAgICAgLy8gdGhlIGBhY3RgIHF1ZXVlIGluc3RlYWQuXG4gICAgICAgIHZhciBhY3RRdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKGFjdFF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgYWN0UXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgcmV0dXJuIGZha2VBY3RDYWxsYmFja05vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2skMihwcmlvcml0eUxldmVsLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSB7XG4gICAgICAvLyBOZXZlciBmb3JjZSBmbHVzaCBpbiBwcm9kdWN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnZXQgc3RyaXBwZWQgb3V0LlxuICAgICAgcmV0dXJuIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgIT09IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChmaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBpZiAoIWlzQ29uY3VycmVudEFjdEVudmlyb25tZW50KCkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBpbiBhbiBhY3QgZW52aXJvbm1lbnQuIE5vIG5lZWQgdG8gd2Fybi5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTGVnYWN5IG1vZGUgaGFzIGFkZGl0aW9uYWwgY2FzZXMgd2hlcmUgd2Ugc3VwcHJlc3MgYSB3YXJuaW5nLlxuICAgICAgICAgIGlmICghaXNMZWdhY3lBY3RFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgICAgICAvLyBOb3QgaW4gYW4gYWN0IGVudmlyb25tZW50LiBObyBuZWVkIHRvIHdhcm4uXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgIT09IE5vQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gTGVnYWN5IG1vZGUgZG9lc24ndCB3YXJuIGlmIHRoZSB1cGRhdGUgaXMgYmF0Y2hlZCwgaS5lLlxuICAgICAgICAgICAgLy8gYmF0Y2hlZFVwZGF0ZXMgb3IgZmx1c2hTeW5jLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpYmVyLnRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiZcbiAgICAgICAgICAgIGZpYmVyLnRhZyAhPT0gRm9yd2FyZFJlZiAmJlxuICAgICAgICAgICAgZmliZXIudGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBwcmUtaG9va3MgY29kZSwgbGVnYWN5IG1vZGUgb25seVxuICAgICAgICAgICAgLy8gd2FybnMgZm9yIHVwZGF0ZXMgdGhhdCBvcmlnaW5hdGUgZnJvbSBhIGhvb2suXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIFwiQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcblwiICtcbiAgICAgICAgICAgICAgICBcIldoZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSBcIiArXG4gICAgICAgICAgICAgICAgXCJ3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiYWN0KCgpID0+IHtcXG5cIiArXG4gICAgICAgICAgICAgICAgXCIgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwifSk7XFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICtcbiAgICAgICAgICAgICAgICBcImluIHRoZSBicm93c2VyLlwiICtcbiAgICAgICAgICAgICAgICBcIiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0XCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuSWZTdXNwZW5zZVJlc29sdXRpb25Ob3RXcmFwcGVkV2l0aEFjdERFVihyb290KSB7XG4gICAgICB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJlxuICAgICAgICAgIGlzQ29uY3VycmVudEFjdEVudmlyb25tZW50KCkgJiZcbiAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJBIHN1c3BlbmRlZCByZXNvdXJjZSBmaW5pc2hlZCBsb2FkaW5nIGluc2lkZSBhIHRlc3QsIGJ1dCB0aGUgZXZlbnQgXCIgK1xuICAgICAgICAgICAgICBcIndhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG5cIiArXG4gICAgICAgICAgICAgIFwiV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgcmVzb2x2ZXMgc3VzcGVuZGVkIGRhdGEgc2hvdWxkIGJlIHdyYXBwZWQgXCIgK1xuICAgICAgICAgICAgICBcImludG8gYWN0KC4uLik6XFxuXFxuXCIgK1xuICAgICAgICAgICAgICBcImFjdCgoKSA9PiB7XFxuXCIgK1xuICAgICAgICAgICAgICBcIiAgLyogZmluaXNoIGxvYWRpbmcgc3VzcGVuZGVkIGRhdGEgKi9cXG5cIiArXG4gICAgICAgICAgICAgIFwifSk7XFxuXCIgK1xuICAgICAgICAgICAgICBcIi8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgK1xuICAgICAgICAgICAgICBcImluIHRoZSBicm93c2VyLlwiICtcbiAgICAgICAgICAgICAgXCIgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdChpc1J1bm5pbmcpIHtcbiAgICAgIHtcbiAgICAgICAgaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gaXNSdW5uaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXMgKi9cbiAgICAvLyBVc2VkIGJ5IFJlYWN0IFJlZnJlc2ggcnVudGltZSB0aHJvdWdoIERldlRvb2xzIEdsb2JhbCBIb29rLlxuXG4gICAgdmFyIHJlc29sdmVGYW1pbHkgPSBudWxsO1xuICAgIHZhciBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbDtcbiAgICB2YXIgc2V0UmVmcmVzaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAge1xuICAgICAgICByZXNvbHZlRmFtaWx5ID0gaGFuZGxlcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG4gICAgICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgICAgIC8vIE5vIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzLlxuICAgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAgICAge1xuICAgICAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgICAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZWFsIGZvcndhcmRSZWYuIERvbid0IHdhbnQgdG8gY3Jhc2ggZWFybHkuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgdHlwZS5yZW5kZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gRm9yd2FyZFJlZiBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHJlc29sdmVkIC50eXBlIGlzIGFuIG9iamVjdCxcbiAgICAgICAgICAgIC8vIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ugb25seSBoYXZlIGl0cyBpbm5lciByZW5kZXIgZnVuY3Rpb24gaW4gdGhlIG1hcC5cbiAgICAgICAgICAgIC8vIElmIHRoYXQgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCwgd2UnbGwgYnVpbGQgYSBuZXcgZm9yd2FyZFJlZiB0eXBlLlxuICAgICAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXIgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpO1xuXG4gICAgICAgICAgICBpZiAodHlwZS5yZW5kZXIgIT09IGN1cnJlbnRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgdmFyIHN5bnRoZXRpY1R5cGUgPSB7XG4gICAgICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgICAgICAgICAgICAgcmVuZGVyOiBjdXJyZW50UmVuZGVyXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHN5bnRoZXRpY1R5cGUuZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHN5bnRoZXRpY1R5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cbiAgICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgICAgICB2YXIgbmV4dFR5cGUgPSBlbGVtZW50LnR5cGU7IC8vIElmIHdlIGdvdCBoZXJlLCB3ZSBrbm93IHR5cGVzIGFyZW4ndCA9PT0gZXF1YWwuXG5cbiAgICAgICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gZmFsc2U7XG4gICAgICAgIHZhciAkJHR5cGVvZk5leHRUeXBlID1cbiAgICAgICAgICB0eXBlb2YgbmV4dFR5cGUgPT09IFwib2JqZWN0XCIgJiYgbmV4dFR5cGUgIT09IG51bGxcbiAgICAgICAgICAgID8gbmV4dFR5cGUuJCR0eXBlb2ZcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBpbm5lciB0eXBlIHlldC5cbiAgICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoYXQgdGhlIGxhenkgaW5uZXIgdHlwZSBpcyBzdGFibGUsXG4gICAgICAgICAgICAgIC8vIGFuZCBzbyBpdCBpcyBzdWZmaWNpZW50IHRvIGF2b2lkIHJlY29uY2lsaW5nIGl0IGF3YXkuXG4gICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byB1bndyYXAgb3IgYWN0dWFsbHkgdXNlIHRoZSBuZXcgbGF6eSB0eXBlLlxuICAgICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjoge1xuICAgICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OiB7XG4gICAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IGlmIGl0IHdhcyBidXQgY2FuIG5vIGxvbmdlciBiZSBzaW1wbGUsXG4gICAgICAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBzZXQgdGhpcy5cbiAgICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IC8vIENoZWNrIGlmIGJvdGggdHlwZXMgaGF2ZSBhIGZhbWlseSBhbmQgaXQncyB0aGUgc2FtZSBvbmUuXG5cbiAgICAgICAgaWYgKG5lZWRzQ29tcGFyZUZhbWlsaWVzKSB7XG4gICAgICAgICAgLy8gTm90ZTogbWVtbygpIGFuZCBmb3J3YXJkUmVmKCkgd2UnbGwgY29tcGFyZSBvdXRlciByYXRoZXIgdGhhbiBpbm5lciB0eXBlLlxuICAgICAgICAgIC8vIFRoaXMgbWVhbnMgYm90aCBvZiB0aGVtIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCB0byBwcmVzZXJ2ZSBzdGF0ZS5cbiAgICAgICAgICAvLyBJZiB3ZSB1bndyYXBwZWQgYW5kIGNvbXBhcmVkIHRoZSBpbm5lciB0eXBlcyBmb3Igd3JhcHBlcnMgaW5zdGVhZCxcbiAgICAgICAgICAvLyB0aGVuIHdlIHdvdWxkIHJpc2sgZmFsc2VseSBzYXlpbmcgdHdvIHNlcGFyYXRlIG1lbW8oRm9vKVxuICAgICAgICAgIC8vIGNhbGxzIGFyZSBlcXVpdmFsZW50IGJlY2F1c2UgdGhleSB3cmFwIHRoZSBzYW1lIEZvbyBmdW5jdGlvbi5cbiAgICAgICAgICB2YXIgcHJldkZhbWlseSA9IHJlc29sdmVGYW1pbHkocHJldlR5cGUpOyAvLyAkRmxvd0ZpeE1lW25vdC1hLWZ1bmN0aW9uXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHByZXZGYW1pbHkgPT09IHJlc29sdmVGYW1pbHkobmV4dFR5cGUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIFdlYWtTZXQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzID09PSBudWxsKSB7XG4gICAgICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZVJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgdXBkYXRlKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhbGVGYW1pbGllcyA9IHVwZGF0ZS5zdGFsZUZhbWlsaWVzLFxuICAgICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgcm9vdC5jdXJyZW50LFxuICAgICAgICAgICAgdXBkYXRlZEZhbWlsaWVzLFxuICAgICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gICAgICB7XG4gICAgICAgIGlmIChyb290LmNvbnRleHQgIT09IGVtcHR5Q29udGV4dE9iamVjdCkge1xuICAgICAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgICAgIC8vIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBwYXJlbnRDb21wb25lbnQgc28gd2UgY2FuJ3QgcGFzcyBpdC5cbiAgICAgICAgICAvLyBKdXN0IGlnbm9yZS4gV2UnbGwgZGVsZXRlIHRoaXMgd2l0aCBfcmVuZGVyU3VidHJlZSBjb2RlIHBhdGggbGF0ZXIuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICBmaWJlcixcbiAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmVlZHNSZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5lZWRzUmVtb3VudCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkoY2FuZGlkYXRlVHlwZSk7XG5cbiAgICAgICAgICBpZiAoZmFtaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChzdGFsZUZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgICAgICBpZiAodGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHwgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgICAgICAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZWVkc1JlbW91bnQpIHtcbiAgICAgICAgICBmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lZWRzUmVtb3VudCB8fCBuZWVkc1JlbmRlcikge1xuICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmICFuZWVkc1JlbW91bnQpIHtcbiAgICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAgICAgICBzdGFsZUZhbWlsaWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShcbiAgICAgICAgICAgIHNpYmxpbmcsXG4gICAgICAgICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAgICAgICBzdGFsZUZhbWlsaWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgZmFtaWxpZXMpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGhvc3RJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciB0eXBlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgZmFtaWxpZXMubWFwKGZ1bmN0aW9uIChmYW1pbHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgcm9vdC5jdXJyZW50LFxuICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgIGhvc3RJbnN0YW5jZXNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGhvc3RJbnN0YW5jZXM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShcbiAgICAgIGZpYmVyLFxuICAgICAgdHlwZXMsXG4gICAgICBob3N0SW5zdGFuY2VzXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICAgICAgZGlkTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaWRNYXRjaCkge1xuICAgICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4gVGhpcyBvbmx5IGRyaWxscyBkb3duIHRvIHRoZSBjbG9zZXN0IGhvc3QgY29tcG9uZW50cy5cbiAgICAgICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgICAgICAvLyB2aXN1YWwgZmVlZGJhY2ssIFwiZmxhc2hpbmdcIiBvdXRlcm1vc3QgcGFyZW50IHJlY3RhbmdsZXMgaXMgc3VmZmljaWVudC5cbiAgICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIG1hdGNoLCBtYXliZSB0aGVyZSB3aWxsIGJlIG9uZSBmdXJ0aGVyIGRvd24gaW4gdGhlIGNoaWxkIHRyZWUuXG4gICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICB0eXBlcyxcbiAgICAgICAgICAgICAgaG9zdEluc3RhbmNlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShcbiAgICAgICAgICAgIHNpYmxpbmcsXG4gICAgICAgICAgICB0eXBlcyxcbiAgICAgICAgICAgIGhvc3RJbnN0YW5jZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICAgICAge1xuICAgICAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIGhvc3RJbnN0YW5jZXNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueSBob3N0IGNoaWxkcmVuLCBmYWxsYmFjayB0byBjbG9zZXN0IGhvc3QgcGFyZW50LlxuXG4gICAgICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCB0byByZWFjaCByb290IGZpcnN0LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgICAgICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHxcbiAgICAgICAgICAgIG5vZGUudGFnID09PSBIb3N0SG9pc3RhYmxlIHx8XG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgICAgICBmb3VuZEhvc3RJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpOyAvLyBUaGVyZSBtYXkgc3RpbGwgYmUgbW9yZSwgc28ga2VlcCBzZWFyY2hpbmcuXG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlID09PSBmaWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGhhc0JhZE1hcFBvbHlmaWxsO1xuXG4gICAge1xuICAgICAgaGFzQmFkTWFwUG9seWZpbGwgPSBmYWxzZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgICAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICAgICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICAgICAgaGFzQmFkTWFwUG9seWZpbGwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gICAgICAvLyBJbnN0YW5jZVxuICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgIHRoaXMuZWxlbWVudFR5cGUgPSBudWxsO1xuICAgICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICAgIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICAgICAgdGhpcy5yZXR1cm4gPSBudWxsO1xuICAgICAgdGhpcy5jaGlsZCA9IG51bGw7XG4gICAgICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICB0aGlzLnJlZiA9IG51bGw7XG4gICAgICB0aGlzLnJlZkNsZWFudXAgPSBudWxsO1xuICAgICAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gICAgICB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgICAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICB0aGlzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgICAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gICAgICB0aGlzLmZsYWdzID0gTm9GbGFncyQxO1xuICAgICAgdGhpcy5zdWJ0cmVlRmxhZ3MgPSBOb0ZsYWdzJDE7XG4gICAgICB0aGlzLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICB0aGlzLmxhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB0aGlzLmFsdGVybmF0ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluaXRpYWxpemluZyB0aGUgZmllbGRzIGJlbG93IHRvIHNtaXMgYW5kIGxhdGVyIHVwZGF0aW5nIHRoZW0gd2l0aFxuICAgICAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgICAgICAvLyBUaGlzIGJlaGF2aW9yL2J1ZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggT2JqZWN0LnByZXZlbnRFeHRlbnNpb24oKS5cbiAgICAgICAgLy8gRm9ydHVuYXRlbHkgdGhpcyBvbmx5IGltcGFjdHMgREVWIGJ1aWxkcy5cbiAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAgICAgLy8gVG8gd29yayBhcm91bmQgdGhpcywgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGJlbG93IHdpdGggZG91Ymxlcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQzNjVcbiAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9ODUzOFxuICAgICAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICAgICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSBOdW1iZXIuTmFOO1xuICAgICAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgICAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAgICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHRoZSBwZXJmb3JtYW5jZSBjbGlmZiBtZW50aW9uZWQgYWJvdmUsXG4gICAgICAgIC8vIGFuZCBpdCBzaW1wbGlmaWVzIG90aGVyIHByb2ZpbGVyIGNvZGUgKGluY2x1ZGluZyBEZXZUb29scykuXG5cbiAgICAgICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICAgICAgdGhpcy5fZGVidWdPd25lciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RlYnVnSG9va1R5cGVzID0gbnVsbDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWhhc0JhZE1hcFBvbHlmaWxsICYmXG4gICAgICAgICAgdHlwZW9mIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhIFBPSk8gY29uc3RydWN0b3IsIHN0aWxsXG4gICAgLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuICAgIC8vIDEpIE5vYm9keSBzaG91bGQgYWRkIGFueSBpbnN0YW5jZSBtZXRob2RzIG9uIHRoaXMuIEluc3RhbmNlIG1ldGhvZHMgY2FuIGJlXG4gICAgLy8gICAgbW9yZSBkaWZmaWN1bHQgdG8gcHJlZGljdCB3aGVuIHRoZXkgZ2V0IG9wdGltaXplZCBhbmQgdGhleSBhcmUgYWxtb3N0XG4gICAgLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuICAgIC8vIDIpIE5vYm9keSBzaG91bGQgcmVseSBvbiBgaW5zdGFuY2VvZiBGaWJlcmAgZm9yIHR5cGUgdGVzdGluZy4gV2Ugc2hvdWxkXG4gICAgLy8gICAgYWx3YXlzIGtub3cgd2hlbiBpdCBpcyBhIGZpYmVyLlxuICAgIC8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbiAgICAvLyAgICB0byBvcHRpbWl6ZSBpbiBhIG5vbi1KSVQgZW52aXJvbm1lbnQuXG4gICAgLy8gNCkgV2UgY2FuIGVhc2lseSBnbyBmcm9tIGEgY29uc3RydWN0b3IgdG8gYSBjcmVhdGVGaWJlciBvYmplY3QgbGl0ZXJhbCBpZiB0aGF0XG4gICAgLy8gICAgaXMgZmFzdGVyLlxuICAgIC8vIDUpIEl0IHNob3VsZCBiZSBlYXN5IHRvIHBvcnQgdGhpcyB0byBhIEMgc3RydWN0IGFuZCBrZWVwIGEgQyBpbXBsZW1lbnRhdGlvblxuICAgIC8vICAgIGNvbXBhdGlibGUuXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlcih0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2ludmFsaWQtY29uc3RydWN0b3JdOiB0aGUgc2hhcGVzIGFyZSBleGFjdCBoZXJlIGJ1dCBGbG93IGRvZXNuJ3QgbGlrZSBjb25zdHJ1Y3RvcnNcbiAgICAgIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgICAgIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgICAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0eXBlb2YgdHlwZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICFzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiZcbiAgICAgICAgdHlwZS5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSB7XG4gICAgICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gICAgICB9IGVsc2UgaWYgKENvbXBvbmVudCAhPT0gdW5kZWZpbmVkICYmIENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgJCR0eXBlb2YgPSBDb21wb25lbnQuJCR0eXBlb2Y7XG5cbiAgICAgICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICAgICAgcmV0dXJuIEZvcndhcmRSZWY7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgIHJldHVybiBNZW1vQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBJbmRldGVybWluYXRlQ29tcG9uZW50O1xuICAgIH0gLy8gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBhbHRlcm5hdGUgZmliZXIgdG8gZG8gd29yayBvbi5cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSB1c2UgYSBkb3VibGUgYnVmZmVyaW5nIHBvb2xpbmcgdGVjaG5pcXVlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ2xsXG4gICAgICAgIC8vIG9ubHkgZXZlciBuZWVkIGF0IG1vc3QgdHdvIHZlcnNpb25zIG9mIGEgdHJlZS4gV2UgcG9vbCB0aGUgXCJvdGhlclwiIHVudXNlZFxuICAgICAgICAvLyBub2RlIHRoYXQgd2UncmUgZnJlZSB0byByZXVzZS4gVGhpcyBpcyBsYXppbHkgY3JlYXRlZCB0byBhdm9pZCBhbGxvY2F0aW5nXG4gICAgICAgIC8vIGV4dHJhIG9iamVjdHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBuZXZlciB1cGRhdGVkLiBJdCBhbHNvIGFsbG93IHVzIHRvXG4gICAgICAgIC8vIHJlY2xhaW0gdGhlIGV4dHJhIG1lbW9yeSBpZiBuZWVkZWQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoXG4gICAgICAgICAgY3VycmVudC50YWcsXG4gICAgICAgICAgcGVuZGluZ1Byb3BzLFxuICAgICAgICAgIGN1cnJlbnQua2V5LFxuICAgICAgICAgIGN1cnJlbnQubW9kZVxuICAgICAgICApO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGU7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBERVYtb25seSBmaWVsZHNcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXM7XG4gICAgICAgIH1cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50O1xuICAgICAgICBjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhbHRlcm5hdGUuXG4gICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gTm9GbGFncyQxOyAvLyBUaGUgZWZmZWN0cyBhcmUgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbDtcblxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1lIGZyb20gZW5kbGVzc2x5IGFjY3VtdWxhdGluZyBpbiBuZXcgY29tbWl0cy5cbiAgICAgICAgICAvLyBUaGlzIGhhcyB0aGUgZG93bnNpZGUgb2YgcmVzZXR0aW5nIHZhbHVlcyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHJlbmRlcnMsXG4gICAgICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlc2V0IGFsbCBlZmZlY3RzIGV4Y2VwdCBzdGF0aWMgb25lcy5cbiAgICAgIC8vIFN0YXRpYyBlZmZlY3RzIGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gY3VycmVudC5mbGFncyAmIFN0YXRpY01hc2s7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gICAgICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgICAgICAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gICAgICAgICAgICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICAgICAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5yZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuXG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG5cbiAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhcbiAgICAgICAgICAgICAgY3VycmVudC50eXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gVXNlZCB0byByZXVzZSBhIEZpYmVyIGZvciBhIHNlY29uZCBwYXNzLlxuXG4gICAgZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIC8vIFRoaXMgcmVzZXRzIHRoZSBGaWJlciB0byB3aGF0IGNyZWF0ZUZpYmVyIG9yIGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkXG4gICAgICAvLyBoYXZlIHNldCB0aGUgdmFsdWVzIHRvIGJlZm9yZSBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuIElkZWFsbHkgdGhpcyB3b3VsZG4ndFxuICAgICAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgLy8gd2hlbiB0aGV5IHNob3VsZCBiZSByZWFkaW5nIGZyb20gY3VycmVudCBhbmQgd3JpdGluZyB0byB3b3JrSW5Qcm9ncmVzcy5cbiAgICAgIC8vIFdlIGFzc3VtZSBwZW5kaW5nUHJvcHMsIGluZGV4LCBrZXksIHJlZiwgcmV0dXJuIGFyZSBzdGlsbCB1bnRvdWNoZWQgdG9cbiAgICAgIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGZsYWdzIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAgICAgLy8gdGhhdCBjaGlsZCBmaWJlciBpcyBzZXR0aW5nLCBub3QgdGhlIHJlY29uY2lsaWF0aW9uLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gU3RhdGljTWFzayB8IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdHMgYXJlIG5vIGxvbmdlciB2YWxpZC5cblxuICAgICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFJlc2V0IHRvIGNyZWF0ZUZpYmVyJ3MgaW5pdGlhbCB2YWx1ZXMuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXNldCB0byB0aGUgY2xvbmVkIHZhbHVlcyB0aGF0IGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkJ3ZlLlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gTm9GbGFncyQxO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgICAgICAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gICAgICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9XG4gICAgICAgICAgY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICAgICAgICAgICAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUhvc3RSb290RmliZXIoXG4gICAgICB0YWcsXG4gICAgICBpc1N0cmljdE1vZGUsXG4gICAgICBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlXG4gICAgKSB7XG4gICAgICB2YXIgbW9kZTtcblxuICAgICAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICAgICAgbW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuXG4gICAgICAgIGlmIChpc1N0cmljdE1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgICBtb2RlIHw9IFN0cmljdExlZ2FjeU1vZGUgfCBTdHJpY3RFZmZlY3RzTW9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW9kZSA9IE5vTW9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgIC8vIEFsd2F5cyBjb2xsZWN0IHByb2ZpbGUgdGltaW5ncyB3aGVuIERldlRvb2xzIGFyZSBwcmVzZW50LlxuICAgICAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnTigJNcbiAgICAgICAgLy8gV2l0aG91dCBzb21lIG5vZGVzIGluIHRoZSB0cmVlIGhhdmluZyBlbXB0eSBiYXNlIHRpbWVzLlxuICAgICAgICBtb2RlIHw9IFByb2ZpbGVNb2RlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlRmliZXIoSG9zdFJvb3QsIG51bGwsIG51bGwsIG1vZGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICB0eXBlLCAvLyBSZWFjdCRFbGVtZW50VHlwZVxuICAgICAga2V5LFxuICAgICAgcGVuZGluZ1Byb3BzLFxuICAgICAgb3duZXIsXG4gICAgICBtb2RlLFxuICAgICAgbGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7IC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuXG4gICAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHNob3VsZENvbnN0cnVjdCh0eXBlKSkge1xuICAgICAgICAgIGZpYmVyVGFnID0gQ2xhc3NDb21wb25lbnQ7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBmaWJlclRhZyA9IEhvc3RDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBwZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgICAgICBtb2RlIHw9IFN0cmljdExlZ2FjeU1vZGU7XG5cbiAgICAgICAgICAgIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAgIC8vIFN0cmljdCBlZmZlY3RzIHNob3VsZCBuZXZlciBydW4gb24gbGVnYWN5IHJvb3RzXG4gICAgICAgICAgICAgIG1vZGUgfD0gU3RyaWN0RWZmZWN0c01vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFOlxuXG4gICAgICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgICAgICBjYXNlIFJFQUNUX1NDT1BFX1RZUEU6XG5cbiAgICAgICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcblxuICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgICAgICAgY2FzZSBSRUFDVF9UUkFDSU5HX01BUktFUl9UWVBFOlxuXG4gICAgICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgICAgICBjYXNlIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFOlxuXG4gICAgICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRQcm92aWRlcjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN1bWVyXG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRDb25zdW1lcjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gRm9yd2FyZFJlZjtcblxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSBNZW1vQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpbmZvID0gXCJcIjtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiB0eXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICB0eXBlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGluZm8gKz1cbiAgICAgICAgICAgICAgICAgIFwiIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICBcIm5hbWVkIGltcG9ydHMuXCI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgb3duZXJOYW1lID0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKG93bmVyKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgICAgICAgIGluZm8gKz0gXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBvd25lck5hbWUgKyBcImAuXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIFwiICtcbiAgICAgICAgICAgICAgICBcImNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgXCIgK1xuICAgICAgICAgICAgICAgIChcImJ1dCBnb3Q6IFwiICsgKHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIiArIGluZm8pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICAgICAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICAgICAgZmliZXIudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgICAgIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAgICAgIHtcbiAgICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSBvd25lcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGxhbmVzKSB7XG4gICAgICB2YXIgb3duZXIgPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuICAgICAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICAgICAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgcGVuZGluZ1Byb3BzLFxuICAgICAgICBvd25lcixcbiAgICAgICAgbW9kZSxcbiAgICAgICAgbGFuZXNcbiAgICAgICk7XG5cbiAgICAgIHtcbiAgICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoRnJhZ21lbnQsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwZW5kaW5nUHJvcHMuaWQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIG9mIHR5cGUgYHN0cmluZ2AgYXMgYSBwcm9wLiBSZWNlaXZlZCB0aGUgdHlwZSBgJXNgIGluc3RlYWQuJyxcbiAgICAgICAgICAgIHR5cGVvZiBwZW5kaW5nUHJvcHMuaWRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTtcbiAgICAgIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgICAgIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAgICAgIHtcbiAgICAgICAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgICAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogMFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICAgICAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VMaXN0Q29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgICAgIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgICAgIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKE9mZnNjcmVlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICAgICAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgICAgIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkSW5zdGFuY2UgPSB7XG4gICAgICAgIF92aXNpYmlsaXR5OiBPZmZzY3JlZW5WaXNpYmxlLFxuICAgICAgICBfcGVuZGluZ1Zpc2liaWxpdHk6IE9mZnNjcmVlblZpc2libGUsXG4gICAgICAgIF9wZW5kaW5nTWFya2VyczogbnVsbCxcbiAgICAgICAgX3JldHJ5Q2FjaGU6IG51bGwsXG4gICAgICAgIF90cmFuc2l0aW9uczogbnVsbCxcbiAgICAgICAgX2N1cnJlbnQ6IG51bGwsXG4gICAgICAgIGRldGFjaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZXRhY2hPZmZzY3JlZW5JbnN0YW5jZShwcmltYXJ5Q2hpbGRJbnN0YW5jZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGF0dGFjaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBhdHRhY2hPZmZzY3JlZW5JbnN0YW5jZShwcmltYXJ5Q2hpbGRJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBwcmltYXJ5Q2hpbGRJbnN0YW5jZTtcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFRleHQsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgICAgIHZhciBwZW5kaW5nUHJvcHMgPSBwb3J0YWwuY2hpbGRyZW4gIT09IG51bGwgPyBwb3J0YWwuY2hpbGRyZW4gOiBbXTtcbiAgICAgIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gICAgICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICAgICAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgICAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICAgICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLFxuICAgICAgICAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgICAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuICAgIGZ1bmN0aW9uIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHRhcmdldCwgc291cmNlKSB7XG4gICAgICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICAgIC8vIFdlIG9ubHkgdXNlIGEgRmliZXIgdG8gZW5zdXJlIHRoZSBzYW1lIGhpZGRlbiBjbGFzcyBzbyBERVYgaXNuJ3Qgc2xvdy5cbiAgICAgICAgdGFyZ2V0ID0gY3JlYXRlRmliZXIoSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgICAgIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAgICAgLy8gV2UgdHJpZWQgdG8gdXNlIE9iamVjdC5hc3NpZ24oKSBpbnN0ZWFkIGJ1dCB0aGlzIGlzIGNhbGxlZCBpblxuICAgICAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gICAgICAvLyBUaGlzIGNvZGUgaXMgREVWLW9ubHkgc28gc2l6ZSBpcyBub3QgYSBjb25jZXJuLlxuXG4gICAgICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgICAgIHRhcmdldC5rZXkgPSBzb3VyY2Uua2V5O1xuICAgICAgdGFyZ2V0LmVsZW1lbnRUeXBlID0gc291cmNlLmVsZW1lbnRUeXBlO1xuICAgICAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgICAgIHRhcmdldC5zdGF0ZU5vZGUgPSBzb3VyY2Uuc3RhdGVOb2RlO1xuICAgICAgdGFyZ2V0LnJldHVybiA9IHNvdXJjZS5yZXR1cm47XG4gICAgICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gICAgICB0YXJnZXQuc2libGluZyA9IHNvdXJjZS5zaWJsaW5nO1xuICAgICAgdGFyZ2V0LmluZGV4ID0gc291cmNlLmluZGV4O1xuICAgICAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gICAgICB0YXJnZXQucmVmQ2xlYW51cCA9IHNvdXJjZS5yZWZDbGVhbnVwO1xuICAgICAgdGFyZ2V0LnBlbmRpbmdQcm9wcyA9IHNvdXJjZS5wZW5kaW5nUHJvcHM7XG4gICAgICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICAgICAgdGFyZ2V0LnVwZGF0ZVF1ZXVlID0gc291cmNlLnVwZGF0ZVF1ZXVlO1xuICAgICAgdGFyZ2V0Lm1lbW9pemVkU3RhdGUgPSBzb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICAgICAgdGFyZ2V0Lm1vZGUgPSBzb3VyY2UubW9kZTtcbiAgICAgIHRhcmdldC5mbGFncyA9IHNvdXJjZS5mbGFncztcbiAgICAgIHRhcmdldC5zdWJ0cmVlRmxhZ3MgPSBzb3VyY2Uuc3VidHJlZUZsYWdzO1xuICAgICAgdGFyZ2V0LmRlbGV0aW9ucyA9IHNvdXJjZS5kZWxldGlvbnM7XG4gICAgICB0YXJnZXQubGFuZXMgPSBzb3VyY2UubGFuZXM7XG4gICAgICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICAgICAgdGFyZ2V0LmFsdGVybmF0ZSA9IHNvdXJjZS5hbHRlcm5hdGU7XG5cbiAgICAgIHtcbiAgICAgICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICB0YXJnZXQuYWN0dWFsU3RhcnRUaW1lID0gc291cmNlLmFjdHVhbFN0YXJ0VGltZTtcbiAgICAgICAgdGFyZ2V0LnNlbGZCYXNlRHVyYXRpb24gPSBzb3VyY2Uuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0Ll9kZWJ1Z093bmVyID0gc291cmNlLl9kZWJ1Z093bmVyO1xuICAgICAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gICAgICB0YXJnZXQuX2RlYnVnSG9va1R5cGVzID0gc291cmNlLl9kZWJ1Z0hvb2tUeXBlcztcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRmliZXJSb290Tm9kZShcbiAgICAgIGNvbnRhaW5lckluZm8sIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgICAgIHRhZyxcbiAgICAgIGh5ZHJhdGUsXG4gICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgZm9ybVN0YXRlXG4gICAgKSB7XG4gICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gICAgICB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICAgICAgdGhpcy5waW5nQ2FjaGUgPSBudWxsO1xuICAgICAgdGhpcy5maW5pc2hlZFdvcmsgPSBudWxsO1xuICAgICAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICAgICAgdGhpcy5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbDtcbiAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgIHRoaXMubmV4dCA9IG51bGw7XG4gICAgICB0aGlzLmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmU7XG4gICAgICB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9UaW1lc3RhbXApO1xuICAgICAgdGhpcy5wZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuICAgICAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB0aGlzLnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMuZXhwaXJlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICB0aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMuc2hlbGxTdXNwZW5kQ291bnRlciA9IDA7XG4gICAgICB0aGlzLmVudGFuZ2xlZExhbmVzID0gTm9MYW5lcztcbiAgICAgIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG4gICAgICB0aGlzLmhpZGRlblVwZGF0ZXMgPSBjcmVhdGVMYW5lTWFwKG51bGwpO1xuICAgICAgdGhpcy5pZGVudGlmaWVyUHJlZml4ID0gaWRlbnRpZmllclByZWZpeDtcbiAgICAgIHRoaXMub25SZWNvdmVyYWJsZUVycm9yID0gb25SZWNvdmVyYWJsZUVycm9yO1xuXG4gICAgICB0aGlzLmZvcm1TdGF0ZSA9IGZvcm1TdGF0ZTtcbiAgICAgIHRoaXMuaW5jb21wbGV0ZVRyYW5zaXRpb25zID0gbmV3IE1hcCgpO1xuXG4gICAgICB7XG4gICAgICAgIHRoaXMuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICB0aGlzLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgdGhpcy5tZW1vaXplZFVwZGF0ZXJzID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCA9ICh0aGlzLnBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSBbXSk7XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IFRvdGFsTGFuZXM7IF9pKyspIHtcbiAgICAgICAgICBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwLnB1c2gobmV3IFNldCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgICAgY2FzZSBDb25jdXJyZW50Um9vdDpcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSBoeWRyYXRlID8gXCJoeWRyYXRlUm9vdCgpXCIgOiBcImNyZWF0ZVJvb3QoKVwiO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIExlZ2FjeVJvb3Q6XG4gICAgICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gaHlkcmF0ZSA/IFwiaHlkcmF0ZSgpXCIgOiBcInJlbmRlcigpXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChcbiAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICB0YWcsXG4gICAgICBoeWRyYXRlLFxuICAgICAgaW5pdGlhbENoaWxkcmVuLFxuICAgICAgaHlkcmF0aW9uQ2FsbGJhY2tzLFxuICAgICAgaXNTdHJpY3RNb2RlLFxuICAgICAgY29uY3VycmVudFVwZGF0ZXNCeURlZmF1bHRPdmVycmlkZSwgLy8gVE9ETzogV2UgaGF2ZSBzZXZlcmFsIG9mIHRoZXNlIGFyZ3VtZW50cyB0aGF0IGFyZSBjb25jZXB0dWFsbHkgcGFydCBvZiB0aGVcbiAgICAgIC8vIGhvc3QgY29uZmlnLCBidXQgYmVjYXVzZSB0aGV5IGFyZSBwYXNzZWQgaW4gYXQgcnVudGltZSwgd2UgaGF2ZSB0byB0aHJlYWRcbiAgICAgIC8vIHRoZW0gdGhyb3VnaCB0aGUgcm9vdCBjb25zdHJ1Y3Rvci4gUGVyaGFwcyB3ZSBzaG91bGQgcHV0IHRoZW0gYWxsIGludG8gYVxuICAgICAgLy8gc2luZ2xlIHR5cGUsIGxpa2UgYSBEeW5hbWljSG9zdENvbmZpZyB0aGF0IGlzIGRlZmluZWQgYnkgdGhlIHJlbmRlcmVyLlxuICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgIHRyYW5zaXRpb25DYWxsYmFja3MsXG4gICAgICBmb3JtU3RhdGVcbiAgICApIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb25zdHJ1Y3Rvcl0gRmxvdyBubyBsb25nZXIgc3VwcG9ydHMgY2FsbGluZyBuZXcgb24gZnVuY3Rpb25zXG4gICAgICB2YXIgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKFxuICAgICAgICBjb250YWluZXJJbmZvLFxuICAgICAgICB0YWcsXG4gICAgICAgIGh5ZHJhdGUsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgZm9ybVN0YXRlXG4gICAgICApO1xuICAgICAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuICAgICAgdmFyIHVuaW5pdGlhbGl6ZWRGaWJlciA9IGNyZWF0ZUhvc3RSb290RmliZXIodGFnLCBpc1N0cmljdE1vZGUpO1xuICAgICAgcm9vdC5jdXJyZW50ID0gdW5pbml0aWFsaXplZEZpYmVyO1xuICAgICAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG5cbiAgICAgIHtcbiAgICAgICAgdmFyIF9pbml0aWFsU3RhdGUgPSB7XG4gICAgICAgICAgZWxlbWVudDogaW5pdGlhbENoaWxkcmVuLFxuICAgICAgICAgIGlzRGVoeWRyYXRlZDogaHlkcmF0ZSxcbiAgICAgICAgICBjYWNoZTogbnVsbCAvLyBub3QgZW5hYmxlZCB5ZXRcbiAgICAgICAgfTtcbiAgICAgICAgdW5pbml0aWFsaXplZEZpYmVyLm1lbW9pemVkU3RhdGUgPSBfaW5pdGlhbFN0YXRlO1xuICAgICAgfVxuXG4gICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUodW5pbml0aWFsaXplZEZpYmVyKTtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIHZhciBSZWFjdFZlcnNpb24gPSBcIjE4LjMuMC1jYW5hcnktMDNkNmY3Y2YwLTIwMjQwMjA5XCI7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29udGFpbmVySW5mbywgLy8gVE9ETzogZmlndXJlIG91dCB0aGUgQVBJIGZvciBjcm9zcy1yZW5kZXJlciBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIGltcGxlbWVudGF0aW9uXG4gICAgKSB7XG4gICAgICB2YXIga2V5ID1cbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGFyZ3VtZW50c1szXVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGtleSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgICAgICBrZXk6IGtleSA9PSBudWxsID8gbnVsbCA6IFwiXCIgKyBrZXksXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICAgICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE1pZ2h0IGFkZCBQUk9GSUxFIGxhdGVyLlxuXG4gICAgdmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG4gICAgdmFyIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlO1xuXG4gICAge1xuICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICAgICAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGUgPSB7fTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgIGlmICghcGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWJlciA9IGdldChwYXJlbnRDb21wb25lbnQpO1xuICAgICAgdmFyIHBhcmVudENvbnRleHQgPSBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcik7XG5cbiAgICAgIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSBmaWJlci50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudCwgbWV0aG9kTmFtZSkge1xuICAgICAge1xuICAgICAgICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICAgICAgICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbXBvbmVudCkuam9pbihcIixcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBrZXlzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICAgICAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhvc3RGaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIjtcblxuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGhvc3RGaWJlcik7XG5cbiAgICAgICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIiVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZVwiLFxuICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCByZW5kZXJzIFN0cmljdE1vZGUgY2hpbGRyZW4uIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZVwiLFxuICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgICAgIC8vIHJlbmRlciBhbmQgdGhlcmUncyBhbm90aGVyIHdhcm5pbmcgZm9yIHRoYXQgYW55d2F5LlxuICAgICAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGhvc3RGaWJlci5zdGF0ZU5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihcbiAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICB0YWcsXG4gICAgICBoeWRyYXRpb25DYWxsYmFja3MsXG4gICAgICBpc1N0cmljdE1vZGUsXG4gICAgICBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLFxuICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgIHRyYW5zaXRpb25DYWxsYmFja3NcbiAgICApIHtcbiAgICAgIHZhciBoeWRyYXRlID0gZmFsc2U7XG4gICAgICB2YXIgaW5pdGlhbENoaWxkcmVuID0gbnVsbDtcbiAgICAgIHJldHVybiBjcmVhdGVGaWJlclJvb3QoXG4gICAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICAgIHRhZyxcbiAgICAgICAgaHlkcmF0ZSxcbiAgICAgICAgaW5pdGlhbENoaWxkcmVuLFxuICAgICAgICBoeWRyYXRpb25DYWxsYmFja3MsXG4gICAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgICAgY29uY3VycmVudFVwZGF0ZXNCeURlZmF1bHRPdmVycmlkZSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICB0cmFuc2l0aW9uQ2FsbGJhY2tzLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKSB7XG4gICAgICB7XG4gICAgICAgIG9uU2NoZWR1bGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50JDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCQxKTtcblxuICAgICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuXG4gICAgICBpZiAoY29udGFpbmVyLmNvbnRleHQgPT09IG51bGwpIHtcbiAgICAgICAgY29udGFpbmVyLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAoaXNSZW5kZXJpbmcgJiYgY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcykge1xuICAgICAgICAgIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcIlJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyBcIiArXG4gICAgICAgICAgICAgIFwidHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90IGFsbG93ZWQuIFwiICtcbiAgICAgICAgICAgICAgXCJJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcblwiICtcbiAgICAgICAgICAgICAgXCJDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudCkgfHwgXCJVbmtub3duXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgICAgIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICAgICAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICAgIH07XG4gICAgICBjYWxsYmFjayA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCJyZW5kZXIoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhIFwiICtcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB9XG5cbiAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShjdXJyZW50JDEsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBjdXJyZW50JDEsIGxhbmUpO1xuICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIGN1cnJlbnQkMSwgbGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQdWJsaWNSb290SW5zdGFuY2UoY29udGFpbmVyKSB7XG4gICAgICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICAgICAgaWYgKCFjb250YWluZXJGaWJlci5jaGlsZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjb250YWluZXJGaWJlci5jaGlsZC50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaG91bGRFcnJvckltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzaG91bGRFcnJvcihmaWJlcikge1xuICAgICAgcmV0dXJuIHNob3VsZEVycm9ySW1wbChmaWJlcik7XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFN1c3BlbmRJbXBsID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNob3VsZFN1c3BlbmQoZmliZXIpIHtcbiAgICAgIHJldHVybiBzaG91bGRTdXNwZW5kSW1wbChmaWJlcik7XG4gICAgfVxuICAgIHZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IG51bGw7XG4gICAgdmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG4gICAgdmFyIG92ZXJyaWRlUHJvcHMgPSBudWxsO1xuICAgIHZhciBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG51bGw7XG4gICAgdmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbiAgICB2YXIgc2NoZWR1bGVVcGRhdGUgPSBudWxsO1xuICAgIHZhciBzZXRFcnJvckhhbmRsZXIgPSBudWxsO1xuICAgIHZhciBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuXG4gICAge1xuICAgICAgdmFyIGNvcHlXaXRoRGVsZXRlSW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcblxuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChpc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgICAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfTtcblxuICAgICAgdmFyIGNvcHlXaXRoRGVsZXRlID0gZnVuY3Rpb24gKG9iaiwgcGF0aCkge1xuICAgICAgICByZXR1cm4gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgMCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY29weVdpdGhSZW5hbWVJbXBsID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICAgICAgdmFyIG9sZEtleSA9IG9sZFBhdGhbaW5kZXhdO1xuICAgICAgICB2YXIgdXBkYXRlZCA9IGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuXG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgICAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICAgICAgICBpZiAoaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHVwZGF0ZWRbb2xkS2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbChcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgICAgICAgIG9ialtvbGRLZXldLFxuICAgICAgICAgICAgb2xkUGF0aCxcbiAgICAgICAgICAgIG5ld1BhdGgsXG4gICAgICAgICAgICBpbmRleCArIDFcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY29weVdpdGhSZW5hbWUgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICB3YXJuKFwiY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIG9mIHRoZSBzYW1lIGxlbmd0aFwiKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob2xkUGF0aFtpXSAhPT0gbmV3UGF0aFtpXSkge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgIFwiY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5XCJcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIDApO1xuICAgICAgfTtcblxuICAgICAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgICAgIHZhciB1cGRhdGVkID0gaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgICAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb3B5V2l0aFNldCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgZmluZEhvb2sgPSBmdW5jdGlvbiAoZmliZXIsIGlkKSB7XG4gICAgICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAgICAgLy8gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgd2l0aCBlLmcuIG5lc3RlZCBob29rcy5cbiAgICAgICAgdmFyIGN1cnJlbnRIb29rID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICAgICAgY3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgICAgIGlkLS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudEhvb2s7XG4gICAgICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIGVkaXRhYmxlIHZhbHVlcyBmb3IgdXNlU3RhdGUgYW5kIHVzZVJlZHVjZXIuXG5cbiAgICAgIG92ZXJyaWRlSG9va1N0YXRlID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhTZXQoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCkge1xuICAgICAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICAgICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aERlbGV0ZShob29rLm1lbW9pemVkU3RhdGUsIHBhdGgpO1xuICAgICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhSZW5hbWUoaG9vay5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuICAgICAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCkge1xuICAgICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgICAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoXG4gICAgICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICBvbGRQYXRoLFxuICAgICAgICAgIG5ld1BhdGhcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZXRFcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkRXJyb3JJbXBsKSB7XG4gICAgICAgIHNob3VsZEVycm9ySW1wbCA9IG5ld1Nob3VsZEVycm9ySW1wbDtcbiAgICAgIH07XG5cbiAgICAgIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgICAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICAgICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgICAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZShpbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMoKSB7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmplY3RJbnRvRGV2VG9vbHMoZGV2VG9vbHNDb25maWcpIHtcbiAgICAgIHZhciBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSA9IGRldlRvb2xzQ29uZmlnLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlO1xuICAgICAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICAgICAgcmV0dXJuIGluamVjdEludGVybmFscyh7XG4gICAgICAgIGJ1bmRsZVR5cGU6IGRldlRvb2xzQ29uZmlnLmJ1bmRsZVR5cGUsXG4gICAgICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgICAgIHJlbmRlcmVyUGFja2FnZU5hbWU6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyUGFja2FnZU5hbWUsXG4gICAgICAgIHJlbmRlcmVyQ29uZmlnOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlckNvbmZpZyxcbiAgICAgICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgICAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCxcbiAgICAgICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgsXG4gICAgICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOiBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCxcbiAgICAgICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoLFxuICAgICAgICBzZXRFcnJvckhhbmRsZXI6IHNldEVycm9ySGFuZGxlcixcbiAgICAgICAgc2V0U3VzcGVuc2VIYW5kbGVyOiBzZXRTdXNwZW5zZUhhbmRsZXIsXG4gICAgICAgIHNjaGVkdWxlVXBkYXRlOiBzY2hlZHVsZVVwZGF0ZSxcbiAgICAgICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgICAgIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcixcbiAgICAgICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6XG4gICAgICAgICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgfHwgZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZSxcbiAgICAgICAgLy8gUmVhY3QgUmVmcmVzaFxuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6IGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCxcbiAgICAgICAgc2NoZWR1bGVSZWZyZXNoOiBzY2hlZHVsZVJlZnJlc2gsXG4gICAgICAgIHNjaGVkdWxlUm9vdDogc2NoZWR1bGVSb290LFxuICAgICAgICBzZXRSZWZyZXNoSGFuZGxlcjogc2V0UmVmcmVzaEhhbmRsZXIsXG4gICAgICAgIC8vIEVuYWJsZXMgRGV2VG9vbHMgdG8gYXBwZW5kIG93bmVyIHN0YWNrcyB0byBlcnJvciBtZXNzYWdlcyBpbiBERVYgbW9kZS5cbiAgICAgICAgZ2V0Q3VycmVudEZpYmVyOiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scyxcbiAgICAgICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBkZXRlY3QgcmVjb25jaWxlciB2ZXJzaW9uIHJhdGhlciB0aGFuIHJlbmRlcmVyIHZlcnNpb25cbiAgICAgICAgLy8gd2hpY2ggbWF5IG5vdCBtYXRjaCBmb3IgdGhpcmQgcGFydHkgcmVuZGVyZXJzLlxuICAgICAgICByZWNvbmNpbGVyVmVyc2lvbjogUmVhY3RWZXJzaW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbiAgICBmdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQoY29tcG9uZW50T3JIYW5kbGUpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgICAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKCFvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgXCIlcyBpcyBhY2Nlc3NpbmcgZmluZE5vZGVIYW5kbGUgaW5zaWRlIGl0cyByZW5kZXIoKS4gXCIgK1xuICAgICAgICAgICAgICAgIFwicmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCBcIiArXG4gICAgICAgICAgICAgICAgXCJuZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyBcIiArXG4gICAgICAgICAgICAgICAgXCJyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCBcIiArXG4gICAgICAgICAgICAgICAgXCJjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKG93bmVyLnR5cGUpIHx8IFwiQSBjb21wb25lbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50T3JIYW5kbGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGYWJyaWMgaW5zdGFuY2VzXG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsICYmXG4gICAgICAgIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZVxuICAgICAgKSB7XG4gICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtcmV0dXJuXSBDYW4ndCByZWZpbmUgY29tcG9uZW50T3JIYW5kbGUgYXMgYSBGYWJyaWMgaW5zdGFuY2VcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZTtcbiAgICAgIH0gLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgcmVuZGVyZXIgaW5zdGFuY2VzXG5cbiAgICAgIGlmIChjb21wb25lbnRPckhhbmRsZS5fbmF0aXZlVGFnKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWV4YWN0XSBOZWNlc3Nhcnkgd2hlbiBydW5uaW5nIEZsb3cgb24gRmFicmljXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaG9zdEluc3RhbmNlO1xuXG4gICAgICB7XG4gICAgICAgIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhcbiAgICAgICAgICBjb21wb25lbnRPckhhbmRsZSxcbiAgICAgICAgICBcImZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRFwiXG4gICAgICAgICk7XG4gICAgICB9IC8vIGZpbmRIb3N0SW5zdGFuY2UgaGFuZGxlcyBsZWdhY3kgdnMuIEZhYnJpYyBkaWZmZXJlbmNlcyBjb3JyZWN0bHlcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWV4YWN0XSB3ZSBuZWVkIHRvIGZpeCB0aGUgZGVmaW5pdGlvbiBvZiBgSG9zdENvbXBvbmVudGAgdG8gdXNlIE5hdGl2ZU1ldGhvZHMgYXMgYW4gaW50ZXJmYWNlLCBub3QgYXMgYSB0eXBlLlxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuXG4gICAgICByZXR1cm4gaG9zdEluc3RhbmNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTm9kZUhhbmRsZShjb21wb25lbnRPckhhbmRsZSkge1xuICAgICAge1xuICAgICAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci5zdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoIW93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBcIiVzIGlzIGFjY2Vzc2luZyBmaW5kTm9kZUhhbmRsZSBpbnNpZGUgaXRzIHJlbmRlcigpLiBcIiArXG4gICAgICAgICAgICAgICAgXCJyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkIFwiICtcbiAgICAgICAgICAgICAgICBcIm5ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzIFwiICtcbiAgICAgICAgICAgICAgICBcInJlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kIFwiICtcbiAgICAgICAgICAgICAgICBcImNvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3duZXIudHlwZSkgfHwgXCJBIGNvbXBvbmVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnRPckhhbmRsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9ySGFuZGxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIC8vIEFscmVhZHkgYSBub2RlIGhhbmRsZVxuICAgICAgICByZXR1cm4gY29tcG9uZW50T3JIYW5kbGU7XG4gICAgICB9IC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IHJlbmRlcmVyIGluc3RhbmNlc1xuXG4gICAgICBpZiAoY29tcG9uZW50T3JIYW5kbGUuX25hdGl2ZVRhZykge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50T3JIYW5kbGUuX25hdGl2ZVRhZztcbiAgICAgIH0gLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGYWJyaWMgaW5zdGFuY2VzXG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsICE9IG51bGwgJiZcbiAgICAgICAgY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsLm5hdGl2ZVRhZyAhPSBudWxsXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5uYXRpdmVUYWc7XG4gICAgICB9IC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggRmFicmljIHB1YmxpYyBpbnN0YW5jZXNcblxuICAgICAgdmFyIG5hdGl2ZVRhZyA9XG4gICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UoXG4gICAgICAgICAgY29tcG9uZW50T3JIYW5kbGVcbiAgICAgICAgKTtcblxuICAgICAgaWYgKG5hdGl2ZVRhZykge1xuICAgICAgICByZXR1cm4gbmF0aXZlVGFnO1xuICAgICAgfVxuXG4gICAgICB2YXIgaG9zdEluc3RhbmNlO1xuXG4gICAgICB7XG4gICAgICAgIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhcbiAgICAgICAgICBjb21wb25lbnRPckhhbmRsZSxcbiAgICAgICAgICBcImZpbmROb2RlSGFuZGxlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gRmxvdyBsaW1pdGF0aW9uIGluIHJlZmluaW5nIGFuIG9wYXF1ZSB0eXBlXG4gICAgICAgIHJldHVybiBob3N0SW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UuX25hdGl2ZVRhZyAhPSBudWxsKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgcmVuZGVyZXIgaW5zdGFuY2VzXG4gICAgICAgIHJldHVybiBob3N0SW5zdGFuY2UuX25hdGl2ZVRhZztcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gTmVjZXNzYXJ5IHdoZW4gcnVubmluZyBGbG93IG9uIHRoZSBsZWdhY3kgcmVuZGVyZXJcblxuICAgICAgcmV0dXJuIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UoXG4gICAgICAgIGhvc3RJbnN0YW5jZVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hDb21tYW5kKGhhbmRsZSwgY29tbWFuZCwgYXJncykge1xuICAgICAgdmFyIG5hdGl2ZVRhZyA9XG4gICAgICAgIGhhbmRsZS5fbmF0aXZlVGFnICE9IG51bGxcbiAgICAgICAgICA/IGhhbmRsZS5fbmF0aXZlVGFnXG4gICAgICAgICAgOiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZ2V0TmF0aXZlVGFnRnJvbVB1YmxpY0luc3RhbmNlKGhhbmRsZSk7XG5cbiAgICAgIGlmIChuYXRpdmVUYWcgPT0gbnVsbCkge1xuICAgICAgICB7XG4gICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICBcImRpc3BhdGNoQ29tbWFuZCB3YXMgY2FsbGVkIHdpdGggYSByZWYgdGhhdCBpc24ndCBhIFwiICtcbiAgICAgICAgICAgICAgXCJuYXRpdmUgY29tcG9uZW50LiBVc2UgUmVhY3QuZm9yd2FyZFJlZiB0byBnZXQgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBjb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBub2RlID0gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaGFuZGxlKTtcblxuICAgICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICBuYXRpdmVGYWJyaWNVSU1hbmFnZXIuZGlzcGF0Y2hDb21tYW5kKG5vZGUsIGNvbW1hbmQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5kaXNwYXRjaFZpZXdNYW5hZ2VyQ29tbWFuZChcbiAgICAgICAgICBuYXRpdmVUYWcsXG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICBhcmdzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoaGFuZGxlLCBldmVudFR5cGUpIHtcbiAgICAgIHZhciBuYXRpdmVUYWcgPVxuICAgICAgICBoYW5kbGUuX25hdGl2ZVRhZyAhPSBudWxsXG4gICAgICAgICAgPyBoYW5kbGUuX25hdGl2ZVRhZ1xuICAgICAgICAgIDogUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuXG4gICAgICBpZiAobmF0aXZlVGFnID09IG51bGwpIHtcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJzZW5kQWNjZXNzaWJpbGl0eUV2ZW50IHdhcyBjYWxsZWQgd2l0aCBhIHJlZiB0aGF0IGlzbid0IGEgXCIgK1xuICAgICAgICAgICAgICBcIm5hdGl2ZSBjb21wb25lbnQuIFVzZSBSZWFjdC5mb3J3YXJkUmVmIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vZGUgPSBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZ2V0Tm9kZUZyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuXG4gICAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgIG5hdGl2ZUZhYnJpY1VJTWFuYWdlci5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KG5vZGUsIGV2ZW50VHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UubGVnYWN5U2VuZEFjY2Vzc2liaWxpdHlFdmVudChcbiAgICAgICAgICBuYXRpdmVUYWcsXG4gICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXJldHVybl0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSBpcyBvcGFxdWUgYnV0IHdlIG5lZWQgdG8gbWFrZSBhbiBleGNlcHRpb24gaGVyZS5cbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSAmJiAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGUgJiYgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlLm5vZGVcbiAgICAgICk7XG4gICAgfSAvLyBTaG91bGQgaGF2ZSBiZWVuIFB1YmxpY0luc3RhbmNlIGZyb20gUmVhY3RGaWJlckNvbmZpZ0ZhYnJpY1xuICAgIC8vIFNob3VsZCBoYXZlIGJlZW4gUHVibGljSW5zdGFuY2UgZnJvbSBSZWFjdEZpYmVyQ29uZmlnTmF0aXZlXG4gICAgLy8gUmVtb3ZlIHRoaXMgb25jZSBQYXBlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGFuZCBET00gTm9kZSBBUEkgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBSTi5cblxuICAgIGZ1bmN0aW9uIGlzQ2hpbGRQdWJsaWNJbnN0YW5jZShwYXJlbnRJbnN0YW5jZSwgY2hpbGRJbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICAvLyBQYXBlclxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltwcm9wLW1pc3NpbmddIERvbid0IGNoZWNrIHZpYSBgaW5zdGFuY2VvZiBSZWFjdE5hdGl2ZUZpYmVySG9zdENvbXBvbmVudGAsIHNvIGl0IHdvbid0IGJlIGxlYWtlZCB0byBGYWJyaWMuXG4gICAgICAgICAgcGFyZW50SW5zdGFuY2UuX2ludGVybmFsRmliZXJJbnN0YW5jZUhhbmRsZURFViAmJiAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW3Byb3AtbWlzc2luZ10gRG9uJ3QgY2hlY2sgdmlhIGBpbnN0YW5jZW9mIFJlYWN0TmF0aXZlRmliZXJIb3N0Q29tcG9uZW50YCwgc28gaXQgd29uJ3QgYmUgbGVha2VkIHRvIEZhYnJpYy5cbiAgICAgICAgICBjaGlsZEluc3RhbmNlLl9pbnRlcm5hbEZpYmVySW5zdGFuY2VIYW5kbGVERVZcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGRvZXNGaWJlckNvbnRhaW4oXG4gICAgICAgICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5faW50ZXJuYWxGaWJlckluc3RhbmNlSGFuZGxlREVWLCAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICBjaGlsZEluc3RhbmNlLl9pbnRlcm5hbEZpYmVySW5zdGFuY2VIYW5kbGVERVZcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudEludGVybmFsSW5zdGFuY2VIYW5kbGUgPSAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdIFR5cGUgZm9yIHBhcmVudEluc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gUHVibGljSW5zdGFuY2UgZnJvbSBSZWFjdEZpYmVyQ29uZmlnRmFicmljLlxuICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXRJbnRlcm5hbEluc3RhbmNlSGFuZGxlRnJvbVB1YmxpY0luc3RhbmNlKFxuICAgICAgICAgICAgcGFyZW50SW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICB2YXIgY2hpbGRJbnRlcm5hbEluc3RhbmNlSGFuZGxlID0gLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS1jYWxsXSBUeXBlIGZvciBjaGlsZEluc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gUHVibGljSW5zdGFuY2UgZnJvbSBSZWFjdEZpYmVyQ29uZmlnRmFicmljLlxuICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXRJbnRlcm5hbEluc3RhbmNlSGFuZGxlRnJvbVB1YmxpY0luc3RhbmNlKFxuICAgICAgICAgICAgY2hpbGRJbnN0YW5jZVxuICAgICAgICAgICk7IC8vIEZhYnJpY1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRJbnRlcm5hbEluc3RhbmNlSGFuZGxlICE9IG51bGwgJiZcbiAgICAgICAgICBjaGlsZEludGVybmFsSW5zdGFuY2VIYW5kbGUgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZG9lc0ZpYmVyQ29udGFpbihcbiAgICAgICAgICAgIHBhcmVudEludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICAgICAgICAgICBjaGlsZEludGVybmFsSW5zdGFuY2VIYW5kbGVcbiAgICAgICAgICApO1xuICAgICAgICB9IC8vIE1lYW5zIHRoYXQgb25lIGluc3RhbmNlIGlzIGZyb20gRmFicmljIGFuZCBvdGhlciBpcyBmcm9tIFBhcGVyLlxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZW1wdHlPYmplY3QgPSB7fTtcblxuICAgIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xuICAgIH0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5KGZpYmVySGllcmFyY2h5KSB7XG4gICAgICByZXR1cm4gZmliZXJIaWVyYXJjaHkubWFwKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShmaWJlci50eXBlKSxcbiAgICAgICAgICBnZXRJbnNwZWN0b3JEYXRhOiBmdW5jdGlvbiAoZmluZE5vZGVIYW5kbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHByb3BzOiBnZXRIb3N0UHJvcHMoZmliZXIpLFxuICAgICAgICAgICAgICBtZWFzdXJlOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIEZhYnJpYywgd2UnbGwgZmluZCBhIHNoYWRvdyBub2RlIGFuZCB1c2UgdGhhdCB0byBtZWFzdXJlLlxuICAgICAgICAgICAgICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPVxuICAgICAgICAgICAgICAgICAgaG9zdEZpYmVyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIGhvc3RGaWJlci5zdGF0ZU5vZGUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIGhvc3RGaWJlci5zdGF0ZU5vZGUubm9kZTtcblxuICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICBuYXRpdmVGYWJyaWNVSU1hbmFnZXIubWVhc3VyZShub2RlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLm1lYXN1cmUoXG4gICAgICAgICAgICAgICAgICAgIGdldEhvc3ROb2RlKGZpYmVyLCBmaW5kTm9kZUhhbmRsZSksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgIGZ1bmN0aW9uIGdldEhvc3ROb2RlKGZpYmVyLCBmaW5kTm9kZUhhbmRsZSkge1xuICAgICAge1xuICAgICAgICB2YXIgaG9zdE5vZGU7IC8vIGxvb2sgZm9yIGNoaWxkcmVuIGZpcnN0IGZvciB0aGUgaG9zdE5vZGVcbiAgICAgICAgLy8gYXMgY29tcG9zaXRlIGZpYmVycyBkbyBub3QgaGF2ZSBhIGhvc3ROb2RlXG5cbiAgICAgICAgd2hpbGUgKGZpYmVyKSB7XG4gICAgICAgICAgaWYgKGZpYmVyLnN0YXRlTm9kZSAhPT0gbnVsbCAmJiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGhvc3ROb2RlID0gZmluZE5vZGVIYW5kbGUoZmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaG9zdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBob3N0Tm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbiAgICBmdW5jdGlvbiBnZXRIb3N0UHJvcHMoZmliZXIpIHtcbiAgICAgIHZhciBob3N0ID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgICBpZiAoaG9zdCkge1xuICAgICAgICByZXR1cm4gaG9zdC5tZW1vaXplZFByb3BzIHx8IGVtcHR5T2JqZWN0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlKGNsb3Nlc3RJbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIFJlYWN0TmF0aXZlXG4gICAgICAgIGlmICghY2xvc2VzdEluc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhpZXJhcmNoeTogW10sXG4gICAgICAgICAgICBwcm9wczogZW1wdHlPYmplY3QsXG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4OiBudWxsLFxuICAgICAgICAgICAgY29tcG9uZW50U3RhY2s6IFwiXCJcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpYmVyID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoY2xvc2VzdEluc3RhbmNlKTtcbiAgICAgICAgdmFyIGZpYmVySGllcmFyY2h5ID0gZ2V0T3duZXJIaWVyYXJjaHkoZmliZXIpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBsYXN0Tm9uSG9zdEluc3RhbmNlKGZpYmVySGllcmFyY2h5KTtcbiAgICAgICAgdmFyIGhpZXJhcmNoeSA9IGNyZWF0ZUhpZXJhcmNoeShmaWJlckhpZXJhcmNoeSk7XG4gICAgICAgIHZhciBwcm9wcyA9IGdldEhvc3RQcm9wcyhpbnN0YW5jZSk7XG4gICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gZmliZXJIaWVyYXJjaHkuaW5kZXhPZihpbnN0YW5jZSk7XG4gICAgICAgIHZhciBjb21wb25lbnRTdGFjayA9XG4gICAgICAgICAgZmliZXIgIT09IG51bGwgPyBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoZmliZXIpIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjbG9zZXN0SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgIGhpZXJhcmNoeTogaGllcmFyY2h5LFxuICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICBzZWxlY3RlZEluZGV4OiBzZWxlY3RlZEluZGV4LFxuICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBjb21wb25lbnRTdGFja1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE93bmVySGllcmFyY2h5KGluc3RhbmNlKSB7XG4gICAgICB2YXIgaGllcmFyY2h5ID0gW107XG4gICAgICB0cmF2ZXJzZU93bmVyVHJlZVVwKGhpZXJhcmNoeSwgaW5zdGFuY2UpO1xuICAgICAgcmV0dXJuIGhpZXJhcmNoeTtcbiAgICB9IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgIGZ1bmN0aW9uIGxhc3ROb25Ib3N0SW5zdGFuY2UoaGllcmFyY2h5KSB7XG4gICAgICBmb3IgKHZhciBpID0gaGllcmFyY2h5Lmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gaGllcmFyY2h5W2ldO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZS50YWcgIT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhpZXJhcmNoeVswXTtcbiAgICB9IC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlT3duZXJUcmVlVXAoaGllcmFyY2h5LCBpbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICBoaWVyYXJjaHkudW5zaGlmdChpbnN0YW5jZSk7XG4gICAgICAgICAgdHJhdmVyc2VPd25lclRyZWVVcChoaWVyYXJjaHksIGluc3RhbmNlLl9kZWJ1Z093bmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluc3BlY3RvckRhdGFGb3JWaWV3VGFnKHZpZXdUYWcpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNsb3Nlc3RJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbVRhZyh2aWV3VGFnKTtcbiAgICAgICAgcmV0dXJuIGdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZShjbG9zZXN0SW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludChcbiAgICAgIGZpbmROb2RlSGFuZGxlLFxuICAgICAgaW5zcGVjdGVkVmlldyxcbiAgICAgIGxvY2F0aW9uWCxcbiAgICAgIGxvY2F0aW9uWSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjbG9zZXN0SW5zdGFuY2UgPSBudWxsO1xuICAgICAgICB2YXIgZmFicmljTm9kZSA9XG4gICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaW5zcGVjdGVkVmlldyk7XG5cbiAgICAgICAgaWYgKGZhYnJpY05vZGUpIHtcbiAgICAgICAgICAvLyBGb3IgRmFicmljIHdlIGNhbiBsb29rIHVwIHRoZSBpbnN0YW5jZSBoYW5kbGUgZGlyZWN0bHkgYW5kIG1lYXN1cmUgaXQuXG4gICAgICAgICAgbmF0aXZlRmFicmljVUlNYW5hZ2VyLmZpbmROb2RlQXRQb2ludChcbiAgICAgICAgICAgIGZhYnJpY05vZGUsXG4gICAgICAgICAgICBsb2NhdGlvblgsXG4gICAgICAgICAgICBsb2NhdGlvblksXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAgICAgICAgICAgICB2YXIgbm9kZSA9XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlKVxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlSGFuZGxlID09IG51bGwgfHwgbm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyWTogbG9jYXRpb25ZLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZShjbG9zZXN0SW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjbG9zZXN0SW5zdGFuY2UgPVxuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlLmNhbm9uaWNhbFxuICAgICAgICAgICAgICAgICAgLmludGVybmFsSW5zdGFuY2VIYW5kbGU7IC8vIE5vdGU6IHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2Ugd2FudCB0byByZW1vdmUgaXQgQVNBUC4gS2VlcGluZyBpdCBoZXJlIGZvciBSZWFjdCBEZXZUb29scyBjb21wYXRpYmlsaXR5IGZvciBub3cuXG5cbiAgICAgICAgICAgICAgdmFyIG5hdGl2ZVZpZXdUYWcgPVxuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlLmNhbm9uaWNhbC5uYXRpdmVUYWc7XG4gICAgICAgICAgICAgIG5hdGl2ZUZhYnJpY1VJTWFuYWdlci5tZWFzdXJlKFxuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIHBhZ2VYLCBwYWdlWSkge1xuICAgICAgICAgICAgICAgICAgdmFyIGluc3BlY3RvckRhdGEgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UoY2xvc2VzdEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ24oe30sIGluc3BlY3RvckRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyWTogbG9jYXRpb25ZLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwYWdlWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogcGFnZVksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgdG91Y2hlZFZpZXdUYWc6IG5hdGl2ZVZpZXdUYWdcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5zcGVjdGVkVmlldy5faW50ZXJuYWxGaWJlckluc3RhbmNlSGFuZGxlREVWICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBGb3IgUGFwZXIgd2UgZmFsbCBiYWNrIHRvIHRoZSBvbGQgc3RyYXRlZ3kgdXNpbmcgdGhlIFJlYWN0IHRhZy5cbiAgICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLmZpbmRTdWJ2aWV3SW4oXG4gICAgICAgICAgICBmaW5kTm9kZUhhbmRsZShpbnNwZWN0ZWRWaWV3KSxcbiAgICAgICAgICAgIFtsb2NhdGlvblgsIGxvY2F0aW9uWV0sXG4gICAgICAgICAgICBmdW5jdGlvbiAobmF0aXZlVmlld1RhZywgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgIHZhciBpbnNwZWN0b3JEYXRhID0gZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlKFxuICAgICAgICAgICAgICAgIGdldEluc3RhbmNlRnJvbVRhZyhuYXRpdmVWaWV3VGFnKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICAgICAgICBhc3NpZ24oe30sIGluc3BlY3RvckRhdGEsIHtcbiAgICAgICAgICAgICAgICAgIHBvaW50ZXJZOiBsb2NhdGlvblksXG4gICAgICAgICAgICAgICAgICBmcmFtZToge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHRvdWNoZWRWaWV3VGFnOiBuYXRpdmVWaWV3VGFnXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgXCJnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQgZXhwZWN0cyB0byByZWNlaXZlIGEgaG9zdCBjb21wb25lbnRcIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblJlY292ZXJhYmxlRXJyb3IoZXJyb3IkMSkge1xuICAgICAgLy8gVE9ETzogRXhwb3NlIG9uUmVjb3ZlcmFibGVFcnJvciBvcHRpb24gdG8gdXNlcnNwYWNlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nLCByZWFjdC1pbnRlcm5hbC93YXJuaW5nLWFyZ3NcbiAgICAgIGVycm9yKGVycm9yJDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXJUYWcsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcm9vdCA9IHJvb3RzLmdldChjb250YWluZXJUYWcpO1xuXG4gICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgLy8gVE9ETyAoYnZhdWdobik6IElmIHdlIGRlY2lkZSB0byBrZWVwIHRoZSB3cmFwcGVyIGNvbXBvbmVudCxcbiAgICAgICAgLy8gV2UgY291bGQgY3JlYXRlIGEgd3JhcHBlciBmb3IgY29udGFpbmVyVGFnIGFzIHdlbGwgdG8gcmVkdWNlIHNwZWNpYWwgY2FzaW5nLlxuICAgICAgICByb290ID0gY3JlYXRlQ29udGFpbmVyKFxuICAgICAgICAgIGNvbnRhaW5lclRhZyxcbiAgICAgICAgICBMZWdhY3lSb290LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICAgIHJvb3RzLnNldChjb250YWluZXJUYWcsIHJvb3QpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgcm9vdCwgbnVsbCwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShyb290KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lclRhZykge1xuICAgICAgdmFyIHJvb3QgPSByb290cy5nZXQoY29udGFpbmVyVGFnKTtcblxuICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgLy8gVE9ETzogSXMgaXQgc2FmZSB0byByZXNldCB0aGlzIG5vdyBvciBzaG91bGQgSSB3YWl0IHNpbmNlIHRoaXMgdW5tb3VudCBjb3VsZCBiZSBkZWZlcnJlZD9cbiAgICAgICAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByb290cy5kZWxldGUoY29udGFpbmVyVGFnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZUFuZFJlbW92ZUNvbnRhaW5lcihjb250YWluZXJUYWcpIHtcbiAgICAgIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyVGFnKTsgLy8gQ2FsbCBiYWNrIGludG8gbmF0aXZlIHRvIHJlbW92ZSBhbGwgb2YgdGhlIHN1YnZpZXdzIGZyb20gdGhpcyBjb250YWluZXJcblxuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5yZW1vdmVSb290Vmlldyhjb250YWluZXJUYWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyVGFnKSB7XG4gICAgICB2YXIga2V5ID1cbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGFyZ3VtZW50c1syXVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyVGFnLCBudWxsLCBrZXkpO1xuICAgIH1cblxuICAgIHNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oYmF0Y2hlZFVwZGF0ZXMpO1xuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUNvbXBvbmVudFN0YWNrRm9yRXJyb3JSZXBvcnRpbmcocmVhY3RUYWcpIHtcbiAgICAgIHZhciBmaWJlciA9IGdldEluc3RhbmNlRnJvbVRhZyhyZWFjdFRhZyk7XG5cbiAgICAgIGlmICghZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoZmliZXIpO1xuICAgIH1cblxuICAgIHZhciByb290cyA9IG5ldyBNYXAoKTtcbiAgICB2YXIgSW50ZXJuYWxzID0ge1xuICAgICAgY29tcHV0ZUNvbXBvbmVudFN0YWNrRm9yRXJyb3JSZXBvcnRpbmc6XG4gICAgICAgIGNvbXB1dGVDb21wb25lbnRTdGFja0ZvckVycm9yUmVwb3J0aW5nXG4gICAgfTtcbiAgICBpbmplY3RJbnRvRGV2VG9vbHMoe1xuICAgICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGdldEluc3RhbmNlRnJvbVRhZyxcbiAgICAgIGJ1bmRsZVR5cGU6IDEsXG4gICAgICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gICAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBcInJlYWN0LW5hdGl2ZS1yZW5kZXJlclwiLFxuICAgICAgcmVuZGVyZXJDb25maWc6IHtcbiAgICAgICAgZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlOiBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UsXG4gICAgICAgIGdldEluc3BlY3RvckRhdGFGb3JWaWV3VGFnOiBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld1RhZyxcbiAgICAgICAgZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdBdFBvaW50OiBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQuYmluZChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGZpbmROb2RlSGFuZGxlXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBJbnRlcm5hbHM7XG4gICAgZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBjcmVhdGVQb3J0YWw7XG4gICAgZXhwb3J0cy5kaXNwYXRjaENvbW1hbmQgPSBkaXNwYXRjaENvbW1hbmQ7XG4gICAgZXhwb3J0cy5maW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQgPSBmaW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQ7XG4gICAgZXhwb3J0cy5maW5kTm9kZUhhbmRsZSA9IGZpbmROb2RlSGFuZGxlO1xuICAgIGV4cG9ydHMuZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlID0gZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlO1xuICAgIGV4cG9ydHMuaXNDaGlsZFB1YmxpY0luc3RhbmNlID0gaXNDaGlsZFB1YmxpY0luc3RhbmNlO1xuICAgIGV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuICAgIGV4cG9ydHMuc2VuZEFjY2Vzc2liaWxpdHlFdmVudCA9IHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQ7XG4gICAgZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlID0gdW5tb3VudENvbXBvbmVudEF0Tm9kZTtcbiAgICBleHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGVBbmRSZW1vdmVDb250YWluZXIgPVxuICAgICAgdW5tb3VudENvbXBvbmVudEF0Tm9kZUFuZFJlbW92ZUNvbnRhaW5lcjtcbiAgICBleHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbiAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCA9PT1cbiAgICAgICAgXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AobmV3IEVycm9yKCkpO1xuICAgIH1cbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIubmF0aXZlLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5uYXRpdmUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHNjaGVkdWxlci5uYXRpdmUucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7ZnVuY3Rpb24gZihhLGIpe3ZhciBjPWEubGVuZ3RoO2EucHVzaChiKTthOmZvcig7MDxjOyl7dmFyIGQ9Yy0xPj4+MSxlPWFbZF07aWYoMDxnKGUsYikpYVtkXT1iLGFbY109ZSxjPWQ7ZWxzZSBicmVhayBhfX1mdW5jdGlvbiBoKGEpe3JldHVybiAwPT09YS5sZW5ndGg/bnVsbDphWzBdfWZ1bmN0aW9uIGsoYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBiPWFbMF0sYz1hLnBvcCgpO2lmKGMhPT1iKXthWzBdPWM7YTpmb3IodmFyIGQ9MCxlPWEubGVuZ3RoLHQ9ZT4+PjE7ZDx0Oyl7dmFyIG09MiooZCsxKS0xLEU9YVttXSxuPW0rMSxBPWFbbl07aWYoMD5nKEUsYykpbjxlJiYwPmcoQSxFKT8oYVtkXT1BLGFbbl09YyxkPW4pOihhW2RdPUUsYVttXT1jLGQ9bSk7ZWxzZSBpZihuPGUmJjA+ZyhBLGMpKWFbZF09QSxhW25dPWMsZD1uO2Vsc2UgYnJlYWsgYX19cmV0dXJuIGJ9XG5mdW5jdGlvbiBnKGEsYil7dmFyIGM9YS5zb3J0SW5kZXgtYi5zb3J0SW5kZXg7cmV0dXJuIDAhPT1jP2M6YS5pZC1iLmlkfXZhciBsO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBwZXJmb3JtYW5jZS5ub3cpe3ZhciBwPXBlcmZvcm1hbmNlO2w9ZnVuY3Rpb24oKXtyZXR1cm4gcC5ub3coKX19ZWxzZXt2YXIgcT1EYXRlLHI9cS5ub3coKTtsPWZ1bmN0aW9uKCl7cmV0dXJuIHEubm93KCktcn19dmFyIHU9W10sdj1bXSx3PTEseD1udWxsLHk9Myx6PSExLEI9ITEsQz0hMSxEPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCxGPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om51bGwsRz1cInVuZGVmaW5lZFwiIT09dHlwZW9mIHNldEltbWVkaWF0ZT9zZXRJbW1lZGlhdGU6bnVsbDtcblwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF2aWdhdG9yJiZ2b2lkIDAhPT1uYXZpZ2F0b3Iuc2NoZWR1bGluZyYmdm9pZCAwIT09bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmc/bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk6bnVsbDtmdW5jdGlvbiBIKGEpe2Zvcih2YXIgYj1oKHYpO251bGwhPT1iOyl7aWYobnVsbD09PWIuY2FsbGJhY2spayh2KTtlbHNlIGlmKGIuc3RhcnRUaW1lPD1hKWsodiksYi5zb3J0SW5kZXg9Yi5leHBpcmF0aW9uVGltZSxmKHUsYik7ZWxzZSBicmVhaztiPWgodil9fWZ1bmN0aW9uIEkoYSl7Qz0hMTtIKGEpO2lmKCFCKWlmKG51bGwhPT1oKHUpKUI9ITAsSj1LLEx8fChMPSEwLE0oKSk7ZWxzZXt2YXIgYj1oKHYpO251bGwhPT1iJiZOKEksYi5zdGFydFRpbWUtYSl9fVxuZnVuY3Rpb24gSyhhLGIpe0I9ITE7QyYmKEM9ITEsRihPKSxPPS0xKTt6PSEwO3ZhciBjPXk7dHJ5e2E6e0goYik7Zm9yKHg9aCh1KTtudWxsIT09eCYmKCEoeC5leHBpcmF0aW9uVGltZT5iKXx8YSYmIVAoKSk7KXt2YXIgZD14LmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt4LmNhbGxiYWNrPW51bGw7eT14LnByaW9yaXR5TGV2ZWw7dmFyIGU9ZCh4LmV4cGlyYXRpb25UaW1lPD1iKTtiPWwoKTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZSl7eC5jYWxsYmFjaz1lO0goYik7dmFyIHQ9ITA7YnJlYWsgYX1lbHNlIHg9PT1oKHUpJiZrKHUpLEgoYil9ZWxzZSBrKHUpO3g9aCh1KX1pZihudWxsIT09eCl0PSEwO2Vsc2V7dmFyIG09aCh2KTtudWxsIT09bSYmTihJLG0uc3RhcnRUaW1lLWIpO3Q9ITF9fXJldHVybiB0fWZpbmFsbHl7eD1udWxsLHk9Yyx6PSExfX1cbmZ1bmN0aW9uIFEoYSxiLGMpe3ZhciBkPWwoKTtcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jPyhjPWMuZGVsYXksYz1cIm51bWJlclwiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6dysrLGNhbGxiYWNrOmIscHJpb3JpdHlMZXZlbDphLHN0YXJ0VGltZTpjLGV4cGlyYXRpb25UaW1lOmUsc29ydEluZGV4Oi0xfTtjPmQ/KGEuc29ydEluZGV4PWMsZih2LGEpLG51bGw9PT1oKHUpJiZhPT09aCh2KSYmKEM/KEYoTyksTz0tMSk6Qz0hMCxOKEksYy1kKSkpOihhLnNvcnRJbmRleD1lLGYodSxhKSxCfHx6fHwoQj0hMCxKPUssTHx8KEw9ITAsTSgpKSkpO3JldHVybiBhfWZ1bmN0aW9uIFIoYSl7YS5jYWxsYmFjaz1udWxsfWZ1bmN0aW9uIFMoKXtyZXR1cm4geX1cbnZhciBMPSExLEo9bnVsbCxPPS0xLFQ9LTE7ZnVuY3Rpb24gUCgpe3JldHVybiA1PmwoKS1UPyExOiEwfWZ1bmN0aW9uIFUoKXt9ZnVuY3Rpb24gVigpe2lmKG51bGwhPT1KKXt2YXIgYT1sKCk7VD1hO3ZhciBiPSEwO3RyeXtiPUooITAsYSl9ZmluYWxseXtiP00oKTooTD0hMSxKPW51bGwpfX1lbHNlIEw9ITF9dmFyIE07aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEcpTT1mdW5jdGlvbigpe0coVil9O2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIFc9bmV3IE1lc3NhZ2VDaGFubmVsLFg9Vy5wb3J0MjtXLnBvcnQxLm9ubWVzc2FnZT1WO009ZnVuY3Rpb24oKXtYLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIE09ZnVuY3Rpb24oKXtEKFYsMCl9O2Z1bmN0aW9uIE4oYSxiKXtPPUQoZnVuY3Rpb24oKXthKGwoKSl9LGIpfVxudmFyIFk9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBuYXRpdmVSdW50aW1lU2NoZWR1bGVyP25hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk6MixhYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXI/bmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eTozLGJhPVwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlcj9uYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5OjQsY2E9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBuYXRpdmVSdW50aW1lU2NoZWR1bGVyP25hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk6MSxkYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXI/bmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrOlEsZWE9XCJ1bmRlZmluZWRcIiE9PVxudHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXI/bmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjazpSLGZhPVwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlcj9uYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsOlMsaGE9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBuYXRpdmVSdW50aW1lU2NoZWR1bGVyP25hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQ6UCxpYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXI/bmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ6VSxqYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXI/bmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9ub3c6bDtcbmZ1bmN0aW9uIFooKXt0aHJvdyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZC5cIik7fWV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5PVwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlcj9uYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTo1O2V4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9Y2E7ZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eT1iYTtleHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PWFhO2V4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7ZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eT1ZO2V4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZWE7ZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1aO2V4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9WjtleHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZhO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZT1aO2V4cG9ydHMudW5zdGFibGVfbmV4dD1aO2V4cG9ydHMudW5zdGFibGVfbm93PWphO2V4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb249WjtleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludD1pYTtleHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1aO2V4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1kYTtleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkPWhhO2V4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrPVo7XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiBzY2hlZHVsZXIubmF0aXZlLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG52YXIgZnJhbWVZaWVsZE1zID0gNTtcblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgcmV0dXJuIGhlYXAubGVuZ3RoID09PSAwID8gbnVsbCA6IGhlYXBbMF07XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICBpZiAoaGVhcC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG4gIHZhciBsYXN0ID0gaGVhcC5wb3AoKTtcblxuICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICBoZWFwWzBdID0gbGFzdDtcbiAgICBzaWZ0RG93bihoZWFwLCBsYXN0LCAwKTtcbiAgfVxuXG4gIHJldHVybiBmaXJzdDtcbn1cblxuZnVuY3Rpb24gc2lmdFVwKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcblxuICB3aGlsZSAoaW5kZXggPiAwKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG4gIHZhciBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+PiAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGhhbGZMZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAoY29tcGFyZShsZWZ0LCBub2RlKSA8IDApIHtcbiAgICAgIGlmIChyaWdodEluZGV4IDwgbGVuZ3RoICYmIGNvbXBhcmUocmlnaHQsIGxlZnQpIDwgMCkge1xuICAgICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSBsZWZ0O1xuICAgICAgICBoZWFwW2xlZnRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IGxlZnRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgY29tcGFyZShyaWdodCwgbm9kZSkgPCAwKSB7XG4gICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgY2hpbGQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIC8vIENvbXBhcmUgc29ydCBpbmRleCBmaXJzdCwgdGhlbiB0YXNrIGlkLlxuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuZnVuY3Rpb24gbWFya1Rhc2tFcnJvcmVkKHRhc2ssIG1zKSB7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xudmFyIGdldEN1cnJlbnRUaW1lO1xudmFyIGhhc1BlcmZvcm1hbmNlTm93ID0gLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxudHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5pZiAoaGFzUGVyZm9ybWFuY2VOb3cpIHtcbiAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcblxuICBnZXRDdXJyZW50VGltZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBsb2NhbERhdGUgPSBEYXRlO1xuICB2YXIgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG5cbiAgZ2V0Q3VycmVudFRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKSAtIGluaXRpYWxUaW1lO1xuICB9O1xufSAvLyBNYXggMzEgYml0IGludGVnZXIuIFRoZSBtYXggaW50ZWdlciBzaXplIGluIFY4IGZvciAzMi1iaXQgc3lzdGVtcy5cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG5cblxudmFyIG1heFNpZ25lZDMxQml0SW50ID0gMTA3Mzc0MTgyMzsgLy8gVGltZXMgb3V0IGltbWVkaWF0ZWx5XG5cbnZhciBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVCA9IC0xOyAvLyBFdmVudHVhbGx5IHRpbWVzIG91dFxuXG52YXIgVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUID0gMjUwO1xudmFyIE5PUk1BTF9QUklPUklUWV9USU1FT1VUID0gNTAwMDtcbnZhciBMT1dfUFJJT1JJVFlfVElNRU9VVCA9IDEwMDAwOyAvLyBOZXZlciB0aW1lcyBvdXRcblxudmFyIElETEVfUFJJT1JJVFlfVElNRU9VVCA9IG1heFNpZ25lZDMxQml0SW50OyAvLyBUYXNrcyBhcmUgc3RvcmVkIG9uIGEgbWluIGhlYXBcblxudmFyIHRhc2tRdWV1ZSA9IFtdO1xudmFyIHRpbWVyUXVldWUgPSBbXTsgLy8gSW5jcmVtZW50aW5nIGlkIGNvdW50ZXIuIFVzZWQgdG8gbWFpbnRhaW4gaW5zZXJ0aW9uIG9yZGVyLlxuXG52YXIgdGFza0lkQ291bnRlciA9IDE7IC8vIFBhdXNpbmcgdGhlIHNjaGVkdWxlciBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbnZhciBjdXJyZW50VGFzayA9IG51bGw7XG52YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTsgLy8gVGhpcyBpcyBzZXQgd2hpbGUgcGVyZm9ybWluZyB3b3JrLCB0byBwcmV2ZW50IHJlLWVudHJhbmNlLlxuXG52YXIgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xudmFyIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlOyAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cblxudmFyIGxvY2FsU2V0VGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IG51bGw7XG52YXIgbG9jYWxDbGVhclRpbWVvdXQgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gY2xlYXJUaW1lb3V0IDogbnVsbDtcbnZhciBsb2NhbFNldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnID8gc2V0SW1tZWRpYXRlIDogbnVsbDsgLy8gSUUgYW5kIE5vZGUuanMgKyBqc2RvbVxuXG50eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbm5hdmlnYXRvci5zY2hlZHVsaW5nICE9PSB1bmRlZmluZWQgJiYgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nICE9PSB1bmRlZmluZWQgPyBuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZy5iaW5kKG5hdmlnYXRvci5zY2hlZHVsaW5nKSA6IG51bGw7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgdmFyIGN1cnJlbnRUaW1lOyBpZiAoZW5hYmxlUHJvZmlsaW5nKSA7IGVsc2Uge1xuICAgICAgLy8gTm8gY2F0Y2ggaW4gcHJvZCBjb2RlIHBhdGguXG4gICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50VGFzayA9IG51bGw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGluaXRpYWxUaW1lO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG5cbiAgd2hpbGUgKGN1cnJlbnRUYXNrICE9PSBudWxsICYmICEoZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nICkpIHtcbiAgICBpZiAoY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiAoIWhhc1RpbWVSZW1haW5pbmcgfHwgc2hvdWxkWWllbGRUb0hvc3QoKSkpIHtcbiAgICAgIC8vIFRoaXMgY3VycmVudFRhc2sgaGFzbid0IGV4cGlyZWQsIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBkZWFkbGluZS5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRUYXNrLmNhbGxiYWNrO1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG4gICAgICB2YXIgZGlkVXNlckNhbGxiYWNrVGltZW91dCA9IGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lO1xuXG4gICAgICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayhkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0KTtcbiAgICAgIGN1cnJlbnRUaW1lID0gZ2V0Q3VycmVudFRpbWUoKTtcblxuICAgICAgaWYgKHR5cGVvZiBjb250aW51YXRpb25DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBJZiBhIGNvbnRpbnVhdGlvbiBpcyByZXR1cm5lZCwgaW1tZWRpYXRlbHkgeWllbGQgdG8gdGhlIG1haW4gdGhyZWFkXG4gICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2YgaG93IG11Y2ggdGltZSBpcyBsZWZ0IGluIHRoZSBjdXJyZW50IHRpbWUgc2xpY2UuXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuXG4gICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrID09PSBwZWVrKHRhc2tRdWV1ZSkpIHtcbiAgICAgICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICB9XG5cbiAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgfSAvLyBSZXR1cm4gd2hldGhlciB0aGVyZSdzIGFkZGl0aW9uYWwgd29ya1xuXG5cbiAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayQxKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRUaW1lKCk7XG4gIHZhciBzdGFydFRpbWU7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgdmFyIGRlbGF5ID0gb3B0aW9ucy5kZWxheTtcblxuICAgIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUgKyBkZWxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICB9XG5cbiAgdmFyIHRpbWVvdXQ7XG5cbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElETEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBMT1dfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgdGltZW91dCA9IE5PUk1BTF9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBzdGFydFRpbWUgKyB0aW1lb3V0O1xuICB2YXIgbmV3VGFzayA9IHtcbiAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLFxuICAgIGV4cGlyYXRpb25UaW1lOiBleHBpcmF0aW9uVGltZSxcbiAgICBzb3J0SW5kZXg6IC0xXG4gIH07XG5cbiAgaWYgKHN0YXJ0VGltZSA+IGN1cnJlbnRUaW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGRlbGF5ZWQgdGFzay5cbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IHN0YXJ0VGltZTtcbiAgICBwdXNoKHRpbWVyUXVldWUsIG5ld1Rhc2spO1xuXG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSA9PT0gbnVsbCAmJiBuZXdUYXNrID09PSBwZWVrKHRpbWVyUXVldWUpKSB7XG4gICAgICAvLyBBbGwgdGFza3MgYXJlIGRlbGF5ZWQsIGFuZCB0aGlzIGlzIHRoZSB0YXNrIHdpdGggdGhlIGVhcmxpZXN0IGRlbGF5LlxuICAgICAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFuIGV4aXN0aW5nIHRpbWVvdXQuXG4gICAgICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIH0gLy8gU2NoZWR1bGUgYSB0aW1lb3V0LlxuXG5cbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBzdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gZXhwaXJhdGlvblRpbWU7XG4gICAgcHVzaCh0YXNrUXVldWUsIG5ld1Rhc2spO1xuICAgIC8vIHdhaXQgdW50aWwgdGhlIG5leHQgdGltZSB3ZSB5aWVsZC5cblxuXG4gICAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdUYXNrO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayQxKHRhc2spIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIHF1ZXVlIGJlY2F1c2UgeW91IGNhbid0IHJlbW92ZSBhcmJpdHJhcnkgbm9kZXMgZnJvbSBhblxuICAvLyBhcnJheSBiYXNlZCBoZWFwLCBvbmx5IHRoZSBmaXJzdCBvbmUuKVxuXG5cbiAgdGFzay5jYWxsYmFjayA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsJDEoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG52YXIgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbnZhciB0YXNrVGltZW91dElEID0gLTE7IC8vIFNjaGVkdWxlciBwZXJpb2RpY2FsbHkgeWllbGRzIGluIGNhc2UgdGhlcmUgaXMgb3RoZXIgd29yayBvbiB0aGUgbWFpblxuLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuLy8gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBhbGlnbiB3aXRoIGZyYW1lIGJvdW5kYXJpZXMsIHNpbmNlIG1vc3QgdGFza3MgZG9uJ3Rcbi8vIG5lZWQgdG8gYmUgZnJhbWUgYWxpZ25lZDsgZm9yIHRob3NlIHRoYXQgZG8sIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cbnZhciBmcmFtZUludGVydmFsID0gZnJhbWVZaWVsZE1zO1xudmFyIHN0YXJ0VGltZSA9IC0xO1xuXG5mdW5jdGlvbiBzaG91bGRZaWVsZFRvSG9zdCgpIHtcbiAgdmFyIHRpbWVFbGFwc2VkID0gZ2V0Q3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZTtcblxuICBpZiAodGltZUVsYXBzZWQgPCBmcmFtZUludGVydmFsKSB7XG4gICAgLy8gVGhlIG1haW4gdGhyZWFkIGhhcyBvbmx5IGJlZW4gYmxvY2tlZCBmb3IgYSByZWFsbHkgc2hvcnQgYW1vdW50IG9mIHRpbWU7XG4gICAgLy8gc21hbGxlciB0aGFuIGEgc2luZ2xlIGZyYW1lLiBEb24ndCB5aWVsZCB5ZXQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFRoZSBtYWluIHRocmVhZCBoYXMgYmVlbiBibG9ja2VkIGZvciBhIG5vbi1uZWdsaWdpYmxlIGFtb3VudCBvZiB0aW1lLiBXZVxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RQYWludCgpIHtcblxufVxuXG52YXIgcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICBpZiAoc2NoZWR1bGVkSG9zdENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gZ2V0Q3VycmVudFRpbWUoKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgc3RhcnQgdGltZSBzbyB3ZSBjYW4gbWVhc3VyZSBob3cgbG9uZyB0aGUgbWFpbiB0aHJlYWRcbiAgICAvLyBoYXMgYmVlbiBibG9ja2VkLlxuXG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgdmFyIGhhc1RpbWVSZW1haW5pbmcgPSB0cnVlOyAvLyBJZiBhIHNjaGVkdWxlciB0YXNrIHRocm93cywgZXhpdCB0aGUgY3VycmVudCBicm93c2VyIHRhc2sgc28gdGhlXG4gICAgLy8gZXJyb3IgY2FuIGJlIG9ic2VydmVkLlxuICAgIC8vXG4gICAgLy8gSW50ZW50aW9uYWxseSBub3QgdXNpbmcgYSB0cnktY2F0Y2gsIHNpbmNlIHRoYXQgbWFrZXMgc29tZSBkZWJ1Z2dpbmdcbiAgICAvLyB0ZWNobmlxdWVzIGhhcmRlci4gSW5zdGVhZCwgaWYgYHNjaGVkdWxlZEhvc3RDYWxsYmFja2AgZXJyb3JzLCB0aGVuXG4gICAgLy8gYGhhc01vcmVXb3JrYCB3aWxsIHJlbWFpbiB0cnVlLCBhbmQgd2UnbGwgY29udGludWUgdGhlIHdvcmsgbG9vcC5cblxuICAgIHZhciBoYXNNb3JlV29yayA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtub3QtYS1mdW5jdGlvbl0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgaGFzTW9yZVdvcmsgPSBzY2hlZHVsZWRIb3N0Q2FsbGJhY2soaGFzVGltZVJlbWFpbmluZywgY3VycmVudFRpbWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoaGFzTW9yZVdvcmspIHtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlIHdvcmssIHNjaGVkdWxlIHRoZSBuZXh0IG1lc3NhZ2UgZXZlbnQgYXQgdGhlIGVuZFxuICAgICAgICAvLyBvZiB0aGUgcHJlY2VkaW5nIG9uZS5cbiAgICAgICAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIH0gLy8gWWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvIHBhaW50LCBzbyB3ZSBjYW5cbn07XG5cbnZhciBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcblxuaWYgKHR5cGVvZiBsb2NhbFNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBOb2RlLmpzIGFuZCBvbGQgSUUuXG4gIC8vIFRoZXJlJ3MgYSBmZXcgcmVhc29ucyBmb3Igd2h5IHdlIHByZWZlciBzZXRJbW1lZGlhdGUuXG4gIC8vXG4gIC8vIFVubGlrZSBNZXNzYWdlQ2hhbm5lbCwgaXQgZG9lc24ndCBwcmV2ZW50IGEgTm9kZS5qcyBwcm9jZXNzIGZyb20gZXhpdGluZy5cbiAgLy8gKEV2ZW4gdGhvdWdoIHRoaXMgaXMgYSBET00gZm9yayBvZiB0aGUgU2NoZWR1bGVyLCB5b3UgY291bGQgZ2V0IGhlcmVcbiAgLy8gd2l0aCBhIG1peCBvZiBOb2RlLmpzIDE1Kywgd2hpY2ggaGFzIGEgTWVzc2FnZUNoYW5uZWwsIGFuZCBqc2RvbS4pXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjA3NTZcbiAgLy9cbiAgLy8gQnV0IGFsc28sIGl0IHJ1bnMgZWFybGllciB3aGljaCBpcyB0aGUgc2VtYW50aWMgd2Ugd2FudC5cbiAgLy8gSWYgb3RoZXIgYnJvd3NlcnMgZXZlciBpbXBsZW1lbnQgaXQsIGl0J3MgYmV0dGVyIHRvIHVzZSBpdC5cbiAgLy8gQWx0aG91Z2ggYm90aCBvZiB0aGVzZSB3b3VsZCBiZSBpbmZlcmlvciB0byBuYXRpdmUgc2NoZWR1bGluZy5cbiAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgbG9jYWxTZXRJbW1lZGlhdGUocGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKTtcbiAgfTtcbn0gZWxzZSBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAvLyBET00gYW5kIFdvcmtlciBlbnZpcm9ubWVudHMuXG4gIC8vIFdlIHByZWZlciBNZXNzYWdlQ2hhbm5lbCBiZWNhdXNlIG9mIHRoZSA0bXMgc2V0VGltZW91dCBjbGFtcGluZy5cbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcblxuICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gV2Ugc2hvdWxkIG9ubHkgZmFsbGJhY2sgaGVyZSBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudHMuXG4gIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICRGbG93Rml4TWVbbm90LWEtZnVuY3Rpb25dIG51bGxhYmxlIHZhbHVlXG4gICAgbG9jYWxTZXRUaW1lb3V0KHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSwgMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RIb3N0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gdHJ1ZTtcbiAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RIb3N0VGltZW91dChjYWxsYmFjaywgbXMpIHtcbiAgLy8gJEZsb3dGaXhNZVtub3QtYS1mdW5jdGlvbl0gbnVsbGFibGUgdmFsdWVcbiAgdGFza1RpbWVvdXRJRCA9IGxvY2FsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgY2FsbGJhY2soZ2V0Q3VycmVudFRpbWUoKSk7XG4gIH0sIG1zKTtcbn1cblxuZnVuY3Rpb24gY2FuY2VsSG9zdFRpbWVvdXQoKSB7XG4gIC8vICRGbG93Rml4TWVbbm90LWEtZnVuY3Rpb25dIG51bGxhYmxlIHZhbHVlXG4gIGxvY2FsQ2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuICB0YXNrVGltZW91dElEID0gLTE7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvYmxvYi9tYWluL3BhY2thZ2VzL3JlYWN0LW5hdGl2ZS9SZWFjdENvbW1vbi9yZWFjdC9yZW5kZXJlci9ydW50aW1lc2NoZWR1bGVyL1J1bnRpbWVTY2hlZHVsZXJCaW5kaW5nLmNwcFxuXG52YXIgdW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSB0eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5IDogVXNlckJsb2NraW5nUHJpb3JpdHk7XG52YXIgdW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSB0eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5IDogTm9ybWFsUHJpb3JpdHk7XG52YXIgdW5zdGFibGVfSWRsZVByaW9yaXR5ID0gdHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIgIT09ICd1bmRlZmluZWQnID8gbmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHkgOiBJZGxlUHJpb3JpdHk7XG52YXIgdW5zdGFibGVfTG93UHJpb3JpdHkgPSB0eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5IDogTG93UHJpb3JpdHk7XG52YXIgdW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkgPSB0eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5IDogSW1tZWRpYXRlUHJpb3JpdHk7XG52YXIgdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IHR5cGVvZiBuYXRpdmVSdW50aW1lU2NoZWR1bGVyICE9PSAndW5kZWZpbmVkJyA/IG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA6IHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2skMTtcbnZhciB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IHR5cGVvZiBuYXRpdmVSdW50aW1lU2NoZWR1bGVyICE9PSAndW5kZWZpbmVkJyA/IG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgOiB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayQxO1xudmFyIHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gdHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIgIT09ICd1bmRlZmluZWQnID8gbmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA6IHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsJDE7XG52YXIgdW5zdGFibGVfc2hvdWxkWWllbGQgPSB0eXBlb2YgbmF0aXZlUnVudGltZVNjaGVkdWxlciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXRpdmVSdW50aW1lU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkIDogc2hvdWxkWWllbGRUb0hvc3Q7XG52YXIgdW5zdGFibGVfcmVxdWVzdFBhaW50ID0gdHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIgIT09ICd1bmRlZmluZWQnID8gbmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgOiByZXF1ZXN0UGFpbnQ7XG52YXIgdW5zdGFibGVfbm93ID0gdHlwZW9mIG5hdGl2ZVJ1bnRpbWVTY2hlZHVsZXIgIT09ICd1bmRlZmluZWQnID8gbmF0aXZlUnVudGltZVNjaGVkdWxlci51bnN0YWJsZV9ub3cgOiBnZXRDdXJyZW50VGltZTsgLy8gVGhlc2Ugd2VyZSBuZXZlciBpbXBsZW1lbnRlZCBvbiB0aGUgbmF0aXZlIHNjaGVkdWxlciBiZWNhdXNlIFJlYWN0IG5ldmVyIGNhbGxzIHRoZW0uXG4vLyBGb3IgY29uc2lzdGVuY3ksIGxldCdzIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyIGFuZCBtYWtlIHRoZW0gdGhyb3cuXG5cbnZhciB1bnN0YWJsZV9uZXh0ID0gdGhyb3dOb3RJbXBsZW1lbnRlZDtcbnZhciB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSB0aHJvd05vdEltcGxlbWVudGVkO1xudmFyIHVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IHRocm93Tm90SW1wbGVtZW50ZWQ7XG52YXIgdW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB0aHJvd05vdEltcGxlbWVudGVkO1xudmFyIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdGhyb3dOb3RJbXBsZW1lbnRlZDtcbnZhciB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IHRocm93Tm90SW1wbGVtZW50ZWQ7XG52YXIgdW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSB0aHJvd05vdEltcGxlbWVudGVkO1xudmFyIHVuc3RhYmxlX1Byb2ZpbGluZyA9IG51bGw7XG5cbmZ1bmN0aW9uIHRocm93Tm90SW1wbGVtZW50ZWQoKSB7XG4gIHRocm93IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQuJyk7XG59IC8vIEZsb3cgbWFnaWMgdG8gdmVyaWZ5IHRoZSBleHBvcnRzIG9mIHRoaXMgZmlsZSBtYXRjaCB0aGUgb3JpZ2luYWwgdmVyc2lvbi5cblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSB1bnN0YWJsZV9JZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gdW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gdW5zdGFibGVfTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gdW5zdGFibGVfTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSB1bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSB1bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZTtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX25vdyA9IHVuc3RhYmxlX25vdztcbmV4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb24gPSB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gdW5zdGFibGVfcmVxdWVzdFBhaW50O1xuZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IHVuc3RhYmxlX3Nob3VsZFlpZWxkO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSB1bnN0YWJsZV93cmFwQ2FsbGJhY2s7XG4gIH0pKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQG5vZmxvd1xuICogQG5vbGludFxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TmF0aXZlUmVuZGVyZXItcHJvZFxuICogQHByZXZlbnRNdW5nZVxuICogQGdlbmVyYXRlZCBTaWduZWRTb3VyY2U8PGM1OWE2NDc1MGM0NWEyYjFkODEyZGUzMzcwNjE1OTQ0Pj5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcbnJlcXVpcmUoXCJyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0UHJpdmF0ZS9SZWFjdE5hdGl2ZVByaXZhdGVJbml0aWFsaXplQ29yZVwiKTtcbnZhciBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UgPSByZXF1aXJlKFwicmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdFByaXZhdGUvUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlXCIpLFxuICBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgU2NoZWR1bGVyID0gcmVxdWlyZShcInNjaGVkdWxlclwiKTtcbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwobmFtZSwgZnVuYywgY29udGV4dCkge1xuICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn1cbnZhciBoYXNFcnJvciA9ICExLFxuICBjYXVnaHRFcnJvciA9IG51bGwsXG4gIGhhc1JldGhyb3dFcnJvciA9ICExLFxuICByZXRocm93RXJyb3IgPSBudWxsLFxuICByZXBvcnRlciA9IHtcbiAgICBvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGhhc0Vycm9yID0gITA7XG4gICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfTtcbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gITE7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbC5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihcbiAgbmFtZSxcbiAgZnVuYyxcbiAgY29udGV4dCxcbiAgYSxcbiAgYixcbiAgYyxcbiAgZCxcbiAgZSxcbiAgZlxuKSB7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgICAgaGFzRXJyb3IgPSAhMTtcbiAgICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICB9IGVsc2VcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIGhhc1JldGhyb3dFcnJvciB8fCAoKGhhc1JldGhyb3dFcnJvciA9ICEwKSwgKHJldGhyb3dFcnJvciA9IGVycm9yKSk7XG4gIH1cbn1cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMSA9IG51bGwsXG4gIGdldEluc3RhbmNlRnJvbU5vZGUgPSBudWxsLFxuICBnZXROb2RlRnJvbUluc3RhbmNlID0gbnVsbDtcbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGluc3QpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8IFwidW5rbm93bi1ldmVudFwiO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB2b2lkIDAsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5mdW5jdGlvbiBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXIgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgZGlzcGF0Y2hJbnN0YW5jZSA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgaWYgKGlzQXJyYXlJbXBsKGRpc3BhdGNoTGlzdGVuZXIpKVxuICAgIHRocm93IEVycm9yKFwiZXhlY3V0ZURpcmVjdERpc3BhdGNoKC4uLik6IEludmFsaWQgYGV2ZW50YC5cIik7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBkaXNwYXRjaExpc3RlbmVyXG4gICAgPyBnZXROb2RlRnJvbUluc3RhbmNlKGRpc3BhdGNoSW5zdGFuY2UpXG4gICAgOiBudWxsO1xuICBkaXNwYXRjaExpc3RlbmVyID0gZGlzcGF0Y2hMaXN0ZW5lciA/IGRpc3BhdGNoTGlzdGVuZXIoZXZlbnQpIDogbnVsbDtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG4gIHJldHVybiBkaXNwYXRjaExpc3RlbmVyO1xufVxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICByZXR1cm4gITE7XG59XG5mdW5jdGlvbiBTeW50aGV0aWNFdmVudChcbiAgZGlzcGF0Y2hDb25maWcsXG4gIHRhcmdldEluc3QsXG4gIG5hdGl2ZUV2ZW50LFxuICBuYXRpdmVFdmVudFRhcmdldFxuKSB7XG4gIHRoaXMuZGlzcGF0Y2hDb25maWcgPSBkaXNwYXRjaENvbmZpZztcbiAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgdGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXMgPSB0aGlzLl9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGRpc3BhdGNoQ29uZmlnID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIGRpc3BhdGNoQ29uZmlnKVxuICAgIGRpc3BhdGNoQ29uZmlnLmhhc093blByb3BlcnR5KHByb3BOYW1lKSAmJlxuICAgICAgKCh0YXJnZXRJbnN0ID0gZGlzcGF0Y2hDb25maWdbcHJvcE5hbWVdKVxuICAgICAgICA/ICh0aGlzW3Byb3BOYW1lXSA9IHRhcmdldEluc3QobmF0aXZlRXZlbnQpKVxuICAgICAgICA6IFwidGFyZ2V0XCIgPT09IHByb3BOYW1lXG4gICAgICAgID8gKHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQpXG4gICAgICAgIDogKHRoaXNbcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbcHJvcE5hbWVdKSk7XG4gIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKFxuICAgIG51bGwgIT0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgICA6ICExID09PSBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZVxuICApXG4gICAgPyBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICAgIDogZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICByZXR1cm4gdGhpcztcbn1cbmFzc2lnbihTeW50aGV0aWNFdmVudC5wcm90b3R5cGUsIHtcbiAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSAhMDtcbiAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgIGV2ZW50ICYmXG4gICAgICAoZXZlbnQucHJldmVudERlZmF1bHRcbiAgICAgICAgPyBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIDogXCJ1bmtub3duXCIgIT09IHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAmJiAoZXZlbnQucmV0dXJuVmFsdWUgPSAhMSksXG4gICAgICAodGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICB9LFxuICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgIGV2ZW50ICYmXG4gICAgICAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgID8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgOiBcInVua25vd25cIiAhPT0gdHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAmJiAoZXZlbnQuY2FuY2VsQnViYmxlID0gITApLFxuICAgICAgKHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICB9LFxuICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5pc1BlcnNpc3RlbnQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSxcbiAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UsXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2UsXG4gICAgICBwcm9wTmFtZTtcbiAgICBmb3IgKHByb3BOYW1lIGluIEludGVyZmFjZSkgdGhpc1twcm9wTmFtZV0gPSBudWxsO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSB0aGlzLl90YXJnZXRJbnN0ID0gdGhpcy5kaXNwYXRjaENvbmZpZyA9IG51bGw7XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID1cbiAgICAgIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB0aGlzLl9kaXNwYXRjaEluc3RhbmNlcyA9IHRoaXMuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgfVxufSk7XG5TeW50aGV0aWNFdmVudC5JbnRlcmZhY2UgPSB7XG4gIHR5cGU6IG51bGwsXG4gIHRhcmdldDogbnVsbCxcbiAgY3VycmVudFRhcmdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9LFxuICBldmVudFBoYXNlOiBudWxsLFxuICBidWJibGVzOiBudWxsLFxuICBjYW5jZWxhYmxlOiBudWxsLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogbnVsbCxcbiAgaXNUcnVzdGVkOiBudWxsXG59O1xuU3ludGhldGljRXZlbnQuZXh0ZW5kID0gZnVuY3Rpb24gKEludGVyZmFjZSkge1xuICBmdW5jdGlvbiBFKCkge31cbiAgZnVuY3Rpb24gQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgdmFyIFN1cGVyID0gdGhpcztcbiAgRS5wcm90b3R5cGUgPSBTdXBlci5wcm90b3R5cGU7XG4gIHZhciBwcm90b3R5cGUgPSBuZXcgRSgpO1xuICBhc3NpZ24ocHJvdG90eXBlLCBDbGFzcy5wcm90b3R5cGUpO1xuICBDbGFzcy5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzO1xuICBDbGFzcy5JbnRlcmZhY2UgPSBhc3NpZ24oe30sIFN1cGVyLkludGVyZmFjZSwgSW50ZXJmYWNlKTtcbiAgQ2xhc3MuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICBhZGRFdmVudFBvb2xpbmdUbyhDbGFzcyk7XG4gIHJldHVybiBDbGFzcztcbn07XG5hZGRFdmVudFBvb2xpbmdUbyhTeW50aGV0aWNFdmVudCk7XG5mdW5jdGlvbiBjcmVhdGVPckdldFBvb2xlZEV2ZW50KFxuICBkaXNwYXRjaENvbmZpZyxcbiAgdGFyZ2V0SW5zdCxcbiAgbmF0aXZlRXZlbnQsXG4gIG5hdGl2ZUluc3Rcbikge1xuICBpZiAodGhpcy5ldmVudFBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gdGhpcy5ldmVudFBvb2wucG9wKCk7XG4gICAgdGhpcy5jYWxsKGluc3RhbmNlLCBkaXNwYXRjaENvbmZpZywgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUluc3QpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuICByZXR1cm4gbmV3IHRoaXMoZGlzcGF0Y2hDb25maWcsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVJbnN0KTtcbn1cbmZ1bmN0aW9uIHJlbGVhc2VQb29sZWRFdmVudChldmVudCkge1xuICBpZiAoIShldmVudCBpbnN0YW5jZW9mIHRoaXMpKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJUcnlpbmcgdG8gcmVsZWFzZSBhbiBldmVudCBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLlwiXG4gICAgKTtcbiAgZXZlbnQuZGVzdHJ1Y3RvcigpO1xuICAxMCA+IHRoaXMuZXZlbnRQb29sLmxlbmd0aCAmJiB0aGlzLmV2ZW50UG9vbC5wdXNoKGV2ZW50KTtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50UG9vbGluZ1RvKEV2ZW50Q29uc3RydWN0b3IpIHtcbiAgRXZlbnRDb25zdHJ1Y3Rvci5nZXRQb29sZWQgPSBjcmVhdGVPckdldFBvb2xlZEV2ZW50O1xuICBFdmVudENvbnN0cnVjdG9yLmV2ZW50UG9vbCA9IFtdO1xuICBFdmVudENvbnN0cnVjdG9yLnJlbGVhc2UgPSByZWxlYXNlUG9vbGVkRXZlbnQ7XG59XG52YXIgUmVzcG9uZGVyU3ludGhldGljRXZlbnQgPSBTeW50aGV0aWNFdmVudC5leHRlbmQoe1xuICB0b3VjaEhpc3Rvcnk6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSk7XG5mdW5jdGlvbiBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gXCJ0b3BUb3VjaFN0YXJ0XCIgPT09IHRvcExldmVsVHlwZTtcbn1cbmZ1bmN0aW9uIGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJuIFwidG9wVG91Y2hNb3ZlXCIgPT09IHRvcExldmVsVHlwZTtcbn1cbnZhciBzdGFydERlcGVuZGVuY2llcyA9IFtcInRvcFRvdWNoU3RhcnRcIl0sXG4gIG1vdmVEZXBlbmRlbmNpZXMgPSBbXCJ0b3BUb3VjaE1vdmVcIl0sXG4gIGVuZERlcGVuZGVuY2llcyA9IFtcInRvcFRvdWNoQ2FuY2VsXCIsIFwidG9wVG91Y2hFbmRcIl0sXG4gIHRvdWNoQmFuayA9IFtdLFxuICB0b3VjaEhpc3RvcnkgPSB7XG4gICAgdG91Y2hCYW5rOiB0b3VjaEJhbmssXG4gICAgbnVtYmVyQWN0aXZlVG91Y2hlczogMCxcbiAgICBpbmRleE9mU2luZ2xlQWN0aXZlVG91Y2g6IC0xLFxuICAgIG1vc3RSZWNlbnRUaW1lU3RhbXA6IDBcbiAgfTtcbmZ1bmN0aW9uIHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKSB7XG4gIHJldHVybiB0b3VjaC50aW1lU3RhbXAgfHwgdG91Y2gudGltZXN0YW1wO1xufVxuZnVuY3Rpb24gZ2V0VG91Y2hJZGVudGlmaWVyKF9yZWYpIHtcbiAgX3JlZiA9IF9yZWYuaWRlbnRpZmllcjtcbiAgaWYgKG51bGwgPT0gX3JlZikgdGhyb3cgRXJyb3IoXCJUb3VjaCBvYmplY3QgaXMgbWlzc2luZyBpZGVudGlmaWVyLlwiKTtcbiAgcmV0dXJuIF9yZWY7XG59XG5mdW5jdGlvbiByZWNvcmRUb3VjaFN0YXJ0KHRvdWNoKSB7XG4gIHZhciBpZGVudGlmaWVyID0gZ2V0VG91Y2hJZGVudGlmaWVyKHRvdWNoKSxcbiAgICB0b3VjaFJlY29yZCA9IHRvdWNoQmFua1tpZGVudGlmaWVyXTtcbiAgdG91Y2hSZWNvcmRcbiAgICA/ICgodG91Y2hSZWNvcmQudG91Y2hBY3RpdmUgPSAhMCksXG4gICAgICAodG91Y2hSZWNvcmQuc3RhcnRQYWdlWCA9IHRvdWNoLnBhZ2VYKSxcbiAgICAgICh0b3VjaFJlY29yZC5zdGFydFBhZ2VZID0gdG91Y2gucGFnZVkpLFxuICAgICAgKHRvdWNoUmVjb3JkLnN0YXJ0VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpKSxcbiAgICAgICh0b3VjaFJlY29yZC5jdXJyZW50UGFnZVggPSB0b3VjaC5wYWdlWCksXG4gICAgICAodG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZID0gdG91Y2gucGFnZVkpLFxuICAgICAgKHRvdWNoUmVjb3JkLmN1cnJlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCkpLFxuICAgICAgKHRvdWNoUmVjb3JkLnByZXZpb3VzUGFnZVggPSB0b3VjaC5wYWdlWCksXG4gICAgICAodG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWSA9IHRvdWNoLnBhZ2VZKSxcbiAgICAgICh0b3VjaFJlY29yZC5wcmV2aW91c1RpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKSkpXG4gICAgOiAoKHRvdWNoUmVjb3JkID0ge1xuICAgICAgICB0b3VjaEFjdGl2ZTogITAsXG4gICAgICAgIHN0YXJ0UGFnZVg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICBzdGFydFBhZ2VZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgc3RhcnRUaW1lU3RhbXA6IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKSxcbiAgICAgICAgY3VycmVudFBhZ2VYOiB0b3VjaC5wYWdlWCxcbiAgICAgICAgY3VycmVudFBhZ2VZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgY3VycmVudFRpbWVTdGFtcDogdGltZXN0YW1wRm9yVG91Y2godG91Y2gpLFxuICAgICAgICBwcmV2aW91c1BhZ2VYOiB0b3VjaC5wYWdlWCxcbiAgICAgICAgcHJldmlvdXNQYWdlWTogdG91Y2gucGFnZVksXG4gICAgICAgIHByZXZpb3VzVGltZVN0YW1wOiB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaClcbiAgICAgIH0pLFxuICAgICAgKHRvdWNoQmFua1tpZGVudGlmaWVyXSA9IHRvdWNoUmVjb3JkKSk7XG4gIHRvdWNoSGlzdG9yeS5tb3N0UmVjZW50VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpO1xufVxuZnVuY3Rpb24gcmVjb3JkVG91Y2hNb3ZlKHRvdWNoKSB7XG4gIHZhciB0b3VjaFJlY29yZCA9IHRvdWNoQmFua1tnZXRUb3VjaElkZW50aWZpZXIodG91Y2gpXTtcbiAgdG91Y2hSZWNvcmQgJiZcbiAgICAoKHRvdWNoUmVjb3JkLnRvdWNoQWN0aXZlID0gITApLFxuICAgICh0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VYID0gdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VYKSxcbiAgICAodG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWSA9IHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWSksXG4gICAgKHRvdWNoUmVjb3JkLnByZXZpb3VzVGltZVN0YW1wID0gdG91Y2hSZWNvcmQuY3VycmVudFRpbWVTdGFtcCksXG4gICAgKHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWCA9IHRvdWNoLnBhZ2VYKSxcbiAgICAodG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZID0gdG91Y2gucGFnZVkpLFxuICAgICh0b3VjaFJlY29yZC5jdXJyZW50VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpKSxcbiAgICAodG91Y2hIaXN0b3J5Lm1vc3RSZWNlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCkpKTtcbn1cbmZ1bmN0aW9uIHJlY29yZFRvdWNoRW5kKHRvdWNoKSB7XG4gIHZhciB0b3VjaFJlY29yZCA9IHRvdWNoQmFua1tnZXRUb3VjaElkZW50aWZpZXIodG91Y2gpXTtcbiAgdG91Y2hSZWNvcmQgJiZcbiAgICAoKHRvdWNoUmVjb3JkLnRvdWNoQWN0aXZlID0gITEpLFxuICAgICh0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VYID0gdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VYKSxcbiAgICAodG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWSA9IHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWSksXG4gICAgKHRvdWNoUmVjb3JkLnByZXZpb3VzVGltZVN0YW1wID0gdG91Y2hSZWNvcmQuY3VycmVudFRpbWVTdGFtcCksXG4gICAgKHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWCA9IHRvdWNoLnBhZ2VYKSxcbiAgICAodG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZID0gdG91Y2gucGFnZVkpLFxuICAgICh0b3VjaFJlY29yZC5jdXJyZW50VGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpKSxcbiAgICAodG91Y2hIaXN0b3J5Lm1vc3RSZWNlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCkpKTtcbn1cbnZhciBpbnN0cnVtZW50YXRpb25DYWxsYmFjayxcbiAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUgPSB7XG4gICAgaW5zdHJ1bWVudDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBpbnN0cnVtZW50YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0sXG4gICAgcmVjb3JkVG91Y2hUcmFjazogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIG51bGwgIT0gaW5zdHJ1bWVudGF0aW9uQ2FsbGJhY2sgJiZcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uQ2FsbGJhY2sodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gICAgICBpZiAoaXNNb3ZlaXNoKHRvcExldmVsVHlwZSkpXG4gICAgICAgIG5hdGl2ZUV2ZW50LmNoYW5nZWRUb3VjaGVzLmZvckVhY2gocmVjb3JkVG91Y2hNb3ZlKTtcbiAgICAgIGVsc2UgaWYgKGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSlcbiAgICAgICAgbmF0aXZlRXZlbnQuY2hhbmdlZFRvdWNoZXMuZm9yRWFjaChyZWNvcmRUb3VjaFN0YXJ0KSxcbiAgICAgICAgICAodG91Y2hIaXN0b3J5Lm51bWJlckFjdGl2ZVRvdWNoZXMgPSBuYXRpdmVFdmVudC50b3VjaGVzLmxlbmd0aCksXG4gICAgICAgICAgMSA9PT0gdG91Y2hIaXN0b3J5Lm51bWJlckFjdGl2ZVRvdWNoZXMgJiZcbiAgICAgICAgICAgICh0b3VjaEhpc3RvcnkuaW5kZXhPZlNpbmdsZUFjdGl2ZVRvdWNoID1cbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQudG91Y2hlc1swXS5pZGVudGlmaWVyKTtcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICBcInRvcFRvdWNoRW5kXCIgPT09IHRvcExldmVsVHlwZSB8fFxuICAgICAgICBcInRvcFRvdWNoQ2FuY2VsXCIgPT09IHRvcExldmVsVHlwZVxuICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKG5hdGl2ZUV2ZW50LmNoYW5nZWRUb3VjaGVzLmZvckVhY2gocmVjb3JkVG91Y2hFbmQpLFxuICAgICAgICAgICh0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcyA9IG5hdGl2ZUV2ZW50LnRvdWNoZXMubGVuZ3RoKSxcbiAgICAgICAgICAxID09PSB0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcylcbiAgICAgICAgKVxuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB0b3BMZXZlbFR5cGUgPSAwO1xuICAgICAgICAgICAgdG9wTGV2ZWxUeXBlIDwgdG91Y2hCYW5rLmxlbmd0aDtcbiAgICAgICAgICAgIHRvcExldmVsVHlwZSsrXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKG5hdGl2ZUV2ZW50ID0gdG91Y2hCYW5rW3RvcExldmVsVHlwZV0pLFxuICAgICAgICAgICAgICBudWxsICE9IG5hdGl2ZUV2ZW50ICYmIG5hdGl2ZUV2ZW50LnRvdWNoQWN0aXZlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRvdWNoSGlzdG9yeS5pbmRleE9mU2luZ2xlQWN0aXZlVG91Y2ggPSB0b3BMZXZlbFR5cGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgIH0sXG4gICAgdG91Y2hIaXN0b3J5OiB0b3VjaEhpc3RvcnlcbiAgfTtcbmZ1bmN0aW9uIGFjY3VtdWxhdGUoY3VycmVudCwgbmV4dCkge1xuICBpZiAobnVsbCA9PSBuZXh0KVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJhY2N1bXVsYXRlKC4uLik6IEFjY3VtdWxhdGVkIGl0ZW1zIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLlwiXG4gICAgKTtcbiAgcmV0dXJuIG51bGwgPT0gY3VycmVudFxuICAgID8gbmV4dFxuICAgIDogaXNBcnJheUltcGwoY3VycmVudClcbiAgICA/IGN1cnJlbnQuY29uY2F0KG5leHQpXG4gICAgOiBpc0FycmF5SW1wbChuZXh0KVxuICAgID8gW2N1cnJlbnRdLmNvbmNhdChuZXh0KVxuICAgIDogW2N1cnJlbnQsIG5leHRdO1xufVxuZnVuY3Rpb24gYWNjdW11bGF0ZUludG8oY3VycmVudCwgbmV4dCkge1xuICBpZiAobnVsbCA9PSBuZXh0KVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJhY2N1bXVsYXRlSW50byguLi4pOiBBY2N1bXVsYXRlZCBpdGVtcyBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC5cIlxuICAgICk7XG4gIGlmIChudWxsID09IGN1cnJlbnQpIHJldHVybiBuZXh0O1xuICBpZiAoaXNBcnJheUltcGwoY3VycmVudCkpIHtcbiAgICBpZiAoaXNBcnJheUltcGwobmV4dCkpIHJldHVybiBjdXJyZW50LnB1c2guYXBwbHkoY3VycmVudCwgbmV4dCksIGN1cnJlbnQ7XG4gICAgY3VycmVudC5wdXNoKG5leHQpO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG4gIHJldHVybiBpc0FycmF5SW1wbChuZXh0KSA/IFtjdXJyZW50XS5jb25jYXQobmV4dCkgOiBbY3VycmVudCwgbmV4dF07XG59XG5mdW5jdGlvbiBmb3JFYWNoQWNjdW11bGF0ZWQoYXJyLCBjYiwgc2NvcGUpIHtcbiAgQXJyYXkuaXNBcnJheShhcnIpID8gYXJyLmZvckVhY2goY2IsIHNjb3BlKSA6IGFyciAmJiBjYi5jYWxsKHNjb3BlLCBhcnIpO1xufVxudmFyIHJlc3BvbmRlckluc3QgPSBudWxsLFxuICB0cmFja2VkVG91Y2hDb3VudCA9IDA7XG5mdW5jdGlvbiBjaGFuZ2VSZXNwb25kZXIobmV4dFJlc3BvbmRlckluc3QsIGJsb2NrSG9zdFJlc3BvbmRlcikge1xuICB2YXIgb2xkUmVzcG9uZGVySW5zdCA9IHJlc3BvbmRlckluc3Q7XG4gIHJlc3BvbmRlckluc3QgPSBuZXh0UmVzcG9uZGVySW5zdDtcbiAgaWYgKG51bGwgIT09IFJlc3BvbmRlckV2ZW50UGx1Z2luLkdsb2JhbFJlc3BvbmRlckhhbmRsZXIpXG4gICAgUmVzcG9uZGVyRXZlbnRQbHVnaW4uR2xvYmFsUmVzcG9uZGVySGFuZGxlci5vbkNoYW5nZShcbiAgICAgIG9sZFJlc3BvbmRlckluc3QsXG4gICAgICBuZXh0UmVzcG9uZGVySW5zdCxcbiAgICAgIGJsb2NrSG9zdFJlc3BvbmRlclxuICAgICk7XG59XG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgc3RhcnRTaG91bGRTZXRSZXNwb25kZXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogXCJvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyXCIsXG4gICAgICBjYXB0dXJlZDogXCJvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZVwiXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IHN0YXJ0RGVwZW5kZW5jaWVzXG4gIH0sXG4gIHNjcm9sbFNob3VsZFNldFJlc3BvbmRlcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBcIm9uU2Nyb2xsU2hvdWxkU2V0UmVzcG9uZGVyXCIsXG4gICAgICBjYXB0dXJlZDogXCJvblNjcm9sbFNob3VsZFNldFJlc3BvbmRlckNhcHR1cmVcIlxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXCJ0b3BTY3JvbGxcIl1cbiAgfSxcbiAgc2VsZWN0aW9uQ2hhbmdlU2hvdWxkU2V0UmVzcG9uZGVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IFwib25TZWxlY3Rpb25DaGFuZ2VTaG91bGRTZXRSZXNwb25kZXJcIixcbiAgICAgIGNhcHR1cmVkOiBcIm9uU2VsZWN0aW9uQ2hhbmdlU2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZVwiXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcInRvcFNlbGVjdGlvbkNoYW5nZVwiXVxuICB9LFxuICBtb3ZlU2hvdWxkU2V0UmVzcG9uZGVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IFwib25Nb3ZlU2hvdWxkU2V0UmVzcG9uZGVyXCIsXG4gICAgICBjYXB0dXJlZDogXCJvbk1vdmVTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlXCJcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogbW92ZURlcGVuZGVuY2llc1xuICB9LFxuICByZXNwb25kZXJTdGFydDoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJTdGFydFwiLFxuICAgIGRlcGVuZGVuY2llczogc3RhcnREZXBlbmRlbmNpZXNcbiAgfSxcbiAgcmVzcG9uZGVyTW92ZToge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJNb3ZlXCIsXG4gICAgZGVwZW5kZW5jaWVzOiBtb3ZlRGVwZW5kZW5jaWVzXG4gIH0sXG4gIHJlc3BvbmRlckVuZDoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJFbmRcIixcbiAgICBkZXBlbmRlbmNpZXM6IGVuZERlcGVuZGVuY2llc1xuICB9LFxuICByZXNwb25kZXJSZWxlYXNlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlclJlbGVhc2VcIixcbiAgICBkZXBlbmRlbmNpZXM6IGVuZERlcGVuZGVuY2llc1xuICB9LFxuICByZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3Q6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0XCIsXG4gICAgZGVwZW5kZW5jaWVzOiBbXVxuICB9LFxuICByZXNwb25kZXJHcmFudDogeyByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyR3JhbnRcIiwgZGVwZW5kZW5jaWVzOiBbXSB9LFxuICByZXNwb25kZXJSZWplY3Q6IHsgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlclJlamVjdFwiLCBkZXBlbmRlbmNpZXM6IFtdIH0sXG4gIHJlc3BvbmRlclRlcm1pbmF0ZToge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJUZXJtaW5hdGVcIixcbiAgICBkZXBlbmRlbmNpZXM6IFtdXG4gIH1cbn07XG5mdW5jdGlvbiBnZXRQYXJlbnQkMShpbnN0KSB7XG4gIGRvIGluc3QgPSBpbnN0LnJldHVybjtcbiAgd2hpbGUgKGluc3QgJiYgNSAhPT0gaW5zdC50YWcpO1xuICByZXR1cm4gaW5zdCA/IGluc3QgOiBudWxsO1xufVxuZnVuY3Rpb24gdHJhdmVyc2VUd29QaGFzZSQxKGluc3QsIGZuLCBhcmcpIHtcbiAgZm9yICh2YXIgcGF0aCA9IFtdOyBpbnN0OyApIHBhdGgucHVzaChpbnN0KSwgKGluc3QgPSBnZXRQYXJlbnQkMShpbnN0KSk7XG4gIGZvciAoaW5zdCA9IHBhdGgubGVuZ3RoOyAwIDwgaW5zdC0tOyApIGZuKHBhdGhbaW5zdF0sIFwiY2FwdHVyZWRcIiwgYXJnKTtcbiAgZm9yIChpbnN0ID0gMDsgaW5zdCA8IHBhdGgubGVuZ3RoOyBpbnN0KyspIGZuKHBhdGhbaW5zdF0sIFwiYnViYmxlZFwiLCBhcmcpO1xufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXIkMShpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIGluc3QgPSBpbnN0LnN0YXRlTm9kZTtcbiAgaWYgKG51bGwgPT09IGluc3QpIHJldHVybiBudWxsO1xuICBpbnN0ID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxKGluc3QpO1xuICBpZiAobnVsbCA9PT0gaW5zdCkgcmV0dXJuIG51bGw7XG4gIGlmICgoaW5zdCA9IGluc3RbcmVnaXN0cmF0aW9uTmFtZV0pICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3QpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGBcIiArXG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgK1xuICAgICAgICBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgK1xuICAgICAgICB0eXBlb2YgaW5zdCArXG4gICAgICAgIFwiYCB0eXBlLlwiXG4gICAgKTtcbiAgcmV0dXJuIGluc3Q7XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEoaW5zdCwgcGhhc2UsIGV2ZW50KSB7XG4gIGlmIChcbiAgICAocGhhc2UgPSBnZXRMaXN0ZW5lciQxKFxuICAgICAgaW5zdCxcbiAgICAgIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlXVxuICAgICkpXG4gIClcbiAgICAoZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgICBwaGFzZVxuICAgICkpLFxuICAgICAgKGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IGFjY3VtdWxhdGVJbnRvKFxuICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgIGluc3RcbiAgICAgICkpO1xufVxuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBpbnN0ID0gZXZlbnQuX3RhcmdldEluc3Q7XG4gICAgaWYgKGluc3QgJiYgZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIkMShpbnN0LCBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIGxpc3RlbmVyICYmXG4gICAgICAgICgoZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLFxuICAgICAgICAgIGxpc3RlbmVyXG4gICAgICAgICkpLFxuICAgICAgICAoZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzLFxuICAgICAgICAgIGluc3RcbiAgICAgICAgKSkpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgdmFyIHRhcmdldEluc3QgPSBldmVudC5fdGFyZ2V0SW5zdDtcbiAgICB0YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdCA/IGdldFBhcmVudCQxKHRhcmdldEluc3QpIDogbnVsbDtcbiAgICB0cmF2ZXJzZVR3b1BoYXNlJDEodGFyZ2V0SW5zdCwgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyQxLCBldmVudCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUkMShldmVudCkge1xuICBldmVudCAmJlxuICAgIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzICYmXG4gICAgdHJhdmVyc2VUd29QaGFzZSQxKFxuICAgICAgZXZlbnQuX3RhcmdldEluc3QsXG4gICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEsXG4gICAgICBldmVudFxuICAgICk7XG59XG52YXIgUmVzcG9uZGVyRXZlbnRQbHVnaW4gPSB7XG4gICAgX2dldFJlc3BvbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc3BvbmRlckluc3Q7XG4gICAgfSxcbiAgICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuICAgIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uIChcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRhcmdldEluc3QsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgKSB7XG4gICAgICBpZiAoaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpKSB0cmFja2VkVG91Y2hDb3VudCArPSAxO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIFwidG9wVG91Y2hFbmRcIiA9PT0gdG9wTGV2ZWxUeXBlIHx8XG4gICAgICAgIFwidG9wVG91Y2hDYW5jZWxcIiA9PT0gdG9wTGV2ZWxUeXBlXG4gICAgICApXG4gICAgICAgIGlmICgwIDw9IHRyYWNrZWRUb3VjaENvdW50KSAtLXRyYWNrZWRUb3VjaENvdW50O1xuICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUucmVjb3JkVG91Y2hUcmFjayh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIGlmIChcbiAgICAgICAgdGFyZ2V0SW5zdCAmJlxuICAgICAgICAoKFwidG9wU2Nyb2xsXCIgPT09IHRvcExldmVsVHlwZSAmJiAhbmF0aXZlRXZlbnQucmVzcG9uZGVySWdub3JlU2Nyb2xsKSB8fFxuICAgICAgICAgICgwIDwgdHJhY2tlZFRvdWNoQ291bnQgJiYgXCJ0b3BTZWxlY3Rpb25DaGFuZ2VcIiA9PT0gdG9wTGV2ZWxUeXBlKSB8fFxuICAgICAgICAgIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSB8fFxuICAgICAgICAgIGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBzaG91bGRTZXRFdmVudFR5cGUgPSBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSlcbiAgICAgICAgICA/IGV2ZW50VHlwZXMuc3RhcnRTaG91bGRTZXRSZXNwb25kZXJcbiAgICAgICAgICA6IGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpXG4gICAgICAgICAgPyBldmVudFR5cGVzLm1vdmVTaG91bGRTZXRSZXNwb25kZXJcbiAgICAgICAgICA6IFwidG9wU2VsZWN0aW9uQ2hhbmdlXCIgPT09IHRvcExldmVsVHlwZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5zZWxlY3Rpb25DaGFuZ2VTaG91bGRTZXRSZXNwb25kZXJcbiAgICAgICAgICA6IGV2ZW50VHlwZXMuc2Nyb2xsU2hvdWxkU2V0UmVzcG9uZGVyO1xuICAgICAgICBpZiAocmVzcG9uZGVySW5zdClcbiAgICAgICAgICBiOiB7XG4gICAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wID0gcmVzcG9uZGVySW5zdDtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIHZhciBkZXB0aEEgPSAwLCB0ZW1wQSA9IEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgICAgICAgICAgdGVtcEE7XG4gICAgICAgICAgICAgIHRlbXBBID0gZ2V0UGFyZW50JDEodGVtcEEpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGRlcHRoQSsrO1xuICAgICAgICAgICAgdGVtcEEgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgdGVtcEIgPSB0YXJnZXRJbnN0OyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQkMSh0ZW1wQikpXG4gICAgICAgICAgICAgIHRlbXBBKys7XG4gICAgICAgICAgICBmb3IgKDsgMCA8IGRlcHRoQSAtIHRlbXBBOyApXG4gICAgICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPSBnZXRQYXJlbnQkMShKU0NvbXBpbGVyX3RlbXApKSwgZGVwdGhBLS07XG4gICAgICAgICAgICBmb3IgKDsgMCA8IHRlbXBBIC0gZGVwdGhBOyApXG4gICAgICAgICAgICAgICh0YXJnZXRJbnN0ID0gZ2V0UGFyZW50JDEodGFyZ2V0SW5zdCkpLCB0ZW1wQS0tO1xuICAgICAgICAgICAgZm9yICg7IGRlcHRoQS0tOyApIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9PT0gdGFyZ2V0SW5zdCB8fFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9PT0gdGFyZ2V0SW5zdC5hbHRlcm5hdGVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IGdldFBhcmVudCQxKEpTQ29tcGlsZXJfdGVtcCk7XG4gICAgICAgICAgICAgIHRhcmdldEluc3QgPSBnZXRQYXJlbnQkMSh0YXJnZXRJbnN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIEpTQ29tcGlsZXJfdGVtcCA9IHRhcmdldEluc3Q7XG4gICAgICAgIHRhcmdldEluc3QgPSBKU0NvbXBpbGVyX3RlbXA7XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHRhcmdldEluc3QgPT09IHJlc3BvbmRlckluc3Q7XG4gICAgICAgIHNob3VsZFNldEV2ZW50VHlwZSA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUsXG4gICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICApO1xuICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUudG91Y2hIaXN0b3J5ID1cbiAgICAgICAgICBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS50b3VjaEhpc3Rvcnk7XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcFxuICAgICAgICAgID8gZm9yRWFjaEFjY3VtdWxhdGVkKFxuICAgICAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0XG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBmb3JFYWNoQWNjdW11bGF0ZWQoXG4gICAgICAgICAgICAgIHNob3VsZFNldEV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSQxXG4gICAgICAgICAgICApO1xuICAgICAgICBiOiB7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gc2hvdWxkU2V0RXZlbnRUeXBlLl9kaXNwYXRjaExpc3RlbmVycztcbiAgICAgICAgICB0YXJnZXRJbnN0ID0gc2hvdWxkU2V0RXZlbnRUeXBlLl9kaXNwYXRjaEluc3RhbmNlcztcbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwoSlNDb21waWxlcl90ZW1wKSlcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGRlcHRoQSA9IDA7XG4gICAgICAgICAgICAgIGRlcHRoQSA8IEpTQ29tcGlsZXJfdGVtcC5sZW5ndGggJiZcbiAgICAgICAgICAgICAgIXNob3VsZFNldEV2ZW50VHlwZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgICAgICAgICBkZXB0aEErK1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXBbZGVwdGhBXShzaG91bGRTZXRFdmVudFR5cGUsIHRhcmdldEluc3RbZGVwdGhBXSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gdGFyZ2V0SW5zdFtkZXB0aEFdO1xuICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCAmJlxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wKHNob3VsZFNldEV2ZW50VHlwZSwgdGFyZ2V0SW5zdClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHRhcmdldEluc3Q7XG4gICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNob3VsZFNldEV2ZW50VHlwZS5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLmlzUGVyc2lzdGVudCgpIHx8XG4gICAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLmNvbnN0cnVjdG9yLnJlbGVhc2Uoc2hvdWxkU2V0RXZlbnRUeXBlKTtcbiAgICAgICAgaWYgKEpTQ29tcGlsZXJfdGVtcCAmJiBKU0NvbXBpbGVyX3RlbXAgIT09IHJlc3BvbmRlckluc3QpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChzaG91bGRTZXRFdmVudFR5cGUgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgICAgIGV2ZW50VHlwZXMucmVzcG9uZGVyR3JhbnQsXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChzaG91bGRTZXRFdmVudFR5cGUudG91Y2hIaXN0b3J5ID1cbiAgICAgICAgICAgICAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5KSxcbiAgICAgICAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChcbiAgICAgICAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHRhcmdldEluc3QgPSAhMCA9PT0gZXhlY3V0ZURpcmVjdERpc3BhdGNoKHNob3VsZFNldEV2ZW50VHlwZSkpLFxuICAgICAgICAgICAgcmVzcG9uZGVySW5zdClcbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoZGVwdGhBID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZXMucmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbmRlckluc3QsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChkZXB0aEEudG91Y2hIaXN0b3J5ID0gUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5KSxcbiAgICAgICAgICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKGRlcHRoQSwgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMSksXG4gICAgICAgICAgICAgICh0ZW1wQSA9XG4gICAgICAgICAgICAgICAgIWRlcHRoQS5fZGlzcGF0Y2hMaXN0ZW5lcnMgfHwgZXhlY3V0ZURpcmVjdERpc3BhdGNoKGRlcHRoQSkpLFxuICAgICAgICAgICAgICBkZXB0aEEuaXNQZXJzaXN0ZW50KCkgfHwgZGVwdGhBLmNvbnN0cnVjdG9yLnJlbGVhc2UoZGVwdGhBKSxcbiAgICAgICAgICAgICAgdGVtcEEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZGVwdGhBID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZXMucmVzcG9uZGVyVGVybWluYXRlLFxuICAgICAgICAgICAgICAgIHJlc3BvbmRlckluc3QsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZGVwdGhBLnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgICAgICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKGRlcHRoQSwgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMSk7XG4gICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBhY2N1bXVsYXRlKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICBbc2hvdWxkU2V0RXZlbnRUeXBlLCBkZXB0aEFdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNoYW5nZVJlc3BvbmRlcihKU0NvbXBpbGVyX3RlbXAsIHRhcmdldEluc3QpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIChzaG91bGRTZXRFdmVudFR5cGUgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlcy5yZXNwb25kZXJSZWplY3QsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChzaG91bGRTZXRFdmVudFR5cGUudG91Y2hIaXN0b3J5ID1cbiAgICAgICAgICAgICAgICAgIFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeSksXG4gICAgICAgICAgICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKFxuICAgICAgICAgICAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCA9IGFjY3VtdWxhdGUoXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAsXG4gICAgICAgICAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGVcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gYWNjdW11bGF0ZShcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLFxuICAgICAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGVcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBjaGFuZ2VSZXNwb25kZXIoSlNDb21waWxlcl90ZW1wLCB0YXJnZXRJbnN0KTtcbiAgICAgICAgZWxzZSBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBudWxsO1xuICAgICAgfSBlbHNlIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCA9IG51bGw7XG4gICAgICBzaG91bGRTZXRFdmVudFR5cGUgPSByZXNwb25kZXJJbnN0ICYmIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKTtcbiAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHJlc3BvbmRlckluc3QgJiYgaXNNb3ZlaXNoKHRvcExldmVsVHlwZSk7XG4gICAgICB0YXJnZXRJbnN0ID1cbiAgICAgICAgcmVzcG9uZGVySW5zdCAmJlxuICAgICAgICAoXCJ0b3BUb3VjaEVuZFwiID09PSB0b3BMZXZlbFR5cGUgfHwgXCJ0b3BUb3VjaENhbmNlbFwiID09PSB0b3BMZXZlbFR5cGUpO1xuICAgICAgaWYgKFxuICAgICAgICAoc2hvdWxkU2V0RXZlbnRUeXBlID0gc2hvdWxkU2V0RXZlbnRUeXBlXG4gICAgICAgICAgPyBldmVudFR5cGVzLnJlc3BvbmRlclN0YXJ0XG4gICAgICAgICAgOiBKU0NvbXBpbGVyX3RlbXBcbiAgICAgICAgICA/IGV2ZW50VHlwZXMucmVzcG9uZGVyTW92ZVxuICAgICAgICAgIDogdGFyZ2V0SW5zdFxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJFbmRcbiAgICAgICAgICA6IG51bGwpXG4gICAgICApXG4gICAgICAgIChzaG91bGRTZXRFdmVudFR5cGUgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLFxuICAgICAgICAgIHJlc3BvbmRlckluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgKSksXG4gICAgICAgICAgKHNob3VsZFNldEV2ZW50VHlwZS50b3VjaEhpc3RvcnkgPVxuICAgICAgICAgICAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5KSxcbiAgICAgICAgICBmb3JFYWNoQWNjdW11bGF0ZWQoXG4gICAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUsXG4gICAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gYWNjdW11bGF0ZShcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCxcbiAgICAgICAgICAgIHNob3VsZFNldEV2ZW50VHlwZVxuICAgICAgICAgICkpO1xuICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlID0gcmVzcG9uZGVySW5zdCAmJiBcInRvcFRvdWNoQ2FuY2VsXCIgPT09IHRvcExldmVsVHlwZTtcbiAgICAgIGlmIChcbiAgICAgICAgKHRvcExldmVsVHlwZSA9XG4gICAgICAgICAgcmVzcG9uZGVySW5zdCAmJlxuICAgICAgICAgICFzaG91bGRTZXRFdmVudFR5cGUgJiZcbiAgICAgICAgICAoXCJ0b3BUb3VjaEVuZFwiID09PSB0b3BMZXZlbFR5cGUgfHwgXCJ0b3BUb3VjaENhbmNlbFwiID09PSB0b3BMZXZlbFR5cGUpKVxuICAgICAgKVxuICAgICAgICBhOiB7XG4gICAgICAgICAgaWYgKCh0b3BMZXZlbFR5cGUgPSBuYXRpdmVFdmVudC50b3VjaGVzKSAmJiAwICE9PSB0b3BMZXZlbFR5cGUubGVuZ3RoKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gMDtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wIDwgdG9wTGV2ZWxUeXBlLmxlbmd0aDtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wKytcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgodGFyZ2V0SW5zdCA9IHRvcExldmVsVHlwZVtKU0NvbXBpbGVyX3RlbXBdLnRhcmdldCksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdCAmJlxuICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgICAgICAwICE9PSB0YXJnZXRJbnN0KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZXB0aEEgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldEluc3QpO1xuICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgIGZvciAodGFyZ2V0SW5zdCA9IHJlc3BvbmRlckluc3Q7IGRlcHRoQTsgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRJbnN0ID09PSBkZXB0aEEgfHxcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRJbnN0ID09PSBkZXB0aEEuYWx0ZXJuYXRlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEluc3QgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoQSA9IGdldFBhcmVudCQxKGRlcHRoQSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0YXJnZXRJbnN0ID0gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgICAgICAgICAgICAgICB0b3BMZXZlbFR5cGUgPSAhMTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgdG9wTGV2ZWxUeXBlID0gITA7XG4gICAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKHRvcExldmVsVHlwZSA9IHNob3VsZFNldEV2ZW50VHlwZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJUZXJtaW5hdGVcbiAgICAgICAgICA6IHRvcExldmVsVHlwZVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJSZWxlYXNlXG4gICAgICAgICAgOiBudWxsKVxuICAgICAgKVxuICAgICAgICAobmF0aXZlRXZlbnQgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgIHJlc3BvbmRlckluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgKSksXG4gICAgICAgICAgKG5hdGl2ZUV2ZW50LnRvdWNoSGlzdG9yeSA9IFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeSksXG4gICAgICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKG5hdGl2ZUV2ZW50LCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxKSxcbiAgICAgICAgICAoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gYWNjdW11bGF0ZShcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICAgKSksXG4gICAgICAgICAgY2hhbmdlUmVzcG9uZGVyKG51bGwpO1xuICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMDtcbiAgICB9LFxuICAgIEdsb2JhbFJlc3BvbmRlckhhbmRsZXI6IG51bGwsXG4gICAgaW5qZWN0aW9uOiB7XG4gICAgICBpbmplY3RHbG9iYWxSZXNwb25kZXJIYW5kbGVyOiBmdW5jdGlvbiAoR2xvYmFsUmVzcG9uZGVySGFuZGxlcikge1xuICAgICAgICBSZXNwb25kZXJFdmVudFBsdWdpbi5HbG9iYWxSZXNwb25kZXJIYW5kbGVyID0gR2xvYmFsUmVzcG9uZGVySGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGV2ZW50UGx1Z2luT3JkZXIgPSBudWxsLFxuICBuYW1lc1RvUGx1Z2lucyA9IHt9O1xuZnVuY3Rpb24gcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKSB7XG4gIGlmIChldmVudFBsdWdpbk9yZGVyKVxuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgIHZhciBwbHVnaW5Nb2R1bGUgPSBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSxcbiAgICAgICAgcGx1Z2luSW5kZXggPSBldmVudFBsdWdpbk9yZGVyLmluZGV4T2YocGx1Z2luTmFtZSk7XG4gICAgICBpZiAoLTEgPj0gcGx1Z2luSW5kZXgpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW5zIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBwbHVnaW4gb3JkZXJpbmcsIGBcIiArXG4gICAgICAgICAgICAocGx1Z2luTmFtZSArIFwiYC5cIilcbiAgICAgICAgKTtcbiAgICAgIGlmICghcGx1Z2luc1twbHVnaW5JbmRleF0pIHtcbiAgICAgICAgaWYgKCFwbHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50cylcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogRXZlbnQgcGx1Z2lucyBtdXN0IGltcGxlbWVudCBhbiBgZXh0cmFjdEV2ZW50c2AgbWV0aG9kLCBidXQgYFwiICtcbiAgICAgICAgICAgICAgKHBsdWdpbk5hbWUgKyBcImAgZG9lcyBub3QuXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgcGx1Z2luc1twbHVnaW5JbmRleF0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgICAgIHBsdWdpbkluZGV4ID0gcGx1Z2luTW9kdWxlLmV2ZW50VHlwZXM7XG4gICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBwbHVnaW5JbmRleCkge1xuICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgICAgdmFyIGRpc3BhdGNoQ29uZmlnID0gcGx1Z2luSW5kZXhbZXZlbnROYW1lXTtcbiAgICAgICAgICBpZiAoZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSBldmVudCBuYW1lLCBgXCIgK1xuICAgICAgICAgICAgICAgIChldmVudE5hbWUgKyBcImAuXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tldmVudE5hbWVdID0gZGlzcGF0Y2hDb25maWc7XG4gICAgICAgICAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzID0gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7XG4gICAgICAgICAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgICAgICBmb3IgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCBpbiBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcylcbiAgICAgICAgICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShcbiAgICAgICAgICAgICAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW0pTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdF0sXG4gICAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lXG4gICAgICAgICAgICAgID8gKHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKFxuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIHBsdWdpbk1vZHVsZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwKSlcbiAgICAgICAgICAgICAgOiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITEpO1xuICAgICAgICAgIGlmICghSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogRmFpbGVkIHRvIHB1Ymxpc2ggZXZlbnQgYFwiICtcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgK1xuICAgICAgICAgICAgICAgIFwiYCBmb3IgcGx1Z2luIGBcIiArXG4gICAgICAgICAgICAgICAgcGx1Z2luTmFtZSArXG4gICAgICAgICAgICAgICAgXCJgLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUocmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlKSB7XG4gIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSlcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgcmVnaXN0cmF0aW9uIG5hbWUsIGBcIiArXG4gICAgICAgIChyZWdpc3RyYXRpb25OYW1lICsgXCJgLlwiKVxuICAgICk7XG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gcGx1Z2luTW9kdWxlO1xufVxudmFyIHBsdWdpbnMgPSBbXSxcbiAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzID0ge30sXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzID0ge307XG5mdW5jdGlvbiBnZXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIGluc3QgPSBpbnN0LnN0YXRlTm9kZTtcbiAgaWYgKG51bGwgPT09IGluc3QpIHJldHVybiBudWxsO1xuICBpbnN0ID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxKGluc3QpO1xuICBpZiAobnVsbCA9PT0gaW5zdCkgcmV0dXJuIG51bGw7XG4gIGlmICgoaW5zdCA9IGluc3RbcmVnaXN0cmF0aW9uTmFtZV0pICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3QpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGBcIiArXG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgK1xuICAgICAgICBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgK1xuICAgICAgICB0eXBlb2YgaW5zdCArXG4gICAgICAgIFwiYCB0eXBlLlwiXG4gICAgKTtcbiAgcmV0dXJuIGluc3Q7XG59XG52YXIgY3VzdG9tQnViYmxpbmdFdmVudFR5cGVzID1cbiAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnlcbiAgICAgIC5jdXN0b21CdWJibGluZ0V2ZW50VHlwZXMsXG4gIGN1c3RvbURpcmVjdEV2ZW50VHlwZXMgPVxuICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5SZWFjdE5hdGl2ZVZpZXdDb25maWdSZWdpc3RyeVxuICAgICAgLmN1c3RvbURpcmVjdEV2ZW50VHlwZXM7XG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzKGluc3QsIHBoYXNlLCBldmVudCkge1xuICBpZiAoXG4gICAgKHBoYXNlID0gZ2V0TGlzdGVuZXIoXG4gICAgICBpbnN0LFxuICAgICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcGhhc2VdXG4gICAgKSlcbiAgKVxuICAgIChldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgIHBoYXNlXG4gICAgKSksXG4gICAgICAoZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyxcbiAgICAgICAgaW5zdFxuICAgICAgKSk7XG59XG5mdW5jdGlvbiB0cmF2ZXJzZVR3b1BoYXNlKGluc3QsIGZuLCBhcmcsIHNraXBCdWJibGluZykge1xuICBmb3IgKHZhciBwYXRoID0gW107IGluc3Q7ICkge1xuICAgIHBhdGgucHVzaChpbnN0KTtcbiAgICBkbyBpbnN0ID0gaW5zdC5yZXR1cm47XG4gICAgd2hpbGUgKGluc3QgJiYgNSAhPT0gaW5zdC50YWcpO1xuICAgIGluc3QgPSBpbnN0ID8gaW5zdCA6IG51bGw7XG4gIH1cbiAgZm9yIChpbnN0ID0gcGF0aC5sZW5ndGg7IDAgPCBpbnN0LS07ICkgZm4ocGF0aFtpbnN0XSwgXCJjYXB0dXJlZFwiLCBhcmcpO1xuICBpZiAoc2tpcEJ1YmJsaW5nKSBmbihwYXRoWzBdLCBcImJ1YmJsZWRcIiwgYXJnKTtcbiAgZWxzZVxuICAgIGZvciAoaW5zdCA9IDA7IGluc3QgPCBwYXRoLmxlbmd0aDsgaW5zdCsrKSBmbihwYXRoW2luc3RdLCBcImJ1YmJsZWRcIiwgYXJnKTtcbn1cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUoZXZlbnQpIHtcbiAgZXZlbnQgJiZcbiAgICBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyAmJlxuICAgIHRyYXZlcnNlVHdvUGhhc2UoXG4gICAgICBldmVudC5fdGFyZ2V0SW5zdCxcbiAgICAgIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsXG4gICAgICBldmVudCxcbiAgICAgICExXG4gICAgKTtcbn1cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIGluc3QgPSBldmVudC5fdGFyZ2V0SW5zdDtcbiAgICBpZiAoaW5zdCAmJiBldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0LCBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIGxpc3RlbmVyICYmXG4gICAgICAgICgoZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLFxuICAgICAgICAgIGxpc3RlbmVyXG4gICAgICAgICkpLFxuICAgICAgICAoZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzLFxuICAgICAgICAgIGluc3RcbiAgICAgICAgKSkpO1xuICAgIH1cbiAgfVxufVxuaWYgKGV2ZW50UGx1Z2luT3JkZXIpXG4gIHRocm93IEVycm9yKFxuICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW4gb3JkZXJpbmcgbW9yZSB0aGFuIG9uY2UuIFlvdSBhcmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdC5cIlxuICApO1xuZXZlbnRQbHVnaW5PcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFtcbiAgXCJSZXNwb25kZXJFdmVudFBsdWdpblwiLFxuICBcIlJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW5cIlxuXSk7XG5yZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xudmFyIGluamVjdGVkTmFtZXNUb1BsdWdpbnMkanNjb21wJGlubGluZV8yMzggPSB7XG4gICAgUmVzcG9uZGVyRXZlbnRQbHVnaW46IFJlc3BvbmRlckV2ZW50UGx1Z2luLFxuICAgIFJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW46IHtcbiAgICAgIGV2ZW50VHlwZXM6IHt9LFxuICAgICAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKFxuICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIGlmIChudWxsID09IHRhcmdldEluc3QpIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgYnViYmxlRGlzcGF0Y2hDb25maWcgPSBjdXN0b21CdWJibGluZ0V2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXSxcbiAgICAgICAgICBkaXJlY3REaXNwYXRjaENvbmZpZyA9IGN1c3RvbURpcmVjdEV2ZW50VHlwZXNbdG9wTGV2ZWxUeXBlXTtcbiAgICAgICAgaWYgKCFidWJibGVEaXNwYXRjaENvbmZpZyAmJiAhZGlyZWN0RGlzcGF0Y2hDb25maWcpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAnVW5zdXBwb3J0ZWQgdG9wIGxldmVsIGV2ZW50IHR5cGUgXCInICsgdG9wTGV2ZWxUeXBlICsgJ1wiIGRpc3BhdGNoZWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgdG9wTGV2ZWxUeXBlID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgIGJ1YmJsZURpc3BhdGNoQ29uZmlnIHx8IGRpcmVjdERpc3BhdGNoQ29uZmlnLFxuICAgICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGJ1YmJsZURpc3BhdGNoQ29uZmlnKVxuICAgICAgICAgIG51bGwgIT0gdG9wTGV2ZWxUeXBlICYmXG4gICAgICAgICAgbnVsbCAhPSB0b3BMZXZlbFR5cGUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgJiZcbiAgICAgICAgICB0b3BMZXZlbFR5cGUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuc2tpcEJ1YmJsaW5nXG4gICAgICAgICAgICA/IHRvcExldmVsVHlwZSAmJlxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgJiZcbiAgICAgICAgICAgICAgdHJhdmVyc2VUd29QaGFzZShcbiAgICAgICAgICAgICAgICB0b3BMZXZlbFR5cGUuX3RhcmdldEluc3QsXG4gICAgICAgICAgICAgICAgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyxcbiAgICAgICAgICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBmb3JFYWNoQWNjdW11bGF0ZWQoXG4gICAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgZWxzZSBpZiAoZGlyZWN0RGlzcGF0Y2hDb25maWcpXG4gICAgICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKHRvcExldmVsVHlwZSwgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUpO1xuICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdG9wTGV2ZWxUeXBlO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaXNPcmRlcmluZ0RpcnR5JGpzY29tcCRpbmxpbmVfMjM5ID0gITEsXG4gIHBsdWdpbk5hbWUkanNjb21wJGlubGluZV8yNDA7XG5mb3IgKHBsdWdpbk5hbWUkanNjb21wJGlubGluZV8yNDAgaW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyRqc2NvbXAkaW5saW5lXzIzOClcbiAgaWYgKFxuICAgIGluamVjdGVkTmFtZXNUb1BsdWdpbnMkanNjb21wJGlubGluZV8yMzguaGFzT3duUHJvcGVydHkoXG4gICAgICBwbHVnaW5OYW1lJGpzY29tcCRpbmxpbmVfMjQwXG4gICAgKVxuICApIHtcbiAgICB2YXIgcGx1Z2luTW9kdWxlJGpzY29tcCRpbmxpbmVfMjQxID1cbiAgICAgIGluamVjdGVkTmFtZXNUb1BsdWdpbnMkanNjb21wJGlubGluZV8yMzhbcGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzI0MF07XG4gICAgaWYgKFxuICAgICAgIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUkanNjb21wJGlubGluZV8yNDApIHx8XG4gICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lJGpzY29tcCRpbmxpbmVfMjQwXSAhPT1cbiAgICAgICAgcGx1Z2luTW9kdWxlJGpzY29tcCRpbmxpbmVfMjQxXG4gICAgKSB7XG4gICAgICBpZiAobmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzI0MF0pXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCB0d28gZGlmZmVyZW50IGV2ZW50IHBsdWdpbnMgdXNpbmcgdGhlIHNhbWUgbmFtZSwgYFwiICtcbiAgICAgICAgICAgIChwbHVnaW5OYW1lJGpzY29tcCRpbmxpbmVfMjQwICsgXCJgLlwiKVxuICAgICAgICApO1xuICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzI0MF0gPVxuICAgICAgICBwbHVnaW5Nb2R1bGUkanNjb21wJGlubGluZV8yNDE7XG4gICAgICBpc09yZGVyaW5nRGlydHkkanNjb21wJGlubGluZV8yMzkgPSAhMDtcbiAgICB9XG4gIH1cbmlzT3JkZXJpbmdEaXJ0eSRqc2NvbXAkaW5saW5lXzIzOSAmJiByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xudmFyIGluc3RhbmNlQ2FjaGUgPSBuZXcgTWFwKCksXG4gIGluc3RhbmNlUHJvcHMgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21UYWcodGFnKSB7XG4gIHJldHVybiBpbnN0YW5jZUNhY2hlLmdldCh0YWcpIHx8IG51bGw7XG59XG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKSB7XG4gIHJldHVybiBmbihib29ra2VlcGluZyk7XG59XG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSAhMTtcbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGJvb2trZWVwaW5nKSB7XG4gIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSAhMDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZFVwZGF0ZXNJbXBsKGZuLCBib29ra2VlcGluZyk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSAhMTtcbiAgfVxufVxudmFyIGV2ZW50UXVldWUgPSBudWxsO1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwoZSkge1xuICBpZiAoZSkge1xuICAgIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGUuX2Rpc3BhdGNoTGlzdGVuZXJzLFxuICAgICAgZGlzcGF0Y2hJbnN0YW5jZXMgPSBlLl9kaXNwYXRjaEluc3RhbmNlcztcbiAgICBpZiAoaXNBcnJheUltcGwoZGlzcGF0Y2hMaXN0ZW5lcnMpKVxuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBpIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoICYmICFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7XG4gICAgICAgIGkrK1xuICAgICAgKVxuICAgICAgICBleGVjdXRlRGlzcGF0Y2goZSwgZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sIGRpc3BhdGNoSW5zdGFuY2VzW2ldKTtcbiAgICBlbHNlXG4gICAgICBkaXNwYXRjaExpc3RlbmVycyAmJlxuICAgICAgICBleGVjdXRlRGlzcGF0Y2goZSwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGRpc3BhdGNoSW5zdGFuY2VzKTtcbiAgICBlLl9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gICAgZS5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICAgIGUuaXNQZXJzaXN0ZW50KCkgfHwgZS5jb25zdHJ1Y3Rvci5yZWxlYXNlKGUpO1xuICB9XG59XG52YXIgRU1QVFlfTkFUSVZFX0VWRU5UID0ge307XG5mdW5jdGlvbiBfcmVjZWl2ZVJvb3ROb2RlSURFdmVudChyb290Tm9kZUlELCB0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50UGFyYW0pIHtcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnRQYXJhbSB8fCBFTVBUWV9OQVRJVkVfRVZFTlQsXG4gICAgaW5zdCA9IGdldEluc3RhbmNlRnJvbVRhZyhyb290Tm9kZUlEKSxcbiAgICB0YXJnZXQgPSBudWxsO1xuICBudWxsICE9IGluc3QgJiYgKHRhcmdldCA9IGluc3Quc3RhdGVOb2RlKTtcbiAgYmF0Y2hlZFVwZGF0ZXMkMShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHRhcmdldDtcbiAgICBmb3IgKFxuICAgICAgdmFyIGV2ZW50cyA9IG51bGwsIGxlZ2FjeVBsdWdpbnMgPSBwbHVnaW5zLCBpID0gMDtcbiAgICAgIGkgPCBsZWdhY3lQbHVnaW5zLmxlbmd0aDtcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgdmFyIHBvc3NpYmxlUGx1Z2luID0gbGVnYWN5UGx1Z2luc1tpXTtcbiAgICAgIHBvc3NpYmxlUGx1Z2luICYmXG4gICAgICAgIChwb3NzaWJsZVBsdWdpbiA9IHBvc3NpYmxlUGx1Z2luLmV4dHJhY3RFdmVudHMoXG4gICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgIGluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICkpICYmXG4gICAgICAgIChldmVudHMgPSBhY2N1bXVsYXRlSW50byhldmVudHMsIHBvc3NpYmxlUGx1Z2luKSk7XG4gICAgfVxuICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGV2ZW50cztcbiAgICBudWxsICE9PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiZcbiAgICAgIChldmVudFF1ZXVlID0gYWNjdW11bGF0ZUludG8oZXZlbnRRdWV1ZSwgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSk7XG4gICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB7XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQoXG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCxcbiAgICAgICAgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWxcbiAgICAgICk7XG4gICAgICBpZiAoZXZlbnRRdWV1ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJwcm9jZXNzRXZlbnRRdWV1ZSgpOiBBZGRpdGlvbmFsIGV2ZW50cyB3ZXJlIGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcgYW4gZXZlbnQgcXVldWUuIFN1cHBvcnQgZm9yIHRoaXMgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZC5cIlxuICAgICAgICApO1xuICAgICAgaWYgKGhhc1JldGhyb3dFcnJvcilcbiAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICgoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gcmV0aHJvd0Vycm9yKSxcbiAgICAgICAgICAoaGFzUmV0aHJvd0Vycm9yID0gITEpLFxuICAgICAgICAgIChyZXRocm93RXJyb3IgPSBudWxsKSxcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpXG4gICAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cblJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5SQ1RFdmVudEVtaXR0ZXIucmVnaXN0ZXIoe1xuICByZWNlaXZlRXZlbnQ6IGZ1bmN0aW9uIChyb290Tm9kZUlELCB0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50UGFyYW0pIHtcbiAgICBfcmVjZWl2ZVJvb3ROb2RlSURFdmVudChyb290Tm9kZUlELCB0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50UGFyYW0pO1xuICB9LFxuICByZWNlaXZlVG91Y2hlczogZnVuY3Rpb24gKGV2ZW50VG9wTGV2ZWxUeXBlLCB0b3VjaGVzLCBjaGFuZ2VkSW5kaWNlcykge1xuICAgIGlmIChcbiAgICAgIFwidG9wVG91Y2hFbmRcIiA9PT0gZXZlbnRUb3BMZXZlbFR5cGUgfHxcbiAgICAgIFwidG9wVG91Y2hDYW5jZWxcIiA9PT0gZXZlbnRUb3BMZXZlbFR5cGVcbiAgICApIHtcbiAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXAgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlZEluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGluZGV4JDAgPSBjaGFuZ2VkSW5kaWNlc1tpXTtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wLnB1c2godG91Y2hlc1tpbmRleCQwXSk7XG4gICAgICAgIHRvdWNoZXNbaW5kZXgkMF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gY2hhbmdlZEluZGljZXMgPSAwOyBpIDwgdG91Y2hlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgKGluZGV4JDAgPSB0b3VjaGVzW2ldKSxcbiAgICAgICAgICBudWxsICE9PSBpbmRleCQwICYmICh0b3VjaGVzW2NoYW5nZWRJbmRpY2VzKytdID0gaW5kZXgkMCk7XG4gICAgICB0b3VjaGVzLmxlbmd0aCA9IGNoYW5nZWRJbmRpY2VzO1xuICAgIH0gZWxzZVxuICAgICAgZm9yIChKU0NvbXBpbGVyX3RlbXAgPSBbXSwgaSA9IDA7IGkgPCBjaGFuZ2VkSW5kaWNlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgSlNDb21waWxlcl90ZW1wLnB1c2godG91Y2hlc1tjaGFuZ2VkSW5kaWNlc1tpXV0pO1xuICAgIGZvciAoXG4gICAgICBjaGFuZ2VkSW5kaWNlcyA9IDA7XG4gICAgICBjaGFuZ2VkSW5kaWNlcyA8IEpTQ29tcGlsZXJfdGVtcC5sZW5ndGg7XG4gICAgICBjaGFuZ2VkSW5kaWNlcysrXG4gICAgKSB7XG4gICAgICBpID0gSlNDb21waWxlcl90ZW1wW2NoYW5nZWRJbmRpY2VzXTtcbiAgICAgIGkuY2hhbmdlZFRvdWNoZXMgPSBKU0NvbXBpbGVyX3RlbXA7XG4gICAgICBpLnRvdWNoZXMgPSB0b3VjaGVzO1xuICAgICAgaW5kZXgkMCA9IG51bGw7XG4gICAgICB2YXIgdGFyZ2V0ID0gaS50YXJnZXQ7XG4gICAgICBudWxsID09PSB0YXJnZXQgfHwgdm9pZCAwID09PSB0YXJnZXQgfHwgMSA+IHRhcmdldCB8fCAoaW5kZXgkMCA9IHRhcmdldCk7XG4gICAgICBfcmVjZWl2ZVJvb3ROb2RlSURFdmVudChpbmRleCQwLCBldmVudFRvcExldmVsVHlwZSwgaSk7XG4gICAgfVxuICB9XG59KTtcbmdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMSA9IGZ1bmN0aW9uIChzdGF0ZU5vZGUpIHtcbiAgcmV0dXJuIGluc3RhbmNlUHJvcHMuZ2V0KHN0YXRlTm9kZS5fbmF0aXZlVGFnKSB8fCBudWxsO1xufTtcbmdldEluc3RhbmNlRnJvbU5vZGUgPSBnZXRJbnN0YW5jZUZyb21UYWc7XG5nZXROb2RlRnJvbUluc3RhbmNlID0gZnVuY3Rpb24gKGluc3QpIHtcbiAgaW5zdCA9IGluc3Quc3RhdGVOb2RlO1xuICB2YXIgdGFnID0gaW5zdC5fbmF0aXZlVGFnO1xuICB2b2lkIDAgPT09IHRhZyAmJlxuICAgIG51bGwgIT0gaW5zdC5jYW5vbmljYWwgJiZcbiAgICAoKHRhZyA9IGluc3QuY2Fub25pY2FsLm5hdGl2ZVRhZyksIChpbnN0ID0gaW5zdC5jYW5vbmljYWwucHVibGljSW5zdGFuY2UpKTtcbiAgaWYgKCF0YWcpIHRocm93IEVycm9yKFwiQWxsIG5hdGl2ZSBpbnN0YW5jZXMgc2hvdWxkIGhhdmUgYSB0YWcuXCIpO1xuICByZXR1cm4gaW5zdDtcbn07XG5SZXNwb25kZXJFdmVudFBsdWdpbi5pbmplY3Rpb24uaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlcih7XG4gIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZnJvbSwgdG8sIGJsb2NrTmF0aXZlUmVzcG9uZGVyKSB7XG4gICAgbnVsbCAhPT0gdG9cbiAgICAgID8gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5zZXRKU1Jlc3BvbmRlcihcbiAgICAgICAgICB0by5zdGF0ZU5vZGUuX25hdGl2ZVRhZyxcbiAgICAgICAgICBibG9ja05hdGl2ZVJlc3BvbmRlclxuICAgICAgICApXG4gICAgICA6IFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIuY2xlYXJKU1Jlc3BvbmRlcigpO1xuICB9XG59KTtcbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsXG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLFxuICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIiksXG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1xuU3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO1xuU3ltYm9sLmZvcihcInJlYWN0LmRlYnVnX3RyYWNlX21vZGVcIik7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpO1xuU3ltYm9sLmZvcihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIik7XG5TeW1ib2wuZm9yKFwicmVhY3QuY2FjaGVcIik7XG5TeW1ib2wuZm9yKFwicmVhY3QudHJhY2luZ19tYXJrZXJcIik7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKSByZXR1cm4gbnVsbDtcbiAgbWF5YmVJdGVyYWJsZSA9XG4gICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlID8gbWF5YmVJdGVyYWJsZSA6IG51bGw7XG59XG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICA/IG51bGxcbiAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICB9XG4gIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICk7XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB7XG4gIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIDI0OlxuICAgICAgcmV0dXJuIFwiQ2FjaGVcIjtcbiAgICBjYXNlIDk6XG4gICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICBjYXNlIDEwOlxuICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgY2FzZSAxODpcbiAgICAgIHJldHVybiBcIkRlaHlkcmF0ZWRGcmFnbWVudFwiO1xuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZmliZXIgPSB0eXBlLnJlbmRlciksXG4gICAgICAgIChmaWJlciA9IGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgXCJcIiksXG4gICAgICAgIHR5cGUuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAoXCJcIiAhPT0gZmliZXIgPyBcIkZvcndhcmRSZWYoXCIgKyBmaWJlciArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpXG4gICAgICApO1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBcIlJvb3RcIjtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gXCJUZXh0XCI7XG4gICAgY2FzZSAxNjpcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPyBcIlN0cmljdE1vZGVcIiA6IFwiTW9kZVwiO1xuICAgIGNhc2UgMjI6XG4gICAgICByZXR1cm4gXCJPZmZzY3JlZW5cIjtcbiAgICBjYXNlIDEyOlxuICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICBjYXNlIDIxOlxuICAgICAgcmV0dXJuIFwiU2NvcGVcIjtcbiAgICBjYXNlIDEzOlxuICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICBjYXNlIDE5OlxuICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgY2FzZSAyNTpcbiAgICAgIHJldHVybiBcIlRyYWNpbmdNYXJrZXJcIjtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTc6XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMTQ6XG4gICAgY2FzZSAxNTpcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXIsXG4gICAgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcbiAgaWYgKGZpYmVyLmFsdGVybmF0ZSkgZm9yICg7IG5vZGUucmV0dXJuOyApIG5vZGUgPSBub2RlLnJldHVybjtcbiAgZWxzZSB7XG4gICAgZmliZXIgPSBub2RlO1xuICAgIGRvXG4gICAgICAobm9kZSA9IGZpYmVyKSxcbiAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJiAobmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybiksXG4gICAgICAgIChmaWJlciA9IG5vZGUucmV0dXJuKTtcbiAgICB3aGlsZSAoZmliZXIpO1xuICB9XG4gIHJldHVybiAzID09PSBub2RlLnRhZyA/IG5lYXJlc3RNb3VudGVkIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgIT09IGZpYmVyKVxuICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgYWx0ZXJuYXRlID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG4gICAgaWYgKG51bGwgPT09IGFsdGVybmF0ZSlcbiAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICByZXR1cm4gYWx0ZXJuYXRlICE9PSBmaWJlciA/IG51bGwgOiBmaWJlcjtcbiAgfVxuICBmb3IgKHZhciBhID0gZmliZXIsIGIgPSBhbHRlcm5hdGU7IDsgKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcbiAgICBpZiAobnVsbCA9PT0gcGFyZW50QSkgYnJlYWs7XG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcbiAgICBpZiAobnVsbCA9PT0gcGFyZW50Qikge1xuICAgICAgYiA9IHBhcmVudEEucmV0dXJuO1xuICAgICAgaWYgKG51bGwgIT09IGIpIHtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICBmb3IgKHBhcmVudEIgPSBwYXJlbnRBLmNoaWxkOyBwYXJlbnRCOyApIHtcbiAgICAgICAgaWYgKHBhcmVudEIgPT09IGEpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGZpYmVyO1xuICAgICAgICBpZiAocGFyZW50QiA9PT0gYikgcmV0dXJuIGFzc2VydElzTW91bnRlZChwYXJlbnRBKSwgYWx0ZXJuYXRlO1xuICAgICAgICBwYXJlbnRCID0gcGFyZW50Qi5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgIH1cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSAoYSA9IHBhcmVudEEpLCAoYiA9IHBhcmVudEIpO1xuICAgIGVsc2Uge1xuICAgICAgZm9yICh2YXIgZGlkRmluZENoaWxkID0gITEsIGNoaWxkJDEgPSBwYXJlbnRBLmNoaWxkOyBjaGlsZCQxOyApIHtcbiAgICAgICAgaWYgKGNoaWxkJDEgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQkMSA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkJDEgPSBjaGlsZCQxLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICBmb3IgKGNoaWxkJDEgPSBwYXJlbnRCLmNoaWxkOyBjaGlsZCQxOyApIHtcbiAgICAgICAgICBpZiAoY2hpbGQkMSA9PT0gYSkge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGlsZCQxID09PSBiKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hpbGQkMSA9IGNoaWxkJDEuc2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGEuYWx0ZXJuYXRlICE9PSBiKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICB9XG4gIGlmICgzICE9PSBhLnRhZylcbiAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gIHJldHVybiBhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhID8gZmliZXIgOiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgcGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcbiAgcmV0dXJuIG51bGwgIT09IHBhcmVudCA/IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChwYXJlbnQpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChub2RlKSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgaWYgKDUgPT09IHRhZyB8fCAyNiA9PT0gdGFnIHx8IDI3ID09PSB0YWcgfHwgNiA9PT0gdGFnKSByZXR1cm4gbm9kZTtcbiAgZm9yIChub2RlID0gbm9kZS5jaGlsZDsgbnVsbCAhPT0gbm9kZTsgKSB7XG4gICAgdGFnID0gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKG5vZGUpO1xuICAgIGlmIChudWxsICE9PSB0YWcpIHJldHVybiB0YWc7XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbnZhciBlbXB0eU9iamVjdCA9IHt9LFxuICByZW1vdmVkS2V5cyA9IG51bGwsXG4gIHJlbW92ZWRLZXlDb3VudCA9IDAsXG4gIGRlZXBEaWZmZXJPcHRpb25zID0geyB1bnNhZmVseUlnbm9yZUZ1bmN0aW9uczogITAgfTtcbmZ1bmN0aW9uIGRlZmF1bHREaWZmZXIocHJldlByb3AsIG5leHRQcm9wKSB7XG4gIHJldHVybiBcIm9iamVjdFwiICE9PSB0eXBlb2YgbmV4dFByb3AgfHwgbnVsbCA9PT0gbmV4dFByb3BcbiAgICA/ICEwXG4gICAgOiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZGVlcERpZmZlcihcbiAgICAgICAgcHJldlByb3AsXG4gICAgICAgIG5leHRQcm9wLFxuICAgICAgICBkZWVwRGlmZmVyT3B0aW9uc1xuICAgICAgKTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheShcbiAgdXBkYXRlUGF5bG9hZCxcbiAgbm9kZSxcbiAgdmFsaWRBdHRyaWJ1dGVzXG4pIHtcbiAgaWYgKGlzQXJyYXlJbXBsKG5vZGUpKVxuICAgIGZvciAodmFyIGkgPSBub2RlLmxlbmd0aDsgaS0tICYmIDAgPCByZW1vdmVkS2V5Q291bnQ7IClcbiAgICAgIHJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheShcbiAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgbm9kZVtpXSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICBlbHNlIGlmIChub2RlICYmIDAgPCByZW1vdmVkS2V5Q291bnQpXG4gICAgZm9yIChpIGluIHJlbW92ZWRLZXlzKVxuICAgICAgaWYgKHJlbW92ZWRLZXlzW2ldKSB7XG4gICAgICAgIHZhciBuZXh0UHJvcCA9IG5vZGVbaV07XG4gICAgICAgIGlmICh2b2lkIDAgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgdmFyIGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1tpXTtcbiAgICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnKSB7XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXh0UHJvcCAmJiAobmV4dFByb3AgPSAhMCk7XG4gICAgICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgbmV4dFByb3AgJiYgKG5leHRQcm9wID0gbnVsbCk7XG4gICAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZylcbiAgICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFtpXSA9IG5leHRQcm9wO1xuICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmIHx8XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIChuZXh0UHJvcCA9XG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3NcbiAgICAgICAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MobmV4dFByb3ApXG4gICAgICAgICAgICAgICAgICA6IG5leHRQcm9wKSxcbiAgICAgICAgICAgICAgICAodXBkYXRlUGF5bG9hZFtpXSA9IG5leHRQcm9wKTtcbiAgICAgICAgICAgIHJlbW92ZWRLZXlzW2ldID0gITE7XG4gICAgICAgICAgICByZW1vdmVkS2V5Q291bnQtLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbn1cbmZ1bmN0aW9uIGRpZmZOZXN0ZWRQcm9wZXJ0eShcbiAgdXBkYXRlUGF5bG9hZCxcbiAgcHJldlByb3AsXG4gIG5leHRQcm9wLFxuICB2YWxpZEF0dHJpYnV0ZXNcbikge1xuICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgcHJldlByb3AgPT09IG5leHRQcm9wKSByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgaWYgKCFwcmV2UHJvcCB8fCAhbmV4dFByb3ApXG4gICAgcmV0dXJuIG5leHRQcm9wXG4gICAgICA/IGFkZE5lc3RlZFByb3BlcnR5KHVwZGF0ZVBheWxvYWQsIG5leHRQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpXG4gICAgICA6IHByZXZQcm9wXG4gICAgICA/IGNsZWFyTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgcHJldlByb3AsIHZhbGlkQXR0cmlidXRlcylcbiAgICAgIDogdXBkYXRlUGF5bG9hZDtcbiAgaWYgKCFpc0FycmF5SW1wbChwcmV2UHJvcCkgJiYgIWlzQXJyYXlJbXBsKG5leHRQcm9wKSlcbiAgICByZXR1cm4gZGlmZlByb3BlcnRpZXModXBkYXRlUGF5bG9hZCwgcHJldlByb3AsIG5leHRQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpO1xuICBpZiAoaXNBcnJheUltcGwocHJldlByb3ApICYmIGlzQXJyYXlJbXBsKG5leHRQcm9wKSkge1xuICAgIHZhciBtaW5MZW5ndGggPVxuICAgICAgICBwcmV2UHJvcC5sZW5ndGggPCBuZXh0UHJvcC5sZW5ndGggPyBwcmV2UHJvcC5sZW5ndGggOiBuZXh0UHJvcC5sZW5ndGgsXG4gICAgICBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW5ndGg7IGkrKylcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBkaWZmTmVzdGVkUHJvcGVydHkoXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgIHByZXZQcm9wW2ldLFxuICAgICAgICBuZXh0UHJvcFtpXSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIGZvciAoOyBpIDwgcHJldlByb3AubGVuZ3RoOyBpKyspXG4gICAgICB1cGRhdGVQYXlsb2FkID0gY2xlYXJOZXN0ZWRQcm9wZXJ0eShcbiAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgcHJldlByb3BbaV0sXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKTtcbiAgICBmb3IgKDsgaSA8IG5leHRQcm9wLmxlbmd0aDsgaSsrKVxuICAgICAgdXBkYXRlUGF5bG9hZCA9IGFkZE5lc3RlZFByb3BlcnR5KFxuICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICBuZXh0UHJvcFtpXSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICB9XG4gIHJldHVybiBpc0FycmF5SW1wbChwcmV2UHJvcClcbiAgICA/IGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZmxhdHRlblN0eWxlKHByZXZQcm9wKSxcbiAgICAgICAgbmV4dFByb3AsXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKVxuICAgIDogZGlmZlByb3BlcnRpZXMoXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgIHByZXZQcm9wLFxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZmxhdHRlblN0eWxlKG5leHRQcm9wKSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xufVxuZnVuY3Rpb24gYWRkTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgbmV4dFByb3AsIHZhbGlkQXR0cmlidXRlcykge1xuICBpZiAoIW5leHRQcm9wKSByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgaWYgKCFpc0FycmF5SW1wbChuZXh0UHJvcCkpXG4gICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIGVtcHR5T2JqZWN0LFxuICAgICAgbmV4dFByb3AsXG4gICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICApO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRQcm9wLmxlbmd0aDsgaSsrKVxuICAgIHVwZGF0ZVBheWxvYWQgPSBhZGROZXN0ZWRQcm9wZXJ0eShcbiAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICBuZXh0UHJvcFtpXSxcbiAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICk7XG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gY2xlYXJOZXN0ZWRQcm9wZXJ0eSh1cGRhdGVQYXlsb2FkLCBwcmV2UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gIGlmICghcHJldlByb3ApIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICBpZiAoIWlzQXJyYXlJbXBsKHByZXZQcm9wKSlcbiAgICByZXR1cm4gZGlmZlByb3BlcnRpZXMoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldlByb3AsXG4gICAgICBlbXB0eU9iamVjdCxcbiAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldlByb3AubGVuZ3RoOyBpKyspXG4gICAgdXBkYXRlUGF5bG9hZCA9IGNsZWFyTmVzdGVkUHJvcGVydHkoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldlByb3BbaV0sXG4gICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICApO1xuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKHVwZGF0ZVBheWxvYWQsIHByZXZQcm9wcywgbmV4dFByb3BzLCB2YWxpZEF0dHJpYnV0ZXMpIHtcbiAgdmFyIGF0dHJpYnV0ZUNvbmZpZywgcHJvcEtleTtcbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcylcbiAgICBpZiAoKGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1twcm9wS2V5XSkpIHtcbiAgICAgIHZhciBwcmV2UHJvcCA9IHByZXZQcm9wc1twcm9wS2V5XTtcbiAgICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5leHRQcm9wICYmXG4gICAgICAgICgobmV4dFByb3AgPSAhMCksIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZQcm9wICYmIChwcmV2UHJvcCA9ICEwKSk7XG4gICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgbmV4dFByb3AgJiZcbiAgICAgICAgKChuZXh0UHJvcCA9IG51bGwpLFxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgcHJldlByb3AgJiYgKHByZXZQcm9wID0gbnVsbCkpO1xuICAgICAgcmVtb3ZlZEtleXMgJiYgKHJlbW92ZWRLZXlzW3Byb3BLZXldID0gITEpO1xuICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgJiYgdm9pZCAwICE9PSB1cGRhdGVQYXlsb2FkW3Byb3BLZXldKVxuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZylcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gbmV4dFByb3A7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmIHx8XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2Vzc1xuICAgICAgICAgIClcbiAgICAgICAgICAgIChhdHRyaWJ1dGVDb25maWcgPVxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2Vzc1xuICAgICAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MobmV4dFByb3ApXG4gICAgICAgICAgICAgICAgOiBuZXh0UHJvcCksXG4gICAgICAgICAgICAgICh1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gYXR0cmlidXRlQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAocHJldlByb3AgIT09IG5leHRQcm9wKVxuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZylcbiAgICAgICAgICBkZWZhdWx0RGlmZmVyKHByZXZQcm9wLCBuZXh0UHJvcCkgJiZcbiAgICAgICAgICAgICgodXBkYXRlUGF5bG9hZCB8fCAodXBkYXRlUGF5bG9hZCA9IHt9KSlbcHJvcEtleV0gPSBuZXh0UHJvcCk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdm9pZCAwID09PSBwcmV2UHJvcCB8fFxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmXG4gICAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLmRpZmYocHJldlByb3AsIG5leHRQcm9wKVxuICAgICAgICAgICAgICA6IGRlZmF1bHREaWZmZXIocHJldlByb3AsIG5leHRQcm9wKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICAoYXR0cmlidXRlQ29uZmlnID1cbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3NcbiAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzKG5leHRQcm9wKVxuICAgICAgICAgICAgICAgIDogbmV4dFByb3ApLFxuICAgICAgICAgICAgICAoKHVwZGF0ZVBheWxvYWQgfHwgKHVwZGF0ZVBheWxvYWQgPSB7fSkpW3Byb3BLZXldID1cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDb25maWcpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAocmVtb3ZlZEtleXMgPSBudWxsKSxcbiAgICAgICAgICAgIChyZW1vdmVkS2V5Q291bnQgPSAwKSxcbiAgICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gZGlmZk5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgICBwcmV2UHJvcCxcbiAgICAgICAgICAgICAgbmV4dFByb3AsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZUNvbmZpZ1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAwIDwgcmVtb3ZlZEtleUNvdW50ICYmXG4gICAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgJiZcbiAgICAgICAgICAgICAgKHJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheShcbiAgICAgICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUNvbmZpZ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAocmVtb3ZlZEtleXMgPSBudWxsKSk7XG4gICAgfVxuICBmb3IgKHZhciBwcm9wS2V5JDMgaW4gcHJldlByb3BzKVxuICAgIHZvaWQgMCA9PT0gbmV4dFByb3BzW3Byb3BLZXkkM10gJiZcbiAgICAgICghKGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1twcm9wS2V5JDNdKSB8fFxuICAgICAgICAodXBkYXRlUGF5bG9hZCAmJiB2b2lkIDAgIT09IHVwZGF0ZVBheWxvYWRbcHJvcEtleSQzXSkgfHxcbiAgICAgICAgKChwcmV2UHJvcCA9IHByZXZQcm9wc1twcm9wS2V5JDNdKSxcbiAgICAgICAgdm9pZCAwICE9PSBwcmV2UHJvcCAmJlxuICAgICAgICAgIChcIm9iamVjdFwiICE9PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmRpZmYgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2Vzc1xuICAgICAgICAgICAgPyAoKCh1cGRhdGVQYXlsb2FkIHx8ICh1cGRhdGVQYXlsb2FkID0ge30pKVtwcm9wS2V5JDNdID0gbnVsbCksXG4gICAgICAgICAgICAgIHJlbW92ZWRLZXlzIHx8IChyZW1vdmVkS2V5cyA9IHt9KSxcbiAgICAgICAgICAgICAgcmVtb3ZlZEtleXNbcHJvcEtleSQzXSB8fFxuICAgICAgICAgICAgICAgICgocmVtb3ZlZEtleXNbcHJvcEtleSQzXSA9ICEwKSwgcmVtb3ZlZEtleUNvdW50KyspKVxuICAgICAgICAgICAgOiAodXBkYXRlUGF5bG9hZCA9IGNsZWFyTmVzdGVkUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICAgICAgICBwcmV2UHJvcCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDb25maWdcbiAgICAgICAgICAgICAgKSkpKSk7XG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gbW91bnRTYWZlQ2FsbGJhY2tfTk9UX1JFQUxMWV9TQUZFKGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFxuICAgICAgY2FsbGJhY2sgJiZcbiAgICAgIChcImJvb2xlYW5cIiAhPT0gdHlwZW9mIGNvbnRleHQuX19pc01vdW50ZWQgfHwgY29udGV4dC5fX2lzTW91bnRlZClcbiAgICApXG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cbnZhciBSZWFjdE5hdGl2ZUZpYmVySG9zdENvbXBvbmVudCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVhY3ROYXRpdmVGaWJlckhvc3RDb21wb25lbnQodGFnLCB2aWV3Q29uZmlnKSB7XG4gICAgICB0aGlzLnZpZXdDb25maWcgPSB0aGlzLl9pbnRlcm5hbEZpYmVySW5zdGFuY2VIYW5kbGVERVYgPSB2b2lkIDA7XG4gICAgICB0aGlzLl9uYXRpdmVUYWcgPSB0YWc7XG4gICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgdGhpcy52aWV3Q29uZmlnID0gdmlld0NvbmZpZztcbiAgICB9XG4gICAgdmFyIF9wcm90byA9IFJlYWN0TmF0aXZlRmliZXJIb3N0Q29tcG9uZW50LnByb3RvdHlwZTtcbiAgICBfcHJvdG8uYmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5UZXh0SW5wdXRTdGF0ZS5ibHVyVGV4dElucHV0KHRoaXMpO1xuICAgIH07XG4gICAgX3Byb3RvLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlRleHRJbnB1dFN0YXRlLmZvY3VzVGV4dElucHV0KHRoaXMpO1xuICAgIH07XG4gICAgX3Byb3RvLm1lYXN1cmUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIubWVhc3VyZShcbiAgICAgICAgdGhpcy5fbmF0aXZlVGFnLFxuICAgICAgICBtb3VudFNhZmVDYWxsYmFja19OT1RfUkVBTExZX1NBRkUodGhpcywgY2FsbGJhY2spXG4gICAgICApO1xuICAgIH07XG4gICAgX3Byb3RvLm1lYXN1cmVJbldpbmRvdyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tZWFzdXJlSW5XaW5kb3coXG4gICAgICAgIHRoaXMuX25hdGl2ZVRhZyxcbiAgICAgICAgbW91bnRTYWZlQ2FsbGJhY2tfTk9UX1JFQUxMWV9TQUZFKHRoaXMsIGNhbGxiYWNrKVxuICAgICAgKTtcbiAgICB9O1xuICAgIF9wcm90by5tZWFzdXJlTGF5b3V0ID0gZnVuY3Rpb24gKHJlbGF0aXZlVG9OYXRpdmVOb2RlLCBvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgICAgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiByZWxhdGl2ZVRvTmF0aXZlTm9kZSlcbiAgICAgICAgdmFyIHJlbGF0aXZlTm9kZSA9IHJlbGF0aXZlVG9OYXRpdmVOb2RlO1xuICAgICAgZWxzZVxuICAgICAgICByZWxhdGl2ZVRvTmF0aXZlTm9kZS5fbmF0aXZlVGFnICYmXG4gICAgICAgICAgKHJlbGF0aXZlTm9kZSA9IHJlbGF0aXZlVG9OYXRpdmVOb2RlLl9uYXRpdmVUYWcpO1xuICAgICAgbnVsbCAhPSByZWxhdGl2ZU5vZGUgJiZcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tZWFzdXJlTGF5b3V0KFxuICAgICAgICAgIHRoaXMuX25hdGl2ZVRhZyxcbiAgICAgICAgICByZWxhdGl2ZU5vZGUsXG4gICAgICAgICAgbW91bnRTYWZlQ2FsbGJhY2tfTk9UX1JFQUxMWV9TQUZFKHRoaXMsIG9uRmFpbCksXG4gICAgICAgICAgbW91bnRTYWZlQ2FsbGJhY2tfTk9UX1JFQUxMWV9TQUZFKHRoaXMsIG9uU3VjY2VzcylcbiAgICAgICAgKTtcbiAgICB9O1xuICAgIF9wcm90by5zZXROYXRpdmVQcm9wcyA9IGZ1bmN0aW9uIChuYXRpdmVQcm9wcykge1xuICAgICAgbmF0aXZlUHJvcHMgPSBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZW1wdHlPYmplY3QsXG4gICAgICAgIG5hdGl2ZVByb3BzLFxuICAgICAgICB0aGlzLnZpZXdDb25maWcudmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgICAgbnVsbCAhPSBuYXRpdmVQcm9wcyAmJlxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLnVwZGF0ZVZpZXcoXG4gICAgICAgICAgdGhpcy5fbmF0aXZlVGFnLFxuICAgICAgICAgIHRoaXMudmlld0NvbmZpZy51aVZpZXdDbGFzc05hbWUsXG4gICAgICAgICAgbmF0aXZlUHJvcHNcbiAgICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiBSZWFjdE5hdGl2ZUZpYmVySG9zdENvbXBvbmVudDtcbiAgfSkoKSxcbiAgc2NoZWR1bGVDYWxsYmFjayQyID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssXG4gIGNhbmNlbENhbGxiYWNrJDEgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICByZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICBub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICBJbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gIE5vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICBJZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5LFxuICByZW5kZXJlcklEID0gbnVsbCxcbiAgaW5qZWN0ZWRIb29rID0gbnVsbDtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290KSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KVxuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QoXG4gICAgICAgIHJlbmRlcmVySUQsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgMTI4ID09PSAocm9vdC5jdXJyZW50LmZsYWdzICYgMTI4KVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHt9XG59XG52YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2ssXG4gIGxvZyA9IE1hdGgubG9nLFxuICBMTjIgPSBNYXRoLkxOMjtcbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICB4ID4+Pj0gMDtcbiAgcmV0dXJuIDAgPT09IHggPyAzMiA6ICgzMSAtICgobG9nKHgpIC8gTE4yKSB8IDApKSB8IDA7XG59XG52YXIgbmV4dFRyYW5zaXRpb25MYW5lID0gMTI4LFxuICBuZXh0UmV0cnlMYW5lID0gNDE5NDMwNDtcbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nU3luY0xhbmVzID0gbGFuZXMgJiA0MjtcbiAgaWYgKDAgIT09IHBlbmRpbmdTeW5jTGFuZXMpIHJldHVybiBwZW5kaW5nU3luY0xhbmVzO1xuICBzd2l0Y2ggKGxhbmVzICYgLWxhbmVzKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIDQ7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIDg7XG4gICAgY2FzZSAxNjpcbiAgICAgIHJldHVybiAxNjtcbiAgICBjYXNlIDMyOlxuICAgICAgcmV0dXJuIDMyO1xuICAgIGNhc2UgNjQ6XG4gICAgICByZXR1cm4gNjQ7XG4gICAgY2FzZSAxMjg6XG4gICAgY2FzZSAyNTY6XG4gICAgY2FzZSA1MTI6XG4gICAgY2FzZSAxMDI0OlxuICAgIGNhc2UgMjA0ODpcbiAgICBjYXNlIDQwOTY6XG4gICAgY2FzZSA4MTkyOlxuICAgIGNhc2UgMTYzODQ6XG4gICAgY2FzZSAzMjc2ODpcbiAgICBjYXNlIDY1NTM2OlxuICAgIGNhc2UgMTMxMDcyOlxuICAgIGNhc2UgMjYyMTQ0OlxuICAgIGNhc2UgNTI0Mjg4OlxuICAgIGNhc2UgMTA0ODU3NjpcbiAgICBjYXNlIDIwOTcxNTI6XG4gICAgICByZXR1cm4gbGFuZXMgJiA0MTk0MTc2O1xuICAgIGNhc2UgNDE5NDMwNDpcbiAgICBjYXNlIDgzODg2MDg6XG4gICAgY2FzZSAxNjc3NzIxNjpcbiAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgcmV0dXJuIGxhbmVzICYgNjI5MTQ1NjA7XG4gICAgY2FzZSA2NzEwODg2NDpcbiAgICAgIHJldHVybiA2NzEwODg2NDtcbiAgICBjYXNlIDEzNDIxNzcyODpcbiAgICAgIHJldHVybiAxMzQyMTc3Mjg7XG4gICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICByZXR1cm4gMjY4NDM1NDU2O1xuICAgIGNhc2UgNTM2ODcwOTEyOlxuICAgICAgcmV0dXJuIDUzNjg3MDkxMjtcbiAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICByZXR1cm4gMDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGxhbmVzO1xuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICBpZiAoMCA9PT0gcGVuZGluZ0xhbmVzKSByZXR1cm4gMDtcbiAgdmFyIG5leHRMYW5lcyA9IDAsXG4gICAgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICByb290ID0gcm9vdC5waW5nZWRMYW5lcztcbiAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiAxMzQyMTc3Mjc7XG4gIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICA/ICgocGVuZGluZ0xhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAwICE9PSBwZW5kaW5nTGFuZXNcbiAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGVuZGluZ0xhbmVzKSlcbiAgICAgICAgOiAoKHJvb3QgJj0gbm9uSWRsZVBlbmRpbmdMYW5lcyksXG4gICAgICAgICAgMCAhPT0gcm9vdCAmJiAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocm9vdCkpKSlcbiAgICA6ICgocGVuZGluZ0xhbmVzICY9IH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAwICE9PSBwZW5kaW5nTGFuZXNcbiAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGVuZGluZ0xhbmVzKSlcbiAgICAgICAgOiAwICE9PSByb290ICYmIChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhyb290KSkpO1xuICByZXR1cm4gMCA9PT0gbmV4dExhbmVzXG4gICAgPyAwXG4gICAgOiAwICE9PSB3aXBMYW5lcyAmJlxuICAgICAgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJlxuICAgICAgMCA9PT0gKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpICYmXG4gICAgICAoKHN1c3BlbmRlZExhbmVzID0gbmV4dExhbmVzICYgLW5leHRMYW5lcyksXG4gICAgICAocm9vdCA9IHdpcExhbmVzICYgLXdpcExhbmVzKSxcbiAgICAgIHN1c3BlbmRlZExhbmVzID49IHJvb3QgfHxcbiAgICAgICAgKDMyID09PSBzdXNwZW5kZWRMYW5lcyAmJiAwICE9PSAocm9vdCAmIDQxOTQxNzYpKSlcbiAgICA/IHdpcExhbmVzXG4gICAgOiBuZXh0TGFuZXM7XG59XG5mdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgc3dpdGNoIChsYW5lKSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgMjpcbiAgICBjYXNlIDQ6XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICAgIGNhc2UgMTY6XG4gICAgY2FzZSAzMjpcbiAgICBjYXNlIDY0OlxuICAgIGNhc2UgMTI4OlxuICAgIGNhc2UgMjU2OlxuICAgIGNhc2UgNTEyOlxuICAgIGNhc2UgMTAyNDpcbiAgICBjYXNlIDIwNDg6XG4gICAgY2FzZSA0MDk2OlxuICAgIGNhc2UgODE5MjpcbiAgICBjYXNlIDE2Mzg0OlxuICAgIGNhc2UgMzI3Njg6XG4gICAgY2FzZSA2NTUzNjpcbiAgICBjYXNlIDEzMTA3MjpcbiAgICBjYXNlIDI2MjE0NDpcbiAgICBjYXNlIDUyNDI4ODpcbiAgICBjYXNlIDEwNDg1NzY6XG4gICAgY2FzZSAyMDk3MTUyOlxuICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgNWUzO1xuICAgIGNhc2UgNDE5NDMwNDpcbiAgICBjYXNlIDgzODg2MDg6XG4gICAgY2FzZSAxNjc3NzIxNjpcbiAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgcmV0dXJuIC0xO1xuICAgIGNhc2UgNjcxMDg4NjQ6XG4gICAgY2FzZSAxMzQyMTc3Mjg6XG4gICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgY2FzZSA1MzY4NzA5MTI6XG4gICAgY2FzZSAxMDczNzQxODI0OlxuICAgICAgcmV0dXJuIC0xO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gLTE7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QsIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcykge1xuICBpZiAocm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcykgcmV0dXJuIDA7XG4gIHJvb3QgPSByb290LnBlbmRpbmdMYW5lcyAmIC01MzY4NzA5MTM7XG4gIHJldHVybiAwICE9PSByb290ID8gcm9vdCA6IHJvb3QgJiA1MzY4NzA5MTIgPyA1MzY4NzA5MTIgOiAwO1xufVxuZnVuY3Rpb24gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSB7XG4gIHZhciBsYW5lID0gbmV4dFRyYW5zaXRpb25MYW5lO1xuICBuZXh0VHJhbnNpdGlvbkxhbmUgPDw9IDE7XG4gIDAgPT09IChuZXh0VHJhbnNpdGlvbkxhbmUgJiA0MTk0MTc2KSAmJiAobmV4dFRyYW5zaXRpb25MYW5lID0gMTI4KTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjbGFpbU5leHRSZXRyeUxhbmUoKSB7XG4gIHZhciBsYW5lID0gbmV4dFJldHJ5TGFuZTtcbiAgbmV4dFJldHJ5TGFuZSA8PD0gMTtcbiAgMCA9PT0gKG5leHRSZXRyeUxhbmUgJiA2MjkxNDU2MCkgJiYgKG5leHRSZXRyeUxhbmUgPSA0MTk0MzA0KTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgZm9yICh2YXIgbGFuZU1hcCA9IFtdLCBpID0gMDsgMzEgPiBpOyBpKyspIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lO1xuICAyNjg0MzU0NTYgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAoKHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwKSwgKHJvb3QucGluZ2VkTGFuZXMgPSAwKSk7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzLCBzcGF3bmVkTGFuZSkge1xuICB2YXIgbm9Mb25nZXJQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IDA7XG4gIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgcmVtYWluaW5nTGFuZXMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIGZvciAoXG4gICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgaGlkZGVuVXBkYXRlcyA9IHJvb3QuaGlkZGVuVXBkYXRlcztcbiAgICAwIDwgbm9Mb25nZXJQZW5kaW5nTGFuZXM7XG5cbiAgKSB7XG4gICAgdmFyIGluZGV4JDcgPSAzMSAtIGNsejMyKG5vTG9uZ2VyUGVuZGluZ0xhbmVzKSxcbiAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDc7XG4gICAgcmVtYWluaW5nTGFuZXNbaW5kZXgkN10gPSAwO1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleCQ3XSA9IC0xO1xuICAgIHZhciBoaWRkZW5VcGRhdGVzRm9yTGFuZSA9IGhpZGRlblVwZGF0ZXNbaW5kZXgkN107XG4gICAgaWYgKG51bGwgIT09IGhpZGRlblVwZGF0ZXNGb3JMYW5lKVxuICAgICAgZm9yIChcbiAgICAgICAgaGlkZGVuVXBkYXRlc1tpbmRleCQ3XSA9IG51bGwsIGluZGV4JDcgPSAwO1xuICAgICAgICBpbmRleCQ3IDwgaGlkZGVuVXBkYXRlc0ZvckxhbmUubGVuZ3RoO1xuICAgICAgICBpbmRleCQ3KytcbiAgICAgICkge1xuICAgICAgICB2YXIgdXBkYXRlID0gaGlkZGVuVXBkYXRlc0ZvckxhbmVbaW5kZXgkN107XG4gICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJiAodXBkYXRlLmxhbmUgJj0gLTUzNjg3MDkxMyk7XG4gICAgICB9XG4gICAgbm9Mb25nZXJQZW5kaW5nTGFuZXMgJj0gfmxhbmU7XG4gIH1cbiAgMCAhPT0gc3Bhd25lZExhbmUgJiYgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIDApO1xufVxuZnVuY3Rpb24gbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIGVudGFuZ2xlZExhbmVzKSB7XG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IHNwYXduZWRMYW5lO1xuICByb290LnN1c3BlbmRlZExhbmVzICY9IH5zcGF3bmVkTGFuZTtcbiAgdmFyIHNwYXduZWRMYW5lSW5kZXggPSAzMSAtIGNsejMyKHNwYXduZWRMYW5lKTtcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBzcGF3bmVkTGFuZTtcbiAgcm9vdC5lbnRhbmdsZW1lbnRzW3NwYXduZWRMYW5lSW5kZXhdID1cbiAgICByb290LmVudGFuZ2xlbWVudHNbc3Bhd25lZExhbmVJbmRleF0gfFxuICAgIDEwNzM3NDE4MjQgfFxuICAgIChlbnRhbmdsZWRMYW5lcyAmIDQxOTQyMTgpO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgdmFyIHJvb3RFbnRhbmdsZWRMYW5lcyA9IChyb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzKTtcbiAgZm9yIChyb290ID0gcm9vdC5lbnRhbmdsZW1lbnRzOyByb290RW50YW5nbGVkTGFuZXM7ICkge1xuICAgIHZhciBpbmRleCQ4ID0gMzEgLSBjbHozMihyb290RW50YW5nbGVkTGFuZXMpLFxuICAgICAgbGFuZSA9IDEgPDwgaW5kZXgkODtcbiAgICAobGFuZSAmIGVudGFuZ2xlZExhbmVzKSB8IChyb290W2luZGV4JDhdICYgZW50YW5nbGVkTGFuZXMpICYmXG4gICAgICAocm9vdFtpbmRleCQ4XSB8PSBlbnRhbmdsZWRMYW5lcyk7XG4gICAgcm9vdEVudGFuZ2xlZExhbmVzICY9IH5sYW5lO1xuICB9XG59XG52YXIgY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gMDtcbmZ1bmN0aW9uIGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKSB7XG4gIGxhbmVzICY9IC1sYW5lcztcbiAgcmV0dXJuIDIgPCBsYW5lc1xuICAgID8gOCA8IGxhbmVzXG4gICAgICA/IDAgIT09IChsYW5lcyAmIDEzNDIxNzcyNylcbiAgICAgICAgPyAzMlxuICAgICAgICA6IDI2ODQzNTQ1NlxuICAgICAgOiA4XG4gICAgOiAyO1xufVxuZnVuY3Rpb24gc2hpbSQxKCkge1xuICB0aHJvdyBFcnJvcihcbiAgICBcIlRoZSBjdXJyZW50IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgaHlkcmF0aW9uLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICk7XG59XG52YXIgZ2V0Vmlld0NvbmZpZ0ZvclR5cGUgPVxuICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5SZWFjdE5hdGl2ZVZpZXdDb25maWdSZWdpc3RyeS5nZXQsXG4gIG5leHRSZWFjdFRhZyA9IDM7XG5mdW5jdGlvbiBhbGxvY2F0ZVRhZygpIHtcbiAgdmFyIHRhZyA9IG5leHRSZWFjdFRhZztcbiAgMSA9PT0gdGFnICUgMTAgJiYgKHRhZyArPSAyKTtcbiAgbmV4dFJlYWN0VGFnID0gdGFnICsgMjtcbiAgcmV0dXJuIHRhZztcbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VW5jYWNoZUZpYmVyTm9kZShub2RlKSB7XG4gIGlmIChcIm51bWJlclwiID09PSB0eXBlb2Ygbm9kZSlcbiAgICBpbnN0YW5jZUNhY2hlLmRlbGV0ZShub2RlKSwgaW5zdGFuY2VQcm9wcy5kZWxldGUobm9kZSk7XG4gIGVsc2Uge1xuICAgIHZhciB0YWcgPSBub2RlLl9uYXRpdmVUYWc7XG4gICAgaW5zdGFuY2VDYWNoZS5kZWxldGUodGFnKTtcbiAgICBpbnN0YW5jZVByb3BzLmRlbGV0ZSh0YWcpO1xuICAgIG5vZGUuX2NoaWxkcmVuLmZvckVhY2gocmVjdXJzaXZlbHlVbmNhY2hlRmliZXJOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluYWxpemVJbml0aWFsQ2hpbGRyZW4ocGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKDAgPT09IHBhcmVudEluc3RhbmNlLl9jaGlsZHJlbi5sZW5ndGgpIHJldHVybiAhMTtcbiAgdmFyIG5hdGl2ZVRhZ3MgPSBwYXJlbnRJbnN0YW5jZS5fY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBcIm51bWJlclwiID09PSB0eXBlb2YgY2hpbGQgPyBjaGlsZCA6IGNoaWxkLl9uYXRpdmVUYWc7XG4gIH0pO1xuICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLnNldENoaWxkcmVuKFxuICAgIHBhcmVudEluc3RhbmNlLl9uYXRpdmVUYWcsXG4gICAgbmF0aXZlVGFnc1xuICApO1xuICByZXR1cm4gITE7XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gbnVsbCAhPSBpbnN0YW5jZS5jYW5vbmljYWwgJiYgbnVsbCAhPSBpbnN0YW5jZS5jYW5vbmljYWwucHVibGljSW5zdGFuY2VcbiAgICA/IGluc3RhbmNlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZVxuICAgIDogaW5zdGFuY2U7XG59XG52YXIgc2NoZWR1bGVUaW1lb3V0ID0gc2V0VGltZW91dCxcbiAgY2FuY2VsVGltZW91dCA9IGNsZWFyVGltZW91dDtcbmZ1bmN0aW9uIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJOYW1lKSB7XG4gIHZhciBzb3VyY2VJbmZvID0gXCJcIjtcbiAgb3duZXJOYW1lICYmIChzb3VyY2VJbmZvID0gXCIgKGNyZWF0ZWQgYnkgXCIgKyBvd25lck5hbWUgKyBcIilcIik7XG4gIHJldHVybiBcIlxcbiAgICBpbiBcIiArIChuYW1lIHx8IFwiVW5rbm93blwiKSArIHNvdXJjZUluZm87XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4pIHtcbiAgcmV0dXJuIGZuXG4gICAgPyBkZXNjcmliZUNvbXBvbmVudEZyYW1lKGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgfHwgbnVsbCwgbnVsbClcbiAgICA6IFwiXCI7XG59XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICB2YWx1ZVN0YWNrID0gW10sXG4gIGluZGV4ID0gLTE7XG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7IGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZSB9O1xufVxuZnVuY3Rpb24gcG9wKGN1cnNvcikge1xuICAwID4gaW5kZXggfHxcbiAgICAoKGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF0pLCAodmFsdWVTdGFja1tpbmRleF0gPSBudWxsKSwgaW5kZXgtLSk7XG59XG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fSxcbiAgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoZW1wdHlDb250ZXh0T2JqZWN0KSxcbiAgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcighMSksXG4gIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbmZ1bmN0aW9uIGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkge1xuICB2YXIgY29udGV4dFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5jb250ZXh0VHlwZXM7XG4gIGlmICghY29udGV4dFR5cGVzKSByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGlmIChcbiAgICBpbnN0YW5jZSAmJlxuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dFxuICApXG4gICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICB2YXIgY29udGV4dCA9IHt9LFxuICAgIGtleTtcbiAgZm9yIChrZXkgaW4gY29udGV4dFR5cGVzKSBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgaW5zdGFuY2UgJiZcbiAgICAoKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSxcbiAgICAod29ya0luUHJvZ3Jlc3MuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9XG4gICAgICB1bm1hc2tlZENvbnRleHQpLFxuICAgICh3b3JrSW5Qcm9ncmVzcy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IGNvbnRleHQpKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gIHR5cGUgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICByZXR1cm4gbnVsbCAhPT0gdHlwZSAmJiB2b2lkIDAgIT09IHR5cGU7XG59XG5mdW5jdGlvbiBwb3BDb250ZXh0KCkge1xuICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvcik7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSk7XG59XG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAgaWYgKGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQgIT09IGVtcHR5Q29udGV4dE9iamVjdClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgY29udGV4dCk7XG4gIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB0eXBlID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCkgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gIGluc3RhbmNlID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG4gIGZvciAodmFyIGNvbnRleHRLZXkgaW4gaW5zdGFuY2UpXG4gICAgaWYgKCEoY29udGV4dEtleSBpbiB0eXBlKSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJVbmtub3duXCIpICtcbiAgICAgICAgICAnLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXCInICtcbiAgICAgICAgICBjb250ZXh0S2V5ICtcbiAgICAgICAgICAnXCIgaXMgbm90IGRlZmluZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuJ1xuICAgICAgKTtcbiAgcmV0dXJuIGFzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcyA9XG4gICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSkgJiZcbiAgICAgIHdvcmtJblByb2dyZXNzLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0KSB8fFxuICAgIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudDtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgd29ya0luUHJvZ3Jlc3MpO1xuICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiAhMDtcbn1cbmZ1bmN0aW9uIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHR5cGUsIGRpZENoYW5nZSkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGlmICghaW5zdGFuY2UpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICk7XG4gIGRpZENoYW5nZVxuICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IHByb2Nlc3NDaGlsZENvbnRleHQoXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICB0eXBlLFxuICAgICAgICBwcmV2aW91c0NvbnRleHRcbiAgICAgICkpLFxuICAgICAgKGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IpLFxuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxKSxcbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIHdvcmtJblByb2dyZXNzKSlcbiAgICA6IHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yKTtcbiAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UpO1xufVxuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4gKHggPT09IHkgJiYgKDAgIT09IHggfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSk7XG59XG52YXIgb2JqZWN0SXMgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBpcyxcbiAgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlKTtcbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbnVsbCk7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgeyBpc0luQVBhcmVudFRleHQ6ICExIH0pO1xufVxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcigpIHtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvcik7XG59XG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIGNvbnRleHQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGZpYmVyLnR5cGU7XG4gIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgXCJBbmRyb2lkVGV4dElucHV0XCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCB8fFxuICAgIFwiUkNUTXVsdGlsaW5lVGV4dElucHV0Vmlld1wiID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgfHxcbiAgICBcIlJDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3XCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCB8fFxuICAgIFwiUkNUVGV4dFwiID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgfHxcbiAgICBcIlJDVFZpcnR1YWxUZXh0XCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICBjb250ZXh0LmlzSW5BUGFyZW50VGV4dCAhPT0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICA/IHsgaXNJbkFQYXJlbnRUZXh0OiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgfVxuICAgICAgOiBjb250ZXh0O1xuICBjb250ZXh0ICE9PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiZcbiAgICAocHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpLFxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpKTtcbn1cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGZpYmVyICYmXG4gICAgKHBvcChjb250ZXh0U3RhY2tDdXJzb3IpLCBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IpKTtcbn1cbnZhciBoeWRyYXRpb25FcnJvcnMgPSBudWxsLFxuICBjb25jdXJyZW50UXVldWVzID0gW10sXG4gIGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDAsXG4gIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IDA7XG5mdW5jdGlvbiBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCkge1xuICBmb3IgKFxuICAgIHZhciBlbmRJbmRleCA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleCxcbiAgICAgIGkgPSAoY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gY29uY3VycmVudFF1ZXVlc0luZGV4ID0gMCk7XG4gICAgaSA8IGVuZEluZGV4O1xuXG4gICkge1xuICAgIHZhciBmaWJlciA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICB2YXIgcXVldWUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICB2YXIgbGFuZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICBpZiAobnVsbCAhPT0gcXVldWUgJiYgbnVsbCAhPT0gdXBkYXRlKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gICAgICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgIH1cbiAgICAwICE9PSBsYW5lICYmIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCB1cGRhdGUsIGxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBmaWJlcjtcbiAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBxdWV1ZTtcbiAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSB1cGRhdGU7XG4gIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gbGFuZTtcbiAgY29uY3VycmVudGx5VXBkYXRlZExhbmVzIHw9IGxhbmU7XG4gIGZpYmVyLmxhbmVzIHw9IGxhbmU7XG4gIGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBmaWJlciAmJiAoZmliZXIubGFuZXMgfD0gbGFuZSk7XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIGxhbmUpIHtcbiAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBudWxsLCBudWxsLCBsYW5lKTtcbiAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xufVxuZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIHVwZGF0ZSwgbGFuZSkge1xuICBzb3VyY2VGaWJlci5sYW5lcyB8PSBsYW5lO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSBsYW5lKTtcbiAgZm9yICh2YXIgaXNIaWRkZW4gPSAhMSwgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7IClcbiAgICAocGFyZW50LmNoaWxkTGFuZXMgfD0gbGFuZSksXG4gICAgICAoYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZSksXG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5jaGlsZExhbmVzIHw9IGxhbmUpLFxuICAgICAgMjIgPT09IHBhcmVudC50YWcgJiZcbiAgICAgICAgKChzb3VyY2VGaWJlciA9IHBhcmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlciB8fCBzb3VyY2VGaWJlci5fdmlzaWJpbGl0eSAmIDEgfHwgKGlzSGlkZGVuID0gITApKSxcbiAgICAgIChzb3VyY2VGaWJlciA9IHBhcmVudCksXG4gICAgICAocGFyZW50ID0gcGFyZW50LnJldHVybik7XG4gIGlzSGlkZGVuICYmXG4gICAgbnVsbCAhPT0gdXBkYXRlICYmXG4gICAgMyA9PT0gc291cmNlRmliZXIudGFnICYmXG4gICAgKChwYXJlbnQgPSBzb3VyY2VGaWJlci5zdGF0ZU5vZGUpLFxuICAgIChpc0hpZGRlbiA9IDMxIC0gY2x6MzIobGFuZSkpLFxuICAgIChwYXJlbnQgPSBwYXJlbnQuaGlkZGVuVXBkYXRlcyksXG4gICAgKHNvdXJjZUZpYmVyID0gcGFyZW50W2lzSGlkZGVuXSksXG4gICAgbnVsbCA9PT0gc291cmNlRmliZXJcbiAgICAgID8gKHBhcmVudFtpc0hpZGRlbl0gPSBbdXBkYXRlXSlcbiAgICAgIDogc291cmNlRmliZXIucHVzaCh1cGRhdGUpLFxuICAgICh1cGRhdGUubGFuZSA9IGxhbmUgfCA1MzY4NzA5MTIpKTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoc291cmNlRmliZXIpIHtcbiAgaWYgKDUwIDwgbmVzdGVkVXBkYXRlQ291bnQpXG4gICAgdGhyb3cgKFxuICAgICAgKChuZXN0ZWRVcGRhdGVDb3VudCA9IDApLFxuICAgICAgKHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGwpLFxuICAgICAgRXJyb3IoXG4gICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiXG4gICAgICApKVxuICAgICk7XG4gIGZvciAodmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgKHNvdXJjZUZpYmVyID0gcGFyZW50KSwgKHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybik7XG4gIHJldHVybiAzID09PSBzb3VyY2VGaWJlci50YWcgPyBzb3VyY2VGaWJlci5zdGF0ZU5vZGUgOiBudWxsO1xufVxudmFyIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gIGxhc3RTY2hlZHVsZWRSb290ID0gbnVsbCxcbiAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSAhMSxcbiAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITEsXG4gIGlzRmx1c2hpbmdXb3JrID0gITEsXG4gIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gMDtcbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KSB7XG4gIHJvb3QgIT09IGxhc3RTY2hlZHVsZWRSb290ICYmXG4gICAgbnVsbCA9PT0gcm9vdC5uZXh0ICYmXG4gICAgKG51bGwgPT09IGxhc3RTY2hlZHVsZWRSb290XG4gICAgICA/IChmaXJzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdCA9IHJvb3QpXG4gICAgICA6IChsYXN0U2NoZWR1bGVkUm9vdCA9IGxhc3RTY2hlZHVsZWRSb290Lm5leHQgPSByb290KSk7XG4gIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICEwO1xuICBkaWRTY2hlZHVsZU1pY3JvdGFzayB8fFxuICAgICgoZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSAhMCksXG4gICAgc2NoZWR1bGVDYWxsYmFjayQyKEltbWVkaWF0ZVByaW9yaXR5LCBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2spKTtcbiAgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBub3coKSk7XG59XG5mdW5jdGlvbiBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChvbmx5TGVnYWN5KSB7XG4gIGlmICghaXNGbHVzaGluZ1dvcmsgJiYgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrKSB7XG4gICAgdmFyIGVycm9ycyA9IG51bGw7XG4gICAgaXNGbHVzaGluZ1dvcmsgPSAhMDtcbiAgICBkbyB7XG4gICAgICB2YXIgZGlkUGVyZm9ybVNvbWVXb3JrID0gITE7XG4gICAgICBmb3IgKHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290OyBudWxsICE9PSByb290OyApIHtcbiAgICAgICAgaWYgKCFvbmx5TGVnYWN5IHx8IDAgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMoXG4gICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExIDogMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoMCAhPT0gKG5leHRMYW5lcyAmIDMpKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZGlkUGVyZm9ybVNvbWVXb3JrID0gITA7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExID0gcm9vdDtcbiAgICAgICAgICAgICAgaWYgKDAgIT09IChleGVjdXRpb25Db250ZXh0ICYgNikpXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICAgICAgICAgIGlmICghZmx1c2hQYXNzaXZlRWZmZWN0cygpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExLFxuICAgICAgICAgICAgICAgICAgbmV4dExhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQxMS50YWcgJiZcbiAgICAgICAgICAgICAgICAgIDIgPT09IGV4aXRTdGF0dXNcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMgPSBuZXh0TGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExLFxuICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgMCAhPT0gZXJyb3JSZXRyeUxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAgICgobmV4dExhbmVzID0gZXJyb3JSZXRyeUxhbmVzKSxcbiAgICAgICAgICAgICAgICAgICAgKGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQxMSxcbiAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKDEgPT09IGV4aXRTdGF0dXMpXG4gICAgICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgICAgICgob3JpZ2luYWxseUF0dGVtcHRlZExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciksXG4gICAgICAgICAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkMTEsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dExhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExKSxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICA2ID09PSBleGl0U3RhdHVzXG4gICAgICAgICAgICAgICAgICA/IG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkMTEuZmluaXNoZWRXb3JrID1cbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQxMS5jdXJyZW50LmFsdGVybmF0ZSksXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQxMS5maW5pc2hlZExhbmVzID1cbiAgICAgICAgICAgICAgICAgICAgICBuZXh0TGFuZXMpLFxuICAgICAgICAgICAgICAgICAgICBjb21taXRSb290KFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExLFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDExKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIG51bGwgPT09IGVycm9ycyA/IChlcnJvcnMgPSBbZXJyb3JdKSA6IGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb290ID0gcm9vdC5uZXh0O1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGRpZFBlcmZvcm1Tb21lV29yayk7XG4gICAgaXNGbHVzaGluZ1dvcmsgPSAhMTtcbiAgICBpZiAobnVsbCAhPT0gZXJyb3JzKSB7XG4gICAgICBpZiAoMSA8IGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yKVxuICAgICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMpO1xuICAgICAgICBmb3IgKG9ubHlMZWdhY3kgPSAxOyBvbmx5TGVnYWN5IDwgZXJyb3JzLmxlbmd0aDsgb25seUxlZ2FjeSsrKVxuICAgICAgICAgIChkaWRQZXJmb3JtU29tZVdvcmsgPSB0aHJvd0Vycm9yLmJpbmQobnVsbCwgZXJyb3JzW29ubHlMZWdhY3ldKSksXG4gICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDIoSW1tZWRpYXRlUHJpb3JpdHksIGRpZFBlcmZvcm1Tb21lV29yayk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yKSB7XG4gIHRocm93IGVycm9yO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCkge1xuICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSBkaWRTY2hlZHVsZU1pY3JvdGFzayA9ICExO1xuICBmb3IgKFxuICAgIHZhciBjdXJyZW50VGltZSA9IG5vdygpLCBwcmV2ID0gbnVsbCwgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDtcbiAgICBudWxsICE9PSByb290O1xuXG4gICkge1xuICAgIHZhciBuZXh0ID0gcm9vdC5uZXh0LFxuICAgICAgbmV4dExhbmVzID0gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSk7XG4gICAgMCA9PT0gbmV4dExhbmVzXG4gICAgICA/ICgocm9vdC5uZXh0ID0gbnVsbCksXG4gICAgICAgIG51bGwgPT09IHByZXYgPyAoZmlyc3RTY2hlZHVsZWRSb290ID0gbmV4dCkgOiAocHJldi5uZXh0ID0gbmV4dCksXG4gICAgICAgIG51bGwgPT09IG5leHQgJiYgKGxhc3RTY2hlZHVsZWRSb290ID0gcHJldikpXG4gICAgICA6ICgocHJldiA9IHJvb3QpLFxuICAgICAgICAwICE9PSAobmV4dExhbmVzICYgMykgJiYgKG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICEwKSk7XG4gICAgcm9vdCA9IG5leHQ7XG4gIH1cbiAgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSAwO1xuICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCghMSk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIGZvciAoXG4gICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcyxcbiAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcyxcbiAgICAgIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgbGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIC02MjkxNDU2MTtcbiAgICAwIDwgbGFuZXM7XG5cbiAgKSB7XG4gICAgdmFyIGluZGV4JDUgPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDUsXG4gICAgICBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleCQ1XTtcbiAgICBpZiAoLTEgPT09IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICBpZiAoMCA9PT0gKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgfHwgMCAhPT0gKGxhbmUgJiBwaW5nZWRMYW5lcykpXG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleCQ1XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lICYmIChyb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lKTtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuICBjdXJyZW50VGltZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgc3VzcGVuZGVkTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgc3VzcGVuZGVkTGFuZXMgPSBnZXROZXh0TGFuZXMoXG4gICAgcm9vdCxcbiAgICByb290ID09PSBjdXJyZW50VGltZSA/IHN1c3BlbmRlZExhbmVzIDogMFxuICApO1xuICBwaW5nZWRMYW5lcyA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICBpZiAoXG4gICAgMCA9PT0gc3VzcGVuZGVkTGFuZXMgfHxcbiAgICAocm9vdCA9PT0gY3VycmVudFRpbWUgJiYgMiA9PT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHx8XG4gICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0XG4gIClcbiAgICByZXR1cm4gKFxuICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgY2FuY2VsQ2FsbGJhY2skMShwaW5nZWRMYW5lcyksXG4gICAgICAocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgIChyb290LmNhbGxiYWNrUHJpb3JpdHkgPSAwKVxuICAgICk7XG4gIGlmICgwICE9PSAoc3VzcGVuZGVkTGFuZXMgJiAzKSlcbiAgICByZXR1cm4gKFxuICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgY2FuY2VsQ2FsbGJhY2skMShwaW5nZWRMYW5lcyksXG4gICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMiksXG4gICAgICAocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgIDJcbiAgICApO1xuICBjdXJyZW50VGltZSA9IHN1c3BlbmRlZExhbmVzICYgLXN1c3BlbmRlZExhbmVzO1xuICBpZiAoY3VycmVudFRpbWUgPT09IHJvb3QuY2FsbGJhY2tQcmlvcml0eSkgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICBudWxsICE9PSBwaW5nZWRMYW5lcyAmJiBjYW5jZWxDYWxsYmFjayQxKHBpbmdlZExhbmVzKTtcbiAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShzdXNwZW5kZWRMYW5lcykpIHtcbiAgICBjYXNlIDI6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IEltbWVkaWF0ZVByaW9yaXR5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OlxuICAgICAgc3VzcGVuZGVkTGFuZXMgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzI6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IElkbGVQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5O1xuICB9XG4gIHBpbmdlZExhbmVzID0gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIHN1c3BlbmRlZExhbmVzID0gc2NoZWR1bGVDYWxsYmFjayQyKHN1c3BlbmRlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IGN1cnJlbnRUaW1lO1xuICByb290LmNhbGxiYWNrTm9kZSA9IHN1c3BlbmRlZExhbmVzO1xuICByZXR1cm4gY3VycmVudFRpbWU7XG59XG52YXIgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIHNoYXJlZDogeyBwZW5kaW5nOiBudWxsLCBsYW5lczogMCwgaGlkZGVuQ2FsbGJhY2tzOiBudWxsIH0sXG4gICAgY2FsbGJhY2tzOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9PT0gY3VycmVudCAmJlxuICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHtcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudC5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnQuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnQubGFzdEJhc2VVcGRhdGUsXG4gICAgICBzaGFyZWQ6IGN1cnJlbnQuc2hhcmVkLFxuICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUobGFuZSkge1xuICByZXR1cm4geyBsYW5lOiBsYW5lLCB0YWc6IDAsIHBheWxvYWQ6IG51bGwsIGNhbGxiYWNrOiBudWxsLCBuZXh0OiBudWxsIH07XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG4gIGlmIChudWxsID09PSB1cGRhdGVRdWV1ZSkgcmV0dXJuIG51bGw7XG4gIHVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICBpZiAoMCAhPT0gKGV4ZWN1dGlvbkNvbnRleHQgJiAyKSkge1xuICAgIHZhciBwZW5kaW5nID0gdXBkYXRlUXVldWUucGVuZGluZztcbiAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgIDogKCh1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dCksIChwZW5kaW5nLm5leHQgPSB1cGRhdGUpKTtcbiAgICB1cGRhdGVRdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgIHVwZGF0ZSA9IGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBudWxsLCBsYW5lKTtcbiAgICByZXR1cm4gdXBkYXRlO1xuICB9XG4gIGVucXVldWVVcGRhdGUkMShmaWJlciwgdXBkYXRlUXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbn1cbmZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgZmliZXIgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgaWYgKG51bGwgIT09IGZpYmVyICYmICgoZmliZXIgPSBmaWJlci5zaGFyZWQpLCAwICE9PSAobGFuZSAmIDQxOTQxNzYpKSkge1xuICAgIHZhciBxdWV1ZUxhbmVzID0gZmliZXIubGFuZXM7XG4gICAgcXVldWVMYW5lcyAmPSByb290LnBlbmRpbmdMYW5lcztcbiAgICBsYW5lIHw9IHF1ZXVlTGFuZXM7XG4gICAgZmliZXIubGFuZXMgPSBsYW5lO1xuICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLFxuICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gIGlmIChcbiAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksIHF1ZXVlID09PSBjdXJyZW50KVxuICApIHtcbiAgICB2YXIgbmV3Rmlyc3QgPSBudWxsLFxuICAgICAgbmV3TGFzdCA9IG51bGw7XG4gICAgcXVldWUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gICAgaWYgKG51bGwgIT09IHF1ZXVlKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiBxdWV1ZS5sYW5lLFxuICAgICAgICAgIHRhZzogcXVldWUudGFnLFxuICAgICAgICAgIHBheWxvYWQ6IHF1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgPyAobmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmUpXG4gICAgICAgICAgOiAobmV3TGFzdCA9IG5ld0xhc3QubmV4dCA9IGNsb25lKTtcbiAgICAgICAgcXVldWUgPSBxdWV1ZS5uZXh0O1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gcXVldWUpO1xuICAgICAgbnVsbCA9PT0gbmV3TGFzdFxuICAgICAgICA/IChuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZSlcbiAgICAgICAgOiAobmV3TGFzdCA9IG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlKTtcbiAgICB9IGVsc2UgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgcXVldWUgPSB7XG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnQuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgc2hhcmVkOiBjdXJyZW50LnNoYXJlZCxcbiAgICAgIGNhbGxiYWNrczogY3VycmVudC5jYWxsYmFja3NcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdvcmtJblByb2dyZXNzID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgPyAocXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGUpXG4gICAgOiAod29ya0luUHJvZ3Jlc3MubmV4dCA9IGNhcHR1cmVkVXBkYXRlKTtcbiAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZShcbiAgd29ya0luUHJvZ3Jlc3MkanNjb21wJDAsXG4gIHByb3BzLFxuICBpbnN0YW5jZSRqc2NvbXAkMCxcbiAgcmVuZGVyTGFuZXNcbikge1xuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZSxcbiAgICAgIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7XG4gICAgbnVsbCA9PT0gbGFzdEJhc2VVcGRhdGVcbiAgICAgID8gKGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgIDogKGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGUpO1xuICAgIGxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5hbHRlcm5hdGU7XG4gICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAocGVuZGluZ1F1ZXVlID0gY3VycmVudC5sYXN0QmFzZVVwZGF0ZSksXG4gICAgICBwZW5kaW5nUXVldWUgIT09IGxhc3RCYXNlVXBkYXRlICYmXG4gICAgICAgIChudWxsID09PSBwZW5kaW5nUXVldWVcbiAgICAgICAgICA/IChjdXJyZW50LmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICA6IChwZW5kaW5nUXVldWUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSksXG4gICAgICAgIChjdXJyZW50Lmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUpKSk7XG4gIH1cbiAgaWYgKG51bGwgIT09IGZpcnN0QmFzZVVwZGF0ZSkge1xuICAgIHZhciBuZXdTdGF0ZSA9IHF1ZXVlLmJhc2VTdGF0ZTtcbiAgICBsYXN0QmFzZVVwZGF0ZSA9IDA7XG4gICAgY3VycmVudCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlID0gbnVsbDtcbiAgICBwZW5kaW5nUXVldWUgPSBmaXJzdEJhc2VVcGRhdGU7XG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSBwZW5kaW5nUXVldWUubGFuZSAmIC01MzY4NzA5MTMsXG4gICAgICAgIGlzSGlkZGVuVXBkYXRlID0gdXBkYXRlTGFuZSAhPT0gcGVuZGluZ1F1ZXVlLmxhbmU7XG4gICAgICBpZiAoXG4gICAgICAgIGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgIDogKHJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICkge1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICB0YWc6IHBlbmRpbmdRdWV1ZS50YWcsXG4gICAgICAgICAgICAgIHBheWxvYWQ6IHBlbmRpbmdRdWV1ZS5wYXlsb2FkLFxuICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMCxcbiAgICAgICAgICAgIHVwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICB1cGRhdGVMYW5lID0gcHJvcHM7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gaW5zdGFuY2UkanNjb21wJDA7XG4gICAgICAgICAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MuY2FsbChpbnN0YW5jZSwgbmV3U3RhdGUsIHVwZGF0ZUxhbmUpO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAtNjU1MzcpIHwgMTI4O1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICAgICAgICB1cGRhdGVMYW5lID1cbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzcy5jYWxsKGluc3RhbmNlLCBuZXdTdGF0ZSwgdXBkYXRlTGFuZSlcbiAgICAgICAgICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSB1cGRhdGVMYW5lIHx8IHZvaWQgMCA9PT0gdXBkYXRlTGFuZSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSBhc3NpZ24oe30sIG5ld1N0YXRlLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlTGFuZSA9IHBlbmRpbmdRdWV1ZS5jYWxsYmFjaztcbiAgICAgICAgbnVsbCAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MkanNjb21wJDAuZmxhZ3MgfD0gNjQpLFxuICAgICAgICAgIGlzSGlkZGVuVXBkYXRlICYmICh3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5mbGFncyB8PSA4MTkyKSxcbiAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBxdWV1ZS5jYWxsYmFja3MpLFxuICAgICAgICAgIG51bGwgPT09IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICA/IChxdWV1ZS5jYWxsYmFja3MgPSBbdXBkYXRlTGFuZV0pXG4gICAgICAgICAgICA6IGlzSGlkZGVuVXBkYXRlLnB1c2godXBkYXRlTGFuZSkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogcGVuZGluZ1F1ZXVlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiBwZW5kaW5nUXVldWUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogcGVuZGluZ1F1ZXVlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgPyAoKGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGN1cnJlbnQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgIChsYXN0UGVuZGluZ1VwZGF0ZSA9IG5ld1N0YXRlKSlcbiAgICAgICAgICAgIDogKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgKGxhc3RCYXNlVXBkYXRlIHw9IHVwZGF0ZUxhbmUpO1xuICAgICAgcGVuZGluZ1F1ZXVlID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBpZiAobnVsbCA9PT0gcGVuZGluZ1F1ZXVlKVxuICAgICAgICBpZiAoKChwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZyksIG51bGwgPT09IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBwZW5kaW5nUXVldWUpLFxuICAgICAgICAgICAgKHBlbmRpbmdRdWV1ZSA9IGlzSGlkZGVuVXBkYXRlLm5leHQpLFxuICAgICAgICAgICAgKGlzSGlkZGVuVXBkYXRlLm5leHQgPSBudWxsKSxcbiAgICAgICAgICAgIChxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgIChxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGwpO1xuICAgIH0gd2hpbGUgKDEpO1xuICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKGxhc3RQZW5kaW5nVXBkYXRlID0gbmV3U3RhdGUpO1xuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnQ7XG4gICAgbnVsbCA9PT0gZmlyc3RCYXNlVXBkYXRlICYmIChxdWV1ZS5zaGFyZWQubGFuZXMgPSAwKTtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gbGFzdEJhc2VVcGRhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MkanNjb21wJDAubGFuZXMgPSBsYXN0QmFzZVVwZGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArXG4gICAgICAgIGNhbGxiYWNrXG4gICAgKTtcbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cbmZ1bmN0aW9uIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgY29udGV4dCkge1xuICB2YXIgY2FsbGJhY2tzID0gdXBkYXRlUXVldWUuY2FsbGJhY2tzO1xuICBpZiAobnVsbCAhPT0gY2FsbGJhY2tzKVxuICAgIGZvciAoXG4gICAgICB1cGRhdGVRdWV1ZS5jYWxsYmFja3MgPSBudWxsLCB1cGRhdGVRdWV1ZSA9IDA7XG4gICAgICB1cGRhdGVRdWV1ZSA8IGNhbGxiYWNrcy5sZW5ndGg7XG4gICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgKVxuICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrc1t1cGRhdGVRdWV1ZV0sIGNvbnRleHQpO1xufVxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSByZXR1cm4gITA7XG4gIGlmIChcbiAgICBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb2JqQSB8fFxuICAgIG51bGwgPT09IG9iakEgfHxcbiAgICBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb2JqQiB8fFxuICAgIG51bGwgPT09IG9iakJcbiAgKVxuICAgIHJldHVybiAhMTtcbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSksXG4gICAga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gITE7XG4gIGZvciAoa2V5c0IgPSAwOyBrZXlzQiA8IGtleXNBLmxlbmd0aDsga2V5c0IrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c0Fba2V5c0JdO1xuICAgIGlmIChcbiAgICAgICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iakIsIGN1cnJlbnRLZXkpIHx8XG4gICAgICAhb2JqZWN0SXMob2JqQVtjdXJyZW50S2V5XSwgb2JqQltjdXJyZW50S2V5XSlcbiAgICApXG4gICAgICByZXR1cm4gITE7XG4gIH1cbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGaWJlcihmaWJlcikge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShmaWJlci50eXBlLCBudWxsKTtcbiAgICBjYXNlIDE2OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUoXCJMYXp5XCIsIG51bGwpO1xuICAgIGNhc2UgMTM6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIsIG51bGwpO1xuICAgIGNhc2UgMTk6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiLCBudWxsKTtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMTU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUucmVuZGVyKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gKGZpYmVyID0gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpKSwgZmliZXI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5mdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya0luUHJvZ3Jlc3MpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IFwiXCI7XG4gICAgZG9cbiAgICAgIChpbmZvICs9IGRlc2NyaWJlRmliZXIod29ya0luUHJvZ3Jlc3MpKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuKTtcbiAgICB3aGlsZSAod29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuIFwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIgKyB4Lm1lc3NhZ2UgKyBcIlxcblwiICsgeC5zdGFjaztcbiAgfVxufVxudmFyIFN1c3BlbnNlRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciEgSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgYHVzZWAgdG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IHJlbmRlci4gWW91IG11c3QgZWl0aGVyIHJldGhyb3cgaXQgaW1tZWRpYXRlbHksIG9yIG1vdmUgdGhlIGB1c2VgIGNhbGwgb3V0c2lkZSBvZiB0aGUgYHRyeS9jYXRjaGAgYmxvY2suIENhcHR1cmluZyB3aXRob3V0IHJldGhyb3dpbmcgd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXFxuXFxuVG8gaGFuZGxlIGFzeW5jIGVycm9ycywgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhbiBlcnJvciBib3VuZGFyeSwgb3IgY2FsbCB0aGUgcHJvbWlzZSdzIGAuY2F0Y2hgIG1ldGhvZCBhbmQgcGFzcyB0aGUgcmVzdWx0IHRvIGB1c2VgXCJcbiAgKSxcbiAgU3VzcGVuc2V5Q29tbWl0RXhjZXB0aW9uID0gRXJyb3IoXG4gICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciwgYW5kIHNob3VsZCBub3QgbGVhayBpbnRvIHVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICApLFxuICBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUgPSB7IHRoZW46IGZ1bmN0aW9uICgpIHt9IH07XG5mdW5jdGlvbiBpc1RoZW5hYmxlUmVzb2x2ZWQodGhlbmFibGUpIHtcbiAgdGhlbmFibGUgPSB0aGVuYWJsZS5zdGF0dXM7XG4gIHJldHVybiBcImZ1bGZpbGxlZFwiID09PSB0aGVuYWJsZSB8fCBcInJlamVjdGVkXCIgPT09IHRoZW5hYmxlO1xufVxuZnVuY3Rpb24gbm9vcCgpIHt9XG5mdW5jdGlvbiB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpIHtcbiAgaW5kZXggPSB0aGVuYWJsZVN0YXRlW2luZGV4XTtcbiAgdm9pZCAwID09PSBpbmRleFxuICAgID8gdGhlbmFibGVTdGF0ZS5wdXNoKHRoZW5hYmxlKVxuICAgIDogaW5kZXggIT09IHRoZW5hYmxlICYmICh0aGVuYWJsZS50aGVuKG5vb3AsIG5vb3ApLCAodGhlbmFibGUgPSBpbmRleCkpO1xuICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgIHRocm93IChcbiAgICAgICAgKCh0aGVuYWJsZVN0YXRlID0gdGhlbmFibGUucmVhc29uKSxcbiAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2godGhlbmFibGVTdGF0ZSksXG4gICAgICAgIHRoZW5hYmxlU3RhdGUpXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHRoZW5hYmxlLnN0YXR1cykgdGhlbmFibGUudGhlbihub29wLCBub29wKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGVuYWJsZVN0YXRlID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgICBpZiAobnVsbCAhPT0gdGhlbmFibGVTdGF0ZSAmJiAxMDAgPCB0aGVuYWJsZVN0YXRlLnNoZWxsU3VzcGVuZENvdW50ZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcImFzeW5jL2F3YWl0IGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGluIENsaWVudCBDb21wb25lbnRzLCBvbmx5IFNlcnZlciBDb21wb25lbnRzLiBUaGlzIGVycm9yIGlzIG9mdGVuIGNhdXNlZCBieSBhY2NpZGVudGFsbHkgYWRkaW5nIGAndXNlIGNsaWVudCdgIHRvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIHNlcnZlci5cIlxuICAgICAgICAgICk7XG4gICAgICAgIHRoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZTtcbiAgICAgICAgdGhlbmFibGVTdGF0ZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgICAgICAgdGhlbmFibGVTdGF0ZS50aGVuKFxuICAgICAgICAgIGZ1bmN0aW9uIChmdWxmaWxsZWRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgdmFyIGZ1bGZpbGxlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnZhbHVlID0gZnVsZmlsbGVkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChcInBlbmRpbmdcIiA9PT0gdGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnJlYXNvbiA9IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgc3dpdGNoICh0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbiksXG4gICAgICAgICAgICAgIGNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoKHRoZW5hYmxlU3RhdGUpLFxuICAgICAgICAgICAgICB0aGVuYWJsZVN0YXRlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgIHRocm93IFN1c3BlbnNlRXhjZXB0aW9uO1xuICB9XG59XG52YXIgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuZnVuY3Rpb24gZ2V0U3VzcGVuZGVkVGhlbmFibGUoKSB7XG4gIGlmIChudWxsID09PSBzdXNwZW5kZWRUaGVuYWJsZSlcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBzdXNwZW5kZWQgdGhlbmFibGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgdmFyIHRoZW5hYmxlID0gc3VzcGVuZGVkVGhlbmFibGU7XG4gIHN1c3BlbmRlZFRoZW5hYmxlID0gbnVsbDtcbiAgcmV0dXJuIHRoZW5hYmxlO1xufVxuZnVuY3Rpb24gY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2gocmVqZWN0ZWRSZWFzb24pIHtcbiAgaWYgKHJlamVjdGVkUmVhc29uID09PSBTdXNwZW5zZUV4Y2VwdGlvbilcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiSG9va3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFuIGFzeW5jIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICApO1xufVxudmFyIHRoZW5hYmxlU3RhdGUkMSA9IG51bGwsXG4gIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuZnVuY3Rpb24gdW53cmFwVGhlbmFibGUodGhlbmFibGUpIHtcbiAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXIkMTtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIkMSArPSAxO1xuICBudWxsID09PSB0aGVuYWJsZVN0YXRlJDEgJiYgKHRoZW5hYmxlU3RhdGUkMSA9IFtdKTtcbiAgcmV0dXJuIHRyYWNrVXNlZFRoZW5hYmxlKHRoZW5hYmxlU3RhdGUkMSwgdGhlbmFibGUsIGluZGV4KTtcbn1cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICByZXR1cm5GaWJlciA9IGVsZW1lbnQucmVmO1xuICBpZiAoXG4gICAgbnVsbCAhPT0gcmV0dXJuRmliZXIgJiZcbiAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZXR1cm5GaWJlciAmJlxuICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiByZXR1cm5GaWJlclxuICApIHtcbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGlmICgxICE9PSBlbGVtZW50LnRhZylcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmcy4gV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuIExlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWZcIlxuICAgICAgICAgICk7XG4gICAgICAgIHZhciBpbnN0ID0gZWxlbWVudC5zdGF0ZU5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoIWluc3QpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiTWlzc2luZyBvd25lciBmb3Igc3RyaW5nIHJlZiBcIiArXG4gICAgICAgICAgICByZXR1cm5GaWJlciArXG4gICAgICAgICAgICBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHJlc29sdmVkSW5zdCA9IGluc3QsXG4gICAgICAgIHN0cmluZ1JlZiA9IFwiXCIgKyByZXR1cm5GaWJlcjtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50LnJlZiAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50LnJlZiAmJlxuICAgICAgICBjdXJyZW50LnJlZi5fc3RyaW5nUmVmID09PSBzdHJpbmdSZWZcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQucmVmO1xuICAgICAgY3VycmVudCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IHJlc29sdmVkSW5zdC5yZWZzO1xuICAgICAgICBudWxsID09PSB2YWx1ZSA/IGRlbGV0ZSByZWZzW3N0cmluZ1JlZl0gOiAocmVmc1tzdHJpbmdSZWZdID0gdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGN1cnJlbnQuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBpZiAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHJldHVybkZpYmVyKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiRXhwZWN0ZWQgcmVmIHRvIGJlIGEgZnVuY3Rpb24sIGEgc3RyaW5nLCBhbiBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlUmVmKCksIG9yIG51bGwuXCJcbiAgICAgICk7XG4gICAgaWYgKCFlbGVtZW50Ll9vd25lcilcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIkVsZW1lbnQgcmVmIHdhcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKFwiICtcbiAgICAgICAgICByZXR1cm5GaWJlciArXG4gICAgICAgICAgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGZ1bmN0aW9uIGNvbXBvbmVudFxcbjIuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBhIGNvbXBvbmVudCdzIHJlbmRlciBtZXRob2RcXG4zLiBZb3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgbG9hZGVkXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWZzLW11c3QtaGF2ZS1vd25lciBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIlxuICAgICAgKTtcbiAgfVxuICByZXR1cm4gcmV0dXJuRmliZXI7XG59XG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIHJldHVybkZpYmVyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKTtcbiAgdGhyb3cgRXJyb3IoXG4gICAgXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICtcbiAgICAgIChcIltvYmplY3QgT2JqZWN0XVwiID09PSByZXR1cm5GaWJlclxuICAgICAgICA/IFwib2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgOiByZXR1cm5GaWJlcikgK1xuICAgICAgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCJcbiAgKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5KGxhenlUeXBlKSB7XG4gIHZhciBpbml0ID0gbGF6eVR5cGUuX2luaXQ7XG4gIHJldHVybiBpbml0KGxhenlUeXBlLl9wYXlsb2FkKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIHZhciBkZWxldGlvbnMgPSByZXR1cm5GaWJlci5kZWxldGlvbnM7XG4gICAgICBudWxsID09PSBkZWxldGlvbnNcbiAgICAgICAgPyAoKHJldHVybkZpYmVyLmRlbGV0aW9ucyA9IFtjaGlsZFRvRGVsZXRlXSksIChyZXR1cm5GaWJlci5mbGFncyB8PSAxNikpXG4gICAgICAgIDogZGVsZXRpb25zLnB1c2goY2hpbGRUb0RlbGV0ZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykgcmV0dXJuIG51bGw7XG4gICAgZm9yICg7IG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkOyApXG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICBmb3IgKHJldHVybkZpYmVyID0gbmV3IE1hcCgpOyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKVxuICAgICAgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQua2V5XG4gICAgICAgID8gcmV0dXJuRmliZXIuc2V0KGN1cnJlbnRGaXJzdENoaWxkLmtleSwgY3VycmVudEZpcnN0Q2hpbGQpXG4gICAgICAgIDogcmV0dXJuRmliZXIuc2V0KGN1cnJlbnRGaXJzdENoaWxkLmluZGV4LCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgfVxuICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgZmliZXIgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBmaWJlci5pbmRleCA9IDA7XG4gICAgZmliZXIuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGZpYmVyO1xuICB9XG4gIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cylcbiAgICAgIHJldHVybiAobmV3RmliZXIuZmxhZ3MgfD0gMTA0ODU3NiksIGxhc3RQbGFjZWRJbmRleDtcbiAgICBuZXdJbmRleCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcbiAgICBpZiAobnVsbCAhPT0gbmV3SW5kZXgpXG4gICAgICByZXR1cm4gKFxuICAgICAgICAobmV3SW5kZXggPSBuZXdJbmRleC5pbmRleCksXG4gICAgICAgIG5ld0luZGV4IDwgbGFzdFBsYWNlZEluZGV4XG4gICAgICAgICAgPyAoKG5ld0ZpYmVyLmZsYWdzIHw9IDMzNTU0NDM0KSwgbGFzdFBsYWNlZEluZGV4KVxuICAgICAgICAgIDogbmV3SW5kZXhcbiAgICAgICk7XG4gICAgbmV3RmliZXIuZmxhZ3MgfD0gMzM1NTQ0MzQ7XG4gICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgfVxuICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAobmV3RmliZXIuZmxhZ3MgfD0gMzM1NTQ0MzQpO1xuICAgIHJldHVybiBuZXdGaWJlcjtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgNiAhPT0gY3VycmVudC50YWcpXG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKSksXG4gICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgY3VycmVudFxuICAgICAgKTtcbiAgICBjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIgZWxlbWVudFR5cGUgPSBlbGVtZW50LnR5cGU7XG4gICAgaWYgKGVsZW1lbnRUeXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKVxuICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgZWxlbWVudC5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgbGFuZXMsXG4gICAgICAgIGVsZW1lbnQua2V5XG4gICAgICApO1xuICAgIGlmIChcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50VHlwZSB8fFxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgbnVsbCAhPT0gZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICBlbGVtZW50VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgcmVzb2x2ZUxhenkoZWxlbWVudFR5cGUpID09PSBjdXJyZW50LnR5cGUpKVxuICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpKSxcbiAgICAgICAgKGxhbmVzLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkpLFxuICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICBsYW5lc1xuICAgICAgKTtcbiAgICBsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgIGVsZW1lbnQudHlwZSxcbiAgICAgIGVsZW1lbnQua2V5LFxuICAgICAgZWxlbWVudC5wcm9wcyxcbiAgICAgIG51bGwsXG4gICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgbGFuZXNcbiAgICApO1xuICAgIGxhbmVzLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgbGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGxhbmVzO1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgIGlmIChcbiAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgIDQgIT09IGN1cnJlbnQudGFnIHx8XG4gICAgICBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fFxuICAgICAgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpKSxcbiAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICBjdXJyZW50XG4gICAgICApO1xuICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgNyAhPT0gY3VycmVudC50YWcpXG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgIGZyYWdtZW50LFxuICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgbGFuZXMsXG4gICAgICAgICAga2V5XG4gICAgICAgICkpLFxuICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgIGN1cnJlbnRcbiAgICAgICk7XG4gICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAoXG4gICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICBcIlwiICsgbmV3Q2hpbGQsXG4gICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApKSxcbiAgICAgICAgKG5ld0NoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgbmV3Q2hpbGRcbiAgICAgICk7XG4gICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgICAgICAgICBuZXdDaGlsZC50eXBlLFxuICAgICAgICAgICAgICBuZXdDaGlsZC5rZXksXG4gICAgICAgICAgICAgIG5ld0NoaWxkLnByb3BzLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAobGFuZXMucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCkpLFxuICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKFxuICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKG5ld0NoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgdmFyIGluaXQgPSBuZXdDaGlsZC5faW5pdDtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIGluaXQobmV3Q2hpbGQuX3BheWxvYWQpLCBsYW5lcyk7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChuZXdDaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKG5ld0NoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICApO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLCBsYW5lcyk7XG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gbnVsbCAhPT0gb2xkRmliZXIgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuICAgIGlmIChcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICApXG4gICAgICByZXR1cm4gbnVsbCAhPT0ga2V5XG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgXCJcIiArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQua2V5ID09PSBrZXlcbiAgICAgICAgICAgID8gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQua2V5ID09PSBrZXlcbiAgICAgICAgICAgID8gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGtleSA9IG5ld0NoaWxkLl9pbml0KSxcbiAgICAgICAgICAgIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBrZXkobmV3Q2hpbGQuX3BheWxvYWQpLCBsYW5lcylcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSlcbiAgICAgICAgcmV0dXJuIG51bGwgIT09IGtleVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgIHJldHVybiB1cGRhdGVTbG90KFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpXG4gICAgICAgIHJldHVybiB1cGRhdGVTbG90KFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoXG4gICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICByZXR1cm5GaWJlcixcbiAgICBuZXdJZHgsXG4gICAgbmV3Q2hpbGQsXG4gICAgbGFuZXNcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChleGlzdGluZ0NoaWxkcmVuID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsKSxcbiAgICAgICAgdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIFwiXCIgKyBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICApO1xuICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID1cbiAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5nZXQoXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICkgfHwgbnVsbCksXG4gICAgICAgICAgICB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBleGlzdGluZ0NoaWxkcmVuLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICBudWxsID09PSBuZXdDaGlsZC5rZXkgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgKSB8fCBudWxsKSxcbiAgICAgICAgICAgIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgZXhpc3RpbmdDaGlsZHJlbiwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICBpbml0KG5ld0NoaWxkLl9wYXlsb2FkKSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGwpLFxuICAgICAgICAgIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBleGlzdGluZ0NoaWxkcmVuLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICByZXR1cm5GaWJlcixcbiAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICBuZXdDaGlsZHJlbixcbiAgICBsYW5lc1xuICApIHtcbiAgICBmb3IgKFxuICAgICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsLFxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbnVsbCxcbiAgICAgICAgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgbmV3SWR4ID0gKGN1cnJlbnRGaXJzdENoaWxkID0gMCksXG4gICAgICAgIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgICBudWxsICE9PSBvbGRGaWJlciAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgICBuZXdJZHgrK1xuICAgICkge1xuICAgICAgb2xkRmliZXIuaW5kZXggPiBuZXdJZHhcbiAgICAgICAgPyAoKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyKSwgKG9sZEZpYmVyID0gbnVsbCkpXG4gICAgICAgIDogKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmcpO1xuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIG9sZEZpYmVyLFxuICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICBsYW5lc1xuICAgICAgKTtcbiAgICAgIGlmIChudWxsID09PSBuZXdGaWJlcikge1xuICAgICAgICBudWxsID09PSBvbGRGaWJlciAmJiAob2xkRmliZXIgPSBuZXh0T2xkRmliZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgb2xkRmliZXIgJiZcbiAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpO1xuICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXIpXG4gICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyKTtcbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cbiAgICBpZiAobmV3SWR4ID09PSBuZXdDaGlsZHJlbi5sZW5ndGgpXG4gICAgICByZXR1cm4gKFxuICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpLCByZXN1bHRpbmdGaXJzdENoaWxkXG4gICAgICApO1xuICAgIGlmIChudWxsID09PSBvbGRGaWJlcikge1xuICAgICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspXG4gICAgICAgIChvbGRGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcykpLFxuICAgICAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmXG4gICAgICAgICAgICAoKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gb2xkRmliZXIpXG4gICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG9sZEZpYmVyKSxcbiAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gb2xkRmliZXIpKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cbiAgICBmb3IgKFxuICAgICAgb2xkRmliZXIgPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgbmV3SWR4KytcbiAgICApXG4gICAgICAobmV4dE9sZEZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgb2xkRmliZXIsXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBuZXdJZHgsXG4gICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgIGxhbmVzXG4gICAgICApKSxcbiAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyICYmXG4gICAgICAgICAgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIG9sZEZpYmVyLmRlbGV0ZShcbiAgICAgICAgICAgICAgbnVsbCA9PT0gbmV4dE9sZEZpYmVyLmtleSA/IG5ld0lkeCA6IG5leHRPbGRGaWJlci5rZXlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgKSksXG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5leHRPbGRGaWJlcilcbiAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5leHRPbGRGaWJlciksXG4gICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBuZXh0T2xkRmliZXIpKTtcbiAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICBvbGRGaWJlci5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoXG4gICAgcmV0dXJuRmliZXIsXG4gICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgbmV3Q2hpbGRyZW5JdGVyYWJsZSxcbiAgICBsYW5lc1xuICApIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGl0ZXJhdG9yRm4pXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIG5ld0NoaWxkcmVuSXRlcmFibGUgPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG4gICAgaWYgKG51bGwgPT0gbmV3Q2hpbGRyZW5JdGVyYWJsZSlcbiAgICAgIHRocm93IEVycm9yKFwiQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLlwiKTtcbiAgICBmb3IgKFxuICAgICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSAoaXRlcmF0b3JGbiA9IG51bGwpLFxuICAgICAgICBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbCxcbiAgICAgICAgc3RlcCA9IG5ld0NoaWxkcmVuSXRlcmFibGUubmV4dCgpO1xuICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiYgIXN0ZXAuZG9uZTtcbiAgICAgIG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW5JdGVyYWJsZS5uZXh0KClcbiAgICApIHtcbiAgICAgIG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4XG4gICAgICAgID8gKChuZXh0T2xkRmliZXIgPSBvbGRGaWJlciksIChvbGRGaWJlciA9IG51bGwpKVxuICAgICAgICA6IChuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nKTtcbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG4gICAgICBpZiAobnVsbCA9PT0gbmV3RmliZXIpIHtcbiAgICAgICAgbnVsbCA9PT0gb2xkRmliZXIgJiYgKG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgIG9sZEZpYmVyICYmXG4gICAgICAgIG51bGwgPT09IG5ld0ZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3SWR4KTtcbiAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgPyAoaXRlcmF0b3JGbiA9IG5ld0ZpYmVyKVxuICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcik7XG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG4gICAgaWYgKHN0ZXAuZG9uZSlcbiAgICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpLCBpdGVyYXRvckZuO1xuICAgIGlmIChudWxsID09PSBvbGRGaWJlcikge1xuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW5JdGVyYWJsZS5uZXh0KCkpXG4gICAgICAgIChzdGVwID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKSksXG4gICAgICAgICAgbnVsbCAhPT0gc3RlcCAmJlxuICAgICAgICAgICAgKChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoc3RlcCwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCkpLFxuICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICA/IChpdGVyYXRvckZuID0gc3RlcClcbiAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gc3RlcCksXG4gICAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IHN0ZXApKTtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgICBmb3IgKFxuICAgICAgb2xkRmliZXIgPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgIXN0ZXAuZG9uZTtcbiAgICAgIG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW5JdGVyYWJsZS5uZXh0KClcbiAgICApXG4gICAgICAoc3RlcCA9IHVwZGF0ZUZyb21NYXAob2xkRmliZXIsIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKSksXG4gICAgICAgIG51bGwgIT09IHN0ZXAgJiZcbiAgICAgICAgICAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gc3RlcC5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIG9sZEZpYmVyLmRlbGV0ZShudWxsID09PSBzdGVwLmtleSA/IG5ld0lkeCA6IHN0ZXAua2V5KSxcbiAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKHN0ZXAsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpKSxcbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICA/IChpdGVyYXRvckZuID0gc3RlcClcbiAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IHN0ZXApLFxuICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gc3RlcCkpO1xuICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgIG9sZEZpYmVyLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gIH1cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgIHJldHVybkZpYmVyLFxuICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgIG5ld0NoaWxkLFxuICAgIGxhbmVzXG4gICkge1xuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgbnVsbCAhPT0gbmV3Q2hpbGQgJiZcbiAgICAgIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiZcbiAgICAgIG51bGwgPT09IG5ld0NoaWxkLmtleSAmJlxuICAgICAgKG5ld0NoaWxkID0gbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgdmFyIGtleSA9IG5ld0NoaWxkLmtleSwgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY2hpbGQ7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXdDaGlsZC50eXBlO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICg3ID09PSBjaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IHVzZUZpYmVyKFxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICBjaGlsZC5lbGVtZW50VHlwZSA9PT0ga2V5IHx8XG4gICAgICAgICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIGtleSAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAga2V5LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUxhenkoa2V5KSA9PT0gY2hpbGQudHlwZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gdXNlRmliZXIoY2hpbGQsIG5ld0NoaWxkLnByb3BzKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnJlZiA9IGNvZXJjZVJlZihcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH0gZWxzZSBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFXG4gICAgICAgICAgICAgID8gKChjdXJyZW50Rmlyc3RDaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkKSlcbiAgICAgICAgICAgICAgOiAoKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLnByb3BzLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5yZWYgPSBjb2VyY2VSZWYoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGxhbmVzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJldHVybkZpYmVyKTtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBmb3IgKGNoaWxkID0gbmV3Q2hpbGQua2V5OyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZC5rZXkgPT09IGNoaWxkKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIDQgPT09IGN1cnJlbnRGaXJzdENoaWxkLnRhZyAmJlxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09XG4gICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmNvbnRhaW5lckluZm8gJiZcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT1cbiAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQuaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZ1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gdXNlRmliZXIoXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5jaGlsZHJlbiB8fCBbXVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwoXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpO1xuICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGNoaWxkID0gbmV3Q2hpbGQuX2luaXQpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgY2hpbGQobmV3Q2hpbGQuX3BheWxvYWQpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpKVxuICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKVxuICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcyksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgICAgPyAoKG5ld0NoaWxkID0gXCJcIiArIG5ld0NoaWxkKSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQgJiYgNiA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnXG4gICAgICAgICAgPyAoZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpLFxuICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkKSksXG4gICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQpKVxuICAgICAgICAgIDogKGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkKSksXG4gICAgICAgIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpKVxuICAgICAgOiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICB9XG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgIHJldHVybkZpYmVyLFxuICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgIG5ld0NoaWxkLFxuICAgIGxhbmVzXG4gICkge1xuICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuICAgIHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgcmV0dXJuRmliZXIsXG4gICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgIG5ld0NoaWxkLFxuICAgICAgbGFuZXNcbiAgICApO1xuICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICB9XG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cbnZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IGNyZWF0ZUNoaWxkUmVjb25jaWxlcighMCksXG4gIG1vdW50Q2hpbGRGaWJlcnMgPSBjcmVhdGVDaGlsZFJlY29uY2lsZXIoITEpLFxuICBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoMCk7XG5mdW5jdGlvbiBwdXNoSGlkZGVuQ29udGV4dChmaWJlciwgY29udGV4dCkge1xuICBmaWJlciA9IGVudGFuZ2xlZFJlbmRlckxhbmVzO1xuICBwdXNoKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgZmliZXIpO1xuICBwdXNoKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGNvbnRleHQpO1xuICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IGZpYmVyIHwgY29udGV4dC5iYXNlTGFuZXM7XG59XG5mdW5jdGlvbiByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKCkge1xuICBwdXNoKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgZW50YW5nbGVkUmVuZGVyTGFuZXMpO1xuICBwdXNoKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudCk7XG59XG5mdW5jdGlvbiBwb3BIaWRkZW5Db250ZXh0KCkge1xuICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvci5jdXJyZW50O1xuICBwb3AoY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvcik7XG4gIHBvcChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IpO1xufVxudmFyIHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICBzaGVsbEJvdW5kYXJ5ID0gbnVsbDtcbmZ1bmN0aW9uIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcihoYW5kbGVyKSB7XG4gIHZhciBjdXJyZW50ID0gaGFuZGxlci5hbHRlcm5hdGU7XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgMSk7XG4gIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGhhbmRsZXIpO1xuICBudWxsID09PSBzaGVsbEJvdW5kYXJ5ICYmXG4gICAgKG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCAhPT0gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50XG4gICAgICA/IChzaGVsbEJvdW5kYXJ5ID0gaGFuZGxlcilcbiAgICAgIDogbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmIChzaGVsbEJvdW5kYXJ5ID0gaGFuZGxlcikpO1xufVxuZnVuY3Rpb24gcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICBpZiAoMjIgPT09IGZpYmVyLnRhZykge1xuICAgIGlmIChcbiAgICAgIChwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlciksXG4gICAgICBudWxsID09PSBzaGVsbEJvdW5kYXJ5KVxuICAgICkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAoc2hlbGxCb3VuZGFyeSA9IGZpYmVyKTtcbiAgICB9XG4gIH0gZWxzZSByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soZmliZXIpO1xufVxuZnVuY3Rpb24gcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKCkge1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xufVxuZnVuY3Rpb24gcG9wU3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gIHBvcChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvcik7XG4gIHNoZWxsQm91bmRhcnkgPT09IGZpYmVyICYmIChzaGVsbEJvdW5kYXJ5ID0gbnVsbCk7XG4gIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yKTtcbn1cbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKDApO1xuZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICBmb3IgKHZhciBub2RlID0gcm93OyBudWxsICE9PSBub2RlOyApIHtcbiAgICBpZiAoMTMgPT09IG5vZGUudGFnKSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gc3RhdGUgJiYgKG51bGwgPT09IHN0YXRlLmRlaHlkcmF0ZWQgfHwgc2hpbSQxKCkgfHwgc2hpbSQxKCkpKVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKDE5ID09PSBub2RlLnRhZyAmJiB2b2lkIDAgIT09IG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcikge1xuICAgICAgaWYgKDAgIT09IChub2RlLmZsYWdzICYgMTI4KSkgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChudWxsICE9PSBub2RlLmNoaWxkKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gcm93KSBicmVhaztcbiAgICBmb3IgKDsgbnVsbCA9PT0gbm9kZS5zaWJsaW5nOyApIHtcbiAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gcm93KSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICByZW5kZXJMYW5lcyA9IDAsXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsLFxuICBjdXJyZW50SG9vayA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGwsXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMSxcbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITEsXG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gITEsXG4gIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMCxcbiAgdGhlbmFibGVTdGF0ZSA9IG51bGwsXG4gIGdsb2JhbENsaWVudElkQ291bnRlciA9IDA7XG5mdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gIHRocm93IEVycm9yKFxuICAgIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgKTtcbn1cbmZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAgaWYgKG51bGwgPT09IHByZXZEZXBzKSByZXR1cm4gITE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKylcbiAgICBpZiAoIW9iamVjdElzKG5leHREZXBzW2ldLCBwcmV2RGVwc1tpXSkpIHJldHVybiAhMTtcbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgQ29tcG9uZW50LFxuICBwcm9wcyxcbiAgc2Vjb25kQXJnLFxuICBuZXh0UmVuZGVyTGFuZXNcbikge1xuICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDA7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID1cbiAgICBudWxsID09PSBjdXJyZW50IHx8IG51bGwgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPbk1vdW50XG4gICAgICA6IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlO1xuICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9ICExO1xuICBjdXJyZW50ID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9ICExO1xuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgJiZcbiAgICAoY3VycmVudCA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBwcm9wcyxcbiAgICAgIHNlY29uZEFyZ1xuICAgICkpO1xuICBmaW5pc2hSZW5kZXJpbmdIb29rcygpO1xuICByZXR1cm4gY3VycmVudDtcbn1cbmZ1bmN0aW9uIGZpbmlzaFJlbmRlcmluZ0hvb2tzKCkge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID0gbnVsbCAhPT0gY3VycmVudEhvb2sgJiYgbnVsbCAhPT0gY3VycmVudEhvb2submV4dDtcbiAgcmVuZGVyTGFuZXMgPSAwO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gIGlmIChkaWRSZW5kZXJUb29GZXdIb29rcylcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgZWFybHkgcmV0dXJuIHN0YXRlbWVudC5cIlxuICAgICk7XG59XG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3NBZ2Fpbih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcbiAgZG8ge1xuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyAmJiAodGhlbmFibGVTdGF0ZSA9IG51bGwpO1xuICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSAhMTtcbiAgICBpZiAoMjUgPD0gbnVtYmVyT2ZSZVJlbmRlcnMpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC5cIlxuICAgICAgKTtcbiAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVyO1xuICAgIHZhciBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgfSB3aGlsZSAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0yMDUzO1xuICBjdXJyZW50LmxhbmVzICY9IH5sYW5lcztcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NPblVud2luZCh3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIGZvciAoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcztcblxuICAgICkge1xuICAgICAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MucXVldWU7XG4gICAgICBudWxsICE9PSBxdWV1ZSAmJiAocXVldWUucGVuZGluZyA9IG51bGwpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5uZXh0O1xuICAgIH1cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gIH1cbiAgcmVuZGVyTGFuZXMgPSAwO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSAhMTtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbn1cbmZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICB2YXIgaG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICA/IChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rKVxuICAgIDogKHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vayk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5mdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIGlmIChudWxsID09PSBjdXJyZW50SG9vaykge1xuICAgIHZhciBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcbiAgICBuZXh0Q3VycmVudEhvb2sgPVxuICAgICAgbnVsbCAhPT0gbmV4dEN1cnJlbnRIb29rID8gbmV4dEN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUgOiBudWxsO1xuICB9IGVsc2UgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgdmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgPyBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGVcbiAgICAgIDogd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gIGlmIChudWxsICE9PSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rKVxuICAgICh3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rKSxcbiAgICAgIChjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vayk7XG4gIGVsc2Uge1xuICAgIGlmIChudWxsID09PSBuZXh0Q3VycmVudEhvb2spIHtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJVcGRhdGUgaG9vayBjYWxsZWQgb24gaW5pdGlhbCByZW5kZXIuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgdGhyb3cgRXJyb3IoXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIpO1xuICAgIH1cbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICBuZXh0Q3VycmVudEhvb2sgPSB7XG4gICAgICBtZW1vaXplZFN0YXRlOiBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgIHF1ZXVlOiBjdXJyZW50SG9vay5xdWV1ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgPyAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID1cbiAgICAgICAgICBuZXh0Q3VycmVudEhvb2spXG4gICAgICA6ICh3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5leHRDdXJyZW50SG9vayk7XG4gIH1cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cbnZhciBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlO1xuY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHsgbGFzdEVmZmVjdDogbnVsbCwgZXZlbnRzOiBudWxsLCBzdG9yZXM6IG51bGwgfTtcbn07XG5mdW5jdGlvbiB1c2VUaGVuYWJsZSh0aGVuYWJsZSkge1xuICB2YXIgaW5kZXggPSB0aGVuYWJsZUluZGV4Q291bnRlcjtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgKz0gMTtcbiAgbnVsbCA9PT0gdGhlbmFibGVTdGF0ZSAmJiAodGhlbmFibGVTdGF0ZSA9IFtdKTtcbiAgdGhlbmFibGUgPSB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpO1xuICBudWxsID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZSAmJlxuICAgIChudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgID8gbnVsbCA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlXG4gICAgICA6IG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9vay5uZXh0KSAmJlxuICAgIChSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnQpO1xuICByZXR1cm4gdGhlbmFibGU7XG59XG5mdW5jdGlvbiB1c2UodXNhYmxlKSB7XG4gIGlmIChudWxsICE9PSB1c2FibGUgJiYgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHVzYWJsZSkge1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1c2FibGUudGhlbikgcmV0dXJuIHVzZVRoZW5hYmxlKHVzYWJsZSk7XG4gICAgaWYgKHVzYWJsZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKSByZXR1cm4gcmVhZENvbnRleHQodXNhYmxlKTtcbiAgfVxuICB0aHJvdyBFcnJvcihcIkFuIHVuc3VwcG9ydGVkIHR5cGUgd2FzIHBhc3NlZCB0byB1c2UoKTogXCIgKyBTdHJpbmcodXNhYmxlKSk7XG59XG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xufVxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgY3VycmVudCA9IGN1cnJlbnRIb29rLFxuICAgIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgaWYgKG51bGwgPT09IHF1ZXVlKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICApO1xuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGJhc2VRdWV1ZSA9IGhvb2suYmFzZVF1ZXVlLFxuICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gIGlmIChudWxsICE9PSBwZW5kaW5nUXVldWUpIHtcbiAgICBpZiAobnVsbCAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgfVxuICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICB9XG4gIHBlbmRpbmdRdWV1ZSA9IGhvb2suYmFzZVN0YXRlO1xuICBpZiAobnVsbCA9PT0gYmFzZVF1ZXVlKSBob29rLm1lbW9pemVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gIGVsc2Uge1xuICAgIGN1cnJlbnQgPSBiYXNlUXVldWUubmV4dDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSAoYmFzZUZpcnN0ID0gbnVsbCksXG4gICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbCxcbiAgICAgIHVwZGF0ZSA9IGN1cnJlbnQ7XG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZSAmIC01MzY4NzA5MTM7XG4gICAgICBpZiAoXG4gICAgICAgIHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lXG4gICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgIDogKHJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgIClcbiAgICAgICAgbnVsbCAhPT0gbmV3QmFzZVF1ZXVlTGFzdCAmJlxuICAgICAgICAgIChuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFuZTogMCxcbiAgICAgICAgICAgICAgcmV2ZXJ0TGFuZTogMCxcbiAgICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICh1cGRhdGVMYW5lID0gdXBkYXRlLmFjdGlvbiksXG4gICAgICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgJiZcbiAgICAgICAgICAgIHJlZHVjZXIocGVuZGluZ1F1ZXVlLCB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAocGVuZGluZ1F1ZXVlID0gdXBkYXRlLmhhc0VhZ2VyU3RhdGVcbiAgICAgICAgICAgID8gdXBkYXRlLmVhZ2VyU3RhdGVcbiAgICAgICAgICAgIDogcmVkdWNlcihwZW5kaW5nUXVldWUsIHVwZGF0ZUxhbmUpKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICByZXZlcnRMYW5lOiB1cGRhdGUucmV2ZXJ0TGFuZSxcbiAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgaGFzRWFnZXJTdGF0ZTogdXBkYXRlLmhhc0VhZ2VyU3RhdGUsXG4gICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgPyAoKG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lKSxcbiAgICAgICAgICAgIChiYXNlRmlyc3QgPSBwZW5kaW5nUXVldWUpKVxuICAgICAgICAgIDogKG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZSk7XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgfD0gdXBkYXRlTGFuZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHVwZGF0ZUxhbmU7XG4gICAgICB9XG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlIChudWxsICE9PSB1cGRhdGUgJiYgdXBkYXRlICE9PSBjdXJyZW50KTtcbiAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICA/IChiYXNlRmlyc3QgPSBwZW5kaW5nUXVldWUpXG4gICAgICA6IChuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBuZXdCYXNlUXVldWVGaXJzdCk7XG4gICAgb2JqZWN0SXMocGVuZGluZ1F1ZXVlLCBob29rLm1lbW9pemVkU3RhdGUpIHx8IChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBob29rLmJhc2VTdGF0ZSA9IGJhc2VGaXJzdDtcbiAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gIH1cbiAgbnVsbCA9PT0gYmFzZVF1ZXVlICYmIChxdWV1ZS5sYW5lcyA9IDApO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgcXVldWUuZGlzcGF0Y2hdO1xufVxuZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICBxdWV1ZSA9IGhvb2sucXVldWU7XG4gIGlmIChudWxsID09PSBxdWV1ZSlcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoLFxuICAgIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmcsXG4gICAgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIGlmIChudWxsICE9PSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0KTtcbiAgICBkbyAobmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCB1cGRhdGUuYWN0aW9uKSksICh1cGRhdGUgPSB1cGRhdGUubmV4dCk7XG4gICAgd2hpbGUgKHVwZGF0ZSAhPT0gbGFzdFJlbmRlclBoYXNlVXBkYXRlKTtcbiAgICBvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSB8fCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKTtcbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBudWxsID09PSBob29rLmJhc2VRdWV1ZSAmJiAoaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZSk7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG59XG5mdW5jdGlvbiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KSB7XG4gIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcbiAgdmFyIHNuYXBzaG90Q2hhbmdlZCA9ICFvYmplY3RJcyhcbiAgICAoY3VycmVudEhvb2sgfHwgaG9vaykubWVtb2l6ZWRTdGF0ZSxcbiAgICBuZXh0U25hcHNob3RcbiAgKTtcbiAgc25hcHNob3RDaGFuZ2VkICYmXG4gICAgKChob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3QpLCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSk7XG4gIGhvb2sgPSBob29rLnF1ZXVlO1xuICB1cGRhdGVFZmZlY3Qoc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBob29rLCBzdWJzY3JpYmUpLCBbXG4gICAgc3Vic2NyaWJlXG4gIF0pO1xuICBpZiAoXG4gICAgaG9vay5nZXRTbmFwc2hvdCAhPT0gZ2V0U25hcHNob3QgfHxcbiAgICBzbmFwc2hvdENoYW5nZWQgfHxcbiAgICAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3NIb29rICYmIHdvcmtJblByb2dyZXNzSG9vay5tZW1vaXplZFN0YXRlLnRhZyAmIDEpXG4gICkge1xuICAgIGZpYmVyLmZsYWdzIHw9IDIwNDg7XG4gICAgcHVzaEVmZmVjdChcbiAgICAgIDksXG4gICAgICB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQobnVsbCwgZmliZXIsIGhvb2ssIG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3QpLFxuICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgIG51bGxcbiAgICApO1xuICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgMCAhPT0gKHJlbmRlckxhbmVzICYgNjApIHx8XG4gICAgICBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgbmV4dFNuYXBzaG90KTtcbiAgfVxuICByZXR1cm4gbmV4dFNuYXBzaG90O1xufVxuZnVuY3Rpb24gcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIHJlbmRlcmVkU25hcHNob3QpIHtcbiAgZmliZXIuZmxhZ3MgfD0gMTYzODQ7XG4gIGZpYmVyID0geyBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QsIHZhbHVlOiByZW5kZXJlZFNuYXBzaG90IH07XG4gIGdldFNuYXBzaG90ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcbiAgbnVsbCA9PT0gZ2V0U25hcHNob3RcbiAgICA/ICgoZ2V0U25hcHNob3QgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBnZXRTbmFwc2hvdCksXG4gICAgICAoZ2V0U25hcHNob3Quc3RvcmVzID0gW2ZpYmVyXSkpXG4gICAgOiAoKHJlbmRlcmVkU25hcHNob3QgPSBnZXRTbmFwc2hvdC5zdG9yZXMpLFxuICAgICAgbnVsbCA9PT0gcmVuZGVyZWRTbmFwc2hvdFxuICAgICAgICA/IChnZXRTbmFwc2hvdC5zdG9yZXMgPSBbZmliZXJdKVxuICAgICAgICA6IHJlbmRlcmVkU25hcHNob3QucHVzaChmaWJlcikpO1xufVxuZnVuY3Rpb24gdXBkYXRlU3RvcmVJbnN0YW5jZShmaWJlciwgaW5zdCwgbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdCkge1xuICBpbnN0LnZhbHVlID0gbmV4dFNuYXBzaG90O1xuICBpbnN0LmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7XG4gIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkgJiYgZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHN1YnNjcmliZVRvU3RvcmUoZmliZXIsIGluc3QsIHN1YnNjcmliZSkge1xuICByZXR1cm4gc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG4gIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gIHZhciBsYXRlc3RHZXRTbmFwc2hvdCA9IGluc3QuZ2V0U25hcHNob3Q7XG4gIGluc3QgPSBpbnN0LnZhbHVlO1xuICB0cnkge1xuICAgIHZhciBuZXh0VmFsdWUgPSBsYXRlc3RHZXRTbmFwc2hvdCgpO1xuICAgIHJldHVybiAhb2JqZWN0SXMoaW5zdCwgbmV4dFZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gITA7XG4gIH1cbn1cbmZ1bmN0aW9uIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcikge1xuICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKTtcbn1cbmZ1bmN0aW9uIG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbml0aWFsU3RhdGUpIHtcbiAgICB2YXIgaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIgPSBpbml0aWFsU3RhdGU7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViAmJiBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuICB9XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgbGFuZXM6IDAsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICByZXR1cm4gaG9vaztcbn1cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGluc3QsIGRlcHMpIHtcbiAgdGFnID0geyB0YWc6IHRhZywgY3JlYXRlOiBjcmVhdGUsIGluc3Q6IGluc3QsIGRlcHM6IGRlcHMsIG5leHQ6IG51bGwgfTtcbiAgY3JlYXRlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcbiAgbnVsbCA9PT0gY3JlYXRlXG4gICAgPyAoKGNyZWF0ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSksXG4gICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNyZWF0ZSksXG4gICAgICAoY3JlYXRlLmxhc3RFZmZlY3QgPSB0YWcubmV4dCA9IHRhZykpXG4gICAgOiAoKGluc3QgPSBjcmVhdGUubGFzdEVmZmVjdCksXG4gICAgICBudWxsID09PSBpbnN0XG4gICAgICAgID8gKGNyZWF0ZS5sYXN0RWZmZWN0ID0gdGFnLm5leHQgPSB0YWcpXG4gICAgICAgIDogKChkZXBzID0gaW5zdC5uZXh0KSxcbiAgICAgICAgICAoaW5zdC5uZXh0ID0gdGFnKSxcbiAgICAgICAgICAodGFnLm5leHQgPSBkZXBzKSxcbiAgICAgICAgICAoY3JlYXRlLmxhc3RFZmZlY3QgPSB0YWcpKSk7XG4gIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiB1cGRhdGVSZWYoKSB7XG4gIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xufVxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KFxuICAgIDEgfCBob29rRmxhZ3MsXG4gICAgY3JlYXRlLFxuICAgIHsgZGVzdHJveTogdm9pZCAwIH0sXG4gICAgdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHNcbiAgKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICB2YXIgaW5zdCA9IGhvb2subWVtb2l6ZWRTdGF0ZS5pbnN0O1xuICBudWxsICE9PSBjdXJyZW50SG9vayAmJlxuICBudWxsICE9PSBkZXBzICYmXG4gIGFyZUhvb2tJbnB1dHNFcXVhbChkZXBzLCBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLmRlcHMpXG4gICAgPyAoaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgaW5zdCwgZGVwcykpXG4gICAgOiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncyksXG4gICAgICAoaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdCgxIHwgaG9va0ZsYWdzLCBjcmVhdGUsIGluc3QsIGRlcHMpKSk7XG59XG5mdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgbW91bnRFZmZlY3RJbXBsKDgzOTA2NTYsIDgsIGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgOCwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgMiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgNCwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QoY3JlYXRlLCByZWYpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZilcbiAgICByZXR1cm4gKFxuICAgICAgKGNyZWF0ZSA9IGNyZWF0ZSgpKSxcbiAgICAgIHJlZihjcmVhdGUpLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZWYobnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgaWYgKG51bGwgIT09IHJlZiAmJiB2b2lkIDAgIT09IHJlZilcbiAgICByZXR1cm4gKFxuICAgICAgKGNyZWF0ZSA9IGNyZWF0ZSgpKSxcbiAgICAgIChyZWYuY3VycmVudCA9IGNyZWF0ZSksXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICApO1xufVxuZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICB1cGRhdGVFZmZlY3RJbXBsKDQsIDQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGRlcHMpO1xufVxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKCkge31cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBkZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuZnVuY3Rpb24gdXBkYXRlTWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgcHJldlN0YXRlID0gbmV4dENyZWF0ZSgpO1xuICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViAmJiBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtwcmV2U3RhdGUsIGRlcHNdO1xuICByZXR1cm4gcHJldlN0YXRlO1xufVxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gIHJldHVybiB2b2lkIDAgIT09IGluaXRpYWxWYWx1ZSAmJiAwID09PSAocmVuZGVyTGFuZXMgJiAxMDczNzQxODI0KVxuICAgID8gKChob29rLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsVmFsdWUpLFxuICAgICAgKGhvb2sgPSByZXF1ZXN0RGVmZXJyZWRMYW5lKCkpLFxuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgfD0gaG9vayksXG4gICAgICAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGhvb2spLFxuICAgICAgaW5pdGlhbFZhbHVlKVxuICAgIDogKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHByZXZWYWx1ZSwgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICBpZiAob2JqZWN0SXModmFsdWUsIHByZXZWYWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgaWYgKG51bGwgIT09IGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudClcbiAgICByZXR1cm4gKFxuICAgICAgKGhvb2sgPSBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpKSxcbiAgICAgIG9iamVjdElzKGhvb2ssIHByZXZWYWx1ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksXG4gICAgICBob29rXG4gICAgKTtcbiAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIDQyKSlcbiAgICByZXR1cm4gKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksIChob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZSk7XG4gIGhvb2sgPSByZXF1ZXN0RGVmZXJyZWRMYW5lKCk7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgfD0gaG9vaztcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGhvb2s7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oZmliZXIsIHF1ZXVlLCBwZW5kaW5nU3RhdGUsIGZpbmlzaGVkU3RhdGUsIGNhbGxiYWNrKSB7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gY3VycmVudFVwZGF0ZVByaW9yaXR5O1xuICBjdXJyZW50VXBkYXRlUHJpb3JpdHkgPVxuICAgIDAgIT09IHByZXZpb3VzUHJpb3JpdHkgJiYgOCA+IHByZXZpb3VzUHJpb3JpdHkgPyBwcmV2aW91c1ByaW9yaXR5IDogODtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uLFxuICAgIGN1cnJlbnRUcmFuc2l0aW9uID0geyBfY2FsbGJhY2tzOiBuZXcgU2V0KCkgfTtcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uID0gbnVsbDtcbiAgZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIHBlbmRpbmdTdGF0ZSk7XG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIudHJhbnNpdGlvbiA9IGN1cnJlbnRUcmFuc2l0aW9uO1xuICB0cnkge1xuICAgIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBmaW5pc2hlZFN0YXRlKSwgY2FsbGJhY2soKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICAoY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAoUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb24pO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVJZCgpIHtcbiAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG59XG5mdW5jdGlvbiBkaXNwYXRjaFJlZHVjZXJBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIGFjdGlvbiA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIHJldmVydExhbmU6IDAsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpXG4gICAgPyBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIGFjdGlvbilcbiAgICA6IChlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCBhY3Rpb24sIGxhbmUpLFxuICAgICAgKGFjdGlvbiA9IGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpKSxcbiAgICAgIG51bGwgIT09IGFjdGlvbiAmJlxuICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGFjdGlvbiwgZmliZXIsIGxhbmUpLFxuICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUoYWN0aW9uLCBxdWV1ZSwgbGFuZSkpKTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlciksXG4gICAgdXBkYXRlID0ge1xuICAgICAgbGFuZTogbGFuZSxcbiAgICAgIHJldmVydExhbmU6IDAsXG4gICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgIGhhc0VhZ2VyU3RhdGU6ICExLFxuICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKTtcbiAgZWxzZSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICBpZiAoXG4gICAgICAwID09PSBmaWJlci5sYW5lcyAmJlxuICAgICAgKG51bGwgPT09IGFsdGVybmF0ZSB8fCAwID09PSBhbHRlcm5hdGUubGFuZXMpICYmXG4gICAgICAoKGFsdGVybmF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIpLCBudWxsICE9PSBhbHRlcm5hdGUpXG4gICAgKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlLFxuICAgICAgICAgIGVhZ2VyU3RhdGUgPSBhbHRlcm5hdGUoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgICAgICB1cGRhdGUuaGFzRWFnZXJTdGF0ZSA9ICEwO1xuICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG4gICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCAwKTtcbiAgICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICB9XG4gICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcbiAgICBhY3Rpb24gPSBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICBudWxsICE9PSBhY3Rpb24gJiZcbiAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIoYWN0aW9uLCBmaWJlciwgbGFuZSksXG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUoYWN0aW9uLCBxdWV1ZSwgbGFuZSkpO1xuICB9XG59XG5mdW5jdGlvbiBpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIHJldHVybiAoXG4gICAgZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgfHxcbiAgICAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSlcbiAgKTtcbn1cbmZ1bmN0aW9uIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKSB7XG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPVxuICAgICEwO1xuICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gIG51bGwgPT09IHBlbmRpbmdcbiAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUocm9vdCwgcXVldWUsIGxhbmUpIHtcbiAgaWYgKDAgIT09IChsYW5lICYgNDE5NDE3NikpIHtcbiAgICB2YXIgcXVldWVMYW5lcyA9IHF1ZXVlLmxhbmVzO1xuICAgIHF1ZXVlTGFuZXMgJj0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgbGFuZSB8PSBxdWV1ZUxhbmVzO1xuICAgIHF1ZXVlLmxhbmVzID0gbGFuZTtcbiAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBsYW5lKTtcbiAgfVxufVxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gICAgdXNlOiB1c2UsXG4gICAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZUluc2VydGlvbkVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZUlkOiB0aHJvd0ludmFsaWRIb29rRXJyb3JcbiAgfSxcbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudCA9IHtcbiAgICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gICAgdXNlOiB1c2UsXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlID0gW1xuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHNcbiAgICAgIF07XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICB1c2VFZmZlY3Q6IG1vdW50RWZmZWN0LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgZGVwcyA9IG51bGwgIT09IGRlcHMgJiYgdm9pZCAwICE9PSBkZXBzID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgICAgIG1vdW50RWZmZWN0SW1wbChcbiAgICAgICAgNDE5NDMwOCxcbiAgICAgICAgNCxcbiAgICAgICAgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSxcbiAgICAgICAgZGVwc1xuICAgICAgKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbCg0MTk0MzA4LCA0LCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBtb3VudEVmZmVjdEltcGwoNCwgMiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgJiYgbmV4dENyZWF0ZSgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgZGVwc107XG4gICAgICByZXR1cm4gbmV4dFZhbHVlO1xuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGlmICh2b2lkIDAgIT09IGluaXQpIHtcbiAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gICAgICAgIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWICYmIGluaXQoaW5pdGlhbEFyZyk7XG4gICAgICB9IGVsc2UgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgICAgcmVkdWNlciA9IHtcbiAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgICAgaG9vay5xdWV1ZSA9IHJlZHVjZXI7XG4gICAgICByZWR1Y2VyID0gcmVkdWNlci5kaXNwYXRjaCA9IGRpc3BhdGNoUmVkdWNlckFjdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICByZWR1Y2VyXG4gICAgICApO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIHJlZHVjZXJdO1xuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpbml0aWFsVmFsdWUgPSB7IGN1cnJlbnQ6IGluaXRpYWxWYWx1ZSB9O1xuICAgICAgcmV0dXJuIChob29rLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSk7XG4gICAgICB2YXIgcXVldWUgPSBpbml0aWFsU3RhdGUucXVldWUsXG4gICAgICAgIGRpc3BhdGNoID0gZGlzcGF0Y2hTZXRTdGF0ZS5iaW5kKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgICBxdWV1ZVxuICAgICAgICApO1xuICAgICAgcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICAgIHJldHVybiBbaW5pdGlhbFN0YXRlLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IG1vdW50RGVidWdWYWx1ZSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGVIb29rID0gbW91bnRTdGF0ZUltcGwoITEpO1xuICAgICAgc3RhdGVIb29rID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgICAgIHN0YXRlSG9vay5xdWV1ZSxcbiAgICAgICAgITAsXG4gICAgICAgICExXG4gICAgICApO1xuICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rO1xuICAgICAgcmV0dXJuIFshMSwgc3RhdGVIb29rXTtcbiAgICB9LFxuICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCkge1xuICAgICAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcbiAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICAwICE9PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA2MCkgfHxcbiAgICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIG5leHRTbmFwc2hvdCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3Q7XG4gICAgICB2YXIgaW5zdCA9IHsgdmFsdWU6IG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH07XG4gICAgICBob29rLnF1ZXVlID0gaW5zdDtcbiAgICAgIG1vdW50RWZmZWN0KHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSwgW1xuICAgICAgICBzdWJzY3JpYmVcbiAgICAgIF0pO1xuICAgICAgZmliZXIuZmxhZ3MgfD0gMjA0ODtcbiAgICAgIHB1c2hFZmZlY3QoXG4gICAgICAgIDksXG4gICAgICAgIHVwZGF0ZVN0b3JlSW5zdGFuY2UuYmluZChudWxsLCBmaWJlciwgaW5zdCwgbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdCksXG4gICAgICAgIHsgZGVzdHJveTogdm9pZCAwIH0sXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbmV4dFNuYXBzaG90O1xuICAgIH0sXG4gICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IHdvcmtJblByb2dyZXNzUm9vdC5pZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBnbG9iYWxDbGllbnRJZCA9IGdsb2JhbENsaWVudElkQ291bnRlcisrO1xuICAgICAgaWRlbnRpZmllclByZWZpeCA9XG4gICAgICAgIFwiOlwiICsgaWRlbnRpZmllclByZWZpeCArIFwiclwiICsgZ2xvYmFsQ2xpZW50SWQudG9TdHJpbmcoMzIpICsgXCI6XCI7XG4gICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGlkZW50aWZpZXJQcmVmaXgpO1xuICAgIH1cbiAgfSxcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGUgPSB7XG4gICAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICAgIHVzZTogdXNlLFxuICAgIHVzZUNhbGxiYWNrOiB1cGRhdGVDYWxsYmFjayxcbiAgICB1c2VDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICB1c2VFZmZlY3Q6IHVwZGF0ZUVmZmVjdCxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlLFxuICAgIHVzZUluc2VydGlvbkVmZmVjdDogdXBkYXRlSW5zZXJ0aW9uRWZmZWN0LFxuICAgIHVzZUxheW91dEVmZmVjdDogdXBkYXRlTGF5b3V0RWZmZWN0LFxuICAgIHVzZU1lbW86IHVwZGF0ZU1lbW8sXG4gICAgdXNlUmVkdWNlcjogdXBkYXRlUmVkdWNlcixcbiAgICB1c2VSZWY6IHVwZGF0ZVJlZixcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogbW91bnREZWJ1Z1ZhbHVlLFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKFxuICAgICAgICBob29rLFxuICAgICAgICBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5pdGlhbFZhbHVlXG4gICAgICApO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJvb2xlYW5PclRoZW5hYmxlID0gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF0sXG4gICAgICAgIHN0YXJ0ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA/IGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgOiB1c2VUaGVuYWJsZShib29sZWFuT3JUaGVuYWJsZSksXG4gICAgICAgIHN0YXJ0XG4gICAgICBdO1xuICAgIH0sXG4gICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlLFxuICAgIHVzZUlkOiB1cGRhdGVJZFxuICB9LFxuICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVyID0ge1xuICAgIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICB1c2U6IHVzZSxcbiAgICB1c2VDYWxsYmFjazogdXBkYXRlQ2FsbGJhY2ssXG4gICAgdXNlQ29udGV4dDogcmVhZENvbnRleHQsXG4gICAgdXNlRWZmZWN0OiB1cGRhdGVFZmZlY3QsXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IHVwZGF0ZUluc2VydGlvbkVmZmVjdCxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IHVwZGF0ZUxheW91dEVmZmVjdCxcbiAgICB1c2VNZW1vOiB1cGRhdGVNZW1vLFxuICAgIHVzZVJlZHVjZXI6IHJlcmVuZGVyUmVkdWNlcixcbiAgICB1c2VSZWY6IHVwZGF0ZVJlZixcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBtb3VudERlYnVnVmFsdWUsXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gY3VycmVudEhvb2tcbiAgICAgICAgPyBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpXG4gICAgICAgIDogdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoXG4gICAgICAgICAgICBob29rLFxuICAgICAgICAgICAgY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlXG4gICAgICAgICAgKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBib29sZWFuT3JUaGVuYWJsZSA9IHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF0sXG4gICAgICAgIHN0YXJ0ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA/IGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgOiB1c2VUaGVuYWJsZShib29sZWFuT3JUaGVuYWJsZSksXG4gICAgICAgIHN0YXJ0XG4gICAgICBdO1xuICAgIH0sXG4gICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlLFxuICAgIHVzZUlkOiB1cGRhdGVJZFxuICB9O1xuZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICBpZiAoQ29tcG9uZW50ICYmIENvbXBvbmVudC5kZWZhdWx0UHJvcHMpIHtcbiAgICBiYXNlUHJvcHMgPSBhc3NpZ24oe30sIGJhc2VQcm9wcyk7XG4gICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBDb21wb25lbnQpXG4gICAgICB2b2lkIDAgPT09IGJhc2VQcm9wc1twcm9wTmFtZV0gJiZcbiAgICAgICAgKGJhc2VQcm9wc1twcm9wTmFtZV0gPSBDb21wb25lbnRbcHJvcE5hbWVdKTtcbiAgICByZXR1cm4gYmFzZVByb3BzO1xuICB9XG4gIHJldHVybiBiYXNlUHJvcHM7XG59XG5mdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIGN0b3IsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxcbiAgbmV4dFByb3BzXG4pIHtcbiAgY3RvciA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIGN0b3IpO1xuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPVxuICAgIG51bGwgPT09IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fCB2b2lkIDAgPT09IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICAgICAgPyBjdG9yXG4gICAgICA6IGFzc2lnbih7fSwgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgMCA9PT0gd29ya0luUHJvZ3Jlc3MubGFuZXMgJiZcbiAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKTtcbn1cbnZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgIHJldHVybiAoY29tcG9uZW50ID0gY29tcG9uZW50Ll9yZWFjdEludGVybmFscylcbiAgICAgID8gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihjb21wb25lbnQpID09PSBjb21wb25lbnRcbiAgICAgIDogITE7XG4gIH0sXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgaW5zdCA9IGluc3QuX3JlYWN0SW50ZXJuYWxzO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoaW5zdCksXG4gICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiYgbnVsbCAhPT0gY2FsbGJhY2sgJiYgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKTtcbiAgICBwYXlsb2FkID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgIG51bGwgIT09IHBheWxvYWQgJiZcbiAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF5bG9hZCwgaW5zdCwgbGFuZSksXG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHBheWxvYWQsIGluc3QsIGxhbmUpKTtcbiAgfSxcbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgaW5zdCA9IGluc3QuX3JlYWN0SW50ZXJuYWxzO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoaW5zdCksXG4gICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IDE7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiYgbnVsbCAhPT0gY2FsbGJhY2sgJiYgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKTtcbiAgICBwYXlsb2FkID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgIG51bGwgIT09IHBheWxvYWQgJiZcbiAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF5bG9hZCwgaW5zdCwgbGFuZSksXG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHBheWxvYWQsIGluc3QsIGxhbmUpKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gMjtcbiAgICB2b2lkIDAgIT09IGNhbGxiYWNrICYmIG51bGwgIT09IGNhbGxiYWNrICYmICh1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjayk7XG4gICAgY2FsbGJhY2sgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIoY2FsbGJhY2ssIGluc3QsIGxhbmUpLFxuICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhjYWxsYmFjaywgaW5zdCwgbGFuZSkpO1xuICB9XG59O1xuZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gIHdvcmtJblByb2dyZXNzLFxuICBjdG9yLFxuICBvbGRQcm9wcyxcbiAgbmV3UHJvcHMsXG4gIG9sZFN0YXRlLFxuICBuZXdTdGF0ZSxcbiAgbmV4dENvbnRleHRcbikge1xuICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHdvcmtJblByb2dyZXNzLnNob3VsZENvbXBvbmVudFVwZGF0ZVxuICAgID8gd29ya0luUHJvZ3Jlc3Muc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpXG4gICAgOiBjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudFxuICAgID8gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKVxuICAgIDogITA7XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcykge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSAhMSxcbiAgICB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0ID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGNvbnRleHQgJiYgbnVsbCAhPT0gY29udGV4dFxuICAgID8gKGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0KSlcbiAgICA6ICgodW5tYXNrZWRDb250ZXh0ID0gaXNDb250ZXh0UHJvdmlkZXIoY3RvcilcbiAgICAgICAgPyBwcmV2aW91c0NvbnRleHRcbiAgICAgICAgOiBjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KSxcbiAgICAgIChpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGN0b3IuY29udGV4dFR5cGVzKSxcbiAgICAgIChjb250ZXh0ID0gKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID1cbiAgICAgICAgbnVsbCAhPT0gaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgJiYgdm9pZCAwICE9PSBpc0xlZ2FjeUNvbnRleHRDb25zdW1lcilcbiAgICAgICAgPyBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpXG4gICAgICAgIDogZW1wdHlDb250ZXh0T2JqZWN0KSk7XG4gIGN0b3IgPSBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPVxuICAgIG51bGwgIT09IGN0b3Iuc3RhdGUgJiYgdm9pZCAwICE9PSBjdG9yLnN0YXRlID8gY3Rvci5zdGF0ZSA6IG51bGw7XG4gIGN0b3IudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3RvcjtcbiAgY3Rvci5fcmVhY3RJbnRlcm5hbHMgPSB3b3JrSW5Qcm9ncmVzcztcbiAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgJiZcbiAgICAoKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSxcbiAgICAod29ya0luUHJvZ3Jlc3MuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9XG4gICAgICB1bm1hc2tlZENvbnRleHQpLFxuICAgICh3b3JrSW5Qcm9ncmVzcy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IGNvbnRleHQpKTtcbiAgcmV0dXJuIGN0b3I7XG59XG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIGluc3RhbmNlLFxuICBuZXdQcm9wcyxcbiAgbmV4dENvbnRleHRcbikge1xuICB3b3JrSW5Qcm9ncmVzcyA9IGluc3RhbmNlLnN0YXRlO1xuICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIGluc3RhbmNlLnN0YXRlICE9PSB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG59XG5mdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UucmVmcyA9IHt9O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICBcIm9iamVjdFwiID09PSB0eXBlb2YgY29udGV4dFR5cGUgJiYgbnVsbCAhPT0gY29udGV4dFR5cGVcbiAgICA/IChpbnN0YW5jZS5jb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpKVxuICAgIDogKChjb250ZXh0VHlwZSA9IGlzQ29udGV4dFByb3ZpZGVyKGN0b3IpXG4gICAgICAgID8gcHJldmlvdXNDb250ZXh0XG4gICAgICAgIDogY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCksXG4gICAgICAoaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGNvbnRleHRUeXBlKSkpO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIGNvbnRleHRUeXBlID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHRUeXBlICYmXG4gICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBjb250ZXh0VHlwZSwgbmV3UHJvcHMpLFxuICAgIChpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKTtcbiAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgfHxcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQpIHx8XG4gICAgKChjdG9yID0gaW5zdGFuY2Uuc3RhdGUpLFxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgIGN0b3IgIT09IGluc3RhbmNlLnN0YXRlICYmXG4gICAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpLFxuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyksXG4gICAgKGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpO1xuICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2UpIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpLFxuICAgIGRpZ2VzdDogbnVsbFxuICB9O1xufVxuaWYgKFxuICBcImZ1bmN0aW9uXCIgIT09XG4gIHR5cGVvZiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3RGaWJlckVycm9yRGlhbG9nLnNob3dFcnJvckRpYWxvZ1xuKVxuICB0aHJvdyBFcnJvcihcbiAgICBcIkV4cGVjdGVkIFJlYWN0RmliZXJFcnJvckRpYWxvZy5zaG93RXJyb3JEaWFsb2cgdG8gYmUgYSBmdW5jdGlvbi5cIlxuICApO1xuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHRyeSB7XG4gICAgITEgIT09XG4gICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3RGaWJlckVycm9yRGlhbG9nLnNob3dFcnJvckRpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBudWxsICE9PSBlcnJvckluZm8uc3RhY2sgPyBlcnJvckluZm8uc3RhY2sgOiBcIlwiLFxuICAgICAgICBlcnJvcjogZXJyb3JJbmZvLnZhbHVlLFxuICAgICAgICBlcnJvckJvdW5kYXJ5OlxuICAgICAgICAgIG51bGwgIT09IGJvdW5kYXJ5ICYmIDEgPT09IGJvdW5kYXJ5LnRhZyA/IGJvdW5kYXJ5LnN0YXRlTm9kZSA6IG51bGxcbiAgICAgIH0pICYmIGNvbnNvbGUuZXJyb3IoZXJyb3JJbmZvLnZhbHVlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgbGFuZS50YWcgPSAzO1xuICBsYW5lLnBheWxvYWQgPSB7IGVsZW1lbnQ6IG51bGwgfTtcbiAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICBsYW5lLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgfHwgKChoYXNVbmNhdWdodEVycm9yID0gITApLCAoZmlyc3RVbmNhdWdodEVycm9yID0gZXJyb3IpKTtcbiAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICB9O1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICBsYW5lID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICBsYW5lLnRhZyA9IDM7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcikge1xuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcbiAgICBsYW5lLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIGxhbmUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgIH07XG4gIH1cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIG51bGwgIT09IGluc3QgJiZcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgKGxhbmUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICYmXG4gICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZFxuICAgICAgICAgID8gKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbmV3IFNldChbdGhpc10pKVxuICAgICAgICAgIDogbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKHRoaXMpKTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3JJbmZvLnZhbHVlLCB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBudWxsICE9PSBzdGFjayA/IHN0YWNrIDogXCJcIlxuICAgICAgfSk7XG4gICAgfSk7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24oXG4gIHJvb3QsXG4gIHJldHVybkZpYmVyLFxuICBzb3VyY2VGaWJlcixcbiAgdmFsdWUsXG4gIHJvb3RSZW5kZXJMYW5lc1xuKSB7XG4gIHNvdXJjZUZpYmVyLmZsYWdzIHw9IDMyNzY4O1xuICBpZiAoXG4gICAgbnVsbCAhPT0gdmFsdWUgJiZcbiAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZS50aGVuXG4gICkge1xuICAgIHZhciB0YWcgPSBzb3VyY2VGaWJlci50YWc7XG4gICAgMCAhPT0gKHNvdXJjZUZpYmVyLm1vZGUgJiAxKSB8fFxuICAgICAgKDAgIT09IHRhZyAmJiAxMSAhPT0gdGFnICYmIDE1ICE9PSB0YWcpIHx8XG4gICAgICAoKHRhZyA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZSlcbiAgICAgICAgPyAoKHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gdGFnLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAoc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IHRhZy5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAoc291cmNlRmliZXIubGFuZXMgPSB0YWcubGFuZXMpKVxuICAgICAgICA6ICgoc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICAoc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGwpKSk7XG4gICAgdGFnID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICBpZiAobnVsbCAhPT0gdGFnKSB7XG4gICAgICBzd2l0Y2ggKHRhZy50YWcpIHtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc291cmNlRmliZXIubW9kZSAmIDEgJiZcbiAgICAgICAgICAgICAgKG51bGwgPT09IHNoZWxsQm91bmRhcnlcbiAgICAgICAgICAgICAgICA/IHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKVxuICAgICAgICAgICAgICAgIDogbnVsbCA9PT0gdGFnLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgICAgMCA9PT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSAzKSksXG4gICAgICAgICAgICAodGFnLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICAgMCA9PT0gKHRhZy5tb2RlICYgMSlcbiAgICAgICAgICAgICAgPyB0YWcgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgPyAodGFnLmZsYWdzIHw9IDY1NTM2KVxuICAgICAgICAgICAgICAgIDogKCh0YWcuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSAxMzEwNzIpLFxuICAgICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzICY9IC01MjgwNSksXG4gICAgICAgICAgICAgICAgICAxID09PSBzb3VyY2VGaWJlci50YWcgJiZcbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT09IHNvdXJjZUZpYmVyLmFsdGVybmF0ZVxuICAgICAgICAgICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyLnRhZyA9IDE3KVxuICAgICAgICAgICAgICAgICAgICAgIDogKChyZXR1cm5GaWJlciA9IGNyZWF0ZVVwZGF0ZSgyKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIudGFnID0gMiksXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCByZXR1cm5GaWJlciwgMikpKSxcbiAgICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5sYW5lcyB8PSAyKSlcbiAgICAgICAgICAgICAgOiAoKHRhZy5mbGFncyB8PSA2NTUzNiksICh0YWcubGFuZXMgPSByb290UmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgIHZhbHVlID09PSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGVcbiAgICAgICAgICAgICAgPyAodGFnLmZsYWdzIHw9IDE2Mzg0KVxuICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSB0YWcudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICA/ICh0YWcudXBkYXRlUXVldWUgPSBuZXcgU2V0KFt2YWx1ZV0pKVxuICAgICAgICAgICAgICAgICAgOiByZXR1cm5GaWJlci5hZGQodmFsdWUpLFxuICAgICAgICAgICAgICAgIHRhZy5tb2RlICYgMSAmJlxuICAgICAgICAgICAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICExXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBpZiAodGFnLm1vZGUgJiAxKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHRhZy5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgIHZhbHVlID09PSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGVcbiAgICAgICAgICAgICAgICA/ICh0YWcuZmxhZ3MgfD0gMTYzODQpXG4gICAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gdGFnLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgID8gKChyZXR1cm5GaWJlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2VzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlRdWV1ZTogbmV3IFNldChbdmFsdWVdKVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICh0YWcudXBkYXRlUXVldWUgPSByZXR1cm5GaWJlcikpXG4gICAgICAgICAgICAgICAgICAgIDogKChzb3VyY2VGaWJlciA9IHJldHVybkZpYmVyLnJldHJ5UXVldWUpLFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChyZXR1cm5GaWJlci5yZXRyeVF1ZXVlID0gbmV3IFNldChbdmFsdWVdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc291cmNlRmliZXIuYWRkKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIlVuZXhwZWN0ZWQgU3VzcGVuc2UgaGFuZGxlciB0YWcgKFwiICtcbiAgICAgICAgICB0YWcudGFnICtcbiAgICAgICAgICBcIikuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICgxID09PSByb290LnRhZylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpLFxuICAgICAgICAhMVxuICAgICAgKTtcbiAgICB2YWx1ZSA9IEVycm9yKFxuICAgICAgXCJBIGNvbXBvbmVudCBzdXNwZW5kZWQgd2hpbGUgcmVzcG9uZGluZyB0byBzeW5jaHJvbm91cyBpbnB1dC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBVSSB0byBiZSByZXBsYWNlZCB3aXRoIGEgbG9hZGluZyBpbmRpY2F0b3IuIFRvIGZpeCwgdXBkYXRlcyB0aGF0IHN1c3BlbmQgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aCBzdGFydFRyYW5zaXRpb24uXCJcbiAgICApO1xuICB9XG4gIHJvb3QgPSB2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gIDQgIT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgJiYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSAyKTtcbiAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9yc1xuICAgID8gKHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBbcm9vdF0pXG4gICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzLnB1c2gocm9vdCk7XG4gIGlmIChudWxsID09PSByZXR1cm5GaWJlcikgcmV0dXJuICEwO1xuICByb290ID0gcmV0dXJuRmliZXI7XG4gIGRvIHtcbiAgICBzd2l0Y2ggKHJvb3QudGFnKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHJvb3QuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgKHJvb3QubGFuZXMgfD0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAocm9vdFJlbmRlckxhbmVzID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgKSksXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgITFcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgocmV0dXJuRmliZXIgPSB2YWx1ZSksXG4gICAgICAgICAgKHNvdXJjZUZpYmVyID0gcm9vdC50eXBlKSxcbiAgICAgICAgICAodGFnID0gcm9vdC5zdGF0ZU5vZGUpLFxuICAgICAgICAgIDAgPT09IChyb290LmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHNvdXJjZUZpYmVyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgICAobnVsbCAhPT0gdGFnICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdGFnLmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICAgICAgICAgKG51bGwgPT09IGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkIHx8XG4gICAgICAgICAgICAgICAgICAhbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKHRhZykpKSkpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJvb3QuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgKHJvb3RSZW5kZXJMYW5lcyAmPSAtcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIChyb290LmxhbmVzIHw9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUocm9vdCwgcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICExXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgcm9vdCA9IHJvb3QucmV0dXJuO1xuICB9IHdoaWxlIChudWxsICE9PSByb290KTtcbiAgcmV0dXJuICExO1xufVxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgXCJUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IuIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFJlYWN0J3Mgc2VsZWN0aXZlIGh5ZHJhdGlvbiBmZWF0dXJlLiBJZiB0aGlzIGxlYWtzIGludG8gdXNlcnNwYWNlLCBpdCdzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICApLFxuICBkaWRSZWNlaXZlVXBkYXRlID0gITE7XG5mdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9XG4gICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgPyBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKVxuICAgICAgOiByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xufVxuZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIENvbXBvbmVudCxcbiAgbmV4dFByb3BzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIENvbXBvbmVudCA9IENvbXBvbmVudC5yZW5kZXI7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIG5leHRQcm9wcyA9IHJlbmRlcldpdGhIb29rcyhcbiAgICBjdXJyZW50LFxuICAgIHdvcmtJblByb2dyZXNzLFxuICAgIENvbXBvbmVudCxcbiAgICBuZXh0UHJvcHMsXG4gICAgcmVmLFxuICAgIHJlbmRlckxhbmVzXG4gICk7XG4gIGlmIChudWxsICE9PSBjdXJyZW50ICYmICFkaWRSZWNlaXZlVXBkYXRlKVxuICAgIHJldHVybiAoXG4gICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICk7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIENvbXBvbmVudCxcbiAgbmV4dFByb3BzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICBpZiAoXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAhc2hvdWxkQ29uc3RydWN0KHR5cGUpICYmXG4gICAgICB2b2lkIDAgPT09IHR5cGUuZGVmYXVsdFByb3BzICYmXG4gICAgICBudWxsID09PSBDb21wb25lbnQuY29tcGFyZSAmJlxuICAgICAgdm9pZCAwID09PSBDb21wb25lbnQuZGVmYXVsdFByb3BzXG4gICAgKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLnRhZyA9IDE1KSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSB0eXBlKSxcbiAgICAgICAgdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgIENvbXBvbmVudC50eXBlLFxuICAgICAgbnVsbCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKTtcbiAgICBjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICBjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHJldHVybiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50KTtcbiAgfVxuICB0eXBlID0gY3VycmVudC5jaGlsZDtcbiAgaWYgKDAgPT09IChjdXJyZW50LmxhbmVzICYgcmVuZGVyTGFuZXMpKSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IHR5cGUubWVtb2l6ZWRQcm9wcztcbiAgICBDb21wb25lbnQgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICBDb21wb25lbnQgPSBudWxsICE9PSBDb21wb25lbnQgPyBDb21wb25lbnQgOiBzaGFsbG93RXF1YWw7XG4gICAgaWYgKENvbXBvbmVudChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZilcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgY3VycmVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHR5cGUsIG5leHRQcm9wcyk7XG4gIGN1cnJlbnQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudCk7XG59XG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgQ29tcG9uZW50LFxuICBuZXh0UHJvcHMsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIGlmIChcbiAgICAgIHNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiZcbiAgICAgIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWZcbiAgICApXG4gICAgICBpZiAoXG4gICAgICAgICgoZGlkUmVjZWl2ZVVwZGF0ZSA9ICExKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IG5leHRQcm9wcyA9IHByZXZQcm9wcyksXG4gICAgICAgIDAgIT09IChjdXJyZW50LmxhbmVzICYgcmVuZGVyTGFuZXMpKVxuICAgICAgKVxuICAgICAgICAwICE9PSAoY3VycmVudC5mbGFncyAmIDEzMTA3MikgJiYgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcyksXG4gICAgICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgIGN1cnJlbnQsXG4gICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgQ29tcG9uZW50LFxuICAgIG5leHRQcm9wcyxcbiAgICByZW5kZXJMYW5lc1xuICApO1xufVxuZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbixcbiAgICBuZXh0SXNEZXRhY2hlZCA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuX3BlbmRpbmdWaXNpYmlsaXR5ICYgMiksXG4gICAgcHJldlN0YXRlID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIGlmIChcImhpZGRlblwiID09PSBuZXh0UHJvcHMubW9kZSB8fCBuZXh0SXNEZXRhY2hlZCkge1xuICAgIGlmICgwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpKSB7XG4gICAgICByZW5kZXJMYW5lcyA9XG4gICAgICAgIG51bGwgIT09IHByZXZTdGF0ZSA/IHByZXZTdGF0ZS5iYXNlTGFuZXMgfCByZW5kZXJMYW5lcyA6IHJlbmRlckxhbmVzO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICBmb3IgKG5leHRDaGlsZHJlbiA9IDA7IG51bGwgIT09IG5leHRQcm9wczsgKVxuICAgICAgICAgIChuZXh0Q2hpbGRyZW4gPVxuICAgICAgICAgICAgbmV4dENoaWxkcmVuIHwgbmV4dFByb3BzLmxhbmVzIHwgbmV4dFByb3BzLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgKG5leHRQcm9wcyA9IG5leHRQcm9wcy5zaWJsaW5nKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IG5leHRDaGlsZHJlbiAmIH5yZW5kZXJMYW5lcztcbiAgICAgIH0gZWxzZSAod29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDApLCAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsKTtcbiAgICAgIHJldHVybiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoMCA9PT0gKHdvcmtJblByb2dyZXNzLm1vZGUgJiAxKSlcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IDAsIGNhY2hlUG9vbDogbnVsbCB9KSxcbiAgICAgICAgcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjaygpO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIDUzNjg3MDkxMikpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDUzNjg3MDkxMiksXG4gICAgICAgICAgZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXMgOiByZW5kZXJMYW5lc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7IGJhc2VMYW5lczogMCwgY2FjaGVQb29sOiBudWxsIH07XG4gICAgICBudWxsICE9PSBwcmV2U3RhdGVcbiAgICAgICAgPyBwdXNoSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcHJldlN0YXRlKVxuICAgICAgICA6IHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soKTtcbiAgICB9XG4gICAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZVxuICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgPyAocHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSksXG4gICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCkpXG4gICAgICA6IChyZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKCksXG4gICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcykpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7IGJhc2VMYW5lczogbmV4dEJhc2VMYW5lcywgY2FjaGVQb29sOiBudWxsIH07XG4gIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soKTtcbiAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gIGlmIChcbiAgICAobnVsbCA9PT0gY3VycmVudCAmJiBudWxsICE9PSByZWYpIHx8XG4gICAgKG51bGwgIT09IGN1cnJlbnQgJiYgY3VycmVudC5yZWYgIT09IHJlZilcbiAgKVxuICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA1MTIpLCAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA5NzE1Mik7XG59XG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIENvbXBvbmVudCxcbiAgbmV4dFByb3BzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIHZhciBjb250ZXh0ID0gaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KVxuICAgID8gcHJldmlvdXNDb250ZXh0XG4gICAgOiBjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50O1xuICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCk7XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIENvbXBvbmVudCA9IHJlbmRlcldpdGhIb29rcyhcbiAgICBjdXJyZW50LFxuICAgIHdvcmtJblByb2dyZXNzLFxuICAgIENvbXBvbmVudCxcbiAgICBuZXh0UHJvcHMsXG4gICAgY29udGV4dCxcbiAgICByZW5kZXJMYW5lc1xuICApO1xuICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICByZXR1cm4gKFxuICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICApO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgbmV4dFByb3BzLFxuICBDb21wb25lbnQsXG4gIHNlY29uZEFyZyxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBuZXh0UHJvcHMgPSByZW5kZXJXaXRoSG9va3NBZ2FpbihcbiAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICBDb21wb25lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIHNlY29uZEFyZ1xuICApO1xuICBmaW5pc2hSZW5kZXJpbmdIb29rcygpO1xuICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICByZXR1cm4gKFxuICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICApO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgQ29tcG9uZW50LFxuICBuZXh0UHJvcHMsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICB2YXIgaGFzQ29udGV4dCA9ICEwO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2UgaGFzQ29udGV4dCA9ICExO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpLFxuICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpLFxuICAgICAgKG5leHRQcm9wcyA9ICEwKTtcbiAgZWxzZSBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSxcbiAgICAgIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICAgIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dCxcbiAgICAgIGNvbnRleHRUeXBlID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjb250ZXh0VHlwZSAmJiBudWxsICE9PSBjb250ZXh0VHlwZVxuICAgICAgPyAoY29udGV4dFR5cGUgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSkpXG4gICAgICA6ICgoY29udGV4dFR5cGUgPSBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpXG4gICAgICAgICAgPyBwcmV2aW91c0NvbnRleHRcbiAgICAgICAgICA6IGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpLFxuICAgICAgICAoY29udGV4dFR5cGUgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjb250ZXh0VHlwZSkpKTtcbiAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxcbiAgICAgIGhhc05ld0xpZmVjeWNsZXMgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgfHxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU7XG4gICAgaGFzTmV3TGlmZWN5Y2xlcyB8fFxuICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHx8XG4gICAgICAoKG9sZFByb3BzICE9PSBuZXh0UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gY29udGV4dFR5cGUpICYmXG4gICAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICBjb250ZXh0VHlwZVxuICAgICAgICApKTtcbiAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBvbGRDb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICBvbGRQcm9wcyAhPT0gbmV4dFByb3BzIHx8XG4gICAgb2xkU3RhdGUgIT09IG9sZENvbnRleHQgfHxcbiAgICBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQgfHxcbiAgICBoYXNGb3JjZVVwZGF0ZVxuICAgICAgPyAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICYmXG4gICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsXG4gICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICApLFxuICAgICAgICAgIChvbGRDb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpLFxuICAgICAgICAob2xkUHJvcHMgPVxuICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgICAgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIG9sZFByb3BzLFxuICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgb2xkU3RhdGUsXG4gICAgICAgICAgICBvbGRDb250ZXh0LFxuICAgICAgICAgICAgY29udGV4dFR5cGVcbiAgICAgICAgICApKVxuICAgICAgICAgID8gKGhhc05ld0xpZmVjeWNsZXMgfHxcbiAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQpIHx8XG4gICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKSxcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCkpXG4gICAgICAgICAgOiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBvbGRDb250ZXh0KSksXG4gICAgICAgIChpbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgIChpbnN0YW5jZS5zdGF0ZSA9IG9sZENvbnRleHQpLFxuICAgICAgICAoaW5zdGFuY2UuY29udGV4dCA9IGNvbnRleHRUeXBlKSxcbiAgICAgICAgKG5leHRQcm9wcyA9IG9sZFByb3BzKSlcbiAgICAgIDogKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpLFxuICAgICAgICAobmV4dFByb3BzID0gITEpKTtcbiAgfSBlbHNlIHtcbiAgICBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgY29udGV4dFR5cGUgPVxuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGVcbiAgICAgICAgPyBvbGRQcm9wc1xuICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgb2xkUHJvcHMpO1xuICAgIGluc3RhbmNlLnByb3BzID0gY29udGV4dFR5cGU7XG4gICAgaGFzTmV3TGlmZWN5Y2xlcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICBvbGRTdGF0ZSA9IGluc3RhbmNlLmNvbnRleHQ7XG4gICAgb2xkQ29udGV4dCA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2xkQ29udGV4dCAmJiBudWxsICE9PSBvbGRDb250ZXh0XG4gICAgICA/IChvbGRDb250ZXh0ID0gcmVhZENvbnRleHQob2xkQ29udGV4dCkpXG4gICAgICA6ICgob2xkQ29udGV4dCA9IGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudClcbiAgICAgICAgICA/IHByZXZpb3VzQ29udGV4dFxuICAgICAgICAgIDogY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCksXG4gICAgICAgIChvbGRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgb2xkQ29udGV4dCkpKTtcbiAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJGpzY29tcCQwID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgICAoZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID1cbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyRqc2NvbXAkMCB8fFxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpIHx8XG4gICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykgfHxcbiAgICAgICgob2xkUHJvcHMgIT09IGhhc05ld0xpZmVjeWNsZXMgfHwgb2xkU3RhdGUgIT09IG9sZENvbnRleHQpICYmXG4gICAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICBvbGRDb250ZXh0XG4gICAgICAgICkpO1xuICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgIGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgdmFyIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICBvbGRQcm9wcyAhPT0gaGFzTmV3TGlmZWN5Y2xlcyB8fFxuICAgIG9sZFN0YXRlICE9PSBuZXdTdGF0ZSB8fFxuICAgIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCB8fFxuICAgIGhhc0ZvcmNlVXBkYXRlXG4gICAgICA/IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMkanNjb21wJDAgJiZcbiAgICAgICAgICAoYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyRqc2NvbXAkMCxcbiAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICksXG4gICAgICAgICAgKG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpLFxuICAgICAgICAoY29udGV4dFR5cGUgPVxuICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgICAgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIGNvbnRleHRUeXBlLFxuICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgb2xkU3RhdGUsXG4gICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgIG9sZENvbnRleHRcbiAgICAgICAgICApIHx8XG4gICAgICAgICAgITEpXG4gICAgICAgICAgPyAoZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIHx8XG4gICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUpIHx8XG4gICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5ld1N0YXRlLCBvbGRDb250ZXh0KSxcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgICAgb2xkQ29udGV4dFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSlcbiAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgfHxcbiAgICAgICAgICAgICAgKG9sZFByb3BzID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICAob2xkUHJvcHMgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGUpKSxcbiAgICAgICAgKGluc3RhbmNlLnByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgKGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGUpLFxuICAgICAgICAoaW5zdGFuY2UuY29udGV4dCA9IG9sZENvbnRleHQpLFxuICAgICAgICAobmV4dFByb3BzID0gY29udGV4dFR5cGUpKVxuICAgICAgOiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgKG9sZFByb3BzID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgIChvbGRQcm9wcyA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgKG5leHRQcm9wcyA9ICExKSk7XG4gIH1cbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KFxuICAgIGN1cnJlbnQsXG4gICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgQ29tcG9uZW50LFxuICAgIG5leHRQcm9wcyxcbiAgICBoYXNDb250ZXh0LFxuICAgIHJlbmRlckxhbmVzXG4gICk7XG59XG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIENvbXBvbmVudCxcbiAgc2hvdWxkVXBkYXRlLFxuICBoYXNDb250ZXh0LFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpO1xuICBpZiAoIXNob3VsZFVwZGF0ZSAmJiAhZGlkQ2FwdHVyZUVycm9yKVxuICAgIHJldHVybiAoXG4gICAgICBoYXNDb250ZXh0ICYmIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgITEpLFxuICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgKTtcbiAgc2hvdWxkVXBkYXRlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9XG4gICAgZGlkQ2FwdHVyZUVycm9yICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3JcbiAgICAgID8gbnVsbFxuICAgICAgOiBzaG91bGRVcGRhdGUucmVuZGVyKCk7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gIG51bGwgIT09IGN1cnJlbnQgJiYgZGlkQ2FwdHVyZUVycm9yXG4gICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICBudWxsLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICkpKVxuICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gc2hvdWxkVXBkYXRlLnN0YXRlO1xuICBoYXNDb250ZXh0ICYmIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgITApO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICByb290LnBlbmRpbmdDb250ZXh0XG4gICAgPyBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgcm9vdC5wZW5kaW5nQ29udGV4dCxcbiAgICAgICAgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0XG4gICAgICApXG4gICAgOiByb290LmNvbnRleHQgJiZcbiAgICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgITEpO1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250YWluZXJJbmZvKTtcbn1cbnZhciBTVVNQRU5ERURfTUFSS0VSID0geyBkZWh5ZHJhdGVkOiBudWxsLCB0cmVlQ29udGV4dDogbnVsbCwgcmV0cnlMYW5lOiAwIH07XG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHsgYmFzZUxhbmVzOiByZW5kZXJMYW5lcywgY2FjaGVQb29sOiBudWxsIH07XG59XG5mdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgY3VycmVudCxcbiAgcHJpbWFyeVRyZWVEaWREZWZlcixcbiAgcmVuZGVyTGFuZXNcbikge1xuICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuY2hpbGRMYW5lcyAmIH5yZW5kZXJMYW5lcyA6IDA7XG4gIHByaW1hcnlUcmVlRGlkRGVmZXIgJiYgKGN1cnJlbnQgfD0gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICByZXR1cm4gY3VycmVudDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgIHNob3dGYWxsYmFjayA9ICExLFxuICAgIGRpZFN1c3BlbmQgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpLFxuICAgIEpTQ29tcGlsZXJfdGVtcDtcbiAgKEpTQ29tcGlsZXJfdGVtcCA9IGRpZFN1c3BlbmQpIHx8XG4gICAgKEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICA/ICExXG4gICAgICAgIDogMCAhPT0gKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIDIpKTtcbiAgSlNDb21waWxlcl90ZW1wICYmICgoc2hvd0ZhbGxiYWNrID0gITApLCAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTEyOSkpO1xuICBKU0NvbXBpbGVyX3RlbXAgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAzMik7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0zMztcbiAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICBkaWRTdXNwZW5kID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIG5leHRQcm9wcyA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc2hvd0ZhbGxiYWNrID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgICAgIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBkaWRTdXNwZW5kID0geyBtb2RlOiBcImhpZGRlblwiLCBjaGlsZHJlbjogZGlkU3VzcGVuZCB9O1xuICAgICAgMCA9PT0gKHNob3dGYWxsYmFjayAmIDEpICYmIG51bGwgIT09IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnRcbiAgICAgICAgPyAoKHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQuY2hpbGRMYW5lcyA9IDApLFxuICAgICAgICAgIChwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IGRpZFN1c3BlbmQpKVxuICAgICAgICA6IChwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKFxuICAgICAgICAgICAgZGlkU3VzcGVuZCxcbiAgICAgICAgICAgIHNob3dGYWxsYmFjayxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKSk7XG4gICAgICBuZXh0UHJvcHMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICBzaG93RmFsbGJhY2ssXG4gICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgICAgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIG5leHRQcm9wcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQuc2libGluZyA9IG5leHRQcm9wcztcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICAgIHNob3dGYWxsYmFjayA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgc2hvd0ZhbGxiYWNrLm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgc2hvd0ZhbGxiYWNrLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgcmV0dXJuIG5leHRQcm9wcztcbiAgICB9XG4gICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgZGlkU3VzcGVuZCk7XG4gIH1cbiAgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgaWYgKG51bGwgIT09IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQpIHtcbiAgICB2YXIgZGVoeWRyYXRlZCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQuZGVoeWRyYXRlZDtcbiAgICBpZiAobnVsbCAhPT0gZGVoeWRyYXRlZClcbiAgICAgIHJldHVybiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBkaWRTdXNwZW5kLFxuICAgICAgICBKU0NvbXBpbGVyX3RlbXAsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgZGVoeWRyYXRlZCxcbiAgICAgICAgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gIH1cbiAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgc2hvd0ZhbGxiYWNrID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgIGRpZFN1c3BlbmQgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICAgIGRlaHlkcmF0ZWQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50LnNpYmxpbmc7XG4gICAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0geyBtb2RlOiBcImhpZGRlblwiLCBjaGlsZHJlbjogbmV4dFByb3BzLmNoaWxkcmVuIH07XG4gICAgMCA9PT0gKGRpZFN1c3BlbmQgJiAxKSAmJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudFxuICAgICAgPyAoKG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgKG5leHRQcm9wcy5jaGlsZExhbmVzID0gMCksXG4gICAgICAgIChuZXh0UHJvcHMucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHMpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCkpXG4gICAgICA6ICgobmV4dFByb3BzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCxcbiAgICAgICAgICBwcmltYXJ5Q2hpbGRQcm9wc1xuICAgICAgICApKSxcbiAgICAgICAgKG5leHRQcm9wcy5zdWJ0cmVlRmxhZ3MgPVxuICAgICAgICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQuc3VidHJlZUZsYWdzICYgMzE0NTcyODApKTtcbiAgICBudWxsICE9PSBkZWh5ZHJhdGVkXG4gICAgICA/IChzaG93RmFsbGJhY2sgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhkZWh5ZHJhdGVkLCBzaG93RmFsbGJhY2spKVxuICAgICAgOiAoKHNob3dGYWxsYmFjayA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgIHNob3dGYWxsYmFjayxcbiAgICAgICAgICBkaWRTdXNwZW5kLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKSksXG4gICAgICAgIChzaG93RmFsbGJhY2suZmxhZ3MgfD0gMikpO1xuICAgIHNob3dGYWxsYmFjay5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBuZXh0UHJvcHMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgbmV4dFByb3BzLnNpYmxpbmcgPSBzaG93RmFsbGJhY2s7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXh0UHJvcHM7XG4gICAgbmV4dFByb3BzID0gc2hvd0ZhbGxiYWNrO1xuICAgIHNob3dGYWxsYmFjayA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIGRpZFN1c3BlbmQgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgZGlkU3VzcGVuZCA9XG4gICAgICBudWxsID09PSBkaWRTdXNwZW5kXG4gICAgICAgID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKVxuICAgICAgICA6IHsgYmFzZUxhbmVzOiBkaWRTdXNwZW5kLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzLCBjYWNoZVBvb2w6IG51bGwgfTtcbiAgICBzaG93RmFsbGJhY2subWVtb2l6ZWRTdGF0ZSA9IGRpZFN1c3BlbmQ7XG4gICAgc2hvd0ZhbGxiYWNrLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgIGN1cnJlbnQsXG4gICAgICBKU0NvbXBpbGVyX3RlbXAsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICk7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgcmV0dXJuIG5leHRQcm9wcztcbiAgfVxuICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICBKU0NvbXBpbGVyX3RlbXAgPSBjdXJyZW50LmNoaWxkO1xuICBjdXJyZW50ID0gSlNDb21waWxlcl90ZW1wLnNpYmxpbmc7XG4gIEpTQ29tcGlsZXJfdGVtcCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKEpTQ29tcGlsZXJfdGVtcCwge1xuICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgIGNoaWxkcmVuOiBuZXh0UHJvcHMuY2hpbGRyZW5cbiAgfSk7XG4gIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgMSkgJiYgKEpTQ29tcGlsZXJfdGVtcC5sYW5lcyA9IHJlbmRlckxhbmVzKTtcbiAgSlNDb21waWxlcl90ZW1wLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBKU0NvbXBpbGVyX3RlbXAuc2libGluZyA9IG51bGw7XG4gIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAoKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zKSxcbiAgICBudWxsID09PSByZW5kZXJMYW5lc1xuICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IFtjdXJyZW50XSksICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxNikpXG4gICAgICA6IHJlbmRlckxhbmVzLnB1c2goY3VycmVudCkpO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfdGVtcDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHJldHVybiBKU0NvbXBpbGVyX3RlbXA7XG59XG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4pIHtcbiAgcHJpbWFyeUNoaWxkcmVuID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKFxuICAgIHsgbW9kZTogXCJ2aXNpYmxlXCIsIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW4gfSxcbiAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlLFxuICAgIDAsXG4gICAgbnVsbFxuICApO1xuICBwcmltYXJ5Q2hpbGRyZW4ucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHJldHVybiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRyZW4pO1xufVxuZnVuY3Rpb24gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICByZW5kZXJMYW5lcyxcbiAgcmVjb3ZlcmFibGVFcnJvclxuKSB7XG4gIG51bGwgIT09IHJlY292ZXJhYmxlRXJyb3IgJiZcbiAgICAobnVsbCA9PT0gaHlkcmF0aW9uRXJyb3JzXG4gICAgICA/IChoeWRyYXRpb25FcnJvcnMgPSBbcmVjb3ZlcmFibGVFcnJvcl0pXG4gICAgICA6IGh5ZHJhdGlvbkVycm9ycy5wdXNoKHJlY292ZXJhYmxlRXJyb3IpKTtcbiAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgY3VycmVudCA9IG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuXG4gICk7XG4gIGN1cnJlbnQuZmxhZ3MgfD0gMjtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gdXBkYXRlRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgZGlkU3VzcGVuZCxcbiAgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIsXG4gIG5leHRQcm9wcyxcbiAgc3VzcGVuc2VJbnN0YW5jZSxcbiAgc3VzcGVuc2VTdGF0ZSxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBpZiAoZGlkU3VzcGVuZCkge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMjU3KSxcbiAgICAgICAgcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogRXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGh5ZHJhdGluZyB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LiBTd2l0Y2hlZCB0byBjbGllbnQgcmVuZGVyaW5nLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICAgICAgc3RhY2s6IG51bGwsXG4gICAgICAgICAgICBkaWdlc3Q6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpXG4gICAgICByZXR1cm4gKFxuICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICBzdXNwZW5zZVN0YXRlID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgIGRpZFN1c3BlbmQgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICAgIG5leHRQcm9wcyA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihcbiAgICAgIHsgbW9kZTogXCJ2aXNpYmxlXCIsIGNoaWxkcmVuOiBuZXh0UHJvcHMuY2hpbGRyZW4gfSxcbiAgICAgIGRpZFN1c3BlbmQsXG4gICAgICAwLFxuICAgICAgbnVsbFxuICAgICk7XG4gICAgc3VzcGVuc2VTdGF0ZSA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgc3VzcGVuc2VTdGF0ZSxcbiAgICAgIGRpZFN1c3BlbmQsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIG51bGxcbiAgICApO1xuICAgIHN1c3BlbnNlU3RhdGUuZmxhZ3MgfD0gMjtcbiAgICBuZXh0UHJvcHMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBuZXh0UHJvcHMuc2libGluZyA9IHN1c3BlbnNlU3RhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXh0UHJvcHM7XG4gICAgMCAhPT0gKHdvcmtJblByb2dyZXNzLm1vZGUgJiAxKSAmJlxuICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBuZXh0UHJvcHMubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgbmV4dFByb3BzLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgIGN1cnJlbnQsXG4gICAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICByZXR1cm4gc3VzcGVuc2VTdGF0ZTtcbiAgfVxuICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICBpZiAoMCA9PT0gKHdvcmtJblByb2dyZXNzLm1vZGUgJiAxKSlcbiAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIG51bGxcbiAgICApO1xuICBpZiAoc2hpbSQxKCkpXG4gICAgcmV0dXJuIChcbiAgICAgIChkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciA9IHNoaW0kMSgpLmRpZ2VzdCksXG4gICAgICAoc3VzcGVuc2VTdGF0ZSA9IEVycm9yKFxuICAgICAgICBcIlRoZSBzZXJ2ZXIgY291bGQgbm90IGZpbmlzaCB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LCBsaWtlbHkgZHVlIHRvIGFuIGVycm9yIGR1cmluZyBzZXJ2ZXIgcmVuZGVyaW5nLiBTd2l0Y2hlZCB0byBjbGllbnQgcmVuZGVyaW5nLlwiXG4gICAgICApKSxcbiAgICAgIChzdXNwZW5zZVN0YXRlLmRpZ2VzdCA9IGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyKSxcbiAgICAgIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogc3VzcGVuc2VTdGF0ZSxcbiAgICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgICAgc3RhY2s6IG51bGwsXG4gICAgICAgICAgZGlnZXN0OlxuICAgICAgICAgICAgbnVsbCAhPSBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciA/IGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIgPSAwICE9PSAocmVuZGVyTGFuZXMgJiBjdXJyZW50LmNoaWxkTGFuZXMpO1xuICBpZiAoZGlkUmVjZWl2ZVVwZGF0ZSB8fCBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcikge1xuICAgIGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgIGlmIChudWxsICE9PSBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlcikge1xuICAgICAgbmV4dFByb3BzID0gcmVuZGVyTGFuZXMgJiAtcmVuZGVyTGFuZXM7XG4gICAgICBpZiAoMCAhPT0gKG5leHRQcm9wcyAmIDQyKSkgbmV4dFByb3BzID0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgc3dpdGNoIChuZXh0UHJvcHMpIHtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBuZXh0UHJvcHMgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgbmV4dFByb3BzID0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBuZXh0UHJvcHMgPSAxNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgIGNhc2UgNTEyOlxuICAgICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgICAgY2FzZSA0MDk2OlxuICAgICAgICAgIGNhc2UgODE5MjpcbiAgICAgICAgICBjYXNlIDE2Mzg0OlxuICAgICAgICAgIGNhc2UgMzI3Njg6XG4gICAgICAgICAgY2FzZSA2NTUzNjpcbiAgICAgICAgICBjYXNlIDEzMTA3MjpcbiAgICAgICAgICBjYXNlIDI2MjE0NDpcbiAgICAgICAgICBjYXNlIDUyNDI4ODpcbiAgICAgICAgICBjYXNlIDEwNDg1NzY6XG4gICAgICAgICAgY2FzZSAyMDk3MTUyOlxuICAgICAgICAgIGNhc2UgNDE5NDMwNDpcbiAgICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgICAgY2FzZSAxNjc3NzIxNjpcbiAgICAgICAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgICAgICAgbmV4dFByb3BzID0gNjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2ODQzNTQ1NjpcbiAgICAgICAgICAgIG5leHRQcm9wcyA9IDEzNDIxNzcyODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBuZXh0UHJvcHMgPSAwO1xuICAgICAgICB9XG4gICAgICBuZXh0UHJvcHMgPVxuICAgICAgICAwICE9PVxuICAgICAgICAobmV4dFByb3BzICYgKGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyLnN1c3BlbmRlZExhbmVzIHwgcmVuZGVyTGFuZXMpKVxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogbmV4dFByb3BzO1xuICAgICAgaWYgKDAgIT09IG5leHRQcm9wcyAmJiBuZXh0UHJvcHMgIT09IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKChzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IG5leHRQcm9wcyksXG4gICAgICAgICAgZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGN1cnJlbnQsIG5leHRQcm9wcyksXG4gICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyLCBjdXJyZW50LCBuZXh0UHJvcHMpLFxuICAgICAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgc2hpbSQxKCkgfHwgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgIHJldHVybiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgaWYgKHNoaW0kMSgpKVxuICAgIHJldHVybiAoXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeS5iaW5kKG51bGwsIGN1cnJlbnQpLFxuICAgICAgc2hpbSQxKCksXG4gICAgICBudWxsXG4gICAgKTtcbiAgY3VycmVudCA9IG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIGN1cnJlbnQuZmxhZ3MgfD0gNDA5NjtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzLCBwcm9wYWdhdGlvblJvb3QpIHtcbiAgZmliZXIubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmxhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzLCBwcm9wYWdhdGlvblJvb3QpO1xufVxuZnVuY3Rpb24gaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgaXNCYWNrd2FyZHMsXG4gIHRhaWwsXG4gIGxhc3RDb250ZW50Um93LFxuICB0YWlsTW9kZVxuKSB7XG4gIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIG51bGwgPT09IHJlbmRlclN0YXRlXG4gICAgPyAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICAgIHJlbmRlcmluZ1N0YXJ0VGltZTogMCxcbiAgICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgIHRhaWxNb2RlOiB0YWlsTW9kZVxuICAgICAgfSlcbiAgICA6ICgocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcyksXG4gICAgICAocmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbCksXG4gICAgICAocmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMCksXG4gICAgICAocmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93KSxcbiAgICAgIChyZW5kZXJTdGF0ZS50YWlsID0gdGFpbCksXG4gICAgICAocmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZSkpO1xufVxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyLFxuICAgIHRhaWxNb2RlID0gbmV4dFByb3BzLnRhaWw7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMuY2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgbmV4dFByb3BzID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICBpZiAoMCAhPT0gKG5leHRQcm9wcyAmIDIpKVxuICAgIChuZXh0UHJvcHMgPSAobmV4dFByb3BzICYgMSkgfCAyKSwgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCk7XG4gIGVsc2Uge1xuICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIDAgIT09IChjdXJyZW50LmZsYWdzICYgMTI4KSlcbiAgICAgIGE6IGZvciAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApIHtcbiAgICAgICAgaWYgKDEzID09PSBjdXJyZW50LnRhZylcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihjdXJyZW50LCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBlbHNlIGlmICgxOSA9PT0gY3VycmVudC50YWcpXG4gICAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGN1cnJlbnQsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGVsc2UgaWYgKG51bGwgIT09IGN1cnJlbnQuY2hpbGQpIHtcbiAgICAgICAgICBjdXJyZW50LmNoaWxkLnJldHVybiA9IGN1cnJlbnQ7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IHdvcmtJblByb2dyZXNzKSBicmVhayBhO1xuICAgICAgICBmb3IgKDsgbnVsbCA9PT0gY3VycmVudC5zaWJsaW5nOyApIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudC5yZXR1cm4gfHwgY3VycmVudC5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC5zaWJsaW5nLnJldHVybiA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgfVxuICAgIG5leHRQcm9wcyAmPSAxO1xuICB9XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV4dFByb3BzKTtcbiAgaWYgKDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgMSkpIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICBlbHNlXG4gICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgY2FzZSBcImZvcndhcmRzXCI6XG4gICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIGZvciAocmV2ZWFsT3JkZXIgPSBudWxsOyBudWxsICE9PSByZW5kZXJMYW5lczsgKVxuICAgICAgICAgIChjdXJyZW50ID0gcmVuZGVyTGFuZXMuYWx0ZXJuYXRlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpICYmXG4gICAgICAgICAgICAgIChyZXZlYWxPcmRlciA9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgICByZW5kZXJMYW5lcyA9IHJldmVhbE9yZGVyO1xuICAgICAgICBudWxsID09PSByZW5kZXJMYW5lc1xuICAgICAgICAgID8gKChyZXZlYWxPcmRlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGwpKVxuICAgICAgICAgIDogKChyZXZlYWxPcmRlciA9IHJlbmRlckxhbmVzLnNpYmxpbmcpLCAocmVuZGVyTGFuZXMuc2libGluZyA9IG51bGwpKTtcbiAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICExLFxuICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJhY2t3YXJkc1wiOlxuICAgICAgICByZW5kZXJMYW5lcyA9IG51bGw7XG4gICAgICAgIHJldmVhbE9yZGVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIGZvciAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsOyBudWxsICE9PSByZXZlYWxPcmRlcjsgKSB7XG4gICAgICAgICAgY3VycmVudCA9IHJldmVhbE9yZGVyLmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsID09PSBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudCkpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudCA9IHJldmVhbE9yZGVyLnNpYmxpbmc7XG4gICAgICAgICAgcmV2ZWFsT3JkZXIuc2libGluZyA9IHJlbmRlckxhbmVzO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgcmV2ZWFsT3JkZXIgPSBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAhMCxcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6XG4gICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgITEsIG51bGwsIG51bGwsIHZvaWQgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgfVxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5mdW5jdGlvbiByZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgMSkgJiZcbiAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgKChjdXJyZW50LmFsdGVybmF0ZSA9IG51bGwpLFxuICAgICh3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsKSxcbiAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMikpO1xufVxuZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgbnVsbCAhPT0gY3VycmVudCAmJiAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXMpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gd29ya0luUHJvZ3Jlc3MubGFuZXM7XG4gIGlmICgwID09PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkgcmV0dXJuIG51bGw7XG4gIGlmIChudWxsICE9PSBjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50LmNoaWxkKVxuICAgIHRocm93IEVycm9yKFwiUmVzdW1pbmcgd29yayBub3QgeWV0IGltcGxlbWVudGVkLlwiKTtcbiAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzLmNoaWxkKSB7XG4gICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIHJlbmRlckxhbmVzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgY3VycmVudC5wZW5kaW5nUHJvcHMpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyTGFuZXM7XG4gICAgZm9yIChyZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzczsgbnVsbCAhPT0gY3VycmVudC5zaWJsaW5nOyApXG4gICAgICAoY3VycmVudCA9IGN1cnJlbnQuc2libGluZyksXG4gICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcgPVxuICAgICAgICAgIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIGN1cnJlbnQucGVuZGluZ1Byb3BzKSksXG4gICAgICAgIChyZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmVuZGVyTGFuZXMuc2libGluZyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSAzOlxuICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBpc0NvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlKSAmJlxuICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0LFxuICAgICAgICBuZXh0VmFsdWUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlKTtcbiAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6XG4gICAgICBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBjb250ZXh0KSB7XG4gICAgICAgIGlmIChudWxsICE9PSBjb250ZXh0LmRlaHlkcmF0ZWQpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGQuY2hpbGRMYW5lcykpXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGN1cnJlbnQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50LnNpYmxpbmcgOiBudWxsO1xuICAgICAgfVxuICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTk6XG4gICAgICBjb250ZXh0ID0gMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG4gICAgICBpZiAoMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKSB7XG4gICAgICAgIGlmIChjb250ZXh0KVxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgIH1cbiAgICAgIG5leHRWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBudWxsICE9PSBuZXh0VmFsdWUgJiZcbiAgICAgICAgKChuZXh0VmFsdWUucmVuZGVyaW5nID0gbnVsbCksXG4gICAgICAgIChuZXh0VmFsdWUudGFpbCA9IG51bGwpLFxuICAgICAgICAobmV4dFZhbHVlLmxhc3RFZmZlY3QgPSBudWxsKSk7XG4gICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICBpZiAoY29udGV4dCkgYnJlYWs7XG4gICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgIGNhc2UgMjI6XG4gICAgY2FzZSAyMzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDApLFxuICAgICAgICB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgKTtcbiAgfVxuICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xufVxudmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGwsXG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGwsXG4gIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IG51bGw7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9XG4gICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID1cbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9XG4gICAgICBudWxsO1xufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIoY29udGV4dCkge1xuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICBwb3AodmFsdWVDdXJzb3IpO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChwYXJlbnQsIHJlbmRlckxhbmVzLCBwcm9wYWdhdGlvblJvb3QpIHtcbiAgZm9yICg7IG51bGwgIT09IHBhcmVudDsgKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG4gICAgKHBhcmVudC5jaGlsZExhbmVzICYgcmVuZGVyTGFuZXMpICE9PSByZW5kZXJMYW5lc1xuICAgICAgPyAoKHBhcmVudC5jaGlsZExhbmVzIHw9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcykpXG4gICAgICA6IG51bGwgIT09IGFsdGVybmF0ZSAmJlxuICAgICAgICAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgJiByZW5kZXJMYW5lcykgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgaWYgKHBhcmVudCA9PT0gcHJvcGFnYXRpb25Sb290KSBicmVhaztcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgbGFzdEZ1bGx5T2JzZXJ2ZWRDb250ZXh0ID0gbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXM7XG4gIG51bGwgIT09IHdvcmtJblByb2dyZXNzICYmXG4gICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MuZmlyc3RDb250ZXh0ICYmXG4gICAgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyAmIHJlbmRlckxhbmVzKSAmJiAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAod29ya0luUHJvZ3Jlc3MuZmlyc3RDb250ZXh0ID0gbnVsbCkpO1xufVxuZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCkge1xuICByZXR1cm4gcmVhZENvbnRleHRGb3JDb25zdW1lcihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciwgY29udGV4dCk7XG59XG5mdW5jdGlvbiByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24oY29uc3VtZXIsIGNvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyICYmXG4gICAgcHJlcGFyZVRvUmVhZENvbnRleHQoY29uc3VtZXIsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY29uc3VtZXIsIGNvbnRleHQpO1xufVxuZnVuY3Rpb24gcmVhZENvbnRleHRGb3JDb25zdW1lcihjb25zdW1lciwgY29udGV4dCkge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gIGlmIChsYXN0RnVsbHlPYnNlcnZlZENvbnRleHQgIT09IGNvbnRleHQpXG4gICAgaWYgKFxuICAgICAgKChjb250ZXh0ID0geyBjb250ZXh0OiBjb250ZXh0LCBtZW1vaXplZFZhbHVlOiB2YWx1ZSwgbmV4dDogbnVsbCB9KSxcbiAgICAgIG51bGwgPT09IGxhc3RDb250ZXh0RGVwZW5kZW5jeSlcbiAgICApIHtcbiAgICAgIGlmIChudWxsID09PSBjb25zdW1lcilcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIlxuICAgICAgICApO1xuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dDtcbiAgICAgIGNvbnN1bWVyLmRlcGVuZGVuY2llcyA9IHsgbGFuZXM6IDAsIGZpcnN0Q29udGV4dDogY29udGV4dCB9O1xuICAgIH0gZWxzZSBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHQ7XG4gIHJldHVybiB2YWx1ZTtcbn1cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG5mdW5jdGlvbiBoYW5kbGVBc3luY0FjdGlvbigpIHt9XG5mdW5jdGlvbiBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZXRyeVF1ZXVlKSB7XG4gIG51bGwgIT09IHJldHJ5UXVldWVcbiAgICA/ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KVxuICAgIDogd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxNjM4NCAmJlxuICAgICAgKChyZXRyeVF1ZXVlID1cbiAgICAgICAgMjIgIT09IHdvcmtJblByb2dyZXNzLnRhZyA/IGNsYWltTmV4dFJldHJ5TGFuZSgpIDogNTM2ODcwOTEyKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyB8PSByZXRyeVF1ZXVlKSk7XG59XG5mdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgIGZvciAodmFyIGxhc3RUYWlsTm9kZSA9IG51bGw7IG51bGwgIT09IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjazsgKVxuICAgICAgICBudWxsICE9PSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2suYWx0ZXJuYXRlICYmXG4gICAgICAgICAgKGxhc3RUYWlsTm9kZSA9IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayksXG4gICAgICAgICAgKGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayA9IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjay5zaWJsaW5nKTtcbiAgICAgIG51bGwgPT09IGxhc3RUYWlsTm9kZVxuICAgICAgICA/IChyZW5kZXJTdGF0ZS50YWlsID0gbnVsbClcbiAgICAgICAgOiAobGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjb2xsYXBzZWRcIjpcbiAgICAgIGxhc3RUYWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICBmb3IgKHZhciBsYXN0VGFpbE5vZGUkNjEgPSBudWxsOyBudWxsICE9PSBsYXN0VGFpbE5vZGU7IClcbiAgICAgICAgbnVsbCAhPT0gbGFzdFRhaWxOb2RlLmFsdGVybmF0ZSAmJiAobGFzdFRhaWxOb2RlJDYxID0gbGFzdFRhaWxOb2RlKSxcbiAgICAgICAgICAobGFzdFRhaWxOb2RlID0gbGFzdFRhaWxOb2RlLnNpYmxpbmcpO1xuICAgICAgbnVsbCA9PT0gbGFzdFRhaWxOb2RlJDYxXG4gICAgICAgID8gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrIHx8IG51bGwgPT09IHJlbmRlclN0YXRlLnRhaWxcbiAgICAgICAgICA/IChyZW5kZXJTdGF0ZS50YWlsID0gbnVsbClcbiAgICAgICAgICA6IChyZW5kZXJTdGF0ZS50YWlsLnNpYmxpbmcgPSBudWxsKVxuICAgICAgICA6IChsYXN0VGFpbE5vZGUkNjEuc2libGluZyA9IG51bGwpO1xuICB9XG59XG5mdW5jdGlvbiBidWJibGVQcm9wZXJ0aWVzKGNvbXBsZXRlZFdvcmspIHtcbiAgdmFyIGRpZEJhaWxvdXQgPVxuICAgICAgbnVsbCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgIGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkID09PSBjb21wbGV0ZWRXb3JrLmNoaWxkLFxuICAgIG5ld0NoaWxkTGFuZXMgPSAwLFxuICAgIHN1YnRyZWVGbGFncyA9IDA7XG4gIGlmIChkaWRCYWlsb3V0KVxuICAgIGZvciAodmFyIGNoaWxkJDYyID0gY29tcGxldGVkV29yay5jaGlsZDsgbnVsbCAhPT0gY2hpbGQkNjI7IClcbiAgICAgIChuZXdDaGlsZExhbmVzIHw9IGNoaWxkJDYyLmxhbmVzIHwgY2hpbGQkNjIuY2hpbGRMYW5lcyksXG4gICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQkNjIuc3VidHJlZUZsYWdzICYgMzE0NTcyODApLFxuICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkJDYyLmZsYWdzICYgMzE0NTcyODApLFxuICAgICAgICAoY2hpbGQkNjIucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgIChjaGlsZCQ2MiA9IGNoaWxkJDYyLnNpYmxpbmcpO1xuICBlbHNlXG4gICAgZm9yIChjaGlsZCQ2MiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7IG51bGwgIT09IGNoaWxkJDYyOyApXG4gICAgICAobmV3Q2hpbGRMYW5lcyB8PSBjaGlsZCQ2Mi5sYW5lcyB8IGNoaWxkJDYyLmNoaWxkTGFuZXMpLFxuICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkJDYyLnN1YnRyZWVGbGFncyksXG4gICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQkNjIuZmxhZ3MpLFxuICAgICAgICAoY2hpbGQkNjIucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgIChjaGlsZCQ2MiA9IGNoaWxkJDYyLnNpYmxpbmcpO1xuICBjb21wbGV0ZWRXb3JrLnN1YnRyZWVGbGFncyB8PSBzdWJ0cmVlRmxhZ3M7XG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG4gIHJldHVybiBkaWRCYWlsb3V0O1xufVxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMTY6XG4gICAgY2FzZSAxNTpcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAxMTpcbiAgICBjYXNlIDc6XG4gICAgY2FzZSA4OlxuICAgIGNhc2UgMTI6XG4gICAgY2FzZSA5OlxuICAgIGNhc2UgMTQ6XG4gICAgICByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MudHlwZSkgJiYgcG9wQ29udGV4dCgpLFxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpLFxuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKCksXG4gICAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yKSxcbiAgICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxKSxcbiAgICAgICAgcmVuZGVyTGFuZXMucGVuZGluZ0NvbnRleHQgJiZcbiAgICAgICAgICAoKHJlbmRlckxhbmVzLmNvbnRleHQgPSByZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCksXG4gICAgICAgICAgKHJlbmRlckxhbmVzLnBlbmRpbmdDb250ZXh0ID0gbnVsbCkpLFxuICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50LmNoaWxkKSB8fFxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAoY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCAmJlxuICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2KSkgfHxcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAgIG51bGwgIT09IGh5ZHJhdGlvbkVycm9ycyAmJlxuICAgICAgICAgICAgKHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoaHlkcmF0aW9uRXJyb3JzKSxcbiAgICAgICAgICAgIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSkpLFxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDI2OlxuICAgIGNhc2UgMjc6XG4gICAgY2FzZSA1OlxuICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgIGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDk3NjY0KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICAgIHJlbmRlckxhbmVzID0gYWxsb2NhdGVUYWcoKTtcbiAgICAgICAgdHlwZSA9IGdldFZpZXdDb25maWdGb3JUeXBlKHR5cGUpO1xuICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZW1wdHlPYmplY3QsXG4gICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgdHlwZS52YWxpZEF0dHJpYnV0ZXNcbiAgICAgICAgKTtcbiAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5jcmVhdGVWaWV3KFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIHR5cGUudWlWaWV3Q2xhc3NOYW1lLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZFxuICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gbmV3IFJlYWN0TmF0aXZlRmliZXJIb3N0Q29tcG9uZW50KFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgICAgaW5zdGFuY2VDYWNoZS5zZXQocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5zZXQocmVuZGVyTGFuZXMsIG5ld1Byb3BzKTtcbiAgICAgICAgYTogZm9yIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSByZW5kZXJMYW5lczsgKSB7XG4gICAgICAgICAgaWYgKDUgPT09IHJlbmRlckxhbmVzLnRhZyB8fCA2ID09PSByZW5kZXJMYW5lcy50YWcpXG4gICAgICAgICAgICBjdXJyZW50Ll9jaGlsZHJlbi5wdXNoKHJlbmRlckxhbmVzLnN0YXRlTm9kZSk7XG4gICAgICAgICAgZWxzZSBpZiAoNCAhPT0gcmVuZGVyTGFuZXMudGFnICYmIG51bGwgIT09IHJlbmRlckxhbmVzLmNoaWxkKSB7XG4gICAgICAgICAgICByZW5kZXJMYW5lcy5jaGlsZC5yZXR1cm4gPSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgIHJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXMuY2hpbGQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlbmRlckxhbmVzID09PSB3b3JrSW5Qcm9ncmVzcykgYnJlYWsgYTtcbiAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gcmVuZGVyTGFuZXMuc2libGluZzsgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG51bGwgPT09IHJlbmRlckxhbmVzLnJldHVybiB8fFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcy5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICByZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVuZGVyTGFuZXMuc2libGluZy5yZXR1cm4gPSByZW5kZXJMYW5lcy5yZXR1cm47XG4gICAgICAgICAgcmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQ7XG4gICAgICAgIGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGN1cnJlbnQpICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KTtcbiAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MucmVmICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDk3NjY0KTtcbiAgICAgIH1cbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3O1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSA2OlxuICAgICAgaWYgKGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2YgbmV3UHJvcHMgJiYgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSByb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgICBpZiAoIWNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50LmlzSW5BUGFyZW50VGV4dClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiVGV4dCBzdHJpbmdzIG11c3QgYmUgcmVuZGVyZWQgd2l0aGluIGEgPFRleHQ+IGNvbXBvbmVudC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSBhbGxvY2F0ZVRhZygpO1xuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLmNyZWF0ZVZpZXcoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBcIlJDVFJhd1RleHRcIixcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICB7IHRleHQ6IG5ld1Byb3BzIH1cbiAgICAgICAgKTtcbiAgICAgICAgaW5zdGFuY2VDYWNoZS5zZXQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50O1xuICAgICAgfVxuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIDEzOlxuICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAobnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQpXG4gICAgICApIHtcbiAgICAgICAgaWYgKG51bGwgIT09IG5ld1Byb3BzICYmIG51bGwgIT09IG5ld1Byb3BzLmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiQSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudCB3YXMgY29tcGxldGVkIHdpdGhvdXQgYSBoeWRyYXRlZCBub2RlLiBUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RTdXNwZW5zZUluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpICYmXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGwpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQ7XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdHlwZSA9ICExO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBudWxsICE9PSBoeWRyYXRpb25FcnJvcnMgJiZcbiAgICAgICAgICAgIChxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGh5ZHJhdGlvbkVycm9ycyksIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSksXG4gICAgICAgICAgICAodHlwZSA9ICEwKTtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYgPyB3b3JrSW5Qcm9ncmVzcyA6IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSlcbiAgICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzKSwgd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZW5kZXJMYW5lcyA9IG51bGwgIT09IG5ld1Byb3BzO1xuICAgICAgcmVuZGVyTGFuZXMgIT09IChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgJiZcbiAgICAgICAgcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkLmZsYWdzIHw9IDgxOTIpO1xuICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpO1xuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gcG9wSG9zdENvbnRhaW5lcigpLCBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICBjYXNlIDEwOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MudHlwZS5fY29udGV4dCksXG4gICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMTc6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpc0NvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlKSAmJiBwb3BDb250ZXh0KCksXG4gICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMTk6XG4gICAgICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvcik7XG4gICAgICB0eXBlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsID09PSB0eXBlKSByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICBuZXdQcm9wcyA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gdHlwZS5yZW5kZXJpbmc7XG4gICAgICBpZiAobnVsbCA9PT0gdXBkYXRlUGF5bG9hZClcbiAgICAgICAgaWYgKG5ld1Byb3BzKSBjdXRPZmZUYWlsSWZOZWVkZWQodHlwZSwgITEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzIHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJiAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IGN1cnJlbnQ7ICkge1xuICAgICAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQodHlwZSwgITEpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB1cGRhdGVQYXlsb2FkLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudDtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApXG4gICAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHB1c2goXG4gICAgICAgICAgICAgICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yLFxuICAgICAgICAgICAgICAgICAgKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIDEpIHwgMlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gdHlwZS50YWlsICYmXG4gICAgICAgICAgICBub3coKSA+IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgJiZcbiAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgIChuZXdQcm9wcyA9ICEwKSxcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZCh0eXBlLCAhMSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSA0MTk0MzA0KSk7XG4gICAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoIW5ld1Byb3BzKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICgoY3VycmVudCA9IGZpbmRGaXJzdFN1c3BlbmRlZCh1cGRhdGVQYXlsb2FkKSksIG51bGwgIT09IGN1cnJlbnQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZCh0eXBlLCAhMCksXG4gICAgICAgICAgICAgIG51bGwgPT09IHR5cGUudGFpbCAmJlxuICAgICAgICAgICAgICAgIFwiaGlkZGVuXCIgPT09IHR5cGUudGFpbE1vZGUgJiZcbiAgICAgICAgICAgICAgICAhdXBkYXRlUGF5bG9hZC5hbHRlcm5hdGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIDIgKiBub3coKSAtIHR5cGUucmVuZGVyaW5nU3RhcnRUaW1lID5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSAmJlxuICAgICAgICAgICAgICA1MzY4NzA5MTIgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQodHlwZSwgITEpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSA0MTk0MzA0KSk7XG4gICAgICAgIHR5cGUuaXNCYWNrd2FyZHNcbiAgICAgICAgICA/ICgodXBkYXRlUGF5bG9hZC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gdXBkYXRlUGF5bG9hZCkpXG4gICAgICAgICAgOiAoKHJlbmRlckxhbmVzID0gdHlwZS5sYXN0KSxcbiAgICAgICAgICAgIG51bGwgIT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgID8gKHJlbmRlckxhbmVzLnNpYmxpbmcgPSB1cGRhdGVQYXlsb2FkKVxuICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHVwZGF0ZVBheWxvYWQpLFxuICAgICAgICAgICAgKHR5cGUubGFzdCA9IHVwZGF0ZVBheWxvYWQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSB0eXBlLnRhaWwpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gdHlwZS50YWlsKSxcbiAgICAgICAgICAodHlwZS5yZW5kZXJpbmcgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKHR5cGUudGFpbCA9IHdvcmtJblByb2dyZXNzLnNpYmxpbmcpLFxuICAgICAgICAgICh0eXBlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG51bGwpLFxuICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgcHVzaChcbiAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgICAgICBuZXdQcm9wcyA/IChyZW5kZXJMYW5lcyAmIDEpIHwgMiA6IHJlbmRlckxhbmVzICYgMVxuICAgICAgICAgICksXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAyMjpcbiAgICBjYXNlIDIzOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgcG9wSGlkZGVuQ29udGV4dCgpLFxuICAgICAgICAobmV3UHJvcHMgPSBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgID8gKG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MilcbiAgICAgICAgICA6IG5ld1Byb3BzICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyKSxcbiAgICAgICAgbmV3UHJvcHMgJiYgMCAhPT0gKHdvcmtJblByb2dyZXNzLm1vZGUgJiAxKVxuICAgICAgICAgID8gMCAhPT0gKHJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSAmJlxuICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgKGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzICYgNiAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MikpXG4gICAgICAgICAgOiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpLFxuICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzLnJldHJ5UXVldWUpLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMjQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIDI1OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdGhyb3cgRXJyb3IoXG4gICAgXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyArXG4gICAgICBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgKTtcbn1cbmZ1bmN0aW9uIHVud2luZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpc0NvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlKSAmJiBwb3BDb250ZXh0KCksXG4gICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MpLFxuICAgICAgICBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLCB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICA6IG51bGxcbiAgICAgICk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcigpLFxuICAgICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciksXG4gICAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSksXG4gICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MpLFxuICAgICAgICAwICE9PSAoY3VycmVudCAmIDY1NTM2KSAmJiAwID09PSAoY3VycmVudCAmIDEyOClcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLCB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICA6IG51bGxcbiAgICAgICk7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgY2FzZSAxMzpcbiAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50LmRlaHlkcmF0ZWQgJiZcbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiVGhyZXcgaW4gbmV3bHkgbW91bnRlZCBkZWh5ZHJhdGVkIGNvbXBvbmVudC4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG4gICAgICByZXR1cm4gY3VycmVudCAmIDY1NTM2XG4gICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksIHdvcmtJblByb2dyZXNzKVxuICAgICAgICA6IG51bGw7XG4gICAgY2FzZSAxOTpcbiAgICAgIHJldHVybiBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciksIG51bGw7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIHBvcEhvc3RDb250YWluZXIoKSwgbnVsbDtcbiAgICBjYXNlIDEwOlxuICAgICAgcmV0dXJuIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQpLCBudWxsO1xuICAgIGNhc2UgMjI6XG4gICAgY2FzZSAyMzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIHBvcEhpZGRlbkNvbnRleHQoKSxcbiAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDI0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAyNTpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIGludGVycnVwdGVkV29yaykge1xuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIDE6XG4gICAgICBjdXJyZW50ID0gaW50ZXJydXB0ZWRXb3JrLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmIHZvaWQgMCAhPT0gY3VycmVudCAmJiBwb3BDb250ZXh0KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKCk7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvcik7XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE5OlxuICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDpcbiAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yay50eXBlLl9jb250ZXh0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgY2FzZSAyMzpcbiAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspLCBwb3BIaWRkZW5Db250ZXh0KCk7XG4gIH1cbn1cbnZhciBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSAhMSxcbiAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9ICExLFxuICBQb3NzaWJseVdlYWtTZXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrU2V0ID8gV2Vha1NldCA6IFNldCxcbiAgbmV4dEVmZmVjdCA9IG51bGw7XG5mdW5jdGlvbiBzYWZlbHlBdHRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICB0cnkge1xuICAgIHZhciByZWYgPSBjdXJyZW50LnJlZjtcbiAgICBpZiAobnVsbCAhPT0gcmVmKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcbiAgICAgIHN3aXRjaCAoY3VycmVudC50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHZhciBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGluc3RhbmNlVG9Vc2UgPSBpbnN0YW5jZTtcbiAgICAgIH1cbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZlxuICAgICAgICA/IChjdXJyZW50LnJlZkNsZWFudXAgPSByZWYoaW5zdGFuY2VUb1VzZSkpXG4gICAgICAgIDogKHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgfVxufVxuZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgdmFyIHJlZiA9IGN1cnJlbnQucmVmLFxuICAgIHJlZkNsZWFudXAgPSBjdXJyZW50LnJlZkNsZWFudXA7XG4gIGlmIChudWxsICE9PSByZWYpXG4gICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZkNsZWFudXApXG4gICAgICB0cnkge1xuICAgICAgICByZWZDbGVhbnVwKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoY3VycmVudC5yZWZDbGVhbnVwID0gbnVsbCksXG4gICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LmFsdGVybmF0ZSksXG4gICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmIChjdXJyZW50LnJlZkNsZWFudXAgPSBudWxsKTtcbiAgICAgIH1cbiAgICBlbHNlIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWYpXG4gICAgICB0cnkge1xuICAgICAgICByZWYobnVsbCk7XG4gICAgICB9IGNhdGNoIChlcnJvciQ3Nykge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvciQ3Nyk7XG4gICAgICB9XG4gICAgZWxzZSByZWYuY3VycmVudCA9IG51bGw7XG59XG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZXN0cm95KSB7XG4gIHRyeSB7XG4gICAgZGVzdHJveSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgfVxufVxudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9ICExO1xuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpcnN0Q2hpbGQpIHtcbiAgZm9yIChuZXh0RWZmZWN0ID0gZmlyc3RDaGlsZDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKVxuICAgIGlmIChcbiAgICAgICgocm9vdCA9IG5leHRFZmZlY3QpLFxuICAgICAgKGZpcnN0Q2hpbGQgPSByb290LmNoaWxkKSxcbiAgICAgIDAgIT09IChyb290LnN1YnRyZWVGbGFncyAmIDEwMjgpICYmIG51bGwgIT09IGZpcnN0Q2hpbGQpXG4gICAgKVxuICAgICAgKGZpcnN0Q2hpbGQucmV0dXJuID0gcm9vdCksIChuZXh0RWZmZWN0ID0gZmlyc3RDaGlsZCk7XG4gICAgZWxzZVxuICAgICAgZm9yICg7IG51bGwgIT09IG5leHRFZmZlY3Q7ICkge1xuICAgICAgICByb290ID0gbmV4dEVmZmVjdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IHJvb3QuYWx0ZXJuYXRlLFxuICAgICAgICAgICAgZmxhZ3MgPSByb290LmZsYWdzO1xuICAgICAgICAgIHN3aXRjaCAocm9vdC50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGlmICgwICE9PSAoZmxhZ3MgJiAxMDI0KSAmJiBudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gcm9vdC5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgICBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICByb290LmVsZW1lbnRUeXBlID09PSByb290LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICA/IHByZXZQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhyb290LnR5cGUsIHByZXZQcm9wcyksXG4gICAgICAgICAgICAgICAgICAgIHByZXZTdGF0ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHNuYXBzaG90O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAoMCAhPT0gKGZsYWdzICYgMTAyNCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Iocm9vdCwgcm9vdC5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdENoaWxkID0gcm9vdC5zaWJsaW5nO1xuICAgICAgICBpZiAobnVsbCAhPT0gZmlyc3RDaGlsZCkge1xuICAgICAgICAgIGZpcnN0Q2hpbGQucmV0dXJuID0gcm9vdC5yZXR1cm47XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEVmZmVjdCA9IHJvb3QucmV0dXJuO1xuICAgICAgfVxuICBjdXJyZW50ID0gc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyO1xuICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSAhMTtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gIGZsYWdzLFxuICBmaW5pc2hlZFdvcmssXG4gIG5lYXJlc3RNb3VudGVkQW5jZXN0b3Jcbikge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHVwZGF0ZVF1ZXVlID0gbnVsbCAhPT0gdXBkYXRlUXVldWUgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcbiAgaWYgKG51bGwgIT09IHVwZGF0ZVF1ZXVlKSB7XG4gICAgdmFyIGVmZmVjdCA9ICh1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLm5leHQpO1xuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MpIHtcbiAgICAgICAgdmFyIGluc3QgPSBlZmZlY3QuaW5zdCxcbiAgICAgICAgICBkZXN0cm95ID0gaW5zdC5kZXN0cm95O1xuICAgICAgICB2b2lkIDAgIT09IGRlc3Ryb3kgJiZcbiAgICAgICAgICAoKGluc3QuZGVzdHJveSA9IHZvaWQgMCksXG4gICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koZmluaXNoZWRXb3JrLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZXN0cm95KSk7XG4gICAgICB9XG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IHVwZGF0ZVF1ZXVlKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChmbGFncywgZmluaXNoZWRXb3JrKSB7XG4gIGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgZmluaXNoZWRXb3JrID0gbnVsbCAhPT0gZmluaXNoZWRXb3JrID8gZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QgOiBudWxsO1xuICBpZiAobnVsbCAhPT0gZmluaXNoZWRXb3JrKSB7XG4gICAgdmFyIGVmZmVjdCA9IChmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsubmV4dCk7XG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICB2YXIgY3JlYXRlJDc4ID0gZWZmZWN0LmNyZWF0ZSxcbiAgICAgICAgICBpbnN0ID0gZWZmZWN0Lmluc3Q7XG4gICAgICAgIGNyZWF0ZSQ3OCA9IGNyZWF0ZSQ3OCgpO1xuICAgICAgICBpbnN0LmRlc3Ryb3kgPSBjcmVhdGUkNzg7XG4gICAgICB9XG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpbmlzaGVkV29yayk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gIHRyeSB7XG4gICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIGlmIChudWxsICE9PSB1cGRhdGVRdWV1ZSkge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAxMTpcbiAgICBjYXNlIDE1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA0ICYmIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgNSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBpZiAoZmxhZ3MgJiA0KVxuICAgICAgICBpZiAoKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKSwgbnVsbCA9PT0gY3VycmVudCkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2UHJvcHMgPVxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZVxuICAgICAgICAgICAgICA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmluaXNoZWRSb290LmNvbXBvbmVudERpZFVwZGF0ZShcbiAgICAgICAgICAgICAgcHJldlByb3BzLFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IkNzkpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgIGVycm9yJDc5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgZmxhZ3MgJiA2NCAmJiBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBpZiAoZmxhZ3MgJiA2NCAmJiAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSwgbnVsbCAhPT0gZmxhZ3MpKSB7XG4gICAgICAgIGZpbmlzaGVkUm9vdCA9IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9PSBmaW5pc2hlZFdvcmsuY2hpbGQpXG4gICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QgPSBnZXRQdWJsaWNJbnN0YW5jZShmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbW1pdENhbGxiYWNrcyhmbGFncywgZmluaXNoZWRSb290KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgaWYgKDAgIT09IChmaW5pc2hlZFdvcmsubW9kZSAmIDEpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHByZXZQcm9wcyA9XG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSB8fCBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4pLFxuICAgICAgICAgICFwcmV2UHJvcHMpXG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbixcbiAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBwcmV2UHJvcHM7XG4gICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBjdXJyZW50KSAmJlxuICAgICAgICAgICFwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlblxuICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiA4NzcyKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgIChcIm1hbnVhbFwiID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5tb2RlXG4gICAgICAgICAgPyBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKVxuICAgICAgICAgIDogc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybikpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgfVxufVxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmXG4gICAgKChmaWJlci5hbHRlcm5hdGUgPSBudWxsKSwgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoYWx0ZXJuYXRlKSk7XG4gIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgZmliZXIuZGVsZXRpb25zID0gbnVsbDtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xufVxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiA1ID09PSBmaWJlci50YWcgfHwgMyA9PT0gZmliZXIudGFnIHx8IDQgPT09IGZpYmVyLnRhZztcbn1cbmZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gIGE6IGZvciAoOzspIHtcbiAgICBmb3IgKDsgbnVsbCA9PT0gZmliZXIuc2libGluZzsgKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZmliZXIucmV0dXJuIHx8IGlzSG9zdFBhcmVudChmaWJlci5yZXR1cm4pKSByZXR1cm4gbnVsbDtcbiAgICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICAgIH1cbiAgICBmaWJlci5zaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICBmb3IgKFxuICAgICAgZmliZXIgPSBmaWJlci5zaWJsaW5nO1xuICAgICAgNSAhPT0gZmliZXIudGFnICYmIDYgIT09IGZpYmVyLnRhZyAmJiAxOCAhPT0gZmliZXIudGFnO1xuXG4gICAgKSB7XG4gICAgICBpZiAoZmliZXIuZmxhZ3MgJiAyKSBjb250aW51ZSBhO1xuICAgICAgaWYgKG51bGwgPT09IGZpYmVyLmNoaWxkIHx8IDQgPT09IGZpYmVyLnRhZykgY29udGludWUgYTtcbiAgICAgIGVsc2UgKGZpYmVyLmNoaWxkLnJldHVybiA9IGZpYmVyKSwgKGZpYmVyID0gZmliZXIuY2hpbGQpO1xuICAgIH1cbiAgICBpZiAoIShmaWJlci5mbGFncyAmIDIpKSByZXR1cm4gZmliZXIuc3RhdGVOb2RlO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgaWYgKDUgPT09IHRhZyB8fCA2ID09PSB0YWcpXG4gICAgaWYgKCgobm9kZSA9IG5vZGUuc3RhdGVOb2RlKSwgYmVmb3JlKSkge1xuICAgICAgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiBwYXJlbnQpXG4gICAgICAgIHRocm93IEVycm9yKFwiQ29udGFpbmVyIGRvZXMgbm90IHN1cHBvcnQgaW5zZXJ0QmVmb3JlIG9wZXJhdGlvblwiKTtcbiAgICB9IGVsc2VcbiAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIuc2V0Q2hpbGRyZW4ocGFyZW50LCBbXG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBub2RlID8gbm9kZSA6IG5vZGUuX25hdGl2ZVRhZ1xuICAgICAgXSk7XG4gIGVsc2UgaWYgKDQgIT09IHRhZyAmJiAoKG5vZGUgPSBub2RlLmNoaWxkKSwgbnVsbCAhPT0gbm9kZSkpXG4gICAgZm9yIChcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgbnVsbCAhPT0gbm9kZTtcblxuICAgIClcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAobm9kZSA9IG5vZGUuc2libGluZyk7XG59XG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICBpZiAoNSA9PT0gdGFnIHx8IDYgPT09IHRhZylcbiAgICBpZiAoKChub2RlID0gbm9kZS5zdGF0ZU5vZGUpLCBiZWZvcmUpKSB7XG4gICAgICB0YWcgPSBwYXJlbnQuX2NoaWxkcmVuO1xuICAgICAgdmFyIGluZGV4ID0gdGFnLmluZGV4T2Yobm9kZSk7XG4gICAgICAwIDw9IGluZGV4XG4gICAgICAgID8gKHRhZy5zcGxpY2UoaW5kZXgsIDEpLFxuICAgICAgICAgIChiZWZvcmUgPSB0YWcuaW5kZXhPZihiZWZvcmUpKSxcbiAgICAgICAgICB0YWcuc3BsaWNlKGJlZm9yZSwgMCwgbm9kZSksXG4gICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tYW5hZ2VDaGlsZHJlbihcbiAgICAgICAgICAgIHBhcmVudC5fbmF0aXZlVGFnLFxuICAgICAgICAgICAgW2luZGV4XSxcbiAgICAgICAgICAgIFtiZWZvcmVdLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKSlcbiAgICAgICAgOiAoKGJlZm9yZSA9IHRhZy5pbmRleE9mKGJlZm9yZSkpLFxuICAgICAgICAgIHRhZy5zcGxpY2UoYmVmb3JlLCAwLCBub2RlKSxcbiAgICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLm1hbmFnZUNoaWxkcmVuKFxuICAgICAgICAgICAgcGFyZW50Ll9uYXRpdmVUYWcsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgW1wibnVtYmVyXCIgPT09IHR5cGVvZiBub2RlID8gbm9kZSA6IG5vZGUuX25hdGl2ZVRhZ10sXG4gICAgICAgICAgICBbYmVmb3JlXSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKSk7XG4gICAgfSBlbHNlXG4gICAgICAoYmVmb3JlID0gXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5vZGUgPyBub2RlIDogbm9kZS5fbmF0aXZlVGFnKSxcbiAgICAgICAgKHRhZyA9IHBhcmVudC5fY2hpbGRyZW4pLFxuICAgICAgICAoaW5kZXggPSB0YWcuaW5kZXhPZihub2RlKSksXG4gICAgICAgIDAgPD0gaW5kZXhcbiAgICAgICAgICA/ICh0YWcuc3BsaWNlKGluZGV4LCAxKSxcbiAgICAgICAgICAgIHRhZy5wdXNoKG5vZGUpLFxuICAgICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tYW5hZ2VDaGlsZHJlbihcbiAgICAgICAgICAgICAgcGFyZW50Ll9uYXRpdmVUYWcsXG4gICAgICAgICAgICAgIFtpbmRleF0sXG4gICAgICAgICAgICAgIFt0YWcubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICkpXG4gICAgICAgICAgOiAodGFnLnB1c2gobm9kZSksXG4gICAgICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLm1hbmFnZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBwYXJlbnQuX25hdGl2ZVRhZyxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICBbYmVmb3JlXSxcbiAgICAgICAgICAgICAgW3RhZy5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICkpO1xuICBlbHNlIGlmICg0ICE9PSB0YWcgJiYgKChub2RlID0gbm9kZS5jaGlsZCksIG51bGwgIT09IG5vZGUpKVxuICAgIGZvciAoXG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpLCBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgbnVsbCAhPT0gbm9kZTtcblxuICAgIClcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCksIChub2RlID0gbm9kZS5zaWJsaW5nKTtcbn1cbnZhciBob3N0UGFyZW50ID0gbnVsbCxcbiAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITE7XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICBmaW5pc2hlZFJvb3QsXG4gIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gIHBhcmVudFxuKSB7XG4gIGZvciAocGFyZW50ID0gcGFyZW50LmNoaWxkOyBudWxsICE9PSBwYXJlbnQ7IClcbiAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkUm9vdCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgcGFyZW50KSxcbiAgICAgIChwYXJlbnQgPSBwYXJlbnQuc2libGluZyk7XG59XG5mdW5jdGlvbiBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKFxuICBmaW5pc2hlZFJvb3QsXG4gIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gIGRlbGV0ZWRGaWJlclxuKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KVxuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZGVsZXRlZEZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHt9XG4gIHN3aXRjaCAoZGVsZXRlZEZpYmVyLnRhZykge1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQsXG4gICAgICAgIHByZXZIb3N0UGFyZW50SXNDb250YWluZXIgPSBob3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICBob3N0UGFyZW50ID0gbnVsbDtcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICApO1xuICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgIG51bGwgIT09IGhvc3RQYXJlbnQgJiZcbiAgICAgICAgKGhvc3RQYXJlbnRJc0NvbnRhaW5lclxuICAgICAgICAgID8gKChmaW5pc2hlZFJvb3QgPSBob3N0UGFyZW50KSxcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VW5jYWNoZUZpYmVyTm9kZShkZWxldGVkRmliZXIuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIubWFuYWdlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIFswXVxuICAgICAgICAgICAgKSlcbiAgICAgICAgICA6ICgoZmluaXNoZWRSb290ID0gaG9zdFBhcmVudCksXG4gICAgICAgICAgICAobmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgcmVjdXJzaXZlbHlVbmNhY2hlRmliZXJOb2RlKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpLFxuICAgICAgICAgICAgKGRlbGV0ZWRGaWJlciA9IGZpbmlzaGVkUm9vdC5fY2hpbGRyZW4pLFxuICAgICAgICAgICAgKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IgPSBkZWxldGVkRmliZXIuaW5kZXhPZihcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBkZWxldGVkRmliZXIuc3BsaWNlKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIDEpLFxuICAgICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5tYW5hZ2VDaGlsZHJlbihcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290Ll9uYXRpdmVUYWcsXG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICBbbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcl1cbiAgICAgICAgICAgICkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTg6XG4gICAgICBudWxsICE9PSBob3N0UGFyZW50ICYmIHNoaW0kMSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgIGhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICApO1xuICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDExOlxuICAgIGNhc2UgMTQ6XG4gICAgY2FzZSAxNTpcbiAgICAgIGlmIChcbiAgICAgICAgIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gJiZcbiAgICAgICAgKChwcmV2SG9zdFBhcmVudCA9IGRlbGV0ZWRGaWJlci51cGRhdGVRdWV1ZSksXG4gICAgICAgIG51bGwgIT09IHByZXZIb3N0UGFyZW50ICYmXG4gICAgICAgICAgKChwcmV2SG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50Lmxhc3RFZmZlY3QpLFxuICAgICAgICAgIG51bGwgIT09IHByZXZIb3N0UGFyZW50KSlcbiAgICAgICkge1xuICAgICAgICBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudC5uZXh0O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIHRhZyA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXIudGFnLFxuICAgICAgICAgICAgaW5zdCA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXIuaW5zdCxcbiAgICAgICAgICAgIGRlc3Ryb3kgPSBpbnN0LmRlc3Ryb3k7XG4gICAgICAgICAgdm9pZCAwICE9PSBkZXN0cm95ICYmXG4gICAgICAgICAgICAoMCAhPT0gKHRhZyAmIDIpXG4gICAgICAgICAgICAgID8gKChpbnN0LmRlc3Ryb3kgPSB2b2lkIDApLFxuICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3lcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICA6IDAgIT09ICh0YWcgJiA0KSAmJlxuICAgICAgICAgICAgICAgICgoaW5zdC5kZXN0cm95ID0gdm9pZCAwKSxcbiAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgICBkZXN0cm95XG4gICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgIHByZXZIb3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKHByZXZIb3N0UGFyZW50SXNDb250YWluZXIgIT09IHByZXZIb3N0UGFyZW50KTtcbiAgICAgIH1cbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgaWYgKFxuICAgICAgICAhb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiAmJlxuICAgICAgICAoc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciksXG4gICAgICAgIChwcmV2SG9zdFBhcmVudCA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcmV2SG9zdFBhcmVudC5jb21wb25lbnRXaWxsVW5tb3VudClcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAocHJldkhvc3RQYXJlbnQucHJvcHMgPSBkZWxldGVkRmliZXIubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgICAocHJldkhvc3RQYXJlbnQuc3RhdGUgPSBkZWxldGVkRmliZXIubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBwcmV2SG9zdFBhcmVudC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjE6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgIGRlbGV0ZWRGaWJlci5tb2RlICYgMVxuICAgICAgICA/ICgob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9XG4gICAgICAgICAgICAocHJldkhvc3RQYXJlbnQgPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB8fFxuICAgICAgICAgICAgbnVsbCAhPT0gZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKSxcbiAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZIb3N0UGFyZW50KSlcbiAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgMTM6XG4gICAgY2FzZSAxOTpcbiAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgIG51bGwgPT09IHJldHJ5Q2FjaGUgJiZcbiAgICAgICAgKHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKTtcbiAgICAgIHJldHVybiByZXRyeUNhY2hlO1xuICAgIGNhc2UgMjI6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksXG4gICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlKSxcbiAgICAgICAgbnVsbCA9PT0gcmV0cnlDYWNoZSAmJlxuICAgICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKSxcbiAgICAgICAgcmV0cnlDYWNoZVxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiVW5leHBlY3RlZCBTdXNwZW5zZSBoYW5kbGVyIHRhZyAoXCIgK1xuICAgICAgICAgIGZpbmlzaGVkV29yay50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIHdha2VhYmxlcykge1xuICB2YXIgcmV0cnlDYWNoZSA9IGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKTtcbiAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcbiAgICByZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkgfHxcbiAgICAgIChyZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSksIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290JGpzY29tcCQwLCBwYXJlbnRGaWJlcikge1xuICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByb290ID0gcm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICByZXR1cm5GaWJlciA9IHBhcmVudEZpYmVyLFxuICAgICAgICAgIHBhcmVudCA9IHJldHVybkZpYmVyO1xuICAgICAgICBhOiBmb3IgKDsgbnVsbCAhPT0gcGFyZW50OyApIHtcbiAgICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGhvc3RQYXJlbnQgPSBwYXJlbnQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITA7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGhvc3RQYXJlbnQgPSBwYXJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICEwO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudWxsID09PSBob3N0UGFyZW50KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKHJvb3QsIHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgICAgaG9zdFBhcmVudCA9IG51bGw7XG4gICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICExO1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gY2hpbGRUb0RlbGV0ZS5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLnJldHVybiA9IG51bGwpO1xuICAgICAgICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjaGlsZFRvRGVsZXRlLCBwYXJlbnRGaWJlciwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEyODU0KVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIocGFyZW50RmliZXIsIHJvb3QkanNjb21wJDApLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KSB7XG4gIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTE6XG4gICAgY2FzZSAxNDpcbiAgICBjYXNlIDE1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDMsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiksXG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KDMsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoNSwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IkODcpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yJDg3KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybik7XG4gICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiAmJlxuICAgICAgICAoKGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yayAmJlxuICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsuY2FsbGJhY2tzKSxcbiAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gZmluaXNoZWRXb3JrLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MpLFxuICAgICAgICAgICAgKGZpbmlzaGVkV29yay5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID1cbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCA/IGZsYWdzIDogY3VycmVudC5jb25jYXQoZmxhZ3MpKSkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKTtcbiAgICAgIGlmIChmbGFncyAmIDQgJiYgKChmbGFncyA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpLCBudWxsICE9IGZsYWdzKSkge1xuICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgdmlld0NvbmZpZyA9IGZsYWdzLnZpZXdDb25maWc7XG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5zZXQoZmxhZ3MuX25hdGl2ZVRhZywgbmV3UHJvcHMpO1xuICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZGlmZlByb3BlcnRpZXMoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgdmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIG51bGwgIT0gdXBkYXRlUGF5bG9hZCAmJlxuICAgICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci51cGRhdGVWaWV3KFxuICAgICAgICAgICAgICBmbGFncy5fbmF0aXZlVGFnLFxuICAgICAgICAgICAgICB2aWV3Q29uZmlnLnVpVmlld0NsYXNzTmFtZSxcbiAgICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IkOTApIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yJDkwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci51cGRhdGVWaWV3KFxuICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICBcIlJDVFJhd1RleHRcIixcbiAgICAgICAgICAgIHsgdGV4dDogY3VycmVudCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IkOTEpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yJDkxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZpbmlzaGVkV29yay5jaGlsZC5mbGFncyAmIDgxOTIgJiZcbiAgICAgICAgKChjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpLFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSB8fFxuICAgICAgICAgIGN1cnJlbnQgfHxcbiAgICAgICAgICAoZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdygpKSk7XG4gICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgKChmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgZmxhZ3MpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgdmlld0NvbmZpZyA9IG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKGZpbmlzaGVkV29yay5tb2RlICYgMSkge1xuICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbixcbiAgICAgICAgICBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgdmlld0NvbmZpZztcbiAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9XG4gICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHwgdXBkYXRlUGF5bG9hZDtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICB9IGVsc2UgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgIHJvb3QuX2N1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gICAgICByb290Ll92aXNpYmlsaXR5ICY9IC0zO1xuICAgICAgcm9vdC5fdmlzaWJpbGl0eSB8PSByb290Ll9wZW5kaW5nVmlzaWJpbGl0eSAmIDI7XG4gICAgICBpZiAoXG4gICAgICAgIGZsYWdzICYgODE5MiAmJlxuICAgICAgICAoKHJvb3QuX3Zpc2liaWxpdHkgPSB2aWV3Q29uZmlnXG4gICAgICAgICAgPyByb290Ll92aXNpYmlsaXR5ICYgLTJcbiAgICAgICAgICA6IHJvb3QuX3Zpc2liaWxpdHkgfCAxKSxcbiAgICAgICAgdmlld0NvbmZpZyAmJlxuICAgICAgICAgICgocm9vdCA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiB8fCBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSxcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkIHx8XG4gICAgICAgICAgICByb290IHx8XG4gICAgICAgICAgICAoMCAhPT0gKGZpbmlzaGVkV29yay5tb2RlICYgMSkgJiZcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKSkpLFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgIFwibWFudWFsXCIgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLm1vZGUpXG4gICAgICApXG4gICAgICAgIGE6IGZvciAoY3VycmVudCA9IG51bGwsIHJvb3QgPSBmaW5pc2hlZFdvcms7IDsgKSB7XG4gICAgICAgICAgaWYgKDUgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgICBjdXJyZW50ID0gcm9vdDtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKChuZXdQcm9wcyA9IHJvb3Quc3RhdGVOb2RlKSwgdmlld0NvbmZpZykpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB2aWV3Q29uZmlnJGpzY29tcCQwID0gbmV3UHJvcHMudmlld0NvbmZpZztcbiAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkJGpzY29tcCQwID0gZGlmZlByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVtcHR5T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICB7IHN0eWxlOiB7IGRpc3BsYXk6IFwibm9uZVwiIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbmZpZyRqc2NvbXAkMC52YWxpZEF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLnVwZGF0ZVZpZXcoXG4gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLl9uYXRpdmVUYWcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdDb25maWckanNjb21wJDAudWlWaWV3Q2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQYXlsb2FkJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByb290LnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSByb290Lm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdDb25maWckanNjb21wJDEgPSBpbnN0YW5jZS52aWV3Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICBwcmV2UHJvcHMgPSBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IFtwcm9wcy5zdHlsZSwgeyBkaXNwbGF5OiBcIm5vbmVcIiB9XVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkJGpzY29tcCQxID0gZGlmZlByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdDb25maWckanNjb21wJDEudmFsaWRBdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci51cGRhdGVWaWV3KFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5fbmF0aXZlVGFnLFxuICAgICAgICAgICAgICAgICAgICB2aWV3Q29uZmlnJGpzY29tcCQxLnVpVmlld0NsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCRqc2NvbXAkMVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICg2ID09PSByb290LnRhZykge1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJOb3QgeWV0IGltcGxlbWVudGVkLlwiKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IkODEpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgICAgICBlcnJvciQ4MVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgKCgyMiAhPT0gcm9vdC50YWcgJiYgMjMgIT09IHJvb3QudGFnKSB8fFxuICAgICAgICAgICAgICBudWxsID09PSByb290Lm1lbW9pemVkU3RhdGUgfHxcbiAgICAgICAgICAgICAgcm9vdCA9PT0gZmluaXNoZWRXb3JrKSAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gcm9vdC5jaGlsZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcm9vdC5jaGlsZC5yZXR1cm4gPSByb290O1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QuY2hpbGQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJvb3QgPT09IGZpbmlzaGVkV29yaykgYnJlYWsgYTtcbiAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gcm9vdC5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSByb290LnJldHVybiB8fCByb290LnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSBicmVhayBhO1xuICAgICAgICAgICAgY3VycmVudCA9PT0gcm9vdCAmJiAoY3VycmVudCA9IG51bGwpO1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50ID09PSByb290ICYmIChjdXJyZW50ID0gbnVsbCk7XG4gICAgICAgICAgcm9vdC5zaWJsaW5nLnJldHVybiA9IHJvb3QucmV0dXJuO1xuICAgICAgICAgIHJvb3QgPSByb290LnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAoKGN1cnJlbnQgPSBmbGFncy5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAoKGZsYWdzLnJldHJ5UXVldWUgPSBudWxsKSxcbiAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBjdXJyZW50KSkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTk6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBmbGFncykpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjE6XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspLFxuICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gIGlmIChmbGFncyAmIDIpIHtcbiAgICB0cnkge1xuICAgICAgYToge1xuICAgICAgICBmb3IgKHZhciBwYXJlbnQgPSBmaW5pc2hlZFdvcmsucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7ICkge1xuICAgICAgICAgIGlmIChpc0hvc3RQYXJlbnQocGFyZW50KSkge1xuICAgICAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHBhcmVudDtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnRhZykge1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdmFyIHBhcmVudCRqc2NvbXAkMCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5zdGF0ZU5vZGU7XG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmZsYWdzICYgMzIgJiZcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuZmxhZ3MgJj0gLTMzKTtcbiAgICAgICAgICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCRqc2NvbXAkMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHZhciBwYXJlbnQkODIgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sXG4gICAgICAgICAgICBiZWZvcmUkODMgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBiZWZvcmUkODMsXG4gICAgICAgICAgICBwYXJlbnQkODJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgfVxuICAgIGZpbmlzaGVkV29yay5mbGFncyAmPSAtMztcbiAgfVxuICBmbGFncyAmIDQwOTYgJiYgKGZpbmlzaGVkV29yay5mbGFncyAmPSAtNDA5Nyk7XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhyb290LCBwYXJlbnRGaWJlcikge1xuICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKHJvb3QsIHBhcmVudEZpYmVyLmFsdGVybmF0ZSwgcGFyZW50RmliZXIpLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgIHZhciBmaW5pc2hlZFdvcmsgPSBwYXJlbnRGaWJlcjtcbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICBjYXNlIDE0OlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDQsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gZmluaXNoZWRXb3JrLnJldHVybjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQkanNjb21wJDAgPSBjdXJyZW50O1xuICAgICAgICAgICAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50JGpzY29tcCQwLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQkanNjb21wJDAubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI2OlxuICAgICAgY2FzZSAyNzpcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyMjpcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gIGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgcGFyZW50RmliZXIsXG4gIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbikge1xuICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID1cbiAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIDAgIT09IChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiA4NzcyKTtcbiAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgdmFyIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgICAgIGZpbmlzaGVkV29yayA9IHBhcmVudEZpYmVyLFxuICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgY29tbWl0SG9va0xheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCA0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgIGlmIChudWxsICE9PSBmaW5pc2hlZFJvb3QpIHtcbiAgICAgICAgICB2YXIgaGlkZGVuQ2FsbGJhY2tzID0gZmluaXNoZWRSb290LnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGhpZGRlbkNhbGxiYWNrcylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID0gbnVsbCwgZmluaXNoZWRSb290ID0gMDtcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290IDwgaGlkZGVuQ2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290KytcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY2FsbENhbGxiYWNrKGhpZGRlbkNhbGxiYWNrc1tmaW5pc2hlZFJvb3RdLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI2OlxuICAgICAgY2FzZSAyNzpcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjI6XG4gICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gIHRyeSB7XG4gICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKHJvb3QsIHBhcmVudEZpYmVyKSB7XG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKHJvb3QsIHBhcmVudEZpYmVyKSxcbiAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG59XG5mdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTE6XG4gICAgY2FzZSAxNTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgMjA0OCAmJiBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIDkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyMzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZVxuICAgICAgICA/IGZsYWdzLl92aXNpYmlsaXR5ICYgNFxuICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspXG4gICAgICAgICAgOiBmaW5pc2hlZFdvcmsubW9kZSAmIDEgfHxcbiAgICAgICAgICAgICgoZmxhZ3MuX3Zpc2liaWxpdHkgfD0gNCksXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykpXG4gICAgICAgIDogZmxhZ3MuX3Zpc2liaWxpdHkgJiA0XG4gICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspXG4gICAgICAgIDogKChmbGFncy5fdmlzaWJpbGl0eSB8PSA0KSxcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjQ6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gIGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgcGFyZW50RmliZXJcbikge1xuICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICB2YXIgZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290JGpzY29tcCQwLFxuICAgICAgZmluaXNoZWRXb3JrID0gcGFyZW50RmliZXI7XG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCA4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIzOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjI6XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgPyBpbnN0YW5jZS5fdmlzaWJpbGl0eSAmIDRcbiAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBmaW5pc2hlZFdvcmsubW9kZSAmIDEgfHxcbiAgICAgICAgICAgICAgKChpbnN0YW5jZS5fdmlzaWJpbGl0eSB8PSA0KSxcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICA6ICgoaW5zdGFuY2UuX3Zpc2liaWxpdHkgfD0gNCksXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICApKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgfVxuICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgfVxufVxudmFyIHN1c3BlbnNleUNvbW1pdEZsYWcgPSA4MTkyO1xuZnVuY3Rpb24gcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KHBhcmVudEZpYmVyKSB7XG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBzdXNwZW5zZXlDb21taXRGbGFnKVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKHBhcmVudEZpYmVyKSxcbiAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaWJlcikge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgMjY6XG4gICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgaWYgKGZpYmVyLmZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZyAmJiBudWxsICE9PSBmaWJlci5tZW1vaXplZFN0YXRlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBjdXJyZW50IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgUmVzb3VyY2VzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgIGNhc2UgNDpcbiAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgaWYgKG51bGwgPT09IGZpYmVyLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgPyAoKGN1cnJlbnQgPSBzdXNwZW5zZXlDb21taXRGbGFnKSxcbiAgICAgICAgICAgIChzdXNwZW5zZXlDb21taXRGbGFnID0gMTY3NzcyMTYpLFxuICAgICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKSxcbiAgICAgICAgICAgIChzdXNwZW5zZXlDb21taXRGbGFnID0gY3VycmVudCkpXG4gICAgICAgICAgOiByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKSB7XG4gIHZhciBwcmV2aW91c0ZpYmVyID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuICBpZiAoXG4gICAgbnVsbCAhPT0gcHJldmlvdXNGaWJlciAmJlxuICAgICgocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyLmNoaWxkKSwgbnVsbCAhPT0gcGFyZW50RmliZXIpXG4gICkge1xuICAgIHByZXZpb3VzRmliZXIuY2hpbGQgPSBudWxsO1xuICAgIGRvXG4gICAgICAocHJldmlvdXNGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpLFxuICAgICAgICAocGFyZW50RmliZXIuc2libGluZyA9IG51bGwpLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyKTtcbiAgICB3aGlsZSAobnVsbCAhPT0gcGFyZW50RmliZXIpO1xuICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG4gICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gIH1cbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihwYXJlbnRGaWJlciksXG4gICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xufVxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAxMTpcbiAgICBjYXNlIDE1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICYgMjA0OCAmJlxuICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoOSwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgIGluc3RhbmNlLl92aXNpYmlsaXR5ICYgNCAmJlxuICAgICAgKG51bGwgPT09IGZpbmlzaGVkV29yay5yZXR1cm4gfHwgMTMgIT09IGZpbmlzaGVkV29yay5yZXR1cm4udGFnKVxuICAgICAgICA/ICgoaW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gLTUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSlcbiAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG4gICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gIH1cbiAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgZGVsZXRpb25zID0gcGFyZW50RmliZXI7XG4gICAgc3dpdGNoIChkZWxldGlvbnMudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDgsIGRlbGV0aW9ucywgZGVsZXRpb25zLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZGVsZXRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIyOlxuICAgICAgICBpID0gZGVsZXRpb25zLnN0YXRlTm9kZTtcbiAgICAgICAgaS5fdmlzaWJpbGl0eSAmIDQgJiZcbiAgICAgICAgICAoKGkuX3Zpc2liaWxpdHkgJj0gLTUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZGVsZXRpb25zKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhkZWxldGlvbnMpO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gIGRlbGV0ZWRTdWJ0cmVlUm9vdCxcbiAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuKSB7XG4gIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDgsIGZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICB9XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG4gICAgaWYgKG51bGwgIT09IGNoaWxkKSAoY2hpbGQucmV0dXJuID0gZmliZXIpLCAobmV4dEVmZmVjdCA9IGNoaWxkKTtcbiAgICBlbHNlXG4gICAgICBhOiBmb3IgKGZpYmVyID0gZGVsZXRlZFN1YnRyZWVSb290OyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgY2hpbGQgPSBuZXh0RWZmZWN0O1xuICAgICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmcsXG4gICAgICAgICAgcmV0dXJuRmliZXIgPSBjaGlsZC5yZXR1cm47XG4gICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkID09PSBmaWJlcikge1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bGwgIT09IHNpYmxpbmcpIHtcbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEVmZmVjdCA9IHJldHVybkZpYmVyO1xuICAgICAgfVxuICB9XG59XG52YXIgUG9zc2libHlXZWFrTWFwID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha01hcCA/IFdlYWtNYXAgOiBNYXAsXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBleGVjdXRpb25Db250ZXh0ID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCxcbiAgd29ya0luUHJvZ3Jlc3MgPSBudWxsLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICExLFxuICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSAwLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbCxcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSAwLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbCxcbiAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eSxcbiAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwsXG4gIGhhc1VuY2F1Z2h0RXJyb3IgPSAhMSxcbiAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbCxcbiAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsLFxuICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9ICExLFxuICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGwsXG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gMCxcbiAgbmVzdGVkVXBkYXRlQ291bnQgPSAwLFxuICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpIHtcbiAgaWYgKDAgPT09IChmaWJlci5tb2RlICYgMSkpIHJldHVybiAyO1xuICBpZiAoMCAhPT0gKGV4ZWN1dGlvbkNvbnRleHQgJiAyKSAmJiAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcylcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAtd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gIGZpYmVyID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICBudWxsICE9PSBmaWJlciAmJiBmaWJlci5fY2FsbGJhY2tzLmFkZChoYW5kbGVBc3luY0FjdGlvbik7XG4gIGlmIChudWxsICE9PSBmaWJlcilcbiAgICByZXR1cm4gKFxuICAgICAgMCA9PT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgJiZcbiAgICAgICAgKGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSksXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZVxuICAgICk7XG4gIGZpYmVyID0gY3VycmVudFVwZGF0ZVByaW9yaXR5O1xuICByZXR1cm4gMCAhPT0gZmliZXIgPyBmaWJlciA6IDMyO1xufVxuZnVuY3Rpb24gcmVxdWVzdERlZmVycmVkTGFuZSgpIHtcbiAgMCA9PT0gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgJiZcbiAgICAod29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPVxuICAgICAgMCAhPT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKVxuICAgICAgICA/IDUzNjg3MDkxMlxuICAgICAgICA6IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCkpO1xuICB2YXIgc3VzcGVuc2VIYW5kbGVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgbnVsbCAhPT0gc3VzcGVuc2VIYW5kbGVyICYmIChzdXNwZW5zZUhhbmRsZXIuZmxhZ3MgfD0gMzIpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmU7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgaWYgKFxuICAgIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgMiA9PT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHx8XG4gICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0XG4gIClcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCAwKSxcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICByb290LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICk7XG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lKTtcbiAgaWYgKDAgPT09IChleGVjdXRpb25Db250ZXh0ICYgMikgfHwgcm9vdCAhPT0gd29ya0luUHJvZ3Jlc3NSb290KVxuICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgKDAgPT09IChleGVjdXRpb25Db250ZXh0ICYgMikgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9IGxhbmUpLFxuICAgICAgNCA9PT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJlxuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICByb290LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICkpLFxuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpLFxuICAgICAgMiA9PT0gbGFuZSAmJlxuICAgICAgICAwID09PSBleGVjdXRpb25Db250ZXh0ICYmXG4gICAgICAgIDAgPT09IChmaWJlci5tb2RlICYgMSkgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyA1MDApLFxuICAgICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCghMCkpO1xufVxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAgaWYgKDAgIT09IChleGVjdXRpb25Db250ZXh0ICYgNikpXG4gICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICBpZiAoZmx1c2hQYXNzaXZlRWZmZWN0cygpICYmIHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSlcbiAgICByZXR1cm4gbnVsbDtcbiAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKFxuICAgIHJvb3QsXG4gICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiAwXG4gICk7XG4gIGlmICgwID09PSBsYW5lcykgcmV0dXJuIG51bGw7XG4gIHZhciBleGl0U3RhdHVzID0gKGRpZFRpbWVvdXQgPVxuICAgIDAgPT09IChsYW5lcyAmIDYwKSAmJiAwID09PSAobGFuZXMgJiByb290LmV4cGlyZWRMYW5lcykgJiYgIWRpZFRpbWVvdXQpXG4gICAgPyByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcylcbiAgICA6IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgaWYgKDAgIT09IGV4aXRTdGF0dXMpIHtcbiAgICB2YXIgcmVuZGVyV2FzQ29uY3VycmVudCA9IGRpZFRpbWVvdXQ7XG4gICAgZG8ge1xuICAgICAgaWYgKDYgPT09IGV4aXRTdGF0dXMpIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCAwKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBkaWRUaW1lb3V0ID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgJiZcbiAgICAgICAgICAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGRpZFRpbWVvdXQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgyID09PSBleGl0U3RhdHVzKSB7XG4gICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGxhbmVzO1xuICAgICAgICAgIHZhciBlcnJvclJldHJ5TGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICAwICE9PSBlcnJvclJldHJ5TGFuZXMgJiZcbiAgICAgICAgICAgICgobGFuZXMgPSBlcnJvclJldHJ5TGFuZXMpLFxuICAgICAgICAgICAgKGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCxcbiAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKDEgPT09IGV4aXRTdGF0dXMpXG4gICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgKChvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IpLFxuICAgICAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgMCksXG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgMCksXG4gICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCksXG4gICAgICAgICAgICBvcmlnaW5hbENhbGxiYWNrTm9kZSlcbiAgICAgICAgICApO1xuICAgICAgICByb290LmZpbmlzaGVkV29yayA9IGRpZFRpbWVvdXQ7XG4gICAgICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgICAgICBhOiB7XG4gICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IHJvb3Q7XG4gICAgICAgICAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgaWYgKChsYW5lcyAmIDQxOTQxNzYpID09PSBsYW5lcykge1xuICAgICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAobGFuZXMgJiA2MjkxNDU2MCkgPT09IGxhbmVzICYmXG4gICAgICAgICAgICAzID09PSBleGl0U3RhdHVzICYmXG4gICAgICAgICAgICAoKGV4aXRTdGF0dXMgPSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgMzAwIC0gbm93KCkpLFxuICAgICAgICAgICAgMTAgPCBleGl0U3RhdHVzKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICgwICE9PSBnZXROZXh0TGFuZXMocmVuZGVyV2FzQ29uY3VycmVudCwgMCkpIGJyZWFrIGE7XG4gICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoXG4gICAgICAgICAgICAgIGNvbW1pdFJvb3RXaGVuUmVhZHkuYmluZChcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZGlkVGltZW91dCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGV4aXRTdGF0dXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCxcbiAgICAgICAgICAgIGRpZFRpbWVvdXQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfSB3aGlsZSAoMSk7XG4gIH1cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIG5vdygpKTtcbiAgcm9vdCA9XG4gICAgcm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlXG4gICAgICA/IHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpXG4gICAgICA6IG51bGw7XG4gIHJldHVybiByb290O1xufVxuZnVuY3Rpb24gcmVjb3ZlckZyb21Db25jdXJyZW50RXJyb3IoXG4gIHJvb3QsXG4gIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyxcbiAgZXJyb3JSZXRyeUxhbmVzXG4pIHtcbiAgdmFyIGVycm9yc0Zyb21GaXJzdEF0dGVtcHQgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzLFxuICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHJvb3QuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCkgJiZcbiAgICAocHJlcGFyZUZyZXNoU3RhY2socm9vdCwgZXJyb3JSZXRyeUxhbmVzKS5mbGFncyB8PSAyNTYpO1xuICBlcnJvclJldHJ5TGFuZXMgPSByZW5kZXJSb290U3luYyhyb290LCBlcnJvclJldHJ5TGFuZXMpO1xuICBpZiAoMiAhPT0gZXJyb3JSZXRyeUxhbmVzKSB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciAmJiAhSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgfD0gb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9IG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyksXG4gICAgICAgIDRcbiAgICAgICk7XG4gICAgcm9vdCA9IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JzRnJvbUZpcnN0QXR0ZW1wdDtcbiAgICBudWxsICE9PSByb290ICYmIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMocm9vdCk7XG4gIH1cbiAgcmV0dXJuIGVycm9yUmV0cnlMYW5lcztcbn1cbmZ1bmN0aW9uIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoZXJyb3JzKSB7XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzXG4gICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBlcnJvcnMpXG4gICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgZXJyb3JzXG4gICAgICApO1xufVxuZnVuY3Rpb24gY29tbWl0Um9vdFdoZW5SZWFkeShcbiAgcm9vdCxcbiAgZmluaXNoZWRXb3JrLFxuICByZWNvdmVyYWJsZUVycm9ycyxcbiAgdHJhbnNpdGlvbnMsXG4gIGxhbmVzLFxuICBzcGF3bmVkTGFuZVxuKSB7XG4gIDAgPT09IChsYW5lcyAmIDQyKSAmJiBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaW5pc2hlZFdvcmspO1xuICBjb21taXRSb290KHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgc3Bhd25lZExhbmUpO1xufVxuZnVuY3Rpb24gaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZpbmlzaGVkV29yaykge1xuICBmb3IgKHZhciBub2RlID0gZmluaXNoZWRXb3JrOyA7ICkge1xuICAgIGlmIChub2RlLmZsYWdzICYgMTYzODQpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5vZGUudXBkYXRlUXVldWU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHVwZGF0ZVF1ZXVlICYmXG4gICAgICAgICgodXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5zdG9yZXMpLCBudWxsICE9PSB1cGRhdGVRdWV1ZSlcbiAgICAgIClcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjaGVjayA9IHVwZGF0ZVF1ZXVlW2ldLFxuICAgICAgICAgICAgZ2V0U25hcHNob3QgPSBjaGVjay5nZXRTbmFwc2hvdDtcbiAgICAgICAgICBjaGVjayA9IGNoZWNrLnZhbHVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIW9iamVjdElzKGdldFNuYXBzaG90KCksIGNoZWNrKSkgcmV0dXJuICExO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZVF1ZXVlID0gbm9kZS5jaGlsZDtcbiAgICBpZiAobm9kZS5zdWJ0cmVlRmxhZ3MgJiAxNjM4NCAmJiBudWxsICE9PSB1cGRhdGVRdWV1ZSlcbiAgICAgICh1cGRhdGVRdWV1ZS5yZXR1cm4gPSBub2RlKSwgKG5vZGUgPSB1cGRhdGVRdWV1ZSk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSBicmVhaztcbiAgICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgICBpZiAobnVsbCA9PT0gbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykgcmV0dXJuICEwO1xuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gITA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcywgc3Bhd25lZExhbmUpIHtcbiAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzO1xuICBzdXNwZW5kZWRMYW5lcyAmPSB+d29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXM7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzO1xuICBmb3IgKFxuICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcywgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcbiAgICAwIDwgbGFuZXM7XG5cbiAgKSB7XG4gICAgdmFyIGluZGV4JDYgPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDY7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4JDZdID0gLTE7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbiAgMCAhPT0gc3Bhd25lZExhbmUgJiZcbiAgICBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgc3VzcGVuZGVkTGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCkge1xuICBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICBpZiAoMCA9PT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pXG4gICAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIGVsc2VcbiAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpLFxuICAgICAgICByZXNldEhvb2tzT25VbndpbmQoaW50ZXJydXB0ZWRXb3JrKSxcbiAgICAgICAgKHRoZW5hYmxlU3RhdGUkMSA9IG51bGwpLFxuICAgICAgICAodGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDApLFxuICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgIGZvciAoOyBudWxsICE9PSBpbnRlcnJ1cHRlZFdvcms7IClcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmsuYWx0ZXJuYXRlLCBpbnRlcnJ1cHRlZFdvcmspLFxuICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybik7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IDA7XG4gIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuICAtMSAhPT0gdGltZW91dEhhbmRsZSAmJlxuICAgICgocm9vdC50aW1lb3V0SGFuZGxlID0gLTEpLCBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpKTtcbiAgdGltZW91dEhhbmRsZSA9IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdDtcbiAgbnVsbCAhPT0gdGltZW91dEhhbmRsZSAmJlxuICAgICgocm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbCksIHRpbWVvdXRIYW5kbGUoKSk7XG4gIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICB3b3JrSW5Qcm9ncmVzcyA9IHRpbWVvdXRIYW5kbGUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IGxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDA7XG4gIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDA7XG4gIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPVxuICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID1cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPVxuICAgICAgMDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID1cbiAgICBudWxsO1xuICAwICE9PSAobGFuZXMgJiA4KSAmJiAobGFuZXMgfD0gbGFuZXMgJiAzMik7XG4gIHZhciBhbGxFbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG4gIGlmICgwICE9PSBhbGxFbnRhbmdsZWRMYW5lcylcbiAgICBmb3IgKFxuICAgICAgcm9vdCA9IHJvb3QuZW50YW5nbGVtZW50cywgYWxsRW50YW5nbGVkTGFuZXMgJj0gbGFuZXM7XG4gICAgICAwIDwgYWxsRW50YW5nbGVkTGFuZXM7XG5cbiAgICApIHtcbiAgICAgIHZhciBpbmRleCQ0ID0gMzEgLSBjbHozMihhbGxFbnRhbmdsZWRMYW5lcyksXG4gICAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDQ7XG4gICAgICBsYW5lcyB8PSByb290W2luZGV4JDRdO1xuICAgICAgYWxsRW50YW5nbGVkTGFuZXMgJj0gfmxhbmU7XG4gICAgfVxuICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IGxhbmVzO1xuICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gIHJldHVybiB0aW1lb3V0SGFuZGxlO1xufVxuZnVuY3Rpb24gaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVsbDtcbiAgdGhyb3duVmFsdWUgPT09IFN1c3BlbnNlRXhjZXB0aW9uXG4gICAgPyAoKHRocm93blZhbHVlID0gZ2V0U3VzcGVuZGVkVGhlbmFibGUoKSksXG4gICAgICAocm9vdCA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgKG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNDE5NDE3NikgPT09XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgID8gbnVsbCAhPT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApICE9PVxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSkgfHxcbiAgICAgICAgICAgICAgcm9vdCAhPT0gc2hlbGxCb3VuZGFyeSkpIHx8XG4gICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgJiAxMzQyMTc3MjcpIHx8XG4gICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyAmIDEzNDIxNzcyNylcbiAgICAgICAgICA/IDNcbiAgICAgICAgICA6IDIpKVxuICAgIDogdGhyb3duVmFsdWUgPT09IFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvblxuICAgID8gKCh0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCkpLFxuICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gNCkpXG4gICAgOiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICB0aHJvd25WYWx1ZSA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uXG4gICAgICAgICAgPyA4XG4gICAgICAgICAgOiBudWxsICE9PSB0aHJvd25WYWx1ZSAmJlxuICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHRocm93blZhbHVlICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0aHJvd25WYWx1ZS50aGVuXG4gICAgICAgICAgPyA2XG4gICAgICAgICAgOiAxKTtcbiAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IHRocm93blZhbHVlO1xuICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgICgod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDEpLFxuICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWUpKTtcbn1cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgcmV0dXJuIG51bGwgPT09IHByZXZEaXNwYXRjaGVyID8gQ29udGV4dE9ubHlEaXNwYXRjaGVyIDogcHJldkRpc3BhdGNoZXI7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gNDtcbiAgKDAgPT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgJiAxMzQyMTc3MjcpICYmXG4gICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzICYgMTM0MjE3NzI3KSkgfHxcbiAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgfHxcbiAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICApO1xufVxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSAyO1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpO1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcylcbiAgICAod29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwpLCBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gIGxhbmVzID0gITE7XG4gIGE6IGRvXG4gICAgdHJ5IHtcbiAgICAgIGlmICgwICE9PSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAmJiBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICB2YXIgdW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcbiAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDY7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsYW5lcyB8fFxuICAgICAgICAgICAgICBudWxsICE9PSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50IHx8XG4gICAgICAgICAgICAgIChsYW5lcyA9ICEwKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlJDk1KSB7XG4gICAgICBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSQ5NSk7XG4gICAgfVxuICB3aGlsZSAoMSk7XG4gIGxhbmVzICYmIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlcisrO1xuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJDYW5ub3QgY29tbWl0IGFuIGluY29tcGxldGUgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICk7XG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMDtcbiAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbn1cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgZm9yICg7IG51bGwgIT09IHdvcmtJblByb2dyZXNzOyApIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbn1cbmZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gMjtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpXG4gICAgKHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgPSBudWxsKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyA1MDApLFxuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICBhOiBkb1xuICAgIHRyeSB7XG4gICAgICBpZiAoMCAhPT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gJiYgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgbGFuZXMgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgdmFyIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcbiAgICAgICAgYjogc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCBsYW5lcywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKGlzVGhlbmFibGVSZXNvbHZlZCh0aHJvd25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwO1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFuZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIDIgPT09IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICYmXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gNyk7XG4gICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aHJvd25WYWx1ZS50aGVuKGxhbmVzLCBsYW5lcyk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gNztcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSA1O1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBpc1RoZW5hYmxlUmVzb2x2ZWQodGhyb3duVmFsdWUpXG4gICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDApLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcykpXG4gICAgICAgICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDApLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCBsYW5lcywgdGhyb3duVmFsdWUpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICBsYW5lcyA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IGxhbmVzLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IHNpYmxpbmcpIHdvcmtJblByb2dyZXNzID0gc2libGluZztcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5GaWJlciA9IGxhbmVzLnJldHVybjtcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsocmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHJvb3QsIGxhbmVzLCB0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDA7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgbGFuZXMsIHRocm93blZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDY7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuZXhwZWN0ZWQgU3VzcGVuZGVkUmVhc29uLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSQ5Nykge1xuICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUkOTcpO1xuICAgIH1cbiAgd2hpbGUgKDEpO1xuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKSByZXR1cm4gMDtcbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwO1xuICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xufVxuZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50KCkge1xuICBmb3IgKDsgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MgJiYgIXNob3VsZFlpZWxkKCk7IClcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG59XG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIHZhciBuZXh0ID0gYmVnaW5Xb3JrKHVuaXRPZldvcmsuYWx0ZXJuYXRlLCB1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICBudWxsID09PSBuZXh0ID8gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIDogKHdvcmtJblByb2dyZXNzID0gbmV4dCk7XG4gIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xufVxuZnVuY3Rpb24gcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gIHN3aXRjaCAodW5pdE9mV29yay50YWcpIHtcbiAgICBjYXNlIDI6XG4gICAgICB1bml0T2ZXb3JrLnRhZyA9IDA7XG4gICAgY2FzZSAxNTpcbiAgICBjYXNlIDA6XG4gICAgICB2YXIgQ29tcG9uZW50ID0gdW5pdE9mV29yay50eXBlLFxuICAgICAgICB1bnJlc29sdmVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcbiAgICAgIHVucmVzb2x2ZWRQcm9wcyA9XG4gICAgICAgIHVuaXRPZldvcmsuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgID8gdW5yZXNvbHZlZFByb3BzXG4gICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgIHZhciBjb250ZXh0ID0gaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KVxuICAgICAgICA/IHByZXZpb3VzQ29udGV4dFxuICAgICAgICA6IGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQ7XG4gICAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh1bml0T2ZXb3JrLCBjb250ZXh0KTtcbiAgICAgIGN1cnJlbnQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgdW5yZXNvbHZlZFByb3BzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMTpcbiAgICAgIENvbXBvbmVudCA9IHVuaXRPZldvcmsudHlwZS5yZW5kZXI7XG4gICAgICB1bnJlc29sdmVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcbiAgICAgIHVucmVzb2x2ZWRQcm9wcyA9XG4gICAgICAgIHVuaXRPZldvcmsuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgID8gdW5yZXNvbHZlZFByb3BzXG4gICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgIGN1cnJlbnQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgdW5yZXNvbHZlZFByb3BzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHVuaXRPZldvcmsucmVmLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHJlc2V0SG9va3NPblVud2luZCh1bml0T2ZXb3JrKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIHVuaXRPZldvcmspLFxuICAgICAgICAodW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKSksXG4gICAgICAgIChjdXJyZW50ID0gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKSk7XG4gIH1cbiAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gIG51bGwgPT09IGN1cnJlbnRcbiAgICA/IGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKVxuICAgIDogKHdvcmtJblByb2dyZXNzID0gY3VycmVudCk7XG4gIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xufVxuZnVuY3Rpb24gdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSkge1xuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgcmVzZXRIb29rc09uVW53aW5kKHVuaXRPZldvcmspO1xuICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgdmFyIHJldHVybkZpYmVyID0gdW5pdE9mV29yay5yZXR1cm47XG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgdGhyb3dFeGNlcHRpb24oXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICB0aHJvd25WYWx1ZSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSAxO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IHRocm93blZhbHVlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAobnVsbCAhPT0gcmV0dXJuRmliZXIpIHRocm93ICgod29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlciksIGVycm9yKTtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gMTtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodW5pdE9mV29yay5mbGFncyAmIDMyNzY4KVxuICAgIGE6IHtcbiAgICAgIHJvb3QgPSB1bml0T2ZXb3JrO1xuICAgICAgZG8ge1xuICAgICAgICB1bml0T2ZXb3JrID0gdW53aW5kV29yayhyb290LmFsdGVybmF0ZSwgcm9vdCk7XG4gICAgICAgIGlmIChudWxsICE9PSB1bml0T2ZXb3JrKSB7XG4gICAgICAgICAgdW5pdE9mV29yay5mbGFncyAmPSAzMjc2NztcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVuaXRPZldvcms7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICByb290ID0gcm9vdC5yZXR1cm47XG4gICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAoKHJvb3QuZmxhZ3MgfD0gMzI3NjgpLFxuICAgICAgICAgIChyb290LnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgIChyb290LmRlbGV0aW9ucyA9IG51bGwpKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByb290O1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gcm9vdCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gNjtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG4gIGVsc2UgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xufVxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuICBkbyB7XG4gICAgdW5pdE9mV29yayA9IGNvbXBsZXRlZFdvcmsucmV0dXJuO1xuICAgIHZhciBuZXh0ID0gY29tcGxldGVXb3JrKFxuICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUsXG4gICAgICBjb21wbGV0ZWRXb3JrLFxuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICApO1xuICAgIGlmIChudWxsICE9PSBuZXh0KSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbXBsZXRlZFdvcmsgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG4gICAgaWYgKG51bGwgIT09IGNvbXBsZXRlZFdvcmspIHtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcbiAgfSB3aGlsZSAobnVsbCAhPT0gY29tcGxldGVkV29yayk7XG4gIDAgPT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgJiYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSA1KTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCwgcmVjb3ZlcmFibGVFcnJvcnMsIHRyYW5zaXRpb25zLCBzcGF3bmVkTGFuZSkge1xuICB2YXIgcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkgPSBjdXJyZW50VXBkYXRlUHJpb3JpdHksXG4gICAgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICB0cnkge1xuICAgIChSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbCksXG4gICAgICAoY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gMiksXG4gICAgICBjb21taXRSb290SW1wbChcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgICBwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSxcbiAgICAgICAgc3Bhd25lZExhbmVcbiAgICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgKFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbiksXG4gICAgICAoY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwoXG4gIHJvb3QsXG4gIHJlY292ZXJhYmxlRXJyb3JzLFxuICB0cmFuc2l0aW9ucyxcbiAgcmVuZGVyUHJpb3JpdHlMZXZlbCxcbiAgc3Bhd25lZExhbmVcbikge1xuICBkbyBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHdoaWxlIChudWxsICE9PSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyk7XG4gIGlmICgwICE9PSAoZXhlY3V0aW9uQ29udGV4dCAmIDYpKVxuICAgIHRocm93IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIHRyYW5zaXRpb25zID0gcm9vdC5maW5pc2hlZExhbmVzO1xuICBpZiAobnVsbCA9PT0gZmluaXNoZWRXb3JrKSByZXR1cm4gbnVsbDtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSAwO1xuICBpZiAoZmluaXNoZWRXb3JrID09PSByb290LmN1cnJlbnQpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkNhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICApO1xuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDA7XG4gIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gIHZhciByZW1haW5pbmdMYW5lcyA9IGZpbmlzaGVkV29yay5sYW5lcyB8IGZpbmlzaGVkV29yay5jaGlsZExhbmVzO1xuICByZW1haW5pbmdMYW5lcyB8PSBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXM7XG4gIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMsIHNwYXduZWRMYW5lKTtcbiAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDApKTtcbiAgKDAgPT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTAyNTYpICYmXG4gICAgMCA9PT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEwMjU2KSkgfHxcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyB8fFxuICAgICgocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSAhMCksXG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSkpO1xuICBzcGF3bmVkTGFuZSA9IDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxNTk5MCk7XG4gIGlmICgwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDE1OTkwKSB8fCBzcGF3bmVkTGFuZSkge1xuICAgIHNwYXduZWRMYW5lID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcbiAgICByZW1haW5pbmdMYW5lcyA9IGN1cnJlbnRVcGRhdGVQcmlvcml0eTtcbiAgICBjdXJyZW50VXBkYXRlUHJpb3JpdHkgPSAyO1xuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSA0O1xuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KTtcbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihyb290LCBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLCBmaW5pc2hlZFdvcmspO1xuICAgIHJlcXVlc3RQYWludCgpO1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICBjdXJyZW50VXBkYXRlUHJpb3JpdHkgPSByZW1haW5pbmdMYW5lcztcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gc3Bhd25lZExhbmU7XG4gIH0gZWxzZSByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzICYmXG4gICAgKChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9ICExKSxcbiAgICAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290KSxcbiAgICAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSB0cmFuc2l0aW9ucykpO1xuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAwID09PSByZW1haW5pbmdMYW5lcyAmJiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsKTtcbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gIGlmIChudWxsICE9PSByZWNvdmVyYWJsZUVycm9ycylcbiAgICBmb3IgKFxuICAgICAgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IHJvb3Qub25SZWNvdmVyYWJsZUVycm9yLCBmaW5pc2hlZFdvcmsgPSAwO1xuICAgICAgZmluaXNoZWRXb3JrIDwgcmVjb3ZlcmFibGVFcnJvcnMubGVuZ3RoO1xuICAgICAgZmluaXNoZWRXb3JrKytcbiAgICApXG4gICAgICAoc3Bhd25lZExhbmUgPSByZWNvdmVyYWJsZUVycm9yc1tmaW5pc2hlZFdvcmtdKSxcbiAgICAgICAgKHJlbWFpbmluZ0xhbmVzID0ge1xuICAgICAgICAgIGRpZ2VzdDogc3Bhd25lZExhbmUuZGlnZXN0LFxuICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBzcGF3bmVkTGFuZS5zdGFja1xuICAgICAgICB9KSxcbiAgICAgICAgcmVuZGVyUHJpb3JpdHlMZXZlbChzcGF3bmVkTGFuZS52YWx1ZSwgcmVtYWluaW5nTGFuZXMpO1xuICBpZiAoaGFzVW5jYXVnaHRFcnJvcilcbiAgICB0aHJvdyAoXG4gICAgICAoKGhhc1VuY2F1Z2h0RXJyb3IgPSAhMSksXG4gICAgICAocm9vdCA9IGZpcnN0VW5jYXVnaHRFcnJvciksXG4gICAgICAoZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbCksXG4gICAgICByb290KVxuICAgICk7XG4gIDAgIT09IChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyAmIDMpICYmXG4gICAgMCAhPT0gcm9vdC50YWcgJiZcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIDAgIT09ICh0cmFuc2l0aW9ucyAmIDQxOTQyMTgpICYmIDAgIT09IChyZW1haW5pbmdMYW5lcyAmIDQyKVxuICAgID8gcm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzXG4gICAgICA/IG5lc3RlZFVwZGF0ZUNvdW50KytcbiAgICAgIDogKChuZXN0ZWRVcGRhdGVDb3VudCA9IDApLCAocm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdCkpXG4gICAgOiAobmVzdGVkVXBkYXRlQ291bnQgPSAwKTtcbiAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoITEpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gIGlmIChudWxsICE9PSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cykge1xuICAgIHZhciByZW5kZXJQcmlvcml0eSA9IGxhbmVzVG9FdmVudFByaW9yaXR5KHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzKSxcbiAgICAgIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbixcbiAgICAgIHByZXZpb3VzUHJpb3JpdHkgPSBjdXJyZW50VXBkYXRlUHJpb3JpdHk7XG4gICAgdHJ5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gMzIgPiByZW5kZXJQcmlvcml0eSA/IDMyIDogcmVuZGVyUHJpb3JpdHk7XG4gICAgICBpZiAobnVsbCA9PT0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMpXG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIGVsc2Uge1xuICAgICAgICByZW5kZXJQcmlvcml0eSA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICAgICAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG4gICAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gMDtcbiAgICAgICAgaWYgKDAgIT09IChleGVjdXRpb25Db250ZXh0ICYgNikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiKTtcbiAgICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSA0O1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIocmVuZGVyUHJpb3JpdHkuY3VycmVudCk7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIocmVuZGVyUHJpb3JpdHksIHJlbmRlclByaW9yaXR5LmN1cnJlbnQpO1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKCExKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3RcbiAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJlbmRlclByaW9yaXR5KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgKGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAoUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgc291cmNlRmliZXIgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciwgc291cmNlRmliZXIpO1xuICBzb3VyY2VGaWJlciA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIHNvdXJjZUZpYmVyLCAyKTtcbiAgcm9vdEZpYmVyID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHNvdXJjZUZpYmVyLCAyKTtcbiAgbnVsbCAhPT0gcm9vdEZpYmVyICYmXG4gICAgKG1hcmtSb290VXBkYXRlZChyb290RmliZXIsIDIpLCBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdEZpYmVyKSk7XG59XG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpIHtcbiAgaWYgKDMgPT09IHNvdXJjZUZpYmVyLnRhZylcbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChzb3VyY2VGaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgZWxzZVxuICAgIGZvciAoOyBudWxsICE9PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yOyApIHtcbiAgICAgIGlmICgzID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgxID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgIHR5cGVvZiBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgfHxcbiAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSkpKVxuICAgICAgICApIHtcbiAgICAgICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgICAgc291cmNlRmliZXIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgMlxuICAgICAgICAgICk7XG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IGVucXVldWVVcGRhdGUoXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBudWxsICE9PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yICYmXG4gICAgICAgICAgICAobWFya1Jvb3RVcGRhdGVkKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIDIpLFxuICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IucmV0dXJuO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICBpZiAobnVsbCA9PT0gcGluZ0NhY2hlKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG4gICAgdmFyIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICB9IGVsc2VcbiAgICAodGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSkpLFxuICAgICAgdm9pZCAwID09PSB0aHJlYWRJRHMgJiZcbiAgICAgICAgKCh0aHJlYWRJRHMgPSBuZXcgU2V0KCkpLCBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpKTtcbiAgdGhyZWFkSURzLmhhcyhsYW5lcykgfHxcbiAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICEwKSxcbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKSxcbiAgICAocm9vdCA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKSksXG4gICAgd2FrZWFibGUudGhlbihyb290LCByb290KSk7XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICBudWxsICE9PSBwaW5nQ2FjaGUgJiYgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiZcbiAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiBwaW5nZWRMYW5lcykgPT09IHBpbmdlZExhbmVzICYmXG4gICAgKDQgPT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgfHxcbiAgICAoMyA9PT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJlxuICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApID09PVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgMzAwID4gbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lKVxuICAgICAgPyAwID09PSAoZXhlY3V0aW9uQ29udGV4dCAmIDIpICYmIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApXG4gICAgICA6ICh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyB8PSBwaW5nZWRMYW5lcykpO1xuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG59XG5mdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gIDAgPT09IHJldHJ5TGFuZSAmJlxuICAgIChyZXRyeUxhbmUgPSAwID09PSAoYm91bmRhcnlGaWJlci5tb2RlICYgMSkgPyAyIDogY2xhaW1OZXh0UmV0cnlMYW5lKCkpO1xuICBib3VuZGFyeUZpYmVyID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gIG51bGwgIT09IGJvdW5kYXJ5RmliZXIgJiZcbiAgICAobWFya1Jvb3RVcGRhdGVkKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSksXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGJvdW5kYXJ5RmliZXIpKTtcbn1cbmZ1bmN0aW9uIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoYm91bmRhcnlGaWJlcikge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICByZXRyeUxhbmUgPSAwO1xuICBudWxsICE9PSBzdXNwZW5zZVN0YXRlICYmIChyZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSk7XG4gIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgdmFyIHJldHJ5TGFuZSA9IDA7XG4gIHN3aXRjaCAoYm91bmRhcnlGaWJlci50YWcpIHtcbiAgICBjYXNlIDEzOlxuICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgbnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSAmJiAocmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOTpcbiAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiUGluZ2VkIHVua25vd24gc3VzcGVuc2UgYm91bmRhcnkgdHlwZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKTtcbiAgfVxuICBudWxsICE9PSByZXRyeUNhY2hlICYmIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59XG52YXIgYmVnaW5Xb3JrO1xuYmVnaW5Xb3JrID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAobnVsbCAhPT0gY3VycmVudClcbiAgICBpZiAoXG4gICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyB8fFxuICAgICAgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50XG4gICAgKVxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICAwID09PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSAmJlxuICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMSksXG4gICAgICAgICAgYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSAwICE9PSAoY3VycmVudC5mbGFncyAmIDEzMTA3MikgPyAhMCA6ICExO1xuICAgIH1cbiAgZWxzZSBkaWRSZWNlaXZlVXBkYXRlID0gITE7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gMDtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dChcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnRcbiAgICAgICk7XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgY29udGV4dCA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgbnVsbCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY29udGV4dCAmJlxuICAgICAgICBudWxsICE9PSBjb250ZXh0ICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHQucmVuZGVyICYmXG4gICAgICAgIHZvaWQgMCA9PT0gY29udGV4dC4kJHR5cGVvZlxuICAgICAgKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IDE7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgdmFyIGhhc0NvbnRleHQgPSAhMDtcbiAgICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfSBlbHNlIGhhc0NvbnRleHQgPSAhMTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgbnVsbCAhPT0gY29udGV4dC5zdGF0ZSAmJiB2b2lkIDAgIT09IGNvbnRleHQuc3RhdGVcbiAgICAgICAgICAgID8gY29udGV4dC5zdGF0ZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBjb250ZXh0LnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQuX3JlYWN0SW50ZXJuYWxzID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBjdXJyZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gZmluaXNoQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgITAsXG4gICAgICAgICAgaGFzQ29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAwKSxcbiAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICBjYXNlIDE2OlxuICAgICAgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICBhOiB7XG4gICAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICBjb250ZXh0ID0gQ29tcG9uZW50Ll9pbml0O1xuICAgICAgICBDb21wb25lbnQgPSBjb250ZXh0KENvbXBvbmVudC5fcGF5bG9hZCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gICAgICAgIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICAgICAgICBjdXJyZW50ID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGN1cnJlbnQpO1xuICAgICAgICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArXG4gICAgICAgICAgICBDb21wb25lbnQgK1xuICAgICAgICAgICAgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAoY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgIChjb250ZXh0ID1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gQ29tcG9uZW50XG4gICAgICAgICAgICA/IGNvbnRleHRcbiAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGNvbnRleHQpKSxcbiAgICAgICAgdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApXG4gICAgICApO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgKGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAoY29udGV4dCA9XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgICAgPyBjb250ZXh0XG4gICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBjb250ZXh0KSksXG4gICAgICAgIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBjYXNlIDM6XG4gICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KVxuICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBoYXZlIGEgY3VycmVudCBmaWJlci4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5lbGVtZW50O1xuICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmVsZW1lbnQ7XG4gICAgICBjb250ZXh0ID09PSBDb21wb25lbnRcbiAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApKVxuICAgICAgICA6IChyZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIChDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICBtYXJrUmVmJDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcyksXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICApO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgMTM6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICApLFxuICAgICAgICAoQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgKTtcbiAgICBjYXNlIDExOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAoY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgIChjb250ZXh0ID1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gQ29tcG9uZW50XG4gICAgICAgICAgICA/IGNvbnRleHRcbiAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGNvbnRleHQpKSxcbiAgICAgICAgdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgY2FzZSA3OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSAxMjpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICksXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICApO1xuICAgIGNhc2UgMTA6XG4gICAgICBhOiB7XG4gICAgICAgIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICAgIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIGhhc0NvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBjb250ZXh0LnZhbHVlO1xuICAgICAgICBwdXNoKHZhbHVlQ3Vyc29yLCBDb21wb25lbnQuX2N1cnJlbnRWYWx1ZSk7XG4gICAgICAgIENvbXBvbmVudC5fY3VycmVudFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGlmIChudWxsICE9PSBoYXNDb250ZXh0KVxuICAgICAgICAgIGlmIChvYmplY3RJcyhoYXNDb250ZXh0LnZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaGFzQ29udGV4dC5jaGlsZHJlbiA9PT0gY29udGV4dC5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICAhZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGhhc0NvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBoYXNDb250ZXh0ICYmIChoYXNDb250ZXh0LnJldHVybiA9IHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaGFzQ29udGV4dDtcblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciBsaXN0ID0gaGFzQ29udGV4dC5kZXBlbmRlbmNpZXM7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9PSBsaXN0KSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBoYXNDb250ZXh0LmNoaWxkO1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3QuZmlyc3RDb250ZXh0O1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZGVwZW5kZW5jeTtcblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3kuY29udGV4dCA9PT0gQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgxID09PSBoYXNDb250ZXh0LnRhZykge1xuICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgPSBjcmVhdGVVcGRhdGUocmVuZGVyTGFuZXMgJiAtcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kudGFnID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBoYXNDb250ZXh0LnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSB1cGRhdGVRdWV1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVuZGluZyA9IHVwZGF0ZVF1ZXVlLnBlbmRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKGRlcGVuZGVuY3kubmV4dCA9IGRlcGVuZGVuY3kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogKChkZXBlbmRlbmN5Lm5leHQgPSBwZW5kaW5nLm5leHQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwZW5kaW5nLm5leHQgPSBkZXBlbmRlbmN5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVRdWV1ZS5wZW5kaW5nID0gZGVwZW5kZW5jeTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGFzQ29udGV4dC5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IGhhc0NvbnRleHQuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBkZXBlbmRlbmN5ICYmIChkZXBlbmRlbmN5LmxhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgICAgICAgICAgICBoYXNDb250ZXh0LnJldHVybixcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsaXN0LmxhbmVzIHw9IHJlbmRlckxhbmVzO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKDEwID09PSBoYXNDb250ZXh0LnRhZylcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICBoYXNDb250ZXh0LnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogaGFzQ29udGV4dC5jaGlsZDtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoMTggPT09IGhhc0NvbnRleHQudGFnKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBoYXNDb250ZXh0LnJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gbmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJXZSBqdXN0IGNhbWUgZnJvbSBhIHBhcmVudCBzbyB3ZSBtdXN0IGhhdmUgaGFkIGEgcGFyZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLmxhbmVzIHw9IHJlbmRlckxhbmVzO1xuICAgICAgICAgICAgICAgIGxpc3QgPSBuZXdWYWx1ZS5hbHRlcm5hdGU7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbGlzdCAmJiAobGlzdC5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBoYXNDb250ZXh0LnNpYmxpbmc7XG4gICAgICAgICAgICAgIH0gZWxzZSBuZXdWYWx1ZSA9IGhhc0NvbnRleHQuY2hpbGQ7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9PSBuZXdWYWx1ZSkgbmV3VmFsdWUucmV0dXJuID0gaGFzQ29udGV4dDtcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAobmV3VmFsdWUgPSBoYXNDb250ZXh0OyBudWxsICE9PSBuZXdWYWx1ZTsgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBoYXNDb250ZXh0ID0gbmV3VmFsdWUuc2libGluZztcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBoYXNDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NvbnRleHQucmV0dXJuID0gbmV3VmFsdWUucmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGhhc0NvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5yZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBoYXNDb250ZXh0ID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY29udGV4dC5jaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIGNhc2UgOTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgIChDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAoY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHQpKSxcbiAgICAgICAgKENvbXBvbmVudCA9IENvbXBvbmVudChjb250ZXh0KSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxKSxcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgKTtcbiAgICBjYXNlIDE0OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAoY29udGV4dCA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgKGNvbnRleHQgPSByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCBjb250ZXh0KSksXG4gICAgICAgIHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApXG4gICAgICApO1xuICAgIGNhc2UgMTU6XG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgY2FzZSAxNzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgKGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAoY29udGV4dCA9XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgICAgPyBjb250ZXh0XG4gICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBjb250ZXh0KSksXG4gICAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MudGFnID0gMSksXG4gICAgICAgIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudClcbiAgICAgICAgICA/ICgoY3VycmVudCA9ICEwKSwgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykpXG4gICAgICAgICAgOiAoY3VycmVudCA9ICExKSxcbiAgICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBjb250ZXh0KSxcbiAgICAgICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGNvbnRleHQsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgZmluaXNoQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgITAsXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApXG4gICAgICApO1xuICAgIGNhc2UgMTk6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgY2FzZSAyMjpcbiAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuICB0aHJvdyBFcnJvcihcbiAgICBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgK1xuICAgICAgd29ya0luUHJvZ3Jlc3MudGFnICtcbiAgICAgIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICApO1xufTtcbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2skMihwcmlvcml0eUxldmVsLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMuc2libGluZyA9XG4gICAgdGhpcy5jaGlsZCA9XG4gICAgdGhpcy5yZXR1cm4gPVxuICAgIHRoaXMuc3RhdGVOb2RlID1cbiAgICB0aGlzLnR5cGUgPVxuICAgIHRoaXMuZWxlbWVudFR5cGUgPVxuICAgICAgbnVsbDtcbiAgdGhpcy5pbmRleCA9IDA7XG4gIHRoaXMucmVmQ2xlYW51cCA9IHRoaXMucmVmID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID1cbiAgICB0aGlzLm1lbW9pemVkU3RhdGUgPVxuICAgIHRoaXMudXBkYXRlUXVldWUgPVxuICAgIHRoaXMubWVtb2l6ZWRQcm9wcyA9XG4gICAgICBudWxsO1xuICB0aGlzLm1vZGUgPSBtb2RlO1xuICB0aGlzLnN1YnRyZWVGbGFncyA9IHRoaXMuZmxhZ3MgPSAwO1xuICB0aGlzLmRlbGV0aW9ucyA9IG51bGw7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IHRoaXMubGFuZXMgPSAwO1xuICB0aGlzLmFsdGVybmF0ZSA9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlcih0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xufVxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICBDb21wb25lbnQgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISghQ29tcG9uZW50IHx8ICFDb21wb25lbnQuaXNSZWFjdENvbXBvbmVudCk7XG59XG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudClcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkgPyAxIDogMDtcbiAgaWYgKHZvaWQgMCAhPT0gQ29tcG9uZW50ICYmIG51bGwgIT09IENvbXBvbmVudCkge1xuICAgIENvbXBvbmVudCA9IENvbXBvbmVudC4kJHR5cGVvZjtcbiAgICBpZiAoQ29tcG9uZW50ID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSByZXR1cm4gMTE7XG4gICAgaWYgKENvbXBvbmVudCA9PT0gUkVBQ1RfTUVNT19UWVBFKSByZXR1cm4gMTQ7XG4gIH1cbiAgcmV0dXJuIDI7XG59XG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBwZW5kaW5nUHJvcHMpIHtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgPyAoKHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoXG4gICAgICAgIGN1cnJlbnQudGFnLFxuICAgICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICAgIGN1cnJlbnQua2V5LFxuICAgICAgICBjdXJyZW50Lm1vZGVcbiAgICAgICkpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGUpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQpLFxuICAgICAgKGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3MpKVxuICAgIDogKCh3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHMpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGUpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzID0gMCksXG4gICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCkpO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGN1cnJlbnQuZmxhZ3MgJiAzMTQ1NzI4MDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgcGVuZGluZ1Byb3BzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9XG4gICAgbnVsbCA9PT0gcGVuZGluZ1Byb3BzXG4gICAgICA/IG51bGxcbiAgICAgIDogeyBsYW5lczogcGVuZGluZ1Byb3BzLmxhbmVzLCBmaXJzdENvbnRleHQ6IHBlbmRpbmdQcm9wcy5maXJzdENvbnRleHQgfTtcbiAgd29ya0luUHJvZ3Jlc3Muc2libGluZyA9IGN1cnJlbnQuc2libGluZztcbiAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSBjdXJyZW50LnJlZjtcbiAgd29ya0luUHJvZ3Jlc3MucmVmQ2xlYW51cCA9IGN1cnJlbnQucmVmQ2xlYW51cDtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufVxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gMzE0NTcyODI7XG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICBudWxsID09PSBjdXJyZW50XG4gICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsKSlcbiAgICA6ICgod29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcyksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAocmVuZGVyTGFuZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcyksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbGFuZXM6IHJlbmRlckxhbmVzLmxhbmVzLFxuICAgICAgICAgICAgICBmaXJzdENvbnRleHQ6IHJlbmRlckxhbmVzLmZpcnN0Q29udGV4dFxuICAgICAgICAgICAgfSkpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gIHR5cGUsXG4gIGtleSxcbiAgcGVuZGluZ1Byb3BzLFxuICBvd25lcixcbiAgbW9kZSxcbiAgbGFuZXNcbikge1xuICB2YXIgZmliZXJUYWcgPSAyO1xuICBvd25lciA9IHR5cGU7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKSBzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiYgKGZpYmVyVGFnID0gMSk7XG4gIGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSBmaWJlclRhZyA9IDU7XG4gIGVsc2VcbiAgICBhOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KHBlbmRpbmdQcm9wcy5jaGlsZHJlbiwgbW9kZSwgbGFuZXMsIGtleSk7XG4gICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gODtcbiAgICAgICAgbW9kZSB8PSA4O1xuICAgICAgICAwICE9PSAobW9kZSAmIDEpICYmIChtb2RlIHw9IDE2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHR5cGUgPSBjcmVhdGVGaWJlcigxMiwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUgfCAyKSksXG4gICAgICAgICAgKHR5cGUuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFKSxcbiAgICAgICAgICAodHlwZS5sYW5lcyA9IGxhbmVzKSxcbiAgICAgICAgICB0eXBlXG4gICAgICAgICk7XG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHR5cGUgPSBjcmVhdGVGaWJlcigxMywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAodHlwZS5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEUpLFxuICAgICAgICAgICh0eXBlLmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICh0eXBlID0gY3JlYXRlRmliZXIoMTksIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSksXG4gICAgICAgICAgKHR5cGUuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUpLFxuICAgICAgICAgICh0eXBlLmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgUkVBQ1RfT0ZGU0NSRUVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJiBudWxsICE9PSB0eXBlKVxuICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICBmaWJlclRhZyA9IDEwO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGZpYmVyVGFnID0gOTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgZmliZXJUYWcgPSAxMTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBmaWJlclRhZyA9IDE0O1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGZpYmVyVGFnID0gMTY7XG4gICAgICAgICAgICAgIG93bmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArXG4gICAgICAgICAgICAoKG51bGwgPT0gdHlwZSA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIilcbiAgICAgICAgKTtcbiAgICB9XG4gIGtleSA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGtleS5lbGVtZW50VHlwZSA9IHR5cGU7XG4gIGtleS50eXBlID0gb3duZXI7XG4gIGtleS5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4ga2V5O1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgZWxlbWVudHMgPSBjcmVhdGVGaWJlcig3LCBlbGVtZW50cywga2V5LCBtb2RlKTtcbiAgZWxlbWVudHMubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICBwZW5kaW5nUHJvcHMgPSBjcmVhdGVGaWJlcigyMiwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBwZW5kaW5nUHJvcHMuZWxlbWVudFR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgcGVuZGluZ1Byb3BzLmxhbmVzID0gbGFuZXM7XG4gIHZhciBwcmltYXJ5Q2hpbGRJbnN0YW5jZSA9IHtcbiAgICBfdmlzaWJpbGl0eTogMSxcbiAgICBfcGVuZGluZ1Zpc2liaWxpdHk6IDEsXG4gICAgX3BlbmRpbmdNYXJrZXJzOiBudWxsLFxuICAgIF9yZXRyeUNhY2hlOiBudWxsLFxuICAgIF90cmFuc2l0aW9uczogbnVsbCxcbiAgICBfY3VycmVudDogbnVsbCxcbiAgICBkZXRhY2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBmaWJlciA9IHByaW1hcnlDaGlsZEluc3RhbmNlLl9jdXJyZW50O1xuICAgICAgaWYgKG51bGwgPT09IGZpYmVyKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkNhbGxpbmcgT2Zmc2NyZWVuLmRldGFjaCBiZWZvcmUgaW5zdGFuY2UgaGFuZGxlIGhhcyBiZWVuIHNldC5cIlxuICAgICAgICApO1xuICAgICAgaWYgKDAgPT09IChwcmltYXJ5Q2hpbGRJbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiAyKSkge1xuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAoKHByaW1hcnlDaGlsZEluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSB8PSAyKSxcbiAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGF0dGFjaDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGZpYmVyID0gcHJpbWFyeUNoaWxkSW5zdGFuY2UuX2N1cnJlbnQ7XG4gICAgICBpZiAobnVsbCA9PT0gZmliZXIpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyBPZmZzY3JlZW4uZGV0YWNoIGJlZm9yZSBpbnN0YW5jZSBoYW5kbGUgaGFzIGJlZW4gc2V0LlwiXG4gICAgICAgICk7XG4gICAgICBpZiAoMCAhPT0gKHByaW1hcnlDaGlsZEluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIDIpKSB7XG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICgocHJpbWFyeUNoaWxkSW5zdGFuY2UuX3BlbmRpbmdWaXNpYmlsaXR5ICY9IC0zKSxcbiAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHBlbmRpbmdQcm9wcy5zdGF0ZU5vZGUgPSBwcmltYXJ5Q2hpbGRJbnN0YW5jZTtcbiAgcmV0dXJuIHBlbmRpbmdQcm9wcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgbGFuZXMpIHtcbiAgY29udGVudCA9IGNyZWF0ZUZpYmVyKDYsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICBjb250ZW50LmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBjb250ZW50O1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgbW9kZSA9IGNyZWF0ZUZpYmVyKFxuICAgIDQsXG4gICAgbnVsbCAhPT0gcG9ydGFsLmNoaWxkcmVuID8gcG9ydGFsLmNoaWxkcmVuIDogW10sXG4gICAgcG9ydGFsLmtleSxcbiAgICBtb2RlXG4gICk7XG4gIG1vZGUubGFuZXMgPSBsYW5lcztcbiAgbW9kZS5zdGF0ZU5vZGUgPSB7XG4gICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLFxuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIG1vZGU7XG59XG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKFxuICBjb250YWluZXJJbmZvLFxuICB0YWcsXG4gIGh5ZHJhdGUsXG4gIGlkZW50aWZpZXJQcmVmaXgsXG4gIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgZm9ybVN0YXRlXG4pIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gIHRoaXMuZmluaXNoZWRXb3JrID1cbiAgICB0aGlzLnBpbmdDYWNoZSA9XG4gICAgdGhpcy5jdXJyZW50ID1cbiAgICB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9XG4gICAgICBudWxsO1xuICB0aGlzLnRpbWVvdXRIYW5kbGUgPSAtMTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPVxuICAgIHRoaXMubmV4dCA9XG4gICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9XG4gICAgdGhpcy5jb250ZXh0ID1cbiAgICB0aGlzLmNhbmNlbFBlbmRpbmdDb21taXQgPVxuICAgICAgbnVsbDtcbiAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gMDtcbiAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKC0xKTtcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9XG4gICAgdGhpcy5zaGVsbFN1c3BlbmRDb3VudGVyID1cbiAgICB0aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzID1cbiAgICB0aGlzLmZpbmlzaGVkTGFuZXMgPVxuICAgIHRoaXMuZXhwaXJlZExhbmVzID1cbiAgICB0aGlzLnBpbmdlZExhbmVzID1cbiAgICB0aGlzLnN1c3BlbmRlZExhbmVzID1cbiAgICB0aGlzLnBlbmRpbmdMYW5lcyA9XG4gICAgICAwO1xuICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKDApO1xuICB0aGlzLmhpZGRlblVwZGF0ZXMgPSBjcmVhdGVMYW5lTWFwKG51bGwpO1xuICB0aGlzLmlkZW50aWZpZXJQcmVmaXggPSBpZGVudGlmaWVyUHJlZml4O1xuICB0aGlzLm9uUmVjb3ZlcmFibGVFcnJvciA9IG9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgdGhpcy5mb3JtU3RhdGUgPSBmb3JtU3RhdGU7XG4gIHRoaXMuaW5jb21wbGV0ZVRyYW5zaXRpb25zID0gbmV3IE1hcCgpO1xufVxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIGltcGxlbWVudGF0aW9uKSB7XG4gIHZhciBrZXkgPVxuICAgIDMgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBudWxsID09IGtleSA/IG51bGwgOiBcIlwiICsga2V5LFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgIGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvblxuICB9O1xufVxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZShjb21wb25lbnQpIHtcbiAgdmFyIGZpYmVyID0gY29tcG9uZW50Ll9yZWFjdEludGVybmFscztcbiAgaWYgKHZvaWQgMCA9PT0gZmliZXIpIHtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29tcG9uZW50LnJlbmRlcilcbiAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICBjb21wb25lbnQgPSBPYmplY3Qua2V5cyhjb21wb25lbnQpLmpvaW4oXCIsXCIpO1xuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIGNvbXBvbmVudFxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50ID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuICByZXR1cm4gbnVsbCA9PT0gY29tcG9uZW50ID8gbnVsbCA6IGdldFB1YmxpY0luc3RhbmNlKGNvbXBvbmVudC5zdGF0ZU5vZGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaykge1xuICB2YXIgY3VycmVudCA9IGNvbnRhaW5lci5jdXJyZW50LFxuICAgIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50KTtcbiAgYTogaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgIHBhcmVudENvbXBvbmVudCA9IHBhcmVudENvbXBvbmVudC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgYjoge1xuICAgICAgaWYgKFxuICAgICAgICBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHBhcmVudENvbXBvbmVudCkgIT09IHBhcmVudENvbXBvbmVudCB8fFxuICAgICAgICAxICE9PSBwYXJlbnRDb21wb25lbnQudGFnXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHBhcmVudENvbXBvbmVudDtcbiAgICAgIGRvIHtcbiAgICAgICAgc3dpdGNoIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQudGFnKSB7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnN0YXRlTm9kZS5jb250ZXh0O1xuICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnR5cGUpKSB7XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICAgLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O1xuICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5yZXR1cm47XG4gICAgICB9IHdoaWxlIChudWxsICE9PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpO1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiRm91bmQgdW5leHBlY3RlZCBkZXRhY2hlZCBzdWJ0cmVlIHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKDEgPT09IHBhcmVudENvbXBvbmVudC50YWcpIHtcbiAgICAgIHZhciBDb21wb25lbnQgPSBwYXJlbnRDb21wb25lbnQudHlwZTtcbiAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgIHBhcmVudENvbXBvbmVudCA9IHByb2Nlc3NDaGlsZENvbnRleHQoXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWsgYTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyZW50Q29tcG9uZW50ID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICB9IGVsc2UgcGFyZW50Q29tcG9uZW50ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICBudWxsID09PSBjb250YWluZXIuY29udGV4dFxuICAgID8gKGNvbnRhaW5lci5jb250ZXh0ID0gcGFyZW50Q29tcG9uZW50KVxuICAgIDogKGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IHBhcmVudENvbXBvbmVudCk7XG4gIGNvbnRhaW5lciA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgY29udGFpbmVyLnBheWxvYWQgPSB7IGVsZW1lbnQ6IGVsZW1lbnQgfTtcbiAgY2FsbGJhY2sgPSB2b2lkIDAgPT09IGNhbGxiYWNrID8gbnVsbCA6IGNhbGxiYWNrO1xuICBudWxsICE9PSBjYWxsYmFjayAmJiAoY29udGFpbmVyLmNhbGxiYWNrID0gY2FsbGJhY2spO1xuICBlbGVtZW50ID0gZW5xdWV1ZVVwZGF0ZShjdXJyZW50LCBjb250YWluZXIsIGxhbmUpO1xuICBudWxsICE9PSBlbGVtZW50ICYmXG4gICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihlbGVtZW50LCBjdXJyZW50LCBsYW5lKSxcbiAgICBlbnRhbmdsZVRyYW5zaXRpb25zKGVsZW1lbnQsIGN1cnJlbnQsIGxhbmUpKTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKCkge1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmROb2RlSGFuZGxlKGNvbXBvbmVudE9ySGFuZGxlKSB7XG4gIGlmIChudWxsID09IGNvbXBvbmVudE9ySGFuZGxlKSByZXR1cm4gbnVsbDtcbiAgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiBjb21wb25lbnRPckhhbmRsZSkgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlO1xuICBpZiAoY29tcG9uZW50T3JIYW5kbGUuX25hdGl2ZVRhZykgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlLl9uYXRpdmVUYWc7XG4gIGlmIChcbiAgICBudWxsICE9IGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbCAmJlxuICAgIG51bGwgIT0gY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsLm5hdGl2ZVRhZ1xuICApXG4gICAgcmV0dXJuIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5uYXRpdmVUYWc7XG4gIHZhciBuYXRpdmVUYWcgPVxuICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UoXG4gICAgICBjb21wb25lbnRPckhhbmRsZVxuICAgICk7XG4gIGlmIChuYXRpdmVUYWcpIHJldHVybiBuYXRpdmVUYWc7XG4gIGNvbXBvbmVudE9ySGFuZGxlID0gZmluZEhvc3RJbnN0YW5jZShjb21wb25lbnRPckhhbmRsZSk7XG4gIHJldHVybiBudWxsID09IGNvbXBvbmVudE9ySGFuZGxlXG4gICAgPyBjb21wb25lbnRPckhhbmRsZVxuICAgIDogbnVsbCAhPSBjb21wb25lbnRPckhhbmRsZS5fbmF0aXZlVGFnXG4gICAgPyBjb21wb25lbnRPckhhbmRsZS5fbmF0aXZlVGFnXG4gICAgOiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZ2V0TmF0aXZlVGFnRnJvbVB1YmxpY0luc3RhbmNlKFxuICAgICAgICBjb21wb25lbnRPckhhbmRsZVxuICAgICAgKTtcbn1cbmZ1bmN0aW9uIGdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZSgpIHtcbiAgdGhyb3cgRXJyb3IoXCJnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UoKSBpcyBub3QgYXZhaWxhYmxlIGluIHByb2R1Y3Rpb25cIik7XG59XG5mdW5jdGlvbiBvblJlY292ZXJhYmxlRXJyb3IoZXJyb3IpIHtcbiAgY29uc29sZS5lcnJvcihlcnJvcik7XG59XG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lclRhZykge1xuICB2YXIgcm9vdCA9IHJvb3RzLmdldChjb250YWluZXJUYWcpO1xuICByb290ICYmXG4gICAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJvb3RzLmRlbGV0ZShjb250YWluZXJUYWcpO1xuICAgIH0pO1xufVxuYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gMTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAwID09PSBleGVjdXRpb25Db250ZXh0ICYmXG4gICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgNTAwKSxcbiAgICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoITApKTtcbiAgfVxufTtcbnZhciByb290cyA9IG5ldyBNYXAoKSxcbiAgZGV2VG9vbHNDb25maWckanNjb21wJGlubGluZV8xMTE0ID0ge1xuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRJbnN0YW5jZUZyb21UYWcsXG4gICAgYnVuZGxlVHlwZTogMCxcbiAgICB2ZXJzaW9uOiBcIjE4LjMuMC1jYW5hcnktMDNkNmY3Y2YwLTIwMjQwMjA5XCIsXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogXCJyZWFjdC1uYXRpdmUtcmVuZGVyZXJcIixcbiAgICByZW5kZXJlckNvbmZpZzoge1xuICAgICAgZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlOiBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UsXG4gICAgICBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld1RhZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcImdldEluc3BlY3RvckRhdGFGb3JWaWV3VGFnKCkgaXMgbm90IGF2YWlsYWJsZSBpbiBwcm9kdWN0aW9uXCJcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQoKSBpcyBub3QgYXZhaWxhYmxlIGluIHByb2R1Y3Rpb24uXCJcbiAgICAgICAgKTtcbiAgICAgIH0uYmluZChudWxsLCBmaW5kTm9kZUhhbmRsZSlcbiAgICB9XG4gIH07XG52YXIgaW50ZXJuYWxzJGpzY29tcCRpbmxpbmVfMTM1MyA9IHtcbiAgYnVuZGxlVHlwZTogZGV2VG9vbHNDb25maWckanNjb21wJGlubGluZV8xMTE0LmJ1bmRsZVR5cGUsXG4gIHZlcnNpb246IGRldlRvb2xzQ29uZmlnJGpzY29tcCRpbmxpbmVfMTExNC52ZXJzaW9uLFxuICByZW5kZXJlclBhY2thZ2VOYW1lOiBkZXZUb29sc0NvbmZpZyRqc2NvbXAkaW5saW5lXzExMTQucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgcmVuZGVyZXJDb25maWc6IGRldlRvb2xzQ29uZmlnJGpzY29tcCRpbmxpbmVfMTExNC5yZW5kZXJlckNvbmZpZyxcbiAgb3ZlcnJpZGVIb29rU3RhdGU6IG51bGwsXG4gIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogbnVsbCxcbiAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBudWxsLFxuICBvdmVycmlkZVByb3BzOiBudWxsLFxuICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aDogbnVsbCxcbiAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG51bGwsXG4gIHNldEVycm9ySGFuZGxlcjogbnVsbCxcbiAgc2V0U3VzcGVuc2VIYW5kbGVyOiBudWxsLFxuICBzY2hlZHVsZVVwZGF0ZTogbnVsbCxcbiAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICBmaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcbiAgICByZXR1cm4gbnVsbCA9PT0gZmliZXIgPyBudWxsIDogZmliZXIuc3RhdGVOb2RlO1xuICB9LFxuICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpcbiAgICBkZXZUb29sc0NvbmZpZyRqc2NvbXAkaW5saW5lXzExMTQuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgfHxcbiAgICBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6IG51bGwsXG4gIHNjaGVkdWxlUmVmcmVzaDogbnVsbCxcbiAgc2NoZWR1bGVSb290OiBudWxsLFxuICBzZXRSZWZyZXNoSGFuZGxlcjogbnVsbCxcbiAgZ2V0Q3VycmVudEZpYmVyOiBudWxsLFxuICByZWNvbmNpbGVyVmVyc2lvbjogXCIxOC4zLjAtY2FuYXJ5LTAzZDZmN2NmMC0yMDI0MDIwOVwiXG59O1xuaWYgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pIHtcbiAgdmFyIGhvb2skanNjb21wJGlubGluZV8xMzU0ID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuICBpZiAoXG4gICAgIWhvb2skanNjb21wJGlubGluZV8xMzU0LmlzRGlzYWJsZWQgJiZcbiAgICBob29rJGpzY29tcCRpbmxpbmVfMTM1NC5zdXBwb3J0c0ZpYmVyXG4gIClcbiAgICB0cnkge1xuICAgICAgKHJlbmRlcmVySUQgPSBob29rJGpzY29tcCRpbmxpbmVfMTM1NC5pbmplY3QoXG4gICAgICAgIGludGVybmFscyRqc2NvbXAkaW5saW5lXzEzNTNcbiAgICAgICkpLFxuICAgICAgICAoaW5qZWN0ZWRIb29rID0gaG9vayRqc2NvbXAkaW5saW5lXzEzNTQpO1xuICAgIH0gY2F0Y2ggKGVycikge31cbn1cbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSB7XG4gIGNvbXB1dGVDb21wb25lbnRTdGFja0ZvckVycm9yUmVwb3J0aW5nOiBmdW5jdGlvbiAocmVhY3RUYWcpIHtcbiAgICByZXR1cm4gKHJlYWN0VGFnID0gZ2V0SW5zdGFuY2VGcm9tVGFnKHJlYWN0VGFnKSlcbiAgICAgID8gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHJlYWN0VGFnKVxuICAgICAgOiBcIlwiO1xuICB9XG59O1xuZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIGNvbnRhaW5lclRhZykge1xuICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoXG4gICAgY2hpbGRyZW4sXG4gICAgY29udGFpbmVyVGFnLFxuICAgIG51bGwsXG4gICAgMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiBudWxsXG4gICk7XG59O1xuZXhwb3J0cy5kaXNwYXRjaENvbW1hbmQgPSBmdW5jdGlvbiAoaGFuZGxlLCBjb21tYW5kLCBhcmdzKSB7XG4gIHZhciBuYXRpdmVUYWcgPVxuICAgIG51bGwgIT0gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgID8gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgIDogUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuICBudWxsICE9IG5hdGl2ZVRhZyAmJlxuICAgICgoaGFuZGxlID0gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaGFuZGxlKSksXG4gICAgbnVsbCAhPSBoYW5kbGVcbiAgICAgID8gbmF0aXZlRmFicmljVUlNYW5hZ2VyLmRpc3BhdGNoQ29tbWFuZChoYW5kbGUsIGNvbW1hbmQsIGFyZ3MpXG4gICAgICA6IFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIuZGlzcGF0Y2hWaWV3TWFuYWdlckNvbW1hbmQoXG4gICAgICAgICAgbmF0aXZlVGFnLFxuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgYXJnc1xuICAgICAgICApKTtcbn07XG5leHBvcnRzLmZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRCA9IGZ1bmN0aW9uIChjb21wb25lbnRPckhhbmRsZSkge1xuICByZXR1cm4gbnVsbCA9PSBjb21wb25lbnRPckhhbmRsZVxuICAgID8gbnVsbFxuICAgIDogY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsICYmIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZVxuICAgID8gY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsLnB1YmxpY0luc3RhbmNlXG4gICAgOiBjb21wb25lbnRPckhhbmRsZS5fbmF0aXZlVGFnXG4gICAgPyBjb21wb25lbnRPckhhbmRsZVxuICAgIDogZmluZEhvc3RJbnN0YW5jZShjb21wb25lbnRPckhhbmRsZSk7XG59O1xuZXhwb3J0cy5maW5kTm9kZUhhbmRsZSA9IGZpbmROb2RlSGFuZGxlO1xuZXhwb3J0cy5nZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UgPSBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2U7XG5leHBvcnRzLmlzQ2hpbGRQdWJsaWNJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgRXJyb3IoXCJpc0NoaWxkUHVibGljSW5zdGFuY2UoKSBpcyBub3QgYXZhaWxhYmxlIGluIHByb2R1Y3Rpb24uXCIpO1xufTtcbmV4cG9ydHMucmVuZGVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbnRhaW5lclRhZywgY2FsbGJhY2spIHtcbiAgdmFyIHJvb3QgPSByb290cy5nZXQoY29udGFpbmVyVGFnKTtcbiAgaWYgKCFyb290KSB7XG4gICAgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKGNvbnRhaW5lclRhZywgMCwgITEsIFwiXCIsIG9uUmVjb3ZlcmFibGVFcnJvciwgbnVsbCk7XG4gICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGNyZWF0ZUZpYmVyKDMsIG51bGwsIG51bGwsIDApO1xuICAgIHJvb3QuY3VycmVudCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuc3RhdGVOb2RlID0gcm9vdDtcbiAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgIGVsZW1lbnQ6IG51bGwsXG4gICAgICBpc0RlaHlkcmF0ZWQ6ICExLFxuICAgICAgY2FjaGU6IG51bGxcbiAgICB9O1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZShKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpO1xuICAgIHJvb3RzLnNldChjb250YWluZXJUYWcsIHJvb3QpO1xuICB9XG4gIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBjYWxsYmFjayk7XG4gIGE6IGlmICgoKGVsZW1lbnQgPSByb290LmN1cnJlbnQpLCBlbGVtZW50LmNoaWxkKSlcbiAgICBzd2l0Y2ggKGVsZW1lbnQuY2hpbGQudGFnKSB7XG4gICAgICBjYXNlIDI3OlxuICAgICAgY2FzZSA1OlxuICAgICAgICBlbGVtZW50ID0gZ2V0UHVibGljSW5zdGFuY2UoZWxlbWVudC5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICBicmVhayBhO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuY2hpbGQuc3RhdGVOb2RlO1xuICAgIH1cbiAgZWxzZSBlbGVtZW50ID0gbnVsbDtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuZXhwb3J0cy5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50ID0gZnVuY3Rpb24gKGhhbmRsZSwgZXZlbnRUeXBlKSB7XG4gIHZhciBuYXRpdmVUYWcgPVxuICAgIG51bGwgIT0gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgID8gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgIDogUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuICBudWxsICE9IG5hdGl2ZVRhZyAmJlxuICAgICgoaGFuZGxlID0gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaGFuZGxlKSksXG4gICAgbnVsbCAhPSBoYW5kbGVcbiAgICAgID8gbmF0aXZlRmFicmljVUlNYW5hZ2VyLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoaGFuZGxlLCBldmVudFR5cGUpXG4gICAgICA6IFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5sZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50KFxuICAgICAgICAgIG5hdGl2ZVRhZyxcbiAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgKSk7XG59O1xuZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlID0gdW5tb3VudENvbXBvbmVudEF0Tm9kZTtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZUFuZFJlbW92ZUNvbnRhaW5lciA9IGZ1bmN0aW9uIChjb250YWluZXJUYWcpIHtcbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXJUYWcpO1xuICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLnJlbW92ZVJvb3RWaWV3KGNvbnRhaW5lclRhZyk7XG59O1xuZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGJhdGNoZWRVcGRhdGVzJDE7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtJbnNwZWN0b3JEYXRhfSBmcm9tICcuLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtWaWV3U3R5bGVQcm9wfSBmcm9tICcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuXG5jb25zdCBUb3VjaGFibGVIaWdobGlnaHQgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1RvdWNoYWJsZS9Ub3VjaGFibGVIaWdobGlnaHQnKTtcbmNvbnN0IFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaycpO1xuY29uc3QgVmlldyA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3Jyk7XG5jb25zdCBmbGF0dGVuU3R5bGUgPSByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L2ZsYXR0ZW5TdHlsZScpO1xuY29uc3QgU3R5bGVTaGVldCA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCcpO1xuY29uc3QgVGV4dCA9IHJlcXVpcmUoJy4uL1RleHQvVGV4dCcpO1xuY29uc3QgbWFwV2l0aFNlcGFyYXRvciA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9tYXBXaXRoU2VwYXJhdG9yJyk7XG5jb25zdCBCb3hJbnNwZWN0b3IgPSByZXF1aXJlKCcuL0JveEluc3BlY3RvcicpO1xuY29uc3QgU3R5bGVJbnNwZWN0b3IgPSByZXF1aXJlKCcuL1N0eWxlSW5zcGVjdG9yJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgaGllcmFyY2h5OiA/SW5zcGVjdG9yRGF0YVsnaGllcmFyY2h5J10sXG4gIHN0eWxlPzogP1ZpZXdTdHlsZVByb3AsXG4gIGZyYW1lPzogP09iamVjdCxcbiAgc2VsZWN0aW9uPzogP251bWJlcixcbiAgc2V0U2VsZWN0aW9uPzogbnVtYmVyID0+IG1peGVkLFxufH0+O1xuXG5jbGFzcyBFbGVtZW50UHJvcGVydGllcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qgc3R5bGUgPSBmbGF0dGVuU3R5bGUodGhpcy5wcm9wcy5zdHlsZSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG5cbiAgICAvLyBXaXRob3V0IHRoZSBgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrYCwgdGFwcyBvbiB0aGlzIGluc3BlY3RvciBwYW5lXG4gICAgLy8gd291bGQgY2hhbmdlIHRoZSBpbnNwZWN0ZWQgZWxlbWVudCB0byB3aGF0ZXZlciBpcyB1bmRlciB0aGUgaW5zcGVjdG9yXG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3VjaGFibGVXaXRob3V0RmVlZGJhY2s+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaW5mb30+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5icmVhZGNydW1ifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmhpZXJhcmNoeSAhPSBudWxsICYmXG4gICAgICAgICAgICAgIG1hcFdpdGhTZXBhcmF0b3IoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5oaWVyYXJjaHksXG4gICAgICAgICAgICAgICAgKGhpZXJhcmNoeUl0ZW0sIGkpOiBSZWFjdC5NaXhlZEVsZW1lbnQgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICBrZXk9eydpdGVtLScgKyBpfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlcy5icmVhZEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaSA9PT0gc2VsZWN0aW9uICYmIHN0eWxlcy5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtub3QtYS1mdW5jdGlvbl0gZm91bmQgd2hlbiBjb252ZXJ0aW5nIFJlYWN0LmNyZWF0ZUNsYXNzIHRvIEVTNlxuICAgICAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLnByb3BzLnNldFNlbGVjdGlvbihpKX0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnJlYWRJdGVtVGV4dH0+XG4gICAgICAgICAgICAgICAgICAgICAge2hpZXJhcmNoeUl0ZW0ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoaSk6IFJlYWN0Lk1peGVkRWxlbWVudCA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGV4dCBrZXk9eydzZXAtJyArIGl9IHN0eWxlPXtzdHlsZXMuYnJlYWRTZXB9PlxuICAgICAgICAgICAgICAgICAgICAmIzk2NTY7XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb2x9PlxuICAgICAgICAgICAgICA8U3R5bGVJbnNwZWN0b3Igc3R5bGU9e3N0eWxlfSAvPlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgezxCb3hJbnNwZWN0b3Igc3R5bGU9e3N0eWxlfSBmcmFtZT17dGhpcy5wcm9wcy5mcmFtZX0gLz59XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYnJlYWRTZXA6IHtcbiAgICBmb250U2l6ZTogOCxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgfSxcbiAgYnJlYWRjcnVtYjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxuICAgIG1hcmdpbkJvdHRvbTogNSxcbiAgfSxcbiAgc2VsZWN0ZWQ6IHtcbiAgICBib3JkZXJDb2xvcjogJ3doaXRlJyxcbiAgICBib3JkZXJSYWRpdXM6IDUsXG4gIH0sXG4gIGJyZWFkSXRlbToge1xuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIG1hcmdpbkhvcml6b250YWw6IDIsXG4gIH0sXG4gIGJyZWFkSXRlbVRleHQ6IHtcbiAgICBmb250U2l6ZTogMTAsXG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgbWFyZ2luSG9yaXpvbnRhbDogNSxcbiAgfSxcbiAgcm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgfSxcbiAgY29sOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgaW5mbzoge1xuICAgIHBhZGRpbmc6IDEwLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRWxlbWVudFByb3BlcnRpZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBtYXBXaXRoU2VwYXJhdG9yPFRGcm9tLCBUVG8+KFxuICBpdGVtczogQXJyYXk8VEZyb20+LFxuICBpdGVtUmVuZGVyZXI6IChpdGVtOiBURnJvbSwgaW5kZXg6IG51bWJlciwgaXRlbXM6IEFycmF5PFRGcm9tPikgPT4gVFRvLFxuICBzcGFjZXJSZW5kZXJlcjogKGluZGV4OiBudW1iZXIpID0+IFRUbyxcbik6IEFycmF5PFRUbz4ge1xuICBjb25zdCBtYXBwZWQgPSBbXTtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICBtYXBwZWQucHVzaChpdGVtUmVuZGVyZXIoaXRlbXNbMF0sIDAsIGl0ZW1zKSk7XG4gICAgZm9yIChsZXQgaWkgPSAxOyBpaSA8IGl0ZW1zLmxlbmd0aDsgaWkrKykge1xuICAgICAgbWFwcGVkLnB1c2goc3BhY2VyUmVuZGVyZXIoaWkgLSAxKSwgaXRlbVJlbmRlcmVyKGl0ZW1zW2lpXSwgaWksIGl0ZW1zKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXBwZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2l0aFNlcGFyYXRvcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Q29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlb2YgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIGZyb20gJy4vVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrJztcblxuaW1wb3J0IFZpZXcgZnJvbSAnLi4vLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IFByZXNzYWJpbGl0eSwge1xuICB0eXBlIFByZXNzYWJpbGl0eUNvbmZpZyxcbn0gZnJvbSAnLi4vLi4vUHJlc3NhYmlsaXR5L1ByZXNzYWJpbGl0eSc7XG5pbXBvcnQge1ByZXNzYWJpbGl0eURlYnVnVmlld30gZnJvbSAnLi4vLi4vUHJlc3NhYmlsaXR5L1ByZXNzYWJpbGl0eURlYnVnJztcbmltcG9ydCBTdHlsZVNoZWV0LCB7dHlwZSBWaWV3U3R5bGVQcm9wfSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgQW5kcm9pZFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIG5leHRGb2N1c0Rvd24/OiA/bnVtYmVyLFxuICBuZXh0Rm9jdXNGb3J3YXJkPzogP251bWJlcixcbiAgbmV4dEZvY3VzTGVmdD86ID9udW1iZXIsXG4gIG5leHRGb2N1c1JpZ2h0PzogP251bWJlcixcbiAgbmV4dEZvY3VzVXA/OiA/bnVtYmVyLFxufH0+O1xuXG50eXBlIElPU1Byb3BzID0gJFJlYWRPbmx5PHt8XG4gIGhhc1RWUHJlZmVycmVkRm9jdXM/OiA/Ym9vbGVhbixcbnx9PjtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi5SZWFjdC5FbGVtZW50Q29uZmlnPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz4sXG4gIC4uLkFuZHJvaWRQcm9wcyxcbiAgLi4uSU9TUHJvcHMsXG5cbiAgYWN0aXZlT3BhY2l0eT86ID9udW1iZXIsXG4gIHVuZGVybGF5Q29sb3I/OiA/Q29sb3JWYWx1ZSxcbiAgc3R5bGU/OiA/Vmlld1N0eWxlUHJvcCxcbiAgb25TaG93VW5kZXJsYXk/OiA/KCkgPT4gdm9pZCxcbiAgb25IaWRlVW5kZXJsYXk/OiA/KCkgPT4gdm9pZCxcbiAgdGVzdE9ubHlfcHJlc3NlZD86ID9ib29sZWFuLFxuXG4gIGhvc3RSZWY6IFJlYWN0LlJlZjx0eXBlb2YgVmlldz4sXG58fT47XG5cbnR5cGUgRXh0cmFTdHlsZXMgPSAkUmVhZE9ubHk8e3xcbiAgY2hpbGQ6IFZpZXdTdHlsZVByb3AsXG4gIHVuZGVybGF5OiBWaWV3U3R5bGVQcm9wLFxufH0+O1xuXG50eXBlIFN0YXRlID0gJFJlYWRPbmx5PHt8XG4gIHByZXNzYWJpbGl0eTogUHJlc3NhYmlsaXR5LFxuICBleHRyYVN0eWxlczogP0V4dHJhU3R5bGVzLFxufH0+O1xuXG4vKipcbiAqIEEgd3JhcHBlciBmb3IgbWFraW5nIHZpZXdzIHJlc3BvbmQgcHJvcGVybHkgdG8gdG91Y2hlcy5cbiAqIE9uIHByZXNzIGRvd24sIHRoZSBvcGFjaXR5IG9mIHRoZSB3cmFwcGVkIHZpZXcgaXMgZGVjcmVhc2VkLCB3aGljaCBhbGxvd3NcbiAqIHRoZSB1bmRlcmxheSBjb2xvciB0byBzaG93IHRocm91Z2gsIGRhcmtlbmluZyBvciB0aW50aW5nIHRoZSB2aWV3LlxuICpcbiAqIFRoZSB1bmRlcmxheSBjb21lcyBmcm9tIHdyYXBwaW5nIHRoZSBjaGlsZCBpbiBhIG5ldyBWaWV3LCB3aGljaCBjYW4gYWZmZWN0XG4gKiBsYXlvdXQsIGFuZCBzb21ldGltZXMgY2F1c2UgdW53YW50ZWQgdmlzdWFsIGFydGlmYWN0cyBpZiBub3QgdXNlZCBjb3JyZWN0bHksXG4gKiBmb3IgZXhhbXBsZSBpZiB0aGUgYmFja2dyb3VuZENvbG9yIG9mIHRoZSB3cmFwcGVkIHZpZXcgaXNuJ3QgZXhwbGljaXRseSBzZXRcbiAqIHRvIGFuIG9wYXF1ZSBjb2xvci5cbiAqXG4gKiBUb3VjaGFibGVIaWdobGlnaHQgbXVzdCBoYXZlIG9uZSBjaGlsZCAobm90IHplcm8gb3IgbW9yZSB0aGFuIG9uZSkuXG4gKiBJZiB5b3Ugd2lzaCB0byBoYXZlIHNldmVyYWwgY2hpbGQgY29tcG9uZW50cywgd3JhcCB0aGVtIGluIGEgVmlldy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYFxuICogcmVuZGVyQnV0dG9uOiBmdW5jdGlvbigpIHtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0IG9uUHJlc3M9e3RoaXMuX29uUHJlc3NCdXR0b259PlxuICogICAgICAgPEltYWdlXG4gKiAgICAgICAgIHN0eWxlPXtzdHlsZXMuYnV0dG9ufVxuICogICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4vbXlCdXR0b24ucG5nJyl9XG4gKiAgICAgICAvPlxuICogICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICogICApO1xuICogfSxcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIGBgYFJlYWN0TmF0aXZlV2ViUGxheWVyXG4gKiBpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG4gKiBpbXBvcnQge1xuICogICBBcHBSZWdpc3RyeSxcbiAqICAgU3R5bGVTaGVldCxcbiAqICAgVG91Y2hhYmxlSGlnaGxpZ2h0LFxuICogICBUZXh0LFxuICogICBWaWV3LFxuICogfSBmcm9tICdyZWFjdC1uYXRpdmUnXG4gKlxuICogY2xhc3MgQXBwIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAqICAgICBzdXBlcihwcm9wcylcbiAqICAgICB0aGlzLnN0YXRlID0geyBjb3VudDogMCB9XG4gKiAgIH1cbiAqXG4gKiAgIG9uUHJlc3MgPSAoKSA9PiB7XG4gKiAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gKiAgICAgICBjb3VudDogdGhpcy5zdGF0ZS5jb3VudCsxXG4gKiAgICAgfSlcbiAqICAgfVxuICpcbiAqICByZW5kZXIoKSB7XG4gKiAgICAgcmV0dXJuIChcbiAqICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAqICAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICogICAgICAgICAgc3R5bGU9e3N0eWxlcy5idXR0b259XG4gKiAgICAgICAgICBvblByZXNzPXt0aGlzLm9uUHJlc3N9XG4gKiAgICAgICAgID5cbiAqICAgICAgICAgIDxUZXh0PiBUb3VjaCBIZXJlIDwvVGV4dD5cbiAqICAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gKiAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmNvdW50Q29udGFpbmVyXX0+XG4gKiAgICAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMuY291bnRUZXh0XX0+XG4gKiAgICAgICAgICAgICB7IHRoaXMuc3RhdGUuY291bnQgIT09IDAgPyB0aGlzLnN0YXRlLmNvdW50OiBudWxsfVxuICogICAgICAgICAgIDwvVGV4dD5cbiAqICAgICAgICAgPC9WaWV3PlxuICogICAgICAgPC9WaWV3PlxuICogICAgIClcbiAqICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAqICAgY29udGFpbmVyOiB7XG4gKiAgICAgZmxleDogMSxcbiAqICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gKiAgICAgcGFkZGluZ0hvcml6b250YWw6IDEwXG4gKiAgIH0sXG4gKiAgIGJ1dHRvbjoge1xuICogICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICogICAgIGJhY2tncm91bmRDb2xvcjogJyNEREREREQnLFxuICogICAgIHBhZGRpbmc6IDEwXG4gKiAgIH0sXG4gKiAgIGNvdW50Q29udGFpbmVyOiB7XG4gKiAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gKiAgICAgcGFkZGluZzogMTBcbiAqICAgfSxcbiAqICAgY291bnRUZXh0OiB7XG4gKiAgICAgY29sb3I6ICcjRkYwMEZGJ1xuICogICB9XG4gKiB9KVxuICpcbiAqIEFwcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29tcG9uZW50KCdBcHAnLCAoKSA9PiBBcHApXG4gKiBgYGBcbiAqXG4gKi9cbmNsYXNzIFRvdWNoYWJsZUhpZ2hsaWdodCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgX2hpZGVUaW1lb3V0OiA/VGltZW91dElEO1xuICBfaXNNb3VudGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc3RhdGU6IFN0YXRlID0ge1xuICAgIHByZXNzYWJpbGl0eTogbmV3IFByZXNzYWJpbGl0eSh0aGlzLl9jcmVhdGVQcmVzc2FiaWxpdHlDb25maWcoKSksXG4gICAgZXh0cmFTdHlsZXM6XG4gICAgICB0aGlzLnByb3BzLnRlc3RPbmx5X3ByZXNzZWQgPT09IHRydWUgPyB0aGlzLl9jcmVhdGVFeHRyYVN0eWxlcygpIDogbnVsbCxcbiAgfTtcblxuICBfY3JlYXRlUHJlc3NhYmlsaXR5Q29uZmlnKCk6IFByZXNzYWJpbGl0eUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbGFibGU6ICF0aGlzLnByb3BzLnJlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9uLFxuICAgICAgZGlzYWJsZWQ6XG4gICAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgIT0gbnVsbFxuICAgICAgICAgID8gdGhpcy5wcm9wcy5kaXNhYmxlZFxuICAgICAgICAgIDogdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmRpc2FibGVkLFxuICAgICAgaGl0U2xvcDogdGhpcy5wcm9wcy5oaXRTbG9wLFxuICAgICAgZGVsYXlMb25nUHJlc3M6IHRoaXMucHJvcHMuZGVsYXlMb25nUHJlc3MsXG4gICAgICBkZWxheVByZXNzSW46IHRoaXMucHJvcHMuZGVsYXlQcmVzc0luLFxuICAgICAgZGVsYXlQcmVzc091dDogdGhpcy5wcm9wcy5kZWxheVByZXNzT3V0LFxuICAgICAgbWluUHJlc3NEdXJhdGlvbjogMCxcbiAgICAgIHByZXNzUmVjdE9mZnNldDogdGhpcy5wcm9wcy5wcmVzc1JldGVudGlvbk9mZnNldCxcbiAgICAgIGFuZHJvaWRfZGlzYWJsZVNvdW5kOiB0aGlzLnByb3BzLnRvdWNoU291bmREaXNhYmxlZCxcbiAgICAgIG9uQmx1cjogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoUGxhdGZvcm0uaXNUVikge1xuICAgICAgICAgIHRoaXMuX2hpZGVVbmRlcmxheSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQmx1ciAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoUGxhdGZvcm0uaXNUVikge1xuICAgICAgICAgIHRoaXMuX3Nob3dVbmRlcmxheSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uRm9jdXMgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkxvbmdQcmVzczogdGhpcy5wcm9wcy5vbkxvbmdQcmVzcyxcbiAgICAgIG9uUHJlc3M6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2hpZGVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghUGxhdGZvcm0uaXNUVikge1xuICAgICAgICAgIHRoaXMuX3Nob3dVbmRlcmxheSgpO1xuICAgICAgICAgIHRoaXMuX2hpZGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9oaWRlVW5kZXJsYXkoKTtcbiAgICAgICAgICB9LCB0aGlzLnByb3BzLmRlbGF5UHJlc3NPdXQgPz8gMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25QcmVzcyAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vblByZXNzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uUHJlc3NJbjogZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5faGlkZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dCk7XG4gICAgICAgICAgdGhpcy5faGlkZVRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dVbmRlcmxheSgpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblByZXNzSW4gIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25QcmVzc0luKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uUHJlc3NPdXQ6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2hpZGVUaW1lb3V0ID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9oaWRlVW5kZXJsYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblByZXNzT3V0ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uUHJlc3NPdXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBfY3JlYXRlRXh0cmFTdHlsZXMoKTogRXh0cmFTdHlsZXMge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZDoge29wYWNpdHk6IHRoaXMucHJvcHMuYWN0aXZlT3BhY2l0eSA/PyAwLjg1fSxcbiAgICAgIHVuZGVybGF5OiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICB0aGlzLnByb3BzLnVuZGVybGF5Q29sb3IgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAnYmxhY2snXG4gICAgICAgICAgICA6IHRoaXMucHJvcHMudW5kZXJsYXlDb2xvcixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIF9zaG93VW5kZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc01vdW50ZWQgfHwgIXRoaXMuX2hhc1ByZXNzSGFuZGxlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe2V4dHJhU3R5bGVzOiB0aGlzLl9jcmVhdGVFeHRyYVN0eWxlcygpfSk7XG4gICAgaWYgKHRoaXMucHJvcHMub25TaG93VW5kZXJsYXkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9wcy5vblNob3dVbmRlcmxheSgpO1xuICAgIH1cbiAgfVxuXG4gIF9oaWRlVW5kZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2hpZGVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dCk7XG4gICAgICB0aGlzLl9oaWRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLnRlc3RPbmx5X3ByZXNzZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hhc1ByZXNzSGFuZGxlcigpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtleHRyYVN0eWxlczogbnVsbH0pO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25IaWRlVW5kZXJsYXkgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uSGlkZVVuZGVybGF5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2hhc1ByZXNzSGFuZGxlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5vblByZXNzICE9IG51bGwgfHxcbiAgICAgIHRoaXMucHJvcHMub25QcmVzc0luICE9IG51bGwgfHxcbiAgICAgIHRoaXMucHJvcHMub25QcmVzc091dCAhPSBudWxsIHx8XG4gICAgICB0aGlzLnByb3BzLm9uTG9uZ1ByZXNzICE9IG51bGxcbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4ub25seTwkRmxvd0ZpeE1lPih0aGlzLnByb3BzLmNoaWxkcmVuKTtcblxuICAgIC8vIEJBQ0tXQVJELUNPTVBBVElCSUxJVFk6IEZvY3VzIGFuZCBibHVyIGV2ZW50cyB3ZXJlIG5ldmVyIHN1cHBvcnRlZCBiZWZvcmVcbiAgICAvLyBhZG9wdGluZyBgUHJlc3NhYmlsaXR5YCwgc28gcHJlc2VydmUgdGhhdCBiZWhhdmlvci5cbiAgICBjb25zdCB7b25CbHVyLCBvbkZvY3VzLCAuLi5ldmVudEhhbmRsZXJzV2l0aG91dEJsdXJBbmRGb2N1c30gPVxuICAgICAgdGhpcy5zdGF0ZS5wcmVzc2FiaWxpdHkuZ2V0RXZlbnRIYW5kbGVycygpO1xuXG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eVN0YXRlID1cbiAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgIT0gbnVsbFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMucHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlO1xuXG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eVZhbHVlID0ge1xuICAgICAgbWF4OiB0aGlzLnByb3BzWydhcmlhLXZhbHVlbWF4J10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5VmFsdWU/Lm1heCxcbiAgICAgIG1pbjogdGhpcy5wcm9wc1snYXJpYS12YWx1ZW1pbiddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVZhbHVlPy5taW4sXG4gICAgICBub3c6IHRoaXMucHJvcHNbJ2FyaWEtdmFsdWVub3cnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8ubm93LFxuICAgICAgdGV4dDogdGhpcy5wcm9wc1snYXJpYS12YWx1ZXRleHQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8udGV4dCxcbiAgICB9O1xuXG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eUxpdmVSZWdpb24gPVxuICAgICAgdGhpcy5wcm9wc1snYXJpYS1saXZlJ10gPT09ICdvZmYnXG4gICAgICAgID8gJ25vbmUnXG4gICAgICAgIDogdGhpcy5wcm9wc1snYXJpYS1saXZlJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbjtcblxuICAgIGNvbnN0IGFjY2Vzc2liaWxpdHlMYWJlbCA9XG4gICAgICB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5TGFiZWw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGFjY2Vzc2libGU9e3RoaXMucHJvcHMuYWNjZXNzaWJsZSAhPT0gZmFsc2V9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17YWNjZXNzaWJpbGl0eUxhYmVsfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5SGludD17dGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5SGludH1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUxhbmd1YWdlPXt0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlMYW5ndWFnZX1cbiAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9e3RoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVJvbGV9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17YWNjZXNzaWJpbGl0eVN0YXRlfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5VmFsdWU9e2FjY2Vzc2liaWxpdHlWYWx1ZX1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e3RoaXMucHJvcHMuYWNjZXNzaWJpbGl0eUFjdGlvbnN9XG4gICAgICAgIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj17dGhpcy5wcm9wcy5vbkFjY2Vzc2liaWxpdHlBY3Rpb259XG4gICAgICAgIGltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9e1xuICAgICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtaGlkZGVuJ10gPT09IHRydWVcbiAgICAgICAgICAgID8gJ25vLWhpZGUtZGVzY2VuZGFudHMnXG4gICAgICAgICAgICA6IHRoaXMucHJvcHMuaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eVxuICAgICAgICB9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlWaWV3SXNNb2RhbD17XG4gICAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1tb2RhbCddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVZpZXdJc01vZGFsXG4gICAgICAgIH1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUxpdmVSZWdpb249e2FjY2Vzc2liaWxpdHlMaXZlUmVnaW9ufVxuICAgICAgICBhY2Nlc3NpYmlsaXR5RWxlbWVudHNIaWRkZW49e1xuICAgICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtaGlkZGVuJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5RWxlbWVudHNIaWRkZW5cbiAgICAgICAgfVxuICAgICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKFxuICAgICAgICAgIHRoaXMucHJvcHMuc3R5bGUsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5leHRyYVN0eWxlcz8udW5kZXJsYXksXG4gICAgICAgICl9XG4gICAgICAgIG9uTGF5b3V0PXt0aGlzLnByb3BzLm9uTGF5b3V0fVxuICAgICAgICBoaXRTbG9wPXt0aGlzLnByb3BzLmhpdFNsb3B9XG4gICAgICAgIGhhc1RWUHJlZmVycmVkRm9jdXM9e3RoaXMucHJvcHMuaGFzVFZQcmVmZXJyZWRGb2N1c31cbiAgICAgICAgbmV4dEZvY3VzRG93bj17dGhpcy5wcm9wcy5uZXh0Rm9jdXNEb3dufVxuICAgICAgICBuZXh0Rm9jdXNGb3J3YXJkPXt0aGlzLnByb3BzLm5leHRGb2N1c0ZvcndhcmR9XG4gICAgICAgIG5leHRGb2N1c0xlZnQ9e3RoaXMucHJvcHMubmV4dEZvY3VzTGVmdH1cbiAgICAgICAgbmV4dEZvY3VzUmlnaHQ9e3RoaXMucHJvcHMubmV4dEZvY3VzUmlnaHR9XG4gICAgICAgIG5leHRGb2N1c1VwPXt0aGlzLnByb3BzLm5leHRGb2N1c1VwfVxuICAgICAgICBmb2N1c2FibGU9e1xuICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNhYmxlICE9PSBmYWxzZSAmJiB0aGlzLnByb3BzLm9uUHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZUlEPXt0aGlzLnByb3BzLmlkID8/IHRoaXMucHJvcHMubmF0aXZlSUR9XG4gICAgICAgIHRlc3RJRD17dGhpcy5wcm9wcy50ZXN0SUR9XG4gICAgICAgIHJlZj17dGhpcy5wcm9wcy5ob3N0UmVmfVxuICAgICAgICB7Li4uZXZlbnRIYW5kbGVyc1dpdGhvdXRCbHVyQW5kRm9jdXN9PlxuICAgICAgICB7UmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgICAgc3R5bGU6IFN0eWxlU2hlZXQuY29tcG9zZShcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnN0eWxlLFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5leHRyYVN0eWxlcz8uY2hpbGQsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSl9XG4gICAgICAgIHtfX0RFVl9fID8gKFxuICAgICAgICAgIDxQcmVzc2FiaWxpdHlEZWJ1Z1ZpZXcgY29sb3I9XCJncmVlblwiIGhpdFNsb3A9e3RoaXMucHJvcHMuaGl0U2xvcH0gLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zdGF0ZS5wcmVzc2FiaWxpdHkuY29uZmlndXJlKHRoaXMuX2NyZWF0ZVByZXNzYWJpbGl0eUNvbmZpZygpKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFByb3BzLCBwcmV2U3RhdGU6IFN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZS5wcmVzc2FiaWxpdHkuY29uZmlndXJlKHRoaXMuX2NyZWF0ZVByZXNzYWJpbGl0eUNvbmZpZygpKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLl9oaWRlVGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXQpO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5yZXNldCgpO1xuICB9XG59XG5cbmNvbnN0IFRvdWNoYWJsZTogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG4gICRSZWFkT25seTwkRGlmZjxQcm9wcywge3xob3N0UmVmOiBSZWFjdC5SZWY8dHlwZW9mIFZpZXc+fH0+PixcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlldz4sXG4+ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGhvc3RSZWYpID0+IChcbiAgPFRvdWNoYWJsZUhpZ2hsaWdodCB7Li4ucHJvcHN9IGhvc3RSZWY9e2hvc3RSZWZ9IC8+XG4pKTtcblxuVG91Y2hhYmxlLmRpc3BsYXlOYW1lID0gJ1RvdWNoYWJsZUhpZ2hsaWdodCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVG91Y2hhYmxlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgVmlldyA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3Jyk7XG5jb25zdCBTdHlsZVNoZWV0ID0gcmVxdWlyZSgnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0Jyk7XG5jb25zdCBUZXh0ID0gcmVxdWlyZSgnLi4vVGV4dC9UZXh0Jyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbmNsYXNzIFN0eWxlSW5zcGVjdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnN0eWxlKSB7XG4gICAgICByZXR1cm4gPFRleHQgc3R5bGU9e3N0eWxlcy5ub1N0eWxlfT5ObyBzdHlsZTwvVGV4dD47XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcy5zdHlsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAge25hbWVzLm1hcChuYW1lID0+IChcbiAgICAgICAgICAgIDxUZXh0IGtleT17bmFtZX0gc3R5bGU9e3N0eWxlcy5hdHRyfT5cbiAgICAgICAgICAgICAge25hbWV9OlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1ZpZXc+XG5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAge25hbWVzLm1hcChuYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wcy5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxUZXh0IGtleT17bmFtZX0gc3R5bGU9e3N0eWxlcy52YWx1ZX0+XG4gICAgICAgICAgICAgICAge3R5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgIDogdmFsdWV9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gIH0sXG4gIGF0dHI6IHtcbiAgICBmb250U2l6ZTogMTAsXG4gICAgY29sb3I6ICcjY2NjJyxcbiAgfSxcbiAgdmFsdWU6IHtcbiAgICBmb250U2l6ZTogMTAsXG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgbWFyZ2luTGVmdDogMTAsXG4gIH0sXG4gIG5vU3R5bGU6IHtcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBmb250U2l6ZTogMTAsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHlsZUluc3BlY3RvcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFZpZXcgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1ZpZXcvVmlldycpO1xuY29uc3QgU3R5bGVTaGVldCA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCcpO1xuY29uc3QgVGV4dCA9IHJlcXVpcmUoJy4uL1RleHQvVGV4dCcpO1xuY29uc3QgcmVzb2x2ZUJveFN0eWxlID0gcmVxdWlyZSgnLi9yZXNvbHZlQm94U3R5bGUnKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuY29uc3QgYmxhbmsgPSB7XG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbn07XG5cbmNsYXNzIEJveEluc3BlY3RvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDwkRmxvd0ZpeE1lUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5wcm9wcy5mcmFtZTtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMucHJvcHMuc3R5bGU7XG4gICAgY29uc3QgbWFyZ2luID0gKHN0eWxlICYmIHJlc29sdmVCb3hTdHlsZSgnbWFyZ2luJywgc3R5bGUpKSB8fCBibGFuaztcbiAgICBjb25zdCBwYWRkaW5nID0gKHN0eWxlICYmIHJlc29sdmVCb3hTdHlsZSgncGFkZGluZycsIHN0eWxlKSkgfHwgYmxhbms7XG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3hDb250YWluZXIgdGl0bGU9XCJtYXJnaW5cIiB0aXRsZVN0eWxlPXtzdHlsZXMubWFyZ2luTGFiZWx9IGJveD17bWFyZ2lufT5cbiAgICAgICAgPEJveENvbnRhaW5lciB0aXRsZT1cInBhZGRpbmdcIiBib3g9e3BhZGRpbmd9PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5pbm5lclRleHR9PlxuICAgICAgICAgICAgICAoeyhmcmFtZS5sZWZ0IHx8IDApLnRvRml4ZWQoMSl9LCB7KGZyYW1lLnRvcCB8fCAwKS50b0ZpeGVkKDEpfSlcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuaW5uZXJUZXh0fT5cbiAgICAgICAgICAgICAgeyhmcmFtZS53aWR0aCB8fCAwKS50b0ZpeGVkKDEpfSAmdGltZXM7eycgJ31cbiAgICAgICAgICAgICAgeyhmcmFtZS5oZWlnaHQgfHwgMCkudG9GaXhlZCgxKX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvQm94Q29udGFpbmVyPlxuICAgICAgPC9Cb3hDb250YWluZXI+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBCb3hDb250YWluZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8JEZsb3dGaXhNZVByb3BzPiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBib3ggPSB0aGlzLnByb3BzLmJveDtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3h9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAge31cbiAgICAgICAgICA8VGV4dCBzdHlsZT17W3RoaXMucHJvcHMudGl0bGVTdHlsZSwgc3R5bGVzLmxhYmVsXX0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5ib3hUZXh0fT57Ym94LnRvcH08L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm94VGV4dH0+e2JveC5sZWZ0fTwvVGV4dD5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJveFRleHR9Pntib3gucmlnaHR9PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm94VGV4dH0+e2JveC5ib3R0b219PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb3c6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gIH0sXG4gIG1hcmdpbkxhYmVsOiB7XG4gICAgd2lkdGg6IDYwLFxuICB9LFxuICBsYWJlbDoge1xuICAgIGZvbnRTaXplOiAxMCxcbiAgICBjb2xvcjogJ3JnYigyNTUsMTAwLDApJyxcbiAgICBtYXJnaW5MZWZ0OiA1LFxuICAgIGZsZXg6IDEsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgdG9wOiAtMyxcbiAgfSxcbiAgaW5uZXJUZXh0OiB7XG4gICAgY29sb3I6ICd5ZWxsb3cnLFxuICAgIGZvbnRTaXplOiAxMixcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIHdpZHRoOiA3MCxcbiAgfSxcbiAgYm94OiB7XG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdncmV5JyxcbiAgfSxcbiAgYm94VGV4dDoge1xuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGZvbnRTaXplOiAxMixcbiAgICBtYXJnaW5Ib3Jpem9udGFsOiAzLFxuICAgIG1hcmdpblZlcnRpY2FsOiAyLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBCb3hJbnNwZWN0b3I7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFZpZXcgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1ZpZXcvVmlldycpO1xuY29uc3QgU3R5bGVTaGVldCA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCcpO1xuY29uc3QgVGV4dCA9IHJlcXVpcmUoJy4uL1RleHQvVGV4dCcpO1xuY29uc3QgUGVyZm9ybWFuY2VMb2dnZXIgPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvR2xvYmFsUGVyZm9ybWFuY2VMb2dnZXInKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuY2xhc3MgUGVyZm9ybWFuY2VPdmVybGF5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBwZXJmTG9ncyA9IFBlcmZvcm1hbmNlTG9nZ2VyLmdldFRpbWVzcGFucygpO1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwZXJmTG9ncykge1xuICAgICAgaWYgKHBlcmZMb2dzW2tleV0/LnRvdGFsVGltZSkge1xuICAgICAgICBjb25zdCB1bml0ID0ga2V5ID09PSAnQnVuZGxlU2l6ZScgPyAnYicgOiAnbXMnO1xuICAgICAgICBpdGVtcy5wdXNoKFxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fSBrZXk9e2tleX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0LCBzdHlsZXMubGFiZWxdfT57a2V5fTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLnRleHQsIHN0eWxlcy50b3RhbFRpbWVdfT5cbiAgICAgICAgICAgICAge3BlcmZMb2dzW2tleV0udG90YWxUaW1lICsgdW5pdH1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+e2l0ZW1zfTwvVmlldz47XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICBwYWRkaW5nVG9wOiAxMCxcbiAgfSxcbiAgbGFiZWw6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICByb3c6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBmb250U2l6ZTogMTIsXG4gIH0sXG4gIHRvdGFsVGltZToge1xuICAgIHBhZGRpbmdSaWdodDogMTAwLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUGVyZm9ybWFuY2VPdmVybGF5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UmVuZGVySXRlbVByb3BzfSBmcm9tICdAcmVhY3QtbmF0aXZlL3ZpcnR1YWxpemVkLWxpc3RzJztcblxuY29uc3QgU2Nyb2xsVmlldyA9IHJlcXVpcmUoJy4uL0NvbXBvbmVudHMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3Jyk7XG5jb25zdCBUb3VjaGFibGVIaWdobGlnaHQgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1RvdWNoYWJsZS9Ub3VjaGFibGVIaWdobGlnaHQnKTtcbmNvbnN0IFZpZXcgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1ZpZXcvVmlldycpO1xuY29uc3QgRmxhdExpc3QgPSByZXF1aXJlKCcuLi9MaXN0cy9GbGF0TGlzdCcpO1xuY29uc3QgWEhSSW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuLi9OZXR3b3JrL1hIUkludGVyY2VwdG9yJyk7XG5jb25zdCBTdHlsZVNoZWV0ID0gcmVxdWlyZSgnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0Jyk7XG5jb25zdCBUZXh0ID0gcmVxdWlyZSgnLi4vVGV4dC9UZXh0Jyk7XG5jb25zdCBXZWJTb2NrZXRJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4uL1dlYlNvY2tldC9XZWJTb2NrZXRJbnRlcmNlcHRvcicpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG5jb25zdCBMSVNUVklFV19DRUxMX0hFSUdIVCA9IDE1O1xuXG4vLyBHbG9iYWwgaWQgZm9yIHRoZSBpbnRlcmNlcHRlZCBYTUxIdHRwUmVxdWVzdCBvYmplY3RzLlxubGV0IG5leHRYSFJJZCA9IDA7XG5cbnR5cGUgTmV0d29ya1JlcXVlc3RJbmZvID0ge1xuICBpZDogbnVtYmVyLFxuICB0eXBlPzogc3RyaW5nLFxuICB1cmw/OiBzdHJpbmcsXG4gIG1ldGhvZD86IHN0cmluZyxcbiAgc3RhdHVzPzogbnVtYmVyLFxuICBkYXRhU2VudD86IGFueSxcbiAgcmVzcG9uc2VDb250ZW50VHlwZT86IHN0cmluZyxcbiAgcmVzcG9uc2VTaXplPzogbnVtYmVyLFxuICByZXF1ZXN0SGVhZGVycz86IE9iamVjdCxcbiAgcmVzcG9uc2VIZWFkZXJzPzogc3RyaW5nLFxuICByZXNwb25zZT86IE9iamVjdCB8IHN0cmluZyxcbiAgcmVzcG9uc2VVUkw/OiBzdHJpbmcsXG4gIHJlc3BvbnNlVHlwZT86IHN0cmluZyxcbiAgdGltZW91dD86IG51bWJlcixcbiAgY2xvc2VSZWFzb24/OiBzdHJpbmcsXG4gIG1lc3NhZ2VzPzogc3RyaW5nLFxuICBzZXJ2ZXJDbG9zZT86IE9iamVjdCxcbiAgc2VydmVyRXJyb3I/OiBPYmplY3QsXG4gIC4uLlxufTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fHx9PjtcbnR5cGUgU3RhdGUgPSB7fFxuICBkZXRhaWxSb3dJZDogP251bWJlcixcbiAgcmVxdWVzdHM6IEFycmF5PE5ldHdvcmtSZXF1ZXN0SW5mbz4sXG58fTtcblxuZnVuY3Rpb24gZ2V0U3RyaW5nQnlWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDUwMCkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAuc2xpY2UoMCwgNTAwKVxuICAgICAgLmNvbmNhdCgnXFxuKioqVFJVTkNBVEVEIFRPIDUwMCBDSEFSQUNURVJTKioqJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRUeXBlU2hvcnROYW1lKHR5cGU6IGFueSk6IHN0cmluZyB7XG4gIGlmICh0eXBlID09PSAnWE1MSHR0cFJlcXVlc3QnKSB7XG4gICAgcmV0dXJuICdYSFInO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdXZWJTb2NrZXQnKSB7XG4gICAgcmV0dXJuICdXUyc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGtleUV4dHJhY3RvcihyZXF1ZXN0OiBOZXR3b3JrUmVxdWVzdEluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gU3RyaW5nKHJlcXVlc3QuaWQpO1xufVxuXG4vKipcbiAqIFNob3cgYWxsIHRoZSBpbnRlcmNlcHRlZCBuZXR3b3JrIHJlcXVlc3RzIG92ZXIgdGhlIEluc3BlY3RvclBhbmVsLlxuICovXG5jbGFzcyBOZXR3b3JrT3ZlcmxheSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgX3JlcXVlc3RzTGlzdFZpZXc6ID9SZWFjdC5FbGVtZW50UmVmPENsYXNzPEZsYXRMaXN0PE5ldHdvcmtSZXF1ZXN0SW5mbz4+PjtcbiAgX2RldGFpbFNjcm9sbFZpZXc6ID9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBTY3JvbGxWaWV3PjtcblxuICAvLyBNZXRyaWNzIGFyZSB1c2VkIHRvIGRlY2lkZSB3aGVuIGlmIHRoZSByZXF1ZXN0IGxpc3Qgc2hvdWxkIGJlIHN0aWNreSwgYW5kXG4gIC8vIHNjcm9sbCB0byB0aGUgYm90dG9tIGFzIG5ldyBuZXR3b3JrIHJlcXVlc3RzIGNvbWUgaW4sIG9yIGlmIHRoZSB1c2VyIGhhc1xuICAvLyBpbnRlbnRpb25hbGx5IHNjcm9sbGVkIGF3YXkgZnJvbSB0aGUgYm90dG9tIC0gdG8gaW5zdGVhZCBmbGFzaCB0aGUgc2Nyb2xsIGJhclxuICAvLyBhbmQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvblxuICBfcmVxdWVzdHNMaXN0Vmlld1Njcm9sbE1ldHJpY3M6IHtcbiAgICBjb250ZW50TGVuZ3RoOiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdmlzaWJsZUxlbmd0aDogbnVtYmVyLFxuICB9ID0ge1xuICAgIG9mZnNldDogMCxcbiAgICB2aXNpYmxlTGVuZ3RoOiAwLFxuICAgIGNvbnRlbnRMZW5ndGg6IDAsXG4gIH07XG5cbiAgLy8gTWFwIG9mIGBzb2NrZXRJZGAgLT4gYGluZGV4IGluIGB0aGlzLnN0YXRlLnJlcXVlc3RzYC5cbiAgX3NvY2tldElkTWFwOiB7W3N0cmluZ106IG51bWJlcn0gPSB7fTtcbiAgLy8gTWFwIG9mIGB4aHIuX2luZGV4YCAtPiBgaW5kZXggaW4gYHRoaXMuc3RhdGUucmVxdWVzdHNgLlxuICBfeGhySWRNYXA6IHtba2V5OiBudW1iZXJdOiBudW1iZXIsIC4uLn0gPSB7fTtcblxuICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgZGV0YWlsUm93SWQ6IG51bGwsXG4gICAgcmVxdWVzdHM6IFtdLFxuICB9O1xuXG4gIF9lbmFibGVYSFJJbnRlcmNlcHRpb24oKTogdm9pZCB7XG4gICAgaWYgKFhIUkludGVyY2VwdG9yLmlzSW50ZXJjZXB0b3JFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2hvdyB0aGUgWEhSIHJlcXVlc3QgaXRlbSBpbiBsaXN0VmlldyBhcyBzb29uIGFzIGl0IHdhcyBvcGVuZWQuXG4gICAgWEhSSW50ZXJjZXB0b3Iuc2V0T3BlbkNhbGxiYWNrKChtZXRob2QsIHVybCwgeGhyKSA9PiB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIGdsb2JhbCBpZCBmb3IgZWFjaCBpbnRlcmNlcHRlZCB4aHIgb2JqZWN0LCBhZGQgdGhpcyBpZFxuICAgICAgLy8gdG8gdGhlIHhociBvYmplY3QgYXMgYSBwcml2YXRlIGBfaW5kZXhgIHByb3BlcnR5IHRvIGlkZW50aWZ5IGl0LFxuICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IHhociBvYmplY3RzIGluIGNhbGxiYWNrcy5cbiAgICAgIHhoci5faW5kZXggPSBuZXh0WEhSSWQrKztcbiAgICAgIGNvbnN0IHhockluZGV4ID0gdGhpcy5zdGF0ZS5yZXF1ZXN0cy5sZW5ndGg7XG4gICAgICB0aGlzLl94aHJJZE1hcFt4aHIuX2luZGV4XSA9IHhockluZGV4O1xuXG4gICAgICBjb25zdCBfeGhyOiBOZXR3b3JrUmVxdWVzdEluZm8gPSB7XG4gICAgICAgIGlkOiB4aHJJbmRleCxcbiAgICAgICAgdHlwZTogJ1hNTEh0dHBSZXF1ZXN0JyxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1ZXN0czogdGhpcy5zdGF0ZS5yZXF1ZXN0cy5jb25jYXQoX3hociksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuX2luZGljYXRlQWRkaXRpb25hbFJlcXVlc3RzLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIFhIUkludGVyY2VwdG9yLnNldFJlcXVlc3RIZWFkZXJDYWxsYmFjaygoaGVhZGVyLCB2YWx1ZSwgeGhyKSA9PiB7XG4gICAgICBjb25zdCB4aHJJbmRleCA9IHRoaXMuX2dldFJlcXVlc3RJbmRleEJ5WEhSSUQoeGhyLl9pbmRleCk7XG4gICAgICBpZiAoeGhySW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSgoe3JlcXVlc3RzfSkgPT4ge1xuICAgICAgICBjb25zdCBuZXR3b3JrUmVxdWVzdEluZm8gPSByZXF1ZXN0c1t4aHJJbmRleF07XG4gICAgICAgIGlmICghbmV0d29ya1JlcXVlc3RJbmZvLnJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICAgICAgbmV0d29ya1JlcXVlc3RJbmZvLnJlcXVlc3RIZWFkZXJzID0gKHt9OiB7W2FueV06IGFueX0pO1xuICAgICAgICB9XG4gICAgICAgIG5ldHdvcmtSZXF1ZXN0SW5mby5yZXF1ZXN0SGVhZGVyc1toZWFkZXJdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB7cmVxdWVzdHN9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBYSFJJbnRlcmNlcHRvci5zZXRTZW5kQ2FsbGJhY2soKGRhdGEsIHhocikgPT4ge1xuICAgICAgY29uc3QgeGhySW5kZXggPSB0aGlzLl9nZXRSZXF1ZXN0SW5kZXhCeVhIUklEKHhoci5faW5kZXgpO1xuICAgICAgaWYgKHhockluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHtyZXF1ZXN0c30pID0+IHtcbiAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RJbmZvID0gcmVxdWVzdHNbeGhySW5kZXhdO1xuICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8uZGF0YVNlbnQgPSBkYXRhO1xuICAgICAgICByZXR1cm4ge3JlcXVlc3RzfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgWEhSSW50ZXJjZXB0b3Iuc2V0SGVhZGVyUmVjZWl2ZWRDYWxsYmFjayhcbiAgICAgICh0eXBlLCBzaXplLCByZXNwb25zZUhlYWRlcnMsIHhocikgPT4ge1xuICAgICAgICBjb25zdCB4aHJJbmRleCA9IHRoaXMuX2dldFJlcXVlc3RJbmRleEJ5WEhSSUQoeGhyLl9pbmRleCk7XG4gICAgICAgIGlmICh4aHJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKCh7cmVxdWVzdHN9KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RJbmZvID0gcmVxdWVzdHNbeGhySW5kZXhdO1xuICAgICAgICAgIG5ldHdvcmtSZXF1ZXN0SW5mby5yZXNwb25zZUNvbnRlbnRUeXBlID0gdHlwZTtcbiAgICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8ucmVzcG9uc2VTaXplID0gc2l6ZTtcbiAgICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8ucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzO1xuICAgICAgICAgIHJldHVybiB7cmVxdWVzdHN9O1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIFhIUkludGVyY2VwdG9yLnNldFJlc3BvbnNlQ2FsbGJhY2soXG4gICAgICAoc3RhdHVzLCB0aW1lb3V0LCByZXNwb25zZSwgcmVzcG9uc2VVUkwsIHJlc3BvbnNlVHlwZSwgeGhyKSA9PiB7XG4gICAgICAgIGNvbnN0IHhockluZGV4ID0gdGhpcy5fZ2V0UmVxdWVzdEluZGV4QnlYSFJJRCh4aHIuX2luZGV4KTtcbiAgICAgICAgaWYgKHhockluZGV4ID09PSAtMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKHtyZXF1ZXN0c30pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXR3b3JrUmVxdWVzdEluZm8gPSByZXF1ZXN0c1t4aHJJbmRleF07XG4gICAgICAgICAgbmV0d29ya1JlcXVlc3RJbmZvLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgICAgICAgbmV0d29ya1JlcXVlc3RJbmZvLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgbmV0d29ya1JlcXVlc3RJbmZvLnJlc3BvbnNlVVJMID0gcmVzcG9uc2VVUkw7XG4gICAgICAgICAgbmV0d29ya1JlcXVlc3RJbmZvLnJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZTtcblxuICAgICAgICAgIHJldHVybiB7cmVxdWVzdHN9O1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIEZpcmUgYWJvdmUgY2FsbGJhY2tzLlxuICAgIFhIUkludGVyY2VwdG9yLmVuYWJsZUludGVyY2VwdGlvbigpO1xuICB9XG5cbiAgX2VuYWJsZVdlYlNvY2tldEludGVyY2VwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoV2ViU29ja2V0SW50ZXJjZXB0b3IuaXNJbnRlcmNlcHRvckVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTaG93IHRoZSBXZWJTb2NrZXQgcmVxdWVzdCBpdGVtIGluIGxpc3RWaWV3IHdoZW4gJ2Nvbm5lY3QnIGlzIGNhbGxlZC5cbiAgICBXZWJTb2NrZXRJbnRlcmNlcHRvci5zZXRDb25uZWN0Q2FsbGJhY2soXG4gICAgICAodXJsLCBwcm90b2NvbHMsIG9wdGlvbnMsIHNvY2tldElkKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvY2tldEluZGV4ID0gdGhpcy5zdGF0ZS5yZXF1ZXN0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX3NvY2tldElkTWFwW3NvY2tldElkXSA9IHNvY2tldEluZGV4O1xuICAgICAgICBjb25zdCBfd2ViU29ja2V0OiBOZXR3b3JrUmVxdWVzdEluZm8gPSB7XG4gICAgICAgICAgaWQ6IHNvY2tldEluZGV4LFxuICAgICAgICAgIHR5cGU6ICdXZWJTb2NrZXQnLFxuICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgIHByb3RvY29sczogcHJvdG9jb2xzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3RzOiB0aGlzLnN0YXRlLnJlcXVlc3RzLmNvbmNhdChfd2ViU29ja2V0KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuX2luZGljYXRlQWRkaXRpb25hbFJlcXVlc3RzLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgV2ViU29ja2V0SW50ZXJjZXB0b3Iuc2V0Q2xvc2VDYWxsYmFjayhcbiAgICAgIChzdGF0dXNDb2RlLCBjbG9zZVJlYXNvbiwgc29ja2V0SWQpID0+IHtcbiAgICAgICAgY29uc3Qgc29ja2V0SW5kZXggPSB0aGlzLl9zb2NrZXRJZE1hcFtzb2NrZXRJZF07XG4gICAgICAgIGlmIChzb2NrZXRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSBudWxsICYmIGNsb3NlUmVhc29uICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoe3JlcXVlc3RzfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RJbmZvID0gcmVxdWVzdHNbc29ja2V0SW5kZXhdO1xuICAgICAgICAgICAgbmV0d29ya1JlcXVlc3RJbmZvLnN0YXR1cyA9IHN0YXR1c0NvZGU7XG4gICAgICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8uY2xvc2VSZWFzb24gPSBjbG9zZVJlYXNvbjtcbiAgICAgICAgICAgIHJldHVybiB7cmVxdWVzdHN9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBXZWJTb2NrZXRJbnRlcmNlcHRvci5zZXRTZW5kQ2FsbGJhY2soKGRhdGEsIHNvY2tldElkKSA9PiB7XG4gICAgICBjb25zdCBzb2NrZXRJbmRleCA9IHRoaXMuX3NvY2tldElkTWFwW3NvY2tldElkXTtcbiAgICAgIGlmIChzb2NrZXRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSgoe3JlcXVlc3RzfSkgPT4ge1xuICAgICAgICBjb25zdCBuZXR3b3JrUmVxdWVzdEluZm8gPSByZXF1ZXN0c1tzb2NrZXRJbmRleF07XG5cbiAgICAgICAgaWYgKCFuZXR3b3JrUmVxdWVzdEluZm8ubWVzc2FnZXMpIHtcbiAgICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8ubWVzc2FnZXMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8ubWVzc2FnZXMgKz0gJ1NlbnQ6ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhKSArICdcXG4nO1xuXG4gICAgICAgIHJldHVybiB7cmVxdWVzdHN9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBXZWJTb2NrZXRJbnRlcmNlcHRvci5zZXRPbk1lc3NhZ2VDYWxsYmFjaygoc29ja2V0SWQsIG1lc3NhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHNvY2tldEluZGV4ID0gdGhpcy5fc29ja2V0SWRNYXBbc29ja2V0SWRdO1xuICAgICAgaWYgKHNvY2tldEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKCh7cmVxdWVzdHN9KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ldHdvcmtSZXF1ZXN0SW5mbyA9IHJlcXVlc3RzW3NvY2tldEluZGV4XTtcblxuICAgICAgICBpZiAoIW5ldHdvcmtSZXF1ZXN0SW5mby5tZXNzYWdlcykge1xuICAgICAgICAgIG5ldHdvcmtSZXF1ZXN0SW5mby5tZXNzYWdlcyA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIG5ldHdvcmtSZXF1ZXN0SW5mby5tZXNzYWdlcyArPVxuICAgICAgICAgICdSZWNlaXZlZDogJyArIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpICsgJ1xcbic7XG5cbiAgICAgICAgcmV0dXJuIHtyZXF1ZXN0c307XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIFdlYlNvY2tldEludGVyY2VwdG9yLnNldE9uQ2xvc2VDYWxsYmFjaygoc29ja2V0SWQsIG1lc3NhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHNvY2tldEluZGV4ID0gdGhpcy5fc29ja2V0SWRNYXBbc29ja2V0SWRdO1xuICAgICAgaWYgKHNvY2tldEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKCh7cmVxdWVzdHN9KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ldHdvcmtSZXF1ZXN0SW5mbyA9IHJlcXVlc3RzW3NvY2tldEluZGV4XTtcbiAgICAgICAgbmV0d29ya1JlcXVlc3RJbmZvLnNlcnZlckNsb3NlID0gbWVzc2FnZTtcblxuICAgICAgICByZXR1cm4ge3JlcXVlc3RzfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgV2ViU29ja2V0SW50ZXJjZXB0b3Iuc2V0T25FcnJvckNhbGxiYWNrKChzb2NrZXRJZCwgbWVzc2FnZSkgPT4ge1xuICAgICAgY29uc3Qgc29ja2V0SW5kZXggPSB0aGlzLl9zb2NrZXRJZE1hcFtzb2NrZXRJZF07XG4gICAgICBpZiAoc29ja2V0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHtyZXF1ZXN0c30pID0+IHtcbiAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RJbmZvID0gcmVxdWVzdHNbc29ja2V0SW5kZXhdO1xuICAgICAgICBuZXR3b3JrUmVxdWVzdEluZm8uc2VydmVyRXJyb3IgPSBtZXNzYWdlO1xuXG4gICAgICAgIHJldHVybiB7cmVxdWVzdHN9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaXJlIGFib3ZlIGNhbGxiYWNrcy5cbiAgICBXZWJTb2NrZXRJbnRlcmNlcHRvci5lbmFibGVJbnRlcmNlcHRpb24oKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuX2VuYWJsZVhIUkludGVyY2VwdGlvbigpO1xuICAgIHRoaXMuX2VuYWJsZVdlYlNvY2tldEludGVyY2VwdGlvbigpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgWEhSSW50ZXJjZXB0b3IuZGlzYWJsZUludGVyY2VwdGlvbigpO1xuICAgIFdlYlNvY2tldEludGVyY2VwdG9yLmRpc2FibGVJbnRlcmNlcHRpb24oKTtcbiAgfVxuXG4gIF9yZW5kZXJJdGVtID0gKHtcbiAgICBpdGVtLFxuICAgIGluZGV4LFxuICB9OiBSZW5kZXJJdGVtUHJvcHM8TmV0d29ya1JlcXVlc3RJbmZvPik6IFJlYWN0LkVsZW1lbnQ8YW55PiA9PiB7XG4gICAgY29uc3QgdGFibGVSb3dWaWV3U3R5bGUgPSBbXG4gICAgICBzdHlsZXMudGFibGVSb3csXG4gICAgICBpbmRleCAlIDIgPT09IDEgPyBzdHlsZXMudGFibGVSb3dPZGQgOiBzdHlsZXMudGFibGVSb3dFdmVuLFxuICAgICAgaW5kZXggPT09IHRoaXMuc3RhdGUuZGV0YWlsUm93SWQgJiYgc3R5bGVzLnRhYmxlUm93UHJlc3NlZCxcbiAgICBdO1xuICAgIGNvbnN0IHVybENlbGxWaWV3U3R5bGUgPSBzdHlsZXMudXJsQ2VsbFZpZXc7XG4gICAgY29uc3QgbWV0aG9kQ2VsbFZpZXdTdHlsZSA9IHN0eWxlcy5tZXRob2RDZWxsVmlldztcblxuICAgIHJldHVybiAoXG4gICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICB0aGlzLl9wcmVzc1JvdyhpbmRleCk7XG4gICAgICAgIH19PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17dGFibGVSb3dWaWV3U3R5bGV9PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3VybENlbGxWaWV3U3R5bGV9PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmNlbGxUZXh0fSBudW1iZXJPZkxpbmVzPXsxfT5cbiAgICAgICAgICAgICAgICB7aXRlbS51cmx9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXttZXRob2RDZWxsVmlld1N0eWxlfT5cbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5jZWxsVGV4dH0gbnVtYmVyT2ZMaW5lcz17MX0+XG4gICAgICAgICAgICAgICAge2dldFR5cGVTaG9ydE5hbWUoaXRlbS50eXBlKX1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgKTtcbiAgfTtcblxuICBfcmVuZGVySXRlbURldGFpbChpZDogbnVtYmVyKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3QgcmVxdWVzdEl0ZW0gPSB0aGlzLnN0YXRlLnJlcXVlc3RzW2lkXTtcbiAgICBjb25zdCBkZXRhaWxzID0gT2JqZWN0LmtleXMocmVxdWVzdEl0ZW0pLm1hcChrZXkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJ2lkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmRldGFpbFZpZXdSb3d9IGtleT17a2V5fT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5kZXRhaWxWaWV3VGV4dCwgc3R5bGVzLmRldGFpbEtleUNlbGxWaWV3XX0+XG4gICAgICAgICAgICB7a2V5fVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5kZXRhaWxWaWV3VGV4dCwgc3R5bGVzLmRldGFpbFZhbHVlQ2VsbFZpZXddfT5cbiAgICAgICAgICAgIHtnZXRTdHJpbmdCeVZhbHVlKHJlcXVlc3RJdGVtW2tleV0pfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuY2xvc2VCdXR0b259XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fY2xvc2VCdXR0b25DbGlja2VkfT5cbiAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuY2xvc2VCdXR0b25UZXh0fT52PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZXRhaWxTY3JvbGxWaWV3fVxuICAgICAgICAgIHJlZj17c2Nyb2xsUmVmID0+ICh0aGlzLl9kZXRhaWxTY3JvbGxWaWV3ID0gc2Nyb2xsUmVmKX0+XG4gICAgICAgICAge2RldGFpbHN9XG4gICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgX2luZGljYXRlQWRkaXRpb25hbFJlcXVlc3RzID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0c0xpc3RWaWV3KSB7XG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21FbmRUaHJlc2hvbGQgPSBMSVNUVklFV19DRUxMX0hFSUdIVCAqIDI7XG4gICAgICBjb25zdCB7b2Zmc2V0LCB2aXNpYmxlTGVuZ3RoLCBjb250ZW50TGVuZ3RofSA9XG4gICAgICAgIHRoaXMuX3JlcXVlc3RzTGlzdFZpZXdTY3JvbGxNZXRyaWNzO1xuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tRW5kID0gY29udGVudExlbmd0aCAtIHZpc2libGVMZW5ndGggLSBvZmZzZXQ7XG4gICAgICBjb25zdCBpc0Nsb3NlVG9FbmQgPSBkaXN0YW5jZUZyb21FbmQgPD0gZGlzdGFuY2VGcm9tRW5kVGhyZXNob2xkO1xuICAgICAgaWYgKGlzQ2xvc2VUb0VuZCkge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0c0xpc3RWaWV3LnNjcm9sbFRvRW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0c0xpc3RWaWV3LmZsYXNoU2Nyb2xsSW5kaWNhdG9ycygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfY2FwdHVyZVJlcXVlc3RzTGlzdFZpZXcgPSAobGlzdFJlZjogP0ZsYXRMaXN0PE5ldHdvcmtSZXF1ZXN0SW5mbz4pOiB2b2lkID0+IHtcbiAgICB0aGlzLl9yZXF1ZXN0c0xpc3RWaWV3ID0gbGlzdFJlZjtcbiAgfTtcblxuICBfcmVxdWVzdHNMaXN0Vmlld09uU2Nyb2xsID0gKGU6IE9iamVjdCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX3JlcXVlc3RzTGlzdFZpZXdTY3JvbGxNZXRyaWNzLm9mZnNldCA9IGUubmF0aXZlRXZlbnQuY29udGVudE9mZnNldC55O1xuICAgIHRoaXMuX3JlcXVlc3RzTGlzdFZpZXdTY3JvbGxNZXRyaWNzLnZpc2libGVMZW5ndGggPVxuICAgICAgZS5uYXRpdmVFdmVudC5sYXlvdXRNZWFzdXJlbWVudC5oZWlnaHQ7XG4gICAgdGhpcy5fcmVxdWVzdHNMaXN0Vmlld1Njcm9sbE1ldHJpY3MuY29udGVudExlbmd0aCA9XG4gICAgICBlLm5hdGl2ZUV2ZW50LmNvbnRlbnRTaXplLmhlaWdodDtcbiAgfTtcblxuICAvKipcbiAgICogUG9wdXAgYSBzY3JvbGxWaWV3IHRvIGR5bmFtaWNhbGx5IHNob3cgZGV0YWlsZWQgaW5mb3JtYXRpb24gb2ZcbiAgICogdGhlIHJlcXVlc3QsIHdoZW4gcHJlc3NpbmcgYSByb3cgaW4gdGhlIG5ldHdvcmsgZmxvdyBsaXN0Vmlldy5cbiAgICovXG4gIF9wcmVzc1Jvdyhyb3dJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZGV0YWlsUm93SWQ6IHJvd0lkfSwgdGhpcy5fc2Nyb2xsRGV0YWlsVG9Ub3ApO1xuICB9XG5cbiAgX3Njcm9sbERldGFpbFRvVG9wID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLl9kZXRhaWxTY3JvbGxWaWV3KSB7XG4gICAgICB0aGlzLl9kZXRhaWxTY3JvbGxWaWV3LnNjcm9sbFRvKHtcbiAgICAgICAgeTogMCxcbiAgICAgICAgYW5pbWF0ZWQ6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9jbG9zZUJ1dHRvbkNsaWNrZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZGV0YWlsUm93SWQ6IG51bGx9KTtcbiAgfTtcblxuICBfZ2V0UmVxdWVzdEluZGV4QnlYSFJJRChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCB4aHJJbmRleCA9IHRoaXMuX3hocklkTWFwW2luZGV4XTtcbiAgICBpZiAoeGhySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geGhySW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHtyZXF1ZXN0cywgZGV0YWlsUm93SWR9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtkZXRhaWxSb3dJZCAhPSBudWxsICYmIHRoaXMuX3JlbmRlckl0ZW1EZXRhaWwoZGV0YWlsUm93SWQpfVxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxpc3RWaWV3VGl0bGV9PlxuICAgICAgICAgIHtyZXF1ZXN0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudGFibGVSb3d9PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnVybFRpdGxlQ2VsbFZpZXd9PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuY2VsbFRleHR9IG51bWJlck9mTGluZXM9ezF9PlxuICAgICAgICAgICAgICAgICAgVVJMXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubWV0aG9kVGl0bGVDZWxsVmlld30+XG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5jZWxsVGV4dH0gbnVtYmVyT2ZMaW5lcz17MX0+XG4gICAgICAgICAgICAgICAgICBUeXBlXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9WaWV3PlxuXG4gICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgIHJlZj17dGhpcy5fY2FwdHVyZVJlcXVlc3RzTGlzdFZpZXd9XG4gICAgICAgICAgb25TY3JvbGw9e3RoaXMuX3JlcXVlc3RzTGlzdFZpZXdPblNjcm9sbH1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmxpc3RWaWV3fVxuICAgICAgICAgIGRhdGE9e3JlcXVlc3RzfVxuICAgICAgICAgIHJlbmRlckl0ZW09e3RoaXMuX3JlbmRlckl0ZW19XG4gICAgICAgICAga2V5RXh0cmFjdG9yPXtrZXlFeHRyYWN0b3J9XG4gICAgICAgICAgZXh0cmFEYXRhPXt0aGlzLnN0YXRlfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBwYWRkaW5nVG9wOiAxMCxcbiAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgICBwYWRkaW5nTGVmdDogNSxcbiAgICBwYWRkaW5nUmlnaHQ6IDUsXG4gIH0sXG4gIGxpc3RWaWV3VGl0bGU6IHtcbiAgICBoZWlnaHQ6IDIwLFxuICB9LFxuICBsaXN0Vmlldzoge1xuICAgIGZsZXg6IDEsXG4gICAgaGVpZ2h0OiA2MCxcbiAgfSxcbiAgdGFibGVSb3c6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBmbGV4OiAxLFxuICAgIGhlaWdodDogTElTVFZJRVdfQ0VMTF9IRUlHSFQsXG4gIH0sXG4gIHRhYmxlUm93RXZlbjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyM1NTUnLFxuICB9LFxuICB0YWJsZVJvd09kZDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyMwMDAnLFxuICB9LFxuICB0YWJsZVJvd1ByZXNzZWQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM0I1OTk4JyxcbiAgfSxcbiAgY2VsbFRleHQ6IHtcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBmb250U2l6ZTogMTIsXG4gIH0sXG4gIG1ldGhvZFRpdGxlQ2VsbFZpZXc6IHtcbiAgICBoZWlnaHQ6IDE4LFxuICAgIGJvcmRlckNvbG9yOiAnI0RDRDdDRCcsXG4gICAgYm9yZGVyVG9wV2lkdGg6IDEsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IDEsXG4gICAgYm9yZGVyUmlnaHRXaWR0aDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnIzQ0NCcsXG4gICAgZmxleDogMSxcbiAgfSxcbiAgdXJsVGl0bGVDZWxsVmlldzoge1xuICAgIGhlaWdodDogMTgsXG4gICAgYm9yZGVyQ29sb3I6ICcjRENEN0NEJyxcbiAgICBib3JkZXJUb3BXaWR0aDogMSxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogMSxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IDEsXG4gICAgYm9yZGVyUmlnaHRXaWR0aDogMSxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnIzQ0NCcsXG4gICAgZmxleDogNSxcbiAgICBwYWRkaW5nTGVmdDogMyxcbiAgfSxcbiAgbWV0aG9kQ2VsbFZpZXc6IHtcbiAgICBoZWlnaHQ6IDE1LFxuICAgIGJvcmRlckNvbG9yOiAnI0RDRDdDRCcsXG4gICAgYm9yZGVyUmlnaHRXaWR0aDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgZmxleDogMSxcbiAgfSxcbiAgdXJsQ2VsbFZpZXc6IHtcbiAgICBoZWlnaHQ6IDE1LFxuICAgIGJvcmRlckNvbG9yOiAnI0RDRDdDRCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiAxLFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IDEsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGZsZXg6IDUsXG4gICAgcGFkZGluZ0xlZnQ6IDMsXG4gIH0sXG4gIGRldGFpbFNjcm9sbFZpZXc6IHtcbiAgICBmbGV4OiAxLFxuICAgIGhlaWdodDogMTgwLFxuICAgIG1hcmdpblRvcDogNSxcbiAgICBtYXJnaW5Cb3R0b206IDUsXG4gIH0sXG4gIGRldGFpbEtleUNlbGxWaWV3OiB7XG4gICAgZmxleDogMS4zLFxuICB9LFxuICBkZXRhaWxWYWx1ZUNlbGxWaWV3OiB7XG4gICAgZmxleDogMixcbiAgfSxcbiAgZGV0YWlsVmlld1Jvdzoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAzLFxuICB9LFxuICBkZXRhaWxWaWV3VGV4dDoge1xuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGZvbnRTaXplOiAxMSxcbiAgfSxcbiAgY2xvc2VCdXR0b25UZXh0OiB7XG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgZm9udFNpemU6IDEwLFxuICB9LFxuICBjbG9zZUJ1dHRvbjoge1xuICAgIG1hcmdpblRvcDogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjODg4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBOZXR3b3JrT3ZlcmxheTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBYTUxIdHRwUmVxdWVzdCA9IHJlcXVpcmUoJy4vWE1MSHR0cFJlcXVlc3QnKTtcbmNvbnN0IG9yaWdpbmFsWEhST3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuO1xuY29uc3Qgb3JpZ2luYWxYSFJTZW5kID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnNlbmQ7XG5jb25zdCBvcmlnaW5hbFhIUlNldFJlcXVlc3RIZWFkZXIgPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVxdWVzdEhlYWRlcjtcblxubGV0IG9wZW5DYWxsYmFjaztcbmxldCBzZW5kQ2FsbGJhY2s7XG5sZXQgcmVxdWVzdEhlYWRlckNhbGxiYWNrO1xubGV0IGhlYWRlclJlY2VpdmVkQ2FsbGJhY2s7XG5sZXQgcmVzcG9uc2VDYWxsYmFjaztcblxubGV0IGlzSW50ZXJjZXB0b3JFbmFibGVkID0gZmFsc2U7XG5cbi8qKlxuICogQSBuZXR3b3JrIGludGVyY2VwdG9yIHdoaWNoIG1vbmtleS1wYXRjaGVzIFhNTEh0dHBSZXF1ZXN0IG1ldGhvZHNcbiAqIHRvIGdhdGhlciBhbGwgbmV0d29yayByZXF1ZXN0cy9yZXNwb25zZXMsIGluIG9yZGVyIHRvIHNob3cgdGhlaXJcbiAqIGluZm9ybWF0aW9uIGluIHRoZSBSZWFjdCBOYXRpdmUgaW5zcGVjdG9yIGRldmVsb3BtZW50IHRvb2wuXG4gKiBUaGlzIHN1cHBvcnRzIGludGVyY2VwdGlvbiB3aXRoIFhNTEh0dHBSZXF1ZXN0IEFQSSwgaW5jbHVkaW5nIEZldGNoIEFQSVxuICogYW5kIGFueSBvdGhlciB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgdGhhdCBkZXBlbmQgb24gWE1MSHR0cFJlcXVlc3QuXG4gKi9cbmNvbnN0IFhIUkludGVyY2VwdG9yID0ge1xuICAvKipcbiAgICogSW52b2tlZCBiZWZvcmUgWE1MSHR0cFJlcXVlc3Qub3BlbiguLi4pIGlzIGNhbGxlZC5cbiAgICovXG4gIHNldE9wZW5DYWxsYmFjayhjYWxsYmFjaykge1xuICAgIG9wZW5DYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIGJlZm9yZSBYTUxIdHRwUmVxdWVzdC5zZW5kKC4uLikgaXMgY2FsbGVkLlxuICAgKi9cbiAgc2V0U2VuZENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgc2VuZENhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEludm9rZWQgYWZ0ZXIgeGhyJ3MgcmVhZHlTdGF0ZSBiZWNvbWVzIHhoci5IRUFERVJTX1JFQ0VJVkVELlxuICAgKi9cbiAgc2V0SGVhZGVyUmVjZWl2ZWRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGhlYWRlclJlY2VpdmVkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfSxcblxuICAvKipcbiAgICogSW52b2tlZCBhZnRlciB4aHIncyByZWFkeVN0YXRlIGJlY29tZXMgeGhyLkRPTkUuXG4gICAqL1xuICBzZXRSZXNwb25zZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgcmVzcG9uc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIGJlZm9yZSBYTUxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKC4uLikgaXMgY2FsbGVkLlxuICAgKi9cbiAgc2V0UmVxdWVzdEhlYWRlckNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgcmVxdWVzdEhlYWRlckNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH0sXG5cbiAgaXNJbnRlcmNlcHRvckVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIGlzSW50ZXJjZXB0b3JFbmFibGVkO1xuICB9LFxuXG4gIGVuYWJsZUludGVyY2VwdGlvbigpIHtcbiAgICBpZiAoaXNJbnRlcmNlcHRvckVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT3ZlcnJpZGUgYG9wZW5gIG1ldGhvZCBmb3IgYWxsIFhIUiByZXF1ZXN0cyB0byBpbnRlcmNlcHQgdGhlIHJlcXVlc3RcbiAgICAvLyBtZXRob2QgYW5kIHVybCwgdGhlbiBwYXNzIHRoZW0gdGhyb3VnaCB0aGUgYG9wZW5DYWxsYmFja2AuXG4gICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobWV0aG9kLCB1cmwpIHtcbiAgICAgIGlmIChvcGVuQ2FsbGJhY2spIHtcbiAgICAgICAgb3BlbkNhbGxiYWNrKG1ldGhvZCwgdXJsLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsWEhST3Blbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICAvLyBPdmVycmlkZSBgc2V0UmVxdWVzdEhlYWRlcmAgbWV0aG9kIGZvciBhbGwgWEhSIHJlcXVlc3RzIHRvIGludGVyY2VwdFxuICAgIC8vIHRoZSByZXF1ZXN0IGhlYWRlcnMsIHRoZW4gcGFzcyB0aGVtIHRocm91Z2ggdGhlIGByZXF1ZXN0SGVhZGVyQ2FsbGJhY2tgLlxuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXF1ZXN0SGVhZGVyID0gZnVuY3Rpb24gKGhlYWRlciwgdmFsdWUpIHtcbiAgICAgIGlmIChyZXF1ZXN0SGVhZGVyQ2FsbGJhY2spIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlckNhbGxiYWNrKGhlYWRlciwgdmFsdWUsIHRoaXMpO1xuICAgICAgfVxuICAgICAgb3JpZ2luYWxYSFJTZXRSZXF1ZXN0SGVhZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcblxuICAgIC8vIE92ZXJyaWRlIGBzZW5kYCBtZXRob2Qgb2YgYWxsIFhIUiByZXF1ZXN0cyB0byBpbnRlcmNlcHQgdGhlIGRhdGEgc2VudCxcbiAgICAvLyByZWdpc3RlciBsaXN0ZW5lcnMgdG8gaW50ZXJjZXB0IHRoZSByZXNwb25zZSwgYW5kIGludm9rZSB0aGUgY2FsbGJhY2tzLlxuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChzZW5kQ2FsbGJhY2spIHtcbiAgICAgICAgc2VuZENhbGxiYWNrKGRhdGEsIHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ3JlYWR5c3RhdGVjaGFuZ2UnLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNJbnRlcmNlcHRvckVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5IRUFERVJTX1JFQ0VJVkVEKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlU3RyaW5nID0gdGhpcy5nZXRSZXNwb25zZUhlYWRlcignQ29udGVudC1UeXBlJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJyk7XG4gICAgICAgICAgICAgIGxldCByZXNwb25zZUNvbnRlbnRUeXBlLCByZXNwb25zZVNpemU7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZVN0cmluZykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudFR5cGUgPSBjb250ZW50VHlwZVN0cmluZy5zcGxpdCgnOycpWzBdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb250ZW50TGVuZ3RoU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTaXplID0gcGFyc2VJbnQoY29udGVudExlbmd0aFN0cmluZywgMTApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChoZWFkZXJSZWNlaXZlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyUmVjZWl2ZWRDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudFR5cGUsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZVNpemUsXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLFxuICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVVSTCxcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsWEhSU2VuZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgaXNJbnRlcmNlcHRvckVuYWJsZWQgPSB0cnVlO1xuICB9LFxuXG4gIC8vIFVucGF0Y2ggWE1MSHR0cFJlcXVlc3QgbWV0aG9kcyBhbmQgcmVtb3ZlIHRoZSBjYWxsYmFja3MuXG4gIGRpc2FibGVJbnRlcmNlcHRpb24oKSB7XG4gICAgaWYgKCFpc0ludGVyY2VwdG9yRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpc0ludGVyY2VwdG9yRW5hYmxlZCA9IGZhbHNlO1xuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZW5kID0gb3JpZ2luYWxYSFJTZW5kO1xuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gb3JpZ2luYWxYSFJPcGVuO1xuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXF1ZXN0SGVhZGVyID0gb3JpZ2luYWxYSFJTZXRSZXF1ZXN0SGVhZGVyO1xuICAgIHJlc3BvbnNlQ2FsbGJhY2sgPSBudWxsO1xuICAgIG9wZW5DYWxsYmFjayA9IG51bGw7XG4gICAgc2VuZENhbGxiYWNrID0gbnVsbDtcbiAgICBoZWFkZXJSZWNlaXZlZENhbGxiYWNrID0gbnVsbDtcbiAgICByZXF1ZXN0SGVhZGVyQ2FsbGJhY2sgPSBudWxsO1xuICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBYSFJJbnRlcmNlcHRvcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IE5hdGl2ZUV2ZW50RW1pdHRlciBmcm9tICcuLi9FdmVudEVtaXR0ZXIvTmF0aXZlRXZlbnRFbWl0dGVyJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IE5hdGl2ZVdlYlNvY2tldE1vZHVsZSBmcm9tICcuL05hdGl2ZVdlYlNvY2tldE1vZHVsZSc7XG5pbXBvcnQgYmFzZTY0IGZyb20gJ2Jhc2U2NC1qcyc7XG5cbmNvbnN0IG9yaWdpbmFsUkNUV2ViU29ja2V0Q29ubmVjdCA9IE5hdGl2ZVdlYlNvY2tldE1vZHVsZS5jb25uZWN0O1xuY29uc3Qgb3JpZ2luYWxSQ1RXZWJTb2NrZXRTZW5kID0gTmF0aXZlV2ViU29ja2V0TW9kdWxlLnNlbmQ7XG5jb25zdCBvcmlnaW5hbFJDVFdlYlNvY2tldFNlbmRCaW5hcnkgPSBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuc2VuZEJpbmFyeTtcbmNvbnN0IG9yaWdpbmFsUkNUV2ViU29ja2V0Q2xvc2UgPSBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuY2xvc2U7XG5cbmxldCBldmVudEVtaXR0ZXI7XG5sZXQgc3Vic2NyaXB0aW9ucztcblxubGV0IGNsb3NlQ2FsbGJhY2s7XG5sZXQgc2VuZENhbGxiYWNrO1xubGV0IGNvbm5lY3RDYWxsYmFjaztcbmxldCBvbk9wZW5DYWxsYmFjaztcbmxldCBvbk1lc3NhZ2VDYWxsYmFjaztcbmxldCBvbkVycm9yQ2FsbGJhY2s7XG5sZXQgb25DbG9zZUNhbGxiYWNrO1xuXG5sZXQgaXNJbnRlcmNlcHRvckVuYWJsZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBBIG5ldHdvcmsgaW50ZXJjZXB0b3Igd2hpY2ggbW9ua2V5LXBhdGNoZXMgUkNUV2ViU29ja2V0TW9kdWxlIG1ldGhvZHNcbiAqIHRvIGdhdGhlciBhbGwgd2Vic29ja2V0IG5ldHdvcmsgcmVxdWVzdHMvcmVzcG9uc2VzLCBpbiBvcmRlciB0byBzaG93XG4gKiB0aGVpciBpbmZvcm1hdGlvbiBpbiB0aGUgUmVhY3QgTmF0aXZlIGluc3BlY3RvciBkZXZlbG9wbWVudCB0b29sLlxuICovXG5cbmNvbnN0IFdlYlNvY2tldEludGVyY2VwdG9yID0ge1xuICAvKipcbiAgICogSW52b2tlZCB3aGVuIFJDVFdlYlNvY2tldE1vZHVsZS5jbG9zZSguLi4pIGlzIGNhbGxlZC5cbiAgICovXG4gIHNldENsb3NlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBjbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiBSQ1RXZWJTb2NrZXRNb2R1bGUuc2VuZCguLi4pIG9yIHNlbmRCaW5hcnkoLi4uKSBpcyBjYWxsZWQuXG4gICAqL1xuICBzZXRTZW5kQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBzZW5kQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIFJDVFdlYlNvY2tldE1vZHVsZS5jb25uZWN0KC4uLikgaXMgY2FsbGVkLlxuICAgKi9cbiAgc2V0Q29ubmVjdENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgY29ubmVjdENhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiBldmVudCBcIndlYnNvY2tldE9wZW5cIiBoYXBwZW5zLlxuICAgKi9cbiAgc2V0T25PcGVuQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBvbk9wZW5DYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gZXZlbnQgXCJ3ZWJzb2NrZXRNZXNzYWdlXCIgaGFwcGVucy5cbiAgICovXG4gIHNldE9uTWVzc2FnZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgb25NZXNzYWdlQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIGV2ZW50IFwid2Vic29ja2V0RmFpbGVkXCIgaGFwcGVucy5cbiAgICovXG4gIHNldE9uRXJyb3JDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIG9uRXJyb3JDYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gZXZlbnQgXCJ3ZWJzb2NrZXRDbG9zZWRcIiBoYXBwZW5zLlxuICAgKi9cbiAgc2V0T25DbG9zZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgb25DbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH0sXG5cbiAgaXNJbnRlcmNlcHRvckVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIGlzSW50ZXJjZXB0b3JFbmFibGVkO1xuICB9LFxuXG4gIF91bnJlZ2lzdGVyRXZlbnRzKCkge1xuICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChlID0+IGUucmVtb3ZlKCkpO1xuICAgIHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGxpc3RlbmVycyB0byB0aGUgUkNUV2ViU29ja2V0TW9kdWxlIGV2ZW50cyB0byBpbnRlcmNlcHQgdGhlbS5cbiAgICovXG4gIF9yZWdpc3RlckV2ZW50cygpIHtcbiAgICBzdWJzY3JpcHRpb25zID0gW1xuICAgICAgZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKCd3ZWJzb2NrZXRNZXNzYWdlJywgZXYgPT4ge1xuICAgICAgICBpZiAob25NZXNzYWdlQ2FsbGJhY2spIHtcbiAgICAgICAgICBvbk1lc3NhZ2VDYWxsYmFjayhcbiAgICAgICAgICAgIGV2LmlkLFxuICAgICAgICAgICAgZXYudHlwZSA9PT0gJ2JpbmFyeSdcbiAgICAgICAgICAgICAgPyBXZWJTb2NrZXRJbnRlcmNlcHRvci5fYXJyYXlCdWZmZXJUb1N0cmluZyhldi5kYXRhKVxuICAgICAgICAgICAgICA6IGV2LmRhdGEsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBldmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoJ3dlYnNvY2tldE9wZW4nLCBldiA9PiB7XG4gICAgICAgIGlmIChvbk9wZW5DYWxsYmFjaykge1xuICAgICAgICAgIG9uT3BlbkNhbGxiYWNrKGV2LmlkKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBldmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIoJ3dlYnNvY2tldENsb3NlZCcsIGV2ID0+IHtcbiAgICAgICAgaWYgKG9uQ2xvc2VDYWxsYmFjaykge1xuICAgICAgICAgIG9uQ2xvc2VDYWxsYmFjayhldi5pZCwge2NvZGU6IGV2LmNvZGUsIHJlYXNvbjogZXYucmVhc29ufSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKCd3ZWJzb2NrZXRGYWlsZWQnLCBldiA9PiB7XG4gICAgICAgIGlmIChvbkVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgICBvbkVycm9yQ2FsbGJhY2soZXYuaWQsIHttZXNzYWdlOiBldi5tZXNzYWdlfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIF07XG4gIH0sXG5cbiAgZW5hYmxlSW50ZXJjZXB0aW9uKCkge1xuICAgIGlmIChpc0ludGVyY2VwdG9yRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudEVtaXR0ZXIgPSBuZXcgTmF0aXZlRXZlbnRFbWl0dGVyKFxuICAgICAgLy8gVDg4NzE1MDYzOiBOYXRpdmVFdmVudEVtaXR0ZXIgb25seSB1c2VkIHRoaXMgcGFyYW1ldGVyIG9uIGlPUy4gTm93IGl0IHVzZXMgaXQgb24gYWxsIHBsYXRmb3Jtcywgc28gdGhpcyBjb2RlIHdhcyBtb2RpZmllZCBhdXRvbWF0aWNhbGx5IHRvIHByZXNlcnZlIGl0cyBiZWhhdmlvclxuICAgICAgLy8gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBuYXRpdmUgbW9kdWxlIG9uIG90aGVyIHBsYXRmb3JtcywgcGxlYXNlIHJlbW92ZSB0aGlzIGNvbmRpdGlvbiBhbmQgdGVzdCBpdHMgYmVoYXZpb3JcbiAgICAgIFBsYXRmb3JtLk9TICE9PSAnaW9zJyA/IG51bGwgOiBOYXRpdmVXZWJTb2NrZXRNb2R1bGUsXG4gICAgKTtcbiAgICBXZWJTb2NrZXRJbnRlcmNlcHRvci5fcmVnaXN0ZXJFdmVudHMoKTtcblxuICAgIC8vIE92ZXJyaWRlIGBjb25uZWN0YCBtZXRob2QgZm9yIGFsbCBSQ1RXZWJTb2NrZXRNb2R1bGUgcmVxdWVzdHNcbiAgICAvLyB0byBpbnRlcmNlcHQgdGhlIHJlcXVlc3QgdXJsLCBwcm90b2NvbHMsIG9wdGlvbnMgYW5kIHNvY2tldElkLFxuICAgIC8vIHRoZW4gcGFzcyB0aGVtIHRocm91Z2ggdGhlIGBjb25uZWN0Q2FsbGJhY2tgLlxuICAgIE5hdGl2ZVdlYlNvY2tldE1vZHVsZS5jb25uZWN0ID0gZnVuY3Rpb24gKFxuICAgICAgdXJsLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNvY2tldElkLFxuICAgICkge1xuICAgICAgaWYgKGNvbm5lY3RDYWxsYmFjaykge1xuICAgICAgICBjb25uZWN0Q2FsbGJhY2sodXJsLCBwcm90b2NvbHMsIG9wdGlvbnMsIHNvY2tldElkKTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsUkNUV2ViU29ja2V0Q29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICAvLyBPdmVycmlkZSBgc2VuZGAgbWV0aG9kIGZvciBhbGwgUkNUV2ViU29ja2V0TW9kdWxlIHJlcXVlc3RzIHRvIGludGVyY2VwdFxuICAgIC8vIHRoZSBkYXRhIHNlbnQsIHRoZW4gcGFzcyB0aGVtIHRocm91Z2ggdGhlIGBzZW5kQ2FsbGJhY2tgLlxuICAgIE5hdGl2ZVdlYlNvY2tldE1vZHVsZS5zZW5kID0gZnVuY3Rpb24gKGRhdGEsIHNvY2tldElkKSB7XG4gICAgICBpZiAoc2VuZENhbGxiYWNrKSB7XG4gICAgICAgIHNlbmRDYWxsYmFjayhkYXRhLCBzb2NrZXRJZCk7XG4gICAgICB9XG4gICAgICBvcmlnaW5hbFJDVFdlYlNvY2tldFNlbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGUgYHNlbmRCaW5hcnlgIG1ldGhvZCBmb3IgYWxsIFJDVFdlYlNvY2tldE1vZHVsZSByZXF1ZXN0cyB0b1xuICAgIC8vIGludGVyY2VwdCB0aGUgZGF0YSBzZW50LCB0aGVuIHBhc3MgdGhlbSB0aHJvdWdoIHRoZSBgc2VuZENhbGxiYWNrYC5cbiAgICBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuc2VuZEJpbmFyeSA9IGZ1bmN0aW9uIChkYXRhLCBzb2NrZXRJZCkge1xuICAgICAgaWYgKHNlbmRDYWxsYmFjaykge1xuICAgICAgICBzZW5kQ2FsbGJhY2soV2ViU29ja2V0SW50ZXJjZXB0b3IuX2FycmF5QnVmZmVyVG9TdHJpbmcoZGF0YSksIHNvY2tldElkKTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsUkNUV2ViU29ja2V0U2VuZEJpbmFyeS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICAvLyBPdmVycmlkZSBgY2xvc2VgIG1ldGhvZCBmb3IgYWxsIFJDVFdlYlNvY2tldE1vZHVsZSByZXF1ZXN0cyB0byBpbnRlcmNlcHRcbiAgICAvLyB0aGUgY2xvc2UgaW5mb3JtYXRpb24sIHRoZW4gcGFzcyB0aGVtIHRocm91Z2ggdGhlIGBjbG9zZUNhbGxiYWNrYC5cbiAgICBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY2xvc2VDYWxsYmFjaykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgIGNsb3NlQ2FsbGJhY2soYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xvc2VDYWxsYmFjayhudWxsLCBudWxsLCBhcmd1bWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcmlnaW5hbFJDVFdlYlNvY2tldENsb3NlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcblxuICAgIGlzSW50ZXJjZXB0b3JFbmFibGVkID0gdHJ1ZTtcbiAgfSxcblxuICBfYXJyYXlCdWZmZXJUb1N0cmluZyhkYXRhKSB7XG4gICAgY29uc3QgdmFsdWUgPSBiYXNlNjQudG9CeXRlQXJyYXkoZGF0YSkuYnVmZmVyO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyhubyB2YWx1ZSknO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJcbiAgICApIHtcbiAgICAgIHJldHVybiBgQXJyYXlCdWZmZXIgeyR7U3RyaW5nKEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkodmFsdWUpKSl9fWA7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcblxuICAvLyBVbnBhdGNoIFJDVFdlYlNvY2tldE1vZHVsZSBtZXRob2RzIGFuZCByZW1vdmUgdGhlIGNhbGxiYWNrcy5cbiAgZGlzYWJsZUludGVyY2VwdGlvbigpIHtcbiAgICBpZiAoIWlzSW50ZXJjZXB0b3JFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzSW50ZXJjZXB0b3JFbmFibGVkID0gZmFsc2U7XG4gICAgTmF0aXZlV2ViU29ja2V0TW9kdWxlLnNlbmQgPSBvcmlnaW5hbFJDVFdlYlNvY2tldFNlbmQ7XG4gICAgTmF0aXZlV2ViU29ja2V0TW9kdWxlLnNlbmRCaW5hcnkgPSBvcmlnaW5hbFJDVFdlYlNvY2tldFNlbmRCaW5hcnk7XG4gICAgTmF0aXZlV2ViU29ja2V0TW9kdWxlLmNsb3NlID0gb3JpZ2luYWxSQ1RXZWJTb2NrZXRDbG9zZTtcbiAgICBOYXRpdmVXZWJTb2NrZXRNb2R1bGUuY29ubmVjdCA9IG9yaWdpbmFsUkNUV2ViU29ja2V0Q29ubmVjdDtcblxuICAgIGNvbm5lY3RDYWxsYmFjayA9IG51bGw7XG4gICAgY2xvc2VDYWxsYmFjayA9IG51bGw7XG4gICAgc2VuZENhbGxiYWNrID0gbnVsbDtcbiAgICBvbk9wZW5DYWxsYmFjayA9IG51bGw7XG4gICAgb25NZXNzYWdlQ2FsbGJhY2sgPSBudWxsO1xuICAgIG9uQ2xvc2VDYWxsYmFjayA9IG51bGw7XG4gICAgb25FcnJvckNhbGxiYWNrID0gbnVsbDtcblxuICAgIFdlYlNvY2tldEludGVyY2VwdG9yLl91bnJlZ2lzdGVyRXZlbnRzKCk7XG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYlNvY2tldEludGVyY2VwdG9yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICogQG9uY2FsbCByZWFjdF9uYXRpdmVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UHJvcHN9IGZyb20gJy4vQXBwQ29udGFpbmVyJztcblxuaW1wb3J0IFZpZXcgZnJvbSAnLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB7Um9vdFRhZ0NvbnRleHQsIGNyZWF0ZVJvb3RUYWd9IGZyb20gJy4vUm9vdFRhZyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IEFwcENvbnRhaW5lciA9ICh7XG4gIGNoaWxkcmVuLFxuICBmYWJyaWMsXG4gIGluaXRpYWxQcm9wcyxcbiAgcm9vdFRhZyxcbiAgc2hvd0FyY2hpdGVjdHVyZUluZGljYXRvcixcbiAgV3JhcHBlckNvbXBvbmVudCxcbn06IFByb3BzKTogUmVhY3QuTm9kZSA9PiB7XG4gIGxldCBpbm5lclZpZXcgPSBjaGlsZHJlbjtcblxuICBpZiAoV3JhcHBlckNvbXBvbmVudCAhPSBudWxsKSB7XG4gICAgaW5uZXJWaWV3ID0gKFxuICAgICAgPFdyYXBwZXJDb21wb25lbnRcbiAgICAgICAgaW5pdGlhbFByb3BzPXtpbml0aWFsUHJvcHN9XG4gICAgICAgIGZhYnJpYz17ZmFicmljID09PSB0cnVlfVxuICAgICAgICBzaG93QXJjaGl0ZWN0dXJlSW5kaWNhdG9yPXtzaG93QXJjaGl0ZWN0dXJlSW5kaWNhdG9yID09PSB0cnVlfT5cbiAgICAgICAge2lubmVyVmlld31cbiAgICAgIDwvV3JhcHBlckNvbXBvbmVudD5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Um9vdFRhZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NyZWF0ZVJvb3RUYWcocm9vdFRhZyl9PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb290fSBwb2ludGVyRXZlbnRzPVwiYm94LW5vbmVcIj5cbiAgICAgICAge2lubmVyVmlld31cbiAgICAgIDwvVmlldz5cbiAgICA8L1Jvb3RUYWdDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb290OiB7ZmxleDogMX0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29udGFpbmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCBvcGFxdWUgdHlwZSBEaXNwbGF5TW9kZVR5cGUgPSBudW1iZXI7XG5cbi8qKiBEaXNwbGF5TW9kZSBzaG91bGQgYmUgaW4gc3luYyB3aXRoIHRoZSBtZXRob2QgZGlzcGxheU1vZGVUb0ludCBmcm9tXG4gKiByZWFjdC9yZW5kZXJlci91aW1hbmFnZXIvcHJpbWl0aXZlcy5oLiAqL1xuY29uc3QgRGlzcGxheU1vZGU6IHtbc3RyaW5nXTogRGlzcGxheU1vZGVUeXBlfSA9IE9iamVjdC5mcmVlemUoe1xuICBWSVNJQkxFOiAxLFxuICBTVVNQRU5ERUQ6IDIsXG4gIEhJRERFTjogMyxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlRGlzcGxheU1vZGUodmFsdWU6ID9udW1iZXIpOiBEaXNwbGF5TW9kZVR5cGUge1xuICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgY2FzZSBEaXNwbGF5TW9kZS5TVVNQRU5ERUQ6XG4gICAgICByZXR1cm4gRGlzcGxheU1vZGUuU1VTUEVOREVEO1xuICAgIGNhc2UgRGlzcGxheU1vZGUuSElEREVOOlxuICAgICAgcmV0dXJuIERpc3BsYXlNb2RlLkhJRERFTjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIERpc3BsYXlNb2RlLlZJU0lCTEU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheU1vZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0Fic3RyYWN0Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBOb29wQ29tcG9uZW50ID0gQWJzdHJhY3RDb21wb25lbnQ8e2NoaWxkcmVuOiBSZWFjdC5Ob2RlfT47XG5cbmNvbnN0IGNhY2hlOiBNYXA8XG4gIHN0cmluZywgLy8gZGlzcGxheU5hbWVcbiAgTm9vcENvbXBvbmVudCwgLy8gQ29tcG9uZW50V2l0aERpc3BsYXlOYW1lXG4+ID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDYWNoZWRDb21wb25lbnRXaXRoRGlzcGxheU5hbWUoXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmcsXG4pOiBOb29wQ29tcG9uZW50IHtcbiAgbGV0IENvbXBvbmVudFdpdGhEaXNwbGF5TmFtZSA9IGNhY2hlLmdldChkaXNwbGF5TmFtZSk7XG5cbiAgaWYgKCFDb21wb25lbnRXaXRoRGlzcGxheU5hbWUpIHtcbiAgICBDb21wb25lbnRXaXRoRGlzcGxheU5hbWUgPSAoe2NoaWxkcmVufToge2NoaWxkcmVuOiBSZWFjdC5Ob2RlfSkgPT4gY2hpbGRyZW47XG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgQ29tcG9uZW50V2l0aERpc3BsYXlOYW1lLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgY2FjaGUuc2V0KGRpc3BsYXlOYW1lLCBDb21wb25lbnRXaXRoRGlzcGxheU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIENvbXBvbmVudFdpdGhEaXNwbGF5TmFtZTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1VuaW1wbGVtZW50ZWRWaWV3cy9VbmltcGxlbWVudGVkVmlldycpO1xuXG50eXBlIEJhY2tQcmVzc0V2ZW50TmFtZSA9ICdiYWNrUHJlc3MnIHwgJ2hhcmR3YXJlQmFja1ByZXNzJztcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpOiB2b2lkIHt9XG5cbnR5cGUgVEJhY2tIYW5kbGVyID0ge3xcbiAgK2V4aXRBcHA6ICgpID0+IHZvaWQsXG4gICthZGRFdmVudExpc3RlbmVyOiAoXG4gICAgZXZlbnROYW1lOiBCYWNrUHJlc3NFdmVudE5hbWUsXG4gICAgaGFuZGxlcjogKCkgPT4gP2Jvb2xlYW4sXG4gICkgPT4ge3JlbW92ZTogKCkgPT4gdm9pZCwgLi4ufSxcbiAgK3JlbW92ZUV2ZW50TGlzdGVuZXI6IChcbiAgICBldmVudE5hbWU6IEJhY2tQcmVzc0V2ZW50TmFtZSxcbiAgICBoYW5kbGVyOiAoKSA9PiA/Ym9vbGVhbixcbiAgKSA9PiB2b2lkLFxufH07XG5cbmxldCBCYWNrSGFuZGxlcjogVEJhY2tIYW5kbGVyID0ge1xuICBleGl0QXBwOiBlbXB0eUZ1bmN0aW9uLFxuICBhZGRFdmVudExpc3RlbmVyKF9ldmVudE5hbWU6IEJhY2tQcmVzc0V2ZW50TmFtZSwgX2hhbmRsZXI6IEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbW92ZTogZW1wdHlGdW5jdGlvbixcbiAgICB9O1xuICB9LFxuICByZW1vdmVFdmVudExpc3RlbmVyKF9ldmVudE5hbWU6IEJhY2tQcmVzc0V2ZW50TmFtZSwgX2hhbmRsZXI6IEZ1bmN0aW9uKSB7fSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQmFja0hhbmRsZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGEgc2ltcGxlIHN0dWJiZWQgdmlldy4gU2ltcGx5IGFwcGxpZXMgdGhlIHZpZXcncyBzdHlsZXMgdG8gdGhlIGlubmVyXG4gKiBWaWV3IGNvbXBvbmVudCBhbmQgcmVuZGVycyBpdHMgY2hpbGRyZW4uXG4gKi9cbmNsYXNzIFVuaW1wbGVtZW50ZWRWaWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgLy8gV29ya2Fyb3VuZCByZXF1aXJlIGN5Y2xlIGZyb20gcmVxdWlyZU5hdGl2ZUNvbXBvbmVudFxuICAgIGNvbnN0IFZpZXcgPSByZXF1aXJlKCcuLi9WaWV3L1ZpZXcnKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMudW5pbXBsZW1lbnRlZFZpZXcsIHRoaXMucHJvcHMuc3R5bGVdfT5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHVuaW1wbGVtZW50ZWRWaWV3OiBfX0RFVl9fXG4gICAgPyB7XG4gICAgICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgICAgICBib3JkZXJDb2xvcjogJ3JlZCcsXG4gICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgfVxuICAgIDoge30sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBVbmltcGxlbWVudGVkVmlldztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSBMb2dCb3hMb2cgZnJvbSAnLi9EYXRhL0xvZ0JveExvZyc7XG5cbmltcG9ydCBWaWV3IGZyb20gJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgKiBhcyBMb2dCb3hEYXRhIGZyb20gJy4vRGF0YS9Mb2dCb3hEYXRhJztcbmltcG9ydCBMb2dCb3hJbnNwZWN0b3IgZnJvbSAnLi9VSS9Mb2dCb3hJbnNwZWN0b3InO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIGxvZ3M6ICRSZWFkT25seUFycmF5PExvZ0JveExvZz4sXG4gIHNlbGVjdGVkTG9nSW5kZXg6IG51bWJlcixcbiAgaXNEaXNhYmxlZD86ID9ib29sZWFuLFxufH0+O1xuXG5leHBvcnQgY2xhc3MgX0xvZ0JveEluc3BlY3RvckNvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtTdHlsZVNoZWV0LmFic29sdXRlRmlsbH0+XG4gICAgICAgIDxMb2dCb3hJbnNwZWN0b3JcbiAgICAgICAgICBvbkRpc21pc3M9e3RoaXMuX2hhbmRsZURpc21pc3N9XG4gICAgICAgICAgb25NaW5pbWl6ZT17dGhpcy5faGFuZGxlTWluaW1pemV9XG4gICAgICAgICAgb25DaGFuZ2VTZWxlY3RlZEluZGV4PXt0aGlzLl9oYW5kbGVTZXRTZWxlY3RlZExvZ31cbiAgICAgICAgICBsb2dzPXt0aGlzLnByb3BzLmxvZ3N9XG4gICAgICAgICAgc2VsZWN0ZWRJbmRleD17dGhpcy5wcm9wcy5zZWxlY3RlZExvZ0luZGV4fVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBfaGFuZGxlRGlzbWlzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAvLyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZXMgd2hlbiB0aGUgbG9nIGlzIGRpc21pc3NlZCBhbmQgaXRcbiAgICAvLyB3YXMgZWl0aGVyIHRoZSBsYXN0IGxvZywgb3Igd2hlbiB0aGUgY3VycmVudCBpbmRleFxuICAgIC8vIGlzIG5vdyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGxvZyBhcnJheS5cbiAgICBjb25zdCB7c2VsZWN0ZWRMb2dJbmRleCwgbG9nc30gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGxvZ3NBcnJheSA9IEFycmF5LmZyb20obG9ncyk7XG4gICAgaWYgKHNlbGVjdGVkTG9nSW5kZXggIT0gbnVsbCkge1xuICAgICAgaWYgKGxvZ3NBcnJheS5sZW5ndGggLSAxIDw9IDApIHtcbiAgICAgICAgTG9nQm94RGF0YS5zZXRTZWxlY3RlZExvZygtMSk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTG9nSW5kZXggPj0gbG9nc0FycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgTG9nQm94RGF0YS5zZXRTZWxlY3RlZExvZyhzZWxlY3RlZExvZ0luZGV4IC0gMSk7XG4gICAgICB9XG5cbiAgICAgIExvZ0JveERhdGEuZGlzbWlzcyhsb2dzQXJyYXlbc2VsZWN0ZWRMb2dJbmRleF0pO1xuICAgIH1cbiAgfTtcblxuICBfaGFuZGxlTWluaW1pemUgPSAoKTogdm9pZCA9PiB7XG4gICAgTG9nQm94RGF0YS5zZXRTZWxlY3RlZExvZygtMSk7XG4gIH07XG5cbiAgX2hhbmRsZVNldFNlbGVjdGVkTG9nID0gKGluZGV4OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBMb2dCb3hEYXRhLnNldFNlbGVjdGVkTG9nKGluZGV4KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKExvZ0JveERhdGEud2l0aFN1YnNjcmlwdGlvbihcbiAgX0xvZ0JveEluc3BlY3RvckNvbnRhaW5lcixcbik6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PHt8fH0+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgS2V5Ym9hcmQgZnJvbSAnLi4vLi4vQ29tcG9uZW50cy9LZXlib2FyZC9LZXlib2FyZCc7XG5pbXBvcnQgU2Nyb2xsVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1Njcm9sbFZpZXcvU2Nyb2xsVmlldyc7XG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0ICogYXMgTG9nQm94RGF0YSBmcm9tICcuLi9EYXRhL0xvZ0JveERhdGEnO1xuaW1wb3J0IExvZ0JveExvZywge3R5cGUgTG9nTGV2ZWx9IGZyb20gJy4uL0RhdGEvTG9nQm94TG9nJztcbmltcG9ydCBMb2dCb3hJbnNwZWN0b3JDb2RlRnJhbWUgZnJvbSAnLi9Mb2dCb3hJbnNwZWN0b3JDb2RlRnJhbWUnO1xuaW1wb3J0IExvZ0JveEluc3BlY3RvckZvb3RlciBmcm9tICcuL0xvZ0JveEluc3BlY3RvckZvb3Rlcic7XG5pbXBvcnQgTG9nQm94SW5zcGVjdG9ySGVhZGVyIGZyb20gJy4vTG9nQm94SW5zcGVjdG9ySGVhZGVyJztcbmltcG9ydCBMb2dCb3hJbnNwZWN0b3JNZXNzYWdlSGVhZGVyIGZyb20gJy4vTG9nQm94SW5zcGVjdG9yTWVzc2FnZUhlYWRlcic7XG5pbXBvcnQgTG9nQm94SW5zcGVjdG9yUmVhY3RGcmFtZXMgZnJvbSAnLi9Mb2dCb3hJbnNwZWN0b3JSZWFjdEZyYW1lcyc7XG5pbXBvcnQgTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZXMgZnJvbSAnLi9Mb2dCb3hJbnNwZWN0b3JTdGFja0ZyYW1lcyc7XG5pbXBvcnQgKiBhcyBMb2dCb3hTdHlsZSBmcm9tICcuL0xvZ0JveFN0eWxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBvbkRpc21pc3M6ICgpID0+IHZvaWQsXG4gIG9uQ2hhbmdlU2VsZWN0ZWRJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHZvaWQsXG4gIG9uTWluaW1pemU6ICgpID0+IHZvaWQsXG4gIGxvZ3M6ICRSZWFkT25seUFycmF5PExvZ0JveExvZz4sXG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlcixcbiAgZmF0YWxUeXBlPzogP0xvZ0xldmVsLFxufH0+O1xuXG5mdW5jdGlvbiBMb2dCb3hJbnNwZWN0b3IocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHtsb2dzLCBzZWxlY3RlZEluZGV4fSA9IHByb3BzO1xuICBsZXQgbG9nID0gbG9nc1tzZWxlY3RlZEluZGV4XTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2cpIHtcbiAgICAgIExvZ0JveERhdGEuc3ltYm9saWNhdGVMb2dOb3cobG9nKTtcbiAgICB9XG4gIH0sIFtsb2ddKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIE9wdGltaXN0aWNhbGx5IHN5bWJvbGljYXRlIHRoZSBsYXN0IGFuZCBuZXh0IGxvZ3MuXG4gICAgaWYgKGxvZ3MubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4O1xuICAgICAgY29uc3QgbGFzdEluZGV4ID0gbG9ncy5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgcHJldkluZGV4ID0gc2VsZWN0ZWQgLSAxIDwgMCA/IGxhc3RJbmRleCA6IHNlbGVjdGVkIC0gMTtcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IHNlbGVjdGVkICsgMSA+IGxhc3RJbmRleCA/IDAgOiBzZWxlY3RlZCArIDE7XG4gICAgICBMb2dCb3hEYXRhLnN5bWJvbGljYXRlTG9nTGF6eShsb2dzW3ByZXZJbmRleF0pO1xuICAgICAgTG9nQm94RGF0YS5zeW1ib2xpY2F0ZUxvZ0xhenkobG9nc1tuZXh0SW5kZXhdKTtcbiAgICB9XG4gIH0sIFtsb2dzLCBzZWxlY3RlZEluZGV4XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBLZXlib2FyZC5kaXNtaXNzKCk7XG4gIH0sIFtdKTtcblxuICBmdW5jdGlvbiBfaGFuZGxlUmV0cnkoKSB7XG4gICAgTG9nQm94RGF0YS5yZXRyeVN5bWJvbGljYXRlTG9nTm93KGxvZyk7XG4gIH1cblxuICBpZiAobG9nID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxMb2dCb3hJbnNwZWN0b3JIZWFkZXJcbiAgICAgICAgb25TZWxlY3RJbmRleD17cHJvcHMub25DaGFuZ2VTZWxlY3RlZEluZGV4fVxuICAgICAgICBzZWxlY3RlZEluZGV4PXtzZWxlY3RlZEluZGV4fVxuICAgICAgICB0b3RhbD17bG9ncy5sZW5ndGh9XG4gICAgICAgIGxldmVsPXtsb2cubGV2ZWx9XG4gICAgICAvPlxuICAgICAgPExvZ0JveEluc3BlY3RvckJvZHkgbG9nPXtsb2d9IG9uUmV0cnk9e19oYW5kbGVSZXRyeX0gLz5cbiAgICAgIDxMb2dCb3hJbnNwZWN0b3JGb290ZXJcbiAgICAgICAgb25EaXNtaXNzPXtwcm9wcy5vbkRpc21pc3N9XG4gICAgICAgIG9uTWluaW1pemU9e3Byb3BzLm9uTWluaW1pemV9XG4gICAgICAgIGxldmVsPXtsb2cubGV2ZWx9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3QgaGVhZGVyVGl0bGVNYXAgPSB7XG4gIHdhcm46ICdDb25zb2xlIFdhcm5pbmcnLFxuICBlcnJvcjogJ0NvbnNvbGUgRXJyb3InLFxuICBmYXRhbDogJ1VuY2F1Z2h0IEVycm9yJyxcbiAgc3ludGF4OiAnU3ludGF4IEVycm9yJyxcbiAgY29tcG9uZW50OiAnUmVuZGVyIEVycm9yJyxcbn07XG5cbmZ1bmN0aW9uIExvZ0JveEluc3BlY3RvckJvZHkocHJvcHM6IHtsb2c6IExvZ0JveExvZywgb25SZXRyeTogKCkgPT4gdm9pZH0pIHtcbiAgY29uc3QgW2NvbGxhcHNlZCwgc2V0Q29sbGFwc2VkXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0Q29sbGFwc2VkKHRydWUpO1xuICB9LCBbcHJvcHMubG9nXSk7XG5cbiAgY29uc3QgaGVhZGVyVGl0bGUgPVxuICAgIHByb3BzLmxvZy50eXBlID8/XG4gICAgaGVhZGVyVGl0bGVNYXBbcHJvcHMubG9nLmlzQ29tcG9uZW50RXJyb3IgPyAnY29tcG9uZW50JyA6IHByb3BzLmxvZy5sZXZlbF07XG5cbiAgaWYgKGNvbGxhcHNlZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8TG9nQm94SW5zcGVjdG9yTWVzc2FnZUhlYWRlclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldENvbGxhcHNlZCghY29sbGFwc2VkKX1cbiAgICAgICAgICBtZXNzYWdlPXtwcm9wcy5sb2cubWVzc2FnZX1cbiAgICAgICAgICBsZXZlbD17cHJvcHMubG9nLmxldmVsfVxuICAgICAgICAgIHRpdGxlPXtoZWFkZXJUaXRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPFNjcm9sbFZpZXcgc3R5bGU9e3N0eWxlcy5zY3JvbGxCb2R5fT5cbiAgICAgICAgICA8TG9nQm94SW5zcGVjdG9yQ29kZUZyYW1lIGNvZGVGcmFtZT17cHJvcHMubG9nLmNvZGVGcmFtZX0gLz5cbiAgICAgICAgICA8TG9nQm94SW5zcGVjdG9yUmVhY3RGcmFtZXMgbG9nPXtwcm9wcy5sb2d9IC8+XG4gICAgICAgICAgPExvZ0JveEluc3BlY3RvclN0YWNrRnJhbWVzIGxvZz17cHJvcHMubG9nfSBvblJldHJ5PXtwcm9wcy5vblJldHJ5fSAvPlxuICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPFNjcm9sbFZpZXcgc3R5bGU9e3N0eWxlcy5zY3JvbGxCb2R5fT5cbiAgICAgIDxMb2dCb3hJbnNwZWN0b3JNZXNzYWdlSGVhZGVyXG4gICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRDb2xsYXBzZWQoIWNvbGxhcHNlZCl9XG4gICAgICAgIG1lc3NhZ2U9e3Byb3BzLmxvZy5tZXNzYWdlfVxuICAgICAgICBsZXZlbD17cHJvcHMubG9nLmxldmVsfVxuICAgICAgICB0aXRsZT17aGVhZGVyVGl0bGV9XG4gICAgICAvPlxuICAgICAgPExvZ0JveEluc3BlY3RvckNvZGVGcmFtZSBjb2RlRnJhbWU9e3Byb3BzLmxvZy5jb2RlRnJhbWV9IC8+XG4gICAgICA8TG9nQm94SW5zcGVjdG9yUmVhY3RGcmFtZXMgbG9nPXtwcm9wcy5sb2d9IC8+XG4gICAgICA8TG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZXMgbG9nPXtwcm9wcy5sb2d9IG9uUmV0cnk9e3Byb3BzLm9uUmV0cnl9IC8+XG4gICAgPC9TY3JvbGxWaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvb3Q6IHtcbiAgICBmbGV4OiAxLFxuICAgIGJhY2tncm91bmRDb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKCksXG4gIH0sXG4gIHNjcm9sbEJvZHk6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IExvZ0JveFN0eWxlLmdldEJhY2tncm91bmRDb2xvcigwLjkpLFxuICAgIGZsZXg6IDEsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nQm94SW5zcGVjdG9yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtDb2RlRnJhbWV9IGZyb20gJy4uL0RhdGEvcGFyc2VMb2dCb3hMb2cnO1xuXG5pbXBvcnQgU2Nyb2xsVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1Njcm9sbFZpZXcvU2Nyb2xsVmlldyc7XG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgb3BlbkZpbGVJbkVkaXRvciBmcm9tICcuLi8uLi9Db3JlL0RldnRvb2xzL29wZW5GaWxlSW5FZGl0b3InO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBUZXh0IGZyb20gJy4uLy4uL1RleHQvVGV4dCc7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCAqIGFzIExvZ0JveERhdGEgZnJvbSAnLi4vRGF0YS9Mb2dCb3hEYXRhJztcbmltcG9ydCBBbnNpSGlnaGxpZ2h0IGZyb20gJy4vQW5zaUhpZ2hsaWdodCc7XG5pbXBvcnQgTG9nQm94QnV0dG9uIGZyb20gJy4vTG9nQm94QnV0dG9uJztcbmltcG9ydCBMb2dCb3hJbnNwZWN0b3JTZWN0aW9uIGZyb20gJy4vTG9nQm94SW5zcGVjdG9yU2VjdGlvbic7XG5pbXBvcnQgKiBhcyBMb2dCb3hTdHlsZSBmcm9tICcuL0xvZ0JveFN0eWxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgY29kZUZyYW1lOiA/Q29kZUZyYW1lLFxufH0+O1xuXG5mdW5jdGlvbiBMb2dCb3hJbnNwZWN0b3JDb2RlRnJhbWUocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IGNvZGVGcmFtZSA9IHByb3BzLmNvZGVGcmFtZTtcbiAgaWYgKGNvZGVGcmFtZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGaWxlTmFtZSgpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgY29uc3QgbWF0Y2hlcyA9IC9bXi9dKiQvLmV4ZWMoY29kZUZyYW1lLmZpbGVOYW1lKTtcbiAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBtYXRjaGVzWzBdO1xuICAgIH1cblxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICByZXR1cm4gY29kZUZyYW1lLmZpbGVOYW1lO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TG9jYXRpb24oKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXVxuICAgIGNvbnN0IGxvY2F0aW9uID0gY29kZUZyYW1lLmxvY2F0aW9uO1xuICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYCAoJHtsb2NhdGlvbi5yb3d9OiR7XG4gICAgICAgIGxvY2F0aW9uLmNvbHVtbiArIDEgLyogQ29kZSBmcmFtZSBjb2x1bW5zIGFyZSB6ZXJvIGluZGV4ZWQgKi9cbiAgICAgIH0pYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPExvZ0JveEluc3BlY3RvclNlY3Rpb24gaGVhZGluZz1cIlNvdXJjZVwiIGFjdGlvbj17PEFwcEluZm8gLz59PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3h9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmZyYW1lfT5cbiAgICAgICAgICA8U2Nyb2xsVmlldyBob3Jpem9udGFsPlxuICAgICAgICAgICAgPEFuc2lIaWdobGlnaHQgc3R5bGU9e3N0eWxlcy5jb250ZW50fSB0ZXh0PXtjb2RlRnJhbWUuY29udGVudH0gLz5cbiAgICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPExvZ0JveEJ1dHRvblxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcj17e1xuICAgICAgICAgICAgZGVmYXVsdDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgIHByZXNzZWQ6IExvZ0JveFN0eWxlLmdldEJhY2tncm91bmREYXJrQ29sb3IoMSksXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmJ1dHRvbn1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBvcGVuRmlsZUluRWRpdG9yKGNvZGVGcmFtZS5maWxlTmFtZSwgY29kZUZyYW1lLmxvY2F0aW9uPy5yb3cgPz8gMCk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5maWxlVGV4dH0+XG4gICAgICAgICAgICB7Z2V0RmlsZU5hbWUoKX1cbiAgICAgICAgICAgIHtnZXRMb2NhdGlvbigpfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Mb2dCb3hCdXR0b24+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9Mb2dCb3hJbnNwZWN0b3JTZWN0aW9uPlxuICApO1xufVxuXG5mdW5jdGlvbiBBcHBJbmZvKCkge1xuICBjb25zdCBhcHBJbmZvID0gTG9nQm94RGF0YS5nZXRBcHBJbmZvKCk7XG4gIGlmIChhcHBJbmZvID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPExvZ0JveEJ1dHRvblxuICAgICAgYmFja2dyb3VuZENvbG9yPXt7XG4gICAgICAgIGRlZmF1bHQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIHByZXNzZWQ6IGFwcEluZm8ub25QcmVzc1xuICAgICAgICAgID8gTG9nQm94U3R5bGUuZ2V0QmFja2dyb3VuZENvbG9yKDEpXG4gICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgfX1cbiAgICAgIHN0eWxlPXthcHBJbmZvU3R5bGVzLmJ1aWxkQnV0dG9ufVxuICAgICAgb25QcmVzcz17YXBwSW5mby5vblByZXNzfT5cbiAgICAgIDxUZXh0IHN0eWxlPXthcHBJbmZvU3R5bGVzLnRleHR9PlxuICAgICAgICB7YXBwSW5mby5hcHBWZXJzaW9ufSAoe2FwcEluZm8uZW5naW5lfSlcbiAgICAgIDwvVGV4dD5cbiAgICA8L0xvZ0JveEJ1dHRvbj5cbiAgKTtcbn1cblxuY29uc3QgYXBwSW5mb1N0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgdGV4dDoge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMC40KSxcbiAgICBmb250U2l6ZTogMTIsXG4gICAgbGluZUhlaWdodDogMTIsXG4gIH0sXG4gIGJ1aWxkQnV0dG9uOiB7XG4gICAgZmxleDogMCxcbiAgICBmbGV4R3JvdzogMCxcbiAgICBwYWRkaW5nVmVydGljYWw6IDQsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDUsXG4gICAgYm9yZGVyUmFkaXVzOiA1LFxuICAgIG1hcmdpblJpZ2h0OiAtOCxcbiAgfSxcbn0pO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJveDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogTG9nQm94U3R5bGUuZ2V0QmFja2dyb3VuZENvbG9yKCksXG4gICAgbWFyZ2luTGVmdDogMTAsXG4gICAgbWFyZ2luUmlnaHQ6IDEwLFxuICAgIG1hcmdpblRvcDogNSxcbiAgICBib3JkZXJSYWRpdXM6IDMsXG4gIH0sXG4gIGZyYW1lOiB7XG4gICAgcGFkZGluZzogMTAsXG4gICAgYm9yZGVyQm90dG9tQ29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigwLjEpLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAxLFxuICB9LFxuICBidXR0b246IHtcbiAgICBwYWRkaW5nVG9wOiAxMCxcbiAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgfSxcbiAgY29udGVudDoge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMSksXG4gICAgZm9udFNpemU6IDEyLFxuICAgIGluY2x1ZGVGb250UGFkZGluZzogZmFsc2UsXG4gICAgbGluZUhlaWdodDogMjAsXG4gICAgZm9udEZhbWlseTogUGxhdGZvcm0uc2VsZWN0KHthbmRyb2lkOiAnbW9ub3NwYWNlJywgaW9zOiAnTWVubG8nfSksXG4gIH0sXG4gIGZpbGVUZXh0OiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigwLjUpLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZmxleDogMSxcbiAgICBmb250U2l6ZTogMTIsXG4gICAgaW5jbHVkZUZvbnRQYWRkaW5nOiBmYWxzZSxcbiAgICBsaW5lSGVpZ2h0OiAxNixcbiAgICBmb250RmFtaWx5OiBQbGF0Zm9ybS5zZWxlY3Qoe2FuZHJvaWQ6ICdtb25vc3BhY2UnLCBpb3M6ICdNZW5sbyd9KSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMb2dCb3hJbnNwZWN0b3JDb2RlRnJhbWU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBnZXREZXZTZXJ2ZXIgPSByZXF1aXJlKCcuL2dldERldlNlcnZlcicpO1xuXG5mdW5jdGlvbiBvcGVuRmlsZUluRWRpdG9yKGZpbGU6IHN0cmluZywgbGluZU51bWJlcjogbnVtYmVyKSB7XG4gIC8vICRGbG93Rml4TWVbdW51c2VkLXByb21pc2VdXG4gIGZldGNoKGdldERldlNlcnZlcigpLnVybCArICdvcGVuLXN0YWNrLWZyYW1lJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7ZmlsZSwgbGluZU51bWJlcn0pLFxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvcGVuRmlsZUluRWRpdG9yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1RleHRTdHlsZVByb3B9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCBWaWV3IGZyb20gJy4uLy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0IHthbnNpVG9Kc29ufSBmcm9tICdhbnNlcic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8vIEFmdGVyZ2xvdyB0aGVtZSBmcm9tIGh0dHBzOi8vaXRlcm0yY29sb3JzY2hlbWVzLmNvbS9cbmNvbnN0IENPTE9SUyA9IHtcbiAgJ2Fuc2ktYmxhY2snOiAncmdiKDI3LCAyNywgMjcpJyxcbiAgJ2Fuc2ktcmVkJzogJ3JnYigxODcsIDg2LCA4MyknLFxuICAnYW5zaS1ncmVlbic6ICdyZ2IoMTQ0LCAxNTcsIDk4KScsXG4gICdhbnNpLXllbGxvdyc6ICdyZ2IoMjM0LCAxOTMsIDEyMSknLFxuICAnYW5zaS1ibHVlJzogJ3JnYigxMjUsIDE2OSwgMTk5KScsXG4gICdhbnNpLW1hZ2VudGEnOiAncmdiKDE3NiwgMTAxLCAxNTEpJyxcbiAgJ2Fuc2ktY3lhbic6ICdyZ2IoMTQwLCAyMjAsIDIxNiknLFxuICAvLyBJbnN0ZWFkIG9mIHdoaXRlLCB1c2UgdGhlIGRlZmF1bHQgY29sb3IgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudFxuICAvLyAnYW5zaS13aGl0ZSc6ICdyZ2IoMjE2LCAyMTYsIDIxNiknLFxuICAnYW5zaS1icmlnaHQtYmxhY2snOiAncmdiKDk4LCA5OCwgOTgpJyxcbiAgJ2Fuc2ktYnJpZ2h0LXJlZCc6ICdyZ2IoMTg3LCA4NiwgODMpJyxcbiAgJ2Fuc2ktYnJpZ2h0LWdyZWVuJzogJ3JnYigxNDQsIDE1NywgOTgpJyxcbiAgJ2Fuc2ktYnJpZ2h0LXllbGxvdyc6ICdyZ2IoMjM0LCAxOTMsIDEyMSknLFxuICAnYW5zaS1icmlnaHQtYmx1ZSc6ICdyZ2IoMTI1LCAxNjksIDE5OSknLFxuICAnYW5zaS1icmlnaHQtbWFnZW50YSc6ICdyZ2IoMTc2LCAxMDEsIDE1MSknLFxuICAnYW5zaS1icmlnaHQtY3lhbic6ICdyZ2IoMTQwLCAyMjAsIDIxNiknLFxuICAnYW5zaS1icmlnaHQtd2hpdGUnOiAncmdiKDI0NywgMjQ3LCAyNDcpJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFuc2koe1xuICB0ZXh0LFxuICBzdHlsZSxcbn06IHtcbiAgdGV4dDogc3RyaW5nLFxuICBzdHlsZTogVGV4dFN0eWxlUHJvcCxcbiAgLi4uXG59KTogUmVhY3QuTm9kZSB7XG4gIGxldCBjb21tb25XaGl0ZXNwYWNlTGVuZ3RoID0gSW5maW5pdHk7XG4gIGNvbnN0IHBhcnNlZExpbmVzID0gdGV4dC5zcGxpdCgvXFxuLykubWFwKGxpbmUgPT5cbiAgICBhbnNpVG9Kc29uKGxpbmUsIHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICByZW1vdmVfZW1wdHk6IHRydWUsXG4gICAgICB1c2VfY2xhc3NlczogdHJ1ZSxcbiAgICB9KSxcbiAgKTtcblxuICBwYXJzZWRMaW5lcy5tYXAobGluZXMgPT4ge1xuICAgIC8vIFRoZSB0aGlyZCBpdGVtIG9uIGVhY2ggbGluZSBpbmNsdWRlcyB0aGUgd2hpdGVzcGFjZSBvZiB0aGUgc291cmNlIGNvZGUuXG4gICAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBsZWFzdCBhbW91bnQgb2YgY29tbW9uIHdoaXRlc3BhY2UgdG8gdHJpbSBhbGwgbGluZXMuXG4gICAgLy8gRXhhbXBsZTogQXJyYXkgW1wiIFwiLCBcIiA5NiB8XCIsIFwiICAgICB0ZXh0XCIsIC4uLl1cbiAgICBjb25zdCBtYXRjaCA9IGxpbmVzWzJdICYmIGxpbmVzWzJdPy5jb250ZW50Py5tYXRjaCgvXiArLyk7XG4gICAgY29uc3Qgd2hpdGVzcGFjZUxlbmd0aCA9IChtYXRjaCAmJiBtYXRjaFswXT8ubGVuZ3RoKSB8fCAwO1xuICAgIGlmICh3aGl0ZXNwYWNlTGVuZ3RoIDwgY29tbW9uV2hpdGVzcGFjZUxlbmd0aCkge1xuICAgICAgY29tbW9uV2hpdGVzcGFjZUxlbmd0aCA9IHdoaXRlc3BhY2VMZW5ndGg7XG4gICAgfVxuICB9KTtcblxuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gICAqIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIGNvbnN0IGdldFRleHQgPSAoY29udGVudCwga2V5KSA9PiB7XG4gICAgaWYgKGtleSA9PT0gMSkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSB2ZXJ0aWNhbCBiYXIgYWZ0ZXIgbGluZSBudW1iZXJzXG4gICAgICByZXR1cm4gY29udGVudC5yZXBsYWNlKC9cXHwgJC8sICcgJyk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IDIgJiYgY29tbW9uV2hpdGVzcGFjZUxlbmd0aCA8IEluZmluaXR5KSB7XG4gICAgICAvLyBSZW1vdmUgY29tbW9uIHdoaXRlc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgICAgcmV0dXJuIGNvbnRlbnQuc2xpY2UoY29tbW9uV2hpdGVzcGFjZUxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAge3BhcnNlZExpbmVzLm1hcCgoaXRlbXMsIGkpID0+IChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5saW5lfSBrZXk9e2l9PlxuICAgICAgICAgIHtpdGVtcy5tYXAoKGJ1bmRsZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPVxuICAgICAgICAgICAgICBidW5kbGUuZmcgJiYgQ09MT1JTW2J1bmRsZS5mZ11cbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBidW5kbGUuYmcgJiYgQ09MT1JTW2J1bmRsZS5iZ10sXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBidW5kbGUuZmcgJiYgQ09MT1JTW2J1bmRsZS5mZ10sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYnVuZGxlLmJnICYmIENPTE9SU1tidW5kbGUuYmddLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGUsIHRleHRTdHlsZV19IGtleT17a2V5fT5cbiAgICAgICAgICAgICAgICB7Z2V0VGV4dChidW5kbGUuY29udGVudCwga2V5KX1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKSl9XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGxpbmU6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIFRoaXMgZmlsZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEBkcnVkcnUgKGh0dHBzOi8vZ2l0aHViLmNvbS9kcnVkcnUvYW5zaV91cCksIE1JVCwgMjAxMVxuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgQU5TSV9DT0xPUlMgPSBbW3sgY29sb3I6IFwiMCwgMCwgMFwiLCBcImNsYXNzXCI6IFwiYW5zaS1ibGFja1wiIH0sIHsgY29sb3I6IFwiMTg3LCAwLCAwXCIsIFwiY2xhc3NcIjogXCJhbnNpLXJlZFwiIH0sIHsgY29sb3I6IFwiMCwgMTg3LCAwXCIsIFwiY2xhc3NcIjogXCJhbnNpLWdyZWVuXCIgfSwgeyBjb2xvcjogXCIxODcsIDE4NywgMFwiLCBcImNsYXNzXCI6IFwiYW5zaS15ZWxsb3dcIiB9LCB7IGNvbG9yOiBcIjAsIDAsIDE4N1wiLCBcImNsYXNzXCI6IFwiYW5zaS1ibHVlXCIgfSwgeyBjb2xvcjogXCIxODcsIDAsIDE4N1wiLCBcImNsYXNzXCI6IFwiYW5zaS1tYWdlbnRhXCIgfSwgeyBjb2xvcjogXCIwLCAxODcsIDE4N1wiLCBcImNsYXNzXCI6IFwiYW5zaS1jeWFuXCIgfSwgeyBjb2xvcjogXCIyNTUsMjU1LDI1NVwiLCBcImNsYXNzXCI6IFwiYW5zaS13aGl0ZVwiIH1dLCBbeyBjb2xvcjogXCI4NSwgODUsIDg1XCIsIFwiY2xhc3NcIjogXCJhbnNpLWJyaWdodC1ibGFja1wiIH0sIHsgY29sb3I6IFwiMjU1LCA4NSwgODVcIiwgXCJjbGFzc1wiOiBcImFuc2ktYnJpZ2h0LXJlZFwiIH0sIHsgY29sb3I6IFwiMCwgMjU1LCAwXCIsIFwiY2xhc3NcIjogXCJhbnNpLWJyaWdodC1ncmVlblwiIH0sIHsgY29sb3I6IFwiMjU1LCAyNTUsIDg1XCIsIFwiY2xhc3NcIjogXCJhbnNpLWJyaWdodC15ZWxsb3dcIiB9LCB7IGNvbG9yOiBcIjg1LCA4NSwgMjU1XCIsIFwiY2xhc3NcIjogXCJhbnNpLWJyaWdodC1ibHVlXCIgfSwgeyBjb2xvcjogXCIyNTUsIDg1LCAyNTVcIiwgXCJjbGFzc1wiOiBcImFuc2ktYnJpZ2h0LW1hZ2VudGFcIiB9LCB7IGNvbG9yOiBcIjg1LCAyNTUsIDI1NVwiLCBcImNsYXNzXCI6IFwiYW5zaS1icmlnaHQtY3lhblwiIH0sIHsgY29sb3I6IFwiMjU1LCAyNTUsIDI1NVwiLCBcImNsYXNzXCI6IFwiYW5zaS1icmlnaHQtd2hpdGVcIiB9XV07XG5cbnZhciBBbnNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBfY3JlYXRlQ2xhc3MoQW5zZXIsIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJlc2NhcGVGb3JIdG1sXCIsXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogQW5zZXIuZXNjYXBlRm9ySHRtbFxuICAgICAgICAgKiBFc2NhcGUgdGhlIGlucHV0IEhUTUwuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgZG9lcyB0aGUgbWluaW11bSBlc2NhcGluZyBvZiB0ZXh0IHRvIG1ha2UgaXQgY29tcGxpYW50IHdpdGggSFRNTC5cbiAgICAgICAgICogSW4gcGFydGljdWxhciwgdGhlICcmJywnPCcsIGFuZCAnPicgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVGhpcyBzaG91bGRcbiAgICAgICAgICogYmUgcnVuIHByaW9yIHRvIGBhbnNpVG9IdG1sYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG5hbWUgQW5zZXIuZXNjYXBlRm9ySHRtbFxuICAgICAgICAgKiBAZnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR4dCBUaGUgaW5wdXQgdGV4dCAoY29udGFpbmluZyB0aGUgQU5TSSBzbmlwcGV0cykuXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBlc2NhcGVkIGh0bWwuXG4gICAgICAgICAqL1xuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXNjYXBlRm9ySHRtbCh0eHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQW5zZXIoKS5lc2NhcGVGb3JIdG1sKHR4dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQW5zZXIubGlua2lmeVxuICAgICAgICAgKiBBZGRzIHRoZSBsaW5rcyBpbiB0aGUgSFRNTC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyByZXBsYWNlcyBhbnkgbGlua3MgaW4gdGhlIHRleHQgd2l0aCBhbmNob3IgdGFncyB0aGF0IGRpc3BsYXkgdGhlXG4gICAgICAgICAqIGxpbmsuIFRoZSBsaW5rcyBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJcbiAgICAgICAgICogc3Vycm91bmRpbmcgaXQuIEFsc28sIHlvdSBzaG91bGQgYXBwbHkgdGhpcyBhZnRlciB5b3UgaGF2ZSBydW5cbiAgICAgICAgICogYGFuc2lUb0h0bWxgIG9uIHRoZSB0ZXh0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSBBbnNlci5saW5raWZ5XG4gICAgICAgICAqIEBmdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHh0IFRoZSBpbnB1dCB0ZXh0LlxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgSFRNTCBjb250YWluaW5nIHRoZSA8YT4gdGFncyAodW5lc2NhcGVkKS5cbiAgICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJsaW5raWZ5XCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBsaW5raWZ5KHR4dCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBbnNlcigpLmxpbmtpZnkodHh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbnNlci5hbnNpVG9IdG1sXG4gICAgICAgICAqIFRoaXMgcmVwbGFjZXMgQU5TSSB0ZXJtaW5hbCBlc2NhcGUgY29kZXMgd2l0aCBTUEFOIHRhZ3MgdGhhdCB3cmFwIHRoZVxuICAgICAgICAgKiBjb250ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgaW50ZXJwcmV0cyBBTlNJIFNHUiAoU2VsZWN0IEdyYXBoaWMgUmVuZGl0aW9uKSBjb2Rlc1xuICAgICAgICAgKiB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBIVE1MLlxuICAgICAgICAgKiBGb3IgZXhhbXBsZSwgY3Vyc29yIG1vdmVtZW50IGNvZGVzIGFyZSBpZ25vcmVkIGFuZCBoaWRkZW4gZnJvbSBvdXRwdXQuXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHN0eWxlIHVzZXMgY29sb3JzIHRoYXQgYXJlIHZlcnkgY2xvc2UgdG8gdGhlIHByZXNjcmliZWRcbiAgICAgICAgICogc3RhbmRhcmQuIFRoZSBzdGFuZGFyZCBhc3N1bWVzIHRoYXQgdGhlIHRleHQgd2lsbCBoYXZlIGEgYmxhY2tcbiAgICAgICAgICogYmFja2dyb3VuZC4gVGhlc2UgY29sb3JzIGFyZSBzZXQgYXMgaW5saW5lIHN0eWxlcyBvbiB0aGUgU1BBTiB0YWdzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBbm90aGVyIG9wdGlvbiBpcyB0byBzZXQgYHVzZV9jbGFzc2VzOiB0cnVlYCBpbiB0aGUgb3B0aW9ucyBhcmd1bWVudC5cbiAgICAgICAgICogVGhpcyB3aWxsIGluc3RlYWQgc2V0IGNsYXNzZXMgb24gdGhlIHNwYW5zIHNvIHRoZSBjb2xvcnMgY2FuIGJlIHNldCB2aWFcbiAgICAgICAgICogQ1NTLiBUaGUgY2xhc3MgbmFtZXMgdXNlZCBhcmUgb2YgdGhlIGZvcm1hdCBgYW5zaS0qLWZnL2JnYCBhbmRcbiAgICAgICAgICogYGFuc2ktYnJpZ2h0LSotZmcvYmdgIHdoZXJlIGAqYCBpcyB0aGUgY29sb3IgbmFtZSxcbiAgICAgICAgICogaS5lIGJsYWNrL3JlZC9ncmVlbi95ZWxsb3cvYmx1ZS9tYWdlbnRhL2N5YW4vd2hpdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBuYW1lIEFuc2VyLmFuc2lUb0h0bWxcbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eHQgVGhlIGlucHV0IHRleHQuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUgYW5zaVRvSFRNTCBtZXRob2QuXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBIVE1MIG91dHB1dC5cbiAgICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJhbnNpVG9IdG1sXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhbnNpVG9IdG1sKHR4dCwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBbnNlcigpLmFuc2lUb0h0bWwodHh0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbnNlci5hbnNpVG9Kc29uXG4gICAgICAgICAqIENvbnZlcnRzIEFOU0kgaW5wdXQgaW50byBKU09OIG91dHB1dC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG5hbWUgQW5zZXIuYW5zaVRvSnNvblxuICAgICAgICAgKiBAZnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR4dCBUaGUgaW5wdXQgdGV4dC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBhbnNpVG9IVE1MIG1ldGhvZC5cbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIEhUTUwgb3V0cHV0LlxuICAgICAgICAgKi9cblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImFuc2lUb0pzb25cIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFuc2lUb0pzb24odHh0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFuc2VyKCkuYW5zaVRvSnNvbih0eHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuc2VyLmFuc2lUb1RleHRcbiAgICAgICAgICogQ29udmVydHMgQU5TSSBpbnB1dCBpbnRvIHRleHQgb3V0cHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSBBbnNlci5hbnNpVG9UZXh0XG4gICAgICAgICAqIEBmdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHh0IFRoZSBpbnB1dCB0ZXh0LlxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgdGV4dCBvdXRwdXQuXG4gICAgICAgICAqL1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiYW5zaVRvVGV4dFwiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYW5zaVRvVGV4dCh0eHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQW5zZXIoKS5hbnNpVG9UZXh0KHR4dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQW5zZXJcbiAgICAgICAgICogVGhlIGBBbnNlcmAgY2xhc3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBuYW1lIEFuc2VyXG4gICAgICAgICAqIEBmdW5jdGlvblxuICAgICAgICAgKiBAcmV0dXJucyB7QW5zZXJ9XG4gICAgICAgICAqL1xuXG4gICAgfV0pO1xuXG4gICAgZnVuY3Rpb24gQW5zZXIoKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbnNlcik7XG5cbiAgICAgICAgdGhpcy5mZyA9IHRoaXMuYmcgPSB0aGlzLmZnX3RydWVjb2xvciA9IHRoaXMuYmdfdHJ1ZWNvbG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5icmlnaHQgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHVwUGFsZXR0ZVxuICAgICAqIFNldHMgdXAgdGhlIHBhbGV0dGUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzZXR1cFBhbGV0dGVcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cblxuXG4gICAgX2NyZWF0ZUNsYXNzKEFuc2VyLCBbe1xuICAgICAgICBrZXk6IFwic2V0dXBQYWxldHRlXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXR1cFBhbGV0dGUoKSB7XG4gICAgICAgICAgICB0aGlzLlBBTEVUVEVfQ09MT1JTID0gW107XG5cbiAgICAgICAgICAgIC8vIEluZGV4IDAuLjE1IDogU3lzdGVtIGNvbG9yXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUEFMRVRURV9DT0xPUlMucHVzaChBTlNJX0NPTE9SU1tpXVtqXS5jb2xvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbmRleCAxNi4uMjMxIDogUkdCIDZ4Nng2XG4gICAgICAgICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qYXNvbm0yMy8yODY4OTgxI2ZpbGUteHRlcm0tMjU2Y29sb3IteWFtbFxuICAgICAgICAgICAgdmFyIGxldmVscyA9IFswLCA5NSwgMTM1LCAxNzUsIDIxNSwgMjU1XTtcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSBmdW5jdGlvbiBmb3JtYXQociwgZywgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBsZXZlbHNbcl0gKyBcIiwgXCIgKyBsZXZlbHNbZ10gKyBcIiwgXCIgKyBsZXZlbHNbYl07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHIgPSB2b2lkIDAsXG4gICAgICAgICAgICAgICAgZyA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICBiID0gdm9pZCAwO1xuICAgICAgICAgICAgZm9yICh2YXIgX3IgPSAwOyBfciA8IDY7ICsrX3IpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZyA9IDA7IF9nIDwgNjsgKytfZykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IDA7IF9iIDwgNjsgKytfYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5QQUxFVFRFX0NPTE9SUy5wdXNoKGZvcm1hdChfciwgX2csIF9iKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluZGV4IDIzMi4uMjU1IDogR3JheXNjYWxlXG4gICAgICAgICAgICB2YXIgbGV2ZWwgPSA4O1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IDI0OyArK19pLCBsZXZlbCArPSAxMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuUEFMRVRURV9DT0xPUlMucHVzaChmb3JtYXQobGV2ZWwsIGxldmVsLCBsZXZlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGVzY2FwZUZvckh0bWxcbiAgICAgICAgICogRXNjYXBlcyB0aGUgaW5wdXQgdGV4dC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG5hbWUgZXNjYXBlRm9ySHRtbFxuICAgICAgICAgKiBAZnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR4dCBUaGUgaW5wdXQgdGV4dC5cbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIGVzY3BhZWQgSFRNTCBvdXRwdXQuXG4gICAgICAgICAqL1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiZXNjYXBlRm9ySHRtbFwiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXNjYXBlRm9ySHRtbCh0eHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0eHQucmVwbGFjZSgvWyY8Pl0vZ20sIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyID09IFwiJlwiID8gXCImYW1wO1wiIDogc3RyID09IFwiPFwiID8gXCImbHQ7XCIgOiBzdHIgPT0gXCI+XCIgPyBcIiZndDtcIiA6IFwiXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBsaW5raWZ5XG4gICAgICAgICAqIEFkZHMgSFRNTCBsaW5rIGVsZW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSBsaW5raWZ5XG4gICAgICAgICAqIEBmdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHh0IFRoZSBpbnB1dCB0ZXh0LlxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgSFRNTCBvdXRwdXQgY29udGFpbmluZyBsaW5rIGVsZW1lbnRzLlxuICAgICAgICAgKi9cblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImxpbmtpZnlcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxpbmtpZnkodHh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHh0LnJlcGxhY2UoLyhodHRwcz86XFwvXFwvW15cXHNdKykvZ20sIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8YSBocmVmPVxcXCJcIiArIHN0ciArIFwiXFxcIj5cIiArIHN0ciArIFwiPC9hPlwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogYW5zaVRvSHRtbFxuICAgICAgICAgKiBDb252ZXJ0cyBBTlNJIGlucHV0IGludG8gSFRNTCBvdXRwdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBuYW1lIGFuc2lUb0h0bWxcbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eHQgVGhlIGlucHV0IHRleHQuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHBhc3NlZCBvdCB0aGUgYHByb2Nlc3NgIG1ldGhvZC5cbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIEhUTUwgb3V0cHV0LlxuICAgICAgICAgKi9cblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImFuc2lUb0h0bWxcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFuc2lUb0h0bWwodHh0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzKHR4dCwgb3B0aW9ucywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogYW5zaVRvSnNvblxuICAgICAgICAgKiBDb252ZXJ0cyBBTlNJIGlucHV0IGludG8gSFRNTCBvdXRwdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBuYW1lIGFuc2lUb0pzb25cbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eHQgVGhlIGlucHV0IHRleHQuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHBhc3NlZCBvdCB0aGUgYHByb2Nlc3NgIG1ldGhvZC5cbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIEpTT04gb3V0cHV0LlxuICAgICAgICAgKi9cblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImFuc2lUb0pzb25cIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFuc2lUb0pzb24odHh0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuanNvbiA9IHRydWU7XG4gICAgICAgICAgICBvcHRpb25zLmNsZWFyTGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzcyh0eHQsIG9wdGlvbnMsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFuc2lUb1RleHRcbiAgICAgICAgICogQ29udmVydHMgQU5TSSBpbnB1dCBpbnRvIEhUTUwgb3V0cHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSBhbnNpVG9UZXh0XG4gICAgICAgICAqIEBmdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHh0IFRoZSBpbnB1dCB0ZXh0LlxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgdGV4dCBvdXRwdXQuXG4gICAgICAgICAqL1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiYW5zaVRvVGV4dFwiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYW5zaVRvVGV4dCh0eHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3ModHh0LCB7fSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHByb2Nlc3NcbiAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBpbnB1dC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG5hbWUgcHJvY2Vzc1xuICAgICAgICAgKiBAZnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR4dCBUaGUgaW5wdXQgdGV4dC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHBhc3NlZCB0byBgcHJvY2Vzc0NodW5rYCBtZXRob2QsIGV4dGVuZGVkIHdpdGg6XG4gICAgICAgICAqXG4gICAgICAgICAqICAtIGBqc29uYCAoQm9vbGVhbik6IElmIGB0cnVlYCwgdGhlIHJlc3VsdCB3aWxsIGJlIGFuIG9iamVjdC5cbiAgICAgICAgICogIC0gYHVzZV9jbGFzc2VzYCAoQm9vbGVhbik6IElmIGB0cnVlYCwgSFRNTCBjbGFzc2VzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIEhUTUwgb3V0cHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG1hcmt1cFxuICAgICAgICAgKi9cblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcInByb2Nlc3NcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByb2Nlc3ModHh0LCBvcHRpb25zLCBtYXJrdXApIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHZhciByYXdfdGV4dF9jaHVua3MgPSB0eHQuc3BsaXQoL1xcMDMzXFxbLyk7XG4gICAgICAgICAgICB2YXIgZmlyc3RfY2h1bmsgPSByYXdfdGV4dF9jaHVua3Muc2hpZnQoKTsgLy8gdGhlIGZpcnN0IGNodW5rIGlzIG5vdCB0aGUgcmVzdWx0IG9mIHRoZSBzcGxpdFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmNsZWFyTGluZSA9IC9cXHIvLnRlc3QodHh0KTsgLy8gY2hlY2sgZm9yIENhcnJpYWdlIFJldHVyblxuICAgICAgICAgICAgdmFyIGNvbG9yX2NodW5rcyA9IHJhd190ZXh0X2NodW5rcy5tYXAoZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnByb2Nlc3NDaHVuayhjaHVuaywgb3B0aW9ucywgbWFya3VwKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3QgPSBzZWxmLnByb2Nlc3NDaHVua0pzb24oXCJcIik7XG4gICAgICAgICAgICAgICAgZmlyc3QuY29udGVudCA9IGZpcnN0X2NodW5rO1xuICAgICAgICAgICAgICAgIGZpcnN0LmNsZWFyTGluZSA9IG9wdGlvbnMuY2xlYXJMaW5lO1xuICAgICAgICAgICAgICAgIGNvbG9yX2NodW5rcy51bnNoaWZ0KGZpcnN0KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVfZW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JfY2h1bmtzID0gY29sb3JfY2h1bmtzLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjLmlzRW1wdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcl9jaHVua3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbG9yX2NodW5rcy51bnNoaWZ0KGZpcnN0X2NodW5rKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yX2NodW5rcy5qb2luKFwiXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHByb2Nlc3NDaHVua0pzb25cbiAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBjdXJyZW50IGNodW5rIGludG8ganNvbiBvdXRwdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBuYW1lIHByb2Nlc3NDaHVua0pzb25cbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSBpbnB1dCB0ZXh0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiAgICAgICAgICpcbiAgICAgICAgICogIC0gYGpzb25gIChCb29sZWFuKTogSWYgYHRydWVgLCB0aGUgcmVzdWx0IHdpbGwgYmUgYW4gb2JqZWN0LlxuICAgICAgICAgKiAgLSBgdXNlX2NsYXNzZXNgIChCb29sZWFuKTogSWYgYHRydWVgLCBIVE1MIGNsYXNzZXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgSFRNTCBvdXRwdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbWFya3VwIElmIGZhbHNlLCB0aGUgY29sb3JzIHdpbGwgbm90IGJlIHBhcnNlZC5cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0IG9iamVjdDpcbiAgICAgICAgICpcbiAgICAgICAgICogIC0gYGNvbnRlbnRgIChTdHJpbmcpOiBUaGUgdGV4dC5cbiAgICAgICAgICogIC0gYGZnYCAoU3RyaW5nfG51bGwpOiBUaGUgZm9yZWdyb3VuZCBjb2xvci5cbiAgICAgICAgICogIC0gYGJnYCAoU3RyaW5nfG51bGwpOiBUaGUgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgICAgICogIC0gYGZnX3RydWVjb2xvcmAgKFN0cmluZ3xudWxsKTogVGhlIGZvcmVncm91bmQgdHJ1ZSBjb2xvciAoaWYgMTZtIGNvbG9yIGlzIGVuYWJsZWQpLlxuICAgICAgICAgKiAgLSBgYmdfdHJ1ZWNvbG9yYCAoU3RyaW5nfG51bGwpOiBUaGUgYmFja2dyb3VuZCB0cnVlIGNvbG9yIChpZiAxNm0gY29sb3IgaXMgZW5hYmxlZCkuXG4gICAgICAgICAqICAtIGBjbGVhckxpbmVgIChCb29sZWFuKTogYHRydWVgIGlmIGEgY2FycmlhZ2VSZXR1cm4gXFxyIHdhcyBmb3VudCBhdCBlbmQgb2YgbGluZS5cbiAgICAgICAgICogIC0gYHdhc19wcm9jZXNzZWRgIChCb2xlYW4pOiBgdHJ1ZWAgaWYgdGhlIGNvbG9ycyB3ZXJlIHByb2Nlc3NlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICAgICAqICAtIGBpc0VtcHR5YCAoRnVuY3Rpb24pOiBBIGZ1bmN0aW9uIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGNvbnRlbnQgaXMgZW1wdHksIG9yIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAgICAgKlxuICAgICAgICAgKi9cblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcInByb2Nlc3NDaHVua0pzb25cIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByb2Nlc3NDaHVua0pzb24odGV4dCwgb3B0aW9ucywgbWFya3VwKSB7XG5cbiAgICAgICAgICAgIC8vIEFyZSB3ZSB1c2luZyBjbGFzc2VzIG9yIHN0eWxlcz9cbiAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PSBcInVuZGVmaW5lZFwiID8ge30gOiBvcHRpb25zO1xuICAgICAgICAgICAgdmFyIHVzZV9jbGFzc2VzID0gb3B0aW9ucy51c2VfY2xhc3NlcyA9IHR5cGVvZiBvcHRpb25zLnVzZV9jbGFzc2VzICE9IFwidW5kZWZpbmVkXCIgJiYgb3B0aW9ucy51c2VfY2xhc3NlcztcbiAgICAgICAgICAgIHZhciBrZXkgPSBvcHRpb25zLmtleSA9IHVzZV9jbGFzc2VzID8gXCJjbGFzc1wiIDogXCJjb2xvclwiO1xuXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRleHQsXG4gICAgICAgICAgICAgICAgZmc6IG51bGwsXG4gICAgICAgICAgICAgICAgYmc6IG51bGwsXG4gICAgICAgICAgICAgICAgZmdfdHJ1ZWNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgIGJnX3RydWVjb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBjbGVhckxpbmU6IG9wdGlvbnMuY2xlYXJMaW5lLFxuICAgICAgICAgICAgICAgIGRlY29yYXRpb246IG51bGwsXG4gICAgICAgICAgICAgICAgd2FzX3Byb2Nlc3NlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNFbXB0eTogZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQuY29udGVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBFYWNoIFwiY2h1bmtcIiBpcyB0aGUgdGV4dCBhZnRlciB0aGUgQ1NJIChFU0MgKyBcIltcIikgYW5kIGJlZm9yZSB0aGUgbmV4dCBDU0kvRU9GLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFRoaXMgcmVnZXggbWF0Y2hlcyBmb3VyIGdyb3VwcyB3aXRoaW4gYSBjaHVuay5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBUaGUgZmlyc3QgYW5kIHRoaXJkIGdyb3VwcyBtYXRjaCBjb2RlIHR5cGUuXG4gICAgICAgICAgICAvLyBXZSBzdXBwb3J0ZWQgb25seSBTR1IgY29tbWFuZC4gSXQgaGFzIGVtcHR5IGZpcnN0IGdyb3VwIGFuZCBcIm1cIiBpbiB0aGlyZC5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBUaGUgc2Vjb25kIGdyb3VwIG1hdGNoZXMgYWxsIG9mIHRoZSBudW1iZXIrc2VtaWNvbG9uIGNvbW1hbmQgc2VxdWVuY2VzXG4gICAgICAgICAgICAvLyBiZWZvcmUgdGhlIFwibVwiIChvciBvdGhlciB0cmFpbGluZykgY2hhcmFjdGVyLlxuICAgICAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBncmFwaGljcyBvciBTR1IgY29tbWFuZHMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gVGhlIGxhc3QgZ3JvdXAgaXMgdGhlIHRleHQgKGluY2x1ZGluZyBuZXdsaW5lcykgdGhhdCBpcyBjb2xvcmVkIGJ5XG4gICAgICAgICAgICAvLyB0aGUgb3RoZXIgZ3JvdXBcInMgY29tbWFuZHMuXG4gICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHRleHQubWF0Y2goL14oWyFcXHgzYy1cXHgzZl0qKShbXFxkO10qKShbXFx4MjAtXFx4MmNdKltcXHg0MC1cXHg3ZV0pKFtcXHNcXFNdKikvbSk7XG5cbiAgICAgICAgICAgIGlmICghbWF0Y2hlcykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgdmFyIG9yaWdfdHh0ID0gcmVzdWx0LmNvbnRlbnQgPSBtYXRjaGVzWzRdO1xuICAgICAgICAgICAgdmFyIG51bXMgPSBtYXRjaGVzWzJdLnNwbGl0KFwiO1wiKTtcblxuICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IHN1cHBvcnQgb25seSBcIlNHUlwiIChTZWxlY3QgR3JhcGhpYyBSZW5kaXRpb24pXG4gICAgICAgICAgICAvLyBTaW1wbHkgaWdub3JlIGlmIG5vdCBhIFNHUiBjb21tYW5kLlxuICAgICAgICAgICAgaWYgKG1hdGNoZXNbMV0gIT09IFwiXCIgfHwgbWF0Y2hlc1szXSAhPT0gXCJtXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW1hcmt1cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uID0gbnVsbDtcblxuICAgICAgICAgICAgd2hpbGUgKG51bXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBudW1fc3RyID0gbnVtcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHZhciBudW0gPSBwYXJzZUludChudW1fc3RyKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc05hTihudW0pIHx8IG51bSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmZnID0gc2VsZi5iZyA9IHNlbGYuZGVjb3JhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uID0gXCJib2xkXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uID0gXCJkaW1cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5hYmxlIGNvZGUgMiB0byBnZXQgc3RyaW5nXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPT0gMykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24gPSBcIml0YWxpY1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtID09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbiA9IFwiYmxpbmtcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bSA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24gPSBcInJldmVyc2VcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bSA9PT0gOCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24gPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgICAgICAvLyBFbmFibGUgY29kZSA5IHRvIGdldCBzdHJpa2V0aHJvdWdoXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPT09IDkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uID0gXCJzdHJpa2V0aHJvdWdoXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPT0gMzkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5mZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPT0gNDkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5iZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcmVncm91bmQgY29sb3JcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bSA+PSAzMCAmJiBudW0gPCAzOCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmZnID0gQU5TSV9DT0xPUlNbMF1bbnVtICUgMTBdW2tleV07XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcmVncm91bmQgYnJpZ2h0IGNvbG9yXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPj0gOTAgJiYgbnVtIDwgOTgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5mZyA9IEFOU0lfQ09MT1JTWzFdW251bSAlIDEwXVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0gPj0gNDAgJiYgbnVtIDwgNDgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5iZyA9IEFOU0lfQ09MT1JTWzBdW251bSAlIDEwXVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAvLyBCYWNrZ3JvdW5kIGJyaWdodCBjb2xvclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtID49IDEwMCAmJiBudW0gPCAxMDgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5iZyA9IEFOU0lfQ09MT1JTWzFdW251bSAlIDEwXVtrZXldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtID09PSAzOCB8fCBudW0gPT09IDQ4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4dGVuZCBjb2xvciAoMzg9ZmcsIDQ4PWJnKVxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNfZm9yZWdyb3VuZCA9IG51bSA9PT0gMzg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1zLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IG51bXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSBcIjVcIiAmJiBudW1zLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFsZXR0ZSBjb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWxldHRlX2luZGV4ID0gcGFyc2VJbnQobnVtcy5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFsZXR0ZV9pbmRleCA+PSAwICYmIHBhbGV0dGVfaW5kZXggPD0gMjU1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXNlX2NsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5QQUxFVFRFX0NPTE9SUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0dXBQYWxldHRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZm9yZWdyb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmcgPSB0aGlzLlBBTEVUVEVfQ09MT1JTW3BhbGV0dGVfaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJnID0gdGhpcy5QQUxFVFRFX0NPTE9SU1twYWxldHRlX2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrbGFzcyA9IHBhbGV0dGVfaW5kZXggPj0gMTYgPyBcImFuc2ktcGFsZXR0ZS1cIiArIHBhbGV0dGVfaW5kZXggOiBBTlNJX0NPTE9SU1twYWxldHRlX2luZGV4ID4gNyA/IDEgOiAwXVtwYWxldHRlX2luZGV4ICUgOF1bXCJjbGFzc1wiXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19mb3JlZ3JvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mZyA9IGtsYXNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJnID0ga2xhc3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFwiMlwiICYmIG51bXMubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlIGNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBwYXJzZUludChudW1zLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnID0gcGFyc2VJbnQobnVtcy5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IHBhcnNlSW50KG51bXMuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj0gMCAmJiByIDw9IDI1NSAmJiBnID49IDAgJiYgZyA8PSAyNTUgJiYgYiA+PSAwICYmIGIgPD0gMjU1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHIgKyBcIiwgXCIgKyBnICsgXCIsIFwiICsgYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VfY2xhc3Nlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2ZvcmVncm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZnID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmcgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19mb3JlZ3JvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mZyA9IFwiYW5zaS10cnVlY29sb3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZnX3RydWVjb2xvciA9IGNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJnID0gXCJhbnNpLXRydWVjb2xvclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmdfdHJ1ZWNvbG9yID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLmZnID09PSBudWxsICYmIHNlbGYuYmcgPT09IG51bGwgJiYgc2VsZi5kZWNvcmF0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0eWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBjbGFzc2VzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcblxuICAgICAgICAgICAgICAgIHJlc3VsdC5mZyA9IHNlbGYuZmc7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmJnID0gc2VsZi5iZztcbiAgICAgICAgICAgICAgICByZXN1bHQuZmdfdHJ1ZWNvbG9yID0gc2VsZi5mZ190cnVlY29sb3I7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmJnX3RydWVjb2xvciA9IHNlbGYuYmdfdHJ1ZWNvbG9yO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kZWNvcmF0aW9uID0gc2VsZi5kZWNvcmF0aW9uO1xuICAgICAgICAgICAgICAgIHJlc3VsdC53YXNfcHJvY2Vzc2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogcHJvY2Vzc0NodW5rXG4gICAgICAgICAqIFByb2Nlc3NlcyB0aGUgY3VycmVudCBjaHVuayBvZiB0ZXh0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSBwcm9jZXNzQ2h1bmtcbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSBpbnB1dCB0ZXh0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiAgICAgICAgICpcbiAgICAgICAgICogIC0gYGpzb25gIChCb29sZWFuKTogSWYgYHRydWVgLCB0aGUgcmVzdWx0IHdpbGwgYmUgYW4gb2JqZWN0LlxuICAgICAgICAgKiAgLSBgdXNlX2NsYXNzZXNgIChCb29sZWFuKTogSWYgYHRydWVgLCBIVE1MIGNsYXNzZXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgSFRNTCBvdXRwdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbWFya3VwIElmIGZhbHNlLCB0aGUgY29sb3JzIHdpbGwgbm90IGJlIHBhcnNlZC5cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fFN0cmluZ30gVGhlIHJlc3VsdCAob2JqZWN0IGlmIGBqc29uYCBpcyB3YW50ZWQgYmFjayBvciBzdHJpbmcgb3RoZXJ3aXNlKS5cbiAgICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJwcm9jZXNzQ2h1bmtcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByb2Nlc3NDaHVuayh0ZXh0LCBvcHRpb25zLCBtYXJrdXApIHtcbiAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIHZhciBqc29uQ2h1bmsgPSB0aGlzLnByb2Nlc3NDaHVua0pzb24odGV4dCwgb3B0aW9ucywgbWFya3VwKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBqc29uQ2h1bms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoanNvbkNodW5rLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFqc29uQ2h1bmsud2FzX3Byb2Nlc3NlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBqc29uQ2h1bmsuY29udGVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHVzZV9jbGFzc2VzID0gb3B0aW9ucy51c2VfY2xhc3NlcztcblxuICAgICAgICAgICAgdmFyIHN0eWxlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNsYXNzZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgICAgICB2YXIgcmVuZGVyX2RhdGEgPSBmdW5jdGlvbiByZW5kZXJfZGF0YShkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZyYWdtZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMucHVzaChcImRhdGEtXCIgKyBrZXkgKyBcIj1cXFwiXCIgKyBfdGhpczIuZXNjYXBlRm9ySHRtbChkYXRhW2tleV0pICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudHMubGVuZ3RoID4gMCA/IFwiIFwiICsgZnJhZ21lbnRzLmpvaW4oXCIgXCIpIDogXCJcIjtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChqc29uQ2h1bmsuZmcpIHtcbiAgICAgICAgICAgICAgICBpZiAodXNlX2NsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGpzb25DaHVuay5mZyArIFwiLWZnXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbkNodW5rLmZnX3RydWVjb2xvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtcImFuc2ktdHJ1ZWNvbG9yLWZnXCJdID0ganNvbkNodW5rLmZnX3RydWVjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25DaHVuay5mZ190cnVlY29sb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVzLnB1c2goXCJjb2xvcjpyZ2IoXCIgKyBqc29uQ2h1bmsuZmcgKyBcIilcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoanNvbkNodW5rLmJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZV9jbGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChqc29uQ2h1bmsuYmcgKyBcIi1iZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25DaHVuay5iZ190cnVlY29sb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbXCJhbnNpLXRydWVjb2xvci1iZ1wiXSA9IGpzb25DaHVuay5iZ190cnVlY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uQ2h1bmsuYmdfdHJ1ZWNvbG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlcy5wdXNoKFwiYmFja2dyb3VuZC1jb2xvcjpyZ2IoXCIgKyBqc29uQ2h1bmsuYmcgKyBcIilcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoanNvbkNodW5rLmRlY29yYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodXNlX2NsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKFwiYW5zaS1cIiArIGpzb25DaHVuay5kZWNvcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25DaHVuay5kZWNvcmF0aW9uID09PSBcImJvbGRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXMucHVzaChcImZvbnQtd2VpZ2h0OmJvbGRcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqc29uQ2h1bmsuZGVjb3JhdGlvbiA9PT0gXCJkaW1cIikge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXMucHVzaChcIm9wYWNpdHk6MC41XCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbkNodW5rLmRlY29yYXRpb24gPT09IFwiaXRhbGljXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVzLnB1c2goXCJmb250LXN0eWxlOml0YWxpY1wiKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZXJsaW5lIGFuZCBibGluayBhcmUgdHJlYXRlZCBiZWxsb3dcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25DaHVuay5kZWNvcmF0aW9uID09PSBcInJldmVyc2VcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXMucHVzaChcImZpbHRlcjppbnZlcnQoMTAwJSlcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqc29uQ2h1bmsuZGVjb3JhdGlvbiA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXMucHVzaChcInZpc2liaWxpdHk6aGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbkNodW5rLmRlY29yYXRpb24gPT09IFwic3RyaWtldGhyb3VnaFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlcy5wdXNoKFwidGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXMucHVzaChcInRleHQtZGVjb3JhdGlvbjpcIiArIGpzb25DaHVuay5kZWNvcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1c2VfY2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIjxzcGFuIGNsYXNzPVxcXCJcIiArIGNsYXNzZXMuam9pbihcIiBcIikgKyBcIlxcXCJcIiArIHJlbmRlcl9kYXRhKGRhdGEpICsgXCI+XCIgKyBqc29uQ2h1bmsuY29udGVudCArIFwiPC9zcGFuPlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiBzdHlsZT1cXFwiXCIgKyBzdHlsZXMuam9pbihcIjtcIikgKyBcIlxcXCJcIiArIHJlbmRlcl9kYXRhKGRhdGEpICsgXCI+XCIgKyBqc29uQ2h1bmsuY29udGVudCArIFwiPC9zcGFuPlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIEFuc2VyO1xufSgpO1xuXG47XG5cbm1vZHVsZS5leHBvcnRzID0gQW5zZXI7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCBWaWV3IGZyb20gJy4uLy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0ICogYXMgTG9nQm94U3R5bGUgZnJvbSAnLi9Mb2dCb3hTdHlsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgaGVhZGluZzogc3RyaW5nLFxuICBjaGlsZHJlbjogUmVhY3QuTm9kZSxcbiAgYWN0aW9uPzogP1JlYWN0Lk5vZGUsXG58fT47XG5cbmZ1bmN0aW9uIExvZ0JveEluc3BlY3RvclNlY3Rpb24ocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zZWN0aW9ufT5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaGVhZGluZ30+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuaGVhZGluZ1RleHR9Pntwcm9wcy5oZWFkaW5nfTwvVGV4dD5cbiAgICAgICAge3Byb3BzLmFjdGlvbn1cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYm9keX0+e3Byb3BzLmNoaWxkcmVufTwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgc2VjdGlvbjoge1xuICAgIG1hcmdpblRvcDogMTUsXG4gIH0sXG4gIGhlYWRpbmc6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTIsXG4gICAgbWFyZ2luQm90dG9tOiAxMCxcbiAgfSxcbiAgaGVhZGluZ1RleHQ6IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDEpLFxuICAgIGZsZXg6IDEsXG4gICAgZm9udFNpemU6IDE4LFxuICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICAgIGluY2x1ZGVGb250UGFkZGluZzogZmFsc2UsXG4gICAgbGluZUhlaWdodDogMjAsXG4gIH0sXG4gIGJvZHk6IHtcbiAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMb2dCb3hJbnNwZWN0b3JTZWN0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtMb2dMZXZlbH0gZnJvbSAnLi4vRGF0YS9Mb2dCb3hMb2cnO1xuXG5pbXBvcnQgU2FmZUFyZWFWaWV3IGZyb20gJy4uLy4uL0NvbXBvbmVudHMvU2FmZUFyZWFWaWV3L1NhZmVBcmVhVmlldyc7XG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vLi4vVGV4dC9UZXh0JztcbmltcG9ydCBMb2dCb3hCdXR0b24gZnJvbSAnLi9Mb2dCb3hCdXR0b24nO1xuaW1wb3J0ICogYXMgTG9nQm94U3R5bGUgZnJvbSAnLi9Mb2dCb3hTdHlsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgb25EaXNtaXNzOiAoKSA9PiB2b2lkLFxuICBvbk1pbmltaXplOiAoKSA9PiB2b2lkLFxuICBsZXZlbD86ID9Mb2dMZXZlbCxcbnx9PjtcblxuZnVuY3Rpb24gTG9nQm94SW5zcGVjdG9yRm9vdGVyKHByb3BzOiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBpZiAocHJvcHMubGV2ZWwgPT09ICdzeW50YXgnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm9vdH0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnN5bnRheEVycm9yVGV4dH0+XG4gICAgICAgICAgICBUaGlzIGVycm9yIGNhbm5vdCBiZSBkaXNtaXNzZWQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxGb290ZXJCdXR0b24gdGV4dD1cIkRpc21pc3NcIiBvblByZXNzPXtwcm9wcy5vbkRpc21pc3N9IC8+XG4gICAgICA8Rm9vdGVyQnV0dG9uIHRleHQ9XCJNaW5pbWl6ZVwiIG9uUHJlc3M9e3Byb3BzLm9uTWluaW1pemV9IC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG50eXBlIEJ1dHRvblByb3BzID0gJFJlYWRPbmx5PHt8XG4gIG9uUHJlc3M6ICgpID0+IHZvaWQsXG4gIHRleHQ6IHN0cmluZyxcbnx9PjtcblxuZnVuY3Rpb24gRm9vdGVyQnV0dG9uKHByb3BzOiBCdXR0b25Qcm9wcyk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gKFxuICAgIDxTYWZlQXJlYVZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgPExvZ0JveEJ1dHRvblxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e3tcbiAgICAgICAgICBkZWZhdWx0OiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgIHByZXNzZWQ6IExvZ0JveFN0eWxlLmdldEJhY2tncm91bmREYXJrQ29sb3IoKSxcbiAgICAgICAgfX1cbiAgICAgICAgb25QcmVzcz17cHJvcHMub25QcmVzc30+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9uQ29udGVudH0+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b25MYWJlbH0+e3Byb3BzLnRleHR9PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L0xvZ0JveEJ1dHRvbj5cbiAgICA8L1NhZmVBcmVhVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb290OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBMb2dCb3hTdHlsZS5nZXRCYWNrZ3JvdW5kQ29sb3IoMSksXG4gICAgc2hhZG93Q29sb3I6ICcjMDAwJyxcbiAgICBzaGFkb3dPZmZzZXQ6IHt3aWR0aDogMCwgaGVpZ2h0OiAtMn0sXG4gICAgc2hhZG93UmFkaXVzOiAyLFxuICAgIHNoYWRvd09wYWNpdHk6IDAuNSxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgYnV0dG9uQ29udGVudDoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGhlaWdodDogNDgsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICBidXR0b25MYWJlbDoge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMSksXG4gICAgZm9udFNpemU6IDE0LFxuICAgIGluY2x1ZGVGb250UGFkZGluZzogZmFsc2UsXG4gICAgbGluZUhlaWdodDogMjAsXG4gIH0sXG4gIHN5bnRheEVycm9yVGV4dDoge1xuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6IDQ4LFxuICAgIGZvbnRTaXplOiAxNCxcbiAgICBsaW5lSGVpZ2h0OiAyMCxcbiAgICBwYWRkaW5nVG9wOiAyMCxcbiAgICBwYWRkaW5nQm90dG9tOiA1MCxcbiAgICBmb250U3R5bGU6ICdpdGFsaWMnLFxuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMC42KSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMb2dCb3hJbnNwZWN0b3JGb290ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0ltYWdlU291cmNlfSBmcm9tICcuLi8uLi9JbWFnZS9JbWFnZVNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7TG9nTGV2ZWx9IGZyb20gJy4uL0RhdGEvTG9nQm94TG9nJztcblxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICcuLi8uLi9Db21wb25lbnRzL1N0YXR1c0Jhci9TdGF0dXNCYXInO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi4vLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IEltYWdlIGZyb20gJy4uLy4uL0ltYWdlL0ltYWdlJztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgTG9nQm94QnV0dG9uIGZyb20gJy4vTG9nQm94QnV0dG9uJztcbmltcG9ydCAqIGFzIExvZ0JveFN0eWxlIGZyb20gJy4vTG9nQm94U3R5bGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBvblNlbGVjdEluZGV4OiAoc2VsZWN0ZWRJbmRleDogbnVtYmVyKSA9PiB2b2lkLFxuICBzZWxlY3RlZEluZGV4OiBudW1iZXIsXG4gIHRvdGFsOiBudW1iZXIsXG4gIGxldmVsOiBMb2dMZXZlbCxcbnx9PjtcblxuZnVuY3Rpb24gTG9nQm94SW5zcGVjdG9ySGVhZGVyKHByb3BzOiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBpZiAocHJvcHMubGV2ZWwgPT09ICdzeW50YXgnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnNhZmVBcmVhLCBzdHlsZXNbcHJvcHMubGV2ZWxdXX0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGVUZXh0fT5GYWlsZWQgdG8gY29tcGlsZTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcHJldkluZGV4ID1cbiAgICBwcm9wcy5zZWxlY3RlZEluZGV4IC0gMSA8IDAgPyBwcm9wcy50b3RhbCAtIDEgOiBwcm9wcy5zZWxlY3RlZEluZGV4IC0gMTtcbiAgY29uc3QgbmV4dEluZGV4ID1cbiAgICBwcm9wcy5zZWxlY3RlZEluZGV4ICsgMSA+IHByb3BzLnRvdGFsIC0gMSA/IDAgOiBwcm9wcy5zZWxlY3RlZEluZGV4ICsgMTtcblxuICBjb25zdCB0aXRsZVRleHQgPSBgTG9nICR7cHJvcHMuc2VsZWN0ZWRJbmRleCArIDF9IG9mICR7cHJvcHMudG90YWx9YDtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnNhZmVBcmVhLCBzdHlsZXNbcHJvcHMubGV2ZWxdXX0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgIDxMb2dCb3hJbnNwZWN0b3JIZWFkZXJCdXR0b25cbiAgICAgICAgICBkaXNhYmxlZD17cHJvcHMudG90YWwgPD0gMX1cbiAgICAgICAgICBsZXZlbD17cHJvcHMubGV2ZWx9XG4gICAgICAgICAgaW1hZ2U9e3JlcXVpcmUoJy4vTG9nQm94SW1hZ2VzL2NoZXZyb24tbGVmdC5wbmcnKX1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBwcm9wcy5vblNlbGVjdEluZGV4KHByZXZJbmRleCl9XG4gICAgICAgIC8+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGVUZXh0fT57dGl0bGVUZXh0fTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8TG9nQm94SW5zcGVjdG9ySGVhZGVyQnV0dG9uXG4gICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnRvdGFsIDw9IDF9XG4gICAgICAgICAgbGV2ZWw9e3Byb3BzLmxldmVsfVxuICAgICAgICAgIGltYWdlPXtyZXF1aXJlKCcuL0xvZ0JveEltYWdlcy9jaGV2cm9uLXJpZ2h0LnBuZycpfVxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHByb3BzLm9uU2VsZWN0SW5kZXgobmV4dEluZGV4KX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IGJhY2tncm91bmRGb3JMZXZlbCA9IChsZXZlbDogTG9nTGV2ZWwpID0+XG4gICh7XG4gICAgd2Fybjoge1xuICAgICAgZGVmYXVsdDogJ3RyYW5zcGFyZW50JyxcbiAgICAgIHByZXNzZWQ6IExvZ0JveFN0eWxlLmdldFdhcm5pbmdEYXJrQ29sb3IoKSxcbiAgICB9LFxuICAgIGVycm9yOiB7XG4gICAgICBkZWZhdWx0OiAndHJhbnNwYXJlbnQnLFxuICAgICAgcHJlc3NlZDogTG9nQm94U3R5bGUuZ2V0RXJyb3JEYXJrQ29sb3IoKSxcbiAgICB9LFxuICAgIGZhdGFsOiB7XG4gICAgICBkZWZhdWx0OiAndHJhbnNwYXJlbnQnLFxuICAgICAgcHJlc3NlZDogTG9nQm94U3R5bGUuZ2V0RmF0YWxEYXJrQ29sb3IoKSxcbiAgICB9LFxuICAgIHN5bnRheDoge1xuICAgICAgZGVmYXVsdDogJ3RyYW5zcGFyZW50JyxcbiAgICAgIHByZXNzZWQ6IExvZ0JveFN0eWxlLmdldEZhdGFsRGFya0NvbG9yKCksXG4gICAgfSxcbiAgfSlbbGV2ZWxdO1xuXG5mdW5jdGlvbiBMb2dCb3hJbnNwZWN0b3JIZWFkZXJCdXR0b24oXG4gIHByb3BzOiAkUmVhZE9ubHk8e3xcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgICBpbWFnZTogSW1hZ2VTb3VyY2UsXG4gICAgbGV2ZWw6IExvZ0xldmVsLFxuICAgIG9uUHJlc3M/OiA/KCkgPT4gdm9pZCxcbiAgfH0+LFxuKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPExvZ0JveEJ1dHRvblxuICAgICAgYmFja2dyb3VuZENvbG9yPXtiYWNrZ3JvdW5kRm9yTGV2ZWwocHJvcHMubGV2ZWwpfVxuICAgICAgb25QcmVzcz17cHJvcHMuZGlzYWJsZWQgPyBudWxsIDogcHJvcHMub25QcmVzc31cbiAgICAgIHN0eWxlPXtoZWFkZXJTdHlsZXMuYnV0dG9ufT5cbiAgICAgIHtwcm9wcy5kaXNhYmxlZCA/IG51bGwgOiAoXG4gICAgICAgIDxJbWFnZSBzb3VyY2U9e3Byb3BzLmltYWdlfSBzdHlsZT17aGVhZGVyU3R5bGVzLmJ1dHRvbkltYWdlfSAvPlxuICAgICAgKX1cbiAgICA8L0xvZ0JveEJ1dHRvbj5cbiAgKTtcbn1cblxuY29uc3QgaGVhZGVyU3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBidXR0b246IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBhc3BlY3RSYXRpbzogMSxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgbWFyZ2luVG9wOiA1LFxuICAgIG1hcmdpblJpZ2h0OiA2LFxuICAgIG1hcmdpbkxlZnQ6IDYsXG4gICAgbWFyZ2luQm90dG9tOiAtOCxcbiAgICBib3JkZXJSYWRpdXM6IDMsXG4gIH0sXG4gIGJ1dHRvbkltYWdlOiB7XG4gICAgaGVpZ2h0OiAxNCxcbiAgICB3aWR0aDogOCxcbiAgICB0aW50Q29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigpLFxuICB9LFxufSk7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgc3ludGF4OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBMb2dCb3hTdHlsZS5nZXRGYXRhbENvbG9yKCksXG4gIH0sXG4gIGZhdGFsOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBMb2dCb3hTdHlsZS5nZXRGYXRhbENvbG9yKCksXG4gIH0sXG4gIHdhcm46IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IExvZ0JveFN0eWxlLmdldFdhcm5pbmdDb2xvcigpLFxuICB9LFxuICBlcnJvcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogTG9nQm94U3R5bGUuZ2V0RXJyb3JDb2xvcigpLFxuICB9LFxuICBoZWFkZXI6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBoZWlnaHQ6IFBsYXRmb3JtLnNlbGVjdCh7XG4gICAgICBhbmRyb2lkOiA0OCxcbiAgICAgIGlvczogNDQsXG4gICAgfSksXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZmxleDogMSxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIHRpdGxlVGV4dDoge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoKSxcbiAgICBmb250U2l6ZTogMTYsXG4gICAgZm9udFdlaWdodDogJzYwMCcsXG4gICAgaW5jbHVkZUZvbnRQYWRkaW5nOiBmYWxzZSxcbiAgICBsaW5lSGVpZ2h0OiAyMCxcbiAgfSxcbiAgc2FmZUFyZWE6IHtcbiAgICBwYWRkaW5nVG9wOiBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnID8gU3RhdHVzQmFyLmN1cnJlbnRIZWlnaHQgOiA0MCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMb2dCb3hJbnNwZWN0b3JIZWFkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Q29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcblxuaW1wb3J0IHByb2Nlc3NDb2xvciBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcic7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyQW5kcm9pZCBmcm9tICcuL05hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkJztcbmltcG9ydCBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VySU9TIGZyb20gJy4vTmF0aXZlU3RhdHVzQmFyTWFuYWdlcklPUyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogU3RhdHVzIGJhciBzdHlsZVxuICovXG5leHBvcnQgdHlwZSBTdGF0dXNCYXJTdHlsZSA9ICRLZXlzPHtcbiAgLyoqXG4gICAqIERlZmF1bHQgc3RhdHVzIGJhciBzdHlsZSAoZGFyayBmb3IgaU9TLCBsaWdodCBmb3IgQW5kcm9pZClcbiAgICovXG4gIGRlZmF1bHQ6IHN0cmluZyxcbiAgLyoqXG4gICAqIERhcmsgYmFja2dyb3VuZCwgd2hpdGUgdGV4dHMgYW5kIGljb25zXG4gICAqL1xuICAnbGlnaHQtY29udGVudCc6IHN0cmluZyxcbiAgLyoqXG4gICAqIExpZ2h0IGJhY2tncm91bmQsIGRhcmsgdGV4dHMgYW5kIGljb25zXG4gICAqL1xuICAnZGFyay1jb250ZW50Jzogc3RyaW5nLFxuICAuLi5cbn0+O1xuXG4vKipcbiAqIFN0YXR1cyBiYXIgYW5pbWF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXR1c0JhckFuaW1hdGlvbiA9ICRLZXlzPHtcbiAgLyoqXG4gICAqIE5vIGFuaW1hdGlvblxuICAgKi9cbiAgbm9uZTogc3RyaW5nLFxuICAvKipcbiAgICogRmFkZSBhbmltYXRpb25cbiAgICovXG4gIGZhZGU6IHN0cmluZyxcbiAgLyoqXG4gICAqIFNsaWRlIGFuaW1hdGlvblxuICAgKi9cbiAgc2xpZGU6IHN0cmluZyxcbiAgLi4uXG59PjtcblxudHlwZSBBbmRyb2lkUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLyoqXG4gICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBzdGF0dXMgYmFyLlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgYmFja2dyb3VuZENvbG9yPzogP0NvbG9yVmFsdWUsXG4gIC8qKlxuICAgKiBJZiB0aGUgc3RhdHVzIGJhciBpcyB0cmFuc2x1Y2VudC5cbiAgICogV2hlbiB0cmFuc2x1Y2VudCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGFwcCB3aWxsIGRyYXcgdW5kZXIgdGhlIHN0YXR1cyBiYXIuXG4gICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgYSBzZW1pIHRyYW5zcGFyZW50IHN0YXR1cyBiYXIgY29sb3IuXG4gICAqXG4gICAqIEBwbGF0Zm9ybSBhbmRyb2lkXG4gICAqL1xuICB0cmFuc2x1Y2VudD86ID9ib29sZWFuLFxufH0+O1xuXG50eXBlIElPU1Byb3BzID0gJFJlYWRPbmx5PHt8XG4gIC8qKlxuICAgKiBJZiB0aGUgbmV0d29yayBhY3Rpdml0eSBpbmRpY2F0b3Igc2hvdWxkIGJlIHZpc2libGUuXG4gICAqXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIG5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGU/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0aW9uIGVmZmVjdCB3aGVuIHNob3dpbmcgYW5kIGhpZGluZyB0aGUgc3RhdHVzIGJhciB1c2luZyB0aGUgYGhpZGRlbmBcbiAgICogcHJvcC4gRGVmYXVsdHMgdG8gJ2ZhZGUnLlxuICAgKlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBzaG93SGlkZVRyYW5zaXRpb24/OiA/KCdmYWRlJyB8ICdzbGlkZScgfCAnbm9uZScpLFxufH0+O1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLkFuZHJvaWRQcm9wcyxcbiAgLi4uSU9TUHJvcHMsXG4gIC8qKlxuICAgKiBJZiB0aGUgc3RhdHVzIGJhciBpcyBoaWRkZW4uXG4gICAqL1xuICBoaWRkZW4/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIElmIHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gc3RhdHVzIGJhciBwcm9wZXJ0eSBjaGFuZ2VzIHNob3VsZCBiZSBhbmltYXRlZC5cbiAgICogU3VwcG9ydGVkIGZvciBiYWNrZ3JvdW5kQ29sb3IsIGJhclN0eWxlIGFuZCBoaWRkZW4uXG4gICAqL1xuICBhbmltYXRlZD86ID9ib29sZWFuLFxuICAvKipcbiAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHN0YXR1cyBiYXIgdGV4dC5cbiAgICovXG4gIGJhclN0eWxlPzogPygnZGVmYXVsdCcgfCAnbGlnaHQtY29udGVudCcgfCAnZGFyay1jb250ZW50JyksXG58fT47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBwcm9wIHN0YWNrIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBtZXJnZVByb3BzU3RhY2soXG4gIHByb3BzU3RhY2s6IEFycmF5PE9iamVjdD4sXG4gIGRlZmF1bHRWYWx1ZXM6IE9iamVjdCxcbik6IE9iamVjdCB7XG4gIHJldHVybiBwcm9wc1N0YWNrLnJlZHVjZShcbiAgICAocHJldiwgY3VyKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY3VyKSB7XG4gICAgICAgIGlmIChjdXJbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgIHByZXZbcHJvcF0gPSBjdXJbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sXG4gICAgey4uLmRlZmF1bHRWYWx1ZXN9LFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRvIGluc2VydCBpbiB0aGUgcHJvcHMgc3RhY2sgZnJvbSB0aGUgcHJvcHNcbiAqIGFuZCB0aGUgdHJhbnNpdGlvbi9hbmltYXRpb24gaW5mby5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3RhY2tFbnRyeShwcm9wczogYW55KTogYW55IHtcbiAgY29uc3QgYW5pbWF0ZWQgPSBwcm9wcy5hbmltYXRlZCA/PyBmYWxzZTtcbiAgY29uc3Qgc2hvd0hpZGVUcmFuc2l0aW9uID0gcHJvcHMuc2hvd0hpZGVUcmFuc2l0aW9uID8/ICdmYWRlJztcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICBwcm9wcy5iYWNrZ3JvdW5kQ29sb3IgIT0gbnVsbFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBhbmltYXRlZCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICBiYXJTdHlsZTpcbiAgICAgIHByb3BzLmJhclN0eWxlICE9IG51bGxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMuYmFyU3R5bGUsXG4gICAgICAgICAgICBhbmltYXRlZCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB0cmFuc2x1Y2VudDogcHJvcHMudHJhbnNsdWNlbnQsXG4gICAgaGlkZGVuOlxuICAgICAgcHJvcHMuaGlkZGVuICE9IG51bGxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMuaGlkZGVuLFxuICAgICAgICAgICAgYW5pbWF0ZWQsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBzaG93SGlkZVRyYW5zaXRpb24sXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgbmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZTogcHJvcHMubmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgdG8gY29udHJvbCB0aGUgYXBwIHN0YXR1cyBiYXIuXG4gKlxuICogIyMjIFVzYWdlIHdpdGggTmF2aWdhdG9yXG4gKlxuICogSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBgU3RhdHVzQmFyYCBjb21wb25lbnRzIG1vdW50ZWQgYXQgdGhlIHNhbWVcbiAqIHRpbWUuIFRoZSBwcm9wcyB3aWxsIGJlIG1lcmdlZCBpbiB0aGUgb3JkZXIgdGhlIGBTdGF0dXNCYXJgIGNvbXBvbmVudHMgd2VyZVxuICogbW91bnRlZC4gT25lIHVzZSBjYXNlIGlzIHRvIHNwZWNpZnkgc3RhdHVzIGJhciBzdHlsZXMgcGVyIHJvdXRlIHVzaW5nIGBOYXZpZ2F0b3JgLlxuICpcbiAqIGBgYFxuICogIDxWaWV3PlxuICogICAgPFN0YXR1c0JhclxuICogICAgICBiYWNrZ3JvdW5kQ29sb3I9XCJibHVlXCJcbiAqICAgICAgYmFyU3R5bGU9XCJsaWdodC1jb250ZW50XCJcbiAqICAgIC8+XG4gKiAgICA8TmF2aWdhdG9yXG4gKiAgICAgIGluaXRpYWxSb3V0ZT17e3N0YXR1c0JhckhpZGRlbjogdHJ1ZX19XG4gKiAgICAgIHJlbmRlclNjZW5lPXsocm91dGUsIG5hdmlnYXRvcikgPT5cbiAqICAgICAgICA8Vmlldz5cbiAqICAgICAgICAgIDxTdGF0dXNCYXIgaGlkZGVuPXtyb3V0ZS5zdGF0dXNCYXJIaWRkZW59IC8+XG4gKiAgICAgICAgICAuLi5cbiAqICAgICAgICA8L1ZpZXc+XG4gKiAgICAgIH1cbiAqICAgIC8+XG4gKiAgPC9WaWV3PlxuICogYGBgXG4gKlxuICogIyMjIEltcGVyYXRpdmUgQVBJXG4gKlxuICogRm9yIGNhc2VzIHdoZXJlIHVzaW5nIGEgY29tcG9uZW50IGlzIG5vdCBpZGVhbCwgdGhlcmUgYXJlIHN0YXRpYyBtZXRob2RzXG4gKiB0byBtYW5pcHVsYXRlIHRoZSBgU3RhdHVzQmFyYCBkaXNwbGF5IHN0YWNrLiBUaGVzZSBtZXRob2RzIGhhdmUgdGhlIHNhbWVcbiAqIGJlaGF2aW9yIGFzIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIGEgYFN0YXR1c0JhcmAgY29tcG9uZW50LlxuICpcbiAqIEZvciBleGFtcGxlLCB5b3UgY2FuIGNhbGwgYFN0YXR1c0Jhci5wdXNoU3RhY2tFbnRyeWAgdG8gdXBkYXRlIHRoZSBzdGF0dXMgYmFyXG4gKiBiZWZvcmUgbGF1bmNoaW5nIGEgdGhpcmQtcGFydHkgbmF0aXZlIFVJIGNvbXBvbmVudCwgYW5kIHRoZW4gY2FsbFxuICogYFN0YXR1c0Jhci5wb3BTdGFja0VudHJ5YCB3aGVuIGNvbXBsZXRlZC5cbiAqXG4gKiBgYGBcbiAqIGNvbnN0IG9wZW5UaGlyZFBhcnR5QnVnUmVwb3J0ZXIgPSBhc3luYyAoKSA9PiB7XG4gKiAgIC8vIFRoZSBidWcgcmVwb3J0ZXIgaGFzIGEgZGFyayBiYWNrZ3JvdW5kLCBzbyB3ZSBwdXNoIGEgbmV3IHN0YXR1cyBiYXIgc3R5bGUuXG4gKiAgIGNvbnN0IHN0YWNrRW50cnkgPSBTdGF0dXNCYXIucHVzaFN0YWNrRW50cnkoe2JhclN0eWxlOiAnbGlnaHQtY29udGVudCd9KTtcbiAqXG4gKiAgIC8vIGBvcGVuYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIFVJIGlzIGRpc21pc3NlZC5cbiAqICAgYXdhaXQgQnVnUmVwb3J0ZXIub3BlbigpO1xuICpcbiAqICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIGNhbGwgYHBvcFN0YWNrRW50cnlgIHdoZW4geW91J3JlIGRvbmUuXG4gKiAgIFN0YXR1c0Jhci5wb3BTdGFja0VudHJ5KHN0YWNrRW50cnkpO1xuICogfTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGlzIGEgbGVnYWN5IGltcGVyYXRpdmUgQVBJIHRoYXQgZW5hYmxlcyB5b3UgdG8gbWFudWFsbHkgdXBkYXRlIHRoZVxuICogc3RhdHVzIGJhciBzdHlsZXMuIEhvd2V2ZXIsIHRoZSBsZWdhY3kgQVBJIGRvZXMgbm90IHVwZGF0ZSB0aGUgaW50ZXJuYWxcbiAqIGBTdGF0dXNCYXJgIGRpc3BsYXkgc3RhY2ssIHdoaWNoIG1lYW5zIHRoYXQgYW55IGNoYW5nZXMgd2lsbCBiZSBvdmVycmlkZGVuXG4gKiB3aGVuZXZlciBhIGBTdGF0dXNCYXJgIGNvbXBvbmVudCBpcyBtb3VudGVkIG9yIHVubW91bnRlZC5cbiAqXG4gKiBJdCBpcyBzdHJvbmdseSBhZHZpc2VkIHRoYXQgeW91IHVzZSBgcHVzaFN0YWNrRW50cnlgLCBgcG9wU3RhY2tFbnRyeWAsIG9yXG4gKiBgcmVwbGFjZVN0YWNrRW50cnlgIGluc3RlYWQgb2YgdGhlIHN0YXRpYyBtZXRob2RzIGJlZ2lubmluZyB3aXRoIGBzZXRgLlxuICpcbiAqICMjIyBDb25zdGFudHNcbiAqXG4gKiBgY3VycmVudEhlaWdodGAgKEFuZHJvaWQgb25seSkgVGhlIGhlaWdodCBvZiB0aGUgc3RhdHVzIGJhci5cbiAqL1xuY2xhc3MgU3RhdHVzQmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBfcHJvcHNTdGFjazogQXJyYXk8YW55PiA9IFtdO1xuXG4gIHN0YXRpYyBfZGVmYXVsdFByb3BzOiBhbnkgPSBjcmVhdGVTdGFja0VudHJ5KHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnXG4gICAgICAgID8gTmF0aXZlU3RhdHVzQmFyTWFuYWdlckFuZHJvaWQuZ2V0Q29uc3RhbnRzKClcbiAgICAgICAgICAgIC5ERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPz8gJ2JsYWNrJ1xuICAgICAgICA6ICdibGFjaycsXG4gICAgYmFyU3R5bGU6ICdkZWZhdWx0JyxcbiAgICB0cmFuc2x1Y2VudDogZmFsc2UsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBuZXR3b3JrQWN0aXZpdHlJbmRpY2F0b3JWaXNpYmxlOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gVGltZXIgZm9yIHVwZGF0aW5nIHRoZSBuYXRpdmUgbW9kdWxlIHZhbHVlcyBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZS5cbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICBzdGF0aWMgX3VwZGF0ZUltbWVkaWF0ZSA9IG51bGw7XG5cbiAgLy8gVGhlIGN1cnJlbnQgbWVyZ2VkIHZhbHVlcyBmcm9tIHRoZSBwcm9wcyBzdGFjay5cbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICBzdGF0aWMgX2N1cnJlbnRWYWx1ZXMgPSBudWxsO1xuXG4gIC8vIFRPRE8oamFuaWMpOiBQcm92aWRlIGEgcmVhbCBBUEkgdG8gZGVhbCB3aXRoIHN0YXR1cyBiYXIgaGVpZ2h0LiBTZWUgdGhlXG4gIC8vIGRpc2N1c3Npb24gaW4gIzYxOTUuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIHN0YXR1cyBiYXIgb24gdGhlIGRldmljZS5cbiAgICpcbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIHN0YXRpYyBjdXJyZW50SGVpZ2h0OiA/bnVtYmVyID1cbiAgICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnXG4gICAgICA/IE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkLmdldENvbnN0YW50cygpLkhFSUdIVFxuICAgICAgOiBudWxsO1xuXG4gIC8vIFByb3ZpZGUgYW4gaW1wZXJhdGl2ZSBBUEkgYXMgc3RhdGljIGZ1bmN0aW9ucyBvZiB0aGUgY29tcG9uZW50LlxuICAvLyBTZWUgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcCBmb3IgbW9yZSBkZXRhaWwuXG5cbiAgLyoqXG4gICAqIFNob3cgb3IgaGlkZSB0aGUgc3RhdHVzIGJhclxuICAgKiBAcGFyYW0gaGlkZGVuIEhpZGUgdGhlIHN0YXR1cyBiYXIuXG4gICAqIEBwYXJhbSBhbmltYXRpb24gT3B0aW9uYWwgYW5pbWF0aW9uIHdoZW5cbiAgICogICAgY2hhbmdpbmcgdGhlIHN0YXR1cyBiYXIgaGlkZGVuIHByb3BlcnR5LlxuICAgKi9cbiAgc3RhdGljIHNldEhpZGRlbihoaWRkZW46IGJvb2xlYW4sIGFuaW1hdGlvbj86IFN0YXR1c0JhckFuaW1hdGlvbikge1xuICAgIGFuaW1hdGlvbiA9IGFuaW1hdGlvbiB8fCAnbm9uZSc7XG4gICAgU3RhdHVzQmFyLl9kZWZhdWx0UHJvcHMuaGlkZGVuLnZhbHVlID0gaGlkZGVuO1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2lvcycpIHtcbiAgICAgIE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJJT1Muc2V0SGlkZGVuKGhpZGRlbiwgYW5pbWF0aW9uKTtcbiAgICB9IGVsc2UgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkLnNldEhpZGRlbihoaWRkZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0YXR1cyBiYXIgc3R5bGVcbiAgICogQHBhcmFtIHN0eWxlIFN0YXR1cyBiYXIgc3R5bGUgdG8gc2V0XG4gICAqIEBwYXJhbSBhbmltYXRlZCBBbmltYXRlIHRoZSBzdHlsZSBjaGFuZ2UuXG4gICAqL1xuICBzdGF0aWMgc2V0QmFyU3R5bGUoc3R5bGU6IFN0YXR1c0JhclN0eWxlLCBhbmltYXRlZD86IGJvb2xlYW4pIHtcbiAgICBhbmltYXRlZCA9IGFuaW1hdGVkIHx8IGZhbHNlO1xuICAgIFN0YXR1c0Jhci5fZGVmYXVsdFByb3BzLmJhclN0eWxlLnZhbHVlID0gc3R5bGU7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgTmF0aXZlU3RhdHVzQmFyTWFuYWdlcklPUy5zZXRTdHlsZShzdHlsZSwgYW5pbWF0ZWQpO1xuICAgIH0gZWxzZSBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgTmF0aXZlU3RhdHVzQmFyTWFuYWdlckFuZHJvaWQuc2V0U3R5bGUoc3R5bGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBuZXR3b3JrIGFjdGl2aXR5IGluZGljYXRvclxuICAgKiBAcGFyYW0gdmlzaWJsZSBTaG93IHRoZSBpbmRpY2F0b3IuXG4gICAqL1xuICBzdGF0aWMgc2V0TmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9PSAnaW9zJykge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnYHNldE5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGVgIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGlPUycsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBTdGF0dXNCYXIuX2RlZmF1bHRQcm9wcy5uZXR3b3JrQWN0aXZpdHlJbmRpY2F0b3JWaXNpYmxlID0gdmlzaWJsZTtcbiAgICBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VySU9TLnNldE5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGUodmlzaWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgc3RhdHVzIGJhclxuICAgKiBAcGFyYW0gY29sb3IgQmFja2dyb3VuZCBjb2xvci5cbiAgICogQHBhcmFtIGFuaW1hdGVkIEFuaW1hdGUgdGhlIHN0eWxlIGNoYW5nZS5cbiAgICovXG4gIHN0YXRpYyBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZywgYW5pbWF0ZWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9PSAnYW5kcm9pZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybignYHNldEJhY2tncm91bmRDb2xvcmAgaXMgb25seSBhdmFpbGFibGUgb24gQW5kcm9pZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhbmltYXRlZCA9IGFuaW1hdGVkIHx8IGZhbHNlO1xuICAgIFN0YXR1c0Jhci5fZGVmYXVsdFByb3BzLmJhY2tncm91bmRDb2xvci52YWx1ZSA9IGNvbG9yO1xuXG4gICAgY29uc3QgcHJvY2Vzc2VkQ29sb3IgPSBwcm9jZXNzQ29sb3IoY29sb3IpO1xuICAgIGlmIChwcm9jZXNzZWRDb2xvciA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBcXGBTdGF0dXNCYXIuc2V0QmFja2dyb3VuZENvbG9yXFxgOiBDb2xvciAke2NvbG9yfSBwYXJzZWQgdG8gbnVsbCBvciB1bmRlZmluZWRgLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHByb2Nlc3NlZENvbG9yID09PSAnbnVtYmVyJyxcbiAgICAgICdVbmV4cGVjdGVkIGNvbG9yIGdpdmVuIGZvciBTdGF0dXNCYXIuc2V0QmFja2dyb3VuZENvbG9yJyxcbiAgICApO1xuXG4gICAgTmF0aXZlU3RhdHVzQmFyTWFuYWdlckFuZHJvaWQuc2V0Q29sb3IocHJvY2Vzc2VkQ29sb3IsIGFuaW1hdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSB0cmFuc2x1Y2VuY3kgb2YgdGhlIHN0YXR1cyBiYXJcbiAgICogQHBhcmFtIHRyYW5zbHVjZW50IFNldCBhcyB0cmFuc2x1Y2VudC5cbiAgICovXG4gIHN0YXRpYyBzZXRUcmFuc2x1Y2VudCh0cmFuc2x1Y2VudDogYm9vbGVhbikge1xuICAgIGlmIChQbGF0Zm9ybS5PUyAhPT0gJ2FuZHJvaWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2BzZXRUcmFuc2x1Y2VudGAgaXMgb25seSBhdmFpbGFibGUgb24gQW5kcm9pZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBTdGF0dXNCYXIuX2RlZmF1bHRQcm9wcy50cmFuc2x1Y2VudCA9IHRyYW5zbHVjZW50O1xuICAgIE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkLnNldFRyYW5zbHVjZW50KHRyYW5zbHVjZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXNoIGEgU3RhdHVzQmFyIGVudHJ5IG9udG8gdGhlIHN0YWNrLlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBwYXNzZWQgdG8gYHBvcFN0YWNrRW50cnlgIHdoZW4gY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgU3RhdHVzQmFyIHByb3BzIHRvIHVzZSBpbiB0aGUgc3RhY2sgZW50cnkuXG4gICAqL1xuICBzdGF0aWMgcHVzaFN0YWNrRW50cnkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgZW50cnkgPSBjcmVhdGVTdGFja0VudHJ5KHByb3BzKTtcbiAgICBTdGF0dXNCYXIuX3Byb3BzU3RhY2sucHVzaChlbnRyeSk7XG4gICAgU3RhdHVzQmFyLl91cGRhdGVQcm9wc1N0YWNrKCk7XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcCBhIFN0YXR1c0JhciBlbnRyeSBmcm9tIHRoZSBzdGFjay5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5IEVudHJ5IHJldHVybmVkIGZyb20gYHB1c2hTdGFja0VudHJ5YC5cbiAgICovXG4gIHN0YXRpYyBwb3BTdGFja0VudHJ5KGVudHJ5OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IFN0YXR1c0Jhci5fcHJvcHNTdGFjay5pbmRleE9mKGVudHJ5KTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBTdGF0dXNCYXIuX3Byb3BzU3RhY2suc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgU3RhdHVzQmFyLl91cGRhdGVQcm9wc1N0YWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhbiBleGlzdGluZyBTdGF0dXNCYXIgc3RhY2sgZW50cnkgd2l0aCBuZXcgcHJvcHMuXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeSBFbnRyeSByZXR1cm5lZCBmcm9tIGBwdXNoU3RhY2tFbnRyeWAgdG8gcmVwbGFjZS5cbiAgICogQHBhcmFtIHByb3BzIE9iamVjdCBjb250YWluaW5nIHRoZSBTdGF0dXNCYXIgcHJvcHMgdG8gdXNlIGluIHRoZSByZXBsYWNlbWVudCBzdGFjayBlbnRyeS5cbiAgICovXG4gIHN0YXRpYyByZXBsYWNlU3RhY2tFbnRyeShlbnRyeTogYW55LCBwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCBuZXdFbnRyeSA9IGNyZWF0ZVN0YWNrRW50cnkocHJvcHMpO1xuICAgIGNvbnN0IGluZGV4ID0gU3RhdHVzQmFyLl9wcm9wc1N0YWNrLmluZGV4T2YoZW50cnkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIFN0YXR1c0Jhci5fcHJvcHNTdGFja1tpbmRleF0gPSBuZXdFbnRyeTtcbiAgICB9XG4gICAgU3RhdHVzQmFyLl91cGRhdGVQcm9wc1N0YWNrKCk7XG4gICAgcmV0dXJuIG5ld0VudHJ5O1xuICB9XG5cbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICBfc3RhY2tFbnRyeSA9IG51bGw7XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gRXZlcnkgdGltZSBhIFN0YXR1c0JhciBjb21wb25lbnQgaXMgbW91bnRlZCwgd2UgcHVzaCBpdCdzIHByb3AgdG8gYSBzdGFja1xuICAgIC8vIGFuZCBhbHdheXMgdXBkYXRlIHRoZSBuYXRpdmUgc3RhdHVzIGJhciB3aXRoIHRoZSBwcm9wcyBmcm9tIHRoZSB0b3Agb2YgdGhlblxuICAgIC8vIHN0YWNrLiBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGUgU3RhdHVzQmFyIGNvbXBvbmVudHMgYW5kIHRoZSBvbmUgdGhhdCBpc1xuICAgIC8vIGFkZGVkIGxhc3Qgb3IgaXMgZGVlcGVyIGluIHRoZSB2aWV3IGhpZXJhcmNoeSB3aWxsIGhhdmUgcHJpb3JpdHkuXG4gICAgdGhpcy5fc3RhY2tFbnRyeSA9IFN0YXR1c0Jhci5wdXNoU3RhY2tFbnRyeSh0aGlzLnByb3BzKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIC8vIFdoZW4gYSBTdGF0dXNCYXIgaXMgdW5tb3VudGVkLCByZW1vdmUgaXRzZWxmIGZyb20gdGhlIHN0YWNrIGFuZCB1cGRhdGVcbiAgICAvLyB0aGUgbmF0aXZlIGJhciB3aXRoIHRoZSBuZXh0IHByb3BzLlxuICAgIFN0YXR1c0Jhci5wb3BTdGFja0VudHJ5KHRoaXMuX3N0YWNrRW50cnkpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMuX3N0YWNrRW50cnkgPSBTdGF0dXNCYXIucmVwbGFjZVN0YWNrRW50cnkoXG4gICAgICB0aGlzLl9zdGFja0VudHJ5LFxuICAgICAgdGhpcy5wcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIG5hdGl2ZSBzdGF0dXMgYmFyIHdpdGggdGhlIHByb3BzIGZyb20gdGhlIHN0YWNrLlxuICAgKi9cbiAgc3RhdGljIF91cGRhdGVQcm9wc1N0YWNrID0gKCkgPT4ge1xuICAgIC8vIFNlbmQgdGhlIHVwZGF0ZSB0byB0aGUgbmF0aXZlIG1vZHVsZSBvbmx5IG9uY2UgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUuXG4gICAgY2xlYXJJbW1lZGlhdGUoU3RhdHVzQmFyLl91cGRhdGVJbW1lZGlhdGUpO1xuICAgIFN0YXR1c0Jhci5fdXBkYXRlSW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IG9sZFByb3BzID0gU3RhdHVzQmFyLl9jdXJyZW50VmFsdWVzO1xuICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzU3RhY2soXG4gICAgICAgIFN0YXR1c0Jhci5fcHJvcHNTdGFjayxcbiAgICAgICAgU3RhdHVzQmFyLl9kZWZhdWx0UHJvcHMsXG4gICAgICApO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHByb3BzIHRoYXQgaGF2ZSBjaGFuZ2VkIHVzaW5nIHRoZSBtZXJnZWQgdmFsdWVzIGZyb20gdGhlIHByb3BzIHN0YWNrLlxuICAgICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIW9sZFByb3BzIHx8XG4gICAgICAgICAgb2xkUHJvcHMuYmFyU3R5bGUudmFsdWUgIT09IG1lcmdlZFByb3BzLmJhclN0eWxlLnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJJT1Muc2V0U3R5bGUoXG4gICAgICAgICAgICBtZXJnZWRQcm9wcy5iYXJTdHlsZS52YWx1ZSxcbiAgICAgICAgICAgIG1lcmdlZFByb3BzLmJhclN0eWxlLmFuaW1hdGVkIHx8IGZhbHNlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvbGRQcm9wcyB8fCBvbGRQcm9wcy5oaWRkZW4udmFsdWUgIT09IG1lcmdlZFByb3BzLmhpZGRlbi52YWx1ZSkge1xuICAgICAgICAgIE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJJT1Muc2V0SGlkZGVuKFxuICAgICAgICAgICAgbWVyZ2VkUHJvcHMuaGlkZGVuLnZhbHVlLFxuICAgICAgICAgICAgbWVyZ2VkUHJvcHMuaGlkZGVuLmFuaW1hdGVkXG4gICAgICAgICAgICAgID8gbWVyZ2VkUHJvcHMuaGlkZGVuLnRyYW5zaXRpb25cbiAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhb2xkUHJvcHMgfHxcbiAgICAgICAgICBvbGRQcm9wcy5uZXR3b3JrQWN0aXZpdHlJbmRpY2F0b3JWaXNpYmxlICE9PVxuICAgICAgICAgICAgbWVyZ2VkUHJvcHMubmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZVxuICAgICAgICApIHtcbiAgICAgICAgICBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VySU9TLnNldE5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGUoXG4gICAgICAgICAgICBtZXJnZWRQcm9wcy5uZXR3b3JrQWN0aXZpdHlJbmRpY2F0b3JWaXNpYmxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgICAvL3RvZG8oVDYwNjg0Nzg3KTogQWRkIGJhY2sgb3B0aW1pemF0aW9uIHRvIG9ubHkgdXBkYXRlIGJhciBzdHlsZSBhbmRcbiAgICAgICAgLy9iYWNrZ3JvdW5kIGNvbG9yIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCB2YWx1ZS5cbiAgICAgICAgTmF0aXZlU3RhdHVzQmFyTWFuYWdlckFuZHJvaWQuc2V0U3R5bGUobWVyZ2VkUHJvcHMuYmFyU3R5bGUudmFsdWUpO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRDb2xvciA9IHByb2Nlc3NDb2xvcihtZXJnZWRQcm9wcy5iYWNrZ3JvdW5kQ29sb3IudmFsdWUpO1xuICAgICAgICBpZiAocHJvY2Vzc2VkQ29sb3IgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBcXGBTdGF0dXNCYXIuX3VwZGF0ZVByb3BzU3RhY2tcXGA6IENvbG9yICR7bWVyZ2VkUHJvcHMuYmFja2dyb3VuZENvbG9yLnZhbHVlfSBwYXJzZWQgdG8gbnVsbCBvciB1bmRlZmluZWRgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgdHlwZW9mIHByb2Nlc3NlZENvbG9yID09PSAnbnVtYmVyJyxcbiAgICAgICAgICAgICdVbmV4cGVjdGVkIGNvbG9yIGdpdmVuIGluIFN0YXR1c0Jhci5fdXBkYXRlUHJvcHNTdGFjaycsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyQW5kcm9pZC5zZXRDb2xvcihcbiAgICAgICAgICAgIHByb2Nlc3NlZENvbG9yLFxuICAgICAgICAgICAgbWVyZ2VkUHJvcHMuYmFja2dyb3VuZENvbG9yLmFuaW1hdGVkLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvbGRQcm9wcyB8fCBvbGRQcm9wcy5oaWRkZW4udmFsdWUgIT09IG1lcmdlZFByb3BzLmhpZGRlbi52YWx1ZSkge1xuICAgICAgICAgIE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkLnNldEhpZGRlbihtZXJnZWRQcm9wcy5oaWRkZW4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFjdGl2aXRpZXMgYXJlIG5vdCB0cmFuc2x1Y2VudCBieSBkZWZhdWx0LCBzbyBhbHdheXMgc2V0IGlmIHRydWUuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhb2xkUHJvcHMgfHxcbiAgICAgICAgICBvbGRQcm9wcy50cmFuc2x1Y2VudCAhPT0gbWVyZ2VkUHJvcHMudHJhbnNsdWNlbnQgfHxcbiAgICAgICAgICBtZXJnZWRQcm9wcy50cmFuc2x1Y2VudFxuICAgICAgICApIHtcbiAgICAgICAgICBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyQW5kcm9pZC5zZXRUcmFuc2x1Y2VudChtZXJnZWRQcm9wcy50cmFuc2x1Y2VudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBwcm9wIHZhbHVlcy5cbiAgICAgIFN0YXR1c0Jhci5fY3VycmVudFZhbHVlcyA9IG1lcmdlZFByb3BzO1xuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXR1c0JhcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkJztcbmltcG9ydCBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyQW5kcm9pZCBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJBbmRyb2lkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8XG4gICAgK0hFSUdIVDogbnVtYmVyLFxuICAgICtERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1I6IG51bWJlcixcbiAgfH07XG4gICtzZXRDb2xvcjogKGNvbG9yOiBudW1iZXIsIGFuaW1hdGVkOiBib29sZWFuKSA9PiB2b2lkO1xuICArc2V0VHJhbnNsdWNlbnQ6ICh0cmFuc2x1Y2VudDogYm9vbGVhbikgPT4gdm9pZDtcblxuICAvKipcbiAgICogIC0gc3RhdHVzQmFyU3R5bGVzIGNhbiBiZTpcbiAgICogICAgLSAnZGVmYXVsdCdcbiAgICogICAgLSAnZGFyay1jb250ZW50J1xuICAgKi9cbiAgK3NldFN0eWxlOiAoc3RhdHVzQmFyU3R5bGU/OiA/c3RyaW5nKSA9PiB2b2lkO1xuICArc2V0SGlkZGVuOiAoaGlkZGVuOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5jb25zdCBOYXRpdmVNb2R1bGUgPSBUdXJib01vZHVsZVJlZ2lzdHJ5LmdldEVuZm9yY2luZzxTcGVjPignU3RhdHVzQmFyTWFuYWdlcicpO1xubGV0IGNvbnN0YW50cyA9IG51bGw7XG5cbmNvbnN0IE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXIgPSB7XG4gIGdldENvbnN0YW50cygpOiB7fFxuICAgICtIRUlHSFQ6IG51bWJlcixcbiAgICArREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SPzogbnVtYmVyLFxuICB8fSB7XG4gICAgaWYgKGNvbnN0YW50cyA9PSBudWxsKSB7XG4gICAgICBjb25zdGFudHMgPSBOYXRpdmVNb2R1bGUuZ2V0Q29uc3RhbnRzKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25zdGFudHM7XG4gIH0sXG5cbiAgc2V0Q29sb3IoY29sb3I6IG51bWJlciwgYW5pbWF0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBOYXRpdmVNb2R1bGUuc2V0Q29sb3IoY29sb3IsIGFuaW1hdGVkKTtcbiAgfSxcblxuICBzZXRUcmFuc2x1Y2VudCh0cmFuc2x1Y2VudDogYm9vbGVhbik6IHZvaWQge1xuICAgIE5hdGl2ZU1vZHVsZS5zZXRUcmFuc2x1Y2VudCh0cmFuc2x1Y2VudCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqICAtIHN0YXR1c0JhclN0eWxlcyBjYW4gYmU6XG4gICAqICAgIC0gJ2RlZmF1bHQnXG4gICAqICAgIC0gJ2RhcmstY29udGVudCdcbiAgICovXG4gIHNldFN0eWxlKHN0YXR1c0JhclN0eWxlPzogP3N0cmluZyk6IHZvaWQge1xuICAgIE5hdGl2ZU1vZHVsZS5zZXRTdHlsZShzdGF0dXNCYXJTdHlsZSk7XG4gIH0sXG5cbiAgc2V0SGlkZGVuKGhpZGRlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIE5hdGl2ZU1vZHVsZS5zZXRIaWRkZW4oaGlkZGVuKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTdGF0dXNCYXJNYW5hZ2VySU9TJztcbmltcG9ydCBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VySU9TIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlU3RhdHVzQmFyTWFuYWdlcklPUyc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VySU9TO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8XG4gICAgK0hFSUdIVDogbnVtYmVyLFxuICAgICtERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1I/OiBudW1iZXIsXG4gIHx9O1xuXG4gIC8vIFRPRE8oVDQ3NzU0MjcyKSBDYW4gd2UgcmVtb3ZlIHRoaXMgbWV0aG9kP1xuICArZ2V0SGVpZ2h0OiAoY2FsbGJhY2s6IChyZXN1bHQ6IHt8aGVpZ2h0OiBudW1iZXJ8fSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgK3NldE5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGU6ICh2aXNpYmxlOiBib29sZWFuKSA9PiB2b2lkO1xuICArYWRkTGlzdGVuZXI6IChldmVudFR5cGU6IHN0cmluZykgPT4gdm9pZDtcbiAgK3JlbW92ZUxpc3RlbmVyczogKGNvdW50OiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqICAtIHN0YXR1c0JhclN0eWxlcyBjYW4gYmU6XG4gICAqICAgIC0gJ2RlZmF1bHQnXG4gICAqICAgIC0gJ2RhcmstY29udGVudCdcbiAgICogICAgLSAnbGlnaHQtY29udGVudCdcbiAgICovXG4gICtzZXRTdHlsZTogKHN0YXR1c0JhclN0eWxlPzogP3N0cmluZywgYW5pbWF0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiAgLSB3aXRoQW5pbWF0aW9uIGNhbiBiZTogJ25vbmUnIHwgJ2ZhZGUnIHwgJ3NsaWRlJ1xuICAgKi9cbiAgK3NldEhpZGRlbjogKGhpZGRlbjogYm9vbGVhbiwgd2l0aEFuaW1hdGlvbjogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5jb25zdCBOYXRpdmVNb2R1bGUgPSBUdXJib01vZHVsZVJlZ2lzdHJ5LmdldEVuZm9yY2luZzxTcGVjPignU3RhdHVzQmFyTWFuYWdlcicpO1xubGV0IGNvbnN0YW50cyA9IG51bGw7XG5cbmNvbnN0IE5hdGl2ZVN0YXR1c0Jhck1hbmFnZXIgPSB7XG4gIGdldENvbnN0YW50cygpOiB7fFxuICAgICtIRUlHSFQ6IG51bWJlcixcbiAgICArREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SPzogbnVtYmVyLFxuICB8fSB7XG4gICAgaWYgKGNvbnN0YW50cyA9PSBudWxsKSB7XG4gICAgICBjb25zdGFudHMgPSBOYXRpdmVNb2R1bGUuZ2V0Q29uc3RhbnRzKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25zdGFudHM7XG4gIH0sXG5cbiAgLy8gVE9ETyhUNDc3NTQyNzIpIENhbiB3ZSByZW1vdmUgdGhpcyBtZXRob2Q/XG4gIGdldEhlaWdodChjYWxsYmFjazogKHJlc3VsdDoge3xoZWlnaHQ6IG51bWJlcnx9KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgTmF0aXZlTW9kdWxlLmdldEhlaWdodChjYWxsYmFjayk7XG4gIH0sXG5cbiAgc2V0TmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgTmF0aXZlTW9kdWxlLnNldE5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGUodmlzaWJsZSk7XG4gIH0sXG5cbiAgYWRkTGlzdGVuZXIoZXZlbnRUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBOYXRpdmVNb2R1bGUuYWRkTGlzdGVuZXIoZXZlbnRUeXBlKTtcbiAgfSxcblxuICByZW1vdmVMaXN0ZW5lcnMoY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIE5hdGl2ZU1vZHVsZS5yZW1vdmVMaXN0ZW5lcnMoY291bnQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiAgLSBzdGF0dXNCYXJTdHlsZXMgY2FuIGJlOlxuICAgKiAgICAtICdkZWZhdWx0J1xuICAgKiAgICAtICdkYXJrLWNvbnRlbnQnXG4gICAqICAgIC0gJ2xpZ2h0LWNvbnRlbnQnXG4gICAqL1xuICBzZXRTdHlsZShzdGF0dXNCYXJTdHlsZT86ID9zdHJpbmcsIGFuaW1hdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgTmF0aXZlTW9kdWxlLnNldFN0eWxlKHN0YXR1c0JhclN0eWxlLCBhbmltYXRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqICAtIHdpdGhBbmltYXRpb24gY2FuIGJlOiAnbm9uZScgfCAnZmFkZScgfCAnc2xpZGUnXG4gICAqL1xuICBzZXRIaWRkZW4oaGlkZGVuOiBib29sZWFuLCB3aXRoQW5pbWF0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBOYXRpdmVNb2R1bGUuc2V0SGlkZGVuKGhpZGRlbiwgd2l0aEFuaW1hdGlvbik7XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyO1xuIiwiIiwiIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtMb2dMZXZlbH0gZnJvbSAnLi4vRGF0YS9Mb2dCb3hMb2cnO1xuaW1wb3J0IHR5cGUge01lc3NhZ2V9IGZyb20gJy4uL0RhdGEvcGFyc2VMb2dCb3hMb2cnO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vLi4vVGV4dC9UZXh0JztcbmltcG9ydCBMb2dCb3hNZXNzYWdlIGZyb20gJy4vTG9nQm94TWVzc2FnZSc7XG5pbXBvcnQgKiBhcyBMb2dCb3hTdHlsZSBmcm9tICcuL0xvZ0JveFN0eWxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBjb2xsYXBzZWQ6IGJvb2xlYW4sXG4gIG1lc3NhZ2U6IE1lc3NhZ2UsXG4gIGxldmVsOiBMb2dMZXZlbCxcbiAgdGl0bGU6IHN0cmluZyxcbiAgb25QcmVzczogKCkgPT4gdm9pZCxcbnx9PjtcblxuY29uc3QgU0hPV19NT1JFX01FU1NBR0VfTEVOR1RIID0gMzAwO1xuXG5mdW5jdGlvbiBMb2dCb3hJbnNwZWN0b3JNZXNzYWdlSGVhZGVyKHByb3BzOiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBmdW5jdGlvbiByZW5kZXJTaG93TW9yZSgpIHtcbiAgICBpZiAoXG4gICAgICBwcm9wcy5tZXNzYWdlLmNvbnRlbnQubGVuZ3RoIDwgU0hPV19NT1JFX01FU1NBR0VfTEVOR1RIIHx8XG4gICAgICAhcHJvcHMuY29sbGFwc2VkXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxUZXh0IHN0eWxlPXttZXNzYWdlU3R5bGVzLmNvbGxhcHNlfSBvblByZXNzPXsoKSA9PiBwcm9wcy5vblByZXNzKCl9PlxuICAgICAgICAuLi4gU2VlIE1vcmVcbiAgICAgIDwvVGV4dD5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17bWVzc2FnZVN0eWxlcy5ib2R5fT5cbiAgICAgIDxWaWV3IHN0eWxlPXttZXNzYWdlU3R5bGVzLmhlYWRpbmd9PlxuICAgICAgICA8VGV4dCBzdHlsZT17W21lc3NhZ2VTdHlsZXMuaGVhZGluZ1RleHQsIG1lc3NhZ2VTdHlsZXNbcHJvcHMubGV2ZWxdXX0+XG4gICAgICAgICAge3Byb3BzLnRpdGxlfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17bWVzc2FnZVN0eWxlcy5ib2R5VGV4dH0+XG4gICAgICAgIDxMb2dCb3hNZXNzYWdlXG4gICAgICAgICAgbWF4TGVuZ3RoPXtwcm9wcy5jb2xsYXBzZWQgPyBTSE9XX01PUkVfTUVTU0FHRV9MRU5HVEggOiBJbmZpbml0eX1cbiAgICAgICAgICBtZXNzYWdlPXtwcm9wcy5tZXNzYWdlfVxuICAgICAgICAgIHN0eWxlPXttZXNzYWdlU3R5bGVzLm1lc3NhZ2VUZXh0fVxuICAgICAgICAvPlxuICAgICAgICB7cmVuZGVyU2hvd01vcmUoKX1cbiAgICAgIDwvVGV4dD5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IG1lc3NhZ2VTdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJvZHk6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IExvZ0JveFN0eWxlLmdldEJhY2tncm91bmRDb2xvcigxKSxcbiAgICBzaGFkb3dDb2xvcjogJyMwMDAnLFxuICAgIHNoYWRvd09mZnNldDoge3dpZHRoOiAwLCBoZWlnaHQ6IDJ9LFxuICAgIHNoYWRvd1JhZGl1czogMixcbiAgICBzaGFkb3dPcGFjaXR5OiAwLjUsXG4gICAgZmxleDogMCxcbiAgfSxcbiAgYm9keVRleHQ6IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDEpLFxuICAgIGZvbnRTaXplOiAxNCxcbiAgICBpbmNsdWRlRm9udFBhZGRpbmc6IGZhbHNlLFxuICAgIGxpbmVIZWlnaHQ6IDIwLFxuICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMixcbiAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgfSxcbiAgaGVhZGluZzoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMixcbiAgICBtYXJnaW5Ub3A6IDEwLFxuICAgIG1hcmdpbkJvdHRvbTogNSxcbiAgfSxcbiAgaGVhZGluZ1RleHQ6IHtcbiAgICBmbGV4OiAxLFxuICAgIGZvbnRTaXplOiAyMCxcbiAgICBmb250V2VpZ2h0OiAnNjAwJyxcbiAgICBpbmNsdWRlRm9udFBhZGRpbmc6IGZhbHNlLFxuICAgIGxpbmVIZWlnaHQ6IDI4LFxuICB9LFxuICB3YXJuOiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFdhcm5pbmdDb2xvcigxKSxcbiAgfSxcbiAgZXJyb3I6IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0RXJyb3JDb2xvcigxKSxcbiAgfSxcbiAgZmF0YWw6IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0RmF0YWxDb2xvcigxKSxcbiAgfSxcbiAgc3ludGF4OiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldEZhdGFsQ29sb3IoMSksXG4gIH0sXG4gIG1lc3NhZ2VUZXh0OiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigwLjYpLFxuICB9LFxuICBjb2xsYXBzZToge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMC43KSxcbiAgICBmb250U2l6ZTogMTQsXG4gICAgZm9udFdlaWdodDogJzMwMCcsXG4gICAgbGluZUhlaWdodDogMTIsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIHBhZGRpbmdWZXJ0aWNhbDogNSxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgYm9yZGVyUmFkaXVzOiAzLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IExvZ0JveEluc3BlY3Rvck1lc3NhZ2VIZWFkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUgTG9nQm94TG9nIGZyb20gJy4uL0RhdGEvTG9nQm94TG9nJztcblxuaW1wb3J0IFZpZXcgZnJvbSAnLi4vLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IG9wZW5GaWxlSW5FZGl0b3IgZnJvbSAnLi4vLi4vQ29yZS9EZXZ0b29scy9vcGVuRmlsZUluRWRpdG9yJztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgTG9nQm94QnV0dG9uIGZyb20gJy4vTG9nQm94QnV0dG9uJztcbmltcG9ydCBMb2dCb3hJbnNwZWN0b3JTZWN0aW9uIGZyb20gJy4vTG9nQm94SW5zcGVjdG9yU2VjdGlvbic7XG5pbXBvcnQgKiBhcyBMb2dCb3hTdHlsZSBmcm9tICcuL0xvZ0JveFN0eWxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBsb2c6IExvZ0JveExvZyxcbnx9PjtcblxuY29uc3QgQkVGT1JFX1NMQVNIX1JFID0gL14oLiopW1xcXFwvXS87XG5cbi8vIFRha2VuIGZyb20gUmVhY3QgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMjA2ZDYxZjcyMjE0ZThhZTViOTM1ZjBiZjg2Mjg0OTFjYjdmMDc5Ny9wYWNrYWdlcy9yZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvZGVzY3JpYmVDb21wb25lbnRGcmFtZS5qcyNMMjctTDQxXG5mdW5jdGlvbiBnZXRQcmV0dHlGaWxlTmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgbGV0IGZpbGVOYW1lID0gcGF0aC5yZXBsYWNlKEJFRk9SRV9TTEFTSF9SRSwgJycpO1xuXG4gIC8vIEluIERFViwgaW5jbHVkZSBjb2RlIGZvciBhIGNvbW1vbiBzcGVjaWFsIGNhc2U6XG4gIC8vIHByZWZlciBcImZvbGRlci9pbmRleC5qc1wiIGluc3RlYWQgb2YganVzdCBcImluZGV4LmpzXCIuXG4gIGlmICgvXmluZGV4XFwuLy50ZXN0KGZpbGVOYW1lKSkge1xuICAgIGNvbnN0IG1hdGNoID0gcGF0aC5tYXRjaChCRUZPUkVfU0xBU0hfUkUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgcGF0aEJlZm9yZVNsYXNoID0gbWF0Y2hbMV07XG4gICAgICBpZiAocGF0aEJlZm9yZVNsYXNoKSB7XG4gICAgICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoQmVmb3JlU2xhc2gucmVwbGFjZShCRUZPUkVfU0xBU0hfUkUsICcnKTtcbiAgICAgICAgLy8gTm90ZSB0aGUgYmVsb3cgc3RyaW5nIGNvbnRhaW5zIGEgemVybyB3aWR0aCBzcGFjZSBhZnRlciB0aGUgXCIvXCIgY2hhcmFjdGVyLlxuICAgICAgICAvLyBUaGlzIGlzIHRvIHByZXZlbnQgYnJvd3NlcnMgbGlrZSBDaHJvbWUgZnJvbSBmb3JtYXR0aW5nIHRoZSBmaWxlIG5hbWUgYXMgYSBsaW5rLlxuICAgICAgICAvLyAoU2luY2UgdGhpcyBpcyBhIHNvdXJjZSBsaW5rLCBpdCB3b3VsZCBub3Qgd29yayB0byBvcGVuIHRoZSBzb3VyY2UgZmlsZSBhbnl3YXkuKVxuICAgICAgICBmaWxlTmFtZSA9IGZvbGRlck5hbWUgKyAnL+KAiycgKyBmaWxlTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsZU5hbWU7XG59XG5mdW5jdGlvbiBMb2dCb3hJbnNwZWN0b3JSZWFjdEZyYW1lcyhwcm9wczogUHJvcHMpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW2NvbGxhcHNlZCwgc2V0Q29sbGFwc2VkXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBpZiAocHJvcHMubG9nLmNvbXBvbmVudFN0YWNrID09IG51bGwgfHwgcHJvcHMubG9nLmNvbXBvbmVudFN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN0YWNrTGlzdCgpIHtcbiAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gcHJvcHMubG9nLmNvbXBvbmVudFN0YWNrLnNsaWNlKDAsIDMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvcHMubG9nLmNvbXBvbmVudFN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbGxhcHNlTWVzc2FnZSgpIHtcbiAgICBpZiAocHJvcHMubG9nLmNvbXBvbmVudFN0YWNrLmxlbmd0aCA8PSAzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBwcm9wcy5sb2cuY29tcG9uZW50U3RhY2subGVuZ3RoIC0gMztcbiAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gYFNlZSAke2NvdW50fSBtb3JlIGNvbXBvbmVudHNgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYENvbGxhcHNlICR7Y291bnR9IGNvbXBvbmVudHNgO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPExvZ0JveEluc3BlY3RvclNlY3Rpb24gaGVhZGluZz1cIkNvbXBvbmVudCBTdGFja1wiPlxuICAgICAge2dldFN0YWNrTGlzdCgpLm1hcCgoZnJhbWUsIGluZGV4KSA9PiAoXG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBkb24ndCBoYXZlIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHN0YWNrIHRyYWNlcy5cbiAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgIHN0eWxlPXtjb21wb25lbnRTdHlsZXMuZnJhbWVDb250YWluZXJ9PlxuICAgICAgICAgIDxMb2dCb3hCdXR0b25cbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj17e1xuICAgICAgICAgICAgICBkZWZhdWx0OiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICBwcmVzc2VkOiBMb2dCb3hTdHlsZS5nZXRCYWNrZ3JvdW5kQ29sb3IoMSksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17XG4gICAgICAgICAgICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIERldlRvb2xzIGRvIG5vdCBwcm92aWRlIGZ1bGwgcGF0aC5cbiAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MsIHJlbW92ZSBjaGVjayBvbmNlIHRoZVxuICAgICAgICAgICAgICAvLyBEZXZUb29scyByZXR1cm4gdGhlIGZ1bGwgZmlsZSBwYXRoLlxuICAgICAgICAgICAgICBmcmFtZS5maWxlTmFtZS5zdGFydHNXaXRoKCcvJylcbiAgICAgICAgICAgICAgICA/ICgpID0+XG4gICAgICAgICAgICAgICAgICAgIG9wZW5GaWxlSW5FZGl0b3IoZnJhbWUuZmlsZU5hbWUsIGZyYW1lLmxvY2F0aW9uPy5yb3cgPz8gMSlcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlPXtjb21wb25lbnRTdHlsZXMuZnJhbWV9PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e2NvbXBvbmVudFN0eWxlcy5jb21wb25lbnR9PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17Y29tcG9uZW50U3R5bGVzLmZyYW1lTmFtZX0+XG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e2NvbXBvbmVudFN0eWxlcy5icmFja2V0fT57JzwnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICB7ZnJhbWUuY29udGVudH1cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17Y29tcG9uZW50U3R5bGVzLmJyYWNrZXR9PnsnIC8+J308L1RleHQ+XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtjb21wb25lbnRTdHlsZXMuZnJhbWVMb2NhdGlvbn0+XG4gICAgICAgICAgICAgIHtnZXRQcmV0dHlGaWxlTmFtZShmcmFtZS5maWxlTmFtZSl9XG4gICAgICAgICAgICAgIHtmcmFtZS5sb2NhdGlvbiA/IGA6JHtmcmFtZS5sb2NhdGlvbi5yb3d9YCA6ICcnfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvTG9nQm94QnV0dG9uPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApKX1cbiAgICAgIDxWaWV3IHN0eWxlPXtjb21wb25lbnRTdHlsZXMuY29sbGFwc2VDb250YWluZXJ9PlxuICAgICAgICA8TG9nQm94QnV0dG9uXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yPXt7XG4gICAgICAgICAgICBkZWZhdWx0OiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgcHJlc3NlZDogTG9nQm94U3R5bGUuZ2V0QmFja2dyb3VuZENvbG9yKDEpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0Q29sbGFwc2VkKCFjb2xsYXBzZWQpfVxuICAgICAgICAgIHN0eWxlPXtjb21wb25lbnRTdHlsZXMuY29sbGFwc2VCdXR0b259PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtjb21wb25lbnRTdHlsZXMuY29sbGFwc2V9PntnZXRDb2xsYXBzZU1lc3NhZ2UoKX08L1RleHQ+XG4gICAgICAgIDwvTG9nQm94QnV0dG9uPlxuICAgICAgPC9WaWV3PlxuICAgIDwvTG9nQm94SW5zcGVjdG9yU2VjdGlvbj5cbiAgKTtcbn1cblxuY29uc3QgY29tcG9uZW50U3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb2xsYXBzZUNvbnRhaW5lcjoge1xuICAgIG1hcmdpbkxlZnQ6IDE1LFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICB9LFxuICBjb2xsYXBzZUJ1dHRvbjoge1xuICAgIGJvcmRlclJhZGl1czogNSxcbiAgfSxcbiAgY29sbGFwc2U6IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDAuNyksXG4gICAgZm9udFNpemU6IDEyLFxuICAgIGZvbnRXZWlnaHQ6ICczMDAnLFxuICAgIGxpbmVIZWlnaHQ6IDIwLFxuICAgIG1hcmdpblRvcDogMCxcbiAgICBwYWRkaW5nVmVydGljYWw6IDUsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDEwLFxuICB9LFxuICBmcmFtZUNvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxNSxcbiAgfSxcbiAgZnJhbWU6IHtcbiAgICBmbGV4OiAxLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogNCxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgYm9yZGVyUmFkaXVzOiA1LFxuICB9LFxuICBjb21wb25lbnQ6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBwYWRkaW5nUmlnaHQ6IDEwLFxuICB9LFxuICBmcmFtZU5hbWU6IHtcbiAgICBmb250RmFtaWx5OiBQbGF0Zm9ybS5zZWxlY3Qoe2FuZHJvaWQ6ICdtb25vc3BhY2UnLCBpb3M6ICdNZW5sbyd9KSxcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDEpLFxuICAgIGZvbnRTaXplOiAxNCxcbiAgICBpbmNsdWRlRm9udFBhZGRpbmc6IGZhbHNlLFxuICAgIGxpbmVIZWlnaHQ6IDE4LFxuICB9LFxuICBicmFja2V0OiB7XG4gICAgZm9udEZhbWlseTogUGxhdGZvcm0uc2VsZWN0KHthbmRyb2lkOiAnbW9ub3NwYWNlJywgaW9zOiAnTWVubG8nfSksXG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigwLjQpLFxuICAgIGZvbnRTaXplOiAxNCxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBpbmNsdWRlRm9udFBhZGRpbmc6IGZhbHNlLFxuICAgIGxpbmVIZWlnaHQ6IDE4LFxuICB9LFxuICBmcmFtZUxvY2F0aW9uOiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigwLjcpLFxuICAgIGZvbnRTaXplOiAxMixcbiAgICBmb250V2VpZ2h0OiAnMzAwJyxcbiAgICBpbmNsdWRlRm9udFBhZGRpbmc6IGZhbHNlLFxuICAgIGxpbmVIZWlnaHQ6IDE2LFxuICAgIHBhZGRpbmdMZWZ0OiAxMCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMb2dCb3hJbnNwZWN0b3JSZWFjdEZyYW1lcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7U3RhY2tGcmFtZX0gZnJvbSAnLi4vLi4vQ29yZS9OYXRpdmVFeGNlcHRpb25zTWFuYWdlcic7XG5pbXBvcnQgdHlwZSBMb2dCb3hMb2cgZnJvbSAnLi4vRGF0YS9Mb2dCb3hMb2cnO1xuaW1wb3J0IHR5cGUge1N0YWNrfSBmcm9tICcuLi9EYXRhL0xvZ0JveFN5bWJvbGljYXRpb24nO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgb3BlbkZpbGVJbkVkaXRvciBmcm9tICcuLi8uLi9Db3JlL0RldnRvb2xzL29wZW5GaWxlSW5FZGl0b3InO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBUZXh0IGZyb20gJy4uLy4uL1RleHQvVGV4dCc7XG5pbXBvcnQgTG9nQm94QnV0dG9uIGZyb20gJy4vTG9nQm94QnV0dG9uJztcbmltcG9ydCBMb2dCb3hJbnNwZWN0b3JTZWN0aW9uIGZyb20gJy4vTG9nQm94SW5zcGVjdG9yU2VjdGlvbic7XG5pbXBvcnQgTG9nQm94SW5zcGVjdG9yU291cmNlTWFwU3RhdHVzIGZyb20gJy4vTG9nQm94SW5zcGVjdG9yU291cmNlTWFwU3RhdHVzJztcbmltcG9ydCBMb2dCb3hJbnNwZWN0b3JTdGFja0ZyYW1lIGZyb20gJy4vTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZSc7XG5pbXBvcnQgKiBhcyBMb2dCb3hTdHlsZSBmcm9tICcuL0xvZ0JveFN0eWxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBsb2c6IExvZ0JveExvZyxcbiAgb25SZXRyeTogKCkgPT4gdm9pZCxcbnx9PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbGxhcHNlTWVzc2FnZShcbiAgc3RhY2tGcmFtZXM6IFN0YWNrLFxuICBjb2xsYXBzZWQ6IGJvb2xlYW4sXG4pOiBzdHJpbmcge1xuICBpZiAoc3RhY2tGcmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdObyBmcmFtZXMgdG8gc2hvdyc7XG4gIH1cblxuICBjb25zdCBjb2xsYXBzZWRDb3VudCA9IHN0YWNrRnJhbWVzLnJlZHVjZSgoY291bnQsIHtjb2xsYXBzZX0pID0+IHtcbiAgICBpZiAoY29sbGFwc2UgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBjb3VudCArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9LCAwKTtcblxuICBpZiAoY29sbGFwc2VkQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gJ1Nob3dpbmcgYWxsIGZyYW1lcyc7XG4gIH1cblxuICBjb25zdCBmcmFtZVBsdXJhbCA9IGBmcmFtZSR7Y29sbGFwc2VkQ291bnQgPiAxID8gJ3MnIDogJyd9YDtcbiAgaWYgKGNvbGxhcHNlZENvdW50ID09PSBzdGFja0ZyYW1lcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY29sbGFwc2VkXG4gICAgICA/IGBTZWUke1xuICAgICAgICAgIGNvbGxhcHNlZENvdW50ID4gMSA/ICcgYWxsICcgOiAnICdcbiAgICAgICAgfSR7Y29sbGFwc2VkQ291bnR9IGNvbGxhcHNlZCAke2ZyYW1lUGx1cmFsfWBcbiAgICAgIDogYENvbGxhcHNlJHtcbiAgICAgICAgICBjb2xsYXBzZWRDb3VudCA+IDEgPyAnIGFsbCAnIDogJyAnXG4gICAgICAgIH0ke2NvbGxhcHNlZENvdW50fSAke2ZyYW1lUGx1cmFsfWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbGxhcHNlZFxuICAgICAgPyBgU2VlICR7Y29sbGFwc2VkQ291bnR9IG1vcmUgJHtmcmFtZVBsdXJhbH1gXG4gICAgICA6IGBDb2xsYXBzZSAke2NvbGxhcHNlZENvdW50fSAke2ZyYW1lUGx1cmFsfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZXMocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtjb2xsYXBzZWQsIHNldENvbGxhcHNlZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gT25seSBjb2xsYXBzZSBmcmFtZXMgaW5pdGlhbGx5IGlmIHNvbWUgZnJhbWVzIGFyZSBub3QgY29sbGFwc2VkLlxuICAgIHJldHVybiBwcm9wcy5sb2cuZ2V0QXZhaWxhYmxlU3RhY2soKS5zb21lKCh7Y29sbGFwc2V9KSA9PiAhY29sbGFwc2UpO1xuICB9KTtcblxuICBmdW5jdGlvbiBnZXRTdGFja0xpc3QoKSB7XG4gICAgaWYgKGNvbGxhcHNlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHByb3BzLmxvZy5nZXRBdmFpbGFibGVTdGFjaygpLmZpbHRlcigoe2NvbGxhcHNlfSkgPT4gIWNvbGxhcHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb3BzLmxvZy5nZXRBdmFpbGFibGVTdGFjaygpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9wcy5sb2cuZ2V0QXZhaWxhYmxlU3RhY2soKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPExvZ0JveEluc3BlY3RvclNlY3Rpb25cbiAgICAgIGhlYWRpbmc9XCJDYWxsIFN0YWNrXCJcbiAgICAgIGFjdGlvbj17XG4gICAgICAgIDxMb2dCb3hJbnNwZWN0b3JTb3VyY2VNYXBTdGF0dXNcbiAgICAgICAgICBvblByZXNzPXtcbiAgICAgICAgICAgIHByb3BzLmxvZy5zeW1ib2xpY2F0ZWQuc3RhdHVzID09PSAnRkFJTEVEJyA/IHByb3BzLm9uUmV0cnkgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXR1cz17cHJvcHMubG9nLnN5bWJvbGljYXRlZC5zdGF0dXN9XG4gICAgICAgIC8+XG4gICAgICB9PlxuICAgICAge3Byb3BzLmxvZy5zeW1ib2xpY2F0ZWQuc3RhdHVzICE9PSAnQ09NUExFVEUnICYmIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0YWNrU3R5bGVzLmhpbnRCb3h9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdGFja1N0eWxlcy5oaW50VGV4dH0+XG4gICAgICAgICAgICBUaGlzIGNhbGwgc3RhY2sgaXMgbm90IHN5bWJvbGljYXRlZC4gU29tZSBmZWF0dXJlcyBhcmUgdW5hdmFpbGFibGVcbiAgICAgICAgICAgIHN1Y2ggYXMgdmlld2luZyB0aGUgZnVuY3Rpb24gbmFtZSBvciB0YXBwaW5nIHRvIG9wZW4gZmlsZXMuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApfVxuICAgICAgPFN0YWNrRnJhbWVMaXN0XG4gICAgICAgIGxpc3Q9e2dldFN0YWNrTGlzdCgpfVxuICAgICAgICBzdGF0dXM9e3Byb3BzLmxvZy5zeW1ib2xpY2F0ZWQuc3RhdHVzfVxuICAgICAgLz5cbiAgICAgIDxTdGFja0ZyYW1lRm9vdGVyXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHNldENvbGxhcHNlZCghY29sbGFwc2VkKX1cbiAgICAgICAgbWVzc2FnZT17Z2V0Q29sbGFwc2VNZXNzYWdlKHByb3BzLmxvZy5nZXRBdmFpbGFibGVTdGFjaygpLCBjb2xsYXBzZWQpfVxuICAgICAgLz5cbiAgICA8L0xvZ0JveEluc3BlY3RvclNlY3Rpb24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFN0YWNrRnJhbWVMaXN0KHByb3BzOiB7XG4gIGxpc3Q6IFN0YWNrIHwgQXJyYXk8U3RhY2tGcmFtZT4sXG4gIHN0YXR1czogc3RyaW5nIHwgJ0NPTVBMRVRFJyB8ICdGQUlMRUQnIHwgJ05PTkUnIHwgJ1BFTkRJTkcnLFxufSkge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7cHJvcHMubGlzdC5tYXAoKGZyYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB7ZmlsZSwgbGluZU51bWJlcn0gPSBmcmFtZTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8TG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZVxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGZyYW1lPXtmcmFtZX1cbiAgICAgICAgICAgIG9uUHJlc3M9e1xuICAgICAgICAgICAgICBwcm9wcy5zdGF0dXMgPT09ICdDT01QTEVURScgJiYgZmlsZSAhPSBudWxsICYmIGxpbmVOdW1iZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gKCkgPT4gb3BlbkZpbGVJbkVkaXRvcihmaWxlLCBsaW5lTnVtYmVyKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU3RhY2tGcmFtZUZvb3RlcihcbiAgcHJvcHM6ICRURU1QT1JBUlkkb2JqZWN0PHttZXNzYWdlOiBzdHJpbmcsIG9uUHJlc3M6ICgpID0+IHZvaWR9Pixcbikge1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdGFja1N0eWxlcy5jb2xsYXBzZUNvbnRhaW5lcn0+XG4gICAgICA8TG9nQm94QnV0dG9uXG4gICAgICAgIGJhY2tncm91bmRDb2xvcj17e1xuICAgICAgICAgIGRlZmF1bHQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgcHJlc3NlZDogTG9nQm94U3R5bGUuZ2V0QmFja2dyb3VuZENvbG9yKDEpLFxuICAgICAgICB9fVxuICAgICAgICBvblByZXNzPXtwcm9wcy5vblByZXNzfVxuICAgICAgICBzdHlsZT17c3RhY2tTdHlsZXMuY29sbGFwc2VCdXR0b259PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3RhY2tTdHlsZXMuY29sbGFwc2V9Pntwcm9wcy5tZXNzYWdlfTwvVGV4dD5cbiAgICAgIDwvTG9nQm94QnV0dG9uPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3RhY2tTdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHNlY3Rpb246IHtcbiAgICBtYXJnaW5Ub3A6IDE1LFxuICB9LFxuICBoZWFkaW5nOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDEyLFxuICAgIG1hcmdpbkJvdHRvbTogMTAsXG4gIH0sXG4gIGhlYWRpbmdUZXh0OiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigxKSxcbiAgICBmbGV4OiAxLFxuICAgIGZvbnRTaXplOiAyMCxcbiAgICBmb250V2VpZ2h0OiAnNjAwJyxcbiAgICBpbmNsdWRlRm9udFBhZGRpbmc6IGZhbHNlLFxuICAgIGxpbmVIZWlnaHQ6IDIwLFxuICB9LFxuICBib2R5OiB7XG4gICAgcGFkZGluZ0JvdHRvbTogMTAsXG4gIH0sXG4gIGJvZHlUZXh0OiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigxKSxcbiAgICBmb250U2l6ZTogMTQsXG4gICAgaW5jbHVkZUZvbnRQYWRkaW5nOiBmYWxzZSxcbiAgICBsaW5lSGVpZ2h0OiAxOCxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMjcsXG4gIH0sXG4gIGhpbnRUZXh0OiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigwLjcpLFxuICAgIGZvbnRTaXplOiAxMyxcbiAgICBpbmNsdWRlRm9udFBhZGRpbmc6IGZhbHNlLFxuICAgIGxpbmVIZWlnaHQ6IDE4LFxuICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgIG1hcmdpbkhvcml6b250YWw6IDEwLFxuICB9LFxuICBoaW50Qm94OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBMb2dCb3hTdHlsZS5nZXRCYWNrZ3JvdW5kQ29sb3IoKSxcbiAgICBtYXJnaW5Ib3Jpem9udGFsOiAxMCxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogNSxcbiAgICBwYWRkaW5nVmVydGljYWw6IDEwLFxuICAgIGJvcmRlclJhZGl1czogNSxcbiAgICBtYXJnaW5Cb3R0b206IDUsXG4gIH0sXG4gIGNvbGxhcHNlQ29udGFpbmVyOiB7XG4gICAgbWFyZ2luTGVmdDogMTUsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gIH0sXG4gIGNvbGxhcHNlQnV0dG9uOiB7XG4gICAgYm9yZGVyUmFkaXVzOiA1LFxuICB9LFxuICBjb2xsYXBzZToge1xuICAgIGNvbG9yOiBMb2dCb3hTdHlsZS5nZXRUZXh0Q29sb3IoMC43KSxcbiAgICBmb250U2l6ZTogMTIsXG4gICAgZm9udFdlaWdodDogJzMwMCcsXG4gICAgbGluZUhlaWdodDogMjAsXG4gICAgbWFyZ2luVG9wOiAwLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgICBwYWRkaW5nVmVydGljYWw6IDUsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1ByZXNzRXZlbnR9IGZyb20gJy4uLy4uL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IEFuaW1hdGVkIGZyb20gJy4uLy4uL0FuaW1hdGVkL0FuaW1hdGVkJztcbmltcG9ydCBFYXNpbmcgZnJvbSAnLi4vLi4vQW5pbWF0ZWQvRWFzaW5nJztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0IExvZ0JveEJ1dHRvbiBmcm9tICcuL0xvZ0JveEJ1dHRvbic7XG5pbXBvcnQgKiBhcyBMb2dCb3hTdHlsZSBmcm9tICcuL0xvZ0JveFN0eWxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBvblByZXNzPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgc3RhdHVzOiAnQ09NUExFVEUnIHwgJ0ZBSUxFRCcgfCAnTk9ORScgfCAnUEVORElORycsXG58fT47XG5cbmZ1bmN0aW9uIExvZ0JveEluc3BlY3RvclNvdXJjZU1hcFN0YXR1cyhwcm9wczogUHJvcHMpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgYW5pbWF0aW9uOiBudWxsLFxuICAgIHJvdGF0ZTogbnVsbCxcbiAgfSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJvcHMuc3RhdHVzID09PSAnUEVORElORycpIHtcbiAgICAgIGlmIChzdGF0ZS5hbmltYXRpb24gPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBhbmltYXRlZCA9IG5ldyBBbmltYXRlZC5WYWx1ZSgwKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uID0gQW5pbWF0ZWQubG9vcChcbiAgICAgICAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWQsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgICAgICAgZWFzaW5nOiBFYXNpbmcubGluZWFyLFxuICAgICAgICAgICAgdG9WYWx1ZTogMSxcbiAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogdHJ1ZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgICByb3RhdGU6IGFuaW1hdGVkLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbJzBkZWcnLCAnMzYwZGVnJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBhbmltYXRpb24uc3RhcnQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLmFuaW1hdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHN0YXRlLmFuaW1hdGlvbi5zdG9wKCk7XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBhbmltYXRpb246IG51bGwsXG4gICAgICAgICAgcm90YXRlOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHN0YXRlLmFuaW1hdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHN0YXRlLmFuaW1hdGlvbi5zdG9wKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW3Byb3BzLnN0YXR1cywgc3RhdGUuYW5pbWF0aW9uXSk7XG5cbiAgbGV0IGltYWdlO1xuICBsZXQgY29sb3I7XG4gIHN3aXRjaCAocHJvcHMuc3RhdHVzKSB7XG4gICAgY2FzZSAnRkFJTEVEJzpcbiAgICAgIGltYWdlID0gcmVxdWlyZSgnLi9Mb2dCb3hJbWFnZXMvYWxlcnQtdHJpYW5nbGUucG5nJyk7XG4gICAgICBjb2xvciA9IExvZ0JveFN0eWxlLmdldEVycm9yQ29sb3IoMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQRU5ESU5HJzpcbiAgICAgIGltYWdlID0gcmVxdWlyZSgnLi9Mb2dCb3hJbWFnZXMvbG9hZGVyLnBuZycpO1xuICAgICAgY29sb3IgPSBMb2dCb3hTdHlsZS5nZXRXYXJuaW5nQ29sb3IoMSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChwcm9wcy5zdGF0dXMgPT09ICdDT01QTEVURScgfHwgaW1hZ2UgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8TG9nQm94QnV0dG9uXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I9e3tcbiAgICAgICAgZGVmYXVsdDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgcHJlc3NlZDogTG9nQm94U3R5bGUuZ2V0QmFja2dyb3VuZENvbG9yKDEpLFxuICAgICAgfX1cbiAgICAgIGhpdFNsb3A9e3tib3R0b206IDgsIGxlZnQ6IDgsIHJpZ2h0OiA4LCB0b3A6IDh9fVxuICAgICAgb25QcmVzcz17cHJvcHMub25QcmVzc31cbiAgICAgIHN0eWxlPXtzdHlsZXMucm9vdH0+XG4gICAgICA8QW5pbWF0ZWQuSW1hZ2VcbiAgICAgICAgc291cmNlPXtpbWFnZX1cbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMuaW1hZ2UsXG4gICAgICAgICAge3RpbnRDb2xvcjogY29sb3J9LFxuICAgICAgICAgIHN0YXRlLnJvdGF0ZSA9PSBudWxsIHx8IHByb3BzLnN0YXR1cyAhPT0gJ1BFTkRJTkcnXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge3RyYW5zZm9ybTogW3tyb3RhdGU6IHN0YXRlLnJvdGF0ZX1dfSxcbiAgICAgICAgXX1cbiAgICAgIC8+XG4gICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0LCB7Y29sb3J9XX0+U291cmNlIE1hcDwvVGV4dD5cbiAgICA8L0xvZ0JveEJ1dHRvbj5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb290OiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBoZWlnaHQ6IDI0LFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiA4LFxuICB9LFxuICBpbWFnZToge1xuICAgIGhlaWdodDogMTQsXG4gICAgd2lkdGg6IDE2LFxuICAgIG1hcmdpbkVuZDogNCxcbiAgICB0aW50Q29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigwLjQpLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgZm9udFNpemU6IDEyLFxuICAgIGluY2x1ZGVGb250UGFkZGluZzogZmFsc2UsXG4gICAgbGluZUhlaWdodDogMTYsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nQm94SW5zcGVjdG9yU291cmNlTWFwU3RhdHVzO1xuIiwiIiwiIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtTdGFja0ZyYW1lfSBmcm9tICcuLi8uLi9Db3JlL05hdGl2ZUV4Y2VwdGlvbnNNYW5hZ2VyJztcbmltcG9ydCB0eXBlIHtQcmVzc0V2ZW50fSBmcm9tICcuLi8uLi9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCBWaWV3IGZyb20gJy4uLy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgTG9nQm94QnV0dG9uIGZyb20gJy4vTG9nQm94QnV0dG9uJztcbmltcG9ydCAqIGFzIExvZ0JveFN0eWxlIGZyb20gJy4vTG9nQm94U3R5bGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHtcbiAgZnJhbWU6IFN0YWNrRnJhbWUsXG4gIG9uUHJlc3M/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiB2b2lkLFxufT47XG5cbmZ1bmN0aW9uIExvZ0JveEluc3BlY3RvclN0YWNrRnJhbWUocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHtmcmFtZSwgb25QcmVzc30gPSBwcm9wcztcbiAgY29uc3QgY29sdW1uID0gZnJhbWUuY29sdW1uICE9IG51bGwgJiYgcGFyc2VJbnQoZnJhbWUuY29sdW1uLCAxMCk7XG4gIGNvbnN0IGxvY2F0aW9uID1cbiAgICBnZXRGaWxlTmFtZShmcmFtZS5maWxlKSArXG4gICAgKGZyYW1lLmxpbmVOdW1iZXIgIT0gbnVsbFxuICAgICAgPyAnOicgK1xuICAgICAgICBmcmFtZS5saW5lTnVtYmVyICtcbiAgICAgICAgKGNvbHVtbiAmJiAhaXNOYU4oY29sdW1uKSA/ICc6JyArIChjb2x1bW4gKyAxKSA6ICcnKVxuICAgICAgOiAnJyk7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5mcmFtZUNvbnRhaW5lcn0+XG4gICAgICA8TG9nQm94QnV0dG9uXG4gICAgICAgIGJhY2tncm91bmRDb2xvcj17e1xuICAgICAgICAgIGRlZmF1bHQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgcHJlc3NlZDogb25QcmVzcyA/IExvZ0JveFN0eWxlLmdldEJhY2tncm91bmRDb2xvcigxKSA6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIH19XG4gICAgICAgIG9uUHJlc3M9e29uUHJlc3N9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMuZnJhbWV9PlxuICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5uYW1lLCBmcmFtZS5jb2xsYXBzZSA9PT0gdHJ1ZSAmJiBzdHlsZXMuZGltXX0+XG4gICAgICAgICAge2ZyYW1lLm1ldGhvZE5hbWV9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHRcbiAgICAgICAgICBlbGxpcHNpemVNb2RlPVwibWlkZGxlXCJcbiAgICAgICAgICBudW1iZXJPZkxpbmVzPXsxfVxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmxvY2F0aW9uLCBmcmFtZS5jb2xsYXBzZSA9PT0gdHJ1ZSAmJiBzdHlsZXMuZGltXX0+XG4gICAgICAgICAge2xvY2F0aW9ufVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0xvZ0JveEJ1dHRvbj5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVOYW1lKGZpbGU6ID9zdHJpbmcpIHtcbiAgaWYgKGZpbGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnPHVua25vd24+JztcbiAgfVxuICBjb25zdCBxdWVyeUluZGV4ID0gZmlsZS5pbmRleE9mKCc/Jyk7XG4gIHJldHVybiBmaWxlLnN1YnN0cmluZyhcbiAgICBmaWxlLmxhc3RJbmRleE9mKCcvJykgKyAxLFxuICAgIHF1ZXJ5SW5kZXggPT09IC0xID8gZmlsZS5sZW5ndGggOiBxdWVyeUluZGV4LFxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGZyYW1lQ29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDE1LFxuICB9LFxuICBmcmFtZToge1xuICAgIGZsZXg6IDEsXG4gICAgcGFkZGluZ1ZlcnRpY2FsOiA0LFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgICBib3JkZXJSYWRpdXM6IDUsXG4gIH0sXG4gIGxpbmVMb2NhdGlvbjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICB9LFxuICBuYW1lOiB7XG4gICAgY29sb3I6IExvZ0JveFN0eWxlLmdldFRleHRDb2xvcigxKSxcbiAgICBmb250U2l6ZTogMTQsXG4gICAgaW5jbHVkZUZvbnRQYWRkaW5nOiBmYWxzZSxcbiAgICBsaW5lSGVpZ2h0OiAxOCxcbiAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICBmb250RmFtaWx5OiBQbGF0Zm9ybS5zZWxlY3Qoe2FuZHJvaWQ6ICdtb25vc3BhY2UnLCBpb3M6ICdNZW5sbyd9KSxcbiAgfSxcbiAgbG9jYXRpb246IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDAuOCksXG4gICAgZm9udFNpemU6IDEyLFxuICAgIGZvbnRXZWlnaHQ6ICczMDAnLFxuICAgIGluY2x1ZGVGb250UGFkZGluZzogZmFsc2UsXG4gICAgbGluZUhlaWdodDogMTYsXG4gICAgcGFkZGluZ0xlZnQ6IDEwLFxuICB9LFxuICBkaW06IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDAuNCksXG4gICAgZm9udFdlaWdodDogJzMwMCcsXG4gIH0sXG4gIGxpbmU6IHtcbiAgICBjb2xvcjogTG9nQm94U3R5bGUuZ2V0VGV4dENvbG9yKDAuOCksXG4gICAgZm9udFNpemU6IDEyLFxuICAgIGZvbnRXZWlnaHQ6ICczMDAnLFxuICAgIGluY2x1ZGVGb250UGFkZGluZzogZmFsc2UsXG4gICAgbGluZUhlaWdodDogMTYsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbm9mbG93XG4gKiBAbm9saW50XG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RGYWJyaWMtcHJvZFxuICogQHByZXZlbnRNdW5nZVxuICogQGdlbmVyYXRlZCBTaWduZWRTb3VyY2U8PGRkMTBjODMyNDkxMmJjOGRmNGIxNWNmYmZkZDVkOWZmPj5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcbnJlcXVpcmUoXCJyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlYWN0UHJpdmF0ZS9SZWFjdE5hdGl2ZVByaXZhdGVJbml0aWFsaXplQ29yZVwiKTtcbnZhciBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UgPSByZXF1aXJlKFwicmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdFByaXZhdGUvUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlXCIpLFxuICBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgU2NoZWR1bGVyID0gcmVxdWlyZShcInNjaGVkdWxlclwiKTtcbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwobmFtZSwgZnVuYywgY29udGV4dCkge1xuICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn1cbnZhciBoYXNFcnJvciA9ICExLFxuICBjYXVnaHRFcnJvciA9IG51bGwsXG4gIGhhc1JldGhyb3dFcnJvciA9ICExLFxuICByZXRocm93RXJyb3IgPSBudWxsLFxuICByZXBvcnRlciA9IHtcbiAgICBvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGhhc0Vycm9yID0gITA7XG4gICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfTtcbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gITE7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbC5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihcbiAgbmFtZSxcbiAgZnVuYyxcbiAgY29udGV4dCxcbiAgYSxcbiAgYixcbiAgYyxcbiAgZCxcbiAgZSxcbiAgZlxuKSB7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgICAgaGFzRXJyb3IgPSAhMTtcbiAgICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICB9IGVsc2VcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIGhhc1JldGhyb3dFcnJvciB8fCAoKGhhc1JldGhyb3dFcnJvciA9ICEwKSwgKHJldGhyb3dFcnJvciA9IGVycm9yKSk7XG4gIH1cbn1cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMSA9IG51bGwsXG4gIGdldEluc3RhbmNlRnJvbU5vZGUkMSA9IG51bGwsXG4gIGdldE5vZGVGcm9tSW5zdGFuY2UkMSA9IG51bGw7XG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBpbnN0KSB7XG4gIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCBcInVua25vd24tZXZlbnRcIjtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGdldE5vZGVGcm9tSW5zdGFuY2UkMShpbnN0KTtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB2b2lkIDAsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5mdW5jdGlvbiBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXIgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgZGlzcGF0Y2hJbnN0YW5jZSA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgaWYgKGlzQXJyYXlJbXBsKGRpc3BhdGNoTGlzdGVuZXIpKVxuICAgIHRocm93IEVycm9yKFwiZXhlY3V0ZURpcmVjdERpc3BhdGNoKC4uLik6IEludmFsaWQgYGV2ZW50YC5cIik7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBkaXNwYXRjaExpc3RlbmVyXG4gICAgPyBnZXROb2RlRnJvbUluc3RhbmNlJDEoZGlzcGF0Y2hJbnN0YW5jZSlcbiAgICA6IG51bGw7XG4gIGRpc3BhdGNoTGlzdGVuZXIgPSBkaXNwYXRjaExpc3RlbmVyID8gZGlzcGF0Y2hMaXN0ZW5lcihldmVudCkgOiBudWxsO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbiAgcmV0dXJuIGRpc3BhdGNoTGlzdGVuZXI7XG59XG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKCkge1xuICByZXR1cm4gITA7XG59XG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiAhMTtcbn1cbmZ1bmN0aW9uIFN5bnRoZXRpY0V2ZW50KFxuICBkaXNwYXRjaENvbmZpZyxcbiAgdGFyZ2V0SW5zdCxcbiAgbmF0aXZlRXZlbnQsXG4gIG5hdGl2ZUV2ZW50VGFyZ2V0XG4pIHtcbiAgdGhpcy5kaXNwYXRjaENvbmZpZyA9IGRpc3BhdGNoQ29uZmlnO1xuICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICB0aGlzLl9kaXNwYXRjaEluc3RhbmNlcyA9IHRoaXMuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgZGlzcGF0Y2hDb25maWcgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZGlzcGF0Y2hDb25maWcpXG4gICAgZGlzcGF0Y2hDb25maWcuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAoKHRhcmdldEluc3QgPSBkaXNwYXRjaENvbmZpZ1twcm9wTmFtZV0pXG4gICAgICAgID8gKHRoaXNbcHJvcE5hbWVdID0gdGFyZ2V0SW5zdChuYXRpdmVFdmVudCkpXG4gICAgICAgIDogXCJ0YXJnZXRcIiA9PT0gcHJvcE5hbWVcbiAgICAgICAgPyAodGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldClcbiAgICAgICAgOiAodGhpc1twcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtwcm9wTmFtZV0pKTtcbiAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoXG4gICAgbnVsbCAhPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgICA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICAgIDogITEgPT09IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlXG4gIClcbiAgICA/IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gICAgOiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gIHJldHVybiB0aGlzO1xufVxuYXNzaWduKFN5bnRoZXRpY0V2ZW50LnByb3RvdHlwZSwge1xuICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9ICEwO1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgZXZlbnQgJiZcbiAgICAgIChldmVudC5wcmV2ZW50RGVmYXVsdFxuICAgICAgICA/IGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgOiBcInVua25vd25cIiAhPT0gdHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICYmIChldmVudC5yZXR1cm5WYWx1ZSA9ICExKSxcbiAgICAgICh0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKSk7XG4gIH0sXG4gIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgZXZlbnQgJiZcbiAgICAgIChldmVudC5zdG9wUHJvcGFnYXRpb25cbiAgICAgICAgPyBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICA6IFwidW5rbm93blwiICE9PSB0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICYmIChldmVudC5jYW5jZWxCdWJibGUgPSAhMCksXG4gICAgICAodGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKSk7XG4gIH0sXG4gIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzUGVyc2lzdGVudCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICB9LFxuICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSxcbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZSxcbiAgICAgIHByb3BOYW1lO1xuICAgIGZvciAocHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB0aGlzW3Byb3BOYW1lXSA9IG51bGw7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IHRoaXMuX3RhcmdldEluc3QgPSB0aGlzLmRpc3BhdGNoQ29uZmlnID0gbnVsbDtcbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPVxuICAgICAgZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHRoaXMuX2Rpc3BhdGNoSW5zdGFuY2VzID0gdGhpcy5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICB9XG59KTtcblN5bnRoZXRpY0V2ZW50LkludGVyZmFjZSA9IHtcbiAgdHlwZTogbnVsbCxcbiAgdGFyZ2V0OiBudWxsLFxuICBjdXJyZW50VGFyZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGV2ZW50UGhhc2U6IG51bGwsXG4gIGJ1YmJsZXM6IG51bGwsXG4gIGNhbmNlbGFibGU6IG51bGwsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiBudWxsLFxuICBpc1RydXN0ZWQ6IG51bGxcbn07XG5TeW50aGV0aWNFdmVudC5leHRlbmQgPSBmdW5jdGlvbiAoSW50ZXJmYWNlKSB7XG4gIGZ1bmN0aW9uIEUoKSB7fVxuICBmdW5jdGlvbiBDbGFzcygpIHtcbiAgICByZXR1cm4gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICB2YXIgU3VwZXIgPSB0aGlzO1xuICBFLnByb3RvdHlwZSA9IFN1cGVyLnByb3RvdHlwZTtcbiAgdmFyIHByb3RvdHlwZSA9IG5ldyBFKCk7XG4gIGFzc2lnbihwcm90b3R5cGUsIENsYXNzLnByb3RvdHlwZSk7XG4gIENsYXNzLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3M7XG4gIENsYXNzLkludGVyZmFjZSA9IGFzc2lnbih7fSwgU3VwZXIuSW50ZXJmYWNlLCBJbnRlcmZhY2UpO1xuICBDbGFzcy5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gIGFkZEV2ZW50UG9vbGluZ1RvKENsYXNzKTtcbiAgcmV0dXJuIENsYXNzO1xufTtcbmFkZEV2ZW50UG9vbGluZ1RvKFN5bnRoZXRpY0V2ZW50KTtcbmZ1bmN0aW9uIGNyZWF0ZU9yR2V0UG9vbGVkRXZlbnQoXG4gIGRpc3BhdGNoQ29uZmlnLFxuICB0YXJnZXRJbnN0LFxuICBuYXRpdmVFdmVudCxcbiAgbmF0aXZlSW5zdFxuKSB7XG4gIGlmICh0aGlzLmV2ZW50UG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmV2ZW50UG9vbC5wb3AoKTtcbiAgICB0aGlzLmNhbGwoaW5zdGFuY2UsIGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlSW5zdCk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG4gIHJldHVybiBuZXcgdGhpcyhkaXNwYXRjaENvbmZpZywgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUluc3QpO1xufVxuZnVuY3Rpb24gcmVsZWFzZVBvb2xlZEV2ZW50KGV2ZW50KSB7XG4gIGlmICghKGV2ZW50IGluc3RhbmNlb2YgdGhpcykpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIlRyeWluZyB0byByZWxlYXNlIGFuIGV2ZW50IGluc3RhbmNlIGludG8gYSBwb29sIG9mIGEgZGlmZmVyZW50IHR5cGUuXCJcbiAgICApO1xuICBldmVudC5kZXN0cnVjdG9yKCk7XG4gIDEwID4gdGhpcy5ldmVudFBvb2wubGVuZ3RoICYmIHRoaXMuZXZlbnRQb29sLnB1c2goZXZlbnQpO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRQb29saW5nVG8oRXZlbnRDb25zdHJ1Y3Rvcikge1xuICBFdmVudENvbnN0cnVjdG9yLmdldFBvb2xlZCA9IGNyZWF0ZU9yR2V0UG9vbGVkRXZlbnQ7XG4gIEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sID0gW107XG4gIEV2ZW50Q29uc3RydWN0b3IucmVsZWFzZSA9IHJlbGVhc2VQb29sZWRFdmVudDtcbn1cbnZhciBSZXNwb25kZXJTeW50aGV0aWNFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmV4dGVuZCh7XG4gIHRvdWNoSGlzdG9yeTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59KTtcbmZ1bmN0aW9uIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiBcInRvcFRvdWNoU3RhcnRcIiA9PT0gdG9wTGV2ZWxUeXBlO1xufVxuZnVuY3Rpb24gaXNNb3ZlaXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gXCJ0b3BUb3VjaE1vdmVcIiA9PT0gdG9wTGV2ZWxUeXBlO1xufVxudmFyIHN0YXJ0RGVwZW5kZW5jaWVzID0gW1widG9wVG91Y2hTdGFydFwiXSxcbiAgbW92ZURlcGVuZGVuY2llcyA9IFtcInRvcFRvdWNoTW92ZVwiXSxcbiAgZW5kRGVwZW5kZW5jaWVzID0gW1widG9wVG91Y2hDYW5jZWxcIiwgXCJ0b3BUb3VjaEVuZFwiXSxcbiAgdG91Y2hCYW5rID0gW10sXG4gIHRvdWNoSGlzdG9yeSA9IHtcbiAgICB0b3VjaEJhbms6IHRvdWNoQmFuayxcbiAgICBudW1iZXJBY3RpdmVUb3VjaGVzOiAwLFxuICAgIGluZGV4T2ZTaW5nbGVBY3RpdmVUb3VjaDogLTEsXG4gICAgbW9zdFJlY2VudFRpbWVTdGFtcDogMFxuICB9O1xuZnVuY3Rpb24gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpIHtcbiAgcmV0dXJuIHRvdWNoLnRpbWVTdGFtcCB8fCB0b3VjaC50aW1lc3RhbXA7XG59XG5mdW5jdGlvbiBnZXRUb3VjaElkZW50aWZpZXIoX3JlZikge1xuICBfcmVmID0gX3JlZi5pZGVudGlmaWVyO1xuICBpZiAobnVsbCA9PSBfcmVmKSB0aHJvdyBFcnJvcihcIlRvdWNoIG9iamVjdCBpcyBtaXNzaW5nIGlkZW50aWZpZXIuXCIpO1xuICByZXR1cm4gX3JlZjtcbn1cbmZ1bmN0aW9uIHJlY29yZFRvdWNoU3RhcnQodG91Y2gpIHtcbiAgdmFyIGlkZW50aWZpZXIgPSBnZXRUb3VjaElkZW50aWZpZXIodG91Y2gpLFxuICAgIHRvdWNoUmVjb3JkID0gdG91Y2hCYW5rW2lkZW50aWZpZXJdO1xuICB0b3VjaFJlY29yZFxuICAgID8gKCh0b3VjaFJlY29yZC50b3VjaEFjdGl2ZSA9ICEwKSxcbiAgICAgICh0b3VjaFJlY29yZC5zdGFydFBhZ2VYID0gdG91Y2gucGFnZVgpLFxuICAgICAgKHRvdWNoUmVjb3JkLnN0YXJ0UGFnZVkgPSB0b3VjaC5wYWdlWSksXG4gICAgICAodG91Y2hSZWNvcmQuc3RhcnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCkpLFxuICAgICAgKHRvdWNoUmVjb3JkLmN1cnJlbnRQYWdlWCA9IHRvdWNoLnBhZ2VYKSxcbiAgICAgICh0b3VjaFJlY29yZC5jdXJyZW50UGFnZVkgPSB0b3VjaC5wYWdlWSksXG4gICAgICAodG91Y2hSZWNvcmQuY3VycmVudFRpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKSksXG4gICAgICAodG91Y2hSZWNvcmQucHJldmlvdXNQYWdlWCA9IHRvdWNoLnBhZ2VYKSxcbiAgICAgICh0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VZID0gdG91Y2gucGFnZVkpLFxuICAgICAgKHRvdWNoUmVjb3JkLnByZXZpb3VzVGltZVN0YW1wID0gdGltZXN0YW1wRm9yVG91Y2godG91Y2gpKSlcbiAgICA6ICgodG91Y2hSZWNvcmQgPSB7XG4gICAgICAgIHRvdWNoQWN0aXZlOiAhMCxcbiAgICAgICAgc3RhcnRQYWdlWDogdG91Y2gucGFnZVgsXG4gICAgICAgIHN0YXJ0UGFnZVk6IHRvdWNoLnBhZ2VZLFxuICAgICAgICBzdGFydFRpbWVTdGFtcDogdGltZXN0YW1wRm9yVG91Y2godG91Y2gpLFxuICAgICAgICBjdXJyZW50UGFnZVg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICBjdXJyZW50UGFnZVk6IHRvdWNoLnBhZ2VZLFxuICAgICAgICBjdXJyZW50VGltZVN0YW1wOiB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCksXG4gICAgICAgIHByZXZpb3VzUGFnZVg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICBwcmV2aW91c1BhZ2VZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgcHJldmlvdXNUaW1lU3RhbXA6IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKVxuICAgICAgfSksXG4gICAgICAodG91Y2hCYW5rW2lkZW50aWZpZXJdID0gdG91Y2hSZWNvcmQpKTtcbiAgdG91Y2hIaXN0b3J5Lm1vc3RSZWNlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCk7XG59XG5mdW5jdGlvbiByZWNvcmRUb3VjaE1vdmUodG91Y2gpIHtcbiAgdmFyIHRvdWNoUmVjb3JkID0gdG91Y2hCYW5rW2dldFRvdWNoSWRlbnRpZmllcih0b3VjaCldO1xuICB0b3VjaFJlY29yZCAmJlxuICAgICgodG91Y2hSZWNvcmQudG91Y2hBY3RpdmUgPSAhMCksXG4gICAgKHRvdWNoUmVjb3JkLnByZXZpb3VzUGFnZVggPSB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVgpLFxuICAgICh0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VZID0gdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZKSxcbiAgICAodG91Y2hSZWNvcmQucHJldmlvdXNUaW1lU3RhbXAgPSB0b3VjaFJlY29yZC5jdXJyZW50VGltZVN0YW1wKSxcbiAgICAodG91Y2hSZWNvcmQuY3VycmVudFBhZ2VYID0gdG91Y2gucGFnZVgpLFxuICAgICh0b3VjaFJlY29yZC5jdXJyZW50UGFnZVkgPSB0b3VjaC5wYWdlWSksXG4gICAgKHRvdWNoUmVjb3JkLmN1cnJlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCkpLFxuICAgICh0b3VjaEhpc3RvcnkubW9zdFJlY2VudFRpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKSkpO1xufVxuZnVuY3Rpb24gcmVjb3JkVG91Y2hFbmQodG91Y2gpIHtcbiAgdmFyIHRvdWNoUmVjb3JkID0gdG91Y2hCYW5rW2dldFRvdWNoSWRlbnRpZmllcih0b3VjaCldO1xuICB0b3VjaFJlY29yZCAmJlxuICAgICgodG91Y2hSZWNvcmQudG91Y2hBY3RpdmUgPSAhMSksXG4gICAgKHRvdWNoUmVjb3JkLnByZXZpb3VzUGFnZVggPSB0b3VjaFJlY29yZC5jdXJyZW50UGFnZVgpLFxuICAgICh0b3VjaFJlY29yZC5wcmV2aW91c1BhZ2VZID0gdG91Y2hSZWNvcmQuY3VycmVudFBhZ2VZKSxcbiAgICAodG91Y2hSZWNvcmQucHJldmlvdXNUaW1lU3RhbXAgPSB0b3VjaFJlY29yZC5jdXJyZW50VGltZVN0YW1wKSxcbiAgICAodG91Y2hSZWNvcmQuY3VycmVudFBhZ2VYID0gdG91Y2gucGFnZVgpLFxuICAgICh0b3VjaFJlY29yZC5jdXJyZW50UGFnZVkgPSB0b3VjaC5wYWdlWSksXG4gICAgKHRvdWNoUmVjb3JkLmN1cnJlbnRUaW1lU3RhbXAgPSB0aW1lc3RhbXBGb3JUb3VjaCh0b3VjaCkpLFxuICAgICh0b3VjaEhpc3RvcnkubW9zdFJlY2VudFRpbWVTdGFtcCA9IHRpbWVzdGFtcEZvclRvdWNoKHRvdWNoKSkpO1xufVxudmFyIGluc3RydW1lbnRhdGlvbkNhbGxiYWNrLFxuICBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZSA9IHtcbiAgICBpbnN0cnVtZW50OiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGluc3RydW1lbnRhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSxcbiAgICByZWNvcmRUb3VjaFRyYWNrOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICAgICAgbnVsbCAhPSBpbnN0cnVtZW50YXRpb25DYWxsYmFjayAmJlxuICAgICAgICBpbnN0cnVtZW50YXRpb25DYWxsYmFjayh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIGlmIChpc01vdmVpc2godG9wTGV2ZWxUeXBlKSlcbiAgICAgICAgbmF0aXZlRXZlbnQuY2hhbmdlZFRvdWNoZXMuZm9yRWFjaChyZWNvcmRUb3VjaE1vdmUpO1xuICAgICAgZWxzZSBpZiAoaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpKVxuICAgICAgICBuYXRpdmVFdmVudC5jaGFuZ2VkVG91Y2hlcy5mb3JFYWNoKHJlY29yZFRvdWNoU3RhcnQpLFxuICAgICAgICAgICh0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcyA9IG5hdGl2ZUV2ZW50LnRvdWNoZXMubGVuZ3RoKSxcbiAgICAgICAgICAxID09PSB0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcyAmJlxuICAgICAgICAgICAgKHRvdWNoSGlzdG9yeS5pbmRleE9mU2luZ2xlQWN0aXZlVG91Y2ggPVxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC50b3VjaGVzWzBdLmlkZW50aWZpZXIpO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIFwidG9wVG91Y2hFbmRcIiA9PT0gdG9wTGV2ZWxUeXBlIHx8XG4gICAgICAgIFwidG9wVG91Y2hDYW5jZWxcIiA9PT0gdG9wTGV2ZWxUeXBlXG4gICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAobmF0aXZlRXZlbnQuY2hhbmdlZFRvdWNoZXMuZm9yRWFjaChyZWNvcmRUb3VjaEVuZCksXG4gICAgICAgICAgKHRvdWNoSGlzdG9yeS5udW1iZXJBY3RpdmVUb3VjaGVzID0gbmF0aXZlRXZlbnQudG91Y2hlcy5sZW5ndGgpLFxuICAgICAgICAgIDEgPT09IHRvdWNoSGlzdG9yeS5udW1iZXJBY3RpdmVUb3VjaGVzKVxuICAgICAgICApXG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHRvcExldmVsVHlwZSA9IDA7XG4gICAgICAgICAgICB0b3BMZXZlbFR5cGUgPCB0b3VjaEJhbmsubGVuZ3RoO1xuICAgICAgICAgICAgdG9wTGV2ZWxUeXBlKytcbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgobmF0aXZlRXZlbnQgPSB0b3VjaEJhbmtbdG9wTGV2ZWxUeXBlXSksXG4gICAgICAgICAgICAgIG51bGwgIT0gbmF0aXZlRXZlbnQgJiYgbmF0aXZlRXZlbnQudG91Y2hBY3RpdmUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdG91Y2hIaXN0b3J5LmluZGV4T2ZTaW5nbGVBY3RpdmVUb3VjaCA9IHRvcExldmVsVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgfSxcbiAgICB0b3VjaEhpc3Rvcnk6IHRvdWNoSGlzdG9yeVxuICB9O1xuZnVuY3Rpb24gYWNjdW11bGF0ZShjdXJyZW50LCBuZXh0KSB7XG4gIGlmIChudWxsID09IG5leHQpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcImFjY3VtdWxhdGUoLi4uKTogQWNjdW11bGF0ZWQgaXRlbXMgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCJcbiAgICApO1xuICByZXR1cm4gbnVsbCA9PSBjdXJyZW50XG4gICAgPyBuZXh0XG4gICAgOiBpc0FycmF5SW1wbChjdXJyZW50KVxuICAgID8gY3VycmVudC5jb25jYXQobmV4dClcbiAgICA6IGlzQXJyYXlJbXBsKG5leHQpXG4gICAgPyBbY3VycmVudF0uY29uY2F0KG5leHQpXG4gICAgOiBbY3VycmVudCwgbmV4dF07XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlSW50byhjdXJyZW50LCBuZXh0KSB7XG4gIGlmIChudWxsID09IG5leHQpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcImFjY3VtdWxhdGVJbnRvKC4uLik6IEFjY3VtdWxhdGVkIGl0ZW1zIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLlwiXG4gICAgKTtcbiAgaWYgKG51bGwgPT0gY3VycmVudCkgcmV0dXJuIG5leHQ7XG4gIGlmIChpc0FycmF5SW1wbChjdXJyZW50KSkge1xuICAgIGlmIChpc0FycmF5SW1wbChuZXh0KSkgcmV0dXJuIGN1cnJlbnQucHVzaC5hcHBseShjdXJyZW50LCBuZXh0KSwgY3VycmVudDtcbiAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgcmV0dXJuIGlzQXJyYXlJbXBsKG5leHQpID8gW2N1cnJlbnRdLmNvbmNhdChuZXh0KSA6IFtjdXJyZW50LCBuZXh0XTtcbn1cbmZ1bmN0aW9uIGZvckVhY2hBY2N1bXVsYXRlZChhcnIsIGNiLCBzY29wZSkge1xuICBBcnJheS5pc0FycmF5KGFycikgPyBhcnIuZm9yRWFjaChjYiwgc2NvcGUpIDogYXJyICYmIGNiLmNhbGwoc2NvcGUsIGFycik7XG59XG52YXIgcmVzcG9uZGVySW5zdCA9IG51bGwsXG4gIHRyYWNrZWRUb3VjaENvdW50ID0gMDtcbmZ1bmN0aW9uIGNoYW5nZVJlc3BvbmRlcihuZXh0UmVzcG9uZGVySW5zdCwgYmxvY2tIb3N0UmVzcG9uZGVyKSB7XG4gIHZhciBvbGRSZXNwb25kZXJJbnN0ID0gcmVzcG9uZGVySW5zdDtcbiAgcmVzcG9uZGVySW5zdCA9IG5leHRSZXNwb25kZXJJbnN0O1xuICBpZiAobnVsbCAhPT0gUmVzcG9uZGVyRXZlbnRQbHVnaW4uR2xvYmFsUmVzcG9uZGVySGFuZGxlcilcbiAgICBSZXNwb25kZXJFdmVudFBsdWdpbi5HbG9iYWxSZXNwb25kZXJIYW5kbGVyLm9uQ2hhbmdlKFxuICAgICAgb2xkUmVzcG9uZGVySW5zdCxcbiAgICAgIG5leHRSZXNwb25kZXJJbnN0LFxuICAgICAgYmxvY2tIb3N0UmVzcG9uZGVyXG4gICAgKTtcbn1cbnZhciBldmVudFR5cGVzID0ge1xuICBzdGFydFNob3VsZFNldFJlc3BvbmRlcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBcIm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXJcIixcbiAgICAgIGNhcHR1cmVkOiBcIm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlXCJcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogc3RhcnREZXBlbmRlbmNpZXNcbiAgfSxcbiAgc2Nyb2xsU2hvdWxkU2V0UmVzcG9uZGVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IFwib25TY3JvbGxTaG91bGRTZXRSZXNwb25kZXJcIixcbiAgICAgIGNhcHR1cmVkOiBcIm9uU2Nyb2xsU2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZVwiXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcInRvcFNjcm9sbFwiXVxuICB9LFxuICBzZWxlY3Rpb25DaGFuZ2VTaG91bGRTZXRSZXNwb25kZXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogXCJvblNlbGVjdGlvbkNoYW5nZVNob3VsZFNldFJlc3BvbmRlclwiLFxuICAgICAgY2FwdHVyZWQ6IFwib25TZWxlY3Rpb25DaGFuZ2VTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlXCJcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1widG9wU2VsZWN0aW9uQ2hhbmdlXCJdXG4gIH0sXG4gIG1vdmVTaG91bGRTZXRSZXNwb25kZXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogXCJvbk1vdmVTaG91bGRTZXRSZXNwb25kZXJcIixcbiAgICAgIGNhcHR1cmVkOiBcIm9uTW92ZVNob3VsZFNldFJlc3BvbmRlckNhcHR1cmVcIlxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBtb3ZlRGVwZW5kZW5jaWVzXG4gIH0sXG4gIHJlc3BvbmRlclN0YXJ0OiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlclN0YXJ0XCIsXG4gICAgZGVwZW5kZW5jaWVzOiBzdGFydERlcGVuZGVuY2llc1xuICB9LFxuICByZXNwb25kZXJNb3ZlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlck1vdmVcIixcbiAgICBkZXBlbmRlbmNpZXM6IG1vdmVEZXBlbmRlbmNpZXNcbiAgfSxcbiAgcmVzcG9uZGVyRW5kOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlckVuZFwiLFxuICAgIGRlcGVuZGVuY2llczogZW5kRGVwZW5kZW5jaWVzXG4gIH0sXG4gIHJlc3BvbmRlclJlbGVhc2U6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyUmVsZWFzZVwiLFxuICAgIGRlcGVuZGVuY2llczogZW5kRGVwZW5kZW5jaWVzXG4gIH0sXG4gIHJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdDoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3RcIixcbiAgICBkZXBlbmRlbmNpZXM6IFtdXG4gIH0sXG4gIHJlc3BvbmRlckdyYW50OiB7IHJlZ2lzdHJhdGlvbk5hbWU6IFwib25SZXNwb25kZXJHcmFudFwiLCBkZXBlbmRlbmNpZXM6IFtdIH0sXG4gIHJlc3BvbmRlclJlamVjdDogeyByZWdpc3RyYXRpb25OYW1lOiBcIm9uUmVzcG9uZGVyUmVqZWN0XCIsIGRlcGVuZGVuY2llczogW10gfSxcbiAgcmVzcG9uZGVyVGVybWluYXRlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogXCJvblJlc3BvbmRlclRlcm1pbmF0ZVwiLFxuICAgIGRlcGVuZGVuY2llczogW11cbiAgfVxufTtcbmZ1bmN0aW9uIGdldFBhcmVudCQxKGluc3QpIHtcbiAgZG8gaW5zdCA9IGluc3QucmV0dXJuO1xuICB3aGlsZSAoaW5zdCAmJiA1ICE9PSBpbnN0LnRhZyk7XG4gIHJldHVybiBpbnN0ID8gaW5zdCA6IG51bGw7XG59XG5mdW5jdGlvbiB0cmF2ZXJzZVR3b1BoYXNlJDEoaW5zdCwgZm4sIGFyZykge1xuICBmb3IgKHZhciBwYXRoID0gW107IGluc3Q7ICkgcGF0aC5wdXNoKGluc3QpLCAoaW5zdCA9IGdldFBhcmVudCQxKGluc3QpKTtcbiAgZm9yIChpbnN0ID0gcGF0aC5sZW5ndGg7IDAgPCBpbnN0LS07ICkgZm4ocGF0aFtpbnN0XSwgXCJjYXB0dXJlZFwiLCBhcmcpO1xuICBmb3IgKGluc3QgPSAwOyBpbnN0IDwgcGF0aC5sZW5ndGg7IGluc3QrKykgZm4ocGF0aFtpbnN0XSwgXCJidWJibGVkXCIsIGFyZyk7XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lciQxKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgaW5zdCA9IGluc3Quc3RhdGVOb2RlO1xuICBpZiAobnVsbCA9PT0gaW5zdCkgcmV0dXJuIG51bGw7XG4gIGluc3QgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlJDEoaW5zdCk7XG4gIGlmIChudWxsID09PSBpbnN0KSByZXR1cm4gbnVsbDtcbiAgaWYgKChpbnN0ID0gaW5zdFtyZWdpc3RyYXRpb25OYW1lXSkgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYFwiICtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSArXG4gICAgICAgIFwiYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGBcIiArXG4gICAgICAgIHR5cGVvZiBpbnN0ICtcbiAgICAgICAgXCJgIHR5cGUuXCJcbiAgICApO1xuICByZXR1cm4gaW5zdDtcbn1cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMkMShpbnN0LCBwaGFzZSwgZXZlbnQpIHtcbiAgaWYgKFxuICAgIChwaGFzZSA9IGdldExpc3RlbmVyJDEoXG4gICAgICBpbnN0LFxuICAgICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcGhhc2VdXG4gICAgKSlcbiAgKVxuICAgIChldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgIHBoYXNlXG4gICAgKSksXG4gICAgICAoZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICAgIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyxcbiAgICAgICAgaW5zdFxuICAgICAgKSk7XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxKGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIGluc3QgPSBldmVudC5fdGFyZ2V0SW5zdDtcbiAgICBpZiAoaW5zdCAmJiBldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lciQxKGluc3QsIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgICAgbGlzdGVuZXIgJiZcbiAgICAgICAgKChldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgICAgICAgbGlzdGVuZXJcbiAgICAgICAgKSksXG4gICAgICAgIChldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhcbiAgICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgICAgaW5zdFxuICAgICAgICApKSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlU2tpcFRhcmdldChldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICB2YXIgdGFyZ2V0SW5zdCA9IGV2ZW50Ll90YXJnZXRJbnN0O1xuICAgIHRhcmdldEluc3QgPSB0YXJnZXRJbnN0ID8gZ2V0UGFyZW50JDEodGFyZ2V0SW5zdCkgOiBudWxsO1xuICAgIHRyYXZlcnNlVHdvUGhhc2UkMSh0YXJnZXRJbnN0LCBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEsIGV2ZW50KTtcbiAgfVxufVxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSQxKGV2ZW50KSB7XG4gIGV2ZW50ICYmXG4gICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgJiZcbiAgICB0cmF2ZXJzZVR3b1BoYXNlJDEoXG4gICAgICBldmVudC5fdGFyZ2V0SW5zdCxcbiAgICAgIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMkMSxcbiAgICAgIGV2ZW50XG4gICAgKTtcbn1cbnZhciBSZXNwb25kZXJFdmVudFBsdWdpbiA9IHtcbiAgICBfZ2V0UmVzcG9uZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzcG9uZGVySW5zdDtcbiAgICB9LFxuICAgIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG4gICAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIGlmIChpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkpIHRyYWNrZWRUb3VjaENvdW50ICs9IDE7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgXCJ0b3BUb3VjaEVuZFwiID09PSB0b3BMZXZlbFR5cGUgfHxcbiAgICAgICAgXCJ0b3BUb3VjaENhbmNlbFwiID09PSB0b3BMZXZlbFR5cGVcbiAgICAgIClcbiAgICAgICAgaWYgKDAgPD0gdHJhY2tlZFRvdWNoQ291bnQpIC0tdHJhY2tlZFRvdWNoQ291bnQ7XG4gICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS5yZWNvcmRUb3VjaFRyYWNrKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgaWYgKFxuICAgICAgICB0YXJnZXRJbnN0ICYmXG4gICAgICAgICgoXCJ0b3BTY3JvbGxcIiA9PT0gdG9wTGV2ZWxUeXBlICYmICFuYXRpdmVFdmVudC5yZXNwb25kZXJJZ25vcmVTY3JvbGwpIHx8XG4gICAgICAgICAgKDAgPCB0cmFja2VkVG91Y2hDb3VudCAmJiBcInRvcFNlbGVjdGlvbkNoYW5nZVwiID09PSB0b3BMZXZlbFR5cGUpIHx8XG4gICAgICAgICAgaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpIHx8XG4gICAgICAgICAgaXNNb3ZlaXNoKHRvcExldmVsVHlwZSkpXG4gICAgICApIHtcbiAgICAgICAgdmFyIHNob3VsZFNldEV2ZW50VHlwZSA9IGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKVxuICAgICAgICAgID8gZXZlbnRUeXBlcy5zdGFydFNob3VsZFNldFJlc3BvbmRlclxuICAgICAgICAgIDogaXNNb3ZlaXNoKHRvcExldmVsVHlwZSlcbiAgICAgICAgICA/IGV2ZW50VHlwZXMubW92ZVNob3VsZFNldFJlc3BvbmRlclxuICAgICAgICAgIDogXCJ0b3BTZWxlY3Rpb25DaGFuZ2VcIiA9PT0gdG9wTGV2ZWxUeXBlXG4gICAgICAgICAgPyBldmVudFR5cGVzLnNlbGVjdGlvbkNoYW5nZVNob3VsZFNldFJlc3BvbmRlclxuICAgICAgICAgIDogZXZlbnRUeXBlcy5zY3JvbGxTaG91bGRTZXRSZXNwb25kZXI7XG4gICAgICAgIGlmIChyZXNwb25kZXJJbnN0KVxuICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXAgPSByZXNwb25kZXJJbnN0O1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgdmFyIGRlcHRoQSA9IDAsIHRlbXBBID0gSlNDb21waWxlcl90ZW1wO1xuICAgICAgICAgICAgICB0ZW1wQTtcbiAgICAgICAgICAgICAgdGVtcEEgPSBnZXRQYXJlbnQkMSh0ZW1wQSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZGVwdGhBKys7XG4gICAgICAgICAgICB0ZW1wQSA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciB0ZW1wQiA9IHRhcmdldEluc3Q7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCQxKHRlbXBCKSlcbiAgICAgICAgICAgICAgdGVtcEErKztcbiAgICAgICAgICAgIGZvciAoOyAwIDwgZGVwdGhBIC0gdGVtcEE7IClcbiAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCA9IGdldFBhcmVudCQxKEpTQ29tcGlsZXJfdGVtcCkpLCBkZXB0aEEtLTtcbiAgICAgICAgICAgIGZvciAoOyAwIDwgdGVtcEEgLSBkZXB0aEE7IClcbiAgICAgICAgICAgICAgKHRhcmdldEluc3QgPSBnZXRQYXJlbnQkMSh0YXJnZXRJbnN0KSksIHRlbXBBLS07XG4gICAgICAgICAgICBmb3IgKDsgZGVwdGhBLS07ICkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID09PSB0YXJnZXRJbnN0IHx8XG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID09PSB0YXJnZXRJbnN0LmFsdGVybmF0ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gZ2V0UGFyZW50JDEoSlNDb21waWxlcl90ZW1wKTtcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCA9IGdldFBhcmVudCQxKHRhcmdldEluc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgSlNDb21waWxlcl90ZW1wID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgdGFyZ2V0SW5zdCA9IEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wID0gdGFyZ2V0SW5zdCA9PT0gcmVzcG9uZGVySW5zdDtcbiAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgIHNob3VsZFNldEV2ZW50VHlwZSxcbiAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZFNldEV2ZW50VHlwZS50b3VjaEhpc3RvcnkgPVxuICAgICAgICAgIFJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnRvdWNoSGlzdG9yeTtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wXG4gICAgICAgICAgPyBmb3JFYWNoQWNjdW11bGF0ZWQoXG4gICAgICAgICAgICAgIHNob3VsZFNldEV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXRcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGZvckVhY2hBY2N1bXVsYXRlZChcbiAgICAgICAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlJDFcbiAgICAgICAgICAgICk7XG4gICAgICAgIGI6IHtcbiAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBzaG91bGRTZXRFdmVudFR5cGUuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgICAgICAgIHRhcmdldEluc3QgPSBzaG91bGRTZXRFdmVudFR5cGUuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChKU0NvbXBpbGVyX3RlbXApKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgZGVwdGhBID0gMDtcbiAgICAgICAgICAgICAgZGVwdGhBIDwgSlNDb21waWxlcl90ZW1wLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhc2hvdWxkU2V0RXZlbnRUeXBlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7XG4gICAgICAgICAgICAgIGRlcHRoQSsrXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcFtkZXB0aEFdKHNob3VsZFNldEV2ZW50VHlwZSwgdGFyZ2V0SW5zdFtkZXB0aEFdKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSB0YXJnZXRJbnN0W2RlcHRoQV07XG4gICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wICYmXG4gICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAoc2hvdWxkU2V0RXZlbnRUeXBlLCB0YXJnZXRJbnN0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgfVxuICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlLl9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG4gICAgICAgIHNob3VsZFNldEV2ZW50VHlwZS5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUuaXNQZXJzaXN0ZW50KCkgfHxcbiAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUuY29uc3RydWN0b3IucmVsZWFzZShzaG91bGRTZXRFdmVudFR5cGUpO1xuICAgICAgICBpZiAoSlNDb21waWxlcl90ZW1wICYmIEpTQ29tcGlsZXJfdGVtcCAhPT0gcmVzcG9uZGVySW5zdClcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKHNob3VsZFNldEV2ZW50VHlwZSA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICAgICAgZXZlbnRUeXBlcy5yZXNwb25kZXJHcmFudCxcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKHNob3VsZFNldEV2ZW50VHlwZS50b3VjaEhpc3RvcnkgPVxuICAgICAgICAgICAgICBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS50b3VjaEhpc3RvcnkpLFxuICAgICAgICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKFxuICAgICAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlJDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAodGFyZ2V0SW5zdCA9ICEwID09PSBleGVjdXRlRGlyZWN0RGlzcGF0Y2goc2hvdWxkU2V0RXZlbnRUeXBlKSksXG4gICAgICAgICAgICByZXNwb25kZXJJbnN0KVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChkZXB0aEEgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlcy5yZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uZGVySW5zdCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGRlcHRoQS50b3VjaEhpc3RvcnkgPSBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS50b3VjaEhpc3RvcnkpLFxuICAgICAgICAgICAgICBmb3JFYWNoQWNjdW11bGF0ZWQoZGVwdGhBLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxKSxcbiAgICAgICAgICAgICAgKHRlbXBBID1cbiAgICAgICAgICAgICAgICAhZGVwdGhBLl9kaXNwYXRjaExpc3RlbmVycyB8fCBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZGVwdGhBKSksXG4gICAgICAgICAgICAgIGRlcHRoQS5pc1BlcnNpc3RlbnQoKSB8fCBkZXB0aEEuY29uc3RydWN0b3IucmVsZWFzZShkZXB0aEEpLFxuICAgICAgICAgICAgICB0ZW1wQSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBkZXB0aEEgPSBSZXNwb25kZXJTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlcy5yZXNwb25kZXJUZXJtaW5hdGUsXG4gICAgICAgICAgICAgICAgcmVzcG9uZGVySW5zdCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkZXB0aEEudG91Y2hIaXN0b3J5ID0gUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5O1xuICAgICAgICAgICAgICBmb3JFYWNoQWNjdW11bGF0ZWQoZGVwdGhBLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxKTtcbiAgICAgICAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCA9IGFjY3VtdWxhdGUoXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgIFtzaG91bGRTZXRFdmVudFR5cGUsIGRlcHRoQV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY2hhbmdlUmVzcG9uZGVyKEpTQ29tcGlsZXJfdGVtcCwgdGFyZ2V0SW5zdCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKHNob3VsZFNldEV2ZW50VHlwZSA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICAgICAgICBldmVudFR5cGVzLnJlc3BvbmRlclJlamVjdCxcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKHNob3VsZFNldEV2ZW50VHlwZS50b3VjaEhpc3RvcnkgPVxuICAgICAgICAgICAgICAgICAgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUudG91Y2hIaXN0b3J5KSxcbiAgICAgICAgICAgICAgICBmb3JFYWNoQWNjdW11bGF0ZWQoXG4gICAgICAgICAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUsXG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gYWNjdW11bGF0ZShcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICAgIHNob3VsZFNldEV2ZW50VHlwZVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBhY2N1bXVsYXRlKFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAsXG4gICAgICAgICAgICAgIHNob3VsZFNldEV2ZW50VHlwZVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGNoYW5nZVJlc3BvbmRlcihKU0NvbXBpbGVyX3RlbXAsIHRhcmdldEluc3QpO1xuICAgICAgICBlbHNlIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCA9IG51bGw7XG4gICAgICB9IGVsc2UgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gbnVsbDtcbiAgICAgIHNob3VsZFNldEV2ZW50VHlwZSA9IHJlc3BvbmRlckluc3QgJiYgaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpO1xuICAgICAgSlNDb21waWxlcl90ZW1wID0gcmVzcG9uZGVySW5zdCAmJiBpc01vdmVpc2godG9wTGV2ZWxUeXBlKTtcbiAgICAgIHRhcmdldEluc3QgPVxuICAgICAgICByZXNwb25kZXJJbnN0ICYmXG4gICAgICAgIChcInRvcFRvdWNoRW5kXCIgPT09IHRvcExldmVsVHlwZSB8fCBcInRvcFRvdWNoQ2FuY2VsXCIgPT09IHRvcExldmVsVHlwZSk7XG4gICAgICBpZiAoXG4gICAgICAgIChzaG91bGRTZXRFdmVudFR5cGUgPSBzaG91bGRTZXRFdmVudFR5cGVcbiAgICAgICAgICA/IGV2ZW50VHlwZXMucmVzcG9uZGVyU3RhcnRcbiAgICAgICAgICA6IEpTQ29tcGlsZXJfdGVtcFxuICAgICAgICAgID8gZXZlbnRUeXBlcy5yZXNwb25kZXJNb3ZlXG4gICAgICAgICAgOiB0YXJnZXRJbnN0XG4gICAgICAgICAgPyBldmVudFR5cGVzLnJlc3BvbmRlckVuZFxuICAgICAgICAgIDogbnVsbClcbiAgICAgIClcbiAgICAgICAgKHNob3VsZFNldEV2ZW50VHlwZSA9IFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICBzaG91bGRTZXRFdmVudFR5cGUsXG4gICAgICAgICAgcmVzcG9uZGVySW5zdCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICApKSxcbiAgICAgICAgICAoc2hvdWxkU2V0RXZlbnRUeXBlLnRvdWNoSGlzdG9yeSA9XG4gICAgICAgICAgICBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS50b3VjaEhpc3RvcnkpLFxuICAgICAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChcbiAgICAgICAgICAgIHNob3VsZFNldEV2ZW50VHlwZSxcbiAgICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlJDFcbiAgICAgICAgICApLFxuICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBhY2N1bXVsYXRlKFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLFxuICAgICAgICAgICAgc2hvdWxkU2V0RXZlbnRUeXBlXG4gICAgICAgICAgKSk7XG4gICAgICBzaG91bGRTZXRFdmVudFR5cGUgPSByZXNwb25kZXJJbnN0ICYmIFwidG9wVG91Y2hDYW5jZWxcIiA9PT0gdG9wTGV2ZWxUeXBlO1xuICAgICAgaWYgKFxuICAgICAgICAodG9wTGV2ZWxUeXBlID1cbiAgICAgICAgICByZXNwb25kZXJJbnN0ICYmXG4gICAgICAgICAgIXNob3VsZFNldEV2ZW50VHlwZSAmJlxuICAgICAgICAgIChcInRvcFRvdWNoRW5kXCIgPT09IHRvcExldmVsVHlwZSB8fCBcInRvcFRvdWNoQ2FuY2VsXCIgPT09IHRvcExldmVsVHlwZSkpXG4gICAgICApXG4gICAgICAgIGE6IHtcbiAgICAgICAgICBpZiAoKHRvcExldmVsVHlwZSA9IG5hdGl2ZUV2ZW50LnRvdWNoZXMpICYmIDAgIT09IHRvcExldmVsVHlwZS5sZW5ndGgpXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSAwO1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPCB0b3BMZXZlbFR5cGUubGVuZ3RoO1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXArK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKCh0YXJnZXRJbnN0ID0gdG9wTGV2ZWxUeXBlW0pTQ29tcGlsZXJfdGVtcF0udGFyZ2V0KSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IHRhcmdldEluc3QgJiZcbiAgICAgICAgICAgICAgICAgIDAgIT09IHRhcmdldEluc3QpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRlcHRoQSA9IGdldEluc3RhbmNlRnJvbU5vZGUkMSh0YXJnZXRJbnN0KTtcbiAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICBmb3IgKHRhcmdldEluc3QgPSByZXNwb25kZXJJbnN0OyBkZXB0aEE7ICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SW5zdCA9PT0gZGVwdGhBIHx8XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SW5zdCA9PT0gZGVwdGhBLmFsdGVybmF0ZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRJbnN0ID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXB0aEEgPSBnZXRQYXJlbnQkMShkZXB0aEEpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGFyZ2V0SW5zdCA9ICExO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SW5zdCkge1xuICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlID0gITE7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHRvcExldmVsVHlwZSA9ICEwO1xuICAgICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICh0b3BMZXZlbFR5cGUgPSBzaG91bGRTZXRFdmVudFR5cGVcbiAgICAgICAgICA/IGV2ZW50VHlwZXMucmVzcG9uZGVyVGVybWluYXRlXG4gICAgICAgICAgOiB0b3BMZXZlbFR5cGVcbiAgICAgICAgICA/IGV2ZW50VHlwZXMucmVzcG9uZGVyUmVsZWFzZVxuICAgICAgICAgIDogbnVsbClcbiAgICAgIClcbiAgICAgICAgKG5hdGl2ZUV2ZW50ID0gUmVzcG9uZGVyU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgICByZXNwb25kZXJJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICkpLFxuICAgICAgICAgIChuYXRpdmVFdmVudC50b3VjaEhpc3RvcnkgPSBSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS50b3VjaEhpc3RvcnkpLFxuICAgICAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChuYXRpdmVFdmVudCwgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMSksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCA9IGFjY3VtdWxhdGUoXG4gICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICkpLFxuICAgICAgICAgIGNoYW5nZVJlc3BvbmRlcihudWxsKTtcbiAgICAgIHJldHVybiBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDA7XG4gICAgfSxcbiAgICBHbG9iYWxSZXNwb25kZXJIYW5kbGVyOiBudWxsLFxuICAgIGluamVjdGlvbjoge1xuICAgICAgaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlcjogZnVuY3Rpb24gKEdsb2JhbFJlc3BvbmRlckhhbmRsZXIpIHtcbiAgICAgICAgUmVzcG9uZGVyRXZlbnRQbHVnaW4uR2xvYmFsUmVzcG9uZGVySGFuZGxlciA9IEdsb2JhbFJlc3BvbmRlckhhbmRsZXI7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBldmVudFBsdWdpbk9yZGVyID0gbnVsbCxcbiAgbmFtZXNUb1BsdWdpbnMgPSB7fTtcbmZ1bmN0aW9uIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCkge1xuICBpZiAoZXZlbnRQbHVnaW5PcmRlcilcbiAgICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgICB2YXIgcGx1Z2luTW9kdWxlID0gbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0sXG4gICAgICAgIHBsdWdpbkluZGV4ID0gZXZlbnRQbHVnaW5PcmRlci5pbmRleE9mKHBsdWdpbk5hbWUpO1xuICAgICAgaWYgKC0xID49IHBsdWdpbkluZGV4KVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2lucyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgcGx1Z2luIG9yZGVyaW5nLCBgXCIgK1xuICAgICAgICAgICAgKHBsdWdpbk5hbWUgKyBcImAuXCIpXG4gICAgICAgICk7XG4gICAgICBpZiAoIXBsdWdpbnNbcGx1Z2luSW5kZXhdKSB7XG4gICAgICAgIGlmICghcGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IEV2ZW50IHBsdWdpbnMgbXVzdCBpbXBsZW1lbnQgYW4gYGV4dHJhY3RFdmVudHNgIG1ldGhvZCwgYnV0IGBcIiArXG4gICAgICAgICAgICAgIChwbHVnaW5OYW1lICsgXCJgIGRvZXMgbm90LlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIHBsdWdpbnNbcGx1Z2luSW5kZXhdID0gcGx1Z2luTW9kdWxlO1xuICAgICAgICBwbHVnaW5JbmRleCA9IHBsdWdpbk1vZHVsZS5ldmVudFR5cGVzO1xuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcGx1Z2luSW5kZXgpIHtcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gdm9pZCAwO1xuICAgICAgICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IHBsdWdpbkluZGV4W2V2ZW50TmFtZV07XG4gICAgICAgICAgaWYgKGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgZXZlbnQgbmFtZSwgYFwiICtcbiAgICAgICAgICAgICAgICAoZXZlbnROYW1lICsgXCJgLlwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3NbZXZlbnROYW1lXSA9IGRpc3BhdGNoQ29uZmlnO1xuICAgICAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO1xuICAgICAgICAgIGlmIChwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgICAgICAgZm9yIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgaW4gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpXG4gICAgICAgICAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoXG4gICAgICAgICAgICAgICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc1tKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRdLFxuICAgICAgICAgICAgICAgICAgcGx1Z2luTW9kdWxlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZVxuICAgICAgICAgICAgICA/IChwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMCkpXG4gICAgICAgICAgICAgIDogKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExKTtcbiAgICAgICAgICBpZiAoIUpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdClcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IEZhaWxlZCB0byBwdWJsaXNoIGV2ZW50IGBcIiArXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lICtcbiAgICAgICAgICAgICAgICBcImAgZm9yIHBsdWdpbiBgXCIgK1xuICAgICAgICAgICAgICAgIHBsdWdpbk5hbWUgK1xuICAgICAgICAgICAgICAgIFwiYC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSkge1xuICBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0pXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lIHJlZ2lzdHJhdGlvbiBuYW1lLCBgXCIgK1xuICAgICAgICAocmVnaXN0cmF0aW9uTmFtZSArIFwiYC5cIilcbiAgICApO1xuICByZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSA9IHBsdWdpbk1vZHVsZTtcbn1cbnZhciBwbHVnaW5zID0gW10sXG4gIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyA9IHt9LFxuICByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IHt9O1xuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICBpbnN0ID0gaW5zdC5zdGF0ZU5vZGU7XG4gIGlmIChudWxsID09PSBpbnN0KSByZXR1cm4gbnVsbDtcbiAgaW5zdCA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMShpbnN0KTtcbiAgaWYgKG51bGwgPT09IGluc3QpIHJldHVybiBudWxsO1xuICBpZiAoKGluc3QgPSBpbnN0W3JlZ2lzdHJhdGlvbk5hbWVdKSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0KVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJFeHBlY3RlZCBgXCIgK1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lICtcbiAgICAgICAgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICtcbiAgICAgICAgdHlwZW9mIGluc3QgK1xuICAgICAgICBcImAgdHlwZS5cIlxuICAgICk7XG4gIHJldHVybiBpbnN0O1xufVxudmFyIGN1c3RvbUJ1YmJsaW5nRXZlbnRUeXBlcyA9XG4gICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0TmF0aXZlVmlld0NvbmZpZ1JlZ2lzdHJ5XG4gICAgICAuY3VzdG9tQnViYmxpbmdFdmVudFR5cGVzLFxuICBjdXN0b21EaXJlY3RFdmVudFR5cGVzID1cbiAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnlcbiAgICAgIC5jdXN0b21EaXJlY3RFdmVudFR5cGVzO1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyhpbnN0LCBwaGFzZSwgZXZlbnQpIHtcbiAgaWYgKFxuICAgIChwaGFzZSA9IGdldExpc3RlbmVyKFxuICAgICAgaW5zdCxcbiAgICAgIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlXVxuICAgICkpXG4gIClcbiAgICAoZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oXG4gICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsXG4gICAgICBwaGFzZVxuICAgICkpLFxuICAgICAgKGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IGFjY3VtdWxhdGVJbnRvKFxuICAgICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsXG4gICAgICAgIGluc3RcbiAgICAgICkpO1xufVxuZnVuY3Rpb24gdHJhdmVyc2VUd29QaGFzZShpbnN0LCBmbiwgYXJnLCBza2lwQnViYmxpbmcpIHtcbiAgZm9yICh2YXIgcGF0aCA9IFtdOyBpbnN0OyApIHtcbiAgICBwYXRoLnB1c2goaW5zdCk7XG4gICAgZG8gaW5zdCA9IGluc3QucmV0dXJuO1xuICAgIHdoaWxlIChpbnN0ICYmIDUgIT09IGluc3QudGFnKTtcbiAgICBpbnN0ID0gaW5zdCA/IGluc3QgOiBudWxsO1xuICB9XG4gIGZvciAoaW5zdCA9IHBhdGgubGVuZ3RoOyAwIDwgaW5zdC0tOyApIGZuKHBhdGhbaW5zdF0sIFwiY2FwdHVyZWRcIiwgYXJnKTtcbiAgaWYgKHNraXBCdWJibGluZykgZm4ocGF0aFswXSwgXCJidWJibGVkXCIsIGFyZyk7XG4gIGVsc2VcbiAgICBmb3IgKGluc3QgPSAwOyBpbnN0IDwgcGF0aC5sZW5ndGg7IGluc3QrKykgZm4ocGF0aFtpbnN0XSwgXCJidWJibGVkXCIsIGFyZyk7XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gIGV2ZW50ICYmXG4gICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgJiZcbiAgICB0cmF2ZXJzZVR3b1BoYXNlKFxuICAgICAgZXZlbnQuX3RhcmdldEluc3QsXG4gICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzLFxuICAgICAgZXZlbnQsXG4gICAgICAhMVxuICAgICk7XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBpbnN0ID0gZXZlbnQuX3RhcmdldEluc3Q7XG4gICAgaWYgKGluc3QgJiYgZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdCwgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgICBsaXN0ZW5lciAmJlxuICAgICAgICAoKGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IGFjY3VtdWxhdGVJbnRvKFxuICAgICAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICApKSxcbiAgICAgICAgKGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IGFjY3VtdWxhdGVJbnRvKFxuICAgICAgICAgIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyxcbiAgICAgICAgICBpbnN0XG4gICAgICAgICkpKTtcbiAgICB9XG4gIH1cbn1cbmlmIChldmVudFBsdWdpbk9yZGVyKVxuICB0aHJvdyBFcnJvcihcbiAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2luIG9yZGVyaW5nIG1vcmUgdGhhbiBvbmNlLiBZb3UgYXJlIGxpa2VseSB0cnlpbmcgdG8gbG9hZCBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QuXCJcbiAgKTtcbmV2ZW50UGx1Z2luT3JkZXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChbXG4gIFwiUmVzcG9uZGVyRXZlbnRQbHVnaW5cIixcbiAgXCJSZWFjdE5hdGl2ZUJyaWRnZUV2ZW50UGx1Z2luXCJcbl0pO1xucmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbnZhciBpbmplY3RlZE5hbWVzVG9QbHVnaW5zJGpzY29tcCRpbmxpbmVfMjMyID0ge1xuICAgIFJlc3BvbmRlckV2ZW50UGx1Z2luOiBSZXNwb25kZXJFdmVudFBsdWdpbixcbiAgICBSZWFjdE5hdGl2ZUJyaWRnZUV2ZW50UGx1Z2luOiB7XG4gICAgICBldmVudFR5cGVzOiB7fSxcbiAgICAgIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uIChcbiAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICkge1xuICAgICAgICBpZiAobnVsbCA9PSB0YXJnZXRJbnN0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGJ1YmJsZURpc3BhdGNoQ29uZmlnID0gY3VzdG9tQnViYmxpbmdFdmVudFR5cGVzW3RvcExldmVsVHlwZV0sXG4gICAgICAgICAgZGlyZWN0RGlzcGF0Y2hDb25maWcgPSBjdXN0b21EaXJlY3RFdmVudFR5cGVzW3RvcExldmVsVHlwZV07XG4gICAgICAgIGlmICghYnViYmxlRGlzcGF0Y2hDb25maWcgJiYgIWRpcmVjdERpc3BhdGNoQ29uZmlnKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIHRvcCBsZXZlbCBldmVudCB0eXBlIFwiJyArIHRvcExldmVsVHlwZSArICdcIiBkaXNwYXRjaGVkJ1xuICAgICAgICAgICk7XG4gICAgICAgIHRvcExldmVsVHlwZSA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICBidWJibGVEaXNwYXRjaENvbmZpZyB8fCBkaXJlY3REaXNwYXRjaENvbmZpZyxcbiAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICk7XG4gICAgICAgIGlmIChidWJibGVEaXNwYXRjaENvbmZpZylcbiAgICAgICAgICBudWxsICE9IHRvcExldmVsVHlwZSAmJlxuICAgICAgICAgIG51bGwgIT0gdG9wTGV2ZWxUeXBlLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzICYmXG4gICAgICAgICAgdG9wTGV2ZWxUeXBlLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLnNraXBCdWJibGluZ1xuICAgICAgICAgICAgPyB0b3BMZXZlbFR5cGUgJiZcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzICYmXG4gICAgICAgICAgICAgIHRyYXZlcnNlVHdvUGhhc2UoXG4gICAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlLl90YXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsXG4gICAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogZm9yRWFjaEFjY3VtdWxhdGVkKFxuICAgICAgICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgaWYgKGRpcmVjdERpc3BhdGNoQ29uZmlnKVxuICAgICAgICAgIGZvckVhY2hBY2N1bXVsYXRlZCh0b3BMZXZlbFR5cGUsIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKTtcbiAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRvcExldmVsVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGlzT3JkZXJpbmdEaXJ0eSRqc2NvbXAkaW5saW5lXzIzMyA9ICExLFxuICBwbHVnaW5OYW1lJGpzY29tcCRpbmxpbmVfMjM0O1xuZm9yIChwbHVnaW5OYW1lJGpzY29tcCRpbmxpbmVfMjM0IGluIGluamVjdGVkTmFtZXNUb1BsdWdpbnMkanNjb21wJGlubGluZV8yMzIpXG4gIGlmIChcbiAgICBpbmplY3RlZE5hbWVzVG9QbHVnaW5zJGpzY29tcCRpbmxpbmVfMjMyLmhhc093blByb3BlcnR5KFxuICAgICAgcGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzIzNFxuICAgIClcbiAgKSB7XG4gICAgdmFyIHBsdWdpbk1vZHVsZSRqc2NvbXAkaW5saW5lXzIzNSA9XG4gICAgICBpbmplY3RlZE5hbWVzVG9QbHVnaW5zJGpzY29tcCRpbmxpbmVfMjMyW3BsdWdpbk5hbWUkanNjb21wJGlubGluZV8yMzRdO1xuICAgIGlmIChcbiAgICAgICFuYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1lJGpzY29tcCRpbmxpbmVfMjM0KSB8fFxuICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzIzNF0gIT09XG4gICAgICAgIHBsdWdpbk1vZHVsZSRqc2NvbXAkaW5saW5lXzIzNVxuICAgICkge1xuICAgICAgaWYgKG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWUkanNjb21wJGlubGluZV8yMzRdKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgdHdvIGRpZmZlcmVudCBldmVudCBwbHVnaW5zIHVzaW5nIHRoZSBzYW1lIG5hbWUsIGBcIiArXG4gICAgICAgICAgICAocGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzIzNCArIFwiYC5cIilcbiAgICAgICAgKTtcbiAgICAgIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWUkanNjb21wJGlubGluZV8yMzRdID1cbiAgICAgICAgcGx1Z2luTW9kdWxlJGpzY29tcCRpbmxpbmVfMjM1O1xuICAgICAgaXNPcmRlcmluZ0RpcnR5JGpzY29tcCRpbmxpbmVfMjMzID0gITA7XG4gICAgfVxuICB9XG5pc09yZGVyaW5nRGlydHkkanNjb21wJGlubGluZV8yMzMgJiYgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbnZhciBlbXB0eU9iamVjdCA9IHt9LFxuICByZW1vdmVkS2V5cyA9IG51bGwsXG4gIHJlbW92ZWRLZXlDb3VudCA9IDAsXG4gIGRlZXBEaWZmZXJPcHRpb25zID0geyB1bnNhZmVseUlnbm9yZUZ1bmN0aW9uczogITAgfTtcbmZ1bmN0aW9uIGRlZmF1bHREaWZmZXIocHJldlByb3AsIG5leHRQcm9wKSB7XG4gIHJldHVybiBcIm9iamVjdFwiICE9PSB0eXBlb2YgbmV4dFByb3AgfHwgbnVsbCA9PT0gbmV4dFByb3BcbiAgICA/ICEwXG4gICAgOiBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZGVlcERpZmZlcihcbiAgICAgICAgcHJldlByb3AsXG4gICAgICAgIG5leHRQcm9wLFxuICAgICAgICBkZWVwRGlmZmVyT3B0aW9uc1xuICAgICAgKTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheShcbiAgdXBkYXRlUGF5bG9hZCxcbiAgbm9kZSxcbiAgdmFsaWRBdHRyaWJ1dGVzXG4pIHtcbiAgaWYgKGlzQXJyYXlJbXBsKG5vZGUpKVxuICAgIGZvciAodmFyIGkgPSBub2RlLmxlbmd0aDsgaS0tICYmIDAgPCByZW1vdmVkS2V5Q291bnQ7IClcbiAgICAgIHJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheShcbiAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgbm9kZVtpXSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICBlbHNlIGlmIChub2RlICYmIDAgPCByZW1vdmVkS2V5Q291bnQpXG4gICAgZm9yIChpIGluIHJlbW92ZWRLZXlzKVxuICAgICAgaWYgKHJlbW92ZWRLZXlzW2ldKSB7XG4gICAgICAgIHZhciBuZXh0UHJvcCA9IG5vZGVbaV07XG4gICAgICAgIGlmICh2b2lkIDAgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgdmFyIGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1tpXTtcbiAgICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnKSB7XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXh0UHJvcCAmJiAobmV4dFByb3AgPSAhMCk7XG4gICAgICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgbmV4dFByb3AgJiYgKG5leHRQcm9wID0gbnVsbCk7XG4gICAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZylcbiAgICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFtpXSA9IG5leHRQcm9wO1xuICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmIHx8XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIChuZXh0UHJvcCA9XG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3NcbiAgICAgICAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MobmV4dFByb3ApXG4gICAgICAgICAgICAgICAgICA6IG5leHRQcm9wKSxcbiAgICAgICAgICAgICAgICAodXBkYXRlUGF5bG9hZFtpXSA9IG5leHRQcm9wKTtcbiAgICAgICAgICAgIHJlbW92ZWRLZXlzW2ldID0gITE7XG4gICAgICAgICAgICByZW1vdmVkS2V5Q291bnQtLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbn1cbmZ1bmN0aW9uIGRpZmZOZXN0ZWRQcm9wZXJ0eShcbiAgdXBkYXRlUGF5bG9hZCxcbiAgcHJldlByb3AsXG4gIG5leHRQcm9wLFxuICB2YWxpZEF0dHJpYnV0ZXNcbikge1xuICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgcHJldlByb3AgPT09IG5leHRQcm9wKSByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgaWYgKCFwcmV2UHJvcCB8fCAhbmV4dFByb3ApXG4gICAgcmV0dXJuIG5leHRQcm9wXG4gICAgICA/IGFkZE5lc3RlZFByb3BlcnR5KHVwZGF0ZVBheWxvYWQsIG5leHRQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpXG4gICAgICA6IHByZXZQcm9wXG4gICAgICA/IGNsZWFyTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgcHJldlByb3AsIHZhbGlkQXR0cmlidXRlcylcbiAgICAgIDogdXBkYXRlUGF5bG9hZDtcbiAgaWYgKCFpc0FycmF5SW1wbChwcmV2UHJvcCkgJiYgIWlzQXJyYXlJbXBsKG5leHRQcm9wKSlcbiAgICByZXR1cm4gZGlmZlByb3BlcnRpZXModXBkYXRlUGF5bG9hZCwgcHJldlByb3AsIG5leHRQcm9wLCB2YWxpZEF0dHJpYnV0ZXMpO1xuICBpZiAoaXNBcnJheUltcGwocHJldlByb3ApICYmIGlzQXJyYXlJbXBsKG5leHRQcm9wKSkge1xuICAgIHZhciBtaW5MZW5ndGggPVxuICAgICAgICBwcmV2UHJvcC5sZW5ndGggPCBuZXh0UHJvcC5sZW5ndGggPyBwcmV2UHJvcC5sZW5ndGggOiBuZXh0UHJvcC5sZW5ndGgsXG4gICAgICBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW5ndGg7IGkrKylcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBkaWZmTmVzdGVkUHJvcGVydHkoXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgIHByZXZQcm9wW2ldLFxuICAgICAgICBuZXh0UHJvcFtpXSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIGZvciAoOyBpIDwgcHJldlByb3AubGVuZ3RoOyBpKyspXG4gICAgICB1cGRhdGVQYXlsb2FkID0gY2xlYXJOZXN0ZWRQcm9wZXJ0eShcbiAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgcHJldlByb3BbaV0sXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKTtcbiAgICBmb3IgKDsgaSA8IG5leHRQcm9wLmxlbmd0aDsgaSsrKVxuICAgICAgdXBkYXRlUGF5bG9hZCA9IGFkZE5lc3RlZFByb3BlcnR5KFxuICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICBuZXh0UHJvcFtpXSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICB9XG4gIHJldHVybiBpc0FycmF5SW1wbChwcmV2UHJvcClcbiAgICA/IGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZmxhdHRlblN0eWxlKHByZXZQcm9wKSxcbiAgICAgICAgbmV4dFByb3AsXG4gICAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICAgKVxuICAgIDogZGlmZlByb3BlcnRpZXMoXG4gICAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICAgIHByZXZQcm9wLFxuICAgICAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuZmxhdHRlblN0eWxlKG5leHRQcm9wKSxcbiAgICAgICAgdmFsaWRBdHRyaWJ1dGVzXG4gICAgICApO1xufVxuZnVuY3Rpb24gYWRkTmVzdGVkUHJvcGVydHkodXBkYXRlUGF5bG9hZCwgbmV4dFByb3AsIHZhbGlkQXR0cmlidXRlcykge1xuICBpZiAoIW5leHRQcm9wKSByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbiAgaWYgKCFpc0FycmF5SW1wbChuZXh0UHJvcCkpXG4gICAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKFxuICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgIGVtcHR5T2JqZWN0LFxuICAgICAgbmV4dFByb3AsXG4gICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICApO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRQcm9wLmxlbmd0aDsgaSsrKVxuICAgIHVwZGF0ZVBheWxvYWQgPSBhZGROZXN0ZWRQcm9wZXJ0eShcbiAgICAgIHVwZGF0ZVBheWxvYWQsXG4gICAgICBuZXh0UHJvcFtpXSxcbiAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICk7XG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gY2xlYXJOZXN0ZWRQcm9wZXJ0eSh1cGRhdGVQYXlsb2FkLCBwcmV2UHJvcCwgdmFsaWRBdHRyaWJ1dGVzKSB7XG4gIGlmICghcHJldlByb3ApIHJldHVybiB1cGRhdGVQYXlsb2FkO1xuICBpZiAoIWlzQXJyYXlJbXBsKHByZXZQcm9wKSlcbiAgICByZXR1cm4gZGlmZlByb3BlcnRpZXMoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldlByb3AsXG4gICAgICBlbXB0eU9iamVjdCxcbiAgICAgIHZhbGlkQXR0cmlidXRlc1xuICAgICk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldlByb3AubGVuZ3RoOyBpKyspXG4gICAgdXBkYXRlUGF5bG9hZCA9IGNsZWFyTmVzdGVkUHJvcGVydHkoXG4gICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgcHJldlByb3BbaV0sXG4gICAgICB2YWxpZEF0dHJpYnV0ZXNcbiAgICApO1xuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKHVwZGF0ZVBheWxvYWQsIHByZXZQcm9wcywgbmV4dFByb3BzLCB2YWxpZEF0dHJpYnV0ZXMpIHtcbiAgdmFyIGF0dHJpYnV0ZUNvbmZpZywgcHJvcEtleTtcbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcylcbiAgICBpZiAoKGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1twcm9wS2V5XSkpIHtcbiAgICAgIHZhciBwcmV2UHJvcCA9IHByZXZQcm9wc1twcm9wS2V5XTtcbiAgICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5leHRQcm9wICYmXG4gICAgICAgICgobmV4dFByb3AgPSAhMCksIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZQcm9wICYmIChwcmV2UHJvcCA9ICEwKSk7XG4gICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgbmV4dFByb3AgJiZcbiAgICAgICAgKChuZXh0UHJvcCA9IG51bGwpLFxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgcHJldlByb3AgJiYgKHByZXZQcm9wID0gbnVsbCkpO1xuICAgICAgcmVtb3ZlZEtleXMgJiYgKHJlbW92ZWRLZXlzW3Byb3BLZXldID0gITEpO1xuICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgJiYgdm9pZCAwICE9PSB1cGRhdGVQYXlsb2FkW3Byb3BLZXldKVxuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZylcbiAgICAgICAgICB1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gbmV4dFByb3A7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmIHx8XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2Vzc1xuICAgICAgICAgIClcbiAgICAgICAgICAgIChhdHRyaWJ1dGVDb25maWcgPVxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2Vzc1xuICAgICAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLnByb2Nlc3MobmV4dFByb3ApXG4gICAgICAgICAgICAgICAgOiBuZXh0UHJvcCksXG4gICAgICAgICAgICAgICh1cGRhdGVQYXlsb2FkW3Byb3BLZXldID0gYXR0cmlidXRlQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAocHJldlByb3AgIT09IG5leHRQcm9wKVxuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZylcbiAgICAgICAgICBkZWZhdWx0RGlmZmVyKHByZXZQcm9wLCBuZXh0UHJvcCkgJiZcbiAgICAgICAgICAgICgodXBkYXRlUGF5bG9hZCB8fCAodXBkYXRlUGF5bG9hZCA9IHt9KSlbcHJvcEtleV0gPSBuZXh0UHJvcCk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdm9pZCAwID09PSBwcmV2UHJvcCB8fFxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5kaWZmXG4gICAgICAgICAgICAgID8gYXR0cmlidXRlQ29uZmlnLmRpZmYocHJldlByb3AsIG5leHRQcm9wKVxuICAgICAgICAgICAgICA6IGRlZmF1bHREaWZmZXIocHJldlByb3AsIG5leHRQcm9wKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICAoYXR0cmlidXRlQ29uZmlnID1cbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLnByb2Nlc3NcbiAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZUNvbmZpZy5wcm9jZXNzKG5leHRQcm9wKVxuICAgICAgICAgICAgICAgIDogbmV4dFByb3ApLFxuICAgICAgICAgICAgICAoKHVwZGF0ZVBheWxvYWQgfHwgKHVwZGF0ZVBheWxvYWQgPSB7fSkpW3Byb3BLZXldID1cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDb25maWcpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAocmVtb3ZlZEtleXMgPSBudWxsKSxcbiAgICAgICAgICAgIChyZW1vdmVkS2V5Q291bnQgPSAwKSxcbiAgICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gZGlmZk5lc3RlZFByb3BlcnR5KFxuICAgICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgICBwcmV2UHJvcCxcbiAgICAgICAgICAgICAgbmV4dFByb3AsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZUNvbmZpZ1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAwIDwgcmVtb3ZlZEtleUNvdW50ICYmXG4gICAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgJiZcbiAgICAgICAgICAgICAgKHJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheShcbiAgICAgICAgICAgICAgICB1cGRhdGVQYXlsb2FkLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUNvbmZpZ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAocmVtb3ZlZEtleXMgPSBudWxsKSk7XG4gICAgfVxuICBmb3IgKHZhciBwcm9wS2V5JDEgaW4gcHJldlByb3BzKVxuICAgIHZvaWQgMCA9PT0gbmV4dFByb3BzW3Byb3BLZXkkMV0gJiZcbiAgICAgICghKGF0dHJpYnV0ZUNvbmZpZyA9IHZhbGlkQXR0cmlidXRlc1twcm9wS2V5JDFdKSB8fFxuICAgICAgICAodXBkYXRlUGF5bG9hZCAmJiB2b2lkIDAgIT09IHVwZGF0ZVBheWxvYWRbcHJvcEtleSQxXSkgfHxcbiAgICAgICAgKChwcmV2UHJvcCA9IHByZXZQcm9wc1twcm9wS2V5JDFdKSxcbiAgICAgICAgdm9pZCAwICE9PSBwcmV2UHJvcCAmJlxuICAgICAgICAgIChcIm9iamVjdFwiICE9PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmRpZmYgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcucHJvY2Vzc1xuICAgICAgICAgICAgPyAoKCh1cGRhdGVQYXlsb2FkIHx8ICh1cGRhdGVQYXlsb2FkID0ge30pKVtwcm9wS2V5JDFdID0gbnVsbCksXG4gICAgICAgICAgICAgIHJlbW92ZWRLZXlzIHx8IChyZW1vdmVkS2V5cyA9IHt9KSxcbiAgICAgICAgICAgICAgcmVtb3ZlZEtleXNbcHJvcEtleSQxXSB8fFxuICAgICAgICAgICAgICAgICgocmVtb3ZlZEtleXNbcHJvcEtleSQxXSA9ICEwKSwgcmVtb3ZlZEtleUNvdW50KyspKVxuICAgICAgICAgICAgOiAodXBkYXRlUGF5bG9hZCA9IGNsZWFyTmVzdGVkUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCxcbiAgICAgICAgICAgICAgICBwcmV2UHJvcCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDb25maWdcbiAgICAgICAgICAgICAgKSkpKSk7XG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXNJbXBsKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufVxudmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITE7XG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBib29ra2VlcGluZykge1xuICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHJldHVybiBmbihib29ra2VlcGluZyk7XG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITA7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzSW1wbChmbiwgYm9va2tlZXBpbmcpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITE7XG4gIH1cbn1cbnZhciBldmVudFF1ZXVlID0gbnVsbDtcbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVRvcExldmVsKGUpIHtcbiAgaWYgKGUpIHtcbiAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBlLl9kaXNwYXRjaExpc3RlbmVycyxcbiAgICAgIGRpc3BhdGNoSW5zdGFuY2VzID0gZS5fZGlzcGF0Y2hJbnN0YW5jZXM7XG4gICAgaWYgKGlzQXJyYXlJbXBsKGRpc3BhdGNoTGlzdGVuZXJzKSlcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCAmJiAhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgICBpKytcbiAgICAgIClcbiAgICAgICAgZXhlY3V0ZURpc3BhdGNoKGUsIGRpc3BhdGNoTGlzdGVuZXJzW2ldLCBkaXNwYXRjaEluc3RhbmNlc1tpXSk7XG4gICAgZWxzZVxuICAgICAgZGlzcGF0Y2hMaXN0ZW5lcnMgJiZcbiAgICAgICAgZXhlY3V0ZURpc3BhdGNoKGUsIGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaEluc3RhbmNlcyk7XG4gICAgZS5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICAgIGUuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbiAgICBlLmlzUGVyc2lzdGVudCgpIHx8IGUuY29uc3RydWN0b3IucmVsZWFzZShlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudCh0YXJnZXQsIHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIGV2ZW50VGFyZ2V0ID0gbnVsbDtcbiAgaWYgKG51bGwgIT0gdGFyZ2V0KSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IHRhcmdldC5zdGF0ZU5vZGU7XG4gICAgbnVsbCAhPSBzdGF0ZU5vZGUgJiYgKGV2ZW50VGFyZ2V0ID0gZ2V0UHVibGljSW5zdGFuY2Uoc3RhdGVOb2RlKSk7XG4gIH1cbiAgYmF0Y2hlZFVwZGF0ZXMkMShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV2ZW50ID0geyBldmVudE5hbWU6IHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50IH07XG4gICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJhd0V2ZW50RW1pdHRlci5lbWl0KHRvcExldmVsVHlwZSwgZXZlbnQpO1xuICAgIFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5SYXdFdmVudEVtaXR0ZXIuZW1pdChcIipcIiwgZXZlbnQpO1xuICAgIGV2ZW50ID0gZXZlbnRUYXJnZXQ7XG4gICAgZm9yIChcbiAgICAgIHZhciBldmVudHMgPSBudWxsLCBsZWdhY3lQbHVnaW5zID0gcGx1Z2lucywgaSA9IDA7XG4gICAgICBpIDwgbGVnYWN5UGx1Z2lucy5sZW5ndGg7XG4gICAgICBpKytcbiAgICApIHtcbiAgICAgIHZhciBwb3NzaWJsZVBsdWdpbiA9IGxlZ2FjeVBsdWdpbnNbaV07XG4gICAgICBwb3NzaWJsZVBsdWdpbiAmJlxuICAgICAgICAocG9zc2libGVQbHVnaW4gPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKFxuICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgZXZlbnRcbiAgICAgICAgKSkgJiZcbiAgICAgICAgKGV2ZW50cyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50cywgcG9zc2libGVQbHVnaW4pKTtcbiAgICB9XG4gICAgZXZlbnQgPSBldmVudHM7XG4gICAgbnVsbCAhPT0gZXZlbnQgJiYgKGV2ZW50UXVldWUgPSBhY2N1bXVsYXRlSW50byhldmVudFF1ZXVlLCBldmVudCkpO1xuICAgIGV2ZW50ID0gZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChldmVudCwgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwpO1xuICAgICAgaWYgKGV2ZW50UXVldWUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwicHJvY2Vzc0V2ZW50UXVldWUoKTogQWRkaXRpb25hbCBldmVudHMgd2VyZSBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nIGFuIGV2ZW50IHF1ZXVlLiBTdXBwb3J0IGZvciB0aGlzIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIGlmIChoYXNSZXRocm93RXJyb3IpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAoKGV2ZW50ID0gcmV0aHJvd0Vycm9yKSxcbiAgICAgICAgICAoaGFzUmV0aHJvd0Vycm9yID0gITEpLFxuICAgICAgICAgIChyZXRocm93RXJyb3IgPSBudWxsKSxcbiAgICAgICAgICBldmVudClcbiAgICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxudmFyIHNjaGVkdWxlQ2FsbGJhY2skMiA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICBjYW5jZWxDYWxsYmFjayQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFxuICBzaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZCxcbiAgcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludCxcbiAgbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksXG4gIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICBOb3JtYWxQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgIFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELFxuICByZW5kZXJlcklEID0gbnVsbCxcbiAgaW5qZWN0ZWRIb29rID0gbnVsbDtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290KSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KVxuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QoXG4gICAgICAgIHJlbmRlcmVySUQsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgMTI4ID09PSAocm9vdC5jdXJyZW50LmZsYWdzICYgMTI4KVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHt9XG59XG52YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2ssXG4gIGxvZyA9IE1hdGgubG9nLFxuICBMTjIgPSBNYXRoLkxOMjtcbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICB4ID4+Pj0gMDtcbiAgcmV0dXJuIDAgPT09IHggPyAzMiA6ICgzMSAtICgobG9nKHgpIC8gTE4yKSB8IDApKSB8IDA7XG59XG52YXIgbmV4dFRyYW5zaXRpb25MYW5lID0gMTI4LFxuICBuZXh0UmV0cnlMYW5lID0gNDE5NDMwNDtcbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nU3luY0xhbmVzID0gbGFuZXMgJiA0MjtcbiAgaWYgKDAgIT09IHBlbmRpbmdTeW5jTGFuZXMpIHJldHVybiBwZW5kaW5nU3luY0xhbmVzO1xuICBzd2l0Y2ggKGxhbmVzICYgLWxhbmVzKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIDQ7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIDg7XG4gICAgY2FzZSAxNjpcbiAgICAgIHJldHVybiAxNjtcbiAgICBjYXNlIDMyOlxuICAgICAgcmV0dXJuIDMyO1xuICAgIGNhc2UgNjQ6XG4gICAgICByZXR1cm4gNjQ7XG4gICAgY2FzZSAxMjg6XG4gICAgY2FzZSAyNTY6XG4gICAgY2FzZSA1MTI6XG4gICAgY2FzZSAxMDI0OlxuICAgIGNhc2UgMjA0ODpcbiAgICBjYXNlIDQwOTY6XG4gICAgY2FzZSA4MTkyOlxuICAgIGNhc2UgMTYzODQ6XG4gICAgY2FzZSAzMjc2ODpcbiAgICBjYXNlIDY1NTM2OlxuICAgIGNhc2UgMTMxMDcyOlxuICAgIGNhc2UgMjYyMTQ0OlxuICAgIGNhc2UgNTI0Mjg4OlxuICAgIGNhc2UgMTA0ODU3NjpcbiAgICBjYXNlIDIwOTcxNTI6XG4gICAgICByZXR1cm4gbGFuZXMgJiA0MTk0MTc2O1xuICAgIGNhc2UgNDE5NDMwNDpcbiAgICBjYXNlIDgzODg2MDg6XG4gICAgY2FzZSAxNjc3NzIxNjpcbiAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgcmV0dXJuIGxhbmVzICYgNjI5MTQ1NjA7XG4gICAgY2FzZSA2NzEwODg2NDpcbiAgICAgIHJldHVybiA2NzEwODg2NDtcbiAgICBjYXNlIDEzNDIxNzcyODpcbiAgICAgIHJldHVybiAxMzQyMTc3Mjg7XG4gICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICByZXR1cm4gMjY4NDM1NDU2O1xuICAgIGNhc2UgNTM2ODcwOTEyOlxuICAgICAgcmV0dXJuIDUzNjg3MDkxMjtcbiAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICByZXR1cm4gMDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGxhbmVzO1xuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICBpZiAoMCA9PT0gcGVuZGluZ0xhbmVzKSByZXR1cm4gMDtcbiAgdmFyIG5leHRMYW5lcyA9IDAsXG4gICAgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICByb290ID0gcm9vdC5waW5nZWRMYW5lcztcbiAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiAxMzQyMTc3Mjc7XG4gIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICA/ICgocGVuZGluZ0xhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAwICE9PSBwZW5kaW5nTGFuZXNcbiAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGVuZGluZ0xhbmVzKSlcbiAgICAgICAgOiAoKHJvb3QgJj0gbm9uSWRsZVBlbmRpbmdMYW5lcyksXG4gICAgICAgICAgMCAhPT0gcm9vdCAmJiAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocm9vdCkpKSlcbiAgICA6ICgocGVuZGluZ0xhbmVzICY9IH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAwICE9PSBwZW5kaW5nTGFuZXNcbiAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGVuZGluZ0xhbmVzKSlcbiAgICAgICAgOiAwICE9PSByb290ICYmIChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhyb290KSkpO1xuICByZXR1cm4gMCA9PT0gbmV4dExhbmVzXG4gICAgPyAwXG4gICAgOiAwICE9PSB3aXBMYW5lcyAmJlxuICAgICAgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJlxuICAgICAgMCA9PT0gKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpICYmXG4gICAgICAoKHN1c3BlbmRlZExhbmVzID0gbmV4dExhbmVzICYgLW5leHRMYW5lcyksXG4gICAgICAocm9vdCA9IHdpcExhbmVzICYgLXdpcExhbmVzKSxcbiAgICAgIHN1c3BlbmRlZExhbmVzID49IHJvb3QgfHxcbiAgICAgICAgKDMyID09PSBzdXNwZW5kZWRMYW5lcyAmJiAwICE9PSAocm9vdCAmIDQxOTQxNzYpKSlcbiAgICA/IHdpcExhbmVzXG4gICAgOiBuZXh0TGFuZXM7XG59XG5mdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgc3dpdGNoIChsYW5lKSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgMjpcbiAgICBjYXNlIDQ6XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICAgIGNhc2UgMTY6XG4gICAgY2FzZSAzMjpcbiAgICBjYXNlIDY0OlxuICAgIGNhc2UgMTI4OlxuICAgIGNhc2UgMjU2OlxuICAgIGNhc2UgNTEyOlxuICAgIGNhc2UgMTAyNDpcbiAgICBjYXNlIDIwNDg6XG4gICAgY2FzZSA0MDk2OlxuICAgIGNhc2UgODE5MjpcbiAgICBjYXNlIDE2Mzg0OlxuICAgIGNhc2UgMzI3Njg6XG4gICAgY2FzZSA2NTUzNjpcbiAgICBjYXNlIDEzMTA3MjpcbiAgICBjYXNlIDI2MjE0NDpcbiAgICBjYXNlIDUyNDI4ODpcbiAgICBjYXNlIDEwNDg1NzY6XG4gICAgY2FzZSAyMDk3MTUyOlxuICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgNWUzO1xuICAgIGNhc2UgNDE5NDMwNDpcbiAgICBjYXNlIDgzODg2MDg6XG4gICAgY2FzZSAxNjc3NzIxNjpcbiAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgcmV0dXJuIC0xO1xuICAgIGNhc2UgNjcxMDg4NjQ6XG4gICAgY2FzZSAxMzQyMTc3Mjg6XG4gICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgY2FzZSA1MzY4NzA5MTI6XG4gICAgY2FzZSAxMDczNzQxODI0OlxuICAgICAgcmV0dXJuIC0xO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gLTE7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QsIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcykge1xuICBpZiAocm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcykgcmV0dXJuIDA7XG4gIHJvb3QgPSByb290LnBlbmRpbmdMYW5lcyAmIC01MzY4NzA5MTM7XG4gIHJldHVybiAwICE9PSByb290ID8gcm9vdCA6IHJvb3QgJiA1MzY4NzA5MTIgPyA1MzY4NzA5MTIgOiAwO1xufVxuZnVuY3Rpb24gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSB7XG4gIHZhciBsYW5lID0gbmV4dFRyYW5zaXRpb25MYW5lO1xuICBuZXh0VHJhbnNpdGlvbkxhbmUgPDw9IDE7XG4gIDAgPT09IChuZXh0VHJhbnNpdGlvbkxhbmUgJiA0MTk0MTc2KSAmJiAobmV4dFRyYW5zaXRpb25MYW5lID0gMTI4KTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjbGFpbU5leHRSZXRyeUxhbmUoKSB7XG4gIHZhciBsYW5lID0gbmV4dFJldHJ5TGFuZTtcbiAgbmV4dFJldHJ5TGFuZSA8PD0gMTtcbiAgMCA9PT0gKG5leHRSZXRyeUxhbmUgJiA2MjkxNDU2MCkgJiYgKG5leHRSZXRyeUxhbmUgPSA0MTk0MzA0KTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgZm9yICh2YXIgbGFuZU1hcCA9IFtdLCBpID0gMDsgMzEgPiBpOyBpKyspIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lO1xuICAyNjg0MzU0NTYgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAoKHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwKSwgKHJvb3QucGluZ2VkTGFuZXMgPSAwKSk7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzLCBzcGF3bmVkTGFuZSkge1xuICB2YXIgbm9Mb25nZXJQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IDA7XG4gIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgcmVtYWluaW5nTGFuZXMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIGZvciAoXG4gICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgaGlkZGVuVXBkYXRlcyA9IHJvb3QuaGlkZGVuVXBkYXRlcztcbiAgICAwIDwgbm9Mb25nZXJQZW5kaW5nTGFuZXM7XG5cbiAgKSB7XG4gICAgdmFyIGluZGV4JDUgPSAzMSAtIGNsejMyKG5vTG9uZ2VyUGVuZGluZ0xhbmVzKSxcbiAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDU7XG4gICAgcmVtYWluaW5nTGFuZXNbaW5kZXgkNV0gPSAwO1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleCQ1XSA9IC0xO1xuICAgIHZhciBoaWRkZW5VcGRhdGVzRm9yTGFuZSA9IGhpZGRlblVwZGF0ZXNbaW5kZXgkNV07XG4gICAgaWYgKG51bGwgIT09IGhpZGRlblVwZGF0ZXNGb3JMYW5lKVxuICAgICAgZm9yIChcbiAgICAgICAgaGlkZGVuVXBkYXRlc1tpbmRleCQ1XSA9IG51bGwsIGluZGV4JDUgPSAwO1xuICAgICAgICBpbmRleCQ1IDwgaGlkZGVuVXBkYXRlc0ZvckxhbmUubGVuZ3RoO1xuICAgICAgICBpbmRleCQ1KytcbiAgICAgICkge1xuICAgICAgICB2YXIgdXBkYXRlID0gaGlkZGVuVXBkYXRlc0ZvckxhbmVbaW5kZXgkNV07XG4gICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJiAodXBkYXRlLmxhbmUgJj0gLTUzNjg3MDkxMyk7XG4gICAgICB9XG4gICAgbm9Mb25nZXJQZW5kaW5nTGFuZXMgJj0gfmxhbmU7XG4gIH1cbiAgMCAhPT0gc3Bhd25lZExhbmUgJiYgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIDApO1xufVxuZnVuY3Rpb24gbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIGVudGFuZ2xlZExhbmVzKSB7XG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IHNwYXduZWRMYW5lO1xuICByb290LnN1c3BlbmRlZExhbmVzICY9IH5zcGF3bmVkTGFuZTtcbiAgdmFyIHNwYXduZWRMYW5lSW5kZXggPSAzMSAtIGNsejMyKHNwYXduZWRMYW5lKTtcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBzcGF3bmVkTGFuZTtcbiAgcm9vdC5lbnRhbmdsZW1lbnRzW3NwYXduZWRMYW5lSW5kZXhdID1cbiAgICByb290LmVudGFuZ2xlbWVudHNbc3Bhd25lZExhbmVJbmRleF0gfFxuICAgIDEwNzM3NDE4MjQgfFxuICAgIChlbnRhbmdsZWRMYW5lcyAmIDQxOTQyMTgpO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgdmFyIHJvb3RFbnRhbmdsZWRMYW5lcyA9IChyb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzKTtcbiAgZm9yIChyb290ID0gcm9vdC5lbnRhbmdsZW1lbnRzOyByb290RW50YW5nbGVkTGFuZXM7ICkge1xuICAgIHZhciBpbmRleCQ2ID0gMzEgLSBjbHozMihyb290RW50YW5nbGVkTGFuZXMpLFxuICAgICAgbGFuZSA9IDEgPDwgaW5kZXgkNjtcbiAgICAobGFuZSAmIGVudGFuZ2xlZExhbmVzKSB8IChyb290W2luZGV4JDZdICYgZW50YW5nbGVkTGFuZXMpICYmXG4gICAgICAocm9vdFtpbmRleCQ2XSB8PSBlbnRhbmdsZWRMYW5lcyk7XG4gICAgcm9vdEVudGFuZ2xlZExhbmVzICY9IH5sYW5lO1xuICB9XG59XG52YXIgY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gMDtcbmZ1bmN0aW9uIGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKSB7XG4gIGxhbmVzICY9IC1sYW5lcztcbiAgcmV0dXJuIDIgPCBsYW5lc1xuICAgID8gOCA8IGxhbmVzXG4gICAgICA/IDAgIT09IChsYW5lcyAmIDEzNDIxNzcyNylcbiAgICAgICAgPyAzMlxuICAgICAgICA6IDI2ODQzNTQ1NlxuICAgICAgOiA4XG4gICAgOiAyO1xufVxuZnVuY3Rpb24gc2hpbSQxKCkge1xuICB0aHJvdyBFcnJvcihcbiAgICBcIlRoZSBjdXJyZW50IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgaHlkcmF0aW9uLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICk7XG59XG52YXIgX25hdGl2ZUZhYnJpY1VJTWFuYWdlID0gbmF0aXZlRmFicmljVUlNYW5hZ2VyLFxuICBjcmVhdGVOb2RlID0gX25hdGl2ZUZhYnJpY1VJTWFuYWdlLmNyZWF0ZU5vZGUsXG4gIGNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbiA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5jbG9uZU5vZGVXaXRoTmV3Q2hpbGRyZW4sXG4gIGNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbkFuZFByb3BzID1cbiAgICBfbmF0aXZlRmFicmljVUlNYW5hZ2UuY2xvbmVOb2RlV2l0aE5ld0NoaWxkcmVuQW5kUHJvcHMsXG4gIGNsb25lTm9kZVdpdGhOZXdQcm9wcyA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5jbG9uZU5vZGVXaXRoTmV3UHJvcHMsXG4gIGNyZWF0ZUNoaWxkTm9kZVNldCA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5jcmVhdGVDaGlsZFNldCxcbiAgYXBwZW5kQ2hpbGROb2RlID0gX25hdGl2ZUZhYnJpY1VJTWFuYWdlLmFwcGVuZENoaWxkLFxuICBhcHBlbmRDaGlsZE5vZGVUb1NldCA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5hcHBlbmRDaGlsZFRvU2V0LFxuICBjb21wbGV0ZVJvb3QgPSBfbmF0aXZlRmFicmljVUlNYW5hZ2UuY29tcGxldGVSb290LFxuICByZWdpc3RlckV2ZW50SGFuZGxlciA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS5yZWdpc3RlckV2ZW50SGFuZGxlcixcbiAgRmFicmljRGlzY3JldGVQcmlvcml0eSA9IF9uYXRpdmVGYWJyaWNVSU1hbmFnZS51bnN0YWJsZV9EaXNjcmV0ZUV2ZW50UHJpb3JpdHksXG4gIGZhYnJpY0dldEN1cnJlbnRFdmVudFByaW9yaXR5ID1cbiAgICBfbmF0aXZlRmFicmljVUlNYW5hZ2UudW5zdGFibGVfZ2V0Q3VycmVudEV2ZW50UHJpb3JpdHksXG4gIGdldFZpZXdDb25maWdGb3JUeXBlID1cbiAgICBSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkuZ2V0LFxuICBuZXh0UmVhY3RUYWcgPSAyO1xucmVnaXN0ZXJFdmVudEhhbmRsZXIgJiYgcmVnaXN0ZXJFdmVudEhhbmRsZXIoZGlzcGF0Y2hFdmVudCk7XG5mdW5jdGlvbiBjcmVhdGVUZXh0SW5zdGFuY2UoXG4gIHRleHQsXG4gIHJvb3RDb250YWluZXJJbnN0YW5jZSxcbiAgaG9zdENvbnRleHQsXG4gIGludGVybmFsSW5zdGFuY2VIYW5kbGVcbikge1xuICBob3N0Q29udGV4dCA9IG5leHRSZWFjdFRhZztcbiAgbmV4dFJlYWN0VGFnICs9IDI7XG4gIHJldHVybiB7XG4gICAgbm9kZTogY3JlYXRlTm9kZShcbiAgICAgIGhvc3RDb250ZXh0LFxuICAgICAgXCJSQ1RSYXdUZXh0XCIsXG4gICAgICByb290Q29udGFpbmVySW5zdGFuY2UsXG4gICAgICB7IHRleHQ6IHRleHQgfSxcbiAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGVcbiAgICApXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gbnVsbCAhPSBpbnN0YW5jZS5jYW5vbmljYWwgJiYgbnVsbCAhPSBpbnN0YW5jZS5jYW5vbmljYWwucHVibGljSW5zdGFuY2VcbiAgICA/IGluc3RhbmNlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZVxuICAgIDogbnVsbCAhPSBpbnN0YW5jZS5fbmF0aXZlVGFnXG4gICAgPyBpbnN0YW5jZVxuICAgIDogbnVsbDtcbn1cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSBzZXRUaW1lb3V0LFxuICBjYW5jZWxUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuZnVuY3Rpb24gY2xvbmVIaWRkZW5JbnN0YW5jZShpbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IGluc3RhbmNlLm5vZGU7XG4gIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBkaWZmUHJvcGVydGllcyhcbiAgICBudWxsLFxuICAgIGVtcHR5T2JqZWN0LFxuICAgIHsgc3R5bGU6IHsgZGlzcGxheTogXCJub25lXCIgfSB9LFxuICAgIGluc3RhbmNlLmNhbm9uaWNhbC52aWV3Q29uZmlnLnZhbGlkQXR0cmlidXRlc1xuICApO1xuICByZXR1cm4ge1xuICAgIG5vZGU6IGNsb25lTm9kZVdpdGhOZXdQcm9wcyhub2RlLCBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpLFxuICAgIGNhbm9uaWNhbDogaW5zdGFuY2UuY2Fub25pY2FsXG4gIH07XG59XG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIG51bGwgIT0gbm9kZS5jYW5vbmljYWwgJiYgbnVsbCAhPSBub2RlLmNhbm9uaWNhbC5pbnRlcm5hbEluc3RhbmNlSGFuZGxlXG4gICAgPyBub2RlLmNhbm9uaWNhbC5pbnRlcm5hbEluc3RhbmNlSGFuZGxlXG4gICAgOiBub2RlO1xufVxuZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5jYW5vbmljYWwuY3VycmVudFByb3BzO1xufTtcbmdldEluc3RhbmNlRnJvbU5vZGUkMSA9IGdldEluc3RhbmNlRnJvbU5vZGU7XG5nZXROb2RlRnJvbUluc3RhbmNlJDEgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgZmliZXIgPSBnZXRQdWJsaWNJbnN0YW5jZShmaWJlci5zdGF0ZU5vZGUpO1xuICBpZiAobnVsbCA9PSBmaWJlcikgdGhyb3cgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBob3N0IGluc3RhbmNlIGZyb20gZmliZXJcIik7XG4gIHJldHVybiBmaWJlcjtcbn07XG5SZXNwb25kZXJFdmVudFBsdWdpbi5pbmplY3Rpb24uaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlcih7XG4gIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZnJvbSwgdG8sIGJsb2NrTmF0aXZlUmVzcG9uZGVyKSB7XG4gICAgZnJvbSAmJlxuICAgICAgZnJvbS5zdGF0ZU5vZGUgJiZcbiAgICAgIG5hdGl2ZUZhYnJpY1VJTWFuYWdlci5zZXRJc0pTUmVzcG9uZGVyKFxuICAgICAgICBmcm9tLnN0YXRlTm9kZS5ub2RlLFxuICAgICAgICAhMSxcbiAgICAgICAgYmxvY2tOYXRpdmVSZXNwb25kZXIgfHwgITFcbiAgICAgICk7XG4gICAgdG8gJiZcbiAgICAgIHRvLnN0YXRlTm9kZSAmJlxuICAgICAgbmF0aXZlRmFicmljVUlNYW5hZ2VyLnNldElzSlNSZXNwb25kZXIoXG4gICAgICAgIHRvLnN0YXRlTm9kZS5ub2RlLFxuICAgICAgICAhMCxcbiAgICAgICAgYmxvY2tOYXRpdmVSZXNwb25kZXIgfHwgITFcbiAgICAgICk7XG4gIH1cbn0pO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLFxuICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIiksXG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1xuU3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO1xuU3ltYm9sLmZvcihcInJlYWN0LmRlYnVnX3RyYWNlX21vZGVcIik7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpO1xuU3ltYm9sLmZvcihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIik7XG5TeW1ib2wuZm9yKFwicmVhY3QuY2FjaGVcIik7XG5TeW1ib2wuZm9yKFwicmVhY3QudHJhY2luZ19tYXJrZXJcIik7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKSByZXR1cm4gbnVsbDtcbiAgbWF5YmVJdGVyYWJsZSA9XG4gICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlID8gbWF5YmVJdGVyYWJsZSA6IG51bGw7XG59XG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICA/IG51bGxcbiAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICB9XG4gIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICk7XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB7XG4gIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIDI0OlxuICAgICAgcmV0dXJuIFwiQ2FjaGVcIjtcbiAgICBjYXNlIDk6XG4gICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICBjYXNlIDEwOlxuICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgY2FzZSAxODpcbiAgICAgIHJldHVybiBcIkRlaHlkcmF0ZWRGcmFnbWVudFwiO1xuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZmliZXIgPSB0eXBlLnJlbmRlciksXG4gICAgICAgIChmaWJlciA9IGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgXCJcIiksXG4gICAgICAgIHR5cGUuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAoXCJcIiAhPT0gZmliZXIgPyBcIkZvcndhcmRSZWYoXCIgKyBmaWJlciArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpXG4gICAgICApO1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBcIlJvb3RcIjtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gXCJUZXh0XCI7XG4gICAgY2FzZSAxNjpcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPyBcIlN0cmljdE1vZGVcIiA6IFwiTW9kZVwiO1xuICAgIGNhc2UgMjI6XG4gICAgICByZXR1cm4gXCJPZmZzY3JlZW5cIjtcbiAgICBjYXNlIDEyOlxuICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICBjYXNlIDIxOlxuICAgICAgcmV0dXJuIFwiU2NvcGVcIjtcbiAgICBjYXNlIDEzOlxuICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICBjYXNlIDE5OlxuICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgY2FzZSAyNTpcbiAgICAgIHJldHVybiBcIlRyYWNpbmdNYXJrZXJcIjtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTc6XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMTQ6XG4gICAgY2FzZSAxNTpcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXIsXG4gICAgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcbiAgaWYgKGZpYmVyLmFsdGVybmF0ZSkgZm9yICg7IG5vZGUucmV0dXJuOyApIG5vZGUgPSBub2RlLnJldHVybjtcbiAgZWxzZSB7XG4gICAgZmliZXIgPSBub2RlO1xuICAgIGRvXG4gICAgICAobm9kZSA9IGZpYmVyKSxcbiAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJiAobmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybiksXG4gICAgICAgIChmaWJlciA9IG5vZGUucmV0dXJuKTtcbiAgICB3aGlsZSAoZmliZXIpO1xuICB9XG4gIHJldHVybiAzID09PSBub2RlLnRhZyA/IG5lYXJlc3RNb3VudGVkIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgIT09IGZpYmVyKVxuICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgYWx0ZXJuYXRlID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG4gICAgaWYgKG51bGwgPT09IGFsdGVybmF0ZSlcbiAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICByZXR1cm4gYWx0ZXJuYXRlICE9PSBmaWJlciA/IG51bGwgOiBmaWJlcjtcbiAgfVxuICBmb3IgKHZhciBhID0gZmliZXIsIGIgPSBhbHRlcm5hdGU7IDsgKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcbiAgICBpZiAobnVsbCA9PT0gcGFyZW50QSkgYnJlYWs7XG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcbiAgICBpZiAobnVsbCA9PT0gcGFyZW50Qikge1xuICAgICAgYiA9IHBhcmVudEEucmV0dXJuO1xuICAgICAgaWYgKG51bGwgIT09IGIpIHtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICBmb3IgKHBhcmVudEIgPSBwYXJlbnRBLmNoaWxkOyBwYXJlbnRCOyApIHtcbiAgICAgICAgaWYgKHBhcmVudEIgPT09IGEpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGZpYmVyO1xuICAgICAgICBpZiAocGFyZW50QiA9PT0gYikgcmV0dXJuIGFzc2VydElzTW91bnRlZChwYXJlbnRBKSwgYWx0ZXJuYXRlO1xuICAgICAgICBwYXJlbnRCID0gcGFyZW50Qi5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgIH1cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSAoYSA9IHBhcmVudEEpLCAoYiA9IHBhcmVudEIpO1xuICAgIGVsc2Uge1xuICAgICAgZm9yICh2YXIgZGlkRmluZENoaWxkID0gITEsIGNoaWxkJDcgPSBwYXJlbnRBLmNoaWxkOyBjaGlsZCQ3OyApIHtcbiAgICAgICAgaWYgKGNoaWxkJDcgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQkNyA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkJDcgPSBjaGlsZCQ3LnNpYmxpbmc7XG4gICAgICB9XG4gICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICBmb3IgKGNoaWxkJDcgPSBwYXJlbnRCLmNoaWxkOyBjaGlsZCQ3OyApIHtcbiAgICAgICAgICBpZiAoY2hpbGQkNyA9PT0gYSkge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGlsZCQ3ID09PSBiKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hpbGQkNyA9IGNoaWxkJDcuc2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGEuYWx0ZXJuYXRlICE9PSBiKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICB9XG4gIGlmICgzICE9PSBhLnRhZylcbiAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gIHJldHVybiBhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhID8gZmliZXIgOiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgcGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcbiAgcmV0dXJuIG51bGwgIT09IHBhcmVudCA/IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChwYXJlbnQpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChub2RlKSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgaWYgKDUgPT09IHRhZyB8fCAyNiA9PT0gdGFnIHx8IDI3ID09PSB0YWcgfHwgNiA9PT0gdGFnKSByZXR1cm4gbm9kZTtcbiAgZm9yIChub2RlID0gbm9kZS5jaGlsZDsgbnVsbCAhPT0gbm9kZTsgKSB7XG4gICAgdGFnID0gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKG5vZGUpO1xuICAgIGlmIChudWxsICE9PSB0YWcpIHJldHVybiB0YWc7XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJOYW1lKSB7XG4gIHZhciBzb3VyY2VJbmZvID0gXCJcIjtcbiAgb3duZXJOYW1lICYmIChzb3VyY2VJbmZvID0gXCIgKGNyZWF0ZWQgYnkgXCIgKyBvd25lck5hbWUgKyBcIilcIik7XG4gIHJldHVybiBcIlxcbiAgICBpbiBcIiArIChuYW1lIHx8IFwiVW5rbm93blwiKSArIHNvdXJjZUluZm87XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4pIHtcbiAgcmV0dXJuIGZuXG4gICAgPyBkZXNjcmliZUNvbXBvbmVudEZyYW1lKGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgfHwgbnVsbCwgbnVsbClcbiAgICA6IFwiXCI7XG59XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICB2YWx1ZVN0YWNrID0gW10sXG4gIGluZGV4ID0gLTE7XG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7IGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZSB9O1xufVxuZnVuY3Rpb24gcG9wKGN1cnNvcikge1xuICAwID4gaW5kZXggfHxcbiAgICAoKGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF0pLCAodmFsdWVTdGFja1tpbmRleF0gPSBudWxsKSwgaW5kZXgtLSk7XG59XG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fSxcbiAgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoZW1wdHlDb250ZXh0T2JqZWN0KSxcbiAgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcighMSksXG4gIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbmZ1bmN0aW9uIGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkge1xuICB2YXIgY29udGV4dFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5jb250ZXh0VHlwZXM7XG4gIGlmICghY29udGV4dFR5cGVzKSByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGlmIChcbiAgICBpbnN0YW5jZSAmJlxuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dFxuICApXG4gICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICB2YXIgY29udGV4dCA9IHt9LFxuICAgIGtleTtcbiAgZm9yIChrZXkgaW4gY29udGV4dFR5cGVzKSBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgaW5zdGFuY2UgJiZcbiAgICAoKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSxcbiAgICAod29ya0luUHJvZ3Jlc3MuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9XG4gICAgICB1bm1hc2tlZENvbnRleHQpLFxuICAgICh3b3JrSW5Qcm9ncmVzcy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IGNvbnRleHQpKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gIHR5cGUgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICByZXR1cm4gbnVsbCAhPT0gdHlwZSAmJiB2b2lkIDAgIT09IHR5cGU7XG59XG5mdW5jdGlvbiBwb3BDb250ZXh0KCkge1xuICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvcik7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSk7XG59XG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAgaWYgKGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQgIT09IGVtcHR5Q29udGV4dE9iamVjdClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgY29udGV4dCk7XG4gIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB0eXBlID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCkgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gIGluc3RhbmNlID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG4gIGZvciAodmFyIGNvbnRleHRLZXkgaW4gaW5zdGFuY2UpXG4gICAgaWYgKCEoY29udGV4dEtleSBpbiB0eXBlKSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJVbmtub3duXCIpICtcbiAgICAgICAgICAnLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXCInICtcbiAgICAgICAgICBjb250ZXh0S2V5ICtcbiAgICAgICAgICAnXCIgaXMgbm90IGRlZmluZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuJ1xuICAgICAgKTtcbiAgcmV0dXJuIGFzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcyA9XG4gICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSkgJiZcbiAgICAgIHdvcmtJblByb2dyZXNzLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0KSB8fFxuICAgIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudDtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgd29ya0luUHJvZ3Jlc3MpO1xuICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiAhMDtcbn1cbmZ1bmN0aW9uIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHR5cGUsIGRpZENoYW5nZSkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGlmICghaW5zdGFuY2UpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICk7XG4gIGRpZENoYW5nZVxuICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IHByb2Nlc3NDaGlsZENvbnRleHQoXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICB0eXBlLFxuICAgICAgICBwcmV2aW91c0NvbnRleHRcbiAgICAgICkpLFxuICAgICAgKGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IpLFxuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxKSxcbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIHdvcmtJblByb2dyZXNzKSlcbiAgICA6IHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yKTtcbiAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UpO1xufVxuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4gKHggPT09IHkgJiYgKDAgIT09IHggfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSk7XG59XG52YXIgb2JqZWN0SXMgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBpcyxcbiAgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlKTtcbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbnVsbCk7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgeyBpc0luQVBhcmVudFRleHQ6ICExIH0pO1xufVxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcigpIHtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvcik7XG59XG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIGNvbnRleHQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGZpYmVyLnR5cGU7XG4gIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgXCJBbmRyb2lkVGV4dElucHV0XCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCB8fFxuICAgIFwiUkNUTXVsdGlsaW5lVGV4dElucHV0Vmlld1wiID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgfHxcbiAgICBcIlJDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3XCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCB8fFxuICAgIFwiUkNUVGV4dFwiID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgfHxcbiAgICBcIlJDVFZpcnR1YWxUZXh0XCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICBjb250ZXh0LmlzSW5BUGFyZW50VGV4dCAhPT0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICA/IHsgaXNJbkFQYXJlbnRUZXh0OiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgfVxuICAgICAgOiBjb250ZXh0O1xuICBjb250ZXh0ICE9PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiZcbiAgICAocHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpLFxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpKTtcbn1cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGZpYmVyICYmXG4gICAgKHBvcChjb250ZXh0U3RhY2tDdXJzb3IpLCBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IpKTtcbn1cbnZhciBoeWRyYXRpb25FcnJvcnMgPSBudWxsLFxuICBjb25jdXJyZW50UXVldWVzID0gW10sXG4gIGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDAsXG4gIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IDA7XG5mdW5jdGlvbiBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCkge1xuICBmb3IgKFxuICAgIHZhciBlbmRJbmRleCA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleCxcbiAgICAgIGkgPSAoY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gY29uY3VycmVudFF1ZXVlc0luZGV4ID0gMCk7XG4gICAgaSA8IGVuZEluZGV4O1xuXG4gICkge1xuICAgIHZhciBmaWJlciA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICB2YXIgcXVldWUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICB2YXIgbGFuZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICBpZiAobnVsbCAhPT0gcXVldWUgJiYgbnVsbCAhPT0gdXBkYXRlKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gICAgICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgIH1cbiAgICAwICE9PSBsYW5lICYmIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCB1cGRhdGUsIGxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBmaWJlcjtcbiAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBxdWV1ZTtcbiAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSB1cGRhdGU7XG4gIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gbGFuZTtcbiAgY29uY3VycmVudGx5VXBkYXRlZExhbmVzIHw9IGxhbmU7XG4gIGZpYmVyLmxhbmVzIHw9IGxhbmU7XG4gIGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBmaWJlciAmJiAoZmliZXIubGFuZXMgfD0gbGFuZSk7XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIGxhbmUpIHtcbiAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBudWxsLCBudWxsLCBsYW5lKTtcbiAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xufVxuZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIHVwZGF0ZSwgbGFuZSkge1xuICBzb3VyY2VGaWJlci5sYW5lcyB8PSBsYW5lO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSBsYW5lKTtcbiAgZm9yICh2YXIgaXNIaWRkZW4gPSAhMSwgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7IClcbiAgICAocGFyZW50LmNoaWxkTGFuZXMgfD0gbGFuZSksXG4gICAgICAoYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZSksXG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5jaGlsZExhbmVzIHw9IGxhbmUpLFxuICAgICAgMjIgPT09IHBhcmVudC50YWcgJiZcbiAgICAgICAgKChzb3VyY2VGaWJlciA9IHBhcmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlciB8fCBzb3VyY2VGaWJlci5fdmlzaWJpbGl0eSAmIDEgfHwgKGlzSGlkZGVuID0gITApKSxcbiAgICAgIChzb3VyY2VGaWJlciA9IHBhcmVudCksXG4gICAgICAocGFyZW50ID0gcGFyZW50LnJldHVybik7XG4gIGlzSGlkZGVuICYmXG4gICAgbnVsbCAhPT0gdXBkYXRlICYmXG4gICAgMyA9PT0gc291cmNlRmliZXIudGFnICYmXG4gICAgKChwYXJlbnQgPSBzb3VyY2VGaWJlci5zdGF0ZU5vZGUpLFxuICAgIChpc0hpZGRlbiA9IDMxIC0gY2x6MzIobGFuZSkpLFxuICAgIChwYXJlbnQgPSBwYXJlbnQuaGlkZGVuVXBkYXRlcyksXG4gICAgKHNvdXJjZUZpYmVyID0gcGFyZW50W2lzSGlkZGVuXSksXG4gICAgbnVsbCA9PT0gc291cmNlRmliZXJcbiAgICAgID8gKHBhcmVudFtpc0hpZGRlbl0gPSBbdXBkYXRlXSlcbiAgICAgIDogc291cmNlRmliZXIucHVzaCh1cGRhdGUpLFxuICAgICh1cGRhdGUubGFuZSA9IGxhbmUgfCA1MzY4NzA5MTIpKTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoc291cmNlRmliZXIpIHtcbiAgaWYgKDUwIDwgbmVzdGVkVXBkYXRlQ291bnQpXG4gICAgdGhyb3cgKFxuICAgICAgKChuZXN0ZWRVcGRhdGVDb3VudCA9IDApLFxuICAgICAgKHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGwpLFxuICAgICAgRXJyb3IoXG4gICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiXG4gICAgICApKVxuICAgICk7XG4gIGZvciAodmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgKHNvdXJjZUZpYmVyID0gcGFyZW50KSwgKHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybik7XG4gIHJldHVybiAzID09PSBzb3VyY2VGaWJlci50YWcgPyBzb3VyY2VGaWJlci5zdGF0ZU5vZGUgOiBudWxsO1xufVxudmFyIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gIGxhc3RTY2hlZHVsZWRSb290ID0gbnVsbCxcbiAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSAhMSxcbiAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITEsXG4gIGlzRmx1c2hpbmdXb3JrID0gITEsXG4gIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gMDtcbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KSB7XG4gIHJvb3QgIT09IGxhc3RTY2hlZHVsZWRSb290ICYmXG4gICAgbnVsbCA9PT0gcm9vdC5uZXh0ICYmXG4gICAgKG51bGwgPT09IGxhc3RTY2hlZHVsZWRSb290XG4gICAgICA/IChmaXJzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdCA9IHJvb3QpXG4gICAgICA6IChsYXN0U2NoZWR1bGVkUm9vdCA9IGxhc3RTY2hlZHVsZWRSb290Lm5leHQgPSByb290KSk7XG4gIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICEwO1xuICBkaWRTY2hlZHVsZU1pY3JvdGFzayB8fFxuICAgICgoZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSAhMCksXG4gICAgc2NoZWR1bGVDYWxsYmFjayQyKEltbWVkaWF0ZVByaW9yaXR5LCBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2spKTtcbiAgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBub3coKSk7XG59XG5mdW5jdGlvbiBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChvbmx5TGVnYWN5KSB7XG4gIGlmICghaXNGbHVzaGluZ1dvcmsgJiYgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrKSB7XG4gICAgdmFyIGVycm9ycyA9IG51bGw7XG4gICAgaXNGbHVzaGluZ1dvcmsgPSAhMDtcbiAgICBkbyB7XG4gICAgICB2YXIgZGlkUGVyZm9ybVNvbWVXb3JrID0gITE7XG4gICAgICBmb3IgKHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290OyBudWxsICE9PSByb290OyApIHtcbiAgICAgICAgaWYgKCFvbmx5TGVnYWN5IHx8IDAgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDkgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkOSA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKDAgIT09IChuZXh0TGFuZXMgJiAzKSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGRpZFBlcmZvcm1Tb21lV29yayA9ICEwO1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQ5ID0gcm9vdDtcbiAgICAgICAgICAgICAgaWYgKDAgIT09IChleGVjdXRpb25Db250ZXh0ICYgNikpXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICAgICAgICAgIGlmICghZmx1c2hQYXNzaXZlRWZmZWN0cygpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDksXG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIDAgIT09IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDkudGFnICYmXG4gICAgICAgICAgICAgICAgICAyID09PSBleGl0U3RhdHVzXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzID0gbmV4dExhbmVzLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclJldHJ5TGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQ5LFxuICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgMCAhPT0gZXJyb3JSZXRyeUxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAgICgobmV4dExhbmVzID0gZXJyb3JSZXRyeUxhbmVzKSxcbiAgICAgICAgICAgICAgICAgICAgKGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQ5LFxuICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoMSA9PT0gZXhpdFN0YXR1cylcbiAgICAgICAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgICAgICAgKChvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2sod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkOSwgMCksXG4gICAgICAgICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDksXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dExhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDkpLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIDYgPT09IGV4aXRTdGF0dXNcbiAgICAgICAgICAgICAgICAgID8gbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkOSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0TGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDkuZmluaXNoZWRXb3JrID1cbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQ5LmN1cnJlbnQuYWx0ZXJuYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJDkuZmluaXNoZWRMYW5lcyA9IG5leHRMYW5lcyksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1pdFJvb3QoXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkOSxcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZCh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQ5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIG51bGwgPT09IGVycm9ycyA/IChlcnJvcnMgPSBbZXJyb3JdKSA6IGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb290ID0gcm9vdC5uZXh0O1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGRpZFBlcmZvcm1Tb21lV29yayk7XG4gICAgaXNGbHVzaGluZ1dvcmsgPSAhMTtcbiAgICBpZiAobnVsbCAhPT0gZXJyb3JzKSB7XG4gICAgICBpZiAoMSA8IGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yKVxuICAgICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMpO1xuICAgICAgICBmb3IgKG9ubHlMZWdhY3kgPSAxOyBvbmx5TGVnYWN5IDwgZXJyb3JzLmxlbmd0aDsgb25seUxlZ2FjeSsrKVxuICAgICAgICAgIChkaWRQZXJmb3JtU29tZVdvcmsgPSB0aHJvd0Vycm9yLmJpbmQobnVsbCwgZXJyb3JzW29ubHlMZWdhY3ldKSksXG4gICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDIoSW1tZWRpYXRlUHJpb3JpdHksIGRpZFBlcmZvcm1Tb21lV29yayk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yKSB7XG4gIHRocm93IGVycm9yO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCkge1xuICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSBkaWRTY2hlZHVsZU1pY3JvdGFzayA9ICExO1xuICBmb3IgKFxuICAgIHZhciBjdXJyZW50VGltZSA9IG5vdygpLCBwcmV2ID0gbnVsbCwgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDtcbiAgICBudWxsICE9PSByb290O1xuXG4gICkge1xuICAgIHZhciBuZXh0ID0gcm9vdC5uZXh0LFxuICAgICAgbmV4dExhbmVzID0gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSk7XG4gICAgMCA9PT0gbmV4dExhbmVzXG4gICAgICA/ICgocm9vdC5uZXh0ID0gbnVsbCksXG4gICAgICAgIG51bGwgPT09IHByZXYgPyAoZmlyc3RTY2hlZHVsZWRSb290ID0gbmV4dCkgOiAocHJldi5uZXh0ID0gbmV4dCksXG4gICAgICAgIG51bGwgPT09IG5leHQgJiYgKGxhc3RTY2hlZHVsZWRSb290ID0gcHJldikpXG4gICAgICA6ICgocHJldiA9IHJvb3QpLFxuICAgICAgICAwICE9PSAobmV4dExhbmVzICYgMykgJiYgKG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICEwKSk7XG4gICAgcm9vdCA9IG5leHQ7XG4gIH1cbiAgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSAwO1xuICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCghMSk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIGZvciAoXG4gICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcyxcbiAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcyxcbiAgICAgIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgbGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIC02MjkxNDU2MTtcbiAgICAwIDwgbGFuZXM7XG5cbiAgKSB7XG4gICAgdmFyIGluZGV4JDMgPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDMsXG4gICAgICBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleCQzXTtcbiAgICBpZiAoLTEgPT09IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICBpZiAoMCA9PT0gKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgfHwgMCAhPT0gKGxhbmUgJiBwaW5nZWRMYW5lcykpXG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleCQzXSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lICYmIChyb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lKTtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuICBjdXJyZW50VGltZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgc3VzcGVuZGVkTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgc3VzcGVuZGVkTGFuZXMgPSBnZXROZXh0TGFuZXMoXG4gICAgcm9vdCxcbiAgICByb290ID09PSBjdXJyZW50VGltZSA/IHN1c3BlbmRlZExhbmVzIDogMFxuICApO1xuICBwaW5nZWRMYW5lcyA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICBpZiAoXG4gICAgMCA9PT0gc3VzcGVuZGVkTGFuZXMgfHxcbiAgICAocm9vdCA9PT0gY3VycmVudFRpbWUgJiYgMiA9PT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHx8XG4gICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0XG4gIClcbiAgICByZXR1cm4gKFxuICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgY2FuY2VsQ2FsbGJhY2skMShwaW5nZWRMYW5lcyksXG4gICAgICAocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgIChyb290LmNhbGxiYWNrUHJpb3JpdHkgPSAwKVxuICAgICk7XG4gIGlmICgwICE9PSAoc3VzcGVuZGVkTGFuZXMgJiAzKSlcbiAgICByZXR1cm4gKFxuICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgY2FuY2VsQ2FsbGJhY2skMShwaW5nZWRMYW5lcyksXG4gICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMiksXG4gICAgICAocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgIDJcbiAgICApO1xuICBjdXJyZW50VGltZSA9IHN1c3BlbmRlZExhbmVzICYgLXN1c3BlbmRlZExhbmVzO1xuICBpZiAoY3VycmVudFRpbWUgPT09IHJvb3QuY2FsbGJhY2tQcmlvcml0eSkgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICBudWxsICE9PSBwaW5nZWRMYW5lcyAmJiBjYW5jZWxDYWxsYmFjayQxKHBpbmdlZExhbmVzKTtcbiAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShzdXNwZW5kZWRMYW5lcykpIHtcbiAgICBjYXNlIDI6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IEltbWVkaWF0ZVByaW9yaXR5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OlxuICAgICAgc3VzcGVuZGVkTGFuZXMgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzI6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IElkbGVQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5O1xuICB9XG4gIHBpbmdlZExhbmVzID0gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIHN1c3BlbmRlZExhbmVzID0gc2NoZWR1bGVDYWxsYmFjayQyKHN1c3BlbmRlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IGN1cnJlbnRUaW1lO1xuICByb290LmNhbGxiYWNrTm9kZSA9IHN1c3BlbmRlZExhbmVzO1xuICByZXR1cm4gY3VycmVudFRpbWU7XG59XG52YXIgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIHNoYXJlZDogeyBwZW5kaW5nOiBudWxsLCBsYW5lczogMCwgaGlkZGVuQ2FsbGJhY2tzOiBudWxsIH0sXG4gICAgY2FsbGJhY2tzOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9PT0gY3VycmVudCAmJlxuICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHtcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudC5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnQuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnQubGFzdEJhc2VVcGRhdGUsXG4gICAgICBzaGFyZWQ6IGN1cnJlbnQuc2hhcmVkLFxuICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUobGFuZSkge1xuICByZXR1cm4geyBsYW5lOiBsYW5lLCB0YWc6IDAsIHBheWxvYWQ6IG51bGwsIGNhbGxiYWNrOiBudWxsLCBuZXh0OiBudWxsIH07XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG4gIGlmIChudWxsID09PSB1cGRhdGVRdWV1ZSkgcmV0dXJuIG51bGw7XG4gIHVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICBpZiAoMCAhPT0gKGV4ZWN1dGlvbkNvbnRleHQgJiAyKSkge1xuICAgIHZhciBwZW5kaW5nID0gdXBkYXRlUXVldWUucGVuZGluZztcbiAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgIDogKCh1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dCksIChwZW5kaW5nLm5leHQgPSB1cGRhdGUpKTtcbiAgICB1cGRhdGVRdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgIHVwZGF0ZSA9IGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBudWxsLCBsYW5lKTtcbiAgICByZXR1cm4gdXBkYXRlO1xuICB9XG4gIGVucXVldWVVcGRhdGUkMShmaWJlciwgdXBkYXRlUXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbn1cbmZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgZmliZXIgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgaWYgKG51bGwgIT09IGZpYmVyICYmICgoZmliZXIgPSBmaWJlci5zaGFyZWQpLCAwICE9PSAobGFuZSAmIDQxOTQxNzYpKSkge1xuICAgIHZhciBxdWV1ZUxhbmVzID0gZmliZXIubGFuZXM7XG4gICAgcXVldWVMYW5lcyAmPSByb290LnBlbmRpbmdMYW5lcztcbiAgICBsYW5lIHw9IHF1ZXVlTGFuZXM7XG4gICAgZmliZXIubGFuZXMgPSBsYW5lO1xuICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLFxuICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gIGlmIChcbiAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksIHF1ZXVlID09PSBjdXJyZW50KVxuICApIHtcbiAgICB2YXIgbmV3Rmlyc3QgPSBudWxsLFxuICAgICAgbmV3TGFzdCA9IG51bGw7XG4gICAgcXVldWUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gICAgaWYgKG51bGwgIT09IHF1ZXVlKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiBxdWV1ZS5sYW5lLFxuICAgICAgICAgIHRhZzogcXVldWUudGFnLFxuICAgICAgICAgIHBheWxvYWQ6IHF1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgPyAobmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmUpXG4gICAgICAgICAgOiAobmV3TGFzdCA9IG5ld0xhc3QubmV4dCA9IGNsb25lKTtcbiAgICAgICAgcXVldWUgPSBxdWV1ZS5uZXh0O1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gcXVldWUpO1xuICAgICAgbnVsbCA9PT0gbmV3TGFzdFxuICAgICAgICA/IChuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZSlcbiAgICAgICAgOiAobmV3TGFzdCA9IG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlKTtcbiAgICB9IGVsc2UgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgcXVldWUgPSB7XG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnQuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgc2hhcmVkOiBjdXJyZW50LnNoYXJlZCxcbiAgICAgIGNhbGxiYWNrczogY3VycmVudC5jYWxsYmFja3NcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdvcmtJblByb2dyZXNzID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgPyAocXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGUpXG4gICAgOiAod29ya0luUHJvZ3Jlc3MubmV4dCA9IGNhcHR1cmVkVXBkYXRlKTtcbiAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZShcbiAgd29ya0luUHJvZ3Jlc3MkanNjb21wJDAsXG4gIHByb3BzLFxuICBpbnN0YW5jZSRqc2NvbXAkMCxcbiAgcmVuZGVyTGFuZXNcbikge1xuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZSxcbiAgICAgIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7XG4gICAgbnVsbCA9PT0gbGFzdEJhc2VVcGRhdGVcbiAgICAgID8gKGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgIDogKGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGUpO1xuICAgIGxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5hbHRlcm5hdGU7XG4gICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAocGVuZGluZ1F1ZXVlID0gY3VycmVudC5sYXN0QmFzZVVwZGF0ZSksXG4gICAgICBwZW5kaW5nUXVldWUgIT09IGxhc3RCYXNlVXBkYXRlICYmXG4gICAgICAgIChudWxsID09PSBwZW5kaW5nUXVldWVcbiAgICAgICAgICA/IChjdXJyZW50LmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICA6IChwZW5kaW5nUXVldWUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSksXG4gICAgICAgIChjdXJyZW50Lmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUpKSk7XG4gIH1cbiAgaWYgKG51bGwgIT09IGZpcnN0QmFzZVVwZGF0ZSkge1xuICAgIHZhciBuZXdTdGF0ZSA9IHF1ZXVlLmJhc2VTdGF0ZTtcbiAgICBsYXN0QmFzZVVwZGF0ZSA9IDA7XG4gICAgY3VycmVudCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlID0gbnVsbDtcbiAgICBwZW5kaW5nUXVldWUgPSBmaXJzdEJhc2VVcGRhdGU7XG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSBwZW5kaW5nUXVldWUubGFuZSAmIC01MzY4NzA5MTMsXG4gICAgICAgIGlzSGlkZGVuVXBkYXRlID0gdXBkYXRlTGFuZSAhPT0gcGVuZGluZ1F1ZXVlLmxhbmU7XG4gICAgICBpZiAoXG4gICAgICAgIGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgIDogKHJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICkge1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICB0YWc6IHBlbmRpbmdRdWV1ZS50YWcsXG4gICAgICAgICAgICAgIHBheWxvYWQ6IHBlbmRpbmdRdWV1ZS5wYXlsb2FkLFxuICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMCxcbiAgICAgICAgICAgIHVwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICB1cGRhdGVMYW5lID0gcHJvcHM7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gaW5zdGFuY2UkanNjb21wJDA7XG4gICAgICAgICAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MuY2FsbChpbnN0YW5jZSwgbmV3U3RhdGUsIHVwZGF0ZUxhbmUpO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAtNjU1MzcpIHwgMTI4O1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICAgICAgICB1cGRhdGVMYW5lID1cbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzcy5jYWxsKGluc3RhbmNlLCBuZXdTdGF0ZSwgdXBkYXRlTGFuZSlcbiAgICAgICAgICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSB1cGRhdGVMYW5lIHx8IHZvaWQgMCA9PT0gdXBkYXRlTGFuZSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSBhc3NpZ24oe30sIG5ld1N0YXRlLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlTGFuZSA9IHBlbmRpbmdRdWV1ZS5jYWxsYmFjaztcbiAgICAgICAgbnVsbCAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MkanNjb21wJDAuZmxhZ3MgfD0gNjQpLFxuICAgICAgICAgIGlzSGlkZGVuVXBkYXRlICYmICh3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5mbGFncyB8PSA4MTkyKSxcbiAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBxdWV1ZS5jYWxsYmFja3MpLFxuICAgICAgICAgIG51bGwgPT09IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICA/IChxdWV1ZS5jYWxsYmFja3MgPSBbdXBkYXRlTGFuZV0pXG4gICAgICAgICAgICA6IGlzSGlkZGVuVXBkYXRlLnB1c2godXBkYXRlTGFuZSkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogcGVuZGluZ1F1ZXVlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiBwZW5kaW5nUXVldWUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogcGVuZGluZ1F1ZXVlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgPyAoKGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGN1cnJlbnQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgIChsYXN0UGVuZGluZ1VwZGF0ZSA9IG5ld1N0YXRlKSlcbiAgICAgICAgICAgIDogKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgKGxhc3RCYXNlVXBkYXRlIHw9IHVwZGF0ZUxhbmUpO1xuICAgICAgcGVuZGluZ1F1ZXVlID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBpZiAobnVsbCA9PT0gcGVuZGluZ1F1ZXVlKVxuICAgICAgICBpZiAoKChwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZyksIG51bGwgPT09IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBwZW5kaW5nUXVldWUpLFxuICAgICAgICAgICAgKHBlbmRpbmdRdWV1ZSA9IGlzSGlkZGVuVXBkYXRlLm5leHQpLFxuICAgICAgICAgICAgKGlzSGlkZGVuVXBkYXRlLm5leHQgPSBudWxsKSxcbiAgICAgICAgICAgIChxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgIChxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGwpO1xuICAgIH0gd2hpbGUgKDEpO1xuICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKGxhc3RQZW5kaW5nVXBkYXRlID0gbmV3U3RhdGUpO1xuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnQ7XG4gICAgbnVsbCA9PT0gZmlyc3RCYXNlVXBkYXRlICYmIChxdWV1ZS5zaGFyZWQubGFuZXMgPSAwKTtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gbGFzdEJhc2VVcGRhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MkanNjb21wJDAubGFuZXMgPSBsYXN0QmFzZVVwZGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArXG4gICAgICAgIGNhbGxiYWNrXG4gICAgKTtcbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cbmZ1bmN0aW9uIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgY29udGV4dCkge1xuICB2YXIgY2FsbGJhY2tzID0gdXBkYXRlUXVldWUuY2FsbGJhY2tzO1xuICBpZiAobnVsbCAhPT0gY2FsbGJhY2tzKVxuICAgIGZvciAoXG4gICAgICB1cGRhdGVRdWV1ZS5jYWxsYmFja3MgPSBudWxsLCB1cGRhdGVRdWV1ZSA9IDA7XG4gICAgICB1cGRhdGVRdWV1ZSA8IGNhbGxiYWNrcy5sZW5ndGg7XG4gICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgKVxuICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrc1t1cGRhdGVRdWV1ZV0sIGNvbnRleHQpO1xufVxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSByZXR1cm4gITA7XG4gIGlmIChcbiAgICBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb2JqQSB8fFxuICAgIG51bGwgPT09IG9iakEgfHxcbiAgICBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb2JqQiB8fFxuICAgIG51bGwgPT09IG9iakJcbiAgKVxuICAgIHJldHVybiAhMTtcbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSksXG4gICAga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gITE7XG4gIGZvciAoa2V5c0IgPSAwOyBrZXlzQiA8IGtleXNBLmxlbmd0aDsga2V5c0IrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c0Fba2V5c0JdO1xuICAgIGlmIChcbiAgICAgICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iakIsIGN1cnJlbnRLZXkpIHx8XG4gICAgICAhb2JqZWN0SXMob2JqQVtjdXJyZW50S2V5XSwgb2JqQltjdXJyZW50S2V5XSlcbiAgICApXG4gICAgICByZXR1cm4gITE7XG4gIH1cbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGaWJlcihmaWJlcikge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShmaWJlci50eXBlLCBudWxsKTtcbiAgICBjYXNlIDE2OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUoXCJMYXp5XCIsIG51bGwpO1xuICAgIGNhc2UgMTM6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIsIG51bGwpO1xuICAgIGNhc2UgMTk6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiLCBudWxsKTtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMTU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUucmVuZGVyKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gKGZpYmVyID0gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpKSwgZmliZXI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59XG52YXIgU3VzcGVuc2VFeGNlcHRpb24gPSBFcnJvcihcbiAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yISBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBgdXNlYCB0byBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgcmVuZGVyLiBZb3UgbXVzdCBlaXRoZXIgcmV0aHJvdyBpdCBpbW1lZGlhdGVseSwgb3IgbW92ZSB0aGUgYHVzZWAgY2FsbCBvdXRzaWRlIG9mIHRoZSBgdHJ5L2NhdGNoYCBibG9jay4gQ2FwdHVyaW5nIHdpdGhvdXQgcmV0aHJvd2luZyB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cXG5cXG5UbyBoYW5kbGUgYXN5bmMgZXJyb3JzLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGFuIGVycm9yIGJvdW5kYXJ5LCBvciBjYWxsIHRoZSBwcm9taXNlJ3MgYC5jYXRjaGAgbWV0aG9kIGFuZCBwYXNzIHRoZSByZXN1bHQgdG8gYHVzZWBcIlxuICApLFxuICBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24gPSBFcnJvcihcbiAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLCBhbmQgc2hvdWxkIG5vdCBsZWFrIGludG8gdXNlcnNwYWNlLiBJZiB5b3UncmUgc2VlaW5nIHRoaXMsIGl0J3MgbGlrZWx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICksXG4gIG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZSA9IHsgdGhlbjogZnVuY3Rpb24gKCkge30gfTtcbmZ1bmN0aW9uIGlzVGhlbmFibGVSZXNvbHZlZCh0aGVuYWJsZSkge1xuICB0aGVuYWJsZSA9IHRoZW5hYmxlLnN0YXR1cztcbiAgcmV0dXJuIFwiZnVsZmlsbGVkXCIgPT09IHRoZW5hYmxlIHx8IFwicmVqZWN0ZWRcIiA9PT0gdGhlbmFibGU7XG59XG5mdW5jdGlvbiBub29wKCkge31cbmZ1bmN0aW9uIHRyYWNrVXNlZFRoZW5hYmxlKHRoZW5hYmxlU3RhdGUsIHRoZW5hYmxlLCBpbmRleCkge1xuICBpbmRleCA9IHRoZW5hYmxlU3RhdGVbaW5kZXhdO1xuICB2b2lkIDAgPT09IGluZGV4XG4gICAgPyB0aGVuYWJsZVN0YXRlLnB1c2godGhlbmFibGUpXG4gICAgOiBpbmRleCAhPT0gdGhlbmFibGUgJiYgKHRoZW5hYmxlLnRoZW4obm9vcCwgbm9vcCksICh0aGVuYWJsZSA9IGluZGV4KSk7XG4gIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgdGhyb3cgKFxuICAgICAgICAoKHRoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZS5yZWFzb24pLFxuICAgICAgICBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaCh0aGVuYWJsZVN0YXRlKSxcbiAgICAgICAgdGhlbmFibGVTdGF0ZSlcbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzKSB0aGVuYWJsZS50aGVuKG5vb3AsIG5vb3ApO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHRoZW5hYmxlU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgICAgIGlmIChudWxsICE9PSB0aGVuYWJsZVN0YXRlICYmIDEwMCA8IHRoZW5hYmxlU3RhdGUuc2hlbGxTdXNwZW5kQ291bnRlcilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiYXN5bmMvYXdhaXQgaXMgbm90IHlldCBzdXBwb3J0ZWQgaW4gQ2xpZW50IENvbXBvbmVudHMsIG9ubHkgU2VydmVyIENvbXBvbmVudHMuIFRoaXMgZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgdG8gYSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgc2VydmVyLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlO1xuICAgICAgICB0aGVuYWJsZVN0YXRlLnN0YXR1cyA9IFwicGVuZGluZ1wiO1xuICAgICAgICB0aGVuYWJsZVN0YXRlLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoXCJwZW5kaW5nXCIgPT09IHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgICB2YXIgZnVsZmlsbGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUudmFsdWUgPSBmdWxmaWxsZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgdmFyIHJlamVjdGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgKCh0aGVuYWJsZVN0YXRlID0gdGhlbmFibGUucmVhc29uKSxcbiAgICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2godGhlbmFibGVTdGF0ZSksXG4gICAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgdGhyb3cgU3VzcGVuc2VFeGNlcHRpb247XG4gIH1cbn1cbnZhciBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG5mdW5jdGlvbiBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpIHtcbiAgaWYgKG51bGwgPT09IHN1c3BlbmRlZFRoZW5hYmxlKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJFeHBlY3RlZCBhIHN1c3BlbmRlZCB0aGVuYWJsZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICApO1xuICB2YXIgdGhlbmFibGUgPSBzdXNwZW5kZWRUaGVuYWJsZTtcbiAgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuICByZXR1cm4gdGhlbmFibGU7XG59XG5mdW5jdGlvbiBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaChyZWplY3RlZFJlYXNvbikge1xuICBpZiAocmVqZWN0ZWRSZWFzb24gPT09IFN1c3BlbnNlRXhjZXB0aW9uKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJIb29rcyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYW4gYXN5bmMgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIG9mdGVuIGNhdXNlZCBieSBhY2NpZGVudGFsbHkgYWRkaW5nIGAndXNlIGNsaWVudCdgIHRvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIHNlcnZlci5cIlxuICAgICk7XG59XG52YXIgdGhlbmFibGVTdGF0ZSQxID0gbnVsbCxcbiAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG5mdW5jdGlvbiB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSkge1xuICB2YXIgaW5kZXggPSB0aGVuYWJsZUluZGV4Q291bnRlciQxO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciQxICs9IDE7XG4gIG51bGwgPT09IHRoZW5hYmxlU3RhdGUkMSAmJiAodGhlbmFibGVTdGF0ZSQxID0gW10pO1xuICByZXR1cm4gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSQxLCB0aGVuYWJsZSwgaW5kZXgpO1xufVxuZnVuY3Rpb24gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSB7XG4gIHJldHVybkZpYmVyID0gZWxlbWVudC5yZWY7XG4gIGlmIChcbiAgICBudWxsICE9PSByZXR1cm5GaWJlciAmJlxuICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJldHVybkZpYmVyICYmXG4gICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHJldHVybkZpYmVyXG4gICkge1xuICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKDEgIT09IGVsZW1lbnQudGFnKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzLiBXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgdmFyIGluc3QgPSBlbGVtZW50LnN0YXRlTm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5zdClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJNaXNzaW5nIG93bmVyIGZvciBzdHJpbmcgcmVmIFwiICtcbiAgICAgICAgICAgIHJldHVybkZpYmVyICtcbiAgICAgICAgICAgIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgcmVzb2x2ZWRJbnN0ID0gaW5zdCxcbiAgICAgICAgc3RyaW5nUmVmID0gXCJcIiArIHJldHVybkZpYmVyO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQucmVmICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGN1cnJlbnQucmVmICYmXG4gICAgICAgIGN1cnJlbnQucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZlxuICAgICAgKVxuICAgICAgICByZXR1cm4gY3VycmVudC5yZWY7XG4gICAgICBjdXJyZW50ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZWZzID0gcmVzb2x2ZWRJbnN0LnJlZnM7XG4gICAgICAgIG51bGwgPT09IHZhbHVlID8gZGVsZXRlIHJlZnNbc3RyaW5nUmVmXSA6IChyZWZzW3N0cmluZ1JlZl0gPSB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY3VycmVudC5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcmV0dXJuRmliZXIpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIlxuICAgICAgKTtcbiAgICBpZiAoIWVsZW1lbnQuX293bmVyKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoXCIgK1xuICAgICAgICAgIHJldHVybkZpYmVyICtcbiAgICAgICAgICBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICApO1xuICB9XG4gIHJldHVybiByZXR1cm5GaWJlcjtcbn1cbmZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgcmV0dXJuRmliZXIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpO1xuICB0aHJvdyBFcnJvcihcbiAgICBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgK1xuICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IHJldHVybkZpYmVyXG4gICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICA6IHJldHVybkZpYmVyKSArXG4gICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICApO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxhenkobGF6eVR5cGUpIHtcbiAgdmFyIGluaXQgPSBsYXp5VHlwZS5faW5pdDtcbiAgcmV0dXJuIGluaXQobGF6eVR5cGUuX3BheWxvYWQpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcbiAgICAgIG51bGwgPT09IGRlbGV0aW9uc1xuICAgICAgICA/ICgocmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2NoaWxkVG9EZWxldGVdKSwgKHJldHVybkZpYmVyLmZsYWdzIHw9IDE2KSlcbiAgICAgICAgOiBkZWxldGlvbnMucHVzaChjaGlsZFRvRGVsZXRlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKDsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7IClcbiAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGZvciAocmV0dXJuRmliZXIgPSBuZXcgTWFwKCk7IG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkOyApXG4gICAgICBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZC5rZXlcbiAgICAgICAgPyByZXR1cm5GaWJlci5zZXQoY3VycmVudEZpcnN0Q2hpbGQua2V5LCBjdXJyZW50Rmlyc3RDaGlsZClcbiAgICAgICAgOiByZXR1cm5GaWJlci5zZXQoY3VycmVudEZpcnN0Q2hpbGQuaW5kZXgsIGN1cnJlbnRGaXJzdENoaWxkKSxcbiAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICB9XG4gIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICBmaWJlciA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgIGZpYmVyLmluZGV4ID0gMDtcbiAgICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgICByZXR1cm4gZmliZXI7XG4gIH1cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKVxuICAgICAgcmV0dXJuIChuZXdGaWJlci5mbGFncyB8PSAxMDQ4NTc2KSwgbGFzdFBsYWNlZEluZGV4O1xuICAgIG5ld0luZGV4ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuICAgIGlmIChudWxsICE9PSBuZXdJbmRleClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChuZXdJbmRleCA9IG5ld0luZGV4LmluZGV4KSxcbiAgICAgICAgbmV3SW5kZXggPCBsYXN0UGxhY2VkSW5kZXhcbiAgICAgICAgICA/ICgobmV3RmliZXIuZmxhZ3MgfD0gMzM1NTQ0MzQpLCBsYXN0UGxhY2VkSW5kZXgpXG4gICAgICAgICAgOiBuZXdJbmRleFxuICAgICAgKTtcbiAgICBuZXdGaWJlci5mbGFncyB8PSAzMzU1NDQzNDtcbiAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICB9XG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICBudWxsID09PSBuZXdGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgIChuZXdGaWJlci5mbGFncyB8PSAzMzU1NDQzNCk7XG4gICAgcmV0dXJuIG5ld0ZpYmVyO1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCA2ICE9PSBjdXJyZW50LnRhZylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpKSxcbiAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICBjdXJyZW50XG4gICAgICApO1xuICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpXG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuLFxuICAgICAgICBsYW5lcyxcbiAgICAgICAgZWxlbWVudC5rZXlcbiAgICAgICk7XG4gICAgaWYgKFxuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICBudWxsICE9PSBlbGVtZW50VHlwZSAmJlxuICAgICAgICAgIGVsZW1lbnRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICByZXNvbHZlTGF6eShlbGVtZW50VHlwZSkgPT09IGN1cnJlbnQudHlwZSkpXG4gICAgKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGxhbmVzID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcykpLFxuICAgICAgICAobGFuZXMucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSksXG4gICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgIGxhbmVzXG4gICAgICApO1xuICAgIGxhbmVzID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgZWxlbWVudC50eXBlLFxuICAgICAgZWxlbWVudC5rZXksXG4gICAgICBlbGVtZW50LnByb3BzLFxuICAgICAgbnVsbCxcbiAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICBsYW5lc1xuICAgICk7XG4gICAgbGFuZXMucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gbGFuZXM7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKFxuICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgNCAhPT0gY3VycmVudC50YWcgfHxcbiAgICAgIGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8XG4gICAgICBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gICAgKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcykpLFxuICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgIGN1cnJlbnRcbiAgICAgICk7XG4gICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZnJhZ21lbnQsIGxhbmVzLCBrZXkpIHtcbiAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCA3ICE9PSBjdXJyZW50LnRhZylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICBrZXlcbiAgICAgICAgKSksXG4gICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgY3VycmVudFxuICAgICAgKTtcbiAgICBjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgZnJhZ21lbnQpO1xuICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmIChcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICAobmV3Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgIFwiXCIgKyBuZXdDaGlsZCxcbiAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICkpLFxuICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICBuZXdDaGlsZFxuICAgICAgKTtcbiAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGFuZXMgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgICAgIG5ld0NoaWxkLnR5cGUsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLmtleSxcbiAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChsYW5lcy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKSksXG4gICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobmV3Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwoXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0O1xuICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgaW5pdChuZXdDaGlsZC5fcGF5bG9hZCksIGxhbmVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApKSxcbiAgICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksIGxhbmVzKTtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICByZXR1cm4gY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBudWxsICE9PSBvbGRGaWJlciA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG4gICAgaWYgKFxuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgIClcbiAgICAgIHJldHVybiBudWxsICE9PSBrZXlcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBcIlwiICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBuZXdDaGlsZC5rZXkgPT09IGtleVxuICAgICAgICAgICAgPyB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBuZXdDaGlsZC5rZXkgPT09IGtleVxuICAgICAgICAgICAgPyB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoa2V5ID0gbmV3Q2hpbGQuX2luaXQpLFxuICAgICAgICAgICAgdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIGtleShuZXdDaGlsZC5fcGF5bG9hZCksIGxhbmVzKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKVxuICAgICAgICByZXR1cm4gbnVsbCAhPT0ga2V5XG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNsb3QoXG4gICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNsb3QoXG4gICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChcbiAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgIHJldHVybkZpYmVyLFxuICAgIG5ld0lkeCxcbiAgICBuZXdDaGlsZCxcbiAgICBsYW5lc1xuICApIHtcbiAgICBpZiAoXG4gICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGwpLFxuICAgICAgICB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgZXhpc3RpbmdDaGlsZHJlbiwgXCJcIiArIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICk7XG4gICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICBudWxsID09PSBuZXdDaGlsZC5rZXkgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgKSB8fCBudWxsKSxcbiAgICAgICAgICAgIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9XG4gICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KFxuICAgICAgICAgICAgICAgIG51bGwgPT09IG5ld0NoaWxkLmtleSA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICApIHx8IG51bGwpLFxuICAgICAgICAgICAgdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBleGlzdGluZ0NoaWxkcmVuLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgdmFyIGluaXQgPSBuZXdDaGlsZC5faW5pdDtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIGluaXQobmV3Q2hpbGQuX3BheWxvYWQpLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbCksXG4gICAgICAgICAgdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIG5ld0NoaWxkLCBsYW5lcywgbnVsbClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcyksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgIHJldHVybkZpYmVyLFxuICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgIG5ld0NoaWxkcmVuLFxuICAgIGxhbmVzXG4gICkge1xuICAgIGZvciAoXG4gICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGwsXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBudWxsLFxuICAgICAgICBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDtcbiAgICAgIG5ld0lkeCsrXG4gICAgKSB7XG4gICAgICBvbGRGaWJlci5pbmRleCA+IG5ld0lkeFxuICAgICAgICA/ICgobmV4dE9sZEZpYmVyID0gb2xkRmliZXIpLCAob2xkRmliZXIgPSBudWxsKSlcbiAgICAgICAgOiAobmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZyk7XG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgb2xkRmliZXIsXG4gICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgIGxhbmVzXG4gICAgICApO1xuICAgICAgaWYgKG51bGwgPT09IG5ld0ZpYmVyKSB7XG4gICAgICAgIG51bGwgPT09IG9sZEZpYmVyICYmIChvbGRGaWJlciA9IG5leHRPbGRGaWJlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICBvbGRGaWJlciAmJlxuICAgICAgICBudWxsID09PSBuZXdGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChuZXdGaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCk7XG4gICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcilcbiAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXIpO1xuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlciksIHJlc3VsdGluZ0ZpcnN0Q2hpbGRcbiAgICAgICk7XG4gICAgaWYgKG51bGwgPT09IG9sZEZpYmVyKSB7XG4gICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKylcbiAgICAgICAgKG9sZEZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKSksXG4gICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiZcbiAgICAgICAgICAgICgoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIG5ld0lkeFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBvbGRGaWJlcilcbiAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gb2xkRmliZXIpLFxuICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBvbGRGaWJlcikpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuICAgIGZvciAoXG4gICAgICBvbGRGaWJlciA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgICBuZXdJZHgrK1xuICAgIClcbiAgICAgIChuZXh0T2xkRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIG5ld0lkeCxcbiAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgbGFuZXNcbiAgICAgICkpLFxuICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIgJiZcbiAgICAgICAgICAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgb2xkRmliZXIuZGVsZXRlKFxuICAgICAgICAgICAgICBudWxsID09PSBuZXh0T2xkRmliZXIua2V5ID8gbmV3SWR4IDogbmV4dE9sZEZpYmVyLmtleVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgbmV4dE9sZEZpYmVyLFxuICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICApKSxcbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV4dE9sZEZpYmVyKVxuICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV4dE9sZEZpYmVyKSxcbiAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IG5leHRPbGRGaWJlcikpO1xuICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgIG9sZEZpYmVyLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihcbiAgICByZXR1cm5GaWJlcixcbiAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICBuZXdDaGlsZHJlbkl0ZXJhYmxlLFxuICAgIGxhbmVzXG4gICkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcbiAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaXRlcmF0b3JGbilcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgbmV3Q2hpbGRyZW5JdGVyYWJsZSA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcbiAgICBpZiAobnVsbCA9PSBuZXdDaGlsZHJlbkl0ZXJhYmxlKVxuICAgICAgdGhyb3cgRXJyb3IoXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIpO1xuICAgIGZvciAoXG4gICAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IChpdGVyYXRvckZuID0gbnVsbCksXG4gICAgICAgIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0lkeCA9IChjdXJyZW50Rmlyc3RDaGlsZCA9IDApLFxuICAgICAgICBuZXh0T2xkRmliZXIgPSBudWxsLFxuICAgICAgICBzdGVwID0gbmV3Q2hpbGRyZW5JdGVyYWJsZS5uZXh0KCk7XG4gICAgICBudWxsICE9PSBvbGRGaWJlciAmJiAhc3RlcC5kb25lO1xuICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbkl0ZXJhYmxlLm5leHQoKVxuICAgICkge1xuICAgICAgb2xkRmliZXIuaW5kZXggPiBuZXdJZHhcbiAgICAgICAgPyAoKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyKSwgKG9sZEZpYmVyID0gbnVsbCkpXG4gICAgICAgIDogKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmcpO1xuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcbiAgICAgIGlmIChudWxsID09PSBuZXdGaWJlcikge1xuICAgICAgICBudWxsID09PSBvbGRGaWJlciAmJiAob2xkRmliZXIgPSBuZXh0T2xkRmliZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgb2xkRmliZXIgJiZcbiAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpO1xuICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICA/IChpdGVyYXRvckZuID0gbmV3RmliZXIpXG4gICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyKTtcbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cbiAgICBpZiAoc3RlcC5kb25lKVxuICAgICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlciksIGl0ZXJhdG9yRm47XG4gICAgaWYgKG51bGwgPT09IG9sZEZpYmVyKSB7XG4gICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbkl0ZXJhYmxlLm5leHQoKSlcbiAgICAgICAgKHN0ZXAgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpKSxcbiAgICAgICAgICBudWxsICE9PSBzdGVwICYmXG4gICAgICAgICAgICAoKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChzdGVwLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3SWR4KSksXG4gICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgID8gKGl0ZXJhdG9yRm4gPSBzdGVwKVxuICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBzdGVwKSxcbiAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gc3RlcCkpO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICAgIGZvciAoXG4gICAgICBvbGRGaWJlciA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAhc3RlcC5kb25lO1xuICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbkl0ZXJhYmxlLm5leHQoKVxuICAgIClcbiAgICAgIChzdGVwID0gdXBkYXRlRnJvbU1hcChvbGRGaWJlciwgcmV0dXJuRmliZXIsIG5ld0lkeCwgc3RlcC52YWx1ZSwgbGFuZXMpKSxcbiAgICAgICAgbnVsbCAhPT0gc3RlcCAmJlxuICAgICAgICAgIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICBudWxsICE9PSBzdGVwLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgb2xkRmliZXIuZGVsZXRlKG51bGwgPT09IHN0ZXAua2V5ID8gbmV3SWR4IDogc3RlcC5rZXkpLFxuICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoc3RlcCwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCkpLFxuICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgID8gKGl0ZXJhdG9yRm4gPSBzdGVwKVxuICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gc3RlcCksXG4gICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBzdGVwKSk7XG4gICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgb2xkRmliZXIuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgcmV0dXJuRmliZXIsXG4gICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgbmV3Q2hpbGQsXG4gICAgbGFuZXNcbiAgKSB7XG4gICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICBudWxsICE9PSBuZXdDaGlsZCAmJlxuICAgICAgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJlxuICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ICYmXG4gICAgICAobmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICB2YXIga2V5ID0gbmV3Q2hpbGQua2V5LCBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgICAgICAgICAgICBudWxsICE9PSBjaGlsZDtcblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgIGtleSA9IG5ld0NoaWxkLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgICAgaWYgKDcgPT09IGNoaWxkLnRhZykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gdXNlRmliZXIoXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIGNoaWxkLmVsZW1lbnRUeXBlID09PSBrZXkgfHxcbiAgICAgICAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2Yga2V5ICYmXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGtleSAmJlxuICAgICAgICAgICAgICAgICAgICBrZXkuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlTGF6eShrZXkpID09PSBjaGlsZC50eXBlKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSB1c2VGaWJlcihjaGlsZCwgbmV3Q2hpbGQucHJvcHMpO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQucmVmID0gY29lcmNlUmVmKFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfSBlbHNlIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEVcbiAgICAgICAgICAgICAgPyAoKGN1cnJlbnRGaXJzdENoaWxkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQpKVxuICAgICAgICAgICAgICA6ICgobGFuZXMgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQua2V5LFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGxhbmVzLnJlZiA9IGNvZXJjZVJlZihcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIGZvciAoY2hpbGQgPSBuZXdDaGlsZC5rZXk7IG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkOyApIHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkLmtleSA9PT0gY2hpbGQpXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgNCA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnICYmXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT1cbiAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQuY29udGFpbmVySW5mbyAmJlxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PVxuICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5pbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSB1c2VGaWJlcihcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmNoaWxkcmVuIHx8IFtdXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChcbiAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZXR1cm5GaWJlcik7XG4gICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY2hpbGQgPSBuZXdDaGlsZC5faW5pdCksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICBjaGlsZChuZXdDaGlsZC5fcGF5bG9hZCksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkpXG4gICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuICAgIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgICA/ICgobmV3Q2hpbGQgPSBcIlwiICsgbmV3Q2hpbGQpLFxuICAgICAgICBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZCAmJiA2ID09PSBjdXJyZW50Rmlyc3RDaGlsZC50YWdcbiAgICAgICAgICA/IChkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyksXG4gICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQpKSxcbiAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZCkpXG4gICAgICAgICAgOiAoZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSxcbiAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQpKSxcbiAgICAgICAgcGxhY2VTaW5nbGVDaGlsZChyZXR1cm5GaWJlcikpXG4gICAgICA6IGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgcmV0dXJuRmliZXIsXG4gICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgbmV3Q2hpbGQsXG4gICAgbGFuZXNcbiAgKSB7XG4gICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgcmV0dXJuRmliZXIgPSByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICByZXR1cm5GaWJlcixcbiAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgbmV3Q2hpbGQsXG4gICAgICBsYW5lc1xuICAgICk7XG4gICAgdGhlbmFibGVTdGF0ZSQxID0gbnVsbDtcbiAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gIH1cbiAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzO1xufVxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKCEwKSxcbiAgbW91bnRDaGlsZEZpYmVycyA9IGNyZWF0ZUNoaWxkUmVjb25jaWxlcighMSksXG4gIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKTtcbmZ1bmN0aW9uIHB1c2hIaWRkZW5Db250ZXh0KGZpYmVyLCBjb250ZXh0KSB7XG4gIGZpYmVyID0gZW50YW5nbGVkUmVuZGVyTGFuZXM7XG4gIHB1c2gocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG4gIHB1c2goY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciwgY29udGV4dCk7XG4gIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gZmliZXIgfCBjb250ZXh0LmJhc2VMYW5lcztcbn1cbmZ1bmN0aW9uIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soKSB7XG4gIHB1c2gocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7XG4gIHB1c2goY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciwgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50KTtcbn1cbmZ1bmN0aW9uIHBvcEhpZGRlbkNvbnRleHQoKSB7XG4gIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yKTtcbiAgcG9wKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvcik7XG59XG52YXIgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gIHNoZWxsQm91bmRhcnkgPSBudWxsO1xuZnVuY3Rpb24gcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKGhhbmRsZXIpIHtcbiAgdmFyIGN1cnJlbnQgPSBoYW5kbGVyLmFsdGVybmF0ZTtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQgJiAxKTtcbiAgcHVzaChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgaGFuZGxlcik7XG4gIG51bGwgPT09IHNoZWxsQm91bmRhcnkgJiZcbiAgICAobnVsbCA9PT0gY3VycmVudCB8fCBudWxsICE9PSBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLmN1cnJlbnRcbiAgICAgID8gKHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyKVxuICAgICAgOiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiYgKHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyKSk7XG59XG5mdW5jdGlvbiBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gIGlmICgyMiA9PT0gZmliZXIudGFnKSB7XG4gICAgaWYgKFxuICAgICAgKHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSxcbiAgICAgIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyKSxcbiAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkpXG4gICAgKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgIChzaGVsbEJvdW5kYXJ5ID0gZmliZXIpO1xuICAgIH1cbiAgfSBlbHNlIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayhmaWJlcik7XG59XG5mdW5jdGlvbiByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soKSB7XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgcHVzaChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCk7XG59XG5mdW5jdGlvbiBwb3BTdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgcG9wKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yKTtcbiAgc2hlbGxCb3VuZGFyeSA9PT0gZmliZXIgJiYgKHNoZWxsQm91bmRhcnkgPSBudWxsKTtcbiAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IpO1xufVxudmFyIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoMCk7XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIGZvciAodmFyIG5vZGUgPSByb3c7IG51bGwgIT09IG5vZGU7ICkge1xuICAgIGlmICgxMyA9PT0gbm9kZS50YWcpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBzdGF0ZSAmJiAobnVsbCA9PT0gc3RhdGUuZGVoeWRyYXRlZCB8fCBzaGltJDEoKSB8fCBzaGltJDEoKSkpXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAoMTkgPT09IG5vZGUudGFnICYmIHZvaWQgMCAhPT0gbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKSB7XG4gICAgICBpZiAoMCAhPT0gKG5vZGUuZmxhZ3MgJiAxMjgpKSByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG51bGwgIT09IG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChub2RlID09PSByb3cpIGJyZWFrO1xuICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgaWYgKG51bGwgPT09IG5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsXG4gIHJlbmRlckxhbmVzID0gMCxcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGwsXG4gIGN1cnJlbnRIb29rID0gbnVsbCxcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbCxcbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9ICExLFxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSAhMSxcbiAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSAhMSxcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwLFxuICB0aGVuYWJsZVN0YXRlID0gbnVsbCxcbiAgZ2xvYmFsQ2xpZW50SWRDb3VudGVyID0gMDtcbmZ1bmN0aW9uIHRocm93SW52YWxpZEhvb2tFcnJvcigpIHtcbiAgdGhyb3cgRXJyb3IoXG4gICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIlxuICApO1xufVxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICBpZiAobnVsbCA9PT0gcHJldkRlcHMpIHJldHVybiAhMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2RGVwcy5sZW5ndGggJiYgaSA8IG5leHREZXBzLmxlbmd0aDsgaSsrKVxuICAgIGlmICghb2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkgcmV0dXJuICExO1xuICByZXR1cm4gITA7XG59XG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3MoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBDb21wb25lbnQsXG4gIHByb3BzLFxuICBzZWNvbmRBcmcsXG4gIG5leHRSZW5kZXJMYW5lc1xuKSB7XG4gIHJlbmRlckxhbmVzID0gbmV4dFJlbmRlckxhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gMDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPVxuICAgIG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICA/IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRcbiAgICAgIDogSG9va3NEaXNwYXRjaGVyT25VcGRhdGU7XG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gITE7XG4gIGN1cnJlbnQgPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gITE7XG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyAmJlxuICAgIChjdXJyZW50ID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgc2Vjb25kQXJnXG4gICAgKSk7XG4gIGZpbmlzaFJlbmRlcmluZ0hvb2tzKCk7XG4gIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gZmluaXNoUmVuZGVyaW5nSG9va3MoKSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBudWxsICE9PSBjdXJyZW50SG9vayAmJiBudWxsICE9PSBjdXJyZW50SG9vay5uZXh0O1xuICByZW5kZXJMYW5lcyA9IDA7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMTtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbiAgaWYgKGRpZFJlbmRlclRvb0Zld0hvb2tzKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiXG4gICAgKTtcbn1cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rc0FnYWluKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuICBkbyB7XG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzICYmICh0aGVuYWJsZVN0YXRlID0gbnVsbCk7XG4gICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExO1xuICAgIGlmICgyNSA8PSBudW1iZXJPZlJlUmVuZGVycylcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiXG4gICAgICApO1xuICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudEhvb2sgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXI7XG4gICAgdmFyIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTIwNTM7XG4gIGN1cnJlbnQubGFuZXMgJj0gfmxhbmVzO1xufVxuZnVuY3Rpb24gcmVzZXRIb29rc09uVW53aW5kKHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgZm9yIChcbiAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzO1xuXG4gICAgKSB7XG4gICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy5xdWV1ZTtcbiAgICAgIG51bGwgIT09IHF1ZXVlICYmIChxdWV1ZS5wZW5kaW5nID0gbnVsbCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLm5leHQ7XG4gICAgfVxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMTtcbiAgfVxuICByZW5kZXJMYW5lcyA9IDA7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciA9IDA7XG4gIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xufVxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIHZhciBob29rID0ge1xuICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgYmFzZVN0YXRlOiBudWxsLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgID8gKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2spXG4gICAgOiAod29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgaWYgKG51bGwgPT09IGN1cnJlbnRIb29rKSB7XG4gICAgdmFyIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuICAgIG5leHRDdXJyZW50SG9vayA9XG4gICAgICBudWxsICE9PSBuZXh0Q3VycmVudEhvb2sgPyBuZXh0Q3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gIH0gZWxzZSBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICA/IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZVxuICAgICAgOiB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgaWYgKG51bGwgIT09IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2spXG4gICAgKHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2spLFxuICAgICAgKGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rKTtcbiAgZWxzZSB7XG4gICAgaWYgKG51bGwgPT09IG5leHRDdXJyZW50SG9vaykge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlVwZGF0ZSBob29rIGNhbGxlZCBvbiBpbml0aWFsIHJlbmRlci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICB0aHJvdyBFcnJvcihcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIik7XG4gICAgfVxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIG5leHRDdXJyZW50SG9vayA9IHtcbiAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRIb29rLmJhc2VTdGF0ZSxcbiAgICAgIGJhc2VRdWV1ZTogY3VycmVudEhvb2suYmFzZVF1ZXVlLFxuICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG4gICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICA/IChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICAgIG5leHRDdXJyZW50SG9vaylcbiAgICAgIDogKHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV4dEN1cnJlbnRIb29rKTtcbiAgfVxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxudmFyIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWU7XG5jcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4geyBsYXN0RWZmZWN0OiBudWxsLCBldmVudHM6IG51bGwsIHN0b3JlczogbnVsbCB9O1xufTtcbmZ1bmN0aW9uIHVzZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gIHZhciBpbmRleCA9IHRoZW5hYmxlSW5kZXhDb3VudGVyO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciArPSAxO1xuICBudWxsID09PSB0aGVuYWJsZVN0YXRlICYmICh0aGVuYWJsZVN0YXRlID0gW10pO1xuICB0aGVuYWJsZSA9IHRyYWNrVXNlZFRoZW5hYmxlKHRoZW5hYmxlU3RhdGUsIHRoZW5hYmxlLCBpbmRleCk7XG4gIG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlICYmXG4gICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgPyBudWxsID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGVcbiAgICAgIDogbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQpICYmXG4gICAgKFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudCk7XG4gIHJldHVybiB0aGVuYWJsZTtcbn1cbmZ1bmN0aW9uIHVzZSh1c2FibGUpIHtcbiAgaWYgKG51bGwgIT09IHVzYWJsZSAmJiBcIm9iamVjdFwiID09PSB0eXBlb2YgdXNhYmxlKSB7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVzYWJsZS50aGVuKSByZXR1cm4gdXNlVGhlbmFibGUodXNhYmxlKTtcbiAgICBpZiAodXNhYmxlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpIHJldHVybiByZWFkQ29udGV4dCh1c2FibGUpO1xuICB9XG4gIHRocm93IEVycm9yKFwiQW4gdW5zdXBwb3J0ZWQgdHlwZSB3YXMgcGFzc2VkIHRvIHVzZSgpOiBcIiArIFN0cmluZyh1c2FibGUpKTtcbn1cbmZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFjdGlvbiA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICBjdXJyZW50ID0gY3VycmVudEhvb2ssXG4gICAgcXVldWUgPSBob29rLnF1ZXVlO1xuICBpZiAobnVsbCA9PT0gcXVldWUpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICk7XG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgYmFzZVF1ZXVlID0gaG9vay5iYXNlUXVldWUsXG4gICAgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcbiAgaWYgKG51bGwgIT09IHBlbmRpbmdRdWV1ZSkge1xuICAgIGlmIChudWxsICE9PSBiYXNlUXVldWUpIHtcbiAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICB9XG4gICAgY3VycmVudC5iYXNlUXVldWUgPSBiYXNlUXVldWUgPSBwZW5kaW5nUXVldWU7XG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gIH1cbiAgcGVuZGluZ1F1ZXVlID0gaG9vay5iYXNlU3RhdGU7XG4gIGlmIChudWxsID09PSBiYXNlUXVldWUpIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgZWxzZSB7XG4gICAgY3VycmVudCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IChiYXNlRmlyc3QgPSBudWxsKSxcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsLFxuICAgICAgdXBkYXRlID0gY3VycmVudDtcbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lICYgLTUzNjg3MDkxMztcbiAgICAgIGlmIChcbiAgICAgICAgdXBkYXRlTGFuZSAhPT0gdXBkYXRlLmxhbmVcbiAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgOiAocmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgKVxuICAgICAgICBudWxsICE9PSBuZXdCYXNlUXVldWVMYXN0ICYmXG4gICAgICAgICAgKG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICByZXZlcnRMYW5lOiAwLFxuICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKHVwZGF0ZUxhbmUgPSB1cGRhdGUuYWN0aW9uKSxcbiAgICAgICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViAmJlxuICAgICAgICAgICAgcmVkdWNlcihwZW5kaW5nUXVldWUsIHVwZGF0ZUxhbmUpLFxuICAgICAgICAgIChwZW5kaW5nUXVldWUgPSB1cGRhdGUuaGFzRWFnZXJTdGF0ZVxuICAgICAgICAgICAgPyB1cGRhdGUuZWFnZXJTdGF0ZVxuICAgICAgICAgICAgOiByZWR1Y2VyKHBlbmRpbmdRdWV1ZSwgdXBkYXRlTGFuZSkpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHJldmVydExhbmU6IHVwZGF0ZS5yZXZlcnRMYW5lLFxuICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICA/ICgobmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gY2xvbmUpLFxuICAgICAgICAgICAgKGJhc2VGaXJzdCA9IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IGNsb25lKTtcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyB8PSB1cGRhdGVMYW5lO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gdXBkYXRlTGFuZTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKG51bGwgIT09IHVwZGF0ZSAmJiB1cGRhdGUgIT09IGN1cnJlbnQpO1xuICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgID8gKGJhc2VGaXJzdCA9IHBlbmRpbmdRdWV1ZSlcbiAgICAgIDogKG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0KTtcbiAgICBvYmplY3RJcyhwZW5kaW5nUXVldWUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCk7XG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gYmFzZUZpcnN0O1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgfVxuICBudWxsID09PSBiYXNlUXVldWUgJiYgKHF1ZXVlLmxhbmVzID0gMCk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBxdWV1ZS5kaXNwYXRjaF07XG59XG5mdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlcikge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLFxuICAgIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgaWYgKG51bGwgPT09IHF1ZXVlKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICApO1xuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2gsXG4gICAgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZyxcbiAgICBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgaWYgKG51bGwgIT09IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSAobGFzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQpO1xuICAgIGRvIChuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIHVwZGF0ZS5hY3Rpb24pKSwgKHVwZGF0ZSA9IHVwZGF0ZS5uZXh0KTtcbiAgICB3aGlsZSAodXBkYXRlICE9PSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUpO1xuICAgIG9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpIHx8IChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIG51bGwgPT09IGhvb2suYmFzZVF1ZXVlICYmIChob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlKTtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG4gIHJldHVybiBbbmV3U3RhdGUsIGRpc3BhdGNoXTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpIHtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0U25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICB2YXIgc25hcHNob3RDaGFuZ2VkID0gIW9iamVjdElzKFxuICAgIChjdXJyZW50SG9vayB8fCBob29rKS5tZW1vaXplZFN0YXRlLFxuICAgIG5leHRTbmFwc2hvdFxuICApO1xuICBzbmFwc2hvdENoYW5nZWQgJiZcbiAgICAoKGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5leHRTbmFwc2hvdCksIChkaWRSZWNlaXZlVXBkYXRlID0gITApKTtcbiAgaG9vayA9IGhvb2sucXVldWU7XG4gIHVwZGF0ZUVmZmVjdChzdWJzY3JpYmVUb1N0b3JlLmJpbmQobnVsbCwgZmliZXIsIGhvb2ssIHN1YnNjcmliZSksIFtcbiAgICBzdWJzY3JpYmVcbiAgXSk7XG4gIGlmIChcbiAgICBob29rLmdldFNuYXBzaG90ICE9PSBnZXRTbmFwc2hvdCB8fFxuICAgIHNuYXBzaG90Q2hhbmdlZCB8fFxuICAgIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzc0hvb2sgJiYgd29ya0luUHJvZ3Jlc3NIb29rLm1lbW9pemVkU3RhdGUudGFnICYgMSlcbiAgKSB7XG4gICAgZmliZXIuZmxhZ3MgfD0gMjA0ODtcbiAgICBwdXNoRWZmZWN0KFxuICAgICAgOSxcbiAgICAgIHVwZGF0ZVN0b3JlSW5zdGFuY2UuYmluZChudWxsLCBmaWJlciwgaG9vaywgbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdCksXG4gICAgICB7IGRlc3Ryb3k6IHZvaWQgMCB9LFxuICAgICAgbnVsbFxuICAgICk7XG4gICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdClcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICAwICE9PSAocmVuZGVyTGFuZXMgJiA2MCkgfHxcbiAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICB9XG4gIHJldHVybiBuZXh0U25hcHNob3Q7XG59XG5mdW5jdGlvbiBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgcmVuZGVyZWRTbmFwc2hvdCkge1xuICBmaWJlci5mbGFncyB8PSAxNjM4NDtcbiAgZmliZXIgPSB7IGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCwgdmFsdWU6IHJlbmRlcmVkU25hcHNob3QgfTtcbiAgZ2V0U25hcHNob3QgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuICBudWxsID09PSBnZXRTbmFwc2hvdFxuICAgID8gKChnZXRTbmFwc2hvdCA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSksXG4gICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGdldFNuYXBzaG90KSxcbiAgICAgIChnZXRTbmFwc2hvdC5zdG9yZXMgPSBbZmliZXJdKSlcbiAgICA6ICgocmVuZGVyZWRTbmFwc2hvdCA9IGdldFNuYXBzaG90LnN0b3JlcyksXG4gICAgICBudWxsID09PSByZW5kZXJlZFNuYXBzaG90XG4gICAgICAgID8gKGdldFNuYXBzaG90LnN0b3JlcyA9IFtmaWJlcl0pXG4gICAgICAgIDogcmVuZGVyZWRTbmFwc2hvdC5wdXNoKGZpYmVyKSk7XG59XG5mdW5jdGlvbiB1cGRhdGVTdG9yZUluc3RhbmNlKGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSB7XG4gIGluc3QudmFsdWUgPSBuZXh0U25hcHNob3Q7XG4gIGluc3QuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDtcbiAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xufVxuZnVuY3Rpb24gc3Vic2NyaWJlVG9TdG9yZShmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSB7XG4gIHJldHVybiBzdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkgJiYgZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpIHtcbiAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgaW5zdCA9IGluc3QudmFsdWU7XG4gIHRyeSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuICFvYmplY3RJcyhpbnN0LCBuZXh0VmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAhMDtcbiAgfVxufVxuZnVuY3Rpb24gZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKSB7XG4gIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpO1xufVxuZnVuY3Rpb24gbW91bnRTdGF0ZUltcGwoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluaXRpYWxTdGF0ZSkge1xuICAgIHZhciBpbml0aWFsU3RhdGVJbml0aWFsaXplciA9IGluaXRpYWxTdGF0ZTtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuICAgIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWICYmIGluaXRpYWxTdGF0ZUluaXRpYWxpemVyKCk7XG4gIH1cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBsYW5lczogMCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHJldHVybiBob29rO1xufVxuZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgaW5zdCwgZGVwcykge1xuICB0YWcgPSB7IHRhZzogdGFnLCBjcmVhdGU6IGNyZWF0ZSwgaW5zdDogaW5zdCwgZGVwczogZGVwcywgbmV4dDogbnVsbCB9O1xuICBjcmVhdGUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuICBudWxsID09PSBjcmVhdGVcbiAgICA/ICgoY3JlYXRlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpKSxcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY3JlYXRlKSxcbiAgICAgIChjcmVhdGUubGFzdEVmZmVjdCA9IHRhZy5uZXh0ID0gdGFnKSlcbiAgICA6ICgoaW5zdCA9IGNyZWF0ZS5sYXN0RWZmZWN0KSxcbiAgICAgIG51bGwgPT09IGluc3RcbiAgICAgICAgPyAoY3JlYXRlLmxhc3RFZmZlY3QgPSB0YWcubmV4dCA9IHRhZylcbiAgICAgICAgOiAoKGRlcHMgPSBpbnN0Lm5leHQpLFxuICAgICAgICAgIChpbnN0Lm5leHQgPSB0YWcpLFxuICAgICAgICAgICh0YWcubmV4dCA9IGRlcHMpLFxuICAgICAgICAgIChjcmVhdGUubGFzdEVmZmVjdCA9IHRhZykpKTtcbiAgcmV0dXJuIHRhZztcbn1cbmZ1bmN0aW9uIHVwZGF0ZVJlZigpIHtcbiAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG59XG5mdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoXG4gICAgMSB8IGhvb2tGbGFncyxcbiAgICBjcmVhdGUsXG4gICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwc1xuICApO1xufVxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gIHZhciBpbnN0ID0gaG9vay5tZW1vaXplZFN0YXRlLmluc3Q7XG4gIG51bGwgIT09IGN1cnJlbnRIb29rICYmXG4gIG51bGwgIT09IGRlcHMgJiZcbiAgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUuZGVwcylcbiAgICA/IChob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KGhvb2tGbGFncywgY3JlYXRlLCBpbnN0LCBkZXBzKSlcbiAgICA6ICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzKSxcbiAgICAgIChob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KDEgfCBob29rRmxhZ3MsIGNyZWF0ZSwgaW5zdCwgZGVwcykpKTtcbn1cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICBtb3VudEVmZmVjdEltcGwoODM5MDY1NiwgOCwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCA4LCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCAyLCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCA0LCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKVxuICAgIHJldHVybiAoXG4gICAgICAoY3JlYXRlID0gY3JlYXRlKCkpLFxuICAgICAgcmVmKGNyZWF0ZSksXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlZihudWxsKTtcbiAgICAgIH1cbiAgICApO1xuICBpZiAobnVsbCAhPT0gcmVmICYmIHZvaWQgMCAhPT0gcmVmKVxuICAgIHJldHVybiAoXG4gICAgICAoY3JlYXRlID0gY3JlYXRlKCkpLFxuICAgICAgKHJlZi5jdXJyZW50ID0gY3JlYXRlKSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgICk7XG59XG5mdW5jdGlvbiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIGRlcHMgPSBudWxsICE9PSBkZXBzICYmIHZvaWQgMCAhPT0gZGVwcyA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHVwZGF0ZUVmZmVjdEltcGwoNCwgNCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZGVwcyk7XG59XG5mdW5jdGlvbiBtb3VudERlYnVnVmFsdWUoKSB7fVxuZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICBpZiAobnVsbCAhPT0gZGVwcyAmJiBhcmVIb29rSW5wdXRzRXF1YWwoZGVwcywgcHJldlN0YXRlWzFdKSlcbiAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIGRlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICBpZiAobnVsbCAhPT0gZGVwcyAmJiBhcmVIb29rSW5wdXRzRXF1YWwoZGVwcywgcHJldlN0YXRlWzFdKSlcbiAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICBwcmV2U3RhdGUgPSBuZXh0Q3JlYXRlKCk7XG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWICYmIG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW3ByZXZTdGF0ZSwgZGVwc107XG4gIHJldHVybiBwcmV2U3RhdGU7XG59XG5mdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgcmV0dXJuIHZvaWQgMCAhPT0gaW5pdGlhbFZhbHVlICYmIDAgPT09IChyZW5kZXJMYW5lcyAmIDEwNzM3NDE4MjQpXG4gICAgPyAoKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZSksXG4gICAgICAoaG9vayA9IHJlcXVlc3REZWZlcnJlZExhbmUoKSksXG4gICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyB8PSBob29rKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gaG9vayksXG4gICAgICBpbml0aWFsVmFsdWUpXG4gICAgOiAoaG9vay5tZW1vaXplZFN0YXRlID0gdmFsdWUpO1xufVxuZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgcHJldlZhbHVlLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyh2YWx1ZSwgcHJldlZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICBpZiAobnVsbCAhPT0gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50KVxuICAgIHJldHVybiAoXG4gICAgICAoaG9vayA9IG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgb2JqZWN0SXMoaG9vaywgcHJldlZhbHVlKSB8fCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAgIGhvb2tcbiAgICApO1xuICBpZiAoMCA9PT0gKHJlbmRlckxhbmVzICYgNDIpKVxuICAgIHJldHVybiAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSwgKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlKTtcbiAgaG9vayA9IHJlcXVlc3REZWZlcnJlZExhbmUoKTtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyB8PSBob29rO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gaG9vaztcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihmaWJlciwgcXVldWUsIHBlbmRpbmdTdGF0ZSwgZmluaXNoZWRTdGF0ZSwgY2FsbGJhY2spIHtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBjdXJyZW50VXBkYXRlUHJpb3JpdHk7XG4gIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9XG4gICAgMCAhPT0gcHJldmlvdXNQcmlvcml0eSAmJiA4ID4gcHJldmlvdXNQcmlvcml0eSA/IHByZXZpb3VzUHJpb3JpdHkgOiA4O1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24sXG4gICAgY3VycmVudFRyYW5zaXRpb24gPSB7IF9jYWxsYmFja3M6IG5ldyBTZXQoKSB9O1xuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24gPSBudWxsO1xuICBkaXNwYXRjaFNldFN0YXRlKGZpYmVyLCBxdWV1ZSwgcGVuZGluZ1N0YXRlKTtcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uID0gY3VycmVudFRyYW5zaXRpb247XG4gIHRyeSB7XG4gICAgZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIGZpbmlzaGVkU3RhdGUpLCBjYWxsYmFjaygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIChjdXJyZW50VXBkYXRlUHJpb3JpdHkgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgIChSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbik7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUlkKCkge1xuICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoUmVkdWNlckFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgYWN0aW9uID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgcmV2ZXJ0TGFuZTogMCxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcilcbiAgICA/IGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgYWN0aW9uKVxuICAgIDogKGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIGFjdGlvbiwgbGFuZSksXG4gICAgICAoYWN0aW9uID0gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcikpLFxuICAgICAgbnVsbCAhPT0gYWN0aW9uICYmXG4gICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIoYWN0aW9uLCBmaWJlciwgbGFuZSksXG4gICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShhY3Rpb24sIHF1ZXVlLCBsYW5lKSkpO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSxcbiAgICB1cGRhdGUgPSB7XG4gICAgICBsYW5lOiBsYW5lLFxuICAgICAgcmV2ZXJ0TGFuZTogMCxcbiAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG4gIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSkgZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpO1xuICBlbHNlIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgIGlmIChcbiAgICAgIDAgPT09IGZpYmVyLmxhbmVzICYmXG4gICAgICAobnVsbCA9PT0gYWx0ZXJuYXRlIHx8IDAgPT09IGFsdGVybmF0ZS5sYW5lcykgJiZcbiAgICAgICgoYWx0ZXJuYXRlID0gcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciksIG51bGwgIT09IGFsdGVybmF0ZSlcbiAgICApXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGUsXG4gICAgICAgICAgZWFnZXJTdGF0ZSA9IGFsdGVybmF0ZShjdXJyZW50U3RhdGUsIGFjdGlvbik7XG4gICAgICAgIHVwZGF0ZS5oYXNFYWdlclN0YXRlID0gITA7XG4gICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcbiAgICAgICAgaWYgKG9iamVjdElzKGVhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIDApO1xuICAgICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgIH1cbiAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgIGFjdGlvbiA9IGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIG51bGwgIT09IGFjdGlvbiAmJlxuICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihhY3Rpb24sIGZpYmVyLCBsYW5lKSxcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShhY3Rpb24sIHF1ZXVlLCBsYW5lKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgcmV0dXJuIChcbiAgICBmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fFxuICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKVxuICApO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpIHtcbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9XG4gICAgITA7XG4gIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcbiAgbnVsbCA9PT0gcGVuZGluZ1xuICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgIDogKCh1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dCksIChwZW5kaW5nLm5leHQgPSB1cGRhdGUpKTtcbiAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShyb290LCBxdWV1ZSwgbGFuZSkge1xuICBpZiAoMCAhPT0gKGxhbmUgJiA0MTk0MTc2KSkge1xuICAgIHZhciBxdWV1ZUxhbmVzID0gcXVldWUubGFuZXM7XG4gICAgcXVldWVMYW5lcyAmPSByb290LnBlbmRpbmdMYW5lcztcbiAgICBsYW5lIHw9IHF1ZXVlTGFuZXM7XG4gICAgcXVldWUubGFuZXMgPSBsYW5lO1xuICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGxhbmUpO1xuICB9XG59XG52YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICAgIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICB1c2U6IHVzZSxcbiAgICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgdXNlSWQ6IHRocm93SW52YWxpZEhvb2tFcnJvclxuICB9LFxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50ID0ge1xuICAgIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICB1c2U6IHVzZSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBbXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwc1xuICAgICAgXTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IHJlYWRDb250ZXh0LFxuICAgIHVzZUVmZmVjdDogbW91bnRFZmZlY3QsXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgbW91bnRFZmZlY3RJbXBsKFxuICAgICAgICA0MTk0MzA4LFxuICAgICAgICA0LFxuICAgICAgICBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLFxuICAgICAgICBkZXBzXG4gICAgICApO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKDQxOTQzMDgsIDQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIG1vdW50RWZmZWN0SW1wbCg0LCAyLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViAmJiBuZXh0Q3JlYXRlKCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBkZXBzXTtcbiAgICAgIHJldHVybiBuZXh0VmFsdWU7XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gaW5pdCkge1xuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgJiYgaW5pdChpbml0aWFsQXJnKTtcbiAgICAgIH0gZWxzZSBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICByZWR1Y2VyID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogMCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gcmVkdWNlcjtcbiAgICAgIHJlZHVjZXIgPSByZWR1Y2VyLmRpc3BhdGNoID0gZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgICAgIHJlZHVjZXJcbiAgICAgICk7XG4gICAgICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgcmVkdWNlcl07XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IHsgY3VycmVudDogaW5pdGlhbFZhbHVlIH07XG4gICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgaW5pdGlhbFN0YXRlID0gbW91bnRTdGF0ZUltcGwoaW5pdGlhbFN0YXRlKTtcbiAgICAgIHZhciBxdWV1ZSA9IGluaXRpYWxTdGF0ZS5xdWV1ZSxcbiAgICAgICAgZGlzcGF0Y2ggPSBkaXNwYXRjaFNldFN0YXRlLmJpbmQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICAgIHF1ZXVlXG4gICAgICAgICk7XG4gICAgICBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgICAgcmV0dXJuIFtpbml0aWFsU3RhdGUubWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogbW91bnREZWJ1Z1ZhbHVlLFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZUhvb2sgPSBtb3VudFN0YXRlSW1wbCghMSk7XG4gICAgICBzdGF0ZUhvb2sgPSBzdGFydFRyYW5zaXRpb24uYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgc3RhdGVIb29rLnF1ZXVlLFxuICAgICAgICAhMCxcbiAgICAgICAgITFcbiAgICAgICk7XG4gICAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2s7XG4gICAgICByZXR1cm4gWyExLCBzdGF0ZUhvb2tdO1xuICAgIH0sXG4gICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChzdWJzY3JpYmUsIGdldFNuYXBzaG90KSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBuZXh0U25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDYwKSB8fFxuICAgICAgICBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgbmV4dFNuYXBzaG90KTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5leHRTbmFwc2hvdDtcbiAgICAgIHZhciBpbnN0ID0geyB2YWx1ZTogbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QgfTtcbiAgICAgIGhvb2sucXVldWUgPSBpbnN0O1xuICAgICAgbW91bnRFZmZlY3Qoc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBpbnN0LCBzdWJzY3JpYmUpLCBbXG4gICAgICAgIHN1YnNjcmliZVxuICAgICAgXSk7XG4gICAgICBmaWJlci5mbGFncyB8PSAyMDQ4O1xuICAgICAgcHVzaEVmZmVjdChcbiAgICAgICAgOSxcbiAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKG51bGwsIGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSxcbiAgICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXh0U25hcHNob3Q7XG4gICAgfSxcbiAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gd29ya0luUHJvZ3Jlc3NSb290LmlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIGdsb2JhbENsaWVudElkID0gZ2xvYmFsQ2xpZW50SWRDb3VudGVyKys7XG4gICAgICBpZGVudGlmaWVyUHJlZml4ID1cbiAgICAgICAgXCI6XCIgKyBpZGVudGlmaWVyUHJlZml4ICsgXCJyXCIgKyBnbG9iYWxDbGllbnRJZC50b1N0cmluZygzMikgKyBcIjpcIjtcbiAgICAgIHJldHVybiAoaG9vay5tZW1vaXplZFN0YXRlID0gaWRlbnRpZmllclByZWZpeCk7XG4gICAgfVxuICB9LFxuICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZSA9IHtcbiAgICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gICAgdXNlOiB1c2UsXG4gICAgdXNlQ2FsbGJhY2s6IHVwZGF0ZUNhbGxiYWNrLFxuICAgIHVzZUNvbnRleHQ6IHJlYWRDb250ZXh0LFxuICAgIHVzZUVmZmVjdDogdXBkYXRlRWZmZWN0LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUsXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiB1cGRhdGVJbnNlcnRpb25FZmZlY3QsXG4gICAgdXNlTGF5b3V0RWZmZWN0OiB1cGRhdGVMYXlvdXRFZmZlY3QsXG4gICAgdXNlTWVtbzogdXBkYXRlTWVtbyxcbiAgICB1c2VSZWR1Y2VyOiB1cGRhdGVSZWR1Y2VyLFxuICAgIHVzZVJlZjogdXBkYXRlUmVmLFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBtb3VudERlYnVnVmFsdWUsXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoXG4gICAgICAgIGhvb2ssXG4gICAgICAgIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYm9vbGVhbk9yVGhlbmFibGUgPSB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKVswXSxcbiAgICAgICAgc3RhcnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgID8gYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKSxcbiAgICAgICAgc3RhcnRcbiAgICAgIF07XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogdXBkYXRlU3luY0V4dGVybmFsU3RvcmUsXG4gICAgdXNlSWQ6IHVwZGF0ZUlkXG4gIH0sXG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIgPSB7XG4gICAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICAgIHVzZTogdXNlLFxuICAgIHVzZUNhbGxiYWNrOiB1cGRhdGVDYWxsYmFjayxcbiAgICB1c2VDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICB1c2VFZmZlY3Q6IHVwZGF0ZUVmZmVjdCxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlLFxuICAgIHVzZUluc2VydGlvbkVmZmVjdDogdXBkYXRlSW5zZXJ0aW9uRWZmZWN0LFxuICAgIHVzZUxheW91dEVmZmVjdDogdXBkYXRlTGF5b3V0RWZmZWN0LFxuICAgIHVzZU1lbW86IHVwZGF0ZU1lbW8sXG4gICAgdXNlUmVkdWNlcjogcmVyZW5kZXJSZWR1Y2VyLFxuICAgIHVzZVJlZjogdXBkYXRlUmVmLFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IG1vdW50RGVidWdWYWx1ZSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiBudWxsID09PSBjdXJyZW50SG9va1xuICAgICAgICA/IG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSlcbiAgICAgICAgOiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChcbiAgICAgICAgICAgIGhvb2ssXG4gICAgICAgICAgICBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICAgICApO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJvb2xlYW5PclRoZW5hYmxlID0gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKVswXSxcbiAgICAgICAgc3RhcnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgID8gYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKSxcbiAgICAgICAgc3RhcnRcbiAgICAgIF07XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogdXBkYXRlU3luY0V4dGVybmFsU3RvcmUsXG4gICAgdXNlSWQ6IHVwZGF0ZUlkXG4gIH07XG5mdW5jdGlvbiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIGlmIChDb21wb25lbnQgJiYgQ29tcG9uZW50LmRlZmF1bHRQcm9wcykge1xuICAgIGJhc2VQcm9wcyA9IGFzc2lnbih7fSwgYmFzZVByb3BzKTtcbiAgICBDb21wb25lbnQgPSBDb21wb25lbnQuZGVmYXVsdFByb3BzO1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIENvbXBvbmVudClcbiAgICAgIHZvaWQgMCA9PT0gYmFzZVByb3BzW3Byb3BOYW1lXSAmJlxuICAgICAgICAoYmFzZVByb3BzW3Byb3BOYW1lXSA9IENvbXBvbmVudFtwcm9wTmFtZV0pO1xuICAgIHJldHVybiBiYXNlUHJvcHM7XG4gIH1cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgY3RvcixcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLFxuICBuZXh0UHJvcHNcbikge1xuICBjdG9yID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgY3Rvcik7XG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9XG4gICAgbnVsbCA9PT0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIHx8IHZvaWQgMCA9PT0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gICAgICA/IGN0b3JcbiAgICAgIDogYXNzaWduKHt9LCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAwID09PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcyAmJlxuICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpO1xufVxudmFyIGNsYXNzQ29tcG9uZW50VXBkYXRlciA9IHtcbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAoY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIChjb21wb25lbnQgPSBjb21wb25lbnQuX3JlYWN0SW50ZXJuYWxzKVxuICAgICAgPyBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGNvbXBvbmVudCkgPT09IGNvbXBvbmVudFxuICAgICAgOiAhMTtcbiAgfSxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJiBudWxsICE9PSBjYWxsYmFjayAmJiAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spO1xuICAgIHBheWxvYWQgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgbnVsbCAhPT0gcGF5bG9hZCAmJlxuICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXlsb2FkLCBpbnN0LCBsYW5lKSxcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocGF5bG9hZCwgaW5zdCwgbGFuZSkpO1xuICB9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gMTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJiBudWxsICE9PSBjYWxsYmFjayAmJiAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spO1xuICAgIHBheWxvYWQgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgbnVsbCAhPT0gcGF5bG9hZCAmJlxuICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXlsb2FkLCBpbnN0LCBsYW5lKSxcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocGF5bG9hZCwgaW5zdCwgbGFuZSkpO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGluc3QpLFxuICAgICAgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSAyO1xuICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiYgbnVsbCAhPT0gY2FsbGJhY2sgJiYgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKTtcbiAgICBjYWxsYmFjayA9IGVucXVldWVVcGRhdGUoaW5zdCwgdXBkYXRlLCBsYW5lKTtcbiAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihjYWxsYmFjaywgaW5zdCwgbGFuZSksXG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKGNhbGxiYWNrLCBpbnN0LCBsYW5lKSk7XG4gIH1cbn07XG5mdW5jdGlvbiBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIGN0b3IsXG4gIG9sZFByb3BzLFxuICBuZXdQcm9wcyxcbiAgb2xkU3RhdGUsXG4gIG5ld1N0YXRlLFxuICBuZXh0Q29udGV4dFxuKSB7XG4gIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd29ya0luUHJvZ3Jlc3Muc2hvdWxkQ29tcG9uZW50VXBkYXRlXG4gICAgPyB3b3JrSW5Qcm9ncmVzcy5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dClcbiAgICA6IGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50XG4gICAgPyAhc2hhbGxvd0VxdWFsKG9sZFByb3BzLCBuZXdQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChvbGRTdGF0ZSwgbmV3U3RhdGUpXG4gICAgOiAhMDtcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gIHZhciBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9ICExLFxuICAgIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBjdG9yLmNvbnRleHRUeXBlO1xuICBcIm9iamVjdFwiID09PSB0eXBlb2YgY29udGV4dCAmJiBudWxsICE9PSBjb250ZXh0XG4gICAgPyAoY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHQpKVxuICAgIDogKCh1bm1hc2tlZENvbnRleHQgPSBpc0NvbnRleHRQcm92aWRlcihjdG9yKVxuICAgICAgICA/IHByZXZpb3VzQ29udGV4dFxuICAgICAgICA6IGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpLFxuICAgICAgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gY3Rvci5jb250ZXh0VHlwZXMpLFxuICAgICAgKGNvbnRleHQgPSAoaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPVxuICAgICAgICBudWxsICE9PSBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciAmJiB2b2lkIDAgIT09IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKVxuICAgICAgICA/IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dClcbiAgICAgICAgOiBlbXB0eUNvbnRleHRPYmplY3QpKTtcbiAgY3RvciA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgbnVsbCAhPT0gY3Rvci5zdGF0ZSAmJiB2b2lkIDAgIT09IGN0b3Iuc3RhdGUgPyBjdG9yLnN0YXRlIDogbnVsbDtcbiAgY3Rvci51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdG9yO1xuICBjdG9yLl9yZWFjdEludGVybmFscyA9IHdvcmtJblByb2dyZXNzO1xuICBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciAmJlxuICAgICgod29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpLFxuICAgICh3b3JrSW5Qcm9ncmVzcy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID1cbiAgICAgIHVubWFza2VkQ29udGV4dCksXG4gICAgKHdvcmtJblByb2dyZXNzLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0ID0gY29udGV4dCkpO1xuICByZXR1cm4gY3Rvcjtcbn1cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgaW5zdGFuY2UsXG4gIG5ld1Byb3BzLFxuICBuZXh0Q29udGV4dFxuKSB7XG4gIHdvcmtJblByb2dyZXNzID0gaW5zdGFuY2Uuc3RhdGU7XG4gIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgaW5zdGFuY2Uuc3RhdGUgIT09IHdvcmtJblByb2dyZXNzICYmXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbn1cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0ge307XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjb250ZXh0VHlwZSAmJiBudWxsICE9PSBjb250ZXh0VHlwZVxuICAgID8gKGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSkpXG4gICAgOiAoKGNvbnRleHRUeXBlID0gaXNDb250ZXh0UHJvdmlkZXIoY3RvcilcbiAgICAgICAgPyBwcmV2aW91c0NvbnRleHRcbiAgICAgICAgOiBjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KSxcbiAgICAgIChpbnN0YW5jZS5jb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY29udGV4dFR5cGUpKSk7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgY29udGV4dFR5cGUgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dFR5cGUgJiZcbiAgICAoYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGNvbnRleHRUeXBlLCBuZXdQcm9wcyksXG4gICAgKGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpO1xuICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCkgfHxcbiAgICAoKGN0b3IgPSBpbnN0YW5jZS5zdGF0ZSksXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKSxcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgY3RvciAhPT0gaW5zdGFuY2Uuc3RhdGUgJiZcbiAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCksXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKSxcbiAgICAoaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSk7XG4gIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZSkge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gXCJcIixcbiAgICAgIG5vZGUgPSBzb3VyY2U7XG4gICAgZG8gKGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKSksIChub2RlID0gbm9kZS5yZXR1cm4pO1xuICAgIHdoaWxlIChub2RlKTtcbiAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gaW5mbztcbiAgfSBjYXRjaCAoeCkge1xuICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICBcIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiICsgeC5tZXNzYWdlICsgXCJcXG5cIiArIHguc3RhY2s7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3RhY2s6IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCxcbiAgICBkaWdlc3Q6IG51bGxcbiAgfTtcbn1cbmlmIChcbiAgXCJmdW5jdGlvblwiICE9PVxuICB0eXBlb2YgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0RmliZXJFcnJvckRpYWxvZy5zaG93RXJyb3JEaWFsb2dcbilcbiAgdGhyb3cgRXJyb3IoXG4gICAgXCJFeHBlY3RlZCBSZWFjdEZpYmVyRXJyb3JEaWFsb2cuc2hvd0Vycm9yRGlhbG9nIHRvIGJlIGEgZnVuY3Rpb24uXCJcbiAgKTtcbmZ1bmN0aW9uIGxvZ0NhcHR1cmVkRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB0cnkge1xuICAgICExICE9PVxuICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJlYWN0RmliZXJFcnJvckRpYWxvZy5zaG93RXJyb3JEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRTdGFjazogbnVsbCAhPT0gZXJyb3JJbmZvLnN0YWNrID8gZXJyb3JJbmZvLnN0YWNrIDogXCJcIixcbiAgICAgICAgZXJyb3I6IGVycm9ySW5mby52YWx1ZSxcbiAgICAgICAgZXJyb3JCb3VuZGFyeTpcbiAgICAgICAgICBudWxsICE9PSBib3VuZGFyeSAmJiAxID09PSBib3VuZGFyeS50YWcgPyBib3VuZGFyeS5zdGF0ZU5vZGUgOiBudWxsXG4gICAgICB9KSAmJiBjb25zb2xlLmVycm9yKGVycm9ySW5mby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIGxhbmUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gIGxhbmUudGFnID0gMztcbiAgbGFuZS5wYXlsb2FkID0geyBlbGVtZW50OiBudWxsIH07XG4gIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcbiAgbGFuZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yIHx8ICgoaGFzVW5jYXVnaHRFcnJvciA9ICEwKSwgKGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yKSk7XG4gICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgfTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgbGFuZS50YWcgPSAzO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID0gZmliZXIudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gICAgbGFuZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICBsYW5lLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICB9O1xuICB9XG4gIHZhciBpbnN0ID0gZmliZXIuc3RhdGVOb2RlO1xuICBudWxsICE9PSBpbnN0ICYmXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgIChsYW5lLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAmJlxuICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWRcbiAgICAgICAgICA/IChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW3RoaXNdKSlcbiAgICAgICAgICA6IGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZCh0aGlzKSk7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB0aGlzLmNvbXBvbmVudERpZENhdGNoKGVycm9ySW5mby52YWx1ZSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogbnVsbCAhPT0gc3RhY2sgPyBzdGFjayA6IFwiXCJcbiAgICAgIH0pO1xuICAgIH0pO1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKFxuICByb290LFxuICByZXR1cm5GaWJlcixcbiAgc291cmNlRmliZXIsXG4gIHZhbHVlLFxuICByb290UmVuZGVyTGFuZXNcbikge1xuICBzb3VyY2VGaWJlci5mbGFncyB8PSAzMjc2ODtcbiAgaWYgKFxuICAgIG51bGwgIT09IHZhbHVlICYmXG4gICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUudGhlblxuICApIHtcbiAgICB2YXIgdGFnID0gc291cmNlRmliZXIudGFnO1xuICAgIDAgIT09IChzb3VyY2VGaWJlci5tb2RlICYgMSkgfHxcbiAgICAgICgwICE9PSB0YWcgJiYgMTEgIT09IHRhZyAmJiAxNSAhPT0gdGFnKSB8fFxuICAgICAgKCh0YWcgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGUpXG4gICAgICAgID8gKChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IHRhZy51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgKHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSB0YWcubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzID0gdGFnLmxhbmVzKSlcbiAgICAgICAgOiAoKHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgKHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsKSkpO1xuICAgIHRhZyA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgaWYgKG51bGwgIT09IHRhZykge1xuICAgICAgc3dpdGNoICh0YWcudGFnKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHNvdXJjZUZpYmVyLm1vZGUgJiAxICYmXG4gICAgICAgICAgICAgIChudWxsID09PSBzaGVsbEJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgPyByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKClcbiAgICAgICAgICAgICAgICA6IG51bGwgPT09IHRhZy5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gMykpLFxuICAgICAgICAgICAgKHRhZy5mbGFncyAmPSAtMjU3KSxcbiAgICAgICAgICAgIDAgPT09ICh0YWcubW9kZSAmIDEpXG4gICAgICAgICAgICAgID8gdGFnID09PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgID8gKHRhZy5mbGFncyB8PSA2NTUzNilcbiAgICAgICAgICAgICAgICA6ICgodGFnLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgfD0gMTMxMDcyKSxcbiAgICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyAmPSAtNTI4MDUpLFxuICAgICAgICAgICAgICAgICAgMSA9PT0gc291cmNlRmliZXIudGFnICYmXG4gICAgICAgICAgICAgICAgICAgIChudWxsID09PSBzb3VyY2VGaWJlci5hbHRlcm5hdGVcbiAgICAgICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci50YWcgPSAxNylcbiAgICAgICAgICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSBjcmVhdGVVcGRhdGUoMikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyLnRhZyA9IDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgcmV0dXJuRmliZXIsIDIpKSksXG4gICAgICAgICAgICAgICAgICAoc291cmNlRmliZXIubGFuZXMgfD0gMikpXG4gICAgICAgICAgICAgIDogKCh0YWcuZmxhZ3MgfD0gNjU1MzYpLCAodGFnLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlXG4gICAgICAgICAgICAgID8gKHRhZy5mbGFncyB8PSAxNjM4NClcbiAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gdGFnLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgPyAodGFnLnVwZGF0ZVF1ZXVlID0gbmV3IFNldChbdmFsdWVdKSlcbiAgICAgICAgICAgICAgICAgIDogcmV0dXJuRmliZXIuYWRkKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB0YWcubW9kZSAmIDEgJiZcbiAgICAgICAgICAgICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgaWYgKHRhZy5tb2RlICYgMSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0YWcuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlXG4gICAgICAgICAgICAgICAgPyAodGFnLmZsYWdzIHw9IDE2Mzg0KVxuICAgICAgICAgICAgICAgIDogKChyZXR1cm5GaWJlciA9IHRhZy51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgICBudWxsID09PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICA/ICgocmV0dXJuRmliZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5UXVldWU6IG5ldyBTZXQoW3ZhbHVlXSlcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAodGFnLnVwZGF0ZVF1ZXVlID0gcmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgICA6ICgoc291cmNlRmliZXIgPSByZXR1cm5GaWJlci5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAocmV0dXJuRmliZXIucmV0cnlRdWV1ZSA9IG5ldyBTZXQoW3ZhbHVlXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNvdXJjZUZpYmVyLmFkZCh2YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgdGFnLnRhZyArXG4gICAgICAgICAgXCIpLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoMSA9PT0gcm9vdC50YWcpXG4gICAgICByZXR1cm4gKFxuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSxcbiAgICAgICAgITFcbiAgICAgICk7XG4gICAgdmFsdWUgPSBFcnJvcihcbiAgICAgIFwiQSBjb21wb25lbnQgc3VzcGVuZGVkIHdoaWxlIHJlc3BvbmRpbmcgdG8gc3luY2hyb25vdXMgaW5wdXQuIFRoaXMgd2lsbCBjYXVzZSB0aGUgVUkgdG8gYmUgcmVwbGFjZWQgd2l0aCBhIGxvYWRpbmcgaW5kaWNhdG9yLiBUbyBmaXgsIHVwZGF0ZXMgdGhhdCBzdXNwZW5kIHNob3VsZCBiZSB3cmFwcGVkIHdpdGggc3RhcnRUcmFuc2l0aW9uLlwiXG4gICAgKTtcbiAgfVxuICByb290ID0gdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlRmliZXIpO1xuICA0ICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICYmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gMik7XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnNcbiAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gW3Jvb3RdKVxuICAgIDogd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycy5wdXNoKHJvb3QpO1xuICBpZiAobnVsbCA9PT0gcmV0dXJuRmliZXIpIHJldHVybiAhMDtcbiAgcm9vdCA9IHJldHVybkZpYmVyO1xuICBkbyB7XG4gICAgc3dpdGNoIChyb290LnRhZykge1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChyb290LmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAocm9vdFJlbmRlckxhbmVzICY9IC1yb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgIChyb290LmxhbmVzIHw9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgKHJvb3RSZW5kZXJMYW5lcyA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICkpLFxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZShyb290LCByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHJldHVybkZpYmVyID0gdmFsdWUpLFxuICAgICAgICAgIChzb3VyY2VGaWJlciA9IHJvb3QudHlwZSksXG4gICAgICAgICAgKHRhZyA9IHJvb3Quc3RhdGVOb2RlKSxcbiAgICAgICAgICAwID09PSAocm9vdC5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzb3VyY2VGaWJlci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgfHxcbiAgICAgICAgICAgICAgKG51bGwgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHRhZy5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgICAgICAgICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCB8fFxuICAgICAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyh0YWcpKSkpKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyb290LmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAocm9vdC5sYW5lcyB8PSByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgKHJvb3RSZW5kZXJMYW5lcyA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICByb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIHJvb3QgPSByb290LnJldHVybjtcbiAgfSB3aGlsZSAobnVsbCAhPT0gcm9vdCk7XG4gIHJldHVybiAhMTtcbn1cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXIsXG4gIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbiA9IEVycm9yKFxuICAgIFwiVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLiBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBSZWFjdCdzIHNlbGVjdGl2ZSBoeWRyYXRpb24gZmVhdHVyZS4gSWYgdGhpcyBsZWFrcyBpbnRvIHVzZXJzcGFjZSwgaXQncyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgKSxcbiAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICExO1xuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPVxuICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgID8gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcylcbiAgICAgIDogcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3VycmVudC5jaGlsZCxcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBDb21wb25lbnQsXG4gIG5leHRQcm9wcyxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBDb21wb25lbnQgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBuZXh0UHJvcHMgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgY3VycmVudCxcbiAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICBDb21wb25lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIHJlZixcbiAgICByZW5kZXJMYW5lc1xuICApO1xuICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICByZXR1cm4gKFxuICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICApO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBDb21wb25lbnQsXG4gIG5leHRQcm9wcyxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgaWYgKFxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgIXNob3VsZENvbnN0cnVjdCh0eXBlKSAmJlxuICAgICAgdm9pZCAwID09PSB0eXBlLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgbnVsbCA9PT0gQ29tcG9uZW50LmNvbXBhcmUgJiZcbiAgICAgIHZvaWQgMCA9PT0gQ29tcG9uZW50LmRlZmF1bHRQcm9wc1xuICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAxNSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gdHlwZSksXG4gICAgICAgIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApXG4gICAgICApO1xuICAgIGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICBDb21wb25lbnQudHlwZSxcbiAgICAgIG51bGwsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICk7XG4gICAgY3VycmVudC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudCk7XG4gIH1cbiAgdHlwZSA9IGN1cnJlbnQuY2hpbGQ7XG4gIGlmICgwID09PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSkge1xuICAgIHZhciBwcmV2UHJvcHMgPSB0eXBlLm1lbW9pemVkUHJvcHM7XG4gICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgQ29tcG9uZW50ID0gbnVsbCAhPT0gQ29tcG9uZW50ID8gQ29tcG9uZW50IDogc2hhbGxvd0VxdWFsO1xuICAgIGlmIChDb21wb25lbnQocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpXG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gIGN1cnJlbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyh0eXBlLCBuZXh0UHJvcHMpO1xuICBjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xufVxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIENvbXBvbmVudCxcbiAgbmV4dFByb3BzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICBpZiAoXG4gICAgICBzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmXG4gICAgKVxuICAgICAgaWYgKFxuICAgICAgICAoKGRpZFJlY2VpdmVVcGRhdGUgPSAhMSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBuZXh0UHJvcHMgPSBwcmV2UHJvcHMpLFxuICAgICAgICAwICE9PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSlcbiAgICAgIClcbiAgICAgICAgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMzEwNzIpICYmIChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICApO1xuICB9XG4gIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICBjdXJyZW50LFxuICAgIHdvcmtJblByb2dyZXNzLFxuICAgIENvbXBvbmVudCxcbiAgICBuZXh0UHJvcHMsXG4gICAgcmVuZGVyTGFuZXNcbiAgKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW4sXG4gICAgbmV4dElzRGV0YWNoZWQgPSAwICE9PSAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIDIpLFxuICAgIHByZXZTdGF0ZSA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuICBtYXJrUmVmJDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICBpZiAoXCJoaWRkZW5cIiA9PT0gbmV4dFByb3BzLm1vZGUgfHwgbmV4dElzRGV0YWNoZWQpIHtcbiAgICBpZiAoMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSkge1xuICAgICAgcmVuZGVyTGFuZXMgPVxuICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXMgOiByZW5kZXJMYW5lcztcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgZm9yIChuZXh0Q2hpbGRyZW4gPSAwOyBudWxsICE9PSBuZXh0UHJvcHM7IClcbiAgICAgICAgICAobmV4dENoaWxkcmVuID1cbiAgICAgICAgICAgIG5leHRDaGlsZHJlbiB8IG5leHRQcm9wcy5sYW5lcyB8IG5leHRQcm9wcy5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgIChuZXh0UHJvcHMgPSBuZXh0UHJvcHMuc2libGluZyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBuZXh0Q2hpbGRyZW4gJiB+cmVuZGVyTGFuZXM7XG4gICAgICB9IGVsc2UgKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSwgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCk7XG4gICAgICByZXR1cm4gZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgMSkpXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHsgYmFzZUxhbmVzOiAwLCBjYWNoZVBvb2w6IG51bGwgfSksXG4gICAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soKTtcbiAgICBlbHNlIHtcbiAgICAgIGlmICgwID09PSAocmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSA1MzY4NzA5MTIpLFxuICAgICAgICAgIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlID8gcHJldlN0YXRlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzIDogcmVuZGVyTGFuZXNcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IDAsIGNhY2hlUG9vbDogbnVsbCB9O1xuICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgID8gcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSlcbiAgICAgICAgOiByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKCk7XG4gICAgfVxuICAgIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2VcbiAgICBudWxsICE9PSBwcmV2U3RhdGVcbiAgICAgID8gKHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpLFxuICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGwpKVxuICAgICAgOiAocmV1c2VIaWRkZW5Db250ZXh0T25TdGFjaygpLFxuICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5mdW5jdGlvbiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dEJhc2VMYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXMsIGNhY2hlUG9vbDogbnVsbCB9O1xuICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKCk7XG4gIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBpZiAoXG4gICAgKG51bGwgPT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gcmVmKSB8fFxuICAgIChudWxsICE9PSBjdXJyZW50ICYmIGN1cnJlbnQucmVmICE9PSByZWYpXG4gIClcbiAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNTEyKSwgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwOTcxNTIpO1xufVxuZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBDb21wb25lbnQsXG4gIG5leHRQcm9wcyxcbiAgcmVuZGVyTGFuZXNcbikge1xuICB2YXIgY29udGV4dCA9IGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudClcbiAgICA/IHByZXZpb3VzQ29udGV4dFxuICAgIDogY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudDtcbiAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQpO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBDb21wb25lbnQgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgY3VycmVudCxcbiAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICBDb21wb25lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIGNvbnRleHQsXG4gICAgcmVuZGVyTGFuZXNcbiAgKTtcbiAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgcmV0dXJuIChcbiAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgKTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5mdW5jdGlvbiByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIG5leHRQcm9wcyxcbiAgQ29tcG9uZW50LFxuICBzZWNvbmRBcmcsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgbmV4dFByb3BzID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgQ29tcG9uZW50LFxuICAgIG5leHRQcm9wcyxcbiAgICBzZWNvbmRBcmdcbiAgKTtcbiAgZmluaXNoUmVuZGVyaW5nSG9va3MoKTtcbiAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgcmV0dXJuIChcbiAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgKTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIENvbXBvbmVudCxcbiAgbmV4dFByb3BzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgdmFyIGhhc0NvbnRleHQgPSAhMDtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIGhhc0NvbnRleHQgPSAhMTtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICByZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKSxcbiAgICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSxcbiAgICAgIChuZXh0UHJvcHMgPSAhMCk7XG4gIGVsc2UgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUsXG4gICAgICBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQsXG4gICAgICBjb250ZXh0VHlwZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY29udGV4dFR5cGUgJiYgbnVsbCAhPT0gY29udGV4dFR5cGVcbiAgICAgID8gKGNvbnRleHRUeXBlID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpKVxuICAgICAgOiAoKGNvbnRleHRUeXBlID0gaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KVxuICAgICAgICAgID8gcHJldmlvdXNDb250ZXh0XG4gICAgICAgICAgOiBjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KSxcbiAgICAgICAgKGNvbnRleHRUeXBlID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY29udGV4dFR5cGUpKSk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsXG4gICAgICBoYXNOZXdMaWZlY3ljbGVzID1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIHx8XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuICAgIGhhc05ld0xpZmVjeWNsZXMgfHxcbiAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB8fFxuICAgICAgKChvbGRQcm9wcyAhPT0gbmV4dFByb3BzIHx8IG9sZENvbnRleHQgIT09IGNvbnRleHRUeXBlKSAmJlxuICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgY29udGV4dFR5cGVcbiAgICAgICAgKSk7XG4gICAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgIGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgb2xkQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgb2xkUHJvcHMgIT09IG5leHRQcm9wcyB8fFxuICAgIG9sZFN0YXRlICE9PSBvbGRDb250ZXh0IHx8XG4gICAgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50IHx8XG4gICAgaGFzRm9yY2VVcGRhdGVcbiAgICAgID8gKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAmJlxuICAgICAgICAgIChhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLFxuICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgKSxcbiAgICAgICAgICAob2xkQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKSxcbiAgICAgICAgKG9sZFByb3BzID1cbiAgICAgICAgICBoYXNGb3JjZVVwZGF0ZSB8fFxuICAgICAgICAgIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBvbGRQcm9wcyxcbiAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgICAgb2xkQ29udGV4dCxcbiAgICAgICAgICAgIGNvbnRleHRUeXBlXG4gICAgICAgICAgKSlcbiAgICAgICAgICA/IChoYXNOZXdMaWZlY3ljbGVzIHx8XG4gICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KSB8fFxuICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpKVxuICAgICAgICAgIDogKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gb2xkQ29udGV4dCkpLFxuICAgICAgICAoaW5zdGFuY2UucHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAoaW5zdGFuY2Uuc3RhdGUgPSBvbGRDb250ZXh0KSxcbiAgICAgICAgKGluc3RhbmNlLmNvbnRleHQgPSBjb250ZXh0VHlwZSksXG4gICAgICAgIChuZXh0UHJvcHMgPSBvbGRQcm9wcykpXG4gICAgICA6IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgKG5leHRQcm9wcyA9ICExKSk7XG4gIH0gZWxzZSB7XG4gICAgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICAgIGNvbnRleHRUeXBlID1cbiAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlXG4gICAgICAgID8gb2xkUHJvcHNcbiAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIG9sZFByb3BzKTtcbiAgICBpbnN0YW5jZS5wcm9wcyA9IGNvbnRleHRUeXBlO1xuICAgIGhhc05ld0xpZmVjeWNsZXMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgb2xkU3RhdGUgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgIG9sZENvbnRleHQgPSBDb21wb25lbnQuY29udGV4dFR5cGU7XG4gICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9sZENvbnRleHQgJiYgbnVsbCAhPT0gb2xkQ29udGV4dFxuICAgICAgPyAob2xkQ29udGV4dCA9IHJlYWRDb250ZXh0KG9sZENvbnRleHQpKVxuICAgICAgOiAoKG9sZENvbnRleHQgPSBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpXG4gICAgICAgICAgPyBwcmV2aW91c0NvbnRleHRcbiAgICAgICAgICA6IGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpLFxuICAgICAgICAob2xkQ29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG9sZENvbnRleHQpKSk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyRqc2NvbXAkMCA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgKGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMkanNjb21wJDAgfHxcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKSB8fFxuICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHx8XG4gICAgICAoKG9sZFByb3BzICE9PSBoYXNOZXdMaWZlY3ljbGVzIHx8IG9sZFN0YXRlICE9PSBvbGRDb250ZXh0KSAmJlxuICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgb2xkQ29udGV4dFxuICAgICAgICApKTtcbiAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgIHZhciBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgb2xkUHJvcHMgIT09IGhhc05ld0xpZmVjeWNsZXMgfHxcbiAgICBvbGRTdGF0ZSAhPT0gbmV3U3RhdGUgfHxcbiAgICBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQgfHxcbiAgICBoYXNGb3JjZVVwZGF0ZVxuICAgICAgPyAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJGpzY29tcCQwICYmXG4gICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMkanNjb21wJDAsXG4gICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICApLFxuICAgICAgICAgIChuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKSxcbiAgICAgICAgKGNvbnRleHRUeXBlID1cbiAgICAgICAgICBoYXNGb3JjZVVwZGF0ZSB8fFxuICAgICAgICAgIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBjb250ZXh0VHlwZSxcbiAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICBvbGRDb250ZXh0XG4gICAgICAgICAgKSB8fFxuICAgICAgICAgICExKVxuICAgICAgICAgID8gKGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKSB8fFxuICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXdTdGF0ZSwgb2xkQ29udGV4dCksXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoXG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgIG9sZENvbnRleHRcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCkpXG4gICAgICAgICAgOiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgICAgIChvbGRQcm9wcyA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgfHxcbiAgICAgICAgICAgICAgKG9sZFByb3BzID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlKSksXG4gICAgICAgIChpbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgIChpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlKSxcbiAgICAgICAgKGluc3RhbmNlLmNvbnRleHQgPSBvbGRDb250ZXh0KSxcbiAgICAgICAgKG5leHRQcm9wcyA9IGNvbnRleHRUeXBlKSlcbiAgICAgIDogKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSB8fFxuICAgICAgICAgIChvbGRQcm9wcyA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgfHxcbiAgICAgICAgICAob2xkUHJvcHMgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCksXG4gICAgICAgIChuZXh0UHJvcHMgPSAhMSkpO1xuICB9XG4gIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChcbiAgICBjdXJyZW50LFxuICAgIHdvcmtJblByb2dyZXNzLFxuICAgIENvbXBvbmVudCxcbiAgICBuZXh0UHJvcHMsXG4gICAgaGFzQ29udGV4dCxcbiAgICByZW5kZXJMYW5lc1xuICApO1xufVxuZnVuY3Rpb24gZmluaXNoQ2xhc3NDb21wb25lbnQoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBDb21wb25lbnQsXG4gIHNob3VsZFVwZGF0ZSxcbiAgaGFzQ29udGV4dCxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBtYXJrUmVmJDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgZGlkQ2FwdHVyZUVycm9yID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KTtcbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcilcbiAgICByZXR1cm4gKFxuICAgICAgaGFzQ29udGV4dCAmJiBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsICExKSxcbiAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICk7XG4gIHNob3VsZFVwZGF0ZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPVxuICAgIGRpZENhcHR1cmVFcnJvciAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yXG4gICAgICA/IG51bGxcbiAgICAgIDogc2hvdWxkVXBkYXRlLnJlbmRlcigpO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICBudWxsICE9PSBjdXJyZW50ICYmIGRpZENhcHR1cmVFcnJvclxuICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgY3VycmVudC5jaGlsZCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICkpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBudWxsLFxuICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApKSlcbiAgICA6IHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHNob3VsZFVwZGF0ZS5zdGF0ZTtcbiAgaGFzQ29udGV4dCAmJiBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsICEwKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuZnVuY3Rpb24gcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgcm9vdC5wZW5kaW5nQ29udGV4dFxuICAgID8gcHVzaFRvcExldmVsQ29udGV4dE9iamVjdChcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHJvb3QucGVuZGluZ0NvbnRleHQsXG4gICAgICAgIHJvb3QucGVuZGluZ0NvbnRleHQgIT09IHJvb3QuY29udGV4dFxuICAgICAgKVxuICAgIDogcm9vdC5jb250ZXh0ICYmXG4gICAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsICExKTtcbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG52YXIgU1VTUEVOREVEX01BUktFUiA9IHsgZGVoeWRyYXRlZDogbnVsbCwgdHJlZUNvbnRleHQ6IG51bGwsIHJldHJ5TGFuZTogMCB9O1xuZnVuY3Rpb24gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7IGJhc2VMYW5lczogcmVuZGVyTGFuZXMsIGNhY2hlUG9vbDogbnVsbCB9O1xufVxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gIGN1cnJlbnQsXG4gIHByaW1hcnlUcmVlRGlkRGVmZXIsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50LmNoaWxkTGFuZXMgJiB+cmVuZGVyTGFuZXMgOiAwO1xuICBwcmltYXJ5VHJlZURpZERlZmVyICYmIChjdXJyZW50IHw9IHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICBzaG93RmFsbGJhY2sgPSAhMSxcbiAgICBkaWRTdXNwZW5kID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSxcbiAgICBKU0NvbXBpbGVyX3RlbXA7XG4gIChKU0NvbXBpbGVyX3RlbXAgPSBkaWRTdXNwZW5kKSB8fFxuICAgIChKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBudWxsID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgPyAhMVxuICAgICAgICA6IDAgIT09IChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQgJiAyKSk7XG4gIEpTQ29tcGlsZXJfdGVtcCAmJiAoKHNob3dGYWxsYmFjayA9ICEwKSwgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xMjkpKTtcbiAgSlNDb21waWxlcl90ZW1wID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMzIpO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMzM7XG4gIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgZGlkU3VzcGVuZCA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICBuZXh0UHJvcHMgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHNob3dGYWxsYmFjayA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgZGlkU3VzcGVuZCA9IHsgbW9kZTogXCJoaWRkZW5cIiwgY2hpbGRyZW46IGRpZFN1c3BlbmQgfTtcbiAgICAgIDAgPT09IChzaG93RmFsbGJhY2sgJiAxKSAmJiBudWxsICE9PSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50XG4gICAgICAgID8gKChwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50LmNoaWxkTGFuZXMgPSAwKSxcbiAgICAgICAgICAocHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBkaWRTdXNwZW5kKSlcbiAgICAgICAgOiAocHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihcbiAgICAgICAgICAgIGRpZFN1c3BlbmQsXG4gICAgICAgICAgICBzaG93RmFsbGJhY2ssXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICkpO1xuICAgICAgbmV4dFByb3BzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgc2hvd0ZhbGxiYWNrLFxuICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBuZXh0UHJvcHMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50LnNpYmxpbmcgPSBuZXh0UHJvcHM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgICBzaG93RmFsbGJhY2sgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHNob3dGYWxsYmFjay5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHNob3dGYWxsYmFjay5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfVxuICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIGRpZFN1c3BlbmQpO1xuICB9XG4gIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIGlmIChudWxsICE9PSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50KSB7XG4gICAgdmFyIGRlaHlkcmF0ZWQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50LmRlaHlkcmF0ZWQ7XG4gICAgaWYgKG51bGwgIT09IGRlaHlkcmF0ZWQpXG4gICAgICByZXR1cm4gdXBkYXRlRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgZGlkU3VzcGVuZCxcbiAgICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgIGRlaHlkcmF0ZWQsXG4gICAgICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICB9XG4gIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgIHNob3dGYWxsYmFjayA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICBkaWRTdXNwZW5kID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgICBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgICBkZWh5ZHJhdGVkID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudC5zaWJsaW5nO1xuICAgIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHsgbW9kZTogXCJoaWRkZW5cIiwgY2hpbGRyZW46IG5leHRQcm9wcy5jaGlsZHJlbiB9O1xuICAgIDAgPT09IChkaWRTdXNwZW5kICYgMSkgJiYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnRcbiAgICAgID8gKChuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgIChuZXh0UHJvcHMuY2hpbGRMYW5lcyA9IDApLFxuICAgICAgICAobmV4dFByb3BzLnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IG51bGwpKVxuICAgICAgOiAoKG5leHRQcm9wcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICAgIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQsXG4gICAgICAgICAgcHJpbWFyeUNoaWxkUHJvcHNcbiAgICAgICAgKSksXG4gICAgICAgIChuZXh0UHJvcHMuc3VidHJlZUZsYWdzID1cbiAgICAgICAgICBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50LnN1YnRyZWVGbGFncyAmIDMxNDU3MjgwKSk7XG4gICAgbnVsbCAhPT0gZGVoeWRyYXRlZFxuICAgICAgPyAoc2hvd0ZhbGxiYWNrID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZGVoeWRyYXRlZCwgc2hvd0ZhbGxiYWNrKSlcbiAgICAgIDogKChzaG93RmFsbGJhY2sgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICBzaG93RmFsbGJhY2ssXG4gICAgICAgICAgZGlkU3VzcGVuZCxcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgICkpLFxuICAgICAgICAoc2hvd0ZhbGxiYWNrLmZsYWdzIHw9IDIpKTtcbiAgICBzaG93RmFsbGJhY2sucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgbmV4dFByb3BzLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIG5leHRQcm9wcy5zaWJsaW5nID0gc2hvd0ZhbGxiYWNrO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV4dFByb3BzO1xuICAgIG5leHRQcm9wcyA9IHNob3dGYWxsYmFjaztcbiAgICBzaG93RmFsbGJhY2sgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBkaWRTdXNwZW5kID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgIGRpZFN1c3BlbmQgPVxuICAgICAgbnVsbCA9PT0gZGlkU3VzcGVuZFxuICAgICAgICA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcylcbiAgICAgICAgOiB7IGJhc2VMYW5lczogZGlkU3VzcGVuZC5iYXNlTGFuZXMgfCByZW5kZXJMYW5lcywgY2FjaGVQb29sOiBudWxsIH07XG4gICAgc2hvd0ZhbGxiYWNrLm1lbW9pemVkU3RhdGUgPSBkaWRTdXNwZW5kO1xuICAgIHNob3dGYWxsYmFjay5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICBjdXJyZW50LFxuICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgIHJldHVybiBuZXh0UHJvcHM7XG4gIH1cbiAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgSlNDb21waWxlcl90ZW1wID0gY3VycmVudC5jaGlsZDtcbiAgY3VycmVudCA9IEpTQ29tcGlsZXJfdGVtcC5zaWJsaW5nO1xuICBKU0NvbXBpbGVyX3RlbXAgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhKU0NvbXBpbGVyX3RlbXAsIHtcbiAgICBtb2RlOiBcInZpc2libGVcIixcbiAgICBjaGlsZHJlbjogbmV4dFByb3BzLmNoaWxkcmVuXG4gIH0pO1xuICAwID09PSAod29ya0luUHJvZ3Jlc3MubW9kZSAmIDEpICYmIChKU0NvbXBpbGVyX3RlbXAubGFuZXMgPSByZW5kZXJMYW5lcyk7XG4gIEpTQ29tcGlsZXJfdGVtcC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgSlNDb21waWxlcl90ZW1wLnNpYmxpbmcgPSBudWxsO1xuICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgKChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyksXG4gICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBbY3VycmVudF0pLCAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTYpKVxuICAgICAgOiByZW5kZXJMYW5lcy5wdXNoKGN1cnJlbnQpKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBKU0NvbXBpbGVyX3RlbXA7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICByZXR1cm4gSlNDb21waWxlcl90ZW1wO1xufVxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuKSB7XG4gIHByaW1hcnlDaGlsZHJlbiA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihcbiAgICB7IG1vZGU6IFwidmlzaWJsZVwiLCBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuIH0sXG4gICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAwLFxuICAgIG51bGxcbiAgKTtcbiAgcHJpbWFyeUNoaWxkcmVuLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgcmVuZGVyTGFuZXMsXG4gIHJlY292ZXJhYmxlRXJyb3Jcbikge1xuICBudWxsICE9PSByZWNvdmVyYWJsZUVycm9yICYmXG4gICAgKG51bGwgPT09IGh5ZHJhdGlvbkVycm9yc1xuICAgICAgPyAoaHlkcmF0aW9uRXJyb3JzID0gW3JlY292ZXJhYmxlRXJyb3JdKVxuICAgICAgOiBoeWRyYXRpb25FcnJvcnMucHVzaChyZWNvdmVyYWJsZUVycm9yKSk7XG4gIHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIGN1cnJlbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgIHdvcmtJblByb2dyZXNzLFxuICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlblxuICApO1xuICBjdXJyZW50LmZsYWdzIHw9IDI7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICByZXR1cm4gY3VycmVudDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZURlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIGRpZFN1c3BlbmQsXG4gIGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyLFxuICBuZXh0UHJvcHMsXG4gIHN1c3BlbnNlSW5zdGFuY2UsXG4gIHN1c3BlbnNlU3RhdGUsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYpXG4gICAgICByZXR1cm4gKFxuICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTI1NyksXG4gICAgICAgIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IEVycm9yKFxuICAgICAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcgdGhpcyBTdXNwZW5zZSBib3VuZGFyeS4gU3dpdGNoZWQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgICAgIHN0YWNrOiBudWxsLFxuICAgICAgICAgICAgZGlnZXN0OiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgc3VzcGVuc2VTdGF0ZSA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICBkaWRTdXNwZW5kID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgICBuZXh0UHJvcHMgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4oXG4gICAgICB7IG1vZGU6IFwidmlzaWJsZVwiLCBjaGlsZHJlbjogbmV4dFByb3BzLmNoaWxkcmVuIH0sXG4gICAgICBkaWRTdXNwZW5kLFxuICAgICAgMCxcbiAgICAgIG51bGxcbiAgICApO1xuICAgIHN1c3BlbnNlU3RhdGUgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgIHN1c3BlbnNlU3RhdGUsXG4gICAgICBkaWRTdXNwZW5kLFxuICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICBudWxsXG4gICAgKTtcbiAgICBzdXNwZW5zZVN0YXRlLmZsYWdzIHw9IDI7XG4gICAgbmV4dFByb3BzLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHN1c3BlbnNlU3RhdGUucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgbmV4dFByb3BzLnNpYmxpbmcgPSBzdXNwZW5zZVN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV4dFByb3BzO1xuICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgMSkgJiZcbiAgICAgIHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gICAgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgbmV4dFByb3BzLm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgIG5leHRQcm9wcy5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICBjdXJyZW50LFxuICAgICAgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICk7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgcmV0dXJuIHN1c3BlbnNlU3RhdGU7XG4gIH1cbiAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgaWYgKDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgMSkpXG4gICAgcmV0dXJuIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICBudWxsXG4gICAgKTtcbiAgaWYgKHNoaW0kMSgpKVxuICAgIHJldHVybiAoXG4gICAgICAoZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIgPSBzaGltJDEoKS5kaWdlc3QpLFxuICAgICAgKHN1c3BlbnNlU3RhdGUgPSBFcnJvcihcbiAgICAgICAgXCJUaGUgc2VydmVyIGNvdWxkIG5vdCBmaW5pc2ggdGhpcyBTdXNwZW5zZSBib3VuZGFyeSwgbGlrZWx5IGR1ZSB0byBhbiBlcnJvciBkdXJpbmcgc2VydmVyIHJlbmRlcmluZy4gU3dpdGNoZWQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgKSksXG4gICAgICAoc3VzcGVuc2VTdGF0ZS5kaWdlc3QgPSBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciksXG4gICAgICByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IHN1c3BlbnNlU3RhdGUsXG4gICAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICAgIHN0YWNrOiBudWxsLFxuICAgICAgICAgIGRpZ2VzdDpcbiAgICAgICAgICAgIG51bGwgIT0gZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIgPyBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyID0gMCAhPT0gKHJlbmRlckxhbmVzICYgY3VycmVudC5jaGlsZExhbmVzKTtcbiAgaWYgKGRpZFJlY2VpdmVVcGRhdGUgfHwgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIpIHtcbiAgICBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICBpZiAobnVsbCAhPT0gZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIpIHtcbiAgICAgIG5leHRQcm9wcyA9IHJlbmRlckxhbmVzICYgLXJlbmRlckxhbmVzO1xuICAgICAgaWYgKDAgIT09IChuZXh0UHJvcHMgJiA0MikpIG5leHRQcm9wcyA9IDE7XG4gICAgICBlbHNlXG4gICAgICAgIHN3aXRjaCAobmV4dFByb3BzKSB7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbmV4dFByb3BzID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIG5leHRQcm9wcyA9IDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgbmV4dFByb3BzID0gMTY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgICBjYXNlIDUxMjpcbiAgICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgICAgY2FzZSAyMDQ4OlxuICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgICAgY2FzZSAxNjM4NDpcbiAgICAgICAgICBjYXNlIDMyNzY4OlxuICAgICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgICAgY2FzZSAxMzEwNzI6XG4gICAgICAgICAgY2FzZSAyNjIxNDQ6XG4gICAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgICAgY2FzZSAxMDQ4NTc2OlxuICAgICAgICAgIGNhc2UgMjA5NzE1MjpcbiAgICAgICAgICBjYXNlIDQxOTQzMDQ6XG4gICAgICAgICAgY2FzZSA4Mzg4NjA4OlxuICAgICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgICAgY2FzZSAzMzU1NDQzMjpcbiAgICAgICAgICAgIG5leHRQcm9wcyA9IDY0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgICAgICBuZXh0UHJvcHMgPSAxMzQyMTc3Mjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbmV4dFByb3BzID0gMDtcbiAgICAgICAgfVxuICAgICAgbmV4dFByb3BzID1cbiAgICAgICAgMCAhPT1cbiAgICAgICAgKG5leHRQcm9wcyAmIChkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlci5zdXNwZW5kZWRMYW5lcyB8IHJlbmRlckxhbmVzKSlcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IG5leHRQcm9wcztcbiAgICAgIGlmICgwICE9PSBuZXh0UHJvcHMgJiYgbmV4dFByb3BzICE9PSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSlcbiAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICgoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgIGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShjdXJyZW50LCBuZXh0UHJvcHMpLFxuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciwgY3VycmVudCwgbmV4dFByb3BzKSxcbiAgICAgICAgICBTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb24pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHNoaW0kMSgpIHx8IHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIGlmIChzaGltJDEoKSlcbiAgICByZXR1cm4gKFxuICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkuYmluZChudWxsLCBjdXJyZW50KSxcbiAgICAgIHNoaW0kMSgpLFxuICAgICAgbnVsbFxuICAgICk7XG4gIGN1cnJlbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICBjdXJyZW50LmZsYWdzIHw9IDQwOTY7XG4gIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gIGZpYmVyLmxhbmVzIHw9IHJlbmRlckxhbmVzO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KTtcbn1cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIGlzQmFja3dhcmRzLFxuICB0YWlsLFxuICBsYXN0Q29udGVudFJvdyxcbiAgdGFpbE1vZGVcbikge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBudWxsID09PSByZW5kZXJTdGF0ZVxuICAgID8gKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICB0YWlsTW9kZTogdGFpbE1vZGVcbiAgICAgIH0pXG4gICAgOiAoKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHMpLFxuICAgICAgKHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgKHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDApLFxuICAgICAgKHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdyksXG4gICAgICAocmVuZGVyU3RhdGUudGFpbCA9IHRhaWwpLFxuICAgICAgKHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGUpKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcixcbiAgICB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLmNoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIG5leHRQcm9wcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgaWYgKDAgIT09IChuZXh0UHJvcHMgJiAyKSlcbiAgICAobmV4dFByb3BzID0gKG5leHRQcm9wcyAmIDEpIHwgMiksICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpO1xuICBlbHNlIHtcbiAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCkpXG4gICAgICBhOiBmb3IgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDsgbnVsbCAhPT0gY3VycmVudDsgKSB7XG4gICAgICAgIGlmICgxMyA9PT0gY3VycmVudC50YWcpXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoY3VycmVudCwgcmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgZWxzZSBpZiAoMTkgPT09IGN1cnJlbnQudGFnKVxuICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihjdXJyZW50LCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBlbHNlIGlmIChudWxsICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgICAgICAgY3VycmVudC5jaGlsZC5yZXR1cm4gPSBjdXJyZW50O1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50ID09PSB3b3JrSW5Qcm9ncmVzcykgYnJlYWsgYTtcbiAgICAgICAgZm9yICg7IG51bGwgPT09IGN1cnJlbnQuc2libGluZzsgKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQucmV0dXJuIHx8IGN1cnJlbnQucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQuc2libGluZy5yZXR1cm4gPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgIH1cbiAgICBuZXh0UHJvcHMgJj0gMTtcbiAgfVxuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5leHRQcm9wcyk7XG4gIGlmICgwID09PSAod29ya0luUHJvZ3Jlc3MubW9kZSAmIDEpKSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZWxzZVxuICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIpIHtcbiAgICAgIGNhc2UgXCJmb3J3YXJkc1wiOlxuICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICBmb3IgKHJldmVhbE9yZGVyID0gbnVsbDsgbnVsbCAhPT0gcmVuZGVyTGFuZXM7IClcbiAgICAgICAgICAoY3VycmVudCA9IHJlbmRlckxhbmVzLmFsdGVybmF0ZSksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIG51bGwgPT09IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KSAmJlxuICAgICAgICAgICAgICAocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nKTtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSByZXZlYWxPcmRlcjtcbiAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICA/ICgocmV2ZWFsT3JkZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsKSlcbiAgICAgICAgICA6ICgocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcy5zaWJsaW5nKSwgKHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsKSk7XG4gICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAhMSxcbiAgICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJiYWNrd2FyZHNcIjpcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBudWxsO1xuICAgICAgICByZXZlYWxPcmRlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICBmb3IgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDsgbnVsbCAhPT0gcmV2ZWFsT3JkZXI7ICkge1xuICAgICAgICAgIGN1cnJlbnQgPSByZXZlYWxPcmRlci5hbHRlcm5hdGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCA9PT0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQgPSByZXZlYWxPcmRlci5zaWJsaW5nO1xuICAgICAgICAgIHJldmVhbE9yZGVyLnNpYmxpbmcgPSByZW5kZXJMYW5lcztcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgIHJldmVhbE9yZGVyID0gY3VycmVudDtcbiAgICAgICAgfVxuICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgITAsXG4gICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dldGhlclwiOlxuICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsICExLCBudWxsLCBudWxsLCB2b2lkIDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIH1cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAwID09PSAod29ya0luUHJvZ3Jlc3MubW9kZSAmIDEpICYmXG4gICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICgoY3VycmVudC5hbHRlcm5hdGUgPSBudWxsKSxcbiAgICAod29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbCksXG4gICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIpKTtcbn1cbmZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIG51bGwgIT09IGN1cnJlbnQgJiYgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuICBpZiAoMCA9PT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykpIHJldHVybiBudWxsO1xuICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudC5jaGlsZClcbiAgICB0aHJvdyBFcnJvcihcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIik7XG4gIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCkge1xuICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICByZW5kZXJMYW5lcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIGN1cnJlbnQucGVuZGluZ1Byb3BzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgIGZvciAocmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7IG51bGwgIT09IGN1cnJlbnQuc2libGluZzsgKVxuICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmcpLFxuICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nID1cbiAgICAgICAgICBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcykpLFxuICAgICAgICAocmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsO1xuICB9XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgMzpcbiAgICAgIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgaXNDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MudHlwZSkgJiZcbiAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDpcbiAgICAgIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZS5fY29udGV4dCxcbiAgICAgICAgbmV4dFZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgIHB1c2godmFsdWVDdXJzb3IsIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IG5leHRWYWx1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6XG4gICAgICBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBjb250ZXh0KSB7XG4gICAgICAgIGlmIChudWxsICE9PSBjb250ZXh0LmRlaHlkcmF0ZWQpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGQuY2hpbGRMYW5lcykpXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGN1cnJlbnQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50LnNpYmxpbmcgOiBudWxsO1xuICAgICAgfVxuICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTk6XG4gICAgICBjb250ZXh0ID0gMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG4gICAgICBpZiAoMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKSB7XG4gICAgICAgIGlmIChjb250ZXh0KVxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgIH1cbiAgICAgIG5leHRWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBudWxsICE9PSBuZXh0VmFsdWUgJiZcbiAgICAgICAgKChuZXh0VmFsdWUucmVuZGVyaW5nID0gbnVsbCksXG4gICAgICAgIChuZXh0VmFsdWUudGFpbCA9IG51bGwpLFxuICAgICAgICAobmV4dFZhbHVlLmxhc3RFZmZlY3QgPSBudWxsKSk7XG4gICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICBpZiAoY29udGV4dCkgYnJlYWs7XG4gICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgIGNhc2UgMjI6XG4gICAgY2FzZSAyMzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDApLFxuICAgICAgICB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgKTtcbiAgfVxuICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xufVxudmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGwsXG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGwsXG4gIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IG51bGw7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9XG4gICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID1cbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9XG4gICAgICBudWxsO1xufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIoY29udGV4dCkge1xuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gIGZvciAoOyBudWxsICE9PSBwYXJlbnQ7ICkge1xuICAgIHZhciBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgIChwYXJlbnQuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXNcbiAgICAgID8gKChwYXJlbnQuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcyksXG4gICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpKVxuICAgICAgOiBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAgICAgKGFsdGVybmF0ZS5jaGlsZExhbmVzICYgcmVuZGVyTGFuZXMpICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgIGlmIChwYXJlbnQgPT09IHByb3BhZ2F0aW9uUm9vdCkgYnJlYWs7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLmZpcnN0Q29udGV4dCAmJlxuICAgICgwICE9PSAod29ya0luUHJvZ3Jlc3MubGFuZXMgJiByZW5kZXJMYW5lcykgJiYgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksXG4gICAgKHdvcmtJblByb2dyZXNzLmZpcnN0Q29udGV4dCA9IG51bGwpKTtcbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQpIHtcbiAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY3VycmVudGx5UmVuZGVyaW5nRmliZXIsIGNvbnRleHQpO1xufVxuZnVuY3Rpb24gcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKGNvbnN1bWVyLCBjb250ZXh0LCByZW5kZXJMYW5lcykge1xuICBudWxsID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAmJlxuICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KGNvbnN1bWVyLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY29uc3VtZXIsIGNvbnRleHQpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgaWYgKGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCAhPT0gY29udGV4dClcbiAgICBpZiAoXG4gICAgICAoKGNvbnRleHQgPSB7IGNvbnRleHQ6IGNvbnRleHQsIG1lbW9pemVkVmFsdWU6IHZhbHVlLCBuZXh0OiBudWxsIH0pLFxuICAgICAgbnVsbCA9PT0gbGFzdENvbnRleHREZXBlbmRlbmN5KVxuICAgICkge1xuICAgICAgaWYgKG51bGwgPT09IGNvbnN1bWVyKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICAgICk7XG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjb250ZXh0O1xuICAgICAgY29uc3VtZXIuZGVwZW5kZW5jaWVzID0geyBsYW5lczogMCwgZmlyc3RDb250ZXh0OiBjb250ZXh0IH07XG4gICAgfSBlbHNlIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dDtcbiAgcmV0dXJuIHZhbHVlO1xufVxudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbmZ1bmN0aW9uIGhhbmRsZUFzeW5jQWN0aW9uKCkge31cbmZ1bmN0aW9uIGRvZXNSZXF1aXJlQ2xvbmUoY3VycmVudCwgY29tcGxldGVkV29yaykge1xuICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiBjdXJyZW50LmNoaWxkID09PSBjb21wbGV0ZWRXb3JrLmNoaWxkKSByZXR1cm4gITE7XG4gIGlmICgwICE9PSAoY29tcGxldGVkV29yay5mbGFncyAmIDE2KSkgcmV0dXJuICEwO1xuICBmb3IgKGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApIHtcbiAgICBpZiAoMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjg1NCkgfHwgMCAhPT0gKGN1cnJlbnQuc3VidHJlZUZsYWdzICYgMTI4NTQpKVxuICAgICAgcmV0dXJuICEwO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gYXBwZW5kQWxsQ2hpbGRyZW4oXG4gIHBhcmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSxcbiAgaXNIaWRkZW5cbikge1xuICBmb3IgKHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IG5vZGU7ICkge1xuICAgIGlmICg1ID09PSBub2RlLnRhZykge1xuICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG4gICAgICBuZWVkc1Zpc2liaWxpdHlUb2dnbGUgJiZcbiAgICAgICAgaXNIaWRkZW4gJiZcbiAgICAgICAgKGluc3RhbmNlID0gY2xvbmVIaWRkZW5JbnN0YW5jZShpbnN0YW5jZSkpO1xuICAgICAgYXBwZW5kQ2hpbGROb2RlKHBhcmVudC5ub2RlLCBpbnN0YW5jZS5ub2RlKTtcbiAgICB9IGVsc2UgaWYgKDYgPT09IG5vZGUudGFnKSB7XG4gICAgICBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgaWYgKG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSAmJiBpc0hpZGRlbilcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJOb3QgeWV0IGltcGxlbWVudGVkLlwiKTtcbiAgICAgIGFwcGVuZENoaWxkTm9kZShwYXJlbnQubm9kZSwgaW5zdGFuY2Uubm9kZSk7XG4gICAgfSBlbHNlIGlmICg0ICE9PSBub2RlLnRhZylcbiAgICAgIGlmICgyMiA9PT0gbm9kZS50YWcgJiYgbnVsbCAhPT0gbm9kZS5tZW1vaXplZFN0YXRlKVxuICAgICAgICAoaW5zdGFuY2UgPSBub2RlLmNoaWxkKSxcbiAgICAgICAgICBudWxsICE9PSBpbnN0YW5jZSAmJiAoaW5zdGFuY2UucmV0dXJuID0gbm9kZSksXG4gICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4ocGFyZW50LCBub2RlLCAhMCwgITApO1xuICAgICAgZWxzZSBpZiAobnVsbCAhPT0gbm9kZS5jaGlsZCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIGJyZWFrO1xuICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgaWYgKG51bGwgPT09IG5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykgcmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuZnVuY3Rpb24gYXBwZW5kQWxsQ2hpbGRyZW5Ub0NvbnRhaW5lcihcbiAgY29udGFpbmVyQ2hpbGRTZXQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsXG4gIGlzSGlkZGVuXG4pIHtcbiAgZm9yICh2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBub2RlOyApIHtcbiAgICBpZiAoNSA9PT0gbm9kZS50YWcpIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlICYmXG4gICAgICAgIGlzSGlkZGVuICYmXG4gICAgICAgIChpbnN0YW5jZSA9IGNsb25lSGlkZGVuSW5zdGFuY2UoaW5zdGFuY2UpKTtcbiAgICAgIGFwcGVuZENoaWxkTm9kZVRvU2V0KGNvbnRhaW5lckNoaWxkU2V0LCBpbnN0YW5jZS5ub2RlKTtcbiAgICB9IGVsc2UgaWYgKDYgPT09IG5vZGUudGFnKSB7XG4gICAgICBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgaWYgKG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSAmJiBpc0hpZGRlbilcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJOb3QgeWV0IGltcGxlbWVudGVkLlwiKTtcbiAgICAgIGFwcGVuZENoaWxkTm9kZVRvU2V0KGNvbnRhaW5lckNoaWxkU2V0LCBpbnN0YW5jZS5ub2RlKTtcbiAgICB9IGVsc2UgaWYgKDQgIT09IG5vZGUudGFnKVxuICAgICAgaWYgKDIyID09PSBub2RlLnRhZyAmJiBudWxsICE9PSBub2RlLm1lbW9pemVkU3RhdGUpXG4gICAgICAgIChpbnN0YW5jZSA9IG5vZGUuY2hpbGQpLFxuICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlICYmIChpbnN0YW5jZS5yZXR1cm4gPSBub2RlKSxcbiAgICAgICAgICBhcHBlbmRBbGxDaGlsZHJlblRvQ29udGFpbmVyKFxuICAgICAgICAgICAgY29udGFpbmVyQ2hpbGRTZXQsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbm9kZS5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgIFwibWFudWFsXCIgPT09IG5vZGUubWVtb2l6ZWRQcm9wcy5tb2RlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgZWxzZSBpZiAobnVsbCAhPT0gbm9kZS5jaGlsZCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIGJyZWFrO1xuICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgaWYgKG51bGwgPT09IG5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykgcmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbnRhaW5lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoZG9lc1JlcXVpcmVDbG9uZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjb250YWluZXIgPSBjdXJyZW50LmNvbnRhaW5lckluZm8sXG4gICAgICBuZXdDaGlsZFNldCA9IGNyZWF0ZUNoaWxkTm9kZVNldCgpO1xuICAgIGFwcGVuZEFsbENoaWxkcmVuVG9Db250YWluZXIobmV3Q2hpbGRTZXQsIHdvcmtJblByb2dyZXNzLCAhMSwgITEpO1xuICAgIGN1cnJlbnQucGVuZGluZ0NoaWxkcmVuID0gbmV3Q2hpbGRTZXQ7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDtcbiAgICBjb21wbGV0ZVJvb3QoY29udGFpbmVyLCBuZXdDaGlsZFNldCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJldHJ5UXVldWUpIHtcbiAgbnVsbCAhPT0gcmV0cnlRdWV1ZVxuICAgID8gKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpXG4gICAgOiB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDE2Mzg0ICYmXG4gICAgICAoKHJldHJ5UXVldWUgPVxuICAgICAgICAyMiAhPT0gd29ya0luUHJvZ3Jlc3MudGFnID8gY2xhaW1OZXh0UmV0cnlMYW5lKCkgOiA1MzY4NzA5MTIpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzIHw9IHJldHJ5UXVldWUpKTtcbn1cbmZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgZm9yICh2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDsgbnVsbCAhPT0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrOyApXG4gICAgICAgIG51bGwgIT09IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjay5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAobGFzdFRhaWxOb2RlID0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSxcbiAgICAgICAgICAoaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrID0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrLnNpYmxpbmcpO1xuICAgICAgbnVsbCA9PT0gbGFzdFRhaWxOb2RlXG4gICAgICAgID8gKHJlbmRlclN0YXRlLnRhaWwgPSBudWxsKVxuICAgICAgICA6IChsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNvbGxhcHNlZFwiOlxuICAgICAgbGFzdFRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgIGZvciAodmFyIGxhc3RUYWlsTm9kZSQ2MSA9IG51bGw7IG51bGwgIT09IGxhc3RUYWlsTm9kZTsgKVxuICAgICAgICBudWxsICE9PSBsYXN0VGFpbE5vZGUuYWx0ZXJuYXRlICYmIChsYXN0VGFpbE5vZGUkNjEgPSBsYXN0VGFpbE5vZGUpLFxuICAgICAgICAgIChsYXN0VGFpbE5vZGUgPSBsYXN0VGFpbE5vZGUuc2libGluZyk7XG4gICAgICBudWxsID09PSBsYXN0VGFpbE5vZGUkNjFcbiAgICAgICAgPyBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgfHwgbnVsbCA9PT0gcmVuZGVyU3RhdGUudGFpbFxuICAgICAgICAgID8gKHJlbmRlclN0YXRlLnRhaWwgPSBudWxsKVxuICAgICAgICAgIDogKHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGwpXG4gICAgICAgIDogKGxhc3RUYWlsTm9kZSQ2MS5zaWJsaW5nID0gbnVsbCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGJ1YmJsZVByb3BlcnRpZXMoY29tcGxldGVkV29yaykge1xuICB2YXIgZGlkQmFpbG91dCA9XG4gICAgICBudWxsICE9PSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZSAmJlxuICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQgPT09IGNvbXBsZXRlZFdvcmsuY2hpbGQsXG4gICAgbmV3Q2hpbGRMYW5lcyA9IDAsXG4gICAgc3VidHJlZUZsYWdzID0gMDtcbiAgaWYgKGRpZEJhaWxvdXQpXG4gICAgZm9yICh2YXIgY2hpbGQkNjIgPSBjb21wbGV0ZWRXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZCQ2MjsgKVxuICAgICAgKG5ld0NoaWxkTGFuZXMgfD0gY2hpbGQkNjIubGFuZXMgfCBjaGlsZCQ2Mi5jaGlsZExhbmVzKSxcbiAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBjaGlsZCQ2Mi5zdWJ0cmVlRmxhZ3MgJiAzMTQ1NzI4MCksXG4gICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQkNjIuZmxhZ3MgJiAzMTQ1NzI4MCksXG4gICAgICAgIChjaGlsZCQ2Mi5yZXR1cm4gPSBjb21wbGV0ZWRXb3JrKSxcbiAgICAgICAgKGNoaWxkJDYyID0gY2hpbGQkNjIuc2libGluZyk7XG4gIGVsc2VcbiAgICBmb3IgKGNoaWxkJDYyID0gY29tcGxldGVkV29yay5jaGlsZDsgbnVsbCAhPT0gY2hpbGQkNjI7IClcbiAgICAgIChuZXdDaGlsZExhbmVzIHw9IGNoaWxkJDYyLmxhbmVzIHwgY2hpbGQkNjIuY2hpbGRMYW5lcyksXG4gICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQkNjIuc3VidHJlZUZsYWdzKSxcbiAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBjaGlsZCQ2Mi5mbGFncyksXG4gICAgICAgIChjaGlsZCQ2Mi5yZXR1cm4gPSBjb21wbGV0ZWRXb3JrKSxcbiAgICAgICAgKGNoaWxkJDYyID0gY2hpbGQkNjIuc2libGluZyk7XG4gIGNvbXBsZXRlZFdvcmsuc3VidHJlZUZsYWdzIHw9IHN1YnRyZWVGbGFncztcbiAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbiAgcmV0dXJuIGRpZEJhaWxvdXQ7XG59XG5mdW5jdGlvbiBjb21wbGV0ZVdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSAxNjpcbiAgICBjYXNlIDE1OlxuICAgIGNhc2UgMDpcbiAgICBjYXNlIDExOlxuICAgIGNhc2UgNzpcbiAgICBjYXNlIDg6XG4gICAgY2FzZSAxMjpcbiAgICBjYXNlIDk6XG4gICAgY2FzZSAxNDpcbiAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpc0NvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlKSAmJiBwb3BDb250ZXh0KCksXG4gICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSksXG4gICAgICAgIHBvcEhvc3RDb250YWluZXIoKSxcbiAgICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IpLFxuICAgICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEpLFxuICAgICAgICBuZXdQcm9wcy5wZW5kaW5nQ29udGV4dCAmJlxuICAgICAgICAgICgobmV3UHJvcHMuY29udGV4dCA9IG5ld1Byb3BzLnBlbmRpbmdDb250ZXh0KSxcbiAgICAgICAgICAobmV3UHJvcHMucGVuZGluZ0NvbnRleHQgPSBudWxsKSksXG4gICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQuY2hpbGQpIHx8XG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgIChjdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkICYmXG4gICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYpKSB8fFxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCksXG4gICAgICAgICAgbnVsbCAhPT0gaHlkcmF0aW9uRXJyb3JzICYmXG4gICAgICAgICAgICAocXVldWVSZWNvdmVyYWJsZUVycm9ycyhoeWRyYXRpb25FcnJvcnMpLFxuICAgICAgICAgICAgKGh5ZHJhdGlvbkVycm9ycyA9IG51bGwpKSksXG4gICAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDI2OlxuICAgIGNhc2UgMjc6XG4gICAgY2FzZSA1OlxuICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpIHtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBjdXJyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzLFxuICAgICAgICAgIHJlcXVpcmVzQ2xvbmUgPSBkb2VzUmVxdWlyZUNsb25lKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgaWYgKHJlcXVpcmVzQ2xvbmUgfHwgb2xkUHJvcHMgIT09IG5ld1Byb3BzKSB7XG4gICAgICAgICAgYjoge1xuICAgICAgICAgICAgb2xkUHJvcHMgPSBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgb2xkUHJvcHMsXG4gICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcy5jYW5vbmljYWwudmlld0NvbmZpZy52YWxpZEF0dHJpYnV0ZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZW5kZXJMYW5lcy5jYW5vbmljYWwuY3VycmVudFByb3BzID0gbmV3UHJvcHM7XG4gICAgICAgICAgICBuZXdQcm9wcyA9IHJlbmRlckxhbmVzLm5vZGU7XG4gICAgICAgICAgICBpZiAocmVxdWlyZXNDbG9uZSlcbiAgICAgICAgICAgICAgbmV3UHJvcHMgPVxuICAgICAgICAgICAgICAgIG51bGwgIT09IG9sZFByb3BzXG4gICAgICAgICAgICAgICAgICA/IGNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbkFuZFByb3BzKG5ld1Byb3BzLCBvbGRQcm9wcylcbiAgICAgICAgICAgICAgICAgIDogY2xvbmVOb2RlV2l0aE5ld0NoaWxkcmVuKG5ld1Byb3BzKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKG51bGwgIT09IG9sZFByb3BzKVxuICAgICAgICAgICAgICBuZXdQcm9wcyA9IGNsb25lTm9kZVdpdGhOZXdQcm9wcyhuZXdQcm9wcywgb2xkUHJvcHMpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIG5ld1Byb3BzID0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdQcm9wcyA9IHsgbm9kZTogbmV3UHJvcHMsIGNhbm9uaWNhbDogcmVuZGVyTGFuZXMuY2Fub25pY2FsIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld1Byb3BzID09PSByZW5kZXJMYW5lc1xuICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbmV3UHJvcHMpLFxuICAgICAgICAgICAgICByZXF1aXJlc0Nsb25lXG4gICAgICAgICAgICAgICAgPyBhcHBlbmRBbGxDaGlsZHJlbihuZXdQcm9wcywgd29ya0luUHJvZ3Jlc3MsICExLCAhMSlcbiAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSk7XG4gICAgICAgIH0gZWxzZSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSByZW5kZXJMYW5lcztcbiAgICAgICAgY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZiAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA5NzY2NCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWlyZXNDbG9uZSA9IHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICAgIGN1cnJlbnQgPSBuZXh0UmVhY3RUYWc7XG4gICAgICAgIG5leHRSZWFjdFRhZyArPSAyO1xuICAgICAgICByZW5kZXJMYW5lcyA9IGdldFZpZXdDb25maWdGb3JUeXBlKHJlbmRlckxhbmVzKTtcbiAgICAgICAgb2xkUHJvcHMgPSBkaWZmUHJvcGVydGllcyhcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGVtcHR5T2JqZWN0LFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIHJlbmRlckxhbmVzLnZhbGlkQXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgICByZXF1aXJlc0Nsb25lID0gY3JlYXRlTm9kZShcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlbmRlckxhbmVzLnVpVmlld0NsYXNzTmFtZSxcbiAgICAgICAgICByZXF1aXJlc0Nsb25lLFxuICAgICAgICAgIG9sZFByb3BzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICk7XG4gICAgICAgIG9sZFByb3BzID0gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmNyZWF0ZVB1YmxpY0luc3RhbmNlKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IHtcbiAgICAgICAgICBub2RlOiByZXF1aXJlc0Nsb25lLFxuICAgICAgICAgIGNhbm9uaWNhbDoge1xuICAgICAgICAgICAgbmF0aXZlVGFnOiBjdXJyZW50LFxuICAgICAgICAgICAgdmlld0NvbmZpZzogcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICBjdXJyZW50UHJvcHM6IG5ld1Byb3BzLFxuICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTogd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBwdWJsaWNJbnN0YW5jZTogb2xkUHJvcHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCAhMSwgITEpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50O1xuICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwOTc2NjQpO1xuICAgICAgfVxuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTc7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIDY6XG4gICAgICBpZiAoY3VycmVudCAmJiBudWxsICE9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wc1xuICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjcmVhdGVUZXh0SW5zdGFuY2UoXG4gICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICByb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50LFxuICAgICAgICAgICAgICBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpKVxuICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIG5ld1Byb3BzICYmIG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZVRleHRJbnN0YW5jZShcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICByb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50LFxuICAgICAgICAgIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgMTM6XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgIChudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZClcbiAgICAgICkge1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV3UHJvcHMgJiYgbnVsbCAhPT0gbmV3UHJvcHMuZGVoeWRyYXRlZCkge1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJBIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50IHdhcyBjb21wbGV0ZWQgd2l0aG91dCBhIGh5ZHJhdGVkIG5vZGUuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UoKSB0byBuZXZlciBiZSBjYWxsZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXF1aXJlc0Nsb25lID0gITE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIG51bGwgIT09IGh5ZHJhdGlvbkVycm9ycyAmJlxuICAgICAgICAgICAgKHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoaHlkcmF0aW9uRXJyb3JzKSwgKGh5ZHJhdGlvbkVycm9ycyA9IG51bGwpKSxcbiAgICAgICAgICAgIChyZXF1aXJlc0Nsb25lID0gITApO1xuICAgICAgICBpZiAoIXJlcXVpcmVzQ2xvbmUpXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2ID8gd29ya0luUHJvZ3Jlc3MgOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkpXG4gICAgICAgIHJldHVybiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcyksIHdvcmtJblByb2dyZXNzO1xuICAgICAgbmV3UHJvcHMgPSBudWxsICE9PSBuZXdQcm9wcztcbiAgICAgIG5ld1Byb3BzICE9PSAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpICYmXG4gICAgICAgIG5ld1Byb3BzICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZC5mbGFncyB8PSA4MTkyKTtcbiAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKTtcbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcigpLFxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgY2FzZSAxMDpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQpLFxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDE3OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MudHlwZSkgJiYgcG9wQ29udGV4dCgpLFxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDE5OlxuICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IpO1xuICAgICAgcmVxdWlyZXNDbG9uZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCA9PT0gcmVxdWlyZXNDbG9uZSkgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgbmV3UHJvcHMgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpO1xuICAgICAgb2xkUHJvcHMgPSByZXF1aXJlc0Nsb25lLnJlbmRlcmluZztcbiAgICAgIGlmIChudWxsID09PSBvbGRQcm9wcylcbiAgICAgICAgaWYgKG5ld1Byb3BzKSBjdXRPZmZUYWlsSWZOZWVkZWQocmVxdWlyZXNDbG9uZSwgITEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzIHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJiAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IGN1cnJlbnQ7ICkge1xuICAgICAgICAgICAgICBvbGRQcm9wcyA9IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG9sZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZXF1aXJlc0Nsb25lLCAhMSk7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG9sZFByb3BzLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudDtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgICAgICBmb3IgKG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IG5ld1Byb3BzOyApXG4gICAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKG5ld1Byb3BzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgICAgKG5ld1Byb3BzID0gbmV3UHJvcHMuc2libGluZyk7XG4gICAgICAgICAgICAgICAgcHVzaChcbiAgICAgICAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgICAgICAgICAgICAoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgMSkgfCAyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBudWxsICE9PSByZXF1aXJlc0Nsb25lLnRhaWwgJiZcbiAgICAgICAgICAgIG5vdygpID4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSAmJlxuICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlcXVpcmVzQ2xvbmUsICExKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghbmV3UHJvcHMpXG4gICAgICAgICAgaWYgKCgoY3VycmVudCA9IGZpbmRGaXJzdFN1c3BlbmRlZChvbGRQcm9wcykpLCBudWxsICE9PSBjdXJyZW50KSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgIChuZXdQcm9wcyA9ICEwKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudCksXG4gICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVxdWlyZXNDbG9uZSwgITApLFxuICAgICAgICAgICAgICBudWxsID09PSByZXF1aXJlc0Nsb25lLnRhaWwgJiZcbiAgICAgICAgICAgICAgICBcImhpZGRlblwiID09PSByZXF1aXJlc0Nsb25lLnRhaWxNb2RlICYmXG4gICAgICAgICAgICAgICAgIW9sZFByb3BzLmFsdGVybmF0ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgMiAqIG5vdygpIC0gcmVxdWlyZXNDbG9uZS5yZW5kZXJpbmdTdGFydFRpbWUgPlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lICYmXG4gICAgICAgICAgICAgIDUzNjg3MDkxMiAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAobmV3UHJvcHMgPSAhMCksXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZXF1aXJlc0Nsb25lLCAhMSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgcmVxdWlyZXNDbG9uZS5pc0JhY2t3YXJkc1xuICAgICAgICAgID8gKChvbGRQcm9wcy5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gb2xkUHJvcHMpKVxuICAgICAgICAgIDogKChjdXJyZW50ID0gcmVxdWlyZXNDbG9uZS5sYXN0KSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAoY3VycmVudC5zaWJsaW5nID0gb2xkUHJvcHMpXG4gICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLmNoaWxkID0gb2xkUHJvcHMpLFxuICAgICAgICAgICAgKHJlcXVpcmVzQ2xvbmUubGFzdCA9IG9sZFByb3BzKSk7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCAhPT0gcmVxdWlyZXNDbG9uZS50YWlsKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHJlcXVpcmVzQ2xvbmUudGFpbCksXG4gICAgICAgICAgKHJlcXVpcmVzQ2xvbmUucmVuZGVyaW5nID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChyZXF1aXJlc0Nsb25lLnRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nKSxcbiAgICAgICAgICAocmVxdWlyZXNDbG9uZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3coKSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBudWxsKSxcbiAgICAgICAgICAoY3VycmVudCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdQcm9wcyA/IChjdXJyZW50ICYgMSkgfCAyIDogY3VycmVudCAmIDEpLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICk7XG4gICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgMjI6XG4gICAgY2FzZSAyMzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIHBvcEhpZGRlbkNvbnRleHQoKSxcbiAgICAgICAgKG5ld1Byb3BzID0gbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICA/IChudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpXG4gICAgICAgICAgOiBuZXdQcm9wcyAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MiksXG4gICAgICAgIG5ld1Byb3BzICYmIDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgMSlcbiAgICAgICAgICA/IDAgIT09IChyZW5kZXJMYW5lcyAmIDUzNjg3MDkxMikgJiZcbiAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgIChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyAmIDYgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpKVxuICAgICAgICAgIDogYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpLFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5yZXRyeVF1ZXVlKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDI0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAyNTpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRocm93IEVycm9yKFxuICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICk7XG59XG5mdW5jdGlvbiB1bndpbmRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MudHlwZSkgJiYgcG9wQ29udGV4dCgpLFxuICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgY3VycmVudCAmIDY1NTM2XG4gICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSwgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgOiBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBvcEhvc3RDb250YWluZXIoKSxcbiAgICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IpLFxuICAgICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEpLFxuICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgMCAhPT0gKGN1cnJlbnQgJiA2NTUzNikgJiYgMCA9PT0gKGN1cnJlbnQgJiAxMjgpXG4gICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSwgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgOiBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgIGNhc2UgMTM6XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudC5kZWh5ZHJhdGVkICYmXG4gICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZVxuICAgICAgKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlRocmV3IGluIG5ld2x5IG1vdW50ZWQgZGVoeWRyYXRlZCBjb21wb25lbnQuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuICAgICAgcmV0dXJuIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLCB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgOiBudWxsO1xuICAgIGNhc2UgMTk6XG4gICAgICByZXR1cm4gcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IpLCBudWxsO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBwb3BIb3N0Q29udGFpbmVyKCksIG51bGw7XG4gICAgY2FzZSAxMDpcbiAgICAgIHJldHVybiBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0KSwgbnVsbDtcbiAgICBjYXNlIDIyOlxuICAgIGNhc2UgMjM6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICBwb3BIaWRkZW5Db250ZXh0KCksXG4gICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MpLFxuICAgICAgICBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLCB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICA6IG51bGxcbiAgICAgICk7XG4gICAgY2FzZSAyNDpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgMjU6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCBpbnRlcnJ1cHRlZFdvcmspIHtcbiAgc3dpdGNoIChpbnRlcnJ1cHRlZFdvcmsudGFnKSB7XG4gICAgY2FzZSAxOlxuICAgICAgY3VycmVudCA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiB2b2lkIDAgIT09IGN1cnJlbnQgJiYgcG9wQ29udGV4dCgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcigpO1xuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IpO1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICBwb3BIb3N0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgcG9wSG9zdENvbnRhaW5lcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMzpcbiAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOTpcbiAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6XG4gICAgICBwb3BQcm92aWRlcihpbnRlcnJ1cHRlZFdvcmsudHlwZS5fY29udGV4dCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgIGNhc2UgMjM6XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIoaW50ZXJydXB0ZWRXb3JrKSwgcG9wSGlkZGVuQ29udGV4dCgpO1xuICB9XG59XG52YXIgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gITEsXG4gIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSAhMSxcbiAgUG9zc2libHlXZWFrU2V0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha1NldCA/IFdlYWtTZXQgOiBTZXQsXG4gIG5leHRFZmZlY3QgPSBudWxsO1xuZnVuY3Rpb24gc2FmZWx5QXR0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG4gICAgaWYgKG51bGwgIT09IHJlZikge1xuICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudC5zdGF0ZU5vZGU7XG4gICAgICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB2YXIgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgICB9XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWZcbiAgICAgICAgPyAoY3VycmVudC5yZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlVG9Vc2UpKVxuICAgICAgICA6IChyZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gIHZhciByZWYgPSBjdXJyZW50LnJlZixcbiAgICByZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICBpZiAobnVsbCAhPT0gcmVmKVxuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWZDbGVhbnVwKVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVmQ2xlYW51cCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKGN1cnJlbnQucmVmQ2xlYW51cCA9IG51bGwpLFxuICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5hbHRlcm5hdGUpLFxuICAgICAgICAgIG51bGwgIT0gY3VycmVudCAmJiAoY3VycmVudC5yZWZDbGVhbnVwID0gbnVsbCk7XG4gICAgICB9XG4gICAgZWxzZSBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVmKG51bGwpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IkNzcpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IkNzcpO1xuICAgICAgfVxuICAgIGVsc2UgcmVmLmN1cnJlbnQgPSBudWxsO1xufVxuZnVuY3Rpb24gc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVzdHJveSkge1xuICB0cnkge1xuICAgIGRlc3Ryb3koKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gIH1cbn1cbnZhciBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSAhMTtcbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaXJzdENoaWxkKSB7XG4gIGZvciAobmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQ7IG51bGwgIT09IG5leHRFZmZlY3Q7IClcbiAgICBpZiAoXG4gICAgICAoKHJvb3QgPSBuZXh0RWZmZWN0KSxcbiAgICAgIChmaXJzdENoaWxkID0gcm9vdC5jaGlsZCksXG4gICAgICAwICE9PSAocm9vdC5zdWJ0cmVlRmxhZ3MgJiAxMDI4KSAmJiBudWxsICE9PSBmaXJzdENoaWxkKVxuICAgIClcbiAgICAgIChmaXJzdENoaWxkLnJldHVybiA9IHJvb3QpLCAobmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQpO1xuICAgIGVsc2VcbiAgICAgIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgcm9vdCA9IG5leHRFZmZlY3Q7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSByb290LmFsdGVybmF0ZSxcbiAgICAgICAgICAgIGZsYWdzID0gcm9vdC5mbGFncztcbiAgICAgICAgICBzd2l0Y2ggKHJvb3QudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBpZiAoMCAhPT0gKGZsYWdzICYgMTAyNCkgJiYgbnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgICBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IHJvb3Quc3RhdGVOb2RlLFxuICAgICAgICAgICAgICAgICAgc25hcHNob3QgPSBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5lbGVtZW50VHlwZSA9PT0gcm9vdC50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgPyBwcmV2UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMocm9vdC50eXBlLCBwcmV2UHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICBwcmV2U3RhdGVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgaWYgKDAgIT09IChmbGFncyAmIDEwMjQpKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHJvb3QsIHJvb3QucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3RDaGlsZCA9IHJvb3Quc2libGluZztcbiAgICAgICAgaWYgKG51bGwgIT09IGZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBmaXJzdENoaWxkLnJldHVybiA9IHJvb3QucmV0dXJuO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBmaXJzdENoaWxkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG5leHRFZmZlY3QgPSByb290LnJldHVybjtcbiAgICAgIH1cbiAgY3VycmVudCA9IHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1cjtcbiAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gITE7XG4gIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICBmbGFncyxcbiAgZmluaXNoZWRXb3JrLFxuICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4pIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB1cGRhdGVRdWV1ZSA9IG51bGwgIT09IHVwZGF0ZVF1ZXVlID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG4gIGlmIChudWxsICE9PSB1cGRhdGVRdWV1ZSkge1xuICAgIHZhciBlZmZlY3QgPSAodXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5uZXh0KTtcbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiBmbGFncykgPT09IGZsYWdzKSB7XG4gICAgICAgIHZhciBpbnN0ID0gZWZmZWN0Lmluc3QsXG4gICAgICAgICAgZGVzdHJveSA9IGluc3QuZGVzdHJveTtcbiAgICAgICAgdm9pZCAwICE9PSBkZXN0cm95ICYmXG4gICAgICAgICAgKChpbnN0LmRlc3Ryb3kgPSB2b2lkIDApLFxuICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGZpbmlzaGVkV29yaywgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVzdHJveSkpO1xuICAgICAgfVxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSB1cGRhdGVRdWV1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoZmxhZ3MsIGZpbmlzaGVkV29yaykge1xuICBmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIGZpbmlzaGVkV29yayA9IG51bGwgIT09IGZpbmlzaGVkV29yayA/IGZpbmlzaGVkV29yay5sYXN0RWZmZWN0IDogbnVsbDtcbiAgaWYgKG51bGwgIT09IGZpbmlzaGVkV29yaykge1xuICAgIHZhciBlZmZlY3QgPSAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLm5leHQpO1xuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MpIHtcbiAgICAgICAgdmFyIGNyZWF0ZSQ3OCA9IGVmZmVjdC5jcmVhdGUsXG4gICAgICAgICAgaW5zdCA9IGVmZmVjdC5pbnN0O1xuICAgICAgICBjcmVhdGUkNzggPSBjcmVhdGUkNzgoKTtcbiAgICAgICAgaW5zdC5kZXN0cm95ID0gY3JlYXRlJDc4O1xuICAgICAgfVxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIGhvb2tGbGFncykge1xuICB0cnkge1xuICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICBpZiAobnVsbCAhPT0gdXBkYXRlUXVldWUpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgIHRyeSB7XG4gICAgICBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjb21taXRIb3N0Q29tcG9uZW50TW91bnQoZmluaXNoZWRXb3JrKSB7XG4gIHRyeSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIlRoZSBjdXJyZW50IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgbXV0YXRpb24uIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTE6XG4gICAgY2FzZSAxNTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNCAmJiBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIDUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgaWYgKGZsYWdzICYgNClcbiAgICAgICAgaWYgKCgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksIG51bGwgPT09IGN1cnJlbnQpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlByb3BzID1cbiAgICAgICAgICAgIGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGVcbiAgICAgICAgICAgICAgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBjdXJyZW50Lm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5jb21wb25lbnREaWRVcGRhdGUoXG4gICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290Ll9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yJDc5KSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBlcnJvciQ3OVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGZsYWdzICYgNjQgJiYgY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgaWYgKGZsYWdzICYgNjQgJiYgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksIG51bGwgIT09IGZsYWdzKSkge1xuICAgICAgICBmaW5pc2hlZFJvb3QgPSBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPT0gZmluaXNoZWRXb3JrLmNoaWxkKVxuICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb21taXRDYWxsYmFja3MoZmxhZ3MsIGZpbmlzaGVkUm9vdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBudWxsID09PSBjdXJyZW50ICYmIGZsYWdzICYgNCAmJiBjb21taXRIb3N0Q29tcG9uZW50TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgaWYgKDAgIT09IChmaW5pc2hlZFdvcmsubW9kZSAmIDEpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHByZXZQcm9wcyA9XG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSB8fCBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4pLFxuICAgICAgICAgICFwcmV2UHJvcHMpXG4gICAgICAgICkge1xuICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbixcbiAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBwcmV2UHJvcHM7XG4gICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBjdXJyZW50KSAmJlxuICAgICAgICAgICFwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlblxuICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiA4NzcyKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgIChcIm1hbnVhbFwiID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5tb2RlXG4gICAgICAgICAgPyBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKVxuICAgICAgICAgIDogc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybikpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgfVxufVxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmXG4gICAgKChmaWJlci5hbHRlcm5hdGUgPSBudWxsKSwgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoYWx0ZXJuYXRlKSk7XG4gIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgZmliZXIuZGVsZXRpb25zID0gbnVsbDtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgZmluaXNoZWRSb290LFxuICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICBwYXJlbnRcbikge1xuICBmb3IgKHBhcmVudCA9IHBhcmVudC5jaGlsZDsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIHBhcmVudCksXG4gICAgICAocGFyZW50ID0gcGFyZW50LnNpYmxpbmcpO1xufVxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihcbiAgZmluaXNoZWRSb290LFxuICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICBkZWxldGVkRmliZXJcbikge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudClcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGRlbGV0ZWRGaWJlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxuICBzd2l0Y2ggKGRlbGV0ZWRGaWJlci50YWcpIHtcbiAgICBjYXNlIDI2OlxuICAgIGNhc2UgMjc6XG4gICAgY2FzZSA1OlxuICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICBjYXNlIDY6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTg6XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBjcmVhdGVDaGlsZE5vZGVTZXQoKTtcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTE6XG4gICAgY2FzZSAxNDpcbiAgICBjYXNlIDE1OlxuICAgICAgaWYgKCFvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGRlbGV0ZWRGaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG51bGwgIT09IHVwZGF0ZVF1ZXVlICYmXG4gICAgICAgICAgKCh1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QpLCBudWxsICE9PSB1cGRhdGVRdWV1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGVmZmVjdCA9ICh1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLm5leHQpO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIHZhciB0YWcgPSBlZmZlY3QudGFnLFxuICAgICAgICAgICAgICBpbnN0ID0gZWZmZWN0Lmluc3QsXG4gICAgICAgICAgICAgIGRlc3Ryb3kgPSBpbnN0LmRlc3Ryb3k7XG4gICAgICAgICAgICB2b2lkIDAgIT09IGRlc3Ryb3kgJiZcbiAgICAgICAgICAgICAgKDAgIT09ICh0YWcgJiAyKVxuICAgICAgICAgICAgICAgID8gKChpbnN0LmRlc3Ryb3kgPSB2b2lkIDApLFxuICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveVxuICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IDAgIT09ICh0YWcgJiA0KSAmJlxuICAgICAgICAgICAgICAgICAgKChpbnN0LmRlc3Ryb3kgPSB2b2lkIDApLFxuICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveVxuICAgICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSB1cGRhdGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgaWYgKFxuICAgICAgICAhb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiAmJlxuICAgICAgICAoc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciksXG4gICAgICAgICh1cGRhdGVRdWV1ZSA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1cGRhdGVRdWV1ZS5jb21wb25lbnRXaWxsVW5tb3VudClcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAodXBkYXRlUXVldWUucHJvcHMgPSBkZWxldGVkRmliZXIubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgICAodXBkYXRlUXVldWUuc3RhdGUgPSBkZWxldGVkRmliZXIubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICB1cGRhdGVRdWV1ZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjE6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgIGRlbGV0ZWRGaWJlci5tb2RlICYgMVxuICAgICAgICA/ICgob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9XG4gICAgICAgICAgICAodXBkYXRlUXVldWUgPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB8fFxuICAgICAgICAgICAgbnVsbCAhPT0gZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKSxcbiAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHVwZGF0ZVF1ZXVlKSlcbiAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgMTM6XG4gICAgY2FzZSAxOTpcbiAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgIG51bGwgPT09IHJldHJ5Q2FjaGUgJiZcbiAgICAgICAgKHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKTtcbiAgICAgIHJldHVybiByZXRyeUNhY2hlO1xuICAgIGNhc2UgMjI6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksXG4gICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlKSxcbiAgICAgICAgbnVsbCA9PT0gcmV0cnlDYWNoZSAmJlxuICAgICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKSxcbiAgICAgICAgcmV0cnlDYWNoZVxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiVW5leHBlY3RlZCBTdXNwZW5zZSBoYW5kbGVyIHRhZyAoXCIgK1xuICAgICAgICAgIGZpbmlzaGVkV29yay50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIHdha2VhYmxlcykge1xuICB2YXIgcmV0cnlDYWNoZSA9IGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKTtcbiAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcbiAgICByZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkgfHxcbiAgICAgIChyZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSksIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBwYXJlbnRGaWJlcikge1xuICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIocm9vdCwgcGFyZW50RmliZXIsIGNoaWxkVG9EZWxldGUpO1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gY2hpbGRUb0RlbGV0ZS5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLnJldHVybiA9IG51bGwpO1xuICAgICAgICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjaGlsZFRvRGVsZXRlLCBwYXJlbnRGaWJlciwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEyODU0KVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIocGFyZW50RmliZXIsIHJvb3QpLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KSB7XG4gIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTE6XG4gICAgY2FzZSAxNDpcbiAgICBjYXNlIDE1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDMsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiksXG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KDMsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoNSwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IkODEpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yJDgxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybik7XG4gICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiAmJlxuICAgICAgICAoKGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yayAmJlxuICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsuY2FsbGJhY2tzKSxcbiAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gZmluaXNoZWRXb3JrLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MpLFxuICAgICAgICAgICAgKGZpbmlzaGVkV29yay5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID1cbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCA/IGZsYWdzIDogY3VycmVudC5jb25jYXQoZmxhZ3MpKSkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZpbmlzaGVkV29yay5jaGlsZC5mbGFncyAmIDgxOTIgJiZcbiAgICAgICAgKChjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpLFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSB8fFxuICAgICAgICAgIGN1cnJlbnQgfHxcbiAgICAgICAgICAoZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdygpKSk7XG4gICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgKChmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgZmxhZ3MpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgdmFyIGlzSGlkZGVuID0gbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHdhc0hpZGRlbiA9IG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKGZpbmlzaGVkV29yay5tb2RlICYgMSkge1xuICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbixcbiAgICAgICAgICBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgaXNIaWRkZW47XG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fCB3YXNIaWRkZW47XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgfSBlbHNlIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICByb290Ll9jdXJyZW50ID0gZmluaXNoZWRXb3JrO1xuICAgICAgcm9vdC5fdmlzaWJpbGl0eSAmPSAtMztcbiAgICAgIHJvb3QuX3Zpc2liaWxpdHkgfD0gcm9vdC5fcGVuZGluZ1Zpc2liaWxpdHkgJiAyO1xuICAgICAgZmxhZ3MgJiA4MTkyICYmXG4gICAgICAgICgocm9vdC5fdmlzaWJpbGl0eSA9IGlzSGlkZGVuXG4gICAgICAgICAgPyByb290Ll92aXNpYmlsaXR5ICYgLTJcbiAgICAgICAgICA6IHJvb3QuX3Zpc2liaWxpdHkgfCAxKSxcbiAgICAgICAgaXNIaWRkZW4gJiZcbiAgICAgICAgICAoKGlzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuIHx8IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pLFxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgIHdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgaXNIaWRkZW4gfHxcbiAgICAgICAgICAgICgwICE9PSAoZmluaXNoZWRXb3JrLm1vZGUgJiAxKSAmJlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspKSkpO1xuICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICgoY3VycmVudCA9IGZsYWdzLnJldHJ5UXVldWUpLFxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICgoZmxhZ3MucmV0cnlRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIGN1cnJlbnQpKSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICgoZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIGZsYWdzKSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyMTpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayksXG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgZmxhZ3MgJiAyICYmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTMpO1xuICBmbGFncyAmIDQwOTYgJiYgKGZpbmlzaGVkV29yay5mbGFncyAmPSAtNDA5Nyk7XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhyb290LCBwYXJlbnRGaWJlcikge1xuICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKHJvb3QsIHBhcmVudEZpYmVyLmFsdGVybmF0ZSwgcGFyZW50RmliZXIpLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgIHZhciBmaW5pc2hlZFdvcmsgPSBwYXJlbnRGaWJlcjtcbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICBjYXNlIDE0OlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDQsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gZmluaXNoZWRXb3JrLnJldHVybjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQkanNjb21wJDAgPSBjdXJyZW50O1xuICAgICAgICAgICAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50JGpzY29tcCQwLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQkanNjb21wJDAubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI2OlxuICAgICAgY2FzZSAyNzpcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyMjpcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gIGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgcGFyZW50RmliZXIsXG4gIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbikge1xuICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID1cbiAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIDAgIT09IChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiA4NzcyKTtcbiAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGUsXG4gICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QkanNjb21wJDAsXG4gICAgICBmaW5pc2hlZFdvcmsgPSBwYXJlbnRGaWJlcixcbiAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxMTpcbiAgICAgIGNhc2UgMTU6XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICk7XG4gICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgNCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZmluaXNoZWRSb290LmNvbXBvbmVudERpZE1vdW50KVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgIHZhciBoaWRkZW5DYWxsYmFja3MgPSBjdXJyZW50LnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGhpZGRlbkNhbGxiYWNrcylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGN1cnJlbnQuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9IG51bGwsIGN1cnJlbnQgPSAwO1xuICAgICAgICAgICAgICBjdXJyZW50IDwgaGlkZGVuQ2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgY3VycmVudCsrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNhbGxDYWxsYmFjayhoaWRkZW5DYWxsYmFja3NbY3VycmVudF0sIGZpbmlzaGVkUm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI2OlxuICAgICAgY2FzZSAyNzpcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICBjb21taXRIb3N0Q29tcG9uZW50TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjI6XG4gICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gIHRyeSB7XG4gICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKHJvb3QsIHBhcmVudEZpYmVyKSB7XG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKHJvb3QsIHBhcmVudEZpYmVyKSxcbiAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG59XG5mdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTE6XG4gICAgY2FzZSAxNTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgMjA0OCAmJiBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIDkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyMzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZVxuICAgICAgICA/IGZsYWdzLl92aXNpYmlsaXR5ICYgNFxuICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspXG4gICAgICAgICAgOiBmaW5pc2hlZFdvcmsubW9kZSAmIDEgfHxcbiAgICAgICAgICAgICgoZmxhZ3MuX3Zpc2liaWxpdHkgfD0gNCksXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykpXG4gICAgICAgIDogZmxhZ3MuX3Zpc2liaWxpdHkgJiA0XG4gICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspXG4gICAgICAgIDogKChmbGFncy5fdmlzaWJpbGl0eSB8PSA0KSxcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjQ6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gIGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgcGFyZW50RmliZXJcbikge1xuICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICB2YXIgZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290JGpzY29tcCQwLFxuICAgICAgZmluaXNoZWRXb3JrID0gcGFyZW50RmliZXI7XG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCA4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIzOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjI6XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgPyBpbnN0YW5jZS5fdmlzaWJpbGl0eSAmIDRcbiAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBmaW5pc2hlZFdvcmsubW9kZSAmIDEgfHxcbiAgICAgICAgICAgICAgKChpbnN0YW5jZS5fdmlzaWJpbGl0eSB8PSA0KSxcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICA6ICgoaW5zdGFuY2UuX3Zpc2liaWxpdHkgfD0gNCksXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICApKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgfVxuICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgfVxufVxudmFyIHN1c3BlbnNleUNvbW1pdEZsYWcgPSA4MTkyO1xuZnVuY3Rpb24gcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KHBhcmVudEZpYmVyKSB7XG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBzdXNwZW5zZXlDb21taXRGbGFnKVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKHBhcmVudEZpYmVyKSxcbiAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaWJlcikge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgMjY6XG4gICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgaWYgKGZpYmVyLmZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZyAmJiBudWxsICE9PSBmaWJlci5tZW1vaXplZFN0YXRlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBjdXJyZW50IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgUmVzb3VyY2VzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgIGNhc2UgNDpcbiAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgaWYgKG51bGwgPT09IGZpYmVyLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgPyAoKGN1cnJlbnQgPSBzdXNwZW5zZXlDb21taXRGbGFnKSxcbiAgICAgICAgICAgIChzdXNwZW5zZXlDb21taXRGbGFnID0gMTY3NzcyMTYpLFxuICAgICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKSxcbiAgICAgICAgICAgIChzdXNwZW5zZXlDb21taXRGbGFnID0gY3VycmVudCkpXG4gICAgICAgICAgOiByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKSB7XG4gIHZhciBwcmV2aW91c0ZpYmVyID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuICBpZiAoXG4gICAgbnVsbCAhPT0gcHJldmlvdXNGaWJlciAmJlxuICAgICgocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyLmNoaWxkKSwgbnVsbCAhPT0gcGFyZW50RmliZXIpXG4gICkge1xuICAgIHByZXZpb3VzRmliZXIuY2hpbGQgPSBudWxsO1xuICAgIGRvXG4gICAgICAocHJldmlvdXNGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpLFxuICAgICAgICAocGFyZW50RmliZXIuc2libGluZyA9IG51bGwpLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyKTtcbiAgICB3aGlsZSAobnVsbCAhPT0gcGFyZW50RmliZXIpO1xuICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG4gICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gIH1cbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihwYXJlbnRGaWJlciksXG4gICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xufVxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAxMTpcbiAgICBjYXNlIDE1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICYgMjA0OCAmJlxuICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoOSwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgIGluc3RhbmNlLl92aXNpYmlsaXR5ICYgNCAmJlxuICAgICAgKG51bGwgPT09IGZpbmlzaGVkV29yay5yZXR1cm4gfHwgMTMgIT09IGZpbmlzaGVkV29yay5yZXR1cm4udGFnKVxuICAgICAgICA/ICgoaW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gLTUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSlcbiAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG4gICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gIH1cbiAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgZGVsZXRpb25zID0gcGFyZW50RmliZXI7XG4gICAgc3dpdGNoIChkZWxldGlvbnMudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDgsIGRlbGV0aW9ucywgZGVsZXRpb25zLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZGVsZXRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIyOlxuICAgICAgICBpID0gZGVsZXRpb25zLnN0YXRlTm9kZTtcbiAgICAgICAgaS5fdmlzaWJpbGl0eSAmIDQgJiZcbiAgICAgICAgICAoKGkuX3Zpc2liaWxpdHkgJj0gLTUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZGVsZXRpb25zKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhkZWxldGlvbnMpO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gIGRlbGV0ZWRTdWJ0cmVlUm9vdCxcbiAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuKSB7XG4gIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDgsIGZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICB9XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG4gICAgaWYgKG51bGwgIT09IGNoaWxkKSAoY2hpbGQucmV0dXJuID0gZmliZXIpLCAobmV4dEVmZmVjdCA9IGNoaWxkKTtcbiAgICBlbHNlXG4gICAgICBhOiBmb3IgKGZpYmVyID0gZGVsZXRlZFN1YnRyZWVSb290OyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgY2hpbGQgPSBuZXh0RWZmZWN0O1xuICAgICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmcsXG4gICAgICAgICAgcmV0dXJuRmliZXIgPSBjaGlsZC5yZXR1cm47XG4gICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkID09PSBmaWJlcikge1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bGwgIT09IHNpYmxpbmcpIHtcbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEVmZmVjdCA9IHJldHVybkZpYmVyO1xuICAgICAgfVxuICB9XG59XG52YXIgUG9zc2libHlXZWFrTWFwID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha01hcCA/IFdlYWtNYXAgOiBNYXAsXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBleGVjdXRpb25Db250ZXh0ID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCxcbiAgd29ya0luUHJvZ3Jlc3MgPSBudWxsLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICExLFxuICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSAwLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbCxcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSAwLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbCxcbiAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eSxcbiAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwsXG4gIGhhc1VuY2F1Z2h0RXJyb3IgPSAhMSxcbiAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbCxcbiAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsLFxuICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9ICExLFxuICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGwsXG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gMCxcbiAgbmVzdGVkVXBkYXRlQ291bnQgPSAwLFxuICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpIHtcbiAgaWYgKDAgPT09IChmaWJlci5tb2RlICYgMSkpIHJldHVybiAyO1xuICBpZiAoMCAhPT0gKGV4ZWN1dGlvbkNvbnRleHQgJiAyKSAmJiAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcylcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAtd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gIGZpYmVyID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICBudWxsICE9PSBmaWJlciAmJiBmaWJlci5fY2FsbGJhY2tzLmFkZChoYW5kbGVBc3luY0FjdGlvbik7XG4gIGlmIChudWxsICE9PSBmaWJlcilcbiAgICByZXR1cm4gKFxuICAgICAgMCA9PT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgJiZcbiAgICAgICAgKGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSksXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZVxuICAgICk7XG4gIGZpYmVyID0gY3VycmVudFVwZGF0ZVByaW9yaXR5O1xuICBpZiAoMCA9PT0gZmliZXIpXG4gICAgYToge1xuICAgICAgZmliZXIgPSBmYWJyaWNHZXRDdXJyZW50RXZlbnRQcmlvcml0eVxuICAgICAgICA/IGZhYnJpY0dldEN1cnJlbnRFdmVudFByaW9yaXR5KClcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKG51bGwgIT0gZmliZXIpXG4gICAgICAgIHN3aXRjaCAoZmliZXIpIHtcbiAgICAgICAgICBjYXNlIEZhYnJpY0Rpc2NyZXRlUHJpb3JpdHk6XG4gICAgICAgICAgICBmaWJlciA9IDI7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICB9XG4gICAgICBmaWJlciA9IDMyO1xuICAgIH1cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gcmVxdWVzdERlZmVycmVkTGFuZSgpIHtcbiAgMCA9PT0gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgJiZcbiAgICAod29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPVxuICAgICAgMCAhPT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKVxuICAgICAgICA/IDUzNjg3MDkxMlxuICAgICAgICA6IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCkpO1xuICB2YXIgc3VzcGVuc2VIYW5kbGVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgbnVsbCAhPT0gc3VzcGVuc2VIYW5kbGVyICYmIChzdXNwZW5zZUhhbmRsZXIuZmxhZ3MgfD0gMzIpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmU7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgaWYgKFxuICAgIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgMiA9PT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHx8XG4gICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0XG4gIClcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCAwKSxcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICByb290LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICk7XG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lKTtcbiAgaWYgKDAgPT09IChleGVjdXRpb25Db250ZXh0ICYgMikgfHwgcm9vdCAhPT0gd29ya0luUHJvZ3Jlc3NSb290KVxuICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgKDAgPT09IChleGVjdXRpb25Db250ZXh0ICYgMikgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9IGxhbmUpLFxuICAgICAgNCA9PT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJlxuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICByb290LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICkpLFxuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpLFxuICAgICAgMiA9PT0gbGFuZSAmJlxuICAgICAgICAwID09PSBleGVjdXRpb25Db250ZXh0ICYmXG4gICAgICAgIDAgPT09IChmaWJlci5tb2RlICYgMSkgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyA1MDApLFxuICAgICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCghMCkpO1xufVxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAgaWYgKDAgIT09IChleGVjdXRpb25Db250ZXh0ICYgNikpXG4gICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICBpZiAoZmx1c2hQYXNzaXZlRWZmZWN0cygpICYmIHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSlcbiAgICByZXR1cm4gbnVsbDtcbiAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKFxuICAgIHJvb3QsXG4gICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiAwXG4gICk7XG4gIGlmICgwID09PSBsYW5lcykgcmV0dXJuIG51bGw7XG4gIHZhciBleGl0U3RhdHVzID0gKGRpZFRpbWVvdXQgPVxuICAgIDAgPT09IChsYW5lcyAmIDYwKSAmJiAwID09PSAobGFuZXMgJiByb290LmV4cGlyZWRMYW5lcykgJiYgIWRpZFRpbWVvdXQpXG4gICAgPyByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcylcbiAgICA6IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgaWYgKDAgIT09IGV4aXRTdGF0dXMpIHtcbiAgICB2YXIgcmVuZGVyV2FzQ29uY3VycmVudCA9IGRpZFRpbWVvdXQ7XG4gICAgZG8ge1xuICAgICAgaWYgKDYgPT09IGV4aXRTdGF0dXMpIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCAwKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBkaWRUaW1lb3V0ID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgJiZcbiAgICAgICAgICAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGRpZFRpbWVvdXQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgyID09PSBleGl0U3RhdHVzKSB7XG4gICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGxhbmVzO1xuICAgICAgICAgIHZhciBlcnJvclJldHJ5TGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICAwICE9PSBlcnJvclJldHJ5TGFuZXMgJiZcbiAgICAgICAgICAgICgobGFuZXMgPSBlcnJvclJldHJ5TGFuZXMpLFxuICAgICAgICAgICAgKGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCxcbiAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKDEgPT09IGV4aXRTdGF0dXMpXG4gICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgKChvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IpLFxuICAgICAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgMCksXG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgMCksXG4gICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCksXG4gICAgICAgICAgICBvcmlnaW5hbENhbGxiYWNrTm9kZSlcbiAgICAgICAgICApO1xuICAgICAgICByb290LmZpbmlzaGVkV29yayA9IGRpZFRpbWVvdXQ7XG4gICAgICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgICAgICBhOiB7XG4gICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IHJvb3Q7XG4gICAgICAgICAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgaWYgKChsYW5lcyAmIDQxOTQxNzYpID09PSBsYW5lcykge1xuICAgICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAobGFuZXMgJiA2MjkxNDU2MCkgPT09IGxhbmVzICYmXG4gICAgICAgICAgICAzID09PSBleGl0U3RhdHVzICYmXG4gICAgICAgICAgICAoKGV4aXRTdGF0dXMgPSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgMzAwIC0gbm93KCkpLFxuICAgICAgICAgICAgMTAgPCBleGl0U3RhdHVzKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICgwICE9PSBnZXROZXh0TGFuZXMocmVuZGVyV2FzQ29uY3VycmVudCwgMCkpIGJyZWFrIGE7XG4gICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoXG4gICAgICAgICAgICAgIGNvbW1pdFJvb3RXaGVuUmVhZHkuYmluZChcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZGlkVGltZW91dCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGV4aXRTdGF0dXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCxcbiAgICAgICAgICAgIGRpZFRpbWVvdXQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfSB3aGlsZSAoMSk7XG4gIH1cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIG5vdygpKTtcbiAgcm9vdCA9XG4gICAgcm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlXG4gICAgICA/IHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpXG4gICAgICA6IG51bGw7XG4gIHJldHVybiByb290O1xufVxuZnVuY3Rpb24gcmVjb3ZlckZyb21Db25jdXJyZW50RXJyb3IoXG4gIHJvb3QsXG4gIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyxcbiAgZXJyb3JSZXRyeUxhbmVzXG4pIHtcbiAgdmFyIGVycm9yc0Zyb21GaXJzdEF0dGVtcHQgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzLFxuICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHJvb3QuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCkgJiZcbiAgICAocHJlcGFyZUZyZXNoU3RhY2socm9vdCwgZXJyb3JSZXRyeUxhbmVzKS5mbGFncyB8PSAyNTYpO1xuICBlcnJvclJldHJ5TGFuZXMgPSByZW5kZXJSb290U3luYyhyb290LCBlcnJvclJldHJ5TGFuZXMpO1xuICBpZiAoMiAhPT0gZXJyb3JSZXRyeUxhbmVzKSB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciAmJiAhSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgfD0gb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9IG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyksXG4gICAgICAgIDRcbiAgICAgICk7XG4gICAgcm9vdCA9IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JzRnJvbUZpcnN0QXR0ZW1wdDtcbiAgICBudWxsICE9PSByb290ICYmIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMocm9vdCk7XG4gIH1cbiAgcmV0dXJuIGVycm9yUmV0cnlMYW5lcztcbn1cbmZ1bmN0aW9uIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoZXJyb3JzKSB7XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzXG4gICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBlcnJvcnMpXG4gICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgZXJyb3JzXG4gICAgICApO1xufVxuZnVuY3Rpb24gY29tbWl0Um9vdFdoZW5SZWFkeShcbiAgcm9vdCxcbiAgZmluaXNoZWRXb3JrLFxuICByZWNvdmVyYWJsZUVycm9ycyxcbiAgdHJhbnNpdGlvbnMsXG4gIGxhbmVzLFxuICBzcGF3bmVkTGFuZVxuKSB7XG4gIDAgPT09IChsYW5lcyAmIDQyKSAmJiBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaW5pc2hlZFdvcmspO1xuICBjb21taXRSb290KHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgc3Bhd25lZExhbmUpO1xufVxuZnVuY3Rpb24gaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZpbmlzaGVkV29yaykge1xuICBmb3IgKHZhciBub2RlID0gZmluaXNoZWRXb3JrOyA7ICkge1xuICAgIGlmIChub2RlLmZsYWdzICYgMTYzODQpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5vZGUudXBkYXRlUXVldWU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHVwZGF0ZVF1ZXVlICYmXG4gICAgICAgICgodXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5zdG9yZXMpLCBudWxsICE9PSB1cGRhdGVRdWV1ZSlcbiAgICAgIClcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjaGVjayA9IHVwZGF0ZVF1ZXVlW2ldLFxuICAgICAgICAgICAgZ2V0U25hcHNob3QgPSBjaGVjay5nZXRTbmFwc2hvdDtcbiAgICAgICAgICBjaGVjayA9IGNoZWNrLnZhbHVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIW9iamVjdElzKGdldFNuYXBzaG90KCksIGNoZWNrKSkgcmV0dXJuICExO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZVF1ZXVlID0gbm9kZS5jaGlsZDtcbiAgICBpZiAobm9kZS5zdWJ0cmVlRmxhZ3MgJiAxNjM4NCAmJiBudWxsICE9PSB1cGRhdGVRdWV1ZSlcbiAgICAgICh1cGRhdGVRdWV1ZS5yZXR1cm4gPSBub2RlKSwgKG5vZGUgPSB1cGRhdGVRdWV1ZSk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSBicmVhaztcbiAgICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgICBpZiAobnVsbCA9PT0gbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykgcmV0dXJuICEwO1xuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gITA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcywgc3Bhd25lZExhbmUpIHtcbiAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzO1xuICBzdXNwZW5kZWRMYW5lcyAmPSB+d29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXM7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzO1xuICBmb3IgKFxuICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcywgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcbiAgICAwIDwgbGFuZXM7XG5cbiAgKSB7XG4gICAgdmFyIGluZGV4JDQgPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDQ7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4JDRdID0gLTE7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbiAgMCAhPT0gc3Bhd25lZExhbmUgJiZcbiAgICBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgc3VzcGVuZGVkTGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCkge1xuICBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICBpZiAoMCA9PT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pXG4gICAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIGVsc2VcbiAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpLFxuICAgICAgICByZXNldEhvb2tzT25VbndpbmQoaW50ZXJydXB0ZWRXb3JrKSxcbiAgICAgICAgKHRoZW5hYmxlU3RhdGUkMSA9IG51bGwpLFxuICAgICAgICAodGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDApLFxuICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgIGZvciAoOyBudWxsICE9PSBpbnRlcnJ1cHRlZFdvcms7IClcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmsuYWx0ZXJuYXRlLCBpbnRlcnJ1cHRlZFdvcmspLFxuICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybik7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IDA7XG4gIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuICAtMSAhPT0gdGltZW91dEhhbmRsZSAmJlxuICAgICgocm9vdC50aW1lb3V0SGFuZGxlID0gLTEpLCBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpKTtcbiAgdGltZW91dEhhbmRsZSA9IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdDtcbiAgbnVsbCAhPT0gdGltZW91dEhhbmRsZSAmJlxuICAgICgocm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbCksIHRpbWVvdXRIYW5kbGUoKSk7XG4gIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICB3b3JrSW5Qcm9ncmVzcyA9IHRpbWVvdXRIYW5kbGUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IGxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDA7XG4gIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDA7XG4gIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPVxuICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID1cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPVxuICAgICAgMDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID1cbiAgICBudWxsO1xuICAwICE9PSAobGFuZXMgJiA4KSAmJiAobGFuZXMgfD0gbGFuZXMgJiAzMik7XG4gIHZhciBhbGxFbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG4gIGlmICgwICE9PSBhbGxFbnRhbmdsZWRMYW5lcylcbiAgICBmb3IgKFxuICAgICAgcm9vdCA9IHJvb3QuZW50YW5nbGVtZW50cywgYWxsRW50YW5nbGVkTGFuZXMgJj0gbGFuZXM7XG4gICAgICAwIDwgYWxsRW50YW5nbGVkTGFuZXM7XG5cbiAgICApIHtcbiAgICAgIHZhciBpbmRleCQyID0gMzEgLSBjbHozMihhbGxFbnRhbmdsZWRMYW5lcyksXG4gICAgICAgIGxhbmUgPSAxIDw8IGluZGV4JDI7XG4gICAgICBsYW5lcyB8PSByb290W2luZGV4JDJdO1xuICAgICAgYWxsRW50YW5nbGVkTGFuZXMgJj0gfmxhbmU7XG4gICAgfVxuICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IGxhbmVzO1xuICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gIHJldHVybiB0aW1lb3V0SGFuZGxlO1xufVxuZnVuY3Rpb24gaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVsbDtcbiAgdGhyb3duVmFsdWUgPT09IFN1c3BlbnNlRXhjZXB0aW9uXG4gICAgPyAoKHRocm93blZhbHVlID0gZ2V0U3VzcGVuZGVkVGhlbmFibGUoKSksXG4gICAgICAocm9vdCA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgKG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNDE5NDE3NikgPT09XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgID8gbnVsbCAhPT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApICE9PVxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSkgfHxcbiAgICAgICAgICAgICAgcm9vdCAhPT0gc2hlbGxCb3VuZGFyeSkpIHx8XG4gICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgJiAxMzQyMTc3MjcpIHx8XG4gICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyAmIDEzNDIxNzcyNylcbiAgICAgICAgICA/IDNcbiAgICAgICAgICA6IDIpKVxuICAgIDogdGhyb3duVmFsdWUgPT09IFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvblxuICAgID8gKCh0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCkpLFxuICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gNCkpXG4gICAgOiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICB0aHJvd25WYWx1ZSA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uXG4gICAgICAgICAgPyA4XG4gICAgICAgICAgOiBudWxsICE9PSB0aHJvd25WYWx1ZSAmJlxuICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHRocm93blZhbHVlICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0aHJvd25WYWx1ZS50aGVuXG4gICAgICAgICAgPyA2XG4gICAgICAgICAgOiAxKTtcbiAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IHRocm93blZhbHVlO1xuICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgICgod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDEpLFxuICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWUpKTtcbn1cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgcmV0dXJuIG51bGwgPT09IHByZXZEaXNwYXRjaGVyID8gQ29udGV4dE9ubHlEaXNwYXRjaGVyIDogcHJldkRpc3BhdGNoZXI7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gNDtcbiAgKDAgPT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgJiAxMzQyMTc3MjcpICYmXG4gICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzICYgMTM0MjE3NzI3KSkgfHxcbiAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgfHxcbiAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmVcbiAgICApO1xufVxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSAyO1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpO1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcylcbiAgICAod29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwpLCBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gIGxhbmVzID0gITE7XG4gIGE6IGRvXG4gICAgdHJ5IHtcbiAgICAgIGlmICgwICE9PSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAmJiBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICB2YXIgdW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcbiAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDY7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsYW5lcyB8fFxuICAgICAgICAgICAgICBudWxsICE9PSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50IHx8XG4gICAgICAgICAgICAgIChsYW5lcyA9ICEwKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlJDg5KSB7XG4gICAgICBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSQ4OSk7XG4gICAgfVxuICB3aGlsZSAoMSk7XG4gIGxhbmVzICYmIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlcisrO1xuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJDYW5ub3QgY29tbWl0IGFuIGluY29tcGxldGUgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICk7XG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMDtcbiAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbn1cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgZm9yICg7IG51bGwgIT09IHdvcmtJblByb2dyZXNzOyApIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbn1cbmZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gMjtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpXG4gICAgKHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgPSBudWxsKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyA1MDApLFxuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICBhOiBkb1xuICAgIHRyeSB7XG4gICAgICBpZiAoMCAhPT0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gJiYgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgbGFuZXMgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgdmFyIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcbiAgICAgICAgYjogc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCBsYW5lcywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKGlzVGhlbmFibGVSZXNvbHZlZCh0aHJvd25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwO1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFuZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIDIgPT09IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICYmXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gNyk7XG4gICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aHJvd25WYWx1ZS50aGVuKGxhbmVzLCBsYW5lcyk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gNztcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSA1O1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBpc1RoZW5hYmxlUmVzb2x2ZWQodGhyb3duVmFsdWUpXG4gICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDApLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcykpXG4gICAgICAgICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDApLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCBsYW5lcywgdGhyb3duVmFsdWUpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICBsYW5lcyA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IGxhbmVzLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IHNpYmxpbmcpIHdvcmtJblByb2dyZXNzID0gc2libGluZztcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5GaWJlciA9IGxhbmVzLnJldHVybjtcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsocmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHJvb3QsIGxhbmVzLCB0aHJvd25WYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDA7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgbGFuZXMsIHRocm93blZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDY7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuZXhwZWN0ZWQgU3VzcGVuZGVkUmVhc29uLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSQ5MSkge1xuICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUkOTEpO1xuICAgIH1cbiAgd2hpbGUgKDEpO1xuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKSByZXR1cm4gMDtcbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwO1xuICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xufVxuZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50KCkge1xuICBmb3IgKDsgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MgJiYgIXNob3VsZFlpZWxkKCk7IClcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG59XG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIHZhciBuZXh0ID0gYmVnaW5Xb3JrKHVuaXRPZldvcmsuYWx0ZXJuYXRlLCB1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICBudWxsID09PSBuZXh0ID8gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIDogKHdvcmtJblByb2dyZXNzID0gbmV4dCk7XG4gIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xufVxuZnVuY3Rpb24gcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gIHN3aXRjaCAodW5pdE9mV29yay50YWcpIHtcbiAgICBjYXNlIDI6XG4gICAgICB1bml0T2ZXb3JrLnRhZyA9IDA7XG4gICAgY2FzZSAxNTpcbiAgICBjYXNlIDA6XG4gICAgICB2YXIgQ29tcG9uZW50ID0gdW5pdE9mV29yay50eXBlLFxuICAgICAgICB1bnJlc29sdmVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcbiAgICAgIHVucmVzb2x2ZWRQcm9wcyA9XG4gICAgICAgIHVuaXRPZldvcmsuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgID8gdW5yZXNvbHZlZFByb3BzXG4gICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgIHZhciBjb250ZXh0ID0gaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KVxuICAgICAgICA/IHByZXZpb3VzQ29udGV4dFxuICAgICAgICA6IGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQ7XG4gICAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh1bml0T2ZXb3JrLCBjb250ZXh0KTtcbiAgICAgIGN1cnJlbnQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgdW5yZXNvbHZlZFByb3BzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMTpcbiAgICAgIENvbXBvbmVudCA9IHVuaXRPZldvcmsudHlwZS5yZW5kZXI7XG4gICAgICB1bnJlc29sdmVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcbiAgICAgIHVucmVzb2x2ZWRQcm9wcyA9XG4gICAgICAgIHVuaXRPZldvcmsuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgID8gdW5yZXNvbHZlZFByb3BzXG4gICAgICAgICAgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgIGN1cnJlbnQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgdW5yZXNvbHZlZFByb3BzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHVuaXRPZldvcmsucmVmLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHJlc2V0SG9va3NPblVud2luZCh1bml0T2ZXb3JrKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIHVuaXRPZldvcmspLFxuICAgICAgICAodW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKSksXG4gICAgICAgIChjdXJyZW50ID0gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKSk7XG4gIH1cbiAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gIG51bGwgPT09IGN1cnJlbnRcbiAgICA/IGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKVxuICAgIDogKHdvcmtJblByb2dyZXNzID0gY3VycmVudCk7XG4gIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xufVxuZnVuY3Rpb24gdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSkge1xuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgcmVzZXRIb29rc09uVW53aW5kKHVuaXRPZldvcmspO1xuICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgdmFyIHJldHVybkZpYmVyID0gdW5pdE9mV29yay5yZXR1cm47XG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgdGhyb3dFeGNlcHRpb24oXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICB0aHJvd25WYWx1ZSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSAxO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IHRocm93blZhbHVlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAobnVsbCAhPT0gcmV0dXJuRmliZXIpIHRocm93ICgod29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlciksIGVycm9yKTtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gMTtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodW5pdE9mV29yay5mbGFncyAmIDMyNzY4KVxuICAgIGE6IHtcbiAgICAgIHJvb3QgPSB1bml0T2ZXb3JrO1xuICAgICAgZG8ge1xuICAgICAgICB1bml0T2ZXb3JrID0gdW53aW5kV29yayhyb290LmFsdGVybmF0ZSwgcm9vdCk7XG4gICAgICAgIGlmIChudWxsICE9PSB1bml0T2ZXb3JrKSB7XG4gICAgICAgICAgdW5pdE9mV29yay5mbGFncyAmPSAzMjc2NztcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVuaXRPZldvcms7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICByb290ID0gcm9vdC5yZXR1cm47XG4gICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAoKHJvb3QuZmxhZ3MgfD0gMzI3NjgpLFxuICAgICAgICAgIChyb290LnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgIChyb290LmRlbGV0aW9ucyA9IG51bGwpKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByb290O1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gcm9vdCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gNjtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG4gIGVsc2UgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xufVxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuICBkbyB7XG4gICAgdW5pdE9mV29yayA9IGNvbXBsZXRlZFdvcmsucmV0dXJuO1xuICAgIHZhciBuZXh0ID0gY29tcGxldGVXb3JrKFxuICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUsXG4gICAgICBjb21wbGV0ZWRXb3JrLFxuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICApO1xuICAgIGlmIChudWxsICE9PSBuZXh0KSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbXBsZXRlZFdvcmsgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG4gICAgaWYgKG51bGwgIT09IGNvbXBsZXRlZFdvcmspIHtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcbiAgfSB3aGlsZSAobnVsbCAhPT0gY29tcGxldGVkV29yayk7XG4gIDAgPT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgJiYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSA1KTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCwgcmVjb3ZlcmFibGVFcnJvcnMsIHRyYW5zaXRpb25zLCBzcGF3bmVkTGFuZSkge1xuICB2YXIgcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkgPSBjdXJyZW50VXBkYXRlUHJpb3JpdHksXG4gICAgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICB0cnkge1xuICAgIChSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbCksXG4gICAgICAoY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gMiksXG4gICAgICBjb21taXRSb290SW1wbChcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgICBwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSxcbiAgICAgICAgc3Bhd25lZExhbmVcbiAgICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgKFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbiksXG4gICAgICAoY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwoXG4gIHJvb3QsXG4gIHJlY292ZXJhYmxlRXJyb3JzLFxuICB0cmFuc2l0aW9ucyxcbiAgcmVuZGVyUHJpb3JpdHlMZXZlbCxcbiAgc3Bhd25lZExhbmVcbikge1xuICBkbyBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHdoaWxlIChudWxsICE9PSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyk7XG4gIGlmICgwICE9PSAoZXhlY3V0aW9uQ29udGV4dCAmIDYpKVxuICAgIHRocm93IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIHRyYW5zaXRpb25zID0gcm9vdC5maW5pc2hlZExhbmVzO1xuICBpZiAobnVsbCA9PT0gZmluaXNoZWRXb3JrKSByZXR1cm4gbnVsbDtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSAwO1xuICBpZiAoZmluaXNoZWRXb3JrID09PSByb290LmN1cnJlbnQpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkNhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICApO1xuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDA7XG4gIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gIHZhciByZW1haW5pbmdMYW5lcyA9IGZpbmlzaGVkV29yay5sYW5lcyB8IGZpbmlzaGVkV29yay5jaGlsZExhbmVzO1xuICByZW1haW5pbmdMYW5lcyB8PSBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXM7XG4gIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMsIHNwYXduZWRMYW5lKTtcbiAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDApKTtcbiAgKDAgPT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTAyNTYpICYmXG4gICAgMCA9PT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEwMjU2KSkgfHxcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyB8fFxuICAgICgocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSAhMCksXG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSkpO1xuICBzcGF3bmVkTGFuZSA9IDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxNTk5MCk7XG4gIGlmICgwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDE1OTkwKSB8fCBzcGF3bmVkTGFuZSkge1xuICAgIHNwYXduZWRMYW5lID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcbiAgICByZW1haW5pbmdMYW5lcyA9IGN1cnJlbnRVcGRhdGVQcmlvcml0eTtcbiAgICBjdXJyZW50VXBkYXRlUHJpb3JpdHkgPSAyO1xuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSA0O1xuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KTtcbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihyb290LCBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLCBmaW5pc2hlZFdvcmspO1xuICAgIHJlcXVlc3RQYWludCgpO1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICBjdXJyZW50VXBkYXRlUHJpb3JpdHkgPSByZW1haW5pbmdMYW5lcztcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gc3Bhd25lZExhbmU7XG4gIH0gZWxzZSByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzICYmXG4gICAgKChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9ICExKSxcbiAgICAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290KSxcbiAgICAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSB0cmFuc2l0aW9ucykpO1xuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAwID09PSByZW1haW5pbmdMYW5lcyAmJiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsKTtcbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gIGlmIChudWxsICE9PSByZWNvdmVyYWJsZUVycm9ycylcbiAgICBmb3IgKFxuICAgICAgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IHJvb3Qub25SZWNvdmVyYWJsZUVycm9yLCBmaW5pc2hlZFdvcmsgPSAwO1xuICAgICAgZmluaXNoZWRXb3JrIDwgcmVjb3ZlcmFibGVFcnJvcnMubGVuZ3RoO1xuICAgICAgZmluaXNoZWRXb3JrKytcbiAgICApXG4gICAgICAoc3Bhd25lZExhbmUgPSByZWNvdmVyYWJsZUVycm9yc1tmaW5pc2hlZFdvcmtdKSxcbiAgICAgICAgKHJlbWFpbmluZ0xhbmVzID0ge1xuICAgICAgICAgIGRpZ2VzdDogc3Bhd25lZExhbmUuZGlnZXN0LFxuICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBzcGF3bmVkTGFuZS5zdGFja1xuICAgICAgICB9KSxcbiAgICAgICAgcmVuZGVyUHJpb3JpdHlMZXZlbChzcGF3bmVkTGFuZS52YWx1ZSwgcmVtYWluaW5nTGFuZXMpO1xuICBpZiAoaGFzVW5jYXVnaHRFcnJvcilcbiAgICB0aHJvdyAoXG4gICAgICAoKGhhc1VuY2F1Z2h0RXJyb3IgPSAhMSksXG4gICAgICAocm9vdCA9IGZpcnN0VW5jYXVnaHRFcnJvciksXG4gICAgICAoZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbCksXG4gICAgICByb290KVxuICAgICk7XG4gIDAgIT09IChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyAmIDMpICYmXG4gICAgMCAhPT0gcm9vdC50YWcgJiZcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIDAgIT09ICh0cmFuc2l0aW9ucyAmIDQxOTQyMTgpICYmIDAgIT09IChyZW1haW5pbmdMYW5lcyAmIDQyKVxuICAgID8gcm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzXG4gICAgICA/IG5lc3RlZFVwZGF0ZUNvdW50KytcbiAgICAgIDogKChuZXN0ZWRVcGRhdGVDb3VudCA9IDApLCAocm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdCkpXG4gICAgOiAobmVzdGVkVXBkYXRlQ291bnQgPSAwKTtcbiAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoITEpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gIGlmIChudWxsICE9PSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cykge1xuICAgIHZhciByZW5kZXJQcmlvcml0eSA9IGxhbmVzVG9FdmVudFByaW9yaXR5KHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzKSxcbiAgICAgIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbixcbiAgICAgIHByZXZpb3VzUHJpb3JpdHkgPSBjdXJyZW50VXBkYXRlUHJpb3JpdHk7XG4gICAgdHJ5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gMzIgPiByZW5kZXJQcmlvcml0eSA/IDMyIDogcmVuZGVyUHJpb3JpdHk7XG4gICAgICBpZiAobnVsbCA9PT0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMpXG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIGVsc2Uge1xuICAgICAgICByZW5kZXJQcmlvcml0eSA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICAgICAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG4gICAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gMDtcbiAgICAgICAgaWYgKDAgIT09IChleGVjdXRpb25Db250ZXh0ICYgNikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiKTtcbiAgICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSA0O1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIocmVuZGVyUHJpb3JpdHkuY3VycmVudCk7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIocmVuZGVyUHJpb3JpdHksIHJlbmRlclByaW9yaXR5LmN1cnJlbnQpO1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKCExKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3RcbiAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJlbmRlclByaW9yaXR5KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgKGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAoUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgc291cmNlRmliZXIgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciwgc291cmNlRmliZXIpO1xuICBzb3VyY2VGaWJlciA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIHNvdXJjZUZpYmVyLCAyKTtcbiAgcm9vdEZpYmVyID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHNvdXJjZUZpYmVyLCAyKTtcbiAgbnVsbCAhPT0gcm9vdEZpYmVyICYmXG4gICAgKG1hcmtSb290VXBkYXRlZChyb290RmliZXIsIDIpLCBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdEZpYmVyKSk7XG59XG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpIHtcbiAgaWYgKDMgPT09IHNvdXJjZUZpYmVyLnRhZylcbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChzb3VyY2VGaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgZWxzZVxuICAgIGZvciAoOyBudWxsICE9PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yOyApIHtcbiAgICAgIGlmICgzID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgxID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgIHR5cGVvZiBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgfHxcbiAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSkpKVxuICAgICAgICApIHtcbiAgICAgICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgICAgc291cmNlRmliZXIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgMlxuICAgICAgICAgICk7XG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IGVucXVldWVVcGRhdGUoXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBudWxsICE9PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yICYmXG4gICAgICAgICAgICAobWFya1Jvb3RVcGRhdGVkKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIDIpLFxuICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IucmV0dXJuO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICBpZiAobnVsbCA9PT0gcGluZ0NhY2hlKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG4gICAgdmFyIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICB9IGVsc2VcbiAgICAodGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSkpLFxuICAgICAgdm9pZCAwID09PSB0aHJlYWRJRHMgJiZcbiAgICAgICAgKCh0aHJlYWRJRHMgPSBuZXcgU2V0KCkpLCBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpKTtcbiAgdGhyZWFkSURzLmhhcyhsYW5lcykgfHxcbiAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICEwKSxcbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKSxcbiAgICAocm9vdCA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKSksXG4gICAgd2FrZWFibGUudGhlbihyb290LCByb290KSk7XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICBudWxsICE9PSBwaW5nQ2FjaGUgJiYgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiZcbiAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiBwaW5nZWRMYW5lcykgPT09IHBpbmdlZExhbmVzICYmXG4gICAgKDQgPT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgfHxcbiAgICAoMyA9PT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJlxuICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApID09PVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgMzAwID4gbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lKVxuICAgICAgPyAwID09PSAoZXhlY3V0aW9uQ29udGV4dCAmIDIpICYmIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApXG4gICAgICA6ICh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyB8PSBwaW5nZWRMYW5lcykpO1xuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG59XG5mdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gIDAgPT09IHJldHJ5TGFuZSAmJlxuICAgIChyZXRyeUxhbmUgPSAwID09PSAoYm91bmRhcnlGaWJlci5tb2RlICYgMSkgPyAyIDogY2xhaW1OZXh0UmV0cnlMYW5lKCkpO1xuICBib3VuZGFyeUZpYmVyID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gIG51bGwgIT09IGJvdW5kYXJ5RmliZXIgJiZcbiAgICAobWFya1Jvb3RVcGRhdGVkKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSksXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGJvdW5kYXJ5RmliZXIpKTtcbn1cbmZ1bmN0aW9uIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoYm91bmRhcnlGaWJlcikge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICByZXRyeUxhbmUgPSAwO1xuICBudWxsICE9PSBzdXNwZW5zZVN0YXRlICYmIChyZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSk7XG4gIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgdmFyIHJldHJ5TGFuZSA9IDA7XG4gIHN3aXRjaCAoYm91bmRhcnlGaWJlci50YWcpIHtcbiAgICBjYXNlIDEzOlxuICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgbnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSAmJiAocmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOTpcbiAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiUGluZ2VkIHVua25vd24gc3VzcGVuc2UgYm91bmRhcnkgdHlwZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKTtcbiAgfVxuICBudWxsICE9PSByZXRyeUNhY2hlICYmIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59XG52YXIgYmVnaW5Xb3JrO1xuYmVnaW5Xb3JrID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAobnVsbCAhPT0gY3VycmVudClcbiAgICBpZiAoXG4gICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyB8fFxuICAgICAgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50XG4gICAgKVxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICAwID09PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSAmJlxuICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMSksXG4gICAgICAgICAgYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSAwICE9PSAoY3VycmVudC5mbGFncyAmIDEzMTA3MikgPyAhMCA6ICExO1xuICAgIH1cbiAgZWxzZSBkaWRSZWNlaXZlVXBkYXRlID0gITE7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gMDtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHZhciBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dChcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnRcbiAgICAgICk7XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgY29udGV4dCA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgbnVsbCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY29udGV4dCAmJlxuICAgICAgICBudWxsICE9PSBjb250ZXh0ICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHQucmVuZGVyICYmXG4gICAgICAgIHZvaWQgMCA9PT0gY29udGV4dC4kJHR5cGVvZlxuICAgICAgKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IDE7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgdmFyIGhhc0NvbnRleHQgPSAhMDtcbiAgICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfSBlbHNlIGhhc0NvbnRleHQgPSAhMTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgbnVsbCAhPT0gY29udGV4dC5zdGF0ZSAmJiB2b2lkIDAgIT09IGNvbnRleHQuc3RhdGVcbiAgICAgICAgICAgID8gY29udGV4dC5zdGF0ZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBjb250ZXh0LnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQuX3JlYWN0SW50ZXJuYWxzID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBjdXJyZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gZmluaXNoQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgITAsXG4gICAgICAgICAgaGFzQ29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAwKSxcbiAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICBjYXNlIDE2OlxuICAgICAgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICBhOiB7XG4gICAgICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICBjb250ZXh0ID0gQ29tcG9uZW50Ll9pbml0O1xuICAgICAgICBDb21wb25lbnQgPSBjb250ZXh0KENvbXBvbmVudC5fcGF5bG9hZCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gICAgICAgIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICAgICAgICBjdXJyZW50ID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGN1cnJlbnQpO1xuICAgICAgICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArXG4gICAgICAgICAgICBDb21wb25lbnQgK1xuICAgICAgICAgICAgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAoY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgIChjb250ZXh0ID1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gQ29tcG9uZW50XG4gICAgICAgICAgICA/IGNvbnRleHRcbiAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGNvbnRleHQpKSxcbiAgICAgICAgdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApXG4gICAgICApO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgKGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAoY29udGV4dCA9XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IENvbXBvbmVudFxuICAgICAgICAgICAgPyBjb250ZXh0XG4gICAgICAgICAgICA6IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBjb250ZXh0KSksXG4gICAgICAgIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBjYXNlIDM6XG4gICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KVxuICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBoYXZlIGEgY3VycmVudCBmaWJlci4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5lbGVtZW50O1xuICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmVsZW1lbnQ7XG4gICAgICBjb250ZXh0ID09PSBDb21wb25lbnRcbiAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApKVxuICAgICAgICA6IChyZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIChDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICBtYXJrUmVmJDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcyksXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICApO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgMTM6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICApLFxuICAgICAgICAoQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgKTtcbiAgICBjYXNlIDExOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAoY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgIChjb250ZXh0ID1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gQ29tcG9uZW50XG4gICAgICAgICAgICA/IGNvbnRleHRcbiAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGNvbnRleHQpKSxcbiAgICAgICAgdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgY2FzZSA3OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSAxMjpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICksXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICApO1xuICAgIGNhc2UgMTA6XG4gICAgICBhOiB7XG4gICAgICAgIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICAgIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIGhhc0NvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBjb250ZXh0LnZhbHVlO1xuICAgICAgICBwdXNoKHZhbHVlQ3Vyc29yLCBDb21wb25lbnQuX2N1cnJlbnRWYWx1ZTIpO1xuICAgICAgICBDb21wb25lbnQuX2N1cnJlbnRWYWx1ZTIgPSBuZXdWYWx1ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IGhhc0NvbnRleHQpXG4gICAgICAgICAgaWYgKG9iamVjdElzKGhhc0NvbnRleHQudmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBoYXNDb250ZXh0LmNoaWxkcmVuID09PSBjb250ZXh0LmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgICFkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaGFzQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLmNoaWxkLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGhhc0NvbnRleHQgJiYgKGhhc0NvbnRleHQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICBudWxsICE9PSBoYXNDb250ZXh0O1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIGxpc3QgPSBoYXNDb250ZXh0LmRlcGVuZGVuY2llcztcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGxpc3QpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGhhc0NvbnRleHQuY2hpbGQ7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBkZXBlbmRlbmN5O1xuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT09IGhhc0NvbnRleHQudGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IGNyZWF0ZVVwZGF0ZShyZW5kZXJMYW5lcyAmIC1yZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeS50YWcgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGhhc0NvbnRleHQudXBkYXRlUXVldWU7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IHVwZGF0ZVF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZW5kaW5nID0gdXBkYXRlUXVldWUucGVuZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHBlbmRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoZGVwZW5kZW5jeS5uZXh0ID0gZGVwZW5kZW5jeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKGRlcGVuZGVuY3kubmV4dCA9IHBlbmRpbmcubmV4dCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlbmRpbmcubmV4dCA9IGRlcGVuZGVuY3kpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVF1ZXVlLnBlbmRpbmcgPSBkZXBlbmRlbmN5O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBoYXNDb250ZXh0LmxhbmVzIHw9IHJlbmRlckxhbmVzO1xuICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5ID0gaGFzQ29udGV4dC5hbHRlcm5hdGU7XG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGRlcGVuZGVuY3kgJiYgKGRlcGVuZGVuY3kubGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbnRleHQucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3QubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoMTAgPT09IGhhc0NvbnRleHQudGFnKVxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgIGhhc0NvbnRleHQudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MudHlwZVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBoYXNDb250ZXh0LmNoaWxkO1xuICAgICAgICAgICAgICBlbHNlIGlmICgxOCA9PT0gaGFzQ29udGV4dC50YWcpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGhhc0NvbnRleHQucmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBuZXdWYWx1ZSlcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIldlIGp1c3QgY2FtZSBmcm9tIGEgcGFyZW50IHNvIHdlIG11c3QgaGF2ZSBoYWQgYSBwYXJlbnQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgbGlzdCA9IG5ld1ZhbHVlLmFsdGVybmF0ZTtcbiAgICAgICAgICAgICAgICBudWxsICE9PSBsaXN0ICYmIChsaXN0LmxhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgICAgICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGhhc0NvbnRleHQuc2libGluZztcbiAgICAgICAgICAgICAgfSBlbHNlIG5ld1ZhbHVlID0gaGFzQ29udGV4dC5jaGlsZDtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG5ld1ZhbHVlKSBuZXdWYWx1ZS5yZXR1cm4gPSBoYXNDb250ZXh0O1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZm9yIChuZXdWYWx1ZSA9IGhhc0NvbnRleHQ7IG51bGwgIT09IG5ld1ZhbHVlOyApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGhhc0NvbnRleHQgPSBuZXdWYWx1ZS5zaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGhhc0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29udGV4dC5yZXR1cm4gPSBuZXdWYWx1ZS5yZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gaGFzQ29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlLnJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGhhc0NvbnRleHQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjb250ZXh0LmNoaWxkcmVuLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgY2FzZSA5OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgKENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksXG4gICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgIChjb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dCkpLFxuICAgICAgICAoQ29tcG9uZW50ID0gQ29tcG9uZW50KGNvbnRleHQpKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEpLFxuICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcyksXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICApO1xuICAgIGNhc2UgMTQ6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgIChjb250ZXh0ID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcykpLFxuICAgICAgICAoY29udGV4dCA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LnR5cGUsIGNvbnRleHQpKSxcbiAgICAgICAgdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgY2FzZSAxNTpcbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICBjYXNlIDE3OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAoY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgIChjb250ZXh0ID1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gQ29tcG9uZW50XG4gICAgICAgICAgICA/IGNvbnRleHRcbiAgICAgICAgICAgIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGNvbnRleHQpKSxcbiAgICAgICAgcmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAxKSxcbiAgICAgICAgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KVxuICAgICAgICAgID8gKChjdXJyZW50ID0gITApLCBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICA6IChjdXJyZW50ID0gITEpLFxuICAgICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGNvbnRleHQpLFxuICAgICAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgY29udGV4dCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICBmaW5pc2hDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAhMCxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgY2FzZSAxOTpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICBjYXNlIDIyOlxuICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG4gIHRocm93IEVycm9yKFxuICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICk7XG59O1xuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZWR1bGVDYWxsYmFjayQyKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5zaWJsaW5nID1cbiAgICB0aGlzLmNoaWxkID1cbiAgICB0aGlzLnJldHVybiA9XG4gICAgdGhpcy5zdGF0ZU5vZGUgPVxuICAgIHRoaXMudHlwZSA9XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9XG4gICAgICBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWZDbGVhbnVwID0gdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5kZXBlbmRlbmNpZXMgPVxuICAgIHRoaXMubWVtb2l6ZWRTdGF0ZSA9XG4gICAgdGhpcy51cGRhdGVRdWV1ZSA9XG4gICAgdGhpcy5tZW1vaXplZFByb3BzID1cbiAgICAgIG51bGw7XG4gIHRoaXMubW9kZSA9IG1vZGU7XG4gIHRoaXMuc3VidHJlZUZsYWdzID0gdGhpcy5mbGFncyA9IDA7XG4gIHRoaXMuZGVsZXRpb25zID0gbnVsbDtcbiAgdGhpcy5jaGlsZExhbmVzID0gdGhpcy5sYW5lcyA9IDA7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG59XG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIENvbXBvbmVudCA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhKCFDb21wb25lbnQgfHwgIUNvbXBvbmVudC5pc1JlYWN0Q29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCkge1xuICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50KVxuICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSA/IDEgOiAwO1xuICBpZiAodm9pZCAwICE9PSBDb21wb25lbnQgJiYgbnVsbCAhPT0gQ29tcG9uZW50KSB7XG4gICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuICAgIGlmIChDb21wb25lbnQgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHJldHVybiAxMTtcbiAgICBpZiAoQ29tcG9uZW50ID09PSBSRUFDVF9NRU1PX1RZUEUpIHJldHVybiAxNDtcbiAgfVxuICByZXR1cm4gMjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICA/ICgod29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihcbiAgICAgICAgY3VycmVudC50YWcsXG4gICAgICAgIHBlbmRpbmdQcm9wcyxcbiAgICAgICAgY3VycmVudC5rZXksXG4gICAgICAgIGN1cnJlbnQubW9kZVxuICAgICAgKSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudCksXG4gICAgICAoY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcykpXG4gICAgOiAoKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcyksXG4gICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAwKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsKSk7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzID0gY3VycmVudC5mbGFncyAmIDMxNDU3MjgwO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICBwZW5kaW5nUHJvcHMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICBudWxsID09PSBwZW5kaW5nUHJvcHNcbiAgICAgID8gbnVsbFxuICAgICAgOiB7IGxhbmVzOiBwZW5kaW5nUHJvcHMubGFuZXMsIGZpcnN0Q29udGV4dDogcGVuZGluZ1Byb3BzLmZpcnN0Q29udGV4dCB9O1xuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuICB3b3JrSW5Qcm9ncmVzcy5yZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAzMTQ1NzI4MjtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gIG51bGwgPT09IGN1cnJlbnRcbiAgICA/ICgod29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDApLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXMpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCksXG4gICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGwpKVxuICAgIDogKCh3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgIChyZW5kZXJMYW5lcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICBudWxsID09PSByZW5kZXJMYW5lc1xuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBsYW5lczogcmVuZGVyTGFuZXMubGFuZXMsXG4gICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogcmVuZGVyTGFuZXMuZmlyc3RDb250ZXh0XG4gICAgICAgICAgICB9KSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgdHlwZSxcbiAga2V5LFxuICBwZW5kaW5nUHJvcHMsXG4gIG93bmVyLFxuICBtb2RlLFxuICBsYW5lc1xuKSB7XG4gIHZhciBmaWJlclRhZyA9IDI7XG4gIG93bmVyID0gdHlwZTtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpIHNob3VsZENvbnN0cnVjdCh0eXBlKSAmJiAoZmliZXJUYWcgPSAxKTtcbiAgZWxzZSBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIGZpYmVyVGFnID0gNTtcbiAgZWxzZVxuICAgIGE6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQocGVuZGluZ1Byb3BzLmNoaWxkcmVuLCBtb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSA4O1xuICAgICAgICBtb2RlIHw9IDg7XG4gICAgICAgIDAgIT09IChtb2RlICYgMSkgJiYgKG1vZGUgfD0gMTYpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAodHlwZSA9IGNyZWF0ZUZpYmVyKDEyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IDIpKSxcbiAgICAgICAgICAodHlwZS5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEUpLFxuICAgICAgICAgICh0eXBlLmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAodHlwZSA9IGNyZWF0ZUZpYmVyKDEzLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkpLFxuICAgICAgICAgICh0eXBlLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRSksXG4gICAgICAgICAgKHR5cGUubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgdHlwZVxuICAgICAgICApO1xuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHR5cGUgPSBjcmVhdGVGaWJlcigxOSwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAodHlwZS5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSksXG4gICAgICAgICAgKHR5cGUubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgdHlwZVxuICAgICAgICApO1xuICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmIG51bGwgIT09IHR5cGUpXG4gICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgIGZpYmVyVGFnID0gMTA7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgZmliZXJUYWcgPSA5O1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBmaWJlclRhZyA9IDExO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGZpYmVyVGFnID0gMTQ7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgZmliZXJUYWcgPSAxNjtcbiAgICAgICAgICAgICAgb3duZXIgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6IFwiICtcbiAgICAgICAgICAgICgobnVsbCA9PSB0eXBlID8gdHlwZSA6IHR5cGVvZiB0eXBlKSArIFwiLlwiKVxuICAgICAgICApO1xuICAgIH1cbiAga2V5ID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAga2V5LmVsZW1lbnRUeXBlID0gdHlwZTtcbiAga2V5LnR5cGUgPSBvd25lcjtcbiAga2V5LmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBrZXk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICBlbGVtZW50cyA9IGNyZWF0ZUZpYmVyKDcsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICBlbGVtZW50cy5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZWxlbWVudHM7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHBlbmRpbmdQcm9wcyA9IGNyZWF0ZUZpYmVyKDIyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIHBlbmRpbmdQcm9wcy5lbGVtZW50VHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICBwZW5kaW5nUHJvcHMubGFuZXMgPSBsYW5lcztcbiAgdmFyIHByaW1hcnlDaGlsZEluc3RhbmNlID0ge1xuICAgIF92aXNpYmlsaXR5OiAxLFxuICAgIF9wZW5kaW5nVmlzaWJpbGl0eTogMSxcbiAgICBfcGVuZGluZ01hcmtlcnM6IG51bGwsXG4gICAgX3JldHJ5Q2FjaGU6IG51bGwsXG4gICAgX3RyYW5zaXRpb25zOiBudWxsLFxuICAgIF9jdXJyZW50OiBudWxsLFxuICAgIGRldGFjaDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGZpYmVyID0gcHJpbWFyeUNoaWxkSW5zdGFuY2UuX2N1cnJlbnQ7XG4gICAgICBpZiAobnVsbCA9PT0gZmliZXIpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyBPZmZzY3JlZW4uZGV0YWNoIGJlZm9yZSBpbnN0YW5jZSBoYW5kbGUgaGFzIGJlZW4gc2V0LlwiXG4gICAgICAgICk7XG4gICAgICBpZiAoMCA9PT0gKHByaW1hcnlDaGlsZEluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIDIpKSB7XG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICgocHJpbWFyeUNoaWxkSW5zdGFuY2UuX3BlbmRpbmdWaXNpYmlsaXR5IHw9IDIpLFxuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMikpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXR0YWNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZmliZXIgPSBwcmltYXJ5Q2hpbGRJbnN0YW5jZS5fY3VycmVudDtcbiAgICAgIGlmIChudWxsID09PSBmaWJlcilcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJDYWxsaW5nIE9mZnNjcmVlbi5kZXRhY2ggYmVmb3JlIGluc3RhbmNlIGhhbmRsZSBoYXMgYmVlbiBzZXQuXCJcbiAgICAgICAgKTtcbiAgICAgIGlmICgwICE9PSAocHJpbWFyeUNoaWxkSW5zdGFuY2UuX3BlbmRpbmdWaXNpYmlsaXR5ICYgMikpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgICBudWxsICE9PSByb290ICYmXG4gICAgICAgICAgKChwcmltYXJ5Q2hpbGRJbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJj0gLTMpLFxuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcGVuZGluZ1Byb3BzLnN0YXRlTm9kZSA9IHByaW1hcnlDaGlsZEluc3RhbmNlO1xuICByZXR1cm4gcGVuZGluZ1Byb3BzO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICBjb250ZW50ID0gY3JlYXRlRmliZXIoNiwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGNvbnRlbnQubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICBtb2RlID0gY3JlYXRlRmliZXIoXG4gICAgNCxcbiAgICBudWxsICE9PSBwb3J0YWwuY2hpbGRyZW4gPyBwb3J0YWwuY2hpbGRyZW4gOiBbXSxcbiAgICBwb3J0YWwua2V5LFxuICAgIG1vZGVcbiAgKTtcbiAgbW9kZS5sYW5lcyA9IGxhbmVzO1xuICBtb2RlLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgaW1wbGVtZW50YXRpb246IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICB9O1xuICByZXR1cm4gbW9kZTtcbn1cbmZ1bmN0aW9uIEZpYmVyUm9vdE5vZGUoXG4gIGNvbnRhaW5lckluZm8sXG4gIHRhZyxcbiAgaHlkcmF0ZSxcbiAgaWRlbnRpZmllclByZWZpeCxcbiAgb25SZWNvdmVyYWJsZUVycm9yLFxuICBmb3JtU3RhdGVcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5maW5pc2hlZFdvcmsgPVxuICAgIHRoaXMucGluZ0NhY2hlID1cbiAgICB0aGlzLmN1cnJlbnQgPVxuICAgIHRoaXMucGVuZGluZ0NoaWxkcmVuID1cbiAgICAgIG51bGw7XG4gIHRoaXMudGltZW91dEhhbmRsZSA9IC0xO1xuICB0aGlzLmNhbGxiYWNrTm9kZSA9XG4gICAgdGhpcy5uZXh0ID1cbiAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID1cbiAgICB0aGlzLmNvbnRleHQgPVxuICAgIHRoaXMuY2FuY2VsUGVuZGluZ0NvbW1pdCA9XG4gICAgICBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSAwO1xuICB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IGNyZWF0ZUxhbmVNYXAoLTEpO1xuICB0aGlzLmVudGFuZ2xlZExhbmVzID1cbiAgICB0aGlzLnNoZWxsU3VzcGVuZENvdW50ZXIgPVxuICAgIHRoaXMuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgPVxuICAgIHRoaXMuZmluaXNoZWRMYW5lcyA9XG4gICAgdGhpcy5leHBpcmVkTGFuZXMgPVxuICAgIHRoaXMucGluZ2VkTGFuZXMgPVxuICAgIHRoaXMuc3VzcGVuZGVkTGFuZXMgPVxuICAgIHRoaXMucGVuZGluZ0xhbmVzID1cbiAgICAgIDA7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoMCk7XG4gIHRoaXMuaGlkZGVuVXBkYXRlcyA9IGNyZWF0ZUxhbmVNYXAobnVsbCk7XG4gIHRoaXMuaWRlbnRpZmllclByZWZpeCA9IGlkZW50aWZpZXJQcmVmaXg7XG4gIHRoaXMub25SZWNvdmVyYWJsZUVycm9yID0gb25SZWNvdmVyYWJsZUVycm9yO1xuICB0aGlzLmZvcm1TdGF0ZSA9IGZvcm1TdGF0ZTtcbiAgdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnMgPSBuZXcgTWFwKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVySW5mbywgaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9XG4gICAgMyA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICBrZXk6IG51bGwgPT0ga2V5ID8gbnVsbCA6IFwiXCIgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlKGNvbXBvbmVudCkge1xuICB2YXIgZmliZXIgPSBjb21wb25lbnQuX3JlYWN0SW50ZXJuYWxzO1xuICBpZiAodm9pZCAwID09PSBmaWJlcikge1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb21wb25lbnQucmVuZGVyKVxuICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgIGNvbXBvbmVudCA9IE9iamVjdC5rZXlzKGNvbXBvbmVudCkuam9pbihcIixcIik7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIkFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIGEgUmVhY3RDb21wb25lbnQuIEtleXM6IFwiICsgY29tcG9uZW50XG4gICAgKTtcbiAgfVxuICBjb21wb25lbnQgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG4gIHJldHVybiBudWxsID09PSBjb21wb25lbnQgPyBudWxsIDogZ2V0UHVibGljSW5zdGFuY2UoY29tcG9uZW50LnN0YXRlTm9kZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKSB7XG4gIHZhciBjdXJyZW50ID0gY29udGFpbmVyLmN1cnJlbnQsXG4gICAgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQpO1xuICBhOiBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgcGFyZW50Q29tcG9uZW50ID0gcGFyZW50Q29tcG9uZW50Ll9yZWFjdEludGVybmFscztcbiAgICBiOiB7XG4gICAgICBpZiAoXG4gICAgICAgIGdldE5lYXJlc3RNb3VudGVkRmliZXIocGFyZW50Q29tcG9uZW50KSAhPT0gcGFyZW50Q29tcG9uZW50IHx8XG4gICAgICAgIDEgIT09IHBhcmVudENvbXBvbmVudC50YWdcbiAgICAgIClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gcGFyZW50Q29tcG9uZW50O1xuICAgICAgZG8ge1xuICAgICAgICBzd2l0Y2ggKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC50YWcpIHtcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuc3RhdGVOb2RlLmNvbnRleHQ7XG4gICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQudHlwZSkpIHtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgICAuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7XG4gICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnJldHVybjtcbiAgICAgIH0gd2hpbGUgKG51bGwgIT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCk7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJGb3VuZCB1bmV4cGVjdGVkIGRldGFjaGVkIHN1YnRyZWUgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoMSA9PT0gcGFyZW50Q29tcG9uZW50LnRhZykge1xuICAgICAgdmFyIENvbXBvbmVudCA9IHBhcmVudENvbXBvbmVudC50eXBlO1xuICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgcGFyZW50Q29tcG9uZW50ID0gcHJvY2Vzc0NoaWxkQ29udGV4dChcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICApO1xuICAgICAgICBicmVhayBhO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRDb21wb25lbnQgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gIH0gZWxzZSBwYXJlbnRDb21wb25lbnQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIG51bGwgPT09IGNvbnRhaW5lci5jb250ZXh0XG4gICAgPyAoY29udGFpbmVyLmNvbnRleHQgPSBwYXJlbnRDb21wb25lbnQpXG4gICAgOiAoY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gcGFyZW50Q29tcG9uZW50KTtcbiAgY29udGFpbmVyID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICBjb250YWluZXIucGF5bG9hZCA9IHsgZWxlbWVudDogZWxlbWVudCB9O1xuICBjYWxsYmFjayA9IHZvaWQgMCA9PT0gY2FsbGJhY2sgPyBudWxsIDogY2FsbGJhY2s7XG4gIG51bGwgIT09IGNhbGxiYWNrICYmIChjb250YWluZXIuY2FsbGJhY2sgPSBjYWxsYmFjayk7XG4gIGVsZW1lbnQgPSBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQsIGNvbnRhaW5lciwgbGFuZSk7XG4gIG51bGwgIT09IGVsZW1lbnQgJiZcbiAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGVsZW1lbnQsIGN1cnJlbnQsIGxhbmUpLFxuICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMoZWxlbWVudCwgY3VycmVudCwgbGFuZSkpO1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UoKSB7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmluZE5vZGVIYW5kbGUoY29tcG9uZW50T3JIYW5kbGUpIHtcbiAgaWYgKG51bGwgPT0gY29tcG9uZW50T3JIYW5kbGUpIHJldHVybiBudWxsO1xuICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIGNvbXBvbmVudE9ySGFuZGxlKSByZXR1cm4gY29tcG9uZW50T3JIYW5kbGU7XG4gIGlmIChjb21wb25lbnRPckhhbmRsZS5fbmF0aXZlVGFnKSByZXR1cm4gY29tcG9uZW50T3JIYW5kbGUuX25hdGl2ZVRhZztcbiAgaWYgKFxuICAgIG51bGwgIT0gY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsICYmXG4gICAgbnVsbCAhPSBjb21wb25lbnRPckhhbmRsZS5jYW5vbmljYWwubmF0aXZlVGFnXG4gIClcbiAgICByZXR1cm4gY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsLm5hdGl2ZVRhZztcbiAgdmFyIG5hdGl2ZVRhZyA9XG4gICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZShcbiAgICAgIGNvbXBvbmVudE9ySGFuZGxlXG4gICAgKTtcbiAgaWYgKG5hdGl2ZVRhZykgcmV0dXJuIG5hdGl2ZVRhZztcbiAgY29tcG9uZW50T3JIYW5kbGUgPSBmaW5kSG9zdEluc3RhbmNlKGNvbXBvbmVudE9ySGFuZGxlKTtcbiAgcmV0dXJuIG51bGwgPT0gY29tcG9uZW50T3JIYW5kbGVcbiAgICA/IGNvbXBvbmVudE9ySGFuZGxlXG4gICAgOiBudWxsICE9IGNvbXBvbmVudE9ySGFuZGxlLl9uYXRpdmVUYWdcbiAgICA/IGNvbXBvbmVudE9ySGFuZGxlLl9uYXRpdmVUYWdcbiAgICA6IFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5nZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UoXG4gICAgICAgIGNvbXBvbmVudE9ySGFuZGxlXG4gICAgICApO1xufVxuZnVuY3Rpb24gZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlKCkge1xuICB0aHJvdyBFcnJvcihcImdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZSgpIGlzIG5vdCBhdmFpbGFibGUgaW4gcHJvZHVjdGlvblwiKTtcbn1cbmZ1bmN0aW9uIG9uUmVjb3ZlcmFibGVFcnJvcihlcnJvcikge1xuICBjb25zb2xlLmVycm9yKGVycm9yKTtcbn1cbmJhdGNoZWRVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIChleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQpLFxuICAgICAgMCA9PT0gZXhlY3V0aW9uQ29udGV4dCAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3coKSArIDUwMCksXG4gICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKCEwKSk7XG4gIH1cbn07XG52YXIgcm9vdHMgPSBuZXcgTWFwKCksXG4gIGRldlRvb2xzQ29uZmlnJGpzY29tcCRpbmxpbmVfMTA1NSA9IHtcbiAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZ2V0SW5zdGFuY2VGcm9tTm9kZSxcbiAgICBidW5kbGVUeXBlOiAwLFxuICAgIHZlcnNpb246IFwiMTguMy4wLWNhbmFyeS0wM2Q2ZjdjZjAtMjAyNDAyMDlcIixcbiAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBcInJlYWN0LW5hdGl2ZS1yZW5kZXJlclwiLFxuICAgIHJlbmRlcmVyQ29uZmlnOiB7XG4gICAgICBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2U6IGdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZSxcbiAgICAgIGdldEluc3BlY3RvckRhdGFGb3JWaWV3VGFnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdUYWcoKSBpcyBub3QgYXZhaWxhYmxlIGluIHByb2R1Y3Rpb25cIlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcImdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludCgpIGlzIG5vdCBhdmFpbGFibGUgaW4gcHJvZHVjdGlvbi5cIlxuICAgICAgICApO1xuICAgICAgfS5iaW5kKG51bGwsIGZpbmROb2RlSGFuZGxlKVxuICAgIH1cbiAgfTtcbnZhciBpbnRlcm5hbHMkanNjb21wJGlubGluZV8xMjgwID0ge1xuICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZyRqc2NvbXAkaW5saW5lXzEwNTUuYnVuZGxlVHlwZSxcbiAgdmVyc2lvbjogZGV2VG9vbHNDb25maWckanNjb21wJGlubGluZV8xMDU1LnZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6IGRldlRvb2xzQ29uZmlnJGpzY29tcCRpbmxpbmVfMTA1NS5yZW5kZXJlclBhY2thZ2VOYW1lLFxuICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWckanNjb21wJGlubGluZV8xMDU1LnJlbmRlcmVyQ29uZmlnLFxuICBvdmVycmlkZUhvb2tTdGF0ZTogbnVsbCxcbiAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOiBudWxsLFxuICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6IG51bGwsXG4gIG92ZXJyaWRlUHJvcHM6IG51bGwsXG4gIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOiBudWxsLFxuICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDogbnVsbCxcbiAgc2V0RXJyb3JIYW5kbGVyOiBudWxsLFxuICBzZXRTdXNwZW5zZUhhbmRsZXI6IG51bGwsXG4gIHNjaGVkdWxlVXBkYXRlOiBudWxsLFxuICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIGZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuICAgIHJldHVybiBudWxsID09PSBmaWJlciA/IG51bGwgOiBmaWJlci5zdGF0ZU5vZGU7XG4gIH0sXG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOlxuICAgIGRldlRvb2xzQ29uZmlnJGpzY29tcCRpbmxpbmVfMTA1NS5maW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fFxuICAgIGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UsXG4gIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDogbnVsbCxcbiAgc2NoZWR1bGVSZWZyZXNoOiBudWxsLFxuICBzY2hlZHVsZVJvb3Q6IG51bGwsXG4gIHNldFJlZnJlc2hIYW5kbGVyOiBudWxsLFxuICBnZXRDdXJyZW50RmliZXI6IG51bGwsXG4gIHJlY29uY2lsZXJWZXJzaW9uOiBcIjE4LjMuMC1jYW5hcnktMDNkNmY3Y2YwLTIwMjQwMjA5XCJcbn07XG5pZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykge1xuICB2YXIgaG9vayRqc2NvbXAkaW5saW5lXzEyODEgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gIGlmIChcbiAgICAhaG9vayRqc2NvbXAkaW5saW5lXzEyODEuaXNEaXNhYmxlZCAmJlxuICAgIGhvb2skanNjb21wJGlubGluZV8xMjgxLnN1cHBvcnRzRmliZXJcbiAgKVxuICAgIHRyeSB7XG4gICAgICAocmVuZGVyZXJJRCA9IGhvb2skanNjb21wJGlubGluZV8xMjgxLmluamVjdChcbiAgICAgICAgaW50ZXJuYWxzJGpzY29tcCRpbmxpbmVfMTI4MFxuICAgICAgKSksXG4gICAgICAgIChpbmplY3RlZEhvb2sgPSBob29rJGpzY29tcCRpbmxpbmVfMTI4MSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxufVxuZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIGNvbnRhaW5lclRhZykge1xuICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoXG4gICAgY2hpbGRyZW4sXG4gICAgY29udGFpbmVyVGFnLFxuICAgIG51bGwsXG4gICAgMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiBudWxsXG4gICk7XG59O1xuZXhwb3J0cy5kaXNwYXRjaENvbW1hbmQgPSBmdW5jdGlvbiAoaGFuZGxlLCBjb21tYW5kLCBhcmdzKSB7XG4gIHZhciBuYXRpdmVUYWcgPVxuICAgIG51bGwgIT0gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgID8gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgIDogUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuICBudWxsICE9IG5hdGl2ZVRhZyAmJlxuICAgICgoaGFuZGxlID0gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaGFuZGxlKSksXG4gICAgbnVsbCAhPSBoYW5kbGVcbiAgICAgID8gbmF0aXZlRmFicmljVUlNYW5hZ2VyLmRpc3BhdGNoQ29tbWFuZChoYW5kbGUsIGNvbW1hbmQsIGFyZ3MpXG4gICAgICA6IFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5VSU1hbmFnZXIuZGlzcGF0Y2hWaWV3TWFuYWdlckNvbW1hbmQoXG4gICAgICAgICAgbmF0aXZlVGFnLFxuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgYXJnc1xuICAgICAgICApKTtcbn07XG5leHBvcnRzLmZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRCA9IGZ1bmN0aW9uIChjb21wb25lbnRPckhhbmRsZSkge1xuICByZXR1cm4gbnVsbCA9PSBjb21wb25lbnRPckhhbmRsZVxuICAgID8gbnVsbFxuICAgIDogY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsICYmIGNvbXBvbmVudE9ySGFuZGxlLmNhbm9uaWNhbC5wdWJsaWNJbnN0YW5jZVxuICAgID8gY29tcG9uZW50T3JIYW5kbGUuY2Fub25pY2FsLnB1YmxpY0luc3RhbmNlXG4gICAgOiBjb21wb25lbnRPckhhbmRsZS5fbmF0aXZlVGFnXG4gICAgPyBjb21wb25lbnRPckhhbmRsZVxuICAgIDogZmluZEhvc3RJbnN0YW5jZShjb21wb25lbnRPckhhbmRsZSk7XG59O1xuZXhwb3J0cy5maW5kTm9kZUhhbmRsZSA9IGZpbmROb2RlSGFuZGxlO1xuZXhwb3J0cy5nZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UgPSBnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2U7XG5leHBvcnRzLmdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSA9IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHJldHVybiAoXG4gICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSAmJlxuICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlICYmXG4gICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGUubm9kZVxuICApO1xufTtcbmV4cG9ydHMuZ2V0UHVibGljSW5zdGFuY2VGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSA9IGZ1bmN0aW9uIChcbiAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuKSB7XG4gIHZhciBpbnN0YW5jZSA9IGludGVybmFsSW5zdGFuY2VIYW5kbGUuc3RhdGVOb2RlO1xuICByZXR1cm4gbnVsbCA9PSBpbnN0YW5jZVxuICAgID8gbnVsbFxuICAgIDogNiA9PT0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS50YWdcbiAgICA/IChudWxsID09IGluc3RhbmNlLnB1YmxpY0luc3RhbmNlICYmXG4gICAgICAgIChpbnN0YW5jZS5wdWJsaWNJbnN0YW5jZSA9XG4gICAgICAgICAgUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmNyZWF0ZVB1YmxpY1RleHRJbnN0YW5jZShcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGVcbiAgICAgICAgICApKSxcbiAgICAgIGluc3RhbmNlLnB1YmxpY0luc3RhbmNlKVxuICAgIDogZ2V0UHVibGljSW5zdGFuY2UoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5zdGF0ZU5vZGUpO1xufTtcbmV4cG9ydHMuaXNDaGlsZFB1YmxpY0luc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBFcnJvcihcImlzQ2hpbGRQdWJsaWNJbnN0YW5jZSgpIGlzIG5vdCBhdmFpbGFibGUgaW4gcHJvZHVjdGlvbi5cIik7XG59O1xuZXhwb3J0cy5yZW5kZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29udGFpbmVyVGFnLCBjYWxsYmFjaywgY29uY3VycmVudFJvb3QpIHtcbiAgdmFyIHJvb3QgPSByb290cy5nZXQoY29udGFpbmVyVGFnKTtcbiAgcm9vdCB8fFxuICAgICgocm9vdCA9IGNvbmN1cnJlbnRSb290ID8gMSA6IDApLFxuICAgIChjb25jdXJyZW50Um9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKFxuICAgICAgY29udGFpbmVyVGFnLFxuICAgICAgcm9vdCxcbiAgICAgICExLFxuICAgICAgXCJcIixcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgIG51bGxcbiAgICApKSxcbiAgICAocm9vdCA9IGNyZWF0ZUZpYmVyKDMsIG51bGwsIG51bGwsIDEgPT09IHJvb3QgPyAxIDogMCkpLFxuICAgIChjb25jdXJyZW50Um9vdC5jdXJyZW50ID0gcm9vdCksXG4gICAgKHJvb3Quc3RhdGVOb2RlID0gY29uY3VycmVudFJvb3QpLFxuICAgIChyb290Lm1lbW9pemVkU3RhdGUgPSB7IGVsZW1lbnQ6IG51bGwsIGlzRGVoeWRyYXRlZDogITEsIGNhY2hlOiBudWxsIH0pLFxuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZShyb290KSxcbiAgICAocm9vdCA9IGNvbmN1cnJlbnRSb290KSxcbiAgICByb290cy5zZXQoY29udGFpbmVyVGFnLCByb290KSk7XG4gIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBjYWxsYmFjayk7XG4gIGE6IGlmICgoKGVsZW1lbnQgPSByb290LmN1cnJlbnQpLCBlbGVtZW50LmNoaWxkKSlcbiAgICBzd2l0Y2ggKGVsZW1lbnQuY2hpbGQudGFnKSB7XG4gICAgICBjYXNlIDI3OlxuICAgICAgY2FzZSA1OlxuICAgICAgICBlbGVtZW50ID0gZ2V0UHVibGljSW5zdGFuY2UoZWxlbWVudC5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICBicmVhayBhO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuY2hpbGQuc3RhdGVOb2RlO1xuICAgIH1cbiAgZWxzZSBlbGVtZW50ID0gbnVsbDtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuZXhwb3J0cy5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50ID0gZnVuY3Rpb24gKGhhbmRsZSwgZXZlbnRUeXBlKSB7XG4gIHZhciBuYXRpdmVUYWcgPVxuICAgIG51bGwgIT0gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgID8gaGFuZGxlLl9uYXRpdmVUYWdcbiAgICAgIDogUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5hdGl2ZVRhZ0Zyb21QdWJsaWNJbnN0YW5jZShoYW5kbGUpO1xuICBudWxsICE9IG5hdGl2ZVRhZyAmJlxuICAgICgoaGFuZGxlID0gUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLmdldE5vZGVGcm9tUHVibGljSW5zdGFuY2UoaGFuZGxlKSksXG4gICAgbnVsbCAhPSBoYW5kbGVcbiAgICAgID8gbmF0aXZlRmFicmljVUlNYW5hZ2VyLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoaGFuZGxlLCBldmVudFR5cGUpXG4gICAgICA6IFJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5sZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50KFxuICAgICAgICAgIG5hdGl2ZVRhZyxcbiAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgKSk7XG59O1xuZXhwb3J0cy5zdG9wU3VyZmFjZSA9IGZ1bmN0aW9uIChjb250YWluZXJUYWcpIHtcbiAgdmFyIHJvb3QgPSByb290cy5nZXQoY29udGFpbmVyVGFnKTtcbiAgcm9vdCAmJlxuICAgIHVwZGF0ZUNvbnRhaW5lcihudWxsLCByb290LCBudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgICByb290cy5kZWxldGUoY29udGFpbmVyVGFnKTtcbiAgICB9KTtcbn07XG5leHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGUgPSBmdW5jdGlvbiAoY29udGFpbmVyVGFnKSB7XG4gIHRoaXMuc3RvcFN1cmZhY2UoY29udGFpbmVyVGFnKTtcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuXG5pbXBvcnQgU3R5bGVTaGVldCwge3R5cGUgQ29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi4vVmlldy9WaWV3JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUGxhdGZvcm1BY3Rpdml0eUluZGljYXRvciA9XG4gIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCdcbiAgICA/IHJlcXVpcmUoJy4uL1Byb2dyZXNzQmFyQW5kcm9pZC9Qcm9ncmVzc0JhckFuZHJvaWQnKVxuICAgIDogcmVxdWlyZSgnLi9BY3Rpdml0eUluZGljYXRvclZpZXdOYXRpdmVDb21wb25lbnQnKS5kZWZhdWx0O1xuXG5jb25zdCBHUkFZID0gJyM5OTk5OTknO1xuXG50eXBlIEluZGljYXRvclNpemUgPSBudW1iZXIgfCAnc21hbGwnIHwgJ2xhcmdlJztcblxudHlwZSBJT1NQcm9wcyA9ICRSZWFkT25seTx7fFxuICAvKipcbiAgICBXaGV0aGVyIHRoZSBpbmRpY2F0b3Igc2hvdWxkIGhpZGUgd2hlbiBub3QgYW5pbWF0aW5nLlxuXG4gICAgQHBsYXRmb3JtIGlvc1xuICAqL1xuICBoaWRlc1doZW5TdG9wcGVkPzogP2Jvb2xlYW4sXG58fT47XG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcbiAgLi4uSU9TUHJvcHMsXG5cbiAgLyoqXG4gICBcdFdoZXRoZXIgdG8gc2hvdyB0aGUgaW5kaWNhdG9yIChgdHJ1ZWApIG9yIGhpZGUgaXQgKGBmYWxzZWApLlxuICAgKi9cbiAgYW5pbWF0aW5nPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAgVGhlIGZvcmVncm91bmQgY29sb3Igb2YgdGhlIHNwaW5uZXIuXG5cbiAgICBAZGVmYXVsdCB7QHBsYXRmb3JtIGFuZHJvaWR9IGBudWxsYCAoc3lzdGVtIGFjY2VudCBkZWZhdWx0IGNvbG9yKVxuICAgIEBkZWZhdWx0IHtAcGxhdGZvcm0gaW9zfSAnIzk5OTk5OSdcbiAgKi9cbiAgY29sb3I/OiA/Q29sb3JWYWx1ZSxcblxuICAvKipcbiAgICBTaXplIG9mIHRoZSBpbmRpY2F0b3IuXG5cbiAgICBAdHlwZSBlbnVtKGAnc21hbGwnYCwgYCdsYXJnZSdgKVxuICAgIEB0eXBlIHtAcGxhdGZvcm0gYW5kcm9pZH0gbnVtYmVyXG4gICovXG4gIHNpemU/OiA/SW5kaWNhdG9yU2l6ZSxcbnx9PjtcblxuY29uc3QgQWN0aXZpdHlJbmRpY2F0b3IgPSAoXG4gIHtcbiAgICBhbmltYXRpbmcgPSB0cnVlLFxuICAgIGNvbG9yID0gUGxhdGZvcm0uT1MgPT09ICdpb3MnID8gR1JBWSA6IG51bGwsXG4gICAgaGlkZXNXaGVuU3RvcHBlZCA9IHRydWUsXG4gICAgb25MYXlvdXQsXG4gICAgc2l6ZSA9ICdzbWFsbCcsXG4gICAgc3R5bGUsXG4gICAgLi4ucmVzdFByb3BzXG4gIH06IFByb3BzLFxuICBmb3J3YXJkZWRSZWY/OiBhbnksXG4pID0+IHtcbiAgbGV0IHNpemVTdHlsZTtcbiAgbGV0IHNpemVQcm9wO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgIHNpemVTdHlsZSA9IHN0eWxlcy5zaXplU21hbGw7XG4gICAgICBzaXplUHJvcCA9ICdzbWFsbCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsYXJnZSc6XG4gICAgICBzaXplU3R5bGUgPSBzdHlsZXMuc2l6ZUxhcmdlO1xuICAgICAgc2l6ZVByb3AgPSAnbGFyZ2UnO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHNpemVTdHlsZSA9IHtoZWlnaHQ6IHNpemUsIHdpZHRoOiBzaXplfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgbmF0aXZlUHJvcHMgPSB7XG4gICAgYW5pbWF0aW5nLFxuICAgIGNvbG9yLFxuICAgIGhpZGVzV2hlblN0b3BwZWQsXG4gICAgLi4ucmVzdFByb3BzLFxuICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgIHN0eWxlOiBzaXplU3R5bGUsXG4gICAgc2l6ZTogc2l6ZVByb3AsXG4gIH07XG5cbiAgY29uc3QgYW5kcm9pZFByb3BzID0ge1xuICAgIHN0eWxlQXR0cjogJ05vcm1hbCcsXG4gICAgaW5kZXRlcm1pbmF0ZTogdHJ1ZSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3XG4gICAgICBvbkxheW91dD17b25MYXlvdXR9XG4gICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKHN0eWxlcy5jb250YWluZXIsIHN0eWxlKX0+XG4gICAgICB7UGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJyA/IChcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIEZsb3cgZG9lc24ndCBrbm93IHdoZW4gdGhpcyBpcyB0aGUgYW5kcm9pZCBjb21wb25lbnRcbiAgICAgICAgPFBsYXRmb3JtQWN0aXZpdHlJbmRpY2F0b3Igey4uLm5hdGl2ZVByb3BzfSB7Li4uYW5kcm9pZFByb3BzfSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgLyogJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddICg+PTAuMTA2LjAgc2l0ZT1yZWFjdF9uYXRpdmVfYW5kcm9pZF9mYikgVGhpcyBjb21tZW50XG4gICAgICAgICAqIHN1cHByZXNzZXMgYW4gZXJyb3IgZm91bmQgd2hlbiBGbG93IHYwLjEwNiB3YXMgZGVwbG95ZWQuIFRvIHNlZSB0aGVcbiAgICAgICAgICogZXJyb3IsIGRlbGV0ZSB0aGlzIGNvbW1lbnQgYW5kIHJ1biBGbG93LiAqL1xuICAgICAgICA8UGxhdGZvcm1BY3Rpdml0eUluZGljYXRvciB7Li4ubmF0aXZlUHJvcHN9IC8+XG4gICAgICApfVxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbi8qKlxuICBEaXNwbGF5cyBhIGNpcmN1bGFyIGxvYWRpbmcgaW5kaWNhdG9yLlxuXG4gIGBgYFNuYWNrUGxheWVyIG5hbWU9QWN0aXZpdHlJbmRpY2F0b3IlMjBFeGFtcGxlXG4gIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG4gIGltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFN0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbiAgY29uc3QgQXBwID0gKCkgPT4gKFxuICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhvcml6b250YWxdfT5cbiAgICAgIDxBY3Rpdml0eUluZGljYXRvciAvPlxuICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIC8+XG4gICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc2l6ZT1cInNtYWxsXCIgY29sb3I9XCIjMDAwMGZmXCIgLz5cbiAgICAgIDxBY3Rpdml0eUluZGljYXRvciBzaXplPVwibGFyZ2VcIiBjb2xvcj1cIiMwMGZmMDBcIiAvPlxuICAgIDwvVmlldz5cbiAgKTtcblxuICBjb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gICAgY29udGFpbmVyOiB7XG4gICAgICBmbGV4OiAxLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIH0sXG4gICAgaG9yaXpvbnRhbDoge1xuICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gICAgICBwYWRkaW5nOiAxMCxcbiAgICB9LFxuICB9KTtcblxuICBleHBvcnQgZGVmYXVsdCBBcHA7XG5gYGBcbiovXG5cbmNvbnN0IEFjdGl2aXR5SW5kaWNhdG9yV2l0aFJlZjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG4gIFByb3BzLFxuICBIb3N0Q29tcG9uZW50PG1peGVkPixcbj4gPSBSZWFjdC5mb3J3YXJkUmVmKEFjdGl2aXR5SW5kaWNhdG9yKTtcbkFjdGl2aXR5SW5kaWNhdG9yV2l0aFJlZi5kaXNwbGF5TmFtZSA9ICdBY3Rpdml0eUluZGljYXRvcic7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICBzaXplU21hbGw6IHtcbiAgICB3aWR0aDogMjAsXG4gICAgaGVpZ2h0OiAyMCxcbiAgfSxcbiAgc2l6ZUxhcmdlOiB7XG4gICAgd2lkdGg6IDM2LFxuICAgIGhlaWdodDogMzYsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQWN0aXZpdHlJbmRpY2F0b3JXaXRoUmVmO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGVvZiBVbmltcGxlbWVudGVkVmlld1R5cGUgZnJvbSAnLi4vVW5pbXBsZW1lbnRlZFZpZXdzL1VuaW1wbGVtZW50ZWRWaWV3JztcbmltcG9ydCB0eXBlb2YgUHJvZ3Jlc3NCYXJBbmRyb2lkTmF0aXZlQ29tcG9uZW50VHlwZSBmcm9tICcuL1Byb2dyZXNzQmFyQW5kcm9pZE5hdGl2ZUNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIHtQcm9ncmVzc0JhckFuZHJvaWRQcm9wc30gZnJvbSAnLi9Qcm9ncmVzc0JhckFuZHJvaWQuYW5kcm9pZCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKHJlcXVpcmUoJy4uL1VuaW1wbGVtZW50ZWRWaWV3cy9VbmltcGxlbWVudGVkVmlldycpOlxuICB8IFVuaW1wbGVtZW50ZWRWaWV3VHlwZVxuICB8IFByb2dyZXNzQmFyQW5kcm9pZE5hdGl2ZUNvbXBvbmVudFR5cGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvQWN0aXZpdHlJbmRpY2F0b3JWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBBY3Rpdml0eUluZGljYXRvclZpZXdOYXRpdmVDb21wb25lbnQgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9BY3Rpdml0eUluZGljYXRvclZpZXdOYXRpdmVDb21wb25lbnQnO1xuZXhwb3J0IGRlZmF1bHQgQWN0aXZpdHlJbmRpY2F0b3JWaWV3TmF0aXZlQ29tcG9uZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge1dpdGhEZWZhdWx0fSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHlwZXMvQ29kZWdlblR5cGVzJztcblxuaW1wb3J0IGNvZGVnZW5OYXRpdmVDb21wb25lbnQgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1V0aWxpdGllcy9jb2RlZ2VuTmF0aXZlQ29tcG9uZW50JztcblxudHlwZSBOYXRpdmVQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi5WaWV3UHJvcHMsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGluZGljYXRvciBzaG91bGQgaGlkZSB3aGVuIG5vdCBhbmltYXRpbmcgKHRydWUgYnkgZGVmYXVsdCkuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjdGl2aXR5aW5kaWNhdG9yI2hpZGVzd2hlbnN0b3BwZWQtaW9zXG4gICAqL1xuICBoaWRlc1doZW5TdG9wcGVkPzogV2l0aERlZmF1bHQ8Ym9vbGVhbiwgdHJ1ZT4sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgaW5kaWNhdG9yICh0cnVlLCB0aGUgZGVmYXVsdCkgb3IgaGlkZSBpdCAoZmFsc2UpLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY3Rpdml0eWluZGljYXRvciNhbmltYXRpbmdcbiAgICovXG4gIGFuaW1hdGluZz86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIHRydWU+LFxuXG4gIC8qKlxuICAgKiBUaGUgZm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgc3Bpbm5lciAoZGVmYXVsdCBpcyBncmF5KS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWN0aXZpdHlpbmRpY2F0b3IjY29sb3JcbiAgICovXG4gIGNvbG9yPzogP0NvbG9yVmFsdWUsXG5cbiAgLyoqXG4gICAqIFNpemUgb2YgdGhlIGluZGljYXRvciAoZGVmYXVsdCBpcyAnc21hbGwnKS5cbiAgICogUGFzc2luZyBhIG51bWJlciB0byB0aGUgc2l6ZSBwcm9wIGlzIG9ubHkgc3VwcG9ydGVkIG9uIEFuZHJvaWQuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjdGl2aXR5aW5kaWNhdG9yI3NpemVcbiAgICovXG4gIHNpemU/OiBXaXRoRGVmYXVsdDwnc21hbGwnIHwgJ2xhcmdlJywgJ3NtYWxsJz4sXG58fT47XG5cbmV4cG9ydCBkZWZhdWx0IChjb2RlZ2VuTmF0aXZlQ29tcG9uZW50PE5hdGl2ZVByb3BzPignQWN0aXZpdHlJbmRpY2F0b3JWaWV3Jywge1xuICBwYXBlckNvbXBvbmVudE5hbWU6ICdSQ1RBY3Rpdml0eUluZGljYXRvclZpZXcnLFxufSk6IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1RleHRTdHlsZVByb3AsIFZpZXdTdHlsZVByb3B9IGZyb20gJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAnLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBBY2Nlc3NpYmlsaXR5QWN0aW9uRXZlbnQsXG4gIEFjY2Vzc2liaWxpdHlBY3Rpb25JbmZvLFxuICBBY2Nlc3NpYmlsaXR5U3RhdGUsXG59IGZyb20gJy4vVmlldy9WaWV3QWNjZXNzaWJpbGl0eSc7XG5cbmltcG9ydCBTdHlsZVNoZWV0LCB7dHlwZSBDb2xvclZhbHVlfSBmcm9tICcuLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vVGV4dC9UZXh0JztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrIGZyb20gJy4vVG91Y2hhYmxlL1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrJztcbmltcG9ydCBUb3VjaGFibGVPcGFjaXR5IGZyb20gJy4vVG91Y2hhYmxlL1RvdWNoYWJsZU9wYWNpdHknO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi9WaWV3L1ZpZXcnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIEJ1dHRvblByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC8qKlxuICAgIFRleHQgdG8gZGlzcGxheSBpbnNpZGUgdGhlIGJ1dHRvbi4gT24gQW5kcm9pZCB0aGUgZ2l2ZW4gdGl0bGUgd2lsbCBiZVxuICAgIGNvbnZlcnRlZCB0byB0aGUgdXBwZXJjYXNlZCBmb3JtLlxuICAgKi9cbiAgdGl0bGU6IHN0cmluZyxcblxuICAvKipcbiAgICBIYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHRhcHMgdGhlIGJ1dHRvbi4gVGhlIGZpcnN0IGZ1bmN0aW9uXG4gICAgYXJndW1lbnQgaXMgYW4gZXZlbnQgaW4gZm9ybSBvZiBbUHJlc3NFdmVudF0ocHJlc3NldmVudCkuXG4gICAqL1xuICBvblByZXNzOiAoZXZlbnQ/OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICBJZiBgdHJ1ZWAsIGRvZXNuJ3QgcGxheSBzeXN0ZW0gc291bmQgb24gdG91Y2guXG5cbiAgICBAcGxhdGZvcm0gYW5kcm9pZFxuXG4gICAgQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHRvdWNoU291bmREaXNhYmxlZD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgIENvbG9yIG9mIHRoZSB0ZXh0IChpT1MpLCBvciBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBidXR0b24gKEFuZHJvaWQpLlxuXG4gICAgQGRlZmF1bHQge0BwbGF0Zm9ybSBhbmRyb2lkfSAnIzIxOTZGMydcbiAgICBAZGVmYXVsdCB7QHBsYXRmb3JtIGlvc30gJyMwMDdBRkYnXG4gICAqL1xuICBjb2xvcj86ID9Db2xvclZhbHVlLFxuXG4gIC8qKlxuICAgIFRWIHByZWZlcnJlZCBmb2N1cy5cblxuICAgIEBwbGF0Zm9ybSB0dlxuXG4gICAgQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhhc1RWUHJlZmVycmVkRm9jdXM/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICBEZXNpZ25hdGVzIHRoZSBuZXh0IHZpZXcgdG8gcmVjZWl2ZSBmb2N1cyB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBkb3duLiBTZWVcbiAgICB0aGUgW0FuZHJvaWQgZG9jdW1lbnRhdGlvbl1bYW5kcm9pZDpuZXh0Rm9jdXNEb3duXS5cblxuICAgIFthbmRyb2lkOm5leHRGb2N1c0Rvd25dOlxuICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3ZpZXcvVmlldy5odG1sI2F0dHJfYW5kcm9pZDpuZXh0Rm9jdXNEb3duXG5cbiAgICBAcGxhdGZvcm0gYW5kcm9pZCwgdHZcbiAgICovXG4gIG5leHRGb2N1c0Rvd24/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgIERlc2lnbmF0ZXMgdGhlIG5leHQgdmlldyB0byByZWNlaXZlIGZvY3VzIHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGZvcndhcmQuXG4gICAgU2VlIHRoZSBbQW5kcm9pZCBkb2N1bWVudGF0aW9uXVthbmRyb2lkOm5leHRGb2N1c0ZvcndhcmRdLlxuXG4gICAgW2FuZHJvaWQ6bmV4dEZvY3VzRm9yd2FyZF06XG4gICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvdmlldy9WaWV3Lmh0bWwjYXR0cl9hbmRyb2lkOm5leHRGb2N1c0ZvcndhcmRcblxuICAgIEBwbGF0Zm9ybSBhbmRyb2lkLCB0dlxuICAgKi9cbiAgbmV4dEZvY3VzRm9yd2FyZD86ID9udW1iZXIsXG5cbiAgLyoqXG4gICAgRGVzaWduYXRlcyB0aGUgbmV4dCB2aWV3IHRvIHJlY2VpdmUgZm9jdXMgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgbGVmdC4gU2VlXG4gICAgdGhlIFtBbmRyb2lkIGRvY3VtZW50YXRpb25dW2FuZHJvaWQ6bmV4dEZvY3VzTGVmdF0uXG5cbiAgICBbYW5kcm9pZDpuZXh0Rm9jdXNMZWZ0XTpcbiAgICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L1ZpZXcuaHRtbCNhdHRyX2FuZHJvaWQ6bmV4dEZvY3VzTGVmdFxuXG4gICAgQHBsYXRmb3JtIGFuZHJvaWQsIHR2XG4gICAqL1xuICBuZXh0Rm9jdXNMZWZ0PzogP251bWJlcixcblxuICAvKipcbiAgICBEZXNpZ25hdGVzIHRoZSBuZXh0IHZpZXcgdG8gcmVjZWl2ZSBmb2N1cyB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyByaWdodC4gU2VlXG4gICAgdGhlIFtBbmRyb2lkIGRvY3VtZW50YXRpb25dW2FuZHJvaWQ6bmV4dEZvY3VzUmlnaHRdLlxuXG4gICAgW2FuZHJvaWQ6bmV4dEZvY3VzUmlnaHRdOlxuICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3ZpZXcvVmlldy5odG1sI2F0dHJfYW5kcm9pZDpuZXh0Rm9jdXNSaWdodFxuXG4gICAgQHBsYXRmb3JtIGFuZHJvaWQsIHR2XG4gICAqL1xuICBuZXh0Rm9jdXNSaWdodD86ID9udW1iZXIsXG5cbiAgLyoqXG4gICAgRGVzaWduYXRlcyB0aGUgbmV4dCB2aWV3IHRvIHJlY2VpdmUgZm9jdXMgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgdXAuIFNlZVxuICAgIHRoZSBbQW5kcm9pZCBkb2N1bWVudGF0aW9uXVthbmRyb2lkOm5leHRGb2N1c1VwXS5cblxuICAgIFthbmRyb2lkOm5leHRGb2N1c1VwXTpcbiAgICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L1ZpZXcuaHRtbCNhdHRyX2FuZHJvaWQ6bmV4dEZvY3VzVXBcblxuICAgIEBwbGF0Zm9ybSBhbmRyb2lkLCB0dlxuICAgKi9cbiAgbmV4dEZvY3VzVXA/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgIFRleHQgdG8gZGlzcGxheSBmb3IgYmxpbmRuZXNzIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMuXG4gICAqL1xuICBhY2Nlc3NpYmlsaXR5TGFiZWw/OiA/c3RyaW5nLFxuICAvKipcbiAgICogQWxpYXMgZm9yIGFjY2Vzc2liaWxpdHlMYWJlbCAgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy92aWV3I2FjY2Vzc2liaWxpdHlsYWJlbFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2lzc3Vlcy8zNDQyNFxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnPzogP3N0cmluZyxcbiAgLyoqXG4gICAgSWYgYHRydWVgLCBkaXNhYmxlIGFsbCBpbnRlcmFjdGlvbnMgZm9yIHRoaXMgY29tcG9uZW50LlxuXG4gICAgQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAgVXNlZCB0byBsb2NhdGUgdGhpcyB2aWV3IGluIGVuZC10by1lbmQgdGVzdHMuXG4gICAqL1xuICB0ZXN0SUQ/OiA/c3RyaW5nLFxuXG4gIC8qKlxuICAgKiBBY2Nlc3NpYmlsaXR5IHByb3BzLlxuICAgKi9cbiAgYWNjZXNzaWJsZT86ID9ib29sZWFuLFxuICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz86ID8kUmVhZE9ubHlBcnJheTxBY2Nlc3NpYmlsaXR5QWN0aW9uSW5mbz4sXG4gIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj86ID8oZXZlbnQ6IEFjY2Vzc2liaWxpdHlBY3Rpb25FdmVudCkgPT4gbWl4ZWQsXG4gIGFjY2Vzc2liaWxpdHlTdGF0ZT86ID9BY2Nlc3NpYmlsaXR5U3RhdGUsXG5cbiAgLyoqXG4gICAqIGFsaWFzIGZvciBhY2Nlc3NpYmlsaXR5U3RhdGVcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWNjZXNzaWJpbGl0eSNhY2Nlc3NpYmlsaXR5c3RhdGVcbiAgICovXG4gICdhcmlhLWJ1c3knPzogP2Jvb2xlYW4sXG4gICdhcmlhLWNoZWNrZWQnPzogP2Jvb2xlYW4gfCAnbWl4ZWQnLFxuICAnYXJpYS1kaXNhYmxlZCc/OiA/Ym9vbGVhbixcbiAgJ2FyaWEtZXhwYW5kZWQnPzogP2Jvb2xlYW4sXG4gICdhcmlhLXNlbGVjdGVkJz86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBbQW5kcm9pZF0gQ29udHJvbGxpbmcgaWYgYSB2aWV3IGZpcmVzIGFjY2Vzc2liaWxpdHkgZXZlbnRzIGFuZCBpZiBpdCBpcyByZXBvcnRlZCB0byBhY2Nlc3NpYmlsaXR5IHNlcnZpY2VzLlxuICAgKi9cbiAgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eT86ID8oJ2F1dG8nIHwgJ3llcycgfCAnbm8nIHwgJ25vLWhpZGUtZGVzY2VuZGFudHMnKSxcbiAgYWNjZXNzaWJpbGl0eUhpbnQ/OiA/c3RyaW5nLFxuICBhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2U/OiA/U3RyaW5naXNoLFxufH0+O1xuXG4vKipcbiAgQSBiYXNpYyBidXR0b24gY29tcG9uZW50IHRoYXQgc2hvdWxkIHJlbmRlciBuaWNlbHkgb24gYW55IHBsYXRmb3JtLiBTdXBwb3J0cyBhXG4gIG1pbmltYWwgbGV2ZWwgb2YgY3VzdG9taXphdGlvbi5cblxuICBJZiB0aGlzIGJ1dHRvbiBkb2Vzbid0IGxvb2sgcmlnaHQgZm9yIHlvdXIgYXBwLCB5b3UgY2FuIGJ1aWxkIHlvdXIgb3duIGJ1dHRvblxuICB1c2luZyBbVG91Y2hhYmxlT3BhY2l0eV0odG91Y2hhYmxlb3BhY2l0eSkgb3JcbiAgW1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFja10odG91Y2hhYmxld2l0aG91dGZlZWRiYWNrKS4gRm9yIGluc3BpcmF0aW9uLCBsb29rIGF0XG4gIHRoZSBbc291cmNlIGNvZGUgZm9yIHRoaXMgYnV0dG9uIGNvbXBvbmVudF1bYnV0dG9uOnNvdXJjZV0uIE9yLCB0YWtlIGEgbG9vayBhdFxuICB0aGUgW3dpZGUgdmFyaWV0eSBvZiBidXR0b24gY29tcG9uZW50cyBidWlsdCBieSB0aGUgY29tbXVuaXR5XVxuICBbYnV0dG9uOmV4YW1wbGVzXS5cblxuICBbYnV0dG9uOnNvdXJjZV06XG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvYmxvYi9IRUFEL0xpYnJhcmllcy9Db21wb25lbnRzL0J1dHRvbi5qc1xuXG4gIFtidXR0b246ZXhhbXBsZXNdOlxuICBodHRwczovL2pzLmNvYWNoLz9tZW51JTVCY29sbGVjdGlvbnMlNUQ9UmVhY3QlMjBOYXRpdmUmcGFnZT0xJnF1ZXJ5PWJ1dHRvblxuXG4gIGBgYGpzeFxuICA8QnV0dG9uXG4gICAgb25QcmVzcz17b25QcmVzc0xlYXJuTW9yZX1cbiAgICB0aXRsZT1cIkxlYXJuIE1vcmVcIlxuICAgIGNvbG9yPVwiIzg0MTU4NFwiXG4gICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiTGVhcm4gbW9yZSBhYm91dCB0aGlzIHB1cnBsZSBidXR0b25cIlxuICAvPlxuICBgYGBcblxuICBgYGBTbmFja1BsYXllciBuYW1lPUJ1dHRvbiUyMEV4YW1wbGVcbiAgaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbiAgaW1wb3J0IHsgU3R5bGVTaGVldCwgQnV0dG9uLCBWaWV3LCBTYWZlQXJlYVZpZXcsIFRleHQsIEFsZXJ0IH0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuICBjb25zdCBTZXBhcmF0b3IgPSAoKSA9PiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zZXBhcmF0b3J9IC8+XG4gICk7XG5cbiAgY29uc3QgQXBwID0gKCkgPT4gKFxuICAgIDxTYWZlQXJlYVZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICAgIFRoZSB0aXRsZSBhbmQgb25QcmVzcyBoYW5kbGVyIGFyZSByZXF1aXJlZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IGFjY2Vzc2liaWxpdHlMYWJlbCB0byBoZWxwIG1ha2UgeW91ciBhcHAgdXNhYmxlIGJ5IGV2ZXJ5b25lLlxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0aXRsZT1cIlByZXNzIG1lXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBBbGVydC5hbGVydCgnU2ltcGxlIEJ1dHRvbiBwcmVzc2VkJyl9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8U2VwYXJhdG9yIC8+XG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgICAgQWRqdXN0IHRoZSBjb2xvciBpbiBhIHdheSB0aGF0IGxvb2tzIHN0YW5kYXJkIG9uIGVhY2ggcGxhdGZvcm0uIE9uICBpT1MsIHRoZSBjb2xvciBwcm9wIGNvbnRyb2xzIHRoZSBjb2xvciBvZiB0aGUgdGV4dC4gT24gQW5kcm9pZCwgdGhlIGNvbG9yIGFkanVzdHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdGl0bGU9XCJQcmVzcyBtZVwiXG4gICAgICAgICAgY29sb3I9XCIjZjE5NGZmXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBBbGVydC5hbGVydCgnQnV0dG9uIHdpdGggYWRqdXN0ZWQgY29sb3IgcHJlc3NlZCcpfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICAgIEFsbCBpbnRlcmFjdGlvbiBmb3IgdGhlIGNvbXBvbmVudCBhcmUgZGlzYWJsZWQuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHRpdGxlPVwiUHJlc3MgbWVcIlxuICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gQWxlcnQuYWxlcnQoJ0Nhbm5vdCBwcmVzcyB0aGlzIG9uZScpfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICAgIFRoaXMgbGF5b3V0IHN0cmF0ZWd5IGxldHMgdGhlIHRpdGxlIGRlZmluZSB0aGUgd2lkdGggb2YgdGhlIGJ1dHRvbi5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmZpeFRvVGV4dH0+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJMZWZ0IGJ1dHRvblwiXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBBbGVydC5hbGVydCgnTGVmdCBidXR0b24gcHJlc3NlZCcpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJSaWdodCBidXR0b25cIlxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gQWxlcnQuYWxlcnQoJ1JpZ2h0IGJ1dHRvbiBwcmVzc2VkJyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIDwvU2FmZUFyZWFWaWV3PlxuICApO1xuXG4gIGNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgICBjb250YWluZXI6IHtcbiAgICAgIGZsZXg6IDEsXG4gICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICBtYXJnaW5Ib3Jpem9udGFsOiAxNixcbiAgICB9LFxuICAgIHRpdGxlOiB7XG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgbWFyZ2luVmVydGljYWw6IDgsXG4gICAgfSxcbiAgICBmaXhUb1RleHQ6IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICB9LFxuICAgIHNlcGFyYXRvcjoge1xuICAgICAgbWFyZ2luVmVydGljYWw6IDgsXG4gICAgICBib3JkZXJCb3R0b21Db2xvcjogJyM3MzczNzMnLFxuICAgICAgYm9yZGVyQm90dG9tV2lkdGg6IFN0eWxlU2hlZXQuaGFpcmxpbmVXaWR0aCxcbiAgICB9LFxuICB9KTtcblxuICBleHBvcnQgZGVmYXVsdCBBcHA7XG4gIGBgYFxuICovXG5cbmNvbnN0IEJ1dHRvbjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8QnV0dG9uUHJvcHM+ID0gKHByb3BzOiBCdXR0b25Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgYWNjZXNzaWJpbGl0eUxhYmVsLFxuICAgIGFjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgICAnYXJpYS1idXN5JzogYXJpYUJ1c3ksXG4gICAgJ2FyaWEtY2hlY2tlZCc6IGFyaWFDaGVja2VkLFxuICAgICdhcmlhLWRpc2FibGVkJzogYXJpYURpc2FibGVkLFxuICAgICdhcmlhLWV4cGFuZGVkJzogYXJpYUV4cGFuZGVkLFxuICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICdhcmlhLXNlbGVjdGVkJzogYXJpYVNlbGVjdGVkLFxuICAgIGltcG9ydGFudEZvckFjY2Vzc2liaWxpdHksXG4gICAgY29sb3IsXG4gICAgb25QcmVzcyxcbiAgICB0b3VjaFNvdW5kRGlzYWJsZWQsXG4gICAgdGl0bGUsXG4gICAgaGFzVFZQcmVmZXJyZWRGb2N1cyxcbiAgICBuZXh0Rm9jdXNEb3duLFxuICAgIG5leHRGb2N1c0ZvcndhcmQsXG4gICAgbmV4dEZvY3VzTGVmdCxcbiAgICBuZXh0Rm9jdXNSaWdodCxcbiAgICBuZXh0Rm9jdXNVcCxcbiAgICB0ZXN0SUQsXG4gICAgYWNjZXNzaWJsZSxcbiAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucyxcbiAgICBhY2Nlc3NpYmlsaXR5SGludCxcbiAgICBhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2UsXG4gICAgb25BY2Nlc3NpYmlsaXR5QWN0aW9uLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJ1dHRvblN0eWxlczogQXJyYXk8Vmlld1N0eWxlUHJvcD4gPSBbc3R5bGVzLmJ1dHRvbl07XG4gIGNvbnN0IHRleHRTdHlsZXM6IEFycmF5PFRleHRTdHlsZVByb3A+ID0gW3N0eWxlcy50ZXh0XTtcbiAgaWYgKGNvbG9yKSB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgdGV4dFN0eWxlcy5wdXNoKHtjb2xvcjogY29sb3J9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnV0dG9uU3R5bGVzLnB1c2goe2JhY2tncm91bmRDb2xvcjogY29sb3J9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgX2FjY2Vzc2liaWxpdHlTdGF0ZSA9IHtcbiAgICBidXN5OiBhcmlhQnVzeSA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmJ1c3ksXG4gICAgY2hlY2tlZDogYXJpYUNoZWNrZWQgPz8gYWNjZXNzaWJpbGl0eVN0YXRlPy5jaGVja2VkLFxuICAgIGRpc2FibGVkOiBhcmlhRGlzYWJsZWQgPz8gYWNjZXNzaWJpbGl0eVN0YXRlPy5kaXNhYmxlZCxcbiAgICBleHBhbmRlZDogYXJpYUV4cGFuZGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uZXhwYW5kZWQsXG4gICAgc2VsZWN0ZWQ6IGFyaWFTZWxlY3RlZCA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LnNlbGVjdGVkLFxuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVkID1cbiAgICBwcm9wcy5kaXNhYmxlZCAhPSBudWxsID8gcHJvcHMuZGlzYWJsZWQgOiBfYWNjZXNzaWJpbGl0eVN0YXRlPy5kaXNhYmxlZDtcblxuICBfYWNjZXNzaWJpbGl0eVN0YXRlID1cbiAgICBkaXNhYmxlZCAhPT0gX2FjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWRcbiAgICAgID8gey4uLl9hY2Nlc3NpYmlsaXR5U3RhdGUsIGRpc2FibGVkfVxuICAgICAgOiBfYWNjZXNzaWJpbGl0eVN0YXRlO1xuXG4gIGlmIChkaXNhYmxlZCkge1xuICAgIGJ1dHRvblN0eWxlcy5wdXNoKHN0eWxlcy5idXR0b25EaXNhYmxlZCk7XG4gICAgdGV4dFN0eWxlcy5wdXNoKHN0eWxlcy50ZXh0RGlzYWJsZWQpO1xuICB9XG5cbiAgaW52YXJpYW50KFxuICAgIHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZycsXG4gICAgJ1RoZSB0aXRsZSBwcm9wIG9mIGEgQnV0dG9uIG11c3QgYmUgYSBzdHJpbmcnLFxuICApO1xuICBjb25zdCBmb3JtYXR0ZWRUaXRsZSA9XG4gICAgUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJyA/IHRpdGxlLnRvVXBwZXJDYXNlKCkgOiB0aXRsZTtcbiAgY29uc3QgVG91Y2hhYmxlID1cbiAgICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnID8gVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2sgOiBUb3VjaGFibGVPcGFjaXR5O1xuXG4gIC8vIElmIGBub2AgaXMgc3BlY2lmaWVkIGZvciBgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eWAsIGl0IHdpbGwgYmUgY2hhbmdlZCB0byBgbm8taGlkZS1kZXNjZW5kYW50c2AgYmVjYXVzZSB0aGUgdGV4dCBpbnNpZGUgc2hvdWxkIG5vdCBiZSBmb2N1c2VkLlxuICBjb25zdCBfaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSA9XG4gICAgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSA9PT0gJ25vJ1xuICAgICAgPyAnbm8taGlkZS1kZXNjZW5kYW50cydcbiAgICAgIDogaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eTtcblxuICByZXR1cm4gKFxuICAgIDxUb3VjaGFibGVcbiAgICAgIGFjY2Vzc2libGU9e2FjY2Vzc2libGV9XG4gICAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz17YWNjZXNzaWJpbGl0eUFjdGlvbnN9XG4gICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e29uQWNjZXNzaWJpbGl0eUFjdGlvbn1cbiAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17YXJpYUxhYmVsIHx8IGFjY2Vzc2liaWxpdHlMYWJlbH1cbiAgICAgIGFjY2Vzc2liaWxpdHlIaW50PXthY2Nlc3NpYmlsaXR5SGludH1cbiAgICAgIGFjY2Vzc2liaWxpdHlMYW5ndWFnZT17YWNjZXNzaWJpbGl0eUxhbmd1YWdlfVxuICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJidXR0b25cIlxuICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXtfYWNjZXNzaWJpbGl0eVN0YXRlfVxuICAgICAgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eT17X2ltcG9ydGFudEZvckFjY2Vzc2liaWxpdHl9XG4gICAgICBoYXNUVlByZWZlcnJlZEZvY3VzPXtoYXNUVlByZWZlcnJlZEZvY3VzfVxuICAgICAgbmV4dEZvY3VzRG93bj17bmV4dEZvY3VzRG93bn1cbiAgICAgIG5leHRGb2N1c0ZvcndhcmQ9e25leHRGb2N1c0ZvcndhcmR9XG4gICAgICBuZXh0Rm9jdXNMZWZ0PXtuZXh0Rm9jdXNMZWZ0fVxuICAgICAgbmV4dEZvY3VzUmlnaHQ9e25leHRGb2N1c1JpZ2h0fVxuICAgICAgbmV4dEZvY3VzVXA9e25leHRGb2N1c1VwfVxuICAgICAgdGVzdElEPXt0ZXN0SUR9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvblByZXNzPXtvblByZXNzfVxuICAgICAgdG91Y2hTb3VuZERpc2FibGVkPXt0b3VjaFNvdW5kRGlzYWJsZWR9PlxuICAgICAgPFZpZXcgc3R5bGU9e2J1dHRvblN0eWxlc30+XG4gICAgICAgIDxUZXh0IHN0eWxlPXt0ZXh0U3R5bGVzfSBkaXNhYmxlZD17ZGlzYWJsZWR9PlxuICAgICAgICAgIHtmb3JtYXR0ZWRUaXRsZX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgIDwvVG91Y2hhYmxlPlxuICApO1xufTtcblxuQnV0dG9uLmRpc3BsYXlOYW1lID0gJ0J1dHRvbic7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYnV0dG9uOiBQbGF0Zm9ybS5zZWxlY3Qoe1xuICAgIGlvczoge30sXG4gICAgYW5kcm9pZDoge1xuICAgICAgZWxldmF0aW9uOiA0LFxuICAgICAgLy8gTWF0ZXJpYWwgZGVzaWduIGJsdWUgZnJvbSBodHRwczovL21hdGVyaWFsLmdvb2dsZS5jb20vc3R5bGUvY29sb3IuaHRtbCNjb2xvci1jb2xvci1wYWxldHRlXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMjE5NkYzJyxcbiAgICAgIGJvcmRlclJhZGl1czogMixcbiAgICB9LFxuICB9KSxcbiAgdGV4dDoge1xuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgbWFyZ2luOiA4LFxuICAgIC4uLlBsYXRmb3JtLnNlbGVjdCh7XG4gICAgICBpb3M6IHtcbiAgICAgICAgLy8gaU9TIGJsdWUgZnJvbSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vaW9zL2h1bWFuLWludGVyZmFjZS1ndWlkZWxpbmVzL3Zpc3VhbC1kZXNpZ24vY29sb3IvXG4gICAgICAgIGNvbG9yOiAnIzAwN0FGRicsXG4gICAgICAgIGZvbnRTaXplOiAxOCxcbiAgICAgIH0sXG4gICAgICBhbmRyb2lkOiB7XG4gICAgICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIH0sXG4gICAgfSksXG4gIH0sXG4gIGJ1dHRvbkRpc2FibGVkOiBQbGF0Zm9ybS5zZWxlY3Qoe1xuICAgIGlvczoge30sXG4gICAgYW5kcm9pZDoge1xuICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2RmZGZkZicsXG4gICAgfSxcbiAgfSksXG4gIHRleHREaXNhYmxlZDogUGxhdGZvcm0uc2VsZWN0KHtcbiAgICBpb3M6IHtcbiAgICAgIGNvbG9yOiAnI2NkY2RjZCcsXG4gICAgfSxcbiAgICBhbmRyb2lkOiB7XG4gICAgICBjb2xvcjogJyNhMWExYTEnLFxuICAgIH0sXG4gIH0pLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuaW1wb3J0IHR5cGVvZiBUb3VjaGFibGVXaXRob3V0RmVlZGJhY2sgZnJvbSAnLi9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2snO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgUHJlc3NhYmlsaXR5LCB7XG4gIHR5cGUgUHJlc3NhYmlsaXR5Q29uZmlnLFxufSBmcm9tICcuLi8uLi9QcmVzc2FiaWxpdHkvUHJlc3NhYmlsaXR5JztcbmltcG9ydCB7UHJlc3NhYmlsaXR5RGVidWdWaWV3fSBmcm9tICcuLi8uLi9QcmVzc2FiaWxpdHkvUHJlc3NhYmlsaXR5RGVidWcnO1xuaW1wb3J0IHtmaW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUR9IGZyb20gJy4uLy4uL1JlYWN0TmF0aXZlL1JlbmRlcmVyUHJveHknO1xuaW1wb3J0IHByb2Nlc3NDb2xvciBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcic7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCB7Q29tbWFuZHN9IGZyb20gJy4uL1ZpZXcvVmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLi4uUmVhY3QuRWxlbWVudENvbmZpZzxUb3VjaGFibGVXaXRob3V0RmVlZGJhY2s+LFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIGJhY2tncm91bmQgZHJhd2FibGUgdGhhdCdzIGdvaW5nIHRvIGJlIHVzZWQgdG9cbiAgICogZGlzcGxheSBmZWVkYmFjay4gSXQgdGFrZXMgYW4gb2JqZWN0IHdpdGggYHR5cGVgIHByb3BlcnR5IGFuZCBleHRyYSBkYXRhXG4gICAqIGRlcGVuZGluZyBvbiB0aGUgYHR5cGVgLiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBvbmUgb2YgdGhlIHN0YXRpY1xuICAgKiBtZXRob2RzIHRvIGdlbmVyYXRlIHRoYXQgZGljdGlvbmFyeS5cbiAgICovXG4gIGJhY2tncm91bmQ/OiA/KFxuICAgIHwgJFJlYWRPbmx5PHt8XG4gICAgICAgIHR5cGU6ICdUaGVtZUF0dHJBbmRyb2lkJyxcbiAgICAgICAgYXR0cmlidXRlOlxuICAgICAgICAgIHwgJ3NlbGVjdGFibGVJdGVtQmFja2dyb3VuZCdcbiAgICAgICAgICB8ICdzZWxlY3RhYmxlSXRlbUJhY2tncm91bmRCb3JkZXJsZXNzJyxcbiAgICAgICAgcmlwcGxlUmFkaXVzOiA/bnVtYmVyLFxuICAgICAgfH0+XG4gICAgfCAkUmVhZE9ubHk8e3xcbiAgICAgICAgdHlwZTogJ1JpcHBsZUFuZHJvaWQnLFxuICAgICAgICBjb2xvcjogP251bWJlcixcbiAgICAgICAgYm9yZGVybGVzczogYm9vbGVhbixcbiAgICAgICAgcmlwcGxlUmFkaXVzOiA/bnVtYmVyLFxuICAgICAgfH0+XG4gICksXG5cbiAgLyoqXG4gICAqIFRWIHByZWZlcnJlZCBmb2N1cyAoc2VlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBWaWV3IGNvbXBvbmVudCkuXG4gICAqL1xuICBoYXNUVlByZWZlcnJlZEZvY3VzPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIFRWIG5leHQgZm9jdXMgZG93biAoc2VlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBWaWV3IGNvbXBvbmVudCkuXG4gICAqL1xuICBuZXh0Rm9jdXNEb3duPzogP251bWJlcixcblxuICAvKipcbiAgICogVFYgbmV4dCBmb2N1cyBmb3J3YXJkIChzZWUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFZpZXcgY29tcG9uZW50KS5cbiAgICovXG4gIG5leHRGb2N1c0ZvcndhcmQ/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBUViBuZXh0IGZvY3VzIGxlZnQgKHNlZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgVmlldyBjb21wb25lbnQpLlxuICAgKi9cbiAgbmV4dEZvY3VzTGVmdD86ID9udW1iZXIsXG5cbiAgLyoqXG4gICAqIFRWIG5leHQgZm9jdXMgcmlnaHQgKHNlZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgVmlldyBjb21wb25lbnQpLlxuICAgKi9cbiAgbmV4dEZvY3VzUmlnaHQ/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBUViBuZXh0IGZvY3VzIHVwIChzZWUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFZpZXcgY29tcG9uZW50KS5cbiAgICovXG4gIG5leHRGb2N1c1VwPzogP251bWJlcixcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gYWRkIHRoZSByaXBwbGUgZWZmZWN0IHRvIHRoZSBmb3JlZ3JvdW5kIG9mIHRoZSB2aWV3LCBpbnN0ZWFkXG4gICAqIG9mIHRoZSBiYWNrZ3JvdW5kLiBUaGlzIGlzIHVzZWZ1bCBpZiBvbmUgb2YgeW91ciBjaGlsZCB2aWV3cyBoYXMgYVxuICAgKiBiYWNrZ3JvdW5kIG9mIGl0cyBvd24sIG9yIHlvdSdyZSBlLmcuIGRpc3BsYXlpbmcgaW1hZ2VzLCBhbmQgeW91IGRvbid0IHdhbnRcbiAgICogdGhlIHJpcHBsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZW0uXG4gICAqXG4gICAqIENoZWNrIFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrLmNhblVzZU5hdGl2ZUZvcmVncm91bmQoKSBmaXJzdCwgYXMgdGhpcyBpc1xuICAgKiBvbmx5IGF2YWlsYWJsZSBvbiBBbmRyb2lkIDYuMCBhbmQgYWJvdmUuIElmIHlvdSB0cnkgdG8gdXNlIHRoaXMgb24gb2xkZXJcbiAgICogdmVyc2lvbnMsIHRoaXMgd2lsbCBmYWxsYmFjayB0byBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgdXNlRm9yZWdyb3VuZD86ID9ib29sZWFuLFxufH0+O1xuXG50eXBlIFN0YXRlID0gJFJlYWRPbmx5PHt8XG4gIHByZXNzYWJpbGl0eTogUHJlc3NhYmlsaXR5LFxufH0+O1xuXG5jbGFzcyBUb3VjaGFibGVOYXRpdmVGZWVkYmFjayBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB2YWx1ZSBmb3IgdGhlIGBiYWNrZ3JvdW5kYCBwcm9wIHRoYXQgdXNlcyB0aGUgQW5kcm9pZCB0aGVtZSdzXG4gICAqIGRlZmF1bHQgYmFja2dyb3VuZCBmb3Igc2VsZWN0YWJsZSBlbGVtZW50cy5cbiAgICovXG4gIHN0YXRpYyBTZWxlY3RhYmxlQmFja2dyb3VuZDogKHJpcHBsZVJhZGl1czogP251bWJlcikgPT4gJFJlYWRPbmx5PHt8XG4gICAgYXR0cmlidXRlOiAnc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kJyxcbiAgICB0eXBlOiAnVGhlbWVBdHRyQW5kcm9pZCcsXG4gICAgcmlwcGxlUmFkaXVzOiA/bnVtYmVyLFxuICB8fT4gPSAocmlwcGxlUmFkaXVzOiA/bnVtYmVyKSA9PiAoe1xuICAgIHR5cGU6ICdUaGVtZUF0dHJBbmRyb2lkJyxcbiAgICBhdHRyaWJ1dGU6ICdzZWxlY3RhYmxlSXRlbUJhY2tncm91bmQnLFxuICAgIHJpcHBsZVJhZGl1cyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB2YWx1ZSBmb3IgdGhlIGBiYWNrZ3JvdW5kYCBwcm9wIHRoYXQgdXNlcyB0aGUgQW5kcm9pZCB0aGVtZSdzXG4gICAqIGRlZmF1bHQgYmFja2dyb3VuZCBmb3IgYm9yZGVybGVzcyBzZWxlY3RhYmxlIGVsZW1lbnRzLiBSZXF1aXJlcyBBUEkgMjErLlxuICAgKi9cbiAgc3RhdGljIFNlbGVjdGFibGVCYWNrZ3JvdW5kQm9yZGVybGVzczogKHJpcHBsZVJhZGl1czogP251bWJlcikgPT4gJFJlYWRPbmx5PHt8XG4gICAgYXR0cmlidXRlOiAnc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kQm9yZGVybGVzcycsXG4gICAgdHlwZTogJ1RoZW1lQXR0ckFuZHJvaWQnLFxuICAgIHJpcHBsZVJhZGl1czogP251bWJlcixcbiAgfH0+ID0gKHJpcHBsZVJhZGl1czogP251bWJlcikgPT4gKHtcbiAgICB0eXBlOiAnVGhlbWVBdHRyQW5kcm9pZCcsXG4gICAgYXR0cmlidXRlOiAnc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kQm9yZGVybGVzcycsXG4gICAgcmlwcGxlUmFkaXVzLFxuICB9KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHZhbHVlIGZvciB0aGUgYGJhY2tncm91bmRgIHByb3AgdGhhdCB1c2VzIHRoZSBBbmRyb2lkIHJpcHBsZSB3aXRoXG4gICAqIHRoZSBzdXBwbGllZCBjb2xvci4gSWYgYGJvcmRlcmxlc3NgIGlzIHRydWUsIHRoZSByaXBwbGUgd2lsbCByZW5kZXIgb3V0c2lkZVxuICAgKiBvZiB0aGUgdmlldyBib3VuZHMuIFJlcXVpcmVzIEFQSSAyMSsuXG4gICAqL1xuICBzdGF0aWMgUmlwcGxlOiAoXG4gICAgY29sb3I6IHN0cmluZyxcbiAgICBib3JkZXJsZXNzOiBib29sZWFuLFxuICAgIHJpcHBsZVJhZGl1czogP251bWJlcixcbiAgKSA9PiAkUmVhZE9ubHk8e3xcbiAgICBib3JkZXJsZXNzOiBib29sZWFuLFxuICAgIGNvbG9yOiA/bnVtYmVyLFxuICAgIHJpcHBsZVJhZGl1czogP251bWJlcixcbiAgICB0eXBlOiAnUmlwcGxlQW5kcm9pZCcsXG4gIHx9PiA9IChjb2xvcjogc3RyaW5nLCBib3JkZXJsZXNzOiBib29sZWFuLCByaXBwbGVSYWRpdXM6ID9udW1iZXIpID0+IHtcbiAgICBjb25zdCBwcm9jZXNzZWRDb2xvciA9IHByb2Nlc3NDb2xvcihjb2xvcik7XG4gICAgaW52YXJpYW50KFxuICAgICAgcHJvY2Vzc2VkQ29sb3IgPT0gbnVsbCB8fCB0eXBlb2YgcHJvY2Vzc2VkQ29sb3IgPT09ICdudW1iZXInLFxuICAgICAgJ1VuZXhwZWN0ZWQgY29sb3IgZ2l2ZW4gZm9yIFJpcHBsZSBjb2xvcicsXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JpcHBsZUFuZHJvaWQnLFxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbiAgICAgIGNvbG9yOiBwcm9jZXNzZWRDb2xvcixcbiAgICAgIGJvcmRlcmxlc3MsXG4gICAgICByaXBwbGVSYWRpdXMsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogV2hldGhlciBgdXNlRm9yZWdyb3VuZGAgaXMgc3VwcG9ydGVkLlxuICAgKi9cbiAgc3RhdGljIGNhblVzZU5hdGl2ZUZvcmVncm91bmQ6ICgpID0+IGJvb2xlYW4gPSAoKSA9PlxuICAgIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCc7XG5cbiAgc3RhdGU6IFN0YXRlID0ge1xuICAgIHByZXNzYWJpbGl0eTogbmV3IFByZXNzYWJpbGl0eSh0aGlzLl9jcmVhdGVQcmVzc2FiaWxpdHlDb25maWcoKSksXG4gIH07XG5cbiAgX2NyZWF0ZVByZXNzYWJpbGl0eUNvbmZpZygpOiBQcmVzc2FiaWxpdHlDb25maWcge1xuICAgIGNvbnN0IGFjY2Vzc2liaWxpdHlTdGF0ZURpc2FibGVkID1cbiAgICAgIHRoaXMucHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbGFibGU6ICF0aGlzLnByb3BzLnJlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9uLFxuICAgICAgZGlzYWJsZWQ6XG4gICAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgIT0gbnVsbFxuICAgICAgICAgID8gdGhpcy5wcm9wcy5kaXNhYmxlZFxuICAgICAgICAgIDogYWNjZXNzaWJpbGl0eVN0YXRlRGlzYWJsZWQsXG4gICAgICBoaXRTbG9wOiB0aGlzLnByb3BzLmhpdFNsb3AsXG4gICAgICBkZWxheUxvbmdQcmVzczogdGhpcy5wcm9wcy5kZWxheUxvbmdQcmVzcyxcbiAgICAgIGRlbGF5UHJlc3NJbjogdGhpcy5wcm9wcy5kZWxheVByZXNzSW4sXG4gICAgICBkZWxheVByZXNzT3V0OiB0aGlzLnByb3BzLmRlbGF5UHJlc3NPdXQsXG4gICAgICBtaW5QcmVzc0R1cmF0aW9uOiAwLFxuICAgICAgcHJlc3NSZWN0T2Zmc2V0OiB0aGlzLnByb3BzLnByZXNzUmV0ZW50aW9uT2Zmc2V0LFxuICAgICAgYW5kcm9pZF9kaXNhYmxlU291bmQ6IHRoaXMucHJvcHMudG91Y2hTb3VuZERpc2FibGVkLFxuICAgICAgb25Mb25nUHJlc3M6IHRoaXMucHJvcHMub25Mb25nUHJlc3MsXG4gICAgICBvblByZXNzOiB0aGlzLnByb3BzLm9uUHJlc3MsXG4gICAgICBvblByZXNzSW46IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaEhvdHNwb3RVcGRhdGUoZXZlbnQpO1xuICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoUHJlc3NlZFN0YXRlQ2hhbmdlKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uUHJlc3NJbiAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vblByZXNzSW4oZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25QcmVzc01vdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaEhvdHNwb3RVcGRhdGUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25QcmVzc091dDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoUHJlc3NlZFN0YXRlQ2hhbmdlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblByZXNzT3V0ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uUHJlc3NPdXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBfZGlzcGF0Y2hQcmVzc2VkU3RhdGVDaGFuZ2UocHJlc3NlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICBjb25zdCBob3N0Q29tcG9uZW50UmVmID0gZmluZEhvc3RJbnN0YW5jZV9ERVBSRUNBVEVEKHRoaXMpO1xuICAgICAgaWYgKGhvc3RDb21wb25lbnRSZWYgPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RvdWNoYWJsZTogVW5hYmxlIHRvIGZpbmQgSG9zdENvbXBvbmVudCBpbnN0YW5jZS4gJyArXG4gICAgICAgICAgICAnSGFzIHlvdXIgVG91Y2hhYmxlIGNvbXBvbmVudCBiZWVuIHVubW91bnRlZD8nLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ29tbWFuZHMuc2V0UHJlc3NlZChob3N0Q29tcG9uZW50UmVmLCBwcmVzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZGlzcGF0Y2hIb3RzcG90VXBkYXRlKGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIGNvbnN0IHtsb2NhdGlvblgsIGxvY2F0aW9uWX0gPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICAgIGNvbnN0IGhvc3RDb21wb25lbnRSZWYgPSBmaW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQodGhpcyk7XG4gICAgICBpZiAoaG9zdENvbXBvbmVudFJlZiA9PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVG91Y2hhYmxlOiBVbmFibGUgdG8gZmluZCBIb3N0Q29tcG9uZW50IGluc3RhbmNlLiAnICtcbiAgICAgICAgICAgICdIYXMgeW91ciBUb3VjaGFibGUgY29tcG9uZW50IGJlZW4gdW5tb3VudGVkPycsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBDb21tYW5kcy5ob3RzcG90VXBkYXRlKFxuICAgICAgICAgIGhvc3RDb21wb25lbnRSZWYsXG4gICAgICAgICAgbG9jYXRpb25YID8/IDAsXG4gICAgICAgICAgbG9jYXRpb25ZID8/IDAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBSZWFjdC5DaGlsZHJlbi5vbmx5PCRGbG93Rml4TWU+KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIGNvbnN0IGNoaWxkcmVuOiBBcnJheTxSZWFjdC5Ob2RlPiA9IFtlbGVtZW50LnByb3BzLmNoaWxkcmVuXTtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVmlldykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgIDxQcmVzc2FiaWxpdHlEZWJ1Z1ZpZXcgY29sb3I9XCJicm93blwiIGhpdFNsb3A9e3RoaXMucHJvcHMuaGl0U2xvcH0gLz4sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQkFDS1dBUkQtQ09NUEFUSUJJTElUWTogRm9jdXMgYW5kIGJsdXIgZXZlbnRzIHdlcmUgbmV2ZXIgc3VwcG9ydGVkIGJlZm9yZVxuICAgIC8vIGFkb3B0aW5nIGBQcmVzc2FiaWxpdHlgLCBzbyBwcmVzZXJ2ZSB0aGF0IGJlaGF2aW9yLlxuICAgIGNvbnN0IHtvbkJsdXIsIG9uRm9jdXMsIC4uLmV2ZW50SGFuZGxlcnNXaXRob3V0Qmx1ckFuZEZvY3VzfSA9XG4gICAgICB0aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5nZXRFdmVudEhhbmRsZXJzKCk7XG5cbiAgICBsZXQgX2FjY2Vzc2liaWxpdHlTdGF0ZSA9IHtcbiAgICAgIGJ1c3k6IHRoaXMucHJvcHNbJ2FyaWEtYnVzeSddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5idXN5LFxuICAgICAgY2hlY2tlZDpcbiAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1jaGVja2VkJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmNoZWNrZWQsXG4gICAgICBkaXNhYmxlZDpcbiAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1kaXNhYmxlZCddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5kaXNhYmxlZCxcbiAgICAgIGV4cGFuZGVkOlxuICAgICAgICB0aGlzLnByb3BzWydhcmlhLWV4cGFuZGVkJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmV4cGFuZGVkLFxuICAgICAgc2VsZWN0ZWQ6XG4gICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtc2VsZWN0ZWQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlTdGF0ZT8uc2VsZWN0ZWQsXG4gICAgfTtcblxuICAgIF9hY2Nlc3NpYmlsaXR5U3RhdGUgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlZCAhPSBudWxsXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uX2FjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLnByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBfYWNjZXNzaWJpbGl0eVN0YXRlO1xuXG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eVZhbHVlID0ge1xuICAgICAgbWF4OiB0aGlzLnByb3BzWydhcmlhLXZhbHVlbWF4J10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5VmFsdWU/Lm1heCxcbiAgICAgIG1pbjogdGhpcy5wcm9wc1snYXJpYS12YWx1ZW1pbiddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVZhbHVlPy5taW4sXG4gICAgICBub3c6IHRoaXMucHJvcHNbJ2FyaWEtdmFsdWVub3cnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8ubm93LFxuICAgICAgdGV4dDogdGhpcy5wcm9wc1snYXJpYS12YWx1ZXRleHQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8udGV4dCxcbiAgICB9O1xuXG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eUxpdmVSZWdpb24gPVxuICAgICAgdGhpcy5wcm9wc1snYXJpYS1saXZlJ10gPT09ICdvZmYnXG4gICAgICAgID8gJ25vbmUnXG4gICAgICAgIDogdGhpcy5wcm9wc1snYXJpYS1saXZlJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbjtcblxuICAgIGNvbnN0IGFjY2Vzc2liaWxpdHlMYWJlbCA9XG4gICAgICB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5TGFiZWw7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChcbiAgICAgIGVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIC4uLmV2ZW50SGFuZGxlcnNXaXRob3V0Qmx1ckFuZEZvY3VzLFxuICAgICAgICAuLi5nZXRCYWNrZ3JvdW5kUHJvcChcbiAgICAgICAgICB0aGlzLnByb3BzLmJhY2tncm91bmQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBUb3VjaGFibGVOYXRpdmVGZWVkYmFjay5TZWxlY3RhYmxlQmFja2dyb3VuZCgpXG4gICAgICAgICAgICA6IHRoaXMucHJvcHMuYmFja2dyb3VuZCxcbiAgICAgICAgICB0aGlzLnByb3BzLnVzZUZvcmVncm91bmQgPT09IHRydWUsXG4gICAgICAgICksXG4gICAgICAgIGFjY2Vzc2libGU6IHRoaXMucHJvcHMuYWNjZXNzaWJsZSAhPT0gZmFsc2UsXG4gICAgICAgIGFjY2Vzc2liaWxpdHlIaW50OiB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlIaW50LFxuICAgICAgICBhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2U6IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eUxhbmd1YWdlLFxuICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw6IGFjY2Vzc2liaWxpdHlMYWJlbCxcbiAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU6IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVJvbGUsXG4gICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZTogX2FjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM6IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eUFjdGlvbnMsXG4gICAgICAgIG9uQWNjZXNzaWJpbGl0eUFjdGlvbjogdGhpcy5wcm9wcy5vbkFjY2Vzc2liaWxpdHlBY3Rpb24sXG4gICAgICAgIGFjY2Vzc2liaWxpdHlWYWx1ZTogYWNjZXNzaWJpbGl0eVZhbHVlLFxuICAgICAgICBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5OlxuICAgICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtaGlkZGVuJ10gPT09IHRydWVcbiAgICAgICAgICAgID8gJ25vLWhpZGUtZGVzY2VuZGFudHMnXG4gICAgICAgICAgICA6IHRoaXMucHJvcHMuaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSxcbiAgICAgICAgYWNjZXNzaWJpbGl0eVZpZXdJc01vZGFsOlxuICAgICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtbW9kYWwnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWaWV3SXNNb2RhbCxcbiAgICAgICAgYWNjZXNzaWJpbGl0eUxpdmVSZWdpb246IGFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uLFxuICAgICAgICBhY2Nlc3NpYmlsaXR5RWxlbWVudHNIaWRkZW46XG4gICAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1oaWRkZW4nXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlFbGVtZW50c0hpZGRlbixcbiAgICAgICAgaGFzVFZQcmVmZXJyZWRGb2N1czogdGhpcy5wcm9wcy5oYXNUVlByZWZlcnJlZEZvY3VzLFxuICAgICAgICBoaXRTbG9wOiB0aGlzLnByb3BzLmhpdFNsb3AsXG4gICAgICAgIGZvY3VzYWJsZTpcbiAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzYWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgICB0aGlzLnByb3BzLm9uUHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICF0aGlzLnByb3BzLmRpc2FibGVkLFxuICAgICAgICBuYXRpdmVJRDogdGhpcy5wcm9wcy5pZCA/PyB0aGlzLnByb3BzLm5hdGl2ZUlELFxuICAgICAgICBuZXh0Rm9jdXNEb3duOiB0aGlzLnByb3BzLm5leHRGb2N1c0Rvd24sXG4gICAgICAgIG5leHRGb2N1c0ZvcndhcmQ6IHRoaXMucHJvcHMubmV4dEZvY3VzRm9yd2FyZCxcbiAgICAgICAgbmV4dEZvY3VzTGVmdDogdGhpcy5wcm9wcy5uZXh0Rm9jdXNMZWZ0LFxuICAgICAgICBuZXh0Rm9jdXNSaWdodDogdGhpcy5wcm9wcy5uZXh0Rm9jdXNSaWdodCxcbiAgICAgICAgbmV4dEZvY3VzVXA6IHRoaXMucHJvcHMubmV4dEZvY3VzVXAsXG4gICAgICAgIG9uTGF5b3V0OiB0aGlzLnByb3BzLm9uTGF5b3V0LFxuICAgICAgICB0ZXN0SUQ6IHRoaXMucHJvcHMudGVzdElELFxuICAgICAgfSxcbiAgICAgIC4uLmNoaWxkcmVuLFxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBQcm9wcywgcHJldlN0YXRlOiBTdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUucHJlc3NhYmlsaXR5LmNvbmZpZ3VyZSh0aGlzLl9jcmVhdGVQcmVzc2FiaWxpdHlDb25maWcoKSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiBtaXhlZCB7XG4gICAgdGhpcy5zdGF0ZS5wcmVzc2FiaWxpdHkuY29uZmlndXJlKHRoaXMuX2NyZWF0ZVByZXNzYWJpbGl0eUNvbmZpZygpKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUucHJlc3NhYmlsaXR5LnJlc2V0KCk7XG4gIH1cbn1cblxuY29uc3QgZ2V0QmFja2dyb3VuZFByb3AgPVxuICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnXG4gICAgPyAvKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICAgICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICAgICAgKGJhY2tncm91bmQsIHVzZUZvcmVncm91bmQ6IGJvb2xlYW4pID0+XG4gICAgICAgIHVzZUZvcmVncm91bmQgJiYgVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2suY2FuVXNlTmF0aXZlRm9yZWdyb3VuZCgpXG4gICAgICAgICAgPyB7bmF0aXZlRm9yZWdyb3VuZEFuZHJvaWQ6IGJhY2tncm91bmR9XG4gICAgICAgICAgOiB7bmF0aXZlQmFja2dyb3VuZEFuZHJvaWQ6IGJhY2tncm91bmR9XG4gICAgOiAvKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICAgICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICAgICAgKGJhY2tncm91bmQsIHVzZUZvcmVncm91bmQ6IGJvb2xlYW4pID0+IG51bGw7XG5cblRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrLmRpc3BsYXlOYW1lID0gJ1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrJztcblxubW9kdWxlLmV4cG9ydHMgPSBUb3VjaGFibGVOYXRpdmVGZWVkYmFjaztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1N0eWxlUHJvcH0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlb2YgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIGZyb20gJy4vVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrJztcblxuaW1wb3J0IEFuaW1hdGVkIGZyb20gJy4uLy4uL0FuaW1hdGVkL0FuaW1hdGVkJztcbmltcG9ydCBFYXNpbmcgZnJvbSAnLi4vLi4vQW5pbWF0ZWQvRWFzaW5nJztcbmltcG9ydCBQcmVzc2FiaWxpdHksIHtcbiAgdHlwZSBQcmVzc2FiaWxpdHlDb25maWcsXG59IGZyb20gJy4uLy4uL1ByZXNzYWJpbGl0eS9QcmVzc2FiaWxpdHknO1xuaW1wb3J0IHtQcmVzc2FiaWxpdHlEZWJ1Z1ZpZXd9IGZyb20gJy4uLy4uL1ByZXNzYWJpbGl0eS9QcmVzc2FiaWxpdHlEZWJ1Zyc7XG5pbXBvcnQgZmxhdHRlblN0eWxlIGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvZmxhdHRlblN0eWxlJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFRWUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgaGFzVFZQcmVmZXJyZWRGb2N1cz86ID9ib29sZWFuLFxuICBuZXh0Rm9jdXNEb3duPzogP251bWJlcixcbiAgbmV4dEZvY3VzRm9yd2FyZD86ID9udW1iZXIsXG4gIG5leHRGb2N1c0xlZnQ/OiA/bnVtYmVyLFxuICBuZXh0Rm9jdXNSaWdodD86ID9udW1iZXIsXG4gIG5leHRGb2N1c1VwPzogP251bWJlcixcbnx9PjtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi5SZWFjdC5FbGVtZW50Q29uZmlnPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz4sXG4gIC4uLlRWUHJvcHMsXG5cbiAgYWN0aXZlT3BhY2l0eT86ID9udW1iZXIsXG4gIHN0eWxlPzogP1ZpZXdTdHlsZVByb3AsXG5cbiAgaG9zdFJlZj86ID9SZWFjdC5SZWY8dHlwZW9mIEFuaW1hdGVkLlZpZXc+LFxufH0+O1xuXG50eXBlIFN0YXRlID0gJFJlYWRPbmx5PHt8XG4gIGFuaW06IEFuaW1hdGVkLlZhbHVlLFxuICBwcmVzc2FiaWxpdHk6IFByZXNzYWJpbGl0eSxcbnx9PjtcblxuLyoqXG4gKiBBIHdyYXBwZXIgZm9yIG1ha2luZyB2aWV3cyByZXNwb25kIHByb3Blcmx5IHRvIHRvdWNoZXMuXG4gKiBPbiBwcmVzcyBkb3duLCB0aGUgb3BhY2l0eSBvZiB0aGUgd3JhcHBlZCB2aWV3IGlzIGRlY3JlYXNlZCwgZGltbWluZyBpdC5cbiAqXG4gKiBPcGFjaXR5IGlzIGNvbnRyb2xsZWQgYnkgd3JhcHBpbmcgdGhlIGNoaWxkcmVuIGluIGFuIEFuaW1hdGVkLlZpZXcsIHdoaWNoIGlzXG4gKiBhZGRlZCB0byB0aGUgdmlldyBoaWVyYXJjaHkuICBCZSBhd2FyZSB0aGF0IHRoaXMgY2FuIGFmZmVjdCBsYXlvdXQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIHJlbmRlckJ1dHRvbjogZnVuY3Rpb24oKSB7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPFRvdWNoYWJsZU9wYWNpdHkgb25QcmVzcz17dGhpcy5fb25QcmVzc0J1dHRvbn0+XG4gKiAgICAgICA8SW1hZ2VcbiAqICAgICAgICAgc3R5bGU9e3N0eWxlcy5idXR0b259XG4gKiAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi9teUJ1dHRvbi5wbmcnKX1cbiAqICAgICAgIC8+XG4gKiAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICogICApO1xuICogfSxcbiAqIGBgYFxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGBSZWFjdE5hdGl2ZVdlYlBsYXllclxuICogaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuICogaW1wb3J0IHtcbiAqICAgQXBwUmVnaXN0cnksXG4gKiAgIFN0eWxlU2hlZXQsXG4gKiAgIFRvdWNoYWJsZU9wYWNpdHksXG4gKiAgIFRleHQsXG4gKiAgIFZpZXcsXG4gKiB9IGZyb20gJ3JlYWN0LW5hdGl2ZSdcbiAqXG4gKiBjbGFzcyBBcHAgZXh0ZW5kcyBDb21wb25lbnQge1xuICogICBzdGF0ZSA9IHsgY291bnQ6IDAgfVxuICpcbiAqICAgb25QcmVzcyA9ICgpID0+IHtcbiAqICAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7XG4gKiAgICAgICBjb3VudDogc3RhdGUuY291bnQgKyAxXG4gKiAgICAgfSkpO1xuICogICB9O1xuICpcbiAqICByZW5kZXIoKSB7XG4gKiAgICByZXR1cm4gKFxuICogICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gKiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAqICAgICAgICAgIHN0eWxlPXtzdHlsZXMuYnV0dG9ufVxuICogICAgICAgICAgb25QcmVzcz17dGhpcy5vblByZXNzfT5cbiAqICAgICAgICAgIDxUZXh0PiBUb3VjaCBIZXJlIDwvVGV4dD5cbiAqICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gKiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuY291bnRDb250YWluZXJdfT5cbiAqICAgICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLmNvdW50VGV4dF19PlxuICogICAgICAgICAgICAgeyB0aGlzLnN0YXRlLmNvdW50ICE9PSAwID8gdGhpcy5zdGF0ZS5jb3VudDogbnVsbH1cbiAqICAgICAgICAgICA8L1RleHQ+XG4gKiAgICAgICAgIDwvVmlldz5cbiAqICAgICAgIDwvVmlldz5cbiAqICAgICApXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gKiAgIGNvbnRhaW5lcjoge1xuICogICAgIGZsZXg6IDEsXG4gKiAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICogICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMFxuICogICB9LFxuICogICBidXR0b246IHtcbiAqICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAqICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjREREREREJyxcbiAqICAgICBwYWRkaW5nOiAxMFxuICogICB9LFxuICogICBjb3VudENvbnRhaW5lcjoge1xuICogICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICogICAgIHBhZGRpbmc6IDEwXG4gKiAgIH0sXG4gKiAgIGNvdW50VGV4dDoge1xuICogICAgIGNvbG9yOiAnI0ZGMDBGRidcbiAqICAgfVxuICogfSlcbiAqXG4gKiBBcHBSZWdpc3RyeS5yZWdpc3RlckNvbXBvbmVudCgnQXBwJywgKCkgPT4gQXBwKVxuICogYGBgXG4gKlxuICovXG5jbGFzcyBUb3VjaGFibGVPcGFjaXR5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgYW5pbTogbmV3IEFuaW1hdGVkLlZhbHVlKHRoaXMuX2dldENoaWxkU3R5bGVPcGFjaXR5V2l0aERlZmF1bHQoKSksXG4gICAgcHJlc3NhYmlsaXR5OiBuZXcgUHJlc3NhYmlsaXR5KHRoaXMuX2NyZWF0ZVByZXNzYWJpbGl0eUNvbmZpZygpKSxcbiAgfTtcblxuICBfY3JlYXRlUHJlc3NhYmlsaXR5Q29uZmlnKCk6IFByZXNzYWJpbGl0eUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbGFibGU6ICF0aGlzLnByb3BzLnJlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9uLFxuICAgICAgZGlzYWJsZWQ6XG4gICAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgPz9cbiAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1kaXNhYmxlZCddID8/XG4gICAgICAgIHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5kaXNhYmxlZCxcbiAgICAgIGhpdFNsb3A6IHRoaXMucHJvcHMuaGl0U2xvcCxcbiAgICAgIGRlbGF5TG9uZ1ByZXNzOiB0aGlzLnByb3BzLmRlbGF5TG9uZ1ByZXNzLFxuICAgICAgZGVsYXlQcmVzc0luOiB0aGlzLnByb3BzLmRlbGF5UHJlc3NJbixcbiAgICAgIGRlbGF5UHJlc3NPdXQ6IHRoaXMucHJvcHMuZGVsYXlQcmVzc091dCxcbiAgICAgIG1pblByZXNzRHVyYXRpb246IDAsXG4gICAgICBwcmVzc1JlY3RPZmZzZXQ6IHRoaXMucHJvcHMucHJlc3NSZXRlbnRpb25PZmZzZXQsXG4gICAgICBvbkJsdXI6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzVFYpIHtcbiAgICAgICAgICB0aGlzLl9vcGFjaXR5SW5hY3RpdmUoMjUwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkJsdXIgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRm9jdXM6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzVFYpIHtcbiAgICAgICAgICB0aGlzLl9vcGFjaXR5QWN0aXZlKDE1MCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25Gb2N1cyAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTG9uZ1ByZXNzOiB0aGlzLnByb3BzLm9uTG9uZ1ByZXNzLFxuICAgICAgb25QcmVzczogdGhpcy5wcm9wcy5vblByZXNzLFxuICAgICAgb25QcmVzc0luOiBldmVudCA9PiB7XG4gICAgICAgIHRoaXMuX29wYWNpdHlBY3RpdmUoXG4gICAgICAgICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uUmVzcG9uZGVyR3JhbnQnXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogMTUwLFxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblByZXNzSW4gIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25QcmVzc0luKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uUHJlc3NPdXQ6IGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5fb3BhY2l0eUluYWN0aXZlKDI1MCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uUHJlc3NPdXQgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25QcmVzc091dChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSB0b3VjaGFibGUgdG8gYSBuZXcgb3BhY2l0eS5cbiAgICovXG4gIF9zZXRPcGFjaXR5VG8odG9WYWx1ZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgQW5pbWF0ZWQudGltaW5nKHRoaXMuc3RhdGUuYW5pbSwge1xuICAgICAgdG9WYWx1ZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZWFzaW5nOiBFYXNpbmcuaW5PdXQoRWFzaW5nLnF1YWQpLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgIH0pLnN0YXJ0KCk7XG4gIH1cblxuICBfb3BhY2l0eUFjdGl2ZShkdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0T3BhY2l0eVRvKHRoaXMucHJvcHMuYWN0aXZlT3BhY2l0eSA/PyAwLjIsIGR1cmF0aW9uKTtcbiAgfVxuXG4gIF9vcGFjaXR5SW5hY3RpdmUoZHVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3NldE9wYWNpdHlUbyh0aGlzLl9nZXRDaGlsZFN0eWxlT3BhY2l0eVdpdGhEZWZhdWx0KCksIGR1cmF0aW9uKTtcbiAgfVxuXG4gIF9nZXRDaGlsZFN0eWxlT3BhY2l0eVdpdGhEZWZhdWx0KCk6IG51bWJlciB7XG4gICAgLy8gJEZsb3dGaXhNZVt1bmRlcmNvbnN0cmFpbmVkLWltcGxpY2l0LWluc3RhbnRpYXRpb25dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgY29uc3Qgb3BhY2l0eSA9IGZsYXR0ZW5TdHlsZSh0aGlzLnByb3BzLnN0eWxlKT8ub3BhY2l0eTtcbiAgICByZXR1cm4gdHlwZW9mIG9wYWNpdHkgPT09ICdudW1iZXInID8gb3BhY2l0eSA6IDE7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgLy8gQkFDS1dBUkQtQ09NUEFUSUJJTElUWTogRm9jdXMgYW5kIGJsdXIgZXZlbnRzIHdlcmUgbmV2ZXIgc3VwcG9ydGVkIGJlZm9yZVxuICAgIC8vIGFkb3B0aW5nIGBQcmVzc2FiaWxpdHlgLCBzbyBwcmVzZXJ2ZSB0aGF0IGJlaGF2aW9yLlxuICAgIGNvbnN0IHtvbkJsdXIsIG9uRm9jdXMsIC4uLmV2ZW50SGFuZGxlcnNXaXRob3V0Qmx1ckFuZEZvY3VzfSA9XG4gICAgICB0aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5nZXRFdmVudEhhbmRsZXJzKCk7XG5cbiAgICBsZXQgX2FjY2Vzc2liaWxpdHlTdGF0ZSA9IHtcbiAgICAgIGJ1c3k6IHRoaXMucHJvcHNbJ2FyaWEtYnVzeSddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5idXN5LFxuICAgICAgY2hlY2tlZDpcbiAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1jaGVja2VkJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmNoZWNrZWQsXG4gICAgICBkaXNhYmxlZDpcbiAgICAgICAgdGhpcy5wcm9wc1snYXJpYS1kaXNhYmxlZCddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVN0YXRlPy5kaXNhYmxlZCxcbiAgICAgIGV4cGFuZGVkOlxuICAgICAgICB0aGlzLnByb3BzWydhcmlhLWV4cGFuZGVkJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5U3RhdGU/LmV4cGFuZGVkLFxuICAgICAgc2VsZWN0ZWQ6XG4gICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtc2VsZWN0ZWQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlTdGF0ZT8uc2VsZWN0ZWQsXG4gICAgfTtcblxuICAgIF9hY2Nlc3NpYmlsaXR5U3RhdGUgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlZCAhPSBudWxsXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uX2FjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLnByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBfYWNjZXNzaWJpbGl0eVN0YXRlO1xuXG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eVZhbHVlID0ge1xuICAgICAgbWF4OiB0aGlzLnByb3BzWydhcmlhLXZhbHVlbWF4J10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5VmFsdWU/Lm1heCxcbiAgICAgIG1pbjogdGhpcy5wcm9wc1snYXJpYS12YWx1ZW1pbiddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVZhbHVlPy5taW4sXG4gICAgICBub3c6IHRoaXMucHJvcHNbJ2FyaWEtdmFsdWVub3cnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8ubm93LFxuICAgICAgdGV4dDogdGhpcy5wcm9wc1snYXJpYS12YWx1ZXRleHQnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8udGV4dCxcbiAgICB9O1xuXG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eUxpdmVSZWdpb24gPVxuICAgICAgdGhpcy5wcm9wc1snYXJpYS1saXZlJ10gPT09ICdvZmYnXG4gICAgICAgID8gJ25vbmUnXG4gICAgICAgIDogdGhpcy5wcm9wc1snYXJpYS1saXZlJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbjtcblxuICAgIGNvbnN0IGFjY2Vzc2liaWxpdHlMYWJlbCA9XG4gICAgICB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gPz8gdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5TGFiZWw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIGFjY2Vzc2libGU9e3RoaXMucHJvcHMuYWNjZXNzaWJsZSAhPT0gZmFsc2V9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17YWNjZXNzaWJpbGl0eUxhYmVsfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5SGludD17dGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5SGludH1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUxhbmd1YWdlPXt0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlMYW5ndWFnZX1cbiAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9e3RoaXMucHJvcHMuYWNjZXNzaWJpbGl0eVJvbGV9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17X2FjY2Vzc2liaWxpdHlTdGF0ZX1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e3RoaXMucHJvcHMuYWNjZXNzaWJpbGl0eUFjdGlvbnN9XG4gICAgICAgIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj17dGhpcy5wcm9wcy5vbkFjY2Vzc2liaWxpdHlBY3Rpb259XG4gICAgICAgIGFjY2Vzc2liaWxpdHlWYWx1ZT17YWNjZXNzaWJpbGl0eVZhbHVlfVxuICAgICAgICBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PXtcbiAgICAgICAgICB0aGlzLnByb3BzWydhcmlhLWhpZGRlbiddID09PSB0cnVlXG4gICAgICAgICAgICA/ICduby1oaWRlLWRlc2NlbmRhbnRzJ1xuICAgICAgICAgICAgOiB0aGlzLnByb3BzLmltcG9ydGFudEZvckFjY2Vzc2liaWxpdHlcbiAgICAgICAgfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5Vmlld0lzTW9kYWw9e1xuICAgICAgICAgIHRoaXMucHJvcHNbJ2FyaWEtbW9kYWwnXSA/PyB0aGlzLnByb3BzLmFjY2Vzc2liaWxpdHlWaWV3SXNNb2RhbFxuICAgICAgICB9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uPXthY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbn1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUVsZW1lbnRzSGlkZGVuPXtcbiAgICAgICAgICB0aGlzLnByb3BzWydhcmlhLWhpZGRlbiddID8/IHRoaXMucHJvcHMuYWNjZXNzaWJpbGl0eUVsZW1lbnRzSGlkZGVuXG4gICAgICAgIH1cbiAgICAgICAgc3R5bGU9e1t0aGlzLnByb3BzLnN0eWxlLCB7b3BhY2l0eTogdGhpcy5zdGF0ZS5hbmltfV19XG4gICAgICAgIG5hdGl2ZUlEPXt0aGlzLnByb3BzLmlkID8/IHRoaXMucHJvcHMubmF0aXZlSUR9XG4gICAgICAgIHRlc3RJRD17dGhpcy5wcm9wcy50ZXN0SUR9XG4gICAgICAgIG9uTGF5b3V0PXt0aGlzLnByb3BzLm9uTGF5b3V0fVxuICAgICAgICBuZXh0Rm9jdXNEb3duPXt0aGlzLnByb3BzLm5leHRGb2N1c0Rvd259XG4gICAgICAgIG5leHRGb2N1c0ZvcndhcmQ9e3RoaXMucHJvcHMubmV4dEZvY3VzRm9yd2FyZH1cbiAgICAgICAgbmV4dEZvY3VzTGVmdD17dGhpcy5wcm9wcy5uZXh0Rm9jdXNMZWZ0fVxuICAgICAgICBuZXh0Rm9jdXNSaWdodD17dGhpcy5wcm9wcy5uZXh0Rm9jdXNSaWdodH1cbiAgICAgICAgbmV4dEZvY3VzVXA9e3RoaXMucHJvcHMubmV4dEZvY3VzVXB9XG4gICAgICAgIGhhc1RWUHJlZmVycmVkRm9jdXM9e3RoaXMucHJvcHMuaGFzVFZQcmVmZXJyZWRGb2N1c31cbiAgICAgICAgaGl0U2xvcD17dGhpcy5wcm9wcy5oaXRTbG9wfVxuICAgICAgICBmb2N1c2FibGU9e1xuICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNhYmxlICE9PSBmYWxzZSAmJiB0aGlzLnByb3BzLm9uUHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIHJlZj17dGhpcy5wcm9wcy5ob3N0UmVmfVxuICAgICAgICB7Li4uZXZlbnRIYW5kbGVyc1dpdGhvdXRCbHVyQW5kRm9jdXN9PlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAge19fREVWX18gPyAoXG4gICAgICAgICAgPFByZXNzYWJpbGl0eURlYnVnVmlldyBjb2xvcj1cImN5YW5cIiBoaXRTbG9wPXt0aGlzLnByb3BzLmhpdFNsb3B9IC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBQcm9wcywgcHJldlN0YXRlOiBTdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUucHJlc3NhYmlsaXR5LmNvbmZpZ3VyZSh0aGlzLl9jcmVhdGVQcmVzc2FiaWxpdHlDb25maWcoKSk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlZCAhPT0gcHJldlByb3BzLmRpc2FibGVkIHx8XG4gICAgICAvLyAkRmxvd0ZpeE1lW3VuZGVyY29uc3RyYWluZWQtaW1wbGljaXQtaW5zdGFudGlhdGlvbl1cbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgZmxhdHRlblN0eWxlKHByZXZQcm9wcy5zdHlsZSk/Lm9wYWNpdHkgIT09XG4gICAgICAgIC8vICRGbG93Rml4TWVbdW5kZXJjb25zdHJhaW5lZC1pbXBsaWNpdC1pbnN0YW50aWF0aW9uXVxuICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICAgZmxhdHRlblN0eWxlKHRoaXMucHJvcHMuc3R5bGUpPy5vcGFjaXR5XG4gICAgKSB7XG4gICAgICB0aGlzLl9vcGFjaXR5SW5hY3RpdmUoMjUwKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlLnByZXNzYWJpbGl0eS5jb25maWd1cmUodGhpcy5fY3JlYXRlUHJlc3NhYmlsaXR5Q29uZmlnKCkpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5wcmVzc2FiaWxpdHkucmVzZXQoKTtcbiAgfVxufVxuXG5jb25zdCBUb3VjaGFibGU6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFxuICBQcm9wcyxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgQW5pbWF0ZWQuVmlldz4sXG4+ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4gKFxuICA8VG91Y2hhYmxlT3BhY2l0eSB7Li4ucHJvcHN9IGhvc3RSZWY9e3JlZn0gLz5cbikpO1xuXG5Ub3VjaGFibGUuZGlzcGxheU5hbWUgPSAnVG91Y2hhYmxlT3BhY2l0eSc7XG5cbm1vZHVsZS5leHBvcnRzID0gVG91Y2hhYmxlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vVW5pbXBsZW1lbnRlZFZpZXdzL1VuaW1wbGVtZW50ZWRWaWV3Jyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VCYWNrZ3JvdW5kUHJvcHN9IGZyb20gJy4vSW1hZ2VQcm9wcyc7XG5cbmltcG9ydCBWaWV3IGZyb20gJy4uL0NvbXBvbmVudHMvVmlldy9WaWV3JztcbmltcG9ydCBmbGF0dGVuU3R5bGUgZnJvbSAnLi4vU3R5bGVTaGVldC9mbGF0dGVuU3R5bGUnO1xuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBJbWFnZSBmcm9tICcuL0ltYWdlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBWZXJ5IHNpbXBsZSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciA8SW1hZ2U+IHdoaWNoIHN1cHBvcnRzIG5lc3Rpbmcgdmlld3MuXG4gKlxuICogYGBgUmVhY3ROYXRpdmVXZWJQbGF5ZXJcbiAqIGltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG4gKiBpbXBvcnQgeyBBcHBSZWdpc3RyeSwgVmlldywgSW1hZ2VCYWNrZ3JvdW5kLCBUZXh0IH0gZnJvbSAncmVhY3QtbmF0aXZlJztcbiAqXG4gKiBjbGFzcyBEaXNwbGF5QW5JbWFnZUJhY2tncm91bmQgZXh0ZW5kcyBDb21wb25lbnQge1xuICogICByZW5kZXIoKSB7XG4gKiAgICAgcmV0dXJuIChcbiAqICAgICAgIDxJbWFnZUJhY2tncm91bmRcbiAqICAgICAgICAgc3R5bGU9e3t3aWR0aDogNTAsIGhlaWdodDogNTB9fVxuICogICAgICAgICBzb3VyY2U9e3t1cmk6ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9pbWcvb3BlbmdyYXBoLnBuZyd9fVxuICogICAgICAgPlxuICogICAgICAgICA8VGV4dD5SZWFjdDwvVGV4dD5cbiAqICAgICAgIDwvSW1hZ2VCYWNrZ3JvdW5kPlxuICogICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBBcHAgcmVnaXN0cmF0aW9uIGFuZCByZW5kZXJpbmdcbiAqIEFwcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29tcG9uZW50KCdEaXNwbGF5QW5JbWFnZUJhY2tncm91bmQnLCAoKSA9PiBEaXNwbGF5QW5JbWFnZUJhY2tncm91bmQpO1xuICogYGBgXG4gKi9cbmNsYXNzIEltYWdlQmFja2dyb3VuZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJbWFnZUJhY2tncm91bmRQcm9wcz4ge1xuICBzZXROYXRpdmVQcm9wcyhwcm9wczogey4uLn0pIHtcbiAgICAvLyBXb3JrLWFyb3VuZCBmbG93XG4gICAgY29uc3Qgdmlld1JlZiA9IHRoaXMuX3ZpZXdSZWY7XG4gICAgaWYgKHZpZXdSZWYpIHtcbiAgICAgIHZpZXdSZWYuc2V0TmF0aXZlUHJvcHMocHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIF92aWV3UmVmOiA/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlldz4gPSBudWxsO1xuXG4gIF9jYXB0dXJlUmVmID0gKFxuICAgIHJlZjogbnVsbCB8IFJlYWN0JEVsZW1lbnRSZWY8XG4gICAgICBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxcbiAgICAgICAgVmlld1Byb3BzLFxuICAgICAgICBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8Vmlld1Byb3BzPj4sXG4gICAgICA+LFxuICAgID4sXG4gICkgPT4ge1xuICAgIHRoaXMuX3ZpZXdSZWYgPSByZWY7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgc3R5bGUsXG4gICAgICBpbWFnZVN0eWxlLFxuICAgICAgaW1hZ2VSZWYsXG4gICAgICBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5LFxuICAgICAgLi4ucHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vICRGbG93Rml4TWVbdW5kZXJjb25zdHJhaW5lZC1pbXBsaWNpdC1pbnN0YW50aWF0aW9uXVxuICAgIGNvbnN0IGZsYXR0ZW5lZFN0eWxlID0gZmxhdHRlblN0eWxlKHN0eWxlKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgYWNjZXNzaWJpbGl0eUlnbm9yZXNJbnZlcnRDb2xvcnM9e3RydWV9XG4gICAgICAgIGltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9e2ltcG9ydGFudEZvckFjY2Vzc2liaWxpdHl9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgcmVmPXt0aGlzLl9jYXB0dXJlUmVmfT5cbiAgICAgICAgey8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gKi99XG4gICAgICAgIDxJbWFnZVxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PXtpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5fVxuICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICBTdHlsZVNoZWV0LmFic29sdXRlRmlsbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IFdvcmthcm91bmQ6XG4gICAgICAgICAgICAgIC8vIEN1cnJlbnQgKGltcGVyZmVjdCB5ZXQpIGltcGxlbWVudGF0aW9uIG9mIDxJbWFnZT4gb3ZlcndyaXRlcyB3aWR0aCBhbmQgaGVpZ2h0IHN0eWxlc1xuICAgICAgICAgICAgICAvLyAod2hpY2ggaXMgbm90IHF1aXRlIGNvcnJlY3QpLCBhbmQgdGhlc2Ugc3R5bGVzIGNvbmZsaWN0IHdpdGggZXhwbGljaXRseSBzZXQgc3R5bGVzXG4gICAgICAgICAgICAgIC8vIG9mIDxJbWFnZUJhY2tncm91bmQ+IGFuZCB3aXRoIG91ciBpbnRlcm5hbCBsYXlvdXQgbW9kZWwgaGVyZS5cbiAgICAgICAgICAgICAgLy8gU28sIHdlIGhhdmUgdG8gcHJveHkvcmVhcHBseSB0aGVzZSBzdHlsZXMgZXhwbGljaXRseSBmb3IgYWN0dWFsIDxJbWFnZT4gY29tcG9uZW50LlxuICAgICAgICAgICAgICAvLyBUaGlzIHdvcmthcm91bmQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgaW1wbGVtZW50aW5nIHByb3BlciBzdXBwb3J0IG9mXG4gICAgICAgICAgICAgIC8vIGludHJpbnNpYyBjb250ZW50IHNpemUgb2YgdGhlIDxJbWFnZT4uXG4gICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgICAgICAgICB3aWR0aDogZmxhdHRlbmVkU3R5bGU/LndpZHRoLFxuICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICAgICAgICAgaGVpZ2h0OiBmbGF0dGVuZWRTdHlsZT8uaGVpZ2h0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltYWdlU3R5bGUsXG4gICAgICAgICAgXX1cbiAgICAgICAgICByZWY9e2ltYWdlUmVmfVxuICAgICAgICAvPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEltYWdlQmFja2dyb3VuZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgU3R5bGVTaGVldCwge1xuICB0eXBlIENvbG9yVmFsdWUsXG4gIHR5cGUgVmlld1N0eWxlUHJvcCxcbn0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IFJDVElucHV0QWNjZXNzb3J5Vmlld05hdGl2ZUNvbXBvbmVudCBmcm9tICcuL1JDVElucHV0QWNjZXNzb3J5Vmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogTm90ZTogaU9TIG9ubHlcbiAqXG4gKiBBIGNvbXBvbmVudCB3aGljaCBlbmFibGVzIGN1c3RvbWl6YXRpb24gb2YgdGhlIGtleWJvYXJkIGlucHV0IGFjY2Vzc29yeSB2aWV3LlxuICogVGhlIGlucHV0IGFjY2Vzc29yeSB2aWV3IGlzIGRpc3BsYXllZCBhYm92ZSB0aGUga2V5Ym9hcmQgd2hlbmV2ZXIgYSBUZXh0SW5wdXRcbiAqIGhhcyBmb2N1cy4gVGhpcyBjb21wb25lbnQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGN1c3RvbSB0b29sYmFycy5cbiAqXG4gKiBUbyB1c2UgdGhpcyBjb21wb25lbnQgd3JhcCB5b3VyIGN1c3RvbSB0b29sYmFyIHdpdGggdGhlXG4gKiBJbnB1dEFjY2Vzc29yeVZpZXcgY29tcG9uZW50LCBhbmQgc2V0IGEgbmF0aXZlSUQuIFRoZW4sIHBhc3MgdGhhdCBuYXRpdmVJRFxuICogYXMgdGhlIGlucHV0QWNjZXNzb3J5Vmlld0lEIG9mIHdoYXRldmVyIFRleHRJbnB1dCB5b3UgZGVzaXJlLiBBIHNpbXBsZVxuICogZXhhbXBsZTpcbiAqXG4gKiBgYGBSZWFjdE5hdGl2ZVdlYlBsYXllclxuICogaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbiAqIGltcG9ydCB7IEFwcFJlZ2lzdHJ5LCBUZXh0SW5wdXQsIElucHV0QWNjZXNzb3J5VmlldywgQnV0dG9uIH0gZnJvbSAncmVhY3QtbmF0aXZlJztcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VsZXNzVGV4dElucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAqICAgICBzdXBlcihwcm9wcyk7XG4gKiAgICAgdGhpcy5zdGF0ZSA9IHt0ZXh0OiAnUGxhY2Vob2xkZXIgVGV4dCd9O1xuICogICB9XG4gKlxuICogICByZW5kZXIoKSB7XG4gKiAgICAgY29uc3QgaW5wdXRBY2Nlc3NvcnlWaWV3SUQgPSBcInVuaXF1ZUlEXCI7XG4gKiAgICAgcmV0dXJuIChcbiAqICAgICAgIDxWaWV3PlxuICogICAgICAgICA8U2Nyb2xsVmlldyBrZXlib2FyZERpc21pc3NNb2RlPVwiaW50ZXJhY3RpdmVcIj5cbiAqICAgICAgICAgICA8VGV4dElucHV0XG4gKiAgICAgICAgICAgICBzdHlsZT17e1xuICogICAgICAgICAgICAgICBwYWRkaW5nOiAxMCxcbiAqICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogNTAsXG4gKiAgICAgICAgICAgICB9fVxuICogICAgICAgICAgICAgaW5wdXRBY2Nlc3NvcnlWaWV3SUQ9aW5wdXRBY2Nlc3NvcnlWaWV3SURcbiAqICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGV4dCA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0fSl9XG4gKiAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS50ZXh0fVxuICogICAgICAgICAgIC8+XG4gKiAgICAgICAgIDwvU2Nyb2xsVmlldz5cbiAqICAgICAgICAgPElucHV0QWNjZXNzb3J5VmlldyBuYXRpdmVJRD1pbnB1dEFjY2Vzc29yeVZpZXdJRD5cbiAqICAgICAgICAgICA8QnV0dG9uXG4gKiAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0OiAnUGxhY2Vob2xkZXIgVGV4dCd9KX1cbiAqICAgICAgICAgICAgIHRpdGxlPVwiUmVzZXQgVGV4dFwiXG4gKiAgICAgICAgICAgLz5cbiAqICAgICAgICAgPC9JbnB1dEFjY2Vzc29yeVZpZXc+XG4gKiAgICAgICA8L1ZpZXc+XG4gKiAgICAgKTtcbiAqICAgfVxuICogfVxuICpcbiAqIC8vIHNraXAgdGhpcyBsaW5lIGlmIHVzaW5nIENyZWF0ZSBSZWFjdCBOYXRpdmUgQXBwXG4gKiBBcHBSZWdpc3RyeS5yZWdpc3RlckNvbXBvbmVudCgnQXdlc29tZVByb2plY3QnLCAoKSA9PiBVc2VsZXNzVGV4dElucHV0KTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgY29tcG9uZW50IGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIHN0aWNreSB0ZXh0IGlucHV0cyAodGV4dCBpbnB1dHNcbiAqIHdoaWNoIGFyZSBhbmNob3JlZCB0byB0aGUgdG9wIG9mIHRoZSBrZXlib2FyZCkuIFRvIGRvIHRoaXMsIHdyYXAgYVxuICogVGV4dElucHV0IHdpdGggdGhlIElucHV0QWNjZXNzb3J5VmlldyBjb21wb25lbnQsIGFuZCBkb24ndCBzZXQgYSBuYXRpdmVJRC5cbiAqIEZvciBhbiBleGFtcGxlLCBsb29rIGF0IElucHV0QWNjZXNzb3J5Vmlld0V4YW1wbGUuanMgaW4gUk5UZXN0ZXIuXG4gKi9cblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICArY2hpbGRyZW46IFJlYWN0Lk5vZGUsXG4gIC8qKlxuICAgKiBBbiBJRCB3aGljaCBpcyB1c2VkIHRvIGFzc29jaWF0ZSB0aGlzIGBJbnB1dEFjY2Vzc29yeVZpZXdgIHRvXG4gICAqIHNwZWNpZmllZCBUZXh0SW5wdXQocykuXG4gICAqL1xuICBuYXRpdmVJRD86ID9zdHJpbmcsXG4gIHN0eWxlPzogP1ZpZXdTdHlsZVByb3AsXG4gIGJhY2tncm91bmRDb2xvcj86ID9Db2xvclZhbHVlLFxufH0+O1xuXG5jb25zdCBJbnB1dEFjY2Vzc29yeVZpZXc6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFByb3BzPiA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgIGlmIChSZWFjdC5DaGlsZHJlbi5jb3VudChwcm9wcy5jaGlsZHJlbikgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UkNUSW5wdXRBY2Nlc3NvcnlWaWV3TmF0aXZlQ29tcG9uZW50XG4gICAgICAgIHN0eWxlPXtbcHJvcHMuc3R5bGUsIHN0eWxlcy5jb250YWluZXJdfVxuICAgICAgICBuYXRpdmVJRD17cHJvcHMubmF0aXZlSUR9XG4gICAgICAgIGJhY2tncm91bmRDb2xvcj17cHJvcHMuYmFja2dyb3VuZENvbG9yfT5cbiAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgPC9SQ1RJbnB1dEFjY2Vzc29yeVZpZXdOYXRpdmVDb21wb25lbnQ+XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oJzxJbnB1dEFjY2Vzc29yeVZpZXc+IGlzIG9ubHkgc3VwcG9ydGVkIG9uIGlPUy4nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dEFjY2Vzc29yeVZpZXc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9SQ1RJbnB1dEFjY2Vzc29yeVZpZXdOYXRpdmVDb21wb25lbnQnO1xuaW1wb3J0IFJDVElucHV0QWNjZXNzb3J5Vmlld05hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9jb21wb25lbnRzL1JDVElucHV0QWNjZXNzb3J5Vmlld05hdGl2ZUNvbXBvbmVudCc7XG5leHBvcnQgZGVmYXVsdCBSQ1RJbnB1dEFjY2Vzc29yeVZpZXdOYXRpdmVDb21wb25lbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1ZpZXdQcm9wc30gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL0NvbXBvbmVudHMvVmlldy9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCB0eXBlIHtIb3N0Q29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7Q29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbXBvbmVudCc7XG5cbnR5cGUgTmF0aXZlUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLi4uVmlld1Byb3BzLFxuICBiYWNrZ3JvdW5kQ29sb3I/OiA/Q29sb3JWYWx1ZSxcbnx9PjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvZGVnZW5OYXRpdmVDb21wb25lbnQ8TmF0aXZlUHJvcHM+KCdJbnB1dEFjY2Vzc29yeScsIHtcbiAgaW50ZXJmYWNlT25seTogdHJ1ZSxcbiAgcGFwZXJDb21wb25lbnROYW1lOiAnUkNUSW5wdXRBY2Nlc3NvcnlWaWV3JyxcbiAgZXhjbHVkZWRQbGF0Zm9ybXM6IFsnYW5kcm9pZCddLFxufSk6IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1N0eWxlUHJvcH0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtcbiAgVmlld0xheW91dCxcbiAgVmlld0xheW91dEV2ZW50LFxuICBWaWV3UHJvcHMsXG59IGZyb20gJy4uL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7S2V5Ym9hcmRFdmVudCwgS2V5Ym9hcmRNZXRyaWNzfSBmcm9tICcuL0tleWJvYXJkJztcblxuaW1wb3J0IExheW91dEFuaW1hdGlvbiBmcm9tICcuLi8uLi9MYXlvdXRBbmltYXRpb24vTGF5b3V0QW5pbWF0aW9uJztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCB7dHlwZSBFdmVudFN1YnNjcmlwdGlvbn0gZnJvbSAnLi4vLi4vdmVuZG9yL2VtaXR0ZXIvRXZlbnRFbWl0dGVyJztcbmltcG9ydCBBY2Nlc3NpYmlsaXR5SW5mbyBmcm9tICcuLi9BY2Nlc3NpYmlsaXR5SW5mby9BY2Nlc3NpYmlsaXR5SW5mbyc7XG5pbXBvcnQgVmlldyBmcm9tICcuLi9WaWV3L1ZpZXcnO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4vS2V5Ym9hcmQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcblxuICAvKipcbiAgICogU3BlY2lmeSBob3cgdG8gcmVhY3QgdG8gdGhlIHByZXNlbmNlIG9mIHRoZSBrZXlib2FyZC5cbiAgICovXG4gIGJlaGF2aW9yPzogPygnaGVpZ2h0JyB8ICdwb3NpdGlvbicgfCAncGFkZGluZycpLFxuXG4gIC8qKlxuICAgKiBTdHlsZSBvZiB0aGUgY29udGVudCBjb250YWluZXIgd2hlbiBgYmVoYXZpb3JgIGlzICdwb3NpdGlvbicuXG4gICAqL1xuICBjb250ZW50Q29udGFpbmVyU3R5bGU/OiA/Vmlld1N0eWxlUHJvcCxcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0aGlzIGBLZXlib2FyZEF2b2lkaW5nVmlld2AgaW5zdGFuY2Ugc2hvdWxkIHRha2UgZWZmZWN0LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIG1vcmUgdGhhbiBvbmUgaXMgb24gdGhlIHNjcmVlbi4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIGVuYWJsZWQ/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogRGlzdGFuY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSB1c2VyIHNjcmVlbiBhbmQgdGhlIFJlYWN0IE5hdGl2ZSB2aWV3LiBUaGlzXG4gICAqIG1heSBiZSBub24temVybyBpbiBzb21lIGNhc2VzLiBEZWZhdWx0cyB0byAwLlxuICAgKi9cbiAga2V5Ym9hcmRWZXJ0aWNhbE9mZnNldD86IG51bWJlcixcbnx9PjtcblxudHlwZSBTdGF0ZSA9IHt8XG4gIGJvdHRvbTogbnVtYmVyLFxufH07XG5cbi8qKlxuICogVmlldyB0aGF0IG1vdmVzIG91dCBvZiB0aGUgd2F5IHdoZW4gdGhlIGtleWJvYXJkIGFwcGVhcnMgYnkgYXV0b21hdGljYWxseVxuICogYWRqdXN0aW5nIGl0cyBoZWlnaHQsIHBvc2l0aW9uLCBvciBib3R0b20gcGFkZGluZy5cbiAqL1xuY2xhc3MgS2V5Ym9hcmRBdm9pZGluZ1ZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIF9mcmFtZTogP1ZpZXdMYXlvdXQgPSBudWxsO1xuICBfa2V5Ym9hcmRFdmVudDogP0tleWJvYXJkRXZlbnQgPSBudWxsO1xuICBfc3Vic2NyaXB0aW9uczogQXJyYXk8RXZlbnRTdWJzY3JpcHRpb24+ID0gW107XG4gIHZpZXdSZWY6IHtjdXJyZW50OiBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBWaWV3PiB8IG51bGwsIC4uLn07XG4gIF9pbml0aWFsRnJhbWVIZWlnaHQ6IG51bWJlciA9IDA7XG4gIF9ib3R0b206IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7Ym90dG9tOiAwfTtcbiAgICB0aGlzLnZpZXdSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGFzeW5jIF9yZWxhdGl2ZUtleWJvYXJkSGVpZ2h0KFxuICAgIGtleWJvYXJkRnJhbWU6IEtleWJvYXJkTWV0cmljcyxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIGlmICghZnJhbWUgfHwgIWtleWJvYXJkRnJhbWUpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIE9uIGlPUyB3aGVuIFByZWZlciBDcm9zcy1GYWRlIFRyYW5zaXRpb25zIGlzIGVuYWJsZWQsIHRoZSBrZXlib2FyZCBwb3NpdGlvblxuICAgIC8vICYgaGVpZ2h0IGlzIHJlcG9ydGVkIGRpZmZlcmVudGx5ICgwIGluc3RlYWQgb2YgWSBwb3NpdGlvbiB2YWx1ZSBtYXRjaGluZyBoZWlnaHQgb2YgZnJhbWUpXG4gICAgaWYgKFxuICAgICAgUGxhdGZvcm0uT1MgPT09ICdpb3MnICYmXG4gICAgICBrZXlib2FyZEZyYW1lLnNjcmVlblkgPT09IDAgJiZcbiAgICAgIChhd2FpdCBBY2Nlc3NpYmlsaXR5SW5mby5wcmVmZXJzQ3Jvc3NGYWRlVHJhbnNpdGlvbnMoKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGtleWJvYXJkWSA9XG4gICAgICBrZXlib2FyZEZyYW1lLnNjcmVlblkgLSAodGhpcy5wcm9wcy5rZXlib2FyZFZlcnRpY2FsT2Zmc2V0ID8/IDApO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuYmVoYXZpb3IgPT09ICdoZWlnaHQnKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuc3RhdGUuYm90dG9tICsgZnJhbWUueSArIGZyYW1lLmhlaWdodCAtIGtleWJvYXJkWSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXNwbGFjZW1lbnQgbmVlZGVkIGZvciB0aGUgdmlldyBzdWNoIHRoYXQgaXRcbiAgICAvLyBubyBsb25nZXIgb3ZlcmxhcHMgd2l0aCB0aGUga2V5Ym9hcmRcbiAgICByZXR1cm4gTWF0aC5tYXgoZnJhbWUueSArIGZyYW1lLmhlaWdodCAtIGtleWJvYXJkWSwgMCk7XG4gIH1cblxuICBfb25LZXlib2FyZENoYW5nZSA9IChldmVudDogP0tleWJvYXJkRXZlbnQpID0+IHtcbiAgICB0aGlzLl9rZXlib2FyZEV2ZW50ID0gZXZlbnQ7XG4gICAgLy8gJEZsb3dGaXhNZVt1bnVzZWQtcHJvbWlzZV1cbiAgICB0aGlzLl91cGRhdGVCb3R0b21JZk5lY2Vzc2FyeSgpO1xuICB9O1xuXG4gIF9vbkxheW91dCA9IGFzeW5jIChldmVudDogVmlld0xheW91dEV2ZW50KSA9PiB7XG4gICAgY29uc3Qgb2xkRnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB0aGlzLl9mcmFtZSA9IGV2ZW50Lm5hdGl2ZUV2ZW50LmxheW91dDtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxGcmFtZUhlaWdodCkge1xuICAgICAgLy8gc2F2ZSB0aGUgaW5pdGlhbCBmcmFtZSBoZWlnaHQsIGJlZm9yZSB0aGUga2V5Ym9hcmQgaXMgdmlzaWJsZVxuICAgICAgdGhpcy5faW5pdGlhbEZyYW1lSGVpZ2h0ID0gdGhpcy5fZnJhbWUuaGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBib3R0b20gaGVpZ2h0IGZvciB0aGUgZmlyc3QgdGltZSBvciB3aGVuIHRoZSBoZWlnaHQgaXMgY2hhbmdlZFxuICAgIGlmICghb2xkRnJhbWUgfHwgb2xkRnJhbWUuaGVpZ2h0ICE9PSB0aGlzLl9mcmFtZS5oZWlnaHQpIHtcbiAgICAgIGF3YWl0IHRoaXMuX3VwZGF0ZUJvdHRvbUlmTmVjZXNzYXJ5KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25MYXlvdXQpIHtcbiAgICAgIHRoaXMucHJvcHMub25MYXlvdXQoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICAvLyBBdm9pZCB1bm5lY2Vzc2FyeSByZW5kZXJzIGlmIHRoZSBLZXlib2FyZEF2b2lkaW5nVmlldyBpcyBkaXNhYmxlZC5cbiAgX3NldEJvdHRvbSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZW5hYmxlZCA9IHRoaXMucHJvcHMuZW5hYmxlZCA/PyB0cnVlO1xuICAgIHRoaXMuX2JvdHRvbSA9IHZhbHVlO1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtib3R0b206IHZhbHVlfSk7XG4gICAgfVxuICB9O1xuXG4gIF91cGRhdGVCb3R0b21JZk5lY2Vzc2FyeSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAodGhpcy5fa2V5Ym9hcmRFdmVudCA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9zZXRCb3R0b20oMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2R1cmF0aW9uLCBlYXNpbmcsIGVuZENvb3JkaW5hdGVzfSA9IHRoaXMuX2tleWJvYXJkRXZlbnQ7XG4gICAgY29uc3QgaGVpZ2h0ID0gYXdhaXQgdGhpcy5fcmVsYXRpdmVLZXlib2FyZEhlaWdodChlbmRDb29yZGluYXRlcyk7XG5cbiAgICBpZiAodGhpcy5fYm90dG9tID09PSBoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRCb3R0b20oaGVpZ2h0KTtcblxuICAgIGNvbnN0IGVuYWJsZWQgPSB0aGlzLnByb3BzLmVuYWJsZWQgPz8gdHJ1ZTtcbiAgICBpZiAoZW5hYmxlZCAmJiBkdXJhdGlvbiAmJiBlYXNpbmcpIHtcbiAgICAgIExheW91dEFuaW1hdGlvbi5jb25maWd1cmVOZXh0KHtcbiAgICAgICAgLy8gV2UgaGF2ZSB0byBwYXNzIHRoZSBkdXJhdGlvbiBlcXVhbCB0byBtaW5pbWFsIGFjY2VwdGVkIGR1cmF0aW9uIGRlZmluZWQgaGVyZTogUkNUTGF5b3V0QW5pbWF0aW9uLm1cbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uID4gMTAgPyBkdXJhdGlvbiA6IDEwLFxuICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gPiAxMCA/IGR1cmF0aW9uIDogMTAsXG4gICAgICAgICAgdHlwZTogTGF5b3V0QW5pbWF0aW9uLlR5cGVzW2Vhc2luZ10gfHwgJ2tleWJvYXJkJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb21wb25lbnREaWRVcGRhdGUoXzogUHJvcHMsIHByZXZTdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBlbmFibGVkID0gdGhpcy5wcm9wcy5lbmFibGVkID8/IHRydWU7XG4gICAgaWYgKGVuYWJsZWQgJiYgdGhpcy5fYm90dG9tICE9PSBwcmV2U3RhdGUuYm90dG9tKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtib3R0b206IHRoaXMuX2JvdHRvbX0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCk6IHZvaWQge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2lvcycpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXG4gICAgICAgIEtleWJvYXJkLmFkZExpc3RlbmVyKCdrZXlib2FyZFdpbGxDaGFuZ2VGcmFtZScsIHRoaXMuX29uS2V5Ym9hcmRDaGFuZ2UpLFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgICAgS2V5Ym9hcmQuYWRkTGlzdGVuZXIoJ2tleWJvYXJkRGlkSGlkZScsIHRoaXMuX29uS2V5Ym9hcmRDaGFuZ2UpLFxuICAgICAgICBLZXlib2FyZC5hZGRMaXN0ZW5lcigna2V5Ym9hcmREaWRTaG93JywgdGhpcy5fb25LZXlib2FyZENoYW5nZSksXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnJlbW92ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHtcbiAgICAgIGJlaGF2aW9yLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb250ZW50Q29udGFpbmVyU3R5bGUsXG4gICAgICBlbmFibGVkID0gdHJ1ZSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAga2V5Ym9hcmRWZXJ0aWNhbE9mZnNldCA9IDAsXG4gICAgICBzdHlsZSxcbiAgICAgIG9uTGF5b3V0LFxuICAgICAgLi4ucHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBib3R0b21IZWlnaHQgPSBlbmFibGVkID09PSB0cnVlID8gdGhpcy5zdGF0ZS5ib3R0b20gOiAwO1xuICAgIHN3aXRjaCAoYmVoYXZpb3IpIHtcbiAgICAgIGNhc2UgJ2hlaWdodCc6XG4gICAgICAgIGxldCBoZWlnaHRTdHlsZTtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lICE9IG51bGwgJiYgdGhpcy5zdGF0ZS5ib3R0b20gPiAwKSB7XG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgYXBwbHkgYSBoZWlnaHQgY2hhbmdlIHdoZW4gdGhlcmUgaXMga2V5Ym9hcmQgcHJlc2VudCxcbiAgICAgICAgICAvLyBpLmUuIHRoaXMuc3RhdGUuYm90dG9tIGlzIGdyZWF0ZXIgdGhhbiAwLiBJZiB3ZSByZW1vdmUgdGhhdCBjb25kaXRpb24sXG4gICAgICAgICAgLy8gdGhpcy5mcmFtZS5oZWlnaHQgd2lsbCBuZXZlciBnbyBiYWNrIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAvLyBXaGVuIGhlaWdodCBjaGFuZ2VzLCB3ZSBuZWVkIHRvIGRpc2FibGUgZmxleC5cbiAgICAgICAgICBoZWlnaHRTdHlsZSA9IHtcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5faW5pdGlhbEZyYW1lSGVpZ2h0IC0gYm90dG9tSGVpZ2h0LFxuICAgICAgICAgICAgZmxleDogMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHJlZj17dGhpcy52aWV3UmVmfVxuICAgICAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZSwgaGVpZ2h0U3R5bGUpfVxuICAgICAgICAgICAgb25MYXlvdXQ9e3RoaXMuX29uTGF5b3V0fVxuICAgICAgICAgICAgey4uLnByb3BzfT5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgJ3Bvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgcmVmPXt0aGlzLnZpZXdSZWZ9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICBvbkxheW91dD17dGhpcy5fb25MYXlvdXR9XG4gICAgICAgICAgICB7Li4ucHJvcHN9PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShjb250ZW50Q29udGFpbmVyU3R5bGUsIHtcbiAgICAgICAgICAgICAgICBib3R0b206IGJvdHRvbUhlaWdodCxcbiAgICAgICAgICAgICAgfSl9PlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApO1xuXG4gICAgICBjYXNlICdwYWRkaW5nJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgcmVmPXt0aGlzLnZpZXdSZWZ9XG4gICAgICAgICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKHN0eWxlLCB7cGFkZGluZ0JvdHRvbTogYm90dG9tSGVpZ2h0fSl9XG4gICAgICAgICAgICBvbkxheW91dD17dGhpcy5fb25MYXlvdXR9XG4gICAgICAgICAgICB7Li4ucHJvcHN9PlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgcmVmPXt0aGlzLnZpZXdSZWZ9XG4gICAgICAgICAgICBvbkxheW91dD17dGhpcy5fb25MYXlvdXR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICB7Li4ucHJvcHN9PlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgS2V5Ym9hcmRBdm9pZGluZ1ZpZXc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1JlZk9iamVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge05vZGV9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBVbmltcGxlbWVudGVkVmlldyA9IHJlcXVpcmUoJy4uL1VuaW1wbGVtZW50ZWRWaWV3cy9VbmltcGxlbWVudGVkVmlldycpO1xuXG5leHBvcnQgdHlwZSBQb3B1cE1lbnVBbmRyb2lkSW5zdGFuY2UgPSB7XG4gICtzaG93OiAoKSA9PiB2b2lkLFxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgbWVudUl0ZW1zOiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICBvblNlbGVjdGlvbkNoYW5nZTogbnVtYmVyID0+IHZvaWQsXG4gIGNoaWxkcmVuOiBOb2RlLFxuICBpbnN0YW5jZVJlZjogUmVmT2JqZWN0PD9Qb3B1cE1lbnVBbmRyb2lkSW5zdGFuY2U+LFxufTtcblxuZnVuY3Rpb24gUG9wdXBNZW51QW5kcm9pZChwcm9wczogUHJvcHMpOiBOb2RlIHtcbiAgcmV0dXJuIDxVbmltcGxlbWVudGVkVmlldyAvPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9wdXBNZW51QW5kcm9pZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7Um9vdFRhZ30gZnJvbSAnLi4vUmVhY3ROYXRpdmUvUm9vdFRhZyc7XG5pbXBvcnQgdHlwZSB7RGlyZWN0RXZlbnRIYW5kbGVyfSBmcm9tICcuLi9UeXBlcy9Db2RlZ2VuVHlwZXMnO1xuXG5pbXBvcnQgTmF0aXZlRXZlbnRFbWl0dGVyIGZyb20gJy4uL0V2ZW50RW1pdHRlci9OYXRpdmVFdmVudEVtaXR0ZXInO1xuaW1wb3J0IHt0eXBlIEV2ZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuaW1wb3J0IE1vZGFsSW5qZWN0aW9uIGZyb20gJy4vTW9kYWxJbmplY3Rpb24nO1xuaW1wb3J0IE5hdGl2ZU1vZGFsTWFuYWdlciBmcm9tICcuL05hdGl2ZU1vZGFsTWFuYWdlcic7XG5pbXBvcnQgUkNUTW9kYWxIb3N0VmlldyBmcm9tICcuL1JDVE1vZGFsSG9zdFZpZXdOYXRpdmVDb21wb25lbnQnO1xuaW1wb3J0IHtWaXJ0dWFsaXplZExpc3RDb250ZXh0UmVzZXR0ZXJ9IGZyb20gJ0ByZWFjdC1uYXRpdmUvdmlydHVhbGl6ZWQtbGlzdHMnO1xuXG5jb25zdCBTY3JvbGxWaWV3ID0gcmVxdWlyZSgnLi4vQ29tcG9uZW50cy9TY3JvbGxWaWV3L1Njcm9sbFZpZXcnKTtcbmNvbnN0IFZpZXcgPSByZXF1aXJlKCcuLi9Db21wb25lbnRzL1ZpZXcvVmlldycpO1xuY29uc3QgQXBwQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vUmVhY3ROYXRpdmUvQXBwQ29udGFpbmVyJyk7XG5jb25zdCBJMThuTWFuYWdlciA9IHJlcXVpcmUoJy4uL1JlYWN0TmF0aXZlL0kxOG5NYW5hZ2VyJyk7XG5jb25zdCB7Um9vdFRhZ0NvbnRleHR9ID0gcmVxdWlyZSgnLi4vUmVhY3ROYXRpdmUvUm9vdFRhZycpO1xuY29uc3QgU3R5bGVTaGVldCA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCcpO1xuY29uc3QgUGxhdGZvcm0gPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudHlwZSBNb2RhbEV2ZW50RGVmaW5pdGlvbnMgPSB7XG4gIG1vZGFsRGlzbWlzc2VkOiBbe21vZGFsSUQ6IG51bWJlcn1dLFxufTtcblxuY29uc3QgTW9kYWxFdmVudEVtaXR0ZXIgPVxuICBQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgJiYgTmF0aXZlTW9kYWxNYW5hZ2VyICE9IG51bGxcbiAgICA/IG5ldyBOYXRpdmVFdmVudEVtaXR0ZXI8TW9kYWxFdmVudERlZmluaXRpb25zPihcbiAgICAgICAgLy8gVDg4NzE1MDYzOiBOYXRpdmVFdmVudEVtaXR0ZXIgb25seSB1c2VkIHRoaXMgcGFyYW1ldGVyIG9uIGlPUy4gTm93IGl0IHVzZXMgaXQgb24gYWxsIHBsYXRmb3Jtcywgc28gdGhpcyBjb2RlIHdhcyBtb2RpZmllZCBhdXRvbWF0aWNhbGx5IHRvIHByZXNlcnZlIGl0cyBiZWhhdmlvclxuICAgICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG5hdGl2ZSBtb2R1bGUgb24gb3RoZXIgcGxhdGZvcm1zLCBwbGVhc2UgcmVtb3ZlIHRoaXMgY29uZGl0aW9uIGFuZCB0ZXN0IGl0cyBiZWhhdmlvclxuICAgICAgICBQbGF0Zm9ybS5PUyAhPT0gJ2lvcycgPyBudWxsIDogTmF0aXZlTW9kYWxNYW5hZ2VyLFxuICAgICAgKVxuICAgIDogbnVsbDtcblxuLyoqXG4gKiBUaGUgTW9kYWwgY29tcG9uZW50IGlzIGEgc2ltcGxlIHdheSB0byBwcmVzZW50IGNvbnRlbnQgYWJvdmUgYW4gZW5jbG9zaW5nIHZpZXcuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWxcbiAqL1xuXG4vLyBJbiBvcmRlciB0byByb3V0ZSBvbkRpc21pc3MgY2FsbGJhY2tzLCB3ZSBuZWVkIHRvIHVuaXF1ZWx5IGlkZW50aWZpZXIgZWFjaFxuLy8gPE1vZGFsPiBvbiBzY3JlZW4uIFRoZXJlIGNhbiBiZSBkaWZmZXJlbnQgb25lcywgZWl0aGVyIG5lc3RlZCBvciBhcyBzaWJsaW5ncy5cbi8vIFdlIGNhbm5vdCBwYXNzIHRoZSBvbkRpc21pc3MgY2FsbGJhY2sgdG8gbmF0aXZlIGFzIHRoZSB2aWV3IHdpbGwgYmVcbi8vIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGlzIGZpcmVkLlxubGV0IHVuaXF1ZU1vZGFsSWRlbnRpZmllciA9IDA7XG5cbnR5cGUgT3JpZW50YXRpb25DaGFuZ2VFdmVudCA9ICRSZWFkT25seTx7fFxuICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0JyB8ICdsYW5kc2NhcGUnLFxufH0+O1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi5WaWV3UHJvcHMsXG5cbiAgLyoqXG4gICAqIFRoZSBgYW5pbWF0aW9uVHlwZWAgcHJvcCBjb250cm9scyBob3cgdGhlIG1vZGFsIGFuaW1hdGVzLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9tb2RhbCNhbmltYXRpb250eXBlXG4gICAqL1xuICBhbmltYXRpb25UeXBlPzogPygnbm9uZScgfCAnc2xpZGUnIHwgJ2ZhZGUnKSxcblxuICAvKipcbiAgICogVGhlIGBwcmVzZW50YXRpb25TdHlsZWAgcHJvcCBjb250cm9scyBob3cgdGhlIG1vZGFsIGFwcGVhcnMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI3ByZXNlbnRhdGlvbnN0eWxlXG4gICAqL1xuICBwcmVzZW50YXRpb25TdHlsZT86ID8oXG4gICAgfCAnZnVsbFNjcmVlbidcbiAgICB8ICdwYWdlU2hlZXQnXG4gICAgfCAnZm9ybVNoZWV0J1xuICAgIHwgJ292ZXJGdWxsU2NyZWVuJ1xuICApLFxuXG4gIC8qKlxuICAgKiBUaGUgYHRyYW5zcGFyZW50YCBwcm9wIGRldGVybWluZXMgd2hldGhlciB5b3VyIG1vZGFsIHdpbGwgZmlsbCB0aGVcbiAgICogZW50aXJlIHZpZXcuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI3RyYW5zcGFyZW50XG4gICAqL1xuICB0cmFuc3BhcmVudD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBUaGUgYHN0YXR1c0JhclRyYW5zbHVjZW50YCBwcm9wIGRldGVybWluZXMgd2hldGhlciB5b3VyIG1vZGFsIHNob3VsZCBnbyB1bmRlclxuICAgKiB0aGUgc3lzdGVtIHN0YXR1c2Jhci5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwuaHRtbCNzdGF0dXNiYXJ0cmFuc2x1Y2VudC1hbmRyb2lkXG4gICAqL1xuICBzdGF0dXNCYXJUcmFuc2x1Y2VudD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBUaGUgYGhhcmR3YXJlQWNjZWxlcmF0ZWRgIHByb3AgY29udHJvbHMgd2hldGhlciB0byBmb3JjZSBoYXJkd2FyZVxuICAgKiBhY2NlbGVyYXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nIHdpbmRvdy5cbiAgICpcbiAgICogVGhpcyBwcm9wIHdvcmtzIG9ubHkgb24gQW5kcm9pZC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwjaGFyZHdhcmVhY2NlbGVyYXRlZFxuICAgKi9cbiAgaGFyZHdhcmVBY2NlbGVyYXRlZD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBUaGUgYHZpc2libGVgIHByb3AgZGV0ZXJtaW5lcyB3aGV0aGVyIHlvdXIgbW9kYWwgaXMgdmlzaWJsZS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwjdmlzaWJsZVxuICAgKi9cbiAgdmlzaWJsZT86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBUaGUgYG9uUmVxdWVzdENsb3NlYCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB0YXBzIHRoZSBoYXJkd2FyZVxuICAgKiBiYWNrIGJ1dHRvbiBvbiBBbmRyb2lkIG9yIHRoZSBtZW51IGJ1dHRvbiBvbiBBcHBsZSBUVi5cbiAgICpcbiAgICogVGhpcyBpcyByZXF1aXJlZCBvbiBBcHBsZSBUViBhbmQgQW5kcm9pZC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwjb25yZXF1ZXN0Y2xvc2VcbiAgICovXG4gIG9uUmVxdWVzdENsb3NlPzogP0RpcmVjdEV2ZW50SGFuZGxlcjxudWxsPixcblxuICAvKipcbiAgICogVGhlIGBvblNob3dgIHByb3AgYWxsb3dzIHBhc3NpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgdGhlXG4gICAqIG1vZGFsIGhhcyBiZWVuIHNob3duLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9tb2RhbCNvbnNob3dcbiAgICovXG4gIG9uU2hvdz86ID9EaXJlY3RFdmVudEhhbmRsZXI8bnVsbD4sXG5cbiAgLyoqXG4gICAqIFRoZSBgb25EaXNtaXNzYCBwcm9wIGFsbG93cyBwYXNzaW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlXG4gICAqIHRoZSBtb2RhbCBoYXMgYmVlbiBkaXNtaXNzZWQuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI29uZGlzbWlzc1xuICAgKi9cbiAgb25EaXNtaXNzPzogPygpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBUaGUgYHN1cHBvcnRlZE9yaWVudGF0aW9uc2AgcHJvcCBhbGxvd3MgdGhlIG1vZGFsIHRvIGJlIHJvdGF0ZWQgdG8gYW55IG9mIHRoZSBzcGVjaWZpZWQgb3JpZW50YXRpb25zLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9tb2RhbCNzdXBwb3J0ZWRvcmllbnRhdGlvbnNcbiAgICovXG4gIHN1cHBvcnRlZE9yaWVudGF0aW9ucz86ID8kUmVhZE9ubHlBcnJheTxcbiAgICB8ICdwb3J0cmFpdCdcbiAgICB8ICdwb3J0cmFpdC11cHNpZGUtZG93bidcbiAgICB8ICdsYW5kc2NhcGUnXG4gICAgfCAnbGFuZHNjYXBlLWxlZnQnXG4gICAgfCAnbGFuZHNjYXBlLXJpZ2h0JyxcbiAgPixcblxuICAvKipcbiAgICogVGhlIGBvbk9yaWVudGF0aW9uQ2hhbmdlYCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgb3JpZW50YXRpb24gY2hhbmdlcyB3aGlsZSB0aGUgbW9kYWwgaXMgYmVpbmcgZGlzcGxheWVkLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9tb2RhbCNvbm9yaWVudGF0aW9uY2hhbmdlXG4gICAqL1xuICBvbk9yaWVudGF0aW9uQ2hhbmdlPzogP0RpcmVjdEV2ZW50SGFuZGxlcjxPcmllbnRhdGlvbkNoYW5nZUV2ZW50Pixcbnx9PjtcblxuZnVuY3Rpb24gY29uZmlybVByb3BzKHByb3BzOiBQcm9wcykge1xuICBpZiAoX19ERVZfXykge1xuICAgIGlmIChcbiAgICAgIHByb3BzLnByZXNlbnRhdGlvblN0eWxlICYmXG4gICAgICBwcm9wcy5wcmVzZW50YXRpb25TdHlsZSAhPT0gJ292ZXJGdWxsU2NyZWVuJyAmJlxuICAgICAgcHJvcHMudHJhbnNwYXJlbnQgPT09IHRydWVcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE1vZGFsIHdpdGggJyR7cHJvcHMucHJlc2VudGF0aW9uU3R5bGV9JyBwcmVzZW50YXRpb24gc3R5bGUgYW5kICd0cmFuc3BhcmVudCcgdmFsdWUgaXMgbm90IHN1cHBvcnRlZC5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQ3JlYXRlIGEgc3RhdGUgdG8gdHJhY2sgd2hldGhlciB0aGUgTW9kYWwgaXMgcmVuZGVyaW5nIG9yIG5vdC5cbi8vIFRoaXMgaXMgdGhlIG9ubHkgcHJvcCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgdGhlIG1vZGFsIGlzIHJlbmRlcmVkIG9yIG5vdC5cbnR5cGUgU3RhdGUgPSB7XG4gIGlzUmVuZGVyZWQ6IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wczoge3xoYXJkd2FyZUFjY2VsZXJhdGVkOiBib29sZWFuLCB2aXNpYmxlOiBib29sZWFufH0gPSB7XG4gICAgdmlzaWJsZTogdHJ1ZSxcbiAgICBoYXJkd2FyZUFjY2VsZXJhdGVkOiBmYWxzZSxcbiAgfTtcblxuICBzdGF0aWMgY29udGV4dFR5cGU6IFJlYWN0LkNvbnRleHQ8Um9vdFRhZz4gPSBSb290VGFnQ29udGV4dDtcblxuICBfaWRlbnRpZmllcjogbnVtYmVyO1xuICBfZXZlbnRTdWJzY3JpcHRpb246ID9FdmVudFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGNvbmZpcm1Qcm9wcyhwcm9wcyk7XG4gICAgfVxuICAgIHRoaXMuX2lkZW50aWZpZXIgPSB1bmlxdWVNb2RhbElkZW50aWZpZXIrKztcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNSZW5kZXJlZDogcHJvcHMudmlzaWJsZSA9PT0gdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gJ21vZGFsRGlzbWlzc2VkJyBpcyBmb3IgdGhlIG9sZCByZW5kZXJlciBpbiBpT1Mgb25seVxuICAgIGlmIChNb2RhbEV2ZW50RW1pdHRlcikge1xuICAgICAgdGhpcy5fZXZlbnRTdWJzY3JpcHRpb24gPSBNb2RhbEV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lcihcbiAgICAgICAgJ21vZGFsRGlzbWlzc2VkJyxcbiAgICAgICAgZXZlbnQgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzUmVuZGVyZWQ6IGZhbHNlfSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm1vZGFsSUQgPT09IHRoaXMuX2lkZW50aWZpZXIgJiYgdGhpcy5wcm9wcy5vbkRpc21pc3MpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkRpc21pc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7aXNSZW5kZXJlZDogZmFsc2V9KTtcbiAgICBpZiAodGhpcy5fZXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2V2ZW50U3Vic2NyaXB0aW9uLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFByb3BzKSB7XG4gICAgaWYgKHByZXZQcm9wcy52aXNpYmxlID09PSBmYWxzZSAmJiB0aGlzLnByb3BzLnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2lzUmVuZGVyZWQ6IHRydWV9KTtcbiAgICB9XG5cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgY29uZmlybVByb3BzKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBsb2dpYyB0byBzaG93IG9yIG5vdCB0aGUgTW9kYWwuXG4gIF9zaG91bGRTaG93TW9kYWwoKTogYm9vbGVhbiB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmlzaWJsZSA9PT0gdHJ1ZSB8fCB0aGlzLnN0YXRlLmlzUmVuZGVyZWQgPT09IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMudmlzaWJsZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBpZiAoIXRoaXMuX3Nob3VsZFNob3dNb2RhbCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXJTdHlsZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgIHRoaXMucHJvcHMudHJhbnNwYXJlbnQgPT09IHRydWUgPyAndHJhbnNwYXJlbnQnIDogJ3doaXRlJyxcbiAgICB9O1xuXG4gICAgbGV0IGFuaW1hdGlvblR5cGUgPSB0aGlzLnByb3BzLmFuaW1hdGlvblR5cGUgfHwgJ25vbmUnO1xuXG4gICAgbGV0IHByZXNlbnRhdGlvblN0eWxlID0gdGhpcy5wcm9wcy5wcmVzZW50YXRpb25TdHlsZTtcbiAgICBpZiAoIXByZXNlbnRhdGlvblN0eWxlKSB7XG4gICAgICBwcmVzZW50YXRpb25TdHlsZSA9ICdmdWxsU2NyZWVuJztcbiAgICAgIGlmICh0aGlzLnByb3BzLnRyYW5zcGFyZW50ID09PSB0cnVlKSB7XG4gICAgICAgIHByZXNlbnRhdGlvblN0eWxlID0gJ292ZXJGdWxsU2NyZWVuJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbm5lckNoaWxkcmVuID0gX19ERVZfXyA/IChcbiAgICAgIDxBcHBDb250YWluZXIgcm9vdFRhZz17dGhpcy5jb250ZXh0fT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L0FwcENvbnRhaW5lcj5cbiAgICApIDogKFxuICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICk7XG5cbiAgICBjb25zdCBvbkRpc21pc3MgPSAoKSA9PiB7XG4gICAgICAvLyBPbkRpc21pc3MgaXMgaW1wbGVtZW50ZWQgb24gaU9TIG9ubHkuXG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzUmVuZGVyZWQ6IGZhbHNlfSwgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLm9uRGlzbWlzcykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkRpc21pc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJDVE1vZGFsSG9zdFZpZXdcbiAgICAgICAgYW5pbWF0aW9uVHlwZT17YW5pbWF0aW9uVHlwZX1cbiAgICAgICAgcHJlc2VudGF0aW9uU3R5bGU9e3ByZXNlbnRhdGlvblN0eWxlfVxuICAgICAgICB0cmFuc3BhcmVudD17dGhpcy5wcm9wcy50cmFuc3BhcmVudH1cbiAgICAgICAgaGFyZHdhcmVBY2NlbGVyYXRlZD17dGhpcy5wcm9wcy5oYXJkd2FyZUFjY2VsZXJhdGVkfVxuICAgICAgICBvblJlcXVlc3RDbG9zZT17dGhpcy5wcm9wcy5vblJlcXVlc3RDbG9zZX1cbiAgICAgICAgb25TaG93PXt0aGlzLnByb3BzLm9uU2hvd31cbiAgICAgICAgb25EaXNtaXNzPXtvbkRpc21pc3N9XG4gICAgICAgIHZpc2libGU9e3RoaXMucHJvcHMudmlzaWJsZX1cbiAgICAgICAgc3RhdHVzQmFyVHJhbnNsdWNlbnQ9e3RoaXMucHJvcHMuc3RhdHVzQmFyVHJhbnNsdWNlbnR9XG4gICAgICAgIGlkZW50aWZpZXI9e3RoaXMuX2lkZW50aWZpZXJ9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMubW9kYWx9XG4gICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcj17dGhpcy5fc2hvdWxkU2V0UmVzcG9uZGVyfVxuICAgICAgICBzdXBwb3J0ZWRPcmllbnRhdGlvbnM9e3RoaXMucHJvcHMuc3VwcG9ydGVkT3JpZW50YXRpb25zfVxuICAgICAgICBvbk9yaWVudGF0aW9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uT3JpZW50YXRpb25DaGFuZ2V9XG4gICAgICAgIHRlc3RJRD17dGhpcy5wcm9wcy50ZXN0SUR9PlxuICAgICAgICA8VmlydHVhbGl6ZWRMaXN0Q29udGV4dFJlc2V0dGVyPlxuICAgICAgICAgIDxTY3JvbGxWaWV3LkNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e251bGx9PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY29udGFpbmVyLCBjb250YWluZXJTdHlsZXNdfVxuICAgICAgICAgICAgICBjb2xsYXBzYWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICB7aW5uZXJDaGlsZHJlbn1cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8L1Njcm9sbFZpZXcuQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9WaXJ0dWFsaXplZExpc3RDb250ZXh0UmVzZXR0ZXI+XG4gICAgICA8L1JDVE1vZGFsSG9zdFZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIC8vIFdlIGRvbid0IHdhbnQgYW55IHJlc3BvbmRlciBldmVudHMgYnViYmxpbmcgb3V0IG9mIHRoZSBtb2RhbC5cbiAgX3Nob3VsZFNldFJlc3BvbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5jb25zdCBzaWRlID0gSTE4bk1hbmFnZXIuZ2V0Q29uc3RhbnRzKCkuaXNSVEwgPyAncmlnaHQnIDogJ2xlZnQnO1xuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBtb2RhbDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICAvKiAkRmxvd0ZpeE1lW2ludmFsaWQtY29tcHV0ZWQtcHJvcF0gKD49MC4xMTEuMCBzaXRlPXJlYWN0X25hdGl2ZV9mYikgVGhpc1xuICAgICAqIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuMTExIHdhcyBkZXBsb3llZC4gVG8gc2VlXG4gICAgICogdGhlIGVycm9yLCBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICBbc2lkZV06IDAsXG4gICAgdG9wOiAwLFxuICAgIGZsZXg6IDEsXG4gIH0sXG59KTtcblxuY29uc3QgRXhwb3J0ZWRNb2RhbDogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG4gIFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIE1vZGFsPixcbj4gPSBNb2RhbEluamVjdGlvbi51bnN0YWJsZV9Nb2RhbCA/PyBNb2RhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBFeHBvcnRlZE1vZGFsO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlb2YgTW9kYWwgZnJvbSAnLi9Nb2RhbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdW5zdGFibGVfTW9kYWw6IChudWxsOiA/TW9kYWwpLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZU1vZGFsTWFuYWdlcic7XG5pbXBvcnQgTmF0aXZlTW9kYWxNYW5hZ2VyIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlTW9kYWxNYW5hZ2VyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZU1vZGFsTWFuYWdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICAvLyBSQ1RFdmVudEVtaXR0ZXJcbiAgK2FkZExpc3RlbmVyOiAoZXZlbnROYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICtyZW1vdmVMaXN0ZW5lcnM6IChjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ01vZGFsTWFuYWdlcicpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9SQ1RNb2RhbEhvc3RWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBSQ1RNb2RhbEhvc3RWaWV3TmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvUkNUTW9kYWxIb3N0Vmlld05hdGl2ZUNvbXBvbmVudCc7XG5leHBvcnQgZGVmYXVsdCBSQ1RNb2RhbEhvc3RWaWV3TmF0aXZlQ29tcG9uZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBEaXJlY3RFdmVudEhhbmRsZXIsXG4gIEludDMyLFxuICBXaXRoRGVmYXVsdCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R5cGVzL0NvZGVnZW5UeXBlcyc7XG5cbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbXBvbmVudCc7XG5cbnR5cGUgT3JpZW50YXRpb25DaGFuZ2VFdmVudCA9ICRSZWFkT25seTx7fFxuICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0JyB8ICdsYW5kc2NhcGUnLFxufH0+O1xuXG50eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcblxuICAvKipcbiAgICogVGhlIGBhbmltYXRpb25UeXBlYCBwcm9wIGNvbnRyb2xzIGhvdyB0aGUgbW9kYWwgYW5pbWF0ZXMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI2FuaW1hdGlvbnR5cGVcbiAgICovXG4gIGFuaW1hdGlvblR5cGU/OiBXaXRoRGVmYXVsdDwnbm9uZScgfCAnc2xpZGUnIHwgJ2ZhZGUnLCAnbm9uZSc+LFxuXG4gIC8qKlxuICAgKiBUaGUgYHByZXNlbnRhdGlvblN0eWxlYCBwcm9wIGNvbnRyb2xzIGhvdyB0aGUgbW9kYWwgYXBwZWFycy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwjcHJlc2VudGF0aW9uc3R5bGVcbiAgICovXG4gIHByZXNlbnRhdGlvblN0eWxlPzogV2l0aERlZmF1bHQ8XG4gICAgJ2Z1bGxTY3JlZW4nIHwgJ3BhZ2VTaGVldCcgfCAnZm9ybVNoZWV0JyB8ICdvdmVyRnVsbFNjcmVlbicsXG4gICAgJ2Z1bGxTY3JlZW4nLFxuICA+LFxuXG4gIC8qKlxuICAgKiBUaGUgYHRyYW5zcGFyZW50YCBwcm9wIGRldGVybWluZXMgd2hldGhlciB5b3VyIG1vZGFsIHdpbGwgZmlsbCB0aGVcbiAgICogZW50aXJlIHZpZXcuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI3RyYW5zcGFyZW50XG4gICAqL1xuICB0cmFuc3BhcmVudD86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIGZhbHNlPixcblxuICAvKipcbiAgICogVGhlIGBzdGF0dXNCYXJUcmFuc2x1Y2VudGAgcHJvcCBkZXRlcm1pbmVzIHdoZXRoZXIgeW91ciBtb2RhbCBzaG91bGQgZ28gdW5kZXJcbiAgICogdGhlIHN5c3RlbSBzdGF0dXNiYXIuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI3N0YXR1c0JhclRyYW5zbHVjZW50XG4gICAqL1xuICBzdGF0dXNCYXJUcmFuc2x1Y2VudD86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIGZhbHNlPixcblxuICAvKipcbiAgICogVGhlIGBoYXJkd2FyZUFjY2VsZXJhdGVkYCBwcm9wIGNvbnRyb2xzIHdoZXRoZXIgdG8gZm9yY2UgaGFyZHdhcmVcbiAgICogYWNjZWxlcmF0aW9uIGZvciB0aGUgdW5kZXJseWluZyB3aW5kb3cuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI2hhcmR3YXJlYWNjZWxlcmF0ZWRcbiAgICovXG4gIGhhcmR3YXJlQWNjZWxlcmF0ZWQ/OiBXaXRoRGVmYXVsdDxib29sZWFuLCBmYWxzZT4sXG5cbiAgLyoqXG4gICAqIFRoZSBgb25SZXF1ZXN0Q2xvc2VgIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHRhcHMgdGhlIGhhcmR3YXJlXG4gICAqIGJhY2sgYnV0dG9uIG9uIEFuZHJvaWQgb3IgdGhlIG1lbnUgYnV0dG9uIG9uIEFwcGxlIFRWLlxuICAgKlxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIG9uIEFwcGxlIFRWIGFuZCBBbmRyb2lkLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9tb2RhbCNvbnJlcXVlc3RjbG9zZVxuICAgKi9cbiAgb25SZXF1ZXN0Q2xvc2U/OiA/RGlyZWN0RXZlbnRIYW5kbGVyPG51bGw+LFxuXG4gIC8qKlxuICAgKiBUaGUgYG9uU2hvd2AgcHJvcCBhbGxvd3MgcGFzc2luZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSB0aGVcbiAgICogbW9kYWwgaGFzIGJlZW4gc2hvd24uXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI29uc2hvd1xuICAgKi9cbiAgb25TaG93PzogP0RpcmVjdEV2ZW50SGFuZGxlcjxudWxsPixcblxuICAvKipcbiAgICogVGhlIGBvbkRpc21pc3NgIHByb3AgYWxsb3dzIHBhc3NpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2VcbiAgICogdGhlIG1vZGFsIGhhcyBiZWVuIGRpc21pc3NlZC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwjb25kaXNtaXNzXG4gICAqL1xuICBvbkRpc21pc3M/OiA/RGlyZWN0RXZlbnRIYW5kbGVyPG51bGw+LFxuXG4gIC8qKlxuICAgKiBUaGUgYHZpc2libGVgIHByb3AgZGV0ZXJtaW5lcyB3aGV0aGVyIHlvdXIgbW9kYWwgaXMgdmlzaWJsZS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwjdmlzaWJsZVxuICAgKi9cbiAgdmlzaWJsZT86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIGZhbHNlPixcblxuICAvKipcbiAgICogRGVwcmVjYXRlZC4gVXNlIHRoZSBgYW5pbWF0aW9uVHlwZWAgcHJvcCBpbnN0ZWFkLlxuICAgKi9cbiAgYW5pbWF0ZWQ/OiBXaXRoRGVmYXVsdDxib29sZWFuLCBmYWxzZT4sXG5cbiAgLyoqXG4gICAqIFRoZSBgc3VwcG9ydGVkT3JpZW50YXRpb25zYCBwcm9wIGFsbG93cyB0aGUgbW9kYWwgdG8gYmUgcm90YXRlZCB0byBhbnkgb2YgdGhlIHNwZWNpZmllZCBvcmllbnRhdGlvbnMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL21vZGFsI3N1cHBvcnRlZG9yaWVudGF0aW9uc1xuICAgKi9cbiAgc3VwcG9ydGVkT3JpZW50YXRpb25zPzogV2l0aERlZmF1bHQ8XG4gICAgJFJlYWRPbmx5QXJyYXk8XG4gICAgICB8ICdwb3J0cmFpdCdcbiAgICAgIHwgJ3BvcnRyYWl0LXVwc2lkZS1kb3duJ1xuICAgICAgfCAnbGFuZHNjYXBlJ1xuICAgICAgfCAnbGFuZHNjYXBlLWxlZnQnXG4gICAgICB8ICdsYW5kc2NhcGUtcmlnaHQnLFxuICAgID4sXG4gICAgJ3BvcnRyYWl0JyxcbiAgPixcblxuICAvKipcbiAgICogVGhlIGBvbk9yaWVudGF0aW9uQ2hhbmdlYCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgb3JpZW50YXRpb24gY2hhbmdlcyB3aGlsZSB0aGUgbW9kYWwgaXMgYmVpbmcgZGlzcGxheWVkLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9tb2RhbCNvbm9yaWVudGF0aW9uY2hhbmdlXG4gICAqL1xuICBvbk9yaWVudGF0aW9uQ2hhbmdlPzogP0RpcmVjdEV2ZW50SGFuZGxlcjxPcmllbnRhdGlvbkNoYW5nZUV2ZW50PixcblxuICAvKipcbiAgICogVGhlIGBpZGVudGlmaWVyYCBpcyB0aGUgdW5pcXVlIG51bWJlciBmb3IgaWRlbnRpZnlpbmcgTW9kYWwgY29tcG9uZW50cy5cbiAgICovXG4gIGlkZW50aWZpZXI/OiBXaXRoRGVmYXVsdDxJbnQzMiwgMD4sXG58fT47XG5cbmV4cG9ydCBkZWZhdWx0IChjb2RlZ2VuTmF0aXZlQ29tcG9uZW50PE5hdGl2ZVByb3BzPignTW9kYWxIb3N0VmlldycsIHtcbiAgaW50ZXJmYWNlT25seTogdHJ1ZSxcbiAgcGFwZXJDb21wb25lbnROYW1lOiAnUkNUTW9kYWxIb3N0VmlldycsXG59KTogSG9zdENvbXBvbmVudDxOYXRpdmVQcm9wcz4pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgTGF5b3V0RXZlbnQsXG4gIE1vdXNlRXZlbnQsXG4gIFByZXNzRXZlbnQsXG59IGZyb20gJy4uLy4uL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgQWNjZXNzaWJpbGl0eUFjdGlvbkV2ZW50LFxuICBBY2Nlc3NpYmlsaXR5QWN0aW9uSW5mbyxcbiAgQWNjZXNzaWJpbGl0eVJvbGUsXG4gIEFjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgQWNjZXNzaWJpbGl0eVZhbHVlLFxufSBmcm9tICcuLi9WaWV3L1ZpZXdBY2Nlc3NpYmlsaXR5JztcblxuaW1wb3J0IHtQcmVzc2FiaWxpdHlEZWJ1Z1ZpZXd9IGZyb20gJy4uLy4uL1ByZXNzYWJpbGl0eS9QcmVzc2FiaWxpdHlEZWJ1Zyc7XG5pbXBvcnQgdXNlUHJlc3NhYmlsaXR5IGZyb20gJy4uLy4uL1ByZXNzYWJpbGl0eS91c2VQcmVzc2FiaWxpdHknO1xuaW1wb3J0IHt0eXBlIFJlY3RPclNpemV9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvUmVjdCc7XG5pbXBvcnQgdXNlTWVyZ2VSZWZzIGZyb20gJy4uLy4uL1V0aWxpdGllcy91c2VNZXJnZVJlZnMnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi4vVmlldy9WaWV3JztcbmltcG9ydCB1c2VBbmRyb2lkUmlwcGxlRm9yVmlldywge1xuICB0eXBlIFJpcHBsZUNvbmZpZyxcbn0gZnJvbSAnLi91c2VBbmRyb2lkUmlwcGxlRm9yVmlldyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxudHlwZSBWaWV3U3R5bGVQcm9wID0gJEVsZW1lbnRUeXBlPFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFZpZXc+LCAnc3R5bGUnPjtcblxuZXhwb3J0IHR5cGUgU3RhdGVDYWxsYmFja1R5cGUgPSAkUmVhZE9ubHk8e3xcbiAgcHJlc3NlZDogYm9vbGVhbixcbnx9PjtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICAvKipcbiAgICogQWNjZXNzaWJpbGl0eS5cbiAgICovXG4gIGFjY2Vzc2liaWxpdHlBY3Rpb25zPzogPyRSZWFkT25seUFycmF5PEFjY2Vzc2liaWxpdHlBY3Rpb25JbmZvPixcbiAgYWNjZXNzaWJpbGl0eUVsZW1lbnRzSGlkZGVuPzogP2Jvb2xlYW4sXG4gIGFjY2Vzc2liaWxpdHlIaW50PzogP1N0cmluZ2lzaCxcbiAgYWNjZXNzaWJpbGl0eUxhbmd1YWdlPzogP1N0cmluZ2lzaCxcbiAgYWNjZXNzaWJpbGl0eUlnbm9yZXNJbnZlcnRDb2xvcnM/OiA/Ym9vbGVhbixcbiAgYWNjZXNzaWJpbGl0eUxhYmVsPzogP1N0cmluZ2lzaCxcbiAgYWNjZXNzaWJpbGl0eUxpdmVSZWdpb24/OiA/KCdub25lJyB8ICdwb2xpdGUnIHwgJ2Fzc2VydGl2ZScpLFxuICBhY2Nlc3NpYmlsaXR5Um9sZT86ID9BY2Nlc3NpYmlsaXR5Um9sZSxcbiAgYWNjZXNzaWJpbGl0eVN0YXRlPzogP0FjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgYWNjZXNzaWJpbGl0eVZhbHVlPzogP0FjY2Vzc2liaWxpdHlWYWx1ZSxcbiAgJ2FyaWEtdmFsdWVtYXgnPzogQWNjZXNzaWJpbGl0eVZhbHVlWydtYXgnXSxcbiAgJ2FyaWEtdmFsdWVtaW4nPzogQWNjZXNzaWJpbGl0eVZhbHVlWydtaW4nXSxcbiAgJ2FyaWEtdmFsdWVub3cnPzogQWNjZXNzaWJpbGl0eVZhbHVlWydub3cnXSxcbiAgJ2FyaWEtdmFsdWV0ZXh0Jz86IEFjY2Vzc2liaWxpdHlWYWx1ZVsndGV4dCddLFxuICBhY2Nlc3NpYmlsaXR5Vmlld0lzTW9kYWw/OiA/Ym9vbGVhbixcbiAgJ2FyaWEtbW9kYWwnPzogP2Jvb2xlYW4sXG4gIGFjY2Vzc2libGU/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogYWxpYXMgZm9yIGFjY2Vzc2liaWxpdHlTdGF0ZVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY2Nlc3NpYmlsaXR5I2FjY2Vzc2liaWxpdHlzdGF0ZVxuICAgKi9cbiAgJ2FyaWEtYnVzeSc/OiA/Ym9vbGVhbixcbiAgJ2FyaWEtY2hlY2tlZCc/OiA/Ym9vbGVhbiB8ICdtaXhlZCcsXG4gICdhcmlhLWRpc2FibGVkJz86ID9ib29sZWFuLFxuICAnYXJpYS1leHBhbmRlZCc/OiA/Ym9vbGVhbixcbiAgJ2FyaWEtc2VsZWN0ZWQnPzogP2Jvb2xlYW4sXG4gIC8qKlxuICAgKiBBIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgYWNjZXNzaWJpbGl0eSBlbGVtZW50cyBjb250YWluZWQgd2l0aGluXG4gICAqIHRoaXMgYWNjZXNzaWJpbGl0eSBlbGVtZW50IGFyZSBoaWRkZW4uXG4gICAqL1xuICAnYXJpYS1oaWRkZW4nPzogP2Jvb2xlYW4sXG4gICdhcmlhLWxpdmUnPzogPygncG9saXRlJyB8ICdhc3NlcnRpdmUnIHwgJ29mZicpLFxuICBmb2N1c2FibGU/OiA/Ym9vbGVhbixcbiAgaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eT86ID8oJ2F1dG8nIHwgJ3llcycgfCAnbm8nIHwgJ25vLWhpZGUtZGVzY2VuZGFudHMnKSxcbiAgb25BY2Nlc3NpYmlsaXR5QWN0aW9uPzogPyhldmVudDogQWNjZXNzaWJpbGl0eUFjdGlvbkV2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogV2hldGhlciBhIHByZXNzIGdlc3R1cmUgY2FuIGJlIGludGVycnVwdGVkIGJ5IGEgcGFyZW50IGdlc3R1cmUgc3VjaCBhcyBhXG4gICAqIHNjcm9sbCBldmVudC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIGNhbmNlbGFibGU/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogRWl0aGVyIGNoaWxkcmVuIG9yIGEgcmVuZGVyIHByb3AgdGhhdCByZWNlaXZlcyBhIGJvb2xlYW4gcmVmbGVjdGluZyB3aGV0aGVyXG4gICAqIHRoZSBjb21wb25lbnQgaXMgY3VycmVudGx5IHByZXNzZWQuXG4gICAqL1xuICBjaGlsZHJlbjogUmVhY3QuTm9kZSB8ICgoc3RhdGU6IFN0YXRlQ2FsbGJhY2tUeXBlKSA9PiBSZWFjdC5Ob2RlKSxcblxuICAvKipcbiAgICogRHVyYXRpb24gdG8gd2FpdCBhZnRlciBob3ZlciBpbiBiZWZvcmUgY2FsbGluZyBgb25Ib3ZlckluYC5cbiAgICovXG4gIGRlbGF5SG92ZXJJbj86ID9udW1iZXIsXG5cbiAgLyoqXG4gICAqIER1cmF0aW9uIHRvIHdhaXQgYWZ0ZXIgaG92ZXIgb3V0IGJlZm9yZSBjYWxsaW5nIGBvbkhvdmVyT3V0YC5cbiAgICovXG4gIGRlbGF5SG92ZXJPdXQ/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBEdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSBmcm9tIGBvblByZXNzSW5gIGJlZm9yZSBgb25Mb25nUHJlc3NgIGlzIGNhbGxlZC5cbiAgICovXG4gIGRlbGF5TG9uZ1ByZXNzPzogP251bWJlcixcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJlc3MgYmVoYXZpb3IgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGRpc3RhbmNlIG91dHNpZGUgb2YgdGhpcyB2aWV3IGluIHdoaWNoIGEgcHJlc3MgaXMgZGV0ZWN0ZWQuXG4gICAqL1xuICBoaXRTbG9wPzogP1JlY3RPclNpemUsXG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZGlzdGFuY2Ugb3V0c2lkZSBvZiB0aGlzIHZpZXcgaW4gd2hpY2ggYSB0b3VjaCBpcyBjb25zaWRlcmVkIGFcbiAgICogcHJlc3MgYmVmb3JlIGBvblByZXNzT3V0YCBpcyB0cmlnZ2VyZWQuXG4gICAqL1xuICBwcmVzc1JldGVudGlvbk9mZnNldD86ID9SZWN0T3JTaXplLFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGlzIHZpZXcncyBsYXlvdXQgY2hhbmdlcy5cbiAgICovXG4gIG9uTGF5b3V0PzogPyhldmVudDogTGF5b3V0RXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgaG92ZXIgaXMgYWN0aXZhdGVkIHRvIHByb3ZpZGUgdmlzdWFsIGZlZWRiYWNrLlxuICAgKi9cbiAgb25Ib3ZlckluPzogPyhldmVudDogTW91c2VFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBob3ZlciBpcyBkZWFjdGl2YXRlZCB0byB1bmRvIHZpc3VhbCBmZWVkYmFjay5cbiAgICovXG4gIG9uSG92ZXJPdXQ/OiA/KGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBsb25nLXRhcCBnZXN0dXJlIGlzIGRldGVjdGVkLlxuICAgKi9cbiAgb25Mb25nUHJlc3M/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBzaW5nbGUgdGFwIGdlc3R1cmUgaXMgZGV0ZWN0ZWQuXG4gICAqL1xuICBvblByZXNzPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgdG91Y2ggaXMgZW5nYWdlZCBiZWZvcmUgYG9uUHJlc3NgLlxuICAgKi9cbiAgb25QcmVzc0luPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgdG91Y2ggaXMgcmVsZWFzZWQgYmVmb3JlIGBvblByZXNzYC5cbiAgICovXG4gIG9uUHJlc3NPdXQ/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogRWl0aGVyIHZpZXcgc3R5bGVzIG9yIGEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIGJvb2xlYW4gcmVmbGVjdGluZyB3aGV0aGVyXG4gICAqIHRoZSBjb21wb25lbnQgaXMgY3VycmVudGx5IHByZXNzZWQgYW5kIHJldHVybnMgdmlldyBzdHlsZXMuXG4gICAqL1xuICBzdHlsZT86IFZpZXdTdHlsZVByb3AgfCAoKHN0YXRlOiBTdGF0ZUNhbGxiYWNrVHlwZSkgPT4gVmlld1N0eWxlUHJvcCksXG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgdXNlZCB0byBmaW5kIHRoaXMgdmlldyBpbiB0ZXN0cy5cbiAgICovXG4gIHRlc3RJRD86ID9zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRvZXNuJ3QgcGxheSBzeXN0ZW0gc291bmQgb24gdG91Y2guXG4gICAqL1xuICBhbmRyb2lkX2Rpc2FibGVTb3VuZD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBBbmRyb2lkIHJpcHBsZSBlZmZlY3QgYW5kIGNvbmZpZ3VyZXMgaXRzIGNvbG9yLlxuICAgKi9cbiAgYW5kcm9pZF9yaXBwbGU/OiA/UmlwcGxlQ29uZmlnLFxuXG4gIC8qKlxuICAgKiBVc2VkIG9ubHkgZm9yIGRvY3VtZW50YXRpb24gb3IgdGVzdGluZyAoZS5nLiBzbmFwc2hvdCB0ZXN0aW5nKS5cbiAgICovXG4gIHRlc3RPbmx5X3ByZXNzZWQ/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogRHVyYXRpb24gdG8gd2FpdCBhZnRlciBwcmVzcyBkb3duIGJlZm9yZSBjYWxsaW5nIGBvblByZXNzSW5gLlxuICAgKi9cbiAgdW5zdGFibGVfcHJlc3NEZWxheT86ID9udW1iZXIsXG4gIC8qKlxuICAgKiBXZWIgdG8gTmF0aXZlIEFjY2Vzc2liaWxpdHkgcHJvcHNcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9pc3N1ZXMvMzQ0MjRcbiAgICovXG4gICdhcmlhLWxhYmVsJz86ID9zdHJpbmcsXG58fT47XG5cbi8qKlxuICogQ29tcG9uZW50IHVzZWQgdG8gYnVpbGQgZGlzcGxheSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIHJlc3BvbmQgdG8gd2hldGhlciB0aGVcbiAqIGNvbXBvbmVudCBpcyBjdXJyZW50bHkgcHJlc3NlZCBvciBub3QuXG4gKi9cbi8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAqIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG5mdW5jdGlvbiBQcmVzc2FibGUocHJvcHM6IFByb3BzLCBmb3J3YXJkZWRSZWYpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3Qge1xuICAgIGFjY2Vzc2libGUsXG4gICAgYWNjZXNzaWJpbGl0eVN0YXRlLFxuICAgICdhcmlhLWxpdmUnOiBhcmlhTGl2ZSxcbiAgICBhbmRyb2lkX2Rpc2FibGVTb3VuZCxcbiAgICBhbmRyb2lkX3JpcHBsZSxcbiAgICAnYXJpYS1idXN5JzogYXJpYUJ1c3ksXG4gICAgJ2FyaWEtY2hlY2tlZCc6IGFyaWFDaGVja2VkLFxuICAgICdhcmlhLWRpc2FibGVkJzogYXJpYURpc2FibGVkLFxuICAgICdhcmlhLWV4cGFuZGVkJzogYXJpYUV4cGFuZGVkLFxuICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICdhcmlhLXNlbGVjdGVkJzogYXJpYVNlbGVjdGVkLFxuICAgIGNhbmNlbGFibGUsXG4gICAgY2hpbGRyZW4sXG4gICAgZGVsYXlIb3ZlckluLFxuICAgIGRlbGF5SG92ZXJPdXQsXG4gICAgZGVsYXlMb25nUHJlc3MsXG4gICAgZGlzYWJsZWQsXG4gICAgZm9jdXNhYmxlLFxuICAgIGhpdFNsb3AsXG4gICAgb25Ib3ZlckluLFxuICAgIG9uSG92ZXJPdXQsXG4gICAgb25Mb25nUHJlc3MsXG4gICAgb25QcmVzcyxcbiAgICBvblByZXNzSW4sXG4gICAgb25QcmVzc091dCxcbiAgICBwcmVzc1JldGVudGlvbk9mZnNldCxcbiAgICBzdHlsZSxcbiAgICB0ZXN0T25seV9wcmVzc2VkLFxuICAgIHVuc3RhYmxlX3ByZXNzRGVsYXksXG4gICAgLi4ucmVzdFByb3BzXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB2aWV3UmVmID0gdXNlUmVmPFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFZpZXc+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IG1lcmdlZFJlZiA9IHVzZU1lcmdlUmVmcyhmb3J3YXJkZWRSZWYsIHZpZXdSZWYpO1xuXG4gIGNvbnN0IGFuZHJvaWRfcmlwcGxlQ29uZmlnID0gdXNlQW5kcm9pZFJpcHBsZUZvclZpZXcoYW5kcm9pZF9yaXBwbGUsIHZpZXdSZWYpO1xuXG4gIGNvbnN0IFtwcmVzc2VkLCBzZXRQcmVzc2VkXSA9IHVzZVByZXNzU3RhdGUodGVzdE9ubHlfcHJlc3NlZCA9PT0gdHJ1ZSk7XG5cbiAgbGV0IF9hY2Nlc3NpYmlsaXR5U3RhdGUgPSB7XG4gICAgYnVzeTogYXJpYUJ1c3kgPz8gYWNjZXNzaWJpbGl0eVN0YXRlPy5idXN5LFxuICAgIGNoZWNrZWQ6IGFyaWFDaGVja2VkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uY2hlY2tlZCxcbiAgICBkaXNhYmxlZDogYXJpYURpc2FibGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWQsXG4gICAgZXhwYW5kZWQ6IGFyaWFFeHBhbmRlZCA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmV4cGFuZGVkLFxuICAgIHNlbGVjdGVkOiBhcmlhU2VsZWN0ZWQgPz8gYWNjZXNzaWJpbGl0eVN0YXRlPy5zZWxlY3RlZCxcbiAgfTtcblxuICBfYWNjZXNzaWJpbGl0eVN0YXRlID1cbiAgICBkaXNhYmxlZCAhPSBudWxsID8gey4uLl9hY2Nlc3NpYmlsaXR5U3RhdGUsIGRpc2FibGVkfSA6IF9hY2Nlc3NpYmlsaXR5U3RhdGU7XG5cbiAgY29uc3QgYWNjZXNzaWJpbGl0eVZhbHVlID0ge1xuICAgIG1heDogcHJvcHNbJ2FyaWEtdmFsdWVtYXgnXSA/PyBwcm9wcy5hY2Nlc3NpYmlsaXR5VmFsdWU/Lm1heCxcbiAgICBtaW46IHByb3BzWydhcmlhLXZhbHVlbWluJ10gPz8gcHJvcHMuYWNjZXNzaWJpbGl0eVZhbHVlPy5taW4sXG4gICAgbm93OiBwcm9wc1snYXJpYS12YWx1ZW5vdyddID8/IHByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8ubm93LFxuICAgIHRleHQ6IHByb3BzWydhcmlhLXZhbHVldGV4dCddID8/IHByb3BzLmFjY2Vzc2liaWxpdHlWYWx1ZT8udGV4dCxcbiAgfTtcblxuICBjb25zdCBhY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbiA9XG4gICAgYXJpYUxpdmUgPT09ICdvZmYnID8gJ25vbmUnIDogYXJpYUxpdmUgPz8gcHJvcHMuYWNjZXNzaWJpbGl0eUxpdmVSZWdpb247XG5cbiAgY29uc3QgYWNjZXNzaWJpbGl0eUxhYmVsID0gYXJpYUxhYmVsID8/IHByb3BzLmFjY2Vzc2liaWxpdHlMYWJlbDtcbiAgY29uc3QgcmVzdFByb3BzV2l0aERlZmF1bHRzOiBSZWFjdC5FbGVtZW50Q29uZmlnPHR5cGVvZiBWaWV3PiA9IHtcbiAgICAuLi5yZXN0UHJvcHMsXG4gICAgLi4uYW5kcm9pZF9yaXBwbGVDb25maWc/LnZpZXdQcm9wcyxcbiAgICBhY2Nlc3NpYmxlOiBhY2Nlc3NpYmxlICE9PSBmYWxzZSxcbiAgICBhY2Nlc3NpYmlsaXR5Vmlld0lzTW9kYWw6XG4gICAgICByZXN0UHJvcHNbJ2FyaWEtbW9kYWwnXSA/PyByZXN0UHJvcHMuYWNjZXNzaWJpbGl0eVZpZXdJc01vZGFsLFxuICAgIGFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uLFxuICAgIGFjY2Vzc2liaWxpdHlMYWJlbCxcbiAgICBhY2Nlc3NpYmlsaXR5U3RhdGU6IF9hY2Nlc3NpYmlsaXR5U3RhdGUsXG4gICAgZm9jdXNhYmxlOiBmb2N1c2FibGUgIT09IGZhbHNlLFxuICAgIGFjY2Vzc2liaWxpdHlWYWx1ZSxcbiAgICBoaXRTbG9wLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpZyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNhbmNlbGFibGUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGhpdFNsb3AsXG4gICAgICBwcmVzc1JlY3RPZmZzZXQ6IHByZXNzUmV0ZW50aW9uT2Zmc2V0LFxuICAgICAgYW5kcm9pZF9kaXNhYmxlU291bmQsXG4gICAgICBkZWxheUhvdmVySW4sXG4gICAgICBkZWxheUhvdmVyT3V0LFxuICAgICAgZGVsYXlMb25nUHJlc3MsXG4gICAgICBkZWxheVByZXNzSW46IHVuc3RhYmxlX3ByZXNzRGVsYXksXG4gICAgICBvbkhvdmVySW4sXG4gICAgICBvbkhvdmVyT3V0LFxuICAgICAgb25Mb25nUHJlc3MsXG4gICAgICBvblByZXNzLFxuICAgICAgb25QcmVzc0luKGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChhbmRyb2lkX3JpcHBsZUNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgYW5kcm9pZF9yaXBwbGVDb25maWcub25QcmVzc0luKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRQcmVzc2VkKHRydWUpO1xuICAgICAgICBpZiAob25QcmVzc0luICE9IG51bGwpIHtcbiAgICAgICAgICBvblByZXNzSW4oZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25QcmVzc01vdmU6IGFuZHJvaWRfcmlwcGxlQ29uZmlnPy5vblByZXNzTW92ZSxcbiAgICAgIG9uUHJlc3NPdXQoZXZlbnQ6IFByZXNzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGFuZHJvaWRfcmlwcGxlQ29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICBhbmRyb2lkX3JpcHBsZUNvbmZpZy5vblByZXNzT3V0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRQcmVzc2VkKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uUHJlc3NPdXQgIT0gbnVsbCkge1xuICAgICAgICAgIG9uUHJlc3NPdXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtcbiAgICAgIGFuZHJvaWRfZGlzYWJsZVNvdW5kLFxuICAgICAgYW5kcm9pZF9yaXBwbGVDb25maWcsXG4gICAgICBjYW5jZWxhYmxlLFxuICAgICAgZGVsYXlIb3ZlckluLFxuICAgICAgZGVsYXlIb3Zlck91dCxcbiAgICAgIGRlbGF5TG9uZ1ByZXNzLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBoaXRTbG9wLFxuICAgICAgb25Ib3ZlckluLFxuICAgICAgb25Ib3Zlck91dCxcbiAgICAgIG9uTG9uZ1ByZXNzLFxuICAgICAgb25QcmVzcyxcbiAgICAgIG9uUHJlc3NJbixcbiAgICAgIG9uUHJlc3NPdXQsXG4gICAgICBwcmVzc1JldGVudGlvbk9mZnNldCxcbiAgICAgIHNldFByZXNzZWQsXG4gICAgICB1bnN0YWJsZV9wcmVzc0RlbGF5LFxuICAgIF0sXG4gICk7XG4gIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSB1c2VQcmVzc2FiaWxpdHkoY29uZmlnKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3XG4gICAgICB7Li4ucmVzdFByb3BzV2l0aERlZmF1bHRzfVxuICAgICAgey4uLmV2ZW50SGFuZGxlcnN9XG4gICAgICByZWY9e21lcmdlZFJlZn1cbiAgICAgIHN0eWxlPXt0eXBlb2Ygc3R5bGUgPT09ICdmdW5jdGlvbicgPyBzdHlsZSh7cHJlc3NlZH0pIDogc3R5bGV9XG4gICAgICBjb2xsYXBzYWJsZT17ZmFsc2V9PlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHtwcmVzc2VkfSkgOiBjaGlsZHJlbn1cbiAgICAgIHtfX0RFVl9fID8gPFByZXNzYWJpbGl0eURlYnVnVmlldyBjb2xvcj1cInJlZFwiIGhpdFNsb3A9e2hpdFNsb3B9IC8+IDogbnVsbH1cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIHVzZVByZXNzU3RhdGUoZm9yY2VQcmVzc2VkOiBib29sZWFuKTogW2Jvb2xlYW4sIChib29sZWFuKSA9PiB2b2lkXSB7XG4gIGNvbnN0IFtwcmVzc2VkLCBzZXRQcmVzc2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgcmV0dXJuIFtwcmVzc2VkIHx8IGZvcmNlUHJlc3NlZCwgc2V0UHJlc3NlZF07XG59XG5cbmNvbnN0IE1lbW9lZFByZXNzYWJsZSA9IFJlYWN0Lm1lbW8oUmVhY3QuZm9yd2FyZFJlZihQcmVzc2FibGUpKTtcbk1lbW9lZFByZXNzYWJsZS5kaXNwbGF5TmFtZSA9ICdQcmVzc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCAoTWVtb2VkUHJlc3NhYmxlOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxcbiAgUHJvcHMsXG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFZpZXc+LFxuPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgcHJvY2Vzc0NvbG9yIGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi4vVmlldy9WaWV3JztcbmltcG9ydCB7Q29tbWFuZHN9IGZyb20gJy4uL1ZpZXcvVmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZU1lbW99IGZyb20gJ3JlYWN0JztcblxudHlwZSBOYXRpdmVCYWNrZ3JvdW5kUHJvcCA9ICRSZWFkT25seTx7fFxuICB0eXBlOiAnUmlwcGxlQW5kcm9pZCcsXG4gIGNvbG9yOiA/bnVtYmVyLFxuICBib3JkZXJsZXNzOiBib29sZWFuLFxuICByaXBwbGVSYWRpdXM6ID9udW1iZXIsXG58fT47XG5cbmV4cG9ydCB0eXBlIFJpcHBsZUNvbmZpZyA9IHt8XG4gIGNvbG9yPzogQ29sb3JWYWx1ZSxcbiAgYm9yZGVybGVzcz86IGJvb2xlYW4sXG4gIHJhZGl1cz86IG51bWJlcixcbiAgZm9yZWdyb3VuZD86IGJvb2xlYW4sXG58fTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZXZlbnQgaGFuZGxlcnMgYW5kIHByb3BzIGZvciBjb25maWd1cmluZyB0aGUgcmlwcGxlIGVmZmVjdCBvblxuICogc3VwcG9ydGVkIHZlcnNpb25zIG9mIEFuZHJvaWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUFuZHJvaWRSaXBwbGVGb3JWaWV3KFxuICByaXBwbGVDb25maWc6ID9SaXBwbGVDb25maWcsXG4gIHZpZXdSZWY6IHt8Y3VycmVudDogbnVsbCB8IFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFZpZXc+fH0sXG4pOiA/JFJlYWRPbmx5PHt8XG4gIG9uUHJlc3NJbjogKGV2ZW50OiBQcmVzc0V2ZW50KSA9PiB2b2lkLFxuICBvblByZXNzTW92ZTogKGV2ZW50OiBQcmVzc0V2ZW50KSA9PiB2b2lkLFxuICBvblByZXNzT3V0OiAoZXZlbnQ6IFByZXNzRXZlbnQpID0+IHZvaWQsXG4gIHZpZXdQcm9wczpcbiAgICB8ICRSZWFkT25seTx7fG5hdGl2ZUJhY2tncm91bmRBbmRyb2lkOiBOYXRpdmVCYWNrZ3JvdW5kUHJvcHx9PlxuICAgIHwgJFJlYWRPbmx5PHt8bmF0aXZlRm9yZWdyb3VuZEFuZHJvaWQ6IE5hdGl2ZUJhY2tncm91bmRQcm9wfH0+LFxufH0+IHtcbiAgY29uc3Qge2NvbG9yLCBib3JkZXJsZXNzLCByYWRpdXMsIGZvcmVncm91bmR9ID0gcmlwcGxlQ29uZmlnID8/IHt9O1xuXG4gIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnICYmXG4gICAgICAoY29sb3IgIT0gbnVsbCB8fCBib3JkZXJsZXNzICE9IG51bGwgfHwgcmFkaXVzICE9IG51bGwpXG4gICAgKSB7XG4gICAgICBjb25zdCBwcm9jZXNzZWRDb2xvciA9IHByb2Nlc3NDb2xvcihjb2xvcik7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHByb2Nlc3NlZENvbG9yID09IG51bGwgfHwgdHlwZW9mIHByb2Nlc3NlZENvbG9yID09PSAnbnVtYmVyJyxcbiAgICAgICAgJ1VuZXhwZWN0ZWQgY29sb3IgZ2l2ZW4gZm9yIFJpcHBsZSBjb2xvcicsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBuYXRpdmVSaXBwbGVWYWx1ZSA9IHtcbiAgICAgICAgdHlwZTogJ1JpcHBsZUFuZHJvaWQnLFxuICAgICAgICBjb2xvcjogcHJvY2Vzc2VkQ29sb3IsXG4gICAgICAgIGJvcmRlcmxlc3M6IGJvcmRlcmxlc3MgPT09IHRydWUsXG4gICAgICAgIHJpcHBsZVJhZGl1czogcmFkaXVzLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmlld1Byb3BzOlxuICAgICAgICAgIGZvcmVncm91bmQgPT09IHRydWVcbiAgICAgICAgICAgID8gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgICAgICAgICAgICB7bmF0aXZlRm9yZWdyb3VuZEFuZHJvaWQ6IG5hdGl2ZVJpcHBsZVZhbHVlfVxuICAgICAgICAgICAgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgICAgICAgICAgIHtuYXRpdmVCYWNrZ3JvdW5kQW5kcm9pZDogbmF0aXZlUmlwcGxlVmFsdWV9LFxuICAgICAgICBvblByZXNzSW4oZXZlbnQ6IFByZXNzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICBjb25zdCB2aWV3ID0gdmlld1JlZi5jdXJyZW50O1xuICAgICAgICAgIGlmICh2aWV3ICE9IG51bGwpIHtcbiAgICAgICAgICAgIENvbW1hbmRzLmhvdHNwb3RVcGRhdGUoXG4gICAgICAgICAgICAgIHZpZXcsXG4gICAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmxvY2F0aW9uWCA/PyAwLFxuICAgICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5sb2NhdGlvblkgPz8gMCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBDb21tYW5kcy5zZXRQcmVzc2VkKHZpZXcsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25QcmVzc01vdmUoZXZlbnQ6IFByZXNzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICBjb25zdCB2aWV3ID0gdmlld1JlZi5jdXJyZW50O1xuICAgICAgICAgIGlmICh2aWV3ICE9IG51bGwpIHtcbiAgICAgICAgICAgIENvbW1hbmRzLmhvdHNwb3RVcGRhdGUoXG4gICAgICAgICAgICAgIHZpZXcsXG4gICAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmxvY2F0aW9uWCA/PyAwLFxuICAgICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5sb2NhdGlvblkgPz8gMCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblByZXNzT3V0KGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgICAgICAgY29uc3QgdmlldyA9IHZpZXdSZWYuY3VycmVudDtcbiAgICAgICAgICBpZiAodmlldyAhPSBudWxsKSB7XG4gICAgICAgICAgICBDb21tYW5kcy5zZXRQcmVzc2VkKHZpZXcsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgW2JvcmRlcmxlc3MsIGNvbG9yLCBmb3JlZ3JvdW5kLCByYWRpdXMsIHZpZXdSZWZdKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Q29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtTeW50aGV0aWNFdmVudH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZpZXdQcm9wc30gZnJvbSAnLi4vVmlldy9WaWV3UHJvcFR5cGVzJztcblxuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBQbGF0Zm9ybSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuaW1wb3J0IHVzZU1lcmdlUmVmcyBmcm9tICcuLi8uLi9VdGlsaXRpZXMvdXNlTWVyZ2VSZWZzJztcbmltcG9ydCBBbmRyb2lkU3dpdGNoTmF0aXZlQ29tcG9uZW50LCB7XG4gIENvbW1hbmRzIGFzIEFuZHJvaWRTd2l0Y2hDb21tYW5kcyxcbn0gZnJvbSAnLi9BbmRyb2lkU3dpdGNoTmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBTd2l0Y2hOYXRpdmVDb21wb25lbnQsIHtcbiAgQ29tbWFuZHMgYXMgU3dpdGNoQ29tbWFuZHMsXG59IGZyb20gJy4vU3dpdGNoTmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBTd2l0Y2hDaGFuZ2VFdmVudCA9IFN5bnRoZXRpY0V2ZW50PFxuICAkUmVhZE9ubHk8e3xcbiAgICB2YWx1ZTogYm9vbGVhbixcbiAgICB0YXJnZXQ6IG51bWJlcixcbiAgfH0+LFxuPjtcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLi4uVmlld1Byb3BzLFxuXG4gIC8qKlxuICAgIElmIHRydWUgdGhlIHVzZXIgd29uJ3QgYmUgYWJsZSB0byB0b2dnbGUgdGhlIHN3aXRjaC5cblxuICAgIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZD86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgIFRoZSB2YWx1ZSBvZiB0aGUgc3dpdGNoLiBJZiB0cnVlIHRoZSBzd2l0Y2ggd2lsbCBiZSB0dXJuZWQgb24uXG5cbiAgICBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdmFsdWU/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICBDb2xvciBvZiB0aGUgZm9yZWdyb3VuZCBzd2l0Y2ggZ3JpcC4gSWYgdGhpcyBpcyBzZXQgb24gaU9TLCB0aGUgc3dpdGNoIGdyaXAgd2lsbCBsb3NlIGl0cyBkcm9wIHNoYWRvdy5cbiAgICovXG4gIHRodW1iQ29sb3I/OiA/Q29sb3JWYWx1ZSxcblxuICAvKipcbiAgICBDdXN0b20gY29sb3JzIGZvciB0aGUgc3dpdGNoIHRyYWNrLlxuXG4gICAgX2lPU186IFdoZW4gdGhlIHN3aXRjaCB2YWx1ZSBpcyBmYWxzZSwgdGhlIHRyYWNrIHNocmlua3MgaW50byB0aGUgYm9yZGVyLiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlXG4gICAgY29sb3Igb2YgdGhlIGJhY2tncm91bmQgZXhwb3NlZCBieSB0aGUgc2hydW5rZW4gdHJhY2ssIHVzZVxuICAgICBbYGlvc19iYWNrZ3JvdW5kQ29sb3JgXShodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3N3aXRjaCNpb3NfYmFja2dyb3VuZENvbG9yKS5cbiAgICovXG4gIHRyYWNrQ29sb3I/OiA/JFJlYWRPbmx5PHt8XG4gICAgZmFsc2U/OiA/Q29sb3JWYWx1ZSxcbiAgICB0cnVlPzogP0NvbG9yVmFsdWUsXG4gIHx9PixcblxuICAvKipcbiAgICBPbiBpT1MsIGN1c3RvbSBjb2xvciBmb3IgdGhlIGJhY2tncm91bmQuIFRoaXMgYmFja2dyb3VuZCBjb2xvciBjYW4gYmVcbiAgICBzZWVuIGVpdGhlciB3aGVuIHRoZSBzd2l0Y2ggdmFsdWUgaXMgZmFsc2Ugb3Igd2hlbiB0aGUgc3dpdGNoIGlzXG4gICAgZGlzYWJsZWQgKGFuZCB0aGUgc3dpdGNoIGlzIHRyYW5zbHVjZW50KS5cbiAgICovXG4gIGlvc19iYWNrZ3JvdW5kQ29sb3I/OiA/Q29sb3JWYWx1ZSxcblxuICAvKipcbiAgICBJbnZva2VkIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgc3dpdGNoLiBSZWNlaXZlc1xuICAgIHRoZSBjaGFuZ2UgZXZlbnQgYXMgYW4gYXJndW1lbnQuIElmIHlvdSB3YW50IHRvIG9ubHkgcmVjZWl2ZSB0aGUgbmV3XG4gICAgdmFsdWUsIHVzZSBgb25WYWx1ZUNoYW5nZWAgaW5zdGVhZC5cbiAgICovXG4gIG9uQ2hhbmdlPzogPyhldmVudDogU3dpdGNoQ2hhbmdlRXZlbnQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLFxuXG4gIC8qKlxuICAgIEludm9rZWQgd2hlbiB0aGUgdXNlciB0cmllcyB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBzd2l0Y2guIFJlY2VpdmVzXG4gICAgdGhlIG5ldyB2YWx1ZSBhcyBhbiBhcmd1bWVudC4gSWYgeW91IHdhbnQgdG8gaW5zdGVhZCByZWNlaXZlIGFuIGV2ZW50LFxuICAgIHVzZSBgb25DaGFuZ2VgLlxuICAgKi9cbiAgb25WYWx1ZUNoYW5nZT86ID8odmFsdWU6IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLFxufH0+O1xuY29uc3QgcmV0dXJuc0ZhbHNlID0gKCkgPT4gZmFsc2U7XG5jb25zdCByZXR1cm5zVHJ1ZSA9ICgpID0+IHRydWU7XG5cbi8qKlxuICBSZW5kZXJzIGEgYm9vbGVhbiBpbnB1dC5cblxuICBUaGlzIGlzIGEgY29udHJvbGxlZCBjb21wb25lbnQgdGhhdCByZXF1aXJlcyBhbiBgb25WYWx1ZUNoYW5nZWBcbiAgY2FsbGJhY2sgdGhhdCB1cGRhdGVzIHRoZSBgdmFsdWVgIHByb3AgaW4gb3JkZXIgZm9yIHRoZSBjb21wb25lbnQgdG9cbiAgcmVmbGVjdCB1c2VyIGFjdGlvbnMuIElmIHRoZSBgdmFsdWVgIHByb3AgaXMgbm90IHVwZGF0ZWQsIHRoZVxuICBjb21wb25lbnQgd2lsbCBjb250aW51ZSB0byByZW5kZXIgdGhlIHN1cHBsaWVkIGB2YWx1ZWAgcHJvcCBpbnN0ZWFkIG9mXG4gIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgYW55IHVzZXIgYWN0aW9ucy5cblxuICBgYGBTbmFja1BsYXllciBuYW1lPVN3aXRjaFxuICBpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbiAgaW1wb3J0IHsgVmlldywgU3dpdGNoLCBTdHlsZVNoZWV0IH0gZnJvbSBcInJlYWN0LW5hdGl2ZVwiO1xuXG4gIGNvbnN0IEFwcCA9ICgpID0+IHtcbiAgICBjb25zdCBbaXNFbmFibGVkLCBzZXRJc0VuYWJsZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9ICgpID0+IHNldElzRW5hYmxlZChwcmV2aW91c1N0YXRlID0+ICFwcmV2aW91c1N0YXRlKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICB0cmFja0NvbG9yPXt7IGZhbHNlOiBcIiM3Njc1NzdcIiwgdHJ1ZTogXCIjODFiMGZmXCIgfX1cbiAgICAgICAgICB0aHVtYkNvbG9yPXtpc0VuYWJsZWQgPyBcIiNmNWRkNGJcIiA6IFwiI2Y0ZjNmNFwifVxuICAgICAgICAgIGlvc19iYWNrZ3JvdW5kQ29sb3I9XCIjM2UzZTNlXCJcbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt0b2dnbGVTd2l0Y2h9XG4gICAgICAgICAgdmFsdWU9e2lzRW5hYmxlZH1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICAgIGNvbnRhaW5lcjoge1xuICAgICAgZmxleDogMSxcbiAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgIH1cbiAgfSk7XG5cbiAgZXhwb3J0IGRlZmF1bHQgQXBwO1xuICBgYGBcbiAqL1xuXG5jb25zdCBTd2l0Y2hXaXRoRm9yd2FyZGVkUmVmOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxcbiAgUHJvcHMsXG4gIFJlYWN0LkVsZW1lbnRSZWY8XG4gICAgdHlwZW9mIFN3aXRjaE5hdGl2ZUNvbXBvbmVudCB8IHR5cGVvZiBBbmRyb2lkU3dpdGNoTmF0aXZlQ29tcG9uZW50LFxuICA+LFxuPiA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3dpdGNoKHByb3BzLCBmb3J3YXJkZWRSZWYpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGlvc19iYWNrZ3JvdW5kQ29sb3IsXG4gICAgb25DaGFuZ2UsXG4gICAgb25WYWx1ZUNoYW5nZSxcbiAgICBzdHlsZSxcbiAgICB0aHVtYkNvbG9yLFxuICAgIHRyYWNrQ29sb3IsXG4gICAgdmFsdWUsXG4gICAgLi4ucmVzdFByb3BzXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdHJhY2tDb2xvckZvckZhbHNlID0gdHJhY2tDb2xvcj8uZmFsc2U7XG4gIGNvbnN0IHRyYWNrQ29sb3JGb3JUcnVlID0gdHJhY2tDb2xvcj8udHJ1ZTtcblxuICBjb25zdCBuYXRpdmVTd2l0Y2hSZWYgPSBSZWFjdC51c2VSZWY8UmVhY3QuRWxlbWVudFJlZjxcbiAgICB0eXBlb2YgU3dpdGNoTmF0aXZlQ29tcG9uZW50IHwgdHlwZW9mIEFuZHJvaWRTd2l0Y2hOYXRpdmVDb21wb25lbnQsXG4gID4gfCBudWxsPihudWxsKTtcblxuICBjb25zdCByZWYgPSB1c2VNZXJnZVJlZnMobmF0aXZlU3dpdGNoUmVmLCBmb3J3YXJkZWRSZWYpO1xuXG4gIGNvbnN0IFtuYXRpdmUsIHNldE5hdGl2ZV0gPSBSZWFjdC51c2VTdGF0ZSh7dmFsdWU6IChudWxsOiA/Ym9vbGVhbil9KTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZXZlbnQ6IFN3aXRjaENoYW5nZUV2ZW50KSA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVt1bnVzZWQtcHJvbWlzZV1cbiAgICBvbkNoYW5nZT8uKGV2ZW50KTtcbiAgICAvLyAkRmxvd0ZpeE1lW3VudXNlZC1wcm9taXNlXVxuICAgIG9uVmFsdWVDaGFuZ2U/LihldmVudC5uYXRpdmVFdmVudC52YWx1ZSk7XG4gICAgc2V0TmF0aXZlKHt2YWx1ZTogZXZlbnQubmF0aXZlRXZlbnQudmFsdWV9KTtcbiAgfTtcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGluIGNhc2UgbmF0aXZlIHVwZGF0ZXMgdGhlIHN3aXRjaCBhbmQgSlMgZGVjaWRlc1xuICAgIC8vIHRoYXQgdGhlIHVwZGF0ZSBzaG91bGQgYmUgaWdub3JlZCBhbmQgd2Ugc2hvdWxkIHN0aWNrIHdpdGggdGhlIHZhbHVlXG4gICAgLy8gdGhhdCB3ZSBoYXZlIGluIEpTLlxuICAgIGNvbnN0IGpzVmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBzaG91bGRVcGRhdGVOYXRpdmVTd2l0Y2ggPVxuICAgICAgbmF0aXZlLnZhbHVlICE9IG51bGwgJiYgbmF0aXZlLnZhbHVlICE9PSBqc1ZhbHVlO1xuICAgIGlmIChcbiAgICAgIHNob3VsZFVwZGF0ZU5hdGl2ZVN3aXRjaCAmJlxuICAgICAgbmF0aXZlU3dpdGNoUmVmLmN1cnJlbnQ/LnNldE5hdGl2ZVByb3BzICE9IG51bGxcbiAgICApIHtcbiAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICAgIEFuZHJvaWRTd2l0Y2hDb21tYW5kcy5zZXROYXRpdmVWYWx1ZShuYXRpdmVTd2l0Y2hSZWYuY3VycmVudCwganNWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBTd2l0Y2hDb21tYW5kcy5zZXRWYWx1ZShuYXRpdmVTd2l0Y2hSZWYuY3VycmVudCwganNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbdmFsdWUsIG5hdGl2ZV0pO1xuXG4gIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgY29uc3Qge2FjY2Vzc2liaWxpdHlTdGF0ZX0gPSByZXN0UHJvcHM7XG4gICAgY29uc3QgX2Rpc2FibGVkID1cbiAgICAgIGRpc2FibGVkICE9IG51bGwgPyBkaXNhYmxlZCA6IGFjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWQ7XG5cbiAgICBjb25zdCBfYWNjZXNzaWJpbGl0eVN0YXRlID1cbiAgICAgIF9kaXNhYmxlZCAhPT0gYWNjZXNzaWJpbGl0eVN0YXRlPy5kaXNhYmxlZFxuICAgICAgICA/IHsuLi5hY2Nlc3NpYmlsaXR5U3RhdGUsIGRpc2FibGVkOiBfZGlzYWJsZWR9XG4gICAgICAgIDogYWNjZXNzaWJpbGl0eVN0YXRlO1xuXG4gICAgY29uc3QgcGxhdGZvcm1Qcm9wcyA9IHtcbiAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZTogX2FjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgICAgIGVuYWJsZWQ6IF9kaXNhYmxlZCAhPT0gdHJ1ZSxcbiAgICAgIG9uOiB2YWx1ZSA9PT0gdHJ1ZSxcbiAgICAgIHN0eWxlLFxuICAgICAgdGh1bWJUaW50Q29sb3I6IHRodW1iQ29sb3IsXG4gICAgICB0cmFja0NvbG9yRm9yRmFsc2U6IHRyYWNrQ29sb3JGb3JGYWxzZSxcbiAgICAgIHRyYWNrQ29sb3JGb3JUcnVlOiB0cmFja0NvbG9yRm9yVHJ1ZSxcbiAgICAgIHRyYWNrVGludENvbG9yOiB2YWx1ZSA9PT0gdHJ1ZSA/IHRyYWNrQ29sb3JGb3JUcnVlIDogdHJhY2tDb2xvckZvckZhbHNlLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEFuZHJvaWRTd2l0Y2hOYXRpdmVDb21wb25lbnRcbiAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgey4uLnBsYXRmb3JtUHJvcHN9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPXtwcm9wcy5hY2Nlc3NpYmlsaXR5Um9sZSA/PyAnc3dpdGNoJ31cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgb25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3Q9e3JldHVybnNGYWxzZX1cbiAgICAgICAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcj17cmV0dXJuc1RydWV9XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgLz5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBsYXRmb3JtUHJvcHMgPSB7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIG9uVGludENvbG9yOiB0cmFja0NvbG9yRm9yVHJ1ZSxcbiAgICAgIHN0eWxlOiBTdHlsZVNoZWV0LmNvbXBvc2UoXG4gICAgICAgIHtoZWlnaHQ6IDMxLCB3aWR0aDogNTF9LFxuICAgICAgICBTdHlsZVNoZWV0LmNvbXBvc2UoXG4gICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgaW9zX2JhY2tncm91bmRDb2xvciA9PSBudWxsXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaW9zX2JhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE2LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIHRodW1iVGludENvbG9yOiB0aHVtYkNvbG9yLFxuICAgICAgdGludENvbG9yOiB0cmFja0NvbG9yRm9yRmFsc2UsXG4gICAgICB2YWx1ZTogdmFsdWUgPT09IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3dpdGNoTmF0aXZlQ29tcG9uZW50XG4gICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgIHsuLi5wbGF0Zm9ybVByb3BzfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT17cHJvcHMuYWNjZXNzaWJpbGl0eVJvbGUgPz8gJ3N3aXRjaCd9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0PXtyZXR1cm5zRmFsc2V9XG4gICAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXI9e3JldHVybnNUcnVlfVxuICAgICAgICByZWY9e3JlZn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFN3aXRjaFdpdGhGb3J3YXJkZWRSZWY7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9BbmRyb2lkU3dpdGNoTmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBBbmRyb2lkU3dpdGNoTmF0aXZlQ29tcG9uZW50IGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvQW5kcm9pZFN3aXRjaE5hdGl2ZUNvbXBvbmVudCc7XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkU3dpdGNoTmF0aXZlQ29tcG9uZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge1xuICBCdWJibGluZ0V2ZW50SGFuZGxlcixcbiAgSW50MzIsXG4gIFdpdGhEZWZhdWx0LFxufSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHlwZXMvQ29kZWdlblR5cGVzJztcblxuaW1wb3J0IGNvZGVnZW5OYXRpdmVDb21tYW5kcyBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21tYW5kcyc7XG5pbXBvcnQgY29kZWdlbk5hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21wb25lbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFN3aXRjaENoYW5nZUV2ZW50ID0gJFJlYWRPbmx5PHt8XG4gIHZhbHVlOiBib29sZWFuLFxuICB0YXJnZXQ6IEludDMyLFxufH0+O1xuXG50eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcblxuICAvLyBQcm9wc1xuICBkaXNhYmxlZD86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIGZhbHNlPixcbiAgZW5hYmxlZD86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIHRydWU+LFxuICB0aHVtYkNvbG9yPzogP0NvbG9yVmFsdWUsXG4gIHRyYWNrQ29sb3JGb3JGYWxzZT86ID9Db2xvclZhbHVlLFxuICB0cmFja0NvbG9yRm9yVHJ1ZT86ID9Db2xvclZhbHVlLFxuICB2YWx1ZT86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIGZhbHNlPixcbiAgb24/OiBXaXRoRGVmYXVsdDxib29sZWFuLCBmYWxzZT4sXG4gIHRodW1iVGludENvbG9yPzogP0NvbG9yVmFsdWUsXG4gIHRyYWNrVGludENvbG9yPzogP0NvbG9yVmFsdWUsXG5cbiAgLy8gRXZlbnRzXG4gIG9uQ2hhbmdlPzogQnViYmxpbmdFdmVudEhhbmRsZXI8U3dpdGNoQ2hhbmdlRXZlbnQ+LFxufH0+O1xuXG50eXBlIE5hdGl2ZVR5cGUgPSBIb3N0Q29tcG9uZW50PE5hdGl2ZVByb3BzPjtcblxuaW50ZXJmYWNlIE5hdGl2ZUNvbW1hbmRzIHtcbiAgK3NldE5hdGl2ZVZhbHVlOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxOYXRpdmVUeXBlPixcbiAgICB2YWx1ZTogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQ29tbWFuZHM6IE5hdGl2ZUNvbW1hbmRzID0gY29kZWdlbk5hdGl2ZUNvbW1hbmRzPE5hdGl2ZUNvbW1hbmRzPih7XG4gIHN1cHBvcnRlZENvbW1hbmRzOiBbJ3NldE5hdGl2ZVZhbHVlJ10sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgKGNvZGVnZW5OYXRpdmVDb21wb25lbnQ8TmF0aXZlUHJvcHM+KCdBbmRyb2lkU3dpdGNoJywge1xuICBpbnRlcmZhY2VPbmx5OiB0cnVlLFxufSk6IE5hdGl2ZVR5cGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL2NvbXBvbmVudHMvU3dpdGNoTmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCBTd2l0Y2hOYXRpdmVDb21wb25lbnQgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvY29tcG9uZW50cy9Td2l0Y2hOYXRpdmVDb21wb25lbnQnO1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoTmF0aXZlQ29tcG9uZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IHR5cGUge1xuICBCdWJibGluZ0V2ZW50SGFuZGxlcixcbiAgSW50MzIsXG4gIFdpdGhEZWZhdWx0LFxufSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHlwZXMvQ29kZWdlblR5cGVzJztcblxuaW1wb3J0IGNvZGVnZW5OYXRpdmVDb21tYW5kcyBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21tYW5kcyc7XG5pbXBvcnQgY29kZWdlbk5hdGl2ZUNvbXBvbmVudCBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21wb25lbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFN3aXRjaENoYW5nZUV2ZW50ID0gJFJlYWRPbmx5PHt8XG4gIHZhbHVlOiBib29sZWFuLFxuICB0YXJnZXQ6IEludDMyLFxufH0+O1xuXG50eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcblxuICAvLyBQcm9wc1xuICBkaXNhYmxlZD86IFdpdGhEZWZhdWx0PGJvb2xlYW4sIGZhbHNlPixcbiAgdmFsdWU/OiBXaXRoRGVmYXVsdDxib29sZWFuLCBmYWxzZT4sXG4gIHRpbnRDb2xvcj86ID9Db2xvclZhbHVlLFxuICBvblRpbnRDb2xvcj86ID9Db2xvclZhbHVlLFxuICB0aHVtYlRpbnRDb2xvcj86ID9Db2xvclZhbHVlLFxuXG4gIC8vIERlcHJlY2F0ZWQgcHJvcHNcbiAgdGh1bWJDb2xvcj86ID9Db2xvclZhbHVlLFxuICB0cmFja0NvbG9yRm9yRmFsc2U/OiA/Q29sb3JWYWx1ZSxcbiAgdHJhY2tDb2xvckZvclRydWU/OiA/Q29sb3JWYWx1ZSxcblxuICAvLyBFdmVudHNcbiAgb25DaGFuZ2U/OiA/QnViYmxpbmdFdmVudEhhbmRsZXI8U3dpdGNoQ2hhbmdlRXZlbnQ+LFxufH0+O1xuXG50eXBlIENvbXBvbmVudFR5cGUgPSBIb3N0Q29tcG9uZW50PE5hdGl2ZVByb3BzPjtcblxuaW50ZXJmYWNlIE5hdGl2ZUNvbW1hbmRzIHtcbiAgK3NldFZhbHVlOiAodmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxDb21wb25lbnRUeXBlPiwgdmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBDb21tYW5kczogTmF0aXZlQ29tbWFuZHMgPSBjb2RlZ2VuTmF0aXZlQ29tbWFuZHM8TmF0aXZlQ29tbWFuZHM+KHtcbiAgc3VwcG9ydGVkQ29tbWFuZHM6IFsnc2V0VmFsdWUnXSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCAoY29kZWdlbk5hdGl2ZUNvbXBvbmVudDxOYXRpdmVQcm9wcz4oJ1N3aXRjaCcsIHtcbiAgcGFwZXJDb21wb25lbnROYW1lOiAnUkNUU3dpdGNoJyxcbiAgZXhjbHVkZWRQbGF0Zm9ybXM6IFsnYW5kcm9pZCddLFxufSk6IENvbXBvbmVudFR5cGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtIb3N0Q29tcG9uZW50fSBmcm9tICcuLi8uLi9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgUHJlc3NFdmVudCxcbiAgU2Nyb2xsRXZlbnQsXG4gIFN5bnRoZXRpY0V2ZW50LFxufSBmcm9tICcuLi8uLi9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICcuLi9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge1RleHRJbnB1dFR5cGV9IGZyb20gJy4vVGV4dElucHV0LmZsb3cnO1xuXG5pbXBvcnQgdXNlUHJlc3NhYmlsaXR5IGZyb20gJy4uLy4uL1ByZXNzYWJpbGl0eS91c2VQcmVzc2FiaWxpdHknO1xuaW1wb3J0IGZsYXR0ZW5TdHlsZSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L2ZsYXR0ZW5TdHlsZSc7XG5pbXBvcnQgU3R5bGVTaGVldCwge1xuICB0eXBlIENvbG9yVmFsdWUsXG4gIHR5cGUgVGV4dFN0eWxlUHJvcCxcbiAgdHlwZSBWaWV3U3R5bGVQcm9wLFxufSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vLi4vVGV4dC9UZXh0JztcbmltcG9ydCBUZXh0QW5jZXN0b3IgZnJvbSAnLi4vLi4vVGV4dC9UZXh0QW5jZXN0b3InO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgdXNlTWVyZ2VSZWZzIGZyb20gJy4uLy4uL1V0aWxpdGllcy91c2VNZXJnZVJlZnMnO1xuaW1wb3J0IFRleHRJbnB1dFN0YXRlIGZyb20gJy4vVGV4dElucHV0U3RhdGUnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0IG51bGx0aHJvd3MgZnJvbSAnbnVsbHRocm93cyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxudHlwZSBSZWFjdFJlZlNldHRlcjxUPiA9IHtjdXJyZW50OiBudWxsIHwgVCwgLi4ufSB8ICgocmVmOiBudWxsIHwgVCkgPT4gbWl4ZWQpO1xudHlwZSBUZXh0SW5wdXRJbnN0YW5jZSA9IFJlYWN0LkVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+ICYge1xuICArY2xlYXI6ICgpID0+IHZvaWQsXG4gICtpc0ZvY3VzZWQ6ICgpID0+IGJvb2xlYW4sXG4gICtnZXROYXRpdmVSZWY6ICgpID0+ID9SZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8bWl4ZWQ+PixcbiAgK3NldFNlbGVjdGlvbjogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PiB2b2lkLFxufTtcblxubGV0IEFuZHJvaWRUZXh0SW5wdXQ7XG5sZXQgQW5kcm9pZFRleHRJbnB1dENvbW1hbmRzO1xubGV0IFJDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3O1xubGV0IFJDVFNpbmdsZWxpbmVUZXh0SW5wdXROYXRpdmVDb21tYW5kcztcbmxldCBSQ1RNdWx0aWxpbmVUZXh0SW5wdXRWaWV3O1xubGV0IFJDVE11bHRpbGluZVRleHRJbnB1dE5hdGl2ZUNvbW1hbmRzO1xuXG5pZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICBBbmRyb2lkVGV4dElucHV0ID0gcmVxdWlyZSgnLi9BbmRyb2lkVGV4dElucHV0TmF0aXZlQ29tcG9uZW50JykuZGVmYXVsdDtcbiAgQW5kcm9pZFRleHRJbnB1dENvbW1hbmRzID1cbiAgICByZXF1aXJlKCcuL0FuZHJvaWRUZXh0SW5wdXROYXRpdmVDb21wb25lbnQnKS5Db21tYW5kcztcbn0gZWxzZSBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gIFJDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3ID1cbiAgICByZXF1aXJlKCcuL1JDVFNpbmdlbGluZVRleHRJbnB1dE5hdGl2ZUNvbXBvbmVudCcpLmRlZmF1bHQ7XG4gIFJDVFNpbmdsZWxpbmVUZXh0SW5wdXROYXRpdmVDb21tYW5kcyA9XG4gICAgcmVxdWlyZSgnLi9SQ1RTaW5nZWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQnKS5Db21tYW5kcztcbiAgUkNUTXVsdGlsaW5lVGV4dElucHV0VmlldyA9XG4gICAgcmVxdWlyZSgnLi9SQ1RNdWx0aWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQnKS5kZWZhdWx0O1xuICBSQ1RNdWx0aWxpbmVUZXh0SW5wdXROYXRpdmVDb21tYW5kcyA9XG4gICAgcmVxdWlyZSgnLi9SQ1RNdWx0aWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQnKS5Db21tYW5kcztcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlRXZlbnQgPSBTeW50aGV0aWNFdmVudDxcbiAgJFJlYWRPbmx5PHt8XG4gICAgZXZlbnRDb3VudDogbnVtYmVyLFxuICAgIHRhcmdldDogbnVtYmVyLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgfH0+LFxuPjtcblxuZXhwb3J0IHR5cGUgVGV4dElucHV0RXZlbnQgPSBTeW50aGV0aWNFdmVudDxcbiAgJFJlYWRPbmx5PHt8XG4gICAgZXZlbnRDb3VudDogbnVtYmVyLFxuICAgIHByZXZpb3VzVGV4dDogc3RyaW5nLFxuICAgIHJhbmdlOiAkUmVhZE9ubHk8e3xcbiAgICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgICBlbmQ6IG51bWJlcixcbiAgICB8fT4sXG4gICAgdGFyZ2V0OiBudW1iZXIsXG4gICAgdGV4dDogc3RyaW5nLFxuICB8fT4sXG4+O1xuXG5leHBvcnQgdHlwZSBDb250ZW50U2l6ZUNoYW5nZUV2ZW50ID0gU3ludGhldGljRXZlbnQ8XG4gICRSZWFkT25seTx7fFxuICAgIHRhcmdldDogbnVtYmVyLFxuICAgIGNvbnRlbnRTaXplOiAkUmVhZE9ubHk8e3xcbiAgICAgIHdpZHRoOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB8fT4sXG4gIHx9Pixcbj47XG5cbnR5cGUgVGFyZ2V0RXZlbnQgPSBTeW50aGV0aWNFdmVudDxcbiAgJFJlYWRPbmx5PHt8XG4gICAgdGFyZ2V0OiBudW1iZXIsXG4gIHx9Pixcbj47XG5cbmV4cG9ydCB0eXBlIEJsdXJFdmVudCA9IFRhcmdldEV2ZW50O1xuZXhwb3J0IHR5cGUgRm9jdXNFdmVudCA9IFRhcmdldEV2ZW50O1xuXG50eXBlIFNlbGVjdGlvbiA9ICRSZWFkT25seTx7fFxuICBzdGFydDogbnVtYmVyLFxuICBlbmQ6IG51bWJlcixcbnx9PjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBTeW50aGV0aWNFdmVudDxcbiAgJFJlYWRPbmx5PHt8XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb24sXG4gICAgdGFyZ2V0OiBudW1iZXIsXG4gIHx9Pixcbj47XG5cbmV4cG9ydCB0eXBlIEtleVByZXNzRXZlbnQgPSBTeW50aGV0aWNFdmVudDxcbiAgJFJlYWRPbmx5PHt8XG4gICAga2V5OiBzdHJpbmcsXG4gICAgdGFyZ2V0PzogP251bWJlcixcbiAgICBldmVudENvdW50PzogP251bWJlcixcbiAgfH0+LFxuPjtcblxuZXhwb3J0IHR5cGUgRWRpdGluZ0V2ZW50ID0gU3ludGhldGljRXZlbnQ8XG4gICRSZWFkT25seTx7fFxuICAgIGV2ZW50Q291bnQ6IG51bWJlcixcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgdGFyZ2V0OiBudW1iZXIsXG4gIHx9Pixcbj47XG5cbnR5cGUgRGF0YURldGVjdG9yVHlwZXNUeXBlID1cbiAgfCAncGhvbmVOdW1iZXInXG4gIHwgJ2xpbmsnXG4gIHwgJ2FkZHJlc3MnXG4gIHwgJ2NhbGVuZGFyRXZlbnQnXG4gIHwgJ3RyYWNraW5nTnVtYmVyJ1xuICB8ICdmbGlnaHROdW1iZXInXG4gIHwgJ2xvb2t1cFN1Z2dlc3Rpb24nXG4gIHwgJ25vbmUnXG4gIHwgJ2FsbCc7XG5cbmV4cG9ydCB0eXBlIEtleWJvYXJkVHlwZSA9XG4gIC8vIENyb3NzIFBsYXRmb3JtXG4gIHwgJ2RlZmF1bHQnXG4gIHwgJ2VtYWlsLWFkZHJlc3MnXG4gIHwgJ251bWVyaWMnXG4gIHwgJ3Bob25lLXBhZCdcbiAgfCAnbnVtYmVyLXBhZCdcbiAgfCAnZGVjaW1hbC1wYWQnXG4gIHwgJ3VybCdcbiAgLy8gaU9TLW9ubHlcbiAgfCAnYXNjaWktY2FwYWJsZSdcbiAgfCAnbnVtYmVycy1hbmQtcHVuY3R1YXRpb24nXG4gIHwgJ25hbWUtcGhvbmUtcGFkJ1xuICB8ICd0d2l0dGVyJ1xuICB8ICd3ZWItc2VhcmNoJ1xuICAvLyBpT1MgMTArIG9ubHlcbiAgfCAnYXNjaWktY2FwYWJsZS1udW1iZXItcGFkJ1xuICAvLyBBbmRyb2lkLW9ubHlcbiAgfCAndmlzaWJsZS1wYXNzd29yZCc7XG5cbmV4cG9ydCB0eXBlIElucHV0TW9kZSA9XG4gIHwgJ25vbmUnXG4gIHwgJ3RleHQnXG4gIHwgJ2RlY2ltYWwnXG4gIHwgJ251bWVyaWMnXG4gIHwgJ3RlbCdcbiAgfCAnc2VhcmNoJ1xuICB8ICdlbWFpbCdcbiAgfCAndXJsJztcblxuZXhwb3J0IHR5cGUgUmV0dXJuS2V5VHlwZSA9XG4gIC8vIENyb3NzIFBsYXRmb3JtXG4gIHwgJ2RvbmUnXG4gIHwgJ2dvJ1xuICB8ICduZXh0J1xuICB8ICdzZWFyY2gnXG4gIHwgJ3NlbmQnXG4gIC8vIEFuZHJvaWQtb25seVxuICB8ICdub25lJ1xuICB8ICdwcmV2aW91cydcbiAgLy8gaU9TLW9ubHlcbiAgfCAnZGVmYXVsdCdcbiAgfCAnZW1lcmdlbmN5LWNhbGwnXG4gIHwgJ2dvb2dsZSdcbiAgfCAnam9pbidcbiAgfCAncm91dGUnXG4gIHwgJ3lhaG9vJztcblxuZXhwb3J0IHR5cGUgU3VibWl0QmVoYXZpb3IgPSAnc3VibWl0JyB8ICdibHVyQW5kU3VibWl0JyB8ICduZXdsaW5lJztcblxuZXhwb3J0IHR5cGUgQXV0b0NhcGl0YWxpemUgPSAnbm9uZScgfCAnc2VudGVuY2VzJyB8ICd3b3JkcycgfCAnY2hhcmFjdGVycyc7XG5cbmV4cG9ydCB0eXBlIFRleHRDb250ZW50VHlwZSA9XG4gIHwgJ25vbmUnXG4gIHwgJ1VSTCdcbiAgfCAnYWRkcmVzc0NpdHknXG4gIHwgJ2FkZHJlc3NDaXR5QW5kU3RhdGUnXG4gIHwgJ2FkZHJlc3NTdGF0ZSdcbiAgfCAnY291bnRyeU5hbWUnXG4gIHwgJ2NyZWRpdENhcmROdW1iZXInXG4gIHwgJ2NyZWRpdENhcmRFeHBpcmF0aW9uJ1xuICB8ICdjcmVkaXRDYXJkRXhwaXJhdGlvbk1vbnRoJ1xuICB8ICdjcmVkaXRDYXJkRXhwaXJhdGlvblllYXInXG4gIHwgJ2NyZWRpdENhcmRTZWN1cml0eUNvZGUnXG4gIHwgJ2NyZWRpdENhcmRUeXBlJ1xuICB8ICdjcmVkaXRDYXJkTmFtZSdcbiAgfCAnY3JlZGl0Q2FyZEdpdmVuTmFtZSdcbiAgfCAnY3JlZGl0Q2FyZE1pZGRsZU5hbWUnXG4gIHwgJ2NyZWRpdENhcmRGYW1pbHlOYW1lJ1xuICB8ICdlbWFpbEFkZHJlc3MnXG4gIHwgJ2ZhbWlseU5hbWUnXG4gIHwgJ2Z1bGxTdHJlZXRBZGRyZXNzJ1xuICB8ICdnaXZlbk5hbWUnXG4gIHwgJ2pvYlRpdGxlJ1xuICB8ICdsb2NhdGlvbidcbiAgfCAnbWlkZGxlTmFtZSdcbiAgfCAnbmFtZSdcbiAgfCAnbmFtZVByZWZpeCdcbiAgfCAnbmFtZVN1ZmZpeCdcbiAgfCAnbmlja25hbWUnXG4gIHwgJ29yZ2FuaXphdGlvbk5hbWUnXG4gIHwgJ3Bvc3RhbENvZGUnXG4gIHwgJ3N0cmVldEFkZHJlc3NMaW5lMSdcbiAgfCAnc3RyZWV0QWRkcmVzc0xpbmUyJ1xuICB8ICdzdWJsb2NhbGl0eSdcbiAgfCAndGVsZXBob25lTnVtYmVyJ1xuICB8ICd1c2VybmFtZSdcbiAgfCAncGFzc3dvcmQnXG4gIHwgJ25ld1Bhc3N3b3JkJ1xuICB8ICdvbmVUaW1lQ29kZSdcbiAgfCAnYmlydGhkYXRlJ1xuICB8ICdiaXJ0aGRhdGVEYXknXG4gIHwgJ2JpcnRoZGF0ZU1vbnRoJ1xuICB8ICdiaXJ0aGRhdGVZZWFyJztcblxuZXhwb3J0IHR5cGUgZW50ZXJLZXlIaW50VHlwZSA9XG4gIC8vIENyb3NzIFBsYXRmb3JtXG4gIHwgJ2RvbmUnXG4gIHwgJ2dvJ1xuICB8ICduZXh0J1xuICB8ICdzZWFyY2gnXG4gIHwgJ3NlbmQnXG4gIC8vIEFuZHJvaWQtb25seVxuICB8ICdwcmV2aW91cydcbiAgLy8gaU9TLW9ubHlcbiAgfCAnZW50ZXInO1xuXG50eXBlIFBhc3N3b3JkUnVsZXMgPSBzdHJpbmc7XG5cbnR5cGUgSU9TUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLyoqXG4gICAqIFdoZW4gdGhlIGNsZWFyIGJ1dHRvbiBzaG91bGQgYXBwZWFyIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSB0ZXh0IHZpZXcuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNpbmdsZS1saW5lIFRleHRJbnB1dCBjb21wb25lbnQuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIGNsZWFyQnV0dG9uTW9kZT86ID8oJ25ldmVyJyB8ICd3aGlsZS1lZGl0aW5nJyB8ICd1bmxlc3MtZWRpdGluZycgfCAnYWx3YXlzJyksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY2xlYXJzIHRoZSB0ZXh0IGZpZWxkIGF1dG9tYXRpY2FsbHkgd2hlbiBlZGl0aW5nIGJlZ2lucy5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgY2xlYXJUZXh0T25Gb2N1cz86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSB0eXBlcyBvZiBkYXRhIGNvbnZlcnRlZCB0byBjbGlja2FibGUgVVJMcyBpbiB0aGUgdGV4dCBpbnB1dC5cbiAgICogT25seSB2YWxpZCBpZiBgbXVsdGlsaW5lPXt0cnVlfWAgYW5kIGBlZGl0YWJsZT17ZmFsc2V9YC5cbiAgICogQnkgZGVmYXVsdCBubyBkYXRhIHR5cGVzIGFyZSBkZXRlY3RlZC5cbiAgICpcbiAgICogWW91IGNhbiBwcm92aWRlIG9uZSB0eXBlIG9yIGFuIGFycmF5IG9mIG1hbnkgdHlwZXMuXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBmb3IgYGRhdGFEZXRlY3RvclR5cGVzYCBhcmU6XG4gICAqXG4gICAqIC0gYCdwaG9uZU51bWJlcidgXG4gICAqIC0gYCdsaW5rJ2BcbiAgICogLSBgJ2FkZHJlc3MnYFxuICAgKiAtIGAnY2FsZW5kYXJFdmVudCdgXG4gICAqIC0gYCdub25lJ2BcbiAgICogLSBgJ2FsbCdgXG4gICAqXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIGRhdGFEZXRlY3RvclR5cGVzPzpcbiAgICB8ID9EYXRhRGV0ZWN0b3JUeXBlc1R5cGVcbiAgICB8ICRSZWFkT25seUFycmF5PERhdGFEZXRlY3RvclR5cGVzVHlwZT4sXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGtleWJvYXJkIGRpc2FibGVzIHRoZSByZXR1cm4ga2V5IHdoZW4gdGhlcmUgaXMgbm8gdGV4dCBhbmRcbiAgICogYXV0b21hdGljYWxseSBlbmFibGVzIGl0IHdoZW4gdGhlcmUgaXMgdGV4dC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgZW5hYmxlc1JldHVybktleUF1dG9tYXRpY2FsbHk/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgaWRlbnRpZmllciB3aGljaCBsaW5rcyBhIGN1c3RvbSBJbnB1dEFjY2Vzc29yeVZpZXcgdG9cbiAgICogdGhpcyB0ZXh0IGlucHV0LiBUaGUgSW5wdXRBY2Nlc3NvcnlWaWV3IGlzIHJlbmRlcmVkIGFib3ZlIHRoZVxuICAgKiBrZXlib2FyZCB3aGVuIHRoaXMgdGV4dCBpbnB1dCBpcyBmb2N1c2VkLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBpbnB1dEFjY2Vzc29yeVZpZXdJRD86ID9zdHJpbmcsXG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNvbG9yIG9mIHRoZSBrZXlib2FyZC5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAga2V5Ym9hcmRBcHBlYXJhbmNlPzogPygnZGVmYXVsdCcgfCAnbGlnaHQnIHwgJ2RhcmsnKSxcblxuICAvKipcbiAgICogUHJvdmlkZSBydWxlcyBmb3IgeW91ciBwYXNzd29yZC5cbiAgICogRm9yIGV4YW1wbGUsIHNheSB5b3Ugd2FudCB0byByZXF1aXJlIGEgcGFzc3dvcmQgd2l0aCBhdCBsZWFzdCBlaWdodCBjaGFyYWN0ZXJzIGNvbnNpc3Rpbmcgb2YgYSBtaXggb2YgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycywgYXQgbGVhc3Qgb25lIG51bWJlciwgYW5kIGF0IG1vc3QgdHdvIGNvbnNlY3V0aXZlIGNoYXJhY3RlcnMuXG4gICAqIFwicmVxdWlyZWQ6IHVwcGVyOyByZXF1aXJlZDogbG93ZXI7IHJlcXVpcmVkOiBkaWdpdDsgbWF4LWNvbnNlY3V0aXZlOiAyOyBtaW5sZW5ndGg6IDg7XCJcbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgcGFzc3dvcmRSdWxlcz86ID9QYXNzd29yZFJ1bGVzLFxuXG4gIC8qXG4gICAqIElmIGB0cnVlYCwgYWxsb3dzIFRleHRJbnB1dCB0byBwYXNzIHRvdWNoIGV2ZW50cyB0byB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogVGhpcyBhbGxvd3MgY29tcG9uZW50cyB0byBiZSBzd2lwZWFibGUgZnJvbSB0aGUgVGV4dElucHV0IG9uIGlPUyxcbiAgICogYXMgaXMgdGhlIGNhc2Ugb24gQW5kcm9pZCBieSBkZWZhdWx0LlxuICAgKiBJZiBgZmFsc2VgLCBUZXh0SW5wdXQgYWx3YXlzIGFza3MgdG8gaGFuZGxlIHRoZSBpbnB1dCAoZXhjZXB0IHdoZW4gZGlzYWJsZWQpLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICByZWplY3RSZXNwb25kZXJUZXJtaW5hdGlvbj86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBJZiBgZmFsc2VgLCBzY3JvbGxpbmcgb2YgdGhlIHRleHQgdmlldyB3aWxsIGJlIGRpc2FibGVkLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuIERvZXMgb25seSB3b3JrIHdpdGggJ211bHRpbGluZT17dHJ1ZX0nLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBzY3JvbGxFbmFibGVkPzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIElmIGBmYWxzZWAsIGRpc2FibGVzIHNwZWxsLWNoZWNrIHN0eWxlIChpLmUuIHJlZCB1bmRlcmxpbmVzKS5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gYGF1dG9Db3JyZWN0YC5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgc3BlbGxDaGVjaz86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBHaXZlIHRoZSBrZXlib2FyZCBhbmQgdGhlIHN5c3RlbSBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbiAgICogZXhwZWN0ZWQgc2VtYW50aWMgbWVhbmluZyBmb3IgdGhlIGNvbnRlbnQgdGhhdCB1c2VycyBlbnRlci5cbiAgICogYGF1dG9Db21wbGV0ZWAgcHJvcGVydHkgYWNjb21wbGlzaGVzIHNhbWUgYmVoYXZpb3IgYW5kIGlzIHJlY29tbWVuZGVkIGFzIGl0cyBzdXBwb3J0ZWQgYnkgYm90aCBwbGF0Zm9ybXMuXG4gICAqIEF2b2lkIHVzaW5nIGJvdGggYGF1dG9Db21wbGV0ZWAgYW5kIGB0ZXh0Q29udGVudFR5cGVgLCB5b3UgY2FuIHVzZSBgUGxhdGZvcm0uc2VsZWN0YCBmb3IgZGlmZmVyaW5nIHBsYXRmb3JtIGJlaGF2aW9ycy5cbiAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3aGVuIGJvdGggc2V0LCBgdGV4dENvbnRlbnRUeXBlYCB0YWtlcyBwcmVjZWRlbmNlIG9uIGlPUy5cbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgdGV4dENvbnRlbnRUeXBlPzogP1RleHRDb250ZW50VHlwZSxcblxuICAvKipcbiAgICogU2V0IGxpbmUgYnJlYWsgc3RyYXRlZ3kgb24gaU9TLlxuICAgKiBAcGxhdGZvcm0gaW9zXG4gICAqL1xuICBsaW5lQnJlYWtTdHJhdGVneUlPUz86ID8oJ25vbmUnIHwgJ3N0YW5kYXJkJyB8ICdoYW5ndWwtd29yZCcgfCAncHVzaC1vdXQnKSxcblxuICAvKipcbiAgICogSWYgYGZhbHNlYCwgdGhlIGlPUyBzeXN0ZW0gd2lsbCBub3QgaW5zZXJ0IGFuIGV4dHJhIHNwYWNlIGFmdGVyIGEgcGFzdGUgb3BlcmF0aW9uXG4gICAqIG5laXRoZXIgZGVsZXRlIG9uZSBvciB0d28gc3BhY2VzIGFmdGVyIGEgY3V0IG9yIGRlbGV0ZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICpcbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgc21hcnRJbnNlcnREZWxldGU/OiA/Ym9vbGVhbixcbnx9PjtcblxudHlwZSBBbmRyb2lkUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLyoqXG4gICAqIFdoZW4gcHJvdmlkZWQgaXQgd2lsbCBzZXQgdGhlIGNvbG9yIG9mIHRoZSBjdXJzb3IgKG9yIFwiY2FyZXRcIikgaW4gdGhlIGNvbXBvbmVudC5cbiAgICogVW5saWtlIHRoZSBiZWhhdmlvciBvZiBgc2VsZWN0aW9uQ29sb3JgIHRoZSBjdXJzb3IgY29sb3Igd2lsbCBiZSBzZXQgaW5kZXBlbmRlbnRseVxuICAgKiBmcm9tIHRoZSBjb2xvciBvZiB0aGUgdGV4dCBzZWxlY3Rpb24gYm94LlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgY3Vyc29yQ29sb3I/OiA/Q29sb3JWYWx1ZSxcblxuICAvKipcbiAgICogV2hlbiBgZmFsc2VgLCBpZiB0aGVyZSBpcyBhIHNtYWxsIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgYXJvdW5kIGEgdGV4dCBpbnB1dFxuICAgKiAoZS5nLiBsYW5kc2NhcGUgb3JpZW50YXRpb24gb24gYSBwaG9uZSksIHRoZSBPUyBtYXkgY2hvb3NlIHRvIGhhdmUgdGhlIHVzZXIgZWRpdFxuICAgKiB0aGUgdGV4dCBpbnNpZGUgb2YgYSBmdWxsIHNjcmVlbiB0ZXh0IGlucHV0IG1vZGUuIFdoZW4gYHRydWVgLCB0aGlzIGZlYXR1cmUgaXNcbiAgICogZGlzYWJsZWQgYW5kIHVzZXJzIHdpbGwgYWx3YXlzIGVkaXQgdGhlIHRleHQgZGlyZWN0bHkgaW5zaWRlIG9mIHRoZSB0ZXh0IGlucHV0LlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgZGlzYWJsZUZ1bGxzY3JlZW5VST86ID9ib29sZWFuLFxuXG4gIGltcG9ydGFudEZvckF1dG9maWxsPzogPyhcbiAgICB8ICdhdXRvJ1xuICAgIHwgJ25vJ1xuICAgIHwgJ25vRXhjbHVkZURlc2NlbmRhbnRzJ1xuICAgIHwgJ3llcydcbiAgICB8ICd5ZXNFeGNsdWRlRGVzY2VuZGFudHMnXG4gICksXG5cbiAgLyoqXG4gICAqIElmIGRlZmluZWQsIHRoZSBwcm92aWRlZCBpbWFnZSByZXNvdXJjZSB3aWxsIGJlIHJlbmRlcmVkIG9uIHRoZSBsZWZ0LlxuICAgKiBUaGUgaW1hZ2UgcmVzb3VyY2UgbXVzdCBiZSBpbnNpZGUgYC9hbmRyb2lkL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGVgIGFuZCByZWZlcmVuY2VkXG4gICAqIGxpa2VcbiAgICogYGBgXG4gICAqIDxUZXh0SW5wdXRcbiAgICogIGlubGluZUltYWdlTGVmdD0nc2VhcmNoX2ljb24nXG4gICAqIC8+XG4gICAqIGBgYFxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgaW5saW5lSW1hZ2VMZWZ0PzogP3N0cmluZyxcblxuICAvKipcbiAgICogUGFkZGluZyBiZXR3ZWVuIHRoZSBpbmxpbmUgaW1hZ2UsIGlmIGFueSwgYW5kIHRoZSB0ZXh0IGlucHV0IGl0c2VsZi5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIGlubGluZUltYWdlUGFkZGluZz86ID9udW1iZXIsXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG51bWJlciBvZiBsaW5lcyBmb3IgYSBgVGV4dElucHV0YC4gVXNlIGl0IHdpdGggbXVsdGlsaW5lIHNldCB0b1xuICAgKiBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBmaWxsIHRoZSBsaW5lcy5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIG51bWJlck9mTGluZXM/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXR1cm4ga2V5IHRvIHRoZSBsYWJlbC4gVXNlIGl0IGluc3RlYWQgb2YgYHJldHVybktleVR5cGVgLlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgcmV0dXJuS2V5TGFiZWw/OiA/c3RyaW5nLFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgYSBgVGV4dElucHV0YC4gVXNlIGl0IHdpdGggbXVsdGlsaW5lIHNldCB0b1xuICAgKiBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBmaWxsIHRoZSBsaW5lcy5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIHJvd3M/OiA/bnVtYmVyLFxuXG4gIC8qKlxuICAgKiBXaGVuIGBmYWxzZWAsIGl0IHdpbGwgcHJldmVudCB0aGUgc29mdCBrZXlib2FyZCBmcm9tIHNob3dpbmcgd2hlbiB0aGUgZmllbGQgaXMgZm9jdXNlZC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgc2hvd1NvZnRJbnB1dE9uRm9jdXM/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogU2V0IHRleHQgYnJlYWsgc3RyYXRlZ3kgb24gQW5kcm9pZCBBUEkgTGV2ZWwgMjMrLCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBzaW1wbGVgLCBgaGlnaFF1YWxpdHlgLCBgYmFsYW5jZWRgXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBzaW1wbGVgLlxuICAgKiBAcGxhdGZvcm0gYW5kcm9pZFxuICAgKi9cbiAgdGV4dEJyZWFrU3RyYXRlZ3k/OiA/KCdzaW1wbGUnIHwgJ2hpZ2hRdWFsaXR5JyB8ICdiYWxhbmNlZCcpLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGBUZXh0SW5wdXRgIHVuZGVybGluZS5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIHVuZGVybGluZUNvbG9yQW5kcm9pZD86ID9Db2xvclZhbHVlLFxufH0+O1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICAuLi4kRGlmZjxWaWV3UHJvcHMsICRSZWFkT25seTx7fHN0eWxlOiA/Vmlld1N0eWxlUHJvcHx9Pj4sXG4gIC4uLklPU1Byb3BzLFxuICAuLi5BbmRyb2lkUHJvcHMsXG5cbiAgLyoqXG4gICAqIENhbiB0ZWxsIGBUZXh0SW5wdXRgIHRvIGF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZSBjZXJ0YWluIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIC0gYGNoYXJhY3RlcnNgOiBhbGwgY2hhcmFjdGVycy5cbiAgICogLSBgd29yZHNgOiBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkLlxuICAgKiAtIGBzZW50ZW5jZXNgOiBmaXJzdCBsZXR0ZXIgb2YgZWFjaCBzZW50ZW5jZSAoKmRlZmF1bHQqKS5cbiAgICogLSBgbm9uZWA6IGRvbid0IGF1dG8gY2FwaXRhbGl6ZSBhbnl0aGluZy5cbiAgICovXG4gIGF1dG9DYXBpdGFsaXplPzogP0F1dG9DYXBpdGFsaXplLFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYXV0b2NvbXBsZXRlIGhpbnRzIGZvciB0aGUgc3lzdGVtLCBzbyBpdCBjYW4gcHJvdmlkZSBhdXRvZmlsbC5cbiAgICogT24gQW5kcm9pZCwgdGhlIHN5c3RlbSB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvIG9mZmVyIGF1dG9maWxsIGJ5IHVzaW5nIGhldXJpc3RpY3MgdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgY29udGVudC5cbiAgICogVG8gZGlzYWJsZSBhdXRvY29tcGxldGUsIHNldCBhdXRvQ29tcGxldGUgdG8gb2ZmLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyB3b3JrIGFjcm9zcyBwbGF0Zm9ybXM6XG4gICAqXG4gICAqIC0gYGFkZGl0aW9uYWwtbmFtZWBcbiAgICogLSBgYWRkcmVzcy1saW5lMWBcbiAgICogLSBgYWRkcmVzcy1saW5lMmBcbiAgICogLSBgYmlydGhkYXRlLWRheWAgKGlPUyAxNyspXG4gICAqIC0gYGJpcnRoZGF0ZS1mdWxsYCAoaU9TIDE3KylcbiAgICogLSBgYmlydGhkYXRlLW1vbnRoYCAoaU9TIDE3KylcbiAgICogLSBgYmlydGhkYXRlLXllYXJgIChpT1MgMTcrKVxuICAgKiAtIGBjYy1udW1iZXJgXG4gICAqIC0gYGNjLWNzY2AgKGlPUyAxNyspXG4gICAqIC0gYGNjLWV4cGAgKGlPUyAxNyspXG4gICAqIC0gYGNjLWV4cC1kYXlgIChpT1MgMTcrKVxuICAgKiAtIGBjYy1leHAtbW9udGhgIChpT1MgMTcrKVxuICAgKiAtIGBjYy1leHAteWVhcmAgKGlPUyAxNyspXG4gICAqIC0gYGNvdW50cnlgXG4gICAqIC0gYGN1cnJlbnQtcGFzc3dvcmRgXG4gICAqIC0gYGVtYWlsYFxuICAgKiAtIGBmYW1pbHktbmFtZWBcbiAgICogLSBgZ2l2ZW4tbmFtZWBcbiAgICogLSBgaG9ub3JpZmljLXByZWZpeGBcbiAgICogLSBgaG9ub3JpZmljLXN1ZmZpeGBcbiAgICogLSBgbmFtZWBcbiAgICogLSBgbmV3LXBhc3N3b3JkYFxuICAgKiAtIGBvZmZgXG4gICAqIC0gYG9uZS10aW1lLWNvZGVgXG4gICAqIC0gYHBvc3RhbC1jb2RlYFxuICAgKiAtIGBzdHJlZXQtYWRkcmVzc2BcbiAgICogLSBgdGVsYFxuICAgKiAtIGB1c2VybmFtZWBcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyB2YWx1ZXMgd29yayBvbiBpT1Mgb25seTpcbiAgICpcbiAgICogLSBgY2MtbmFtZWAgKGlPUyAxNyspXG4gICAqIC0gYGNjLWdpdmVuLW5hbWVgIChpT1MgMTcrKVxuICAgKiAtIGBjYy1taWRkbGUtbmFtZWAgKGlPUyAxNyspXG4gICAqIC0gYGNjLWZhbWlseS1uYW1lYCAoaU9TIDE3KylcbiAgICogLSBgY2MtdHlwZWAgKGlPUyAxNyspXG4gICAqIC0gYG5pY2tuYW1lYFxuICAgKiAtIGBvcmdhbml6YXRpb25gXG4gICAqIC0gYG9yZ2FuaXphdGlvbi10aXRsZWBcbiAgICogLSBgdXJsYFxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyB3b3JrIG9uIEFuZHJvaWQgb25seTpcbiAgICpcbiAgICogLSBgZ2VuZGVyYFxuICAgKiAtIGBuYW1lLWZhbWlseWBcbiAgICogLSBgbmFtZS1naXZlbmBcbiAgICogLSBgbmFtZS1taWRkbGVgXG4gICAqIC0gYG5hbWUtbWlkZGxlLWluaXRpYWxgXG4gICAqIC0gYG5hbWUtcHJlZml4YFxuICAgKiAtIGBuYW1lLXN1ZmZpeGBcbiAgICogLSBgcGFzc3dvcmRgXG4gICAqIC0gYHBhc3N3b3JkLW5ld2BcbiAgICogLSBgcG9zdGFsLWFkZHJlc3NgXG4gICAqIC0gYHBvc3RhbC1hZGRyZXNzLWNvdW50cnlgXG4gICAqIC0gYHBvc3RhbC1hZGRyZXNzLWV4dGVuZGVkYFxuICAgKiAtIGBwb3N0YWwtYWRkcmVzcy1leHRlbmRlZC1wb3N0YWwtY29kZWBcbiAgICogLSBgcG9zdGFsLWFkZHJlc3MtbG9jYWxpdHlgXG4gICAqIC0gYHBvc3RhbC1hZGRyZXNzLXJlZ2lvbmBcbiAgICogLSBgc21zLW90cGBcbiAgICogLSBgdGVsLWNvdW50cnktY29kZWBcbiAgICogLSBgdGVsLW5hdGlvbmFsYFxuICAgKiAtIGB0ZWwtZGV2aWNlYFxuICAgKiAtIGB1c2VybmFtZS1uZXdgXG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiA/KFxuICAgIHwgJ2FkZGl0aW9uYWwtbmFtZSdcbiAgICB8ICdhZGRyZXNzLWxpbmUxJ1xuICAgIHwgJ2FkZHJlc3MtbGluZTInXG4gICAgfCAnYmlydGhkYXRlLWRheSdcbiAgICB8ICdiaXJ0aGRhdGUtZnVsbCdcbiAgICB8ICdiaXJ0aGRhdGUtbW9udGgnXG4gICAgfCAnYmlydGhkYXRlLXllYXInXG4gICAgfCAnY2MtY3NjJ1xuICAgIHwgJ2NjLWV4cCdcbiAgICB8ICdjYy1leHAtZGF5J1xuICAgIHwgJ2NjLWV4cC1tb250aCdcbiAgICB8ICdjYy1leHAteWVhcidcbiAgICB8ICdjYy1udW1iZXInXG4gICAgfCAnY2MtbmFtZSdcbiAgICB8ICdjYy1naXZlbi1uYW1lJ1xuICAgIHwgJ2NjLW1pZGRsZS1uYW1lJ1xuICAgIHwgJ2NjLWZhbWlseS1uYW1lJ1xuICAgIHwgJ2NjLXR5cGUnXG4gICAgfCAnY291bnRyeSdcbiAgICB8ICdjdXJyZW50LXBhc3N3b3JkJ1xuICAgIHwgJ2VtYWlsJ1xuICAgIHwgJ2ZhbWlseS1uYW1lJ1xuICAgIHwgJ2dlbmRlcidcbiAgICB8ICdnaXZlbi1uYW1lJ1xuICAgIHwgJ2hvbm9yaWZpYy1wcmVmaXgnXG4gICAgfCAnaG9ub3JpZmljLXN1ZmZpeCdcbiAgICB8ICduYW1lJ1xuICAgIHwgJ25hbWUtZmFtaWx5J1xuICAgIHwgJ25hbWUtZ2l2ZW4nXG4gICAgfCAnbmFtZS1taWRkbGUnXG4gICAgfCAnbmFtZS1taWRkbGUtaW5pdGlhbCdcbiAgICB8ICduYW1lLXByZWZpeCdcbiAgICB8ICduYW1lLXN1ZmZpeCdcbiAgICB8ICduZXctcGFzc3dvcmQnXG4gICAgfCAnbmlja25hbWUnXG4gICAgfCAnb25lLXRpbWUtY29kZSdcbiAgICB8ICdvcmdhbml6YXRpb24nXG4gICAgfCAnb3JnYW5pemF0aW9uLXRpdGxlJ1xuICAgIHwgJ3Bhc3N3b3JkJ1xuICAgIHwgJ3Bhc3N3b3JkLW5ldydcbiAgICB8ICdwb3N0YWwtYWRkcmVzcydcbiAgICB8ICdwb3N0YWwtYWRkcmVzcy1jb3VudHJ5J1xuICAgIHwgJ3Bvc3RhbC1hZGRyZXNzLWV4dGVuZGVkJ1xuICAgIHwgJ3Bvc3RhbC1hZGRyZXNzLWV4dGVuZGVkLXBvc3RhbC1jb2RlJ1xuICAgIHwgJ3Bvc3RhbC1hZGRyZXNzLWxvY2FsaXR5J1xuICAgIHwgJ3Bvc3RhbC1hZGRyZXNzLXJlZ2lvbidcbiAgICB8ICdwb3N0YWwtY29kZSdcbiAgICB8ICdzdHJlZXQtYWRkcmVzcydcbiAgICB8ICdzbXMtb3RwJ1xuICAgIHwgJ3RlbCdcbiAgICB8ICd0ZWwtY291bnRyeS1jb2RlJ1xuICAgIHwgJ3RlbC1uYXRpb25hbCdcbiAgICB8ICd0ZWwtZGV2aWNlJ1xuICAgIHwgJ3VybCdcbiAgICB8ICd1c2VybmFtZSdcbiAgICB8ICd1c2VybmFtZS1uZXcnXG4gICAgfCAnb2ZmJ1xuICApLFxuXG4gIC8qKlxuICAgKiBJZiBgZmFsc2VgLCBkaXNhYmxlcyBhdXRvLWNvcnJlY3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICovXG4gIGF1dG9Db3JyZWN0PzogP2Jvb2xlYW4sXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZm9jdXNlcyB0aGUgaW5wdXQgb24gYGNvbXBvbmVudERpZE1vdW50YC5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICovXG4gIGF1dG9Gb2N1cz86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBmb250cyBzaG91bGQgc2NhbGUgdG8gcmVzcGVjdCBUZXh0IFNpemUgYWNjZXNzaWJpbGl0eSBzZXR0aW5ncy4gVGhlXG4gICAqIGRlZmF1bHQgaXMgYHRydWVgLlxuICAgKi9cbiAgYWxsb3dGb250U2NhbGluZz86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNhcmV0IGlzIGhpZGRlbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICpcbiAgICogT24gQW5kcm9pZCBkZXZpY2VzIG1hbnVmYWN0dXJlZCBieSBYaWFvbWkgd2l0aCBBbmRyb2lkIFEsXG4gICAqIHdoZW4ga2V5Ym9hcmRUeXBlIGVxdWFscyAnZW1haWwtYWRkcmVzcyd0aGlzIHdpbGwgYmUgc2V0XG4gICAqIGluIG5hdGl2ZSB0byAndHJ1ZScgdG8gcHJldmVudCBhIHN5c3RlbSByZWxhdGVkIGNyYXNoLiBUaGlzXG4gICAqIHdpbGwgY2F1c2UgY3Vyc29yIHRvIGJlIGRpc2FibGVkIGFzIGEgc2lkZS1lZmZlY3QuXG4gICAqXG4gICAqL1xuICBjYXJldEhpZGRlbj86ID9ib29sZWFuLFxuXG4gIC8qXG4gICAqIElmIGB0cnVlYCwgY29udGV4dE1lbnVIaWRkZW4gaXMgaGlkZGVuLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgKi9cbiAgY29udGV4dE1lbnVIaWRkZW4/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogUHJvdmlkZXMgYW4gaW5pdGlhbCB2YWx1ZSB0aGF0IHdpbGwgY2hhbmdlIHdoZW4gdGhlIHVzZXIgc3RhcnRzIHR5cGluZy5cbiAgICogVXNlZnVsIGZvciBzaW1wbGUgdXNlLWNhc2VzIHdoZXJlIHlvdSBkbyBub3Qgd2FudCB0byBkZWFsIHdpdGggbGlzdGVuaW5nXG4gICAqIHRvIGV2ZW50cyBhbmQgdXBkYXRpbmcgdGhlIHZhbHVlIHByb3AgdG8ga2VlcCB0aGUgY29udHJvbGxlZCBzdGF0ZSBpbiBzeW5jLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogP1N0cmluZ2lzaCxcblxuICAvKipcbiAgICogSWYgYGZhbHNlYCwgdGV4dCBpcyBub3QgZWRpdGFibGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICovXG4gIGVkaXRhYmxlPzogP2Jvb2xlYW4sXG5cbiAgZm9yd2FyZGVkUmVmPzogP1JlYWN0UmVmU2V0dGVyPFRleHRJbnB1dEluc3RhbmNlPixcblxuICAvKipcbiAgICogYGVudGVyS2V5SGludGAgZGVmaW5lcyB3aGF0IGFjdGlvbiBsYWJlbCAob3IgaWNvbikgdG8gcHJlc2VudCBmb3IgdGhlIGVudGVyIGtleSBvbiB2aXJ0dWFsIGtleWJvYXJkcy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyB2YWx1ZXMgaXMgc3VwcG9ydGVkOlxuICAgKlxuICAgKiAtIGBlbnRlcmBcbiAgICogLSBgZG9uZWBcbiAgICogLSBgZ29gXG4gICAqIC0gYG5leHRgXG4gICAqIC0gYHByZXZpb3VzYFxuICAgKiAtIGBzZWFyY2hgXG4gICAqIC0gYHNlbmRgXG4gICAqL1xuICBlbnRlcktleUhpbnQ/OiA/ZW50ZXJLZXlIaW50VHlwZSxcblxuICAvKipcbiAgICogYGlucHV0TW9kZWAgd29ya3MgbGlrZSB0aGUgYGlucHV0bW9kZWAgYXR0cmlidXRlIGluIEhUTUwsIGl0IGRldGVybWluZXMgd2hpY2hcbiAgICoga2V5Ym9hcmQgdG8gb3BlbiwgZS5nLmBudW1lcmljYCBhbmQgaGFzIHByZWNlZGVuY2Ugb3ZlciBrZXlib2FyZFR5cGVcbiAgICpcbiAgICogU3VwcG9ydCB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAgICpcbiAgICogLSBgbm9uZWBcbiAgICogLSBgdGV4dGBcbiAgICogLSBgZGVjaW1hbGBcbiAgICogLSBgbnVtZXJpY2BcbiAgICogLSBgdGVsYFxuICAgKiAtIGBzZWFyY2hgXG4gICAqIC0gYGVtYWlsYFxuICAgKiAtIGB1cmxgXG4gICAqL1xuICBpbnB1dE1vZGU/OiA/SW5wdXRNb2RlLFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoaWNoIGtleWJvYXJkIHRvIG9wZW4sIGUuZy5gbnVtZXJpY2AuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIHdvcmsgYWNyb3NzIHBsYXRmb3JtczpcbiAgICpcbiAgICogLSBgZGVmYXVsdGBcbiAgICogLSBgbnVtZXJpY2BcbiAgICogLSBgbnVtYmVyLXBhZGBcbiAgICogLSBgZGVjaW1hbC1wYWRgXG4gICAqIC0gYGVtYWlsLWFkZHJlc3NgXG4gICAqIC0gYHBob25lLXBhZGBcbiAgICogLSBgdXJsYFxuICAgKlxuICAgKiAqaU9TIE9ubHkqXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIHdvcmsgb24gaU9TIG9ubHk6XG4gICAqXG4gICAqIC0gYGFzY2lpLWNhcGFibGVgXG4gICAqIC0gYG51bWJlcnMtYW5kLXB1bmN0dWF0aW9uYFxuICAgKiAtIGBuYW1lLXBob25lLXBhZGBcbiAgICogLSBgdHdpdHRlcmBcbiAgICogLSBgd2ViLXNlYXJjaGBcbiAgICpcbiAgICogKkFuZHJvaWQgT25seSpcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyB2YWx1ZXMgd29yayBvbiBBbmRyb2lkIG9ubHk6XG4gICAqXG4gICAqIC0gYHZpc2libGUtcGFzc3dvcmRgXG4gICAqXG4gICAqL1xuICBrZXlib2FyZFR5cGU/OiA/S2V5Ym9hcmRUeXBlLFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgbGFyZ2VzdCBwb3NzaWJsZSBzY2FsZSBhIGZvbnQgY2FuIHJlYWNoIHdoZW4gYGFsbG93Rm9udFNjYWxpbmdgIGlzIGVuYWJsZWQuXG4gICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICogYG51bGwvdW5kZWZpbmVkYCAoZGVmYXVsdCk6IGluaGVyaXQgZnJvbSB0aGUgcGFyZW50IG5vZGUgb3IgdGhlIGdsb2JhbCBkZWZhdWx0ICgwKVxuICAgKiBgMGA6IG5vIG1heCwgaWdub3JlIHBhcmVudC9nbG9iYWwgZGVmYXVsdFxuICAgKiBgPj0gMWA6IHNldHMgdGhlIG1heEZvbnRTaXplTXVsdGlwbGllciBvZiB0aGlzIG5vZGUgdG8gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWF4Rm9udFNpemVNdWx0aXBsaWVyPzogP251bWJlcixcblxuICAvKipcbiAgICogTGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGVudGVyZWQuIFVzZSB0aGlzXG4gICAqIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHRoZSBsb2dpYyBpbiBKUyB0byBhdm9pZCBmbGlja2VyLlxuICAgKi9cbiAgbWF4TGVuZ3RoPzogP251bWJlcixcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCBpbnB1dCBjYW4gYmUgbXVsdGlwbGUgbGluZXMuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAqL1xuICBtdWx0aWxpbmU/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCBpcyBibHVycmVkLlxuICAgKi9cbiAgb25CbHVyPzogPyhlOiBCbHVyRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB0ZXh0IGlucHV0J3MgdGV4dCBjaGFuZ2VzLlxuICAgKi9cbiAgb25DaGFuZ2U/OiA/KGU6IENoYW5nZUV2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogREFOR0VSOiB0aGlzIEFQSSBpcyBub3Qgc3RhYmxlIGFuZCB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBDYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIG1heSByZXN1bHQgaW4gZHJvcHBlZCBmcmFtZXMuXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRleHQgaW5wdXQncyB0ZXh0IGNoYW5nZXMuXG4gICAqXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIHVuc3RhYmxlX29uQ2hhbmdlU3luYz86ID8oZTogQ2hhbmdlRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB0ZXh0IGlucHV0J3MgdGV4dCBjaGFuZ2VzLlxuICAgKiBDaGFuZ2VkIHRleHQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjayBoYW5kbGVyLlxuICAgKi9cbiAgb25DaGFuZ2VUZXh0PzogPyh0ZXh0OiBzdHJpbmcpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBEQU5HRVI6IHRoaXMgQVBJIGlzIG5vdCBzdGFibGUgYW5kIHdpbGwgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIENhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgbWF5IHJlc3VsdCBpbiBkcm9wcGVkIGZyYW1lcy5cbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCdzIHRleHQgY2hhbmdlcy5cbiAgICogQ2hhbmdlZCB0ZXh0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgaGFuZGxlci5cbiAgICpcbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgdW5zdGFibGVfb25DaGFuZ2VUZXh0U3luYz86ID8odGV4dDogc3RyaW5nKSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCdzIGNvbnRlbnQgc2l6ZSBjaGFuZ2VzLlxuICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIHdpdGhcbiAgICogYHsgbmF0aXZlRXZlbnQ6IHsgY29udGVudFNpemU6IHsgd2lkdGgsIGhlaWdodCB9IH0gfWAuXG4gICAqXG4gICAqIE9ubHkgY2FsbGVkIGZvciBtdWx0aWxpbmUgdGV4dCBpbnB1dHMuXG4gICAqL1xuICBvbkNvbnRlbnRTaXplQ2hhbmdlPzogPyhlOiBDb250ZW50U2l6ZUNoYW5nZUV2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0ZXh0IGlucHV0IGVuZHMuXG4gICAqL1xuICBvbkVuZEVkaXRpbmc/OiA/KGU6IEVkaXRpbmdFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRleHQgaW5wdXQgaXMgZm9jdXNlZC5cbiAgICovXG4gIG9uRm9jdXM/OiA/KGU6IEZvY3VzRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWQuXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgd2l0aCBgeyBuYXRpdmVFdmVudDogeyBrZXk6IGtleVZhbHVlIH0gfWBcbiAgICogd2hlcmUgYGtleVZhbHVlYCBpcyBgJ0VudGVyJ2Agb3IgYCdCYWNrc3BhY2UnYCBmb3IgcmVzcGVjdGl2ZSBrZXlzIGFuZFxuICAgKiB0aGUgdHlwZWQtaW4gY2hhcmFjdGVyIG90aGVyd2lzZSBpbmNsdWRpbmcgYCcgJ2AgZm9yIHNwYWNlLlxuICAgKiBGaXJlcyBiZWZvcmUgYG9uQ2hhbmdlYCBjYWxsYmFja3MuXG4gICAqL1xuICBvbktleVByZXNzPzogPyhlOiBLZXlQcmVzc0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogREFOR0VSOiB0aGlzIEFQSSBpcyBub3Qgc3RhYmxlIGFuZCB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBDYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIG1heSByZXN1bHQgaW4gZHJvcHBlZCBmcmFtZXMuXG4gICAqXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZC5cbiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCB3aXRoIGB7IG5hdGl2ZUV2ZW50OiB7IGtleToga2V5VmFsdWUgfSB9YFxuICAgKiB3aGVyZSBga2V5VmFsdWVgIGlzIGAnRW50ZXInYCBvciBgJ0JhY2tzcGFjZSdgIGZvciByZXNwZWN0aXZlIGtleXMgYW5kXG4gICAqIHRoZSB0eXBlZC1pbiBjaGFyYWN0ZXIgb3RoZXJ3aXNlIGluY2x1ZGluZyBgJyAnYCBmb3Igc3BhY2UuXG4gICAqIEZpcmVzIGJlZm9yZSBgb25DaGFuZ2VgIGNhbGxiYWNrcy5cbiAgICpcbiAgICogQHBsYXRmb3JtIGlvc1xuICAgKi9cbiAgdW5zdGFibGVfb25LZXlQcmVzc1N5bmM/OiA/KGU6IEtleVByZXNzRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIHNpbmdsZSB0YXAgZ2VzdHVyZSBpcyBkZXRlY3RlZC5cbiAgICovXG4gIG9uUHJlc3M/OiA/KGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBtaXhlZCxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBlbmdhZ2VkLlxuICAgKi9cbiAgb25QcmVzc0luPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgdG91Y2ggaXMgcmVsZWFzZWQuXG4gICAqL1xuICBvblByZXNzT3V0PzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRleHQgaW5wdXQgc2VsZWN0aW9uIGlzIGNoYW5nZWQuXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgd2l0aFxuICAgKiBgeyBuYXRpdmVFdmVudDogeyBzZWxlY3Rpb246IHsgc3RhcnQsIGVuZCB9IH0gfWAuXG4gICAqL1xuICBvblNlbGVjdGlvbkNoYW5nZT86ID8oZTogU2VsZWN0aW9uQ2hhbmdlRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB0ZXh0IGlucHV0J3Mgc3VibWl0IGJ1dHRvbiBpcyBwcmVzc2VkLlxuICAgKiBJbnZhbGlkIGlmIGBtdWx0aWxpbmU9e3RydWV9YCBpcyBzcGVjaWZpZWQuXG4gICAqL1xuICBvblN1Ym1pdEVkaXRpbmc/OiA/KGU6IEVkaXRpbmdFdmVudCkgPT4gbWl4ZWQsXG5cbiAgLyoqXG4gICAqIEludm9rZWQgb24gY29udGVudCBzY3JvbGwgd2l0aCBgeyBuYXRpdmVFdmVudDogeyBjb250ZW50T2Zmc2V0OiB7IHgsIHkgfSB9IH1gLlxuICAgKiBNYXkgYWxzbyBjb250YWluIG90aGVyIHByb3BlcnRpZXMgZnJvbSBTY3JvbGxFdmVudCBidXQgb24gQW5kcm9pZCBjb250ZW50U2l6ZVxuICAgKiBpcyBub3QgcHJvdmlkZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAqL1xuICBvblNjcm9sbD86ID8oZTogU2Nyb2xsRXZlbnQpID0+IG1peGVkLFxuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBiZWZvcmUgdGV4dCBpbnB1dCBoYXMgYmVlbiBlbnRlcmVkLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiA/U3RyaW5naXNoLFxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBjb2xvciBvZiB0aGUgcGxhY2Vob2xkZXIgc3RyaW5nLlxuICAgKi9cbiAgcGxhY2Vob2xkZXJUZXh0Q29sb3I/OiA/Q29sb3JWYWx1ZSxcblxuICAvKiogYHJlYWRPbmx5YCB3b3JrcyBsaWtlIHRoZSBgcmVhZG9ubHlgIGF0dHJpYnV0ZSBpbiBIVE1MLlxuICAgKiAgSWYgYHRydWVgLCB0ZXh0IGlzIG5vdCBlZGl0YWJsZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICogIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMvcmVhZG9ubHlcbiAgICogIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICByZWFkT25seT86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyB0aGUgcmV0dXJuIGtleSBzaG91bGQgbG9vay4gT24gQW5kcm9pZCB5b3UgY2FuIGFsc28gdXNlXG4gICAqIGByZXR1cm5LZXlMYWJlbGAuXG4gICAqXG4gICAqICpDcm9zcyBwbGF0Zm9ybSpcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyB2YWx1ZXMgd29yayBhY3Jvc3MgcGxhdGZvcm1zOlxuICAgKlxuICAgKiAtIGBkb25lYFxuICAgKiAtIGBnb2BcbiAgICogLSBgbmV4dGBcbiAgICogLSBgc2VhcmNoYFxuICAgKiAtIGBzZW5kYFxuICAgKlxuICAgKiAqQW5kcm9pZCBPbmx5KlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyB3b3JrIG9uIEFuZHJvaWQgb25seTpcbiAgICpcbiAgICogLSBgbm9uZWBcbiAgICogLSBgcHJldmlvdXNgXG4gICAqXG4gICAqICppT1MgT25seSpcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyB2YWx1ZXMgd29yayBvbiBpT1Mgb25seTpcbiAgICpcbiAgICogLSBgZGVmYXVsdGBcbiAgICogLSBgZW1lcmdlbmN5LWNhbGxgXG4gICAqIC0gYGdvb2dsZWBcbiAgICogLSBgam9pbmBcbiAgICogLSBgcm91dGVgXG4gICAqIC0gYHlhaG9vYFxuICAgKi9cbiAgcmV0dXJuS2V5VHlwZT86ID9SZXR1cm5LZXlUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IGlucHV0IG9ic2N1cmVzIHRoZSB0ZXh0IGVudGVyZWQgc28gdGhhdCBzZW5zaXRpdmUgdGV4dFxuICAgKiBsaWtlIHBhc3N3b3JkcyBzdGF5IHNlY3VyZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4gRG9lcyBub3Qgd29yayB3aXRoICdtdWx0aWxpbmU9e3RydWV9Jy5cbiAgICovXG4gIHNlY3VyZVRleHRFbnRyeT86ID9ib29sZWFuLFxuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgdGV4dCBpbnB1dCdzIHNlbGVjdGlvbi4gU2V0IHN0YXJ0IGFuZCBlbmQgdG9cbiAgICogdGhlIHNhbWUgdmFsdWUgdG8gcG9zaXRpb24gdGhlIGN1cnNvci5cbiAgICovXG4gIHNlbGVjdGlvbj86ID8kUmVhZE9ubHk8e3xcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIGVuZD86ID9udW1iZXIsXG4gIHx9PixcblxuICAvKipcbiAgICogVGhlIGhpZ2hsaWdodCBhbmQgY3Vyc29yIGNvbG9yIG9mIHRoZSB0ZXh0IGlucHV0LlxuICAgKi9cbiAgc2VsZWN0aW9uQ29sb3I/OiA/Q29sb3JWYWx1ZSxcblxuICAvKipcbiAgICogVGhlIHRleHQgc2VsZWN0aW9uIGhhbmRsZSBjb2xvci5cbiAgICogQHBsYXRmb3JtIGFuZHJvaWRcbiAgICovXG4gIHNlbGVjdGlvbkhhbmRsZUNvbG9yPzogP0NvbG9yVmFsdWUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYWxsIHRleHQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNlbGVjdGVkIG9uIGZvY3VzLlxuICAgKi9cbiAgc2VsZWN0VGV4dE9uRm9jdXM/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCBmaWVsZCB3aWxsIGJsdXIgd2hlbiBzdWJtaXR0ZWQuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUgZm9yIHNpbmdsZS1saW5lIGZpZWxkcyBhbmQgZmFsc2UgZm9yXG4gICAqIG11bHRpbGluZSBmaWVsZHMuIE5vdGUgdGhhdCBmb3IgbXVsdGlsaW5lIGZpZWxkcywgc2V0dGluZyBgYmx1ck9uU3VibWl0YFxuICAgKiB0byBgdHJ1ZWAgbWVhbnMgdGhhdCBwcmVzc2luZyByZXR1cm4gd2lsbCBibHVyIHRoZSBmaWVsZCBhbmQgdHJpZ2dlciB0aGVcbiAgICogYG9uU3VibWl0RWRpdGluZ2AgZXZlbnQgaW5zdGVhZCBvZiBpbnNlcnRpbmcgYSBuZXdsaW5lIGludG8gdGhlIGZpZWxkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBOb3RlIHRoYXQgYHN1Ym1pdEJlaGF2aW9yYCBub3cgdGFrZXMgdGhlIHBsYWNlIG9mIGBibHVyT25TdWJtaXRgIGFuZCB3aWxsXG4gICAqIG92ZXJyaWRlIGFueSBiZWhhdmlvciBkZWZpbmVkIGJ5IGBibHVyT25TdWJtaXRgLlxuICAgKiBAc2VlIHN1Ym1pdEJlaGF2aW9yXG4gICAqL1xuICBibHVyT25TdWJtaXQ/OiA/Ym9vbGVhbixcblxuICAvKipcbiAgICogV2hlbiB0aGUgcmV0dXJuIGtleSBpcyBwcmVzc2VkLFxuICAgKlxuICAgKiBGb3Igc2luZ2xlIGxpbmUgaW5wdXRzOlxuICAgKlxuICAgKiAtIGAnbmV3bGluZWAnIGRlZmF1bHRzIHRvIGAnYmx1ckFuZFN1Ym1pdCdgXG4gICAqIC0gYHVuZGVmaW5lZGAgZGVmYXVsdHMgdG8gYCdibHVyQW5kU3VibWl0J2BcbiAgICpcbiAgICogRm9yIG11bHRpbGluZSBpbnB1dHM6XG4gICAqXG4gICAqIC0gYCduZXdsaW5lJ2AgYWRkcyBhIG5ld2xpbmVcbiAgICogLSBgdW5kZWZpbmVkYCBkZWZhdWx0cyB0byBgJ25ld2xpbmUnYFxuICAgKlxuICAgKiBGb3IgYm90aCBzaW5nbGUgbGluZSBhbmQgbXVsdGlsaW5lIGlucHV0czpcbiAgICpcbiAgICogLSBgJ3N1Ym1pdCdgIHdpbGwgb25seSBzZW5kIGEgc3VibWl0IGV2ZW50IGFuZCBub3QgYmx1ciB0aGUgaW5wdXRcbiAgICogLSBgJ2JsdXJBbmRTdWJtaXRgJyB3aWxsIGJvdGggYmx1ciB0aGUgaW5wdXQgYW5kIHNlbmQgYSBzdWJtaXQgZXZlbnRcbiAgICovXG4gIHN1Ym1pdEJlaGF2aW9yPzogP1N1Ym1pdEJlaGF2aW9yLFxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgbm90IGFsbCBUZXh0IHN0eWxlcyBhcmUgc3VwcG9ydGVkLCBhbiBpbmNvbXBsZXRlIGxpc3Qgb2Ygd2hhdCBpcyBub3Qgc3VwcG9ydGVkIGluY2x1ZGVzOlxuICAgKlxuICAgKiAtIGBib3JkZXJMZWZ0V2lkdGhgXG4gICAqIC0gYGJvcmRlclRvcFdpZHRoYFxuICAgKiAtIGBib3JkZXJSaWdodFdpZHRoYFxuICAgKiAtIGBib3JkZXJCb3R0b21XaWR0aGBcbiAgICogLSBgYm9yZGVyVG9wTGVmdFJhZGl1c2BcbiAgICogLSBgYm9yZGVyVG9wUmlnaHRSYWRpdXNgXG4gICAqIC0gYGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzYFxuICAgKiAtIGBib3JkZXJCb3R0b21MZWZ0UmFkaXVzYFxuICAgKlxuICAgKiBzZWUgW0lzc3VlIzcwNzBdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvaXNzdWVzLzcwNzApXG4gICAqIGZvciBtb3JlIGRldGFpbC5cbiAgICpcbiAgICogW1N0eWxlc10oZG9jcy9zdHlsZS5odG1sKVxuICAgKi9cbiAgc3R5bGU/OiA/VGV4dFN0eWxlUHJvcCxcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHNob3cgZm9yIHRoZSB0ZXh0IGlucHV0LiBgVGV4dElucHV0YCBpcyBhIGNvbnRyb2xsZWRcbiAgICogY29tcG9uZW50LCB3aGljaCBtZWFucyB0aGUgbmF0aXZlIHZhbHVlIHdpbGwgYmUgZm9yY2VkIHRvIG1hdGNoIHRoaXNcbiAgICogdmFsdWUgcHJvcCBpZiBwcm92aWRlZC4gRm9yIG1vc3QgdXNlcywgdGhpcyB3b3JrcyBncmVhdCwgYnV0IGluIHNvbWVcbiAgICogY2FzZXMgdGhpcyBtYXkgY2F1c2UgZmxpY2tlcmluZyAtIG9uZSBjb21tb24gY2F1c2UgaXMgcHJldmVudGluZyBlZGl0c1xuICAgKiBieSBrZWVwaW5nIHZhbHVlIHRoZSBzYW1lLiBJbiBhZGRpdGlvbiB0byBzaW1wbHkgc2V0dGluZyB0aGUgc2FtZSB2YWx1ZSxcbiAgICogZWl0aGVyIHNldCBgZWRpdGFibGU9e2ZhbHNlfWAsIG9yIHNldC91cGRhdGUgYG1heExlbmd0aGAgdG8gcHJldmVudFxuICAgKiB1bndhbnRlZCBlZGl0cyB3aXRob3V0IGZsaWNrZXIuXG4gICAqL1xuICB2YWx1ZT86ID9TdHJpbmdpc2gsXG58fT47XG5cbmNvbnN0IGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc1RydWUgPSAoKSA9PiB0cnVlO1xuXG4vKipcbiAqIEEgZm91bmRhdGlvbmFsIGNvbXBvbmVudCBmb3IgaW5wdXR0aW5nIHRleHQgaW50byB0aGUgYXBwIHZpYSBhXG4gKiBrZXlib2FyZC4gUHJvcHMgcHJvdmlkZSBjb25maWd1cmFiaWxpdHkgZm9yIHNldmVyYWwgZmVhdHVyZXMsIHN1Y2ggYXNcbiAqIGF1dG8tY29ycmVjdGlvbiwgYXV0by1jYXBpdGFsaXphdGlvbiwgcGxhY2Vob2xkZXIgdGV4dCwgYW5kIGRpZmZlcmVudCBrZXlib2FyZFxuICogdHlwZXMsIHN1Y2ggYXMgYSBudW1lcmljIGtleXBhZC5cbiAqXG4gKiBUaGUgc2ltcGxlc3QgdXNlIGNhc2UgaXMgdG8gcGxvcCBkb3duIGEgYFRleHRJbnB1dGAgYW5kIHN1YnNjcmliZSB0byB0aGVcbiAqIGBvbkNoYW5nZVRleHRgIGV2ZW50cyB0byByZWFkIHRoZSB1c2VyIGlucHV0LiBUaGVyZSBhcmUgYWxzbyBvdGhlciBldmVudHMsXG4gKiBzdWNoIGFzIGBvblN1Ym1pdEVkaXRpbmdgIGFuZCBgb25Gb2N1c2AgdGhhdCBjYW4gYmUgc3Vic2NyaWJlZCB0by4gQSBzaW1wbGVcbiAqIGV4YW1wbGU6XG4gKlxuICogYGBgUmVhY3ROYXRpdmVXZWJQbGF5ZXJcbiAqIGltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG4gKiBpbXBvcnQgeyBBcHBSZWdpc3RyeSwgVGV4dElucHV0IH0gZnJvbSAncmVhY3QtbmF0aXZlJztcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VsZXNzVGV4dElucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAqICAgICBzdXBlcihwcm9wcyk7XG4gKiAgICAgdGhpcy5zdGF0ZSA9IHsgdGV4dDogJ1VzZWxlc3MgUGxhY2Vob2xkZXInIH07XG4gKiAgIH1cbiAqXG4gKiAgIHJlbmRlcigpIHtcbiAqICAgICByZXR1cm4gKFxuICogICAgICAgPFRleHRJbnB1dFxuICogICAgICAgICBzdHlsZT17e2hlaWdodDogNDAsIGJvcmRlckNvbG9yOiAnZ3JheScsIGJvcmRlcldpZHRoOiAxfX1cbiAqICAgICAgICAgb25DaGFuZ2VUZXh0PXsodGV4dCkgPT4gdGhpcy5zZXRTdGF0ZSh7dGV4dH0pfVxuICogICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS50ZXh0fVxuICogICAgICAgLz5cbiAqICAgICApO1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gc2tpcCB0aGlzIGxpbmUgaWYgdXNpbmcgQ3JlYXRlIFJlYWN0IE5hdGl2ZSBBcHBcbiAqIEFwcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29tcG9uZW50KCdBd2Vzb21lUHJvamVjdCcsICgpID0+IFVzZWxlc3NUZXh0SW5wdXQpO1xuICogYGBgXG4gKlxuICogVHdvIG1ldGhvZHMgZXhwb3NlZCB2aWEgdGhlIG5hdGl2ZSBlbGVtZW50IGFyZSAuZm9jdXMoKSBhbmQgLmJsdXIoKSB0aGF0XG4gKiB3aWxsIGZvY3VzIG9yIGJsdXIgdGhlIFRleHRJbnB1dCBwcm9ncmFtbWF0aWNhbGx5LlxuICpcbiAqIE5vdGUgdGhhdCBzb21lIHByb3BzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIGBtdWx0aWxpbmU9e3RydWUvZmFsc2V9YC5cbiAqIEFkZGl0aW9uYWxseSwgYm9yZGVyIHN0eWxlcyB0aGF0IGFwcGx5IHRvIG9ubHkgb25lIHNpZGUgb2YgdGhlIGVsZW1lbnRcbiAqIChlLmcuLCBgYm9yZGVyQm90dG9tQ29sb3JgLCBgYm9yZGVyTGVmdFdpZHRoYCwgZXRjLikgd2lsbCBub3QgYmUgYXBwbGllZCBpZlxuICogYG11bHRpbGluZT1mYWxzZWAuIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0LCB5b3UgY2FuIHdyYXAgeW91ciBgVGV4dElucHV0YFxuICogaW4gYSBgVmlld2A6XG4gKlxuICogYGBgUmVhY3ROYXRpdmVXZWJQbGF5ZXJcbiAqIGltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG4gKiBpbXBvcnQgeyBBcHBSZWdpc3RyeSwgVmlldywgVGV4dElucHV0IH0gZnJvbSAncmVhY3QtbmF0aXZlJztcbiAqXG4gKiBjbGFzcyBVc2VsZXNzVGV4dElucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqICAgcmVuZGVyKCkge1xuICogICAgIHJldHVybiAoXG4gKiAgICAgICA8VGV4dElucHV0XG4gKiAgICAgICAgIHsuLi50aGlzLnByb3BzfSAvLyBJbmhlcml0IGFueSBwcm9wcyBwYXNzZWQgdG8gaXQ7IGUuZy4sIG11bHRpbGluZSwgbnVtYmVyT2ZMaW5lcyBiZWxvd1xuICogICAgICAgICBlZGl0YWJsZT17dHJ1ZX1cbiAqICAgICAgICAgbWF4TGVuZ3RoPXs0MH1cbiAqICAgICAgIC8+XG4gKiAgICAgKTtcbiAqICAgfVxuICogfVxuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZWxlc3NUZXh0SW5wdXRNdWx0aWxpbmUgZXh0ZW5kcyBDb21wb25lbnQge1xuICogICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICogICAgIHN1cGVyKHByb3BzKTtcbiAqICAgICB0aGlzLnN0YXRlID0ge1xuICogICAgICAgdGV4dDogJ1VzZWxlc3MgTXVsdGlsaW5lIFBsYWNlaG9sZGVyJyxcbiAqICAgICB9O1xuICogICB9XG4gKlxuICogICAvLyBJZiB5b3UgdHlwZSBzb21ldGhpbmcgaW4gdGhlIHRleHQgYm94IHRoYXQgaXMgYSBjb2xvciwgdGhlIGJhY2tncm91bmQgd2lsbCBjaGFuZ2UgdG8gdGhhdFxuICogICAvLyBjb2xvci5cbiAqICAgcmVuZGVyKCkge1xuICogICAgIHJldHVybiAoXG4gKiAgICAgIDxWaWV3IHN0eWxlPXt7XG4gKiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLnN0YXRlLnRleHQsXG4gKiAgICAgICAgYm9yZGVyQm90dG9tQ29sb3I6ICcjMDAwMDAwJyxcbiAqICAgICAgICBib3JkZXJCb3R0b21XaWR0aDogMSB9fVxuICogICAgICA+XG4gKiAgICAgICAgPFVzZWxlc3NUZXh0SW5wdXRcbiAqICAgICAgICAgIG11bHRpbGluZT17dHJ1ZX1cbiAqICAgICAgICAgIG51bWJlck9mTGluZXM9ezR9XG4gKiAgICAgICAgICBvbkNoYW5nZVRleHQ9eyh0ZXh0KSA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0fSl9XG4gKiAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS50ZXh0fVxuICogICAgICAgIC8+XG4gKiAgICAgIDwvVmlldz5cbiAqICAgICApO1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gc2tpcCB0aGVzZSBsaW5lcyBpZiB1c2luZyBDcmVhdGUgUmVhY3QgTmF0aXZlIEFwcFxuICogQXBwUmVnaXN0cnkucmVnaXN0ZXJDb21wb25lbnQoXG4gKiAgJ0F3ZXNvbWVQcm9qZWN0JyxcbiAqICAoKSA9PiBVc2VsZXNzVGV4dElucHV0TXVsdGlsaW5lXG4gKiApO1xuICogYGBgXG4gKlxuICogYFRleHRJbnB1dGAgaGFzIGJ5IGRlZmF1bHQgYSBib3JkZXIgYXQgdGhlIGJvdHRvbSBvZiBpdHMgdmlldy4gVGhpcyBib3JkZXJcbiAqIGhhcyBpdHMgcGFkZGluZyBzZXQgYnkgdGhlIGJhY2tncm91bmQgaW1hZ2UgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSwgYW5kIGl0XG4gKiBjYW5ub3QgYmUgY2hhbmdlZC4gU29sdXRpb25zIHRvIGF2b2lkIHRoaXMgaXMgdG8gZWl0aGVyIG5vdCBzZXQgaGVpZ2h0XG4gKiBleHBsaWNpdGx5LCBjYXNlIGluIHdoaWNoIHRoZSBzeXN0ZW0gd2lsbCB0YWtlIGNhcmUgb2YgZGlzcGxheWluZyB0aGUgYm9yZGVyXG4gKiBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiwgb3IgdG8gbm90IGRpc3BsYXkgdGhlIGJvcmRlciBieSBzZXR0aW5nXG4gKiBgdW5kZXJsaW5lQ29sb3JBbmRyb2lkYCB0byB0cmFuc3BhcmVudC5cbiAqXG4gKiBOb3RlIHRoYXQgb24gQW5kcm9pZCBwZXJmb3JtaW5nIHRleHQgc2VsZWN0aW9uIGluIGlucHV0IGNhbiBjaGFuZ2VcbiAqIGFwcCdzIGFjdGl2aXR5IGB3aW5kb3dTb2Z0SW5wdXRNb2RlYCBwYXJhbSB0byBgYWRqdXN0UmVzaXplYC5cbiAqIFRoaXMgbWF5IGNhdXNlIGlzc3VlcyB3aXRoIGNvbXBvbmVudHMgdGhhdCBoYXZlIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gKiB3aGlsZSBrZXlib2FyZCBpcyBhY3RpdmUuIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3IgZWl0aGVyIHNwZWNpZnkgYHdpbmRvd1NvZnRJbnB1dE1vZGVgXG4gKiBpbiBBbmRyb2lkTWFuaWZlc3QueG1sICggaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vZ3VpZGUvdG9waWNzL21hbmlmZXN0L2FjdGl2aXR5LWVsZW1lbnQuaHRtbCApXG4gKiBvciBjb250cm9sIHRoaXMgcGFyYW0gcHJvZ3JhbW1hdGljYWxseSB3aXRoIG5hdGl2ZSBjb2RlLlxuICpcbiAqL1xuZnVuY3Rpb24gSW50ZXJuYWxUZXh0SW5wdXQocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHtcbiAgICAnYXJpYS1idXN5JzogYXJpYUJ1c3ksXG4gICAgJ2FyaWEtY2hlY2tlZCc6IGFyaWFDaGVja2VkLFxuICAgICdhcmlhLWRpc2FibGVkJzogYXJpYURpc2FibGVkLFxuICAgICdhcmlhLWV4cGFuZGVkJzogYXJpYUV4cGFuZGVkLFxuICAgICdhcmlhLXNlbGVjdGVkJzogYXJpYVNlbGVjdGVkLFxuICAgIGFjY2Vzc2liaWxpdHlTdGF0ZSxcbiAgICBpZCxcbiAgICB0YWJJbmRleCxcbiAgICBzZWxlY3Rpb246IHByb3BzU2VsZWN0aW9uLFxuICAgIHNlbGVjdGlvbkNvbG9yLFxuICAgIHNlbGVjdGlvbkhhbmRsZUNvbG9yLFxuICAgIGN1cnNvckNvbG9yLFxuICAgIC4uLm90aGVyUHJvcHNcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPG51bGwgfCBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8bWl4ZWQ+Pj4obnVsbCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBjb25zdCBzZWxlY3Rpb246ID9TZWxlY3Rpb24gPVxuICAgIHByb3BzU2VsZWN0aW9uID09IG51bGxcbiAgICAgID8gbnVsbFxuICAgICAgOiB7XG4gICAgICAgICAgc3RhcnQ6IHByb3BzU2VsZWN0aW9uLnN0YXJ0LFxuICAgICAgICAgIGVuZDogcHJvcHNTZWxlY3Rpb24uZW5kID8/IHByb3BzU2VsZWN0aW9uLnN0YXJ0LFxuICAgICAgICB9O1xuXG4gIGNvbnN0IFttb3N0UmVjZW50RXZlbnRDb3VudCwgc2V0TW9zdFJlY2VudEV2ZW50Q291bnRdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcblxuICBjb25zdCBbbGFzdE5hdGl2ZVRleHQsIHNldExhc3ROYXRpdmVUZXh0XSA9IHVzZVN0YXRlPD9TdHJpbmdpc2g+KHByb3BzLnZhbHVlKTtcbiAgY29uc3QgW2xhc3ROYXRpdmVTZWxlY3Rpb25TdGF0ZSwgc2V0TGFzdE5hdGl2ZVNlbGVjdGlvbl0gPSB1c2VTdGF0ZTx7fFxuICAgIHNlbGVjdGlvbjogP1NlbGVjdGlvbixcbiAgICBtb3N0UmVjZW50RXZlbnRDb3VudDogbnVtYmVyLFxuICB8fT4oe3NlbGVjdGlvbiwgbW9zdFJlY2VudEV2ZW50Q291bnR9KTtcblxuICBjb25zdCBsYXN0TmF0aXZlU2VsZWN0aW9uID0gbGFzdE5hdGl2ZVNlbGVjdGlvblN0YXRlLnNlbGVjdGlvbjtcblxuICBsZXQgdmlld0NvbW1hbmRzO1xuICBpZiAoQW5kcm9pZFRleHRJbnB1dENvbW1hbmRzKSB7XG4gICAgdmlld0NvbW1hbmRzID0gQW5kcm9pZFRleHRJbnB1dENvbW1hbmRzO1xuICB9IGVsc2Uge1xuICAgIHZpZXdDb21tYW5kcyA9XG4gICAgICBwcm9wcy5tdWx0aWxpbmUgPT09IHRydWVcbiAgICAgICAgPyBSQ1RNdWx0aWxpbmVUZXh0SW5wdXROYXRpdmVDb21tYW5kc1xuICAgICAgICA6IFJDVFNpbmdsZWxpbmVUZXh0SW5wdXROYXRpdmVDb21tYW5kcztcbiAgfVxuXG4gIGNvbnN0IHRleHQgPVxuICAgIHR5cGVvZiBwcm9wcy52YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gcHJvcHMudmFsdWVcbiAgICAgIDogdHlwZW9mIHByb3BzLmRlZmF1bHRWYWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gcHJvcHMuZGVmYXVsdFZhbHVlXG4gICAgICA6ICcnO1xuXG4gIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGluIGNhc2UgbmF0aXZlIHVwZGF0ZXMgdGhlIHRleHQgYW5kIEpTIGRlY2lkZXNcbiAgLy8gdGhhdCB0aGUgdXBkYXRlIHNob3VsZCBiZSBpZ25vcmVkIGFuZCB3ZSBzaG91bGQgc3RpY2sgd2l0aCB0aGUgdmFsdWVcbiAgLy8gdGhhdCB3ZSBoYXZlIGluIEpTLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5hdGl2ZVVwZGF0ZToge3RleHQ/OiBzdHJpbmcsIHNlbGVjdGlvbj86IFNlbGVjdGlvbn0gPSB7fTtcblxuICAgIGlmIChsYXN0TmF0aXZlVGV4dCAhPT0gcHJvcHMudmFsdWUgJiYgdHlwZW9mIHByb3BzLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgbmF0aXZlVXBkYXRlLnRleHQgPSBwcm9wcy52YWx1ZTtcbiAgICAgIHNldExhc3ROYXRpdmVUZXh0KHByb3BzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzZWxlY3Rpb24gJiZcbiAgICAgIGxhc3ROYXRpdmVTZWxlY3Rpb24gJiZcbiAgICAgIChsYXN0TmF0aXZlU2VsZWN0aW9uLnN0YXJ0ICE9PSBzZWxlY3Rpb24uc3RhcnQgfHxcbiAgICAgICAgbGFzdE5hdGl2ZVNlbGVjdGlvbi5lbmQgIT09IHNlbGVjdGlvbi5lbmQpXG4gICAgKSB7XG4gICAgICBuYXRpdmVVcGRhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICAgICAgc2V0TGFzdE5hdGl2ZVNlbGVjdGlvbih7c2VsZWN0aW9uLCBtb3N0UmVjZW50RXZlbnRDb3VudH0pO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhuYXRpdmVVcGRhdGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgIHZpZXdDb21tYW5kcy5zZXRUZXh0QW5kU2VsZWN0aW9uKFxuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LFxuICAgICAgICBtb3N0UmVjZW50RXZlbnRDb3VudCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgc2VsZWN0aW9uPy5zdGFydCA/PyAtMSxcbiAgICAgICAgc2VsZWN0aW9uPy5lbmQgPz8gLTEsXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIG1vc3RSZWNlbnRFdmVudENvdW50LFxuICAgIGlucHV0UmVmLFxuICAgIHByb3BzLnZhbHVlLFxuICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICBsYXN0TmF0aXZlVGV4dCxcbiAgICBzZWxlY3Rpb24sXG4gICAgbGFzdE5hdGl2ZVNlbGVjdGlvbixcbiAgICB0ZXh0LFxuICAgIHZpZXdDb21tYW5kcyxcbiAgXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpbnB1dFJlZlZhbHVlID0gaW5wdXRSZWYuY3VycmVudDtcblxuICAgIGlmIChpbnB1dFJlZlZhbHVlICE9IG51bGwpIHtcbiAgICAgIFRleHRJbnB1dFN0YXRlLnJlZ2lzdGVySW5wdXQoaW5wdXRSZWZWYWx1ZSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIFRleHRJbnB1dFN0YXRlLnVucmVnaXN0ZXJJbnB1dChpbnB1dFJlZlZhbHVlKTtcblxuICAgICAgICBpZiAoVGV4dElucHV0U3RhdGUuY3VycmVudGx5Rm9jdXNlZElucHV0KCkgPT09IGlucHV0UmVmVmFsdWUpIHtcbiAgICAgICAgICBudWxsdGhyb3dzKGlucHV0UmVmVmFsdWUpLmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sIFtpbnB1dFJlZl0pO1xuXG4gIGNvbnN0IHNldExvY2FsUmVmID0gdXNlQ2FsbGJhY2soXG4gICAgKGluc3RhbmNlOiBUZXh0SW5wdXRJbnN0YW5jZSB8IG51bGwpID0+IHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQgPSBpbnN0YW5jZTtcblxuICAgICAgLypcbiAgICAgIEhpIHJlYWRlciBmcm9tIHRoZSBmdXR1cmUuIEknbSBzb3JyeSBmb3IgdGhpcy5cblxuICAgICAgVGhpcyBpcyBhIGhhY2suIElkZWFsbHkgd2Ugd291bGQgZm9yd2FyZFJlZiB0byB0aGUgdW5kZXJseWluZ1xuICAgICAgaG9zdCBjb21wb25lbnQuIEhvd2V2ZXIsIHNpbmNlIFRleHRJbnB1dCBoYXMgaXQncyBvd24gbWV0aG9kcyB0aGF0IGNhbiBiZVxuICAgICAgY2FsbGVkIGFzIHdlbGwsIGlmIHdlIHVzZWQgdGhlIHN0YW5kYXJkIGZvcndhcmRSZWYgdGhlbiB0aGVzZVxuICAgICAgbWV0aG9kcyB3b3VsZG4ndCBiZSBhY2Nlc3NpYmxlIGFuZCB0aHVzIGJlIGEgYnJlYWtpbmcgY2hhbmdlLlxuXG4gICAgICBXZSBoYXZlIGEgY291cGxlIG9mIG9wdGlvbnMgb2YgaG93IHRvIGhhbmRsZSB0aGlzOlxuICAgICAgLSBSZXR1cm4gYSBuZXcgcmVmIHdpdGggZXZlcnl0aGluZyB3ZSBtZXRob2RzIGZyb20gYm90aC4gVGhpcyBpcyBwcm9ibGVtYXRpY1xuICAgICAgICBiZWNhdXNlIHdlIG5lZWQgUmVhY3QgdG8gYWxzbyBrbm93IGl0IGlzIGEgaG9zdCBjb21wb25lbnQgd2hpY2ggcmVxdWlyZXNcbiAgICAgICAgaW50ZXJuYWxzIG9mIHRoZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVmLlxuICAgICAgLSBCcmVhayB0aGUgQVBJIGFuZCBoYXZlIHNvbWUgb3RoZXIgd2F5IHRvIGNhbGwgb25lIHNldCBvZiB0aGUgbWV0aG9kcyBvclxuICAgICAgICB0aGUgb3RoZXIuIFRoaXMgaXMgb3VyIGxvbmcgdGVybSBhcHByb2FjaCBhcyB3ZSB3YW50IHRvIGV2ZW50dWFsbHlcbiAgICAgICAgZ2V0IHRoZSBtZXRob2RzIG9uIGhvc3QgY29tcG9uZW50cyBvZmYgdGhlIHJlZi4gU28gaW5zdGVhZCBvZiBjYWxsaW5nXG4gICAgICAgIHJlZi5tZWFzdXJlKCkgeW91IG1pZ2h0IGNhbGwgUmVhY3ROYXRpdmUubWVhc3VyZShyZWYpLiBUaGlzIHdvdWxkIGhvcGVmdWxseVxuICAgICAgICBsZXQgdGhlIHJlZiBmb3IgVGV4dElucHV0IHRoZW4gaGF2ZSB0aGUgbWV0aG9kcyBsaWtlIGAuY2xlYXJgLiBPciB3ZSBkbyBpdFxuICAgICAgICB0aGUgb3RoZXIgd2F5IGFuZCBtYWtlIGl0IFRleHRJbnB1dC5jbGVhcih0ZXh0SW5wdXRSZWYpIHdoaWNoIHdvdWxkIGJlIGZpbmVcbiAgICAgICAgdG9vLiBFaXRoZXIgd2F5IHRob3VnaCBpcyBhIGJyZWFraW5nIGNoYW5nZSB0aGF0IGlzIGxvbmdlciB0ZXJtLlxuICAgICAgLSBNdXRhdGUgdGhpcyByZWYuIDooIEdyb3NzLCBidXQgYWNjb21wbGlzaGVzIHdoYXQgd2UgbmVlZCBpbiB0aGUgbWVhbnRpbWVcbiAgICAgICAgYmVmb3JlIHdlIGNhbiBnZXQgdG8gdGhlIGxvbmcgdGVybSBicmVha2luZyBjaGFuZ2UuXG4gICAgICAqL1xuICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSAtIFNlZSB0aGUgZXhwbGFuYXRpb24gYWJvdmUuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIHtcbiAgICAgICAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdmlld0NvbW1hbmRzLnNldFRleHRBbmRTZWxlY3Rpb24oXG4gICAgICAgICAgICAgICAgaW5wdXRSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtb3N0UmVjZW50RXZlbnRDb3VudCxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBUT0RPOiBGaXggdGhpcyByZXR1cm5pbmcgdHJ1ZSBvbiBudWxsID09PSBudWxsLCB3aGVuIG5vIGlucHV0IGlzIGZvY3VzZWRcbiAgICAgICAgICBpc0ZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gVGV4dElucHV0U3RhdGUuY3VycmVudGx5Rm9jdXNlZElucHV0KCkgPT09IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXROYXRpdmVSZWYoKTogP1JlYWN0LkVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+IHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dFJlZi5jdXJyZW50O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0U2VsZWN0aW9uKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHZpZXdDb21tYW5kcy5zZXRUZXh0QW5kU2VsZWN0aW9uKFxuICAgICAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgbW9zdFJlY2VudEV2ZW50Q291bnQsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbbW9zdFJlY2VudEV2ZW50Q291bnQsIHZpZXdDb21tYW5kc10sXG4gICk7XG5cbiAgY29uc3QgcmVmID0gdXNlTWVyZ2VSZWZzPFRleHRJbnB1dEluc3RhbmNlPihzZXRMb2NhbFJlZiwgcHJvcHMuZm9yd2FyZGVkUmVmKTtcblxuICBjb25zdCBfb25DaGFuZ2UgPSAoZXZlbnQ6IENoYW5nZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgY3VycmVudFRleHQgPSBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xuICAgIHByb3BzLm9uQ2hhbmdlICYmIHByb3BzLm9uQ2hhbmdlKGV2ZW50KTtcbiAgICBwcm9wcy5vbkNoYW5nZVRleHQgJiYgcHJvcHMub25DaGFuZ2VUZXh0KGN1cnJlbnRUZXh0KTtcblxuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ID09IG51bGwpIHtcbiAgICAgIC8vIGNhbGxpbmcgYHByb3BzLm9uQ2hhbmdlYCBvciBgcHJvcHMub25DaGFuZ2VUZXh0YFxuICAgICAgLy8gbWF5IGNsZWFuIHVwIHRoZSBpbnB1dCBpdHNlbGYuIEV4aXRzIGhlcmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0TGFzdE5hdGl2ZVRleHQoY3VycmVudFRleHQpO1xuICAgIC8vIFRoaXMgbXVzdCBoYXBwZW4gbGFzdCwgYWZ0ZXIgd2UgY2FsbCBzZXRMYXN0TmF0aXZlVGV4dC5cbiAgICAvLyBEaWZmZXJlbnQgb3JkZXJpbmcgY2FuIGNhdXNlIGJ1Z3Mgd2hlbiBlZGl0aW5nIEFuZHJvaWRUZXh0SW5wdXRzXG4gICAgLy8gd2l0aCBtdWx0aXBsZSBGcmFnbWVudHMuXG4gICAgLy8gV2UgbXVzdCB1cGRhdGUgdGhpcyBzbyB0aGF0IGNvbnRyb2xsZWQgaW5wdXQgdXBkYXRlcyB3b3JrLlxuICAgIHNldE1vc3RSZWNlbnRFdmVudENvdW50KGV2ZW50Lm5hdGl2ZUV2ZW50LmV2ZW50Q291bnQpO1xuICB9O1xuXG4gIGNvbnN0IF9vbkNoYW5nZVN5bmMgPSAoZXZlbnQ6IENoYW5nZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgY3VycmVudFRleHQgPSBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xuICAgIHByb3BzLnVuc3RhYmxlX29uQ2hhbmdlU3luYyAmJiBwcm9wcy51bnN0YWJsZV9vbkNoYW5nZVN5bmMoZXZlbnQpO1xuICAgIHByb3BzLnVuc3RhYmxlX29uQ2hhbmdlVGV4dFN5bmMgJiZcbiAgICAgIHByb3BzLnVuc3RhYmxlX29uQ2hhbmdlVGV4dFN5bmMoY3VycmVudFRleHQpO1xuXG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgICAgLy8gY2FsbGluZyBgcHJvcHMub25DaGFuZ2VgIG9yIGBwcm9wcy5vbkNoYW5nZVRleHRgXG4gICAgICAvLyBtYXkgY2xlYW4gdXAgdGhlIGlucHV0IGl0c2VsZi4gRXhpdHMgaGVyZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRMYXN0TmF0aXZlVGV4dChjdXJyZW50VGV4dCk7XG4gICAgLy8gVGhpcyBtdXN0IGhhcHBlbiBsYXN0LCBhZnRlciB3ZSBjYWxsIHNldExhc3ROYXRpdmVUZXh0LlxuICAgIC8vIERpZmZlcmVudCBvcmRlcmluZyBjYW4gY2F1c2UgYnVncyB3aGVuIGVkaXRpbmcgQW5kcm9pZFRleHRJbnB1dHNcbiAgICAvLyB3aXRoIG11bHRpcGxlIEZyYWdtZW50cy5cbiAgICAvLyBXZSBtdXN0IHVwZGF0ZSB0aGlzIHNvIHRoYXQgY29udHJvbGxlZCBpbnB1dCB1cGRhdGVzIHdvcmsuXG4gICAgc2V0TW9zdFJlY2VudEV2ZW50Q291bnQoZXZlbnQubmF0aXZlRXZlbnQuZXZlbnRDb3VudCk7XG4gIH07XG5cbiAgY29uc3QgX29uU2VsZWN0aW9uQ2hhbmdlID0gKGV2ZW50OiBTZWxlY3Rpb25DaGFuZ2VFdmVudCkgPT4ge1xuICAgIHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlICYmIHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50KTtcblxuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ID09IG51bGwpIHtcbiAgICAgIC8vIGNhbGxpbmcgYHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlYFxuICAgICAgLy8gbWF5IGNsZWFuIHVwIHRoZSBpbnB1dCBpdHNlbGYuIEV4aXRzIGhlcmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0TGFzdE5hdGl2ZVNlbGVjdGlvbih7XG4gICAgICBzZWxlY3Rpb246IGV2ZW50Lm5hdGl2ZUV2ZW50LnNlbGVjdGlvbixcbiAgICAgIG1vc3RSZWNlbnRFdmVudENvdW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IF9vbkZvY3VzID0gKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB7XG4gICAgVGV4dElucHV0U3RhdGUuZm9jdXNJbnB1dChpbnB1dFJlZi5jdXJyZW50KTtcbiAgICBpZiAocHJvcHMub25Gb2N1cykge1xuICAgICAgcHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IF9vbkJsdXIgPSAoZXZlbnQ6IEJsdXJFdmVudCkgPT4ge1xuICAgIFRleHRJbnB1dFN0YXRlLmJsdXJJbnB1dChpbnB1dFJlZi5jdXJyZW50KTtcbiAgICBpZiAocHJvcHMub25CbHVyKSB7XG4gICAgICBwcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBfb25TY3JvbGwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KSA9PiB7XG4gICAgcHJvcHMub25TY3JvbGwgJiYgcHJvcHMub25TY3JvbGwoZXZlbnQpO1xuICB9O1xuXG4gIGxldCB0ZXh0SW5wdXQgPSBudWxsO1xuXG4gIGNvbnN0IG11bHRpbGluZSA9IHByb3BzLm11bHRpbGluZSA/PyBmYWxzZTtcblxuICBsZXQgc3VibWl0QmVoYXZpb3I6IFN1Ym1pdEJlaGF2aW9yO1xuICBpZiAocHJvcHMuc3VibWl0QmVoYXZpb3IgIT0gbnVsbCkge1xuICAgIC8vIGBzdWJtaXRCZWhhdmlvcmAgaXMgc2V0IGV4cGxpY2l0bHlcbiAgICBpZiAoIW11bHRpbGluZSAmJiBwcm9wcy5zdWJtaXRCZWhhdmlvciA9PT0gJ25ld2xpbmUnKSB7XG4gICAgICAvLyBGb3Igc2luZ2xlIGxpbmUgdGV4dCBpbnB1dHMsIGAnbmV3bGluZSdgIGlzIG5vdCBhIHZhbGlkIG9wdGlvblxuICAgICAgc3VibWl0QmVoYXZpb3IgPSAnYmx1ckFuZFN1Ym1pdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Ym1pdEJlaGF2aW9yID0gcHJvcHMuc3VibWl0QmVoYXZpb3I7XG4gICAgfVxuICB9IGVsc2UgaWYgKG11bHRpbGluZSkge1xuICAgIGlmIChwcm9wcy5ibHVyT25TdWJtaXQgPT09IHRydWUpIHtcbiAgICAgIHN1Ym1pdEJlaGF2aW9yID0gJ2JsdXJBbmRTdWJtaXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJtaXRCZWhhdmlvciA9ICduZXdsaW5lJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2luZ2xlIGxpbmVcbiAgICBpZiAocHJvcHMuYmx1ck9uU3VibWl0ICE9PSBmYWxzZSkge1xuICAgICAgc3VibWl0QmVoYXZpb3IgPSAnYmx1ckFuZFN1Ym1pdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Ym1pdEJlaGF2aW9yID0gJ3N1Ym1pdCc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWNjZXNzaWJsZSA9IHByb3BzLmFjY2Vzc2libGUgIT09IGZhbHNlO1xuICBjb25zdCBmb2N1c2FibGUgPSBwcm9wcy5mb2N1c2FibGUgIT09IGZhbHNlO1xuXG4gIGNvbnN0IHtcbiAgICBlZGl0YWJsZSxcbiAgICBoaXRTbG9wLFxuICAgIG9uUHJlc3MsXG4gICAgb25QcmVzc0luLFxuICAgIG9uUHJlc3NPdXQsXG4gICAgcmVqZWN0UmVzcG9uZGVyVGVybWluYXRpb24sXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBjb25maWcgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBoaXRTbG9wLFxuICAgICAgb25QcmVzczogKGV2ZW50OiBQcmVzc0V2ZW50KSA9PiB7XG4gICAgICAgIG9uUHJlc3M/LihldmVudCk7XG4gICAgICAgIGlmIChlZGl0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25QcmVzc0luOiBvblByZXNzSW4sXG4gICAgICBvblByZXNzT3V0OiBvblByZXNzT3V0LFxuICAgICAgY2FuY2VsYWJsZTogUGxhdGZvcm0uT1MgPT09ICdpb3MnID8gIXJlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9uIDogbnVsbCxcbiAgICB9KSxcbiAgICBbXG4gICAgICBlZGl0YWJsZSxcbiAgICAgIGhpdFNsb3AsXG4gICAgICBvblByZXNzLFxuICAgICAgb25QcmVzc0luLFxuICAgICAgb25QcmVzc091dCxcbiAgICAgIHJlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9uLFxuICAgIF0sXG4gICk7XG5cbiAgLy8gSGlkZSBjYXJldCBkdXJpbmcgdGVzdCBydW5zIGR1ZSB0byBhIGZsYXNoaW5nIGNhcmV0XG4gIC8vIG1ha2VzIHNjcmVlbnNob3QgdGVzdHMgZmxha2V5XG4gIGxldCBjYXJldEhpZGRlbiA9IHByb3BzLmNhcmV0SGlkZGVuO1xuICBpZiAoUGxhdGZvcm0uaXNUZXN0aW5nKSB7XG4gICAgY2FyZXRIaWRkZW4gPSB0cnVlO1xuICB9XG5cbiAgLy8gVGV4dElucHV0IGhhbmRsZXMgb25CbHVyIGFuZCBvbkZvY3VzIGV2ZW50c1xuICAvLyBzbyBvbWl0dGluZyBvbkJsdXIgYW5kIG9uRm9jdXMgcHJlc3NhYmlsaXR5IGhhbmRsZXJzIGhlcmUuXG4gIGNvbnN0IHtvbkJsdXIsIG9uRm9jdXMsIC4uLmV2ZW50SGFuZGxlcnN9ID0gdXNlUHJlc3NhYmlsaXR5KGNvbmZpZykgfHwge307XG5cbiAgbGV0IF9hY2Nlc3NpYmlsaXR5U3RhdGU7XG4gIGlmIChcbiAgICBhY2Nlc3NpYmlsaXR5U3RhdGUgIT0gbnVsbCB8fFxuICAgIGFyaWFCdXN5ICE9IG51bGwgfHxcbiAgICBhcmlhQ2hlY2tlZCAhPSBudWxsIHx8XG4gICAgYXJpYURpc2FibGVkICE9IG51bGwgfHxcbiAgICBhcmlhRXhwYW5kZWQgIT0gbnVsbCB8fFxuICAgIGFyaWFTZWxlY3RlZCAhPSBudWxsXG4gICkge1xuICAgIF9hY2Nlc3NpYmlsaXR5U3RhdGUgPSB7XG4gICAgICBidXN5OiBhcmlhQnVzeSA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmJ1c3ksXG4gICAgICBjaGVja2VkOiBhcmlhQ2hlY2tlZCA/PyBhY2Nlc3NpYmlsaXR5U3RhdGU/LmNoZWNrZWQsXG4gICAgICBkaXNhYmxlZDogYXJpYURpc2FibGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uZGlzYWJsZWQsXG4gICAgICBleHBhbmRlZDogYXJpYUV4cGFuZGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uZXhwYW5kZWQsXG4gICAgICBzZWxlY3RlZDogYXJpYVNlbGVjdGVkID8/IGFjY2Vzc2liaWxpdHlTdGF0ZT8uc2VsZWN0ZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlID0gZmxhdHRlblN0eWxlPFRleHRTdHlsZVByb3A+KHByb3BzLnN0eWxlKTtcblxuICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgY29uc3QgUkNUVGV4dElucHV0VmlldyA9XG4gICAgICBwcm9wcy5tdWx0aWxpbmUgPT09IHRydWVcbiAgICAgICAgPyBSQ1RNdWx0aWxpbmVUZXh0SW5wdXRWaWV3XG4gICAgICAgIDogUkNUU2luZ2xlbGluZVRleHRJbnB1dFZpZXc7XG5cbiAgICBjb25zdCB1c2VNdWx0aWxpbmVEZWZhdWx0U3R5bGUgPVxuICAgICAgcHJvcHMubXVsdGlsaW5lID09PSB0cnVlICYmXG4gICAgICAoc3R5bGUgPT0gbnVsbCB8fFxuICAgICAgICAoc3R5bGUucGFkZGluZyA9PSBudWxsICYmXG4gICAgICAgICAgc3R5bGUucGFkZGluZ1ZlcnRpY2FsID09IG51bGwgJiZcbiAgICAgICAgICBzdHlsZS5wYWRkaW5nVG9wID09IG51bGwpKTtcblxuICAgIGNvbnN0IHVzZU9uQ2hhbmdlU3luYyA9XG4gICAgICAocHJvcHMudW5zdGFibGVfb25DaGFuZ2VTeW5jIHx8IHByb3BzLnVuc3RhYmxlX29uQ2hhbmdlVGV4dFN5bmMpICYmXG4gICAgICAhKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLm9uQ2hhbmdlVGV4dCk7XG5cbiAgICB0ZXh0SW5wdXQgPSAoXG4gICAgICA8UkNUVGV4dElucHV0Vmlld1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSAtIEZpZ3VyZSBvdXQgaW1wZXJhdGl2ZSArIGZvcndhcmQgcmVmcy5cbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgICB7Li4uZXZlbnRIYW5kbGVyc31cbiAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXtfYWNjZXNzaWJpbGl0eVN0YXRlfVxuICAgICAgICBhY2Nlc3NpYmxlPXthY2Nlc3NpYmxlfVxuICAgICAgICBzdWJtaXRCZWhhdmlvcj17c3VibWl0QmVoYXZpb3J9XG4gICAgICAgIGNhcmV0SGlkZGVuPXtjYXJldEhpZGRlbn1cbiAgICAgICAgZGF0YURldGVjdG9yVHlwZXM9e3Byb3BzLmRhdGFEZXRlY3RvclR5cGVzfVxuICAgICAgICBmb2N1c2FibGU9e3RhYkluZGV4ICE9PSB1bmRlZmluZWQgPyAhdGFiSW5kZXggOiBmb2N1c2FibGV9XG4gICAgICAgIG1vc3RSZWNlbnRFdmVudENvdW50PXttb3N0UmVjZW50RXZlbnRDb3VudH1cbiAgICAgICAgbmF0aXZlSUQ9e2lkID8/IHByb3BzLm5hdGl2ZUlEfVxuICAgICAgICBvbkJsdXI9e19vbkJsdXJ9XG4gICAgICAgIG9uS2V5UHJlc3NTeW5jPXtwcm9wcy51bnN0YWJsZV9vbktleVByZXNzU3luY31cbiAgICAgICAgb25DaGFuZ2U9e19vbkNoYW5nZX1cbiAgICAgICAgb25DaGFuZ2VTeW5jPXt1c2VPbkNoYW5nZVN5bmMgPT09IHRydWUgPyBfb25DaGFuZ2VTeW5jIDogbnVsbH1cbiAgICAgICAgb25Db250ZW50U2l6ZUNoYW5nZT17cHJvcHMub25Db250ZW50U2l6ZUNoYW5nZX1cbiAgICAgICAgb25Gb2N1cz17X29uRm9jdXN9XG4gICAgICAgIG9uU2Nyb2xsPXtfb25TY3JvbGx9XG4gICAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlPXtfb25TZWxlY3Rpb25DaGFuZ2V9XG4gICAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlU2hvdWxkU2V0UmVzcG9uZGVyPXtlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNUcnVlfVxuICAgICAgICBzZWxlY3Rpb249e3NlbGVjdGlvbn1cbiAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShcbiAgICAgICAgICB1c2VNdWx0aWxpbmVEZWZhdWx0U3R5bGUgPyBzdHlsZXMubXVsdGlsaW5lRGVmYXVsdCA6IG51bGwsXG4gICAgICAgICAgc3R5bGUsXG4gICAgICAgICl9XG4gICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAvPlxuICAgICk7XG4gIH0gZWxzZSBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgIGNvbnN0IGF1dG9DYXBpdGFsaXplID0gcHJvcHMuYXV0b0NhcGl0YWxpemUgfHwgJ3NlbnRlbmNlcyc7XG4gICAgY29uc3QgX2FjY2Vzc2liaWxpdHlMYWJlbGxlZEJ5ID1cbiAgICAgIHByb3BzPy5bJ2FyaWEtbGFiZWxsZWRieSddID8/IHByb3BzPy5hY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeTtcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IHByb3BzLnBsYWNlaG9sZGVyID8/ICcnO1xuICAgIGxldCBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICAgIGNvbnN0IGNoaWxkQ291bnQgPSBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XG4gICAgaW52YXJpYW50KFxuICAgICAgIShwcm9wcy52YWx1ZSAhPSBudWxsICYmIGNoaWxkQ291bnQpLFxuICAgICAgJ0Nhbm5vdCBzcGVjaWZ5IGJvdGggdmFsdWUgYW5kIGNoaWxkcmVuLicsXG4gICAgKTtcbiAgICBpZiAoY2hpbGRDb3VudCA+IDEpIHtcbiAgICAgIGNoaWxkcmVuID0gPFRleHQ+e2NoaWxkcmVufTwvVGV4dD47XG4gICAgfVxuICAgIC8vIEZvciBjb25zaXN0ZW5jeSB3aXRoIGlPUyBzZXQgY3Vyc29yL3NlbGVjdGlvbkhhbmRsZSBjb2xvciBhcyBzZWxlY3Rpb25Db2xvclxuICAgIGNvbnN0IGNvbG9yUHJvcHMgPSB7XG4gICAgICBzZWxlY3Rpb25Db2xvcixcbiAgICAgIHNlbGVjdGlvbkhhbmRsZUNvbG9yOlxuICAgICAgICBzZWxlY3Rpb25IYW5kbGVDb2xvciA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBzZWxlY3Rpb25Db2xvclxuICAgICAgICAgIDogc2VsZWN0aW9uSGFuZGxlQ29sb3IsXG4gICAgICBjdXJzb3JDb2xvcjogY3Vyc29yQ29sb3IgPT09IHVuZGVmaW5lZCA/IHNlbGVjdGlvbkNvbG9yIDogY3Vyc29yQ29sb3IsXG4gICAgfTtcbiAgICB0ZXh0SW5wdXQgPSAoXG4gICAgICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gdGhlIHR5cGVzIGZvciBBbmRyb2lkVGV4dElucHV0IGRvbid0IG1hdGNoIHVwXG4gICAgICAgKiBleGFjdGx5IHdpdGggdGhlIHByb3BzIGZvciBUZXh0SW5wdXQuIFRoaXMgd2lsbCBuZWVkIHRvIGdldCBmaXhlZCAqL1xuICAgICAgLyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gdGhlIHR5cGVzIGZvciBBbmRyb2lkVGV4dElucHV0IGRvbid0XG4gICAgICAgKiBtYXRjaCB1cCBleGFjdGx5IHdpdGggdGhlIHByb3BzIGZvciBUZXh0SW5wdXQuIFRoaXMgd2lsbCBuZWVkIHRvIGdldFxuICAgICAgICogZml4ZWQgKi9cbiAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGUtYXJnXSB0aGUgdHlwZXMgZm9yIEFuZHJvaWRUZXh0SW5wdXQgZG9uJ3RcbiAgICAgICAqIG1hdGNoIHVwIGV4YWN0bHkgd2l0aCB0aGUgcHJvcHMgZm9yIFRleHRJbnB1dC4gVGhpcyB3aWxsIG5lZWQgdG8gZ2V0XG4gICAgICAgKiBmaXhlZCAqL1xuICAgICAgPEFuZHJvaWRUZXh0SW5wdXRcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gLSBGaWd1cmUgb3V0IGltcGVyYXRpdmUgKyBmb3J3YXJkIHJlZnMuXG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgICAgey4uLmNvbG9yUHJvcHN9XG4gICAgICAgIHsuLi5ldmVudEhhbmRsZXJzfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e19hY2Nlc3NpYmlsaXR5U3RhdGV9XG4gICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbGxlZEJ5PXtfYWNjZXNzaWJpbGl0eUxhYmVsbGVkQnl9XG4gICAgICAgIGFjY2Vzc2libGU9e2FjY2Vzc2libGV9XG4gICAgICAgIGF1dG9DYXBpdGFsaXplPXthdXRvQ2FwaXRhbGl6ZX1cbiAgICAgICAgc3VibWl0QmVoYXZpb3I9e3N1Ym1pdEJlaGF2aW9yfVxuICAgICAgICBjYXJldEhpZGRlbj17Y2FyZXRIaWRkZW59XG4gICAgICAgIGNoaWxkcmVuPXtjaGlsZHJlbn1cbiAgICAgICAgZGlzYWJsZUZ1bGxzY3JlZW5VST17cHJvcHMuZGlzYWJsZUZ1bGxzY3JlZW5VSX1cbiAgICAgICAgZm9jdXNhYmxlPXt0YWJJbmRleCAhPT0gdW5kZWZpbmVkID8gIXRhYkluZGV4IDogZm9jdXNhYmxlfVxuICAgICAgICBtb3N0UmVjZW50RXZlbnRDb3VudD17bW9zdFJlY2VudEV2ZW50Q291bnR9XG4gICAgICAgIG5hdGl2ZUlEPXtpZCA/PyBwcm9wcy5uYXRpdmVJRH1cbiAgICAgICAgbnVtYmVyT2ZMaW5lcz17cHJvcHMucm93cyA/PyBwcm9wcy5udW1iZXJPZkxpbmVzfVxuICAgICAgICBvbkJsdXI9e19vbkJsdXJ9XG4gICAgICAgIG9uQ2hhbmdlPXtfb25DaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e19vbkZvY3VzfVxuICAgICAgICAvKiAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gdGhlIHR5cGVzIGZvciBBbmRyb2lkVGV4dElucHV0IGRvbid0IG1hdGNoXG4gICAgICAgICAqIHVwIGV4YWN0bHkgd2l0aCB0aGUgcHJvcHMgZm9yIFRleHRJbnB1dC4gVGhpcyB3aWxsIG5lZWQgdG8gZ2V0IGZpeGVkXG4gICAgICAgICAqL1xuICAgICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlLWFyZ10gdGhlIHR5cGVzIGZvciBBbmRyb2lkVGV4dElucHV0XG4gICAgICAgICAqIGRvbid0IG1hdGNoIHVwIGV4YWN0bHkgd2l0aCB0aGUgcHJvcHMgZm9yIFRleHRJbnB1dC4gVGhpcyB3aWxsIG5lZWRcbiAgICAgICAgICogdG8gZ2V0IGZpeGVkICovXG4gICAgICAgIG9uU2Nyb2xsPXtfb25TY3JvbGx9XG4gICAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlPXtfb25TZWxlY3Rpb25DaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICB0ZXh0QnJlYWtTdHJhdGVneT17cHJvcHMudGV4dEJyZWFrU3RyYXRlZ3l9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VGV4dEFuY2VzdG9yLlByb3ZpZGVyIHZhbHVlPXt0cnVlfT57dGV4dElucHV0fTwvVGV4dEFuY2VzdG9yLlByb3ZpZGVyPlxuICApO1xufVxuXG5jb25zdCBlbnRlcktleUhpbnRUb1JldHVyblR5cGVNYXAgPSB7XG4gIGVudGVyOiAnZGVmYXVsdCcsXG4gIGRvbmU6ICdkb25lJyxcbiAgZ286ICdnbycsXG4gIG5leHQ6ICduZXh0JyxcbiAgcHJldmlvdXM6ICdwcmV2aW91cycsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIHNlbmQ6ICdzZW5kJyxcbn07XG5cbmNvbnN0IGlucHV0TW9kZVRvS2V5Ym9hcmRUeXBlTWFwID0ge1xuICBub25lOiAnZGVmYXVsdCcsXG4gIHRleHQ6ICdkZWZhdWx0JyxcbiAgZGVjaW1hbDogJ2RlY2ltYWwtcGFkJyxcbiAgbnVtZXJpYzogJ251bWJlci1wYWQnLFxuICB0ZWw6ICdwaG9uZS1wYWQnLFxuICBzZWFyY2g6IFBsYXRmb3JtLk9TID09PSAnaW9zJyA/ICd3ZWItc2VhcmNoJyA6ICdkZWZhdWx0JyxcbiAgZW1haWw6ICdlbWFpbC1hZGRyZXNzJyxcbiAgdXJsOiAndXJsJyxcbn07XG5cbi8vIE1hcCBIVE1MIGF1dG9jb21wbGV0ZSB2YWx1ZXMgdG8gQW5kcm9pZCBhdXRvQ29tcGxldGUgdmFsdWVzXG5jb25zdCBhdXRvQ29tcGxldGVXZWJUb0F1dG9Db21wbGV0ZUFuZHJvaWRNYXAgPSB7XG4gICdhZGRyZXNzLWxpbmUxJzogJ3Bvc3RhbC1hZGRyZXNzLXJlZ2lvbicsXG4gICdhZGRyZXNzLWxpbmUyJzogJ3Bvc3RhbC1hZGRyZXNzLWxvY2FsaXR5JyxcbiAgYmRheTogJ2JpcnRoZGF0ZS1mdWxsJyxcbiAgJ2JkYXktZGF5JzogJ2JpcnRoZGF0ZS1kYXknLFxuICAnYmRheS1tb250aCc6ICdiaXJ0aGRhdGUtbW9udGgnLFxuICAnYmRheS15ZWFyJzogJ2JpcnRoZGF0ZS15ZWFyJyxcbiAgJ2NjLWNzYyc6ICdjYy1jc2MnLFxuICAnY2MtZXhwJzogJ2NjLWV4cCcsXG4gICdjYy1leHAtbW9udGgnOiAnY2MtZXhwLW1vbnRoJyxcbiAgJ2NjLWV4cC15ZWFyJzogJ2NjLWV4cC15ZWFyJyxcbiAgJ2NjLW51bWJlcic6ICdjYy1udW1iZXInLFxuICBjb3VudHJ5OiAncG9zdGFsLWFkZHJlc3MtY291bnRyeScsXG4gICdjdXJyZW50LXBhc3N3b3JkJzogJ3Bhc3N3b3JkJyxcbiAgZW1haWw6ICdlbWFpbCcsXG4gICdob25vcmlmaWMtcHJlZml4JzogJ25hbWUtcHJlZml4JyxcbiAgJ2hvbm9yaWZpYy1zdWZmaXgnOiAnbmFtZS1zdWZmaXgnLFxuICBuYW1lOiAnbmFtZScsXG4gICdhZGRpdGlvbmFsLW5hbWUnOiAnbmFtZS1taWRkbGUnLFxuICAnZmFtaWx5LW5hbWUnOiAnbmFtZS1mYW1pbHknLFxuICAnZ2l2ZW4tbmFtZSc6ICduYW1lLWdpdmVuJyxcbiAgJ25ldy1wYXNzd29yZCc6ICdwYXNzd29yZC1uZXcnLFxuICBvZmY6ICdvZmYnLFxuICAnb25lLXRpbWUtY29kZSc6ICdzbXMtb3RwJyxcbiAgJ3Bvc3RhbC1jb2RlJzogJ3Bvc3RhbC1jb2RlJyxcbiAgc2V4OiAnZ2VuZGVyJyxcbiAgJ3N0cmVldC1hZGRyZXNzJzogJ3N0cmVldC1hZGRyZXNzJyxcbiAgdGVsOiAndGVsJyxcbiAgJ3RlbC1jb3VudHJ5LWNvZGUnOiAndGVsLWNvdW50cnktY29kZScsXG4gICd0ZWwtbmF0aW9uYWwnOiAndGVsLW5hdGlvbmFsJyxcbiAgdXNlcm5hbWU6ICd1c2VybmFtZScsXG59O1xuXG4vLyBNYXAgSFRNTCBhdXRvY29tcGxldGUgdmFsdWVzIHRvIGlPUyB0ZXh0Q29udGVudFR5cGUgdmFsdWVzXG5jb25zdCBhdXRvQ29tcGxldGVXZWJUb1RleHRDb250ZW50VHlwZU1hcCA9IHtcbiAgJ2FkZHJlc3MtbGluZTEnOiAnc3RyZWV0QWRkcmVzc0xpbmUxJyxcbiAgJ2FkZHJlc3MtbGluZTInOiAnc3RyZWV0QWRkcmVzc0xpbmUyJyxcbiAgYmRheTogJ2JpcnRoZGF0ZScsXG4gICdiZGF5LWRheSc6ICdiaXJ0aGRhdGVEYXknLFxuICAnYmRheS1tb250aCc6ICdiaXJ0aGRhdGVNb250aCcsXG4gICdiZGF5LXllYXInOiAnYmlydGhkYXRlWWVhcicsXG4gICdjYy1jc2MnOiAnY3JlZGl0Q2FyZFNlY3VyaXR5Q29kZScsXG4gICdjYy1leHAtbW9udGgnOiAnY3JlZGl0Q2FyZEV4cGlyYXRpb25Nb250aCcsXG4gICdjYy1leHAteWVhcic6ICdjcmVkaXRDYXJkRXhwaXJhdGlvblllYXInLFxuICAnY2MtZXhwJzogJ2NyZWRpdENhcmRFeHBpcmF0aW9uJyxcbiAgJ2NjLWdpdmVuLW5hbWUnOiAnY3JlZGl0Q2FyZEdpdmVuTmFtZScsXG4gICdjYy1hZGRpdGlvbmFsLW5hbWUnOiAnY3JlZGl0Q2FyZE1pZGRsZU5hbWUnLFxuICAnY2MtZmFtaWx5LW5hbWUnOiAnY3JlZGl0Q2FyZEZhbWlseU5hbWUnLFxuICAnY2MtbmFtZSc6ICdjcmVkaXRDYXJkTmFtZScsXG4gICdjYy1udW1iZXInOiAnY3JlZGl0Q2FyZE51bWJlcicsXG4gICdjYy10eXBlJzogJ2NyZWRpdENhcmRUeXBlJyxcbiAgJ2N1cnJlbnQtcGFzc3dvcmQnOiAncGFzc3dvcmQnLFxuICBjb3VudHJ5OiAnY291bnRyeU5hbWUnLFxuICBlbWFpbDogJ2VtYWlsQWRkcmVzcycsXG4gIG5hbWU6ICduYW1lJyxcbiAgJ2FkZGl0aW9uYWwtbmFtZSc6ICdtaWRkbGVOYW1lJyxcbiAgJ2ZhbWlseS1uYW1lJzogJ2ZhbWlseU5hbWUnLFxuICAnZ2l2ZW4tbmFtZSc6ICdnaXZlbk5hbWUnLFxuICBuaWNrbmFtZTogJ25pY2tuYW1lJyxcbiAgJ2hvbm9yaWZpYy1wcmVmaXgnOiAnbmFtZVByZWZpeCcsXG4gICdob25vcmlmaWMtc3VmZml4JzogJ25hbWVTdWZmaXgnLFxuICAnbmV3LXBhc3N3b3JkJzogJ25ld1Bhc3N3b3JkJyxcbiAgb2ZmOiAnbm9uZScsXG4gICdvbmUtdGltZS1jb2RlJzogJ29uZVRpbWVDb2RlJyxcbiAgb3JnYW5pemF0aW9uOiAnb3JnYW5pemF0aW9uTmFtZScsXG4gICdvcmdhbml6YXRpb24tdGl0bGUnOiAnam9iVGl0bGUnLFxuICAncG9zdGFsLWNvZGUnOiAncG9zdGFsQ29kZScsXG4gICdzdHJlZXQtYWRkcmVzcyc6ICdmdWxsU3RyZWV0QWRkcmVzcycsXG4gIHRlbDogJ3RlbGVwaG9uZU51bWJlcicsXG4gIHVybDogJ1VSTCcsXG4gIHVzZXJuYW1lOiAndXNlcm5hbWUnLFxufTtcblxuY29uc3QgRXhwb3J0ZWRGb3J3YXJkUmVmOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxcbiAgUmVhY3QuRWxlbWVudENvbmZpZzx0eXBlb2YgSW50ZXJuYWxUZXh0SW5wdXQ+LFxuICBUZXh0SW5wdXRJbnN0YW5jZSxcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbj4gPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRJbnB1dChcbiAge1xuICAgIGFsbG93Rm9udFNjYWxpbmcgPSB0cnVlLFxuICAgIHJlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9uID0gdHJ1ZSxcbiAgICB1bmRlcmxpbmVDb2xvckFuZHJvaWQgPSAndHJhbnNwYXJlbnQnLFxuICAgIGF1dG9Db21wbGV0ZSxcbiAgICB0ZXh0Q29udGVudFR5cGUsXG4gICAgcmVhZE9ubHksXG4gICAgZWRpdGFibGUsXG4gICAgZW50ZXJLZXlIaW50LFxuICAgIHJldHVybktleVR5cGUsXG4gICAgaW5wdXRNb2RlLFxuICAgIHNob3dTb2Z0SW5wdXRPbkZvY3VzLFxuICAgIGtleWJvYXJkVHlwZSxcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSxcbiAgZm9yd2FyZGVkUmVmOiBSZWFjdFJlZlNldHRlcjxUZXh0SW5wdXRJbnN0YW5jZT4sXG4pIHtcbiAgLy8gJEZsb3dGaXhNZVt1bmRlcmNvbnN0cmFpbmVkLWltcGxpY2l0LWluc3RhbnRpYXRpb25dXG4gIGxldCBzdHlsZSA9IGZsYXR0ZW5TdHlsZShyZXN0UHJvcHMuc3R5bGUpO1xuXG4gIGlmIChzdHlsZT8udmVydGljYWxBbGlnbiAhPSBudWxsKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG4gICAgc3R5bGUudGV4dEFsaWduVmVydGljYWwgPVxuICAgICAgLy8gJEZsb3dGaXhNZVtpbnZhbGlkLWNvbXB1dGVkLXByb3BdXG4gICAgICB2ZXJ0aWNhbEFsaWduVG9UZXh0QWxpZ25WZXJ0aWNhbE1hcFtzdHlsZS52ZXJ0aWNhbEFsaWduXTtcbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cbiAgICBkZWxldGUgc3R5bGUudmVydGljYWxBbGlnbjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEludGVybmFsVGV4dElucHV0XG4gICAgICBhbGxvd0ZvbnRTY2FsaW5nPXthbGxvd0ZvbnRTY2FsaW5nfVxuICAgICAgcmVqZWN0UmVzcG9uZGVyVGVybWluYXRpb249e3JlamVjdFJlc3BvbmRlclRlcm1pbmF0aW9ufVxuICAgICAgdW5kZXJsaW5lQ29sb3JBbmRyb2lkPXt1bmRlcmxpbmVDb2xvckFuZHJvaWR9XG4gICAgICBlZGl0YWJsZT17cmVhZE9ubHkgIT09IHVuZGVmaW5lZCA/ICFyZWFkT25seSA6IGVkaXRhYmxlfVxuICAgICAgcmV0dXJuS2V5VHlwZT17XG4gICAgICAgIGVudGVyS2V5SGludCA/IGVudGVyS2V5SGludFRvUmV0dXJuVHlwZU1hcFtlbnRlcktleUhpbnRdIDogcmV0dXJuS2V5VHlwZVxuICAgICAgfVxuICAgICAga2V5Ym9hcmRUeXBlPXtcbiAgICAgICAgaW5wdXRNb2RlID8gaW5wdXRNb2RlVG9LZXlib2FyZFR5cGVNYXBbaW5wdXRNb2RlXSA6IGtleWJvYXJkVHlwZVxuICAgICAgfVxuICAgICAgc2hvd1NvZnRJbnB1dE9uRm9jdXM9e1xuICAgICAgICBpbnB1dE1vZGUgPT0gbnVsbCA/IHNob3dTb2Z0SW5wdXRPbkZvY3VzIDogaW5wdXRNb2RlICE9PSAnbm9uZSdcbiAgICAgIH1cbiAgICAgIGF1dG9Db21wbGV0ZT17XG4gICAgICAgIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCdcbiAgICAgICAgICA/IC8vICRGbG93Rml4TWVbaW52YWxpZC1jb21wdXRlZC1wcm9wXVxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgICAgICBhdXRvQ29tcGxldGVXZWJUb0F1dG9Db21wbGV0ZUFuZHJvaWRNYXBbYXV0b0NvbXBsZXRlXSA/P1xuICAgICAgICAgICAgYXV0b0NvbXBsZXRlXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIHRleHRDb250ZW50VHlwZT17XG4gICAgICAgIHRleHRDb250ZW50VHlwZSAhPSBudWxsXG4gICAgICAgICAgPyB0ZXh0Q29udGVudFR5cGVcbiAgICAgICAgICA6IFBsYXRmb3JtLk9TID09PSAnaW9zJyAmJlxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlICYmXG4gICAgICAgICAgICBhdXRvQ29tcGxldGUgaW4gYXV0b0NvbXBsZXRlV2ViVG9UZXh0Q29udGVudFR5cGVNYXBcbiAgICAgICAgICA/IC8vICRGbG93Rml4TWVbaW52YWxpZC1jb21wdXRlZC1wcm9wXVxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgICAgICBhdXRvQ29tcGxldGVXZWJUb1RleHRDb250ZW50VHlwZU1hcFthdXRvQ29tcGxldGVdXG4gICAgICAgICAgOiB0ZXh0Q29udGVudFR5cGVcbiAgICAgIH1cbiAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICBmb3J3YXJkZWRSZWY9e2ZvcndhcmRlZFJlZn1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAvPlxuICApO1xufSk7XG5cbkV4cG9ydGVkRm9yd2FyZFJlZi5kaXNwbGF5TmFtZSA9ICdUZXh0SW5wdXQnO1xuXG4vLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbkV4cG9ydGVkRm9yd2FyZFJlZi5TdGF0ZSA9IHtcbiAgY3VycmVudGx5Rm9jdXNlZElucHV0OiBUZXh0SW5wdXRTdGF0ZS5jdXJyZW50bHlGb2N1c2VkSW5wdXQsXG5cbiAgY3VycmVudGx5Rm9jdXNlZEZpZWxkOiBUZXh0SW5wdXRTdGF0ZS5jdXJyZW50bHlGb2N1c2VkRmllbGQsXG4gIGZvY3VzVGV4dElucHV0OiBUZXh0SW5wdXRTdGF0ZS5mb2N1c1RleHRJbnB1dCxcbiAgYmx1clRleHRJbnB1dDogVGV4dElucHV0U3RhdGUuYmx1clRleHRJbnB1dCxcbn07XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dENvbXBvbmVudFN0YXRpY3MgPSAkUmVhZE9ubHk8e3xcbiAgU3RhdGU6ICRSZWFkT25seTx7fFxuICAgIGN1cnJlbnRseUZvY3VzZWRJbnB1dDogdHlwZW9mIFRleHRJbnB1dFN0YXRlLmN1cnJlbnRseUZvY3VzZWRJbnB1dCxcbiAgICBjdXJyZW50bHlGb2N1c2VkRmllbGQ6IHR5cGVvZiBUZXh0SW5wdXRTdGF0ZS5jdXJyZW50bHlGb2N1c2VkRmllbGQsXG4gICAgZm9jdXNUZXh0SW5wdXQ6IHR5cGVvZiBUZXh0SW5wdXRTdGF0ZS5mb2N1c1RleHRJbnB1dCxcbiAgICBibHVyVGV4dElucHV0OiB0eXBlb2YgVGV4dElucHV0U3RhdGUuYmx1clRleHRJbnB1dCxcbiAgfH0+LFxufH0+O1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIG11bHRpbGluZURlZmF1bHQ6IHtcbiAgICAvLyBUaGlzIGRlZmF1bHQgdG9wIGluc2V0IG1ha2VzIFJDVE11bHRpbGluZVRleHRJbnB1dFZpZXcgc2VlbSBhcyBjbG9zZSBhcyBwb3NzaWJsZVxuICAgIC8vIHRvIHNpbmdsZS1saW5lIFJDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3IGRlZmF1bHRzLCB1c2luZyB0aGUgc3lzdGVtIGRlZmF1bHRzXG4gICAgLy8gb2YgZm9udCBzaXplIDE3IGFuZCBhIGhlaWdodCBvZiAzMSBwb2ludHMuXG4gICAgcGFkZGluZ1RvcDogNSxcbiAgfSxcbn0pO1xuXG5jb25zdCB2ZXJ0aWNhbEFsaWduVG9UZXh0QWxpZ25WZXJ0aWNhbE1hcCA9IHtcbiAgYXV0bzogJ2F1dG8nLFxuICB0b3A6ICd0b3AnLFxuICBib3R0b206ICdib3R0b20nLFxuICBtaWRkbGU6ICdjZW50ZXInLFxufTtcblxuLy8gJEZsb3dGaXhNZVt1bmNsZWFyLXR5cGVdIFVuY2xlYXIgdHlwZS4gVXNpbmcgYGFueWAgdHlwZSBpcyBub3Qgc2FmZS5cbm1vZHVsZS5leHBvcnRzID0gKChFeHBvcnRlZEZvcndhcmRSZWY6IGFueSk6IFRleHRJbnB1dFR5cGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgSG9zdENvbXBvbmVudCxcbiAgUGFydGlhbFZpZXdDb25maWcsXG59IGZyb20gJy4uLy4uL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1RleHRJbnB1dE5hdGl2ZUNvbW1hbmRzfSBmcm9tICcuL1RleHRJbnB1dE5hdGl2ZUNvbW1hbmRzJztcblxuaW1wb3J0ICogYXMgTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkgZnJvbSAnLi4vLi4vTmF0aXZlQ29tcG9uZW50L05hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5JztcbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tbWFuZHMgZnJvbSAnLi4vLi4vVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21tYW5kcyc7XG5pbXBvcnQgUkNUVGV4dElucHV0Vmlld0NvbmZpZyBmcm9tICcuL1JDVFRleHRJbnB1dFZpZXdDb25maWcnO1xuXG50eXBlIE5hdGl2ZVR5cGUgPSBIb3N0Q29tcG9uZW50PG1peGVkPjtcblxudHlwZSBOYXRpdmVDb21tYW5kcyA9IFRleHRJbnB1dE5hdGl2ZUNvbW1hbmRzPE5hdGl2ZVR5cGU+O1xuXG5leHBvcnQgY29uc3QgQ29tbWFuZHM6IE5hdGl2ZUNvbW1hbmRzID0gY29kZWdlbk5hdGl2ZUNvbW1hbmRzPE5hdGl2ZUNvbW1hbmRzPih7XG4gIHN1cHBvcnRlZENvbW1hbmRzOiBbJ2ZvY3VzJywgJ2JsdXInLCAnc2V0VGV4dEFuZFNlbGVjdGlvbiddLFxufSk7XG5cbmV4cG9ydCBjb25zdCBfX0lOVEVSTkFMX1ZJRVdfQ09ORklHOiBQYXJ0aWFsVmlld0NvbmZpZyA9IHtcbiAgdWlWaWV3Q2xhc3NOYW1lOiAnUkNUTXVsdGlsaW5lVGV4dElucHV0VmlldycsXG4gIC4uLlJDVFRleHRJbnB1dFZpZXdDb25maWcsXG4gIHZhbGlkQXR0cmlidXRlczoge1xuICAgIC4uLlJDVFRleHRJbnB1dFZpZXdDb25maWcudmFsaWRBdHRyaWJ1dGVzLFxuICAgIGRhdGFEZXRlY3RvclR5cGVzOiB0cnVlLFxuICB9LFxufTtcblxuY29uc3QgTXVsdGlsaW5lVGV4dElucHV0TmF0aXZlQ29tcG9uZW50OiBIb3N0Q29tcG9uZW50PG1peGVkPiA9XG4gIE5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldDxtaXhlZD4oXG4gICAgJ1JDVE11bHRpbGluZVRleHRJbnB1dFZpZXcnLFxuICAgICgpID0+IF9fSU5URVJOQUxfVklFV19DT05GSUcsXG4gICk7XG5cbi8vIGZsb3dsaW50LW5leHQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG5leHBvcnQgZGVmYXVsdCAoKE11bHRpbGluZVRleHRJbnB1dE5hdGl2ZUNvbXBvbmVudDogYW55KTogSG9zdENvbXBvbmVudDxtaXhlZD4pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0VkZ2VJbnNldHNQcm9wfSBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L0VkZ2VJbnNldHNQcm9wVHlwZSc7XG5pbXBvcnQgdHlwZSB7Q29sb3JWYWx1ZX0gZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCB0eXBlIHtQcmVzc0V2ZW50fSBmcm9tICcuLi8uLi9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5pbXBvcnQgdHlwZSB7VG91Y2hhYmxlVHlwZX0gZnJvbSAnLi9Ub3VjaGFibGUuZmxvdyc7XG5cbmltcG9ydCB7UHJlc3NhYmlsaXR5RGVidWdWaWV3fSBmcm9tICcuLi8uLi9QcmVzc2FiaWxpdHkvUHJlc3NhYmlsaXR5RGVidWcnO1xuaW1wb3J0IFVJTWFuYWdlciBmcm9tICcuLi8uLi9SZWFjdE5hdGl2ZS9VSU1hbmFnZXInO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgU291bmRNYW5hZ2VyIGZyb20gJy4uL1NvdW5kL1NvdW5kTWFuYWdlcic7XG5pbXBvcnQgQm91bmRpbmdEaW1lbnNpb25zIGZyb20gJy4vQm91bmRpbmdEaW1lbnNpb25zJztcbmltcG9ydCBQb3NpdGlvbiBmcm9tICcuL1Bvc2l0aW9uJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZXh0cmFjdFNpbmdsZVRvdWNoID0gKG5hdGl2ZUV2ZW50OiB7XG4gICtjaGFuZ2VkVG91Y2hlczogJFJlYWRPbmx5QXJyYXk8UHJlc3NFdmVudFsnbmF0aXZlRXZlbnQnXT4sXG4gICtmb3JjZT86IG51bWJlcixcbiAgK2lkZW50aWZpZXI6IG51bWJlcixcbiAgK2xvY2F0aW9uWDogbnVtYmVyLFxuICArbG9jYXRpb25ZOiBudW1iZXIsXG4gICtwYWdlWDogbnVtYmVyLFxuICArcGFnZVk6IG51bWJlcixcbiAgK3RhcmdldDogP251bWJlcixcbiAgK3RpbWVzdGFtcDogbnVtYmVyLFxuICArdG91Y2hlczogJFJlYWRPbmx5QXJyYXk8UHJlc3NFdmVudFsnbmF0aXZlRXZlbnQnXT4sXG59KSA9PiB7XG4gIGNvbnN0IHRvdWNoZXMgPSBuYXRpdmVFdmVudC50b3VjaGVzO1xuICBjb25zdCBjaGFuZ2VkVG91Y2hlcyA9IG5hdGl2ZUV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICBjb25zdCBoYXNUb3VjaGVzID0gdG91Y2hlcyAmJiB0b3VjaGVzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IGhhc0NoYW5nZWRUb3VjaGVzID0gY2hhbmdlZFRvdWNoZXMgJiYgY2hhbmdlZFRvdWNoZXMubGVuZ3RoID4gMDtcblxuICByZXR1cm4gIWhhc1RvdWNoZXMgJiYgaGFzQ2hhbmdlZFRvdWNoZXNcbiAgICA/IGNoYW5nZWRUb3VjaGVzWzBdXG4gICAgOiBoYXNUb3VjaGVzXG4gICAgPyB0b3VjaGVzWzBdXG4gICAgOiBuYXRpdmVFdmVudDtcbn07XG5cbi8qKlxuICogYFRvdWNoYWJsZWA6IFRhcHMgZG9uZSByaWdodC5cbiAqXG4gKiBZb3UgaG9vayB5b3VyIGBSZXNwb25kZXJFdmVudFBsdWdpbmAgZXZlbnRzIGludG8gYFRvdWNoYWJsZWAuIGBUb3VjaGFibGVgXG4gKiB3aWxsIG1lYXN1cmUgdGltZS9nZW9tZXRyeSBhbmQgdGVsbHMgeW91IHdoZW4gdG8gZ2l2ZSBmZWVkYmFjayB0byB0aGUgdXNlci5cbiAqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09IFRvdWNoYWJsZSBUdXRvcmlhbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBUaGUgYFRvdWNoYWJsZWAgbWl4aW4gaGVscHMgeW91IGhhbmRsZSB0aGUgXCJwcmVzc1wiIGludGVyYWN0aW9uLiBJdCBhbmFseXplc1xuICogdGhlIGdlb21ldHJ5IG9mIGVsZW1lbnRzLCBhbmQgb2JzZXJ2ZXMgd2hlbiBhbm90aGVyIHJlc3BvbmRlciAoc2Nyb2xsIHZpZXdcbiAqIGV0YykgaGFzIHN0b2xlbiB0aGUgdG91Y2ggbG9jay4gSXQgbm90aWZpZXMgeW91ciBjb21wb25lbnQgd2hlbiBpdCBzaG91bGRcbiAqIGdpdmUgZmVlZGJhY2sgdG8gdGhlIHVzZXIuIChib3VuY2luZy9oaWdobGlnaHRpbmcvdW5oaWdobGlnaHRpbmcpLlxuICpcbiAqIC0gV2hlbiBhIHRvdWNoIHdhcyBhY3RpdmF0ZWQgKHR5cGljYWxseSB5b3UgaGlnaGxpZ2h0KVxuICogLSBXaGVuIGEgdG91Y2ggd2FzIGRlYWN0aXZhdGVkICh0eXBpY2FsbHkgeW91IHVuaGlnaGxpZ2h0KVxuICogLSBXaGVuIGEgdG91Y2ggd2FzIFwicHJlc3NlZFwiIC0gYSB0b3VjaCBlbmRlZCB3aGlsZSBzdGlsbCB3aXRoaW4gdGhlIGdlb21ldHJ5XG4gKiAgIG9mIHRoZSBlbGVtZW50LCBhbmQgbm8gb3RoZXIgZWxlbWVudCAobGlrZSBzY3JvbGxlcikgaGFzIFwic3RvbGVuXCIgdG91Y2hcbiAqICAgbG9jayAoXCJyZXNwb25kZXJcIikgKFR5cGljYWxseSB5b3UgYm91bmNlIHRoZSBlbGVtZW50KS5cbiAqXG4gKiBBIGdvb2QgdGFwIGludGVyYWN0aW9uIGlzbid0IGFzIHNpbXBsZSBhcyB5b3UgbWlnaHQgdGhpbmsuIFRoZXJlIHNob3VsZCBiZSBhXG4gKiBzbGlnaHQgZGVsYXkgYmVmb3JlIHNob3dpbmcgYSBoaWdobGlnaHQgd2hlbiBzdGFydGluZyBhIHRvdWNoLiBJZiBhXG4gKiBzdWJzZXF1ZW50IHRvdWNoIG1vdmUgZXhjZWVkcyB0aGUgYm91bmRhcnkgb2YgdGhlIGVsZW1lbnQsIGl0IHNob3VsZFxuICogdW5oaWdobGlnaHQsIGJ1dCBpZiB0aGF0IHNhbWUgdG91Y2ggaXMgYnJvdWdodCBiYWNrIHdpdGhpbiB0aGUgYm91bmRhcnksIGl0XG4gKiBzaG91bGQgcmVoaWdobGlnaHQgYWdhaW4uIEEgdG91Y2ggY2FuIG1vdmUgaW4gYW5kIG91dCBvZiB0aGF0IGJvdW5kYXJ5XG4gKiBzZXZlcmFsIHRpbWVzLCBlYWNoIHRpbWUgdG9nZ2xpbmcgaGlnaGxpZ2h0aW5nLCBidXQgYSBcInByZXNzXCIgaXMgb25seVxuICogdHJpZ2dlcmVkIGlmIHRoYXQgdG91Y2ggZW5kcyB3aGlsZSB3aXRoaW4gdGhlIGVsZW1lbnQncyBib3VuZGFyeSBhbmQgbm9cbiAqIHNjcm9sbGVyIChvciBhbnl0aGluZyBlbHNlKSBoYXMgc3RvbGVuIHRoZSBsb2NrIG9uIHRvdWNoZXMuXG4gKlxuICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgY29tcG9uZW50IHRoYXQgaGFuZGxlcyBpbnRlcmFjdGlvbiB1c2luZyB0aGVcbiAqIGBUb3VjaGFibGVgIG1peGluLCBkbyB0aGUgZm9sbG93aW5nOlxuICpcbiAqIC0gSW5pdGlhbGl6ZSB0aGUgYFRvdWNoYWJsZWAgc3RhdGUuXG4gKlxuICogICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICogICAgIHJldHVybiBtZXJnZSh0aGlzLnRvdWNoYWJsZUdldEluaXRpYWxTdGF0ZSgpLCB5b3VyQ29tcG9uZW50U3RhdGUpO1xuICogICB9XG4gKlxuICogLSBDaG9vc2UgdGhlIHJlbmRlcmVkIGNvbXBvbmVudCB3aG8ncyB0b3VjaGVzIHNob3VsZCBzdGFydCB0aGUgaW50ZXJhY3RpdmVcbiAqICAgc2VxdWVuY2UuIE9uIHRoYXQgcmVuZGVyZWQgbm9kZSwgZm9yd2FyZCBhbGwgYFRvdWNoYWJsZWAgcmVzcG9uZGVyXG4gKiAgIGhhbmRsZXJzLiBZb3UgY2FuIGNob29zZSBhbnkgcmVuZGVyZWQgbm9kZSB5b3UgbGlrZS4gQ2hvb3NlIGEgbm9kZSB3aG9zZVxuICogICBoaXQgdGFyZ2V0IHlvdSdkIGxpa2UgdG8gaW5zdGlnYXRlIHRoZSBpbnRlcmFjdGlvbiBzZXF1ZW5jZTpcbiAqXG4gKiAgIC8vIEluIHJlbmRlciBmdW5jdGlvbjpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Vmlld1xuICogICAgICAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcj17dGhpcy50b3VjaGFibGVIYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlcn1cbiAqICAgICAgIG9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0PXt0aGlzLnRvdWNoYWJsZUhhbmRsZVJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdH1cbiAqICAgICAgIG9uUmVzcG9uZGVyR3JhbnQ9e3RoaXMudG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyR3JhbnR9XG4gKiAgICAgICBvblJlc3BvbmRlck1vdmU9e3RoaXMudG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyTW92ZX1cbiAqICAgICAgIG9uUmVzcG9uZGVyUmVsZWFzZT17dGhpcy50b3VjaGFibGVIYW5kbGVSZXNwb25kZXJSZWxlYXNlfVxuICogICAgICAgb25SZXNwb25kZXJUZXJtaW5hdGU9e3RoaXMudG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyVGVybWluYXRlfT5cbiAqICAgICAgIDxWaWV3PlxuICogICAgICAgICBFdmVuIHRob3VnaCB0aGUgaGl0IGRldGVjdGlvbi9pbnRlcmFjdGlvbnMgYXJlIHRyaWdnZXJlZCBieSB0aGVcbiAqICAgICAgICAgd3JhcHBpbmcgKHR5cGljYWxseSBsYXJnZXIpIG5vZGUsIHdlIHVzdWFsbHkgZW5kIHVwIGltcGxlbWVudGluZ1xuICogICAgICAgICBjdXN0b20gbG9naWMgdGhhdCBoaWdobGlnaHRzIHRoaXMgaW5uZXIgb25lLlxuICogICAgICAgPC9WaWV3PlxuICogICAgIDwvVmlldz5cbiAqICAgKTtcbiAqXG4gKiAtIFlvdSBtYXkgc2V0IHVwIHlvdXIgb3duIGhhbmRsZXJzIGZvciBlYWNoIG9mIHRoZXNlIGV2ZW50cywgc28gbG9uZyBhcyB5b3VcbiAqICAgYWxzbyBpbnZva2UgdGhlIGB0b3VjaGFibGUqYCBoYW5kbGVycyBpbnNpZGUgb2YgeW91ciBjdXN0b20gaGFuZGxlci5cbiAqXG4gKiAtIEltcGxlbWVudCB0aGUgaGFuZGxlcnMgb24geW91ciBjb21wb25lbnQgY2xhc3MgaW4gb3JkZXIgdG8gcHJvdmlkZVxuICogICBmZWVkYmFjayB0byB0aGUgdXNlci4gU2VlIGRvY3VtZW50YXRpb24gZm9yIGVhY2ggb2YgdGhlc2UgY2xhc3MgbWV0aG9kc1xuICogICB0aGF0IHlvdSBzaG91bGQgaW1wbGVtZW50LlxuICpcbiAqICAgdG91Y2hhYmxlSGFuZGxlUHJlc3M6IGZ1bmN0aW9uKCkge1xuICogICAgICB0aGlzLnBlcmZvcm1Cb3VuY2VBbmltYXRpb24oKTsgIC8vIG9yIHdoYXRldmVyIHlvdSB3YW50IHRvIGRvLlxuICogICB9LFxuICogICB0b3VjaGFibGVIYW5kbGVBY3RpdmVQcmVzc0luOiBmdW5jdGlvbigpIHtcbiAqICAgICB0aGlzLmJlZ2luSGlnaGxpZ2h0aW5nKC4uLik7ICAvLyBXaGF0ZXZlciB5b3UgbGlrZSB0byBjb252ZXkgYWN0aXZhdGlvblxuICogICB9LFxuICogICB0b3VjaGFibGVIYW5kbGVBY3RpdmVQcmVzc091dDogZnVuY3Rpb24oKSB7XG4gKiAgICAgdGhpcy5lbmRIaWdobGlnaHRpbmcoLi4uKTsgIC8vIFdoYXRldmVyIHlvdSBsaWtlIHRvIGNvbnZleSBkZWFjdGl2YXRpb25cbiAqICAgfSxcbiAqXG4gKiAtIFRoZXJlIGFyZSBtb3JlIGFkdmFuY2VkIG1ldGhvZHMgeW91IGNhbiBpbXBsZW1lbnQgKHNlZSBkb2N1bWVudGF0aW9uIGJlbG93KTpcbiAqICAgdG91Y2hhYmxlR2V0SGlnaGxpZ2h0RGVsYXlNUzogZnVuY3Rpb24oKSB7XG4gKiAgICAgcmV0dXJuIDIwO1xuICogICB9XG4gKiAgIC8vIEluIHByYWN0aWNlLCAqYWx3YXlzKiB1c2UgYSBwcmVkZWNsYXJlZCBjb25zdGFudCAoY29uc2VydmUgbWVtb3J5KS5cbiAqICAgdG91Y2hhYmxlR2V0UHJlc3NSZWN0T2Zmc2V0OiBmdW5jdGlvbigpIHtcbiAqICAgICByZXR1cm4ge3RvcDogMjAsIGxlZnQ6IDIwLCByaWdodDogMjAsIGJvdHRvbTogMTAwfTtcbiAqICAgfVxuICovXG5cbi8qKlxuICogVG91Y2hhYmxlIHN0YXRlcy5cbiAqL1xuXG5jb25zdCBTdGF0ZXMgPSB7XG4gIE5PVF9SRVNQT05ERVI6ICdOT1RfUkVTUE9OREVSJywgLy8gTm90IHRoZSByZXNwb25kZXJcbiAgUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX0lOOiAnUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX0lOJywgLy8gUmVzcG9uZGVyLCBpbmFjdGl2ZSwgaW4gdGhlIGBQcmVzc1JlY3RgXG4gIFJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19PVVQ6ICdSRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfT1VUJywgLy8gUmVzcG9uZGVyLCBpbmFjdGl2ZSwgb3V0IG9mIGBQcmVzc1JlY3RgXG4gIFJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU46ICdSRVNQT05ERVJfQUNUSVZFX1BSRVNTX0lOJywgLy8gUmVzcG9uZGVyLCBhY3RpdmUsIGluIHRoZSBgUHJlc3NSZWN0YFxuICBSRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVDogJ1JFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfT1VUJywgLy8gUmVzcG9uZGVyLCBhY3RpdmUsIG91dCBvZiBgUHJlc3NSZWN0YFxuICBSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU46ICdSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU4nLCAvLyBSZXNwb25kZXIsIGFjdGl2ZSwgaW4gdGhlIGBQcmVzc1JlY3RgLCBhZnRlciBsb25nIHByZXNzIHRocmVzaG9sZFxuICBSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfT1VUOiAnUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX09VVCcsIC8vIFJlc3BvbmRlciwgYWN0aXZlLCBvdXQgb2YgYFByZXNzUmVjdGAsIGFmdGVyIGxvbmcgcHJlc3MgdGhyZXNob2xkXG4gIEVSUk9SOiAnRVJST1InLFxufTtcblxudHlwZSBTdGF0ZSA9XG4gIHwgdHlwZW9mIFN0YXRlcy5OT1RfUkVTUE9OREVSXG4gIHwgdHlwZW9mIFN0YXRlcy5SRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfSU5cbiAgfCB0eXBlb2YgU3RhdGVzLlJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19PVVRcbiAgfCB0eXBlb2YgU3RhdGVzLlJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU5cbiAgfCB0eXBlb2YgU3RhdGVzLlJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfT1VUXG4gIHwgdHlwZW9mIFN0YXRlcy5SRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU5cbiAgfCB0eXBlb2YgU3RhdGVzLlJFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19PVVRcbiAgfCB0eXBlb2YgU3RhdGVzLkVSUk9SO1xuXG4vKlxuICogUXVpY2sgbG9va3VwIG1hcCBmb3Igc3RhdGVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgdG8gYmUgXCJhY3RpdmVcIlxuICovXG5cbmNvbnN0IGJhc2VTdGF0ZXNDb25kaXRpb25zID0ge1xuICBOT1RfUkVTUE9OREVSOiBmYWxzZSxcbiAgUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX0lOOiBmYWxzZSxcbiAgUkVTUE9OREVSX0lOQUNUSVZFX1BSRVNTX09VVDogZmFsc2UsXG4gIFJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU46IGZhbHNlLFxuICBSRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVDogZmFsc2UsXG4gIFJFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19JTjogZmFsc2UsXG4gIFJFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19PVVQ6IGZhbHNlLFxuICBFUlJPUjogZmFsc2UsXG59O1xuXG5jb25zdCBJc0FjdGl2ZSA9IHtcbiAgLi4uYmFzZVN0YXRlc0NvbmRpdGlvbnMsXG4gIFJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfT1VUOiB0cnVlLFxuICBSRVNQT05ERVJfQUNUSVZFX1BSRVNTX0lOOiB0cnVlLFxufTtcblxuLyoqXG4gKiBRdWljayBsb29rdXAgZm9yIHN0YXRlcyB0aGF0IGFyZSBjb25zaWRlcmVkIHRvIGJlIFwicHJlc3NpbmdcIiBhbmQgYXJlXG4gKiB0aGVyZWZvcmUgZWxpZ2libGUgdG8gcmVzdWx0IGluIGEgXCJzZWxlY3Rpb25cIiBpZiB0aGUgcHJlc3Mgc3RvcHMuXG4gKi9cbmNvbnN0IElzUHJlc3NpbmdJbiA9IHtcbiAgLi4uYmFzZVN0YXRlc0NvbmRpdGlvbnMsXG4gIFJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTjogdHJ1ZSxcbiAgUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTjogdHJ1ZSxcbiAgUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOOiB0cnVlLFxufTtcblxuY29uc3QgSXNMb25nUHJlc3NpbmdJbiA9IHtcbiAgLi4uYmFzZVN0YXRlc0NvbmRpdGlvbnMsXG4gIFJFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19JTjogdHJ1ZSxcbn07XG5cbi8qKlxuICogSW5wdXRzIHRvIHRoZSBzdGF0ZSBtYWNoaW5lLlxuICovXG5jb25zdCBTaWduYWxzID0ge1xuICBERUxBWTogJ0RFTEFZJyxcbiAgUkVTUE9OREVSX0dSQU5UOiAnUkVTUE9OREVSX0dSQU5UJyxcbiAgUkVTUE9OREVSX1JFTEVBU0U6ICdSRVNQT05ERVJfUkVMRUFTRScsXG4gIFJFU1BPTkRFUl9URVJNSU5BVEVEOiAnUkVTUE9OREVSX1RFUk1JTkFURUQnLFxuICBFTlRFUl9QUkVTU19SRUNUOiAnRU5URVJfUFJFU1NfUkVDVCcsXG4gIExFQVZFX1BSRVNTX1JFQ1Q6ICdMRUFWRV9QUkVTU19SRUNUJyxcbiAgTE9OR19QUkVTU19ERVRFQ1RFRDogJ0xPTkdfUFJFU1NfREVURUNURUQnLFxufTtcblxudHlwZSBTaWduYWwgPVxuICB8IHR5cGVvZiBTaWduYWxzLkRFTEFZXG4gIHwgdHlwZW9mIFNpZ25hbHMuUkVTUE9OREVSX0dSQU5UXG4gIHwgdHlwZW9mIFNpZ25hbHMuUkVTUE9OREVSX1JFTEVBU0VcbiAgfCB0eXBlb2YgU2lnbmFscy5SRVNQT05ERVJfVEVSTUlOQVRFRFxuICB8IHR5cGVvZiBTaWduYWxzLkVOVEVSX1BSRVNTX1JFQ1RcbiAgfCB0eXBlb2YgU2lnbmFscy5MRUFWRV9QUkVTU19SRUNUXG4gIHwgdHlwZW9mIFNpZ25hbHMuTE9OR19QUkVTU19ERVRFQ1RFRDtcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gU3RhdGVzIHggU2lnbmFscyA9PiBTdGF0ZXNcbiAqL1xuY29uc3QgVHJhbnNpdGlvbnMgPSB7XG4gIE5PVF9SRVNQT05ERVI6IHtcbiAgICBERUxBWTogU3RhdGVzLkVSUk9SLFxuICAgIFJFU1BPTkRFUl9HUkFOVDogU3RhdGVzLlJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTixcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogU3RhdGVzLkVSUk9SLFxuICAgIFJFU1BPTkRFUl9URVJNSU5BVEVEOiBTdGF0ZXMuRVJST1IsXG4gICAgRU5URVJfUFJFU1NfUkVDVDogU3RhdGVzLkVSUk9SLFxuICAgIExFQVZFX1BSRVNTX1JFQ1Q6IFN0YXRlcy5FUlJPUixcbiAgICBMT05HX1BSRVNTX0RFVEVDVEVEOiBTdGF0ZXMuRVJST1IsXG4gIH0sXG4gIFJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTjoge1xuICAgIERFTEFZOiBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTixcbiAgICBSRVNQT05ERVJfR1JBTlQ6IFN0YXRlcy5FUlJPUixcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogU3RhdGVzLk5PVF9SRVNQT05ERVIsXG4gICAgUkVTUE9OREVSX1RFUk1JTkFURUQ6IFN0YXRlcy5OT1RfUkVTUE9OREVSLFxuICAgIEVOVEVSX1BSRVNTX1JFQ1Q6IFN0YXRlcy5SRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfSU4sXG4gICAgTEVBVkVfUFJFU1NfUkVDVDogU3RhdGVzLlJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19PVVQsXG4gICAgTE9OR19QUkVTU19ERVRFQ1RFRDogU3RhdGVzLkVSUk9SLFxuICB9LFxuICBSRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfT1VUOiB7XG4gICAgREVMQVk6IFN0YXRlcy5SRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVCxcbiAgICBSRVNQT05ERVJfR1JBTlQ6IFN0YXRlcy5FUlJPUixcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogU3RhdGVzLk5PVF9SRVNQT05ERVIsXG4gICAgUkVTUE9OREVSX1RFUk1JTkFURUQ6IFN0YXRlcy5OT1RfUkVTUE9OREVSLFxuICAgIEVOVEVSX1BSRVNTX1JFQ1Q6IFN0YXRlcy5SRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfSU4sXG4gICAgTEVBVkVfUFJFU1NfUkVDVDogU3RhdGVzLlJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19PVVQsXG4gICAgTE9OR19QUkVTU19ERVRFQ1RFRDogU3RhdGVzLkVSUk9SLFxuICB9LFxuICBSRVNQT05ERVJfQUNUSVZFX1BSRVNTX0lOOiB7XG4gICAgREVMQVk6IFN0YXRlcy5FUlJPUixcbiAgICBSRVNQT05ERVJfR1JBTlQ6IFN0YXRlcy5FUlJPUixcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogU3RhdGVzLk5PVF9SRVNQT05ERVIsXG4gICAgUkVTUE9OREVSX1RFUk1JTkFURUQ6IFN0YXRlcy5OT1RfUkVTUE9OREVSLFxuICAgIEVOVEVSX1BSRVNTX1JFQ1Q6IFN0YXRlcy5SRVNQT05ERVJfQUNUSVZFX1BSRVNTX0lOLFxuICAgIExFQVZFX1BSRVNTX1JFQ1Q6IFN0YXRlcy5SRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVCxcbiAgICBMT05HX1BSRVNTX0RFVEVDVEVEOiBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOLFxuICB9LFxuICBSRVNQT05ERVJfQUNUSVZFX1BSRVNTX09VVDoge1xuICAgIERFTEFZOiBTdGF0ZXMuRVJST1IsXG4gICAgUkVTUE9OREVSX0dSQU5UOiBTdGF0ZXMuRVJST1IsXG4gICAgUkVTUE9OREVSX1JFTEVBU0U6IFN0YXRlcy5OT1RfUkVTUE9OREVSLFxuICAgIFJFU1BPTkRFUl9URVJNSU5BVEVEOiBTdGF0ZXMuTk9UX1JFU1BPTkRFUixcbiAgICBFTlRFUl9QUkVTU19SRUNUOiBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTixcbiAgICBMRUFWRV9QUkVTU19SRUNUOiBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9QUkVTU19PVVQsXG4gICAgTE9OR19QUkVTU19ERVRFQ1RFRDogU3RhdGVzLkVSUk9SLFxuICB9LFxuICBSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU46IHtcbiAgICBERUxBWTogU3RhdGVzLkVSUk9SLFxuICAgIFJFU1BPTkRFUl9HUkFOVDogU3RhdGVzLkVSUk9SLFxuICAgIFJFU1BPTkRFUl9SRUxFQVNFOiBTdGF0ZXMuTk9UX1JFU1BPTkRFUixcbiAgICBSRVNQT05ERVJfVEVSTUlOQVRFRDogU3RhdGVzLk5PVF9SRVNQT05ERVIsXG4gICAgRU5URVJfUFJFU1NfUkVDVDogU3RhdGVzLlJFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19JTixcbiAgICBMRUFWRV9QUkVTU19SRUNUOiBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX09VVCxcbiAgICBMT05HX1BSRVNTX0RFVEVDVEVEOiBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOLFxuICB9LFxuICBSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfT1VUOiB7XG4gICAgREVMQVk6IFN0YXRlcy5FUlJPUixcbiAgICBSRVNQT05ERVJfR1JBTlQ6IFN0YXRlcy5FUlJPUixcbiAgICBSRVNQT05ERVJfUkVMRUFTRTogU3RhdGVzLk5PVF9SRVNQT05ERVIsXG4gICAgUkVTUE9OREVSX1RFUk1JTkFURUQ6IFN0YXRlcy5OT1RfUkVTUE9OREVSLFxuICAgIEVOVEVSX1BSRVNTX1JFQ1Q6IFN0YXRlcy5SRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU4sXG4gICAgTEVBVkVfUFJFU1NfUkVDVDogU3RhdGVzLlJFU1BPTkRFUl9BQ1RJVkVfTE9OR19QUkVTU19PVVQsXG4gICAgTE9OR19QUkVTU19ERVRFQ1RFRDogU3RhdGVzLkVSUk9SLFxuICB9LFxuICBlcnJvcjoge1xuICAgIERFTEFZOiBTdGF0ZXMuTk9UX1JFU1BPTkRFUixcbiAgICBSRVNQT05ERVJfR1JBTlQ6IFN0YXRlcy5SRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfSU4sXG4gICAgUkVTUE9OREVSX1JFTEVBU0U6IFN0YXRlcy5OT1RfUkVTUE9OREVSLFxuICAgIFJFU1BPTkRFUl9URVJNSU5BVEVEOiBTdGF0ZXMuTk9UX1JFU1BPTkRFUixcbiAgICBFTlRFUl9QUkVTU19SRUNUOiBTdGF0ZXMuTk9UX1JFU1BPTkRFUixcbiAgICBMRUFWRV9QUkVTU19SRUNUOiBTdGF0ZXMuTk9UX1JFU1BPTkRFUixcbiAgICBMT05HX1BSRVNTX0RFVEVDVEVEOiBTdGF0ZXMuTk9UX1JFU1BPTkRFUixcbiAgfSxcbn07XG5cbi8vID09PT0gVHlwaWNhbCBDb25zdGFudHMgZm9yIGludGVncmF0aW5nIGludG8gVUkgY29tcG9uZW50cyA9PT09XG4vLyB2YXIgSElUX0VYUEFORF9QWCA9IDIwO1xuLy8gdmFyIEhJVF9WRVJUX09GRlNFVF9QWCA9IDEwO1xuY29uc3QgSElHSExJR0hUX0RFTEFZX01TID0gMTMwO1xuXG5jb25zdCBQUkVTU19FWFBBTkRfUFggPSAyMDtcblxuY29uc3QgTE9OR19QUkVTU19USFJFU0hPTEQgPSA1MDA7XG5cbmNvbnN0IExPTkdfUFJFU1NfREVMQVlfTVMgPSBMT05HX1BSRVNTX1RIUkVTSE9MRCAtIEhJR0hMSUdIVF9ERUxBWV9NUztcblxuY29uc3QgTE9OR19QUkVTU19BTExPV0VEX01PVkVNRU5UID0gMTA7XG5cbi8vIERlZmF1bHQgYW1vdW50IFwiYWN0aXZlXCIgcmVnaW9uIHByb3RydWRlcyBiZXlvbmQgYm94XG5cbi8qKlxuICogQnkgY29udmVudGlvbiwgbWV0aG9kcyBwcmVmaXhlZCB3aXRoIHVuZGVyc2NvcmVzIGFyZSBtZWFudCB0byBiZSBAcHJpdmF0ZSxcbiAqIGFuZCBub3QgQHByb3RlY3RlZC4gTWl4ZXJzIHNob3VsZG4ndCBhY2Nlc3MgdGhlbSAtIG5vdCBldmVuIHRvIHByb3ZpZGUgdGhlbVxuICogYXMgY2FsbGJhY2sgaGFuZGxlcnMuXG4gKlxuICpcbiAqID09PT09PT09PT0gR2VvbWV0cnkgPT09PT09PT09XG4gKiBgVG91Y2hhYmxlYCBvbmx5IGFzc3VtZXMgdGhhdCB0aGVyZSBleGlzdHMgYSBgSGl0UmVjdGAgbm9kZS4gVGhlIGBQcmVzc1JlY3RgXG4gKiBpcyBhbiBhYnN0cmFjdCBib3ggdGhhdCBpcyBleHRlbmRlZCBiZXlvbmQgdGhlIGBIaXRSZWN0YC5cbiAqXG4gKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICogIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLSBcIlN0YXJ0XCIgZXZlbnRzIGluIGBIaXRSZWN0YCBjYXVzZSBgSGl0UmVjdGBcbiAqICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rICB8ICAgdG8gYmVjb21lIHRoZSByZXNwb25kZXIuXG4gKiAgfCAgfCAgKy0tLS0tLS0tLS0tLS0tKyAgfCAgfCAtIGBIaXRSZWN0YCBpcyB0eXBpY2FsbHkgZXhwYW5kZWQgYXJvdW5kXG4gKiAgfCAgfCAgfCAgICAgICAgICAgICAgfCAgfCAgfCAgIHRoZSBgVmlzdWFsUmVjdGAsIGJ1dCBzaGlmdGVkIGRvd253YXJkLlxuICogIHwgIHwgIHwgIFZpc3VhbFJlY3QgIHwgIHwgIHwgLSBBZnRlciBwcmVzc2luZyBkb3duLCBhZnRlciBzb21lIGRlbGF5LFxuICogIHwgIHwgIHwgICAgICAgICAgICAgIHwgIHwgIHwgICBhbmQgYmVmb3JlIGxldHRpbmcgdXAsIHRoZSBWaXN1YWwgUmVhY3RcbiAqICB8ICB8ICArLS0tLS0tLS0tLS0tLS0rICB8ICB8ICAgd2lsbCBiZWNvbWUgXCJhY3RpdmVcIi4gVGhpcyBtYWtlcyBpdCBlbGlnaWJsZVxuICogIHwgIHwgICAgIEhpdFJlY3QgICAgICAgIHwgIHwgICBmb3IgYmVpbmcgaGlnaGxpZ2h0ZWQgKHNvIGxvbmcgYXMgdGhlXG4gKiAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfCAgIHByZXNzIHJlbWFpbnMgaW4gdGhlIGBQcmVzc1JlY3RgKS5cbiAqICB8ICAgICAgICBQcmVzc1JlY3QgICAgIG8gICB8XG4gKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tK1xuICogICAgICAgICAgIE91dCBSZWdpb24gICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKyBUaGlzIGdhcCBiZXR3ZWVuIHRoZSBgSGl0UmVjdGAgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBQcmVzc1JlY3RgIGFsbG93cyBhIHRvdWNoIHRvIG1vdmUgZmFyIGF3YXlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgb3JpZ2luYWwgaGl0IHJlY3QsIGFuZCByZW1haW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQsIGFuZCBlbGlnaWJsZSBmb3IgYSBcIlByZXNzXCIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWl6ZSB0aGlzIHZpYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdG91Y2hhYmxlR2V0UHJlc3NSZWN0T2Zmc2V0KClgLlxuICpcbiAqXG4gKlxuICogPT09PT09PSBTdGF0ZSBNYWNoaW5lID09PT09PT1cbiAqXG4gKiArLS0tLS0tLS0tLS0tLSsgPC0tLSsgUkVTUE9OREVSX1JFTEVBU0VcbiAqIHxOT1RfUkVTUE9OREVSfFxuICogKy0tLS0tLS0tLS0tLS0rIDwtLS0rIFJFU1BPTkRFUl9URVJNSU5BVEVEXG4gKiAgICAgK1xuICogICAgIHwgUkVTUE9OREVSX0dSQU5UIChIaXRSZWN0KVxuICogICAgIHZcbiAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICBERUxBWSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgVCArIERFTEFZICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICogfFJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTnwrLS0tLS0tLS0+fFJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU58ICstLS0tLS0tLS0tLS0+IHxSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU58XG4gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAqICAgICArICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICArICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgICAgXlxuICogICAgIHxMRUFWRV8gICAgICB8RU5URVJfICAgICAgICAgICAgICAgICAgIHxMRUFWRV8gICAgIHxFTlRFUl8gICAgICAgICAgICAgICAgICAgICAgICAgICB8TEVBVkVfICAgICB8RU5URVJfXG4gKiAgICAgfFBSRVNTX1JFQ1QgIHxQUkVTU19SRUNUICAgICAgICAgICAgICAgfFBSRVNTX1JFQ1QgfFBSRVNTX1JFQ1QgICAgICAgICAgICAgICAgICAgICAgIHxQUkVTU19SRUNUIHxQUkVTU19SRUNUXG4gKiAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHxcbiAqICAgICB2ICAgICAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgK1xuICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICBERUxBWSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICogfFJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19PVVR8Ky0tLS0tLS0+fFJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfT1VUfCAgICAgICAgICAgICAgIHxSRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfT1VUfFxuICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICpcbiAqIFQgKyBERUxBWSA9PiBMT05HX1BSRVNTX0RFTEFZX01TICsgREVMQVlcbiAqXG4gKiBOb3QgZHJhd24gYXJlIHRoZSBzaWRlIGVmZmVjdHMgb2YgZWFjaCB0cmFuc2l0aW9uLiBUaGUgbW9zdCBpbXBvcnRhbnQgc2lkZVxuICogZWZmZWN0IGlzIHRoZSBgdG91Y2hhYmxlSGFuZGxlUHJlc3NgIGFic3RyYWN0IG1ldGhvZCBpbnZvY2F0aW9uIHRoYXQgb2NjdXJzXG4gKiB3aGVuIGEgcmVzcG9uZGVyIGlzIHJlbGVhc2VkIHdoaWxlIGluIGVpdGhlciBvZiB0aGUgXCJQcmVzc1wiIHN0YXRlcy5cbiAqXG4gKiBUaGUgb3RoZXIgaW1wb3J0YW50IHNpZGUgZWZmZWN0cyBhcmUgdGhlIGhpZ2hsaWdodCBhYnN0cmFjdCBtZXRob2RcbiAqIGludm9jYXRpb25zIChpbnRlcm5hbCBjYWxsYmFja3MpIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBtaXhlci5cbiAqXG4gKlxuICogQGxlbmRzIFRvdWNoYWJsZS5wcm90b3R5cGVcbiAqL1xuY29uc3QgVG91Y2hhYmxlTWl4aW4gPSB7XG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFQbGF0Zm9ybS5pc1RWKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgdGltZW91dHMgb24gdW5tb3VudFxuICAgKi9cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIFRoZSAndGhpcycgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG91Y2hhYmxlRGVsYXlUaW1lb3V0ICYmIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoYWJsZURlbGF5VGltZW91dCk7XG4gICAgdGhpcy5sb25nUHJlc3NEZWxheVRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRoaXMubG9uZ1ByZXNzRGVsYXlUaW1lb3V0KTtcbiAgICB0aGlzLnByZXNzT3V0RGVsYXlUaW1lb3V0ICYmIGNsZWFyVGltZW91dCh0aGlzLnByZXNzT3V0RGVsYXlUaW1lb3V0KTtcbiAgfSxcblxuICAvKipcbiAgICogSXQncyBwcmVmZXIgdGhhdCBtaXhpbnMgZGV0ZXJtaW5lIHN0YXRlIGluIHRoaXMgd2F5LCBoYXZpbmcgdGhlIGNsYXNzXG4gICAqIGV4cGxpY2l0bHkgbWl4IHRoZSBzdGF0ZSBpbiB0aGUgb25lIGFuZCBvbmx5IGBnZXRJbml0aWFsU3RhdGVgIG1ldGhvZC5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fSBTdGF0ZSBvYmplY3QgdG8gYmUgcGxhY2VkIGluc2lkZSBvZlxuICAgKiBgdGhpcy5zdGF0ZS50b3VjaGFibGVgLlxuICAgKi9cbiAgdG91Y2hhYmxlR2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKToge1xuICAgIHRvdWNoYWJsZToge1xuICAgICAgdG91Y2hTdGF0ZTogP1N0YXRlLFxuICAgICAgcmVzcG9uZGVySUQ6ID9QcmVzc0V2ZW50WydjdXJyZW50VGFyZ2V0J10sXG4gICAgfSxcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdWNoYWJsZToge3RvdWNoU3RhdGU6IHVuZGVmaW5lZCwgcmVzcG9uZGVySUQ6IG51bGx9LFxuICAgIH07XG4gIH0sXG5cbiAgLy8gPT09PSBIb29rcyB0byBHZXN0dXJlIFJlc3BvbmRlciBzeXN0ZW0gPT09PVxuICAvKipcbiAgICogTXVzdCByZXR1cm4gdHJ1ZSBpZiBlbWJlZGRlZCBpbiBhIG5hdGl2ZSBwbGF0Zm9ybSBzY3JvbGwgdmlldy5cbiAgICovXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgdG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0OiBmdW5jdGlvbiAoKTogYW55IHtcbiAgICByZXR1cm4gIXRoaXMucHJvcHMucmVqZWN0UmVzcG9uZGVyVGVybWluYXRpb247XG4gIH0sXG5cbiAgLyoqXG4gICAqIE11c3QgcmV0dXJuIHRydWUgdG8gc3RhcnQgdGhlIHByb2Nlc3Mgb2YgYFRvdWNoYWJsZWAuXG4gICAqL1xuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIHRvdWNoYWJsZUhhbmRsZVN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyOiBmdW5jdGlvbiAoKTogYW55IHtcbiAgICByZXR1cm4gIXRoaXMucHJvcHMuZGlzYWJsZWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybiB0cnVlIHRvIGNhbmNlbCBwcmVzcyBvbiBsb25nIHByZXNzLlxuICAgKi9cbiAgdG91Y2hhYmxlTG9uZ1ByZXNzQ2FuY2Vsc1ByZXNzOiBmdW5jdGlvbiAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFBsYWNlIGFzIGNhbGxiYWNrIGZvciBhIERPTSBlbGVtZW50J3MgYG9uUmVzcG9uZGVyR3JhbnRgIGV2ZW50LlxuICAgKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBlIFN5bnRoZXRpYyBldmVudCBmcm9tIGV2ZW50IHN5c3RlbS5cbiAgICpcbiAgICovXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgdG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyR3JhbnQ6IGZ1bmN0aW9uIChlOiBQcmVzc0V2ZW50KSB7XG4gICAgY29uc3QgZGlzcGF0Y2hJRCA9IGUuY3VycmVudFRhcmdldDtcbiAgICAvLyBTaW5jZSBlIGlzIHVzZWQgaW4gYSBjYWxsYmFjayBpbnZva2VkIG9uIGFub3RoZXIgZXZlbnQgbG9vcFxuICAgIC8vIChhcyBpbiBzZXRUaW1lb3V0IGV0YyksIHdlIG5lZWQgdG8gY2FsbCBlLnBlcnNpc3QoKSBvbiB0aGVcbiAgICAvLyBldmVudCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBnZXQgcmV1c2VkIGluIHRoZSBldmVudCBvYmplY3QgcG9vbC5cbiAgICBlLnBlcnNpc3QoKTtcblxuICAgIHRoaXMucHJlc3NPdXREZWxheVRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRoaXMucHJlc3NPdXREZWxheVRpbWVvdXQpO1xuICAgIHRoaXMucHJlc3NPdXREZWxheVRpbWVvdXQgPSBudWxsO1xuXG4gICAgdGhpcy5zdGF0ZS50b3VjaGFibGUudG91Y2hTdGF0ZSA9IFN0YXRlcy5OT1RfUkVTUE9OREVSO1xuICAgIHRoaXMuc3RhdGUudG91Y2hhYmxlLnJlc3BvbmRlcklEID0gZGlzcGF0Y2hJRDtcbiAgICB0aGlzLl9yZWNlaXZlU2lnbmFsKFNpZ25hbHMuUkVTUE9OREVSX0dSQU5ULCBlKTtcbiAgICBsZXQgZGVsYXlNUyA9XG4gICAgICB0aGlzLnRvdWNoYWJsZUdldEhpZ2hsaWdodERlbGF5TVMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IE1hdGgubWF4KHRoaXMudG91Y2hhYmxlR2V0SGlnaGxpZ2h0RGVsYXlNUygpLCAwKVxuICAgICAgICA6IEhJR0hMSUdIVF9ERUxBWV9NUztcbiAgICBkZWxheU1TID0gaXNOYU4oZGVsYXlNUykgPyBISUdITElHSFRfREVMQVlfTVMgOiBkZWxheU1TO1xuICAgIGlmIChkZWxheU1TICE9PSAwKSB7XG4gICAgICB0aGlzLnRvdWNoYWJsZURlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAgIHRoaXMuX2hhbmRsZURlbGF5LmJpbmQodGhpcywgZSksXG4gICAgICAgIGRlbGF5TVMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oYW5kbGVEZWxheShlKTtcbiAgICB9XG5cbiAgICBsZXQgbG9uZ0RlbGF5TVMgPVxuICAgICAgdGhpcy50b3VjaGFibGVHZXRMb25nUHJlc3NEZWxheU1TICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBNYXRoLm1heCh0aGlzLnRvdWNoYWJsZUdldExvbmdQcmVzc0RlbGF5TVMoKSwgMTApXG4gICAgICAgIDogTE9OR19QUkVTU19ERUxBWV9NUztcbiAgICBsb25nRGVsYXlNUyA9IGlzTmFOKGxvbmdEZWxheU1TKSA/IExPTkdfUFJFU1NfREVMQVlfTVMgOiBsb25nRGVsYXlNUztcbiAgICB0aGlzLmxvbmdQcmVzc0RlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICB0aGlzLl9oYW5kbGVMb25nRGVsYXkuYmluZCh0aGlzLCBlKSxcbiAgICAgIGxvbmdEZWxheU1TICsgZGVsYXlNUyxcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQbGFjZSBhcyBjYWxsYmFjayBmb3IgYSBET00gZWxlbWVudCdzIGBvblJlc3BvbmRlclJlbGVhc2VgIGV2ZW50LlxuICAgKi9cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIFRoZSAndGhpcycgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICB0b3VjaGFibGVIYW5kbGVSZXNwb25kZXJSZWxlYXNlOiBmdW5jdGlvbiAoZTogUHJlc3NFdmVudCkge1xuICAgIHRoaXMucHJlc3NJbkxvY2F0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9yZWNlaXZlU2lnbmFsKFNpZ25hbHMuUkVTUE9OREVSX1JFTEVBU0UsIGUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQbGFjZSBhcyBjYWxsYmFjayBmb3IgYSBET00gZWxlbWVudCdzIGBvblJlc3BvbmRlclRlcm1pbmF0ZWAgZXZlbnQuXG4gICAqL1xuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIHRvdWNoYWJsZUhhbmRsZVJlc3BvbmRlclRlcm1pbmF0ZTogZnVuY3Rpb24gKGU6IFByZXNzRXZlbnQpIHtcbiAgICB0aGlzLnByZXNzSW5Mb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fcmVjZWl2ZVNpZ25hbChTaWduYWxzLlJFU1BPTkRFUl9URVJNSU5BVEVELCBlKTtcbiAgfSxcblxuICAvKipcbiAgICogUGxhY2UgYXMgY2FsbGJhY2sgZm9yIGEgRE9NIGVsZW1lbnQncyBgb25SZXNwb25kZXJNb3ZlYCBldmVudC5cbiAgICovXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgdG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyTW92ZTogZnVuY3Rpb24gKGU6IFByZXNzRXZlbnQpIHtcbiAgICAvLyBNZWFzdXJlbWVudCBtYXkgbm90IGhhdmUgcmV0dXJuZWQgeWV0LlxuICAgIGlmICghdGhpcy5zdGF0ZS50b3VjaGFibGUucG9zaXRpb25PbkFjdGl2YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb25PbkFjdGl2YXRlID0gdGhpcy5zdGF0ZS50b3VjaGFibGUucG9zaXRpb25PbkFjdGl2YXRlO1xuICAgIGNvbnN0IGRpbWVuc2lvbnNPbkFjdGl2YXRlID0gdGhpcy5zdGF0ZS50b3VjaGFibGUuZGltZW5zaW9uc09uQWN0aXZhdGU7XG4gICAgY29uc3QgcHJlc3NSZWN0T2Zmc2V0ID0gdGhpcy50b3VjaGFibGVHZXRQcmVzc1JlY3RPZmZzZXRcbiAgICAgID8gdGhpcy50b3VjaGFibGVHZXRQcmVzc1JlY3RPZmZzZXQoKVxuICAgICAgOiB7XG4gICAgICAgICAgbGVmdDogUFJFU1NfRVhQQU5EX1BYLFxuICAgICAgICAgIHJpZ2h0OiBQUkVTU19FWFBBTkRfUFgsXG4gICAgICAgICAgdG9wOiBQUkVTU19FWFBBTkRfUFgsXG4gICAgICAgICAgYm90dG9tOiBQUkVTU19FWFBBTkRfUFgsXG4gICAgICAgIH07XG5cbiAgICBsZXQgcHJlc3NFeHBhbmRMZWZ0ID0gcHJlc3NSZWN0T2Zmc2V0LmxlZnQ7XG4gICAgbGV0IHByZXNzRXhwYW5kVG9wID0gcHJlc3NSZWN0T2Zmc2V0LnRvcDtcbiAgICBsZXQgcHJlc3NFeHBhbmRSaWdodCA9IHByZXNzUmVjdE9mZnNldC5yaWdodDtcbiAgICBsZXQgcHJlc3NFeHBhbmRCb3R0b20gPSBwcmVzc1JlY3RPZmZzZXQuYm90dG9tO1xuXG4gICAgY29uc3QgaGl0U2xvcCA9IHRoaXMudG91Y2hhYmxlR2V0SGl0U2xvcFxuICAgICAgPyB0aGlzLnRvdWNoYWJsZUdldEhpdFNsb3AoKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGhpdFNsb3ApIHtcbiAgICAgIHByZXNzRXhwYW5kTGVmdCArPSBoaXRTbG9wLmxlZnQgfHwgMDtcbiAgICAgIHByZXNzRXhwYW5kVG9wICs9IGhpdFNsb3AudG9wIHx8IDA7XG4gICAgICBwcmVzc0V4cGFuZFJpZ2h0ICs9IGhpdFNsb3AucmlnaHQgfHwgMDtcbiAgICAgIHByZXNzRXhwYW5kQm90dG9tICs9IGhpdFNsb3AuYm90dG9tIHx8IDA7XG4gICAgfVxuXG4gICAgY29uc3QgdG91Y2ggPSBleHRyYWN0U2luZ2xlVG91Y2goZS5uYXRpdmVFdmVudCk7XG4gICAgY29uc3QgcGFnZVggPSB0b3VjaCAmJiB0b3VjaC5wYWdlWDtcbiAgICBjb25zdCBwYWdlWSA9IHRvdWNoICYmIHRvdWNoLnBhZ2VZO1xuXG4gICAgaWYgKHRoaXMucHJlc3NJbkxvY2F0aW9uKSB7XG4gICAgICBjb25zdCBtb3ZlZERpc3RhbmNlID0gdGhpcy5fZ2V0RGlzdGFuY2VCZXR3ZWVuUG9pbnRzKFxuICAgICAgICBwYWdlWCxcbiAgICAgICAgcGFnZVksXG4gICAgICAgIHRoaXMucHJlc3NJbkxvY2F0aW9uLnBhZ2VYLFxuICAgICAgICB0aGlzLnByZXNzSW5Mb2NhdGlvbi5wYWdlWSxcbiAgICAgICk7XG4gICAgICBpZiAobW92ZWREaXN0YW5jZSA+IExPTkdfUFJFU1NfQUxMT1dFRF9NT1ZFTUVOVCkge1xuICAgICAgICB0aGlzLl9jYW5jZWxMb25nUHJlc3NEZWxheVRpbWVvdXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc1RvdWNoV2l0aGluQWN0aXZlID1cbiAgICAgIHBhZ2VYID4gcG9zaXRpb25PbkFjdGl2YXRlLmxlZnQgLSBwcmVzc0V4cGFuZExlZnQgJiZcbiAgICAgIHBhZ2VZID4gcG9zaXRpb25PbkFjdGl2YXRlLnRvcCAtIHByZXNzRXhwYW5kVG9wICYmXG4gICAgICBwYWdlWCA8XG4gICAgICAgIHBvc2l0aW9uT25BY3RpdmF0ZS5sZWZ0ICtcbiAgICAgICAgICBkaW1lbnNpb25zT25BY3RpdmF0ZS53aWR0aCArXG4gICAgICAgICAgcHJlc3NFeHBhbmRSaWdodCAmJlxuICAgICAgcGFnZVkgPFxuICAgICAgICBwb3NpdGlvbk9uQWN0aXZhdGUudG9wICtcbiAgICAgICAgICBkaW1lbnNpb25zT25BY3RpdmF0ZS5oZWlnaHQgK1xuICAgICAgICAgIHByZXNzRXhwYW5kQm90dG9tO1xuICAgIGlmIChpc1RvdWNoV2l0aGluQWN0aXZlKSB7XG4gICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnN0YXRlLnRvdWNoYWJsZS50b3VjaFN0YXRlO1xuICAgICAgdGhpcy5fcmVjZWl2ZVNpZ25hbChTaWduYWxzLkVOVEVSX1BSRVNTX1JFQ1QsIGUpO1xuICAgICAgY29uc3QgY3VyU3RhdGUgPSB0aGlzLnN0YXRlLnRvdWNoYWJsZS50b3VjaFN0YXRlO1xuICAgICAgaWYgKFxuICAgICAgICBjdXJTdGF0ZSA9PT0gU3RhdGVzLlJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTiAmJlxuICAgICAgICBwcmV2U3RhdGUgIT09IFN0YXRlcy5SRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfSU5cbiAgICAgICkge1xuICAgICAgICAvLyBmaXggZm9yIHQ3OTY3NDIwXG4gICAgICAgIHRoaXMuX2NhbmNlbExvbmdQcmVzc0RlbGF5VGltZW91dCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jYW5jZWxMb25nUHJlc3NEZWxheVRpbWVvdXQoKTtcbiAgICAgIHRoaXMuX3JlY2VpdmVTaWduYWwoU2lnbmFscy5MRUFWRV9QUkVTU19SRUNULCBlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgaXRlbSByZWNlaXZlcyBmb2N1cy4gTWl4ZXJzIG1pZ2h0IG92ZXJyaWRlIHRoaXMgdG9cbiAgICogdmlzdWFsbHkgZGlzdGluZ3Vpc2ggdGhlIGBWaXN1YWxSZWN0YCBzbyB0aGF0IHRoZSB1c2VyIGtub3dzIHRoYXQgaXRcbiAgICogY3VycmVudGx5IGhhcyB0aGUgZm9jdXMuIE1vc3QgcGxhdGZvcm1zIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSBlbGVtZW50IGJlaW5nXG4gICAqIGZvY3VzZWQgYXQgYSB0aW1lLCBpbiB3aGljaCBjYXNlIHRoZXJlIG1heSBoYXZlIGJlZW4gYSBwcmV2aW91c2x5IGZvY3VzZWRcbiAgICogZWxlbWVudCB0aGF0IHdhcyBibHVycmVkIGp1c3QgcHJpb3IgdG8gdGhpcy4gVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB3aGVuXG4gICAqIHVzaW5nIGBUb3VjaGFibGUuTWl4aW4ud2l0aG91dERlZmF1bHRGb2N1c0FuZEJsdXJgLlxuICAgKi9cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIFRoZSAndGhpcycgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICB0b3VjaGFibGVIYW5kbGVGb2N1czogZnVuY3Rpb24gKGU6IEV2ZW50KSB7XG4gICAgdGhpcy5wcm9wcy5vbkZvY3VzICYmIHRoaXMucHJvcHMub25Gb2N1cyhlKTtcbiAgfSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBpdGVtIGxvc2VzIGZvY3VzLiBNaXhlcnMgbWlnaHQgb3ZlcnJpZGUgdGhpcyB0b1xuICAgKiB2aXN1YWxseSBkaXN0aW5ndWlzaCB0aGUgYFZpc3VhbFJlY3RgIHNvIHRoYXQgdGhlIHVzZXIga25vd3MgdGhhdCBpdFxuICAgKiBubyBsb25nZXIgaGFzIGZvY3VzLiBNb3N0IHBsYXRmb3JtcyBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgZWxlbWVudCBiZWluZ1xuICAgKiBmb2N1c2VkIGF0IGEgdGltZSwgaW4gd2hpY2ggY2FzZSB0aGUgZm9jdXMgbWF5IGhhdmUgbW92ZWQgdG8gYW5vdGhlci5cbiAgICogVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIHVzaW5nXG4gICAqIGBUb3VjaGFibGUuTWl4aW4ud2l0aG91dERlZmF1bHRGb2N1c0FuZEJsdXJgLlxuICAgKi9cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIFRoZSAndGhpcycgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICB0b3VjaGFibGVIYW5kbGVCbHVyOiBmdW5jdGlvbiAoZTogRXZlbnQpIHtcbiAgICB0aGlzLnByb3BzLm9uQmx1ciAmJiB0aGlzLnByb3BzLm9uQmx1cihlKTtcbiAgfSxcblxuICAvLyA9PT09IEFic3RyYWN0IEFwcGxpY2F0aW9uIENhbGxiYWNrcyA9PT09XG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgaXRlbSBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQuIE1peGVycyBzaG91bGQgaW1wbGVtZW50IHRoaXNcbiAgICogdG8gdmlzdWFsbHkgZGlzdGluZ3Vpc2ggdGhlIGBWaXN1YWxSZWN0YCBzbyB0aGF0IHRoZSB1c2VyIGtub3dzIHRoYXRcbiAgICogcmVsZWFzaW5nIGEgdG91Y2ggd2lsbCByZXN1bHQgaW4gYSBcInNlbGVjdGlvblwiIChhbmFsb2cgdG8gY2xpY2spLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogdG91Y2hhYmxlSGFuZGxlQWN0aXZlUHJlc3NJbjogZnVuY3Rpb24sXG4gICAqL1xuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGl0ZW0gaXMgXCJhY3RpdmVcIiAoaW4gdGhhdCBpdCBpcyBzdGlsbCBlbGlnaWJsZSB0byBiZWNvbWVcbiAgICogYSBcInNlbGVjdFwiKSBidXQgdGhlIHRvdWNoIGhhcyBsZWZ0IHRoZSBgUHJlc3NSZWN0YC4gVXN1YWxseSB0aGUgbWl4ZXIgd2lsbFxuICAgKiB3YW50IHRvIHVuaGlnaGxpZ2h0IHRoZSBgVmlzdWFsUmVjdGAuIElmIHRoZSB1c2VyICh3aGlsZSBwcmVzc2luZykgbW92ZXNcbiAgICogYmFjayBpbnRvIHRoZSBgUHJlc3NSZWN0YCBgdG91Y2hhYmxlSGFuZGxlQWN0aXZlUHJlc3NJbmAgd2lsbCBiZSBpbnZva2VkXG4gICAqIGFnYWluIGFuZCB0aGUgbWl4ZXIgc2hvdWxkIHByb2JhYmx5IGhpZ2hsaWdodCB0aGUgYFZpc3VhbFJlY3RgIGFnYWluLiBUaGlzXG4gICAqIGV2ZW50IHdpbGwgbm90IGZpcmUgb24gYW4gYHRvdWNoRW5kL21vdXNlVXBgIGV2ZW50LCBvbmx5IG1vdmUgZXZlbnRzIHdoaWxlXG4gICAqIHRoZSB1c2VyIGlzIGRlcHJlc3NpbmcgdGhlIG1vdXNlL3RvdWNoLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogdG91Y2hhYmxlSGFuZGxlQWN0aXZlUHJlc3NPdXQ6IGZ1bmN0aW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGl0ZW0gaXMgXCJzZWxlY3RlZFwiIC0gbWVhbmluZyB0aGUgaW50ZXJhY3Rpb24gZW5kZWQgYnlcbiAgICogbGV0dGluZyB1cCB3aGlsZSB0aGUgaXRlbSB3YXMgZWl0aGVyIGluIHRoZSBzdGF0ZVxuICAgKiBgUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTmAgb3IgYFJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTmAuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiB0b3VjaGFibGVIYW5kbGVQcmVzczogZnVuY3Rpb25cbiAgICovXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgaXRlbSBpcyBsb25nIHByZXNzZWQgLSBtZWFuaW5nIHRoZSBpbnRlcmFjdGlvbiBlbmRlZCBieVxuICAgKiBsZXR0aW5nIHVwIHdoaWxlIHRoZSBpdGVtIHdhcyBpbiBgUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOYC4gSWZcbiAgICogYHRvdWNoYWJsZUhhbmRsZUxvbmdQcmVzc2AgaXMgKm5vdCogcHJvdmlkZWQsIGB0b3VjaGFibGVIYW5kbGVQcmVzc2Agd2lsbFxuICAgKiBiZSBjYWxsZWQgYXMgaXQgbm9ybWFsbHkgaXMuIElmIGB0b3VjaGFibGVIYW5kbGVMb25nUHJlc3NgIGlzIHByb3ZpZGVkLCBieVxuICAgKiBkZWZhdWx0IGFueSBgdG91Y2hhYmxlSGFuZGxlUHJlc3NgIGNhbGxiYWNrIHdpbGwgbm90IGJlIGludm9rZWQuIFRvXG4gICAqIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciwgb3ZlcnJpZGUgYHRvdWNoYWJsZUxvbmdQcmVzc0NhbmNlbHNQcmVzc2BcbiAgICogdG8gcmV0dXJuIGZhbHNlLiBBcyBhIHJlc3VsdCwgYHRvdWNoYWJsZUhhbmRsZVByZXNzYCB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gICAqIGxpZnRpbmcgdXAsIGV2ZW4gaWYgYHRvdWNoYWJsZUhhbmRsZUxvbmdQcmVzc2AgaGFzIGFsc28gYmVlbiBjYWxsZWQuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiB0b3VjaGFibGVIYW5kbGVMb25nUHJlc3M6IGZ1bmN0aW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzIHRvIHdhaXQgYmVmb3JlIHRyaWdnZXJpbmcgYSBoaWdobGlnaHQuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiB0b3VjaGFibGVHZXRIaWdobGlnaHREZWxheU1TOiBmdW5jdGlvblxuICAgKi9cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYW1vdW50IHRvIGV4dGVuZCB0aGUgYEhpdFJlY3RgIGludG8gdGhlIGBQcmVzc1JlY3RgLiBQb3NpdGl2ZVxuICAgKiBudW1iZXJzIG1lYW4gdGhlIHNpemUgZXhwYW5kcyBvdXR3YXJkcy5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqIHRvdWNoYWJsZUdldFByZXNzUmVjdE9mZnNldDogZnVuY3Rpb25cbiAgICovXG5cbiAgLy8gPT09PSBJbnRlcm5hbCBMb2dpYyA9PT09XG5cbiAgLyoqXG4gICAqIE1lYXN1cmVzIHRoZSBgSGl0UmVjdGAgbm9kZSBvbiBhY3RpdmF0aW9uLiBUaGUgQm91bmRpbmcgcmVjdGFuZ2xlIGlzIHdpdGhcbiAgICogcmVzcGVjdCB0byB2aWV3cG9ydCAtIG5vdCBwYWdlLCBzbyBhZGRpbmcgdGhlIGBwYWdlWE9mZnNldC9wYWdlWU9mZnNldGBcbiAgICogc2hvdWxkIHJlc3VsdCBpbiBwb2ludHMgdGhhdCBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0gYXMgYW5cbiAgICogZXZlbnQncyBgZ2xvYmFsWC9nbG9iYWxZYCBkYXRhIHZhbHVlcy5cbiAgICpcbiAgICogLSBDb25zaWRlciBjYWNoaW5nIHRoaXMgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LCBvciBwb3NzaWJseVxuICAgKiAgIGJlaW5nIGFibGUgdG8gc2hhcmUgdGhpcyBjYWNoZSBiZXR3ZWVuIGFueSBgU2Nyb2xsTWFwYCB2aWV3LlxuICAgKlxuICAgKiBAc2lkZWVmZmVjdHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgX3JlbWVhc3VyZU1ldHJpY3NPbkFjdGl2YXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXNwb25kZXJJRCA9IHRoaXMuc3RhdGUudG91Y2hhYmxlLnJlc3BvbmRlcklEO1xuICAgIGlmIChyZXNwb25kZXJJRCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXNwb25kZXJJRCA9PT0gJ251bWJlcicpIHtcbiAgICAgIFVJTWFuYWdlci5tZWFzdXJlKHJlc3BvbmRlcklELCB0aGlzLl9oYW5kbGVRdWVyeUxheW91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbmRlcklELm1lYXN1cmUodGhpcy5faGFuZGxlUXVlcnlMYXlvdXQpO1xuICAgIH1cbiAgfSxcblxuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIF9oYW5kbGVRdWVyeUxheW91dDogZnVuY3Rpb24gKFxuICAgIGw6IG51bWJlcixcbiAgICB0OiBudW1iZXIsXG4gICAgdzogbnVtYmVyLFxuICAgIGg6IG51bWJlcixcbiAgICBnbG9iYWxYOiBudW1iZXIsXG4gICAgZ2xvYmFsWTogbnVtYmVyLFxuICApIHtcbiAgICAvL2Rvbid0IGRvIGFueXRoaW5nIFVJTWFuYWdlciBmYWlsZWQgdG8gbWVhc3VyZSBub2RlXG4gICAgaWYgKCFsICYmICF0ICYmICF3ICYmICFoICYmICFnbG9iYWxYICYmICFnbG9iYWxZKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUudG91Y2hhYmxlLnBvc2l0aW9uT25BY3RpdmF0ZSAmJlxuICAgICAgUG9zaXRpb24ucmVsZWFzZSh0aGlzLnN0YXRlLnRvdWNoYWJsZS5wb3NpdGlvbk9uQWN0aXZhdGUpO1xuICAgIHRoaXMuc3RhdGUudG91Y2hhYmxlLmRpbWVuc2lvbnNPbkFjdGl2YXRlICYmXG4gICAgICBCb3VuZGluZ0RpbWVuc2lvbnMucmVsZWFzZSh0aGlzLnN0YXRlLnRvdWNoYWJsZS5kaW1lbnNpb25zT25BY3RpdmF0ZSk7XG4gICAgdGhpcy5zdGF0ZS50b3VjaGFibGUucG9zaXRpb25PbkFjdGl2YXRlID0gUG9zaXRpb24uZ2V0UG9vbGVkKFxuICAgICAgZ2xvYmFsWCxcbiAgICAgIGdsb2JhbFksXG4gICAgKTtcbiAgICB0aGlzLnN0YXRlLnRvdWNoYWJsZS5kaW1lbnNpb25zT25BY3RpdmF0ZSA9IEJvdW5kaW5nRGltZW5zaW9ucy5nZXRQb29sZWQoXG4gICAgICB3LFxuICAgICAgaCxcbiAgICApO1xuICB9LFxuXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgX2hhbmRsZURlbGF5OiBmdW5jdGlvbiAoZTogUHJlc3NFdmVudCkge1xuICAgIHRoaXMudG91Y2hhYmxlRGVsYXlUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9yZWNlaXZlU2lnbmFsKFNpZ25hbHMuREVMQVksIGUpO1xuICB9LFxuXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgX2hhbmRsZUxvbmdEZWxheTogZnVuY3Rpb24gKGU6IFByZXNzRXZlbnQpIHtcbiAgICB0aGlzLmxvbmdQcmVzc0RlbGF5VGltZW91dCA9IG51bGw7XG4gICAgY29uc3QgY3VyU3RhdGUgPSB0aGlzLnN0YXRlLnRvdWNoYWJsZS50b3VjaFN0YXRlO1xuICAgIGlmIChcbiAgICAgIGN1clN0YXRlID09PSBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTiB8fFxuICAgICAgY3VyU3RhdGUgPT09IFN0YXRlcy5SRVNQT05ERVJfQUNUSVZFX0xPTkdfUFJFU1NfSU5cbiAgICApIHtcbiAgICAgIHRoaXMuX3JlY2VpdmVTaWduYWwoU2lnbmFscy5MT05HX1BSRVNTX0RFVEVDVEVELCBlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY2VpdmVzIGEgc3RhdGUgbWFjaGluZSBzaWduYWwsIHBlcmZvcm1zIHNpZGUgZWZmZWN0cyBvZiB0aGUgdHJhbnNpdGlvblxuICAgKiBhbmQgc3RvcmVzIHRoZSBuZXcgc3RhdGUuIFZhbGlkYXRlcyB0aGUgdHJhbnNpdGlvbiBhcyB3ZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge1NpZ25hbHN9IHNpZ25hbCBTdGF0ZSBtYWNoaW5lIHNpZ25hbC5cbiAgICogQHRocm93cyBFcnJvciBpZiBpbnZhbGlkIHN0YXRlIHRyYW5zaXRpb24gb3IgdW5yZWNvZ25pemVkIHNpZ25hbC5cbiAgICogQHNpZGVlZmZlY3RzXG4gICAqL1xuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIF9yZWNlaXZlU2lnbmFsOiBmdW5jdGlvbiAoc2lnbmFsOiBTaWduYWwsIGU6IFByZXNzRXZlbnQpIHtcbiAgICBjb25zdCByZXNwb25kZXJJRCA9IHRoaXMuc3RhdGUudG91Y2hhYmxlLnJlc3BvbmRlcklEO1xuICAgIGNvbnN0IGN1clN0YXRlID0gdGhpcy5zdGF0ZS50b3VjaGFibGUudG91Y2hTdGF0ZTtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSBUcmFuc2l0aW9uc1tjdXJTdGF0ZV0gJiYgVHJhbnNpdGlvbnNbY3VyU3RhdGVdW3NpZ25hbF07XG4gICAgaWYgKCFyZXNwb25kZXJJRCAmJiBzaWduYWwgPT09IFNpZ25hbHMuUkVTUE9OREVSX1JFTEVBU0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFuZXh0U3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1VucmVjb2duaXplZCBzaWduYWwgYCcgK1xuICAgICAgICAgIHNpZ25hbCArXG4gICAgICAgICAgJ2Agb3Igc3RhdGUgYCcgK1xuICAgICAgICAgIGN1clN0YXRlICtcbiAgICAgICAgICAnYCBmb3IgVG91Y2hhYmxlIHJlc3BvbmRlciBgJyArXG4gICAgICAgICAgdHlwZW9mIHRoaXMuc3RhdGUudG91Y2hhYmxlLnJlc3BvbmRlcklEID09PVxuICAgICAgICAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5zdGF0ZS50b3VjaGFibGUucmVzcG9uZGVySURcbiAgICAgICAgICA6ICdob3N0IGNvbXBvbmVudCcgKyAnYCcsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobmV4dFN0YXRlID09PSBTdGF0ZXMuRVJST1IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RvdWNoYWJsZSBjYW5ub3QgdHJhbnNpdGlvbiBmcm9tIGAnICtcbiAgICAgICAgICBjdXJTdGF0ZSArXG4gICAgICAgICAgJ2AgdG8gYCcgK1xuICAgICAgICAgIHNpZ25hbCArXG4gICAgICAgICAgJ2AgZm9yIHJlc3BvbmRlciBgJyArXG4gICAgICAgICAgdHlwZW9mIHRoaXMuc3RhdGUudG91Y2hhYmxlLnJlc3BvbmRlcklEID09PVxuICAgICAgICAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5zdGF0ZS50b3VjaGFibGUucmVzcG9uZGVySURcbiAgICAgICAgICA6ICc8PGhvc3QgY29tcG9uZW50Pj4nICsgJ2AnLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGN1clN0YXRlICE9PSBuZXh0U3RhdGUpIHtcbiAgICAgIHRoaXMuX3BlcmZvcm1TaWRlRWZmZWN0c0ZvclRyYW5zaXRpb24oY3VyU3RhdGUsIG5leHRTdGF0ZSwgc2lnbmFsLCBlKTtcbiAgICAgIHRoaXMuc3RhdGUudG91Y2hhYmxlLnRvdWNoU3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgfVxuICB9LFxuXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgX2NhbmNlbExvbmdQcmVzc0RlbGF5VGltZW91dDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9uZ1ByZXNzRGVsYXlUaW1lb3V0ICYmIGNsZWFyVGltZW91dCh0aGlzLmxvbmdQcmVzc0RlbGF5VGltZW91dCk7XG4gICAgdGhpcy5sb25nUHJlc3NEZWxheVRpbWVvdXQgPSBudWxsO1xuICB9LFxuXG4gIF9pc0hpZ2hsaWdodDogZnVuY3Rpb24gKHN0YXRlOiBTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdGF0ZSA9PT0gU3RhdGVzLlJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfSU4gfHxcbiAgICAgIHN0YXRlID09PSBTdGF0ZXMuUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOXG4gICAgKTtcbiAgfSxcblxuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIF9zYXZlUHJlc3NJbkxvY2F0aW9uOiBmdW5jdGlvbiAoZTogUHJlc3NFdmVudCkge1xuICAgIGNvbnN0IHRvdWNoID0gZXh0cmFjdFNpbmdsZVRvdWNoKGUubmF0aXZlRXZlbnQpO1xuICAgIGNvbnN0IHBhZ2VYID0gdG91Y2ggJiYgdG91Y2gucGFnZVg7XG4gICAgY29uc3QgcGFnZVkgPSB0b3VjaCAmJiB0b3VjaC5wYWdlWTtcbiAgICBjb25zdCBsb2NhdGlvblggPSB0b3VjaCAmJiB0b3VjaC5sb2NhdGlvblg7XG4gICAgY29uc3QgbG9jYXRpb25ZID0gdG91Y2ggJiYgdG91Y2gubG9jYXRpb25ZO1xuICAgIHRoaXMucHJlc3NJbkxvY2F0aW9uID0ge3BhZ2VYLCBwYWdlWSwgbG9jYXRpb25YLCBsb2NhdGlvbll9O1xuICB9LFxuXG4gIF9nZXREaXN0YW5jZUJldHdlZW5Qb2ludHM6IGZ1bmN0aW9uIChcbiAgICBhWDogbnVtYmVyLFxuICAgIGFZOiBudW1iZXIsXG4gICAgYlg6IG51bWJlcixcbiAgICBiWTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGRlbHRhWCA9IGFYIC0gYlg7XG4gICAgY29uc3QgZGVsdGFZID0gYVkgLSBiWTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdpbGwgcGVyZm9ybSBhIHRyYW5zaXRpb24gYmV0d2VlbiB0b3VjaGFibGUgc3RhdGVzLCBhbmQgaWRlbnRpZnkgYW55XG4gICAqIGhpZ2hsaWdodGluZyBvciB1bmhpZ2hsaWdodGluZyB0aGF0IG11c3QgYmUgcGVyZm9ybWVkIGZvciB0aGlzIHBhcnRpY3VsYXJcbiAgICogdHJhbnNpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdGF0ZXN9IGN1clN0YXRlIEN1cnJlbnQgVG91Y2hhYmxlIHN0YXRlLlxuICAgKiBAcGFyYW0ge1N0YXRlc30gbmV4dFN0YXRlIE5leHQgVG91Y2hhYmxlIHN0YXRlLlxuICAgKiBAcGFyYW0ge1NpZ25hbH0gc2lnbmFsIFNpZ25hbCB0aGF0IHRyaWdnZXJlZCB0aGUgdHJhbnNpdGlvbi5cbiAgICogQHBhcmFtIHtFdmVudH0gZSBOYXRpdmUgZXZlbnQuXG4gICAqIEBzaWRlZWZmZWN0c1xuICAgKi9cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIFRoZSAndGhpcycgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICBfcGVyZm9ybVNpZGVFZmZlY3RzRm9yVHJhbnNpdGlvbjogZnVuY3Rpb24gKFxuICAgIGN1clN0YXRlOiBTdGF0ZSxcbiAgICBuZXh0U3RhdGU6IFN0YXRlLFxuICAgIHNpZ25hbDogU2lnbmFsLFxuICAgIGU6IFByZXNzRXZlbnQsXG4gICkge1xuICAgIGNvbnN0IGN1cklzSGlnaGxpZ2h0ID0gdGhpcy5faXNIaWdobGlnaHQoY3VyU3RhdGUpO1xuICAgIGNvbnN0IG5ld0lzSGlnaGxpZ2h0ID0gdGhpcy5faXNIaWdobGlnaHQobmV4dFN0YXRlKTtcblxuICAgIGNvbnN0IGlzRmluYWxTaWduYWwgPVxuICAgICAgc2lnbmFsID09PSBTaWduYWxzLlJFU1BPTkRFUl9URVJNSU5BVEVEIHx8XG4gICAgICBzaWduYWwgPT09IFNpZ25hbHMuUkVTUE9OREVSX1JFTEVBU0U7XG5cbiAgICBpZiAoaXNGaW5hbFNpZ25hbCkge1xuICAgICAgdGhpcy5fY2FuY2VsTG9uZ1ByZXNzRGVsYXlUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNJbml0aWFsVHJhbnNpdGlvbiA9XG4gICAgICBjdXJTdGF0ZSA9PT0gU3RhdGVzLk5PVF9SRVNQT05ERVIgJiZcbiAgICAgIG5leHRTdGF0ZSA9PT0gU3RhdGVzLlJFU1BPTkRFUl9JTkFDVElWRV9QUkVTU19JTjtcblxuICAgIGNvbnN0IGlzQWN0aXZlVHJhbnNpdGlvbiA9ICFJc0FjdGl2ZVtjdXJTdGF0ZV0gJiYgSXNBY3RpdmVbbmV4dFN0YXRlXTtcbiAgICBpZiAoaXNJbml0aWFsVHJhbnNpdGlvbiB8fCBpc0FjdGl2ZVRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuX3JlbWVhc3VyZU1ldHJpY3NPbkFjdGl2YXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoSXNQcmVzc2luZ0luW2N1clN0YXRlXSAmJiBzaWduYWwgPT09IFNpZ25hbHMuTE9OR19QUkVTU19ERVRFQ1RFRCkge1xuICAgICAgdGhpcy50b3VjaGFibGVIYW5kbGVMb25nUHJlc3MgJiYgdGhpcy50b3VjaGFibGVIYW5kbGVMb25nUHJlc3MoZSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lzSGlnaGxpZ2h0ICYmICFjdXJJc0hpZ2hsaWdodCkge1xuICAgICAgdGhpcy5fc3RhcnRIaWdobGlnaHQoZSk7XG4gICAgfSBlbHNlIGlmICghbmV3SXNIaWdobGlnaHQgJiYgY3VySXNIaWdobGlnaHQpIHtcbiAgICAgIHRoaXMuX2VuZEhpZ2hsaWdodChlKTtcbiAgICB9XG5cbiAgICBpZiAoSXNQcmVzc2luZ0luW2N1clN0YXRlXSAmJiBzaWduYWwgPT09IFNpZ25hbHMuUkVTUE9OREVSX1JFTEVBU0UpIHtcbiAgICAgIGNvbnN0IGhhc0xvbmdQcmVzc0hhbmRsZXIgPSAhIXRoaXMucHJvcHMub25Mb25nUHJlc3M7XG4gICAgICBjb25zdCBwcmVzc0lzTG9uZ0J1dFN0aWxsQ2FsbE9uUHJlc3MgPVxuICAgICAgICBJc0xvbmdQcmVzc2luZ0luW2N1clN0YXRlXSAmJiAvLyBXZSAqYXJlKiBsb25nIHByZXNzaW5nLi4gLy8gQnV0IGVpdGhlciBoYXMgbm8gbG9uZyBoYW5kbGVyXG4gICAgICAgICghaGFzTG9uZ1ByZXNzSGFuZGxlciB8fCAhdGhpcy50b3VjaGFibGVMb25nUHJlc3NDYW5jZWxzUHJlc3MoKSk7IC8vIG9yIHdlJ3JlIHRvbGQgdG8gaWdub3JlIGl0LlxuXG4gICAgICBjb25zdCBzaG91bGRJbnZva2VQcmVzcyA9XG4gICAgICAgICFJc0xvbmdQcmVzc2luZ0luW2N1clN0YXRlXSB8fCBwcmVzc0lzTG9uZ0J1dFN0aWxsQ2FsbE9uUHJlc3M7XG4gICAgICBpZiAoc2hvdWxkSW52b2tlUHJlc3MgJiYgdGhpcy50b3VjaGFibGVIYW5kbGVQcmVzcykge1xuICAgICAgICBpZiAoIW5ld0lzSGlnaGxpZ2h0ICYmICFjdXJJc0hpZ2hsaWdodCkge1xuICAgICAgICAgIC8vIHdlIG5ldmVyIGhpZ2hsaWdodGVkIGJlY2F1c2Ugb2YgZGVsYXksIGJ1dCB3ZSBzaG91bGQgaGlnaGxpZ2h0IG5vd1xuICAgICAgICAgIHRoaXMuX3N0YXJ0SGlnaGxpZ2h0KGUpO1xuICAgICAgICAgIHRoaXMuX2VuZEhpZ2hsaWdodChlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJyAmJiAhdGhpcy5wcm9wcy50b3VjaFNvdW5kRGlzYWJsZWQpIHtcbiAgICAgICAgICBTb3VuZE1hbmFnZXIucGxheVRvdWNoU291bmQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvdWNoYWJsZUhhbmRsZVByZXNzKGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudG91Y2hhYmxlRGVsYXlUaW1lb3V0ICYmIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoYWJsZURlbGF5VGltZW91dCk7XG4gICAgdGhpcy50b3VjaGFibGVEZWxheVRpbWVvdXQgPSBudWxsO1xuICB9LFxuXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgX3N0YXJ0SGlnaGxpZ2h0OiBmdW5jdGlvbiAoZTogUHJlc3NFdmVudCkge1xuICAgIHRoaXMuX3NhdmVQcmVzc0luTG9jYXRpb24oZSk7XG4gICAgdGhpcy50b3VjaGFibGVIYW5kbGVBY3RpdmVQcmVzc0luICYmIHRoaXMudG91Y2hhYmxlSGFuZGxlQWN0aXZlUHJlc3NJbihlKTtcbiAgfSxcblxuICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gIF9lbmRIaWdobGlnaHQ6IGZ1bmN0aW9uIChlOiBQcmVzc0V2ZW50KSB7XG4gICAgaWYgKHRoaXMudG91Y2hhYmxlSGFuZGxlQWN0aXZlUHJlc3NPdXQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b3VjaGFibGVHZXRQcmVzc091dERlbGF5TVMgJiZcbiAgICAgICAgdGhpcy50b3VjaGFibGVHZXRQcmVzc091dERlbGF5TVMoKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHJlc3NPdXREZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvdWNoYWJsZUhhbmRsZUFjdGl2ZVByZXNzT3V0KGUpO1xuICAgICAgICB9LCB0aGlzLnRvdWNoYWJsZUdldFByZXNzT3V0RGVsYXlNUygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG91Y2hhYmxlSGFuZGxlQWN0aXZlUHJlc3NPdXQoZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdpdGhvdXREZWZhdWx0Rm9jdXNBbmRCbHVyOiAoe306IHsuLi59KSxcbn07XG5cbi8qKlxuICogUHJvdmlkZSBhbiBvcHRpb25hbCB2ZXJzaW9uIG9mIHRoZSBtaXhpbiB3aGVyZSBgdG91Y2hhYmxlSGFuZGxlRm9jdXNgIGFuZFxuICogYHRvdWNoYWJsZUhhbmRsZUJsdXJgIGNhbiBiZSBvdmVycmlkZGVuLiBUaGlzIGFsbG93cyBhcHByb3ByaWF0ZSBkZWZhdWx0cyB0b1xuICogYmUgc2V0IG9uIFRWIHBsYXRmb3Jtcywgd2l0aG91dCBicmVha2luZyBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgb2ZcbiAqIGBUb3VjaGFibGVgLlxuICovXG5jb25zdCB7XG4gIHRvdWNoYWJsZUhhbmRsZUZvY3VzLFxuICB0b3VjaGFibGVIYW5kbGVCbHVyLFxuICAuLi5Ub3VjaGFibGVNaXhpbldpdGhvdXREZWZhdWx0Rm9jdXNBbmRCbHVyXG59ID0gVG91Y2hhYmxlTWl4aW47XG5Ub3VjaGFibGVNaXhpbi53aXRob3V0RGVmYXVsdEZvY3VzQW5kQmx1ciA9XG4gIFRvdWNoYWJsZU1peGluV2l0aG91dERlZmF1bHRGb2N1c0FuZEJsdXI7XG5cbmNvbnN0IFRvdWNoYWJsZTogVG91Y2hhYmxlVHlwZSA9IHtcbiAgTWl4aW46IFRvdWNoYWJsZU1peGluLFxuICAvKipcbiAgICogUmVuZGVycyBhIGRlYnVnZ2luZyBvdmVybGF5IHRvIHZpc3VhbGl6ZSB0b3VjaCB0YXJnZXQgd2l0aCBoaXRTbG9wIChtaWdodCBub3Qgd29yayBvbiBBbmRyb2lkKS5cbiAgICovXG4gIHJlbmRlckRlYnVnVmlldzogKHtcbiAgICBjb2xvcixcbiAgICBoaXRTbG9wLFxuICB9OiB7XG4gICAgY29sb3I6IENvbG9yVmFsdWUsXG4gICAgaGl0U2xvcDogRWRnZUluc2V0c1Byb3AsXG4gICAgLi4uXG4gIH0pOiBudWxsIHwgUmVhY3QuTm9kZSA9PiB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHJldHVybiA8UHJlc3NhYmlsaXR5RGVidWdWaWV3IGNvbG9yPXtjb2xvcn0gaGl0U2xvcD17aGl0U2xvcH0gLz47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUb3VjaGFibGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcbmltcG9ydCBQb29sZWRDbGFzcyBmcm9tICcuL1Bvb2xlZENsYXNzJztcblxuY29uc3QgdHdvQXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xlcjtcblxuLyoqXG4gKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggV2lkdGggb2YgYm91bmRpbmcgcmVjdGFuZ2xlLlxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBIZWlnaHQgb2YgYm91bmRpbmcgcmVjdGFuZ2xlLlxuICogQGNvbnN0cnVjdG9yIEJvdW5kaW5nRGltZW5zaW9uc1xuICovXG5mdW5jdGlvbiBCb3VuZGluZ0RpbWVuc2lvbnMod2lkdGgsIGhlaWdodCkge1xuICB0aGlzLndpZHRoID0gd2lkdGg7XG4gIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xufVxuXG5Cb3VuZGluZ0RpbWVuc2lvbnMucHJvdG90eXBlLmRlc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMud2lkdGggPSBudWxsO1xuICB0aGlzLmhlaWdodCA9IG51bGw7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0byByZXR1cm4gYEJvdW5kaW5nRGltZW5zaW9uc2AgZm9yLlxuICogQHJldHVybiB7Qm91bmRpbmdEaW1lbnNpb25zfSBCb3VuZGluZyBkaW1lbnNpb25zIG9mIGBlbGVtZW50YC5cbiAqL1xuQm91bmRpbmdEaW1lbnNpb25zLmdldFBvb2xlZEZyb21FbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEJvdW5kaW5nRGltZW5zaW9ucy5nZXRQb29sZWQoXG4gICAgZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgKTtcbn07XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhCb3VuZGluZ0RpbWVuc2lvbnMsIHR3b0FyZ3VtZW50UG9vbGVyKTtcblxubW9kdWxlLmV4cG9ydHMgPSBCb3VuZGluZ0RpbWVuc2lvbnM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5cbi8qKlxuICogU3RhdGljIHBvb2xlcnMuIFNldmVyYWwgY3VzdG9tIHZlcnNpb25zIGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2ZcbiAqIGFyZ3VtZW50cy4gQSBjb21wbGV0ZWx5IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBidXQgd291bGRcbiAqIHJlcXVpcmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIEluIGVhY2ggb2YgdGhlc2UsIGB0aGlzYCByZWZlcnMgdG9cbiAqIHRoZSBDbGFzcyBpdHNlbGYsIG5vdCBhbiBpbnN0YW5jZS4gSWYgYW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW1cbiAqIGhlcmUsIG9yIGluIHRoZWlyIG93biBmaWxlcy5cbiAqL1xuLyogJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdIFRoZSAndGhpcycgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbmNvbnN0IG9uZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGNvcHlGaWVsZHNGcm9tOiBhbnkpIHtcbiAgY29uc3QgS2xhc3MgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtdGhpc1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7XG4gIH1cbn07XG5cbi8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG5jb25zdCB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMTogYW55LCBhMjogYW55KSB7XG4gIGNvbnN0IEtsYXNzID0gdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXRoaXNcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMik7XG4gIH1cbn07XG5cbi8qICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XSBUaGUgJ3RoaXMnIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieVxuICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG5jb25zdCB0aHJlZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExOiBhbnksIGEyOiBhbnksIGEzOiBhbnkpIHtcbiAgY29uc3QgS2xhc3MgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtdGhpc1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpO1xuICB9XG59O1xuXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuY29uc3QgZm91ckFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExOiBhbnksIGEyOiBhbnksIGEzOiBhbnksIGE0OiBhbnkpIHtcbiAgY29uc3QgS2xhc3MgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtdGhpc1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMsIGE0KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7XG4gIH1cbn07XG5cbi8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAqIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAqIEZsb3cncyBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuY29uc3Qgc3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBjb25zdCBLbGFzcyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC10aGlzXG4gIGludmFyaWFudChcbiAgICBpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzLFxuICAgICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLicsXG4gICk7XG4gIGluc3RhbmNlLmRlc3RydWN0b3IoKTtcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGggPCBLbGFzcy5wb29sU2l6ZSkge1xuICAgIEtsYXNzLmluc3RhbmNlUG9vbC5wdXNoKGluc3RhbmNlKTtcbiAgfVxufTtcblxuY29uc3QgREVGQVVMVF9QT09MX1NJWkUgPSAxMDtcbmNvbnN0IERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7XG5cbnR5cGUgUG9vbGVyID0gYW55O1xuXG4vKipcbiAqIEF1Z21lbnRzIGBDb3B5Q29uc3RydWN0b3JgIHRvIGJlIGEgcG9vbGFibGUgY2xhc3MsIGF1Z21lbnRpbmcgb25seSB0aGUgY2xhc3NcbiAqIGl0c2VsZiAoc3RhdGljYWxseSkgbm90IGFkZGluZyBhbnkgcHJvdG90eXBpY2FsIGZpZWxkcy4gQW55IENvcHlDb25zdHJ1Y3RvclxuICogeW91IGdpdmUgdGhpcyBtYXkgaGF2ZSBhIGBwb29sU2l6ZWAgcHJvcGVydHksIGFuZCB3aWxsIGxvb2sgZm9yIGFcbiAqIHByb3RvdHlwaWNhbCBgZGVzdHJ1Y3RvcmAgb24gaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IENvcHlDb25zdHJ1Y3RvciBDb25zdHJ1Y3RvciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcG9vbGVyIEN1c3RvbWl6YWJsZSBwb29sZXIuXG4gKi9cbmNvbnN0IGFkZFBvb2xpbmdUbyA9IGZ1bmN0aW9uIDxUPihcbiAgQ29weUNvbnN0cnVjdG9yOiBDbGFzczxUPixcbiAgcG9vbGVyOiBQb29sZXIsXG4pOiBDbGFzczxUPiAmIHtcbiAgZ2V0UG9vbGVkKFxuICAgIC4uLmFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPlxuICApOiAvKiBhcmd1bWVudHMgb2YgdGhlIGNvbnN0cnVjdG9yICovIFQsXG4gIHJlbGVhc2UoaW5zdGFuY2U6IG1peGVkKTogdm9pZCxcbiAgLi4uXG59IHtcbiAgLy8gQ2FzdGluZyBhcyBhbnkgc28gdGhhdCBmbG93IGlnbm9yZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgdHJ1c3RzXG4gIC8vIGl0IHRvIG1hdGNoIHRoZSB0eXBlIHdlIGRlY2xhcmVkXG4gIGNvbnN0IE5ld0tsYXNzOiBhbnkgPSBDb3B5Q29uc3RydWN0b3I7XG4gIE5ld0tsYXNzLmluc3RhbmNlUG9vbCA9IFtdO1xuICBOZXdLbGFzcy5nZXRQb29sZWQgPSBwb29sZXIgfHwgREVGQVVMVF9QT09MRVI7XG4gIGlmICghTmV3S2xhc3MucG9vbFNpemUpIHtcbiAgICBOZXdLbGFzcy5wb29sU2l6ZSA9IERFRkFVTFRfUE9PTF9TSVpFO1xuICB9XG4gIE5ld0tsYXNzLnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2VyO1xuICByZXR1cm4gTmV3S2xhc3M7XG59O1xuXG5jb25zdCBQb29sZWRDbGFzcyA9IHtcbiAgYWRkUG9vbGluZ1RvOiBhZGRQb29saW5nVG8sXG4gIG9uZUFyZ3VtZW50UG9vbGVyOiAob25lQXJndW1lbnRQb29sZXI6IFBvb2xlciksXG4gIHR3b0FyZ3VtZW50UG9vbGVyOiAodHdvQXJndW1lbnRQb29sZXI6IFBvb2xlciksXG4gIHRocmVlQXJndW1lbnRQb29sZXI6ICh0aHJlZUFyZ3VtZW50UG9vbGVyOiBQb29sZXIpLFxuICBmb3VyQXJndW1lbnRQb29sZXI6IChmb3VyQXJndW1lbnRQb29sZXI6IFBvb2xlciksXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xlZENsYXNzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgUG9vbGVkQ2xhc3MgZnJvbSAnLi9Qb29sZWRDbGFzcyc7XG5cbmNvbnN0IHR3b0FyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICogUG9zaXRpb24gZG9lcyBub3QgZXhwb3NlIG1ldGhvZHMgZm9yIGNvbnN0cnVjdGlvbiB2aWEgYW4gYEhUTUxET01FbGVtZW50YCxcbiAqIGJlY2F1c2UgaXQgaXNuJ3QgbWVhbmluZ2Z1bCB0byBjb25zdHJ1Y3Qgc3VjaCBhIHRoaW5nIHdpdGhvdXQgZmlyc3QgZGVmaW5pbmdcbiAqIGEgZnJhbWUgb2YgcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aW5kb3dTdGFydEtleSBLZXkgdGhhdCB3aW5kb3cgc3RhcnRzIGF0LlxuICogQHBhcmFtIHtudW1iZXJ9IHdpbmRvd0VuZEtleSBLZXkgdGhhdCB3aW5kb3cgZW5kcyBhdC5cbiAqL1xuZnVuY3Rpb24gUG9zaXRpb24obGVmdCwgdG9wKSB7XG4gIHRoaXMubGVmdCA9IGxlZnQ7XG4gIHRoaXMudG9wID0gdG9wO1xufVxuXG5Qb3NpdGlvbi5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sZWZ0ID0gbnVsbDtcbiAgdGhpcy50b3AgPSBudWxsO1xufTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFBvc2l0aW9uLCB0d29Bcmd1bWVudFBvb2xlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9zaXRpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge3R5cGVvZiBWaXJ0dWFsaXplZExpc3QgYXMgVmlydHVhbGl6ZWRMaXN0VHlwZX0gZnJvbSAnQHJlYWN0LW5hdGl2ZS92aXJ0dWFsaXplZC1saXN0cyc7XG5cbmNvbnN0IFZpcnR1YWxpemVkTGlzdDogVmlydHVhbGl6ZWRMaXN0VHlwZSA9XG4gIHJlcXVpcmUoJ0ByZWFjdC1uYXRpdmUvdmlydHVhbGl6ZWQtbGlzdHMnKS5WaXJ0dWFsaXplZExpc3Q7XG5cbmV4cG9ydCB0eXBlIHtcbiAgUmVuZGVySXRlbVByb3BzLFxuICBSZW5kZXJJdGVtVHlwZSxcbiAgU2VwYXJhdG9ycyxcbn0gZnJvbSAnQHJlYWN0LW5hdGl2ZS92aXJ0dWFsaXplZC1saXN0cyc7XG5tb2R1bGUuZXhwb3J0cyA9IFZpcnR1YWxpemVkTGlzdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7dHlwZW9mIFZpcnR1YWxpemVkU2VjdGlvbkxpc3QgYXMgVmlydHVhbGl6ZWRTZWN0aW9uTGlzdFR5cGV9IGZyb20gJ0ByZWFjdC1uYXRpdmUvdmlydHVhbGl6ZWQtbGlzdHMnO1xuXG5jb25zdCBWaXJ0dWFsaXplZFNlY3Rpb25MaXN0OiBWaXJ0dWFsaXplZFNlY3Rpb25MaXN0VHlwZSA9XG4gIHJlcXVpcmUoJ0ByZWFjdC1uYXRpdmUvdmlydHVhbGl6ZWQtbGlzdHMnKS5WaXJ0dWFsaXplZFNlY3Rpb25MaXN0O1xuXG5leHBvcnQgdHlwZSB7XG4gIFNlY3Rpb25CYXNlLFxuICBTY3JvbGxUb0xvY2F0aW9uUGFyYW1zVHlwZSxcbn0gZnJvbSAnQHJlYWN0LW5hdGl2ZS92aXJ0dWFsaXplZC1saXN0cyc7XG5tb2R1bGUuZXhwb3J0cyA9IFZpcnR1YWxpemVkU2VjdGlvbkxpc3Q7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UHJvY2Vzc2VkQ29sb3JWYWx1ZX0gZnJvbSAnLi4vU3R5bGVTaGVldC9wcm9jZXNzQ29sb3InO1xuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCBSQ1RBY3Rpb25TaGVldE1hbmFnZXIgZnJvbSAnLi9OYXRpdmVBY3Rpb25TaGVldE1hbmFnZXInO1xuXG5jb25zdCBwcm9jZXNzQ29sb3IgPSByZXF1aXJlKCcuLi9TdHlsZVNoZWV0L3Byb2Nlc3NDb2xvcicpLmRlZmF1bHQ7XG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBEaXNwbGF5IGFjdGlvbiBzaGVldHMgYW5kIHNoYXJlIHNoZWV0cyBvbiBpT1MuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWN0aW9uc2hlZXRpb3NcbiAqL1xuY29uc3QgQWN0aW9uU2hlZXRJT1MgPSB7XG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGlPUyBhY3Rpb24gc2hlZXQuXG4gICAqXG4gICAqIFRoZSBgb3B0aW9uc2Agb2JqZWN0IG11c3QgY29udGFpbiBvbmUgb3IgbW9yZSBvZjpcbiAgICpcbiAgICogLSBgb3B0aW9uc2AgKGFycmF5IG9mIHN0cmluZ3MpIC0gYSBsaXN0IG9mIGJ1dHRvbiB0aXRsZXMgKHJlcXVpcmVkKVxuICAgKiAtIGBjYW5jZWxCdXR0b25JbmRleGAgKGludCkgLSBpbmRleCBvZiBjYW5jZWwgYnV0dG9uIGluIGBvcHRpb25zYFxuICAgKiAtIGBkZXN0cnVjdGl2ZUJ1dHRvbkluZGV4YCAoaW50IG9yIGFycmF5IG9mIGludHMpIC0gaW5kZXggb3IgaW5kaWNlcyBvZiBkZXN0cnVjdGl2ZSBidXR0b25zIGluIGBvcHRpb25zYFxuICAgKiAtIGB0aXRsZWAgKHN0cmluZykgLSBhIHRpdGxlIHRvIHNob3cgYWJvdmUgdGhlIGFjdGlvbiBzaGVldFxuICAgKiAtIGBtZXNzYWdlYCAoc3RyaW5nKSAtIGEgbWVzc2FnZSB0byBzaG93IGJlbG93IHRoZSB0aXRsZVxuICAgKiAtIGBkaXNhYmxlZEJ1dHRvbkluZGljZXNgIChhcnJheSBvZiBudW1iZXJzKSAtIGEgbGlzdCBvZiBidXR0b24gaW5kaWNlcyB3aGljaCBzaG91bGQgYmUgZGlzYWJsZWRcbiAgICpcbiAgICogVGhlICdjYWxsYmFjaycgZnVuY3Rpb24gdGFrZXMgb25lIHBhcmFtZXRlciwgdGhlIHplcm8tYmFzZWQgaW5kZXhcbiAgICogb2YgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjdGlvbnNoZWV0aW9zI3Nob3dhY3Rpb25zaGVldHdpdGhvcHRpb25zXG4gICAqL1xuICBzaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICBvcHRpb25zOiB7fFxuICAgICAgK3RpdGxlPzogP3N0cmluZyxcbiAgICAgICttZXNzYWdlPzogP3N0cmluZyxcbiAgICAgICtvcHRpb25zOiBBcnJheTxzdHJpbmc+LFxuICAgICAgK2Rlc3RydWN0aXZlQnV0dG9uSW5kZXg/OiA/bnVtYmVyIHwgP0FycmF5PG51bWJlcj4sXG4gICAgICArY2FuY2VsQnV0dG9uSW5kZXg/OiA/bnVtYmVyLFxuICAgICAgK2FuY2hvcj86ID9udW1iZXIsXG4gICAgICArdGludENvbG9yPzogQ29sb3JWYWx1ZSB8IFByb2Nlc3NlZENvbG9yVmFsdWUsXG4gICAgICArY2FuY2VsQnV0dG9uVGludENvbG9yPzogQ29sb3JWYWx1ZSB8IFByb2Nlc3NlZENvbG9yVmFsdWUsXG4gICAgICArdXNlckludGVyZmFjZVN0eWxlPzogc3RyaW5nLFxuICAgICAgK2Rpc2FibGVkQnV0dG9uSW5kaWNlcz86IEFycmF5PG51bWJlcj4sXG4gICAgfH0sXG4gICAgY2FsbGJhY2s6IChidXR0b25JbmRleDogbnVtYmVyKSA9PiB2b2lkLFxuICApIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCxcbiAgICAgICdPcHRpb25zIG11c3QgYmUgYSB2YWxpZCBvYmplY3QnLFxuICAgICk7XG4gICAgaW52YXJpYW50KHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJywgJ011c3QgcHJvdmlkZSBhIHZhbGlkIGNhbGxiYWNrJyk7XG4gICAgaW52YXJpYW50KFJDVEFjdGlvblNoZWV0TWFuYWdlciwgXCJBY3Rpb25TaGVldE1hbmFnZXIgZG9lc24ndCBleGlzdFwiKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHRpbnRDb2xvcixcbiAgICAgIGNhbmNlbEJ1dHRvblRpbnRDb2xvcixcbiAgICAgIGRlc3RydWN0aXZlQnV0dG9uSW5kZXgsXG4gICAgICAuLi5yZW1haW5pbmdPcHRpb25zXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgbGV0IGRlc3RydWN0aXZlQnV0dG9uSW5kaWNlcyA9IG51bGw7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZXN0cnVjdGl2ZUJ1dHRvbkluZGV4KSkge1xuICAgICAgZGVzdHJ1Y3RpdmVCdXR0b25JbmRpY2VzID0gZGVzdHJ1Y3RpdmVCdXR0b25JbmRleDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cnVjdGl2ZUJ1dHRvbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgZGVzdHJ1Y3RpdmVCdXR0b25JbmRpY2VzID0gW2Rlc3RydWN0aXZlQnV0dG9uSW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2Nlc3NlZFRpbnRDb2xvciA9IHByb2Nlc3NDb2xvcih0aW50Q29sb3IpO1xuICAgIGNvbnN0IHByb2Nlc3NlZENhbmNlbEJ1dHRvblRpbnRDb2xvciA9IHByb2Nlc3NDb2xvcihjYW5jZWxCdXR0b25UaW50Q29sb3IpO1xuICAgIGludmFyaWFudChcbiAgICAgIHByb2Nlc3NlZFRpbnRDb2xvciA9PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzZWRUaW50Q29sb3IgPT09ICdudW1iZXInLFxuICAgICAgJ1VuZXhwZWN0ZWQgY29sb3IgZ2l2ZW4gZm9yIEFjdGlvblNoZWV0SU9TLnNob3dBY3Rpb25TaGVldFdpdGhPcHRpb25zIHRpbnRDb2xvcicsXG4gICAgKTtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBwcm9jZXNzZWRDYW5jZWxCdXR0b25UaW50Q29sb3IgPT0gbnVsbCB8fFxuICAgICAgICB0eXBlb2YgcHJvY2Vzc2VkQ2FuY2VsQnV0dG9uVGludENvbG9yID09PSAnbnVtYmVyJyxcbiAgICAgICdVbmV4cGVjdGVkIGNvbG9yIGdpdmVuIGZvciBBY3Rpb25TaGVldElPUy5zaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9ucyBjYW5jZWxCdXR0b25UaW50Q29sb3InLFxuICAgICk7XG4gICAgUkNUQWN0aW9uU2hlZXRNYW5hZ2VyLnNob3dBY3Rpb25TaGVldFdpdGhPcHRpb25zKFxuICAgICAge1xuICAgICAgICAuLi5yZW1haW5pbmdPcHRpb25zLFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgICAgICB0aW50Q29sb3I6IHByb2Nlc3NlZFRpbnRDb2xvcixcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgICAgY2FuY2VsQnV0dG9uVGludENvbG9yOiBwcm9jZXNzZWRDYW5jZWxCdXR0b25UaW50Q29sb3IsXG4gICAgICAgIGRlc3RydWN0aXZlQnV0dG9uSW5kaWNlcyxcbiAgICAgIH0sXG4gICAgICBjYWxsYmFjayxcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBpT1Mgc2hhcmUgc2hlZXQuIFRoZSBgb3B0aW9uc2Agb2JqZWN0IHNob3VsZCBjb250YWluXG4gICAqIG9uZSBvciBib3RoIG9mIGBtZXNzYWdlYCBhbmQgYHVybGAgYW5kIGNhbiBhZGRpdGlvbmFsbHkgaGF2ZVxuICAgKiBhIGBzdWJqZWN0YCBvciBgZXhjbHVkZWRBY3Rpdml0eVR5cGVzYDpcbiAgICpcbiAgICogLSBgdXJsYCAoc3RyaW5nKSAtIGEgVVJMIHRvIHNoYXJlXG4gICAqIC0gYG1lc3NhZ2VgIChzdHJpbmcpIC0gYSBtZXNzYWdlIHRvIHNoYXJlXG4gICAqIC0gYHN1YmplY3RgIChzdHJpbmcpIC0gYSBzdWJqZWN0IGZvciB0aGUgbWVzc2FnZVxuICAgKiAtIGBleGNsdWRlZEFjdGl2aXR5VHlwZXNgIChhcnJheSkgLSB0aGUgYWN0aXZpdGllcyB0byBleGNsdWRlIGZyb21cbiAgICogICB0aGUgQWN0aW9uU2hlZXRcbiAgICogLSBgdGludENvbG9yYCAoY29sb3IpIC0gdGludCBjb2xvciBvZiB0aGUgYnV0dG9uc1xuICAgKlxuICAgKiBUaGUgJ2ZhaWx1cmVDYWxsYmFjaycgZnVuY3Rpb24gdGFrZXMgb25lIHBhcmFtZXRlciwgYW4gZXJyb3Igb2JqZWN0LlxuICAgKiBUaGUgb25seSBwcm9wZXJ0eSBkZWZpbmVkIG9uIHRoaXMgb2JqZWN0IGlzIGFuIG9wdGlvbmFsIGBzdGFja2AgcHJvcGVydHlcbiAgICogb2YgdHlwZSBgc3RyaW5nYC5cbiAgICpcbiAgICogVGhlICdzdWNjZXNzQ2FsbGJhY2snIGZ1bmN0aW9uIHRha2VzIHR3byBwYXJhbWV0ZXJzOlxuICAgKlxuICAgKiAtIGEgYm9vbGVhbiB2YWx1ZSBzaWduaWZ5aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZVxuICAgKiAtIGEgc3RyaW5nIHRoYXQsIGluIHRoZSBjYXNlIG9mIHN1Y2Nlc3MsIGluZGljYXRlcyB0aGUgbWV0aG9kIG9mIHNoYXJpbmdcbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWN0aW9uc2hlZXRpb3Mjc2hvd3NoYXJlYWN0aW9uc2hlZXR3aXRob3B0aW9uc1xuICAgKi9cbiAgc2hvd1NoYXJlQWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICBvcHRpb25zOiBPYmplY3QsXG4gICAgZmFpbHVyZUNhbGxiYWNrOiBGdW5jdGlvbixcbiAgICBzdWNjZXNzQ2FsbGJhY2s6IEZ1bmN0aW9uLFxuICApIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCxcbiAgICAgICdPcHRpb25zIG11c3QgYmUgYSB2YWxpZCBvYmplY3QnLFxuICAgICk7XG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZW9mIGZhaWx1cmVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNdXN0IHByb3ZpZGUgYSB2YWxpZCBmYWlsdXJlQ2FsbGJhY2snLFxuICAgICk7XG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHN1Y2Nlc3NDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNdXN0IHByb3ZpZGUgYSB2YWxpZCBzdWNjZXNzQ2FsbGJhY2snLFxuICAgICk7XG4gICAgaW52YXJpYW50KFJDVEFjdGlvblNoZWV0TWFuYWdlciwgXCJBY3Rpb25TaGVldE1hbmFnZXIgZG9lc24ndCBleGlzdFwiKTtcbiAgICBSQ1RBY3Rpb25TaGVldE1hbmFnZXIuc2hvd1NoYXJlQWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICAgIHsuLi5vcHRpb25zLCB0aW50Q29sb3I6IHByb2Nlc3NDb2xvcihvcHRpb25zLnRpbnRDb2xvcil9LFxuICAgICAgZmFpbHVyZUNhbGxiYWNrLFxuICAgICAgc3VjY2Vzc0NhbGxiYWNrLFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgbW9zdCB1cHBlciBpT1MgYWN0aW9uIHNoZWV0IHByZXNlbnRlZCwgaWYgbm8gYWN0aW9uIHNoZWV0IGlzXG4gICAqIHByZXNlbnQgYSB3YXJuaW5nIGlzIGRpc3BsYXllZC5cbiAgICovXG4gIGRpc21pc3NBY3Rpb25TaGVldDogKCkgPT4ge1xuICAgIGludmFyaWFudChSQ1RBY3Rpb25TaGVldE1hbmFnZXIsIFwiQWN0aW9uU2hlZXRNYW5hZ2VyIGRvZXNuJ3QgZXhpc3RcIik7XG4gICAgaWYgKHR5cGVvZiBSQ1RBY3Rpb25TaGVldE1hbmFnZXIuZGlzbWlzc0FjdGlvblNoZWV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBSQ1RBY3Rpb25TaGVldE1hbmFnZXIuZGlzbWlzc0FjdGlvblNoZWV0KCk7XG4gICAgfVxuICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBY3Rpb25TaGVldElPUztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZUFjdGlvblNoZWV0TWFuYWdlcic7XG5pbXBvcnQgTmF0aXZlQWN0aW9uU2hlZXRNYW5hZ2VyIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQWN0aW9uU2hlZXRNYW5hZ2VyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZUFjdGlvblNoZWV0TWFuYWdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8fH07XG4gICtzaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9uczogKFxuICAgIG9wdGlvbnM6IHt8XG4gICAgICArdGl0bGU/OiA/c3RyaW5nLFxuICAgICAgK21lc3NhZ2U/OiA/c3RyaW5nLFxuICAgICAgK29wdGlvbnM6ID9BcnJheTxzdHJpbmc+LFxuICAgICAgK2Rlc3RydWN0aXZlQnV0dG9uSW5kaWNlcz86ID9BcnJheTxudW1iZXI+LFxuICAgICAgK2NhbmNlbEJ1dHRvbkluZGV4PzogP251bWJlcixcbiAgICAgICthbmNob3I/OiA/bnVtYmVyLFxuICAgICAgK3RpbnRDb2xvcj86ID9udW1iZXIsXG4gICAgICArY2FuY2VsQnV0dG9uVGludENvbG9yPzogP251bWJlcixcbiAgICAgICt1c2VySW50ZXJmYWNlU3R5bGU/OiA/c3RyaW5nLFxuICAgICAgK2Rpc2FibGVkQnV0dG9uSW5kaWNlcz86IEFycmF5PG51bWJlcj4sXG4gICAgfH0sXG4gICAgY2FsbGJhY2s6IChidXR0b25JbmRleDogbnVtYmVyKSA9PiB2b2lkLFxuICApID0+IHZvaWQ7XG4gICtzaG93U2hhcmVBY3Rpb25TaGVldFdpdGhPcHRpb25zOiAoXG4gICAgb3B0aW9uczoge3xcbiAgICAgICttZXNzYWdlPzogP3N0cmluZyxcbiAgICAgICt1cmw/OiA/c3RyaW5nLFxuICAgICAgK3N1YmplY3Q/OiA/c3RyaW5nLFxuICAgICAgK2FuY2hvcj86ID9udW1iZXIsXG4gICAgICArdGludENvbG9yPzogP251bWJlcixcbiAgICAgICtjYW5jZWxCdXR0b25UaW50Q29sb3I/OiA/bnVtYmVyLFxuICAgICAgK2V4Y2x1ZGVkQWN0aXZpdHlUeXBlcz86ID9BcnJheTxzdHJpbmc+LFxuICAgICAgK3VzZXJJbnRlcmZhY2VTdHlsZT86ID9zdHJpbmcsXG4gICAgfH0sXG4gICAgZmFpbHVyZUNhbGxiYWNrOiAoZXJyb3I6IHt8XG4gICAgICArZG9tYWluOiBzdHJpbmcsXG4gICAgICArY29kZTogc3RyaW5nLFxuICAgICAgK3VzZXJJbmZvPzogP09iamVjdCxcbiAgICAgICttZXNzYWdlOiBzdHJpbmcsXG4gICAgfH0pID0+IHZvaWQsXG4gICAgc3VjY2Vzc0NhbGxiYWNrOiAoY29tcGxldGVkOiBib29sZWFuLCBhY3Rpdml0eVR5cGU6ID9zdHJpbmcpID0+IHZvaWQsXG4gICkgPT4gdm9pZDtcbiAgK2Rpc21pc3NBY3Rpb25TaGVldD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPignQWN0aW9uU2hlZXRNYW5hZ2VyJyk6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgTmF0aXZlQ2xpcGJvYXJkIGZyb20gJy4vTmF0aXZlQ2xpcGJvYXJkJztcblxuLyoqXG4gKiBgQ2xpcGJvYXJkYCBnaXZlcyB5b3UgYW4gaW50ZXJmYWNlIGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIGNvbnRlbnQgZnJvbSBDbGlwYm9hcmQgb24gYm90aCBpT1MgYW5kIEFuZHJvaWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBHZXQgY29udGVudCBvZiBzdHJpbmcgdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIGBQcm9taXNlYCwgc28geW91IGNhbiB1c2UgZm9sbG93aW5nIGNvZGUgdG8gZ2V0IGNsaXBib2FyZCBjb250ZW50XG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogYXN5bmMgX2dldENvbnRlbnQoKSB7XG4gICAqICAgdmFyIGNvbnRlbnQgPSBhd2FpdCBDbGlwYm9hcmQuZ2V0U3RyaW5nKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBnZXRTdHJpbmcoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gTmF0aXZlQ2xpcGJvYXJkLmdldFN0cmluZygpO1xuICB9LFxuICAvKipcbiAgICogU2V0IGNvbnRlbnQgb2Ygc3RyaW5nIHR5cGUuIFlvdSBjYW4gdXNlIGZvbGxvd2luZyBjb2RlIHRvIHNldCBjbGlwYm9hcmQgY29udGVudFxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIF9zZXRDb250ZW50KCkge1xuICAgKiAgIENsaXBib2FyZC5zZXRTdHJpbmcoJ2hlbGxvIHdvcmxkJyk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHRoZSBjb250ZW50IHRvIGJlIHN0b3JlZCBpbiB0aGUgY2xpcGJvYXJkLlxuICAgKi9cbiAgc2V0U3RyaW5nKGNvbnRlbnQ6IHN0cmluZykge1xuICAgIE5hdGl2ZUNsaXBib2FyZC5zZXRTdHJpbmcoY29udGVudCk7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlQ2xpcGJvYXJkJztcbmltcG9ydCBOYXRpdmVDbGlwYm9hcmQgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVDbGlwYm9hcmQnO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlQ2xpcGJvYXJkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8fH07XG4gICtnZXRTdHJpbmc6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgK3NldFN0cmluZzogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0RW5mb3JjaW5nPFNwZWM+KCdDbGlwYm9hcmQnKTogU3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IE5hdGl2ZURldmljZUluZm8gZnJvbSAnLi9OYXRpdmVEZXZpY2VJbmZvJztcblxubW9kdWxlLmV4cG9ydHMgPSBOYXRpdmVEZXZpY2VJbmZvO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAnLi4vVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5jb25zdCBJbnRlcmFjdGlvbk1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpO1xuY29uc3QgVG91Y2hIaXN0b3J5TWF0aCA9IHJlcXVpcmUoJy4vVG91Y2hIaXN0b3J5TWF0aCcpO1xuXG5jb25zdCBjdXJyZW50Q2VudHJvaWRYT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyID1cbiAgVG91Y2hIaXN0b3J5TWF0aC5jdXJyZW50Q2VudHJvaWRYT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyO1xuY29uc3QgY3VycmVudENlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlciA9XG4gIFRvdWNoSGlzdG9yeU1hdGguY3VycmVudENlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlcjtcbmNvbnN0IHByZXZpb3VzQ2VudHJvaWRYT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyID1cbiAgVG91Y2hIaXN0b3J5TWF0aC5wcmV2aW91c0NlbnRyb2lkWE9mVG91Y2hlc0NoYW5nZWRBZnRlcjtcbmNvbnN0IHByZXZpb3VzQ2VudHJvaWRZT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyID1cbiAgVG91Y2hIaXN0b3J5TWF0aC5wcmV2aW91c0NlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlcjtcbmNvbnN0IGN1cnJlbnRDZW50cm9pZFggPSBUb3VjaEhpc3RvcnlNYXRoLmN1cnJlbnRDZW50cm9pZFg7XG5jb25zdCBjdXJyZW50Q2VudHJvaWRZID0gVG91Y2hIaXN0b3J5TWF0aC5jdXJyZW50Q2VudHJvaWRZO1xuXG4vKipcbiAqIGBQYW5SZXNwb25kZXJgIHJlY29uY2lsZXMgc2V2ZXJhbCB0b3VjaGVzIGludG8gYSBzaW5nbGUgZ2VzdHVyZS4gSXQgbWFrZXNcbiAqIHNpbmdsZS10b3VjaCBnZXN0dXJlcyByZXNpbGllbnQgdG8gZXh0cmEgdG91Y2hlcywgYW5kIGNhbiBiZSB1c2VkIHRvXG4gKiByZWNvZ25pemUgc2ltcGxlIG11bHRpLXRvdWNoIGdlc3R1cmVzLlxuICpcbiAqIEJ5IGRlZmF1bHQsIGBQYW5SZXNwb25kZXJgIGhvbGRzIGFuIGBJbnRlcmFjdGlvbk1hbmFnZXJgIGhhbmRsZSB0byBibG9ja1xuICogbG9uZy1ydW5uaW5nIEpTIGV2ZW50cyBmcm9tIGludGVycnVwdGluZyBhY3RpdmUgZ2VzdHVyZXMuXG4gKlxuICogSXQgcHJvdmlkZXMgYSBwcmVkaWN0YWJsZSB3cmFwcGVyIG9mIHRoZSByZXNwb25kZXIgaGFuZGxlcnMgcHJvdmlkZWQgYnkgdGhlXG4gKiBbZ2VzdHVyZSByZXNwb25kZXIgc3lzdGVtXShkb2NzL2dlc3R1cmUtcmVzcG9uZGVyLXN5c3RlbS5odG1sKS5cbiAqIEZvciBlYWNoIGhhbmRsZXIsIGl0IHByb3ZpZGVzIGEgbmV3IGBnZXN0dXJlU3RhdGVgIG9iamVjdCBhbG9uZ3NpZGUgdGhlXG4gKiBuYXRpdmUgZXZlbnQgb2JqZWN0OlxuICpcbiAqIGBgYFxuICogb25QYW5SZXNwb25kZXJNb3ZlOiAoZXZlbnQsIGdlc3R1cmVTdGF0ZSkgPT4ge31cbiAqIGBgYFxuICpcbiAqIEEgbmF0aXZlIGV2ZW50IGlzIGEgc3ludGhldGljIHRvdWNoIGV2ZW50IHdpdGggdGhlIGZvbGxvd2luZyBmb3JtOlxuICpcbiAqICAtIGBuYXRpdmVFdmVudGBcbiAqICAgICAgKyBgY2hhbmdlZFRvdWNoZXNgIC0gQXJyYXkgb2YgYWxsIHRvdWNoIGV2ZW50cyB0aGF0IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBldmVudFxuICogICAgICArIGBpZGVudGlmaWVyYCAtIFRoZSBJRCBvZiB0aGUgdG91Y2hcbiAqICAgICAgKyBgbG9jYXRpb25YYCAtIFRoZSBYIHBvc2l0aW9uIG9mIHRoZSB0b3VjaCwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnRcbiAqICAgICAgKyBgbG9jYXRpb25ZYCAtIFRoZSBZIHBvc2l0aW9uIG9mIHRoZSB0b3VjaCwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnRcbiAqICAgICAgKyBgcGFnZVhgIC0gVGhlIFggcG9zaXRpb24gb2YgdGhlIHRvdWNoLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBlbGVtZW50XG4gKiAgICAgICsgYHBhZ2VZYCAtIFRoZSBZIHBvc2l0aW9uIG9mIHRoZSB0b3VjaCwgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZWxlbWVudFxuICogICAgICArIGB0YXJnZXRgIC0gVGhlIG5vZGUgaWQgb2YgdGhlIGVsZW1lbnQgcmVjZWl2aW5nIHRoZSB0b3VjaCBldmVudFxuICogICAgICArIGB0aW1lc3RhbXBgIC0gQSB0aW1lIGlkZW50aWZpZXIgZm9yIHRoZSB0b3VjaCwgdXNlZnVsIGZvciB2ZWxvY2l0eSBjYWxjdWxhdGlvblxuICogICAgICArIGB0b3VjaGVzYCAtIEFycmF5IG9mIGFsbCBjdXJyZW50IHRvdWNoZXMgb24gdGhlIHNjcmVlblxuICpcbiAqIEEgYGdlc3R1cmVTdGF0ZWAgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nOlxuICpcbiAqICAtIGBzdGF0ZUlEYCAtIElEIG9mIHRoZSBnZXN0dXJlU3RhdGUtIHBlcnNpc3RlZCBhcyBsb25nIGFzIHRoZXJlIGF0IGxlYXN0XG4gKiAgICAgb25lIHRvdWNoIG9uIHNjcmVlblxuICogIC0gYG1vdmVYYCAtIHRoZSBsYXRlc3Qgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSByZWNlbnRseS1tb3ZlZCB0b3VjaFxuICogIC0gYG1vdmVZYCAtIHRoZSBsYXRlc3Qgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSByZWNlbnRseS1tb3ZlZCB0b3VjaFxuICogIC0gYHgwYCAtIHRoZSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIHJlc3BvbmRlciBncmFudFxuICogIC0gYHkwYCAtIHRoZSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIHJlc3BvbmRlciBncmFudFxuICogIC0gYGR4YCAtIGFjY3VtdWxhdGVkIGRpc3RhbmNlIG9mIHRoZSBnZXN0dXJlIHNpbmNlIHRoZSB0b3VjaCBzdGFydGVkXG4gKiAgLSBgZHlgIC0gYWNjdW11bGF0ZWQgZGlzdGFuY2Ugb2YgdGhlIGdlc3R1cmUgc2luY2UgdGhlIHRvdWNoIHN0YXJ0ZWRcbiAqICAtIGB2eGAgLSBjdXJyZW50IHZlbG9jaXR5IG9mIHRoZSBnZXN0dXJlXG4gKiAgLSBgdnlgIC0gY3VycmVudCB2ZWxvY2l0eSBvZiB0aGUgZ2VzdHVyZVxuICogIC0gYG51bWJlckFjdGl2ZVRvdWNoZXNgIC0gTnVtYmVyIG9mIHRvdWNoZXMgY3VycmVudGx5IG9uIHNjcmVlblxuICpcbiAqICMjIyBCYXNpYyBVc2FnZVxuICpcbiAqIGBgYFxuICogICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uKCkge1xuICogICAgIHRoaXMuX3BhblJlc3BvbmRlciA9IFBhblJlc3BvbmRlci5jcmVhdGUoe1xuICogICAgICAgLy8gQXNrIHRvIGJlIHRoZSByZXNwb25kZXI6XG4gKiAgICAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoZXZ0LCBnZXN0dXJlU3RhdGUpID0+IHRydWUsXG4gKiAgICAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyQ2FwdHVyZTogKGV2dCwgZ2VzdHVyZVN0YXRlKSA9PiB0cnVlLFxuICogICAgICAgb25Nb3ZlU2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoZXZ0LCBnZXN0dXJlU3RhdGUpID0+IHRydWUsXG4gKiAgICAgICBvbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXJDYXB0dXJlOiAoZXZ0LCBnZXN0dXJlU3RhdGUpID0+IHRydWUsXG4gKlxuICogICAgICAgb25QYW5SZXNwb25kZXJHcmFudDogKGV2dCwgZ2VzdHVyZVN0YXRlKSA9PiB7XG4gKiAgICAgICAgIC8vIFRoZSBnZXN0dXJlIGhhcyBzdGFydGVkLiBTaG93IHZpc3VhbCBmZWVkYmFjayBzbyB0aGUgdXNlciBrbm93c1xuICogICAgICAgICAvLyB3aGF0IGlzIGhhcHBlbmluZyFcbiAqXG4gKiAgICAgICAgIC8vIGdlc3R1cmVTdGF0ZS5ke3gseX0gd2lsbCBiZSBzZXQgdG8gemVybyBub3dcbiAqICAgICAgIH0sXG4gKiAgICAgICBvblBhblJlc3BvbmRlck1vdmU6IChldnQsIGdlc3R1cmVTdGF0ZSkgPT4ge1xuICogICAgICAgICAvLyBUaGUgbW9zdCByZWNlbnQgbW92ZSBkaXN0YW5jZSBpcyBnZXN0dXJlU3RhdGUubW92ZXtYLFl9XG4gKlxuICogICAgICAgICAvLyBUaGUgYWNjdW11bGF0ZWQgZ2VzdHVyZSBkaXN0YW5jZSBzaW5jZSBiZWNvbWluZyByZXNwb25kZXIgaXNcbiAqICAgICAgICAgLy8gZ2VzdHVyZVN0YXRlLmR7eCx5fVxuICogICAgICAgfSxcbiAqICAgICAgIG9uUGFuUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0OiAoZXZ0LCBnZXN0dXJlU3RhdGUpID0+IHRydWUsXG4gKiAgICAgICBvblBhblJlc3BvbmRlclJlbGVhc2U6IChldnQsIGdlc3R1cmVTdGF0ZSkgPT4ge1xuICogICAgICAgICAvLyBUaGUgdXNlciBoYXMgcmVsZWFzZWQgYWxsIHRvdWNoZXMgd2hpbGUgdGhpcyB2aWV3IGlzIHRoZVxuICogICAgICAgICAvLyByZXNwb25kZXIuIFRoaXMgdHlwaWNhbGx5IG1lYW5zIGEgZ2VzdHVyZSBoYXMgc3VjY2VlZGVkXG4gKiAgICAgICB9LFxuICogICAgICAgb25QYW5SZXNwb25kZXJUZXJtaW5hdGU6IChldnQsIGdlc3R1cmVTdGF0ZSkgPT4ge1xuICogICAgICAgICAvLyBBbm90aGVyIGNvbXBvbmVudCBoYXMgYmVjb21lIHRoZSByZXNwb25kZXIsIHNvIHRoaXMgZ2VzdHVyZVxuICogICAgICAgICAvLyBzaG91bGQgYmUgY2FuY2VsbGVkXG4gKiAgICAgICB9LFxuICogICAgICAgb25TaG91bGRCbG9ja05hdGl2ZVJlc3BvbmRlcjogKGV2dCwgZ2VzdHVyZVN0YXRlKSA9PiB7XG4gKiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGlzIGNvbXBvbmVudCBzaG91bGQgYmxvY2sgbmF0aXZlIGNvbXBvbmVudHMgZnJvbSBiZWNvbWluZyB0aGUgSlNcbiAqICAgICAgICAgLy8gcmVzcG9uZGVyLiBSZXR1cm5zIHRydWUgYnkgZGVmYXVsdC4gSXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIG9uIGFuZHJvaWQuXG4gKiAgICAgICAgIHJldHVybiB0cnVlO1xuICogICAgICAgfSxcbiAqICAgICB9KTtcbiAqICAgfSxcbiAqXG4gKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gKiAgICAgcmV0dXJuIChcbiAqICAgICAgIDxWaWV3IHsuLi50aGlzLl9wYW5SZXNwb25kZXIucGFuSGFuZGxlcnN9IC8+XG4gKiAgICAgKTtcbiAqICAgfSxcbiAqXG4gKiBgYGBcbiAqXG4gKiAjIyMgV29ya2luZyBFeGFtcGxlXG4gKlxuICogVG8gc2VlIGl0IGluIGFjdGlvbiwgdHJ5IHRoZVxuICogW1BhblJlc3BvbmRlciBleGFtcGxlIGluIFJOVGVzdGVyXShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2Jsb2IvSEVBRC9wYWNrYWdlcy9ybi10ZXN0ZXIvanMvZXhhbXBsZXMvUGFuUmVzcG9uZGVyL1BhblJlc3BvbmRlckV4YW1wbGUuanMpXG4gKi9cblxuZXhwb3J0IHR5cGUgR2VzdHVyZVN0YXRlID0ge3xcbiAgLyoqXG4gICAqIElEIG9mIHRoZSBnZXN0dXJlU3RhdGUgLSBwZXJzaXN0ZWQgYXMgbG9uZyBhcyB0aGVyZSBhdCBsZWFzdCBvbmUgdG91Y2ggb24gc2NyZWVuXG4gICAqL1xuICBzdGF0ZUlEOiBudW1iZXIsXG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3Qgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSByZWNlbnRseS1tb3ZlZCB0b3VjaFxuICAgKi9cbiAgbW92ZVg6IG51bWJlcixcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIHJlY2VudGx5LW1vdmVkIHRvdWNoXG4gICAqL1xuICBtb3ZlWTogbnVtYmVyLFxuXG4gIC8qKlxuICAgKiBUaGUgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSByZXNwb25kZXIgZ3JhbnRcbiAgICovXG4gIHgwOiBudW1iZXIsXG5cbiAgLyoqXG4gICAqIFRoZSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIHJlc3BvbmRlciBncmFudFxuICAgKi9cbiAgeTA6IG51bWJlcixcblxuICAvKipcbiAgICogQWNjdW11bGF0ZWQgZGlzdGFuY2Ugb2YgdGhlIGdlc3R1cmUgc2luY2UgdGhlIHRvdWNoIHN0YXJ0ZWRcbiAgICovXG4gIGR4OiBudW1iZXIsXG5cbiAgLyoqXG4gICAqIEFjY3VtdWxhdGVkIGRpc3RhbmNlIG9mIHRoZSBnZXN0dXJlIHNpbmNlIHRoZSB0b3VjaCBzdGFydGVkXG4gICAqL1xuICBkeTogbnVtYmVyLFxuXG4gIC8qKlxuICAgKiBDdXJyZW50IHZlbG9jaXR5IG9mIHRoZSBnZXN0dXJlXG4gICAqL1xuICB2eDogbnVtYmVyLFxuXG4gIC8qKlxuICAgKiBDdXJyZW50IHZlbG9jaXR5IG9mIHRoZSBnZXN0dXJlXG4gICAqL1xuICB2eTogbnVtYmVyLFxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdG91Y2hlcyBjdXJyZW50bHkgb24gc2NyZWVuXG4gICAqL1xuICBudW1iZXJBY3RpdmVUb3VjaGVzOiBudW1iZXIsXG5cbiAgLyoqXG4gICAqIEFsbCBgZ2VzdHVyZVN0YXRlYCBhY2NvdW50cyBmb3IgdGltZVN0YW1wcyB1cCB1bnRpbCB0aGlzIHZhbHVlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWNjb3VudHNGb3JNb3Zlc1VwVG86IG51bWJlcixcbnx9O1xuXG50eXBlIEFjdGl2ZUNhbGxiYWNrID0gKFxuICBldmVudDogUHJlc3NFdmVudCxcbiAgZ2VzdHVyZVN0YXRlOiBHZXN0dXJlU3RhdGUsXG4pID0+IGJvb2xlYW47XG5cbnR5cGUgUGFzc2l2ZUNhbGxiYWNrID0gKGV2ZW50OiBQcmVzc0V2ZW50LCBnZXN0dXJlU3RhdGU6IEdlc3R1cmVTdGF0ZSkgPT4gbWl4ZWQ7XG5cbmV4cG9ydCB0eXBlIFBhbkhhbmRsZXJzID0ge3xcbiAgb25Nb3ZlU2hvdWxkU2V0UmVzcG9uZGVyOiAoZXZlbnQ6IFByZXNzRXZlbnQpID0+IGJvb2xlYW4sXG4gIG9uTW92ZVNob3VsZFNldFJlc3BvbmRlckNhcHR1cmU6IChldmVudDogUHJlc3NFdmVudCkgPT4gYm9vbGVhbixcbiAgb25SZXNwb25kZXJFbmQ6IChldmVudDogUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgb25SZXNwb25kZXJHcmFudDogKGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBib29sZWFuLFxuICBvblJlc3BvbmRlck1vdmU6IChldmVudDogUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgb25SZXNwb25kZXJSZWplY3Q6IChldmVudDogUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgb25SZXNwb25kZXJSZWxlYXNlOiAoZXZlbnQ6IFByZXNzRXZlbnQpID0+IHZvaWQsXG4gIG9uUmVzcG9uZGVyU3RhcnQ6IChldmVudDogUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgb25SZXNwb25kZXJUZXJtaW5hdGU6IChldmVudDogUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgb25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3Q6IChldmVudDogUHJlc3NFdmVudCkgPT4gYm9vbGVhbixcbiAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlcjogKGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBib29sZWFuLFxuICBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZTogKGV2ZW50OiBQcmVzc0V2ZW50KSA9PiBib29sZWFuLFxufH07XG5cbnR5cGUgUGFuUmVzcG9uZGVyQ29uZmlnID0gJFJlYWRPbmx5PHt8XG4gIG9uTW92ZVNob3VsZFNldFBhblJlc3BvbmRlcj86ID9BY3RpdmVDYWxsYmFjayxcbiAgb25Nb3ZlU2hvdWxkU2V0UGFuUmVzcG9uZGVyQ2FwdHVyZT86ID9BY3RpdmVDYWxsYmFjayxcbiAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcj86ID9BY3RpdmVDYWxsYmFjayxcbiAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlckNhcHR1cmU/OiA/QWN0aXZlQ2FsbGJhY2ssXG4gIC8qKlxuICAgKiBUaGUgYm9keSBvZiBgb25SZXNwb25kZXJHcmFudGAgcmV0dXJucyBhIGJvb2wsIGJ1dCB0aGUgdmFzdCBtYWpvcml0eSBvZlxuICAgKiBjYWxsc2l0ZXMgcmV0dXJuIHZvaWQgYW5kIHRoaXMgVE9ETyBub3RpY2UgaXMgZm91bmQgaW4gaXQ6XG4gICAqICAgVE9ETzogdDc0NjcxMjQgaW52ZXN0aWdhdGUgaWYgdGhpcyBjYW4gYmUgcmVtb3ZlZFxuICAgKi9cbiAgb25QYW5SZXNwb25kZXJHcmFudD86ID8oUGFzc2l2ZUNhbGxiYWNrIHwgQWN0aXZlQ2FsbGJhY2spLFxuICBvblBhblJlc3BvbmRlclJlamVjdD86ID9QYXNzaXZlQ2FsbGJhY2ssXG4gIG9uUGFuUmVzcG9uZGVyU3RhcnQ/OiA/UGFzc2l2ZUNhbGxiYWNrLFxuICBvblBhblJlc3BvbmRlckVuZD86ID9QYXNzaXZlQ2FsbGJhY2ssXG4gIG9uUGFuUmVzcG9uZGVyUmVsZWFzZT86ID9QYXNzaXZlQ2FsbGJhY2ssXG4gIG9uUGFuUmVzcG9uZGVyTW92ZT86ID9QYXNzaXZlQ2FsbGJhY2ssXG4gIG9uUGFuUmVzcG9uZGVyVGVybWluYXRlPzogP1Bhc3NpdmVDYWxsYmFjayxcbiAgb25QYW5SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3Q/OiA/QWN0aXZlQ2FsbGJhY2ssXG4gIG9uU2hvdWxkQmxvY2tOYXRpdmVSZXNwb25kZXI/OiA/QWN0aXZlQ2FsbGJhY2ssXG58fT47XG5cbmNvbnN0IFBhblJlc3BvbmRlciA9IHtcbiAgLyoqXG4gICAqXG4gICAqIEEgZ3JhcGhpY2FsIGV4cGxhbmF0aW9uIG9mIHRoZSB0b3VjaCBkYXRhIGZsb3c6XG4gICAqXG4gICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqIHwgUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUgfCAgICAgICAgICAgICB8VG91Y2hIaXN0b3J5TWF0aCAgICAgICAgICAgICAgICB8XG4gICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqIHxHbG9iYWwgc3RvcmUgb2YgdG91Y2hIaXN0b3J5fCAgICAgICAgICAgICB8QWxsb2NhdGlvbi1sZXNzIG1hdGggdXRpbCAgICAgICB8XG4gICAqIHxpbmNsdWRpbmcgYWN0aXZlbmVzcywgc3RhcnQgfCAgICAgICAgICAgICB8b24gdG91Y2ggaGlzdG9yeSAoY2VudHJvaWRzICAgICB8XG4gICAqIHxwb3NpdGlvbiwgcHJldi9jdXIgcG9zaXRpb24ufCAgICAgICAgICAgICB8YW5kIG11bHRpdG91Y2ggbW92ZW1lbnQgZXRjKSAgICB8XG4gICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAqICstLS0tXi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLV4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogICAgICB8IChyZWNvcmRzIHJlbGV2YW50IGhpc3RvcnkgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgIHwgIG9mIHRvdWNoZXMgcmVsZXZhbnQgZm9yICAgICAgICAgICAgICAgICB8XG4gICAqICAgICAgfCAgaW1wbGVtZW50aW5nIGhpZ2hlciBsZXZlbCAgICAgICAgICAgICAgIHxcbiAgICogICAgICB8ICBnZXN0dXJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAqICstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqIHwgUmVzcG9uZGVyRXZlbnRQbHVnaW4gICAgICAgfCAgICAgICAgICAgICB8ICAgIHwgICBZb3VyIEFwcC9Db21wb25lbnQgICAgICB8XG4gICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqIHxOZWdvdGlhdGVzIHdoaWNoIHZpZXcgZ2V0cyAgfCBMb3cgbGV2ZWwgICB8ICAgIHwgICAgICAgICAgICAgSGlnaCBsZXZlbCAgICB8XG4gICAqIHxvblJlc3BvbmRlck1vdmUgZXZlbnRzLiAgICAgfCBldmVudHMgdy8gICB8ICArLSstLS0tLS0tKyAgICAgZXZlbnRzIHcvICAgICB8XG4gICAqIHxBbHNvIHJlY29yZHMgaGlzdG9yeSBpbnRvICAgfCB0b3VjaEhpc3Rvcnl8ICB8ICAgUGFuICAgfCAgICAgbXVsdGl0b3VjaCArICB8XG4gICAqIHxSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS4gKy0tLS0tLS0tLS0tLS0tLS0+UmVzcG9uZGVyKy0tLS0tPiBhY2N1bXVsYXRpdmV8XG4gICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyBhdHRhY2hlZCB0byB8ICB8ICAgICAgICAgfCAgICAgZGlzdGFuY2UgYW5kICB8XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBldmVudCB8ICArLS0tLS0tLS0tKyAgICAgdmVsb2NpdHkuICAgICB8XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqXG4gICAqXG4gICAqXG4gICAqIEdlc3R1cmUgdGhhdCBjYWxjdWxhdGVzIGN1bXVsYXRpdmUgbW92ZW1lbnQgb3ZlciB0aW1lIGluIGEgd2F5IHRoYXQganVzdFxuICAgKiBcImRvZXMgdGhlIHJpZ2h0IHRoaW5nXCIgZm9yIG11bHRpcGxlIHRvdWNoZXMuIFRoZSBcInJpZ2h0IHRoaW5nXCIgaXMgdmVyeVxuICAgKiBudWFuY2VkLiBXaGVuIG1vdmluZyB0d28gdG91Y2hlcyBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLCB0aGUgY3VtdWxhdGl2ZVxuICAgKiBkaXN0YW5jZSBpcyB6ZXJvIGluIGVhY2ggZGltZW5zaW9uLiBXaGVuIHR3byB0b3VjaGVzIG1vdmUgaW4gcGFyYWxsZWwgZml2ZVxuICAgKiBwaXhlbHMgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLCB0aGUgY3VtdWxhdGl2ZSBkaXN0YW5jZSBpcyBmaXZlLCBub3QgdGVuLiBJZlxuICAgKiB0d28gdG91Y2hlcyBzdGFydCwgb25lIG1vdmVzIGZpdmUgaW4gYSBkaXJlY3Rpb24sIHRoZW4gc3RvcHMgYW5kIHRoZSBvdGhlclxuICAgKiB0b3VjaCBtb3ZlcyBmaXZlcyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24sIHRoZSBjdW11bGF0aXZlIGRpc3RhbmNlIGlzIHRlbi5cbiAgICpcbiAgICogVGhpcyBsb2dpYyByZXF1aXJlcyBhIGtpbmQgb2YgcHJvY2Vzc2luZyBvZiB0aW1lIFwiY2x1c3RlcnNcIiBvZiB0b3VjaCBldmVudHNcbiAgICogc28gdGhhdCB0d28gdG91Y2ggbW92ZXMgdGhhdCBlc3NlbnRpYWxseSBvY2N1ciBpbiBwYXJhbGxlbCBidXQgbW92ZSBldmVyeVxuICAgKiBvdGhlciBmcmFtZSByZXNwZWN0aXZlbHksIGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNhbWUgbW92ZW1lbnQuXG4gICAqXG4gICAqIEV4cGxhbmF0aW9uIG9mIHNvbWUgb2YgdGhlIG5vbi1vYnZpb3VzIGZpZWxkczpcbiAgICpcbiAgICogLSBtb3ZlWC9tb3ZlWTogSWYgbm8gbW92ZSBldmVudCBoYXMgYmVlbiBvYnNlcnZlZCwgdGhlbiBgKG1vdmVYLCBtb3ZlWSlgIGlzXG4gICAqICAgaW52YWxpZC4gSWYgYSBtb3ZlIGV2ZW50IGhhcyBiZWVuIG9ic2VydmVkLCBgKG1vdmVYLCBtb3ZlWSlgIGlzIHRoZVxuICAgKiAgIGNlbnRyb2lkIG9mIHRoZSBtb3N0IHJlY2VudGx5IG1vdmVkIFwiY2x1c3RlclwiIG9mIGFjdGl2ZSB0b3VjaGVzLlxuICAgKiAgIChDdXJyZW50bHkgYWxsIG1vdmUgaGF2ZSB0aGUgc2FtZSB0aW1lU3RhbXAsIGJ1dCBsYXRlciB3ZSBzaG91bGQgYWRkIHNvbWVcbiAgICogICB0aHJlc2hvbGQgZm9yIHdoYXQgaXMgY29uc2lkZXJlZCB0byBiZSBcIm1vdmluZ1wiKS4gSWYgYSBwYWxtIGlzXG4gICAqICAgYWNjaWRlbnRhbGx5IGNvdW50ZWQgYXMgYSB0b3VjaCwgYnV0IGEgZmluZ2VyIGlzIG1vdmluZyBncmVhdGx5LCB0aGUgcGFsbVxuICAgKiAgIHdpbGwgbW92ZSBzbGlnaHRseSwgYnV0IHdlIG9ubHkgd2FudCB0byBjb3VudCB0aGUgc2luZ2xlIG1vdmluZyB0b3VjaC5cbiAgICogLSB4MC95MDogQ2VudHJvaWQgbG9jYXRpb24gKG5vbi1jdW11bGF0aXZlKSBhdCB0aGUgdGltZSBvZiBiZWNvbWluZ1xuICAgKiAgIHJlc3BvbmRlci5cbiAgICogLSBkeC9keTogQ3VtdWxhdGl2ZSB0b3VjaCBkaXN0YW5jZSAtIG5vdCB0aGUgc2FtZSB0aGluZyBhcyBzdW0gb2YgZWFjaCB0b3VjaFxuICAgKiAgIGRpc3RhbmNlLiBBY2NvdW50cyBmb3IgdG91Y2ggbW92ZXMgdGhhdCBhcmUgY2x1c3RlcmVkIHRvZ2V0aGVyIGluIHRpbWUsXG4gICAqICAgbW92aW5nIHRoZSBzYW1lIGRpcmVjdGlvbi4gT25seSB2YWxpZCB3aGVuIGN1cnJlbnRseSByZXNwb25kZXIgKG90aGVyd2lzZSxcbiAgICogICBpdCBvbmx5IHJlcHJlc2VudHMgdGhlIGRyYWcgZGlzdGFuY2UgYmVsb3cgdGhlIHRocmVzaG9sZCkuXG4gICAqIC0gdngvdnk6IFZlbG9jaXR5LlxuICAgKi9cblxuICBfaW5pdGlhbGl6ZUdlc3R1cmVTdGF0ZShnZXN0dXJlU3RhdGU6IEdlc3R1cmVTdGF0ZSkge1xuICAgIGdlc3R1cmVTdGF0ZS5tb3ZlWCA9IDA7XG4gICAgZ2VzdHVyZVN0YXRlLm1vdmVZID0gMDtcbiAgICBnZXN0dXJlU3RhdGUueDAgPSAwO1xuICAgIGdlc3R1cmVTdGF0ZS55MCA9IDA7XG4gICAgZ2VzdHVyZVN0YXRlLmR4ID0gMDtcbiAgICBnZXN0dXJlU3RhdGUuZHkgPSAwO1xuICAgIGdlc3R1cmVTdGF0ZS52eCA9IDA7XG4gICAgZ2VzdHVyZVN0YXRlLnZ5ID0gMDtcbiAgICBnZXN0dXJlU3RhdGUubnVtYmVyQWN0aXZlVG91Y2hlcyA9IDA7XG4gICAgLy8gQWxsIGBnZXN0dXJlU3RhdGVgIGFjY291bnRzIGZvciB0aW1lU3RhbXBzIHVwIHVudGlsOlxuICAgIGdlc3R1cmVTdGF0ZS5fYWNjb3VudHNGb3JNb3Zlc1VwVG8gPSAwO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIG51YW5jZWQgYW5kIGlzIG5lY2Vzc2FyeS4gSXQgaXMgaW5jb3JyZWN0IHRvIGNvbnRpbnVvdXNseSB0YWtlIGFsbFxuICAgKiBhY3RpdmUgKmFuZCogcmVjZW50bHkgbW92ZWQgdG91Y2hlcywgZmluZCB0aGUgY2VudHJvaWQsIGFuZCB0cmFjayBob3cgdGhhdFxuICAgKiByZXN1bHQgY2hhbmdlcyBvdmVyIHRpbWUuIEluc3RlYWQsIHdlIG11c3QgdGFrZSBhbGwgcmVjZW50bHkgbW92ZWRcbiAgICogdG91Y2hlcywgYW5kIGNhbGN1bGF0ZSBob3cgdGhlIGNlbnRyb2lkIGhhcyBjaGFuZ2VkIGp1c3QgZm9yIHRob3NlXG4gICAqIHJlY2VudGx5IG1vdmVkIHRvdWNoZXMsIGFuZCBhcHBlbmQgdGhhdCBjaGFuZ2UgdG8gYW4gYWNjdW11bGF0b3IuIFRoaXMgaXNcbiAgICogdG8gKGF0IGxlYXN0KSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgaXMgbW92aW5nIHRocmVlIGZpbmdlcnMsIGFuZFxuICAgKiB0aGVuIG9uZSBvZiB0aGUgZmluZ2VycyBzdG9wcyBidXQgdGhlIG90aGVyIHR3byBjb250aW51ZS5cbiAgICpcbiAgICogVGhpcyBpcyB2ZXJ5IGRpZmZlcmVudCB0aGFuIHRha2luZyBhbGwgb2YgdGhlIHJlY2VudGx5IG1vdmVkIHRvdWNoZXMgYW5kXG4gICAqIHN0b3JpbmcgdGhlaXIgY2VudHJvaWQgYXMgYGR4L2R5YC4gRm9yIGNvcnJlY3RuZXNzLCB3ZSBtdXN0ICphY2N1bXVsYXRlXG4gICAqIGNoYW5nZXMqIGluIHRoZSBjZW50cm9pZCBvZiByZWNlbnRseSBtb3ZlZCB0b3VjaGVzLlxuICAgKlxuICAgKiBUaGVyZSBpcyBhbHNvIHNvbWUgbnVhbmNlIHdpdGggaG93IHdlIGhhbmRsZSBtdWx0aXBsZSBtb3ZlZCB0b3VjaGVzIGluIGFcbiAgICogc2luZ2xlIGV2ZW50LiBXaXRoIHRoZSB3YXkgYFJlYWN0TmF0aXZlRXZlbnRFbWl0dGVyYCBkaXNwYXRjaGVzIHRvdWNoZXMgYXNcbiAgICogaW5kaXZpZHVhbCBldmVudHMsIG11bHRpcGxlIHRvdWNoZXMgZ2VuZXJhdGUgdHdvICdtb3ZlJyBldmVudHMsIGVhY2ggb2ZcbiAgICogdGhlbSB0cmlnZ2VyaW5nIGBvblJlc3BvbmRlck1vdmVgLiBCdXQgd2l0aCB0aGUgd2F5IGBQYW5SZXNwb25kZXJgIHdvcmtzLFxuICAgKiBhbGwgb2YgdGhlIGdlc3R1cmUgaW5mZXJlbmNlIGlzIHBlcmZvcm1lZCBvbiB0aGUgZmlyc3QgZGlzcGF0Y2gsIHNpbmNlIGl0XG4gICAqIGxvb2tzIGF0IGFsbCBvZiB0aGUgdG91Y2hlcyAoZXZlbiB0aGUgb25lcyBmb3Igd2hpY2ggdGhlcmUgaGFzbid0IGJlZW4gYVxuICAgKiBuYXRpdmUgZGlzcGF0Y2ggeWV0KS4gVGhlcmVmb3JlLCBgUGFuUmVzcG9uZGVyYCBkb2VzIG5vdCBjYWxsXG4gICAqIGBvblJlc3BvbmRlck1vdmVgIHBhc3NlZCB0aGUgZmlyc3QgZGlzcGF0Y2guIFRoaXMgZGl2ZXJnZXMgZnJvbSB0aGVcbiAgICogdHlwaWNhbCByZXNwb25kZXIgY2FsbGJhY2sgcGF0dGVybiAod2l0aG91dCB1c2luZyBgUGFuUmVzcG9uZGVyYCksIGJ1dFxuICAgKiBhdm9pZHMgbW9yZSBkaXNwYXRjaGVzIHRoYW4gbmVjZXNzYXJ5LlxuICAgKi9cbiAgX3VwZGF0ZUdlc3R1cmVTdGF0ZU9uTW92ZShcbiAgICBnZXN0dXJlU3RhdGU6IEdlc3R1cmVTdGF0ZSxcbiAgICB0b3VjaEhpc3Rvcnk6ICRQcm9wZXJ0eVR5cGU8UHJlc3NFdmVudCwgJ3RvdWNoSGlzdG9yeSc+LFxuICApIHtcbiAgICBnZXN0dXJlU3RhdGUubnVtYmVyQWN0aXZlVG91Y2hlcyA9IHRvdWNoSGlzdG9yeS5udW1iZXJBY3RpdmVUb3VjaGVzO1xuICAgIGdlc3R1cmVTdGF0ZS5tb3ZlWCA9IGN1cnJlbnRDZW50cm9pZFhPZlRvdWNoZXNDaGFuZ2VkQWZ0ZXIoXG4gICAgICB0b3VjaEhpc3RvcnksXG4gICAgICBnZXN0dXJlU3RhdGUuX2FjY291bnRzRm9yTW92ZXNVcFRvLFxuICAgICk7XG4gICAgZ2VzdHVyZVN0YXRlLm1vdmVZID0gY3VycmVudENlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlcihcbiAgICAgIHRvdWNoSGlzdG9yeSxcbiAgICAgIGdlc3R1cmVTdGF0ZS5fYWNjb3VudHNGb3JNb3Zlc1VwVG8sXG4gICAgKTtcbiAgICBjb25zdCBtb3ZlZEFmdGVyID0gZ2VzdHVyZVN0YXRlLl9hY2NvdW50c0Zvck1vdmVzVXBUbztcbiAgICBjb25zdCBwcmV2WCA9IHByZXZpb3VzQ2VudHJvaWRYT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyKFxuICAgICAgdG91Y2hIaXN0b3J5LFxuICAgICAgbW92ZWRBZnRlcixcbiAgICApO1xuICAgIGNvbnN0IHggPSBjdXJyZW50Q2VudHJvaWRYT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyKHRvdWNoSGlzdG9yeSwgbW92ZWRBZnRlcik7XG4gICAgY29uc3QgcHJldlkgPSBwcmV2aW91c0NlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlcihcbiAgICAgIHRvdWNoSGlzdG9yeSxcbiAgICAgIG1vdmVkQWZ0ZXIsXG4gICAgKTtcbiAgICBjb25zdCB5ID0gY3VycmVudENlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlcih0b3VjaEhpc3RvcnksIG1vdmVkQWZ0ZXIpO1xuICAgIGNvbnN0IG5leHREWCA9IGdlc3R1cmVTdGF0ZS5keCArICh4IC0gcHJldlgpO1xuICAgIGNvbnN0IG5leHREWSA9IGdlc3R1cmVTdGF0ZS5keSArICh5IC0gcHJldlkpO1xuXG4gICAgLy8gVE9ETzogVGhpcyBtdXN0IGJlIGZpbHRlcmVkIGludGVsbGlnZW50bHkuXG4gICAgY29uc3QgZHQgPVxuICAgICAgdG91Y2hIaXN0b3J5Lm1vc3RSZWNlbnRUaW1lU3RhbXAgLSBnZXN0dXJlU3RhdGUuX2FjY291bnRzRm9yTW92ZXNVcFRvO1xuICAgIGdlc3R1cmVTdGF0ZS52eCA9IChuZXh0RFggLSBnZXN0dXJlU3RhdGUuZHgpIC8gZHQ7XG4gICAgZ2VzdHVyZVN0YXRlLnZ5ID0gKG5leHREWSAtIGdlc3R1cmVTdGF0ZS5keSkgLyBkdDtcblxuICAgIGdlc3R1cmVTdGF0ZS5keCA9IG5leHREWDtcbiAgICBnZXN0dXJlU3RhdGUuZHkgPSBuZXh0RFk7XG4gICAgZ2VzdHVyZVN0YXRlLl9hY2NvdW50c0Zvck1vdmVzVXBUbyA9IHRvdWNoSGlzdG9yeS5tb3N0UmVjZW50VGltZVN0YW1wO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIEVuaGFuY2VkIHZlcnNpb25zIG9mIGFsbCBvZiB0aGUgcmVzcG9uZGVyIGNhbGxiYWNrc1xuICAgKiB0aGF0IHByb3ZpZGUgbm90IG9ubHkgdGhlIHR5cGljYWwgYFJlc3BvbmRlclN5bnRoZXRpY0V2ZW50YCwgYnV0IGFsc28gdGhlXG4gICAqIGBQYW5SZXNwb25kZXJgIGdlc3R1cmUgc3RhdGUuICBTaW1wbHkgcmVwbGFjZSB0aGUgd29yZCBgUmVzcG9uZGVyYCB3aXRoXG4gICAqIGBQYW5SZXNwb25kZXJgIGluIGVhY2ggb2YgdGhlIHR5cGljYWwgYG9uUmVzcG9uZGVyKmAgY2FsbGJhY2tzLiBGb3JcbiAgICogZXhhbXBsZSwgdGhlIGBjb25maWdgIG9iamVjdCB3b3VsZCBsb29rIGxpa2U6XG4gICAqXG4gICAqICAtIGBvbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXI6IChlLCBnZXN0dXJlU3RhdGUpID0+IHsuLi59YFxuICAgKiAgLSBgb25Nb3ZlU2hvdWxkU2V0UGFuUmVzcG9uZGVyQ2FwdHVyZTogKGUsIGdlc3R1cmVTdGF0ZSkgPT4gey4uLn1gXG4gICAqICAtIGBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7Li4ufWBcbiAgICogIC0gYG9uU3RhcnRTaG91bGRTZXRQYW5SZXNwb25kZXJDYXB0dXJlOiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7Li4ufWBcbiAgICogIC0gYG9uUGFuUmVzcG9uZGVyUmVqZWN0OiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7Li4ufWBcbiAgICogIC0gYG9uUGFuUmVzcG9uZGVyR3JhbnQ6IChlLCBnZXN0dXJlU3RhdGUpID0+IHsuLi59YFxuICAgKiAgLSBgb25QYW5SZXNwb25kZXJTdGFydDogKGUsIGdlc3R1cmVTdGF0ZSkgPT4gey4uLn1gXG4gICAqICAtIGBvblBhblJlc3BvbmRlckVuZDogKGUsIGdlc3R1cmVTdGF0ZSkgPT4gey4uLn1gXG4gICAqICAtIGBvblBhblJlc3BvbmRlclJlbGVhc2U6IChlLCBnZXN0dXJlU3RhdGUpID0+IHsuLi59YFxuICAgKiAgLSBgb25QYW5SZXNwb25kZXJNb3ZlOiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7Li4ufWBcbiAgICogIC0gYG9uUGFuUmVzcG9uZGVyVGVybWluYXRlOiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7Li4ufWBcbiAgICogIC0gYG9uUGFuUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0OiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7Li4ufWBcbiAgICogIC0gYG9uU2hvdWxkQmxvY2tOYXRpdmVSZXNwb25kZXI6IChlLCBnZXN0dXJlU3RhdGUpID0+IHsuLi59YFxuICAgKlxuICAgKiAgSW4gZ2VuZXJhbCwgZm9yIGV2ZW50cyB0aGF0IGhhdmUgY2FwdHVyZSBlcXVpdmFsZW50cywgd2UgdXBkYXRlIHRoZVxuICAgKiAgZ2VzdHVyZVN0YXRlIG9uY2UgaW4gdGhlIGNhcHR1cmUgcGhhc2UgYW5kIGNhbiB1c2UgaXQgaW4gdGhlIGJ1YmJsZSBwaGFzZVxuICAgKiAgYXMgd2VsbC5cbiAgICpcbiAgICogIEJlIGNhcmVmdWwgd2l0aCBvblN0YXJ0U2hvdWxkKiBjYWxsYmFja3MuIFRoZXkgb25seSByZWZsZWN0IHVwZGF0ZWRcbiAgICogIGBnZXN0dXJlU3RhdGVgIGZvciBzdGFydC9lbmQgZXZlbnRzIHRoYXQgYnViYmxlL2NhcHR1cmUgdG8gdGhlIE5vZGUuXG4gICAqICBPbmNlIHRoZSBub2RlIGlzIHRoZSByZXNwb25kZXIsIHlvdSBjYW4gcmVseSBvbiBldmVyeSBzdGFydC9lbmQgZXZlbnRcbiAgICogIGJlaW5nIHByb2Nlc3NlZCBieSB0aGUgZ2VzdHVyZSBhbmQgYGdlc3R1cmVTdGF0ZWAgYmVpbmcgdXBkYXRlZFxuICAgKiAgYWNjb3JkaW5nbHkuIChudW1iZXJBY3RpdmVUb3VjaGVzKSBtYXkgbm90IGJlIHRvdGFsbHkgYWNjdXJhdGUgdW5sZXNzIHlvdVxuICAgKiAgYXJlIHRoZSByZXNwb25kZXIuXG4gICAqL1xuICBjcmVhdGUoY29uZmlnOiBQYW5SZXNwb25kZXJDb25maWcpOiB7XG4gICAgZ2V0SW50ZXJhY3Rpb25IYW5kbGU6ICgpID0+ID9udW1iZXIsXG4gICAgcGFuSGFuZGxlcnM6IFBhbkhhbmRsZXJzLFxuICB9IHtcbiAgICBjb25zdCBpbnRlcmFjdGlvblN0YXRlID0ge1xuICAgICAgaGFuZGxlOiAobnVsbDogP251bWJlciksXG4gICAgfTtcbiAgICBjb25zdCBnZXN0dXJlU3RhdGU6IEdlc3R1cmVTdGF0ZSA9IHtcbiAgICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5nXG4gICAgICBzdGF0ZUlEOiBNYXRoLnJhbmRvbSgpLFxuICAgICAgbW92ZVg6IDAsXG4gICAgICBtb3ZlWTogMCxcbiAgICAgIHgwOiAwLFxuICAgICAgeTA6IDAsXG4gICAgICBkeDogMCxcbiAgICAgIGR5OiAwLFxuICAgICAgdng6IDAsXG4gICAgICB2eTogMCxcbiAgICAgIG51bWJlckFjdGl2ZVRvdWNoZXM6IDAsXG4gICAgICBfYWNjb3VudHNGb3JNb3Zlc1VwVG86IDAsXG4gICAgfTtcbiAgICBjb25zdCBwYW5IYW5kbGVycyA9IHtcbiAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXIoZXZlbnQ6IFByZXNzRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5vblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyID09IG51bGxcbiAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgOiBjb25maWcub25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcihldmVudCwgZ2VzdHVyZVN0YXRlKTtcbiAgICAgIH0sXG4gICAgICBvbk1vdmVTaG91bGRTZXRSZXNwb25kZXIoZXZlbnQ6IFByZXNzRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5vbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXIgPT0gbnVsbFxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IGNvbmZpZy5vbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXIoZXZlbnQsIGdlc3R1cmVTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgb25TdGFydFNob3VsZFNldFJlc3BvbmRlckNhcHR1cmUoZXZlbnQ6IFByZXNzRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHksIHdlIHNob3VsZCByZWluaXRpYWxpemUgdGhlIHN0YXRlIGFueSB0aW1lXG4gICAgICAgIC8vIHRvdWNoZXMubGVuZ3RoIGluY3JlYXNlcyBmcm9tIDAgYWN0aXZlIHRvID4gMCBhY3RpdmUuXG4gICAgICAgIGlmIChldmVudC5uYXRpdmVFdmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIFBhblJlc3BvbmRlci5faW5pdGlhbGl6ZUdlc3R1cmVTdGF0ZShnZXN0dXJlU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGdlc3R1cmVTdGF0ZS5udW1iZXJBY3RpdmVUb3VjaGVzID1cbiAgICAgICAgICBldmVudC50b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcztcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5vblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyQ2FwdHVyZSAhPSBudWxsXG4gICAgICAgICAgPyBjb25maWcub25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlckNhcHR1cmUoZXZlbnQsIGdlc3R1cmVTdGF0ZSlcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgfSxcblxuICAgICAgb25Nb3ZlU2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZShldmVudDogUHJlc3NFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0b3VjaEhpc3RvcnkgPSBldmVudC50b3VjaEhpc3Rvcnk7XG4gICAgICAgIC8vIFJlc3BvbmRlciBzeXN0ZW0gaW5jb3JyZWN0bHkgZGlzcGF0Y2hlcyBzaG91bGQqIHRvIGN1cnJlbnQgcmVzcG9uZGVyXG4gICAgICAgIC8vIEZpbHRlciBvdXQgYW55IHRvdWNoIG1vdmVzIHBhc3QgdGhlIGZpcnN0IG9uZSAtIHdlIHdvdWxkIGhhdmVcbiAgICAgICAgLy8gYWxyZWFkeSBwcm9jZXNzZWQgbXVsdGktdG91Y2ggZ2VvbWV0cnkgZHVyaW5nIHRoZSBmaXJzdCBldmVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdlc3R1cmVTdGF0ZS5fYWNjb3VudHNGb3JNb3Zlc1VwVG8gPT09XG4gICAgICAgICAgdG91Y2hIaXN0b3J5Lm1vc3RSZWNlbnRUaW1lU3RhbXBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIFBhblJlc3BvbmRlci5fdXBkYXRlR2VzdHVyZVN0YXRlT25Nb3ZlKGdlc3R1cmVTdGF0ZSwgdG91Y2hIaXN0b3J5KTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5vbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXJDYXB0dXJlXG4gICAgICAgICAgPyBjb25maWcub25Nb3ZlU2hvdWxkU2V0UGFuUmVzcG9uZGVyQ2FwdHVyZShldmVudCwgZ2VzdHVyZVN0YXRlKVxuICAgICAgICAgIDogZmFsc2U7XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlckdyYW50KGV2ZW50OiBQcmVzc0V2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghaW50ZXJhY3Rpb25TdGF0ZS5oYW5kbGUpIHtcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmhhbmRsZSA9XG4gICAgICAgICAgICBJbnRlcmFjdGlvbk1hbmFnZXIuY3JlYXRlSW50ZXJhY3Rpb25IYW5kbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXN0dXJlU3RhdGUueDAgPSBjdXJyZW50Q2VudHJvaWRYKGV2ZW50LnRvdWNoSGlzdG9yeSk7XG4gICAgICAgIGdlc3R1cmVTdGF0ZS55MCA9IGN1cnJlbnRDZW50cm9pZFkoZXZlbnQudG91Y2hIaXN0b3J5KTtcbiAgICAgICAgZ2VzdHVyZVN0YXRlLmR4ID0gMDtcbiAgICAgICAgZ2VzdHVyZVN0YXRlLmR5ID0gMDtcbiAgICAgICAgaWYgKGNvbmZpZy5vblBhblJlc3BvbmRlckdyYW50KSB7XG4gICAgICAgICAgY29uZmlnLm9uUGFuUmVzcG9uZGVyR3JhbnQoZXZlbnQsIGdlc3R1cmVTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogdDc0NjcxMjQgaW52ZXN0aWdhdGUgaWYgdGhpcyBjYW4gYmUgcmVtb3ZlZFxuICAgICAgICByZXR1cm4gY29uZmlnLm9uU2hvdWxkQmxvY2tOYXRpdmVSZXNwb25kZXIgPT0gbnVsbFxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogY29uZmlnLm9uU2hvdWxkQmxvY2tOYXRpdmVSZXNwb25kZXIoZXZlbnQsIGdlc3R1cmVTdGF0ZSk7XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlclJlamVjdChldmVudDogUHJlc3NFdmVudCk6IHZvaWQge1xuICAgICAgICBjbGVhckludGVyYWN0aW9uSGFuZGxlKFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUsXG4gICAgICAgICAgY29uZmlnLm9uUGFuUmVzcG9uZGVyUmVqZWN0LFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGdlc3R1cmVTdGF0ZSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIG9uUmVzcG9uZGVyUmVsZWFzZShldmVudDogUHJlc3NFdmVudCk6IHZvaWQge1xuICAgICAgICBjbGVhckludGVyYWN0aW9uSGFuZGxlKFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUsXG4gICAgICAgICAgY29uZmlnLm9uUGFuUmVzcG9uZGVyUmVsZWFzZSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBnZXN0dXJlU3RhdGUsXG4gICAgICAgICk7XG4gICAgICAgIFBhblJlc3BvbmRlci5faW5pdGlhbGl6ZUdlc3R1cmVTdGF0ZShnZXN0dXJlU3RhdGUpO1xuICAgICAgfSxcblxuICAgICAgb25SZXNwb25kZXJTdGFydChldmVudDogUHJlc3NFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b3VjaEhpc3RvcnkgPSBldmVudC50b3VjaEhpc3Rvcnk7XG4gICAgICAgIGdlc3R1cmVTdGF0ZS5udW1iZXJBY3RpdmVUb3VjaGVzID0gdG91Y2hIaXN0b3J5Lm51bWJlckFjdGl2ZVRvdWNoZXM7XG4gICAgICAgIGlmIChjb25maWcub25QYW5SZXNwb25kZXJTdGFydCkge1xuICAgICAgICAgIGNvbmZpZy5vblBhblJlc3BvbmRlclN0YXJ0KGV2ZW50LCBnZXN0dXJlU3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlck1vdmUoZXZlbnQ6IFByZXNzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG91Y2hIaXN0b3J5ID0gZXZlbnQudG91Y2hIaXN0b3J5O1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBkaXNwYXRjaCBvZiB0d28gdG91Y2ggbW92ZXMgd2hlbiB0aGVyZSBhcmUgdHdvXG4gICAgICAgIC8vIHNpbXVsdGFuZW91c2x5IGNoYW5nZWQgdG91Y2hlcy5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdlc3R1cmVTdGF0ZS5fYWNjb3VudHNGb3JNb3Zlc1VwVG8gPT09XG4gICAgICAgICAgdG91Y2hIaXN0b3J5Lm1vc3RSZWNlbnRUaW1lU3RhbXBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpbHRlciBvdXQgYW55IHRvdWNoIG1vdmVzIHBhc3QgdGhlIGZpcnN0IG9uZSAtIHdlIHdvdWxkIGhhdmVcbiAgICAgICAgLy8gYWxyZWFkeSBwcm9jZXNzZWQgbXVsdGktdG91Y2ggZ2VvbWV0cnkgZHVyaW5nIHRoZSBmaXJzdCBldmVudC5cbiAgICAgICAgUGFuUmVzcG9uZGVyLl91cGRhdGVHZXN0dXJlU3RhdGVPbk1vdmUoZ2VzdHVyZVN0YXRlLCB0b3VjaEhpc3RvcnkpO1xuICAgICAgICBpZiAoY29uZmlnLm9uUGFuUmVzcG9uZGVyTW92ZSkge1xuICAgICAgICAgIGNvbmZpZy5vblBhblJlc3BvbmRlck1vdmUoZXZlbnQsIGdlc3R1cmVTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG9uUmVzcG9uZGVyRW5kKGV2ZW50OiBQcmVzc0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvdWNoSGlzdG9yeSA9IGV2ZW50LnRvdWNoSGlzdG9yeTtcbiAgICAgICAgZ2VzdHVyZVN0YXRlLm51bWJlckFjdGl2ZVRvdWNoZXMgPSB0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcztcbiAgICAgICAgY2xlYXJJbnRlcmFjdGlvbkhhbmRsZShcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLFxuICAgICAgICAgIGNvbmZpZy5vblBhblJlc3BvbmRlckVuZCxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBnZXN0dXJlU3RhdGUsXG4gICAgICAgICk7XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlclRlcm1pbmF0ZShldmVudDogUHJlc3NFdmVudCk6IHZvaWQge1xuICAgICAgICBjbGVhckludGVyYWN0aW9uSGFuZGxlKFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUsXG4gICAgICAgICAgY29uZmlnLm9uUGFuUmVzcG9uZGVyVGVybWluYXRlLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGdlc3R1cmVTdGF0ZSxcbiAgICAgICAgKTtcbiAgICAgICAgUGFuUmVzcG9uZGVyLl9pbml0aWFsaXplR2VzdHVyZVN0YXRlKGdlc3R1cmVTdGF0ZSk7XG4gICAgICB9LFxuXG4gICAgICBvblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdChldmVudDogUHJlc3NFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY29uZmlnLm9uUGFuUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0ID09IG51bGxcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGNvbmZpZy5vblBhblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdChldmVudCwgZ2VzdHVyZVN0YXRlKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcGFuSGFuZGxlcnMsXG4gICAgICBnZXRJbnRlcmFjdGlvbkhhbmRsZSgpOiA/bnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uU3RhdGUuaGFuZGxlO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcblxuZnVuY3Rpb24gY2xlYXJJbnRlcmFjdGlvbkhhbmRsZShcbiAgaW50ZXJhY3Rpb25TdGF0ZToge2hhbmRsZTogP251bWJlciwgLi4ufSxcbiAgY2FsbGJhY2s6ID8oQWN0aXZlQ2FsbGJhY2sgfCBQYXNzaXZlQ2FsbGJhY2spLFxuICBldmVudDogUHJlc3NFdmVudCxcbiAgZ2VzdHVyZVN0YXRlOiBHZXN0dXJlU3RhdGUsXG4pIHtcbiAgaWYgKGludGVyYWN0aW9uU3RhdGUuaGFuZGxlKSB7XG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyLmNsZWFySW50ZXJhY3Rpb25IYW5kbGUoaW50ZXJhY3Rpb25TdGF0ZS5oYW5kbGUpO1xuICAgIGludGVyYWN0aW9uU3RhdGUuaGFuZGxlID0gbnVsbDtcbiAgfVxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayhldmVudCwgZ2VzdHVyZVN0YXRlKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBQYW5SZXNwb25kZXJJbnN0YW5jZSA9IFJldHVyblR5cGU8KHR5cGVvZiBQYW5SZXNwb25kZXIpWydjcmVhdGUnXT47XG5cbmV4cG9ydCBkZWZhdWx0IFBhblJlc3BvbmRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKi9cblxuY29uc3QgVG91Y2hIaXN0b3J5TWF0aCA9IHtcbiAgLyoqXG4gICAqIFRoaXMgY29kZSBpcyBvcHRpbWl6ZWQgYW5kIG5vdCBpbnRlbmRlZCB0byBsb29rIGJlYXV0aWZ1bC4gVGhpcyBhbGxvd3NcbiAgICogY29tcHV0aW5nIG9mIHRvdWNoIGNlbnRyb2lkcyB0aGF0IGhhdmUgbW92ZWQgYWZ0ZXIgYHRvdWNoZXNDaGFuZ2VkQWZ0ZXJgXG4gICAqIHRpbWVTdGFtcC4gWW91IGNhbiBjb21wdXRlIHRoZSBjdXJyZW50IGNlbnRyb2lkIGludm9sdmluZyBhbGwgdG91Y2hlc1xuICAgKiBtb3ZlcyBhZnRlciBgdG91Y2hlc0NoYW5nZWRBZnRlcmAsIG9yIHlvdSBjYW4gY29tcHV0ZSB0aGUgcHJldmlvdXNcbiAgICogY2VudHJvaWQgb2YgYWxsIHRvdWNoZXMgdGhhdCB3ZXJlIG1vdmVkIGFmdGVyIGB0b3VjaGVzQ2hhbmdlZEFmdGVyYC5cbiAgICpcbiAgICogQHBhcmFtIHtUb3VjaEhpc3RvcnlNYXRofSB0b3VjaEhpc3RvcnkgU3RhbmRhcmQgUmVzcG9uZGVyIHRvdWNoIHRyYWNrXG4gICAqIGRhdGEuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3VjaGVzQ2hhbmdlZEFmdGVyIHRpbWVTdGFtcCBhZnRlciB3aGljaCBtb3ZlZCB0b3VjaGVzXG4gICAqIGFyZSBjb25zaWRlcmVkIFwiYWN0aXZlbHkgbW92aW5nXCIgLSBub3QganVzdCBcImFjdGl2ZVwiLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzWEF4aXMgQ29uc2lkZXIgYHhgIGRpbWVuc2lvbiB2cy4gYHlgIGRpbWVuc2lvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBvZkN1cnJlbnQgQ29tcHV0ZSBjdXJyZW50IGNlbnRyb2lkIGZvciBhY3RpdmVseSBtb3ZpbmdcbiAgICogdG91Y2hlcyB2cy4gcHJldmlvdXMgY2VudHJvaWQgb2Ygbm93IGFjdGl2ZWx5IG1vdmluZyB0b3VjaGVzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHZhbHVlIG9mIGNlbnRyb2lkIGluIHNwZWNpZmllZCBkaW1lbnNpb24uXG4gICAqL1xuICBjZW50cm9pZERpbWVuc2lvbjogZnVuY3Rpb24gKFxuICAgIHRvdWNoSGlzdG9yeSxcbiAgICB0b3VjaGVzQ2hhbmdlZEFmdGVyLFxuICAgIGlzWEF4aXMsXG4gICAgb2ZDdXJyZW50LFxuICApIHtcbiAgICBjb25zdCB0b3VjaEJhbmsgPSB0b3VjaEhpc3RvcnkudG91Y2hCYW5rO1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGNvbnN0IG9uZVRvdWNoRGF0YSA9XG4gICAgICB0b3VjaEhpc3RvcnkubnVtYmVyQWN0aXZlVG91Y2hlcyA9PT0gMVxuICAgICAgICA/IHRvdWNoSGlzdG9yeS50b3VjaEJhbmtbdG91Y2hIaXN0b3J5LmluZGV4T2ZTaW5nbGVBY3RpdmVUb3VjaF1cbiAgICAgICAgOiBudWxsO1xuXG4gICAgaWYgKG9uZVRvdWNoRGF0YSAhPT0gbnVsbCkge1xuICAgICAgaWYgKFxuICAgICAgICBvbmVUb3VjaERhdGEudG91Y2hBY3RpdmUgJiZcbiAgICAgICAgb25lVG91Y2hEYXRhLmN1cnJlbnRUaW1lU3RhbXAgPiB0b3VjaGVzQ2hhbmdlZEFmdGVyXG4gICAgICApIHtcbiAgICAgICAgdG90YWwgKz1cbiAgICAgICAgICBvZkN1cnJlbnQgJiYgaXNYQXhpc1xuICAgICAgICAgICAgPyBvbmVUb3VjaERhdGEuY3VycmVudFBhZ2VYXG4gICAgICAgICAgICA6IG9mQ3VycmVudCAmJiAhaXNYQXhpc1xuICAgICAgICAgICAgPyBvbmVUb3VjaERhdGEuY3VycmVudFBhZ2VZXG4gICAgICAgICAgICA6ICFvZkN1cnJlbnQgJiYgaXNYQXhpc1xuICAgICAgICAgICAgPyBvbmVUb3VjaERhdGEucHJldmlvdXNQYWdlWFxuICAgICAgICAgICAgOiBvbmVUb3VjaERhdGEucHJldmlvdXNQYWdlWTtcbiAgICAgICAgY291bnQgPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdWNoQmFuay5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0b3VjaFRyYWNrID0gdG91Y2hCYW5rW2ldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdG91Y2hUcmFjayAhPT0gbnVsbCAmJlxuICAgICAgICAgIHRvdWNoVHJhY2sgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRvdWNoVHJhY2sudG91Y2hBY3RpdmUgJiZcbiAgICAgICAgICB0b3VjaFRyYWNrLmN1cnJlbnRUaW1lU3RhbXAgPj0gdG91Y2hlc0NoYW5nZWRBZnRlclxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgdG9BZGQ7IC8vIFl1Y2ssIHByb2dyYW0gdGVtcG9yYXJpbHkgaW4gaW52YWxpZCBzdGF0ZS5cbiAgICAgICAgICBpZiAob2ZDdXJyZW50ICYmIGlzWEF4aXMpIHtcbiAgICAgICAgICAgIHRvQWRkID0gdG91Y2hUcmFjay5jdXJyZW50UGFnZVg7XG4gICAgICAgICAgfSBlbHNlIGlmIChvZkN1cnJlbnQgJiYgIWlzWEF4aXMpIHtcbiAgICAgICAgICAgIHRvQWRkID0gdG91Y2hUcmFjay5jdXJyZW50UGFnZVk7XG4gICAgICAgICAgfSBlbHNlIGlmICghb2ZDdXJyZW50ICYmIGlzWEF4aXMpIHtcbiAgICAgICAgICAgIHRvQWRkID0gdG91Y2hUcmFjay5wcmV2aW91c1BhZ2VYO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHRvdWNoVHJhY2sucHJldmlvdXNQYWdlWTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG90YWwgKz0gdG9BZGQ7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnQgPiAwID8gdG90YWwgLyBjb3VudCA6IFRvdWNoSGlzdG9yeU1hdGgubm9DZW50cm9pZDtcbiAgfSxcblxuICBjdXJyZW50Q2VudHJvaWRYT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyOiBmdW5jdGlvbiAoXG4gICAgdG91Y2hIaXN0b3J5LFxuICAgIHRvdWNoZXNDaGFuZ2VkQWZ0ZXIsXG4gICkge1xuICAgIHJldHVybiBUb3VjaEhpc3RvcnlNYXRoLmNlbnRyb2lkRGltZW5zaW9uKFxuICAgICAgdG91Y2hIaXN0b3J5LFxuICAgICAgdG91Y2hlc0NoYW5nZWRBZnRlcixcbiAgICAgIHRydWUsIC8vIGlzWEF4aXNcbiAgICAgIHRydWUsIC8vIG9mQ3VycmVudFxuICAgICk7XG4gIH0sXG5cbiAgY3VycmVudENlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlcjogZnVuY3Rpb24gKFxuICAgIHRvdWNoSGlzdG9yeSxcbiAgICB0b3VjaGVzQ2hhbmdlZEFmdGVyLFxuICApIHtcbiAgICByZXR1cm4gVG91Y2hIaXN0b3J5TWF0aC5jZW50cm9pZERpbWVuc2lvbihcbiAgICAgIHRvdWNoSGlzdG9yeSxcbiAgICAgIHRvdWNoZXNDaGFuZ2VkQWZ0ZXIsXG4gICAgICBmYWxzZSwgLy8gaXNYQXhpc1xuICAgICAgdHJ1ZSwgLy8gb2ZDdXJyZW50XG4gICAgKTtcbiAgfSxcblxuICBwcmV2aW91c0NlbnRyb2lkWE9mVG91Y2hlc0NoYW5nZWRBZnRlcjogZnVuY3Rpb24gKFxuICAgIHRvdWNoSGlzdG9yeSxcbiAgICB0b3VjaGVzQ2hhbmdlZEFmdGVyLFxuICApIHtcbiAgICByZXR1cm4gVG91Y2hIaXN0b3J5TWF0aC5jZW50cm9pZERpbWVuc2lvbihcbiAgICAgIHRvdWNoSGlzdG9yeSxcbiAgICAgIHRvdWNoZXNDaGFuZ2VkQWZ0ZXIsXG4gICAgICB0cnVlLCAvLyBpc1hBeGlzXG4gICAgICBmYWxzZSwgLy8gb2ZDdXJyZW50XG4gICAgKTtcbiAgfSxcblxuICBwcmV2aW91c0NlbnRyb2lkWU9mVG91Y2hlc0NoYW5nZWRBZnRlcjogZnVuY3Rpb24gKFxuICAgIHRvdWNoSGlzdG9yeSxcbiAgICB0b3VjaGVzQ2hhbmdlZEFmdGVyLFxuICApIHtcbiAgICByZXR1cm4gVG91Y2hIaXN0b3J5TWF0aC5jZW50cm9pZERpbWVuc2lvbihcbiAgICAgIHRvdWNoSGlzdG9yeSxcbiAgICAgIHRvdWNoZXNDaGFuZ2VkQWZ0ZXIsXG4gICAgICBmYWxzZSwgLy8gaXNYQXhpc1xuICAgICAgZmFsc2UsIC8vIG9mQ3VycmVudFxuICAgICk7XG4gIH0sXG5cbiAgY3VycmVudENlbnRyb2lkWDogZnVuY3Rpb24gKHRvdWNoSGlzdG9yeSkge1xuICAgIHJldHVybiBUb3VjaEhpc3RvcnlNYXRoLmNlbnRyb2lkRGltZW5zaW9uKFxuICAgICAgdG91Y2hIaXN0b3J5LFxuICAgICAgMCwgLy8gdG91Y2hlc0NoYW5nZWRBZnRlclxuICAgICAgdHJ1ZSwgLy8gaXNYQXhpc1xuICAgICAgdHJ1ZSwgLy8gb2ZDdXJyZW50XG4gICAgKTtcbiAgfSxcblxuICBjdXJyZW50Q2VudHJvaWRZOiBmdW5jdGlvbiAodG91Y2hIaXN0b3J5KSB7XG4gICAgcmV0dXJuIFRvdWNoSGlzdG9yeU1hdGguY2VudHJvaWREaW1lbnNpb24oXG4gICAgICB0b3VjaEhpc3RvcnksXG4gICAgICAwLCAvLyB0b3VjaGVzQ2hhbmdlZEFmdGVyXG4gICAgICBmYWxzZSwgLy8gaXNYQXhpc1xuICAgICAgdHJ1ZSwgLy8gb2ZDdXJyZW50XG4gICAgKTtcbiAgfSxcblxuICBub0NlbnRyb2lkOiAtMSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVG91Y2hIaXN0b3J5TWF0aDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBlcm1pc3Npb25TdGF0dXMsXG4gIFBlcm1pc3Npb25UeXBlLFxufSBmcm9tICcuL05hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZCc7XG5cbmltcG9ydCBOYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZCBmcm9tICcuLi9OYXRpdmVNb2R1bGVzL3NwZWNzL05hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkJztcbmltcG9ydCBOYXRpdmVQZXJtaXNzaW9uc0FuZHJvaWQgZnJvbSAnLi9OYXRpdmVQZXJtaXNzaW9uc0FuZHJvaWQnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG5jb25zdCBQbGF0Zm9ybSA9IHJlcXVpcmUoJy4uL1V0aWxpdGllcy9QbGF0Zm9ybScpO1xuXG5leHBvcnQgdHlwZSBSYXRpb25hbGUgPSB7XG4gIHRpdGxlOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgYnV0dG9uUG9zaXRpdmU/OiBzdHJpbmcsXG4gIGJ1dHRvbk5lZ2F0aXZlPzogc3RyaW5nLFxuICBidXR0b25OZXV0cmFsPzogc3RyaW5nLFxuICAuLi5cbn07XG5cbmNvbnN0IFBFUk1JU1NJT05fUkVRVUVTVF9SRVNVTFQgPSBPYmplY3QuZnJlZXplKHtcbiAgR1JBTlRFRDogJ2dyYW50ZWQnLFxuICBERU5JRUQ6ICdkZW5pZWQnLFxuICBORVZFUl9BU0tfQUdBSU46ICduZXZlcl9hc2tfYWdhaW4nLFxufSk7XG5cbmNvbnN0IFBFUk1JU1NJT05TID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFJFQURfQ0FMRU5EQVI6ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DQUxFTkRBUicsXG4gIFdSSVRFX0NBTEVOREFSOiAnYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0NBTEVOREFSJyxcbiAgQ0FNRVJBOiAnYW5kcm9pZC5wZXJtaXNzaW9uLkNBTUVSQScsXG4gIFJFQURfQ09OVEFDVFM6ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DT05UQUNUUycsXG4gIFdSSVRFX0NPTlRBQ1RTOiAnYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0NPTlRBQ1RTJyxcbiAgR0VUX0FDQ09VTlRTOiAnYW5kcm9pZC5wZXJtaXNzaW9uLkdFVF9BQ0NPVU5UUycsXG4gIEFDQ0VTU19GSU5FX0xPQ0FUSU9OOiAnYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OJyxcbiAgQUNDRVNTX0NPQVJTRV9MT0NBVElPTjogJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OJyxcbiAgQUNDRVNTX0JBQ0tHUk9VTkRfTE9DQVRJT046ICdhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0JBQ0tHUk9VTkRfTE9DQVRJT04nLFxuICBSRUNPUkRfQVVESU86ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVDT1JEX0FVRElPJyxcbiAgUkVBRF9QSE9ORV9TVEFURTogJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX1BIT05FX1NUQVRFJyxcbiAgQ0FMTF9QSE9ORTogJ2FuZHJvaWQucGVybWlzc2lvbi5DQUxMX1BIT05FJyxcbiAgUkVBRF9DQUxMX0xPRzogJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX0NBTExfTE9HJyxcbiAgV1JJVEVfQ0FMTF9MT0c6ICdhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfQ0FMTF9MT0cnLFxuICBBRERfVk9JQ0VNQUlMOiAnY29tLmFuZHJvaWQudm9pY2VtYWlsLnBlcm1pc3Npb24uQUREX1ZPSUNFTUFJTCcsXG4gIFJFQURfVk9JQ0VNQUlMOiAnY29tLmFuZHJvaWQudm9pY2VtYWlsLnBlcm1pc3Npb24uUkVBRF9WT0lDRU1BSUwnLFxuICBXUklURV9WT0lDRU1BSUw6ICdjb20uYW5kcm9pZC52b2ljZW1haWwucGVybWlzc2lvbi5XUklURV9WT0lDRU1BSUwnLFxuICBVU0VfU0lQOiAnYW5kcm9pZC5wZXJtaXNzaW9uLlVTRV9TSVAnLFxuICBQUk9DRVNTX09VVEdPSU5HX0NBTExTOiAnYW5kcm9pZC5wZXJtaXNzaW9uLlBST0NFU1NfT1VUR09JTkdfQ0FMTFMnLFxuICBCT0RZX1NFTlNPUlM6ICdhbmRyb2lkLnBlcm1pc3Npb24uQk9EWV9TRU5TT1JTJyxcbiAgQk9EWV9TRU5TT1JTX0JBQ0tHUk9VTkQ6ICdhbmRyb2lkLnBlcm1pc3Npb24uQk9EWV9TRU5TT1JTX0JBQ0tHUk9VTkQnLFxuICBTRU5EX1NNUzogJ2FuZHJvaWQucGVybWlzc2lvbi5TRU5EX1NNUycsXG4gIFJFQ0VJVkVfU01TOiAnYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfU01TJyxcbiAgUkVBRF9TTVM6ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9TTVMnLFxuICBSRUNFSVZFX1dBUF9QVVNIOiAnYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfV0FQX1BVU0gnLFxuICBSRUNFSVZFX01NUzogJ2FuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX01NUycsXG4gIFJFQURfRVhURVJOQUxfU1RPUkFHRTogJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UnLFxuICBSRUFEX01FRElBX0lNQUdFUzogJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX01FRElBX0lNQUdFUycsXG4gIFJFQURfTUVESUFfVklERU86ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9NRURJQV9WSURFTycsXG4gIFJFQURfTUVESUFfQVVESU86ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9NRURJQV9BVURJTycsXG4gIFJFQURfTUVESUFfVklTVUFMX1VTRVJfU0VMRUNURUQ6XG4gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX01FRElBX1ZJU1VBTF9VU0VSX1NFTEVDVEVEJyxcbiAgV1JJVEVfRVhURVJOQUxfU1RPUkFHRTogJ2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9FWFRFUk5BTF9TVE9SQUdFJyxcbiAgQkxVRVRPT1RIX0NPTk5FQ1Q6ICdhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIX0NPTk5FQ1QnLFxuICBCTFVFVE9PVEhfU0NBTjogJ2FuZHJvaWQucGVybWlzc2lvbi5CTFVFVE9PVEhfU0NBTicsXG4gIEJMVUVUT09USF9BRFZFUlRJU0U6ICdhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIX0FEVkVSVElTRScsXG4gIEFDQ0VTU19NRURJQV9MT0NBVElPTjogJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTUVESUFfTE9DQVRJT04nLFxuICBBQ0NFUFRfSEFORE9WRVI6ICdhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVBUX0hBTkRPVkVSJyxcbiAgQUNUSVZJVFlfUkVDT0dOSVRJT046ICdhbmRyb2lkLnBlcm1pc3Npb24uQUNUSVZJVFlfUkVDT0dOSVRJT04nLFxuICBBTlNXRVJfUEhPTkVfQ0FMTFM6ICdhbmRyb2lkLnBlcm1pc3Npb24uQU5TV0VSX1BIT05FX0NBTExTJyxcbiAgUkVBRF9QSE9ORV9OVU1CRVJTOiAnYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfUEhPTkVfTlVNQkVSUycsXG4gIFVXQl9SQU5HSU5HOiAnYW5kcm9pZC5wZXJtaXNzaW9uLlVXQl9SQU5HSU5HJyxcbiAgUE9TVF9OT1RJRklDQVRJT05TOiAnYW5kcm9pZC5wZXJtaXNzaW9uLlBPU1RfTk9USUZJQ0FUSU9OUycsXG4gIE5FQVJCWV9XSUZJX0RFVklDRVM6ICdhbmRyb2lkLnBlcm1pc3Npb24uTkVBUkJZX1dJRklfREVWSUNFUycsXG59KTtcblxuLyoqXG4gKiBgUGVybWlzc2lvbnNBbmRyb2lkYCBwcm92aWRlcyBhY2Nlc3MgdG8gQW5kcm9pZCBNJ3MgbmV3IHBlcm1pc3Npb25zIG1vZGVsLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3Blcm1pc3Npb25zYW5kcm9pZFxuICovXG5cbmNsYXNzIFBlcm1pc3Npb25zQW5kcm9pZCB7XG4gIFBFUk1JU1NJT05TOiB7fFxuICAgIEFDQ0VQVF9IQU5ET1ZFUjogc3RyaW5nLFxuICAgIEFDQ0VTU19CQUNLR1JPVU5EX0xPQ0FUSU9OOiBzdHJpbmcsXG4gICAgQUNDRVNTX0NPQVJTRV9MT0NBVElPTjogc3RyaW5nLFxuICAgIEFDQ0VTU19GSU5FX0xPQ0FUSU9OOiBzdHJpbmcsXG4gICAgQUNDRVNTX01FRElBX0xPQ0FUSU9OOiBzdHJpbmcsXG4gICAgQUNUSVZJVFlfUkVDT0dOSVRJT046IHN0cmluZyxcbiAgICBBRERfVk9JQ0VNQUlMOiBzdHJpbmcsXG4gICAgUkVBRF9WT0lDRU1BSUw6IHN0cmluZyxcbiAgICBXUklURV9WT0lDRU1BSUw6IHN0cmluZyxcbiAgICBBTlNXRVJfUEhPTkVfQ0FMTFM6IHN0cmluZyxcbiAgICBCTFVFVE9PVEhfQURWRVJUSVNFOiBzdHJpbmcsXG4gICAgQkxVRVRPT1RIX0NPTk5FQ1Q6IHN0cmluZyxcbiAgICBCTFVFVE9PVEhfU0NBTjogc3RyaW5nLFxuICAgIEJPRFlfU0VOU09SUzogc3RyaW5nLFxuICAgIEJPRFlfU0VOU09SU19CQUNLR1JPVU5EOiBzdHJpbmcsXG4gICAgQ0FMTF9QSE9ORTogc3RyaW5nLFxuICAgIENBTUVSQTogc3RyaW5nLFxuICAgIEdFVF9BQ0NPVU5UUzogc3RyaW5nLFxuICAgIE5FQVJCWV9XSUZJX0RFVklDRVM6IHN0cmluZyxcbiAgICBQT1NUX05PVElGSUNBVElPTlM6IHN0cmluZyxcbiAgICBQUk9DRVNTX09VVEdPSU5HX0NBTExTOiBzdHJpbmcsXG4gICAgUkVBRF9DQUxFTkRBUjogc3RyaW5nLFxuICAgIFJFQURfQ0FMTF9MT0c6IHN0cmluZyxcbiAgICBSRUFEX0NPTlRBQ1RTOiBzdHJpbmcsXG4gICAgUkVBRF9FWFRFUk5BTF9TVE9SQUdFOiBzdHJpbmcsXG4gICAgUkVBRF9NRURJQV9JTUFHRVM6IHN0cmluZyxcbiAgICBSRUFEX01FRElBX1ZJREVPOiBzdHJpbmcsXG4gICAgUkVBRF9NRURJQV9BVURJTzogc3RyaW5nLFxuICAgIFJFQURfTUVESUFfVklTVUFMX1VTRVJfU0VMRUNURUQ6IHN0cmluZyxcbiAgICBSRUFEX1BIT05FX05VTUJFUlM6IHN0cmluZyxcbiAgICBSRUFEX1BIT05FX1NUQVRFOiBzdHJpbmcsXG4gICAgUkVBRF9TTVM6IHN0cmluZyxcbiAgICBSRUNFSVZFX01NUzogc3RyaW5nLFxuICAgIFJFQ0VJVkVfU01TOiBzdHJpbmcsXG4gICAgUkVDRUlWRV9XQVBfUFVTSDogc3RyaW5nLFxuICAgIFJFQ09SRF9BVURJTzogc3RyaW5nLFxuICAgIFNFTkRfU01TOiBzdHJpbmcsXG4gICAgVVNFX1NJUDogc3RyaW5nLFxuICAgIFVXQl9SQU5HSU5HOiBzdHJpbmcsXG4gICAgV1JJVEVfQ0FMRU5EQVI6IHN0cmluZyxcbiAgICBXUklURV9DQUxMX0xPRzogc3RyaW5nLFxuICAgIFdSSVRFX0NPTlRBQ1RTOiBzdHJpbmcsXG4gICAgV1JJVEVfRVhURVJOQUxfU1RPUkFHRTogc3RyaW5nLFxuICB8fSA9IFBFUk1JU1NJT05TO1xuICBSRVNVTFRTOiB7fFxuICAgIERFTklFRDogJ2RlbmllZCcsXG4gICAgR1JBTlRFRDogJ2dyYW50ZWQnLFxuICAgIE5FVkVSX0FTS19BR0FJTjogJ25ldmVyX2Fza19hZ2FpbicsXG4gIHx9ID0gUEVSTUlTU0lPTl9SRVFVRVNUX1JFU1VMVDtcblxuICAvKipcbiAgICogREVQUkVDQVRFRCAtIHVzZSBjaGVja1xuICAgKlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBib29sZWFuIHZhbHVlIGFzIHRvIHdoZXRoZXIgdGhlIHNwZWNpZmllZFxuICAgKiBwZXJtaXNzaW9ucyBoYXMgYmVlbiBncmFudGVkXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBjaGVja1Blcm1pc3Npb24ocGVybWlzc2lvbjogUGVybWlzc2lvblR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnXCJQZXJtaXNzaW9uc0FuZHJvaWQuY2hlY2tQZXJtaXNzaW9uXCIgaXMgZGVwcmVjYXRlZC4gVXNlIFwiUGVybWlzc2lvbnNBbmRyb2lkLmNoZWNrXCIgaW5zdGVhZCcsXG4gICAgKTtcbiAgICBpZiAoUGxhdGZvcm0uT1MgIT09ICdhbmRyb2lkJykge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnXCJQZXJtaXNzaW9uc0FuZHJvaWRcIiBtb2R1bGUgd29ya3Mgb25seSBmb3IgQW5kcm9pZCBwbGF0Zm9ybS4nLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cblxuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZCxcbiAgICAgICdQZXJtaXNzaW9uc0FuZHJvaWQgaXMgbm90IGluc3RhbGxlZCBjb3JyZWN0bHkuJyxcbiAgICApO1xuXG4gICAgcmV0dXJuIE5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZC5jaGVja1Blcm1pc3Npb24ocGVybWlzc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIGEgYm9vbGVhbiB2YWx1ZSBhcyB0byB3aGV0aGVyIHRoZSBzcGVjaWZpZWRcbiAgICogcGVybWlzc2lvbnMgaGFzIGJlZW4gZ3JhbnRlZFxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wZXJtaXNzaW9uc2FuZHJvaWQjY2hlY2tcbiAgICovXG4gIGNoZWNrKHBlcm1pc3Npb246IFBlcm1pc3Npb25UeXBlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9PSAnYW5kcm9pZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1wiUGVybWlzc2lvbnNBbmRyb2lkXCIgbW9kdWxlIHdvcmtzIG9ubHkgZm9yIEFuZHJvaWQgcGxhdGZvcm0uJyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICBOYXRpdmVQZXJtaXNzaW9uc0FuZHJvaWQsXG4gICAgICAnUGVybWlzc2lvbnNBbmRyb2lkIGlzIG5vdCBpbnN0YWxsZWQgY29ycmVjdGx5LicsXG4gICAgKTtcblxuICAgIHJldHVybiBOYXRpdmVQZXJtaXNzaW9uc0FuZHJvaWQuY2hlY2tQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURUQgLSB1c2UgcmVxdWVzdFxuICAgKlxuICAgKiBQcm9tcHRzIHRoZSB1c2VyIHRvIGVuYWJsZSBhIHBlcm1pc3Npb24gYW5kIHJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byBhXG4gICAqIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGFsbG93ZWQgb3IgZGVuaWVkIHRoZSByZXF1ZXN0XG4gICAqXG4gICAqIElmIHRoZSBvcHRpb25hbCByYXRpb25hbGUgYXJndW1lbnQgaXMgaW5jbHVkZWQgKHdoaWNoIGlzIGFuIG9iamVjdCB3aXRoIGFcbiAgICogYHRpdGxlYCBhbmQgYG1lc3NhZ2VgKSwgdGhpcyBmdW5jdGlvbiBjaGVja3Mgd2l0aCB0aGUgT1Mgd2hldGhlciBpdCBpc1xuICAgKiBuZWNlc3NhcnkgdG8gc2hvdyBhIGRpYWxvZyBleHBsYWluaW5nIHdoeSB0aGUgcGVybWlzc2lvbiBpcyBuZWVkZWRcbiAgICogKGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3RyYWluaW5nL3Blcm1pc3Npb25zL3JlcXVlc3RpbmcjZXhwbGFpbilcbiAgICogYW5kIHRoZW4gc2hvd3MgdGhlIHN5c3RlbSBwZXJtaXNzaW9uIGRpYWxvZ1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oXG4gICAgcGVybWlzc2lvbjogUGVybWlzc2lvblR5cGUsXG4gICAgcmF0aW9uYWxlPzogUmF0aW9uYWxlLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnXCJQZXJtaXNzaW9uc0FuZHJvaWQucmVxdWVzdFBlcm1pc3Npb25cIiBpcyBkZXByZWNhdGVkLiBVc2UgXCJQZXJtaXNzaW9uc0FuZHJvaWQucmVxdWVzdFwiIGluc3RlYWQnLFxuICAgICk7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9PSAnYW5kcm9pZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1wiUGVybWlzc2lvbnNBbmRyb2lkXCIgbW9kdWxlIHdvcmtzIG9ubHkgZm9yIEFuZHJvaWQgcGxhdGZvcm0uJyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdChwZXJtaXNzaW9uLCByYXRpb25hbGUpO1xuICAgIHJldHVybiByZXNwb25zZSA9PT0gdGhpcy5SRVNVTFRTLkdSQU5URUQ7XG4gIH1cblxuICAvKipcbiAgICogUHJvbXB0cyB0aGUgdXNlciB0byBlbmFibGUgYSBwZXJtaXNzaW9uIGFuZCByZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYVxuICAgKiBzdHJpbmcgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGFsbG93ZWQgb3IgZGVuaWVkIHRoZSByZXF1ZXN0XG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3Blcm1pc3Npb25zYW5kcm9pZCNyZXF1ZXN0XG4gICAqL1xuICBhc3luYyByZXF1ZXN0KFxuICAgIHBlcm1pc3Npb246IFBlcm1pc3Npb25UeXBlLFxuICAgIHJhdGlvbmFsZT86IFJhdGlvbmFsZSxcbiAgKTogUHJvbWlzZTxQZXJtaXNzaW9uU3RhdHVzPiB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9PSAnYW5kcm9pZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1wiUGVybWlzc2lvbnNBbmRyb2lkXCIgbW9kdWxlIHdvcmtzIG9ubHkgZm9yIEFuZHJvaWQgcGxhdGZvcm0uJyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuUkVTVUxUUy5ERU5JRUQpO1xuICAgIH1cblxuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZCxcbiAgICAgICdQZXJtaXNzaW9uc0FuZHJvaWQgaXMgbm90IGluc3RhbGxlZCBjb3JyZWN0bHkuJyxcbiAgICApO1xuXG4gICAgaWYgKHJhdGlvbmFsZSkge1xuICAgICAgY29uc3Qgc2hvdWxkU2hvd1JhdGlvbmFsZSA9XG4gICAgICAgIGF3YWl0IE5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZC5zaG91bGRTaG93UmVxdWVzdFBlcm1pc3Npb25SYXRpb25hbGUoXG4gICAgICAgICAgcGVybWlzc2lvbixcbiAgICAgICAgKTtcblxuICAgICAgaWYgKHNob3VsZFNob3dSYXRpb25hbGUgJiYgISFOYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5yYXRpb25hbGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBOYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZC5zaG93QWxlcnQoXG4gICAgICAgICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1leGFjdF0gKD49MC4xMTEuMCBzaXRlPXJlYWN0X25hdGl2ZV9mYilcbiAgICAgICAgICAgICAqIFRoaXMgY29tbWVudCBzdXBwcmVzc2VzIGFuIGVycm9yIGZvdW5kIHdoZW4gRmxvdyB2MC4xMTEgd2FzXG4gICAgICAgICAgICAgKiBkZXBsb3llZC4gVG8gc2VlIHRoZSBlcnJvciwgZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAoKSA9PiByZWplY3QobmV3IEVycm9yKCdFcnJvciBzaG93aW5nIHJhdGlvbmFsZScpKSxcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgIHJlc29sdmUoTmF0aXZlUGVybWlzc2lvbnNBbmRyb2lkLnJlcXVlc3RQZXJtaXNzaW9uKHBlcm1pc3Npb24pKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIE5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZC5yZXF1ZXN0UGVybWlzc2lvbihwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9tcHRzIHRoZSB1c2VyIHRvIGVuYWJsZSBtdWx0aXBsZSBwZXJtaXNzaW9ucyBpbiB0aGUgc2FtZSBkaWFsb2cgYW5kXG4gICAqIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHBlcm1pc3Npb25zIGFzIGtleXMgYW5kIHN0cmluZ3MgYXMgdmFsdWVzXG4gICAqIGluZGljYXRpbmcgd2hldGhlciB0aGUgdXNlciBhbGxvd2VkIG9yIGRlbmllZCB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wZXJtaXNzaW9uc2FuZHJvaWQjcmVxdWVzdG11bHRpcGxlXG4gICAqL1xuICByZXF1ZXN0TXVsdGlwbGUoXG4gICAgcGVybWlzc2lvbnM6IEFycmF5PFBlcm1pc3Npb25UeXBlPixcbiAgKTogUHJvbWlzZTx7W3Blcm1pc3Npb246IFBlcm1pc3Npb25UeXBlXTogUGVybWlzc2lvblN0YXR1cywgLi4ufT4ge1xuICAgIGlmIChQbGF0Zm9ybS5PUyAhPT0gJ2FuZHJvaWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdcIlBlcm1pc3Npb25zQW5kcm9pZFwiIG1vZHVsZSB3b3JrcyBvbmx5IGZvciBBbmRyb2lkIHBsYXRmb3JtLicsXG4gICAgICApO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxuXG4gICAgaW52YXJpYW50KFxuICAgICAgTmF0aXZlUGVybWlzc2lvbnNBbmRyb2lkLFxuICAgICAgJ1Blcm1pc3Npb25zQW5kcm9pZCBpcyBub3QgaW5zdGFsbGVkIGNvcnJlY3RseS4nLFxuICAgICk7XG4gICAgcmV0dXJuIE5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZC5yZXF1ZXN0TXVsdGlwbGVQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7XG4gIH1cbn1cblxuY29uc3QgUGVybWlzc2lvbnNBbmRyb2lkSW5zdGFuY2U6IFBlcm1pc3Npb25zQW5kcm9pZCA9IG5ldyBQZXJtaXNzaW9uc0FuZHJvaWQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQZXJtaXNzaW9uc0FuZHJvaWRJbnN0YW5jZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZCc7XG5pbXBvcnQgTmF0aXZlUGVybWlzc2lvbnNBbmRyb2lkIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlUGVybWlzc2lvbnNBbmRyb2lkJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3RcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuLy8gVE9ETzogVXNlIHByb3BlciBlbnVtIHR5cGVzLlxuZXhwb3J0IHR5cGUgUGVybWlzc2lvblN0YXR1cyA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25UeXBlID0gc3RyaW5nO1xuLypcbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25TdGF0dXMgPSAnZ3JhbnRlZCcgfCAnZGVuaWVkJyB8ICduZXZlcl9hc2tfYWdhaW4nO1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvblR5cGUgPVxuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DQUxFTkRBUidcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0NBTEVOREFSJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uQ0FNRVJBJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DT05UQUNUUydcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0NPTlRBQ1RTJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FDQ09VTlRTJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0JBQ0tHUk9VTkRfTE9DQVRJT04nXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfRklORV9MT0NBVElPTidcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DT0FSU0VfTE9DQVRJT04nXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfQVVESU8nXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX1BIT05FX1NUQVRFJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uQ0FMTF9QSE9ORSdcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfQ0FMTF9MT0cnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9DQUxMX0xPRydcbiAgfCAnY29tLmFuZHJvaWQudm9pY2VtYWlsLnBlcm1pc3Npb24uQUREX1ZPSUNFTUFJTCdcbiAgfCAnY29tLmFuZHJvaWQudm9pY2VtYWlsLnBlcm1pc3Npb24uUkVBRF9WT0lDRU1BSUwnXG4gIHwgJ2NvbS5hbmRyb2lkLnZvaWNlbWFpbC5wZXJtaXNzaW9uLldSSVRFX1ZPSUNFTUFJTCdcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLlVTRV9TSVAnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5QUk9DRVNTX09VVEdPSU5HX0NBTExTJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uQk9EWV9TRU5TT1JTJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uQk9EWV9TRU5TT1JTX0JBQ0tHUk9VTkQnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5TRU5EX1NNUydcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfU01TJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9TTVMnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX1dBUF9QVVNIJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVDRUlWRV9NTVMnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX01FRElBX0lNQUdFUycsXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX01FRElBX1ZJREVPJyxcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfTUVESUFfQVVESU8nLFxuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9NRURJQV9WSVNVQUxfVVNFUl9TRUxFQ1RFRCdcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0VYVEVSTkFMX1NUT1JBR0UnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5CTFVFVE9PVEhfQ09OTkVDVCdcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USF9TQ0FOJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIX0FEVkVSVElTRSdcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19NRURJQV9MT0NBVElPTidcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VQVF9IQU5ET1ZFUidcbiAgfCAnYW5kcm9pZC5wZXJtaXNzaW9uLkFDVElWSVRZX1JFQ09HTklUSU9OJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uQU5TV0VSX1BIT05FX0NBTExTJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9QSE9ORV9OVU1CRVJTJ1xuICB8ICdhbmRyb2lkLnBlcm1pc3Npb24uVVdCX1JBTkdJTkcnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5QT1NUX05PVElGSUNBVElPTlMnXG4gIHwgJ2FuZHJvaWQucGVybWlzc2lvbi5ORUFSQllfV0lGSV9ERVZJQ0VTJztcbiovXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK2NoZWNrUGVybWlzc2lvbjogKHBlcm1pc3Npb246IFBlcm1pc3Npb25UeXBlKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICArcmVxdWVzdFBlcm1pc3Npb246IChwZXJtaXNzaW9uOiBQZXJtaXNzaW9uVHlwZSkgPT4gUHJvbWlzZTxQZXJtaXNzaW9uU3RhdHVzPjtcbiAgK3Nob3VsZFNob3dSZXF1ZXN0UGVybWlzc2lvblJhdGlvbmFsZTogKFxuICAgIHBlcm1pc3Npb246IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICArcmVxdWVzdE11bHRpcGxlUGVybWlzc2lvbnM6IChcbiAgICBwZXJtaXNzaW9uczogQXJyYXk8UGVybWlzc2lvblR5cGU+LFxuICApID0+IFByb21pc2U8e1twZXJtaXNzaW9uOiBQZXJtaXNzaW9uVHlwZV06IFBlcm1pc3Npb25TdGF0dXMsIC4uLn0+O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ1Blcm1pc3Npb25zQW5kcm9pZCcpOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRTdWJzY3JpcHRpb259IGZyb20gJy4uL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbmltcG9ydCBOYXRpdmVFdmVudEVtaXR0ZXIgZnJvbSAnLi4vRXZlbnRFbWl0dGVyL05hdGl2ZUV2ZW50RW1pdHRlcic7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyBmcm9tICcuL05hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcblxudHlwZSBOYXRpdmVQdXNoTm90aWZpY2F0aW9uSU9TRXZlbnREZWZpbml0aW9ucyA9IHtcbiAgcmVtb3RlTm90aWZpY2F0aW9uUmVjZWl2ZWQ6IFtcbiAgICB7XG4gICAgICBub3RpZmljYXRpb25JZDogc3RyaW5nLFxuICAgICAgcmVtb3RlOiBib29sZWFuLFxuICAgICAgLi4uXG4gICAgfSxcbiAgXSxcbiAgcmVtb3RlTm90aWZpY2F0aW9uc1JlZ2lzdGVyZWQ6IFtcbiAgICB7XG4gICAgICBkZXZpY2VUb2tlbj86ID9zdHJpbmcsXG4gICAgICAuLi5cbiAgICB9LFxuICBdLFxuICByZW1vdGVOb3RpZmljYXRpb25SZWdpc3RyYXRpb25FcnJvcjogW1xuICAgIHtcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGNvZGU6IG51bWJlcixcbiAgICAgIGRldGFpbHM6IHsuLi59LFxuICAgIH0sXG4gIF0sXG4gIGxvY2FsTm90aWZpY2F0aW9uUmVjZWl2ZWQ6IFt7Li4ufV0sXG59O1xuXG5jb25zdCBQdXNoTm90aWZpY2F0aW9uRW1pdHRlciA9XG4gIG5ldyBOYXRpdmVFdmVudEVtaXR0ZXI8TmF0aXZlUHVzaE5vdGlmaWNhdGlvbklPU0V2ZW50RGVmaW5pdGlvbnM+KFxuICAgIC8vIFQ4ODcxNTA2MzogTmF0aXZlRXZlbnRFbWl0dGVyIG9ubHkgdXNlZCB0aGlzIHBhcmFtZXRlciBvbiBpT1MuIE5vdyBpdCB1c2VzIGl0IG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHRoaXMgY29kZSB3YXMgbW9kaWZpZWQgYXV0b21hdGljYWxseSB0byBwcmVzZXJ2ZSBpdHMgYmVoYXZpb3JcbiAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG5hdGl2ZSBtb2R1bGUgb24gb3RoZXIgcGxhdGZvcm1zLCBwbGVhc2UgcmVtb3ZlIHRoaXMgY29uZGl0aW9uIGFuZCB0ZXN0IGl0cyBiZWhhdmlvclxuICAgIFBsYXRmb3JtLk9TICE9PSAnaW9zJyA/IG51bGwgOiBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyxcbiAgKTtcblxuY29uc3QgX25vdGlmSGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgdm9pZCB8IEV2ZW50U3Vic2NyaXB0aW9uPigpO1xuXG5jb25zdCBERVZJQ0VfTk9USUZfRVZFTlQgPSAncmVtb3RlTm90aWZpY2F0aW9uUmVjZWl2ZWQnO1xuY29uc3QgTk9USUZfUkVHSVNURVJfRVZFTlQgPSAncmVtb3RlTm90aWZpY2F0aW9uc1JlZ2lzdGVyZWQnO1xuY29uc3QgTk9USUZfUkVHSVNUUkFUSU9OX0VSUk9SX0VWRU5UID0gJ3JlbW90ZU5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbkVycm9yJztcbmNvbnN0IERFVklDRV9MT0NBTF9OT1RJRl9FVkVOVCA9ICdsb2NhbE5vdGlmaWNhdGlvblJlY2VpdmVkJztcblxuZXhwb3J0IHR5cGUgQ29udGVudEF2YWlsYWJsZSA9IDEgfCBudWxsIHwgdm9pZDtcblxuZXhwb3J0IHR5cGUgRmV0Y2hSZXN1bHQgPSB7XG4gIE5ld0RhdGE6IHN0cmluZyxcbiAgTm9EYXRhOiBzdHJpbmcsXG4gIFJlc3VsdEZhaWxlZDogc3RyaW5nLFxuICAuLi5cbn07XG5cbi8qKlxuICogQW4gZXZlbnQgZW1pdHRlZCBieSBQdXNoTm90aWZpY2F0aW9uSU9TLlxuICovXG5leHBvcnQgdHlwZSBQdXNoTm90aWZpY2F0aW9uRXZlbnROYW1lID0gJEtleXM8e1xuICAvKipcbiAgICogRmlyZWQgd2hlbiBhIHJlbW90ZSBub3RpZmljYXRpb24gaXMgcmVjZWl2ZWQuIFRoZSBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZFxuICAgKiB3aXRoIGFuIGluc3RhbmNlIG9mIGBQdXNoTm90aWZpY2F0aW9uSU9TYC4gVGhpcyB3aWxsIGhhbmRsZSBub3RpZmljYXRpb25zXG4gICAqIHRoYXQgYXJyaXZlIGluIHRoZSBmb3JlZ3JvdW5kIG9yIHdlcmUgdGFwcGVkIHRvIG9wZW4gdGhlIGFwcCBmcm9tIHRoZVxuICAgKiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgbm90aWZpY2F0aW9uOiBzdHJpbmcsXG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIGEgbG9jYWwgbm90aWZpY2F0aW9uIGlzIHJlY2VpdmVkLiBUaGUgaGFuZGxlciB3aWxsIGJlIGludm9rZWRcbiAgICogd2l0aCBhbiBpbnN0YW5jZSBvZiBgUHVzaE5vdGlmaWNhdGlvbklPU2AuIFRoaXMgd2lsbCBoYW5kbGUgbm90aWZpY2F0aW9uc1xuICAgKiB0aGF0IGFycml2ZSBpbiB0aGUgZm9yZWdyb3VuZCBvciB3ZXJlIHRhcHBlZCB0byBvcGVuIHRoZSBhcHAgZnJvbSB0aGVcbiAgICogYmFja2dyb3VuZC5cbiAgICovXG4gIGxvY2FsTm90aWZpY2F0aW9uOiBzdHJpbmcsXG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIHRoZSB1c2VyIHJlZ2lzdGVycyBmb3IgcmVtb3RlIG5vdGlmaWNhdGlvbnMuIFRoZSBoYW5kbGVyIHdpbGwgYmVcbiAgICogaW52b2tlZCB3aXRoIGEgaGV4IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRldmljZVRva2VuLlxuICAgKi9cbiAgcmVnaXN0ZXI6IHN0cmluZyxcbiAgLyoqXG4gICAqIEZpcmVkIHdoZW4gdGhlIHVzZXIgZmFpbHMgdG8gcmVnaXN0ZXIgZm9yIHJlbW90ZSBub3RpZmljYXRpb25zLiBUeXBpY2FsbHlcbiAgICogb2NjdXJzIGR1ZSB0byBBUE5TIGlzc3VlcyBvciBpZiB0aGUgZGV2aWNlIGlzIGEgc2ltdWxhdG9yLiBUaGUgaGFuZGxlclxuICAgKiB3aWxsIGJlIGludm9rZWQgd2l0aCB7bWVzc2FnZTogc3RyaW5nLCBjb2RlOiBudW1iZXIsIGRldGFpbHM6IGFueX0uXG4gICAqL1xuICByZWdpc3RyYXRpb25FcnJvcjogc3RyaW5nLFxuICAuLi5cbn0+O1xuXG4vKipcbiAqXG4gKiBIYW5kbGUgbm90aWZpY2F0aW9ucyBmb3IgeW91ciBhcHAsIGluY2x1ZGluZyBzY2hlZHVsaW5nIGFuZCBwZXJtaXNzaW9ucy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zXG4gKi9cbmNsYXNzIFB1c2hOb3RpZmljYXRpb25JT1Mge1xuICBfZGF0YTogT2JqZWN0O1xuICBfYWxlcnQ6IHN0cmluZyB8IE9iamVjdDtcbiAgX3NvdW5kOiBzdHJpbmc7XG4gIF9jYXRlZ29yeTogc3RyaW5nO1xuICBfY29udGVudEF2YWlsYWJsZTogQ29udGVudEF2YWlsYWJsZTtcbiAgX2JhZGdlQ291bnQ6IG51bWJlcjtcbiAgX25vdGlmaWNhdGlvbklkOiBzdHJpbmc7XG4gIF9pc1JlbW90ZTogYm9vbGVhbjtcbiAgX3JlbW90ZU5vdGlmaWNhdGlvbkNvbXBsZXRlQ2FsbGJhY2tDYWxsZWQ6IGJvb2xlYW47XG4gIF90aHJlYWRJRDogc3RyaW5nO1xuXG4gIHN0YXRpYyBGZXRjaFJlc3VsdDogRmV0Y2hSZXN1bHQgPSB7XG4gICAgTmV3RGF0YTogJ1VJQmFja2dyb3VuZEZldGNoUmVzdWx0TmV3RGF0YScsXG4gICAgTm9EYXRhOiAnVUlCYWNrZ3JvdW5kRmV0Y2hSZXN1bHROb0RhdGEnLFxuICAgIFJlc3VsdEZhaWxlZDogJ1VJQmFja2dyb3VuZEZldGNoUmVzdWx0RmFpbGVkJyxcbiAgfTtcblxuICAvKipcbiAgICogU2NoZWR1bGVzIGEgbG9jYWwgbm90aWZpY2F0aW9uIGZvciBpbW1lZGlhdGUgcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI3ByZXNlbnRsb2NhbG5vdGlmaWNhdGlvblxuICAgKi9cbiAgc3RhdGljIHByZXNlbnRMb2NhbE5vdGlmaWNhdGlvbihkZXRhaWxzOiBPYmplY3QpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyxcbiAgICAgICdQdXNoTm90aWZpY2F0aW9uTWFuYWdlciBpcyBub3QgYXZhaWxhYmxlLicsXG4gICAgKTtcbiAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5wcmVzZW50TG9jYWxOb3RpZmljYXRpb24oZGV0YWlscyk7XG4gIH1cblxuICAvKipcbiAgICogU2NoZWR1bGVzIGEgbG9jYWwgbm90aWZpY2F0aW9uIGZvciBmdXR1cmUgcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI3NjaGVkdWxlbG9jYWxub3RpZmljYXRpb25cbiAgICovXG4gIHN0YXRpYyBzY2hlZHVsZUxvY2FsTm90aWZpY2F0aW9uKGRldGFpbHM6IE9iamVjdCk6IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLnNjaGVkdWxlTG9jYWxOb3RpZmljYXRpb24oZGV0YWlscyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBhbGwgc2NoZWR1bGVkIGxvY2FsIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3B1c2hub3RpZmljYXRpb25pb3MjY2FuY2VsYWxsbG9jYWxub3RpZmljYXRpb25zXG4gICAqL1xuICBzdGF0aWMgY2FuY2VsQWxsTG9jYWxOb3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLmNhbmNlbEFsbExvY2FsTm90aWZpY2F0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGRlbGl2ZXJlZCBub3RpZmljYXRpb25zIGZyb20gTm90aWZpY2F0aW9uIENlbnRlci5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvcHVzaG5vdGlmaWNhdGlvbmlvcyNyZW1vdmVhbGxkZWxpdmVyZWRub3RpZmljYXRpb25zXG4gICAqL1xuICBzdGF0aWMgcmVtb3ZlQWxsRGVsaXZlcmVkTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyxcbiAgICAgICdQdXNoTm90aWZpY2F0aW9uTWFuYWdlciBpcyBub3QgYXZhaWxhYmxlLicsXG4gICAgKTtcbiAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5yZW1vdmVBbGxEZWxpdmVyZWROb3RpZmljYXRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgYSBsaXN0IG9mIHRoZSBhcHDigJlzIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGRpc3BsYXllZFxuICAgKiBpbiBOb3RpZmljYXRpb24gQ2VudGVyLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI2dldGRlbGl2ZXJlZG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHN0YXRpYyBnZXREZWxpdmVyZWROb3RpZmljYXRpb25zKFxuICAgIGNhbGxiYWNrOiAobm90aWZpY2F0aW9uczogQXJyYXk8T2JqZWN0PikgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgaW52YXJpYW50KFxuICAgICAgTmF0aXZlUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXJJT1MsXG4gICAgICAnUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXIgaXMgbm90IGF2YWlsYWJsZS4nLFxuICAgICk7XG4gICAgTmF0aXZlUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXJJT1MuZ2V0RGVsaXZlcmVkTm90aWZpY2F0aW9ucyhjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIG5vdGlmaWNhdGlvbnMgZnJvbSBOb3RpZmljYXRpb24gQ2VudGVyLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI3JlbW92ZWRlbGl2ZXJlZG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHN0YXRpYyByZW1vdmVEZWxpdmVyZWROb3RpZmljYXRpb25zKGlkZW50aWZpZXJzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgaW52YXJpYW50KFxuICAgICAgTmF0aXZlUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXJJT1MsXG4gICAgICAnUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXIgaXMgbm90IGF2YWlsYWJsZS4nLFxuICAgICk7XG4gICAgTmF0aXZlUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXJJT1MucmVtb3ZlRGVsaXZlcmVkTm90aWZpY2F0aW9ucyhpZGVudGlmaWVycyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYmFkZ2UgbnVtYmVyIGZvciB0aGUgYXBwIGljb24gb24gdGhlIEhvbWUgU2NyZWVuLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI3NldGFwcGxpY2F0aW9uaWNvbmJhZGdlbnVtYmVyXG4gICAqL1xuICBzdGF0aWMgc2V0QXBwbGljYXRpb25JY29uQmFkZ2VOdW1iZXIobnVtYmVyOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyxcbiAgICAgICdQdXNoTm90aWZpY2F0aW9uTWFuYWdlciBpcyBub3QgYXZhaWxhYmxlLicsXG4gICAgKTtcbiAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5zZXRBcHBsaWNhdGlvbkljb25CYWRnZU51bWJlcihudW1iZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgYmFkZ2UgbnVtYmVyIGZvciB0aGUgYXBwIGljb24gb24gdGhlIEhvbWUgU2NyZWVuLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI2dldGFwcGxpY2F0aW9uaWNvbmJhZGdlbnVtYmVyXG4gICAqL1xuICBzdGF0aWMgZ2V0QXBwbGljYXRpb25JY29uQmFkZ2VOdW1iZXIoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgaW52YXJpYW50KFxuICAgICAgTmF0aXZlUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXJJT1MsXG4gICAgICAnUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXIgaXMgbm90IGF2YWlsYWJsZS4nLFxuICAgICk7XG4gICAgTmF0aXZlUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXJJT1MuZ2V0QXBwbGljYXRpb25JY29uQmFkZ2VOdW1iZXIoY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYW55IHNjaGVkdWxlZCBsb2NhbCBub3RpZmljYXRpb25zIHdoaWNoIG1hdGNoIHRoZSBmaWVsZHMgaW4gdGhlXG4gICAqIHByb3ZpZGVkIGB1c2VySW5mb2AuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3B1c2hub3RpZmljYXRpb25pb3MjY2FuY2VsbG9jYWxub3RpZmljYXRpb25cbiAgICovXG4gIHN0YXRpYyBjYW5jZWxMb2NhbE5vdGlmaWNhdGlvbnModXNlckluZm86IE9iamVjdCk6IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLmNhbmNlbExvY2FsTm90aWZpY2F0aW9ucyh1c2VySW5mbyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBsb2NhbCBub3RpZmljYXRpb25zIHRoYXQgYXJlIGN1cnJlbnRseSBzY2hlZHVsZWQuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3B1c2hub3RpZmljYXRpb25pb3MjZ2V0c2NoZWR1bGVkbG9jYWxub3RpZmljYXRpb25zXG4gICAqL1xuICBzdGF0aWMgZ2V0U2NoZWR1bGVkTG9jYWxOb3RpZmljYXRpb25zKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLmdldFNjaGVkdWxlZExvY2FsTm90aWZpY2F0aW9ucyhjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgYSBsaXN0ZW5lciB0byBub3RpZmljYXRpb24gZXZlbnRzIGluY2x1ZGluZyBsb2NhbCBub3RpZmljYXRpb25zLFxuICAgKiByZW1vdGUgbm90aWZpY2F0aW9ucywgYW5kIG5vdGlmaWNhdGlvbiByZWdpc3RyYXRpb24gcmVzdWx0cy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvcHVzaG5vdGlmaWNhdGlvbmlvcyNhZGRldmVudGxpc3RlbmVyXG4gICAqL1xuICBzdGF0aWMgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBQdXNoTm90aWZpY2F0aW9uRXZlbnROYW1lLFxuICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICApOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlID09PSAnbm90aWZpY2F0aW9uJyB8fFxuICAgICAgICB0eXBlID09PSAncmVnaXN0ZXInIHx8XG4gICAgICAgIHR5cGUgPT09ICdyZWdpc3RyYXRpb25FcnJvcicgfHxcbiAgICAgICAgdHlwZSA9PT0gJ2xvY2FsTm90aWZpY2F0aW9uJyxcbiAgICAgICdQdXNoTm90aWZpY2F0aW9uSU9TIG9ubHkgc3VwcG9ydHMgYG5vdGlmaWNhdGlvbmAsIGByZWdpc3RlcmAsIGByZWdpc3RyYXRpb25FcnJvcmAsIGFuZCBgbG9jYWxOb3RpZmljYXRpb25gIGV2ZW50cycsXG4gICAgKTtcbiAgICBsZXQgbGlzdGVuZXI7XG4gICAgaWYgKHR5cGUgPT09ICdub3RpZmljYXRpb24nKSB7XG4gICAgICBsaXN0ZW5lciA9IFB1c2hOb3RpZmljYXRpb25FbWl0dGVyLmFkZExpc3RlbmVyKFxuICAgICAgICBERVZJQ0VfTk9USUZfRVZFTlQsXG4gICAgICAgIG5vdGlmRGF0YSA9PiB7XG4gICAgICAgICAgaGFuZGxlcihuZXcgUHVzaE5vdGlmaWNhdGlvbklPUyhub3RpZkRhdGEpKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnbG9jYWxOb3RpZmljYXRpb24nKSB7XG4gICAgICBsaXN0ZW5lciA9IFB1c2hOb3RpZmljYXRpb25FbWl0dGVyLmFkZExpc3RlbmVyKFxuICAgICAgICBERVZJQ0VfTE9DQUxfTk9USUZfRVZFTlQsXG4gICAgICAgIG5vdGlmRGF0YSA9PiB7XG4gICAgICAgICAgaGFuZGxlcihuZXcgUHVzaE5vdGlmaWNhdGlvbklPUyhub3RpZkRhdGEpKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAncmVnaXN0ZXInKSB7XG4gICAgICBsaXN0ZW5lciA9IFB1c2hOb3RpZmljYXRpb25FbWl0dGVyLmFkZExpc3RlbmVyKFxuICAgICAgICBOT1RJRl9SRUdJU1RFUl9FVkVOVCxcbiAgICAgICAgcmVnaXN0cmF0aW9uSW5mbyA9PiB7XG4gICAgICAgICAgaGFuZGxlcihyZWdpc3RyYXRpb25JbmZvLmRldmljZVRva2VuKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAncmVnaXN0cmF0aW9uRXJyb3InKSB7XG4gICAgICBsaXN0ZW5lciA9IFB1c2hOb3RpZmljYXRpb25FbWl0dGVyLmFkZExpc3RlbmVyKFxuICAgICAgICBOT1RJRl9SRUdJU1RSQVRJT05fRVJST1JfRVZFTlQsXG4gICAgICAgIGVycm9ySW5mbyA9PiB7XG4gICAgICAgICAgaGFuZGxlcihlcnJvckluZm8pO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgX25vdGlmSGFuZGxlcnMuc2V0KHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lci4gRG8gdGhpcyBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgIHRvIHByZXZlbnRcbiAgICogbWVtb3J5IGxlYWtzLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI3JlbW92ZWV2ZW50bGlzdGVuZXJcbiAgICovXG4gIHN0YXRpYyByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFB1c2hOb3RpZmljYXRpb25FdmVudE5hbWUpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlID09PSAnbm90aWZpY2F0aW9uJyB8fFxuICAgICAgICB0eXBlID09PSAncmVnaXN0ZXInIHx8XG4gICAgICAgIHR5cGUgPT09ICdyZWdpc3RyYXRpb25FcnJvcicgfHxcbiAgICAgICAgdHlwZSA9PT0gJ2xvY2FsTm90aWZpY2F0aW9uJyxcbiAgICAgICdQdXNoTm90aWZpY2F0aW9uSU9TIG9ubHkgc3VwcG9ydHMgYG5vdGlmaWNhdGlvbmAsIGByZWdpc3RlcmAsIGByZWdpc3RyYXRpb25FcnJvcmAsIGFuZCBgbG9jYWxOb3RpZmljYXRpb25gIGV2ZW50cycsXG4gICAgKTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IF9ub3RpZkhhbmRsZXJzLmdldCh0eXBlKTtcbiAgICBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xuICAgIF9ub3RpZkhhbmRsZXJzLmRlbGV0ZSh0eXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBub3RpZmljYXRpb24gcGVybWlzc2lvbnMgZnJvbSBpT1MsIHByb21wdGluZyB0aGUgdXNlciB3aXRoIGFcbiAgICogZGlhbG9nIGJveC4gQnkgZGVmYXVsdCwgaXQgd2lsbCByZXF1ZXN0IGFsbCBub3RpZmljYXRpb24gcGVybWlzc2lvbnMsIGJ1dFxuICAgKiB5b3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSB3aGljaCBwZXJtaXNzaW9ucyB0byByZXF1ZXN0LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI3JlcXVlc3RwZXJtaXNzaW9uc1xuICAgKi9cbiAgc3RhdGljIHJlcXVlc3RQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucz86IHtcbiAgICBhbGVydD86IGJvb2xlYW4sXG4gICAgYmFkZ2U/OiBib29sZWFuLFxuICAgIHNvdW5kPzogYm9vbGVhbixcbiAgICAuLi5cbiAgfSk6IFByb21pc2U8e1xuICAgIGFsZXJ0OiBib29sZWFuLFxuICAgIGJhZGdlOiBib29sZWFuLFxuICAgIHNvdW5kOiBib29sZWFuLFxuICAgIC4uLlxuICB9PiB7XG4gICAgbGV0IHJlcXVlc3RlZFBlcm1pc3Npb25zID0ge1xuICAgICAgYWxlcnQ6IHRydWUsXG4gICAgICBiYWRnZTogdHJ1ZSxcbiAgICAgIHNvdW5kOiB0cnVlLFxuICAgIH07XG4gICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICByZXF1ZXN0ZWRQZXJtaXNzaW9ucyA9IHtcbiAgICAgICAgYWxlcnQ6ICEhcGVybWlzc2lvbnMuYWxlcnQsXG4gICAgICAgIGJhZGdlOiAhIXBlcm1pc3Npb25zLmJhZGdlLFxuICAgICAgICBzb3VuZDogISFwZXJtaXNzaW9ucy5zb3VuZCxcbiAgICAgIH07XG4gICAgfVxuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIHJldHVybiBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5yZXF1ZXN0UGVybWlzc2lvbnMoXG4gICAgICByZXF1ZXN0ZWRQZXJtaXNzaW9ucyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgZm9yIGFsbCByZW1vdGUgbm90aWZpY2F0aW9ucyByZWNlaXZlZCB2aWEgQXBwbGUgUHVzaCBOb3RpZmljYXRpb25cbiAgICogc2VydmljZS4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGluIHJhcmUgY2lyY3Vtc3RhbmNlcyBvbmx5LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI2FiYW5kb25wZXJtaXNzaW9uc1xuICAgKi9cbiAgc3RhdGljIGFiYW5kb25QZXJtaXNzaW9ucygpOiB2b2lkIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyxcbiAgICAgICdQdXNoTm90aWZpY2F0aW9uTWFuYWdlciBpcyBub3QgYXZhaWxhYmxlLicsXG4gICAgKTtcbiAgICBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5hYmFuZG9uUGVybWlzc2lvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGljaCBwdXNoIHBlcm1pc3Npb25zIGFyZSBjdXJyZW50bHkgZW5hYmxlZC4gYGNhbGxiYWNrYCB3aWxsIGJlXG4gICAqIGludm9rZWQgd2l0aCBhIGBQZXJtaXNzaW9uc2Agb2JqZWN0LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI2NoZWNrcGVybWlzc2lvbnNcbiAgICovXG4gIHN0YXRpYyBjaGVja1Blcm1pc3Npb25zKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGludmFyaWFudCh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicsICdNdXN0IHByb3ZpZGUgYSB2YWxpZCBjYWxsYmFjaycpO1xuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLmNoZWNrUGVybWlzc2lvbnMoY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gZWl0aGVyIHRoZSBub3RpZmljYXRpb25cbiAgICogb2JqZWN0IGlmIHRoZSBhcHAgd2FzIGxhdW5jaGVkIGJ5IGEgcHVzaCBub3RpZmljYXRpb24sIG9yIGBudWxsYCBvdGhlcndpc2UuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3B1c2hub3RpZmljYXRpb25pb3MjZ2V0aW5pdGlhbG5vdGlmaWNhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldEluaXRpYWxOb3RpZmljYXRpb24oKTogUHJvbWlzZTw/UHVzaE5vdGlmaWNhdGlvbklPUz4ge1xuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIHJldHVybiBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5nZXRJbml0aWFsTm90aWZpY2F0aW9uKCkudGhlbihcbiAgICAgIG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiBub3RpZmljYXRpb24gJiYgbmV3IFB1c2hOb3RpZmljYXRpb25JT1Mobm90aWZpY2F0aW9uKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjdXJyZW50IG5vdGlmaWNhdGlvblxuICAgKiBhdXRob3JpemF0aW9uIHN0YXR1cy4gU2VlIFVOQXV0aG9yaXphdGlvblN0YXR1cyBmb3IgcG9zc2libGUgdmFsdWVzLlxuICAgKi9cbiAgc3RhdGljIGdldEF1dGhvcml6YXRpb25TdGF0dXMoXG4gICAgY2FsbGJhY2s6IChhdXRob3JpemF0aW9uU3RhdHVzOiBudW1iZXIpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuXG4gICAgTmF0aXZlUHVzaE5vdGlmaWNhdGlvbk1hbmFnZXJJT1MuZ2V0QXV0aG9yaXphdGlvblN0YXR1cyhjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogWW91IHdpbGwgbmV2ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSBgUHVzaE5vdGlmaWNhdGlvbklPU2AgeW91cnNlbGYuXG4gICAqIExpc3RlbmluZyB0byB0aGUgYG5vdGlmaWNhdGlvbmAgZXZlbnQgYW5kIGludm9raW5nXG4gICAqIGBnZXRJbml0aWFsTm90aWZpY2F0aW9uYCBpcyBzdWZmaWNpZW50LlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IobmF0aXZlTm90aWY6IE9iamVjdCkge1xuICAgIHRoaXMuX2RhdGEgPSB7fTtcbiAgICB0aGlzLl9yZW1vdGVOb3RpZmljYXRpb25Db21wbGV0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNSZW1vdGUgPSBuYXRpdmVOb3RpZi5yZW1vdGU7XG4gICAgaWYgKHRoaXMuX2lzUmVtb3RlKSB7XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25JZCA9IG5hdGl2ZU5vdGlmLm5vdGlmaWNhdGlvbklkO1xuICAgIH1cblxuICAgIGlmIChuYXRpdmVOb3RpZi5yZW1vdGUpIHtcbiAgICAgIC8vIEV4dHJhY3QgZGF0YSBmcm9tIEFwcGxlJ3MgYGFwc2AgZGljdCBhcyBkZWZpbmVkOlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvaW9zL2RvY3VtZW50YXRpb24vTmV0d29ya2luZ0ludGVybmV0L0NvbmNlcHR1YWwvUmVtb3RlTm90aWZpY2F0aW9uc1BHL0NoYXB0ZXJzL0FwcGxlUHVzaFNlcnZpY2VcbiAgICAgIE9iamVjdC5rZXlzKG5hdGl2ZU5vdGlmKS5mb3JFYWNoKG5vdGlmS2V5ID0+IHtcbiAgICAgICAgY29uc3Qgbm90aWZWYWwgPSBuYXRpdmVOb3RpZltub3RpZktleV07XG4gICAgICAgIGlmIChub3RpZktleSA9PT0gJ2FwcycpIHtcbiAgICAgICAgICB0aGlzLl9hbGVydCA9IG5vdGlmVmFsLmFsZXJ0O1xuICAgICAgICAgIHRoaXMuX3NvdW5kID0gbm90aWZWYWwuc291bmQ7XG4gICAgICAgICAgdGhpcy5fYmFkZ2VDb3VudCA9IG5vdGlmVmFsLmJhZGdlO1xuICAgICAgICAgIHRoaXMuX2NhdGVnb3J5ID0gbm90aWZWYWwuY2F0ZWdvcnk7XG4gICAgICAgICAgdGhpcy5fY29udGVudEF2YWlsYWJsZSA9IG5vdGlmVmFsWydjb250ZW50LWF2YWlsYWJsZSddO1xuICAgICAgICAgIHRoaXMuX3RocmVhZElEID0gbm90aWZWYWxbJ3RocmVhZC1pZCddO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2RhdGFbbm90aWZLZXldID0gbm90aWZWYWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMb2NhbCBub3RpZmljYXRpb25zIGFyZW4ndCBiZWluZyBzZW50IGRvd24gd2l0aCBgYXBzYCBkaWN0LlxuICAgICAgdGhpcy5fYmFkZ2VDb3VudCA9IG5hdGl2ZU5vdGlmLmFwcGxpY2F0aW9uSWNvbkJhZGdlTnVtYmVyO1xuICAgICAgdGhpcy5fc291bmQgPSBuYXRpdmVOb3RpZi5zb3VuZE5hbWU7XG4gICAgICB0aGlzLl9hbGVydCA9IG5hdGl2ZU5vdGlmLmFsZXJ0Qm9keTtcbiAgICAgIHRoaXMuX2RhdGEgPSBuYXRpdmVOb3RpZi51c2VySW5mbztcbiAgICAgIHRoaXMuX2NhdGVnb3J5ID0gbmF0aXZlTm90aWYuY2F0ZWdvcnk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBmb3IgcmVtb3RlIG5vdGlmaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgdmlhOlxuICAgKiBgYXBwbGljYXRpb246ZGlkUmVjZWl2ZVJlbW90ZU5vdGlmaWNhdGlvbjpmZXRjaENvbXBsZXRpb25IYW5kbGVyOmAuIFNlZSBkb2NzXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI2ZpbmlzaFxuICAgKi9cbiAgZmluaXNoKGZldGNoUmVzdWx0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5faXNSZW1vdGUgfHxcbiAgICAgICF0aGlzLl9ub3RpZmljYXRpb25JZCB8fFxuICAgICAgdGhpcy5fcmVtb3RlTm90aWZpY2F0aW9uQ29tcGxldGVDYWxsYmFja0NhbGxlZFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9yZW1vdGVOb3RpZmljYXRpb25Db21wbGV0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTtcblxuICAgIGludmFyaWFudChcbiAgICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLFxuICAgICAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyIGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICAgIE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TLm9uRmluaXNoUmVtb3RlTm90aWZpY2F0aW9uKFxuICAgICAgdGhpcy5fbm90aWZpY2F0aW9uSWQsXG4gICAgICBmZXRjaFJlc3VsdCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFsaWFzIGZvciBgZ2V0QWxlcnRgIHRvIGdldCB0aGUgbm90aWZpY2F0aW9uJ3MgbWFpbiBtZXNzYWdlIHN0cmluZy5cbiAgICovXG4gIGdldE1lc3NhZ2UoKTogP3N0cmluZyB8ID9PYmplY3Qge1xuICAgIC8vIGFsaWFzIGJlY2F1c2UgXCJhbGVydFwiIGlzIGFuIGFtYmlndW91cyBuYW1lXG4gICAgcmV0dXJuIHRoaXMuX2FsZXJ0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNvdW5kIHN0cmluZyBmcm9tIHRoZSBgYXBzYCBvYmplY3QuIFRoaXMgd2lsbCBiZSBgbnVsbGAgZm9yIGxvY2FsXG4gICAqIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3B1c2hub3RpZmljYXRpb25pb3MjZ2V0c291bmRcbiAgICovXG4gIGdldFNvdW5kKCk6ID9zdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjYXRlZ29yeSBzdHJpbmcgZnJvbSB0aGUgYGFwc2Agb2JqZWN0LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI2dldGNhdGVnb3J5XG4gICAqL1xuICBnZXRDYXRlZ29yeSgpOiA/c3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbm90aWZpY2F0aW9uJ3MgbWFpbiBtZXNzYWdlIGZyb20gdGhlIGBhcHNgIG9iamVjdC4gQWxzbyBzZWUgdGhlXG4gICAqIGFsaWFzOiBgZ2V0TWVzc2FnZSgpYC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvcHVzaG5vdGlmaWNhdGlvbmlvcyNnZXRhbGVydFxuICAgKi9cbiAgZ2V0QWxlcnQoKTogP3N0cmluZyB8ID9PYmplY3Qge1xuICAgIHJldHVybiB0aGlzLl9hbGVydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjb250ZW50LWF2YWlsYWJsZSBudW1iZXIgZnJvbSB0aGUgYGFwc2Agb2JqZWN0LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wdXNobm90aWZpY2F0aW9uaW9zI2dldGNvbnRlbnRhdmFpbGFibGVcbiAgICovXG4gIGdldENvbnRlbnRBdmFpbGFibGUoKTogQ29udGVudEF2YWlsYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRBdmFpbGFibGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFkZ2UgY291bnQgbnVtYmVyIGZyb20gdGhlIGBhcHNgIG9iamVjdC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvcHVzaG5vdGlmaWNhdGlvbmlvcyNnZXRiYWRnZWNvdW50XG4gICAqL1xuICBnZXRCYWRnZUNvdW50KCk6ID9udW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9iYWRnZUNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRhdGEgb2JqZWN0IG9uIHRoZSBub3RpZmljYXRpb24uXG4gICAqXG4gICAqIFNlZSBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3B1c2hub3RpZmljYXRpb25pb3MjZ2V0ZGF0YVxuICAgKi9cbiAgZ2V0RGF0YSgpOiA/T2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0aHJlYWQgSUQgb24gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvcHVzaG5vdGlmaWNhdGlvbmlvcyNnZXR0aHJlYWRpZFxuICAgKi9cbiAgZ2V0VGhyZWFkSUQoKTogP3N0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVhZElEO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHVzaE5vdGlmaWNhdGlvbklPUztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TJztcbmltcG9ydCBOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbnR5cGUgUGVybWlzc2lvbnMgPSB7fFxuICBhbGVydDogYm9vbGVhbixcbiAgYmFkZ2U6IGJvb2xlYW4sXG4gIHNvdW5kOiBib29sZWFuLFxufH07XG5cbnR5cGUgTm90aWZpY2F0aW9uID0ge3xcbiAgK2FsZXJ0VGl0bGU/OiA/c3RyaW5nLFxuICArYWxlcnRCb2R5PzogP3N0cmluZyxcbiAgK3VzZXJJbmZvPzogP09iamVjdCxcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBub3RpZmljYXRpb24gY2F0ZWdvcnkuIFNlZSB0aGUgW0FwcGxlIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3VzZXJub3RpZmljYXRpb25zL2RlY2xhcmluZ195b3VyX2FjdGlvbmFibGVfbm90aWZpY2F0aW9uX3R5cGVzKVxuICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgK2NhdGVnb3J5PzogP3N0cmluZyxcbiAgLyoqXG4gICAqIEFjdHVhbCB0eXBlOiBzdHJpbmcgfCBudW1iZXJcbiAgICpcbiAgICogU2NoZWR1bGUgbm90aWZpY2F0aW9ucyB1c2luZyBFSVRIRVIgYGZpcmVEYXRlYCBvciBgZmlyZUludGVydmFsU2Vjb25kc2AuXG4gICAqIElmIGJvdGggYXJlIHNwZWNpZmllZCwgYGZpcmVEYXRlYCB0YWtlcyBwcmVjZWRlbmNlLlxuICAgKiBJZiB5b3UgdXNlIGBwcmVzZW50TG9jYWxOb3RpZmljYXRpb25gLCBib3RoIHdpbGwgYmUgaWdub3JlZFxuICAgKiBhbmQgdGhlIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNob3duIGltbWVkaWF0ZWx5LlxuICAgKi9cbiAgK2ZpcmVEYXRlPzogP251bWJlcixcbiAgLyoqXG4gICAqIFNlY29uZHMgZnJvbSBub3cgdG8gZGlzcGxheSB0aGUgbm90aWZpY2F0aW9uLlxuICAgKlxuICAgKiBTY2hlZHVsZSBub3RpZmljYXRpb25zIHVzaW5nIEVJVEhFUiBgZmlyZURhdGVgIG9yIGBmaXJlSW50ZXJ2YWxTZWNvbmRzYC5cbiAgICogSWYgYm90aCBhcmUgc3BlY2lmaWVkLCBgZmlyZURhdGVgIHRha2VzIHByZWNlZGVuY2UuXG4gICAqIElmIHlvdSB1c2UgYHByZXNlbnRMb2NhbE5vdGlmaWNhdGlvbmAsIGJvdGggd2lsbCBiZSBpZ25vcmVkXG4gICAqIGFuZCB0aGUgbm90aWZpY2F0aW9uIHdpbGwgYmUgc2hvd24gaW1tZWRpYXRlbHkuXG4gICAqL1xuICArZmlyZUludGVydmFsU2Vjb25kcz86ID9udW1iZXIsXG4gIC8qKiBCYWRnZSBjb3VudCB0byBkaXNwbGF5IG9uIHRoZSBhcHAgaWNvbi4gKi9cbiAgK2FwcGxpY2F0aW9uSWNvbkJhZGdlTnVtYmVyPzogP251bWJlcixcbiAgLyoqIFdoZXRoZXIgdG8gc2lsZW5jZSB0aGUgbm90aWZpY2F0aW9uIHNvdW5kLiAqL1xuICAraXNTaWxlbnQ/OiA/Ym9vbGVhbixcbiAgLyoqXG4gICAqIEN1c3RvbSBub3RpZmljYXRpb24gc291bmQuIENhbiBvbmx5IGJlIHNldCB3aGVuIGNyZWF0aW5nIG5vdGlmaWNhdGlvbnMuXG4gICAqIFRoaXMgd2lsbCBiZSBudWxsIGZvciBub3RpZmljYXRpb25zIHJldHJpZXZlZCB2aWFcbiAgICogZ2V0U2NoZWR1bGVkTG9jYWxOb3RpZmljYXRpb25zIG9yIGdldERlbGl2ZXJlZE5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICArc291bmROYW1lPzogP3N0cmluZyxcbiAgLyoqIERFUFJFQ0FURUQuIFRoaXMgd2FzIHVzZWQgZm9yIGlPUydzIGxlZ2FjeSBVSUxvY2FsTm90aWZpY2F0aW9uLiAqL1xuICArYWxlcnRBY3Rpb24/OiA/c3RyaW5nLFxuICAvKiogREVQUkVDQVRFRC4gVXNlIGBmaXJlRGF0ZWAgb3IgYGZpcmVJbnRlcnZhbFNlY29uZHNgIGluc3RlYWQuICovXG4gICtyZXBlYXRJbnRlcnZhbD86ID9zdHJpbmcsXG58fTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArZ2V0Q29uc3RhbnRzOiAoKSA9PiB7fHx9O1xuICArb25GaW5pc2hSZW1vdGVOb3RpZmljYXRpb246IChcbiAgICBub3RpZmljYXRpb25JZDogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIFR5cGU6XG4gICAgICogICdVSUJhY2tncm91bmRGZXRjaFJlc3VsdE5ld0RhdGEnIHxcbiAgICAgKiAgJ1VJQmFja2dyb3VuZEZldGNoUmVzdWx0Tm9EYXRhJyB8XG4gICAgICogICdVSUJhY2tncm91bmRGZXRjaFJlc3VsdEZhaWxlZCdcbiAgICAgKi9cbiAgICBmZXRjaFJlc3VsdDogc3RyaW5nLFxuICApID0+IHZvaWQ7XG4gICtzZXRBcHBsaWNhdGlvbkljb25CYWRnZU51bWJlcjogKG51bTogbnVtYmVyKSA9PiB2b2lkO1xuICArZ2V0QXBwbGljYXRpb25JY29uQmFkZ2VOdW1iZXI6IChjYWxsYmFjazogKG51bTogbnVtYmVyKSA9PiB2b2lkKSA9PiB2b2lkO1xuICArcmVxdWVzdFBlcm1pc3Npb25zOiAocGVybWlzc2lvbjoge3xcbiAgICArYWxlcnQ6IGJvb2xlYW4sXG4gICAgK2JhZGdlOiBib29sZWFuLFxuICAgICtzb3VuZDogYm9vbGVhbixcbiAgfH0pID0+IFByb21pc2U8UGVybWlzc2lvbnM+O1xuICArYWJhbmRvblBlcm1pc3Npb25zOiAoKSA9PiB2b2lkO1xuICArY2hlY2tQZXJtaXNzaW9uczogKGNhbGxiYWNrOiAocGVybWlzc2lvbnM6IFBlcm1pc3Npb25zKSA9PiB2b2lkKSA9PiB2b2lkO1xuICArcHJlc2VudExvY2FsTm90aWZpY2F0aW9uOiAobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pID0+IHZvaWQ7XG4gICtzY2hlZHVsZUxvY2FsTm90aWZpY2F0aW9uOiAobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pID0+IHZvaWQ7XG4gICtjYW5jZWxBbGxMb2NhbE5vdGlmaWNhdGlvbnM6ICgpID0+IHZvaWQ7XG4gICtjYW5jZWxMb2NhbE5vdGlmaWNhdGlvbnM6ICh1c2VySW5mbzogT2JqZWN0KSA9PiB2b2lkO1xuICArZ2V0SW5pdGlhbE5vdGlmaWNhdGlvbjogKCkgPT4gUHJvbWlzZTw/Tm90aWZpY2F0aW9uPjtcbiAgK2dldFNjaGVkdWxlZExvY2FsTm90aWZpY2F0aW9uczogKFxuICAgIGNhbGxiYWNrOiAobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pID0+IHZvaWQsXG4gICkgPT4gdm9pZDtcbiAgK3JlbW92ZUFsbERlbGl2ZXJlZE5vdGlmaWNhdGlvbnM6ICgpID0+IHZvaWQ7XG4gICtyZW1vdmVEZWxpdmVyZWROb3RpZmljYXRpb25zOiAoaWRlbnRpZmllcnM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG4gICtnZXREZWxpdmVyZWROb3RpZmljYXRpb25zOiAoXG4gICAgY2FsbGJhY2s6IChub3RpZmljYXRpb246IEFycmF5PE5vdGlmaWNhdGlvbj4pID0+IHZvaWQsXG4gICkgPT4gdm9pZDtcbiAgK2dldEF1dGhvcml6YXRpb25TdGF0dXM6IChcbiAgICBjYWxsYmFjazogKGF1dGhvcml6YXRpb25TdGF0dXM6IG51bWJlcikgPT4gdm9pZCxcbiAgKSA9PiB2b2lkO1xuICArYWRkTGlzdGVuZXI6IChldmVudFR5cGU6IHN0cmluZykgPT4gdm9pZDtcbiAgK3JlbW92ZUxpc3RlbmVyczogKGNvdW50OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldDxTcGVjPihcbiAgJ1B1c2hOb3RpZmljYXRpb25NYW5hZ2VyJyxcbik6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgTmF0aXZlQWN0aW9uU2hlZXRNYW5hZ2VyIGZyb20gJy4uL0FjdGlvblNoZWV0SU9TL05hdGl2ZUFjdGlvblNoZWV0TWFuYWdlcic7XG5pbXBvcnQgTmF0aXZlU2hhcmVNb2R1bGUgZnJvbSAnLi9OYXRpdmVTaGFyZU1vZHVsZSc7XG5cbmNvbnN0IHByb2Nlc3NDb2xvciA9IHJlcXVpcmUoJy4uL1N0eWxlU2hlZXQvcHJvY2Vzc0NvbG9yJykuZGVmYXVsdDtcbmNvbnN0IFBsYXRmb3JtID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJyk7XG5jb25zdCBpbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxudHlwZSBDb250ZW50ID1cbiAgfCB7XG4gICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIC4uLlxuICAgIH1cbiAgfCB7XG4gICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgIHVybDogc3RyaW5nLFxuICAgICAgLi4uXG4gICAgfTtcbnR5cGUgT3B0aW9ucyA9IHtcbiAgZGlhbG9nVGl0bGU/OiBzdHJpbmcsXG4gIGV4Y2x1ZGVkQWN0aXZpdHlUeXBlcz86IEFycmF5PHN0cmluZz4sXG4gIHRpbnRDb2xvcj86IHN0cmluZyxcbiAgc3ViamVjdD86IHN0cmluZyxcbiAgYW5jaG9yPzogbnVtYmVyLFxuICAuLi5cbn07XG5cbmNsYXNzIFNoYXJlIHtcbiAgLyoqXG4gICAqIE9wZW4gYSBkaWFsb2cgdG8gc2hhcmUgdGV4dCBjb250ZW50LlxuICAgKlxuICAgKiBJbiBpT1MsIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgaW52b2tlZCBhbiBvYmplY3QgY29udGFpbmluZyBgYWN0aW9uYCwgYGFjdGl2aXR5VHlwZWAuXG4gICAqIElmIHRoZSB1c2VyIGRpc21pc3NlZCB0aGUgZGlhbG9nLCB0aGUgUHJvbWlzZSB3aWxsIHN0aWxsIGJlIHJlc29sdmVkIHdpdGggYWN0aW9uIGJlaW5nIGBTaGFyZS5kaXNtaXNzZWRBY3Rpb25gXG4gICAqIGFuZCBhbGwgdGhlIG90aGVyIGtleXMgYmVpbmcgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBJbiBBbmRyb2lkLCBSZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBhbHdheXMgYmUgcmVzb2x2ZWQgd2l0aCBhY3Rpb24gYmVpbmcgYFNoYXJlLnNoYXJlZEFjdGlvbmAuXG4gICAqXG4gICAqICMjIyBDb250ZW50XG4gICAqXG4gICAqICAtIGBtZXNzYWdlYCAtIGEgbWVzc2FnZSB0byBzaGFyZVxuICAgKlxuICAgKiAjIyMjIGlPU1xuICAgKlxuICAgKiAgLSBgdXJsYCAtIGEgVVJMIHRvIHNoYXJlXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBVUkwgYW5kIG1lc3NhZ2UgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqICMjIyMgQW5kcm9pZFxuICAgKlxuICAgKiAtIGB0aXRsZWAgLSB0aXRsZSBvZiB0aGUgbWVzc2FnZVxuICAgKlxuICAgKiAjIyMgT3B0aW9uc1xuICAgKlxuICAgKiAjIyMjIGlPU1xuICAgKlxuICAgKiAgLSBgc3ViamVjdGAgLSBhIHN1YmplY3QgdG8gc2hhcmUgdmlhIGVtYWlsXG4gICAqICAtIGBleGNsdWRlZEFjdGl2aXR5VHlwZXNgXG4gICAqICAtIGB0aW50Q29sb3JgXG4gICAqXG4gICAqICMjIyMgQW5kcm9pZFxuICAgKlxuICAgKiAgLSBgZGlhbG9nVGl0bGVgXG4gICAqXG4gICAqL1xuICBzdGF0aWMgc2hhcmUoXG4gICAgY29udGVudDogQ29udGVudCxcbiAgICBvcHRpb25zOiBPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8e2FjdGlvbjogc3RyaW5nLCBhY3Rpdml0eVR5cGU6ID9zdHJpbmd9PiB7XG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIGNvbnRlbnQgIT09IG51bGwsXG4gICAgICAnQ29udGVudCB0byBzaGFyZSBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0JyxcbiAgICApO1xuICAgIGludmFyaWFudChcbiAgICAgIHR5cGVvZiBjb250ZW50LnVybCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNvbnRlbnQubWVzc2FnZSA9PT0gJ3N0cmluZycsXG4gICAgICAnQXQgbGVhc3Qgb25lIG9mIFVSTCBhbmQgbWVzc2FnZSBpcyByZXF1aXJlZCcsXG4gICAgKTtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCxcbiAgICAgICdPcHRpb25zIG11c3QgYmUgYSB2YWxpZCBvYmplY3QnLFxuICAgICk7XG5cbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBOYXRpdmVTaGFyZU1vZHVsZSxcbiAgICAgICAgJ1NoYXJlTW9kdWxlIHNob3VsZCBiZSByZWdpc3RlcmVkIG9uIEFuZHJvaWQuJyxcbiAgICAgICk7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIGNvbnRlbnQudGl0bGUgPT0gbnVsbCB8fCB0eXBlb2YgY29udGVudC50aXRsZSA9PT0gJ3N0cmluZycsXG4gICAgICAgICdJbnZhbGlkIHRpdGxlOiB0aXRsZSBzaG91bGQgYmUgYSBzdHJpbmcuJyxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSB7XG4gICAgICAgIHRpdGxlOiBjb250ZW50LnRpdGxlLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgIHR5cGVvZiBjb250ZW50Lm1lc3NhZ2UgPT09ICdzdHJpbmcnID8gY29udGVudC5tZXNzYWdlIDogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIE5hdGl2ZVNoYXJlTW9kdWxlLnNoYXJlKG5ld0NvbnRlbnQsIG9wdGlvbnMuZGlhbG9nVGl0bGUpLnRoZW4oXG4gICAgICAgIHJlc3VsdCA9PiAoe1xuICAgICAgICAgIGFjdGl2aXR5VHlwZTogbnVsbCxcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdGludENvbG9yID0gcHJvY2Vzc0NvbG9yKG9wdGlvbnMudGludENvbG9yKTtcblxuICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgdGludENvbG9yID09IG51bGwgfHwgdHlwZW9mIHRpbnRDb2xvciA9PT0gJ251bWJlcicsXG4gICAgICAgICAgJ1VuZXhwZWN0ZWQgY29sb3IgZ2l2ZW4gZm9yIG9wdGlvbnMudGludENvbG9yJyxcbiAgICAgICAgKTtcblxuICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgTmF0aXZlQWN0aW9uU2hlZXRNYW5hZ2VyLFxuICAgICAgICAgICdOYXRpdmVBY3Rpb25TaGVldE1hbmFnZXIgaXMgbm90IHJlZ2lzdGVyZWQgb24gaU9TLCBidXQgaXQgc2hvdWxkIGJlLicsXG4gICAgICAgICk7XG5cbiAgICAgICAgTmF0aXZlQWN0aW9uU2hlZXRNYW5hZ2VyLnNob3dTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgdHlwZW9mIGNvbnRlbnQubWVzc2FnZSA9PT0gJ3N0cmluZycgPyBjb250ZW50Lm1lc3NhZ2UgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1cmw6IHR5cGVvZiBjb250ZW50LnVybCA9PT0gJ3N0cmluZycgPyBjb250ZW50LnVybCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN1YmplY3Q6IG9wdGlvbnMuc3ViamVjdCxcbiAgICAgICAgICAgIHRpbnRDb2xvcjogdHlwZW9mIHRpbnRDb2xvciA9PT0gJ251bWJlcicgPyB0aW50Q29sb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbmNob3I6XG4gICAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmFuY2hvciA9PT0gJ251bWJlcicgPyBvcHRpb25zLmFuY2hvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGV4Y2x1ZGVkQWN0aXZpdHlUeXBlczogb3B0aW9ucy5leGNsdWRlZEFjdGl2aXR5VHlwZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvciA9PiByZWplY3QoZXJyb3IpLFxuICAgICAgICAgIChzdWNjZXNzLCBhY3Rpdml0eVR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NoYXJlZEFjdGlvbicsXG4gICAgICAgICAgICAgICAgYWN0aXZpdHlUeXBlOiBhY3Rpdml0eVR5cGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnZGlzbWlzc2VkQWN0aW9uJyxcbiAgICAgICAgICAgICAgICBhY3Rpdml0eVR5cGU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGxhdGZvcm0nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHdhcyBzdWNjZXNzZnVsbHkgc2hhcmVkLlxuICAgKi9cbiAgc3RhdGljIHNoYXJlZEFjdGlvbjogJ3NoYXJlZEFjdGlvbicgPSAnc2hhcmVkQWN0aW9uJztcblxuICAvKipcbiAgICogVGhlIGRpYWxvZyBoYXMgYmVlbiBkaXNtaXNzZWQuXG4gICAqIEBwbGF0Zm9ybSBpb3NcbiAgICovXG4gIHN0YXRpYyBkaXNtaXNzZWRBY3Rpb246ICdkaXNtaXNzZWRBY3Rpb24nID0gJ2Rpc21pc3NlZEFjdGlvbic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhcmU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTaGFyZU1vZHVsZSc7XG5pbXBvcnQgTmF0aXZlU2hhcmVNb2R1bGUgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTaGFyZU1vZHVsZSc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTaGFyZU1vZHVsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArZ2V0Q29uc3RhbnRzOiAoKSA9PiB7fHx9O1xuICArc2hhcmU6IChcbiAgICBjb250ZW50OiB7fHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nfH0sXG4gICAgZGlhbG9nVGl0bGU/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTx7fGFjdGlvbjogc3RyaW5nfH0+O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oJ1NoYXJlTW9kdWxlJyk6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFRvYXN0QW5kcm9pZCA9IHtcbiAgLy8gRHVtbXkgZmFsbGJhY2sgdG9hc3QgZHVyYXRpb24gY29uc3RhbnRzXG4gIFNIT1JUOiAoMDogbnVtYmVyKSxcbiAgTE9ORzogKDA6IG51bWJlciksXG4gIC8vIER1bW15IGZhbGxiYWNrIHRvYXN0IGdyYXZpdHkgY29uc3RhbnRzXG4gIFRPUDogKDA6IG51bWJlciksXG4gIEJPVFRPTTogKDA6IG51bWJlciksXG4gIENFTlRFUjogKDA6IG51bWJlciksXG5cbiAgc2hvdzogZnVuY3Rpb24gKG1lc3NhZ2U6IHN0cmluZywgZHVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnNvbGUud2FybignVG9hc3RBbmRyb2lkIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4nKTtcbiAgfSxcblxuICBzaG93V2l0aEdyYXZpdHk6IGZ1bmN0aW9uIChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgZHVyYXRpb246IG51bWJlcixcbiAgICBncmF2aXR5OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnNvbGUud2FybignVG9hc3RBbmRyb2lkIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4nKTtcbiAgfSxcblxuICBzaG93V2l0aEdyYXZpdHlBbmRPZmZzZXQ6IGZ1bmN0aW9uIChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgZHVyYXRpb246IG51bWJlcixcbiAgICBncmF2aXR5OiBudW1iZXIsXG4gICAgeE9mZnNldDogbnVtYmVyLFxuICAgIHlPZmZzZXQ6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc29sZS53YXJuKCdUb2FzdEFuZHJvaWQgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLicpO1xuICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUb2FzdEFuZHJvaWQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge0FuaW1hdGVkVmFsdWVDb25maWd9IGZyb20gJy4vbm9kZXMvQW5pbWF0ZWRWYWx1ZSc7XG5cbmltcG9ydCBBbmltYXRlZCBmcm9tICcuL0FuaW1hdGVkJztcbmltcG9ydCB7dXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUFuaW1hdGVkVmFsdWUoXG4gIGluaXRpYWxWYWx1ZTogbnVtYmVyLFxuICBjb25maWc/OiA/QW5pbWF0ZWRWYWx1ZUNvbmZpZyxcbik6IEFuaW1hdGVkLlZhbHVlIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPG51bGwgfCBBbmltYXRlZC5WYWx1ZT4obnVsbCk7XG4gIGlmIChyZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgcmVmLmN1cnJlbnQgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoaW5pdGlhbFZhbHVlLCBjb25maWcpO1xuICB9XG4gIHJldHVybiByZWYuY3VycmVudDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtDb2xvclNjaGVtZU5hbWV9IGZyb20gJy4vTmF0aXZlQXBwZWFyYW5jZSc7XG5cbmltcG9ydCBBcHBlYXJhbmNlIGZyb20gJy4vQXBwZWFyYW5jZSc7XG5pbXBvcnQge3VzZVN5bmNFeHRlcm5hbFN0b3JlfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHN1YnNjcmliZSA9IChvblN0b3JlQ2hhbmdlOiAoKSA9PiB2b2lkKSA9PiB7XG4gIGNvbnN0IGFwcGVhcmFuY2VTdWJzY3JpcHRpb24gPSBBcHBlYXJhbmNlLmFkZENoYW5nZUxpc3RlbmVyKG9uU3RvcmVDaGFuZ2UpO1xuICByZXR1cm4gKCkgPT4gYXBwZWFyYW5jZVN1YnNjcmlwdGlvbi5yZW1vdmUoKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbG9yU2NoZW1lKCk6ID9Db2xvclNjaGVtZU5hbWUge1xuICByZXR1cm4gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBBcHBlYXJhbmNlLmdldENvbG9yU2NoZW1lKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgRGltZW5zaW9ucyBmcm9tICcuL0RpbWVuc2lvbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBEaXNwbGF5TWV0cmljcyxcbiAgdHlwZSBEaXNwbGF5TWV0cmljc0FuZHJvaWQsXG59IGZyb20gJy4vTmF0aXZlRGV2aWNlSW5mbyc7XG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlV2luZG93RGltZW5zaW9ucygpOlxuICB8IERpc3BsYXlNZXRyaWNzXG4gIHwgRGlzcGxheU1ldHJpY3NBbmRyb2lkIHtcbiAgY29uc3QgW2RpbWVuc2lvbnMsIHNldERpbWVuc2lvbnNdID0gdXNlU3RhdGUoKCkgPT4gRGltZW5zaW9ucy5nZXQoJ3dpbmRvdycpKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2Uoe1xuICAgICAgd2luZG93LFxuICAgIH06IHtcbiAgICAgIHdpbmRvdzogRGlzcGxheU1ldHJpY3MgfCBEaXNwbGF5TWV0cmljc0FuZHJvaWQsXG4gICAgfSkge1xuICAgICAgaWYgKFxuICAgICAgICBkaW1lbnNpb25zLndpZHRoICE9PSB3aW5kb3cud2lkdGggfHxcbiAgICAgICAgZGltZW5zaW9ucy5oZWlnaHQgIT09IHdpbmRvdy5oZWlnaHQgfHxcbiAgICAgICAgZGltZW5zaW9ucy5zY2FsZSAhPT0gd2luZG93LnNjYWxlIHx8XG4gICAgICAgIGRpbWVuc2lvbnMuZm9udFNjYWxlICE9PSB3aW5kb3cuZm9udFNjYWxlXG4gICAgICApIHtcbiAgICAgICAgc2V0RGltZW5zaW9ucyh3aW5kb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBEaW1lbnNpb25zLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGhhbmRsZUNoYW5nZSk7XG4gICAgLy8gV2UgbWlnaHQgaGF2ZSBtaXNzZWQgYW4gdXBkYXRlIGJldHdlZW4gY2FsbGluZyBgZ2V0YCBpbiByZW5kZXIgYW5kXG4gICAgLy8gYGFkZEV2ZW50TGlzdGVuZXJgIGluIHRoaXMgaGFuZGxlciwgc28gd2Ugc2V0IGl0IGhlcmUuIElmIHRoZXJlIHdhc1xuICAgIC8vIG5vIGNoYW5nZSwgUmVhY3Qgd2lsbCBmaWx0ZXIgb3V0IHRoaXMgdXBkYXRlIGFzIGEgbm8tb3AuXG4gICAgaGFuZGxlQ2hhbmdlKHt3aW5kb3c6IERpbWVuc2lvbnMuZ2V0KCd3aW5kb3cnKX0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24ucmVtb3ZlKCk7XG4gICAgfTtcbiAgfSwgW2RpbWVuc2lvbnNdKTtcbiAgcmV0dXJuIGRpbWVuc2lvbnM7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKiBAanNkb2NcbiAqL1xuXG5pbXBvcnQgTmF0aXZlVmlicmF0aW9uIGZyb20gJy4vTmF0aXZlVmlicmF0aW9uJztcblxuY29uc3QgUGxhdGZvcm0gPSByZXF1aXJlKCcuLi9VdGlsaXRpZXMvUGxhdGZvcm0nKTtcblxuLyoqXG4gKiBWaWJyYXRpb24gQVBJXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvdmlicmF0aW9uXG4gKi9cblxubGV0IF92aWJyYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbmxldCBfaWQ6IG51bWJlciA9IDA7IC8vIF9pZCBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbi5cbmNvbnN0IF9kZWZhdWx0X3ZpYnJhdGlvbl9sZW5ndGggPSA0MDA7XG5cbmZ1bmN0aW9uIHZpYnJhdGVCeVBhdHRlcm4ocGF0dGVybjogQXJyYXk8bnVtYmVyPiwgcmVwZWF0OiBib29sZWFuID0gZmFsc2UpIHtcbiAgaWYgKF92aWJyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX3ZpYnJhdGluZyA9IHRydWU7XG4gIGlmIChwYXR0ZXJuWzBdID09PSAwKSB7XG4gICAgTmF0aXZlVmlicmF0aW9uLnZpYnJhdGUoX2RlZmF1bHRfdmlicmF0aW9uX2xlbmd0aCk7XG4gICAgLy8gJEZsb3dGaXhNZVtyZWFzc2lnbi1jb25zdF1cbiAgICBwYXR0ZXJuID0gcGF0dGVybi5zbGljZSgxKTtcbiAgfVxuICBpZiAocGF0dGVybi5sZW5ndGggPT09IDApIHtcbiAgICBfdmlicmF0aW5nID0gZmFsc2U7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNldFRpbWVvdXQoKCkgPT4gdmlicmF0ZVNjaGVkdWxlcigrK19pZCwgcGF0dGVybiwgcmVwZWF0LCAxKSwgcGF0dGVyblswXSk7XG59XG5cbmZ1bmN0aW9uIHZpYnJhdGVTY2hlZHVsZXIoXG4gIGlkOiBudW1iZXIsXG4gIHBhdHRlcm46IEFycmF5PG51bWJlcj4sXG4gIHJlcGVhdDogYm9vbGVhbixcbiAgbmV4dEluZGV4OiBudW1iZXIsXG4pIHtcbiAgaWYgKCFfdmlicmF0aW5nIHx8IGlkICE9PSBfaWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgTmF0aXZlVmlicmF0aW9uLnZpYnJhdGUoX2RlZmF1bHRfdmlicmF0aW9uX2xlbmd0aCk7XG4gIGlmIChuZXh0SW5kZXggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICBpZiAocmVwZWF0KSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW3JlYXNzaWduLWNvbnN0XVxuICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgX3ZpYnJhdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBzZXRUaW1lb3V0KFxuICAgICgpID0+IHZpYnJhdGVTY2hlZHVsZXIoaWQsIHBhdHRlcm4sIHJlcGVhdCwgbmV4dEluZGV4ICsgMSksXG4gICAgcGF0dGVybltuZXh0SW5kZXhdLFxuICApO1xufVxuXG5jb25zdCBWaWJyYXRpb24gPSB7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGEgdmlicmF0aW9uIHdpdGggc3BlY2lmaWVkIGBwYXR0ZXJuYC5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvdmlicmF0aW9uI3ZpYnJhdGVcbiAgICovXG4gIHZpYnJhdGU6IGZ1bmN0aW9uIChcbiAgICBwYXR0ZXJuOiBudW1iZXIgfCBBcnJheTxudW1iZXI+ID0gX2RlZmF1bHRfdmlicmF0aW9uX2xlbmd0aCxcbiAgICByZXBlYXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKSB7XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgTmF0aXZlVmlicmF0aW9uLnZpYnJhdGUocGF0dGVybik7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgTmF0aXZlVmlicmF0aW9uLnZpYnJhdGVCeVBhdHRlcm4ocGF0dGVybiwgcmVwZWF0ID8gMCA6IC0xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmlicmF0aW9uIHBhdHRlcm4gc2hvdWxkIGJlIGEgbnVtYmVyIG9yIGFycmF5Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfdmlicmF0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgTmF0aXZlVmlicmF0aW9uLnZpYnJhdGUocGF0dGVybik7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgdmlicmF0ZUJ5UGF0dGVybihwYXR0ZXJuLCByZXBlYXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWJyYXRpb24gcGF0dGVybiBzaG91bGQgYmUgYSBudW1iZXIgb3IgYXJyYXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIC8qKlxuICAgKiBTdG9wIHZpYnJhdGlvblxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy92aWJyYXRpb24jY2FuY2VsXG4gICAqL1xuICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgPT09ICdpb3MnKSB7XG4gICAgICBfdmlicmF0aW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5hdGl2ZVZpYnJhdGlvbi5jYW5jZWwoKTtcbiAgICB9XG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpYnJhdGlvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZVZpYnJhdGlvbic7XG5pbXBvcnQgTmF0aXZlVmlicmF0aW9uIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlVmlicmF0aW9uJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVZpYnJhdGlvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3RcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7VHVyYm9Nb2R1bGV9IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQgKiBhcyBUdXJib01vZHVsZVJlZ2lzdHJ5IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArZ2V0Q29uc3RhbnRzOiAoKSA9PiB7fHx9O1xuICArdmlicmF0ZTogKHBhdHRlcm46IG51bWJlcikgPT4gdm9pZDtcblxuICAvLyBBbmRyb2lkIG9ubHlcbiAgK3ZpYnJhdGVCeVBhdHRlcm46IChwYXR0ZXJuOiBBcnJheTxudW1iZXI+LCByZXBlYXQ6IG51bWJlcikgPT4gdm9pZDtcbiAgK2NhbmNlbDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0RW5mb3JjaW5nPFNwZWM+KCdWaWJyYXRpb24nKTogU3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7SWdub3JlUGF0dGVybn0gZnJvbSAnLi4vTG9nQm94L0RhdGEvTG9nQm94RGF0YSc7XG5cbmNvbnN0IExvZ0JveCA9IHJlcXVpcmUoJy4uL0xvZ0JveC9Mb2dCb3gnKS5kZWZhdWx0O1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8fH0+O1xuXG5sZXQgWWVsbG93Qm94O1xuaWYgKF9fREVWX18pIHtcbiAgWWVsbG93Qm94ID0gY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM+IHtcbiAgICBzdGF0aWMgaWdub3JlV2FybmluZ3MocGF0dGVybnM6ICRSZWFkT25seUFycmF5PElnbm9yZVBhdHRlcm4+KTogdm9pZCB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdZZWxsb3dCb3ggaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBMb2dCb3guIFBsZWFzZSBjYWxsIExvZ0JveC5pZ25vcmVMb2dzKCkgaW5zdGVhZC4nLFxuICAgICAgKTtcblxuICAgICAgTG9nQm94Lmlnbm9yZUxvZ3MocGF0dGVybnMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnN0YWxsKCk6IHZvaWQge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnWWVsbG93Qm94IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggTG9nQm94LiBQbGVhc2UgY2FsbCBMb2dCb3guaW5zdGFsbCgpIGluc3RlYWQuJyxcbiAgICAgICk7XG4gICAgICBMb2dCb3guaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIHN0YXRpYyB1bmluc3RhbGwoKTogdm9pZCB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdZZWxsb3dCb3ggaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBMb2dCb3guIFBsZWFzZSBjYWxsIExvZ0JveC51bmluc3RhbGwoKSBpbnN0ZWFkLicsXG4gICAgICApO1xuICAgICAgTG9nQm94LnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIFllbGxvd0JveCA9IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gICAgc3RhdGljIGlnbm9yZVdhcm5pbmdzKHBhdHRlcm5zOiAkUmVhZE9ubHlBcnJheTxJZ25vcmVQYXR0ZXJuPik6IHZvaWQge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zdGFsbCgpOiB2b2lkIHtcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgc3RhdGljIHVuaW5zdGFsbCgpOiB2b2lkIHtcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG5tb2R1bGUuZXhwb3J0cyA9IChZZWxsb3dCb3g6IENsYXNzPFJlYWN0LkNvbXBvbmVudDxQcm9wcz4+ICYge1xuICBpZ25vcmVXYXJuaW5ncygkUmVhZE9ubHlBcnJheTxJZ25vcmVQYXR0ZXJuPik6IHZvaWQsXG4gIGluc3RhbGwoKTogdm9pZCxcbiAgdW5pbnN0YWxsKCk6IHZvaWQsXG4gIC4uLlxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge0NvbG9yVmFsdWV9IGZyb20gJy4vU3R5bGVTaGVldCc7XG5cbmltcG9ydCB7RHluYW1pY0NvbG9ySU9TUHJpdmF0ZX0gZnJvbSAnLi9QbGF0Zm9ybUNvbG9yVmFsdWVUeXBlcy5pb3MnO1xuXG5leHBvcnQgdHlwZSBEeW5hbWljQ29sb3JJT1NUdXBsZSA9IHtcbiAgbGlnaHQ6IENvbG9yVmFsdWUsXG4gIGRhcms6IENvbG9yVmFsdWUsXG4gIGhpZ2hDb250cmFzdExpZ2h0PzogQ29sb3JWYWx1ZSxcbiAgaGlnaENvbnRyYXN0RGFyaz86IENvbG9yVmFsdWUsXG59O1xuXG5leHBvcnQgY29uc3QgRHluYW1pY0NvbG9ySU9TID0gKHR1cGxlOiBEeW5hbWljQ29sb3JJT1NUdXBsZSk6IENvbG9yVmFsdWUgPT4ge1xuICByZXR1cm4gRHluYW1pY0NvbG9ySU9TUHJpdmF0ZSh7XG4gICAgbGlnaHQ6IHR1cGxlLmxpZ2h0LFxuICAgIGRhcms6IHR1cGxlLmRhcmssXG4gICAgaGlnaENvbnRyYXN0TGlnaHQ6IHR1cGxlLmhpZ2hDb250cmFzdExpZ2h0LFxuICAgIGhpZ2hDb250cmFzdERhcms6IHR1cGxlLmhpZ2hDb250cmFzdERhcmssXG4gIH0pO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Q29sb3JWYWx1ZX0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0FwcGVhcmFuY2V9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCB0eXBlIFJOVGVzdGVyVGhlbWUgPSB7XG4gIExhYmVsQ29sb3I6IENvbG9yVmFsdWUsXG4gIFNlY29uZGFyeUxhYmVsQ29sb3I6IENvbG9yVmFsdWUsXG4gIFRlcnRpYXJ5TGFiZWxDb2xvcjogQ29sb3JWYWx1ZSxcbiAgUXVhdGVybmFyeUxhYmVsQ29sb3I6IENvbG9yVmFsdWUsXG5cbiAgUGxhY2Vob2xkZXJUZXh0Q29sb3I6IENvbG9yVmFsdWUsXG5cbiAgU3lzdGVtQmFja2dyb3VuZENvbG9yOiBDb2xvclZhbHVlLFxuICBTZWNvbmRhcnlTeXN0ZW1CYWNrZ3JvdW5kQ29sb3I6IENvbG9yVmFsdWUsXG4gIFRlcnRpYXJ5U3lzdGVtQmFja2dyb3VuZENvbG9yOiBDb2xvclZhbHVlLFxuXG4gIEdyb3VwZWRCYWNrZ3JvdW5kQ29sb3I6IENvbG9yVmFsdWUsXG4gIFNlY29uZGFyeUdyb3VwZWRCYWNrZ3JvdW5kQ29sb3I6IENvbG9yVmFsdWUsXG4gIFRlcnRpYXJ5R3JvdXBlZEJhY2tncm91bmRDb2xvcjogQ29sb3JWYWx1ZSxcblxuICBTeXN0ZW1GaWxsQ29sb3I6IENvbG9yVmFsdWUsXG4gIFNlY29uZGFyeVN5c3RlbUZpbGxDb2xvcjogQ29sb3JWYWx1ZSxcbiAgVGVydGlhcnlTeXN0ZW1GaWxsQ29sb3I6IENvbG9yVmFsdWUsXG4gIFF1YXRlcm5hcnlTeXN0ZW1GaWxsQ29sb3I6IENvbG9yVmFsdWUsXG5cbiAgU2VwYXJhdG9yQ29sb3I6IENvbG9yVmFsdWUsXG4gIE9wYXF1ZVNlcGFyYXRvckNvbG9yOiBDb2xvclZhbHVlLFxuICBMaW5rQ29sb3I6IENvbG9yVmFsdWUsXG4gIFN5c3RlbVJlZENvbG9yOiBDb2xvclZhbHVlLFxuICBTeXN0ZW1HcmVlbkNvbG9yOiBDb2xvclZhbHVlLFxuICBUb29sYmFyQ29sb3I6IENvbG9yVmFsdWUsXG4gIEJhY2tncm91bmRDb2xvcjogQ29sb3JWYWx1ZSxcbiAgQm9yZGVyQ29sb3I6IENvbG9yVmFsdWUsXG4gIC4uLlxufTtcblxuZXhwb3J0IGNvbnN0IFJOVGVzdGVyTGlnaHRUaGVtZSA9IHtcbiAgTGFiZWxDb2xvcjogJyMwMDAwMDBmZicsXG4gIFNlY29uZGFyeUxhYmVsQ29sb3I6ICcjM2MzYzQzOTknLFxuICBUZXJ0aWFyeUxhYmVsQ29sb3I6ICcjM2MzYzQzNGMnLFxuICBRdWF0ZXJuYXJ5TGFiZWxDb2xvcjogJyMzYzNjNDMyZCcsXG5cbiAgUGxhY2Vob2xkZXJUZXh0Q29sb3I6ICcjM2MzYzQzNGMnLFxuXG4gIFN5c3RlbUJhY2tncm91bmRDb2xvcjogJyNmZmZmZmZmZicsXG4gIFNlY29uZGFyeVN5c3RlbUJhY2tncm91bmRDb2xvcjogJyNmMmYyZjdmZicsXG4gIFRlcnRpYXJ5U3lzdGVtQmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZmZmJyxcblxuICBHcm91cGVkQmFja2dyb3VuZENvbG9yOiAnI2YyZjJmN2ZmJyxcbiAgU2Vjb25kYXJ5R3JvdXBlZEJhY2tncm91bmRDb2xvcjogJyNmZmZmZmZmZicsXG4gIFRlcnRpYXJ5R3JvdXBlZEJhY2tncm91bmRDb2xvcjogJyNmMmYyZjdmZicsXG5cbiAgU3lzdGVtRmlsbENvbG9yOiAnIzc4Nzg4MDMzJyxcbiAgU2Vjb25kYXJ5U3lzdGVtRmlsbENvbG9yOiAnIzc4Nzg4MDI4JyxcbiAgVGVydGlhcnlTeXN0ZW1GaWxsQ29sb3I6ICcjNzY3NjgwMWUnLFxuICBRdWF0ZXJuYXJ5U3lzdGVtRmlsbENvbG9yOiAnIzc0NzQ4MDE0JyxcblxuICBTZXBhcmF0b3JDb2xvcjogJyMzYzNjNDM0OScsXG4gIE9wYXF1ZVNlcGFyYXRvckNvbG9yOiAnI2M2YzZjOGZmJyxcblxuICBMaW5rQ29sb3I6ICcjMDA3YWZmZmYnLFxuICBTeXN0ZW1SZWRDb2xvcjogJyNmZjNiMzBmZicsXG4gIFN5c3RlbUdyZWVuQ29sb3I6ICcjMzRjNzU5ZmYnLFxuICBUb29sYmFyQ29sb3I6ICcjZTllYWVkZmYnLFxuICBCYWNrZ3JvdW5kQ29sb3I6ICcjZjNmOGZmZmYnLFxuICBCb3JkZXJDb2xvcjogJyMwMDVkZmZmZicsXG59O1xuXG5leHBvcnQgY29uc3QgUk5UZXN0ZXJEYXJrVGhlbWUgPSB7XG4gIExhYmVsQ29sb3I6ICcjZmZmZmZmZmYnLFxuICBTZWNvbmRhcnlMYWJlbENvbG9yOiAnI2ViZWJmNTk5JyxcbiAgVGVydGlhcnlMYWJlbENvbG9yOiAnI2ViZWJmNTRjJyxcbiAgUXVhdGVybmFyeUxhYmVsQ29sb3I6ICcjZWJlYmY1MjgnLFxuXG4gIFBsYWNlaG9sZGVyVGV4dENvbG9yOiAnI2ViZWJmNTRjJyxcblxuICBTeXN0ZW1CYWNrZ3JvdW5kQ29sb3I6ICcjMDAwMDAwZmYnLFxuICBTZWNvbmRhcnlTeXN0ZW1CYWNrZ3JvdW5kQ29sb3I6ICcjMWMxYzFlZmYnLFxuICBUZXJ0aWFyeVN5c3RlbUJhY2tncm91bmRDb2xvcjogJyMyYzJjMmVmZicsXG5cbiAgR3JvdXBlZEJhY2tncm91bmRDb2xvcjogJyMwMDAwMDBmZicsXG4gIFNlY29uZGFyeUdyb3VwZWRCYWNrZ3JvdW5kQ29sb3I6ICcjMWMxYzFlZmYnLFxuICBUZXJ0aWFyeUdyb3VwZWRCYWNrZ3JvdW5kQ29sb3I6ICcjMmMyYzJlZmYnLFxuXG4gIFN5c3RlbUZpbGxDb2xvcjogJyM3ODc4ODA1YicsXG4gIFNlY29uZGFyeVN5c3RlbUZpbGxDb2xvcjogJyM3ODc4ODA1MScsXG4gIFRlcnRpYXJ5U3lzdGVtRmlsbENvbG9yOiAnIzc2NzY4MDNkJyxcbiAgUXVhdGVybmFyeVN5c3RlbUZpbGxDb2xvcjogJyM3Njc2ODAyZCcsXG5cbiAgU2VwYXJhdG9yQ29sb3I6ICcjNTQ1NDU4OTknLFxuICBPcGFxdWVTZXBhcmF0b3JDb2xvcjogJyMzODM4M2FmZicsXG5cbiAgTGlua0NvbG9yOiAnIzA5ODRmZmZmJyxcbiAgU3lzdGVtUmVkQ29sb3I6ICcjZmYzNzVmZmYnLFxuICBTeXN0ZW1HcmVlbkNvbG9yOiAnIzMwZDE1OGZmJyxcbiAgVG9vbGJhckNvbG9yOiAnIzNjM2M0M2ZmJyxcbiAgQmFja2dyb3VuZENvbG9yOiAnIzBjMDcwMGZmJyxcbiAgQm9yZGVyQ29sb3I6ICcjMDA1ZGZmZmYnLFxufTtcblxuZXhwb3J0IGNvbnN0IHRoZW1lcyA9IHtsaWdodDogUk5UZXN0ZXJMaWdodFRoZW1lLCBkYXJrOiBSTlRlc3RlckRhcmtUaGVtZX07XG5leHBvcnQgY29uc3QgUk5UZXN0ZXJUaGVtZUNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Uk5UZXN0ZXJUaGVtZT4gPVxuICBSZWFjdC5jcmVhdGVDb250ZXh0KFxuICAgIEFwcGVhcmFuY2UuZ2V0Q29sb3JTY2hlbWUoKSA9PT0gJ2RhcmsnID8gdGhlbWVzLmRhcmsgOiB0aGVtZXMubGlnaHQsXG4gICk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHt0eXBlIFJOVGVzdGVyVGhlbWV9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0J1dHRvbiwgUGxhdGZvcm0sIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFJOVFRlc3REZXRhaWxzKHtcbiAgZGVzY3JpcHRpb24sXG4gIGV4cGVjdCxcbiAgdGl0bGUsXG4gIHRoZW1lLFxufToge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgZXhwZWN0Pzogc3RyaW5nLFxuICB0aXRsZTogc3RyaW5nLFxuICB0aGVtZTogUk5UZXN0ZXJUaGVtZSxcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW2NvbGxhcHNlZCwgc2V0Q29sbGFwc2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7ZGVzY3JpcHRpb24gPT0gbnVsbCA/IG51bGwgOiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VjdGlvbn0+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMuaGVhZGluZywge2NvbG9yOiB0aGVtZS5MYWJlbENvbG9yfV19PlxuICAgICAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMucGFyYWdyYXBoLCB7Y29sb3I6IHRoZW1lLkxhYmVsQ29sb3J9XX0+XG4gICAgICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApfVxuICAgICAge2V4cGVjdCA9PSBudWxsID8gbnVsbCA6IChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zZWN0aW9ufT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmhlYWRpbmd9PkV4cGVjdGF0aW9uPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMucGFyYWdyYXBofT57ZXhwZWN0fTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1xuICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMuY29udGFpbmVyLCB7XG4gICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5TZXBhcmF0b3JDb2xvcixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOlxuICAgICAgICAgIFBsYXRmb3JtLk9TID09PSAnaW9zJ1xuICAgICAgICAgICAgPyB0aGVtZS5TeXN0ZW1CYWNrZ3JvdW5kQ29sb3JcbiAgICAgICAgICAgIDogdGhlbWUuQmFja2dyb3VuZENvbG9yLFxuICAgICAgfSl9PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50aXRsZVJvd30+XG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgbnVtYmVyT2ZMaW5lcz17MX1cbiAgICAgICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKHN0eWxlcy50aXRsZSwge2NvbG9yOiB0aGVtZS5MYWJlbENvbG9yfSl9PlxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICB7Y29udGVudCAhPSBudWxsICYmIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17Y29sbGFwc2VkID8gJ0V4cGFuZCcgOiAnQ29sbGFwc2UnfVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0Q29sbGFwc2VkKCFjb2xsYXBzZWQpfVxuICAgICAgICAgICAgY29sb3I9e3RoZW1lLkxpbmtDb2xvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgICAgeyFjb2xsYXBzZWQgPyBjb250ZW50IDogbnVsbH1cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgcGFkZGluZ0hvcml6b250YWw6IDEwLFxuICAgIHBhZGRpbmdUb3A6IDYsXG4gICAgcGFkZGluZ0JvdHRvbTogMTAsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IDEsXG4gIH0sXG4gIGhlYWRpbmc6IHtcbiAgICBmb250U2l6ZTogMTYsXG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gIH0sXG4gIHBhcmFncmFwaDoge1xuICAgIGZvbnRTaXplOiAxNCxcbiAgfSxcbiAgc2VjdGlvbjoge1xuICAgIG1hcmdpblZlcnRpY2FsOiA0LFxuICB9LFxuICB0aXRsZToge1xuICAgIGZvbnRTaXplOiAxOCxcbiAgfSxcbiAgdGl0bGVSb3c6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFJOVFRlc3REZXRhaWxzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHtSTlRlc3RlclRoZW1lQ29udGV4dH0gZnJvbSAnLi9STlRlc3RlclRoZW1lJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBjaGlsZHJlbj86IFJlYWN0Lk5vZGUsXG4gIHRpdGxlPzogP3N0cmluZyxcbiAgZGVzY3JpcHRpb24/OiA/c3RyaW5nLFxufH0+O1xuXG5jb25zdCBSTlRlc3RlckJsb2NrID0gKHtkZXNjcmlwdGlvbiwgdGl0bGUsIGNoaWxkcmVufTogUHJvcHMpOiBSZWFjdC5Ob2RlID0+IHtcbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFJOVGVzdGVyVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1xuICAgICAgc3R5bGU9e1tcbiAgICAgICAgW3N0eWxlcy5jb250YWluZXJdLFxuICAgICAgICB7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLlNlcGFyYXRvckNvbG9yLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuU2Vjb25kYXJ5R3JvdXBlZEJhY2tncm91bmRDb2xvcixcbiAgICAgICAgfSxcbiAgICAgIF19PlxuICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMudGl0bGVDb250YWluZXJdfT5cbiAgICAgICAge3RpdGxlICYmIChcbiAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy50aXRsZVRleHQsIHtjb2xvcjogdGhlbWUuTGFiZWxDb2xvcn1dfT5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICAgIHtkZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgIHN0eWxlcy5kZXNjcmlwdGlvblRleHQsXG4gICAgICAgICAgICAgIHtjb2xvcjogdGhlbWUuTGFiZWxDb2xvciwgbWFyZ2luVG9wOiBkZXNjcmlwdGlvbiA/IDEwIDogMH0sXG4gICAgICAgICAgICBdfT5cbiAgICAgICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNoaWxkcmVufT57Y2hpbGRyZW59PC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIG1hcmdpbkhvcml6b250YWw6IDIwLFxuICB9LFxuICB0aXRsZVRleHQ6IHtcbiAgICBmb250U2l6ZTogMTgsXG4gICAgZm9udFdlaWdodDogJzMwMCcsXG4gIH0sXG4gIHRpdGxlQ29udGFpbmVyOiB7XG4gICAgcGFkZGluZ0hvcml6b250YWw6IDEwLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogNSxcbiAgfSxcbiAgZGVzY3JpcHRpb25UZXh0OiB7XG4gICAgZm9udFNpemU6IDEyLFxuICAgIG9wYWNpdHk6IDAuNSxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBtYXJnaW5Ib3Jpem9udGFsOiAyMCxcbiAgICBtYXJnaW5WZXJ0aWNhbDogMTAsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSTlRlc3RlckJsb2NrO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge1NlY3Rpb25EYXRhfSBmcm9tICcuLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0IHtSTlRlc3RlclRoZW1lQ29udGV4dH0gZnJvbSAnLi9STlRlc3RlclRoZW1lJztcblxuY29uc3QgUk5UZXN0ZXJMaXN0RmlsdGVycyA9IHJlcXVpcmUoJy4vUk5UZXN0ZXJMaXN0RmlsdGVycycpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBJbWFnZSxcbiAgUGxhdGZvcm0sXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHRJbnB1dCxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxudHlwZSBQcm9wczxUPiA9IHtcbiAgZmlsdGVyOiBGdW5jdGlvbixcbiAgcmVuZGVyOiBGdW5jdGlvbixcbiAgZGlzYWJsZVNlYXJjaD86IGJvb2xlYW4sXG4gIHRlc3RJRD86IHN0cmluZyxcbiAgaGlkZUZpbHRlclBpbGxzPzogYm9vbGVhbixcbiAgcGFnZTogJ2V4YW1wbGVzX3BhZ2UnIHwgJ2NvbXBvbmVudHNfcGFnZScsXG4gIHNlY3Rpb25zOiAkUmVhZE9ubHlBcnJheTxTZWN0aW9uRGF0YTxUPj4sXG4gIC4uLlxufTtcblxudHlwZSBTdGF0ZSA9IHtmaWx0ZXI6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgLi4ufTtcblxuY2xhc3MgUk5UZXN0ZXJFeGFtcGxlRmlsdGVyPFQ+IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICBzdGF0ZTogU3RhdGUgPSB7ZmlsdGVyOiAnJywgY2F0ZWdvcnk6ICcnfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3QgZmlsdGVyVGV4dCA9IHRoaXMuc3RhdGUuZmlsdGVyO1xuICAgIGxldCBmaWx0ZXJSZWdleCA9IC8uKi87XG5cbiAgICB0cnkge1xuICAgICAgZmlsdGVyUmVnZXggPSBuZXcgUmVnRXhwKFN0cmluZyhmaWx0ZXJUZXh0KSwgJ2knKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBSZWdFeHA6ICVzXFxuJXMnLFxuICAgICAgICBmaWx0ZXJUZXh0LFxuICAgICAgICBlcnJvci5tZXNzYWdlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXIgPSAoZXhhbXBsZTogVCkgPT4ge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLnN0YXRlLmNhdGVnb3J5O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlU2VhcmNoIHx8XG4gICAgICAgIHRoaXMucHJvcHMuZmlsdGVyKHtleGFtcGxlLCBmaWx0ZXJSZWdleCwgY2F0ZWdvcnl9KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgbGV0IGZpbHRlcmVkU2VjdGlvbnMgPSB0aGlzLnByb3BzLnNlY3Rpb25zLm1hcChzZWN0aW9uID0+ICh7XG4gICAgICAuLi5zZWN0aW9uLFxuICAgICAgZGF0YTogc2VjdGlvbi5kYXRhLmZpbHRlcihmaWx0ZXIpLFxuICAgIH0pKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmZpbHRlci50cmltKCkgIT09ICcnIHx8IHRoaXMuc3RhdGUuY2F0ZWdvcnkudHJpbSgpICE9PSAnJykge1xuICAgICAgZmlsdGVyZWRTZWN0aW9ucyA9IGZpbHRlcmVkU2VjdGlvbnMuZmlsdGVyKFxuICAgICAgICBzZWN0aW9uID0+IHNlY3Rpb24udGl0bGUgIT09ICdSZWNlbnRseSBWaWV3ZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICB7dGhpcy5fcmVuZGVyVGV4dElucHV0KCl9XG4gICAgICAgIHt0aGlzLl9yZW5kZXJGaWx0ZXJlZFNlY3Rpb25zKGZpbHRlcmVkU2VjdGlvbnMpfVxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBfcmVuZGVyRmlsdGVyZWRTZWN0aW9ucyhcbiAgICBmaWx0ZXJlZFNlY3Rpb25zOiAkUmVhZE9ubHlBcnJheTx7XG4gICAgICBkYXRhOiBBcnJheTxUPixcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgdGl0bGU6IHN0cmluZyxcbiAgICB9PixcbiAgKTogUmVhY3QuTm9kZSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnZSA9PT0gJ2V4YW1wbGVzX3BhZ2UnKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U2Nyb2xsVmlld1xuICAgICAgICAgIGtleWJvYXJkU2hvdWxkUGVyc2lzdFRhcHM9XCJoYW5kbGVkXCJcbiAgICAgICAgICBrZXlib2FyZERpc21pc3NNb2RlPVwiaW50ZXJhY3RpdmVcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5yZW5kZXIoe2ZpbHRlcmVkU2VjdGlvbnN9KX1cbiAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMucmVuZGVyKHtmaWx0ZXJlZFNlY3Rpb25zfSk7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlclRleHRJbnB1dCgpOiA/UmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlU2VhcmNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxSTlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAge3RoZW1lID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuc2VhcmNoUm93LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm0uT1MgPT09ICdpb3MnXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5TeXN0ZW1CYWNrZ3JvdW5kQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgICA6IHRoZW1lLkJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdfT5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXRTdHlsZX0+XG4gICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uL2Fzc2V0cy9zZWFyY2gtaWNvbi5wbmcnKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuc2VhcmNoSWNvbn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICAgIGF1dG9DYXBpdGFsaXplPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICBhdXRvQ29ycmVjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBjbGVhckJ1dHRvbk1vZGU9XCJhbHdheXNcIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0ZXh0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe2ZpbHRlcjogdGV4dH0pKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclRleHRDb2xvcj17dGhlbWUuUGxhY2Vob2xkZXJUZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgICB1bmRlcmxpbmVDb2xvckFuZHJvaWQ9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXMuc2VhcmNoVGV4dElucHV0LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoZW1lLkxhYmVsQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5TZWNvbmRhcnlHcm91cGVkQmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5RdWF0ZXJuYXJ5TGFiZWxDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAgICAgICB0ZXN0SUQ9e3RoaXMucHJvcHMudGVzdElEfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZmlsdGVyfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgeyF0aGlzLnByb3BzLmhpZGVGaWx0ZXJQaWxscyAmJiAoXG4gICAgICAgICAgICAgICAgPFJOVGVzdGVyTGlzdEZpbHRlcnNcbiAgICAgICAgICAgICAgICAgIG9uRmlsdGVyQnV0dG9uUHJlc3M9e2ZpbHRlckxhYmVsID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2NhdGVnb3J5OiBmaWx0ZXJMYWJlbH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgPC9STlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgc2VhcmNoUm93OiB7XG4gICAgcGFkZGluZ0hvcml6b250YWw6IDIwLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogNixcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgc2VhcmNoVGV4dElucHV0OiB7XG4gICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogMCxcbiAgICBoZWlnaHQ6IDM1LFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nTGVmdDogMzUsXG4gIH0sXG4gIHRleHRJbnB1dFN0eWxlOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgcmlnaHQ6IDEwLFxuICB9LFxuICBzZWFyY2hJY29uOiB7XG4gICAgd2lkdGg6IDIwLFxuICAgIGhlaWdodDogMjAsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDI3LFxuICAgIHpJbmRleDogMixcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJOVGVzdGVyRXhhbXBsZUZpbHRlcjtcbiIsIiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1N0eWxlU2hlZXQsIFRleHQsIFRvdWNoYWJsZU9wYWNpdHksIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNvbnN0IGZpbHRlcnMgPSBbJ0Jhc2ljJywgJ1VJJywgJ0xpc3RWaWV3JywgJ2lPUycsICdBbmRyb2lkJ107XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uRmlsdGVyQnV0dG9uUHJlc3M6IChmaWx0ZXI6IHN0cmluZykgPT4gbWl4ZWQsIC8vb3B0aW9uYWwgb25seSBmb3IgdGVzdGluZ1xuICAuLi5cbn07XG5cbmNsYXNzIFJOVGVzdGVyTGlzdEZpbHRlcnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIFByb3BzLFxuICB7fGN1cnJlbnRGaWx0ZXI6IHN0cmluZ3x9LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY3VycmVudEZpbHRlcjogJycsXG4gICAgfTtcbiAgfVxuXG4gIGZpbHRlclByZXNzZWQ6IGFueSA9IGZpbHRlckxhYmVsID0+IHtcbiAgICBjb25zdCBuZXdGaWx0ZXIgPVxuICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50RmlsdGVyID09PSBmaWx0ZXJMYWJlbCA/ICcnIDogZmlsdGVyTGFiZWw7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjdXJyZW50RmlsdGVyOiBuZXdGaWx0ZXIsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlckJ1dHRvblByZXNzKG5ld0ZpbHRlcik7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtmaWx0ZXJzLm1hcChmaWx0ZXJMYWJlbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICAgIGtleT17ZmlsdGVyTGFiZWx9XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLnBpbGxTdHlsZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuY3VycmVudEZpbHRlciA9PT0gZmlsdGVyTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICA/ICcjMDQ1Y2ZjJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLmZpbHRlclByZXNzZWQoZmlsdGVyTGFiZWwpfT5cbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuY3VycmVudEZpbHRlciA9PT0gZmlsdGVyTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICA/ICd3aGl0ZSdcbiAgICAgICAgICAgICAgICAgICAgICA6ICcjMDQ1Y2ZjJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyTGFiZWx9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICBwaWxsU3R5bGU6IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBtYXJnaW5Ib3Jpem9udGFsOiA1LFxuICAgIG1hcmdpblZlcnRpY2FsOiAxMCxcbiAgICBib3JkZXJSYWRpdXM6IDIwLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnIzA0NWNmYycsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSTlRlc3Rlckxpc3RGaWx0ZXJzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVmlldy9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCB0eXBlIHtTeW50aGV0aWNFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtOYXRpdmVNb2R1bGVzLCBTdHlsZVNoZWV0LCBVSU1hbmFnZXIsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNvbnN0IHtUZXN0TW9kdWxlfSA9IE5hdGl2ZU1vZHVsZXM7XG5cbi8vIFZlcmlmeSB0aGF0IFJDVFNuYXBzaG90IGlzIHBhcnQgb2YgdGhlIFVJTWFuYWdlciBzaW5jZSBpdCBpcyBvbmx5IGxvYWRlZFxuLy8gaWYgeW91IGhhdmUgbGlua2VkIGFnYWluc3QgUkNUVGVzdCBsaWtlIGluIHRlc3RzLCBvdGhlcndpc2Ugd2Ugd2lsbCBoYXZlXG4vLyBhIHdhcm5pbmcgcHJpbnRlZCBvdXRcbmNvbnN0IFJDVFNuYXBzaG90ID0gVUlNYW5hZ2VyLmhhc1ZpZXdNYW5hZ2VyQ29uZmlnKCdSQ1RTbmFwc2hvdCcpXG4gID8gcmVxdWlyZSgnLi4vLi4vLi4vUkNUVGVzdC9SQ1RTbmFwc2hvdE5hdGl2ZUNvbXBvbmVudCcpXG4gIDogVmlldztcblxudHlwZSBTbmFwc2hvdFJlYWR5RXZlbnQgPSBTeW50aGV0aWNFdmVudDxcbiAgJFJlYWRPbmx5PHt0ZXN0SWRlbnRpZmllcjogc3RyaW5nLCAuLi59Pixcbj47XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgLi4uVmlld1Byb3BzLFxuICBvblNuYXBzaG90UmVhZHk/OiA/KGV2ZW50OiBTbmFwc2hvdFJlYWR5RXZlbnQpID0+IG1peGVkLFxuICB0ZXN0SWRlbnRpZmllcj86ID9zdHJpbmcsXG58fT47XG5cbmNsYXNzIFNuYXBzaG90Vmlld0lPUyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICBvbkRlZmF1bHRBY3Rpb246IChldmVudDogU25hcHNob3RSZWFkeUV2ZW50KSA9PiB2b2lkID0gKFxuICAgIGV2ZW50OiBTbmFwc2hvdFJlYWR5RXZlbnQsXG4gICkgPT4ge1xuICAgIFRlc3RNb2R1bGUudmVyaWZ5U25hcHNob3QoVGVzdE1vZHVsZS5tYXJrVGVzdFBhc3NlZCk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHRlc3RJZGVudGlmaWVyID0gdGhpcy5wcm9wcy50ZXN0SWRlbnRpZmllciB8fCAndGVzdCc7XG4gICAgY29uc3Qgb25TbmFwc2hvdFJlYWR5ID0gdGhpcy5wcm9wcy5vblNuYXBzaG90UmVhZHkgfHwgdGhpcy5vbkRlZmF1bHRBY3Rpb247XG4gICAgcmV0dXJuIChcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSAtIFR5cGluZyBSZWFjdE5hdGl2ZUNvbXBvbmVudCByZXZlYWxlZCBlcnJvcnNcbiAgICAgIDxSQ1RTbmFwc2hvdFxuICAgICAgICBzdHlsZT17c3R5bGUuc25hcHNob3R9XG4gICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICBvblNuYXBzaG90UmVhZHk9e29uU25hcHNob3RSZWFkeX1cbiAgICAgICAgdGVzdElkZW50aWZpZXI9e3Rlc3RJZGVudGlmaWVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBzbmFwc2hvdDoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTbmFwc2hvdFZpZXdJT1M7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVmlldy9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCB0eXBlIHtIb3N0Q29tcG9uZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1N5bnRoZXRpY0V2ZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuY29uc3Qge3JlcXVpcmVOYXRpdmVDb21wb25lbnR9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbnR5cGUgU25hcHNob3RSZWFkeUV2ZW50ID0gU3ludGhldGljRXZlbnQ8XG4gICRSZWFkT25seTx7dGVzdElkZW50aWZpZXI6IHN0cmluZywgLi4ufT4sXG4+O1xuXG50eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcbiAgb25TbmFwc2hvdFJlYWR5PzogPyhldmVudDogU25hcHNob3RSZWFkeUV2ZW50KSA9PiBtaXhlZCxcbiAgdGVzdElkZW50aWZpZXI/OiA/c3RyaW5nLFxufH0+O1xuXG5jb25zdCBSQ1RTbmFwc2hvdE5hdGl2ZUNvbXBvbmVudDogSG9zdENvbXBvbmVudDxOYXRpdmVQcm9wcz4gPVxuICByZXF1aXJlTmF0aXZlQ29tcG9uZW50PE5hdGl2ZVByb3BzPignUkNUU25hcHNob3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSQ1RTbmFwc2hvdE5hdGl2ZUNvbXBvbmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUluZm99IGZyb20gJy4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBSTlRlc3Rlck1vZHVsZUNvbnRhaW5lciBmcm9tICcuL2NvbXBvbmVudHMvUk5UZXN0ZXJNb2R1bGVDb250YWluZXInO1xuaW1wb3J0IFJOVGVzdGVyTW9kdWxlTGlzdCBmcm9tICcuL2NvbXBvbmVudHMvUk5UZXN0ZXJNb2R1bGVMaXN0JztcbmltcG9ydCBSTlRlc3Rlck5hdkJhciwge25hdkJhckhlaWdodH0gZnJvbSAnLi9jb21wb25lbnRzL1JOVGVzdGVyTmF2YmFyJztcbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHQsIHRoZW1lc30gZnJvbSAnLi9jb21wb25lbnRzL1JOVGVzdGVyVGhlbWUnO1xuaW1wb3J0IFJOVFRpdGxlQmFyIGZyb20gJy4vY29tcG9uZW50cy9STlRUaXRsZUJhcic7XG5pbXBvcnQgUk5UZXN0ZXJMaXN0IGZyb20gJy4vdXRpbHMvUk5UZXN0ZXJMaXN0JztcbmltcG9ydCB7XG4gIFJOVGVzdGVyTmF2aWdhdGlvbkFjdGlvbnNUeXBlLFxuICBSTlRlc3Rlck5hdmlnYXRpb25SZWR1Y2VyLFxufSBmcm9tICcuL3V0aWxzL1JOVGVzdGVyTmF2aWdhdGlvblJlZHVjZXInO1xuaW1wb3J0IHtcbiAgU2NyZWVucyxcbiAgZ2V0RXhhbXBsZXNMaXN0V2l0aFJlY2VudGx5VXNlZCxcbiAgaW5pdGlhbE5hdmlnYXRpb25TdGF0ZSxcbn0gZnJvbSAnLi91dGlscy90ZXN0ZXJTdGF0ZVV0aWxzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEJhY2tIYW5kbGVyLFxuICBMaW5raW5nLFxuICBTdHlsZVNoZWV0LFxuICBWaWV3LFxuICB1c2VDb2xvclNjaGVtZSxcbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuLy8gUk5UZXN0ZXIgQXBwIGN1cnJlbnRseSB1c2VzIGluIG1lbW9yeSBzdG9yYWdlIGZvciBzdG9yaW5nIG5hdmlnYXRpb24gc3RhdGVcblxuY29uc3QgUk5UZXN0ZXJBcHAgPSAoe1xuICB0ZXN0TGlzdCxcbn06IHtcbiAgdGVzdExpc3Q/OiB7XG4gICAgY29tcG9uZW50cz86IEFycmF5PFJOVGVzdGVyTW9kdWxlSW5mbz4sXG4gICAgYXBpcz86IEFycmF5PFJOVGVzdGVyTW9kdWxlSW5mbz4sXG4gIH0sXG59KTogUmVhY3QuTm9kZSA9PiB7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gUmVhY3QudXNlUmVkdWNlcihcbiAgICBSTlRlc3Rlck5hdmlnYXRpb25SZWR1Y2VyLFxuICAgIGluaXRpYWxOYXZpZ2F0aW9uU3RhdGUsXG4gICk7XG4gIGNvbnN0IGNvbG9yU2NoZW1lID0gdXNlQ29sb3JTY2hlbWUoKTtcblxuICBjb25zdCB7XG4gICAgYWN0aXZlTW9kdWxlS2V5LFxuICAgIGFjdGl2ZU1vZHVsZVRpdGxlLFxuICAgIGFjdGl2ZU1vZHVsZUV4YW1wbGVLZXksXG4gICAgc2NyZWVuLFxuICAgIHJlY2VudGx5VXNlZCxcbiAgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGV4YW1wbGVzTGlzdCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0RXhhbXBsZXNMaXN0V2l0aFJlY2VudGx5VXNlZCh7cmVjZW50bHlVc2VkLCB0ZXN0TGlzdH0pLFxuICAgIFtyZWNlbnRseVVzZWQsIHRlc3RMaXN0XSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVCYWNrUHJlc3MgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFjdGl2ZU1vZHVsZUtleSAhPSBudWxsKSB7XG4gICAgICBkaXNwYXRjaCh7dHlwZTogUk5UZXN0ZXJOYXZpZ2F0aW9uQWN0aW9uc1R5cGUuQkFDS19CVVRUT05fUFJFU1N9KTtcbiAgICB9XG4gIH0sIFtkaXNwYXRjaCwgYWN0aXZlTW9kdWxlS2V5XSk7XG5cbiAgLy8gU2V0dXAgaGFyZHdhcmUgYmFjayBidXR0b24gcHJlc3MgbGlzdGVuZXJcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVIYXJkd2FyZUJhY2tQcmVzcyA9ICgpID0+IHtcbiAgICAgIGlmIChhY3RpdmVNb2R1bGVLZXkpIHtcbiAgICAgICAgaGFuZGxlQmFja1ByZXNzKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBCYWNrSGFuZGxlci5hZGRFdmVudExpc3RlbmVyKCdoYXJkd2FyZUJhY2tQcmVzcycsIGhhbmRsZUhhcmR3YXJlQmFja1ByZXNzKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBCYWNrSGFuZGxlci5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnaGFyZHdhcmVCYWNrUHJlc3MnLFxuICAgICAgICBoYW5kbGVIYXJkd2FyZUJhY2tQcmVzcyxcbiAgICAgICk7XG4gICAgfTtcbiAgfSwgW2FjdGl2ZU1vZHVsZUtleSwgaGFuZGxlQmFja1ByZXNzXSk7XG5cbiAgY29uc3QgaGFuZGxlTW9kdWxlQ2FyZFByZXNzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHtleGFtcGxlVHlwZSwga2V5LCB0aXRsZX06IGFueSkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBSTlRlc3Rlck5hdmlnYXRpb25BY3Rpb25zVHlwZS5NT0RVTEVfQ0FSRF9QUkVTUyxcbiAgICAgICAgZGF0YToge2V4YW1wbGVUeXBlLCBrZXksIHRpdGxlfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVNb2R1bGVFeGFtcGxlQ2FyZFByZXNzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV4YW1wbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogUk5UZXN0ZXJOYXZpZ2F0aW9uQWN0aW9uc1R5cGUuRVhBTVBMRV9DQVJEX1BSRVNTLFxuICAgICAgICBkYXRhOiB7a2V5OiBleGFtcGxlTmFtZX0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaF0sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTmF2QmFyUHJlc3MgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoYXJnczoge3NjcmVlbjogc3RyaW5nfSkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBSTlRlc3Rlck5hdmlnYXRpb25BY3Rpb25zVHlwZS5OQVZCQVJfUFJFU1MsXG4gICAgICAgIGRhdGE6IHtzY3JlZW46IGFyZ3Muc2NyZWVufSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoXSxcbiAgKTtcblxuICAvLyBTZXR1cCBMaW5raW5nIGV2ZW50IHN1YnNjcmlwdGlvblxuICBjb25zdCBoYW5kbGVPcGVuVXJsUmVxdWVzdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh7dXJsfToge3VybDogc3RyaW5nLCAuLi59KSA9PiB7XG4gICAgICAvLyBTdXBwb3J0ZWQgVVJMIHBhdHRlcm4ocyk6XG4gICAgICAvLyAqICBybnRlc3RlcjovL2V4YW1wbGUvPG1vZHVsZUtleT5cbiAgICAgIC8vICogIHJudGVzdGVyOi8vZXhhbXBsZS88bW9kdWxlS2V5Pi88ZXhhbXBsZUtleT5cbiAgICAgIGNvbnN0IG1hdGNoID1cbiAgICAgICAgL15ybnRlc3RlcjpcXC9cXC9leGFtcGxlXFwvKFthLXpBLVowLTlfLV0rKSg/OlxcLyhbYS16QS1aMC05Xy1dKykpPyQvLmV4ZWMoXG4gICAgICAgICAgdXJsLFxuICAgICAgICApO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYGhhbmRsZU9wZW5VcmxSZXF1ZXN0OiBSZWNlaXZlZCB1bnN1cHBvcnRlZCBVUkw6ICcke3VybH0nYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByYXdNb2R1bGVLZXkgPSBtYXRjaFsxXTtcbiAgICAgIGNvbnN0IGV4YW1wbGVLZXkgPSBtYXRjaFsyXTtcblxuICAgICAgLy8gRm9yIHRvb2xpbmcgY29tcGF0aWJpbGl0eSwgYWxsb3cgYWxsIHRoZXNlIHZhcmlhbnRzIGZvciBlYWNoIG1vZHVsZSBrZXk6XG4gICAgICBjb25zdCB2YWxpZE1vZHVsZUtleXMgPSBbXG4gICAgICAgIHJhd01vZHVsZUtleSxcbiAgICAgICAgYCR7cmF3TW9kdWxlS2V5fUluZGV4YCxcbiAgICAgICAgYCR7cmF3TW9kdWxlS2V5fUV4YW1wbGVgLFxuICAgICAgXS5maWx0ZXIoayA9PiBSTlRlc3Rlckxpc3QuTW9kdWxlc1trXSAhPSBudWxsKTtcbiAgICAgIGlmICh2YWxpZE1vZHVsZUtleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIGlmICh2YWxpZE1vZHVsZUtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBoYW5kbGVPcGVuVXJsUmVxdWVzdDogVW5hYmxlIHRvIGZpbmQgcmVxdWVzdGVkIG1vZHVsZSB3aXRoIGtleTogJyR7cmF3TW9kdWxlS2V5fSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBoYW5kbGVPcGVuVXJsUmVxdWVzdDogRm91bmQgbXVsdGlwbGUgbWF0Y2hpbmcgbW9kdWxlIHdpdGgga2V5OiAnJHtyYXdNb2R1bGVLZXl9JywgdW5hYmxlIHRvIHJlc29sdmVgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvbHZlZE1vZHVsZUtleSA9IHZhbGlkTW9kdWxlS2V5c1swXTtcbiAgICAgIGNvbnN0IGV4YW1wbGVNb2R1bGUgPSBSTlRlc3Rlckxpc3QuTW9kdWxlc1tyZXNvbHZlZE1vZHVsZUtleV07XG5cbiAgICAgIGlmIChleGFtcGxlS2V5ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsaWRFeGFtcGxlS2V5cyA9IGV4YW1wbGVNb2R1bGUuZXhhbXBsZXMuZmlsdGVyKFxuICAgICAgICAgIGUgPT4gZS5uYW1lID09PSBleGFtcGxlS2V5LFxuICAgICAgICApO1xuICAgICAgICBpZiAodmFsaWRFeGFtcGxlS2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICBpZiAodmFsaWRFeGFtcGxlS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBoYW5kbGVPcGVuVXJsUmVxdWVzdDogVW5hYmxlIHRvIGZpbmQgcmVxdWVzdGVkIGV4YW1wbGUgd2l0aCBrZXk6ICcke2V4YW1wbGVLZXl9JyB3aXRoaW4gbW9kdWxlOiAnJHtyZXNvbHZlZE1vZHVsZUtleX0nYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBoYW5kbGVPcGVuVXJsUmVxdWVzdDogRm91bmQgbXVsdGlwbGUgbWF0Y2hpbmcgZXhhbXBsZSB3aXRoIGtleTogJyR7ZXhhbXBsZUtleX0nIHdpdGhpbiBtb2R1bGU6ICcke3Jlc29sdmVkTW9kdWxlS2V5fScsIHVuYWJsZSB0byByZXNvbHZlYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYGhhbmRsZU9wZW5VcmxSZXF1ZXN0OiBPcGVuaW5nIG1vZHVsZTogJyR7cmVzb2x2ZWRNb2R1bGVLZXl9JywgZXhhbXBsZTogJyR7XG4gICAgICAgICAgZXhhbXBsZUtleSB8fCAnbnVsbCdcbiAgICAgICAgfSdgLFxuICAgICAgKTtcblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBSTlRlc3Rlck5hdmlnYXRpb25BY3Rpb25zVHlwZS5FWEFNUExFX09QRU5fVVJMX1JFUVVFU1QsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBrZXk6IHJlc29sdmVkTW9kdWxlS2V5LFxuICAgICAgICAgIHRpdGxlOiBleGFtcGxlTW9kdWxlLnRpdGxlIHx8IHJlc29sdmVkTW9kdWxlS2V5LFxuICAgICAgICAgIGV4YW1wbGVLZXksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaF0sXG4gICk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gTGlua2luZy5hZGRFdmVudExpc3RlbmVyKCd1cmwnLCBoYW5kbGVPcGVuVXJsUmVxdWVzdCk7XG4gICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbi5yZW1vdmUoKTtcbiAgfSwgW2hhbmRsZU9wZW5VcmxSZXF1ZXN0XSk7XG5cbiAgY29uc3QgdGhlbWUgPSBjb2xvclNjaGVtZSA9PT0gJ2RhcmsnID8gdGhlbWVzLmRhcmsgOiB0aGVtZXMubGlnaHQ7XG5cbiAgaWYgKGV4YW1wbGVzTGlzdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlTW9kdWxlID1cbiAgICBhY3RpdmVNb2R1bGVLZXkgIT0gbnVsbCA/IFJOVGVzdGVyTGlzdC5Nb2R1bGVzW2FjdGl2ZU1vZHVsZUtleV0gOiBudWxsO1xuICBjb25zdCBhY3RpdmVNb2R1bGVFeGFtcGxlID1cbiAgICBhY3RpdmVNb2R1bGVFeGFtcGxlS2V5ICE9IG51bGxcbiAgICAgID8gYWN0aXZlTW9kdWxlPy5leGFtcGxlcy5maW5kKGUgPT4gZS5uYW1lID09PSBhY3RpdmVNb2R1bGVFeGFtcGxlS2V5KVxuICAgICAgOiBudWxsO1xuICBjb25zdCB0aXRsZSA9XG4gICAgYWN0aXZlTW9kdWxlVGl0bGUgIT0gbnVsbFxuICAgICAgPyBhY3RpdmVNb2R1bGVUaXRsZVxuICAgICAgOiBzY3JlZW4gPT09IFNjcmVlbnMuQ09NUE9ORU5UU1xuICAgICAgPyAnQ29tcG9uZW50cydcbiAgICAgIDogJ0FQSXMnO1xuXG4gIGNvbnN0IGFjdGl2ZUV4YW1wbGVMaXN0ID1cbiAgICBzY3JlZW4gPT09IFNjcmVlbnMuQ09NUE9ORU5UUyA/IGV4YW1wbGVzTGlzdC5jb21wb25lbnRzIDogZXhhbXBsZXNMaXN0LmFwaXM7XG5cbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoZW1lfT5cbiAgICAgIDxSTlRUaXRsZUJhclxuICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgb25CYWNrPXthY3RpdmVNb2R1bGUgPyBoYW5kbGVCYWNrUHJlc3MgOiBudWxsfVxuICAgICAgICBkb2N1bWVudGF0aW9uVVJMPXthY3RpdmVNb2R1bGU/LmRvY3VtZW50YXRpb25VUkx9XG4gICAgICAvPlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMuY29udGFpbmVyLCB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5Hcm91cGVkQmFja2dyb3VuZENvbG9yLFxuICAgICAgICB9KX0+XG4gICAgICAgIHthY3RpdmVNb2R1bGUgIT0gbnVsbCA/IChcbiAgICAgICAgICA8Uk5UZXN0ZXJNb2R1bGVDb250YWluZXJcbiAgICAgICAgICAgIG1vZHVsZT17YWN0aXZlTW9kdWxlfVxuICAgICAgICAgICAgZXhhbXBsZT17YWN0aXZlTW9kdWxlRXhhbXBsZX1cbiAgICAgICAgICAgIG9uRXhhbXBsZUNhcmRQcmVzcz17aGFuZGxlTW9kdWxlRXhhbXBsZUNhcmRQcmVzc31cbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxSTlRlc3Rlck1vZHVsZUxpc3RcbiAgICAgICAgICAgIHNlY3Rpb25zPXthY3RpdmVFeGFtcGxlTGlzdH1cbiAgICAgICAgICAgIGhhbmRsZU1vZHVsZUNhcmRQcmVzcz17aGFuZGxlTW9kdWxlQ2FyZFByZXNzfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJvdHRvbU5hdmJhcn0+XG4gICAgICAgIDxSTlRlc3Rlck5hdkJhclxuICAgICAgICAgIHNjcmVlbj17c2NyZWVuIHx8IFNjcmVlbnMuQ09NUE9ORU5UU31cbiAgICAgICAgICBpc0V4YW1wbGVQYWdlT3Blbj17ISFhY3RpdmVNb2R1bGV9XG4gICAgICAgICAgaGFuZGxlTmF2QmFyUHJlc3M9e2hhbmRsZU5hdkJhclByZXNzfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSTlRlc3RlckFwcDtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICBib3R0b21OYXZiYXI6IHtcbiAgICBoZWlnaHQ6IG5hdkJhckhlaWdodCxcbiAgfSxcbiAgaGlkZGVuOiB7XG4gICAgZGlzcGxheTogJ25vbmUnLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQge1JOVGVzdGVyVGhlbWVDb250ZXh0fSBmcm9tICcuL1JOVGVzdGVyVGhlbWUnO1xuaW1wb3J0IFJOVFByZXNzYWJsZVJvdyBmcm9tICcuL1JOVFByZXNzYWJsZVJvdyc7XG5cbmNvbnN0IFJOVGVzdGVyRXhhbXBsZUZpbHRlciA9IHJlcXVpcmUoJy4vUk5UZXN0ZXJFeGFtcGxlRmlsdGVyJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7UGxhdGZvcm0sIFNlY3Rpb25MaXN0LCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuY29uc3QgRXhhbXBsZU1vZHVsZVJvdyA9ICh7XG4gIG9uU2hvd1VuZGVybGF5LFxuICBvbkhpZGVVbmRlcmxheSxcbiAgaXRlbSxcbiAgaGFuZGxlUHJlc3MsXG59KSA9PiB7XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChSTlRlc3RlclRoZW1lQ29udGV4dCk7XG4gIGNvbnN0IHBsYXRmb3JtID0gaXRlbS5tb2R1bGUucGxhdGZvcm07XG4gIGNvbnN0IG9uSW9zID0gIXBsYXRmb3JtIHx8IHBsYXRmb3JtID09PSAnaW9zJztcbiAgY29uc3Qgb25BbmRyb2lkID0gIXBsYXRmb3JtIHx8IHBsYXRmb3JtID09PSAnYW5kcm9pZCc7XG4gIHJldHVybiAoXG4gICAgPFJOVFByZXNzYWJsZVJvd1xuICAgICAgdGl0bGU9e2l0ZW0ubW9kdWxlLnRpdGxlfVxuICAgICAgZGVzY3JpcHRpb249e2l0ZW0ubW9kdWxlLmRlc2NyaXB0aW9ufVxuICAgICAgdGVzdElEPXtpdGVtLm1vZHVsZS50aXRsZX1cbiAgICAgIG9uUHJlc3NJbj17b25TaG93VW5kZXJsYXl9XG4gICAgICBvblByZXNzT3V0PXtvbkhpZGVVbmRlcmxheX1cbiAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17aXRlbS5tb2R1bGUudGl0bGUgKyAnICcgKyBpdGVtLm1vZHVsZS5kZXNjcmlwdGlvbn1cbiAgICAgIGJvdHRvbUFkZE9uPXtcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3R0b21Sb3dTdHlsZX0+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogdGhlbWUuU2Vjb25kYXJ5TGFiZWxDb2xvciwgd2lkdGg6IDY1fX0+XG4gICAgICAgICAgICB7aXRlbS5tb2R1bGUuY2F0ZWdvcnkgfHwgJ090aGVyJ31cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5wbGF0Zm9ybUxhYmVsU3R5bGV9PlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBjb2xvcjogb25Jb3MgPyAnIzc4Nzg3OCcgOiB0aGVtZS5TZXBhcmF0b3JDb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBvbklvcyA/ICc1MDAnIDogJzMwMCcsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICBpT1NcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9uQW5kcm9pZCA/ICcjNzg3ODc4JyA6IHRoZW1lLlNlcGFyYXRvckNvbG9yLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IG9uQW5kcm9pZCA/ICc1MDAnIDogJzMwMCcsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICBBbmRyb2lkXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICB9XG4gICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICBoYW5kbGVQcmVzcyh7XG4gICAgICAgICAgZXhhbXBsZVR5cGU6IGl0ZW0uZXhhbXBsZVR5cGUsXG4gICAgICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgICAgICB0aXRsZTogaXRlbS5tb2R1bGUudGl0bGUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn07XG5cbmNvbnN0IHJlbmRlclNlY3Rpb25IZWFkZXIgPSAoe3NlY3Rpb259OiB7c2VjdGlvbjogYW55LCAuLi59KSA9PiAoXG4gIDxSTlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICB7dGhlbWUgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHRcbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc3R5bGVzLnNlY3Rpb25IZWFkZXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbG9yOiB0aGVtZS5TZWNvbmRhcnlMYWJlbENvbG9yLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLkdyb3VwZWRCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF19PlxuICAgICAgICAgIHtzZWN0aW9uLnRpdGxlfVxuICAgICAgICA8L1RleHQ+XG4gICAgICApO1xuICAgIH19XG4gIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4pO1xuXG5jb25zdCBSTlRlc3Rlck1vZHVsZUxpc3Q6IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PGFueSwgdm9pZD4gPSBSZWFjdC5tZW1vKFxuICAoe3NlY3Rpb25zLCBoYW5kbGVNb2R1bGVDYXJkUHJlc3N9KSA9PiB7XG4gICAgY29uc3QgZmlsdGVyID0gKHtleGFtcGxlLCBmaWx0ZXJSZWdleCwgY2F0ZWdvcnl9OiBhbnkpID0+XG4gICAgICBmaWx0ZXJSZWdleC50ZXN0KGV4YW1wbGUubW9kdWxlLnRpdGxlKSAmJlxuICAgICAgKCFjYXRlZ29yeSB8fCBleGFtcGxlLmNhdGVnb3J5ID09PSBjYXRlZ29yeSk7XG5cbiAgICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgICBjb25zdCByZW5kZXJMaXN0SXRlbSA9ICh7aXRlbSwgc2VjdGlvbiwgc2VwYXJhdG9yc30pID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFeGFtcGxlTW9kdWxlUm93XG4gICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICBzZWN0aW9uPXtzZWN0aW9ufVxuICAgICAgICAgIG9uU2hvd1VuZGVybGF5PXtzZXBhcmF0b3JzLmhpZ2hsaWdodH1cbiAgICAgICAgICBvbkhpZGVVbmRlcmxheT17c2VwYXJhdG9ycy51bmhpZ2hsaWdodH1cbiAgICAgICAgICBoYW5kbGVQcmVzcz17aGFuZGxlTW9kdWxlQ2FyZFByZXNzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubGlzdENvbnRhaW5lcn0+XG4gICAgICAgIDxSTlRlc3RlckV4YW1wbGVGaWx0ZXJcbiAgICAgICAgICB0ZXN0SUQ9XCJleHBsb3Jlcl9zZWFyY2hcIlxuICAgICAgICAgIHBhZ2U9XCJjb21wb25lbnRzX3BhZ2VcIlxuICAgICAgICAgIHNlY3Rpb25zPXtzZWN0aW9uc31cbiAgICAgICAgICBmaWx0ZXI9e2ZpbHRlcn1cbiAgICAgICAgICBoaWRlRmlsdGVyUGlsbHM9e3RydWV9XG4gICAgICAgICAgcmVuZGVyPXsoe2ZpbHRlcmVkU2VjdGlvbnN9KSA9PiAoXG4gICAgICAgICAgICA8U2VjdGlvbkxpc3RcbiAgICAgICAgICAgICAgc2VjdGlvbnM9e2ZpbHRlcmVkU2VjdGlvbnN9XG4gICAgICAgICAgICAgIGV4dHJhRGF0YT17ZmlsdGVyZWRTZWN0aW9uc31cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17cmVuZGVyTGlzdEl0ZW19XG4gICAgICAgICAgICAgIGtleWJvYXJkU2hvdWxkUGVyc2lzdFRhcHM9XCJoYW5kbGVkXCJcbiAgICAgICAgICAgICAgYXV0b21hdGljYWxseUFkanVzdENvbnRlbnRJbnNldHM9e2ZhbHNlfVxuICAgICAgICAgICAgICBrZXlib2FyZERpc21pc3NNb2RlPVwib24tZHJhZ1wiXG4gICAgICAgICAgICAgIHJlbmRlclNlY3Rpb25IZWFkZXI9e3JlbmRlclNlY3Rpb25IZWFkZXJ9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50c1xuICAgICAgICAgICAgICBMaXN0Rm9vdGVyQ29tcG9uZW50PXsoKSA9PiA8VmlldyBzdHlsZT17e2hlaWdodDogODB9fSAvPn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9LFxuKTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBsaXN0Q29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgc2VjdGlvbkhlYWRlcjoge1xuICAgIHBhZGRpbmc6IDUsXG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgZm9udFNpemU6IDExLFxuICB9LFxuICByb3c6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDE1LFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogMTIsXG4gICAgbWFyZ2luVmVydGljYWw6IFBsYXRmb3JtLnNlbGVjdCh7aW9zOiA0LCBhbmRyb2lkOiA4fSksXG4gICAgbWFyZ2luSG9yaXpvbnRhbDogMTUsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGVsZXZhdGlvbjogNSxcbiAgfSxcbiAgdG9wUm93U3R5bGU6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGJvdHRvbVJvd1N0eWxlOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgfSxcbiAgaW1hZ2VWaWV3U3R5bGU6IHtcbiAgICBoZWlnaHQ6IDMwLFxuICAgIHdpZHRoOiAzMCxcbiAgICBib3JkZXJSYWRpdXM6IDE1LFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBib3R0b206IDUsXG4gIH0sXG4gIGltYWdlU3R5bGU6IHtcbiAgICBoZWlnaHQ6IDI1LFxuICAgIHdpZHRoOiAyNSxcbiAgfSxcbiAgcGxhdGZvcm1MYWJlbFN0eWxlOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUk5UZXN0ZXJNb2R1bGVMaXN0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3RlclRoZW1lfSBmcm9tICcuL1JOVGVzdGVyVGhlbWUnO1xuXG5pbXBvcnQge1JOVGVzdGVyVGhlbWVDb250ZXh0fSBmcm9tICcuL1JOVGVzdGVyVGhlbWUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJbWFnZSwgUHJlc3NhYmxlLCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuY29uc3QgTmF2YmFyQnV0dG9uID0gKHtcbiAgdGVzdElELFxuICB0aGVtZSxcbiAgaXNBY3RpdmUsXG4gIGFjdGl2ZUltYWdlLFxuICBpbmFjdGl2ZUltYWdlLFxuICBsYWJlbCxcbiAgaGFuZGxlUHJlc3MsXG4gIGljb25TdHlsZSxcbn0pID0+IChcbiAgPFByZXNzYWJsZVxuICAgIHRlc3RJRD17dGVzdElEfVxuICAgIG9uUHJlc3M9e2hhbmRsZVByZXNzfVxuICAgIHN0eWxlPXtbc3R5bGVzLm5hdkJ1dHRvbiwge2JhY2tncm91bmRDb2xvcjogdGhlbWUuQmFja2dyb3VuZENvbG9yfV19PlxuICAgIDxWaWV3XG4gICAgICBzdHlsZT17W3N0eWxlcy5wcmVzc2FibGVDb250ZW50LCBpc0FjdGl2ZSA/IHN0eWxlcy5hY3RpdmVCYXIgOiBudWxsXX1cbiAgICAgIGNvbGxhcHNhYmxlPXtmYWxzZX0+XG4gICAgICA8SW1hZ2VcbiAgICAgICAgc3R5bGU9e2ljb25TdHlsZX1cbiAgICAgICAgc291cmNlPXtpc0FjdGl2ZSA/IGFjdGl2ZUltYWdlIDogaW5hY3RpdmVJbWFnZX1cbiAgICAgIC8+XG4gICAgICA8VGV4dCBzdHlsZT17aXNBY3RpdmUgPyBzdHlsZXMuYWN0aXZlVGV4dCA6IHN0eWxlcy5pbmFjdGl2ZVRleHR9PlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L1RleHQ+XG4gICAgPC9WaWV3PlxuICA8L1ByZXNzYWJsZT5cbik7XG5cbmNvbnN0IENvbXBvbmVudFRhYiA9ICh7XG4gIGlzQ29tcG9uZW50QWN0aXZlLFxuICBoYW5kbGVOYXZCYXJQcmVzcyxcbiAgdGhlbWUsXG59OiAkVEVNUE9SQVJZJG9iamVjdDx7XG4gIGhhbmRsZU5hdkJhclByZXNzOiAoZGF0YToge3NjcmVlbjogc3RyaW5nfSkgPT4gdm9pZCxcbiAgaXNDb21wb25lbnRBY3RpdmU6IGJvb2xlYW4sXG4gIHRoZW1lOiBSTlRlc3RlclRoZW1lLFxufT4pID0+IChcbiAgPE5hdmJhckJ1dHRvblxuICAgIHRlc3RJRD1cImNvbXBvbmVudHMtdGFiXCJcbiAgICBsYWJlbD1cIkNvbXBvbmVudHNcIlxuICAgIGhhbmRsZVByZXNzPXsoKSA9PiBoYW5kbGVOYXZCYXJQcmVzcyh7c2NyZWVuOiAnY29tcG9uZW50cyd9KX1cbiAgICBhY3RpdmVJbWFnZT17cmVxdWlyZSgnLi8uLi9hc3NldHMvYm90dG9tLW5hdi1jb21wb25lbnRzLWljb24tYWN0aXZlLnBuZycpfVxuICAgIGluYWN0aXZlSW1hZ2U9e3JlcXVpcmUoJy4vLi4vYXNzZXRzL2JvdHRvbS1uYXYtY29tcG9uZW50cy1pY29uLWluYWN0aXZlLnBuZycpfVxuICAgIGlzQWN0aXZlPXtpc0NvbXBvbmVudEFjdGl2ZX1cbiAgICB0aGVtZT17dGhlbWV9XG4gICAgaWNvblN0eWxlPXtzdHlsZXMuY29tcG9uZW50SWNvbn1cbiAgLz5cbik7XG5cbmNvbnN0IEFQSVRhYiA9ICh7XG4gIGlzQVBJQWN0aXZlLFxuICBoYW5kbGVOYXZCYXJQcmVzcyxcbiAgdGhlbWUsXG59OiAkVEVNUE9SQVJZJG9iamVjdDx7XG4gIGhhbmRsZU5hdkJhclByZXNzOiAoZGF0YToge3NjcmVlbjogc3RyaW5nfSkgPT4gdm9pZCxcbiAgaXNBUElBY3RpdmU6IGJvb2xlYW4sXG4gIHRoZW1lOiBSTlRlc3RlclRoZW1lLFxufT4pID0+IChcbiAgPE5hdmJhckJ1dHRvblxuICAgIHRlc3RJRD1cImFwaXMtdGFiXCJcbiAgICBsYWJlbD1cIkFQSXNcIlxuICAgIGhhbmRsZVByZXNzPXsoKSA9PiBoYW5kbGVOYXZCYXJQcmVzcyh7c2NyZWVuOiAnYXBpcyd9KX1cbiAgICBhY3RpdmVJbWFnZT17cmVxdWlyZSgnLi8uLi9hc3NldHMvYm90dG9tLW5hdi1hcGlzLWljb24tYWN0aXZlLnBuZycpfVxuICAgIGluYWN0aXZlSW1hZ2U9e3JlcXVpcmUoJy4vLi4vYXNzZXRzL2JvdHRvbS1uYXYtYXBpcy1pY29uLWluYWN0aXZlLnBuZycpfVxuICAgIGlzQWN0aXZlPXtpc0FQSUFjdGl2ZX1cbiAgICB0aGVtZT17dGhlbWV9XG4gICAgaWNvblN0eWxlPXtzdHlsZXMuYXBpSWNvbn1cbiAgLz5cbik7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgaGFuZGxlTmF2QmFyUHJlc3M6IChkYXRhOiB7c2NyZWVuOiBzdHJpbmd9KSA9PiB2b2lkLFxuICBzY3JlZW46IHN0cmluZyxcbiAgaXNFeGFtcGxlUGFnZU9wZW46IGJvb2xlYW4sXG58fT47XG5cbmNvbnN0IFJOVGVzdGVyTmF2YmFyID0gKHtcbiAgaGFuZGxlTmF2QmFyUHJlc3MsXG4gIHNjcmVlbixcbiAgaXNFeGFtcGxlUGFnZU9wZW4sXG59OiBQcm9wcyk6IFJlYWN0Lk5vZGUgPT4ge1xuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoUk5UZXN0ZXJUaGVtZUNvbnRleHQpO1xuXG4gIGNvbnN0IGlzQVBJQWN0aXZlID0gc2NyZWVuID09PSAnYXBpcycgJiYgIWlzRXhhbXBsZVBhZ2VPcGVuO1xuICBjb25zdCBpc0NvbXBvbmVudEFjdGl2ZSA9IHNjcmVlbiA9PT0gJ2NvbXBvbmVudHMnICYmICFpc0V4YW1wbGVQYWdlT3BlbjtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b25Db250YWluZXJ9PlxuICAgICAgICA8Q29tcG9uZW50VGFiXG4gICAgICAgICAgaXNDb21wb25lbnRBY3RpdmU9e2lzQ29tcG9uZW50QWN0aXZlfVxuICAgICAgICAgIGhhbmRsZU5hdkJhclByZXNzPXtoYW5kbGVOYXZCYXJQcmVzc31cbiAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgIC8+XG4gICAgICAgIDxBUElUYWJcbiAgICAgICAgICBpc0FQSUFjdGl2ZT17aXNBUElBY3RpdmV9XG4gICAgICAgICAgaGFuZGxlTmF2QmFyUHJlc3M9e2hhbmRsZU5hdkJhclByZXNzfVxuICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbmF2QmFySGVpZ2h0ID0gNjU7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgZmxvYXRDb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIHpJbmRleDogMixcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgYnV0dG9uQ29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgZmxvYXRpbmdCdXR0b246IHtcbiAgICB0b3A6IC0yMCxcbiAgICB3aWR0aDogNTAsXG4gICAgaGVpZ2h0OiA1MCxcbiAgICBib3JkZXJSYWRpdXM6IDUwMCxcbiAgICBhbGlnbkNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIHNoYWRvd0NvbG9yOiAnYmxhY2snLFxuICAgIHNoYWRvd09mZnNldDoge1xuICAgICAgaGVpZ2h0OiA1LFxuICAgICAgd2lkdGg6IDAsXG4gICAgfSxcbiAgICBzaGFkb3dPcGFjaXR5OiAwLjksXG4gICAgc2hhZG93UmFkaXVzOiAxMCxcbiAgICBlbGV2YXRpb246IDUsXG4gIH0sXG4gIGNvbXBvbmVudEljb246IHtcbiAgICB3aWR0aDogMjAsXG4gICAgaGVpZ2h0OiAyMCxcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICB9LFxuICBhcGlJY29uOiB7XG4gICAgd2lkdGg6IDMwLFxuICAgIGhlaWdodDogMjAsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgfSxcbiAgYWN0aXZlVGV4dDoge1xuICAgIGNvbG9yOiAnIzVFNUY2MicsXG4gIH0sXG4gIGluYWN0aXZlVGV4dDoge1xuICAgIGNvbG9yOiAnI0IxQjRCQScsXG4gIH0sXG4gIGFjdGl2ZUJhcjoge1xuICAgIGJvcmRlclRvcFdpZHRoOiAyLFxuICAgIGJvcmRlckNvbG9yOiAnIzAwNURGRicsXG4gIH0sXG4gIGNlbnRyYWxCb3hDdXRvdXQ6IHtcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgfSxcbiAgY2VudGVyQm94OiB7XG4gICAgZmxleDogMSxcbiAgICBoZWlnaHQ6IG5hdkJhckhlaWdodCxcbiAgfSxcbiAgbmF2QnV0dG9uOiB7XG4gICAgZmxleDogMSxcbiAgICBoZWlnaHQ6IG5hdkJhckhlaWdodCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIHByZXNzYWJsZUNvbnRlbnQ6IHtcbiAgICBmbGV4OiAxLFxuICAgIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBSTlRlc3Rlck5hdmJhcjtcbiIsIiIsIiIsIiIsIiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCBSTlRlc3RlckRvY3VtZW50YXRpb25VUkwgZnJvbSAnLi9STlRlc3RlckRvY3VtZW50YXRpb25VUkwnO1xuaW1wb3J0IHt0eXBlIFJOVGVzdGVyVGhlbWV9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIFBsYXRmb3JtLFxuICBTYWZlQXJlYVZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IEhlYWRlcklPUyA9ICh7XG4gIG9uQmFjayxcbiAgdGl0bGUsXG4gIGRvY3VtZW50YXRpb25VUkwsXG4gIHRoZW1lLFxufToge1xuICBvbkJhY2s/OiA/KCkgPT4gbWl4ZWQsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGRvY3VtZW50YXRpb25VUkw/OiBzdHJpbmcsXG4gIHRoZW1lOiBSTlRlc3RlclRoZW1lLFxufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxTYWZlQXJlYVZpZXc+XG4gICAgICA8Vmlld1xuICAgICAgICBzdHlsZT17W3N0eWxlcy5oZWFkZXIsIHtiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLlN5c3RlbUJhY2tncm91bmRDb2xvcn1dfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5oZWFkZXJDZW50ZXJ9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Li4uc3R5bGVzLnRpdGxlLCAuLi57Y29sb3I6IHRoZW1lLkxhYmVsQ29sb3J9fX0+XG4gICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIHtkb2N1bWVudGF0aW9uVVJMICYmIChcbiAgICAgICAgICAgIDxSTlRlc3RlckRvY3VtZW50YXRpb25VUkwgZG9jdW1lbnRhdGlvblVSTD17ZG9jdW1lbnRhdGlvblVSTH0gLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIHtvbkJhY2sgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHRpdGxlPVwiQmFja1wiXG4gICAgICAgICAgICAgIG9uUHJlc3M9e29uQmFja31cbiAgICAgICAgICAgICAgY29sb3I9e1BsYXRmb3JtLnNlbGVjdCh7XG4gICAgICAgICAgICAgICAgaW9zOiB0aGVtZS5MaW5rQ29sb3IsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgIDwvU2FmZUFyZWFWaWV3PlxuICApO1xufTtcblxuY29uc3QgSGVhZGVyQW5kcm9pZCA9ICh7XG4gIHRpdGxlLFxuICBkb2N1bWVudGF0aW9uVVJMLFxuICB0aGVtZSxcbn06IHtcbiAgdGl0bGU6IHN0cmluZyxcbiAgZG9jdW1lbnRhdGlvblVSTD86IHN0cmluZyxcbiAgdGhlbWU6IFJOVGVzdGVyVGhlbWUsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFNhZmVBcmVhVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnRvb2xiYXIsIHtiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLkJhY2tncm91bmRDb2xvcn1dfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50b29sYmFyQ2VudGVyfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy50aXRsZSwge2NvbG9yOiB0aGVtZS5MYWJlbENvbG9yfV19Pnt0aXRsZX08L1RleHQ+XG4gICAgICAgICAge2RvY3VtZW50YXRpb25VUkwgJiYgKFxuICAgICAgICAgICAgPFJOVGVzdGVyRG9jdW1lbnRhdGlvblVSTCBkb2N1bWVudGF0aW9uVVJMPXtkb2N1bWVudGF0aW9uVVJMfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1NhZmVBcmVhVmlldz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJOVFRpdGxlQmFyKHtcbiAgb25CYWNrLFxuICB0aXRsZSxcbiAgZG9jdW1lbnRhdGlvblVSTCxcbiAgdGhlbWUsXG59OiB7XG4gIG9uQmFjaz86ID8oKSA9PiBtaXhlZCxcbiAgdGl0bGU6IHN0cmluZyxcbiAgZG9jdW1lbnRhdGlvblVSTD86IHN0cmluZyxcbiAgdGhlbWU6IFJOVGVzdGVyVGhlbWUsXG4gIC4uLlxufSk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gUGxhdGZvcm0uT1MgPT09ICdpb3MnID8gKFxuICAgIDxIZWFkZXJJT1NcbiAgICAgIGRvY3VtZW50YXRpb25VUkw9e2RvY3VtZW50YXRpb25VUkx9XG4gICAgICB0aXRsZT17dGl0bGV9XG4gICAgICBvbkJhY2s9e29uQmFja31cbiAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAvPlxuICApIDogKFxuICAgIDxIZWFkZXJBbmRyb2lkXG4gICAgICBkb2N1bWVudGF0aW9uVVJMPXtkb2N1bWVudGF0aW9uVVJMfVxuICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgdGhlbWU9e3RoZW1lfVxuICAgIC8+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgaGVhZGVyQ29udGFpbmVyOiB7XG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IFN0eWxlU2hlZXQuaGFpcmxpbmVXaWR0aCxcbiAgfSxcbiAgaGVhZGVyOiB7XG4gICAgaGVpZ2h0OiA0MCxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgaGVhZGVyQ2VudGVyOiB7XG4gICAgZmxleDogMSxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDcsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICBmb250U2l6ZTogMTksXG4gICAgZm9udFdlaWdodDogJzYwMCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgfSxcbiAgdG9vbGJhcjoge1xuICAgIGhlaWdodDogNTYsXG4gIH0sXG4gIHRvb2xiYXJDZW50ZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMTIsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW1hZ2UsIFN0eWxlU2hlZXQsIFRvdWNoYWJsZU9wYWNpdHl9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgb3BlblVSTEluQnJvd3NlciBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvRGV2dG9vbHMvb3BlblVSTEluQnJvd3Nlcic7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgZG9jdW1lbnRhdGlvblVSTDogc3RyaW5nLFxufH0+O1xuXG5jb25zdCBSTlRlc3RlckRvY3VtZW50YXRpb25VUkwgPSAoe2RvY3VtZW50YXRpb25VUkx9OiBQcm9wcyk6IFJlYWN0Lk5vZGUgPT4gKFxuICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgIHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfVxuICAgIG9uUHJlc3M9eygpID0+IG9wZW5VUkxJbkJyb3dzZXIoZG9jdW1lbnRhdGlvblVSTCl9PlxuICAgIDxJbWFnZVxuICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi9hc3NldHMvZG9jdW1lbnRhdGlvbi5wbmcnKX1cbiAgICAgIHN0eWxlPXtzdHlsZXMuaWNvbn1cbiAgICAvPlxuICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBSTlRlc3RlckRvY3VtZW50YXRpb25VUkw7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYm90dG9tOiAwLFxuICAgIHJpZ2h0OiAtMTUsXG4gIH0sXG4gIGljb246IHtcbiAgICBoZWlnaHQ6IDI0LFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBnZXREZXZTZXJ2ZXIgPSByZXF1aXJlKCcuL2dldERldlNlcnZlcicpO1xuXG5mdW5jdGlvbiBvcGVuVVJMSW5Ccm93c2VyKHVybDogc3RyaW5nKSB7XG4gIC8vICRGbG93Rml4TWVbdW51c2VkLXByb21pc2VdXG4gIGZldGNoKGdldERldlNlcnZlcigpLnVybCArICdvcGVuLXVybCcsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7dXJsfSksXG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9wZW5VUkxJbkJyb3dzZXI7XG4iLCIiLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUluZm99IGZyb20gJy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MgZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9SZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyc7XG5cbmNvbnN0IENvbXBvbmVudHM6IEFycmF5PFJOVGVzdGVyTW9kdWxlSW5mbz4gPSBbXG4gIHtcbiAgICBrZXk6ICdBY3Rpdml0eUluZGljYXRvckV4YW1wbGUnLFxuICAgIGNhdGVnb3J5OiAnVUknLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvQWN0aXZpdHlJbmRpY2F0b3IvQWN0aXZpdHlJbmRpY2F0b3JFeGFtcGxlJyksXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdCdXR0b25FeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0J1dHRvbi9CdXR0b25FeGFtcGxlJyksXG4gICAgY2F0ZWdvcnk6ICdVSScsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdGbGF0TGlzdEV4YW1wbGVJbmRleCcsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9GbGF0TGlzdC9GbGF0TGlzdEV4YW1wbGVJbmRleCcpLmRlZmF1bHQsXG4gICAgY2F0ZWdvcnk6ICdMaXN0VmlldycsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdJbWFnZUV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvSW1hZ2UvSW1hZ2VFeGFtcGxlJyksXG4gICAgY2F0ZWdvcnk6ICdCYXNpYycsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdKU1Jlc3BvbmRlckhhbmRsZXJFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0pTUmVzcG9uZGVySGFuZGxlckV4YW1wbGUvSlNSZXNwb25kZXJIYW5kbGVyRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnSW5wdXRBY2Nlc3NvcnlWaWV3RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9JbnB1dEFjY2Vzc29yeVZpZXcvSW5wdXRBY2Nlc3NvcnlWaWV3RXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnS2V5Ym9hcmRBdm9pZGluZ1ZpZXdFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0tleWJvYXJkQXZvaWRpbmdWaWV3L0tleWJvYXJkQXZvaWRpbmdWaWV3RXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnTGF5b3V0RXZlbnRzRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9MYXlvdXQvTGF5b3V0RXZlbnRzRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnTW9kYWxFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL01vZGFsL01vZGFsRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnTmV3QXBwU2NyZWVuRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9OZXdBcHBTY3JlZW4vTmV3QXBwU2NyZWVuRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnUHJlc3NhYmxlRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9QcmVzc2FibGUvUHJlc3NhYmxlRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnUmVmcmVzaENvbnRyb2xFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1JlZnJlc2hDb250cm9sL1JlZnJlc2hDb250cm9sRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnU2Nyb2xsVmlld1NpbXBsZUV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3U2ltcGxlRXhhbXBsZScpLFxuICAgIGNhdGVnb3J5OiAnQmFzaWMnLFxuICB9LFxuICB7XG4gICAga2V5OiAnU2FmZUFyZWFWaWV3RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9TYWZlQXJlYVZpZXcvU2FmZUFyZWFWaWV3RXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnU2Nyb2xsVmlld0V4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3RXhhbXBsZScpLFxuICAgIGNhdGVnb3J5OiAnQmFzaWMnLFxuICB9LFxuICB7XG4gICAga2V5OiAnU2Nyb2xsVmlld0FuaW1hdGVkRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9TY3JvbGxWaWV3L1Njcm9sbFZpZXdBbmltYXRlZEV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1Njcm9sbFZpZXdJbmRpY2F0b3JJbnNldHNFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1Njcm9sbFZpZXcvU2Nyb2xsVmlld0luZGljYXRvckluc2V0c0lPU0V4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1Njcm9sbFZpZXdLZXlib2FyZEluc2V0c0V4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvU2Nyb2xsVmlldy9TY3JvbGxWaWV3S2V5Ym9hcmRJbnNldHNJT1NFeGFtcGxlJyksXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdTZWN0aW9uTGlzdEluZGV4JyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1NlY3Rpb25MaXN0L1NlY3Rpb25MaXN0SW5kZXgnKSxcbiAgICBjYXRlZ29yeTogJ0xpc3RWaWV3JyxcbiAgfSxcbiAge1xuICAgIGtleTogJ1N0YXR1c0JhckV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvU3RhdHVzQmFyL1N0YXR1c0JhckV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1N3aXBlYWJsZUNhcmRFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1N3aXBlYWJsZUNhcmRFeGFtcGxlL1N3aXBlYWJsZUNhcmRFeGFtcGxlJyksXG4gICAgY2F0ZWdvcnk6ICdVSScsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdTd2l0Y2hFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1N3aXRjaC9Td2l0Y2hFeGFtcGxlJyksXG4gICAgY2F0ZWdvcnk6ICdVSScsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdUZXh0RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9UZXh0L1RleHRFeGFtcGxlLmlvcycpLFxuICAgIGNhdGVnb3J5OiAnQmFzaWMnLFxuICB9LFxuICB7XG4gICAga2V5OiAnVGV4dElucHV0RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9UZXh0SW5wdXQvVGV4dElucHV0RXhhbXBsZScpLFxuICAgIGNhdGVnb3J5OiAnQmFzaWMnLFxuICB9LFxuICB7XG4gICAga2V5OiAnVG91Y2hhYmxlRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9Ub3VjaGFibGUvVG91Y2hhYmxlRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnVHJhbnNwYXJlbnRIaXRUZXN0RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9UcmFuc3BhcmVudEhpdFRlc3QvVHJhbnNwYXJlbnRIaXRUZXN0RXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnVmlld0V4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvVmlldy9WaWV3RXhhbXBsZScpLmRlZmF1bHQsXG4gICAgY2F0ZWdvcnk6ICdCYXNpYycsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdOZXdBcmNoaXRlY3R1cmVFeGFtcGxlJyxcbiAgICBjYXRlZ29yeTogJ1VJJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL05ld0FyY2hpdGVjdHVyZS9OZXdBcmNoaXRlY3R1cmVFeGFtcGxlJyksXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdQZXJmb3JtYW5jZUNvbXBhcmlzb25FeGFtcGxlJyxcbiAgICBjYXRlZ29yeTogJ0Jhc2ljJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlQ29tcGFyaXNvbkV4YW1wbGUnKSxcbiAgfSxcbl07XG5cbmNvbnN0IEFQSXM6IEFycmF5PFJOVGVzdGVyTW9kdWxlSW5mbz4gPSAoW1xuICB7XG4gICAga2V5OiAnQWNjZXNzaWJpbGl0eUV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvQWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnQWNjZXNzaWJpbGl0eUlPU0V4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvQWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SU9TRXhhbXBsZScpLFxuICAgIGNhdGVnb3J5OiAnaU9TJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ0FjdGlvblNoZWV0SU9TRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9BY3Rpb25TaGVldElPUy9BY3Rpb25TaGVldElPU0V4YW1wbGUnKSxcbiAgICBjYXRlZ29yeTogJ2lPUycsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdBbGVydEV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvQWxlcnQvQWxlcnRFeGFtcGxlJykuZGVmYXVsdCxcbiAgICBjYXRlZ29yeTogJ1VJJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ0FuaW1hdGVkSW5kZXgnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvQW5pbWF0ZWQvQW5pbWF0ZWRJbmRleCcpLmRlZmF1bHQsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdBbkV4QXBwJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0FuaW1hdGVkR3JhdHVpdG91c0FwcC9BbkV4QXBwJyksXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdBcHBlYXJhbmNlRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9BcHBlYXJhbmNlL0FwcGVhcmFuY2VFeGFtcGxlJyksXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdBcHBTdGF0ZUV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvQXBwU3RhdGUvQXBwU3RhdGVFeGFtcGxlJyksXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdCb3JkZXJFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0JvcmRlci9Cb3JkZXJFeGFtcGxlJykuZGVmYXVsdCxcbiAgfSxcbiAge1xuICAgIGtleTogJ0JveFNoYWRvd0V4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvQm94U2hhZG93L0JveFNoYWRvd0V4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ0NyYXNoRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9DcmFzaC9DcmFzaEV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ0RldlNldHRpbmdzJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0RldlNldHRpbmdzL0RldlNldHRpbmdzRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnRGltZW5zaW9ucycsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9EaW1lbnNpb25zL0RpbWVuc2lvbnNFeGFtcGxlJyksXG4gIH0sXG4gIC8vIE9ubHkgc2hvdyB0aGUgbGluayBmb3IgdGhlIGV4YW1wbGUgaWYgdGhlIEFQSSBpcyBhdmFpbGFibGUuXG4gIHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8ge1xuICAgICAgICBrZXk6ICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsXG4gICAgICAgIGNhdGVnb3J5OiAnVUknLFxuICAgICAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0ludGVyc2VjdGlvbk9ic2VydmVyL0ludGVyc2VjdGlvbk9ic2VydmVySW5kZXgnKSxcbiAgICAgIH1cbiAgICA6IG51bGwsXG4gIHtcbiAgICBrZXk6ICdJbnZhbGlkUHJvcHNFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL0ludmFsaWRQcm9wcy9JbnZhbGlkUHJvcHNFeGFtcGxlJyksXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdLZXlib2FyZCcsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9LZXlib2FyZC9LZXlib2FyZEV4YW1wbGUnKS5kZWZhdWx0LFxuICB9LFxuICB7XG4gICAga2V5OiAnTGF5b3V0QW5pbWF0aW9uRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9MYXlvdXQvTGF5b3V0QW5pbWF0aW9uRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnTGF5b3V0RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9MYXlvdXQvTGF5b3V0RXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnTGlua2luZ0V4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvTGlua2luZy9MaW5raW5nRXhhbXBsZScpLFxuICB9LFxuICB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8ge1xuICAgICAgICBrZXk6ICdNdXRhdGlvbk9ic2VydmVyJyxcbiAgICAgICAgY2F0ZWdvcnk6ICdVSScsXG4gICAgICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvTXV0YXRpb25PYnNlcnZlci9NdXRhdGlvbk9ic2VydmVySW5kZXgnKSxcbiAgICAgIH1cbiAgICA6IG51bGwsXG4gIHtcbiAgICBrZXk6ICdOYXRpdmVBbmltYXRpb25zRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9OYXRpdmVBbmltYXRpb24vTmF0aXZlQW5pbWF0aW9uc0V4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ09yaWVudGF0aW9uQ2hhbmdlRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9PcmllbnRhdGlvbkNoYW5nZS9PcmllbnRhdGlvbkNoYW5nZUV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1BhblJlc3BvbmRlckV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvUGFuUmVzcG9uZGVyL1BhblJlc3BvbmRlckV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1BsYXRmb3JtQ29sb3JFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1BsYXRmb3JtQ29sb3IvUGxhdGZvcm1Db2xvckV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1BvaW50ZXJFdmVudHNFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1BvaW50ZXJFdmVudHMvUG9pbnRlckV2ZW50c0V4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1JDVFJvb3RWaWV3SU9TRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9SQ1RSb290Vmlldy9SQ1RSb290Vmlld0lPU0V4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1JUTEV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvUlRML1JUTEV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1NoYXJlRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9TaGFyZS9TaGFyZUV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1NuYXBzaG90RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9TbmFwc2hvdC9TbmFwc2hvdEV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1RpbWVyRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9UaW1lci9UaW1lckV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1RyYW5zZm9ybUV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvVHJhbnNmb3JtL1RyYW5zZm9ybUV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ1R1cmJvTW9kdWxlRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9UdXJib01vZHVsZS9UdXJib01vZHVsZUV4YW1wbGUnKSxcbiAgfSxcbiAge1xuICAgIGtleTogJ0xlZ2FjeU1vZHVsZUV4YW1wbGUnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvVHVyYm9Nb2R1bGUvTGVnYWN5TW9kdWxlRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnVHVyYm9DeHhNb2R1bGVFeGFtcGxlJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1R1cmJvTW9kdWxlL1R1cmJvQ3h4TW9kdWxlRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnVmlicmF0aW9uRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9WaWJyYXRpb24vVmlicmF0aW9uRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnV2ViU29ja2V0RXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9XZWJTb2NrZXQvV2ViU29ja2V0RXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnWEhSRXhhbXBsZScsXG4gICAgbW9kdWxlOiByZXF1aXJlKCcuLi9leGFtcGxlcy9YSFIvWEhSRXhhbXBsZScpLFxuICB9LFxuICB7XG4gICAga2V5OiAnUGVyZm9ybWFuY2VBcGlFeGFtcGxlJyxcbiAgICBjYXRlZ29yeTogJ0Jhc2ljJyxcbiAgICBtb2R1bGU6IHJlcXVpcmUoJy4uL2V4YW1wbGVzL1BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlQXBpRXhhbXBsZScpLFxuICB9LFxuXTogQXJyYXk8P1JOVGVzdGVyTW9kdWxlSW5mbz4pLmZpbHRlcihCb29sZWFuKTtcblxuaWYgKFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzLnNob3VsZEVtaXRXM0NQb2ludGVyRXZlbnRzKCkpIHtcbiAgQVBJcy5wdXNoKHtcbiAgICBrZXk6ICdXM0MgUG9pbnRlckV2ZW50cycsXG4gICAgY2F0ZWdvcnk6ICdFeHBlcmltZW50YWwnLFxuICAgIG1vZHVsZTogcmVxdWlyZSgnLi4vZXhhbXBsZXMvRXhwZXJpbWVudGFsL1czQ1BvaW50ZXJFdmVudHNFeGFtcGxlJykuZGVmYXVsdCxcbiAgfSk7XG59XG5cbmNvbnN0IE1vZHVsZXM6IHsuLi59ID0ge307XG5cbkFQSXMuY29uY2F0KENvbXBvbmVudHMpLmZvckVhY2goRXhhbXBsZSA9PiB7XG4gIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBNb2R1bGVzW0V4YW1wbGUua2V5XSA9IEV4YW1wbGUubW9kdWxlO1xufSk7XG5cbmNvbnN0IFJOVGVzdGVyTGlzdCA9IHtcbiAgQVBJcyxcbiAgQ29tcG9uZW50cyxcbiAgTW9kdWxlcyxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUk5UZXN0ZXJMaXN0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFN0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yKCkge1xuICBjb25zdCB0aW1lciA9IHVzZVJlZjx2b2lkIHwgVGltZW91dElEPigpO1xuXG4gIGNvbnN0IFthbmltYXRpbmcsIHNldEFuaW1hdGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCBzZXRUb2dnbGVUaW1lb3V0OiAoKSA9PiB2b2lkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldEFuaW1hdGluZyhjdXJyZW50U3RhdGUgPT4gIWN1cnJlbnRTdGF0ZSk7XG4gICAgICBzZXRUb2dnbGVUaW1lb3V0KCk7XG4gICAgfSwgMjAwMCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFRvZ2dsZVRpbWVvdXQoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW3RpbWVyLCBzZXRUb2dnbGVUaW1lb3V0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QWN0aXZpdHlJbmRpY2F0b3JcbiAgICAgIGFuaW1hdGluZz17YW5pbWF0aW5nfVxuICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7aGVpZ2h0OiA4MH1dfVxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNlbnRlcmluZzoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiA4LFxuICB9LFxuICBncmF5OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2NjY2NjYycsXG4gIH0sXG4gIGhvcml6b250YWw6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gICAgcGFkZGluZzogOCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmRpc3BsYXlOYW1lID0gKHVuZGVmaW5lZDogP3N0cmluZyk7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZnJhbWV3b3JrID0gJ1JlYWN0JztcbmV4cG9ydHMudGl0bGUgPSAnQWN0aXZpdHlJbmRpY2F0b3InO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWN0aXZpdHlpbmRpY2F0b3InO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdBbmltYXRlZCBsb2FkaW5nIGluZGljYXRvcnMuJztcblxuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnRGVmYXVsdCAoc21hbGwsIHdoaXRlKScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgY29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgICAgdGVzdElEPVwiZGVmYXVsdF9hY3Rpdml0eV9pbmRpY2F0b3JcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIldhaXQgZm9yIGNvbnRlbnQgdG8gbG9hZCFcIlxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdHcmF5JyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nXX0gLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ3VzdG9tIGNvbG9ycycsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDAwMGZmXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEwMGFhXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEzMzAwXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDBhYTAwXCIgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMYXJnZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cIndoaXRlXCJcbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTGFyZ2UsIGN1c3RvbSBjb2xvcnMnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwMDBmZlwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMDBhYVwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMzMwMFwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwYWEwMFwiIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhcnQvc3RvcCcsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxUb2dnbGVBbmltYXRpbmdBY3Rpdml0eUluZGljYXRvciAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXN0b20gc2l6ZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7dHJhbnNmb3JtOiBbe3NjYWxlOiAxLjV9XX1dfVxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHRpdGxlOiAnQ3VzdG9tIHNpemUgKHNpemU6IDc1KScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxBY3Rpdml0eUluZGljYXRvciBzdHlsZT17c3R5bGVzLmNlbnRlcmluZ30gc2l6ZT17NzV9IC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qge1JOVGVzdGVyVGhlbWVDb250ZXh0fSA9IHJlcXVpcmUoJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJUaGVtZScpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge0FsZXJ0LCBCdXR0b24sIFN0eWxlU2hlZXQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmZ1bmN0aW9uIG9uQnV0dG9uUHJlc3MoYnV0dG9uTmFtZTogc3RyaW5nKSB7XG4gIEFsZXJ0LmFsZXJ0KGBZb3VyIGFwcGxpY2F0aW9uIGhhcyBiZWVuICR7YnV0dG9uTmFtZX0hYCk7XG59XG5cbmV4cG9ydHMuZGlzcGxheU5hbWUgPSAnQnV0dG9uRXhhbXBsZSc7XG5leHBvcnRzLmZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMudGl0bGUgPSAnQnV0dG9uJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2J1dHRvbic7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ1NpbXBsZSBSZWFjdCBOYXRpdmUgYnV0dG9uIGNvbXBvbmVudC4nO1xuXG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdCdXR0b24gd2l0aCBkZWZhdWx0IHN0eWxpbmcnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IG9uQnV0dG9uUHJlc3MoJ3N1Ym1pdHRlZCcpfVxuICAgICAgICAgIHRlc3RJRD1cImJ1dHRvbl9kZWZhdWx0X3N0eWxpbmdcIlxuICAgICAgICAgIHRpdGxlPVwiU3VibWl0IEFwcGxpY2F0aW9uXCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJQcmVzcyB0byBzdWJtaXQgeW91ciBhcHBsaWNhdGlvbiFcIlxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdCdXR0b24gd2l0aCBjb2xvcj1cInJlZFwiJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnTm90ZTogT24gaU9TLCB0aGUgY29sb3IgcHJvcCBjb250cm9scyB0aGUgY29sb3Igb2YgdGhlIHRleHQuIE9uICcgK1xuICAgICAgICAnQW5kcm9pZCwgdGhlIGNvbG9yIGFkanVzdHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIHt0aGVtZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gb25CdXR0b25QcmVzcygnY2FuY2VsbGVkJyl9XG4gICAgICAgICAgICAgICAgdGVzdElEPVwiY2FuY2VsX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLlN5c3RlbVJlZENvbG9yfVxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2FuY2VsIEFwcGxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJQcmVzcyB0byBjYW5jZWwgeW91ciBhcHBsaWNhdGlvbiFcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICA8L1JOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUd28gQnV0dG9ucyB3aXRoIEZsZXhib3ggbGF5b3V0JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnVHdvIGJ1dHRvbnMgd3JhcHBlZCBpbnNpZGUgdmlldyB3aXRoIGp1c3RpZnlDb250ZW50OiBzcGFjZUJldHdlZW4sJyArXG4gICAgICAgICdUaGlzIGxheW91dCBzdHJhdGVneSBsZXRzIHRoZSB0aXRsZSBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSBidXR0b24nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIHt0aGVtZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gb25CdXR0b25QcmVzcygnY2FuY2VsbGVkJyl9XG4gICAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJ0d29fY2FuY2VsX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjb2xvcj17dGhlbWUuU3lzdGVtUmVkQ29sb3J9XG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJQcmVzcyB0byBjYW5jZWwgeW91ciBhcHBsaWNhdGlvbiFcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gb25CdXR0b25QcmVzcygnc3VibWl0dGVkJyl9XG4gICAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJ0d29fc3VibWl0X2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjb2xvcj17dGhlbWUuU3lzdGVtR3JlZW5Db2xvcn1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU3VibWl0XCJcbiAgICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIlByZXNzIHRvIHN1Ym1pdCB5b3VyIGFwcGxpY2F0aW9uIVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICA8L1JOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUaHJlZSBCdXR0b25zIHdpdGggRmxleGJveCBsYXlvdXQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIHt0aGVtZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gb25CdXR0b25QcmVzcygnY2FuY2VsbGVkJyl9XG4gICAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJ0aHJlZV9jYW5jZWxfYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGVtZS5TeXN0ZW1SZWRDb2xvcn1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2FuY2VsXCJcbiAgICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIlByZXNzIHRvIGNhbmNlbCB5b3VyIGFwcGxpY2F0aW9uIVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBvbkJ1dHRvblByZXNzKCdzYXZlZCcpfVxuICAgICAgICAgICAgICAgICAgdGVzdElEPVwidGhyZWVfc2F2ZV9idXR0b25cIlxuICAgICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLkxpbmtDb2xvcn1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU2F2ZSBGb3IgTGF0ZXJcIlxuICAgICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiUHJlc3MgdG8gc2F2ZSB5b3VyIGFwcGxpY2F0aW9uIVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBvbkJ1dHRvblByZXNzKCdzdWJtaXR0ZWQnKX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cInRocmVlX3N1Ym1pdF9idXR0b25cIlxuICAgICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLlN5c3RlbUdyZWVuQ29sb3J9XG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJQcmVzcyB0byBzdWJtaXQgeW91ciBhcHBsaWNhdGlvbiFcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9STlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQnV0dG9uIHdpdGggZGlzYWJsZWQ9e3RydWV9JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdCeSBwYXNzaW5nIGRpc2FibGVkPXt0cnVlfSBhbGwgaW50ZXJhY3Rpb25zIGZvciB0aGUgYnV0dG9uIGFyZSBkaXNhYmxlZC4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIHt0aGVtZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBvbkJ1dHRvblByZXNzKCdzdWJtaXR0ZWQnKX1cbiAgICAgICAgICAgICAgICBjb2xvcj17dGhlbWUuTGlua0NvbG9yfVxuICAgICAgICAgICAgICAgIHRlc3RJRD1cImRpc2FibGVkX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJTdWJtaXQgQXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIlByZXNzIHRvIHN1Ym1pdCB5b3VyIGFwcGxpY2F0aW9uIVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0J1dHRvbiB3aXRoIGFjY2Vzc2liaWxpdHlMYWJlbD1cImxhYmVsXCInLFxuICAgIGRlc2NyaXB0aW9uOiAoJ05vdGU6IFRoaXMgcHJvcCBjaGFuZ2VzIHRoZSB0ZXh0IHRoYXQgYSBzY3JlZW4gJyArXG4gICAgICAncmVhZGVyIGFubm91bmNlcyAodGhlcmUgYXJlIG5vIHZpc3VhbCBkaWZmZXJlbmNlcykuJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSTlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICB7dGhlbWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IG9uQnV0dG9uUHJlc3MoJ3N1Ym1pdHRlZCcpfVxuICAgICAgICAgICAgICAgIHRlc3RJRD1cImFjY2Vzc2liaWxpdHlMYWJlbF9idXR0b25cIlxuICAgICAgICAgICAgICAgIGNvbG9yPXt0aGVtZS5MaW5rQ29sb3J9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJTdWJtaXQgQXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIlByZXNzIHRvIHN1Ym1pdCB5b3VyIGFwcGxpY2F0aW9uIVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0J1dHRvbiB3aXRoIGFyaWEtbGFiZWw9XCJsYWJlbFwiJyxcbiAgICBkZXNjcmlwdGlvbjogKCdOb3RlOiBUaGlzIHByb3AgY2hhbmdlcyB0aGUgdGV4dCB0aGF0IGEgc2NyZWVuICcgK1xuICAgICAgJ3JlYWRlciBhbm5vdW5jZXMgKHRoZXJlIGFyZSBubyB2aXN1YWwgZGlmZmVyZW5jZXMpLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAge3RoZW1lID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBvbkJ1dHRvblByZXNzKCdzdWJtaXR0ZWQnKX1cbiAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJhcmlhX2xhYmVsX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLkxpbmtDb2xvcn1cbiAgICAgICAgICAgICAgICB0aXRsZT1cIlN1Ym1pdCBBcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXNzIHRvIHN1Ym1pdCB5b3VyIGFwcGxpY2F0aW9uIVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0J1dHRvbiB3aXRoIGFjY2Vzc2liaWxpdHlTdGF0ZT17e2Rpc2FibGVkOiB0cnVlfX0nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgKCdOb3RlOiBUaGlzIHByb3Agd2lsbCBhbm5vdW5jZSBvbiBUYWxrQmFjayB0aGF0IHRoZSBidXR0b24gaXMgZGlzYWJsZWQuICcgK1xuICAgICAgICAnVGhlIFwiZGlzYWJsZWRcIiBwcm9wIGhhcyBoaWdoZXIgcHJlY2VkZW5jZSBvbiB0aGUgc3RhdGUgb2YgdGhlIGNvbXBvbmVudCc6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAge3RoZW1lID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tkaXNhYmxlZDogdHJ1ZX19XG4gICAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gb25CdXR0b25QcmVzcygnc3VibWl0dGVkJyl9XG4gICAgICAgICAgICAgICAgdGVzdElEPVwiYWNjZXNzaWJpbGl0eVN0YXRlX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLkxpbmtDb2xvcn1cbiAgICAgICAgICAgICAgICB0aXRsZT1cIlN1Ym1pdCBBcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiUHJlc3MgdG8gc3VibWl0IHlvdXIgYXBwbGljYXRpb24hXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9STlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbl07XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBCYXNpY0V4YW1wbGUgZnJvbSAnLi9GbGF0TGlzdC1iYXNpYyc7XG5pbXBvcnQgQ29udGVudEluc2V0RXhhbXBsZSBmcm9tICcuL0ZsYXRMaXN0LWNvbnRlbnRJbnNldCc7XG5pbXBvcnQgSW52ZXJ0ZWRFeGFtcGxlIGZyb20gJy4vRmxhdExpc3QtaW52ZXJ0ZWQnO1xuaW1wb3J0IE11bHRpQ29sdW1uRXhhbXBsZSBmcm9tICcuL0ZsYXRMaXN0LW11bHRpQ29sdW1uJztcbmltcG9ydCBOZXN0ZWRFeGFtcGxlIGZyb20gJy4vRmxhdExpc3QtbmVzdGVkJztcbmltcG9ydCBPbkVuZFJlYWNoZWRFeGFtcGxlIGZyb20gJy4vRmxhdExpc3Qtb25FbmRSZWFjaGVkJztcbmltcG9ydCBPblN0YXJ0UmVhY2hlZEV4YW1wbGUgZnJvbSAnLi9GbGF0TGlzdC1vblN0YXJ0UmVhY2hlZCc7XG5pbXBvcnQgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZEV4YW1wbGUgZnJvbSAnLi9GbGF0TGlzdC1vblZpZXdhYmxlSXRlbXNDaGFuZ2VkJztcbmltcG9ydCBTdGlja3lIZWFkZXJzRXhhbXBsZSBmcm9tICcuL0ZsYXRMaXN0LXN0aWNreUhlYWRlcnMnO1xuaW1wb3J0IFdpdGhTZXBhcmF0b3JzRXhhbXBsZSBmcm9tICcuL0ZsYXRMaXN0LXdpdGhTZXBhcmF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgZnJhbWV3b3JrOiAnUmVhY3QnLFxuICB0aXRsZTogJ0ZsYXRMaXN0JyxcbiAgY2F0ZWdvcnk6ICdMaXN0VmlldycsXG4gIGRvY3VtZW50YXRpb25VUkw6ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2ZsYXRsaXN0JyxcbiAgZGVzY3JpcHRpb246ICdQZXJmb3JtYW50LCBzY3JvbGxhYmxlIGxpc3Qgb2YgZGF0YS4nLFxuICBzaG93SW5kaXZpZHVhbEV4YW1wbGVzOiB0cnVlLFxuICBleGFtcGxlczogW1xuICAgIEJhc2ljRXhhbXBsZSxcbiAgICBPblN0YXJ0UmVhY2hlZEV4YW1wbGUsXG4gICAgT25FbmRSZWFjaGVkRXhhbXBsZSxcbiAgICBDb250ZW50SW5zZXRFeGFtcGxlLFxuICAgIEludmVydGVkRXhhbXBsZSxcbiAgICBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkRXhhbXBsZSxcbiAgICBXaXRoU2VwYXJhdG9yc0V4YW1wbGUsXG4gICAgTXVsdGlDb2x1bW5FeGFtcGxlLFxuICAgIFN0aWNreUhlYWRlcnNFeGFtcGxlLFxuICAgIE5lc3RlZEV4YW1wbGUsXG4gIF0sXG59OiBSTlRlc3Rlck1vZHVsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtJdGVtfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0xpc3RFeGFtcGxlU2hhcmVkJztcbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuaW1wb3J0IHR5cGUge0FuaW1hdGVkQ29tcG9uZW50VHlwZX0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9jcmVhdGVBbmltYXRlZENvbXBvbmVudCc7XG5pbXBvcnQgdHlwZW9mIEZsYXRMaXN0VHlwZSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xpc3RzL0ZsYXRMaXN0JztcbmltcG9ydCB0eXBlIHtSZW5kZXJJdGVtUHJvcHN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGlzdHMvVmlydHVhbGl6ZWRMaXN0JztcblxuaW1wb3J0IHtcbiAgRm9vdGVyQ29tcG9uZW50LFxuICBIZWFkZXJDb21wb25lbnQsXG4gIEl0ZW1Db21wb25lbnQsXG4gIEl0ZW1TZXBhcmF0b3JDb21wb25lbnQsXG4gIExpc3RFbXB0eUNvbXBvbmVudCxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgUGxhaW5JbnB1dCxcbiAgU2VwYXJhdG9yQ29tcG9uZW50LFxuICBTcGluZGljYXRvcixcbiAgZ2VuTmV3ZXJJdGVtcyxcbiAgZ2VuT2xkZXJJdGVtcyxcbiAgZ2V0SXRlbUxheW91dCxcbiAgcHJlc3NJdGVtLFxuICByZW5kZXJTbWFsbFN3aXRjaE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9MaXN0RXhhbXBsZVNoYXJlZCc7XG5pbXBvcnQgUk5UZXN0ZXJQYWdlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJQYWdlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEFsZXJ0LFxuICBBbmltYXRlZCxcbiAgSTE4bk1hbmFnZXIsXG4gIFBsYXRmb3JtLFxuICBTdHlsZVNoZWV0LFxuICBUZXh0SW5wdXQsXG4gIFZpZXcsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgaW5mb0xvZyBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9pbmZvTG9nJztcblxuY29uc3QgUEFHRV9TSVpFID0gMTAwO1xuY29uc3QgTlVNX1BBR0VTID0gMTA7XG5jb25zdCBJTklUSUFMX1BBR0VfT0ZGU0VUID0gTWF0aC5mbG9vcihOVU1fUEFHRVMgLyAyKTtcbmNvbnN0IExPQURfVElNRSA9IDIwMDA7XG5cbmNvbnN0IFZJRVdBQklMSVRZX0NPTkZJRyA9IHtcbiAgbWluaW11bVZpZXdUaW1lOiAzMDAwLFxuICB2aWV3QXJlYUNvdmVyYWdlUGVyY2VudFRocmVzaG9sZDogMTAwLFxuICB3YWl0Rm9ySW50ZXJhY3Rpb246IHRydWUsXG59O1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8fH0+O1xudHlwZSBTdGF0ZSA9IHt8XG4gIGRhdGE6IEFycmF5PEl0ZW0+LFxuICBmaXJzdDogbnVtYmVyLFxuICBsYXN0OiBudW1iZXIsXG4gIGRlYnVnOiBib29sZWFuLFxuICBob3Jpem9udGFsOiBib29sZWFuLFxuICBpbnZlcnRlZDogYm9vbGVhbixcbiAgZmlsdGVyVGV4dDogc3RyaW5nLFxuICBmaXhlZEhlaWdodDogYm9vbGVhbixcbiAgbG9nVmlld2FibGU6IGJvb2xlYW4sXG4gIHZpcnR1YWxpemVkOiBib29sZWFuLFxuICBlbXB0eTogYm9vbGVhbixcbiAgdXNlRmxhdExpc3RJdGVtQ29tcG9uZW50OiBib29sZWFuLFxuICBmYWRpbmdFZGdlTGVuZ3RoOiBudW1iZXIsXG4gIG9uUHJlc3NEaXNhYmxlZDogYm9vbGVhbixcbiAgdGV4dFNlbGVjdGFibGU6IGJvb2xlYW4sXG4gIGlzUlRMOiBib29sZWFuLFxuICBtYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb246IGJvb2xlYW4sXG4gIHByZXZpb3VzTG9hZGluZzogYm9vbGVhbixcbiAgbmV4dExvYWRpbmc6IGJvb2xlYW4sXG58fTtcblxuY29uc3QgSVNfUlRMID0gSTE4bk1hbmFnZXIuaXNSVEw7XG5cbmNsYXNzIEZsYXRMaXN0RXhhbXBsZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICBkYXRhOiBnZW5OZXdlckl0ZW1zKFBBR0VfU0laRSwgUEFHRV9TSVpFICogSU5JVElBTF9QQUdFX09GRlNFVCksXG4gICAgZmlyc3Q6IFBBR0VfU0laRSAqIElOSVRJQUxfUEFHRV9PRkZTRVQsXG4gICAgbGFzdDogUEFHRV9TSVpFICsgUEFHRV9TSVpFICogSU5JVElBTF9QQUdFX09GRlNFVCxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgaG9yaXpvbnRhbDogZmFsc2UsXG4gICAgaW52ZXJ0ZWQ6IGZhbHNlLFxuICAgIGZpbHRlclRleHQ6ICcnLFxuICAgIGZpeGVkSGVpZ2h0OiB0cnVlLFxuICAgIGxvZ1ZpZXdhYmxlOiBmYWxzZSxcbiAgICB2aXJ0dWFsaXplZDogdHJ1ZSxcbiAgICBlbXB0eTogZmFsc2UsXG4gICAgdXNlRmxhdExpc3RJdGVtQ29tcG9uZW50OiBmYWxzZSxcbiAgICBmYWRpbmdFZGdlTGVuZ3RoOiAwLFxuICAgIG9uUHJlc3NEaXNhYmxlZDogZmFsc2UsXG4gICAgdGV4dFNlbGVjdGFibGU6IHRydWUsXG4gICAgaXNSVEw6IElTX1JUTCxcbiAgICBtYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb246IHRydWUsXG4gICAgcHJldmlvdXNMb2FkaW5nOiBmYWxzZSxcbiAgICBuZXh0TG9hZGluZzogZmFsc2UsXG4gIH07XG5cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5IEZsb3cnc1xuICAgKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICBfb25DaGFuZ2VGaWx0ZXJUZXh0ID0gZmlsdGVyVGV4dCA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZmlsdGVyVGV4dH0pO1xuICB9O1xuXG4gIF9vbkNoYW5nZVNjcm9sbFRvSW5kZXggPSAodGV4dDogbWl4ZWQpID0+IHtcbiAgICB0aGlzLl9saXN0UmVmPy5zY3JvbGxUb0luZGV4KHt2aWV3UG9zaXRpb246IDAuNSwgaW5kZXg6IE51bWJlcih0ZXh0KX0pO1xuICB9O1xuXG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgX3Njcm9sbFBvcyA9IG5ldyBBbmltYXRlZC5WYWx1ZSgwKTtcbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICBfc2Nyb2xsU2lua1ggPSBBbmltYXRlZC5ldmVudChcbiAgICBbe25hdGl2ZUV2ZW50OiB7Y29udGVudE9mZnNldDoge3g6IHRoaXMuX3Njcm9sbFBvc319fV0sXG4gICAge3VzZU5hdGl2ZURyaXZlcjogdHJ1ZX0sXG4gICk7XG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgX3Njcm9sbFNpbmtZID0gQW5pbWF0ZWQuZXZlbnQoXG4gICAgW3tuYXRpdmVFdmVudDoge2NvbnRlbnRPZmZzZXQ6IHt5OiB0aGlzLl9zY3JvbGxQb3N9fX1dLFxuICAgIHt1c2VOYXRpdmVEcml2ZXI6IHRydWV9LFxuICApO1xuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLl9saXN0UmVmPy5yZWNvcmRJbnRlcmFjdGlvbigpOyAvLyBlLmcuIGZsaXBwaW5nIGxvZ1ZpZXdhYmxlIHN3aXRjaFxuICB9XG5cbiAgX3NldEJvb2xlYW5WYWx1ZTogc3RyaW5nID0+IGJvb2xlYW4gPT4gdm9pZCA9IGtleSA9PiB2YWx1ZSA9PlxuICAgIHRoaXMuc2V0U3RhdGUoe1trZXldOiB2YWx1ZX0pO1xuXG4gIF9zZXRJc1JUTDogYm9vbGVhbiA9PiB2b2lkID0gdmFsdWUgPT4ge1xuICAgIEkxOG5NYW5hZ2VyLmZvcmNlUlRMKHZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHtpc1JUTDogdmFsdWV9KTtcbiAgICBBbGVydC5hbGVydChcbiAgICAgICdSZWxvYWQgdGhpcyBwYWdlJyxcbiAgICAgICdQbGVhc2UgcmVsb2FkIHRoaXMgcGFnZSB0byBjaGFuZ2UgdGhlIFVJIGRpcmVjdGlvbiEgJyArXG4gICAgICAgICdBbGwgZXhhbXBsZXMgaW4gdGhpcyBhcHAgd2lsbCBiZSBhZmZlY3RlZC4gJyArXG4gICAgICAgICdDaGVjayB0aGVtIG91dCB0byBzZWUgd2hhdCB0aGV5IGxvb2sgbGlrZSBpbiBSVEwgbGF5b3V0LicsXG4gICAgKTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3QgZmlsdGVyUmVnZXggPSBuZXcgUmVnRXhwKFN0cmluZyh0aGlzLnN0YXRlLmZpbHRlclRleHQpLCAnaScpO1xuICAgIGNvbnN0IGZpbHRlciA9IChpdGVtOiBJdGVtKSA9PlxuICAgICAgZmlsdGVyUmVnZXgudGVzdChpdGVtLnRleHQpIHx8IGZpbHRlclJlZ2V4LnRlc3QoaXRlbS50aXRsZSk7XG4gICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5zdGF0ZS5kYXRhLmZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IGZsYXRMaXN0SXRlbVJlbmRlcmVyUHJvcHMgPSB0aGlzLl9yZW5kZXJJdGVtQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSTlRlc3RlclBhZ2Ugbm9TY3JvbGw9e3RydWV9IHRpdGxlPVwiU2ltcGxlIGxpc3Qgb2YgaXRlbXNcIj5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VhcmNoUm93fT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMub3B0aW9uc30+XG4gICAgICAgICAgICAgIDxQbGFpbklucHV0XG4gICAgICAgICAgICAgICAgdGVzdElEPVwic2VhcmNoX2Jhcl9mbGF0X2xpc3RcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy5fb25DaGFuZ2VGaWx0ZXJUZXh0fVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5maWx0ZXJUZXh0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8UGxhaW5JbnB1dFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy5fb25DaGFuZ2VTY3JvbGxUb0luZGV4fVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwic2Nyb2xsVG9JbmRleC4uLlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLm9wdGlvbnN9PlxuICAgICAgICAgICAgICB7cmVuZGVyU21hbGxTd2l0Y2hPcHRpb24oXG4gICAgICAgICAgICAgICAgJ1ZpcnR1YWxpemVkJyxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnZpcnR1YWxpemVkLFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEJvb2xlYW5WYWx1ZSgndmlydHVhbGl6ZWQnKSxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKFxuICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmhvcml6b250YWwsXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Qm9vbGVhblZhbHVlKCdob3Jpem9udGFsJyksXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtyZW5kZXJTbWFsbFN3aXRjaE9wdGlvbihcbiAgICAgICAgICAgICAgICAnRml4ZWQgSGVpZ2h0JyxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmZpeGVkSGVpZ2h0LFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEJvb2xlYW5WYWx1ZSgnZml4ZWRIZWlnaHQnKSxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKFxuICAgICAgICAgICAgICAgICdMb2cgVmlld2FibGUnLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUubG9nVmlld2FibGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Qm9vbGVhblZhbHVlKCdsb2dWaWV3YWJsZScpLFxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7cmVuZGVyU21hbGxTd2l0Y2hPcHRpb24oXG4gICAgICAgICAgICAgICAgJ0ludmVydGVkJyxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmludmVydGVkLFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEJvb2xlYW5WYWx1ZSgnaW52ZXJ0ZWQnKSxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKFxuICAgICAgICAgICAgICAgICdFbXB0eScsXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5lbXB0eSxcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRCb29sZWFuVmFsdWUoJ2VtcHR5JyksXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtyZW5kZXJTbWFsbFN3aXRjaE9wdGlvbihcbiAgICAgICAgICAgICAgICAnRGVidWcnLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZGVidWcsXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Qm9vbGVhblZhbHVlKCdkZWJ1ZycpLFxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7cmVuZGVyU21hbGxTd2l0Y2hPcHRpb24oXG4gICAgICAgICAgICAgICAgJ29uUHJlc3MgRGlzYWJsZWQnLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUub25QcmVzc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEJvb2xlYW5WYWx1ZSgnb25QcmVzc0Rpc2FibGVkJyksXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtyZW5kZXJTbWFsbFN3aXRjaE9wdGlvbihcbiAgICAgICAgICAgICAgICAnVGV4dCBTZWxlY3RhYmxlJyxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRleHRTZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEJvb2xlYW5WYWx1ZSgndGV4dFNlbGVjdGFibGUnKSxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKFxuICAgICAgICAgICAgICAgICdVc2UgRmxhdExpc3RJdGVtQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnVzZUZsYXRMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRCb29sZWFuVmFsdWUoJ3VzZUZsYXRMaXN0SXRlbUNvbXBvbmVudCcpLFxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7cmVuZGVyU21hbGxTd2l0Y2hPcHRpb24oXG4gICAgICAgICAgICAgICAgJ0lzIFJUTCcsXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5pc1JUTCxcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJc1JUTCxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKFxuICAgICAgICAgICAgICAgICdNYWludGFpbiBjb250ZW50IHBvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLm1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRCb29sZWFuVmFsdWUoJ21haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbicpLFxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7UGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJyAmJiAoXG4gICAgICAgICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmFkaW5nIGVkZ2UgbGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lQ29sb3JBbmRyb2lkPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICBrZXlib2FyZFR5cGU9eydudW1lcmljJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWRpbmdFZGdlTGVuZ3RoOiBOdW1iZXIoZXZlbnQubmF0aXZlRXZlbnQudGV4dCksXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxTcGluZGljYXRvciB2YWx1ZT17dGhpcy5fc2Nyb2xsUG9zfSAvPlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8U2VwYXJhdG9yQ29tcG9uZW50IC8+XG4gICAgICAgICAgPEFuaW1hdGVkLkZsYXRMaXN0XG4gICAgICAgICAgICBmYWRpbmdFZGdlTGVuZ3RoPXt0aGlzLnN0YXRlLmZhZGluZ0VkZ2VMZW5ndGh9XG4gICAgICAgICAgICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50PXtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5ob3Jpem9udGFsID8gbnVsbCA6IEl0ZW1TZXBhcmF0b3JDb21wb25lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIExpc3RIZWFkZXJDb21wb25lbnQ9e1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnByZXZpb3VzTG9hZGluZyA/IExvYWRpbmdDb21wb25lbnQgOiBIZWFkZXJDb21wb25lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIExpc3RGb290ZXJDb21wb25lbnQ9e1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlLm5leHRMb2FkaW5nID8gTG9hZGluZ0NvbXBvbmVudCA6IEZvb3RlckNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTGlzdEVtcHR5Q29tcG9uZW50PXtMaXN0RW1wdHlDb21wb25lbnR9XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctZW1wdHktYXJyYXktYW5ub3RdXG4gICAgICAgICAgICBkYXRhPXt0aGlzLnN0YXRlLmVtcHR5ID8gW10gOiBmaWx0ZXJlZERhdGF9XG4gICAgICAgICAgICBkZWJ1Zz17dGhpcy5zdGF0ZS5kZWJ1Z31cbiAgICAgICAgICAgIGRpc2FibGVWaXJ0dWFsaXphdGlvbj17IXRoaXMuc3RhdGUudmlydHVhbGl6ZWR9XG4gICAgICAgICAgICBnZXRJdGVtTGF5b3V0PXtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5maXhlZEhlaWdodCA/IHRoaXMuX2dldEl0ZW1MYXlvdXQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwibGlzdFwiXG4gICAgICAgICAgICBob3Jpem9udGFsPXt0aGlzLnN0YXRlLmhvcml6b250YWx9XG4gICAgICAgICAgICBpbnZlcnRlZD17dGhpcy5zdGF0ZS5pbnZlcnRlZH1cbiAgICAgICAgICAgIGtleT17XG4gICAgICAgICAgICAgICh0aGlzLnN0YXRlLmhvcml6b250YWwgPyAnaCcgOiAndicpICtcbiAgICAgICAgICAgICAgKHRoaXMuc3RhdGUuZml4ZWRIZWlnaHQgPyAnZicgOiAnZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPVwiYWx3YXlzXCJcbiAgICAgICAgICAgIGtleWJvYXJkRGlzbWlzc01vZGU9XCJvbi1kcmFnXCJcbiAgICAgICAgICAgIG51bUNvbHVtbnM9ezF9XG4gICAgICAgICAgICBvblN0YXJ0UmVhY2hlZD17dGhpcy5fb25TdGFydFJlYWNoZWR9XG4gICAgICAgICAgICBpbml0aWFsU2Nyb2xsSW5kZXg9e01hdGguZmxvb3IoUEFHRV9TSVpFIC8gMil9XG4gICAgICAgICAgICBvbkVuZFJlYWNoZWQ9e3RoaXMuX29uRW5kUmVhY2hlZH1cbiAgICAgICAgICAgIG9uUmVmcmVzaD17dGhpcy5fb25SZWZyZXNofVxuICAgICAgICAgICAgb25TY3JvbGw9e1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlLmhvcml6b250YWwgPyB0aGlzLl9zY3JvbGxTaW5rWCA6IHRoaXMuX3Njcm9sbFNpbmtZXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvblNjcm9sbFRvSW5kZXhGYWlsZWQ9e3RoaXMuX29uU2Nyb2xsVG9JbmRleEZhaWxlZH1cbiAgICAgICAgICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ9e3RoaXMuX29uVmlld2FibGVJdGVtc0NoYW5nZWR9XG4gICAgICAgICAgICByZWY9e3RoaXMuX2NhcHR1cmVSZWZ9XG4gICAgICAgICAgICByZWZyZXNoaW5nPXtmYWxzZX1cbiAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJTdHlsZT17c3R5bGVzLmxpc3R9XG4gICAgICAgICAgICB2aWV3YWJpbGl0eUNvbmZpZz17VklFV0FCSUxJVFlfQ09ORklHfVxuICAgICAgICAgICAgbWFpbnRhaW5WaXNpYmxlQ29udGVudFBvc2l0aW9uPXtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5tYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgICA/IHttaW5JbmRleEZvclZpc2libGU6IDB9XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHsuLi5mbGF0TGlzdEl0ZW1SZW5kZXJlclByb3BzfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUk5UZXN0ZXJQYWdlPlxuICAgICk7XG4gIH1cbiAgX2NhcHR1cmVSZWYgPSAoXG4gICAgcmVmOiBSZWFjdC5FbGVtZW50UmVmPFxuICAgICAgQW5pbWF0ZWRDb21wb25lbnRUeXBlPFxuICAgICAgICBSZWFjdC5FbGVtZW50Q29uZmlnPEZsYXRMaXN0VHlwZT4sXG4gICAgICAgIFJlYWN0LkVsZW1lbnRSZWY8RmxhdExpc3RUeXBlPixcbiAgICAgID4sXG4gICAgPiB8IG51bGwsXG4gICkgPT4ge1xuICAgIHRoaXMuX2xpc3RSZWYgPSByZWY7XG4gIH07XG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgX2dldEl0ZW1MYXlvdXQgPSAoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGdldEl0ZW1MYXlvdXQoZGF0YSwgaW5kZXgsIHRoaXMuc3RhdGUuaG9yaXpvbnRhbCk7XG4gIH07XG4gIF9vblN0YXJ0UmVhY2hlZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5maXJzdCA8PSAwIHx8IHRoaXMuc3RhdGUucHJldmlvdXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7cHJldmlvdXNMb2FkaW5nOiB0cnVlfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAgIHByZXZpb3VzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGRhdGE6IGdlbk9sZGVySXRlbXMoUEFHRV9TSVpFLCBzdGF0ZS5maXJzdCkuY29uY2F0KHN0YXRlLmRhdGEpLFxuICAgICAgICBmaXJzdDogc3RhdGUuZmlyc3QgLSBQQUdFX1NJWkUsXG4gICAgICB9KSk7XG4gICAgfSwgTE9BRF9USU1FKTtcbiAgfTtcbiAgX29uRW5kUmVhY2hlZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5sYXN0ID49IFBBR0VfU0laRSAqIE5VTV9QQUdFUyB8fCB0aGlzLnN0YXRlLm5leHRMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7bmV4dExvYWRpbmc6IHRydWV9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgbmV4dExvYWRpbmc6IGZhbHNlLFxuICAgICAgICBkYXRhOiBzdGF0ZS5kYXRhLmNvbmNhdChnZW5OZXdlckl0ZW1zKFBBR0VfU0laRSwgc3RhdGUubGFzdCkpLFxuICAgICAgICBsYXN0OiBzdGF0ZS5sYXN0ICsgUEFHRV9TSVpFLFxuICAgICAgfSkpO1xuICAgIH0sIExPQURfVElNRSk7XG4gIH07XG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgX29uUHJlc3NDYWxsYmFjayA9ICgpID0+IHtcbiAgICBjb25zdCB7b25QcmVzc0Rpc2FibGVkfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgd2FybmluZyA9ICgpID0+IGNvbnNvbGUubG9nKCdvblByZXNzIGRpc2FibGVkJyk7XG4gICAgY29uc3Qgb25QcmVzc0FjdGlvbiA9IG9uUHJlc3NEaXNhYmxlZCA/IHdhcm5pbmcgOiB0aGlzLl9wcmVzc0l0ZW07XG4gICAgcmV0dXJuIG9uUHJlc3NBY3Rpb247XG4gIH07XG4gIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgX29uUmVmcmVzaCA9ICgpID0+IEFsZXJ0LmFsZXJ0KCdvblJlZnJlc2g6IG5vdGhpbmcgdG8gcmVmcmVzaCA6UCcpO1xuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF9yZW5kZXJJdGVtQ29tcG9uZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlbmRlclByb3AgPSAoe2l0ZW0sIHNlcGFyYXRvcnN9OiBSZW5kZXJJdGVtUHJvcHM8SXRlbT4pID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxJdGVtQ29tcG9uZW50XG4gICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICBob3Jpem9udGFsPXt0aGlzLnN0YXRlLmhvcml6b250YWx9XG4gICAgICAgICAgZml4ZWRIZWlnaHQ9e3RoaXMuc3RhdGUuZml4ZWRIZWlnaHR9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fb25QcmVzc0NhbGxiYWNrKCl9XG4gICAgICAgICAgb25TaG93VW5kZXJsYXk9e3NlcGFyYXRvcnMuaGlnaGxpZ2h0fVxuICAgICAgICAgIG9uSGlkZVVuZGVybGF5PXtzZXBhcmF0b3JzLnVuaGlnaGxpZ2h0fVxuICAgICAgICAgIHRleHRTZWxlY3RhYmxlPXt0aGlzLnN0YXRlLnRleHRTZWxlY3RhYmxlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnVzZUZsYXRMaXN0SXRlbUNvbXBvbmVudFxuICAgICAgPyB7XG4gICAgICAgICAgcmVuZGVySXRlbTogdW5kZWZpbmVkLFxuICAgICAgICAgIExpc3RJdGVtQ29tcG9uZW50OiByZW5kZXJQcm9wLFxuICAgICAgICB9XG4gICAgICA6IHtyZW5kZXJJdGVtOiByZW5kZXJQcm9wfTtcbiAgfTtcblxuICBfb25TY3JvbGxUb0luZGV4RmFpbGVkID0gKHtcbiAgICBpbmRleCxcbiAgICBoaWdoZXN0TWVhc3VyZWRGcmFtZUluZGV4LFxuICB9OiB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBoaWdoZXN0TWVhc3VyZWRGcmFtZUluZGV4OiBudW1iZXIsXG4gIH0pID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgZmFpbGVkIHRvIHNjcm9sbCB0byBpbmRleDogJHtpbmRleH0gKG1lYXN1cmVkIHVwIHRvICR7aGlnaGVzdE1lYXN1cmVkRnJhbWVJbmRleH0pYCxcbiAgICApO1xuICB9O1xuXG4gIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gaXRlbXMgY2hhbmdlIHZpZXdhYmlsaXR5IGJ5IHNjcm9sbGluZyBpbnRvIG9yIG91dCBvZlxuICAvLyB0aGUgdmlld2FibGUgYXJlYS5cbiAgX29uVmlld2FibGVJdGVtc0NoYW5nZWQgPSAoaW5mbzoge1xuICAgIGNoYW5nZWQ6IEFycmF5PHtcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgaXNWaWV3YWJsZTogYm9vbGVhbixcbiAgICAgIGl0ZW06IGFueSxcbiAgICAgIGluZGV4OiA/bnVtYmVyLFxuICAgICAgc2VjdGlvbj86IGFueSxcbiAgICAgIC4uLlxuICAgIH0+LFxuICAgIC4uLlxuICB9KSA9PiB7XG4gICAgLy8gSW1wcmVzc2lvbnMgY2FuIGJlIGxvZ2dlZCBoZXJlXG4gICAgaWYgKHRoaXMuc3RhdGUubG9nVmlld2FibGUpIHtcbiAgICAgIGluZm9Mb2coXG4gICAgICAgICdvblZpZXdhYmxlSXRlbXNDaGFuZ2VkOiAnLFxuICAgICAgICBpbmZvLmNoYW5nZWQubWFwKHYgPT4gKHsuLi52LCBpdGVtOiAnLi4uJ30pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIF9wcmVzc0l0ZW0gPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLl9saXN0UmVmPy5yZWNvcmRJbnRlcmFjdGlvbigpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGF0ZS5kYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ua2V5ID09PSBrZXkpO1xuICAgIGNvbnN0IGl0ZW1TdGF0ZSA9IHByZXNzSXRlbSh0aGlzLnN0YXRlLmRhdGFbaW5kZXhdKTtcbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgLi4uc3RhdGUuZGF0YS5zbGljZSgwLCBpbmRleCksXG4gICAgICAgIGl0ZW1TdGF0ZSxcbiAgICAgICAgLi4uc3RhdGUuZGF0YS5zbGljZShpbmRleCArIDEpLFxuICAgICAgXSxcbiAgICB9KSk7XG4gIH07XG5cbiAgX2xpc3RSZWY6IFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEFuaW1hdGVkLkZsYXRMaXN0PiB8IG51bGw7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiKDIzOSwgMjM5LCAyNDQpJyxcbiAgICBmbGV4OiAxLFxuICB9LFxuICBsaXN0OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIGZsZXhHcm93OiAxLFxuICB9LFxuICBvcHRpb25zOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgc2VhcmNoUm93OiB7XG4gICAgcGFkZGluZ0hvcml6b250YWw6IDEwLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnQmFzaWMnLFxuICBuYW1lOiAnYmFzaWMnLFxuICBkZXNjcmlwdGlvbjogJ1NpbXBsZSBsaXN0IG9mIGl0ZW1zJyxcbiAgcmVuZGVyOiAoKSA9PiA8RmxhdExpc3RFeGFtcGxlIC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQge3VzZUNvbnRleHR9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUk5UZXN0ZXJUaXRsZSA9IHJlcXVpcmUoJy4vUk5UZXN0ZXJUaXRsZScpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1NhZmVBcmVhVmlldywgU2Nyb2xsVmlldywgU3R5bGVTaGVldCwgVmlld30gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBjaGlsZHJlbj86IFJlYWN0Lk5vZGUsXG4gIHRpdGxlPzogP3N0cmluZyxcbiAgbm9TY3JvbGw/OiA/Ym9vbGVhbixcbnx9PjtcblxuZnVuY3Rpb24gUk5UZXN0ZXJQYWdlKHtjaGlsZHJlbiwgdGl0bGUsIG5vU2Nyb2xsfTogUHJvcHMpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VDb250ZXh0KFJOVGVzdGVyVGhlbWVDb250ZXh0KTtcblxuICByZXR1cm4gKFxuICAgIDxTYWZlQXJlYVZpZXdcbiAgICAgIHN0eWxlPXtbXG4gICAgICAgIHN0eWxlcy5iYWNrZ3JvdW5kLFxuICAgICAgICB7YmFja2dyb3VuZENvbG9yOiB0aGVtZS5TZWNvbmRhcnlTeXN0ZW1CYWNrZ3JvdW5kQ29sb3J9LFxuICAgICAgXX0+XG4gICAgICB7dGl0bGUgJiYgPFJOVGVzdGVyVGl0bGUgdGl0bGU9e3RpdGxlfSAvPn1cbiAgICAgIHtub1Njcm9sbCA/IChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ub3Njcm9sbFdyYXBwZXJ9PntjaGlsZHJlbn08L1ZpZXc+XG4gICAgICApIDogKFxuICAgICAgICA8U2Nyb2xsVmlld1xuICAgICAgICAgIGF1dG9tYXRpY2FsbHlBZGp1c3RDb250ZW50SW5zZXRzPXshdGl0bGV9XG4gICAgICAgICAgY29udGVudENvbnRhaW5lclN0eWxlPXtzdHlsZXMuc2Nyb2xsV3JhcHBlckNvbnRlbnRDb250YWluZXJ9XG4gICAgICAgICAga2V5Ym9hcmREaXNtaXNzTW9kZT1cImludGVyYWN0aXZlXCJcbiAgICAgICAgICBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPVwiaGFuZGxlZFwiXG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5zY3JvbGxXcmFwcGVyfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICl9XG4gICAgPC9TYWZlQXJlYVZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYmFja2dyb3VuZDoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIG5vc2Nyb2xsV3JhcHBlcjoge1xuICAgIGZsZXg6IDEsXG4gICAgcm93R2FwOiAzMCxcbiAgfSxcbiAgc2Nyb2xsV3JhcHBlcjoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIHNjcm9sbFdyYXBwZXJDb250ZW50Q29udGFpbmVyOiB7XG4gICAgcGFkZGluZ1ZlcnRpY2FsOiAxMCxcbiAgICByb3dHYXA6IDMwLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUk5UZXN0ZXJQYWdlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jbGFzcyBSTlRlc3RlclRpdGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSTlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAge3RoZW1lID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5TZXBhcmF0b3JDb2xvcixcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuVGVydGlhcnlHcm91cGVkQmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0LCB7Y29sb3I6IHRoZW1lLkxhYmVsQ29sb3J9XX0+XG4gICAgICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgPC9STlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgIGJvcmRlcldpZHRoOiAwLjUsXG4gICAgbWFyZ2luOiAxMCxcbiAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgaGVpZ2h0OiA0NSxcbiAgICBwYWRkaW5nOiAxMCxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGZvbnRTaXplOiAxOSxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJOVGVzdGVyVGl0bGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQWN0aXZpdHlJbmRpY2F0b3IsXG4gIEFuaW1hdGVkLFxuICBJbWFnZSxcbiAgUGxhdGZvcm0sXG4gIFN0eWxlU2hlZXQsXG4gIFN3aXRjaCxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBUb3VjaGFibGVIaWdobGlnaHQsXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmV4cG9ydCB0eXBlIEl0ZW0gPSB7XG4gIHRpdGxlOiBzdHJpbmcsXG4gIHRleHQ6IHN0cmluZyxcbiAga2V5OiBzdHJpbmcsXG4gIHByZXNzZWQ6IGJvb2xlYW4sXG4gIG5vSW1hZ2U/OiA/Ym9vbGVhbixcbiAgLi4uXG59O1xuXG5mdW5jdGlvbiBnZW5JdGVtRGF0YShpOiBudW1iZXIpOiBJdGVtIHtcbiAgY29uc3QgaXRlbUhhc2ggPSBNYXRoLmFicyhoYXNoQ29kZSgnSXRlbSAnICsgaSkpO1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnSXRlbSAnICsgaSxcbiAgICB0ZXh0OiBMT1JFTV9JUFNVTS5zbGljZSgwLCAoaXRlbUhhc2ggJSAzMDEpICsgMjApLFxuICAgIGtleTogU3RyaW5nKGkpLFxuICAgIHByZXNzZWQ6IGZhbHNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5OZXdlckl0ZW1zKGNvdW50OiBudW1iZXIsIHN0YXJ0OiBudW1iZXIgPSAwKTogQXJyYXk8SXRlbT4ge1xuICBjb25zdCBkYXRhQmxvYiA9IFtdO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjb3VudCArIHN0YXJ0OyBpKyspIHtcbiAgICBkYXRhQmxvYi5wdXNoKGdlbkl0ZW1EYXRhKGkpKTtcbiAgfVxuICByZXR1cm4gZGF0YUJsb2I7XG59XG5cbmZ1bmN0aW9uIGdlbk9sZGVySXRlbXMoY291bnQ6IG51bWJlciwgc3RhcnQ6IG51bWJlciA9IDApOiBBcnJheTxJdGVtPiB7XG4gIGNvbnN0IGRhdGFCbG9iID0gW107XG4gIGZvciAobGV0IGkgPSBjb3VudDsgaSA+IDA7IGktLSkge1xuICAgIGRhdGFCbG9iLnB1c2goZ2VuSXRlbURhdGEoc3RhcnQgLSBpKSk7XG4gIH1cbiAgcmV0dXJuIGRhdGFCbG9iO1xufVxuXG5jb25zdCBIT1JJWl9XSURUSCA9IDIwMDtcbmNvbnN0IElURU1fSEVJR0hUID0gNzI7XG5cbmNsYXNzIEl0ZW1Db21wb25lbnQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PHtcbiAgZml4ZWRIZWlnaHQ/OiA/Ym9vbGVhbixcbiAgaG9yaXpvbnRhbD86ID9ib29sZWFuLFxuICBpdGVtOiBJdGVtLFxuICBvblByZXNzOiAoa2V5OiBzdHJpbmcpID0+IHZvaWQsXG4gIG9uU2hvd1VuZGVybGF5PzogKCkgPT4gdm9pZCxcbiAgb25IaWRlVW5kZXJsYXk/OiAoKSA9PiB2b2lkLFxuICB0ZXh0U2VsZWN0YWJsZT86ID9ib29sZWFuLFxuICAuLi5cbn0+IHtcbiAgX29uUHJlc3MgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vblByZXNzKHRoaXMucHJvcHMuaXRlbS5rZXkpO1xuICB9O1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qge2ZpeGVkSGVpZ2h0LCBob3Jpem9udGFsLCBpdGVtLCB0ZXh0U2VsZWN0YWJsZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGl0ZW1IYXNoID0gTWF0aC5hYnMoaGFzaENvZGUoaXRlbS50aXRsZSkpO1xuICAgIGNvbnN0IGltZ1NvdXJjZSA9IFRIVU1CX1VSTFNbaXRlbUhhc2ggJSBUSFVNQl9VUkxTLmxlbmd0aF07XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgb25QcmVzcz17dGhpcy5fb25QcmVzc31cbiAgICAgICAgb25TaG93VW5kZXJsYXk9e3RoaXMucHJvcHMub25TaG93VW5kZXJsYXl9XG4gICAgICAgIG9uSGlkZVVuZGVybGF5PXt0aGlzLnByb3BzLm9uSGlkZVVuZGVybGF5fVxuICAgICAgICBzdHlsZT17aG9yaXpvbnRhbCA/IHN0eWxlcy5ob3Jpekl0ZW0gOiBzdHlsZXMuaXRlbX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5yb3csXG4gICAgICAgICAgICBob3Jpem9udGFsICYmIHt3aWR0aDogSE9SSVpfV0lEVEh9LFxuICAgICAgICAgICAgZml4ZWRIZWlnaHQgJiYge2hlaWdodDogSVRFTV9IRUlHSFR9LFxuICAgICAgICAgIF19PlxuICAgICAgICAgIHshaXRlbS5ub0ltYWdlICYmIDxJbWFnZSBzdHlsZT17c3R5bGVzLnRodW1ifSBzb3VyY2U9e2ltZ1NvdXJjZX0gLz59XG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMudGV4dH1cbiAgICAgICAgICAgIHNlbGVjdGFibGU9e3RleHRTZWxlY3RhYmxlfVxuICAgICAgICAgICAgbnVtYmVyT2ZMaW5lcz17aG9yaXpvbnRhbCB8fCBmaXhlZEhlaWdodCA/IDMgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAge2l0ZW0udGl0bGV9IC0ge2l0ZW0udGV4dH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgcmVuZGVyU3RhY2tlZEl0ZW0gPSAoe2l0ZW19OiB7aXRlbTogSXRlbSwgLi4ufSk6IFJlYWN0Lk5vZGUgPT4ge1xuICBjb25zdCBpdGVtSGFzaCA9IE1hdGguYWJzKGhhc2hDb2RlKGl0ZW0udGl0bGUpKTtcbiAgY29uc3QgaW1nU291cmNlID0gVEhVTUJfVVJMU1tpdGVtSGFzaCAlIFRIVU1CX1VSTFMubGVuZ3RoXTtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLnN0YWNrZWR9PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zdGFja2VkVGV4dH0+XG4gICAgICAgIHtpdGVtLnRpdGxlfSAtIHtpdGVtLnRleHR9XG4gICAgICA8L1RleHQ+XG4gICAgICA8SW1hZ2Ugc3R5bGU9e3N0eWxlcy50aHVtYn0gc291cmNlPXtpbWdTb3VyY2V9IC8+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY2xhc3MgRm9vdGVyQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDx7Li4ufT4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaGVhZGVyRm9vdGVyQ29udGFpbmVyfT5cbiAgICAgICAgPFNlcGFyYXRvckNvbXBvbmVudCAvPlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhlYWRlckZvb3Rlcn0+XG4gICAgICAgICAgPFRleHQ+TElTVCBGT09URVI8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEhlYWRlckNvbXBvbmVudCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8ey4uLn0+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhlYWRlckZvb3RlckNvbnRhaW5lcn0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaGVhZGVyRm9vdGVyfT5cbiAgICAgICAgICA8VGV4dD5MSVNUIEhFQURFUjwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8U2VwYXJhdG9yQ29tcG9uZW50IC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBMaXN0RW1wdHlDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PHsuLi59PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5saXN0RW1wdHl9PlxuICAgICAgICA8VGV4dD5UaGUgbGlzdCBpcyBlbXB0eSA6bzwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFNlcGFyYXRvckNvbXBvbmVudCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8ey4uLn0+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiA8VmlldyBzdHlsZT17c3R5bGVzLnNlcGFyYXRvcn0gLz47XG4gIH1cbn1cblxuY29uc3QgTG9hZGluZ0NvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTx7fT4gPSBSZWFjdC5tZW1vKCgpID0+IChcbiAgPFZpZXcgc3R5bGU9e3N0eWxlcy5sb2FkaW5nQ29udGFpbmVyfT5cbiAgICA8QWN0aXZpdHlJbmRpY2F0b3IgLz5cbiAgPC9WaWV3PlxuKSk7XG5cbmNsYXNzIEl0ZW1TZXBhcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLnByb3BzLmhpZ2hsaWdodGVkXG4gICAgICA/IFtcbiAgICAgICAgICBzdHlsZXMuaXRlbVNlcGFyYXRvcixcbiAgICAgICAgICB7bWFyZ2luTGVmdDogMCwgYmFja2dyb3VuZENvbG9yOiAncmdiKDIxNywgMjE3LCAyMTcpJ30sXG4gICAgICAgIF1cbiAgICAgIDogc3R5bGVzLml0ZW1TZXBhcmF0b3I7XG4gICAgcmV0dXJuIDxWaWV3IHN0eWxlPXtzdHlsZX0gLz47XG4gIH1cbn1cblxuY2xhc3MgU3BpbmRpY2F0b3IgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLnNwaW5kaWNhdG9yLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm90YXRlOiB0aGlzLnByb3BzLnZhbHVlLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCA1MDAwXSxcbiAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbJzBkZWcnLCAnMzYwZGVnJ10sXG4gICAgICAgICAgICAgICAgICBleHRyYXBvbGF0ZTogJ2V4dGVuZCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgVEhVTUJfVVJMUyA9IFtcbiAgcmVxdWlyZSgnLi4vYXNzZXRzL2xpa2UucG5nJyksXG4gIHJlcXVpcmUoJy4uL2Fzc2V0cy9kaXNsaWtlLnBuZycpLFxuICByZXF1aXJlKCcuLi9hc3NldHMvY2FsbC5wbmcnKSxcbiAgcmVxdWlyZSgnLi4vYXNzZXRzL2Zpc3QucG5nJyksXG4gIHJlcXVpcmUoJy4uL2Fzc2V0cy9iYW5kYWdlZC5wbmcnKSxcbiAgcmVxdWlyZSgnLi4vYXNzZXRzL2Zsb3dlcnMucG5nJyksXG4gIHJlcXVpcmUoJy4uL2Fzc2V0cy9oZWFydC5wbmcnKSxcbiAgcmVxdWlyZSgnLi4vYXNzZXRzL2xpa2luZy5wbmcnKSxcbiAgcmVxdWlyZSgnLi4vYXNzZXRzL3BhcnR5LnBuZycpLFxuICByZXF1aXJlKCcuLi9hc3NldHMvcG9rZS5wbmcnKSxcbiAgcmVxdWlyZSgnLi4vYXNzZXRzL3N1cGVybGlrZS5wbmcnKSxcbiAgcmVxdWlyZSgnLi4vYXNzZXRzL3ZpY3RvcnkucG5nJyksXG5dO1xuXG5jb25zdCBMT1JFTV9JUFNVTSA9XG4gICdMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgaXVzIGFkIHBlcnRpbmF4IG9wb3J0ZXJlIGFjY29tbW9kYXJlLCBhbiB2aXggXFxcbmNpdmlidXMgY29ycnVtcGl0IHJlZmVycmVudHVyLiBUZSBuYW0gY2FzZSBsdWR1cyBpbmNpZGVyaW50LCB0ZSBtZWEgZmFjaWxpc2kgYWRpcGlzY2luZy4gU2VhIGlkIFxcXG5pbnRlZ3JlIGx1cHRhdHVtLiBJbiB0b3RhIHNhbGUgY29uc2VxdXVudHVyIG5lYy4gRXJhdCBvY3VycmVyZXQgbWVpIGVpLiBFdSBwYXVsbyBzYXBpZW50ZW0gXFxcbnZ1bHB1dGF0ZSBlc3QsIHZlbCBhbiBhY2N1c2FtIGludGVsbGVnYW0gaW50ZXJlc3NldC4gTmFtIGV1IHN0ZXQgcGVyaWN1bGEgcmVwcmltaXF1ZSwgZWEgdmltIGlsbHVkIFxcXG5tb2R1cywgcHV0YW50IGludmlkdW50IHJlcHJlaGVuZHVudCBuZSBxdWkuJztcblxuLyogZXNsaW50IG5vLWJpdHdpc2U6IDAgKi9cbmZ1bmN0aW9uIGhhc2hDb2RlKHN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgbGV0IGhhc2ggPSAxNTtcbiAgZm9yIChsZXQgaWkgPSBzdHIubGVuZ3RoIC0gMTsgaWkgPj0gMDsgaWktLSkge1xuICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBzdHIuY2hhckNvZGVBdChpaSk7XG4gIH1cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmNvbnN0IEhFQURFUiA9IHtoZWlnaHQ6IDMwLCB3aWR0aDogMTAwfTtcbmNvbnN0IFNFUEFSQVRPUl9IRUlHSFQgPSBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGg7XG5cbmZ1bmN0aW9uIGdldEl0ZW1MYXlvdXQoXG4gIGRhdGE6IGFueSxcbiAgaW5kZXg6IG51bWJlcixcbiAgaG9yaXpvbnRhbD86IGJvb2xlYW4sXG4pOiB7fGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcnx9IHtcbiAgY29uc3QgW2xlbmd0aCwgc2VwYXJhdG9yLCBoZWFkZXJdID0gaG9yaXpvbnRhbFxuICAgID8gW0hPUklaX1dJRFRILCAwLCBIRUFERVIud2lkdGhdXG4gICAgOiBbSVRFTV9IRUlHSFQsIFNFUEFSQVRPUl9IRUlHSFQsIEhFQURFUi5oZWlnaHRdO1xuICByZXR1cm4ge2xlbmd0aCwgb2Zmc2V0OiAobGVuZ3RoICsgc2VwYXJhdG9yKSAqIGluZGV4ICsgaGVhZGVyLCBpbmRleH07XG59XG5cbmZ1bmN0aW9uIHByZXNzSXRlbShpdGVtOiBJdGVtKTogSXRlbSB7XG4gIGNvbnN0IHRpdGxlID0gYEl0ZW0gJHtpdGVtLmtleX0keyFpdGVtLnByZXNzZWQgPyAnIChwcmVzc2VkKScgOiAnJ31gO1xuICByZXR1cm4gey4uLml0ZW0sIHRpdGxlLCBwcmVzc2VkOiAhaXRlbS5wcmVzc2VkfTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU21hbGxTd2l0Y2hPcHRpb24oXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHZhbHVlOiBib29sZWFuLFxuICBzZXRWYWx1ZTogYm9vbGVhbiA9PiB2b2lkLFxuKTogbnVsbCB8IFJlYWN0Lk5vZGUge1xuICBpZiAoUGxhdGZvcm0uaXNUVikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5vcHRpb259PlxuICAgICAgPFRleHQ+e2xhYmVsfTo8L1RleHQ+XG4gICAgICA8U3dpdGNoXG4gICAgICAgIHN0eWxlPXtzdHlsZXMuc21hbGxTd2l0Y2h9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17c2V0VmFsdWV9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gUGxhaW5JbnB1dChwcm9wczogT2JqZWN0KTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFRleHRJbnB1dFxuICAgICAgYXV0b0NhcGl0YWxpemU9XCJub25lXCJcbiAgICAgIGF1dG9Db3JyZWN0PXtmYWxzZX1cbiAgICAgIGNsZWFyQnV0dG9uTW9kZT1cImFsd2F5c1wiXG4gICAgICB1bmRlcmxpbmVDb2xvckFuZHJvaWQ9XCJ0cmFuc3BhcmVudFwiXG4gICAgICBzdHlsZT17c3R5bGVzLnNlYXJjaFRleHRJbnB1dH1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGhlYWRlckZvb3Rlcjoge1xuICAgIC4uLkhFQURFUixcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcbiAgaGVhZGVyRm9vdGVyQ29udGFpbmVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiKDIzOSwgMjM5LCAyNDQpJyxcbiAgfSxcbiAgbGlzdEVtcHR5OiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGZsZXhHcm93OiAxLFxuICB9LFxuICBob3Jpekl0ZW06IHtcbiAgICBhbGlnblNlbGY6ICdmbGV4LXN0YXJ0JywgLy8gTmVjZXNzYXJ5IGZvciB0b3VjaCBoaWdobGlnaHRcbiAgfSxcbiAgaXRlbToge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGl0ZW1TZXBhcmF0b3I6IHtcbiAgICBoZWlnaHQ6IFNFUEFSQVRPUl9IRUlHSFQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiKDIwMCwgMTk5LCAyMDQpJyxcbiAgICBtYXJnaW5MZWZ0OiA2MCxcbiAgfSxcbiAgb3B0aW9uOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgcGFkZGluZzogOCxcbiAgICBwYWRkaW5nUmlnaHQ6IDAsXG4gIH0sXG4gIHJvdzoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHBhZGRpbmc6IDEwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgfSxcbiAgc2VhcmNoVGV4dElucHV0OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIGJvcmRlckNvbG9yOiAnI2NjY2NjYycsXG4gICAgYm9yZGVyUmFkaXVzOiAzLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIHBhZGRpbmdMZWZ0OiA4LFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogMCxcbiAgICBoZWlnaHQ6IDI2LFxuICAgIGZvbnRTaXplOiAxNCxcbiAgICBmbGV4R3JvdzogMSxcbiAgfSxcbiAgc2VwYXJhdG9yOiB7XG4gICAgaGVpZ2h0OiBTRVBBUkFUT1JfSEVJR0hULFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYigyMDAsIDE5OSwgMjA0KScsXG4gIH0sXG4gIHNtYWxsU3dpdGNoOiBQbGF0Zm9ybS5zZWxlY3Qoe1xuICAgIGFuZHJvaWQ6IHtcbiAgICAgIHRvcDogMSxcbiAgICAgIG1hcmdpbjogLTYsXG4gICAgICB0cmFuc2Zvcm06IFt7c2NhbGU6IDAuN31dLFxuICAgIH0sXG4gICAgaW9zOiB7XG4gICAgICB0b3A6IDQsXG4gICAgICBtYXJnaW46IC0xMCxcbiAgICAgIHRyYW5zZm9ybTogW3tzY2FsZTogMC41fV0sXG4gICAgfSxcbiAgfSksXG4gIHN0YWNrZWQ6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG4gIHRodW1iOiB7XG4gICAgd2lkdGg6IDUwLFxuICAgIGhlaWdodDogNTAsXG4gICAgbGVmdDogLTUsXG4gIH0sXG4gIHNwaW5kaWNhdG9yOiB7XG4gICAgbWFyZ2luTGVmdDogJ2F1dG8nLFxuICAgIG1hcmdpblRvcDogOCxcbiAgICB3aWR0aDogMixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2RhcmtncmF5JyxcbiAgfSxcbiAgc3RhY2tlZFRleHQ6IHtcbiAgICBwYWRkaW5nOiA0LFxuICAgIGZvbnRTaXplOiAxOCxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGxvYWRpbmdDb250YWluZXI6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgYm9yZGVyVG9wV2lkdGg6IDEsXG4gICAgYm9yZGVyVG9wQ29sb3I6ICdyZ2IoMjAwLCAxOTksIDIwNCknLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGb290ZXJDb21wb25lbnQsXG4gIEhlYWRlckNvbXBvbmVudCxcbiAgTGlzdEVtcHR5Q29tcG9uZW50LFxuICBJdGVtQ29tcG9uZW50LFxuICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50LFxuICBQbGFpbklucHV0LFxuICBTZXBhcmF0b3JDb21wb25lbnQsXG4gIExvYWRpbmdDb21wb25lbnQsXG4gIFNwaW5kaWNhdG9yLFxuICBnZW5OZXdlckl0ZW1zLFxuICBnZW5PbGRlckl0ZW1zLFxuICBnZXRJdGVtTGF5b3V0LFxuICBwcmVzc0l0ZW0sXG4gIHJlbmRlclNtYWxsU3dpdGNoT3B0aW9uLFxuICByZW5kZXJTdGFja2VkSXRlbSxcbn07XG4iLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBCYXNlRmxhdExpc3RFeGFtcGxlIGZyb20gJy4vQmFzZUZsYXRMaXN0RXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBGbGF0TGlzdF9jb250ZW50SW5zZXQoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtpbml0aWFsQ29udGVudEluc2V0LCB0b2dnbGVkQ29udGVudEluc2V0XSA9IFs0NCwgODhdO1xuXG4gIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICBgY29udGVudEluc2V0IHRvcDogJHtpbml0aWFsQ29udGVudEluc2V0LnRvU3RyaW5nKCl9YCxcbiAgKTtcbiAgY29uc3QgW2V4YW1wbGVQcm9wcywgc2V0RXhhbXBsZVByb3BzXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhdXRvbWF0aWNhbGx5QWRqdXN0Q29udGVudEluc2V0czogZmFsc2UsXG4gICAgY29udGVudEluc2V0OiB7dG9wOiBpbml0aWFsQ29udGVudEluc2V0fSxcbiAgICBjb250ZW50T2Zmc2V0OiB7eTogLWluaXRpYWxDb250ZW50SW5zZXQsIHg6IDB9LFxuICB9KTtcblxuICBjb25zdCBvblRlc3QgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3Q29udGVudEluc2V0ID1cbiAgICAgIGV4YW1wbGVQcm9wcy5jb250ZW50SW5zZXQudG9wID09PSBpbml0aWFsQ29udGVudEluc2V0XG4gICAgICAgID8gdG9nZ2xlZENvbnRlbnRJbnNldFxuICAgICAgICA6IGluaXRpYWxDb250ZW50SW5zZXQ7XG4gICAgc2V0RXhhbXBsZVByb3BzKHtcbiAgICAgIGF1dG9tYXRpY2FsbHlBZGp1c3RDb250ZW50SW5zZXRzOiBmYWxzZSxcbiAgICAgIGNvbnRlbnRJbnNldDoge3RvcDogbmV3Q29udGVudEluc2V0fSxcbiAgICAgIGNvbnRlbnRPZmZzZXQ6IHt5OiAtbmV3Q29udGVudEluc2V0LCB4OiAwfSxcbiAgICB9KTtcbiAgICBzZXRPdXRwdXQoYGNvbnRlbnRJbnNldCB0b3A6ICR7bmV3Q29udGVudEluc2V0LnRvU3RyaW5nKCl9YCk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMudGl0bGVDb250YWluZXIsXG4gICAgICAgICAge2hlaWdodDogZXhhbXBsZVByb3BzLmNvbnRlbnRJbnNldC50b3B9LFxuICAgICAgICBdfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZVRleHR9Pk1lbnU8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8QmFzZUZsYXRMaXN0RXhhbXBsZVxuICAgICAgICBleGFtcGxlUHJvcHM9e2V4YW1wbGVQcm9wc31cbiAgICAgICAgdGVzdE91dHB1dD17b3V0cHV0fVxuICAgICAgICBvblRlc3Q9e29uVGVzdH1cbiAgICAgICAgdGVzdExhYmVsPXsnVG9nZ2xlIGhlYWRlciBzaXplJ31cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgdGl0bGVDb250YWluZXI6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDQ1LFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JheScsXG4gICAgekluZGV4OiAxLFxuICB9LFxuICB0aXRsZVRleHQ6IHtcbiAgICBmb250U2l6ZTogMjQsXG4gICAgbGluZUhlaWdodDogNDQsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnQ29udGVudCBJbnNldCcsXG4gIG5hbWU6ICdjb250ZW50SW5zZXQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIGFtb3VudCBieSB3aGljaCB0aGUgc2Nyb2xsIHZpZXcgY29udGVudCBpcyBpbnNldCBmcm9tIHRoZSBlZGdlcyBvZiB0aGUgc2Nyb2xsIHZpZXcuJyxcbiAgcmVuZGVyOiAoKSA9PiA8RmxhdExpc3RfY29udGVudEluc2V0IC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UmVuZGVySXRlbVByb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xpc3RzL1ZpcnR1YWxpemVkTGlzdCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgRmxhdExpc3QsXG4gIFByZXNzYWJsZSxcbiAgU3R5bGVTaGVldCxcbiAgVGV4dCxcbiAgVmlldyxcbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3QgREFUQSA9IFtcbiAgJ1BpenphJyxcbiAgJ0J1cmdlcicsXG4gICdSaXNvdHRvJyxcbiAgJ0ZyZW5jaCBGcmllcycsXG4gICdPbmlvbiBSaW5ncycsXG4gICdGcmllZCBTaHJpbXBzJyxcbiAgJ1dhdGVyJyxcbiAgJ0Nva2UnLFxuICAnQmVlcicsXG4gICdDaGVlc2VjYWtlJyxcbiAgJ0ljZSBDcmVhbScsXG5dO1xuXG5jb25zdCBJdGVtID0gKHtpdGVtLCBzZXBhcmF0b3JzfTogUmVuZGVySXRlbVByb3BzPHN0cmluZz4pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8UHJlc3NhYmxlXG4gICAgICBvblByZXNzSW49eygpID0+IHtcbiAgICAgICAgc2VwYXJhdG9ycy5oaWdobGlnaHQoKTtcbiAgICAgIH19XG4gICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgIHNlcGFyYXRvcnMudXBkYXRlUHJvcHMoJ3RyYWlsaW5nJywge2hhc0JlZW5IaWdobGlnaHRlZDogdHJ1ZX0pO1xuICAgICAgICBzZXBhcmF0b3JzLnVwZGF0ZVByb3BzKCdsZWFkaW5nJywge2hhc0JlZW5IaWdobGlnaHRlZDogdHJ1ZX0pO1xuICAgICAgfX1cbiAgICAgIG9uUHJlc3NPdXQ9eygpID0+IHtcbiAgICAgICAgc2VwYXJhdG9ycy51bmhpZ2hsaWdodCgpO1xuICAgICAgfX1cbiAgICAgIHN0eWxlPXsoe3ByZXNzZWR9KSA9PiBbXG4gICAgICAgIHN0eWxlcy5pdGVtLFxuICAgICAgICB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcmVzc2VkID8gJ3JlZCcgOiAncGluaycsXG4gICAgICAgIH0sXG4gICAgICBdfVxuICAgICAgdGVzdElEPXtpdGVtfT5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGV9PntpdGVtfTwvVGV4dD5cbiAgICA8L1ByZXNzYWJsZT5cbiAgKTtcbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGV4YW1wbGVQcm9wczogUGFydGlhbDxSZWFjdC5FbGVtZW50Q29uZmlnPHR5cGVvZiBGbGF0TGlzdD4+LFxuICBvblRlc3Q/OiA/KCkgPT4gdm9pZCxcbiAgdGVzdExhYmVsPzogP3N0cmluZyxcbiAgdGVzdE91dHB1dD86ID9zdHJpbmcsXG4gIGNoaWxkcmVuPzogP1JlYWN0Lk5vZGUsXG59O1xuXG5jb25zdCBCYXNlRmxhdExpc3RFeGFtcGxlID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgKFxuICAgIHByb3BzOiBQcm9wcyxcbiAgICByZWY6XG4gICAgICB8ICgobnVsbCB8IEZsYXRMaXN0PHN0cmluZz4pID0+IG1peGVkKVxuICAgICAgfCB7Y3VycmVudDogbnVsbCB8IEZsYXRMaXN0PHN0cmluZz4sIC4uLn0sXG4gICkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtwcm9wcy50ZXN0T3V0cHV0ICE9IG51bGwgPyAoXG4gICAgICAgICAgPFZpZXcgdGVzdElEPVwidGVzdF9jb250YWluZXJcIiBzdHlsZT17c3R5bGVzLnRlc3RDb250YWluZXJ9PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5vdXRwdXR9IG51bWJlck9mTGluZXM9ezF9IHRlc3RJRD1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICB7cHJvcHMudGVzdE91dHB1dH1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIHtwcm9wcy5vblRlc3QgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHRlc3RJRD1cInN0YXJ0X3Rlc3RcIlxuICAgICAgICAgICAgICAgIG9uUHJlc3M9e3Byb3BzLm9uVGVzdH1cbiAgICAgICAgICAgICAgICB0aXRsZT17cHJvcHMudGVzdExhYmVsID8/ICdUZXN0J31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPEZsYXRMaXN0XG4gICAgICAgICAgey4uLnByb3BzLmV4YW1wbGVQcm9wc31cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgIHRlc3RJRD1cImZsYXRfbGlzdFwiXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbiAgICAgICAgICBkYXRhPXtEQVRBfVxuICAgICAgICAgIGtleUV4dHJhY3Rvcj17KGl0ZW0sIGluZGV4KSA9PiBpdGVtICsgaW5kZXh9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5saXN0fVxuICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGUtYXJnXVxuICAgICAgICAgIHJlbmRlckl0ZW09e0l0ZW19XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfSxcbik7XG5cbmV4cG9ydCBkZWZhdWx0IChCYXNlRmxhdExpc3RFeGFtcGxlOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxcbiAgUHJvcHMsXG4gIEZsYXRMaXN0PHN0cmluZz4sXG4+KTtcblxuY29uc3QgSVRFTV9JTk5FUl9IRUlHSFQgPSA3MDtcbmNvbnN0IElURU1fTUFSR0lOID0gODtcbmV4cG9ydCBjb25zdCBJVEVNX0hFSUdIVDogbnVtYmVyID0gSVRFTV9JTk5FUl9IRUlHSFQgKyBJVEVNX01BUkdJTiAqIDI7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgaXRlbToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3BpbmsnLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAyMCxcbiAgICBoZWlnaHQ6IElURU1fSU5ORVJfSEVJR0hULFxuICAgIG1hcmdpblZlcnRpY2FsOiBJVEVNX01BUkdJTixcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIGhlYWRlcjoge1xuICAgIGZvbnRTaXplOiAzMixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgZm9udFNpemU6IDI0LFxuICB9LFxuICB0aXRsZUNvbnRhaW5lcjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogNDUsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmF5JyxcbiAgICB6SW5kZXg6IDEsXG4gIH0sXG4gIHRpdGxlVGV4dDoge1xuICAgIGZvbnRTaXplOiAyNCxcbiAgICBsaW5lSGVpZ2h0OiA0NCxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIHRlc3RDb250YWluZXI6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmMmYyZjdmZicsXG4gICAgaGVpZ2h0OiA0MCxcbiAgfSxcbiAgb3V0cHV0OiB7XG4gICAgZm9udFNpemU6IDEyLFxuICB9LFxuICBzZXBhcmF0b3I6IHtcbiAgICBoZWlnaHQ6IDEyLFxuICB9LFxuICBzZXBhcmF0b3JUZXh0OiB7XG4gICAgZm9udFNpemU6IDEwLFxuICB9LFxuICBsaXN0OiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgY29udGFpbmVyOiB7ZmxleDogMX0sXG4gIG9mZlNjcmVlbjoge1xuICAgIGhlaWdodDogMTAwMCxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgQmFzZUZsYXRMaXN0RXhhbXBsZSBmcm9tICcuL0Jhc2VGbGF0TGlzdEV4YW1wbGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gRmxhdExpc3RfaW52ZXJ0ZWQoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSBSZWFjdC51c2VTdGF0ZSgnaW52ZXJ0ZWQgZmFsc2UnKTtcbiAgY29uc3QgW2V4YW1wbGVQcm9wcywgc2V0RXhhbXBsZVByb3BzXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBpbnZlcnRlZDogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IG9uVGVzdCA9ICgpID0+IHtcbiAgICBzZXRFeGFtcGxlUHJvcHMoe1xuICAgICAgaW52ZXJ0ZWQ6ICFleGFtcGxlUHJvcHMuaW52ZXJ0ZWQsXG4gICAgfSk7XG4gICAgc2V0T3V0cHV0KGBJcyBpbnZlcnRlZDogJHsoIWV4YW1wbGVQcm9wcy5pbnZlcnRlZCkudG9TdHJpbmcoKX1gKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxCYXNlRmxhdExpc3RFeGFtcGxlXG4gICAgICBleGFtcGxlUHJvcHM9e2V4YW1wbGVQcm9wc31cbiAgICAgIHRlc3RPdXRwdXQ9e291dHB1dH1cbiAgICAgIG9uVGVzdD17b25UZXN0fVxuICAgICAgdGVzdExhYmVsPXtleGFtcGxlUHJvcHMuaW52ZXJ0ZWQgPyAnVG9nZ2xlIGZhbHNlJyA6ICdUb2dnbGUgdHJ1ZSd9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgdGl0bGU6ICdJbnZlcnRlZCcsXG4gIG5hbWU6ICdpbnZlcnRlZCcsXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCBpbnZlcnRlZCBwcm9wIG9uIEZsYXRMaXN0JyxcbiAgcmVuZGVyOiAoKSA9PiA8RmxhdExpc3RfaW52ZXJ0ZWQgLz4sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7SXRlbX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9MaXN0RXhhbXBsZVNoYXJlZCc7XG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcbmltcG9ydCB0eXBlIHtSZW5kZXJJdGVtUHJvcHN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGlzdHMvVmlydHVhbGl6ZWRMaXN0JztcblxuY29uc3Qge1xuICBGb290ZXJDb21wb25lbnQsXG4gIEhlYWRlckNvbXBvbmVudCxcbiAgSXRlbUNvbXBvbmVudCxcbiAgUGxhaW5JbnB1dCxcbiAgU2VwYXJhdG9yQ29tcG9uZW50LFxuICBnZW5OZXdlckl0ZW1zLFxuICBnZXRJdGVtTGF5b3V0LFxuICBwcmVzc0l0ZW0sXG4gIHJlbmRlclNtYWxsU3dpdGNoT3B0aW9uLFxufSA9IHJlcXVpcmUoJy4uLy4uL2NvbXBvbmVudHMvTGlzdEV4YW1wbGVTaGFyZWQnKTtcbmNvbnN0IFJOVGVzdGVyUGFnZSA9IHJlcXVpcmUoJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJQYWdlJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7QWxlcnQsIEZsYXRMaXN0LCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuY29uc3QgaW5mb0xvZyA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL2luZm9Mb2cnKTtcblxuY2xhc3MgTXVsdGlDb2x1bW5FeGFtcGxlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxcbiAgJEZsb3dGaXhNZVByb3BzLFxuICAkRmxvd0ZpeE1lU3RhdGUsXG4+IHtcbiAgc3RhdGU6XG4gICAgfCBhbnlcbiAgICB8IHt8XG4gICAgICAgIGRhdGE6IEFycmF5PEl0ZW0+LFxuICAgICAgICBmaWx0ZXJUZXh0OiBzdHJpbmcsXG4gICAgICAgIGZpeGVkSGVpZ2h0OiBib29sZWFuLFxuICAgICAgICBsb2dWaWV3YWJsZTogYm9vbGVhbixcbiAgICAgICAgbnVtQ29sdW1uczogbnVtYmVyLFxuICAgICAgICB2aXJ0dWFsaXplZDogYm9vbGVhbixcbiAgICAgIHx9ID0ge1xuICAgIGRhdGE6IGdlbk5ld2VySXRlbXMoMTAwMCksXG4gICAgZmlsdGVyVGV4dDogJycsXG4gICAgZml4ZWRIZWlnaHQ6IHRydWUsXG4gICAgbG9nVmlld2FibGU6IGZhbHNlLFxuICAgIG51bUNvbHVtbnM6IDIsXG4gICAgdmlydHVhbGl6ZWQ6IHRydWUsXG4gIH07XG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAgICogTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgX29uQ2hhbmdlRmlsdGVyVGV4dCA9IGZpbHRlclRleHQgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtmaWx0ZXJUZXh0fSkpO1xuICB9O1xuICBfb25DaGFuZ2VOdW1Db2x1bW5zID0gKG51bUNvbHVtbnM6IG1peGVkKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe251bUNvbHVtbnM6IE51bWJlcihudW1Db2x1bW5zKX0pKTtcbiAgfTtcblxuICBfc2V0Qm9vbGVhblZhbHVlOiBzdHJpbmcgPT4gYm9vbGVhbiA9PiB2b2lkID0ga2V5ID0+IHZhbHVlID0+XG4gICAgdGhpcy5zZXRTdGF0ZSh7W2tleV06IHZhbHVlfSk7XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGZpbHRlclJlZ2V4ID0gbmV3IFJlZ0V4cChTdHJpbmcodGhpcy5zdGF0ZS5maWx0ZXJUZXh0KSwgJ2knKTtcbiAgICBjb25zdCBmaWx0ZXIgPSAoaXRlbTogYW55IHwgSXRlbSkgPT5cbiAgICAgIGZpbHRlclJlZ2V4LnRlc3QoaXRlbS50ZXh0KSB8fCBmaWx0ZXJSZWdleC50ZXN0KGl0ZW0udGl0bGUpO1xuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuc3RhdGUuZGF0YS5maWx0ZXIoZmlsdGVyKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFJOVGVzdGVyUGFnZVxuICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy5uYXZpZ2F0b3IgPyBudWxsIDogJzxGbGF0TGlzdD4gLSBNdWx0aUNvbHVtbid9XG4gICAgICAgIG5vU2Nyb2xsPXt0cnVlfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zZWFyY2hSb3d9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgICAgIDxQbGFpbklucHV0XG4gICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy5fb25DaGFuZ2VGaWx0ZXJUZXh0fVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZpbHRlclRleHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFRleHQ+IG51bUNvbHVtbnM6IDwvVGV4dD5cbiAgICAgICAgICAgIDxQbGFpbklucHV0XG4gICAgICAgICAgICAgIGNsZWFyQnV0dG9uTW9kZT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLl9vbkNoYW5nZU51bUNvbHVtbnN9XG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLm51bUNvbHVtbnMgPyBTdHJpbmcodGhpcy5zdGF0ZS5udW1Db2x1bW5zKSA6ICcnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKFxuICAgICAgICAgICAgICAnVmlydHVhbGl6ZWQnLFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnZpcnR1YWxpemVkLFxuICAgICAgICAgICAgICB0aGlzLl9zZXRCb29sZWFuVmFsdWUoJ3ZpcnR1YWxpemVkJyksXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKFxuICAgICAgICAgICAgICAnRml4ZWQgSGVpZ2h0JyxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5maXhlZEhlaWdodCxcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Qm9vbGVhblZhbHVlKCdmaXhlZEhlaWdodCcpLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtyZW5kZXJTbWFsbFN3aXRjaE9wdGlvbihcbiAgICAgICAgICAgICAgJ0xvZyBWaWV3YWJsZScsXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUubG9nVmlld2FibGUsXG4gICAgICAgICAgICAgIHRoaXMuX3NldEJvb2xlYW5WYWx1ZSgnbG9nVmlld2FibGUnKSxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxTZXBhcmF0b3JDb21wb25lbnQgLz5cbiAgICAgICAgPEZsYXRMaXN0XG4gICAgICAgICAgTGlzdEZvb3RlckNvbXBvbmVudD17Rm9vdGVyQ29tcG9uZW50fVxuICAgICAgICAgIExpc3RIZWFkZXJDb21wb25lbnQ9e0hlYWRlckNvbXBvbmVudH1cbiAgICAgICAgICBnZXRJdGVtTGF5b3V0PXtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZml4ZWRIZWlnaHQgPyB0aGlzLl9nZXRJdGVtTGF5b3V0IDogdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGE9e2ZpbHRlcmVkRGF0YX1cbiAgICAgICAgICBrZXk9e3RoaXMuc3RhdGUubnVtQ29sdW1ucyArICh0aGlzLnN0YXRlLmZpeGVkSGVpZ2h0ID8gJ2YnIDogJ3YnKX1cbiAgICAgICAgICBudW1Db2x1bW5zPXt0aGlzLnN0YXRlLm51bUNvbHVtbnMgfHwgMX1cbiAgICAgICAgICBvblJlZnJlc2g9eygpID0+XG4gICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAnb25SZWZyZXNoOiBub3RoaW5nIHRvIHJlZnJlc2ggOlAnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWZyZXNoaW5nPXtmYWxzZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLl9yZW5kZXJJdGVtQ29tcG9uZW50fVxuICAgICAgICAgIGRpc2FibGVWaXJ0dWFsaXphdGlvbj17IXRoaXMuc3RhdGUudmlydHVhbGl6ZWR9XG4gICAgICAgICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZD17dGhpcy5fb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZH1cbiAgICAgICAgLz5cbiAgICAgIDwvUk5UZXN0ZXJQYWdlPlxuICAgICk7XG4gIH1cbiAgX2dldEl0ZW1MYXlvdXQoXG4gICAgZGF0YTogYW55LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICk6IHtcbiAgICBsZW5ndGg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIC4uLlxuICB9IHtcbiAgICBjb25zdCBsZW5ndGggPVxuICAgICAgZ2V0SXRlbUxheW91dChkYXRhLCBpbmRleCkubGVuZ3RoICsgMiAqIChDQVJEX01BUkdJTiArIEJPUkRFUl9XSURUSCk7XG4gICAgcmV0dXJuIHtsZW5ndGgsIG9mZnNldDogbGVuZ3RoICogaW5kZXgsIGluZGV4fTtcbiAgfVxuICBfcmVuZGVySXRlbUNvbXBvbmVudCA9ICh7aXRlbX06IFJlbmRlckl0ZW1Qcm9wczxhbnkgfCBJdGVtPik6ICRGbG93Rml4TWUgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNhcmR9PlxuICAgICAgICA8SXRlbUNvbXBvbmVudFxuICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgZml4ZWRIZWlnaHQ9e3RoaXMuc3RhdGUuZml4ZWRIZWlnaHR9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fcHJlc3NJdGVtfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH07XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gaXRlbXMgY2hhbmdlIHZpZXdhYmlsaXR5IGJ5IHNjcm9sbGluZyBpbnRvIG9yIG91dCBvZiB0aGUgdmlld2FibGUgYXJlYS5cbiAgX29uVmlld2FibGVJdGVtc0NoYW5nZWQgPSAoaW5mbzoge1xuICAgIGNoYW5nZWQ6IEFycmF5PHtcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgaXNWaWV3YWJsZTogYm9vbGVhbixcbiAgICAgIGl0ZW06IHtjb2x1bW5zOiBBcnJheTxhbnk+LCAuLi59LFxuICAgICAgaW5kZXg6ID9udW1iZXIsXG4gICAgICBzZWN0aW9uPzogYW55LFxuICAgICAgLi4uXG4gICAgfT4sXG4gICAgLi4uXG4gIH0pID0+IHtcbiAgICAvLyBJbXByZXNzaW9ucyBjYW4gYmUgbG9nZ2VkIGhlcmVcbiAgICBpZiAodGhpcy5zdGF0ZS5sb2dWaWV3YWJsZSkge1xuICAgICAgaW5mb0xvZyhcbiAgICAgICAgJ29uVmlld2FibGVJdGVtc0NoYW5nZWQ6ICcsXG4gICAgICAgIGluZm8uY2hhbmdlZC5tYXAodiA9PiAoey4uLnYsIGl0ZW06ICcuLi4nfSkpLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgX3ByZXNzSXRlbSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKGtleSk7XG4gICAgY29uc3QgaXRlbVN0YXRlID0gcHJlc3NJdGVtKHRoaXMuc3RhdGUuZGF0YVtpbmRleF0pO1xuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YTogW1xuICAgICAgICAuLi5zdGF0ZS5kYXRhLnNsaWNlKDAsIGluZGV4KSxcbiAgICAgICAgaXRlbVN0YXRlLFxuICAgICAgICAuLi5zdGF0ZS5kYXRhLnNsaWNlKGluZGV4ICsgMSksXG4gICAgICBdLFxuICAgIH0pKTtcbiAgfTtcbn1cblxuY29uc3QgQ0FSRF9NQVJHSU4gPSA0O1xuY29uc3QgQk9SREVSX1dJRFRIID0gMTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjYXJkOiB7XG4gICAgbWFyZ2luOiBDQVJEX01BUkdJTixcbiAgICBib3JkZXJSYWRpdXM6IDEwLFxuICAgIGZsZXg6IDEsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJvcmRlckNvbG9yOiAnbGlnaHRncmF5JyxcbiAgICBib3JkZXJXaWR0aDogQk9SREVSX1dJRFRILFxuICB9LFxuICByb3c6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgc2VhcmNoUm93OiB7XG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgdGl0bGU6ICdNdWx0aUNvbHVtbicsXG4gIG5hbWU6ICdtdWx0aWNvbHVtbicsXG4gIGRlc2NyaXB0aW9uOiAnUGVyZm9ybWFudCwgc2Nyb2xsYWJsZSBncmlkIG9mIGRhdGEnLFxuICByZW5kZXI6ICgpID0+IDxNdWx0aUNvbHVtbkV4YW1wbGUgLz4sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZpZXdUb2tlbn0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9MaXN0cy9WaWV3YWJpbGl0eUhlbHBlcic7XG5pbXBvcnQgdHlwZSB7UmVuZGVySXRlbVByb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xpc3RzL1ZpcnR1YWxpemVkTGlzdCc7XG5cbmltcG9ydCBSTlRlc3RlclBhZ2UgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlclBhZ2UnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWR1Y2VyfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ZsYXRMaXN0LCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG50eXBlIE91dGVySXRlbSA9ICdoZWFkJyB8ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCAnZmlsbGVyJztcblxuY29uc3Qgb3V0ZXJJdGVtczogT3V0ZXJJdGVtW10gPSBbXG4gICdoZWFkJyxcbiAgJ3ZlcnRpY2FsJyxcbiAgJ2ZpbGxlcicsXG4gICdob3Jpem9udGFsJyxcbiAgJ2ZpbGxlcicsXG4gICd2ZXJ0aWNhbCcsXG5dO1xuXG5jb25zdCBpdGVtcyA9IFsxLCAyLCAzLCA0LCA1XTtcblxudHlwZSBJdGVtc1N0YXRlID0ge1xuICByZW5kZXJlZEl0ZW1zOiBudW1iZXJbXSxcbiAgdmlld2FibGVJdGVtczogbnVtYmVyW10sXG59O1xuXG5jb25zdCBpbml0aWFsSXRlbXNTdGF0ZTogSXRlbXNTdGF0ZSA9IHtcbiAgcmVuZGVyZWRJdGVtczogW10sXG4gIHZpZXdhYmxlSXRlbXM6IFtdLFxufTtcblxudHlwZSBJdGVtc0FjdGlvbiA9IHtcbiAgdHlwZTogJ2FkZC1yZW5kZXJlZCcgfCAnYWRkLXZpZXdhYmxlJyB8ICdyZW1vdmUtcmVuZGVyZWQnIHwgJ3JlbW92ZS12aWV3YWJsZScsXG4gIGl0ZW06IG51bWJlcixcbn07XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGU6IEl0ZW1zU3RhdGUsIGFjdGlvbjogSXRlbXNBY3Rpb24pOiBJdGVtc1N0YXRlIHtcbiAgaWYgKGFjdGlvbi50eXBlID09PSAnYWRkLXJlbmRlcmVkJykge1xuICAgIGlmIChzdGF0ZS5yZW5kZXJlZEl0ZW1zLmluY2x1ZGVzKGFjdGlvbi5pdGVtKSkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gey4uLnN0YXRlLCByZW5kZXJlZEl0ZW1zOiBbLi4uc3RhdGUucmVuZGVyZWRJdGVtcywgYWN0aW9uLml0ZW1dfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdhZGQtdmlld2FibGUnKSB7XG4gICAgaWYgKHN0YXRlLnZpZXdhYmxlSXRlbXMuaW5jbHVkZXMoYWN0aW9uLml0ZW0pKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7Li4uc3RhdGUsIHZpZXdhYmxlSXRlbXM6IFsuLi5zdGF0ZS52aWV3YWJsZUl0ZW1zLCBhY3Rpb24uaXRlbV19O1xuICAgIH1cbiAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ3JlbW92ZS1yZW5kZXJlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICByZW5kZXJlZEl0ZW1zOiBzdGF0ZS5yZW5kZXJlZEl0ZW1zLmZpbHRlcihpID0+IGkgIT09IGFjdGlvbi5pdGVtKSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAncmVtb3ZlLXZpZXdhYmxlJykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHZpZXdhYmxlSXRlbXM6IHN0YXRlLnZpZXdhYmxlSXRlbXMuZmlsdGVyKGkgPT4gaSAhPT0gYWN0aW9uLml0ZW0pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIE5lc3RlZExpc3RFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbb3V0ZXIsIGRpc3BhdGNoT3V0ZXJdID0gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsSXRlbXNTdGF0ZSk7XG4gIGNvbnN0IFtpbm5lciwgZGlzcGF0Y2hJbm5lcl0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxJdGVtc1N0YXRlKTtcblxuICBjb25zdCBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIGNoYW5nZWQsXG4gICAgfToge1xuICAgICAgY2hhbmdlZDogQXJyYXk8Vmlld1Rva2VuPixcbiAgICAgIHZpZXdhYmxlSXRlbXM6IEFycmF5PFZpZXdUb2tlbj4sXG4gICAgICAuLi5cbiAgICB9KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGNoYW5nZWQpIHtcbiAgICAgICAgZGlzcGF0Y2hPdXRlcih7XG4gICAgICAgICAgdHlwZTogdG9rZW4uaXNWaWV3YWJsZSA/ICdhZGQtdmlld2FibGUnIDogJ3JlbW92ZS12aWV3YWJsZScsXG4gICAgICAgICAgaXRlbTogdG9rZW4uaW5kZXggPz8gLTEsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoT3V0ZXJdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFJOVGVzdGVyUGFnZSBub1Njcm9sbD17dHJ1ZX0+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmRlYnVnVGV4dH0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuZGVidWdUZXh0SGVhZGVyfT5PdXRlciBWaWV3YWJsZTp7J1xcbid9PC9UZXh0PlxuICAgICAgICB7b3V0ZXJJdGVtc1xuICAgICAgICAgIC5tYXAoKGl0ZW0sIGkpID0+ICh7aXRlbSwgaX0pKVxuICAgICAgICAgIC5maWx0ZXIobyA9PiBvdXRlci52aWV3YWJsZUl0ZW1zLmluY2x1ZGVzKG8uaSkpXG4gICAgICAgICAgLm1hcCgoe2l0ZW0sIGl9KSA9PiBgJHtpfSAoJHtpdGVtfSlgKVxuICAgICAgICAgIC5qb2luKCcsICcpfVxuICAgICAgPC9UZXh0PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5kZWJ1Z1RleHR9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmRlYnVnVGV4dEhlYWRlcn0+T3V0ZXIgUmVuZGVyZWQ6eydcXG4nfTwvVGV4dD5cbiAgICAgICAge291dGVySXRlbXNcbiAgICAgICAgICAubWFwKChpdGVtLCBpKSA9PiAoe2l0ZW0sIGl9KSlcbiAgICAgICAgICAuZmlsdGVyKG8gPT4gb3V0ZXIucmVuZGVyZWRJdGVtcy5pbmNsdWRlcyhvLmkpKVxuICAgICAgICAgIC5tYXAoKHtpdGVtLCBpfSkgPT4gYCR7aX0gKCR7aXRlbX0pYClcbiAgICAgICAgICAuam9pbignLCAnKX1cbiAgICAgIDwvVGV4dD5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuZGVidWdUZXh0fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5kZWJ1Z1RleHRIZWFkZXJ9PklubmVyIFZpZXdhYmxlOnsnXFxuJ308L1RleHQ+XG4gICAgICAgIHtpbm5lci52aWV3YWJsZUl0ZW1zLnNvcnQoKGEsIGIpID0+IGEgLSBiKS5qb2luKCcsICcpfVxuICAgICAgPC9UZXh0PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5kZWJ1Z1RleHR9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmRlYnVnVGV4dEhlYWRlcn0+SW5uZXIgUmVuZGVyZWQ6eydcXG4nfTwvVGV4dD5cbiAgICAgICAge2lubmVyLnJlbmRlcmVkSXRlbXMuc29ydCgoYSwgYikgPT4gYSAtIGIpLmpvaW4oJywgJyl9XG4gICAgICA8L1RleHQ+XG5cbiAgICAgIDxGbGF0TGlzdFxuICAgICAgICBkYXRhPXtvdXRlckl0ZW1zfVxuICAgICAgICByZW5kZXJJdGVtPXsoe2luZGV4LCBpdGVtfSkgPT4gKFxuICAgICAgICAgIDxPdXRlckl0ZW1SZW5kZXJlclxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIGRpc3BhdGNoT3V0ZXI9e2Rpc3BhdGNoT3V0ZXJ9XG4gICAgICAgICAgICBkaXNwYXRjaElubmVyPXtkaXNwYXRjaElubmVyfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMubGlzdH1cbiAgICAgICAgd2luZG93U2l6ZT17M31cbiAgICAgICAgaW5pdGlhbE51bVRvUmVuZGVyPXsxfVxuICAgICAgICBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkPXtvblZpZXdhYmxlSXRlbXNDaGFuZ2VkfVxuICAgICAgLz5cbiAgICA8L1JOVGVzdGVyUGFnZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gT3V0ZXJJdGVtUmVuZGVyZXIoe1xuICBpbmRleCxcbiAgaXRlbSxcbiAgZGlzcGF0Y2hPdXRlcixcbiAgZGlzcGF0Y2hJbm5lcixcbn06IHtcbiAgaW5kZXg6IG51bWJlcixcbiAgaXRlbTogT3V0ZXJJdGVtLFxuICBkaXNwYXRjaE91dGVyOiBJdGVtc0FjdGlvbiA9PiB2b2lkLFxuICBkaXNwYXRjaElubmVyOiBJdGVtc0FjdGlvbiA9PiB2b2lkLFxuICAuLi5cbn0pIHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaE91dGVyKHtcbiAgICAgIHR5cGU6ICdhZGQtcmVuZGVyZWQnLFxuICAgICAgaXRlbTogaW5kZXgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hPdXRlcih7XG4gICAgICAgIHR5cGU6ICdyZW1vdmUtcmVuZGVyZWQnLFxuICAgICAgICBpdGVtOiBpbmRleCxcbiAgICAgIH0pO1xuICAgIH07XG4gIH0sIFtkaXNwYXRjaE91dGVyLCBpbmRleF0pO1xuXG4gIGNvbnN0IG9uVmlld2FibGVJdGVtc0NoYW5nZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgY2hhbmdlZCxcbiAgICB9OiB7XG4gICAgICBjaGFuZ2VkOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgICAgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPixcbiAgICAgIC4uLlxuICAgIH0pID0+IHtcbiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgY2hhbmdlZCkge1xuICAgICAgICBkaXNwYXRjaElubmVyKHtcbiAgICAgICAgICB0eXBlOiB0b2tlbi5pc1ZpZXdhYmxlID8gJ2FkZC12aWV3YWJsZScgOiAncmVtb3ZlLXZpZXdhYmxlJyxcbiAgICAgICAgICBpdGVtOiB0b2tlbi5pdGVtLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNwYXRjaElubmVyXSxcbiAgKTtcblxuICBzd2l0Y2ggKGl0ZW0pIHtcbiAgICBjYXNlICdoZWFkJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICA8VGV4dD5IZWFkZXI8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG5cbiAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29sfT5cbiAgICAgICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgICAgICBkYXRhPXtpdGVtcy5tYXAoaSA9PiBpbmRleCAqIGl0ZW1zLmxlbmd0aCAqIDMgKyBpKX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHA6IFJlbmRlckl0ZW1Qcm9wczxudW1iZXI+KSA9PiAoXG4gICAgICAgICAgICAgICAgPElubmVySXRlbVJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICBpdGVtPXtwLml0ZW19XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaElubmVyPXtkaXNwYXRjaElubmVyfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuY2hpbGRMaXN0fVxuICAgICAgICAgICAgICBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkPXtvblZpZXdhYmxlSXRlbXNDaGFuZ2VkfVxuICAgICAgICAgICAgICB3aW5kb3dTaXplPXsxfVxuICAgICAgICAgICAgICBpbml0aWFsTnVtVG9SZW5kZXI9ezF9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbH0+XG4gICAgICAgICAgICA8RmxhdExpc3RcbiAgICAgICAgICAgICAgZGF0YT17aXRlbXMubWFwKGkgPT4gaW5kZXggKiBpdGVtcy5sZW5ndGggKiAzICsgaSArIGl0ZW1zLmxlbmd0aCl9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhwOiBSZW5kZXJJdGVtUHJvcHM8bnVtYmVyPikgPT4gKFxuICAgICAgICAgICAgICAgIDxJbm5lckl0ZW1SZW5kZXJlclxuICAgICAgICAgICAgICAgICAgaXRlbT17cC5pdGVtfVxuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hJbm5lcj17ZGlzcGF0Y2hJbm5lcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmNoaWxkTGlzdH1cbiAgICAgICAgICAgICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZD17b25WaWV3YWJsZUl0ZW1zQ2hhbmdlZH1cbiAgICAgICAgICAgICAgd2luZG93U2l6ZT17MX1cbiAgICAgICAgICAgICAgaW5pdGlhbE51bVRvUmVuZGVyPXsxfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG5cbiAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgICA8RmxhdExpc3RcbiAgICAgICAgICAgIGhvcml6b250YWw9e3RydWV9XG4gICAgICAgICAgICBkYXRhPXtpdGVtcy5tYXAoXG4gICAgICAgICAgICAgIGkgPT4gaW5kZXggKiBpdGVtcy5sZW5ndGggKiAzICsgaSArIDIgKiBpdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHA6IFJlbmRlckl0ZW1Qcm9wczxudW1iZXI+KSA9PiAoXG4gICAgICAgICAgICAgIDxJbm5lckl0ZW1SZW5kZXJlciBpdGVtPXtwLml0ZW19IGRpc3BhdGNoSW5uZXI9e2Rpc3BhdGNoSW5uZXJ9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5jaGlsZExpc3R9XG4gICAgICAgICAgICBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkPXtvblZpZXdhYmxlSXRlbXNDaGFuZ2VkfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG5cbiAgICBjYXNlICdmaWxsZXInOlxuICAgICAgcmV0dXJuIDxWaWV3IHN0eWxlPXtzdHlsZXMuZmlsbGVyfSAvPjtcbiAgfVxufVxuXG5mdW5jdGlvbiBJbm5lckl0ZW1SZW5kZXJlcih7XG4gIGl0ZW0sXG4gIGRpc3BhdGNoSW5uZXIsXG59OiB7XG4gIGl0ZW06IG51bWJlcixcbiAgZGlzcGF0Y2hJbm5lcjogSXRlbXNBY3Rpb24gPT4gdm9pZCxcbiAgLi4uXG59KSB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2hJbm5lcih7XG4gICAgICB0eXBlOiAnYWRkLXJlbmRlcmVkJyxcbiAgICAgIGl0ZW06IGl0ZW0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hJbm5lcih7XG4gICAgICAgIHR5cGU6ICdyZW1vdmUtcmVuZGVyZWQnLFxuICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgfSk7XG4gICAgfTtcbiAgfSwgW2Rpc3BhdGNoSW5uZXIsIGl0ZW1dKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY2VsbH0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLml0ZW19PlxuICAgICAgICA8VGV4dD57aXRlbX08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGRlYnVnVGV4dDoge1xuICAgIGZvbnRTaXplOiAxMCxcbiAgfSxcbiAgZGVidWdUZXh0SGVhZGVyOiB7XG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICB9LFxuICBsaXN0OiB7XG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gIH0sXG4gIGJvZHk6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gIH0sXG4gIGNvbDoge1xuICAgIGZsZXg6IDEsXG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG4gIHJvdzoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGZpbGxlcjoge1xuICAgIGhlaWdodDogNzIsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnbGlnaHRibHVlJyxcbiAgfSxcbiAgY2hpbGRMaXN0OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnbGlnaHRncmVlbicsXG4gIH0sXG4gIGhlYWRlcjoge1xuICAgIGhlaWdodDogNDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnbGlnaHRjb3JhbCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICBjZWxsOiB7XG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG4gIGl0ZW06IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnb2xkbGFjZScsXG4gICAgaGVpZ2h0OiA3MixcbiAgICBtaW5XaWR0aDogMTQ0LFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnTmVzdGVkJyxcbiAgZGVzY3JpcHRpb246ICdOZXN0ZWQgRmxhdExpc3RzIG9mIHNhbWUgYW5kIG9wcG9zaXRlIG9yaWVudGF0aW9uJyxcbiAgbmFtZTogJ25lc3RlZCcsXG4gIHJlbmRlcjogTmVzdGVkTGlzdEV4YW1wbGUsXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBCYXNlRmxhdExpc3RFeGFtcGxlIGZyb20gJy4vQmFzZUZsYXRMaXN0RXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBGbGF0TGlzdF9vbkVuZFJlYWNoZWQoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGV4YW1wbGVQcm9wcyA9IHtcbiAgICBvbkVuZFJlYWNoZWQ6IChpbmZvOiB7ZGlzdGFuY2VGcm9tRW5kOiBudW1iZXIsIC4uLn0pID0+XG4gICAgICBzZXRPdXRwdXQoJ29uRW5kUmVhY2hlZCcpLFxuICAgIG9uRW5kUmVhY2hlZFRocmVzaG9sZDogMCxcbiAgfTtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPGFueT4obnVsbCk7XG5cbiAgY29uc3Qgb25UZXN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcm9sbFJlc3BvbmRlciA9IHJlZj8uY3VycmVudD8uZ2V0U2Nyb2xsUmVzcG9uZGVyKCk7XG4gICAgaWYgKHNjcm9sbFJlc3BvbmRlciAhPSBudWxsKSB7XG4gICAgICBzY3JvbGxSZXNwb25kZXIuc2Nyb2xsVG9FbmQoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8QmFzZUZsYXRMaXN0RXhhbXBsZVxuICAgICAgcmVmPXtyZWZ9XG4gICAgICBleGFtcGxlUHJvcHM9e2V4YW1wbGVQcm9wc31cbiAgICAgIHRlc3RPdXRwdXQ9e291dHB1dH1cbiAgICAgIG9uVGVzdD17b25UZXN0fVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnb25FbmRSZWFjaGVkJyxcbiAgbmFtZTogJ29uRW5kUmVhY2hlZCcsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdTY3JvbGwgdG8gZW5kIG9mIGxpc3Qgb3IgdGFwIFRlc3QgYnV0dG9uIHRvIHNlZSBgb25FbmRSZWFjaGVkYCB0cmlnZ2VyZWQuJyxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIDxGbGF0TGlzdF9vbkVuZFJlYWNoZWQgLz47XG4gIH0sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBCYXNlRmxhdExpc3RFeGFtcGxlLCB7SVRFTV9IRUlHSFR9IGZyb20gJy4vQmFzZUZsYXRMaXN0RXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ZsYXRMaXN0fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gRmxhdExpc3Rfb25TdGFydFJlYWNoZWQoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGV4YW1wbGVQcm9wcyA9IHtcbiAgICBvblN0YXJ0UmVhY2hlZDogKGluZm86IHtkaXN0YW5jZUZyb21TdGFydDogbnVtYmVyLCAuLi59KSA9PlxuICAgICAgc2V0T3V0cHV0KCdvblN0YXJ0UmVhY2hlZCcpLFxuICAgIG9uU3RhcnRSZWFjaGVkVGhyZXNob2xkOiAwLFxuICAgIGluaXRpYWxTY3JvbGxJbmRleDogNSxcbiAgICBnZXRJdGVtTGF5b3V0OiAoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgbGVuZ3RoOiBJVEVNX0hFSUdIVCxcbiAgICAgIG9mZnNldDogSVRFTV9IRUlHSFQgKiBpbmRleCxcbiAgICAgIGluZGV4LFxuICAgIH0pLFxuICB9O1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8P0ZsYXRMaXN0PHN0cmluZz4+KG51bGwpO1xuXG4gIGNvbnN0IG9uVGVzdCA9ICgpID0+IHtcbiAgICByZWYuY3VycmVudD8uc2Nyb2xsVG9PZmZzZXQoe29mZnNldDogMH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEJhc2VGbGF0TGlzdEV4YW1wbGVcbiAgICAgIHJlZj17cmVmfVxuICAgICAgZXhhbXBsZVByb3BzPXtleGFtcGxlUHJvcHN9XG4gICAgICB0ZXN0T3V0cHV0PXtvdXRwdXR9XG4gICAgICBvblRlc3Q9e29uVGVzdH1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoe1xuICB0aXRsZTogJ29uU3RhcnRSZWFjaGVkJyxcbiAgbmFtZTogJ29uU3RhcnRSZWFjaGVkJyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1Njcm9sbCB0byBzdGFydCBvZiBsaXN0IG9yIHRhcCBUZXN0IGJ1dHRvbiB0byBzZWUgYG9uU3RhcnRSZWFjaGVkYCB0cmlnZ2VyZWQuJyxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIDxGbGF0TGlzdF9vblN0YXJ0UmVhY2hlZCAvPjtcbiAgfSxcbn06IFJOVGVzdGVyTW9kdWxlRXhhbXBsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZpZXdUb2tlbn0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9MaXN0cy9WaWV3YWJpbGl0eUhlbHBlcic7XG5cbmltcG9ydCBCYXNlRmxhdExpc3RFeGFtcGxlIGZyb20gJy4vQmFzZUZsYXRMaXN0RXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ZsYXRMaXN0LCBTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG50eXBlIEZsYXRMaXN0UHJvcHMgPSBSZWFjdC5FbGVtZW50UHJvcHM8dHlwZW9mIEZsYXRMaXN0PjtcbnR5cGUgVmlld2FiaWxpdHlDb25maWcgPSAkUHJvcGVydHlUeXBlPEZsYXRMaXN0UHJvcHMsICd2aWV3YWJpbGl0eUNvbmZpZyc+O1xuXG5jb25zdCBWSUVXQUJJTElUWV9DT05GSUcgPSB7XG4gIG1pbmltdW1WaWV3VGltZTogMTAwMCxcbiAgdmlld0FyZWFDb3ZlcmFnZVBlcmNlbnRUaHJlc2hvbGQ6IDEwMCxcbiAgd2FpdEZvckludGVyYWN0aW9uOiB0cnVlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZsYXRMaXN0X29uVmlld2FibGVJdGVtc0NoYW5nZWQocHJvcHM6IHtcbiAgdmlld2FiaWxpdHlDb25maWc6IFZpZXdhYmlsaXR5Q29uZmlnLFxuICBvZmZTY3JlZW4/OiA/Ym9vbGVhbixcbiAgaG9yaXpvbnRhbD86ID9ib29sZWFuLFxuICB1c2VTY3JvbGxSZWZTY3JvbGw/OiA/Ym9vbGVhbixcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3Qge3ZpZXdhYmlsaXR5Q29uZmlnLCBvZmZTY3JlZW4sIGhvcml6b250YWwsIHVzZVNjcm9sbFJlZlNjcm9sbH0gPSBwcm9wcztcbiAgY29uc3QgW291dHB1dCwgc2V0T3V0cHV0XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3Qgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpbmZvOiB7Y2hhbmdlZDogQXJyYXk8Vmlld1Rva2VuPiwgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPiwgLi4ufSkgPT5cbiAgICAgIHNldE91dHB1dChcbiAgICAgICAgaW5mby52aWV3YWJsZUl0ZW1zXG4gICAgICAgICAgLmZpbHRlcih2aWV3VG9rZW4gPT4gdmlld1Rva2VuLmluZGV4ICE9IG51bGwgJiYgdmlld1Rva2VuLmlzVmlld2FibGUpXG4gICAgICAgICAgLm1hcCh2aWV3VG9rZW4gPT4gdmlld1Rva2VuLml0ZW0pXG4gICAgICAgICAgLmpvaW4oJywgJyksXG4gICAgICApLFxuICAgIFtzZXRPdXRwdXRdLFxuICApO1xuICBjb25zdCBleGFtcGxlUHJvcHMgPSB7XG4gICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCxcbiAgICB2aWV3YWJpbGl0eUNvbmZpZyxcbiAgICBob3Jpem9udGFsLFxuICB9O1xuXG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxhbnk+KG51bGwpO1xuICBjb25zdCBvblRlc3QgPVxuICAgIHVzZVNjcm9sbFJlZlNjcm9sbCA9PT0gdHJ1ZVxuICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgcmVmPy5jdXJyZW50Py5nZXRTY3JvbGxSZXNwb25kZXIoKT8uc2Nyb2xsVG9FbmQoKTtcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPEJhc2VGbGF0TGlzdEV4YW1wbGVcbiAgICAgIHJlZj17cmVmfVxuICAgICAgZXhhbXBsZVByb3BzPXtleGFtcGxlUHJvcHN9XG4gICAgICBvblRlc3Q9e29uVGVzdH1cbiAgICAgIHRlc3RPdXRwdXQ9e291dHB1dH0+XG4gICAgICB7b2ZmU2NyZWVuID09PSB0cnVlID8gPFZpZXcgc3R5bGU9e3N0eWxlcy5vZmZTY3JlZW59IC8+IDogbnVsbH1cbiAgICA8L0Jhc2VGbGF0TGlzdEV4YW1wbGU+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgb2ZmU2NyZWVuOiB7XG4gICAgaGVpZ2h0OiAxMDAwLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCcsXG4gIG5hbWU6ICdvblZpZXdhYmxlSXRlbXNDaGFuZ2VkJyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1Njcm9sbCBsaXN0IHRvIHNlZSB3aGF0IGl0ZW1zIGFyZSByZXR1cm5lZCBpbiBgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZGAgY2FsbGJhY2suJyxcbiAgcmVuZGVyOiAoKSA9PiAoXG4gICAgPEZsYXRMaXN0X29uVmlld2FibGVJdGVtc0NoYW5nZWQgdmlld2FiaWxpdHlDb25maWc9e1ZJRVdBQklMSVRZX0NPTkZJR30gLz5cbiAgKSxcbn06IFJOVGVzdGVyTW9kdWxlRXhhbXBsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5pbXBvcnQgdHlwZSB7UmVuZGVySXRlbVByb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xpc3RzL1ZpcnR1YWxpemVkTGlzdCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RmxhdExpc3QsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IERBVEEgPSBbXG4gICdTdGlja3kgUGl6emEnLFxuICAnQnVyZ2VyJyxcbiAgJ1N0aWNreSBSaXNvdHRvJyxcbiAgJ0ZyZW5jaCBGcmllcycsXG4gICdTdGlja3kgT25pb24gUmluZ3MnLFxuICAnRnJpZWQgU2hyaW1wcycsXG4gICdXYXRlcicsXG4gICdDb2tlJyxcbiAgJ0JlZXInLFxuICAnQ2hlZXNlY2FrZScsXG4gICdJY2UgQ3JlYW0nLFxuXTtcblxuY29uc3QgU1RJQ0tZX0hFQURFUl9JTkRJQ0VTID0gWzAsIDIsIDRdO1xuXG5jb25zdCBJdGVtID0gKHtpdGVtLCBzZXBhcmF0b3JzfTogUmVuZGVySXRlbVByb3BzPHN0cmluZz4pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLml0ZW19PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZX0+e2l0ZW19PC9UZXh0PlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBGbGF0TGlzdF9zdGlja3lIZWFkZXJzKCk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gKFxuICAgIDxGbGF0TGlzdFxuICAgICAgZGF0YT17REFUQX1cbiAgICAgIGtleUV4dHJhY3Rvcj17KGl0ZW0sIGluZGV4KSA9PiBpdGVtICsgaW5kZXh9XG4gICAgICBzdHlsZT17c3R5bGVzLmxpc3R9XG4gICAgICBzdGlja3lIZWFkZXJJbmRpY2VzPXtTVElDS1lfSEVBREVSX0lORElDRVN9XG4gICAgICByZW5kZXJJdGVtPXtJdGVtfVxuICAgIC8+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgaXRlbToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3BpbmsnLFxuICAgIHBhZGRpbmc6IDIwLFxuICAgIG1hcmdpblZlcnRpY2FsOiA4LFxuICB9LFxuICBsaXN0OiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICBmb250U2l6ZTogMjQsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgdGl0bGU6ICdTdGlja3kgSGVhZGVycycsXG4gIG5hbWU6ICdzdGlja3lIZWFkZXJzJyxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHN0aWNreSBoZWFkZXJzIG9uIEZsYXRMaXN0JyxcbiAgcmVuZGVyOiAoKSA9PiA8RmxhdExpc3Rfc3RpY2t5SGVhZGVycyAvPixcbn06IFJOVGVzdGVyTW9kdWxlRXhhbXBsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBCYXNlRmxhdExpc3RFeGFtcGxlIGZyb20gJy4vQmFzZUZsYXRMaXN0RXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IFNlcGFyYXRvciA9XG4gIChkZWZhdWx0Q29sb3I6IHN0cmluZywgaGlnaGxpZ2h0Q29sb3I6IHN0cmluZykgPT5cbiAgKHtcbiAgICBsZWFkaW5nSXRlbSxcbiAgICB0cmFpbGluZ0l0ZW0sXG4gICAgaGlnaGxpZ2h0ZWQsXG4gICAgaGFzQmVlbkhpZ2hsaWdodGVkLFxuICB9OiAkRmxvd0ZpeE1lKSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IGBTZXBhcmF0b3IgZm9yIGxlYWRpbmcgJHtsZWFkaW5nSXRlbX0gYW5kIHRyYWlsaW5nICR7dHJhaWxpbmdJdGVtfSBoYXMgJHtcbiAgICAgICFoYXNCZWVuSGlnaGxpZ2h0ZWQgPyAnbm90ICcgOiAnJ1xuICAgIH1iZWVuIHByZXNzZWRgO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLnNlcGFyYXRvcixcbiAgICAgICAgICB7YmFja2dyb3VuZENvbG9yOiBoaWdobGlnaHRlZCA/IGhpZ2hsaWdodENvbG9yIDogZGVmYXVsdENvbG9yfSxcbiAgICAgICAgXX0+XG4gICAgICAgIDxUZXh0IHRlc3RJRD1cImZsYXRfbGlzdF9zZXBhcmF0b3JcIiBzdHlsZT17c3R5bGVzLnNlcGFyYXRvclRleHR9PlxuICAgICAgICAgIHt0ZXh0fVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZsYXRMaXN0X3dpdGhTZXBhcmF0b3JzKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBleGFtcGxlUHJvcHMgPSB7XG4gICAgSXRlbVNlcGFyYXRvckNvbXBvbmVudDogU2VwYXJhdG9yKCdsaWdodGdyZWVuJywgJ2dyZWVuJyksXG4gIH07XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjwkRmxvd0ZpeE1lPihudWxsKTtcblxuICByZXR1cm4gPEJhc2VGbGF0TGlzdEV4YW1wbGUgcmVmPXtyZWZ9IGV4YW1wbGVQcm9wcz17ZXhhbXBsZVByb3BzfSAvPjtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBzZXBhcmF0b3I6IHtcbiAgICBoZWlnaHQ6IDEyLFxuICB9LFxuICBzZXBhcmF0b3JUZXh0OiB7XG4gICAgZm9udFNpemU6IDEwLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnRmxhdExpc3Qgd2l0aCBTZXBhcmF0b3JzJyxcbiAgbmFtZTogJ3NlcGFyYXRvcnMnLFxuICBkZXNjcmlwdGlvbjogJ1RhcCB0byBzZWUgcHJlc3NlZCBzdGF0ZXMgZm9yIHNlcGFyYXRvciBjb21wb25lbnRzLicsXG4gIHJlbmRlcjogKCkgPT4gPEZsYXRMaXN0X3dpdGhTZXBhcmF0b3JzIC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtMYXlvdXRFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmNvbnN0IEltYWdlQ2FwSW5zZXRzRXhhbXBsZSA9IHJlcXVpcmUoJy4vSW1hZ2VDYXBJbnNldHNFeGFtcGxlJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIEltYWdlLFxuICBJbWFnZUJhY2tncm91bmQsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNvbnN0IGJhc2U2NEljb24gPVxuICAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFc0FBQUJMQ0FRQUFBQ1NSN0poQUFBRHRVbEVRVlI0QWMzWUEyQmo2UUxIMFhQVDFGemJ0bTI5dFczYnRtM2JmTFp0djdlMk9iWm5tczdkOFV3MDk4dHVldFB6cnh2OHdpSVNydFZ1ZHJHMkpYUVo0Vk92K3FVZm1xQ0dHbDFtcUxob0E1Mm9abGIwbXJqc25oS3BnZVVORXM5MVowcGQxa3ZpaEEzVUxHVkhpUU8ybmFyS1NIS2tFTXVsbTlWZ1V5RTYwczFhV29NUVVicFpPV0Ura2FxczRlTEVqZElsWlRjRlpCMG5kYzErbGhCMWxackl1azVQMmFpYjFOQnBaYUwrSmFPR0l0MGxzNDdTS3pMQzdDcXJsR0Y2UlowOUhHb055MWxZbDJhUlNXTDVHdXpxV1UxS2FmUmRvUnAwaU9RRWlEemdaUG5HNkRibGRjb21hZFZpZmxubC9jTDkzdE9vVmJzT0xWTTJqeWx2ZFdqWG9sV1gxaG1mWmJHUi93anlwRGpGTFNaSVJvdjA5QmdZbXRVcVBRUGxRclBhcGVjTGdUSXkwak1nUEt0VGVvYjJ6V3RyR0gzeHZqVWtQQ3ROZy90bTFyandyTWErbWRVa1BkM2hXYkgwakFyUEdpVTl1ZkNzTk5XRlo0MHdwd24rNjIvNjZSMlJVdG9zbzFPQjM0dG5MT2N5N1lCMWZVZGM5ZTBxM3lydThQR003NzN2WHN1WjVZSVpYKzV4bUh3SEdWdmxyR1BONlpTaVAxc21Pc01NZGU0MHdLdjJWbXdQUFZYTnV0NHNWcFVyZVppTEJIaTBxbG4vVlFlSS9MVE1ZWHBzSnRGaWNsVU4rNUhWWmF6aW0rS3krN3NBdnhXbnZqWHJKRm5lVnRMV0x5UEp1OUszY1hMV2VPbGJNVGxySWVsYk1EbHJMZW5yakVRT3RJRitmdUk5eFJwOVpCRnA2K2I2V1Q4UnJ4RXBkSzY0QnV2SGdEayt2VXkrYjVoWWs2emZ5ZnMwNTFnUm9OTzF1c1UxMldXUldMNzMvTU1FeTlwTWk5cUlyUjRacFYxNlJydmR1eGF6bXkxRlN2dUZYUmtxVG5FN20ya2RiNVU4eEdqTHcvc3BScjF1VG92NHVPZ1FFKzBOL0R2RnJHL0p0N2kvRnp3eGJBOWtEYW5oZjJ3K3Q0Vjk3RzhsclQ3d2MwOGFBMlFOVWt1VGZXL0tpbVQwMXdkbGZLNHlFdzAzMFZmVDBSdFpiemplTXByTnE4bTh0blNUQVNyVEx0aTY0b0JOZHBtTVFtMGVFd3ZmUHdSYlVCeXdHNVR6alBDc2R3azNJZUFYalFibExDb1huRFZlb0F6NlNmSk5rNVRUenl0Q05aay9QT3RUU1Y0ME53T0ZXenc4NndOSlJwdWJwWHNuNjBOSkZsSGVxbFlSYnNscVptMmpuRVozcWNTS2dtMGtUbGkzelpWUzd5L2lpdlpUd2VZWEoyNlkrUlRiVjF6aDNoWWtneUZHU1RLUGZSVmJScVdXVlJlYXhZZVNMYXJZdjFRcXNtaDFzOTVTN0crZUVXSzBmM2pZS1RiVjZiT3dlcGpmaHRhZnN2VXNxclF2ckdDOFlobW5POWNTQ2szeXVZOTg0RjF2ZXNkSFloV0o1RnZBU2xhY3NoVXNhakZ0Mm1VTTlwcXp2S0djeU5KVzBhclRLTjFHR0d6UWxIMHRYd0xEZ1FUdXJTOGVJUUFBQUFCSlJVNUVya0pnZ2c9PSc7XG5jb25zdCBJTUFHRV9QUkVGRVRDSF9VUkwgPVxuICAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2Zhdmljb24uaWNvP3I9MSZ0PScgKyBEYXRlLm5vdygpO1xuY29uc3QgcHJlZmV0Y2hUYXNrID0gSW1hZ2UucHJlZmV0Y2goSU1BR0VfUFJFRkVUQ0hfVVJMKTtcblxudHlwZSBJbWFnZVNvdXJjZSA9ICRSZWFkT25seTx7fFxuICB1cmk6IHN0cmluZyxcbnx9PjtcblxudHlwZSBCbG9iSW1hZ2VTdGF0ZSA9IHt8XG4gIG9iamVjdFVSTDogP3N0cmluZyxcbnx9O1xuXG50eXBlIEJsb2JJbWFnZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIHVybDogc3RyaW5nLFxufH0+O1xuXG5jbGFzcyBCbG9iSW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8QmxvYkltYWdlUHJvcHMsIEJsb2JJbWFnZVN0YXRlPiB7XG4gIHN0YXRlOiBCbG9iSW1hZ2VTdGF0ZSA9IHtcbiAgICBvYmplY3RVUkw6IG51bGwsXG4gIH07XG5cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW3VudXNlZC1wcm9taXNlXVxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaCh0aGlzLnByb3BzLnVybCk7XG4gICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzdWx0LmJsb2IoKTtcbiAgICAgIGNvbnN0IG9iamVjdFVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICB0aGlzLnNldFN0YXRlKHtvYmplY3RVUkx9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLm9iamVjdFVSTCAhPT0gbnVsbCA/IChcbiAgICAgIDxJbWFnZSBzb3VyY2U9e3t1cmk6IHRoaXMuc3RhdGUub2JqZWN0VVJMfX0gc3R5bGU9e3N0eWxlcy5iYXNlfSAvPlxuICAgICkgOiAoXG4gICAgICA8VGV4dD5PYmplY3QgVVJMIG5vdCBjcmVhdGVkIHlldDwvVGV4dD5cbiAgICApO1xuICB9XG59XG5cbnR5cGUgQmxvYkltYWdlRXhhbXBsZVN0YXRlID0ge3x8fTtcblxudHlwZSBCbG9iSW1hZ2VFeGFtcGxlUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgdXJsczogc3RyaW5nW10sXG58fT47XG5cbmNsYXNzIEJsb2JJbWFnZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIEJsb2JJbWFnZUV4YW1wbGVQcm9wcyxcbiAgQmxvYkltYWdlRXhhbXBsZVN0YXRlLFxuPiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAge3RoaXMucHJvcHMudXJscy5tYXAodXJsID0+IChcbiAgICAgICAgICA8QmxvYkltYWdlIGtleT17dXJsfSB1cmw9e3VybH0gLz5cbiAgICAgICAgKSl9XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG50eXBlIE5ldHdvcmtJbWFnZUNhbGxiYWNrRXhhbXBsZVN0YXRlID0ge3xcbiAgZXZlbnRzOiBBcnJheTxzdHJpbmc+LFxuICBzdGFydExvYWRQcmVmZXRjaGVkOiBib29sZWFuLFxuICBtb3VudFRpbWU6IG51bWJlcixcbiAgaW1hZ2VIYXNoOiBudW1iZXIsXG58fTtcblxudHlwZSBOZXR3b3JrSW1hZ2VDYWxsYmFja0V4YW1wbGVQcm9wcyA9ICRSZWFkT25seTx7fFxuICBzb3VyY2U6IEltYWdlU291cmNlLFxuICBwcmVmZXRjaGVkU291cmNlOiBJbWFnZVNvdXJjZSxcbnx9PjtcblxuY2xhc3MgTmV0d29ya0ltYWdlQ2FsbGJhY2tFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBOZXR3b3JrSW1hZ2VDYWxsYmFja0V4YW1wbGVQcm9wcyxcbiAgTmV0d29ya0ltYWdlQ2FsbGJhY2tFeGFtcGxlU3RhdGUsXG4+IHtcbiAgc3RhdGU6IE5ldHdvcmtJbWFnZUNhbGxiYWNrRXhhbXBsZVN0YXRlID0ge1xuICAgIGV2ZW50czogW10sXG4gICAgc3RhcnRMb2FkUHJlZmV0Y2hlZDogZmFsc2UsXG4gICAgbW91bnRUaW1lOiBEYXRlLm5vdygpLFxuICAgIGltYWdlSGFzaDogRGF0ZS5ub3coKSxcbiAgfTtcblxuICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe21vdW50VGltZTogRGF0ZS5ub3coKX0pO1xuICB9XG5cbiAgX2xvYWRFdmVudEZpcmVkID0gKGV2ZW50OiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICBldmVudHM6IFsuLi5zdGF0ZS5ldmVudHMsIGV2ZW50XSxcbiAgICB9KSk7XG4gIH07XG5cbiAgdXBkYXRlTG9hZGluZ0ltYWdlSGFzaCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUhhc2g6IERhdGUubm93KCl9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qge21vdW50VGltZX0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPEltYWdlXG4gICAgICAgICAgc291cmNlPXt0aGlzLnByb3BzLnNvdXJjZX1cbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMudmlzaWJsZU92ZXJmbG93XX1cbiAgICAgICAgICBvbkxvYWRTdGFydD17KCkgPT5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRFdmVudEZpcmVkKGDinJQgb25Mb2FkU3RhcnQgKCske0RhdGUubm93KCkgLSBtb3VudFRpbWV9bXMpYClcbiAgICAgICAgICB9XG4gICAgICAgICAgb25Qcm9ncmVzcz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qge2xvYWRlZCwgdG90YWx9ID0gZXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50ID0gTWF0aC5yb3VuZCgobG9hZGVkIC8gdG90YWwpICogMTAwKTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFdmVudEZpcmVkKFxuICAgICAgICAgICAgICBg4pyUIG9uUHJvZ3Jlc3MgJHtwZXJjZW50fSUgKCske0RhdGUubm93KCkgLSBtb3VudFRpbWV9bXMpYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkxvYWQ9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5uYXRpdmVFdmVudC5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgdXJsID0gZXZlbnQubmF0aXZlRXZlbnQuc291cmNlLnVyaTtcbiAgICAgICAgICAgICAgdGhpcy5fbG9hZEV2ZW50RmlyZWQoXG4gICAgICAgICAgICAgICAgYOKclCBvbkxvYWQgKCske0RhdGUubm93KCkgLSBtb3VudFRpbWV9bXMpIGZvciBVUkwgJHt1cmx9YCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvYWRFdmVudEZpcmVkKGDinJQgb25Mb2FkICgrJHtEYXRlLm5vdygpIC0gbW91bnRUaW1lfW1zKWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25Mb2FkRW5kPXsoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkRXZlbnRGaXJlZChg4pyUIG9uTG9hZEVuZCAoKyR7RGF0ZS5ub3coKSAtIG1vdW50VGltZX1tcylgKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3N0YXJ0TG9hZFByZWZldGNoZWQ6IHRydWV9LCAoKSA9PiB7XG4gICAgICAgICAgICAgIHByZWZldGNoVGFzay50aGVuKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRFdmVudEZpcmVkKFxuICAgICAgICAgICAgICAgICAgICBg4pyUIFByZWZldGNoIE9LICgrJHtEYXRlLm5vdygpIC0gbW91bnRUaW1lfW1zKWAsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnVzZWQtcHJvbWlzZV1cbiAgICAgICAgICAgICAgICAgIEltYWdlLnF1ZXJ5Q2FjaGUoW0lNQUdFX1BSRUZFVENIX1VSTF0pLnRoZW4obWFwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbWFwW0lNQUdFX1BSRUZFVENIX1VSTF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkRXZlbnRGaXJlZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGDinJQgcXVlcnlDYWNoZSBcIiR7cmVzdWx0fVwiICgrJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZS5ub3coKSAtIG1vdW50VGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgfW1zKWAsXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkRXZlbnRGaXJlZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGDinJggcXVlcnlDYWNoZSAoKyR7RGF0ZS5ub3coKSAtIG1vdW50VGltZX1tcylgLFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEV2ZW50RmlyZWQoXG4gICAgICAgICAgICAgICAgICAgIGDinJggUHJlZmV0Y2ggZmFpbGVkICgrJHtEYXRlLm5vdygpIC0gbW91bnRUaW1lfW1zKWAsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICB7dGhpcy5zdGF0ZS5zdGFydExvYWRQcmVmZXRjaGVkID8gKFxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc291cmNlPXt0aGlzLnByb3BzLnByZWZldGNoZWRTb3VyY2V9XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMudmlzaWJsZU92ZXJmbG93XX1cbiAgICAgICAgICAgIG9uTG9hZFN0YXJ0PXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLl9sb2FkRXZlbnRGaXJlZChcbiAgICAgICAgICAgICAgICBg4pyUIChwcmVmZXRjaGVkKSBvbkxvYWRTdGFydCAoKyR7RGF0ZS5ub3coKSAtIG1vdW50VGltZX1tcylgLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkxvYWQ9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoaXMgaW1hZ2Ugc291cmNlIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgb24gaU9TLlxuICAgICAgICAgICAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gZXZlbnQubmF0aXZlRXZlbnQuc291cmNlLnVyaTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkRXZlbnRGaXJlZChcbiAgICAgICAgICAgICAgICAgIGDinJQgKHByZWZldGNoZWQpIG9uTG9hZCAoKyR7XG4gICAgICAgICAgICAgICAgICAgIERhdGUubm93KCkgLSBtb3VudFRpbWVcbiAgICAgICAgICAgICAgICAgIH1tcykgZm9yIFVSTCAke3VybH1gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZEV2ZW50RmlyZWQoXG4gICAgICAgICAgICAgICAgICBg4pyUIChwcmVmZXRjaGVkKSBvbkxvYWQgKCske0RhdGUubm93KCkgLSBtb3VudFRpbWV9bXMpYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25Mb2FkRW5kPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLl9sb2FkRXZlbnRGaXJlZChcbiAgICAgICAgICAgICAgICBg4pyUIChwcmVmZXRjaGVkKSBvbkxvYWRFbmQgKCske0RhdGUubm93KCkgLSBtb3VudFRpbWV9bXMpYCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLm5ldHdvcmtJbWFnZVRleHR9PlxuICAgICAgICAgIHt0aGlzLnN0YXRlLmV2ZW50cy5qb2luKCdcXG4nKX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxudHlwZSBOZXR3b3JrSW1hZ2VFeGFtcGxlU3RhdGUgPSB7fFxuICBlcnJvcjogP3N0cmluZyxcbiAgbG9hZGluZzogYm9vbGVhbixcbiAgcHJvZ3Jlc3M6ICRSZWFkT25seUFycmF5PG51bWJlcj4sXG58fTtcblxudHlwZSBOZXR3b3JrSW1hZ2VFeGFtcGxlUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgc291cmNlOiBJbWFnZVNvdXJjZSxcbnx9PjtcblxuY2xhc3MgTmV0d29ya0ltYWdlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgTmV0d29ya0ltYWdlRXhhbXBsZVByb3BzLFxuICBOZXR3b3JrSW1hZ2VFeGFtcGxlU3RhdGUsXG4+IHtcbiAgc3RhdGU6IE5ldHdvcmtJbWFnZUV4YW1wbGVTdGF0ZSA9IHtcbiAgICBlcnJvcjogbnVsbCxcbiAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICBwcm9ncmVzczogW10sXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmVycm9yICE9IG51bGwgPyAoXG4gICAgICA8VGV4dD57dGhpcy5zdGF0ZS5lcnJvcn08L1RleHQ+XG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIDxJbWFnZVxuICAgICAgICAgIHNvdXJjZT17dGhpcy5wcm9wcy5zb3VyY2V9XG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYmFzZSwgc3R5bGVzLnZpc2libGVPdmVyZmxvd119XG4gICAgICAgICAgb25Mb2FkU3RhcnQ9e2UgPT4gdGhpcy5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0pfVxuICAgICAgICAgIG9uRXJyb3I9e2UgPT5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Vycm9yOiBlLm5hdGl2ZUV2ZW50LmVycm9yLCBsb2FkaW5nOiBmYWxzZX0pXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uUHJvZ3Jlc3M9e2UgPT4ge1xuICAgICAgICAgICAgY29uc3Qge2xvYWRlZCwgdG90YWx9ID0gZS5uYXRpdmVFdmVudDtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+ICh7XG4gICAgICAgICAgICAgIHByb2dyZXNzOiBbXG4gICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLnByb2dyZXNzLFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoKDEwMCAqIGxvYWRlZCkgLyB0b3RhbCksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkxvYWQ9eygpID0+IHRoaXMuc2V0U3RhdGUoe2xvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbH0pfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5wcm9ncmVzcy5tYXAocHJvZ3Jlc3MgPT4gYCR7cHJvZ3Jlc3N9JWApLmpvaW4oJ1xcbicpfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cbnR5cGUgSW1hZ2VTaXplRXhhbXBsZVN0YXRlID0ge3xcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG58fTtcblxudHlwZSBJbWFnZVNpemVFeGFtcGxlUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgc291cmNlOiBJbWFnZVNvdXJjZSxcbnx9PjtcblxuY2xhc3MgSW1hZ2VTaXplRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgSW1hZ2VTaXplRXhhbXBsZVByb3BzLFxuICBJbWFnZVNpemVFeGFtcGxlU3RhdGUsXG4+IHtcbiAgc3RhdGU6IEltYWdlU2l6ZUV4YW1wbGVTdGF0ZSA9IHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDAsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgSW1hZ2UuZ2V0U2l6ZSh0aGlzLnByb3BzLnNvdXJjZS51cmksICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHt3aWR0aCwgaGVpZ2h0fSk7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZmxleFJvd30+XG4gICAgICAgIDxJbWFnZSBzdHlsZT17c3R5bGVzLmltYWdlU2l6ZUV4YW1wbGV9IHNvdXJjZT17dGhpcy5wcm9wcy5zb3VyY2V9IC8+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIEFjdHVhbCBkaW1lbnNpb25zOnsnXFxuJ31cbiAgICAgICAgICBXaWR0aDoge3RoaXMuc3RhdGUud2lkdGh9LCBIZWlnaHQ6IHt0aGlzLnN0YXRlLmhlaWdodH1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxudHlwZSBNdWx0aXBsZVNvdXJjZXNFeGFtcGxlU3RhdGUgPSB7fFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbnx9O1xuXG50eXBlIE11bHRpcGxlU291cmNlc0V4YW1wbGVQcm9wcyA9ICRSZWFkT25seTx7fHx9PjtcblxuY2xhc3MgTXVsdGlwbGVTb3VyY2VzRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgTXVsdGlwbGVTb3VyY2VzRXhhbXBsZVByb3BzLFxuICBNdWx0aXBsZVNvdXJjZXNFeGFtcGxlU3RhdGUsXG4+IHtcbiAgc3RhdGU6IE11bHRpcGxlU291cmNlc0V4YW1wbGVTdGF0ZSA9IHtcbiAgICB3aWR0aDogMzAsXG4gICAgaGVpZ2h0OiAzMCxcbiAgfTtcblxuICBpbmNyZWFzZUltYWdlU2l6ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS53aWR0aCA+PSAxMDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB3aWR0aDogdGhpcy5zdGF0ZS53aWR0aCArIDEwLFxuICAgICAgaGVpZ2h0OiB0aGlzLnN0YXRlLmhlaWdodCArIDEwLFxuICAgIH0pO1xuICB9O1xuXG4gIGRlY3JlYXNlSW1hZ2VTaXplID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLndpZHRoIDw9IDEwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgd2lkdGg6IHRoaXMuc3RhdGUud2lkdGggLSAxMCxcbiAgICAgIGhlaWdodDogdGhpcy5zdGF0ZS5oZWlnaHQgLSAxMCxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNwYWNlQmV0d2VlblZpZXd9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudG91Y2hhYmxlVGV4dH0gb25QcmVzcz17dGhpcy5kZWNyZWFzZUltYWdlU2l6ZX0+XG4gICAgICAgICAgICBEZWNyZWFzZSBpbWFnZSBzaXplXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudG91Y2hhYmxlVGV4dH0gb25QcmVzcz17dGhpcy5pbmNyZWFzZUltYWdlU2l6ZX0+XG4gICAgICAgICAgICBJbmNyZWFzZSBpbWFnZSBzaXplXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIENvbnRhaW5lciBpbWFnZSBzaXplOiB7dGhpcy5zdGF0ZS53aWR0aH14e3RoaXMuc3RhdGUuaGVpZ2h0fXsnICd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3toZWlnaHQ6IHRoaXMuc3RhdGUuaGVpZ2h0LCB3aWR0aDogdGhpcy5zdGF0ZS53aWR0aH19PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5mbGV4fVxuICAgICAgICAgICAgc291cmNlPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1cmk6ICdodHRwczovL3d3dy5mYWNlYm9vay5jb20vZmF2aWNvbi5pY28nLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAzOCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDM4LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXJpOiAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2Fkcy9waWNzL3N1Y2Nlc3NzdG9yaWVzLnBuZycsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxudHlwZSBMb2FkaW5nSW5kaWNhdG9yU291cmNlRXhhbXBsZVN0YXRlID0ge3xcbiAgaW1hZ2VIYXNoOiBudW1iZXIsXG58fTtcblxudHlwZSBMb2FkaW5nSW5kaWNhdG9yU291cmNlRXhhbXBsZVByb3BzID0gJFJlYWRPbmx5PHt8fH0+O1xuXG5jbGFzcyBMb2FkaW5nSW5kaWNhdG9yU291cmNlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgTG9hZGluZ0luZGljYXRvclNvdXJjZUV4YW1wbGVQcm9wcyxcbiAgTG9hZGluZ0luZGljYXRvclNvdXJjZUV4YW1wbGVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogTG9hZGluZ0luZGljYXRvclNvdXJjZUV4YW1wbGVTdGF0ZSA9IHtcbiAgICBpbWFnZUhhc2g6IERhdGUubm93KCksXG4gIH07XG5cbiAgcmVsb2FkSW1hZ2UgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpbWFnZUhhc2g6IERhdGUubm93KCksXG4gICAgfSk7XG4gIH07XG5cbiAgbG9hZGVyR2lmOiB7dXJpOiBzdHJpbmd9ID0ge1xuICAgIHVyaTogJ2h0dHBzOi8vbWVkaWExLmdpcGh5LmNvbS9tZWRpYS8zb0VqSTZTSUlIQmRSeFhJNDAvMjAwLmdpZicsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGxvYWRpbmdJbWFnZSA9IHtcbiAgICAgIHVyaTogYGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9hZHMvcGljcy9zdWNjZXNzc3Rvcmllcy5wbmc/aGFzaD0ke3RoaXMuc3RhdGUuaW1hZ2VIYXNofWAsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zcGFjZUJldHdlZW5WaWV3fT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRvdWNoYWJsZVRleHR9IG9uUHJlc3M9e3RoaXMucmVsb2FkSW1hZ2V9PlxuICAgICAgICAgICAgUmVmcmVzaCBJbWFnZVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8SW1hZ2VcbiAgICAgICAgICBsb2FkaW5nSW5kaWNhdG9yU291cmNlPXt0aGlzLmxvYWRlckdpZn1cbiAgICAgICAgICBzb3VyY2U9e2xvYWRpbmdJbWFnZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmJhc2V9XG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0PkltYWdlIEhhc2g6IHt0aGlzLnN0YXRlLmltYWdlSGFzaH08L1RleHQ+XG4gICAgICAgIDxUZXh0PkltYWdlIFVSSToge2xvYWRpbmdJbWFnZS51cml9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxudHlwZSBPbkxheW91dEV4YW1wbGVTdGF0ZSA9IHt8XG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBsYXlvdXRIYW5kbGVyTWVzc2FnZTogc3RyaW5nLFxufH07XG5cbnR5cGUgT25MYXlvdXRFeGFtcGxlUHJvcHMgPSAkUmVhZE9ubHk8e3x8fT47XG5cbmNsYXNzIE9uTGF5b3V0RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgT25MYXlvdXRFeGFtcGxlUHJvcHMsXG4gIE9uTGF5b3V0RXhhbXBsZVN0YXRlLFxuPiB7XG4gIHN0YXRlOiBPbkxheW91dEV4YW1wbGVTdGF0ZSA9IHtcbiAgICB3aWR0aDogMzAsXG4gICAgaGVpZ2h0OiAzMCxcbiAgICBsYXlvdXRIYW5kbGVyTWVzc2FnZTogJ05vIE1lc3NhZ2UnLFxuICB9O1xuXG4gIG9uTGF5b3V0SGFuZGxlciA9IChldmVudDogTGF5b3V0RXZlbnQpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLnN0YXRlLmhlaWdodCxcbiAgICAgIGxheW91dEhhbmRsZXJNZXNzYWdlOiBKU09OLnN0cmluZ2lmeShldmVudC5uYXRpdmVFdmVudCksXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuXG4gIGluY3JlYXNlSW1hZ2VTaXplID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLndpZHRoID49IDEwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLndpZHRoICsgMTAsXG4gICAgICBoZWlnaHQ6IHRoaXMuc3RhdGUuaGVpZ2h0ICsgMTAsXG4gICAgfSk7XG4gIH07XG5cbiAgZGVjcmVhc2VJbWFnZVNpemUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUud2lkdGggPD0gMTApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB3aWR0aDogdGhpcy5zdGF0ZS53aWR0aCAtIDEwLFxuICAgICAgaGVpZ2h0OiB0aGlzLnN0YXRlLmhlaWdodCAtIDEwLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0PkFkanVzdCB0aGUgaW1hZ2Ugc2l6ZSB0byB0cmlnZ2VyIHRoZSBPbkxheW91dCBoYW5kbGVyLjwvVGV4dD5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zcGFjZUJldHdlZW5WaWV3fT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRvdWNoYWJsZVRleHR9IG9uUHJlc3M9e3RoaXMuZGVjcmVhc2VJbWFnZVNpemV9PlxuICAgICAgICAgICAgRGVjcmVhc2UgaW1hZ2Ugc2l6ZVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRvdWNoYWJsZVRleHR9IG9uUHJlc3M9e3RoaXMuaW5jcmVhc2VJbWFnZVNpemV9PlxuICAgICAgICAgICAgSW5jcmVhc2UgaW1hZ2Ugc2l6ZVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICBDb250YWluZXIgaW1hZ2Ugc2l6ZToge3RoaXMuc3RhdGUud2lkdGh9eHt0aGlzLnN0YXRlLmhlaWdodH17JyAnfVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxWaWV3IHN0eWxlPXt7aGVpZ2h0OiB0aGlzLnN0YXRlLmhlaWdodCwgd2lkdGg6IHRoaXMuc3RhdGUud2lkdGh9fT5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLm9uTGF5b3V0SGFuZGxlcn1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZmxleH1cbiAgICAgICAgICAgIHNvdXJjZT17W1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXJpOiAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2Zhdmljb24uaWNvJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogMzgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzOCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVyaTogJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9mYXZpY29uLmljbycsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDc2LFxuICAgICAgICAgICAgICAgIGhlaWdodDogNzYsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1cmk6ICdodHRwczovL3d3dy5mYWNlYm9vay5jb20vYWRzL3BpY3Mvc3VjY2Vzc3N0b3JpZXMucG5nJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNDAwLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxUZXh0PkxheW91dCBIYW5kbGVyIE1lc3NhZ2U6IHt0aGlzLnN0YXRlLmxheW91dEhhbmRsZXJNZXNzYWdlfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbnR5cGUgT25QYXJ0aWFsTG9hZEV4YW1wbGVTdGF0ZSA9IHt8XG4gIGhhc0xvYWRlZDogYm9vbGVhbixcbnx9O1xuXG50eXBlIE9uUGFydGlhbExvYWRFeGFtcGxlUHJvcHMgPSAkUmVhZE9ubHk8e3x8fT47XG5cbmNsYXNzIE9uUGFydGlhbExvYWRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBPblBhcnRpYWxMb2FkRXhhbXBsZVByb3BzLFxuICBPblBhcnRpYWxMb2FkRXhhbXBsZVN0YXRlLFxuPiB7XG4gIHN0YXRlOiBPblBhcnRpYWxMb2FkRXhhbXBsZVN0YXRlID0ge1xuICAgIGhhc0xvYWRlZDogZmFsc2UsXG4gIH07XG5cbiAgcGFydGlhbExvYWRIYW5kbGVyID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaGFzTG9hZGVkOiB0cnVlLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIFBhcnRpYWwgTG9hZCBGdW5jdGlvbiBFeGVjdXRlZDoge0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuaGFzTG9hZGVkKX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8SW1hZ2VcbiAgICAgICAgICBzb3VyY2U9e3tcbiAgICAgICAgICAgIHVyaTogYGh0dHBzOi8vaW1hZ2VzLnBleGVscy5jb20vcGhvdG9zLzY3MTU1Ny9wZXhlbHMtcGhvdG8tNjcxNTU3LmpwZWc/JmJ1c3Rlcj0ke01hdGgucmFuZG9tKCl9YCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGFydGlhbExvYWQ9e3RoaXMucGFydGlhbExvYWRIYW5kbGVyfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuYmFzZX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IGZ1bGxJbWFnZTogSW1hZ2VTb3VyY2UgPSB7XG4gIHVyaTogJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9hZHMvcGljcy9zdWNjZXNzc3Rvcmllcy5wbmcnLFxufTtcbmNvbnN0IHNtYWxsSW1hZ2UgPSB7XG4gIHVyaTogJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9mYXZpY29uLmljbycsXG59O1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJhc2U6IHtcbiAgICB3aWR0aDogNjQsXG4gICAgaGVpZ2h0OiA2NCxcbiAgICBtYXJnaW46IDQsXG4gIH0sXG4gIHZpc2libGVPdmVyZmxvdzoge1xuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIH0sXG4gIGxlZnRNYXJnaW46IHtcbiAgICBtYXJnaW5MZWZ0OiAxMCxcbiAgfSxcbiAgYmFja2dyb3VuZDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyMyMjIyMjInLFxuICB9LFxuICBzZWN0aW9uVGV4dDoge1xuICAgIG1hcmdpblZlcnRpY2FsOiA2LFxuICB9LFxuICBuZXN0ZWRUZXh0OiB7XG4gICAgbWFyZ2luTGVmdDogMTIsXG4gICAgbWFyZ2luVG9wOiAyMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6ICd3aGl0ZScsXG4gIH0sXG4gIHJlc2l6ZU1vZGU6IHtcbiAgICB3aWR0aDogOTAsXG4gICAgaGVpZ2h0OiA2MCxcbiAgICBib3JkZXJXaWR0aDogMC41LFxuICAgIGJvcmRlckNvbG9yOiAnYmxhY2snLFxuICB9LFxuICByZXNpemVNb2RlVGV4dDoge1xuICAgIGZvbnRTaXplOiAxMSxcbiAgICBtYXJnaW5Cb3R0b206IDMsXG4gIH0sXG4gIGljb246IHtcbiAgICB3aWR0aDogMTUsXG4gICAgaGVpZ2h0OiAxNSxcbiAgICBtYXJnaW46IDQsXG4gIH0sXG4gIGhvcml6b250YWw6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICB9LFxuICBnaWY6IHtcbiAgICBmbGV4OiAxLFxuICAgIGhlaWdodDogMjAwLFxuICB9LFxuICBiYXNlNjQ6IHtcbiAgICBmbGV4OiAxLFxuICAgIGhlaWdodDogNTAsXG4gICAgcmVzaXplTW9kZTogJ2NvbnRhaW4nLFxuICB9LFxuICB0b3VjaGFibGVUZXh0OiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgY29sb3I6ICdibHVlJyxcbiAgfSxcbiAgbmV0d29ya0ltYWdlVGV4dDoge1xuICAgIG1hcmdpblRvcDogMjAsXG4gIH0sXG4gIGZsZXg6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICBpbWFnZVdpdGhCb3JkZXJSYWRpdXM6IHtcbiAgICBib3JkZXJSYWRpdXM6IDUsXG4gIH0sXG4gIGltYWdlU2l6ZUV4YW1wbGU6IHtcbiAgICB3aWR0aDogNjAsXG4gICAgaGVpZ2h0OiA2MCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgbWFyZ2luUmlnaHQ6IDEwLFxuICB9LFxuICBmbGV4Um93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gIH0sXG4gIHNwYWNlQmV0d2VlblZpZXc6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICB9LFxuICBjdXN0b21Cb3JkZXJDb2xvcjoge1xuICAgIGJvcmRlcldpZHRoOiA1LFxuICAgIGJvcmRlckNvbG9yOiAnI2YwOTlmMCcsXG4gIH0sXG4gIGJvcmRlclRvcExlZnRSYWRpdXM6IHtcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAyMCxcbiAgfSxcbiAgb3BhY2l0eTE6IHtcbiAgICBvcGFjaXR5OiAxLFxuICB9LFxuICBvcGFjaXR5Mjoge1xuICAgIG9wYWNpdHk6IDAuOCxcbiAgfSxcbiAgb3BhY2l0eTM6IHtcbiAgICBvcGFjaXR5OiAwLjYsXG4gIH0sXG4gIG9wYWNpdHk0OiB7XG4gICAgb3BhY2l0eTogMC40LFxuICB9LFxuICBvcGFjaXR5NToge1xuICAgIG9wYWNpdHk6IDAuMixcbiAgfSxcbiAgb3BhY2l0eTY6IHtcbiAgICBvcGFjaXR5OiAwLFxuICB9LFxuICB0cmFuc3BhcmVudEltYWdlQmFja2dyb3VuZDoge1xuICAgIHdpZHRoOiA2MCxcbiAgICBoZWlnaHQ6IDYwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgfSxcbiAgdGludENvbG9yMToge1xuICAgIHRpbnRDb2xvcjogJyNmZjJkNTUnLFxuICB9LFxuICB0aW50Q29sb3IyOiB7XG4gICAgdGludENvbG9yOiAnIzVhYzhmYScsXG4gIH0sXG4gIHRpbnRDb2xvcjM6IHtcbiAgICB0aW50Q29sb3I6ICcjNGNkOTY0JyxcbiAgfSxcbiAgdGludENvbG9yNDoge1xuICAgIHRpbnRDb2xvcjogJyM4ZThlOTMnLFxuICB9LFxuICBvYmplY3RGaXRDb250YWluOiB7XG4gICAgb2JqZWN0Rml0OiAnY29udGFpbicsXG4gIH0sXG4gIG9iamVjdEZpdENvdmVyOiB7XG4gICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICB9LFxuICBvYmplY3RGaXRGaWxsOiB7XG4gICAgb2JqZWN0Rml0OiAnZmlsbCcsXG4gIH0sXG4gIG9iamVjdEZpdFNjYWxlRG93bjoge1xuICAgIG9iamVjdEZpdDogJ3NjYWxlLWRvd24nLFxuICB9LFxuICBpbWFnZUluQnVuZGxlOiB7XG4gICAgYm9yZGVyQ29sb3I6ICd5ZWxsb3cnLFxuICAgIGJvcmRlcldpZHRoOiA0LFxuICB9LFxuICBpbWFnZUluQXNzZXRDYXRhbG9nOiB7XG4gICAgbWFyZ2luTGVmdDogMTAsXG4gICAgYm9yZGVyQ29sb3I6ICdibHVlJyxcbiAgICBib3JkZXJXaWR0aDogNCxcbiAgfSxcbiAgYmFja2dyb3VuZENvbG9yMToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMTAwLCAwLjI1KScsXG4gIH0sXG4gIGJhY2tncm91bmRDb2xvcjI6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3IzOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICBib3JkZXJDb2xvcjogJ2dyZWVuJyxcbiAgICBib3JkZXJXaWR0aDogMyxcbiAgICBib3JkZXJSYWRpdXM6IDI1LFxuICB9LFxuICBib3JkZXJSYWRpdXMxOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAxOSxcbiAgfSxcbiAgYm9yZGVyUmFkaXVzMjoge1xuICAgIGJvcmRlcldpZHRoOiA0LFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDEwLFxuICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAyMCxcbiAgICBib3JkZXJDb2xvcjogJ2dyZWVuJyxcbiAgfSxcbiAgYm9yZGVyUmFkaXVzMzoge1xuICAgIHJlc2l6ZU1vZGU6ICdjb3ZlcicsXG4gICAgd2lkdGg6IDkwLFxuICAgIGJvcmRlcldpZHRoOiA0LFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDEwLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAyMCxcbiAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogMzAsXG4gICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogNDAsXG4gICAgYm9yZGVyQ29sb3I6ICdyZWQnLFxuICB9LFxuICBib3JkZXJSYWRpdXM0OiB7XG4gICAgcmVzaXplTW9kZTogJ3N0cmV0Y2gnLFxuICAgIHdpZHRoOiA5MCxcbiAgICBib3JkZXJXaWR0aDogNCxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAxMCxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogMjAsXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IDMwLFxuICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IDQwLFxuICAgIGJvcmRlckNvbG9yOiAncmVkJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd5ZWxsb3cnLFxuICB9LFxuICBib3JkZXJSYWRpdXM1OiB7XG4gICAgcmVzaXplTW9kZTogJ2NvbnRhaW4nLFxuICAgIHdpZHRoOiA5MCxcbiAgICBib3JkZXJXaWR0aDogNCxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAxMCxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogMjAsXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IDMwLFxuICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IDQwLFxuICAgIGJvcmRlckNvbG9yOiAncmVkJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd5ZWxsb3cnLFxuICB9LFxufSk7XG5cbmV4cG9ydHMuZGlzcGxheU5hbWUgPSAodW5kZWZpbmVkOiA/c3RyaW5nKTtcbmV4cG9ydHMuZnJhbWV3b3JrID0gJ1JlYWN0JztcbmV4cG9ydHMudGl0bGUgPSAnSW1hZ2UnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID1cbiAgJ0Jhc2UgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBpbWFnZXMuJztcblxuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnUGxhaW4gTmV0d29yayBJbWFnZSB3aXRoIGBzb3VyY2VgIHByb3AuJyxcbiAgICBkZXNjcmlwdGlvbjogKCdJZiB0aGUgYHNvdXJjZWAgcHJvcCBgdXJpYCBwcm9wZXJ0eSBpcyBwcmVmaXhlZCB3aXRoICcgK1xuICAgICAgJ1wiaHR0cFwiLCB0aGVuIGl0IHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tIHRoZSBuZXR3b3JrLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEltYWdlIHNvdXJjZT17ZnVsbEltYWdlfSBzdHlsZT17c3R5bGVzLmJhc2V9IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1BsYWluIE5ldHdvcmsgSW1hZ2Ugd2l0aCBgc3JjYCBwcm9wLicsXG4gICAgZGVzY3JpcHRpb246ICgnSWYgdGhlIGBzcmNgIHByb3AgaXMgZGVmaW5lZCB3aXRoICcgK1xuICAgICAgJ1wiaHR0cFwiLCB0aGVuIGl0IHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tIHRoZSBuZXR3b3JrLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEltYWdlIHNyYz17ZnVsbEltYWdlLnVyaX0gc3R5bGU9e3N0eWxlcy5iYXNlfSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNdWx0aXBsZSBJbWFnZSBTb3VyY2UgdXNpbmcgdGhlIGBzcmNTZXRgIHByb3AuJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnQSBsaXN0IG9mIGNvbW1hIHNlcGVyYXRlZCB1cmlzIGFsb25nIHdpdGggc2NhbGUgYXJlIHByb3ZpZGVkIGluIGBzcmNTZXRgLicgK1xuICAgICAgICAnQW4gYXBwcm9wcmlhdGUgdmFsdWUgd2lsbCBiZSB1c2VkIGJhc2VkIG9uIHRoZSBzY2FsZSBvZiB0aGUgZGV2aWNlLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SW1hZ2VcbiAgICAgICAgICB3aWR0aD17NjR9XG4gICAgICAgICAgaGVpZ2h0PXs2NH1cbiAgICAgICAgICBzcmNTZXQ9e1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9hZHMvcGljcy9zdWNjZXNzc3Rvcmllcy5wbmcgNHgsIGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9mYXZpY29uLmljbyAyeCdcbiAgICAgICAgICB9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5iYXNlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdQbGFpbiBCbG9iIEltYWdlJyxcbiAgICBkZXNjcmlwdGlvbjogKCdJZiB0aGUgYHNvdXJjZWAgcHJvcCBgdXJpYCBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgVVJMLCAnICtcbiAgICAgICd0aGVuIGl0IHdpbGwgYmUgcmVzb2x2ZWQgdXNpbmcgYEJsb2JQcm92aWRlcmAgKEFuZHJvaWQpIG9yIGBSQ1RCbG9iTWFuYWdlcmAgKGlPUykuJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCbG9iSW1hZ2VFeGFtcGxlXG4gICAgICAgICAgdXJscz17W1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9mYXZpY29uLmljbycsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2Fkcy9waWNzL3N1Y2Nlc3NzdG9yaWVzLnBuZycsXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUGxhaW4gU3RhdGljIEltYWdlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnU3RhdGljIGFzc2V0cyBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSBzb3VyY2UgY29kZSB0cmVlLCBhbmQgJyArXG4gICAgICAgICdyZXF1aXJlZCBpbiB0aGUgc2FtZSB3YXkgYXMgSmF2YVNjcmlwdCBtb2R1bGVzLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuaWNvbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX3NlbGVjdGVkLnBuZycpfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5pY29ufVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy91aWVfY29tbWVudF9ub3JtYWwucG5nJyl9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmljb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL3VpZV9jb21tZW50X2hpZ2hsaWdodGVkLnBuZycpfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5pY29ufVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnSW1hZ2UgTG9hZGluZyBFdmVudHMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE5ldHdvcmtJbWFnZUNhbGxiYWNrRXhhbXBsZVxuICAgICAgICAgIHNvdXJjZT17e1xuICAgICAgICAgICAgdXJpOiAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2Zhdmljb24uaWNvP3I9MSZ0PScgKyBEYXRlLm5vdygpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgcHJlZmV0Y2hlZFNvdXJjZT17e3VyaTogSU1BR0VfUFJFRkVUQ0hfVVJMfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRXJyb3IgSGFuZGxlcicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TmV0d29ya0ltYWdlRXhhbXBsZVxuICAgICAgICAgIHNvdXJjZT17e1xuICAgICAgICAgICAgdXJpOiAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2Zhdmljb25fVFlQTy5pY28nLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ltYWdlIERvd25sb2FkIFByb2dyZXNzJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxOZXR3b3JrSW1hZ2VFeGFtcGxlXG4gICAgICAgICAgc291cmNlPXt7XG4gICAgICAgICAgICB1cmk6ICdodHRwczovL3d3dy5mYWNlYm9vay5jb20vZmF2aWNvbi5pY28/cj0xJyxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdkZWZhdWx0U291cmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Nob3cgYSBwbGFjZWhvbGRlciBpbWFnZSB3aGVuIGEgbmV0d29yayBpbWFnZSBpcyBsb2FkaW5nJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxJbWFnZVxuICAgICAgICAgIGRlZmF1bHRTb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy9idW5ueS5wbmcnKX1cbiAgICAgICAgICBzb3VyY2U9e3tcbiAgICAgICAgICAgIC8vIE5vdGU6IFVzZSBhIGxhcmdlIGltYWdlIGFuZCBidXN0IGNhY2hlIHNvIHdlIGNhbiBpbiBmYWN0XG4gICAgICAgICAgICAvLyB2aXN1YWxpemUgdGhlIGBkZWZhdWx0U291cmNlYCBpbWFnZS5cbiAgICAgICAgICAgIHVyaTogZnVsbEltYWdlLnVyaSArICc/Y2FjaGVCdXN0PW5vdGluQ2FjaGUnICsgRGF0ZS5ub3coKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuYmFzZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0NhY2hlIFBvbGljeScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoJ0ZpcnN0IGltYWdlIGhhcyBuZXZlciBiZWVuIGxvYWRlZCBiZWZvcmUgYW5kIGlzIGluc3RydWN0ZWQgbm90IHRvIGxvYWQgdW5sZXNzIGluIGNhY2hlLicgK1xuICAgICAgICAnUGxhY2Vob2xkZXIgaW1hZ2UgZnJvbSBhYm92ZSB3aWxsIHN0YXkuIFNlY29uZCBpbWFnZSBpcyB0aGUgc2FtZSBidXQgZm9yY2VkIHRvIGxvYWQgcmVnYXJkbGVzcyBvZicgK1xuICAgICAgICAnIGxvY2FsIGNhY2hlIHN0YXRlLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgZGVmYXVsdFNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL2J1bm55LnBuZycpfVxuICAgICAgICAgICAgc291cmNlPXt7XG4gICAgICAgICAgICAgIHVyaTogc21hbGxJbWFnZS51cmkgKyAnP2NhY2hlQnVzdD1ub3RpbkNhY2hlJyArIERhdGUubm93KCksXG4gICAgICAgICAgICAgIGNhY2hlOiAnb25seS1pZi1jYWNoZWQnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuYmFzZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgZGVmYXVsdFNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL2J1bm55LnBuZycpfVxuICAgICAgICAgICAgc291cmNlPXt7XG4gICAgICAgICAgICAgIHVyaTogc21hbGxJbWFnZS51cmkgKyAnP2NhY2hlQnVzdD1ub3RpbkNhY2hlJyArIERhdGUubm93KCksXG4gICAgICAgICAgICAgIGNhY2hlOiAncmVsb2FkJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmJhc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQm9yZGVycycsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc291cmNlPXtzbWFsbEltYWdlfVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYmFzZSwgc3R5bGVzLmJhY2tncm91bmQsIHN0eWxlcy5jdXN0b21Cb3JkZXJDb2xvcl19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdCb3JkZXIgUmFkaXVzJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzXX1cbiAgICAgICAgICAgIHNvdXJjZT17ZnVsbEltYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMuYm9yZGVyUmFkaXVzMV19XG4gICAgICAgICAgICBzb3VyY2U9e2Z1bGxJbWFnZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYmFzZSwgc3R5bGVzLmJvcmRlclRvcExlZnRSYWRpdXNdfVxuICAgICAgICAgICAgc291cmNlPXtmdWxsSW1hZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJhc2UsIHN0eWxlcy5ib3JkZXJSYWRpdXMyXX1cbiAgICAgICAgICAgIHNvdXJjZT17ZnVsbEltYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMuYm9yZGVyUmFkaXVzM119XG4gICAgICAgICAgICBzb3VyY2U9e2Z1bGxJbWFnZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYmFzZSwgc3R5bGVzLmJvcmRlclJhZGl1czRdfVxuICAgICAgICAgICAgc291cmNlPXtmdWxsSW1hZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJhc2UsIHN0eWxlcy5ib3JkZXJSYWRpdXM1XX1cbiAgICAgICAgICAgIHNvdXJjZT17ZnVsbEltYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQmFja2dyb3VuZCBDb2xvcicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgIDxJbWFnZSBzb3VyY2U9e3NtYWxsSW1hZ2V9IHN0eWxlPXtzdHlsZXMuYmFzZX0gLz5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJhc2UsIHN0eWxlcy5iYWNrZ3JvdW5kQ29sb3IxXX1cbiAgICAgICAgICAgIHNvdXJjZT17c21hbGxJbWFnZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYmFzZSwgc3R5bGVzLmJhY2tncm91bmRDb2xvcjJdfVxuICAgICAgICAgICAgc291cmNlPXtzbWFsbEltYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMuYmFja2dyb3VuZENvbG9yM119XG4gICAgICAgICAgICBzb3VyY2U9e3NtYWxsSW1hZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdPcGFjaXR5JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgPEltYWdlIHN0eWxlPXtbc3R5bGVzLmJhc2UsIHN0eWxlcy5vcGFjaXR5MV19IHNvdXJjZT17ZnVsbEltYWdlfSAvPlxuICAgICAgICAgIDxJbWFnZSBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMub3BhY2l0eTJdfSBzb3VyY2U9e2Z1bGxJbWFnZX0gLz5cbiAgICAgICAgICA8SW1hZ2Ugc3R5bGU9e1tzdHlsZXMuYmFzZSwgc3R5bGVzLm9wYWNpdHkzXX0gc291cmNlPXtmdWxsSW1hZ2V9IC8+XG4gICAgICAgICAgPEltYWdlIHN0eWxlPXtbc3R5bGVzLmJhc2UsIHN0eWxlcy5vcGFjaXR5NF19IHNvdXJjZT17ZnVsbEltYWdlfSAvPlxuICAgICAgICAgIDxJbWFnZSBzdHlsZT17W3N0eWxlcy5iYXNlLCBzdHlsZXMub3BhY2l0eTVdfSBzb3VyY2U9e2Z1bGxJbWFnZX0gLz5cbiAgICAgICAgICA8SW1hZ2Ugc3R5bGU9e1tzdHlsZXMuYmFzZSwgc3R5bGVzLm9wYWNpdHk2XX0gc291cmNlPXtmdWxsSW1hZ2V9IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTmVzdGluZyBjb250ZW50IGluc2lkZSA8SW1hZ2U+IGNvbXBvbmVudCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJhc2V9PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e3suLi5TdHlsZVNoZWV0LmFic29sdXRlRmlsbE9iamVjdH19XG4gICAgICAgICAgICBzb3VyY2U9e2Z1bGxJbWFnZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMubmVzdGVkVGV4dH0+UmVhY3Q8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTmVzdGluZyBjb250ZW50IGluc2lkZSA8SW1hZ2VCYWNrZ3JvdW5kPiBjb21wb25lbnQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEltYWdlQmFja2dyb3VuZFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMudHJhbnNwYXJlbnRJbWFnZUJhY2tncm91bmR9XG4gICAgICAgICAgc291cmNlPXtmdWxsSW1hZ2V9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMubmVzdGVkVGV4dH0+UmVhY3Q8L1RleHQ+XG4gICAgICAgIDwvSW1hZ2VCYWNrZ3JvdW5kPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUaW50IENvbG9yJyxcbiAgICBkZXNjcmlwdGlvbjogKCdUaGUgYHRpbnRDb2xvcmAgcHJvcCBjaGFuZ2VzIGFsbCB0aGUgbm9uLWFscGhhICcgK1xuICAgICAgJ3BpeGVscyB0byB0aGUgdGludCBjb2xvci4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy91aWVfdGh1bWJfbm9ybWFsLnBuZycpfVxuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5pY29uLFxuICAgICAgICAgICAgICAgIHN0eWxlcy5pbWFnZVdpdGhCb3JkZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgc3R5bGVzLnRpbnRDb2xvcjEsXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAgIHRpbnRDb2xvcj17JyM1YWM4ZmEnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy91aWVfdGh1bWJfbm9ybWFsLnBuZycpfVxuICAgICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5pY29uLCBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzXX1cbiAgICAgICAgICAgICAgdGludENvbG9yPXsnIzRjZDk2NCd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL3VpZV90aHVtYl9ub3JtYWwucG5nJyl9XG4gICAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmljb24sIHN0eWxlcy5pbWFnZVdpdGhCb3JkZXJSYWRpdXNdfVxuICAgICAgICAgICAgICB0aW50Q29sb3I9eycjZmYyZDU1J31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuaWNvbiwgc3R5bGVzLmltYWdlV2l0aEJvcmRlclJhZGl1c119XG4gICAgICAgICAgICAgIHRpbnRDb2xvcj17JyM4ZThlOTMnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zZWN0aW9uVGV4dH0+XG4gICAgICAgICAgICBJdCBhbHNvIHdvcmtzIHVzaW5nIHRoZSBgdGludENvbG9yYCBzdHlsZSBwcm9wXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3IyLFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy91aWVfdGh1bWJfbm9ybWFsLnBuZycpfVxuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5pY29uLFxuICAgICAgICAgICAgICAgIHN0eWxlcy5pbWFnZVdpdGhCb3JkZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgc3R5bGVzLnRpbnRDb2xvcjMsXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL3VpZV90aHVtYl9ub3JtYWwucG5nJyl9XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgICAgICAgICAgc3R5bGVzLmltYWdlV2l0aEJvcmRlclJhZGl1cyxcbiAgICAgICAgICAgICAgICBzdHlsZXMudGludENvbG9yMSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3I0LFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zZWN0aW9uVGV4dH0+XG4gICAgICAgICAgICBUaGUgYHRpbnRDb2xvcmAgcHJvcCBoYXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBgdGludENvbG9yYCBzdHlsZSBwcm9wXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3IyLFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICB0aW50Q29sb3I9eycjNWFjOGZhJ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3IzLFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICB0aW50Q29sb3I9eycjNWFjOGZhJ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3IxLFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICB0aW50Q29sb3I9eycjNWFjOGZhJ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdWllX3RodW1iX25vcm1hbC5wbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3I0LFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICB0aW50Q29sb3I9eycjNWFjOGZhJ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuc2VjdGlvblRleHR9PlxuICAgICAgICAgICAgSXQgYWxzbyB3b3JrcyB3aXRoIGRvd25sb2FkZWQgaW1hZ2VzOlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgIHNvdXJjZT17c21hbGxJbWFnZX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuYmFzZSxcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3IyLFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICBzb3VyY2U9e3NtYWxsSW1hZ2V9XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmJhc2UsXG4gICAgICAgICAgICAgICAgc3R5bGVzLmltYWdlV2l0aEJvcmRlclJhZGl1cyxcbiAgICAgICAgICAgICAgICBzdHlsZXMudGludENvbG9yMyxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc291cmNlPXtzbWFsbEltYWdlfVxuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5iYXNlLFxuICAgICAgICAgICAgICAgIHN0eWxlcy5pbWFnZVdpdGhCb3JkZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgc3R5bGVzLnRpbnRDb2xvcjEsXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgIHNvdXJjZT17c21hbGxJbWFnZX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuYmFzZSxcbiAgICAgICAgICAgICAgICBzdHlsZXMuaW1hZ2VXaXRoQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgIHN0eWxlcy50aW50Q29sb3I0LFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnT2JqZWN0IEZpdCcsXG4gICAgZGVzY3JpcHRpb246ICgnVGhlIGBvYmplY3RGaXRgIHN0eWxlIHByb3AgY29udHJvbHMgaG93IHRoZSBpbWFnZSBpcyAnICtcbiAgICAgICdyZW5kZXJlZCB3aXRoaW4gdGhlIGZyYW1lLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICB7W3NtYWxsSW1hZ2UsIGZ1bGxJbWFnZV0ubWFwKChpbWFnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxWaWV3IGtleT17aW5kZXh9PlxuICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5yZXNpemVNb2RlVGV4dH0+Q29udGFpbjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMucmVzaXplTW9kZSwgc3R5bGVzLm9iamVjdEZpdENvbnRhaW5dfVxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT17aW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxlZnRNYXJnaW59PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGVUZXh0fT5Db3ZlcjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMucmVzaXplTW9kZSwgc3R5bGVzLm9iamVjdEZpdENvdmVyXX1cbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9e2ltYWdlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMucmVzaXplTW9kZVRleHR9PkZpbGw8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLnJlc2l6ZU1vZGUsIHN0eWxlcy5vYmplY3RGaXRGaWxsXX1cbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9e2ltYWdlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5sZWZ0TWFyZ2lufT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5yZXNpemVNb2RlVGV4dH0+U2NhbGUgRG93bjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMucmVzaXplTW9kZSwgc3R5bGVzLm9iamVjdEZpdFNjYWxlRG93bl19XG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlPXtpbWFnZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUmVzaXplIE1vZGUnLFxuICAgIGRlc2NyaXB0aW9uOiAoJ1RoZSBgcmVzaXplTW9kZWAgc3R5bGUgcHJvcCBjb250cm9scyBob3cgdGhlIGltYWdlIGlzICcgK1xuICAgICAgJ3JlbmRlcmVkIHdpdGhpbiB0aGUgZnJhbWUuJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIHtbc21hbGxJbWFnZSwgZnVsbEltYWdlXS5tYXAoKGltYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFZpZXcga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGVUZXh0fT5Db250YWluPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgcmVzaXplTW9kZT1cImNvbnRhaW5cIlxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT17aW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxlZnRNYXJnaW59PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGVUZXh0fT5Db3ZlcjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5yZXNpemVNb2RlfVxuICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZU1vZGU9XCJjb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlPXtpbWFnZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGVUZXh0fT5TdHJldGNoPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgcmVzaXplTW9kZT1cInN0cmV0Y2hcIlxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT17aW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxlZnRNYXJnaW59PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGVUZXh0fT5SZXBlYXQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucmVzaXplTW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICByZXNpemVNb2RlPVwicmVwZWF0XCJcbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9e2ltYWdlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5sZWZ0TWFyZ2lufT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5yZXNpemVNb2RlVGV4dH0+Q2VudGVyPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnJlc2l6ZU1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgcmVzaXplTW9kZT1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlPXtpbWFnZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQW5pbWF0ZWQgR0lGJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxJbWFnZVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZ2lmfVxuICAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL3R1bWJscl9tZnFla3BNa3R3MXJuOTB1bW8xXzUwMC5naWYnKX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0Jhc2U2NCBpbWFnZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SW1hZ2Ugc3R5bGU9e3N0eWxlcy5iYXNlNjR9IHNvdXJjZT17e3VyaTogYmFzZTY0SWNvbiwgc2NhbGU6IDN9fSAvPlxuICAgICAgKTtcbiAgICB9LFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ2FwIEluc2V0cycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoJ1doZW4gdGhlIGltYWdlIGlzIHJlc2l6ZWQsIHRoZSBjb3JuZXJzIG9mIHRoZSBzaXplIHNwZWNpZmllZCAnICtcbiAgICAgICAgJ2J5IGNhcEluc2V0cyB3aWxsIHN0YXkgYSBmaXhlZCBzaXplLCBidXQgdGhlIGNlbnRlciBjb250ZW50IGFuZCAnICtcbiAgICAgICAgJ2JvcmRlcnMgb2YgdGhlIGltYWdlIHdpbGwgYmUgc3RyZXRjaGVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgJyArXG4gICAgICAgICdyZXNpemFibGUgcm91bmRlZCBidXR0b25zLCBzaGFkb3dzLCBhbmQgb3RoZXIgcmVzaXphYmxlIGFzc2V0cy4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxJbWFnZUNhcEluc2V0c0V4YW1wbGUgLz47XG4gICAgfSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ltYWdlIFNpemUnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxJbWFnZVNpemVFeGFtcGxlIHNvdXJjZT17ZnVsbEltYWdlfSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNdWx0aXBsZVNvdXJjZXNFeGFtcGxlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnVGhlIGBzb3VyY2VgIHByb3AgYWxsb3dzIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgdXJpcywgc28gdGhhdCBuYXRpdmUgdG8gY2hvb3NlIHdoaWNoIGltYWdlICcgK1xuICAgICAgICAndG8gZGlwbGF5IGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBvZiB0aGUgdGFyZ2V0IGltYWdlJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8TXVsdGlwbGVTb3VyY2VzRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMZWdhY3kgbG9jYWwgaW1hZ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAoJ0ltYWdlcyBzaGlwcGVkIHdpdGggdGhlIG5hdGl2ZSBidW5kbGUsIGJ1dCBub3QgbWFuYWdlZCAnICtcbiAgICAgICdieSB0aGUgSlMgcGFja2FnZXInOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxJbWFnZSBzb3VyY2U9e3t1cmk6ICdsZWdhY3lfaW1hZ2UnLCB3aWR0aDogMTIwLCBoZWlnaHQ6IDEyMH19IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0J1bmRsZWQgaW1hZ2VzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ltYWdlcyBzaGlwcGVkIGluIGEgc2VwYXJhdGUgbmF0aXZlIGJ1bmRsZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmZsZXhSb3d9PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc291cmNlPXt7XG4gICAgICAgICAgICAgIHVyaTogJ0ltYWdlSW5CdW5kbGUnLFxuICAgICAgICAgICAgICBidW5kbGU6ICdSTlRlc3RlckJ1bmRsZScsXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuaW1hZ2VJbkJ1bmRsZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc291cmNlPXt7XG4gICAgICAgICAgICAgIHVyaTogJ0ltYWdlSW5Bc3NldENhdGFsb2cnLFxuICAgICAgICAgICAgICBidW5kbGU6ICdSTlRlc3RlckJ1bmRsZScsXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuaW1hZ2VJbkFzc2V0Q2F0YWxvZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gICAgcGxhdGZvcm06ICdpb3MnLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdCbHVyIFJhZGl1cycsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgIDxJbWFnZSBzdHlsZT17c3R5bGVzLmJhc2V9IHNvdXJjZT17ZnVsbEltYWdlfSBibHVyUmFkaXVzPXswfSAvPlxuICAgICAgICAgIDxJbWFnZSBzdHlsZT17c3R5bGVzLmJhc2V9IHNvdXJjZT17ZnVsbEltYWdlfSBibHVyUmFkaXVzPXs1fSAvPlxuICAgICAgICAgIDxJbWFnZSBzdHlsZT17c3R5bGVzLmJhc2V9IHNvdXJjZT17ZnVsbEltYWdlfSBibHVyUmFkaXVzPXsxMH0gLz5cbiAgICAgICAgICA8SW1hZ2Ugc3R5bGU9e3N0eWxlcy5iYXNlfSBzb3VyY2U9e2Z1bGxJbWFnZX0gYmx1clJhZGl1cz17MTV9IC8+XG4gICAgICAgICAgPEltYWdlIHN0eWxlPXtzdHlsZXMuYmFzZX0gc291cmNlPXtmdWxsSW1hZ2V9IGJsdXJSYWRpdXM9ezIwfSAvPlxuICAgICAgICAgIDxJbWFnZSBzdHlsZT17c3R5bGVzLmJhc2V9IHNvdXJjZT17ZnVsbEltYWdlfSBibHVyUmFkaXVzPXsyNX0gLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBY2Nlc3NpYmlsaXR5JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnSWYgdGhlIGBhY2Nlc3NpYmxlYCAoYm9vbGVhbikgcHJvcCBpcyBzZXQgdG8gVHJ1ZSwgdGhlIGltYWdlIHdpbGwgYmUgaW5kaWNhdGVkIGFzIGFuIGFjY2Vzc2JpbGl0eSBlbGVtZW50Lic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEltYWdlIGFjY2Vzc2libGUgc291cmNlPXtmdWxsSW1hZ2V9IHN0eWxlPXtzdHlsZXMuYmFzZX0gLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQWNjZXNzaWJpbGl0eSBMYWJlbCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoJ1doZW4gYW4gZWxlbWVudCBpcyBtYXJrZWQgYXMgYWNjZXNzaWJpbGUgKHVzaW5nIHRoZSBhY2Nlc3NpYmlsaXR5IHByb3ApLCBpdCBpcyBnb29kIHByYWN0aWNlIHRvIHNldCBhbiBhY2Nlc3NpYmlsaXR5TGFiZWwgb24gdGhlIGltYWdlIHRvIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudCB0byBwZW9wbGUgd2hvIHVzZSBWb2ljZU92ZXIuIFZvaWNlT3ZlciB3aWxsIHJlYWQgdGhpcyBzdHJpbmcgd2hlbiBwZW9wbGUgc2VsZWN0IHRoaXMgZWxlbWVudC4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEltYWdlXG4gICAgICAgICAgYWNjZXNzaWJsZVxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIlBpY3R1cmUgb2YgcGVvcGxlIHN0YW5kaW5nIGFyb3VuZCBhIHRhYmxlXCJcbiAgICAgICAgICBzb3VyY2U9e2Z1bGxJbWFnZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmJhc2V9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0FjY2Vzc2liaWxpdHkgTGFiZWwgdmlhIGFsdCBwcm9wJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVc2luZyB0aGUgYWx0IHByb3AgbWFya2VzIGFuIGVsZW1lbnQgYXMgYmVpbmcgYWNjZXNzaWJpbGUsIGFuZCBwYXNzZXMgdGhlIGFsdCB0ZXh0IHRvIGFjY2Vzc2liaWxpdHlMYWJlbCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SW1hZ2VcbiAgICAgICAgICBhbHQ9XCJQaWN0dXJlIG9mIHBlb3BsZSBzdGFuZGluZyBhcm91bmQgYSB0YWJsZVwiXG4gICAgICAgICAgc291cmNlPXtmdWxsSW1hZ2V9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5iYXNlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdGYWRlIER1cmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnVGhlIHRpbWUgKGluIG1pbGlzZWNvbmRzKSB0aGF0IGFuIGltYWdlIHdpbGwgZmFkZSBpbiBmb3Igd2hlbiBpdCBhcHBlYXJzIChkZWZhdWx0ID0gMzAwKS4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8SW1hZ2UgZmFkZUR1cmF0aW9uPXsxNTAwfSBzb3VyY2U9e2Z1bGxJbWFnZX0gc3R5bGU9e3N0eWxlcy5iYXNlfSAvPlxuICAgICAgICAgIDxUZXh0PlRoaXMgaW1hZ2Ugd2lsbCBmYWRlIGluIG92ZXIgdGhlIHRpbWUgb2YgMS41cy48L1RleHQ+XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xvYWRpbmcgSW5kaWNhdG9yIFNvdXJjZScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoJ1RoaXMgcHJvcCBpcyB1c2VkIHRvIHNldCB0aGUgcmVzb3VyY2UgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIGZvciB0aGUgaW1hZ2UgKGRpc3BsYXllZCB1bnRpbCB0aGUgaW1hZ2UgaXMgcmVhZHkgdG8gYmUgZGlzcGxheWVkKS4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxMb2FkaW5nSW5kaWNhdG9yU291cmNlRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdPbiBMYXlvdXQnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgKCdUaGlzIHByb3AgaXMgdXNlZCB0byBzZXQgdGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGltYWdlIGlzIG1vdW50ZWQgb3IgaXRzIGxheW91dCBjaGFuZ2VzLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gZXZlbnQgd2l0aCBge25hdGl2ZUV2ZW50OiB7bGF5b3V0OiB7eCwgeSwgd2lkdGgsIGhlaWdodH19fWAnOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxPbkxheW91dEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnT24gUGFydGlhbCBMb2FkJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnVGhpcyBwcm9wIGlzIHVzZWQgdG8gc2V0IHRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBwYXJ0aWFsIGxvYWQgb2YgdGhlIGltYWdlIGlzIGNvbXBsZXRlLiBUaGlzIGlzIG1lYW50IGZvciBwcm9ncmVzc2l2ZSBKUEVHIGxvYWRzLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPE9uUGFydGlhbExvYWRFeGFtcGxlIC8+O1xuICAgIH0sXG4gICAgcGxhdGZvcm06ICdpb3MnLFxuICB9LFxuXTtcbiIsIiIsIiIsIiIsIiIsIiIsIiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IFJlYWN0TmF0aXZlID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5jb25zdCBuYXRpdmVJbWFnZVNvdXJjZSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW1hZ2UvbmF0aXZlSW1hZ2VTb3VyY2UnKTtcbmNvbnN0IHtJbWFnZSwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gPSBSZWFjdE5hdGl2ZTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fHx9PjtcbmNsYXNzIEltYWdlQ2FwSW5zZXRzRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJhY2tncm91bmR9PlxuICAgICAgICAgIDxUZXh0PmNhcEluc2V0czogbm9uZTwvVGV4dD5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHNvdXJjZT17bmF0aXZlSW1hZ2VTb3VyY2Uoe1xuICAgICAgICAgICAgICBpb3M6ICdzdG9yeS1iYWNrZ3JvdW5kJyxcbiAgICAgICAgICAgICAgd2lkdGg6IDYwLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDYwLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLnN0b3J5QmFja2dyb3VuZH1cbiAgICAgICAgICAgIHJlc2l6ZU1vZGU9XCJzdHJldGNoXCJcbiAgICAgICAgICAgIGNhcEluc2V0cz17e2xlZnQ6IDAsIHJpZ2h0OiAwLCBib3R0b206IDAsIHRvcDogMH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5iYWNrZ3JvdW5kLCB7cGFkZGluZ1RvcDogMTB9XX0+XG4gICAgICAgICAgPFRleHQ+Y2FwSW5zZXRzOiAxNTwvVGV4dD5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHNvdXJjZT17bmF0aXZlSW1hZ2VTb3VyY2Uoe1xuICAgICAgICAgICAgICBpb3M6ICdzdG9yeS1iYWNrZ3JvdW5kJyxcbiAgICAgICAgICAgICAgd2lkdGg6IDYwLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDYwLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLnN0b3J5QmFja2dyb3VuZH1cbiAgICAgICAgICAgIHJlc2l6ZU1vZGU9XCJzdHJldGNoXCJcbiAgICAgICAgICAgIGNhcEluc2V0cz17e2xlZnQ6IDE1LCByaWdodDogMTUsIGJvdHRvbTogMTUsIHRvcDogMTV9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYmFja2dyb3VuZDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNGNkY2RjYnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgc3RvcnlCYWNrZ3JvdW5kOiB7XG4gICAgd2lkdGg6IDI1MCxcbiAgICBoZWlnaHQ6IDE1MCxcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEltYWdlQ2FwSW5zZXRzRXhhbXBsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7SW1hZ2VVUklTb3VyY2V9IGZyb20gJy4vSW1hZ2VTb3VyY2UnO1xuXG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcblxudHlwZSBOYXRpdmVJbWFnZVNvdXJjZVNwZWMgPSAkUmVhZE9ubHk8e3xcbiAgYW5kcm9pZD86IHN0cmluZyxcbiAgaW9zPzogc3RyaW5nLFxuICBkZWZhdWx0Pzogc3RyaW5nLFxuXG4gIC8vIEZvciBtb3JlIGRldGFpbHMgb24gd2lkdGggYW5kIGhlaWdodCwgc2VlXG4gIC8vIGh0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvaW1hZ2VzI3doeS1ub3QtYXV0b21hdGljYWxseS1zaXplLWV2ZXJ5dGhpbmdcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG58fT47XG5cbi8qKlxuICogSW4gaHlicmlkIGFwcHMsIHVzZSBgbmF0aXZlSW1hZ2VTb3VyY2VgIHRvIGFjY2VzcyBpbWFnZXMgdGhhdCBhcmUgYWxyZWFkeVxuICogYXZhaWxhYmxlIG9uIHRoZSBuYXRpdmUgc2lkZSwgZm9yIGV4YW1wbGUgaW4gWGNvZGUgQXNzZXQgQ2F0YWxvZ3Mgb3JcbiAqIEFuZHJvaWQncyBkcmF3YWJsZSBmb2xkZXIuXG4gKlxuICogSG93ZXZlciwga2VlcCBpbiBtaW5kIHRoYXQgUmVhY3QgTmF0aXZlIFBhY2thZ2VyIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IHRoZVxuICogaW1hZ2UgZXhpc3RzLiBJZiB0aGUgaW1hZ2UgaXMgbWlzc2luZyB5b3UnbGwgZ2V0IGFuIGVtcHR5IGJveC4gV2hlbiBhZGRpbmdcbiAqIG5ldyBpbWFnZXMgeW91ciBhcHAgbmVlZHMgdG8gYmUgcmVjb21waWxlZC5cbiAqXG4gKiBQcmVmZXIgU3RhdGljIEltYWdlIFJlc291cmNlcyBzeXN0ZW0gd2hpY2ggcHJvdmlkZXMgbW9yZSBndWFyYW50ZWVzLFxuICogYXV0b21hdGVzIG1lYXN1cmVtZW50cyBhbmQgYWxsb3dzIGFkZGluZyBuZXcgaW1hZ2VzIHdpdGhvdXQgcmVidWlsZGluZyB0aGVcbiAqIG5hdGl2ZSBhcHAuIEZvciBtb3JlIGRldGFpbHMgdmlzaXQ6XG4gKlxuICogICBodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2ltYWdlc1xuICpcbiAqL1xuZnVuY3Rpb24gbmF0aXZlSW1hZ2VTb3VyY2Uoc3BlYzogTmF0aXZlSW1hZ2VTb3VyY2VTcGVjKTogSW1hZ2VVUklTb3VyY2Uge1xuICBsZXQgdXJpID0gUGxhdGZvcm0uc2VsZWN0KHtcbiAgICBhbmRyb2lkOiBzcGVjLmFuZHJvaWQsXG4gICAgZGVmYXVsdDogc3BlYy5kZWZhdWx0LFxuICAgIGlvczogc3BlYy5pb3MsXG4gIH0pO1xuICBpZiAodXJpID09IG51bGwpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnbmF0aXZlSW1hZ2VTb3VyY2UoLi4uKTogTm8gaW1hZ2UgbmFtZSBzdXBwbGllZCBmb3IgYCVzYDpcXG4lcycsXG4gICAgICBQbGF0Zm9ybS5PUyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHNwZWMsIG51bGwsIDIpLFxuICAgICk7XG4gICAgdXJpID0gJyc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkZXByZWNhdGVkOiB0cnVlLFxuICAgIGhlaWdodDogc3BlYy5oZWlnaHQsXG4gICAgdXJpLFxuICAgIHdpZHRoOiBzcGVjLndpZHRoLFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUltYWdlU291cmNlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB7UGFuUmVzcG9uZGVyLCBTY3JvbGxWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7U3R5bGVTaGVldCwgVGV4dCwgVmlld30gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuZXhwb3J0cy5kaXNwbGF5TmFtZSA9ICdKU1Jlc3BvbmRlckhhbmRsZXJFeGFtcGxlJztcbmV4cG9ydHMuZnJhbWV3b3JrID0gJ1JlYWN0JztcbmV4cG9ydHMudGl0bGUgPSAnSlNSZXNwb25kZXJIYW5kbGVyJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnQmFzaWMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdTaW1wbGUgZXhhbXBsZSB0byB0ZXN0IEpTUmVzcG9uZGVySGFuZGxlci4nO1xuXG5jb25zdCBfZ2VzdHVyZSA9IFBhblJlc3BvbmRlci5jcmVhdGUoe1xuICBvbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXI6IChlLCBnZXN0dXJlU3RhdGUpID0+IHtcbiAgICByZXR1cm4gTWF0aC5hYnMoZ2VzdHVyZVN0YXRlLm1vdmVYKSA+IDE1MDtcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdKU1Jlc3BvbmRlckhhbmRsZXJFeGFtcGxlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnVGhpcyBleGFtcGxlIHRlc3RzIHRoZSBuYXRpdmUgSlNSZXNwb25kZXJIYW5kbGVyOiB3aGVuIHRoZSB1c2VyICcgK1xuICAgICAgICAnc2Nyb2xscyBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgU2Nyb2xsVmlldyAod2hpdGUgYXJlYSBsb2NhdGVkIG9uIHRoZScgK1xuICAgICAgICAnIHJpZ2h0IHNpZGUgb2YgdGhlIGdyYXkgYXJlYSksIHRoZSB0b3VjaCBldmVudCBpcyBtYW5hZ2VkIGJ5IG5hdGl2ZSAnICtcbiAgICAgICAgJ3doaWNoIGJsb2NrcyB0aGUgc2Nyb2xsIGV2ZW50Lic6IHN0cmluZyksXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIGNvbnN0IHZpZXdzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgICAgIHZpZXdzW2ldID0gKFxuICAgICAgICAgIDxWaWV3IGtleT17aX0gc3R5bGU9e3N0eWxlcy5yb3d9IGNvbGxhcHNhYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRvdWNoYWJsZV9hcmVhfSBjb2xsYXBzYWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJyb3dfanNfcmVzcG9uZGVyX2hhbmRsZXJcIj5JIGFtIHJvdyB7aX08L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn1cbiAgICAgICAgICB7Li4uX2dlc3R1cmUucGFuSGFuZGxlcnN9XG4gICAgICAgICAgY29sbGFwc2FibGU9e2ZhbHNlfT5cbiAgICAgICAgICA8U2Nyb2xsVmlldyBzdHlsZT17c3R5bGVzLnNjcm9sbHZpZXd9IHRlc3RJRD1cInNjcm9sbF92aWV3XCI+XG4gICAgICAgICAgICB7dmlld3N9XG4gICAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5dO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIHNjcm9sbHZpZXc6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICByb3c6IHtcbiAgICBoZWlnaHQ6IDI1LFxuICB9LFxuICB0b3VjaGFibGVfYXJlYToge1xuICAgIHdpZHRoOiAxNTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnbGlnaHRncmF5JyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBBbGVydCxcbiAgQnV0dG9uLFxuICBJbnB1dEFjY2Vzc29yeVZpZXcsXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxudHlwZSBNZXNzYWdlUHJvcHMgPSAkUmVhZE9ubHk8e3x8fT47XG5jbGFzcyBNZXNzYWdlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxNZXNzYWdlUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRleHRCdWJibGVCYWNrZ3JvdW5kfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5UZXh0IE1lc3NhZ2U8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG50eXBlIFRleHRJbnB1dFByb3BzID0gJFJlYWRPbmx5PHt8fH0+O1xudHlwZSBUZXh0SW5wdXRTdGF0ZSA9IHt8dGV4dDogc3RyaW5nfH07XG5jbGFzcyBUZXh0SW5wdXRCYXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFRleHRJbnB1dFByb3BzLCBUZXh0SW5wdXRTdGF0ZT4ge1xuICBzdGF0ZTogVGV4dElucHV0U3RhdGUgPSB7dGV4dDogJyd9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXRDb250YWluZXJ9PlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXR9XG4gICAgICAgICAgb25DaGFuZ2VUZXh0PXt0ZXh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHR9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnRleHR9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9eydUeXBlIGEgbWVzc2FnZS4uLid9XG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBBbGVydC5hbGVydCgnWW91IHRhcHBlZCB0aGUgYnV0dG9uIScpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9XCJTZW5kXCJcbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEJBUl9IRUlHSFQgPSA0NDtcbnR5cGUgSW5wdXRBY2Nlc3NvcnlQcm9wcyA9ICRSZWFkT25seTx7fHx9PjtcbmNsYXNzIElucHV0QWNjZXNzb3J5Vmlld0V4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SW5wdXRBY2Nlc3NvcnlQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTY3JvbGxWaWV3IHN0eWxlPXtzdHlsZXMuZmlsbH0ga2V5Ym9hcmREaXNtaXNzTW9kZT1cImludGVyYWN0aXZlXCI+XG4gICAgICAgICAge0FycmF5KDE1KVxuICAgICAgICAgICAgLmZpbGwoKVxuICAgICAgICAgICAgLm1hcCgoXywgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2l9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICA8SW5wdXRBY2Nlc3NvcnlWaWV3IGJhY2tncm91bmRDb2xvcj1cIiNmZmZmZmZmN1wiPlxuICAgICAgICAgIDxUZXh0SW5wdXRCYXIgLz5cbiAgICAgICAgPC9JbnB1dEFjY2Vzc29yeVZpZXc+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgZmlsbDoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIHRleHRJbnB1dENvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJvcmRlclRvcFdpZHRoOiAxLFxuICAgIGJvcmRlclRvcENvbG9yOiAnI2VlZScsXG4gICAgaGVpZ2h0OiBCQVJfSEVJR0hULFxuICB9LFxuICB0ZXh0SW5wdXQ6IHtcbiAgICBmbGV4OiAxLFxuICAgIHBhZGRpbmdMZWZ0OiAxMCxcbiAgfSxcbiAgdGV4dDoge1xuICAgIHBhZGRpbmc6IDEwLFxuICAgIGNvbG9yOiAnd2hpdGUnLFxuICB9LFxuICB0ZXh0QnViYmxlQmFja2dyb3VuZDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyMyZjdiZjYnLFxuICAgIGJvcmRlclJhZGl1czogMjAsXG4gICAgd2lkdGg6IDExMCxcbiAgICBtYXJnaW46IDIwLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnSW5wdXRBY2Nlc3NvcnlWaWV3JztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPVxuICAnRXhhbXBsZSBzaG93aW5nIGhvdyB0byB1c2UgYW4gSW5wdXRBY2Nlc3NvcnlWaWV3IHRvIGJ1aWxkIGFuIGlNZXNzYWdlLWxpa2Ugc3RpY2t5IHRleHQgaW5wdXQnO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnU2ltcGxlIHZpZXcgd2l0aCBzdGlja3kgaW5wdXQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxJbnB1dEFjY2Vzc29yeVZpZXdFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7dXNlU3RhdGV9ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQWxlcnQsXG4gIEJ1dHRvbixcbiAgS2V5Ym9hcmRBdm9pZGluZ1ZpZXcsXG4gIE1vZGFsLFxuICBQcmVzc2FibGUsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY29uc3Qgb25CdXR0b25QcmVzcyA9ICgpID0+IHtcbiAgQWxlcnQuYWxlcnQoJ1N1Y2Nlc3NmdWxseSBSZWdpc3RlcmVkIScpO1xufTtcblxuY29uc3QgVGV4dElucHV0Rm9ybSA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbWFpbFwiIHN0eWxlPXtzdHlsZXMudGV4dElucHV0fSAvPlxuICAgICAgPFRleHRJbnB1dCBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lXCIgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXR9IC8+XG4gICAgICA8VGV4dElucHV0IHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBzdHlsZT17c3R5bGVzLnRleHRJbnB1dH0gLz5cbiAgICAgIDxUZXh0SW5wdXQgcGxhY2Vob2xkZXI9XCJDb25maXJtIFBhc3N3b3JkXCIgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXR9IC8+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIHRlc3RJRD1cInJlZ2lzdGVyX2J1dHRvblwiXG4gICAgICAgIHRpdGxlPVwiUmVnaXN0ZXJcIlxuICAgICAgICBvblByZXNzPXtvbkJ1dHRvblByZXNzfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBDbG9zZUJ1dHRvbiA9IChcbiAgcHJvcHM6XG4gICAgfCB7YmVoYXZpb3I6IGFueSwgc2V0TW9kYWxPcGVuOiBhbnl9XG4gICAgfCB7YmVoYXZpb3I6IHN0cmluZywgc2V0TW9kYWxPcGVuOiBhbnl9LFxuKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIHN0eWxlPXtbXG4gICAgICAgIHN0eWxlcy5jbG9zZVZpZXcsXG4gICAgICAgIHttYXJnaW5Ib3Jpem9udGFsOiBwcm9wcy5iZWhhdmlvciA9PT0gJ3Bvc2l0aW9uJyA/IDAgOiAyNX0sXG4gICAgICBdfT5cbiAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgb25QcmVzcz17KCkgPT4gcHJvcHMuc2V0TW9kYWxPcGVuKGZhbHNlKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy5jbG9zZUJ1dHRvbn0+XG4gICAgICAgIDxUZXh0PkNsb3NlPC9UZXh0PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgS2V5Ym9hcmRBdm9pZGluZ1ZpZXdCZWhhdmlvdXIgPSAoKSA9PiB7XG4gIGNvbnN0IFttb2RhbE9wZW4sIHNldE1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtiZWhhdmlvciwgc2V0QmVoYXZpb3JdID0gdXNlU3RhdGUoJ3BhZGRpbmcnKTtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLm91dGVyQ29udGFpbmVyfT5cbiAgICAgIDxNb2RhbCBhbmltYXRpb25UeXBlPVwiZmFkZVwiIHZpc2libGU9e21vZGFsT3Blbn0+XG4gICAgICAgIDxLZXlib2FyZEF2b2lkaW5nVmlldyBiZWhhdmlvcj17YmVoYXZpb3J9IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0QmVoYXZpb3IoJ3BhZGRpbmcnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMucGlsbFN0eWxlLFxuICAgICAgICAgICAgICAgIHtiYWNrZ3JvdW5kQ29sb3I6IGJlaGF2aW9yID09PSAncGFkZGluZycgPyAnYmx1ZScgOiAnd2hpdGUnfSxcbiAgICAgICAgICAgICAgXX0+XG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Y29sb3I6IGJlaGF2aW9yID09PSAncGFkZGluZycgPyAnd2hpdGUnIDogJ2JsdWUnfX0+XG4gICAgICAgICAgICAgICAgUGFkZGluZ1xuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRCZWhhdmlvcigncG9zaXRpb24nKX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMucGlsbFN0eWxlLFxuICAgICAgICAgICAgICAgIHtiYWNrZ3JvdW5kQ29sb3I6IGJlaGF2aW9yID09PSAncG9zaXRpb24nID8gJ2JsdWUnIDogJ3doaXRlJ30sXG4gICAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiBiZWhhdmlvciA9PT0gJ3Bvc2l0aW9uJyA/ICd3aGl0ZScgOiAnYmx1ZSd9fT5cbiAgICAgICAgICAgICAgICBQb3NpdGlvblxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRCZWhhdmlvcignaGVpZ2h0Jyl9XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLnBpbGxTdHlsZSxcbiAgICAgICAgICAgICAgICB7YmFja2dyb3VuZENvbG9yOiBiZWhhdmlvciA9PT0gJ2hlaWdodCcgPyAnYmx1ZScgOiAnd2hpdGUnfSxcbiAgICAgICAgICAgICAgXX0+XG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBiZWhhdmlvciA9PT0gJ2hlaWdodCcgPyAnd2hpdGUnIDogJ2JsdWUnLFxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIEhlaWdodFxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBiZWhhdmlvcj17YmVoYXZpb3J9IHNldE1vZGFsT3Blbj17c2V0TW9kYWxPcGVufSAvPlxuICAgICAgICAgIDxUZXh0SW5wdXRGb3JtIC8+XG4gICAgICAgIDwvS2V5Ym9hcmRBdm9pZGluZ1ZpZXc+XG4gICAgICA8L01vZGFsPlxuICAgICAgPFZpZXc+XG4gICAgICAgIDxQcmVzc2FibGUgb25QcmVzcz17KCkgPT4gc2V0TW9kYWxPcGVuKHRydWUpfT5cbiAgICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJrZXlib2FyZF9hdm9pZGluZ192aWV3X2JlaGF2aW9yc19vcGVuXCI+XG4gICAgICAgICAgICBPcGVuIEV4YW1wbGVcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IEtleWJvYXJkQXZvaWRpbmdEaXNhYmxlZCA9ICgpID0+IHtcbiAgY29uc3QgW21vZGFsT3Blbiwgc2V0TW9kYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLm91dGVyQ29udGFpbmVyfT5cbiAgICAgIDxNb2RhbCBhbmltYXRpb25UeXBlPVwiZmFkZVwiIHZpc2libGU9e21vZGFsT3Blbn0+XG4gICAgICAgIDxLZXlib2FyZEF2b2lkaW5nVmlld1xuICAgICAgICAgIGVuYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgIGJlaGF2aW9yPXsnaGVpZ2h0J31cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPENsb3NlQnV0dG9uIGJlaGF2aW9yPXsnaGVpZ2h0J30gc2V0TW9kYWxPcGVuPXtzZXRNb2RhbE9wZW59IC8+XG4gICAgICAgICAgPFRleHRJbnB1dEZvcm0gLz5cbiAgICAgICAgPC9LZXlib2FyZEF2b2lkaW5nVmlldz5cbiAgICAgIDwvTW9kYWw+XG4gICAgICA8Vmlldz5cbiAgICAgICAgPFByZXNzYWJsZSBvblByZXNzPXsoKSA9PiBzZXRNb2RhbE9wZW4odHJ1ZSl9PlxuICAgICAgICAgIDxUZXh0Pk9wZW4gRXhhbXBsZTwvVGV4dD5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgS2V5Ym9hcmRBdm9pZGluZ1ZlcnRpY2FsT2Zmc2V0ID0gKCkgPT4ge1xuICBjb25zdCBbbW9kYWxPcGVuLCBzZXRNb2RhbE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMub3V0ZXJDb250YWluZXJ9PlxuICAgICAgPE1vZGFsIGFuaW1hdGlvblR5cGU9XCJmYWRlXCIgdmlzaWJsZT17bW9kYWxPcGVufT5cbiAgICAgICAgPEtleWJvYXJkQXZvaWRpbmdWaWV3XG4gICAgICAgICAga2V5Ym9hcmRWZXJ0aWNhbE9mZnNldD17MjB9XG4gICAgICAgICAgYmVoYXZpb3I9eydwYWRkaW5nJ31cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPENsb3NlQnV0dG9uIGJlaGF2aW9yPXsnaGVpZ2h0J30gc2V0TW9kYWxPcGVuPXtzZXRNb2RhbE9wZW59IC8+XG4gICAgICAgICAgPFRleHRJbnB1dEZvcm0gLz5cbiAgICAgICAgPC9LZXlib2FyZEF2b2lkaW5nVmlldz5cbiAgICAgIDwvTW9kYWw+XG4gICAgICA8Vmlldz5cbiAgICAgICAgPFByZXNzYWJsZSBvblByZXNzPXsoKSA9PiBzZXRNb2RhbE9wZW4odHJ1ZSl9PlxuICAgICAgICAgIDxUZXh0Pk9wZW4gRXhhbXBsZTwvVGV4dD5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgS2V5Ym9hcmRBdm9pZGluZ0NvbnRlbnRDb250YWluZXJTdHlsZSA9ICgpID0+IHtcbiAgY29uc3QgW21vZGFsT3Blbiwgc2V0TW9kYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxNb2RhbCBhbmltYXRpb25UeXBlPVwiZmFkZVwiIHZpc2libGU9e21vZGFsT3Blbn0+XG4gICAgICAgIDxLZXlib2FyZEF2b2lkaW5nVmlld1xuICAgICAgICAgIGtleWJvYXJkVmVydGljYWxPZmZzZXQ9ezIwfVxuICAgICAgICAgIGJlaGF2aW9yPXsncG9zaXRpb24nfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfVxuICAgICAgICAgIGNvbnRlbnRDb250YWluZXJTdHlsZT17c3R5bGVzLmNvbnRlbnRDb250YWluZXJ9PlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBiZWhhdmlvcj17J2hlaWdodCd9IHNldE1vZGFsT3Blbj17c2V0TW9kYWxPcGVufSAvPlxuICAgICAgICAgIDxUZXh0SW5wdXRGb3JtIC8+XG4gICAgICAgIDwvS2V5Ym9hcmRBdm9pZGluZ1ZpZXc+XG4gICAgICA8L01vZGFsPlxuICAgICAgPFZpZXc+XG4gICAgICAgIDxQcmVzc2FibGUgb25QcmVzcz17KCkgPT4gc2V0TW9kYWxPcGVuKHRydWUpfT5cbiAgICAgICAgICA8VGV4dD5PcGVuIEV4YW1wbGU8L1RleHQ+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgb3V0ZXJDb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMjAsXG4gICAgcGFkZGluZ1RvcDogMjAsXG4gIH0sXG4gIGNvbnRlbnRDb250YWluZXI6IHtcbiAgICBwYWRkaW5nVG9wOiAyMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjYWJkZWJmJyxcbiAgfSxcbiAgdGV4dElucHV0OiB7XG4gICAgYm9yZGVyUmFkaXVzOiA1LFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGhlaWdodDogNDQsXG4gICAgd2lkdGg6IDMwMCxcbiAgICBtYXJnaW5Cb3R0b206IDIwLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgfSxcbiAgY2xvc2VWaWV3OiB7XG4gICAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIH0sXG4gIHBpbGxTdHlsZToge1xuICAgIHBhZGRpbmc6IDEwLFxuICAgIG1hcmdpbkhvcml6b250YWw6IDUsXG4gICAgbWFyZ2luVmVydGljYWw6IDEwLFxuICAgIGJvcmRlclJhZGl1czogMjAsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdibHVlJyxcbiAgfSxcbiAgY2xvc2VCdXR0b246IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICBtYXJnaW5WZXJ0aWNhbDogMTAsXG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG59KTtcblxuZXhwb3J0cy50aXRsZSA9ICdLZXlib2FyZEF2b2lkaW5nVmlldyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID1cbiAgJ0Jhc2UgY29tcG9uZW50IGZvciB2aWV3cyB0aGF0IGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZWlyIGhlaWdodCBvciBwb3NpdGlvbiB0byBtb3ZlIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBrZXlib2FyZC4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmQgQXZvaWRpbmcgVmlldyB3aXRoIGRpZmZlcmVudCBiZWhhdmlvcnMnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgKCdTcGVjaWZ5IGhvdyB0byByZWFjdCB0byB0aGUgcHJlc2VuY2Ugb2YgdGhlIGtleWJvYXJkLiBBbmRyb2lkIGFuZCBpT1MgYm90aCBpbnRlcmFjdCcgK1xuICAgICAgICAnd2l0aCB0aGlzIHByb3AgZGlmZmVyZW50bHkuIE9uIGJvdGggaU9TIGFuZCBBbmRyb2lkLCBzZXR0aW5nIGJlaGF2aW9yIGlzIHJlY29tbWVuZGVkLic6IHN0cmluZyksXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZEF2b2lkaW5nVmlld0JlaGF2aW91ciAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdLZXlib2FyZCBBdm9pZGluZyBWaWV3IHdpdGgga2V5Ym9hcmRWZXJ0aWNhbE9mZnNldD17ZGlzdGFuY2V9JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnVGhpcyBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSB1c2VyIHNjcmVlbiBhbmQgdGhlIHJlYWN0IG5hdGl2ZScgK1xuICAgICAgICAndmlldywgbWF5IGJlIG5vbi16ZXJvIGluIHNvbWUgdXNlIGNhc2VzLiBEZWZhdWx0cyB0byAwLic6IHN0cmluZyksXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZEF2b2lkaW5nVmVydGljYWxPZmZzZXQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmQgQXZvaWRpbmcgVmlldyB3aXRoIGVuYWJsZWQ9e2ZhbHNlfScsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZEF2b2lkaW5nRGlzYWJsZWQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmQgQXZvaWRpbmcgVmlldyB3aXRoIGNvbnRlbnRDb250YWluZXJTdHlsZScsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZEF2b2lkaW5nQ29udGVudENvbnRhaW5lclN0eWxlIC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFZpZXdMYXlvdXQsXG4gIFZpZXdMYXlvdXRFdmVudCxcbn0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgSW1hZ2UsXG4gIExheW91dEFuaW1hdGlvbixcbiAgU3R5bGVTaGVldCxcbiAgVGV4dCxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fHx9PjtcbnR5cGUgU3RhdGUgPSB7XG4gIGNvbnRhaW5lclN0eWxlPzoge3x3aWR0aDogbnVtYmVyfH0sXG4gIGV4dHJhVGV4dD86IHN0cmluZyxcbiAgaW1hZ2VMYXlvdXQ/OiBWaWV3TGF5b3V0LFxuICB0ZXh0TGF5b3V0PzogVmlld0xheW91dCxcbiAgdmlld0xheW91dD86IFZpZXdMYXlvdXQsXG4gIHZpZXdTdHlsZToge3xtYXJnaW46IG51bWJlcnx9LFxuICAuLi5cbn07XG5cbmNsYXNzIExheW91dEV2ZW50RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgc3RhdGU6IFN0YXRlID0ge1xuICAgIHZpZXdTdHlsZToge1xuICAgICAgbWFyZ2luOiAyMCxcbiAgICB9LFxuICB9O1xuXG4gIGFuaW1hdGVWaWV3TGF5b3V0ID0gKCkgPT4ge1xuICAgIExheW91dEFuaW1hdGlvbi5jb25maWd1cmVOZXh0KExheW91dEFuaW1hdGlvbi5QcmVzZXRzLnNwcmluZywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2xheW91dCBhbmltYXRpb24gZG9uZS4nKTtcbiAgICAgIHRoaXMuYWRkV3JhcFRleHQoKTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHZpZXdTdHlsZToge1xuICAgICAgICBtYXJnaW46IHRoaXMuc3RhdGUudmlld1N0eWxlLm1hcmdpbiA+IDIwID8gMjAgOiA2MCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgYWRkV3JhcFRleHQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtleHRyYVRleHQ6ICcgIEFuZCBhIGJ1bmNoIG1vcmUgdGV4dCB0byB3cmFwIGFyb3VuZCBhIGZldyBsaW5lcy4nfSxcbiAgICAgIHRoaXMuY2hhbmdlQ29udGFpbmVyLFxuICAgICk7XG4gIH07XG5cbiAgY2hhbmdlQ29udGFpbmVyID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe2NvbnRhaW5lclN0eWxlOiB7d2lkdGg6IDI4MH19KTtcbiAgfTtcblxuICBvblZpZXdMYXlvdXQgPSAoZTogVmlld0xheW91dEV2ZW50KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ3JlY2VpdmVkIHZpZXcgbGF5b3V0IGV2ZW50XFxuJywgZS5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7dmlld0xheW91dDogZS5uYXRpdmVFdmVudC5sYXlvdXR9KTtcbiAgfTtcblxuICBvblRleHRMYXlvdXQgPSAoZTogVmlld0xheW91dEV2ZW50KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ3JlY2VpdmVkIHRleHQgbGF5b3V0IGV2ZW50XFxuJywgZS5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7dGV4dExheW91dDogZS5uYXRpdmVFdmVudC5sYXlvdXR9KTtcbiAgfTtcblxuICBvbkltYWdlTGF5b3V0ID0gKGU6IFZpZXdMYXlvdXRFdmVudCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdyZWNlaXZlZCBpbWFnZSBsYXlvdXQgZXZlbnRcXG4nLCBlLm5hdGl2ZUV2ZW50KTtcbiAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUxheW91dDogZS5uYXRpdmVFdmVudC5sYXlvdXR9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qgdmlld1N0eWxlID0gW3N0eWxlcy52aWV3LCB0aGlzLnN0YXRlLnZpZXdTdHlsZV07XG4gICAgY29uc3QgdGV4dExheW91dCA9IHRoaXMuc3RhdGUudGV4dExheW91dCB8fCB7d2lkdGg6ICc/JywgaGVpZ2h0OiAnPyd9O1xuICAgIGNvbnN0IGltYWdlTGF5b3V0ID0gdGhpcy5zdGF0ZS5pbWFnZUxheW91dCB8fCB7eDogJz8nLCB5OiAnPyd9O1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17dGhpcy5zdGF0ZS5jb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIGxheW91dCBldmVudHMgYXJlIGNhbGxlZCBvbiBtb3VudCBhbmQgd2hlbmV2ZXIgbGF5b3V0IGlzIHJlY2FsY3VsYXRlZC5cbiAgICAgICAgICBOb3RlIHRoYXQgdGhlIGxheW91dCBldmVudCB3aWxsIHR5cGljYWxseSBiZSByZWNlaXZlZHsnICd9XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5pdGFsaWNUZXh0fT5iZWZvcmU8L1RleHQ+IHRoZSBsYXlvdXQgaGFzIHVwZGF0ZWRcbiAgICAgICAgICBvbiBzY3JlZW4sIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBsYXlvdXQgYW5pbWF0aW9ucy57JyAgJ31cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnByZXNzVGV4dH0gb25QcmVzcz17dGhpcy5hbmltYXRlVmlld0xheW91dH0+XG4gICAgICAgICAgICBQcmVzcyBoZXJlIHRvIGNoYW5nZSBsYXlvdXQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxWaWV3IG9uTGF5b3V0PXt0aGlzLm9uVmlld0xheW91dH0gc3R5bGU9e3ZpZXdTdHlsZX0+XG4gICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICBvbkxheW91dD17dGhpcy5vbkltYWdlTGF5b3V0fVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5pbWFnZX1cbiAgICAgICAgICAgIHNvdXJjZT17e1xuICAgICAgICAgICAgICB1cmk6ICdodHRwczovL3d3dy5mYWNlYm9vay5jb20vZmF2aWNvbi5pY28nLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgVmlld0xheW91dDp7JyAnfVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSAoPj0wLjk1LjAgc2l0ZT1yZWFjdF9uYXRpdmVfZmIpXG4gICAgICAgICAgICAgICAqIFRoaXMgY29tbWVudCBzdXBwcmVzc2VzIGFuIGVycm9yIGZvdW5kIHdoZW4gRmxvdyB2MC45NSB3YXNcbiAgICAgICAgICAgICAgICogZGVwbG95ZWQuIFRvIHNlZSB0aGUgZXJyb3IsIGRlbGV0ZSB0aGlzIGNvbW1lbnQgYW5kIHJ1biBGbG93LlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYWRkaXRpb25dXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUudmlld0xheW91dCwgbnVsbCwgJyAgJykgKyAnXFxuXFxuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBvbkxheW91dD17dGhpcy5vblRleHRMYXlvdXR9IHN0eWxlPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgICBBIHNpbXBsZSBwaWVjZSBvZiB0ZXh0Lnt0aGlzLnN0YXRlLmV4dHJhVGV4dH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7J1xcbid9XG4gICAgICAgICAgICBUZXh0IHcvaDoge3RleHRMYXlvdXQud2lkdGh9L3t0ZXh0TGF5b3V0LmhlaWdodCArICdcXG4nfVxuICAgICAgICAgICAgSW1hZ2UgeC95OiB7aW1hZ2VMYXlvdXQueH0ve2ltYWdlTGF5b3V0Lnl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHZpZXc6IHtcbiAgICBwYWRkaW5nOiAxMixcbiAgICBib3JkZXJDb2xvcjogJ2JsYWNrJyxcbiAgICBib3JkZXJXaWR0aDogMC41LFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgIGJvcmRlckNvbG9yOiAncmdiYSgwLCAwLCAyNTUsIDAuMiknLFxuICAgIGJvcmRlcldpZHRoOiAwLjUsXG4gIH0sXG4gIGltYWdlOiB7XG4gICAgd2lkdGg6IDUwLFxuICAgIGhlaWdodDogNTAsXG4gICAgbWFyZ2luQm90dG9tOiAxMCxcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICB9LFxuICBwcmVzc1RleHQ6IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIGl0YWxpY1RleHQ6IHtcbiAgICBmb250U3R5bGU6ICdpdGFsaWMnLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnTGF5b3V0IEV2ZW50cyc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAoJ0V4YW1wbGVzIHRoYXQgc2hvdyBob3cgTGF5b3V0IGV2ZW50cyBjYW4gYmUgdXNlZCB0byAnICtcbiAgJ21lYXN1cmUgdmlldyBzaXplIGFuZCBwb3NpdGlvbi4nOiBzdHJpbmcpO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnTGF5b3V0RXZlbnRFeGFtcGxlJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxMYXlvdXRFdmVudEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBNb2RhbE9uU2hvdyBmcm9tICcuL01vZGFsT25TaG93JztcbmltcG9ydCBNb2RhbFByZXNlbnRhdGlvbiBmcm9tICcuL01vZGFsUHJlc2VudGF0aW9uJztcblxuZXhwb3J0IGNvbnN0IGRpc3BsYXlOYW1lOiA/c3RyaW5nID0gdW5kZWZpbmVkO1xuZXhwb3J0IGNvbnN0IGZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnQgY29uc3QgdGl0bGUgPSAnTW9kYWwnO1xuZXhwb3J0IGNvbnN0IGNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydCBjb25zdCBkb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbW9kYWwnO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID0gJ0NvbXBvbmVudCBmb3IgcHJlc2VudGluZyBtb2RhbCB2aWV3cy4nO1xuZXhwb3J0IGNvbnN0IGV4YW1wbGVzOiBBcnJheTxSTlRlc3Rlck1vZHVsZUV4YW1wbGU+ID0gW1xuICBNb2RhbFByZXNlbnRhdGlvbixcbiAgTW9kYWxPblNob3csXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01vZGFsLCBQcmVzc2FibGUsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIE1vZGFsT25TaG93T25EaXNtaXNzKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbbW9kYWxTaG93Q29tcG9uZW50LCBzZXRNb2RhbFNob3dDb21wb25lbnRdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFttb2RhbFZpc2libGUsIHNldE1vZGFsVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtvblNob3dDb3VudCwgc2V0T25TaG93Q291bnRdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtvbkRpc21pc3NDb3VudCwgc2V0T25EaXNtaXNzQ291bnRdID0gUmVhY3QudXNlU3RhdGUoMCk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICB7bW9kYWxTaG93Q29tcG9uZW50ICYmIChcbiAgICAgICAgPE1vZGFsXG4gICAgICAgICAgYW5pbWF0aW9uVHlwZT1cInNsaWRlXCJcbiAgICAgICAgICB0cmFuc3BhcmVudD17dHJ1ZX1cbiAgICAgICAgICB2aXNpYmxlPXttb2RhbFZpc2libGV9XG4gICAgICAgICAgb25TaG93PXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRPblNob3dDb3VudChvblNob3dDb3VudCArIDEpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25EaXNtaXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRPbkRpc21pc3NDb3VudChvbkRpc21pc3NDb3VudCArIDEpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldE1vZGFsVmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuY2VudGVyZWRWaWV3LCBzdHlsZXMubW9kYWxCYWNrZHJvcF19PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5tb2RhbFZpZXd9PlxuICAgICAgICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJtb2RhbC1vbi1zaG93LWNvdW50XCI+XG4gICAgICAgICAgICAgICAgb25TaG93IGlzIGNhbGxlZCB7b25TaG93Q291bnR9IHRpbWVzXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPFRleHQgdGVzdElEPVwibW9kYWwtb24tZGlzbWlzcy1jb3VudFwiPlxuICAgICAgICAgICAgICAgIG9uRGlzbWlzcyBpcyBjYWxsZWQge29uRGlzbWlzc0NvdW50fSB0aW1lc1xuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5idXR0b24sIHN0eWxlcy5idXR0b25DbG9zZV19XG4gICAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0TW9kYWxWaXNpYmxlKGZhbHNlKX0+XG4gICAgICAgICAgICAgICAgPFRleHQgdGVzdElEPVwiZGlzbWlzcy1tb2RhbFwiIHN0eWxlPXtzdHlsZXMudGV4dFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgIEhpZGUgbW9kYWwgYnkgc2V0dGluZyB2aXNpYmxlIHRvIGZhbHNlXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJ1dHRvbiwgc3R5bGVzLmJ1dHRvbkNsb3NlXX1cbiAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRNb2RhbFNob3dDb21wb25lbnQoZmFsc2UpfT5cbiAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgdGVzdElEPVwiZGlzbWlzcy1tb2RhbC1ieS1yZW1vdmluZy1jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy50ZXh0U3R5bGV9PlxuICAgICAgICAgICAgICAgICAgSGlkZSBtb2RhbCBieSByZW1vdmluZyBjb21wb25lbnRcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Nb2RhbD5cbiAgICAgICl9XG4gICAgICA8VGV4dCB0ZXN0SUQ9XCJvbi1zaG93LWNvdW50XCI+b25TaG93IGlzIGNhbGxlZCB7b25TaG93Q291bnR9IHRpbWVzPC9UZXh0PlxuICAgICAgPFRleHQgdGVzdElEPVwib24tZGlzbWlzcy1jb3VudFwiPlxuICAgICAgICBvbkRpc21pc3MgaXMgY2FsbGVkIHtvbkRpc21pc3NDb3VudH0gdGltZXNcbiAgICAgIDwvVGV4dD5cbiAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuYnV0dG9uLCBzdHlsZXMuYnV0dG9uT3Blbl19XG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBzZXRNb2RhbFNob3dDb21wb25lbnQodHJ1ZSk7XG4gICAgICAgICAgc2V0TW9kYWxWaXNpYmxlKHRydWUpO1xuICAgICAgICB9fT5cbiAgICAgICAgPFRleHQgdGVzdElEPVwib3Blbi1tb2RhbFwiIHN0eWxlPXtzdHlsZXMudGV4dFN0eWxlfT5cbiAgICAgICAgICBTaG93IE1vZGFsXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcGFkZGluZ1ZlcnRpY2FsOiAzMCxcbiAgfSxcbiAgY2VudGVyZWRWaWV3OiB7XG4gICAgZmxleDogMSxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIG1vZGFsQmFja2Ryb3A6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICB9LFxuICBtb2RhbFZpZXc6IHtcbiAgICBtYXJnaW46IDIwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICBib3JkZXJSYWRpdXM6IDIwLFxuICAgIHBhZGRpbmc6IDM1LFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHNoYWRvd0NvbG9yOiAnIzAwMCcsXG4gICAgc2hhZG93T2Zmc2V0OiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMixcbiAgICB9LFxuICAgIHNoYWRvd09wYWNpdHk6IDAuMjUsXG4gICAgc2hhZG93UmFkaXVzOiA0LFxuICAgIGVsZXZhdGlvbjogNSxcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAyMCxcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBtYXJnaW5WZXJ0aWNhbDogMjAsXG4gICAgZWxldmF0aW9uOiAyLFxuICB9LFxuICBidXR0b25PcGVuOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI0YxOTRGRicsXG4gIH0sXG4gIGJ1dHRvbkNsb3NlOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnIzIxOTZGMycsXG4gIH0sXG4gIHRleHRTdHlsZToge1xuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiBcIk1vZGFsJ3Mgb25TaG93L29uRGlzbWlzc1wiLFxuICBuYW1lOiAnb25TaG93JyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ29uU2hvdyBhbmQgb25EaXNtaXNzIChpT1Mgb25seSkgY2FsbGJhY2tzIGFyZSBjYWxsZWQgd2hlbiBhIG1vZGFsIGlzIHNob3duL2Rpc21pc3NlZCcsXG4gIHJlbmRlcjogKCk6IFJlYWN0Lk5vZGUgPT4gPE1vZGFsT25TaG93T25EaXNtaXNzIC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hbGVydCAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcbmltcG9ydCB0eXBlIHtQcm9wcyBhcyBNb2RhbFByb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL01vZGFsL01vZGFsJztcblxuaW1wb3J0IFJOVE9wdGlvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVE9wdGlvbic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01vZGFsLCBQbGF0Zm9ybSwgU3R5bGVTaGVldCwgU3dpdGNoLCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBSTlRlc3RlckJ1dHRvbiA9IHJlcXVpcmUoJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJCdXR0b24nKTtcblxuY29uc3QgYW5pbWF0aW9uVHlwZXMgPSBbJ3NsaWRlJywgJ25vbmUnLCAnZmFkZSddO1xuY29uc3QgcHJlc2VudGF0aW9uU3R5bGVzID0gW1xuICAnZnVsbFNjcmVlbicsXG4gICdwYWdlU2hlZXQnLFxuICAnZm9ybVNoZWV0JyxcbiAgJ292ZXJGdWxsU2NyZWVuJyxcbl07XG5jb25zdCBzdXBwb3J0ZWRPcmllbnRhdGlvbnMgPSBbXG4gICdwb3J0cmFpdCcsXG4gICdwb3J0cmFpdC11cHNpZGUtZG93bicsXG4gICdsYW5kc2NhcGUnLFxuICAnbGFuZHNjYXBlLWxlZnQnLFxuICAnbGFuZHNjYXBlLXJpZ2h0Jyxcbl07XG5cbmZ1bmN0aW9uIE1vZGFsUHJlc2VudGF0aW9uKCkge1xuICBjb25zdCBvbkRpc21pc3MgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWxlcnQoJ29uRGlzbWlzcycpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25TaG93ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFsZXJ0KCdvblNob3cnKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uUmVxdWVzdENsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdvblJlcXVlc3RDbG9zZScpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgW3Byb3BzLCBzZXRQcm9wc10gPSBSZWFjdC51c2VTdGF0ZTxNb2RhbFByb3BzPih7XG4gICAgYW5pbWF0aW9uVHlwZTogJ25vbmUnLFxuICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICBoYXJkd2FyZUFjY2VsZXJhdGVkOiBmYWxzZSxcbiAgICBzdGF0dXNCYXJUcmFuc2x1Y2VudDogZmFsc2UsXG4gICAgcHJlc2VudGF0aW9uU3R5bGU6IFBsYXRmb3JtLnNlbGVjdCh7XG4gICAgICBpb3M6ICdmdWxsU2NyZWVuJyxcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICB9KSxcbiAgICBzdXBwb3J0ZWRPcmllbnRhdGlvbnM6IFBsYXRmb3JtLnNlbGVjdCh7XG4gICAgICBpb3M6IFsncG9ydHJhaXQnXSxcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICB9KSxcbiAgICBvbkRpc21pc3M6IHVuZGVmaW5lZCxcbiAgICBvblNob3c6IHVuZGVmaW5lZCxcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgfSk7XG4gIGNvbnN0IHByZXNlbnRhdGlvblN0eWxlID0gcHJvcHMucHJlc2VudGF0aW9uU3R5bGU7XG4gIGNvbnN0IGhhcmR3YXJlQWNjZWxlcmF0ZWQgPSBwcm9wcy5oYXJkd2FyZUFjY2VsZXJhdGVkO1xuICBjb25zdCBzdGF0dXNCYXJUcmFuc2x1Y2VudCA9IHByb3BzLnN0YXR1c0JhclRyYW5zbHVjZW50O1xuXG4gIGNvbnN0IFtjdXJyZW50T3JpZW50YXRpb24sIHNldEN1cnJlbnRPcmllbnRhdGlvbl0gPSBSZWFjdC51c2VTdGF0ZSgndW5rbm93bicpO1xuXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAgICogTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgY29uc3Qgb25PcmllbnRhdGlvbkNoYW5nZSA9IGV2ZW50ID0+XG4gICAgc2V0Q3VycmVudE9yaWVudGF0aW9uKGV2ZW50Lm5hdGl2ZUV2ZW50Lm9yaWVudGF0aW9uKTtcblxuICBjb25zdCBjb250cm9scyA9IChcbiAgICA8PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5pbmxpbmVCbG9ja30+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGV9PlN0YXR1cyBCYXIgVHJhbnNsdWNlbnQg8J+fojwvVGV4dD5cbiAgICAgICAgPFN3aXRjaFxuICAgICAgICAgIHZhbHVlPXtzdGF0dXNCYXJUcmFuc2x1Y2VudH1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtlbmFibGVkID0+XG4gICAgICAgICAgICBzZXRQcm9wcyhwcmV2ID0+ICh7Li4ucHJldiwgc3RhdHVzQmFyVHJhbnNsdWNlbnQ6IGVuYWJsZWR9KSlcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmlubGluZUJsb2NrfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZX0+SGFyZHdhcmUgQWNjZWxlcmF0aW9uIPCfn6I8L1RleHQ+XG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICB2YWx1ZT17aGFyZHdhcmVBY2NlbGVyYXRlZH1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtlbmFibGVkID0+XG4gICAgICAgICAgICBzZXRQcm9wcyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIGhhcmR3YXJlQWNjZWxlcmF0ZWQ6IGVuYWJsZWQsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJsb2NrfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZX0+UHJlc2VudGF0aW9uIFN0eWxlIOKaq++4jzwvVGV4dD5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgIHtwcmVzZW50YXRpb25TdHlsZXMubWFwKHR5cGUgPT4gKFxuICAgICAgICAgICAgPFJOVE9wdGlvblxuICAgICAgICAgICAgICBrZXk9e3R5cGV9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtQbGF0Zm9ybS5PUyAhPT0gJ2lvcyd9XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMub3B0aW9ufVxuICAgICAgICAgICAgICBsYWJlbD17dHlwZX1cbiAgICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e3RydWV9XG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgICAgICAgc2V0UHJvcHMocHJldiA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ292ZXJGdWxsU2NyZWVuJyAmJiBwcmV2LnRyYW5zcGFyZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50YXRpb25TdHlsZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgICAgICBwcmVzZW50YXRpb25TdHlsZTpcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBwcmV2LnByZXNlbnRhdGlvblN0eWxlID8gdW5kZWZpbmVkIDogdHlwZSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dHlwZSA9PT0gcHJlc2VudGF0aW9uU3R5bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJsb2NrfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3dXaXRoU3BhY2VCZXR3ZWVufT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfT5UcmFuc3BhcmVudDwvVGV4dD5cbiAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICB2YWx1ZT17cHJvcHMudHJhbnNwYXJlbnR9XG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtlbmFibGVkID0+XG4gICAgICAgICAgICAgIHNldFByb3BzKHByZXYgPT4gKHsuLi5wcmV2LCB0cmFuc3BhcmVudDogZW5hYmxlZH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAge1BsYXRmb3JtLk9TID09PSAnaW9zJyAmJiBwcmVzZW50YXRpb25TdHlsZSAhPT0gJ292ZXJGdWxsU2NyZWVuJyA/IChcbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLndhcm5pbmd9PlxuICAgICAgICAgICAgaU9TIE1vZGFsIGNhbiBvbmx5IGJlIHRyYW5zcGFyZW50IHdpdGggJ292ZXJGdWxsU2NyZWVuJyBQcmVzZW50YXRpb25cbiAgICAgICAgICAgIFN0eWxlXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYmxvY2t9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfT5TdXBwb3J0ZWQgT3JpZW50YXRpb24g4pqr77iPPC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAge3N1cHBvcnRlZE9yaWVudGF0aW9ucy5tYXAob3JpZW50YXRpb24gPT4gKFxuICAgICAgICAgICAgPFJOVE9wdGlvblxuICAgICAgICAgICAgICBrZXk9e29yaWVudGF0aW9ufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17UGxhdGZvcm0uT1MgIT09ICdpb3MnfVxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLm9wdGlvbn1cbiAgICAgICAgICAgICAgbGFiZWw9e29yaWVudGF0aW9ufVxuICAgICAgICAgICAgICBtdWx0aVNlbGVjdD17dHJ1ZX1cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICAgICAgICBzZXRQcm9wcyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChwcmV2LnN1cHBvcnRlZE9yaWVudGF0aW9ucz8uaW5jbHVkZXMob3JpZW50YXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRPcmllbnRhdGlvbnM6IHByZXYuc3VwcG9ydGVkT3JpZW50YXRpb25zPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBvID0+IG8gIT09IG9yaWVudGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRPcmllbnRhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAuLi4ocHJldi5zdXBwb3J0ZWRPcmllbnRhdGlvbnMgPz8gW10pLFxuICAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXtwcm9wcy5zdXBwb3J0ZWRPcmllbnRhdGlvbnM/LmluY2x1ZGVzKG9yaWVudGF0aW9uKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYmxvY2t9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfT5BY3Rpb25zPC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgPFJOVE9wdGlvblxuICAgICAgICAgICAga2V5PVwib25TaG93XCJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMub3B0aW9ufVxuICAgICAgICAgICAgbGFiZWw9XCJvblNob3dcIlxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e3RydWV9XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgICAgICBzZXRQcm9wcyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICBvblNob3c6IHByZXYub25TaG93ID8gdW5kZWZpbmVkIDogb25TaG93LFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGVjdGVkPXshIXByb3BzLm9uU2hvd31cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxSTlRPcHRpb25cbiAgICAgICAgICAgIGtleT1cIm9uRGlzbWlzc1wiXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLm9wdGlvbn1cbiAgICAgICAgICAgIGxhYmVsPVwib25EaXNtaXNzIOKaq++4j1wiXG4gICAgICAgICAgICBkaXNhYmxlZD17UGxhdGZvcm0uT1MgIT09ICdpb3MnfVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICAgICAgc2V0UHJvcHMocHJldiA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgICAgb25EaXNtaXNzOiBwcmV2Lm9uRGlzbWlzcyA/IHVuZGVmaW5lZCA6IG9uRGlzbWlzcyxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3RlZD17ISFwcm9wcy5vbkRpc21pc3N9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIDwvPlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8Uk5UZXN0ZXJCdXR0b25cbiAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0UHJvcHMocHJldiA9PiAoey4uLnByZXYsIHZpc2libGU6IHRydWV9KSl9PlxuICAgICAgICBTaG93IE1vZGFsXG4gICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuICAgICAgPE1vZGFsXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e29uUmVxdWVzdENsb3NlfVxuICAgICAgICBvbk9yaWVudGF0aW9uQ2hhbmdlPXtvbk9yaWVudGF0aW9uQ2hhbmdlfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5tb2RhbENvbnRhaW5lcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5tb2RhbElubmVyQ29udGFpbmVyfT5cbiAgICAgICAgICAgIDxUZXh0IHRlc3RJRD1cIm1vZGFsX2FuaW1hdGlvblR5cGVfdGV4dFwiPlxuICAgICAgICAgICAgICBUaGlzIG1vZGFsIHdhcyBwcmVzZW50ZWQgd2l0aCBhbmltYXRpb25UeXBlOiAnXG4gICAgICAgICAgICAgIHtwcm9wcy5hbmltYXRpb25UeXBlfSdcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIHtQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgPyAoXG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIEl0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4ge2N1cnJlbnRPcmllbnRhdGlvbn0gbW9kZS5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8Uk5UZXN0ZXJCdXR0b25cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0UHJvcHMocHJldiA9PiAoey4uLnByZXYsIHZpc2libGU6IGZhbHNlfSkpfT5cbiAgICAgICAgICAgICAgQ2xvc2VcbiAgICAgICAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICAgICAgICB7Y29udHJvbHN9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L01vZGFsPlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ibG9ja30+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGV9PkFuaW1hdGlvbiBUeXBlPC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAge2FuaW1hdGlvblR5cGVzLm1hcCh0eXBlID0+IChcbiAgICAgICAgICAgIDxSTlRPcHRpb25cbiAgICAgICAgICAgICAga2V5PXt0eXBlfVxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLm9wdGlvbn1cbiAgICAgICAgICAgICAgbGFiZWw9e3R5cGV9XG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldFByb3BzKHByZXYgPT4gKHsuLi5wcmV2LCBhbmltYXRpb25UeXBlOiB0eXBlfSkpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dHlwZSA9PT0gcHJvcHMuYW5pbWF0aW9uVHlwZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICAgIHtjb250cm9sc31cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgcm93OiB7XG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgcm93V2l0aFNwYWNlQmV0d2Vlbjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gIH0sXG4gIGJsb2NrOiB7XG4gICAgYm9yZGVyQ29sb3I6ICdyZ2JhKDAsMCwwLCAwLjEpJyxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogMSxcbiAgICBwYWRkaW5nOiA2LFxuICB9LFxuICBpbmxpbmVCbG9jazoge1xuICAgIHBhZGRpbmc6IDYsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBib3JkZXJDb2xvcjogJ3JnYmEoMCwwLDAsIDAuMSknLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAxLFxuICB9LFxuICB0aXRsZToge1xuICAgIG1hcmdpbjogMyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIG9wdGlvbjoge1xuICAgIG1hcmdpblJpZ2h0OiA4LFxuICAgIG1hcmdpblRvcDogNixcbiAgfSxcbiAgbW9kYWxDb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAyMCxcbiAgfSxcbiAgbW9kYWxJbm5lckNvbnRhaW5lcjoge1xuICAgIGJvcmRlclJhZGl1czogMTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG4gIHdhcm5pbmc6IHtcbiAgICBtYXJnaW46IDMsXG4gICAgZm9udFNpemU6IDEyLFxuICAgIGNvbG9yOiAncmVkJyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCAoe1xuICB0aXRsZTogJ01vZGFsIFByZXNlbnRhdGlvbicsXG4gIG5hbWU6ICdiYXNpYycsXG4gIGRlc2NyaXB0aW9uOiAnTW9kYWxzIGNhbiBiZSBwcmVzZW50ZWQgd2l0aCBvciB3aXRob3V0IGFuaW1hdGlvbicsXG4gIHJlbmRlcjogKCk6IFJlYWN0Lk5vZGUgPT4gPE1vZGFsUHJlc2VudGF0aW9uIC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtWaWV3U3R5bGVQcm9wfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1ByZXNzYWJsZSwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICB0ZXN0SUQ/OiA/c3RyaW5nLFxuICBsYWJlbDogc3RyaW5nLFxuICBvblByZXNzPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG4gIHNlbGVjdGVkPzogP2Jvb2xlYW4sXG4gIG11bHRpU2VsZWN0PzogP2Jvb2xlYW4sXG4gIGRpc2FibGVkPzogP2Jvb2xlYW4sXG4gIHN0eWxlPzogVmlld1N0eWxlUHJvcCxcbnx9PjtcblxuLyoqXG4gKiBBIHJldXNhYmxlIHRvZ2dsZSBidXR0b24gY29tcG9uZW50IGZvciBSTlRlc3Rlci4gSGlnaGxpZ2h0cyB3aGVuIHNlbGVjdGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSTlRPcHRpb24ocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtwcmVzc2VkLCBzZXRQcmVzc2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFJOVGVzdGVyVGhlbWVDb250ZXh0KTtcblxuICByZXR1cm4gKFxuICAgIDxQcmVzc2FibGVcbiAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17e3NlbGVjdGVkOiAhIXByb3BzLnNlbGVjdGVkfX1cbiAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgcHJvcHMuZGlzYWJsZWQgPT09IGZhbHNlIHx8IHByb3BzLm11bHRpU2VsZWN0ID09PSB0cnVlXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogcHJvcHMuc2VsZWN0ZWRcbiAgICAgIH1cbiAgICAgIGhpdFNsb3A9ezR9XG4gICAgICBvblByZXNzPXtwcm9wcy5kaXNhYmxlZCA9PT0gdHJ1ZSA/IHVuZGVmaW5lZCA6IHByb3BzLm9uUHJlc3N9XG4gICAgICBvblByZXNzSW49eygpID0+IHNldFByZXNzZWQodHJ1ZSl9XG4gICAgICBvblByZXNzT3V0PXsoKSA9PiBzZXRQcmVzc2VkKGZhbHNlKX1cbiAgICAgIHRlc3RJRD17cHJvcHMudGVzdElEfT5cbiAgICAgIDxWaWV3XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICBwcm9wcy5zZWxlY3RlZCA9PT0gdHJ1ZSA/IHN0eWxlcy5zZWxlY3RlZCA6IG51bGwsXG4gICAgICAgICAgcHJlc3NlZCAmJiBwcm9wcy5zZWxlY3RlZCAhPT0gdHJ1ZSA/IHN0eWxlcy5wcmVzc2VkIDogbnVsbCxcbiAgICAgICAgICBwcm9wcy5kaXNhYmxlZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHtiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLlRlcnRpYXJ5U3lzdGVtRmlsbENvbG9yfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHByb3BzLnN0eWxlLFxuICAgICAgICBdfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbH0+e3Byb3BzLmxhYmVsfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ByZXNzYWJsZT5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBwcmVzc2VkOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMjE1LDI1NSwuMyknLFxuICB9LFxuICBsYWJlbDoge1xuICAgIGNvbG9yOiAnYmxhY2snLFxuICB9LFxuICBzZWxlY3RlZDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLDIxNSwyNTUsLjMpJyxcbiAgICBib3JkZXJDb2xvcjogJ3JnYmEoMTAwLDIxNSwyNTUsLjMpJyxcbiAgfSxcbiAgZGlzYWJsZWQ6IHtib3JkZXJXaWR0aDogMH0sXG4gIGNvbnRhaW5lcjoge1xuICAgIGJvcmRlckNvbG9yOiAncmdiYSgwLDAsMCwgMC4xKScsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyUmFkaXVzOiAxNixcbiAgICBwYWRkaW5nOiA2LFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1ByZXNzRXZlbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7UHJlc3NhYmxlLCBTdHlsZVNoZWV0LCBUZXh0fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIHRlc3RJRD86IHN0cmluZyxcbiAgdGV4dFRlc3RJRD86IHN0cmluZyxcbiAgY2hpbGRyZW4/OiBSZWFjdC5Ob2RlLFxuICBvblByZXNzPzogPyhldmVudDogUHJlc3NFdmVudCkgPT4gbWl4ZWQsXG58fT47XG5cbmNsYXNzIFJOVGVzdGVyQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICB0ZXN0SUQ9e3RoaXMucHJvcHMudGVzdElEfVxuICAgICAgICBvblByZXNzPXt0aGlzLnByb3BzLm9uUHJlc3N9XG4gICAgICAgIHN0eWxlPXsoe3ByZXNzZWR9KSA9PiBbc3R5bGVzLmJ1dHRvbiwgcHJlc3NlZCAmJiBzdHlsZXMucHJlc3NlZF19PlxuICAgICAgICA8VGV4dCB0ZXN0SUQ9e3RoaXMucHJvcHMudGV4dFRlc3RJRH0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC9UZXh0PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJ1dHRvbjoge1xuICAgIGJvcmRlckNvbG9yOiAnIzY5Njk2OScsXG4gICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIHBhZGRpbmc6IDEwLFxuICAgIG1hcmdpbjogNSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2QzZDNkMycsXG4gIH0sXG4gIHByZXNzZWQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjYTlhOWE5JyxcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJOVGVzdGVyQnV0dG9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7Vmlld30gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcbmNvbnN0IHtcbiAgQ29sb3JzLFxuICBEZWJ1Z0luc3RydWN0aW9ucyxcbiAgSGVhZGVyLFxuICBMZWFybk1vcmVMaW5rcyxcbiAgUmVsb2FkSW5zdHJ1Y3Rpb25zLFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTmV3QXBwU2NyZWVuJyk7XG5cbmV4cG9ydHMudGl0bGUgPSAnTmV3IEFwcCBTY3JlZW4nO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdEaXNwbGF5cyB0aGUgY29udGVudCBvZiB0aGUgbmV3IGFwcCBzY3JlZW4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnTmV3IEFwcCBTY3JlZW4gSGVhZGVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXlzIGEgd2VsY29tZSB0byBidWlsZGluZyBhIFJlYWN0IE5hdGl2ZSBhcHAnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3tvdmVyZmxvdzogJ2hpZGRlbid9fT5cbiAgICAgICAgICA8SGVhZGVyIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTGVhcm4gTW9yZSBMaW5rcycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnTGVhcm4gbW9yZSBhYm91dCB0aGUgdG9vbHMgYW5kIHRlY2huaXF1ZXMgZm9yIGJ1aWxkaW5nIFJlYWN0IE5hdGl2ZSBhcHBzLicsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPExlYXJuTW9yZUxpbmtzIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ05ldyBBcHAgU2NyZWVuIENvbG9ycycsXG4gICAgZGVzY3JpcHRpb246ICdDb25zaXN0ZW50IGNvbG9ycyB0byB1c2UgdGhyb3VnaG91dCB0aGUgbmV3IGFwcCBzY3JlZW4uJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ3Jvdyd9fT5cbiAgICAgICAgICB7T2JqZWN0LmtleXMoQ29sb3JzKS5tYXAoa2V5ID0+IChcbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIGtleT17YGNvbG9yLSR7a2V5fWB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6IDUwLCBoZWlnaHQ6IDUwLCBiYWNrZ3JvdW5kQ29sb3I6IENvbG9yc1trZXldfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRGVidWcgSW5zdHJ1Y3Rpb25zJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdQbGF0Zm9ybS1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IGRlYnVnZ2luZyBhIFJlYWN0IE5hdGl2ZSBhcHAuJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8RGVidWdJbnN0cnVjdGlvbnMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUmVsb2FkIEluc3RydWN0aW9ucycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnUGxhdGZvcm0tc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byByZWxvYWQgYSBSZWFjdCBOYXRpdmUgYXBwLicsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFJlbG9hZEluc3RydWN0aW9ucyAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgQ29sb3JzIGZyb20gJy4vY29tcG9uZW50cy9Db2xvcnMnO1xuaW1wb3J0IERlYnVnSW5zdHJ1Y3Rpb25zIGZyb20gJy4vY29tcG9uZW50cy9EZWJ1Z0luc3RydWN0aW9ucyc7XG5pbXBvcnQgSGVhZGVyIGZyb20gJy4vY29tcG9uZW50cy9IZWFkZXInO1xuaW1wb3J0IEhlcm1lc0JhZGdlIGZyb20gJy4vY29tcG9uZW50cy9IZXJtZXNCYWRnZSc7XG5pbXBvcnQgTGVhcm5Nb3JlTGlua3MgZnJvbSAnLi9jb21wb25lbnRzL0xlYXJuTW9yZUxpbmtzJztcbmltcG9ydCBSZWxvYWRJbnN0cnVjdGlvbnMgZnJvbSAnLi9jb21wb25lbnRzL1JlbG9hZEluc3RydWN0aW9ucyc7XG5cbmV4cG9ydCB7XG4gIENvbG9ycyxcbiAgSGVhZGVyLFxuICBIZXJtZXNCYWRnZSxcbiAgTGVhcm5Nb3JlTGlua3MsXG4gIERlYnVnSW5zdHJ1Y3Rpb25zLFxuICBSZWxvYWRJbnN0cnVjdGlvbnMsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJpbWFyeTogJyMxMjkyQjQnLFxuICB3aGl0ZTogJyNGRkYnLFxuICBsaWdodGVyOiAnI0YzRjNGMycsXG4gIGxpZ2h0OiAnI0RBRTFFNycsXG4gIGRhcms6ICcjNDQ0JyxcbiAgZGFya2VyOiAnIzIyMicsXG4gIGJsYWNrOiAnIzAwMCcsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0IFBsYXRmb3JtIGZyb20gJy4uLy4uL1V0aWxpdGllcy9QbGF0Zm9ybSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGhpZ2hsaWdodDoge1xuICAgIGZvbnRXZWlnaHQ6ICc3MDAnLFxuICB9LFxufSk7XG5cbmNvbnN0IERlYnVnSW5zdHJ1Y3Rpb25zOiAoKSA9PiBOb2RlID0gUGxhdGZvcm0uc2VsZWN0KHtcbiAgaW9zOiAoKSA9PiAoXG4gICAgPFRleHQ+XG4gICAgICBQcmVzcyA8VGV4dCBzdHlsZT17c3R5bGVzLmhpZ2hsaWdodH0+Q21kICsgRDwvVGV4dD4gaW4gdGhlIHNpbXVsYXRvciBvcnsnICd9XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmhpZ2hsaWdodH0+U2hha2U8L1RleHQ+IHlvdXIgZGV2aWNlIHRvIG9wZW4gdGhlIERldlxuICAgICAgTWVudS5cbiAgICA8L1RleHQ+XG4gICksXG4gIGRlZmF1bHQ6ICgpID0+IChcbiAgICA8VGV4dD5cbiAgICAgIFByZXNzIDxUZXh0IHN0eWxlPXtzdHlsZXMuaGlnaGxpZ2h0fT5DbWQgb3IgQ3RybCArIE08L1RleHQ+IG9yeycgJ31cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuaGlnaGxpZ2h0fT5TaGFrZTwvVGV4dD4geW91ciBkZXZpY2UgdG8gb3BlbiB0aGUgRGV2XG4gICAgICBNZW51LlxuICAgIDwvVGV4dD5cbiAgKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBEZWJ1Z0luc3RydWN0aW9ucztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Tm9kZX0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgSW1hZ2VCYWNrZ3JvdW5kIGZyb20gJy4uLy4uL0ltYWdlL0ltYWdlQmFja2dyb3VuZCc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vLi4vVGV4dC9UZXh0JztcbmltcG9ydCB1c2VDb2xvclNjaGVtZSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvdXNlQ29sb3JTY2hlbWUnO1xuaW1wb3J0IENvbG9ycyBmcm9tICcuL0NvbG9ycyc7XG5pbXBvcnQgSGVybWVzQmFkZ2UgZnJvbSAnLi9IZXJtZXNCYWRnZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBIZWFkZXIgPSAoKTogTm9kZSA9PiB7XG4gIGNvbnN0IGlzRGFya01vZGUgPSB1c2VDb2xvclNjaGVtZSgpID09PSAnZGFyayc7XG4gIHJldHVybiAoXG4gICAgPEltYWdlQmFja2dyb3VuZFxuICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJpbWFnZVwiXG4gICAgICB0ZXN0SUQ9XCJuZXctYXBwLXNjcmVlbi1oZWFkZXJcIlxuICAgICAgc291cmNlPXtyZXF1aXJlKCcuL2xvZ28ucG5nJyl9XG4gICAgICBzdHlsZT17W1xuICAgICAgICBzdHlsZXMuYmFja2dyb3VuZCxcbiAgICAgICAge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEYXJrTW9kZSA/IENvbG9ycy5kYXJrZXIgOiBDb2xvcnMubGlnaHRlcixcbiAgICAgICAgfSxcbiAgICAgIF19XG4gICAgICBpbWFnZVN0eWxlPXtzdHlsZXMubG9nb30+XG4gICAgICA8SGVybWVzQmFkZ2UgLz5cbiAgICAgIDxUZXh0XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6IGlzRGFya01vZGUgPyBDb2xvcnMud2hpdGUgOiBDb2xvcnMuYmxhY2ssXG4gICAgICAgICAgfSxcbiAgICAgICAgXX0+XG4gICAgICAgIFdlbGNvbWUgdG9cbiAgICAgICAgeydcXG4nfVxuICAgICAgICBSZWFjdCBOYXRpdmVcbiAgICAgIDwvVGV4dD5cbiAgICA8L0ltYWdlQmFja2dyb3VuZD5cbiAgKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhZGRpbmdCb3R0b206IDQwLFxuICAgIHBhZGRpbmdUb3A6IDk2LFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAzMixcbiAgfSxcbiAgbG9nbzoge1xuICAgIG9wYWNpdHk6IDAuMixcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgIHJlc2l6ZU1vZGU6ICdjb3ZlcicsXG4gICAgLypcbiAgICAgKiBUaGVzZSBuZWdhdGl2ZSBtYXJnaW5zIGFsbG93IHRoZSBpbWFnZSB0byBiZSBvZmZzZXQgc2ltaWxhcmx5IGFjcm9zcyBzY3JlZW4gc2l6ZXMgYW5kIGNvbXBvbmVudCBzaXplcy5cbiAgICAgKlxuICAgICAqIFRoZSBzb3VyY2UgbG9nby5wbmcgaW1hZ2UgaXMgNTEyeDUxMnB4LCBzbyBhcyBzdWNoLCB0aGVzZSBtYXJnaW5zIGF0dGVtcHQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlXG4gICAgICogc291cmNlIGltYWdlJ3Mgc2l6ZS5cbiAgICAgKi9cbiAgICBtYXJnaW5MZWZ0OiAtMTI4LFxuICAgIG1hcmdpbkJvdHRvbTogLTE5MixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGZvbnRTaXplOiA0MCxcbiAgICBmb250V2VpZ2h0OiAnNzAwJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Tm9kZX0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgVmlldyBmcm9tICcuLi8uLi9Db21wb25lbnRzL1ZpZXcvVmlldyc7XG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICcuLi8uLi9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vLi4vVGV4dC9UZXh0JztcbmltcG9ydCB1c2VDb2xvclNjaGVtZSBmcm9tICcuLi8uLi9VdGlsaXRpZXMvdXNlQ29sb3JTY2hlbWUnO1xuaW1wb3J0IENvbG9ycyBmcm9tICcuL0NvbG9ycyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBIZXJtZXNCYWRnZSA9ICgpOiBOb2RlID0+IHtcbiAgY29uc3QgaXNEYXJrTW9kZSA9IHVzZUNvbG9yU2NoZW1lKCkgPT09ICdkYXJrJztcbiAgY29uc3QgdmVyc2lvbiA9XG4gICAgZ2xvYmFsLkhlcm1lc0ludGVybmFsPy5nZXRSdW50aW1lUHJvcGVydGllcz8uKClbJ09TUyBSZWxlYXNlIFZlcnNpb24nXSA/P1xuICAgICcnO1xuICByZXR1cm4gZ2xvYmFsLkhlcm1lc0ludGVybmFsID8gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYmFkZ2V9PlxuICAgICAgPFRleHRcbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMuYmFkZ2VUZXh0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbG9yOiBpc0RhcmtNb2RlID8gQ29sb3JzLmxpZ2h0IDogQ29sb3JzLmRhcmssXG4gICAgICAgICAgfSxcbiAgICAgICAgXX0+XG4gICAgICAgIHtgRW5naW5lOiBIZXJtZXMgJHt2ZXJzaW9ufWB9XG4gICAgICA8L1RleHQ+XG4gICAgPC9WaWV3PlxuICApIDogbnVsbDtcbn07XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYmFkZ2U6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDgsXG4gICAgcmlnaHQ6IDEyLFxuICB9LFxuICBiYWRnZVRleHQ6IHtcbiAgICBmb250U2l6ZTogMTQsXG4gICAgZm9udFdlaWdodDogJzYwMCcsXG4gICAgdGV4dEFsaWduOiAncmlnaHQnLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEhlcm1lc0JhZGdlO1xuIiwiIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBUb3VjaGFibGVPcGFjaXR5IGZyb20gJy4uLy4uL0NvbXBvbmVudHMvVG91Y2hhYmxlL1RvdWNoYWJsZU9wYWNpdHknO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi4vLi4vQ29tcG9uZW50cy9WaWV3L1ZpZXcnO1xuaW1wb3J0IG9wZW5VUkxJbkJyb3dzZXIgZnJvbSAnLi4vLi4vQ29yZS9EZXZ0b29scy9vcGVuVVJMSW5Ccm93c2VyJztcbmltcG9ydCBTdHlsZVNoZWV0IGZyb20gJy4uLy4uL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5pbXBvcnQgVGV4dCBmcm9tICcuLi8uLi9UZXh0L1RleHQnO1xuaW1wb3J0IHVzZUNvbG9yU2NoZW1lIGZyb20gJy4uLy4uL1V0aWxpdGllcy91c2VDb2xvclNjaGVtZSc7XG5pbXBvcnQgQ29sb3JzIGZyb20gJy4vQ29sb3JzJztcbmltcG9ydCBSZWFjdCwge0ZyYWdtZW50fSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGxpbmtzID0gW1xuICB7XG4gICAgaWQ6IDEsXG4gICAgdGl0bGU6ICdUaGUgQmFzaWNzJyxcbiAgICBsaW5rOiAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy90dXRvcmlhbCcsXG4gICAgZGVzY3JpcHRpb246ICdFeHBsYWlucyBhIEhlbGxvIFdvcmxkIGZvciBSZWFjdCBOYXRpdmUuJyxcbiAgfSxcbiAge1xuICAgIGlkOiAyLFxuICAgIHRpdGxlOiAnU3R5bGUnLFxuICAgIGxpbms6ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3N0eWxlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdDb3ZlcnMgaG93IHRvIHVzZSB0aGUgcHJvcCBuYW1lZCBzdHlsZSB3aGljaCBjb250cm9scyB0aGUgdmlzdWFscy4nLFxuICB9LFxuICB7XG4gICAgaWQ6IDMsXG4gICAgdGl0bGU6ICdMYXlvdXQnLFxuICAgIGxpbms6ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2ZsZXhib3gnLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVhY3QgTmF0aXZlIHVzZXMgZmxleGJveCBmb3IgbGF5b3V0LCBsZWFybiBob3cgaXQgd29ya3MuJyxcbiAgfSxcbiAge1xuICAgIGlkOiA0LFxuICAgIHRpdGxlOiAnQ29tcG9uZW50cycsXG4gICAgbGluazogJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvY29tcG9uZW50cy1hbmQtYXBpcycsXG4gICAgZGVzY3JpcHRpb246ICdUaGUgZnVsbCBsaXN0IG9mIGNvbXBvbmVudHMgYW5kIEFQSXMgaW5zaWRlIFJlYWN0IE5hdGl2ZS4nLFxuICB9LFxuICB7XG4gICAgaWQ6IDUsXG4gICAgdGl0bGU6ICdOYXZpZ2F0aW9uJyxcbiAgICBsaW5rOiAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9uYXZpZ2F0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdIb3cgdG8gaGFuZGxlIG1vdmluZyBiZXR3ZWVuIHNjcmVlbnMgaW5zaWRlIHlvdXIgYXBwbGljYXRpb24uJyxcbiAgfSxcbiAge1xuICAgIGlkOiA2LFxuICAgIHRpdGxlOiAnTmV0d29ya2luZycsXG4gICAgbGluazogJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvbmV0d29yaycsXG4gICAgZGVzY3JpcHRpb246ICdIb3cgdG8gdXNlIHRoZSBGZXRjaCBBUEkgaW4gUmVhY3QgTmF0aXZlLicsXG4gIH0sXG4gIHtcbiAgICBpZDogNyxcbiAgICB0aXRsZTogJ0RlYnVnZ2luZycsXG4gICAgbGluazogJ2h0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0LW5hdGl2ZS9kb2NzL2RlYnVnZ2luZycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnTGVhcm4gYWJvdXQgdGhlIHRvb2xzIGF2YWlsYWJsZSB0byBkZWJ1ZyBhbmQgaW5zcGVjdCB5b3VyIGFwcC4nLFxuICB9LFxuICB7XG4gICAgaWQ6IDgsXG4gICAgdGl0bGU6ICdIZWxwJyxcbiAgICBsaW5rOiAnaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QtbmF0aXZlL2hlbHAnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ05lZWQgbW9yZSBoZWxwPyBUaGVyZSBhcmUgbWFueSBvdGhlciBSZWFjdCBOYXRpdmUgZGV2ZWxvcGVycyB3aG8gbWF5IGhhdmUgdGhlIGFuc3dlci4nLFxuICB9LFxuICB7XG4gICAgaWQ6IDksXG4gICAgdGl0bGU6ICdGb2xsb3cgdXMgb24gVHdpdHRlcicsXG4gICAgbGluazogJ2h0dHBzOi8vdHdpdHRlci5jb20vcmVhY3RuYXRpdmUnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1N0YXkgaW4gdG91Y2ggd2l0aCB0aGUgY29tbXVuaXR5LCBqb2luIGluIG9uIFEmQXMgYW5kIG1vcmUgYnkgZm9sbG93aW5nIFJlYWN0IE5hdGl2ZSBvbiBUd2l0dGVyLicsXG4gIH0sXG5dO1xuXG5jb25zdCBMaW5rTGlzdCA9ICgpOiBOb2RlID0+IHtcbiAgY29uc3QgaXNEYXJrTW9kZSA9IHVzZUNvbG9yU2NoZW1lKCkgPT09ICdkYXJrJztcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICB7bGlua3MubWFwKCh7aWQsIHRpdGxlLCBsaW5rLCBkZXNjcmlwdGlvbn0pID0+IChcbiAgICAgICAgPEZyYWdtZW50IGtleT17aWR9PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBzdHlsZXMuc2VwYXJhdG9yLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpc0RhcmtNb2RlID8gQ29sb3JzLmRhcmsgOiBDb2xvcnMubGlnaHQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IG9wZW5VUkxJbkJyb3dzZXIobGluayl9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmxpbmtDb250YWluZXJ9PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5saW5rfT57dGl0bGV9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY29sb3I6IGlzRGFya01vZGUgPyBDb2xvcnMubGlnaHRlciA6IENvbG9ycy5kYXJrLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgKSl9XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBtYXJnaW5Ub3A6IDMyLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAyNCxcbiAgfSxcbiAgbGlua0NvbnRhaW5lcjoge1xuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nVmVydGljYWw6IDgsXG4gIH0sXG4gIGxpbms6IHtcbiAgICBmbGV4OiAyLFxuICAgIGZvbnRTaXplOiAxOCxcbiAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICBjb2xvcjogQ29sb3JzLnByaW1hcnksXG4gIH0sXG4gIGRlc2NyaXB0aW9uOiB7XG4gICAgZmxleDogMyxcbiAgICBwYWRkaW5nVmVydGljYWw6IDE2LFxuICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgIGZvbnRTaXplOiAxOCxcbiAgfSxcbiAgc2VwYXJhdG9yOiB7XG4gICAgaGVpZ2h0OiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGgsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTGlua0xpc3Q7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge05vZGV9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnLi4vLi4vU3R5bGVTaGVldC9TdHlsZVNoZWV0JztcbmltcG9ydCBUZXh0IGZyb20gJy4uLy4uL1RleHQvVGV4dCc7XG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAnLi4vLi4vVXRpbGl0aWVzL1BsYXRmb3JtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgaGlnaGxpZ2h0OiB7XG4gICAgZm9udFdlaWdodDogJzcwMCcsXG4gIH0sXG59KTtcblxuY29uc3QgUmVsb2FkSW5zdHJ1Y3Rpb25zOiAoKSA9PiBOb2RlID0gUGxhdGZvcm0uc2VsZWN0KHtcbiAgaW9zOiAoKSA9PiAoXG4gICAgPFRleHQ+XG4gICAgICBQcmVzcyA8VGV4dCBzdHlsZT17c3R5bGVzLmhpZ2hsaWdodH0+Q21kICsgUjwvVGV4dD4gaW4gdGhlIHNpbXVsYXRvciB0b1xuICAgICAgcmVsb2FkIHlvdXIgYXBwJ3MgY29kZS5cbiAgICA8L1RleHQ+XG4gICksXG4gIGRlZmF1bHQ6ICgpID0+IChcbiAgICA8VGV4dD5cbiAgICAgIERvdWJsZSB0YXAgPFRleHQgc3R5bGU9e3N0eWxlcy5oaWdobGlnaHR9PlI8L1RleHQ+IG9uIHlvdXIga2V5Ym9hcmQgdG9cbiAgICAgIHJlbG9hZCB5b3VyIGFwcCdzIGNvZGUuXG4gICAgPC9UZXh0PlxuICApLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFJlbG9hZEluc3RydWN0aW9ucztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBBbGVydCxcbiAgQW5pbWF0ZWQsXG4gIEltYWdlLFxuICBQbGF0Zm9ybSxcbiAgUHJlc3NhYmxlLFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBWaWV3LFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuaW1wb3J0IFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzIGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUmVhY3ROYXRpdmVGZWF0dXJlRmxhZ3MnO1xuXG5jb25zdCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSA9IFJlYWN0O1xuXG5mdW5jdGlvbiBvblByZXNzYWJsZVByZXNzKHByZXNzYWJsZU5hbWU6IHN0cmluZykge1xuICBBbGVydC5hbGVydChgWW91ciBhcHBsaWNhdGlvbiBoYXMgYmVlbiAke3ByZXNzYWJsZU5hbWV9IWApO1xufVxuXG5jb25zdCBmb3JjZVRvdWNoQXZhaWxhYmxlID1cbiAgKFBsYXRmb3JtLk9TID09PSAnaW9zJyAmJiBQbGF0Zm9ybS5jb25zdGFudHMuZm9yY2VUb3VjaEF2YWlsYWJsZSkgfHwgZmFsc2U7XG5cbmZ1bmN0aW9uIENvbnRlbnRQcmVzcygpIHtcbiAgY29uc3QgW3RpbWVzUHJlc3NlZCwgc2V0VGltZXNQcmVzc2VkXSA9IHVzZVN0YXRlKDApO1xuXG4gIGxldCB0ZXh0TG9nID0gJyc7XG4gIGlmICh0aW1lc1ByZXNzZWQgPiAxKSB7XG4gICAgdGV4dExvZyA9IHRpbWVzUHJlc3NlZCArICd4IG9uUHJlc3MnO1xuICB9IGVsc2UgaWYgKHRpbWVzUHJlc3NlZCA+IDApIHtcbiAgICB0ZXh0TG9nID0gJ29uUHJlc3MnO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZXNQcmVzc2VkKGN1cnJlbnQgPT4gY3VycmVudCArIDEpO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIHsoe3ByZXNzZWR9KSA9PiAoXG4gICAgICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJvbmVfcHJlc3NfbWVfYnV0dG9uXCIgc3R5bGU9e3N0eWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAge3ByZXNzZWQgPyAnUHJlc3NlZCEnIDogJ1ByZXNzIE1lJ31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubG9nQm94fT5cbiAgICAgICAgPFRleHQgdGVzdElEPVwicHJlc3NhYmxlX3ByZXNzX2NvbnNvbGVcIj57dGV4dExvZ308L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRleHRPblByZXNzQm94KCkge1xuICBjb25zdCBbdGltZXNQcmVzc2VkLCBzZXRUaW1lc1ByZXNzZWRdID0gdXNlU3RhdGUoMCk7XG5cbiAgbGV0IHRleHRMb2cgPSAnJztcbiAgaWYgKHRpbWVzUHJlc3NlZCA+IDEpIHtcbiAgICB0ZXh0TG9nID0gdGltZXNQcmVzc2VkICsgJ3ggdGV4dCBvblByZXNzJztcbiAgfSBlbHNlIGlmICh0aW1lc1ByZXNzZWQgPiAwKSB7XG4gICAgdGV4dExvZyA9ICd0ZXh0IG9uUHJlc3MnO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFRleHRcbiAgICAgICAgc3R5bGU9e3N0eWxlcy50ZXh0QmxvY2t9XG4gICAgICAgIHRlc3RJRD1cInRhcHBhYmxlX3RleHRcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgc2V0VGltZXNQcmVzc2VkKHByZXYgPT4gcHJldiArIDEpO1xuICAgICAgICB9fT5cbiAgICAgICAgVGV4dCBoYXMgYnVpbHQtaW4gb25QcmVzcyBoYW5kbGluZ1xuICAgICAgPC9UZXh0PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5sb2dCb3h9PlxuICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJ0YXBwYWJsZV90ZXh0X2NvbnNvbGVcIj57dGV4dExvZ308L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByZXNzYWJsZUFyaWFMYWJlbCgpIHtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5yb3csIHN0eWxlcy5jZW50ZXJlZF19PlxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgIHRlc3RJRD1cInByZXNzYWJsZV9hcmlhX2xhYmVsXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cInByZXNzYWJsZSB3aXRoIGFyaWEgbGFiZWxcIlxuICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImJ1dHRvblwiXG4gICAgICAgIG9uUHJlc3M9eygpID0+IG9uUHJlc3NhYmxlUHJlc3MoJ3ByZXNzZWQnKX0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5QcmVzcyBNZTwvVGV4dD5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cbmZ1bmN0aW9uIFByZXNzYWJsZUZlZWRiYWNrRXZlbnRzKCkge1xuICBjb25zdCBbZXZlbnRMb2csIHNldEV2ZW50TG9nXSA9IHVzZVN0YXRlPEFycmF5PHN0cmluZz4+KFtdKTtcblxuICBmdW5jdGlvbiBhcHBlbmRFdmVudChldmVudE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbWl0ID0gNjtcbiAgICBzZXRFdmVudExvZyhjdXJyZW50ID0+IHtcbiAgICAgIHJldHVybiBbZXZlbnROYW1lXS5jb25jYXQoY3VycmVudC5zbGljZSgwLCBsaW1pdCAtIDEpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgdGVzdElEPVwicHJlc3NhYmxlX2ZlZWRiYWNrX2V2ZW50c1wiPlxuICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMucm93LCBzdHlsZXMuY2VudGVyZWRdfT5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICB0ZXN0SUQ9XCJwcmVzc2FibGVfZmVlZGJhY2tfZXZlbnRzX2J1dHRvblwiXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwicHJlc3NhYmxlIGZlZWRiYWNrIGV2ZW50c1wiXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IGFwcGVuZEV2ZW50KCdwcmVzcycpfVxuICAgICAgICAgIG9uUHJlc3NJbj17KCkgPT4gYXBwZW5kRXZlbnQoJ3ByZXNzSW4nKX1cbiAgICAgICAgICBvblByZXNzT3V0PXsoKSA9PiBhcHBlbmRFdmVudCgncHJlc3NPdXQnKX1cbiAgICAgICAgICBvbkxvbmdQcmVzcz17KCkgPT4gYXBwZW5kRXZlbnQoJ2xvbmdQcmVzcycpfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+UHJlc3MgTWU8L1RleHQ+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFZpZXdcbiAgICAgICAgdGVzdElEPVwicHJlc3NhYmxlX2ZlZWRiYWNrX2V2ZW50c19jb25zb2xlXCJcbiAgICAgICAgc3R5bGU9e3N0eWxlcy5ldmVudExvZ0JveH0+XG4gICAgICAgIHtldmVudExvZy5tYXAoKGUsIGlpKSA9PiAoXG4gICAgICAgICAgPFRleHQga2V5PXtpaX0+e2V9PC9UZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByZXNzYWJsZURlbGF5RXZlbnRzKCkge1xuICBjb25zdCBbZXZlbnRMb2csIHNldEV2ZW50TG9nXSA9IHVzZVN0YXRlPEFycmF5PHN0cmluZz4+KFtdKTtcblxuICBmdW5jdGlvbiBhcHBlbmRFdmVudChldmVudE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbWl0ID0gNjtcbiAgICBjb25zdCBuZXdFdmVudExvZyA9IGV2ZW50TG9nLnNsaWNlKDAsIGxpbWl0IC0gMSk7XG4gICAgbmV3RXZlbnRMb2cudW5zaGlmdChldmVudE5hbWUpO1xuICAgIHNldEV2ZW50TG9nKG5ld0V2ZW50TG9nKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgdGVzdElEPVwicHJlc3NhYmxlX2RlbGF5X2V2ZW50c1wiPlxuICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMucm93LCBzdHlsZXMuY2VudGVyZWRdfT5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICB0ZXN0SUQ9XCJwcmVzc2FibGVfZGVsYXlfZXZlbnRzX2J1dHRvblwiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gYXBwZW5kRXZlbnQoJ3ByZXNzJyl9XG4gICAgICAgICAgb25QcmVzc0luPXsoKSA9PiBhcHBlbmRFdmVudCgncHJlc3NJbicpfVxuICAgICAgICAgIG9uUHJlc3NPdXQ9eygpID0+IGFwcGVuZEV2ZW50KCdwcmVzc091dCcpfVxuICAgICAgICAgIGRlbGF5TG9uZ1ByZXNzPXs4MDB9XG4gICAgICAgICAgb25Mb25nUHJlc3M9eygpID0+IGFwcGVuZEV2ZW50KCdsb25nUHJlc3MgLSA4MDBtcyBkZWxheScpfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+UHJlc3MgTWU8L1RleHQ+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ldmVudExvZ0JveH0gdGVzdElEPVwicHJlc3NhYmxlX2RlbGF5X2V2ZW50c19jb25zb2xlXCI+XG4gICAgICAgIHtldmVudExvZy5tYXAoKGUsIGlpKSA9PiAoXG4gICAgICAgICAgPFRleHQga2V5PXtpaX0+e2V9PC9UZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZvcmNlVG91Y2hFeGFtcGxlKCkge1xuICBjb25zdCBbZm9yY2UsIHNldEZvcmNlXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IGNvbnNvbGVUZXh0ID0gZm9yY2VUb3VjaEF2YWlsYWJsZVxuICAgID8gJ0ZvcmNlOiAnICsgZm9yY2UudG9GaXhlZCgzKVxuICAgIDogJzNEIFRvdWNoIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UnO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgdGVzdElEPVwicHJlc3NhYmxlXzNkdG91Y2hfZXZlbnRcIj5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZm9yY2VUb3VjaEJveH0gdGVzdElEPVwicHJlc3NhYmxlXzNkdG91Y2hfb3V0cHV0XCI+XG4gICAgICAgIDxUZXh0Pntjb25zb2xlVGV4dH08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5yb3csIHN0eWxlcy5jZW50ZXJlZF19PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICB0ZXN0SUQ9XCJwcmVzc2FibGVfM2R0b3VjaF9idXR0b25cIlxuICAgICAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtza2V0Y2h5LW51bGwtbnVtYmVyXVxuICAgICAgICAgIG9uUmVzcG9uZGVyTW92ZT17ZXZlbnQgPT4gc2V0Rm9yY2UoZXZlbnQubmF0aXZlRXZlbnQ/LmZvcmNlIHx8IDEpfVxuICAgICAgICAgIG9uUmVzcG9uZGVyUmVsZWFzZT17ZXZlbnQgPT4gc2V0Rm9yY2UoMCl9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5QcmVzcyBNZTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gUHJlc3NhYmxlSGl0U2xvcCgpIHtcbiAgY29uc3QgW3RpbWVzUHJlc3NlZCwgc2V0VGltZXNQcmVzc2VkXSA9IHVzZVN0YXRlKDApO1xuXG4gIGxldCBsb2cgPSAnJztcbiAgaWYgKHRpbWVzUHJlc3NlZCA+IDEpIHtcbiAgICBsb2cgPSB0aW1lc1ByZXNzZWQgKyAneCBvblByZXNzJztcbiAgfSBlbHNlIGlmICh0aW1lc1ByZXNzZWQgPiAwKSB7XG4gICAgbG9nID0gJ29uUHJlc3MnO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyB0ZXN0SUQ9XCJwcmVzc2FibGVfaGl0X3Nsb3BcIj5cbiAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnJvdywgc3R5bGVzLmNlbnRlcmVkXX0+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRUaW1lc1ByZXNzZWQobnVtID0+IG51bSArIDEpfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuaGl0U2xvcFdyYXBwZXJ9XG4gICAgICAgICAgaGl0U2xvcD17e3RvcDogMzAsIGJvdHRvbTogMzAsIGxlZnQ6IDYwLCByaWdodDogNjB9fVxuICAgICAgICAgIHRlc3RJRD1cInByZXNzYWJsZV9oaXRfc2xvcF9idXR0b25cIj5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmhpdFNsb3BCdXR0b259PlByZXNzIE91dHNpZGUgVGhpcyBWaWV3PC9UZXh0PlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubG9nQm94fT5cbiAgICAgICAgPFRleHQ+e2xvZ308L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBQcmVzc2FibGVOYXRpdmVNZXRob2RzKCkge1xuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8P2Jvb2xlYW4+KG51bGwpO1xuICBjb25zdCByZWYgPSB1c2VSZWY8JEZsb3dGaXhNZT4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTdGF0dXMocmVmLmN1cnJlbnQgIT0gbnVsbCAmJiB0eXBlb2YgcmVmLmN1cnJlbnQubWVhc3VyZSA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5yb3csIHN0eWxlcy5ibG9ja119PlxuICAgICAgICA8UHJlc3NhYmxlIHJlZj17cmVmfT5cbiAgICAgICAgICA8VmlldyAvPlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAge3N0YXR1cyA9PSBudWxsXG4gICAgICAgICAgICA/ICdNaXNzaW5nIFJlZiEnXG4gICAgICAgICAgICA6IHN0YXR1cyA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyAnTmF0aXZlIE1ldGhvZHMgRXhpc3QnXG4gICAgICAgICAgICA6ICdOYXRpdmUgTWV0aG9kcyBNaXNzaW5nISd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gUHJlc3NhYmxlRGlzYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxQcmVzc2FibGUgZGlzYWJsZWQ9e3RydWV9IHN0eWxlPXtbc3R5bGVzLnJvdywgc3R5bGVzLmJsb2NrXX0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuZGlzYWJsZWRCdXR0b259PkRpc2FibGVkIFByZXNzYWJsZTwvVGV4dD5cbiAgICAgIDwvUHJlc3NhYmxlPlxuXG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgc3R5bGU9eyh7cHJlc3NlZH0pID0+IFtcbiAgICAgICAgICB7b3BhY2l0eTogcHJlc3NlZCA/IDAuNSA6IDF9LFxuICAgICAgICAgIHN0eWxlcy5yb3csXG4gICAgICAgICAgc3R5bGVzLmJsb2NrLFxuICAgICAgICBdfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b259PkVuYWJsZWQgUHJlc3NhYmxlPC9UZXh0PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByZXNzYWJsZUhvdmVyU3R5bGUoKSB7XG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkID8gJ3JnYigyMTAsIDIzMCwgMjU1KScgOiAnd2hpdGUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGVzLndyYXBwZXJDdXN0b20sXG4gICAgICAgIF19XG4gICAgICAgIG9uSG92ZXJJbj17KCkgPT4gc2V0SG92ZXJlZCh0cnVlKX1cbiAgICAgICAgb25Ib3Zlck91dD17KCkgPT4gc2V0SG92ZXJlZChmYWxzZSl9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHR9PkhvdmVyIE1lPC9UZXh0PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvdzoge1xuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgY2VudGVyZWQ6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBmb250U2l6ZTogMTYsXG4gIH0sXG4gIGJsb2NrOiB7XG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGNvbG9yOiAnIzAwN0FGRicsXG4gIH0sXG4gIGRpc2FibGVkQnV0dG9uOiB7XG4gICAgY29sb3I6ICcjMDA3QUZGJyxcbiAgICBvcGFjaXR5OiAwLjUsXG4gIH0sXG4gIGhpdFNsb3BCdXR0b246IHtcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgfSxcbiAgd3JhcHBlcjoge1xuICAgIGJvcmRlclJhZGl1czogOCxcbiAgfSxcbiAgd3JhcHBlckN1c3RvbToge1xuICAgIGJvcmRlclJhZGl1czogOCxcbiAgICBwYWRkaW5nOiA2LFxuICB9LFxuICBoaXRTbG9wV3JhcHBlcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gICAgbWFyZ2luVmVydGljYWw6IDMwLFxuICB9LFxuICBsb2dCb3g6IHtcbiAgICBwYWRkaW5nOiAyMCxcbiAgICBtYXJnaW46IDEwLFxuICAgIGJvcmRlcldpZHRoOiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGgsXG4gICAgYm9yZGVyQ29sb3I6ICcjZjBmMGYwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjlmOWY5JyxcbiAgfSxcbiAgZXZlbnRMb2dCb3g6IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBtYXJnaW46IDEwLFxuICAgIGhlaWdodDogMTIwLFxuICAgIGJvcmRlcldpZHRoOiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGgsXG4gICAgYm9yZGVyQ29sb3I6ICcjZjBmMGYwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjlmOWY5JyxcbiAgfSxcbiAgZm9yY2VUb3VjaEJveDoge1xuICAgIHBhZGRpbmc6IDEwLFxuICAgIG1hcmdpbjogMTAsXG4gICAgYm9yZGVyV2lkdGg6IFN0eWxlU2hlZXQuaGFpcmxpbmVXaWR0aCxcbiAgICBib3JkZXJDb2xvcjogJyNmMGYwZjAnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxuICB0ZXh0QmxvY2s6IHtcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBjb2xvcjogJ2JsdWUnLFxuICB9LFxuICBpbWFnZToge1xuICAgIGhlaWdodDogMTAwLFxuICAgIHdpZHRoOiAxMDAsXG4gIH0sXG59KTtcblxuZXhwb3J0cy5kaXNwbGF5TmFtZSA9ICh1bmRlZmluZWQ6ID9zdHJpbmcpO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdDb21wb25lbnQgZm9yIG1ha2luZyB2aWV3cyBwcmVzc2FibGUuJztcbmV4cG9ydHMudGl0bGUgPSAnUHJlc3NhYmxlJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnVUknO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvcHJlc3NhYmxlJztcblxuY29uc3QgZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ0NoYW5nZSBjb250ZW50IGJhc2VkIG9uIFByZXNzJyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPENvbnRlbnRQcmVzcyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDaGFuZ2Ugc3R5bGUgYmFzZWQgb24gUHJlc3MnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBzdHlsZT17KHtwcmVzc2VkfSkgPT4gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcmVzc2VkID8gJ3JnYigyMTAsIDIzMCwgMjU1KScgOiAnd2hpdGUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdHlsZXMud3JhcHBlckN1c3RvbSxcbiAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5QcmVzcyBNZTwvVGV4dD5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdQcmVzc2FibGUgZmVlZGJhY2sgZXZlbnRzJyxcbiAgICBkZXNjcmlwdGlvbjogKCc8UHJlc3NhYmxlPiBjb21wb25lbnRzIGFjY2VwdCBvblByZXNzLCBvblByZXNzSW4sICcgK1xuICAgICAgJ29uUHJlc3NPdXQsIGFuZCBvbkxvbmdQcmVzcyBhcyBwcm9wcy4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxQcmVzc2FibGVGZWVkYmFja0V2ZW50cyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdQcmVzc2FibGUgd2l0aCBSaXBwbGUgYW5kIEFuaW1hdGVkIGNoaWxkJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnUHJlc3NhYmxlIGNhbiBoYXZlIGFuIEFuaW1hdGVkQ29tcG9uZW50IGFzIGEgZGlyZWN0IGNoaWxkLic6IHN0cmluZyksXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIGNvbnN0IG1TY2FsZSA9IG5ldyBBbmltYXRlZC5WYWx1ZSgxKTtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhtU2NhbGUsIHtcbiAgICAgICAgdG9WYWx1ZTogMC4zLFxuICAgICAgICBkdXJhdGlvbjogMTAwMCxcbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgIH0pLnN0YXJ0KCk7XG4gICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiKDE4MCwgNjQsIDExOSknLFxuICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgdHJhbnNmb3JtOiBbe3NjYWxlOiBtU2NhbGV9XSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgPFByZXNzYWJsZSBhbmRyb2lkX3JpcHBsZT17e2NvbG9yOiAnZ3JlZW4nfX0+XG4gICAgICAgICAgICA8QW5pbWF0ZWQuVmlldyBzdHlsZT17c3R5bGV9IC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUHJlc3NhYmxlIHdpdGggY3VzdG9tIFJpcHBsZScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoXCJQcmVzc2FibGUgY2FuIHNwZWNpZnkgcmlwcGxlJ3MgcmFkaXVzLCBjb2xvciBhbmQgYm9yZGVybGVzcyBwYXJhbXNcIjogc3RyaW5nKSxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgY29uc3QgbmF0aXZlRmVlZGJhY2tCdXR0b24gPSB7XG4gICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgIG1hcmdpbjogMTAsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgIHN0eWxlcy5yb3csXG4gICAgICAgICAgICAgIHtqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsIGFsaWduSXRlbXM6ICdjZW50ZXInfSxcbiAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgICBhbmRyb2lkX3JpcHBsZT17e2NvbG9yOiAnb3JhbmdlJywgYm9yZGVybGVzczogdHJ1ZSwgcmFkaXVzOiAzMH19PlxuICAgICAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5idXR0b24sIG5hdGl2ZUZlZWRiYWNrQnV0dG9uXX0+XG4gICAgICAgICAgICAgICAgICByYWRpdXMgMzBcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDwvUHJlc3NhYmxlPlxuXG4gICAgICAgICAgICA8UHJlc3NhYmxlIGFuZHJvaWRfcmlwcGxlPXt7Ym9yZGVybGVzczogdHJ1ZSwgcmFkaXVzOiAxNTB9fT5cbiAgICAgICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMuYnV0dG9uLCBuYXRpdmVGZWVkYmFja0J1dHRvbl19PlxuICAgICAgICAgICAgICAgICAgcmFkaXVzIDE1MFxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9QcmVzc2FibGU+XG5cbiAgICAgICAgICAgIDxQcmVzc2FibGUgYW5kcm9pZF9yaXBwbGU9e3tib3JkZXJsZXNzOiBmYWxzZSwgcmFkaXVzOiA3MH19PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJsb2NrfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5idXR0b24sIG5hdGl2ZUZlZWRiYWNrQnV0dG9uXX0+XG4gICAgICAgICAgICAgICAgICByYWRpdXMgNzAsIHdpdGggYm9yZGVyXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICA8L1ZpZXc+XG5cbiAgICAgICAgICA8UHJlc3NhYmxlIGFuZHJvaWRfcmlwcGxlPXt7Ym9yZGVybGVzczogZmFsc2V9fT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYmxvY2t9PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5idXR0b24sIG5hdGl2ZUZlZWRiYWNrQnV0dG9uXX0+XG4gICAgICAgICAgICAgICAgd2l0aCBib3JkZXIsIGRlZmF1bHQgY29sb3IgYW5kIHJhZGl1c1xuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG5cbiAgICAgICAgICA8VmlldyBzdHlsZT17e2FsaWduSXRlbXM6ICdjZW50ZXInfX0+XG4gICAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICAgIGFuZHJvaWRfcmlwcGxlPXt7XG4gICAgICAgICAgICAgICAgYm9yZGVybGVzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9yZWdyb3VuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgIHNvdXJjZT17e1xuICAgICAgICAgICAgICAgICAgdXJpOiAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2Fkcy9waWNzL3N1Y2Nlc3NzdG9yaWVzLnBuZycsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmltYWdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgICAgICA8VGV4dD51c2UgZm9yZWdyb3VuZDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnPFRleHQgb25QcmVzcz17Zm59PiB3aXRoIGhpZ2hsaWdodCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFRleHRPblByZXNzQm94IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ByZXNzYWJsZSBkZWxheSBmb3IgZXZlbnRzJyxcbiAgICBkZXNjcmlwdGlvbjogKCc8UHJlc3NhYmxlPiBhbHNvIGFjY2VwdCBkZWxheVByZXNzSW4sICcgK1xuICAgICAgJ2RlbGF5UHJlc3NPdXQsIGFuZCBkZWxheUxvbmdQcmVzcyBhcyBwcm9wcy4gVGhlc2UgcHJvcHMgaW1wYWN0IHRoZSAnICtcbiAgICAgICd0aW1pbmcgb2YgZmVlZGJhY2sgZXZlbnRzLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFByZXNzYWJsZURlbGF5RXZlbnRzIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJzNEIFRvdWNoIC8gRm9yY2UgVG91Y2gnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ2lQaG9uZSA4IGFuZCA4IHBsdXMgc3VwcG9ydCAzRCB0b3VjaCwgd2hpY2ggYWRkcyBhIGZvcmNlIHByb3BlcnR5IHRvIHRvdWNoZXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxGb3JjZVRvdWNoRXhhbXBsZSAvPjtcbiAgICB9LFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUHJlc3NhYmxlIEhpdCBTbG9wJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnPFByZXNzYWJsZT4gY29tcG9uZW50cyBhY2NlcHQgaGl0U2xvcCBwcm9wIHdoaWNoIGV4dGVuZHMgdGhlIHRvdWNoIGFyZWEgJyArXG4gICAgICAgICd3aXRob3V0IGNoYW5naW5nIHRoZSB2aWV3IGJvdW5kcy4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxQcmVzc2FibGVIaXRTbG9wIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ByZXNzYWJsZSBOYXRpdmUgTWV0aG9kcycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoJzxQcmVzc2FibGU+IGNvbXBvbmVudHMgZXhwb3NlIG5hdGl2ZSBtZXRob2RzIGxpa2UgYG1lYXN1cmVgLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFByZXNzYWJsZU5hdGl2ZU1ldGhvZHMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRGlzYWJsZWQgUHJlc3NhYmxlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICgnPFByZXNzYWJsZT4gY29tcG9uZW50cyBhY2NlcHQgZGlzYWJsZWQgcHJvcCB3aGljaCBwcmV2ZW50cyAnICtcbiAgICAgICAgJ2FueSBpbnRlcmFjdGlvbiB3aXRoIGNvbXBvbmVudCc6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFByZXNzYWJsZURpc2FibGVkIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ByZXNzYWJsZSB3aXRoIGFyaWEtbGFiZWw9XCJsYWJlbFwiJyxcbiAgICBkZXNjcmlwdGlvbjogKCdOb3RlOiBUaGlzIHByb3AgY2hhbmdlcyB0aGUgdGV4dCB0aGF0IGEgc2NyZWVuICcgK1xuICAgICAgJ3JlYWRlciBhbm5vdW5jZXMgKHRoZXJlIGFyZSBubyB2aXN1YWwgZGlmZmVyZW5jZXMpLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFByZXNzYWJsZUFyaWFMYWJlbCAvPjtcbiAgICB9LFxuICB9LFxuXTtcblxuaWYgKFJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzLnNob3VsZFByZXNzaWJpbGl0eVVzZVczQ1BvaW50ZXJFdmVudHNGb3JIb3ZlcigpKSB7XG4gIGV4YW1wbGVzLnB1c2goe1xuICAgIHRpdGxlOiAnQ2hhbmdlIHN0eWxlIGJhc2VkIG9uIEhvdmVyJyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFByZXNzYWJsZUhvdmVyU3R5bGUgLz47XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydHMuZXhhbXBsZXMgPSBleGFtcGxlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIFJlZnJlc2hDb250cm9sLFxuICBTY3JvbGxWaWV3LFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBUb3VjaGFibGVXaXRob3V0RmVlZGJhY2ssXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgcm93OiB7XG4gICAgYm9yZGVyQ29sb3I6ICdncmV5JyxcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgICBwYWRkaW5nOiAyMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2E1Nzk1JyxcbiAgICBtYXJnaW46IDUsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICAgIGNvbG9yOiAnI2ZmZicsXG4gIH0sXG4gIHNjcm9sbHZpZXc6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxufSk7XG5cbmNsYXNzIFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIF9vbkNsaWNrID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnByb3BzLmRhdGEpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayBvblByZXNzPXt0aGlzLl9vbkNsaWNrfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgIDxUZXh0IHRlc3RJRD1cInJlZnJlc2hfY29udHJvbF9yb3dcIiBzdHlsZT17c3R5bGVzLnRleHR9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZGF0YS50ZXh0ICsgJyAoJyArIHRoaXMucHJvcHMuZGF0YS5jbGlja3MgKyAnIGNsaWNrcyknfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2s+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBSZWZyZXNoQ29udHJvbEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICBpc1JlZnJlc2hpbmc6IGZhbHNlLFxuICAgIGxvYWRlZDogMCxcbiAgICByb3dEYXRhOiBBcnJheS5mcm9tKG5ldyBBcnJheSgyMCkpLm1hcCgodmFsLCBpKSA9PiAoe1xuICAgICAgdGV4dDogJ0luaXRpYWwgcm93ICcgKyBpLFxuICAgICAgY2xpY2tzOiAwLFxuICAgIH0pKSxcbiAgfTtcblxuICBfb25DbGljayA9IHJvdyA9PiB7XG4gICAgcm93LmNsaWNrcysrO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcm93RGF0YTogdGhpcy5zdGF0ZS5yb3dEYXRhLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5zdGF0ZS5yb3dEYXRhLm1hcCgocm93LCBpaSkgPT4ge1xuICAgICAgcmV0dXJuIDxSb3cga2V5PXtpaX0gZGF0YT17cm93fSBvbkNsaWNrPXt0aGlzLl9vbkNsaWNrfSAvPjtcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e3N0eWxlcy5zY3JvbGx2aWV3fVxuICAgICAgICByZWZyZXNoQ29udHJvbD17XG4gICAgICAgICAgPFJlZnJlc2hDb250cm9sXG4gICAgICAgICAgICByZWZyZXNoaW5nPXt0aGlzLnN0YXRlLmlzUmVmcmVzaGluZ31cbiAgICAgICAgICAgIG9uUmVmcmVzaD17dGhpcy5fb25SZWZyZXNofVxuICAgICAgICAgICAgdGludENvbG9yPVwiI2ZmMDAwMFwiXG4gICAgICAgICAgICB0aXRsZT1cIkxvYWRpbmcuLi5cIlxuICAgICAgICAgICAgdGl0bGVDb2xvcj1cIiMwMGZmMDBcIlxuICAgICAgICAgICAgY29sb3JzPXtbJyNmZjAwMDAnLCAnIzAwZmYwMCcsICcjMDAwMGZmJ119XG4gICAgICAgICAgICBwcm9ncmVzc0JhY2tncm91bmRDb2xvcj1cIiNmZmZmMDBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH0+XG4gICAgICAgIHtyb3dzfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICk7XG4gIH1cblxuICBfb25SZWZyZXNoID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe2lzUmVmcmVzaGluZzogdHJ1ZX0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gcHJlcGVuZCAxMCBpdGVtc1xuICAgICAgY29uc3Qgcm93RGF0YSA9IEFycmF5LmZyb20obmV3IEFycmF5KDEwKSlcbiAgICAgICAgLm1hcCgodmFsLCBpKSA9PiAoe1xuICAgICAgICAgIHRleHQ6ICdMb2FkZWQgcm93ICcgKyAoK3RoaXMuc3RhdGUubG9hZGVkICsgaSksXG4gICAgICAgICAgY2xpY2tzOiAwLFxuICAgICAgICB9KSlcbiAgICAgICAgLmNvbmNhdCh0aGlzLnN0YXRlLnJvd0RhdGEpO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLnN0YXRlLmxvYWRlZCArIDEwLFxuICAgICAgICBpc1JlZnJlc2hpbmc6IGZhbHNlLFxuICAgICAgICByb3dEYXRhOiByb3dEYXRhLFxuICAgICAgfSk7XG4gICAgfSwgNTAwMCk7XG4gIH07XG59XG5cbmV4cG9ydHMudGl0bGUgPSAnUmVmcmVzaENvbnRyb2wnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9yZWZyZXNoY29udHJvbCc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0FkZHMgcHVsbC10by1yZWZyZXNoIHN1cHBvcnQgdG8gYSBzY3JvbGx2aWV3Lic7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdTaW1wbGUgcmVmcmVzaCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgUmVmcmVzaENvbnRyb2xFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPFJlZnJlc2hDb250cm9sRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBTY3JvbGxWaWV3LFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBUb3VjaGFibGVPcGFjaXR5LFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jb25zdCBOVU1fSVRFTVMgPSAyMDtcblxuY2xhc3MgU2Nyb2xsVmlld1NpbXBsZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0+IHtcbiAgbWFrZUl0ZW1zOiAobkl0ZW1zOiBudW1iZXIsIHN0eWxlczogYW55KSA9PiBBcnJheTxhbnk+ID0gKFxuICAgIG5JdGVtczogbnVtYmVyLFxuICAgIHN0eWxlcyxcbiAgKTogQXJyYXk8YW55PiA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7XG4gICAgICBpdGVtc1tpXSA9IChcbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHkga2V5PXtpfSBzdHlsZT17c3R5bGVzfT5cbiAgICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJzY3JvbGxfdmlld19pdGVtXCI+eydJdGVtICcgKyBpfTwvVGV4dD5cbiAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAvLyBPbmUgb2YgdGhlIGl0ZW1zIGlzIGEgaG9yaXpvbnRhbCBzY3JvbGwgdmlld1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tYWtlSXRlbXMoTlVNX0lURU1TLCBzdHlsZXMuaXRlbVdyYXBwZXIpO1xuICAgIGl0ZW1zWzRdID0gKFxuICAgICAgPFNjcm9sbFZpZXcga2V5PXsnc2Nyb2xsVmlldyd9IGhvcml6b250YWw9e3RydWV9PlxuICAgICAgICB7dGhpcy5tYWtlSXRlbXMoTlVNX0lURU1TLCBbXG4gICAgICAgICAgc3R5bGVzLml0ZW1XcmFwcGVyLFxuICAgICAgICAgIHN0eWxlcy5ob3Jpem9udGFsSXRlbVdyYXBwZXIsXG4gICAgICAgIF0pfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICk7XG4gICAgaXRlbXMucHVzaChcbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIGtleT17J3Njcm9sbFZpZXdTbmFwJ31cbiAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICBzbmFwVG9JbnRlcnZhbD17MjEwLjB9XG4gICAgICAgIHBhZ2luZ0VuYWJsZWQ+XG4gICAgICAgIHt0aGlzLm1ha2VJdGVtcyhOVU1fSVRFTVMsIFtcbiAgICAgICAgICBzdHlsZXMuaXRlbVdyYXBwZXIsXG4gICAgICAgICAgc3R5bGVzLmhvcml6b250YWxJdGVtV3JhcHBlcixcbiAgICAgICAgICBzdHlsZXMuaG9yaXpvbnRhbFBhZ2luZ0l0ZW1XcmFwcGVyLFxuICAgICAgICBdKX1cbiAgICAgIDwvU2Nyb2xsVmlldz4sXG4gICAgKTtcbiAgICBpdGVtcy5wdXNoKFxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAga2V5PXsnc2Nyb2xsVmlld1NuYXBTdGFydCd9XG4gICAgICAgIGhvcml6b250YWxcbiAgICAgICAgc25hcFRvQWxpZ25tZW50PXsnc3RhcnQnfVxuICAgICAgICBwYWdpbmdFbmFibGVkPlxuICAgICAgICB7dGhpcy5tYWtlSXRlbXMoTlVNX0lURU1TLCBbXG4gICAgICAgICAgc3R5bGVzLml0ZW1XcmFwcGVyLFxuICAgICAgICAgIHN0eWxlcy5ob3Jpem9udGFsSXRlbVdyYXBwZXIsXG4gICAgICAgICAgc3R5bGVzLmhvcml6b250YWxQYWdpbmdJdGVtV3JhcHBlcixcbiAgICAgICAgXSl9XG4gICAgICA8L1Njcm9sbFZpZXc+LFxuICAgICk7XG4gICAgaXRlbXMucHVzaChcbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIGtleT17J3Njcm9sbFZpZXdTbmFwQ2VudGVyJ31cbiAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICBzbmFwVG9BbGlnbm1lbnQ9eydjZW50ZXInfVxuICAgICAgICBwYWdpbmdFbmFibGVkPlxuICAgICAgICB7dGhpcy5tYWtlSXRlbXMoTlVNX0lURU1TLCBbXG4gICAgICAgICAgc3R5bGVzLml0ZW1XcmFwcGVyLFxuICAgICAgICAgIHN0eWxlcy5ob3Jpem9udGFsSXRlbVdyYXBwZXIsXG4gICAgICAgICAgc3R5bGVzLmhvcml6b250YWxQYWdpbmdJdGVtV3JhcHBlcixcbiAgICAgICAgXSl9XG4gICAgICA8L1Njcm9sbFZpZXc+LFxuICAgICk7XG4gICAgaXRlbXMucHVzaChcbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIGtleT17J3Njcm9sbFZpZXdTbmFwRW5kJ31cbiAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICBzbmFwVG9BbGlnbm1lbnQ9eydlbmQnfVxuICAgICAgICBwYWdpbmdFbmFibGVkPlxuICAgICAgICB7dGhpcy5tYWtlSXRlbXMoTlVNX0lURU1TLCBbXG4gICAgICAgICAgc3R5bGVzLml0ZW1XcmFwcGVyLFxuICAgICAgICAgIHN0eWxlcy5ob3Jpem9udGFsSXRlbVdyYXBwZXIsXG4gICAgICAgICAgc3R5bGVzLmhvcml6b250YWxQYWdpbmdJdGVtV3JhcHBlcixcbiAgICAgICAgXSl9XG4gICAgICA8L1Njcm9sbFZpZXc+LFxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbFNjcm9sbFZpZXcgPSAoXG4gICAgICA8U2Nyb2xsVmlldyBzdHlsZT17c3R5bGVzLnZlcnRpY2FsU2Nyb2xsVmlld30+e2l0ZW1zfTwvU2Nyb2xsVmlldz5cbiAgICApO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsVmlldztcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHZlcnRpY2FsU2Nyb2xsVmlldzoge1xuICAgIG1hcmdpbjogMTAsXG4gIH0sXG4gIGl0ZW1XcmFwcGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2RkZGRkZCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiA1LFxuICAgIGJvcmRlcldpZHRoOiA1LFxuICAgIGJvcmRlckNvbG9yOiAnI2E1MmEyYScsXG4gICAgcGFkZGluZzogMzAsXG4gICAgbWFyZ2luOiA1LFxuICB9LFxuICBob3Jpem9udGFsSXRlbVdyYXBwZXI6IHtcbiAgICBwYWRkaW5nOiA1MCxcbiAgfSxcbiAgaG9yaXpvbnRhbFBhZ2luZ0l0ZW1XcmFwcGVyOiB7XG4gICAgd2lkdGg6IDIwMCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ1Njcm9sbFZpZXdTaW1wbGVFeGFtcGxlJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnQmFzaWMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9XG4gICdDb21wb25lbnQgdGhhdCBlbmFibGVzIHNjcm9sbGluZyB0aHJvdWdoIGNoaWxkIGNvbXBvbmVudHMuJztcblxuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnU2ltcGxlIHNjcm9sbCB2aWV3JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBTY3JvbGxWaWV3U2ltcGxlRXhhbXBsZT4ge1xuICAgICAgcmV0dXJuIDxTY3JvbGxWaWV3U2ltcGxlRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQnV0dG9uLFxuICBEZXZpY2VJbmZvLFxuICBNb2RhbCxcbiAgU2FmZUFyZWFWaWV3LFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBWaWV3LFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jbGFzcyBTYWZlQXJlYVZpZXdFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICB7Li4ufSxcbiAge3xcbiAgICBtb2RhbFZpc2libGU6IGJvb2xlYW4sXG4gIHx9LFxuPiB7XG4gIHN0YXRlOiB7bW9kYWxWaXNpYmxlOiBib29sZWFufSA9IHtcbiAgICBtb2RhbFZpc2libGU6IGZhbHNlLFxuICB9O1xuXG4gIF9zZXRNb2RhbFZpc2libGUgPSAodmlzaWJsZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe21vZGFsVmlzaWJsZTogdmlzaWJsZX0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxNb2RhbFxuICAgICAgICAgIHZpc2libGU9e3RoaXMuc3RhdGUubW9kYWxWaXNpYmxlfVxuICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXsoKSA9PiB0aGlzLl9zZXRNb2RhbFZpc2libGUoZmFsc2UpfVxuICAgICAgICAgIGFuaW1hdGlvblR5cGU9XCJzbGlkZVwiXG4gICAgICAgICAgc3VwcG9ydGVkT3JpZW50YXRpb25zPXtbJ3BvcnRyYWl0JywgJ2xhbmRzY2FwZSddfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLm1vZGFsfT5cbiAgICAgICAgICAgIDxTYWZlQXJlYVZpZXcgc3R5bGU9e3N0eWxlcy5zYWZlQXJlYX0+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2FmZUFyZWFDb250ZW50fT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBvblByZXNzPXt0aGlzLl9zZXRNb2RhbFZpc2libGUuYmluZCh0aGlzLCBmYWxzZSl9XG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1NhZmVBcmVhVmlldz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvTW9kYWw+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXt0aGlzLl9zZXRNb2RhbFZpc2libGUuYmluZCh0aGlzLCB0cnVlKX1cbiAgICAgICAgICB0aXRsZT1cIlByZXNlbnQgTW9kYWwgU2NyZWVuIHdpdGggU2FmZUFyZWFWaWV3XCJcbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIElzSVBob25lWEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgSXMgdGhpcyBhbiBpUGhvbmUgWDp7JyAnfVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbc2tldGNoeS1udWxsLWJvb2xdXG4gICAgICAgICAgICBEZXZpY2VJbmZvLmdldENvbnN0YW50cygpLmlzSVBob25lWF9kZXByZWNhdGVkXG4gICAgICAgICAgICAgID8gJ1llYWghJ1xuICAgICAgICAgICAgICA6ICdOb3BlLiAoT3IgYGlzSVBob25lWF9kZXByZWNhdGVkYCB3YXMgYWxyZWFkeSByZW1vdmVkLiknXG4gICAgICAgICAgfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIG1vZGFsOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgc2FmZUFyZWE6IHtcbiAgICBmbGV4OiAxLFxuICAgIGhlaWdodDogMTAwMCxcbiAgfSxcbiAgc2FmZUFyZWFDb250ZW50OiB7XG4gICAgZmxleDogMSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZhYWFhJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG59KTtcblxuZXhwb3J0cy5kaXNwbGF5TmFtZSA9ICh1bmRlZmluZWQ6ID9zdHJpbmcpO1xuZXhwb3J0cy5mcmFtZXdvcmsgPSAnUmVhY3QnO1xuZXhwb3J0cy50aXRsZSA9ICdTYWZlQXJlYVZpZXcnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdVSSc7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9zYWZlYXJlYXZpZXcnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9XG4gICdTYWZlQXJlYVZpZXcgYXV0b21hdGljYWxseSBhcHBsaWVzIHBhZGRpbmdzIHJlZmxlY3QgdGhlIHBvcnRpb24gb2YgdGhlIHZpZXcgdGhhdCBpcyBub3QgY292ZXJlZCBieSBvdGhlciAoc3BlY2lhbCkgYW5jZXN0b3Igdmlld3MuJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJzxTYWZlQXJlYVZpZXc+IEV4YW1wbGUnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1NhZmVBcmVhVmlldyBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgcGFkZGluZ3MgcmVmbGVjdCB0aGUgcG9ydGlvbiBvZiB0aGUgdmlldyB0aGF0IGlzIG5vdCBjb3ZlcmVkIGJ5IG90aGVyIChzcGVjaWFsKSBhbmNlc3RvciB2aWV3cy4nLFxuICAgIHJlbmRlcjogKCk6IFJlYWN0Lk5vZGUgPT4gPFNhZmVBcmVhVmlld0V4YW1wbGUgLz4sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ2lzSVBob25lWF9kZXByZWNhdGVkIEV4YW1wbGUnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgKCdgRGV2aWNlSW5mby5pc0lQaG9uZVhfZGVwcmVjYXRlZGAgcmV0dXJucyB0cnVlIG9ubHkgb24gaVBob25lIFguICcgK1xuICAgICAgICAnTm90ZTogVGhpcyBwcm9wIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSAnICtcbiAgICAgICAgJ3JlbGVhc2UuIFBsZWFzZSB1c2UgdGhpcyBvbmx5IGZvciBhIHF1aWNrIGFuZCB0ZW1wb3Jhcnkgc29sdXRpb24uICcgK1xuICAgICAgICAnVXNlIDxTYWZlQXJlYVZpZXc+IGluc3RlYWQuJzogc3RyaW5nKSxcbiAgICByZW5kZXI6ICgpOiBSZWFjdC5Ob2RlID0+IDxJc0lQaG9uZVhFeGFtcGxlIC8+LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcbmltcG9ydCB0eXBlIHtWaWV3U3R5bGVQcm9wfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCBTY3JvbGxWaWV3UHJlc3NhYmxlU3RpY2t5SGVhZGVyRXhhbXBsZSBmcm9tICcuL1Njcm9sbFZpZXdQcmVzc2FibGVTdGlja3lIZWFkZXJFeGFtcGxlJztcbmltcG9ydCBudWxsdGhyb3dzIGZyb20gJ251bGx0aHJvd3MnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIFBsYXRmb3JtLFxuICBSZWZyZXNoQ29udHJvbCxcbiAgU2Nyb2xsVmlldyxcbiAgU3R5bGVTaGVldCxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBUb3VjaGFibGVPcGFjaXR5LFxuICBWaWV3LFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jbGFzcyBFbmFibGVEaXNhYmxlTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwge3Njcm9sbEVuYWJsZWQ6IGJvb2xlYW59PiB7XG4gIHN0YXRlOiB7c2Nyb2xsRW5hYmxlZDogYm9vbGVhbn0gPSB7XG4gICAgc2Nyb2xsRW5hYmxlZDogdHJ1ZSxcbiAgfTtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICBhdXRvbWF0aWNhbGx5QWRqdXN0Q29udGVudEluc2V0cz17ZmFsc2V9XG4gICAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuc2Nyb2xsVmlld31cbiAgICAgICAgICBzY3JvbGxFbmFibGVkPXt0aGlzLnN0YXRlLnNjcm9sbEVuYWJsZWR9PlxuICAgICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgeydTY3JvbGxpbmcgZW5hYmxlZCA9ICcgKyB0aGlzLnN0YXRlLnNjcm9sbEVuYWJsZWQudG9TdHJpbmcoKX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgbGFiZWw9XCJEaXNhYmxlIFNjcm9sbGluZ1wiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2Nyb2xsRW5hYmxlZDogZmFsc2V9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgbGFiZWw9XCJFbmFibGUgU2Nyb2xsaW5nXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtzY3JvbGxFbmFibGVkOiB0cnVlfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmxldCBBcHBlbmRpbmdMaXN0SXRlbUNvdW50ID0gNjtcbmNsYXNzIEFwcGVuZGluZ0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHt9LFxuICB7aXRlbXM6IEFycmF5PFJlYWN0JEVsZW1lbnQ8Q2xhc3M8SXRlbT4+Pn0sXG4+IHtcbiAgc3RhdGU6IHtpdGVtczogQXJyYXk8UmVhY3QuRWxlbWVudDxDbGFzczxJdGVtPj4+fSA9IHtcbiAgICBpdGVtczogWy4uLkFycmF5KEFwcGVuZGluZ0xpc3RJdGVtQ291bnQpXS5tYXAoKF8sIGlpKSA9PiAoXG4gICAgICA8SXRlbSBtc2c9e2BJdGVtICR7aWl9YH0gLz5cbiAgICApKSxcbiAgfTtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICBhdXRvbWF0aWNhbGx5QWRqdXN0Q29udGVudEluc2V0cz17ZmFsc2V9XG4gICAgICAgICAgbWFpbnRhaW5WaXNpYmxlQ29udGVudFBvc2l0aW9uPXt7XG4gICAgICAgICAgICBtaW5JbmRleEZvclZpc2libGU6IDAsXG4gICAgICAgICAgICBhdXRvc2Nyb2xsVG9Ub3BUaHJlc2hvbGQ6IDEwLFxuICAgICAgICAgIH19XG4gICAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuc2Nyb2xsVmlld30+XG4gICAgICAgICAge3RoaXMuc3RhdGUuaXRlbXMubWFwKGl0ZW0gPT5cbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBSZWFjdC5FbGVtZW50IGludGVybmFsIGluc3BlY3Rpb25cbiAgICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudChpdGVtLCB7a2V5OiBpdGVtLnByb3BzLm1zZ30pLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICBob3Jpem9udGFsPXt0cnVlfVxuICAgICAgICAgIGF1dG9tYXRpY2FsbHlBZGp1c3RDb250ZW50SW5zZXRzPXtmYWxzZX1cbiAgICAgICAgICBtYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb249e3tcbiAgICAgICAgICAgIG1pbkluZGV4Rm9yVmlzaWJsZTogMSxcbiAgICAgICAgICAgIGF1dG9zY3JvbGxUb1RvcFRocmVzaG9sZDogMTAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCBzdHlsZXMuaG9yaXpvbnRhbFNjcm9sbFZpZXddfT5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5pdGVtcy5tYXAoaXRlbSA9PlxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFJlYWN0LkVsZW1lbnQgaW50ZXJuYWwgaW5zcGVjdGlvblxuICAgICAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KGl0ZW0sIHtrZXk6IGl0ZW0ucHJvcHMubXNnLCBzdHlsZTogbnVsbH0pLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGxhYmVsPVwiQWRkIHRvIHRvcFwiXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IEFwcGVuZGluZ0xpc3RJdGVtQ291bnQrKztcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gc3R5bGU9e3twYWRkaW5nVG9wOiBpZHggKiA1fX0gbXNnPXtgSXRlbSAke2lkeH1gfSAvPixcbiAgICAgICAgICAgICAgICAgIF0uY29uY2F0KHN0YXRlLml0ZW1zKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cIlJlbW92ZSB0b3BcIlxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAgICAgICAgICAgaXRlbXM6IHN0YXRlLml0ZW1zLnNsaWNlKDEpLFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJDaGFuZ2UgaGVpZ2h0IHRvcFwiXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KHN0YXRlLml0ZW1zWzBdLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7cGFkZGluZ0JvdHRvbTogTWF0aC5yYW5kb20oKSAqIDQwfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KHN0YXRlLml0ZW1zLnNsaWNlKDEpKSxcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cIkFkZCB0byBlbmRcIlxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAgICAgICAgICAgaXRlbXM6IHN0YXRlLml0ZW1zLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgIDxJdGVtIG1zZz17YEl0ZW0gJHtBcHBlbmRpbmdMaXN0SXRlbUNvdW50Kyt9YH0gLz4sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGxhYmVsPVwiUmVtb3ZlIGVuZFwiXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtczogc3RhdGUuaXRlbXMuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJDaGFuZ2UgaGVpZ2h0IGVuZFwiXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtczogc3RhdGUuaXRlbXMuc2xpY2UoMCwgLTEpLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudChzdGF0ZS5pdGVtc1tzdGF0ZS5pdGVtcy5sZW5ndGggLSAxXSwge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZToge3BhZGRpbmdCb3R0b206IE1hdGgucmFuZG9tKCkgKiA0MH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIENlbnRlckNvbnRlbnRMaXN0KCk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxWaWV3XG4gICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkXG4gICAgICBzdHlsZT17c3R5bGVzLnNjcm9sbFZpZXd9XG4gICAgICBjZW50ZXJDb250ZW50PXt0cnVlfT5cbiAgICAgIDxUZXh0PlRoaXMgc2hvdWxkIGJlIGluIGNlbnRlci48L1RleHQ+XG4gICAgPC9TY3JvbGxWaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBDb250ZW50T2Zmc2V0TGlzdCgpOiBSZWFjdC5Ob2RlIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsVmlld1xuICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMTAwfV19XG4gICAgICBob3Jpem9udGFsPXt0cnVlfVxuICAgICAgY29udGVudE9mZnNldD17e3g6IDEwMCwgeTogMH19PlxuICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICA8L1Njcm9sbFZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNjcm9sbFZpZXdTY3JvbGxUb0V4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGxldCBfc2Nyb2xsVmlldzogP1JlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFNjcm9sbFZpZXc+O1xuICBjb25zdCBbc2Nyb2xsZWRUb1RvcCwgc2V0U2Nyb2xsZWRUb1RvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRleHRTdHlsZSA9IHtjb2xvcjogJ2JsdWUnLCBtYXJnaW5Cb3R0b206IDEwLCB0ZXh0QWxpZ246ICdjZW50ZXInfTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIHtzY3JvbGxlZFRvVG9wID8gKFxuICAgICAgICA8VGV4dCBzdHlsZT17dGV4dFN0eWxlfT5zY3JvbGxlZFRvVG9wIGludm9rZWQ8L1RleHQ+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiZ3JpZFwiXG4gICAgICAgIHJlZj17c2Nyb2xsVmlldyA9PiB7XG4gICAgICAgICAgX3Njcm9sbFZpZXcgPSBzY3JvbGxWaWV3O1xuICAgICAgICB9fVxuICAgICAgICBhdXRvbWF0aWNhbGx5QWRqdXN0Q29udGVudEluc2V0cz17ZmFsc2V9XG4gICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWRcbiAgICAgICAgb25TY3JvbGw9eygpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnb25TY3JvbGwhJyk7XG4gICAgICAgICAgc2V0U2Nyb2xsZWRUb1RvcChmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uU2Nyb2xsVG9Ub3A9eygpID0+IHtcbiAgICAgICAgICBzZXRTY3JvbGxlZFRvVG9wKHRydWUpO1xuICAgICAgICB9fVxuICAgICAgICBzY3JvbGxFdmVudFRocm90dGxlPXsyMDB9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMuc2Nyb2xsVmlld31cbiAgICAgICAgdGVzdElEPVwic2Nyb2xsX3ZlcnRpY2FsXCI+XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGxhYmVsPVwiU2Nyb2xsIHRvIHRvcFwiXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBudWxsdGhyb3dzPCRGbG93Rml4TWU+KF9zY3JvbGxWaWV3KS5zY3JvbGxUbyh7eTogMH0pO1xuICAgICAgICB9fVxuICAgICAgICB0ZXN0SUQ9XCJzY3JvbGxfdG9fdG9wX2J1dHRvblwiXG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD1cIlNjcm9sbCB0byBib3R0b21cIlxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgbnVsbHRocm93czwkRmxvd0ZpeE1lPihfc2Nyb2xsVmlldykuc2Nyb2xsVG9FbmQoe2FuaW1hdGVkOiB0cnVlfSk7XG4gICAgICAgIH19XG4gICAgICAgIHRlc3RJRD1cInNjcm9sbF90b19ib3R0b21fYnV0dG9uXCJcbiAgICAgIC8+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGxhYmVsPVwiRmxhc2ggc2Nyb2xsIGluZGljYXRvcnNcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgbnVsbHRocm93czwkRmxvd0ZpeE1lPihfc2Nyb2xsVmlldykuZmxhc2hTY3JvbGxJbmRpY2F0b3JzKCk7XG4gICAgICAgIH19XG4gICAgICAgIHRlc3RJRD1cImZsYXNoX3Njcm9sbF9pbmRpY2F0b3JzX2J1dHRvblwiXG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZXhwb3J0cy5kaXNwbGF5TmFtZSA9ICdTY3JvbGxWaWV3RXhhbXBsZSc7XG5leHBvcnRzLnRpdGxlID0gJ1Njcm9sbFZpZXcnO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3Mvc2Nyb2xsdmlldyc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPVxuICAnQ29tcG9uZW50IHRoYXQgZW5hYmxlcyBzY3JvbGxpbmcgdGhyb3VnaCBjaGlsZCBjb21wb25lbnRzJztcbmNvbnN0IGV4YW1wbGVzOiBBcnJheTxSTlRlc3Rlck1vZHVsZUV4YW1wbGU+ID0gW1xuICB7XG4gICAgbmFtZTogJ3Njcm9sbFRvJyxcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PlxcbicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVG8gbWFrZSBjb250ZW50IHNjcm9sbGFibGUsIHdyYXAgaXQgd2l0aGluIGEgPFNjcm9sbFZpZXc+IGNvbXBvbmVudCcsXG4gICAgcmVuZGVyOiBTY3JvbGxWaWV3U2Nyb2xsVG9FeGFtcGxlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2hvcml6b250YWxTY3JvbGxUbycsXG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gKGhvcml6b250YWwgPSB0cnVlKVxcbicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIllvdSBjYW4gZGlzcGxheSA8U2Nyb2xsVmlldz4ncyBjaGlsZCBjb21wb25lbnRzIGhvcml6b250YWxseSByYXRoZXIgdGhhbiB2ZXJ0aWNhbGx5XCIsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8SG9yaXpvbnRhbFNjcm9sbFZpZXcgZGlyZWN0aW9uPVwibHRyXCIgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2hvcml6b250YWxTY3JvbGxUb1JUTCcsXG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gKGhvcml6b250YWwgPSB0cnVlKSBpbiBSVExcXG4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJZb3UgY2FuIGRpc3BsYXkgPFNjcm9sbFZpZXc+J3MgY2hpbGQgY29tcG9uZW50cyBob3Jpem9udGFsbHkgcmF0aGVyIHRoYW4gdmVydGljYWxseVwiLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPEhvcml6b250YWxTY3JvbGxWaWV3IGRpcmVjdGlvbj1cInJ0bFwiIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IGVuYWJsZSAmIGRpc2FibGVcXG4nLFxuICAgIGRlc2NyaXB0aW9uOiAnU2Nyb2xsVmlldyBzY3JvbGxpbmcgYmVoYXZpb3VyIGNhbiBiZSBkaXNhYmxlZCBhbmQgZW5hYmxlZCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEVuYWJsZURpc2FibGVMaXN0IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBDb250ZW50XFxuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FkanVzdCBwcm9wZXJ0aWVzIG9mIGNvbnRlbnQgaW5zaWRlIFNjcm9sbFZpZXcuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8Q29udGVudEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IERlY2VsZXJhdGlvbiBSYXRlXFxuJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdEZXRlcm1pbmVzIGhvdyBxdWlja2x5IHRoZSBzY3JvbGwgdmlldyBkZWNlbGVyYXRlcyBhZnRlciB0aGUgdXNlciBsaWZ0cyB0aGVpciBmaW5nZXIuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8RGVjZWxlcmF0aW9uUmF0ZUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IEVuYWJsZSAmIERpc2FibGUgU2Nyb2xsaW5nIEJlaGF2aW9yXFxuJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdEaXJlY3Rpb25hbExvY2tFbmFibGVkIChpT1MpLCBkaXNhYmxlSW50ZXJ2YWxNb21lbnR1bSwgZGlzYWJsZVNjcm9sbFZpZXdQYW5SZXNwb25kZXIgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8RGlzYWJsZUVuYWJsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2ludmVydFN0aWNreUhlYWRlcnMnLFxuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IEludmVydCBTdGlja3kgSGVhZGVyc1xcbicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnSWYgc3RpY2t5IGhlYWRlcnMgc2hvdWxkIHN0aWNrIGF0IHRoZSBib3R0b20gaW5zdGVhZCBvZiB0aGUgdG9wIG9mIHRoZSBTY3JvbGxWaWV3LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCB3aXRoIGludmVydGVkIFNjcm9sbFZpZXdzLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEludmVydFN0aWNreUhlYWRlcnMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtdWx0aXBsZVN0aWNreUhlYWRlcnMnLFxuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IE11bHRpcGxlIFN0aWNreSBIZWFkZXJzXFxuJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdTY3JvbGwgZG93biB0byBzZWUgMyBzdGlja3kgaGVhZGVycyBzdGljayB3aGVuIHRoZXkgZ2V0IHRvIHRoZSB0b3AuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8TXVsdGlwbGVTdGlja3lIZWFkZXJzIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAncHJlc3NhYmxlU3RpY2t5SGVhZGVyJyxcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBQcmVzc2FibGUgU3RpY2t5IEhlYWRlclxcbicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnUHJlc3MgdGhlIGJsdWUgYm94IHRvIHRvZ2dsZSBpdCBiZXR3ZWVuIGJsdWUgYW5kIHllbGxvdy4gVGhlIGJveCBzaG91bGQgcmVtYWluIFByZXNzYWJsZSBhZnRlciBzY3JvbGxpbmcuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXt7aGVpZ2h0OiA0MDB9fT5cbiAgICAgICAgICA8U2Nyb2xsVmlld1ByZXNzYWJsZVN0aWNreUhlYWRlckV4YW1wbGUgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2tleWJvYXJkU2hvdWxkUGVyc2lzdFRhcHMnLFxuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IEtleWJvYXJkIE9wdGlvbnNcXG4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RvZ2dsZSB0aGUga2V5Ym9hcmQgdXNpbmcgdGhlIHNlYXJjaCBiYXIgYW5kIGRldGVybWluZSBrZXlib2FyZCBiZWhhdmlvciBpbiByZXNwb25zZSB0byBkcmFnIGFuZCB0YXAuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8S2V5Ym9hcmRFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBPbkNvbnRlbnRTaXplQ2hhbmdlXFxuJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGUgdGV4dCBiZWxvdyB3aWxsIGNoYW5nZSB3aGVuIHNjcm9sbGFibGUgY29udGVudCB2aWV3IG9mIHRoZSBTY3JvbGxWaWV3IGNoYW5nZXMuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8T25Db250ZW50U2l6ZUNoYW5nZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gT25Nb21lbnR1bVNjcm9sbFxcbicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnQW4gYWxlcnQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgbW9tZW50dW0gc2Nyb2xsIHN0YXJ0cyBvciBlbmRzLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPE9uTW9tZW50dW1TY3JvbGwgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IE9uU2Nyb2xsIE9wdGlvbnNcXG4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0NoYW5nZSB0aGUgYmVoYXZpb3Igb2Ygb25TY3JvbGwgdXNpbmcgdGhlc2Ugb3B0aW9uczogb25TY3JvbGxCZWdpbkRyYWcsIG9uU2Nyb2xsRW5kRHJhZywgb25TY3JvbGxUb1RvcCAoaU9TKSwgYW5kIG92ZXJTY3JvbGxNb2RlIChBbmRyb2lkKS4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxPblNjcm9sbE9wdGlvbnMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IFJlZnJlc2hDb250cm9sXFxuJyxcbiAgICBkZXNjcmlwdGlvbjogJ1B1bGwgZG93biB0byBzZWUgUmVmcmVzaENvbnRyb2wgaW5kaWNhdG9yLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFJlZnJlc2hDb250cm9sRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gUmVtb3ZlIENsaXBwZWQgU3Vidmlld3NcXG4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1doZW4gdHJ1ZSwgb2Zmc2NyZWVuIGNoaWxkIHZpZXdzICh3aG9zZSBvdmVyZmxvdyB2YWx1ZSBpcyBoaWRkZW4pIGFyZSByZW1vdmVkIGZyb20gdGhlaXIgbmF0aXZlIGJhY2tpbmcgc3VwZXJ2aWV3IHdoZW4gb2Zmc2NyZWVuLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFJlbW92ZUNsaXBwZWRTdWJ2aWV3cyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gU2Nyb2xsIEluZGljYXRvclxcbicsXG4gICAgZGVzY3JpcHRpb246ICdBZGp1c3QgcHJvcGVydGllcyBvZiB0aGUgc2Nyb2xsIGluZGljYXRvci4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxTY3JvbGxJbmRpY2F0b3JFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBTbmFwVG8gT3B0aW9uc1xcbicsXG4gICAgZGVzY3JpcHRpb246ICdBZGp1c3QgcHJvcGVydGllcyBvZiBzbmFwcGluZyB0byB0aGUgc2Nyb2xsIHZpZXcuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8U25hcFRvT3B0aW9ucyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gKGNvbnRlbnRPZmZzZXQgPSB7eDogMTAwLCB5OiAwfSlcXG4nLFxuICAgIGRlc2NyaXB0aW9uOiAnSW5pdGlhbCBjb250ZW50T2Zmc2V0IGNhbiBiZSBzZXQgb24gU2Nyb2xsVmlldy4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxDb250ZW50T2Zmc2V0TGlzdCAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gc21vb3RoIGJpLWRpcmVjdGlvbmFsIGNvbnRlbnQgbG9hZGluZ1xcbicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVGhlIGBtYWludGFpblZpc2libGVDb250ZW50UG9zaXRpb25gIHByb3AgYWxsb3dzIGluc2VydGlvbnMgdG8gZWl0aGVyIGVuZCBvZiB0aGUgY29udGVudCAnICtcbiAgICAgICd3aXRob3V0IGNhdXNpbmcgdGhlIHZpc2libGUgY29udGVudCB0byBqdW1wLiBSZS1vcmRlcmluZyBpcyBub3Qgc3VwcG9ydGVkLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gPEFwcGVuZGluZ0xpc3QgLz47XG4gICAgfSxcbiAgfSxcbl07XG5cbmlmIChQbGF0Zm9ybS5PUyA9PT0gJ2lvcycpIHtcbiAgZXhhbXBsZXMucHVzaCh7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gKGNlbnRlckNvbnRlbnQgPSB0cnVlKVxcbicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnU2Nyb2xsVmlldyBwdXRzIGl0cyBjb250ZW50IGluIHRoZSBjZW50ZXIgaWYgdGhlIGNvbnRlbnQgaXMgc21hbGxlciB0aGFuIHNjcm9sbCB2aWV3JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8Q2VudGVyQ29udGVudExpc3QgLz47XG4gICAgfSxcbiAgfSk7XG4gIGV4YW1wbGVzLnB1c2goe1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IEFsd2F5cyBCb3VuY2VzXFxuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Fsd2F5cyBib3VuY2UgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5WZXJ0aWNhbDwvVGV4dD5cbiAgICAgICAgICA8Qm91bmNlc0V4YW1wbGVWZXJ0aWNhbCAvPlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+SG9yaXpvbnRhbDwvVGV4dD5cbiAgICAgICAgICA8Qm91bmNlc0V4YW1wbGVIb3Jpem9udGFsIC8+XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbiAgZXhhbXBsZXMucHVzaCh7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gQm91bmNlcyAmIEJvdW5jZXMgWm9vbVxcbicsXG4gICAgZGVzY3JpcHRpb246ICdUaGVyZSBhcmUgZGlmZmVyZW50IG9wdGlvbnMgZm9yIGJvdW5jaW5nIGJlaGF2aW9yLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEJvdW5jZXNFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0pO1xuICBleGFtcGxlcy5wdXNoKHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBJbmRpY2F0b3IgU3R5bGVcXG4nLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhlcmUgYXJlIGRpZmZlcmVudCBvcHRpb25zIGZvciBpbmRpY2F0b3Igc3R5bGUgY29sb3JzLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEluZGljYXRvclN0eWxlIC8+O1xuICAgIH0sXG4gIH0pO1xuICBleGFtcGxlcy5wdXNoKHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBNYXhpbXVtICYgTWluaW11bSBab29tIFNjYWxlXFxuJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NldCB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBhbGxvd2VkIHpvb20gc2NhbGUuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8TWF4TWluWm9vbVNjYWxlIC8+O1xuICAgIH0sXG4gIH0pO1xuICBleGFtcGxlcy5wdXNoKHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBNYXhpbXVtICYgTWluaW11bSBab29tIFNjYWxlXFxuJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NldCB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBhbGxvd2VkIHpvb20gc2NhbGUuJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8TWF4TWluWm9vbVNjYWxlIC8+O1xuICAgIH0sXG4gIH0pO1xuICBleGFtcGxlcy5wdXNoKHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBTY3JvbGxUbyBPcHRpb25zXFxuJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUb2dnbGUgc2Nyb2xsVG9PdmVyZmxvd0VuYWJsZWQgYW5kIHNjcm9sbHNUb1RvcC4gV2hlbiBzY3JvbGxUb092ZXJmbG93RW5hYmxlZCBpcyB0cnVlLCB0aGUgc2Nyb2xsIHZpZXcgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQgYmV5b25kIGl0cyBjb250ZW50IHNpemUuIFdoZW4gc2Nyb2xsc1RvVG9wIGlzIHRydWUsIHRoZSBzY3JvbGwgdmlldyBzY3JvbGxzIHRvIHRvcCB3aGVuIHRoZSBzdGF0dXMgYmFyIGlzIHRhcHBlZC4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxTY3JvbGxUb09wdGlvbnMgLz47XG4gICAgfSxcbiAgfSk7XG59IGVsc2UgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgZXhhbXBsZXMucHVzaCh7XG4gICAgdGl0bGU6ICc8U2Nyb2xsVmlldz4gRW5kRmlsbENvbG9yICYgRmFkaW5nRWRnZUxlbmd0aFxcbicsXG4gICAgZGVzY3JpcHRpb246ICdUb2dnbGUgdG8gc2V0IGVuZEZpbGxDb2xvciBhbmQgZmFkaW5nRWRnZUxlbmd0aC4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxFbmRGaWxsQ29sb3JGYWRpbmdFZGdlTGVuIC8+O1xuICAgIH0sXG4gIH0pO1xuICBleGFtcGxlcy5wdXNoKHtcbiAgICB0aXRsZTogJzxTY3JvbGxWaWV3PiBwZXJzaXN0ZW50U2Nyb2xsQmFyXFxuJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RvZ2dsZSB0byBzZXQgcGVyc2lzdGVudFNjcm9sbGJhciBvcHRpb24uJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8QW5kcm9pZFNjcm9sbEJhck9wdGlvbnMgLz47XG4gICAgfSxcbiAgfSk7XG59XG5leHBvcnRzLmV4YW1wbGVzID0gZXhhbXBsZXM7XG5cbmNvbnN0IEFuZHJvaWRTY3JvbGxCYXJPcHRpb25zID0gKCkgPT4ge1xuICBjb25zdCBbcGVyc2lzdGVudFNjcm9sbEJhciwgc2V0UGVyc2lzdGVudFNjcm9sbEJhcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCB7aGVpZ2h0OiAyMDB9XX1cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICBwZXJzaXN0ZW50U2Nyb2xsYmFyPXtwZXJzaXN0ZW50U2Nyb2xsQmFyfT5cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgbGFiZWw9eydwZXJzaXN0ZW50U2Nyb2xsQmFyOiAnICsgcGVyc2lzdGVudFNjcm9sbEJhci50b1N0cmluZygpfVxuICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRQZXJzaXN0ZW50U2Nyb2xsQmFyKCFwZXJzaXN0ZW50U2Nyb2xsQmFyKX1cbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgSG9yaXpvbnRhbFNjcm9sbFZpZXcgPSAocHJvcHM6IHtkaXJlY3Rpb246ICdsdHInIHwgJ3J0bCd9KSA9PiB7XG4gIGNvbnN0IHtkaXJlY3Rpb259ID0gcHJvcHM7XG4gIGNvbnN0IHNjcm9sbFJlZiA9IFJlYWN0LnVzZVJlZjw/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgU2Nyb2xsVmlldz4+KCk7XG4gIGNvbnN0IHRpdGxlID0gZGlyZWN0aW9uID09PSAnbHRyJyA/ICdMVFIgTGF5b3V0JyA6ICdSVEwgTGF5b3V0JztcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17e2RpcmVjdGlvbn19PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT57dGl0bGV9PC9UZXh0PlxuICAgICAgey8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gKi99XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICByZWY9e3Njcm9sbFJlZn1cbiAgICAgICAgYXV0b21hdGljYWxseUFkanVzdENvbnRlbnRJbnNldHM9e2ZhbHNlfVxuICAgICAgICBob3Jpem9udGFsPXt0cnVlfVxuICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCBzdHlsZXMuaG9yaXpvbnRhbFNjcm9sbFZpZXddfVxuICAgICAgICB0ZXN0SUQ9eydzY3JvbGxfaG9yaXpvbnRhbCd9PlxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD1cIlNjcm9sbCB0byBzdGFydFwiXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBudWxsdGhyb3dzPCRGbG93Rml4TWU+KHNjcm9sbFJlZi5jdXJyZW50KS5zY3JvbGxUbyh7eDogMH0pO1xuICAgICAgICB9fVxuICAgICAgICB0ZXN0SUQ9eydzY3JvbGxfdG9fc3RhcnRfYnV0dG9uJ31cbiAgICAgIC8+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGxhYmVsPVwiU2Nyb2xsIHRvIGVuZFwiXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBudWxsdGhyb3dzPCRGbG93Rml4TWU+KHNjcm9sbFJlZi5jdXJyZW50KS5zY3JvbGxUb0VuZCh7XG4gICAgICAgICAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgICAgdGVzdElEPXsnc2Nyb2xsX3RvX2VuZF9idXR0b24nfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBFbmRGaWxsQ29sb3JGYWRpbmdFZGdlTGVuID0gKCkgPT4ge1xuICBjb25zdCBbZW5kRmlsbENvbG9yLCBzZXRFbmRGaWxsQ29sb3JdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbZmFkaW5nRWRnZUxlbiwgc2V0RmFkaW5nRWRnZUxlbl0gPSB1c2VTdGF0ZSgwKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIHN0eWxlPXtbc3R5bGVzLnNjcm9sbFZpZXcsIHtoZWlnaHQ6IDIwMH1dfVxuICAgICAgICBlbmRGaWxsQ29sb3I9e2VuZEZpbGxDb2xvcn1cbiAgICAgICAgZmFkaW5nRWRnZUxlbmd0aD17ZmFkaW5nRWRnZUxlbn1cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZD5cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgbGFiZWw9e2VuZEZpbGxDb2xvciA9PT0gJycgPyAnc2V0RW5kRmlsbENvbG9yJyA6ICdyZXNldEVuZEZpbGxDb2xvcid9XG4gICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgZW5kRmlsbENvbG9yID09PSAnJyA/IHNldEVuZEZpbGxDb2xvcignI0E5REZEMCcpIDogc2V0RW5kRmlsbENvbG9yKCcnKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD17ZmFkaW5nRWRnZUxlbiA9PT0gMCA/ICdzZXRGYWRpbmdFZGdlTGVuJyA6ICdyZXNldEZhZGluZ0VkZ2VMZW4nfVxuICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgIGZhZGluZ0VkZ2VMZW4gPT09IDAgPyBzZXRGYWRpbmdFZGdlTGVuKDMwMCkgOiBzZXRGYWRpbmdFZGdlTGVuKDApXG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgU25hcFRvT3B0aW9ucyA9ICgpID0+IHtcbiAgY29uc3QgW3NuYXBUb0FsaWdubWVudCwgc2V0U25hcFRvQWxpZ25tZW50XSA9IHVzZVN0YXRlKCdzdGFydCcpO1xuICBjb25zdCBzbmFwVG9BbGlnbm1lbnRNb2RlcyA9IFsnc3RhcnQnLCAnY2VudGVyJywgJ2VuZCddO1xuICBjb25zdCBbc25hcFRvRW5kLCBzZXRTbmFwVG9FbmRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtzbmFwVG9JbnRlcnZhbCwgc2V0U25hcFRvSW50ZXJ2YWxdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtzbmFwVG9PZmZzZXRzLCBzZXRTbmFwVG9PZmZzZXRzXSA9IHVzZVN0YXRlPEFycmF5PG51bWJlcj4+KFtdKTtcbiAgY29uc3QgW3NuYXBUb1N0YXJ0LCBzZXRTbmFwVG9TdGFydF0gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIHNuYXBUb0FsaWdubWVudD17c25hcFRvQWxpZ25tZW50fVxuICAgICAgICBzbmFwVG9FbmQ9e3NuYXBUb0VuZH1cbiAgICAgICAgc25hcFRvSW50ZXJ2YWw9e3NuYXBUb0ludGVydmFsfVxuICAgICAgICBzbmFwVG9PZmZzZXRzPXtzbmFwVG9PZmZzZXRzfVxuICAgICAgICBzbmFwVG9TdGFydD17c25hcFRvU3RhcnR9XG4gICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWQ+XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICB7UGxhdGZvcm0uT1MgPT09ICdpb3MnID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMucm93VGl0bGV9PlNlbGVjdCBTbmFwIHRvIEFsaWdubWVudCBNb2RlPC9UZXh0PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgICAgIHtzbmFwVG9BbGlnbm1lbnRNb2Rlcy5tYXAobGFiZWwgPT4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYWN0aXZlPXtzbmFwVG9BbGlnbm1lbnQgPT09IGxhYmVsfVxuICAgICAgICAgICAgICAgIGtleT17bGFiZWx9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldFNuYXBUb0FsaWdubWVudChsYWJlbCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGxhYmVsPXsnc25hcFRvRW5kOiAnICsgc25hcFRvRW5kLnRvU3RyaW5nKCl9XG4gICAgICAgIG9uUHJlc3M9eygpID0+IHNldFNuYXBUb0VuZCghc25hcFRvRW5kKX1cbiAgICAgIC8+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGxhYmVsPXsnc25hcFRvU3RhcnQ6ICcgKyBzbmFwVG9TdGFydC50b1N0cmluZygpfVxuICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRTbmFwVG9TdGFydCghc25hcFRvU3RhcnQpfVxuICAgICAgLz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgbGFiZWw9e1xuICAgICAgICAgIHNuYXBUb0ludGVydmFsID09PSAwID8gJ3NldFNuYXBUb0ludGVydmFsJyA6ICdyZXNldCBzbmFwVG9JbnRlcnZhbCdcbiAgICAgICAgfVxuICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgIHNuYXBUb0ludGVydmFsID09PSAwID8gc2V0U25hcFRvSW50ZXJ2YWwoMikgOiBzZXRTbmFwVG9JbnRlcnZhbCgwKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD17XG4gICAgICAgICAgc25hcFRvT2Zmc2V0cyA9PT0gW10gPyAnc2V0U25hcFRvT2Zmc2V0cycgOiAncmVzZXQgc25hcFRvT2Zmc2V0cydcbiAgICAgICAgfVxuICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgIHNuYXBUb09mZnNldHMgPT09IFtdXG4gICAgICAgICAgICA/IHNldFNuYXBUb09mZnNldHMoWzIsIDQsIDYsIDgsIDEwXSlcbiAgICAgICAgICAgIDogc2V0U25hcFRvT2Zmc2V0cyhbXSlcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBTY3JvbGxUb09wdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IFtzY3JvbGxUb092ZXJmbG93RW5hYmxlZCwgc2V0U2Nyb2xsVG9PdmVyZmxvd0VuYWJsZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2Nyb2xsc1RvVG9wLCBzZXRTY3JvbGxzVG9Ub3BdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCB7aGVpZ2h0OiAyMDB9XX1cbiAgICAgICAgc2Nyb2xsVG9PdmVyZmxvd0VuYWJsZWQ9e3Njcm9sbFRvT3ZlcmZsb3dFbmFibGVkfVxuICAgICAgICBzY3JvbGxzVG9Ub3A9e3Njcm9sbHNUb1RvcH1cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZD5cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgbGFiZWw9eydzY3JvbGxUb092ZXJmbG93RW5hYmxlZDogJyArIHNjcm9sbFRvT3ZlcmZsb3dFbmFibGVkLnRvU3RyaW5nKCl9XG4gICAgICAgIG9uUHJlc3M9eygpID0+IHNldFNjcm9sbFRvT3ZlcmZsb3dFbmFibGVkKCFzY3JvbGxUb092ZXJmbG93RW5hYmxlZCl9XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD17J3Njcm9sbHNUb1RvcDogJyArIHNjcm9sbHNUb1RvcC50b1N0cmluZygpfVxuICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRTY3JvbGxzVG9Ub3AoIXNjcm9sbHNUb1RvcCl9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IFNjcm9sbEluZGljYXRvckV4YW1wbGUgPSAoKSA9PiB7XG4gIGNvbnN0IFtzY3JvbGxJbmRpY2F0b3JJbnNldHMsIHNldFNjcm9sbEluZGljYXRvckluc2V0c10gPSB1c2VTdGF0ZTxudWxsIHwge1xuICAgIGJvdHRvbTogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICByaWdodDogbnVtYmVyLFxuICAgIHRvcDogbnVtYmVyLFxuICB9PihudWxsKTtcbiAgY29uc3QgW3Nob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljLCBzZXRTaG93c0hvcml6b250YWxTY3JvbGxJbmRpY10gPVxuICAgIHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbc2hvd3NWZXJ0aWNhbFNjcm9sbEluZGljLCBzZXRTaG93c1ZlcnRpY2FsU2Nyb2xsSW5kaWNdID1cbiAgICB1c2VTdGF0ZSh0cnVlKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIHN0eWxlPXtbc3R5bGVzLnNjcm9sbFZpZXcsIHtoZWlnaHQ6IDIwMH1dfVxuICAgICAgICBjb250ZW50SW5zZXQ9e3t0b3A6IDEwLCBib3R0b206IDEwLCBsZWZ0OiAxMCwgcmlnaHQ6IDEwfX1cbiAgICAgICAgc2Nyb2xsSW5kaWNhdG9ySW5zZXRzPXtzY3JvbGxJbmRpY2F0b3JJbnNldHN9XG4gICAgICAgIHNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvcj17c2hvd3NIb3Jpem9udGFsU2Nyb2xsSW5kaWN9XG4gICAgICAgIHNob3dzVmVydGljYWxTY3JvbGxJbmRpY2F0b3I9e3Nob3dzVmVydGljYWxTY3JvbGxJbmRpY31cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZD5cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgbGFiZWw9e1xuICAgICAgICAgIHNjcm9sbEluZGljYXRvckluc2V0cyA9PSBudWxsXG4gICAgICAgICAgICA/ICdzZXRTY3JvbGxJbmRpY2F0b3JJbnNldHMnXG4gICAgICAgICAgICA6ICdSZXNldCBzY3JvbGxJbmRpY2F0b3JJbnNldHMnXG4gICAgICAgIH1cbiAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICBzY3JvbGxJbmRpY2F0b3JJbnNldHMgPT0gbnVsbFxuICAgICAgICAgICAgPyBzZXRTY3JvbGxJbmRpY2F0b3JJbnNldHMoe1xuICAgICAgICAgICAgICAgIHRvcDogMTAsXG4gICAgICAgICAgICAgICAgbGVmdDogMTAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAxMCxcbiAgICAgICAgICAgICAgICByaWdodDogMTAsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IHNldFNjcm9sbEluZGljYXRvckluc2V0cyhudWxsKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD17XG4gICAgICAgICAgJ3Nob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvcjogJyArXG4gICAgICAgICAgc2hvd3NIb3Jpem9udGFsU2Nyb2xsSW5kaWMudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgc2V0U2hvd3NIb3Jpem9udGFsU2Nyb2xsSW5kaWMoIXNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD17XG4gICAgICAgICAgJ3Nob3dzVmVydGljYWxTY3JvbGxJbmRpY2F0b3I6ICcgKyBzaG93c1ZlcnRpY2FsU2Nyb2xsSW5kaWMudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICAgIG9uUHJlc3M9eygpID0+IHNldFNob3dzVmVydGljYWxTY3JvbGxJbmRpYyghc2hvd3NWZXJ0aWNhbFNjcm9sbEluZGljKX1cbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgUmVtb3ZlQ2xpcHBlZFN1YnZpZXdzID0gKCkgPT4ge1xuICBjb25zdCBbcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzLCBzZXRSZW1vdmVDbGlwcGVkU3Vidmlld3NdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIHJlbW92ZUNsaXBwZWRTdWJ2aWV3cz17cmVtb3ZlQ2xpcHBlZFN1YnZpZXdzfVxuICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkPlxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD17J3JlbW92ZUNsaXBwZWRTdWJ2aWV3czogJyArIHJlbW92ZUNsaXBwZWRTdWJ2aWV3cy50b1N0cmluZygpfVxuICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRSZW1vdmVDbGlwcGVkU3Vidmlld3MoIXJlbW92ZUNsaXBwZWRTdWJ2aWV3cyl9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IFJlZnJlc2hDb250cm9sRXhhbXBsZSA9ICgpID0+IHtcbiAgY29uc3QgW3JlZnJlc2hpbmcsIHNldFJlZnJlc2hpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBvblJlZnJlc2ggPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UmVmcmVzaGluZyh0cnVlKTtcbiAgICAvLyAkRmxvd0ZpeE1lW3VudXNlZC1wcm9taXNlXVxuICAgIHdhaXQoMjAwMCkudGhlbigoKSA9PiBzZXRSZWZyZXNoaW5nKGZhbHNlKSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCB3YWl0ID0gKHRpbWVvdXQ6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIHN0eWxlPXtbc3R5bGVzLnNjcm9sbFZpZXcsIHtoZWlnaHQ6IDIwMH1dfVxuICAgICAgICByZWZyZXNoQ29udHJvbD17XG4gICAgICAgICAgPFJlZnJlc2hDb250cm9sIHJlZnJlc2hpbmc9e3JlZnJlc2hpbmd9IG9uUmVmcmVzaD17b25SZWZyZXNofSAvPlxuICAgICAgICB9XG4gICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWQ+XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgT25TY3JvbGxPcHRpb25zID0gKCkgPT4ge1xuICBjb25zdCBbb25TY3JvbGxEcmFnLCBzZXRPblNjcm9sbERyYWddID0gdXNlU3RhdGUoJ25vbmUnKTtcbiAgY29uc3QgW292ZXJTY3JvbGxNb2RlLCBzZXRPdmVyU2Nyb2xsTW9kZV0gPSB1c2VTdGF0ZSgnYXV0bycpO1xuICBjb25zdCBvdmVyU2Nyb2xsTW9kZU9wdGlvbnMgPSBbJ2F1dG8nLCAnYWx3YXlzJywgJ25ldmVyJ107XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dD5vblNjcm9sbDoge29uU2Nyb2xsRHJhZ308L1RleHQ+XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCB7aGVpZ2h0OiAyMDB9XX1cbiAgICAgICAgb25TY3JvbGxCZWdpbkRyYWc9eygpID0+IHNldE9uU2Nyb2xsRHJhZygnb25TY3JvbGxCZWdpbkRyYWcnKX1cbiAgICAgICAgb25TY3JvbGxFbmREcmFnPXsoKSA9PiBzZXRPblNjcm9sbERyYWcoJ29uU2Nyb2xsRW5kRHJhZycpfVxuICAgICAgICBvblNjcm9sbFRvVG9wPXsoKSA9PiBzZXRPblNjcm9sbERyYWcoJ29uU2Nyb2xsVG9Ub3AnKX1cbiAgICAgICAgb3ZlclNjcm9sbE1vZGU9e292ZXJTY3JvbGxNb2RlfVxuICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkPlxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAge1BsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcgPyAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5yb3dUaXRsZX0+T3ZlciBTY3JvbGwgTW9kZTwvVGV4dD5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgICB7b3ZlclNjcm9sbE1vZGVPcHRpb25zLm1hcCh2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBhY3RpdmU9e3ZhbHVlID09PSBvdmVyU2Nyb2xsTW9kZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dmFsdWV9XG4gICAgICAgICAgICAgICAga2V5PXt2YWx1ZX1cbiAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRPdmVyU2Nyb2xsTW9kZSh2YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgT25Nb21lbnR1bVNjcm9sbCA9ICgpID0+IHtcbiAgY29uc3QgW3Njcm9sbCwgc2V0U2Nyb2xsXSA9IHVzZVN0YXRlKCdub25lJyk7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dD5TY3JvbGwgU3RhdGU6IHtzY3JvbGx9PC9UZXh0PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIG9uTW9tZW50dW1TY3JvbGxCZWdpbj17KCkgPT4gc2V0U2Nyb2xsKCdvbk1vbWVudHVtU2Nyb2xsQmVnaW4nKX1cbiAgICAgICAgb25Nb21lbnR1bVNjcm9sbEVuZD17KCkgPT4gc2V0U2Nyb2xsKCdvbk1vbWVudHVtU2Nyb2xsRW5kJyl9XG4gICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWQ+XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgT25Db250ZW50U2l6ZUNoYW5nZSA9ICgpID0+IHtcbiAgY29uc3QgW2l0ZW1zLCBzZXRJdGVtc10gPSB1c2VTdGF0ZShJVEVNUyk7XG4gIGNvbnN0IFtjb250ZW50U2l6ZUNoYW5nZWQsIHNldENvbnRlbnRTaXplQ2hhbmdlZF0gPSB1c2VTdGF0ZSgnb3JpZ2luYWwnKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0PkNvbnRlbnQgU2l6ZSBDaGFuZ2VkOiB7Y29udGVudFNpemVDaGFuZ2VkfTwvVGV4dD5cbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIHN0eWxlPXtbc3R5bGVzLnNjcm9sbFZpZXcsIHtoZWlnaHQ6IDIwMH1dfVxuICAgICAgICBvbkNvbnRlbnRTaXplQ2hhbmdlPXsoKSA9PlxuICAgICAgICAgIGNvbnRlbnRTaXplQ2hhbmdlZCA9PT0gJ29yaWdpbmFsJ1xuICAgICAgICAgICAgPyBzZXRDb250ZW50U2l6ZUNoYW5nZWQoJ2NoYW5nZWQnKVxuICAgICAgICAgICAgOiBzZXRDb250ZW50U2l6ZUNoYW5nZWQoJ29yaWdpbmFsJylcbiAgICAgICAgfVxuICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkPlxuICAgICAgICB7aXRlbXMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBsYWJlbD1cIkNoYW5nZSBDb250ZW50IFNpemVcIlxuICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgIGl0ZW1zID09PSBJVEVNU1xuICAgICAgICAgICAgPyBzZXRJdGVtcyhbJzEnLCAnMicsICczJywgJzQnLCAnNSddKVxuICAgICAgICAgICAgOiBzZXRJdGVtcyhJVEVNUylcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBNYXhNaW5ab29tU2NhbGUgPSAoKSA9PiB7XG4gIGNvbnN0IFttYXhab29tU2NhbGUsIHNldE1heFpvb21TY2FsZV0gPSB1c2VTdGF0ZSgnMS4wJyk7XG4gIGNvbnN0IFttaW5ab29tU2NhbGUsIHNldE1pblpvb21TY2FsZV0gPSB1c2VTdGF0ZSgnMS4wJyk7XG4gIGNvbnN0IFt6b29tU2NhbGUsIHNldFpvb21TY2FsZV0gPSB1c2VTdGF0ZSgnMS4wJyk7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCB7aGVpZ2h0OiAyMDB9XX1cbiAgICAgICAgcGluY2hHZXN0dXJlRW5hYmxlZFxuICAgICAgICBtYXhpbXVtWm9vbVNjYWxlPXttYXhab29tU2NhbGUgIT09ICcnID8gcGFyc2VGbG9hdChtYXhab29tU2NhbGUpIDogMC4wfVxuICAgICAgICBtaW5pbXVtWm9vbVNjYWxlPXttaW5ab29tU2NhbGUgIT09ICcnID8gcGFyc2VGbG9hdChtaW5ab29tU2NhbGUpIDogMC4wfVxuICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkPlxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5yb3dUaXRsZX0+U2V0IE1heGltdW0gWm9vbSBTY2FsZTwvVGV4dD5cbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXR9XG4gICAgICAgIHZhbHVlPXttYXhab29tU2NhbGV9XG4gICAgICAgIG9uQ2hhbmdlVGV4dD17dmFsID0+IHNldE1heFpvb21TY2FsZSh2YWwpfVxuICAgICAgICBrZXlib2FyZFR5cGU9XCJkZWNpbWFsLXBhZFwiXG4gICAgICAvPlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5yb3dUaXRsZX0+U2V0IE1pbmltdW0gWm9vbSBTY2FsZTwvVGV4dD5cbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXR9XG4gICAgICAgIHZhbHVlPXttaW5ab29tU2NhbGUudG9TdHJpbmcoKX1cbiAgICAgICAgb25DaGFuZ2VUZXh0PXt2YWwgPT4gc2V0TWluWm9vbVNjYWxlKHZhbCl9XG4gICAgICAgIGtleWJvYXJkVHlwZT1cImRlY2ltYWwtcGFkXCJcbiAgICAgIC8+XG4gICAgICB7UGxhdGZvcm0uT1MgPT09ICdpb3MnID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMucm93VGl0bGV9PlNldCBab29tIFNjYWxlPC9UZXh0PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMudGV4dElucHV0fVxuICAgICAgICAgICAgdmFsdWU9e3pvb21TY2FsZS50b1N0cmluZygpfVxuICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt2YWwgPT4gc2V0Wm9vbVNjYWxlKHZhbCl9XG4gICAgICAgICAgICBrZXlib2FyZFR5cGU9XCJkZWNpbWFsLXBhZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBLZXlib2FyZEV4YW1wbGUgPSAoKSA9PiB7XG4gIGNvbnN0IFtrZXlib2FyZERpc21pc3NNb2RlLCBzZXRLZXlib2FyZERpc21pc3NNb2RlXSA9IHVzZVN0YXRlKCdub25lJyk7XG4gIGNvbnN0IFtrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzLCBzZXRLZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzXSA9XG4gICAgdXNlU3RhdGUoJ25ldmVyJyk7XG4gIGNvbnN0IFt0ZXh0SW5wdXRWYWx1ZSwgc2V0VGV4dElucHV0VmFsdWVdID0gdXNlU3RhdGUoJ1RhcCB0byBvcGVuIEtleWJvYXJkJyk7XG4gIGNvbnN0IGRpc21pc3NPcHRpb25zID1cbiAgICBQbGF0Zm9ybS5PUyA9PT0gJ2lvcydcbiAgICAgID8gWydub25lJywgJ29uLWRyYWcnLCAnaW50ZXJhY3RpdmUnXVxuICAgICAgOiBbJ25vbmUnLCAnb24tZHJhZyddO1xuICBjb25zdCBwZXJzaXN0T3B0aW9ucyA9IFsnbmV2ZXInLCAnYWx3YXlzJywgJ2hhbmRsZWQnXTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXR9XG4gICAgICAgIHZhbHVlPXt0ZXh0SW5wdXRWYWx1ZX1cbiAgICAgICAgb25DaGFuZ2VUZXh0PXt2YWwgPT4gc2V0VGV4dElucHV0VmFsdWUodmFsKX1cbiAgICAgIC8+XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCB7aGVpZ2h0OiAyMDB9XX1cbiAgICAgICAga2V5Ym9hcmREaXNtaXNzTW9kZT17a2V5Ym9hcmREaXNtaXNzTW9kZX1cbiAgICAgICAga2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcz17a2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwc31cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZD5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IGNvbnNvbGUubG9nKCdidXR0b24gcHJlc3NlZCEnKX1cbiAgICAgICAgICBsYWJlbD17J0J1dHRvbid9XG4gICAgICAgIC8+XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnJvd1RpdGxlfT5LZXlib2FyZCBEaXNtaXNzIE1vZGU8L1RleHQ+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgIHtkaXNtaXNzT3B0aW9ucy5tYXAodmFsdWUgPT4gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFjdGl2ZT17dmFsdWUgPT09IGtleWJvYXJkRGlzbWlzc01vZGV9XG4gICAgICAgICAgICBsYWJlbD17dmFsdWV9XG4gICAgICAgICAgICBrZXk9e3ZhbHVlfVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0S2V5Ym9hcmREaXNtaXNzTW9kZSh2YWx1ZSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnJvd1RpdGxlfT5LZXlib2FyZCBTaG91bGQgUGVyc2lzdCB0YXBzPC9UZXh0PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICB7cGVyc2lzdE9wdGlvbnMubWFwKHZhbHVlID0+IChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBhY3RpdmU9e3ZhbHVlID09PSBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzfVxuICAgICAgICAgICAgbGFiZWw9e3ZhbHVlfVxuICAgICAgICAgICAga2V5PXt2YWx1ZX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldEtleWJvYXJkU2hvdWxkUGVyc2lzdFRhcHModmFsdWUpfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IEludmVydFN0aWNreUhlYWRlcnMgPSAoKSA9PiB7XG4gIGNvbnN0IFtpbnZlcnRTdGlja3lIZWFkZXJzLCBzZXRJbnZlcnRTdGlja3lIZWFkZXJzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgX3Njcm9sbFZpZXcgPSBSZWFjdC51c2VSZWY8P1JlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFNjcm9sbFZpZXc+PihudWxsKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIHsvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdICovfVxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgcmVmPXtfc2Nyb2xsVmlld31cbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIHN0aWNreUhlYWRlckluZGljZXM9e1swXX1cbiAgICAgICAgaW52ZXJ0U3RpY2t5SGVhZGVycz17aW52ZXJ0U3RpY2t5SGVhZGVyc31cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICB0ZXN0SUQ9XCJzY3JvbGxfc3RpY2t5X2hlYWRlclwiPlxuICAgICAgICB7PFRleHQ+U1RJQ0tZIEhFQURFUjwvVGV4dD59XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICA8Vmlldz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldEludmVydFN0aWNreUhlYWRlcnMoIWludmVydFN0aWNreUhlYWRlcnMpfVxuICAgICAgICAgIGxhYmVsPXsnaW52ZXJ0U3RpY2t5SGVhZGVyczogJyArIGludmVydFN0aWNreUhlYWRlcnMudG9TdHJpbmcoKX1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGxhYmVsPVwiU2Nyb2xsIHRvIHRvcFwiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgbnVsbHRocm93czwkRmxvd0ZpeE1lPihfc2Nyb2xsVmlldy5jdXJyZW50KS5zY3JvbGxUbyh7eTogMH0pO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGVzdElEPVwic2Nyb2xsX3RvX3RvcF9idXR0b25cIlxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgbGFiZWw9XCJTY3JvbGwgdG8gYm90dG9tXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBudWxsdGhyb3dzPCRGbG93Rml4TWU+KF9zY3JvbGxWaWV3LmN1cnJlbnQpLnNjcm9sbFRvRW5kKHtcbiAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRlc3RJRD1cInNjcm9sbF90b19ib3R0b21fYnV0dG9uXCJcbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBNdWx0aXBsZVN0aWNreUhlYWRlcnMgPSAoKSA9PiB7XG4gIGNvbnN0IF9zY3JvbGxWaWV3ID0gUmVhY3QudXNlUmVmPD9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBTY3JvbGxWaWV3Pj4obnVsbCk7XG4gIGNvbnN0IHN0aWNreUhlYWRlclN0eWxlID0ge2JhY2tncm91bmRDb2xvcjogJ3llbGxvdyd9O1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgey8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gKi99XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICByZWY9e19zY3JvbGxWaWV3fVxuICAgICAgICBzdHlsZT17W3N0eWxlcy5zY3JvbGxWaWV3LCB7aGVpZ2h0OiAyMDB9XX1cbiAgICAgICAgc3RpY2t5SGVhZGVySW5kaWNlcz17WzAsIDEzLCAyNl19XG4gICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWRcbiAgICAgICAgdGVzdElEPVwic2Nyb2xsX211bHRpcGxlX3N0aWNreV9oZWFkZXJzXCI+XG4gICAgICAgIHs8SXRlbSBtc2c9eydTdGlja3kgSGVhZGVyIDEnfSBzdHlsZT17c3RpY2t5SGVhZGVyU3R5bGV9IC8+fVxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgICB7PEl0ZW0gbXNnPXsnU3RpY2t5IEhlYWRlciAyJ30gc3R5bGU9e3N0aWNreUhlYWRlclN0eWxlfSAvPn1cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgICAgezxJdGVtIG1zZz17J1N0aWNreSBIZWFkZXIgMyd9IHN0eWxlPXtzdGlja3lIZWFkZXJTdHlsZX0gLz59XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICA8Vmlldz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGxhYmVsPVwiU2Nyb2xsIHRvIHRvcFwiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgbnVsbHRocm93czwkRmxvd0ZpeE1lPihfc2Nyb2xsVmlldy5jdXJyZW50KS5zY3JvbGxUbyh7eTogMH0pO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGVzdElEPVwic2Nyb2xsX3RvX3RvcF9idXR0b25cIlxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgbGFiZWw9XCJTY3JvbGwgdG8gYm90dG9tXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBudWxsdGhyb3dzPCRGbG93Rml4TWU+KF9zY3JvbGxWaWV3LmN1cnJlbnQpLnNjcm9sbFRvRW5kKHtcbiAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRlc3RJRD1cInNjcm9sbF90b19ib3R0b21fYnV0dG9uXCJcbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBJbmRpY2F0b3JTdHlsZSA9ICgpID0+IHtcbiAgY29uc3QgW2luZGljYXRvclN0eWxlLCBzZXRJbmRpY2F0b3JTdHlsZV0gPSB1c2VTdGF0ZSgnZGVmYXVsdCcpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIGluZGljYXRvclN0eWxlPXtpbmRpY2F0b3JTdHlsZX1cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZD5cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDxWaWV3PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICAgIGluZGljYXRvclN0eWxlID09PSAnZGVmYXVsdCdcbiAgICAgICAgICAgICAgPyBzZXRJbmRpY2F0b3JTdHlsZSgnd2hpdGUnKVxuICAgICAgICAgICAgICA6IHNldEluZGljYXRvclN0eWxlKCdkZWZhdWx0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFiZWw9eydJbmRpY2F0b3IgU3R5bGU6ICcgKyBpbmRpY2F0b3JTdHlsZX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBEaXNhYmxlRW5hYmxlID0gKCkgPT4ge1xuICBjb25zdCBbZGlyZWN0aW9uYWxMb2NrRW5hYmxlZCwgc2V0RGlyZWN0aW9uYWxMb2NrRW5hYmxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtkaXNhYmxlSW50ZXJ2YWxNb21lbnR1bSwgc2V0RGlzYWJsZUludGVydmFsTW9tZW50dW1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGlzYWJsZVNjcm9sbFZpZXdQYW5SZXNwb25kZXIsIHNldERpc2FibGVTY3JvbGxWaWV3UGFuUmVzcG9uZGVyXSA9XG4gICAgdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIGNvbnRlbnRJbnNldD17e3RvcDogMTAsIGJvdHRvbTogMTAsIGxlZnQ6IDEwLCByaWdodDogMTB9fVxuICAgICAgICBzbmFwVG9JbnRlcnZhbD17MH1cbiAgICAgICAgZGlyZWN0aW9uYWxMb2NrRW5hYmxlZD17ZGlyZWN0aW9uYWxMb2NrRW5hYmxlZH1cbiAgICAgICAgZGlzYWJsZUludGVydmFsTW9tZW50dW09e2Rpc2FibGVJbnRlcnZhbE1vbWVudHVtfVxuICAgICAgICBkaXNhYmxlU2Nyb2xsVmlld1BhblJlc3BvbmRlcj17ZGlzYWJsZVNjcm9sbFZpZXdQYW5SZXNwb25kZXJ9XG4gICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWQ+XG4gICAgICAgIHtJVEVNUy5tYXAoY3JlYXRlSXRlbVJvdyl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICA8Vmlldz5cbiAgICAgICAge1BsYXRmb3JtLk9TID09PSAnaW9zJyA/IChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXREaXJlY3Rpb25hbExvY2tFbmFibGVkKCFkaXJlY3Rpb25hbExvY2tFbmFibGVkKX1cbiAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgJ2RpcmVjdGlvbmFsTG9ja0VuYWJsZWQ6ICcgKyBkaXJlY3Rpb25hbExvY2tFbmFibGVkLnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldERpc2FibGVJbnRlcnZhbE1vbWVudHVtKCFkaXNhYmxlSW50ZXJ2YWxNb21lbnR1bSl9XG4gICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgJ3NldERpc2FibGVJbnRlcnZhbE1vbWVudHVtOiAnICsgZGlzYWJsZUludGVydmFsTW9tZW50dW0udG9TdHJpbmcoKVxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgICBzZXREaXNhYmxlU2Nyb2xsVmlld1BhblJlc3BvbmRlcighZGlzYWJsZVNjcm9sbFZpZXdQYW5SZXNwb25kZXIpXG4gICAgICAgICAgfVxuICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICdzZXREaXNhYmxlU2Nyb2xsVmlld1BhblJlc3BvbmRlcjogJyArXG4gICAgICAgICAgICBkaXNhYmxlU2Nyb2xsVmlld1BhblJlc3BvbmRlci50b1N0cmluZygpXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IERlY2VsZXJhdGlvblJhdGVFeGFtcGxlID0gKCkgPT4ge1xuICBjb25zdCBbZGVjZWxSYXRlLCBzZXREZWNlbFJhdGVdID0gdXNlU3RhdGUoJ25vcm1hbCcpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIGRlY2VsZXJhdGlvblJhdGU9e2RlY2VsUmF0ZX1cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZD5cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDxWaWV3PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICAgIGRlY2VsUmF0ZSA9PT0gJ25vcm1hbCdcbiAgICAgICAgICAgICAgPyBzZXREZWNlbFJhdGUoJ2Zhc3QnKVxuICAgICAgICAgICAgICA6IHNldERlY2VsUmF0ZSgnbm9ybWFsJylcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFiZWw9eydEZWNlbGVyYXRpb24gUmF0ZTogJyArIGRlY2VsUmF0ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBDb250ZW50RXhhbXBsZSA9ICgpID0+IHtcbiAgY29uc3QgW2NhbkNhbmNlbENvbnRlbnRUb3VjaGVzLCBzZXRDYW5DYW5jZWxDb250ZW50VG91Y2hlc10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtjb250ZW50SW5zZXQsIHNldENvbnRlbnRJbnNldF0gPSB1c2VTdGF0ZTxudWxsIHwge1xuICAgIGJvdHRvbTogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICByaWdodDogbnVtYmVyLFxuICAgIHRvcDogbnVtYmVyLFxuICB9PihudWxsKTtcbiAgY29uc3QgW2NvbnRlbnRDb250YWluZXJTdHlsZSwgc2V0Q29udGVudENvbnRhaW5lclN0eWxlXSA9IHVzZVN0YXRlPG51bGwgfCB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmcsXG4gIH0+KG51bGwpO1xuICBjb25zdCBbY29udGVudEluc2V0QWRqdXN0bWVudEJlaGF2aW9yLCBzZXRDb250ZW50SW5zZXRBZGp1c3RtZW50QmVoYXZpb3JdID1cbiAgICB1c2VTdGF0ZSgnbmV2ZXInKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgIHN0eWxlPXtbc3R5bGVzLnNjcm9sbFZpZXcsIHtoZWlnaHQ6IDIwMH1dfVxuICAgICAgICBjYW5DYW5jZWxDb250ZW50VG91Y2hlcz17Y2FuQ2FuY2VsQ29udGVudFRvdWNoZXN9XG4gICAgICAgIGNvbnRlbnRPZmZzZXQ9e3t4OiAxMDAsIHk6IDB9fVxuICAgICAgICBjb250ZW50Q29udGFpbmVyU3R5bGU9e2NvbnRlbnRDb250YWluZXJTdHlsZX1cbiAgICAgICAgY29udGVudEluc2V0PXtjb250ZW50SW5zZXR9XG4gICAgICAgIGNvbnRlbnRJbnNldEFkanVzdG1lbnRCZWhhdmlvcj17Y29udGVudEluc2V0QWRqdXN0bWVudEJlaGF2aW9yfVxuICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkPlxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPFZpZXc+XG4gICAgICAgIHtQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICAgICAgICBzZXRDYW5DYW5jZWxDb250ZW50VG91Y2hlcyghY2FuQ2FuY2VsQ29udGVudFRvdWNoZXMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICdjYW5DYW5jZWxDb250ZW50VG91Y2hlczogJyArIGNhbkNhbmNlbENvbnRlbnRUb3VjaGVzLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICAgICAgICBjb250ZW50SW5zZXRBZGp1c3RtZW50QmVoYXZpb3IgPT09ICduZXZlcidcbiAgICAgICAgICAgICAgICAgID8gc2V0Q29udGVudEluc2V0QWRqdXN0bWVudEJlaGF2aW9yKCdhbHdheXMnKVxuICAgICAgICAgICAgICAgICAgOiBzZXRDb250ZW50SW5zZXRBZGp1c3RtZW50QmVoYXZpb3IoJ25ldmVyJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgICAgY29udGVudEluc2V0QWRqdXN0bWVudEJlaGF2aW9yID09PSAnbmV2ZXInXG4gICAgICAgICAgICAgICAgICA/IFwic2V0Q29udGVudEluc2V0QWRqdXN0bWVudEJlaGF2aW9yIHRvICdhbHdheXMnXCJcbiAgICAgICAgICAgICAgICAgIDogJ3Jlc2V0IGNvbnRlbnQgaW5zZXQgYWRqdXN0bWVudCBiZWhhdmlvcidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgICAgY29udGVudENvbnRhaW5lclN0eWxlID09PSBudWxsXG4gICAgICAgICAgICAgID8gc2V0Q29udGVudENvbnRhaW5lclN0eWxlKHN0eWxlcy5jb250YWluZXJTdHlsZSlcbiAgICAgICAgICAgICAgOiBzZXRDb250ZW50Q29udGFpbmVyU3R5bGUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgY29udGVudENvbnRhaW5lclN0eWxlID09PSBudWxsXG4gICAgICAgICAgICAgID8gJ3NldENvbnRlbnRDb250YWluZXJTdHlsZSdcbiAgICAgICAgICAgICAgOiAncmVzZXQgY29udGVudCBjb250YWluZXIgc3R5bGUnXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICAgIGNvbnRlbnRJbnNldCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IHNldENvbnRlbnRJbnNldCh7dG9wOiAxMCwgYm90dG9tOiAxMCwgbGVmdDogMTAsIHJpZ2h0OiAxMH0pXG4gICAgICAgICAgICAgIDogc2V0Q29udGVudEluc2V0KG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgIGNvbnRlbnRJbnNldCA9PT0gbnVsbCA/ICdzZXRDb250ZW50SW5zZXQnIDogJ3Jlc2V0IGNvbnRlbnQgaW5zZXQnXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IEJvdW5jZXNFeGFtcGxlID0gKCkgPT4ge1xuICBjb25zdCBbYm91bmNlcywgc2V0Qm91bmNlc10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtib3VuY2VzWm9vbSwgc2V0Qm91bmNlc1pvb21dID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIGJvdW5jZXM9e2JvdW5jZXN9XG4gICAgICAgIGJvdW5jZXNab29tPXtib3VuY2VzWm9vbX1cbiAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZD5cbiAgICAgICAge0lURU1TLm1hcChjcmVhdGVJdGVtUm93KX1cbiAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgIDxWaWV3PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0Qm91bmNlcyghYm91bmNlcyl9XG4gICAgICAgICAgbGFiZWw9eydCb3VuY2VzOiAnICsgYm91bmNlcy50b1N0cmluZygpfVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0Qm91bmNlc1pvb20oIWJvdW5jZXNab29tKX1cbiAgICAgICAgICBsYWJlbD17J0JvdW5jZXMgWm9vbTogJyArIGJvdW5jZXNab29tLnRvU3RyaW5nKCl9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgQm91bmNlc0V4YW1wbGVIb3Jpem9udGFsID0gKCkgPT4ge1xuICBjb25zdCBbYm91bmNlLCBzZXRCb3VuY2VdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIGhvcml6b250YWw9e3RydWV9XG4gICAgICAgIGFsd2F5c0JvdW5jZUhvcml6b250YWw9e2JvdW5jZX1cbiAgICAgICAgY29udGVudE9mZnNldD17e3g6IDEwMCwgeTogMH19PlxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPFZpZXc+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRCb3VuY2UoIWJvdW5jZSl9XG4gICAgICAgICAgbGFiZWw9eydBbHdheXMgQm91bmNlIEhvcml6b250YWw6ICcgKyBib3VuY2UudG9TdHJpbmcoKX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBCb3VuY2VzRXhhbXBsZVZlcnRpY2FsID0gKCkgPT4ge1xuICBjb25zdCBbYm91bmNlLCBzZXRCb3VuY2VdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2Nyb2xsVmlldywge2hlaWdodDogMjAwfV19XG4gICAgICAgIGFsd2F5c0JvdW5jZVZlcnRpY2FsPXtib3VuY2V9XG4gICAgICAgIGNvbnRlbnRPZmZzZXQ9e3t4OiAxMDAsIHk6IDB9fVxuICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkPlxuICAgICAgICB7SVRFTVMubWFwKGNyZWF0ZUl0ZW1Sb3cpfVxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPFZpZXc+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRCb3VuY2UoIWJvdW5jZSl9XG4gICAgICAgICAgbGFiZWw9eydBbHdheXMgQm91bmNlIFZlcnRpY2FsOiAnICsgYm91bmNlLnRvU3RyaW5nKCl9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY2xhc3MgSXRlbSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8e3xcbiAgbXNnPzogc3RyaW5nLFxuICBzdHlsZT86IFZpZXdTdHlsZVByb3AsXG58fT4ge1xuICByZW5kZXIoKTogJEZsb3dGaXhNZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLml0ZW0sIHRoaXMucHJvcHMuc3R5bGVdfT5cbiAgICAgICAgPFRleHQ+e3RoaXMucHJvcHMubXNnfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmxldCBJVEVNUyA9IFsuLi5BcnJheSgxMildLm1hcCgoXywgaSkgPT4gYEl0ZW0gJHtpfWApO1xuXG5jb25zdCBjcmVhdGVJdGVtUm93ID0gKG1zZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gIDxJdGVtIGtleT17aW5kZXh9IG1zZz17bXNnfSAvPlxuKTtcblxuY29uc3QgQnV0dG9uID0gKHByb3BzOiB7XG4gIGFjdGl2ZT86IGJvb2xlYW4sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIG9uUHJlc3M6ICgpID0+IHZvaWQsXG4gIHRlc3RJRD86IHN0cmluZyxcbn0pID0+IChcbiAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKFxuICAgICAgc3R5bGVzLmJ1dHRvbixcbiAgICAgIHByb3BzLmFjdGl2ZSA9PT0gdHJ1ZSA/IHN0eWxlcy5hY3RpdmVCdXR0b24gOiBudWxsLFxuICAgICl9XG4gICAgb25QcmVzcz17cHJvcHMub25QcmVzc31cbiAgICB0ZXN0SUQ9e3Byb3BzLnRlc3RJRH0+XG4gICAgPFRleHQ+e3Byb3BzLmxhYmVsfTwvVGV4dD5cbiAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuKTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBzY3JvbGxWaWV3OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZWVlZScsXG4gICAgaGVpZ2h0OiAzMDAsXG4gIH0sXG4gIGhvcml6b250YWxTY3JvbGxWaWV3OiB7XG4gICAgaGVpZ2h0OiAxMDYsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBmb250U2l6ZTogMTYsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogNSxcbiAgfSxcbiAgYWN0aXZlQnV0dG9uOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMjE1LDI1NSwuMyknLFxuICB9LFxuICBidXR0b246IHtcbiAgICBtYXJnaW46IDUsXG4gICAgcGFkZGluZzogNSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjY2NjY2NjJyxcbiAgICBib3JkZXJSYWRpdXM6IDMsXG4gIH0sXG4gIHJvdzoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJyxcbiAgfSxcbiAgaXRlbToge1xuICAgIG1hcmdpbjogNSxcbiAgICBwYWRkaW5nOiA1LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNjY2NjY2MnLFxuICAgIGJvcmRlclJhZGl1czogMyxcbiAgICBtaW5XaWR0aDogOTYsXG4gIH0sXG4gIGNvbnRhaW5lclN0eWxlOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2FhZTNiNicsXG4gIH0sXG4gIHJvd1RpdGxlOiB7XG4gICAgZmxleDogMSxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgfSxcbiAgdGV4dElucHV0OiB7XG4gICAgaGVpZ2h0OiA0MCxcbiAgICBib3JkZXJDb2xvcjogJ2dyYXknLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBQcmVzc2FibGUsXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFN0aWNreUhlYWRlcigpIHtcbiAgY29uc3QgW2JhY2tncm91bmRDb2xvciwgc2V0QmFja2dyb3VuZENvbG9yXSA9IFJlYWN0LnVzZVN0YXRlKCdibHVlJyk7XG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIGtleT17MH1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICBtYXJnaW46IDEwLFxuICAgICAgICB3aWR0aDogNTAwLFxuICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgIH19PlxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBzdHlsZT17e2ZsZXg6IDF9fVxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgc2V0QmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRDb2xvciA9PT0gJ2JsdWUnID8gJ3llbGxvdycgOiAnYmx1ZScpO1xuICAgICAgICB9fVxuICAgICAgICB0ZXN0SUQ9XCJwcmVzc2FibGVfaGVhZGVyXCI+XG4gICAgICAgIDxUZXh0PlByZXNzIHRvIGNoYW5nZSBjb2xvcjwvVGV4dD5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50MShpOiBudW1iZXIpIHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1xuICAgICAga2V5PXtpfVxuICAgICAgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLCBtYXJnaW46IDEwLCB3aWR0aDogNTAwLCBoZWlnaHQ6IDEwMH19XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2Nyb2xsVmlld1ByZXNzYWJsZVN0aWNreUhlYWRlckV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHNjcm9sbFJlZiA9IFJlYWN0LnVzZVJlZjwkRmxvd0ZpeE1lPihudWxsKTtcbiAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IDEwOyBpKyspIHtcbiAgICBjb21wb25lbnRzLnB1c2gocmVuZGVyQ29tcG9uZW50MShpKSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICA8U2Nyb2xsVmlld1xuICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkPXt0cnVlfVxuICAgICAgICByZWY9e3Njcm9sbFJlZn1cbiAgICAgICAgc3R5bGU9e3tmbGV4OiAxfX1cbiAgICAgICAgc3RpY2t5SGVhZGVySW5kaWNlcz17WzBdfVxuICAgICAgICBzaG93c1ZlcnRpY2FsU2Nyb2xsSW5kaWNhdG9yPXtmYWxzZX1cbiAgICAgICAgdGVzdElEPVwic2Nyb2xsX3ByZXNzYWJsZV9zdGlja3lfaGVhZGVyXCI+XG4gICAgICAgIDxTdGlja3lIZWFkZXIgLz5cbiAgICAgICAge2NvbXBvbmVudHN9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICA8Vmlldz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHRpdGxlPVwic2Nyb2xsIHRvIHRvcFwiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgc2Nyb2xsUmVmLmN1cnJlbnQ/LnNjcm9sbFRvKHt5OiAwfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0ZXN0SUQ9XCJzY3JvbGxfdG9fdG9wX2J1dHRvblwiXG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0aXRsZT1cInNjcm9sbCB0byBib3R0b21cIlxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgIHNjcm9sbFJlZi5jdXJyZW50Py5zY3JvbGxUb0VuZCgpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGVzdElEPVwic2Nyb2xsX3RvX2JvdHRvbV9idXR0b25cIlxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBwYWRkaW5nVG9wOiAzMCxcbiAgICBmbGV4OiAxLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSBBbmltYXRlZFZhbHVlIGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQW5pbWF0ZWQvbm9kZXMvQW5pbWF0ZWRWYWx1ZSc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IFJlYWN0TmF0aXZlID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5jb25zdCB7Q29tcG9uZW50fSA9IFJlYWN0O1xuY29uc3Qge1N0eWxlU2hlZXQsIFRleHQsIFZpZXcsIEFuaW1hdGVkLCBFYXNpbmcsIFRvdWNoYWJsZU9wYWNpdHksIERpbWVuc2lvbnN9ID1cbiAgUmVhY3ROYXRpdmU7XG5cbmNsYXNzIFNjcm9sbFZpZXdBbmltYXRlZEV4YW1wbGUgZXh0ZW5kcyBDb21wb25lbnQ8ey4uLn0+IHtcbiAgX3Njcm9sbFZpZXdQb3M6IEFuaW1hdGVkVmFsdWUgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMCk7XG5cbiAgc3RhcnRBbmltYXRpb246ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgdGhpcy5fc2Nyb2xsVmlld1Bvcy5zZXRWYWx1ZSgwKTtcbiAgICBBbmltYXRlZC50aW1pbmcodGhpcy5fc2Nyb2xsVmlld1Bvcywge1xuICAgICAgdG9WYWx1ZTogMTAwLFxuICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgZWFzaW5nOiBFYXNpbmcubGluZWFyLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgIH0pLnN0YXJ0KCk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGludGVycG9sYXRlZCA9IHRoaXMuX3Njcm9sbFZpZXdQb3MuaW50ZXJwb2xhdGUoe1xuICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgb3V0cHV0UmFuZ2U6IFswLCAwLjFdLFxuICAgIH0pO1xuICAgIGNvbnN0IGludGVycG9sYXRlZDIgPSB0aGlzLl9zY3JvbGxWaWV3UG9zLmludGVycG9sYXRlKHtcbiAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgIG91dHB1dFJhbmdlOiBbJzBkZWcnLCAnMWRlZyddLFxuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogW3t0cmFuc2xhdGVYOiBpbnRlcnBvbGF0ZWR9LCB7cm90YXRlOiBpbnRlcnBvbGF0ZWQyfV0sXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPEFuaW1hdGVkLlNjcm9sbFZpZXdcbiAgICAgICAgICBob3Jpem9udGFsXG4gICAgICAgICAgc2Nyb2xsRXZlbnRUaHJvdHRsZT17MTZ9XG4gICAgICAgICAgb25TY3JvbGw9e0FuaW1hdGVkLmV2ZW50KFxuICAgICAgICAgICAgW3tuYXRpdmVFdmVudDoge2NvbnRlbnRPZmZzZXQ6IHt4OiB0aGlzLl9zY3JvbGxWaWV3UG9zfX19XSxcbiAgICAgICAgICAgIHt1c2VOYXRpdmVEcml2ZXI6IHRydWV9LFxuICAgICAgICAgICl9PlxuICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9e3RoaXMuc3RhcnRBbmltYXRpb259PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgICA8VGV4dD5TY3JvbGwgbWUgaG9yaXpvbnRhbGx5PC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPC9BbmltYXRlZC5TY3JvbGxWaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gRGltZW5zaW9ucy5nZXQoJ3dpbmRvdycpO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGNUZDRkYnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBtYXJnaW46IDUwLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBtYXJnaW5SaWdodDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgLyAyLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnU2Nyb2xsVmlld0FuaW1hdGVkJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnQmFzaWMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdDb21wb25lbnQgdGhhdCBpcyBhbmltYXRlZCB3aGVuIFNjcm9sbFZpZXcgaXMgb2Zmc2V0Lic7XG5cbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ0FuaW1hdGVkIGJ5IHNjcm9sbCB2aWV3JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBTY3JvbGxWaWV3QW5pbWF0ZWRFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPFNjcm9sbFZpZXdBbmltYXRlZEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIE1vZGFsLFxuICBTY3JvbGxWaWV3LFxuICBTdHlsZVNoZWV0LFxuICBTd2l0Y2gsXG4gIFRleHQsXG4gIFZpZXcsXG4gIHVzZVdpbmRvd0RpbWVuc2lvbnMsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTY3JvbGxWaWV3SW5kaWNhdG9ySW5zZXRzRXhhbXBsZSgpIHtcbiAgY29uc3QgW2F1dG9tYXRpY2FsbHlBZGp1c3RzU2Nyb2xsSW5kaWNhdG9ySW5zZXRzLCBzZXRBdXRvbWF0aWNhbGx5QWRqdXN0c1Njcm9sbEluZGljYXRvckluc2V0c10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW21vZGFsVmlzaWJsZSwgc2V0TW9kYWxWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB1c2VXaW5kb3dEaW1lbnNpb25zKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxNb2RhbFxuICAgICAgICAgIGFuaW1hdGlvblR5cGU9XCJzbGlkZVwiXG4gICAgICAgICAgdmlzaWJsZT17bW9kYWxWaXNpYmxlfVxuICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXsoKSA9PiBzZXRNb2RhbFZpc2libGUoZmFsc2UpfVxuICAgICAgICAgIHByZXNlbnRhdGlvblN0eWxlPVwiZnVsbFNjcmVlblwiXG4gICAgICAgICAgc3RhdHVzQmFyVHJhbnNsdWNlbnQ9e2ZhbHNlfVxuICAgICAgICAgIHN1cHBvcnRlZE9yaWVudGF0aW9ucz17Wydwb3J0cmFpdCcsICdsYW5kc2NhcGUnXX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5tb2RhbH0+XG4gICAgICAgICAgICA8U2Nyb2xsVmlld1xuICAgICAgICAgICAgICBjb250ZW50Q29udGFpbmVyU3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuc2Nyb2xsVmlld0NvbnRlbnQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoaGVpZ2h0ICogMS4yKSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAod2lkdGggKiAxLjIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHlBZGp1c3RzU2Nyb2xsSW5kaWNhdG9ySW5zZXRzPXthdXRvbWF0aWNhbGx5QWRqdXN0c1Njcm9sbEluZGljYXRvckluc2V0c31cbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5zY3JvbGxWaWV3fT5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5kZXNjcmlwdGlvbn0+XG4gICAgICAgICAgICAgICAgPFRleHQ+V2hlbiA8VGV4dCBzdHlsZT17c3R5bGVzLmNvZGV9PmF1dG9tYXRpY2FsbHlBZGp1c3RzU2Nyb2xsSW5kaWNhdG9ySW5zZXRzPC9UZXh0PiBpcyB0cnVlLCB0aGUgc2Nyb2xsYmFyIGlzIGluc2V0IHRvIHRoZSBzdGF0dXMgYmFyLiBXaGVuIGZhbHNlLCBpdCByZWFjaGVzIHRoZSBlZGdlIG9mIHRoZSBtb2RhbC48L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+Q2hlY2sgb3V0IHRoZSBVSVNjcm9sbFZpZXcgZG9jcyB0byBsZWFybiBtb3JlIGFib3V0IDxUZXh0IHN0eWxlPXtzdHlsZXMuY29kZX0+YXV0b21hdGljYWxseUFkanVzdHNTY3JvbGxJbmRpY2F0b3JJbnNldHM8L1RleHQ+PC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudG9nZ2xlfT5cbiAgICAgICAgICAgICAgPFRleHQ+PFRleHQgc3R5bGU9e3N0eWxlcy5jb2RlfT5hdXRvbWF0aWNhbGx5QWRqdXN0c1Njcm9sbEluZGljYXRvckluc2V0czwvVGV4dD4gaXMge2F1dG9tYXRpY2FsbHlBZGp1c3RzU2Nyb2xsSW5kaWNhdG9ySW5zZXRzICsgJyd9PC9UZXh0PlxuICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17diA9PiBzZXRBdXRvbWF0aWNhbGx5QWRqdXN0c1Njcm9sbEluZGljYXRvckluc2V0cyh2KX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17YXV0b21hdGljYWxseUFkanVzdHNTY3JvbGxJbmRpY2F0b3JJbnNldHN9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5zd2l0Y2h9Lz5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBzZXRNb2RhbFZpc2libGUoZmFsc2UpfVxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2VcIi8+XG4gICAgICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L01vZGFsPlxuICAgICAgICA8VGV4dCAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0TW9kYWxWaXNpYmxlKHRydWUpfVxuICAgICAgICAgIHRpdGxlPVwiUHJlc2VudCBGdWxsc2NyZWVuIE1vZGFsIHdpdGggU2Nyb2xsVmlld1wiLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgbW9kYWw6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICBzY3JvbGxWaWV3OiB7XG4gICAgZmxleDogMSxcbiAgICBoZWlnaHQ6IDEwMDAsXG4gIH0sXG4gIHNjcm9sbFZpZXdDb250ZW50OiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmYWFhYScsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgICBwYWRkaW5nVG9wOiAyMDAsXG4gIH0sXG4gIHN3aXRjaDoge1xuICAgIG1hcmdpbkJvdHRvbTogNDAsXG4gIH0sXG4gIHRvZ2dsZTp7XG4gICAgbWFyZ2luOiAyMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgZGVzY3JpcHRpb246IHtcbiAgICBtYXJnaW5Ib3Jpem9udGFsOiA4MCxcbiAgfSxcbiAgY29kZToge1xuICAgIGZvbnRTaXplOiAxMCxcbiAgICBmb250RmFtaWx5OiAnQ291cmllcicsXG4gIH0sXG59KTtcblxuZXhwb3J0cy50aXRsZSA9ICdTY3JvbGxWaWV3SW5kaWNhdG9ySW5zZXRzJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnaU9TJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPVxuICAnU2Nyb2xsVmlldyBhdXRvbWF0aWNhbGx5QWRqdXN0c1Njcm9sbEluZGljYXRvckluc2V0cyBhZGp1c3RzIHNjcm9sbCBpbmRpY2F0b3IgaW5zZXRzIHVzaW5nIE9TLWRlZmluZWQgbG9naWMgb24gaU9TIDEzKy4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IGF1dG9tYXRpY2FsbHlBZGp1c3RzU2Nyb2xsSW5kaWNhdG9ySW5zZXRzIEV4YW1wbGUnLFxuICAgIHJlbmRlcjogKCk6IFJlYWN0Lk5vZGUgPT4gPFNjcm9sbFZpZXdJbmRpY2F0b3JJbnNldHNFeGFtcGxlLz4sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgRmxhdExpc3QsXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFN3aXRjaCxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBWaWV3LFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2Nyb2xsVmlld0tleWJvYXJkSW5zZXRzRXhhbXBsZSgpIHtcbiAgY29uc3QgW2F1dG9tYXRpY2FsbHlBZGp1c3RLZXlib2FyZEluc2V0cywgc2V0QXV0b21hdGljYWxseUFkanVzdEtleWJvYXJkSW5zZXRzXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZmxhdExpc3QsIHNldEZsYXRMaXN0XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ludmVydGVkLCBzZXRJbnZlcnRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtoZWlnaHRSZXN0cmljdGVkLCBzZXRIZWlnaHRSZXN0cmljdGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBzY3JvbGxWaWV3UHJvcHMgPSB7XG4gICAgc3R5bGU6IGhlaWdodFJlc3RyaWN0ZWQgJiYgc3R5bGVzLnNjcm9sbFZpZXdIZWlnaHRSZXN0cmljdGVkLFxuICAgIGNvbnRlbnRDb250YWluZXJTdHlsZTogc3R5bGVzLnNjcm9sbFZpZXdDb250ZW50LFxuICAgIGF1dG9tYXRpY2FsbHlBZGp1c3RLZXlib2FyZEluc2V0czogYXV0b21hdGljYWxseUFkanVzdEtleWJvYXJkSW5zZXRzLFxuICAgIGtleWJvYXJkRGlzbWlzc01vZGU6ICdpbnRlcmFjdGl2ZScsXG4gIH07XG5cbiAgY29uc3QgZGF0YSA9IFsuLi5BcnJheSgyMCkua2V5cygpXTtcbiAgY29uc3QgcmVuZGVySXRlbSA9ICh7IGl0ZW0sIGluZGV4IH0pID0+IHtcbiAgICBjb25zdCBsYXJnZUlucHV0ID0gKGluZGV4ICUgNSkgPT09IDQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IGtleT17aXRlbX0gc3R5bGU9e3N0eWxlcy50ZXh0SW5wdXRSb3d9PlxuICAgICAgICA8VGV4dElucHV0IHBsYWNlaG9sZGVyPXtpdGVtLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgbXVsdGlsaW5lPXtsYXJnZUlucHV0fVxuICAgICAgICAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLnRleHRJbnB1dCwgbGFyZ2VJbnB1dCAmJiBzdHlsZXMudGV4dElucHV0TGFyZ2VyXX0vPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRyb2xSb3d9PlxuICAgICAgICA8VGV4dD48VGV4dCBzdHlsZT17c3R5bGVzLmNvZGV9PmF1dG9tYXRpY2FsbHlBZGp1c3RLZXlib2FyZEluc2V0czwvVGV4dD4gaXMge2F1dG9tYXRpY2FsbHlBZGp1c3RLZXlib2FyZEluc2V0cyArICcnfTwvVGV4dD5cbiAgICAgICAgPFN3aXRjaFxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3YgPT4gc2V0QXV0b21hdGljYWxseUFkanVzdEtleWJvYXJkSW5zZXRzKHYpfVxuICAgICAgICAgIHZhbHVlPXthdXRvbWF0aWNhbGx5QWRqdXN0S2V5Ym9hcmRJbnNldHN9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5jb250cm9sU3dpdGNofS8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRyb2xSb3d9PlxuICAgICAgICA8VGV4dD48VGV4dCBzdHlsZT17c3R5bGVzLmNvZGV9PkZsYXRMaXN0PC9UZXh0PiBpcyB7ZmxhdExpc3QgKyAnJ308L1RleHQ+XG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2ID0+IHNldEZsYXRMaXN0KHYpfVxuICAgICAgICAgIHZhbHVlPXtmbGF0TGlzdH1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmNvbnRyb2xTd2l0Y2h9Lz5cbiAgICAgIDwvVmlldz5cbiAgICAgIHtmbGF0TGlzdCAmJiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udHJvbFJvd30+XG4gICAgICAgICAgPFRleHQ+PFRleHQgc3R5bGU9e3N0eWxlcy5jb2RlfT5pbnZlcnRlZDwvVGV4dD4gaXMge2ludmVydGVkICsgJyd9PC9UZXh0PlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3YgPT4gc2V0SW52ZXJ0ZWQodil9XG4gICAgICAgICAgICB2YWx1ZT17aW52ZXJ0ZWR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmNvbnRyb2xTd2l0Y2h9Lz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKX1cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udHJvbFJvd30+XG4gICAgICAgIDxUZXh0PjxUZXh0IHN0eWxlPXtzdHlsZXMuY29kZX0+SGVpZ2h0UmVzdHJpY3RlZDwvVGV4dD4gaXMge2hlaWdodFJlc3RyaWN0ZWQgKyAnJ308L1RleHQ+XG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2ID0+IHNldEhlaWdodFJlc3RyaWN0ZWQodil9XG4gICAgICAgICAgdmFsdWU9e2hlaWdodFJlc3RyaWN0ZWR9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5jb250cm9sU3dpdGNofS8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRyb2xSb3d9PlxuICAgICAgICA8VGV4dElucHV0IHBsYWNlaG9sZGVyPXsnVGV4dCBpbnB1dCBvdXRzaWRlIHNjcm9sbCB2aWV3J30gc3R5bGU9e3N0eWxlcy5jb250cm9sVGV4dElucHV0fSAvPlxuICAgICAgPC9WaWV3PlxuICAgICAge2ZsYXRMaXN0XG4gICAgICAgID8gKFxuICAgICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgICAgey4uLnNjcm9sbFZpZXdQcm9wc31cbiAgICAgICAgICAgIGludmVydGVkPXtpbnZlcnRlZH1cbiAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXtyZW5kZXJJdGVtfS8+XG4gICAgICAgIClcbiAgICAgICAgOiAoXG4gICAgICAgICAgPFNjcm9sbFZpZXcgey4uLnNjcm9sbFZpZXdQcm9wc30+XG4gICAgICAgICAgICB7ZGF0YS5tYXAoKGl0ZW0sIGluZGV4KSA9PiByZW5kZXJJdGVtKHsgaXRlbSwgaW5kZXggfSkpfVxuICAgICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIGFsaWduSXRlbXM6ICdzdHJldGNoJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICB9LFxuICBzY3JvbGxWaWV3SGVpZ2h0UmVzdHJpY3RlZDoge1xuICAgIG1hcmdpblZlcnRpY2FsOiA1MCxcbiAgICBib3JkZXJDb2xvcjogJyNmMDAnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICB9LFxuICBzY3JvbGxWaWV3Q29udGVudDoge1xuICAgIHBhZGRpbmdWZXJ0aWNhbDogNSxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gIH0sXG4gIHRleHRJbnB1dFJvdzoge1xuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIG1hcmdpblZlcnRpY2FsOiA4LFxuICAgIGJvcmRlckNvbG9yOiAnIzk5OScsXG4gIH0sXG4gIHRleHRJbnB1dDoge1xuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgZm9udFNpemU6IDI0LFxuICAgIHBhZGRpbmc6IDgsXG4gIH0sXG4gIHRleHRJbnB1dExhcmdlcjoge1xuICAgIG1pbkhlaWdodDogMjAwLFxuICB9LFxuICBjb250cm9sUm93OiB7XG4gICAgcGFkZGluZzogMTAsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICBib3JkZXJUb3BXaWR0aDogMSxcbiAgICBib3JkZXJUb3BDb2xvcjogJyNjY2MnLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAxLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiAnI2NjYycsXG4gIH0sXG4gIGNvbnRyb2xTd2l0Y2g6IHtcbiAgfSxcbiAgY29udHJvbFRleHRJbnB1dDoge1xuICAgIGZsZXg6IDEsXG4gICAgcGFkZGluZ1ZlcnRpY2FsOiAxMCxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgYm9yZGVyQ29sb3I6ICcjY2NjJyxcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gIH0sXG4gIGNvZGU6IHtcbiAgICBmb250U2l6ZTogMTIsXG4gICAgZm9udEZhbWlseTogJ0NvdXJpZXInLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnU2Nyb2xsVmlld0tleWJvYXJkSW5zZXRzJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnaU9TJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPVxuICAnU2Nyb2xsVmlldyBhdXRvbWF0aWNhbGx5QWRqdXN0S2V5Ym9hcmRJbnNldHMgYWRqdXN0cyBrZXlib2FyZCBpbnNldHMgd2hlbiBzb2Z0IGtleWJvYXJkIGlzIGFjdGl2YXRlZC4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnPFNjcm9sbFZpZXc+IGF1dG9tYXRpY2FsbHlBZGp1c3RLZXlib2FyZEluc2V0cyBFeGFtcGxlJyxcbiAgICByZW5kZXI6ICgpOiBSZWFjdC5Ob2RlID0+IDxTY3JvbGxWaWV3S2V5Ym9hcmRJbnNldHNFeGFtcGxlLz4sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENvbnRlbnRJbnNldCBmcm9tICcuL1NlY3Rpb25MaXN0LWNvbnRlbnRJbnNldCc7XG5pbXBvcnQgaW52ZXJ0ZWQgZnJvbSAnLi9TZWN0aW9uTGlzdC1pbnZlcnRlZCc7XG5pbXBvcnQgb25FbmRSZWFjaGVkIGZyb20gJy4vU2VjdGlvbkxpc3Qtb25FbmRSZWFjaGVkJztcbmltcG9ydCBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkIGZyb20gJy4vU2VjdGlvbkxpc3Qtb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCc7XG5pbXBvcnQgU2Nyb2xsYWJsZSBmcm9tICcuL1NlY3Rpb25MaXN0LXNjcm9sbGFibGUnO1xuaW1wb3J0IHN0aWNreUhlYWRlcnNFbmFibGVkIGZyb20gJy4vU2VjdGlvbkxpc3Qtc3RpY2t5SGVhZGVyc0VuYWJsZWQnO1xuaW1wb3J0IHdpdGhTZXBhcmF0b3JzIGZyb20gJy4vU2VjdGlvbkxpc3Qtd2l0aFNlcGFyYXRvcnMnO1xuXG5leHBvcnRzLnRpdGxlID0gJ1NlY3Rpb25MaXN0JztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnTGlzdFZpZXcnO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3Mvc2VjdGlvbmxpc3QnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdQZXJmb3JtYW50LCBzY3JvbGxhYmxlIGxpc3Qgb2YgZGF0YS4nO1xuZXhwb3J0cy5zaG93SW5kaXZpZHVhbEV4YW1wbGVzID0gdHJ1ZTtcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIENvbnRlbnRJbnNldCxcbiAgb25FbmRSZWFjaGVkLFxuICBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkLFxuICB3aXRoU2VwYXJhdG9ycyxcbiAgc3RpY2t5SGVhZGVyc0VuYWJsZWQsXG4gIGludmVydGVkLFxuICBTY3JvbGxhYmxlLFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgU2VjdGlvbkxpc3RCYXNlRXhhbXBsZSBmcm9tICcuL1NlY3Rpb25MaXN0QmFzZUV4YW1wbGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VjdGlvbkxpc3RfY29udGVudEluc2V0KCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbaW5pdGlhbENvbnRlbnRJbnNldCwgdG9nZ2xlZENvbnRlbnRJbnNldF0gPSBbNDQsIDg4XTtcblxuICBjb25zdCBbb3V0cHV0LCBzZXRPdXRwdXRdID0gUmVhY3QudXNlU3RhdGUoXG4gICAgYGNvbnRlbnRJbnNldCB0b3A6ICR7aW5pdGlhbENvbnRlbnRJbnNldC50b1N0cmluZygpfWAsXG4gICk7XG4gIGNvbnN0IFtleGFtcGxlUHJvcHMsIHNldEV4YW1wbGVQcm9wc10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgYXV0b21hdGljYWxseUFkanVzdENvbnRlbnRJbnNldHM6IGZhbHNlLFxuICAgIGNvbnRlbnRJbnNldDoge3RvcDogaW5pdGlhbENvbnRlbnRJbnNldH0sXG4gICAgY29udGVudE9mZnNldDoge3k6IC1pbml0aWFsQ29udGVudEluc2V0LCB4OiAwfSxcbiAgfSk7XG5cbiAgY29uc3Qgb25UZXN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld0NvbnRlbnRJbnNldCA9XG4gICAgICBleGFtcGxlUHJvcHMuY29udGVudEluc2V0LnRvcCA9PT0gaW5pdGlhbENvbnRlbnRJbnNldFxuICAgICAgICA/IHRvZ2dsZWRDb250ZW50SW5zZXRcbiAgICAgICAgOiBpbml0aWFsQ29udGVudEluc2V0O1xuICAgIHNldEV4YW1wbGVQcm9wcyh7XG4gICAgICBhdXRvbWF0aWNhbGx5QWRqdXN0Q29udGVudEluc2V0czogZmFsc2UsXG4gICAgICBjb250ZW50SW5zZXQ6IHt0b3A6IG5ld0NvbnRlbnRJbnNldH0sXG4gICAgICBjb250ZW50T2Zmc2V0OiB7eTogLW5ld0NvbnRlbnRJbnNldCwgeDogMH0sXG4gICAgfSk7XG4gICAgc2V0T3V0cHV0KGBjb250ZW50SW5zZXQgdG9wOiAke25ld0NvbnRlbnRJbnNldC50b1N0cmluZygpfWApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxWaWV3XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLnRpdGxlQ29udGFpbmVyLFxuICAgICAgICAgIHtoZWlnaHQ6IGV4YW1wbGVQcm9wcy5jb250ZW50SW5zZXQudG9wfSxcbiAgICAgICAgXX0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGl0bGVUZXh0fT5NZW51PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICAgPFNlY3Rpb25MaXN0QmFzZUV4YW1wbGVcbiAgICAgICAgZXhhbXBsZVByb3BzPXtleGFtcGxlUHJvcHN9XG4gICAgICAgIHRlc3RPdXRwdXQ9e291dHB1dH1cbiAgICAgICAgb25UZXN0PXtvblRlc3R9XG4gICAgICAgIHRlc3RMYWJlbD17J1RvZ2dsZSBoZWFkZXIgc2l6ZSd9XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufVxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICB0aXRsZUNvbnRhaW5lcjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogNDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmF5JyxcbiAgICB6SW5kZXg6IDEsXG4gIH0sXG4gIHRpdGxlVGV4dDoge1xuICAgIGZvbnRTaXplOiAyNCxcbiAgICBsaW5lSGVpZ2h0OiA0NCxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0aXRsZTogJ1NlY3Rpb25MaXN0IENvbnRlbnQgSW5zZXQnLFxuICBwbGF0Zm9ybTogJ2lvcycsXG4gIG5hbWU6ICdTZWN0aW9uTGlzdC1jb250ZW50SW5zZXQnLFxuICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICAgIHJldHVybiA8U2VjdGlvbkxpc3RfY29udGVudEluc2V0IC8+O1xuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIFByZXNzYWJsZSxcbiAgU2VjdGlvbkxpc3QsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IERBVEEgPSBbXG4gIHtcbiAgICB0aXRsZTogJ01haW4gZGlzaGVzJyxcbiAgICBkYXRhOiBbJ1BpenphJywgJ0J1cmdlcicsICdSaXNvdHRvJ10sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1NpZGVzJyxcbiAgICBkYXRhOiBbJ0ZyZW5jaCBGcmllcycsICdPbmlvbiBSaW5ncycsICdGcmllZCBTaHJpbXBzJ10sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0RyaW5rcycsXG4gICAgZGF0YTogWydXYXRlcicsICdDb2tlJywgJ0JlZXInXSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRGVzc2VydHMnLFxuICAgIGRhdGE6IFsnQ2hlZXNlY2FrZScsICdJY2UgQ3JlYW0nXSxcbiAgfSxcbl07XG5cbi8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAqIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG5jb25zdCBJdGVtID0gKHtpdGVtLCBzZWN0aW9uLCBzZXBhcmF0b3JzfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxQcmVzc2FibGVcbiAgICAgIG9uUHJlc3NJbj17KCkgPT4ge1xuICAgICAgICBzZXBhcmF0b3JzLmhpZ2hsaWdodCgpO1xuICAgICAgfX1cbiAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgc2VwYXJhdG9ycy51cGRhdGVQcm9wcygndHJhaWxpbmcnLCB7aGFzQmVlbkhpZ2hsaWdodGVkOiB0cnVlfSk7XG4gICAgICAgIHNlcGFyYXRvcnMudXBkYXRlUHJvcHMoJ2xlYWRpbmcnLCB7aGFzQmVlbkhpZ2hsaWdodGVkOiB0cnVlfSk7XG4gICAgICB9fVxuICAgICAgb25QcmVzc091dD17KCkgPT4ge1xuICAgICAgICBzZXBhcmF0b3JzLnVuaGlnaGxpZ2h0KCk7XG4gICAgICB9fVxuICAgICAgc3R5bGU9eyh7cHJlc3NlZH0pID0+IFtcbiAgICAgICAgc3R5bGVzLml0ZW0sXG4gICAgICAgIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByZXNzZWQgPyAncmVkJyA6ICdwaW5rJyxcbiAgICAgICAgfSxcbiAgICAgIF19XG4gICAgICB0ZXN0SUQ9e2l0ZW19PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZX0+e2l0ZW19PC9UZXh0PlxuICAgIDwvUHJlc3NhYmxlPlxuICApO1xufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgZXhhbXBsZVByb3BzOiBQYXJ0aWFsPFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFNlY3Rpb25MaXN0Pj4sXG4gIG9uVGVzdD86ID8oKSA9PiB2b2lkLFxuICB0ZXN0TGFiZWw/OiA/c3RyaW5nLFxuICB0ZXN0T3V0cHV0PzogP3N0cmluZyxcbiAgY2hpbGRyZW4/OiA/UmVhY3QuTm9kZSxcbn07XG5cbmNvbnN0IFNlY3Rpb25MaXN0QmFzZUV4YW1wbGU6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFxuICBQcm9wcyxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgU2VjdGlvbkxpc3Q+LFxuPiA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzOiBQcm9wcywgcmVmKTogUmVhY3QuTm9kZSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3Byb3BzLnRlc3RPdXRwdXQgIT0gbnVsbCA/IChcbiAgICAgICAgPFZpZXcgdGVzdElEPVwidGVzdF9jb250YWluZXJcIiBzdHlsZT17c3R5bGVzLnRlc3RDb250YWluZXJ9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMub3V0cHV0fSBudW1iZXJPZkxpbmVzPXsxfSB0ZXN0SUQ9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgIHtwcm9wcy50ZXN0T3V0cHV0fVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7cHJvcHMub25UZXN0ICE9IG51bGwgPyAoXG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHRlc3RJRD1cInN0YXJ0X3Rlc3RcIlxuICAgICAgICAgICAgICBvblByZXNzPXtwcm9wcy5vblRlc3R9XG4gICAgICAgICAgICAgIHRpdGxlPXtwcm9wcy50ZXN0TGFiZWwgPz8gJ1Rlc3QnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICA8U2VjdGlvbkxpc3RcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHRlc3RJRD1cInNlY3Rpb25fbGlzdFwiXG4gICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwibGlzdFwiXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgIHNlY3Rpb25zPXtEQVRBfVxuICAgICAgICBrZXlFeHRyYWN0b3I9eyhpdGVtLCBpbmRleCkgPT4gaXRlbSArIGluZGV4fVxuICAgICAgICBzdHlsZT17c3R5bGVzLmxpc3R9XG4gICAgICAgIHJlbmRlckl0ZW09e0l0ZW19XG4gICAgICAgIC8qICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBFcnJvciByZXZlYWxlZCBhZnRlciBpbXByb3ZlZCBidWlsdGluIFJlYWN0XG4gICAgICAgICAqIHV0aWxpdHkgdHlwZXMgKi9cbiAgICAgICAgcmVuZGVyU2VjdGlvbkhlYWRlcj17KHtzZWN0aW9uOiB7dGl0bGV9fSkgPT4gKFxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuaGVhZGVyfT57dGl0bGV9PC9UZXh0PlxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHMuZXhhbXBsZVByb3BzfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBpdGVtOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncGluaycsXG4gICAgcGFkZGluZzogMjAsXG4gICAgbWFyZ2luVmVydGljYWw6IDgsXG4gIH0sXG4gIGhlYWRlcjoge1xuICAgIGZvbnRTaXplOiAzMixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgZm9udFNpemU6IDI0LFxuICB9LFxuICB0ZXN0Q29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjJmMmY3ZmYnLFxuICAgIGhlaWdodDogNDAsXG4gIH0sXG4gIG91dHB1dDoge1xuICAgIGZsZXg6IDEsXG4gICAgZm9udFNpemU6IDEyLFxuICB9LFxuICBsaXN0OiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgY29udGFpbmVyOiB7ZmxleDogMX0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU2VjdGlvbkxpc3RCYXNlRXhhbXBsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgU2VjdGlvbkxpc3RCYXNlRXhhbXBsZSBmcm9tICcuL1NlY3Rpb25MaXN0QmFzZUV4YW1wbGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VjdGlvbkxpc3RfaW52ZXJ0ZWQoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSBSZWFjdC51c2VTdGF0ZSgnaW52ZXJ0ZWQgZmFsc2UnKTtcbiAgY29uc3QgW2V4YW1wbGVQcm9wcywgc2V0RXhhbXBsZVByb3BzXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBpbnZlcnRlZDogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IG9uVGVzdCA9ICgpID0+IHtcbiAgICBzZXRFeGFtcGxlUHJvcHMoe1xuICAgICAgaW52ZXJ0ZWQ6ICFleGFtcGxlUHJvcHMuaW52ZXJ0ZWQsXG4gICAgfSk7XG4gICAgc2V0T3V0cHV0KGBJcyBpbnZlcnRlZDogJHsoIWV4YW1wbGVQcm9wcy5pbnZlcnRlZCkudG9TdHJpbmcoKX1gKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxTZWN0aW9uTGlzdEJhc2VFeGFtcGxlXG4gICAgICBleGFtcGxlUHJvcHM9e2V4YW1wbGVQcm9wc31cbiAgICAgIHRlc3RPdXRwdXQ9e291dHB1dH1cbiAgICAgIG9uVGVzdD17b25UZXN0fVxuICAgICAgdGVzdExhYmVsPXtleGFtcGxlUHJvcHMuaW52ZXJ0ZWQgPyAnVG9nZ2xlIGZhbHNlJyA6ICdUb2dnbGUgdHJ1ZSd9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICB0aXRsZTogJ1NlY3Rpb25MaXN0IEludmVydGVkJyxcbiAgbmFtZTogJ1NlY3Rpb25MaXN0LWludmVydGVkJyxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgICByZXR1cm4gPFNlY3Rpb25MaXN0X2ludmVydGVkIC8+O1xuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCBTZWN0aW9uTGlzdEJhc2VFeGFtcGxlIGZyb20gJy4vU2VjdGlvbkxpc3RCYXNlRXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWN0aW9uTGlzdF9vbkVuZFJlYWNoZWQoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGV4YW1wbGVQcm9wcyA9IHtcbiAgICBvbkVuZFJlYWNoZWQ6IChpbmZvOiB7ZGlzdGFuY2VGcm9tRW5kOiBudW1iZXIsIC4uLn0pID0+XG4gICAgICBzZXRPdXRwdXQoJ29uRW5kUmVhY2hlZCcpLFxuICAgIG9uRW5kUmVhY2hlZFRocmVzaG9sZDogMCxcbiAgfTtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPGFueT4obnVsbCk7XG5cbiAgY29uc3Qgb25UZXN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcm9sbFJlc3BvbmRlciA9IHJlZj8uY3VycmVudD8uZ2V0U2Nyb2xsUmVzcG9uZGVyKCk7XG4gICAgaWYgKHNjcm9sbFJlc3BvbmRlciAhPSBudWxsKSB7XG4gICAgICBzY3JvbGxSZXNwb25kZXIuc2Nyb2xsVG9FbmQoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8U2VjdGlvbkxpc3RCYXNlRXhhbXBsZVxuICAgICAgcmVmPXtyZWZ9XG4gICAgICBleGFtcGxlUHJvcHM9e2V4YW1wbGVQcm9wc31cbiAgICAgIHRlc3RPdXRwdXQ9e291dHB1dH1cbiAgICAgIG9uVGVzdD17b25UZXN0fVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICdTZWN0aW9uTGlzdCBvbkVuZFJlYWNoZWQnLFxuICBuYW1lOiAnU2VjdGlvbkxpc3Qtb25FbmRSZWFjaGVkJyxcbiAgZGVzY3JpcHRpb246ICdUZXN0IG9uRW5kUmVhY2hlZCBiZWhhdmlvcicsXG4gIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gICAgcmV0dXJuIDxTZWN0aW9uTGlzdF9vbkVuZFJlYWNoZWQgLz47XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge1ZpZXdUb2tlbn0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9MaXN0cy9WaWV3YWJpbGl0eUhlbHBlcic7XG5cbmltcG9ydCBTZWN0aW9uTGlzdEJhc2VFeGFtcGxlIGZyb20gJy4vU2VjdGlvbkxpc3RCYXNlRXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1NlY3Rpb25MaXN0LCBTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBWSUVXQUJJTElUWV9DT05GSUcgPSB7XG4gIG1pbmltdW1WaWV3VGltZTogMTAwMCxcbiAgdmlld0FyZWFDb3ZlcmFnZVBlcmNlbnRUaHJlc2hvbGQ6IDEwMCxcbiAgd2FpdEZvckludGVyYWN0aW9uOiB0cnVlLFxufTtcblxudHlwZSBTZWN0aW9uTGlzdFByb3BzID0gUmVhY3QuRWxlbWVudFByb3BzPHR5cGVvZiBTZWN0aW9uTGlzdD47XG50eXBlIFZpZXdhYmlsaXR5Q29uZmlnID0gJFByb3BlcnR5VHlwZTxTZWN0aW9uTGlzdFByb3BzLCAndmlld2FiaWxpdHlDb25maWcnPjtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlY3Rpb25MaXN0X29uVmlld2FibGVJdGVtc0NoYW5nZWQocHJvcHM6IHtcbiAgdmlld2FiaWxpdHlDb25maWc6IFZpZXdhYmlsaXR5Q29uZmlnLFxuICBvZmZTY3JlZW4/OiA/Ym9vbGVhbixcbiAgaG9yaXpvbnRhbD86ID9ib29sZWFuLFxuICB1c2VTY3JvbGxSZWZTY3JvbGw/OiA/Ym9vbGVhbixcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3Qge3ZpZXdhYmlsaXR5Q29uZmlnLCBvZmZTY3JlZW4sIGhvcml6b250YWwsIHVzZVNjcm9sbFJlZlNjcm9sbH0gPSBwcm9wcztcbiAgY29uc3QgW291dHB1dCwgc2V0T3V0cHV0XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgZXhhbXBsZVByb3BzID0ge1xuICAgIG9uVmlld2FibGVJdGVtc0NoYW5nZWQ6IChpbmZvOiB7XG4gICAgICBjaGFuZ2VkOiBBcnJheTxWaWV3VG9rZW4+LFxuICAgICAgdmlld2FibGVJdGVtczogQXJyYXk8Vmlld1Rva2VuPixcbiAgICAgIC4uLlxuICAgIH0pID0+XG4gICAgICBzZXRPdXRwdXQoXG4gICAgICAgIGluZm8udmlld2FibGVJdGVtc1xuICAgICAgICAgIC5maWx0ZXIodmlld1Rva2VuID0+IHZpZXdUb2tlbi5pbmRleCAhPSBudWxsICYmIHZpZXdUb2tlbi5pc1ZpZXdhYmxlKVxuICAgICAgICAgIC5tYXAodmlld1Rva2VuID0+IHZpZXdUb2tlbi5pdGVtKVxuICAgICAgICAgIC5qb2luKCcsICcpLFxuICAgICAgKSxcbiAgICB2aWV3YWJpbGl0eUNvbmZpZyxcbiAgICBob3Jpem9udGFsLFxuICB9O1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8YW55PihudWxsKTtcbiAgY29uc3Qgb25UZXN0ID1cbiAgICB1c2VTY3JvbGxSZWZTY3JvbGwgPT09IHRydWVcbiAgICAgID8gKCkgPT4ge1xuICAgICAgICAgIHJlZj8uY3VycmVudD8uZ2V0U2Nyb2xsUmVzcG9uZGVyKCk/LnNjcm9sbFRvRW5kKCk7XG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxTZWN0aW9uTGlzdEJhc2VFeGFtcGxlXG4gICAgICByZWY9e3JlZn1cbiAgICAgIGV4YW1wbGVQcm9wcz17ZXhhbXBsZVByb3BzfVxuICAgICAgb25UZXN0PXtvblRlc3R9XG4gICAgICB0ZXN0T3V0cHV0PXtvdXRwdXR9PlxuICAgICAge29mZlNjcmVlbiA9PT0gdHJ1ZSA/IDxWaWV3IHN0eWxlPXtzdHlsZXMub2ZmU2NyZWVufSAvPiA6IG51bGx9XG4gICAgPC9TZWN0aW9uTGlzdEJhc2VFeGFtcGxlPlxuICApO1xufVxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBvZmZTY3JlZW46IHtcbiAgICBoZWlnaHQ6IDEwMDAsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0aXRsZTogJ1NlY3Rpb25MaXN0IE9uIFZpZXdhYmxlIEl0ZW1zIENoYW5nZWQnLFxuICBuYW1lOiAnU2VjdGlvbkxpc3Rfb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCcsXG4gIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWN0aW9uTGlzdF9vblZpZXdhYmxlSXRlbXNDaGFuZ2VkXG4gICAgICAgIHZpZXdhYmlsaXR5Q29uZmlnPXtWSUVXQUJJTElUWV9DT05GSUd9XG4gICAgICAvPlxuICAgICk7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHR5cGUge0l0ZW19IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvTGlzdEV4YW1wbGVTaGFyZWQnO1xuXG5jb25zdCB7XG4gIEZvb3RlckNvbXBvbmVudCxcbiAgSGVhZGVyQ29tcG9uZW50LFxuICBJdGVtQ29tcG9uZW50LFxuICBQbGFpbklucHV0LFxuICBTZXBhcmF0b3JDb21wb25lbnQsXG4gIFNwaW5kaWNhdG9yLFxuICBnZW5OZXdlckl0ZW1zLFxuICBwcmVzc0l0ZW0sXG4gIHJlbmRlclNtYWxsU3dpdGNoT3B0aW9uLFxuICByZW5kZXJTdGFja2VkSXRlbSxcbn0gPSByZXF1aXJlKCcuLi8uLi9jb21wb25lbnRzL0xpc3RFeGFtcGxlU2hhcmVkJyk7XG5jb25zdCBSTlRlc3RlclBhZ2UgPSByZXF1aXJlKCcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyUGFnZScpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBBbGVydCxcbiAgQW5pbWF0ZWQsXG4gIEJ1dHRvbixcbiAgU2VjdGlvbkxpc3QsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5jb25zdCBpbmZvTG9nID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvaW5mb0xvZycpO1xuXG5jb25zdCBWSUVXQUJJTElUWV9DT05GSUcgPSB7XG4gIG1pbmltdW1WaWV3VGltZTogMzAwMCxcbiAgdmlld0FyZWFDb3ZlcmFnZVBlcmNlbnRUaHJlc2hvbGQ6IDEwMCxcbiAgd2FpdEZvckludGVyYWN0aW9uOiB0cnVlLFxufTtcblxuY29uc3QgQ09OU1RBTlRfU0VDVElPTl9FWEFNUExFUyA9IFtcbiAge1xuICAgIGtleTogJ2VtcHR5IHNlY3Rpb24nLFxuICAgIGRhdGE6IFtdLFxuICB9LFxuICB7XG4gICAgcmVuZGVySXRlbTogcmVuZGVyU3RhY2tlZEl0ZW0sXG4gICAga2V5OiAnczEnLFxuICAgIGRhdGE6IFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdJdGVtIEluIEhlYWRlciBTZWN0aW9uJyxcbiAgICAgICAgdGV4dDogJ1NlY3Rpb24gczEnLFxuICAgICAgICBrZXk6ICdoZWFkZXIgaXRlbScsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzMicsXG4gICAgZGF0YTogW1xuICAgICAge1xuICAgICAgICBub0ltYWdlOiB0cnVlLFxuICAgICAgICB0aXRsZTogJzFzdCBpdGVtJyxcbiAgICAgICAgdGV4dDogJ1NlY3Rpb24gczInLFxuICAgICAgICBrZXk6ICdub2ltYWdlMCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBub0ltYWdlOiB0cnVlLFxuICAgICAgICB0aXRsZTogJzJuZCBpdGVtJyxcbiAgICAgICAgdGV4dDogJ1NlY3Rpb24gczInLFxuICAgICAgICBrZXk6ICdub2ltYWdlMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuY29uc3QgcmVuZGVyU2VjdGlvbkhlYWRlciA9ICh7c2VjdGlvbn0pID0+IChcbiAgPFZpZXcgc3R5bGU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuaGVhZGVyVGV4dH0+U0VDVElPTiBIRUFERVI6IHtzZWN0aW9uLmtleX08L1RleHQ+XG4gICAgPFNlcGFyYXRvckNvbXBvbmVudCAvPlxuICA8L1ZpZXc+XG4pO1xuXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuY29uc3QgcmVuZGVyU2VjdGlvbkZvb3RlciA9ICh7c2VjdGlvbn0pID0+IChcbiAgPFZpZXcgc3R5bGU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuaGVhZGVyVGV4dH0+U0VDVElPTiBGT09URVI6IHtzZWN0aW9uLmtleX08L1RleHQ+XG4gICAgPFNlcGFyYXRvckNvbXBvbmVudCAvPlxuICA8L1ZpZXc+XG4pO1xuXG4vKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnkgRmxvdydzXG4gKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuY29uc3QgQ3VzdG9tU2VwYXJhdG9yQ29tcG9uZW50ID0gKHtoaWdobGlnaHRlZCwgdGV4dH0pID0+IChcbiAgPFZpZXdcbiAgICBzdHlsZT17W1xuICAgICAgc3R5bGVzLmN1c3RvbVNlcGFyYXRvcixcbiAgICAgIGhpZ2hsaWdodGVkICYmIHtiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoMjE3LCAyMTcsIDIxNyknfSxcbiAgICBdfT5cbiAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnNlcGFyYXRvclRleHR9Pnt0ZXh0fTwvVGV4dD5cbiAgPC9WaWV3PlxuKTtcblxuY29uc3QgRW1wdHlTZWN0aW9uTGlzdCA9ICgpID0+IChcbiAgPFZpZXcgc3R5bGU9e3thbGlnbkl0ZW1zOiAnY2VudGVyJ319PlxuICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDIwfX0+VGhpcyBpcyByZW5kZXJlZCB3aGVuIHRoZSBsaXN0IGlzIGVtcHR5PC9UZXh0PlxuICA8L1ZpZXc+XG4pO1xuXG5jb25zdCByZW5kZXJJdGVtQ29tcG9uZW50ID1cbiAgKHNldEl0ZW1TdGF0ZTogKGl0ZW06IEl0ZW0pID0+IHZvaWQpID0+XG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAgICogTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgKHtpdGVtLCBzZXBhcmF0b3JzfSkgPT4ge1xuICAgIGlmIChpc05hTihpdGVtLmtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb25QcmVzcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRJdGVtID0gcHJlc3NJdGVtKGl0ZW0pO1xuICAgICAgc2V0SXRlbVN0YXRlKHVwZGF0ZWRJdGVtKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxJdGVtQ29tcG9uZW50XG4gICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgIG9uUHJlc3M9e29uUHJlc3N9XG4gICAgICAgIG9uSGlkZVVuZGVybGF5PXtzZXBhcmF0b3JzLnVuaGlnaGxpZ2h0fVxuICAgICAgICBvblNob3dVbmRlcmxheT17c2VwYXJhdG9ycy5oaWdobGlnaHR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbmNvbnN0IG9uU2Nyb2xsVG9JbmRleEZhaWxlZCA9IChpbmZvOiB7XG4gIGluZGV4OiBudW1iZXIsXG4gIGM6IG51bWJlcixcbiAgYXZlcmFnZUl0ZW1MZW5ndGg6IG51bWJlcixcbn0pID0+IHtcbiAgY29uc29sZS53YXJuKCdvblNjcm9sbFRvSW5kZXhGYWlsZWQuIFNlZSBjb21tZW50IGluIGNhbGxiYWNrJywgaW5mbyk7XG4gIC8qKlxuICAgKiBzY3JvbGxUb0xvY2F0aW9uKCkgY2FuIG9ubHkgc2Nyb2xsIHRvIHZpZXdhYmxlIGFyZWEuXG4gICAqIEZvciBhbnkgZmFpbHVyZSBjYXNlcyB0aGlzIGNhbGxiYWNrIHdpbGwgZ2V0IHRyaWdnZXJlZCB3aXRoIGBpbmZvYCBvYmplY3RcbiAgICpcbiAgICogVGhlIGlkZWEgaXMgdG8gY2FsY3VsYXRlIGEgeVBvc2l0aW9uIGZyb20gYGluZm9gIHRvIGNhbGwgc2Nyb2xsUmVzcG9uZGVyLnNjcm9sbFRvIG9uLlxuICAgKlxuICAgKiBjb25zdCBzY3JvbGxSZXNwb25kZXIgPSByZWYuY3VycmVudD8uZ2V0U2Nyb2xsUmVzcG9uZGVyKCk7XG4gICAqIGNvbnN0IHBvc2l0aW9uWSA9IHNvbWUgdmFsdWUgd2UgY2FsY3VsYXRlIGZyb20gYGluZm9gO1xuICAgKiBpZiAoc2Nyb2xsUmVzcG9uZGVyICE9IG51bGwpIHtcbiAgICogICAgc2Nyb2xsUmVzcG9uZGVyLnNjcm9sbFRvKHt4LCB5OnBvc2l0aW9uWSwgYW5pbWF0ZWQ6IHRydWV9KTtcbiAgICogfVxuICAgKi9cbn07XG5cbi8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbmNvbnN0IEl0ZW1TZXBhcmF0b3JDb21wb25lbnQgPSBpbmZvID0+IChcbiAgPEN1c3RvbVNlcGFyYXRvckNvbXBvbmVudCB7Li4uaW5mb30gdGV4dD1cIklURU0gU0VQQVJBVE9SXCIgLz5cbik7XG5cbi8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbmNvbnN0IFNlY3Rpb25TZXBhcmF0b3JDb21wb25lbnQgPSBpbmZvID0+IChcbiAgPEN1c3RvbVNlcGFyYXRvckNvbXBvbmVudCB7Li4uaW5mb30gdGV4dD1cIlNFQ1RJT04gU0VQQVJBVE9SXCIgLz5cbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWN0aW9uTGlzdF9zY3JvbGxhYmxlKFByb3BzOiB7XG4gIC4uLlxufSk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIFJOVGVzdGVyUGFnZT4ge1xuICBjb25zdCBzY3JvbGxQb3MgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMCk7XG4gIGNvbnN0IHNjcm9sbFNpbmtZID0gQW5pbWF0ZWQuZXZlbnQoXG4gICAgW3tuYXRpdmVFdmVudDoge2NvbnRlbnRPZmZzZXQ6IHt5OiBzY3JvbGxQb3N9fX1dLFxuICAgIHt1c2VOYXRpdmVEcml2ZXI6IHRydWV9LFxuICApO1xuICBjb25zdCBbZmlsdGVyVGV4dCwgc2V0RmlsdGVyVGV4dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFt2aXJ0dWFsaXplZCwgc2V0VmlydHVhbGl6ZWRdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtsb2dWaWV3YWJsZSwgc2V0TG9nVmlld2FibGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGVidWcsIHNldERlYnVnXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ludmVydGVkLCBzZXRJbnZlcnRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IFJlYWN0LnVzZVN0YXRlKGdlbk5ld2VySXRlbXMoMTAwMCkpO1xuXG4gIGNvbnN0IGZpbHRlclJlZ2V4ID0gbmV3IFJlZ0V4cChTdHJpbmcoZmlsdGVyVGV4dCksICdpJyk7XG4gIGNvbnN0IGZpbHRlciA9IChpdGVtOiBJdGVtKSA9PlxuICAgIGZpbHRlclJlZ2V4LnRlc3QoaXRlbS50ZXh0KSB8fCBmaWx0ZXJSZWdleC50ZXN0KGl0ZW0udGl0bGUpO1xuICBjb25zdCBmaWx0ZXJlZERhdGEgPSBkYXRhLmZpbHRlcihmaWx0ZXIpO1xuICBjb25zdCBmaWx0ZXJlZFNlY3Rpb25EYXRhID0gWy4uLkNPTlNUQU5UX1NFQ1RJT05fRVhBTVBMRVNdO1xuXG4gIGxldCBzdGFydEluZGV4ID0gMDtcbiAgY29uc3QgZW5kSW5kZXggPSBmaWx0ZXJlZERhdGEubGVuZ3RoIC0gMTtcbiAgZm9yIChsZXQgaWkgPSAxMDsgaWkgPD0gZW5kSW5kZXggKyAxMDsgaWkgKz0gMTApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgIGZpbHRlcmVkU2VjdGlvbkRhdGEucHVzaCh7XG4gICAgICBrZXk6IGAke2ZpbHRlcmVkRGF0YVtzdGFydEluZGV4XS5rZXl9IC0gJHtcbiAgICAgICAgZmlsdGVyZWREYXRhW01hdGgubWluKGlpIC0gMSwgZW5kSW5kZXgpXS5rZXlcbiAgICAgIH1gLFxuICAgICAgZGF0YTogZmlsdGVyZWREYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIGlpKSxcbiAgICB9KTtcbiAgICBzdGFydEluZGV4ID0gaWk7XG4gIH1cblxuICBjb25zdCBzZXRJdGVtUHJlc3MgPSAoaXRlbTogSXRlbSkgPT4ge1xuICAgIGlmIChpc05hTihpdGVtLmtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBOdW1iZXIoaXRlbS5rZXkpO1xuICAgIHNldERhdGEoWy4uLmRhdGEuc2xpY2UoMCwgaW5kZXgpLCBpdGVtLCAuLi5kYXRhLnNsaWNlKGluZGV4ICsgMSldKTtcbiAgfTtcblxuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8P1JlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFNlY3Rpb25MaXN0Pj4obnVsbCk7XG4gIGNvbnN0IHNjcm9sbFRvTG9jYXRpb24gPSAoc2VjdGlvbkluZGV4OiBudW1iZXIsIGl0ZW1JbmRleDogbnVtYmVyKSA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgIGlmIChyZWYgIT0gbnVsbCAmJiByZWYuY3VycmVudD8uc2Nyb2xsVG9Mb2NhdGlvbiAhPSBudWxsKSB7XG4gICAgICByZWYuY3VycmVudC5zY3JvbGxUb0xvY2F0aW9uKHtzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvblZpZXdhYmxlSXRlbXNDaGFuZ2VkID0gKGluZm86IHtcbiAgICBjaGFuZ2VkOiBBcnJheTx7XG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIGlzVmlld2FibGU6IGJvb2xlYW4sXG4gICAgICBpdGVtOiB7Y29sdW1uczogQXJyYXk8YW55PiwgLi4ufSxcbiAgICAgIGluZGV4OiA/bnVtYmVyLFxuICAgICAgc2VjdGlvbj86IGFueSxcbiAgICAgIC4uLlxuICAgIH0+LFxuICAgIC4uLlxuICB9KSA9PiB7XG4gICAgLy8gSW1wcmVzc2lvbnMgY2FuIGJlIGxvZ2dlZCBoZXJlXG4gICAgaWYgKGxvZ1ZpZXdhYmxlKSB7XG4gICAgICBpbmZvTG9nKFxuICAgICAgICAnb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZDogJyxcbiAgICAgICAgaW5mby5jaGFuZ2VkLm1hcCgodjogT2JqZWN0KSA9PiAoe1xuICAgICAgICAgIC4uLnYsXG4gICAgICAgICAgaXRlbTogJy4uLicsXG4gICAgICAgICAgc2VjdGlvbjogdi5zZWN0aW9uLmtleSxcbiAgICAgICAgfSkpLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQYWdlIG5vU2Nyb2xsPXt0cnVlfT5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VhcmNoUm93fT5cbiAgICAgICAgPFBsYWluSW5wdXRcbiAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RleHQgPT4gc2V0RmlsdGVyVGV4dCh0ZXh0KX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgdmFsdWU9e2ZpbHRlclRleHR9XG4gICAgICAgIC8+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMub3B0aW9uU2VjdGlvbn0+XG4gICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKCdWaXJ0dWFsaXplZCcsIHZpcnR1YWxpemVkLCBzZXRWaXJ0dWFsaXplZCl9XG4gICAgICAgICAge3JlbmRlclNtYWxsU3dpdGNoT3B0aW9uKCdMb2cgVmlld2FibGUnLCBsb2dWaWV3YWJsZSwgc2V0TG9nVmlld2FibGUpfVxuICAgICAgICAgIHtyZW5kZXJTbWFsbFN3aXRjaE9wdGlvbignRGVidWcnLCBkZWJ1Zywgc2V0RGVidWcpfVxuICAgICAgICAgIHtyZW5kZXJTbWFsbFN3aXRjaE9wdGlvbignSW52ZXJ0ZWQnLCBpbnZlcnRlZCwgc2V0SW52ZXJ0ZWQpfVxuICAgICAgICAgIDxTcGluZGljYXRvciB2YWx1ZT17c2Nyb2xsUG9zfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2Nyb2xsVG9Db2x1bW59PlxuICAgICAgICAgIDxUZXh0PnNjcm9sbCB0bzo8L1RleHQ+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB0aXRsZT1cIlRvcFwiXG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNjcm9sbFRvTG9jYXRpb24oTWF0aC5tYXgoMCwgMiksIDApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB0aXRsZT1cIjNyZCBTZWN0aW9uXCJcbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gc2Nyb2xsVG9Mb2NhdGlvbihNYXRoLm1heCgwLCAzKSwgMCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHRpdGxlPVwiNnRoIFNlY3Rpb25cIlxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBzY3JvbGxUb0xvY2F0aW9uKE1hdGgubWF4KDAsIDYpLCAwKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdGl0bGU9XCJPdXQgb2YgVmlld2FibGUgQXJlYSAoU2VlIHdhcm5pbmcpIFwiXG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgICAgICAgc2Nyb2xsVG9Mb2NhdGlvbihmaWx0ZXJlZFNlY3Rpb25EYXRhLmxlbmd0aCAtIDEsIDApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8U2VwYXJhdG9yQ29tcG9uZW50IC8+XG4gICAgICA8QW5pbWF0ZWQuU2VjdGlvbkxpc3RcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIExpc3RIZWFkZXJDb21wb25lbnQ9e0hlYWRlckNvbXBvbmVudH1cbiAgICAgICAgTGlzdEZvb3RlckNvbXBvbmVudD17Rm9vdGVyQ29tcG9uZW50fVxuICAgICAgICBTZWN0aW9uU2VwYXJhdG9yQ29tcG9uZW50PXtTZWN0aW9uU2VwYXJhdG9yQ29tcG9uZW50fVxuICAgICAgICBJdGVtU2VwYXJhdG9yQ29tcG9uZW50PXtJdGVtU2VwYXJhdG9yQ29tcG9uZW50fVxuICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImxpc3RcIlxuICAgICAgICBkZWJ1Zz17ZGVidWd9XG4gICAgICAgIGludmVydGVkPXtpbnZlcnRlZH1cbiAgICAgICAgZGlzYWJsZVZpcnR1YWxpemF0aW9uPXshdmlydHVhbGl6ZWR9XG4gICAgICAgIG9uUmVmcmVzaD17KCkgPT4gQWxlcnQuYWxlcnQoJ29uUmVmcmVzaDogbm90aGluZyB0byByZWZyZXNoIDpQJyl9XG4gICAgICAgIG9uU2Nyb2xsPXtzY3JvbGxTaW5rWX1cbiAgICAgICAgb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZD17b25WaWV3YWJsZUl0ZW1zQ2hhbmdlZH1cbiAgICAgICAgb25TY3JvbGxUb0luZGV4RmFpbGVkPXtvblNjcm9sbFRvSW5kZXhGYWlsZWR9XG4gICAgICAgIHJlZnJlc2hpbmc9e2ZhbHNlfVxuICAgICAgICByZW5kZXJJdGVtPXtyZW5kZXJJdGVtQ29tcG9uZW50KHNldEl0ZW1QcmVzcyl9XG4gICAgICAgIHJlbmRlclNlY3Rpb25IZWFkZXI9e3JlbmRlclNlY3Rpb25IZWFkZXJ9XG4gICAgICAgIHJlbmRlclNlY3Rpb25Gb290ZXI9e3JlbmRlclNlY3Rpb25Gb290ZXJ9XG4gICAgICAgIHN0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZFxuICAgICAgICBpbml0aWFsTnVtVG9SZW5kZXI9ezEwfVxuICAgICAgICBMaXN0RW1wdHlDb21wb25lbnQ9e0VtcHR5U2VjdGlvbkxpc3R9XG4gICAgICAgIG9uRW5kUmVhY2hlZD17KCkgPT5cbiAgICAgICAgICBBbGVydC5hbGVydChcbiAgICAgICAgICAgICdvbkVuZFJlYWNoZWQgY2FsbGVkJyxcbiAgICAgICAgICAgICdZb3UgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhpcyBsaXN0JyxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgb25FbmRSZWFjaGVkVGhyZXNob2xkPXswfVxuICAgICAgICBzZWN0aW9ucz17ZmlsdGVyZWRTZWN0aW9uRGF0YX1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy5saXN0fVxuICAgICAgICB2aWV3YWJpbGl0eUNvbmZpZz17VklFV0FCSUxJVFlfQ09ORklHfVxuICAgICAgLz5cbiAgICA8L1JOVGVzdGVyUGFnZT5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBidXR0b246IHtcbiAgICBtYXJnaW5Ub3A6IDUsXG4gIH0sXG4gIGN1c3RvbVNlcGFyYXRvcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYigyMDAsIDE5OSwgMjA0KScsXG4gIH0sXG4gIGhlYWRlcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNlOWVhZWQnLFxuICB9LFxuICBoZWFkZXJUZXh0OiB7XG4gICAgcGFkZGluZzogNCxcbiAgICBmb250V2VpZ2h0OiAnNjAwJyxcbiAgfSxcbiAgbGlzdDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgfSxcbiAgb3B0aW9uU2VjdGlvbjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIHNlYXJjaFJvdzoge1xuICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgfSxcbiAgc2Nyb2xsVG9Db2x1bW46IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogOCxcbiAgfSxcbiAgc2VwYXJhdG9yVGV4dDoge1xuICAgIGNvbG9yOiAnZ3JheScsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICBmb250U2l6ZTogNyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnU2VjdGlvbkxpc3Qgc2Nyb2xsYWJsZScsXG4gIG5hbWU6ICdTZWN0aW9uTGlzdC1zY3JvbGxhYmxlJyxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgICByZXR1cm4gPFNlY3Rpb25MaXN0X3Njcm9sbGFibGUgLz47XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcbmltcG9ydCBTZWN0aW9uTGlzdEJhc2VFeGFtcGxlIGZyb20gJy4vU2VjdGlvbkxpc3RCYXNlRXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWN0aW9uTGlzdF9zdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAnc3RpY2t5U2VjdGlvbkhlYWRlcnNFbmFibGVkIGZhbHNlJyxcbiAgKTtcbiAgY29uc3QgW2V4YW1wbGVQcm9wcywgc2V0RXhhbXBsZVByb3BzXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBzdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQ6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCBvblRlc3QgPSAoKSA9PiB7XG4gICAgc2V0RXhhbXBsZVByb3BzKHtcbiAgICAgIHN0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZDogIWV4YW1wbGVQcm9wcy5zdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQsXG4gICAgfSk7XG4gICAgc2V0T3V0cHV0KFxuICAgICAgYHN0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZCAkeyghZXhhbXBsZVByb3BzLnN0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZCkudG9TdHJpbmcoKX1gLFxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8U2VjdGlvbkxpc3RCYXNlRXhhbXBsZVxuICAgICAgZXhhbXBsZVByb3BzPXtleGFtcGxlUHJvcHN9XG4gICAgICB0ZXN0T3V0cHV0PXtvdXRwdXR9XG4gICAgICBvblRlc3Q9e29uVGVzdH1cbiAgICAgIHRlc3RMYWJlbD17XG4gICAgICAgIGV4YW1wbGVQcm9wcy5zdGlja3lTZWN0aW9uSGVhZGVyc0VuYWJsZWQgPyAnU3RpY2t5IE9mZicgOiAnU3RpY2t5IE9uJ1xuICAgICAgfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICdTZWN0aW9uTGlzdCBTdGlja3kgSGVhZGVycyBFbmFibGVkJyxcbiAgbmFtZTogJ1NlY3Rpb25MaXN0LXN0aWNreUhlYWRlcnNFbmFibGVkJyxcbiAgZGVzY3JpcHRpb246ICdUb2dnbGUgc3RpY2t5IGhlYWRlcnMgb24vb2ZmJyxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgICByZXR1cm4gPFNlY3Rpb25MaXN0X3N0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZCAvPjtcbiAgfSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgU2VjdGlvbkxpc3RCYXNlRXhhbXBsZSBmcm9tICcuL1NlY3Rpb25MaXN0QmFzZUV4YW1wbGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBTZXBhcmF0b3IgPVxuICAoZGVmYXVsdENvbG9yOiBzdHJpbmcsIGhpZ2hsaWdodENvbG9yOiBzdHJpbmcsIGlzU2VjdGlvblNlcGFyYXRvcjogYm9vbGVhbikgPT5cbiAgKHtsZWFkaW5nSXRlbSwgdHJhaWxpbmdJdGVtLCBoaWdobGlnaHRlZCwgaGFzQmVlbkhpZ2hsaWdodGVkfTogYW55KSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IGAke1xuICAgICAgaXNTZWN0aW9uU2VwYXJhdG9yID8gJ1NlY3Rpb24gJyA6ICcnXG4gICAgfXNlcGFyYXRvciBmb3IgbGVhZGluZyAke2xlYWRpbmdJdGVtfSBhbmQgdHJhaWxpbmcgJHt0cmFpbGluZ0l0ZW19IGhhcyAke1xuICAgICAgIWhhc0JlZW5IaWdobGlnaHRlZCA/ICdub3QgJyA6ICcnXG4gICAgfWJlZW4gcHJlc3NlZGA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMuc2VwYXJhdG9yLFxuICAgICAgICAgIHtiYWNrZ3JvdW5kQ29sb3I6IGhpZ2hsaWdodGVkID8gaGlnaGxpZ2h0Q29sb3IgOiBkZWZhdWx0Q29sb3J9LFxuICAgICAgICBdfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zZXBhcmF0b3JUZXh0fT57dGV4dH08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlY3Rpb25MaXN0X3dpdGhTZXBhcmF0b3JzKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBleGFtcGxlUHJvcHMgPSB7XG4gICAgSXRlbVNlcGFyYXRvckNvbXBvbmVudDogU2VwYXJhdG9yKCdsaWdodGdyZWVuJywgJ2dyZWVuJywgZmFsc2UpLFxuICAgIFNlY3Rpb25TZXBhcmF0b3JDb21wb25lbnQ6IFNlcGFyYXRvcignbGlnaHRibHVlJywgJ2JsdWUnLCB0cnVlKSxcbiAgfTtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPGFueT4obnVsbCk7XG5cbiAgcmV0dXJuIDxTZWN0aW9uTGlzdEJhc2VFeGFtcGxlIHJlZj17cmVmfSBleGFtcGxlUHJvcHM9e2V4YW1wbGVQcm9wc30gLz47XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgc2VwYXJhdG9yOiB7XG4gICAgaGVpZ2h0OiAxMixcbiAgfSxcbiAgc2VwYXJhdG9yVGV4dDoge1xuICAgIGZvbnRTaXplOiAxMCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnU2VjdGlvbkxpc3QgV2l0aCBTZXBhcmF0b3JzJyxcbiAgbmFtZTogJ1NlY3Rpb25MaXN0LXdpdGhTZXBhcmF0b3JzJyxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgICByZXR1cm4gPFNlY3Rpb25MaXN0X3dpdGhTZXBhcmF0b3JzIC8+O1xuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgTW9kYWwsXG4gIFN0YXR1c0JhcixcbiAgU3R5bGVTaGVldCxcbiAgVGV4dCxcbiAgVG91Y2hhYmxlSGlnaGxpZ2h0LFxuICBWaWV3LFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jb25zdCBjb2xvcnMgPSBbJyNmZjAwMDAnLCAnIzAwZmYwMCcsICcjMDAwMGZmJywgJ3JnYmEoMCwgMCwgMCwgMC40KSddO1xuXG5jb25zdCBiYXJTdHlsZXMgPSBbJ2RlZmF1bHQnLCAnbGlnaHQtY29udGVudCcsICdkYXJrLWNvbnRlbnQnXTtcblxuY29uc3Qgc2hvd0hpZGVUcmFuc2l0aW9ucyA9IFsnZmFkZScsICdzbGlkZSddO1xuXG5mdW5jdGlvbiBnZXRWYWx1ZTxUPih2YWx1ZXM6IEFycmF5PFQ+LCBpbmRleDogbnVtYmVyKTogVCB7XG4gIHJldHVybiB2YWx1ZXNbaW5kZXggJSB2YWx1ZXMubGVuZ3RoXTtcbn1cblxuY2xhc3MgU3RhdHVzQmFySGlkZGVuRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOlxuICAgIHwgJEZsb3dGaXhNZVxuICAgIHwge2FuaW1hdGVkOiBib29sZWFuLCBoaWRkZW46IGJvb2xlYW4sIHNob3dIaWRlVHJhbnNpdGlvbjogc3RyaW5nfSA9IHtcbiAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIHNob3dIaWRlVHJhbnNpdGlvbjogZ2V0VmFsdWUoc2hvd0hpZGVUcmFuc2l0aW9ucywgMCksXG4gIH07XG5cbiAgX3Nob3dIaWRlVHJhbnNpdGlvbkluZGV4ID0gMDtcblxuICBfb25DaGFuZ2VBbmltYXRlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHthbmltYXRlZDogIXRoaXMuc3RhdGUuYW5pbWF0ZWR9KTtcbiAgfTtcblxuICBfb25DaGFuZ2VIaWRkZW4gPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7aGlkZGVuOiAhdGhpcy5zdGF0ZS5oaWRkZW59KTtcbiAgfTtcblxuICBfb25DaGFuZ2VUcmFuc2l0aW9uID0gKCkgPT4ge1xuICAgIHRoaXMuX3Nob3dIaWRlVHJhbnNpdGlvbkluZGV4Kys7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzaG93SGlkZVRyYW5zaXRpb246IGdldFZhbHVlKFxuICAgICAgICBzaG93SGlkZVRyYW5zaXRpb25zLFxuICAgICAgICB0aGlzLl9zaG93SGlkZVRyYW5zaXRpb25JbmRleCxcbiAgICAgICksXG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFN0YXR1c0JhclxuICAgICAgICAgIGhpZGRlbj17dGhpcy5zdGF0ZS5oaWRkZW59XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbiAgICAgICAgICBzaG93SGlkZVRyYW5zaXRpb249e3RoaXMuc3RhdGUuc2hvd0hpZGVUcmFuc2l0aW9ufVxuICAgICAgICAgIGFuaW1hdGVkPXt0aGlzLnN0YXRlLmFuaW1hdGVkfVxuICAgICAgICAvPlxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMuX29uQ2hhbmdlSGlkZGVufT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5oaWRkZW46IHt0aGlzLnN0YXRlLmhpZGRlbiA/ICd0cnVlJyA6ICdmYWxzZSd9PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fb25DaGFuZ2VBbmltYXRlZH0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIGFuaW1hdGVkIChpb3Mgb25seSk6IHt0aGlzLnN0YXRlLmFuaW1hdGVkID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMuX29uQ2hhbmdlVHJhbnNpdGlvbn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIHNob3dIaWRlVHJhbnNpdGlvbiAoaW9zIG9ubHkpOiAnXG4gICAgICAgICAgICAgIHtnZXRWYWx1ZShzaG93SGlkZVRyYW5zaXRpb25zLCB0aGlzLl9zaG93SGlkZVRyYW5zaXRpb25JbmRleCl9J1xuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxNb2RhbEV4YW1wbGUgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFN0YXR1c0JhclN0eWxlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIF9iYXJTdHlsZUluZGV4ID0gMDtcblxuICBfb25DaGFuZ2VCYXJTdHlsZSA9ICgpID0+IHtcbiAgICB0aGlzLl9iYXJTdHlsZUluZGV4Kys7XG4gICAgdGhpcy5zZXRTdGF0ZSh7YmFyU3R5bGU6IGdldFZhbHVlKGJhclN0eWxlcywgdGhpcy5fYmFyU3R5bGVJbmRleCl9KTtcbiAgfTtcblxuICBfb25DaGFuZ2VBbmltYXRlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHthbmltYXRlZDogIXRoaXMuc3RhdGUuYW5pbWF0ZWR9KTtcbiAgfTtcblxuICBzdGF0ZTogJEZsb3dGaXhNZSB8IHthbmltYXRlZDogYm9vbGVhbiwgYmFyU3R5bGU6IHN0cmluZ30gPSB7XG4gICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgYmFyU3R5bGU6IGdldFZhbHVlKGJhclN0eWxlcywgdGhpcy5fYmFyU3R5bGVJbmRleCksXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFN0YXR1c0JhclxuICAgICAgICAgIGFuaW1hdGVkPXt0aGlzLnN0YXRlLmFuaW1hdGVkfVxuICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgYmFyU3R5bGU9e3RoaXMuc3RhdGUuYmFyU3R5bGV9XG4gICAgICAgIC8+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fb25DaGFuZ2VCYXJTdHlsZX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c3R5bGU6ICd7Z2V0VmFsdWUoYmFyU3R5bGVzLCB0aGlzLl9iYXJTdHlsZUluZGV4KX0nPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgICAgPFRleHQ+KGRlZmF1bHQgaXMgZGFyayBmb3IgaU9TLCBsaWdodCBmb3IgQW5kcm9pZCk8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLl9vbkNoYW5nZUFuaW1hdGVkfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgYW5pbWF0ZWQgKGlvcyBvbmx5KToge3RoaXMuc3RhdGUuYW5pbWF0ZWQgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTdGF0dXNCYXJOZXR3b3JrQWN0aXZpdHlFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICB7Li4ufSxcbiAgJEZsb3dGaXhNZVN0YXRlLFxuPiB7XG4gIHN0YXRlOiAkRmxvd0ZpeE1lIHwge25ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGU6IGJvb2xlYW59ID0ge1xuICAgIG5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGU6IGZhbHNlLFxuICB9O1xuXG4gIF9vbkNoYW5nZU5ldHdvcmtJbmRpY2F0b3JWaXNpYmxlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZTpcbiAgICAgICAgIXRoaXMuc3RhdGUubmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8U3RhdHVzQmFyXG4gICAgICAgICAgbmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZT17XG4gICAgICAgICAgICB0aGlzLnN0YXRlLm5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGVcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fb25DaGFuZ2VOZXR3b3JrSW5kaWNhdG9yVmlzaWJsZX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIG5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGU6XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLm5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTdGF0dXNCYXJCYWNrZ3JvdW5kQ29sb3JFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICB7Li4ufSxcbiAgJEZsb3dGaXhNZVN0YXRlLFxuPiB7XG4gIHN0YXRlOiAkRmxvd0ZpeE1lIHwge2FuaW1hdGVkOiBib29sZWFuLCBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZ30gPSB7XG4gICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiBnZXRWYWx1ZShjb2xvcnMsIDApLFxuICB9O1xuXG4gIF9jb2xvckluZGV4ID0gMDtcblxuICBfb25DaGFuZ2VCYWNrZ3JvdW5kQ29sb3IgPSAoKSA9PiB7XG4gICAgdGhpcy5fY29sb3JJbmRleCsrO1xuICAgIHRoaXMuc2V0U3RhdGUoe2JhY2tncm91bmRDb2xvcjogZ2V0VmFsdWUoY29sb3JzLCB0aGlzLl9jb2xvckluZGV4KX0pO1xuICB9O1xuXG4gIF9vbkNoYW5nZUFuaW1hdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe2FuaW1hdGVkOiAhdGhpcy5zdGF0ZS5hbmltYXRlZH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxTdGF0dXNCYXJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e3RoaXMuc3RhdGUuYmFja2dyb3VuZENvbG9yfVxuICAgICAgICAgIGFuaW1hdGVkPXt0aGlzLnN0YXRlLmFuaW1hdGVkfVxuICAgICAgICAvPlxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMuX29uQ2hhbmdlQmFja2dyb3VuZENvbG9yfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5iYWNrZ3JvdW5kQ29sb3I6ICd7Z2V0VmFsdWUoY29sb3JzLCB0aGlzLl9jb2xvckluZGV4KX0nPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fb25DaGFuZ2VBbmltYXRlZH0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+YW5pbWF0ZWQ6IHt0aGlzLnN0YXRlLmFuaW1hdGVkID8gJ3RydWUnIDogJ2ZhbHNlJ308L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFN0YXR1c0JhclRyYW5zbHVjZW50RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgey4uLn0sXG4gICRGbG93Rml4TWVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogJEZsb3dGaXhNZSB8IHt0cmFuc2x1Y2VudDogYm9vbGVhbn0gPSB7XG4gICAgdHJhbnNsdWNlbnQ6IGZhbHNlLFxuICB9O1xuXG4gIF9vbkNoYW5nZVRyYW5zbHVjZW50ID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgdHJhbnNsdWNlbnQ6ICF0aGlzLnN0YXRlLnRyYW5zbHVjZW50LFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxTdGF0dXNCYXIgdHJhbnNsdWNlbnQ9e3RoaXMuc3RhdGUudHJhbnNsdWNlbnR9IC8+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fb25DaGFuZ2VUcmFuc2x1Y2VudH0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIHRyYW5zbHVjZW50OiB7dGhpcy5zdGF0ZS50cmFuc2x1Y2VudCA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFN0YXR1c0JhclN0YXRpY0lPU0V4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBTdGF0dXNCYXIuc2V0SGlkZGVuKHRydWUsICdzbGlkZScpO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PnNldEhpZGRlbih0cnVlLCAnc2xpZGUnKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgIFN0YXR1c0Jhci5zZXRIaWRkZW4oZmFsc2UsICdmYWRlJyk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c2V0SGlkZGVuKGZhbHNlLCAnZmFkZScpPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhclN0eWxlKCdkZWZhdWx0JywgdHJ1ZSk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c2V0QmFyU3R5bGUoJ2RlZmF1bHQnLCB0cnVlKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICAgIDxUZXh0PihkZWZhdWx0IGlzIGRhcmsgZm9yIGlPUywgbGlnaHQgZm9yIEFuZHJvaWQpPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhclN0eWxlKCdsaWdodC1jb250ZW50JywgdHJ1ZSk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c2V0QmFyU3R5bGUoJ2xpZ2h0LWNvbnRlbnQnLCB0cnVlKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgIFN0YXR1c0Jhci5zZXROZXR3b3JrQWN0aXZpdHlJbmRpY2F0b3JWaXNpYmxlKHRydWUpO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PnNldE5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGUodHJ1ZSk8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBTdGF0dXNCYXIuc2V0TmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c2V0TmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZShmYWxzZSk8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFN0YXR1c0JhclN0YXRpY0FuZHJvaWRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEhpZGRlbih0cnVlKTtcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5zZXRIaWRkZW4odHJ1ZSk8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBTdGF0dXNCYXIuc2V0SGlkZGVuKGZhbHNlKTtcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5zZXRIaWRkZW4oZmFsc2UpPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhclN0eWxlKCdsaWdodC1jb250ZW50Jyk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c2V0QmFyU3R5bGUoJ2xpZ2h0LWNvbnRlbnQnKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgIFN0YXR1c0Jhci5zZXRCYXJTdHlsZSgnZGFyay1jb250ZW50Jyk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c2V0QmFyU3R5bGUoJ2RhcmstY29udGVudCcpPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhclN0eWxlKCdkZWZhdWx0Jyk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+c2V0QmFyU3R5bGUoJ2RlZmF1bHQnKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICAgIDxUZXh0PihkZWZhdWx0IGlzIGRhcmsgZm9yIGlPUywgbGlnaHQgZm9yIEFuZHJvaWQpPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhY2tncm91bmRDb2xvcignI2ZmMDBmZicsIHRydWUpO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PnNldEJhY2tncm91bmRDb2xvcignI2ZmMDBmZicsIHRydWUpPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhY2tncm91bmRDb2xvcignIzAwZmYwMCcsIHRydWUpO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PnNldEJhY2tncm91bmRDb2xvcignIzAwZmYwMCcsIHRydWUpPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldFRyYW5zbHVjZW50KHRydWUpO1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhY2tncm91bmRDb2xvcigncmdiYSgwLCAwLCAwLCAwLjQpJywgdHJ1ZSk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIHNldFRyYW5zbHVjZW50KHRydWUpIGFuZCBzZXRCYWNrZ3JvdW5kQ29sb3IoJ3JnYmEoMCwgMCwgMCwgMC40KScsXG4gICAgICAgICAgICAgIHRydWUpXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBTdGF0dXNCYXIuc2V0VHJhbnNsdWNlbnQoZmFsc2UpO1xuICAgICAgICAgICAgU3RhdHVzQmFyLnNldEJhY2tncm91bmRDb2xvcignYmxhY2snLCB0cnVlKTtcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgc2V0VHJhbnNsdWNlbnQoZmFsc2UpIGFuZCBzZXRCYWNrZ3JvdW5kQ29sb3IoJ2JsYWNrJywgdHJ1ZSlcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgTW9kYWxFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59LCAkRmxvd0ZpeE1lU3RhdGU+IHtcbiAgc3RhdGU6ICRGbG93Rml4TWUgfCB7bW9kYWxWaXNpYmxlOiBib29sZWFufSA9IHtcbiAgICBtb2RhbFZpc2libGU6IGZhbHNlLFxuICB9O1xuXG4gIF9vbkNoYW5nZU1vZGFsVmlzaWJsZSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHttb2RhbFZpc2libGU6ICF0aGlzLnN0YXRlLm1vZGFsVmlzaWJsZX0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5fb25DaGFuZ2VNb2RhbFZpc2libGV9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0Pm1vZGFsIHZpc2libGU6IHt0aGlzLnN0YXRlLmhpZGRlbiA/ICd0cnVlJyA6ICdmYWxzZSd9PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxNb2RhbFxuICAgICAgICAgIHZpc2libGU9e3RoaXMuc3RhdGUubW9kYWxWaXNpYmxlfVxuICAgICAgICAgIHRyYW5zcGFyZW50PXt0cnVlfVxuICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXt0aGlzLl9vbkNoYW5nZU1vZGFsVmlzaWJsZX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuY29udGFpbmVyXX0+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5pbm5lckNvbnRhaW5lcl19PlxuICAgICAgICAgICAgICA8VGV4dD5UaGlzIG1vZGFsIHdhcyBwcmVzZW50ZWQhPC9UZXh0PlxuICAgICAgICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgb25QcmVzcz17dGhpcy5fb25DaGFuZ2VNb2RhbFZpc2libGV9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5tb2RhbEJ1dHRvbn0+XG4gICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgICAgICAgPFRleHQ+Q2xvc2U8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvTW9kYWw+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnRzLmZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnRzLnRpdGxlID0gJ1N0YXR1c0Jhcic7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3N0YXR1c2Jhcic7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0NvbXBvbmVudCBmb3IgY29udHJvbGxpbmcgdGhlIHN0YXR1cyBiYXInO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnU3RhdHVzQmFyIGhpZGRlbicsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxTdGF0dXNCYXJIaWRkZW5FeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1N0YXR1c0JhciBzdHlsZScsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxTdGF0dXNCYXJTdHlsZUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhdHVzQmFyIG5ldHdvcmsgYWN0aXZpdHkgaW5kaWNhdG9yJyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFN0YXR1c0Jhck5ldHdvcmtBY3Rpdml0eUV4YW1wbGUgLz47XG4gICAgfSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1N0YXR1c0JhciBiYWNrZ3JvdW5kIGNvbG9yJyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFN0YXR1c0JhckJhY2tncm91bmRDb2xvckV4YW1wbGUgLz47XG4gICAgfSxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTdGF0dXNCYXIgdHJhbnNsdWNlbnQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8U3RhdHVzQmFyVHJhbnNsdWNlbnRFeGFtcGxlIC8+O1xuICAgIH0sXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhdHVzQmFyIHN0YXRpYyBBUEknLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8U3RhdHVzQmFyU3RhdGljSU9TRXhhbXBsZSAvPjtcbiAgICB9LFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhdHVzQmFyIHN0YXRpYyBBUEknLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8U3RhdHVzQmFyU3RhdGljQW5kcm9pZEV4YW1wbGUgLz47XG4gICAgfSxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTdGF0dXNCYXIgZGltZW5zaW9ucycsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+SGVpZ2h0IChBbmRyb2lkIG9ubHkpOiB7U3RhdHVzQmFyLmN1cnJlbnRIZWlnaHR9IHB0czwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gIH0sXG5dO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6IDIwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmNWZjZmYnLFxuICB9LFxuICBpbm5lckNvbnRhaW5lcjoge1xuICAgIGJvcmRlclJhZGl1czogMTAsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIHdyYXBwZXI6IHtcbiAgICBib3JkZXJSYWRpdXM6IDUsXG4gICAgbWFyZ2luQm90dG9tOiA1LFxuICB9LFxuICBidXR0b246IHtcbiAgICBib3JkZXJSYWRpdXM6IDUsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZWVlZScsXG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG4gIG1vZGFsQnV0dG9uOiB7XG4gICAgbWFyZ2luVG9wOiAxMCxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSZW5kZXJJdGVtUHJvcHN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvTGlzdHMvVmlydHVhbGl6ZWRMaXN0JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgQW5pbWF0ZWQsXG4gIEZsYXRMaXN0LFxuICBQYW5SZXNwb25kZXIsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG4gIHVzZVdpbmRvd0RpbWVuc2lvbnMsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkaXNwbGF5TmFtZTogJ1N3aXBlYWJsZUNhcmRFeGFtcGxlJyxcbiAgZnJhbWV3b3JrOiAnUmVhY3QnLFxuICB0aXRsZTogJ1N3aXBlYWJsZUNhcmQnLFxuICBjYXRlZ29yeTogJ0Jhc2ljJyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ0V4YW1wbGUgb2YgYSBzd2lwZWFibGUgY2FyZCB3aXRoIHNjcm9sbGFibGUgY29udGVudCB0byB0ZXN0IFBhblJlc3BvbmRlciBhbmQgSlNSZXNwb25kZXJIYW5kbGVyIGludGVyYWN0aW9uLicsXG4gIGV4YW1wbGVzOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdTd2lwZWFibGVDYXJkRXhhbXBsZScsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgKCdUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIHN3aXBlYWJsZSBjYXJkIHVzaW5nIFBhblJlc3BvbmRlci4gJyArXG4gICAgICAgICAgJ1VuZGVyIHRoZSBob29kLCBKU1Jlc3BvbmRlckhhbmRsZXIgc2hvdWxkIHByZXZlbnQgc2Nyb2xsIHdoZW4gdGhlIGNhcmQgaXMgYmVpbmcgc3dpcGVkLic6IHN0cmluZyksXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIDxTd2lwZWFibGVDYXJkRXhhbXBsZSAvPjtcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbn07XG5cbmZ1bmN0aW9uIFN3aXBlYWJsZUNhcmRFeGFtcGxlKCkge1xuICBjb25zdCBjYXJkQ29sb3JzID0gWydyZWQnLCAnYmx1ZScsICdwaW5rJywgJ2FxdWFtYXJpbmUnXTtcbiAgY29uc3QgW2N1cnJlbnRJbmRleCwgc2V0Q3VycmVudEluZGV4XSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG5cbiAgY29uc3QgaXNGaXJzdENhcmRPblRvcCA9IGN1cnJlbnRJbmRleCAlIDIgIT09IDA7XG5cbiAgY29uc3QgaW5jcmVtZW50Q3VycmVudCA9ICgpID0+IHNldEN1cnJlbnRJbmRleChjdXJyZW50SW5kZXggKyAxKTtcblxuICBjb25zdCBnZXRDYXJkQ29sb3IgPSAoaW5kZXg6IG51bWJlcikgPT4gY2FyZENvbG9yc1tpbmRleCAlIGNhcmRDb2xvcnMubGVuZ3RoXTtcblxuICAvKlxuICAgKiBUaGUgY2FyZHMgdHJ5IHRvIHJldXNlIHRoZSB2aWV3cy4gSW5zdGVhZCBvZiBhbHdheXMgcmVidWlsZGluZyB0aGUgY3VycmVudCBjYXJkIG9uIHRvcFxuICAgKiB0aGUgb3JkZXIgaXMgY29uZmlndXJlZCBieSB6SW5kZXguIFRoaXMgd2F5LCB0aGUgbmF0aXZlIHNpZGUgcmV1c2VzIHRoZSBzYW1lIHZpZXdzIGZvciBib3R0b21cbiAgICogYW5kIHRvcCBhZnRlciBzd2lwaW5nIG91dC5cbiAgICovXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTd2lwZWFibGVDYXJkXG4gICAgICAgIHpJbmRleD17aXNGaXJzdENhcmRPblRvcCA/IDIgOiAxfVxuICAgICAgICBjb2xvcj17XG4gICAgICAgICAgaXNGaXJzdENhcmRPblRvcFxuICAgICAgICAgICAgPyBnZXRDYXJkQ29sb3IoY3VycmVudEluZGV4KVxuICAgICAgICAgICAgOiBnZXRDYXJkQ29sb3IobmV4dEluZGV4KVxuICAgICAgICB9XG4gICAgICAgIG9uU3dpcGVkT3V0PXtpbmNyZW1lbnRDdXJyZW50fVxuICAgICAgLz5cbiAgICAgIDxTd2lwZWFibGVDYXJkXG4gICAgICAgIHpJbmRleD17aXNGaXJzdENhcmRPblRvcCA/IDEgOiAyfVxuICAgICAgICBjb2xvcj17XG4gICAgICAgICAgaXNGaXJzdENhcmRPblRvcFxuICAgICAgICAgICAgPyBnZXRDYXJkQ29sb3IobmV4dEluZGV4KVxuICAgICAgICAgICAgOiBnZXRDYXJkQ29sb3IoY3VycmVudEluZGV4KVxuICAgICAgICB9XG4gICAgICAgIG9uU3dpcGVkT3V0PXtpbmNyZW1lbnRDdXJyZW50fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU3dpcGVhYmxlQ2FyZChwcm9wczoge1xuICB6SW5kZXg6IG51bWJlcixcbiAgY29sb3I6IHN0cmluZyxcbiAgb25Td2lwZWRPdXQ6ICgpID0+IHZvaWQsXG59KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgY29uc3QgbW92ZW1lbnRYID0gUmVhY3QudXNlTWVtbygoKSA9PiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksIFtwcm9wcy5jb2xvcl0pO1xuXG4gIGNvbnN0IHBhblJlc3BvbmRlciA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIFBhblJlc3BvbmRlci5jcmVhdGUoe1xuICAgICAgICBvbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXJDYXB0dXJlOiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7XG4gICAgICAgICAgY29uc3Qge2R4fSA9IGdlc3R1cmVTdGF0ZTtcbiAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoZHgpID4gNTtcbiAgICAgICAgfSxcbiAgICAgICAgb25QYW5SZXNwb25kZXJNb3ZlOiBBbmltYXRlZC5ldmVudChbbnVsbCwge2R4OiBtb3ZlbWVudFh9XSwge1xuICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgIH0pLFxuICAgICAgICBvblBhblJlc3BvbmRlckVuZDogKGUsIGdlc3R1cmVTdGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtkeH0gPSBnZXN0dXJlU3RhdGU7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGR4KSA+IDEyMCkge1xuICAgICAgICAgICAgQW5pbWF0ZWQudGltaW5nKG1vdmVtZW50WCwge1xuICAgICAgICAgICAgICB0b1ZhbHVlOiBkeCA+IDAgPyAxMDAwIDogLTEwMDAsXG4gICAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogdHJ1ZSxcbiAgICAgICAgICAgIH0pLnN0YXJ0KHByb3BzLm9uU3dpcGVkT3V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQW5pbWF0ZWQudGltaW5nKG1vdmVtZW50WCwge1xuICAgICAgICAgICAgICB0b1ZhbHVlOiAwLFxuICAgICAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWUsXG4gICAgICAgICAgICB9KS5zdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIFttb3ZlbWVudFgsIHByb3BzLm9uU3dpcGVkT3V0XSxcbiAgKTtcblxuICBjb25zdCB7d2lkdGh9ID0gdXNlV2luZG93RGltZW5zaW9ucygpO1xuICBjb25zdCByb3RhdGlvbiA9IG1vdmVtZW50WC5pbnRlcnBvbGF0ZSh7XG4gICAgaW5wdXRSYW5nZTogWy13aWR0aCAvIDIsIDAsIHdpZHRoIC8gMl0sXG4gICAgb3V0cHV0UmFuZ2U6IFsnLTVkZWcnLCAnMGRlZycsICc1ZGVnJ10sXG4gICAgZXh0cmFwb2xhdGU6ICdjbGFtcCcsXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMuY29udGFpbmVyLCB7ekluZGV4OiBwcm9wcy56SW5kZXh9KX0+XG4gICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICB7Li4ucGFuUmVzcG9uZGVyLnBhbkhhbmRsZXJzfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHRyYW5zZm9ybTogW3t0cmFuc2xhdGVYOiBtb3ZlbWVudFh9LCB7cm90YXRlWjogcm90YXRpb259XSxcbiAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICB9fT5cbiAgICAgICAgPENhcmQgY29sb3I9e3Byb3BzLmNvbG9yfSAvPlxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3QgY2FyZERhdGEgPSBBcnJheSg1KTtcblxuZnVuY3Rpb24gQ2FyZChwcm9wczoge2NvbG9yOiBzdHJpbmd9KSB7XG4gIGNvbnN0IHJlbmRlckl0ZW0gPSAoe2l0ZW0sIGluZGV4fTogUmVuZGVySXRlbVByb3BzPCRGbG93Rml4TWU+KSA9PiAoXG4gICAgPENhcmRTZWN0aW9uIGNvbG9yPXtwcm9wcy5jb2xvcn0gaW5kZXg9e2luZGV4fSAvPlxuICApO1xuXG4gIGNvbnN0IHNlcGFyYXRvckNvbXBvbmVudCA9ICgpID0+IDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VwYXJhdG9yfSAvPjtcblxuICBjb25zdCBsaXN0UmVmID0gUmVhY3QudXNlUmVmPD9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBGbGF0TGlzdD4+KCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBsaXN0UmVmLmN1cnJlbnQ/LnNjcm9sbFRvT2Zmc2V0KHtvZmZzZXQ6IDAsIGFuaW1hdGVkOiBmYWxzZX0pO1xuICB9LCBbcHJvcHMuY29sb3JdKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY2FyZH0+XG4gICAgICA8RmxhdExpc3RcbiAgICAgICAgc3R5bGU9e3tmbGV4OiAxfX1cbiAgICAgICAgZGF0YT17Y2FyZERhdGF9XG4gICAgICAgIHJlbmRlckl0ZW09e3JlbmRlckl0ZW19XG4gICAgICAgIEl0ZW1TZXBhcmF0b3JDb21wb25lbnQ9e3NlcGFyYXRvckNvbXBvbmVudH1cbiAgICAgICAgcmVmPXtsaXN0UmVmfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENhcmRTZWN0aW9uKHByb3BzOiB7aW5kZXg6IG51bWJlciwgY29sb3I6IHN0cmluZ30pIHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1xuICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMuc2VjdGlvbkJnLCB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJvcHMuY29sb3IsXG4gICAgICB9KX0+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnNlY3Rpb25UZXh0fT5TZWN0aW9uICN7cHJvcHMuaW5kZXh9PC9UZXh0PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6IDEwLFxuICAgIHBhZGRpbmdUb3A6IDMwLFxuICB9LFxuICBjYXJkOiB7XG4gICAgZmxleDogMSxcbiAgICBtYXJnaW46IDUsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnbGlnaHRncmF5JyxcbiAgfSxcbiAgc2VwYXJhdG9yOiB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6IDIsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICB9LFxuICBzZWN0aW9uQmc6IHtcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIHNlY3Rpb25UZXh0OiB7XG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtQbGF0Zm9ybSwgU3dpdGNoLCBUZXh0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG50eXBlIE9uT2ZmSW5kaWNhdG9yUHJvcHMgPSAkUmVhZE9ubHk8e3xvbjogYm9vbGVhbiwgdGVzdElEOiBzdHJpbmd8fT47XG5mdW5jdGlvbiBPbk9mZkluZGljYXRvcih7b24sIHRlc3RJRH06IE9uT2ZmSW5kaWNhdG9yUHJvcHMpIHtcbiAgcmV0dXJuIDxUZXh0IHRlc3RJRD17dGVzdElEfT57b24gPyAnT24nIDogJ09mZid9PC9UZXh0Pjtcbn1cblxudHlwZSBFeGFtcGxlUm93UHJvcHMgPSAkUmVhZE9ubHk8e3xjaGlsZHJlbjogUmVhY3QuTm9kZXx9PjtcbmZ1bmN0aW9uIEV4YW1wbGVSb3coe2NoaWxkcmVufTogRXhhbXBsZVJvd1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAxMCxcbiAgICAgIH19PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxudHlwZSBTaW1wbGVTd2l0Y2hFeGFtcGxlU3RhdGUgPSAkUmVhZE9ubHk8e3xcbiAgdHJ1ZVN3aXRjaElzT246IGJvb2xlYW4sXG4gIGZhbHNlU3dpdGNoSXNPbjogYm9vbGVhbixcbnx9PjtcblxuY2xhc3MgQmFzaWNTd2l0Y2hFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICB7fHx9LFxuICBTaW1wbGVTd2l0Y2hFeGFtcGxlU3RhdGUsXG4+IHtcbiAgc3RhdGU6IFNpbXBsZVN3aXRjaEV4YW1wbGVTdGF0ZSA9IHtcbiAgICB0cnVlU3dpdGNoSXNPbjogdHJ1ZSxcbiAgICBmYWxzZVN3aXRjaElzT246IGZhbHNlLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxFeGFtcGxlUm93PlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIHRlc3RJRD1cIm9uLW9mZi1pbml0aWFsLW9mZlwiXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2YWx1ZSA9PiB0aGlzLnNldFN0YXRlKHtmYWxzZVN3aXRjaElzT246IHZhbHVlfSl9XG4gICAgICAgICAgICB0cmFja0NvbG9yPXt7XG4gICAgICAgICAgICAgIHRydWU6ICd5ZWxsb3cnLFxuICAgICAgICAgICAgICBmYWxzZTogJ3B1cnBsZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZmFsc2VTd2l0Y2hJc09ufVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPE9uT2ZmSW5kaWNhdG9yXG4gICAgICAgICAgICBvbj17dGhpcy5zdGF0ZS5mYWxzZVN3aXRjaElzT259XG4gICAgICAgICAgICB0ZXN0SUQ9XCJvbi1vZmYtaW5pdGlhbC1vZmYtaW5kaWNhdG9yXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0V4YW1wbGVSb3c+XG4gICAgICAgIDxFeGFtcGxlUm93PlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIHRlc3RJRD1cIm9uLW9mZi1pbml0aWFsLW9uXCJcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3ZhbHVlID0+IHRoaXMuc2V0U3RhdGUoe3RydWVTd2l0Y2hJc09uOiB2YWx1ZX0pfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudHJ1ZVN3aXRjaElzT259XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8T25PZmZJbmRpY2F0b3JcbiAgICAgICAgICAgIG9uPXt0aGlzLnN0YXRlLnRydWVTd2l0Y2hJc09ufVxuICAgICAgICAgICAgdGVzdElEPVwib24tb2ZmLWluaXRpYWwtb24taW5kaWNhdG9yXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0V4YW1wbGVSb3c+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBEaXNhYmxlZFN3aXRjaEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHt8fH0sXG4gIFNpbXBsZVN3aXRjaEV4YW1wbGVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogU2ltcGxlU3dpdGNoRXhhbXBsZVN0YXRlID0ge1xuICAgIHRydWVTd2l0Y2hJc09uOiB0cnVlLFxuICAgIGZhbHNlU3dpdGNoSXNPbjogZmFsc2UsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPEV4YW1wbGVSb3c+XG4gICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgdGVzdElEPVwiZGlzYWJsZWQtaW5pdGlhbC1vZmZcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2YWx1ZSA9PiB0aGlzLnNldFN0YXRlKHtmYWxzZVN3aXRjaElzT246IHZhbHVlfSl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5mYWxzZVN3aXRjaElzT259XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxPbk9mZkluZGljYXRvclxuICAgICAgICAgICAgb249e3RoaXMuc3RhdGUuZmFsc2VTd2l0Y2hJc09ufVxuICAgICAgICAgICAgdGVzdElEPVwiZGlzYWJsZWQtaW5pdGlhbC1vZmYtaW5kaWNhdG9yXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0V4YW1wbGVSb3c+XG5cbiAgICAgICAgPEV4YW1wbGVSb3c+XG4gICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgdGVzdElEPVwiZGlzYWJsZWQtaW5pdGlhbC1vblwiXG4gICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3ZhbHVlID0+IHRoaXMuc2V0U3RhdGUoe3RydWVTd2l0Y2hJc09uOiB2YWx1ZX0pfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudHJ1ZVN3aXRjaElzT259XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxPbk9mZkluZGljYXRvclxuICAgICAgICAgICAgb249e3RoaXMuc3RhdGUudHJ1ZVN3aXRjaElzT259XG4gICAgICAgICAgICB0ZXN0SUQ9XCJkaXNhYmxlZC1pbml0aWFsLW9uLWluZGljYXRvclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9FeGFtcGxlUm93PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQ29sb3JTd2l0Y2hFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59LCAkRmxvd0ZpeE1lU3RhdGU+IHtcbiAgc3RhdGU6IGFueSB8IHtjb2xvckZhbHNlU3dpdGNoSXNPbjogYm9vbGVhbiwgY29sb3JUcnVlU3dpdGNoSXNPbjogYm9vbGVhbn0gPSB7XG4gICAgY29sb3JUcnVlU3dpdGNoSXNPbjogdHJ1ZSxcbiAgICBjb2xvckZhbHNlU3dpdGNoSXNPbjogZmFsc2UsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFN3aXRjaFxuICAgICAgICAgIHRlc3RJRD1cImluaXRpYWwtZmFsc2Utc3dpdGNoXCJcbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2YWx1ZSA9PiB0aGlzLnNldFN0YXRlKHtjb2xvckZhbHNlU3dpdGNoSXNPbjogdmFsdWV9KX1cbiAgICAgICAgICBzdHlsZT17e21hcmdpbkJvdHRvbTogMTB9fVxuICAgICAgICAgIHRodW1iQ29sb3I9XCIjMDAwMGZmXCJcbiAgICAgICAgICB0cmFja0NvbG9yPXt7XG4gICAgICAgICAgICBmYWxzZTogJyNmZjAwMDAnLFxuICAgICAgICAgICAgdHJ1ZTogJyMwMGZmMDAnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuY29sb3JGYWxzZVN3aXRjaElzT259XG4gICAgICAgIC8+XG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICB0ZXN0SUQ9XCJpbml0aWFsLXRydWUtc3dpdGNoXCJcbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2YWx1ZSA9PiB0aGlzLnNldFN0YXRlKHtjb2xvclRydWVTd2l0Y2hJc09uOiB2YWx1ZX0pfVxuICAgICAgICAgIHRodW1iQ29sb3I9XCIjMDAwMGZmXCJcbiAgICAgICAgICB0cmFja0NvbG9yPXt7XG4gICAgICAgICAgICBmYWxzZTogJyNmZjAwMDAnLFxuICAgICAgICAgICAgdHJ1ZTogJyMwMGZmMDAnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuY29sb3JUcnVlU3dpdGNoSXNPbn1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEV2ZW50U3dpdGNoRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7ZXZlbnRTd2l0Y2hJc09uOiBib29sZWFuLCBldmVudFN3aXRjaFJlZ3Jlc3Npb25Jc09uOiBib29sZWFufSA9XG4gICAge1xuICAgICAgZXZlbnRTd2l0Y2hJc09uOiBmYWxzZSxcbiAgICAgIGV2ZW50U3dpdGNoUmVncmVzc2lvbklzT246IHRydWUsXG4gICAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJ319PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICB0ZXN0SUQ9XCJldmVudC1zd2l0Y2gtdG9wXCJcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3ZhbHVlID0+IHRoaXMuc2V0U3RhdGUoe2V2ZW50U3dpdGNoSXNPbjogdmFsdWV9KX1cbiAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAxMH19XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5ldmVudFN3aXRjaElzT259XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICB0ZXN0SUQ9XCJldmVudC1zd2l0Y2gtYm90dG9tXCJcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3ZhbHVlID0+IHRoaXMuc2V0U3RhdGUoe2V2ZW50U3dpdGNoSXNPbjogdmFsdWV9KX1cbiAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAxMH19XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5ldmVudFN3aXRjaElzT259XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJldmVudC1zd2l0Y2gtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5ldmVudFN3aXRjaElzT24gPyAnT24nIDogJ09mZid9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIHRlc3RJRD1cImV2ZW50LXN3aXRjaC1yZWdyZXNzaW9uLXRvcFwiXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2YWx1ZSA9PlxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtldmVudFN3aXRjaFJlZ3Jlc3Npb25Jc09uOiB2YWx1ZX0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZT17e21hcmdpbkJvdHRvbTogMTB9fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZXZlbnRTd2l0Y2hSZWdyZXNzaW9uSXNPbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIHRlc3RJRD1cImV2ZW50LXN3aXRjaC1yZWdyZXNzaW9uLWJvdHRvbVwiXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2YWx1ZSA9PlxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtldmVudFN3aXRjaFJlZ3Jlc3Npb25Jc09uOiB2YWx1ZX0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZT17e21hcmdpbkJvdHRvbTogMTB9fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZXZlbnRTd2l0Y2hSZWdyZXNzaW9uSXNPbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0IHRlc3RJRD1cImV2ZW50LXN3aXRjaC1yZWdyZXNzaW9uLWluZGljYXRvclwiPlxuICAgICAgICAgICAge3RoaXMuc3RhdGUuZXZlbnRTd2l0Y2hSZWdyZXNzaW9uSXNPbiA/ICdPbicgOiAnT2ZmJ31cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIElPU0JhY2tncm91bmRDb2xFeCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7aW9zQmFja2dyb3VuZENvbG9yOiBzdHJpbmd9ID0ge1xuICAgIGlvc0JhY2tncm91bmRDb2xvcjogJyNmZmE1MDAnLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgIGlvc19iYWNrZ3JvdW5kQ29sb3I9e3RoaXMuc3RhdGUuaW9zQmFja2dyb3VuZENvbG9yfVxuICAgICAgICAgIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAyMH19XG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGNhbiBiZSBzZWVuIGVpdGhlciB3aGVuIHRoZSBzd2l0Y2ggdmFsdWUgaXMgZmFsc2VcbiAgICAgICAgICBvciB3aGVuIHRoZSBzd2l0Y2ggaXMgZGlzYWJsZWQgKGFuZCB0aGUgc3dpdGNoIGlzIHRyYW5zbHVjZW50KS57JyAnfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBPbkNoYW5nZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0sICRGbG93Rml4TWVTdGF0ZT4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgb25DaGFuZ2U9eygpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hbGVydFxuICAgICAgICAgICAgYWxlcnQoJ09uQ2hhbmdlIENhbGxlZCcpO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBDb250YWluZXJCYWNrZ3JvdW5kQ29sb3JTdHlsZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHsuLi59LFxuICAkRmxvd0ZpeE1lU3RhdGUsXG4+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFN3aXRjaFxuICAgICAgICAgIHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnYmx1ZSd9fVxuICAgICAgICAgIHRodW1iQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgICAgdmFsdWU9e3RydWV9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnRzLnRpdGxlID0gJ1N3aXRjaCc7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9zd2l0Y2gnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdVSSc7XG5leHBvcnRzLmRpc3BsYXlOYW1lID0gJ1N3aXRjaEV4YW1wbGUnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdOYXRpdmUgYm9vbGVhbiBpbnB1dCc7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdTd2l0Y2hlcyBjYW4gYmUgc2V0IHRvIHRydWUgb3IgZmFsc2UnLFxuICAgIG5hbWU6ICdiYXNpYycsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEJhc2ljU3dpdGNoRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTd2l0Y2hlcyBjYW4gYmUgZGlzYWJsZWQnLFxuICAgIG5hbWU6ICdkaXNhYmxlZCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPERpc2FibGVkU3dpdGNoRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDaGFuZ2UgZXZlbnRzIGNhbiBiZSBkZXRlY3RlZCcsXG4gICAgbmFtZTogJ2V2ZW50cycsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEV2ZW50U3dpdGNoRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTd2l0Y2hlcyBhcmUgY29udHJvbGxlZCBjb21wb25lbnRzJyxcbiAgICBuYW1lOiAnY29udHJvbGxlZCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFN3aXRjaCB0ZXN0SUQ9XCJjb250cm9sbGVkLXN3aXRjaFwiIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0N1c3RvbSBjb2xvcnMgY2FuIGJlIHByb3ZpZGVkJyxcbiAgICBuYW1lOiAnY3VzdG9tLWNvbG9ycycsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPENvbG9yU3dpdGNoRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdPbkNoYW5nZSByZWNlaXZlcyB0aGUgY2hhbmdlIGV2ZW50IGFzIGFuIGFyZ3VtZW50JyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8T25DaGFuZ2VFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogXCJUaGUgY29udGFpbmVyJ3MgYmFja2dyb3VuZCBjb2xvciBjYW4gYmUgc2V0XCIsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPENvbnRhaW5lckJhY2tncm91bmRDb2xvclN0eWxlRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcblxuaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICBleHBvcnRzLmV4YW1wbGVzLnB1c2goe1xuICAgIHRpdGxlOiAnW2lPUyBPbmx5XSBDdXN0b20gYmFja2dyb3VuZCBjb2xvcnMgY2FuIGJlIHNldCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPElPU0JhY2tncm91bmRDb2xFeCAvPjtcbiAgICB9LFxuICB9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0IFRleHRMZWdlbmQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9UZXh0TGVnZW5kJztcblxuY29uc3QgVGV4dElubGluZVZpZXcgPSByZXF1aXJlKCcuLi8uLi9jb21wb25lbnRzL1RleHRJbmxpbmVWaWV3Jyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgTGF5b3V0QW5pbWF0aW9uLFxuICBQbGF0Zm9ybSxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBWaWV3LFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuY29uc3QgVGV4dEFuY2VzdG9yID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UZXh0L1RleHRBbmNlc3RvcicpO1xuXG4vLyBUT0RPOiBJcyB0aGVyZSBhIGNsZWFuZXIgd2F5IHRvIGZsaXAgdGhlIFRleHRBbmNlc3RvciB2YWx1ZSB0byBmYWxzZT8gSVxuLy8gICBzdXNwZWN0IGFwcHMgd29uJ3QgZXZlbiBiZSBhYmxlIHRvIGxldmVyYWdlIHRoaXMgd29ya2Fyb3VuZCBiZWNhdXNlXG4vLyAgIFRleHRBbmNlc3RvciBpcyBub3QgcHVibGljLlxuLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5IEZsb3cnc1xuICogTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbmZ1bmN0aW9uIElubGluZVZpZXcocHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dEFuY2VzdG9yLlByb3ZpZGVyIHZhbHVlPXtmYWxzZX0+XG4gICAgICA8VmlldyB7Li4ucHJvcHN9IC8+XG4gICAgPC9UZXh0QW5jZXN0b3IuUHJvdmlkZXI+XG4gICk7XG59XG5cbnR5cGUgVGV4dEFsaWduRXhhbXBsZVJUTFN0YXRlID0ge3xcbiAgaXNSVEw6IGJvb2xlYW4sXG58fTtcblxuY2xhc3MgVGV4dEFsaWduUlRMRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAge30sXG4gIFRleHRBbGlnbkV4YW1wbGVSVExTdGF0ZSxcbj4ge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBBcnJheTxhbnk+KSB7XG4gICAgc3VwZXIoLi4uYXJncyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNSVEw6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qge2lzUlRMfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgdG9nZ2xlUlRMID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7aXNSVEw6ICFpc1JUTH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17e2RpcmVjdGlvbjogaXNSVEwgPyAncnRsJyA6ICdsdHInfX0+XG4gICAgICAgIDxUZXh0PmF1dG8gKGRlZmF1bHQpIC0gZW5nbGlzaCBMVFI8L1RleHQ+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHsnXFx1MDYyM1xcdTA2MkRcXHUwNjI4IFxcdTA2MjdcXHUwNjQ0XFx1MDY0NFxcdTA2M0FcXHUwNjI5ICcgK1xuICAgICAgICAgICAgJ1xcdTA2MjdcXHUwNjQ0XFx1MDYzOVxcdTA2MzFcXHUwNjI4XFx1MDY0QVxcdTA2MjkgYXV0byAoZGVmYXVsdCkgLSBhcmFiaWMgUlRMJ31cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dCBzdHlsZT17e3RleHRBbGlnbjogJ2xlZnQnfX0+XG4gICAgICAgICAgbGVmdCBsZWZ0IGxlZnQgbGVmdCBsZWZ0IGxlZnQgbGVmdCBsZWZ0IGxlZnQgbGVmdCBsZWZ0IGxlZnQgbGVmdCBsZWZ0XG4gICAgICAgICAgbGVmdFxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dEFsaWduOiAnY2VudGVyJ319PlxuICAgICAgICAgIGNlbnRlciBjZW50ZXIgY2VudGVyIGNlbnRlciBjZW50ZXIgY2VudGVyIGNlbnRlciBjZW50ZXIgY2VudGVyIGNlbnRlclxuICAgICAgICAgIGNlbnRlclxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dEFsaWduOiAncmlnaHQnfX0+XG4gICAgICAgICAgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHRcbiAgICAgICAgICByaWdodCByaWdodFxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dEFsaWduOiAnanVzdGlmeSd9fT5cbiAgICAgICAgICBqdXN0aWZ5OiB0aGlzIHRleHQgY29tcG9uZW50e1wiJ1wifXMgY29udGVudHMgYXJlIGxhaWQgb3V0IHdpdGhcbiAgICAgICAgICBcInRleHRBbGlnbjoganVzdGlmeVwiIGFuZCBhcyB5b3UgY2FuIHNlZSBhbGwgb2YgdGhlIGxpbmVzIGV4Y2VwdCB0aGVcbiAgICAgICAgICBsYXN0IG9uZSBzcGFuIHRoZSBhdmFpbGFibGUgd2lkdGggb2YgdGhlIHBhcmVudCBjb250YWluZXIuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9e3RvZ2dsZVJUTH1cbiAgICAgICAgICB0aXRsZT17YFN3aXRjaCB0byAke2lzUlRMID8gJ0xUUicgOiAnUlRMJ31gfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgRW50aXR5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJzUwMCcsIGNvbG9yOiAnIzUyN2ZlNCd9fT5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1RleHQ+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBBdHRyaWJ1dGVUb2dnbGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59LCAkRmxvd0ZpeE1lU3RhdGU+IHtcbiAgc3RhdGU6IGFueSB8IHtmb250U2l6ZTogbnVtYmVyLCBmb250V2VpZ2h0OiBzdHJpbmd9ID0ge1xuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBmb250U2l6ZTogMTUsXG4gIH07XG5cbiAgdG9nZ2xlV2VpZ2h0ID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZm9udFdlaWdodDogdGhpcy5zdGF0ZS5mb250V2VpZ2h0ID09PSAnYm9sZCcgPyAnbm9ybWFsJyA6ICdib2xkJyxcbiAgICB9KTtcbiAgfTtcblxuICBpbmNyZWFzZVNpemUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBmb250U2l6ZTogdGhpcy5zdGF0ZS5mb250U2l6ZSArIDEsXG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGN1clN0eWxlID0ge1xuICAgICAgZm9udFdlaWdodDogdGhpcy5zdGF0ZS5mb250V2VpZ2h0LFxuICAgICAgZm9udFNpemU6IHRoaXMuc3RhdGUuZm9udFNpemUsXG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIHsvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSAqL31cbiAgICAgICAgPFRleHQgc3R5bGU9e2N1clN0eWxlfT5cbiAgICAgICAgICBUYXAgdGhlIGNvbnRyb2xzIGJlbG93IHRvIGNoYW5nZSBhdHRyaWJ1dGVzLlxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgU2VlIGhvdyBpdCB3aWxsIGV2ZW4gd29yayBvbiB7LyogJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gKi99XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17Y3VyU3R5bGV9PnRoaXMgbmVzdGVkIHRleHQ8L1RleHQ+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICcjZmZhYWFhJywgbWFyZ2luVG9wOiA1fX1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnRvZ2dsZVdlaWdodH0+XG4gICAgICAgICAgVG9nZ2xlIFdlaWdodFxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICcjYWFhYWZmJywgbWFyZ2luVG9wOiA1fX1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLmluY3JlYXNlU2l6ZX0+XG4gICAgICAgICAgSW5jcmVhc2UgU2l6ZVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG50eXBlIEFkanVzdGluZ0ZvbnRTaXplUHJvcHMgPSAkUmVhZE9ubHk8e3x8fT47XG5cbnR5cGUgQWRqdXN0aW5nRm9udFNpemVTdGF0ZSA9IHt8XG4gIGR5bmFtaWNUZXh0OiBzdHJpbmcsXG4gIHNob3VsZFJlbmRlcjogYm9vbGVhbixcbnx9O1xuXG5jbGFzcyBBZGp1c3RpbmdGb250U2l6ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgQWRqdXN0aW5nRm9udFNpemVQcm9wcyxcbiAgQWRqdXN0aW5nRm9udFNpemVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogQWRqdXN0aW5nRm9udFNpemVTdGF0ZSA9IHtcbiAgICBkeW5hbWljVGV4dDogJycsXG4gICAgc2hvdWxkUmVuZGVyOiB0cnVlLFxuICB9O1xuXG4gIHJlc2V0ID0gKCkgPT4ge1xuICAgIExheW91dEFuaW1hdGlvbi5lYXNlSW5FYXNlT3V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzaG91bGRSZW5kZXI6IGZhbHNlLFxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgTGF5b3V0QW5pbWF0aW9uLmVhc2VJbkVhc2VPdXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkeW5hbWljVGV4dDogJycsXG4gICAgICAgIHNob3VsZFJlbmRlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sIDMwMCk7XG4gIH07XG5cbiAgYWRkVGV4dCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGR5bmFtaWNUZXh0OlxuICAgICAgICB0aGlzLnN0YXRlLmR5bmFtaWNUZXh0ICtcbiAgICAgICAgKE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMCkgJSAyKSA/ICcgZm9vJyA6ICcgYmFyJyksXG4gICAgfSk7XG4gIH07XG5cbiAgcmVtb3ZlVGV4dCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGR5bmFtaWNUZXh0OiB0aGlzLnN0YXRlLmR5bmFtaWNUZXh0LnNsaWNlKFxuICAgICAgICAwLFxuICAgICAgICB0aGlzLnN0YXRlLmR5bmFtaWNUZXh0Lmxlbmd0aCAtIDQsXG4gICAgICApLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuc2hvdWxkUmVuZGVyKSB7XG4gICAgICByZXR1cm4gPFZpZXcgLz47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHRcbiAgICAgICAgICBlbGxpcHNpemVNb2RlPVwidGFpbFwiXG4gICAgICAgICAgbnVtYmVyT2ZMaW5lcz17MX1cbiAgICAgICAgICBzdHlsZT17e2ZvbnRTaXplOiAzNiwgbWFyZ2luVmVydGljYWw6IDZ9fT5cbiAgICAgICAgICBUcnVuY2F0ZWQgdGV4dCBpcyBiYWFhYWFkLlxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgbnVtYmVyT2ZMaW5lcz17MX1cbiAgICAgICAgICBhZGp1c3RzRm9udFNpemVUb0ZpdD17dHJ1ZX1cbiAgICAgICAgICBzdHlsZT17e2ZvbnRTaXplOiA0MCwgbWFyZ2luVmVydGljYWw6IDZ9fT5cbiAgICAgICAgICBTaHJpbmtpbmcgdG8gZml0IGF2YWlsYWJsZSBzcGFjZSBpcyBtdWNoIGJldHRlciFcbiAgICAgICAgPC9UZXh0PlxuXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgYWRqdXN0c0ZvbnRTaXplVG9GaXQ9e3RydWV9XG4gICAgICAgICAgbnVtYmVyT2ZMaW5lcz17MX1cbiAgICAgICAgICBzdHlsZT17e2ZvbnRTaXplOiAzMCwgbWFyZ2luVmVydGljYWw6IDZ9fT5cbiAgICAgICAgICB7J0FkZCB0ZXh0IHRvIG1lIHRvIHdhdGNoIG1lIHNocmluayEnICsgJyAnICsgdGhpcy5zdGF0ZS5keW5hbWljVGV4dH1cbiAgICAgICAgPC9UZXh0PlxuXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgYWRqdXN0c0ZvbnRTaXplVG9GaXQ9e3RydWV9XG4gICAgICAgICAgbnVtYmVyT2ZMaW5lcz17NH1cbiAgICAgICAgICBzdHlsZT17e2ZvbnRTaXplOiAyMCwgbWFyZ2luVmVydGljYWw6IDZ9fT5cbiAgICAgICAgICB7J011bHRpbGluZSB0ZXh0IGNvbXBvbmVudCBzaHJpbmtpbmcgaXMgc3VwcG9ydGVkLCB3YXRjaCBhcyB0aGlzIHJlZWVlYWFhYWxseSBsb29vb29vbmcgdGVlZWVlZWV4dCBncm9vb29vd3MgYW5kIHRoZW4gc2hyaWlpaW5rcyBhcyB5b3UgYWRkIHRleHQgdG8gbWUhIGlvYWhzZGlhIHNvYWR5IGF1eWRvYSBhb2lzeWQgYW9zZHkgJyArXG4gICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5keW5hbWljVGV4dH1cbiAgICAgICAgPC9UZXh0PlxuXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgYWRqdXN0c0ZvbnRTaXplVG9GaXQ9e3RydWV9XG4gICAgICAgICAgc3R5bGU9e3tmb250U2l6ZTogMjAsIG1hcmdpblZlcnRpY2FsOiA2LCBtYXhIZWlnaHQ6IDUwfX0+XG4gICAgICAgICAgeydUZXh0IGxpbWl0ZWQgYnkgaGVpZ2h0LCB3YXRjaCBhcyB0aGlzIHJlZWVlYWFhYWxseSBsb29vb29vbmcgdGVlZWVlZWV4dCBncm9vb29vd3MgYW5kIHRoZW4gc2hyaWlpaW5rcyBhcyB5b3UgYWRkIHRleHQgdG8gbWUhIGlvYWhzZGlhIHNvYWR5IGF1eWRvYSBhb2lzeWQgYW9zZHkgJyArXG4gICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5keW5hbWljVGV4dH1cbiAgICAgICAgPC9UZXh0PlxuXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgYWRqdXN0c0ZvbnRTaXplVG9GaXQ9e3RydWV9XG4gICAgICAgICAgbnVtYmVyT2ZMaW5lcz17MX1cbiAgICAgICAgICBzdHlsZT17e21hcmdpblZlcnRpY2FsOiA2fX0+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMTR9fT5cbiAgICAgICAgICAgIHsnRGlmZmVyZW50bHkgc2l6ZWQgbmVzdGVkIGVsZW1lbnRzIHdpbGwgc2hyaW5rIHRvZ2V0aGVyLiAnfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAyMH19PlxuICAgICAgICAgICAgeydMQVJHRSBURVhUISAnICsgdGhpcy5zdGF0ZS5keW5hbWljVGV4dH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cblxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJyxcbiAgICAgICAgICAgIG1hcmdpblRvcDogNSxcbiAgICAgICAgICAgIG1hcmdpblZlcnRpY2FsOiA2LFxuICAgICAgICAgIH19PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnI2ZmYWFhYSd9fSBvblByZXNzPXt0aGlzLnJlc2V0fT5cbiAgICAgICAgICAgIFJlc2V0XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnI2FhYWFmZid9fSBvblByZXNzPXt0aGlzLnJlbW92ZVRleHR9PlxuICAgICAgICAgICAgUmVtb3ZlIFRleHRcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICcjYWFmZmFhJ319IG9uUHJlc3M9e3RoaXMuYWRkVGV4dH0+XG4gICAgICAgICAgICBBZGQgVGV4dFxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgVGV4dEJhc2VMaW5lTGF5b3V0RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwgbWl4ZWQ+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHRleHRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDk7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0ZXh0cy5wdXNoKFxuICAgICAgICA8VGV4dCBrZXk9e2l9IHN0eWxlPXt7Zm9udFNpemU6IDggKyBpICogNSwgYmFja2dyb3VuZENvbG9yOiAnI2VlZSd9fT5cbiAgICAgICAgICB7aX1cbiAgICAgICAgPC9UZXh0PixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFya2VyID0gKFxuICAgICAgPFZpZXcgc3R5bGU9e3t3aWR0aDogMjAsIGhlaWdodDogMjAsIGJhY2tncm91bmRDb2xvcjogJ2dyYXknfX0gLz5cbiAgICApO1xuICAgIGNvbnN0IHN1YnRpdGxlU3R5bGUgPSB7Zm9udFNpemU6IDE2LCBtYXJnaW5Ub3A6IDgsIGZvbnRXZWlnaHQ6ICdib2xkJ307XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdWJ0aXRsZVN0eWxlfT57J05lc3RlZCA8VGV4dC8+czonfTwvVGV4dD5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJ319PlxuICAgICAgICAgIHttYXJrZXJ9XG4gICAgICAgICAgPFRleHQ+e3RleHRzfTwvVGV4dD5cbiAgICAgICAgICB7bWFya2VyfVxuICAgICAgICA8L1ZpZXc+XG5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N1YnRpdGxlU3R5bGV9PnsnQXJyYXkgb2YgPFRleHQvPnMgaW4gPFZpZXc+Oid9PC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17e2ZsZXhEaXJlY3Rpb246ICdyb3cnLCBhbGlnbkl0ZW1zOiAnYmFzZWxpbmUnfX0+XG4gICAgICAgICAge21hcmtlcn1cbiAgICAgICAgICB7dGV4dHN9XG4gICAgICAgICAge21hcmtlcn1cbiAgICAgICAgPC9WaWV3PlxuXG4gICAgICAgIHsvKiBpT1Mtb25seSBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbmxpbmUgdmlld3MgYmVpbmcgYWJsZSB0byBzaXplIHRvIGNvbnRlbnQuXG4gICAgICAgICAqIEFuZHJvaWQncyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IGEgd2lkdGggYW5kIGhlaWdodCBiZSBzcGVjaWZpZWRcbiAgICAgICAgICogb24gdGhlIGlubGluZSB2aWV3LiAqL31cbiAgICAgICAgPFRleHQgc3R5bGU9e3N1YnRpdGxlU3R5bGV9PnsnSW50ZXJsZWF2aW5nIDxWaWV3PiBhbmQgPFRleHQ+Oid9PC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17e2ZsZXhEaXJlY3Rpb246ICdyb3cnLCBhbGlnbkl0ZW1zOiAnYmFzZWxpbmUnfX0+XG4gICAgICAgICAge21hcmtlcn1cbiAgICAgICAgICA8VGV4dCBzZWxlY3RhYmxlPXt0cnVlfT5cbiAgICAgICAgICAgIFNvbWUgdGV4dC5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlJyxcbiAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgIHttYXJrZXJ9XG4gICAgICAgICAgICAgIDxUZXh0PlRleHQgaW5zaWRlIFZpZXcuPC9UZXh0PlxuICAgICAgICAgICAgICB7bWFya2VyfVxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7bWFya2VyfVxuICAgICAgICA8L1ZpZXc+XG5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N1YnRpdGxlU3R5bGV9PlxuICAgICAgICAgIHsnTXVsdGktbGluZSBpbnRlcmxlYXZlZCA8Vmlldz4gYW5kIDxUZXh0PjonfVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdiYXNlbGluZSd9fT5cbiAgICAgICAgICA8VGV4dCBzZWxlY3RhYmxlPXt0cnVlfT5cbiAgICAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIE1hdXJpc1xuICAgICAgICAgICAgdmVuZW5hdGlzLHsnICd9XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3llbGxvdycsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICA8VGV4dD5tYXVyaXMgZXUgY29tbW9kbyBtYXhpbXVzPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PnsnICd9XG4gICAgICAgICAgICAsIGFudGUgYXJjdSB2ZXN0aWJ1bHVtIGxpZ3VsYSwgZXQgc2NlbGVyaXNxdWUgZGlhbS5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cblxuICAgICAgICA8VGV4dCBzdHlsZT17c3VidGl0bGVTdHlsZX0+eyc8VGV4dElucHV0Lz46J308L1RleHQ+XG4gICAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdiYXNlbGluZSd9fT5cbiAgICAgICAgICB7bWFya2VyfVxuICAgICAgICAgIDxUZXh0SW5wdXQgc3R5bGU9e3ttYXJnaW46IDAsIHBhZGRpbmc6IDB9fT57dGV4dHN9PC9UZXh0SW5wdXQ+XG4gICAgICAgICAge21hcmtlcn1cbiAgICAgICAgPC9WaWV3PlxuXG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdWJ0aXRsZVN0eWxlfT57JzxUZXh0SW5wdXQgbXVsdGlsaW5lLz46J308L1RleHQ+XG4gICAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdiYXNlbGluZSd9fT5cbiAgICAgICAgICB7bWFya2VyfVxuICAgICAgICAgIDxUZXh0SW5wdXQgbXVsdGlsaW5lPXt0cnVlfSBzdHlsZT17e21hcmdpbjogMCwgcGFkZGluZzogMH19PlxuICAgICAgICAgICAge3RleHRzfVxuICAgICAgICAgIDwvVGV4dElucHV0PlxuICAgICAgICAgIHttYXJrZXJ9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRleHRSZW5kZXJJbmZvRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAge30sXG4gIHtcbiAgICBmb250U2l6ZTogbnVtYmVyLFxuICAgIG51bWJlck9mVGV4dEJsb2NrczogbnVtYmVyLFxuICAgIHRleHRNZXRyaWNzOiAkUmVhZE9ubHk8e1xuICAgICAgYXNjZW5kZXI6IG51bWJlcixcbiAgICAgIGNhcEhlaWdodDogbnVtYmVyLFxuICAgICAgZGVzY2VuZGVyOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgeDogbnVtYmVyLFxuICAgICAgeEhlaWdodDogbnVtYmVyLFxuICAgICAgeTogbnVtYmVyLFxuICAgIH0+LFxuICB9LFxuPiB7XG4gIHN0YXRlOiB7XG4gICAgZm9udFNpemU6IG51bWJlcixcbiAgICBudW1iZXJPZlRleHRCbG9ja3M6IG51bWJlcixcbiAgICB0ZXh0TWV0cmljczogJFJlYWRPbmx5PHtcbiAgICAgIGFzY2VuZGVyOiBudW1iZXIsXG4gICAgICBjYXBIZWlnaHQ6IG51bWJlcixcbiAgICAgIGRlc2NlbmRlcjogbnVtYmVyLFxuICAgICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgd2lkdGg6IG51bWJlcixcbiAgICAgIHg6IG51bWJlcixcbiAgICAgIHhIZWlnaHQ6IG51bWJlcixcbiAgICAgIHk6IG51bWJlcixcbiAgICB9PixcbiAgfSA9IHtcbiAgICB0ZXh0TWV0cmljczoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGNhcEhlaWdodDogMCxcbiAgICAgIGRlc2NlbmRlcjogMCxcbiAgICAgIGFzY2VuZGVyOiAwLFxuICAgICAgeEhlaWdodDogMCxcbiAgICB9LFxuICAgIG51bWJlck9mVGV4dEJsb2NrczogMSxcbiAgICBmb250U2l6ZTogMTQsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHRvcE9mQm94ID1cbiAgICAgIHRoaXMuc3RhdGUudGV4dE1ldHJpY3MueSArXG4gICAgICB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLmhlaWdodCAtXG4gICAgICAodGhpcy5zdGF0ZS50ZXh0TWV0cmljcy5kZXNjZW5kZXIgKyB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLmNhcEhlaWdodCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGxlZnQ6IHRoaXMuc3RhdGUudGV4dE1ldHJpY3MueCArIHRoaXMuc3RhdGUudGV4dE1ldHJpY3Mud2lkdGgsXG4gICAgICAgICAgICAgIHRvcDogdG9wT2ZCb3gsXG4gICAgICAgICAgICAgIHdpZHRoOiA1LFxuICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLmNhcEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLnhIZWlnaHQsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLnggKyB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLndpZHRoLFxuICAgICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgICAgdG9wT2ZCb3ggK1xuICAgICAgICAgICAgICAgICh0aGlzLnN0YXRlLnRleHRNZXRyaWNzLmNhcEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLnhIZWlnaHQpLFxuICAgICAgICAgICAgICB3aWR0aDogNSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLmNlaWwodGhpcy5zdGF0ZS50ZXh0TWV0cmljcy54SGVpZ2h0KSxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBzdHlsZT17e2ZvbnRTaXplOiB0aGlzLnN0YXRlLmZvbnRTaXplfX1cbiAgICAgICAgICAgIG9uVGV4dExheW91dD17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7bGluZXN9ID0gZXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGV4dE1ldHJpY3M6IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAge25ldyBBcnJheTxzdHJpbmc+KHRoaXMuc3RhdGUubnVtYmVyT2ZUZXh0QmxvY2tzKVxuICAgICAgICAgICAgICAuZmlsbCgnQSB0aW55IGJsb2NrIG9mIHRleHQuJylcbiAgICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFRleHRcbiAgICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIG51bWJlck9mVGV4dEJsb2NrczogdGhpcy5zdGF0ZS5udW1iZXJPZlRleHRCbG9ja3MgKyAxLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9PlxuICAgICAgICAgIE1vcmUgdGV4dFxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7Zm9udFNpemU6IHRoaXMuc3RhdGUuZm9udFNpemUgKyAxfSl9PlxuICAgICAgICAgIEluY3JlYXNlIHNpemVcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dFxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHRoaXMuc2V0U3RhdGUoe2ZvbnRTaXplOiB0aGlzLnN0YXRlLmZvbnRTaXplIC0gMX0pfT5cbiAgICAgICAgICBEZWNyZWFzZSBzaXplXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRleHRXaXRoQ2FwQmFzZUJveCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAge2NoaWxkcmVuOiBzdHJpbmcsIHN0eWxlPzogYW55fSxcbiAge1xuICAgIHRleHRNZXRyaWNzOiAkUmVhZE9ubHk8e1xuICAgICAgYXNjZW5kZXI6IG51bWJlcixcbiAgICAgIGNhcEhlaWdodDogbnVtYmVyLFxuICAgICAgZGVzY2VuZGVyOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgeDogbnVtYmVyLFxuICAgICAgeEhlaWdodDogbnVtYmVyLFxuICAgICAgeTogbnVtYmVyLFxuICAgIH0+LFxuICB9LFxuPiB7XG4gIHN0YXRlOiB7XG4gICAgdGV4dE1ldHJpY3M6ICRSZWFkT25seTx7XG4gICAgICBhc2NlbmRlcjogbnVtYmVyLFxuICAgICAgY2FwSGVpZ2h0OiBudW1iZXIsXG4gICAgICBkZXNjZW5kZXI6IG51bWJlcixcbiAgICAgIGhlaWdodDogbnVtYmVyLFxuICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgIHdpZHRoOiBudW1iZXIsXG4gICAgICB4OiBudW1iZXIsXG4gICAgICB4SGVpZ2h0OiBudW1iZXIsXG4gICAgICB5OiBudW1iZXIsXG4gICAgfT4sXG4gIH0gPSB7XG4gICAgdGV4dE1ldHJpY3M6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBjYXBIZWlnaHQ6IDAsXG4gICAgICBkZXNjZW5kZXI6IDAsXG4gICAgICBhc2NlbmRlcjogMCxcbiAgICAgIHhIZWlnaHQ6IDAsXG4gICAgfSxcbiAgfTtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VGV4dFxuICAgICAgICBvblRleHRMYXlvdXQ9e2V2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7bGluZXN9ID0gZXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHRNZXRyaWNzOiBsaW5lc1swXX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXJnaW5Ub3A6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgLShcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLmFzY2VuZGVyIC1cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRleHRNZXRyaWNzLmNhcEhlaWdodFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogTWF0aC5jZWlsKC10aGlzLnN0YXRlLnRleHRNZXRyaWNzLmRlc2NlbmRlciksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnByb3BzLnN0eWxlLFxuICAgICAgICBdfT5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1RleHQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBleGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnV3JhcCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICBUaGUgdGV4dCBzaG91bGQgd3JhcCBpZiBpdCBnb2VzIG9uIG11bHRpcGxlIGxpbmVzLiBTZWUsIHRoaXMgaXMgZ29pbmdcbiAgICAgICAgICB0byB0aGUgbmV4dCBsaW5lLlxuICAgICAgICA8L1RleHQ+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogXCJTdWJzdHJpbmcgRW1vamkgKHNob3VsZCBvbmx5IHNlZSAndGVzdCcpXCIsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFRleHQ+eyd0ZXN08J+Zgycuc3Vic3RyaW5nKDAsIDUpfTwvVGV4dD47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVHJhbnNwYXJlbnQgQmFja2dyb3VuZCBDb2xvcicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dCBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJyMwMDAwMDAyMCcsIHBhZGRpbmc6IDEwfX0+XG4gICAgICAgICAgVGV4dCBpbiBhIGdyYXkgYm94IVxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAncmVkJ319PlxuICAgICAgICAgICAgQW5vdGhlciB0ZXh0IGluIGEgKGlubGluZSkgcmVkIGJveCAod2hpY2ggaXMgaW5zaWRlIHRoZSBncmF5IGJveCkuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RleHQgbWV0cmljcycsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFRleHRSZW5kZXJJbmZvRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0IG1ldHJpY3MgbGVnZW5kJyxcbiAgICByZW5kZXI6ICgpOiBSZWFjdC5Ob2RlID0+IDxUZXh0TGVnZW5kIC8+LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdCYXNlbGluZSBjYXBoZWlnaHQgYm94JyxcbiAgICByZW5kZXI6ICgpOiBSZWFjdC5Ob2RlID0+IChcbiAgICAgIDxWaWV3IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAncmVkJ319PlxuICAgICAgICA8VGV4dFdpdGhDYXBCYXNlQm94PlNvbWUgZXhhbXBsZSB0ZXh0LjwvVGV4dFdpdGhDYXBCYXNlQm94PlxuICAgICAgPC9WaWV3PlxuICAgICksXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1BhZGRpbmcnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQgc3R5bGU9e3twYWRkaW5nOiAxMH19PlxuICAgICAgICAgIFRoaXMgdGV4dCBpcyBpbmRlbnRlZCBieSAxMHB4IHBhZGRpbmcgb24gYWxsIHNpZGVzLlxuICAgICAgICA8L1RleHQ+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ZvbnQgRmFtaWx5JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udEZhbWlseTogUGxhdGZvcm0uaXNUViA/ICdUaW1lcycgOiAnQ29jaGluJ319PlxuICAgICAgICAgICAgQ29jaGluXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBmb250RmFtaWx5OiBQbGF0Zm9ybS5pc1RWID8gJ1RpbWVzJyA6ICdDb2NoaW4nLFxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgIENvY2hpbiBib2xkXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udEZhbWlseTogJ0hlbHZldGljYSd9fT5IZWx2ZXRpY2E8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250RmFtaWx5OiAnSGVsdmV0aWNhJywgZm9udFdlaWdodDogJ2JvbGQnfX0+XG4gICAgICAgICAgICBIZWx2ZXRpY2EgYm9sZFxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRGYW1pbHk6IFBsYXRmb3JtLmlzVFYgPyAnQ291cmllcicgOiAnVmVyZGFuYSd9fT5cbiAgICAgICAgICAgIFZlcmRhbmFcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFBsYXRmb3JtLmlzVFYgPyAnQ291cmllcicgOiAnVmVyZGFuYScsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgVmVyZGFuYSBib2xkXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udEZhbWlseTogJ1Vua25vd24gRm9udCBGYW1pbHknfX0+XG4gICAgICAgICAgICBVbmtub3duIEZvbnQgRmFtaWx5XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ZvbnQgU2l6ZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAyM319PlNpemUgMjM8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogOH19PlNpemUgODwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDb2xvcicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAncmVkJ319PlJlZCBjb2xvcjwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnYmx1ZSd9fT5CbHVlIGNvbG9yPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ZvbnQgV2VpZ2h0JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJ2JvbGQnfX0+TW92ZSBmYXN0IGFuZCBiZSBib2xkPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJ25vcm1hbCd9fT5Nb3ZlIGZhc3QgYW5kIGJlIG5vcm1hbDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6ICc5MDAnfX0+Rk9OVCBXRUlHSFQgOTAwPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJzgwMCd9fT5GT05UIFdFSUdIVCA4MDA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiAnNzAwJ319PkZPTlQgV0VJR0hUIDcwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6ICc2MDAnfX0+Rk9OVCBXRUlHSFQgNjAwPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJzUwMCd9fT5GT05UIFdFSUdIVCA1MDA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiAnNDAwJ319PkZPTlQgV0VJR0hUIDQwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6ICczMDAnfX0+Rk9OVCBXRUlHSFQgMzAwPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJzIwMCd9fT5GT05UIFdFSUdIVCAyMDA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiAnMTAwJ319PkZPTlQgV0VJR0hUIDEwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDkwMH19PkZPTlQgV0VJR0hUIDkwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDgwMH19PkZPTlQgV0VJR0hUIDgwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDcwMH19PkZPTlQgV0VJR0hUIDcwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDYwMH19PkZPTlQgV0VJR0hUIDYwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDUwMH19PkZPTlQgV0VJR0hUIDUwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDQwMH19PkZPTlQgV0VJR0hUIDQwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDMwMH19PkZPTlQgV0VJR0hUIDMwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDIwMH19PkZPTlQgV0VJR0hUIDIwMDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IDEwMH19PkZPTlQgV0VJR0hUIDEwMDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdGb250IFN0eWxlJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFN0eWxlOiAnbm9ybWFsJ319Pk5vcm1hbCB0ZXh0PC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFN0eWxlOiAnaXRhbGljJ319Pkl0YWxpYyB0ZXh0PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1NlbGVjdGFibGUnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQgc2VsZWN0YWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICBUaGlzIHRleHQgaXMgPFRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiAnYm9sZCd9fT5zZWxlY3RhYmxlPC9UZXh0PiBpZlxuICAgICAgICAgICAgeW91IGNsaWNrLWFuZC1ob2xkLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0IERlY29yYXRpb24nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uTGluZTogJ3VuZGVybGluZScsXG4gICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU3R5bGU6ICdzb2xpZCcsXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgIFNvbGlkIHVuZGVybGluZVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25MaW5lOiAndW5kZXJsaW5lJyxcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TdHlsZTogJ2RvdWJsZScsXG4gICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uQ29sb3I6ICcjZmYwMDAwJyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgRG91YmxlIHVuZGVybGluZSB3aXRoIGN1c3RvbSBjb2xvclxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25MaW5lOiAndW5kZXJsaW5lJyxcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TdHlsZTogJ2Rhc2hlZCcsXG4gICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uQ29sb3I6ICcjOUNEQzQwJyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgRGFzaGVkIHVuZGVybGluZSB3aXRoIGN1c3RvbSBjb2xvclxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25MaW5lOiAndW5kZXJsaW5lJyxcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TdHlsZTogJ2RvdHRlZCcsXG4gICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uQ29sb3I6ICdibHVlJyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgRG90dGVkIHVuZGVybGluZSB3aXRoIGN1c3RvbSBjb2xvclxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e3RleHREZWNvcmF0aW9uTGluZTogJ25vbmUnfX0+Tm9uZSB0ZXh0RGVjb3JhdGlvbjwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25MaW5lOiAnbGluZS10aHJvdWdoJyxcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TdHlsZTogJ3NvbGlkJyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgU29saWQgbGluZS10aHJvdWdoXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbkxpbmU6ICdsaW5lLXRocm91Z2gnLFxuICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblN0eWxlOiAnZG91YmxlJyxcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25Db2xvcjogJyNmZjAwMDAnLFxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICBEb3VibGUgbGluZS10aHJvdWdoIHdpdGggY3VzdG9tIGNvbG9yXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbkxpbmU6ICdsaW5lLXRocm91Z2gnLFxuICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblN0eWxlOiAnZGFzaGVkJyxcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25Db2xvcjogJyM5Q0RDNDAnLFxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICBEYXNoZWQgbGluZS10aHJvdWdoIHdpdGggY3VzdG9tIGNvbG9yXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbkxpbmU6ICdsaW5lLXRocm91Z2gnLFxuICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblN0eWxlOiAnZG90dGVkJyxcbiAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25Db2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICBEb3R0ZWQgbGluZS10aHJvdWdoIHdpdGggY3VzdG9tIGNvbG9yXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dERlY29yYXRpb25MaW5lOiAndW5kZXJsaW5lIGxpbmUtdGhyb3VnaCd9fT5cbiAgICAgICAgICAgIEJvdGggdW5kZXJsaW5lIGFuZCBsaW5lLXRocm91Z2hcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTmVzdGVkJyxcbiAgICBkZXNjcmlwdGlvbjogKCdOZXN0ZWQgdGV4dCBjb21wb25lbnRzIHdpbGwgaW5oZXJpdCB0aGUgc3R5bGVzIG9mIHRoZWlyICcgK1xuICAgICAgJ3BhcmVudHMgKG9ubHkgYmFja2dyb3VuZENvbG9yIGlzIGluaGVyaXRlZCBmcm9tIG5vbi1UZXh0IHBhcmVudHMpLiAgJyArXG4gICAgICAnPFRleHQ+IG9ubHkgc3VwcG9ydHMgb3RoZXIgPFRleHQ+IGFuZCByYXcgdGV4dCAoc3RyaW5ncykgYXMgY2hpbGRyZW4uJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgKE5vcm1hbCB0ZXh0LFxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiAnYm9sZCd9fT5cbiAgICAgICAgICAgICAgKGFuZCBib2xkXG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExLCBjb2xvcjogJyM1MjdmZTQnfX0+XG4gICAgICAgICAgICAgICAgKGFuZCB0aW55IGluaGVyaXRlZCBib2xkIGJsdWUpXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e29wYWNpdHk6IDAuN319PlxuICAgICAgICAgICAgKG9wYWNpdHlcbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAoaXMgaW5oZXJpdGVkXG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7b3BhY2l0eTogMC43fX0+XG4gICAgICAgICAgICAgICAgKGFuZCBhY2N1bXVsYXRlZFxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnI2ZmYWFhYSd9fT5cbiAgICAgICAgICAgICAgICAgIChhbmQgYWxzbyBhcHBsaWVzIHRvIHRoZSBiYWNrZ3JvdW5kKVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMn19PlxuICAgICAgICAgICAgPEVudGl0eT5FbnRpdHkgTmFtZTwvRW50aXR5PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0IEFsaWduJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0PmF1dG8gKGRlZmF1bHQpIC0gZW5nbGlzaCBMVFI8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7J1xcdTA2MjNcXHUwNjJEXFx1MDYyOCBcXHUwNjI3XFx1MDY0NFxcdTA2NDRcXHUwNjNBXFx1MDYyOSAnICtcbiAgICAgICAgICAgICAgJ1xcdTA2MjdcXHUwNjQ0XFx1MDYzOVxcdTA2MzFcXHUwNjI4XFx1MDY0QVxcdTA2MjkgYXV0byAoZGVmYXVsdCkgLSBhcmFiaWMgJyArXG4gICAgICAgICAgICAgICdSVEwnfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e3RleHRBbGlnbjogJ2xlZnQnfX0+XG4gICAgICAgICAgICBsZWZ0IGxlZnQgbGVmdCBsZWZ0IGxlZnQgbGVmdCBsZWZ0IGxlZnQgbGVmdCBsZWZ0IGxlZnQgbGVmdCBsZWZ0XG4gICAgICAgICAgICBsZWZ0IGxlZnRcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3t0ZXh0QWxpZ246ICdjZW50ZXInfX0+XG4gICAgICAgICAgICBjZW50ZXIgY2VudGVyIGNlbnRlciBjZW50ZXIgY2VudGVyIGNlbnRlciBjZW50ZXIgY2VudGVyIGNlbnRlclxuICAgICAgICAgICAgY2VudGVyIGNlbnRlclxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319PlxuICAgICAgICAgICAgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHQgcmlnaHRcbiAgICAgICAgICAgIHJpZ2h0IHJpZ2h0XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dEFsaWduOiAnanVzdGlmeSd9fT5cbiAgICAgICAgICAgIGp1c3RpZnk6IHRoaXMgdGV4dCBjb21wb25lbnR7XCInXCJ9cyBjb250ZW50cyBhcmUgbGFpZCBvdXQgd2l0aFxuICAgICAgICAgICAgXCJ0ZXh0QWxpZ246IGp1c3RpZnlcIiBhbmQgYXMgeW91IGNhbiBzZWUgYWxsIG9mIHRoZSBsaW5lcyBleGNlcHQgdGhlXG4gICAgICAgICAgICBsYXN0IG9uZSBzcGFuIHRoZSBhdmFpbGFibGUgd2lkdGggb2YgdGhlIHBhcmVudCBjb250YWluZXIuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xldHRlciBTcGFjaW5nJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7bGV0dGVyU3BhY2luZzogMH19PmxldHRlclNwYWNpbmcgPSAwPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7bGV0dGVyU3BhY2luZzogMiwgbWFyZ2luVG9wOiA1fX0+XG4gICAgICAgICAgICBsZXR0ZXJTcGFjaW5nID0gMlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2xldHRlclNwYWNpbmc6IDksIG1hcmdpblRvcDogNX19PlxuICAgICAgICAgICAgbGV0dGVyU3BhY2luZyA9IDlcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAncm93J319PlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogMixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdmdWNoc2lhJyxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDUsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICBXaXRoIHNpemUgYW5kIGJhY2tncm91bmQgY29sb3JcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tsZXR0ZXJTcGFjaW5nOiAtMSwgbWFyZ2luVG9wOiA1fX0+XG4gICAgICAgICAgICBsZXR0ZXJTcGFjaW5nID0gLTFcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6IDMsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNkZGRkZGQnLFxuICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDUsXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgIFtsZXR0ZXJTcGFjaW5nID0gM11cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7bGV0dGVyU3BhY2luZzogMCwgYmFja2dyb3VuZENvbG9yOiAnI2JiYmJiYid9fT5cbiAgICAgICAgICAgICAgW05lc3RlZCBsZXR0ZXJTcGFjaW5nID0gMF1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7bGV0dGVyU3BhY2luZzogNiwgYmFja2dyb3VuZENvbG9yOiAnI2VlZWVlZSd9fT5cbiAgICAgICAgICAgICAgW05lc3RlZCBsZXR0ZXJTcGFjaW5nID0gNl1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3BhY2VzJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIEEgeydnZW5lcmF0ZWQnfSB7J3N0cmluZyd9IGFuZCBzb21lICZuYnNwOyZuYnNwOyZuYnNwOyBzcGFjZXNcbiAgICAgICAgPC9UZXh0PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMaW5lIEhlaWdodCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2xpbmVIZWlnaHQ6IDM1fX0+XG4gICAgICAgICAgICBBIGxvdCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBsaW5lcyBvZiB0aGlzIGxvbmcgcGFzc2FnZSB0aGF0IHNob3VsZFxuICAgICAgICAgICAgd3JhcCBvbmNlLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdFbXB0eSBUZXh0JyxcbiAgICBkZXNjcmlwdGlvbjogXCJJdCdzIG9rIHRvIGhhdmUgVGV4dCB3aXRoIHplcm8gb3IgbnVsbCBjaGlsZHJlbi5cIixcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8VGV4dCAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb2dnbGluZyBBdHRyaWJ1dGVzJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxBdHRyaWJ1dGVUb2dnbGVyIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ2JhY2tncm91bmRDb2xvciBhdHRyaWJ1dGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnYmFja2dyb3VuZENvbG9yIGlzIGluaGVyaXRlZCBmcm9tIGFsbCB0eXBlcyBvZiB2aWV3cy4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICd5ZWxsb3cnfX0+XG4gICAgICAgICAgWWVsbG93IGNvbnRhaW5lciBiYWNrZ3JvdW5kLFxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnI2ZmYWFhYSd9fT5cbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICByZWQgYmFja2dyb3VuZCxcbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnI2FhYWFmZid9fT5cbiAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgYmx1ZSBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgIGluaGVyaXRlZCBibHVlIGJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICcjYWFmZmFhJ319PlxuICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgIG5lc3RlZCBncmVlbiBiYWNrZ3JvdW5kLlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdudW1iZXJPZkxpbmVzIGF0dHJpYnV0ZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dCBudW1iZXJPZkxpbmVzPXsxfT5cbiAgICAgICAgICAgIE1heGltdW0gb2Ygb25lIGxpbmUsIG5vIG1hdHRlciBob3cgbXVjaCBJIHdyaXRlIGhlcmUuIElmIEkga2VlcFxuICAgICAgICAgICAgd3JpdGluZywgaXR7XCInXCJ9bGwganVzdCB0cnVuY2F0ZSBhZnRlciBvbmUgbGluZS5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgbnVtYmVyT2ZMaW5lcz17Mn0gc3R5bGU9e3ttYXJnaW5Ub3A6IDIwfX0+XG4gICAgICAgICAgICBNYXhpbXVtIG9mIHR3byBsaW5lcywgbm8gbWF0dGVyIGhvdyBtdWNoIEkgd3JpdGUgaGVyZS4gSWYgSSBrZWVwXG4gICAgICAgICAgICB3cml0aW5nLCBpdHtcIidcIn1sbCBqdXN0IHRydW5jYXRlIGFmdGVyIHR3byBsaW5lcy5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3ttYXJnaW5Ub3A6IDIwfX0+XG4gICAgICAgICAgICBObyBtYXhpbXVtIGxpbmVzIHNwZWNpZmllZCwgbm8gbWF0dGVyIGhvdyBtdWNoIEkgd3JpdGUgaGVyZS4gSWYgSVxuICAgICAgICAgICAga2VlcCB3cml0aW5nLCBpdHtcIidcIn1sbCBqdXN0IGtlZXAgZ29pbmcgYW5kIGdvaW5nLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0IGhpZ2hsaWdodGluZyAodGFwIHRoZSBsaW5rIHRvIHNlZSBoaWdobGlnaHQpJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQseycgJ31cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN1cHByZXNzSGlnaGxpZ2h0aW5nPXtmYWxzZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25MaW5lOiAndW5kZXJsaW5lJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBudWxsfT5cbiAgICAgICAgICAgICAgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dFxuICAgICAgICAgICAgICBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXNcbiAgICAgICAgICAgICAgbm9zdHJ1ZFxuICAgICAgICAgICAgPC9UZXh0PnsnICd9XG4gICAgICAgICAgICBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvXG4gICAgICAgICAgICBjb25zZXF1YXQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ2FsbG93Rm9udFNjYWxpbmcgYXR0cmlidXRlJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGV4dCB3aWxsIHJlc3BlY3QgVGV4dCBTaXplIGFjY2Vzc2liaWxpdHkgc2V0dGluZyBvblxuICAgICAgICAgICAgaU9TLiBJdCBtZWFucyB0aGF0IGFsbCBmb250IHNpemVzIHdpbGwgYmUgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZFxuICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBUZXh0IFNpemUgc2V0dGluZyBpbnsnICd9XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6ICdib2xkJ319PlxuICAgICAgICAgICAgICBTZXR0aW5ncy5hcHAgLSBEaXNwbGF5ICYgQnJpZ2h0bmVzcyAtIFRleHQgU2l6ZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e21hcmdpblRvcDogMTB9fT5cbiAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSBzY2FsaW5nIGZvciB5b3VyIFRleHQgY29tcG9uZW50IGJ5IHBhc3NpbmcgeydcIid9XG4gICAgICAgICAgICBhbGxvd0ZvbnRTY2FsaW5nPXsneyd9ZmFsc2V7J31cIid9IHByb3AuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IGFsbG93Rm9udFNjYWxpbmc9e2ZhbHNlfSBzdHlsZT17e21hcmdpblRvcDogMjAsIGZvbnRTaXplOiAxNX19PlxuICAgICAgICAgICAgVGhpcyB0ZXh0IHdpbGwgbm90IHNjYWxlLnsnICd9XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxNX19PlxuICAgICAgICAgICAgICBUaGlzIHRleHQgYWxzbyB3b24ndCBzY2FsZSBiZWNhdXNlIGl0IGluaGVyaXRzIFwiYWxsb3dGb250U2NhbGluZ1wiXG4gICAgICAgICAgICAgIGZyb20gaXRzIHBhcmVudC5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnSW5saW5lIHZpZXdzJyxcbiAgICByZW5kZXI6ICgpOiBSZWFjdC5Ob2RlID0+IDxUZXh0SW5saW5lVmlldy5CYXNpYyAvPixcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnSW5saW5lIGltYWdlL3ZpZXcgY2xpcHBlZCBieSA8VGV4dD4nLFxuICAgIHJlbmRlcjogKCk6IFJlYWN0Lk5vZGUgPT4gPFRleHRJbmxpbmVWaWV3LkNsaXBwZWRCeVRleHQgLz4sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1JlbGF5b3V0IGlubGluZSBpbWFnZScsXG4gICAgcmVuZGVyOiAoKTogUmVhY3QuTm9kZSA9PiA8VGV4dElubGluZVZpZXcuQ2hhbmdlSW1hZ2VTaXplIC8+LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdSZWxheW91dCBpbmxpbmUgdmlldycsXG4gICAgcmVuZGVyOiAoKTogUmVhY3QuTm9kZSA9PiA8VGV4dElubGluZVZpZXcuQ2hhbmdlVmlld1NpemUgLz4sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1JlbGF5b3V0IG5lc3RlZCBpbmxpbmUgdmlldycsXG4gICAgcmVuZGVyOiAoKTogUmVhY3QuTm9kZSA9PiA8VGV4dElubGluZVZpZXcuQ2hhbmdlSW5uZXJWaWV3U2l6ZSAvPixcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVGV4dCBzaGFkb3cnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGZvbnRTaXplOiAyMCxcbiAgICAgICAgICAgICAgdGV4dFNoYWRvd09mZnNldDoge3dpZHRoOiAyLCBoZWlnaHQ6IDJ9LFxuICAgICAgICAgICAgICB0ZXh0U2hhZG93UmFkaXVzOiAxLFxuICAgICAgICAgICAgICB0ZXh0U2hhZG93Q29sb3I6ICcjMDBjY2NjJyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgRGVtbyB0ZXh0IHNoYWRvd1xuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdFbGxpcHNpemUgbW9kZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dCBudW1iZXJPZkxpbmVzPXsxfT5cbiAgICAgICAgICAgIFRoaXMgdmVyeSBsb25nIHRleHQgc2hvdWxkIGJlIHRydW5jYXRlZCB3aXRoIGRvdHMgaW4gdGhlIGVuZC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgZWxsaXBzaXplTW9kZT1cIm1pZGRsZVwiIG51bWJlck9mTGluZXM9ezF9PlxuICAgICAgICAgICAgVGhpcyB2ZXJ5IGxvbmcgdGV4dCBzaG91bGQgYmUgdHJ1bmNhdGVkIHdpdGggZG90cyBpbiB0aGUgbWlkZGxlLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBlbGxpcHNpemVNb2RlPVwiaGVhZFwiIG51bWJlck9mTGluZXM9ezF9PlxuICAgICAgICAgICAgVGhpcyB2ZXJ5IGxvbmcgdGV4dCBzaG91bGQgYmUgdHJ1bmNhdGVkIHdpdGggZG90cyBpbiB0aGUgYmVnaW5uaW5nLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBlbGxpcHNpemVNb2RlPVwiY2xpcFwiIG51bWJlck9mTGluZXM9ezF9PlxuICAgICAgICAgICAgVGhpcyB2ZXJ5IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIHRleHQgc2hvdWxkIGJlIGNsaXBwZWQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ZvbnQgdmFyaWFudHMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250VmFyaWFudDogWydzbWFsbC1jYXBzJ119fT5TbWFsbCBDYXBzeydcXG4nfTwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogUGxhdGZvcm0uaXNUViA/ICdUaW1lcycgOiAnSG9lZmxlciBUZXh0JyxcbiAgICAgICAgICAgICAgZm9udFZhcmlhbnQ6IFsnb2xkc3R5bGUtbnVtcyddLFxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICBPbGQgU3R5bGUgbnVtcyAwMTIzNDU2Nzg5eydcXG4nfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogUGxhdGZvcm0uaXNUViA/ICdUaW1lcycgOiAnSG9lZmxlciBUZXh0JyxcbiAgICAgICAgICAgICAgZm9udFZhcmlhbnQ6IFsnbGluaW5nLW51bXMnXSxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgTGluaW5nIG51bXMgMDEyMzQ1Njc4OXsnXFxuJ31cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250VmFyaWFudDogWyd0YWJ1bGFyLW51bXMnXX19PlxuICAgICAgICAgICAgVGFidWxhciBudW1zeydcXG4nfVxuICAgICAgICAgICAgMTExMXsnXFxuJ31cbiAgICAgICAgICAgIDIyMjJ7J1xcbid9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFZhcmlhbnQ6IFsncHJvcG9ydGlvbmFsLW51bXMnXX19PlxuICAgICAgICAgICAgUHJvcG9ydGlvbmFsIG51bXN7J1xcbid9XG4gICAgICAgICAgICAxMTExeydcXG4nfVxuICAgICAgICAgICAgMjIyMnsnXFxuJ31cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTmVzdGVkIGNvbnRlbnQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgLy8gaU9TLW9ubHkgYmVjYXVzZSBpdCByZWxpZXMgb24gaW5saW5lIHZpZXdzIGJlaW5nIGFibGUgdG8gc2l6ZSB0byBjb250ZW50LlxuICAgICAgLy8gQW5kcm9pZCdzIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRoYXQgYSB3aWR0aCBhbmQgaGVpZ2h0IGJlIHNwZWNpZmllZFxuICAgICAgLy8gb24gdGhlIGlubGluZSB2aWV3LlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgVGhpcyB0ZXh0IGhhcyBhIHZpZXdcbiAgICAgICAgICA8SW5saW5lVmlldyBzdHlsZT17e2JvcmRlckNvbG9yOiAncmVkJywgYm9yZGVyV2lkdGg6IDF9fT5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Ym9yZGVyQ29sb3I6ICdibHVlJywgYm9yZGVyV2lkdGg6IDF9fT53aGljaCBoYXM8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2JvcmRlckNvbG9yOiAnZ3JlZW4nLCBib3JkZXJXaWR0aDogMX19PlxuICAgICAgICAgICAgICBhbm90aGVyIHRleHQgaW5zaWRlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tib3JkZXJDb2xvcjogJ3llbGxvdycsIGJvcmRlcldpZHRoOiAxfX0+XG4gICAgICAgICAgICAgIEFuZCBtb3Jlb3ZlciwgaXQgaGFzIGFub3RoZXIgdmlld1xuICAgICAgICAgICAgICA8SW5saW5lVmlldyBzdHlsZT17e2JvcmRlckNvbG9yOiAncmVkJywgYm9yZGVyV2lkdGg6IDF9fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e2JvcmRlckNvbG9yOiAnYmx1ZScsIGJvcmRlcldpZHRoOiAxfX0+XG4gICAgICAgICAgICAgICAgICB3aXRoIGFub3RoZXIgdGV4dCBpbnNpZGUhXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L0lubGluZVZpZXc+XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9JbmxpbmVWaWV3PlxuICAgICAgICAgIEJlY2F1c2Ugd2UgbmVlZCB0byBnbyBkZWVwZXIuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRHluYW1pYyBGb250IFNpemUgQWRqdXN0bWVudCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8QWRqdXN0aW5nRm9udFNpemUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVGV4dCBBbGlnbiB3aXRoIFJUTCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFRleHRBbGlnblJUTEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiBcIlRleHQgYGFsaWduSXRlbXM6ICdiYXNlbGluZSdgIHN0eWxlXCIsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFRleHRCYXNlTGluZUxheW91dEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVHJhbnNmb3JtJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSd9fT5cbiAgICAgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgdXBwZXJjYXNlZC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3t0ZXh0VHJhbnNmb3JtOiAnbG93ZXJjYXNlJ319PlxuICAgICAgICAgICAgVGhpcyBURVhUIFNIT1VMRCBiZSBsb3dlcmNhc2VkLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e3RleHRUcmFuc2Zvcm06ICdjYXBpdGFsaXplJ319PlxuICAgICAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBDQVBJVEFMSVpFRC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBDYXBpdGFsaXplIGEgZGF0ZTpcbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dFRyYW5zZm9ybTogJ2NhcGl0YWxpemUnfX0+XG4gICAgICAgICAgICAgIHRoZSA5dGggb2Ygbm92ZW1iZXIsIDE5OThcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBDYXBpdGFsaXplIGEgMiBkaWdpdCBkYXRlOlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3t0ZXh0VHJhbnNmb3JtOiAnY2FwaXRhbGl6ZSd9fT5cbiAgICAgICAgICAgICAgdGhlIDI1dGggb2YgZGVjZW1iZXJcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3t0ZXh0VHJhbnNmb3JtOiAnY2FwaXRhbGl6ZSd9fT5cbiAgICAgICAgICAgIE1peGVkOiA8VGV4dCBzdHlsZT17e3RleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnfX0+dXBwZXJjYXNlIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dFRyYW5zZm9ybTogJ2xvd2VyY2FzZSd9fT5Mb1dlUmNBc0UgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3t0ZXh0VHJhbnNmb3JtOiAnY2FwaXRhbGl6ZSd9fT5cbiAgICAgICAgICAgICAgY2FwaXRhbGl6ZSBlYWNoIHdvcmRcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBTaG91bGQgYmUgXCJBQkNcIjpcbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7dGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSd9fT5cbiAgICAgICAgICAgICAgYTxUZXh0PmI8L1RleHQ+Y1xuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIFNob3VsZCBiZSBcIkFiQ1wiOlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3t0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ319PlxuICAgICAgICAgICAgICBhPFRleHQgc3R5bGU9e3t0ZXh0VHJhbnNmb3JtOiAnbm9uZSd9fT5iPC9UZXh0PmNcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2VsZWN0YWJsZSBUZXh0JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7dXNlclNlbGVjdDogJ2F1dG8nfX0+VGV4dCBlbGVtZW50IGlzIHNlbGVjdGFibGU8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTGluZSBCcmVhayBTdHJhdGVneScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICBjb25zdCBsaW5lQnJlYWtTdHJhdGVneSA9IFsnbm9uZScsICdzdGFuZGFyZCcsICdoYW5ndWwtd29yZCcsICdwdXNoLW91dCddO1xuICAgICAgY29uc3QgdGV4dEJ5Q29kZSA9IHtcbiAgICAgICAgZW46ICdsaW5lQnJlYWtTdHJhdGVneSBsaW5lQnJlYWtTdHJhdGVneSBsaW5lQnJlYWtTdHJhdGVneSBsaW5lQnJlYWtTdHJhdGVneScsXG4gICAgICAgIGtvOiAn7ZWc6riA6rCc7ZaJIO2VnOq4gOqwnO2WiSDtlZzquIDqsJztlokg7ZWc6riA6rCc7ZaJIO2VnOq4gOqwnO2WiSDtlZzquIDqsJztlokg7ZWc6riA6rCc7ZaJIO2VnOq4gOqwnO2WiScsXG4gICAgICAgIGphOiAn44GL44GE44GO44KH44GGIOOBi+OBhOOBjuOCh+OBhiDjgYvjgYTjgY7jgofjgYYg44GL44GE44GO44KH44GGIOOBi+OBhOOBjuOCh+OBhiDjgYvjgYTjgY7jgofjgYYnLFxuICAgICAgICBjbjogJ+aUueihjCDmlLnooYwg5pS56KGMIOaUueihjCDmlLnooYwg5pS56KGMIOaUueihjCDmlLnooYwg5pS56KGMIOaUueihjCDmlLnooYwg5pS56KGMJyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIHtsaW5lQnJlYWtTdHJhdGVneS5tYXAoc3RyYXRlZ3kgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFZpZXcga2V5PXtzdHJhdGVneX0gc3R5bGU9e3ttYXJnaW5Cb3R0b206IDEyfX0+XG4gICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0Z3JleScsXG4gICAgICAgICAgICAgICAgICB9fT57YFN0cmF0ZWd5OiAke3N0cmF0ZWd5fWB9PC9UZXh0PlxuICAgICAgICAgICAgICAgIHtPYmplY3Qua2V5cyh0ZXh0QnlDb2RlKS5tYXAoY29kZSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8VmlldyBrZXk9e2NvZGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJ2JvbGQnfX0+e2BbJHtjb2RlfV1gfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBsaW5lQnJlYWtTdHJhdGVneUlPUz17c3RyYXRlZ3l9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3RleHRCeUNvZGVbY29kZV19XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0R5bmFtaWMgVHlwZSAoaU9TIG9ubHkpJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIGNvbnN0IGJvbGRTdHlsZSA9IHtmb250V2VpZ2h0OiAnYm9sZCd9O1xuICAgICAgY29uc3QgYm94U3R5bGUgPSB7XG4gICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICBwYWRkaW5nOiA4LFxuICAgICAgICBtYXJnaW46IDgsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3ttYXJnaW5Ub3A6IDEwLCBtYXJnaW5Cb3R0b206IDEwfX0+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBBZGp1c3QgdGV4dCBzaXplIGluIEFjY2Vzc2liaWxpdHkgc2V0dGluZ3MgYW5kIHdhdGNoIGhvdyB0aGUgZm9udFxuICAgICAgICAgICAgc2l6ZXMgY2hhbmdlIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtib3hTdHlsZX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17Ym9sZFN0eWxlfT5XaXRoIGBkeW5hbWljVHlwZVJhbXBgOjwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDM0fX0gZHluYW1pY1R5cGVSYW1wPVwibGFyZ2VUaXRsZVwiPlxuICAgICAgICAgICAgICBMYXJnZSBUaXRsZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMjh9fSBkeW5hbWljVHlwZVJhbXA9XCJ0aXRsZTFcIj5cbiAgICAgICAgICAgICAgVGl0bGVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDIyfX0gZHluYW1pY1R5cGVSYW1wPVwidGl0bGUyXCI+XG4gICAgICAgICAgICAgIFRpdGxlIDJcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDIwfX0gZHluYW1pY1R5cGVSYW1wPVwidGl0bGUzXCI+XG4gICAgICAgICAgICAgIFRpdGxlIDNcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDE3fX0gZHluYW1pY1R5cGVSYW1wPVwiYm9keVwiPlxuICAgICAgICAgICAgICBCb2R5XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtib3hTdHlsZX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17Ym9sZFN0eWxlfT5XaXRob3V0IGBkeW5hbWljVHlwZVJhbXBgOjwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDM0fX0+TGFyZ2UgVGl0bGU8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAyOH19PlRpdGxlPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMjJ9fT5UaXRsZSAyPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMjB9fT5UaXRsZSAzPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMTd9fT5Cb2R5PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSAoe1xuICB0aXRsZTogJ1RleHQnLFxuICBkb2N1bWVudGF0aW9uVVJMOiAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy90ZXh0JyxcbiAgY2F0ZWdvcnk6ICdCYXNpYycsXG4gIGRlc2NyaXB0aW9uOiAnQmFzZSBjb21wb25lbnQgZm9yIHJlbmRlcmluZyBzdHlsZWQgdGV4dC4nLFxuICBkaXNwbGF5TmFtZTogJ1RleHRFeGFtcGxlJyxcbiAgZXhhbXBsZXMsXG59OiBSTlRlc3Rlck1vZHVsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IFJOVE9wdGlvbiBmcm9tICcuL1JOVE9wdGlvbic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IFBBTkdSQU1TID0ge1xuICBhcmFiaWM6XG4gICAgJ9i12ZDZgSDYrtmO2YTZgtmOINiu2Y7ZiNiv2ZAg2YPZjtmF2ZDYq9mE2ZAg2KfZhNi02Y7Zhdiz2ZAg2KXZkNiwINio2Y7YstmO2LrZjtiqIOKAlCDZitmO2K3YuNmJINin2YTYttmO2KzZiti52Y8g2KjZkNmH2Kcg2YbZjtis2YTYp9ih2Y4g2YXZkNi52LfYp9ix2ZAnLFxuICBjaGluZXNlOiAnSW5ub3ZhdGlvbiBpbiBDaGluYSDkuK3lm73mmbrpgKDvvIzmhaflj4rlhajnkIMgMDEyMzQ1Njc4OScsXG4gIGVuZ2xpc2g6ICdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLicsXG4gIGVtb2ppOiAn8J+Zj/Cfj77wn5qX8J+SqfCfmI3wn6Sv8J+RqfCfj73igI3wn5Sn8J+HqPCfh6bwn5KvJyxcbiAgZ2VybWFuOiAnRmFsc2NoZXMgw5xiZW4gdm9uIFh5bG9waG9ubXVzaWsgcXXDpGx0IGplZGVuIGdyw7bDn2VyZW4gWndlcmcnLFxuICBncmVlazogJ86kzrHPh86vz4PPhM63IM6xzrvPjs+AzrfOviDOss6xz4bOrs+CIM+IzrfOvM6tzr3OtyDOs863LCDOtM+BzrHPg866zrXOu86vzrbOtc65IM+Fz4DOrc+BIM69z4nOuM+Bzr/PjSDOus+Fzr3PjM+CJyxcbiAgaGVicmV3OiAn15PXkiDXoden16jXnyDXqdeYINeR15nXnSDXnteQ15XXm9eW15Eg15XXnNek16rXoiDXntem15Ag15fXkdeo15QnLFxuICBoaW5kaTpcbiAgICAn4KSL4KS34KS/4KSv4KWL4KSCIOCkleCliyDgpLjgpKTgpL7gpKjgpYcg4KS14KS+4KSy4KWHIOCkpuClgeCkt+CljeCknyDgpLDgpL7gpJXgpY3gpLfgpLjgpYvgpIIg4KSV4KWHIOCksOCkvuCknOCkviDgpLDgpL7gpLXgpKMg4KSV4KS+IOCkuOCksOCljeCkteCkqOCkvuCktiDgpJXgpLDgpKjgpYcg4KS14KS+4KSy4KWHIOCkteCkv+Ckt+CljeCko+ClgeCkteCkpOCkvuCksCDgpK3gpJfgpLXgpL7gpKgg4KS24KWN4KSw4KWA4KSw4KS+4KSuLCDgpIXgpK/gpYvgpKfgpY3gpK/gpL4g4KSV4KWHIOCkruCkueCkvuCksOCkvuCknCDgpKbgpLbgpLDgpKUg4KSV4KWHIOCkrOCkoeCkvOClhyDgpLjgpKrgpYHgpKTgpY3gpLAg4KSl4KWH4KWkJyxcbiAgaWdibzogJ05uZSwgbm5hLCB3ZXDhu6UgaGXigJls4oCZ4bulauG7jSBkdW0gbuKAmWltZSDhu4164buleuG7pSDhu6Vt4bulLCB2dWZlc2kgb2JpIG55ZSBDaHVrd3UsIOG5heG7pXLhu4thbuG7pSwgZ2Jha+G7jeG7jW7hu6Uga3BhYSwga3dlZSB5YSBrYSBvIGd1em9zaGllIGlrZTsg4buNIGdoYWdo4buLIGl0bywgbndhcOG7pXRhIGV6aSBhZ3dhJyxcbiAgaXJpc2g6ICdE4oCZZmh1YXNjYWlsIMONb3NhIMOacm1oYWMgbmEgaMOTaWdoZSBCZWFubmFpdGhlIHDDs3Igw4lhdmEgYWd1cyDDgWRoYWltaCcsXG4gIGphcGFuZXNlOlxuICAgICfoibLjga/ljILjgbjjgakg5pWj44KK44Gs44KL44KSIOaIkeOBjOS4luiqsOOBniDluLjjgarjgonjgoAg5pyJ54K644Gu5aWl5bGxIOS7iuaXpei2iuOBiOOBpiDmtYXjgY3lpKLopovjgZgg6YWU44Gy44KC44Gb44GaJyxcbiAga29yZWFuOiAn7YKk7Iqk7J2YIOqzoOycoOyhsOqxtOydgCDsnoXsiKDrgbzrpqwg66eM64KY7JW8IO2VmOqzoCDtirnrs4TtlZwg6riw7Iig7J2AIO2VhOyalOy5mCDslYrri6QnLFxuICBub3J3ZWdpYW46XG4gICAgJ1bDpXIgc8OmcmUgWnVsdSBmcmEgYmFkZcO4eWEgc3BpbHRlIGpvIHdoaXN0IG9nIHF1aWNrc3RlcCBpIG1pbiB0YXhpLicsXG4gIHBvbGlzaDogJ0plxbx1IGtsxIV0dywgc3DFgsOzZMW6IEZpbm9tIGN6xJnFm8SHIGdyeSBoYcWEYiEnLFxuICByb21hbmlhbjogJ011emljb2xvZ8SDIMOubiBiZWogdsOibmQgd2hpc2t5IMiZaSB0ZXF1aWxhLCBwcmXImyBmaXguJyxcbiAgcnVzc2lhbjogJ9Ct0YUsINGH0YPQttCw0LosINC+0LHRidC40Lkg0YHRitGR0Lwg0YbQtdC9INGI0LvRj9C/ICjRjtGE0YLRjCkg4oCTINCy0LTRgNGL0LfQsyEnLFxuICBzd2VkaXNoOiAnWXhza2FmdGJ1ZCwgZ2UgdsOlciBXQy16b25tw7YgSVEtaGrDpGxwLicsXG4gIHRoYWk6ICfguYDguJvguYfguJnguKHguJnguLjguKnguKLguYzguKrguLjguJTguJvguKPguLDguYDguKrguKPguLTguJDguYDguKXguLTguKjguITguLjguJPguITguYjguLIg4LiB4Lin4LmI4Liy4Lia4Lij4Lij4LiU4Liy4Lid4Li54LiH4Liq4Lix4LiV4Lin4LmM4LmA4LiU4Lij4Lix4LiI4LiJ4Liy4LiZIOC4iOC4h+C4neC5iOC4suC4n+C4seC4meC4nuC4seC4kuC4meC4suC4p+C4tOC4iuC4suC4geC4suC4oyDguK3guKLguYjguLLguKXguYnguLLguIfguJzguKXguLLguI3guKTguYXguYDguILguYjguJnguIbguYjguLLguJrguLXguJHguLLguYPguITguKMg4LmE4Lih4LmI4LiW4Li34Lit4LmC4LiX4Lip4LmC4LiB4Lij4LiY4LmB4LiK4LmI4LiH4LiL4Lix4LiU4Liu4Li24LiU4Liu4Lix4LiU4LiU4LmI4LiyIOC4q+C4seC4lOC4reC4oOC4seC4ouC5gOC4q+C4oeC4t+C4reC4meC4geC4teC4rOC4suC4reC4seC4iuC4jOC4suC4quC4seC4oiDguJvguI/guLTguJrguLHguJXguLTguJvguKPguLDguJ7guKTguJXguLTguIHguI7guIHguLPguKvguJnguJTguYPguIgg4Lie4Li54LiU4LiI4Liy4LmD4Lir4LmJ4LiI4LmK4Liw4LmGIOC4iOC5i+C4suC5hiDguJnguYjguLLguJ/guLHguIfguYDguK3guKLguK8nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGV4dExlZ2VuZCgpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW2xhbmd1YWdlLCBzZXRMYW5ndWFnZV0gPSBSZWFjdC51c2VTdGF0ZSgnZW5nbGlzaCcpO1xuICBjb25zdCBbYWxpZ25tZW50LCBzZXRBbGlnbm1lbnRdID0gUmVhY3QudXNlU3RhdGUoJ2xlZnQnKTtcbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWVtcHR5LWFycmF5LWFubm90XVxuICBjb25zdCBbdGV4dE1ldHJpY3MsIHNldFRleHRNZXRyaWNzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSBSZWFjdC51c2VTdGF0ZSg1MCk7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dCBvblByZXNzPXsoKSA9PiBzZXRGb250U2l6ZShmb250U2l6ZSArIDMpfT5JbmNyZWFzZSBzaXplPC9UZXh0PlxuICAgICAgPFRleHQgb25QcmVzcz17KCkgPT4gc2V0Rm9udFNpemUoZm9udFNpemUgLSAzKX0+RGVjcmVhc2Ugc2l6ZTwvVGV4dD5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYmxvY2t9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfT5MYW5ndWFnZTwvVGV4dD5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhQQU5HUkFNUykubWFwKGxhbmcgPT4gKFxuICAgICAgICAgICAgPFJOVE9wdGlvblxuICAgICAgICAgICAgICBsYWJlbD17bGFuZ1swXS50b1VwcGVyQ2FzZSgpICsgbGFuZy5zdWJzdHJpbmcoMSl9XG4gICAgICAgICAgICAgIGtleT17bGFuZ31cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0TGFuZ3VhZ2UobGFuZyl9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXtsYW5nID09PSBsYW5ndWFnZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5vcHRpb259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8Vmlldz5cbiAgICAgICAge3RleHRNZXRyaWNzLm1hcChcbiAgICAgICAgICAoe3gsIHksIHdpZHRoLCBoZWlnaHQsIGNhcEhlaWdodCwgYXNjZW5kZXIsIGRlc2NlbmRlciwgeEhlaWdodH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAga2V5PVwiYmFzZWxpbmUgdmlld1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRvcDogeSArIGFzY2VuZGVyLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIGtleT1cImJhc2VsaW5lIHRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0b3A6IHkgKyBhc2NlbmRlcixcbiAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgQmFzZWxpbmVcbiAgICAgICAgICAgICAgPC9UZXh0PixcbiAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICBrZXk9XCJjYXBoZWlnaHQgdmlld1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRvcDogeSArIGFzY2VuZGVyIC0gY2FwSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAga2V5PVwiY2FwaGVpZ2h0IHRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0b3A6IHkgKyBhc2NlbmRlciAtIGNhcEhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICBDYXBoZWlnaHRcbiAgICAgICAgICAgICAgPC9UZXh0PixcbiAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICBrZXk9XCJ4aGVpZ2h0IHZpZXdcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0b3A6IHkgKyBhc2NlbmRlciAtIHhIZWlnaHQsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsXG4gICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIGtleT1cInhoZWlnaHQgdGV4dFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRvcDogeSArIGFzY2VuZGVyIC0geEhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIFgtaGVpZ2h0XG4gICAgICAgICAgICAgIDwvVGV4dD4sXG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAga2V5PVwiZGVzY2VuZGVyIHZpZXdcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0b3A6IHkgKyBhc2NlbmRlciArIGRlc2NlbmRlcixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnb3JhbmdlJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBrZXk9XCJkZXNjZW5kZXIgdGV4dFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRvcDogeSArIGFzY2VuZGVyICsgZGVzY2VuZGVyLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnb3JhbmdlJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICBEZXNjZW5kZXJcbiAgICAgICAgICAgICAgPC9UZXh0PixcbiAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICBrZXk9XCJlbmQgb2YgdGV4dCB2aWV3XCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiB5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCxcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYnJvd24nLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIGtleT1cImVuZCBvZiB0ZXh0IHRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0b3A6IHksXG4gICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggKyA1LFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2Jyb3duJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICBFbmQgb2YgdGV4dFxuICAgICAgICAgICAgICA8L1RleHQ+LFxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIGtleT1cInN0YXJ0IG9mIHRleHQgdmlld1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRvcDogeSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgICBsZWZ0OiB4LFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdicm93bicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAga2V5PVwic3RhcnQgb2YgdGV4dCB0ZXh0XCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiB5LFxuICAgICAgICAgICAgICAgICAgbGVmdDogeCArIDUsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYnJvd24nLFxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIFN0YXJ0IG9mIHRleHRcbiAgICAgICAgICAgICAgPC9UZXh0PixcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSxcbiAgICAgICAgKX1cbiAgICAgICAgPFRleHRcbiAgICAgICAgICBvblRleHRMYXlvdXQ9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHNldFRleHRNZXRyaWNzKGV2ZW50Lm5hdGl2ZUV2ZW50LmxpbmVzKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemUsXG4gICAgICAgICAgICB0ZXh0QWxpZ246IGFsaWdubWVudCxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICB7UEFOR1JBTVNbbGFuZ3VhZ2VdfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgIDxUZXh0PkFsaWdubWVudDo8L1RleHQ+XG4gICAgICAgIDxSTlRPcHRpb25cbiAgICAgICAgICBsYWJlbD1cIkxlZnQgQWxpZ25cIlxuICAgICAgICAgIGtleT1cImxlZnRfYWxpZ25cIlxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldEFsaWdubWVudCgnbGVmdCcpfVxuICAgICAgICAgIHNlbGVjdGVkPXthbGlnbm1lbnQgPT09ICdsZWZ0J31cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLm9wdGlvbn1cbiAgICAgICAgLz5cbiAgICAgICAgPFJOVE9wdGlvblxuICAgICAgICAgIGxhYmVsPVwiQ2VudGVyIEFsaWduXCJcbiAgICAgICAgICBrZXk9XCJjZW50ZXJfYWxpZ25cIlxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldEFsaWdubWVudCgnY2VudGVyJyl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2FsaWdubWVudCA9PT0gJ2NlbnRlcid9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5vcHRpb259XG4gICAgICAgIC8+XG4gICAgICAgIDxSTlRPcHRpb25cbiAgICAgICAgICBsYWJlbD1cIlJpZ2h0IEFsaWduXCJcbiAgICAgICAgICBrZXk9XCJyaWdodF9hbGlnblwiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0QWxpZ25tZW50KCdyaWdodCcpfVxuICAgICAgICAgIHNlbGVjdGVkPXthbGlnbm1lbnQgPT09ICdyaWdodCd9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5vcHRpb259XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvdzoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgbWFyZ2luOiA2LFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxuICB0aXRsZToge1xuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgfSxcbiAgYmxvY2s6IHtcbiAgICBib3JkZXJDb2xvcjogJ3JnYmEoMCwwLDAsIDAuMSknLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAxLFxuICAgIHBhZGRpbmc6IDYsXG4gIH0sXG4gIG9wdGlvbjoge1xuICAgIG1hcmdpbjogNCxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge0ltYWdlLCBUZXh0LCBUb3VjaGFibGVIaWdobGlnaHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmZ1bmN0aW9uIEJhc2ljKCk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gKFxuICAgIDxUZXh0PlxuICAgICAgVGhpcyB0ZXh0IGNvbnRhaW5zIGFuIGlubGluZSBibHVlIHZpZXd7JyAnfVxuICAgICAgPFZpZXcgc3R5bGU9e3t3aWR0aDogMjUsIGhlaWdodDogMjUsIGJhY2tncm91bmRDb2xvcjogJ3N0ZWVsYmx1ZSd9fSAvPiBhbmRcbiAgICAgIGFuIGlubGluZSBpbWFnZSA8SW1hZ2Ugc291cmNlPXtyZXF1aXJlKCcuLi9hc3NldHMvZmx1eC5wbmcnKX0gLz4uIE5lYXQsXG4gICAgICBodWg/XG4gICAgPC9UZXh0PlxuICApO1xufVxuXG5mdW5jdGlvbiBOZXN0ZWRUZXh0cygpOiBSZWFjdC5Ob2RlIHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0PlRoaXMgaXMgdGhlIGZpcnN0IHJvdzwvVGV4dD5cbiAgICAgIDxUZXh0PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8VGV4dD5UaGlzIGlzIGEgbmVzdGVkIHRleHQgPC9UZXh0PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXt7aGVpZ2h0OiAyMCwgd2lkdGg6IDIwLCBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnfX0gLz5cbiAgICAgICAgICA8VGV4dD4gd2l0aCBhIFJlZCBWaWV3PC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1RleHQ+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBDbGlwcGVkQnlUZXh0KCk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgey8qXG4gICAgICAgKiBJbmxpbmUgVmlld1xuICAgICAgICoqL31cbiAgICAgIDxUZXh0PlxuICAgICAgICBUaGUgPFRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiAnYm9sZCd9fT5pbmxpbmUgdmlldzwvVGV4dD4gYmVsb3cgaXNcbiAgICAgICAgdGFsbGVyIHRoYW4gaXRzIFRleHQgcGFyZW50IGFuZCBzaG91bGQgYmUgY2xpcHBlZC5cbiAgICAgIDwvVGV4dD5cbiAgICAgIDxUZXh0XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgIHdpZHRoOiAxNTAsXG4gICAgICAgICAgaGVpZ2h0OiA3NSxcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdsaWdodGdyZXknLFxuICAgICAgICB9fT5cbiAgICAgICAgVGhpcyBpcyBhbiBpbmxpbmUgdmlld1xuICAgICAgICB7LyogUmVuZGVyIGEgcmVkIGJvcmRlciBhcm91bmQgdGhlIHN0ZWVsYmx1ZSByZWN0YW5nbGUgdG8gbWFrZSBpdCBjbGVhciBob3cgdGhlIGlubGluZSB2aWV3IGlzIGJlaW5nIGNsaXBwZWQgKi99XG4gICAgICAgIDxWaWV3IHN0eWxlPXt7d2lkdGg6IDUwLCBoZWlnaHQ6IDEwMCwgYmFja2dyb3VuZENvbG9yOiAncmVkJ319PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogNDgsXG4gICAgICAgICAgICAgIGhlaWdodDogOTgsXG4gICAgICAgICAgICAgIGxlZnQ6IDEsXG4gICAgICAgICAgICAgIHRvcDogMSxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnc3RlZWxibHVlJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9UZXh0PlxuXG4gICAgICB7LypcbiAgICAgICAqIElubGluZSBJbWFnZVxuICAgICAgICoqL31cbiAgICAgIDxUZXh0IHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19PlxuICAgICAgICBUaGUgPFRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiAnYm9sZCd9fT5pbmxpbmUgaW1hZ2U8L1RleHQ+IGJlbG93IGlzXG4gICAgICAgIHRhbGxlciB0aGFuIGl0cyBUZXh0IHBhcmVudCBhbmQgc2hvdWxkIGJlIGNsaXBwZWQuXG4gICAgICA8L1RleHQ+XG4gICAgICA8VGV4dFxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICB3aWR0aDogMTc1LFxuICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0Z3JleScsXG4gICAgICAgIH19PlxuICAgICAgICBUaGlzIGlzIGFuIGlubGluZSBpbWFnZVxuICAgICAgICA8SW1hZ2VcbiAgICAgICAgICBzb3VyY2U9e3tcbiAgICAgICAgICAgIHVyaTogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy8xMDAnLFxuICAgICAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVGV4dD5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbnR5cGUgQ2hhbmdlU2l6ZVN0YXRlID0ge3xcbiAgd2lkdGg6IG51bWJlcixcbnx9O1xuXG5jbGFzcyBDaGFuZ2VJbWFnZVNpemUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8bWl4ZWQsIENoYW5nZVNpemVTdGF0ZT4ge1xuICBzdGF0ZTogQ2hhbmdlU2l6ZVN0YXRlID0ge1xuICAgIHdpZHRoOiA1MCxcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7d2lkdGg6IHRoaXMuc3RhdGUud2lkdGggPT09IDUwID8gMTAwIDogNTB9KTtcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxNX19PlxuICAgICAgICAgICAgQ2hhbmdlIEltYWdlIFdpZHRoICh3aWR0aD17dGhpcy5zdGF0ZS53aWR0aH0pXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgVGhpcyBpcyBhblxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc291cmNlPXt7XG4gICAgICAgICAgICAgIHVyaTogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy81MCcsXG4gICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIGlubGluZSBpbWFnZVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBDaGFuZ2VWaWV3U2l6ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxtaXhlZCwgQ2hhbmdlU2l6ZVN0YXRlPiB7XG4gIHN0YXRlOiBDaGFuZ2VTaXplU3RhdGUgPSB7XG4gICAgd2lkdGg6IDUwLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt3aWR0aDogdGhpcy5zdGF0ZS53aWR0aCA9PT0gNTAgPyAxMDAgOiA1MH0pO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDE1fX0+XG4gICAgICAgICAgICBDaGFuZ2UgVmlldyBXaWR0aCAod2lkdGg9e3RoaXMuc3RhdGUud2lkdGh9KVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIFRoaXMgaXMgYW5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuc3RhdGUud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogNTAsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3N0ZWVsYmx1ZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgaW5saW5lIHZpZXdcbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQ2hhbmdlSW5uZXJWaWV3U2l6ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxtaXhlZCwgQ2hhbmdlU2l6ZVN0YXRlPiB7XG4gIHN0YXRlOiBDaGFuZ2VTaXplU3RhdGUgPSB7XG4gICAgd2lkdGg6IDUwLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt3aWR0aDogdGhpcy5zdGF0ZS53aWR0aCA9PT0gNTAgPyAxMDAgOiA1MH0pO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIHsvKiBXaGVuIHVwZGF0aW5nIGBzdGF0ZS53aWR0aGAsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG9ubHkgdGhpbmcgdGhhdFxuICAgICAgICAgICAgICBjaGFuZ2VzIGlzIHRoZSB3aWR0aCBvZiB0aGUgcGluayBpbmxpbmUgdmlldy4gV2hlbiB3ZSBkbyB0aGlzLCB3ZVxuICAgICAgICAgICAgICBkZW1vbnN0cmF0ZSBhIGJ1ZyBpbiBSTiBBbmRyb2lkIHdoZXJlIHRoZSBwaW5rIHZpZXcgZG9lc24ndCBnZXRcbiAgICAgICAgICAgICAgcmVyZW5kZXJlZCBhbmQgcmVtYWlucyBhdCBpdHMgb2xkIHNpemUuIElmIG90aGVyIHRoaW5ncyBjaGFuZ2VcbiAgICAgICAgICAgICAgKGUuZy4gd2UgZGlzcGxheSBgc3RhdGUud2lkdGhgIGFzIHRleHQgc29tZXdoZXJlKSBpdCBjb3VsZCBjaXJjdW12ZW50XG4gICAgICAgICAgICAgIHRoZSBidWcgYW5kIGNhdXNlIHRoZSBwaW5rIHZpZXcgdG8gYmUgcmVyZW5kZXJlZCBhdCBpdHMgbmV3IHNpemUuICovfVxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDE1fX0+Q2hhbmdlIFBpbmsgVmlldyBXaWR0aDwvVGV4dD5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIFRoaXMgaXMgYW5cbiAgICAgICAgICA8VmlldyBzdHlsZT17e3dpZHRoOiAxMjUsIGhlaWdodDogNzUsIGJhY2tncm91bmRDb2xvcjogJ3N0ZWVsYmx1ZSd9fT5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuc3RhdGUud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdwaW5rJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIGlubGluZSB2aWV3XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCYXNpYyxcbiAgTmVzdGVkVGV4dHMsXG4gIENsaXBwZWRCeVRleHQsXG4gIENoYW5nZUltYWdlU2l6ZSxcbiAgQ2hhbmdlVmlld1NpemUsXG4gIENoYW5nZUlubmVyVmlld1NpemUsXG59O1xuIiwiIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJOVGVzdGVyTW9kdWxlLFxuICBSTlRlc3Rlck1vZHVsZUV4YW1wbGUsXG59IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuaW1wb3J0IHR5cGUge0tleWJvYXJkVHlwZX0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQnO1xuXG5jb25zdCBUZXh0SW5wdXRTaGFyZWRFeGFtcGxlcyA9IHJlcXVpcmUoJy4vVGV4dElucHV0U2hhcmVkRXhhbXBsZXMuanMnKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQWxlcnQsXG4gIEJ1dHRvbixcbiAgSW5wdXRBY2Nlc3NvcnlWaWV3LFxuICBTdHlsZVNoZWV0LFxuICBTd2l0Y2gsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY2xhc3MgV2l0aExhYmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubGFiZWxDb250YWluZXJ9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxhYmVsfT5cbiAgICAgICAgICA8VGV4dD57dGhpcy5wcm9wcy5sYWJlbH08L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBUZXh0SW5wdXRBY2Nlc3NvcnlWaWV3Q2hhbmdlVGV4dEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHsuLi59LFxuICB7dGV4dDogc3RyaW5nfSxcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogdm9pZCB8IHsuLi59KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7dGV4dDogJ1BsYWNlaG9sZGVyIFRleHQnfTtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBpbnB1dEFjY2Vzc29yeVZpZXdJRCA9ICdpbnB1dEFjY2Vzc29yeVZpZXcxJztcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0PlNldCBJbnB1dEFjY2Vzc29yeVZpZXcgd2l0aCBJRCAmIHJlc2V0IHRleHQ6PC9UZXh0PlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgIGlucHV0QWNjZXNzb3J5Vmlld0lEPXtpbnB1dEFjY2Vzc29yeVZpZXdJRH1cbiAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RleHQgPT4gdGhpcy5zZXRTdGF0ZSh7dGV4dH0pfVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnRleHR9XG4gICAgICAgIC8+XG4gICAgICAgIDxJbnB1dEFjY2Vzc29yeVZpZXcgbmF0aXZlSUQ9e2lucHV0QWNjZXNzb3J5Vmlld0lEfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJ3doaXRlJ319PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0OiAnUGxhY2Vob2xkZXIgVGV4dCd9KX1cbiAgICAgICAgICAgICAgdGl0bGU9XCJSZXNldCBUZXh0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L0lucHV0QWNjZXNzb3J5Vmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRleHRJbnB1dEFjY2Vzc29yeVZpZXdDaGFuZ2VLZXlib2FyZEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHsuLi59LFxuICB7a2V5Ym9hcmRUeXBlOiBzdHJpbmcsIHRleHQ6IHN0cmluZ30sXG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IHZvaWQgfCB7Li4ufSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge3RleHQ6ICcnLCBrZXlib2FyZFR5cGU6ICdkZWZhdWx0J307XG4gIH1cblxuICBfc3dpdGNoS2V5Ym9hcmQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBrZXlib2FyZFR5cGU6XG4gICAgICAgIHRoaXMuc3RhdGUua2V5Ym9hcmRUeXBlID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyLXBhZCcgOiAnZGVmYXVsdCcsXG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGlucHV0QWNjZXNzb3J5Vmlld0lEID0gJ2lucHV0QWNjZXNzb3J5VmlldzInO1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQ+U2V0IElucHV0QWNjZXNzb3J5VmlldyB3aXRoIElEICYgc3dpdGNoIGtleWJvYXJkOjwvVGV4dD5cbiAgICAgICAgey8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gKi99XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgaW5wdXRBY2Nlc3NvcnlWaWV3SUQ9e2lucHV0QWNjZXNzb3J5Vmlld0lEfVxuICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGV4dCA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0fSl9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudGV4dH1cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICAgIGtleWJvYXJkVHlwZT17dGhpcy5zdGF0ZS5rZXlib2FyZFR5cGV9XG4gICAgICAgICAgcmV0dXJuS2V5VHlwZT1cImRvbmVcIlxuICAgICAgICAvPlxuICAgICAgICA8SW5wdXRBY2Nlc3NvcnlWaWV3IG5hdGl2ZUlEPXtpbnB1dEFjY2Vzc29yeVZpZXdJRH0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSd9fT5cbiAgICAgICAgICAgIDxCdXR0b24gb25QcmVzcz17dGhpcy5fc3dpdGNoS2V5Ym9hcmR9IHRpdGxlPVwiU3dpdGNoIEtleWJvYXJkXCIgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvSW5wdXRBY2Nlc3NvcnlWaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgVGV4dElucHV0QWNjZXNzb3J5Vmlld0RlZmF1bHREb25lQnV0dG9uRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJFJlYWRPbmx5PHt8XG4gICAga2V5Ym9hcmRUeXBlOiBLZXlib2FyZFR5cGUsXG4gIHx9PixcbiAge3RleHQ6IHN0cmluZ30sXG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IHZvaWQgfCAkUmVhZE9ubHk8e2tleWJvYXJkVHlwZTogS2V5Ym9hcmRUeXBlfT4pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHt0ZXh0OiAnJ307XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICBvbkNoYW5nZVRleHQ9e3RleHQgPT4gdGhpcy5zZXRTdGF0ZSh7dGV4dH0pfVxuICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS50ZXh0fVxuICAgICAgICBrZXlib2FyZFR5cGU9e3RoaXMucHJvcHMua2V5Ym9hcmRUeXBlfVxuICAgICAgICByZXR1cm5LZXlUeXBlPVwiZG9uZVwiXG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgUmV3cml0ZUV4YW1wbGVLYW5hIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkgfCB2b2lkKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7dGV4dDogJyd9O1xuICB9XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yZXdyaXRlQ29udGFpbmVyfT5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIG11bHRpbGluZT17ZmFsc2V9XG4gICAgICAgICAgb25DaGFuZ2VUZXh0PXt0ZXh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHQ6IHRleHQucmVwbGFjZSgv44GyL2csICfml6UnKX0pO1xuICAgICAgICAgIH19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnRleHR9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTZWN1cmVFbnRyeUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8JEZsb3dGaXhNZVByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSB8IHZvaWQpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRleHQ6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgaXNTZWN1cmVUZXh0RW50cnk6IHRydWUsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgc2VjdXJlVGV4dEVudHJ5PXt0cnVlfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9XCJhYmNcIlxuICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGV4dCA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0fSl9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudGV4dH1cbiAgICAgICAgLz5cbiAgICAgICAgPFRleHQ+Q3VycmVudCB0ZXh0IGlzOiB7dGhpcy5zdGF0ZS50ZXh0fTwvVGV4dD5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT1cImNkZVwiXG4gICAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RleHQgPT4gdGhpcy5zZXRTdGF0ZSh7cGFzc3dvcmQ6IHRleHR9KX1cbiAgICAgICAgICAgIHNlY3VyZVRleHRFbnRyeT17dGhpcy5zdGF0ZS5pc1NlY3VyZVRleHRFbnRyeX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBhc3N3b3JkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17dmFsdWUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtpc1NlY3VyZVRleHRFbnRyeTogdmFsdWV9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzdHlsZT17e21hcmdpbkxlZnQ6IDR9fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuaXNTZWN1cmVUZXh0RW50cnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQXV0b2dyb3dpbmdUZXh0SW5wdXRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAkRmxvd0ZpeE1lUHJvcHMsXG4gICRGbG93Rml4TWVTdGF0ZSxcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55IHwgdm9pZCkge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBtdWx0aWxpbmU6IHRydWUsXG4gICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIGNvbnRlbnRTaXplOiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wczogYW55KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBtdWx0aWxpbmU6IHByb3BzLm11bHRpbGluZSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCB7c3R5bGUsIG11bHRpbGluZSwgLi4ucHJvcHN9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0PkZ1bGwgd2lkdGg6PC9UZXh0PlxuICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZnVsbFdpZHRofVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3ZhbHVlID0+IHRoaXMuc2V0U3RhdGUoe2Z1bGxXaWR0aDogdmFsdWV9KX1cbiAgICAgICAgLz5cblxuICAgICAgICA8VGV4dD5NdWx0aWxpbmU6PC9UZXh0PlxuICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubXVsdGlsaW5lfVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3ZhbHVlID0+IHRoaXMuc2V0U3RhdGUoe211bHRpbGluZTogdmFsdWV9KX1cbiAgICAgICAgLz5cblxuICAgICAgICA8VGV4dD5UZXh0SW5wdXQ6PC9UZXh0PlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgdmFsdWU9XCJwcm9wXCJcbiAgICAgICAgICBtdWx0aWxpbmU9e3RoaXMuc3RhdGUubXVsdGlsaW5lfVxuICAgICAgICAgIHN0eWxlPXtbc3R5bGUsIHt3aWR0aDogdGhpcy5zdGF0ZS5mdWxsV2lkdGggPyAnMTAwJScgOiAnNTAlJ31dfVxuICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dmFsdWUgPT4gdGhpcy5zZXRTdGF0ZSh7dGV4dDogdmFsdWV9KX1cbiAgICAgICAgICBvbkNvbnRlbnRTaXplQ2hhbmdlPXtldmVudCA9PlxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y29udGVudFNpemU6IGV2ZW50Lm5hdGl2ZUV2ZW50LmNvbnRlbnRTaXplfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dD5QbGFpbiB0ZXh0IHZhbHVlIHJlcHJlc2VudGF0aW9uOjwvVGV4dD5cbiAgICAgICAgPFRleHQ+e3RoaXMuc3RhdGUudGV4dH08L1RleHQ+XG4gICAgICAgIDxUZXh0PkNvbnRlbnQgU2l6ZToge0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuY29udGVudFNpemUpfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgZGVmYXVsdDoge1xuICAgIGJvcmRlcldpZHRoOiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGgsXG4gICAgYm9yZGVyQ29sb3I6ICcjMGYwZjBmJyxcbiAgICBmbGV4OiAxLFxuICAgIGZvbnRTaXplOiAxMyxcbiAgICBwYWRkaW5nOiA0LFxuICB9LFxuICBtdWx0aWxpbmU6IHtcbiAgICBib3JkZXJXaWR0aDogU3R5bGVTaGVldC5oYWlybGluZVdpZHRoLFxuICAgIGJvcmRlckNvbG9yOiAnIzBmMGYwZicsXG4gICAgZmxleDogMSxcbiAgICBmb250U2l6ZTogMTMsXG4gICAgaGVpZ2h0OiA1MCxcbiAgICBwYWRkaW5nOiA0LFxuICAgIG1hcmdpbkJvdHRvbTogNCxcbiAgfSxcbiAgbXVsdGlsaW5lUGxhY2Vob2xkZXJTdHlsZXM6IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiAxMCxcbiAgICBsaW5lSGVpZ2h0OiAyMCxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB9LFxuICBtdWx0aWxpbmVFeHBhbmRhYmxlOiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgbWF4SGVpZ2h0OiAxMDAsXG4gIH0sXG4gIG11bHRpbGluZVdpdGhGb250U3R5bGVzOiB7XG4gICAgY29sb3I6ICdibHVlJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6IDE4LFxuICAgIGZvbnRGYW1pbHk6ICdDb2NoaW4nLFxuICAgIGhlaWdodDogNjAsXG4gIH0sXG4gIHNpbmdsZWxpbmVQbGFjZWhvbGRlclN0eWxlczoge1xuICAgIGxldHRlclNwYWNpbmc6IDEwLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIH0sXG4gIGxhYmVsQ29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgbWFyZ2luVmVydGljYWw6IDIsXG4gICAgZmxleDogMSxcbiAgfSxcbiAgbGFiZWw6IHtcbiAgICB3aWR0aDogMTE1LFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcsXG4gICAgbWFyZ2luUmlnaHQ6IDEwLFxuICAgIHBhZGRpbmdUb3A6IDIsXG4gIH0sXG4gIHJld3JpdGVDb250YWluZXI6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgcmVtYWluZGVyOiB7XG4gICAgdGV4dEFsaWduOiAncmlnaHQnLFxuICAgIHdpZHRoOiAyNCxcbiAgfSxcbn0pO1xuXG5jb25zdCB0ZXh0SW5wdXRFeGFtcGxlczogQXJyYXk8Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlPiA9IFtcbiAgLi4uVGV4dElucHV0U2hhcmVkRXhhbXBsZXMsXG4gIHtcbiAgICB0aXRsZTogJ0xpdmUgUmUtV3JpdGUgKOOBsiAtPiDml6UpJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8UmV3cml0ZUV4YW1wbGVLYW5hIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0tleWJvYXJkIElucHV0IEFjY2Vzc29yeSBWaWV3JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0SW5wdXRBY2Nlc3NvcnlWaWV3Q2hhbmdlVGV4dEV4YW1wbGUgLz5cbiAgICAgICAgICA8VGV4dElucHV0QWNjZXNzb3J5Vmlld0NoYW5nZUtleWJvYXJkRXhhbXBsZSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogXCJEZWZhdWx0IElucHV0IEFjY2Vzc29yeSBWaWV3IHdpdGggcmV0dXJuS2V5VHlwZSA9ICdkb25lJ1wiLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgY29uc3Qga2V5Ym9hcmRUeXBlc1dpdGhEb25lQnV0dG9uID0gW1xuICAgICAgICAnbnVtYmVyLXBhZCcsXG4gICAgICAgICdwaG9uZS1wYWQnLFxuICAgICAgICAnZGVjaW1hbC1wYWQnLFxuICAgICAgICAnYXNjaWktY2FwYWJsZS1udW1iZXItcGFkJyxcbiAgICAgIF07XG4gICAgICBjb25zdCBleGFtcGxlcyA9IGtleWJvYXJkVHlwZXNXaXRoRG9uZUJ1dHRvbi5tYXAodHlwZSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFdpdGhMYWJlbCBrZXk9eydrZXlib2FyZFR5cGU6ICcgKyB0eXBlfSBsYWJlbD17dHlwZX0+XG4gICAgICAgICAgICA8VGV4dElucHV0QWNjZXNzb3J5Vmlld0RlZmF1bHREb25lQnV0dG9uRXhhbXBsZVxuICAgICAgICAgICAgICBrZXk9e3R5cGV9XG4gICAgICAgICAgICAgIGtleWJvYXJkVHlwZT17dHlwZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiA8Vmlldz57ZXhhbXBsZXN9PC9WaWV3PjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdOZXN0ZWQgY29udGVudCBhbmQgYHZhbHVlYCBwcm9wZXJ0eScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwic2luZ2xlbGluZVwiPlxuICAgICAgICAgICAgPFRleHRJbnB1dCBzdHlsZT17c3R5bGVzLmRlZmF1bHR9IHZhbHVlPVwiKHZhbHVlIHByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAoZmlyc3QgcmF3IHRleHQgbm9kZSlcbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ3JlZCd9fT4oaW50ZXJuYWwgcmF3IHRleHQgbm9kZSk8L1RleHQ+XG4gICAgICAgICAgICAgIChsYXN0IHJhdyB0ZXh0IG5vZGUpXG4gICAgICAgICAgICA8L1RleHRJbnB1dD5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwibXVsdGlsaW5lXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgICAgICAgICB2YWx1ZT1cIih2YWx1ZSBwcm9wZXJ0eSlcIj5cbiAgICAgICAgICAgICAgKGZpcnN0IHJhdyB0ZXh0IG5vZGUpXG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Y29sb3I6ICdyZWQnfX0+KGludGVybmFsIHJhdyB0ZXh0IG5vZGUpPC9UZXh0PlxuICAgICAgICAgICAgICAobGFzdCByYXcgdGV4dCBub2RlKVxuICAgICAgICAgICAgPC9UZXh0SW5wdXQ+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmQgYXBwZWFyYW5jZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICBjb25zdCBrZXlib2FyZEFwcGVhcmFuY2UgPSBbJ2RlZmF1bHQnLCAnbGlnaHQnLCAnZGFyayddO1xuICAgICAgY29uc3QgZXhhbXBsZXMgPSBrZXlib2FyZEFwcGVhcmFuY2UubWFwKHR5cGUgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxXaXRoTGFiZWwga2V5PXt0eXBlfSBsYWJlbD17dHlwZX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGtleWJvYXJkQXBwZWFyYW5jZT17dHlwZX0gc3R5bGU9e3N0eWxlcy5kZWZhdWx0fSAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gPFZpZXc+e2V4YW1wbGVzfTwvVmlldz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUmV0dXJuIGtleSB0eXBlcycsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICBjb25zdCByZXR1cm5LZXlUeXBlcyA9IFtcbiAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAnZ28nLFxuICAgICAgICAnZ29vZ2xlJyxcbiAgICAgICAgJ2pvaW4nLFxuICAgICAgICAnbmV4dCcsXG4gICAgICAgICdyb3V0ZScsXG4gICAgICAgICdzZWFyY2gnLFxuICAgICAgICAnc2VuZCcsXG4gICAgICAgICd5YWhvbycsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgJ2VtZXJnZW5jeS1jYWxsJyxcbiAgICAgIF07XG4gICAgICBjb25zdCBleGFtcGxlcyA9IHJldHVybktleVR5cGVzLm1hcCh0eXBlID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8V2l0aExhYmVsIGtleT17dHlwZX0gbGFiZWw9e3R5cGV9PlxuICAgICAgICAgICAgPFRleHRJbnB1dCByZXR1cm5LZXlUeXBlPXt0eXBlfSBzdHlsZT17c3R5bGVzLmRlZmF1bHR9IC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiA8Vmlldz57ZXhhbXBsZXN9PC9WaWV3PjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdFbmFibGUgcmV0dXJuIGtleSBhdXRvbWF0aWNhbGx5JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJ0cnVlXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIGVuYWJsZXNSZXR1cm5LZXlBdXRvbWF0aWNhbGx5PXt0cnVlfVxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1NlY3VyZSB0ZXh0IGVudHJ5JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8U2VjdXJlRW50cnlFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0NvbG9yZWQgaW5wdXQgdGV4dCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5kZWZhdWx0LCB7Y29sb3I6ICdibHVlJ31dfVxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPVwiQmx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5kZWZhdWx0LCB7Y29sb3I6ICdncmVlbid9XX1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT1cIkdyZWVuXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0NvbG9yZWQgaGlnaGxpZ2h0L2N1cnNvciBmb3IgdGV4dCBpbnB1dCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICBzZWxlY3Rpb25Db2xvcj17J2dyZWVuJ31cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT1cIkhpZ2hsaWdodCBtZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICBzZWxlY3Rpb25Db2xvcj17J3JnYmEoODYsIDc2LCAyMDUsIDEpJ31cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT1cIkhpZ2hsaWdodCBtZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDbGVhciBidXR0b24gbW9kZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICBjb25zdCBjbGVhckJ1dHRvbk1vZGVzID0gW1xuICAgICAgICAnbmV2ZXInLFxuICAgICAgICAnd2hpbGUtZWRpdGluZycsXG4gICAgICAgICd1bmxlc3MtZWRpdGluZycsXG4gICAgICAgICdhbHdheXMnLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4YW1wbGVzID0gY2xlYXJCdXR0b25Nb2Rlcy5tYXAobW9kZSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFdpdGhMYWJlbCBrZXk9e21vZGV9IGxhYmVsPXttb2RlfT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgICBjbGVhckJ1dHRvbk1vZGU9e21vZGV9XG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17bW9kZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiA8Vmlldz57ZXhhbXBsZXN9PC9WaWV3PjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDbGVhciBhbmQgc2VsZWN0JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJjbGVhclRleHRPbkZvY3VzXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwidGV4dCBpcyBjbGVhcmVkIG9uIGZvY3VzXCJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPVwidGV4dCBpcyBjbGVhcmVkIG9uIGZvY3VzXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgICBjbGVhclRleHRPbkZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwic2VsZWN0VGV4dE9uRm9jdXNcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ0ZXh0IGlzIHNlbGVjdGVkIG9uIGZvY3VzXCJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPVwidGV4dCBpcyBzZWxlY3RlZCBvbiBmb2N1c1wiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgICAgc2VsZWN0VGV4dE9uRm9jdXM9e3RydWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJjbGVhclRleHRPbkZvY3VzIChtdWx0aWxpbmUpXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwidGV4dCBpcyBjbGVhcmVkIG9uIGZvY3VzXCJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPVwidGV4dCBpcyBjbGVhcmVkIG9uIGZvY3VzXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgICBjbGVhclRleHRPbkZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgICBtdWx0aWxpbmU9e3RydWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJzZWxlY3RUZXh0T25Gb2N1cyAobXVsdGlsaW5lKVwiPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInRleHQgaXMgc2VsZWN0ZWQgb24gZm9jdXNcIlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9XCJ0ZXh0IGlzIHNlbGVjdGVkIG9uIGZvY3VzXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgICBzZWxlY3RUZXh0T25Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNdWx0aWxpbmUgYmx1ciBvbiBzdWJtaXQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5tdWx0aWxpbmV9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImJsdXJPblN1Ym1pdCA9IHRydWVcIlxuICAgICAgICAgICAgcmV0dXJuS2V5VHlwZT1cIm5leHRcIlxuICAgICAgICAgICAgYmx1ck9uU3VibWl0PXt0cnVlfVxuICAgICAgICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXtldmVudCA9PlxuICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCBldmVudC5uYXRpdmVFdmVudC50ZXh0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTXVsdGlsaW5lJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwibXVsdGlsaW5lIHRleHQgaW5wdXRcIlxuICAgICAgICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5tdWx0aWxpbmV9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIm11bHRpbGluZSB0ZXh0IGlucHV0IHdpdGggZm9udCBzdHlsZXMgYW5kIHBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIG11bHRpbGluZT17dHJ1ZX1cbiAgICAgICAgICAgIGNsZWFyVGV4dE9uRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29ycmVjdD17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9DYXBpdGFsaXplPVwid29yZHNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0Q29sb3I9XCJyZWRcIlxuICAgICAgICAgICAga2V5Ym9hcmRUeXBlPVwidXJsXCJcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLm11bHRpbGluZSwgc3R5bGVzLm11bHRpbGluZVdpdGhGb250U3R5bGVzXX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwibXVsdGlsaW5lIHRleHQgaW5wdXQgd2l0aCBtYXggbGVuZ3RoXCJcbiAgICAgICAgICAgIG1heExlbmd0aD17NX1cbiAgICAgICAgICAgIG11bHRpbGluZT17dHJ1ZX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMubXVsdGlsaW5lfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ1bmVkaXRhYmxlIG11bHRpbGluZSB0ZXh0IGlucHV0XCJcbiAgICAgICAgICAgIGVkaXRhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgIG11bHRpbGluZT17dHJ1ZX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMubXVsdGlsaW5lfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPVwidW5lZGl0YWJsZSBtdWx0aWxpbmUgdGV4dCBpbnB1dCB3aXRoIHBob25lIG51bWJlciBkZXRlY3Rpb246IDg4ODg4ODg4LlwiXG4gICAgICAgICAgICBlZGl0YWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBtdWx0aWxpbmU9e3RydWV9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLm11bHRpbGluZX1cbiAgICAgICAgICAgIGRhdGFEZXRlY3RvclR5cGVzPVwicGhvbmVOdW1iZXJcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRWRpdGFibGUgYW5kIFJlYWQgb25seScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVkaXRhYmxlIHRleHQgaW5wdXQgdXNpbmcgZWRpdGFibGUgcHJvcFwiXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICBlZGl0YWJsZVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ1bmVkaXRhYmxlIHRleHQgaW5wdXQgdXNpbmcgZWRpdGFibGUgcHJvcFwiXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICBlZGl0YWJsZT17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVkaXRhYmxlIHRleHQgaW5wdXQgdXNpbmcgcmVhZE9ubHkgcHJvcFwiXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICByZWFkT25seT17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInVuZWRpdGFibGUgdGV4dCBpbnB1dCB1c2luZyByZWFkT25seSBwcm9wXCJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgIHJlYWRPbmx5XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0SW5wdXQgSW50cmluc2ljIFNpemUnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+U2luZ2xlbGluZSBUZXh0SW5wdXQ8L1RleHQ+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3toZWlnaHQ6IDgwfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWVlZWUnLFxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnIzY2NjY2NicsXG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDUsXG4gICAgICAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IDIwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTAsXG4gICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IDIwLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDIwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJzaW5nbGVsaW5lX3RleHRpbnB1dFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXIgZGVmaW5lcyBpbnRyaW5zaWMgc2l6ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8VGV4dD5NdWx0aWxpbmUgVGV4dElucHV0PC9UZXh0PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXt7aGVpZ2h0OiAxMzB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZWVlZScsXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjNjY2NjY2JyxcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogNSxcbiAgICAgICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogMjAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMCxcbiAgICAgICAgICAgICAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogMjAsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMjAsXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cIm11bHRpbGluZV90ZXh0aW5wdXRcIlxuICAgICAgICAgICAgICBtdWx0aWxpbmU9e3RydWV9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXIgZGVmaW5lcyBpbnRyaW5zaWMgc2l6ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZWVlZScsXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjNjY2NjY2JyxcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogNSxcbiAgICAgICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogMjAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMCxcbiAgICAgICAgICAgICAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogMjAsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMjAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cIm11bHRpbGluZV90ZXh0aW5wdXRfd2l0aF9mbGV4XCJcbiAgICAgICAgICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyIGRlZmluZXMgaW50cmluc2ljIHNpemVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQXV0by1leHBhbmRpbmcnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJoZWlnaHQgaW5jcmVhc2VzIHdpdGggY29udGVudFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9XCJSZWFjdCBOYXRpdmUgZW5hYmxlcyB5b3UgdG8gYnVpbGQgd29ybGQtY2xhc3MgYXBwbGljYXRpb24gZXhwZXJpZW5jZXMgb24gbmF0aXZlIHBsYXRmb3JtcyB1c2luZyBhIGNvbnNpc3RlbnQgZGV2ZWxvcGVyIGV4cGVyaWVuY2UgYmFzZWQgb24gSmF2YVNjcmlwdCBhbmQgUmVhY3QuIFRoZSBmb2N1cyBvZiBSZWFjdCBOYXRpdmUgaXMgb24gZGV2ZWxvcGVyIGVmZmljaWVuY3kgYWNyb3NzIGFsbCB0aGUgcGxhdGZvcm1zIHlvdSBjYXJlIGFib3V0IC0gbGVhcm4gb25jZSwgd3JpdGUgYW55d2hlcmUuIEZhY2Vib29rIHVzZXMgUmVhY3QgTmF0aXZlIGluIG11bHRpcGxlIHByb2R1Y3Rpb24gYXBwcyBhbmQgd2lsbCBjb250aW51ZSBpbnZlc3RpbmcgaW4gUmVhY3QgTmF0aXZlLlwiXG4gICAgICAgICAgICBtdWx0aWxpbmU9e3RydWV9XG4gICAgICAgICAgICBlbmFibGVzUmV0dXJuS2V5QXV0b21hdGljYWxseT17dHJ1ZX1cbiAgICAgICAgICAgIHJldHVybktleVR5cGU9XCJnb1wiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5tdWx0aWxpbmUsIHN0eWxlcy5tdWx0aWxpbmVFeHBhbmRhYmxlXX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0F1dG8tZXhwYW5kaW5nJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxBdXRvZ3Jvd2luZ1RleHRJbnB1dEV4YW1wbGVcbiAgICAgICAgICAgIGVuYWJsZXNSZXR1cm5LZXlBdXRvbWF0aWNhbGx5PXt0cnVlfVxuICAgICAgICAgICAgcmV0dXJuS2V5VHlwZT1cImRvbmVcIlxuICAgICAgICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0OiA0MDAsXG4gICAgICAgICAgICAgIG1pbkhlaWdodDogMjAsXG4gICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWVlZWUnLFxuICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAzMCwgY29sb3I6ICdncmVlbid9fT5odWdlPC9UZXh0PlxuICAgICAgICAgICAgZ2VuZXJpYyBnZW5lcmljIGdlbmVyaWNcbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDYsIGNvbG9yOiAncmVkJ319PlxuICAgICAgICAgICAgICBzbWFsbCBzbWFsbCBzbWFsbCBzbWFsbCBzbWFsbCBzbWFsbFxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+cmVndWxhciByZWd1bGFyPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMzAsIGNvbG9yOiAnZ3JlZW4nfX0+XG4gICAgICAgICAgICAgIGh1Z2UgaHVnZSBodWdlIGh1Z2UgaHVnZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgZ2VuZXJpYyBnZW5lcmljIGdlbmVyaWNcbiAgICAgICAgICA8L0F1dG9ncm93aW5nVGV4dElucHV0RXhhbXBsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0SW5wdXQgbWF4TGVuZ3RoJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJtYXhMZW5ndGg6IDVcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgbWF4TGVuZ3RoPXs1fSBzdHlsZT17c3R5bGVzLmRlZmF1bHR9IC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cIm1heExlbmd0aDogNSB3aXRoIHBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIG1heExlbmd0aD17NX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJaSVAgY29kZSBlbnRyeVwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cIm1heExlbmd0aDogNSB3aXRoIGRlZmF1bHQgdmFsdWUgYWxyZWFkeSBzZXRcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoPXs1fVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9XCI5NDAyNVwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cIm1heExlbmd0aDogNSB3aXRoIHZlcnkgbG9uZyBkZWZhdWx0IHZhbHVlIGFscmVhZHkgc2V0XCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIG1heExlbmd0aD17NX1cbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPVwiOTQwMjUxMjM0NVwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVGV4dCBBdXRvIENvbXBsZXRlJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJjb3VudHJ5XCI+XG4gICAgICAgICAgICA8VGV4dElucHV0IGF1dG9Db21wbGV0ZT1cImNvdW50cnlcIiBzdHlsZT17c3R5bGVzLmRlZmF1bHR9IC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cIm9uZS10aW1lLWNvZGVcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgYXV0b0NvbXBsZXRlPVwib25lLXRpbWUtY29kZVwiIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH0gLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwiYmlydGhkYXRlLWZ1bGxcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgYXV0b0NvbXBsZXRlPVwiYmlydGhkYXRlLWZ1bGxcIiBzdHlsZT17c3R5bGVzLmRlZmF1bHR9IC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cImNjLW5hbWVcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgYXV0b0NvbXBsZXRlPVwiY2MtbmFtZVwiIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH0gLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0IENvbnRlbnQgVHlwZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwiZW1haWxBZGRyZXNzXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0IHRleHRDb250ZW50VHlwZT1cImVtYWlsQWRkcmVzc1wiIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH0gLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwibmFtZVwiPlxuICAgICAgICAgICAgPFRleHRJbnB1dCB0ZXh0Q29udGVudFR5cGU9XCJuYW1lXCIgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fSAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJwb3N0YWxDb2RlLCB3aGVuIGF1dG9Db21wbGV0ZSBzZXRcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnRUeXBlPVwicG9zdGFsQ29kZVwiXG4gICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwiY3JlZGl0Q2FyZEV4cGlyYXRpb25cIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnRUeXBlPVwiY3JlZGl0Q2FyZEV4cGlyYXRpb25cIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJiaXJ0aGRhdGVcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgdGV4dENvbnRlbnRUeXBlPVwiYmlydGhkYXRlXCIgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fSAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RleHRJbnB1dCBQbGFjZWhvbGRlciBTdHlsZXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cImxldHRlclNwYWNpbmc6IDEwIGxpbmVIZWlnaHQ6IDIwIHRleHRBbGlnbjogJ2NlbnRlcidcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJtdWx0aWxpbmUgdGV4dCBpbnB1dFwiXG4gICAgICAgICAgICAgIG11bHRpbGluZT17dHJ1ZX1cbiAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMubXVsdGlsaW5lLCBzdHlsZXMubXVsdGlsaW5lUGxhY2Vob2xkZXJTdHlsZXNdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwibGV0dGVyU3BhY2luZzogMTAgdGV4dEFsaWduOiAnY2VudGVyJ1wiPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInNpbmdsZWxpbmVcIlxuICAgICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5kZWZhdWx0LCBzdHlsZXMuc2luZ2xlbGluZVBsYWNlaG9sZGVyU3R5bGVzXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnc2hvd1NvZnRJbnB1dE9uRm9jdXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cInNob3dTb2Z0SW5wdXRPbkZvY3VzOiBmYWxzZVwiPlxuICAgICAgICAgICAgPFRleHRJbnB1dCBzaG93U29mdElucHV0T25Gb2N1cz17ZmFsc2V9IHN0eWxlPXtbc3R5bGVzLmRlZmF1bHRdfSAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xpbmUgQnJlYWsgU3RyYXRlZ3knLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgY29uc3QgbGluZUJyZWFrU3RyYXRlZ3kgPSBbJ25vbmUnLCAnc3RhbmRhcmQnLCAnaGFuZ3VsLXdvcmQnLCAncHVzaC1vdXQnXTtcbiAgICAgIGNvbnN0IHRleHRCeUNvZGUgPSB7XG4gICAgICAgIGVuOiAnbGluZUJyZWFrU3RyYXRlZ3kgbGluZUJyZWFrU3RyYXRlZ3kgbGluZUJyZWFrU3RyYXRlZ3kgbGluZUJyZWFrU3RyYXRlZ3knLFxuICAgICAgICBrbzogJ+2VnOq4gOqwnO2Wie2VnOq4gOqwnO2WiSDtlZzquIDqsJztlontlZzquIDqsJztlokg7ZWc6riA6rCc7ZaJ7ZWc6riA6rCc7ZaJIO2VnOq4gOqwnO2Wie2VnOq4gOqwnO2WiSDtlZzquIDqsJztlontlZzquIDqsJztlokg7ZWc6riA6rCc7ZaJ7ZWc6riA6rCc7ZaJJyxcbiAgICAgICAgamE6ICfjgYvjgYTjgY7jgofjgYYg44GL44GE44GO44KH44GGIOOBi+OBhOOBjuOCh+OBhiDjgYvjgYTjgY7jgofjgYYg44GL44GE44GO44KH44GGIOOBi+OBhOOBjuOCh+OBhicsXG4gICAgICAgIGNuOiAn5pS56KGMIOaUueihjCDmlLnooYwg5pS56KGMIOaUueihjCDmlLnooYwg5pS56KGMIOaUueihjCDmlLnooYwg5pS56KGMIOaUueihjCDmlLnooYwnLFxuICAgICAgfTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIHtsaW5lQnJlYWtTdHJhdGVneS5tYXAoc3RyYXRlZ3kgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFZpZXcga2V5PXtzdHJhdGVneX0gc3R5bGU9e3ttYXJnaW5Cb3R0b206IDEyfX0+XG4gICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0Z3JleScsXG4gICAgICAgICAgICAgICAgICB9fT57YFN0cmF0ZWd5OiAke3N0cmF0ZWd5fWB9PC9UZXh0PlxuICAgICAgICAgICAgICAgIHtPYmplY3Qua2V5cyh0ZXh0QnlDb2RlKS5tYXAoY29kZSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8VmlldyBrZXk9e2NvZGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJ2JvbGQnfX0+e2BbJHtjb2RlfV1gfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWxpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCcmVha1N0cmF0ZWd5SU9TPXtzdHJhdGVneX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGV4dEJ5Q29kZVtjb2RlXX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ2lPUyBhdXRvZm9ybWF0dGluZyBiZWhhdmlvcnMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cInNtYXJ0SW5zZXJ0RGVsZXRlOiB0cnVlIHwgdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0IHN0eWxlPXtzdHlsZXMuZGVmYXVsdH0gZGVmYXVsdFZhbHVlPVwiQ29weUFuZFBhc3RlXCIgLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwic21hcnRJbnNlcnREZWxldGU6IGZhbHNlXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHNtYXJ0SW5zZXJ0RGVsZXRlPXtmYWxzZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9XCJDb3B5QW5kUGFzdGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSAoe1xuICBkaXNwbGF5TmFtZTogKHVuZGVmaW5lZDogP3N0cmluZyksXG4gIHRpdGxlOiAnVGV4dElucHV0JyxcbiAgZG9jdW1lbnRhdGlvblVSTDogJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvdGV4dGlucHV0JyxcbiAgY2F0ZWdvcnk6ICdCYXNpYycsXG4gIGRlc2NyaXB0aW9uOiAnU2luZ2xlIGFuZCBtdWx0aS1saW5lIHRleHQgaW5wdXRzLicsXG4gIGV4YW1wbGVzOiB0ZXh0SW5wdXRFeGFtcGxlcyxcbn06IFJOVGVzdGVyTW9kdWxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5pbXBvcnQgdHlwZSB7VGV4dFN0eWxlfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNvbnRleHQsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIFBsYXRmb3JtLFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBUZXh0SW5wdXQsXG4gIFZpZXcsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgZGVmYXVsdDoge1xuICAgIGJvcmRlcldpZHRoOiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGgsXG4gICAgYm9yZGVyQ29sb3I6ICcjMGYwZjBmJyxcbiAgICBmbGV4OiAxLFxuICAgIGZvbnRTaXplOiAxMyxcbiAgICBwYWRkaW5nOiA0LFxuICB9LFxuICBtdWx0aWxpbmU6IHtcbiAgICBib3JkZXJXaWR0aDogU3R5bGVTaGVldC5oYWlybGluZVdpZHRoLFxuICAgIGJvcmRlckNvbG9yOiAnIzBmMGYwZicsXG4gICAgZmxleDogMSxcbiAgICBmb250U2l6ZTogMTMsXG4gICAgaGVpZ2h0OiA1MCxcbiAgICBwYWRkaW5nOiA0LFxuICAgIG1hcmdpbkJvdHRvbTogNCxcbiAgfSxcbiAgc2luZ2xlTGluZToge1xuICAgIGZvbnRTaXplOiAxNixcbiAgfSxcbiAgbGFiZWxDb250YWluZXI6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBtYXJnaW5WZXJ0aWNhbDogMixcbiAgfSxcbiAgbGFiZWw6IHtcbiAgICB3aWR0aDogMTE1LFxuICAgIHRleHRBbGlnbjogJ3JpZ2h0JyxcbiAgICBtYXJnaW5SaWdodDogMTAsXG4gICAgcGFkZGluZ1RvcDogMixcbiAgICBmb250U2l6ZTogMTIsXG4gIH0sXG4gIGlucHV0Q29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgcmV3cml0ZUNvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxuICByZW1haW5kZXI6IHtcbiAgICB0ZXh0QWxpZ246ICdyaWdodCcsXG4gICAgd2lkdGg6IDI0LFxuICB9LFxuICBoYXNodGFnOiB7XG4gICAgY29sb3I6ICdibHVlJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIGV2ZW50TGFiZWw6IHtcbiAgICBtYXJnaW46IDMsXG4gICAgZm9udFNpemU6IDEyLFxuICB9LFxuICBmb2N1c2VkVW5jb250cm9sbGVkOiB7XG4gICAgbWFyZ2luOiAtMixcbiAgICBib3JkZXJXaWR0aDogMixcbiAgICBib3JkZXJDb2xvcjogJyMwYTBhMGEnLFxuICAgIGZsZXg6IDEsXG4gICAgZm9udFNpemU6IDEzLFxuICAgIHBhZGRpbmc6IDQsXG4gIH0sXG4gIHNjcmVlbnNob3RBcmVhOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAtNSxcbiAgICBsZWZ0OiAxMjAsXG4gICAgcmlnaHQ6IC01LFxuICAgIGJvdHRvbTogLTUsXG4gIH0sXG59KTtcblxuY2xhc3MgV2l0aExhYmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubGFiZWxDb250YWluZXJ9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmxhYmVsfT57dGhpcy5wcm9wcy5sYWJlbH08L1RleHQ+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaW5wdXRDb250YWluZXJ9Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFJld3JpdGVFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkgfCB2b2lkKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7dGV4dDogJyd9O1xuICB9XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBsaW1pdCA9IDIwO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IGxpbWl0IC0gdGhpcy5zdGF0ZS50ZXh0Lmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXJDb2xvciA9IHJlbWFpbmRlciA+IDUgPyAnYmx1ZScgOiAncmVkJztcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yZXdyaXRlQ29udGFpbmVyfT5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHRlc3RJRD1cInJld3JpdGVfc3BfdW5kZXJzY29yZV9pbnB1dFwiXG4gICAgICAgICAgYXV0b0NvcnJlY3Q9e2ZhbHNlfVxuICAgICAgICAgIG11bHRpbGluZT17ZmFsc2V9XG4gICAgICAgICAgbWF4TGVuZ3RoPXtsaW1pdH1cbiAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RleHQgPT4ge1xuICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCAnXycpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGV4dH0pO1xuICAgICAgICAgIH19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnRleHR9XG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLnJlbWFpbmRlciwge2NvbG9yOiByZW1haW5kZXJDb2xvcn1dfT5cbiAgICAgICAgICB7cmVtYWluZGVyfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBSZXdyaXRlRXhhbXBsZUludmFsaWRDaGFyYWN0ZXJzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAkRmxvd0ZpeE1lUHJvcHMsXG4gIGFueSxcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55IHwgdm9pZCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge3RleHQ6ICcnfTtcbiAgfVxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucmV3cml0ZUNvbnRhaW5lcn0+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICB0ZXN0SUQ9XCJyZXdyaXRlX25vX3NwX2lucHV0XCJcbiAgICAgICAgICBhdXRvQ29ycmVjdD17ZmFsc2V9XG4gICAgICAgICAgbXVsdGlsaW5lPXtmYWxzZX1cbiAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RleHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGV4dDogdGV4dC5yZXBsYWNlKC9cXHMvZywgJycpfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudGV4dH1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFJld3JpdGVJbnZhbGlkQ2hhcmFjdGVyc0FuZENsZWFyRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJEZsb3dGaXhNZVByb3BzLFxuICBhbnksXG4+IHtcbiAgaW5wdXRSZWY6ID9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBUZXh0SW5wdXQ+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55IHwgdm9pZCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge3RleHQ6ICcnfTtcbiAgfVxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucmV3cml0ZUNvbnRhaW5lcn0+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICB0ZXN0SUQ9XCJyZXdyaXRlX2NsZWFyX2lucHV0XCJcbiAgICAgICAgICBhdXRvQ29ycmVjdD17ZmFsc2V9XG4gICAgICAgICAgcmVmPXtyZWYgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZiA9IHJlZjtcbiAgICAgICAgICB9fVxuICAgICAgICAgIG11bHRpbGluZT17dHJ1ZX1cbiAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RleHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGV4dDogdGV4dC5yZXBsYWNlKC8gL2csICcnKX0pO1xuICAgICAgICAgIH19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnRleHR9XG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0ZXN0SUQ9XCJyZXdyaXRlX2NsZWFyX2J1dHRvblwiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRSZWYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLmlucHV0UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aXRsZT1cIkNsZWFyXCJcbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbnR5cGUgRXhhbXBsZVJlZiA9IHtjdXJyZW50OiBudWxsIHwge2ZvY3VzKCk6IHZvaWQsIC4uLn19O1xuXG5jbGFzcyBCbHVyT25TdWJtaXRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59PiB7XG4gIHJlZjE6IEV4YW1wbGVSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgcmVmMjogRXhhbXBsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICByZWYzOiBFeGFtcGxlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIHJlZjQ6IEV4YW1wbGVSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgcmVmNTogRXhhbXBsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICByZWY9e3RoaXMucmVmMX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnNpbmdsZUxpbmV9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJibHVyT25TdWJtaXQgPSBmYWxzZVwiXG4gICAgICAgICAgcmV0dXJuS2V5VHlwZT1cIm5leHRcIlxuICAgICAgICAgIGJsdXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXsoKSA9PiB0aGlzLnJlZjIuY3VycmVudD8uZm9jdXMoKX1cbiAgICAgICAgLz5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHJlZj17dGhpcy5yZWYyfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuc2luZ2xlTGluZX1cbiAgICAgICAgICBrZXlib2FyZFR5cGU9XCJlbWFpbC1hZGRyZXNzXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImJsdXJPblN1Ym1pdCA9IGZhbHNlXCJcbiAgICAgICAgICByZXR1cm5LZXlUeXBlPVwibmV4dFwiXG4gICAgICAgICAgYmx1ck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9eygpID0+IHRoaXMucmVmMy5jdXJyZW50Py5mb2N1cygpfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgcmVmPXt0aGlzLnJlZjN9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5zaW5nbGVMaW5lfVxuICAgICAgICAgIGtleWJvYXJkVHlwZT1cInVybFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJibHVyT25TdWJtaXQgPSBmYWxzZVwiXG4gICAgICAgICAgcmV0dXJuS2V5VHlwZT1cIm5leHRcIlxuICAgICAgICAgIGJsdXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXsoKSA9PiB0aGlzLnJlZjQuY3VycmVudD8uZm9jdXMoKX1cbiAgICAgICAgLz5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHJlZj17dGhpcy5yZWY0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuc2luZ2xlTGluZX1cbiAgICAgICAgICBrZXlib2FyZFR5cGU9XCJudW1lcmljXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImJsdXJPblN1Ym1pdCA9IGZhbHNlXCJcbiAgICAgICAgICBibHVyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICAgIG9uU3VibWl0RWRpdGluZz17KCkgPT4gdGhpcy5yZWY1LmN1cnJlbnQ/LmZvY3VzKCl9XG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICByZWY9e3RoaXMucmVmNX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnNpbmdsZUxpbmV9XG4gICAgICAgICAga2V5Ym9hcmRUeXBlPVwibnVtYmVycy1hbmQtcHVuY3R1YXRpb25cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiYmx1ck9uU3VibWl0ID0gdHJ1ZVwiXG4gICAgICAgICAgcmV0dXJuS2V5VHlwZT1cImRvbmVcIlxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU3VibWl0QmVoYXZpb3JFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59PiB7XG4gIHJlZjE6IEV4YW1wbGVSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgcmVmMjogRXhhbXBsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICByZWYzOiBFeGFtcGxlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIHJlZjQ6IEV4YW1wbGVSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgcmVmNTogRXhhbXBsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICByZWY2OiBFeGFtcGxlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIHJlZjc6IEV4YW1wbGVSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgcmVmODogRXhhbXBsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICByZWY5OiBFeGFtcGxlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIHJlZjEwOiBFeGFtcGxlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIHJlZjExOiBFeGFtcGxlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHJlZj17dGhpcy5yZWYxfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwic2luZ2xlIGxpbmUgc3VibWl0XCJcbiAgICAgICAgICBzdWJtaXRCZWhhdmlvcj1cInN1Ym1pdFwiXG4gICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXsoKSA9PiB0aGlzLnJlZjIuY3VycmVudD8uZm9jdXMoKX1cbiAgICAgICAgLz5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHJlZj17dGhpcy5yZWYyfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwic2luZ2xlIGxpbmUgYmx1ckFuZFN1Ym1pdFwiXG4gICAgICAgICAgc3VibWl0QmVoYXZpb3I9XCJibHVyQW5kU3VibWl0XCJcbiAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9eygpID0+IHRoaXMucmVmMy5jdXJyZW50Py5mb2N1cygpfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgcmVmPXt0aGlzLnJlZjN9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJzaW5nbGUgbGluZSBkZWZhdWx0XCJcbiAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9eygpID0+IHRoaXMucmVmNC5jdXJyZW50Py5mb2N1cygpfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgcmVmPXt0aGlzLnJlZjR9XG4gICAgICAgICAgYmx1ck9uU3VibWl0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJzaW5nbGUgbGluZSBibHVyT25TdWJtaXQgdHJ1ZVwiXG4gICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXsoKSA9PiB0aGlzLnJlZjUuY3VycmVudD8uZm9jdXMoKX1cbiAgICAgICAgLz5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHJlZj17dGhpcy5yZWY1fVxuICAgICAgICAgIGJsdXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJzaW5nbGUgbGluZSBibHVyT25TdWJtaXQgZmFsc2VcIlxuICAgICAgICAgIG9uU3VibWl0RWRpdGluZz17KCkgPT4gdGhpcy5yZWY2LmN1cnJlbnQ/LmZvY3VzKCl9XG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICByZWY9e3RoaXMucmVmNn1cbiAgICAgICAgICBtdWx0aWxpbmVcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIm11bHRpbGluZSBzdWJtaXRcIlxuICAgICAgICAgIHN1Ym1pdEJlaGF2aW9yPVwic3VibWl0XCJcbiAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9eygpID0+IHRoaXMucmVmNy5jdXJyZW50Py5mb2N1cygpfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgcmVmPXt0aGlzLnJlZjd9XG4gICAgICAgICAgbXVsdGlsaW5lXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJtdWx0aWxpbmUgYmx1ckFuZFN1Ym1pdFwiXG4gICAgICAgICAgc3VibWl0QmVoYXZpb3I9XCJibHVyQW5kU3VibWl0XCJcbiAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9eygpID0+IHRoaXMucmVmOC5jdXJyZW50Py5mb2N1cygpfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgcmVmPXt0aGlzLnJlZjh9XG4gICAgICAgICAgbXVsdGlsaW5lXG4gICAgICAgICAgYmx1ck9uU3VibWl0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJtdWx0aWxpbmUgYmx1ck9uU3VibWl0IHRydWVcIlxuICAgICAgICAgIG9uU3VibWl0RWRpdGluZz17KCkgPT4gdGhpcy5yZWY5LmN1cnJlbnQ/LmZvY3VzKCl9XG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICByZWY9e3RoaXMucmVmOX1cbiAgICAgICAgICBtdWx0aWxpbmVcbiAgICAgICAgICBibHVyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwibXVsdGlsaW5lIGJsdXJPblN1Ym1pdCBmYWxzZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICByZWY9e3RoaXMucmVmMTB9XG4gICAgICAgICAgbXVsdGlsaW5lXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJtdWx0aWxpbmUgbmV3bGluZVwiXG4gICAgICAgICAgc3VibWl0QmVoYXZpb3I9XCJuZXdsaW5lXCJcbiAgICAgICAgLz5cbiAgICAgICAgPFRleHRJbnB1dCByZWY9e3RoaXMucmVmMTF9IG11bHRpbGluZSBwbGFjZWhvbGRlcj1cIm11bHRpbGluZSBkZWZhdWx0XCIgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRleHRFdmVudHNFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59LCAkRmxvd0ZpeE1lU3RhdGU+IHtcbiAgc3RhdGU6XG4gICAgfCBhbnlcbiAgICB8IHtcbiAgICAgICAgY3VyVGV4dDogc3RyaW5nLFxuICAgICAgICBwcmV2MlRleHQ6IHN0cmluZyxcbiAgICAgICAgcHJldjNUZXh0OiBzdHJpbmcsXG4gICAgICAgIHByZXZUZXh0OiBzdHJpbmcsXG4gICAgICB9ID0ge1xuICAgIGN1clRleHQ6ICc8Tm8gRXZlbnQ+JyxcbiAgICBwcmV2VGV4dDogJzxObyBFdmVudD4nLFxuICAgIHByZXYyVGV4dDogJzxObyBFdmVudD4nLFxuICAgIHByZXYzVGV4dDogJzxObyBFdmVudD4nLFxuICB9O1xuXG4gIHVwZGF0ZVRleHQgPSAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJUZXh0OiB0ZXh0LFxuICAgICAgICBwcmV2VGV4dDogc3RhdGUuY3VyVGV4dCxcbiAgICAgICAgcHJldjJUZXh0OiBzdGF0ZS5wcmV2VGV4dCxcbiAgICAgICAgcHJldjNUZXh0OiBzdGF0ZS5wcmV2MlRleHQsXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICBhdXRvQ2FwaXRhbGl6ZT1cIm5vbmVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgdGV4dCB0byBzZWUgZXZlbnRzXCJcbiAgICAgICAgICBhdXRvQ29ycmVjdD17ZmFsc2V9XG4gICAgICAgICAgbXVsdGlsaW5lXG4gICAgICAgICAgb25Gb2N1cz17KCkgPT4gdGhpcy51cGRhdGVUZXh0KCdvbkZvY3VzJyl9XG4gICAgICAgICAgb25CbHVyPXsoKSA9PiB0aGlzLnVwZGF0ZVRleHQoJ29uQmx1cicpfVxuICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PlxuICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCdvbkNoYW5nZSB0ZXh0OiAnICsgZXZlbnQubmF0aXZlRXZlbnQudGV4dClcbiAgICAgICAgICB9XG4gICAgICAgICAgb25Db250ZW50U2l6ZUNoYW5nZT17ZXZlbnQgPT5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dChcbiAgICAgICAgICAgICAgJ29uQ29udGVudFNpemVDaGFuZ2Ugc2l6ZTogJyArXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnQubmF0aXZlRXZlbnQuY29udGVudFNpemUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBvbkVuZEVkaXRpbmc9e2V2ZW50ID0+XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoJ29uRW5kRWRpdGluZyB0ZXh0OiAnICsgZXZlbnQubmF0aXZlRXZlbnQudGV4dClcbiAgICAgICAgICB9XG4gICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXtldmVudCA9PlxuICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCdvblN1Ym1pdEVkaXRpbmcgdGV4dDogJyArIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQpXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uS2V5UHJlc3M9e2V2ZW50ID0+XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoJ29uS2V5UHJlc3Mga2V5OiAnICsgZXZlbnQubmF0aXZlRXZlbnQua2V5KVxuICAgICAgICAgIH1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnNpbmdsZUxpbmV9XG4gICAgICAgIC8+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuZXZlbnRMYWJlbH0+XG4gICAgICAgICAge3RoaXMuc3RhdGUuY3VyVGV4dH1cbiAgICAgICAgICB7J1xcbid9XG4gICAgICAgICAgKHByZXY6IHt0aGlzLnN0YXRlLnByZXZUZXh0fSl7J1xcbid9XG4gICAgICAgICAgKHByZXYyOiB7dGhpcy5zdGF0ZS5wcmV2MlRleHR9KXsnXFxuJ31cbiAgICAgICAgICAocHJldjM6IHt0aGlzLnN0YXRlLnByZXYzVGV4dH0pXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRva2VuaXplZFRleHRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAkRmxvd0ZpeE1lUHJvcHMsXG4gICRGbG93Rml4TWVTdGF0ZSxcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55IHwgdm9pZCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge3RleHQ6ICdIZWxsbyAjV29ybGQnfTtcbiAgfVxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgLy9kZWZpbmUgZGVsaW1pdGVyXG4gICAgbGV0IGRlbGltaXRlciA9IC9cXHMrLztcblxuICAgIC8vc3BsaXQgc3RyaW5nXG4gICAgbGV0IF90ZXh0ID0gdGhpcy5zdGF0ZS50ZXh0O1xuICAgIGxldCB0b2tlbixcbiAgICAgIGluZGV4LFxuICAgICAgcGFydHMgPSBbXTtcbiAgICB3aGlsZSAoX3RleHQpIHtcbiAgICAgIGRlbGltaXRlci5sYXN0SW5kZXggPSAwO1xuICAgICAgdG9rZW4gPSBkZWxpbWl0ZXIuZXhlYyhfdGV4dCk7XG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCA9IHRva2VuLmluZGV4O1xuICAgICAgaWYgKHRva2VuWzBdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbmRleCA9IDE7XG4gICAgICB9XG4gICAgICBwYXJ0cy5wdXNoKF90ZXh0LnNsaWNlKDAsIGluZGV4KSk7XG4gICAgICBwYXJ0cy5wdXNoKHRva2VuWzBdKTtcbiAgICAgIGluZGV4ID0gaW5kZXggKyB0b2tlblswXS5sZW5ndGg7XG4gICAgICBfdGV4dCA9IF90ZXh0LnNsaWNlKGluZGV4KTtcbiAgICB9XG4gICAgcGFydHMucHVzaChfdGV4dCk7XG5cbiAgICAvL2hpZ2hsaWdodCBoYXNodGFnc1xuICAgIHBhcnRzID0gcGFydHMubWFwKHRleHQgPT4ge1xuICAgICAgaWYgKC9eIy8udGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxUZXh0IHRlc3RJRD1cImhhc2h0YWdcIiBrZXk9e3RleHR9IHN0eWxlPXtzdHlsZXMuaGFzaHRhZ30+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17e2ZsZXhEaXJlY3Rpb246ICdyb3cnfX0+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICB0ZXN0SUQ9XCJ0ZXh0LWlucHV0XCJcbiAgICAgICAgICBtdWx0aWxpbmU9e3RydWV9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5tdWx0aWxpbmV9XG4gICAgICAgICAgb25DaGFuZ2VUZXh0PXt0ZXh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHR9KTtcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8VGV4dD57cGFydHN9PC9UZXh0PlxuICAgICAgICA8L1RleHRJbnB1dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbnR5cGUgU2VsZWN0aW9uRXhhbXBsZVN0YXRlID0ge1xuICBzZWxlY3Rpb246ICRSZWFkT25seTx7fFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXIsXG4gIHx9PixcbiAgdmFsdWU6IHN0cmluZyxcbiAgLi4uXG59O1xuXG5jbGFzcyBTZWxlY3Rpb25FeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAkRmxvd0ZpeE1lUHJvcHMsXG4gIFNlbGVjdGlvbkV4YW1wbGVTdGF0ZSxcbj4ge1xuICBfdGV4dElucHV0OiBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBUZXh0SW5wdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5IEZsb3cnc1xuICAgKiBMVEkgdXBkYXRlIGNvdWxkIG5vdCBiZSBhZGRlZCB2aWEgY29kZW1vZCAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2VsZWN0aW9uOiB7c3RhcnQ6IDAsIGVuZDogMH0sXG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF0gVGhlIHR5cGUgYW5ub3RhdGlvbihzKSByZXF1aXJlZCBieSBGbG93J3NcbiAgICogTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgb25TZWxlY3Rpb25DaGFuZ2Uoe25hdGl2ZUV2ZW50OiB7c2VsZWN0aW9ufX0pIHtcbiAgICB0aGlzLnNldFN0YXRlKHtzZWxlY3Rpb259KTtcbiAgfVxuXG4gIGdldFJhbmRvbVBvc2l0aW9uKCk6IG51bWJlciB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5zdGF0ZS52YWx1ZS5sZW5ndGg7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIGxlbmd0aCk7XG4gIH1cblxuICBzZWxlY3Qoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICB0aGlzLl90ZXh0SW5wdXQ/LmZvY3VzKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7c2VsZWN0aW9uOiB7c3RhcnQsIGVuZH19KTtcbiAgICBpZiAodGhpcy5wcm9wcy5pbXBlcmF0aXZlKSB7XG4gICAgICB0aGlzLl90ZXh0SW5wdXQ/LnNldFNlbGVjdGlvbihzdGFydCwgZW5kKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RSYW5kb20oKSB7XG4gICAgY29uc3QgcG9zaXRpb25zID0gW1xuICAgICAgdGhpcy5nZXRSYW5kb21Qb3NpdGlvbigpLFxuICAgICAgdGhpcy5nZXRSYW5kb21Qb3NpdGlvbigpLFxuICAgIF0uc29ydCgpO1xuICAgIHRoaXMuc2VsZWN0KC4uLnBvc2l0aW9ucyk7XG4gIH1cblxuICBwbGFjZUF0KHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdChwb3NpdGlvbiwgcG9zaXRpb24pO1xuICB9XG5cbiAgcGxhY2VBdFJhbmRvbSgpIHtcbiAgICB0aGlzLnBsYWNlQXQodGhpcy5nZXRSYW5kb21Qb3NpdGlvbigpKTtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLnN0YXRlLnZhbHVlLmxlbmd0aDtcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAncm93J319PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIHRlc3RJRD17YCR7dGhpcy5wcm9wcy50ZXN0SUR9LXRleHQtaW5wdXRgfVxuICAgICAgICAgICAgbXVsdGlsaW5lPXt0aGlzLnByb3BzLm11bHRpbGluZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dmFsdWUgPT4gdGhpcy5zZXRTdGF0ZSh7dmFsdWV9KX1cbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlPXt0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyl9XG4gICAgICAgICAgICByZWY9e3RleHRJbnB1dCA9PiAodGhpcy5fdGV4dElucHV0ID0gdGV4dElucHV0KX1cbiAgICAgICAgICAgIHNlbGVjdGlvbj17dGhpcy5wcm9wcy5pbXBlcmF0aXZlID8gdW5kZWZpbmVkIDogdGhpcy5zdGF0ZS5zZWxlY3Rpb259XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5wcm9wcy5zdHlsZX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQgdGVzdElEPXtgJHt0aGlzLnByb3BzLnRlc3RJRH0tc2VsZWN0aW9uYH0+XG4gICAgICAgICAgICBzZWxlY3Rpb24gPXsnICd9XG4gICAgICAgICAgICB7YHtzdGFydDoke3RoaXMuc3RhdGUuc2VsZWN0aW9uLnN0YXJ0fSxlbmQ6JHt0aGlzLnN0YXRlLnNlbGVjdGlvbi5lbmR9fWB9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICB0ZXN0SUQ9e2Ake3RoaXMucHJvcHMudGVzdElEfS1jdXJzb3Itc3RhcnRgfVxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgICAgICAgICAgb25QcmVzcz17dGhpcy5wbGFjZUF0LmJpbmQodGhpcywgMCl9PlxuICAgICAgICAgICAgUGxhY2UgYXQgU3RhcnQgKDAsIDApXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICB0ZXN0SUQ9e2Ake3RoaXMucHJvcHMudGVzdElEfS1jdXJzb3ItZW5kYH1cbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMucGxhY2VBdC5iaW5kKHRoaXMsIGxlbmd0aCl9PlxuICAgICAgICAgICAgUGxhY2UgYXQgRW5kICh7bGVuZ3RofSwge2xlbmd0aH0pXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIHsvKiAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3IgdGhpc1xuICAgICAgICAgICAqIHBhcmFtZXRlcnMgKi99XG4gICAgICAgICAgPFRleHQgb25QcmVzcz17dGhpcy5wbGFjZUF0UmFuZG9tLmJpbmQodGhpcyl9PlBsYWNlIGF0IFJhbmRvbTwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgdGVzdElEPXtgJHt0aGlzLnByb3BzLnRlc3RJRH0tc2VsZWN0LWFsbGB9XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddIGFkZGVkIHdoZW4gaW1wcm92aW5nIHR5cGluZyBmb3IgdGhpcyBwYXJhbWV0ZXJzXG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnNlbGVjdC5iaW5kKHRoaXMsIDAsIGxlbmd0aCl9PlxuICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7LyogJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXNcbiAgICAgICAgICAgKiBwYXJhbWV0ZXJzICovfVxuICAgICAgICAgIDxUZXh0IG9uUHJlc3M9e3RoaXMuc2VsZWN0UmFuZG9tLmJpbmQodGhpcyl9PlNlbGVjdCBSYW5kb208L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIFVuY29udHJvbGxlZEV4YW1wbGUoKSB7XG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dElucHV0XG4gICAgICBkZWZhdWx0VmFsdWU9XCJIZWxsbyBXb3JsZCFcIlxuICAgICAgdGVzdElEPVwidW5jb250cm9sbGVkLXRleHRpbnB1dFwiXG4gICAgICBzdHlsZT17aXNGb2N1c2VkID8gc3R5bGVzLmZvY3VzZWRVbmNvbnRyb2xsZWQgOiBzdHlsZXMuZGVmYXVsdH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldElzRm9jdXNlZCh0cnVlKX1cbiAgICAgIG9uQmx1cj17KCkgPT4gc2V0SXNGb2N1c2VkKGZhbHNlKX1cbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBUZXh0U3R5bGVzRXhhbXBsZSA9IFJlYWN0Lm1lbW8oKCkgPT4ge1xuICBjb25zdCB0aGVtZSA9IHVzZUNvbnRleHQoUk5UZXN0ZXJUaGVtZUNvbnRleHQpO1xuXG4gIHJldHVybiAoXG4gICAgPFRleHRTdHlsZXNDb250YWluZXJcbiAgICAgIGV4YW1wbGVzPXtbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgICAgICB0ZXh0U3R5bGVzOiBbXG4gICAgICAgICAgICB7YmFja2dyb3VuZENvbG9yOiB0aGVtZS5TeXN0ZW1CYWNrZ3JvdW5kQ29sb3J9LFxuICAgICAgICAgICAge2JhY2tncm91bmRDb2xvcjogJ3JlZCd9LFxuICAgICAgICAgICAge2JhY2tncm91bmRDb2xvcjogJ29yYW5nZSd9LFxuICAgICAgICAgICAge2JhY2tncm91bmRDb2xvcjogJ3llbGxvdyd9LFxuICAgICAgICAgICAge2JhY2tncm91bmRDb2xvcjogJ2dyZWVuJ30sXG4gICAgICAgICAgICB7YmFja2dyb3VuZENvbG9yOiAnYmx1ZSd9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY29sb3InLFxuICAgICAgICAgIHRleHRTdHlsZXM6IFtcbiAgICAgICAgICAgIHtjb2xvcjogdGhlbWUuTGFiZWxDb2xvcn0sXG4gICAgICAgICAgICB7Y29sb3I6ICdyZWQnfSxcbiAgICAgICAgICAgIHtjb2xvcjogJ29yYW5nZSd9LFxuICAgICAgICAgICAge2NvbG9yOiAneWVsbG93J30sXG4gICAgICAgICAgICB7Y29sb3I6ICdncmVlbid9LFxuICAgICAgICAgICAge2NvbG9yOiAnYmx1ZSd9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZm9udEZhbWlseScsXG4gICAgICAgICAgdGV4dFN0eWxlczogW1xuICAgICAgICAgICAge2ZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJ30sXG4gICAgICAgICAgICB7Zm9udEZhbWlseTogJ3NlcmlmJ30sXG4gICAgICAgICAgICB7Zm9udEZhbWlseTogJ21vbm9zcGFjZSd9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZm9udFNpemUnLFxuICAgICAgICAgIHRleHRTdHlsZXM6IFtcbiAgICAgICAgICAgIHtmb250U2l6ZTogOH0sXG4gICAgICAgICAgICB7Zm9udFNpemU6IDEwfSxcbiAgICAgICAgICAgIHtmb250U2l6ZTogMTJ9LFxuICAgICAgICAgICAge2ZvbnRTaXplOiAxNH0sXG4gICAgICAgICAgICB7Zm9udFNpemU6IDE2fSxcbiAgICAgICAgICAgIHtmb250U2l6ZTogMTh9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZm9udFN0eWxlJyxcbiAgICAgICAgICB0ZXh0U3R5bGVzOiBbe2ZvbnRTdHlsZTogJ25vcm1hbCd9LCB7Zm9udFN0eWxlOiAnaXRhbGljJ31dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2ZvbnRXZWlnaHQnLFxuICAgICAgICAgIHRleHRTdHlsZXM6IFtcbiAgICAgICAgICAgIHtmb250V2VpZ2h0OiAnbm9ybWFsJ30sXG4gICAgICAgICAgICB7Zm9udFdlaWdodDogJ2JvbGQnfSxcbiAgICAgICAgICAgIHtmb250V2VpZ2h0OiAnMjAwJ30sXG4gICAgICAgICAgICB7Zm9udFdlaWdodDogJzQwMCd9LFxuICAgICAgICAgICAge2ZvbnRXZWlnaHQ6ICc2MDAnfSxcbiAgICAgICAgICAgIHtmb250V2VpZ2h0OiAnODAwJ30sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgICAgICAgICB0ZXh0U3R5bGVzOiBbXG4gICAgICAgICAgICB7bGV0dGVyU3BhY2luZzogMH0sXG4gICAgICAgICAgICB7bGV0dGVyU3BhY2luZzogMX0sXG4gICAgICAgICAgICB7bGV0dGVyU3BhY2luZzogMn0sXG4gICAgICAgICAgICB7bGV0dGVyU3BhY2luZzogM30sXG4gICAgICAgICAgICB7bGV0dGVyU3BhY2luZzogNH0sXG4gICAgICAgICAgICB7bGV0dGVyU3BhY2luZzogNX0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdsaW5lSGVpZ2h0JyxcbiAgICAgICAgICBtdWx0aWxpbmU6IHRydWUsXG4gICAgICAgICAgdGV4dFN0eWxlczogW1xuICAgICAgICAgICAge2xpbmVIZWlnaHQ6IDR9LFxuICAgICAgICAgICAge2xpbmVIZWlnaHQ6IDh9LFxuICAgICAgICAgICAge2xpbmVIZWlnaHQ6IDE2fSxcbiAgICAgICAgICAgIHtsaW5lSGVpZ2h0OiAyNH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0ZXh0RGVjb3JhdGlvbkxpbmUnLFxuICAgICAgICAgIHRleHRTdHlsZXM6IFtcbiAgICAgICAgICAgIHt0ZXh0RGVjb3JhdGlvbkxpbmU6ICdub25lJ30sXG4gICAgICAgICAgICB7dGV4dERlY29yYXRpb25MaW5lOiAndW5kZXJsaW5lJ30sXG4gICAgICAgICAgICB7dGV4dERlY29yYXRpb25MaW5lOiAnbGluZS10aHJvdWdoJ30sXG4gICAgICAgICAgICB7dGV4dERlY29yYXRpb25MaW5lOiAndW5kZXJsaW5lIGxpbmUtdGhyb3VnaCd9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAndGV4dFNoYWRvdycsXG4gICAgICAgICAgdGV4dFN0eWxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0U2hhZG93Q29sb3I6ICdibGFjaycsXG4gICAgICAgICAgICAgIHRleHRTaGFkb3dPZmZzZXQ6IHt3aWR0aDogMCwgaGVpZ2h0OiAwfSxcbiAgICAgICAgICAgICAgdGV4dFNoYWRvd1JhZGl1czogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHRTaGFkb3dDb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgICAgdGV4dFNoYWRvd09mZnNldDoge3dpZHRoOiAwLCBoZWlnaHQ6IDB9LFxuICAgICAgICAgICAgICB0ZXh0U2hhZG93UmFkaXVzOiA1LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dFNoYWRvd0NvbG9yOiAncmVkJyxcbiAgICAgICAgICAgICAgdGV4dFNoYWRvd09mZnNldDoge3dpZHRoOiAwLCBoZWlnaHQ6IDB9LFxuICAgICAgICAgICAgICB0ZXh0U2hhZG93UmFkaXVzOiA1LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dFNoYWRvd0NvbG9yOiAnYmx1ZScsXG4gICAgICAgICAgICAgIHRleHRTaGFkb3dPZmZzZXQ6IHt3aWR0aDogMCwgaGVpZ2h0OiAtNX0sXG4gICAgICAgICAgICAgIHRleHRTaGFkb3dSYWRpdXM6IDUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0U2hhZG93Q29sb3I6ICdncmVlbicsXG4gICAgICAgICAgICAgIHRleHRTaGFkb3dPZmZzZXQ6IHt3aWR0aDogMCwgaGVpZ2h0OiA1fSxcbiAgICAgICAgICAgICAgdGV4dFNoYWRvd1JhZGl1czogNSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHRTaGFkb3dDb2xvcjogJ29yYW5nZScsXG4gICAgICAgICAgICAgIHRleHRTaGFkb3dPZmZzZXQ6IHt3aWR0aDogMTAsIGhlaWdodDogMH0sXG4gICAgICAgICAgICAgIHRleHRTaGFkb3dSYWRpdXM6IDUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdfVxuICAgIC8+XG4gICk7XG59KTtcblxudHlwZSBUZXh0U3R5bGVzQ29udGFpbmVyUHJvcHMgPSB7XG4gIGV4YW1wbGVzOiAkUmVhZE9ubHlBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHRleHRTdHlsZXM6ICRSZWFkT25seUFycmF5PFRleHRTdHlsZT4sXG4gICAgbXVsdGlsaW5lPzogYm9vbGVhbixcbiAgfT4sXG59O1xuXG5mdW5jdGlvbiBUZXh0U3R5bGVzQ29udGFpbmVyKHtleGFtcGxlc306IFRleHRTdHlsZXNDb250YWluZXJQcm9wcykge1xuICBjb25zdCBbb2Zmc2V0LCBzZXRPZmZzZXRdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgTUFYX0NZQ0xFUyA9IDY7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxSTlRlc3RlckJ1dHRvblxuICAgICAgICB0ZXN0SUQ9XCJjeWNsZS1zdHlsZXNcIlxuICAgICAgICB0ZXh0VGVzdElEPVwiY3ljbGUtc3R5bGVzLWxhYmVsXCJcbiAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0T2Zmc2V0KChvZmZzZXQgKyAxKSAlIE1BWF9DWUNMRVMpfT5cbiAgICAgICAgQ3ljbGUge29mZnNldCArIDF9L3tNQVhfQ1lDTEVTfVxuICAgICAgPC9STlRlc3RlckJ1dHRvbj5cbiAgICAgIDxWaWV3PlxuICAgICAgICA8VmlldyB0ZXN0SUQ9XCJzdHlsZXMtc2NyZWVuc2hvdC1hcmVhXCIgc3R5bGU9e3N0eWxlcy5zY3JlZW5zaG90QXJlYX0gLz5cbiAgICAgICAge2V4YW1wbGVzLm1hcCgoe25hbWUsIG11bHRpbGluZSwgdGV4dFN0eWxlc30pID0+IChcbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPXtuYW1lfSBrZXk9e25hbWV9PlxuICAgICAgICAgICAge211bHRpbGluZSA/IChcbiAgICAgICAgICAgICAgPE11bHRpbGluZVN0eWxlZFRleHRJbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgICAgICAgdGV4dFN0eWxlcz17dGV4dFN0eWxlc31cbiAgICAgICAgICAgICAgICBzdHlsZU9mZnNldD17b2Zmc2V0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFN0eWxlZFRleHRJbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgICAgICAgdGV4dFN0eWxlcz17dGV4dFN0eWxlc31cbiAgICAgICAgICAgICAgICBzdHlsZU9mZnNldD17b2Zmc2V0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgKSl9XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG50eXBlIFN0eWxlZFRleHRJbnB1dFByb3BzID0ge1xuICBuYW1lOiBzdHJpbmcsXG4gIHRleHRTdHlsZXM6ICRSZWFkT25seUFycmF5PFRleHRTdHlsZT4sXG4gIHN0eWxlT2Zmc2V0OiBudW1iZXIsXG59O1xuXG5mdW5jdGlvbiBTdHlsZWRUZXh0SW5wdXQoe1xuICBuYW1lLFxuICB0ZXh0U3R5bGVzLFxuICBzdHlsZU9mZnNldCxcbn06IFN0eWxlZFRleHRJbnB1dFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPFRleHRJbnB1dFxuICAgICAgc3R5bGU9e1tcbiAgICAgICAgc3R5bGVzLmRlZmF1bHQsXG4gICAgICAgIHRleHRTdHlsZXNbKDAgKyBzdHlsZU9mZnNldCkgJSB0ZXh0U3R5bGVzLmxlbmd0aF0sXG4gICAgICBdfVxuICAgICAgdGVzdElEPXtgc3R5bGUtJHtuYW1lfWB9PlxuICAgICAgPFRleHQ+SGU8L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17dGV4dFN0eWxlc1soMSArIHN0eWxlT2Zmc2V0KSAlIHRleHRTdHlsZXMubGVuZ3RoXX0+bGw8L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17dGV4dFN0eWxlc1soMiArIHN0eWxlT2Zmc2V0KSAlIHRleHRTdHlsZXMubGVuZ3RoXX0+XG4gICAgICAgIG8sXG4gICAgICAgIDxUZXh0IHN0eWxlPXt0ZXh0U3R5bGVzWygwICsgc3R5bGVPZmZzZXQpICUgdGV4dFN0eWxlcy5sZW5ndGhdfT4gPC9UZXh0PlxuICAgICAgPC9UZXh0PlxuICAgICAgPFRleHQgc3R5bGU9e3RleHRTdHlsZXNbKDMgKyBzdHlsZU9mZnNldCkgJSB0ZXh0U3R5bGVzLmxlbmd0aF19PldvPC9UZXh0PlxuICAgICAgPFRleHQgc3R5bGU9e3RleHRTdHlsZXNbKDQgKyBzdHlsZU9mZnNldCkgJSB0ZXh0U3R5bGVzLmxlbmd0aF19PnJsPC9UZXh0PlxuICAgICAgPFRleHQgc3R5bGU9e3RleHRTdHlsZXNbKDUgKyBzdHlsZU9mZnNldCkgJSB0ZXh0U3R5bGVzLmxlbmd0aF19PmQhPC9UZXh0PlxuICAgIDwvVGV4dElucHV0PlxuICApO1xufVxuXG5mdW5jdGlvbiBNdWx0aWxpbmVTdHlsZWRUZXh0SW5wdXQoe1xuICBuYW1lLFxuICB0ZXh0U3R5bGVzLFxuICBzdHlsZU9mZnNldCxcbn06IFN0eWxlZFRleHRJbnB1dFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPFRleHRJbnB1dFxuICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgc3R5bGU9e1tcbiAgICAgICAgc3R5bGVzLmRlZmF1bHQsXG4gICAgICAgIHRleHRTdHlsZXNbKDAgKyBzdHlsZU9mZnNldCkgJSB0ZXh0U3R5bGVzLmxlbmd0aF0sXG4gICAgICBdfVxuICAgICAgdGVzdElEPXtgc3R5bGUtJHtuYW1lfWB9PlxuICAgICAgPFRleHQ+SGVseydcXG4nfTwvVGV4dD5cbiAgICAgIDxUZXh0IHN0eWxlPXt0ZXh0U3R5bGVzWygxICsgc3R5bGVPZmZzZXQpICUgdGV4dFN0eWxlcy5sZW5ndGhdfT5cbiAgICAgICAgbG8geydcXG4nfVxuICAgICAgPC9UZXh0PlxuICAgICAgPFRleHQgc3R5bGU9e3RleHRTdHlsZXNbKDIgKyBzdHlsZU9mZnNldCkgJSB0ZXh0U3R5bGVzLmxlbmd0aF19PlxuICAgICAgICBXb3J7J1xcbid9XG4gICAgICA8L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17dGV4dFN0eWxlc1soMyArIHN0eWxlT2Zmc2V0KSAlIHRleHRTdHlsZXMubGVuZ3RoXX0+bGQhPC9UZXh0PlxuICAgIDwvVGV4dElucHV0PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChbXG4gIHtcbiAgICB0aXRsZTogJ0F1dG8tZm9jdXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiSSBhbSB0aGUgYWNjZXNzaWJpbGl0eSBsYWJlbCBmb3IgdGV4dCBpbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbWF4TGVuZ3RoJyxcbiAgICB0aXRsZTogXCJMaXZlIFJlLVdyaXRlICg8c3A+ICAtPiAgJ18nKSArIG1heExlbmd0aFwiLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxSZXdyaXRlRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMaXZlIFJlLVdyaXRlIChubyBzcGFjZXMgYWxsb3dlZCknLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxSZXdyaXRlRXhhbXBsZUludmFsaWRDaGFyYWN0ZXJzIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnY2xlYXJCdXR0b24nLFxuICAgIHRpdGxlOiAnTGl2ZSBSZS1Xcml0ZSAobm8gc3BhY2VzIGFsbG93ZWQpIGFuZCBjbGVhcicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFJld3JpdGVJbnZhbGlkQ2hhcmFjdGVyc0FuZENsZWFyRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBdXRvLWNhcGl0YWxpemUnLFxuICAgIG5hbWU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwibm9uZVwiPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJjYXBpdGFsaXplLW5vbmVcIlxuICAgICAgICAgICAgICBhdXRvQ2FwaXRhbGl6ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJzZW50ZW5jZXNcIj5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgdGVzdElEPVwiY2FwaXRhbGl6ZS1zZW50ZW5jZXNcIlxuICAgICAgICAgICAgICBhdXRvQ2FwaXRhbGl6ZT1cInNlbnRlbmNlc1wiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICAgPFdpdGhMYWJlbCBsYWJlbD1cIndvcmRzXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHRlc3RJRD1cImNhcGl0YWxpemUtd29yZHNcIlxuICAgICAgICAgICAgICBhdXRvQ2FwaXRhbGl6ZT1cIndvcmRzXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwiY2hhcmFjdGVyc1wiPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJjYXBpdGFsaXplLWNoYXJhY3RlcnNcIlxuICAgICAgICAgICAgICBhdXRvQ2FwaXRhbGl6ZT1cImNoYXJhY3RlcnNcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0F1dG8tY29ycmVjdCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8V2l0aExhYmVsIGxhYmVsPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPFRleHRJbnB1dCBhdXRvQ29ycmVjdD17dHJ1ZX0gc3R5bGU9e3N0eWxlcy5kZWZhdWx0fSAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICAgIDxXaXRoTGFiZWwgbGFiZWw9XCJmYWxzZVwiPlxuICAgICAgICAgICAgPFRleHRJbnB1dCBhdXRvQ29ycmVjdD17ZmFsc2V9IHN0eWxlPXtzdHlsZXMuZGVmYXVsdH0gLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdLZXlib2FyZCB0eXBlcycsXG4gICAgbmFtZTogJ2tleWJvYXJkVHlwZXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgY29uc3Qga2V5Ym9hcmRUeXBlcyA9IFtcbiAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAnYXNjaWktY2FwYWJsZScsXG4gICAgICAgICdudW1iZXJzLWFuZC1wdW5jdHVhdGlvbicsXG4gICAgICAgICd1cmwnLFxuICAgICAgICAnbnVtYmVyLXBhZCcsXG4gICAgICAgICdwaG9uZS1wYWQnLFxuICAgICAgICAnbmFtZS1waG9uZS1wYWQnLFxuICAgICAgICAnZW1haWwtYWRkcmVzcycsXG4gICAgICAgICdkZWNpbWFsLXBhZCcsXG4gICAgICAgICd0d2l0dGVyJyxcbiAgICAgICAgJ3dlYi1zZWFyY2gnLFxuICAgICAgICAnYXNjaWktY2FwYWJsZS1udW1iZXItcGFkJyxcbiAgICAgICAgJ251bWVyaWMnLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4YW1wbGVzID0ga2V5Ym9hcmRUeXBlcy5tYXAodHlwZSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFdpdGhMYWJlbCBrZXk9e3R5cGV9IGxhYmVsPXt0eXBlfT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQga2V5Ym9hcmRUeXBlPXt0eXBlfSBzdHlsZT17c3R5bGVzLmRlZmF1bHR9IC8+XG4gICAgICAgICAgPC9XaXRoTGFiZWw+XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiA8Vmlldz57ZXhhbXBsZXN9PC9WaWV3PjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdJbnB1dCBtb2RlcycsXG4gICAgbmFtZTogJ2lucHV0TW9kZXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgY29uc3QgaW5wdXRNb2RlID0gW1xuICAgICAgICAnbm9uZScsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgJ2RlY2ltYWwnLFxuICAgICAgICAnbnVtZXJpYycsXG4gICAgICAgICd0ZWwnLFxuICAgICAgICAnc2VhcmNoJyxcbiAgICAgICAgJ2VtYWlsJyxcbiAgICAgICAgJ3VybCcsXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhhbXBsZXMgPSBpbnB1dE1vZGUubWFwKG1vZGUgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxXaXRoTGFiZWwga2V5PXttb2RlfSBsYWJlbD17bW9kZX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlucHV0TW9kZT17bW9kZX0gc3R5bGU9e3N0eWxlcy5kZWZhdWx0fSAvPlxuICAgICAgICAgIDwvV2l0aExhYmVsPlxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gPFZpZXc+e2V4YW1wbGVzfTwvVmlldz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQmx1ciBvbiBzdWJtaXQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEJsdXJPblN1Ym1pdEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnZW50ZXJLZXlIaW50IG1vZGVzJyxcbiAgICBuYW1lOiAnZW50ZXJLZXlIaW50VHlwZXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgY29uc3QgZW50ZXJLZXlIaW50VHlwZXNIaW50cyA9IFtcbiAgICAgICAgJ2VudGVyJyxcbiAgICAgICAgJ2RvbmUnLFxuICAgICAgICAnZ28nLFxuICAgICAgICAnbmV4dCcsXG4gICAgICAgICdwcmV2aW91cycsXG4gICAgICAgICdzZWFyY2gnLFxuICAgICAgICAnc2VuZCcsXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhhbXBsZXMgPSBlbnRlcktleUhpbnRUeXBlc0hpbnRzLm1hcChoaW50ID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8V2l0aExhYmVsIGtleT17aGludH0gbGFiZWw9e2hpbnR9PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBlbnRlcktleUhpbnQ9e2hpbnR9IHN0eWxlPXtzdHlsZXMuZGVmYXVsdH0gLz5cbiAgICAgICAgICA8L1dpdGhMYWJlbD5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIDxWaWV3PntleGFtcGxlc308L1ZpZXc+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1N1Ym1pdCBiZWhhdmlvcicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8U3VibWl0QmVoYXZpb3JFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0V2ZW50IGhhbmRsaW5nJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxUZXh0RXZlbnRzRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdmb250RmFtaWx5LCBmb250V2VpZ2h0IGFuZCBmb250U3R5bGUnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgY29uc3QgZm9udEZhbWlseUEgPSBQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgPyAnQ29jaGluJyA6ICdzYW5zLXNlcmlmJztcbiAgICAgIGNvbnN0IGZvbnRGYW1pbHlCID0gUGxhdGZvcm0uT1MgPT09ICdpb3MnID8gJ0NvdXJpZXInIDogJ3NlcmlmJztcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuc2luZ2xlTGluZSwge2ZvbnRGYW1pbHk6IGZvbnRGYW1pbHlBfV19XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17YEN1c3RvbSBmb250cyBsaWtlICR7Zm9udEZhbWlseUF9IGFyZSBzdXBwb3J0ZWRgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgc3R5bGVzLnNpbmdsZUxpbmUsXG4gICAgICAgICAgICAgIHtmb250RmFtaWx5OiBmb250RmFtaWx5QSwgZm9udFdlaWdodDogJ2JvbGQnfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17YCR7Zm9udEZhbWlseUF9IGJvbGRgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgc3R5bGVzLnNpbmdsZUxpbmUsXG4gICAgICAgICAgICAgIHtmb250RmFtaWx5OiBmb250RmFtaWx5QSwgZm9udFdlaWdodDogJzUwMCd9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgJHtmb250RmFtaWx5QX0gNTAwYH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgIHN0eWxlcy5zaW5nbGVMaW5lLFxuICAgICAgICAgICAgICB7Zm9udEZhbWlseTogZm9udEZhbWlseUEsIGZvbnRTdHlsZTogJ2l0YWxpYyd9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgJHtmb250RmFtaWx5QX0gaXRhbGljYH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLnNpbmdsZUxpbmUsIHtmb250RmFtaWx5OiBmb250RmFtaWx5Qn1dfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ZvbnRGYW1pbHlCfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQXR0cmlidXRlZCB0ZXh0JyxcbiAgICBuYW1lOiAnYXR0cmlidXRlZFRleHQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxUb2tlbml6ZWRUZXh0RXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0IHNlbGVjdGlvbiAmIGN1cnNvciBwbGFjZW1lbnQnLFxuICAgIG5hbWU6ICdjdXJzb3JQbGFjZW1lbnQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFNlbGVjdGlvbkV4YW1wbGVcbiAgICAgICAgICAgIHRlc3RJRD1cInNpbmdsZWxpbmVcIlxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgdmFsdWU9XCJ0ZXh0IHNlbGVjdGlvbiBjYW4gYmUgY2hhbmdlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2VsZWN0aW9uRXhhbXBsZVxuICAgICAgICAgICAgdGVzdElEPVwibXVsdGlsaW5lXCJcbiAgICAgICAgICAgIG11bHRpbGluZVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5tdWx0aWxpbmV9XG4gICAgICAgICAgICB2YWx1ZT17J211bHRpbGluZSB0ZXh0IHNlbGVjdGlvblxcbmNhbiBhbHNvIGJlIGNoYW5nZWQnfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVGV4dCBzZWxlY3Rpb24gJiBjdXJzb3IgcGxhY2VtZW50IChpbXBlcmF0aXZlKScsXG4gICAgbmFtZTogJ2N1cnNvclBsYWNlbWVudEltcGVyYXRpdmUnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFNlbGVjdGlvbkV4YW1wbGVcbiAgICAgICAgICAgIHRlc3RJRD1cInNpbmdsZWxpbmVJbXBlcmF0aXZlXCJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAgIHZhbHVlPVwidGV4dCBzZWxlY3Rpb24gY2FuIGJlIGNoYW5nZWQgaW1wZXJhdGl2ZWx5XCJcbiAgICAgICAgICAgIGltcGVyYXRpdmU9e3RydWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2VsZWN0aW9uRXhhbXBsZVxuICAgICAgICAgICAgdGVzdElEPVwibXVsdGlsaW5lSW1wZXJhdGl2ZVwiXG4gICAgICAgICAgICBtdWx0aWxpbmVcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMubXVsdGlsaW5lfVxuICAgICAgICAgICAgdmFsdWU9eydtdWx0aWxpbmUgdGV4dCBzZWxlY3Rpb25cXG5jYW4gYWxzbyBiZSBjaGFuZ2VkIGltcGVyYXRpdmVseSd9XG4gICAgICAgICAgICBpbXBlcmF0aXZlPXt0cnVlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVW5jb250cm9sbGVkIGNvbXBvbmVudCB3aXRoIGxheW91dCBjaGFuZ2VzJyxcbiAgICBuYW1lOiAndW5jb250cm9sbGVkQ29tcG9uZW50JyxcbiAgICByZW5kZXI6ICgpID0+IDxVbmNvbnRyb2xsZWRFeGFtcGxlIC8+LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUZXh0IHN0eWxlcycsXG4gICAgbmFtZTogJ3RleHRTdHlsZXMnLFxuICAgIHJlbmRlcjogKCkgPT4gPFRleHRTdHlsZXNFeGFtcGxlIC8+LFxuICB9LFxuXTogQXJyYXk8Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIEFuaW1hdGVkLFxuICBJbWFnZSxcbiAgUGxhdGZvcm0sXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRvdWNoYWJsZUhpZ2hsaWdodCxcbiAgVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2ssXG4gIFRvdWNoYWJsZU9wYWNpdHksXG4gIFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY29uc3QgZm9yY2VUb3VjaEF2YWlsYWJsZSA9XG4gIChQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgJiYgUGxhdGZvcm0uY29uc3RhbnRzLmZvcmNlVG91Y2hBdmFpbGFibGUpIHx8IGZhbHNlO1xuXG5jbGFzcyBUb3VjaGFibGVIaWdobGlnaHRCb3ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0sICRGbG93Rml4TWVTdGF0ZT4ge1xuICBzdGF0ZTogYW55IHwge3RpbWVzUHJlc3NlZDogbnVtYmVyfSA9IHtcbiAgICB0aW1lc1ByZXNzZWQ6IDAsXG4gIH07XG5cbiAgdG91Y2hhYmxlT25QcmVzcyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHRpbWVzUHJlc3NlZDogdGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgKyAxLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBsZXQgdGV4dExvZyA9ICcnO1xuICAgIGlmICh0aGlzLnN0YXRlLnRpbWVzUHJlc3NlZCA+IDEpIHtcbiAgICAgIHRleHRMb2cgPSB0aGlzLnN0YXRlLnRpbWVzUHJlc3NlZCArICd4IFRvdWNoYWJsZUhpZ2hsaWdodCBvblByZXNzJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUudGltZXNQcmVzc2VkID4gMCkge1xuICAgICAgdGV4dExvZyA9ICdUb3VjaGFibGVIaWdobGlnaHQgb25QcmVzcyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgICAgdGVzdElEPVwidG91Y2hhYmxlX2hpZ2hsaWdodF9pbWFnZV9idXR0b25cIlxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50b3VjaGFibGVPblByZXNzfT5cbiAgICAgICAgICAgIDxJbWFnZSBzb3VyY2U9e3JlbW90ZUltYWdlfSBzdHlsZT17c3R5bGVzLmltYWdlfSAvPlxuICAgICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICAgIHRlc3RJRD1cInRvdWNoYWJsZV9oaWdobGlnaHRfdGV4dF9idXR0b25cIlxuICAgICAgICAgICAgYWN0aXZlT3BhY2l0eT17MX1cbiAgICAgICAgICAgIHVuZGVybGF5Q29sb3I9XCJyZ2IoMjEwLCAyMzAsIDI1NSlcIlxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50b3VjaGFibGVPblByZXNzfT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMud3JhcHBlckN1c3RvbX0+XG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+VGFwIEhlcmUgRm9yIEN1c3RvbSBIaWdobGlnaHQhPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubG9nQm94fT5cbiAgICAgICAgICA8VGV4dCB0ZXN0SUQ9XCJ0b3VjaGFibGVfaGlnaGxpZ2h0X2NvbnNvbGVcIj57dGV4dExvZ308L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFja0JveCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgey4uLn0sXG4gICRGbG93Rml4TWVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogYW55IHwge3RpbWVzUHJlc3NlZDogbnVtYmVyfSA9IHtcbiAgICB0aW1lc1ByZXNzZWQ6IDAsXG4gIH07XG5cbiAgdGV4dE9uUHJlc3MgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB0aW1lc1ByZXNzZWQ6IHRoaXMuc3RhdGUudGltZXNQcmVzc2VkICsgMSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgbGV0IHRleHRMb2cgPSAnJztcbiAgICBpZiAodGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgPiAxKSB7XG4gICAgICB0ZXh0TG9nID0gdGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgKyAneCBUb3VjaGFibGVXaXRob3V0RmVlZGJhY2sgb25QcmVzcyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnRpbWVzUHJlc3NlZCA+IDApIHtcbiAgICAgIHRleHRMb2cgPSAnVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIG9uUHJlc3MnO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFja1xuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudGV4dE9uUHJlc3N9XG4gICAgICAgICAgdGVzdElEPVwidG91Y2hhYmxlX3dpdGhvdXRfZmVlZGJhY2tfYnV0dG9uXCI+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy53cmFwcGVyQ3VzdG9tfT5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+VGFwIEhlcmUgRm9yIE5vIEZlZWRiYWNrITwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrPlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxvZ0JveH0+XG4gICAgICAgICAgPFRleHQgdGVzdElEPVwidG91Y2hhYmxlX3dpdGhvdXRfZmVlZGJhY2tfY29uc29sZVwiPnt0ZXh0TG9nfTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgVGV4dE9uUHJlc3NCb3ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0sICRGbG93Rml4TWVTdGF0ZT4ge1xuICBzdGF0ZTogYW55IHwge3RpbWVzUHJlc3NlZDogbnVtYmVyfSA9IHtcbiAgICB0aW1lc1ByZXNzZWQ6IDAsXG4gIH07XG5cbiAgdGV4dE9uUHJlc3MgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB0aW1lc1ByZXNzZWQ6IHRoaXMuc3RhdGUudGltZXNQcmVzc2VkICsgMSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgbGV0IHRleHRMb2cgPSAnJztcbiAgICBpZiAodGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgPiAxKSB7XG4gICAgICB0ZXh0TG9nID0gdGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgKyAneCB0ZXh0IG9uUHJlc3MnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgPiAwKSB7XG4gICAgICB0ZXh0TG9nID0gJ3RleHQgb25QcmVzcyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VGV4dFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMudGV4dEJsb2NrfVxuICAgICAgICAgIHRlc3RJRD1cInRhcHBhYmxlX3RleHRcIlxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudGV4dE9uUHJlc3N9PlxuICAgICAgICAgIFRleHQgaGFzIGJ1aWx0LWluIG9uUHJlc3MgaGFuZGxpbmdcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxvZ0JveH0+XG4gICAgICAgICAgPFRleHQgdGVzdElEPVwidGFwcGFibGVfdGV4dF9jb25zb2xlXCI+e3RleHRMb2d9PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBUb3VjaGFibGVGZWVkYmFja0V2ZW50cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7ZXZlbnRMb2c6IEFycmF5PHN0cmluZz59ID0ge1xuICAgIGV2ZW50TG9nOiBbXSxcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHRlc3RJRD1cInRvdWNoYWJsZV9mZWVkYmFja19ldmVudHNcIj5cbiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMucm93LCBzdHlsZXMuY2VudGVyZWRdfT5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgICAgdGVzdElEPVwidG91Y2hhYmxlX2ZlZWRiYWNrX2V2ZW50c19idXR0b25cIlxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwidG91Y2hhYmxlIGZlZWRiYWNrIGV2ZW50c1wiXG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLl9hcHBlbmRFdmVudCgncHJlc3MnKX1cbiAgICAgICAgICAgIG9uUHJlc3NJbj17KCkgPT4gdGhpcy5fYXBwZW5kRXZlbnQoJ3ByZXNzSW4nKX1cbiAgICAgICAgICAgIG9uUHJlc3NPdXQ9eygpID0+IHRoaXMuX2FwcGVuZEV2ZW50KCdwcmVzc091dCcpfVxuICAgICAgICAgICAgb25Mb25nUHJlc3M9eygpID0+IHRoaXMuX2FwcGVuZEV2ZW50KCdsb25nUHJlc3MnKX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+UHJlc3MgTWU8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgdGVzdElEPVwidG91Y2hhYmxlX2ZlZWRiYWNrX2V2ZW50c19jb25zb2xlXCJcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmV2ZW50TG9nQm94fT5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5ldmVudExvZy5tYXAoKGUsIGlpKSA9PiAoXG4gICAgICAgICAgICA8VGV4dCBrZXk9e2lpfT57ZX08L1RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgX2FwcGVuZEV2ZW50ID0gKGV2ZW50TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSA2O1xuICAgIGNvbnN0IGV2ZW50TG9nID0gdGhpcy5zdGF0ZS5ldmVudExvZy5zbGljZSgwLCBsaW1pdCAtIDEpO1xuICAgIGV2ZW50TG9nLnVuc2hpZnQoZXZlbnROYW1lKTtcbiAgICB0aGlzLnNldFN0YXRlKHtldmVudExvZ30pO1xuICB9O1xufVxuXG5jbGFzcyBUb3VjaGFibGVEZWxheUV2ZW50cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7ZXZlbnRMb2c6IEFycmF5PHN0cmluZz59ID0ge1xuICAgIGV2ZW50TG9nOiBbXSxcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHRlc3RJRD1cInRvdWNoYWJsZV9kZWxheV9ldmVudHNcIj5cbiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMucm93LCBzdHlsZXMuY2VudGVyZWRdfT5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICAgICAgdGVzdElEPVwidG91Y2hhYmxlX2RlbGF5X2V2ZW50c19idXR0b25cIlxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gdGhpcy5fYXBwZW5kRXZlbnQoJ3ByZXNzJyl9XG4gICAgICAgICAgICBkZWxheVByZXNzSW49ezQwMH1cbiAgICAgICAgICAgIG9uUHJlc3NJbj17KCkgPT4gdGhpcy5fYXBwZW5kRXZlbnQoJ3ByZXNzSW4gLSA0MDBtcyBkZWxheScpfVxuICAgICAgICAgICAgZGVsYXlQcmVzc091dD17MTAwMH1cbiAgICAgICAgICAgIG9uUHJlc3NPdXQ9eygpID0+IHRoaXMuX2FwcGVuZEV2ZW50KCdwcmVzc091dCAtIDEwMDBtcyBkZWxheScpfVxuICAgICAgICAgICAgZGVsYXlMb25nUHJlc3M9ezgwMH1cbiAgICAgICAgICAgIG9uTG9uZ1ByZXNzPXsoKSA9PiB0aGlzLl9hcHBlbmRFdmVudCgnbG9uZ1ByZXNzIC0gODAwbXMgZGVsYXknKX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+UHJlc3MgTWU8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5ldmVudExvZ0JveH1cbiAgICAgICAgICB0ZXN0SUQ9XCJ0b3VjaGFibGVfZGVsYXlfZXZlbnRzX2NvbnNvbGVcIj5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5ldmVudExvZy5tYXAoKGUsIGlpKSA9PiAoXG4gICAgICAgICAgICA8VGV4dCBrZXk9e2lpfT57ZX08L1RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgX2FwcGVuZEV2ZW50ID0gKGV2ZW50TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSA2O1xuICAgIGNvbnN0IGV2ZW50TG9nID0gdGhpcy5zdGF0ZS5ldmVudExvZy5zbGljZSgwLCBsaW1pdCAtIDEpO1xuICAgIGV2ZW50TG9nLnVuc2hpZnQoZXZlbnROYW1lKTtcbiAgICB0aGlzLnNldFN0YXRlKHtldmVudExvZ30pO1xuICB9O1xufVxuXG5jbGFzcyBGb3JjZVRvdWNoRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7Zm9yY2U6IG51bWJlcn0gPSB7XG4gICAgZm9yY2U6IDAsXG4gIH07XG5cbiAgX3JlbmRlckNvbnNvbGVUZXh0ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGZvcmNlVG91Y2hBdmFpbGFibGVcbiAgICAgID8gJ0ZvcmNlOiAnICsgdGhpcy5zdGF0ZS5mb3JjZS50b0ZpeGVkKDMpXG4gICAgICA6ICczRCBUb3VjaCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlJztcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHRlc3RJRD1cInRvdWNoYWJsZV8zZHRvdWNoX2V2ZW50XCI+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZm9yY2VUb3VjaEJveH0gdGVzdElEPVwidG91Y2hhYmxlXzNkdG91Y2hfb3V0cHV0XCI+XG4gICAgICAgICAgPFRleHQ+e3RoaXMuX3JlbmRlckNvbnNvbGVUZXh0KCl9PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnJvdywgc3R5bGVzLmNlbnRlcmVkXX0+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICAgIHRlc3RJRD1cInRvdWNoYWJsZV8zZHRvdWNoX2J1dHRvblwiXG4gICAgICAgICAgICBvblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgb25SZXNwb25kZXJNb3ZlPXtldmVudCA9PlxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtmb3JjZTogZXZlbnQubmF0aXZlRXZlbnQuZm9yY2V9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25SZXNwb25kZXJSZWxlYXNlPXtldmVudCA9PiB0aGlzLnNldFN0YXRlKHtmb3JjZTogMH0pfT5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5QcmVzcyBNZTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRvdWNoYWJsZUhpdFNsb3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0sICRGbG93Rml4TWVTdGF0ZT4ge1xuICBzdGF0ZTogYW55IHwge3RpbWVzUHJlc3NlZDogbnVtYmVyfSA9IHtcbiAgICB0aW1lc1ByZXNzZWQ6IDAsXG4gIH07XG5cbiAgb25QcmVzcyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHRpbWVzUHJlc3NlZDogdGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgKyAxLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBsZXQgbG9nID0gJyc7XG4gICAgaWYgKHRoaXMuc3RhdGUudGltZXNQcmVzc2VkID4gMSkge1xuICAgICAgbG9nID0gdGhpcy5zdGF0ZS50aW1lc1ByZXNzZWQgKyAneCBvblByZXNzJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUudGltZXNQcmVzc2VkID4gMCkge1xuICAgICAgbG9nID0gJ29uUHJlc3MnO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyB0ZXN0SUQ9XCJ0b3VjaGFibGVfaGl0X3Nsb3BcIj5cbiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMucm93LCBzdHlsZXMuY2VudGVyZWRdfT5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy5vblByZXNzfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5oaXRTbG9wV3JhcHBlcn1cbiAgICAgICAgICAgIGhpdFNsb3A9e3t0b3A6IDMwLCBib3R0b206IDMwLCBsZWZ0OiA2MCwgcmlnaHQ6IDYwfX1cbiAgICAgICAgICAgIHRlc3RJRD1cInRvdWNoYWJsZV9oaXRfc2xvcF9idXR0b25cIj5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuaGl0U2xvcEJ1dHRvbn0+UHJlc3MgT3V0c2lkZSBUaGlzIFZpZXc8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubG9nQm94fT5cbiAgICAgICAgICA8VGV4dD57bG9nfTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVG91Y2hhYmxlTmF0aXZlTWV0aG9kQ2hlY2tlcjxcbiAgVDogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8YW55LCBhbnk+LFxuPihwcm9wczoge3xDb21wb25lbnQ6IFQsIG5hbWU6IHN0cmluZ3x9KTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtzdGF0dXMsIHNldFN0YXR1c10gPSB1c2VTdGF0ZTw/Ym9vbGVhbj4obnVsbCk7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjw/UmVhY3QuRWxlbWVudFJlZjxUPj4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTdGF0dXMocmVmLmN1cnJlbnQgIT0gbnVsbCAmJiB0eXBlb2YgcmVmLmN1cnJlbnQubWVhc3VyZSA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnJvdywgc3R5bGVzLmJsb2NrXX0+XG4gICAgICA8cHJvcHMuQ29tcG9uZW50IHJlZj17cmVmfT5cbiAgICAgICAgPFZpZXcgLz5cbiAgICAgIDwvcHJvcHMuQ29tcG9uZW50PlxuICAgICAgPFRleHQ+XG4gICAgICAgIHtwcm9wcy5uYW1lICsgJzogJ31cbiAgICAgICAge3N0YXR1cyA9PSBudWxsXG4gICAgICAgICAgPyAnTWlzc2luZyBSZWYhJ1xuICAgICAgICAgIDogc3RhdHVzID09PSB0cnVlXG4gICAgICAgICAgPyAnTmF0aXZlIE1ldGhvZHMgRXhpc3QnXG4gICAgICAgICAgOiAnTmF0aXZlIE1ldGhvZHMgTWlzc2luZyEnfVxuICAgICAgPC9UZXh0PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVG91Y2hhYmxlTmF0aXZlTWV0aG9kcygpIHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUb3VjaGFibGVOYXRpdmVNZXRob2RDaGVja2VyXG4gICAgICAgIENvbXBvbmVudD17VG91Y2hhYmxlSGlnaGxpZ2h0fVxuICAgICAgICBuYW1lPVwiVG91Y2hhYmxlSGlnaGxpZ2h0XCJcbiAgICAgIC8+XG4gICAgICA8VG91Y2hhYmxlTmF0aXZlTWV0aG9kQ2hlY2tlclxuICAgICAgICBDb21wb25lbnQ9e1RvdWNoYWJsZU9wYWNpdHl9XG4gICAgICAgIG5hbWU9XCJUb3VjaGFibGVPcGFjaXR5XCJcbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jbGFzcyBUb3VjaGFibGVEaXNhYmxlZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufT4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eSBkaXNhYmxlZD17dHJ1ZX0gc3R5bGU9e1tzdHlsZXMucm93LCBzdHlsZXMuYmxvY2tdfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmRpc2FibGVkQnV0dG9ufT5EaXNhYmxlZCBUb3VjaGFibGVPcGFjaXR5PC9UZXh0PlxuICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG5cbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHkgZGlzYWJsZWQ9e2ZhbHNlfSBzdHlsZT17W3N0eWxlcy5yb3csIHN0eWxlcy5ibG9ja119PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5FbmFibGVkIFRvdWNoYWJsZU9wYWNpdHk8L1RleHQ+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cblxuICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgICAgYWN0aXZlT3BhY2l0eT17MX1cbiAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cbiAgICAgICAgICB1bmRlcmxheUNvbG9yPVwicmdiKDIxMCwgMjMwLCAyNTUpXCJcbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5yb3csIHN0eWxlcy5ibG9ja119XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gY29uc29sZS5sb2coJ2N1c3RvbSBUSFcgdGV4dCAtIGhpZ2hsaWdodCcpfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmRpc2FibGVkQnV0dG9ufT5EaXNhYmxlZCBUb3VjaGFibGVIaWdobGlnaHQ8L1RleHQ+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuXG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBhY3RpdmVPcGFjaXR5PXsxfVxuICAgICAgICAgIHVuZGVybGF5Q29sb3I9XCJyZ2IoMjEwLCAyMzAsIDI1NSlcIlxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLnJvdywgc3R5bGVzLmJsb2NrXX1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBjb25zb2xlLmxvZygnY3VzdG9tIFRIVyB0ZXh0IC0gaGlnaGxpZ2h0Jyl9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5FbmFibGVkIFRvdWNoYWJsZUhpZ2hsaWdodDwvVGV4dD5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG5cbiAgICAgICAgPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFja1xuICAgICAgICAgIG9uUHJlc3M9eygpID0+IGNvbnNvbGUubG9nKCdUV09GIGhhcyBiZWVuIGNsaWNrZWQnKX1cbiAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy53cmFwcGVyQ3VzdG9tfT5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmJ1dHRvbixcbiAgICAgICAgICAgICAgICBzdHlsZXMubmF0aXZlRmVlZGJhY2tCdXR0b24sXG4gICAgICAgICAgICAgICAgc3R5bGVzLmRpc2FibGVkQnV0dG9uLFxuICAgICAgICAgICAgICBdfT5cbiAgICAgICAgICAgICAgRGlzYWJsZWQgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz5cblxuICAgICAgICA8VG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gY29uc29sZS5sb2coJ1RXT0YgaGFzIGJlZW4gY2xpY2tlZCcpfVxuICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy53cmFwcGVyQ3VzdG9tfT5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLmJ1dHRvbiwgc3R5bGVzLm5hdGl2ZUZlZWRiYWNrQnV0dG9uXX0+XG4gICAgICAgICAgICAgIEVuYWJsZWQgVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz5cblxuICAgICAgICB7UGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxUb3VjaGFibGVOYXRpdmVGZWVkYmFja1xuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBjb25zb2xlLmxvZygnY3VzdG9tIFRORiBoYXMgYmVlbiBjbGlja2VkJyl9XG4gICAgICAgICAgICAgIGJhY2tncm91bmQ9e1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrLlNlbGVjdGFibGVCYWNrZ3JvdW5kKCl9PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5yb3csIHN0eWxlcy5ibG9ja119PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLmJ1dHRvbiwgc3R5bGVzLm5hdGl2ZUZlZWRiYWNrQnV0dG9uXX0+XG4gICAgICAgICAgICAgICAgICBFbmFibGVkIFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrPlxuXG4gICAgICAgICAgICA8VG91Y2hhYmxlTmF0aXZlRmVlZGJhY2tcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IGNvbnNvbGUubG9nKCdjdXN0b20gVE5GIGhhcyBiZWVuIGNsaWNrZWQnKX1cbiAgICAgICAgICAgICAgYmFja2dyb3VuZD17VG91Y2hhYmxlTmF0aXZlRmVlZGJhY2suU2VsZWN0YWJsZUJhY2tncm91bmQoKX0+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnJvdywgc3R5bGVzLmJsb2NrXX0+XG4gICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmRpc2FibGVkQnV0dG9uLCBzdHlsZXMubmF0aXZlRmVlZGJhY2tCdXR0b25dfT5cbiAgICAgICAgICAgICAgICAgIERpc2FibGVkIFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gQ3VzdG9tUmlwcGxlUmFkaXVzKCkge1xuICBpZiAoUGxhdGZvcm0uT1MgIT09ICdhbmRyb2lkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIHN0eWxlPXtbXG4gICAgICAgIHN0eWxlcy5yb3csXG4gICAgICAgIHtqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsIGFsaWduSXRlbXM6ICdjZW50ZXInfSxcbiAgICAgIF19PlxuICAgICAgPFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrXG4gICAgICAgIG9uUHJlc3M9eygpID0+IGNvbnNvbGUubG9nKCdjdXN0b20gVE5GIGhhcyBiZWVuIGNsaWNrZWQnKX1cbiAgICAgICAgYmFja2dyb3VuZD17VG91Y2hhYmxlTmF0aXZlRmVlZGJhY2suUmlwcGxlKCdvcmFuZ2UnLCB0cnVlLCAzMCl9PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5idXR0b24sIHN0eWxlcy5uYXRpdmVGZWVkYmFja0J1dHRvbl19PlxuICAgICAgICAgICAgcmFkaXVzIDMwXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrPlxuXG4gICAgICA8VG91Y2hhYmxlTmF0aXZlRmVlZGJhY2tcbiAgICAgICAgb25QcmVzcz17KCkgPT4gY29uc29sZS5sb2coJ2N1c3RvbSBUTkYgaGFzIGJlZW4gY2xpY2tlZCcpfVxuICAgICAgICBiYWNrZ3JvdW5kPXtUb3VjaGFibGVOYXRpdmVGZWVkYmFjay5TZWxlY3RhYmxlQmFja2dyb3VuZEJvcmRlcmxlc3MoXG4gICAgICAgICAgMTUwLFxuICAgICAgICApfT5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMuYnV0dG9uLCBzdHlsZXMubmF0aXZlRmVlZGJhY2tCdXR0b25dfT5cbiAgICAgICAgICAgIHJhZGl1cyAxNTBcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2s+XG5cbiAgICAgIDxUb3VjaGFibGVOYXRpdmVGZWVkYmFja1xuICAgICAgICBvblByZXNzPXsoKSA9PiBjb25zb2xlLmxvZygnY3VzdG9tIFRORiBoYXMgYmVlbiBjbGlja2VkJyl9XG4gICAgICAgIGJhY2tncm91bmQ9e1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrLlNlbGVjdGFibGVCYWNrZ3JvdW5kKDcwKX0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYmxvY2t9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLmJ1dHRvbiwgc3R5bGVzLm5hdGl2ZUZlZWRiYWNrQnV0dG9uXX0+XG4gICAgICAgICAgICByYWRpdXMgNzAsIHdpdGggYm9yZGVyXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3QgcmVtb3RlSW1hZ2UgPSB7XG4gIHVyaTogJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9mYXZpY29uLmljbycsXG59O1xuXG5jb25zdCBUb3VjaGFibGVIaWdobGlnaHRVbmRlcmxheU1ldGhvZHMgPSAoKSA9PiB7XG4gIGNvbnN0IFt1bmRlcmxheVZpc2libGUsIHNldFVuZGVybGF5VmlzaWJsZV0gPSB1c2VTdGF0ZShcbiAgICAnVW5kZXJsYXkgbm90IHZpc2libGUnLFxuICApO1xuXG4gIGNvbnN0IGhpZGRlblVuZGVybGF5ID0gKCkgPT4ge1xuICAgIHNldFVuZGVybGF5VmlzaWJsZSgnUHJlc3MgdG8gbWFrZSB1bmRlcmxheSB2aXNpYmxlJyk7XG4gIH07XG5cbiAgY29uc3Qgc2hvd25VbmRlcmxheSA9ICgpID0+IHtcbiAgICBzZXRVbmRlcmxheVZpc2libGUoJ1VuZGVybGF5IHZpc2libGUnKTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICBzdHlsZT17c3R5bGVzLmxvZ0JveH1cbiAgICAgIHVuZGVybGF5Q29sb3I9eycjZWVlJ31cbiAgICAgIG9uU2hvd1VuZGVybGF5PXtzaG93blVuZGVybGF5fVxuICAgICAgb25IaWRlVW5kZXJsYXk9e2hpZGRlblVuZGVybGF5fVxuICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnVG91Y2hhYmxlSGlnaGxpZ2h0IHVuZGVybGF5IHNob3duIScpO1xuICAgICAgfX0+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHRCbG9ja30+e3VuZGVybGF5VmlzaWJsZX08L1RleHQ+XG4gICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICk7XG59O1xuXG5jb25zdCBUb3VjaGFibGVUb3VjaFNvdW5kRGlzYWJsZWQgPSAoKSA9PiB7XG4gIGNvbnN0IFtzb3VuZEVuYWJsZWQsIHNldFNvdW5kRW5hYmxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRvZ2dsZVRvdWNoYWJsZVNvdW5kID0gKCkgPT4ge1xuICAgIHNvdW5kRW5hYmxlZCA/IHNldFNvdW5kRW5hYmxlZChmYWxzZSkgOiBzZXRTb3VuZEVuYWJsZWQodHJ1ZSk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxUb3VjaGFibGVXaXRob3V0RmVlZGJhY2tcbiAgICAgICAgICAgIHRvdWNoU291bmREaXNhYmxlZD17c291bmRFbmFibGVkfVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gY29uc29sZS5sb2coJ3RvdWNoU291bmREaXNhYmxlZCBwcmVzc2VkIScpfT5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICBUb3VjaGFibGVzIG1ha2UgYSBzb3VuZCBvbiBBbmRyb2lkLCB3aGljaCBjYW4gYmUgdHVybmVkIG9mZi5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17dG9nZ2xlVG91Y2hhYmxlU291bmR9XG4gICAgICAgICAgICB0b3VjaFNvdW5kRGlzYWJsZWQ9e3NvdW5kRW5hYmxlZH0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIHtzb3VuZEVuYWJsZWRcbiAgICAgICAgICAgICAgICA/ICdEaXNhYmxlIFRvdWNoYWJsZSBTb3VuZCdcbiAgICAgICAgICAgICAgICA6ICdFbmFibGUgVG91Y2hhYmxlIFNvdW5kJ31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgIDwvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59O1xuXG4vLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5mdW5jdGlvbiBUb3VjaGFibGVPbkZvY3VzPFQ6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PGFueSwgYW55Pj4oKSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjw/UmVhY3QuRWxlbWVudFJlZjxUPiB8IHtmb2N1czogRnVuY3Rpb259PihudWxsKTtcbiAgY29uc3QgW2lzRm9jdXNlZCwgc2V0SXNGb2N1c2VkXSA9IHVzZVN0YXRlPHN0cmluZyB8IGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2ZvY3VzU3RhdHVzLCBzZXRGb2N1c1N0YXR1c10gPSB1c2VTdGF0ZShcbiAgICAnVGhpcyB0b3VjaGFibGUgaXMgbm90IGZvY3VzZWQuJyxcbiAgKTtcbiAgY29uc3QgW2lzQmx1cnJlZCwgc2V0SXNCbHVycmVkXSA9IHVzZVN0YXRlKFxuICAgICdUaGlzIGl0ZW0gc3RpbGwgaGFzIGZvY3VzLCBvbkJsdXIgaXMgbm90IGNhbGxlZCcsXG4gICk7XG5cbiAgY29uc3QgdG9nZ2xlRm9jdXMgPSAoKSA9PiB7XG4gICAgaXNGb2N1c2VkXG4gICAgICA/IHNldEZvY3VzU3RhdHVzKCdUaGlzIHRvdWNoYWJsZSBpcyBmb2N1c2VkJylcbiAgICAgIDogc2V0SXNGb2N1c2VkKCdUaGlzIHRvdWNoYWJsZSBpcyBub3QgZm9jdXNlZCcpICYmXG4gICAgICAgIHNldElzQmx1cnJlZCgnVGhpcyBpdGVtIGhhcyBsb3N0IGZvY3VzLCBvbkJsdXIgY2FsbGVkJyk7XG4gIH07XG4gIGNvbnN0IGZvY3VzVG91Y2hhYmxlID0gKCkgPT4ge1xuICAgIGlmIChyZWYuY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uRm9jdXM9e3RvZ2dsZUZvY3VzfVxuICAgICAgb25QcmVzcz17Zm9jdXNUb3VjaGFibGV9PlxuICAgICAgPFRleHQ+XG4gICAgICAgIHtmb2N1c1N0YXR1c31cbiAgICAgICAgeydcXG4nfVxuICAgICAgICB7aXNCbHVycmVkfVxuICAgICAgPC9UZXh0PlxuICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvdzoge1xuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgY2VudGVyZWQ6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIGltYWdlOiB7XG4gICAgd2lkdGg6IDUwLFxuICAgIGhlaWdodDogNTAsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBmb250U2l6ZTogMTYsXG4gIH0sXG4gIGJsb2NrOiB7XG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGNvbG9yOiAnIzAwN0FGRicsXG4gIH0sXG4gIGRpc2FibGVkQnV0dG9uOiB7XG4gICAgY29sb3I6ICcjMDA3QUZGJyxcbiAgICBvcGFjaXR5OiAwLjUsXG4gIH0sXG4gIG5hdGl2ZUZlZWRiYWNrQnV0dG9uOiB7XG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBtYXJnaW46IDEwLFxuICB9LFxuICBoaXRTbG9wQnV0dG9uOiB7XG4gICAgY29sb3I6ICd3aGl0ZScsXG4gIH0sXG4gIHdyYXBwZXI6IHtcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gIH0sXG4gIHdyYXBwZXJDdXN0b206IHtcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgcGFkZGluZzogNixcbiAgfSxcbiAgaGl0U2xvcFdyYXBwZXI6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgIG1hcmdpblZlcnRpY2FsOiAzMCxcbiAgfSxcbiAgbG9nQm94OiB7XG4gICAgcGFkZGluZzogMjAsXG4gICAgbWFyZ2luOiAxMCxcbiAgICBib3JkZXJXaWR0aDogU3R5bGVTaGVldC5oYWlybGluZVdpZHRoLFxuICAgIGJvcmRlckNvbG9yOiAnI2YwZjBmMCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZjlmOScsXG4gIH0sXG4gIGV2ZW50TG9nQm94OiB7XG4gICAgcGFkZGluZzogMTAsXG4gICAgbWFyZ2luOiAxMCxcbiAgICBoZWlnaHQ6IDEyMCxcbiAgICBib3JkZXJXaWR0aDogU3R5bGVTaGVldC5oYWlybGluZVdpZHRoLFxuICAgIGJvcmRlckNvbG9yOiAnI2YwZjBmMCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZjlmOScsXG4gIH0sXG4gIGZvcmNlVG91Y2hCb3g6IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBtYXJnaW46IDEwLFxuICAgIGJvcmRlcldpZHRoOiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGgsXG4gICAgYm9yZGVyQ29sb3I6ICcjZjBmMGYwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjlmOWY5JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgdGV4dEJsb2NrOiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgY29sb3I6ICdibHVlJyxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmRpc3BsYXlOYW1lID0gKHVuZGVmaW5lZDogP3N0cmluZyk7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ1RvdWNoYWJsZSBhbmQgb25QcmVzcyBleGFtcGxlcy4nO1xuZXhwb3J0cy50aXRsZSA9ICdUb3VjaGFibGUqIGFuZCBvblByZXNzJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnVUknO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvdG91Y2hhYmxlaGlnaGxpZ2h0JztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJzxUb3VjaGFibGVIaWdobGlnaHQ+JyxcbiAgICBkZXNjcmlwdGlvbjogKCdUb3VjaGFibGVIaWdobGlnaHQgd29ya3MgYnkgYWRkaW5nIGFuIGV4dHJhIHZpZXcgd2l0aCBhICcgK1xuICAgICAgJ2JsYWNrIGJhY2tncm91bmQgdW5kZXIgdGhlIHNpbmdsZSBjaGlsZCB2aWV3LiAgVGhpcyB3b3JrcyBiZXN0IHdoZW4gdGhlICcgK1xuICAgICAgJ2NoaWxkIHZpZXcgaXMgZnVsbHkgb3BhcXVlLCBhbHRob3VnaCBpdCBjYW4gYmUgbWFkZSB0byB3b3JrIGFzIGEgc2ltcGxlICcgK1xuICAgICAgJ2JhY2tncm91bmQgY29sb3IgY2hhbmdlIGFzIHdlbGwgd2l0aCB0aGUgYWN0aXZlT3BhY2l0eSBhbmQgJyArXG4gICAgICAndW5kZXJsYXlDb2xvciBwcm9wcy4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxUb3VjaGFibGVIaWdobGlnaHRCb3ggLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxUb3VjaGFibGVXaXRob3V0RmVlZGJhY2tCb3ggLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2sgd2l0aCBBbmltYXRlZCBjaGlsZCcsXG4gICAgZGVzY3JpcHRpb246ICgnVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2sgY2FuIGhhdmUgYW4gQW5pbWF0ZWRDb21wb25lbnQgYXMgYScgK1xuICAgICAgJ2RpcmVjdCBjaGlsZC4nOiBzdHJpbmcpLFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICBjb25zdCBtU2NhbGUgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMSk7XG4gICAgICBBbmltYXRlZC50aW1pbmcobVNjYWxlLCB7XG4gICAgICAgIHRvVmFsdWU6IDAuMyxcbiAgICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICB9KS5zdGFydCgpO1xuICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYigxODAsIDY0LCAxMTkpJyxcbiAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgIHRyYW5zZm9ybTogW3tzY2FsZTogbVNjYWxlfV0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgICAgPFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrPlxuICAgICAgICAgICAgICA8QW5pbWF0ZWQuVmlldyBzdHlsZT17c3R5bGV9IC8+XG4gICAgICAgICAgICA8L1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb3VjaGFibGVIaWdobGlnaHQgVW5kZXJsYXkgVmlzaWJpbGl0eScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFRvdWNoYWJsZUhpZ2hsaWdodFVuZGVybGF5TWV0aG9kcyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb3VjaGFibGUgVG91Y2ggU291bmQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxUb3VjaGFibGVUb3VjaFNvdW5kRGlzYWJsZWQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVG91Y2hhYmxlIG9uRm9jdXMnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxUb3VjaGFibGVPbkZvY3VzIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJzxUZXh0IG9uUHJlc3M9e2ZufT4gd2l0aCBoaWdobGlnaHQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFRleHRPblByZXNzQm94IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RvdWNoYWJsZSBmZWVkYmFjayBldmVudHMnLFxuICAgIGRlc2NyaXB0aW9uOiAoJzxUb3VjaGFibGUqPiBjb21wb25lbnRzIGFjY2VwdCBvblByZXNzLCBvblByZXNzSW4sICcgK1xuICAgICAgJ29uUHJlc3NPdXQsIGFuZCBvbkxvbmdQcmVzcyBhcyBwcm9wcy4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFRvdWNoYWJsZUZlZWRiYWNrRXZlbnRzIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RvdWNoYWJsZSBkZWxheSBmb3IgZXZlbnRzJyxcbiAgICBkZXNjcmlwdGlvbjogKCc8VG91Y2hhYmxlKj4gY29tcG9uZW50cyBhbHNvIGFjY2VwdCBkZWxheVByZXNzSW4sICcgK1xuICAgICAgJ2RlbGF5UHJlc3NPdXQsIGFuZCBkZWxheUxvbmdQcmVzcyBhcyBwcm9wcy4gVGhlc2UgcHJvcHMgaW1wYWN0IHRoZSAnICtcbiAgICAgICd0aW1pbmcgb2YgZmVlZGJhY2sgZXZlbnRzLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8VG91Y2hhYmxlRGVsYXlFdmVudHMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnM0QgVG91Y2ggLyBGb3JjZSBUb3VjaCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnaVBob25lIDggYW5kIDggcGx1cyBzdXBwb3J0IDNEIHRvdWNoLCB3aGljaCBhZGRzIGEgZm9yY2UgcHJvcGVydHkgdG8gdG91Y2hlcycsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8Rm9yY2VUb3VjaEV4YW1wbGUgLz47XG4gICAgfSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RvdWNoYWJsZSBIaXQgU2xvcCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoJzxUb3VjaGFibGUqPiBjb21wb25lbnRzIGFjY2VwdCBoaXRTbG9wIHByb3Agd2hpY2ggZXh0ZW5kcyB0aGUgdG91Y2ggYXJlYSAnICtcbiAgICAgICAgJ3dpdGhvdXQgY2hhbmdpbmcgdGhlIHZpZXcgYm91bmRzLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8VG91Y2hhYmxlSGl0U2xvcCAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb3VjaGFibGUgTmF0aXZlIE1ldGhvZHMnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgKCdTb21lIDxUb3VjaGFibGUqPiBjb21wb25lbnRzIGV4cG9zZSBuYXRpdmUgbWV0aG9kcyBsaWtlIGBtZWFzdXJlYC4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFRvdWNoYWJsZU5hdGl2ZU1ldGhvZHMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ3VzdG9tIFJpcHBsZSBSYWRpdXMgKEFuZHJvaWQtb25seSknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgKCdSaXBwbGUgcmFkaXVzIG9uIFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrIGNhbiBiZSBjb250cm9sbGVkJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxDdXN0b21SaXBwbGVSYWRpdXMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRGlzYWJsZWQgVG91Y2hhYmxlKicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAoJzxUb3VjaGFibGUqPiBjb21wb25lbnRzIGFjY2VwdCBkaXNhYmxlZCBwcm9wIHdoaWNoIHByZXZlbnRzICcgK1xuICAgICAgICAnYW55IGludGVyYWN0aW9uIHdpdGggY29tcG9uZW50Jzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxUb3VjaGFibGVEaXNhYmxlZCAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge0FsZXJ0LCBUZXh0LCBUb3VjaGFibGVPcGFjaXR5LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jbGFzcyBUcmFuc3BhcmVudEhpdFRlc3RFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4OiAxfX0+XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9eygpID0+IEFsZXJ0LmFsZXJ0KCdBbGVydCcsICdIaSEnKX0+XG4gICAgICAgICAgPFRleHQ+SEVMTE8hPC9UZXh0PlxuICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBvcGFjaXR5OiAwLjAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydHMudGl0bGUgPSAnVHJhbnNwYXJlbnRIaXRUZXN0RXhhbXBsZSc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZGlzcGxheU5hbWUgPSAnVHJhbnNwYXJlbnRIaXRUZXN0RXhhbXBsZSc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ1RyYW5zcGFyZW50IHZpZXcgcmVjZWl2aW5nIHRvdWNoIGV2ZW50cyc7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdUcmFuc3BhcmVudEhpdFRlc3RFeGFtcGxlJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8VHJhbnNwYXJlbnRIaXRUZXN0RXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7UGxhdGZvcm0sIFByZXNzYWJsZSwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY2xhc3MgVmlld0JvcmRlclN0eWxlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJFJlYWRPbmx5PHt8fH0+LFxuICB7fHNob3dCb3JkZXI6IGJvb2xlYW58fSxcbj4ge1xuICBzdGF0ZToge3Nob3dCb3JkZXI6IGJvb2xlYW59ID0ge1xuICAgIHNob3dCb3JkZXI6IHRydWUsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8UHJlc3NhYmxlIHRlc3RJRD1cImJvcmRlci1zdHlsZS1idXR0b25cIiBvblByZXNzPXt0aGlzLl9oYW5kbGVQcmVzc30+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogNSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zaG93Qm9yZGVyXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiAnZGFzaGVkJyxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBdfT5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+RGFzaGVkIGJvcmRlciBzdHlsZTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDUsXG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA1LFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuc2hvd0JvcmRlclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogJ2RvdHRlZCcsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgXX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMX19PkRvdHRlZCBib3JkZXIgc3R5bGU8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ByZXNzYWJsZT5cbiAgICApO1xuICB9XG5cbiAgX2hhbmRsZVByZXNzID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dCb3JkZXI6ICF0aGlzLnN0YXRlLnNob3dCb3JkZXJ9KTtcbiAgfTtcbn1cblxuY29uc3Qgb2Zmc2NyZWVuQWxwaGFDb21wb3NpdGluZ1N0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYWxwaGFDb21wb3NpdGluZzoge1xuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJyxcbiAgICB3aWR0aDogMTAwLFxuICAgIGhlaWdodDogNTAsXG4gICAgYm9yZGVyUmFkaXVzOiAxMDAsXG4gIH0sXG59KTtcblxuY2xhc3MgT2Zmc2NyZWVuQWxwaGFDb21wb3NpdGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJFJlYWRPbmx5PHt8dGVzdElEPzogP3N0cmluZ3x9PixcbiAge3xcbiAgICBhY3RpdmU6IGJvb2xlYW4sXG4gIHx9LFxuPiB7XG4gIHN0YXRlOiB7YWN0aXZlOiBib29sZWFufSA9IHtcbiAgICBhY3RpdmU6IGZhbHNlLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICB0ZXN0SUQ9XCJvZmZzY3JlZW4tYWxwaGEtY29tcG9zaXRpbmctYnV0dG9uXCJcbiAgICAgICAgb25QcmVzcz17dGhpcy5faGFuZGxlUHJlc3N9PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17e3BhZGRpbmdCb3R0b206IDEwfX0+QmxvYnM8L1RleHQ+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7b3BhY2l0eTogMS4wLCBwYWRkaW5nQm90dG9tOiAzMH19XG4gICAgICAgICAgICBuZWVkc09mZnNjcmVlbkFscGhhQ29tcG9zaXRpbmc9e3RoaXMuc3RhdGUuYWN0aXZlfT5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgb2Zmc2NyZWVuQWxwaGFDb21wb3NpdGluZ1N0eWxlcy5hbHBoYUNvbXBvc2l0aW5nLFxuICAgICAgICAgICAgICAgIHttYXJnaW5Ub3A6IDAsIG1hcmdpbkxlZnQ6IDAsIGJhY2tncm91bmRDb2xvcjogJyNGRjZGNTknfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIG9mZnNjcmVlbkFscGhhQ29tcG9zaXRpbmdTdHlsZXMuYWxwaGFDb21wb3NpdGluZyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IC01MCxcbiAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IDUwLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0Y3Q0IxNScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7cGFkZGluZ0JvdHRvbTogMTB9fT5cbiAgICAgICAgICAgIFNhbWUgYmxvYnMsIGJ1dCB0aGVpciBzaGFyZWQgY29udGFpbmVyIGhhdmUgMC41IG9wYWNpdHlcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3twYWRkaW5nQm90dG9tOiAxMH19PlxuICAgICAgICAgICAgVGFwIHRvIHt0aGlzLnN0YXRlLmFjdGl2ZSA/ICdhY3RpdmF0ZScgOiAnZGVhY3RpdmF0ZSd9eycgJ31cbiAgICAgICAgICAgIG5lZWRzT2Zmc2NyZWVuQWxwaGFDb21wb3NpdGluZ1xuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3tvcGFjaXR5OiAwLjh9fVxuICAgICAgICAgICAgbmVlZHNPZmZzY3JlZW5BbHBoYUNvbXBvc2l0aW5nPXt0aGlzLnN0YXRlLmFjdGl2ZX0+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIG9mZnNjcmVlbkFscGhhQ29tcG9zaXRpbmdTdHlsZXMuYWxwaGFDb21wb3NpdGluZyxcbiAgICAgICAgICAgICAgICB7bWFyZ2luVG9wOiAwLCBtYXJnaW5MZWZ0OiAwLCBiYWNrZ3JvdW5kQ29sb3I6ICcjRkY2RjU5J30sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW5BbHBoYUNvbXBvc2l0aW5nU3R5bGVzLmFscGhhQ29tcG9zaXRpbmcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAtNTAsXG4gICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiA1MCxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNGN0NCMTUnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgKTtcbiAgfVxuXG4gIF9oYW5kbGVQcmVzcyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHthY3RpdmU6ICF0aGlzLnN0YXRlLmFjdGl2ZX0pO1xuICB9O1xufVxuXG5jb25zdCBaSW5kZXhFeGFtcGxlU3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICB6SW5kZXg6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDUwLFxuICAgIG1hcmdpblRvcDogLTEwLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB9LFxufSk7XG5cbmNsYXNzIFpJbmRleEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gICRSZWFkT25seTx7fHx9PixcbiAge3xcbiAgICBmbGlwcGVkOiBib29sZWFuLFxuICB8fSxcbj4ge1xuICBzdGF0ZToge2ZsaXBwZWQ6IGJvb2xlYW59ID0ge1xuICAgIGZsaXBwZWQ6IGZhbHNlLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5zdGF0ZS5mbGlwcGVkID8gWy0xLCAwLCAxLCAyXSA6IFsyLCAxLCAwLCAtMV07XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcmVzc2FibGUgdGVzdElEPVwiei1pbmRleC1idXR0b25cIiBvblByZXNzPXt0aGlzLl9oYW5kbGVQcmVzc30+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7cGFkZGluZ0JvdHRvbTogMTB9fT5UYXAgdG8gZmxpcCBzb3J0aW5nIG9yZGVyPC9UZXh0PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBaSW5kZXhFeGFtcGxlU3R5bGVzLnpJbmRleCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRTU3MzczJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IGluZGljZXNbMF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfT5cbiAgICAgICAgICAgIDxUZXh0PlpJbmRleCB7aW5kaWNlc1swXX08L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBaSW5kZXhFeGFtcGxlU3R5bGVzLnpJbmRleCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IDUwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkYxNzYnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogaW5kaWNlc1sxXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgPFRleHQ+WkluZGV4IHtpbmRpY2VzWzFdfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgIFpJbmRleEV4YW1wbGVTdHlsZXMuekluZGV4LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogMTAwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM4MUM3ODQnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogaW5kaWNlc1syXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgPFRleHQ+WkluZGV4IHtpbmRpY2VzWzJdfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgIFpJbmRleEV4YW1wbGVTdHlsZXMuekluZGV4LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogMTUwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM2NEI1RjYnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogaW5kaWNlc1szXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19PlxuICAgICAgICAgICAgPFRleHQ+WkluZGV4IHtpbmRpY2VzWzNdfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgICk7XG4gIH1cblxuICBfaGFuZGxlUHJlc3MgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZmxpcHBlZDogIXRoaXMuc3RhdGUuZmxpcHBlZH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQb3NpdGlvblN0YXRpY1pJbmRleEV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIHRlc3RJRD1cInZpZXctdGVzdC16aW5kZXgtd2l0aC1zdGF0aWNcIlxuICAgICAgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICd5ZWxsb3cnLCBmbGV4RGlyZWN0aW9uOiAncm93J319PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgbGVmdDogMTAsXG4gICAgICAgIH19PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdwdXJwbGUnLFxuICAgICAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgIHRvcDogMzAsXG4gICAgICAgICAgICBsZWZ0OiA2NSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8Vmlld1xuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgekluZGV4OiAxMDAsXG4gICAgICAgICAgcG9zaXRpb246ICdzdGF0aWMnLFxuICAgICAgICB9fT5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnb3JhbmdlJyxcbiAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgIGhlaWdodDogNTAsXG4gICAgICAgICAgICB0b3A6IDEwLFxuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYnJvd24nLFxuICAgICAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnc3RhdGljJyxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmxhY2snLFxuICAgICAgICAgICAgICB3aWR0aDogMjUsXG4gICAgICAgICAgICAgIGhlaWdodDogMjUsXG4gICAgICAgICAgICAgIHRvcDogLTEwLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBsZWZ0OiAtMjAsXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY2xhc3MgRGlzcGxheU5vbmVTdHlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJFJlYWRPbmx5PHt8fH0+LFxuICB7fFxuICAgIGluZGV4OiBudW1iZXIsXG4gIHx9LFxuPiB7XG4gIHN0YXRlOiB7aW5kZXg6IG51bWJlcn0gPSB7XG4gICAgaW5kZXg6IDAsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8UHJlc3NhYmxlIHRlc3RJRD1cImRpc3BsYXktbm9uZS1idXR0b25cIiBvblByZXNzPXt0aGlzLl9oYW5kbGVQcmVzc30+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7cGFkZGluZ0JvdHRvbTogMTB9fT5cbiAgICAgICAgICAgIFByZXNzIHRvIHRvZ2dsZSBgZGlzcGxheTogbm9uZWBcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGhlaWdodDogNTAsXG4gICAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICAgICAgICAgICAgZGlzcGxheTogdGhpcy5zdGF0ZS5pbmRleCAlIDIgPT09IDAgPyAnbm9uZScgOiAnZmxleCcsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGhlaWdodDogNTAsXG4gICAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmx1ZScsXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuc3RhdGUuaW5kZXggJSAzID09PSAwID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICB3aWR0aDogNTAsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3llbGxvdycsXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuc3RhdGUuaW5kZXggJSA1ID09PSAwID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDMwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3NhbG1vbicsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogdGhpcy5zdGF0ZS5pbmRleCAlIDExID09PSAwID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGhlaWdodDogNTAsXG4gICAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnbWFnZW50YScsXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuc3RhdGUuaW5kZXggJSA3ID09PSAwID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ByZXNzYWJsZT5cbiAgICApO1xuICB9XG5cbiAgX2hhbmRsZVByZXNzID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe2luZGV4OiB0aGlzLnN0YXRlLmluZGV4ICsgMX0pO1xuICB9O1xufVxuXG5jbGFzcyBGbGV4R2FwRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDwkUmVhZE9ubHk8e3x0ZXN0SUQ/OiA/c3RyaW5nfH0+PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgdGVzdElEPXt0aGlzLnByb3BzLnRlc3RJRH1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgIHJvd0dhcDogMjAsXG4gICAgICAgICAgY29sdW1uR2FwOiAzMCxcbiAgICAgICAgfX0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnYmxhY2snLCBoZWlnaHQ6IDMwLCB3aWR0aDogMzB9fSAvPlxuICAgICAgICA8VmlldyBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJ2JsYWNrJywgaGVpZ2h0OiAzMCwgd2lkdGg6IDMwfX0gLz5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncGluaycsXG4gICAgICAgICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAgICAgZmxleEJhc2lzOiAzMCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8VmlldyBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJ2JsYWNrJywgaGVpZ2h0OiAzMCwgd2lkdGg6IDMwfX0gLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICdibGFjaycsIGhlaWdodDogMzAsIHdpZHRoOiAzMH19IC8+XG4gICAgICAgIDxWaWV3IHN0eWxlPXt7YmFja2dyb3VuZENvbG9yOiAnYmxhY2snLCBoZWlnaHQ6IDMwLCB3aWR0aDogMzB9fSAvPlxuICAgICAgICA8VmlldyBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJ2JsYWNrJywgaGVpZ2h0OiAzMCwgd2lkdGg6IDMwfX0gLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICdwaW5rJywgaGVpZ2h0OiAzMCwgd2lkdGg6IDMwfX0gLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICdwaW5rJywgaGVpZ2h0OiAzMCwgd2lkdGg6IDMwfX0gLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICdwaW5rJywgaGVpZ2h0OiAzMCwgd2lkdGg6IDMwfX0gLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICdwaW5rJywgaGVpZ2h0OiAzMCwgd2lkdGg6IDMwfX0gLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIExheW91dENvbmZvcm1hbmNlRXhhbXBsZSh7XG4gIHRlc3RJRCxcbn06ICRSZWFkT25seTx7dGVzdElEOiA/c3RyaW5nfT4pOiBSZWFjdC5Ob2RlIHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1xuICAgICAgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAncm93JywgZ2FwOiAxMH19XG4gICAgICB0ZXN0SUQ9XCJ2aWV3LXRlc3QtbGF5b3V0LWNvbmZvcm1hbmNlXCI+XG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQ+VW5zZXQ8L1RleHQ+XG4gICAgICAgIDxMYXlvdXRDb25mb3JtYW5jZUJveCAvPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFZpZXcgZXhwZXJpbWVudGFsX2xheW91dENvbmZvcm1hbmNlPVwiY2xhc3NpY1wiPlxuICAgICAgICA8VGV4dD5DbGFzc2ljPC9UZXh0PlxuICAgICAgICA8TGF5b3V0Q29uZm9ybWFuY2VCb3ggLz5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IGV4cGVyaW1lbnRhbF9sYXlvdXRDb25mb3JtYW5jZT1cInN0cmljdFwiPlxuICAgICAgICA8VGV4dD5TdHJpY3Q8L1RleHQ+XG4gICAgICAgIDxMYXlvdXRDb25mb3JtYW5jZUJveCAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gTGF5b3V0Q29uZm9ybWFuY2VCb3goKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgICAgICB3aWR0aDogNjAsXG4gICAgICAgIGhlaWdodDogNjAsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIH19PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgfX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnVmlldycsXG4gIGRvY3VtZW50YXRpb25VUkw6ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3ZpZXcnLFxuICBjYXRlZ29yeTogJ0Jhc2ljJyxcbiAgZGVzY3JpcHRpb246ICgnQmFzaWMgYnVpbGRpbmcgYmxvY2sgb2YgYWxsIFVJLCBleGFtcGxlcyB0aGF0ICcgK1xuICAgICdkZW1vbnN0cmF0ZSBzb21lIG9mIHRoZSBtYW55IHN0eWxlcyBhdmFpbGFibGUuJzogc3RyaW5nKSxcbiAgZGlzcGxheU5hbWU6ICdWaWV3RXhhbXBsZScsXG4gIGV4YW1wbGVzOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdCYWNrZ3JvdW5kIENvbG9yJyxcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgdGVzdElEPVwidmlldy10ZXN0LWJhY2tncm91bmQtY29sb3JcIlxuICAgICAgICAgICAgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICcjNTI3RkU0JywgcGFkZGluZzogNX19PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMTF9fT5CbHVlIGJhY2tncm91bmQ8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQm9yZGVyJyxcbiAgICAgIG5hbWU6ICdib3JkZXInLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJ2aWV3LXRlc3QtYm9yZGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXt7Ym9yZGVyQ29sb3I6ICcjNTI3RkU0JywgYm9yZGVyV2lkdGg6IDUsIHBhZGRpbmc6IDEwfX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMX19PjVweCBibHVlIGJvcmRlcjwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdQYWRkaW5nL01hcmdpbicsXG4gICAgICBuYW1lOiAncGFkZGluZy1tYXJnaW4nLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICBjb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gICAgICAgICAgYm94OiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNTI3RkU0JyxcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnIzAwMDAzMycsXG4gICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgdGVzdElEPVwidmlldy10ZXN0LXBhZGRpbmctbWFyZ2luXCJcbiAgICAgICAgICAgIHN0eWxlPXt7Ym9yZGVyQ29sb3I6ICcjYmIwMDAwJywgYm9yZGVyV2lkdGg6IDAuNX19PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCB7cGFkZGluZzogNX1dfT5cbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMTF9fT41cHggcGFkZGluZzwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwge21hcmdpbjogNX1dfT5cbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMTF9fT41cHggbWFyZ2luPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuYm94LFxuICAgICAgICAgICAgICAgIHttYXJnaW46IDUsIHBhZGRpbmc6IDUsIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnfSxcbiAgICAgICAgICAgICAgXX0+XG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+NXB4IG1hcmdpbiBhbmQgcGFkZGluZyw8L1RleHQ+XG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+d2lkdGhBdXRvbm9tb3VzPXRydWU8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQm9yZGVyIFJhZGl1cycsXG4gICAgICBuYW1lOiAnYm9yZGVyLXJhZGl1cycsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXcgdGVzdElEPVwidmlldy10ZXN0LWJvcmRlci1yYWRpdXNcIj5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7Ym9yZGVyV2lkdGg6IDAuNSwgYm9yZGVyUmFkaXVzOiA1LCBwYWRkaW5nOiA1fX0+XG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+XG4gICAgICAgICAgICAgICAgVG9vIG11Y2ggdXNlIG9mIGBib3JkZXJSYWRpdXNgIChlc3BlY2lhbGx5IGxhcmdlIHJhZGlpKSBvblxuICAgICAgICAgICAgICAgIGFueXRoaW5nIHdoaWNoIGlzIHNjcm9sbGluZyBtYXkgcmVzdWx0IGluIGRyb3BwZWQgZnJhbWVzLiBVc2VcbiAgICAgICAgICAgICAgICBzcGFyaW5nbHkuXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIHtQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgJiYgKFxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDIwLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogOCxcbiAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogMTIsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNTI3RkU0JyxcbiAgICAgICAgICAgICAgICAgIGJvcmRlckN1cnZlOiAnY29udGludW91cycsXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMTYsIGNvbG9yOiAnd2hpdGUnfX0+XG4gICAgICAgICAgICAgICAgICBWaWV3IHdpdGggY29udGludW91cyBib3JkZXIgY3VydmVcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQm9yZGVyIFN0eWxlJyxcbiAgICAgIG5hbWU6ICdib3JkZXItc3R5bGUnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFZpZXdCb3JkZXJTdHlsZUV4YW1wbGUgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdSb3VuZGVkIEJvcmRlcnMnLFxuICAgICAgbmFtZTogJ3JvdW5kZWQtYm9yZGVycycsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHRlc3RJRD1cInZpZXctdGVzdC1yb3VuZGVkLWJvcmRlcnNcIlxuICAgICAgICAgICAgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleFdyYXA6ICd3cmFwJ319PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogNTAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDI1LFxuICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMjUsXG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEwLFxuICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDUsXG4gICAgICAgICAgICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDEwLFxuICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAyNSxcbiAgICAgICAgICAgICAgICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiA1MCxcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogMTAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogNTAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiA1LFxuICAgICAgICAgICAgICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAxMCxcbiAgICAgICAgICAgICAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogMjUsXG4gICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogNTAsXG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEwLFxuICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIGJvcmRlckxlZnRXaWR0aDogNixcbiAgICAgICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogNixcbiAgICAgICAgICAgICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAyMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiA1MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0V2lkdGg6IDYsXG4gICAgICAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IDYsXG4gICAgICAgICAgICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDIwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNTAsXG4gICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGg6IDYsXG4gICAgICAgICAgICAgICAgYm9yZGVyTGVmdFdpZHRoOiA2LFxuICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IDIwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNTAsXG4gICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGg6IDYsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmlnaHRXaWR0aDogNixcbiAgICAgICAgICAgICAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogMjAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ092ZXJmbG93JyxcbiAgICAgIG5hbWU6ICdvdmVyZmxvdycsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgICAgICAgICBjb250YWluZXI6IHtcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiBTdHlsZVNoZWV0LmhhaXJsaW5lV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IDEyLFxuICAgICAgICAgICAgbWFyZ2luQm90dG9tOiA4LFxuICAgICAgICAgICAgbWFyZ2luRW5kOiAxNixcbiAgICAgICAgICAgIHdpZHRoOiA5NSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgIGhlaWdodDogMjAsXG4gICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE5PVEU6IFRoZSA8Vmlldz4gdGhhdCBzZXRzIGBvdmVyZmxvd2Agc2hvdWxkIG9ubHkgaGF2ZSBvdGhlciBsYXlvdXRcbiAgICAgICAgLy8gc3R5bGVzIHNvIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgdGVzdCB2aWV3IGZsYXR0ZW5pbmcgb3B0aW1pemF0aW9ucy5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VmlldyB0ZXN0SUQ9XCJ2aWV3LXRlc3Qtb3ZlcmZsb3dcIiBzdHlsZT17e2ZsZXhEaXJlY3Rpb246ICdyb3cnfX0+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbU3R5bGVTaGVldC5hYnNvbHV0ZUZpbGxdfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmNvbnRlbnR9PnVuZGVmaW5lZDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17W1N0eWxlU2hlZXQuYWJzb2x1dGVGaWxsLCB7b3ZlcmZsb3c6ICdoaWRkZW4nfV19PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuY29udGVudH0+aGlkZGVuPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbU3R5bGVTaGVldC5hYnNvbHV0ZUZpbGwsIHtvdmVyZmxvdzogJ3Zpc2libGUnfV19PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuY29udGVudH0+dmlzaWJsZTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ09wYWNpdHknLFxuICAgICAgbmFtZTogJ29wYWNpdHknLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3IHRlc3RJRD1cInZpZXctdGVzdC1vcGFjaXR5XCI+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e29wYWNpdHk6IDB9fT5cbiAgICAgICAgICAgICAgPFRleHQ+T3BhY2l0eSAwPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3tvcGFjaXR5OiAwLjF9fT5cbiAgICAgICAgICAgICAgPFRleHQ+T3BhY2l0eSAwLjE8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e29wYWNpdHk6IDAuM319PlxuICAgICAgICAgICAgICA8VGV4dD5PcGFjaXR5IDAuMzwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7b3BhY2l0eTogMC41fX0+XG4gICAgICAgICAgICAgIDxUZXh0Pk9wYWNpdHkgMC41PC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3tvcGFjaXR5OiAwLjd9fT5cbiAgICAgICAgICAgICAgPFRleHQ+T3BhY2l0eSAwLjc8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e29wYWNpdHk6IDAuOX19PlxuICAgICAgICAgICAgICA8VGV4dD5PcGFjaXR5IDAuOTwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7b3BhY2l0eTogMX19PlxuICAgICAgICAgICAgICA8VGV4dD5PcGFjaXR5IDE8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnT2Zmc2NyZWVuIEFscGhhIENvbXBvc2l0aW5nJyxcbiAgICAgIG5hbWU6ICdvZmZzY3JlZW4tYWxwaGEtY29tcG9zaXRpbmcnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxPZmZzY3JlZW5BbHBoYUNvbXBvc2l0aW5nIHRlc3RJRD1cInZpZXctdGVzdC1vZmZzY3JlZW4tYWxwaGEtY29tcG9zaXRpbmdcIiAvPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnWkluZGV4JyxcbiAgICAgIG5hbWU6ICd6LWluZGV4JyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIDxaSW5kZXhFeGFtcGxlIC8+O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnWkluZGV4IFdpdGggU3RhdGljJyxcbiAgICAgIG5hbWU6ICd6aW5kZXgtd2l0aC1zdGF0aWMnLFxuICAgICAgcmVuZGVyOiBQb3NpdGlvblN0YXRpY1pJbmRleEV4YW1wbGUsXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ2BkaXNwbGF5OiBub25lYCBzdHlsZScsXG4gICAgICBuYW1lOiAnZGlzcGxheS1ub25lJyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIDxEaXNwbGF5Tm9uZVN0eWxlIC8+O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFja2ZhY2VWaXNpYmlsaXR5JyxcbiAgICAgIG5hbWU6ICdiYWNrZmFjZS12aXNpYmlsaXR5JyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VmlldyB0ZXN0SUQ9XCJ2aWV3LXRlc3QtYmFja2ZhY2UtdmlzaWJpbGl0eVwiPlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3twYWRkaW5nQm90dG9tOiAxMH19PlxuICAgICAgICAgICAgICBWaWV3ICMxLCBmcm9udCBpcyB2aXNpYmxlLCBiYWNrIGlzIGhpZGRlbi5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7anVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBhbGlnbkl0ZW1zOiAnY2VudGVyJ319PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1MCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTAsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dD5Gcm9udDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1MCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTAsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gICAgICAgICAgICAgICAgICBiYWNrZmFjZVZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbe3JvdGF0ZVk6ICcxODBkZWcnfV0sXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dD5CYWNrIChZb3Ugc2hvdWxkIG5vdCBzZWUgdGhpcyk8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7cGFkZGluZ1ZlcnRpY2FsOiAxMH19PlxuICAgICAgICAgICAgICBWaWV3ICMyLCBmcm9udCBpcyBoaWRkZW4sIGJhY2sgaXMgdmlzaWJsZS5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7anVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBhbGlnbkl0ZW1zOiAnY2VudGVyJ319PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1MCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTAsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dD5Gcm9udCAoWW91IHNob3VsZCBub3Qgc2VlIHRoaXMpPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogMTUwLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDE1MCxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dD5CYWNrPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnVmlldyB3aXRoIGFyaWEtbGFiZWw9XCJsYWJlbFwiJyxcbiAgICAgIG5hbWU6ICdhcmlhLWxhYmVsJyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgdGVzdElEPVwidmlldy10ZXN0LWFyaWEtbGFiZWxcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJsdWUgYmFja2dyb3VuZCBWaWV3IHdpdGggVGV4dFwiXG4gICAgICAgICAgICBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJyM1MjdGRTQnLCBwYWRkaW5nOiA1fX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMX19PkJsdWUgYmFja2dyb3VuZDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdGbGV4R2FwJyxcbiAgICAgIG5hbWU6ICdmbGV4Z2FwJyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIDxGbGV4R2FwRXhhbXBsZSB0ZXN0SUQ9XCJ2aWV3LXRlc3QtZmxleGdhcFwiIC8+O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnSW5zZXRzJyxcbiAgICAgIG5hbWU6ICdpbnNldHMnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3IHRlc3RJRD1cInZpZXctdGVzdC1pbnNldHNcIiBzdHlsZT17e3Jvd0dhcDogMTB9fT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7cG9zaXRpb246ICdyZWxhdGl2ZScsIGhlaWdodDogNTAsIGJvcmRlcldpZHRoOiAxfX0+XG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM1MjdGRTQnLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogNSxcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgaW5zZXQ6IDEwLFxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+aW5zZXQgMTA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7cG9zaXRpb246ICdyZWxhdGl2ZScsIGhlaWdodDogNTAsIGJvcmRlcldpZHRoOiAxfX0+XG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM1MjdGRTQnLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogNSxcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgaW5zZXRCbG9jazogNSxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMX19Pmluc2V0QmxvY2sgNTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3twb3NpdGlvbjogJ3JlbGF0aXZlJywgaGVpZ2h0OiA1MCwgYm9yZGVyV2lkdGg6IDF9fT5cbiAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzUyN0ZFNCcsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1LFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBpbnNldEJsb2NrRW5kOiA1LFxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+aW5zZXRCbG9ja0VuZCA1PC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e3Bvc2l0aW9uOiAncmVsYXRpdmUnLCBoZWlnaHQ6IDUwLCBib3JkZXJXaWR0aDogMX19PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNTI3RkU0JyxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDUsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIGluc2V0QmxvY2tTdGFydDogNSxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMX19Pmluc2V0QmxvY2tTdGFydCA1PC9UZXh0PlxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e3Bvc2l0aW9uOiAncmVsYXRpdmUnLCBoZWlnaHQ6IDUwLCBib3JkZXJXaWR0aDogMX19PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNTI3RkU0JyxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDUsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lOiA1LFxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+aW5zZXRJbmxpbmUgNTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3twb3NpdGlvbjogJ3JlbGF0aXZlJywgaGVpZ2h0OiA1MCwgYm9yZGVyV2lkdGg6IDF9fT5cbiAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzUyN0ZFNCcsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1LFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBpbnNldElubGluZUVuZDogNSxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMX19Pmluc2V0SW5saW5lRW5kIDU8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7cG9zaXRpb246ICdyZWxhdGl2ZScsIGhlaWdodDogNTAsIGJvcmRlcldpZHRoOiAxfX0+XG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM1MjdGRTQnLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogNSxcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgaW5zZXRJbmxpbmVTdGFydDogNSxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e2ZvbnRTaXplOiAxMX19Pmluc2V0SW5saW5lU3RhcnQgNTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0xvZ2ljYWwgQm9yZGVyIENvbG9yJyxcbiAgICAgIG5hbWU6ICdsb2dpY2FsLWJvcmRlci1jb2xvcicsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXcgdGVzdElEPVwidmlldy10ZXN0LWxvZ2ljYWwtYm9yZGVyLWNvbG9yXCIgc3R5bGU9e3tyb3dHYXA6IDEwfX0+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e3Bvc2l0aW9uOiAncmVsYXRpdmUnLCBoZWlnaHQ6IDUwLCBib3JkZXJXaWR0aDogMX19PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBib3JkZXJCbG9ja0NvbG9yOiAnb3JhbmdlJyxcbiAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiA1LFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICB0b3A6IDEwLFxuICAgICAgICAgICAgICAgICAgYm90dG9tOiAxMCxcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDEwLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDEwLFxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+Ym9yZGVyQmxvY2tDb2xvciBvcmFuZ2U8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7cG9zaXRpb246ICdyZWxhdGl2ZScsIGhlaWdodDogNjUsIGJvcmRlcldpZHRoOiAxfX0+XG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGJvcmRlckJsb2NrRW5kQ29sb3I6ICdncmVlbicsXG4gICAgICAgICAgICAgICAgICBib3JkZXJCbG9ja1N0YXJ0Q29sb3I6ICdwdXJwbGUnLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDUsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIHRvcDogMTAsXG4gICAgICAgICAgICAgICAgICBib3R0b206IDEwLFxuICAgICAgICAgICAgICAgICAgbGVmdDogMTAsXG4gICAgICAgICAgICAgICAgICByaWdodDogMTAsXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tmb250U2l6ZTogMTF9fT5ib3JkZXJCbG9ja1N0YXJ0Q29sb3IgcHVycGxlPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFNpemU6IDExfX0+Ym9yZGVyQmxvY2tFbmRDb2xvciBncmVlbjwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0xheW91dCBjb25mb3JtYW5jZScsXG4gICAgICBuYW1lOiAnbGF5b3V0LWNvbmZvcm1hbmNlJyxcbiAgICAgIHJlbmRlcjogTGF5b3V0Q29uZm9ybWFuY2VFeGFtcGxlLFxuICAgIH0sXG4gIF0sXG59OiBSTlRlc3Rlck1vZHVsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCBNeU5hdGl2ZVZpZXcgZnJvbSAnLi4vLi4vLi4vTmF0aXZlQ29tcG9uZW50RXhhbXBsZS9qcy9NeU5hdGl2ZVZpZXcnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnRzLnRpdGxlID0gJ05ldyBBcmNoaXRlY3R1cmUgRXhhbXBsZXMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9XG4gICdDb2RlZ2VuIGRpc2NvdmVyeSBtdXN0IGJlIGVuYWJsZWQgZm9yIGlPUy4gU2VlIFBvZGZpbGUgZm9yIG1vcmUgZGV0YWlscy4gU2ltcGxlIGNvbXBvbmVudCB1c2luZyB0aGUgbmV3IGFyY2hpdGVjdHVyZS4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnTmV3IEFyY2hpdGVjdHVyZSBSZW5kZXJlcicsXG4gICAgZGVzY3JpcHRpb246ICdDbGljayB0byBjaGFuZ2UgYmFja2dyb3VuZCBhbmQgb3BhY2l0eScsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxNeU5hdGl2ZVZpZXcgLz5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtNeUxlZ2FjeVZpZXdUeXBlfSBmcm9tICcuL015TGVnYWN5Vmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7TXlOYXRpdmVWaWV3VHlwZX0gZnJvbSAnLi9NeU5hdGl2ZVZpZXdOYXRpdmVDb21wb25lbnQnO1xuXG5pbXBvcnQgUk5UTXlMZWdhY3lOYXRpdmVWaWV3IGZyb20gJy4vTXlMZWdhY3lWaWV3TmF0aXZlQ29tcG9uZW50JztcbmltcG9ydCB7XG4gIGNhbGxOYXRpdmVNZXRob2RUb0FkZE92ZXJsYXlzLFxuICBjYWxsTmF0aXZlTWV0aG9kVG9DaGFuZ2VCYWNrZ3JvdW5kQ29sb3IsXG4gIGNhbGxOYXRpdmVNZXRob2RUb1JlbW92ZU92ZXJsYXlzLFxufSBmcm9tICcuL015TGVnYWN5Vmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgUk5UTXlOYXRpdmVWaWV3LCB7XG4gIENvbW1hbmRzIGFzIFJOVE15TmF0aXZlVmlld0NvbW1hbmRzLFxufSBmcm9tICcuL015TmF0aXZlVmlld05hdGl2ZUNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9uLCBUZXh0LCBVSU1hbmFnZXIsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5jb25zdCBjb2xvcnMgPSBbXG4gICcjMDAwMEZGJyxcbiAgJyNGRjAwMDAnLFxuICAnIzAwRkYwMCcsXG4gICcjMDAzMzAwJyxcbiAgJyMzMzAwMDAnLFxuICAnIzAwMDAzMycsXG5dO1xuXG5jb25zdCBjb3JuZXJSYWRpdXNlcyA9IFswLCAyMCwgNDAsIDYwLCA4MCwgMTAwLCAxMjBdO1xuXG5jbGFzcyBIU0JBIHtcbiAgaHVlOiBudW1iZXI7XG4gIHNhdHVyYXRpb246IG51bWJlcjtcbiAgYnJpZ2h0bmVzczogbnVtYmVyO1xuICBhbHBoYTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGh1ZTogbnVtYmVyID0gMC4wLFxuICAgIHNhdHVyYXRpb246IG51bWJlciA9IDAuMCxcbiAgICBicmlnaHRuZXNzOiBudW1iZXIgPSAwLjAsXG4gICAgYWxwaGE6IG51bWJlciA9IDAuMCxcbiAgKSB7XG4gICAgdGhpcy5odWUgPSBodWU7XG4gICAgdGhpcy5zYXR1cmF0aW9uID0gc2F0dXJhdGlvbjtcbiAgICB0aGlzLmJyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuICAgIHRoaXMuYWxwaGEgPSBhbHBoYTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBoOiAke3RoaXMuaHVlfSwgczogJHt0aGlzLnNhdHVyYXRpb259LCBiOiAke3RoaXMuYnJpZ2h0bmVzc30sIGE6ICR7dGhpcy5hbHBoYX1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJlYXV0aWZ5KG51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKG51bWJlciAlIDEgPT09IDApIHtcbiAgICByZXR1cm4gbnVtYmVyLnRvRml4ZWQoKTtcbiAgfVxuICByZXR1cm4gbnVtYmVyLnRvRml4ZWQoMik7XG59XG5cbnR5cGUgTWVhc3VyZVN0cnVjdCA9IHtcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxufTtcblxuY29uc3QgTWVhc3VyZVN0cnVjdFplcm86IE1lYXN1cmVTdHJ1Y3QgPSB7XG4gIHg6IDAsXG4gIHk6IDAsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG59O1xuXG5mdW5jdGlvbiBnZXRUZXh0Rm9yKG1lYXN1cmVTdHJ1Y3Q6IE1lYXN1cmVTdHJ1Y3QpOiBzdHJpbmcge1xuICByZXR1cm4gYHg6ICR7YmVhdXRpZnkobWVhc3VyZVN0cnVjdC54KX0sIHk6ICR7YmVhdXRpZnkoXG4gICAgbWVhc3VyZVN0cnVjdC55LFxuICApfSwgd2lkdGg6ICR7YmVhdXRpZnkobWVhc3VyZVN0cnVjdC53aWR0aCl9LCBoZWlnaHQ6ICR7YmVhdXRpZnkoXG4gICAgbWVhc3VyZVN0cnVjdC5oZWlnaHQsXG4gICl9YDtcbn1cblxuLy8gVGhpcyBpcyBhbiBleGFtcGxlIGNvbXBvbmVudCB0aGF0IG1pZ3JhdGVzIHRvIHVzZSB0aGUgbmV3IGFyY2hpdGVjdHVyZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE15TmF0aXZlVmlldyhwcm9wczoge30pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPHR5cGVvZiBWaWV3IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxSZWFjdC5FbGVtZW50UmVmPE15TmF0aXZlVmlld1R5cGU+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGxlZ2FjeVJlZiA9IHVzZVJlZjxSZWFjdC5FbGVtZW50UmVmPE15TGVnYWN5Vmlld1R5cGU+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtvcGFjaXR5LCBzZXRPcGFjaXR5XSA9IHVzZVN0YXRlKDEuMCk7XG4gIGNvbnN0IFthcnJheVZhbHVlcywgc2V0QXJyYXlWYWx1ZXNdID0gdXNlU3RhdGUoWzEsIDIsIDNdKTtcbiAgY29uc3QgW2hzYmEsIHNldEhzYmFdID0gdXNlU3RhdGU8SFNCQT4obmV3IEhTQkEoKSk7XG4gIGNvbnN0IFtjb3JuZXJSYWRpdXNJbmRleCwgc2V0Q29ybmVyUmFkaXVzSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgY29uc3QgW2xlZ2FjeU1lYXN1cmUsIHNldExlZ2FjeU1lYXN1cmVdID1cbiAgICB1c2VTdGF0ZTxNZWFzdXJlU3RydWN0PihNZWFzdXJlU3RydWN0WmVybyk7XG4gIGNvbnN0IFtsZWdhY3lNZWFzdXJlSW5XaW5kb3csIHNldExlZ2FjeU1lYXN1cmVJbldpbmRvd10gPVxuICAgIHVzZVN0YXRlPE1lYXN1cmVTdHJ1Y3Q+KE1lYXN1cmVTdHJ1Y3RaZXJvKTtcbiAgY29uc3QgW2xlZ2FjeU1lYXN1cmVMYXlvdXQsIHNldExlZ2FjeU1lYXN1cmVMYXlvdXRdID1cbiAgICB1c2VTdGF0ZTxNZWFzdXJlU3RydWN0PihNZWFzdXJlU3RydWN0WmVybyk7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgcmVmPXtjb250YWluZXJSZWZ9IHN0eWxlPXt7ZmxleDogMX19PlxuICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ3JlZCd9fT5GYWJyaWMgVmlldzwvVGV4dD5cbiAgICAgIDxSTlRNeU5hdGl2ZVZpZXdcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHN0eWxlPXt7ZmxleDogMX19XG4gICAgICAgIG9wYWNpdHk9e29wYWNpdHl9XG4gICAgICAgIHZhbHVlcz17YXJyYXlWYWx1ZXN9XG4gICAgICAgIG9uSW50QXJyYXlDaGFuZ2VkPXtldmVudCA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXZlbnQubmF0aXZlRXZlbnQudmFsdWVzKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhldmVudC5uYXRpdmVFdmVudC5ib29sVmFsdWVzKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhldmVudC5uYXRpdmVFdmVudC5mbG9hdHMpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50Lm5hdGl2ZUV2ZW50LmRvdWJsZXMpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50Lm5hdGl2ZUV2ZW50Lnllc05vcyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZXZlbnQubmF0aXZlRXZlbnQuc3RyaW5ncyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZXZlbnQubmF0aXZlRXZlbnQubGF0TG9ucyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZXZlbnQubmF0aXZlRXZlbnQubXVsdGlBcnJheXMpO1xuICAgICAgICB9fVxuICAgICAgICBvbkxlZ2FjeVN0eWxlRXZlbnQ9e2V2ZW50ID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhldmVudC5uYXRpdmVFdmVudC5zdHJpbmcpO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxUZXh0IHN0eWxlPXt7Y29sb3I6ICdyZWQnfX0+TGVnYWN5IFZpZXc8L1RleHQ+XG4gICAgICA8Uk5UTXlMZWdhY3lOYXRpdmVWaWV3XG4gICAgICAgIHJlZj17bGVnYWN5UmVmfVxuICAgICAgICBzdHlsZT17e2ZsZXg6IDF9fVxuICAgICAgICBvcGFjaXR5PXtvcGFjaXR5fVxuICAgICAgICBvbkNvbG9yQ2hhbmdlZD17ZXZlbnQgPT5cbiAgICAgICAgICBzZXRIc2JhKFxuICAgICAgICAgICAgbmV3IEhTQkEoXG4gICAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvci5odWUsXG4gICAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvci5zYXR1cmF0aW9uLFxuICAgICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IuYnJpZ2h0bmVzcyxcbiAgICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yLmFscGhhLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnZ3JlZW4nLCB0ZXh0QWxpZ246ICdjZW50ZXInfX0+XG4gICAgICAgIEhTQkE6IHtoc2JhLnRvU3RyaW5nKCl9XG4gICAgICA8L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnZ3JlZW4nLCB0ZXh0QWxpZ246ICdjZW50ZXInfX0+XG4gICAgICAgIENvbnN0YW50cyBGcm9tIEludGVyb3AgTGF5ZXI6eycgJ31cbiAgICAgICAge1VJTWFuYWdlci5nZXRWaWV3TWFuYWdlckNvbmZpZygnUk5UTXlMZWdhY3lOYXRpdmVWaWV3JykuQ29uc3RhbnRzLlBJfVxuICAgICAgPC9UZXh0PlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0aXRsZT1cIkNoYW5nZSBCYWNrZ3JvdW5kXCJcbiAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgIGxldCBuZXdDb2xvciA9IGNvbG9yc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV07XG4gICAgICAgICAgUk5UTXlOYXRpdmVWaWV3Q29tbWFuZHMuY2FsbE5hdGl2ZU1ldGhvZFRvQ2hhbmdlQmFja2dyb3VuZENvbG9yKFxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgICAgICAgIHJlZi5jdXJyZW50LFxuICAgICAgICAgICAgbmV3Q29sb3IsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNhbGxOYXRpdmVNZXRob2RUb0NoYW5nZUJhY2tncm91bmRDb2xvcihsZWdhY3lSZWYuY3VycmVudCwgbmV3Q29sb3IpO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgdGl0bGU9XCJBZGQgT3ZlcmxheXNcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgbGV0IHJhbmRvbUNvbG9ySWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KTtcbiAgICAgICAgICBsZXQgb3ZlcmxheUNvbG9ycyA9IFtcbiAgICAgICAgICAgIGNvbG9yc1tyYW5kb21Db2xvcklkXSxcbiAgICAgICAgICAgIGNvbG9yc1socmFuZG9tQ29sb3JJZCArIDEpICUgNV0sXG4gICAgICAgICAgXTtcbiAgICAgICAgICBSTlRNeU5hdGl2ZVZpZXdDb21tYW5kcy5jYWxsTmF0aXZlTWV0aG9kVG9BZGRPdmVybGF5cyhcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICByZWYuY3VycmVudCxcbiAgICAgICAgICAgIG92ZXJsYXlDb2xvcnMsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjYWxsTmF0aXZlTWV0aG9kVG9BZGRPdmVybGF5cyhsZWdhY3lSZWYuY3VycmVudCwgb3ZlcmxheUNvbG9ycyk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0aXRsZT1cIlJlbW92ZSBPdmVybGF5c1wiXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBSTlRNeU5hdGl2ZVZpZXdDb21tYW5kcy5jYWxsTmF0aXZlTWV0aG9kVG9SZW1vdmVPdmVybGF5cyhcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICByZWYuY3VycmVudCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNhbGxOYXRpdmVNZXRob2RUb1JlbW92ZU92ZXJsYXlzKGxlZ2FjeVJlZi5jdXJyZW50KTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIHRpdGxlPVwiU2V0IE9wYWNpdHlcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgc2V0T3BhY2l0eShNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICBzZXRBcnJheVZhbHVlcyhbXG4gICAgICAgICAgICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLFxuICAgICAgICAgICAgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0aXRsZT1cIkNvbnNvbGUubG9nIE1lYXN1cmVcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgcmVmLmN1cnJlbnQ/Lm1lYXN1cmUoKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbGVnYWN5UmVmLmN1cnJlbnQ/Lm1lYXN1cmUoKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgICAgICAgIHNldExlZ2FjeU1lYXN1cmUoe3gsIHksIHdpZHRoLCBoZWlnaHR9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZWdhY3lSZWYuY3VycmVudD8ubWVhc3VyZUluV2luZG93KCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICAgICAgICBzZXRMZWdhY3lNZWFzdXJlSW5XaW5kb3coe3gsIHksIHdpZHRoLCBoZWlnaHR9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChjb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgbGVnYWN5UmVmLmN1cnJlbnQ/Lm1lYXN1cmVMYXlvdXQoXG4gICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICAgIGNvbnRhaW5lclJlZi5jdXJyZW50LFxuICAgICAgICAgICAgICAoeCwgeSwgd2lkdGgsIGhlaWdodCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldExlZ2FjeU1lYXN1cmVMYXlvdXQoe3gsIHksIHdpZHRoLCBoZWlnaHR9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgdGl0bGU9XCJGaXJlIExlZ2FjeSBTdHlsZSBFdmVudFwiXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBSTlRNeU5hdGl2ZVZpZXdDb21tYW5kcy5maXJlTGFnYWN5U3R5bGVFdmVudChcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgICAgICAgICByZWYuY3VycmVudCxcbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxUZXh0IHN0eWxlPXt7Y29sb3I6ICdncmVlbicsIHRleHRBbGlnbjogJ2NlbnRlcid9fT5cbiAgICAgICAgJmd0OyBJbnRlcm9wIExheWVyIE1lYXN1cmVtZW50cyAmbHQ7XG4gICAgICA8L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnZ3JlZW4nLCB0ZXh0QWxpZ246ICdjZW50ZXInfX0+XG4gICAgICAgIG1lYXN1cmUge2dldFRleHRGb3IobGVnYWN5TWVhc3VyZSl9XG4gICAgICA8L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnZ3JlZW4nLCB0ZXh0QWxpZ246ICdjZW50ZXInfX0+XG4gICAgICAgIEluV2luZG93IHtnZXRUZXh0Rm9yKGxlZ2FjeU1lYXN1cmVJbldpbmRvdyl9XG4gICAgICA8L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnZ3JlZW4nLCB0ZXh0QWxpZ246ICdjZW50ZXInfX0+XG4gICAgICAgIEluTGF5b3V0IHtnZXRUZXh0Rm9yKGxlZ2FjeU1lYXN1cmVMYXlvdXQpfVxuICAgICAgPC9UZXh0PlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0aXRsZT1cIlRlc3Qgc2V0TmF0aXZlUHJvcHNcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Q1JJbmRleCA9XG4gICAgICAgICAgICBjb3JuZXJSYWRpdXNJbmRleCArIDEgPj0gY29ybmVyUmFkaXVzZXMubGVuZ3RoXG4gICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICA6IGNvcm5lclJhZGl1c0luZGV4ICsgMTtcbiAgICAgICAgICBzZXRDb3JuZXJSYWRpdXNJbmRleChuZXdDUkluZGV4KTtcbiAgICAgICAgICBsZWdhY3lSZWYuY3VycmVudD8uc2V0TmF0aXZlUHJvcHMoe1xuICAgICAgICAgICAgY29ybmVyUmFkaXVzOiBjb3JuZXJSYWRpdXNlc1tuZXdDUkluZGV4XSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtIb3N0Q29tcG9uZW50fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuaW1wb3J0IHR5cGUge1ZpZXdQcm9wc30gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5cbmltcG9ydCBSZWFjdE5hdGl2ZSBmcm9tICcuLi8uLi8uLi9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7VUlNYW5hZ2VyLCByZXF1aXJlTmF0aXZlQ29tcG9uZW50fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG50eXBlIENvbG9yQ2hhbmdlZEV2ZW50ID0ge1xuICBuYXRpdmVFdmVudDoge1xuICAgIGJhY2tncm91bmRDb2xvcjoge1xuICAgICAgaHVlOiBudW1iZXIsXG4gICAgICBzYXR1cmF0aW9uOiBudW1iZXIsXG4gICAgICBicmlnaHRuZXNzOiBudW1iZXIsXG4gICAgICBhbHBoYTogbnVtYmVyLFxuICAgIH0sXG4gIH0sXG59O1xuXG50eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcbiAgb3BhY2l0eT86IG51bWJlcixcbiAgY29sb3I/OiBzdHJpbmcsXG4gIG9uQ29sb3JDaGFuZ2VkPzogKGV2ZW50OiBDb2xvckNoYW5nZWRFdmVudCkgPT4gdm9pZCxcbnx9PjtcblxuZXhwb3J0IHR5cGUgTXlMZWdhY3lWaWV3VHlwZSA9IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsbE5hdGl2ZU1ldGhvZFRvQ2hhbmdlQmFja2dyb3VuZENvbG9yKFxuICB2aWV3UmVmOiBSZWFjdC5FbGVtZW50UmVmPE15TGVnYWN5Vmlld1R5cGU+IHwgbnVsbCxcbiAgY29sb3I6IHN0cmluZyxcbikge1xuICBpZiAoIXZpZXdSZWYpIHtcbiAgICBjb25zb2xlLmxvZygndmlld1JlZiBpcyBudWxsJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlYWN0VGFnID0gUmVhY3ROYXRpdmUuZmluZE5vZGVIYW5kbGUodmlld1JlZik7XG4gIGlmIChyZWFjdFRhZyA9PSBudWxsKSB7XG4gICAgY29uc29sZS5sb2coJ3JlYWN0VGFnIGlzIG51bGwnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgVUlNYW5hZ2VyLmRpc3BhdGNoVmlld01hbmFnZXJDb21tYW5kKFxuICAgIHJlYWN0VGFnLFxuICAgIFVJTWFuYWdlci5nZXRWaWV3TWFuYWdlckNvbmZpZygnUk5UTXlMZWdhY3lOYXRpdmVWaWV3JykuQ29tbWFuZHNcbiAgICAgIC5jaGFuZ2VCYWNrZ3JvdW5kQ29sb3IsXG4gICAgW2NvbG9yXSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxOYXRpdmVNZXRob2RUb0FkZE92ZXJsYXlzKFxuICB2aWV3UmVmOiBSZWFjdC5FbGVtZW50UmVmPE15TGVnYWN5Vmlld1R5cGU+IHwgbnVsbCxcbiAgb3ZlcmxheUNvbG9yczogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPixcbikge1xuICBpZiAoIXZpZXdSZWYpIHtcbiAgICBjb25zb2xlLmxvZygndmlld1JlZiBpcyBudWxsJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlYWN0VGFnID0gUmVhY3ROYXRpdmUuZmluZE5vZGVIYW5kbGUodmlld1JlZik7XG4gIGlmIChyZWFjdFRhZyA9PSBudWxsKSB7XG4gICAgY29uc29sZS5sb2coJ3JlYWN0VGFnIGlzIG51bGwnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBVSU1hbmFnZXIuZGlzcGF0Y2hWaWV3TWFuYWdlckNvbW1hbmQoXG4gICAgcmVhY3RUYWcsXG4gICAgVUlNYW5hZ2VyLmdldFZpZXdNYW5hZ2VyQ29uZmlnKCdSTlRNeUxlZ2FjeU5hdGl2ZVZpZXcnKS5Db21tYW5kc1xuICAgICAgLmFkZE92ZXJsYXlzLFxuICAgIFtvdmVybGF5Q29sb3JzXSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxOYXRpdmVNZXRob2RUb1JlbW92ZU92ZXJsYXlzKFxuICB2aWV3UmVmOiBSZWFjdC5FbGVtZW50UmVmPE15TGVnYWN5Vmlld1R5cGU+IHwgbnVsbCxcbikge1xuICBpZiAoIXZpZXdSZWYpIHtcbiAgICBjb25zb2xlLmxvZygndmlld1JlZiBpcyBudWxsJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlYWN0VGFnID0gUmVhY3ROYXRpdmUuZmluZE5vZGVIYW5kbGUodmlld1JlZik7XG4gIGlmIChyZWFjdFRhZyA9PSBudWxsKSB7XG4gICAgY29uc29sZS5sb2coJ3JlYWN0VGFnIGlzIG51bGwnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBVSU1hbmFnZXIuZGlzcGF0Y2hWaWV3TWFuYWdlckNvbW1hbmQoXG4gICAgcmVhY3RUYWcsXG4gICAgVUlNYW5hZ2VyLmdldFZpZXdNYW5hZ2VyQ29uZmlnKCdSTlRNeUxlZ2FjeU5hdGl2ZVZpZXcnKS5Db21tYW5kc1xuICAgICAgLnJlbW92ZU92ZXJsYXlzLFxuICAgIFtdLFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCAocmVxdWlyZU5hdGl2ZUNvbXBvbmVudChcbiAgJ1JOVE15TGVnYWN5TmF0aXZlVmlldycsXG4pOiBIb3N0Q29tcG9uZW50PE5hdGl2ZVByb3BzPik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1ZpZXdQcm9wc30gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5pbXBvcnQgdHlwZSB7SG9zdENvbXBvbmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZW5kZXJlci9zaGltcy9SZWFjdE5hdGl2ZVR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgQnViYmxpbmdFdmVudEhhbmRsZXIsXG4gIERvdWJsZSxcbiAgRmxvYXQsXG4gIEludDMyLFxufSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvZGVnZW5UeXBlcyc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tbWFuZHMgZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvY29kZWdlbk5hdGl2ZUNvbW1hbmRzJztcbmltcG9ydCBjb2RlZ2VuTmF0aXZlQ29tcG9uZW50IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVXRpbGl0aWVzL2NvZGVnZW5OYXRpdmVDb21wb25lbnQnO1xuXG50eXBlIEV2ZW50ID0gJFJlYWRPbmx5PHtcbiAgdmFsdWVzOiAkUmVhZE9ubHlBcnJheTxJbnQzMj4sXG4gIGJvb2xWYWx1ZXM6ICRSZWFkT25seUFycmF5PGJvb2xlYW4+LFxuICBmbG9hdHM6ICRSZWFkT25seUFycmF5PEZsb2F0PixcbiAgZG91YmxlczogJFJlYWRPbmx5QXJyYXk8RG91YmxlPixcbiAgeWVzTm9zOiAkUmVhZE9ubHlBcnJheTwneWVwJyB8ICdub3BlJz4sXG4gIHN0cmluZ3M6ICRSZWFkT25seUFycmF5PHN0cmluZz4sXG4gIGxhdExvbnM6ICRSZWFkT25seUFycmF5PHt8bGF0OiBEb3VibGUsIGxvbjogRG91YmxlfH0+LFxuICBtdWx0aUFycmF5czogJFJlYWRPbmx5QXJyYXk8JFJlYWRPbmx5QXJyYXk8SW50MzI+Pixcbn0+O1xuXG50eXBlIExlZ2FjeVN0eWxlRXZlbnQgPSAkUmVhZE9ubHk8e1xuICBzdHJpbmc6IHN0cmluZyxcbn0+O1xuXG50eXBlIE5hdGl2ZVByb3BzID0gJFJlYWRPbmx5PHt8XG4gIC4uLlZpZXdQcm9wcyxcbiAgb3BhY2l0eT86IEZsb2F0LFxuICB2YWx1ZXM6ICRSZWFkT25seUFycmF5PEludDMyPixcblxuICAvLyBFdmVudHNcbiAgb25JbnRBcnJheUNoYW5nZWQ/OiA/QnViYmxpbmdFdmVudEhhbmRsZXI8RXZlbnQ+LFxuICBvbkxlZ2FjeVN0eWxlRXZlbnQ/OiA/QnViYmxpbmdFdmVudEhhbmRsZXI8XG4gICAgTGVnYWN5U3R5bGVFdmVudCxcbiAgICAnYWx0ZXJuYXRpdmVMZWdhY3lOYW1lJyxcbiAgPixcbnx9PjtcblxuZXhwb3J0IHR5cGUgTXlOYXRpdmVWaWV3VHlwZSA9IEhvc3RDb21wb25lbnQ8TmF0aXZlUHJvcHM+O1xuXG5pbnRlcmZhY2UgTmF0aXZlQ29tbWFuZHMge1xuICArY2FsbE5hdGl2ZU1ldGhvZFRvQ2hhbmdlQmFja2dyb3VuZENvbG9yOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxNeU5hdGl2ZVZpZXdUeXBlPixcbiAgICBjb2xvcjogc3RyaW5nLFxuICApID0+IHZvaWQ7XG5cbiAgK2NhbGxOYXRpdmVNZXRob2RUb0FkZE92ZXJsYXlzOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxNeU5hdGl2ZVZpZXdUeXBlPixcbiAgICBvdmVybGF5Q29sb3JzOiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICApID0+IHZvaWQ7XG5cbiAgK2NhbGxOYXRpdmVNZXRob2RUb1JlbW92ZU92ZXJsYXlzOiAoXG4gICAgdmlld1JlZjogUmVhY3QuRWxlbWVudFJlZjxNeU5hdGl2ZVZpZXdUeXBlPixcbiAgKSA9PiB2b2lkO1xuXG4gICtmaXJlTGFnYWN5U3R5bGVFdmVudDogKHZpZXdSZWY6IFJlYWN0LkVsZW1lbnRSZWY8TXlOYXRpdmVWaWV3VHlwZT4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBDb21tYW5kczogTmF0aXZlQ29tbWFuZHMgPSBjb2RlZ2VuTmF0aXZlQ29tbWFuZHM8TmF0aXZlQ29tbWFuZHM+KHtcbiAgc3VwcG9ydGVkQ29tbWFuZHM6IFtcbiAgICAnY2FsbE5hdGl2ZU1ldGhvZFRvQ2hhbmdlQmFja2dyb3VuZENvbG9yJyxcbiAgICAnY2FsbE5hdGl2ZU1ldGhvZFRvQWRkT3ZlcmxheXMnLFxuICAgICdjYWxsTmF0aXZlTWV0aG9kVG9SZW1vdmVPdmVybGF5cycsXG4gICAgJ2ZpcmVMYWdhY3lTdHlsZUV2ZW50JyxcbiAgXSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCAoY29kZWdlbk5hdGl2ZUNvbXBvbmVudDxOYXRpdmVQcm9wcz4oXG4gICdSTlRNeU5hdGl2ZVZpZXcnLFxuKTogTXlOYXRpdmVWaWV3VHlwZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCBSTlRlc3RlclBhZ2UgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlclBhZ2UnO1xuaW1wb3J0ICogYXMgcGVyZm9ybWFuY2VDb21wYXJpc29uRXhhbXBsZXMgZnJvbSAnLi9wZXJmb3JtYW5jZUNvbXBhcmlzb25FeGFtcGxlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IHt1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW99ID0gUmVhY3Q7XG5jb25zdCBTSE9XX05PVEhJTkcgPSAnU0hPV19OT1RISU5HJztcbmNvbnN0IFNIT1dfR09PRF9FWEFNUExFID0gJ1NIT1dfR09PRF9FWEFNUExFJztcbmNvbnN0IFNIT1dfQkFEX0VYQU1QTEUgPSAnU0hPV19CQURfRVhBTVBMRSc7XG5cbmZ1bmN0aW9uIFBlcmZFeGFtcGxlV3JhcHBlcihwcm9wczoge1xuICBiYWRFeGFtcGxlOiBSZWFjdC5Ob2RlLFxuICBnb29kRXhhbXBsZTogUmVhY3QuTm9kZSxcbiAgYmFkRXhhbXBsZVNjcmlwdD86IHN0cmluZyxcbiAgZ29vZEV4YW1wbGVTY3JpcHQ/OiBzdHJpbmcsXG59KTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHtiYWRFeGFtcGxlLCBnb29kRXhhbXBsZSwgYmFkRXhhbXBsZVNjcmlwdCwgZ29vZEV4YW1wbGVTY3JpcHR9ID0gcHJvcHM7XG4gIGNvbnN0IFtsb2FkRXhhbXBsZSwgc2V0TG9hZEV4YW1wbGVdID0gdXNlU3RhdGUoU0hPV19OT1RISU5HKTtcbiAgY29uc3QgdG9nZ2xlR29vZEV4YW1wbGUgPSB1c2VDYWxsYmFjayhcbiAgICAoKSA9PlxuICAgICAgc2V0TG9hZEV4YW1wbGUoXG4gICAgICAgIGxvYWRFeGFtcGxlID09PSBTSE9XX0dPT0RfRVhBTVBMRSA/IFNIT1dfTk9USElORyA6IFNIT1dfR09PRF9FWEFNUExFLFxuICAgICAgKSxcbiAgICBbc2V0TG9hZEV4YW1wbGUsIGxvYWRFeGFtcGxlXSxcbiAgKTtcbiAgY29uc3QgdG9nZ2xlQmFkRXhhbXBsZSA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+XG4gICAgICBzZXRMb2FkRXhhbXBsZShcbiAgICAgICAgbG9hZEV4YW1wbGUgPT09IFNIT1dfQkFEX0VYQU1QTEUgPyBTSE9XX05PVEhJTkcgOiBTSE9XX0JBRF9FWEFNUExFLFxuICAgICAgKSxcbiAgICBbc2V0TG9hZEV4YW1wbGUsIGxvYWRFeGFtcGxlXSxcbiAgKTtcblxuICBjb25zdCBiYWRFeGFtcGxlQ29udGVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlYWN0Lk5vZGVbXSA9IFtdO1xuICAgIGlmIChsb2FkRXhhbXBsZSA9PT0gU0hPV19CQURfRVhBTVBMRSkge1xuICAgICAgaWYgKGJhZEV4YW1wbGVTY3JpcHQgIT0gbnVsbCkge1xuICAgICAgICByZXN1bHQucHVzaCg8VGV4dCBrZXk9XCIxXCI+e2JhZEV4YW1wbGVTY3JpcHR9PC9UZXh0Pik7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCg8VmlldyBrZXk9XCIyXCI+e2JhZEV4YW1wbGV9PC9WaWV3Pik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtsb2FkRXhhbXBsZSwgYmFkRXhhbXBsZSwgYmFkRXhhbXBsZVNjcmlwdF0pO1xuXG4gIGNvbnN0IGdvb2RFeGFtcGxlQ29udGVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlYWN0Lk5vZGVbXSA9IFtdO1xuICAgIGlmIChsb2FkRXhhbXBsZSA9PT0gU0hPV19HT09EX0VYQU1QTEUpIHtcbiAgICAgIGlmIChnb29kRXhhbXBsZVNjcmlwdCAhPSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKDxUZXh0IGtleT1cIjFcIj57Z29vZEV4YW1wbGVTY3JpcHR9PC9UZXh0Pik7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCg8VmlldyBrZXk9XCIyXCI+e2dvb2RFeGFtcGxlfTwvVmlldz4pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbbG9hZEV4YW1wbGUsIGdvb2RFeGFtcGxlLCBnb29kRXhhbXBsZVNjcmlwdF0pO1xuXG4gIHJldHVybiAoXG4gICAgPFJOVGVzdGVyUGFnZSBub1Njcm9sbD17dHJ1ZX0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udHJvbHN9PlxuICAgICAgICAgIDxSTlRlc3RlckJ1dHRvbiBvblByZXNzPXt0b2dnbGVCYWRFeGFtcGxlfT5cbiAgICAgICAgICAgIHtsb2FkRXhhbXBsZSA9PT0gU0hPV19CQURfRVhBTVBMRSA/ICdIaWRlIEJhZCcgOiAnU2hvdyBCYWQnfVxuICAgICAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICAgICAgPFJOVGVzdGVyQnV0dG9uIG9uUHJlc3M9e3RvZ2dsZUdvb2RFeGFtcGxlfT5cbiAgICAgICAgICAgIHtsb2FkRXhhbXBsZSA9PT0gU0hPV19HT09EX0VYQU1QTEUgPyAnSGlkZSBHb29kJyA6ICdTaG93IEdvb2QnfVxuICAgICAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5leGFtcGxlQ29udGFpbmVyfT5cbiAgICAgICAgICB7bG9hZEV4YW1wbGUgPT09IFNIT1dfQkFEX0VYQU1QTEVcbiAgICAgICAgICAgID8gYmFkRXhhbXBsZUNvbnRlbnRzXG4gICAgICAgICAgICA6IGxvYWRFeGFtcGxlID09PSBTSE9XX0dPT0RfRVhBTVBMRVxuICAgICAgICAgICAgPyBnb29kRXhhbXBsZUNvbnRlbnRzXG4gICAgICAgICAgICA6IG51bGx9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1JOVGVzdGVyUGFnZT5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogNSxcbiAgfSxcbiAgY29udHJvbHM6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnZ3JheScsXG4gICAgbWFyZ2luQm90dG9tOiA1LFxuICB9LFxuICBleGFtcGxlQ29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gIH0sXG4gIHBlcmZFeGFtcGxlQ29udGFpbmVyOiB7fSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ1BlcmZvcm1hbmNlIENvbXBhcmlzb24gRXhhbXBsZXMnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID1cbiAgJ0NvbXBhcmUgcGVyZm9ybWFuY2Ugd2l0aCBiYWQgYW5kIGdvb2QgZXhhbXBsZXMuIFVzZSBSZWFjdCBEZXZUb29scyB0byBoaWdobGlnaHQgcmUtcmVuZGVycyBpcyByZWNvbW1lbmRlZC4nO1xuXG5jb25zdCBleGFtcGxlczogQXJyYXk8Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlPiA9IE9iamVjdC5rZXlzKFxuICBwZXJmb3JtYW5jZUNvbXBhcmlzb25FeGFtcGxlcyxcbikubWFwKG5hbWUgPT4ge1xuICBjb25zdCBleGFtcGxlID0gcGVyZm9ybWFuY2VDb21wYXJpc29uRXhhbXBsZXNbbmFtZV07XG4gIHJldHVybiB7XG4gICAgdGl0bGU6IGV4YW1wbGUudGl0bGUsXG4gICAgZGVzY3JpcHRpb246IGV4YW1wbGUuZGVzY3JpcHRpb24sXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8UGVyZkV4YW1wbGVXcmFwcGVyXG4gICAgICAgIGJhZEV4YW1wbGU9ezxleGFtcGxlLkJhZCAvPn1cbiAgICAgICAgZ29vZEV4YW1wbGU9ezxleGFtcGxlLkdvb2QgLz59XG4gICAgICAvPlxuICAgICksXG4gIH07XG59KTtcblxuZXhwb3J0cy5leGFtcGxlcyA9IGV4YW1wbGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICogQG9uY2FsbCByZWFjdF9uYXRpdmVcbiAqL1xuXG5leHBvcnQge2RlZmF1bHQgYXMgUmVSZW5kZXJXaXRoTm9uUHVyZUNoaWxkRXhhbXBsZX0gZnJvbSAnLi9SZVJlbmRlcldpdGhOb25QdXJlQ2hpbGRFeGFtcGxlJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBSZVJlbmRlcldpdGhPYmplY3RQcm9wRXhhbXBsZX0gZnJvbSAnLi9SZVJlbmRlcldpdGhPYmplY3RQcm9wRXhhbXBsZSc7XG5leHBvcnQge2RlZmF1bHQgYXMgU2V0U3RhdGVJbldyb25nRWZmZWN0RXhhbXBsZX0gZnJvbSAnLi9TZXRTdGF0ZUluV3JvbmdFZmZlY3RFeGFtcGxlJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBSZW5kZXJPZmZzY3JlZW5Db250ZW50RXhhbXBsZX0gZnJvbSAnLi9SZW5kZXJPZmZzY3JlZW5Db250ZW50RXhhbXBsZSc7XG5leHBvcnQge2RlZmF1bHQgYXMgTm90TWVtb2l6ZUV4cGVuc2l2ZVRhc2tFeGFtcGxlfSBmcm9tICcuL05vdE1lbW9pemVFeHBlbnNpdmVUYXNrRXhhbXBsZSc7XG5leHBvcnQge2RlZmF1bHQgYXMgRWZmZWN0SW5SZW5kZXJFeGFtcGxlfSBmcm9tICcuL0VmZmVjdEluUmVuZGVyRXhhbXBsZSc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1Njcm9sbEV2ZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IHtMSVNUXzEwMF9JVEVNU30gZnJvbSAnLi4vY29tcG9uZW50cy9pdGVtRGF0YSc7XG5pbXBvcnQgSXRlbUxpc3QgZnJvbSAnLi4vY29tcG9uZW50cy9JdGVtTGlzdCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1RleHR9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IHt1c2VDYWxsYmFjaywgdXNlU3RhdGV9ID0gUmVhY3Q7XG5jb25zdCBJdGVtTGlzdE1lbW8gPSBSZWFjdC5tZW1vKEl0ZW1MaXN0KTtcblxuZnVuY3Rpb24gUmVSZW5kZXJXaXRoTm9uUHVyZUNoaWxkQmFkRXhhbXBsZSgpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW3Njcm9sbE9mZnNldCwgc2V0U2Nyb2xsT2Zmc2V0XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBvblNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgIChldnQ6IFNjcm9sbEV2ZW50KSA9PiB7XG4gICAgICBzZXRTY3JvbGxPZmZzZXQoZXZ0Lm5hdGl2ZUV2ZW50LmNvbnRlbnRPZmZzZXQueCk7XG4gICAgfSxcbiAgICBbc2V0U2Nyb2xsT2Zmc2V0XSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGV4dD57YFNjcm9sbCBPZmZzZXQgWDogJHtzY3JvbGxPZmZzZXR9YH08L1RleHQ+XG4gICAgICA8SXRlbUxpc3QgZGF0YT17TElTVF8xMDBfSVRFTVN9IG9uU2Nyb2xsPXtvblNjcm9sbH0gLz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gUmVSZW5kZXJXaXRoTm9uUHVyZUNoaWxkR29vZEV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtzY3JvbGxPZmZzZXQsIHNldFNjcm9sbE9mZnNldF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qgb25TY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZ0OiBTY3JvbGxFdmVudCkgPT4ge1xuICAgICAgc2V0U2Nyb2xsT2Zmc2V0KGV2dC5uYXRpdmVFdmVudC5jb250ZW50T2Zmc2V0LngpO1xuICAgIH0sXG4gICAgW3NldFNjcm9sbE9mZnNldF0sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFRleHQ+e2BTY3JvbGwgT2Zmc2V0IFg6ICR7c2Nyb2xsT2Zmc2V0fWB9PC9UZXh0PlxuICAgICAgPEl0ZW1MaXN0TWVtbyBkYXRhPXtMSVNUXzEwMF9JVEVNU30gb25TY3JvbGw9e29uU2Nyb2xsfSAvPlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnTGlzdCByZS1yZW5kZXIgZHVlIHRvIG5vdCBwdXJlIG9yIG1lbW9pemVkJyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ0dldCBob3Jpem9udGFsIHNjcm9sbCBvZmZzZXQuXFxuVGhlIExpc3QgY29tcG9uZW50IGlzIG5vdCBwdXJlIGluIHRoZSBiYWQgZXhhbXBsZS4gRXZlbiB0aG91Z2ggYWxsIHByb3BzIGFyZSBub3QgY2hhbmdlZCwgaXQgd2lsbCBzdGlsbCByZS1yZW5kZXIgd2hlbiBwYXJlbnQgcmUtcmVuZGVycy4nLFxuICBCYWQ6IFJlUmVuZGVyV2l0aE5vblB1cmVDaGlsZEJhZEV4YW1wbGUsXG4gIEdvb2Q6IFJlUmVuZGVyV2l0aE5vblB1cmVDaGlsZEdvb2RFeGFtcGxlLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7SXRlbURhdGFUeXBlfSBmcm9tICcuL2l0ZW1EYXRhJztcbmltcG9ydCB0eXBlIHtTY3JvbGxFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RmxhdExpc3QsIFNjcm9sbFZpZXcsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIEl0ZW0ocHJvcHM6IHtkYXRhOiBJdGVtRGF0YVR5cGV9KTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHtkYXRhfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaXRlbUNvbnRhaW5lcn0+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLml0ZW1OYW1lfT57ZGF0YS5uYW1lfTwvVGV4dD5cbiAgICAgIDxUZXh0PntgQWdlOiAke2RhdGEuYWdlfWB9PC9UZXh0PlxuICAgICAgPFRleHQ+e2BBZGRyZXNzOiAke2RhdGEuYWRkcmVzc31gfTwvVGV4dD5cbiAgICAgIDxUZXh0PntgaWQ6ICR7ZGF0YS5pZH1gfTwvVGV4dD5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmludGVyZmFjZSBJdGVtTGlzdFByb3BzIHtcbiAgZGF0YTogSXRlbURhdGFUeXBlW107XG4gIHVzZUZsYXRMaXN0PzogYm9vbGVhbjtcbiAgb25TY3JvbGw/OiAoZXZ0OiBTY3JvbGxFdmVudCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gcmVuZGVySXRlbSh7aXRlbX06IHtpdGVtOiBJdGVtRGF0YVR5cGUsIC4uLn0pOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICByZXR1cm4gPEl0ZW0gZGF0YT17aXRlbX0gLz47XG59XG5cbmZ1bmN0aW9uIEl0ZW1MaXN0KHByb3BzOiBJdGVtTGlzdFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHtkYXRhLCB1c2VGbGF0TGlzdCA9IGZhbHNlLCBvblNjcm9sbH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIHt1c2VGbGF0TGlzdCA/IChcbiAgICAgICAgPEZsYXRMaXN0XG4gICAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cbiAgICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICAgIHJlbmRlckl0ZW09e3JlbmRlckl0ZW19XG4gICAgICAgIC8+XG4gICAgICApIDogKFxuICAgICAgICA8U2Nyb2xsVmlldyBob3Jpem9udGFsIG9uU2Nyb2xsPXtvblNjcm9sbH0gc2Nyb2xsRXZlbnRUaHJvdHRsZT17MTZ9PlxuICAgICAgICAgIHtkYXRhLm1hcChpdGVtID0+IChcbiAgICAgICAgICAgIDxJdGVtIGRhdGE9e2l0ZW19IGtleT17aXRlbS5pZH0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgKX1cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG4gICAgcGFkZGluZzogNSxcbiAgfSxcbiAgaXRlbUNvbnRhaW5lcjoge1xuICAgIHdpZHRoOiAyMDAsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG4gICAgcGFkZGluZzogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmF5JyxcbiAgICBtYXJnaW5Ib3Jpem9udGFsOiA1LFxuICB9LFxuICBpdGVtTmFtZToge1xuICAgIGZvbnRTaXplOiAyMCxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgbWFyZ2luQm90dG9tOiA1LFxuICB9LFxuICBpdGVtRGVzY3JpcHRpb246IHtcbiAgICBmb250U2l6ZTogMTUsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSXRlbUxpc3Q7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbmNvbnN0IEFMTF9DSEFSUyA9XG4gICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSc7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyID0gMTYpOiBzdHJpbmcge1xuICBsZXQgc3RyID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBzdHIgKz0gQUxMX0NIQVJTLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBBTExfQ0hBUlMubGVuZ3RoKSk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21BZ2UobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tTmFtZSgpOiBzdHJpbmcge1xuICByZXR1cm4gJ0pvZSAnICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21BZGRyZXNzKCk6IHN0cmluZyB7XG4gIGNvbnN0IGNpdHkgPSBnZW5lcmF0ZVJhbmRvbU5hbWUoKSArICcgQ2l0eSc7XG4gIGNvbnN0IHN0YXRlID0gZ2VuZXJhdGVSYW5kb21OYW1lKCkgKyAnIFN0YXRlJztcbiAgY29uc3QgY291bnRyeSA9IGdlbmVyYXRlUmFuZG9tTmFtZSgpICsgJyBDb3VudHJ5JztcbiAgcmV0dXJuIGAke2NpdHl9LCAke3N0YXRlfSwgJHtjb3VudHJ5fWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbURhdGFUeXBlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGFnZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21JdGVtcyhjb3VudDogbnVtYmVyKTogSXRlbURhdGFUeXBlW10ge1xuICByZXR1cm4gQXJyYXkuZnJvbShBcnJheShjb3VudCksICgpID0+ICh7XG4gICAgaWQ6IGdlbmVyYXRlUmFuZG9tU3RyaW5nKCksXG4gICAgbmFtZTogZ2VuZXJhdGVSYW5kb21OYW1lKCksXG4gICAgYWRkcmVzczogZ2VuZXJhdGVSYW5kb21BZGRyZXNzKCksXG4gICAgYWdlOiBnZW5lcmF0ZVJhbmRvbUFnZSgxMywgNDApLFxuICB9KSk7XG59XG5cbmV4cG9ydCBjb25zdCBMSVNUXzEwX0lURU1TOiBJdGVtRGF0YVR5cGVbXSA9IGdlbmVyYXRlUmFuZG9tSXRlbXMoMTApO1xuZXhwb3J0IGNvbnN0IExJU1RfMTAwX0lURU1TOiBJdGVtRGF0YVR5cGVbXSA9IGdlbmVyYXRlUmFuZG9tSXRlbXMoMTAwKTtcbmV4cG9ydCBjb25zdCBMSVNUXzEwMDBfSVRFTVM6IEl0ZW1EYXRhVHlwZVtdID0gZ2VuZXJhdGVSYW5kb21JdGVtcygxMDAwKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7U2Nyb2xsRXZlbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQge0xJU1RfMTAwX0lURU1TfSBmcm9tICcuLi9jb21wb25lbnRzL2l0ZW1EYXRhJztcbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuLi9jb21wb25lbnRzL0l0ZW1MaXN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7VGV4dH0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3Qge3VzZVN0YXRlLCB1c2VDYWxsYmFja30gPSBSZWFjdDtcbmNvbnN0IEl0ZW1MaXN0TWVtbyA9IFJlYWN0Lm1lbW8oSXRlbUxpc3QpO1xuXG5mdW5jdGlvbiBSZVJlbmRlcldpdGhPYmplY3RQcm9wQmFkRXhhbXBsZSgpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW3Njcm9sbE9mZnNldCwgc2V0U2Nyb2xsT2Zmc2V0XSA9IHVzZVN0YXRlKDApO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGV4dD57YFNjcm9sbCBPZmZzZXQgWDogJHtzY3JvbGxPZmZzZXR9YH08L1RleHQ+XG4gICAgICA8SXRlbUxpc3RNZW1vXG4gICAgICAgIGRhdGE9e0xJU1RfMTAwX0lURU1TfVxuICAgICAgICBvblNjcm9sbD17KGV2dDogU2Nyb2xsRXZlbnQpID0+IHtcbiAgICAgICAgICBzZXRTY3JvbGxPZmZzZXQoZXZ0Lm5hdGl2ZUV2ZW50LmNvbnRlbnRPZmZzZXQueCk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBSZVJlbmRlcldpdGhPYmplY3RQcm9wR29vZEV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtzY3JvbGxPZmZzZXQsIHNldFNjcm9sbE9mZnNldF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qgb25TY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZ0OiBTY3JvbGxFdmVudCkgPT4ge1xuICAgICAgc2V0U2Nyb2xsT2Zmc2V0KGV2dC5uYXRpdmVFdmVudC5jb250ZW50T2Zmc2V0LngpO1xuICAgIH0sXG4gICAgW3NldFNjcm9sbE9mZnNldF0sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFRleHQ+e2BTY3JvbGwgT2Zmc2V0IFg6ICR7c2Nyb2xsT2Zmc2V0fWB9PC9UZXh0PlxuICAgICAgPEl0ZW1MaXN0TWVtbyBkYXRhPXtMSVNUXzEwMF9JVEVNU30gb25TY3JvbGw9e29uU2Nyb2xsfSAvPlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnUmUtcmVuZGVyIGZyb20gbmV3IG9iamVjdCByZWZlcmVuY2UgaW4gcHJvcCcsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdHZXQgaG9yaXpvbnRhbCBzY3JvbGwgb2Zmc2V0LlxcbkV2ZW4gd2l0aCBwdXJlIG9yIG1lbW9pemVkIGNoaWxkIGNvbXBvbmVudCwgaWYgYSBuZXcgb2JqZWN0IHJlZmVyZW5jZSBpcyBwYXNzZWQgZG93biBhcyBwcm9wLCB0aGUgY2hpbGQgY29tcG9uZW50IHdpbGwgc3RpbGwgcmUtcmVuZGVyIHVubmVjZXNzYXJpbHkuIFRoZSBvblNjcm9sbCBjYWxsYmFjayBpcyBwYXNzZWQgd2l0aG91dCB1c2VDYWxsYmFjayBob29rIGluIHRoZSBiYWQgZXhhbXBsZSBhbmQgY2F1c2VkIHBlcmZvcm1hbmNlIGlzc3Vlcy4nLFxuICBCYWQ6IFJlUmVuZGVyV2l0aE9iamVjdFByb3BCYWRFeGFtcGxlLFxuICBHb29kOiBSZVJlbmRlcldpdGhPYmplY3RQcm9wR29vZEV4YW1wbGUsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICogQG9uY2FsbCByZWFjdF9uYXRpdmVcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtJdGVtRGF0YVR5cGV9IGZyb20gJy4uL2NvbXBvbmVudHMvaXRlbURhdGEnO1xuXG5pbXBvcnQge0xJU1RfMTAwMF9JVEVNU30gZnJvbSAnLi4vY29tcG9uZW50cy9pdGVtRGF0YSc7XG5pbXBvcnQgSXRlbUxpc3QgZnJvbSAnLi4vY29tcG9uZW50cy9JdGVtTGlzdCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSA9IFJlYWN0O1xuY29uc3QgSXRlbUxpc3RNZW1vID0gUmVhY3QubWVtbyhJdGVtTGlzdCk7XG5cbmZ1bmN0aW9uIEJhZEV4YW1wbGUocHJvcHM6IHtsaXN0RGF0YTogSXRlbURhdGFUeXBlW10sIGZpbHRlcmVkVGV4dDogc3RyaW5nfSkge1xuICBjb25zdCB7bGlzdERhdGEsIGZpbHRlcmVkVGV4dH0gPSBwcm9wcztcbiAgY29uc3QgW3Zpc2libGVMaXN0RGF0YSwgc2V0VmlzaWJsZUxpc3REYXRhXSA9XG4gICAgdXNlU3RhdGU8SXRlbURhdGFUeXBlW10+KGxpc3REYXRhKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFZpc2libGVMaXN0RGF0YShcbiAgICAgIGxpc3REYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0ubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcmVkVGV4dC50b1VwcGVyQ2FzZSgpKSxcbiAgICAgICksXG4gICAgKTtcbiAgfSwgW2xpc3REYXRhLCBmaWx0ZXJlZFRleHRdKTtcblxuICByZXR1cm4gPEl0ZW1MaXN0TWVtbyBkYXRhPXt2aXNpYmxlTGlzdERhdGF9IC8+O1xufVxuXG5mdW5jdGlvbiBHb29kRXhhbXBsZShwcm9wczoge2xpc3REYXRhOiBJdGVtRGF0YVR5cGVbXSwgZmlsdGVyZWRUZXh0OiBzdHJpbmd9KSB7XG4gIGNvbnN0IHtsaXN0RGF0YSwgZmlsdGVyZWRUZXh0fSA9IHByb3BzO1xuICBjb25zdCB2aXNpYmxlTGlzdERhdGEgPSBsaXN0RGF0YS5maWx0ZXIoaXRlbSA9PlxuICAgIGl0ZW0ubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcmVkVGV4dC50b1VwcGVyQ2FzZSgpKSxcbiAgKTtcblxuICByZXR1cm4gPEl0ZW1MaXN0TWVtbyBkYXRhPXt2aXNpYmxlTGlzdERhdGF9IC8+O1xufVxuXG5mdW5jdGlvbiBTZXRTdGF0ZUluV3JvbmdFZmZlY3RCYWRFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gPEJhZEV4YW1wbGUgbGlzdERhdGE9e0xJU1RfMTAwMF9JVEVNU30gZmlsdGVyZWRUZXh0PVwiZjhcIiAvPjtcbn1cblxuZnVuY3Rpb24gU2V0U3RhdGVJbldyb25nRWZmZWN0R29vZEV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiA8R29vZEV4YW1wbGUgbGlzdERhdGE9e0xJU1RfMTAwMF9JVEVNU30gZmlsdGVyZWRUZXh0PVwiZjhcIiAvPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICB0aXRsZTogJ1JlLXJlbmRlciB3aXRoIHVubmVjZXNzYXJ5IGVmZmVjdCBhbmQgc3RhdGUgY2hhbmdlcycsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdZb3UgbWF5IG5vdCBuZWVkIGFuIGVmZmVjdCBpbiB5b3VyIGNvbXBvbmVudC4gU3RhdGUgdXBkYXRlcyBpbiB1bm5lY2Vzc2FyeSBlZmZlY3RzIHdpbGwgdHJpZ2dlciByZS1yZW5kZXIgdGhhdCBjYW4gYmUgYXZvaWRlZC4nLFxuICBCYWQ6IFNldFN0YXRlSW5Xcm9uZ0VmZmVjdEJhZEV4YW1wbGUsXG4gIEdvb2Q6IFNldFN0YXRlSW5Xcm9uZ0VmZmVjdEdvb2RFeGFtcGxlLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqIEBvbmNhbGwgcmVhY3RfbmF0aXZlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge0xJU1RfMTAwX0lURU1TfSBmcm9tICcuLi9jb21wb25lbnRzL2l0ZW1EYXRhJztcbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuLi9jb21wb25lbnRzL0l0ZW1MaXN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgSXRlbUxpc3RNZW1vID0gUmVhY3QubWVtbyhJdGVtTGlzdCk7XG5cbmZ1bmN0aW9uIFJlbmRlck9mZnNjcmVlbkNvbnRlbnRCYWRFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gPEl0ZW1MaXN0TWVtbyBkYXRhPXtMSVNUXzEwMF9JVEVNU30gLz47XG59XG5cbmZ1bmN0aW9uIFJlbmRlck9mZnNjcmVlbkNvbnRlbnRHb29kRXhhbXBsZSgpOiBSZWFjdC5Ob2RlIHtcbiAgcmV0dXJuIChcbiAgICA8SXRlbUxpc3RNZW1vIHVzZUZsYXRMaXN0IGRhdGE9e0xJU1RfMTAwX0lURU1TfSBpbml0aWFsTnVtVG9SZW5kZXI9ezJ9IC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICdEbyBub3QgcmVuZGVyIG9mZnNjcmVlbiBjb250ZW50JyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1JlbmRlciBsb25nIGxpc3Qgd2l0aCBTY3JvbGxWaWV3IHZzIEZsYXRMaXN0ICsgaW5pdGlhbE51bVRvUmVuZGVyIHByb3AuXFxuTmV2ZXIgcmVuZGVyIG9mZnNjcmVlbiBjb250ZW50IHdoZW4gbm90IG5lZWRlZC4nLFxuICBCYWQ6IFJlbmRlck9mZnNjcmVlbkNvbnRlbnRCYWRFeGFtcGxlLFxuICBHb29kOiBSZW5kZXJPZmZzY3JlZW5Db250ZW50R29vZEV4YW1wbGUsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICogQG9uY2FsbCByZWFjdF9uYXRpdmVcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7VGV4dH0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3Qge3VzZVN0YXRlLCB1c2VNZW1vfSA9IFJlYWN0O1xuXG5mdW5jdGlvbiBOb3RNZW1vaXplRXhwZW5zaXZlVGFza0V4YW1wbGVCYWRFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbY291bnQsIHNldENvdW50XSA9IHVzZVN0YXRlKDApO1xuXG4gIGxldCBleHBlbnNpdmVSZXN1bHQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDAwOyBpKyspIHtcbiAgICBleHBlbnNpdmVSZXN1bHQgKz0gaTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxUZXh0PntgRXhwZW5zaXZlIFJlc3VsdDogJHtleHBlbnNpdmVSZXN1bHR9YH08L1RleHQ+XG4gICAgICA8Uk5UZXN0ZXJCdXR0b24gb25QcmVzcz17KCkgPT4gc2V0Q291bnQoY291bnQgKyAxKX0+XG4gICAgICAgIHtgQ2xpY2sgbWUgdG8gY291bnQ6ICR7Y291bnR9YH1cbiAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIE5vdE1lbW9pemVFeHBlbnNpdmVUYXNrRXhhbXBsZUdvb2RFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbY291bnQsIHNldENvdW50XSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IGV4cGVuc2l2ZVJlc3VsdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDAwMDA7IGkrKykge1xuICAgICAgc3VtICs9IGk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGV4dD57YEV4cGVuc2l2ZSBSZXN1bHQ6ICR7ZXhwZW5zaXZlUmVzdWx0fWB9PC9UZXh0PlxuICAgICAgPFJOVGVzdGVyQnV0dG9uIG9uUHJlc3M9eygpID0+IHNldENvdW50KGNvdW50ICsgMSl9PlxuICAgICAgICB7YENsaWNrIG1lIHRvIGNvdW50OiAke2NvdW50fWB9XG4gICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOlxuICAgICdFeHBlbnNpdmUgdGFza3Mgc2hvdWxkIGJlIG1lbW9pemVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGxvbmcgSlMgdGFza3MnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnRWFjaCByZS1yZW5kZXIgd2lsbCBydW4gZXhwZW5zaXZlIGpvYiB0byBnZXQgYSByZXN1bHQuIFRoZSByZXN1bHQgc2hvdWxkIGJlIG1lbW9pemVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlLWNvbXB1dGF0aW9uJyxcbiAgQmFkOiBOb3RNZW1vaXplRXhwZW5zaXZlVGFza0V4YW1wbGVCYWRFeGFtcGxlLFxuICBHb29kOiBOb3RNZW1vaXplRXhwZW5zaXZlVGFza0V4YW1wbGVHb29kRXhhbXBsZSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge0l0ZW1EYXRhVHlwZX0gZnJvbSAnLi4vY29tcG9uZW50cy9pdGVtRGF0YSc7XG5cbmltcG9ydCB7Z2VuZXJhdGVSYW5kb21JdGVtc30gZnJvbSAnLi4vY29tcG9uZW50cy9pdGVtRGF0YSc7XG5pbXBvcnQgSXRlbUxpc3QgZnJvbSAnLi4vY29tcG9uZW50cy9JdGVtTGlzdCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0cmljdE1vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1RleHR9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IFRJTUVPVVQgPSA1MDA7XG5jb25zdCBGRVRDSF9DT1VOVCA9IDI1MDtcbmNvbnN0IEl0ZW1MaXN0TWVtbyA9IFJlYWN0Lm1lbW8oSXRlbUxpc3QpO1xuXG5mdW5jdGlvbiBJdGVtRmV0Y2hlckJhZEV4YW1wbGUocHJvcHM6IHtcbiAgb25GZXRjaGVkOiAoaXRlbXM6IEl0ZW1EYXRhVHlwZVtdKSA9PiB2b2lkLFxuICBjb3VudDogbnVtYmVyLFxufSk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB7b25GZXRjaGVkLCBjb3VudH0gPSBwcm9wcztcbiAgY29uc3QgZmV0Y2hNb3JlSXRlbXMgPSBhc3luYyAoXG4gICAgaXRlbXNDb3VudDogbnVtYmVyLFxuICApOiBQcm9taXNlPEl0ZW1EYXRhVHlwZVtdPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoZ2VuZXJhdGVSYW5kb21JdGVtcyhpdGVtc0NvdW50KSk7XG4gICAgICB9LCBUSU1FT1VUKTtcbiAgICB9KTtcbiAgfTtcblxuICBmZXRjaE1vcmVJdGVtcyhjb3VudCkudGhlbigoaXRlbXM6IEl0ZW1EYXRhVHlwZVtdKSA9PiB7XG4gICAgb25GZXRjaGVkKGl0ZW1zKTtcbiAgfSwgY29uc29sZS5lcnJvcik7XG59XG5cbmZ1bmN0aW9uIEl0ZW1GZXRjaGVyR29vZEV4YW1wbGUocHJvcHM6IHtcbiAgb25GZXRjaGVkOiAoaXRlbXM6IEl0ZW1EYXRhVHlwZVtdKSA9PiB2b2lkLFxuICBjb3VudDogbnVtYmVyLFxufSk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB7b25GZXRjaGVkLCBjb3VudH0gPSBwcm9wcztcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmZXRjaE1vcmVJdGVtcyA9IGFzeW5jIChcbiAgICAgIGl0ZW1zQ291bnQ6IG51bWJlcixcbiAgICApOiBQcm9taXNlPEl0ZW1EYXRhVHlwZVtdPiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZ2VuZXJhdGVSYW5kb21JdGVtcyhpdGVtc0NvdW50KSk7XG4gICAgICAgIH0sIFRJTUVPVVQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZldGNoTW9yZUl0ZW1zKGNvdW50KS50aGVuKChpdGVtczogSXRlbURhdGFUeXBlW10pID0+IHtcbiAgICAgIG9uRmV0Y2hlZChpdGVtcyk7XG4gICAgfSwgY29uc29sZS5lcnJvcik7XG4gIH0sIFtvbkZldGNoZWQsIGNvdW50XSk7XG59XG5cbmNvbnN0IEl0ZW1GZXRjaGVyQmFkRXhhbXBsZU1lbW8gPSBSZWFjdC5tZW1vKEl0ZW1GZXRjaGVyQmFkRXhhbXBsZSk7XG5jb25zdCBJdGVtRmV0Y2hlckdvb2RFeGFtcGxlTWVtbyA9IFJlYWN0Lm1lbW8oSXRlbUZldGNoZXJHb29kRXhhbXBsZSk7XG5mdW5jdGlvbiBFZmZlY3RJblJlbmRlckJhZEV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFt2aXNpYmxlSXRlbXMsIHNldFZpc2libGVJdGVtc10gPSB1c2VTdGF0ZTxJdGVtRGF0YVR5cGVbXT4oW10pO1xuICBjb25zdCBbZmV0Y2hlZEl0ZW1zLCBzZXRGZXRjaGVkSXRlbXNdID0gdXNlU3RhdGU8SXRlbURhdGFUeXBlW10+KFtdKTtcbiAgY29uc3Qgb25Nb3JlSXRlbUZldGNoZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoaXRlbXM6IEl0ZW1EYXRhVHlwZVtdKSA9PiB7XG4gICAgICBzZXRGZXRjaGVkSXRlbXMoaXRlbXMpO1xuICAgIH0sXG4gICAgW3NldEZldGNoZWRJdGVtc10sXG4gICk7XG5cbiAgaWYgKGZldGNoZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgc2V0VmlzaWJsZUl0ZW1zKHZpc2libGVJdGVtcy5jb25jYXQoZmV0Y2hlZEl0ZW1zKSk7XG4gICAgc2V0RmV0Y2hlZEl0ZW1zKFtdKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFN0cmljdE1vZGU+XG4gICAgICA8VGV4dD57YEl0ZW1zIGNvdW50IGluIGxpc3Q6ICR7dmlzaWJsZUl0ZW1zLmxlbmd0aH1gfTwvVGV4dD5cbiAgICAgIDxJdGVtRmV0Y2hlckJhZEV4YW1wbGVNZW1vXG4gICAgICAgIG9uRmV0Y2hlZD17b25Nb3JlSXRlbUZldGNoZWR9XG4gICAgICAgIGNvdW50PXtGRVRDSF9DT1VOVH1cbiAgICAgIC8+XG4gICAgICA8SXRlbUxpc3RNZW1vIGRhdGE9e3Zpc2libGVJdGVtc30gLz5cbiAgICA8L1N0cmljdE1vZGU+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEVmZmVjdEluUmVuZGVyR29vZEV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFt2aXNpYmxlSXRlbXMsIHNldFZpc2libGVJdGVtc10gPSB1c2VTdGF0ZTxJdGVtRGF0YVR5cGVbXT4oW10pO1xuICBjb25zdCBbZmV0Y2hlZEl0ZW1zLCBzZXRGZXRjaGVkSXRlbXNdID0gdXNlU3RhdGU8SXRlbURhdGFUeXBlW10+KFtdKTtcbiAgY29uc3Qgb25Nb3JlSXRlbUZldGNoZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoaXRlbXM6IEl0ZW1EYXRhVHlwZVtdKSA9PiB7XG4gICAgICBzZXRGZXRjaGVkSXRlbXMoaXRlbXMpO1xuICAgIH0sXG4gICAgW3NldEZldGNoZWRJdGVtc10sXG4gICk7XG5cbiAgaWYgKGZldGNoZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgc2V0VmlzaWJsZUl0ZW1zKHZpc2libGVJdGVtcy5jb25jYXQoZmV0Y2hlZEl0ZW1zKSk7XG4gICAgc2V0RmV0Y2hlZEl0ZW1zKFtdKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFN0cmljdE1vZGU+XG4gICAgICA8VGV4dD57YEl0ZW1zIGNvdW50IGluIGxpc3Q6ICR7dmlzaWJsZUl0ZW1zLmxlbmd0aH1gfTwvVGV4dD5cbiAgICAgIDxJdGVtRmV0Y2hlckdvb2RFeGFtcGxlTWVtb1xuICAgICAgICBvbkZldGNoZWQ9e29uTW9yZUl0ZW1GZXRjaGVkfVxuICAgICAgICBjb3VudD17RkVUQ0hfQ09VTlR9XG4gICAgICAvPlxuICAgICAgPEl0ZW1MaXN0TWVtbyBkYXRhPXt2aXNpYmxlSXRlbXN9IC8+XG4gICAgPC9TdHJpY3RNb2RlPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOlxuICAgICdEaXJlY3RseSB0cmlnZ2VyIHNpZGUgZWZmZWN0IGluIHJlbmRlciBtYXkgcnVuIG11bHRpcGxlIHRpbWVzIGFuZCBjYXVzZSBlcnJvciBzdGF0ZSBvciByZS1yZW5kZXJzJyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1RyaWdnZXIgYSBzaWRlIGVmZmVjdCBpbiByZW5kZXIgbWV0aG9kIHdpdGhvdXQgdXNpbmcgZWZmZWN0IGhvb2sgaW4gPFN0cmljdE1vZGU+LiBUaGlzIHdpbGwgZm9yY2UgcmVuZGVyIGNvbXBvbmVudCB0d28gdGltZXMsIGFuZCB0aGUgc2lkZSBlZmZlY3QgaW4gYmFkIGV4YW1wbGUgY2F1c2VkIGFwcGVuZCBpdGVtcyB0byB0aGUgbGlzdCB0d28gdGltZXMgdW5leHBlY3RlZGx5LicsXG4gIEJhZDogRWZmZWN0SW5SZW5kZXJCYWRFeGFtcGxlLFxuICBHb29kOiBFZmZlY3RJblJlbmRlckdvb2RFeGFtcGxlLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtQcmVzc0V2ZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcbmltcG9ydCB0eXBlIHtFdmVudFN1YnNjcmlwdGlvbn0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy92ZW5kb3IvZW1pdHRlci9FdmVudEVtaXR0ZXInO1xuXG5jb25zdCBSTlRlc3RlckJsb2NrID0gcmVxdWlyZSgnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlckJsb2NrJyk7XG5jb25zdCBjaGVja0ltYWdlU291cmNlID0gcmVxdWlyZSgnLi9jaGVjay5wbmcnKTtcbmNvbnN0IG1peGVkQ2hlY2tib3hJbWFnZVNvdXJjZSA9IHJlcXVpcmUoJy4vbWl4ZWQucG5nJyk7XG5jb25zdCB1bmNoZWNrSW1hZ2VTb3VyY2UgPSByZXF1aXJlKCcuL3VuY2hlY2sucG5nJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7Y3JlYXRlUmVmfSA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIEFjY2Vzc2liaWxpdHlJbmZvLFxuICBBbGVydCxcbiAgQnV0dG9uLFxuICBJbWFnZSxcbiAgSW1hZ2VCYWNrZ3JvdW5kLFxuICBQbGF0Zm9ybSxcbiAgU2Nyb2xsVmlldyxcbiAgU3R5bGVTaGVldCxcbiAgU3dpdGNoLFxuICBUZXh0LFxuICBUZXh0SW5wdXQsXG4gIFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrLFxuICBUb3VjaGFibGVPcGFjaXR5LFxuICBUb3VjaGFibGVXaXRob3V0RmVlZGJhY2ssXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgc2VjdGlvbkNvbnRhaW5lcjoge1xuICAgIHJvd0dhcDogMjAsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBib3JkZXJXaWR0aDogU3R5bGVTaGVldC5oYWlybGluZVdpZHRoLFxuICAgIGJvcmRlckNvbG9yOiAnIzBmMGYwZicsXG4gICAgZmxleDogMSxcbiAgICBmb250U2l6ZTogMTMsXG4gICAgcGFkZGluZzogNCxcbiAgfSxcbiAgdG91Y2hhYmxlOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmx1ZScsXG4gICAgYm9yZGVyQ29sb3I6ICdyZWQnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlclJhZGl1czogMTAsXG4gICAgcGFkZGluZzogMTAsXG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gIH0sXG4gIGltYWdlOiB7XG4gICAgd2lkdGg6IDIwLFxuICAgIGhlaWdodDogMjAsXG4gICAgcmVzaXplTW9kZTogJ2NvbnRhaW4nLFxuICAgIG1hcmdpblJpZ2h0OiAxMCxcbiAgfSxcbiAgZGlzYWJsZWRJbWFnZToge1xuICAgIHdpZHRoOiAxMjAsXG4gICAgaGVpZ2h0OiAxMjAsXG4gIH0sXG4gIGNvbnRhaW5lckFsaWduQ2VudGVyOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIHBhZGRpbmc6IDgsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdibHVlJyxcbiAgfSxcbiAgc21hbGxSZWRTcXVhcmU6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgIGhlaWdodDogNDAsXG4gICAgd2lkdGg6IDQwLFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICBJbWFnZUJhY2tncm91bmQ6IHtcbiAgICBmbGV4OiAxLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGZvbnRTaXplOiAyMCxcbiAgICBsaW5lSGVpZ2h0OiA4NCxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMDAwMDAwYzAnLFxuICB9LFxuICBzY3JvbGxWaWV3OiB7XG4gICAgaGVpZ2h0OiA1MCxcbiAgfSxcbn0pO1xuXG5jbGFzcyBBY2Nlc3NpYmlsaXR5RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fT4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VjdGlvbkNvbnRhaW5lcn0+XG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiVGV4dFZpZXcgd2l0aG91dCBsYWJlbFwiPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgVGV4dCdzIGFjY2Vzc2liaWxpdHlMYWJlbCBpcyB0aGUgcmF3IHRleHQgaXRzZWxmIHVubGVzcyBpdCBpcyBzZXRcbiAgICAgICAgICAgIGV4cGxpY2l0bHkuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJUZXh0VmlldyB3aXRoIGxhYmVsXCI+XG4gICAgICAgICAgPFRleHQgYWNjZXNzaWJpbGl0eUxhYmVsPVwiSSBoYXZlIGxhYmVsLCBzbyBJIHJlYWQgaXQgaW5zdGVhZCBvZiBlbWJlZGRlZCB0ZXh0LlwiPlxuICAgICAgICAgICAgVGhpcyB0ZXh0IGNvbXBvbmVudCdzIGFjY2Vzc2liaWxpdHlMYWJlbCBpcyBzZXQgZXhwbGljaXRseS5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIk5vbmFjY2Vzc2libGUgdmlldyB3aXRoIFRleHRWaWV3c1wiPlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ2dyZWVuJ319PlRoaXMgaXMgdGV4dCBvbmUuPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ2JsdWUnfX0+VGhpcyBpcyB0ZXh0IHR3by48L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJBY2Nlc3NpYmxlIHZpZXcgd2l0aCBUZXh0Vmlld3Mgd2l0aG91dCBsYWJlbFwiPlxuICAgICAgICAgIDxWaWV3IGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ2dyZWVuJ319PlRoaXMgaXMgdGV4dCBvbmUuPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ2JsdWUnfX0+VGhpcyBpcyB0ZXh0IHR3by48L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJBY2Nlc3NpYmxlIHZpZXcgd2l0aCBUZXh0Vmlld3Mgd2l0aCBsYWJlbFwiPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfVxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiSSBoYXZlIGxhYmVsLCBzbyBJIHJlYWQgaXQgaW5zdGVhZCBvZiBlbWJlZGRlZCB0ZXh0LlwiPlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ2dyZWVuJ319PlRoaXMgaXMgdGV4dCBvbmUuPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3tjb2xvcjogJ2JsdWUnfX0+VGhpcyBpcyB0ZXh0IHR3by48L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJWaWV3IHdpdGggaGlkZGVuIGNoaWxkcmVuIGZyb20gYWNjZXNzaWJpbGl0eSB0cmVlLlwiPlxuICAgICAgICAgIDxWaWV3IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIFRoaXMgdmlldydzIGNoaWxkcmVuIGFyZSBoaWRkZW4gZnJvbSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgey8qIEFuZHJvaWQgc2NyZWVuIHJlYWRlcnMgd2lsbCBzYXkgdGhlIGFjY2Vzc2liaWxpdHkgaGludCBpbnN0ZWFkIG9mIHRoZSB0ZXh0XG4gICAgICAgICAgIHNpbmNlIHRoZSB2aWV3IGRvZXNuJ3QgaGF2ZSBhIGxhYmVsLiAqL31cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJBY2Nlc3NpYmxlIHZpZXcgd2l0aCBUZXh0Vmlld3Mgd2l0aCBoaW50XCI+XG4gICAgICAgICAgPFZpZXcgYWNjZXNzaWJpbGl0eUhpbnQ9XCJBY2Nlc3NpYmlsaXR5IGhpbnQuXCIgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnZ3JlZW4nfX0+VGhpcyBpcyB0ZXh0IG9uZS48L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnYmx1ZSd9fT5UaGlzIGlzIHRleHQgdHdvLjwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIkFjY2Vzc2libGUgdmlldyBUZXh0Vmlld3Mgd2l0aCBsYWJlbCBhbmQgaGludFwiPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJBY2Nlc3NpYmlsaXR5IGxhYmVsLlwiXG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5SGludD1cIkFjY2Vzc2liaWxpdHkgaGludC5cIlxuICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnZ3JlZW4nfX0+VGhpcyBpcyB0ZXh0IG9uZS48L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17e2NvbG9yOiAnYmx1ZSd9fT5UaGlzIGlzIHRleHQgdHdvLjwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlRleHQgd2l0aCBhY2Nlc3NpYmlsaXR5Um9sZSA9IGhlYWRlclwiPlxuICAgICAgICAgIDxUZXh0IGFjY2Vzc2liaWxpdHlSb2xlPVwiaGVhZGVyXCI+VGhpcyBpcyBhIHRpdGxlLjwvVGV4dD5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiVGV4dCB3aXRoIHJvbGUgPSBoZWFkaW5nXCI+XG4gICAgICAgICAgPFRleHQgcm9sZT1cImhlYWRpbmdcIj5UaGlzIGlzIGEgdGl0bGUuPC9UZXh0PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJUb3VjaGFibGUgd2l0aCBhY2Nlc3NpYmlsaXR5Um9sZSA9IGxpbmtcIj5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gQWxlcnQuYWxlcnQoJ0xpbmsgaGFzIGJlZW4gY2xpY2tlZCEnKX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwibGlua1wiPlxuICAgICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICAgIDxUZXh0PkNsaWNrIG1lPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiVG91Y2hhYmxlIHdpdGggYWNjZXNzaWJpbGl0eVJvbGUgPSBidXR0b25cIj5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gQWxlcnQuYWxlcnQoJ0J1dHRvbiBoYXMgYmVlbiBwcmVzc2VkIScpfVxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIDxUZXh0PkNsaWNrIG1lPC9UZXh0PlxuICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiRGlzYWJsZWQgVG91Y2hhYmxlIHdpdGggcm9sZVwiPlxuICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBBbGVydC5hbGVydCgnQnV0dG9uIGhhcyBiZWVuIHByZXNzZWQhJyl9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tkaXNhYmxlZDogdHJ1ZX19XG4gICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX0+XG4gICAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgSSBhbSBkaXNhYmxlZC4gQ2xpY2tpbmcgbWUgd2lsbCBub3QgdHJpZ2dlciBhbnkgYWN0aW9uLlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJEaXNhYmxlZCBUb3VjaGFibGVPcGFjaXR5XCI+XG4gICAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IEFsZXJ0LmFsZXJ0KCdEaXNhYmxlZCBCdXR0b24gaGFzIGJlZW4gcHJlc3NlZCEnKX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD17J1lvdSBhcmUgcHJlc3NpbmcgRGlzYWJsZWQgVG91Y2hhYmxlT3BhY2l0eSd9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tkaXNhYmxlZDogdHJ1ZX19PlxuICAgICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIEkgYW0gZGlzYWJsZWQuIENsaWNraW5nIG1lIHdpbGwgbm90IHRyaWdnZXIgYW55IGFjdGlvbi5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlZpZXcgd2l0aCBtdWx0aXBsZSBzdGF0ZXNcIj5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17e3NlbGVjdGVkOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZX19PlxuICAgICAgICAgICAgPFRleHQ+VGhpcyB2aWV3IGlzIHNlbGVjdGVkIGFuZCBkaXNhYmxlZC48L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJWaWV3IHdpdGggbGFiZWwsIGhpbnQsIHJvbGUsIGFuZCBzdGF0ZVwiPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfVxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiQWNjZXNzaWJpbGl0eSBsYWJlbC5cIlxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXt7c2VsZWN0ZWQ6IHRydWV9fVxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUhpbnQ9XCJBY2Nlc3NpYmlsaXR5IGhpbnQuXCI+XG4gICAgICAgICAgICA8VGV4dD5BY2Nlc3NpYmxlIHZpZXcgd2l0aCBsYWJlbCwgaGludCwgcm9sZSwgYW5kIHN0YXRlPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiVmlldyB3aXRoIGxhYmVsLCBoaW50LCByb2xlLCBhbmQgc3RhdGVcIj5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIkFjY2Vzc2liaWxpdHkgbGFiZWwuXCJcbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e3RydWV9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5SGludD1cIkFjY2Vzc2liaWxpdHkgaGludC5cIj5cbiAgICAgICAgICAgIDxUZXh0PkFjY2Vzc2libGUgdmlldyB3aXRoIGxhYmVsLCBoaW50LCByb2xlLCBhbmQgc3RhdGU8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJUZXh0SW5wdXQgd2l0aCBhY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeSBhdHRyaWJ1dGVcIj5cbiAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgIDxUZXh0IG5hdGl2ZUlEPVwiZm9ybUxhYmVsMVwiPk1haWwgQWRkcmVzczwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiaW5wdXQgdGVzdDFcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeT1cImZvcm1MYWJlbDFcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmRlZmF1bHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFRleHQgbmF0aXZlSUQ9XCJmb3JtTGFiZWwyXCI+Rmlyc3QgTmFtZTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiaW5wdXQgdGVzdDJcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeT17Wydmb3JtTGFiZWwyJywgJ2Zvcm1MYWJlbDMnXX1cbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgICB2YWx1ZT1cIkZvb1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlN3aXRjaCB3aXRoIGFjY2Vzc2liaWxpdHlMYWJlbGxlZEJ5IGF0dHJpYnV0ZVwiPlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFRleHQgbmF0aXZlSUQ9XCJmb3JtTGFiZWw0XCI+RW5hYmxlIE5vdGlmaWNhdGlvbnM8L1RleHQ+XG4gICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgIHZhbHVlPXt0cnVlfVxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJzd2l0Y2ggdGVzdDFcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeT1cImZvcm1MYWJlbDRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEF1dG9tYXRpY0NvbnRlbnRHcm91cGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fT4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VjdGlvbkNvbnRhaW5lcn0+XG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiVGhlIHBhcmVudCBhbmQgdGhlIGNoaWxkcmVuIGhhdmUgYSBkaWZmZXJlbnQgcm9sZVwiPlxuICAgICAgICAgIDxUb3VjaGFibGVOYXRpdmVGZWVkYmFjayBhY2Nlc3NpYmxlPXt0cnVlfSBhY2Nlc3NpYmlsaXR5Um9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPFZpZXcgYWNjZXNzaWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICA8VGV4dCBhY2Nlc3NpYmlsaXR5Um9sZT1cImltYWdlXCIgYWNjZXNzaWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIFRleHQgbnVtYmVyIDEgd2l0aCBhIHJvbGVcbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dCBhY2Nlc3NpYmxlPXtmYWxzZX0+VGV4dCBudW1iZXIgMjwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8L1RvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrPlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJUaGUgcGFyZW50IGhhcyB0aGUgYWNjZXNzaWJpbGl0eUFjdGlvbnMgY3V0LCBjb3B5IGFuZCBwYXN0ZVwiPlxuICAgICAgICAgIDxUb3VjaGFibGVOYXRpdmVGZWVkYmFja1xuICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlBY3Rpb25zPXtbXG4gICAgICAgICAgICAgIHtuYW1lOiAnY3V0JywgbGFiZWw6ICdjdXQgbGFiZWwnfSxcbiAgICAgICAgICAgICAge25hbWU6ICdjb3B5JywgbGFiZWw6ICdjb3B5IGxhYmVsJ30sXG4gICAgICAgICAgICAgIHtuYW1lOiAncGFzdGUnLCBsYWJlbDogJ3Bhc3RlIGxhYmVsJ30sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgb25BY2Nlc3NpYmlsaXR5QWN0aW9uPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQubmF0aXZlRXZlbnQuYWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2N1dCc6XG4gICAgICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAnY3V0IGFjdGlvbiBzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjb3B5JzpcbiAgICAgICAgICAgICAgICAgIEFsZXJ0LmFsZXJ0KCdBbGVydCcsICdjb3B5IGFjdGlvbiBzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdwYXN0ZSc6XG4gICAgICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAncGFzdGUgYWN0aW9uIHN1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgICA8VGV4dCBhY2Nlc3NpYmxlPXtmYWxzZX0+VGV4dCBudW1iZXIgMTwvVGV4dD5cbiAgICAgICAgICAgICAgPFRleHQgYWNjZXNzaWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIFRleHQgbnVtYmVyIDI8VGV4dCBhY2Nlc3NpYmxlPXtmYWxzZX0+VGV4dCBudW1iZXIgMzwvVGV4dD5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2s+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlRhbGtiYWNrIG9ubHkgcHVsbHMgdGhlIGNoaWxkJ3MgY29udGVudERlc2NyaXB0aW9uIG9yIHRleHQgYnV0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGNoaWxkJ3MgYWNjZXNzaWJpbGl0eVN0YXRlIG9yIGFjY2Vzc2liaWxpdHlSb2xlLiBUYWxrQmFjayBhdm9pZHMgYW5ub3VuY2VtZW50cyBvZiBjb25mbGljdGluZyBzdGF0ZXMgb3Igcm9sZXMgKGZvciBleGFtcGxlLCAnYnV0dG9uJyBhbmQgJ3NsaWRlcicpLlwiPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfVxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXt7Y2hlY2tlZDogdHJ1ZX19PlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17e2NoZWNrZWQ6IHRydWUsIGRpc2FibGVkOiBmYWxzZX19PlxuICAgICAgICAgICAgICBUZXh0IG51bWJlciAxXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnNtYWxsUmVkU3F1YXJlfVxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXt7Y2hlY2tlZDogZmFsc2UsIGRpc2FibGVkOiB0cnVlfX1cbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiVGhpcyBjaGlsZCBUZXh0IGRvZXMgbm90IGhhdmUgdGV4dCwgYnV0IGhhcyBhbiBhY2Nlc3NpYmlsaXR5TGFiZWwgYW5kIGFjY2Vzc2liaWxpdHlTdGF0ZS4gVGhlIGNoaWxkIGFjY2Vzc2liaWxpdHkgc3RhdGUgZGlzYWJsZWQgaXMgbm90IGFubm91bmNlZC5cIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImltYWdlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJPbmUgb2YgdGhlIGNoaWxkcmVuIGhhcyBhY2Nlc3NpYmlsaXR5TGFiZWwsIHJvbGUsIHN0YXRlLCBhbmQgYWNjZXNzaWJpbGl0eVZhbHVlLlwiPlxuICAgICAgICAgIDxWaWV3IGFjY2Vzc2libGU9e3RydWV9IGFjY2Vzc2liaWxpdHlSb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgICAgPFRleHQgYWNjZXNzaWJsZT17ZmFsc2V9PlRleHQgbnVtYmVyIDE8L1RleHQ+XG4gICAgICAgICAgICAgIDxUb3VjaGFibGVOYXRpdmVGZWVkYmFja1xuICAgICAgICAgICAgICAgIGZvY3VzYWJsZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiBjb25zb2xlLndhcm4oJ29uUHJlc3MgY2hpbGQnKX1cbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJ0aGlzIGlzIG15IGxhYmVsXCJcbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImltYWdlXCJcbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tkaXNhYmxlZDogdHJ1ZX19XG4gICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVZhbHVlPXt7dGV4dDogJ3RoaXMgaXMgdGhlIGFjY2Vzc2liaWxpdHkgdmFsdWUnfX0+XG4gICAgICAgICAgICAgICAgPFRleHQgYWNjZXNzaWJsZT17ZmFsc2V9PlRleHQgbnVtYmVyIDM8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2s+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJUaGUgcGFyZW50IGhhcyBhIFRleHRJbnB1dCBjaGlsZCBjb21wb25lbnQuXCI+XG4gICAgICAgICAgPFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrIGFjY2Vzc2libGU9e3RydWV9IGFjY2Vzc2liaWxpdHlSb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHZhbHVlPVwidGhpcyBpcyB0aGUgdmFsdWVcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5kZWZhdWx0fVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInRoaXMgaXMgdGhlIHBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Ub3VjaGFibGVOYXRpdmVGZWVkYmFjaz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiVGhlIHBhcmVudHMgaW5jbHVkZSB0aHJlZSBsZXZlbHMgb2YgbmVzdGVkIENvbXBvbmVudHMuXCI+XG4gICAgICAgICAgPFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrIGFjY2Vzc2libGU9e3RydWV9IGFjY2Vzc2liaWxpdHlSb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICA8VGV4dCBhY2Nlc3NpYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICAgIFRleHQgbnVtYmVyIDJcbiAgICAgICAgICAgICAgPFRleHQgYWNjZXNzaWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIFRleHQgbnVtYmVyIDM8VGV4dCBhY2Nlc3NpYmxlPXtmYWxzZX0+VGV4dCBudW1iZXIgNDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2s+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlRoZSBjaGlsZCBpcyBub3QgVGV4dElucHV0LiBUaGUgY29udGVudERlc2NyaXB0aW9uIGlzIG5vdCBlbXB0eSBhbmQgZG9lcyBub3QgaGF2ZSBub2RlIHRleHQuXCI+XG4gICAgICAgICAgPFRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBjb25zb2xlLndhcm4oJ29uUHJlc3MgY2hpbGQnKX1cbiAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5zbWFsbFJlZFNxdWFyZX1cbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJ0aGlzIGlzIHRoZSBjaGlsZCBUZXh0IGFjY2Vzc2liaWxpdHlMYWJlbFwiXG4gICAgICAgICAgICAgICAgYWNjZXNzaWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9Ub3VjaGFibGVOYXRpdmVGZWVkYmFjaz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiT25lIG9mIHRoZSBjaGlsZCBoYXMgYWNjZXNzaWJpbGl0eUhpbnQgKGhhc1RleHQgdHJpZ2dlcnMgdGhlIGFubm91bmNlbWVudCkuXCI+XG4gICAgICAgICAgPFZpZXcgYWNjZXNzaWJsZT17dHJ1ZX0gYWNjZXNzaWJpbGl0eVJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuc21hbGxSZWRTcXVhcmV9XG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e2ZhbHNlfVxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5SGludD1cInRoaXMgY2hpbGQgVGV4dCBkb2VzIG5vdCBoYXZlIHRleHQsIGJ1dCBoYXMgaGludCBhbmQgc2hvdWxkIGJlIGFubm91bmNlZCBieSBUYWxrQmFja1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQ2hlY2tib3hFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICB7fSxcbiAge1xuICAgIGNoZWNrYm94U3RhdGU6IGJvb2xlYW4gfCAnbWl4ZWQnLFxuICB9LFxuPiB7XG4gIHN0YXRlOiB7Y2hlY2tib3hTdGF0ZTogYm9vbGVhbiB8ICdtaXhlZCd9ID0ge1xuICAgIGNoZWNrYm94U3RhdGU6IHRydWUsXG4gIH07XG5cbiAgX29uQ2hlY2tib3hQcmVzcyA9ICgpID0+IHtcbiAgICBsZXQgY2hlY2tib3hTdGF0ZTogYm9vbGVhbiB8ICRURU1QT1JBUlkkc3RyaW5nPCdtaXhlZCc+ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc3RhdGUuY2hlY2tib3hTdGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNoZWNrYm94U3RhdGUgPSAnbWl4ZWQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5jaGVja2JveFN0YXRlID09PSAnbWl4ZWQnKSB7XG4gICAgICBjaGVja2JveFN0YXRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tib3hTdGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2hlY2tib3hTdGF0ZTogY2hlY2tib3hTdGF0ZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgIG9uUHJlc3M9e3RoaXMuX29uQ2hlY2tib3hQcmVzc31cbiAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAyXCJcbiAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJjaGVja2JveFwiXG4gICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17e2NoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tib3hTdGF0ZX19XG4gICAgICAgIGFjY2Vzc2liaWxpdHlIaW50PVwiY2xpY2sgbWUgdG8gY2hhbmdlIHN0YXRlXCI+XG4gICAgICAgIDxUZXh0PkNoZWNrYm94IGV4YW1wbGU8L1RleHQ+XG4gICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTd2l0Y2hFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICB7fSxcbiAge1xuICAgIHN3aXRjaFN0YXRlOiBib29sZWFuLFxuICB9LFxuPiB7XG4gIHN0YXRlOiB7c3dpdGNoU3RhdGU6IGJvb2xlYW59ID0ge1xuICAgIHN3aXRjaFN0YXRlOiB0cnVlLFxuICB9O1xuXG4gIF9vblN3aXRjaFRvZ2dsZSA9ICgpID0+IHtcbiAgICBjb25zdCBzd2l0Y2hTdGF0ZSA9ICF0aGlzLnN0YXRlLnN3aXRjaFN0YXRlO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzd2l0Y2hTdGF0ZTogc3dpdGNoU3RhdGUsXG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICBvblByZXNzPXt0aGlzLl9vblN3aXRjaFRvZ2dsZX1cbiAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAxMlwiXG4gICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwic3dpdGNoXCJcbiAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXt7Y2hlY2tlZDogdGhpcy5zdGF0ZS5zd2l0Y2hTdGF0ZX19XG4gICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICA8VGV4dD5Td2l0Y2ggZXhhbXBsZTwvVGV4dD5cbiAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFNlbGVjdGlvbkV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHt9LFxuICB7XG4gICAgaXNTZWxlY3RlZDogYm9vbGVhbixcbiAgICBpc0VuYWJsZWQ6IGJvb2xlYW4sXG4gIH0sXG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IHt9KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnQgPSBjcmVhdGVSZWYoKTtcbiAgfVxuICBzZWxlY3RhYmxlRWxlbWVudDoge1xuICAgIGN1cnJlbnQ6IFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFRvdWNoYWJsZU9wYWNpdHk+IHwgbnVsbCxcbiAgfTtcblxuICBzdGF0ZToge2lzRW5hYmxlZDogYm9vbGVhbiwgaXNTZWxlY3RlZDogYm9vbGVhbn0gPSB7XG4gICAgaXNTZWxlY3RlZDogdHJ1ZSxcbiAgICBpc0VuYWJsZWQ6IGZhbHNlLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCB7aXNTZWxlY3RlZCwgaXNFbmFibGVkfSA9IHRoaXMuc3RhdGU7XG4gICAgbGV0IGFjY2Vzc2liaWxpdHlIaW50ID0gJ2NsaWNrIG1lIHRvIHNlbGVjdCc7XG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIGFjY2Vzc2liaWxpdHlIaW50ID0gJ2NsaWNrIG1lIHRvIHVuc2VsZWN0JztcbiAgICB9XG4gICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgIGFjY2Vzc2liaWxpdHlIaW50ID0gJ3VzZSB0aGUgYnV0dG9uIG9uIHRoZSByaWdodCB0byBlbmFibGUgc2VsZWN0aW9uJztcbiAgICB9XG4gICAgbGV0IGJ1dHRvblRpdGxlID0gaXNFbmFibGVkID8gJ0Rpc2FibGUgc2VsZWN0aW9uJyA6ICdFbmFibGUgc2VsZWN0aW9uJztcbiAgICBjb25zdCB0b3VjaGFibGVIaW50ID0gYCAodG91Y2hpbmcgdGhlIFRvdWNoYWJsZU9wYWNpdHkgd2lsbCAke1xuICAgICAgaXNTZWxlY3RlZCA/ICdkaXNhYmxlJyA6ICdlbmFibGUnXG4gICAgfSBhY2Nlc3NpYmlsaXR5U3RhdGUuc2VsZWN0ZWQpYDtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJBbGlnbkNlbnRlcn0+XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgcmVmPXt0aGlzLnNlbGVjdGFibGVFbGVtZW50fVxuICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiAhaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3NlbGVjdGlvbiBpcyBkaXNhYmxlZCwgcGxlYXNlIGVuYWJsZSBzZWxlY3Rpb24uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJlbGVtZW50IDE5XCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tcbiAgICAgICAgICAgIHNlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICFpc0VuYWJsZWQsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnRvdWNoYWJsZX1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5SGludD17YWNjZXNzaWJpbGl0eUhpbnR9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Y29sb3I6ICd3aGl0ZSd9fT5cbiAgICAgICAgICAgIHtgU2VsZWN0YWJsZSBUb3VjaGFibGVPcGFjaXR5IEV4YW1wbGUgJHt0b3VjaGFibGVIaW50fWB9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJlbGVtZW50IDIwXCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tcbiAgICAgICAgICAgIHNlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgIH19XG4gICAgICAgICAgbXVsdGlsaW5lPXt0cnVlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtgVGV4dElucHV0IEV4YW1wbGUgLSAke1xuICAgICAgICAgICAgaXNTZWxlY3RlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCdcbiAgICAgICAgICB9IHNlbGVjdGlvbmB9XG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaXNFbmFibGVkOiAhdGhpcy5zdGF0ZS5pc0VuYWJsZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRpdGxlPXtidXR0b25UaXRsZX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEV4cGFuZGFibGVFbGVtZW50RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAge30sXG4gIHtcbiAgICBleHBhbmRTdGF0ZTogYm9vbGVhbixcbiAgfSxcbj4ge1xuICBzdGF0ZToge2V4cGFuZFN0YXRlOiBib29sZWFufSA9IHtcbiAgICBleHBhbmRTdGF0ZTogZmFsc2UsXG4gIH07XG5cbiAgX29uRWxlbWVudFByZXNzID0gKCkgPT4ge1xuICAgIGNvbnN0IGV4cGFuZFN0YXRlID0gIXRoaXMuc3RhdGUuZXhwYW5kU3RhdGU7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGV4cGFuZFN0YXRlOiBleHBhbmRTdGF0ZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgIG9uUHJlc3M9e3RoaXMuX29uRWxlbWVudFByZXNzfVxuICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJlbGVtZW50IDE4XCJcbiAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXt7ZXhwYW5kZWQ6IHRoaXMuc3RhdGUuZXhwYW5kU3RhdGV9fVxuICAgICAgICBhY2Nlc3NpYmlsaXR5SGludD1cImNsaWNrIG1lIHRvIGNoYW5nZSBzdGF0ZVwiPlxuICAgICAgICA8VGV4dD5FeHBhbmRhYmxlIGVsZW1lbnQgZXhhbXBsZTwvVGV4dD5cbiAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIE5lc3RlZENoZWNrQm94IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICB7fSxcbiAge1xuICAgIGNoZWNrYm94MTogYm9vbGVhbiB8ICdtaXhlZCcsXG4gICAgY2hlY2tib3gyOiBib29sZWFuIHwgJ21peGVkJyxcbiAgICBjaGVja2JveDM6IGJvb2xlYW4gfCAnbWl4ZWQnLFxuICB9LFxuPiB7XG4gIHN0YXRlOiB7XG4gICAgY2hlY2tib3gxOiBib29sZWFuIHwgJ21peGVkJyxcbiAgICBjaGVja2JveDI6IGJvb2xlYW4gfCAnbWl4ZWQnLFxuICAgIGNoZWNrYm94MzogYm9vbGVhbiB8ICdtaXhlZCcsXG4gIH0gPSB7XG4gICAgY2hlY2tib3gxOiBmYWxzZSxcbiAgICBjaGVja2JveDI6IGZhbHNlLFxuICAgIGNoZWNrYm94MzogZmFsc2UsXG4gIH07XG5cbiAgX29uUHJlc3MxID0gKCkgPT4ge1xuICAgIGxldCBjaGVja2JveDEgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5zdGF0ZS5jaGVja2JveDEgPT09IGZhbHNlKSB7XG4gICAgICBjaGVja2JveDEgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5jaGVja2JveDEgPT09ICdtaXhlZCcpIHtcbiAgICAgIGNoZWNrYm94MSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja2JveDEgPSBmYWxzZTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2hlY2tib3gxOiBjaGVja2JveDEsXG4gICAgICAgIGNoZWNrYm94MjogY2hlY2tib3gxLFxuICAgICAgICBjaGVja2JveDM6IGNoZWNrYm94MSxcbiAgICAgIH0pO1xuICAgIH0sIDIwMDApO1xuICB9O1xuXG4gIF9vblByZXNzMiA9ICgpID0+IHtcbiAgICBjb25zdCBjaGVja2JveDIgPSAhdGhpcy5zdGF0ZS5jaGVja2JveDI7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNoZWNrYm94MjogY2hlY2tib3gyLFxuICAgICAgY2hlY2tib3gxOlxuICAgICAgICBjaGVja2JveDIgJiYgdGhpcy5zdGF0ZS5jaGVja2JveDNcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGNoZWNrYm94MiB8fCB0aGlzLnN0YXRlLmNoZWNrYm94M1xuICAgICAgICAgID8gJ21peGVkJ1xuICAgICAgICAgIDogZmFsc2UsXG4gICAgfSk7XG4gIH07XG5cbiAgX29uUHJlc3MzID0gKCkgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94MyA9ICF0aGlzLnN0YXRlLmNoZWNrYm94MztcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2hlY2tib3gzOiBjaGVja2JveDMsXG4gICAgICBjaGVja2JveDE6XG4gICAgICAgIHRoaXMuc3RhdGUuY2hlY2tib3gyICYmIGNoZWNrYm94M1xuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogdGhpcy5zdGF0ZS5jaGVja2JveDIgfHwgY2hlY2tib3gzXG4gICAgICAgICAgPyAnbWl4ZWQnXG4gICAgICAgICAgOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgIHN0eWxlPXt7ZmxleDogMSwgZmxleERpcmVjdGlvbjogJ3Jvdyd9fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMuX29uUHJlc3MxfVxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIk1lYXRcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlIaW50PVwiU3RhdGUgY2hhbmdlcyBpbiAyIHNlY29uZHMgYWZ0ZXIgY2xpY2tpbmcuXCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrYm94MX19PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5pbWFnZX1cbiAgICAgICAgICAgIHNvdXJjZT17XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuY2hlY2tib3gxID09PSAnbWl4ZWQnXG4gICAgICAgICAgICAgICAgPyBtaXhlZENoZWNrYm94SW1hZ2VTb3VyY2VcbiAgICAgICAgICAgICAgICA6IHRoaXMuc3RhdGUuY2hlY2tib3gxXG4gICAgICAgICAgICAgICAgPyBjaGVja0ltYWdlU291cmNlXG4gICAgICAgICAgICAgICAgOiB1bmNoZWNrSW1hZ2VTb3VyY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUZXh0Pk1lYXQ8L1RleHQ+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICBzdHlsZT17e2ZsZXg6IDEsIGZsZXhEaXJlY3Rpb246ICdyb3cnfX1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLl9vblByZXNzMn1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJCZWVmXCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrYm94Mn19PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5pbWFnZX1cbiAgICAgICAgICAgIHNvdXJjZT17XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuY2hlY2tib3gyID8gY2hlY2tJbWFnZVNvdXJjZSA6IHVuY2hlY2tJbWFnZVNvdXJjZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHQ+QmVlZjwvVGV4dD5cbiAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgIHN0eWxlPXt7ZmxleDogMSwgZmxleERpcmVjdGlvbjogJ3Jvdyd9fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMuX29uUHJlc3MzfVxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIkJhY29uXCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrYm94M319PlxuICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5pbWFnZX1cbiAgICAgICAgICAgIHNvdXJjZT17XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuY2hlY2tib3gzID8gY2hlY2tJbWFnZVNvdXJjZSA6IHVuY2hlY2tJbWFnZVNvdXJjZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHQ+QmFjb248L1RleHQ+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEFjY2Vzc2liaWxpdHlSb2xlQW5kU3RhdGVFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHt9PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBjb250ZW50ID0gW1xuICAgICAgPFRleHQga2V5PXsxfT5UaGlzIGlzIHNvbWUgdGV4dDwvVGV4dD4sXG4gICAgICA8VGV4dCBrZXk9ezJ9PlRoaXMgaXMgc29tZSB0ZXh0PC9UZXh0PixcbiAgICAgIDxUZXh0IGtleT17M30+VGhpcyBpcyBzb21lIHRleHQ8L1RleHQ+LFxuICAgICAgPFRleHQga2V5PXs0fT5UaGlzIGlzIHNvbWUgdGV4dDwvVGV4dD4sXG4gICAgICA8VGV4dCBrZXk9ezV9PlRoaXMgaXMgc29tZSB0ZXh0PC9UZXh0PixcbiAgICAgIDxUZXh0IGtleT17Nn0+VGhpcyBpcyBzb21lIHRleHQ8L1RleHQ+LFxuICAgICAgPFRleHQga2V5PXs3fT5UaGlzIGlzIHNvbWUgdGV4dDwvVGV4dD4sXG4gICAgXTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNlY3Rpb25Db250YWluZXJ9PlxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlNjcm9sbFZpZXcgd2l0aCBncmlkIHJvbGVcIj5cbiAgICAgICAgICA8U2Nyb2xsVmlldyBhY2Nlc3NpYmlsaXR5Um9sZT1cImdyaWRcIiBzdHlsZT17c3R5bGVzLnNjcm9sbFZpZXd9PlxuICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiU2Nyb2xsVmlldyB3aXRoIHNjcm9sbHZpZXcgcm9sZVwiPlxuICAgICAgICAgIDxTY3JvbGxWaWV3IGFjY2Vzc2liaWxpdHlSb2xlPVwic2Nyb2xsdmlld1wiIHN0eWxlPXtzdHlsZXMuc2Nyb2xsVmlld30+XG4gICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJIb3Jpem9udGFsU2Nyb2xsVmlldyB3aXRoIGhvcml6b250YWxzY3JvbGx2aWV3IHJvbGVcIj5cbiAgICAgICAgICA8U2Nyb2xsVmlld1xuICAgICAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJob3Jpem9udGFsc2Nyb2xsdmlld1wiXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLnNjcm9sbFZpZXd9PlxuICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiYWNjZXNzaWJpbGl0eVJvbGUgd2l0aCBWaWV3IENvbXBvbmVudFwiPlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAxXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgICA8VGV4dD5BbGVydCBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPENoZWNrYm94RXhhbXBsZSAvPlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAzXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgICA8VGV4dD5Db21ib2JveCBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCA0XCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJtZW51XCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICAgIDxUZXh0Pk1lbnUgZXhhbXBsZTwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cImVsZW1lbnQgNVwiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwibWVudWJhclwiXG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgICA8VGV4dD5NZW51IGJhciBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCA2XCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgICA8VGV4dD5NZW51IGl0ZW0gZXhhbXBsZTwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cImVsZW1lbnQgN1wiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFRleHQ+UHJvZ3Jlc3MgYmFyIGV4YW1wbGU8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJlbGVtZW50IDhcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICAgIDxUZXh0PlJhZGlvIGJ1dHRvbiBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCA5XCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJyYWRpb2dyb3VwXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICAgIDxUZXh0PlJhZGlvIGdyb3VwIGV4YW1wbGU8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJlbGVtZW50IDEwXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJzY3JvbGxiYXJcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFRleHQ+U2Nyb2xsYmFyIGV4YW1wbGU8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJlbGVtZW50IDExXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJzcGluYnV0dG9uXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICAgIDxUZXh0PlNwaW4gYnV0dG9uIGV4YW1wbGU8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8U3dpdGNoRXhhbXBsZSAvPlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAxM1wiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwidGFiXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICAgIDxUZXh0PlRhYiBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAxNFwiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwidGFibGlzdFwiXG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgICA8VGV4dD5UYWIgbGlzdCBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAxNVwiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwidGltZXJcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFRleHQ+VGltZXIgZXhhbXBsZTwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cImVsZW1lbnQgMTZcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cInRvb2xiYXJcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFRleHQ+VG9vbGJhciBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAxN1wiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17e2J1c3k6IHRydWV9fVxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFRleHQ+U3RhdGUgYnVzeSBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAxOFwiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiZHJvcGRvd25saXN0XCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICAgIDxUZXh0PkRyb3AgRG93biBMaXN0IGV4YW1wbGU8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJlbGVtZW50IDE5XCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eVJvbGU9XCJwYWdlclwiXG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgICA8VGV4dD5QYWdlciBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiZWxlbWVudCAyMFwiXG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwidG9nZ2xlYnV0dG9uXCJcbiAgICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgICAgIDxUZXh0PlRvZ2dsZSBCdXR0b24gZXhhbXBsZTwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cImVsZW1lbnQgMjFcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cInZpZXdncm91cFwiXG4gICAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9PlxuICAgICAgICAgICAgICA8VGV4dD5WaWV3Z3JvdXAgZXhhbXBsZTwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cImVsZW1lbnQgMjJcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Um9sZT1cIndlYnZpZXdcIlxuICAgICAgICAgICAgICBhY2Nlc3NpYmxlPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFRleHQ+V2VidmlldyBleGFtcGxlPC9UZXh0PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPEV4cGFuZGFibGVFbGVtZW50RXhhbXBsZSAvPlxuICAgICAgICAgICAgPFNlbGVjdGlvbkV4YW1wbGUgLz5cbiAgICAgICAgICAgIDxUZXh0Pk5lc3RlZCBjaGVja2JveCB3aXRoIGRlbGF5ZWQgc3RhdGUgY2hhbmdlPC9UZXh0PlxuICAgICAgICAgICAgPE5lc3RlZENoZWNrQm94IC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBBY2Nlc3NpYmlsaXR5QWN0aW9uc0V4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNlY3Rpb25Db250YWluZXJ9PlxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIk5vbi10b3VjaGFibGUgd2l0aCBhY3RpdmF0ZSBhY3Rpb25cIj5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlBY3Rpb25zPXtbe25hbWU6ICdhY3RpdmF0ZSd9XX1cbiAgICAgICAgICAgIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50Lm5hdGl2ZUV2ZW50LmFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdhY3RpdmF0ZSc6XG4gICAgICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAnVmlldyBpcyBjbGlja2VkJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICA8VGV4dD5DbGljayBtZTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlZpZXcgd2l0aCBtdWx0aXBsZSBhY3Rpb25zXCI+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz17W1xuICAgICAgICAgICAgICB7bmFtZTogJ2N1dCcsIGxhYmVsOiAnY3V0IGxhYmVsJ30sXG4gICAgICAgICAgICAgIHtuYW1lOiAnY29weScsIGxhYmVsOiAnY29weSBsYWJlbCd9LFxuICAgICAgICAgICAgICB7bmFtZTogJ3Bhc3RlJywgbGFiZWw6ICdwYXN0ZSBsYWJlbCd9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50Lm5hdGl2ZUV2ZW50LmFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjdXQnOlxuICAgICAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ2N1dCBhY3Rpb24gc3VjY2VzcycpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29weSc6XG4gICAgICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAnY29weSBhY3Rpb24gc3VjY2VzcycpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncGFzdGUnOlxuICAgICAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ3Bhc3RlIGFjdGlvbiBzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIHZpZXcgc3VwcG9ydHMgbWFueSBhY3Rpb25zLjwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIkFkanVzdGFibGUgd2l0aCBpbmNyZW1lbnQvZGVjcmVtZW50IGFjdGlvbnNcIj5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYWRqdXN0YWJsZVwiXG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz17W3tuYW1lOiAnaW5jcmVtZW50J30sIHtuYW1lOiAnZGVjcmVtZW50J31dfVxuICAgICAgICAgICAgb25BY2Nlc3NpYmlsaXR5QWN0aW9uPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQubmF0aXZlRXZlbnQuYWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2luY3JlbWVudCc6XG4gICAgICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAnaW5jcmVtZW50IGFjdGlvbiBzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkZWNyZW1lbnQnOlxuICAgICAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ2RlY3JlbWVudCBhY3Rpb24gc3VjY2VzcycpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgPFRleHQ+U2xpZGVyPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIHdpdGggY3VzdG9tIGFjY2Vzc2liaWxpdHkgYWN0aW9uc1wiPlxuICAgICAgICAgIDxUb3VjaGFibGVXaXRob3V0RmVlZGJhY2tcbiAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz17W1xuICAgICAgICAgICAgICB7bmFtZTogJ2N1dCcsIGxhYmVsOiAnY3V0IGxhYmVsJ30sXG4gICAgICAgICAgICAgIHtuYW1lOiAnY29weScsIGxhYmVsOiAnY29weSBsYWJlbCd9LFxuICAgICAgICAgICAgICB7bmFtZTogJ3Bhc3RlJywgbGFiZWw6ICdwYXN0ZSBsYWJlbCd9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50Lm5hdGl2ZUV2ZW50LmFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjdXQnOlxuICAgICAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ2N1dCBhY3Rpb24gc3VjY2VzcycpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29weSc6XG4gICAgICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAnY29weSBhY3Rpb24gc3VjY2VzcycpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncGFzdGUnOlxuICAgICAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ3Bhc3RlIGFjdGlvbiBzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IEFsZXJ0LmFsZXJ0KCdCdXR0b24gaGFzIGJlZW4gcHJlc3NlZCEnKX1cbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgICAgPFRleHQ+Q2xpY2sgbWU8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2s+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIkJ1dHRvbiB3aXRoIGFjY2Vzc2liaWxpdHkgYWN0aW9uc1wiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz17W1xuICAgICAgICAgICAgICB7bmFtZTogJ2FjdGl2YXRlJywgbGFiZWw6ICdhY3RpdmF0ZSBsYWJlbCd9LFxuICAgICAgICAgICAgICB7bmFtZTogJ2NvcHknLCBsYWJlbDogJ2NvcHkgbGFiZWwnfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudC5uYXRpdmVFdmVudC5hY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYWN0aXZhdGUnOlxuICAgICAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ0FjdGl2YXRlIGFjY2Vzc2liaWxpdHkgYWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjb3B5JzpcbiAgICAgICAgICAgICAgICAgIEFsZXJ0LmFsZXJ0KCdBbGVydCcsICdjb3B5IGFjdGlvbiBzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IEFsZXJ0LmFsZXJ0KCdCdXR0b24gaGFzIGJlZW4gcHJlc3NlZCEnKX1cbiAgICAgICAgICAgIHRpdGxlPVwiQnV0dG9uIHdpdGggYWNjZXNzaWJpbGl0eSBhY3Rpb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIlRleHQgd2l0aCBjdXN0b20gYWNjZXNzaWJpbGl0eSBhY3Rpb25zXCI+XG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz17W1xuICAgICAgICAgICAgICB7bmFtZTogJ2FjdGl2YXRlJywgbGFiZWw6ICdhY3RpdmF0ZSBsYWJlbCd9LFxuICAgICAgICAgICAgICB7bmFtZTogJ2NvcHknLCBsYWJlbDogJ2NvcHkgbGFiZWwnfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudC5uYXRpdmVFdmVudC5hY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYWN0aXZhdGUnOlxuICAgICAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ0FjdGl2YXRlIGFjY2Vzc2liaWxpdHkgYWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjb3B5JzpcbiAgICAgICAgICAgICAgICAgIEFsZXJ0LmFsZXJ0KCdBbGVydCcsICdjb3B5IGFjdGlvbiBzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICBUZXh0XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG50eXBlIEZha2VTbGlkZXJFeGFtcGxlU3RhdGUgPSB7XG4gIGN1cnJlbnQ6IG51bWJlcixcbiAgdGV4dHVhbFZhbHVlOiAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCcsXG59O1xuY2xhc3MgRmFrZVNsaWRlckV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30sIEZha2VTbGlkZXJFeGFtcGxlU3RhdGU+IHtcbiAgc3RhdGU6IEZha2VTbGlkZXJFeGFtcGxlU3RhdGUgPSB7XG4gICAgY3VycmVudDogNTAsXG4gICAgdGV4dHVhbFZhbHVlOiAnY2VudGVyJyxcbiAgfTtcblxuICBpbmNyZW1lbnQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgbGV0IG5ld1ZhbHVlID0gdGhpcy5zdGF0ZS5jdXJyZW50ICsgMjtcbiAgICBpZiAobmV3VmFsdWUgPiAxMDApIHtcbiAgICAgIG5ld1ZhbHVlID0gMTAwO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGN1cnJlbnQ6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIGRlY3JlbWVudDogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLnN0YXRlLmN1cnJlbnQgLSAyO1xuICAgIGlmIChuZXdWYWx1ZSA8IDApIHtcbiAgICAgIG5ld1ZhbHVlID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjdXJyZW50OiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiRmFrZSBTbGlkZXJcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYWRqdXN0YWJsZVwiXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e1t7bmFtZTogJ2luY3JlbWVudCd9LCB7bmFtZTogJ2RlY3JlbWVudCd9XX1cbiAgICAgICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQubmF0aXZlRXZlbnQuYWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICBjYXNlICdpbmNyZW1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlY3JlbWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlWYWx1ZT17e1xuICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgbm93OiB0aGlzLnN0YXRlLmN1cnJlbnQsXG4gICAgICAgICAgICBtYXg6IDEwMCxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8VGV4dD5GYWtlIFNsaWRlcjwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrXG4gICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJFcXVhbGl6ZXJcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYWRqdXN0YWJsZVwiXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e1t7bmFtZTogJ2luY3JlbWVudCd9LCB7bmFtZTogJ2RlY3JlbWVudCd9XX1cbiAgICAgICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQubmF0aXZlRXZlbnQuYWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICBjYXNlICdpbmNyZW1lbnQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnRleHR1YWxWYWx1ZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHR1YWxWYWx1ZTogJ3JpZ2h0J30pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS50ZXh0dWFsVmFsdWUgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGV4dHVhbFZhbHVlOiAnY2VudGVyJ30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGVjcmVtZW50JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS50ZXh0dWFsVmFsdWUgPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0ZXh0dWFsVmFsdWU6ICdsZWZ0J30pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS50ZXh0dWFsVmFsdWUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHR1YWxWYWx1ZTogJ2NlbnRlcid9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5VmFsdWU9e3t0ZXh0OiB0aGlzLnN0YXRlLnRleHR1YWxWYWx1ZX19PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFRleHQ+RXF1YWxpemVyPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2s+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBGYWtlU2xpZGVyRXhhbXBsZUZvckFjY2Vzc2liaWxpdHlWYWx1ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAge30sXG4gIEZha2VTbGlkZXJFeGFtcGxlU3RhdGUsXG4+IHtcbiAgc3RhdGU6IEZha2VTbGlkZXJFeGFtcGxlU3RhdGUgPSB7XG4gICAgY3VycmVudDogNTAsXG4gICAgdGV4dHVhbFZhbHVlOiAnY2VudGVyJyxcbiAgfTtcblxuICBpbmNyZW1lbnQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgbGV0IG5ld1ZhbHVlID0gdGhpcy5zdGF0ZS5jdXJyZW50ICsgMjtcbiAgICBpZiAobmV3VmFsdWUgPiAxMDApIHtcbiAgICAgIG5ld1ZhbHVlID0gMTAwO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGN1cnJlbnQ6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIGRlY3JlbWVudDogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLnN0YXRlLmN1cnJlbnQgLSAyO1xuICAgIGlmIChuZXdWYWx1ZSA8IDApIHtcbiAgICAgIG5ld1ZhbHVlID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjdXJyZW50OiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiRmFrZSBTbGlkZXJcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYWRqdXN0YWJsZVwiXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e1t7bmFtZTogJ2luY3JlbWVudCd9LCB7bmFtZTogJ2RlY3JlbWVudCd9XX1cbiAgICAgICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQubmF0aXZlRXZlbnQuYWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICBjYXNlICdpbmNyZW1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlY3JlbWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIGFyaWEtdmFsdWVtYXg9ezEwMH1cbiAgICAgICAgICBhcmlhLXZhbHVlbWluPXswfVxuICAgICAgICAgIGFyaWEtdmFsdWV0ZXh0PXsnc2xpZGVyIGFyaWEgdmFsdWUgdGV4dCd9XG4gICAgICAgICAgYXJpYS12YWx1ZW5vdz17dGhpcy5zdGF0ZS5jdXJyZW50fT5cbiAgICAgICAgICA8VGV4dD5GYWtlIFNsaWRlcjwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrXG4gICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJFcXVhbGl6ZXJcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlSb2xlPVwiYWRqdXN0YWJsZVwiXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e1t7bmFtZTogJ2luY3JlbWVudCd9LCB7bmFtZTogJ2RlY3JlbWVudCd9XX1cbiAgICAgICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQubmF0aXZlRXZlbnQuYWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICBjYXNlICdpbmNyZW1lbnQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnRleHR1YWxWYWx1ZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHR1YWxWYWx1ZTogJ3JpZ2h0J30pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS50ZXh0dWFsVmFsdWUgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGV4dHVhbFZhbHVlOiAnY2VudGVyJ30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGVjcmVtZW50JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS50ZXh0dWFsVmFsdWUgPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0ZXh0dWFsVmFsdWU6ICdsZWZ0J30pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS50ZXh0dWFsVmFsdWUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RleHR1YWxWYWx1ZTogJ2NlbnRlcid9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5VmFsdWU9e3t0ZXh0OiB0aGlzLnN0YXRlLnRleHR1YWxWYWx1ZX19PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFRleHQ+RXF1YWxpemVyPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2s+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBBbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30+IHtcbiAgX2hhbmRsZU9uUHJlc3MgPSAoKTogVGltZW91dElEID0+XG4gICAgc2V0VGltZW91dChcbiAgICAgICgpID0+IEFjY2Vzc2liaWxpdHlJbmZvLmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eSgnQW5ub3VuY2VtZW50IFRlc3QnKSxcbiAgICAgIDEwMDAsXG4gICAgKTtcblxuICBfaGFuZGxlT25QcmVzc1F1ZXVlZCA9ICgpOiBUaW1lb3V0SUQgPT5cbiAgICBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT5cbiAgICAgICAgQWNjZXNzaWJpbGl0eUluZm8uYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5V2l0aE9wdGlvbnMoXG4gICAgICAgICAgJ1F1ZXVlZCBBbm5vdW5jZW1lbnQgVGVzdCcsXG4gICAgICAgICAge3F1ZXVlOiB0cnVlfSxcbiAgICAgICAgKSxcbiAgICAgIDEwMDAsXG4gICAgKTtcblxuICBfaGFuZGxlT25QcmVzc1F1ZXVlTXVsdGlwbGUgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dChcbiAgICAgICgpID0+XG4gICAgICAgIEFjY2Vzc2liaWxpdHlJbmZvLmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eVdpdGhPcHRpb25zKFxuICAgICAgICAgICdGaXJzdCBRdWV1ZWQgQW5ub3VuY2VtZW50IFRlc3QnLFxuICAgICAgICAgIHtxdWV1ZTogdHJ1ZX0sXG4gICAgICAgICksXG4gICAgICAxMDAwLFxuICAgICk7XG4gICAgc2V0VGltZW91dChcbiAgICAgICgpID0+XG4gICAgICAgIEFjY2Vzc2liaWxpdHlJbmZvLmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eVdpdGhPcHRpb25zKFxuICAgICAgICAgICdTZWNvbmQgUXVldWVkIEFubm91bmNlbWVudCBUZXN0JyxcbiAgICAgICAgICB7cXVldWU6IHRydWV9LFxuICAgICAgICApLFxuICAgICAgMTEwMCxcbiAgICApO1xuICAgIHNldFRpbWVvdXQoXG4gICAgICAoKSA9PlxuICAgICAgICBBY2Nlc3NpYmlsaXR5SW5mby5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHlXaXRoT3B0aW9ucyhcbiAgICAgICAgICAnVGhpcmQgUXVldWVkIEFubm91bmNlbWVudCBUZXN0JyxcbiAgICAgICAgICB7cXVldWU6IHRydWV9LFxuICAgICAgICApLFxuICAgICAgMTIwMCxcbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gUGxhdGZvcm0uT1MgPT09ICdpb3MnID8gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXt0aGlzLl9oYW5kbGVPblByZXNzfVxuICAgICAgICAgIHRpdGxlPVwiQW5ub3VuY2UgZm9yIEFjY2Vzc2liaWxpdHkgSW1tZWRpYXRlbHlcIlxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17dGhpcy5faGFuZGxlT25QcmVzc1F1ZXVlZH1cbiAgICAgICAgICB0aXRsZT1cIkFubm91bmNlIGZvciBBY2Nlc3NpYmlsaXR5IFF1ZXVlZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXt0aGlzLl9oYW5kbGVPblByZXNzUXVldWVNdWx0aXBsZX1cbiAgICAgICAgICB0aXRsZT1cIkFubm91bmNlIGZvciBBY2Nlc3NpYmlsaXR5IFF1ZXVlIE11bHRpcGxlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApIDogKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXt0aGlzLl9oYW5kbGVPblByZXNzfVxuICAgICAgICAgIHRpdGxlPVwiQW5ub3VuY2UgZm9yIEFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gU2V0QWNjZXNzaWJpbGl0eUZvY3VzRXhhbXBsZShwcm9wczoge30pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgbXlSZWYgPSBSZWFjdC51c2VSZWY8P1JlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFRleHQ+PihudWxsKTtcblxuICBjb25zdCBvblByZXNzID0gKCkgPT4ge1xuICAgIGlmIChteVJlZiAmJiBteVJlZi5jdXJyZW50KSB7XG4gICAgICBBY2Nlc3NpYmlsaXR5SW5mby5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KG15UmVmLmN1cnJlbnQsICdmb2N1cycpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFRleHQgcmVmPXtteVJlZn0+XG4gICAgICAgIFNldEFjY2Vzc2liaWxpdHlGb2N1cyBvbiBuYXRpdmUgZWxlbWVudC4gVGhpcyBzaG91bGQgZ2V0IGZvY3VzIGFmdGVyXG4gICAgICAgIGNsaWNraW5nIHRoZSBidXR0b24hXG4gICAgICA8L1RleHQ+XG4gICAgICA8QnV0dG9uIHRpdGxlPXsnQ2xpY2snfSBvblByZXNzPXtvblByZXNzfSAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY2xhc3MgRW5hYmxlZEV4YW1wbGVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHt9PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zZWN0aW9uQ29udGFpbmVyfT5cbiAgICAgICAge1BsYXRmb3JtLk9TID09PSAnaW9zJyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJpc0JvbGRUZXh0RW5hYmxlZCgpXCI+XG4gICAgICAgICAgICAgIDxFbmFibGVkRXhhbXBsZVxuICAgICAgICAgICAgICAgIHRlc3Q9XCJib2xkIHRleHRcIlxuICAgICAgICAgICAgICAgIGV2ZW50TGlzdGVuZXI9XCJib2xkVGV4dENoYW5nZWRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJpc0dyYXlTY2FsZUVuYWJsZWQoKVwiPlxuICAgICAgICAgICAgICA8RW5hYmxlZEV4YW1wbGVcbiAgICAgICAgICAgICAgICB0ZXN0PVwiZ3JheSBzY2FsZVwiXG4gICAgICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcj1cImdyYXlzY2FsZUNoYW5nZWRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJpc0ludmVydENvbG9yc0VuYWJsZWQoKVwiPlxuICAgICAgICAgICAgICA8RW5hYmxlZEV4YW1wbGVcbiAgICAgICAgICAgICAgICB0ZXN0PVwiaW52ZXJ0IGNvbG9yc1wiXG4gICAgICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcj1cImludmVydENvbG9yc0NoYW5nZWRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJpc1JlZHVjZVRyYW5zcGFyZW5jeUVuYWJsZWQoKVwiPlxuICAgICAgICAgICAgICA8RW5hYmxlZEV4YW1wbGVcbiAgICAgICAgICAgICAgICB0ZXN0PVwicmVkdWNlIHRyYW5zcGFyZW5jeVwiXG4gICAgICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcj1cInJlZHVjZVRyYW5zcGFyZW5jeUNoYW5nZWRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7UGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJyA/IChcbiAgICAgICAgICA8Uk5UZXN0ZXJCbG9ja1xuICAgICAgICAgICAgdGl0bGU9XCJpc0FjY2Vzc2liaWxpdHlTZXJ2aWNlRW5hYmxlZCgpXCJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtcbiAgICAgICAgICAgICAgJ0V2ZW50IGVtaXR0ZWQgd2hlbmV2ZXIgYW4gYWNjZXNzaWJpbGl0eSBzZXJ2aWNlIGlzIGVuYWJsZWQuIFRoaXMgaW5jbHVkZXMgVGFsa0JhY2sgYXMgd2VsbCBhcyBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIHN1Y2ggYXMgXCJTZWxlY3QgdG8gU3BlYWtcIi4nXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgPEVuYWJsZWRFeGFtcGxlXG4gICAgICAgICAgICAgIHRlc3Q9XCJhbnkgYWNjZXNzaWJpbGl0eSBzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcj1cImFjY2Vzc2liaWxpdHlTZXJ2aWNlQ2hhbmdlZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJpc1JlZHVjZU1vdGlvbkVuYWJsZWQoKVwiPlxuICAgICAgICAgIDxFbmFibGVkRXhhbXBsZVxuICAgICAgICAgICAgdGVzdD1cInJlZHVjZSBtb3Rpb25cIlxuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcj1cInJlZHVjZU1vdGlvbkNoYW5nZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cImlzU2NyZWVuUmVhZGVyRW5hYmxlZCgpXCI+XG4gICAgICAgICAgPEVuYWJsZWRFeGFtcGxlXG4gICAgICAgICAgICB0ZXN0PVwic2NyZWVuIHJlYWRlclwiXG4gICAgICAgICAgICBldmVudExpc3RlbmVyPVwic2NyZWVuUmVhZGVyQ2hhbmdlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgSW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eUV4YW1wbGVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHt9PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zZWN0aW9uQ29udGFpbmVyfT5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJJbWFnZUJhY2tncm91bmQgd2l0aCBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PW5vLWhpZGUtZGVzY2VuZGFudHNcIj5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICA8SW1hZ2VCYWNrZ3JvdW5kXG4gICAgICAgICAgICAgIGltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9XCJuby1oaWRlLWRlc2NlbmRhbnRzXCJcbiAgICAgICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvdHJlZXMuanBnJyl9XG4gICAgICAgICAgICAgIHJlc2l6ZU1vZGU9XCJjb3ZlclwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuSW1hZ2VCYWNrZ3JvdW5kfT5cbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5ub3QgYWNjZXNzaWJsZTwvVGV4dD5cbiAgICAgICAgICAgIDwvSW1hZ2VCYWNrZ3JvdW5kPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIkltYWdlQmFja2dyb3VuZCB3aXRoIGltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9bm9cIj5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICA8SW1hZ2VCYWNrZ3JvdW5kXG4gICAgICAgICAgICAgIGltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9XCJub1wiXG4gICAgICAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL3RyZWVzLmpwZycpfVxuICAgICAgICAgICAgICByZXNpemVNb2RlPVwiY292ZXJcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLkltYWdlQmFja2dyb3VuZH0+XG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+YWNjZXNzaWJsZTwvVGV4dD5cbiAgICAgICAgICAgIDwvSW1hZ2VCYWNrZ3JvdW5kPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIkJ1dHRvbiB3aXRoIGltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9bm9cIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInRoaXMgaXMgdGV4dFwiXG4gICAgICAgICAgICBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PVwibm9cIlxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gY29uc29sZS5sb2coJ3ByZXNzZWQnKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBFbmFibGVkRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAge1xuICAgIGV2ZW50TGlzdGVuZXI6XG4gICAgICB8ICdyZWR1Y2VNb3Rpb25DaGFuZ2VkJ1xuICAgICAgfCAnYm9sZFRleHRDaGFuZ2VkJ1xuICAgICAgfCAnZ3JheXNjYWxlQ2hhbmdlZCdcbiAgICAgIHwgJ2ludmVydENvbG9yc0NoYW5nZWQnXG4gICAgICB8ICdyZWR1Y2VUcmFuc3BhcmVuY3lDaGFuZ2VkJ1xuICAgICAgfCAncmVkdWNlTW90aW9uQ2hhbmdlZCdcbiAgICAgIHwgJ3NjcmVlblJlYWRlckNoYW5nZWQnXG4gICAgICB8ICdhY2Nlc3NpYmlsaXR5U2VydmljZUNoYW5nZWQnLFxuICAgIHRlc3Q6IHN0cmluZyxcbiAgfSxcbiAge1xuICAgIGlzRW5hYmxlZDogYm9vbGVhbixcbiAgfSxcbj4ge1xuICBzdGF0ZToge2lzRW5hYmxlZDogYm9vbGVhbn0gPSB7XG4gICAgaXNFbmFibGVkOiBmYWxzZSxcbiAgfTtcbiAgX3N1YnNjcmlwdGlvbjogRXZlbnRTdWJzY3JpcHRpb247XG4gIGNvbXBvbmVudERpZE1vdW50KCk6IG51bGwgfCBQcm9taXNlPG1peGVkPiB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gQWNjZXNzaWJpbGl0eUluZm8uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIHRoaXMucHJvcHMuZXZlbnRMaXN0ZW5lcixcbiAgICAgIHRoaXMuX2hhbmRsZVRvZ2dsZWQsXG4gICAgKTtcblxuICAgIHN3aXRjaCAodGhpcy5wcm9wcy5ldmVudExpc3RlbmVyKSB7XG4gICAgICBjYXNlICdyZWR1Y2VNb3Rpb25DaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlJbmZvLmlzUmVkdWNlTW90aW9uRW5hYmxlZCgpLnRoZW4oc3RhdGUgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzRW5hYmxlZDogc3RhdGV9KTtcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhY2Nlc3NpYmlsaXR5U2VydmljZUNoYW5nZWQnOlxuICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eUluZm8uaXNBY2Nlc3NpYmlsaXR5U2VydmljZUVuYWJsZWQoKS50aGVuKHN0YXRlID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtpc0VuYWJsZWQ6IHN0YXRlfSk7XG4gICAgICAgIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uPy5yZW1vdmUoKTtcbiAgfVxuXG4gIF9oYW5kbGVUb2dnbGVkID0gKGlzRW5hYmxlZDogdm9pZCB8IFByZXNzRXZlbnQgfCBib29sZWFuKSA9PiB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNFbmFibGVkOiB0cnVlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2lzRW5hYmxlZDogZmFsc2V9KTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgVGhlIHt0aGlzLnByb3BzLnRlc3R9IGlzeycgJ31cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5pc0VuYWJsZWQgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0aXRsZT17dGhpcy5zdGF0ZS5pc0VuYWJsZWQgPyAnZGlzYWJsZScgOiAnZW5hYmxlJ31cbiAgICAgICAgICBvblByZXNzPXt0aGlzLl9oYW5kbGVUb2dnbGVkfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgRGlzcGxheU9wdGlvbnNTdGF0dXNFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHt9PiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBpc0FuZHJvaWQgPSBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnO1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPERpc3BsYXlPcHRpb25TdGF0dXNFeGFtcGxlXG4gICAgICAgICAgb3B0aW9uTmFtZT17J1JlZHVjZSBNb3Rpb24nfVxuICAgICAgICAgIG9wdGlvbkNoZWNrZXI9e0FjY2Vzc2liaWxpdHlJbmZvLmlzUmVkdWNlTW90aW9uRW5hYmxlZH1cbiAgICAgICAgICBub3RpZmljYXRpb249eydyZWR1Y2VNb3Rpb25DaGFuZ2VkJ31cbiAgICAgICAgLz5cbiAgICAgICAgPERpc3BsYXlPcHRpb25TdGF0dXNFeGFtcGxlXG4gICAgICAgICAgb3B0aW9uTmFtZT17J1ByZWZlciBDcm9zcy1GYWRlIFRyYW5zaXRpb25zJ31cbiAgICAgICAgICBvcHRpb25DaGVja2VyPXtBY2Nlc3NpYmlsaXR5SW5mby5wcmVmZXJzQ3Jvc3NGYWRlVHJhbnNpdGlvbnN9XG4gICAgICAgICAgbm90aWZpY2F0aW9uPXsncHJlZmVyc0Nyb3NzRmFkZVRyYW5zaXRpb25zQ2hhbmdlZCd9XG4gICAgICAgIC8+XG4gICAgICAgIDxEaXNwbGF5T3B0aW9uU3RhdHVzRXhhbXBsZVxuICAgICAgICAgIG9wdGlvbk5hbWU9eydTY3JlZW4gUmVhZGVyJ31cbiAgICAgICAgICBvcHRpb25DaGVja2VyPXtBY2Nlc3NpYmlsaXR5SW5mby5pc1NjcmVlblJlYWRlckVuYWJsZWR9XG4gICAgICAgICAgbm90aWZpY2F0aW9uPXsnc2NyZWVuUmVhZGVyQ2hhbmdlZCd9XG4gICAgICAgIC8+XG4gICAgICAgIHtpc0FuZHJvaWQgPyBudWxsIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RGlzcGxheU9wdGlvblN0YXR1c0V4YW1wbGVcbiAgICAgICAgICAgICAgb3B0aW9uTmFtZT17J0JvbGQgVGV4dCd9XG4gICAgICAgICAgICAgIG9wdGlvbkNoZWNrZXI9e0FjY2Vzc2liaWxpdHlJbmZvLmlzQm9sZFRleHRFbmFibGVkfVxuICAgICAgICAgICAgICBub3RpZmljYXRpb249eydib2xkVGV4dENoYW5nZWQnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxEaXNwbGF5T3B0aW9uU3RhdHVzRXhhbXBsZVxuICAgICAgICAgICAgICBvcHRpb25OYW1lPXsnR3JheXNjYWxlJ31cbiAgICAgICAgICAgICAgb3B0aW9uQ2hlY2tlcj17QWNjZXNzaWJpbGl0eUluZm8uaXNHcmF5c2NhbGVFbmFibGVkfVxuICAgICAgICAgICAgICBub3RpZmljYXRpb249eydncmF5c2NhbGVDaGFuZ2VkJ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8RGlzcGxheU9wdGlvblN0YXR1c0V4YW1wbGVcbiAgICAgICAgICAgICAgb3B0aW9uTmFtZT17J0ludmVydCBDb2xvcnMnfVxuICAgICAgICAgICAgICBvcHRpb25DaGVja2VyPXtBY2Nlc3NpYmlsaXR5SW5mby5pc0ludmVydENvbG9yc0VuYWJsZWR9XG4gICAgICAgICAgICAgIG5vdGlmaWNhdGlvbj17J2ludmVydENvbG9yc0NoYW5nZWQnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxEaXNwbGF5T3B0aW9uU3RhdHVzRXhhbXBsZVxuICAgICAgICAgICAgICBvcHRpb25OYW1lPXsnUmVkdWNlIFRyYW5zcGFyZW5jeSd9XG4gICAgICAgICAgICAgIG9wdGlvbkNoZWNrZXI9e0FjY2Vzc2liaWxpdHlJbmZvLmlzUmVkdWNlVHJhbnNwYXJlbmN5RW5hYmxlZH1cbiAgICAgICAgICAgICAgbm90aWZpY2F0aW9uPXsncmVkdWNlVHJhbnNwYXJlbmN5Q2hhbmdlZCd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gRGlzcGxheU9wdGlvblN0YXR1c0V4YW1wbGUoe1xuICBvcHRpb25OYW1lLFxuICBvcHRpb25DaGVja2VyLFxuICBub3RpZmljYXRpb24sXG59OiB7XG4gIG5vdGlmaWNhdGlvbjogc3RyaW5nLFxuICBvcHRpb25DaGVja2VyOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+LFxuICBvcHRpb25OYW1lOiBzdHJpbmcsXG59KSB7XG4gIGNvbnN0IFtzdGF0dXNFbmFibGVkLCBzZXRTdGF0dXNFbmFibGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IEFjY2Vzc2liaWxpdHlJbmZvLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG5vdGlmaWNhdGlvbixcbiAgICAgIHNldFN0YXR1c0VuYWJsZWQsXG4gICAgKTtcbiAgICAvLyAkRmxvd0ZpeE1lW3VudXNlZC1wcm9taXNlXVxuICAgIG9wdGlvbkNoZWNrZXIoKS50aGVuKGlzRW5hYmxlZCA9PiB7XG4gICAgICBzZXRTdGF0dXNFbmFibGVkKGlzRW5hYmxlZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICBsaXN0ZW5lci5yZW1vdmUoKTtcbiAgICB9O1xuICB9LCBbb3B0aW9uQ2hlY2tlciwgbm90aWZpY2F0aW9uXSk7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dD5cbiAgICAgICAge29wdGlvbk5hbWV9XG4gICAgICAgIHsnIGlzICd9XG4gICAgICAgIHtzdGF0dXNFbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ30uXG4gICAgICA8L1RleHQ+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5RXhwYW5kZWRFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbZXhwYW5kLCBzZXRFeHBhbmRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGV4cGFuZEFjdGlvbiA9IHtuYW1lOiAnZXhwYW5kJ307XG4gIGNvbnN0IGNvbGxhcHNlQWN0aW9uID0ge25hbWU6ICdjb2xsYXBzZSd9O1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VjdGlvbkNvbnRhaW5lcn0+XG4gICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIkNvbGxhcHNlL0V4cGFuZGVkIHN0YXRlIGNoYW5nZSAoUGFwZXIpXCI+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50IGFubm91bmNlcyBleHBhbmRlZC9jb2xsYXBzZWQgc3RhdGUgY29ycmVjdGx5XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldEV4cGFuZGVkKCFleHBhbmQpfVxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17e2V4cGFuZGVkOiBleHBhbmR9fVxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlBY3Rpb25zPXtleHBhbmQgPyBbY29sbGFwc2VBY3Rpb25dIDogW2V4cGFuZEFjdGlvbl19XG4gICAgICAgICAgb25BY2Nlc3NpYmlsaXR5QWN0aW9uPXtldmVudCA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50Lm5hdGl2ZUV2ZW50LmFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnZXhwYW5kJzpcbiAgICAgICAgICAgICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnY29sbGFwc2UnOlxuICAgICAgICAgICAgICAgIHNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIHRpdGxlPVwiY2xpY2sgbWUgdG8gY2hhbmdlIHN0YXRlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cblxuICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJTY3JlZW5yZWFkZXIgYW5ub3VuY2VzIHRoZSB2aXNpYmxlIHRleHRcIj5cbiAgICAgICAgPFRleHQ+QW5ub3VuY2luZyBleHBhbmRlZC9jb2xsYXBzZSBhbmQgdGhlIHZpc2libGUgdGV4dC48L1RleHQ+XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5idXR0b259XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gc2V0RXhwYW5kZWQoIWV4cGFuZCl9XG4gICAgICAgICAgYWNjZXNzaWJpbGl0eVN0YXRlPXt7ZXhwYW5kZWQ6IGV4cGFuZH19PlxuICAgICAgICAgIDxUZXh0PkNsaWNrIG1lIHRvIGNoYW5nZSBzdGF0ZTwvVGV4dD5cbiAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgPC9STlRlc3RlckJsb2NrPlxuXG4gICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cImV4cGFuZGVkL2NvbGxhcHNlZCBvbmx5IG1hbmFnZWQgdGhyb3VnaCB0aGUgYWNjZXNzaWJpbGl0eSBtZW51XCI+XG4gICAgICAgIDxUb3VjaGFibGVXaXRob3V0RmVlZGJhY2tcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5U3RhdGU9e3tleHBhbmRlZDogdHJ1ZX19XG4gICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX0+XG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICA8VGV4dD5DbGlja2luZyBtZSBkb2VzIG5vdCBjaGFuZ2Ugc3RhdGU8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZVdpdGhvdXRGZWVkYmFjaz5cbiAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmV4cG9ydHMudGl0bGUgPSAnQWNjZXNzaWJpbGl0eSc7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY2Nlc3NpYmlsaXR5aW5mbyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0V4YW1wbGVzIG9mIHVzaW5nIEFjY2Vzc2liaWxpdHkgQVBJcy4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnQWNjZXNzaWJpbGl0eSBleHBhbmRlZCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIEFjY2Vzc2liaWxpdHlFeHBhbmRlZEV4YW1wbGU+IHtcbiAgICAgIHJldHVybiA8QWNjZXNzaWJpbGl0eUV4cGFuZGVkRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBY2Nlc3NpYmlsaXR5IGVsZW1lbnRzJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgQWNjZXNzaWJpbGl0eUV4YW1wbGU+IHtcbiAgICAgIHJldHVybiA8QWNjZXNzaWJpbGl0eUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQXV0b21hdGljIENvbnRlbnQgR3JvdXBpbmcnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBBdXRvbWF0aWNDb250ZW50R3JvdXBpbmc+IHtcbiAgICAgIHJldHVybiA8QXV0b21hdGljQ29udGVudEdyb3VwaW5nIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ05ldyBhY2Nlc3NpYmlsaXR5IHJvbGVzIGFuZCBzdGF0ZXMnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBBY2Nlc3NpYmlsaXR5Um9sZUFuZFN0YXRlRXhhbXBsZT4ge1xuICAgICAgcmV0dXJuIDxBY2Nlc3NpYmlsaXR5Um9sZUFuZFN0YXRlRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBY2Nlc3NpYmlsaXR5IGFjdGlvbiBleGFtcGxlcycsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIEFjY2Vzc2liaWxpdHlBY3Rpb25zRXhhbXBsZT4ge1xuICAgICAgcmV0dXJuIDxBY2Nlc3NpYmlsaXR5QWN0aW9uc0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRmFrZSBTbGlkZXIgRXhhbXBsZScsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIEZha2VTbGlkZXJFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPEZha2VTbGlkZXJFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0Zha2UgU2xpZGVyRXhhbXBsZSBGb3IgQWNjZXNzaWJpbGl0eVZhbHVlJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgRmFrZVNsaWRlckV4YW1wbGVGb3JBY2Nlc3NpYmlsaXR5VmFsdWU+IHtcbiAgICAgIHJldHVybiA8RmFrZVNsaWRlckV4YW1wbGVGb3JBY2Nlc3NpYmlsaXR5VmFsdWUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ2hlY2sgaWYgdGhlIGRpc3BsYXkgb3B0aW9ucyBhcmUgZW5hYmxlZCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIERpc3BsYXlPcHRpb25zU3RhdHVzRXhhbXBsZT4ge1xuICAgICAgcmV0dXJuIDxEaXNwbGF5T3B0aW9uc1N0YXR1c0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ2hlY2sgaWYgdGhlIHNjcmVlbiByZWFkZXIgYW5ub3VuY2VzJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgQW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5PiB7XG4gICAgICByZXR1cm4gPEFubm91bmNlRm9yQWNjZXNzaWJpbGl0eSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDaGVjayBpZiBhY2Nlc3NpYmlsaXR5IGlzIGZvY3VzZWQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBTZXRBY2Nlc3NpYmlsaXR5Rm9jdXNFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPFNldEFjY2Vzc2liaWxpdHlGb2N1c0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ2hlY2sgaWYgdGhlc2UgcHJvcGVydGllcyBhcmUgZW5hYmxlZCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIEVuYWJsZWRFeGFtcGxlcz4ge1xuICAgICAgcmV0dXJuIDxFbmFibGVkRXhhbXBsZXMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVGVzdGluZyBpbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5JyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgSW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eUV4YW1wbGVzPiB7XG4gICAgICByZXR1cm4gPEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHlFeGFtcGxlcyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6XG4gICAgICAnQ2hlY2sgaWYgYWNjZXNzaWJpbGl0eVN0YXRlIGRpc2FibGVkIGlzIGFubm91bmNlZCB3aGVuIHRoZSBzY3JlZW5yZWFkZXIgZm9jdXMgbW92ZXMgb24gdGhlIGltYWdlJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgSW1hZ2U+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxJbWFnZVxuICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwicGxhaW4gbG9jYWwgaW1hZ2VcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlTdGF0ZT17e2Rpc2FibGVkOiB0cnVlfX1cbiAgICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy9saWtlLnBuZycpfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGlzYWJsZWRJbWFnZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVGV4dElucHV0IHdpdGggYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZVwiJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgVmlldz4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQgbmF0aXZlSUQ9XCJ0ZXN0QXJpYUxhYmVsbGVkQnlcIj5QaG9uZSBOdW1iZXI8L1RleHQ+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXsndGVzdEFyaWFMYWJlbGxlZEJ5J31cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVmYXVsdH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiIiwiIiwiIiwiIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7QWxlcnQsIFRleHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3x8fT47XG5jbGFzcyBBY2Nlc3NpYmlsaXR5SU9TRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgb25BY2Nlc3NpYmlsaXR5QWN0aW9uPXtldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuYWN0aW9uTmFtZSA9PT0gJ2FjdGl2YXRlJykge1xuICAgICAgICAgICAgICBBbGVydC5hbGVydCgnQWxlcnQnLCAnb25BY2Nlc3NpYmlsaXR5VGFwIHN1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e1t7bmFtZTogJ2FjdGl2YXRlJ31dfT5cbiAgICAgICAgICA8VGV4dD5BY2Nlc3NpYmlsaXR5IG5vcm1hbCB0YXAgZXhhbXBsZTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIG9uQWNjZXNzaWJpbGl0eUFjdGlvbj17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm5hdGl2ZUV2ZW50LmFjdGlvbk5hbWUgPT09ICdtYWdpY1RhcCcpIHtcbiAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ0FsZXJ0JywgJ29uTWFnaWNUYXAgc3VjY2VzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgYWNjZXNzaWJsZT17dHJ1ZX1cbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5QWN0aW9ucz17W3tuYW1lOiAnbWFnaWNUYXAnfV19PlxuICAgICAgICAgIDxUZXh0PkFjY2Vzc2liaWxpdHkgbWFnaWMgdGFwIGV4YW1wbGU8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBvbkFjY2Vzc2liaWxpdHlBY3Rpb249e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5uYXRpdmVFdmVudC5hY3Rpb25OYW1lID09PSAnZXNjYXBlJykge1xuICAgICAgICAgICAgICBBbGVydC5hbGVydCgnb25BY2Nlc3NpYmlsaXR5RXNjYXBlIHN1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIGFjY2Vzc2libGU9e3RydWV9XG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUFjdGlvbnM9e1t7bmFtZTogJ2VzY2FwZSd9XX0+XG4gICAgICAgICAgPFRleHQ+QWNjZXNzaWJpbGl0eSBlc2NhcGUgZXhhbXBsZTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VmlldyBhY2Nlc3NpYmlsaXR5RWxlbWVudHNIaWRkZW49e3RydWV9PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgVGhpcyB2aWV3J3MgY2hpbGRyZW4gYXJlIGhpZGRlbiBmcm9tIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWVcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXcgYWNjZXNzaWJsZT17dHJ1ZX0gYWNjZXNzaWJpbGl0eUxhbmd1YWdlPVwiaXQtSVRcIj5cbiAgICAgICAgICA8VGV4dD5UaGlzIHZpZXcncyBsYW5ndWFnZSBzaG91bGQgYmUgYGl0LUlUYDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnRzLnRpdGxlID0gJ0FjY2Vzc2liaWxpdHlJT1MnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdpT1Mgc3BlY2lmaWMgQWNjZXNzaWJpbGl0eSBBUElzJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ2lPUyBBY2Nlc3NpYmlsaXR5IGVsZW1lbnRzJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8QWNjZXNzaWJpbGl0eUlPU0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtOYXRpdmVNZXRob2RzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuXG5jb25zdCBTY3JlZW5zaG90TWFuYWdlciA9IHJlcXVpcmUoJy4uLy4uLy4uL05hdGl2ZU1vZHVsZUV4YW1wbGUvTmF0aXZlU2NyZWVuc2hvdE1hbmFnZXInKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQWN0aW9uU2hlZXRJT1MsXG4gIEFsZXJ0LFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBWaWV3LFxuICBmaW5kTm9kZUhhbmRsZSxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY29uc3QgQlVUVE9OUyA9IFsnT3B0aW9uIDAnLCAnT3B0aW9uIDEnLCAnT3B0aW9uIDInLCAnRGVsZXRlJywgJ0NhbmNlbCddO1xuY29uc3QgREVTVFJVQ1RJVkVfSU5ERVggPSAzO1xuY29uc3QgQ0FOQ0VMX0lOREVYID0gNDtcbmNvbnN0IERJU0FCTEVEX0JVVFRPTl9JTkRJQ0VTID0gWzEsIDJdO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8fH0+O1xudHlwZSBTdGF0ZSA9IHt8Y2xpY2tlZDogc3RyaW5nfH07XG5jbGFzcyBBY3Rpb25TaGVldEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICBjbGlja2VkOiAnbm9uZScsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQgb25QcmVzcz17dGhpcy5zaG93QWN0aW9uU2hlZXR9IHN0eWxlPXtzdHlsZS5idXR0b259PlxuICAgICAgICAgIENsaWNrIHRvIHNob3cgdGhlIEFjdGlvblNoZWV0XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQ+Q2xpY2tlZCBidXR0b246IHt0aGlzLnN0YXRlLmNsaWNrZWR9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBzaG93QWN0aW9uU2hlZXQgPSAoKSA9PiB7XG4gICAgQWN0aW9uU2hlZXRJT1Muc2hvd0FjdGlvblNoZWV0V2l0aE9wdGlvbnMoXG4gICAgICB7XG4gICAgICAgIG9wdGlvbnM6IEJVVFRPTlMsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkluZGV4OiBDQU5DRUxfSU5ERVgsXG4gICAgICAgIGRlc3RydWN0aXZlQnV0dG9uSW5kZXg6IERFU1RSVUNUSVZFX0lOREVYLFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbkluZGV4ID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2xpY2tlZDogQlVUVE9OU1tidXR0b25JbmRleF19KTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcbn1cblxuY2xhc3MgQWN0aW9uU2hlZXRUaW50RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJEZsb3dGaXhNZVByb3BzLFxuICAkRmxvd0ZpeE1lU3RhdGUsXG4+IHtcbiAgc3RhdGU6IGFueSB8IHtjbGlja2VkOiBzdHJpbmd9ID0ge1xuICAgIGNsaWNrZWQ6ICdub25lJyxcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VGV4dCBvblByZXNzPXt0aGlzLnNob3dBY3Rpb25TaGVldH0gc3R5bGU9e3N0eWxlLmJ1dHRvbn0+XG4gICAgICAgICAgQ2xpY2sgdG8gc2hvdyB0aGUgQWN0aW9uU2hlZXRcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD5DbGlja2VkIGJ1dHRvbjoge3RoaXMuc3RhdGUuY2xpY2tlZH08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIHNob3dBY3Rpb25TaGVldCA9ICgpID0+IHtcbiAgICBBY3Rpb25TaGVldElPUy5zaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgb3B0aW9uczogQlVUVE9OUyxcbiAgICAgICAgY2FuY2VsQnV0dG9uSW5kZXg6IENBTkNFTF9JTkRFWCxcbiAgICAgICAgZGVzdHJ1Y3RpdmVCdXR0b25JbmRleDogREVTVFJVQ1RJVkVfSU5ERVgsXG4gICAgICAgIHRpbnRDb2xvcjogJ2dyZWVuJyxcbiAgICAgIH0sXG4gICAgICBidXR0b25JbmRleCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NsaWNrZWQ6IEJVVFRPTlNbYnV0dG9uSW5kZXhdfSk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG59XG5cbmNsYXNzIEFjdGlvblNoZWV0Q2FuY2VsQnV0dG9uVGludEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gICRGbG93Rml4TWVQcm9wcyxcbiAgJEZsb3dGaXhNZVN0YXRlLFxuPiB7XG4gIHN0YXRlOiBhbnkgfCB7Y2xpY2tlZDogc3RyaW5nfSA9IHtcbiAgICBjbGlja2VkOiAnbm9uZScsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQgb25QcmVzcz17dGhpcy5zaG93QWN0aW9uU2hlZXR9IHN0eWxlPXtzdHlsZS5idXR0b259PlxuICAgICAgICAgIENsaWNrIHRvIHNob3cgdGhlIEFjdGlvblNoZWV0XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQ+Q2xpY2tlZCBidXR0b246IHt0aGlzLnN0YXRlLmNsaWNrZWR9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBzaG93QWN0aW9uU2hlZXQgPSAoKSA9PiB7XG4gICAgQWN0aW9uU2hlZXRJT1Muc2hvd0FjdGlvblNoZWV0V2l0aE9wdGlvbnMoXG4gICAgICB7XG4gICAgICAgIG9wdGlvbnM6IEJVVFRPTlMsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkluZGV4OiBDQU5DRUxfSU5ERVgsXG4gICAgICAgIGRlc3RydWN0aXZlQnV0dG9uSW5kZXg6IERFU1RSVUNUSVZFX0lOREVYLFxuICAgICAgICB0aW50Q29sb3I6ICdncmVlbicsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRpbnRDb2xvcjogJ2Jyb3duJyxcbiAgICAgIH0sXG4gICAgICBidXR0b25JbmRleCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NsaWNrZWQ6IEJVVFRPTlNbYnV0dG9uSW5kZXhdfSk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG59XG5cbmNsYXNzIEFjdGlvblNoZWV0QW5jaG9yRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJEZsb3dGaXhNZVByb3BzLFxuICAkRmxvd0ZpeE1lU3RhdGUsXG4+IHtcbiAgc3RhdGU6IGFueSB8IHtjbGlja2VkOiBzdHJpbmd9ID0ge1xuICAgIGNsaWNrZWQ6ICdub25lJyxcbiAgfTtcblxuICBhbmNob3JSZWY6IHtjdXJyZW50OiBudWxsIHwgJEV4YWN0PE5hdGl2ZU1ldGhvZHM+fSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZS5hbmNob3JSb3d9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZS5idXR0b259PlxuICAgICAgICAgICAgQ2xpY2sgdGhlcmUgdG8gc2hvdyB0aGUgQWN0aW9uU2hlZXQgLT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHRcbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMuc2hvd0FjdGlvblNoZWV0fVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlLmJ1dHRvbn1cbiAgICAgICAgICAgIHJlZj17dGhpcy5hbmNob3JSZWZ9PlxuICAgICAgICAgICAgSEVSRVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VGV4dD5DbGlja2VkIGJ1dHRvbjoge3RoaXMuc3RhdGUuY2xpY2tlZH08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIHNob3dBY3Rpb25TaGVldCA9ICgpID0+IHtcbiAgICBBY3Rpb25TaGVldElPUy5zaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgb3B0aW9uczogQlVUVE9OUyxcbiAgICAgICAgY2FuY2VsQnV0dG9uSW5kZXg6IENBTkNFTF9JTkRFWCxcbiAgICAgICAgZGVzdHJ1Y3RpdmVCdXR0b25JbmRleDogREVTVFJVQ1RJVkVfSU5ERVgsXG4gICAgICAgIGFuY2hvcjogdGhpcy5hbmNob3JSZWYuY3VycmVudFxuICAgICAgICAgID8gZmluZE5vZGVIYW5kbGUodGhpcy5hbmNob3JSZWYuY3VycmVudClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBidXR0b25JbmRleCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NsaWNrZWQ6IEJVVFRPTlNbYnV0dG9uSW5kZXhdfSk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG59XG5cbmNsYXNzIEFjdGlvblNoZWV0RGlzYWJsZWRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgY2xpY2tlZDogJ25vbmUnLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUZXh0IG9uUHJlc3M9e3RoaXMuc2hvd0FjdGlvblNoZWV0fSBzdHlsZT17c3R5bGUuYnV0dG9ufT5cbiAgICAgICAgICBDbGljayB0byBzaG93IHRoZSBBY3Rpb25TaGVldFxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0PkNsaWNrZWQgYnV0dG9uOiB7dGhpcy5zdGF0ZS5jbGlja2VkfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgc2hvd0FjdGlvblNoZWV0ID0gKCkgPT4ge1xuICAgIEFjdGlvblNoZWV0SU9TLnNob3dBY3Rpb25TaGVldFdpdGhPcHRpb25zKFxuICAgICAge1xuICAgICAgICBvcHRpb25zOiBCVVRUT05TLFxuICAgICAgICBjYW5jZWxCdXR0b25JbmRleDogQ0FOQ0VMX0lOREVYLFxuICAgICAgICBkZXN0cnVjdGl2ZUJ1dHRvbkluZGV4OiBERVNUUlVDVElWRV9JTkRFWCxcbiAgICAgICAgZGlzYWJsZWRCdXR0b25JbmRpY2VzOiBESVNBQkxFRF9CVVRUT05fSU5ESUNFUyxcbiAgICAgIH0sXG4gICAgICBidXR0b25JbmRleCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NsaWNrZWQ6IEJVVFRPTlNbYnV0dG9uSW5kZXhdfSk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG59XG5cbmNsYXNzIEFjdGlvblNoZWV0RGlzbWlzc0V4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQgb25QcmVzcz17dGhpcy5zaG93QW5kRGlzbWlzc0FjdGlvblNoZWV0fSBzdHlsZT17c3R5bGUuYnV0dG9ufT5cbiAgICAgICAgICBDbGljayB0byBzaG93IGFuZCBhdXRvbWF0aWNhbGx5IGRpc21pc3MgdGhlIEFjdGlvblNoZWV0IGFmdGVyIDNcbiAgICAgICAgICBzZWNvbmRzXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgc2hvd0FuZERpc21pc3NBY3Rpb25TaGVldCA9ICgpID0+IHtcbiAgICBBY3Rpb25TaGVldElPUy5zaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgb3B0aW9uczogQlVUVE9OUyxcbiAgICAgICAgY2FuY2VsQnV0dG9uSW5kZXg6IENBTkNFTF9JTkRFWCxcbiAgICAgICAgZGVzdHJ1Y3RpdmVCdXR0b25JbmRleDogREVTVFJVQ1RJVkVfSU5ERVgsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge30sXG4gICAgKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgQWN0aW9uU2hlZXRJT1MuZGlzbWlzc0FjdGlvblNoZWV0KCk7XG4gICAgfSwgMzAwMCk7XG4gIH07XG59XG5cbmNsYXNzIFNoYXJlQWN0aW9uU2hlZXRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAkRmxvd0ZpeE1lUHJvcHMsXG4gICRGbG93Rml4TWVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogYW55IHwge3RleHQ6IHN0cmluZ30gPSB7XG4gICAgdGV4dDogJycsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQgb25QcmVzcz17dGhpcy5zaG93U2hhcmVBY3Rpb25TaGVldH0gc3R5bGU9e3N0eWxlLmJ1dHRvbn0+XG4gICAgICAgICAgQ2xpY2sgdG8gc2hvdyB0aGUgU2hhcmUgQWN0aW9uU2hlZXRcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD57dGhpcy5zdGF0ZS50ZXh0fTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgc2hvd1NoYXJlQWN0aW9uU2hlZXQgPSAoKSA9PiB7XG4gICAgQWN0aW9uU2hlZXRJT1Muc2hvd1NoYXJlQWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgdXJsOiB0aGlzLnByb3BzLnVybCxcbiAgICAgICAgbWVzc2FnZTogJ21lc3NhZ2UgdG8gZ28gd2l0aCB0aGUgc2hhcmVkIHVybCcsXG4gICAgICAgIHN1YmplY3Q6ICdhIHN1YmplY3QgdG8gZ28gaW4gdGhlIGVtYWlsIGhlYWRpbmcnLFxuICAgICAgICBleGNsdWRlZEFjdGl2aXR5VHlwZXM6IFsnY29tLmFwcGxlLlVJS2l0LmFjdGl2aXR5LlBvc3RUb1R3aXR0ZXInXSxcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiBBbGVydC5hbGVydCgnRXJyb3InLCBlcnJvciksXG4gICAgICAoY29tcGxldGVkLCBtZXRob2QpID0+IHtcbiAgICAgICAgbGV0IHRleHQ7XG4gICAgICAgIGlmIChjb21wbGV0ZWQpIHtcbiAgICAgICAgICB0ZXh0ID0gYFNoYXJlZCB2aWEgJHttZXRob2R9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gXCJZb3UgZGlkbid0IHNoYXJlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGV4dH0pO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xufVxuXG5jbGFzcyBTaGFyZVNjcmVlbnNob3RFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAkRmxvd0ZpeE1lUHJvcHMsXG4gICRGbG93Rml4TWVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogYW55IHwge3RleHQ6IHN0cmluZ30gPSB7XG4gICAgdGV4dDogJycsXG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQgb25QcmVzcz17dGhpcy5zaG93U2hhcmVBY3Rpb25TaGVldH0gc3R5bGU9e3N0eWxlLmJ1dHRvbn0+XG4gICAgICAgICAgQ2xpY2sgdG8gc2hvdyB0aGUgU2hhcmUgQWN0aW9uU2hlZXRcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD57dGhpcy5zdGF0ZS50ZXh0fTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgc2hvd1NoYXJlQWN0aW9uU2hlZXQgPSAoKSA9PiB7XG4gICAgLy8gVGFrZSB0aGUgc25hcHNob3QgKHJldHVybnMgYSB0ZW1wIGZpbGUgdXJpKVxuICAgIFNjcmVlbnNob3RNYW5hZ2VyLnRha2VTY3JlZW5zaG90KCd3aW5kb3cnKVxuICAgICAgLnRoZW4odXJpID0+IHtcbiAgICAgICAgLy8gU2hhcmUgaW1hZ2UgZGF0YVxuICAgICAgICBBY3Rpb25TaGVldElPUy5zaG93U2hhcmVBY3Rpb25TaGVldFdpdGhPcHRpb25zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgZXhjbHVkZWRBY3Rpdml0eVR5cGVzOiBbJ2NvbS5hcHBsZS5VSUtpdC5hY3Rpdml0eS5Qb3N0VG9Ud2l0dGVyJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvciA9PiBBbGVydC5hbGVydCgnRXJyb3InLCBlcnJvciksXG4gICAgICAgICAgKGNvbXBsZXRlZCwgbWV0aG9kKSA9PiB7XG4gICAgICAgICAgICBsZXQgdGV4dDtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IGBTaGFyZWQgdmlhICR7bWV0aG9kfWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0ZXh0ID0gXCJZb3UgZGlkbid0IHNoYXJlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0ZXh0fSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4gQWxlcnQuYWxlcnQoJ0Vycm9yJywgZXJyb3IpKTtcbiAgfTtcbn1cblxuY2xhc3MgU2hhcmVTY3JlZW5zaG90QW5jaG9yRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJEZsb3dGaXhNZVByb3BzLFxuICAkRmxvd0ZpeE1lU3RhdGUsXG4+IHtcbiAgc3RhdGU6IGFueSB8IHt0ZXh0OiBzdHJpbmd9ID0ge1xuICAgIHRleHQ6ICcnLFxuICB9O1xuXG4gIGFuY2hvclJlZjoge2N1cnJlbnQ6IG51bGwgfCAkRXhhY3Q8TmF0aXZlTWV0aG9kcz59ID0gUmVhY3QuY3JlYXRlUmVmKCk7XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlLmFuY2hvclJvd30+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlLmJ1dHRvbn0+XG4gICAgICAgICAgICBDbGljayB0byBzaG93IHRoZSBTaGFyZSBBY3Rpb25TaGVldCAtPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy5zaG93U2hhcmVBY3Rpb25TaGVldH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZS5idXR0b259XG4gICAgICAgICAgICByZWY9e3RoaXMuYW5jaG9yUmVmfT5cbiAgICAgICAgICAgIEhFUkVcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFRleHQ+e3RoaXMuc3RhdGUudGV4dH08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIHNob3dTaGFyZUFjdGlvblNoZWV0ID0gKCkgPT4ge1xuICAgIC8vIFRha2UgdGhlIHNuYXBzaG90IChyZXR1cm5zIGEgdGVtcCBmaWxlIHVyaSlcbiAgICBTY3JlZW5zaG90TWFuYWdlci50YWtlU2NyZWVuc2hvdCgnd2luZG93JylcbiAgICAgIC50aGVuKHVyaSA9PiB7XG4gICAgICAgIC8vIFNoYXJlIGltYWdlIGRhdGFcbiAgICAgICAgQWN0aW9uU2hlZXRJT1Muc2hvd1NoYXJlQWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmw6IHVyaSxcbiAgICAgICAgICAgIGV4Y2x1ZGVkQWN0aXZpdHlUeXBlczogWydjb20uYXBwbGUuVUlLaXQuYWN0aXZpdHkuUG9zdFRvVHdpdHRlciddLFxuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLmFuY2hvclJlZi5jdXJyZW50XG4gICAgICAgICAgICAgID8gZmluZE5vZGVIYW5kbGUodGhpcy5hbmNob3JSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvciA9PiBBbGVydC5hbGVydCgnRXJyb3InLCBlcnJvciksXG4gICAgICAgICAgKGNvbXBsZXRlZCwgbWV0aG9kKSA9PiB7XG4gICAgICAgICAgICBsZXQgdGV4dDtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IGBTaGFyZWQgdmlhICR7bWV0aG9kfWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0ZXh0ID0gXCJZb3UgZGlkbid0IHNoYXJlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0ZXh0fSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4gQWxlcnQuYWxlcnQoJ0Vycm9yJywgZXJyb3IpKTtcbiAgfTtcbn1cblxuY29uc3Qgc3R5bGUgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJ1dHRvbjoge1xuICAgIG1hcmdpbkJvdHRvbTogMTAsXG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gIH0sXG4gIGFuY2hvclJvdzoge1xuICAgIGZsZXg6IDEsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ0FjdGlvblNoZWV0SU9TJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnaU9TJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSBcIkludGVyZmFjZSB0byBzaG93IGlPUycgYWN0aW9uIHNoZWV0c1wiO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnU2hvdyBBY3Rpb24gU2hlZXQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxBY3Rpb25TaGVldEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hvdyBBY3Rpb24gU2hlZXQgd2l0aCB0aW50ZWQgYnV0dG9ucycsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEFjdGlvblNoZWV0VGludEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hvdyBBY3Rpb24gU2hlZXQgd2l0aCBjYW5jZWwgdGludGVkIGJ1dHRvbicsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEFjdGlvblNoZWV0Q2FuY2VsQnV0dG9uVGludEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hvdyBBY3Rpb24gU2hlZXQgd2l0aCBhbmNob3InLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxBY3Rpb25TaGVldEFuY2hvckV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hvdyBBY3Rpb24gU2hlZXQgd2l0aCBkaXNhYmxlZCBidXR0b25zJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8QWN0aW9uU2hlZXREaXNhYmxlZEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hvdyBBY3Rpb24gU2hlZXQgYW5kIGF1dG9tYXRpY2FsbHkgZGlzbWlzcyBpdCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEFjdGlvblNoZWV0RGlzbWlzc0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hvdyBTaGFyZSBBY3Rpb24gU2hlZXQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxTaGFyZUFjdGlvblNoZWV0RXhhbXBsZSB1cmw9XCJodHRwczovL2NvZGUuZmFjZWJvb2suY29tXCIgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hhcmUgTG9jYWwgSW1hZ2UnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxTaGFyZUFjdGlvblNoZWV0RXhhbXBsZSB1cmw9XCJidW5ueS5wbmdcIiAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTaGFyZSBTY3JlZW5zaG90JyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8U2hhcmVTY3JlZW5zaG90RXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTaGFyZSBmcm9tIEFuY2hvcicsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFNoYXJlU2NyZWVuc2hvdEFuY2hvckV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R1cmJvTW9kdWxlL1JDVEV4cG9ydCc7XG5pbXBvcnQgdHlwZSB7VW5zYWZlT2JqZWN0fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvZGVnZW5UeXBlcyc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UdXJib01vZHVsZS9UdXJib01vZHVsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IHR5cGUgU2NyZWVuc2hvdE1hbmFnZXJPcHRpb25zID0gVW5zYWZlT2JqZWN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMgZXh0ZW5kcyBUdXJib01vZHVsZSB7XG4gICtnZXRDb25zdGFudHM6ICgpID0+IHt8fH07XG4gIHRha2VTY3JlZW5zaG90KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogU2NyZWVuc2hvdE1hbmFnZXJPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz47XG59XG5cbmNvbnN0IE5hdGl2ZU1vZHVsZSA9IFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KCdTY3JlZW5zaG90TWFuYWdlcicpO1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VTY3JlZW5zaG90KFxuICBpZDogc3RyaW5nLFxuICBvcHRpb25zOiBTY3JlZW5zaG90TWFuYWdlck9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoTmF0aXZlTW9kdWxlICE9IG51bGwpIHtcbiAgICByZXR1cm4gTmF0aXZlTW9kdWxlLnRha2VTY3JlZW5zaG90KGlkLCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0FsZXJ0LCBQcmVzc2FibGUsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbi8vIFNob3dzIGxvZyBvbiB0aGUgc2NyZWVuXG5jb25zdCBMb2cgPSAoe21lc3NhZ2V9OiB7bWVzc2FnZTogc3RyaW5nfSkgPT5cbiAgbWVzc2FnZSA/IChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmxvZ0NvbnRhaW5lcn0+XG4gICAgICA8VGV4dD5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5ib2xkfT5Mb2c8L1RleHQ+OiB7bWVzc2FnZX1cbiAgICAgIDwvVGV4dD5cbiAgICA8L1ZpZXc+XG4gICkgOiBudWxsO1xuXG4vKipcbiAqIFNpbXBsZSBhbGVydCBleGFtcGxlcy5cbiAqL1xuXG5jb25zdCBBbGVydFdpdGhEZWZhdWx0QnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCBhbGVydE1lc3NhZ2UgPSAnQW4gZXh0ZXJuYWwgVVNCIGRyaXZlIGhhcyBiZWVuIGRldGVjdGVkISc7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgdGVzdElEPVwiYWxlcnQtd2l0aC1kZWZhdWx0LWJ1dHRvblwiXG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgb25QcmVzcz17KCkgPT4gQWxlcnQuYWxlcnQoJ0FsZXJ0JywgYWxlcnRNZXNzYWdlKX0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8VGV4dD5UYXAgdG8gdmlldyBhbGVydDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3QgQWxlcnRXaXRoVHdvQnV0dG9ucyA9ICgpID0+IHtcbiAgY29uc3QgW21lc3NhZ2UsIHNldE1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IGFsZXJ0TWVzc2FnZSA9ICdZb3VyIHN1YnNjcmlwdGlvbiBoYXMgZXhwaXJlZCEnO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICBBbGVydC5hbGVydCgnQWN0aW9uIFJlcXVpcmVkIScsIGFsZXJ0TWVzc2FnZSwgW1xuICAgICAgICAgICAge3RleHQ6ICdJZ25vcmUnLCBvblByZXNzOiAoKSA9PiBzZXRNZXNzYWdlKCdJZ25vcmUgUHJlc3NlZCEnKX0sXG4gICAgICAgICAgICB7dGV4dDogJ1JlbmV3Jywgb25QcmVzczogKCkgPT4gc2V0TWVzc2FnZSgnUmVuZXcgUHJlc3NlZCEnKX0sXG4gICAgICAgICAgXSlcbiAgICAgICAgfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgIDxUZXh0PlRhcCB0byB2aWV3IGFsZXJ0PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDxMb2cgbWVzc2FnZT17bWVzc2FnZX0gLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBBbGVydFdpdGhUaHJlZUJ1dHRvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IFttZXNzYWdlLCBzZXRNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcblxuICBjb25zdCBhbGVydE1lc3NhZ2UgPSAnRG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIGNoYW5nZXM/JztcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICB0ZXN0SUQ9XCJhbGVydC13aXRoLXRocmVlLWJ1dHRvbnNcIlxuICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgQWxlcnQuYWxlcnQoJ1Vuc2F2ZWQgQ2hhbmdlcyEnLCBhbGVydE1lc3NhZ2UsIFtcbiAgICAgICAgICAgIHt0ZXh0OiAnQ2FuY2VsJywgb25QcmVzczogKCkgPT4gc2V0TWVzc2FnZSgnQ2FuY2VsIFByZXNzZWQhJyl9LFxuICAgICAgICAgICAge3RleHQ6ICdObycsIG9uUHJlc3M6ICgpID0+IHNldE1lc3NhZ2UoJ05vIFByZXNzZWQhJyl9LFxuICAgICAgICAgICAge3RleHQ6ICdZZXMnLCBvblByZXNzOiAoKSA9PiBzZXRNZXNzYWdlKCdZZXMgUHJlc3NlZCEnKX0sXG4gICAgICAgICAgXSlcbiAgICAgICAgfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgIDxUZXh0PlRhcCB0byB2aWV3IGFsZXJ0PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDxMb2cgbWVzc2FnZT17bWVzc2FnZX0gLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBBbGVydFdpdGhNYW55QnV0dG9ucyA9ICgpID0+IHtcbiAgY29uc3QgW21lc3NhZ2UsIHNldE1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IGFsZXJ0TWVzc2FnZSA9XG4gICAgJ0NyZWRpYmx5IHJlaW50ZXJtZWRpYXRlIG5leHQtZ2VuZXJhdGlvbiBwb3RlbnRpYWxpdGllcyBhZnRlciBnb2FsLW9yaWVudGVkICcgK1xuICAgICdjYXRhbHlzdHMgZm9yIGNoYW5nZS4gRHluYW1pY2FsbHkgcmV2b2x1dGlvbml6ZS4nO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICBBbGVydC5hbGVydChcbiAgICAgICAgICAgICdGb28gVGl0bGUnLFxuICAgICAgICAgICAgYWxlcnRNZXNzYWdlLFxuICAgICAgICAgICAgJy4uLi4uLi4uLi4uLi4uJy5zcGxpdCgnJykubWFwKChkb3QsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICB0ZXh0OiAnQnV0dG9uICcgKyBpbmRleCxcbiAgICAgICAgICAgICAgb25QcmVzczogKCkgPT4gc2V0TWVzc2FnZShgQnV0dG9uICR7aW5kZXh9IFByZXNzZWQhYCksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgKVxuICAgICAgICB9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+VGFwIHRvIHZpZXcgYWxlcnQ8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPExvZyBtZXNzYWdlPXttZXNzYWdlfSAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IEFsZXJ0V2l0aENhbmNlbGFibGVUcnVlID0gKCkgPT4ge1xuICBjb25zdCBbbWVzc2FnZSwgc2V0TWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG5cbiAgY29uc3QgYWxlcnRNZXNzYWdlID0gJ1RhcHBpbmcgb3V0c2lkZSB0aGlzIGRpYWxvZyB3aWxsIGRpc21pc3MgdGhpcyBhbGVydC4nO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICBBbGVydC5hbGVydChcbiAgICAgICAgICAgICdBbGVydCBUaXRsZScsXG4gICAgICAgICAgICBhbGVydE1lc3NhZ2UsXG4gICAgICAgICAgICBbe3RleHQ6ICdPSycsIG9uUHJlc3M6ICgpID0+IHNldE1lc3NhZ2UoJ09LIFByZXNzZWQhJyl9XSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgb25EaXNtaXNzOiAoKSA9PlxuICAgICAgICAgICAgICAgIHNldE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAnVGhpcyBhbGVydCB3YXMgZGlzbWlzc2VkIGJ5IHRhcHBpbmcgb3V0c2lkZSBvZiB0aGUgYWxlcnQgZGlhbG9nLicsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+VGFwIHRvIHZpZXcgYWxlcnQ8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPExvZyBtZXNzYWdlPXttZXNzYWdlfSAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IEFsZXJ0V2l0aFN0eWxlcyA9ICgpID0+IHtcbiAgY29uc3QgW21lc3NhZ2UsIHNldE1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IGFsZXJ0TWVzc2FnZSA9ICdMb29rIGF0IHRoZSBidXR0b24gc3R5bGVzISc7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgIEFsZXJ0LmFsZXJ0KCdTdHlsZWQgQnV0dG9ucyEnLCBhbGVydE1lc3NhZ2UsIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dDogJ0RlZmF1bHQnLFxuICAgICAgICAgICAgICBvblByZXNzOiAoKSA9PiBzZXRNZXNzYWdlKCdEZWZhdWx0IFByZXNzZWQhJyksXG4gICAgICAgICAgICAgIHN0eWxlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgICAgICAgb25QcmVzczogKCkgPT4gc2V0TWVzc2FnZSgnQ2FuY2VsIFByZXNzZWQhJyksXG4gICAgICAgICAgICAgIHN0eWxlOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHQ6ICdEZXN0cnVjdGl2ZScsXG4gICAgICAgICAgICAgIG9uUHJlc3M6ICgpID0+IHNldE1lc3NhZ2UoJ0Rlc3RydWN0aXZlIFByZXNzZWQhJyksXG4gICAgICAgICAgICAgIHN0eWxlOiAnZGVzdHJ1Y3RpdmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKVxuICAgICAgICB9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+VGFwIHRvIHZpZXcgYWxlcnQ8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPExvZyBtZXNzYWdlPXttZXNzYWdlfSAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IEFsZXJ0V2l0aFN0eWxlc1ByZWZlcnJlZCA9ICgpID0+IHtcbiAgY29uc3QgW21lc3NhZ2UsIHNldE1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IGFsZXJ0TWVzc2FnZSA9XG4gICAgXCJUaGUgUHJlZmVycmVkIGJ1dHRvbiBpcyBzdHlsZWQgd2l0aCAncHJlZmVycmVkJywgc28gaXQgaXMgZW1waGFzaXplZCBvdmVyIHRoZSBjYW5jZWwgYnV0dG9uLlwiO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICBBbGVydC5hbGVydCgnRm9vIFRpdGxlJywgYWxlcnRNZXNzYWdlLCBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHQ6ICdQcmVmZXJyZWQnLFxuICAgICAgICAgICAgICBpc1ByZWZlcnJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgb25QcmVzczogKCkgPT4gc2V0TWVzc2FnZSgnUHJlZmVycmVkIFByZXNzZWQhJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgICAgICAgc3R5bGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgICBvblByZXNzOiAoKSA9PiBzZXRNZXNzYWdlKCdDYW5jZWwgUHJlc3NlZCEnKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSlcbiAgICAgICAgfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgIDxUZXh0PlRhcCB0byB2aWV3IGFsZXJ0PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDxMb2cgbWVzc2FnZT17bWVzc2FnZX0gLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBQcm9tcHRPcHRpb25zID0gKCkgPT4ge1xuICBjb25zdCBbcHJvbXB0VmFsdWUsIHNldFByb21wdFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4oJycpO1xuXG4gIGNvbnN0IGN1c3RvbUJ1dHRvbnMgPSBbXG4gICAge1xuICAgICAgdGV4dDogJ0N1c3RvbSBPSycsXG4gICAgICBvblByZXNzOiBzZXRQcm9tcHRWYWx1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRleHQ6ICdDdXN0b20gQ2FuY2VsJyxcbiAgICAgIHN0eWxlOiAnY2FuY2VsJyxcbiAgICB9LFxuICBdO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnByb21wdFZhbHVlfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5ib2xkfT5Qcm9tcHQgdmFsdWU6PC9UZXh0PiB7cHJvbXB0VmFsdWV9XG4gICAgICA8L1RleHQ+XG5cbiAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICBvblByZXNzPXsoKSA9PiBBbGVydC5wcm9tcHQoJ1R5cGUgYSB2YWx1ZScsIG51bGwsIHNldFByb21wdFZhbHVlKX0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8VGV4dD5wcm9tcHQgd2l0aCB0aXRsZSAmIGNhbGxiYWNrPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ByZXNzYWJsZT5cblxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgIG9uUHJlc3M9eygpID0+IEFsZXJ0LnByb21wdCgnVHlwZSBhIHZhbHVlJywgbnVsbCwgY3VzdG9tQnV0dG9ucyl9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+cHJvbXB0IHdpdGggdGl0bGUgJiBjdXN0b20gYnV0dG9uczwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9QcmVzc2FibGU+XG5cbiAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgc3R5bGU9e3N0eWxlcy53cmFwcGVyfVxuICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgIEFsZXJ0LnByb21wdChcbiAgICAgICAgICAgICdUeXBlIGEgcGhvbmUgbnVtYmVyJyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgJ3BsYWluLXRleHQnLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Bob25lLXBhZCcsXG4gICAgICAgICAgKVxuICAgICAgICB9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+cHJvbXB0IHdpdGggdGl0bGUgJiBjdXN0b20ga2V5Ym9hcmQ8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuXG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICBBbGVydC5wcm9tcHQoXG4gICAgICAgICAgICAnVHlwZSBhIHZhbHVlJyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBzZXRQcm9tcHRWYWx1ZSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdEZWZhdWx0IHZhbHVlJyxcbiAgICAgICAgICApXG4gICAgICAgIH0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8VGV4dD5wcm9tcHQgd2l0aCB0aXRsZSwgY2FsbGJhY2sgJiBkZWZhdWx0IHZhbHVlPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ByZXNzYWJsZT5cblxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgQWxlcnQucHJvbXB0KFxuICAgICAgICAgICAgJ1R5cGUgYSB2YWx1ZScsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgY3VzdG9tQnV0dG9ucyxcbiAgICAgICAgICAgICdsb2dpbi1wYXNzd29yZCcsXG4gICAgICAgICAgICAnYWRtaW5Ac2l0ZS5jb20nLFxuICAgICAgICAgIClcbiAgICAgICAgfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgcHJvbXB0IHdpdGggdGl0bGUsIGN1c3RvbSBidXR0b25zLCBsb2dpbi9wYXNzd29yZCAmIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IFByb21wdFR5cGVzID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgIG9uUHJlc3M9eygpID0+IEFsZXJ0LnByb21wdCgnUGxhaW4gVGV4dCBFbnRyeScpfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgIDxUZXh0PnBsYWluLXRleHQ8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgIG9uUHJlc3M9eygpID0+IEFsZXJ0LnByb21wdCgnU2VjdXJlIFRleHQnLCBudWxsLCBudWxsLCAnc2VjdXJlLXRleHQnKX0+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8VGV4dD5zZWN1cmUtdGV4dDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8UHJlc3NhYmxlXG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgb25QcmVzcz17KCkgPT5cbiAgICAgICAgICBBbGVydC5wcm9tcHQoJ0xvZ2luICYgUGFzc3dvcmQnLCBudWxsLCBudWxsLCAnbG9naW4tcGFzc3dvcmQnKVxuICAgICAgICB9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+bG9naW4tcGFzc3dvcmQ8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgd3JhcHBlcjoge1xuICAgIGJvcmRlclJhZGl1czogNSxcbiAgICBtYXJnaW5Cb3R0b206IDUsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWVlZWUnLFxuICAgIHBhZGRpbmc6IDEwLFxuICB9LFxuICBsb2dDb250YWluZXI6IHtcbiAgICBwYWRkaW5nVmVydGljYWw6IDgsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDUsXG4gIH0sXG4gIGJvbGQ6IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIHByb21wdFZhbHVlOiB7XG4gICAgbWFyZ2luQm90dG9tOiAxMCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ0FsZXJ0IHdpdGggZGVmYXVsdCBCdXR0b24nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJJdCBjYW4gYmUgdXNlZCB0byBzaG93IHNvbWUgaW5mb3JtYXRpb24gdG8gdXNlciB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBhbiBhY3Rpb24uXCIsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxBbGVydFdpdGhEZWZhdWx0QnV0dG9uIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0FsZXJ0IHdpdGggdHdvIEJ1dHRvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnSXQgY2FuIGJlIHVzZWQgd2hlbiBhbiBhY3Rpb24gaXMgcmVxdWlyZWQgZnJvbSB0aGUgdXNlci4nLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8QWxlcnRXaXRoVHdvQnV0dG9ucyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBbGVydCB3aXRoIHRocmVlIEJ1dHRvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnSXQgY2FuIGJlIHVzZWQgd2hlbiB0aGVyZSBhcmUgdGhyZWUgcG9zc2libGUgYWN0aW9ucycsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxBbGVydFdpdGhUaHJlZUJ1dHRvbnMgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQWxlcnQgd2l0aCBtYW55IEJ1dHRvbnMnLFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICBkZXNjcmlwdGlvbjogJ0l0IGNhbiBiZSB1c2VkIHdoZW4gbW9yZSB0aGFuIHRocmVlIGFjdGlvbnMgYXJlIHJlcXVpcmVkLicsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxBbGVydFdpdGhNYW55QnV0dG9ucyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBbGVydCB3aXRoIGNhbmNlbGFibGU9e3RydWV9JyxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0J5IHBhc3NpbmcgY2FuY2VsYWJsZT17ZmFsc2V9IHByb3AgdG8gYWxlcnRzIG9uIEFuZHJvaWQsIHRoZXkgY2FuIGJlIGRpc21pc3NlZCBieSB0YXBwaW5nIG91dHNpZGUgb2YgdGhlIGFsZXJ0IGJveC4nLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8QWxlcnRXaXRoQ2FuY2VsYWJsZVRydWUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQWxlcnQgd2l0aCBzdHlsZXMnLFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQWxlcnQgYnV0dG9ucyBjYW4gYmUgc3R5bGVkLiBUaGVyZSBhcmUgdGhyZWUgYnV0dG9uIHN0eWxlcyAtICdkZWZhdWx0JyB8ICdjYW5jZWwnIHwgJ2Rlc3RydWN0aXZlJy5cIixcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEFsZXJ0V2l0aFN0eWxlcyAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBbGVydCB3aXRoIHN0eWxlcyArIHByZWZlcnJlZCcsXG4gICAgcGxhdGZvcm06ICdpb3MnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJBbGVydCBidXR0b25zIHdpdGggJ2lzUHJlZmVycmVkJyB3aWxsIGJlIGVtcGhhc2l6ZWQsIGV2ZW4gb3ZlciBjYW5jZWwgYnV0dG9uc1wiLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8QWxlcnRXaXRoU3R5bGVzUHJlZmVycmVkIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1Byb21wdCBPcHRpb25zJyxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxQcm9tcHRPcHRpb25zIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1Byb21wdCBUeXBlcycsXG4gICAgcGxhdGZvcm06ICdpb3MnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8UHJvbXB0VHlwZXMgLz47XG4gICAgfSxcbiAgfSxcbl07XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIGZyYW1ld29yazogJ1JlYWN0JyxcbiAgdGl0bGU6ICdBbGVydHMnLFxuICBjYXRlZ29yeTogJ1VJJyxcbiAgZG9jdW1lbnRhdGlvblVSTDogJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWxlcnQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnQWxlcnRzIGRpc3BsYXkgYSBjb25jaXNlIGFuZCBpbmZvcm1hdGl2ZSBtZXNzYWdlIGFuZCBwcm9tcHQgdGhlIHVzZXIgdG8gbWFrZSBhIGRlY2lzaW9uLicsXG4gIGV4YW1wbGVzLFxufTogUk5UZXN0ZXJNb2R1bGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBDb2xvclN0eWxlc0V4YW1wbGUgZnJvbSAnLi9Db2xvclN0eWxlc0V4YW1wbGUnO1xuaW1wb3J0IENvbXBvc2VBbmltYXRpb25zV2l0aEVhc2luZ0V4YW1wbGUgZnJvbSAnLi9Db21wb3NlQW5pbWF0aW9uc1dpdGhFYXNpbmdFeGFtcGxlJztcbmltcG9ydCBDb21wb3NpbmdFeGFtcGxlIGZyb20gJy4vQ29tcG9zaW5nRXhhbXBsZSc7XG5pbXBvcnQgQ29udGludW91c0ludGVyYWN0aW9uc0V4YW1wbGUgZnJvbSAnLi9Db250aW51b3VzSW50ZXJhY3Rpb25zRXhhbXBsZSc7XG5pbXBvcnQgRWFzaW5nRXhhbXBsZSBmcm9tICcuL0Vhc2luZ0V4YW1wbGUnO1xuaW1wb3J0IEZhZGVJblZpZXdFeGFtcGxlIGZyb20gJy4vRmFkZUluVmlld0V4YW1wbGUnO1xuaW1wb3J0IExvb3BpbmdFeGFtcGxlIGZyb20gJy4vTG9vcGluZ0V4YW1wbGUnO1xuaW1wb3J0IE1vdmluZ0JveEV4YW1wbGUgZnJvbSAnLi9Nb3ZpbmdCb3hFeGFtcGxlJztcbmltcG9ydCBSb3RhdGluZ0ltYWdlc0V4YW1wbGUgZnJvbSAnLi9Sb3RhdGluZ0ltYWdlc0V4YW1wbGUnO1xuaW1wb3J0IFRyYW5zZm9ybUJvdW5jZUV4YW1wbGUgZnJvbSAnLi9UcmFuc2Zvcm1Cb3VuY2VFeGFtcGxlJztcbmltcG9ydCBUcmFuc2Zvcm1TdHlsZXNFeGFtcGxlIGZyb20gJy4vVHJhbnNmb3JtU3R5bGVzRXhhbXBsZSc7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIGZyYW1ld29yazogJ1JlYWN0JyxcbiAgdGl0bGU6ICdBbmltYXRlZCcsXG4gIGNhdGVnb3J5OiAnVUknLFxuICBkb2N1bWVudGF0aW9uVVJMOiAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hbmltYXRlZCcsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdMaWJyYXJ5IGRlc2lnbmVkIHRvIG1ha2UgYW5pbWF0aW9ucyBmbHVpZCwgcG93ZXJmdWwsIGFuZCBwYWlubGVzcyB0byAnICtcbiAgICAnYnVpbGQgYW5kIG1haW50YWluLicsXG4gIHNob3dJbmRpdmlkdWFsRXhhbXBsZXM6IHRydWUsXG4gIGV4YW1wbGVzOiBbXG4gICAgVHJhbnNmb3JtU3R5bGVzRXhhbXBsZSxcbiAgICBDb2xvclN0eWxlc0V4YW1wbGUsXG4gICAgRmFkZUluVmlld0V4YW1wbGUsXG4gICAgQ29tcG9zaW5nRXhhbXBsZSxcbiAgICBFYXNpbmdFeGFtcGxlLFxuICAgIENvbXBvc2VBbmltYXRpb25zV2l0aEVhc2luZ0V4YW1wbGUsXG4gICAgUm90YXRpbmdJbWFnZXNFeGFtcGxlLFxuICAgIE1vdmluZ0JveEV4YW1wbGUsXG4gICAgVHJhbnNmb3JtQm91bmNlRXhhbXBsZSxcbiAgICBMb29waW5nRXhhbXBsZSxcbiAgICBDb250aW51b3VzSW50ZXJhY3Rpb25zRXhhbXBsZSxcbiAgXSxcbn06IFJOVGVzdGVyTW9kdWxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0IFJOVENvbmZpZ3VyYXRpb25CbG9jayBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVENvbmZpZ3VyYXRpb25CbG9jayc7XG5pbXBvcnQgUk5UZXN0ZXJCdXR0b24gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlckJ1dHRvbic7XG5pbXBvcnQgVG9nZ2xlTmF0aXZlRHJpdmVyIGZyb20gJy4vdXRpbHMvVG9nZ2xlTmF0aXZlRHJpdmVyJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QW5pbWF0ZWQsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIEFuaW1hdGVkVmlldyh7dXNlTmF0aXZlRHJpdmVyfToge3VzZU5hdGl2ZURyaXZlcjogYm9vbGVhbn0pIHtcbiAgY29uc3QgYW5pbWF0aW9ucyA9IFtdO1xuXG4gIGNvbnN0IGFuaW1hdGVkVmlld1N0eWxlID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogbmV3IEFuaW1hdGVkLkNvbG9yKCdibHVlJyksXG4gICAgYm9yZGVyQ29sb3I6IG5ldyBBbmltYXRlZC5Db2xvcignb3JhbmdlJyksXG4gIH07XG4gIGFuaW1hdGlvbnMucHVzaChcbiAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRWaWV3U3R5bGUuYmFja2dyb3VuZENvbG9yLCB7XG4gICAgICB0b1ZhbHVlOiBuZXcgQW5pbWF0ZWQuQ29sb3IoJ3JlZCcpLFxuICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICB1c2VOYXRpdmVEcml2ZXIsXG4gICAgfSksXG4gICk7XG4gIGFuaW1hdGlvbnMucHVzaChcbiAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRWaWV3U3R5bGUuYm9yZGVyQ29sb3IsIHtcbiAgICAgIHRvVmFsdWU6IG5ldyBBbmltYXRlZC5Db2xvcigncHVycGxlJyksXG4gICAgICBkdXJhdGlvbjogMTAwMCxcbiAgICAgIHVzZU5hdGl2ZURyaXZlcixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zdCBhbmltYXRlZEJhc2VWYWx1ZSA9IG5ldyBBbmltYXRlZC5WYWx1ZSgwKTtcbiAgY29uc3QgaW50ZXJwb2xhdGlvbkFuaW1hdGVkU3R5bGUgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBhbmltYXRlZEJhc2VWYWx1ZS5pbnRlcnBvbGF0ZSh7XG4gICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICBvdXRwdXRSYW5nZTogWydibHVlJywgJ3JlZCddLFxuICAgIH0pLFxuICAgIGJvcmRlckNvbG9yOiBhbmltYXRlZEJhc2VWYWx1ZS5pbnRlcnBvbGF0ZSh7XG4gICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICBvdXRwdXRSYW5nZTogWydvcmFuZ2UnLCAncHVycGxlJ10sXG4gICAgfSksXG4gIH07XG4gIGFuaW1hdGlvbnMucHVzaChcbiAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRCYXNlVmFsdWUsIHtcbiAgICAgIHRvVmFsdWU6IDEsXG4gICAgICBkdXJhdGlvbjogMTAwMCxcbiAgICAgIHVzZU5hdGl2ZURyaXZlcixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zdCBhbmltYXRlZEZpcnN0U3BhblRleHRTdHlsZSA9IHtcbiAgICBjb2xvcjogbmV3IEFuaW1hdGVkLkNvbG9yKCdibHVlJyksXG4gIH07XG4gIGFuaW1hdGlvbnMucHVzaChcbiAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRGaXJzdFNwYW5UZXh0U3R5bGUuY29sb3IsIHtcbiAgICAgIHRvVmFsdWU6IG5ldyBBbmltYXRlZC5Db2xvcigncmVkJyksXG4gICAgICBkdXJhdGlvbjogMTAwMCxcbiAgICAgIHVzZU5hdGl2ZURyaXZlcixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zdCBhbmltYXRlZFNlY29uZFNwYW5UZXh0U3R5bGUgPSB7XG4gICAgY29sb3I6IG5ldyBBbmltYXRlZC5Db2xvcignb3JhbmdlJyksXG4gIH07XG4gIGFuaW1hdGlvbnMucHVzaChcbiAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRTZWNvbmRTcGFuVGV4dFN0eWxlLmNvbG9yLCB7XG4gICAgICB0b1ZhbHVlOiBuZXcgQW5pbWF0ZWQuQ29sb3IoJ3B1cnBsZScpLFxuICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICB1c2VOYXRpdmVEcml2ZXIsXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgYW5pbWF0ZWRJbWFnZVN0eWxlID0ge1xuICAgIHRpbnRDb2xvcjogbmV3IEFuaW1hdGVkLkNvbG9yKCdibHVlJyksXG4gIH07XG4gIGFuaW1hdGlvbnMucHVzaChcbiAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRJbWFnZVN0eWxlLnRpbnRDb2xvciwge1xuICAgICAgdG9WYWx1ZTogbmV3IEFuaW1hdGVkLkNvbG9yKCdyZWQnKSxcbiAgICAgIGR1cmF0aW9uOiAxMDAwLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyLFxuICAgIH0pLFxuICApO1xuXG4gIGNvbnN0IGFuaW1hdGlvbiA9IEFuaW1hdGVkLnBhcmFsbGVsKGFuaW1hdGlvbnMpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxSTlRlc3RlckJ1dHRvblxuICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgYW5pbWF0aW9uLnJlc2V0KCk7XG4gICAgICAgICAgYW5pbWF0aW9uLnN0YXJ0KCk7XG4gICAgICAgIH19PlxuICAgICAgICBQcmVzcyB0byBhbmltYXRlXG4gICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3hlc30+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3IHN0eWxlPXtbc3R5bGVzLmFuaW1hdGVkVmlldywgYW5pbWF0ZWRWaWV3U3R5bGVdfSAvPlxuICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmFuaW1hdGVkVmlldywgaW50ZXJwb2xhdGlvbkFuaW1hdGVkU3R5bGVdfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5hbmltYXRlZFRleHR9PlxuICAgICAgICA8VGV4dD5UaGUgPC9UZXh0PlxuICAgICAgICA8QW5pbWF0ZWQuVGV4dCBzdHlsZT17YW5pbWF0ZWRGaXJzdFNwYW5UZXh0U3R5bGV9PnF1aWNrPC9BbmltYXRlZC5UZXh0PlxuICAgICAgICA8VGV4dD4gYnJvd24gPC9UZXh0PlxuICAgICAgICA8QW5pbWF0ZWQuVGV4dCBzdHlsZT17YW5pbWF0ZWRTZWNvbmRTcGFuVGV4dFN0eWxlfT5mb3g8L0FuaW1hdGVkLlRleHQ+XG4gICAgICAgIDxUZXh0PiBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZzwvVGV4dD5cbiAgICAgIDwvVGV4dD5cbiAgICAgIDxBbmltYXRlZC5JbWFnZVxuICAgICAgICBzdHlsZT17W3N0eWxlcy5hbmltYXRlZEltYWdlLCBhbmltYXRlZEltYWdlU3R5bGVdfVxuICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy9idW5ueS5wbmcnKX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGVkQ29sb3JTdHlsZUV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFt1c2VOYXRpdmVEcml2ZXIsIHNldFVzZU5hdGl2ZURyaXZlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxSTlRDb25maWd1cmF0aW9uQmxvY2s+XG4gICAgICAgIDxUb2dnbGVOYXRpdmVEcml2ZXJcbiAgICAgICAgICB2YWx1ZT17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3NldFVzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvUk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgPEFuaW1hdGVkVmlld1xuICAgICAgICBrZXk9e2BhbmltYXRlZC12aWV3LXVzZS0ke3VzZU5hdGl2ZURyaXZlciA/ICduYXRpdmUnIDogJ2pzJ30tZHJpdmVyYH1cbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyPXt1c2VOYXRpdmVEcml2ZXJ9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBhbmltYXRlZFZpZXc6IHtcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB3aWR0aDogMTAwLFxuICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICBtYXJnaW5SaWdodDogMTAsXG4gIH0sXG4gIGFuaW1hdGVkVGV4dDoge1xuICAgIGZvbnRTaXplOiAyMCxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIGFuaW1hdGVkSW1hZ2U6IHtcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB3aWR0aDogMTAwLFxuICB9LFxuICBib3hlczoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnQ29sb3IgU3R5bGVzJyxcbiAgbmFtZTogJ2NvbG9yU3R5bGVzJyxcbiAgZGVzY3JpcHRpb246ICdBbmltYXRpb25zIG9mIGNvbG9yIHN0eWxlcy4nLFxuICByZW5kZXI6ICgpID0+IDxBbmltYXRlZENvbG9yU3R5bGVFeGFtcGxlIC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4vUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgY2hpbGRyZW4/OiA/UmVhY3QuTm9kZSxcbiAgdGVzdElEPzogc3RyaW5nLFxufH0+O1xuXG4vKipcbiAqIENvbnRhaW5lciB2aWV3IGZvciBhIGJsb2NrIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYW4gZXhhbXBsZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUk5UQ29uZmlndXJhdGlvbkJsb2NrKHByb3BzOiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoUk5UZXN0ZXJUaGVtZUNvbnRleHQpO1xuICByZXR1cm4gKFxuICAgIDxWaWV3XG4gICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKHN0eWxlcy5jb250YWluZXIsIHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLlNlcGFyYXRvckNvbG9yLFxuICAgICAgfSl9XG4gICAgICB0ZXN0SUQ9e3Byb3BzLnRlc3RJRH0+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIHBhZGRpbmdWZXJ0aWNhbDogNixcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IDEsXG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFN3aXRjaCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBWaWV3U3R5bGVQcm9wID0gJEVsZW1lbnRUeXBlPFJlYWN0LkVsZW1lbnRDb25maWc8dHlwZW9mIFZpZXc+LCAnc3R5bGUnPjtcblxudHlwZSBQcm9wcyA9IHtcbiAgdmFsdWU6IGJvb2xlYW4sXG4gIG9uVmFsdWVDaGFuZ2U6ICRFbGVtZW50VHlwZTxcbiAgICBSZWFjdC5FbGVtZW50Q29uZmlnPHR5cGVvZiBTd2l0Y2g+LFxuICAgICdvblZhbHVlQ2hhbmdlJyxcbiAgPixcbiAgc3R5bGU/OiA/Vmlld1N0eWxlUHJvcCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvZ2dsZU5hdGl2ZURyaXZlcih7XG4gIHZhbHVlLFxuICBvblZhbHVlQ2hhbmdlLFxuICBzdHlsZSxcbn06IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMucm93LCBzdHlsZSl9PlxuICAgICAgPFRleHQ+VXNlIE5hdGl2ZSBEcml2ZXI8L1RleHQ+XG4gICAgICA8U3dpdGNoXG4gICAgICAgIHRlc3RJRD1cInRvZ2dsZS11c2UtbmF0aXZlLWRyaXZlclwiXG4gICAgICAgIG9uVmFsdWVDaGFuZ2U9e29uVmFsdWVDaGFuZ2V9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvdzoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0IFJOVENvbmZpZ3VyYXRpb25CbG9jayBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVENvbmZpZ3VyYXRpb25CbG9jayc7XG5pbXBvcnQgUk5UZXN0ZXJCdXR0b24gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlckJ1dHRvbic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0FuaW1hdGVkLCBFYXNpbmcsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGVudDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2RlZXBza3libHVlJyxcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgICBib3JkZXJDb2xvcjogJ2RvZGdlcmJsdWUnLFxuICAgIHBhZGRpbmc6IDIwLFxuICAgIG1hcmdpbjogMjAsXG4gICAgYm9yZGVyUmFkaXVzOiAxMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbn0pO1xuXG5mdW5jdGlvbiBDb21wb3NpdGVBbmltYXRpb25zV2l0aEVhc2luZ0V4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IGFuaW1zID0gWzEsIDIsIDNdLm1hcCgoKSA9PiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCkpO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8Uk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgICA8VGV4dD5Ob3RlIHlvdSBjYW5ub3QgYHVzZU5hdGl2ZURyaXZlcmAgZm9yIGxheW91dCBwcm9wZXJ0aWVzLjwvVGV4dD5cbiAgICAgIDwvUk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgPFJOVGVzdGVyQnV0dG9uXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBBbmltYXRlZC5zZXF1ZW5jZShbXG4gICAgICAgICAgICAvLyBPbmUgYWZ0ZXIgdGhlIG90aGVyXG4gICAgICAgICAgICBBbmltYXRlZC50aW1pbmcoYW5pbXNbMF0sIHtcbiAgICAgICAgICAgICAgdG9WYWx1ZTogMjAwLFxuICAgICAgICAgICAgICBlYXNpbmc6IEVhc2luZy5saW5lYXIsXG4gICAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFuaW1hdGVkLmRlbGF5KDQwMCksIC8vIFVzZSB3aXRoIHNlcXVlbmNlXG4gICAgICAgICAgICBBbmltYXRlZC50aW1pbmcoYW5pbXNbMF0sIHtcbiAgICAgICAgICAgICAgdG9WYWx1ZTogMCxcblxuICAgICAgICAgICAgICAvLyBTcHJpbmd5XG4gICAgICAgICAgICAgIGVhc2luZzogRWFzaW5nLmVsYXN0aWMoMiksXG5cbiAgICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQW5pbWF0ZWQuZGVsYXkoNDAwKSxcbiAgICAgICAgICAgIEFuaW1hdGVkLnN0YWdnZXIoXG4gICAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgICAgYW5pbXNcbiAgICAgICAgICAgICAgICAubWFwKGFuaW0gPT5cbiAgICAgICAgICAgICAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltLCB7XG4gICAgICAgICAgICAgICAgICAgIHRvVmFsdWU6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgYW5pbXMubWFwKGFuaW0gPT5cbiAgICAgICAgICAgICAgICAgICAgQW5pbWF0ZWQudGltaW5nKGFuaW0sIHtcbiAgICAgICAgICAgICAgICAgICAgICB0b1ZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEFuaW1hdGVkLmRlbGF5KDQwMCksXG4gICAgICAgICAgICBBbmltYXRlZC5wYXJhbGxlbChcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIEVhc2luZy5pbk91dChFYXNpbmcucXVhZCksIC8vIFN5bW1ldHJpY1xuICAgICAgICAgICAgICAgIEVhc2luZy5iYWNrKDEuNSksIC8vIEdvZXMgYmFja3dhcmRzIGZpcnN0XG4gICAgICAgICAgICAgICAgRWFzaW5nLmVhc2UsIC8vIERlZmF1bHQgYmV6aWVyXG4gICAgICAgICAgICAgIF0ubWFwKChlYXNpbmcsIGlpKSA9PlxuICAgICAgICAgICAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltc1tpaV0sIHtcbiAgICAgICAgICAgICAgICAgIHRvVmFsdWU6IDMyMCxcbiAgICAgICAgICAgICAgICAgIGVhc2luZyxcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBBbmltYXRlZC5kZWxheSg0MDApLFxuICAgICAgICAgICAgQW5pbWF0ZWQuc3RhZ2dlcihcbiAgICAgICAgICAgICAgMjAwLFxuICAgICAgICAgICAgICBhbmltcy5tYXAoYW5pbSA9PlxuICAgICAgICAgICAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltLCB7XG4gICAgICAgICAgICAgICAgICB0b1ZhbHVlOiAwLFxuXG4gICAgICAgICAgICAgICAgICAvLyBMaWtlIGEgYmFsbFxuICAgICAgICAgICAgICAgICAgZWFzaW5nOiBFYXNpbmcuYm91bmNlLFxuXG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwMCxcbiAgICAgICAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pLnN0YXJ0KCk7XG4gICAgICAgIH19PlxuICAgICAgICBQcmVzcyB0byBBbmltYXRlXG4gICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuICAgICAge1snQ29tcG9zaXRlJywgJ0Vhc2luZycsICdBbmltYXRpb25zISddLm1hcCgodGV4dCwgaWkpID0+IChcbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBrZXk9e3RleHR9XG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5jb250ZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsZWZ0OiBhbmltc1tpaV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF19PlxuICAgICAgICAgIDxUZXh0Pnt0ZXh0fTwvVGV4dD5cbiAgICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgICAgKSl9XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoe1xuICB0aXRsZTogJ0NvbXBvc2l0ZSBBbmltYXRpb25zIHdpdGggRWFzaW5nJyxcbiAgbmFtZTogJ2NvbXBvc2l0ZUFuaW1hdGlvbnNXaXRoRWFzaW5nJyxcbiAgZGVzY3JpcHRpb246ICgnU2VxdWVuY2UsIHBhcmFsbGVsLCBkZWxheSwgYW5kICcgK1xuICAgICdzdGFnZ2VyIHdpdGggZGlmZmVyZW50IGVhc2luZyBmdW5jdGlvbnMuJzogc3RyaW5nKSxcbiAgZXhwZWN0OlxuICAgICdUaGUgMyB2aWV3cyB3aWxsIGFuaW1hdGUgdGhlaXIgYGxlZnRgIHBvc2l0aW9uIGJhc2VkIG9uIHRoZWlyIGFuaW1hdGlvbiBjb25maWd1cmF0aW9ucy4nLFxuICByZW5kZXI6ICgpID0+IDxDb21wb3NpdGVBbmltYXRpb25zV2l0aEVhc2luZ0V4YW1wbGUgLz4sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuaW1wb3J0IHR5cGUge0NvbXBvc2l0ZUFuaW1hdGlvbn0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9BbmltYXRlZC9BbmltYXRlZE1vY2snO1xuaW1wb3J0IHR5cGUgQW5pbWF0ZWRWYWx1ZSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL25vZGVzL0FuaW1hdGVkVmFsdWUnO1xuXG5pbXBvcnQgUk5UQ29uZmlndXJhdGlvbkJsb2NrIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UQ29uZmlndXJhdGlvbkJsb2NrJztcbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCBUb2dnbGVOYXRpdmVEcml2ZXIgZnJvbSAnLi91dGlscy9Ub2dnbGVOYXRpdmVEcml2ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgQW5pbWF0ZWQsXG4gIEZsYXRMaXN0LFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBWaWV3LFxuICB1c2VXaW5kb3dEaW1lbnNpb25zLFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8fH0+O1xuY29uc3QgYm94U2l6ZSA9IDEyO1xuY29uc3QgcGFkZGluZyA9IDg7XG5jb25zdCBsZWZ0VG9SaWdodFRpbWluZ0NvbmZpZyA9ICh1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4pID0+ICh7XG4gIHRvVmFsdWU6IDEsXG4gIHVzZU5hdGl2ZURyaXZlcixcbn0pO1xuY29uc3QgcmlnaHRUb0xlZnRUaW1pbmdDb25maWcgPSAodXNlTmF0aXZlRHJpdmVyOiBib29sZWFuKSA9PiAoe1xuICB0b1ZhbHVlOiAwLFxuICB1c2VOYXRpdmVEcml2ZXIsXG59KTtcblxuY29uc3QgaXRlbXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ1BhcmFsbGVsJyxcbiAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyBhIG51bWJlciBvZiBhbmltYXRpb25zIGF0IHRoZSBzYW1lIHRpbWUnLFxuICAgIGNvbXBvc2l0ZUFuaW1hdGlvbjogKFxuICAgICAgdmFsdWVzOiBBcnJheTxBbmltYXRlZFZhbHVlPixcbiAgICAgIHVzZU5hdGl2ZURyaXZlcjogYm9vbGVhbixcbiAgICApID0+XG4gICAgICBBbmltYXRlZC5zZXF1ZW5jZShbXG4gICAgICAgIEFuaW1hdGVkLnBhcmFsbGVsKFxuICAgICAgICAgIHZhbHVlcy5tYXAodmFsdWUgPT5cbiAgICAgICAgICAgIEFuaW1hdGVkLnRpbWluZyh2YWx1ZSwgbGVmdFRvUmlnaHRUaW1pbmdDb25maWcodXNlTmF0aXZlRHJpdmVyKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgQW5pbWF0ZWQucGFyYWxsZWwoXG4gICAgICAgICAgdmFsdWVzLm1hcCh2YWx1ZSA9PlxuICAgICAgICAgICAgQW5pbWF0ZWQudGltaW5nKHZhbHVlLCByaWdodFRvTGVmdFRpbWluZ0NvbmZpZyh1c2VOYXRpdmVEcml2ZXIpKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgXSksXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1NlcXVlbmNlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdTdGFydHMgdGhlIGFuaW1hdGlvbnMgaW4gb3JkZXIsIHdhaXRpbmcgZm9yIGVhY2ggdG8gY29tcGxldGUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0JyxcbiAgICBjb21wb3NpdGVBbmltYXRpb246IChcbiAgICAgIHZhbHVlczogQXJyYXk8QW5pbWF0ZWRWYWx1ZT4sXG4gICAgICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG4gICAgKSA9PlxuICAgICAgQW5pbWF0ZWQuc2VxdWVuY2UoW1xuICAgICAgICBBbmltYXRlZC5zZXF1ZW5jZShcbiAgICAgICAgICB2YWx1ZXMubWFwKHZhbHVlID0+XG4gICAgICAgICAgICBBbmltYXRlZC50aW1pbmcodmFsdWUsIGxlZnRUb1JpZ2h0VGltaW5nQ29uZmlnKHVzZU5hdGl2ZURyaXZlcikpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIEFuaW1hdGVkLnNlcXVlbmNlKFxuICAgICAgICAgIHZhbHVlcy5tYXAodmFsdWUgPT5cbiAgICAgICAgICAgIEFuaW1hdGVkLnRpbWluZyh2YWx1ZSwgcmlnaHRUb0xlZnRUaW1pbmdDb25maWcodXNlTmF0aXZlRHJpdmVyKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTdGFnZ2VyJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdTdGFydHMgYW5pbWF0aW9ucyBpbiBvcmRlciBhbmQgaW4gcGFyYWxsZWwsIGJ1dCB3aXRoIHN1Y2Nlc3NpdmUgZGVsYXlzJyxcbiAgICBjb21wb3NpdGVBbmltYXRpb246IChcbiAgICAgIHZhbHVlczogQXJyYXk8QW5pbWF0ZWRWYWx1ZT4sXG4gICAgICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG4gICAgKSA9PlxuICAgICAgQW5pbWF0ZWQuc2VxdWVuY2UoW1xuICAgICAgICBBbmltYXRlZC5zdGFnZ2VyKFxuICAgICAgICAgIDE1MCxcbiAgICAgICAgICB2YWx1ZXMubWFwKHZhbHVlID0+XG4gICAgICAgICAgICBBbmltYXRlZC50aW1pbmcodmFsdWUsIGxlZnRUb1JpZ2h0VGltaW5nQ29uZmlnKHVzZU5hdGl2ZURyaXZlcikpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIEFuaW1hdGVkLnN0YWdnZXIoXG4gICAgICAgICAgMTUwLFxuICAgICAgICAgIHZhbHVlcy5tYXAodmFsdWUgPT5cbiAgICAgICAgICAgIEFuaW1hdGVkLnRpbWluZyh2YWx1ZSwgcmlnaHRUb0xlZnRUaW1pbmdDb25maWcodXNlTmF0aXZlRHJpdmVyKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdEZWxheScsXG4gICAgZGVzY3JpcHRpb246ICdTdGFydHMgYW4gYW5pbWF0aW9uIGFmdGVyIGEgZ2l2ZW4gZGVsYXknLFxuICAgIGNvbXBvc2l0ZUFuaW1hdGlvbjogKFxuICAgICAgdmFsdWVzOiBBcnJheTxBbmltYXRlZFZhbHVlPixcbiAgICAgIHVzZU5hdGl2ZURyaXZlcjogYm9vbGVhbixcbiAgICApID0+XG4gICAgICBBbmltYXRlZC5zZXF1ZW5jZShbXG4gICAgICAgIEFuaW1hdGVkLmRlbGF5KDIwMDApLFxuICAgICAgICBBbmltYXRlZC5wYXJhbGxlbChcbiAgICAgICAgICB2YWx1ZXMubWFwKHZhbHVlID0+XG4gICAgICAgICAgICBBbmltYXRlZC50aW1pbmcodmFsdWUsIGxlZnRUb1JpZ2h0VGltaW5nQ29uZmlnKHVzZU5hdGl2ZURyaXZlcikpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIEFuaW1hdGVkLmRlbGF5KDIwMDApLFxuICAgICAgICBBbmltYXRlZC5wYXJhbGxlbChcbiAgICAgICAgICB2YWx1ZXMubWFwKHZhbHVlID0+XG4gICAgICAgICAgICBBbmltYXRlZC50aW1pbmcodmFsdWUsIHJpZ2h0VG9MZWZ0VGltaW5nQ29uZmlnKHVzZU5hdGl2ZURyaXZlcikpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgfSxcbl07XG5cbmZ1bmN0aW9uIENvbXBvc2luZ0V4YW1wbGVJdGVtKHtcbiAgdGl0bGUsXG4gIGRlc2NyaXB0aW9uLFxuICBjb21wb3NpdGVBbmltYXRpb24sXG4gIHVzZU5hdGl2ZURyaXZlcixcbn06IHtcbiAgdGl0bGU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29tcG9zaXRlQW5pbWF0aW9uOiAoXG4gICAgdmFsdWVzOiBBbmltYXRlZC5WYWx1ZVtdLFxuICAgIHVzZU5hdGl2ZURyaXZlcjogYm9vbGVhbixcbiAgKSA9PiBDb21wb3NpdGVBbmltYXRpb24sXG4gIHVzZU5hdGl2ZURyaXZlcjogYm9vbGVhbixcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3Qge3dpZHRoOiB3aW5kb3dXaWR0aH0gPSB1c2VXaW5kb3dEaW1lbnNpb25zKCk7XG5cbiAgLy8gRmlndXJlIG91dCBob3cgZmFyIGFsb25nIHRoZSB4IGF4aXMgd2Ugc2hvdWxkIHRyYW5zbGF0ZSB0aGUgYm94IGJ5IHRha2luZyBpbnRvXG4gIC8vIGFjY291bnQgdGhlIHdpbmRvdyB3aWR0aCwgYm94IHNpemUsIGFuZCBwYWRkaW5nXG4gIGNvbnN0IG1heFhUcmFuc2xhdGlvbiA9IHdpbmRvd1dpZHRoIC0gYm94U2l6ZSAtIDQgKiBwYWRkaW5nO1xuICBjb25zdCBib3hJbmRleGVzID0gUmVhY3QudXNlTWVtbygoKSA9PiBbMCwgMSwgMiwgMywgNF0sIFtdKTtcbiAgY29uc3QgeFRyYW5zbGF0aW9ucyA9IFJlYWN0LnVzZVJlZihcbiAgICBib3hJbmRleGVzLm1hcCgoKSA9PiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCkpLFxuICApO1xuICBjb25zdCBhbmltYXRpb24gPSBSZWFjdC51c2VSZWYoXG4gICAgY29tcG9zaXRlQW5pbWF0aW9uKHhUcmFuc2xhdGlvbnMuY3VycmVudCwgdXNlTmF0aXZlRHJpdmVyKSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaXRlbUNvbnRhaW5lcn0+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLml0ZW1UaXRsZX0+e3RpdGxlfTwvVGV4dD5cbiAgICAgIDxUZXh0PntkZXNjcmlwdGlvbn08L1RleHQ+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJveGVzQ29udGFpbmVyfT5cbiAgICAgICAge2JveEluZGV4ZXMubWFwKGJveEluZGV4ID0+IHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGVYID0geFRyYW5zbGF0aW9ucy5jdXJyZW50W2JveEluZGV4XS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICAgICAgICBvdXRwdXRSYW5nZTogWzAsIG1heFhUcmFuc2xhdGlvbl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICAgICAga2V5PXtib3hJbmRleH1cbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuYm94LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogW3t0cmFuc2xhdGVYfV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICA8Uk5UZXN0ZXJCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBhbmltYXRpb24uY3VycmVudC5yZXNldCgpO1xuICAgICAgICAgICAgYW5pbWF0aW9uLmN1cnJlbnQuc3RhcnQoKTtcbiAgICAgICAgICB9fT5cbiAgICAgICAgICBTdGFydFxuICAgICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuICAgICAgICA8Uk5UZXN0ZXJCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBhbmltYXRpb24uY3VycmVudC5zdG9wKCk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgU3RvcFxuICAgICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuICAgICAgICA8Uk5UZXN0ZXJCdXR0b25cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPIChUOTYyMTMyMjUpOiBBbmltYXRlZC5yZXNldCgpIGRvZXNuJ3Qgd29yayB3aXRob3V0IHVzaW5nIG5hdGl2ZSBkcml2ZXJcbiAgICAgICAgICAgIGFuaW1hdGlvbi5jdXJyZW50LnJlc2V0KCk7XG4gICAgICAgICAgfX0+XG4gICAgICAgICAgUmVzZXRcbiAgICAgICAgPC9STlRlc3RlckJ1dHRvbj5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENvbXBvc2luZ0V4YW1wbGUocHJvcHM6IFByb3BzKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFt1c2VOYXRpdmVEcml2ZXIsIHNldFVzZU5hdGl2ZURyaXZlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFJOVENvbmZpZ3VyYXRpb25CbG9jaz5cbiAgICAgICAgPFRvZ2dsZU5hdGl2ZURyaXZlclxuICAgICAgICAgIHZhbHVlPXt1c2VOYXRpdmVEcml2ZXJ9XG4gICAgICAgICAgb25WYWx1ZUNoYW5nZT17c2V0VXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAvPlxuICAgICAgPC9STlRDb25maWd1cmF0aW9uQmxvY2s+XG4gICAgICA8RmxhdExpc3RcbiAgICAgICAgZGF0YT17aXRlbXN9XG4gICAgICAgIHJlbmRlckl0ZW09eyh7aXRlbX0pID0+IChcbiAgICAgICAgICA8Q29tcG9zaW5nRXhhbXBsZUl0ZW1cbiAgICAgICAgICAgIGtleT17YCR7aXRlbS50aXRsZX0ke3VzZU5hdGl2ZURyaXZlciA/ICduYXRpdmUnIDogJ25vbi1uYXRpdmUnfWB9XG4gICAgICAgICAgICB0aXRsZT17aXRlbS50aXRsZX1cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtpdGVtLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgY29tcG9zaXRlQW5pbWF0aW9uPXtpdGVtLmNvbXBvc2l0ZUFuaW1hdGlvbn1cbiAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcj17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGl0ZW1Db250YWluZXI6IHtcbiAgICBwYWRkaW5nLFxuICAgIGFsaWduSXRlbXM6ICdzdHJldGNoJyxcbiAgfSxcbiAgaXRlbVRpdGxlOiB7XG4gICAgZm9udFNpemU6IDE4LFxuICAgIGZvbnRXZWlnaHQ6ICczMDAnLFxuICB9LFxuICBib3hlc0NvbnRhaW5lcjoge1xuICAgIG1hcmdpblZlcnRpY2FsOiBwYWRkaW5nLFxuICAgIHBhZGRpbmcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZWVlZScsXG4gICAgYm9yZGVyUmFkaXVzOiA0LFxuICB9LFxuICBib3g6IHtcbiAgICBib3JkZXJSYWRpdXM6IDEsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnIzYxZGFmYicsXG4gICAgd2lkdGg6IGJveFNpemUsXG4gICAgaGVpZ2h0OiBib3hTaXplLFxuICAgIG1hcmdpbkJvdHRvbTogMixcbiAgfSxcbiAgYnV0dG9uc0NvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnQ29tcG9zaW5nJyxcbiAgbmFtZTogJ2NvbXBvc2luZycsXG4gIGRlc2NyaXB0aW9uOiAnQ29tYmluZSBtdWx0aXBsZSBhbmltYXRpb25zIHVzaW5nIGNvbXBvc2l0aW9uIGZ1bmN0aW9ucycsXG4gIHJlbmRlcjogKCkgPT4gPENvbXBvc2luZ0V4YW1wbGUgLz4sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1RleHR9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnQ29udGludW91cyBJbnRlcmFjdGlvbnMnLFxuICBuYW1lOiAnY29udGludW91c0ludGVyYWN0aW9ucycsXG4gIGRlc2NyaXB0aW9uOiAoJ0dlc3R1cmUgZXZlbnRzLCBjaGFpbmluZywgMkQgJyArXG4gICAgJ3ZhbHVlcywgaW50ZXJydXB0aW5nIGFuZCB0cmFuc2l0aW9uaW5nICcgK1xuICAgICdhbmltYXRpb25zLCBldGMuJzogc3RyaW5nKSxcbiAgcmVuZGVyOiAoKTogUmVhY3QuTm9kZSA9PiA8VGV4dD5DaGVja291dCB0aGUgR3JhdHVpdG91cyBBbmltYXRpb24gQXBwITwvVGV4dD4sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgUk5UQ29uZmlndXJhdGlvbkJsb2NrIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UQ29uZmlndXJhdGlvbkJsb2NrJztcbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCBUb2dnbGVOYXRpdmVEcml2ZXIgZnJvbSAnLi91dGlscy9Ub2dnbGVOYXRpdmVEcml2ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgQW5pbWF0ZWQsXG4gIEVhc2luZyxcbiAgU2VjdGlvbkxpc3QsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3x8fT47XG5cbnR5cGUgRWFzaW5nTGlzdEl0ZW0gPSB7XG4gIHRpdGxlOiBzdHJpbmcsXG4gIGVhc2luZzogKHZhbHVlOiBudW1iZXIpID0+IG51bWJlcixcbn07XG5cbmNvbnN0IGVhc2luZ1NlY3Rpb25zID0gW1xuICB7XG4gICAgdGl0bGU6ICdQcmVkZWZpbmVkIGFuaW1hdGlvbnMnLFxuICAgIGRhdGE6IFtcbiAgICAgIHt0aXRsZTogJ0JvdW5jZScsIGVhc2luZzogRWFzaW5nLmJvdW5jZX0sXG4gICAgICB7dGl0bGU6ICdFYXNlJywgZWFzaW5nOiBFYXNpbmcuZWFzZX0sXG4gICAgICB7dGl0bGU6ICdFbGFzdGljJywgZWFzaW5nOiBFYXNpbmcuZWxhc3RpYyg0KX0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhbmRhcmQgZnVuY3Rpb25zJyxcbiAgICBkYXRhOiBbXG4gICAgICB7dGl0bGU6ICdMaW5lYXInLCBlYXNpbmc6IEVhc2luZy5saW5lYXJ9LFxuICAgICAge3RpdGxlOiAnUXVhZCcsIGVhc2luZzogRWFzaW5nLnF1YWR9LFxuICAgICAge3RpdGxlOiAnQ3ViaWMnLCBlYXNpbmc6IEVhc2luZy5jdWJpY30sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQWRkaXRpb25hbCBmdW5jdGlvbnMnLFxuICAgIGRhdGE6IFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdCZXppZXInLFxuICAgICAgICBlYXNpbmc6IEVhc2luZy5iZXppZXIoMCwgMiwgMSwgLTEpLFxuICAgICAgfSxcbiAgICAgIHt0aXRsZTogJ0NpcmNsZScsIGVhc2luZzogRWFzaW5nLmNpcmNsZX0sXG4gICAgICB7dGl0bGU6ICdTaW4nLCBlYXNpbmc6IEVhc2luZy5zaW59LFxuICAgICAge3RpdGxlOiAnRXhwJywgZWFzaW5nOiBFYXNpbmcuZXhwfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDb21iaW5hdGlvbnMnLFxuICAgIGRhdGE6IFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdJbiArIEJvdW5jZScsXG4gICAgICAgIGVhc2luZzogRWFzaW5nLmluKEVhc2luZy5ib3VuY2UpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdPdXQgKyBFeHAnLFxuICAgICAgICBlYXNpbmc6IEVhc2luZy5vdXQoRWFzaW5nLmV4cCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0luT3V0ICsgRWxhc3RpYycsXG4gICAgICAgIGVhc2luZzogRWFzaW5nLmluT3V0KEVhc2luZy5lbGFzdGljKDEpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbl07XG5cbmZ1bmN0aW9uIEVhc2luZ0l0ZW0oe1xuICBpdGVtLFxuICB1c2VOYXRpdmVEcml2ZXIsXG59OiB7XG4gIGl0ZW06IEVhc2luZ0xpc3RJdGVtLFxuICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG59KTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IG9wYWNpdHlBbmRTY2FsZSA9IFJlYWN0LnVzZVJlZihuZXcgQW5pbWF0ZWQuVmFsdWUoMSkpO1xuICBjb25zdCBhbmltYXRpb24gPSBSZWFjdC51c2VSZWYoXG4gICAgQW5pbWF0ZWQudGltaW5nKG9wYWNpdHlBbmRTY2FsZS5jdXJyZW50LCB7XG4gICAgICB0b1ZhbHVlOiAxLFxuICAgICAgZHVyYXRpb246IDEyMDAsXG4gICAgICBlYXNpbmc6IGl0ZW0uZWFzaW5nLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyLFxuICAgIH0pLFxuICApO1xuXG4gIGNvbnN0IGFuaW1hdGVkU3R5bGVzID0gW1xuICAgIHN0eWxlcy5ib3gsXG4gICAge1xuICAgICAgb3BhY2l0eTogb3BhY2l0eUFuZFNjYWxlLmN1cnJlbnQsXG4gICAgICB0cmFuc2Zvcm06IFt7c2NhbGU6IG9wYWNpdHlBbmRTY2FsZS5jdXJyZW50fV0sXG4gICAgfSxcbiAgXTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaXRlbUNvbnRhaW5lcn0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLml0ZW1NZXRhfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5pdGVtVGl0bGV9PntpdGVtLnRpdGxlfTwvVGV4dD5cbiAgICAgICAgPFJOVGVzdGVyQnV0dG9uXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgb3BhY2l0eUFuZFNjYWxlLmN1cnJlbnQuc2V0VmFsdWUoMCk7XG4gICAgICAgICAgICBhbmltYXRpb24uY3VycmVudC5zdGFydCgpO1xuICAgICAgICAgIH19PlxuICAgICAgICAgIEFuaW1hdGVcbiAgICAgICAgPC9STlRlc3RlckJ1dHRvbj5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYm94Q29udGFpbmVyfT5cbiAgICAgICAgPEFuaW1hdGVkLlZpZXcgc3R5bGU9e2FuaW1hdGVkU3R5bGVzfSAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRWFzaW5nRXhhbXBsZShwcm9wczogUHJvcHMpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW3VzZU5hdGl2ZURyaXZlciwgc2V0VXNlTmF0aXZlRHJpdmVyXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Uk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgICA8VG9nZ2xlTmF0aXZlRHJpdmVyXG4gICAgICAgICAgdmFsdWU9e3VzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtzZXRVc2VOYXRpdmVEcml2ZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L1JOVENvbmZpZ3VyYXRpb25CbG9jaz5cbiAgICAgIDxTZWN0aW9uTGlzdFxuICAgICAgICBzZWN0aW9ucz17ZWFzaW5nU2VjdGlvbnN9XG4gICAgICAgIHJlbmRlckl0ZW09e2luZm8gPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW06IEVhc2luZ0xpc3RJdGVtID0gaW5mby5pdGVtO1xuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFYXNpbmdJdGVtXG4gICAgICAgICAgICAgIGtleT17YCR7aXRlbS50aXRsZX0ke3VzZU5hdGl2ZURyaXZlciA/ICduYXRpdmUnIDogJ25vbi1uYXRpdmUnfWB9XG4gICAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcj17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgICByZW5kZXJTZWN0aW9uSGVhZGVyPXsoe3NlY3Rpb246IHt0aXRsZX19KSA9PiAoXG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zZWN0aW9uSGVhZGVyfT57dGl0bGV9PC9UZXh0PlxuICAgICAgICApfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuY29uc3QgYm94U2l6ZSA9IDUwO1xuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBzZWN0aW9uSGVhZGVyOiB7XG4gICAgcGFkZGluZ0hvcml6b250YWw6IDgsXG4gICAgcGFkZGluZ1ZlcnRpY2FsOiA0LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmNGY0ZjQnLFxuICAgIGNvbG9yOiAnIzk5OScsXG4gICAgZm9udFNpemU6IDEyLFxuICB9LFxuICBpdGVtQ29udGFpbmVyOiB7XG4gICAgcGFkZGluZzogOCxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgaXRlbU1ldGE6IHtcbiAgICBmbGV4OiAxLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgfSxcbiAgaXRlbVRpdGxlOiB7XG4gICAgZm9udFNpemU6IDE4LFxuICAgIGZvbnRXZWlnaHQ6ICczMDAnLFxuICB9LFxuICBib3hDb250YWluZXI6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiBib3hTaXplLFxuICAgIHdpZHRoOiBib3hTaXplICogMixcbiAgfSxcbiAgYm94OiB7XG4gICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyM2MWRhZmInLFxuICAgIHdpZHRoOiBib3hTaXplLFxuICAgIGhlaWdodDogYm94U2l6ZSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCAoe1xuICB0aXRsZTogJ0Vhc2luZycsXG4gIG5hbWU6ICdlYXNpbmcnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIEVhc2luZyBtb2R1bGUgaW1wbGVtZW50cyBjb21tb24gZWFzaW5nIGZ1bmN0aW9ucy4gVGhpcyBtb2R1bGUgaXMgdXNlZCBieSBBbmltYXRlZC50aW1pbmcoKSB0byBjb252ZXkgcGh5c2ljYWxseSBiZWxpZXZhYmxlIG1vdGlvbiBpbiBhbmltYXRpb25zLicsXG4gIHJlbmRlcjogKCkgPT4gPEVhc2luZ0V4YW1wbGUgLz4sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgUk5UQ29uZmlndXJhdGlvbkJsb2NrIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UQ29uZmlndXJhdGlvbkJsb2NrJztcbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCBUb2dnbGVOYXRpdmVEcml2ZXIgZnJvbSAnLi91dGlscy9Ub2dnbGVOYXRpdmVEcml2ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtBbmltYXRlZCwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250ZW50OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnZGVlcHNreWJsdWUnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnZG9kZ2VyYmx1ZScsXG4gICAgcGFkZGluZzogMjAsXG4gICAgbWFyZ2luOiAyMCxcbiAgICBib3JkZXJSYWRpdXM6IDEwLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbmZ1bmN0aW9uIEZhZGVJblZpZXcoe1xuICB1c2VOYXRpdmVEcml2ZXIsXG4gIGNoaWxkcmVuLFxufToge1xuICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlLFxufSkge1xuICAvL29wYWNpdHkgMFxuICBjb25zdCBbZmFkZUFuaW1dID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gbmV3IEFuaW1hdGVkLlZhbHVlKDApKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBBbmltYXRlZC50aW1pbmcoXG4gICAgICAvLyBVc2VzIGVhc2luZyBmdW5jdGlvbnNcbiAgICAgIGZhZGVBbmltLCAvLyBUaGUgdmFsdWUgdG8gZHJpdmVcbiAgICAgIHtcbiAgICAgICAgLy8gVGFyZ2V0XG4gICAgICAgIHRvVmFsdWU6IDEsXG5cbiAgICAgICAgLy8gQ29uZmlndXJhdGlvblxuICAgICAgICBkdXJhdGlvbjogMjAwMCxcblxuICAgICAgICB1c2VOYXRpdmVEcml2ZXIsXG4gICAgICB9LFxuICAgICkuc3RhcnQoKTsgLy8gRG9uJ3QgZm9yZ2V0IHN0YXJ0IVxuICB9LCBbZmFkZUFuaW0sIHVzZU5hdGl2ZURyaXZlcl0pO1xuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVkLlZpZXcgLy8gU3BlY2lhbCBhbmltYXRhYmxlIFZpZXdcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIG9wYWNpdHk6IGZhZGVBbmltLCAvLyBCaW5kc1xuICAgICAgfX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9BbmltYXRlZC5WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBGYWRlSW5FeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbc2hvdywgc2V0U2hvd10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3VzZU5hdGl2ZURyaXZlciwgc2V0VXNlTmF0aXZlRHJpdmVyXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxSTlRDb25maWd1cmF0aW9uQmxvY2s+XG4gICAgICAgIDxUb2dnbGVOYXRpdmVEcml2ZXJcbiAgICAgICAgICB2YWx1ZT17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3NldFVzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvUk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgPFJOVGVzdGVyQnV0dG9uIHRlc3RJRD1cInRvZ2dsZS1idXR0b25cIiBvblByZXNzPXsoKSA9PiBzZXRTaG93KCFzaG93KX0+XG4gICAgICAgIFByZXNzIHRvIHtzaG93ID8gJ0hpZGUnIDogJ1Nob3cnfVxuICAgICAgPC9STlRlc3RlckJ1dHRvbj5cbiAgICAgIHtzaG93ICYmIChcbiAgICAgICAgPEZhZGVJblZpZXcgdXNlTmF0aXZlRHJpdmVyPXt1c2VOYXRpdmVEcml2ZXJ9PlxuICAgICAgICAgIDxWaWV3IHRlc3RJRD1cImZhZGUtaW4tdmlld1wiIHN0eWxlPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgICAgICA8VGV4dD5GYWRlSW5WaWV3PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9GYWRlSW5WaWV3PlxuICAgICAgKX1cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnRmFkZUluVmlldycsXG4gIG5hbWU6ICdmYWRlSW5WaWV3JyxcbiAgZGVzY3JpcHRpb246ICgnVXNlcyBhIHNpbXBsZSB0aW1pbmcgYW5pbWF0aW9uIHRvICcgK1xuICAgICdicmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdoZW4gdGhlIGNvbXBvbmVudCAnICtcbiAgICAnbW91bnRzLic6IHN0cmluZyksXG4gIGV4cGVjdDpcbiAgICAnRmFkZUluVmlldyBib3ggc2hvdWxkIGFuaW1hdGUgZnJvbSBvcGFjaXR5IDAgdG8gMS4gXFxuRXhwZWN0IG5vIGFuaW1hdGlvbiB3aGVuIGhpZGluZy5cXG5IaWRpbmcgdGhlIHZpZXcgbWlkLWFuaW1hdGlvbiBzaG91bGQgbm90IGFmZmVjdCBuZXh0IGFuaW1hdGlvbi4nLFxuICByZW5kZXI6ICgpOiBSZWFjdC5Ob2RlID0+IDxGYWRlSW5FeGFtcGxlIC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0IFJOVENvbmZpZ3VyYXRpb25CbG9jayBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVENvbmZpZ3VyYXRpb25CbG9jayc7XG5pbXBvcnQgUk5UZXN0ZXJCdXR0b24gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlckJ1dHRvbic7XG5pbXBvcnQgVG9nZ2xlTmF0aXZlRHJpdmVyIGZyb20gJy4vdXRpbHMvVG9nZ2xlTmF0aXZlRHJpdmVyJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0FuaW1hdGVkLCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5leHBvcnQgZGVmYXVsdCAoe1xuICB0aXRsZTogJ0xvb3BpbmcgRXhhbXBsZScsXG4gIG5hbWU6ICdsb29waW5nVmlldycsXG4gIGRlc2NyaXB0aW9uOiAnTmF0aXZlIGxvb3BpbmcgYW5pbWF0aW9uIHRoYXQgc2hyaW5rcyBhbmQgZmFkZXMgb3V0IGEgdmlldy4nLFxuICByZW5kZXI6ICgpID0+IDxMb29waW5nRXhhbXBsZSAvPixcbn06IFJOVGVzdGVyTW9kdWxlRXhhbXBsZSk7XG5cbmZ1bmN0aW9uIExvb3BpbmdWaWV3KHtcbiAgdXNlTmF0aXZlRHJpdmVyLFxuICBydW5uaW5nLFxufToge1xuICB1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW4sXG4gIHJ1bm5pbmc6IGJvb2xlYW4sXG59KSB7XG4gIGNvbnN0IG9wYWNpdHkgPSBSZWFjdC51c2VNZW1vKCgpID0+IG5ldyBBbmltYXRlZC5WYWx1ZSgxKSwgW10pO1xuICBjb25zdCBzY2FsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gbmV3IEFuaW1hdGVkLlZhbHVlKDEpLCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJ1bm5pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICB0b1ZhbHVlOiAwLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyLFxuICAgIH07XG4gICAgY29uc3QgYW5pbWF0aW9uID0gQW5pbWF0ZWQubG9vcChcbiAgICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgICAgQW5pbWF0ZWQudGltaW5nKG9wYWNpdHksIG9wdGlvbnMpLFxuICAgICAgICBBbmltYXRlZC50aW1pbmcoc2NhbGUsIG9wdGlvbnMpLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBhbmltYXRpb24uc3RhcnQoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhbmltYXRpb24ucmVzZXQoKTtcbiAgICB9O1xuICB9LCBbb3BhY2l0eSwgc2NhbGUsIHJ1bm5pbmcsIHVzZU5hdGl2ZURyaXZlcl0pO1xuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVkLlZpZXcgc3R5bGU9e1tzdHlsZXMudmlldywge29wYWNpdHksIHRyYW5zZm9ybTogW3tzY2FsZX1dfV19PlxuICAgICAgPFRleHQ+TG9vcGluZyE8L1RleHQ+XG4gICAgPC9BbmltYXRlZC5WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBMb29waW5nRXhhbXBsZShwcm9wczoge30pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW3J1bm5pbmcsIHNldFJ1bm5pbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdXNlTmF0aXZlRHJpdmVyLCBzZXRVc2VOYXRpdmVEcml2ZXJdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8Uk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgICA8VG9nZ2xlTmF0aXZlRHJpdmVyXG4gICAgICAgICAgdmFsdWU9e3VzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXt2YWx1ZSA9PiB7XG4gICAgICAgICAgICBzZXRSdW5uaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHNldFVzZU5hdGl2ZURyaXZlcih2YWx1ZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvUk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgPFJOVGVzdGVyQnV0dG9uIG9uUHJlc3M9eygpID0+IHNldFJ1bm5pbmcoIXJ1bm5pbmcpfT5cbiAgICAgICAgUHJlc3MgdG8ge3J1bm5pbmcgPyAnUmVzZXQnIDogJ1N0YXJ0J31cbiAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICA8TG9vcGluZ1ZpZXdcbiAgICAgICAga2V5PXtgbG9vcGluZy12aWV3LSR7dXNlTmF0aXZlRHJpdmVyID8gJ25hdGl2ZScgOiAnanMnfS1kcml2ZXJgfVxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI9e3VzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgcnVubmluZz17cnVubmluZ31cbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHZpZXc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdkZWVwc2t5Ymx1ZScsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdkb2RnZXJibHVlJyxcbiAgICBib3JkZXJSYWRpdXM6IDEwLFxuICAgIHBhZGRpbmc6IDIwLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIG1hcmdpbjogMjAsXG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0IFJOVENvbmZpZ3VyYXRpb25CbG9jayBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVENvbmZpZ3VyYXRpb25CbG9jayc7XG5pbXBvcnQgUk5UZXN0ZXJCdXR0b24gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlckJ1dHRvbic7XG5pbXBvcnQgVG9nZ2xlTmF0aXZlRHJpdmVyIGZyb20gJy4vdXRpbHMvVG9nZ2xlTmF0aXZlRHJpdmVyJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QW5pbWF0ZWQsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5jb25zdCBjb250YWluZXJXaWR0aCA9IDIwMDtcbmNvbnN0IGJveFNpemUgPSA1MDtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250ZW50OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnZGVlcHNreWJsdWUnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnZG9kZ2VyYmx1ZScsXG4gICAgcGFkZGluZzogMjAsXG4gICAgbWFyZ2luOiAyMCxcbiAgICBib3JkZXJSYWRpdXM6IDEwLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgcGFkZGluZzogMzAsXG4gIH0sXG4gIGJveENvbnRhaW5lcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNkM2QzZDMnLFxuICAgIGhlaWdodDogYm94U2l6ZSxcbiAgICB3aWR0aDogY29udGFpbmVyV2lkdGgsXG4gIH0sXG4gIGJveDoge1xuICAgIHdpZHRoOiBib3hTaXplLFxuICAgIGhlaWdodDogYm94U2l6ZSxcbiAgICBtYXJnaW46IDAsXG4gIH0sXG4gIGJ1dHRvbnNDb250YWluZXI6IHtcbiAgICBtYXJnaW5Ub3A6IDIwLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIHdpZHRoOiBjb250YWluZXJXaWR0aCxcbiAgfSxcbn0pO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8fH0+O1xuXG5mdW5jdGlvbiBNb3ZpbmdCb3hWaWV3KHt1c2VOYXRpdmVEcml2ZXJ9OiB7dXNlTmF0aXZlRHJpdmVyOiBib29sZWFufSkge1xuICBjb25zdCB4ID0gUmVhY3QudXNlUmVmKG5ldyBBbmltYXRlZC5WYWx1ZSgwKSk7XG4gIGNvbnN0IFt1cGRhdGUsIHNldFVwZGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2JveFZpc2libGUsIHNldEJveFZpc2libGVdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG5cbiAgY29uc3QgbW92ZVRvID0gKHBvczogbnVtYmVyKSA9PiB7XG4gICAgQW5pbWF0ZWQudGltaW5nKHguY3VycmVudCwge1xuICAgICAgdG9WYWx1ZTogcG9zLFxuICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICB1c2VOYXRpdmVEcml2ZXIsXG4gICAgfSkuc3RhcnQoKTtcbiAgfTtcblxuICBjb25zdCB0b2dnbGVWaXNpYmlsaXR5ID0gKCkgPT4ge1xuICAgIHNldEJveFZpc2libGUoIWJveFZpc2libGUpO1xuICB9O1xuICBjb25zdCB0b2dnbGVUZXh0ID0gYm94VmlzaWJsZSA/ICdIaWRlJyA6ICdTaG93JztcbiAgY29uc3Qgb25SZXNldCA9ICgpID0+IHtcbiAgICB4LmN1cnJlbnQucmVzZXRBbmltYXRpb24oKTtcbiAgICBzZXRVcGRhdGUodXBkYXRlICsgMSk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPFZpZXcgdGVzdElEPVwibW92aW5nLXZpZXctdHJhY2tcIiBzdHlsZT17c3R5bGVzLmJveENvbnRhaW5lcn0+XG4gICAgICAgIHtib3hWaXNpYmxlID8gKFxuICAgICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJtb3Zpbmctdmlld1wiXG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBzdHlsZXMuY29udGVudCxcbiAgICAgICAgICAgICAgc3R5bGVzLmJveCxcbiAgICAgICAgICAgICAge3RyYW5zZm9ybTogW3t0cmFuc2xhdGVYOiB4LmN1cnJlbnR9XX0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFRleHQ+VGhlIGJveCB2aWV3IGlzIG5vdCBiZWluZyByZW5kZXJlZDwvVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgIDxSTlRlc3RlckJ1dHRvbiB0ZXN0SUQ9XCJtb3ZlLWxlZnQtYnV0dG9uXCIgb25QcmVzcz17KCkgPT4gbW92ZVRvKDApfT5cbiAgICAgICAgICB7JzwtJ31cbiAgICAgICAgPC9STlRlc3RlckJ1dHRvbj5cbiAgICAgICAgPFJOVGVzdGVyQnV0dG9uIG9uUHJlc3M9e3RvZ2dsZVZpc2liaWxpdHl9Pnt0b2dnbGVUZXh0fTwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICAgIDxSTlRlc3RlckJ1dHRvbiBvblByZXNzPXtvblJlc2V0fT5SZXNldDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICAgIDxSTlRlc3RlckJ1dHRvblxuICAgICAgICAgIHRlc3RJRD1cIm1vdmUtcmlnaHQtYnV0dG9uXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBtb3ZlVG8oY29udGFpbmVyV2lkdGggLSBib3hTaXplKX0+XG4gICAgICAgICAgeyctPid9XG4gICAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBNb3ZpbmdCb3hFeGFtcGxlKHByb3BzOiBQcm9wcyk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbdXNlTmF0aXZlRHJpdmVyLCBzZXRVc2VOYXRpdmVEcml2ZXJdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxSTlRDb25maWd1cmF0aW9uQmxvY2s+XG4gICAgICAgIDxUb2dnbGVOYXRpdmVEcml2ZXJcbiAgICAgICAgICB2YWx1ZT17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3NldFVzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvUk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgPE1vdmluZ0JveFZpZXdcbiAgICAgICAga2V5PXtgbW92aW5nLWJveC12aWV3LSR7dXNlTmF0aXZlRHJpdmVyID8gJ25hdGl2ZScgOiAnanMnfS1kcml2ZXJgfVxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI9e3VzZU5hdGl2ZURyaXZlcn1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnTW92aW5nIGJveCBleGFtcGxlJyxcbiAgbmFtZTogJ21vdmluZ1ZpZXcnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnQ2xpY2sgYXJyb3cgYnV0dG9ucyB0byBtb3ZlIHRoZSBib3guIEhpZGUgd2lsbCByZW1vdmUgdGhlIGJveCBmcm9tIGxheW91dC4nLFxuICBleHBlY3Q6XG4gICAgJ0R1cmluZyBhbmltYXRpb24sIHJlbW92aW5nIGJveCBmcm9tIGxheW91dCB3aWxsIHN0b3AgdGhlIGFuaW1hdGlvbiBhbmQgYm94IHdpbGwgc3RheSBpbiBpdHMgY3VycmVudCBwb3NpdGlvbi5cXG5TdGFydGluZyBhbmltYXRpb24gd2hlbiBib3ggaXMgbm90IHJlbmRlcmVkIGFuZCByZW5kZXJpbmcgbWlkLXdheSBkb2VzIG5vdCBhZmZlY3QgYW5pbWF0aW9uLlxcblJlc2V0IHdpbGwgcmVzZXQgdGhlIGFuaW1hdGlvbiB0byBpdHMgc3RhcnRpbmcgcG9zaXRpb24uJyxcbiAgcmVuZGVyOiAoKTogUmVhY3QuTm9kZSA9PiA8TW92aW5nQm94RXhhbXBsZSAvPixcbn06IFJOVGVzdGVyTW9kdWxlRXhhbXBsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBSTlRDb25maWd1cmF0aW9uQmxvY2sgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRDb25maWd1cmF0aW9uQmxvY2snO1xuaW1wb3J0IFJOVGVzdGVyQnV0dG9uIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJCdXR0b24nO1xuaW1wb3J0IFRvZ2dsZU5hdGl2ZURyaXZlciBmcm9tICcuL3V0aWxzL1RvZ2dsZU5hdGl2ZURyaXZlcic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0FuaW1hdGVkLCBTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvdGF0aW5nSW1hZ2U6IHtcbiAgICB3aWR0aDogNzAsXG4gICAgaGVpZ2h0OiA3MCxcbiAgfSxcbn0pO1xuXG5mdW5jdGlvbiBSb3RhdGluZ0ltYWdlc1ZpZXcoe3VzZU5hdGl2ZURyaXZlcn06IHt1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW59KSB7XG4gIGNvbnN0IGFuaW0gPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMCk7XG4gIGNvbnN0IHJvdGF0aW5nQW5pbWF0aW9uID0gQW5pbWF0ZWQuc3ByaW5nKGFuaW0sIHtcbiAgICAvLyBSZXR1cm5zIHRvIHRoZSBzdGFydFxuICAgIHRvVmFsdWU6IDAsXG5cbiAgICAvLyBWZWxvY2l0eSBtYWtlcyBpdCBtb3ZlXG4gICAgdmVsb2NpdHk6IDMsXG5cbiAgICAvLyBTbG93XG4gICAgdGVuc2lvbjogLTEwLFxuXG4gICAgLy8gT3NjaWxsYXRlIGEgbG90XG4gICAgZnJpY3Rpb246IDEsXG4gICAgdXNlTmF0aXZlRHJpdmVyLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Uk5UZXN0ZXJCdXR0b25cbiAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgIHJvdGF0aW5nQW5pbWF0aW9uLnN0YXJ0KCk7XG4gICAgICAgIH19PlxuICAgICAgICBQcmVzcyB0byBTcGluIGl0IVxuICAgICAgPC9STlRlc3RlckJ1dHRvbj5cbiAgICAgIDxBbmltYXRlZC5JbWFnZVxuICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy9idW5ueS5wbmcnKX1cbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMucm90YXRpbmdJbWFnZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNjYWxlOiBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMSwgMTBdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlWDogYW5pbS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWzAsIDEwMF0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb3RhdGU6IGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFtcbiAgICAgICAgICAgICAgICAgICAgJzBkZWcnLFxuICAgICAgICAgICAgICAgICAgICAnMzYwZGVnJywgLy8gJ2RlZycgb3IgJ3JhZCdcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF19XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBSb3RhdGluZ0ltYWdlc0V4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFt1c2VOYXRpdmVEcml2ZXIsIHNldFVzZU5hdGl2ZURyaXZlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxSTlRDb25maWd1cmF0aW9uQmxvY2s+XG4gICAgICAgIDxUb2dnbGVOYXRpdmVEcml2ZXJcbiAgICAgICAgICB2YWx1ZT17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3NldFVzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvUk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgPFJvdGF0aW5nSW1hZ2VzVmlld1xuICAgICAgICBrZXk9e2Byb3RhdGluZy1pbWFnZXMtdmlldy0ke3VzZU5hdGl2ZURyaXZlciA/ICduYXRpdmUnIDogJ2pzJ30tZHJpdmVyYH1cbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyPXt1c2VOYXRpdmVEcml2ZXJ9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgdGl0bGU6ICdSb3RhdGluZyBJbWFnZXMnLFxuICBuYW1lOiAncm90YXRpbmdJbWFnZXMnLFxuICBkZXNjcmlwdGlvbjogJ1NpbXBsZSBBbmltYXRlZC5JbWFnZSByb3RhdGlvbi4nLFxuICBleHBlY3Q6XG4gICAgJ1RyYW5zZm9ybSBhbmltYXRpb24gb24gaW1hZ2UgaW4gc2NhbGUsIHJvdGF0aW9uLCBhbmQgdHJhbnNsYXRpb24uIEpTIGRyaXZlciB3aWxsIGlnbm9yZSBhbnkgY2FsbHMgdG8gYHN0YXJ0YCBvbiBydW5uaW5nIGFuaW1hdGlvbi4gTmF0aXZlIGRyaXZlciB3aWxsIHJlLXN0YXJ0IHRoZSBhbmltYXRpb24uJyxcbiAgcmVuZGVyOiBSb3RhdGluZ0ltYWdlc0V4YW1wbGUsXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgUk5UQ29uZmlndXJhdGlvbkJsb2NrIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UQ29uZmlndXJhdGlvbkJsb2NrJztcbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCBUb2dnbGVOYXRpdmVEcml2ZXIgZnJvbSAnLi91dGlscy9Ub2dnbGVOYXRpdmVEcml2ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtBbmltYXRlZCwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250ZW50OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnZGVlcHNreWJsdWUnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnZG9kZ2VyYmx1ZScsXG4gICAgcGFkZGluZzogMjAsXG4gICAgbWFyZ2luOiAyMCxcbiAgICBib3JkZXJSYWRpdXM6IDEwLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybUJvdW5jZVZpZXcoe3VzZU5hdGl2ZURyaXZlcn06IHt1c2VOYXRpdmVEcml2ZXI6IGJvb2xlYW59KSB7XG4gIGNvbnN0IGFuaW0gPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMCk7XG4gIGNvbnN0IGJvdW5jZUFuaW1hdGlvbiA9IEFuaW1hdGVkLnNwcmluZyhhbmltLCB7XG4gICAgLy8gUmV0dXJucyB0byB0aGUgc3RhcnRcbiAgICB0b1ZhbHVlOiAwLFxuXG4gICAgLy8gVmVsb2NpdHkgbWFrZXMgaXQgbW92ZVxuICAgIHZlbG9jaXR5OiAzLFxuXG4gICAgLy8gU2xvd1xuICAgIHRlbnNpb246IC0xMCxcblxuICAgIC8vIE9zY2lsbGF0ZSBhIGxvdFxuICAgIGZyaWN0aW9uOiAxLFxuXG4gICAgdXNlTmF0aXZlRHJpdmVyLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Uk5UZXN0ZXJCdXR0b25cbiAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgIGJvdW5jZUFuaW1hdGlvbi5zdGFydCgpO1xuICAgICAgICB9fT5cbiAgICAgICAgUHJlc3MgdG8gRmxpbmcgaXQhXG4gICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMuY29udGVudCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IFtcbiAgICAgICAgICAgICAgLy8gQXJyYXkgb3JkZXIgbWF0dGVyc1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2NhbGU6IGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsxLCA0XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVg6IGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFswLCA1MDBdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm90YXRlOiBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbXG4gICAgICAgICAgICAgICAgICAgICcwZGVnJyxcbiAgICAgICAgICAgICAgICAgICAgJzM2MGRlZycsIC8vICdkZWcnIG9yICdyYWQnXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdfT5cbiAgICAgICAgPFRleHQ+VHJhbnNmb3JtcyE8L1RleHQ+XG4gICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybUJvdW5jZUV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFt1c2VOYXRpdmVEcml2ZXIsIHNldFVzZU5hdGl2ZURyaXZlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxSTlRDb25maWd1cmF0aW9uQmxvY2s+XG4gICAgICAgIDxUb2dnbGVOYXRpdmVEcml2ZXJcbiAgICAgICAgICB2YWx1ZT17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3NldFVzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvUk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgPFRyYW5zZm9ybUJvdW5jZVZpZXdcbiAgICAgICAga2V5PXtgdHJhbnNmb3JtLWJvdW5jZS12aWV3LSR7XG4gICAgICAgICAgdXNlTmF0aXZlRHJpdmVyID8gJ25hdGl2ZScgOiAnanMnXG4gICAgICAgIH0tZHJpdmVyYH1cbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyPXt1c2VOYXRpdmVEcml2ZXJ9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgdGl0bGU6ICdUcmFuc2Zvcm0gQm91bmNlJyxcbiAgbmFtZTogJ3RyYW5zZm9ybUJvdW5jZScsXG4gIGV4cGVjdDogJ1RyYW5zZm9ybSBhbmltYXRpb24gb24gcm90YXRpb24sIHRyYW5zbGF0aW9uLCBzY2FsZSBvZiBWaWV3JyxcbiAgZGVzY3JpcHRpb246ICgnT25lIGBBbmltYXRlZC5WYWx1ZWAgaXMgZHJpdmVuIGJ5IGEgJyArXG4gICAgJ3NwcmluZyB3aXRoIGN1c3RvbSBjb25zdGFudHMgYW5kIG1hcHBlZCB0byBhbiAnICtcbiAgICAnb3JkZXJlZCBzZXQgb2YgdHJhbnNmb3Jtcy4gIEVhY2ggdHJhbnNmb3JtIGhhcyAnICtcbiAgICAnYW4gaW50ZXJwb2xhdGlvbiB0byBjb252ZXJ0IHRoZSB2YWx1ZSBpbnRvIHRoZSAnICtcbiAgICAncmlnaHQgcmFuZ2UgYW5kIHVuaXRzLic6IHN0cmluZyksXG4gIHJlbmRlcjogKCkgPT4gPFRyYW5zZm9ybUJvdW5jZUV4YW1wbGUgLz4sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgUk5UQ29uZmlndXJhdGlvbkJsb2NrIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UQ29uZmlndXJhdGlvbkJsb2NrJztcbmltcG9ydCBSTlRlc3RlckJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyQnV0dG9uJztcbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgUk5UT3B0aW9uIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UT3B0aW9uJztcbmltcG9ydCBUb2dnbGVOYXRpdmVEcml2ZXIgZnJvbSAnLi91dGlscy9Ub2dnbGVOYXRpdmVEcml2ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtBbmltYXRlZCwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3QgdHJhbnNmb3JtUHJvcGVydGllcyA9IHtcbiAgcm90YXRlOiB7b3V0cHV0UmFuZ2U6IFsnMGRlZycsICczNjBkZWcnXSwgc2VsZWN0ZWQ6IGZhbHNlfSxcbiAgcm90YXRlWDoge291dHB1dFJhbmdlOiBbJzBkZWcnLCAnMzYwZGVnJ10sIHNlbGVjdGVkOiBmYWxzZX0sXG4gIHJvdGF0ZVk6IHtvdXRwdXRSYW5nZTogWycwZGVnJywgJzM2MGRlZyddLCBzZWxlY3RlZDogZmFsc2V9LFxuICByb3RhdGVaOiB7b3V0cHV0UmFuZ2U6IFsnMGRlZycsICczNjBkZWcnXSwgc2VsZWN0ZWQ6IGZhbHNlfSxcbiAgc2tld1g6IHtvdXRwdXRSYW5nZTogWycwZGVnJywgJzQ1ZGVnJ10sIHNlbGVjdGVkOiBmYWxzZX0sXG4gIHNrZXdZOiB7b3V0cHV0UmFuZ2U6IFsnMGRlZycsICc0NWRlZyddLCBzZWxlY3RlZDogZmFsc2V9LFxuICBwZXJzcGVjdGl2ZToge291dHB1dFJhbmdlOiBbMSwgMl0sIHNlbGVjdGVkOiBmYWxzZX0sXG4gIHNjYWxlOiB7b3V0cHV0UmFuZ2U6IFsxLCAzXSwgc2VsZWN0ZWQ6IGZhbHNlfSxcbiAgc2NhbGVYOiB7b3V0cHV0UmFuZ2U6IFsxLCAzXSwgc2VsZWN0ZWQ6IGZhbHNlfSxcbiAgc2NhbGVZOiB7b3V0cHV0UmFuZ2U6IFsxLCAzXSwgc2VsZWN0ZWQ6IGZhbHNlfSxcbiAgdHJhbnNsYXRlWDoge291dHB1dFJhbmdlOiBbMCwgMTAwXSwgc2VsZWN0ZWQ6IGZhbHNlfSxcbiAgdHJhbnNsYXRlWToge291dHB1dFJhbmdlOiBbMCwgMTAwXSwgc2VsZWN0ZWQ6IGZhbHNlfSxcbn07XG5cbmZ1bmN0aW9uIEFuaW1hdGVkVmlldyh7XG4gIHByb3BlcnRpZXMsXG4gIHVzZU5hdGl2ZURyaXZlcixcbn06IHtcbiAgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPixcbiAgdXNlTmF0aXZlRHJpdmVyOiBib29sZWFuLFxufSkge1xuICBjb25zdCBhbmltYXRlZFZhbHVlID0gbmV3IEFuaW1hdGVkLlZhbHVlKDApO1xuICBjb25zdCB0cmFuc2Zvcm1TdHlsZXMgPSBwcm9wZXJ0aWVzLm1hcChwcm9wZXJ0eSA9PiAoe1xuICAgIFtwcm9wZXJ0eV06IGFuaW1hdGVkVmFsdWUuaW50ZXJwb2xhdGUoe1xuICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgb3V0cHV0UmFuZ2U6IHRyYW5zZm9ybVByb3BlcnRpZXNbcHJvcGVydHldLm91dHB1dFJhbmdlLFxuICAgIH0pLFxuICB9KSk7XG4gIGNvbnN0IGFuaW1hdGlvbiA9IEFuaW1hdGVkLnNlcXVlbmNlKFtcbiAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRWYWx1ZSwge1xuICAgICAgdG9WYWx1ZTogMSxcbiAgICAgIGR1cmF0aW9uOiA1MDAsXG4gICAgICB1c2VOYXRpdmVEcml2ZXIsXG4gICAgfSksXG4gICAgQW5pbWF0ZWQudGltaW5nKGFuaW1hdGVkVmFsdWUsIHtcbiAgICAgIHRvVmFsdWU6IDAsXG4gICAgICBkdXJhdGlvbjogNTAwLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyLFxuICAgIH0pLFxuICBdKTtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFJOVGVzdGVyQnV0dG9uXG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBhbmltYXRpb24ucmVzZXQoKTtcbiAgICAgICAgICBhbmltYXRpb24uc3RhcnQoKTtcbiAgICAgICAgfX0+XG4gICAgICAgIEFwcGx5IFNlbGVjdGVkIFRyYW5zZm9ybXNcbiAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICBzdHlsZT17W3N0eWxlcy5hbmltYXRlZFZpZXcsIHt0cmFuc2Zvcm06IHRyYW5zZm9ybVN0eWxlc31dfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQW5pbWF0ZWRUcmFuc2Zvcm1TdHlsZUV4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IFtwcm9wZXJ0aWVzLCBzZXRQcm9wZXJ0aWVzXSA9IFJlYWN0LnVzZVN0YXRlKHRyYW5zZm9ybVByb3BlcnRpZXMpO1xuICBjb25zdCBbdXNlTmF0aXZlRHJpdmVyLCBzZXRVc2VOYXRpdmVEcml2ZXJdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBvblRvZ2dsZSA9IChwcm9wZXJ0eTogc3RyaW5nKSA9PlxuICAgIHNldFByb3BlcnRpZXMoe1xuICAgICAgLi4ucHJvcGVydGllcyxcbiAgICAgIFtwcm9wZXJ0eV06IHtcbiAgICAgICAgLi4ucHJvcGVydGllc1twcm9wZXJ0eV0sXG4gICAgICAgIHNlbGVjdGVkOiAhcHJvcGVydGllc1twcm9wZXJ0eV0uc2VsZWN0ZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoUk5UZXN0ZXJUaGVtZUNvbnRleHQpO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8Uk5UQ29uZmlndXJhdGlvbkJsb2NrPlxuICAgICAgICA8VG9nZ2xlTmF0aXZlRHJpdmVyXG4gICAgICAgICAgdmFsdWU9e3VzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtzZXRVc2VOYXRpdmVEcml2ZXJ9XG4gICAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMuYm90dG9tU2VwYXJhdGlvbiwge1xuICAgICAgICAgICAgYm9yZGVyQm90dG9tQ29sb3I6IHRoZW1lLlNlcGFyYXRvckNvbG9yLFxuICAgICAgICAgIH0pfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLm9wdGlvbnNUaXRsZX0+U2VsZWN0ZWQgU3R5bGVzPC9UZXh0PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLm9wdGlvbnN9PlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5tYXAocHJvcGVydHkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFJOVE9wdGlvblxuICAgICAgICAgICAgICAgIGtleT17cHJvcGVydHl9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3Byb3BlcnR5fVxuICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3Byb3BlcnRpZXNbcHJvcGVydHldLnNlbGVjdGVkfVxuICAgICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMub3B0aW9ufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9STlRDb25maWd1cmF0aW9uQmxvY2s+XG4gICAgICA8QW5pbWF0ZWRWaWV3XG4gICAgICAgIGtleT17YGFuaW1hdGVkLXZpZXctdXNlLSR7dXNlTmF0aXZlRHJpdmVyID8gJ25hdGl2ZScgOiAnanMnfS1kcml2ZXJgfVxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI9e3VzZU5hdGl2ZURyaXZlcn1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF1cbiAgICAgICAgcHJvcGVydGllcz17T2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKFxuICAgICAgICAgIHByb3BlcnR5ID0+IHByb3BlcnRpZXNbcHJvcGVydHldLnNlbGVjdGVkLFxuICAgICAgICApfVxuICAgICAgLz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuc2VjdGlvbn0+XG4gICAgICAgIDxUZXh0PnsnU2hvdWxkIG5vdCBjcmFzaCB3aGVuIHRyYW5zZm9ybSBzdHlsZSBrZXkgaXMgdW5kZWZpbmVkJ308L1RleHQ+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3IHN0eWxlPXtbc3R5bGVzLmFuaW1hdGVkVmlldywge3RyYW5zZm9ybTogdW5kZWZpbmVkfV19IC8+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIG9wdGlvbnNUaXRsZToge1xuICAgIG1hcmdpblRvcDogNCxcbiAgICBtYXJnaW5Cb3R0b206IDYsXG4gIH0sXG4gIG9wdGlvbnM6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICB9LFxuICBvcHRpb246IHtcbiAgICBtYXJnaW46IDIsXG4gIH0sXG4gIGFuaW1hdGVkVmlldzoge1xuICAgIGhlaWdodDogMTAwLFxuICAgIHdpZHRoOiAxMDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmx1ZScsXG4gIH0sXG4gIGJvdHRvbVNlcGFyYXRpb246IHtcbiAgICBwYWRkaW5nQm90dG9tOiA2LFxuICAgIG1hcmdpbkJvdHRvbTogNixcbiAgICBib3JkZXJCb3R0b21XaWR0aDogMSxcbiAgfSxcbiAgc2VjdGlvbjoge1xuICAgIG1hcmdpblRvcDogMjAsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgdGl0bGU6ICdUcmFuc2Zvcm0gU3R5bGVzJyxcbiAgbmFtZTogJ3RyYW5zZm9ybVN0eWxlcycsXG4gIGRlc2NyaXB0aW9uOiAnVmFyaWF0aW9ucyBvZiB0cmFuc2Zvcm0gc3R5bGVzLicsXG4gIHJlbmRlcjogKCkgPT4gPEFuaW1hdGVkVHJhbnNmb3JtU3R5bGVFeGFtcGxlIC8+LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgQW5FeFNldCA9IHJlcXVpcmUoJy4vQW5FeFNldCcpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBBbmltYXRlZCxcbiAgTGF5b3V0QW5pbWF0aW9uLFxuICBQYW5SZXNwb25kZXIsXG4gIFN0eWxlU2hlZXQsXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNvbnN0IENJUkNMRV9TSVpFID0gODA7XG5jb25zdCBDSVJDTEVfTUFSR0lOID0gMTg7XG5jb25zdCBOVU1fQ0lSQ0xFUyA9IDMwO1xuXG5jbGFzcyBDaXJjbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgbG9uZ1RpbWVyOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IE9iamVjdCk6IHZvaWQge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICAgIHBhbjogbmV3IEFuaW1hdGVkLlZhbHVlWFkoKSwgLy8gVmVjdG9ycyByZWR1Y2UgYm9pbGVycGxhdGUuICAoc3RlcDE6IHVuY29tbWVudClcbiAgICAgIHBvcDogbmV3IEFuaW1hdGVkLlZhbHVlKDApLCAvLyBJbml0aWFsIHZhbHVlLiAgICAgICAgICAgICAgIChzdGVwMmE6IHVuY29tbWVudClcbiAgICB9O1xuICB9XG5cbiAgX29uTG9uZ1ByZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt0ZW5zaW9uOiA0MCwgZnJpY3Rpb246IDN9O1xuICAgIHRoaXMuc3RhdGUucGFuLmFkZExpc3RlbmVyKHZhbHVlID0+IHtcbiAgICAgIC8vIEFzeW5jIGxpc3RlbmVyIGZvciBzdGF0ZSBjaGFuZ2VzICAoc3RlcDE6IHVuY29tbWVudClcbiAgICAgIHRoaXMucHJvcHMub25Nb3ZlICYmIHRoaXMucHJvcHMub25Nb3ZlKHZhbHVlKTtcbiAgICB9KTtcbiAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS5wb3AsIHtcbiAgICAgIC8vICBQb3AgdG8gbGFyZ2VyIHNpemUuICAgICAgICAgICAgICAgICAgICAgIChzdGVwMmI6IHVuY29tbWVudClcbiAgICAgIHRvVmFsdWU6IDEsXG5cbiAgICAgIC8vICBSZXVzZSBjb25maWcgZm9yIGNvbnZlbmllbnQgY29uc2lzdGVuY3kgIChzdGVwMmI6IHVuY29tbWVudClcbiAgICAgIC4uLmNvbmZpZyxcblxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICB9KS5zdGFydCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHBhblJlc3BvbmRlcjogUGFuUmVzcG9uZGVyLmNyZWF0ZSh7XG4gICAgICAgICAgb25QYW5SZXNwb25kZXJNb3ZlOiBBbmltYXRlZC5ldmVudChcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgbnVsbCwgLy8gbmF0aXZlIGV2ZW50IC0gaWdub3JlICAgICAgKHN0ZXAxOiB1bmNvbW1lbnQpXG4gICAgICAgICAgICAgIHtkeDogdGhpcy5zdGF0ZS5wYW4ueCwgZHk6IHRoaXMuc3RhdGUucGFuLnl9LCAvLyBsaW5rcyBwYW4gdG8gZ2VzdHVyZVN0YXRlICAoc3RlcDE6IHVuY29tbWVudClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB7dXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0sXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvblBhblJlc3BvbmRlclJlbGVhc2U6IChlLCBnZXN0dXJlU3RhdGUpID0+IHtcbiAgICAgICAgICAgIExheW91dEFuaW1hdGlvbi5lYXNlSW5FYXNlT3V0KCk7IC8vIEBmbG93Zml4bWUgYW5pbWF0ZXMgbGF5b3V0IHVwZGF0ZSBhcyBvbmUgYmF0Y2ggKHN0ZXAzOiB1bmNvbW1lbnQpXG4gICAgICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS5wb3AsIHtcbiAgICAgICAgICAgICAgLy8gUG9wIGJhY2sgdG8gMCAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAyYzogdW5jb21tZW50KVxuICAgICAgICAgICAgICB0b1ZhbHVlOiAwLFxuXG4gICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtwYW5SZXNwb25kZXI6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbk1vdmUgJiZcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbk1vdmUoe1xuICAgICAgICAgICAgICAgIHg6IGdlc3R1cmVTdGF0ZS5keCArIHRoaXMucHJvcHMucmVzdExheW91dC54LFxuICAgICAgICAgICAgICAgIHk6IGdlc3R1cmVTdGF0ZS5keSArIHRoaXMucHJvcHMucmVzdExheW91dC55LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25EZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnBhbi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMub25BY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBsZXQgaGFuZGxlcnM7XG4gICAgbGV0IGRyYWdTdHlsZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuc3RhdGUucGFuUmVzcG9uZGVyKSB7XG4gICAgICBoYW5kbGVycyA9IHRoaXMuc3RhdGUucGFuUmVzcG9uZGVyLnBhbkhhbmRsZXJzO1xuICAgICAgZHJhZ1N0eWxlID0ge1xuICAgICAgICAvLyAgVXNlZCB0byBwb3NpdGlvbiB3aGlsZSBkcmFnZ2luZ1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywgLy8gIEhvaXN0IG91dCBvZiBsYXlvdXQgICAgICAgICAgICAgICAgICAgIChzdGVwMTogdW5jb21tZW50KVxuICAgICAgICAuLi50aGlzLnN0YXRlLnBhbi5nZXRMYXlvdXQoKSwgLy8gIENvbnZlbmllbmNlIGNvbnZlcnRlciAgICAgICAgICAgICAgICAgIChzdGVwMTogdW5jb21tZW50KVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlcnMgPSB7XG4gICAgICAgIG9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXI6ICgpID0+ICF0aGlzLnN0YXRlLmlzQWN0aXZlLFxuICAgICAgICBvblJlc3BvbmRlckdyYW50OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGF0ZS5wYW4uc2V0VmFsdWUoe3g6IDAsIHk6IDB9KTsgLy8gcmVzZXQgICAgICAgICAgICAgICAgKHN0ZXAxOiB1bmNvbW1lbnQpXG4gICAgICAgICAgdGhpcy5zdGF0ZS5wYW4uc2V0T2Zmc2V0KHRoaXMucHJvcHMucmVzdExheW91dCk7IC8vIG9mZnNldCBmcm9tIG9uTGF5b3V0IChzdGVwMTogdW5jb21tZW50KVxuICAgICAgICAgIC8qICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdICg+PTAuNjMuMCBzaXRlPXJlYWN0X25hdGl2ZV9mYikgVGhpc1xuICAgICAgICAgICAqIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuNjMgd2FzIGRlcGxveWVkLiBUb1xuICAgICAgICAgICAqIHNlZSB0aGUgZXJyb3IgZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuICovXG4gICAgICAgICAgdGhpcy5sb25nVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX29uTG9uZ1ByZXNzLCAzMDApO1xuICAgICAgICB9LFxuICAgICAgICBvblJlc3BvbmRlclJlbGVhc2U6ICgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuc3RhdGUucGFuUmVzcG9uZGVyKSB7XG4gICAgICAgICAgICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSAoPj0wLjYzLjAgc2l0ZT1yZWFjdF9uYXRpdmVfZmIpXG4gICAgICAgICAgICAgKiBUaGlzIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuNjMgd2FzXG4gICAgICAgICAgICAgKiBkZXBsb3llZC4gVG8gc2VlIHRoZSBlcnJvciBkZWxldGUgdGhpcyBjb21tZW50IGFuZCBydW4gRmxvdy4gKi9cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvbmdUaW1lcik7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVJc0FjdGl2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGVkU3R5bGU6IE9iamVjdCA9IHtcbiAgICAgIHNoYWRvd09wYWNpdHk6IHRoaXMuc3RhdGUucG9wLCAvLyBubyBuZWVkIGZvciBpbnRlcnBvbGF0aW9uICAgICAgICAgICAgKHN0ZXAyZDogdW5jb21tZW50KVxuICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzY2FsZTogdGhpcy5zdGF0ZS5wb3AuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsxLCAxLjNdLCAvLyBzY2FsZSB1cCBmcm9tIDEgdG8gMS4zICAgICAgICAgICAgICAgKHN0ZXAyZDogdW5jb21tZW50KVxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGNvbnN0IG9wZW5WYWwgPSB0aGlzLnByb3BzLm9wZW5WYWw7XG4gICAgbGV0IGlubmVyT3BlblN0eWxlID0gbnVsbDtcbiAgICBpZiAodGhpcy5wcm9wcy5kdW1teSkge1xuICAgICAgYW5pbWF0ZWRTdHlsZS5vcGFjaXR5ID0gMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuaXNBY3RpdmUpIHtcbiAgICAgIGlubmVyT3BlblN0eWxlID0gW1xuICAgICAgICBzdHlsZXMub3BlbixcbiAgICAgICAge1xuICAgICAgICAgIC8vIChzdGVwNDogdW5jb21tZW50KVxuICAgICAgICAgIGxlZnQ6IG9wZW5WYWwuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFt0aGlzLnByb3BzLnJlc3RMYXlvdXQueCwgMF0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdG9wOiBvcGVuVmFsLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbdGhpcy5wcm9wcy5yZXN0TGF5b3V0LnksIDBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHdpZHRoOiBvcGVuVmFsLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbQ0lSQ0xFX1NJWkUsIHRoaXMucHJvcHMuY29udGFpbmVyTGF5b3V0LndpZHRoXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWlnaHQ6IG9wZW5WYWwuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFtDSVJDTEVfU0laRSwgdGhpcy5wcm9wcy5jb250YWluZXJMYXlvdXQuaGVpZ2h0XSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXJnaW46IG9wZW5WYWwuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFtDSVJDTEVfTUFSR0lOLCAwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IG9wZW5WYWwuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgaW5wdXRSYW5nZTogWy0wLjE1LCAwLCAwLjUsIDFdLFxuICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFswLCBDSVJDTEVfU0laRSAvIDIsIENJUkNMRV9TSVpFICogMS4zLCAwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICBvbkxheW91dD17dGhpcy5wcm9wcy5vbkxheW91dH1cbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMuZHJhZ1ZpZXcsXG4gICAgICAgICAgZHJhZ1N0eWxlLFxuICAgICAgICAgIGFuaW1hdGVkU3R5bGUsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5pc0FjdGl2ZSA/IHN0eWxlcy5vcGVuIDogbnVsbCxcbiAgICAgICAgXX1cbiAgICAgICAgey4uLmhhbmRsZXJzfT5cbiAgICAgICAgPEFuaW1hdGVkLlZpZXcgc3R5bGU9e1tzdHlsZXMuY2lyY2xlLCBpbm5lck9wZW5TdHlsZV19PlxuICAgICAgICAgIDxBbkV4U2V0XG4gICAgICAgICAgICBjb250YWluZXJMYXlvdXQ9e3RoaXMucHJvcHMuY29udGFpbmVyTGF5b3V0fVxuICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICBpc0FjdGl2ZT17dGhpcy5zdGF0ZS5pc0FjdGl2ZX1cbiAgICAgICAgICAgIG9wZW5WYWw9e3RoaXMucHJvcHMub3BlblZhbH1cbiAgICAgICAgICAgIG9uRGlzbWlzcz17dGhpcy5fdG9nZ2xlSXNBY3RpdmV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgICk7XG4gIH1cbiAgX3RvZ2dsZUlzQWN0aXZlID0gKHZlbG9jaXR5OiB2b2lkKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0ge3RlbnNpb246IDMwLCBmcmljdGlvbjogN307XG4gICAgaWYgKHRoaXMuc3RhdGUuaXNBY3RpdmUpIHtcbiAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnByb3BzLm9wZW5WYWwsIHtcbiAgICAgICAgdG9WYWx1ZTogMCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgfSkuc3RhcnQoKCkgPT4ge1xuICAgICAgICAvLyAoc3RlcDQ6IHVuY29tbWVudClcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNBY3RpdmU6IGZhbHNlfSwgdGhpcy5wcm9wcy5vbkRlYWN0aXZhdGUpO1xuICAgICAgfSk7IC8vIChzdGVwNDogdW5jb21tZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLm9uQWN0aXZhdGUoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2lzQWN0aXZlOiB0cnVlLCBwYW5SZXNwb25kZXI6IHVuZGVmaW5lZH0sICgpID0+IHtcbiAgICAgICAgLy8gdGhpcy5wcm9wcy5vcGVuVmFsLnNldFZhbHVlKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChzdGVwNDogY29tbWVudClcbiAgICAgICAgQW5pbWF0ZWQuc3ByaW5nKHRoaXMucHJvcHMub3BlblZhbCwge1xuICAgICAgICAgIHRvVmFsdWU6IDEsXG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgIH0pLnN0YXJ0KCk7IC8vIChzdGVwNDogdW5jb21tZW50KVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5jbGFzcyBBbkV4QXBwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IE5VTV9DSVJDTEVTOyBpZHgrKykge1xuICAgICAga2V5cy5wdXNoKCdFJyArIGlkeCk7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBrZXlzLFxuICAgICAgcmVzdExheW91dHM6IFtdLFxuICAgICAgb3BlblZhbDogbmV3IEFuaW1hdGVkLlZhbHVlKDApLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuc3RhdGUua2V5cy5tYXAoKGtleSwgaWR4KSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSB0aGlzLnN0YXRlLmFjdGl2ZUtleSkge1xuICAgICAgICByZXR1cm4gPENpcmNsZSBrZXk9e2tleSArICdkJ30gZHVtbXk9e3RydWV9IC8+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG9uTGF5b3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnJlc3RMYXlvdXRzW2lkeF0pIHtcbiAgICAgICAgICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdIFRoZSB0eXBlIGFubm90YXRpb24ocykgcmVxdWlyZWQgYnlcbiAgICAgICAgICAgKiBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgICAgICAgICAvKiAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF0gVGhlICd0aGlzJyB0eXBlIGFubm90YXRpb24ocylcbiAgICAgICAgICAgKiByZXF1aXJlZCBieSBGbG93J3MgTFRJIHVwZGF0ZSBjb3VsZCBub3QgYmUgYWRkZWQgdmlhIGNvZGVtb2QgKi9cbiAgICAgICAgICBvbkxheW91dCA9IGZ1bmN0aW9uIChpbmRleCwgZSkge1xuICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gZS5uYXRpdmVFdmVudC5sYXlvdXQ7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgc3RhdGUucmVzdExheW91dHNbaW5kZXhdID0gbGF5b3V0O1xuICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LmJpbmQodGhpcywgaWR4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxDaXJjbGVcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgaWQ9e2tleX1cbiAgICAgICAgICAgIG9wZW5WYWw9e3RoaXMuc3RhdGUub3BlblZhbH1cbiAgICAgICAgICAgIG9uTGF5b3V0PXtvbkxheW91dH1cbiAgICAgICAgICAgIHJlc3RMYXlvdXQ9e3RoaXMuc3RhdGUucmVzdExheW91dHNbaWR4XX1cbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIG9uQWN0aXZhdGU9e3RoaXMuc2V0U3RhdGUuYmluZCh0aGlzLCB7XG4gICAgICAgICAgICAgIGFjdGl2ZUtleToga2V5LFxuICAgICAgICAgICAgICBhY3RpdmVJbml0aWFsTGF5b3V0OiB0aGlzLnN0YXRlLnJlc3RMYXlvdXRzW2lkeF0sXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnN0YXRlLmFjdGl2ZUtleSkge1xuICAgICAgY2lyY2xlcy5wdXNoKFxuICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgIGtleT1cImRhcmtcIlxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmRhcmtlbmluZywge29wYWNpdHk6IHRoaXMuc3RhdGUub3BlblZhbH1dfVxuICAgICAgICAvPixcbiAgICAgICk7XG4gICAgICBjaXJjbGVzLnB1c2goXG4gICAgICAgIDxDaXJjbGVcbiAgICAgICAgICBvcGVuVmFsPXt0aGlzLnN0YXRlLm9wZW5WYWx9XG4gICAgICAgICAga2V5PXt0aGlzLnN0YXRlLmFjdGl2ZUtleX1cbiAgICAgICAgICBpZD17dGhpcy5zdGF0ZS5hY3RpdmVLZXl9XG4gICAgICAgICAgcmVzdExheW91dD17dGhpcy5zdGF0ZS5hY3RpdmVJbml0aWFsTGF5b3V0fVxuICAgICAgICAgIGNvbnRhaW5lckxheW91dD17dGhpcy5zdGF0ZS5sYXlvdXR9XG4gICAgICAgICAgb25Nb3ZlPXt0aGlzLl9vbk1vdmV9XG4gICAgICAgICAgb25EZWFjdGl2YXRlPXsoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHthY3RpdmVLZXk6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+LFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmdyaWR9XG4gICAgICAgICAgb25MYXlvdXQ9e2UgPT4gdGhpcy5zZXRTdGF0ZSh7bGF5b3V0OiBlLm5hdGl2ZUV2ZW50LmxheW91dH0pfT5cbiAgICAgICAgICB7Y2lyY2xlc31cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBfb25Nb3ZlID0gKHBvc2l0aW9uOiBQb2ludCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG5ld0tleXMgPSBtb3ZlVG9DbG9zZXN0KHRoaXMuc3RhdGUsIHBvc2l0aW9uKTtcbiAgICBpZiAobmV3S2V5cyAhPT0gdGhpcy5zdGF0ZS5rZXlzKSB7XG4gICAgICBMYXlvdXRBbmltYXRpb24uZWFzZUluRWFzZU91dCgpOyAvLyBhbmltYXRlcyBsYXlvdXQgdXBkYXRlIGFzIG9uZSBiYXRjaCAoc3RlcDM6IHVuY29tbWVudClcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2tleXM6IG5ld0tleXN9KTtcbiAgICB9XG4gIH07XG59XG5cbnR5cGUgUG9pbnQgPSB7XG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICAuLi5cbn07XG5mdW5jdGlvbiBkaXN0YW5jZShwMTogUG9pbnQsIHAyOiBQb2ludCk6IG51bWJlciB7XG4gIGNvbnN0IGR4ID0gcDEueCAtIHAyLng7XG4gIGNvbnN0IGR5ID0gcDEueSAtIHAyLnk7XG4gIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cblxuZnVuY3Rpb24gbW92ZVRvQ2xvc2VzdCh7YWN0aXZlS2V5LCBrZXlzLCByZXN0TGF5b3V0c306IGFueSwgcG9zaXRpb246IFBvaW50KSB7XG4gIGNvbnN0IGFjdGl2ZUlkeCA9IC0xO1xuICBsZXQgY2xvc2VzdElkeCA9IGFjdGl2ZUlkeDtcbiAgbGV0IG1pbkRpc3QgPSBJbmZpbml0eTtcbiAgY29uc3QgbmV3S2V5cyA9IFtdO1xuICBrZXlzLmZvckVhY2goKGtleSwgaWR4KSA9PiB7XG4gICAgY29uc3QgZGlzdCA9IGRpc3RhbmNlKHBvc2l0aW9uLCByZXN0TGF5b3V0c1tpZHhdKTtcbiAgICBpZiAoa2V5ID09PSBhY3RpdmVLZXkpIHtcbiAgICAgIGlkeCA9IGFjdGl2ZUlkeDtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3S2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGlmIChkaXN0IDwgbWluRGlzdCkge1xuICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICBjbG9zZXN0SWR4ID0gaWR4O1xuICAgIH1cbiAgfSk7XG4gIGlmIChjbG9zZXN0SWR4ID09PSBhY3RpdmVJZHgpIHtcbiAgICByZXR1cm4ga2V5czsgLy8gbm90aGluZyBjaGFuZ2VkXG4gIH0gZWxzZSB7XG4gICAgbmV3S2V5cy5zcGxpY2UoY2xvc2VzdElkeCwgMCwgYWN0aXZlS2V5KTtcbiAgICByZXR1cm4gbmV3S2V5cztcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGdyaWQ6IHtcbiAgICBmbGV4OiAxLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgfSxcbiAgY2lyY2xlOiB7XG4gICAgd2lkdGg6IENJUkNMRV9TSVpFLFxuICAgIGhlaWdodDogQ0lSQ0xFX1NJWkUsXG4gICAgYm9yZGVyUmFkaXVzOiBDSVJDTEVfU0laRSAvIDIsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gICAgbWFyZ2luOiBDSVJDTEVfTUFSR0lOLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfSxcbiAgZHJhZ1ZpZXc6IHtcbiAgICBzaGFkb3dSYWRpdXM6IDEwLFxuICAgIHNoYWRvd0NvbG9yOiAncmdiYSgwLDAsMCwwLjcpJyxcbiAgICBzaGFkb3dPZmZzZXQ6IHtoZWlnaHQ6IDh9LFxuICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgfSxcbiAgb3Blbjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLCAvLyB1bnNldCB2YWx1ZSBmcm9tIHN0eWxlcy5jaXJjbGVcbiAgICBoZWlnaHQ6IHVuZGVmaW5lZCwgLy8gdW5zZXQgdmFsdWUgZnJvbSBzdHlsZXMuY2lyY2xlXG4gICAgYm9yZGVyUmFkaXVzOiAwLCAvLyB1bnNldCB2YWx1ZSBmcm9tIHN0eWxlcy5jaXJjbGVcbiAgfSxcbiAgZGFya2VuaW5nOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmxhY2snLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ0FuaW1hdGVkIC0gR3JhdHVpdG91cyBBcHAnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9XG4gICdCdW5jaCBvZiBBbmltYXRpb25zIC0gdGFwIGEgY2lyY2xlIHRvIG9wZW4gYSB2aWV3IHdpdGggbW9yZSBhbmltYXRpb25zLCBvciBsb25nUHJlc3MgYW5kIGRyYWcgdG8gcmVvcmRlciBjaXJjbGVzLic7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdBbmQgZXhhbXBsZSBhcHAnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBBbkV4QXBwPiB7XG4gICAgICByZXR1cm4gPEFuRXhBcHAgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IEFuRXhCb2JibGUgPSByZXF1aXJlKCcuL0FuRXhCb2JibGUnKTtcbmNvbnN0IEFuRXhDaGFpbmVkID0gcmVxdWlyZSgnLi9BbkV4Q2hhaW5lZCcpO1xuY29uc3QgQW5FeFNjcm9sbCA9IHJlcXVpcmUoJy4vQW5FeFNjcm9sbCcpO1xuY29uc3QgQW5FeFRpbHQgPSByZXF1aXJlKCcuL0FuRXhUaWx0Jyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIEFuaW1hdGVkLFxuICBQYW5SZXNwb25kZXIsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIEFuRXhTZXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8T2JqZWN0LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IE9iamVjdCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBmdW5jdGlvbiByYW5kQ29sb3IoKSB7XG4gICAgICBjb25zdCBjb2xvcnMgPSBbMCwgMSwgMl0ubWFwKCgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE1MCArIDEwMCkpO1xuICAgICAgcmV0dXJuICdyZ2IoJyArIGNvbG9ycy5qb2luKCcsJykgKyAnKSc7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjbG9zZUNvbG9yOiByYW5kQ29sb3IoKSxcbiAgICAgIG9wZW5Db2xvcjogcmFuZENvbG9yKCksXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhpcy5wcm9wcy5vcGVuVmFsXG4gICAgICA/IHRoaXMucHJvcHMub3BlblZhbC5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgIG91dHB1dFJhbmdlOiBbXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNsb3NlQ29sb3IsIC8vIGludGVycG9sYXRlcyBjb2xvciBzdHJpbmdzXG4gICAgICAgICAgICB0aGlzLnN0YXRlLm9wZW5Db2xvcixcbiAgICAgICAgICBdLFxuICAgICAgICB9KVxuICAgICAgOiB0aGlzLnN0YXRlLmNsb3NlQ29sb3I7XG4gICAgY29uc3QgcGFuZWxXaWR0aCA9XG4gICAgICAodGhpcy5wcm9wcy5jb250YWluZXJMYXlvdXQgJiYgdGhpcy5wcm9wcy5jb250YWluZXJMYXlvdXQud2lkdGgpIHx8IDMyMDtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmhlYWRlciwge2JhY2tncm91bmRDb2xvcn1dfVxuICAgICAgICAgIHsuLi50aGlzLnN0YXRlLmRpc21pc3NSZXNwb25kZXIucGFuSGFuZGxlcnN9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLnRleHQsIHN0eWxlcy5oZWFkZXJUZXh0XX0+e3RoaXMucHJvcHMuaWR9PC9UZXh0PlxuICAgICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgICAgIHt0aGlzLnByb3BzLmlzQWN0aXZlICYmIChcbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnN0cmVhbX0+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNhcmR9PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHR9Pkp1bHkgMm5kPC9UZXh0PlxuICAgICAgICAgICAgICA8QW5FeFRpbHQgaXNBY3RpdmU9e3RoaXMucHJvcHMuaXNBY3RpdmV9IC8+XG4gICAgICAgICAgICAgIDxBbkV4Qm9iYmxlIC8+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8QW5FeFNjcm9sbCBwYW5lbFdpZHRoPXtwYW5lbFdpZHRofSAvPlxuICAgICAgICAgICAgPEFuRXhDaGFpbmVkIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHRoaXMuc3RhdGUuZGlzbWlzc1kgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMCk7XG4gICAgdGhpcy5zdGF0ZS5kaXNtaXNzUmVzcG9uZGVyID0gUGFuUmVzcG9uZGVyLmNyZWF0ZSh7XG4gICAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoKSA9PiB0aGlzLnByb3BzLmlzQWN0aXZlLFxuICAgICAgb25QYW5SZXNwb25kZXJHcmFudDogKCkgPT4ge1xuICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5wcm9wcy5vcGVuVmFsLCB7XG4gICAgICAgICAgLy8gQW5pbWF0ZWQgdmFsdWUgcGFzc2VkIGluLlxuICAgICAgICAgIHRvVmFsdWU6IHRoaXMuc3RhdGUuZGlzbWlzc1kuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgLy8gVHJhY2sgZGlzbWlzcyBnZXN0dXJlXG4gICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMzAwXSwgLy8gYW5kIGludGVycG9sYXRlIHBpeGVsIGRpc3RhbmNlXG4gICAgICAgICAgICBvdXRwdXRSYW5nZTogWzEsIDBdLCAvLyB0byBhIGZyYWN0aW9uLlxuICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgfSkuc3RhcnQoKTtcbiAgICAgIH0sXG4gICAgICBvblBhblJlc3BvbmRlck1vdmU6IEFuaW1hdGVkLmV2ZW50KFxuICAgICAgICBbbnVsbCwge2R5OiB0aGlzLnN0YXRlLmRpc21pc3NZfV0sIC8vIHRyYWNrIHBhbiBnZXN0dXJlXG4gICAgICAgIHt1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSxcbiAgICAgICksXG4gICAgICBvblBhblJlc3BvbmRlclJlbGVhc2U6IChlLCBnZXN0dXJlU3RhdGUpID0+IHtcbiAgICAgICAgaWYgKGdlc3R1cmVTdGF0ZS5keSA+IDEwMCkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25EaXNtaXNzKGdlc3R1cmVTdGF0ZS52eSk7IC8vIGRlbGVnYXRlcyBkaXNtaXNzIGFjdGlvbiB0byBwYXJlbnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5wcm9wcy5vcGVuVmFsLCB7XG4gICAgICAgICAgICAvLyBhbmltYXRlIGJhY2sgb3BlbiBpZiByZWxlYXNlZCBlYXJseVxuICAgICAgICAgICAgdG9WYWx1ZTogMSxcblxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KS5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgaGVhZGVyOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcGFkZGluZ1RvcDogMTgsXG4gICAgaGVpZ2h0OiA5MCxcbiAgfSxcbiAgc3RyZWFtOiB7XG4gICAgZmxleDogMSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoMjMwLCAyMzAsIDIzMCknLFxuICB9LFxuICBjYXJkOiB7XG4gICAgbWFyZ2luOiA4LFxuICAgIHBhZGRpbmc6IDgsXG4gICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICBzaGFkb3dSYWRpdXM6IDIsXG4gICAgc2hhZG93Q29sb3I6ICdibGFjaycsXG4gICAgc2hhZG93T3BhY2l0eTogMC4yLFxuICAgIHNoYWRvd09mZnNldDoge2hlaWdodDogMC41fSxcbiAgfSxcbiAgdGV4dDoge1xuICAgIHBhZGRpbmc6IDQsXG4gICAgcGFkZGluZ0JvdHRvbTogMTAsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGZvbnRTaXplOiAxOCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIH0sXG4gIGhlYWRlclRleHQ6IHtcbiAgICBmb250U2l6ZTogMjUsXG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgdGV4dFNoYWRvd1JhZGl1czogMyxcbiAgICB0ZXh0U2hhZG93Q29sb3I6ICdyZ2JhKDAsIDAsIDAsIDEuMCknLFxuICAgIHRleHRTaGFkb3dPZmZzZXQ6IHtoZWlnaHQ6IDEsIHdpZHRoOiAwfSxcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFuRXhTZXQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtBbmltYXRlZCwgUGFuUmVzcG9uZGVyLCBTdHlsZVNoZWV0fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jbGFzcyBBbkV4VGlsdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxPYmplY3QsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogT2JqZWN0KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBwYW5YOiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICBvcGFjaXR5OiBuZXcgQW5pbWF0ZWQuVmFsdWUoMSksXG4gICAgICBidXJuczogbmV3IEFuaW1hdGVkLlZhbHVlKDEuMTUpLFxuICAgIH07XG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgdGhpcy5zdGF0ZS50aWx0UGFuUmVzcG9uZGVyID0gUGFuUmVzcG9uZGVyLmNyZWF0ZSh7XG4gICAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoKSA9PiB0cnVlLFxuICAgICAgb25QYW5SZXNwb25kZXJHcmFudDogKCkgPT4ge1xuICAgICAgICBBbmltYXRlZC50aW1pbmcodGhpcy5zdGF0ZS5vcGFjaXR5LCB7XG4gICAgICAgICAgdG9WYWx1ZTogdGhpcy5zdGF0ZS5wYW5YLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgIGlucHV0UmFuZ2U6IFstMzAwLCAwLCAzMDBdLCAvLyBwYW4gaXMgaW4gcGl4ZWxzXG4gICAgICAgICAgICBvdXRwdXRSYW5nZTogWzAsIDEsIDBdLCAvLyBnb2VzIHRvIHplcm8gYXQgYm90aCBlZGdlc1xuICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgLy8gZGlyZWN0IHRyYWNraW5nXG4gICAgICAgICAgZHVyYXRpb246IDAsXG5cbiAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICB9KS5zdGFydCgpO1xuICAgICAgfSxcbiAgICAgIG9uUGFuUmVzcG9uZGVyTW92ZTogQW5pbWF0ZWQuZXZlbnQoXG4gICAgICAgIFtudWxsLCB7ZHg6IHRoaXMuc3RhdGUucGFuWH1dLCAvLyBwYW5YIGlzIGxpbmtlZCB0byB0aGUgZ2VzdHVyZVxuICAgICAgICB7dXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0sXG4gICAgICApLFxuICAgICAgb25QYW5SZXNwb25kZXJSZWxlYXNlOiAoZSwgZ2VzdHVyZVN0YXRlKSA9PiB7XG4gICAgICAgIGxldCB0b1ZhbHVlID0gMDtcbiAgICAgICAgaWYgKGdlc3R1cmVTdGF0ZS5keCA+IDEwMCkge1xuICAgICAgICAgIHRvVmFsdWUgPSA1MDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2VzdHVyZVN0YXRlLmR4IDwgLTEwMCkge1xuICAgICAgICAgIHRvVmFsdWUgPSAtNTAwO1xuICAgICAgICB9XG4gICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLnBhblgsIHtcbiAgICAgICAgICAvLyBhbmltYXRlIGJhY2sgdG8gY2VudGVyIG9yIG9mZiBzY3JlZW5cbiAgICAgICAgICB0b1ZhbHVlLFxuXG4gICAgICAgICAgLy8gbWFpbnRhaW4gZ2VzdHVyZSB2ZWxvY2l0eVxuICAgICAgICAgIHZlbG9jaXR5OiBnZXN0dXJlU3RhdGUudngsXG5cbiAgICAgICAgICB0ZW5zaW9uOiAxMCxcbiAgICAgICAgICBmcmljdGlvbjogMyxcbiAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICB9KS5zdGFydCgpO1xuICAgICAgICB0aGlzLnN0YXRlLnBhblgucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIGNvbnN0IGlkOiBhbnkgPSB0aGlzLnN0YXRlLnBhblguYWRkTGlzdGVuZXIoKHt2YWx1ZX0pID0+IHtcbiAgICAgICAgICAvLyBsaXN0ZW4gdW50aWwgb2Zmc2NyZWVuXG4gICAgICAgICAgaWYgKE1hdGguYWJzKHZhbHVlKSA+IDQwMCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5wYW5YLnJlbW92ZUxpc3RlbmVyKGlkKTsgLy8gb2Zmc2NyZWVuLCBzbyBzdG9wIGxpc3RlbmluZ1xuICAgICAgICAgICAgQW5pbWF0ZWQudGltaW5nKHRoaXMuc3RhdGUub3BhY2l0eSwge1xuICAgICAgICAgICAgICAvLyBGYWRlIGJhY2sgaW4uICBUaGlzIHVubGlua3MgaXQgZnJvbSB0cmFja2luZyB0aGlzLnN0YXRlLnBhblhcbiAgICAgICAgICAgICAgdG9WYWx1ZTogMSxcblxuICAgICAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICAgICAgfSkuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUucGFuWC5zZXRWYWx1ZSgwKTsgLy8gTm90ZTogc3RvcHMgdGhlIHNwcmluZyBhbmltYXRpb25cbiAgICAgICAgICAgIHRvVmFsdWUgIT09IDAgJiYgdGhpcy5fc3RhcnRCdXJuc1pvb20oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIF9zdGFydEJ1cm5zWm9vbSgpIHtcbiAgICB0aGlzLnN0YXRlLmJ1cm5zLnNldFZhbHVlKDEpOyAvLyByZXNldCB0byBiZWdpbm5pbmdcbiAgICBBbmltYXRlZC5kZWNheSh0aGlzLnN0YXRlLmJ1cm5zLCB7XG4gICAgICAvLyBzdWJ0bGUgem9vbVxuICAgICAgdmVsb2NpdHk6IDEsXG5cbiAgICAgIC8vIHNsb3cgZGVjYXlcbiAgICAgIGRlY2VsZXJhdGlvbjogMC45OTk5LFxuXG4gICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgIH0pLnN0YXJ0KCk7XG4gIH1cblxuICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHRoaXMuX3N0YXJ0QnVybnNab29tKCk7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHsuLi50aGlzLnN0YXRlLnRpbHRQYW5SZXNwb25kZXIucGFuSGFuZGxlcnN9XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLnRpbHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3BhY2l0eTogdGhpcy5zdGF0ZS5vcGFjaXR5LFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb3RhdGU6IHRoaXMuc3RhdGUucGFuWC5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbLTMyMCwgMzIwXSxcbiAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbJy0xNWRlZycsICcxNWRlZyddLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LCAvLyBpbnRlcnBvbGF0ZSBzdHJpbmcgXCJzaGFwZXNcIlxuICAgICAgICAgICAgICB7dHJhbnNsYXRlWDogdGhpcy5zdGF0ZS5wYW5YfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXX0+XG4gICAgICAgIDxBbmltYXRlZC5JbWFnZVxuICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJub25lXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlWDogdGhpcy5zdGF0ZS5wYW5YLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFstMywgM10sIC8vIHNtYWxsIHJhbmdlIGlzIGV4dGVuZGVkIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMiwgLTJdLFxuICAgICAgICAgICAgICAgIH0pLCAvLyBwYXJhbGxheFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuc3RhdGUuYnVybnMuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzEsIDMwMDBdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsxLCAxLjI1XSxcbiAgICAgICAgICAgICAgICB9KSwgLy8gc2ltcGxlIG11bHRpcGxpZXJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzb3VyY2U9e3JlcXVpcmUoJy4uLy4uL2Fzc2V0cy90cmVlcy5qcGcnKX1cbiAgICAgICAgLz5cbiAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgdGlsdDoge1xuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICBtYXJnaW5Cb3R0b206IDQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiKDEzMCwgMTMwLCAyNTUpJyxcbiAgICBib3JkZXJDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4yKScsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyUmFkaXVzOiAyMCxcbiAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFuRXhUaWx0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7QW5pbWF0ZWQsIFBhblJlc3BvbmRlciwgU3R5bGVTaGVldCwgVmlld30gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY29uc3QgTlVNX0JPQkJMRVMgPSA1O1xuY29uc3QgUkFEX0VBQ0ggPSBNYXRoLlBJIC8gMiAvIChOVU1fQk9CQkxFUyAtIDIpO1xuY29uc3QgUkFESVVTID0gMTYwO1xuY29uc3QgQk9CQkxFX1NQT1RTID0gWy4uLkFycmF5KE5VTV9CT0JCTEVTKV0ubWFwKChfLCBpKSA9PiB7XG4gIC8vIHN0YXRpYyBwb3NpdGlvbnNcbiAgcmV0dXJuIGkgPT09IDBcbiAgICA/IHt4OiAwLCB5OiAwfVxuICAgIDoge1xuICAgICAgICAvLyBmaXJzdCBib2JibGUgaXMgdGhlIHNlbGVjdG9yXG4gICAgICAgIHg6IC1NYXRoLmNvcyhSQURfRUFDSCAqIChpIC0gMSkpICogUkFESVVTLFxuICAgICAgICB5OiAtTWF0aC5zaW4oUkFEX0VBQ0ggKiAoaSAtIDEpKSAqIFJBRElVUyxcbiAgICAgIH07XG59KTtcblxuY2xhc3MgQW5FeEJvYmJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxPYmplY3QsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogT2JqZWN0KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICB0aGlzLnN0YXRlLmJvYmJsZXMgPSBCT0JCTEVfU1BPVFMubWFwKChfLCBpKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEFuaW1hdGVkLlZhbHVlWFkoKTtcbiAgICB9KTtcbiAgICB0aGlzLnN0YXRlLnNlbGVjdGVkQm9iYmxlID0gbnVsbDtcbiAgICBjb25zdCBib2JibGVQYW5MaXN0ZW5lciA9IChlOiBhbnksIGdlc3R1cmVTdGF0ZTogYW55KSA9PiB7XG4gICAgICAvLyBhc3luYyBldmVudHMgPT4gY2hhbmdlIHNlbGVjdGlvblxuICAgICAgY29uc3QgbmV3U2VsZWN0ZWQgPSBjb21wdXRlTmV3U2VsZWN0ZWQoZ2VzdHVyZVN0YXRlKTtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnNlbGVjdGVkQm9iYmxlICE9PSBuZXdTZWxlY3RlZCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZWxlY3RlZEJvYmJsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHJlc3RTcG90ID0gQk9CQkxFX1NQT1RTW3RoaXMuc3RhdGUuc2VsZWN0ZWRCb2JibGVdO1xuICAgICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLmJvYmJsZXNbdGhpcy5zdGF0ZS5zZWxlY3RlZEJvYmJsZV0sIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBwcmV2aW91c2x5IHNlbGVjdGVkIGJvYmJsZSB0byByZXN0IHBvc2l0aW9uXG4gICAgICAgICAgICB0b1ZhbHVlOiByZXN0U3BvdCxcblxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KS5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdTZWxlY3RlZCAhPT0gbnVsbCAmJiBuZXdTZWxlY3RlZCAhPT0gMCkge1xuICAgICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLmJvYmJsZXNbbmV3U2VsZWN0ZWRdLCB7XG4gICAgICAgICAgICAvLyBuZXdseSBzZWxlY3RlZCBzaG91bGQgdHJhY2sgdGhlIHNlbGVjdG9yXG4gICAgICAgICAgICB0b1ZhbHVlOiB0aGlzLnN0YXRlLmJvYmJsZXNbMF0sXG5cbiAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgICAgfSkuc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlLnNlbGVjdGVkQm9iYmxlID0gbmV3U2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWxlYXNlQm9iYmxlID0gKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5ib2JibGVzLmZvckVhY2goKGJvYmJsZSwgaSkgPT4ge1xuICAgICAgICBBbmltYXRlZC5zcHJpbmcoYm9iYmxlLCB7XG4gICAgICAgICAgLy8gYWxsIGJvYmJsZXMgcmV0dXJuIHRvIHplcm9cbiAgICAgICAgICB0b1ZhbHVlOiB7eDogMCwgeTogMH0sXG5cbiAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICB9KS5zdGFydCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN0YXRlLmJvYmJsZVJlc3BvbmRlciA9IFBhblJlc3BvbmRlci5jcmVhdGUoe1xuICAgICAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcjogKCkgPT4gdHJ1ZSxcbiAgICAgIG9uUGFuUmVzcG9uZGVyR3JhbnQ6ICgpID0+IHtcbiAgICAgICAgQk9CQkxFX1NQT1RTLmZvckVhY2goKHNwb3QsIGlkeCkgPT4ge1xuICAgICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLmJvYmJsZXNbaWR4XSwge1xuICAgICAgICAgICAgLy8gc3ByaW5nIGVhY2ggYm9iYmxlIHRvIGl0cyBzcG90XG4gICAgICAgICAgICB0b1ZhbHVlOiBzcG90LFxuXG4gICAgICAgICAgICAvLyBsZXNzIGZyaWN0aW9uID0+IGJvdW5jaWVyXG4gICAgICAgICAgICBmcmljdGlvbjogMyxcblxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KS5zdGFydCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhblJlc3BvbmRlck1vdmU6IEFuaW1hdGVkLmV2ZW50KFxuICAgICAgICBbbnVsbCwge2R4OiB0aGlzLnN0YXRlLmJvYmJsZXNbMF0ueCwgZHk6IHRoaXMuc3RhdGUuYm9iYmxlc1swXS55fV0sXG4gICAgICAgIHtsaXN0ZW5lcjogYm9iYmxlUGFuTGlzdGVuZXIsIHVzZU5hdGl2ZURyaXZlcjogZmFsc2V9LCAvLyBhc3luYyBzdGF0ZSBjaGFuZ2VzIHdpdGggYXJiaXRyYXJ5IGxvZ2ljXG4gICAgICApLFxuICAgICAgb25QYW5SZXNwb25kZXJSZWxlYXNlOiByZWxlYXNlQm9iYmxlLFxuICAgICAgb25QYW5SZXNwb25kZXJUZXJtaW5hdGU6IHJlbGVhc2VCb2JibGUsXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYm9iYmxlQ29udGFpbmVyfT5cbiAgICAgICAge3RoaXMuc3RhdGUuYm9iYmxlcy5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBqID0gdGhpcy5zdGF0ZS5ib2JibGVzLmxlbmd0aCAtIGkgLSAxOyAvLyByZXZlcnNlIHNvIGxlYWQgb24gdG9wXG4gICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBqID4gMCA/IHt9IDogdGhpcy5zdGF0ZS5ib2JibGVSZXNwb25kZXIucGFuSGFuZGxlcnM7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxBbmltYXRlZC5JbWFnZVxuICAgICAgICAgICAgICB7Li4uaGFuZGxlcnN9XG4gICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgc291cmNlPXt7dXJpOiBCT0JCTEVfSU1HU1tqXX19XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmNpcmNsZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJhbmRDb2xvcigpLCAvLyByZS1yZW5kZXJzIGFyZSBvYnZpb3VzXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMuc3RhdGUuYm9iYmxlc1tqXS5nZXRUcmFuc2xhdGVUcmFuc2Zvcm0oKSwgLy8gc2ltcGxlIGNvbnZlcnNpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY2lyY2xlOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgaGVpZ2h0OiA2MCxcbiAgICB3aWR0aDogNjAsXG4gICAgYm9yZGVyUmFkaXVzOiAzMCxcbiAgICBib3JkZXJXaWR0aDogMC41LFxuICB9LFxuICBib2JibGVDb250YWluZXI6IHtcbiAgICB0b3A6IC02OCxcbiAgICBwYWRkaW5nUmlnaHQ6IDY2LFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGZsZXg6IDEsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICB9LFxufSk7XG5cbmZ1bmN0aW9uIGNvbXB1dGVOZXdTZWxlY3RlZChnZXN0dXJlU3RhdGU6IE9iamVjdCk6ID9udW1iZXIge1xuICBjb25zdCB7ZHgsIGR5fSA9IGdlc3R1cmVTdGF0ZTtcbiAgbGV0IG1pbkRpc3QgPSBJbmZpbml0eTtcbiAgbGV0IG5ld1NlbGVjdGVkID0gbnVsbDtcbiAgY29uc3QgcG9pbnRSYWRpdXMgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICBpZiAoTWF0aC5hYnMoUkFESVVTIC0gcG9pbnRSYWRpdXMpIDwgODApIHtcbiAgICBCT0JCTEVfU1BPVFMuZm9yRWFjaCgoc3BvdCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IHt4OiBzcG90LnggLSBkeCwgeTogc3BvdC55IC0gZHl9O1xuICAgICAgY29uc3QgZGlzdCA9IGRlbHRhLnggKiBkZWx0YS54ICsgZGVsdGEueSAqIGRlbHRhLnk7XG4gICAgICBpZiAoZGlzdCA8IG1pbkRpc3QpIHtcbiAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICAgIG5ld1NlbGVjdGVkID0gaWR4O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTZWxlY3RlZDtcbn1cblxuZnVuY3Rpb24gcmFuZENvbG9yKCk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbG9ycyA9IFswLCAxLCAyXS5tYXAoKCkgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTUwICsgMTAwKSk7XG4gIHJldHVybiAncmdiKCcgKyBjb2xvcnMuam9pbignLCcpICsgJyknO1xufVxuXG5jb25zdCBCT0JCTEVfSU1HUyA9IFtcbiAgJ2h0dHBzOi8vc2NvbnRlbnQtc2VhMS0xLnh4LmZiY2RuLm5ldC9ocGhvdG9zLXhwZjEvdDM5LjE5OTctNi8xMDE3MzQ4OV8yNzI3MDMzMTYyMzcyNjdfMTAyNTgyNjc4MV9uLnBuZycsXG4gICdodHRwczovL3Njb250ZW50LXNlYTEtMS54eC5mYmNkbi5uZXQvaHBob3Rvcy14YWYxL2wvdDM5LjE5OTctNi9wMjQweDI0MC84NTE1NzhfNjMxNDg3NDAwMjEyNjY4XzIwODcwNzM1MDJfbi5wbmcnLFxuICAnaHR0cHM6Ly9zY29udGVudC1zZWExLTEueHguZmJjZG4ubmV0L2hwaG90b3MteGFmMS90MzkuMTk5Ny02L3AyNDB4MjQwLzg1MTU4M182NTQ0NDY5MTc5MDM3MjJfMTc4MTE4NDUyX24ucG5nJyxcbiAgJ2h0dHBzOi8vc2NvbnRlbnQtc2VhMS0xLnh4LmZiY2RuLm5ldC9ocGhvdG9zLXhhZjEvdDM5LjE5OTctNi9wMjQweDI0MC84NTE1NjVfNjQxMDIzMTc1OTEzMjk0Xzg3NTM0MzA5Nl9uLnBuZycsXG4gICdodHRwczovL3Njb250ZW50LXNlYTEtMS54eC5mYmNkbi5uZXQvaHBob3Rvcy14YWYxL3QzOS4xOTk3LTYvODUxNTYyXzU3NTI4NDc4MjU1NzU2Nl8xMTg4NzgxNTE3X24ucG5nJyxcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gQW5FeEJvYmJsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBBbmltYXRlZCxcbiAgSW1hZ2UsXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIEFuRXhTY3JvbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8JEZsb3dGaXhNZVByb3BzLCBhbnk+IHtcbiAgc3RhdGU6IGFueSA9IHtzY3JvbGxYOiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCl9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMucHJvcHMucGFuZWxXaWR0aDtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICA8U2Nyb2xsVmlld1xuICAgICAgICAgIGF1dG9tYXRpY2FsbHlBZGp1c3RDb250ZW50SW5zZXRzPXtmYWxzZX1cbiAgICAgICAgICBzY3JvbGxFdmVudFRocm90dGxlPXsxNiAvKiBnZXQgYWxsIGV2ZW50cyAqL31cbiAgICAgICAgICBvblNjcm9sbD17QW5pbWF0ZWQuZXZlbnQoXG4gICAgICAgICAgICBbe25hdGl2ZUV2ZW50OiB7Y29udGVudE9mZnNldDoge3g6IHRoaXMuc3RhdGUuc2Nyb2xsWH19fV0sIC8vIG5lc3RlZCBldmVudCBtYXBwaW5nXG4gICAgICAgICAgICB7dXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0sXG4gICAgICAgICAgKX1cbiAgICAgICAgICBjb250ZW50Q29udGFpbmVyU3R5bGU9e3tmbGV4OiAxLCBwYWRkaW5nOiAxMH19XG4gICAgICAgICAgcGFnaW5nRW5hYmxlZD17dHJ1ZX1cbiAgICAgICAgICBob3Jpem9udGFsPXt0cnVlfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5wYWdlLCB7d2lkdGh9XX0+XG4gICAgICAgICAgICA8SW1hZ2Ugc3R5bGU9e3t3aWR0aDogMTgwLCBoZWlnaHQ6IDE4MH19IHNvdXJjZT17SEFXS19QSUN9IC8+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHR9PlxuICAgICAgICAgICAgICB7XCJJJ2xsIGZpbmQgc29tZXRoaW5nIHRvIHB1dCBoZXJlLlwifVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5wYWdlLCB7d2lkdGh9XX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHR9PnsnQW5kIGhlcmUuJ308L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnBhZ2UsIHt3aWR0aH1dfT5cbiAgICAgICAgICAgIDxUZXh0PnsnQnV0IG5vdCBoZXJlLid9PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICA8QW5pbWF0ZWQuSW1hZ2VcbiAgICAgICAgICBwb2ludGVyRXZlbnRzPVwibm9uZVwiXG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5idW5ueSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlWDogdGhpcy5zdGF0ZS5zY3JvbGxYLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIHdpZHRoLCAyICogd2lkdGhdLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWzAsIDAsIHdpZHRoIC8gM10sXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhcG9sYXRlOiAnY2xhbXAnLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVZOiB0aGlzLnN0YXRlLnNjcm9sbFguaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgd2lkdGgsIDIgKiB3aWR0aF0sXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMCwgLTIwMCwgLTI2MF0sXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhcG9sYXRlOiAnY2xhbXAnLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5zdGF0ZS5zY3JvbGxYLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIHdpZHRoLCAyICogd2lkdGhdLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWzAuNSwgMC41LCAyXSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFwb2xhdGU6ICdjbGFtcCcsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIHNvdXJjZT17QlVOTllfUElDfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZmxleDogMSxcbiAgfSxcbiAgdGV4dDoge1xuICAgIHBhZGRpbmc6IDQsXG4gICAgcGFkZGluZ0JvdHRvbTogMTAsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGZvbnRTaXplOiAxOCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIH0sXG4gIGJ1bm55OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGhlaWdodDogMTYwLFxuICAgIHdpZHRoOiAxNjAsXG4gIH0sXG4gIHBhZ2U6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgfSxcbn0pO1xuXG5jb25zdCBIQVdLX1BJQyA9IHtcbiAgdXJpOiAnaHR0cHM6Ly9zY29udGVudC1zZWExLTEueHguZmJjZG4ubmV0L2hwaG90b3MteGZhMS90MzkuMTk5Ny02LzEwNzM0MzA0XzE1NjIyMjU2MjA2NTk2NzRfODM3NTExNzAxX24ucG5nJyxcbn07XG5jb25zdCBCVU5OWV9QSUMgPSB7XG4gIHVyaTogJ2h0dHBzOi8vc2NvbnRlbnQtc2VhMS0xLnh4LmZiY2RuLm5ldC9ocGhvdG9zLXhhZjEvdDM5LjE5OTctNi84NTE1NjRfNTMxMTExMzgwMjkyMjM3XzE4OTg4NzEwODZfbi5wbmcnLFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbkV4U2Nyb2xsO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7R2VzdHVyZVN0YXRlfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ludGVyYWN0aW9uL1BhblJlc3BvbmRlcic7XG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtBbmltYXRlZCwgUGFuUmVzcG9uZGVyLCBTdHlsZVNoZWV0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jbGFzcyBBbkV4Q2hhaW5lZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxPYmplY3QsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogT2JqZWN0KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBzdGlja2VyczogW25ldyBBbmltYXRlZC5WYWx1ZVhZKCldLCAvLyAxIGxlYWRlclxuICAgIH07XG4gICAgY29uc3Qgc3RpY2tlckNvbmZpZyA9IHt0ZW5zaW9uOiAyLCBmcmljdGlvbjogM307IC8vIHNvZnQgc3ByaW5nXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgIC8vIDQgZm9sbG93ZXJzXG4gICAgICBjb25zdCBzdGlja2VyID0gbmV3IEFuaW1hdGVkLlZhbHVlWFkoKTtcbiAgICAgIEFuaW1hdGVkLnNwcmluZyhzdGlja2VyLCB7XG4gICAgICAgIC4uLnN0aWNrZXJDb25maWcsXG5cbiAgICAgICAgLy8gQW5pbWF0ZWQgdG9WYWx1ZSdzIGFyZSB0cmFja2VkXG4gICAgICAgIHRvVmFsdWU6IHRoaXMuc3RhdGUuc3RpY2tlcnNbaV0sXG5cbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgIH0pLnN0YXJ0KCk7XG4gICAgICB0aGlzLnN0YXRlLnN0aWNrZXJzLnB1c2goc3RpY2tlcik7IC8vIHB1c2ggb24gdGhlIGZvbGxvd2Vyc1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlQ2hhaW4gPSAoZTogUHJlc3NFdmVudCwgZ2VzdHVyZVN0YXRlOiBHZXN0dXJlU3RhdGUpID0+IHtcbiAgICAgIHRoaXMuc3RhdGUuc3RpY2tlcnNbMF0uZmxhdHRlbk9mZnNldCgpOyAvLyBtZXJnZXMgb2Zmc2V0IGludG8gdmFsdWUgYW5kIHJlc2V0c1xuICAgICAgQW5pbWF0ZWQuc2VxdWVuY2UoW1xuICAgICAgICAvLyBzcHJpbmcgdG8gc3RhcnQgYWZ0ZXIgZGVjYXkgZmluaXNoZXNcbiAgICAgICAgQW5pbWF0ZWQuZGVjYXkodGhpcy5zdGF0ZS5zdGlja2Vyc1swXSwge1xuICAgICAgICAgIC8vIGNvYXN0IHRvIGEgc3RvcFxuICAgICAgICAgIHZlbG9jaXR5OiB7eDogZ2VzdHVyZVN0YXRlLnZ4LCB5OiBnZXN0dXJlU3RhdGUudnl9LFxuXG4gICAgICAgICAgZGVjZWxlcmF0aW9uOiAwLjk5NyxcbiAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICB9KSxcbiAgICAgICAgQW5pbWF0ZWQuc3ByaW5nKHRoaXMuc3RhdGUuc3RpY2tlcnNbMF0sIHtcbiAgICAgICAgICAvLyByZXR1cm4gdG8gc3RhcnRcbiAgICAgICAgICB0b1ZhbHVlOiB7eDogMCwgeTogMH0sXG5cbiAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICB9KSxcbiAgICAgIF0pLnN0YXJ0KCk7XG4gICAgfTtcbiAgICB0aGlzLnN0YXRlLmNoYWluUmVzcG9uZGVyID0gUGFuUmVzcG9uZGVyLmNyZWF0ZSh7XG4gICAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoKSA9PiB0cnVlLFxuICAgICAgb25QYW5SZXNwb25kZXJHcmFudDogKCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlLnN0aWNrZXJzWzBdLnN0b3BBbmltYXRpb24odmFsdWUgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGUuc3RpY2tlcnNbMF0uc2V0T2Zmc2V0KHZhbHVlKTsgLy8gc3RhcnQgd2hlcmUgc3RpY2tlciBhbmltYXRlZCB0b1xuICAgICAgICAgIHRoaXMuc3RhdGUuc3RpY2tlcnNbMF0uc2V0VmFsdWUoe3g6IDAsIHk6IDB9KTsgLy8gYXZvaWQgZmxpY2tlciBiZWZvcmUgbmV4dCBldmVudFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhblJlc3BvbmRlck1vdmU6IEFuaW1hdGVkLmV2ZW50KFxuICAgICAgICBbbnVsbCwge2R4OiB0aGlzLnN0YXRlLnN0aWNrZXJzWzBdLngsIGR5OiB0aGlzLnN0YXRlLnN0aWNrZXJzWzBdLnl9XSwgLy8gbWFwIGdlc3R1cmUgdG8gbGVhZGVyXG4gICAgICAgIHt1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSxcbiAgICAgICksXG4gICAgICBvblBhblJlc3BvbmRlclJlbGVhc2U6IHJlbGVhc2VDaGFpbixcbiAgICAgIG9uUGFuUmVzcG9uZGVyVGVybWluYXRlOiByZWxlYXNlQ2hhaW4sXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY2hhaW5lZH0+XG4gICAgICAgIHt0aGlzLnN0YXRlLnN0aWNrZXJzLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGogPSB0aGlzLnN0YXRlLnN0aWNrZXJzLmxlbmd0aCAtIGkgLSAxOyAvLyByZXZlcnNlIHNvIGxlYWRlciBpcyBvbiB0b3BcbiAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IGogPT09IDAgPyB0aGlzLnN0YXRlLmNoYWluUmVzcG9uZGVyLnBhbkhhbmRsZXJzIDoge307XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxBbmltYXRlZC5JbWFnZVxuICAgICAgICAgICAgICB7Li4uaGFuZGxlcnN9XG4gICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgc291cmNlPXtDSEFJTl9JTUdTW2pdfVxuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5zdGlja2VyLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdGhpcy5zdGF0ZS5zdGlja2Vyc1tqXS5nZXRUcmFuc2xhdGVUcmFuc2Zvcm0oKSwgLy8gc2ltcGxlIGNvbnZlcnNpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY2hhaW5lZDoge1xuICAgIGFsaWduU2VsZjogJ2ZsZXgtZW5kJyxcbiAgICB0b3A6IC0xNjAsXG4gICAgcmlnaHQ6IDEyNixcbiAgfSxcbiAgc3RpY2tlcjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGhlaWdodDogMTIwLFxuICAgIHdpZHRoOiAxMjAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICB9LFxufSk7XG5cbmNvbnN0IENIQUlOX0lNR1MgPSBbXG4gIHJlcXVpcmUoJy4uLy4uL2Fzc2V0cy9oYXdrLnBuZycpLFxuICByZXF1aXJlKCcuLi8uLi9hc3NldHMvYnVubnkucG5nJyksXG4gIHJlcXVpcmUoJy4uLy4uL2Fzc2V0cy9yZWxheS5wbmcnKSxcbiAgcmVxdWlyZSgnLi4vLi4vYXNzZXRzL2hhd2sucG5nJyksXG4gIHJlcXVpcmUoJy4uLy4uL2Fzc2V0cy9idW5ueS5wbmcnKSxcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gQW5FeENoYWluZWQ7XG4iLCIiLCIiLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcGVhcmFuY2VQcmVmZXJlbmNlcyxcbiAgQ29sb3JTY2hlbWVOYW1lLFxufSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1V0aWxpdGllcy9OYXRpdmVBcHBlYXJhbmNlJztcblxuaW1wb3J0IHtSTlRlc3RlclRoZW1lQ29udGV4dCwgdGhlbWVzfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyVGhlbWUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0FwcGVhcmFuY2UsIEJ1dHRvbiwgVGV4dCwgVmlldywgdXNlQ29sb3JTY2hlbWV9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIENvbG9yU2NoZW1lU3Vic2NyaXB0aW9uKCkge1xuICBjb25zdCBbY29sb3JTY2hlbWUsIHNldFNjaGVtZV0gPSB1c2VTdGF0ZTw/Q29sb3JTY2hlbWVOYW1lIHwgc3RyaW5nPihcbiAgICBBcHBlYXJhbmNlLmdldENvbG9yU2NoZW1lKCksXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBBcHBlYXJhbmNlLmFkZENoYW5nZUxpc3RlbmVyKFxuICAgICAgKHByZWZlcmVuY2VzOiBBcHBlYXJhbmNlUHJlZmVyZW5jZXMpID0+IHtcbiAgICAgICAgY29uc3Qge2NvbG9yU2NoZW1lOiBzY2hlbWV9ID0gcHJlZmVyZW5jZXM7XG4gICAgICAgIHNldFNjaGVtZShzY2hlbWUpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbj8ucmVtb3ZlKCk7XG4gIH0sIFtzZXRTY2hlbWVdKTtcblxuICByZXR1cm4gKFxuICAgIDxSTlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHt0aGVtZSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFRoZW1lZENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxUaGVtZWRUZXh0Pntjb2xvclNjaGVtZX08L1RoZW1lZFRleHQ+XG4gICAgICAgICAgPC9UaGVtZWRDb250YWluZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG59XG5cbmNvbnN0IFRoZW1lZENvbnRhaW5lciA9IChwcm9wczoge2NoaWxkcmVuOiBSZWFjdC5Ob2RlfSkgPT4gKFxuICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAge3RoZW1lID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBhZGRpbmdIb3Jpem9udGFsOiA4LFxuICAgICAgICAgICAgcGFkZGluZ1ZlcnRpY2FsOiAxNixcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuU3lzdGVtQmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIH19PlxuICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9fVxuICA8L1JOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuKTtcblxuY29uc3QgVGhlbWVkVGV4dCA9IChwcm9wczoge2NoaWxkcmVuOiBSZWFjdC5Ob2RlIHwgc3RyaW5nfSkgPT4gKFxuICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAge3RoZW1lID0+IHtcbiAgICAgIHJldHVybiA8VGV4dCBzdHlsZT17e2NvbG9yOiB0aGVtZS5MYWJlbENvbG9yfX0+e3Byb3BzLmNoaWxkcmVufTwvVGV4dD47XG4gICAgfX1cbiAgPC9STlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lcj5cbik7XG5cbmNvbnN0IEFwcGVhcmFuY2VWaWFIb29rID0gKCkgPT4ge1xuICBjb25zdCBjb2xvclNjaGVtZSA9IHVzZUNvbG9yU2NoZW1lKCk7XG4gIHJldHVybiAoXG4gICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17Y29sb3JTY2hlbWUgPT09ICdkYXJrJyA/IHRoZW1lcy5kYXJrIDogdGhlbWVzLmxpZ2h0fT5cbiAgICAgIDxUaGVtZWRDb250YWluZXI+XG4gICAgICAgIDxUaGVtZWRUZXh0PnVzZUNvbG9yU2NoZW1lKCk6IHtjb2xvclNjaGVtZX08L1RoZW1lZFRleHQ+XG4gICAgICA8L1RoZW1lZENvbnRhaW5lcj5cbiAgICA8L1JOVGVzdGVyVGhlbWVDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuY29uc3QgQ29sb3JTaG93Y2FzZSA9IChwcm9wczoge3RoZW1lTmFtZTogc3RyaW5nfSkgPT4gKFxuICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4gICAge3RoZW1lID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1hcmdpblZlcnRpY2FsOiAyMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuU3lzdGVtQmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIH19PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJzcwMCcsIGNvbG9yOiB0aGVtZS5MYWJlbENvbG9yfX0+XG4gICAgICAgICAgICB7cHJvcHMudGhlbWVOYW1lfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7T2JqZWN0LmtleXModGhlbWUpLm1hcChrZXkgPT4gKFxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAncm93J319IGtleT17a2V5fT5cbiAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdIb3Jpem9udGFsOiA4LFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1ZlcnRpY2FsOiAyLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZVtrZXldLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTYsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdWZXJ0aWNhbDogMixcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoZW1lLkxhYmVsQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICB7a2V5fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0hvcml6b250YWw6IDE2LFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVmVydGljYWw6IDIsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGVtZS5MYWJlbENvbG9yLFxuICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICB7dHlwZW9mIHRoZW1lW2tleV0gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gdGhlbWVba2V5XVxuICAgICAgICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHRoZW1lW2tleV0pfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH19XG4gIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXI+XG4pO1xuXG5jb25zdCBUb2dnbGVOYXRpdmVBcHBlYXJhbmNlID0gKCkgPT4ge1xuICBjb25zdCBbbmF0aXZlQ29sb3JTY2hlbWUsIHNldE5hdGl2ZUNvbG9yU2NoZW1lXSA9XG4gICAgdXNlU3RhdGU8Q29sb3JTY2hlbWVOYW1lIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNvbG9yU2NoZW1lID0gdXNlQ29sb3JTY2hlbWUoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIEFwcGVhcmFuY2Uuc2V0Q29sb3JTY2hlbWUobmF0aXZlQ29sb3JTY2hlbWUpO1xuICB9LCBbbmF0aXZlQ29sb3JTY2hlbWVdKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFRleHQ+TmF0aXZlIGNvbG9yU2NoZW1lOiB7bmF0aXZlQ29sb3JTY2hlbWV9PC9UZXh0PlxuICAgICAgPFRleHQ+Q3VycmVudCBjb2xvclNjaGVtZToge2NvbG9yU2NoZW1lfTwvVGV4dD5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgdGl0bGU9XCJTZXQgdG8gbGlnaHRcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiBzZXROYXRpdmVDb2xvclNjaGVtZSgnbGlnaHQnKX1cbiAgICAgIC8+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIHRpdGxlPVwiU2V0IHRvIGRhcmtcIlxuICAgICAgICBvblByZXNzPXsoKSA9PiBzZXROYXRpdmVDb2xvclNjaGVtZSgnZGFyaycpfVxuICAgICAgLz5cbiAgICAgIDxCdXR0b24gdGl0bGU9XCJVbnNldFwiIG9uUHJlc3M9eygpID0+IHNldE5hdGl2ZUNvbG9yU2NoZW1lKG51bGwpfSAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmV4cG9ydHMudGl0bGUgPSAnQXBwZWFyYW5jZSc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FwcGVhcmFuY2UnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdMaWdodCBhbmQgZGFyayB1c2VyIGludGVyZmFjZSBleGFtcGxlcy4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAndXNlQ29sb3JTY2hlbWUgaG9vaycsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxBcHBlYXJhbmNlVmlhSG9vayAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdOb24tY29tcG9uZW50IGBnZXRDb2xvclNjaGVtZWAgQVBJJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8Q29sb3JTY2hlbWVTdWJzY3JpcHRpb24gLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ29uc3VtaW5nIENvbnRleHQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIHt0aGVtZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8VGhlbWVkQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxUaGVtZWRUZXh0PlxuICAgICAgICAgICAgICAgICAgVGhpcyBibG9jayBvZiB0ZXh0IGluaGVyaXRzIGl0cyB0aGVtZSB2aWEgQ29udGV4dC5cbiAgICAgICAgICAgICAgICA8L1RoZW1lZFRleHQ+XG4gICAgICAgICAgICAgIDwvVGhlbWVkQ29udGFpbmVyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICA8L1JOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDb250ZXh0IGZvcmNlZCB0byBsaWdodCB0aGVtZScsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoZW1lcy5saWdodH0+XG4gICAgICAgICAgPFRoZW1lZENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxUaGVtZWRUZXh0PlxuICAgICAgICAgICAgICBUaGlzIGJsb2NrIG9mIHRleHQgd2lsbCBhbHdheXMgcmVuZGVyIHdpdGggYSBsaWdodCB0aGVtZS5cbiAgICAgICAgICAgIDwvVGhlbWVkVGV4dD5cbiAgICAgICAgICA8L1RoZW1lZENvbnRhaW5lcj5cbiAgICAgICAgPC9STlRlc3RlclRoZW1lQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ29udGV4dCBmb3JjZWQgdG8gZGFyayB0aGVtZScsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Uk5UZXN0ZXJUaGVtZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoZW1lcy5kYXJrfT5cbiAgICAgICAgICA8VGhlbWVkQ29udGFpbmVyPlxuICAgICAgICAgICAgPFRoZW1lZFRleHQ+XG4gICAgICAgICAgICAgIFRoaXMgYmxvY2sgb2YgdGV4dCB3aWxsIGFsd2F5cyByZW5kZXIgd2l0aCBhIGRhcmsgdGhlbWUuXG4gICAgICAgICAgICA8L1RoZW1lZFRleHQ+XG4gICAgICAgICAgPC9UaGVtZWRDb250YWluZXI+XG4gICAgICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1JOVGVzdGVyIEFwcCBDb2xvcnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnQSBsaWdodCBhbmQgYSBkYXJrIHRoZW1lIGJhc2VkIG9uIHN0YW5kYXJkIGlPUyAxMyBjb2xvcnMuJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxSTlRlc3RlclRoZW1lQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhlbWVzLmxpZ2h0fT5cbiAgICAgICAgICAgIDxDb2xvclNob3djYXNlIHRoZW1lTmFtZT1cIkxpZ2h0IE1vZGVcIiAvPlxuICAgICAgICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt0aGVtZXMuZGFya30+XG4gICAgICAgICAgICA8Q29sb3JTaG93Y2FzZSB0aGVtZU5hbWU9XCJEYXJrIE1vZGVcIiAvPlxuICAgICAgICAgIDwvUk5UZXN0ZXJUaGVtZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVG9nZ2xlIG5hdGl2ZSBhcHBlYXJhbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ092ZXJ3cml0ZSBhcHBsaWNhdGlvbi1sZXZlbCBhcHBlYXJhbmNlIG1vZGUnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxUb2dnbGVOYXRpdmVBcHBlYXJhbmNlIC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7QXBwU3RhdGVWYWx1ZXN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQXBwU3RhdGUvQXBwU3RhdGUnO1xuXG5pbXBvcnQge3R5cGUgRXZlbnRTdWJzY3JpcHRpb259IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvdmVuZG9yL2VtaXR0ZXIvRXZlbnRFbWl0dGVyJztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge0FwcFN0YXRlLCBQbGF0Zm9ybSwgVGV4dCwgVmlld30gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY2xhc3MgQXBwU3RhdGVTdWJzY3JpcHRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gICRGbG93Rml4TWVQcm9wcyxcbiAgJEZsb3dGaXhNZVN0YXRlLFxuPiB7XG4gIHN0YXRlOiB7XG4gICAgYXBwU3RhdGU6ID9zdHJpbmcsXG4gICAgZXZlbnRzRGV0ZWN0ZWQ6IEFycmF5PHN0cmluZz4sXG4gICAgbWVtb3J5V2FybmluZ3M6IG51bWJlcixcbiAgICBwcmV2aW91c0FwcFN0YXRlczogQXJyYXk8PyhhbnkgfCBzdHJpbmcpPixcbiAgfSA9IHtcbiAgICBhcHBTdGF0ZTogQXBwU3RhdGUuY3VycmVudFN0YXRlLFxuICAgIHByZXZpb3VzQXBwU3RhdGVzOiBbXSxcbiAgICBtZW1vcnlXYXJuaW5nczogMCxcbiAgICBldmVudHNEZXRlY3RlZDogW10sXG4gIH07XG5cbiAgX3N1YnNjcmlwdGlvbnM6ID9BcnJheTxFdmVudFN1YnNjcmlwdGlvbj47XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIEFwcFN0YXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX2hhbmRsZUFwcFN0YXRlQ2hhbmdlKSxcbiAgICAgIEFwcFN0YXRlLmFkZEV2ZW50TGlzdGVuZXIoJ21lbW9yeVdhcm5pbmcnLCB0aGlzLl9oYW5kbGVNZW1vcnlXYXJuaW5nKSxcbiAgICBdO1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIEFwcFN0YXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5faGFuZGxlRm9jdXMpLFxuICAgICAgICBBcHBTdGF0ZS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5faGFuZGxlQmx1ciksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb25zICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuX3N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVNZW1vcnlXYXJuaW5nID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe21lbW9yeVdhcm5pbmdzOiB0aGlzLnN0YXRlLm1lbW9yeVdhcm5pbmdzICsgMX0pO1xuICB9O1xuXG4gIF9oYW5kbGVCbHVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50c0RldGVjdGVkID0gdGhpcy5zdGF0ZS5ldmVudHNEZXRlY3RlZC5zbGljZSgpO1xuICAgIGV2ZW50c0RldGVjdGVkLnB1c2goJ2JsdXInKTtcbiAgICB0aGlzLnNldFN0YXRlKHtldmVudHNEZXRlY3RlZH0pO1xuICB9O1xuXG4gIF9oYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICBjb25zdCBldmVudHNEZXRlY3RlZCA9IHRoaXMuc3RhdGUuZXZlbnRzRGV0ZWN0ZWQuc2xpY2UoKTtcbiAgICBldmVudHNEZXRlY3RlZC5wdXNoKCdmb2N1cycpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2V2ZW50c0RldGVjdGVkfSk7XG4gIH07XG5cbiAgX2hhbmRsZUFwcFN0YXRlQ2hhbmdlID0gKGFwcFN0YXRlOiBBcHBTdGF0ZVZhbHVlcykgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzQXBwU3RhdGVzID0gdGhpcy5zdGF0ZS5wcmV2aW91c0FwcFN0YXRlcy5zbGljZSgpO1xuICAgIHByZXZpb3VzQXBwU3RhdGVzLnB1c2godGhpcy5zdGF0ZS5hcHBTdGF0ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIHByZXZpb3VzQXBwU3RhdGVzLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93TWVtb3J5V2FybmluZ3MpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLm1lbW9yeVdhcm5pbmdzfTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd0N1cnJlbnRPbmx5KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dD57dGhpcy5zdGF0ZS5hcHBTdGF0ZX08L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRldGVjdEV2ZW50cykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+e0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuZXZlbnRzRGV0ZWN0ZWQpfTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VGV4dD57SlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZS5wcmV2aW91c0FwcFN0YXRlcyl9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0cy50aXRsZSA9ICdBcHBTdGF0ZSc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FwcHN0YXRlJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAnYXBwIGJhY2tncm91bmQgc3RhdHVzJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ0FwcFN0YXRlLmN1cnJlbnRTdGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdDYW4gYmUgbnVsbCBvbiBhcHAgaW5pdGlhbGl6YXRpb24nLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8VGV4dD57QXBwU3RhdGUuY3VycmVudFN0YXRlfTwvVGV4dD47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3Vic2NyaWJlZCBBcHBTdGF0ZTonLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgY2hhbmdlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc3RhdGUsIHNvIHlvdSBjYW4gb25seSBldmVyIHNlZSBpdCByZW5kZXJlZCBhcyBcImFjdGl2ZVwiJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8QXBwU3RhdGVTdWJzY3JpcHRpb24gc2hvd0N1cnJlbnRPbmx5PXt0cnVlfSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdQcmV2aW91cyBzdGF0ZXM6JyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8QXBwU3RhdGVTdWJzY3JpcHRpb24gc2hvd0N1cnJlbnRPbmx5PXtmYWxzZX0gLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICB0aXRsZTogJ01lbW9yeSBXYXJuaW5ncycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnSW4gdGhlIElPUyBzaW11bGF0b3IsIGhpdCBTaGlmdCtDb21tYW5kK00gdG8gc2ltdWxhdGUgYSBtZW1vcnkgd2FybmluZy4nLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxBcHBTdGF0ZVN1YnNjcmlwdGlvbiBzaG93TWVtb3J5V2FybmluZ3M9e3RydWV9IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHRpdGxlOiAnRm9jdXMvQmx1ciBFdmVudHMnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0luIHRoZSBBbmRyb2lkIHNpbXVsYXRvciwgdG9nZ2xlIHRoZSBub3RpZmljYXRpb24gZHJhd2VyIHRvIGZpcmUgZXZlbnRzLicsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEFwcFN0YXRlU3Vic2NyaXB0aW9uIGRldGVjdEV2ZW50cz17dHJ1ZX0gLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGV9IGZyb20gJy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBEeW5hbWljQ29sb3JJT1MsXG4gIFBsYXRmb3JtLFxuICBQbGF0Zm9ybUNvbG9yLFxuICBTdHlsZVNoZWV0LFxuICBWaWV3LFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJveDoge1xuICAgIHdpZHRoOiAxMDAsXG4gICAgaGVpZ2h0OiAxMDAsXG4gIH0sXG4gIHdyYXBwZXI6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgYm9yZGVyMToge1xuICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICBib3JkZXJDb2xvcjogJ2Jyb3duJyxcbiAgICBib3JkZXJTdHlsZTogJ2RvdHRlZCcsXG4gIH0sXG4gIGJvcmRlclJhZGl1czoge1xuICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICBib3JkZXJSYWRpdXM6IDEwLFxuICAgIGJvcmRlckNvbG9yOiAnY3lhbicsXG4gIH0sXG4gIGJvcmRlcjI6IHtcbiAgICBib3JkZXJXaWR0aDogMTAsXG4gICAgYm9yZGVyVG9wQ29sb3I6ICdyZWQnLFxuICAgIGJvcmRlclJpZ2h0Q29sb3I6ICd5ZWxsb3cnLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiAnZ3JlZW4nLFxuICAgIGJvcmRlckxlZnRDb2xvcjogJ2JsdWUnLFxuICB9LFxuICBib3JkZXIzOiB7XG4gICAgYm9yZGVyQ29sb3I6ICdwdXJwbGUnLFxuICAgIGJvcmRlclRvcFdpZHRoOiA3LFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IDIwLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAxMCxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IDUsXG4gIH0sXG4gIGJvcmRlcjQ6IHtcbiAgICBib3JkZXJUb3BXaWR0aDogMTAsXG4gICAgYm9yZGVyVG9wQ29sb3I6ICdyZWQnLFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IDIwLFxuICAgIGJvcmRlclJpZ2h0Q29sb3I6ICd5ZWxsb3cnLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAzMCxcbiAgICBib3JkZXJCb3R0b21Db2xvcjogJ2dyZWVuJyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IDQwLFxuICAgIGJvcmRlckxlZnRDb2xvcjogJ2JsdWUnLFxuICB9LFxuICBib3JkZXI1OiB7XG4gICAgYm9yZGVyUmFkaXVzOiA1MCxcbiAgICBib3JkZXJUb3BXaWR0aDogMTAsXG4gICAgYm9yZGVyVG9wQ29sb3I6ICdyZWQnLFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IDIwLFxuICAgIGJvcmRlclJpZ2h0Q29sb3I6ICd5ZWxsb3cnLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAzMCxcbiAgICBib3JkZXJCb3R0b21Db2xvcjogJ2dyZWVuJyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IDQwLFxuICAgIGJvcmRlckxlZnRDb2xvcjogJ2JsdWUnLFxuICB9LFxuICBib3JkZXI2OiB7XG4gICAgYm9yZGVyVG9wV2lkdGg6IDEwLFxuICAgIGJvcmRlclRvcENvbG9yOiAncmVkJyxcbiAgICBib3JkZXJSaWdodFdpZHRoOiAyMCxcbiAgICBib3JkZXJSaWdodENvbG9yOiAneWVsbG93JyxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogMzAsXG4gICAgYm9yZGVyQm90dG9tQ29sb3I6ICdncmVlbicsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiA0MCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6ICdibHVlJyxcblxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDEwMCxcbiAgfSxcbiAgYm9yZGVyNzoge1xuICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICBib3JkZXJDb2xvcjogJyNmMDA3JyxcbiAgICBib3JkZXJSYWRpdXM6IDMwLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfSxcbiAgYm9yZGVyN19pbm5lcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgIHdpZHRoOiAxMDAsXG4gICAgaGVpZ2h0OiAxMDAsXG4gIH0sXG4gIGJvcmRlcjg6IHtcbiAgICB3aWR0aDogNjAsXG4gICAgaGVpZ2h0OiA2MCxcbiAgICBib3JkZXJDb2xvcjogJ2JsYWNrJyxcbiAgICBtYXJnaW5SaWdodDogMTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnbGlnaHRncmV5JyxcbiAgfSxcbiAgYm9yZGVyOFRvcDoge1xuICAgIGJvcmRlclRvcFdpZHRoOiA1LFxuICB9LFxuICBib3JkZXI4TGVmdDoge1xuICAgIGJvcmRlckxlZnRXaWR0aDogNSxcbiAgICBib3JkZXJTdHlsZTogJ2RvdHRlZCcsXG4gIH0sXG4gIGJvcmRlcjhCb3R0b206IHtcbiAgICBib3JkZXJCb3R0b21XaWR0aDogNSxcbiAgfSxcbiAgYm9yZGVyOFJpZ2h0OiB7XG4gICAgYm9yZGVyUmlnaHRXaWR0aDogNSxcbiAgICBib3JkZXJTdHlsZTogJ2Rhc2hlZCcsXG4gIH0sXG4gIGJvcmRlcjk6IHtcbiAgICBib3JkZXJXaWR0aDogMTAsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMTAsXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IDIwLFxuICAgIGJvcmRlckNvbG9yOiAnYmxhY2snLFxuICB9LFxuICBib3JkZXIxMDoge1xuICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMTAsXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IDIwLFxuICAgIGJvcmRlckNvbG9yOiAnYmxhY2snLFxuICAgIGVsZXZhdGlvbjogMTAsXG4gIH0sXG4gIGJvcmRlcjExOiB7XG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBib3JkZXJUb3BXaWR0aDogNTAsXG4gICAgYm9yZGVyUmlnaHRXaWR0aDogMCxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogNTAsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiAxMDAsXG4gICAgYm9yZGVyVG9wQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyUmlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXJCb3R0b21Db2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXJMZWZ0Q29sb3I6ICdyZWQnLFxuICB9LFxuICBib3JkZXIxMjoge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBib3JkZXJUb3BXaWR0aDogMTAsXG4gICAgYm9yZGVyUmlnaHRXaWR0aDogMjAsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IDMwLFxuICAgIGJvcmRlckxlZnRXaWR0aDogNDAsXG4gICAgYm9yZGVyUmFkaXVzOiAyMCxcbiAgfSxcbiAgYm9yZGVyMTM6IHtcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgYm9yZGVyVG9wV2lkdGg6IDEwLFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IDIwLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAzMCxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IDQwLFxuICAgIGJvcmRlclRvcENvbG9yOiAncmVkJyxcbiAgICBib3JkZXJSaWdodENvbG9yOiAnZ3JlZW4nLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiAnYmx1ZScsXG4gICAgYm9yZGVyTGVmdENvbG9yOiAnbWFnZW50YScsXG4gICAgYm9yZGVyUmFkaXVzOiAyMCxcbiAgfSxcbiAgYm9yZGVyMTQ6IHtcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgYm9yZGVyVG9wV2lkdGg6IDEwLFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IDIwLFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiAzMCxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IDQwLFxuICAgIGJvcmRlclRvcENvbG9yOiAncmVkJyxcbiAgICBib3JkZXJSaWdodENvbG9yOiAnZ3JlZW4nLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiAnYmx1ZScsXG4gICAgYm9yZGVyTGVmdENvbG9yOiAnbWFnZW50YScsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMTAsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDQwLFxuICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAzMCxcbiAgICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiA0MCxcbiAgfSxcbiAgYm9yZGVyMTU6IHtcbiAgICBib3JkZXJXaWR0aDogMTAsXG4gICAgYm9yZGVyQ29sb3I6IFBsYXRmb3JtLnNlbGVjdCh7XG4gICAgICBpb3M6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUdyYXk0JyksXG4gICAgICBhbmRyb2lkOiBQbGF0Zm9ybUNvbG9yKCdAYW5kcm9pZDpjb2xvci9ob2xvX29yYW5nZV9kYXJrJyksXG4gICAgICB3aW5kb3dzOiBQbGF0Zm9ybUNvbG9yKCdTeXN0ZW1BY2NlbnRDb2xvckRhcmsxJyksXG4gICAgICBkZWZhdWx0OiAnYmxhY2snLFxuICAgIH0pLFxuICB9LFxuICBib3JkZXIxNjoge1xuICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICBib3JkZXJDb2xvcjpcbiAgICAgIFBsYXRmb3JtLk9TID09PSAnaW9zJ1xuICAgICAgICA/IER5bmFtaWNDb2xvcklPUyh7bGlnaHQ6ICdtYWdlbnRhJywgZGFyazogJ2N5YW4nfSlcbiAgICAgICAgOiAnYmxhY2snLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gIHRpdGxlOiAnQm9yZGVyJyxcbiAgY2F0ZWdvcnk6ICdVSScsXG4gIGRlc2NyaXB0aW9uOiAnRGVtb25zdHJhdGVzIHNvbWUgb2YgdGhlIGJvcmRlciBzdHlsZXMgYXZhaWxhYmxlIHRvIFZpZXdzLicsXG4gIGV4YW1wbGVzOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdFcXVhbC1XaWR0aCAvIFNhbWUtQ29sb3InLFxuICAgICAgbmFtZTogJ2VxdWFsLXdpZHRoLXNhbWUtY29sb3InLFxuICAgICAgZGVzY3JpcHRpb246ICdib3JkZXJXaWR0aCAmIGJvcmRlckNvbG9yJyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJib3JkZXItdGVzdC1lcXVhbC13aWR0aC1zYW1lLWNvbG9yXCJcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJvcmRlcjFdfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdFcXVhbC1XaWR0aCAvIFNhbWUtQ29sb3InLFxuICAgICAgbmFtZTogJ2VxdWFsLXdpZHRoLXNhbWUtY29sb3ItYm9yZGVyLXJhZGl1cycsXG4gICAgICBkZXNjcmlwdGlvbjogJ2JvcmRlcldpZHRoICYgYm9yZGVyQ29sb3IgJiBib3JkZXJSYWRpdXMnLFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHRlc3RJRD1cImJvcmRlci10ZXN0LWVxdWFsLXdpZHRoLXNhbWUtY29sb3ItYm9yZGVyLXJhZGl1c1wiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXJSYWRpdXNdfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdFcXVhbC1XaWR0aCBCb3JkZXJzJyxcbiAgICAgIG5hbWU6ICdlcXVhbC13aWR0aC1ib3JkZXJzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnYm9yZGVyV2lkdGggJiBib3JkZXIqQ29sb3InLFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHRlc3RJRD1cImJvcmRlci10ZXN0LWVxdWFsLXdpZHRoLWJvcmRlcnNcIlxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm9yZGVyMl19XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ1NhbWUtQ29sb3IgQm9yZGVycycsXG4gICAgICBuYW1lOiAnc2FtZS1jb2xvci1ib3JkZXJzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnYm9yZGVyKldpZHRoICYgYm9yZGVyQ29sb3InLFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHRlc3RJRD1cImJvcmRlci10ZXN0LXNhbWUtY29sb3ItYm9yZGVyc1wiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXIzXX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIEJvcmRlcnMnLFxuICAgICAgbmFtZTogJ2N1c3RvbS1ib3JkZXJzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnYm9yZGVyKldpZHRoICYgYm9yZGVyKkNvbG9yJyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJib3JkZXItdGVzdC1jdXN0b20tYm9yZGVyc1wiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXI0XX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIEJvcmRlcnMnLFxuICAgICAgbmFtZTogJ2N1c3RvbS1ib3JkZXJzLWlvcy0xJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnYm9yZGVyKldpZHRoICYgYm9yZGVyKkNvbG9yJyxcbiAgICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJib3JkZXItdGVzdC1jdXN0b20tYm9yZGVycy1pb3MtMVwiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXI1XX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIEJvcmRlcnMnLFxuICAgICAgbmFtZTogJ2N1c3RvbS1ib3JkZXJzLWlvcy0yJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnYm9yZGVyKldpZHRoICYgYm9yZGVyKkNvbG9yJyxcbiAgICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJib3JkZXItdGVzdC1jdXN0b20tYm9yZGVycy1pb3MtMlwiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXI2XX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIEJvcmRlcnMnLFxuICAgICAgbmFtZTogJ2N1c3RvbS1ib3JkZXJzLWlvcy1jbGlwcGluZycsXG4gICAgICBkZXNjcmlwdGlvbjogJ2JvcmRlclJhZGl1cyAmIGNsaXBwaW5nJyxcbiAgICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJib3JkZXItdGVzdC1jdXN0b20tYm9yZGVycy1pb3MtY2xpcHBpbmdcIlxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm9yZGVyN119PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3JkZXI3X2lubmVyfSAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ1NpbmdsZSBCb3JkZXJzJyxcbiAgICAgIG5hbWU6ICdzaW5nbGUtYm9yZGVycycsXG4gICAgICBkZXNjcmlwdGlvbjogJ3RvcCwgbGVmdCwgYm90dG9tIHJpZ2h0JyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3IHRlc3RJRD1cImJvcmRlci10ZXN0LXNpbmdsZS1ib3JkZXJzXCIgc3R5bGU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJvcmRlcjgsIHN0eWxlcy5ib3JkZXI4VG9wXX0gLz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJvcmRlcjgsIHN0eWxlcy5ib3JkZXI4TGVmdF19IC8+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXI4LCBzdHlsZXMuYm9yZGVyOEJvdHRvbV19IC8+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXI4LCBzdHlsZXMuYm9yZGVyOFJpZ2h0XX0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdDb3JuZXIgUmFkaWknLFxuICAgICAgbmFtZTogJ2Nvcm5lci1yYWRpaScsXG4gICAgICBkZXNjcmlwdGlvbjogJ2JvcmRlclRvcExlZnRSYWRpdXMgJiBib3JkZXJCb3R0b21SaWdodFJhZGl1cycsXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgdGVzdElEPVwiYm9yZGVyLXRlc3QtY29ybmVyLXJhZGlpXCJcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJvcmRlcjldfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdDb3JuZXIgUmFkaWkgLyBFbGV2YXRpb24nLFxuICAgICAgbmFtZTogJ2Nvcm5lci1yYWRpaS1lbGV2YXRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICdib3JkZXJUb3BMZWZ0UmFkaXVzICYgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgJiBlbGV2YXRpb24nLFxuICAgICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJib3JkZXItdGVzdC1jb3JuZXItcmFkaWktZWxldmF0aW9uXCJcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJvcmRlcjEwXX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQ1NTIFRyaWNrIC0gVHJpYW5nbGUnLFxuICAgICAgbmFtZTogJ2Nzcy10cmljay10cmlhbmdsZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ2NyZWF0ZSBhIHRyaWFuZ2xlIGJ5IG1hbmlwdWxhdGluZyBib3JkZXIgY29sb3JzIGFuZCB3aWR0aHMnLFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHRlc3RJRD1cImJvcmRlci10ZXN0LWNzcy10cmljay10cmlhbmdsZVwiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3JkZXIxMV19XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0N1cnZlZCBib3JkZXIoTGVmdHxSaWdodHxCb3R0b218VG9wKVdpZHRoJyxcbiAgICAgIG5hbWU6ICdjdXJ2ZWQtYm9yZGVyLWxyYnQtd2lkdGgnLFxuICAgICAgZGVzY3JpcHRpb246ICdNYWtlIGEgbm9uLXVuaWZvcm0gd2lkdGggY3VydmVkIGJvcmRlcicsXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgdGVzdElEPVwiYm9yZGVyLXRlc3QtY3VydmVkLWJvcmRlci1scmJ0LXdpZHRoXCJcbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJvcmRlcjEyXX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQ3VydmVkIGJvcmRlcihMZWZ0fFJpZ2h0fEJvdHRvbXxUb3ApQ29sb3InLFxuICAgICAgbmFtZTogJ2N1cnZlZC1ib3JkZXItbHJidC1jb2xvcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ01ha2UgYSBub24tdW5pZm9ybSBjb2xvciBjdXJ2ZWQgYm9yZGVyJyxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICB0ZXN0SUQ9XCJib3JkZXItdGVzdC1jdXJ2ZWQtYm9yZGVyLWxyYnQtY29sb3JcIlxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm9yZGVyMTNdfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdDdXJ2ZWQgYm9yZGVyKFRvcHxCb3R0b20pKExlZnR8UmlnaHQpUmFkaXVzJyxcbiAgICAgIG5hbWU6ICdjdXJ2ZWQtYm9yZGVyLXRiLWxyLXJhZGl1cycsXG4gICAgICBkZXNjcmlwdGlvbjogJ01ha2UgYSBub24tdW5pZm9ybSByYWRpdXMgY3VydmVkIGJvcmRlcicsXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgdGVzdElEPVwiYm9yZGVyLXRlc3QtY3VydmVkLWJvcmRlci10Yi1sci1yYWRpdXNcIlxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm9yZGVyMTRdfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdTeXN0ZW0gY29sb3InLFxuICAgICAgbmFtZTogJ3N5c3RlbS1jb2xvcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ1VzaW5nIGEgcGxhdGZvcm0gY29sb3InLFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHRlc3RJRD1cImJvcmRlci10ZXN0LXN5c3RlbS1jb2xvclwiXG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3JkZXIxNV19XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0R5bmFtaWMgY29sb3InLFxuICAgICAgbmFtZTogJ2R5bmFtaWMtY29sb3ItaW9zJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVXNpbmcgYSBjdXN0b20gZHluYW1pYyBjb2xvcicsXG4gICAgICBwbGF0Zm9ybTogJ2lvcycsXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgdGVzdElEPVwiYm9yZGVyLXRlc3QtZHluYW1pYy1jb2xvci1pb3NcIlxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm9yZGVyMTZdfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG59OiBSTlRlc3Rlck1vZHVsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge0ltYWdlLCBTdHlsZVNoZWV0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJveDoge1xuICAgIHdpZHRoOiAxMDAsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gIH0sXG4gIHNoYWRvdzE6IHtcbiAgICBzaGFkb3dPcGFjaXR5OiAwLjUsXG4gICAgc2hhZG93UmFkaXVzOiAzLFxuICAgIHNoYWRvd09mZnNldDoge3dpZHRoOiAyLCBoZWlnaHQ6IDJ9LFxuICB9LFxuICBzaGFkb3cyOiB7XG4gICAgc2hhZG93T3BhY2l0eTogMS4wLFxuICAgIHNoYWRvd0NvbG9yOiAncmVkJyxcbiAgICBzaGFkb3dSYWRpdXM6IDAsXG4gICAgc2hhZG93T2Zmc2V0OiB7d2lkdGg6IDMsIGhlaWdodDogM30sXG4gIH0sXG4gIHNoYWRvd1NoYXBlZDoge1xuICAgIGJvcmRlclJhZGl1czogNTAsXG4gIH0sXG4gIHNoYWRvd0ltYWdlOiB7XG4gICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgfSxcbiAgc2hhZG93Q2hpbGQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIH0sXG4gIHNoYWRvd0NoaWxkQm94OiB7XG4gICAgd2lkdGg6IDgwLFxuICAgIGhlaWdodDogODAsXG4gICAgYm9yZGVyUmFkaXVzOiA0MCxcbiAgICBtYXJnaW46IDgsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgfSxcblxuICBlbGV2YXRpb24xOiB7XG4gICAgZWxldmF0aW9uOiAxLFxuICB9LFxuICBlbGV2YXRpb24yOiB7XG4gICAgZWxldmF0aW9uOiAzLFxuICB9LFxuICBlbGV2YXRpb24zOiB7XG4gICAgZWxldmF0aW9uOiAxMCxcbiAgfSxcbiAgc2hhZG93Q29sb3IxOiB7XG4gICAgc2hhZG93Q29sb3I6ICdyZWQnLFxuICB9LFxuICBzaGFkb3dDb2xvcjI6IHtcbiAgICBzaGFkb3dDb2xvcjogJ2JsdWUnLFxuICB9LFxuICBzaGFkb3dDb2xvcjM6IHtcbiAgICBzaGFkb3dDb2xvcjogJyMwMEZGMDA4MCcsXG4gIH0sXG4gIGJvcmRlcjoge1xuICAgIGJvcmRlcldpZHRoOiA1LFxuICAgIGJvcmRlckNvbG9yOiAnI0VFRScsXG4gIH0sXG59KTtcblxuZXhwb3J0cy50aXRsZSA9ICdCb3ggU2hhZG93JztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnVUknO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9XG4gICdEZW1vbnN0cmF0ZXMgc29tZSBvZiB0aGUgc2hhZG93IHN0eWxlcyBhdmFpbGFibGUgdG8gVmlld3MuJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ0Jhc2ljIHNoYWRvdycsXG4gICAgZGVzY3JpcHRpb246ICdzaGFkb3dPcGFjaXR5OiAwLjUsIHNoYWRvd09mZnNldDogezIsIDJ9JyxcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuc2hhZG93MV19IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0NvbG9yZWQgc2hhZG93JyxcbiAgICBkZXNjcmlwdGlvbjogXCJzaGFkb3dDb2xvcjogJ3JlZCcsIHNoYWRvd1JhZGl1czogMFwiLFxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiA8VmlldyBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5zaGFkb3cyXX0gLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hhcGVkIHNoYWRvdycsXG4gICAgZGVzY3JpcHRpb246ICdib3JkZXJSYWRpdXM6IDUwJyxcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuc2hhZG93MSwgc3R5bGVzLnNoYWRvd1NoYXBlZF19IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ltYWdlIHNoYWRvdycsXG4gICAgZGVzY3JpcHRpb246ICdJbWFnZSBzaGFkb3dzIGFyZSBkZXJpdmVkIGV4YWN0bHkgZnJvbSB0aGUgcGl4ZWxzLicsXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEltYWdlXG4gICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvaGF3ay5wbmcnKX1cbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5zaGFkb3cxLCBzdHlsZXMuc2hhZG93SW1hZ2VdfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDaGlsZCBzaGFkb3cnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0ZvciB2aWV3cyB3aXRob3V0IGFuIG9wYXF1ZSBiYWNrZ3JvdW5kIGNvbG9yLCBzaGFkb3cgd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIHN1YnZpZXdzLicsXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuc2hhZG93MSwgc3R5bGVzLnNoYWRvd0NoaWxkXX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuc2hhZG93Q2hpbGRCb3hdfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5cbiAge1xuICAgIHRpdGxlOiAnQmFzaWMgZWxldmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VsZXZhdGlvbjogMSwgMywgNicsXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmVsZXZhdGlvbjFdfSAvPlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmVsZXZhdGlvbjJdfSAvPlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmVsZXZhdGlvbjNdfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ZyYWN0aW9uYWwgZWxldmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VsZXZhdGlvbjogMC4xLCAwLjUsIDEuNScsXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwge2VsZXZhdGlvbjogMC4xfV19IC8+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCB7ZWxldmF0aW9uOiAwLjV9XX0gLz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5ib3gsIHtlbGV2YXRpb246IDEuNX1dfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0NvbG9yZWQgc2hhZG93JyxcbiAgICBkZXNjcmlwdGlvbjogXCJzaGFkb3dDb2xvcjogJ3JlZCcsICdibHVlJywgJyMwMEZGMDA4MCdcIixcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuZWxldmF0aW9uMSwgc3R5bGVzLnNoYWRvd0NvbG9yMV19IC8+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuZWxldmF0aW9uMiwgc3R5bGVzLnNoYWRvd0NvbG9yMl19IC8+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuZWxldmF0aW9uMywgc3R5bGVzLnNoYWRvd0NvbG9yM119IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hhcGVkIHNoYWRvdycsXG4gICAgZGVzY3JpcHRpb246ICdib3JkZXJSYWRpdXM6IDUwJyxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuZWxldmF0aW9uMSwgc3R5bGVzLnNoYWRvd1NoYXBlZF19IC8+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuZWxldmF0aW9uMiwgc3R5bGVzLnNoYWRvd1NoYXBlZF19IC8+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuZWxldmF0aW9uMywgc3R5bGVzLnNoYWRvd1NoYXBlZF19IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQm9yZGVycycsXG4gICAgZGVzY3JpcHRpb246ICdib3JkZXJXaWR0aDogNScsXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmVsZXZhdGlvbjEsIHN0eWxlcy5ib3JkZXJdfSAvPlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmVsZXZhdGlvbjIsIHN0eWxlcy5ib3JkZXJdfSAvPlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmVsZXZhdGlvbjMsIHN0eWxlcy5ib3JkZXJdfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0J1dHRvbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuZXhwb3J0cy5kaXNwbGF5TmFtZSA9ICh1bmRlZmluZWQ6ID9zdHJpbmcpO1xuZXhwb3J0cy5mcmFtZXdvcmsgPSAnUmVhY3QnO1xuZXhwb3J0cy50aXRsZSA9ICdDcmFzaCc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAnQ3Jhc2ggZXhhbXBsZXMuJztcblxuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnSlMgY3Jhc2gnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0aXRsZT1cIkpTIGNyYXNoXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0ge307XG4gICAgICAgICAgICAvLyAkRmxvd0lnbm9yZVtwcm9wLW1pc3NpbmddXG4gICAgICAgICAgICAvLyAkRmxvd0lnbm9yZVtpbmNvbXBhdGlibGUtdXNlXVxuICAgICAgICAgICAgY29uc3QgYiA9IGEudy5xOyAvLyBqcyBjcmFzaCBoZXJlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhiKTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWxlcnQsIEJ1dHRvbiwgRGV2U2V0dGluZ3N9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydHMudGl0bGUgPSAnRGV2U2V0dGluZ3MnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9kZXZzZXR0aW5ncyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0N1c3RvbWl6ZSB0aGUgZGV2ZWxvcG1lbnQgc2V0dGluZ3MnO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnQWRkIGRldiBtZW51IGl0ZW0nLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHRpdGxlPVwiQWRkXCJcbiAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICBEZXZTZXR0aW5ncy5hZGRNZW51SXRlbSgnU2hvdyBTZWNyZXQgRGV2IFNjcmVlbicsICgpID0+IHtcbiAgICAgICAgICAgICAgQWxlcnQuYWxlcnQoJ1Nob3dpbmcgc2VjcmV0IGRldiBzY3JlZW4hJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdSZWxvYWQgdGhlIGFwcCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdGl0bGU9XCJSZWxvYWRcIlxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgIERldlNldHRpbmdzLnJlbG9hZCgpO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0RpbWVuc2lvbnMsIFRleHQsIHVzZVdpbmRvd0RpbWVuc2lvbnN9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbnR5cGUgUHJvcHMgPSB7ZGltOiBzdHJpbmd9O1xuXG5mdW5jdGlvbiBEaW1lbnNpb25zU3Vic2NyaXB0aW9uKHByb3BzOiBQcm9wcykge1xuICBjb25zdCBbZGltcywgc2V0RGltc10gPSB1c2VTdGF0ZSgoKSA9PiBEaW1lbnNpb25zLmdldChwcm9wcy5kaW0pKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IERpbWVuc2lvbnMuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZGltZW5zaW9ucyA9PiB7XG4gICAgICBzZXREaW1zKGRpbWVuc2lvbnNbcHJvcHMuZGltXSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnJlbW92ZSgpO1xuICB9LCBbcHJvcHMuZGltXSk7XG5cbiAgcmV0dXJuIDxUZXh0PntKU09OLnN0cmluZ2lmeShkaW1zLCBudWxsLCAyKX08L1RleHQ+O1xufVxuXG5jb25zdCBEaW1lbnNpb25zVmlhSG9vayA9ICgpID0+IHtcbiAgY29uc3QgZGltcyA9IHVzZVdpbmRvd0RpbWVuc2lvbnMoKTtcbiAgcmV0dXJuIDxUZXh0PntKU09OLnN0cmluZ2lmeShkaW1zLCBudWxsLCAyKX08L1RleHQ+O1xufTtcblxuZXhwb3J0cy50aXRsZSA9ICdEaW1lbnNpb25zJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnVUknO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvZGltZW5zaW9ucyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0RpbWVuc2lvbnMgb2YgdGhlIHZpZXdwb3J0JztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ3VzZVdpbmRvd0RpbWVuc2lvbnMgaG9vaycsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxEaW1lbnNpb25zVmlhSG9vayAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdOb24tY29tcG9uZW50IGBnZXRgIEFQSTogd2luZG93JyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8RGltZW5zaW9uc1N1YnNjcmlwdGlvbiBkaW09XCJ3aW5kb3dcIiAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdOb24tY29tcG9uZW50IGBnZXRgIEFQSTogc2NyZWVuJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8RGltZW5zaW9uc1N1YnNjcmlwdGlvbiBkaW09XCJzY3JlZW5cIiAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5pbXBvcnQgKiBhcyBJbnRlcnNlY3Rpb25PYnNlcnZlckJlbmNobWFyayBmcm9tICcuL0ludGVyc2VjdGlvbk9ic2VydmVyQmVuY2htYXJrJztcbmltcG9ydCAqIGFzIEludGVyc2VjdGlvbk9ic2VydmVyTURORXhhbXBsZSBmcm9tICcuL0ludGVyc2VjdGlvbk9ic2VydmVyTURORXhhbXBsZSc7XG5cbmV4cG9ydCBjb25zdCBmcmFtZXdvcmsgPSAnUmVhY3QnO1xuZXhwb3J0IGNvbnN0IHRpdGxlID0gJ0ludGVyc2VjdGlvbk9ic2VydmVyJztcbmV4cG9ydCBjb25zdCBjYXRlZ29yeSA9ICdVSSc7XG5leHBvcnQgY29uc3QgZG9jdW1lbnRhdGlvblVSTCA9XG4gICdodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSW50ZXJzZWN0aW9uX09ic2VydmVyX0FQSSc7XG5leHBvcnQgY29uc3QgZGVzY3JpcHRpb24gPVxuICAnQVBJIHRvIGRldGVjdCBwYWludCB0aW1lcyBmb3IgZWxlbWVudHMgYW5kIGNoYW5nZXMgaW4gdGhlaXIgaW50ZXJzZWN0aW9ucyB3aXRoIG90aGVyIGVsZW1lbnRzLic7XG5leHBvcnQgY29uc3Qgc2hvd0luZGl2aWR1YWxFeGFtcGxlcyA9IHRydWU7XG5leHBvcnQgY29uc3QgZXhhbXBsZXMgPSBbXG4gIEludGVyc2VjdGlvbk9ic2VydmVyTURORXhhbXBsZSxcbiAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJCZW5jaG1hcmssXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB7Uk5UZXN0ZXJUaGVtZUNvbnRleHR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJUaGVtZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICB0eXBlIEVsZW1lbnRSZWYsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtCdXR0b24sIFNjcm9sbFZpZXcsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ0ludGVyc2VjdGlvbk9ic2VydmVyIEJlbmNobWFyayc7XG5leHBvcnQgY29uc3QgdGl0bGUgPSBuYW1lO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgJ0V4YW1wbGUgb2YgdXNpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBhIGxhcmdlIGFtb3VudCBvZiBVSSBlbGVtZW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiA8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJCZW5jaGFyayAvPjtcbn1cblxuY29uc3QgUk9XUyA9IDEwMDtcbmNvbnN0IENPTFVNTlMgPSA1O1xuXG5mdW5jdGlvbiBJbnRlcnNlY3Rpb25PYnNlcnZlckJlbmNoYXJrKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbaXNPYnNlcnZpbmcsIHNldE9ic2VydmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b25Db250YWluZXJ9PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdGl0bGU9e2lzT2JzZXJ2aW5nID8gJ1N0b3Agb2JzZXJ2aW5nJyA6ICdTdGFydCBvYnNlcnZpbmcnfVxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHNldE9ic2VydmluZyhvYnNlcnZpbmcgPT4gIW9ic2VydmluZyl9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8U2Nyb2xsVmlldz5cbiAgICAgICAge0FycmF5KFJPV1MpXG4gICAgICAgICAgLmZpbGwobnVsbClcbiAgICAgICAgICAubWFwKChfLCByb3cpID0+IChcbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fSBrZXk9e3Jvd30+XG4gICAgICAgICAgICAgIHtBcnJheShDT0xVTU5TKVxuICAgICAgICAgICAgICAgIC5maWxsKG51bGwpXG4gICAgICAgICAgICAgICAgLm1hcCgoXzIsIGNvbHVtbikgPT4gKFxuICAgICAgICAgICAgICAgICAgPEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXg9e0NPTFVNTlMgKiByb3cgKyBjb2x1bW59XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU9e2lzT2JzZXJ2aW5nfVxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbHVtbn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgKSl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEl0ZW0oe2luZGV4LCBvYnNlcnZlfToge2luZGV4OiBudW1iZXIsIG9ic2VydmU6IGJvb2xlYW59KTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlQ29udGV4dChSTlRlc3RlclRoZW1lQ29udGV4dCk7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjw/RWxlbWVudFJlZjx0eXBlb2YgVmlldz4+KCk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gcmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoIW9ic2VydmUgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIGVudHJpZXMgPT4ge1xuICAgICAgICAvLyBZb3UgY2FuIGluc3BlY3QgdGhlIGFjdHVhbCBlbnRyaWVzIGhlcmUuXG4gICAgICAgIC8vIFdlIGRvbid0IGxvZyB0aGVtIGJ5IGRlZmF1bHQgdG8gYXZvaWQgdGhlIGxvZ3MgdGhlbXNlbHZlcyB0byBkZWdyYWRlXG4gICAgICAgIC8vIHBlcmZvcm1hbmNlLlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGhyZXNob2xkOiBbMCwgMV0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbb2JzZXJ2ZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIHJlZj17cmVmfVxuICAgICAgc3R5bGU9e1tcbiAgICAgICAgc3R5bGVzLml0ZW0sXG4gICAgICAgIHtiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLlNlY29uZGFyeVN5c3RlbUJhY2tncm91bmRDb2xvcn0sXG4gICAgICBdfT5cbiAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLml0ZW1UZXh0LCB7Y29sb3I6IHRoZW1lLkxhYmVsQ29sb3J9XX0+XG4gICAgICAgIHtpbmRleCArIDF9XG4gICAgICA8L1RleHQ+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGJ1dHRvbkNvbnRhaW5lcjoge1xuICAgIHBhZGRpbmc6IDEwLFxuICB9LFxuICByb3c6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgfSxcbiAgaXRlbToge1xuICAgIGZsZXg6IDEsXG4gICAgcGFkZGluZzogMTIsXG4gICAgbWFyZ2luOiA1LFxuICB9LFxuICBpdGVtVGV4dDoge1xuICAgIGZvbnRTaXplOiAyMixcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHtSTlRlc3RlclRoZW1lQ29udGV4dH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlclRoZW1lJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgRWxlbWVudFJlZixcbiAgdXNlQ29udGV4dCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1Njcm9sbFZpZXcsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ0ludGVyc2VjdGlvbk9ic2VydmVyIE1ETiBFeGFtcGxlJztcbmV4cG9ydCBjb25zdCB0aXRsZSA9IG5hbWU7XG5leHBvcnQgY29uc3QgZGVzY3JpcHRpb24gPVxuICAnQ29weSBvZiB0aGUgZXhhbXBsZSBpbiBNRE4gYWJvdXQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgdGhyZXNob2xkcy4nO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICByZXR1cm4gPEludGVyc2VjdGlvbk9ic2VydmVyTURORXhhbXBsZSAvPjtcbn1cblxuLyoqXG4gKiBTaW1pbGFyIHRvIHRoZSBleGFtcGxlIGluIE1ETjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ludGVyc2VjdGlvbl9PYnNlcnZlcl9BUElcbiAqL1xuZnVuY3Rpb24gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNRE5FeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB0aGVtZSA9IHVzZUNvbnRleHQoUk5UZXN0ZXJUaGVtZUNvbnRleHQpO1xuXG4gIHJldHVybiAoXG4gICAgPFNjcm9sbFZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy5zY3JvbGxEb3duVGV4dCwge2NvbG9yOiB0aGVtZS5MYWJlbENvbG9yfV19PlxuICAgICAgICDihpPihpMgU2Nyb2xsIGRvd24g4oaT4oaTXG4gICAgICA8L1RleHQ+XG4gICAgICA8TGlzdEl0ZW0gdGhyZXNob2xkcz17YnVpbGRUaHJlc2hvbGRMaXN0KDEwMCl9IC8+XG4gICAgICA8TGlzdEl0ZW0gdGhyZXNob2xkcz17WzAuNV19IGluaXRpYWxWYWx1ZT17MC40OX0gLz5cbiAgICAgIDxMaXN0SXRlbSB0aHJlc2hvbGRzPXtidWlsZFRocmVzaG9sZExpc3QoMTApfSAvPlxuICAgICAgPExpc3RJdGVtIHRocmVzaG9sZHM9e2J1aWxkVGhyZXNob2xkTGlzdCg0KX0gLz5cbiAgICA8L1Njcm9sbFZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIExpc3RJdGVtKHByb3BzOiB7XG4gIHRocmVzaG9sZHM6IEFycmF5PG51bWJlcj4sXG4gIGluaXRpYWxWYWx1ZT86IG51bWJlcixcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgaXRlbVJlZiA9IHVzZVJlZjw/RWxlbWVudFJlZjx0eXBlb2YgVmlldz4+KG51bGwpO1xuICBjb25zdCBbaW50ZXJzZWN0aW9uUmF0aW8sIHNldEludGVyc2VjdGlvblJhdGlvXSA9IHVzZVN0YXRlKFxuICAgIHByb3BzLmluaXRpYWxWYWx1ZSA/PyAwLFxuICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbU5vZGUgPSBpdGVtUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGl0ZW1Ob2RlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIGVudHJpZXMgPT4ge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgICAgIHNldEludGVyc2VjdGlvblJhdGlvKGVudHJ5LmludGVyc2VjdGlvblJhdGlvKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAge3RocmVzaG9sZDogcHJvcHMudGhyZXNob2xkc30sXG4gICAgKTtcblxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShpdGVtTm9kZSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFtwcm9wcy50aHJlc2hvbGRzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLml0ZW19IHJlZj17aXRlbVJlZn0+XG4gICAgICA8SW50ZXJzZWN0aW9uUmF0aW9JbmRpY2F0b3JcbiAgICAgICAgdmFsdWU9e2ludGVyc2VjdGlvblJhdGlvfVxuICAgICAgICBzdHlsZT17e2xlZnQ6IDAsIHRvcDogMH19XG4gICAgICAvPlxuICAgICAgPEludGVyc2VjdGlvblJhdGlvSW5kaWNhdG9yXG4gICAgICAgIHZhbHVlPXtpbnRlcnNlY3Rpb25SYXRpb31cbiAgICAgICAgc3R5bGU9e3tyaWdodDogMCwgdG9wOiAwfX1cbiAgICAgIC8+XG4gICAgICA8SW50ZXJzZWN0aW9uUmF0aW9JbmRpY2F0b3JcbiAgICAgICAgdmFsdWU9e2ludGVyc2VjdGlvblJhdGlvfVxuICAgICAgICBzdHlsZT17e2xlZnQ6IDAsIGJvdHRvbTogMH19XG4gICAgICAvPlxuICAgICAgPEludGVyc2VjdGlvblJhdGlvSW5kaWNhdG9yXG4gICAgICAgIHZhbHVlPXtpbnRlcnNlY3Rpb25SYXRpb31cbiAgICAgICAgc3R5bGU9e3tyaWdodDogMCwgYm90dG9tOiAwfX1cbiAgICAgIC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBJbnRlcnNlY3Rpb25SYXRpb0luZGljYXRvcihwcm9wczoge1xuICB2YWx1ZTogbnVtYmVyLFxuICBzdHlsZToge3RvcD86IG51bWJlciwgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlcn0sXG59KTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuaW50ZXJzZWN0aW9uUmF0aW9JbmRpY2F0b3IsIHByb3BzLnN0eWxlXX0+XG4gICAgICA8VGV4dD57YCR7TWF0aC5mbG9vcihwcm9wcy52YWx1ZSAqIDEwMCl9JWB9PC9UZXh0PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRUaHJlc2hvbGRMaXN0KG51bVN0ZXBzOiBudW1iZXIpOiBBcnJheTxudW1iZXI+IHtcbiAgY29uc3QgdGhyZXNob2xkcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAxLjA7IGkgPD0gbnVtU3RlcHM7IGkrKykge1xuICAgIGNvbnN0IHJhdGlvID0gaSAvIG51bVN0ZXBzO1xuICAgIHRocmVzaG9sZHMucHVzaChyYXRpbyk7XG4gIH1cblxuICB0aHJlc2hvbGRzLnB1c2goMCk7XG4gIHJldHVybiB0aHJlc2hvbGRzO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHNjcm9sbERvd25UZXh0OiB7XG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250U2l6ZTogMjAsXG4gICAgbWFyZ2luQm90dG9tOiA3MDAsXG4gIH0sXG4gIGl0ZW06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoMjQ1LCAxNzAsIDE0MCknLFxuICAgIGJvcmRlckNvbG9yOiAncmdiKDIwMSwgMTI2LCAxNyknLFxuICAgIGJvcmRlcldpZHRoOiAyLFxuICAgIGhlaWdodDogNTAwLFxuICAgIG1hcmdpbjogNixcbiAgfSxcbiAgaW50ZXJzZWN0aW9uUmF0aW9JbmRpY2F0b3I6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBwYWRkaW5nOiA1LFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICBvcGFjaXR5OiAwLjcsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7VGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuZXhwb3J0IGNvbnN0IHRpdGxlID0gJ0ludmFsaWQgUHJvcHMnO1xuZXhwb3J0IGNvbnN0IGNhdGVnb3J5ID0gJ090aGVyJztcbmV4cG9ydCBjb25zdCBkZXNjcmlwdGlvbiA9XG4gICdFeGFtcGxlcyBvZiBwYXNzaW5nIGludmFsaWQgcHJvcCB2YWx1ZXMgYW5kIGhvdyB0aGV5IGZhbGwgYmFjayB0byBleHBlY3RlZCBkZWZhdWx0cy4nO1xuXG5leHBvcnQgY29uc3QgZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ1ZpZXcgZmxleCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbXBhcmlzb24gYWN0dWFsPXtbMV19IGV4cGVjdGVkPXt1bmRlZmluZWR9PlxuICAgICAgICAgIHtmbGV4ID0+IChcbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7aGVpZ2h0OiA1MH19PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZsZXgsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17e2ZsZXg6IDEsIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0Z3JlZW4nfX0gLz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NvbXBhcmlzb24+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ZpZXcgZmxleERpcmVjdGlvbicsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbXBhcmlzb24gYWN0dWFsPXsncm93Lid9IGV4cGVjdGVkPXt1bmRlZmluZWR9PlxuICAgICAgICAgIHtmbGV4RGlyZWN0aW9uID0+IChcbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgICAgIHN0eWxlPXt7ZmxleERpcmVjdGlvbn19PlxuICAgICAgICAgICAgICA8VGV4dD7irIfvuI88L1RleHQ+XG4gICAgICAgICAgICAgIDxUZXh0PuKsh++4jzwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NvbXBhcmlzb24+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RleHQgZm9udFZhcmlhbnQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb21wYXJpc29uXG4gICAgICAgICAgYWN0dWFsPXtbJ25vLXN1Y2gtdmFyaWFudCcsICdzbWFsbC1jYXBzLTEyMzQ1J119XG4gICAgICAgICAgZXhwZWN0ZWQ9e3VuZGVmaW5lZH0+XG4gICAgICAgICAge2ZvbnRWYXJpYW50ID0+IChcbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICAgICAgICAgIHtmb250VmFyaWFudH1cbiAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NvbXBhcmlzb24+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ZpZXcgd2lkdGgnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb21wYXJpc29uIGFjdHVhbD17WydpbnZhbGlkJ119IGV4cGVjdGVkPXt1bmRlZmluZWR9PlxuICAgICAgICAgIHt3aWR0aCA9PiAoXG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJ3JlZCd9fT5cbiAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgICAgICAgICAgICAge3dpZHRoLCBoZWlnaHQ6IDUwLCBiYWNrZ3JvdW5kQ29sb3I6ICdsaWdodGdyZWVuJ31cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Db21wYXJpc29uPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdWaWV3IGJhY2tncm91bmQgY29sb3InLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb21wYXJpc29uIGFjdHVhbD17WydpbnZhbGlkJ119IGV4cGVjdGVkPXt1bmRlZmluZWR9PlxuICAgICAgICAgIHtiYWNrZ3JvdW5kQ29sb3IgPT4gKFxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3tiYWNrZ3JvdW5kQ29sb3I6ICdsaWdodGdyZWVuJ319PlxuICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgICAgICAgICB7YmFja2dyb3VuZENvbG9yLCBoZWlnaHQ6IDUwfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NvbXBhcmlzb24+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ01hbGZvcm1lZCBwbGF0Zm9ybSBjb2xvcicsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbXBhcmlzb25cbiAgICAgICAgICBhY3R1YWw9e3tyZXNvdXJjZV9wYXRoczogKFtdOiBBcnJheTxzdHJpbmc+KX19XG4gICAgICAgICAgZXhwZWN0ZWQ9e3VuZGVmaW5lZH0+XG4gICAgICAgICAge2JhY2tncm91bmRDb2xvciA9PiAoXG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e2JhY2tncm91bmRDb2xvcjogJ2xpZ2h0Z3JlZW4nfX0+XG4gICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbiAgICAgICAgICAgICAgICAgIHtiYWNrZ3JvdW5kQ29sb3IsIGhlaWdodDogNTB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQ29tcGFyaXNvbj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbl07XG5cbmZ1bmN0aW9uIENvbXBhcmlzb248RXhwZWN0ZWRULCBBY3R1YWxUPih7XG4gIGNoaWxkcmVuLFxuICBhY3R1YWwsXG4gIGV4cGVjdGVkLFxufToge1xuICBjaGlsZHJlbjogKHZhbHVlOiBFeHBlY3RlZFQgfCBBY3R1YWxUKSA9PiBSZWFjdC5Ob2RlLFxuICBhY3R1YWw6IEFjdHVhbFQsXG4gIGV4cGVjdGVkOiBFeHBlY3RlZFQsXG59KTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogJ2JvbGQnfX0+QWN0dWFsPC9UZXh0PlxuICAgICAge2NoaWxkcmVuKGFjdHVhbCl9XG4gICAgICA8VGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6ICdib2xkJ319PkV4cGVjdGVkPC9UZXh0PlxuICAgICAge2NoaWxkcmVuKGV4cGVjdGVkKX1cbiAgICA8Lz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgUk5UZXN0ZXJNb2R1bGUsXG4gIFJOVGVzdGVyTW9kdWxlRXhhbXBsZSxcbn0gZnJvbSAnLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5pbXBvcnQgdHlwZSB7S2V5Ym9hcmRFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL0tleWJvYXJkL0tleWJvYXJkJztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0tleWJvYXJkLCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG50eXBlIEtleWJvYXJkRXZlbnRWaWV3ZXJQcm9wcyA9IHtcbiAgc2hvd0V2ZW50OiAna2V5Ym9hcmRXaWxsU2hvdycgfCAna2V5Ym9hcmREaWRTaG93JyxcbiAgaGlkZUV2ZW50OiAna2V5Ym9hcmRXaWxsSGlkZScgfCAna2V5Ym9hcmREaWRIaWRlJyxcbn07XG5cbmNvbnN0IEtleWJvYXJkRXZlbnRWaWV3ZXIgPSAocHJvcHM6IEtleWJvYXJkRXZlbnRWaWV3ZXJQcm9wcyk6IFJlYWN0Lk5vZGUgPT4ge1xuICBjb25zdCB7c2hvd0V2ZW50LCBoaWRlRXZlbnR9ID0gcHJvcHM7XG4gIGNvbnN0IFtpc1Nob3duLCBzZXRJc1Nob3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2xhc3RFdmVudCwgc2V0TGFzdEV2ZW50XSA9IHVzZVN0YXRlPD9LZXlib2FyZEV2ZW50PigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gS2V5Ym9hcmQuYWRkTGlzdGVuZXIoc2hvd0V2ZW50LCBldiA9PiB7XG4gICAgICBzZXRJc1Nob3duKHRydWUpO1xuICAgICAgc2V0TGFzdEV2ZW50KGV2KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnJlbW92ZSgpO1xuICB9LCBbc2hvd0V2ZW50XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBLZXlib2FyZC5hZGRMaXN0ZW5lcihoaWRlRXZlbnQsIGV2ID0+IHtcbiAgICAgIHNldElzU2hvd24oZmFsc2UpO1xuICAgICAgc2V0TGFzdEV2ZW50KGV2KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnJlbW92ZSgpO1xuICB9LCBbaGlkZUV2ZW50XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0PlxuICAgICAgICA8VGV4dD5LZXlib2FyZCBpcyA8L1RleHQ+XG4gICAgICAgIHtpc1Nob3duID8gKFxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMub3BlblRleHR9Pm9wZW48L1RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5jbG9zZVRleHR9PmNsb3NlZDwvVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvVGV4dD5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZXZlbnRCb3h9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7bGFzdEV2ZW50XG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGxhc3RFdmVudCwgbnVsbCwgMilcbiAgICAgICAgICAgIDogJ05vIGV2ZW50cyBvYnNlcnZlZCd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBrZXlib2FyZFdpbGxTaG93SGlkZUV4YW1wbGU6IFJOVGVzdGVyTW9kdWxlRXhhbXBsZSA9IHtcbiAgdGl0bGU6ICdrZXlib2FyZFdpbGxTaG93IC8ga2V5Ym9hcmRXaWxsSGlkZScsXG4gIHBsYXRmb3JtOiAnaW9zJyxcbiAgcmVuZGVyOiAoKSA9PiAoXG4gICAgPEtleWJvYXJkRXZlbnRWaWV3ZXJcbiAgICAgIHNob3dFdmVudD1cImtleWJvYXJkV2lsbFNob3dcIlxuICAgICAgaGlkZUV2ZW50PVwia2V5Ym9hcmRXaWxsSGlkZVwiXG4gICAgLz5cbiAgKSxcbn07XG5cbmNvbnN0IGtleWJvYXJkRGlkU2hvd0hpZGVFeGFtcGxlOiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUgPSB7XG4gIHRpdGxlOiAna2V5Ym9hcmREaWRTaG93IC8ga2V5Ym9hcmREaWRIaWRlJyxcbiAgcmVuZGVyOiAoKSA9PiAoXG4gICAgPEtleWJvYXJkRXZlbnRWaWV3ZXJcbiAgICAgIHNob3dFdmVudD1cImtleWJvYXJkRGlkU2hvd1wiXG4gICAgICBoaWRlRXZlbnQ9XCJrZXlib2FyZERpZEhpZGVcIlxuICAgIC8+XG4gICksXG59O1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNsb3NlVGV4dDoge1xuICAgIGNvbG9yOiAncmVkJyxcbiAgfSxcbiAgb3BlblRleHQ6IHtcbiAgICBjb2xvcjogJ2dyZWVuJyxcbiAgfSxcbiAgZXZlbnRCb3g6IHtcbiAgICBtYXJnaW5Ub3A6IDEwLFxuICAgIHBhZGRpbmc6IDUsXG4gICAgYm9yZGVyV2lkdGg6IFN0eWxlU2hlZXQuaGFpcmxpbmVXaWR0aCxcbiAgfSxcbn0pO1xuXG5jb25zdCBLZXlib2FyZEV4YW1wbGU6IFJOVGVzdGVyTW9kdWxlID0ge1xuICB0aXRsZTogJ0tleWJvYXJkJyxcbiAgZGVzY3JpcHRpb246ICdEZW1vbnN0cmF0ZXMgdXNhZ2Ugb2YgdGhlIFwiS2V5Ym9hcmRcIiBzdGF0aWMgQVBJJyxcbiAgZG9jdW1lbnRhdGlvblVSTDogJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3Mva2V5Ym9hcmQnLFxuICBjYXRlZ29yeTogJ0Jhc2ljJyxcbiAgZXhhbXBsZXM6IFtrZXlib2FyZFdpbGxTaG93SGlkZUV4YW1wbGUsIGtleWJvYXJkRGlkU2hvd0hpZGVFeGFtcGxlXSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEtleWJvYXJkRXhhbXBsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBMYXlvdXRBbmltYXRpb24sXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRvdWNoYWJsZU9wYWNpdHksXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbnR5cGUgRXhhbXBsZVZpZXdTcGVjID0ge3xcbiAga2V5OiBudW1iZXIsXG58fTtcblxudHlwZSBBZGRSZW1vdmVFeGFtcGxlU3RhdGUgPSB7fFxuICB2aWV3czogQXJyYXk8RXhhbXBsZVZpZXdTcGVjPixcbiAgbmV4dEtleTogbnVtYmVyLFxufH07XG5cbmZ1bmN0aW9uIHNodWZmbGVBcnJheShhcnJheTogQXJyYXk8RXhhbXBsZVZpZXdTcGVjPikge1xuICB2YXIgY3VycmVudEluZGV4OiBudW1iZXIgPSBhcnJheS5sZW5ndGgsXG4gICAgdGVtcG9yYXJ5VmFsdWU6IEV4YW1wbGVWaWV3U3BlYyxcbiAgICByYW5kb21JbmRleDogbnVtYmVyO1xuXG4gIC8vIFdoaWxlIHRoZXJlIHJlbWFpbiBlbGVtZW50cyB0byBzaHVmZmxlLi4uXG4gIHdoaWxlIChjdXJyZW50SW5kZXggIT09IDApIHtcbiAgICAvLyBQaWNrIGEgcmVtYWluaW5nIGVsZW1lbnQuLi5cbiAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGN1cnJlbnRJbmRleCk7XG4gICAgY3VycmVudEluZGV4IC09IDE7XG5cbiAgICAvLyBBbmQgc3dhcCBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gICAgdGVtcG9yYXJ5VmFsdWUgPSBhcnJheVtjdXJyZW50SW5kZXhdO1xuICAgIGFycmF5W2N1cnJlbnRJbmRleF0gPSBhcnJheVtyYW5kb21JbmRleF07XG4gICAgYXJyYXlbcmFuZG9tSW5kZXhdID0gdGVtcG9yYXJ5VmFsdWU7XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmNsYXNzIEFkZFJlbW92ZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0sIEFkZFJlbW92ZUV4YW1wbGVTdGF0ZT4ge1xuICBzdGF0ZTogQWRkUmVtb3ZlRXhhbXBsZVN0YXRlID0ge1xuICAgIHZpZXdzOiBbXSxcbiAgICBuZXh0S2V5OiAxLFxuICB9O1xuXG4gIGNvbmZpZ3VyZU5leHRBbmltYXRpb24oKSB7XG4gICAgTGF5b3V0QW5pbWF0aW9uLmNvbmZpZ3VyZU5leHQoXG4gICAgICB7XG4gICAgICAgIGR1cmF0aW9uOiAxMDAwLFxuICAgICAgICBjcmVhdGU6IHt0eXBlOiAnZWFzZUluRWFzZU91dCcsIHByb3BlcnR5OiAnb3BhY2l0eSd9LFxuICAgICAgICB1cGRhdGU6IHt0eXBlOiAnZWFzZUluRWFzZU91dCcsIHByb3BlcnR5OiAnb3BhY2l0eSd9LFxuICAgICAgICBkZWxldGU6IHt0eXBlOiAnZWFzZUluRWFzZU91dCcsIHByb3BlcnR5OiAnb3BhY2l0eSd9LFxuICAgICAgfSxcbiAgICAgIGFyZ3MgPT4gY29uc29sZS5sb2coJ0FkZFJlbW92ZUV4YW1wbGUgY29tcGxldGVkJywgYXJncyksXG4gICAgKTtcbiAgfVxuXG4gIF9vblByZXNzQWRkVmlld0FuaW1hdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuY29uZmlndXJlTmV4dEFuaW1hdGlvbigpO1xuICAgIHRoaXMuX29uUHJlc3NBZGRWaWV3KCk7XG4gIH07XG5cbiAgX29uUHJlc3NSZW1vdmVWaWV3QW5pbWF0ZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5jb25maWd1cmVOZXh0QW5pbWF0aW9uKCk7XG4gICAgdGhpcy5fb25QcmVzc1JlbW92ZVZpZXcoKTtcbiAgfTtcblxuICBfb25QcmVzc1Jlb3JkZXJWaWV3c0FuaW1hdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuY29uZmlndXJlTmV4dEFuaW1hdGlvbigpO1xuICAgIHRoaXMuX29uUHJlc3NSZW9yZGVyVmlld3MoKTtcbiAgfTtcblxuICBfb25QcmVzc0FkZFZpZXcgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiAoe1xuICAgICAgdmlld3M6IFsuLi5zdGF0ZS52aWV3cywge2tleTogc3RhdGUubmV4dEtleX1dLFxuICAgICAgbmV4dEtleTogc3RhdGUubmV4dEtleSArIDEsXG4gICAgfSkpO1xuICB9O1xuXG4gIF9vblByZXNzUmVtb3ZlVmlldyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7dmlld3M6IHN0YXRlLnZpZXdzLnNsaWNlKDAsIC0xKX0pKTtcbiAgfTtcblxuICBfb25QcmVzc1Jlb3JkZXJWaWV3cyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7dmlld3M6IHNodWZmbGVBcnJheShzdGF0ZS52aWV3cyl9KSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHZpZXdzID0gdGhpcy5zdGF0ZS52aWV3cy5tYXAoKHtrZXl9KSA9PiAoXG4gICAgICA8Vmlld1xuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy52aWV3fVxuICAgICAgICBvbkxheW91dD17ZXZ0ID0+IGNvbnNvbGUubG9nKCdCb3ggb25MYXlvdXQnKX0+XG4gICAgICAgIDxUZXh0PntrZXl9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICkpO1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9e3RoaXMuX29uUHJlc3NBZGRWaWV3QW5pbWF0ZWR9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PkFkZCB2aWV3PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eSBvblByZXNzPXt0aGlzLl9vblByZXNzUmVtb3ZlVmlld0FuaW1hdGVkfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5SZW1vdmUgdmlldzwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHkgb25QcmVzcz17dGhpcy5fb25QcmVzc1Jlb3JkZXJWaWV3c0FuaW1hdGVkfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5SZW9yZGVyIFZpZXdzPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eSBvblByZXNzPXt0aGlzLl9vblByZXNzQWRkVmlld30+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+QWRkIHZpZXcgKG5vIGFuaW1hdGlvbik8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9e3RoaXMuX29uUHJlc3NSZW1vdmVWaWV3fT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5SZW1vdmUgdmlldyAobm8gYW5pbWF0aW9uKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHkgb25QcmVzcz17dGhpcy5fb25QcmVzc1Jlb3JkZXJWaWV3c30+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+UmVvcmRlciBWaWV3cyAobm8gYW5pbWF0aW9uKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy52aWV3Q29udGFpbmVyfT57dmlld3N9PC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxudHlwZSBSZXBhcmVudGluZ0V4YW1wbGVTdGF0ZSA9IHt8XG4gIGhhc0JvcmRlcjogYm9vbGVhbixcbnx9O1xuXG5jbGFzcyBSZXBhcmVudGluZ0V4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHsuLi59LFxuICBSZXBhcmVudGluZ0V4YW1wbGVTdGF0ZSxcbj4ge1xuICBzdGF0ZTogUmVwYXJlbnRpbmdFeGFtcGxlU3RhdGUgPSB7XG4gICAgaGFzQm9yZGVyOiBmYWxzZSxcbiAgfTtcblxuICBfb25QcmVzc1RvZ2dsZUFuaW1hdGVkID0gKCkgPT4ge1xuICAgIExheW91dEFuaW1hdGlvbi5jb25maWd1cmVOZXh0KFxuICAgICAge1xuICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICBjcmVhdGU6IHt0eXBlOiAnZWFzZUluRWFzZU91dCcsIHByb3BlcnR5OiAnb3BhY2l0eScsIGR1cmF0aW9uOiAxMDAwfSxcbiAgICAgICAgdXBkYXRlOiB7dHlwZTogJ2Vhc2VJbkVhc2VPdXQnLCBwcm9wZXJ0eTogJ29wYWNpdHknfSxcbiAgICAgICAgZGVsZXRlOiB7dHlwZTogJ2Vhc2VJbkVhc2VPdXQnLCBwcm9wZXJ0eTogJ29wYWNpdHknLCBkdXJhdGlvbjogMTAwMH0sXG4gICAgICB9LFxuICAgICAgYXJncyA9PiBjb25zb2xlLmxvZygnUmVwYXJlbnRpbmdFeGFtcGxlIGNvbXBsZXRlZCcsIGFyZ3MpLFxuICAgICk7XG4gICAgdGhpcy5fb25QcmVzc1RvZ2dsZSgpO1xuICB9O1xuXG4gIF9vblByZXNzVG9nZ2xlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtoYXNCb3JkZXI6ICFzdGF0ZS5oYXNCb3JkZXJ9KSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHBhcmVudFN0eWxlID0gdGhpcy5zdGF0ZS5oYXNCb3JkZXJcbiAgICAgID8ge2JvcmRlcldpZHRoOiA1LCBib3JkZXJDb2xvcjogJ3JlZCd9XG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHkgb25QcmVzcz17dGhpcy5fb25QcmVzc1RvZ2dsZUFuaW1hdGVkfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5Ub2dnbGU8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9e3RoaXMuX29uUHJlc3NUb2dnbGV9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PlRvZ2dsZSAobm8gYW5pbWF0aW9uKTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3BhcmVudFN0eWxlfT5cbiAgICAgICAgICA8R3JlZW5TcXVhcmUgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgR3JlZW5TcXVhcmUgPSAoKSA9PiAoXG4gIDxWaWV3IHN0eWxlPXtzdHlsZXMuZ3JlZW5TcXVhcmV9PlxuICAgIDxUZXh0PkdyZWVuIHNxdWFyZTwvVGV4dD5cbiAgPC9WaWV3PlxuKTtcblxuY29uc3QgQmx1ZVNxdWFyZSA9ICgpID0+IChcbiAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ibHVlU3F1YXJlfT5cbiAgICA8VGV4dD5CbHVlIHNxdWFyZTwvVGV4dD5cbiAgPC9WaWV3PlxuKTtcblxudHlwZSBDcm9zc0ZhZGVFeGFtcGxlU3RhdGUgPSB7fFxuICB0b2dnbGVkOiBib29sZWFuLFxufH07XG5cbmNsYXNzIENyb3NzRmFkZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0sIENyb3NzRmFkZUV4YW1wbGVTdGF0ZT4ge1xuICBzdGF0ZTogQ3Jvc3NGYWRlRXhhbXBsZVN0YXRlID0ge1xuICAgIHRvZ2dsZWQ6IGZhbHNlLFxuICB9O1xuXG4gIF9vblByZXNzVG9nZ2xlID0gKCkgPT4ge1xuICAgIExheW91dEFuaW1hdGlvbi5lYXNlSW5FYXNlT3V0KGFyZ3MgPT5cbiAgICAgIGNvbnNvbGUubG9nKCdDcm9zc0ZhZGVFeGFtcGxlIGNvbXBsZXRlZCcsIGFyZ3MpLFxuICAgICk7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiAoe3RvZ2dsZWQ6ICFzdGF0ZS50b2dnbGVkfSkpO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eSBvblByZXNzPXt0aGlzLl9vblByZXNzVG9nZ2xlfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5Ub2dnbGU8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudmlld0NvbnRhaW5lcn0+XG4gICAgICAgICAge3RoaXMuc3RhdGUudG9nZ2xlZCA/IDxHcmVlblNxdWFyZSAvPiA6IDxCbHVlU3F1YXJlIC8+fVxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG50eXBlIExheW91dFVwZGF0ZUV4YW1wbGVTdGF0ZSA9IHt8XG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxufH07XG5cbmNsYXNzIExheW91dFVwZGF0ZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIHsuLi59LFxuICBMYXlvdXRVcGRhdGVFeGFtcGxlU3RhdGUsXG4+IHtcbiAgc3RhdGU6IExheW91dFVwZGF0ZUV4YW1wbGVTdGF0ZSA9IHtcbiAgICB3aWR0aDogMjAwLFxuICAgIGhlaWdodDogMTAwLFxuICB9O1xuXG4gIHRpbWVvdXQ6IFRpbWVvdXRJRCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICB9XG5cbiAgX2NsZWFyVGltZW91dCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy50aW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9vblByZXNzVG9nZ2xlID0gKCkgPT4ge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe3dpZHRoOiAxNTB9KTtcblxuICAgIExheW91dEFuaW1hdGlvbi5jb25maWd1cmVOZXh0KFxuICAgICAge1xuICAgICAgICBkdXJhdGlvbjogMTAwMCxcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgdHlwZTogTGF5b3V0QW5pbWF0aW9uLlR5cGVzLmxpbmVhcixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhcmdzID0+IGNvbnNvbGUubG9nKCdMYXlvdXRVcGRhdGVFeGFtcGxlIGNvbXBsZXRlZCcsIGFyZ3MpLFxuICAgICk7XG5cbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0U3RhdGUoe3dpZHRoOiAxMDB9KSwgNTAwKTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9e3RoaXMuX29uUHJlc3NUb2dnbGV9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0Pk1ha2UgYm94IHNxdWFyZTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMudmlldywge3dpZHRoLCBoZWlnaHR9XX0+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7d2lkdGh9eHtoZWlnaHR9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGJvcmRlclJhZGl1czogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlZWVlJyxcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBtYXJnaW5Cb3R0b206IDEwLFxuICB9LFxuICB2aWV3Q29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICB9LFxuICB2aWV3OiB7XG4gICAgaGVpZ2h0OiA1NCxcbiAgICB3aWR0aDogNTQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICBtYXJnaW46IDgsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICBncmVlblNxdWFyZToge1xuICAgIHdpZHRoOiAxNTAsXG4gICAgaGVpZ2h0OiAxNTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcbiAgYmx1ZVNxdWFyZToge1xuICAgIHdpZHRoOiAxNTAsXG4gICAgaGVpZ2h0OiAxNTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmx1ZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnTGF5b3V0IEFuaW1hdGlvbic7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2xheW91dGFuaW1hdGlvbic7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0xheW91dCBhbmltYXRpb24nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnQWRkIGFuZCByZW1vdmUgdmlld3MnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxBZGRSZW1vdmVFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0FuaW1hdGUgUmVwYXJlbnRpbmcgVXBkYXRlJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8UmVwYXJlbnRpbmdFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0Nyb3NzIGZhZGUgdmlld3MnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxDcm9zc0ZhZGVFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xheW91dCB1cGRhdGUgZHVyaW5nIGFuaW1hdGlvbicsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPExheW91dFVwZGF0ZUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSTlRlc3RlckJsb2NrID0gcmVxdWlyZSgnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlckJsb2NrJyk7XG5jb25zdCBSTlRlc3RlclBhZ2UgPSByZXF1aXJlKCcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyUGFnZScpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIENpcmNsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDwkRmxvd0ZpeE1lUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgMjA7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhpcy5wcm9wcy5iZ0NvbG9yIHx8ICcjNTI3ZmU0JztcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IHNpemUgLyAyLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgICAgIGhlaWdodDogc2l6ZSxcbiAgICAgICAgICBtYXJnaW46IDEsXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQ2lyY2xlQmxvY2sgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8JEZsb3dGaXhNZVByb3BzPiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBjaXJjbGVTdHlsZSA9IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2Y2ZjdmOCcsXG4gICAgICBib3JkZXJXaWR0aDogMC41LFxuICAgICAgYm9yZGVyQ29sb3I6ICcjZDZkN2RhJyxcbiAgICAgIG1hcmdpbkJvdHRvbTogMixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17W2NpcmNsZVN0eWxlLCB0aGlzLnByb3BzLnN0eWxlXX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgTGF5b3V0RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDwkRmxvd0ZpeE1lUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGZpdmVDb2xvcmVkQ2lyY2xlcyA9IFtcbiAgICAgIDxDaXJjbGUgYmdDb2xvcj1cIiM1MjdmZTRcIiBrZXk9XCJibHVlXCIgLz4sXG4gICAgICA8Q2lyY2xlIGJnQ29sb3I9XCIjRDQ0M0UzXCIga2V5PVwidmlvbGV0XCIgLz4sXG4gICAgICA8Q2lyY2xlIGJnQ29sb3I9XCIjRkY5MDQ5XCIga2V5PVwib3JhbmdlXCIgLz4sXG4gICAgICA8Q2lyY2xlIGJnQ29sb3I9XCIjRkZFNjQ5XCIga2V5PVwieWVsbG93XCIgLz4sXG4gICAgICA8Q2lyY2xlIGJnQ29sb3I9XCIjN0ZFMDQwXCIga2V5PVwiZ3JlZW5cIiAvPixcbiAgICBdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSTlRlc3RlclBhZ2UgdGl0bGU9e3RoaXMucHJvcHMubmF2aWdhdG9yID8gbnVsbCA6ICdMYXlvdXQnfT5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJGbGV4IERpcmVjdGlvblwiPlxuICAgICAgICAgIDxUZXh0PnJvdzwvVGV4dD5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAncm93J319PlxuICAgICAgICAgICAge2ZpdmVDb2xvcmVkQ2lyY2xlc31cbiAgICAgICAgICA8L0NpcmNsZUJsb2NrPlxuICAgICAgICAgIDxUZXh0PnJvdy1yZXZlcnNlPC9UZXh0PlxuICAgICAgICAgIDxDaXJjbGVCbG9jayBzdHlsZT17e2ZsZXhEaXJlY3Rpb246ICdyb3ctcmV2ZXJzZSd9fT5cbiAgICAgICAgICAgIHtmaXZlQ29sb3JlZENpcmNsZXN9XG4gICAgICAgICAgPC9DaXJjbGVCbG9jaz5cbiAgICAgICAgICA8VGV4dD5jb2x1bW48L1RleHQ+XG4gICAgICAgICAgPENpcmNsZUJsb2NrIHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ2NvbHVtbid9fT5cbiAgICAgICAgICAgIHtmaXZlQ29sb3JlZENpcmNsZXN9XG4gICAgICAgICAgPC9DaXJjbGVCbG9jaz5cbiAgICAgICAgICA8VGV4dD5jb2x1bW4tcmV2ZXJzZTwvVGV4dD5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiAnY29sdW1uLXJldmVyc2UnfX0+XG4gICAgICAgICAgICB7Zml2ZUNvbG9yZWRDaXJjbGVzfVxuICAgICAgICAgIDwvQ2lyY2xlQmxvY2s+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgICB7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMTUsIGxlZnQ6IDE2MH0sXG4gICAgICAgICAgICBdfT5cbiAgICAgICAgICAgIDxUZXh0PnsndG9wOiAxNSwgbGVmdDogMTYwJ308L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJKdXN0aWZ5IENvbnRlbnQgLSBNYWluIERpcmVjdGlvblwiPlxuICAgICAgICAgIDxUZXh0PmZsZXgtc3RhcnQ8L1RleHQ+XG4gICAgICAgICAgPENpcmNsZUJsb2NrIHN0eWxlPXt7anVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0J319PlxuICAgICAgICAgICAge2ZpdmVDb2xvcmVkQ2lyY2xlc31cbiAgICAgICAgICA8L0NpcmNsZUJsb2NrPlxuICAgICAgICAgIDxUZXh0PmNlbnRlcjwvVGV4dD5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3tqdXN0aWZ5Q29udGVudDogJ2NlbnRlcid9fT5cbiAgICAgICAgICAgIHtmaXZlQ29sb3JlZENpcmNsZXN9XG4gICAgICAgICAgPC9DaXJjbGVCbG9jaz5cbiAgICAgICAgICA8VGV4dD5mbGV4LWVuZDwvVGV4dD5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3tqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJ319PlxuICAgICAgICAgICAge2ZpdmVDb2xvcmVkQ2lyY2xlc31cbiAgICAgICAgICA8L0NpcmNsZUJsb2NrPlxuICAgICAgICAgIDxUZXh0PnNwYWNlLWJldHdlZW48L1RleHQ+XG4gICAgICAgICAgPENpcmNsZUJsb2NrIHN0eWxlPXt7anVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJ319PlxuICAgICAgICAgICAge2ZpdmVDb2xvcmVkQ2lyY2xlc31cbiAgICAgICAgICA8L0NpcmNsZUJsb2NrPlxuICAgICAgICAgIDxUZXh0PnNwYWNlLWFyb3VuZDwvVGV4dD5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3tqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCd9fT5cbiAgICAgICAgICAgIHtmaXZlQ29sb3JlZENpcmNsZXN9XG4gICAgICAgICAgPC9DaXJjbGVCbG9jaz5cbiAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICA8Uk5UZXN0ZXJCbG9jayB0aXRsZT1cIkFsaWduIEl0ZW1zIC0gT3RoZXIgRGlyZWN0aW9uXCI+XG4gICAgICAgICAgPFRleHQ+ZmxleC1zdGFydDwvVGV4dD5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3thbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsIGhlaWdodDogMzB9fT5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTV9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezEwfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTd9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezEyfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxNX0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTB9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxN30gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezE1fSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxMH0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezE3fSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxMn0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTV9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezh9IC8+XG4gICAgICAgICAgPC9DaXJjbGVCbG9jaz5cbiAgICAgICAgICA8VGV4dD5jZW50ZXI8L1RleHQ+XG4gICAgICAgICAgPENpcmNsZUJsb2NrIHN0eWxlPXt7YWxpZ25JdGVtczogJ2NlbnRlcicsIGhlaWdodDogMzB9fT5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTV9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezEwfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTd9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezEyfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxNX0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTB9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxN30gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezE1fSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxMH0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezE3fSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxMn0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTV9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezh9IC8+XG4gICAgICAgICAgPC9DaXJjbGVCbG9jaz5cbiAgICAgICAgICA8VGV4dD5mbGV4LWVuZDwvVGV4dD5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3thbGlnbkl0ZW1zOiAnZmxleC1lbmQnLCBoZWlnaHQ6IDMwfX0+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezE1fSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxMH0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezE3fSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxMn0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTV9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezEwfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTd9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezEyfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxNX0gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTB9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXsxN30gLz5cbiAgICAgICAgICAgIDxDaXJjbGUgc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgICA8Q2lyY2xlIHNpemU9ezE1fSAvPlxuICAgICAgICAgICAgPENpcmNsZSBzaXplPXs4fSAvPlxuICAgICAgICAgIDwvQ2lyY2xlQmxvY2s+XG4gICAgICAgIDwvUk5UZXN0ZXJCbG9jaz5cbiAgICAgICAgPFJOVGVzdGVyQmxvY2sgdGl0bGU9XCJGbGV4IFdyYXBcIj5cbiAgICAgICAgICA8Q2lyY2xlQmxvY2sgc3R5bGU9e3tmbGV4V3JhcDogJ3dyYXAnfX0+XG4gICAgICAgICAgICB7J29vb29vb29vb29vb29vb28nLnNwbGl0KCcnKS5tYXAoKGNoYXIsIGkpID0+IChcbiAgICAgICAgICAgICAgPENpcmNsZSBrZXk9e2l9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NpcmNsZUJsb2NrPlxuICAgICAgICA8L1JOVGVzdGVyQmxvY2s+XG4gICAgICA8L1JOVGVzdGVyUGFnZT5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgb3ZlcmxheToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNhYWNjZmYnLFxuICAgIGJvcmRlclJhZGl1czogMTAsXG4gICAgYm9yZGVyV2lkdGg6IDAuNSxcbiAgICBvcGFjaXR5OiAwLjUsXG4gICAgcGFkZGluZzogNSxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ0xheW91dCAtIEZsZXhib3gnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdVSSc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0V4YW1wbGVzIG9mIHVzaW5nIHRoZSBmbGV4Ym94IEFQSSB0byBsYXlvdXQgdmlld3MuJztcbmV4cG9ydHMuZGlzcGxheU5hbWUgPSAnTGF5b3V0RXhhbXBsZSc7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdTaW1wbGUgbGF5b3V0IHVzaW5nIGZsZXhib3gnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIExheW91dEV4YW1wbGU+IHtcbiAgICAgIHJldHVybiA8TGF5b3V0RXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSTlRlc3RlckJsb2NrID0gcmVxdWlyZSgnLi4vLi4vY29tcG9uZW50cy9STlRlc3RlckJsb2NrJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgTGlua2luZyxcbiAgUGxhdGZvcm0sXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRvYXN0QW5kcm9pZCxcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICB1cmw/OiA/c3RyaW5nLFxufH0+O1xuXG5jbGFzcyBPcGVuVVJMQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIGhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgIExpbmtpbmcuY2FuT3BlblVSTCh0aGlzLnByb3BzLnVybCkudGhlbihzdXBwb3J0ZWQgPT4ge1xuICAgICAgaWYgKHN1cHBvcnRlZCkge1xuICAgICAgICBMaW5raW5nLm9wZW5VUkwodGhpcy5wcm9wcy51cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYERvbid0IGtub3cgaG93IHRvIG9wZW4gVVJJOiAke1xuICAgICAgICAgICAgdGhpcy5wcm9wcy51cmxcbiAgICAgICAgICB9LCBlbnN1cmUgeW91IGhhdmUgYW4gYXBwIGluc3RhbGxlZCB0aGF0IGhhbmRsZXMgdGhlIFwiJHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudXJsLnNwbGl0KCc6Jyk/LlswXVxuICAgICAgICAgIH1cIiBzY2hlbWVgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRvdWNoYWJsZU9wYWNpdHkgb25QcmVzcz17dGhpcy5oYW5kbGVDbGlja30+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHR9Pk9wZW4ge3RoaXMucHJvcHMudXJsfTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgT3BlblNldHRpbmdzRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgYW55PiB7XG4gIG9wZW5TZXR0aW5ncygpIHtcbiAgICBMaW5raW5nLm9wZW5TZXR0aW5ncygpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiA8QnV0dG9uIG9uUHJlc3M9e3RoaXMub3BlblNldHRpbmdzfSB0aXRsZT17J09wZW4gU2V0dGluZ3MnfSAvPjtcbiAgfVxufVxuXG5jbGFzcyBTZW5kSW50ZW50QnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIGhhbmRsZUludGVudCA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgTGlua2luZy5zZW5kSW50ZW50KHRoaXMucHJvcHMuYWN0aW9uLCB0aGlzLnByb3BzLmV4dHJhcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgVG9hc3RBbmRyb2lkLnNob3coZS5tZXNzYWdlLCBUb2FzdEFuZHJvaWQuTE9ORyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRvdWNoYWJsZU9wYWNpdHkgb25QcmVzcz17dGhpcy5oYW5kbGVJbnRlbnR9PlxuICAgICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5idXR0b24sIHN0eWxlcy5idXR0b25JbnRlbnRdfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHR9Pnt0aGlzLnByb3BzLmFjdGlvbn08L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEludGVudEFuZHJvaWRFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPE9wZW5VUkxCdXR0b24gdXJsPXsnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tJ30gLz5cbiAgICAgICAgICA8T3BlblVSTEJ1dHRvbiB1cmw9eydodHRwOi8vd3d3LmZhY2Vib29rLmNvbSd9IC8+XG4gICAgICAgICAgPE9wZW5VUkxCdXR0b24gdXJsPXsnaHR0cDovL2ZhY2Vib29rLmNvbSd9IC8+XG4gICAgICAgICAgPE9wZW5VUkxCdXR0b24gdXJsPXsnZmI6Ly9ub3RpZmljYXRpb25zJ30gLz5cbiAgICAgICAgICA8T3BlblVSTEJ1dHRvbiB1cmw9eydnZW86MzcuNDg0ODQ3LC0xMjIuMTQ4Mzg2J30gLz5cbiAgICAgICAgICA8T3BlblVSTEJ1dHRvbiB1cmw9eyd0ZWw6OTg3NjU0MzIxMCd9IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAge1BsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcgJiYgKFxuICAgICAgICAgIDxSTlRlc3RlckJsb2NrIHRpdGxlPVwiU2VuZCBpbnRlbnRzXCI+XG4gICAgICAgICAgICA8U2VuZEludGVudEJ1dHRvbiBhY3Rpb249XCJhbmRyb2lkLmludGVudC5hY3Rpb24uUE9XRVJfVVNBR0VfU1VNTUFSWVwiIC8+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRleHRTZXBhcmF0b3J9PlxuICAgICAgICAgICAgICBOZXh0IG9uZSB3aWxsIGNyYXNoIGlmIEZhY2Vib29rIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFNlbmRJbnRlbnRCdXR0b25cbiAgICAgICAgICAgICAgYWN0aW9uPVwiYW5kcm9pZC5zZXR0aW5ncy5BUFBfTk9USUZJQ0FUSU9OX1NFVFRJTkdTXCJcbiAgICAgICAgICAgICAgZXh0cmFzPXtbXG4gICAgICAgICAgICAgICAgeydhbmRyb2lkLnByb3ZpZGVyLmV4dHJhLkFQUF9QQUNLQUdFJzogJ2NvbS5mYWNlYm9vay5rYXRhbmEnfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9STlRlc3RlckJsb2NrPlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBidXR0b246IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM0I1OTk4JyxcbiAgICBtYXJnaW5Cb3R0b206IDEwLFxuICB9LFxuICBidXR0b25JbnRlbnQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMDA5Njg4JyxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGNvbG9yOiAnd2hpdGUnLFxuICB9LFxuICB0ZXh0U2VwYXJhdG9yOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogOCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ0xpbmtpbmcnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9saW5raW5nJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAnU2hvd3MgaG93IHRvIHVzZSBMaW5raW5nIHRvIG9wZW4gVVJMcy4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnT3BlbiBleHRlcm5hbCBVUkxzJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdDdXN0b20gc2NoZW1lcyBtYXkgcmVxdWlyZSBzcGVjaWZpYyBhcHBzIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLiBOb3RlOiBQaG9uZSBhcHAgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgc2ltdWxhdG9yLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDx0eXBlb2YgSW50ZW50QW5kcm9pZEV4YW1wbGU+IHtcbiAgICAgIHJldHVybiA8SW50ZW50QW5kcm9pZEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnT3BlbiBzZXR0aW5ncyBhcHAnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIExpbmtpbmdDaGFuZ2VzTGlzdGVuZXJFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPE9wZW5TZXR0aW5nc0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0ICogYXMgTXV0YXRpb25PYnNlcnZlckV4YW1wbGUgZnJvbSAnLi9NdXRhdGlvbk9ic2VydmVyRXhhbXBsZSc7XG5pbXBvcnQgKiBhcyBWaXN1YWxDb21wbGV0aW9uRXhhbXBsZSBmcm9tICcuL1Zpc3VhbENvbXBsZXRpb25FeGFtcGxlL1Zpc3VhbENvbXBsZXRpb25FeGFtcGxlJztcblxuZXhwb3J0IGNvbnN0IGZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnQgY29uc3QgdGl0bGUgPSAnTXV0YXRpb25PYnNlcnZlcic7XG5leHBvcnQgY29uc3QgY2F0ZWdvcnkgPSAnVUknO1xuZXhwb3J0IGNvbnN0IGRvY3VtZW50YXRpb25VUkwgPVxuICAnaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL011dGF0aW9uT2JzZXJ2ZXInO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID0gJ0FQSSB0byBkZXRlY3QgbXV0YXRpb25zIGluIFJlYWN0IE5hdGl2ZSBub2Rlcy4nO1xuZXhwb3J0IGNvbnN0IHNob3dJbmRpdmlkdWFsRXhhbXBsZXMgPSB0cnVlO1xuZXhwb3J0IGNvbnN0IGV4YW1wbGVzID0gW011dGF0aW9uT2JzZXJ2ZXJFeGFtcGxlXTtcblxuaWYgKHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZXhhbXBsZXMucHVzaChWaXN1YWxDb21wbGV0aW9uRXhhbXBsZSk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUgUmVhZE9ubHlOb2RlIGZyb20gJ3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFkT25seU5vZGUnO1xuaW1wb3J0IHR5cGUgTm9kZUxpc3QgZnJvbSAncmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL29sZHN0eWxlY29sbGVjdGlvbnMvTm9kZUxpc3QnO1xuXG5pbXBvcnQge1JOVGVzdGVyVGhlbWVDb250ZXh0fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyVGhlbWUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt0eXBlIEVsZW1lbnRSZWYsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtQcmVzc2FibGUsIFNjcm9sbFZpZXcsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgTXV0YXRpb25PYnNlcnZlciBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL011dGF0aW9uT2JzZXJ2ZXIvTXV0YXRpb25PYnNlcnZlcic7XG5pbXBvcnQgUmVhZE9ubHlFbGVtZW50IGZyb20gJ3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFkT25seUVsZW1lbnQnO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdNdXRhdGlvbk9ic2VydmVyIEV4YW1wbGUnO1xuZXhwb3J0IGNvbnN0IHRpdGxlID0gbmFtZTtcbmV4cG9ydCBjb25zdCBkZXNjcmlwdGlvbiA9XG4gICctIFRhcCBvbiBlbGVtZW50cyB0byBhcHBlbmQgYSBjaGlsZC5cXG4tIExvbmcgdGFwIG9uIGVsZW1lbnRzIHRvIHJlbW92ZSB0aGVtLic7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiA8TXV0YXRpb25PYnNlcnZlckV4YW1wbGUgLz47XG59XG5cbmNvbnN0IG5leHRJZEJ5UHJlZml4OiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2VuZXJhdGVJZChwcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBuZXh0SWQgPSBuZXh0SWRCeVByZWZpeC5nZXQocHJlZml4KTtcbiAgaWYgKG5leHRJZCA9PSBudWxsKSB7XG4gICAgbmV4dElkID0gMTtcbiAgfVxuICBuZXh0SWRCeVByZWZpeC5zZXQocHJlZml4LCBuZXh0SWQgKyAxKTtcbiAgcmV0dXJuIHByZWZpeCArIG5leHRJZDtcbn1cblxuY29uc3Qgcm9vdElkID0gZ2VuZXJhdGVJZCgnZXhhbXBsZS1pdGVtLScpO1xuXG5mdW5jdGlvbiB1c2VUZW1wb3JhcnlWYWx1ZTxUPihkdXJhdGlvbjogbnVtYmVyID0gMjAwMCk6IFs/VCwgKD9UKSA9PiB2b2lkXSB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8P1Q+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRWYWx1ZShudWxsKTtcbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIC8vIHdlIG5lZWQgdG8gc2V0IHRoZSB0aW1lciBldmVyeSB0aW1lIHRoZSB2YWx1ZSBjaGFuZ2VzXG4gIH0sIFtkdXJhdGlvbiwgdmFsdWVdKTtcblxuICByZXR1cm4gW3ZhbHVlLCBzZXRWYWx1ZV07XG59XG5cbmZ1bmN0aW9uIE11dGF0aW9uT2JzZXJ2ZXJFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBwYXJlbnRWaWV3UmVmID0gdXNlUmVmPD9FbGVtZW50UmVmPHR5cGVvZiBWaWV3Pj4obnVsbCk7XG4gIGNvbnN0IFtzaG93RXhhbXBsZSwgc2V0U2hvd0V4YW1wbGVdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IHRoZW1lID0gdXNlQ29udGV4dChSTlRlc3RlclRoZW1lQ29udGV4dCk7XG4gIGNvbnN0IFttZXNzYWdlLCBzZXRNZXNzYWdlXSA9IHVzZVRlbXBvcmFyeVZhbHVlPHN0cmluZz4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBwYXJlbnRWaWV3UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHJlY29yZHMgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgIHJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICBpZiAocmVjb3JkLmFkZGVkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgJ011dGF0aW9uT2JzZXJ2ZXJFeGFtcGxlOiBhZGRlZCBub2RlcycsXG4gICAgICAgICAgICBub2RlTGlzdFRvU3RyaW5nKHJlY29yZC5hZGRlZE5vZGVzKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIG1lc3NhZ2VzLnB1c2goYEFkZGVkIG5vZGVzOiAke25vZGVMaXN0VG9TdHJpbmcocmVjb3JkLmFkZGVkTm9kZXMpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWNvcmQucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICdNdXRhdGlvbk9ic2VydmVyRXhhbXBsZTogcmVtb3ZlZCBub2RlcycsXG4gICAgICAgICAgICBub2RlTGlzdFRvU3RyaW5nKHJlY29yZC5yZW1vdmVkTm9kZXMpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbWVzc2FnZXMucHVzaChcbiAgICAgICAgICAgIGBSZW1vdmVkIG5vZGVzOiAke25vZGVMaXN0VG9TdHJpbmcocmVjb3JkLnJlbW92ZWROb2Rlcyl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldE1lc3NhZ2UobWVzc2FnZXMuam9pbignLFxcbicpKTtcbiAgICB9KTtcblxuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtY2FsbF1cbiAgICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUocGFyZW50Tm9kZSwge1xuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnTXV0YXRpb25PYnNlcnZlckV4YW1wbGU6IGRpc2Nvbm5lY3RpbmcgbXV0YXRpb24gb2JzZXJ2ZXInKTtcbiAgICAgIG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgbmV4dElkQnlQcmVmaXguY2xlYXIoKTtcbiAgICB9O1xuICB9LCBbc2V0TWVzc2FnZV0pO1xuXG4gIGNvbnN0IGV4YW1wbGVJZCA9IHNob3dFeGFtcGxlID8gcm9vdElkIDogJyc7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFNjcm9sbFZpZXcgaWQ9XCJzY3JvbGwtdmlld1wiPlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnBhcmVudH0gcmVmPXtwYXJlbnRWaWV3UmVmfSBpZD1cInBhcmVudFwiPlxuICAgICAgICAgIHtzaG93RXhhbXBsZSA/IChcbiAgICAgICAgICAgIDxFeGFtcGxlSXRlbVxuICAgICAgICAgICAgICBsYWJlbD17ZXhhbXBsZUlkfVxuICAgICAgICAgICAgICBpZD17ZXhhbXBsZUlkfVxuICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gc2V0U2hvd0V4YW1wbGUoZmFsc2UpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgPFRleHQgaWQ9XCJtZXNzYWdlXCIgc3R5bGU9e1tzdHlsZXMubWVzc2FnZSwge2NvbG9yOiB0aGVtZS5MYWJlbENvbG9yfV19PlxuICAgICAgICB7bWVzc2FnZX1cbiAgICAgIDwvVGV4dD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRXhhbXBsZUl0ZW0ocHJvcHM6IHtcbiAgaWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZyxcbiAgb25SZW1vdmU/OiAoKSA9PiB2b2lkLFxufSk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB0aGVtZSA9IHVzZUNvbnRleHQoUk5UZXN0ZXJUaGVtZUNvbnRleHQpO1xuICBjb25zdCBbY2hpbGRyZW4sIHNldENoaWxkcmVuXSA9IHVzZVN0YXRlPFxuICAgICRSZWFkT25seUFycmF5PFtzdHJpbmcsIFJlYWN0Lk5vZGVdPixcbiAgPihbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBpZD17cHJvcHMuaWR9PlxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICB0ZXN0SUQ9eydwcmVzc2FibGUtJyArIHByb3BzLmlkfVxuICAgICAgICBzdHlsZT17W3N0eWxlcy5pdGVtXX1cbiAgICAgICAgb25Mb25nUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBwcm9wcy5vblJlbW92ZT8uKCk7XG4gICAgICAgIH19XG4gICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGdlbmVyYXRlSWQocHJvcHMubGFiZWwgKyAnLScpO1xuICAgICAgICAgIHNldENoaWxkcmVuKHByZXZDaGlsZHJlbiA9PiBbXG4gICAgICAgICAgICAuLi5wcmV2Q2hpbGRyZW4sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICA8RXhhbXBsZUl0ZW1cbiAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAga2V5PXtpZH1cbiAgICAgICAgICAgICAgICBsYWJlbD17aWR9XG4gICAgICAgICAgICAgICAgb25SZW1vdmU9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldENoaWxkcmVuKHByZXZDaGlsZHJlbjIgPT5cbiAgICAgICAgICAgICAgICAgICAgcHJldkNoaWxkcmVuMi5maWx0ZXIocGFpciA9PiBwYWlyWzBdICE9PSBpZCksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfX0+XG4gICAgICAgIHtwcm9wcy5sYWJlbCAhPSBudWxsID8gKFxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBpZD17J3RleHQtJyArIHByb3BzLmlkfVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMubGFiZWwsIHtjb2xvcjogdGhlbWUuTGFiZWxDb2xvcn1dfT5cbiAgICAgICAgICAgIHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7Y2hpbGRyZW4ubWFwKChbaWQsIGNoaWxkXSkgPT4gY2hpbGQpfVxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBub2RlTGlzdFRvU3RyaW5nKG5vZGVMaXN0OiBOb2RlTGlzdDxSZWFkT25seU5vZGU+KTogc3RyaW5nIHtcbiAgcmV0dXJuIFsuLi5ub2RlTGlzdF1cbiAgICAubWFwKFxuICAgICAgbm9kZSA9PiAobm9kZSBpbnN0YW5jZW9mIFJlYWRPbmx5RWxlbWVudCAmJiBub2RlLmlkKSB8fCAnPHVua25vd24tbm9kZT4nLFxuICAgIClcbiAgICAuam9pbignLCAnKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBwYXJlbnQ6IHtcbiAgICBmbGV4OiAxLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgfSxcbiAgaXRlbToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgZmxleDogMSxcbiAgICBnYXA6IDE2LFxuICAgIG1pbkhlaWdodDogNTAsXG4gICAgcGFkZGluZzogNDAsXG4gIH0sXG4gIGxhYmVsOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGZvbnRTaXplOiAxMCxcbiAgfSxcbiAgbWVzc2FnZToge1xuICAgIHBhZGRpbmc6IDEwLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuaW1wb3J0IHR5cGUge011dGF0aW9uT2JzZXJ2ZXJJZH0gZnJvbSAnLi9NdXRhdGlvbk9ic2VydmVyTWFuYWdlcic7XG5pbXBvcnQgdHlwZSBNdXRhdGlvblJlY29yZCBmcm9tICcuL011dGF0aW9uUmVjb3JkJztcblxuaW1wb3J0IFJlYWN0TmF0aXZlRWxlbWVudCBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFjdE5hdGl2ZUVsZW1lbnQnO1xuaW1wb3J0ICogYXMgTXV0YXRpb25PYnNlcnZlck1hbmFnZXIgZnJvbSAnLi9NdXRhdGlvbk9ic2VydmVyTWFuYWdlcic7XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChcbiAgbXV0YXRpb25SZWNvcmRzOiAkUmVhZE9ubHlBcnJheTxNdXRhdGlvblJlY29yZD4sXG4gIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyLFxuKSA9PiBtaXhlZDtcblxudHlwZSBNdXRhdGlvbk9ic2VydmVySW5pdCA9ICRSZWFkT25seTx7XG4gIHN1YnRyZWU/OiBib29sZWFuLFxuICAvLyBUaGlzIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBvcHRpb24gc28gaXQncyByZXF1aXJlZCB0byBiZSBgdHJ1ZWAuXG4gIGNoaWxkTGlzdDogdHJ1ZSxcblxuICAvLyBVbnN1cHBvcnRlZDpcbiAgYXR0cmlidXRlcz86IGJvb2xlYW4sXG4gIGF0dHJpYnV0ZUZpbHRlcj86ICRSZWFkT25seUFycmF5PHN0cmluZz4sXG4gIGF0dHJpYnV0ZU9sZFZhbHVlPzogYm9vbGVhbixcbiAgY2hhcmFjdGVyRGF0YT86IGJvb2xlYW4sXG4gIGNoYXJhY3RlckRhdGFPbGRWYWx1ZT86IGJvb2xlYW4sXG59PjtcblxuLyoqXG4gKiBUaGlzIGlzIGEgUmVhY3QgTmF0aXZlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYE11dGF0aW9uT2JzZXJ2ZXJgIEFQSVxuICogKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NdXRhdGlvbk9ic2VydmVyKS5cbiAqXG4gKiBJdCBvbmx5IHN1cHBvcnRzIHRoZSBgc3VidHJlZWAgYW5kIGBjaGlsZExpc3RgIG9wdGlvbnMgYXQgdGhlIG1vbWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXV0YXRpb25PYnNlcnZlciB7XG4gIF9jYWxsYmFjazogTXV0YXRpb25PYnNlcnZlckNhbGxiYWNrO1xuICBfb2JzZXJ2YXRpb25UYXJnZXRzOiBTZXQ8UmVhY3ROYXRpdmVFbGVtZW50PiA9IG5ldyBTZXQoKTtcbiAgX211dGF0aW9uT2JzZXJ2ZXJJZDogP011dGF0aW9uT2JzZXJ2ZXJJZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjazogTXV0YXRpb25PYnNlcnZlckNhbGxiYWNrKTogdm9pZCB7XG4gICAgaWYgKGNhbGxiYWNrID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnTXV0YXRpb25PYnNlcnZlcic6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gY29uc3RydWN0ICdNdXRhdGlvbk9ic2VydmVyJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBgTXV0YXRpb25PYnNlcnZlcmAgY2FsbGJhY2sgdG8gYmVnaW4gcmVjZWl2aW5nIG5vdGlmaWNhdGlvbnNcbiAgICogb2YgY2hhbmdlcyB0byB0aGUgVUkgdHJlZSB0aGF0IG1hdGNoIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgKiBEZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBvYnNlcnZlciBtYXkgd2F0Y2ggYSBzaW5nbGUgbm9kZSBpbiB0aGVcbiAgICogVUkgdHJlZSwgb3IgdGhhdCBub2RlIGFuZCBzb21lIG9yIGFsbCBvZiBpdHMgZGVzY2VuZGFudCBub2Rlcy5cbiAgICogVG8gc3RvcCB0aGUgYE11dGF0aW9uT2JzZXJ2ZXJgIChzbyB0aGF0IG5vbmUgb2YgaXRzIGNhbGxiYWNrcyB3aWxsIGJlXG4gICAqIHRyaWdnZXJlZCBhbnkgbG9uZ2VyKSwgY2FsbCBgTXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KClgLlxuICAgKi9cbiAgb2JzZXJ2ZSh0YXJnZXQ6IFJlYWN0TmF0aXZlRWxlbWVudCwgb3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KTogdm9pZCB7XG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgUmVhY3ROYXRpdmVFbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JzZXJ2ZScgb24gJ011dGF0aW9uT2JzZXJ2ZXInOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnUmVhY3ROYXRpdmVFbGVtZW50Jy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQnJvd3NlcnMgZm9yY2UgYSBjYXN0IG9mIHRoaXMgdmFsdWUgdG8gYm9vbGVhblxuICAgIGlmIChCb29sZWFuKG9wdGlvbnM/LmNoaWxkTGlzdCkgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdNdXRhdGlvbk9ic2VydmVyJzogVGhlIG9wdGlvbnMgb2JqZWN0IG11c3Qgc2V0ICdjaGlsZExpc3QnIHRvIHRydWUuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5hdHRyaWJ1dGVzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JzZXJ2ZScgb24gJ011dGF0aW9uT2JzZXJ2ZXInOiBhdHRyaWJ1dGVzIGlzIG5vdCBzdXBwb3J0ZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmF0dHJpYnV0ZUZpbHRlciAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdNdXRhdGlvbk9ic2VydmVyJzogYXR0cmlidXRlRmlsdGVyIGlzIG5vdCBzdXBwb3J0ZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmF0dHJpYnV0ZU9sZFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JzZXJ2ZScgb24gJ011dGF0aW9uT2JzZXJ2ZXInOiBhdHRyaWJ1dGVPbGRWYWx1ZSBpcyBub3Qgc3VwcG9ydGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5jaGFyYWN0ZXJEYXRhICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JzZXJ2ZScgb24gJ011dGF0aW9uT2JzZXJ2ZXInOiBjaGFyYWN0ZXJEYXRhIGlzIG5vdCBzdXBwb3J0ZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmNoYXJhY3RlckRhdGFPbGRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdNdXRhdGlvbk9ic2VydmVyJzogY2hhcmFjdGVyRGF0YU9sZFZhbHVlIGlzIG5vdCBzdXBwb3J0ZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbXV0YXRpb25PYnNlcnZlcklkID0gdGhpcy5fZ2V0T3JDcmVhdGVNdXRhdGlvbk9ic2VydmVySWQoKTtcblxuICAgIC8vIEFzIHBlciB0aGUgc3BlYywgaWYgdGhlIHRhcmdldCBpcyBhbHJlYWR5IGJlaW5nIG9ic2VydmVkLCB3ZSBcInJlc2V0XCJcbiAgICAvLyB0aGUgb2JzZXJ2YXRpb24gYW5kIG9ubHkgdXNlIHRoZSBsYXN0IG9wdGlvbnMgdXNlZC5cbiAgICBpZiAodGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLmhhcyh0YXJnZXQpKSB7XG4gICAgICBNdXRhdGlvbk9ic2VydmVyTWFuYWdlci51bm9ic2VydmUobXV0YXRpb25PYnNlcnZlcklkLCB0YXJnZXQpO1xuICAgIH1cblxuICAgIE11dGF0aW9uT2JzZXJ2ZXJNYW5hZ2VyLm9ic2VydmUoe1xuICAgICAgbXV0YXRpb25PYnNlcnZlcklkLFxuICAgICAgdGFyZ2V0LFxuICAgICAgc3VidHJlZTogQm9vbGVhbihvcHRpb25zPy5zdWJ0cmVlKSxcbiAgICB9KTtcblxuICAgIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5hZGQodGFyZ2V0KTtcbiAgfVxuXG4gIF91bm9ic2VydmUodGFyZ2V0OiBSZWFjdE5hdGl2ZUVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBSZWFjdE5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdvYnNlcnZlJyBvbiAnTXV0YXRpb25PYnNlcnZlcic6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdSZWFjdE5hdGl2ZUVsZW1lbnQnLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5oYXModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2ZXJJZCA9IHRoaXMuX211dGF0aW9uT2JzZXJ2ZXJJZDtcbiAgICBpZiAobXV0YXRpb25PYnNlcnZlcklkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBNdXRhdGlvbk9ic2VydmVyTWFuYWdlci51bm9ic2VydmUobXV0YXRpb25PYnNlcnZlcklkLCB0YXJnZXQpO1xuICAgIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5kZWxldGUodGFyZ2V0KTtcblxuICAgIGlmICh0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMuc2l6ZSA9PT0gMCkge1xuICAgICAgTXV0YXRpb25PYnNlcnZlck1hbmFnZXIudW5yZWdpc3Rlck9ic2VydmVyKG11dGF0aW9uT2JzZXJ2ZXJJZCk7XG4gICAgICB0aGlzLl9tdXRhdGlvbk9ic2VydmVySWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyB0aGUgb2JzZXJ2ZXIgdG8gc3RvcCB3YXRjaGluZyBmb3IgbXV0YXRpb25zLlxuICAgKiBUaGUgb2JzZXJ2ZXIgY2FuIGJlIHJldXNlZCBieSBjYWxsaW5nIGl0cyBgb2JzZXJ2ZSgpYCBtZXRob2QgYWdhaW4uXG4gICAqL1xuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5rZXlzKCkpIHtcbiAgICAgIHRoaXMuX3Vub2JzZXJ2ZSh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRPckNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXJJZCgpOiBNdXRhdGlvbk9ic2VydmVySWQge1xuICAgIGxldCBtdXRhdGlvbk9ic2VydmVySWQgPSB0aGlzLl9tdXRhdGlvbk9ic2VydmVySWQ7XG4gICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJJZCA9PSBudWxsKSB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVySWQgPSBNdXRhdGlvbk9ic2VydmVyTWFuYWdlci5yZWdpc3Rlck9ic2VydmVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLl9jYWxsYmFjayxcbiAgICAgICk7XG4gICAgICB0aGlzLl9tdXRhdGlvbk9ic2VydmVySWQgPSBtdXRhdGlvbk9ic2VydmVySWQ7XG4gICAgfVxuICAgIHJldHVybiBtdXRhdGlvbk9ic2VydmVySWQ7XG4gIH1cblxuICAvLyBPbmx5IGZvciB0ZXN0c1xuICBfX2dldE9ic2VydmVySUQoKTogP011dGF0aW9uT2JzZXJ2ZXJJZCB7XG4gICAgcmV0dXJuIHRoaXMuX211dGF0aW9uT2JzZXJ2ZXJJZDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBSZWFjdCBOYXRpdmUgcmVuZGVyZXJcbiAqIGFuZCBhbGwgdGhlIG11dGF0aW9uIG9ic2VydmVycyB0aGF0IGFyZSBjdXJyZW50bHkgb2JzZXJ2aW5nIGFueSB0YXJnZXRzLlxuICpcbiAqIEluIG9yZGVyIHRvIHJlZHVjZSB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIG5hdGl2ZSBhbmQgSmF2YVNjcmlwdCxcbiAqIHdlIHJlZ2lzdGVyIGEgc2luZ2xlIG5vdGljYXRpb24gY2FsbGJhY2sgaW4gbmF0aXZlLCBhbmQgdGhlbiB3ZSBoYW5kbGUgaG93XG4gKiB0byBub3RpZnkgZWFjaCBlbnRyeSB0byB0aGUgcmlnaHQgbXV0YXRpb24gb2JzZXJ2ZXIgd2hlbiB3ZSByZWNlaXZlIGFsbFxuICogdGhlIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgUmVhY3ROYXRpdmVFbGVtZW50IGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL25vZGVzL1JlYWN0TmF0aXZlRWxlbWVudCc7XG5pbXBvcnQgdHlwZSBNdXRhdGlvbk9ic2VydmVyLCB7XG4gIE11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFjayxcbn0gZnJvbSAnLi9NdXRhdGlvbk9ic2VydmVyJztcbmltcG9ydCB0eXBlIE11dGF0aW9uUmVjb3JkIGZyb20gJy4vTXV0YXRpb25SZWNvcmQnO1xuXG5pbXBvcnQge1xuICBnZXRQdWJsaWNJbnN0YW5jZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlLFxuICBnZXRTaGFkb3dOb2RlLFxufSBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFkT25seU5vZGUnO1xuaW1wb3J0ICogYXMgU3lzdHJhY2UgZnJvbSAnLi4vUGVyZm9ybWFuY2UvU3lzdHJhY2UnO1xuaW1wb3J0IHdhcm5PbmNlIGZyb20gJy4uL1V0aWxpdGllcy93YXJuT25jZSc7XG5pbXBvcnQge2NyZWF0ZU11dGF0aW9uUmVjb3JkfSBmcm9tICcuL011dGF0aW9uUmVjb3JkJztcbmltcG9ydCBOYXRpdmVNdXRhdGlvbk9ic2VydmVyIGZyb20gJy4vTmF0aXZlTXV0YXRpb25PYnNlcnZlcic7XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uT2JzZXJ2ZXJJZCA9IG51bWJlcjtcblxubGV0IG5leHRNdXRhdGlvbk9ic2VydmVySWQ6IE11dGF0aW9uT2JzZXJ2ZXJJZCA9IDE7XG5sZXQgaXNDb25uZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuY29uc3QgcmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzOiBNYXA8XG4gIE11dGF0aW9uT2JzZXJ2ZXJJZCxcbiAgJFJlYWRPbmx5PHtvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciwgY2FsbGJhY2s6IE11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja30+LFxuPiA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGdpdmVuIG11dGF0aW9uIG9ic2VydmVyIGFuZCByZXR1cm5zIGEgdW5pcXVlIElEIGZvciBpdCxcbiAqIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHN0YXJ0IG9ic2VydmluZyB0YXJnZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJPYnNlcnZlcihcbiAgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIsXG4gIGNhbGxiYWNrOiBNdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2ssXG4pOiBNdXRhdGlvbk9ic2VydmVySWQge1xuICBjb25zdCBtdXRhdGlvbk9ic2VydmVySWQgPSBuZXh0TXV0YXRpb25PYnNlcnZlcklkO1xuICBuZXh0TXV0YXRpb25PYnNlcnZlcklkKys7XG4gIHJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVycy5zZXQobXV0YXRpb25PYnNlcnZlcklkLCB7XG4gICAgb2JzZXJ2ZXIsXG4gICAgY2FsbGJhY2ssXG4gIH0pO1xuICByZXR1cm4gbXV0YXRpb25PYnNlcnZlcklkO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXJzIHRoZSBnaXZlbiBtdXRhdGlvbiBvYnNlcnZlci5cbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYW4gb2JzZXJ2ZXIgaXMgbm8gbG9uZ2VyIG9ic2VydmluZyBhbnlcbiAqIHRhcmdldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyT2JzZXJ2ZXIoXG4gIG11dGF0aW9uT2JzZXJ2ZXJJZDogTXV0YXRpb25PYnNlcnZlcklkLFxuKTogdm9pZCB7XG4gIGNvbnN0IGRlbGV0ZWQgPSByZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnMuZGVsZXRlKG11dGF0aW9uT2JzZXJ2ZXJJZCk7XG4gIGlmIChkZWxldGVkICYmIHJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVycy5zaXplID09PSAwKSB7XG4gICAgLy8gV2hlbiB0aGVyZSBhcmUgbm8gb2JzZXJ2ZXJzIGxlZnQsIHdlIGNhbiBkaXNjb25uZWN0IHRoZSBuYXRpdmUgbW9kdWxlXG4gICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBjb21taXRzIGZvciBtdXRhdGlvbnMuXG4gICAgTmF0aXZlTXV0YXRpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIGlzQ29ubmVjdGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmUoe1xuICBtdXRhdGlvbk9ic2VydmVySWQsXG4gIHRhcmdldCxcbiAgc3VidHJlZSxcbn06IHtcbiAgbXV0YXRpb25PYnNlcnZlcklkOiBNdXRhdGlvbk9ic2VydmVySWQsXG4gIHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50LFxuICBzdWJ0cmVlOiBib29sZWFuLFxufSk6IHZvaWQge1xuICBpZiAoTmF0aXZlTXV0YXRpb25PYnNlcnZlciA9PSBudWxsKSB7XG4gICAgd2Fybk5vTmF0aXZlTXV0YXRpb25PYnNlcnZlcigpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlZ2lzdGVyZWRPYnNlcnZlciA9XG4gICAgcmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzLmdldChtdXRhdGlvbk9ic2VydmVySWQpO1xuICBpZiAocmVnaXN0ZXJlZE9ic2VydmVyID09IG51bGwpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYE11dGF0aW9uT2JzZXJ2ZXJNYW5hZ2VyOiBjb3VsZCBub3Qgc3RhcnQgb2JzZXJ2aW5nIHRhcmdldCBiZWNhdXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2l0aCBJRCAke211dGF0aW9uT2JzZXJ2ZXJJZH0gd2FzIG5vdCByZWdpc3RlcmVkLmAsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0YXJnZXRTaGFkb3dOb2RlID0gZ2V0U2hhZG93Tm9kZSh0YXJnZXQpO1xuICBpZiAodGFyZ2V0U2hhZG93Tm9kZSA9PSBudWxsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICdNdXRhdGlvbk9ic2VydmVyTWFuYWdlcjogY291bGQgbm90IGZpbmQgcmVmZXJlbmNlIHRvIGhvc3Qgbm9kZSBmcm9tIHRhcmdldCcsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzQ29ubmVjdGVkKSB7XG4gICAgTmF0aXZlTXV0YXRpb25PYnNlcnZlci5jb25uZWN0KFxuICAgICAgbm90aWZ5TXV0YXRpb25PYnNlcnZlcnMsXG4gICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgb3BlcmF0aW9uIGZyb20gbmF0aXZlIHRvIG1ha2Ugc3VyZSB3ZSdyZSByZXRhaW5pbmdcbiAgICAgIC8vIHRoZSBwdWJsaWMgaW5zdGFuY2UgaW1tZWRpYXRlbHkgd2hlbiBtdXRhdGlvbnMgb2NjdXIuIE90aGVyd2lzZSBSZWFjdFxuICAgICAgLy8gY291bGQgZGVyZWZlcmVuY2UgaXQgaW4gdGhlIGluc3RhbmNlIGhhbmRsZSBhbmQgd2Ugd291bGRuJ3QgYmUgYWJsZSB0b1xuICAgICAgLy8gYWNjZXNzIGl0LlxuICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS1jYWxsXSBUaGlzIGlzIHR5cGVkIGFzIChtaXhlZCkgPT4gbWl4ZWQgaW4gdGhlIG5hdGl2ZSBtb2R1bGUgYmVjYXVzZSB0aGUgY29kZWdlbiBkb2Vzbid0IHN1cHBvcnQgdGhlIGFjdHVhbCB0eXBlcy5cbiAgICAgIGdldFB1YmxpY0luc3RhbmNlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUsXG4gICAgKTtcbiAgICBpc0Nvbm5lY3RlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gTmF0aXZlTXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHtcbiAgICBtdXRhdGlvbk9ic2VydmVySWQsXG4gICAgdGFyZ2V0U2hhZG93Tm9kZSxcbiAgICBzdWJ0cmVlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVub2JzZXJ2ZShcbiAgbXV0YXRpb25PYnNlcnZlcklkOiBudW1iZXIsXG4gIHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50LFxuKTogdm9pZCB7XG4gIGlmIChOYXRpdmVNdXRhdGlvbk9ic2VydmVyID09IG51bGwpIHtcbiAgICB3YXJuTm9OYXRpdmVNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0ZXJlZE9ic2VydmVyID1cbiAgICByZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnMuZ2V0KG11dGF0aW9uT2JzZXJ2ZXJJZCk7XG4gIGlmIChyZWdpc3RlcmVkT2JzZXJ2ZXIgPT0gbnVsbCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgTXV0YXRpb25PYnNlcnZlck1hbmFnZXI6IGNvdWxkIG5vdCBzdG9wIG9ic2VydmluZyB0YXJnZXQgYmVjYXVzZSBNdXRhdGlvbk9ic2VydmVyIHdpdGggSUQgJHttdXRhdGlvbk9ic2VydmVySWR9IHdhcyBub3QgcmVnaXN0ZXJlZC5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0U2hhZG93Tm9kZSA9IGdldFNoYWRvd05vZGUodGFyZ2V0KTtcbiAgaWYgKHRhcmdldFNoYWRvd05vZGUgPT0gbnVsbCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnTXV0YXRpb25PYnNlcnZlck1hbmFnZXI6IGNvdWxkIG5vdCBmaW5kIHJlZmVyZW5jZSB0byBob3N0IG5vZGUgZnJvbSB0YXJnZXQnLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgTmF0aXZlTXV0YXRpb25PYnNlcnZlci51bm9ic2VydmUobXV0YXRpb25PYnNlcnZlcklkLCB0YXJnZXRTaGFkb3dOb2RlKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG5hdGl2ZSB3aGVuIHRoZXJlIGFyZSBgTXV0YXRpb25PYnNlcnZlcmBcbiAqIGVudHJpZXMgdG8gZGlzcGF0Y2guXG4gKi9cbmZ1bmN0aW9uIG5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzKCk6IHZvaWQge1xuICBTeXN0cmFjZS5iZWdpbkV2ZW50KCdNdXRhdGlvbk9ic2VydmVyTWFuYWdlci5ub3RpZnlNdXRhdGlvbk9ic2VydmVycycpO1xuICB0cnkge1xuICAgIGRvTm90aWZ5TXV0YXRpb25PYnNlcnZlcnMoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBTeXN0cmFjZS5lbmRFdmVudCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRvTm90aWZ5TXV0YXRpb25PYnNlcnZlcnMoKTogdm9pZCB7XG4gIGlmIChOYXRpdmVNdXRhdGlvbk9ic2VydmVyID09IG51bGwpIHtcbiAgICB3YXJuTm9OYXRpdmVNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbmF0aXZlUmVjb3JkcyA9IE5hdGl2ZU11dGF0aW9uT2JzZXJ2ZXIudGFrZVJlY29yZHMoKTtcblxuICBjb25zdCBlbnRyaWVzQnlPYnNlcnZlcjogTWFwPFxuICAgIE11dGF0aW9uT2JzZXJ2ZXJJZCxcbiAgICBBcnJheTxNdXRhdGlvblJlY29yZD4sXG4gID4gPSBuZXcgTWFwKCk7XG5cbiAgZm9yIChjb25zdCBuYXRpdmVSZWNvcmQgb2YgbmF0aXZlUmVjb3Jkcykge1xuICAgIGxldCBsaXN0ID0gZW50cmllc0J5T2JzZXJ2ZXIuZ2V0KG5hdGl2ZVJlY29yZC5tdXRhdGlvbk9ic2VydmVySWQpO1xuICAgIGlmIChsaXN0ID09IG51bGwpIHtcbiAgICAgIGxpc3QgPSBbXTtcbiAgICAgIGVudHJpZXNCeU9ic2VydmVyLnNldChuYXRpdmVSZWNvcmQubXV0YXRpb25PYnNlcnZlcklkLCBsaXN0KTtcbiAgICB9XG4gICAgbGlzdC5wdXNoKGNyZWF0ZU11dGF0aW9uUmVjb3JkKG5hdGl2ZVJlY29yZCkpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbbXV0YXRpb25PYnNlcnZlcklkLCBlbnRyaWVzRm9yT2JzZXJ2ZXJdIG9mIGVudHJpZXNCeU9ic2VydmVyKSB7XG4gICAgY29uc3QgcmVnaXN0ZXJlZE9ic2VydmVyID1cbiAgICAgIHJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVycy5nZXQobXV0YXRpb25PYnNlcnZlcklkKTtcbiAgICBpZiAoIXJlZ2lzdGVyZWRPYnNlcnZlcikge1xuICAgICAgLy8gVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlIG9ic2VydmVyIGlzIGRpc2Nvbm5lY3RlZCBiZXR3ZWVuIGNvbW1pdFxuICAgICAgLy8gYW5kIG1vdW50LiBJbiB0aGlzIGNhc2UsIHdlIGNhbiBqdXN0IGlnbm9yZSB0aGUgZW50cmllcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7b2JzZXJ2ZXIsIGNhbGxiYWNrfSA9IHJlZ2lzdGVyZWRPYnNlcnZlcjtcbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2suY2FsbChvYnNlcnZlciwgZW50cmllc0Zvck9ic2VydmVyLCBvYnNlcnZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9OYXRpdmVNdXRhdGlvbk9ic2VydmVyKCkge1xuICB3YXJuT25jZShcbiAgICAnbWlzc2luZy1uYXRpdmUtbXV0YXRpb24tb2JzZXJ2ZXInLFxuICAgICdNaXNzaW5nIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBNdXRhdGlvbk9ic2VydmVyJyxcbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqIEBmb3JtYXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS9zcGVjcy9tb2R1bGVzL05hdGl2ZU11dGF0aW9uT2JzZXJ2ZXInO1xuaW1wb3J0IE5hdGl2ZU11dGF0aW9uT2JzZXJ2ZXIgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVNdXRhdGlvbk9ic2VydmVyJztcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZU11dGF0aW9uT2JzZXJ2ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uT2JzZXJ2ZXJJZCA9IG51bWJlcjtcblxuLy8gVGhlc2UgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGNvZGVnZW4uXG50eXBlIFNoYWRvd05vZGUgPSBtaXhlZDtcbnR5cGUgSW5zdGFuY2VIYW5kbGUgPSBtaXhlZDtcbnR5cGUgUmVhY3ROYXRpdmVFbGVtZW50ID0gbWl4ZWQ7XG50eXBlIFJlYWRPbmx5Tm9kZSA9IG1peGVkO1xuXG5leHBvcnQgdHlwZSBOYXRpdmVNdXRhdGlvblJlY29yZCA9IHtcbiAgbXV0YXRpb25PYnNlcnZlcklkOiBNdXRhdGlvbk9ic2VydmVySWQsXG4gIHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50LFxuICBhZGRlZE5vZGVzOiAkUmVhZE9ubHlBcnJheTxSZWFkT25seU5vZGU+LFxuICByZW1vdmVkTm9kZXM6ICRSZWFkT25seUFycmF5PFJlYWRPbmx5Tm9kZT4sXG4gIC4uLlxufTtcblxuZXhwb3J0IHR5cGUgTmF0aXZlTXV0YXRpb25PYnNlcnZlck9ic2VydmVPcHRpb25zID0ge1xuICBtdXRhdGlvbk9ic2VydmVySWQ6IG51bWJlcixcbiAgdGFyZ2V0U2hhZG93Tm9kZTogU2hhZG93Tm9kZSxcbiAgc3VidHJlZTogYm9vbGVhbixcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgK29ic2VydmU6IChvcHRpb25zOiBOYXRpdmVNdXRhdGlvbk9ic2VydmVyT2JzZXJ2ZU9wdGlvbnMpID0+IHZvaWQ7XG4gICt1bm9ic2VydmU6IChcbiAgICBtdXRhdGlvbk9ic2VydmVySWQ6IG51bWJlcixcbiAgICB0YXJnZXRTaGFkb3dOb2RlOiBTaGFkb3dOb2RlLFxuICApID0+IHZvaWQ7XG4gICtjb25uZWN0OiAoXG4gICAgbm90aWZ5TXV0YXRpb25PYnNlcnZlcnM6ICgpID0+IHZvaWQsXG4gICAgLy8gV2UgbmVlZCB0aGlzIHRvIHJldGFpbiB0aGUgcHVibGljIGluc3RhbmNlIGJlZm9yZSBSZWFjdCByZW1vdmVzIHRoZVxuICAgIC8vIHJlZmVyZW5jZSB0byBpdCAod2hpY2ggaGFwcGVuIGluIG11dGF0aW9ucyB0aGF0IHJlbW92ZSBub2Rlcywgb3Igd2hlblxuICAgIC8vIG5vZGVzIGFyZSByZW1vdmVkIGJldHdlZW4gdGhlIGNoYW5nZSBhbmQgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGluIEpTKS5cbiAgICBnZXRQdWJsaWNJbnN0YW5jZUZyb21JbnN0YW5jZUhhbmRsZTogKFxuICAgICAgaW5zdGFuY2VIYW5kbGU6IEluc3RhbmNlSGFuZGxlLFxuICAgICkgPT4gUmVhZE9ubHlOb2RlLFxuICApID0+IHZvaWQ7XG4gICtkaXNjb25uZWN0OiAoKSA9PiB2b2lkO1xuICArdGFrZVJlY29yZHM6ICgpID0+ICRSZWFkT25seUFycmF5PE5hdGl2ZU11dGF0aW9uUmVjb3JkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KFxuICAnTmF0aXZlTXV0YXRpb25PYnNlcnZlckN4eCcsXG4pOiA/U3BlYyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuaW1wb3J0IHR5cGUgUmVhY3ROYXRpdmVFbGVtZW50IGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL25vZGVzL1JlYWN0TmF0aXZlRWxlbWVudCc7XG5pbXBvcnQgdHlwZSBSZWFkT25seU5vZGUgZnJvbSAnLi4vLi4vc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhZE9ubHlOb2RlJztcbmltcG9ydCB0eXBlIHtOYXRpdmVNdXRhdGlvblJlY29yZH0gZnJvbSAnLi9OYXRpdmVNdXRhdGlvbk9ic2VydmVyJztcblxuaW1wb3J0IE5vZGVMaXN0LCB7XG4gIGNyZWF0ZU5vZGVMaXN0LFxufSBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9vbGRzdHlsZWNvbGxlY3Rpb25zL05vZGVMaXN0JztcblxuZXhwb3J0IHR5cGUgTXV0YXRpb25UeXBlID0gJ2F0dHJpYnV0ZXMnIHwgJ2NoYXJhY3RlckRhdGEnIHwgJ2NoaWxkTGlzdCc7XG5cbi8qKlxuICogVGhlIGBNdXRhdGlvblJlY29yZGAgaXMgYSByZWFkLW9ubHkgaW50ZXJmYWNlIHRoYXQgcmVwcmVzZW50cyBhbiBpbmRpdmlkdWFsXG4gKiBET00gbXV0YXRpb24gb2JzZXJ2ZWQgYnkgYSBgTXV0YXRpb25PYnNlcnZlcmAuXG4gKlxuICogSXQgaXMgdGhlIG9iamVjdCBpbnNpZGUgdGhlIGFycmF5IHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgb2YgYSBgTXV0YXRpb25PYnNlcnZlcmAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11dGF0aW9uUmVjb3JkIHtcbiAgX3RhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50O1xuICBfYWRkZWROb2RlczogTm9kZUxpc3Q8UmVhZE9ubHlOb2RlPjtcbiAgX3JlbW92ZWROb2RlczogTm9kZUxpc3Q8UmVhZE9ubHlOb2RlPjtcblxuICBjb25zdHJ1Y3RvcihuYXRpdmVSZWNvcmQ6IE5hdGl2ZU11dGF0aW9uUmVjb3JkKSB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS10eXBlXSB0aGUgY29kZWdlbiBkb2Vzbid0IHN1cHBvcnQgdGhlIGFjdHVhbCB0eXBlLlxuICAgIGNvbnN0IHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50ID0gbmF0aXZlUmVjb3JkLnRhcmdldDtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW2luY29tcGF0aWJsZS10eXBlXSB0aGUgY29kZWdlbiBkb2Vzbid0IHN1cHBvcnQgdGhlIGFjdHVhbCB0eXBlLlxuICAgIGNvbnN0IGFkZGVkTm9kZXM6ICRSZWFkT25seUFycmF5PFJlYWRPbmx5Tm9kZT4gPSBuYXRpdmVSZWNvcmQuYWRkZWROb2RlcztcbiAgICB0aGlzLl9hZGRlZE5vZGVzID0gY3JlYXRlTm9kZUxpc3QoYWRkZWROb2Rlcyk7XG4gICAgY29uc3QgcmVtb3ZlZE5vZGVzOiAkUmVhZE9ubHlBcnJheTxSZWFkT25seU5vZGU+ID1cbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICBuYXRpdmVSZWNvcmQucmVtb3ZlZE5vZGVzO1xuICAgIHRoaXMuX3JlbW92ZWROb2RlcyA9IGNyZWF0ZU5vZGVMaXN0KHJlbW92ZWROb2Rlcyk7XG4gIH1cblxuICBnZXQgYWRkZWROb2RlcygpOiBOb2RlTGlzdDxSZWFkT25seU5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5fYWRkZWROb2RlcztcbiAgfVxuXG4gIGdldCBhdHRyaWJ1dGVOYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5leHRTaWJsaW5nKCk6IFJlYWRPbmx5Tm9kZSB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG9sZFZhbHVlKCk6IG1peGVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgcHJldmlvdXNTaWJsaW5nKCk6IFJlYWRPbmx5Tm9kZSB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IHJlbW92ZWROb2RlcygpOiBOb2RlTGlzdDxSZWFkT25seU5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVtb3ZlZE5vZGVzO1xuICB9XG5cbiAgZ2V0IHRhcmdldCgpOiBSZWFjdE5hdGl2ZUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gIH1cblxuICBnZXQgdHlwZSgpOiBNdXRhdGlvblR5cGUge1xuICAgIHJldHVybiAnY2hpbGRMaXN0JztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YXRpb25SZWNvcmQoXG4gIGVudHJ5OiBOYXRpdmVNdXRhdGlvblJlY29yZCxcbik6IE11dGF0aW9uUmVjb3JkIHtcbiAgcmV0dXJuIG5ldyBNdXRhdGlvblJlY29yZChlbnRyeSk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHtSTlRlc3RlclRoZW1lQ29udGV4dH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9STlRlc3RlclRoZW1lJztcbmltcG9ydCBWQ092ZXJsYXkgZnJvbSAnLi9WQ092ZXJsYXlFeGFtcGxlJztcbmltcG9ydCBWQ1RyYWNrZXIgZnJvbSAnLi9WQ1RyYWNrZXJFeGFtcGxlJztcbmltcG9ydCBudWxsdGhyb3dzIGZyb20gJ251bGx0aHJvd3MnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDb250ZXh0LCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEFjdGl2aXR5SW5kaWNhdG9yLFxuICBTY3JvbGxWaWV3LFxuICBTdHlsZVNoZWV0LFxuICBUZXh0LFxuICBWaWV3LFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuaW1wb3J0IFJlYWN0TmF0aXZlRWxlbWVudCBmcm9tICdyZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9kb20vbm9kZXMvUmVhY3ROYXRpdmVFbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnVmlzdWFsIENvbXBsZXRpb24gRXhhbXBsZSc7XG5leHBvcnQgY29uc3QgdGl0bGUgPSBuYW1lO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgJ0V4YW1wbGUgb2YgdXNlIG9mIE11dGF0aW9uT2JzZXJ2ZXIgYW5kIEludGVyc2VjdGlvbk9ic2VydmVyIHRvZ2V0aGVyIHRvIHRyYWNrIHJlbmRlcmluZyBwZXJmb3JtYW5jZS4nO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAvLyBXZSBzaG91bGQgdXNlIHRoZSB0aW1lIG9mIHRoZSB0b3VjaCB1cCBldmVudCB0aGF0IGxlYWQgdG8gdGhpcyBuYXZpZ2F0aW9uLFxuICAvLyBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0IHNldCB1cC5cbiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB2Y1RyYWNrZXIgPSBuZXcgVkNUcmFja2VyKG5hdmlnYXRpb25TdGFydFRpbWUpO1xuICByZXR1cm4gPFZpc3VhbENvbXBsZXRpb25FeGFtcGxlIHZjVHJhY2tlcj17dmNUcmFja2VyfSAvPjtcbn1cblxuLyoqXG4gKiBXZSBhcmUgZ29pbmcgdG8gdHJhY2sgdGhlIHZpc3VhbCBjb21wbGV0aW9uIG9mIHRoaXMgY29tcG9uZW50LCB3aGljaCB1c2VzXG4gKiBzdXNwZW5zZSBhbmQgcmVuZGVycyBhIGNvbXBsZXggdHJlZSBpbiBtdWx0aXBsZSBzdGVwcy5cbiAqL1xuZnVuY3Rpb24gVmlzdWFsQ29tcGxldGlvbkV4YW1wbGUocHJvcHM6IHt2Y1RyYWNrZXI6IFZDVHJhY2tlcn0pOiBSZWFjdC5Ob2RlIHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4gcHJvcHMudmNUcmFja2VyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW3Byb3BzLnZjVHJhY2tlcl0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxWaXN1YWxDb21wbGV0aW9uRXhhbXBsZVNjcmVlbiB2Y1RyYWNrZXI9e3Byb3BzLnZjVHJhY2tlcn0gLz5cbiAgICAgIDxWQ092ZXJsYXkgdmNUcmFja2VyPXtwcm9wcy52Y1RyYWNrZXJ9IC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFZpc3VhbENvbXBsZXRpb25FeGFtcGxlU2NyZWVuKHByb3BzOiB7XG4gIHZjVHJhY2tlcjogVkNUcmFja2VyLFxufSk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCB0aGVtZSA9IHVzZUNvbnRleHQoUk5UZXN0ZXJUaGVtZUNvbnRleHQpO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXdcbiAgICAgIGlkPVwicm9vdC12aWV3XCJcbiAgICAgIHN0eWxlPXtzdHlsZXMucm9vdH1cbiAgICAgIHJlZj17bm9kZSA9PiB7XG4gICAgICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICAgICAgY29uc3QgZWxlbWVudDogUmVhY3ROYXRpdmVFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICBwcm9wcy52Y1RyYWNrZXIuYWRkTXV0YXRpb25Sb290KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9fT5cbiAgICAgIDxWaWV3IGlkPVwiaGVhZGVyXCIgc3R5bGU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfSBpZD1cImhlYWRlci10ZXh0XCI+XG4gICAgICAgICAgVGl0bGVcbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICAgPFZpZXcgaWQ9XCJib2R5XCIgc3R5bGU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgPFJlYWN0LlN1c3BlbnNlXG4gICAgICAgICAgZmFsbGJhY2s9e1xuICAgICAgICAgICAgPFZpZXcgaWQ9XCJmYWxsYmFja1wiPlxuICAgICAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgLz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICB9PlxuICAgICAgICAgIDxGb3JjZVN1c3BlbnNlIHF1ZXJ5SUQ9e2dlbmVyYXRlUXVlcnlJRCgpfSBkZWxheT17NTAwfT5cbiAgICAgICAgICAgIDxWaWV3IGlkPVwic2Nyb2xsLXZpZXctcm9vdFwiPlxuICAgICAgICAgICAgICA8U2Nyb2xsVmlldyBpZD1cInNjcm9sbC12aWV3XCI+XG4gICAgICAgICAgICAgICAgPFJlYWN0LlN1c3BlbnNlIGZhbGxiYWNrPXs8QWN0aXZpdHlJbmRpY2F0b3IgLz59PlxuICAgICAgICAgICAgICAgICAgPEZvcmNlU3VzcGVuc2UgcXVlcnlJRD17Z2VuZXJhdGVRdWVyeUlEKCl9IGRlbGF5PXsyNTAwfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5oZWFkaW5nLCB7Y29sb3I6IHRoZW1lLkxhYmVsQ29sb3J9XX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInNjcm9sbC12aWV3LWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICBIZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvRm9yY2VTdXNwZW5zZT5cbiAgICAgICAgICAgICAgICA8L1JlYWN0LlN1c3BlbnNlPlxuICAgICAgICAgICAgICAgIDxSZWFjdC5TdXNwZW5zZSBmYWxsYmFjaz17PEFjdGl2aXR5SW5kaWNhdG9yIC8+fT5cbiAgICAgICAgICAgICAgICAgIDxGb3JjZVN1c3BlbnNlIHF1ZXJ5SUQ9e2dlbmVyYXRlUXVlcnlJRCgpfSBkZWxheT17NDUwMH0+XG4gICAgICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYm9keUNvbnRlbnR9IGlkPVwic2Nyb2xsLXZpZXctY29udGVudFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZvcmNlU3VzcGVuc2U+XG4gICAgICAgICAgICAgICAgPC9SZWFjdC5TdXNwZW5zZT5cbiAgICAgICAgICAgICAgICA8VGV4dCBpZD1cInNjcm9sbC12aWV3LXRleHRcIiBzdHlsZT17e2NvbG9yOiB0aGVtZS5MYWJlbENvbG9yfX0+XG4gICAgICAgICAgICAgICAgICB7TE9OR19URVhUfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvRm9yY2VTdXNwZW5zZT5cbiAgICAgICAgPC9SZWFjdC5TdXNwZW5zZT5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IGlkPVwiZm9vdGVyXCIgc3R5bGU9e3N0eWxlcy5mb290ZXJ9PlxuICAgICAgICA8VGV4dCBpZD1cImZvb3Rlci10ZXh0XCI+RXhhbXBsZSBjb3B5cmlnaHQgZm9vdGVyPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9yY2VTdXNwZW5zZShwcm9wczoge1xuICBxdWVyeUlEOiBzdHJpbmcsXG4gIGRlbGF5OiBudW1iZXIsXG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlLFxufSk6IFJlYWN0Lk5vZGUge1xuICB1c2VGb3JjZVN1c3BlbnNlKHByb3BzLnF1ZXJ5SUQsIHByb3BzLmRlbGF5KTtcbiAgcmV0dXJuIHByb3BzLmNoaWxkcmVuO1xufVxuXG5sZXQgbGFzdFF1ZXJ5SUQgPSAwO1xuZnVuY3Rpb24gZ2VuZXJhdGVRdWVyeUlEKCkge1xuICBsYXN0UXVlcnlJRCsrO1xuICByZXR1cm4gJ3F1ZXJ5LWlkLScgKyBsYXN0UXVlcnlJRDtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb290OiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgaGVhZGVyOiB7XG4gICAgcGFkZGluZzogMTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JheScsXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250U2l6ZTogMjAsXG4gIH0sXG4gIGJvZHk6IHtcbiAgICBmbGV4OiAxLFxuICAgIHBhZGRpbmc6IDEwLFxuICB9LFxuICBoZWFkaW5nOiB7XG4gICAgZm9udFNpemU6IDE2LFxuICB9LFxuICBib2R5Q29udGVudDoge1xuICAgIHdpZHRoOiAxMDAsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmx1ZScsXG4gICAgbWFyZ2luOiA1MCxcbiAgfSxcbiAgZm9vdGVyOiB7XG4gICAgcGFkZGluZzogMTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JheScsXG4gIH0sXG59KTtcblxuY29uc3Qgc3RvcmU6IE1hcDxzdHJpbmcsIHtwcm9taXNlOiBQcm9taXNlPHZvaWQ+LCByZXNvbHZlZDogYm9vbGVhbn0+ID1cbiAgbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiB1c2VGb3JjZVN1c3BlbnNlKHF1ZXJ5SUQ6IHN0cmluZywgZGVsYXk6IG51bWJlcik6IHZvaWQge1xuICBsZXQgZW50cnkgPSBzdG9yZS5nZXQocXVlcnlJRCk7XG4gIGlmICghZW50cnkpIHtcbiAgICBlbnRyeSA9IHtcbiAgICAgIHJlc29sdmVkOiBmYWxzZSxcbiAgICAgIHByb21pc2U6IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBudWxsdGhyb3dzKGVudHJ5KS5yZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICB9KSxcbiAgICB9O1xuICAgIHN0b3JlLnNldChxdWVyeUlELCBlbnRyeSk7XG4gIH1cblxuICBpZiAoIWVudHJ5LnJlc29sdmVkKSB7XG4gICAgdGhyb3cgZW50cnkucHJvbWlzZTtcbiAgfVxufVxuXG5jb25zdCBMT05HX1RFWFQgPVxuICAnTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gTWFlY2VuYXMgZmFjaWxpc2lzIGZldWdpYXQgaXBzdW0sIG5vbiBwbGFjZXJhdCBudWxsYS4gVmVzdGlidWx1bSB0aW5jaWR1bnQgZXUgZHVpIHV0IGJpYmVuZHVtLiBDcmFzIHJpc3VzIGV4LCByaG9uY3VzIGF1Y3RvciB2ZWxpdCB1dCwgbG9ib3J0aXMgY29udmFsbGlzIHR1cnBpcy4gRG9uZWMgcnV0cnVtIGltcGVyZGlldCBhbnRlLCB2aXRhZSBhY2N1bXNhbiB2ZWxpdCBjb252YWxsaXMgbm9uLiBTdXNwZW5kaXNzZSBmZXVnaWF0IGVnZXN0YXMgbGVjdHVzLiBJbiBlZ2V0IGZyaW5naWxsYSBsaWd1bGEsIGF0IHZlaGljdWxhIG9yY2kuIENyYXMgbGFvcmVldCBoZW5kcmVyaXQgdXJuYSwgc2VkIHRpbmNpZHVudCBkb2xvciBjb25zZWN0ZXR1ciBkYXBpYnVzLlxcbicucmVwZWF0KFxuICAgIDEwLFxuICApO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIFZDVHJhY2tlciwge1Zpc3VhbEVsZW1lbnR9IGZyb20gJy4vVkNUcmFja2VyRXhhbXBsZSc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtEaW1lbnNpb25zLCBTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBPVkVSTEFZX1NDQUxFID0gMC4yNTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVkNPdmVybGF5RXhhbXBsZShwcm9wczoge1xuICB2Y1RyYWNrZXI6IFZDVHJhY2tlcixcbn0pOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgW3Zpc3VhbEVsZW1lbnRzLCBzZXRWaXN1YWxFbGVtZW50c10gPSB1c2VTdGF0ZTxcbiAgICAkUmVhZE9ubHlBcnJheTxWaXN1YWxFbGVtZW50PixcbiAgPihbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRWaXN1YWxFbGVtZW50cyhwcm9wcy52Y1RyYWNrZXIuZ2V0VmlzdWFsRWxlbWVudHMoKSk7XG4gICAgcHJvcHMudmNUcmFja2VyLm9uVXBkYXRlVmlzdWFsRWxlbWVudHMoZWxlbWVudHMgPT4ge1xuICAgICAgc2V0VmlzdWFsRWxlbWVudHMoZWxlbWVudHMpO1xuICAgIH0pO1xuICB9LCBbcHJvcHMudmNUcmFja2VyXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLm92ZXJsYXl9PlxuICAgICAge3Zpc3VhbEVsZW1lbnRzLm1hcCgodmlzdWFsRWxlbWVudCwgaW5kZXgpID0+IChcbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheUVsZW1lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRvcDogdmlzdWFsRWxlbWVudC5yZWN0LnRvcCAqIE9WRVJMQVlfU0NBTEUsXG4gICAgICAgICAgICAgIGxlZnQ6IHZpc3VhbEVsZW1lbnQucmVjdC5sZWZ0ICogT1ZFUkxBWV9TQ0FMRSxcbiAgICAgICAgICAgICAgd2lkdGg6IHZpc3VhbEVsZW1lbnQucmVjdC53aWR0aCAqIE9WRVJMQVlfU0NBTEUsXG4gICAgICAgICAgICAgIGhlaWdodDogdmlzdWFsRWxlbWVudC5yZWN0LmhlaWdodCAqIE9WRVJMQVlfU0NBTEUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF19XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgb3ZlcmxheToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGJvdHRvbTogNjAsXG4gICAgcmlnaHQ6IDEwLFxuICAgIHdpZHRoOiBPVkVSTEFZX1NDQUxFICogRGltZW5zaW9ucy5nZXQoJ3dpbmRvdycpLndpZHRoLFxuICAgIGhlaWdodDogT1ZFUkxBWV9TQ0FMRSAqIERpbWVuc2lvbnMuZ2V0KCd3aW5kb3cnKS5oZWlnaHQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JheScsXG4gICAgb3BhY2l0eTogMC45LFxuICB9LFxuICBvdmVybGF5RWxlbWVudDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnYmxhY2snLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUgRE9NUmVjdFJlYWRPbmx5IGZyb20gJ3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9nZW9tZXRyeS9ET01SZWN0UmVhZE9ubHknO1xuaW1wb3J0IHR5cGUgUmVhZE9ubHlOb2RlIGZyb20gJ3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFkT25seU5vZGUnO1xuXG5pbXBvcnQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9JbnRlcnNlY3Rpb25PYnNlcnZlci9JbnRlcnNlY3Rpb25PYnNlcnZlcic7XG5pbXBvcnQgTXV0YXRpb25PYnNlcnZlciBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL011dGF0aW9uT2JzZXJ2ZXIvTXV0YXRpb25PYnNlcnZlcic7XG5pbXBvcnQgUmVhY3ROYXRpdmVFbGVtZW50IGZyb20gJ3JlYWN0LW5hdGl2ZS9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFjdE5hdGl2ZUVsZW1lbnQnO1xuXG5leHBvcnQgdHlwZSBWaXN1YWxFbGVtZW50ID0ge1xuICB0aW1lOiBudW1iZXIsXG4gIHJlY3Q6IERPTVJlY3RSZWFkT25seSxcbn07XG5cbmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPik6IHZvaWQge1xuICBjb25zb2xlLmRlYnVnKCdWQ1RyYWNrZXJFeGFtcGxlJywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZDVHJhY2tlciB7XG4gIF9uYXZpZ2F0aW9uU3RhcnRUaW1lOiBudW1iZXI7XG4gIF9pbnRlcnNlY3Rpb25PYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIF9tdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBfcmVnaXN0ZXJlZENhbGxiYWNrOiAoJFJlYWRPbmx5QXJyYXk8VmlzdWFsRWxlbWVudD4pID0+IHZvaWQ7XG4gIF92aXN1YWxFbGVtZW50czogTWFwPFJlYWRPbmx5Tm9kZSwgVmlzdWFsRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIF9wZW5kaW5nTXV0YXRpb25zOiBXZWFrU2V0PFJlYWRPbmx5Tm9kZT4gPSBuZXcgV2Vha1NldCgpO1xuXG4gIGNvbnN0cnVjdG9yKG5hdmlnYXRpb25TdGFydFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX25hdmlnYXRpb25TdGFydFRpbWUgPSBuYXZpZ2F0aW9uU3RhcnRUaW1lO1xuXG4gICAgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBydW4gYmVmb3JlIHBhaW50aW5nIFJvb3RWaWV3IGluIG5hdGl2ZS5cbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuICAgICAgICAvLyBUaGlzIHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgbW91bnQvcGFpbnQuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nTXV0YXRpb25zLmhhcyhlbnRyeS50YXJnZXQpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RlclZpc3VhbEVsZW1lbnQoZW50cnkudGFyZ2V0LCB7XG4gICAgICAgICAgICAgIHRpbWU6IGVudHJ5LnRpbWUsXG4gICAgICAgICAgICAgIHJlY3Q6IGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ011dGF0aW9ucy5kZWxldGUoZW50cnkudGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShlbnRyeS50YXJnZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5fbXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuICAgICAgLy8gVGhpcyB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGxheW91dCBlZmZlY3RzLCBhbmQgYmVmb3JlIG1vdW50L3BhaW50LlxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS5hZGRlZE5vZGVzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBhZGRlZE5vZGUgb2YgZW50cnkuYWRkZWROb2Rlcykge1xuICAgICAgICAgICAgLy8gVG8gbWVhc3VyZSBwYWludCB0aW1lIGZvciBhZGRlZCBub2Rlc1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ011dGF0aW9ucy5hZGQoYWRkZWROb2RlKTtcbiAgICAgICAgICAgIGlmIChhZGRlZE5vZGUgaW5zdGFuY2VvZiBSZWFjdE5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShhZGRlZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlbW92ZWROb2RlIG9mIGVudHJ5LnJlbW92ZWROb2Rlcykge1xuICAgICAgICAgICAgLy8gVG8gbWVhc3VyZSBwYWludCB0aW1lIGZvciBhZGRlZCBub2Rlc1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ011dGF0aW9ucy5kZWxldGUocmVtb3ZlZE5vZGUpO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWROb2RlIGluc3RhbmNlb2YgUmVhY3ROYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMuX3VucmVnaXN0ZXJWaXN1YWxFbGVtZW50KHJlbW92ZWROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF9yZWdpc3RlclZpc3VhbEVsZW1lbnQoXG4gICAgdGFyZ2V0OiBSZWFkT25seU5vZGUsXG4gICAgdmlzdWFsRWxlbWVudDogVmlzdWFsRWxlbWVudCxcbiAgKTogdm9pZCB7XG4gICAgZGVidWcoXG4gICAgICAncmVnaXN0ZXJWaXN1YWxFbGVtZW50JyxcbiAgICAgICh0YXJnZXQgaW5zdGFuY2VvZiBSZWFjdE5hdGl2ZUVsZW1lbnQgJiYgdGFyZ2V0LmlkKSB8fFxuICAgICAgICAnPHRhcmdldC13aXRob3V0LWlkPicsXG4gICAgICAnLiBQYWludGVkIGluJyxcbiAgICAgICh2aXN1YWxFbGVtZW50LnRpbWUgLSB0aGlzLl9uYXZpZ2F0aW9uU3RhcnRUaW1lKS50b0ZpeGVkKDIpLFxuICAgICAgJ21zIChhdCAnLFxuICAgICAgdmlzdWFsRWxlbWVudC50aW1lLFxuICAgICAgJyksIHJlY3Q6JyxcbiAgICAgIHZpc3VhbEVsZW1lbnQucmVjdC50b0pTT04oKSxcbiAgICApO1xuXG4gICAgdGhpcy5fdmlzdWFsRWxlbWVudHMuc2V0KHRhcmdldCwgdmlzdWFsRWxlbWVudCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZENhbGxiYWNrPy4oWy4uLnRoaXMuX3Zpc3VhbEVsZW1lbnRzLnZhbHVlcygpXSk7XG4gIH1cblxuICBfdW5yZWdpc3RlclZpc3VhbEVsZW1lbnQodGFyZ2V0OiBSZWFkT25seU5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLl92aXN1YWxFbGVtZW50cy5kZWxldGUodGFyZ2V0KTtcbiAgICB0aGlzLl9yZWdpc3RlcmVkQ2FsbGJhY2s/LihbLi4udGhpcy5fdmlzdWFsRWxlbWVudHMudmFsdWVzKCldKTtcbiAgfVxuXG4gIG9uVXBkYXRlVmlzdWFsRWxlbWVudHMoXG4gICAgY2FsbGJhY2s6ICgkUmVhZE9ubHlBcnJheTxWaXN1YWxFbGVtZW50PikgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZENhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBhZGRNdXRhdGlvblJvb3Qocm9vdE5vZGU6IFJlYWN0TmF0aXZlRWxlbWVudCk6IHZvaWQge1xuICAgIGRlYnVnKCdhZGRNdXRhdGlvblJvb3QnLCByb290Tm9kZS5pZCk7XG4gICAgLy8gVG8gb2JzZXJ2ZSBuZXcgbm9kZXMgYWRkZWQuXG4gICAgdGhpcy5fbXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHJvb3ROb2RlLCB7XG4gICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuX3BlbmRpbmdNdXRhdGlvbnMuYWRkKHJvb3ROb2RlKTtcblxuICAgIC8vIFRvIG1lYXN1cmUgaW5pdGlhbCBwYWludC5cbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHJvb3ROb2RlKTtcbiAgfVxuXG4gIGdldFZpc3VhbEVsZW1lbnRzKCk6ICRSZWFkT25seUFycmF5PFZpc3VhbEVsZW1lbnQ+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3Zpc3VhbEVsZW1lbnRzLnZhbHVlcygpXTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5fbXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuLy8gZmxvd2xpbnQgdW5zYWZlLWdldHRlcnMtc2V0dGVyczpvZmZcblxuaW1wb3J0IHR5cGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSBmcm9tICcuL0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnknO1xuaW1wb3J0IHR5cGUge0ludGVyc2VjdGlvbk9ic2VydmVySWR9IGZyb20gJy4vSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYW5hZ2VyJztcblxuaW1wb3J0IFJlYWN0TmF0aXZlRWxlbWVudCBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFjdE5hdGl2ZUVsZW1lbnQnO1xuaW1wb3J0ICogYXMgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYW5hZ2VyIGZyb20gJy4vSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYW5hZ2VyJztcblxuZXhwb3J0IHR5cGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChcbiAgZW50cmllczogQXJyYXk8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeT4sXG4gIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlcixcbikgPT4gbWl4ZWQ7XG5cbnR5cGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICAvLyByb290PzogUmVhY3ROYXRpdmVFbGVtZW50LCAvLyBUaGlzIG9wdGlvbiBleGlzdHMgb24gdGhlIFdlYiBidXQgaXQncyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBSZWFjdCBOYXRpdmUuXG4gIC8vIHJvb3RNYXJnaW4/OiBzdHJpbmcsIC8vIFRoaXMgb3B0aW9uIGV4aXN0cyBvbiB0aGUgV2ViIGJ1dCBpdCdzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIFJlYWN0IE5hdGl2ZS5cbiAgdGhyZXNob2xkPzogbnVtYmVyIHwgJFJlYWRPbmx5QXJyYXk8bnVtYmVyPixcbn07XG5cbi8qKlxuICogVGhlIFtJbnRlcnNlY3Rpb24gT2JzZXJ2ZXIgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSW50ZXJzZWN0aW9uX09ic2VydmVyX0FQSSlcbiAqIHByb3ZpZGVzIGEgd2F5IHRvIGFzeW5jaHJvbm91c2x5IG9ic2VydmUgY2hhbmdlcyBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIGFcbiAqIHRhcmdldCBlbGVtZW50IHdpdGggYW4gYW5jZXN0b3IgZWxlbWVudCBvciB3aXRoIGEgdG9wLWxldmVsIGRvY3VtZW50J3NcbiAqIHZpZXdwb3J0LlxuICpcbiAqIFRoZSBhbmNlc3RvciBlbGVtZW50IG9yIHZpZXdwb3J0IGlzIHJlZmVycmVkIHRvIGFzIHRoZSByb290LlxuICpcbiAqIFdoZW4gYW4gYEludGVyc2VjdGlvbk9ic2VydmVyYCBpcyBjcmVhdGVkLCBpdCdzIGNvbmZpZ3VyZWQgdG8gd2F0Y2ggZm9yIGdpdmVuXG4gKiByYXRpb3Mgb2YgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIHJvb3QuXG4gKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gY2Fubm90IGJlIGNoYW5nZWQgb25jZSB0aGUgYEludGVyc2VjdGlvbk9ic2VydmVyYCBpc1xuICogY3JlYXRlZCwgc28gYSBnaXZlbiBvYnNlcnZlciBvYmplY3QgaXMgb25seSB1c2VmdWwgZm9yIHdhdGNoaW5nIGZvciBzcGVjaWZpY1xuICogY2hhbmdlcyBpbiBkZWdyZWUgb2YgdmlzaWJpbGl0eTsgaG93ZXZlciwgeW91IGNhbiB3YXRjaCBtdWx0aXBsZSB0YXJnZXRcbiAqIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHRoZSBgdGhyZXNob2xkYCBvcHRpb24gYXQgdGhlIG1vbWVudFxuICogKGByb290YCBhbmQgYHJvb3RNYXJnaW5gIGFyZSBub3Qgc3VwcG9ydGVkKS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIge1xuICBfY2FsbGJhY2s6IEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2s7XG4gIF90aHJlc2hvbGRzOiAkUmVhZE9ubHlBcnJheTxudW1iZXI+O1xuICBfb2JzZXJ2YXRpb25UYXJnZXRzOiBTZXQ8UmVhY3ROYXRpdmVFbGVtZW50PiA9IG5ldyBTZXQoKTtcbiAgX2ludGVyc2VjdGlvbk9ic2VydmVySWQ6ID9JbnRlcnNlY3Rpb25PYnNlcnZlcklkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLFxuICAgIG9wdGlvbnM/OiBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQsXG4gICk6IHZvaWQge1xuICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ludGVyc2VjdGlvbk9ic2VydmVyJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ludGVyc2VjdGlvbk9ic2VydmVyJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW3Byb3AtbWlzc2luZ10gaXQncyBub3QgdHlwZWQgaW4gUmVhY3QgTmF0aXZlIGJ1dCBleGlzdHMgb24gV2ViLlxuICAgIGlmIChvcHRpb25zPy5yb290ICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInOiByb290IGlzIG5vdCBzdXBwb3J0ZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yW3Byb3AtbWlzc2luZ10gaXQncyBub3QgdHlwZWQgaW4gUmVhY3QgTmF0aXZlIGJ1dCBleGlzdHMgb24gV2ViLlxuICAgIGlmIChvcHRpb25zPy5yb290TWFyZ2luICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInOiByb290TWFyZ2luIGlzIG5vdCBzdXBwb3J0ZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aHJlc2hvbGRzID0gbm9ybWFsaXplVGhyZXNob2xkcyhvcHRpb25zPy50aHJlc2hvbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBgUmVhY3ROYXRpdmVFbGVtZW50YCB3aG9zZSBib3VuZHMgYXJlIHVzZWQgYXMgdGhlIGJvdW5kaW5nIGJveCB3aGVuXG4gICAqIHRlc3RpbmcgZm9yIGludGVyc2VjdGlvbi5cbiAgICogSWYgbm8gYHJvb3RgIHZhbHVlIHdhcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9yIGl0cyB2YWx1ZSBpcyBgbnVsbGAsXG4gICAqIHRoZSByb290IHZpZXcgaXMgdXNlZC5cbiAgICpcbiAgICogTk9URTogVGhpcyBjYW5ub3QgY3VycmVudGx5IGJlIGNvbmZpZ3VyZWQgYW5kIGByb290YCBpcyBhbHdheXMgYG51bGxgLlxuICAgKi9cbiAgZ2V0IHJvb3QoKTogUmVhY3ROYXRpdmVFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU3RyaW5nIHdpdGggc3ludGF4IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgQ1NTIGBtYXJnaW5gIHByb3BlcnR5LlxuICAgKiBFYWNoIHNpZGUgb2YgdGhlIHJlY3RhbmdsZSByZXByZXNlbnRlZCBieSBgcm9vdE1hcmdpbmAgaXMgYWRkZWQgdG8gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgc2lkZSBpbiB0aGUgcm9vdCBlbGVtZW50J3MgYm91bmRpbmcgYm94IGJlZm9yZSB0aGVcbiAgICogaW50ZXJzZWN0aW9uIHRlc3QgaXMgcGVyZm9ybWVkLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIGNhbm5vdCBjdXJyZW50bHkgYmUgY29uZmlndXJlZCBhbmQgYHJvb3RNYXJnaW5gIGlzIGFsd2F5c1xuICAgKiBgbnVsbGAuXG4gICAqL1xuICBnZXQgcm9vdE1hcmdpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnMHB4IDBweCAwcHggMHB4JztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGhyZXNob2xkcywgc29ydGVkIGluIGluY3JlYXNpbmcgbnVtZXJpYyBvcmRlciwgd2hlcmUgZWFjaFxuICAgKiB0aHJlc2hvbGQgaXMgYSByYXRpbyBvZiBpbnRlcnNlY3Rpb24gYXJlYSB0byBib3VuZGluZyBib3ggYXJlYSBvZiBhblxuICAgKiBvYnNlcnZlZCB0YXJnZXQuXG4gICAqIE5vdGlmaWNhdGlvbnMgZm9yIGEgdGFyZ2V0IGFyZSBnZW5lcmF0ZWQgd2hlbiBhbnkgb2YgdGhlIHRocmVzaG9sZHMgYXJlXG4gICAqIGNyb3NzZWQgZm9yIHRoYXQgdGFyZ2V0LlxuICAgKiBJZiBubyB2YWx1ZSB3YXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciwgYDBgIGlzIHVzZWQuXG4gICAqL1xuICBnZXQgdGhyZXNob2xkcygpOiAkUmVhZE9ubHlBcnJheTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIHNldCBvZiB0YXJnZXQgZWxlbWVudHMgYmVpbmcgd2F0Y2hlZCBieSB0aGVcbiAgICogYEludGVyc2VjdGlvbk9ic2VydmVyYC5cbiAgICogT25lIG9ic2VydmVyIGhhcyBvbmUgc2V0IG9mIHRocmVzaG9sZHMgYW5kIG9uZSByb290LCBidXQgY2FuIHdhdGNoIG11bHRpcGxlXG4gICAqIHRhcmdldCBlbGVtZW50cyBmb3IgdmlzaWJpbGl0eSBjaGFuZ2VzLlxuICAgKiBUbyBzdG9wIG9ic2VydmluZyB0aGUgZWxlbWVudCwgY2FsbCBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIudW5vYnNlcnZlKClgLlxuICAgKi9cbiAgb2JzZXJ2ZSh0YXJnZXQ6IFJlYWN0TmF0aXZlRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIFJlYWN0TmF0aXZlRWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdJbnRlcnNlY3Rpb25PYnNlcnZlcic6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdSZWFjdE5hdGl2ZUVsZW1lbnQnLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLmhhcyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYW5hZ2VyLm9ic2VydmUoe1xuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZDogdGhpcy5fZ2V0T3JDcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcklkKCksXG4gICAgICB0YXJnZXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMuYWRkKHRhcmdldCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zdHJ1Y3RzIHRoZSBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJgIHRvIHN0b3Agb2JzZXJ2aW5nIHRoZSBzcGVjaWZpZWQgdGFyZ2V0XG4gICAqIGVsZW1lbnQuXG4gICAqL1xuICB1bm9ic2VydmUodGFyZ2V0OiBSZWFjdE5hdGl2ZUVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBSZWFjdE5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICd1bm9ic2VydmUnIG9uICdJbnRlcnNlY3Rpb25PYnNlcnZlcic6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdSZWFjdE5hdGl2ZUVsZW1lbnQnLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5oYXModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVySWQgPSB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcklkO1xuICAgIGlmIChpbnRlcnNlY3Rpb25PYnNlcnZlcklkID09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdW5leHBlY3RlZCBpZiB0aGUgdGFyZ2V0IGlzIGluIGBfb2JzZXJ2YXRpb25UYXJnZXRzYC5cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiVW5leHBlY3RlZCBzdGF0ZSBpbiAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInOiBjb3VsZCBub3QgZmluZCBvYnNlcnZlciBJRCB0byB1bm9ic2VydmUgdGFyZ2V0LlwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBJbnRlcnNlY3Rpb25PYnNlcnZlck1hbmFnZXIudW5vYnNlcnZlKGludGVyc2VjdGlvbk9ic2VydmVySWQsIHRhcmdldCk7XG4gICAgdGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLmRlbGV0ZSh0YXJnZXQpO1xuXG4gICAgaWYgKHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5zaXplID09PSAwKSB7XG4gICAgICBJbnRlcnNlY3Rpb25PYnNlcnZlck1hbmFnZXIudW5yZWdpc3Rlck9ic2VydmVyKGludGVyc2VjdGlvbk9ic2VydmVySWQpO1xuICAgICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHdhdGNoaW5nIGFsbCBvZiBpdHMgdGFyZ2V0IGVsZW1lbnRzIGZvciB2aXNpYmlsaXR5IGNoYW5nZXMuXG4gICAqL1xuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5rZXlzKCkpIHtcbiAgICAgIHRoaXMudW5vYnNlcnZlKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgX2dldE9yQ3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCgpOiBJbnRlcnNlY3Rpb25PYnNlcnZlcklkIHtcbiAgICBsZXQgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCA9IHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVySWQ7XG4gICAgaWYgKGludGVyc2VjdGlvbk9ic2VydmVySWQgPT0gbnVsbCkge1xuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCA9IEludGVyc2VjdGlvbk9ic2VydmVyTWFuYWdlci5yZWdpc3Rlck9ic2VydmVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLl9jYWxsYmFjayxcbiAgICAgICk7XG4gICAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcklkID0gaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZDtcbiAgICB9XG4gICAgcmV0dXJuIGludGVyc2VjdGlvbk9ic2VydmVySWQ7XG4gIH1cblxuICAvLyBPbmx5IGZvciB0ZXN0c1xuICBfX2dldE9ic2VydmVySUQoKTogP0ludGVyc2VjdGlvbk9ic2VydmVySWQge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcklkO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIHVzZXIgZGVmaW5lZCBgdGhyZXNob2xkYCB2YWx1ZSBpbnRvIGFuIGFycmF5IG9mIHNvcnRlZCB2YWxpZFxuICogdGhyZXNob2xkIG9wdGlvbnMgZm9yIGBJbnRlcnNlY3Rpb25PYnNlcnZlcmAgKGRvdWJsZSDiiIggWzAsIDFdKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogbm9ybWFsaXplVGhyZXNob2xkcygwLjUpOyAgICAgICAgICAgICAgICAvLyDihpIgWzAuNV1cbiAqIG5vcm1hbGl6ZVRocmVzaG9sZHMoWzEsIDAuNSwgMF0pOyAgICAgICAgLy8g4oaSIFswLCAwLjUsIDFdXG4gKiBub3JtYWxpemVUaHJlc2hvbGRzKFsnMScsICcwLjUnLCAnMCddKTsgIC8vIOKGkiBbMCwgMC41LCAxXVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVUaHJlc2hvbGRzKHRocmVzaG9sZDogbWl4ZWQpOiAkUmVhZE9ubHlBcnJheTxudW1iZXI+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodGhyZXNob2xkKSkge1xuICAgIGlmICh0aHJlc2hvbGQubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRocmVzaG9sZC5tYXAobm9ybWFsaXplVGhyZXNob2xkVmFsdWUpLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFswXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW25vcm1hbGl6ZVRocmVzaG9sZFZhbHVlKHRocmVzaG9sZCldO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVUaHJlc2hvbGRWYWx1ZSh0aHJlc2hvbGQ6IG1peGVkKTogbnVtYmVyIHtcbiAgaWYgKHRocmVzaG9sZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCB0aHJlc2hvbGRBc051bWJlciA9IE51bWJlcih0aHJlc2hvbGQpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aHJlc2hvbGRBc051bWJlcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJGYWlsZWQgdG8gcmVhZCB0aGUgJ3RocmVzaG9sZCcgcHJvcGVydHkgZnJvbSAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0JzogVGhlIHByb3ZpZGVkIGRvdWJsZSB2YWx1ZSBpcyBub24tZmluaXRlLlwiLFxuICAgICk7XG4gIH1cblxuICBpZiAodGhyZXNob2xkQXNOdW1iZXIgPCAwIHx8IHRocmVzaG9sZEFzTnVtYmVyID4gMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgXCJGYWlsZWQgdG8gY29uc3RydWN0ICdJbnRlcnNlY3Rpb25PYnNlcnZlcic6IFRocmVzaG9sZCB2YWx1ZXMgbXVzdCBiZSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMVwiLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdGhyZXNob2xkQXNOdW1iZXI7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIFJlYWN0IE5hdGl2ZSByZW5kZXJlclxuICogYW5kIGFsbCB0aGUgaW50ZXJzZWN0aW9uIG9ic2VydmVycyB0aGF0IGFyZSBjdXJyZW50bHkgb2JzZXJ2aW5nIGFueSB0YXJnZXRzLlxuICpcbiAqIEluIG9yZGVyIHRvIHJlZHVjZSB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIG5hdGl2ZSBhbmQgSmF2YVNjcmlwdCxcbiAqIHdlIHJlZ2lzdGVyIGEgc2luZ2xlIG5vdGljYXRpb24gY2FsbGJhY2sgaW4gbmF0aXZlLCBhbmQgdGhlbiB3ZSBoYW5kbGUgaG93XG4gKiB0byBub3RpZnkgZWFjaCBlbnRyeSB0byB0aGUgcmlnaHQgaW50ZXJzZWN0aW9uIG9ic2VydmVyIHdoZW4gd2UgcmVjZWl2ZSBhbGxcbiAqIHRoZSBub3RpZmljYXRpb25zIHRvZ2V0aGVyLlxuICovXG5cbmltcG9ydCB0eXBlIFJlYWN0TmF0aXZlRWxlbWVudCBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFjdE5hdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHR5cGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsIHtcbiAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayxcbn0gZnJvbSAnLi9JbnRlcnNlY3Rpb25PYnNlcnZlcic7XG5pbXBvcnQgdHlwZSBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5IGZyb20gJy4vSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSc7XG5cbmltcG9ydCB7XG4gIGdldEluc3RhbmNlSGFuZGxlLFxuICBnZXRTaGFkb3dOb2RlLFxufSBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFkT25seU5vZGUnO1xuaW1wb3J0ICogYXMgU3lzdHJhY2UgZnJvbSAnLi4vUGVyZm9ybWFuY2UvU3lzdHJhY2UnO1xuaW1wb3J0IHdhcm5PbmNlIGZyb20gJy4uL1V0aWxpdGllcy93YXJuT25jZSc7XG5pbXBvcnQge2NyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyRW50cnl9IGZyb20gJy4vSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSc7XG5pbXBvcnQgTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgZnJvbSAnLi9OYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlcic7XG5cbmV4cG9ydCB0eXBlIEludGVyc2VjdGlvbk9ic2VydmVySWQgPSBudW1iZXI7XG5cbmxldCBuZXh0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZDogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCA9IDE7XG5sZXQgaXNDb25uZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuY29uc3QgcmVnaXN0ZXJlZEludGVyc2VjdGlvbk9ic2VydmVyczogTWFwPFxuICBJbnRlcnNlY3Rpb25PYnNlcnZlcklkLFxuICB7b2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyLCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFja30sXG4+ID0gbmV3IE1hcCgpO1xuXG4vLyBXZSBuZWVkIHRvIGtlZXAgdGhlIG1hcHBpbmcgZnJvbSBpbnN0YW5jZSBoYW5kbGVzIHRvIHRhcmdldHMgYmVjYXVzZSB3aGVuXG4vLyB0YXJnZXRzIGFyZSBkZXRhY2hlZCAodGhlaXIgY29tcG9uZW50cyBhcmUgdW5tb3VudGVkKSwgUmVhY3QgcmVzZXRzIHRoZVxuLy8gaW5zdGFuY2UgaGFuZGxlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGFuZCBpdCBjdXRzIHRoZSBjb25uZWN0aW9uIGJldHdlZW5cbi8vIHRoZSBpbnN0YW5jZSBoYW5kbGUgYW5kIHRoZSB0YXJnZXQuXG5jb25zdCBpbnN0YW5jZUhhbmRsZVRvVGFyZ2V0TWFwOiBXZWFrTWFwPGludGVyZmFjZSB7fSwgUmVhY3ROYXRpdmVFbGVtZW50PiA9XG4gIG5ldyBXZWFrTWFwKCk7XG5cbmZ1bmN0aW9uIGdldFRhcmdldEZyb21JbnN0YW5jZUhhbmRsZShcbiAgaW5zdGFuY2VIYW5kbGU6IG1peGVkLFxuKTogP1JlYWN0TmF0aXZlRWxlbWVudCB7XG4gIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtdHlwZV0gaW5zdGFuY2VIYW5kbGUgaXMgdHlwZWQgYXMgbWl4ZWQgYnV0IHdlIGtub3cgaXQncyBhbiBvYmplY3QgYW5kIHdlIG5lZWQgaXQgdG8gYmUgdG8gdXNlIGl0IGFzIGEga2V5IGluIGEgV2Vha01hcC5cbiAgY29uc3Qga2V5OiBpbnRlcmZhY2Uge30gPSBpbnN0YW5jZUhhbmRsZTtcbiAgcmV0dXJuIGluc3RhbmNlSGFuZGxlVG9UYXJnZXRNYXAuZ2V0KGtleSk7XG59XG5cbmZ1bmN0aW9uIHNldFRhcmdldEZvckluc3RhbmNlSGFuZGxlKFxuICBpbnN0YW5jZUhhbmRsZTogbWl4ZWQsXG4gIHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50LFxuKTogdm9pZCB7XG4gIC8vICRGbG93RXhwZWN0ZWRFcnJvcltpbmNvbXBhdGlibGUtdHlwZV0gaW5zdGFuY2VIYW5kbGUgaXMgdHlwZWQgYXMgbWl4ZWQgYnV0IHdlIGtub3cgaXQncyBhbiBvYmplY3QgYW5kIHdlIG5lZWQgaXQgdG8gYmUgdG8gdXNlIGl0IGFzIGEga2V5IGluIGEgV2Vha01hcC5cbiAgY29uc3Qga2V5OiBpbnRlcmZhY2Uge30gPSBpbnN0YW5jZUhhbmRsZTtcbiAgaW5zdGFuY2VIYW5kbGVUb1RhcmdldE1hcC5zZXQoa2V5LCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiB1bnNldFRhcmdldEZvckluc3RhbmNlSGFuZGxlKGluc3RhbmNlSGFuZGxlOiBtaXhlZCk6IHZvaWQge1xuICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXR5cGVdIGluc3RhbmNlSGFuZGxlIGlzIHR5cGVkIGFzIG1peGVkIGJ1dCB3ZSBrbm93IGl0J3MgYW4gb2JqZWN0IGFuZCB3ZSBuZWVkIGl0IHRvIGJlIHRvIHVzZSBpdCBhcyBhIGtleSBpbiBhIFdlYWtNYXAuXG4gIGNvbnN0IGtleTogaW50ZXJmYWNlIHt9ID0gaW5zdGFuY2VIYW5kbGU7XG4gIGluc3RhbmNlSGFuZGxlVG9UYXJnZXRNYXAuZGVsZXRlKGtleSk7XG59XG5cbi8vIFRoZSBtYXBwaW5nIGJldHdlZW4gUmVhY3ROYXRpdmVFbGVtZW50IGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHNoYWRvdyBub2RlXG4vLyBhbHNvIG5lZWRzIHRvIGJlIGtlcHQgaGVyZSBiZWNhdXNlIFJlYWN0IHJlbW92ZXMgdGhlIGxpbmsgd2hlbiB1bm1vdW50aW5nLlxuLy8gV2UgYWxzbyBrZWVwIHRoZSBpbnN0YW5jZSBoYW5kbGUgc28gd2UgZG9uJ3QgaGF2ZSB0byByZXRyaWV2ZSBpdCBhZ2FpblxuLy8gZnJvbSB0aGUgdGFyZ2V0IHRvIHVub2JzZXJ2ZS5cbmNvbnN0IHRhcmdldFRvU2hhZG93Tm9kZUFuZEluc3RhbmNlSGFuZGxlTWFwOiBXZWFrTWFwPFxuICBSZWFjdE5hdGl2ZUVsZW1lbnQsXG4gIFtSZXR1cm5UeXBlPHR5cGVvZiBnZXRTaGFkb3dOb2RlPiwgbWl4ZWRdLFxuPiA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBnaXZlbiBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgYW5kIHJldHVybnMgYSB1bmlxdWUgSUQgZm9yIGl0LFxuICogd2hpY2ggaXMgcmVxdWlyZWQgdG8gc3RhcnQgb2JzZXJ2aW5nIHRhcmdldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck9ic2VydmVyKFxuICBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsXG4gIGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLFxuKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCB7XG4gIGNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVySWQgPSBuZXh0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZDtcbiAgbmV4dEludGVyc2VjdGlvbk9ic2VydmVySWQrKztcbiAgcmVnaXN0ZXJlZEludGVyc2VjdGlvbk9ic2VydmVycy5zZXQoaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCwge1xuICAgIG9ic2VydmVyLFxuICAgIGNhbGxiYWNrLFxuICB9KTtcbiAgcmV0dXJuIGludGVyc2VjdGlvbk9ic2VydmVySWQ7XG59XG5cbi8qKlxuICogVW5yZWdpc3RlcnMgdGhlIGdpdmVuIGludGVyc2VjdGlvbiBvYnNlcnZlci5cbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYW4gb2JzZXJ2ZXIgaXMgbm8gbG9uZ2VyIG9ic2VydmluZyBhbnlcbiAqIHRhcmdldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyT2JzZXJ2ZXIoXG4gIGludGVyc2VjdGlvbk9ic2VydmVySWQ6IEludGVyc2VjdGlvbk9ic2VydmVySWQsXG4pOiB2b2lkIHtcbiAgY29uc3QgZGVsZXRlZCA9IHJlZ2lzdGVyZWRJbnRlcnNlY3Rpb25PYnNlcnZlcnMuZGVsZXRlKFxuICAgIGludGVyc2VjdGlvbk9ic2VydmVySWQsXG4gICk7XG4gIGlmIChkZWxldGVkICYmIHJlZ2lzdGVyZWRJbnRlcnNlY3Rpb25PYnNlcnZlcnMuc2l6ZSA9PT0gMCkge1xuICAgIE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0cyBvYnNlcnZpbmcgYSB0YXJnZXQgb24gYSBzcGVjaWZpYyBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIuXG4gKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0YXJnZXQgYmVpbmcgb2JzZXJ2ZWQsIHRoaXMgYWxzbyBzZXRzIHVwIHRoZSBjZW50cmFsaXplZFxuICogbm90aWZpY2F0aW9uIGNhbGxiYWNrIGluIG5hdGl2ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmUoe1xuICBpbnRlcnNlY3Rpb25PYnNlcnZlcklkLFxuICB0YXJnZXQsXG59OiB7XG4gIGludGVyc2VjdGlvbk9ic2VydmVySWQ6IEludGVyc2VjdGlvbk9ic2VydmVySWQsXG4gIHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50LFxufSk6IHZvaWQge1xuICBpZiAoTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT0gbnVsbCkge1xuICAgIHdhcm5Ob05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0ZXJlZE9ic2VydmVyID0gcmVnaXN0ZXJlZEludGVyc2VjdGlvbk9ic2VydmVycy5nZXQoXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCxcbiAgKTtcbiAgaWYgKHJlZ2lzdGVyZWRPYnNlcnZlciA9PSBudWxsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBJbnRlcnNlY3Rpb25PYnNlcnZlck1hbmFnZXI6IGNvdWxkIG5vdCBzdGFydCBvYnNlcnZpbmcgdGFyZ2V0IGJlY2F1c2UgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgd2l0aCBJRCAke2ludGVyc2VjdGlvbk9ic2VydmVySWR9IHdhcyBub3QgcmVnaXN0ZXJlZC5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0U2hhZG93Tm9kZSA9IGdldFNoYWRvd05vZGUodGFyZ2V0KTtcbiAgaWYgKHRhcmdldFNoYWRvd05vZGUgPT0gbnVsbCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYW5hZ2VyOiBjb3VsZCBub3QgZmluZCByZWZlcmVuY2UgdG8gaG9zdCBub2RlIGZyb20gdGFyZ2V0JyxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluc3RhbmNlSGFuZGxlID0gZ2V0SW5zdGFuY2VIYW5kbGUodGFyZ2V0KTtcbiAgaWYgKGluc3RhbmNlSGFuZGxlID09IG51bGwpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ0ludGVyc2VjdGlvbk9ic2VydmVyTWFuYWdlcjogY291bGQgbm90IGZpbmQgcmVmZXJlbmNlIHRvIGluc3RhbmNlIGhhbmRsZSBmcm9tIHRhcmdldCcsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBpbnN0YW5jZSBoYW5kbGUgYW5kIHRoZSB0YXJnZXQgc28gd2UgY2FuXG4gIC8vIGFjY2VzcyBpdCBldmVuIGFmdGVyIHRoZSBpbnN0YW5jZSBoYW5kbGUgaGFzIGJlZW4gdW5tb3VudGVkLlxuICBzZXRUYXJnZXRGb3JJbnN0YW5jZUhhbmRsZShpbnN0YW5jZUhhbmRsZSwgdGFyZ2V0KTtcblxuICAvLyBTYW1lIGZvciB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSB0YXJnZXQgYW5kIGl0cyBzaGFkb3cgbm9kZVxuICAvLyBhbmQgaW5zdGFuY2UgaGFuZGxlLlxuICB0YXJnZXRUb1NoYWRvd05vZGVBbmRJbnN0YW5jZUhhbmRsZU1hcC5zZXQodGFyZ2V0LCBbXG4gICAgdGFyZ2V0U2hhZG93Tm9kZSxcbiAgICBpbnN0YW5jZUhhbmRsZSxcbiAgXSk7XG5cbiAgaWYgKCFpc0Nvbm5lY3RlZCkge1xuICAgIE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyLmNvbm5lY3Qobm90aWZ5SW50ZXJzZWN0aW9uT2JzZXJ2ZXJzKTtcbiAgICBpc0Nvbm5lY3RlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh7XG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCxcbiAgICB0YXJnZXRTaGFkb3dOb2RlLFxuICAgIHRocmVzaG9sZHM6IHJlZ2lzdGVyZWRPYnNlcnZlci5vYnNlcnZlci50aHJlc2hvbGRzLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVub2JzZXJ2ZShcbiAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZDogbnVtYmVyLFxuICB0YXJnZXQ6IFJlYWN0TmF0aXZlRWxlbWVudCxcbik6IHZvaWQge1xuICBpZiAoTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT0gbnVsbCkge1xuICAgIHdhcm5Ob05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0ZXJlZE9ic2VydmVyID0gcmVnaXN0ZXJlZEludGVyc2VjdGlvbk9ic2VydmVycy5nZXQoXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCxcbiAgKTtcbiAgaWYgKHJlZ2lzdGVyZWRPYnNlcnZlciA9PSBudWxsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBJbnRlcnNlY3Rpb25PYnNlcnZlck1hbmFnZXI6IGNvdWxkIG5vdCBzdG9wIG9ic2VydmluZyB0YXJnZXQgYmVjYXVzZSBJbnRlcnNlY3Rpb25PYnNlcnZlciB3aXRoIElEICR7aW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZH0gd2FzIG5vdCByZWdpc3RlcmVkLmAsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0YXJnZXRTaGFkb3dOb2RlQW5kSW5zdGFuY2VIYW5kbGUgPVxuICAgIHRhcmdldFRvU2hhZG93Tm9kZUFuZEluc3RhbmNlSGFuZGxlTWFwLmdldCh0YXJnZXQpO1xuICBpZiAodGFyZ2V0U2hhZG93Tm9kZUFuZEluc3RhbmNlSGFuZGxlID09IG51bGwpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ0ludGVyc2VjdGlvbk9ic2VydmVyTWFuYWdlcjogY291bGQgbm90IGZpbmQgcmVnaXN0cmF0aW9uIGRhdGEgZm9yIHRhcmdldCcsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBbdGFyZ2V0U2hhZG93Tm9kZSwgaW5zdGFuY2VIYW5kbGVdID0gdGFyZ2V0U2hhZG93Tm9kZUFuZEluc3RhbmNlSGFuZGxlO1xuXG4gIE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlcklkLFxuICAgIHRhcmdldFNoYWRvd05vZGUsXG4gICk7XG5cbiAgLy8gV2UgY2FuIGd1YXJhbnRlZSB3ZSB3b24ndCByZWNlaXZlIGFueSBtb3JlIGVudHJpZXMgZm9yIHRoaXMgdGFyZ2V0LFxuICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgdGhlIG1hcHBpbmdzIGFueW1vcmUuXG4gIHVuc2V0VGFyZ2V0Rm9ySW5zdGFuY2VIYW5kbGUoaW5zdGFuY2VIYW5kbGUpO1xuICB0YXJnZXRUb1NoYWRvd05vZGVBbmRJbnN0YW5jZUhhbmRsZU1hcC5kZWxldGUodGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG5hdGl2ZSB3aGVuIHRoZXJlIGFyZSBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJgXG4gKiBlbnRyaWVzIHRvIGRpc3BhdGNoLlxuICovXG5mdW5jdGlvbiBub3RpZnlJbnRlcnNlY3Rpb25PYnNlcnZlcnMoKTogdm9pZCB7XG4gIFN5c3RyYWNlLmJlZ2luRXZlbnQoXG4gICAgJ0ludGVyc2VjdGlvbk9ic2VydmVyTWFuYWdlci5ub3RpZnlJbnRlcnNlY3Rpb25PYnNlcnZlcnMnLFxuICApO1xuICB0cnkge1xuICAgIGRvTm90aWZ5SW50ZXJzZWN0aW9uT2JzZXJ2ZXJzKCk7XG4gIH0gZmluYWxseSB7XG4gICAgU3lzdHJhY2UuZW5kRXZlbnQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkb05vdGlmeUludGVyc2VjdGlvbk9ic2VydmVycygpOiB2b2lkIHtcbiAgaWYgKE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyID09IG51bGwpIHtcbiAgICB3YXJuTm9OYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5hdGl2ZUVudHJpZXMgPSBOYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlci50YWtlUmVjb3JkcygpO1xuXG4gIGNvbnN0IGVudHJpZXNCeU9ic2VydmVyOiBNYXA8XG4gICAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCxcbiAgICBBcnJheTxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5PixcbiAgPiA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IG5hdGl2ZUVudHJ5IG9mIG5hdGl2ZUVudHJpZXMpIHtcbiAgICBsZXQgbGlzdCA9IGVudHJpZXNCeU9ic2VydmVyLmdldChuYXRpdmVFbnRyeS5pbnRlcnNlY3Rpb25PYnNlcnZlcklkKTtcbiAgICBpZiAobGlzdCA9PSBudWxsKSB7XG4gICAgICBsaXN0ID0gW107XG4gICAgICBlbnRyaWVzQnlPYnNlcnZlci5zZXQobmF0aXZlRW50cnkuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCwgbGlzdCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0RnJvbUluc3RhbmNlSGFuZGxlKFxuICAgICAgbmF0aXZlRW50cnkudGFyZ2V0SW5zdGFuY2VIYW5kbGUsXG4gICAgKTtcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IGZpbmQgdGFyZ2V0IHRvIGNyZWF0ZSBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Jyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsaXN0LnB1c2goY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeShuYXRpdmVFbnRyeSwgdGFyZ2V0KSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlcklkLFxuICAgIGVudHJpZXNGb3JPYnNlcnZlcixcbiAgXSBvZiBlbnRyaWVzQnlPYnNlcnZlcikge1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRPYnNlcnZlciA9IHJlZ2lzdGVyZWRJbnRlcnNlY3Rpb25PYnNlcnZlcnMuZ2V0KFxuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCxcbiAgICApO1xuICAgIGlmICghcmVnaXN0ZXJlZE9ic2VydmVyKSB7XG4gICAgICAvLyBUaGlzIGNvdWxkIGhhcHBlbiBpZiB0aGUgb2JzZXJ2ZXIgaXMgZGlzY29ubmVjdGVkIGJldHdlZW4gY29tbWl0XG4gICAgICAvLyBhbmQgbW91bnQuIEluIHRoaXMgY2FzZSwgd2UgY2FuIGp1c3QgaWdub3JlIHRoZSBlbnRyaWVzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtvYnNlcnZlciwgY2FsbGJhY2t9ID0gcmVnaXN0ZXJlZE9ic2VydmVyO1xuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG9ic2VydmVyLCBlbnRyaWVzRm9yT2JzZXJ2ZXIsIG9ic2VydmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Ob05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuICB3YXJuT25jZShcbiAgICAnbWlzc2luZy1uYXRpdmUtaW50ZXJzZWN0aW9uLW9ic2VydmVyJyxcbiAgICAnTWlzc2luZyBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLFxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdFxuICogQGZvcm1hdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXInO1xuaW1wb3J0IE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyIGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3NwZWNzL21vZHVsZXMvTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXInO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0XG4gKiBAZm9ybWF0XG4gKi9cblxuaW1wb3J0IHR5cGUge1R1cmJvTW9kdWxlfSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvUkNURXhwb3J0JztcblxuaW1wb3J0ICogYXMgVHVyYm9Nb2R1bGVSZWdpc3RyeSBmcm9tICcuLi8uLi8uLi8uLi9MaWJyYXJpZXMvVHVyYm9Nb2R1bGUvVHVyYm9Nb2R1bGVSZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgPSB7XG4gIGludGVyc2VjdGlvbk9ic2VydmVySWQ6IG51bWJlcixcbiAgdGFyZ2V0SW5zdGFuY2VIYW5kbGU6IG1peGVkLFxuICB0YXJnZXRSZWN0OiAkUmVhZE9ubHlBcnJheTxudW1iZXI+LCAvLyBJdCdzIGFjdHVhbGx5IGEgdHVwbGUgd2l0aCB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0XG4gIHJvb3RSZWN0OiAkUmVhZE9ubHlBcnJheTxudW1iZXI+LCAvLyBJdCdzIGFjdHVhbGx5IGEgdHVwbGUgd2l0aCB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0XG4gIGludGVyc2VjdGlvblJlY3Q6ID8kUmVhZE9ubHlBcnJheTxudW1iZXI+LCAvLyBJdCdzIGFjdHVhbGx5IGEgdHVwbGUgd2l0aCB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0XG4gIGlzSW50ZXJzZWN0aW5nQWJvdmVUaHJlc2hvbGRzOiBib29sZWFuLFxuICB0aW1lOiBudW1iZXIsXG59O1xuXG5leHBvcnQgdHlwZSBOYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlck9ic2VydmVPcHRpb25zID0ge1xuICBpbnRlcnNlY3Rpb25PYnNlcnZlcklkOiBudW1iZXIsXG4gIHRhcmdldFNoYWRvd05vZGU6IG1peGVkLFxuICB0aHJlc2hvbGRzOiAkUmVhZE9ubHlBcnJheTxudW1iZXI+LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArb2JzZXJ2ZTogKG9wdGlvbnM6IE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyT2JzZXJ2ZU9wdGlvbnMpID0+IHZvaWQ7XG4gICt1bm9ic2VydmU6IChpbnRlcnNlY3Rpb25PYnNlcnZlcklkOiBudW1iZXIsIHRhcmdldFNoYWRvd05vZGU6IG1peGVkKSA9PiB2b2lkO1xuICArY29ubmVjdDogKG5vdGlmeUludGVyc2VjdGlvbk9ic2VydmVyc0NhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB2b2lkO1xuICArZGlzY29ubmVjdDogKCkgPT4gdm9pZDtcbiAgK3Rha2VSZWNvcmRzOiAoKSA9PiAkUmVhZE9ubHlBcnJheTxOYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Pjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFR1cmJvTW9kdWxlUmVnaXN0cnkuZ2V0PFNwZWM+KFxuICAnTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDeHgnLFxuKTogP1NwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbi8vIGZsb3dsaW50IHVuc2FmZS1nZXR0ZXJzLXNldHRlcnM6b2ZmXG5cbmltcG9ydCB0eXBlIFJlYWN0TmF0aXZlRWxlbWVudCBmcm9tICcuLi8uLi9zcmMvcHJpdmF0ZS93ZWJhcGlzL2RvbS9ub2Rlcy9SZWFjdE5hdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHR5cGUge05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyRW50cnl9IGZyb20gJy4vTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXInO1xuXG5pbXBvcnQgRE9NUmVjdFJlYWRPbmx5IGZyb20gJy4uLy4uL3NyYy9wcml2YXRlL3dlYmFwaXMvZG9tL2dlb21ldHJ5L0RPTVJlY3RSZWFkT25seSc7XG5cbi8qKlxuICogVGhlIFtgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KVxuICogaW50ZXJmYWNlIG9mIHRoZSBJbnRlcnNlY3Rpb24gT2JzZXJ2ZXIgQVBJIGRlc2NyaWJlcyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW5cbiAqIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgaXRzIHJvb3QgY29udGFpbmVyIGF0IGEgc3BlY2lmaWMgbW9tZW50IG9mIHRyYW5zaXRpb24uXG4gKlxuICogQW4gYXJyYXkgb2YgYEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlgIGlzIGRlbGl2ZXJlZCB0b1xuICogYEludGVyc2VjdGlvbk9ic2VydmVyYCBjYWxsYmFja3MgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5IHtcbiAgLy8gV2UgbGF6aWx5IGNvbXB1dGUgYWxsIHRoZSBwcm9wZXJ0aWVzIGZyb20gdGhlIHJhdyBlbnRyeSBwcm92aWRlZCBieSB0aGVcbiAgLy8gbmF0aXZlIG1vZHVsZSwgc28gd2UgYXZvaWQgdW5uZWNlc3Nhcnkgd29yay5cbiAgX25hdGl2ZUVudHJ5OiBOYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5O1xuICAvLyBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhpcyBjYW5ub3QgYmUgc2FmZWx5IGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFuY2VcbiAgLy8gaGFuZGxlIGluIHRoZSBuYXRpdmUgZW50cnkgKHdoZW4gdGhlIHRhcmdldCBpcyBkZXRhY2hlZCksIHNvIHdlIG5lZWQgdG9cbiAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byBpdCBkaXJlY3RseS5cbiAgX3RhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hdGl2ZUVudHJ5OiBOYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5LFxuICAgIHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50LFxuICApIHtcbiAgICB0aGlzLl9uYXRpdmVFbnRyeSA9IG5hdGl2ZUVudHJ5O1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgcmVjdGFuZ2xlIG9mIHRoZSB0YXJnZXQgZWxlbWVudCBhcyBhIGBET01SZWN0UmVhZE9ubHlgLlxuICAgKiBUaGUgYm91bmRzIGFyZSBjb21wdXRlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yXG4gICAqIFtgRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2dldEJvdW5kaW5nQ2xpZW50UmVjdCkuXG4gICAqL1xuICBnZXQgYm91bmRpbmdDbGllbnRSZWN0KCk6IERPTVJlY3RSZWFkT25seSB7XG4gICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRoaXMuX25hdGl2ZUVudHJ5LnRhcmdldFJlY3Q7XG4gICAgcmV0dXJuIG5ldyBET01SZWN0UmVhZE9ubHkoXG4gICAgICB0YXJnZXRSZWN0WzBdLFxuICAgICAgdGFyZ2V0UmVjdFsxXSxcbiAgICAgIHRhcmdldFJlY3RbMl0sXG4gICAgICB0YXJnZXRSZWN0WzNdLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmF0aW8gb2YgdGhlIGBpbnRlcnNlY3Rpb25SZWN0YCB0byB0aGUgYGJvdW5kaW5nQ2xpZW50UmVjdGAuXG4gICAqL1xuICBnZXQgaW50ZXJzZWN0aW9uUmF0aW8oKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbnRlcnNlY3Rpb25SZWN0ID0gdGhpcy5pbnRlcnNlY3Rpb25SZWN0O1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuYm91bmRpbmdDbGllbnRSZWN0O1xuXG4gICAgaWYgKGJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCA9PT0gMCB8fCBib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0ID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCByYXRpbyA9XG4gICAgICAoaW50ZXJzZWN0aW9uUmVjdC53aWR0aCAqIGludGVyc2VjdGlvblJlY3QuaGVpZ2h0KSAvXG4gICAgICAoYm91bmRpbmdDbGllbnRSZWN0LndpZHRoICogYm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCk7XG5cbiAgICAvLyBQcmV2ZW50IHJvdW5kaW5nIGVycm9ycyBmcm9tIG1ha2luZyB0aGlzIHZhbHVlIGdyZWF0ZXIgdGhhbiAxLlxuICAgIHJldHVybiBNYXRoLm1pbihyYXRpbywgMSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBET01SZWN0UmVhZE9ubHlgIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0J3MgdmlzaWJsZSBhcmVhLlxuICAgKi9cbiAgZ2V0IGludGVyc2VjdGlvblJlY3QoKTogRE9NUmVjdFJlYWRPbmx5IHtcbiAgICBjb25zdCBpbnRlcnNlY3Rpb25SZWN0ID0gdGhpcy5fbmF0aXZlRW50cnkuaW50ZXJzZWN0aW9uUmVjdDtcblxuICAgIGlmIChpbnRlcnNlY3Rpb25SZWN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgRE9NUmVjdFJlYWRPbmx5KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBET01SZWN0UmVhZE9ubHkoXG4gICAgICBpbnRlcnNlY3Rpb25SZWN0WzBdLFxuICAgICAgaW50ZXJzZWN0aW9uUmVjdFsxXSxcbiAgICAgIGludGVyc2VjdGlvblJlY3RbMl0sXG4gICAgICBpbnRlcnNlY3Rpb25SZWN0WzNdLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQSBgQm9vbGVhbmAgdmFsdWUgd2hpY2ggaXMgYHRydWVgIGlmIHRoZSB0YXJnZXQgZWxlbWVudCBpbnRlcnNlY3RzIHdpdGggdGhlXG4gICAqIGludGVyc2VjdGlvbiBvYnNlcnZlcidzIHJvb3QuXG4gICAqICogSWYgdGhpcyBpcyBgdHJ1ZWAsIHRoZW4sIHRoZSBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeWAgZGVzY3JpYmVzIGFcbiAgICogdHJhbnNpdGlvbiBpbnRvIGEgc3RhdGUgb2YgaW50ZXJzZWN0aW9uLlxuICAgKiAqIElmIGl0J3MgYGZhbHNlYCwgdGhlbiB5b3Uga25vdyB0aGUgdHJhbnNpdGlvbiBpcyBmcm9tIGludGVyc2VjdGluZyB0b1xuICAgKiBub3QtaW50ZXJzZWN0aW5nLlxuICAgKi9cbiAgZ2V0IGlzSW50ZXJzZWN0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9uYXRpdmVFbnRyeS5pc0ludGVyc2VjdGluZ0Fib3ZlVGhyZXNob2xkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYERPTVJlY3RSZWFkT25seWAgZm9yIHRoZSBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIncyByb290LlxuICAgKi9cbiAgZ2V0IHJvb3RCb3VuZHMoKTogRE9NUmVjdFJlYWRPbmx5IHtcbiAgICBjb25zdCByb290UmVjdCA9IHRoaXMuX25hdGl2ZUVudHJ5LnJvb3RSZWN0O1xuICAgIHJldHVybiBuZXcgRE9NUmVjdFJlYWRPbmx5KFxuICAgICAgcm9vdFJlY3RbMF0sXG4gICAgICByb290UmVjdFsxXSxcbiAgICAgIHJvb3RSZWN0WzJdLFxuICAgICAgcm9vdFJlY3RbM10sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYFJlYWN0TmF0aXZlRWxlbWVudGAgd2hvc2UgaW50ZXJzZWN0aW9uIHdpdGggdGhlIHJvb3QgY2hhbmdlZC5cbiAgICovXG4gIGdldCB0YXJnZXQoKTogUmVhY3ROYXRpdmVFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgYERPTUhpZ2hSZXNUaW1lU3RhbXBgIGluZGljYXRpbmcgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGludGVyc2VjdGlvbiB3YXNcbiAgICogcmVjb3JkZWQsIHJlbGF0aXZlIHRvIHRoZSBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJgJ3MgdGltZSBvcmlnaW4uXG4gICAqL1xuICBnZXQgdGltZSgpOiBET01IaWdoUmVzVGltZVN0YW1wIHtcbiAgICByZXR1cm4gdGhpcy5fbmF0aXZlRW50cnkudGltZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeShcbiAgZW50cnk6IE5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyRW50cnksXG4gIHRhcmdldDogUmVhY3ROYXRpdmVFbGVtZW50LFxuKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB7XG4gIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeShlbnRyeSwgdGFyZ2V0KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgQW5pbWF0ZWRWYWx1ZSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0FuaW1hdGVkL25vZGVzL0FuaW1hdGVkVmFsdWUnO1xuXG5pbXBvcnQgUk5UZXN0ZXJTZXR0aW5nU3dpdGNoUm93IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJTZXR0aW5nU3dpdGNoUm93JztcbmltcG9ydCB1c2VKc1N0YWxscyBmcm9tICcuLi8uLi91dGlscy91c2VKc1N0YWxscyc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQW5pbWF0ZWQsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY2xhc3MgVGVzdGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcywgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7anM6IEFuaW1hdGVkVmFsdWUsIG5hdGl2ZTogQW5pbWF0ZWRWYWx1ZX0gPSB7XG4gICAgbmF0aXZlOiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAganM6IG5ldyBBbmltYXRlZC5WYWx1ZSgwKSxcbiAgfTtcblxuICBjdXJyZW50ID0gMDtcblxuICBvblByZXNzID0gKCkgPT4ge1xuICAgIGNvbnN0IGFuaW1Db25maWcgPVxuICAgICAgdGhpcy5jdXJyZW50ICYmIHRoaXMucHJvcHMucmV2ZXJzZUNvbmZpZ1xuICAgICAgICA/IHRoaXMucHJvcHMucmV2ZXJzZUNvbmZpZ1xuICAgICAgICA6IHRoaXMucHJvcHMuY29uZmlnO1xuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudCA/IDAgOiAxO1xuICAgIGNvbnN0IGNvbmZpZzogT2JqZWN0ID0ge1xuICAgICAgLi4uYW5pbUNvbmZpZyxcbiAgICAgIHRvVmFsdWU6IHRoaXMuY3VycmVudCxcbiAgICB9O1xuXG4gICAgQW5pbWF0ZWRbdGhpcy5wcm9wcy50eXBlXSh0aGlzLnN0YXRlLm5hdGl2ZSwge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgIH0pLnN0YXJ0KCk7XG4gICAgQW5pbWF0ZWRbdGhpcy5wcm9wcy50eXBlXSh0aGlzLnN0YXRlLmpzLCB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgIH0pLnN0YXJ0KCk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIG9uUHJlc3M9e3RoaXMub25QcmVzc30+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFRleHQ+TmF0aXZlOjwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW4odGhpcy5zdGF0ZS5uYXRpdmUpfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgIDxUZXh0PkphdmFTY3JpcHR7JzonfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9Pnt0aGlzLnByb3BzLmNoaWxkcmVuKHRoaXMuc3RhdGUuanMpfTwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2s+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBWYWx1ZUxpc3RlbmVyRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7YW5pbTogQW5pbWF0ZWRWYWx1ZSwgcHJvZ3Jlc3M6IG51bWJlcn0gPSB7XG4gICAgYW5pbTogbmV3IEFuaW1hdGVkLlZhbHVlKDApLFxuICAgIHByb2dyZXNzOiAwLFxuICB9O1xuICBfY3VycmVudCA9IDA7XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5zdGF0ZS5hbmltLmFkZExpc3RlbmVyKGUgPT4gdGhpcy5zZXRTdGF0ZSh7cHJvZ3Jlc3M6IGUudmFsdWV9KSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnN0YXRlLmFuaW0ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gIH1cblxuICBfb25QcmVzcyA9ICgpID0+IHtcbiAgICB0aGlzLl9jdXJyZW50ID0gdGhpcy5fY3VycmVudCA/IDAgOiAxO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGR1cmF0aW9uOiAxMDAwLFxuICAgICAgdG9WYWx1ZTogdGhpcy5fY3VycmVudCxcbiAgICB9O1xuXG4gICAgQW5pbWF0ZWQudGltaW5nKHRoaXMuc3RhdGUuYW5pbSwge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgIH0pLnN0YXJ0KCk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIG9uUHJlc3M9e3RoaXMuX29uUHJlc3N9PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5ibG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvcGFjaXR5OiB0aGlzLnN0YXRlLmFuaW0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxUZXh0PlZhbHVlOiB7dGhpcy5zdGF0ZS5wcm9ncmVzc308L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrPlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgTG9vcEV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0sICRGbG93Rml4TWVTdGF0ZT4ge1xuICBzdGF0ZTogYW55IHwge3ZhbHVlOiBBbmltYXRlZFZhbHVlfSA9IHtcbiAgICB2YWx1ZTogbmV3IEFuaW1hdGVkLlZhbHVlKDApLFxuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIEFuaW1hdGVkLmxvb3AoXG4gICAgICBBbmltYXRlZC50aW1pbmcodGhpcy5zdGF0ZS52YWx1ZSwge1xuICAgICAgICB0b1ZhbHVlOiAxLFxuICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgICAgfSksXG4gICAgKS5zdGFydCgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5ibG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3BhY2l0eTogdGhpcy5zdGF0ZS52YWx1ZS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDAuNSwgMV0sXG4gICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFswLCAxLCAwXSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF19XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBJbnRlcm5hbFNldHRpbmdzID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgc3RhdGUsXG4gICAgb25EaXNhYmxlRm9yY2VKc1N0YWxscyxcbiAgICBvbkVuYWJsZUZvcmNlSnNTdGFsbHMsXG4gICAgb25FbmFibGVKc1N0YWxsc1RyYWNraW5nLFxuICAgIG9uRGlzYWJsZUpzU3RhbGxzVHJhY2tpbmcsXG4gIH0gPSB1c2VKc1N0YWxscygpO1xuXG4gIGNvbnN0IHtzdGFsbEludGVydmFsSWQsIGZpbHRlcmVkU3RhbGwsIGJ1c3lUaW1lLCB0cmFja2luZ30gPSBzdGF0ZTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFJOVGVzdGVyU2V0dGluZ1N3aXRjaFJvd1xuICAgICAgICBhY3RpdmU9e3N0YWxsSW50ZXJ2YWxJZCAhPSBudWxsfVxuICAgICAgICBsYWJlbD1cIkZvcmNlIEpTIFN0YWxsc1wiXG4gICAgICAgIG9uRW5hYmxlPXtvbkVuYWJsZUZvcmNlSnNTdGFsbHN9XG4gICAgICAgIG9uRGlzYWJsZT17b25EaXNhYmxlRm9yY2VKc1N0YWxsc31cbiAgICAgIC8+XG5cbiAgICAgIDxSTlRlc3RlclNldHRpbmdTd2l0Y2hSb3dcbiAgICAgICAgYWN0aXZlPXt0cmFja2luZ31cbiAgICAgICAgbGFiZWw9XCJUcmFjayBKUyBTdGFsbHNcIlxuICAgICAgICBvbkVuYWJsZT17b25FbmFibGVKc1N0YWxsc1RyYWNraW5nfVxuICAgICAgICBvbkRpc2FibGU9e29uRGlzYWJsZUpzU3RhbGxzVHJhY2tpbmd9XG4gICAgICAvPlxuXG4gICAgICB7dHJhY2tpbmcgJiYgKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7YEpTIFN0YWxsIGZpbHRlcmVkOiAke01hdGgucm91bmQoZmlsdGVyZWRTdGFsbCl9LCBgfVxuICAgICAgICAgIHtgbGFzdDogJHtidXN5VGltZSAhPT0gbnVsbCA/IGJ1c3lUaW1lLnRvRml4ZWQoOCkgOiAnPG5vbmU+J31gfVxuICAgICAgICA8L1RleHQ+XG4gICAgICApfVxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmNsYXNzIEV2ZW50RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRlOiBhbnkgfCB7YW5pbTogQW5pbWF0ZWRWYWx1ZX0gPSB7XG4gICAgYW5pbTogbmV3IEFuaW1hdGVkLlZhbHVlKDApLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5ibG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcm90YXRlOiB0aGlzLnN0YXRlLmFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbJzBkZWcnLCAnMWRlZyddLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgICAgPEFuaW1hdGVkLlNjcm9sbFZpZXdcbiAgICAgICAgICBob3Jpem9udGFsXG4gICAgICAgICAgc3R5bGU9e3toZWlnaHQ6IDEwMCwgbWFyZ2luVG9wOiAxNn19XG4gICAgICAgICAgb25TY3JvbGw9e0FuaW1hdGVkLmV2ZW50KFxuICAgICAgICAgICAgW3tuYXRpdmVFdmVudDoge2NvbnRlbnRPZmZzZXQ6IHt4OiB0aGlzLnN0YXRlLmFuaW19fX1dLFxuICAgICAgICAgICAge3VzZU5hdGl2ZURyaXZlcjogdHJ1ZX0sXG4gICAgICAgICAgKX0+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHdpZHRoOiA2MDAsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAxMDAsXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgIDxUZXh0PlNjcm9sbCBtZSBzaWRld2F5cyE8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L0FuaW1hdGVkLlNjcm9sbFZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBUcmFja2luZ0V4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gICRGbG93Rml4TWVQcm9wcyxcbiAgJEZsb3dGaXhNZVN0YXRlLFxuPiB7XG4gIHN0YXRlOlxuICAgIHwgYW55XG4gICAgfCB7XG4gICAgICAgIGpzOiBBbmltYXRlZFZhbHVlLFxuICAgICAgICBuYXRpdmU6IEFuaW1hdGVkVmFsdWUsXG4gICAgICAgIHRvSlM6IEFuaW1hdGVkVmFsdWUsXG4gICAgICAgIHRvTmF0aXZlOiBBbmltYXRlZFZhbHVlLFxuICAgICAgfSA9IHtcbiAgICBuYXRpdmU6IG5ldyBBbmltYXRlZC5WYWx1ZSgwKSxcbiAgICB0b05hdGl2ZTogbmV3IEFuaW1hdGVkLlZhbHVlKDApLFxuICAgIGpzOiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgdG9KUzogbmV3IEFuaW1hdGVkLlZhbHVlKDApLFxuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIHdlIGNvbmZpZ3VyZSBzcHJpbmcgdG8gdGFrZSBhIGJpdCBvZiB0aW1lIHRvIHNldHRsZSBzbyB0aGF0IHRoZSB1c2VyXG4gICAgLy8gaGF2ZSB0aW1lIHRvIGNsaWNrIG1hbnkgdGltZXMgYW5kIHNlZSBcInRvVmFsdWVcIiBnZXR0aW5nIHVwZGF0ZWQgYW5kXG4gICAgY29uc3QgbG9uZ1NldHRsaW5nU3ByaW5nID0ge1xuICAgICAgdGVuc2lvbjogMjAsXG4gICAgICBmcmljdGlvbjogMC41LFxuICAgIH07XG4gICAgQW5pbWF0ZWQuc3ByaW5nKHRoaXMuc3RhdGUubmF0aXZlLCB7XG4gICAgICAuLi5sb25nU2V0dGxpbmdTcHJpbmcsXG4gICAgICB0b1ZhbHVlOiB0aGlzLnN0YXRlLnRvTmF0aXZlLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgIH0pLnN0YXJ0KCk7XG4gICAgQW5pbWF0ZWQuc3ByaW5nKHRoaXMuc3RhdGUuanMsIHtcbiAgICAgIC4uLmxvbmdTZXR0bGluZ1NwcmluZyxcbiAgICAgIHRvVmFsdWU6IHRoaXMuc3RhdGUudG9KUyxcbiAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgfSkuc3RhcnQoKTtcbiAgfVxuXG4gIG9uUHJlc3MgPSAoKSA9PiB7XG4gICAgLy8gc2VsZWN0IG5leHQgdmFsdWUgdG8gYmUgdHJhY2tlZCBieSByYW5kb21cbiAgICBjb25zdCBuZXh0VmFsdWUgPSBNYXRoLnJhbmRvbSgpICogMjAwO1xuICAgIHRoaXMuc3RhdGUudG9OYXRpdmUuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICB0aGlzLnN0YXRlLnRvSlMuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgfTtcblxuICByZW5kZXJCbG9jayA9IChcbiAgICBhbmltOiBhbnkgfCBBbmltYXRlZFZhbHVlLFxuICAgIGRlc3Q6IGFueSB8IEFuaW1hdGVkVmFsdWUsXG4gICk6IEFycmF5PFJlYWN0Lk5vZGU+ID0+IFtcbiAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAga2V5PVwibGluZVwiXG4gICAgICBzdHlsZT17W3N0eWxlcy5saW5lLCB7dHJhbnNmb3JtOiBbe3RyYW5zbGF0ZVg6IGRlc3R9XX1dfVxuICAgIC8+LFxuICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICBrZXk9XCJibG9ja1wiXG4gICAgICBzdHlsZT17W3N0eWxlcy5ibG9jaywge3RyYW5zZm9ybTogW3t0cmFuc2xhdGVYOiBhbmltfV19XX1cbiAgICAvPixcbiAgXTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3VjaGFibGVXaXRob3V0RmVlZGJhY2sgb25QcmVzcz17dGhpcy5vblByZXNzfT5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICA8VGV4dD5OYXRpdmU6PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJCbG9jayh0aGlzLnN0YXRlLm5hdGl2ZSwgdGhpcy5zdGF0ZS50b05hdGl2ZSl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFRleHQ+SmF2YVNjcmlwdHsnOid9PC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJCbG9jayh0aGlzLnN0YXRlLmpzLCB0aGlzLnN0YXRlLnRvSlMpfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9Ub3VjaGFibGVXaXRob3V0RmVlZGJhY2s+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvdzoge1xuICAgIHBhZGRpbmc6IDEwLFxuICAgIHpJbmRleDogMSxcbiAgfSxcbiAgYmxvY2s6IHtcbiAgICB3aWR0aDogNTAsXG4gICAgaGVpZ2h0OiA1MCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdibHVlJyxcbiAgfSxcbiAgbGluZToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDM1LFxuICAgIHRvcDogMCxcbiAgICBib3R0b206IDAsXG4gICAgd2lkdGg6IDEsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnRzLnRpdGxlID0gJ05hdGl2ZSBBbmltYXRlZCBFeGFtcGxlJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnVUknO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdUZXN0IG91dCBOYXRpdmUgQW5pbWF0aW9ucyc7XG5cbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ011bHRpc3RhZ2UgV2l0aCBNdWx0aXBseSBhbmQgcm90YXRpb24nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRlc3RlciB0eXBlPVwidGltaW5nXCIgY29uZmlnPXt7ZHVyYXRpb246IDEwMDB9fT5cbiAgICAgICAgICB7YW5pbSA9PiAoXG4gICAgICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5ibG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVg6IGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFswLCAyMDBdLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlWTogYW5pbS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMC41LCAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMCwgNTAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcm90YXRlOiBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAwLjUsIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsnMGRlZycsICc5MGRlZycsICcwZGVnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgb3BhY2l0eTogQW5pbWF0ZWQubXVsdGlwbHkoXG4gICAgICAgICAgICAgICAgICAgIGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWzEsIDBdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgYW5pbS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMC4yNSwgMV0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1Rlc3Rlcj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTXVsdGlzdGFnZSBXaXRoIE11bHRpcGx5JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXN0ZXIgdHlwZT1cInRpbWluZ1wiIGNvbmZpZz17e2R1cmF0aW9uOiAxMDAwfX0+XG4gICAgICAgICAge2FuaW0gPT4gKFxuICAgICAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuYmxvY2ssXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVYOiBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMCwgMjAwXSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVk6IGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDAuNSwgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWzAsIDUwLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBvcGFjaXR5OiBBbmltYXRlZC5tdWx0aXBseShcbiAgICAgICAgICAgICAgICAgICAgYW5pbS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMSwgMF0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFswLjI1LCAxXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVGVzdGVyPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNdWx0aXN0YWdlIFdpdGggU3VidHJhY3QnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRlc3RlciB0eXBlPVwidGltaW5nXCIgY29uZmlnPXt7ZHVyYXRpb246IDEwMDB9fT5cbiAgICAgICAgICB7YW5pbSA9PiAoXG4gICAgICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5ibG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVg6IGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFswLCAyMDBdLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlWTogYW5pbS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMC41LCAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMCwgNTAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IEFuaW1hdGVkLnN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsxLCAxXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGFuaW0uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAwLjUsIDFdLFxuICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMCwgMC41LCAwXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVGVzdGVyPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTY2FsZSBpbnRlcnBvbGF0aW9uIHdpdGggY2xhbXBpbmcnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRlc3RlciB0eXBlPVwidGltaW5nXCIgY29uZmlnPXt7ZHVyYXRpb246IDEwMDB9fT5cbiAgICAgICAgICB7YW5pbSA9PiAoXG4gICAgICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5ibG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAwLjVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsxLCAxLjRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFwb2xhdGVSaWdodDogJ2NsYW1wJyxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9UZXN0ZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ09wYWNpdHkgd2l0aCBkZWxheScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGVzdGVyIHR5cGU9XCJ0aW1pbmdcIiBjb25maWc9e3tkdXJhdGlvbjogMTAwMCwgZGVsYXk6IDEwMDB9fT5cbiAgICAgICAgICB7YW5pbSA9PiAoXG4gICAgICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICAgIHN0eWxlcy5ibG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvcGFjaXR5OiBhbmltLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVGVzdGVyPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdSb3RhdGUgaW50ZXJwb2xhdGlvbicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGVzdGVyIHR5cGU9XCJ0aW1pbmdcIiBjb25maWc9e3tkdXJhdGlvbjogMTAwMH19PlxuICAgICAgICAgIHthbmltID0+IChcbiAgICAgICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmJsb2NrLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcm90YXRlOiBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbJzBkZWcnLCAnOTBkZWcnXSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9UZXN0ZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ3RyYW5zbGF0ZVggPT4gQW5pbWF0ZWQuc3ByaW5nIChib3VuY2luZXNzL3NwZWVkKScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGVzdGVyIHR5cGU9XCJzcHJpbmdcIiBjb25maWc9e3tib3VuY2luZXNzOiAwfX0+XG4gICAgICAgICAge2FuaW0gPT4gKFxuICAgICAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgICAgICBzdHlsZXMuYmxvY2ssXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVYOiBhbmltLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMCwgMTAwXSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9UZXN0ZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ3RyYW5zbGF0ZVggPT4gQW5pbWF0ZWQuc3ByaW5nIChzdGlmZm5lc3MvZGFtcGluZy9tYXNzKScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGVzdGVyIHR5cGU9XCJzcHJpbmdcIiBjb25maWc9e3tzdGlmZm5lc3M6IDEwMDAsIGRhbXBpbmc6IDUwMCwgbWFzczogM319PlxuICAgICAgICAgIHthbmltID0+IChcbiAgICAgICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmJsb2NrLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlWDogYW5pbS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWzAsIDEwMF0sXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVGVzdGVyPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICd0cmFuc2xhdGVYID0+IEFuaW1hdGVkLmRlY2F5JyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXN0ZXJcbiAgICAgICAgICB0eXBlPVwiZGVjYXlcIlxuICAgICAgICAgIGNvbmZpZz17e3ZlbG9jaXR5OiAwLjV9fVxuICAgICAgICAgIHJldmVyc2VDb25maWc9e3t2ZWxvY2l0eTogLTAuNX19PlxuICAgICAgICAgIHthbmltID0+IChcbiAgICAgICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmJsb2NrLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlWDogYW5pbSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9UZXN0ZXI+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0FuaW1hdGVkIHZhbHVlIGxpc3RlbmVyJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8VmFsdWVMaXN0ZW5lckV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQW5pbWF0ZWQgbG9vcCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPExvb3BFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0FuaW1hdGVkIGV2ZW50cycsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEV2ZW50RXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBbmltYXRlZCBUcmFja2luZyAtIHRhcCBtZSBtYW55IHRpbWVzJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8VHJhY2tpbmdFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0ludGVybmFsIFNldHRpbmdzJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8SW50ZXJuYWxTZXR0aW5ncyAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFN3aXRjaCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbGFiZWw6IHN0cmluZyxcbiAgb25FbmFibGU6ICgpID0+IHZvaWQsXG4gIG9uRGlzYWJsZTogKCkgPT4gdm9pZCxcbiAgYWN0aXZlOiBib29sZWFuLFxufTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb3c6IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICB9LFxufSk7XG5cbmNvbnN0IFJOVGVzdGVyU2V0dGluZ1N3aXRjaFJvdyA9ICh7XG4gIGxhYmVsLFxuICBvbkVuYWJsZSxcbiAgb25EaXNhYmxlLFxuICBhY3RpdmUsXG59OiBQcm9wcyk6IFJlYWN0Lk5vZGUgPT4ge1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgIDxUZXh0PntsYWJlbH08L1RleHQ+XG4gICAgICA8U3dpdGNoIHZhbHVlPXthY3RpdmV9IG9uVmFsdWVDaGFuZ2U9e2FjdGl2ZSA/IG9uRGlzYWJsZSA6IG9uRW5hYmxlfSAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJOVGVzdGVyU2V0dGluZ1N3aXRjaFJvdztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJKc1N0YWxsc1N0YXRlfSBmcm9tICcuLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBJTklUSUFMX1NUQVRFOiBSTlRlc3RlckpzU3RhbGxzU3RhdGUgPSB7XG4gIHN0YWxsSW50ZXJ2YWxJZDogbnVsbCxcbiAgYnVzeVRpbWU6IG51bGwsXG4gIGZpbHRlcmVkU3RhbGw6IDAsXG4gIHRyYWNraW5nOiBmYWxzZSxcbn07XG5cbmNvbnN0IEZJTFRFUkVEX1NUQUxMX01VTFRJUExJRVIgPSAwLjk3O1xuY29uc3QgQlVTWV9USU1FX01VTFRJUExJRVIgPSAxIC0gRklMVEVSRURfU1RBTExfTVVMVElQTElFUjtcblxuY29uc3QgdXNlSnNTdGFsbHMgPSAoKTogKHtcbiAgb25EaXNhYmxlRm9yY2VKc1N0YWxsczogKCkgPT4gdm9pZCxcbiAgb25EaXNhYmxlSnNTdGFsbHNUcmFja2luZzogKCkgPT4gdm9pZCxcbiAgb25FbmFibGVGb3JjZUpzU3RhbGxzOiAoKSA9PiB2b2lkLFxuICBvbkVuYWJsZUpzU3RhbGxzVHJhY2tpbmc6ICgpID0+IHZvaWQsXG4gIHN0YXRlOiBSTlRlc3RlckpzU3RhbGxzU3RhdGUsXG59KSA9PiB7XG4gIGNvbnN0IFtzdGFsbHNTdGF0ZSwgc2V0U3RhbGxzU3RhdGVdID1cbiAgICBSZWFjdC51c2VTdGF0ZTxSTlRlc3RlckpzU3RhbGxzU3RhdGU+KElOSVRJQUxfU1RBVEUpO1xuXG4gIGNvbnN0IHtzdGFsbEludGVydmFsSWR9ID0gc3RhbGxzU3RhdGU7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChzdGFsbEludGVydmFsSWQpO1xuICB9LCBbc3RhbGxJbnRlcnZhbElkXSk7XG5cbiAgY29uc3Qgb25EaXNhYmxlRm9yY2VKc1N0YWxscyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICgpID0+IHNldFN0YWxsc1N0YXRlKHN0YXRlID0+ICh7Li4uc3RhdGUsIHN0YWxsSW50ZXJ2YWxJZDogbnVsbH0pKSxcbiAgICBbXSxcbiAgKTtcblxuICBjb25zdCBvbkVuYWJsZUZvcmNlSnNTdGFsbHMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuICAgICAgY29uc29sZS53YXJuKCdidXJuIENQVScpO1xuXG4gICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgMTAwKSB7fVxuICAgIH0sIDMwMCk7XG5cbiAgICBzZXRTdGFsbHNTdGF0ZShzdGF0ZSA9PiAoey4uLnN0YXRlLCBzdGFsbEludGVydmFsSWQ6IGludGVydmFsSWR9KSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkVuYWJsZUpzU3RhbGxzVHJhY2tpbmcgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgSlNFdmVudExvb3BXYXRjaGRvZyA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvSW50ZXJhY3Rpb24vSlNFdmVudExvb3BXYXRjaGRvZycpO1xuXG4gICAgSlNFdmVudExvb3BXYXRjaGRvZy5pbnN0YWxsKHt0aHJlc2hvbGRNUzogMjV9KTtcblxuICAgIHNldFN0YWxsc1N0YXRlKHN0YXRlID0+ICh7Li4uc3RhdGUsIHRyYWNraW5nOiB0cnVlfSkpO1xuXG4gICAgSlNFdmVudExvb3BXYXRjaGRvZy5hZGRIYW5kbGVyKHtcbiAgICAgIG9uU3RhbGw6ICh7YnVzeVRpbWV9KSA9PlxuICAgICAgICBzZXRTdGFsbHNTdGF0ZShzdGF0ZSA9PiB7XG4gICAgICAgICAgLy8gSWYgcHJldmlvdXMgaW50ZXJ2YWwgd2FzIGNsZWFyZWRcbiAgICAgICAgICBpZiAoIXN0YXRlLnN0YWxsSW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGJ1c3lUaW1lOiBidXN5VGltZSB8fCBzdGF0ZS5idXN5VGltZSxcbiAgICAgICAgICAgIGZpbHRlcmVkU3RhbGw6XG4gICAgICAgICAgICAgIHN0YXRlLmZpbHRlcmVkU3RhbGwgKiBGSUxURVJFRF9TVEFMTF9NVUxUSVBMSUVSICtcbiAgICAgICAgICAgICAgKGJ1c3lUaW1lIHx8IDApICogQlVTWV9USU1FX01VTFRJUExJRVIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkRpc2FibGVKc1N0YWxsc1RyYWNraW5nID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybignQ2Fubm90IGRpc2FibGUgeWV0Li4uJyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiBzdGFsbHNTdGF0ZSxcbiAgICBvbkRpc2FibGVGb3JjZUpzU3RhbGxzLFxuICAgIG9uRW5hYmxlRm9yY2VKc1N0YWxscyxcbiAgICBvbkVuYWJsZUpzU3RhbGxzVHJhY2tpbmcsXG4gICAgb25EaXNhYmxlSnNTdGFsbHNUcmFja2luZyxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUpzU3RhbGxzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpbmZvTG9nID0gcmVxdWlyZSgnLi4vVXRpbGl0aWVzL2luZm9Mb2cnKTtcblxudHlwZSBIYW5kbGVyID0ge1xuICBvbkl0ZXJhdGU/OiAoKSA9PiB2b2lkLFxuICBvblN0YWxsOiAocGFyYW1zOiB7bGFzdEludGVydmFsOiBudW1iZXIsIGJ1c3lUaW1lOiBudW1iZXIsIC4uLn0pID0+ID9zdHJpbmcsXG4gIC4uLlxufTtcblxuLyoqXG4gKiBBIHV0aWxpdHkgZm9yIHRyYWNraW5nIHN0YWxscyBpbiB0aGUgSlMgZXZlbnQgbG9vcCB0aGF0IHByZXZlbnQgdGltZXJzIGFuZFxuICogb3RoZXIgZXZlbnRzIGZyb20gYmVpbmcgcHJvY2Vzc2VkIGluIGEgdGltZWx5IG1hbm5lci5cbiAqXG4gKiBUaGUgXCJzdGFsbFwiIHRpbWUgaXMgZGVmaW5lZCBhcyB0aGUgYW1vdW50IG9mIHRpbWUgaW4gYWNjZXNzIG9mIHRoZSBhY2NlcHRhYmxlXG4gKiB0aHJlc2hvbGQsIHdoaWNoIGlzIHR5cGljYWxseSBhcm91bmQgMTAwLTIwMG1zLiBTbyBpZiB0aGUgdGhyZXNob2xkIGlzIHNldCB0b1xuICogMTAwIGFuZCBhIHRpbWVyIGZpcmVzIDE1MCBtcyBsYXRlciB0aGFuIGl0IHdhcyBzY2hlZHVsZWQgYmVjYXVzZSB0aGUgZXZlbnRcbiAqIGxvb3Agd2FzIHRpZWQgdXAsIHRoYXQgd291bGQgYmUgY29uc2lkZXJlZCBhIDUwbXMgc3RhbGwuXG4gKlxuICogQnkgZGVmYXVsdCwgbG9ncyBzdGFsbCBldmVudHMgdG8gdGhlIGNvbnNvbGUgd2hlbiBpbnN0YWxsZWQuIENhbiBhbHNvIGJlXG4gKiBxdWVyaWVkIHdpdGggYGdldFN0YXRzYC5cbiAqL1xuY29uc3QgSlNFdmVudExvb3BXYXRjaGRvZyA9IHtcbiAgZ2V0U3RhdHM6IGZ1bmN0aW9uICgpOiBPYmplY3Qge1xuICAgIHJldHVybiB7c3RhbGxDb3VudCwgdG90YWxTdGFsbFRpbWUsIGxvbmdlc3RTdGFsbCwgYWNjZXB0YWJsZUJ1c3lUaW1lfTtcbiAgfSxcbiAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpbmZvTG9nKCdKU0V2ZW50TG9vcFdhdGNoZG9nOiByZXNldCcpO1xuICAgIHRvdGFsU3RhbGxUaW1lID0gMDtcbiAgICBzdGFsbENvdW50ID0gMDtcbiAgICBsb25nZXN0U3RhbGwgPSAwO1xuICAgIGxhc3RJbnRlcnZhbCA9IGdsb2JhbC5wZXJmb3JtYW5jZS5ub3coKTtcbiAgfSxcbiAgYWRkSGFuZGxlcjogZnVuY3Rpb24gKGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICBoYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICB9LFxuICBpbnN0YWxsOiBmdW5jdGlvbiAoe3RocmVzaG9sZE1TfToge3RocmVzaG9sZE1TOiBudW1iZXIsIC4uLn0pIHtcbiAgICBhY2NlcHRhYmxlQnVzeVRpbWUgPSB0aHJlc2hvbGRNUztcbiAgICBpZiAoaW5zdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluc3RhbGxlZCA9IHRydWU7XG4gICAgbGFzdEludGVydmFsID0gZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGZ1bmN0aW9uIGl0ZXJhdGlvbigpIHtcbiAgICAgIGNvbnN0IG5vdyA9IGdsb2JhbC5wZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIGNvbnN0IGJ1c3lUaW1lID0gbm93IC0gbGFzdEludGVydmFsO1xuICAgICAgaWYgKGJ1c3lUaW1lID49IHRocmVzaG9sZE1TKSB7XG4gICAgICAgIGNvbnN0IHN0YWxsVGltZSA9IGJ1c3lUaW1lIC0gdGhyZXNob2xkTVM7XG4gICAgICAgIHN0YWxsQ291bnQrKztcbiAgICAgICAgdG90YWxTdGFsbFRpbWUgKz0gc3RhbGxUaW1lO1xuICAgICAgICBsb25nZXN0U3RhbGwgPSBNYXRoLm1heChsb25nZXN0U3RhbGwsIHN0YWxsVGltZSk7XG4gICAgICAgIGxldCBtc2cgPVxuICAgICAgICAgIGBKU0V2ZW50TG9vcFdhdGNoZG9nOiBKUyB0aHJlYWQgYnVzeSBmb3IgJHtidXN5VGltZX1tcy4gYCArXG4gICAgICAgICAgYCR7dG90YWxTdGFsbFRpbWV9bXMgaW4gJHtzdGFsbENvdW50fSBzdGFsbHMgc28gZmFyLiBgO1xuICAgICAgICBoYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4ge1xuICAgICAgICAgIG1zZyArPSBoYW5kbGVyLm9uU3RhbGwoe2xhc3RJbnRlcnZhbCwgYnVzeVRpbWV9KSB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgICAgIGluZm9Mb2cobXNnKTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICAgIGhhbmRsZXIub25JdGVyYXRlICYmIGhhbmRsZXIub25JdGVyYXRlKCk7XG4gICAgICB9KTtcbiAgICAgIGxhc3RJbnRlcnZhbCA9IG5vdztcbiAgICAgIHNldFRpbWVvdXQoaXRlcmF0aW9uLCB0aHJlc2hvbGRNUyAvIDUpO1xuICAgIH1cbiAgICBpdGVyYXRpb24oKTtcbiAgfSxcbn07XG5cbmxldCBhY2NlcHRhYmxlQnVzeVRpbWUgPSAwO1xubGV0IGluc3RhbGxlZCA9IGZhbHNlO1xubGV0IHRvdGFsU3RhbGxUaW1lID0gMDtcbmxldCBzdGFsbENvdW50ID0gMDtcbmxldCBsb25nZXN0U3RhbGwgPSAwO1xubGV0IGxhc3RJbnRlcnZhbCA9IDA7XG5jb25zdCBoYW5kbGVyczogQXJyYXk8SGFuZGxlcj4gPSBbXTtcblxubW9kdWxlLmV4cG9ydHMgPSBKU0V2ZW50TG9vcFdhdGNoZG9nO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHt0eXBlIEV2ZW50U3Vic2NyaXB0aW9ufSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL3ZlbmRvci9lbWl0dGVyL0V2ZW50RW1pdHRlcic7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtEZXZpY2VFdmVudEVtaXR0ZXIsIFRleHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIE9yaWVudGF0aW9uQ2hhbmdlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIF9vcmllbnRhdGlvblN1YnNjcmlwdGlvbjogRXZlbnRTdWJzY3JpcHRpb247XG5cbiAgc3RhdGU6XG4gICAgfCBhbnlcbiAgICB8IHtcbiAgICAgICAgY3VycmVudE9yaWVudGF0aW9uOiBzdHJpbmcsXG4gICAgICAgIGlzTGFuZHNjYXBlOiBib29sZWFuLFxuICAgICAgICBvcmllbnRhdGlvbkRlZ3JlZXM6IG51bWJlcixcbiAgICAgIH0gPSB7XG4gICAgY3VycmVudE9yaWVudGF0aW9uOiAnJyxcbiAgICBvcmllbnRhdGlvbkRlZ3JlZXM6IDAsXG4gICAgaXNMYW5kc2NhcGU6IGZhbHNlLFxuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuX29yaWVudGF0aW9uU3Vic2NyaXB0aW9uID0gRGV2aWNlRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKFxuICAgICAgJ25hbWVkT3JpZW50YXRpb25EaWRDaGFuZ2UnLFxuICAgICAgdGhpcy5fb25PcmllbnRhdGlvbkNoYW5nZSxcbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5fb3JpZW50YXRpb25TdWJzY3JpcHRpb24ucmVtb3ZlKCk7XG4gIH1cblxuICBfb25PcmllbnRhdGlvbkNoYW5nZSA9IChvcmllbnRhdGlvbjogT2JqZWN0KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjdXJyZW50T3JpZW50YXRpb246IG9yaWVudGF0aW9uLm5hbWUsXG4gICAgICBvcmllbnRhdGlvbkRlZ3JlZXM6IG9yaWVudGF0aW9uLnJvdGF0aW9uRGVncmVlcyxcbiAgICAgIGlzTGFuZHNjYXBlOiBvcmllbnRhdGlvbi5pc0xhbmRzY2FwZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8VGV4dD57SlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSl9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0cy50aXRsZSA9ICdPcmllbnRhdGlvbkNoYW5nZUV4YW1wbGUnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ2xpc3RlbmluZyB0byBvcmllbnRhdGlvbiBjaGFuZ2VzJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ09yaWVudGF0aW9uQ2hhbmdlRXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdsaXN0ZW5pbmcgdG8gZGV2aWNlIG9yaWVudGF0aW9uIGNoYW5nZXMnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8T3JpZW50YXRpb25DaGFuZ2VFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1xuICBHZXN0dXJlU3RhdGUsXG4gIFBhblJlc3BvbmRlckluc3RhbmNlLFxufSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0ludGVyYWN0aW9uL1BhblJlc3BvbmRlcic7XG5pbXBvcnQgdHlwZSB7UHJlc3NFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmNvbnN0IFJOVGVzdGVyUGFnZSA9IHJlcXVpcmUoJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJQYWdlJyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7UGFuUmVzcG9uZGVyLCBTdHlsZVNoZWV0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG50eXBlIENpcmNsZVN0eWxlcyA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nLFxuICBsZWZ0PzogbnVtYmVyLFxuICB0b3A/OiBudW1iZXIsXG4gIC4uLlxufTtcblxuY29uc3QgQ0lSQ0xFX1NJWkUgPSA4MDtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fHx9PjtcbnR5cGUgU3RhdGUgPSB7fFxuICBsZWZ0OiBudW1iZXIsXG4gIHRvcDogbnVtYmVyLFxuICBwcmVzc2VkOiBib29sZWFuLFxufH07XG5cbmNsYXNzIFBhblJlc3BvbmRlckV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIF9wcmV2aW91c0xlZnQ6IG51bWJlciA9IDIwO1xuICBfcHJldmlvdXNUb3A6IG51bWJlciA9IDg0O1xuICBfY2lyY2xlU3R5bGVzOiB7fHN0eWxlOiBDaXJjbGVTdHlsZXN8fSA9IHtzdHlsZToge319O1xuICBjaXJjbGU6ID9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBWaWV3PiA9IG51bGw7XG5cbiAgc3RhdGU6IFN0YXRlID0ge1xuICAgIGxlZnQ6IDIwLFxuICAgIHRvcDogODQsXG4gICAgcHJlc3NlZDogZmFsc2UsXG4gIH07XG5cbiAgX2hhbmRsZVN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyID0gKFxuICAgIGV2ZW50OiBQcmVzc0V2ZW50LFxuICAgIGdlc3R1cmVTdGF0ZTogR2VzdHVyZVN0YXRlLFxuICApOiBib29sZWFuID0+IHtcbiAgICAvLyBTaG91bGQgd2UgYmVjb21lIGFjdGl2ZSB3aGVuIHRoZSB1c2VyIHByZXNzZXMgZG93biBvbiB0aGUgY2lyY2xlP1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIF9oYW5kbGVNb3ZlU2hvdWxkU2V0UGFuUmVzcG9uZGVyID0gKFxuICAgIGV2ZW50OiBQcmVzc0V2ZW50LFxuICAgIGdlc3R1cmVTdGF0ZTogR2VzdHVyZVN0YXRlLFxuICApOiBib29sZWFuID0+IHtcbiAgICAvLyBTaG91bGQgd2UgYmVjb21lIGFjdGl2ZSB3aGVuIHRoZSB1c2VyIG1vdmVzIGEgdG91Y2ggb3ZlciB0aGUgY2lyY2xlP1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIF9oYW5kbGVQYW5SZXNwb25kZXJHcmFudCA9IChcbiAgICBldmVudDogUHJlc3NFdmVudCxcbiAgICBnZXN0dXJlU3RhdGU6IEdlc3R1cmVTdGF0ZSxcbiAgKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwcmVzc2VkOiB0cnVlLFxuICAgIH0pO1xuICB9O1xuXG4gIF9oYW5kbGVQYW5SZXNwb25kZXJNb3ZlID0gKGV2ZW50OiBQcmVzc0V2ZW50LCBnZXN0dXJlU3RhdGU6IEdlc3R1cmVTdGF0ZSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbGVmdDogdGhpcy5fcHJldmlvdXNMZWZ0ICsgZ2VzdHVyZVN0YXRlLmR4LFxuICAgICAgdG9wOiB0aGlzLl9wcmV2aW91c1RvcCArIGdlc3R1cmVTdGF0ZS5keSxcbiAgICB9KTtcbiAgfTtcblxuICBfaGFuZGxlUGFuUmVzcG9uZGVyRW5kID0gKGV2ZW50OiBQcmVzc0V2ZW50LCBnZXN0dXJlU3RhdGU6IEdlc3R1cmVTdGF0ZSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcHJlc3NlZDogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5fcHJldmlvdXNMZWZ0ICs9IGdlc3R1cmVTdGF0ZS5keDtcbiAgICB0aGlzLl9wcmV2aW91c1RvcCArPSBnZXN0dXJlU3RhdGUuZHk7XG4gIH07XG5cbiAgX3BhblJlc3BvbmRlcjogUGFuUmVzcG9uZGVySW5zdGFuY2UgPSBQYW5SZXNwb25kZXIuY3JlYXRlKHtcbiAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiB0aGlzLl9oYW5kbGVTdGFydFNob3VsZFNldFBhblJlc3BvbmRlcixcbiAgICBvbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXI6IHRoaXMuX2hhbmRsZU1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXIsXG4gICAgb25QYW5SZXNwb25kZXJHcmFudDogdGhpcy5faGFuZGxlUGFuUmVzcG9uZGVyR3JhbnQsXG4gICAgb25QYW5SZXNwb25kZXJNb3ZlOiB0aGlzLl9oYW5kbGVQYW5SZXNwb25kZXJNb3ZlLFxuICAgIG9uUGFuUmVzcG9uZGVyUmVsZWFzZTogdGhpcy5faGFuZGxlUGFuUmVzcG9uZGVyRW5kLFxuICAgIG9uUGFuUmVzcG9uZGVyVGVybWluYXRlOiB0aGlzLl9oYW5kbGVQYW5SZXNwb25kZXJFbmQsXG4gIH0pO1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJOVGVzdGVyUGFnZSBub1Njcm9sbD17dHJ1ZX0gdGl0bGU9XCJCYXNpYyBnZXN0dXJlIGhhbmRsaW5nXCI+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgcmVmPXtjaXJjbGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNpcmNsZSA9IGNpcmNsZTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBzdHlsZXMuY2lyY2xlLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgICAgICB7dHJhbnNsYXRlWDogdGhpcy5zdGF0ZS5sZWZ0fSxcbiAgICAgICAgICAgICAgICAgIHt0cmFuc2xhdGVZOiB0aGlzLnN0YXRlLnRvcH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuc3RhdGUucHJlc3NlZCA/ICdibHVlJyA6ICdncmVlbicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgey4uLnRoaXMuX3BhblJlc3BvbmRlci5wYW5IYW5kbGVyc31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1JOVGVzdGVyUGFnZT5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY2lyY2xlOiB7XG4gICAgd2lkdGg6IENJUkNMRV9TSVpFLFxuICAgIGhlaWdodDogQ0lSQ0xFX1NJWkUsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuICAgIGJvcmRlclJhZGl1czogQ0lSQ0xFX1NJWkUgLyAyLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIGhlaWdodDogNTAwLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnUGFuUmVzcG9uZGVyIFNhbXBsZSc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3BhbnJlc3BvbmRlcic7XG5leHBvcnRzLmRlc2NyaXB0aW9uID1cbiAgJ1Nob3dzIHRoZSBVc2Ugb2YgUGFuUmVzcG9uZGVyIHRvIHByb3ZpZGUgYmFzaWMgZ2VzdHVyZSBoYW5kbGluZyc7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdCYXNpYyBnZXN0dXJlIGhhbmRsaW5nJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBQYW5SZXNwb25kZXJFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPFBhblJlc3BvbmRlckV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgUGxhdGZvcm0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9VdGlsaXRpZXMvUGxhdGZvcm0nO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCBSZWFjdE5hdGl2ZSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuY29uc3Qge0R5bmFtaWNDb2xvcklPUywgUGxhdGZvcm1Db2xvciwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gPSBSZWFjdE5hdGl2ZTtcblxuZnVuY3Rpb24gUGxhdGZvcm1Db2xvcnNFeGFtcGxlKCkge1xuICBmdW5jdGlvbiBjcmVhdGVUYWJsZSgpIHtcbiAgICBsZXQgY29sb3JzOiBBcnJheTx7XG4gICAgICBjb2xvcjogUmV0dXJuVHlwZTx0eXBlb2YgUGxhdGZvcm1Db2xvcj4sXG4gICAgICBsYWJlbDogc3RyaW5nLFxuICAgIH0+ID0gW107XG4gICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgY29sb3JzID0gW1xuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi91aWtpdC91aWNvbG9yL3VpX2VsZW1lbnRfY29sb3JzXG4gICAgICAgIC8vIExhYmVsIENvbG9yc1xuICAgICAgICB7bGFiZWw6ICdsYWJlbCcsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdsYWJlbCcpfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnc2Vjb25kYXJ5TGFiZWwnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzZWNvbmRhcnlMYWJlbCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICd0ZXJ0aWFyeUxhYmVsJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcigndGVydGlhcnlMYWJlbCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdxdWF0ZXJuYXJ5TGFiZWwnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdxdWF0ZXJuYXJ5TGFiZWwnKSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gRmlsbCBDb2xvcnNcbiAgICAgICAge2xhYmVsOiAnc3lzdGVtRmlsbCcsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1GaWxsJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdzZWNvbmRhcnlTeXN0ZW1GaWxsJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignc2Vjb25kYXJ5U3lzdGVtRmlsbCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICd0ZXJ0aWFyeVN5c3RlbUZpbGwnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCd0ZXJ0aWFyeVN5c3RlbUZpbGwnKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAncXVhdGVybmFyeVN5c3RlbUZpbGwnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdxdWF0ZXJuYXJ5U3lzdGVtRmlsbCcpLFxuICAgICAgICB9LFxuICAgICAgICAvLyBUZXh0IENvbG9yc1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdwbGFjZWhvbGRlclRleHQnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdwbGFjZWhvbGRlclRleHQnKSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gU3RhbmRhcmQgQ29udGVudCBCYWNrZ3JvdW5kIENvbG9yc1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdzeXN0ZW1CYWNrZ3JvdW5kJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignc3lzdGVtQmFja2dyb3VuZCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdzZWNvbmRhcnlTeXN0ZW1CYWNrZ3JvdW5kJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignc2Vjb25kYXJ5U3lzdGVtQmFja2dyb3VuZCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICd0ZXJ0aWFyeVN5c3RlbUJhY2tncm91bmQnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCd0ZXJ0aWFyeVN5c3RlbUJhY2tncm91bmQnKSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gR3JvdXBlZCBDb250ZW50IEJhY2tncm91bmQgQ29sb3JzXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ3N5c3RlbUdyb3VwZWRCYWNrZ3JvdW5kJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignc3lzdGVtR3JvdXBlZEJhY2tncm91bmQnKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnc2Vjb25kYXJ5U3lzdGVtR3JvdXBlZEJhY2tncm91bmQnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzZWNvbmRhcnlTeXN0ZW1Hcm91cGVkQmFja2dyb3VuZCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICd0ZXJ0aWFyeVN5c3RlbUdyb3VwZWRCYWNrZ3JvdW5kJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcigndGVydGlhcnlTeXN0ZW1Hcm91cGVkQmFja2dyb3VuZCcpLFxuICAgICAgICB9LFxuICAgICAgICAvLyBTZXBhcmF0b3IgQ29sb3JzXG4gICAgICAgIHtsYWJlbDogJ3NlcGFyYXRvcicsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzZXBhcmF0b3InKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ29wYXF1ZVNlcGFyYXRvcicsXG4gICAgICAgICAgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ29wYXF1ZVNlcGFyYXRvcicpLFxuICAgICAgICB9LFxuICAgICAgICAvLyBMaW5rIENvbG9yXG4gICAgICAgIHtsYWJlbDogJ2xpbmsnLCBjb2xvcjogUGxhdGZvcm1Db2xvcignbGluaycpfSxcbiAgICAgICAgLy8gTm9uYWRhcHRhYmxlIENvbG9yc1xuICAgICAgICB7bGFiZWw6ICdkYXJrVGV4dCcsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdkYXJrVGV4dCcpfSxcbiAgICAgICAge2xhYmVsOiAnbGlnaHRUZXh0JywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ2xpZ2h0VGV4dCcpfSxcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vdWlraXQvdWljb2xvci9zdGFuZGFyZF9jb2xvcnNcbiAgICAgICAgLy8gQWRhcHRhYmxlIENvbG9yc1xuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1CbHVlJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUJsdWUnKX0sXG4gICAgICAgIHtsYWJlbDogJ3N5c3RlbUJyb3duJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUJyb3duJyl9LFxuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1HcmVlbicsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1HcmVlbicpfSxcbiAgICAgICAge2xhYmVsOiAnc3lzdGVtSW5kaWdvJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUluZGlnbycpfSxcbiAgICAgICAge2xhYmVsOiAnc3lzdGVtT3JhbmdlJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbU9yYW5nZScpfSxcbiAgICAgICAge2xhYmVsOiAnc3lzdGVtUGluaycsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1QaW5rJyl9LFxuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1QdXJwbGUnLCBjb2xvcjogUGxhdGZvcm1Db2xvcignc3lzdGVtUHVycGxlJyl9LFxuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1SZWQnLCBjb2xvcjogUGxhdGZvcm1Db2xvcignc3lzdGVtUmVkJyl9LFxuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1UZWFsJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbVRlYWwnKX0sXG4gICAgICAgIHtsYWJlbDogJ3N5c3RlbVllbGxvdycsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1ZZWxsb3cnKX0sXG4gICAgICAgIC8vIEFkYXB0YWJsZSBHcmF5IENvbG9yc1xuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1HcmF5JywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUdyYXknKX0sXG4gICAgICAgIHtsYWJlbDogJ3N5c3RlbUdyYXkyJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUdyYXkyJyl9LFxuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1HcmF5MycsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1HcmF5MycpfSxcbiAgICAgICAge2xhYmVsOiAnc3lzdGVtR3JheTQnLCBjb2xvcjogUGxhdGZvcm1Db2xvcignc3lzdGVtR3JheTQnKX0sXG4gICAgICAgIHtsYWJlbDogJ3N5c3RlbUdyYXk1JywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUdyYXk1Jyl9LFxuICAgICAgICB7bGFiZWw6ICdzeXN0ZW1HcmF5NicsIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1HcmF5NicpfSxcbiAgICAgICAgLy8gVHJhbnNwYXJlbnQgQ29sb3JcbiAgICAgICAge2xhYmVsOiAnY2xlYXInLCBjb2xvcjogUGxhdGZvcm1Db2xvcignY2xlYXInKX0sXG4gICAgICAgIHtsYWJlbDogJ2N1c3RvbUNvbG9yJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ2N1c3RvbUNvbG9yJyl9LFxuICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIGNvbG9ycyA9IFtcbiAgICAgICAge2xhYmVsOiAnP2F0dHIvY29sb3JBY2NlbnQnLCBjb2xvcjogUGxhdGZvcm1Db2xvcignP2F0dHIvY29sb3JBY2NlbnQnKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJz9hdHRyL2NvbG9yQmFja2dyb3VuZEZsb2F0aW5nJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignP2F0dHIvY29sb3JCYWNrZ3JvdW5kRmxvYXRpbmcnKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnP2F0dHIvY29sb3JCdXR0b25Ob3JtYWwnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCc/YXR0ci9jb2xvckJ1dHRvbk5vcm1hbCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICc/YXR0ci9jb2xvckNvbnRyb2xBY3RpdmF0ZWQnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCc/YXR0ci9jb2xvckNvbnRyb2xBY3RpdmF0ZWQnKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnP2F0dHIvY29sb3JDb250cm9sSGlnaGxpZ2h0JyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignP2F0dHIvY29sb3JDb250cm9sSGlnaGxpZ2h0JyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJz9hdHRyL2NvbG9yQ29udHJvbE5vcm1hbCcsXG4gICAgICAgICAgY29sb3I6IFBsYXRmb3JtQ29sb3IoJz9hdHRyL2NvbG9yQ29udHJvbE5vcm1hbCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICc/YW5kcm9pZDpjb2xvckVycm9yJyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignP2FuZHJvaWQ6Y29sb3JFcnJvcicpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICc/YW5kcm9pZDphdHRyL2NvbG9yRXJyb3InLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCc/YW5kcm9pZDphdHRyL2NvbG9yRXJyb3InKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnP2F0dHIvY29sb3JQcmltYXJ5JyxcbiAgICAgICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignP2F0dHIvY29sb3JQcmltYXJ5JyksXG4gICAgICAgIH0sXG4gICAgICAgIHtsYWJlbDogJz9jb2xvclByaW1hcnlEYXJrJywgY29sb3I6IFBsYXRmb3JtQ29sb3IoJz9jb2xvclByaW1hcnlEYXJrJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdAYW5kcm9pZDpjb2xvci9ob2xvX3B1cnBsZScsXG4gICAgICAgICAgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ0BhbmRyb2lkOmNvbG9yL2hvbG9fcHVycGxlJyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0BhbmRyb2lkOmNvbG9yL2hvbG9fZ3JlZW5fbGlnaHQnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdAYW5kcm9pZDpjb2xvci9ob2xvX2dyZWVuX2xpZ2h0JyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0Bjb2xvci9jYXRhbHlzdF9yZWRib3hfYmFja2dyb3VuZCcsXG4gICAgICAgICAgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ0Bjb2xvci9jYXRhbHlzdF9yZWRib3hfYmFja2dyb3VuZCcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdAY29sb3IvY2F0YWx5c3RfbG9nYm94X2JhY2tncm91bmQnLFxuICAgICAgICAgIGNvbG9yOiBQbGF0Zm9ybUNvbG9yKCdAY29sb3IvY2F0YWx5c3RfbG9nYm94X2JhY2tncm91bmQnKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgbGV0IHRhYmxlID0gW107XG4gICAgZm9yIChsZXQgY29sb3Igb2YgY29sb3JzKSB7XG4gICAgICB0YWJsZS5wdXNoKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30ga2V5PXtjb2xvci5sYWJlbH0+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbENlbGx9Pntjb2xvci5sYWJlbH08L1RleHQ+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIC4uLnN0eWxlcy5jb2xvckNlbGwsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuY29sb3IsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz4sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGFibGU7XG4gIH1cblxuICByZXR1cm4gPFZpZXcgc3R5bGU9e3N0eWxlcy5jb2x1bW59PntjcmVhdGVUYWJsZSgpfTwvVmlldz47XG59XG5cbmZ1bmN0aW9uIEZhbGxiYWNrQ29sb3JzRXhhbXBsZSgpIHtcbiAgbGV0IGNvbG9yID0ge307XG4gIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2lvcycpIHtcbiAgICBjb2xvciA9IHtcbiAgICAgIGxhYmVsOiBcIlBsYXRmb3JtQ29sb3IoJ2JvZ3VzJywgJ3N5c3RlbUdyZWVuQ29sb3InKVwiLFxuICAgICAgY29sb3I6IFBsYXRmb3JtQ29sb3IoJ2JvZ3VzJywgJ3N5c3RlbUdyZWVuQ29sb3InKSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCcpIHtcbiAgICBjb2xvciA9IHtcbiAgICAgIGxhYmVsOiBcIlBsYXRmb3JtQ29sb3IoJ2JvZ3VzJywgJ0Bjb2xvci9jYXRhbHlzdF9yZWRib3hfYmFja2dyb3VuZCcpXCIsXG4gICAgICBjb2xvcjogUGxhdGZvcm1Db2xvcignYm9ndXMnLCAnQGNvbG9yL2NhdGFseXN0X3JlZGJveF9iYWNrZ3JvdW5kJyksXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb2xvciA9IHtcbiAgICAgIGxhYmVsOiAnVW5leHBlY3RlZCBQbGF0Zm9ybS5PUzogJyArIFBsYXRmb3JtLk9TLFxuICAgICAgY29sb3I6ICdyZWQnLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29sdW1ufT5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbENlbGx9Pntjb2xvci5sYWJlbH08L1RleHQ+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnN0eWxlcy5jb2xvckNlbGwsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmNvbG9yLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yLmNvbG9yLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBEeW5hbWljQ29sb3JzRXhhbXBsZSgpIHtcbiAgcmV0dXJuIFBsYXRmb3JtLk9TID09PSAnaW9zJyA/IChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbHVtbn0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMubGFiZWxDZWxsfT5cbiAgICAgICAgICBEeW5hbWljQ29sb3JJT1Moeyd7XFxuJ31cbiAgICAgICAgICB7JyAgJ31saWdodDogJ3JlZCcsIGRhcms6ICdibHVlJ3snXFxuJ31cbiAgICAgICAgICB7J30nfSlcbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAuLi5zdHlsZXMuY29sb3JDZWxsLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBEeW5hbWljQ29sb3JJT1Moe2xpZ2h0OiAncmVkJywgZGFyazogJ2JsdWUnfSksXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbENlbGx9PlxuICAgICAgICAgIER5bmFtaWNDb2xvcklPUyh7J3tcXG4nfVxuICAgICAgICAgIHsnICAnfWxpZ2h0OiAncmVkJywgZGFyazogJ2JsdWUneydcXG4nfVxuICAgICAgICAgIHsnfSd9KVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnN0eWxlcy5jb2xvckNlbGwsXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogRHluYW1pY0NvbG9ySU9TKHtsaWdodDogJ3JlZCcsIGRhcms6ICdibHVlJ30pLFxuICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbENlbGx9PlxuICAgICAgICAgIER5bmFtaWNDb2xvcklPUyh7J3tcXG4nfVxuICAgICAgICAgIHsnICAnfWxpZ2h0OiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1CbHVlQ29sb3InKSx7J1xcbid9XG4gICAgICAgICAgeycgICd9ZGFyazogUGxhdGZvcm1Db2xvcignc3lzdGVtUmVkQ29sb3InKSx7J1xcbid9XG4gICAgICAgICAgeyd9J30pXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLmNvbG9yQ2VsbCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogRHluYW1pY0NvbG9ySU9TKHtcbiAgICAgICAgICAgICAgbGlnaHQ6IFBsYXRmb3JtQ29sb3IoJ3N5c3RlbUJsdWVDb2xvcicpLFxuICAgICAgICAgICAgICBkYXJrOiBQbGF0Zm9ybUNvbG9yKCdzeXN0ZW1SZWRDb2xvcicpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICkgOiAoXG4gICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbENlbGx9Pk5vdCBhcHBsaWNhYmxlIG9uIHRoaXMgcGxhdGZvcm08L1RleHQ+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFZhcmlhbnRDb2xvcnNFeGFtcGxlKCkge1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29sdW1ufT5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbENlbGx9PlxuICAgICAgICAgIHtQbGF0Zm9ybS5zZWxlY3Qoe1xuICAgICAgICAgICAgaW9zOiBcIkR5bmFtaWNDb2xvcklPUyh7bGlnaHQ6ICdyZWQnLCBkYXJrOiAnYmx1ZSd9KVwiLFxuICAgICAgICAgICAgYW5kcm9pZDogXCJQbGF0Zm9ybUNvbG9yKCc/YXR0ci9jb2xvckFjY2VudCcpXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiAnVW5leHBlY3RlZCBQbGF0Zm9ybS5PUzogJyArIFBsYXRmb3JtLk9TLFxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnN0eWxlcy5jb2xvckNlbGwsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgICAgICAgIFBsYXRmb3JtLk9TID09PSAnaW9zJ1xuICAgICAgICAgICAgICAgID8gRHluYW1pY0NvbG9ySU9TKHtsaWdodDogJ3JlZCcsIGRhcms6ICdibHVlJ30pXG4gICAgICAgICAgICAgICAgOiBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnXG4gICAgICAgICAgICAgICAgPyBQbGF0Zm9ybUNvbG9yKCc/YXR0ci9jb2xvckFjY2VudCcpXG4gICAgICAgICAgICAgICAgOiAncmVkJyxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb2x1bW46IHtmbGV4OiAxLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJ30sXG4gIHJvdzoge2ZsZXg6IDAuNzUsIGZsZXhEaXJlY3Rpb246ICdyb3cnfSxcbiAgbGFiZWxDZWxsOiB7XG4gICAgZmxleDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnc3RyZXRjaCcsXG4gICAgLi4uUGxhdGZvcm0uc2VsZWN0KHtcbiAgICAgIGlvczoge2NvbG9yOiBQbGF0Zm9ybUNvbG9yKCdsYWJlbENvbG9yJyl9LFxuICAgICAgZGVmYXVsdDoge2NvbG9yOiAnYmxhY2snfSxcbiAgICB9KSxcbiAgfSxcbiAgY29sb3JDZWxsOiB7ZmxleDogMC4yNSwgYWxpZ25JdGVtczogJ3N0cmV0Y2gnfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ1BsYXRmb3JtQ29sb3InO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9wbGF0Zm9ybWNvbG9yJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPVxuICAnRXhhbXBsZXMgdGhhdCBzaG93IGhvdyBQbGF0Zm9ybUNvbG9ycyBtYXkgYmUgdXNlZCBpbiBhbiBhcHAuJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ1BsYXRmb3JtIENvbG9ycycsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFBsYXRmb3JtQ29sb3JzRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdGYWxsYmFjayBDb2xvcnMnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxGYWxsYmFja0NvbG9yc0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnaU9TIER5bmFtaWMgQ29sb3JzJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8RHluYW1pY0NvbG9yc0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVmFyaWFudCBDb2xvcnMnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxWYXJpYW50Q29sb3JzRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbnR5cGUgRXhhbXBsZUJveENvbXBvbmVudFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIG9uTG9nOiAobXNnOiBzdHJpbmcpID0+IHZvaWQsXG58fT47XG5cbnR5cGUgRXhhbXBsZUJveFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxFeGFtcGxlQm94Q29tcG9uZW50UHJvcHM+LFxufH0+O1xuXG50eXBlIEV4YW1wbGVCb3hTdGF0ZSA9ICRSZWFkT25seTx7fFxuICBsb2c6IHN0cmluZ1tdLFxufH0+O1xuXG5jbGFzcyBFeGFtcGxlQm94IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEV4YW1wbGVCb3hQcm9wcywgRXhhbXBsZUJveFN0YXRlPiB7XG4gIHN0YXRlOiBFeGFtcGxlQm94U3RhdGUgPSB7XG4gICAgbG9nOiBbXSxcbiAgfTtcblxuICBoYW5kbGVMb2cgPSAobXNnOiBzdHJpbmcpID0+IHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy5zdGF0ZS5sb2cgPSB0aGlzLnN0YXRlLmxvZy5jb25jYXQoW21zZ10pO1xuICB9O1xuXG4gIGZsdXNoUmVhY3RDaGFuZ2VzID0gKCkgPT4ge1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FwdHVyZSBwaGFzZSBvZiBidWJibGluZyB0byBhcHBlbmQgc2VwYXJhdG9yIGJlZm9yZSBhbnkgb2YgdGhlIGJ1YmJsaW5nXG4gICAqIGhhcHBlbnMuXG4gICAqL1xuICBoYW5kbGVUb3VjaENhcHR1cmUgPSAoKSA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMuc3RhdGUubG9nID0gdGhpcy5zdGF0ZS5sb2cuY29uY2F0KFsnLS0tJ10pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCB7Q29tcG9uZW50fSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIG9uVG91Y2hFbmRDYXB0dXJlPXt0aGlzLmhhbmRsZVRvdWNoQ2FwdHVyZX1cbiAgICAgICAgICBvblRvdWNoU3RhcnQ9e3RoaXMuZmx1c2hSZWFjdENoYW5nZXN9PlxuICAgICAgICAgIDxDb21wb25lbnQgb25Mb2c9e3RoaXMuaGFuZGxlTG9nfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMubG9nQm94fT5cbiAgICAgICAgICA8RGVtb1RleHQgc3R5bGU9e3N0eWxlcy5sb2dUZXh0fT5cbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxvZy5qb2luKCdcXG4nKX1cbiAgICAgICAgICA8L0RlbW9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBOb25lRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDwkRmxvd0ZpeE1lUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBvblRvdWNoU3RhcnQ9eygpID0+IHRoaXMucHJvcHMub25Mb2coJ0EgdW5zcGVjaWZpZWQgdG91Y2hlZCcpfVxuICAgICAgICBzdHlsZT17c3R5bGVzLmJveH0+XG4gICAgICAgIDxEZW1vVGV4dCBzdHlsZT17c3R5bGVzLnRleHR9PkE6IHVuc3BlY2lmaWVkPC9EZW1vVGV4dD5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBwb2ludGVyRXZlbnRzPVwibm9uZVwiXG4gICAgICAgICAgb25Ub3VjaFN0YXJ0PXsoKSA9PiB0aGlzLnByb3BzLm9uTG9nKCdCIG5vbmUgdG91Y2hlZCcpfVxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJveFBhc3NlZFRocm91Z2hdfT5cbiAgICAgICAgICA8RGVtb1RleHQgc3R5bGU9e1tzdHlsZXMudGV4dCwgc3R5bGVzLnRleHRQYXNzZWRUaHJvdWdoXX0+XG4gICAgICAgICAgICBCOiBub25lXG4gICAgICAgICAgPC9EZW1vVGV4dD5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0PXsoKSA9PiB0aGlzLnByb3BzLm9uTG9nKCdDIHVuc3BlY2lmaWVkIHRvdWNoZWQnKX1cbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLmJveFBhc3NlZFRocm91Z2hdfT5cbiAgICAgICAgICAgIDxEZW1vVGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0LCBzdHlsZXMudGV4dFBhc3NlZFRocm91Z2hdfT5cbiAgICAgICAgICAgICAgQzogdW5zcGVjaWZpZWRcbiAgICAgICAgICAgIDwvRGVtb1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBOb25lU3R5bGVFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQSB1bnNwZWNpZmllZCB0b3VjaGVkJyl9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMuYm94fT5cbiAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QTogdW5zcGVjaWZpZWQ8L0RlbW9UZXh0PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQiBub25lIHRvdWNoZWQnKX1cbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc3R5bGVzLmJveCxcbiAgICAgICAgICAgIHN0eWxlcy5ib3hQYXNzZWRUaHJvdWdoLFxuICAgICAgICAgICAgc3R5bGVzLnBvaW50ZXJFdmVudE5vbmUsXG4gICAgICAgICAgXX0+XG4gICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtbc3R5bGVzLnRleHQsIHN0eWxlcy50ZXh0UGFzc2VkVGhyb3VnaF19PlxuICAgICAgICAgICAgQjogbm9uZVxuICAgICAgICAgIDwvRGVtb1RleHQ+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQyB1bnNwZWNpZmllZCB0b3VjaGVkJyl9XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3hQYXNzZWRUaHJvdWdoXX0+XG4gICAgICAgICAgICA8RGVtb1RleHQgc3R5bGU9e1tzdHlsZXMudGV4dCwgc3R5bGVzLnRleHRQYXNzZWRUaHJvdWdoXX0+XG4gICAgICAgICAgICAgIEM6IHVuc3BlY2lmaWVkXG4gICAgICAgICAgICA8L0RlbW9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGVjaWFsIGRlbW8gdGV4dCB0aGF0IG1ha2VzIGl0c2VsZiB1bnRvdWNoYWJsZSBzbyB0aGF0IGl0IGRvZXNuJ3QgZGVzdHJveVxuICogdGhlIGV4cGVyaW1lbnQgYW5kIGNvbmZ1c2UgdGhlIG91dHB1dC5cbiAqL1xuY2xhc3MgRGVtb1RleHQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8JEZsb3dGaXhNZVByb3BzPiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgcG9pbnRlckV2ZW50cz1cIm5vbmVcIj5cbiAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMucHJvcHMuc3R5bGV9Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEJveE5vbmVFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQSB1bnNwZWNpZmllZCB0b3VjaGVkJyl9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMuYm94fT5cbiAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QTogdW5zcGVjaWZpZWQ8L0RlbW9UZXh0PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJib3gtbm9uZVwiXG4gICAgICAgICAgb25Ub3VjaFN0YXJ0PXsoKSA9PiB0aGlzLnByb3BzLm9uTG9nKCdCIGJveC1ub25lIHRvdWNoZWQnKX1cbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3hQYXNzZWRUaHJvdWdoXX0+XG4gICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtbc3R5bGVzLnRleHQsIHN0eWxlcy50ZXh0UGFzc2VkVGhyb3VnaF19PlxuICAgICAgICAgICAgQjogYm94LW5vbmVcbiAgICAgICAgICA8L0RlbW9UZXh0PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ9eygpID0+IHRoaXMucHJvcHMub25Mb2coJ0MgdW5zcGVjaWZpZWQgdG91Y2hlZCcpfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5ib3h9PlxuICAgICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QzogdW5zcGVjaWZpZWQ8L0RlbW9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgcG9pbnRlckV2ZW50cz1cImF1dG9cIlxuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0PXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uTG9nKCdDIGV4cGxpY2l0bHkgdW5zcGVjaWZpZWQgdG91Y2hlZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3hdfT5cbiAgICAgICAgICAgIDxEZW1vVGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0XX0+QzogZXhwbGljaXRseSB1bnNwZWNpZmllZDwvRGVtb1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBCb3hOb25lU3R5bGVFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQSB1bnNwZWNpZmllZCB0b3VjaGVkJyl9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMuYm94fT5cbiAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QTogdW5zcGVjaWZpZWQ8L0RlbW9UZXh0PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQiBib3gtbm9uZSB0b3VjaGVkJyl9XG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5ib3gsXG4gICAgICAgICAgICBzdHlsZXMuYm94UGFzc2VkVGhyb3VnaCxcbiAgICAgICAgICAgIHN0eWxlcy5wb2ludGVyRXZlbnRCb3hOb25lLFxuICAgICAgICAgIF19PlxuICAgICAgICAgIDxEZW1vVGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0LCBzdHlsZXMudGV4dFBhc3NlZFRocm91Z2hdfT5cbiAgICAgICAgICAgIEI6IGJveC1ub25lXG4gICAgICAgICAgPC9EZW1vVGV4dD5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0PXsoKSA9PiB0aGlzLnByb3BzLm9uTG9nKCdDIHVuc3BlY2lmaWVkIHRvdWNoZWQnKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuYm94fT5cbiAgICAgICAgICAgIDxEZW1vVGV4dCBzdHlsZT17c3R5bGVzLnRleHR9PkM6IHVuc3BlY2lmaWVkPC9EZW1vVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkxvZygnQyBleHBsaWNpdGx5IHVuc3BlY2lmaWVkIHRvdWNoZWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMucG9pbnRlckV2ZW50QXV0b119PlxuICAgICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtbc3R5bGVzLnRleHRdfT5DOiBleHBsaWNpdGx5IHVuc3BlY2lmaWVkPC9EZW1vVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIEJveE9ubHlFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PCRGbG93Rml4TWVQcm9wcz4ge1xuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQSB1bnNwZWNpZmllZCB0b3VjaGVkJyl9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMuYm94fT5cbiAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QTogdW5zcGVjaWZpZWQ8L0RlbW9UZXh0PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJib3gtb25seVwiXG4gICAgICAgICAgb25Ub3VjaFN0YXJ0PXsoKSA9PiB0aGlzLnByb3BzLm9uTG9nKCdCIGJveC1vbmx5IHRvdWNoZWQnKX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLmJveH0+XG4gICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QjogYm94LW9ubHk8L0RlbW9UZXh0PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ9eygpID0+IHRoaXMucHJvcHMub25Mb2coJ0MgdW5zcGVjaWZpZWQgdG91Y2hlZCcpfVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm94UGFzc2VkVGhyb3VnaF19PlxuICAgICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtbc3R5bGVzLnRleHQsIHN0eWxlcy50ZXh0UGFzc2VkVGhyb3VnaF19PlxuICAgICAgICAgICAgICBDOiB1bnNwZWNpZmllZFxuICAgICAgICAgICAgPC9EZW1vVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJhdXRvXCJcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkxvZygnQyBleHBsaWNpdGx5IHVuc3BlY2lmaWVkIHRvdWNoZWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm94UGFzc2VkVGhyb3VnaF19PlxuICAgICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtbc3R5bGVzLnRleHQsIHN0eWxlcy50ZXh0UGFzc2VkVGhyb3VnaF19PlxuICAgICAgICAgICAgICBDOiBleHBsaWNpdGx5IHVuc3BlY2lmaWVkXG4gICAgICAgICAgICA8L0RlbW9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQm94T25seVN0eWxlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDwkRmxvd0ZpeE1lUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBvblRvdWNoU3RhcnQ9eygpID0+IHRoaXMucHJvcHMub25Mb2coJ0EgdW5zcGVjaWZpZWQgdG91Y2hlZCcpfVxuICAgICAgICBzdHlsZT17c3R5bGVzLmJveH0+XG4gICAgICAgIDxEZW1vVGV4dCBzdHlsZT17c3R5bGVzLnRleHR9PkE6IHVuc3BlY2lmaWVkPC9EZW1vVGV4dD5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBvblRvdWNoU3RhcnQ9eygpID0+IHRoaXMucHJvcHMub25Mb2coJ0IgYm94LW9ubHkgdG91Y2hlZCcpfVxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmJveCwgc3R5bGVzLnBvaW50ZXJFdmVudEJveE9ubHldfT5cbiAgICAgICAgICA8RGVtb1RleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5COiBib3gtb25seTwvRGVtb1RleHQ+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQyB1bnNwZWNpZmllZCB0b3VjaGVkJyl9XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5ib3gsIHN0eWxlcy5ib3hQYXNzZWRUaHJvdWdoXX0+XG4gICAgICAgICAgICA8RGVtb1RleHQgc3R5bGU9e1tzdHlsZXMudGV4dCwgc3R5bGVzLnRleHRQYXNzZWRUaHJvdWdoXX0+XG4gICAgICAgICAgICAgIEM6IHVuc3BlY2lmaWVkXG4gICAgICAgICAgICA8L0RlbW9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0PXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uTG9nKCdDIGV4cGxpY2l0bHkgdW5zcGVjaWZpZWQgdG91Y2hlZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBzdHlsZXMuYm94LFxuICAgICAgICAgICAgICBzdHlsZXMuYm94UGFzc2VkVGhyb3VnaCxcbiAgICAgICAgICAgICAgc3R5bGVzLnBvaW50ZXJFdmVudEF1dG8sXG4gICAgICAgICAgICBdfT5cbiAgICAgICAgICAgIDxEZW1vVGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0LCBzdHlsZXMudGV4dFBhc3NlZFRocm91Z2hdfT5cbiAgICAgICAgICAgICAgQzogZXhwbGljaXRseSB1bnNwZWNpZmllZFxuICAgICAgICAgICAgPC9EZW1vVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbnR5cGUgT3ZlcmZsb3dFeGFtcGxlUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nIHwgJ3Zpc2libGUnLFxuICBvbkxvZzogKG1zZzogc3RyaW5nKSA9PiB2b2lkLFxufH0+O1xuXG5jbGFzcyBPdmVyZmxvd0V4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8T3ZlcmZsb3dFeGFtcGxlUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHtvdmVyZmxvd30gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBvblRvdWNoU3RhcnQ9eygpID0+IHRoaXMucHJvcHMub25Mb2coYEEgb3ZlcmZsb3cgJHtvdmVyZmxvd30gdG91Y2hlZGApfVxuICAgICAgICBzdHlsZT17W1xuICAgICAgICAgIHN0eWxlcy5ib3gsXG4gICAgICAgICAgc3R5bGVzLmJveFdpdGhPdmVyZmxvd1NldCxcbiAgICAgICAgICB7b3ZlcmZsb3c6IHRoaXMucHJvcHMub3ZlcmZsb3d9LFxuICAgICAgICBdfT5cbiAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QTogb3ZlcmZsb3c6IHtvdmVyZmxvd308L0RlbW9UZXh0PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT4gdGhpcy5wcm9wcy5vbkxvZygnQiBvdmVyZmxvd2luZyB0b3VjaGVkJyl9XG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm94T3ZlcmZsb3dpbmddfT5cbiAgICAgICAgICA8RGVtb1RleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5COiBvdmVyZmxvd2luZzwvRGVtb1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBvblRvdWNoU3RhcnQ9eygpID0+IHRoaXMucHJvcHMub25Mb2coJ0MgZnVsbHkgb3V0c2lkZSB0b3VjaGVkJyl9XG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm94RnVsbHlPdXRzaWRlXX0+XG4gICAgICAgICAgPERlbW9UZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+QzogZnVsbHkgb3V0c2lkZTwvRGVtb1RleHQ+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkxvZygnRCBmdWxseSBvdXRzaWRlIGNoaWxkIHRvdWNoZWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCBzdHlsZXMuYm94RnVsbHlPdXRzaWRlQ2hpbGRdfT5cbiAgICAgICAgICAgIDxEZW1vVGV4dCBzdHlsZT17c3R5bGVzLnRleHR9PkQ6IGNoaWxkIG9mIGZ1bGx5IG91dHNpZGU8L0RlbW9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgT3ZlcmZsb3dWaXNpYmxlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxFeGFtcGxlQm94Q29tcG9uZW50UHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiA8T3ZlcmZsb3dFeGFtcGxlIHsuLi50aGlzLnByb3BzfSBvdmVyZmxvdz1cInZpc2libGVcIiAvPjtcbiAgfVxufVxuXG5jbGFzcyBPdmVyZmxvd0hpZGRlbkV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8RXhhbXBsZUJveENvbXBvbmVudFByb3BzPiB7XG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gPE92ZXJmbG93RXhhbXBsZSB7Li4udGhpcy5wcm9wc30gb3ZlcmZsb3c9XCJoaWRkZW5cIiAvPjtcbiAgfVxufVxuXG50eXBlIEV4YW1wbGVDbGFzcyA9IHtcbiAgQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT4sXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIC4uLlxufTtcblxuY29uc3QgZXhhbXBsZUNsYXNzZXM6IEFycmF5PEV4YW1wbGVDbGFzcz4gPSBbXG4gIHtcbiAgICBDb21wb25lbnQ6IE5vbmVFeGFtcGxlLFxuICAgIHRpdGxlOiAnYG5vbmVgJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdgbm9uZWAgY2F1c2VzIHRvdWNoIGV2ZW50cyBvbiB0aGUgY29udGFpbmVyIGFuZCBpdHMgY2hpbGQgY29tcG9uZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIHBhcmVudCBjb250YWluZXIuJyxcbiAgfSxcbiAge1xuICAgIENvbXBvbmVudDogTm9uZVN0eWxlRXhhbXBsZSxcbiAgICB0aXRsZTogJ2Bub25lYCBzdHlsZScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnYG5vbmVgIGNhdXNlcyB0b3VjaCBldmVudHMgb24gdGhlIGNvbnRhaW5lciBhbmQgaXRzIGNoaWxkIGNvbXBvbmVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBwYXJlbnQgY29udGFpbmVyLicsXG4gIH0sXG4gIHtcbiAgICBDb21wb25lbnQ6IEJveE5vbmVFeGFtcGxlLFxuICAgIHRpdGxlOiAnYGJveC1ub25lYCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnYGJveC1ub25lYCBjYXVzZXMgdG91Y2ggZXZlbnRzIG9uIHRoZSBjb250YWluZXIgdG8gcGFzcyB0aHJvdWdoIGFuZCB3aWxsIG9ubHkgZGV0ZWN0IHRvdWNoIGV2ZW50cyBvbiBpdHMgY2hpbGQgY29tcG9uZW50cy4nLFxuICB9LFxuICB7XG4gICAgQ29tcG9uZW50OiBCb3hOb25lU3R5bGVFeGFtcGxlLFxuICAgIHRpdGxlOiAnYGJveC1ub25lYCBzdHlsZScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnYGJveC1ub25lYCBjYXVzZXMgdG91Y2ggZXZlbnRzIG9uIHRoZSBjb250YWluZXIgdG8gcGFzcyB0aHJvdWdoIGFuZCB3aWxsIG9ubHkgZGV0ZWN0IHRvdWNoIGV2ZW50cyBvbiBpdHMgY2hpbGQgY29tcG9uZW50cy4nLFxuICB9LFxuICB7XG4gICAgQ29tcG9uZW50OiBCb3hPbmx5RXhhbXBsZSxcbiAgICB0aXRsZTogJ2Bib3gtb25seWAnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJgYm94LW9ubHlgIGNhdXNlcyB0b3VjaCBldmVudHMgb24gdGhlIGNvbnRhaW5lcidzIGNoaWxkIGNvbXBvbmVudHMgdG8gcGFzcyB0aHJvdWdoIGFuZCB3aWxsIG9ubHkgZGV0ZWN0IHRvdWNoIGV2ZW50cyBvbiB0aGUgY29udGFpbmVyIGl0c2VsZi5cIixcbiAgfSxcbiAge1xuICAgIENvbXBvbmVudDogQm94T25seVN0eWxlRXhhbXBsZSxcbiAgICB0aXRsZTogJ2Bib3gtb25seWAgc3R5bGUnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJgYm94LW9ubHlgIGNhdXNlcyB0b3VjaCBldmVudHMgb24gdGhlIGNvbnRhaW5lcidzIGNoaWxkIGNvbXBvbmVudHMgdG8gcGFzcyB0aHJvdWdoIGFuZCB3aWxsIG9ubHkgZGV0ZWN0IHRvdWNoIGV2ZW50cyBvbiB0aGUgY29udGFpbmVyIGl0c2VsZi5cIixcbiAgfSxcbiAge1xuICAgIENvbXBvbmVudDogT3ZlcmZsb3dWaXNpYmxlRXhhbXBsZSxcbiAgICB0aXRsZTogJ2BvdmVyZmxvdzogdmlzaWJsZWAnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ2BvdmVyZmxvdzogdmlzaWJsZWAgc3R5bGUgc2hvdWxkIGFsbG93IHN1YmVsZW1lbnRzIHRoYXQgYXJlIG91dHNpZGUgb2YgdGhlIHBhcmVudCBib3ggdG8gYmUgdG91Y2hhYmxlLiBUYXBwaW5nIHRoZSBwYXJ0cyBvZiBCb3ggQiBvdXRzaWRlIEJveCBBIHNob3VsZCBwcmludCBcIkIgdG91Y2hlZFwiIGFuZCBcIkEgdG91Y2hlZFwiLCBhbmQgdGFwcGluZyBCb3ggQyBzaG91bGQgYWxzbyBwcmludCBcIkMgdG91Y2hlZFwiIGFuZCBcIkEgdG91Y2hlZFwiLicsXG4gIH0sXG4gIHtcbiAgICBDb21wb25lbnQ6IE92ZXJmbG93SGlkZGVuRXhhbXBsZSxcbiAgICB0aXRsZTogJ2BvdmVyZmxvdzogaGlkZGVuYCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnYG92ZXJmbG93OiBoaWRkZW5gIHN0eWxlIHNob3VsZCBvbmx5IGFsbG93IHN1YmVsZW1lbnRzIHdpdGhpbiB0aGUgcGFyZW50IGJveCB0byBiZSB0b3VjaGFibGUuIFRhcHBpbmcganVzdCBiZWxvdyBCb3ggQSAod2hlcmUgQm94IEIgd291bGQgb3RoZXJ3aXNlIGV4dGVuZCBpZiBpdCB3ZXJlblxcJ3QgY3V0IG9mZikgc2hvdWxkIG5vdCB0cmlnZ2VyIGFueSB0b3VjaGVzIG9yIG1lc3NhZ2VzLiBUb3VjaGluZyBCb3ggRCAoaW5zaWRlIHRoZSBib3VuZHMpIHNob3VsZCBwcmludCBcIkQgdG91Y2hlZFwiIGFuZCBcIkEgdG91Y2hlZFwiLicsXG4gIH0sXG5dO1xuXG5jb25zdCBpbmZvVG9FeGFtcGxlID0gKGluZm86IEV4YW1wbGVDbGFzcykgPT4ge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiBpbmZvLnRpdGxlLFxuICAgIGRlc2NyaXB0aW9uOiBpbmZvLmRlc2NyaXB0aW9uLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIDxFeGFtcGxlQm94IGtleT17aW5mby50aXRsZX0gQ29tcG9uZW50PXtpbmZvLkNvbXBvbmVudH0gLz47XG4gICAgfSxcbiAgfTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgdGV4dDoge1xuICAgIGZvbnRTaXplOiAxMCxcbiAgICBjb2xvcjogJyM1NTc3Y2MnLFxuICB9LFxuICB0ZXh0UGFzc2VkVGhyb3VnaDoge1xuICAgIGNvbG9yOiAnIzg4YWFkZCcsXG4gIH0sXG4gIGJveDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNhYWNjZmYnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnIzc3OTljYycsXG4gICAgcGFkZGluZzogMTAsXG4gICAgbWFyZ2luOiA1LFxuICB9LFxuICBib3hQYXNzZWRUaHJvdWdoOiB7XG4gICAgYm9yZGVyQ29sb3I6ICcjOTliYmVlJyxcbiAgfSxcbiAgYm94V2l0aE92ZXJmbG93U2V0OiB7XG4gICAgcGFkZGluZ0JvdHRvbTogNDAsXG4gICAgbWFyZ2luQm90dG9tOiA1MCxcbiAgfSxcbiAgYm94T3ZlcmZsb3dpbmc6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDMwLFxuICAgIHBhZGRpbmdCb3R0b206IDQwLFxuICB9LFxuICBib3hGdWxseU91dHNpZGU6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAyMDAsXG4gICAgdG9wOiA2NSxcbiAgfSxcbiAgYm94RnVsbHlPdXRzaWRlQ2hpbGQ6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogLTY1LFxuICAgIHdpZHRoOiAxMDAsXG4gIH0sXG4gIGxvZ1RleHQ6IHtcbiAgICBmb250U2l6ZTogOSxcbiAgfSxcbiAgbG9nQm94OiB7XG4gICAgcGFkZGluZzogMjAsXG4gICAgbWFyZ2luOiAxMCxcbiAgICBib3JkZXJXaWR0aDogMC41LFxuICAgIGJvcmRlckNvbG9yOiAnI2YwZjBmMCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZjlmOScsXG4gIH0sXG4gIHBvaW50ZXJFdmVudEJveE5vbmU6IHtcbiAgICBwb2ludGVyRXZlbnRzOiAnYm94LW5vbmUnLFxuICB9LFxuICBwb2ludGVyRXZlbnRCb3hPbmx5OiB7XG4gICAgcG9pbnRlckV2ZW50czogJ2JveC1vbmx5JyxcbiAgfSxcbiAgcG9pbnRlckV2ZW50Tm9uZToge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgfSxcbiAgcG9pbnRlckV2ZW50QXV0bzoge1xuICAgIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnRzLnRpdGxlID0gJ1BvaW50ZXIgRXZlbnRzJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnQmFzaWMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICgnRGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIHBvaW50ZXJFdmVudHMgcHJvcCBvZiBhICcgK1xuICAnVmlldyB0byBjb250cm9sIGhvdyB0b3VjaGVzIHNob3VsZCBiZSBoYW5kbGVkLic6IHN0cmluZyk7XG5leHBvcnRzLmV4YW1wbGVzID0gKGV4YW1wbGVDbGFzc2VzLm1hcChpbmZvVG9FeGFtcGxlKTogQXJyYXk8YW55Pik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgU3R5bGVTaGVldCxcbiAgVGV4dCxcbiAgVmlldyxcbiAgcmVxdWlyZU5hdGl2ZUNvbXBvbmVudCxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY2xhc3MgQXBwUHJvcGVydGllc1VwZGF0ZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIC8vIERvIG5vdCByZXF1aXJlIHRoaXMgdW5sZXNzIHdlIGFyZSBhY3R1YWxseSByZW5kZXJpbmcuXG4gICAgY29uc3QgVXBkYXRlUHJvcGVydGllc0V4YW1wbGVWaWV3ID0gcmVxdWlyZU5hdGl2ZUNvbXBvbmVudDxcbiAgICAgIHwgYW55XG4gICAgICB8IHtjaGlsZHJlbjogUmVhY3QuTWl4ZWRFbGVtZW50LCBzdHlsZToge2hlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyfX0sXG4gICAgPignVXBkYXRlUHJvcGVydGllc0V4YW1wbGVWaWV3Jyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5cbiAgICAgICAgICBQcmVzcyB0aGUgYnV0dG9uIHRvIHVwZGF0ZSB0aGUgZmllbGQgYmVsb3cgYnkgcGFzc2luZyBuZXcgcHJvcGVydGllc1xuICAgICAgICAgIHRvIHRoZSBSTiBhcHAuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFVwZGF0ZVByb3BlcnRpZXNFeGFtcGxlVmlldyBzdHlsZT17c3R5bGVzLm5hdGl2ZVZpZXd9PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgICBFcnJvcjogVGhpcyBkZW1vIGlzIGFjY2Vzc2libGUgb25seSBmcm9tIFJOVGVzdGVyIGFwcFxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9VcGRhdGVQcm9wZXJ0aWVzRXhhbXBsZVZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBSb290Vmlld1NpemVGbGV4aWJpbGl0eUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8ey4uLn0+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIC8vIERvIG5vdCByZXF1aXJlIHRoaXMgdW5sZXNzIHdlIGFyZSBhY3R1YWxseSByZW5kZXJpbmcuXG4gICAgY29uc3QgRmxleGlibGVTaXplRXhhbXBsZVZpZXcgPSByZXF1aXJlTmF0aXZlQ29tcG9uZW50PFxuICAgICAgfCBhbnlcbiAgICAgIHwge2NoaWxkcmVuOiBSZWFjdC5NaXhlZEVsZW1lbnQsIHN0eWxlOiB7aGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXJ9fSxcbiAgICA+KCdGbGV4aWJsZVNpemVFeGFtcGxlVmlldycpO1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgUHJlc3MgdGhlIGJ1dHRvbiB0byByZXNpemUgaXQuIE9uIHJlc2l6ZSwgUkNUUm9vdFZpZXdEZWxlZ2F0ZSBpc1xuICAgICAgICAgIG5vdGlmaWVkLiBZb3UgY2FuIHVzZSBpdCB0byBoYW5kbGUgY29udGVudCBzaXplIHVwZGF0ZXMuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPEZsZXhpYmxlU2l6ZUV4YW1wbGVWaWV3IHN0eWxlPXtzdHlsZXMubmF0aXZlVmlld30+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50ZXh0fT5cbiAgICAgICAgICAgIEVycm9yOiBUaGlzIGRlbW8gaXMgYWNjZXNzaWJsZSBvbmx5IGZyb20gUk5UZXN0ZXIgYXBwXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0ZsZXhpYmxlU2l6ZUV4YW1wbGVWaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGNUZDRkYnLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgbWFyZ2luQm90dG9tOiAyMCxcbiAgfSxcbiAgbmF0aXZlVmlldzoge1xuICAgIGhlaWdodDogMTQwLFxuICAgIHdpZHRoOiAyODAsXG4gIH0sXG59KTtcblxuZXhwb3J0cy50aXRsZSA9ICdSQ1RSb290Vmlldyc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPVxuICAnRXhhbXBsZXMgdGhhdCBzaG93IHVzZWZ1bCBtZXRob2RzIHdoZW4gZW1iZWRkaW5nIFJlYWN0IE5hdGl2ZSBpbiBhIG5hdGl2ZSBhcHBsaWNhdGlvbic7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdVcGRhdGluZyBhcHAgcHJvcGVydGllcyBpbiBydW50aW1lJyxcbiAgICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8QXBwUHJvcGVydGllc1VwZGF0ZUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiBcIlJDVFJvb3RWaWV3J3Mgc2l6ZSBmbGV4aWJpbGl0eVwiLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxSb290Vmlld1NpemVGbGV4aWJpbGl0eUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqIEBmb3JtYXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQWxlcnQsXG4gIEFuaW1hdGVkLFxuICBCdXR0b24sXG4gIEkxOG5NYW5hZ2VyLFxuICBJbWFnZSxcbiAgUGl4ZWxSYXRpbyxcbiAgUGxhdGZvcm0sXG4gIFN0eWxlU2hlZXQsXG4gIFN3aXRjaCxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBUb3VjaGFibGVXaXRob3V0RmVlZGJhY2ssXG4gIFZpZXcsXG59ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbnR5cGUgUlRMVG9nZ2xlU3RhdGUgPSB7aXNSVEw6IGJvb2xlYW4sIC4uLn07XG5cbnR5cGUgQW5pbWF0aW9uU3RhdGUgPSB7XG4gIHRvZ2dsZVN0YXR1czogYW55LFxuICBsaW5lYXI6IE9iamVjdCxcbiAgd2luZG93V2lkdGg6IG51bWJlcixcbiAgLi4uXG59O1xuXG5jb25zdCBTQ0FMRSA9IFBpeGVsUmF0aW8uZ2V0KCk7XG5jb25zdCBJTUFHRV9ESU1FTlNJT04gPSAxMDAgKiBTQ0FMRTtcbmNvbnN0IElNQUdFX1NJWkUgPSBbSU1BR0VfRElNRU5TSU9OLCBJTUFHRV9ESU1FTlNJT05dO1xuXG5jb25zdCBJU19SVEwgPSBJMThuTWFuYWdlci5pc1JUTDtcblxuZnVuY3Rpb24gTGlzdEl0ZW0ocHJvcHM6IHtpbWFnZVNvdXJjZTogbnVtYmVyfSkge1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm93fT5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29sdW1uMX0+XG4gICAgICAgIDxJbWFnZSBzb3VyY2U9e3Byb3BzLmltYWdlU291cmNlfSBzdHlsZT17c3R5bGVzLmljb259IC8+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbHVtbjJ9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRleHRCb3h9PlxuICAgICAgICAgIDxUZXh0PlRleHQgVGV4dCBUZXh0PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbHVtbjN9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNtYWxsQnV0dG9ufT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmZvbnRTaXplU21hbGx9PkJ1dHRvbjwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3QgVGV4dEFsaWdubWVudEV4YW1wbGUgPSB3aXRoUlRMU3RhdGUoKHtpc1JUTCwgc2V0UlRMLCAuLi5wcm9wc30pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxSVExUb2dnbGVyIHNldFJUTD17c2V0UlRMfSBpc1JUTD17aXNSVEx9IC8+XG4gICAgICA8VmlldyBzdHlsZT17ZGlyZWN0aW9uU3R5bGUoaXNSVEwpfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3Byb3BzLnN0eWxlfT5cbiAgICAgICAgICBMZWZ0LXRvLVJpZ2h0IGxhbmd1YWdlIHdpdGhvdXQgdGV4dCBhbGlnbm1lbnQuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgc3R5bGU9e3Byb3BzLnN0eWxlfT5cbiAgICAgICAgICB7J1xcdTA2NDVcXHUwNjQ2IFxcdTA2MjdcXHUwNjQ0XFx1MDY0QVxcdTA2NDVcXHUwNjRBXFx1MDY0NiAnICtcbiAgICAgICAgICAgICdcXHUwNjI1XFx1MDY0NFxcdTA2NDkgXFx1MDYyN1xcdTA2NDRcXHUwNjRBXFx1MDYzM1xcdTA2MjdcXHUwNjMxICcgK1xuICAgICAgICAgICAgJ1xcdTA2MjdcXHUwNjQ0XFx1MDY0NFxcdTA2M0FcXHUwNjI5IFxcdTA2MkZcXHUwNjQ4XFx1MDY0NiAnICtcbiAgICAgICAgICAgICdcXHUwNjQ1XFx1MDYyRFxcdTA2MjdcXHUwNjMwXFx1MDYyN1xcdTA2MjkgXFx1MDYyN1xcdTA2NDRcXHUwNjQ2XFx1MDYzNSd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgc3R5bGU9e3Byb3BzLnN0eWxlfT5cbiAgICAgICAgICB7J1xcdTA1REVcXHUwNUQ5XFx1MDVERVxcdTA1RDlcXHUwNURGIFxcdTA1RENcXHUwNUU5XFx1MDVERVxcdTA1RDBcXHUwNURDICcgK1xuICAgICAgICAgICAgJ1xcdTA1RDRcXHUwNUU5XFx1MDVFNFxcdTA1RDQgXFx1MDVEMVxcdTA1RENcXHUwNUQ5ICcgK1xuICAgICAgICAgICAgJ1xcdTA1RDlcXHUwNUQ5XFx1MDVFOVxcdTA1RDVcXHUwNUU4IFxcdTA1RDhcXHUwNUU3XFx1MDVFMVxcdTA1RDgnfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufSk7XG5cbmNvbnN0IFRleHRJbnB1dEV4YW1wbGUgPSB3aXRoUlRMU3RhdGUoKHtpc1JUTCwgc2V0UlRMLCAuLi5wcm9wc30pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxSVExUb2dnbGVyIHNldFJUTD17c2V0UlRMfSBpc1JUTD17aXNSVEx9IC8+XG4gICAgICA8VmlldyBzdHlsZT17ZGlyZWN0aW9uU3R5bGUoaXNSVEwpfT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3Byb3BzLnN0eWxlfT5MUlQgb3IgUlRMIFRleHRJbnB1dC48L1RleHQ+XG4gICAgICAgIDxUZXh0SW5wdXQgc3R5bGU9e3Byb3BzLnN0eWxlfSAvPlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn0pO1xuXG5jb25zdCBJY29uc0V4YW1wbGUgPSB3aXRoUlRMU3RhdGUoKHtpc1JUTCwgc2V0UlRMfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFJUTFRvZ2dsZXIgc2V0UlRMPXtzZXRSVEx9IGlzUlRMPXtpc1JUTH0gLz5cbiAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmZsZXhEaXJlY3Rpb25Sb3csIGRpcmVjdGlvblN0eWxlKGlzUlRMKV19PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL2xpa2UucG5nJyl9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmltYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5mb250U2l6ZUV4dHJhU21hbGx9PlxuICAgICAgICAgICAgV2l0aG91dCBkaXJlY3Rpb25hbCBtZWFuaW5nXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucmlnaHRBbGlnblN0eWxlfT5cbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL3Bva2UucG5nJyl9XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5pbWFnZSwgc3R5bGVzLndpdGhSVExTdHlsZV19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmZvbnRTaXplRXh0cmFTbWFsbH0+XG4gICAgICAgICAgICBXaXRoIGRpcmVjdGlvbmFsIG1lYW5pbmdcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59KTtcblxuZnVuY3Rpb24gQW5pbWF0aW9uQmxvY2socHJvcHM6IHtcbiAgaW1nU3R5bGU6IHt0cmFuc2Zvcm06IEFycmF5PHtzY2FsZVg6IG51bWJlcn0gfCB7dHJhbnNsYXRlWDogYW55fT59LFxuICBvblByZXNzOiAoZTogYW55KSA9PiB2b2lkLFxufSkge1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYmxvY2t9PlxuICAgICAgPFRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayBvblByZXNzPXtwcm9wcy5vblByZXNzfT5cbiAgICAgICAgPEFuaW1hdGVkLkltYWdlXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuaW1nLCBwcm9wcy5pbWdTdHlsZV19XG4gICAgICAgICAgc291cmNlPXtyZXF1aXJlKCcuLi8uLi9hc3NldHMvcG9rZS5wbmcnKX1cbiAgICAgICAgLz5cbiAgICAgIDwvVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxudHlwZSBSVExTd2l0Y2hlckNvbXBvbmVudFN0YXRlID0ge3xcbiAgaXNSVEw6IGJvb2xlYW4sXG58fTtcblxuZnVuY3Rpb24gd2l0aFJUTFN0YXRlKFxuICBDb21wb25lbnQ6ICh7XG4gICAgaXNSVEw6IGJvb2xlYW4sXG4gICAgc2V0UlRMOiAoaXNSVEw6IGJvb2xlYW4pID0+IHZvaWQsXG4gICAgc3R5bGU/OiBhbnksXG4gIH0pID0+IFJlYWN0Lk5vZGUsXG4pIHtcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAgIHtzdHlsZT86IGFueX0sXG4gICAgUlRMU3dpdGNoZXJDb21wb25lbnRTdGF0ZSxcbiAgPiB7XG4gICAgLyogJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XSBUaGUgdHlwZSBhbm5vdGF0aW9uKHMpIHJlcXVpcmVkIGJ5XG4gICAgICogRmxvdydzIExUSSB1cGRhdGUgY291bGQgbm90IGJlIGFkZGVkIHZpYSBjb2RlbW9kICovXG4gICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICBpc1JUTDogSVNfUlRMLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qgc2V0UlRMID0gKGlzUlRMOiBib29sZWFuKSA9PiB0aGlzLnNldFN0YXRlKHtpc1JUTDogaXNSVEx9KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb21wb25lbnQgaXNSVEw9e3RoaXMuc3RhdGUuaXNSVEx9IHNldFJUTD17c2V0UlRMfSB7Li4udGhpcy5wcm9wc30gLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBSVExUb2dnbGVyID0gKHtcbiAgaXNSVEwsXG4gIHNldFJUTCxcbn06XG4gIHwge2lzUlRMOiBhbnksIHNldFJUTDogYW55fVxuICB8IHtpc1JUTDogYm9vbGVhbiwgc2V0UlRMOiAoaXNSVEw6IGJvb2xlYW4pID0+IHZvaWR9KSA9PiB7XG4gIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgcmV0dXJuIDxUZXh0IHN0eWxlPXtzdHlsZXMucnRsVG9nZ2xlcn0+e2lzUlRMID8gJ1JUTCcgOiAnTFRSJ308L1RleHQ+O1xuICB9XG5cbiAgY29uc3QgdG9nZ2xlUlRMID0gKCkgPT4gc2V0UlRMKCFpc1JUTCk7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgb25QcmVzcz17dG9nZ2xlUlRMfVxuICAgICAgdGl0bGU9e2lzUlRMID8gJ1JUTCcgOiAnTFRSJ31cbiAgICAgIGNvbG9yPVwiZ3JheVwiXG4gICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJDaGFuZ2UgbGF5b3V0IGRpcmVjdGlvblwiXG4gICAgLz5cbiAgKTtcbn07XG5cbmNsYXNzIFJUTFRvZ2dsZUV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBSVExUb2dnbGVTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogT2JqZWN0KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUlRMOiBJU19SVEwsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZGlyZWN0aW9uQm94fT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmRpcmVjdGlvblRleHR9PlxuICAgICAgICAgICAge3RoaXMuc3RhdGUuaXNSVEwgPyAnUmlnaHQtdG8tTGVmdCcgOiAnTGVmdC10by1SaWdodCd9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZmxleERpcmVjdGlvblJvd30+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zd2l0Y2hSb3dUZXh0Vmlld30+Zm9yY2VSVEw8L1RleHQ+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zd2l0Y2hSb3dTd2l0Y2hWaWV3fT5cbiAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17dGhpcy5fb25EaXJlY3Rpb25DaGFuZ2V9XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucmlnaHRBbGlnblN0eWxlfVxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5pc1JUTH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIF9vbkRpcmVjdGlvbkNoYW5nZSA9ICgpID0+IHtcbiAgICBJMThuTWFuYWdlci5mb3JjZVJUTCghdGhpcy5zdGF0ZS5pc1JUTCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7aXNSVEw6ICF0aGlzLnN0YXRlLmlzUlRMfSk7XG4gICAgQWxlcnQuYWxlcnQoXG4gICAgICAnUmVsb2FkIHRoaXMgcGFnZScsXG4gICAgICAnUGxlYXNlIHJlbG9hZCB0aGlzIHBhZ2UgdG8gY2hhbmdlIHRoZSBVSSBkaXJlY3Rpb24hICcgK1xuICAgICAgICAnQWxsIGV4YW1wbGVzIGluIHRoaXMgYXBwIHdpbGwgYmUgYWZmZWN0ZWQuICcgK1xuICAgICAgICAnQ2hlY2sgdGhlbSBvdXQgdG8gc2VlIHdoYXQgdGhleSBsb29rIGxpa2UgaW4gUlRMIGxheW91dC4nLFxuICAgICk7XG4gIH07XG59XG5cbmNvbnN0IFNpbXBsZUxpc3RJdGVtRXhhbXBsZSA9IHdpdGhSVExTdGF0ZSgoe2lzUlRMLCBzZXRSVEx9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8UlRMVG9nZ2xlciBzZXRSVEw9e3NldFJUTH0gaXNSVEw9e2lzUlRMfSAvPlxuICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMubGlzdCwgZGlyZWN0aW9uU3R5bGUoaXNSVEwpXX0+XG4gICAgICAgIDxMaXN0SXRlbSBpbWFnZVNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL2xpa2UucG5nJyl9IC8+XG4gICAgICAgIDxMaXN0SXRlbSBpbWFnZVNvdXJjZT17cmVxdWlyZSgnLi4vLi4vYXNzZXRzL3Bva2UucG5nJyl9IC8+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufSk7XG5cbmNvbnN0IEFuaW1hdGlvbkNvbnRhaW5lciA9IHdpdGhSVExTdGF0ZSgoe2lzUlRMLCBzZXRSVEx9KSA9PiB7XG4gIHJldHVybiA8QW5pbWF0aW9uRXhhbXBsZSBpc1JUTD17aXNSVEx9IHNldFJUTD17c2V0UlRMfSAvPjtcbn0pO1xuXG5jbGFzcyBBbmltYXRpb25FeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgQW5pbWF0aW9uU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IE9iamVjdCkge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB0b2dnbGVTdGF0dXM6IHt9LFxuICAgICAgbGluZWFyOiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICB3aW5kb3dXaWR0aDogMCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFJUTFRvZ2dsZXIgc2V0UlRMPXt0aGlzLnByb3BzLnNldFJUTH0gaXNSVEw9e3RoaXMucHJvcHMuaXNSVEx9IC8+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudmlld30gb25MYXlvdXQ9e3RoaXMuX29uTGF5b3V0fT5cbiAgICAgICAgICA8QW5pbWF0aW9uQmxvY2tcbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMuX2xpbmVhclRhcH1cbiAgICAgICAgICAgIGltZ1N0eWxlPXt7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICAgIHt0cmFuc2xhdGVYOiB0aGlzLnN0YXRlLmxpbmVhcn0sXG4gICAgICAgICAgICAgICAge3NjYWxlWDogdGhpcy5wcm9wcy5pc1JUTCA/IC0xIDogMX0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgX29uTGF5b3V0ID0gKGU6IE9iamVjdCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgd2luZG93V2lkdGg6IGUubmF0aXZlRXZlbnQubGF5b3V0LndpZHRoLFxuICAgIH0pO1xuICB9O1xuXG4gIF9saW5lYXJUYXAgPSAoZTogT2JqZWN0KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB0b2dnbGVTdGF0dXM6IHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZS50b2dnbGVTdGF0dXMsXG4gICAgICAgIFtlXTogIXRoaXMuc3RhdGUudG9nZ2xlU3RhdHVzW2VdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBvZmZzZXQgPSBJTUFHRV9TSVpFWzBdIC8gU0NBTEUgLyAyICsgMTA7XG4gICAgY29uc3QgdG9NYXhEaXN0YW5jZSA9XG4gICAgICAodGhpcy5wcm9wcy5pc1JUTCA/IC0xIDogMSkgKiAodGhpcy5zdGF0ZS53aW5kb3dXaWR0aCAvIDIgLSBvZmZzZXQpO1xuICAgIEFuaW1hdGVkLnRpbWluZyh0aGlzLnN0YXRlLmxpbmVhciwge1xuICAgICAgdG9WYWx1ZTogdGhpcy5zdGF0ZS50b2dnbGVTdGF0dXNbZV0gPyB0b01heERpc3RhbmNlIDogMCxcbiAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgIH0pLnN0YXJ0KCk7XG4gIH07XG59XG5cbmNvbnN0IFBhZGRpbmdFeGFtcGxlID0gd2l0aFJUTFN0YXRlKCh7aXNSVEwsIHNldFJUTH0pID0+IHtcbiAgY29uc3QgY29sb3IgPSAndGVhbCc7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+U3R5bGVzPC9UZXh0PlxuICAgICAgPFRleHQ+cGFkZGluZ1N0YXJ0OiA1MCw8L1RleHQ+XG4gICAgICA8VGV4dD5wYWRkaW5nRW5kOiAxMDwvVGV4dD5cbiAgICAgIDxUZXh0IC8+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PkRlbW86IDwvVGV4dD5cbiAgICAgIDxUZXh0PlRoZSB7Y29sb3J9IGlzIHBhZGRpbmcuPC9UZXh0PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgICAgIHBhZGRpbmdTdGFydDogNTAsXG4gICAgICAgICAgcGFkZGluZ0VuZDogMTAsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yLFxuICAgICAgICAgIGRpcmVjdGlvbjogaXNSVEwgPyAncnRsJyA6ICdsdHInLFxuICAgICAgICB9fT5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgcGFkZGluZ1RvcDogNSxcbiAgICAgICAgICAgIHBhZGRpbmdCb3R0b206IDUsXG4gICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IDEsXG4gICAgICAgICAgICBib3JkZXJSaWdodFdpZHRoOiAxLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICdncmF5JyxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8UlRMVG9nZ2xlciBzZXRSVEw9e3NldFJUTH0gaXNSVEw9e2lzUlRMfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufSk7XG5cbmNvbnN0IE1hcmdpbkV4YW1wbGUgPSB3aXRoUlRMU3RhdGUoKHtpc1JUTCwgc2V0UlRMfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5ib2xkfT5TdHlsZXM8L1RleHQ+XG4gICAgICA8VGV4dD5tYXJnaW5TdGFydDogNTAsPC9UZXh0PlxuICAgICAgPFRleHQ+bWFyZ2luRW5kOiAxMDwvVGV4dD5cbiAgICAgIDxUZXh0IC8+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PkRlbW86IDwvVGV4dD5cbiAgICAgIDxUZXh0PlRoZSBncmVlbiBpcyBtYXJnaW4uPC9UZXh0PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICdncmVlbicsXG4gICAgICAgICAgZGlyZWN0aW9uOiBpc1JUTCA/ICdydGwnIDogJ2x0cicsXG4gICAgICAgIH19PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgICAgICAgICBwYWRkaW5nVG9wOiA1LFxuICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogNSxcbiAgICAgICAgICAgIG1hcmdpblN0YXJ0OiA1MCxcbiAgICAgICAgICAgIG1hcmdpbkVuZDogMTAsXG4gICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IDEsXG4gICAgICAgICAgICBib3JkZXJSaWdodFdpZHRoOiAxLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICdncmF5JyxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8UlRMVG9nZ2xlciBzZXRSVEw9e3NldFJUTH0gaXNSVEw9e2lzUlRMfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufSk7XG5cbmNvbnN0IFBvc2l0aW9uRXhhbXBsZSA9IHdpdGhSVExTdGF0ZSgoe2lzUlRMLCBzZXRSVEx9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PlN0eWxlczwvVGV4dD5cbiAgICAgIDxUZXh0PnN0YXJ0OiA1MDwvVGV4dD5cbiAgICAgIDxUZXh0IC8+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PkRlbW86IDwvVGV4dD5cbiAgICAgIDxUZXh0PlRoZSBvcmFuZ2UgaXMgcG9zaXRpb24uPC9UZXh0PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdvcmFuZ2UnLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgIGJvcmRlckNvbG9yOiAnb3JhbmdlJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGlzUlRMID8gJ3J0bCcgOiAnbHRyJyxcbiAgICAgICAgfX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgIHN0YXJ0OiA1MCxcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnZ3JheScsXG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFJUTFRvZ2dsZXIgc2V0UlRMPXtzZXRSVEx9IGlzUlRMPXtpc1JUTH0gLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICAgPFRleHQgLz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+U3R5bGVzPC9UZXh0PlxuICAgICAgPFRleHQ+ZW5kOiA1MDwvVGV4dD5cbiAgICAgIDxUZXh0IC8+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PkRlbW86IDwvVGV4dD5cbiAgICAgIDxUZXh0PlRoZSBvcmFuZ2UgaXMgcG9zaXRpb24uPC9UZXh0PlxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdvcmFuZ2UnLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgIGJvcmRlckNvbG9yOiAnb3JhbmdlJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGlzUlRMID8gJ3J0bCcgOiAnbHRyJyxcbiAgICAgICAgfX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgIGVuZDogNTAsXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ2dyYXknLFxuICAgICAgICAgIH19PlxuICAgICAgICAgIDxSVExUb2dnbGVyIHNldFJUTD17c2V0UlRMfSBpc1JUTD17aXNSVEx9IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59KTtcblxuY29uc3QgQm9yZGVyV2lkdGhFeGFtcGxlID0gd2l0aFJUTFN0YXRlKCh7aXNSVEwsIHNldFJUTH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+U3R5bGVzPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyU3RhcnRXaWR0aDogMTAsPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyRW5kV2lkdGg6IDUwPC9UZXh0PlxuICAgICAgPFRleHQgLz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+RGVtbzogPC9UZXh0PlxuICAgICAgPFZpZXcgc3R5bGU9e2RpcmVjdGlvblN0eWxlKGlzUlRMKX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlclN0YXJ0V2lkdGg6IDEwLFxuICAgICAgICAgICAgYm9yZGVyRW5kV2lkdGg6IDUwLFxuICAgICAgICAgIH19PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFJUTFRvZ2dsZXIgc2V0UlRMPXtzZXRSVEx9IGlzUlRMPXtpc1JUTH0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59KTtcblxuY29uc3QgQm9yZGVyQ29sb3JFeGFtcGxlID0gd2l0aFJUTFN0YXRlKCh7aXNSVEwsIHNldFJUTH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+U3R5bGVzPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyU3RhcnRDb2xvcjogJ3JlZCcsPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyRW5kQ29sb3I6ICdncmVlbicsPC9UZXh0PlxuICAgICAgPFRleHQgLz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+RGVtbzogPC9UZXh0PlxuICAgICAgPFZpZXcgc3R5bGU9e2RpcmVjdGlvblN0eWxlKGlzUlRMKX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlclN0YXJ0Q29sb3I6ICdyZWQnLFxuICAgICAgICAgICAgYm9yZGVyRW5kQ29sb3I6ICdncmVlbicsXG4gICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IDIwLFxuICAgICAgICAgICAgYm9yZGVyUmlnaHRXaWR0aDogMjAsXG4gICAgICAgICAgICBwYWRkaW5nOiAxMCxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgIDxSVExUb2dnbGVyIHNldFJUTD17c2V0UlRMfSBpc1JUTD17aXNSVEx9IC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufSk7XG5cbmNvbnN0IEJvcmRlclJhZGlpRXhhbXBsZSA9IHdpdGhSVExTdGF0ZSgoe2lzUlRMLCBzZXRSVEx9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PlN0eWxlczwvVGV4dD5cbiAgICAgIDxUZXh0PmJvcmRlclRvcFN0YXJ0UmFkaXVzOiAxMCw8L1RleHQ+XG4gICAgICA8VGV4dD5ib3JkZXJUb3BFbmRSYWRpdXM6IDIwLDwvVGV4dD5cbiAgICAgIDxUZXh0PmJvcmRlckJvdHRvbVN0YXJ0UmFkaXVzOiAzMCw8L1RleHQ+XG4gICAgICA8VGV4dD5ib3JkZXJCb3R0b21FbmRSYWRpdXM6IDQwPC9UZXh0PlxuICAgICAgPFRleHQgLz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+RGVtbzogPC9UZXh0PlxuICAgICAgPFZpZXcgc3R5bGU9e2RpcmVjdGlvblN0eWxlKGlzUlRMKX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICAgICAgICAgIGJvcmRlclRvcFN0YXJ0UmFkaXVzOiAxMCxcbiAgICAgICAgICAgIGJvcmRlclRvcEVuZFJhZGl1czogMjAsXG4gICAgICAgICAgICBib3JkZXJCb3R0b21TdGFydFJhZGl1czogMzAsXG4gICAgICAgICAgICBib3JkZXJCb3R0b21FbmRSYWRpdXM6IDQwLFxuICAgICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICA8UlRMVG9nZ2xlciBzZXRSVEw9e3NldFJUTH0gaXNSVEw9e2lzUlRMfSAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn0pO1xuXG5jb25zdCBMb2dpY2FsQm9yZGVyUmFkaWlFeGFtcGxlID0gd2l0aFJUTFN0YXRlKCh7aXNSVEwsIHNldFJUTH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlldz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+U3R5bGVzPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyU3RhcnRTdGFydFJhZGl1czogMTAsPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyU3RhcnRFbmRSYWRpdXM6IDIwLDwvVGV4dD5cbiAgICAgIDxUZXh0PmJvcmRlckVuZFN0YXJ0UmFkaXVzOiAzMCw8L1RleHQ+XG4gICAgICA8VGV4dD5ib3JkZXJFbmRFbmRSYWRpdXM6IDQwPC9UZXh0PlxuICAgICAgPFRleHQgLz5cbiAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYm9sZH0+RGVtbzogPC9UZXh0PlxuICAgICAgPFZpZXcgc3R5bGU9e2RpcmVjdGlvblN0eWxlKGlzUlRMKX0+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxMCxcbiAgICAgICAgICAgIGJvcmRlclN0YXJ0U3RhcnRSYWRpdXM6IDEwLFxuICAgICAgICAgICAgYm9yZGVyU3RhcnRFbmRSYWRpdXM6IDIwLFxuICAgICAgICAgICAgYm9yZGVyRW5kU3RhcnRSYWRpdXM6IDMwLFxuICAgICAgICAgICAgYm9yZGVyRW5kRW5kUmFkaXVzOiA0MCxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgIH19PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFJUTFRvZ2dsZXIgc2V0UlRMPXtzZXRSVEx9IGlzUlRMPXtpc1JUTH0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59KTtcblxuY29uc3QgQm9yZGVyRXhhbXBsZSA9IHdpdGhSVExTdGF0ZSgoe2lzUlRMLCBzZXRSVEx9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PlN0eWxlczwvVGV4dD5cbiAgICAgIDxUZXh0PmJvcmRlclN0YXJ0Q29sb3I6ICdyZWQnLDwvVGV4dD5cbiAgICAgIDxUZXh0PmJvcmRlckVuZENvbG9yOiAnZ3JlZW4nLDwvVGV4dD5cbiAgICAgIDxUZXh0PmJvcmRlclN0YXJ0V2lkdGg6IDEwLDwvVGV4dD5cbiAgICAgIDxUZXh0PmJvcmRlckVuZFdpZHRoOiA1MCw8L1RleHQ+XG4gICAgICA8VGV4dD5ib3JkZXJUb3BTdGFydFJhZGl1czogMTAsPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyVG9wRW5kUmFkaXVzOiAyMCw8L1RleHQ+XG4gICAgICA8VGV4dD5ib3JkZXJCb3R0b21TdGFydFJhZGl1czogMzAsPC9UZXh0PlxuICAgICAgPFRleHQ+Ym9yZGVyQm90dG9tRW5kUmFkaXVzOiA0MDwvVGV4dD5cbiAgICAgIDxUZXh0IC8+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJvbGR9PkRlbW86IDwvVGV4dD5cbiAgICAgIDxWaWV3IHN0eWxlPXtkaXJlY3Rpb25TdHlsZShpc1JUTCl9PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJTdGFydENvbG9yOiAncmVkJyxcbiAgICAgICAgICAgIGJvcmRlckVuZENvbG9yOiAnZ3JlZW4nLFxuICAgICAgICAgICAgYm9yZGVyU3RhcnRXaWR0aDogMTAsXG4gICAgICAgICAgICBib3JkZXJFbmRXaWR0aDogNTAsXG4gICAgICAgICAgICBib3JkZXJUb3BTdGFydFJhZGl1czogMTAsXG4gICAgICAgICAgICBib3JkZXJUb3BFbmRSYWRpdXM6IDIwLFxuICAgICAgICAgICAgYm9yZGVyQm90dG9tU3RhcnRSYWRpdXM6IDMwLFxuICAgICAgICAgICAgYm9yZGVyQm90dG9tRW5kUmFkaXVzOiA0MCxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgIH19PlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgPFJUTFRvZ2dsZXIgc2V0UlRMPXtzZXRSVEx9IGlzUlRMPXtpc1JUTH0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59KTtcblxuY29uc3QgZGlyZWN0aW9uU3R5bGUgPSAoaXNSVEw6IGJvb2xlYW4pID0+XG4gIFBsYXRmb3JtLk9TICE9PSAnYW5kcm9pZCcgPyB7ZGlyZWN0aW9uOiBpc1JUTCA/ICdydGwnIDogJ2x0cid9IDogbnVsbDtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTllYWVkJyxcbiAgICBwYWRkaW5nVG9wOiAxNSxcbiAgfSxcbiAgZGlyZWN0aW9uQm94OiB7XG4gICAgZmxleDogMSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjhmOGY4JyxcbiAgICBib3JkZXJXaWR0aDogMC41LFxuICAgIGJvcmRlckNvbG9yOiAnYmxhY2snLFxuICAgIG1hcmdpbkJvdHRvbTogMTUsXG4gIH0sXG4gIGRpcmVjdGlvblRleHQ6IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBmb250U2l6ZTogMTYsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIHN3aXRjaFJvd1RleHRWaWV3OiB7XG4gICAgZmxleDogMSxcbiAgICBtYXJnaW5Cb3R0b206IDUsXG4gICAgbWFyZ2luVG9wOiA1LFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIH0sXG4gIHN3aXRjaFJvd1N3aXRjaFZpZXc6IHtcbiAgICBmbGV4OiAzLFxuICB9LFxuICByaWdodEFsaWduU3R5bGU6IHtcbiAgICByaWdodDogMTAsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIH0sXG4gIGxpc3Q6IHtcbiAgICBoZWlnaHQ6IDEyMCxcbiAgICBtYXJnaW5Cb3R0b206IDUsXG4gICAgYm9yZGVyVG9wV2lkdGg6IDAuNSxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IDAuNSxcbiAgICBib3JkZXJSaWdodFdpZHRoOiAwLjUsXG4gICAgYm9yZGVyQ29sb3I6ICcjZTVlNWU1JyxcbiAgfSxcbiAgcm93OiB7XG4gICAgaGVpZ2h0OiA2MCxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogMC41LFxuICAgIGJvcmRlckNvbG9yOiAnI2U1ZTVlNScsXG4gIH0sXG4gIGNvbHVtbjE6IHtcbiAgICB3aWR0aDogNjAsXG4gIH0sXG4gIGNvbHVtbjI6IHtcbiAgICBmbGV4OiAyLjUsXG4gICAgcGFkZGluZzogNixcbiAgfSxcbiAgY29sdW1uMzoge1xuICAgIGZsZXg6IDEuNSxcbiAgfSxcbiAgaWNvbjoge1xuICAgIHdpZHRoOiA0OCxcbiAgICBoZWlnaHQ6IDQ4LFxuICAgIG1hcmdpbjogNixcbiAgICBib3JkZXJXaWR0aDogMC41LFxuICAgIGJvcmRlckNvbG9yOiAnI2U1ZTVlNScsXG4gIH0sXG4gIHdpdGhSVExTdHlsZToge1xuICAgIHRyYW5zZm9ybTogW3tzY2FsZVg6IElTX1JUTCA/IC0xIDogMX1dLFxuICB9LFxuICBpbWFnZToge1xuICAgIGxlZnQ6IDMwLFxuICAgIHdpZHRoOiA0OCxcbiAgICBoZWlnaHQ6IDQ4LFxuICB9LFxuICBpbWc6IHtcbiAgICB3aWR0aDogSU1BR0VfU0laRVswXSAvIFNDQUxFLFxuICAgIGhlaWdodDogSU1BR0VfU0laRVsxXSAvIFNDQUxFLFxuICB9LFxuICB2aWV3OiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgYmxvY2s6IHtcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgc21hbGxCdXR0b246IHtcbiAgICB0b3A6IDE4LFxuICAgIGJvcmRlclJhZGl1czogNSxcbiAgICBoZWlnaHQ6IDI0LFxuICAgIHdpZHRoOiA2NCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTVlNWU1JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIGZvbnRTaXplU21hbGw6IHtcbiAgICBmb250U2l6ZTogMTAsXG4gIH0sXG4gIGZvbnRTaXplRXh0cmFTbWFsbDoge1xuICAgIGZvbnRTaXplOiA4LFxuICB9LFxuICB0ZXh0QWxpZ25MZWZ0OiB7XG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIH0sXG4gIHRleHRBbGlnblJpZ2h0OiB7XG4gICAgdGV4dEFsaWduOiAncmlnaHQnLFxuICB9LFxuICB0ZXh0Qm94OiB7XG4gICAgd2lkdGg6IDI4LFxuICB9LFxuICBmbGV4RGlyZWN0aW9uUm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gIH0sXG4gIGJvbGQ6IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIHJ0bFRvZ2dsZXI6IHtcbiAgICBjb2xvcjogJ2dyYXknLFxuICAgIHBhZGRpbmc6IDgsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ1JUTEV4YW1wbGUnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdVSSc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0V4YW1wbGVzIHRvIHNob3cgaG93IHRvIGFwcGx5IGNvbXBvbmVudHMgdG8gUlRMIGxheW91dC4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnQ3VycmVudCBMYXlvdXQgRGlyZWN0aW9uJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxSVExUb2dnbGVFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0EgU2ltcGxlIExpc3QgSXRlbSBMYXlvdXQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFNpbXBsZUxpc3RJdGVtRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdEZWZhdWx0IFRleHQgQWxpZ25tZW50JyxcbiAgICBkZXNjcmlwdGlvbjogKCdJbiBpT1MsIGl0IGRlcGVuZHMgb24gYWN0aXZlIGxhbmd1YWdlLiAnICtcbiAgICAgICdJbiBBbmRyb2lkLCBpdCBkZXBlbmRzIG9uIHRoZSB0ZXh0IGNvbnRlbnQuJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxUZXh0QWxpZ25tZW50RXhhbXBsZSBzdHlsZT17c3R5bGVzLmZvbnRTaXplU21hbGx9IC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogXCJVc2luZyB0ZXh0QWxpZ246ICdsZWZ0J1wiLFxuICAgIGRlc2NyaXB0aW9uOiAoJ0luIGlPUy9BbmRyb2lkLCB0ZXh0IGFsaWdubWVudCBmbGlwcyByZWdhcmRsZXNzIG9mICcgK1xuICAgICAgJ2xhbmd1YWdlcyBvciB0ZXh0IGNvbnRlbnQuJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHRBbGlnbm1lbnRFeGFtcGxlXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuZm9udFNpemVTbWFsbCwgc3R5bGVzLnRleHRBbGlnbkxlZnRdfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6IFwiVXNpbmcgdGV4dEFsaWduOiAncmlnaHQnXCIsXG4gICAgZGVzY3JpcHRpb246ICgnSW4gaU9TL0FuZHJvaWQsIHRleHQgYWxpZ25tZW50IGZsaXBzIHJlZ2FyZGxlc3Mgb2YgJyArXG4gICAgICAnbGFuZ3VhZ2VzIG9yIHRleHQgY29udGVudC4nOiBzdHJpbmcpLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dEFsaWdubWVudEV4YW1wbGVcbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5mb250U2l6ZVNtYWxsLCBzdHlsZXMudGV4dEFsaWduUmlnaHRdfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6IFwiVXNpbmcgdGV4dEFsaWduOiAncmlnaHQnIGZvciBUZXh0SW5wdXRcIixcbiAgICBkZXNjcmlwdGlvbjogKCdGbGlwIFRleHRJbnB1dCBkaXJlY3Rpb24gdG8gUlRMJzogc3RyaW5nKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxUZXh0SW5wdXRFeGFtcGxlIHN0eWxlPXtbc3R5bGVzLnRleHRBbGlnblJpZ2h0XX0gLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnV29ya2luZyBXaXRoIEljb25zJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxJY29uc0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ29udHJvbGxpbmcgQW5pbWF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FuaW1hdGlvbiBkaXJlY3Rpb24gYWNjb3JkaW5nIHRvIGxheW91dCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8QW5pbWF0aW9uQ29udGFpbmVyIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1BhZGRpbmcgU3RhcnQvRW5kJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxQYWRkaW5nRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNYXJnaW4gU3RhcnQvRW5kJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxNYXJnaW5FeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1Bvc2l0aW9uIFN0YXJ0L0VuZCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8UG9zaXRpb25FeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0JvcmRlciBXaWR0aCBTdGFydC9FbmQnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEJvcmRlcldpZHRoRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdCb3JkZXIgQ29sb3IgU3RhcnQvRW5kJyxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxCb3JkZXJDb2xvckV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQm9yZGVyIFJhZGlpIFN0YXJ0L0VuZCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8Qm9yZGVyUmFkaWlFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xvZ2ljYWwgQm9yZGVyIFJhZGlpIFN0YXJ0L0VuZCcsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8TG9naWNhbEJvcmRlclJhZGlpRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdCb3JkZXInLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPEJvcmRlckV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtCdXR0b24sIFNoYXJlLCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jb25zdCBzaGFyZU1lc3NhZ2UgPSAoKSA9PiB7XG4gIC8vICRGbG93Rml4TWVbdW51c2VkLXByb21pc2VdXG4gIFNoYXJlLnNoYXJlKHtcbiAgICBtZXNzYWdlOlxuICAgICAgKCdPdXIgdG9wIHByaW9yaXR5IGZvciBSZWFjdCBOYXRpdmUgaXMgdG8gbWF0Y2ggdGhlIGV4cGVjdGF0aW9ucyBwZW9wbGUgaGF2ZSBmb3IgZWFjaCBwbGF0Zm9ybS4gVGhpcyBpcyB3aHkgUmVhY3QgTmF0aXZlIHJlbmRlcnMgdG8gcGxhdGZvcm0gcHJpbWl0aXZlcy4gV2UgdmFsdWUgbmF0aXZlIGxvb2stYW5kLWZlZWwgb3ZlciBjcm9zcy1wbGF0Zm9ybSBjb25zaXN0ZW5jeS4nICtcbiAgICAgICAgJ0ZvciBleGFtcGxlLCB0aGUgVGV4dElucHV0IGluIFJlYWN0IE5hdGl2ZSByZW5kZXJzIHRvIGEgVUlUZXh0RmllbGQgb24gaU9TLiBUaGlzIGVuc3VyZXMgdGhhdCBpbnRlZ3JhdGlvbiB3aXRoIHBhc3N3b3JkIG1hbmFnZXJzIGFuZCBrZXlib2FyZCBjb250cm9scyB3b3JrIG91dCBvZiB0aGUgYm94LiBCeSB1c2luZyBwbGF0Zm9ybSBwcmltaXRpdmVzLCBSZWFjdCBOYXRpdmUgYXBwcyBhcmUgYWxzbyBhYmxlIHRvIHN0YXkgdXAtdG8tZGF0ZSB3aXRoIGRlc2lnbiBhbmQgYmVoYXZpb3IgY2hhbmdlcyBmcm9tIG5ldyByZWxlYXNlcyBvZiBBbmRyb2lkIGFuZCBpT1MuJzogc3RyaW5nKSxcbiAgfSk7XG59O1xuXG5jb25zdCBzaGFyZVRleHQgPSAoKSA9PiB7XG4gIC8vICRGbG93Rml4TWVbdW51c2VkLXByb21pc2VdXG4gIFNoYXJlLnNoYXJlKFxuICAgIHtcbiAgICAgIHRpdGxlOiAnTWFzc2l2ZSBTY2FsZScsXG4gICAgICBtZXNzYWdlOlxuICAgICAgICAoJ0h1bmRyZWRzIG9mIHNjcmVlbnMgaW4gdGhlIEZhY2Vib29rIGFwcCBhcmUgaW1wbGVtZW50ZWQgd2l0aCBSZWFjdCBOYXRpdmUuIFRoZSBGYWNlYm9vayBhcHAgaXMgdXNlZCBieSBiaWxsaW9ucyBvZiBwZW9wbGUgb24gYSBodWdlIHJhbmdlIG9mIGRldmljZXMuIFRoaXMgaXMgd2h5IHdlIGludmVzdCBpbiB0aGUgbW9zdCBjaGFsbGVuZ2luZyBwcm9ibGVtcyBhdCBzY2FsZS4nICtcbiAgICAgICAgICAnRGVwbG95aW5nIFJlYWN0IE5hdGl2ZSBpbiBvdXIgYXBwcyBsZXRzIHVzIGlkZW50aWZ5IHByb2JsZW1zIHRoYXQgd2Ugd291bGRu4oCZdCBzZWUgYXQgYSBzbWFsbGVyIHNjYWxlLiBGb3IgZXhhbXBsZSwgRmFjZWJvb2sgZm9jdXNlcyBvbiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYWNyb3NzIGEgYnJvYWQgc3BlY3RydW0gb2YgZGV2aWNlcyBmcm9tIHRoZSBuZXdlc3QgaVBob25lIHRvIG1hbnkgb2xkZXIgZ2VuZXJhdGlvbnMgb2YgQW5kcm9pZCBkZXZpY2VzLiBUaGlzIGZvY3VzIGluZm9ybXMgb3VyIGFyY2hpdGVjdHVyZSBwcm9qZWN0cyBzdWNoIGFzIEhlcm1lcywgRmFicmljLCBhbmQgVHVyYm9Nb2R1bGVzLic6IHN0cmluZyksXG4gICAgICB1cmw6ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9ibG9nLzIwMjAvMDcvMTcvcmVhY3QtbmF0aXZlLXByaW5jaXBsZXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgc3ViamVjdDogJ01VU1QgUkVBRDogTWFzc2l2ZSBTY2FsZScsXG4gICAgICBkaWFsb2dUaXRsZTogJ1NoYXJlIFJlYWN0IE5hdGl2ZSBCbG9nJyxcbiAgICAgIGV4Y2x1ZGVkQWN0aXZpdHlUeXBlczogWydjb20uYXBwbGUuVUlLaXQuYWN0aXZpdHkuUG9zdFRvVHdpdHRlciddLFxuICAgICAgdGludENvbG9yOiAnYmx1ZScsXG4gICAgfSxcbiAgKTtcbn07XG5cbmNvbnN0IFNoYXJlTWVzc2FnZVdpdGhvdXRUaXRsZSA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfT5OYXRpdmUgRXhwZXJpZW5jZTwvVGV4dD5cbiAgICAgIDxUZXh0PlxuICAgICAgICBPdXIgdG9wIHByaW9yaXR5IGZvciBSZWFjdCBOYXRpdmUgaXMgdG8gbWF0Y2ggdGhlIGV4cGVjdGF0aW9ucyBwZW9wbGVcbiAgICAgICAgaGF2ZSBmb3IgZWFjaCBwbGF0Zm9ybS4gVGhpcyBpcyB3aHkgUmVhY3QgTmF0aXZlIHJlbmRlcnMgdG8gcGxhdGZvcm1cbiAgICAgICAgcHJpbWl0aXZlcy4gV2UgdmFsdWUgbmF0aXZlIGxvb2stYW5kLWZlZWwgb3ZlciBjcm9zcy1wbGF0Zm9ybVxuICAgICAgICBjb25zaXN0ZW5jeS4gRm9yIGV4YW1wbGUsIHRoZSBUZXh0SW5wdXQgaW4gUmVhY3QgTmF0aXZlIHJlbmRlcnMgdG8gYVxuICAgICAgICBVSVRleHRGaWVsZCBvbiBpT1MuIFRoaXMgZW5zdXJlcyB0aGF0IGludGVncmF0aW9uIHdpdGggcGFzc3dvcmQgbWFuYWdlcnNcbiAgICAgICAgYW5kIGtleWJvYXJkIGNvbnRyb2xzIHdvcmsgb3V0IG9mIHRoZSBib3guIEJ5IHVzaW5nIHBsYXRmb3JtIHByaW1pdGl2ZXMsXG4gICAgICAgIFJlYWN0IE5hdGl2ZSBhcHBzIGFyZSBhbHNvIGFibGUgdG8gc3RheSB1cC10by1kYXRlIHdpdGggZGVzaWduIGFuZFxuICAgICAgICBiZWhhdmlvciBjaGFuZ2VzIGZyb20gbmV3IHJlbGVhc2VzIG9mIEFuZHJvaWQgYW5kIGlPUy5cbiAgICAgIDwvVGV4dD5cbiAgICAgIDxCdXR0b24gdGl0bGU9XCJTSEFSRVwiIG9uUHJlc3M9e3NoYXJlTWVzc2FnZX0gLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBTaGFyZU1lc3NhZ2VXaXRoVGl0bGUgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZX0+TWFzc2l2ZSBTY2FsZTwvVGV4dD5cbiAgICAgIDxUZXh0PlxuICAgICAgICBIdW5kcmVkcyBvZiBzY3JlZW5zIGluIHRoZSBGYWNlYm9vayBhcHAgYXJlIGltcGxlbWVudGVkIHdpdGggUmVhY3RcbiAgICAgICAgTmF0aXZlLiBUaGUgRmFjZWJvb2sgYXBwIGlzIHVzZWQgYnkgYmlsbGlvbnMgb2YgcGVvcGxlIG9uIGEgaHVnZSByYW5nZVxuICAgICAgICBvZiBkZXZpY2VzLiBUaGlzIGlzIHdoeSB3ZSBpbnZlc3QgaW4gdGhlIG1vc3QgY2hhbGxlbmdpbmcgcHJvYmxlbXMgYXRcbiAgICAgICAgc2NhbGUuIERlcGxveWluZyBSZWFjdCBOYXRpdmUgaW4gb3VyIGFwcHMgbGV0cyB1cyBpZGVudGlmeSBwcm9ibGVtcyB0aGF0XG4gICAgICAgIHdlIHdvdWxkbuKAmXQgc2VlIGF0IGEgc21hbGxlciBzY2FsZS4gRm9yIGV4YW1wbGUsIEZhY2Vib29rIGZvY3VzZXMgb25cbiAgICAgICAgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGFjcm9zcyBhIGJyb2FkIHNwZWN0cnVtIG9mIGRldmljZXMgZnJvbSB0aGUgbmV3ZXN0XG4gICAgICAgIGlQaG9uZSB0byBtYW55IG9sZGVyIGdlbmVyYXRpb25zIG9mIEFuZHJvaWQgZGV2aWNlcy4gVGhpcyBmb2N1cyBpbmZvcm1zXG4gICAgICAgIG91ciBhcmNoaXRlY3R1cmUgcHJvamVjdHMgc3VjaCBhcyBIZXJtZXMsIEZhYnJpYywgYW5kIFR1cmJvTW9kdWxlcy5cbiAgICAgIDwvVGV4dD5cbiAgICAgIDxCdXR0b24gdGl0bGU9XCJTSEFSRVwiIG9uUHJlc3M9e3NoYXJlVGV4dH0gLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBTaGFyZWRBY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IFtzaGFyZWQsIHNldFNoYXJlZF0gPSBSZWFjdC51c2VTdGF0ZTw/c3RyaW5nPigpO1xuXG4gIGNvbnN0IHNoYXJlZEFjdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgU2hhcmUuc2hhcmUoXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0NyZWF0ZSBuYXRpdmUgYXBwcycsXG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICgnUmVhY3QgTmF0aXZlIGNvbWJpbmVzIHRoZSBiZXN0IHBhcnRzIG9mIG5hdGl2ZSBkZXZlbG9wbWVudCB3aXRoIFJlYWN0LCBhIGJlc3QtaW4tY2xhc3MgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBidWlsZGluZyB1c2VyIGludGVyZmFjZXMuJzogc3RyaW5nKSxcbiAgICAgICAgICB1cmw6ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi8nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3ViamVjdDogJ01VU1QgUkVBRDogQ3JlYXRlIG5hdGl2ZSBhcHBzIHdpdGggUmVhY3QgTmF0aXZlJyxcbiAgICAgICAgICBkaWFsb2dUaXRsZTogJ1NoYXJlIFJlYWN0IE5hdGl2ZSBIb21lIFBhZ2UnLFxuICAgICAgICAgIHRpbnRDb2xvcjogJ2JsdWUnLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSBTaGFyZS5zaGFyZWRBY3Rpb24pIHtcbiAgICAgICAgc2V0U2hhcmVkKHJlc3VsdC5hY3Rpb24pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuYWN0aW9uID09PSBTaGFyZS5kaXNtaXNzZWRBY3Rpb24pIHtcbiAgICAgICAgLy9pT1Mgb25seSwgaWYgZGlhbG9nIHdhcyBkaXNtaXNzZWRcbiAgICAgICAgc2V0U2hhcmVkKG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIDxUZXh0PmFjdGlvbjoge3NoYXJlZCA/IHNoYXJlZCA6ICdudWxsJ308L1RleHQ+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfT5DcmVhdGUgbmF0aXZlIGFwcHM8L1RleHQ+XG4gICAgICA8VGV4dD5cbiAgICAgICAgUmVhY3QgTmF0aXZlIGNvbWJpbmVzIHRoZSBiZXN0IHBhcnRzIG9mIG5hdGl2ZSBkZXZlbG9wbWVudCB3aXRoIFJlYWN0LCBhXG4gICAgICAgIGJlc3QtaW4tY2xhc3MgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBidWlsZGluZyB1c2VyIGludGVyZmFjZXMuXG4gICAgICA8L1RleHQ+XG4gICAgICA8QnV0dG9uIHRpdGxlPVwiU0hBUkVcIiBvblByZXNzPXtzaGFyZWRBY3Rpb259IC8+XG4gICAgPC9WaWV3PlxuICApO1xufTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICBmb250U2l6ZTogMzAsXG4gICAgbWFyZ2luOiAxMCxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnU2hhcmUnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdTaGFyZSBkYXRhIHdpdGggb3RoZXIgQXBwcy4nO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnU2hhcmUgbWVzc2FnZScsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxTaGFyZU1lc3NhZ2VXaXRob3V0VGl0bGUgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU2hhcmUgbWVzc2FnZSwgVVJMIChpT1MpIGFuZCB0aXRsZSAoQW5kcm9pZCknLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8U2hhcmVNZXNzYWdlV2l0aFRpdGxlIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ3NoYXJlZEFjdGlvbjogSWYgdGhlIGNvbnRlbnQgd2FzIHN1Y2Nlc3NmdWxseSBzaGFyZWQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8U2hhcmVkQWN0aW9uIC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBTY3JlZW5zaG90TWFuYWdlciA9IHJlcXVpcmUoJy4uLy4uLy4uL05hdGl2ZU1vZHVsZUV4YW1wbGUvTmF0aXZlU2NyZWVuc2hvdE1hbmFnZXInKTtcbmNvbnN0IHtSTlRlc3RlclRoZW1lQ29udGV4dH0gPSByZXF1aXJlKCcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyVGhlbWUnKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtBbGVydCwgSW1hZ2UsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIFNjcmVlbnNob3RFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59LCAkRmxvd0ZpeE1lU3RhdGU+IHtcbiAgc3RhdGU6IGFueSB8IHt1cmk6IHZvaWR9ID0ge1xuICAgIHVyaTogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7dGhlbWUgPT4gKFxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZS5jb250YWluZXJ9PlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgb25QcmVzcz17dGhpcy50YWtlU2NyZWVuc2hvdH1cbiAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZS5idXR0b24sIHtjb2xvcjogdGhlbWUuTGFiZWxDb2xvcn1dfT5cbiAgICAgICAgICAgICAgQ2xpY2sgdG8gdGFrZSBhIHNjcmVlbnNob3RcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICBzdHlsZT17W3N0eWxlLmltYWdlLCB7YmFja2dyb3VuZENvbG9yOiB0aGVtZS5MYWJlbENvbG9yfV19XG4gICAgICAgICAgICAgIHNvdXJjZT17e3VyaTogdGhpcy5zdGF0ZS51cml9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICl9XG4gICAgICA8L1JOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cblxuICB0YWtlU2NyZWVuc2hvdCA9ICgpID0+IHtcbiAgICBTY3JlZW5zaG90TWFuYWdlci50YWtlU2NyZWVuc2hvdCgnd2luZG93Jywge2Zvcm1hdDogJ2pwZWcnLCBxdWFsaXR5OiAwLjh9KSAvLyBTZWUgVUlNYW5hZ2VyLmpzIGZvciBvcHRpb25zXG4gICAgICAudGhlbih1cmkgPT4gdGhpcy5zZXRTdGF0ZSh7dXJpfSkpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4gQWxlcnQuYWxlcnQoZXJyb3IpKTtcbiAgfTtcbn1cblxuY29uc3Qgc3R5bGUgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIG1hcmdpbkJvdHRvbTogMTAsXG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gIH0sXG4gIGltYWdlOiB7XG4gICAgZmxleDogMSxcbiAgICByZXNpemVNb2RlOiAnY29udGFpbicsXG4gIH0sXG59KTtcblxuZXhwb3J0cy50aXRsZSA9ICdTbmFwc2hvdCAvIFNjcmVlbnNob3QnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0FQSSB0byBjYXB0dXJlIGltYWdlcyBmcm9tIHRoZSBzY3JlZW4uJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ1Rha2Ugc2NyZWVuc2hvdCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFNjcmVlbnNob3RFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSTlRlc3RlckJ1dHRvbiA9IHJlcXVpcmUoJy4uLy4uL2NvbXBvbmVudHMvUk5UZXN0ZXJCdXR0b24nKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtBbGVydCwgUGxhdGZvcm0sIFRleHQsIFRvYXN0QW5kcm9pZCwgVmlld30gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuZnVuY3Rpb24gYnVybkNQVShtaWxsaXNlY29uZHM6IG51bWJlcikge1xuICBjb25zdCBzdGFydCA9IGdsb2JhbC5wZXJmb3JtYW5jZS5ub3coKTtcbiAgd2hpbGUgKGdsb2JhbC5wZXJmb3JtYW5jZS5ub3coKSA8IHN0YXJ0ICsgbWlsbGlzZWNvbmRzKSB7fVxufVxuXG50eXBlIFJlcXVlc3RJZGxlQ2FsbGJhY2tUZXN0ZXJQcm9wcyA9ICRSZWFkT25seTx7fHx9PjtcbnR5cGUgUmVxdWVzdElkbGVDYWxsYmFja1Rlc3RlclN0YXRlID0ge3xtZXNzYWdlOiBzdHJpbmd8fTtcblxuY2xhc3MgUmVxdWVzdElkbGVDYWxsYmFja1Rlc3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgUmVxdWVzdElkbGVDYWxsYmFja1Rlc3RlclByb3BzLFxuICBSZXF1ZXN0SWRsZUNhbGxiYWNrVGVzdGVyU3RhdGUsXG4+IHtcbiAgc3RhdGU6IFJlcXVlc3RJZGxlQ2FsbGJhY2tUZXN0ZXJTdGF0ZSA9IHtcbiAgICBtZXNzYWdlOiAnLScsXG4gIH07XG5cbiAgX2lkbGVUaW1lcjogP0lkbGVDYWxsYmFja0lEID0gbnVsbDtcbiAgX2l0ZXJzID0gMDtcblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5faWRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIGNhbmNlbElkbGVDYWxsYmFjayh0aGlzLl9pZGxlVGltZXIpO1xuICAgICAgdGhpcy5faWRsZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICB7LyogJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXNcbiAgICAgICAgICogcGFyYW1ldGVycyAqL31cbiAgICAgICAgPFJOVGVzdGVyQnV0dG9uIG9uUHJlc3M9e3RoaXMuX3J1bi5iaW5kKHRoaXMsIGZhbHNlKX0+XG4gICAgICAgICAgUnVuIHJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAgICAgICAgPC9STlRlc3RlckJ1dHRvbj5cblxuICAgICAgICB7LyogJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXNcbiAgICAgICAgICogcGFyYW1ldGVycyAqL31cbiAgICAgICAgPFJOVGVzdGVyQnV0dG9uIG9uUHJlc3M9e3RoaXMuX3J1bi5iaW5kKHRoaXMsIHRydWUpfT5cbiAgICAgICAgICBCdXJuIENQVSBpbnNpZGUgb2YgcmVxdWVzdElkbGVDYWxsYmFja1xuICAgICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuXG4gICAgICAgIDxSTlRlc3RlckJ1dHRvbiBvblByZXNzPXt0aGlzLl9ydW5XaXRoVGltZW91dH0+XG4gICAgICAgICAgUnVuIHJlcXVlc3RJZGxlQ2FsbGJhY2sgd2l0aCB0aW1lb3V0IG9wdGlvblxuICAgICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuXG4gICAgICAgIDxSTlRlc3RlckJ1dHRvbiBvblByZXNzPXt0aGlzLl9ydW5CYWNrZ3JvdW5kfT5cbiAgICAgICAgICBSdW4gYmFja2dyb3VuZCB0YXNrXG4gICAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG5cbiAgICAgICAgPFJOVGVzdGVyQnV0dG9uIG9uUHJlc3M9e3RoaXMuX3N0b3BCYWNrZ3JvdW5kfT5cbiAgICAgICAgICBTdG9wIGJhY2tncm91bmQgdGFza1xuICAgICAgICA8L1JOVGVzdGVyQnV0dG9uPlxuXG4gICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLm1lc3NhZ2V9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBfcnVuKHNob3VsZEJ1cm5DUFU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5faWRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIGNhbmNlbElkbGVDYWxsYmFjayh0aGlzLl9pZGxlVGltZXIpO1xuICAgICAgdGhpcy5faWRsZVRpbWVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9pZGxlVGltZXIgPSByZXF1ZXN0SWRsZUNhbGxiYWNrKGRlYWRsaW5lID0+IHtcbiAgICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICAgIGlmIChzaG91bGRCdXJuQ1BVKSB7XG4gICAgICAgIGJ1cm5DUFUoMTApO1xuICAgICAgICBtZXNzYWdlID0gJ0J1cm5lZCBDUFUgZm9yIDEwbXMsJztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBtZXNzYWdlOiBgJHttZXNzYWdlfSAke2RlYWRsaW5lLnRpbWVSZW1haW5pbmcoKX1tcyByZW1haW5pbmcgaW4gZnJhbWVgLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfcnVuV2l0aFRpbWVvdXQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2lkbGVUaW1lciAhPSBudWxsKSB7XG4gICAgICBjYW5jZWxJZGxlQ2FsbGJhY2sodGhpcy5faWRsZVRpbWVyKTtcbiAgICAgIHRoaXMuX2lkbGVUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5faWRsZVRpbWVyID0gcmVxdWVzdElkbGVDYWxsYmFjayhcbiAgICAgIGRlYWRsaW5lID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVzc2FnZTogYCR7ZGVhZGxpbmUudGltZVJlbWFpbmluZygpfW1zIHJlbWFpbmluZyBpbiBmcmFtZSwgaXQgZGlkIHRpbWVvdXQ6ICR7XG4gICAgICAgICAgICBkZWFkbGluZS5kaWRUaW1lb3V0ID8gJ3llcycgOiAnbm8nXG4gICAgICAgICAgfWAsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHt0aW1lb3V0OiAxMDB9LFxuICAgICk7XG4gICAgYnVybkNQVSgxMDApO1xuICB9O1xuXG4gIF9ydW5CYWNrZ3JvdW5kID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLl9pZGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgY2FuY2VsSWRsZUNhbGxiYWNrKHRoaXMuX2lkbGVUaW1lcik7XG4gICAgICB0aGlzLl9pZGxlVGltZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZGVhZGxpbmU6IHtcbiAgICAgIGRpZFRpbWVvdXQ6IGJvb2xlYW4sXG4gICAgICB0aW1lUmVtYWluaW5nOiAoKSA9PiBudW1iZXIsXG4gICAgICAuLi5cbiAgICB9KSA9PiB7XG4gICAgICB3aGlsZSAoZGVhZGxpbmUudGltZVJlbWFpbmluZygpID4gNSkge1xuICAgICAgICBidXJuQ1BVKDUpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtZXNzYWdlOiBgQnVybmVkIENQVSBmb3IgNW1zICR7dGhpc1xuICAgICAgICAgICAgLl9pdGVycysrfSB0aW1lcywgJHtkZWFkbGluZS50aW1lUmVtYWluaW5nKCl9bXMgcmVtYWluaW5nIGluIGZyYW1lYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lkbGVUaW1lciA9IHJlcXVlc3RJZGxlQ2FsbGJhY2soaGFuZGxlcik7XG4gICAgfTtcbiAgICB0aGlzLl9pZGxlVGltZXIgPSByZXF1ZXN0SWRsZUNhbGxiYWNrKGhhbmRsZXIpO1xuICB9O1xuXG4gIF9zdG9wQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgICB0aGlzLl9pdGVycyA9IDA7XG4gICAgaWYgKHRoaXMuX2lkbGVUaW1lciAhPSBudWxsKSB7XG4gICAgICBjYW5jZWxJZGxlQ2FsbGJhY2sodGhpcy5faWRsZVRpbWVyKTtcbiAgICAgIHRoaXMuX2lkbGVUaW1lciA9IG51bGw7XG4gICAgfVxuICB9O1xufVxuXG50eXBlIFRpbWVyVGVzdGVyUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgZHQ/OiBudW1iZXIsXG4gIHR5cGU6IHN0cmluZyxcbnx9PjtcblxuY2xhc3MgVGltZXJUZXN0ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8VGltZXJUZXN0ZXJQcm9wcz4ge1xuICBfaWkgPSAwO1xuICBfaXRlcnMgPSAwO1xuICBfc3RhcnQgPSAwO1xuICBfdGltZXJJZDogP1RpbWVvdXRJRCA9IG51bGw7XG4gIF9yYWZJZDogP0FuaW1hdGlvbkZyYW1lSUQgPSBudWxsO1xuICBfaW50ZXJ2YWxJZDogP0ludGVydmFsSUQgPSBudWxsO1xuICBfaW1tZWRpYXRlSWQ6ID9PYmplY3QgPSBudWxsO1xuICBfdGltZXJGbjogPygpID0+IGFueSA9IG51bGw7XG5cbiAgcmVuZGVyKCk6IGFueSB7XG4gICAgY29uc3QgYXJncyA9XG4gICAgICAnZm4nICsgKHRoaXMucHJvcHMuZHQgIT09IHVuZGVmaW5lZCA/ICcsICcgKyB0aGlzLnByb3BzLmR0IDogJycpO1xuICAgIHJldHVybiAoXG4gICAgICA8Uk5UZXN0ZXJCdXR0b24gb25QcmVzcz17dGhpcy5fcnVufT5cbiAgICAgICAgTWVhc3VyZToge3RoaXMucHJvcHMudHlwZX0oe2FyZ3N9KSAtIHt0aGlzLl9paSB8fCAwfVxuICAgICAgPC9STlRlc3RlckJ1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVySWQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVySWQpO1xuICAgICAgdGhpcy5fdGltZXJJZCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3JhZklkICE9IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZklkKTtcbiAgICAgIHRoaXMuX3JhZklkID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1tZWRpYXRlSWQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJJbW1lZGlhdGUodGhpcy5faW1tZWRpYXRlSWQpO1xuICAgICAgdGhpcy5faW1tZWRpYXRlSWQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbnRlcnZhbElkICE9IG51bGwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLl9pbnRlcnZhbElkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfcnVuID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5fc3RhcnQpIHtcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5fc3RhcnQgPSBkLmdldFRpbWUoKTtcbiAgICAgIHRoaXMuX2l0ZXJzID0gMTAwO1xuICAgICAgdGhpcy5faWkgPSAwO1xuICAgICAgaWYgKHRoaXMucHJvcHMudHlwZSA9PT0gJ3NldFRpbWVvdXQnKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmR0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5wcm9wcy5kdCA8IDEpIHtcbiAgICAgICAgICB0aGlzLl9pdGVycyA9IDUwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5kdCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucHJvcHMuZHQgPiAyMCkge1xuICAgICAgICAgIHRoaXMuX2l0ZXJzID0gMTA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGltZXJGbiA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl90aW1lcklkID0gc2V0VGltZW91dCh0aGlzLl9ydW4sIHRoaXMucHJvcHMuZHQpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnR5cGUgPT09ICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKSB7XG4gICAgICAgIHRoaXMuX3RpbWVyRm4gPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fcnVuKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy50eXBlID09PSAnc2V0SW1tZWRpYXRlJykge1xuICAgICAgICB0aGlzLl9pdGVycyA9IDUwMDA7XG4gICAgICAgIHRoaXMuX3RpbWVyRm4gPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5faW1tZWRpYXRlSWQgPSBzZXRJbW1lZGlhdGUodGhpcy5fcnVuKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy50eXBlID09PSAnc2V0SW50ZXJ2YWwnKSB7XG4gICAgICAgIHRoaXMuX2l0ZXJzID0gMzA7IC8vIE9ubHkgdXNlZCBmb3IgZm9yY2VVcGRhdGUgcGVyaW9kaWNpdHlcbiAgICAgICAgdGhpcy5fdGltZXJGbiA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ludGVydmFsSWQgPSBzZXRJbnRlcnZhbCh0aGlzLl9ydW4sIHRoaXMucHJvcHMuZHQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5faWkgPj0gdGhpcy5faXRlcnMgJiYgdGhpcy5faW50ZXJ2YWxJZCA9PSBudWxsKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGUgPSBkLmdldFRpbWUoKSAtIHRoaXMuX3N0YXJ0O1xuICAgICAgY29uc3QgbXNnID1cbiAgICAgICAgJ0ZpbmlzaGVkICcgK1xuICAgICAgICB0aGlzLl9paSArXG4gICAgICAgICcgJyArXG4gICAgICAgIHRoaXMucHJvcHMudHlwZSArXG4gICAgICAgICcgY2FsbHMuXFxuJyArXG4gICAgICAgICdFbGFwc2VkIHRpbWU6ICcgK1xuICAgICAgICBlICtcbiAgICAgICAgJyBtc1xcbicgK1xuICAgICAgICBlIC8gdGhpcy5faWkgK1xuICAgICAgICAnIG1zIC8gaXRlcic7XG4gICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgICBBbGVydC5hbGVydChtc2cpO1xuICAgICAgfSBlbHNlIGlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICAgIFRvYXN0QW5kcm9pZC5zaG93KG1zZywgVG9hc3RBbmRyb2lkLlNIT1JUKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N0YXJ0ID0gMDtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9paSA9IDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faWkrKztcbiAgICAvLyBPbmx5IHJlLXJlbmRlciBvY2Nhc2lvbmFsbHkgc28gd2UgZG9uJ3Qgc2xvdyBkb3duIHRpbWVycy5cbiAgICBpZiAodGhpcy5faWkgJSAodGhpcy5faXRlcnMgLyA1KSA9PT0gMCkge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdGltZXJGbikge1xuICAgICAgdGhpcy5fdGltZXJJZCA9IHRoaXMuX3RpbWVyRm4oKTtcbiAgICB9XG4gIH07XG5cbiAgY2xlYXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2ludGVydmFsSWQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbElkKTtcbiAgICAgIC8vIENvbmZpZ3VyZSB0aGluZ3Mgc28gd2UgY2FuIGRvIGEgZmluYWwgcnVuIHRvIHVwZGF0ZSBVSSBhbmQgcmVzZXQgc3RhdGUuXG4gICAgICB0aGlzLl9pbnRlcnZhbElkID0gbnVsbDtcbiAgICAgIHRoaXMuX2l0ZXJzID0gdGhpcy5faWk7XG4gICAgICB0aGlzLl9ydW4oKTtcbiAgICB9XG4gIH07XG59XG5cbmNsYXNzIEludGVydmFsRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgJFJlYWRPbmx5PHt8fH0+LFxuICB7fFxuICAgIHNob3dUaW1lcjogYm9vbGVhbixcbiAgfH0sXG4+IHtcbiAgc3RhdGU6IHtzaG93VGltZXI6IGJvb2xlYW59ID0ge1xuICAgIHNob3dUaW1lcjogdHJ1ZSxcbiAgfTtcblxuICBfdGltZXJUZXN0ZXI6ID9SZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBUaW1lclRlc3Rlcj47XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAge3RoaXMuc3RhdGUuc2hvd1RpbWVyICYmIHRoaXMuX3JlbmRlclRpbWVyKCl9XG4gICAgICAgIDxSTlRlc3RlckJ1dHRvbiBvblByZXNzPXt0aGlzLl90b2dnbGVUaW1lcn0+XG4gICAgICAgICAge3RoaXMuc3RhdGUuc2hvd1RpbWVyID8gJ1VubW91bnQgdGltZXInIDogJ01vdW50IG5ldyB0aW1lcid9XG4gICAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxuXG4gIF9yZW5kZXJUaW1lciA9ICgpOiBSZWFjdC5Ob2RlID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxUaW1lclRlc3RlclxuICAgICAgICAgIHJlZj17cmVmID0+ICh0aGlzLl90aW1lclRlc3RlciA9IHJlZil9XG4gICAgICAgICAgZHQ9ezI1fVxuICAgICAgICAgIHR5cGU9XCJzZXRJbnRlcnZhbFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxSTlRlc3RlckJ1dHRvblxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHRoaXMuX3RpbWVyVGVzdGVyICYmIHRoaXMuX3RpbWVyVGVzdGVyLmNsZWFyKCl9PlxuICAgICAgICAgIENsZWFyIGludGVydmFsXG4gICAgICAgIDwvUk5UZXN0ZXJCdXR0b24+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfTtcblxuICBfdG9nZ2xlVGltZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1RpbWVyOiAhdGhpcy5zdGF0ZS5zaG93VGltZXJ9KTtcbiAgfTtcbn1cblxuZXhwb3J0cy5mcmFtZXdvcmsgPSAnUmVhY3QnO1xuZXhwb3J0cy50aXRsZSA9ICdUaW1lcnMnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdVSSc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0EgZGVtb25zdHJhdGlvbiBvZiBUaW1lcnMgaW4gUmVhY3QgTmF0aXZlLic7XG5cbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ3RoaXMuc2V0VGltZW91dChmbiwgdCknLFxuICAgIGRlc2NyaXB0aW9uOiAoJ0V4ZWN1dGUgZnVuY3Rpb24gZm4gdCBtaWxsaXNlY29uZHMgaW4gdGhlIGZ1dHVyZS4gIElmICcgK1xuICAgICAgJ3QgPT09IDAsIGl0IHdpbGwgYmUgZW5xdWV1ZWQgaW1tZWRpYXRlbHkgaW4gdGhlIG5leHQgZXZlbnQgbG9vcC4gICcgK1xuICAgICAgJ0xhcmdlciB2YWx1ZXMgd2lsbCBmaXJlIG9uIHRoZSBjbG9zZXN0IGZyYW1lLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGltZXJUZXN0ZXIgdHlwZT1cInNldFRpbWVvdXRcIiBkdD17MH0gLz5cbiAgICAgICAgICA8VGltZXJUZXN0ZXIgdHlwZT1cInNldFRpbWVvdXRcIiBkdD17MX0gLz5cbiAgICAgICAgICA8VGltZXJUZXN0ZXIgdHlwZT1cInNldFRpbWVvdXRcIiBkdD17MTAwfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKScsXG4gICAgZGVzY3JpcHRpb246ICdFeGVjdXRlIGZ1bmN0aW9uIGZuIG9uIHRoZSBuZXh0IGZyYW1lLicsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGltZXJUZXN0ZXIgdHlwZT1cInJlcXVlc3RBbmltYXRpb25GcmFtZVwiIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAndGhpcy5yZXF1ZXN0SWRsZUNhbGxiYWNrKGZuKScsXG4gICAgZGVzY3JpcHRpb246ICdFeGVjdXRlIGZ1bmN0aW9uIGZuIG9uIHRoZSBuZXh0IEpTIGZyYW1lIHRoYXQgaGFzIGlkbGUgdGltZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8UmVxdWVzdElkbGVDYWxsYmFja1Rlc3RlciAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ3RoaXMuc2V0SW1tZWRpYXRlKGZuKScsXG4gICAgZGVzY3JpcHRpb246ICdFeGVjdXRlIGZ1bmN0aW9uIGZuIGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgSlMgZXZlbnQgbG9vcC4nLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRpbWVyVGVzdGVyIHR5cGU9XCJzZXRJbW1lZGlhdGVcIiAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ3RoaXMuc2V0SW50ZXJ2YWwoZm4sIHQpJyxcbiAgICBkZXNjcmlwdGlvbjogKCdFeGVjdXRlIGZ1bmN0aW9uIGZuIGV2ZXJ5IHQgbWlsbGlzZWNvbmRzIHVudGlsIGNhbmNlbGxlZCAnICtcbiAgICAgICdvciBjb21wb25lbnQgaXMgdW5tb3VudGVkLic6IHN0cmluZyksXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPEludGVydmFsRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtFbGVtZW50LCBOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QW5pbWF0ZWQsIEVhc2luZywgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuZnVuY3Rpb24gQW5pbWF0ZVRyYW5zZm9ybVNpbmdsZVByb3AoKSB7XG4gIGNvbnN0IFt0aGV0YV0gPSB1c2VTdGF0ZShuZXcgQW5pbWF0ZWQuVmFsdWUoNDUpKTtcbiAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcbiAgICB0aGV0YS5zZXRWYWx1ZSgwKTtcbiAgICBBbmltYXRlZC50aW1pbmcodGhldGEsIHtcbiAgICAgIHRvVmFsdWU6IDEwMCxcbiAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICB9KS5zdGFydChhbmltYXRlKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFuaW1hdGUoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmZsaXBDYXJkQ29udGFpbmVyfT5cbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLmJveDYsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb3RhdGU6IHRoZXRhLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxMDBdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsnMGRlZycsICczNjBkZWcnXSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXX0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuZmxpcFRleHR9PlRoaXMgdGV4dCBpcyBmbGlwcGluZyBncmVhdC48L1RleHQ+XG4gICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm1PcmlnaW5FeGFtcGxlKCkge1xuICBjb25zdCByb3RhdGVBbmltID0gUmVhY3QudXNlUmVmKG5ldyBBbmltYXRlZC5WYWx1ZSgwKSkuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIEFuaW1hdGVkLmxvb3AoXG4gICAgICBBbmltYXRlZC50aW1pbmcocm90YXRlQW5pbSwge1xuICAgICAgICB0b1ZhbHVlOiAxLFxuICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgZWFzaW5nOiBFYXNpbmcubGluZWFyLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnN0YXJ0KCk7XG4gIH0sIFtyb3RhdGVBbmltXSk7XG5cbiAgY29uc3Qgc3BpbiA9IHJvdGF0ZUFuaW0uaW50ZXJwb2xhdGUoe1xuICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICBvdXRwdXRSYW5nZTogWycwZGVnJywgJzM2MGRlZyddLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudHJhbnNmb3JtT3JpZ2luV3JhcHBlcn0+XG4gICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICBzdHlsZT17W1xuICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm1PcmlnaW5WaWV3LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogW3tyb3RhdGU6IHNwaW59XSxcbiAgICAgICAgICB9LFxuICAgICAgICBdfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZsaXAoKSB7XG4gIGNvbnN0IFt0aGV0YV0gPSB1c2VTdGF0ZShuZXcgQW5pbWF0ZWQuVmFsdWUoNDUpKTtcbiAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcbiAgICB0aGV0YS5zZXRWYWx1ZSgwKTtcbiAgICBBbmltYXRlZC50aW1pbmcodGhldGEsIHtcbiAgICAgIHRvVmFsdWU6IDM2MCxcbiAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICB9KS5zdGFydChhbmltYXRlKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFuaW1hdGUoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLmZsaXBDYXJkQ29udGFpbmVyfT5cbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLmZsaXBDYXJkLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICB7cGVyc3BlY3RpdmU6IDg1MH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb3RhdGVYOiB0aGV0YS5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMTgwXSxcbiAgICAgICAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbJzBkZWcnLCAnMTgwZGVnJ10sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF19PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmZsaXBUZXh0fT5UaGlzIHRleHQgaXMgZmxpcHBpbmcgZ3JlYXQuPC9UZXh0PlxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICBzdHlsZXMuZmxpcENhcmQsXG4gICAgICAgICAgc3R5bGVzLmZsaXBDYXJkMSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IFtcbiAgICAgICAgICAgICAge3BlcnNwZWN0aXZlOiA4NTB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm90YXRlWDogdGhldGEuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDE4MF0sXG4gICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWycxODBkZWcnLCAnMzYwZGVnJ10sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF19PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmZsaXBUZXh0fT5PbiB0aGUgZmxpcCBzaWRlLi4uPC9UZXh0PlxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBoZWlnaHQ6IDUwMCxcbiAgfSxcbiAgYm94MToge1xuICAgIGxlZnQ6IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuICAgIGhlaWdodDogNTAsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHRyYW5zZm9ybTogW1xuICAgICAge3RyYW5zbGF0ZVg6IDEwMH0sXG4gICAgICB7dHJhbnNsYXRlWTogNTB9LFxuICAgICAge3JvdGF0ZTogJzMwZGVnJ30sXG4gICAgICB7c2NhbGVYOiAyfSxcbiAgICAgIHtzY2FsZVk6IDJ9LFxuICAgIF0sXG4gICAgd2lkdGg6IDUwLFxuICB9LFxuICBib3gyOiB7XG4gICAgbGVmdDogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdwdXJwbGUnLFxuICAgIGhlaWdodDogNTAsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHRyYW5zZm9ybTogW1xuICAgICAge3NjYWxlWDogMn0sXG4gICAgICB7c2NhbGVZOiAyfSxcbiAgICAgIHt0cmFuc2xhdGVYOiAxMDB9LFxuICAgICAge3RyYW5zbGF0ZVk6IDUwfSxcbiAgICAgIHtyb3RhdGU6ICczMGRlZyd9LFxuICAgIF0sXG4gICAgd2lkdGg6IDUwLFxuICB9LFxuICBib3gzc3RlcDE6IHtcbiAgICBsZWZ0OiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0cGluaycsXG4gICAgaGVpZ2h0OiA1MCxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgdHJhbnNmb3JtOiBbe3JvdGF0ZTogJzMwZGVnJ31dLFxuICAgIHdpZHRoOiA1MCxcbiAgfSxcbiAgYm94M3N0ZXAyOiB7XG4gICAgbGVmdDogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdob3RwaW5rJyxcbiAgICBoZWlnaHQ6IDUwLFxuICAgIG9wYWNpdHk6IDAuNSxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgdHJhbnNmb3JtOiBbe3JvdGF0ZTogJzMwZGVnJ30sIHtzY2FsZVg6IDJ9LCB7c2NhbGVZOiAyfV0sXG4gICAgd2lkdGg6IDUwLFxuICB9LFxuICBib3gzc3RlcDM6IHtcbiAgICBsZWZ0OiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2RlZXBwaW5rJyxcbiAgICBoZWlnaHQ6IDUwLFxuICAgIG9wYWNpdHk6IDAuNSxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgdHJhbnNmb3JtOiBbXG4gICAgICB7cm90YXRlOiAnMzBkZWcnfSxcbiAgICAgIHtzY2FsZVg6IDJ9LFxuICAgICAge3NjYWxlWTogMn0sXG4gICAgICB7dHJhbnNsYXRlWDogMTAwfSxcbiAgICAgIHt0cmFuc2xhdGVZOiA1MH0sXG4gICAgXSxcbiAgICB3aWR0aDogNTAsXG4gIH0sXG4gIGJveDQ6IHtcbiAgICBsZWZ0OiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2RhcmtvcmFuZ2UnLFxuICAgIGhlaWdodDogNTAsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHRyYW5zZm9ybTogW3t0cmFuc2xhdGU6IFsyMDAsIDM1MF19LCB7c2NhbGU6IDIuNX0sIHtyb3RhdGU6ICctMC4ycmFkJ31dLFxuICAgIHdpZHRoOiAxMDAsXG4gIH0sXG4gIGJveDU6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdtYXJvb24nLFxuICAgIGhlaWdodDogNTAsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiA1MCxcbiAgfSxcbiAgYm94NVRyYW5zZm9ybToge1xuICAgIHRyYW5zZm9ybTogW3t0cmFuc2xhdGU6IFstNTAsIDM1XX0sIHtyb3RhdGU6ICc1MGRlZyd9LCB7c2NhbGU6IDJ9XSxcbiAgfSxcbiAgYm94Njoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3NhbG1vbicsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgfSxcbiAgYm94Nzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0c2VhZ3JlZW4nLFxuICAgIGhlaWdodDogNTAsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiA1MCxcbiAgfSxcbiAgYm94N1RyYW5zZm9ybToge1xuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTBweCwgMzVweCkgcm90YXRlKDUwZGVnKSBzY2FsZSgyKScsXG4gIH0sXG4gIGZsaXBDYXJkQ29udGFpbmVyOiB7XG4gICAgbWFyZ2luVmVydGljYWw6IDQwLFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICB6SW5kZXg6IDAsXG4gIH0sXG4gIGZsaXBDYXJkOiB7XG4gICAgd2lkdGg6IDIwMCxcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmx1ZScsXG4gICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgfSxcbiAgZmxpcENhcmQxOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gIH0sXG4gIGZsaXBUZXh0OiB7XG4gICAgd2lkdGg6IDkwLFxuICAgIGZvbnRTaXplOiAyMCxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIHRyYW5zZm9ybU9yaWdpbldyYXBwZXI6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgdHJhbnNmb3JtT3JpZ2luVmlldzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3BpbmsnLFxuICAgIHdpZHRoOiAxMDAsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnVHJhbnNmb3Jtcyc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3RyYW5zZm9ybXMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdWaWV3IHRyYW5zZm9ybXMnO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnUGVyc3BlY3RpdmUsIFJvdGF0ZSwgQW5pbWF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ3BlcnNwZWN0aXZlOiA4NTAsIHJvdGF0ZVg6IEFuaW1hdGVkLnRpbWluZygwIC0+IDM2MCknLFxuICAgIHJlbmRlcigpOiBFbGVtZW50PGFueT4ge1xuICAgICAgcmV0dXJuIDxGbGlwIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RyYW5zbGF0ZSwgUm90YXRlLCBTY2FsZScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcInRyYW5zbGF0ZVg6IDEwMCwgdHJhbnNsYXRlWTogNTAsIHJvdGF0ZTogJzMwZGVnJywgc2NhbGVYOiAyLCBzY2FsZVk6IDJcIixcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3gxfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1NjYWxlLCBUcmFuc2xhdGUsIFJvdGF0ZSwgJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwic2NhbGVYOiAyLCBzY2FsZVk6IDIsIHRyYW5zbGF0ZVg6IDEwMCwgdHJhbnNsYXRlWTogNTAsIHJvdGF0ZTogJzMwZGVnJ1wiLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJveDJ9IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUm90YXRlJyxcbiAgICBkZXNjcmlwdGlvbjogXCJyb3RhdGU6ICczMGRlZydcIixcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3gzc3RlcDF9IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnUm90YXRlLCBTY2FsZScsXG4gICAgZGVzY3JpcHRpb246IFwicm90YXRlOiAnMzBkZWcnLCBzY2FsZVg6IDIsIHNjYWxlWTogMlwiLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJveDNzdGVwMn0gLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdSb3RhdGUsIFNjYWxlLCBUcmFuc2xhdGUgJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwicm90YXRlOiAnMzBkZWcnLCBzY2FsZVg6IDIsIHNjYWxlWTogMiwgdHJhbnNsYXRlWDogMTAwLCB0cmFuc2xhdGVZOiA1MFwiLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJveDNzdGVwM30gLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUcmFuc2xhdGUsIFNjYWxlLCBSb3RhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiBcInRyYW5zbGF0ZTogWzIwMCwgMzUwXSwgc2NhbGU6IDIuNSwgcm90YXRlOiAnLTAuMnJhZCdcIixcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ib3g0fSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RyYW5zbGF0ZSwgUm90YXRlLCBTY2FsZScsXG4gICAgZGVzY3JpcHRpb246IFwidHJhbnNsYXRlOiBbLTUwLCAzNV0sIHJvdGF0ZTogJzUwZGVnJywgc2NhbGU6IDJcIixcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94NSwgc3R5bGVzLmJveDVUcmFuc2Zvcm1dfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0FuaW1hdGUgVHJhbnNsYXRlIHNpbmdsZSBwcm9wJyxcbiAgICBkZXNjcmlwdGlvbjogXCJyb3RhdGU6ICczNjBkZWcnXCIsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxBbmltYXRlVHJhbnNmb3JtU2luZ2xlUHJvcCAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUcmFuc2Zvcm0gdXNpbmcgYSBzdHJpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiBcInRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTBweCwgMzVweCkgcm90YXRlKDUwZGVnKSBzY2FsZSgyKSdcIixcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYm94Nywgc3R5bGVzLmJveDdUcmFuc2Zvcm1dfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RyYW5zZm9ybSBvcmlnaW4nLFxuICAgIGRlc2NyaXB0aW9uOiBcInRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0J1wiLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiA8VHJhbnNmb3JtT3JpZ2luRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgU2FtcGxlVHVyYm9Nb2R1bGVFeGFtcGxlID0gcmVxdWlyZSgnLi9TYW1wbGVUdXJib01vZHVsZUV4YW1wbGUnKTtcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuZXhwb3J0cy5kaXNwbGF5TmFtZSA9ICh1bmRlZmluZWQ6ID9zdHJpbmcpO1xuZXhwb3J0cy50aXRsZSA9ICdUdXJib01vZHVsZSc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAnVXNhZ2Ugb2YgVHVyYm9Nb2R1bGUnO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnU2FtcGxlVHVyYm9Nb2R1bGUnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFNhbXBsZVR1cmJvTW9kdWxlRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Um9vdFRhZ30gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9SZWFjdE5hdGl2ZS9Sb290VGFnJztcblxuaW1wb3J0IHN0eWxlcyBmcm9tICcuL1R1cmJvTW9kdWxlRXhhbXBsZUNvbW1vbic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBGbGF0TGlzdCxcbiAgUm9vdFRhZ0NvbnRleHQsXG4gIFRleHQsXG4gIFRvdWNoYWJsZU9wYWNpdHksXG4gIFZpZXcsXG59IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUgZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UdXJib01vZHVsZS9zYW1wbGVzL05hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlJztcbmltcG9ydCB7RW51bUludH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UdXJib01vZHVsZS9zYW1wbGVzL05hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlJztcblxudHlwZSBTdGF0ZSA9IHt8XG4gIHRlc3RSZXN1bHRzOiB7XG4gICAgW3N0cmluZ106IHtcbiAgICAgIHR5cGU6IHN0cmluZyxcbiAgICAgIHZhbHVlOiBtaXhlZCxcbiAgICAgIC4uLlxuICAgIH0sXG4gICAgLi4uXG4gIH0sXG58fTtcblxuY2xhc3MgU2FtcGxlVHVyYm9Nb2R1bGVFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHt8fH0sIFN0YXRlPiB7XG4gIHN0YXRpYyBjb250ZXh0VHlwZTogUmVhY3QkQ29udGV4dDxSb290VGFnPiA9IFJvb3RUYWdDb250ZXh0O1xuXG4gIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICB0ZXN0UmVzdWx0czoge30sXG4gIH07XG5cbiAgLy8gQWRkIGNhbGxzIHRvIG1ldGhvZHMgaW4gVHVyYm9Nb2R1bGUgaGVyZVxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF90ZXN0cyA9IHtcbiAgICBjYWxsYmFjazogKCkgPT5cbiAgICAgIE5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmdldFZhbHVlV2l0aENhbGxiYWNrKGNhbGxiYWNrVmFsdWUgPT5cbiAgICAgICAgdGhpcy5fc2V0UmVzdWx0KCdjYWxsYmFjaycsIGNhbGxiYWNrVmFsdWUpLFxuICAgICAgKSxcbiAgICBwcm9taXNlOiAoKSA9PlxuICAgICAgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0VmFsdWVXaXRoUHJvbWlzZShmYWxzZSkudGhlbih2YWx1ZVByb21pc2UgPT5cbiAgICAgICAgdGhpcy5fc2V0UmVzdWx0KCdwcm9taXNlJywgdmFsdWVQcm9taXNlKSxcbiAgICAgICksXG4gICAgcmVqZWN0UHJvbWlzZTogKCkgPT5cbiAgICAgIE5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmdldFZhbHVlV2l0aFByb21pc2UodHJ1ZSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge30pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgncmVqZWN0UHJvbWlzZScsIGUubWVzc2FnZSk7XG4gICAgICAgIH0pLFxuICAgIGdldENvbnN0YW50czogKCkgPT4gTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0Q29uc3RhbnRzKCksXG4gICAgdm9pZEZ1bmM6ICgpID0+IE5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLnZvaWRGdW5jKCksXG4gICAgZ2V0Qm9vbDogKCkgPT4gTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0Qm9vbCh0cnVlKSxcbiAgICBnZXRFbnVtOiAoKSA9PlxuICAgICAgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0RW51bVxuICAgICAgICA/IE5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmdldEVudW0oRW51bUludC5BKVxuICAgICAgICA6IG51bGwsXG4gICAgZ2V0TnVtYmVyOiAoKSA9PiBOYXRpdmVTYW1wbGVUdXJib01vZHVsZS5nZXROdW1iZXIoOTkuOTUpLFxuICAgIGdldFN0cmluZzogKCkgPT4gTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0U3RyaW5nKCdIZWxsbycpLFxuICAgIGdldEFycmF5OiAoKSA9PlxuICAgICAgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0QXJyYXkoW1xuICAgICAgICB7YTogMSwgYjogJ2Zvbyd9LFxuICAgICAgICB7YTogMiwgYjogJ2Jhcid9LFxuICAgICAgICBudWxsLFxuICAgICAgXSksXG4gICAgZ2V0T2JqZWN0OiAoKSA9PlxuICAgICAgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0T2JqZWN0KHthOiAxLCBiOiAnZm9vJywgYzogbnVsbH0pLFxuICAgIGdldFVuc2FmZU9iamVjdDogKCkgPT5cbiAgICAgIE5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmdldE9iamVjdCh7YTogMSwgYjogJ2ZvbycsIGM6IG51bGx9KSxcbiAgICBnZXRSb290VGFnOiAoKSA9PiBOYXRpdmVTYW1wbGVUdXJib01vZHVsZS5nZXRSb290VGFnKHRoaXMuY29udGV4dCksXG4gICAgZ2V0VmFsdWU6ICgpID0+XG4gICAgICBOYXRpdmVTYW1wbGVUdXJib01vZHVsZS5nZXRWYWx1ZSg1LCAndGVzdCcsIHthOiAxLCBiOiAnZm9vJ30pLFxuICAgIHZvaWRGdW5jVGhyb3dzOiAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBOYXRpdmVTYW1wbGVUdXJib01vZHVsZS52b2lkRnVuY1Rocm93cz8uKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRPYmplY3RUaHJvd3M6ICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmdldE9iamVjdFRocm93cz8uKHthOiAxLCBiOiAnZm9vJywgYzogbnVsbH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvbWlzZVRocm93czogKCkgPT4ge1xuICAgICAgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUucHJvbWlzZVRocm93cz8uKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge30pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgncHJvbWlzZVRocm93cycsIGUubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgdm9pZEZ1bmNBc3NlcnQ6ICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLnZvaWRGdW5jQXNzZXJ0Py4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldE9iamVjdEFzc2VydDogKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUuZ2V0T2JqZWN0QXNzZXJ0Py4oe2E6IDEsIGI6ICdmb28nLCBjOiBudWxsfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9taXNlQXNzZXJ0OiAoKSA9PiB7XG4gICAgICBOYXRpdmVTYW1wbGVUdXJib01vZHVsZS5wcm9taXNlQXNzZXJ0Py4oKVxuICAgICAgICAudGhlbigoKSA9PiB7fSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgdGhpcy5fc2V0UmVzdWx0KCdwcm9taXNlQXNzZXJ0JywgZS5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICBfc2V0UmVzdWx0KFxuICAgIG5hbWU6XG4gICAgICB8IHN0cmluZ1xuICAgICAgfCAnY2FsbGJhY2snXG4gICAgICB8ICdnZXRBcnJheSdcbiAgICAgIHwgJ2dldEJvb2wnXG4gICAgICB8ICdnZXRFbnVtJ1xuICAgICAgfCAnZ2V0Q29uc3RhbnRzJ1xuICAgICAgfCAnZ2V0TnVtYmVyJ1xuICAgICAgfCAnZ2V0T2JqZWN0J1xuICAgICAgfCAnZ2V0Um9vdFRhZydcbiAgICAgIHwgJ2dldFN0cmluZydcbiAgICAgIHwgJ2dldFVuc2FmZU9iamVjdCdcbiAgICAgIHwgJ2dldFZhbHVlJ1xuICAgICAgfCAncHJvbWlzZSdcbiAgICAgIHwgJ3JlamVjdFByb21pc2UnXG4gICAgICB8ICd2b2lkRnVuYydcbiAgICAgIHwgJ3ZvaWRGdW5jVGhyb3dzJ1xuICAgICAgfCAnZ2V0T2JqZWN0VGhyb3dzJ1xuICAgICAgfCAncHJvbWlzZVRocm93cydcbiAgICAgIHwgJ3ZvaWRGdW5jQXNzZXJ0J1xuICAgICAgfCAnZ2V0T2JqZWN0QXNzZXJ0J1xuICAgICAgfCAncHJvbWlzZUFzc2VydCcsXG4gICAgcmVzdWx0OlxuICAgICAgfCAkRmxvd0ZpeE1lXG4gICAgICB8IHZvaWRcbiAgICAgIHwgUm9vdFRhZ1xuICAgICAgfCBQcm9taXNlPG1peGVkPlxuICAgICAgfCBudW1iZXJcbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IGJvb2xlYW5cbiAgICAgIHwge2NvbnN0MTogYm9vbGVhbiwgY29uc3QyOiBudW1iZXIsIGNvbnN0Mzogc3RyaW5nfVxuICAgICAgfCBBcnJheTwkRmxvd0ZpeE1lPixcbiAgKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSgoe3Rlc3RSZXN1bHRzfSkgPT4gKHtcbiAgICAgIC8qICRGbG93Rml4TWVbY2Fubm90LXNwcmVhZC1pbmRleGVyXSAoPj0wLjEyMi4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKVxuICAgICAgICogVGhpcyBjb21tZW50IHN1cHByZXNzZXMgYW4gZXJyb3IgZm91bmQgd2hlbiBGbG93IHYwLjEyMi4wIHdhc1xuICAgICAgICogZGVwbG95ZWQuIFRvIHNlZSB0aGUgZXJyb3IsIGRlbGV0ZSB0aGlzIGNvbW1lbnQgYW5kIHJ1biBGbG93LiAqL1xuICAgICAgdGVzdFJlc3VsdHM6IHtcbiAgICAgICAgLi4udGVzdFJlc3VsdHMsXG4gICAgICAgIC8qICRGbG93Rml4TWVbaW52YWxpZC1jb21wdXRlZC1wcm9wXSAoPj0wLjExMS4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKVxuICAgICAgICAgKiBUaGlzIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuMTExIHdhc1xuICAgICAgICAgKiBkZXBsb3llZC4gVG8gc2VlIHRoZSBlcnJvciwgZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuICovXG4gICAgICAgIFtuYW1lXToge3ZhbHVlOiByZXN1bHQsIHR5cGU6IHR5cGVvZiByZXN1bHR9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBfcmVuZGVyUmVzdWx0KG5hbWU6IHN0cmluZyk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhdGUudGVzdFJlc3VsdHNbbmFtZV0gfHwge307XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucmVzdWx0fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMudmFsdWVdfT57SlNPTi5zdHJpbmdpZnkocmVzdWx0LnZhbHVlKX08L1RleHQ+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLnR5cGVdfT57cmVzdWx0LnR5cGV9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICBpZiAoZ2xvYmFsLl9fdHVyYm9Nb2R1bGVQcm94eSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgbG9hZCB0aGlzIGV4YW1wbGUgYmVjYXVzZSBUdXJib01vZHVsZSBpcyBub3QgY29uZmlndXJlZC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5pdGVtfT5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY29sdW1uLCBzdHlsZXMuYnV0dG9uXX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX3Rlc3RzKS5mb3JFYWNoKGl0ZW0gPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoaXRlbSwgdGhpcy5fdGVzdHNbaXRlbV0oKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvblRleHRMYXJnZX0+UnVuIGFsbCB0ZXN0czwvVGV4dD5cbiAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHRoaXMuc2V0U3RhdGUoe3Rlc3RSZXN1bHRzOiB7fX0pfVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY29sdW1uLCBzdHlsZXMuYnV0dG9uXX0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvblRleHRMYXJnZX0+Q2xlYXIgcmVzdWx0czwvVGV4dD5cbiAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPEZsYXRMaXN0XG4gICAgICAgICAgZGF0YT17T2JqZWN0LmtleXModGhpcy5fdGVzdHMpfVxuICAgICAgICAgIGtleUV4dHJhY3Rvcj17aXRlbSA9PiBpdGVtfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh7aXRlbX0pID0+IChcbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaXRlbX0+XG4gICAgICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY29sdW1uLCBzdHlsZXMuYnV0dG9uXX1cbiAgICAgICAgICAgICAgICBvblByZXNzPXtlID0+IHRoaXMuX3NldFJlc3VsdChpdGVtLCB0aGlzLl90ZXN0c1tpdGVtXSgpKX0+XG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b25UZXh0fT57aXRlbX08L1RleHQ+XG4gICAgICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuY29sdW1uXX0+e3RoaXMuX3JlbmRlclJlc3VsdChpdGVtKX08L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2FtcGxlVHVyYm9Nb2R1bGVFeGFtcGxlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB7UGxhdGZvcm0sIFN0eWxlU2hlZXR9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbi8vICRGbG93Rml4TWVbdmFsdWUtYXMtdHlwZV1cbmNvbnN0IHN0eWxlczogU3R5bGVTaGVldCA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgaXRlbToge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIG1hcmdpbjogMixcbiAgfSxcbiAgY29sdW1uOiB7XG4gICAgZmxleDogMixcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgcGFkZGluZ1JpZ2h0OiA1LFxuICB9LFxuICByZXN1bHQ6IHtcbiAgICBhbGlnbkl0ZW1zOiAnc3RyZXRjaCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgfSxcbiAgdmFsdWU6IHtcbiAgICBmb250RmFtaWx5OiBQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgPyAnTWVubG8nIDogJ21vbm9zcGFjZScsXG4gICAgZm9udFNpemU6IDEwLFxuICB9LFxuICB0eXBlOiB7XG4gICAgY29sb3I6ICcjMzMzJyxcbiAgICBmb250U2l6ZTogOCxcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgYm9yZGVyQ29sb3I6ICcjNDQ0JyxcbiAgICBwYWRkaW5nOiAzLFxuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGJ1dHRvblRleHRMYXJnZToge1xuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgY29sb3I6ICdyZ2IoMCwxMjIsMjU1KScsXG4gICAgZm9udFNpemU6IDE2LFxuICAgIHBhZGRpbmc6IDYsXG4gIH0sXG4gIGJ1dHRvblRleHQ6IHtcbiAgICBjb2xvcjogJ3JnYigwLDEyMiwyNTUpJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIGZvbnRTaXplOiAxMixcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHlsZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAZm9ybWF0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTYW1wbGVUdXJib01vZHVsZSc7XG5pbXBvcnQgTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUgZnJvbSAnLi4vLi4vLi4vc3JjL3ByaXZhdGUvc3BlY3MvbW9kdWxlcy9OYXRpdmVTYW1wbGVUdXJib01vZHVsZSc7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTYW1wbGVUdXJib01vZHVsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgUm9vdFRhZyxcbiAgVHVyYm9Nb2R1bGUsXG59IGZyb20gJy4uLy4uLy4uLy4uL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuaW1wb3J0IHR5cGUge1Vuc2FmZU9iamVjdH0gZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R5cGVzL0NvZGVnZW5UeXBlcyc7XG5cbmltcG9ydCAqIGFzIFR1cmJvTW9kdWxlUmVnaXN0cnkgZnJvbSAnLi4vLi4vLi4vLi4vTGlicmFyaWVzL1R1cmJvTW9kdWxlL1R1cmJvTW9kdWxlUmVnaXN0cnknO1xuXG5leHBvcnQgZW51bSBFbnVtSW50IHtcbiAgQSA9IDIzLFxuICBCID0gNDIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlYyBleHRlbmRzIFR1cmJvTW9kdWxlIHtcbiAgLy8gRXhwb3J0ZWQgbWV0aG9kcy5cbiAgK2dldENvbnN0YW50czogKCkgPT4ge3xcbiAgICBjb25zdDE6IGJvb2xlYW4sXG4gICAgY29uc3QyOiBudW1iZXIsXG4gICAgY29uc3QzOiBzdHJpbmcsXG4gIHx9O1xuICArdm9pZEZ1bmM6ICgpID0+IHZvaWQ7XG4gICtnZXRCb29sOiAoYXJnOiBib29sZWFuKSA9PiBib29sZWFuO1xuICArZ2V0RW51bT86IChhcmc6IEVudW1JbnQpID0+IEVudW1JbnQ7XG4gICtnZXROdW1iZXI6IChhcmc6IG51bWJlcikgPT4gbnVtYmVyO1xuICArZ2V0U3RyaW5nOiAoYXJnOiBzdHJpbmcpID0+IHN0cmluZztcbiAgK2dldEFycmF5OiAoYXJnOiBBcnJheTxhbnk+KSA9PiBBcnJheTxhbnk+O1xuICArZ2V0T2JqZWN0OiAoYXJnOiBPYmplY3QpID0+IE9iamVjdDtcbiAgK2dldFVuc2FmZU9iamVjdDogKGFyZzogVW5zYWZlT2JqZWN0KSA9PiBVbnNhZmVPYmplY3Q7XG4gICtnZXRSb290VGFnOiAoYXJnOiBSb290VGFnKSA9PiBSb290VGFnO1xuICArZ2V0VmFsdWU6ICh4OiBudW1iZXIsIHk6IHN0cmluZywgejogT2JqZWN0KSA9PiBPYmplY3Q7XG4gICtnZXRWYWx1ZVdpdGhDYWxsYmFjazogKGNhbGxiYWNrOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCkgPT4gdm9pZDtcbiAgK2dldFZhbHVlV2l0aFByb21pc2U6IChlcnJvcjogYm9vbGVhbikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICArdm9pZEZ1bmNUaHJvd3M/OiAoKSA9PiB2b2lkO1xuICArZ2V0T2JqZWN0VGhyb3dzPzogKGFyZzogT2JqZWN0KSA9PiBPYmplY3Q7XG4gICtwcm9taXNlVGhyb3dzPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgK3ZvaWRGdW5jQXNzZXJ0PzogKCkgPT4gdm9pZDtcbiAgK2dldE9iamVjdEFzc2VydD86IChhcmc6IE9iamVjdCkgPT4gT2JqZWN0O1xuICArcHJvbWlzZUFzc2VydD86ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IChUdXJib01vZHVsZVJlZ2lzdHJ5LmdldEVuZm9yY2luZzxTcGVjPihcbiAgJ1NhbXBsZVR1cmJvTW9kdWxlJyxcbik6IFNwZWMpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8vIEJlbG93IHdlIHdhbnQgdG8gdXNlIGBoYXNPd25Qcm9wZXJ0eWAgb24gYW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlXG4vLyBgT2JqZWN0LnByb3RvdHlwZWAgaW4gaXRzIHByb3RvIGNoYWluLCBzbyB3ZSBtdXN0IGV4dHJhY3QgaXQgaGVyZS5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8vIE1hcCBmcm9tIGFuIGVudW0gb2JqZWN0IHRvIGEgcmV2ZXJzZSBtYXAgb2YgaXRzIHZhbHVlcyB0byBuYW1lc1xudmFyIHJldmVyc2VNYXBDYWNoZSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gbmV3IFdlYWtNYXAoKSA6IG5ldyBNYXAoKTtcblxuLy8gQ29tcHV0ZXMgdGhlIHJldmVyc2UgbWFwcGluZyBvZiB0aGUgZW51bSBvYmplY3Q6IGZyb20gdmFsdWUgdG8gbmFtZS5cbi8vIEZsb3cgRW51bSB2YWx1ZXMgYXJlIHVuaXF1ZSAoZW5mb3JjZWQgYnkgdGhlIHBhcnNlciksIHNvIHRoaXMgaXMgYVxuLy8gb25lIHRvIG9uZSBtYXBwaW5nLlxuZnVuY3Rpb24gZ2V0UmV2ZXJzZU1hcChlbnVtT2JqZWN0KSB7XG4gIHZhciByZXZlcnNlTWFwID0gcmV2ZXJzZU1hcENhY2hlLmdldChlbnVtT2JqZWN0KTtcbiAgaWYgKHJldmVyc2VNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXZlcnNlTWFwO1xuICB9XG4gIC8vIFdlIGFyZW4ndCB1c2luZyBgT2JqZWN0LnZhbHVlc2AgYmVjYXVzZSB0aGF0IGdldHMgZW51bWVyYWJsZVxuICAvLyBwcm9wZXJ0aWVzLCBhbmQgb3VyIHByb3BlcnRpZXMgYXJlbid0IGVudW1lcmFibGUuXG4gIHZhciBuZXdSZXZlcnNlTWFwID0gbmV3IE1hcCgpO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlbnVtT2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgbmV3UmV2ZXJzZU1hcC5zZXQoZW51bU9iamVjdFtuYW1lXSwgbmFtZSk7XG4gIH0pO1xuICByZXZlcnNlTWFwQ2FjaGUuc2V0KGVudW1PYmplY3QsIG5ld1JldmVyc2VNYXApO1xuICByZXR1cm4gbmV3UmV2ZXJzZU1hcDtcbn1cblxudmFyIEVudW1Qcm90b3R5cGUgPSBPYmplY3QuZnJlZXplKFxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPYmplY3QuY3JlYXRlKG51bGwpLCB7XG4gICAgaXNWYWxpZDoge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBnZXRSZXZlcnNlTWFwKHRoaXMpLmhhcyh4KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjYXN0OiB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCh4KSA/IHggOiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbWVtYmVyczoge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldFJldmVyc2VNYXAodGhpcykua2V5cygpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGdldE5hbWU6IHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGdldFJldmVyc2VNYXAodGhpcykuZ2V0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4pO1xuXG4vLyBgbWVtYmVyc2AgaXMgYW4gb2JqZWN0IG1hcHBpbmcgbmFtZSB0byB2YWx1ZS5cbmZ1bmN0aW9uIEVudW0obWVtYmVycykge1xuICB2YXIgbyA9IE9iamVjdC5jcmVhdGUoRW51bVByb3RvdHlwZSk7XG4gIGZvciAodmFyIGsgaW4gbWVtYmVycykge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG1lbWJlcnMsIGspKSB7XG4gICAgICAvLyBDcmVhdGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrLCB7dmFsdWU6IG1lbWJlcnNba119KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUobyk7XG59XG5cbi8vIE1pcnJvcmVkIGVudW0gKHN0cmluZyBlbnVtIHdpdGggbm8gbWVtYmVyIGluaXRpYWxpemVycykuXG4vLyBPcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24sIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdFxuLy8ga2V5cyBhbmQgdmFsdWVzIGFyZSBpZGVudGljYWwuXG52YXIgRW51bU1pcnJvcmVkUHJvdG90eXBlID0gT2JqZWN0LmZyZWV6ZShcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2JqZWN0LmNyZWF0ZShudWxsKSwge1xuICAgIGlzVmFsaWQ6IHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwodGhpcywgeCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNhc3Q6IHtcbiAgICAgIHZhbHVlOiBFbnVtUHJvdG90eXBlLmNhc3QsXG4gICAgfSxcbiAgICBtZW1iZXJzOiB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBXZSBhcmVuJ3QgdXNpbmcgYE9iamVjdC52YWx1ZXNgIGJlY2F1c2UgdGhhdCBnZXRzIGVudW1lcmFibGVcbiAgICAgICAgLy8gcHJvcGVydGllcywgYW5kIG91ciBwcm9wZXJ0aWVzIGFyZW4ndCBlbnVtZXJhYmxlLlxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykudmFsdWVzKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZ2V0TmFtZToge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KVxuKTtcblxuLy8gYG1lbWJlcnNgIGlzIGFuIGFycmF5IG9mIG5hbWVzICh3aGljaCwgYXJlIGFsc28gdGhlIHZhbHVlcykuXG5FbnVtLk1pcnJvcmVkID0gZnVuY3Rpb24gRW51bU1pcnJvcmVkKG1lbWJlcnMpIHtcbiAgdmFyIG8gPSBPYmplY3QuY3JlYXRlKEVudW1NaXJyb3JlZFByb3RvdHlwZSk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtZW1iZXJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgLy8gVmFsdWUgaXMgc2FtZSBhcyBrZXkuIEFsc28sIG5vbi1lbnVtZXJhYmxlLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBtZW1iZXJzW2ldLCB7dmFsdWU6IG1lbWJlcnNbaV19KTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvKTtcbn07XG5cbk9iamVjdC5mcmVlemUoRW51bS5NaXJyb3JlZCk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZShFbnVtKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qge1xuICBkZWZhdWx0OiBTYW1wbGVMZWdhY3lNb2R1bGVFeGFtcGxlLFxufSA9IHJlcXVpcmUoJy4vU2FtcGxlTGVnYWN5TW9kdWxlRXhhbXBsZScpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG5leHBvcnRzLmRpc3BsYXlOYW1lID0gKHVuZGVmaW5lZDogP3N0cmluZyk7XG5leHBvcnRzLnRpdGxlID0gJ0xlZ2FjeSBOYXRpdmUgTW9kdWxlJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnQmFzaWMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdVc2FnZSBvZiBsZWdhY3kgTmF0aXZlIE1vZHVsZSc7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdTYW1wbGVMZWdhY3lNb2R1bGUnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8YW55PiB7XG4gICAgICByZXR1cm4gPFNhbXBsZUxlZ2FjeU1vZHVsZUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1Jvb3RUYWd9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUm9vdFRhZyc7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9UdXJib01vZHVsZUV4YW1wbGVDb21tb24nO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgRmxhdExpc3QsXG4gIE5hdGl2ZU1vZHVsZXMsXG4gIFBsYXRmb3JtLFxuICBSb290VGFnQ29udGV4dCxcbiAgVGV4dCxcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgVmlldyxcbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBTdGF0ZSA9IHt8XG4gIHRlc3RSZXN1bHRzOiB7XG4gICAgW3N0cmluZ106IHtcbiAgICAgIHR5cGU6IHN0cmluZyxcbiAgICAgIHZhbHVlOiBtaXhlZCxcbiAgICAgIC4uLlxuICAgIH0sXG4gICAgLi4uXG4gIH0sXG58fTtcblxubGV0IHRyaWVkTG9hZGluZ01vZHVsZU9uY2UgPSBmYWxzZTtcbmxldCBtb2R1bGUgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKSB7XG4gIGlmICh0cmllZExvYWRpbmdNb2R1bGVPbmNlKSB7XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfVxuICB0cmllZExvYWRpbmdNb2R1bGVPbmNlID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBtb2R1bGUgPSBOYXRpdmVNb2R1bGVzLlNhbXBsZUxlZ2FjeU1vZHVsZTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBTYW1wbGVMZWdhY3lNb2R1bGUuIE1lc3NhZ2U6ICcgKyBleC5tZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqOiBtaXhlZCk6IHN0cmluZyB7XG4gIGZ1bmN0aW9uIHJlcGxhY2VyKF86IHN0cmluZywgdmFsdWU6IG1peGVkKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSA/PyB7fSlcbiAgICAgICAgLnNvcnQoKVxuICAgICAgICAucmVkdWNlKChzb3J0ZWQ6IHtba2V5OiBzdHJpbmddOiBtaXhlZH0sIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgc29ydGVkW2tleV0gPSAodmFsdWUgPz8ge30pW2tleV07XG4gICAgICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gKEpTT04uc3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIpIHx8ICcnKS5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKTtcbn1cblxuY2xhc3MgU2FtcGxlTGVnYWN5TW9kdWxlRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fHx9LCBTdGF0ZT4ge1xuICBzdGF0aWMgY29udGV4dFR5cGU6IFJlYWN0JENvbnRleHQ8Um9vdFRhZz4gPSBSb290VGFnQ29udGV4dDtcblxuICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgdGVzdFJlc3VsdHM6IHt9LFxuICB9O1xuXG4gIC8vIEFkZCBjYWxscyB0byBtZXRob2RzIGluIFR1cmJvTW9kdWxlIGhlcmVcbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICBfdGVzdHMgPVxuICAgIFBsYXRmb3JtLk9TID09PSAnaW9zJ1xuICAgICAgPyB7XG4gICAgICAgICAgdm9pZEZ1bmM6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy52b2lkRnVuYygpLFxuICAgICAgICAgIGdldEJvb2w6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRCb29sKHRydWUpLFxuICAgICAgICAgIGdldEVudW06ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRFbnVtKDEuMCksXG4gICAgICAgICAgZ2V0TnVtYmVyOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0TnVtYmVyKDk5Ljk1KSxcbiAgICAgICAgICBnZXRGbG9hdDogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldE51bWJlcig5OS45NSksXG4gICAgICAgICAgZ2V0SW50OiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0SW50KDk5KSxcbiAgICAgICAgICBnZXRMb25nTG9uZzogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldExvbmdMb25nKDk5KSxcbiAgICAgICAgICBnZXRVbnNpZ25lZExvbmdMb25nOiAoKSA9PlxuICAgICAgICAgICAgZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldFVuc2lnbmVkTG9uZ0xvbmcoOTkpLFxuICAgICAgICAgIGdldE5TSW50ZWdlcjogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldE5TSW50ZWdlcig5OSksXG4gICAgICAgICAgZ2V0TlNVSW50ZWdlcjogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldE5TVUludGVnZXIoOTkpLFxuICAgICAgICAgIGdldEFycmF5OiAoKSA9PlxuICAgICAgICAgICAgZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldEFycmF5KFtcbiAgICAgICAgICAgICAge2E6IDEsIGI6ICdmb28nfSxcbiAgICAgICAgICAgICAge2E6IDIsIGI6ICdiYXInfSxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIGdldE9iamVjdDogKCkgPT5cbiAgICAgICAgICAgIGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRPYmplY3Qoe2E6IDEsIGI6ICdmb28nLCBjOiBudWxsfSksXG4gICAgICAgICAgZ2V0U3RyaW5nOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0U3RyaW5nKCdIZWxsbycpLFxuICAgICAgICAgIGdldE51bGxTdHJpbmc6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRTdHJpbmcobnVsbCksXG4gICAgICAgICAgZ2V0TlNOdW1iZXI6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXROU051bWJlcigyMC4wKSxcbiAgICAgICAgICBnZXRVbnNhZmVPYmplY3Q6ICgpID0+XG4gICAgICAgICAgICBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0T2JqZWN0KHthOiAxLCBiOiAnZm9vJywgYzogbnVsbH0pLFxuICAgICAgICAgIGdldFJvb3RUYWc6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRSb290VGFnKDExKSxcbiAgICAgICAgICBnZXRWYWx1ZTogKCkgPT5cbiAgICAgICAgICAgIGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRWYWx1ZSg1LCAndGVzdCcsIHthOiAxLCBiOiAnZm9vJ30pLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PlxuICAgICAgICAgICAgZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldFZhbHVlV2l0aENhbGxiYWNrKGNhbGxiYWNrVmFsdWUgPT5cbiAgICAgICAgICAgICAgdGhpcy5fc2V0UmVzdWx0KCdjYWxsYmFjaycsIGNhbGxiYWNrVmFsdWUpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBwcm9taXNlOiAoKSA9PlxuICAgICAgICAgICAgZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKClcbiAgICAgICAgICAgICAgPy5nZXRWYWx1ZVdpdGhQcm9taXNlKGZhbHNlKVxuICAgICAgICAgICAgICAudGhlbih2YWx1ZVByb21pc2UgPT4gdGhpcy5fc2V0UmVzdWx0KCdwcm9taXNlJywgdmFsdWVQcm9taXNlKSksXG4gICAgICAgICAgcmVqZWN0UHJvbWlzZTogKCkgPT5cbiAgICAgICAgICAgIGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpXG4gICAgICAgICAgICAgID8uZ2V0VmFsdWVXaXRoUHJvbWlzZSh0cnVlKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7fSlcbiAgICAgICAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2V0UmVzdWx0KCdyZWplY3RQcm9taXNlJywgZS5tZXNzYWdlKSksXG4gICAgICAgICAgZ2V0Q29uc3RhbnRzOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0Q29uc3RhbnRzKCksXG4gICAgICAgICAgZ2V0Q29uc3QxOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uY29uc3QxLFxuICAgICAgICAgIGdldENvbnN0MjogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmNvbnN0MixcbiAgICAgICAgICBnZXRDb25zdDM6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5jb25zdDMsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIHZvaWRGdW5jOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8udm9pZEZ1bmMoKSxcbiAgICAgICAgICBnZXRCb29sOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0Qm9vbCh0cnVlKSxcbiAgICAgICAgICBnZXRFbnVtOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0RW51bSgxLjApLFxuICAgICAgICAgIGdldERvdWJsZTogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldERvdWJsZSg5OS45NSksXG4gICAgICAgICAgZ2V0SW50OiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0SW50KDk5KSxcbiAgICAgICAgICBnZXRGbG9hdDogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldEZsb2F0KDk5Ljk1KSxcbiAgICAgICAgICBnZXRPYmplY3REb3VibGU6ICgpID0+XG4gICAgICAgICAgICBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0T2JqZWN0RG91YmxlKDk5Ljk1KSxcbiAgICAgICAgICBnZXRPYmplY3RJbnRlZ2VyOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0T2JqZWN0SW50ZWdlcig5OSksXG4gICAgICAgICAgZ2V0T2JqZWN0RmxvYXQ6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRPYmplY3RGbG9hdCg5OS45NSksXG4gICAgICAgICAgZ2V0U3RyaW5nOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0U3RyaW5nKCdIZWxsbycpLFxuICAgICAgICAgIGdldFJvb3RUYWc6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRSb290VGFnKDExKSxcbiAgICAgICAgICBnZXRPYmplY3Q6ICgpID0+XG4gICAgICAgICAgICBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0T2JqZWN0KHthOiAxLCBiOiAnZm9vJywgYzogbnVsbH0pLFxuICAgICAgICAgIGdldFVuc2FmZU9iamVjdDogKCkgPT5cbiAgICAgICAgICAgIGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRPYmplY3Qoe2E6IDEsIGI6ICdmb28nLCBjOiBudWxsfSksXG4gICAgICAgICAgZ2V0VmFsdWU6ICgpID0+XG4gICAgICAgICAgICBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0VmFsdWUoNSwgJ3Rlc3QnLCB7YTogMSwgYjogJ2Zvbyd9KSxcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT5cbiAgICAgICAgICAgIGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5nZXRWYWx1ZVdpdGhDYWxsYmFjayhjYWxsYmFja1ZhbHVlID0+XG4gICAgICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgnY2FsbGJhY2snLCBjYWxsYmFja1ZhbHVlKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgZ2V0QXJyYXk6ICgpID0+XG4gICAgICAgICAgICBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uZ2V0QXJyYXkoW1xuICAgICAgICAgICAgICB7YTogMSwgYjogJ2Zvbyd9LFxuICAgICAgICAgICAgICB7YTogMiwgYjogJ2Jhcid9LFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgcHJvbWlzZTogKCkgPT5cbiAgICAgICAgICAgIGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpXG4gICAgICAgICAgICAgID8uZ2V0VmFsdWVXaXRoUHJvbWlzZShmYWxzZSlcbiAgICAgICAgICAgICAgLnRoZW4odmFsdWVQcm9taXNlID0+IHRoaXMuX3NldFJlc3VsdCgncHJvbWlzZScsIHZhbHVlUHJvbWlzZSkpLFxuICAgICAgICAgIHJlamVjdFByb21pc2U6ICgpID0+XG4gICAgICAgICAgICBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKVxuICAgICAgICAgICAgICA/LmdldFZhbHVlV2l0aFByb21pc2UodHJ1ZSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge30pXG4gICAgICAgICAgICAgIC5jYXRjaChlID0+IHRoaXMuX3NldFJlc3VsdCgncmVqZWN0UHJvbWlzZScsIGUubWVzc2FnZSkpLFxuICAgICAgICAgIGdldENvbnN0YW50czogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmdldENvbnN0YW50cygpLFxuICAgICAgICAgIGdldENvbnN0MTogKCkgPT4gZ2V0U2FtcGxlTGVnYWN5TW9kdWxlKCk/LmNvbnN0MSxcbiAgICAgICAgICBnZXRDb25zdDI6ICgpID0+IGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpPy5jb25zdDIsXG4gICAgICAgICAgZ2V0Q29uc3QzOiAoKSA9PiBnZXRTYW1wbGVMZWdhY3lNb2R1bGUoKT8uY29uc3QzLFxuICAgICAgICB9O1xuXG4gIF9zZXRSZXN1bHQobmFtZTogc3RyaW5nLCByZXN1bHQ6IG1peGVkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSgoe3Rlc3RSZXN1bHRzfSkgPT4gKHtcbiAgICAgIC8qICRGbG93Rml4TWVbY2Fubm90LXNwcmVhZC1pbmRleGVyXSAoPj0wLjEyMi4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKVxuICAgICAgICogVGhpcyBjb21tZW50IHN1cHByZXNzZXMgYW4gZXJyb3IgZm91bmQgd2hlbiBGbG93IHYwLjEyMi4wIHdhc1xuICAgICAgICogZGVwbG95ZWQuIFRvIHNlZSB0aGUgZXJyb3IsIGRlbGV0ZSB0aGlzIGNvbW1lbnQgYW5kIHJ1biBGbG93LiAqL1xuICAgICAgdGVzdFJlc3VsdHM6IHtcbiAgICAgICAgLi4udGVzdFJlc3VsdHMsXG4gICAgICAgIC8qICRGbG93Rml4TWVbaW52YWxpZC1jb21wdXRlZC1wcm9wXSAoPj0wLjExMS4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKVxuICAgICAgICAgKiBUaGlzIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuMTExIHdhc1xuICAgICAgICAgKiBkZXBsb3llZC4gVG8gc2VlIHRoZSBlcnJvciwgZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuICovXG4gICAgICAgIFtuYW1lXToge3ZhbHVlOiByZXN1bHQsIHR5cGU6IHR5cGVvZiByZXN1bHR9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBfcmVuZGVyUmVzdWx0KG5hbWU6IHN0cmluZyk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhdGUudGVzdFJlc3VsdHNbbmFtZV0gfHwge307XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucmVzdWx0fT5cbiAgICAgICAgPFRleHQgdGVzdElEPXtuYW1lICsgJy1yZXN1bHQnfSBzdHlsZT17W3N0eWxlcy52YWx1ZV19PlxuICAgICAgICAgIHtzdHJpbmdpZnkocmVzdWx0LnZhbHVlKX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy50eXBlXX0+e3Jlc3VsdC50eXBlfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG5cbiAgX2dldENvbnRlbnQoKTogUmVhY3QuTm9kZSB7XG4gICAgaWYgKGdldFNhbXBsZUxlZ2FjeU1vZHVsZSgpID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLml0ZW19PlxuICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5jb2x1bW4sIHN0eWxlcy5idXR0b25dfVxuICAgICAgICAgICAgdGVzdElEPVwicnVuLWFsbC10ZXN0c1wiXG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl90ZXN0cykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0UmVzdWx0KGl0ZW0sIHRoaXMuX3Rlc3RzW2l0ZW1dKCkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoaXRlbSwgJ0ZhaWw6ICcgKyBleC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b25UZXh0TGFyZ2V9PlJ1biBhbGwgdGVzdHM8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLnNldFN0YXRlKHt0ZXN0UmVzdWx0czoge319KX1cbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmNvbHVtbiwgc3R5bGVzLmJ1dHRvbl19PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b25UZXh0TGFyZ2V9PkNsZWFyIHJlc3VsdHM8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgIGRhdGE9e09iamVjdC5rZXlzKHRoaXMuX3Rlc3RzKX1cbiAgICAgICAgICBrZXlFeHRyYWN0b3I9e2l0ZW0gPT4gaXRlbX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsoe2l0ZW19KSA9PiAoXG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLml0ZW19PlxuICAgICAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmNvbHVtbiwgc3R5bGVzLmJ1dHRvbl19XG4gICAgICAgICAgICAgICAgb25QcmVzcz17ZSA9PiB0aGlzLl9zZXRSZXN1bHQoaXRlbSwgdGhpcy5fdGVzdHNbaXRlbV0oKSl9PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnV0dG9uVGV4dH0+e2l0ZW19PC9UZXh0PlxuICAgICAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmNvbHVtbl19Pnt0aGlzLl9yZW5kZXJSZXN1bHQoaXRlbSl9PC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+e3RoaXMuX2dldENvbnRlbnQoKX08L1ZpZXc+O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhbXBsZUxlZ2FjeU1vZHVsZUV4YW1wbGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGVFeGFtcGxlID0gcmVxdWlyZSgnLi9OYXRpdmVDeHhNb2R1bGVFeGFtcGxlRXhhbXBsZScpO1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG5leHBvcnRzLmRpc3BsYXlOYW1lID0gKHVuZGVmaW5lZDogP3N0cmluZyk7XG5leHBvcnRzLnRpdGxlID0gJ0N4eCBUdXJib01vZHVsZSc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAnVXNhZ2Ugb2YgQ3h4IFR1cmJvTW9kdWxlJztcbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ1R1cmJvQ3h4TW9kdWxlRXhhbXBsZScsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICAgIHJldHVybiA8TmF0aXZlQ3h4TW9kdWxlRXhhbXBsZUV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1Jvb3RUYWd9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVhY3ROYXRpdmUvUm9vdFRhZyc7XG5cbmltcG9ydCBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlLCB7XG4gIEVudW1JbnQsXG4gIEVudW1Ob25lLFxufSBmcm9tICcuLi8uLi8uLi9OYXRpdmVDeHhNb2R1bGVFeGFtcGxlL05hdGl2ZUN4eE1vZHVsZUV4YW1wbGUnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL1R1cmJvTW9kdWxlRXhhbXBsZUNvbW1vbic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBEZXZpY2VFdmVudEVtaXR0ZXIsXG4gIEZsYXRMaXN0LFxuICBSb290VGFnQ29udGV4dCxcbiAgVGV4dCxcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgVmlldyxcbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBTdGF0ZSA9IHt8XG4gIHRlc3RSZXN1bHRzOiB7XG4gICAgW3N0cmluZ106IHtcbiAgICAgIHR5cGU6IHN0cmluZyxcbiAgICAgIHZhbHVlOiBtaXhlZCxcbiAgICAgIC4uLlxuICAgIH0sXG4gICAgLi4uXG4gIH0sXG58fTtcblxudHlwZSBFeGFtcGxlcyA9XG4gIHwgJ2NhbGxiYWNrJ1xuICB8ICdnZXRBcnJheSdcbiAgfCAnZ2V0Qm9vbCdcbiAgfCAnZ2V0Q29uc3RhbnRzJ1xuICB8ICdnZXRDdXN0b21FbnVtJ1xuICB8ICdnZXRDdXN0b21Ib3N0T2JqZWN0J1xuICB8ICdnZXRCaW5hcnlUcmVlTm9kZSdcbiAgfCAnZ2V0R3JhcGhOb2RlJ1xuICB8ICdnZXROdW1FbnVtJ1xuICB8ICdnZXRTdHJFbnVtJ1xuICB8ICdnZXRNYXAnXG4gIHwgJ2dldE51bWJlcidcbiAgfCAnZ2V0T2JqZWN0J1xuICB8ICdnZXRTZXQnXG4gIHwgJ2dldFN0cmluZydcbiAgfCAnZ2V0VW5pb24nXG4gIHwgJ2dldFZhbHVlJ1xuICB8ICdwcm9taXNlJ1xuICB8ICdyZWplY3RQcm9taXNlJ1xuICB8ICd2b2lkRnVuYydcbiAgfCAnc2V0TWVudUl0ZW0nXG4gIHwgJ29wdGlvbmFsQXJncydcbiAgfCAnZW1pdERldmljZUV2ZW50JztcblxudHlwZSBFcnJvckV4YW1wbGVzID1cbiAgfCAndm9pZEZ1bmNUaHJvd3MnXG4gIHwgJ2dldE9iamVjdFRocm93cydcbiAgfCAncHJvbWlzZVRocm93cydcbiAgfCAndm9pZEZ1bmNBc3NlcnQnXG4gIHwgJ2dldE9iamVjdEFzc2VydCdcbiAgfCAncHJvbWlzZUFzc2VydCc7XG5cbmNsYXNzIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGVFeGFtcGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHt8fH0sIFN0YXRlPiB7XG4gIHN0YXRpYyBjb250ZXh0VHlwZTogUmVhY3QkQ29udGV4dDxSb290VGFnPiA9IFJvb3RUYWdDb250ZXh0O1xuXG4gIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICB0ZXN0UmVzdWx0czoge30sXG4gIH07XG5cbiAgLy8gQWRkIGNhbGxzIHRvIG1ldGhvZHMgaW4gVHVyYm9Nb2R1bGUgaGVyZVxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF90ZXN0cyA9IHtcbiAgICBjYWxsYmFjazogKCkgPT5cbiAgICAgIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldFZhbHVlV2l0aENhbGxiYWNrKGNhbGxiYWNrVmFsdWUgPT5cbiAgICAgICAgdGhpcy5fc2V0UmVzdWx0KCdjYWxsYmFjaycsIGNhbGxiYWNrVmFsdWUpLFxuICAgICAgKSxcbiAgICBjYWxsYmFja1dpdGhTdWJzY3JpcHRpb246ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9XG4gICAgICAgIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LnNldFZhbHVlQ2FsbGJhY2tXaXRoU3Vic2NyaXB0aW9uKFxuICAgICAgICAgIGNhbGxiYWNrVmFsdWUgPT5cbiAgICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgnY2FsbGJhY2tXaXRoU3Vic2NyaXB0aW9uJywgY2FsbGJhY2tWYWx1ZSksXG4gICAgICAgICk7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0QXJyYXk6ICgpID0+XG4gICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXRBcnJheShbXG4gICAgICAgIHthOiAxLCBiOiAnZm9vJ30sXG4gICAgICAgIHthOiAyLCBiOiAnYmFyJ30sXG4gICAgICAgIG51bGwsXG4gICAgICBdKSxcbiAgICBnZXRCb29sOiAoKSA9PiBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXRCb29sKHRydWUpLFxuICAgIGdldENvbnN0YW50czogKCkgPT4gTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8uZ2V0Q29uc3RhbnRzKCksXG4gICAgZ2V0Q3VzdG9tRW51bTogKCkgPT4gTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8uZ2V0Q3VzdG9tRW51bShFbnVtSW50LklCKSxcbiAgICBnZXRDdXN0b21Ib3N0T2JqZWN0OiAoKSA9PlxuICAgICAgTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8uY29uc3VtZUN1c3RvbUhvc3RPYmplY3QoXG4gICAgICAgIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldEN1c3RvbUhvc3RPYmplY3QoKSxcbiAgICAgICksXG4gICAgZ2V0QmluYXJ5VHJlZU5vZGU6ICgpID0+XG4gICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXRCaW5hcnlUcmVlTm9kZSh7XG4gICAgICAgIGxlZnQ6IHt2YWx1ZTogMX0sXG4gICAgICAgIHZhbHVlOiAwLFxuICAgICAgICByaWdodDoge3ZhbHVlOiAyfSxcbiAgICAgIH0pLFxuICAgIGdldEdyYXBoTm9kZTogKCkgPT5cbiAgICAgIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldEdyYXBoTm9kZSh7XG4gICAgICAgIGxhYmVsOiAncm9vdCcsXG4gICAgICAgIG5laWdoYm9yczogW3tsYWJlbDogJ2xlZnQnfSwge2xhYmVsOiAncmlnaHQnfV0sXG4gICAgICB9KSxcbiAgICBnZXROdW1FbnVtOiAoKSA9PiBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXROdW1FbnVtKEVudW1JbnQuSUIpLFxuICAgIGdldFN0ckVudW06ICgpID0+IE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldFN0ckVudW0oRW51bU5vbmUuTkIpLFxuICAgIGdldE51bWJlcjogKCkgPT4gTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8uZ2V0TnVtYmVyKDk5Ljk1KSxcbiAgICBnZXRPYmplY3Q6ICgpID0+XG4gICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXRPYmplY3Qoe2E6IDEsIGI6ICdmb28nLCBjOiBudWxsfSksXG4gICAgZ2V0U2V0OiAoKSA9PiBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXRTZXQoWzEsIDEuMSwgMS4xLCAxLjEsIDJdKSxcbiAgICBnZXRTdHJpbmc6ICgpID0+IE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldFN0cmluZygnSGVsbG8nKSxcbiAgICBnZXRVbmlvbjogKCkgPT4gTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8uZ2V0VW5pb24oMS40NCwgJ1R3bycsIHtsb3c6ICcxMid9KSxcbiAgICBnZXRWYWx1ZTogKCkgPT5cbiAgICAgIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldFZhbHVlKDUsICd0ZXN0Jywge2E6IDEsIGI6ICdmb28nfSksXG4gICAgcHJvbWlzZTogKCkgPT5cbiAgICAgIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldFZhbHVlV2l0aFByb21pc2UoZmFsc2UpLnRoZW4odmFsdWVQcm9taXNlID0+XG4gICAgICAgIHRoaXMuX3NldFJlc3VsdCgncHJvbWlzZScsIHZhbHVlUHJvbWlzZSksXG4gICAgICApLFxuICAgIHJlamVjdFByb21pc2U6ICgpID0+XG4gICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXRWYWx1ZVdpdGhQcm9taXNlKHRydWUpXG4gICAgICAgIC50aGVuKCgpID0+IHt9KVxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zZXRSZXN1bHQoJ3JlamVjdFByb21pc2UnLCBlLm1lc3NhZ2UpKSxcbiAgICB2b2lkRnVuYzogKCkgPT4gTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8udm9pZEZ1bmMoKSxcbiAgICBzZXRNZW51SXRlbTogKCkgPT4ge1xuICAgICAgbGV0IGN1clZhbHVlID0gJyc7XG4gICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5zZXRNZW51KHtcbiAgICAgICAgbGFiZWw6ICdGaWxlJyxcbiAgICAgICAgb25QcmVzczogKHZhbHVlOiBzdHJpbmcsIGZsYWc6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBjdXJWYWx1ZSA9IGAke3ZhbHVlfTogJHtmbGFnLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoJ3NldE1lbnVJdGVtJywgY3VyVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnT3BlbicsXG4gICAgICAgICAgICBvblByZXNzOiAodmFsdWU6IHN0cmluZywgZmxhZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoXG4gICAgICAgICAgICAgICAgJ3NldE1lbnVJdGVtJyxcbiAgICAgICAgICAgICAgICBgJHtjdXJWYWx1ZX0gLSAke3ZhbHVlfTogJHtmbGFnLnRvU3RyaW5nKCl9YCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2hvcnRjdXQ6ICdjdHJsK3NoaWZ0K2YnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvcHRpb25hbEFyZ3M6ICgpID0+IE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmdldFdpdGhXaXRoT3B0aW9uYWxBcmdzKCksXG4gICAgZW1pdERldmljZUV2ZW50OiAoKSA9PiB7XG4gICAgICBjb25zdCBDVVNUT01fRVZFTlRfVFlQRSA9ICdteUN1c3RvbURldmljZUV2ZW50JztcbiAgICAgIERldmljZUV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoQ1VTVE9NX0VWRU5UX1RZUEUpO1xuICAgICAgRGV2aWNlRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKENVU1RPTV9FVkVOVF9UWVBFLCAoLi4uYXJncykgPT4ge1xuICAgICAgICB0aGlzLl9zZXRSZXN1bHQoXG4gICAgICAgICAgJ2VtaXREZXZpY2VFdmVudCcsXG4gICAgICAgICAgYCR7Q1VTVE9NX0VWRU5UX1RZUEV9KCR7YXJncy5tYXAocyA9PiBgJHtzfWApLmpvaW4oJywgJyl9KWAsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGU/LmVtaXRDdXN0b21EZXZpY2VFdmVudChDVVNUT01fRVZFTlRfVFlQRSk7XG4gICAgfSxcbiAgfTtcblxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIF9lcnJvclRlc3RzID0ge1xuICAgIHZvaWRGdW5jVGhyb3dzOiAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy52b2lkRnVuY1Rocm93cygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0T2JqZWN0VGhyb3dzOiAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5nZXRPYmplY3RUaHJvd3Moe2E6IDEsIGI6ICdmb28nLCBjOiBudWxsfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9taXNlVGhyb3dzOiAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW3VudXNlZC1wcm9taXNlXVxuICAgICAgICBOYXRpdmVDeHhNb2R1bGVFeGFtcGxlPy5wcm9taXNlVGhyb3dzKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSxcbiAgICB2b2lkRnVuY0Fzc2VydDogKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8udm9pZEZ1bmNBc3NlcnQoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldE9iamVjdEFzc2VydDogKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8uZ2V0T2JqZWN0QXNzZXJ0KHthOiAxLCBiOiAnZm9vJywgYzogbnVsbH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvbWlzZUFzc2VydDogKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnVzZWQtcHJvbWlzZV1cbiAgICAgICAgTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZT8ucHJvbWlzZUFzc2VydCgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgX3NldFJlc3VsdChcbiAgICBuYW1lOiBzdHJpbmcgfCBFeGFtcGxlcyxcbiAgICByZXN1bHQ6XG4gICAgICB8ICRGbG93Rml4TWVcbiAgICAgIHwgdm9pZFxuICAgICAgfCBBcnJheTwkRmxvd0ZpeE1lPlxuICAgICAgfCBib29sZWFuXG4gICAgICB8IHtjb25zdDE6IGJvb2xlYW4sIGNvbnN0MjogbnVtYmVyLCBjb25zdDM6IHN0cmluZ31cbiAgICAgIHwgbnVtYmVyXG4gICAgICB8IHtba2V5OiBzdHJpbmddOiA/bnVtYmVyfVxuICAgICAgfCBQcm9taXNlPG1peGVkPlxuICAgICAgfCBudW1iZXJcbiAgICAgIHwgc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLnNldFN0YXRlKCh7dGVzdFJlc3VsdHN9KSA9PiAoe1xuICAgICAgdGVzdFJlc3VsdHM6IHtcbiAgICAgICAgLi4udGVzdFJlc3VsdHMsXG4gICAgICAgIC8qICRGbG93Rml4TWVbaW52YWxpZC1jb21wdXRlZC1wcm9wXSAoPj0wLjExMS4wIHNpdGU9cmVhY3RfbmF0aXZlX2ZiKVxuICAgICAgICAgKiBUaGlzIGNvbW1lbnQgc3VwcHJlc3NlcyBhbiBlcnJvciBmb3VuZCB3aGVuIEZsb3cgdjAuMTExIHdhc1xuICAgICAgICAgKiBkZXBsb3llZC4gVG8gc2VlIHRoZSBlcnJvciwgZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuICovXG4gICAgICAgIFtuYW1lXToge3ZhbHVlOiByZXN1bHQsIHR5cGU6IHR5cGVvZiByZXN1bHR9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBfcmVuZGVyUmVzdWx0KG5hbWU6IEV4YW1wbGVzIHwgRXJyb3JFeGFtcGxlcyk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhdGUudGVzdFJlc3VsdHNbbmFtZV0gfHwge307XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucmVzdWx0fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e1tzdHlsZXMudmFsdWVdfT57SlNPTi5zdHJpbmdpZnkocmVzdWx0LnZhbHVlKX08L1RleHQ+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLnR5cGVdfT57cmVzdWx0LnR5cGV9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICBpZiAoZ2xvYmFsLl9fdHVyYm9Nb2R1bGVQcm94eSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgbG9hZCB0aGlzIGV4YW1wbGUgYmVjYXVzZSBUdXJib01vZHVsZSBpcyBub3QgY29uZmlndXJlZC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5pdGVtfT5cbiAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY29sdW1uLCBzdHlsZXMuYnV0dG9uXX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX3Rlc3RzKS5mb3JFYWNoKGl0ZW0gPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoaXRlbSwgdGhpcy5fdGVzdHNbaXRlbV0oKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvblRleHRMYXJnZX0+UnVuIGZ1bmN0aW9uIGNhbGwgdGVzdHM8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiB0aGlzLnNldFN0YXRlKHt0ZXN0UmVzdWx0czoge319KX1cbiAgICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmNvbHVtbiwgc3R5bGVzLmJ1dHRvbl19PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b25UZXh0TGFyZ2V9PkNsZWFyIHJlc3VsdHM8L1RleHQ+XG4gICAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGUtYXJnXVxuICAgICAgICAgIGRhdGE9e09iamVjdC5rZXlzKHRoaXMuX3Rlc3RzKX1cbiAgICAgICAgICBrZXlFeHRyYWN0b3I9e2l0ZW0gPT4gaXRlbX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsoe2l0ZW19OiB7aXRlbTogRXhhbXBsZXMsIC4uLn0pID0+IChcbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaXRlbX0+XG4gICAgICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY29sdW1uLCBzdHlsZXMuYnV0dG9uXX1cbiAgICAgICAgICAgICAgICBvblByZXNzPXtlID0+IHRoaXMuX3NldFJlc3VsdChpdGVtLCB0aGlzLl90ZXN0c1tpdGVtXSgpKX0+XG4gICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b25UZXh0fT57aXRlbX08L1RleHQ+XG4gICAgICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuY29sdW1uXX0+e3RoaXMuX3JlbmRlclJlc3VsdChpdGVtKX08L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5pdGVtfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmJ1dHRvblRleHRMYXJnZX0+UmVwb3J0IGVycm9ycyB0ZXN0czwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8RmxhdExpc3RcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlLWFyZ11cbiAgICAgICAgICBkYXRhPXtPYmplY3Qua2V5cyh0aGlzLl9lcnJvclRlc3RzKX1cbiAgICAgICAgICBrZXlFeHRyYWN0b3I9e2l0ZW0gPT4gaXRlbX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsoe2l0ZW19OiB7aXRlbTogRXJyb3JFeGFtcGxlcywgLi4ufSkgPT4gKFxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5pdGVtfT5cbiAgICAgICAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5jb2x1bW4sIHN0eWxlcy5idXR0b25dfVxuICAgICAgICAgICAgICAgIG9uUHJlc3M9e2UgPT4gdGhpcy5fc2V0UmVzdWx0KGl0ZW0sIHRoaXMuX2Vycm9yVGVzdHNbaXRlbV0oKSl9PlxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuYnV0dG9uVGV4dH0+e2l0ZW19PC9UZXh0PlxuICAgICAgICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLmNvbHVtbl19Pnt0aGlzLl9yZW5kZXJSZXN1bHQoaXRlbSl9PC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE5hdGl2ZUN4eE1vZHVsZUV4YW1wbGVFeGFtcGxlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICogQGZvcm1hdFxuICovXG5cbmltcG9ydCB0eXBlIHtUdXJib01vZHVsZX0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UdXJib01vZHVsZS9SQ1RFeHBvcnQnO1xuXG5pbXBvcnQge1R1cmJvTW9kdWxlUmVnaXN0cnl9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCBlbnVtIEVudW1JbnQge1xuICBJQSA9IDIzLFxuICBJQiA9IDQyLFxufVxuXG5leHBvcnQgZW51bSBFbnVtRmxvYXQge1xuICBGQSA9IDEuMjMsXG4gIEZCID0gNC41Nixcbn1cblxuZXhwb3J0IGVudW0gRW51bU5vbmUge1xuICBOQSxcbiAgTkIsXG59XG5cbmV4cG9ydCBlbnVtIEVudW1TdHIge1xuICBTQSA9ICdzLS0tYScsXG4gIFNCID0gJ3MtLS1iJyxcbn1cblxuZXhwb3J0IHR5cGUgVW5pb25GbG9hdCA9IDEuNDQgfCAyLjg4IHwgNS43NjtcbmV4cG9ydCB0eXBlIFVuaW9uU3RyaW5nID0gJ09uZScgfCAnVHdvJyB8ICdUaHJlZSc7XG5leHBvcnQgdHlwZSBVbmlvbk9iamVjdCA9IHt2YWx1ZTogbnVtYmVyfSB8IHtsb3c6IHN0cmluZ307XG5cbmV4cG9ydCB0eXBlIENvbnN0YW50c1N0cnVjdCA9IHtcbiAgY29uc3QxOiBib29sZWFuLFxuICBjb25zdDI6IG51bWJlcixcbiAgY29uc3QzOiBzdHJpbmcsXG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RTdHJ1Y3QgPSB7XG4gIGE6IG51bWJlcixcbiAgYjogc3RyaW5nLFxuICBjPzogP3N0cmluZyxcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlU3RydWN0ID0ge1xuICB4OiBudW1iZXIsXG4gIHk6IHN0cmluZyxcbiAgejogT2JqZWN0U3RydWN0LFxufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tSG9zdE9iamVjdCA9IHt9O1xuXG5leHBvcnQgdHlwZSBCaW5hcnlUcmVlTm9kZSA9IHtcbiAgbGVmdD86IEJpbmFyeVRyZWVOb2RlLFxuICB2YWx1ZTogbnVtYmVyLFxuICByaWdodD86IEJpbmFyeVRyZWVOb2RlLFxufTtcblxuZXhwb3J0IHR5cGUgR3JhcGhOb2RlID0ge1xuICBsYWJlbDogc3RyaW5nLFxuICBuZWlnaGJvcnM/OiBBcnJheTxHcmFwaE5vZGU+LFxufTtcblxuZXhwb3J0IHR5cGUgTWVudUl0ZW0gPSB7XG4gIGxhYmVsOiBzdHJpbmcsXG4gIG9uUHJlc3M6ICh2YWx1ZTogc3RyaW5nLCBmbGFnOiBib29sZWFuKSA9PiB2b2lkLFxuICBzaG9ydGN1dD86ID9zdHJpbmcsXG4gIGl0ZW1zPzogQXJyYXk8TWVudUl0ZW0+LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjIGV4dGVuZHMgVHVyYm9Nb2R1bGUge1xuICArZ2V0QXJyYXk6IChhcmc6IEFycmF5PE9iamVjdFN0cnVjdCB8IG51bGw+KSA9PiBBcnJheTxPYmplY3RTdHJ1Y3QgfCBudWxsPjtcbiAgK2dldEJvb2w6IChhcmc6IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gICtnZXRDb25zdGFudHM6ICgpID0+IENvbnN0YW50c1N0cnVjdDtcbiAgK2dldEN1c3RvbUVudW06IChhcmc6IEVudW1JbnQpID0+IEVudW1JbnQ7XG4gICtnZXRDdXN0b21Ib3N0T2JqZWN0OiAoKSA9PiBDdXN0b21Ib3N0T2JqZWN0O1xuICArY29uc3VtZUN1c3RvbUhvc3RPYmplY3Q6IChjdXN0b21Ib3N0T2JqZWN0OiBDdXN0b21Ib3N0T2JqZWN0KSA9PiBzdHJpbmc7XG4gICtnZXRCaW5hcnlUcmVlTm9kZTogKGFyZzogQmluYXJ5VHJlZU5vZGUpID0+IEJpbmFyeVRyZWVOb2RlO1xuICArZ2V0R3JhcGhOb2RlOiAoYXJnOiBHcmFwaE5vZGUpID0+IEdyYXBoTm9kZTtcbiAgK2dldE51bUVudW06IChhcmc6IEVudW1JbnQpID0+IEVudW1GbG9hdDtcbiAgK2dldFN0ckVudW06IChhcmc6IEVudW1Ob25lKSA9PiBFbnVtU3RyO1xuICArZ2V0TWFwOiAoYXJnOiB7W2tleTogc3RyaW5nXTogP251bWJlcn0pID0+IHtba2V5OiBzdHJpbmddOiA/bnVtYmVyfTtcbiAgK2dldE51bWJlcjogKGFyZzogbnVtYmVyKSA9PiBudW1iZXI7XG4gICtnZXRPYmplY3Q6IChhcmc6IE9iamVjdFN0cnVjdCkgPT4gT2JqZWN0U3RydWN0O1xuICArZ2V0U2V0OiAoYXJnOiBBcnJheTxudW1iZXI+KSA9PiBBcnJheTxudW1iZXI+O1xuICArZ2V0U3RyaW5nOiAoYXJnOiBzdHJpbmcpID0+IHN0cmluZztcbiAgK2dldFVuaW9uOiAoeDogVW5pb25GbG9hdCwgeTogVW5pb25TdHJpbmcsIHo6IFVuaW9uT2JqZWN0KSA9PiBzdHJpbmc7XG4gICtnZXRWYWx1ZTogKHg6IG51bWJlciwgeTogc3RyaW5nLCB6OiBPYmplY3RTdHJ1Y3QpID0+IFZhbHVlU3RydWN0O1xuICArZ2V0VmFsdWVXaXRoQ2FsbGJhY2s6IChjYWxsYmFjazogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpID0+IHZvaWQ7XG4gICtzZXRWYWx1ZUNhbGxiYWNrV2l0aFN1YnNjcmlwdGlvbjogKFxuICAgIGNhbGxiYWNrOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCxcbiAgKSA9PiAoKSA9PiB2b2lkO1xuICArZ2V0VmFsdWVXaXRoUHJvbWlzZTogKGVycm9yOiBib29sZWFuKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICtnZXRXaXRoV2l0aE9wdGlvbmFsQXJnczogKG9wdGlvbmFsQXJnPzogYm9vbGVhbikgPT4gP2Jvb2xlYW47XG4gICt2b2lkRnVuYzogKCkgPT4gdm9pZDtcbiAgK3NldE1lbnU6IChtZW51SXRlbTogTWVudUl0ZW0pID0+IHZvaWQ7XG4gICtlbWl0Q3VzdG9tRGV2aWNlRXZlbnQ6IChldmVudE5hbWU6IHN0cmluZykgPT4gdm9pZDtcbiAgK3ZvaWRGdW5jVGhyb3dzOiAoKSA9PiB2b2lkO1xuICArZ2V0T2JqZWN0VGhyb3dzOiAoYXJnOiBPYmplY3RTdHJ1Y3QpID0+IE9iamVjdFN0cnVjdDtcbiAgK3Byb21pc2VUaHJvd3M6ICgpID0+IFByb21pc2U8dm9pZD47XG4gICt2b2lkRnVuY0Fzc2VydDogKCkgPT4gdm9pZDtcbiAgK2dldE9iamVjdEFzc2VydDogKGFyZzogT2JqZWN0U3RydWN0KSA9PiBPYmplY3RTdHJ1Y3Q7XG4gICtwcm9taXNlQXNzZXJ0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoVHVyYm9Nb2R1bGVSZWdpc3RyeS5nZXQ8U3BlYz4oXG4gICdOYXRpdmVDeHhNb2R1bGVFeGFtcGxlQ3h4Jyxcbik6ID9TcGVjKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgUGxhdGZvcm0sXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRvdWNoYWJsZUhpZ2hsaWdodCxcbiAgVmlicmF0aW9uLFxuICBWaWV3LFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5leHBvcnRzLmZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnRzLnRpdGxlID0gJ1ZpYnJhdGlvbic7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL3ZpYnJhdGlvbic7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ1ZpYnJhdGlvbiBBUEknO1xuXG5sZXQgcGF0dGVybiwgcGF0dGVybkxpdGVyYWwsIHBhdHRlcm5EZXNjcmlwdGlvbjtcbmlmIChQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnKSB7XG4gIHBhdHRlcm4gPSBbMCwgNTAwLCAyMDAsIDUwMF07XG4gIHBhdHRlcm5MaXRlcmFsID0gJ1swLCA1MDAsIDIwMCwgNTAwXSc7XG4gIHBhdHRlcm5EZXNjcmlwdGlvbiA9IGAke3BhdHRlcm5MaXRlcmFsfVxuYXJnIDA6IGR1cmF0aW9uIHRvIHdhaXQgYmVmb3JlIHR1cm5pbmcgdGhlIHZpYnJhdG9yIG9uLlxuYXJnIHdpdGggb2RkOiB2aWJyYXRpb24gbGVuZ3RoLlxuYXJnIHdpdGggZXZlbjogZHVyYXRpb24gdG8gd2FpdCBiZWZvcmUgbmV4dCB2aWJyYXRpb24uXG5gO1xufSBlbHNlIHtcbiAgcGF0dGVybiA9IFswLCAxMDAwLCAyMDAwLCAzMDAwXTtcbiAgcGF0dGVybkxpdGVyYWwgPSAnWzAsIDEwMDAsIDIwMDAsIDMwMDBdJztcbiAgcGF0dGVybkRlc2NyaXB0aW9uID0gYCR7cGF0dGVybkxpdGVyYWx9XG52aWJyYXRpb24gbGVuZ3RoIG9uIGlPUyBpcyBmaXhlZC5cbnBhdHRlcm4gY29udHJvbHMgZHVyYXRpb25zIEJFVFdFRU4gZWFjaCB2aWJyYXRpb24gb25seS5cblxuYXJnIDA6IGR1cmF0aW9uIHRvIHdhaXQgYmVmb3JlIHR1cm5pbmcgdGhlIHZpYnJhdG9yIG9uLlxuc3Vic2VxdWVudCBhcmdzOiBkdXJhdGlvbiB0byB3YWl0IGJlZm9yZSBuZXh0IHZpYnJhdGlvbi5cbmA7XG59XG5cbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ1BhdHRlcm4gRGVzY3JpcHRpb25zJyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICAgIDxUZXh0PntwYXR0ZXJuRGVzY3JpcHRpb259PC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ZpYnJhdGlvbi52aWJyYXRlKCknLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gVmlicmF0aW9uLnZpYnJhdGUoKX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgICAgPFRleHQ+VmlicmF0ZTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6IGBWaWJyYXRpb24udmlicmF0ZSgke3BhdHRlcm5MaXRlcmFsfSlgLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gVmlicmF0aW9uLnZpYnJhdGUocGF0dGVybil9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PlZpYnJhdGUgb25jZTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6IGBWaWJyYXRpb24udmlicmF0ZSgke3BhdHRlcm5MaXRlcmFsfSwgdHJ1ZSlgLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17KCkgPT4gVmlicmF0aW9uLnZpYnJhdGUocGF0dGVybiwgdHJ1ZSl9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PlZpYnJhdGUgdW50aWwgY2FuY2VsPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ZpYnJhdGlvbi5jYW5jZWwoKScsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgICBvblByZXNzPXsoKSA9PiBWaWJyYXRpb24uY2FuY2VsKCl9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0PkNhbmNlbDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuXTtcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICB3cmFwcGVyOiB7XG4gICAgYm9yZGVyUmFkaXVzOiA1LFxuICAgIG1hcmdpbkJvdHRvbTogNSxcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZWVlZScsXG4gICAgcGFkZGluZzogMTAsXG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBJbWFnZSxcbiAgUGl4ZWxSYXRpbyxcbiAgU2Nyb2xsVmlldyxcbiAgU3R5bGVTaGVldCxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBUb3VjaGFibGVPcGFjaXR5LFxuICBWaWV3LFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jb25zdCBERUZBVUxUX1dTX1VSTCA9ICd3czovL2xvY2FsaG9zdDo1NTU1Lyc7XG5jb25zdCBERUZBVUxUX0hUVFBfVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NTU1Ni8nO1xuY29uc3QgV1NfRVZFTlRTID0gWydjbG9zZScsICdlcnJvcicsICdtZXNzYWdlJywgJ29wZW4nXTtcbmNvbnN0IFdTX1NUQVRFUyA9IFtcbiAgLyogMCAqLyAnQ09OTkVDVElORycsXG4gIC8qIDEgKi8gJ09QRU4nLFxuICAvKiAyICovICdDTE9TSU5HJyxcbiAgLyogMyAqLyAnQ0xPU0VEJyxcbl07XG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgIGNvbnN0IGxhYmVsID0gPFRleHQgc3R5bGU9e3N0eWxlcy5idXR0b25MYWJlbH0+e3RoaXMucHJvcHMubGFiZWx9PC9UZXh0PjtcbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuYnV0dG9uLCBzdHlsZXMuZGlzYWJsZWRCdXR0b25dfT57bGFiZWx9PC9WaWV3PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9e3RoaXMucHJvcHMub25QcmVzc30gc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKTogUmVhY3QuRWxlbWVudDxhbnk+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICA8VGV4dD57dGhpcy5wcm9wcy5sYWJlbH08L1RleHQ+XG4gICAgICAgIHt0aGlzLnByb3BzLnZhbHVlID8gPFRleHQ+e3RoaXMucHJvcHMudmFsdWV9PC9UZXh0PiA6IG51bGx9XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgV2ViU29ja2V0SW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB3czogP1dlYlNvY2tldCA9IG51bGw7XG4gIHN0YXRlOiB7YmxvYjogP0Jsb2J9ID0ge2Jsb2I6IG51bGx9O1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBsZXQgd3MgPSAodGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodGhpcy5wcm9wcy51cmwpKTtcbiAgICB3cy5iaW5hcnlUeXBlID0gJ2Jsb2InO1xuICAgIHdzLm9ubWVzc2FnZSA9IGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5kYXRhIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICBjb25zdCBibG9iID0gZXZlbnQuZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYmxvYikge1xuICAgICAgICAgIHRoaXMuc3RhdGUuYmxvYi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jsb2J9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdzLm9ub3BlbiA9IGV2ZW50ID0+IHtcbiAgICAgIHdzLnNlbmQoJ2dldEltYWdlJyk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmJsb2IpIHtcbiAgICAgIHRoaXMuc3RhdGUuYmxvYi5jbG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLndzICYmIHRoaXMud3MuY2xvc2UoKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmJsb2IpIHtcbiAgICAgIHJldHVybiA8VmlldyAvPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxJbWFnZVxuICAgICAgICBzb3VyY2U9e3t1cmk6IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5zdGF0ZS5ibG9iKX19XG4gICAgICAgIHN0eWxlPXt7d2lkdGg6IDUwLCBoZWlnaHQ6IDUwfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG93VmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJyhubyB2YWx1ZSknO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclxuICApIHtcbiAgICByZXR1cm4gYEFycmF5QnVmZmVyIHske1N0cmluZyhBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHZhbHVlKSkpfX1gO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudHlwZSBTdGF0ZSA9IHtcbiAgdXJsOiBzdHJpbmcsXG4gIGh0dHBVcmw6IHN0cmluZyxcbiAgZmV0Y2hTdGF0dXM6ID9zdHJpbmcsXG4gIHNvY2tldDogP1dlYlNvY2tldCxcbiAgc29ja2V0U3RhdGU6ID9udW1iZXIsXG4gIGxhc3RTb2NrZXRFdmVudDogP3N0cmluZyxcbiAgbGFzdE1lc3NhZ2U6ID9zdHJpbmcgfCA/QXJyYXlCdWZmZXIsXG4gIG91dGdvaW5nTWVzc2FnZTogc3RyaW5nLFxufTtcblxuY2xhc3MgV2ViU29ja2V0RXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueSwgU3RhdGU+IHtcbiAgc3RhdGU6IFN0YXRlID0ge1xuICAgIHVybDogREVGQVVMVF9XU19VUkwsXG4gICAgaHR0cFVybDogREVGQVVMVF9IVFRQX1VSTCxcbiAgICBmZXRjaFN0YXR1czogbnVsbCxcbiAgICBzb2NrZXQ6IG51bGwsXG4gICAgc29ja2V0U3RhdGU6IG51bGwsXG4gICAgbGFzdFNvY2tldEV2ZW50OiBudWxsLFxuICAgIGxhc3RNZXNzYWdlOiBudWxsLFxuICAgIG91dGdvaW5nTWVzc2FnZTogJycsXG4gIH07XG5cbiAgX2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgY29uc3Qgc29ja2V0ID0gbmV3IFdlYlNvY2tldCh0aGlzLnN0YXRlLnVybCk7XG4gICAgV1NfRVZFTlRTLmZvckVhY2goZXYgPT4gc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoZXYsIHRoaXMuX29uU29ja2V0RXZlbnQpKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNvY2tldCxcbiAgICAgIHNvY2tldFN0YXRlOiBzb2NrZXQucmVhZHlTdGF0ZSxcbiAgICB9KTtcbiAgfTtcblxuICBfZGlzY29ubmVjdCA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuc29ja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuc29ja2V0LmNsb3NlKCk7XG4gIH07XG5cbiAgX29uU29ja2V0RXZlbnQgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlOiBhbnkgPSB7XG4gICAgICBzb2NrZXRTdGF0ZTogZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUsXG4gICAgICBsYXN0U29ja2V0RXZlbnQ6IGV2ZW50LnR5cGUsXG4gICAgfTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ21lc3NhZ2UnKSB7XG4gICAgICBzdGF0ZS5sYXN0TWVzc2FnZSA9IGV2ZW50LmRhdGE7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUpO1xuICB9O1xuXG4gIF9zZW5kVGV4dCA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuc29ja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuc29ja2V0LnNlbmQodGhpcy5zdGF0ZS5vdXRnb2luZ01lc3NhZ2UpO1xuICAgIHRoaXMuc2V0U3RhdGUoe291dGdvaW5nTWVzc2FnZTogJyd9KTtcbiAgfTtcblxuICBfc2VuZEh0dHAgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBmZXRjaFN0YXR1czogJ2ZldGNoaW5nJyxcbiAgICB9KTtcbiAgICBmZXRjaCh0aGlzLnN0YXRlLmh0dHBVcmwpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGZldGNoU3RhdHVzOiAnT0snLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfc2VuZEJpbmFyeSA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zdGF0ZS5zb2NrZXQgfHxcbiAgICAgIHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7b3V0Z29pbmdNZXNzYWdlfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkob3V0Z29pbmdNZXNzYWdlLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRnb2luZ01lc3NhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltpXSA9IG91dGdvaW5nTWVzc2FnZS5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLnNvY2tldC5zZW5kKGJ1ZmZlcik7XG4gICAgdGhpcy5zZXRTdGF0ZSh7b3V0Z29pbmdNZXNzYWdlOiAnJ30pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PGFueT4ge1xuICAgIGNvbnN0IHNvY2tldFN0YXRlID0gV1NfU1RBVEVTW3RoaXMuc3RhdGUuc29ja2V0U3RhdGUgfHwgLTFdO1xuICAgIGNvbnN0IGNhbkNvbm5lY3QgPVxuICAgICAgIXRoaXMuc3RhdGUuc29ja2V0IHx8IHRoaXMuc3RhdGUuc29ja2V0LnJlYWR5U3RhdGUgPj0gV2ViU29ja2V0LkNMT1NJTkc7XG4gICAgY29uc3QgY2FuU2VuZCA9IHNvY2tldFN0YXRlID09PSAnT1BFTic7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTY3JvbGxWaWV3IHN0eWxlPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ub3RlfT5cbiAgICAgICAgICA8VGV4dD5UbyBzdGFydCB0aGUgV1MgdGVzdCBzZXJ2ZXI6PC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMubW9ub3NwYWNlfT5cbiAgICAgICAgICAgIC4vUk5UZXN0ZXIvanMvZXhhbXBsZXMvV2ViU29ja2V0L3dlYnNvY2tldF90ZXN0X3NlcnZlci5qc1xuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Um93IGxhYmVsPVwiQ3VycmVudCBXZWJTb2NrZXQgc3RhdGVcIiB2YWx1ZT17c2hvd1ZhbHVlKHNvY2tldFN0YXRlKX0gLz5cbiAgICAgICAgPFJvd1xuICAgICAgICAgIGxhYmVsPVwiTGFzdCBXZWJTb2NrZXQgZXZlbnRcIlxuICAgICAgICAgIHZhbHVlPXtzaG93VmFsdWUodGhpcy5zdGF0ZS5sYXN0U29ja2V0RXZlbnQpfVxuICAgICAgICAvPlxuICAgICAgICA8Um93XG4gICAgICAgICAgbGFiZWw9XCJMYXN0IG1lc3NhZ2UgcmVjZWl2ZWRcIlxuICAgICAgICAgIHZhbHVlPXtzaG93VmFsdWUodGhpcy5zdGF0ZS5sYXN0TWVzc2FnZSl9XG4gICAgICAgIC8+XG4gICAgICAgIDxSb3cgbGFiZWw9XCJMYXN0IGltYWdlIHJlY2VpdmVkXCI+XG4gICAgICAgICAge2NhblNlbmQgPyA8V2ViU29ja2V0SW1hZ2UgdXJsPXt0aGlzLnN0YXRlLnVybH0gLz4gOiBudWxsfVxuICAgICAgICA8L1Jvdz5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMudGV4dElucHV0fVxuICAgICAgICAgIGF1dG9Db3JyZWN0PXtmYWxzZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlcnZlciBVUkwuLi5cIlxuICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dXJsID0+IHRoaXMuc2V0U3RhdGUoe3VybH0pfVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnVybH1cbiAgICAgICAgLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b25Sb3d9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMuX2Nvbm5lY3R9XG4gICAgICAgICAgICBsYWJlbD1cIkNvbm5lY3RcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Db25uZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy5fZGlzY29ubmVjdH1cbiAgICAgICAgICAgIGxhYmVsPVwiRGlzY29ubmVjdFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17Y2FuQ29ubmVjdH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnRleHRJbnB1dH1cbiAgICAgICAgICBhdXRvQ29ycmVjdD17ZmFsc2V9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIG1lc3NhZ2UgaGVyZS4uLlwiXG4gICAgICAgICAgb25DaGFuZ2VUZXh0PXtvdXRnb2luZ01lc3NhZ2UgPT4gdGhpcy5zZXRTdGF0ZSh7b3V0Z29pbmdNZXNzYWdlfSl9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUub3V0Z29pbmdNZXNzYWdlfVxuICAgICAgICAvPlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvblJvd30+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy5fc2VuZFRleHR9XG4gICAgICAgICAgICBsYWJlbD1cIlNlbmQgYXMgdGV4dFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17IWNhblNlbmR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLl9zZW5kQmluYXJ5fVxuICAgICAgICAgICAgbGFiZWw9XCJTZW5kIGFzIGJpbmFyeVwiXG4gICAgICAgICAgICBkaXNhYmxlZD17IWNhblNlbmR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLm5vdGV9PlxuICAgICAgICAgIDxUZXh0PlRvIHN0YXJ0IHRoZSBIVFRQIHRlc3Qgc2VydmVyOjwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLm1vbm9zcGFjZX0+XG4gICAgICAgICAgICAuL1JOVGVzdGVyL2pzL2V4YW1wbGVzL1dlYlNvY2tldC9odHRwX3Rlc3Rfc2VydmVyLmpzXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnRleHRJbnB1dH1cbiAgICAgICAgICBhdXRvQ29ycmVjdD17ZmFsc2V9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJIVFRQIFVSTC4uLlwiXG4gICAgICAgICAgb25DaGFuZ2VUZXh0PXtodHRwVXJsID0+IHRoaXMuc2V0U3RhdGUoe2h0dHBVcmx9KX1cbiAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5odHRwVXJsfVxuICAgICAgICAvPlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvblJvd30+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy5fc2VuZEh0dHB9XG4gICAgICAgICAgICBsYWJlbD1cIlNlbmQgSFRUUCByZXF1ZXN0IHRvIHNldCBjb29raWVcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuZmV0Y2hTdGF0dXMgPT09ICdmZXRjaGluZyd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLm5vdGV9PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge3RoaXMuc3RhdGUuZmV0Y2hTdGF0dXMgPT09ICdPSydcbiAgICAgICAgICAgICAgPyAnRG9uZS4gQ2hlY2sgeW91ciBXUyBzZXJ2ZXIgY29uc29sZSB0byBzZWUgaWYgdGhlIG5leHQgV1MgcmVxdWVzdHMgaW5jbHVkZSB0aGUgY29va2llIChzaG91bGQgYmUgXCJ3c3Rlc3Q9T0tcIiknXG4gICAgICAgICAgICAgIDogJy0nfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICBub3RlOiB7XG4gICAgcGFkZGluZzogOCxcbiAgICBtYXJnaW46IDQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICB9LFxuICBtb25vc3BhY2U6IHtcbiAgICBmb250RmFtaWx5OiAnY291cmllcicsXG4gICAgZm9udFNpemU6IDExLFxuICB9LFxuICByb3c6IHtcbiAgICBoZWlnaHQ6IDQwLFxuICAgIHBhZGRpbmc6IDQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IDEgLyBQaXhlbFJhdGlvLmdldCgpLFxuICAgIGJvcmRlckNvbG9yOiAnZ3JleScsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIG1hcmdpbjogOCxcbiAgICBwYWRkaW5nOiA4LFxuICAgIGJvcmRlclJhZGl1czogNCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdibHVlJyxcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICB9LFxuICBkaXNhYmxlZEJ1dHRvbjoge1xuICAgIG9wYWNpdHk6IDAuNSxcbiAgfSxcbiAgYnV0dG9uTGFiZWw6IHtcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgfSxcbiAgYnV0dG9uUm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICB0ZXh0SW5wdXQ6IHtcbiAgICBoZWlnaHQ6IDQwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICBtYXJnaW46IDgsXG4gICAgcGFkZGluZzogOCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLnRpdGxlID0gJ1dlYlNvY2tldCc7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ0Jhc2ljJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAnV2ViU29ja2V0IEFQSSc7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdCYXNpYyB3ZWJzb2NrZXQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5FbGVtZW50PHR5cGVvZiBXZWJTb2NrZXRFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPFdlYlNvY2tldEV4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFhIUkV4YW1wbGVBYm9ydENvbnRyb2xsZXIgPSByZXF1aXJlKCcuL1hIUkV4YW1wbGVBYm9ydENvbnRyb2xsZXInKTtcbmNvbnN0IFhIUkV4YW1wbGVCaW5hcnlVcGxvYWQgPSByZXF1aXJlKCcuL1hIUkV4YW1wbGVCaW5hcnlVcGxvYWQnKTtcbmNvbnN0IFhIUkV4YW1wbGVEb3dubG9hZCA9IHJlcXVpcmUoJy4vWEhSRXhhbXBsZURvd25sb2FkJyk7XG5jb25zdCBYSFJFeGFtcGxlRmV0Y2ggPSByZXF1aXJlKCcuL1hIUkV4YW1wbGVGZXRjaCcpO1xuY29uc3QgWEhSRXhhbXBsZUhlYWRlcnMgPSByZXF1aXJlKCcuL1hIUkV4YW1wbGVIZWFkZXJzJyk7XG5jb25zdCBYSFJFeGFtcGxlT25UaW1lT3V0ID0gcmVxdWlyZSgnLi9YSFJFeGFtcGxlT25UaW1lT3V0Jyk7XG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbmV4cG9ydHMuZnJhbWV3b3JrID0gJ1JlYWN0JztcbmV4cG9ydHMudGl0bGUgPSAnWE1MSHR0cFJlcXVlc3QnO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdCYXNpYyc7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gKCdFeGFtcGxlIHRoYXQgZGVtb25zdHJhdGVzIHVwbG9hZCBhbmQgZG93bmxvYWQgJyArXG4gICdyZXF1ZXN0cyB1c2luZyBYTUxIdHRwUmVxdWVzdC4nOiBzdHJpbmcpO1xuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnRmlsZSBEb3dubG9hZCcsXG4gICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgcmV0dXJuIDxYSFJFeGFtcGxlRG93bmxvYWQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSBVcGxvYWQnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8WEhSRXhhbXBsZUJpbmFyeVVwbG9hZCAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdGZXRjaCBUZXN0JyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFhIUkV4YW1wbGVGZXRjaCAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdIZWFkZXJzJyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFhIUkV4YW1wbGVIZWFkZXJzIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1RpbWUgT3V0IFRlc3QnLFxuICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgIHJldHVybiA8WEhSRXhhbXBsZU9uVGltZU91dCAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBYm9ydCBUZXN0JyxcbiAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICByZXR1cm4gPFhIUkV4YW1wbGVBYm9ydENvbnRyb2xsZXIgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQWxlcnQsXG4gIFN0eWxlU2hlZXQsXG4gIFN3aXRjaCxcbiAgVGV4dCxcbiAgVG91Y2hhYmxlSGlnaGxpZ2h0LFxuICBWaWV3LFxufSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG4vKipcbiAqIENvbnZlcnQgbnVtYmVyIG9mIGJ5dGVzIHRvIE1CIGFuZCByb3VuZCB0byB0aGUgbmVhcmVzdCAwLjEgTUIuXG4gKi9cbmZ1bmN0aW9uIHJvdW5kS2lsbyh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgLyAxMDAwKTtcbn1cblxuY2xhc3MgWEhSRXhhbXBsZURvd25sb2FkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHsuLi59LCBPYmplY3Q+IHtcbiAgc3RhdGU6IE9iamVjdCA9IHtcbiAgICBkb3dubG9hZGluZzogZmFsc2UsXG4gICAgLy8gc2V0IGJ5IG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAgIGNvbnRlbnRMZW5ndGg6IDEsXG4gICAgcmVzcG9uc2VMZW5ndGg6IDAsXG4gICAgLy8gc2V0IGJ5IG9ucHJvZ3Jlc3NcbiAgICBwcm9ncmVzc1RvdGFsOiAxLFxuICAgIHByb2dyZXNzTG9hZGVkOiAwLFxuXG4gICAgcmVhZHlzdGF0ZUhhbmRsZXI6IGZhbHNlLFxuICAgIHByb2dyZXNzSGFuZGxlcjogdHJ1ZSxcbiAgICBhcnJheWJ1ZmZlcjogZmFsc2UsXG4gIH07XG5cbiAgeGhyOiA/WE1MSHR0cFJlcXVlc3QgPSBudWxsO1xuICBjYW5jZWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBfZG93bmxvYWQgPSAoKSA9PiB7XG4gICAgbGV0IHhocjtcbiAgICBpZiAodGhpcy54aHIpIHtcbiAgICAgIHhociA9IHRoaXMueGhyO1xuICAgICAgeGhyLmFib3J0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSB4aHIuSEVBREVSU19SRUNFSVZFRCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcGFyc2VJbnQoXG4gICAgICAgICAgeGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDb250ZW50LUxlbmd0aCcpLFxuICAgICAgICAgIDEwLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHJlc3BvbnNlTGVuZ3RoOiAwLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IHhoci5MT0FESU5HICYmIHhoci5yZXNwb25zZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICByZXNwb25zZUxlbmd0aDogeGhyLnJlc3BvbnNlLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvbnByb2dyZXNzID0gKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJvZ3Jlc3NUb3RhbDogZXZlbnQudG90YWwsXG4gICAgICAgIHByb2dyZXNzTG9hZGVkOiBldmVudC5sb2FkZWQsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGUucmVhZHlzdGF0ZUhhbmRsZXIpIHtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBvbnJlYWR5c3RhdGVjaGFuZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLnByb2dyZXNzSGFuZGxlcikge1xuICAgICAgeGhyLm9ucHJvZ3Jlc3MgPSBvbnByb2dyZXNzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5hcnJheWJ1ZmZlcikge1xuICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgfVxuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtkb3dubG9hZGluZzogZmFsc2V9KTtcbiAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIGxldCByZXNwb25zZVR5cGUgPSBgUmVzcG9uc2UgaXMgYSBzdHJpbmcsICR7eGhyLnJlc3BvbnNlLmxlbmd0aH0gY2hhcmFjdGVycyBsb25nLmA7XG4gICAgICAgIGlmICh4aHIucmVzcG9uc2UgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJlc3BvbnNlVHlwZSA9IGBSZXNwb25zZSBpcyBhbiBBcnJheUJ1ZmZlciwgJHt4aHIucmVzcG9uc2UuYnl0ZUxlbmd0aH0gYnl0ZXMgbG9uZy5gO1xuICAgICAgICB9XG4gICAgICAgIEFsZXJ0LmFsZXJ0KCdEb3dubG9hZCBjb21wbGV0ZSEnLCByZXNwb25zZVR5cGUpO1xuICAgICAgfSBlbHNlIGlmICh4aHIuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgIEFsZXJ0LmFsZXJ0KFxuICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgYFNlcnZlciByZXR1cm5lZCBIVFRQIHN0YXR1cyBvZiAke3hoci5zdGF0dXN9OiAke3hoci5yZXNwb25zZVRleHR9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEFsZXJ0LmFsZXJ0KCdFcnJvcicsIHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgfVxuICAgIH07XG4gICAgeGhyLm9wZW4oXG4gICAgICAnR0VUJyxcbiAgICAgICdodHRwOi8vYWxlcGguZ3V0ZW5iZXJnLm9yZy9jYWNoZS9lcHViLzEwMC9wZzEwMC1pbWFnZXMuaHRtbC51dGY4JyxcbiAgICApO1xuICAgIC8vIEF2b2lkIGd6aXAgc28gd2UgY2FuIGFjdHVhbGx5IHNob3cgcHJvZ3Jlc3NcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0LUVuY29kaW5nJywgJycpO1xuICAgIHhoci5zZW5kKCk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtkb3dubG9hZGluZzogdHJ1ZX0pO1xuICB9O1xuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICB0aGlzLnhociAmJiB0aGlzLnhoci5hYm9ydCgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPyAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+RG93bmxvYWRpbmcuLi48L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApIDogKFxuICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodCBzdHlsZT17c3R5bGVzLndyYXBwZXJ9IG9uUHJlc3M9e3RoaXMuX2Rvd25sb2FkfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgIDxUZXh0PkRvd25sb2FkIDdNQiBUZXh0IEZpbGU8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICk7XG5cbiAgICBsZXQgcmVhZHlzdGF0ZSA9IG51bGw7XG4gICAgbGV0IHByb2dyZXNzID0gbnVsbDtcbiAgICBpZiAodGhpcy5zdGF0ZS5yZWFkeXN0YXRlSGFuZGxlciAmJiAhdGhpcy5zdGF0ZS5hcnJheWJ1ZmZlcikge1xuICAgICAgY29uc3Qge3Jlc3BvbnNlTGVuZ3RoLCBjb250ZW50TGVuZ3RofSA9IHRoaXMuc3RhdGU7XG4gICAgICByZWFkeXN0YXRlID0gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnByb2dyZXNzQmFyTGFiZWx9PlxuICAgICAgICAgICAgcmVzcG9uc2VUZXh0OiB7cm91bmRLaWxvKHJlc3BvbnNlTGVuZ3RoKX0ve3JvdW5kS2lsbyhjb250ZW50TGVuZ3RoKX1cbiAgICAgICAgICAgIGsgY2hhcnNcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLnByb2dyZXNzSGFuZGxlcikge1xuICAgICAgY29uc3Qge3Byb2dyZXNzTG9hZGVkLCBwcm9ncmVzc1RvdGFsfSA9IHRoaXMuc3RhdGU7XG4gICAgICBwcm9ncmVzcyA9IChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5wcm9ncmVzc0JhckxhYmVsfT5cbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IHtyb3VuZEtpbG8ocHJvZ3Jlc3NMb2FkZWQpfS97cm91bmRLaWxvKHByb2dyZXNzVG90YWwpfXsnICd9XG4gICAgICAgICAgICBLQlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29uZmlnUm93fT5cbiAgICAgICAgICA8VGV4dD5vbnJlYWR5c3RhdGVjaGFuZ2UgaGFuZGxlcjwvVGV4dD5cbiAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5yZWFkeXN0YXRlSGFuZGxlcn1cbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3JlYWR5c3RhdGVIYW5kbGVyID0+XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3JlYWR5c3RhdGVIYW5kbGVyfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY29uZmlnUm93fT5cbiAgICAgICAgICA8VGV4dD5vbnByb2dyZXNzIGhhbmRsZXI8L1RleHQ+XG4gICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucHJvZ3Jlc3NIYW5kbGVyfVxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17cHJvZ3Jlc3NIYW5kbGVyID0+IHRoaXMuc2V0U3RhdGUoe3Byb2dyZXNzSGFuZGxlcn0pfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb25maWdSb3d9PlxuICAgICAgICAgIDxUZXh0PmRvd25sb2FkIGFzIGFycmF5YnVmZmVyPC9UZXh0PlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmFycmF5YnVmZmVyfVxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17YXJyYXlidWZmZXIgPT4gdGhpcy5zZXRTdGF0ZSh7YXJyYXlidWZmZXJ9KX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIHtidXR0b259XG4gICAgICAgIHtyZWFkeXN0YXRlfVxuICAgICAgICB7cHJvZ3Jlc3N9XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHdyYXBwZXI6IHtcbiAgICBib3JkZXJSYWRpdXM6IDUsXG4gICAgbWFyZ2luQm90dG9tOiA1LFxuICB9LFxuICBidXR0b246IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlZWVlJyxcbiAgICBwYWRkaW5nOiA4LFxuICB9LFxuICBwcm9ncmVzc0JhckxhYmVsOiB7XG4gICAgbWFyZ2luVG9wOiAxMixcbiAgICBtYXJnaW5Cb3R0b206IDgsXG4gIH0sXG4gIGNvbmZpZ1Jvdzoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogOCxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gWEhSRXhhbXBsZURvd25sb2FkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IFJOVE9wdGlvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVE9wdGlvbic7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgQWxlcnQsXG4gIExpbmtpbmcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHQsXG4gIFRvdWNoYWJsZUhpZ2hsaWdodCxcbiAgVmlldyxcbn0gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY29uc3QgQklOQVJZX1RZUEVTID0ge1xuICBTdHJpbmcsXG4gIEFycmF5QnVmZmVyLFxuICBJbnQ4QXJyYXksXG4gIFVpbnQ4QXJyYXksXG4gIFVpbnQ4Q2xhbXBlZEFycmF5LFxuICBJbnQxNkFycmF5LFxuICBVaW50MTZBcnJheSxcbiAgSW50MzJBcnJheSxcbiAgVWludDMyQXJyYXksXG4gIEZsb2F0MzJBcnJheSxcbiAgRmxvYXQ2NEFycmF5LFxuICBEYXRhVmlldyxcbn07XG5cbmNvbnN0IFNBTVBMRV9URVhUID0gYFxuSSBhbSB0aGUgc3Bpcml0IHRoYXQgbmVnYXRlcy5cbkFuZCByaWdodGx5IHNvLCBmb3IgYWxsIHRoYXQgY29tZXMgdG8gYmVcbkRlc2VydmVzIHRvIHBlcmlzaCB3cmV0Y2hlZGx5O1xuJ1R3ZXJlIGJldHRlciBub3RoaW5nIHdvdWxkIGJlZ2luLlxuVGh1cyBldmVyeXRoaW5nIHRoYXQgdGhhdCB5b3VyIHRlcm1zLCBzaW4sXG5EZXN0cnVjdGlvbiwgZXZpbCByZXByZXNlbnTigJRcblRoYXQgaXMgbXkgcHJvcGVyIGVsZW1lbnQuXG5cbi0tRmF1c3QsIEpXIEdvZXRoZVxuYDtcblxuY2xhc3MgWEhSRXhhbXBsZUJpbmFyeVVwbG9hZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgJEZsb3dGaXhNZVN0YXRlPiB7XG4gIHN0YXRpYyBoYW5kbGVQb3N0VGVzdFNlcnZlclVwbG9hZCh4aHI6IFhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgaWYgKHhoci5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgQWxlcnQuYWxlcnQoXG4gICAgICAgICdVcGxvYWQgZmFpbGVkJyxcbiAgICAgICAgJ0V4cGVjdGVkIEhUVFAgMjAwIE9LIHJlc3BvbnNlLCBnb3QgJyArIHhoci5zdGF0dXMsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXhoci5yZXNwb25zZVRleHQpIHtcbiAgICAgIEFsZXJ0LmFsZXJ0KCdVcGxvYWQgZmFpbGVkJywgJ05vIHJlc3BvbnNlIHBheWxvYWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0geGhyLnJlc3BvbnNlVGV4dC5pbmRleE9mKFxuICAgICAgJ2h0dHA6Ly9wdHN2Mi5jb20vdC9yZWFjdC1uYXRpdmUvZC8nLFxuICAgICk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgQWxlcnQuYWxlcnQoJ1VwbG9hZCBmYWlsZWQnLCAnSW52YWxpZCByZXNwb25zZSBwYXlsb2FkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSB4aHIucmVzcG9uc2VUZXh0LnNsaWNlKGluZGV4KS5zcGxpdCgnXFxuJylbMF07XG4gICAgY29uc29sZS5sb2coJ1VwbG9hZCBzdWNjZXNzZnVsOiAnICsgdXJsKTtcbiAgICAvLyAkRmxvd0ZpeE1lW3VudXNlZC1wcm9taXNlXVxuICAgIExpbmtpbmcub3BlblVSTCh1cmwpO1xuICB9XG5cbiAgc3RhdGU6ICRGbG93Rml4TWUgfCB7fHR5cGU6ICRURU1QT1JBUlkkc3RyaW5nPCdVaW50OEFycmF5Jz58fSA9IHtcbiAgICB0eXBlOiAnVWludDhBcnJheScsXG4gIH07XG5cbiAgX3VwbG9hZCA9ICgpID0+IHtcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbignUE9TVCcsICdodHRwOi8vcHRzdjIuY29tL3QvcmVhY3QtbmF0aXZlL3Bvc3QnKTtcbiAgICB4aHIub25sb2FkID0gKCkgPT4gWEhSRXhhbXBsZUJpbmFyeVVwbG9hZC5oYW5kbGVQb3N0VGVzdFNlcnZlclVwbG9hZCh4aHIpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUudHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICAgIHhoci5zZW5kKFNBTVBMRV9URVhUKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigyNTYpO1xuICAgIGNvbnN0IGFzQnl0ZXMgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBTQU1QTEVfVEVYVC5sZW5ndGg7IGkrKykge1xuICAgICAgYXNCeXRlc1tpXSA9IFNBTVBMRV9URVhULmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLnR5cGUgPT09ICdBcnJheUJ1ZmZlcicpIHtcbiAgICAgIHhoci5zZW5kKGFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUudHlwZSA9PT0gJ1VpbnQ4QXJyYXknKSB7XG4gICAgICB4aHIuc2VuZChhc0J5dGVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBUeXBlZEFycmF5Q2xhc3MgPSBCSU5BUllfVFlQRVNbdGhpcy5zdGF0ZS50eXBlXTtcbiAgICB4aHIuc2VuZChuZXcgVHlwZWRBcnJheUNsYXNzKGFycmF5QnVmZmVyKSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ibG9ja30+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy50aXRsZX0+VXBsb2FkIDI1NSBieXRlcyBhcyAuLi48L1RleHQ+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgICAge09iamVjdC5rZXlzKEJJTkFSWV9UWVBFUykubWFwKHR5cGUgPT4gKFxuICAgICAgICAgICAgICA8Uk5UT3B0aW9uXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMuc3RhdGUudHlwZSA9PT0gdHlwZX1cbiAgICAgICAgICAgICAgICBrZXk9e3R5cGV9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3R5cGV9XG4gICAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7dHlwZX0pfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMub3B0aW9ufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudXBsb2FkQnV0dG9ufT5cbiAgICAgICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0IG9uUHJlc3M9e3RoaXMuX3VwbG9hZH0+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnVwbG9hZEJ1dHRvbkJveH0+XG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudXBsb2FkQnV0dG9uTGFiZWx9PlVwbG9hZDwvVGV4dD5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBibG9jazoge1xuICAgIGJvcmRlckNvbG9yOiAncmdiYSgwLDAsMCwgMC4xKScsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IDEsXG4gICAgcGFkZGluZzogNixcbiAgfSxcbiAgcm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH0sXG4gIG9wdGlvbjoge21hcmdpbjogNn0sXG4gIHVwbG9hZEJ1dHRvbjoge1xuICAgIG1hcmdpblRvcDogMTYsXG4gIH0sXG4gIHVwbG9hZEJ1dHRvbkJveDoge1xuICAgIGZsZXg6IDEsXG4gICAgcGFkZGluZ1ZlcnRpY2FsOiAxMixcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdibHVlJyxcbiAgICBib3JkZXJSYWRpdXM6IDQsXG4gIH0sXG4gIHVwbG9hZEJ1dHRvbkxhYmVsOiB7XG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgZm9udFNpemU6IDE2LFxuICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gWEhSRXhhbXBsZUJpbmFyeVVwbG9hZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1BsYXRmb3JtLCBTdHlsZVNoZWV0LCBUZXh0LCBUZXh0SW5wdXQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIFhIUkV4YW1wbGVGZXRjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZXNwb25zZVVSTDogP3N0cmluZztcbiAgcmVzcG9uc2VIZWFkZXJzOiA/T2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHJlc3BvbnNlVGV4dDogbnVsbCxcbiAgICB9O1xuICAgIHRoaXMucmVzcG9uc2VVUkwgPSBudWxsO1xuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gbnVsbDtcbiAgfVxuXG4gIHN1Ym1pdCh1cmk6IHN0cmluZykge1xuICAgIC8vICRGbG93Rml4TWVbdW51c2VkLXByb21pc2VdXG4gICAgZmV0Y2godXJpKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnJlc3BvbnNlVVJMID0gcmVzcG9uc2UudXJsO1xuICAgICAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XG4gICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oYm9keSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3Jlc3BvbnNlVGV4dDogYm9keX0pO1xuICAgICAgfSk7XG4gIH1cblxuICBfcmVuZGVySGVhZGVycygpOiBudWxsIHwgQXJyYXk8UmVhY3QuTm9kZT4ge1xuICAgIGlmICghdGhpcy5yZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVyczogQXJyYXk8UmVhY3QuTm9kZT4gPSBbXTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5yZXNwb25zZUhlYWRlcnMubWFwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVzcG9uc2VIZWFkZXJzLmdldChrZXkpO1xuICAgICAgcmVzcG9uc2VIZWFkZXJzLnB1c2goXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHtrZXl9OiB7dmFsdWV9XG4gICAgICAgIDwvVGV4dD4sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VIZWFkZXJzO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHJlc3BvbnNlVVJMID0gdGhpcy5yZXNwb25zZVVSTCA/IChcbiAgICAgIDxWaWV3IHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmxhYmVsfT5TZXJ2ZXIgcmVzcG9uc2UgVVJMOjwvVGV4dD5cbiAgICAgICAgPFRleHQ+e3RoaXMucmVzcG9uc2VVUkx9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgICkgOiBudWxsO1xuXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPyAoXG4gICAgICA8VmlldyBzdHlsZT17e21hcmdpblRvcDogMTB9fT5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbH0+U2VydmVyIHJlc3BvbnNlIGhlYWRlcnM6PC9UZXh0PlxuICAgICAgICB7dGhpcy5fcmVuZGVySGVhZGVycygpfVxuICAgICAgPC9WaWV3PlxuICAgICkgOiBudWxsO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLnN0YXRlLnJlc3BvbnNlVGV4dCA/IChcbiAgICAgIDxWaWV3IHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmxhYmVsfT5TZXJ2ZXIgcmVzcG9uc2U6PC9UZXh0PlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgZWRpdGFibGU9e2ZhbHNlfVxuICAgICAgICAgIG11bHRpbGluZT17dHJ1ZX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuc3RhdGUucmVzcG9uc2VUZXh0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMudGV4dE91dHB1dH1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICApIDogbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5sYWJlbH0+RWRpdCBVUkwgdG8gc3VibWl0OjwvVGV4dD5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHJldHVybktleVR5cGU9XCJnb1wiXG4gICAgICAgICAgZGVmYXVsdFZhbHVlPVwiaHR0cDovL3d3dy5wb3N0dGVzdHNlcnZlci5jb20vcG9zdC5waHBcIlxuICAgICAgICAgIG9uU3VibWl0RWRpdGluZz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQoZXZlbnQubmF0aXZlRXZlbnQudGV4dCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnRleHRJbnB1dH1cbiAgICAgICAgLz5cbiAgICAgICAge3Jlc3BvbnNlVVJMfVxuICAgICAgICB7cmVzcG9uc2VIZWFkZXJzfVxuICAgICAgICB7cmVzcG9uc2V9XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHRleHRJbnB1dDoge1xuICAgIGZsZXg6IDEsXG4gICAgYm9yZGVyUmFkaXVzOiAzLFxuICAgIGJvcmRlckNvbG9yOiAnZ3JleScsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgaGVpZ2h0OiBQbGF0Zm9ybS5PUyA9PT0gJ2FuZHJvaWQnID8gNDQgOiAzMCxcbiAgICBwYWRkaW5nTGVmdDogOCxcbiAgfSxcbiAgbGFiZWw6IHtcbiAgICBmbGV4OiAxLFxuICAgIGNvbG9yOiAnI2FhYScsXG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgaGVpZ2h0OiAyMCxcbiAgfSxcbiAgdGV4dE91dHB1dDoge1xuICAgIGZsZXg6IDEsXG4gICAgZm9udFNpemU6IDE3LFxuICAgIGJvcmRlclJhZGl1czogMyxcbiAgICBib3JkZXJDb2xvcjogJ2dyZXknLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGhlaWdodDogMjAwLFxuICAgIHBhZGRpbmdMZWZ0OiA4LFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gWEhSRXhhbXBsZUZldGNoO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBub2Zsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtTdHlsZVNoZWV0LCBUZXh0LCBUb3VjaGFibGVIaWdobGlnaHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIFhIUkV4YW1wbGVIZWFkZXJzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgeGhyOiBYTUxIdHRwUmVxdWVzdDtcbiAgY2FuY2VsbGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogJycsXG4gICAgICBoZWFkZXJzOiAnJyxcbiAgICAgIGNvbnRlbnRTaXplOiAxLFxuICAgICAgZG93bmxvYWRlZDogMCxcbiAgICB9O1xuICB9XG5cbiAgZG93bmxvYWQoKSB7XG4gICAgdGhpcy54aHIgJiYgdGhpcy54aHIuYWJvcnQoKTtcblxuICAgIGNvbnN0IHhociA9IHRoaXMueGhyIHx8IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IHhoci5ET05FKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICAgIHRoaXMuY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHN0YXR1czogJ0Rvd25sb2FkIGNvbXBsZXRlIScsXG4gICAgICAgICAgICBoZWFkZXJzOiB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoeGhyLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc3RhdHVzOlxuICAgICAgICAgICAgICAnRXJyb3I6IFNlcnZlciByZXR1cm5lZCBIVFRQIHN0YXR1cyBvZiAnICtcbiAgICAgICAgICAgICAgeGhyLnN0YXR1cyArXG4gICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgIHhoci5yZXNwb25zZVRleHQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGF0dXM6ICdFcnJvcjogJyArIHhoci5yZXNwb25zZVRleHQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHhoci5vcGVuKFxuICAgICAgJ0dFVCcsXG4gICAgICAnaHR0cHM6Ly9odHRwYmluLm9yZy9yZXNwb25zZS1oZWFkZXJzP2hlYWRlcjE9dmFsdWUmaGVhZGVyMj12YWx1ZTEmaGVhZGVyMj12YWx1ZTInLFxuICAgICk7XG4gICAgeGhyLnNlbmQoKTtcbiAgICB0aGlzLnhociA9IHhocjtcblxuICAgIHRoaXMuc2V0U3RhdGUoe3N0YXR1czogJ0Rvd25sb2FkaW5nLi4uJ30pO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIHRoaXMueGhyICYmIHRoaXMueGhyLmFib3J0KCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgYnV0dG9uID1cbiAgICAgIHRoaXMuc3RhdGUuc3RhdHVzID09PSAnRG93bmxvYWRpbmcuLi4nID8gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIDxUZXh0Pi4uLjwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLndyYXBwZXJ9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5kb3dubG9hZC5iaW5kKHRoaXMpfT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICA8VGV4dD5HZXQgaGVhZGVyczwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAge2J1dHRvbn1cbiAgICAgICAgPFRleHQ+e3RoaXMuc3RhdGUuaGVhZGVyc308L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHdyYXBwZXI6IHtcbiAgICBib3JkZXJSYWRpdXM6IDUsXG4gICAgbWFyZ2luQm90dG9tOiA1LFxuICB9LFxuICBidXR0b246IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlZWVlJyxcbiAgICBwYWRkaW5nOiA4LFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gWEhSRXhhbXBsZUhlYWRlcnM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtTdHlsZVNoZWV0LCBUZXh0LCBUb3VjaGFibGVIaWdobGlnaHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIFhIUkV4YW1wbGVPblRpbWVPdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgeGhyOiBYTUxIdHRwUmVxdWVzdDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6ICcnLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWRUaW1lT3V0UmVxdWVzdCgpIHtcbiAgICB0aGlzLnhociAmJiB0aGlzLnhoci5hYm9ydCgpO1xuXG4gICAgY29uc3QgeGhyID0gdGhpcy54aHIgfHwgbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICB4aHIub25lcnJvciA9ICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdTdGF0dXMgJywgeGhyLnN0YXR1cyk7XG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgJywgeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgfTtcblxuICAgIHhoci5vbnRpbWVvdXQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiB4aHIucmVzcG9uc2VUZXh0LFxuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1N0YXR1cyAnLCB4aHIuc3RhdHVzKTtcbiAgICAgIGNvbnNvbGUubG9nKCdSZXNwb25zZSAnLCB4aHIucmVzcG9uc2VUZXh0KTtcbiAgICB9O1xuXG4gICAgeGhyLm9wZW4oJ0dFVCcsICdodHRwczovL2h0dHBiaW4ub3JnL2RlbGF5LzUnKTsgLy8gcmVxdWVzdCB0byB0YWtlIDUgc2Vjb25kcyB0byBsb2FkXG4gICAgeGhyLnRpbWVvdXQgPSAyMDAwOyAvLyByZXF1ZXN0IHRpbWVzIG91dCBpbiAyIHNlY29uZHNcbiAgICB4aHIuc2VuZCgpO1xuICAgIHRoaXMueGhyID0geGhyO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0pO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy54aHIgJiYgdGhpcy54aHIuYWJvcnQoKTtcbiAgfVxuXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLnN0YXRlLmxvYWRpbmcgPyAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPFRleHQ+TG9hZGluZy4uLjwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICkgOiAoXG4gICAgICA8VG91Y2hhYmxlSGlnaGxpZ2h0XG4gICAgICAgIHN0eWxlPXtzdHlsZXMud3JhcHBlcn1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXSBhZGRlZCB3aGVuIGltcHJvdmluZyB0eXBpbmcgZm9yIHRoaXMgcGFyYW1ldGVyc1xuICAgICAgICBvblByZXNzPXt0aGlzLmxvYWRUaW1lT3V0UmVxdWVzdC5iaW5kKHRoaXMpfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5idXR0b259PlxuICAgICAgICAgIDxUZXh0Pk1ha2UgVGltZSBPdXQgUmVxdWVzdDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAge2J1dHRvbn1cbiAgICAgICAgPFRleHQ+e3RoaXMuc3RhdGUuc3RhdHVzfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgd3JhcHBlcjoge1xuICAgIGJvcmRlclJhZGl1czogNSxcbiAgICBtYXJnaW5Cb3R0b206IDUsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWVlZWUnLFxuICAgIHBhZGRpbmc6IDgsXG4gIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBYSFJFeGFtcGxlT25UaW1lT3V0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7QWxlcnQsIEJ1dHRvbiwgVmlld30gPSByZXF1aXJlKCdyZWFjdC1uYXRpdmUnKTtcblxuY2xhc3MgWEhSRXhhbXBsZUFib3J0Q29udHJvbGxlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Li4ufSwgey4uLn0+IHtcbiAgX3RpbWVvdXQ6IGFueTtcblxuICBfc3VibWl0KGFib3J0RGVsYXk6IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgZ2xvYmFsLkFib3J0Q29udHJvbGxlcigpO1xuICAgIGZldGNoKCdodHRwczovL3JlYWN0bmF0aXZlLmRldi8nLCB7XG4gICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiByZXMudGV4dCgpKVxuICAgICAgLnRoZW4ocmVzID0+IEFsZXJ0LmFsZXJ0KHJlcykpXG4gICAgICAuY2F0Y2goZXJyID0+IEFsZXJ0LmFsZXJ0KGVyci5tZXNzYWdlKSk7XG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfSwgYWJvcnREZWxheSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdGl0bGU9XCJBYm9ydCBiZWZvcmUgcmVzcG9uc2VcIlxuICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N1Ym1pdCgwKTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdGl0bGU9XCJBYm9ydCBhZnRlciByZXNwb25zZVwiXG4gICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3VibWl0KDUwMDApO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFhIUkV4YW1wbGVBYm9ydENvbnRyb2xsZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKiBAb25jYWxsIHJlYWN0X25hdGl2ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB0eXBlIE1lbW9yeUluZm8gZnJvbSAncmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvcGVyZm9ybWFuY2UvTWVtb3J5SW5mbyc7XG5pbXBvcnQgdHlwZSBSZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmcgZnJvbSAncmVhY3QtbmF0aXZlL3NyYy9wcml2YXRlL3dlYmFwaXMvcGVyZm9ybWFuY2UvUmVhY3ROYXRpdmVTdGFydHVwVGltaW5nJztcblxuaW1wb3J0IFJOVGVzdGVyUGFnZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1JOVGVzdGVyUGFnZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0J1dHRvbiwgU3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcbmltcG9ydCBQZXJmb3JtYW5jZSBmcm9tICdyZWFjdC1uYXRpdmUvc3JjL3ByaXZhdGUvd2ViYXBpcy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZSc7XG5cbmNvbnN0IHt1c2VTdGF0ZSwgdXNlQ2FsbGJhY2t9ID0gUmVhY3Q7XG5jb25zdCBwZXJmb3JtYW5jZSA9IG5ldyBQZXJmb3JtYW5jZSgpO1xuXG5mdW5jdGlvbiBNZW1vcnlFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICAvLyBNZW1vcnkgQVBJIHRlc3RpbmdcbiAgY29uc3QgW21lbW9yeUluZm8sIHNldE1lbW9yeUluZm9dID0gdXNlU3RhdGU8P01lbW9yeUluZm8+KG51bGwpO1xuICBjb25zdCBvbkdldE1lbW9yeUluZm8gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gcGVyZm9ybWFuY2UubWVtb3J5IGlzIG5vdCBpbmNsdWRlZCBpbiBib20uanMgeWV0LlxuICAgIC8vIE9uY2Ugd2UgcmVsZWFzZSB0aGUgY2hhbmdlIGluIGZsb3cgdGhpcyBjYW4gYmUgcmVtb3ZlZC5cbiAgICBzZXRNZW1vcnlJbmZvKHBlcmZvcm1hbmNlLm1lbW9yeSk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQYWdlIG5vU2Nyb2xsPXt0cnVlfSB0aXRsZT1cInBlcmZvcm1hbmNlLm1lbW9yeVwiPlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICA8QnV0dG9uIG9uUHJlc3M9e29uR2V0TWVtb3J5SW5mb30gdGl0bGU9XCJDbGljayB0byB1cGRhdGUgbWVtb3J5IGluZm9cIiAvPlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHtganNIZWFwU2l6ZUxpbWl0OiAke1N0cmluZyhtZW1vcnlJbmZvPy5qc0hlYXBTaXplTGltaXQpfSBieXRlc2B9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge2B0b3RhbEpTSGVhcFNpemU6ICR7U3RyaW5nKG1lbW9yeUluZm8/LnRvdGFsSlNIZWFwU2l6ZSl9IGJ5dGVzYH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7YHVzZWRKU0hlYXBTaXplOiAke1N0cmluZyhtZW1vcnlJbmZvPy51c2VkSlNIZWFwU2l6ZSl9IGJ5dGVzYH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8L1JOVGVzdGVyUGFnZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU3RhcnR1cFRpbWluZ0V4YW1wbGUoKTogUmVhY3QuTm9kZSB7XG4gIC8vIFJlYWN0IFN0YXJ0dXAgVGltaW5nIEFQSSB0ZXN0aW5nXG4gIGNvbnN0IFtzdGFydFVwVGltaW5nLCBzZXRTdGFydFVwVGltaW5nXSA9XG4gICAgdXNlU3RhdGU8P1JlYWN0TmF0aXZlU3RhcnR1cFRpbWluZz4obnVsbCk7XG4gIGNvbnN0IG9uR2V0U3RhcnR1cFRpbWluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBwZXJmb3JtYW5jZS5yZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmcgaXMgbm90IGluY2x1ZGVkIGluIGJvbS5qcyB5ZXQuXG4gICAgLy8gT25jZSB3ZSByZWxlYXNlIHRoZSBjaGFuZ2UgaW4gZmxvdyB0aGlzIGNhbiBiZSByZW1vdmVkLlxuICAgIHNldFN0YXJ0VXBUaW1pbmcocGVyZm9ybWFuY2Uucm5TdGFydHVwVGltaW5nKTtcbiAgfSwgW10pO1xuICByZXR1cm4gKFxuICAgIDxSTlRlc3RlclBhZ2Ugbm9TY3JvbGw9e3RydWV9IHRpdGxlPVwicGVyZm9ybWFuY2UucmVhY3ROYXRpdmVTdGFydHVwVGltaW5nXCI+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvblByZXNzPXtvbkdldFN0YXJ0dXBUaW1pbmd9XG4gICAgICAgICAgdGl0bGU9XCJDbGljayB0byB1cGRhdGUgUmVhY3Qgc3RhcnR1cCB0aW1pbmdcIlxuICAgICAgICAvPlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dD57YHN0YXJ0VGltZTogJHtTdHJpbmcoc3RhcnRVcFRpbWluZz8uc3RhcnRUaW1lKX0gbXNgfTwvVGV4dD5cbiAgICAgICAgICA8VGV4dD57YGluaXRpYWxpemVSdW50aW1lU3RhcnQ6ICR7U3RyaW5nKFxuICAgICAgICAgICAgc3RhcnRVcFRpbWluZz8uaW5pdGlhbGl6ZVJ1bnRpbWVTdGFydCxcbiAgICAgICAgICApfSBtc2B9PC9UZXh0PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge2BleGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydDogJHtTdHJpbmcoXG4gICAgICAgICAgICAgIHN0YXJ0VXBUaW1pbmc/LmV4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludFN0YXJ0LFxuICAgICAgICAgICAgKX0gbXNgfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD57YGV4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludEVuZDogJHtTdHJpbmcoXG4gICAgICAgICAgICBzdGFydFVwVGltaW5nPy5leGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRFbmQsXG4gICAgICAgICAgKX0gbXNgfTwvVGV4dD5cbiAgICAgICAgICA8VGV4dD57YGluaXRpYWxpemVSdW50aW1lRW5kOiAke1N0cmluZyhcbiAgICAgICAgICAgIHN0YXJ0VXBUaW1pbmc/LmluaXRpYWxpemVSdW50aW1lRW5kLFxuICAgICAgICAgICl9IG1zYH08L1RleHQ+XG4gICAgICAgICAgPFRleHQ+e2BlbmRUaW1lOiAke1N0cmluZyhzdGFydFVwVGltaW5nPy5lbmRUaW1lKX0gbXNgfTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIDwvUk5UZXN0ZXJQYWdlPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIHBhZGRpbmc6IDEwLFxuICB9LFxufSk7XG5cbmV4cG9ydHMudGl0bGUgPSAnUGVyZm9ybWFuY2UgQVBJIEV4YW1wbGVzJztcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnQmFzaWMnO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdTaG93cyB0aGUgcGVyZm9ybWFuY2UgQVBJIHByb3ZpZGVkIGluIFJlYWN0IE5hdGl2ZSc7XG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdwZXJmb3JtYW5jZS5tZW1vcnknLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIE1lbW9yeUV4YW1wbGU+IHtcbiAgICAgIHJldHVybiA8TWVtb3J5RXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdwZXJmb3JtYW5jZS5yZWFjdE5hdGl2ZVN0YXJ0dXBUaW1pbmcnLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCk6IFJlYWN0LkVsZW1lbnQ8dHlwZW9mIFN0YXJ0dXBUaW1pbmdFeGFtcGxlPiB7XG4gICAgICByZXR1cm4gPFN0YXJ0dXBUaW1pbmdFeGFtcGxlIC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCBDb21wYXRpYmlsaXR5QW5pbWF0ZWRQb2ludGVyTW92ZSBmcm9tICcuL0NvbXBhdGliaWxpdHkvQ29tcGF0aWJpbGl0eUFuaW1hdGVkUG9pbnRlck1vdmUnO1xuaW1wb3J0IENvbXBhdGliaWxpdHlOYXRpdmVHZXN0dXJlSGFuZGxpbmcgZnJvbSAnLi9Db21wYXRpYmlsaXR5L0NvbXBhdGliaWxpdHlOYXRpdmVHZXN0dXJlSGFuZGxpbmcnO1xuaW1wb3J0IE1hbnlQb2ludGVyc1Byb3BlcnRpZXNFeGFtcGxlIGZyb20gJy4vQ29tcGF0aWJpbGl0eS9NYW55UG9pbnRlcnNQcm9wZXJ0aWVzRXhhbXBsZSc7XG5pbXBvcnQgUG9pbnRlckV2ZW50QWNjZXNzaWJpbGl0eSBmcm9tICcuL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50QWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgUG9pbnRlckV2ZW50QXR0cmlidXRlc0hvdmVyYWJsZVBvaW50ZXJzIGZyb20gJy4vVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRBdHRyaWJ1dGVzSG92ZXJhYmxlUG9pbnRlcnMnO1xuaW1wb3J0IFBvaW50ZXJFdmVudEF0dHJpYnV0ZXNOb0hvdmVyUG9pbnRlcnMgZnJvbSAnLi9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudEF0dHJpYnV0ZXNOb0hvdmVyUG9pbnRlcnMnO1xuaW1wb3J0IFBvaW50ZXJFdmVudENhcHR1cmVNb3VzZSBmcm9tICcuL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50Q2FwdHVyZU1vdXNlJztcbmltcG9ydCBQb2ludGVyRXZlbnRDbGlja1RvdWNoIGZyb20gJy4vVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRDbGlja1RvdWNoJztcbmltcG9ydCBQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5IGZyb20gJy4vVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5JztcbmltcG9ydCBQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5UG9pbnRlckV2ZW50cyBmcm9tICcuL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50Q2xpY2tUb3VjaEhpZXJhcmNoeVBvaW50ZXJFdmVudHMnO1xuaW1wb3J0IFBvaW50ZXJFdmVudExheW91dENoYW5nZVNob3VsZEZpcmVQb2ludGVyT3ZlciBmcm9tICcuL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50TGF5b3V0Q2hhbmdlU2hvdWxkRmlyZVBvaW50ZXJPdmVyJztcbmltcG9ydCBQb2ludGVyRXZlbnRQb2ludGVyQ2FuY2VsVG91Y2ggZnJvbSAnLi9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudFBvaW50ZXJDYW5jZWxUb3VjaCc7XG5pbXBvcnQgUG9pbnRlckV2ZW50UG9pbnRlck1vdmUgZnJvbSAnLi9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudFBvaW50ZXJNb3ZlJztcbmltcG9ydCBQb2ludGVyRXZlbnRQb2ludGVyTW92ZUFjcm9zcyBmcm9tICcuL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50UG9pbnRlck1vdmVBY3Jvc3MnO1xuaW1wb3J0IFBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlQmV0d2VlbiBmcm9tICcuL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50UG9pbnRlck1vdmVCZXR3ZWVuJztcbmltcG9ydCBQb2ludGVyRXZlbnRQb2ludGVyTW92ZUV2ZW50T3JkZXIgZnJvbSAnLi9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudFBvaW50ZXJNb3ZlRXZlbnRPcmRlcic7XG5pbXBvcnQgUG9pbnRlckV2ZW50UG9pbnRlck1vdmVPbkNob3JkZWRNb3VzZUJ1dHRvbiBmcm9tICcuL1czQ1BvaW50ZXJFdmVudFBsYXRmb3JtVGVzdHMvUG9pbnRlckV2ZW50UG9pbnRlck1vdmVPbkNob3JkZWRNb3VzZUJ1dHRvbic7XG5pbXBvcnQgUG9pbnRlckV2ZW50UG9pbnRlck92ZXJPdXQgZnJvbSAnLi9XM0NQb2ludGVyRXZlbnRQbGF0Zm9ybVRlc3RzL1BvaW50ZXJFdmVudFBvaW50ZXJPdmVyT3V0JztcbmltcG9ydCBQb2ludGVyRXZlbnRQcmltYXJ5VG91Y2hQb2ludGVyIGZyb20gJy4vVzNDUG9pbnRlckV2ZW50UGxhdGZvcm1UZXN0cy9Qb2ludGVyRXZlbnRQcmltYXJ5VG91Y2hQb2ludGVyJztcbmltcG9ydCBFdmVudGZ1bFZpZXcgZnJvbSAnLi9XM0NQb2ludGVyRXZlbnRzRXZlbnRmdWxWaWV3JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9uLCBTY3JvbGxWaWV3LCBTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5mdW5jdGlvbiBBYnNvbHV0ZUNoaWxkRXhhbXBsZSh7bG9nfToge2xvZzogc3RyaW5nID0+IHZvaWR9KSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5hYnNvbHV0ZUV4YW1wbGVDb250YWluZXJ9PlxuICAgICAgPEV2ZW50ZnVsVmlld1xuICAgICAgICBvblVwXG4gICAgICAgIG9uRG93blxuICAgICAgICBvbkVudGVyXG4gICAgICAgIG9uTGVhdmVcbiAgICAgICAgbG9nPXtsb2d9XG4gICAgICAgIHN0eWxlPXtTdHlsZVNoZWV0LmNvbXBvc2Uoc3R5bGVzLmV2ZW50ZnVsVmlldywgc3R5bGVzLnBhcmVudCl9XG4gICAgICAgIG5hbWU9XCJwYXJlbnRcIj5cbiAgICAgICAgPEV2ZW50ZnVsVmlld1xuICAgICAgICAgIG9uVXBcbiAgICAgICAgICBvbkRvd25cbiAgICAgICAgICBvbkVudGVyXG4gICAgICAgICAgb25MZWF2ZVxuICAgICAgICAgIGxvZz17bG9nfVxuICAgICAgICAgIGVtaXRCeURlZmF1bHRcbiAgICAgICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKHN0eWxlcy5ldmVudGZ1bFZpZXcsIHN0eWxlcy5hYnNvbHV0ZUNoaWxkKX1cbiAgICAgICAgICBuYW1lPVwiY2hpbGRBXCJcbiAgICAgICAgLz5cbiAgICAgIDwvRXZlbnRmdWxWaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gUmVsYXRpdmVDaGlsZEV4YW1wbGUoe2xvZ306IHtsb2c6IHN0cmluZyA9PiB2b2lkfSkge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXZlbnRmdWxWaWV3XG4gICAgICAgIGxvZz17bG9nfVxuICAgICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKHN0eWxlcy5ldmVudGZ1bFZpZXcsIHN0eWxlcy5wYXJlbnQpfVxuICAgICAgICBvblVwXG4gICAgICAgIG9uT3ZlclxuICAgICAgICBvbk91dFxuICAgICAgICBvbkRvd25cbiAgICAgICAgb25FbnRlclxuICAgICAgICBvbkxlYXZlXG4gICAgICAgIG5hbWU9XCJwYXJlbnRcIj5cbiAgICAgICAgPEV2ZW50ZnVsVmlld1xuICAgICAgICAgIGxvZz17bG9nfVxuICAgICAgICAgIG9uVXBcbiAgICAgICAgICBvbk92ZXJcbiAgICAgICAgICBvbk91dFxuICAgICAgICAgIG9uRG93blxuICAgICAgICAgIG9uRW50ZXJcbiAgICAgICAgICBvbkxlYXZlXG4gICAgICAgICAgc3R5bGU9e1N0eWxlU2hlZXQuY29tcG9zZShzdHlsZXMuZXZlbnRmdWxWaWV3LCBzdHlsZXMucmVsYXRpdmVDaGlsZCl9XG4gICAgICAgICAgbmFtZT1cImNoaWxkQVwiPlxuICAgICAgICAgIDxFdmVudGZ1bFZpZXdcbiAgICAgICAgICAgIGxvZz17bG9nfVxuICAgICAgICAgICAgb25VcFxuICAgICAgICAgICAgb25PdmVyXG4gICAgICAgICAgICBvbk91dFxuICAgICAgICAgICAgb25Eb3duXG4gICAgICAgICAgICBvbkVudGVyXG4gICAgICAgICAgICBvbkxlYXZlXG4gICAgICAgICAgICBzdHlsZT17U3R5bGVTaGVldC5jb21wb3NlKFxuICAgICAgICAgICAgICBzdHlsZXMuZXZlbnRmdWxWaWV3LFxuICAgICAgICAgICAgICBzdHlsZXMucmVsYXRpdmVDaGlsZCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBuYW1lPVwiY2hpbGRCXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0V2ZW50ZnVsVmlldz5cbiAgICAgIDwvRXZlbnRmdWxWaWV3PlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRTY2FmZm9sZGluZyh7XG4gIEV4YW1wbGUsXG59OiB7XG4gIEV4YW1wbGU6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PHtsb2c6IHN0cmluZyA9PiB2b2lkfT4sXG59KSB7XG4gIGNvbnN0IFtldmVudHNMb2csIHNldEV2ZW50c0xvZ10gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGNsZWFyID0gKCkgPT4gc2V0RXZlbnRzTG9nKCcnKTtcbiAgY29uc3QgbG9nID0gKGV2ZW50U3RyOiBzdHJpbmcpID0+IHtcbiAgICBzZXRFdmVudHNMb2coY3VycmVudEV2ZW50c0xvZyA9PiBgJHtldmVudFN0cn1cXG4ke2N1cnJlbnRFdmVudHNMb2d9YCk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPFNjcm9sbFZpZXc+XG4gICAgICA8RXhhbXBsZSBsb2c9e2xvZ30gLz5cbiAgICAgIDxWaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgPFRleHQ+RXZlbnRzIExvZzwvVGV4dD5cbiAgICAgICAgICA8QnV0dG9uIG9uUHJlc3M9e2NsZWFyfSB0aXRsZT1cIkNsZWFyXCIgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VGV4dD57ZXZlbnRzTG9nfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICA8L1Njcm9sbFZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYWJzb2x1dGVFeGFtcGxlQ29udGFpbmVyOiB7XG4gICAgaGVpZ2h0OiAyMDAsXG4gIH0sXG4gIGFic29sdXRlQ2hpbGQ6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDEwMCxcbiAgICBoZWlnaHQ6IDUwLFxuICAgIHdpZHRoOiAzMDAsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdyZWQnLFxuICB9LFxuICBldmVudGZ1bFZpZXc6IHtcbiAgICBwYWRkaW5nQm90dG9tOiA0MCxcbiAgfSxcbiAgcmVsYXRpdmVDaGlsZDoge2JvcmRlcldpZHRoOiAxLCBtYXJnaW46IDEwfSxcbiAgcGFyZW50OiB7XG4gICAgbWFyZ2luOiAyMCxcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgfSxcbiAgcm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICdXM0MgUG9pbnRlckV2ZW50cyBleHBlcmltZW50JyxcbiAgY2F0ZWdvcnk6ICdFeHBlcmltZW50YWwnLFxuICBkZXNjcmlwdGlvbjogJ0RlbW9uc3RyYXRlIHBvaW50ZXIgZXZlbnRzJyxcbiAgc2hvd0luZGl2aWR1YWxFeGFtcGxlczogdHJ1ZSxcbiAgZXhhbXBsZXM6IFtcbiAgICB7XG4gICAgICBuYW1lOiAncG9pbnRlcmV2ZW50X2F0dHJpYnV0ZXNfaG92ZXJhYmxlX3BvaW50ZXJzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgcGh5c2ljYWwgZGV2aWNlICsgbW91c2UnLFxuICAgICAgdGl0bGU6ICdXUFQgMTogUG9pbnRlciBFdmVudHMgaG92ZXJhYmxlIHBvaW50ZXIgYXR0cmlidXRlcyB0ZXN0JyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIDxQb2ludGVyRXZlbnRBdHRyaWJ1dGVzSG92ZXJhYmxlUG9pbnRlcnMgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9hdHRyaWJ1dGVzX25vaG92ZXJfcG9pbnRlcnMnLFxuICAgICAgdGl0bGU6ICdXUFQgMjogUG9pbnRlciBFdmVudHMgbm8taG92ZXIgcG9pbnRlciBhdHRyaWJ1dGVzIHRlc3QnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudEF0dHJpYnV0ZXNOb0hvdmVyUG9pbnRlcnMgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9wb2ludGVybW92ZScsXG4gICAgICB0aXRsZTogJ1dQVCAzOiBQb2ludGVyTW92ZSB0ZXN0JyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIDxQb2ludGVyRXZlbnRQb2ludGVyTW92ZSAvPjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9pbnRlcmV2ZW50X3ByaW1hcnlfdG91Y2hfcG9pbnRlcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ1JlcXVpcmVzIG11bHRpLXRvdWNoIChkaWZmaWN1bHQgb24gZW11bGF0b3IpJyxcbiAgICAgIHRpdGxlOiAnV1BUIDQ6IFBvaW50ZXIgRXZlbnQgcHJpbWFyeSB0b3VjaCBwb2ludGVyIHRlc3QnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudFByaW1hcnlUb3VjaFBvaW50ZXIgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9wb2ludGVybW92ZV9vbl9jaG9yZGVkX21vdXNlX2J1dHRvbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ1JlcXVpcmVzIHBoeXNpY2FsIGRldmljZSArIG1vdXNlJyxcbiAgICAgIHRpdGxlOiAnV1BUIDU6IFBvaW50ZXJFdmVudHMgcG9pbnRlcm1vdmUgb24gYnV0dG9uIHN0YXRlIGNoYW5nZXMnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlT25DaG9yZGVkTW91c2VCdXR0b24gLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9wb2ludGVybW92ZV9hY3Jvc3MnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdXb3JrcyBiZXN0IHdpdGggYSBtb3VzZSwgY2FuIGJlIGRvbmUgd2l0aCB0b3VjaCBpZiB5b3Ugc3RhcnQgb3V0c2lkZSB0aGUgaW5kaWNhdGVkIGVsZW1lbnRzJyxcbiAgICAgIHRpdGxlOiAnV1BUIDY6IFBvaW50ZXJtb3ZlIGhhbmRsaW5nIGFjcm9zcyBlbGVtZW50cycsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiA8UG9pbnRlckV2ZW50UG9pbnRlck1vdmVBY3Jvc3MgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9wb2ludGVybW92ZV9ldmVudF9vcmRlcicsXG4gICAgICB0aXRsZTogJ1dQVCA3OiBQb2ludGVyRXZlbnQgLSBwb2ludGVybW92ZSBldmVudCBvcmRlcicsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiA8UG9pbnRlckV2ZW50UG9pbnRlck1vdmVFdmVudE9yZGVyIC8+O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwb2ludGVyZXZlbnRfcG9pbnRlcm1vdmVfYmV0d2VlbicsXG4gICAgICB0aXRsZTogJ1dQVCA4OiBQb2ludGVybW92ZSBoYW5kbGluZyBiZXR3ZWVuIGVsZW1lbnRzJyxcbiAgICAgIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIDxQb2ludGVyRXZlbnRQb2ludGVyTW92ZUJldHdlZW4gLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9wb2ludGVyb3Zlcl9vdXQnLFxuICAgICAgdGl0bGU6ICdXUFQgOTogUG9pbnRlck92ZXIvUG9pbnRlck91dCBoYW5kbGluZycsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiA8UG9pbnRlckV2ZW50UG9pbnRlck92ZXJPdXQgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9sYXlvdXRfY2hhbmdlX3Nob3VsZF9maXJlX3BvaW50ZXJvdmVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VycmVudGx5IGV4cGVjdGVkIHRvIGZhaWwnLFxuICAgICAgdGl0bGU6ICdXUFQgMTA6IExheW91dCBjaGFuZ2Ugc2hvdWxkIGZpcmUgcG9pbnRlcm92ZXInLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudExheW91dENoYW5nZVNob3VsZEZpcmVQb2ludGVyT3ZlciAvPjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9pbnRlcmV2ZW50X3BvaW50ZXJjYW5jZWxfdG91Y2gnLFxuICAgICAgdGl0bGU6ICdXUFQgMTE6IFBvaW50ZXIgRXZlbnRzIHBvaW50ZXJjYW5jZWwgVGVzdHMnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudFBvaW50ZXJDYW5jZWxUb3VjaCAvPjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9pbnRlcmV2ZW50X2NhYXB0dXJlX21vdXNlJyxcbiAgICAgIHRpdGxlOiAnV1BUIDEyOiBQb2ludGVyIEV2ZW50cyBjYXB0dXJlIHRlc3QnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudENhcHR1cmVNb3VzZSAvPjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9pbnRlcmV2ZW50X2NsaWNrX3RvdWNoJyxcbiAgICAgIHRpdGxlOiAnUG9pbnRlciBFdmVudHM6IGJhc2ljIGNsaWNrIHRlc3QnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudENsaWNrVG91Y2ggLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9jbGlja190b3VjaF9oaWVyYXJjaHknLFxuICAgICAgdGl0bGU6ICdQb2ludGVyIEV2ZW50czogaGllcmFyY2h5IGNsaWNrIHRlc3QnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudENsaWNrVG91Y2hIaWVyYXJjaHkgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvaW50ZXJldmVudF9jbGlja190b3VjaF9oaWVyYXJjaHlfcG9pbnRlckV2ZW50cycsXG4gICAgICB0aXRsZTogJ1BvaW50ZXIgRXZlbnRzOiBoaWVyYXJjaHkgY2xpY2sgdGVzdCB3aXRoIHBvaW50ZXJFdmVudHMnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudENsaWNrVG91Y2hIaWVyYXJjaHlQb2ludGVyRXZlbnRzIC8+O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwb2ludGVyZXZlbnRfY2xpY2tfdG91Y2hfYWNjZXNzaWJpbGl0eScsXG4gICAgICB0aXRsZTogJ1BvaW50ZXIgRXZlbnRzOiBhY2Nlc3NpYmlsaXR5IGNsaWNrIHRlc3RiZWQnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudEFjY2Vzc2liaWxpdHkgLz47XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlbGF0aXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ2hpbGRyZW4gbGFpZCBvdXQgdXNpbmcgcmVsYXRpdmUgcG9zaXRpb25pbmcnLFxuICAgICAgdGl0bGU6ICdSZWxhdGl2ZSBDaGlsZCcsXG4gICAgICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgICAgIHJldHVybiA8UG9pbnRlckV2ZW50U2NhZmZvbGRpbmcgRXhhbXBsZT17UmVsYXRpdmVDaGlsZEV4YW1wbGV9IC8+O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhYnNvbHV0ZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NoaWxkcmVuIGxhaWQgb3V0IHVzaW5nIGFic29sdXRlIHBvc2l0aW9uaW5nJyxcbiAgICAgIHRpdGxlOiAnQWJzb2x1dGUgQ2hpbGQnLFxuICAgICAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgICAgICByZXR1cm4gPFBvaW50ZXJFdmVudFNjYWZmb2xkaW5nIEV4YW1wbGU9e0Fic29sdXRlQ2hpbGRFeGFtcGxlfSAvPjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBDb21wYXRpYmlsaXR5QW5pbWF0ZWRQb2ludGVyTW92ZSxcbiAgICBDb21wYXRpYmlsaXR5TmF0aXZlR2VzdHVyZUhhbmRsaW5nLFxuICAgIE1hbnlQb2ludGVyc1Byb3BlcnRpZXNFeGFtcGxlLFxuICBdLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Uk5UZXN0ZXJNb2R1bGVFeGFtcGxlfSBmcm9tICcuLi8uLi8uLi90eXBlcy9STlRlc3RlclR5cGVzJztcblxuaW1wb3J0IFRvZ2dsZU5hdGl2ZURyaXZlciBmcm9tICcuLi8uLi9BbmltYXRlZC91dGlscy9Ub2dnbGVOYXRpdmVEcml2ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtBbmltYXRlZCwgU3R5bGVTaGVldCwgVGV4dH0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3QgV0lEVEggPSAyMDA7XG5jb25zdCBIRUlHSFQgPSAyNTA7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY29udGFpbmVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmxhY2snLFxuICAgIG1hcmdpblRvcDogMjAsXG4gICAgd2lkdGg6IFdJRFRILFxuICAgIGhlaWdodDogSEVJR0hULFxuICAgIGFsaWduU2VsZjogJ2NlbnRlcicsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IEhFSUdIVCAvIDIsXG4gIH0sXG4gIGFuaW1hdGluZ0JveDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgIHdpZHRoOiAxLFxuICAgIGhlaWdodDogMSxcbiAgfSxcbn0pO1xuXG5mdW5jdGlvbiBDb21wYXRpYmlsaXR5QW5pbWF0ZWRQb2ludGVyTW92ZSgpOiBSZWFjdC5Ob2RlIHtcbiAgY29uc3QgeENvb3JkID0gUmVhY3QudXNlUmVmKG5ldyBBbmltYXRlZC5WYWx1ZSgwKSkuY3VycmVudDtcbiAgY29uc3QgeUNvb3JkID0gUmVhY3QudXNlUmVmKG5ldyBBbmltYXRlZC5WYWx1ZSgwKSkuY3VycmVudDtcbiAgY29uc3QgW3VzZU5hdGl2ZURyaXZlciwgc2V0VXNlTmF0aXZlRHJpdmVyXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxUb2dnbGVOYXRpdmVEcml2ZXJcbiAgICAgICAgc3R5bGU9e3twYWRkaW5nSG9yaXpvbnRhbDogMzB9fVxuICAgICAgICB2YWx1ZT17dXNlTmF0aXZlRHJpdmVyfVxuICAgICAgICBvblZhbHVlQ2hhbmdlPXtzZXRVc2VOYXRpdmVEcml2ZXJ9XG4gICAgICAvPlxuICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgb25Qb2ludGVyTW92ZT17QW5pbWF0ZWQuZXZlbnQoXG4gICAgICAgICAgW3tuYXRpdmVFdmVudDoge29mZnNldFg6IHhDb29yZCwgb2Zmc2V0WTogeUNvb3JkfX1dLFxuICAgICAgICAgIHt1c2VOYXRpdmVEcml2ZXJ9LFxuICAgICAgICApfVxuICAgICAgICBwb2ludGVyRXZlbnRzPVwiYm94LW9ubHlcIlxuICAgICAgICBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGV4dH0+TW92ZSBwb2ludGVyIG92ZXIgbWU8L1RleHQ+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICBoZWlnaHQ6IDEsXG4gICAgICAgICAgICB0cmFuc2Zvcm06IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVg6IHhDb29yZC5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgV0lEVEhdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IChbMCwgV0lEVEggLyAyXTogbnVtYmVyW10pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlWTogeUNvb3JkLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCBIRUlHSFRdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IChbMCwgSEVJR0hUIC8gMl06IG51bWJlcltdKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNjYWxlWDogeENvb3JkLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCBXSURUSF0sXG4gICAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogKFswLCBXSURUSF06IG51bWJlcltdKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNjYWxlWTogeUNvb3JkLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCBIRUlHSFRdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IChbMCwgSEVJR0hUXTogbnVtYmVyW10pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAnY29tcGF0aWJpbGl0eV9hbmltYXRlZGV2ZW50X3BvaW50ZXJfbW92ZScsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdBbiBBbmltYXRlZEV2ZW50IGV4YW1wbGUgb24gb25Qb2ludGVyTW92ZS4gVGhlIGJsdWUgYm94IHNob3VsZCBzY2FsZSB0byBwb2ludGVyIGV2ZW50IG9mZnNldCB2YWx1ZXMgd2l0aGluIGJsYWNrIGJveCcsXG4gIHRpdGxlOiAnQW5pbWF0ZWRFdmVudCB3aXRoIHBvaW50ZXJtb3ZlJyxcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiA8Q29tcGF0aWJpbGl0eUFuaW1hdGVkUG9pbnRlck1vdmUgLz47XG4gIH0sXG59OiBSTlRlc3Rlck1vZHVsZUV4YW1wbGUpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtSTlRlc3Rlck1vZHVsZUV4YW1wbGV9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5pbXBvcnQgRXZlbnRmdWxWaWV3IGZyb20gJy4uL1czQ1BvaW50ZXJFdmVudHNFdmVudGZ1bFZpZXcnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JvbGxWaWV3LCBTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGJvcmRlcldpZHRoOiAxLFxuICB9LFxuICBldmVudGZ1bFZpZXc6IHtcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICB9LFxuICBsaWdoYmx1ZToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0Ymx1ZScsXG4gIH0sXG4gIGl0ZW06IHtcbiAgICBoZWlnaHQ6IDQwLFxuICB9LFxufSk7XG5cbmZ1bmN0aW9uIENvbXBhdGliaWxpdHlOYXRpdmVHZXN0dXJlSGFuZGxpbmcoKTogUmVhY3QuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPFNjcm9sbFZpZXc+XG4gICAgICAgIHtBcnJheSgxMDApXG4gICAgICAgICAgLmZpbGwoKVxuICAgICAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8RXZlbnRmdWxWaWV3XG4gICAgICAgICAgICAgICAgbG9nPXtjb25zb2xlLmxvZ31cbiAgICAgICAgICAgICAgICBvbkRvd25cbiAgICAgICAgICAgICAgICBvbkNhbmNlbFxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgbmFtZT17YCR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17W3N0eWxlcy5pdGVtLCBpbmRleCAlIDIgPT09IDAgPyBzdHlsZXMubGlnaGJsdWUgOiBudWxsXX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAnY29tcGF0aWJpbGl0eV9uYXRpdmVfZ2VzdHVyZScsXG4gIHRpdGxlOiAnTmF0aXZlIEdlc3R1cmUgSGFuZGxpbmcgRXhhbXBsZScsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdTY3JvbGwgdG8gdHJpZ2dlciBhIG5hdGl2ZSBnZXN0dXJlLiBWZXJpZnkgbm8gbmF0aXZlIGV2ZW50cyBhcmUgYmVpbmcgZmlyZWQgb25jZSBhIG5hdGl2ZSBnZXN0dXJlIHN0YXJ0cyB1bnRpbCBpdCBlbmRzLiBBIHBvaW50ZXIgY2FuY2VsIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYSBuYXRpdmUgZ2VzdHVyZSBzdGFydHMuJyxcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIHJldHVybiA8Q29tcGF0aWJpbGl0eU5hdGl2ZUdlc3R1cmVIYW5kbGluZyAvPjtcbiAgfSxcbn06IFJOVGVzdGVyTW9kdWxlRXhhbXBsZSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVmlldy9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCB0eXBlIHtQb2ludGVyRXZlbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEV2ZW50ZnVsVmlldyhwcm9wczoge3xcbiAgbmFtZTogc3RyaW5nLFxuICBlbWl0QnlEZWZhdWx0PzogYm9vbGVhbixcbiAgb25MZWF2ZT86IGJvb2xlYW4sXG4gIG9uTGVhdmVDYXB0dXJlPzogYm9vbGVhbixcbiAgb25FbnRlcj86IGJvb2xlYW4sXG4gIG9uRW50ZXJDYXB0dXJlPzogYm9vbGVhbixcbiAgb25Eb3duPzogYm9vbGVhbixcbiAgb25Eb3duQ2FwdHVyZT86IGJvb2xlYW4sXG4gIG9uVXA/OiBib29sZWFuLFxuICBvbk92ZXI/OiBib29sZWFuLFxuICBvbk92ZXJDYXB0dXJlPzogYm9vbGVhbixcbiAgb25PdXQ/OiBib29sZWFuLFxuICBvbk91dENhcHR1cmU/OiBib29sZWFuLFxuICBvblVwQ2FwdHVyZT86IGJvb2xlYW4sXG4gIG9uTW92ZT86IGJvb2xlYW4sXG4gIG9uTW92ZUNhcHR1cmU/OiBib29sZWFuLFxuICBvbkNhbmNlbD86IGJvb2xlYW4sXG4gIG9uQ2FuY2VsQ2FwdHVyZT86IGJvb2xlYW4sXG4gIGxvZzogc3RyaW5nID0+IHZvaWQsXG4gIC4uLlZpZXdQcm9wcyxcbnx9KTogUmVhY3QuTm9kZSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjw/UmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVmlldz4+KCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIFVzaW5nIHByaXZhdGUgcHJvcGVydHlcbiAgICBzZXRUYWcocmVmLmN1cnJlbnQ/Ll9uYXRpdmVUYWcpO1xuICB9LCBbcmVmXSk7XG5cbiAgY29uc3Qge1xuICAgIGxvZyxcbiAgICBuYW1lLFxuICAgIGNoaWxkcmVuLFxuICAgIGVtaXRCeURlZmF1bHQsXG4gICAgb25MZWF2ZSxcbiAgICBvbkxlYXZlQ2FwdHVyZSxcbiAgICBvbkVudGVyLFxuICAgIG9uRW50ZXJDYXB0dXJlLFxuICAgIG9uRG93bixcbiAgICBvbkRvd25DYXB0dXJlLFxuICAgIG9uVXAsXG4gICAgb25VcENhcHR1cmUsXG4gICAgb25Nb3ZlLFxuICAgIG9uTW92ZUNhcHR1cmUsXG4gICAgb25PdXQsXG4gICAgb25PdXRDYXB0dXJlLFxuICAgIG9uT3ZlcixcbiAgICBvbk92ZXJDYXB0dXJlLFxuICAgIG9uQ2FuY2VsLFxuICAgIG9uQ2FuY2VsQ2FwdHVyZSxcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbdGFnLCBzZXRUYWddID0gUmVhY3QudXNlU3RhdGU8P3N0cmluZz4oJycpO1xuXG4gIGNvbnN0IGV2ZW50TG9nID1cbiAgICAoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6ID8oZTogUG9pbnRlckV2ZW50KSA9PiB2b2lkKSA9PlxuICAgIChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIFVzaW5nIHByaXZhdGUgcHJvcGVydHlcbiAgICAgIGxvZyhgJHtuYW1lfSAtICR7ZXZlbnROYW1lfSAtIHRhcmdldDogJHtldmVudC50YXJnZXQuX25hdGl2ZVRhZ31gKTtcbiAgICAgIGhhbmRsZXI/LihldmVudCk7XG4gICAgfTtcblxuICBjb25zdCBsaXN0ZW5lcnMgPSB7XG4gICAgb25Qb2ludGVyVXA6IG9uVXAgPyBldmVudExvZygndXAnKSA6IG51bGwsXG4gICAgb25Qb2ludGVyVXBDYXB0dXJlOiBvblVwQ2FwdHVyZSA/IGV2ZW50TG9nKCd1cCBjYXB0dXJlJykgOiBudWxsLFxuICAgIG9uUG9pbnRlckRvd246IG9uRG93biA/IGV2ZW50TG9nKCdkb3duJykgOiBudWxsLFxuICAgIG9uUG9pbnRlckRvd25DYXB0dXJlOiBvbkRvd25DYXB0dXJlID8gZXZlbnRMb2coJ2Rvd24gY2FwdHVyZScpIDogbnVsbCxcbiAgICBvblBvaW50ZXJMZWF2ZTogb25MZWF2ZSA/IGV2ZW50TG9nKCdsZWF2ZScpIDogbnVsbCxcbiAgICBvblBvaW50ZXJMZWF2ZUNhcHR1cmU6IG9uTGVhdmVDYXB0dXJlID8gZXZlbnRMb2coJ2xlYXZlIGNhcHR1cmUnKSA6IG51bGwsXG4gICAgb25Qb2ludGVyRW50ZXI6IG9uRW50ZXIgPyBldmVudExvZygnZW50ZXInKSA6IG51bGwsXG4gICAgb25Qb2ludGVyRW50ZXJDYXB0dXJlOiBvbkVudGVyQ2FwdHVyZSA/IGV2ZW50TG9nKCdlbnRlciBjYXB0dXJlJykgOiBudWxsLFxuICAgIG9uUG9pbnRlck1vdmU6IG9uTW92ZSA/IGV2ZW50TG9nKCdtb3ZlJykgOiBudWxsLFxuICAgIG9uUG9pbnRlck1vdmVDYXB0dXJlOiBvbk1vdmVDYXB0dXJlID8gZXZlbnRMb2coJ21vdmUgY2FwdHVyZScpIDogbnVsbCxcbiAgICBvblBvaW50ZXJPdXQ6IG9uT3V0ID8gZXZlbnRMb2coJ291dCcpIDogbnVsbCxcbiAgICBvblBvaW50ZXJPdXRDYXB0dXJlOiBvbk91dENhcHR1cmUgPyBldmVudExvZygnb3V0IGNhcHR1cmUnKSA6IG51bGwsXG4gICAgb25Qb2ludGVyT3Zlcjogb25PdmVyID8gZXZlbnRMb2coJ292ZXInKSA6IG51bGwsXG4gICAgb25Qb2ludGVyT3ZlckNhcHR1cmU6IG9uT3ZlckNhcHR1cmUgPyBldmVudExvZygnb3ZlciBjYXB0dXJlJykgOiBudWxsLFxuICAgIG9uUG9pbnRlckNhbmNlbDogb25DYW5jZWwgPyBldmVudExvZygnY2FuY2VsJykgOiBudWxsLFxuICAgIG9uUG9pbnRlckNhbmNlbENhcHR1cmU6IG9uQ2FuY2VsQ2FwdHVyZSA/IGV2ZW50TG9nKCdjYW5jZWwgY2FwdHVyZScpIDogbnVsbCxcbiAgfTtcblxuICBjb25zdCBsaXN0ZW5pbmdUbyA9IE9iamVjdC5rZXlzKGxpc3RlbmVycylcbiAgICAuZmlsdGVyKGxpc3RlbmVyTmFtZSA9PiBsaXN0ZW5lcnNbbGlzdGVuZXJOYW1lXSAhPSBudWxsKVxuICAgIC5qb2luKCcsICcpO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgcmVmPXtyZWZ9IHsuLi5saXN0ZW5lcnN9IHsuLi5yZXN0UHJvcHN9PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yb3d9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7cHJvcHMubmFtZX0sIHt0YWd9LCB7bGlzdGVuaW5nVG99XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgcm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1JOVGVzdGVyTW9kdWxlRXhhbXBsZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5pbXBvcnQgdHlwZSB7UG9pbnRlckV2ZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdHlsZVNoZWV0LCBUZXh0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge2hlaWdodDogJzMwJScsIHdpZHRoOiAnMTAwJScsIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJ30sXG4gIHByb3BlcnRpZXM6IHt9LFxuICBwcm9wZXJ0eToge2JvcmRlcldpZHRoOiAxLCBtYXJnaW46IDEwfSxcbn0pO1xuXG5mdW5jdGlvbiBnZXRNb2RpZmllcnNUZXh0KGV2dDogUG9pbnRlckV2ZW50WyduYXRpdmVFdmVudCddKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kaWZpZXJzID0gW107XG4gIGlmIChldnQuY3RybEtleSA9PT0gdHJ1ZSkge1xuICAgIG1vZGlmaWVycy5wdXNoKCdDdHJsJyk7XG4gIH1cbiAgaWYgKGV2dC5zaGlmdEtleSA9PT0gdHJ1ZSkge1xuICAgIG1vZGlmaWVycy5wdXNoKCdTaGlmdCcpO1xuICB9XG4gIGlmIChldnQuYWx0S2V5ID09PSB0cnVlKSB7XG4gICAgbW9kaWZpZXJzLnB1c2goJ0FsdCcpO1xuICB9XG4gIGlmIChldnQubWV0YUtleSA9PT0gdHJ1ZSkge1xuICAgIG1vZGlmaWVycy5wdXNoKCdNZXRhJyk7XG4gIH1cblxuICBpZiAobW9kaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gbW9kaWZpZXJzLmpvaW4oJywgJyk7XG4gIH1cblxuICByZXR1cm4gJzxub25lPic7XG59XG5cbmZ1bmN0aW9uIE1hbnlQb2ludGVyc1Byb3BlcnRpZXNFeGFtcGxlKCk6IFJlYWN0Lk5vZGUge1xuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSBSZWFjdC51c2VTdGF0ZTx7fT4oe30pO1xuICBjb25zdCBvblBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICBjb25zdCBwb2ludGVySWQgPSBldmVudC5uYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgLy8gJEZsb3dGaXhNZVtpbnZhbGlkLWNvbXB1dGVkLXByb3BdXG4gICAgc2V0RGF0YSh7Li4uZGF0YSwgW3BvaW50ZXJJZF06IGV2ZW50Lm5hdGl2ZUV2ZW50fSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9IG9uUG9pbnRlck1vdmU9e29uUG9pbnRlck1vdmV9IC8+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnByb3BlcnRpZXN9PlxuICAgICAgICB7T2JqZWN0LmVudHJpZXMoZGF0YSkubWFwKFxuICAgICAgICAgIC8vJEZsb3dGaXhNZSBjYW4ndCBzdXBwbHkgZ2VuZXJpYyBmb3IgT2JqZWN0LmVudHJpZXNcbiAgICAgICAgICAoW2tleSwgZXZ0XTogW3N0cmluZywgUG9pbnRlckV2ZW50WyduYXRpdmVFdmVudCddXSkgPT4gKFxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5wcm9wZXJ0eX0ga2V5PXtrZXl9PlxuICAgICAgICAgICAgICA8VGV4dD5Qb2ludGVySUQ6IHtldnQucG9pbnRlcklkfTwvVGV4dD5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgT2Zmc2V0OiBbe2V2dC5vZmZzZXRYLnRvUHJlY2lzaW9uKDMpfSx7JyAnfVxuICAgICAgICAgICAgICAgIHtldnQub2Zmc2V0WS50b1ByZWNpc2lvbigzKX1dXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgQ29vcmRpbmF0ZXM6IFt7ZXZ0LmNsaWVudFgudG9QcmVjaXNpb24oMyl9LHsnICd9XG4gICAgICAgICAgICAgICAge2V2dC5jbGllbnRZLnRvUHJlY2lzaW9uKDMpfV1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICBTY3JlZW4gQ29vcmRpbmF0ZXM6IFt7ZXZ0LnNjcmVlblg/LnRvUHJlY2lzaW9uKDMpfSx7JyAnfVxuICAgICAgICAgICAgICAgIHtldnQuc2NyZWVuWT8udG9QcmVjaXNpb24oMyl9XVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDxUZXh0PkJ1dHRvbjoge2V2dC5idXR0b259PC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dD5QcmVzc3VyZToge2V2dC5wcmVzc3VyZX08L1RleHQ+XG4gICAgICAgICAgICAgIDxUZXh0Pk1vZGlmaWVyczoge2dldE1vZGlmaWVyc1RleHQoZXZ0KX08L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgKSxcbiAgICAgICAgKX1cbiAgICAgIDwvVmlldz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgbmFtZTogJ21hbnlfcG9pbnRlcnNfcHJvcGVydGllc19leGFtcGxlJyxcbiAgZGVzY3JpcHRpb246ICdEaXNwbGF5IG9mIHByb3BlcnRpZXMgZm9yIG11bHRpcGxlIHBvaW50ZXJzJyxcbiAgdGl0bGU6ICdEaXNwbGF5IFByb3BlcnRpZXMgb2YgbWFueSBwb2ludGVycycsXG4gIHJlbmRlcigpOiBSZWFjdC5Ob2RlIHtcbiAgICByZXR1cm4gPE1hbnlQb2ludGVyc1Byb3BlcnRpZXNFeGFtcGxlIC8+O1xuICB9LFxufTogUk5UZXN0ZXJNb2R1bGVFeGFtcGxlKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRPY2N1cnJlbmNlfSBmcm9tICcuL1BvaW50ZXJFdmVudFN1cHBvcnQnO1xuaW1wb3J0IHR5cGUge1BvaW50ZXJFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCB7RXZlbnRUcmFja2VyfSBmcm9tICcuL1BvaW50ZXJFdmVudFN1cHBvcnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtQcmVzc2FibGUsIFNjcm9sbFZpZXcsIFN0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IGV2ZW50c1RvVHJhY2sgPSBbJ29uQ2xpY2snXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50QWNjZXNzaWJpbGl0eShwcm9wczoge30pOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICBjb25zdCBbZXZlbnRzU2Vlbiwgc2V0RXZlbnRzU2Vlbl0gPSB1c2VTdGF0ZTxBcnJheTxFdmVudE9jY3VycmVuY2U+PihbXSk7XG5cbiAgY29uc3Qgb25BbnlFdmVudCA9IChvY2N1cnJlbmNlOiBFdmVudE9jY3VycmVuY2UsIGV2ZW50OiBQb2ludGVyRXZlbnQpID0+XG4gICAgc2V0RXZlbnRzU2VlbihldnMgPT4gZXZzLmNvbmNhdChbb2NjdXJyZW5jZV0pKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudG9wTGV2ZWx9PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jbGlja2FibGVDb250YWluZXJ9PlxuICAgICAgICA8RXZlbnRUcmFja2VyXG4gICAgICAgICAgaWQ9XCJwb2ludGVyLXBhcmVudFwiXG4gICAgICAgICAgZXZlbnRzVG9UcmFjaz17ZXZlbnRzVG9UcmFja31cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnRhcmdldFBhcmVudH1cbiAgICAgICAgICBvbkFueUV2ZW50PXtvbkFueUV2ZW50fVxuICAgICAgICAgIGZvY3VzYWJsZT17dHJ1ZX0+XG4gICAgICAgICAgPEV2ZW50VHJhY2tlclxuICAgICAgICAgICAgaWQ9XCJwb2ludGVyLWNoaWxkXCJcbiAgICAgICAgICAgIGV2ZW50c1RvVHJhY2s9e2V2ZW50c1RvVHJhY2t9XG4gICAgICAgICAgICBvbkFueUV2ZW50PXtvbkFueUV2ZW50fVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy50YXJnZXR9XG4gICAgICAgICAgICBmb2N1c2FibGU9e3RydWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9FdmVudFRyYWNrZXI+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgICAgc2V0RXZlbnRzU2VlbihldnMgPT5cbiAgICAgICAgICAgICAgZXZzLmNvbmNhdCh7ZXZlbnROYW1lOiAnb25DbGljaycsIGlkOiAncHJlc3NhYmxlLXBhcmVudCd9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudGFyZ2V0UGFyZW50fT5cbiAgICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgICAgZm9jdXNhYmxlPXt0cnVlfVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PlxuICAgICAgICAgICAgICAgIHNldEV2ZW50c1NlZW4oZXZzID0+XG4gICAgICAgICAgICAgICAgICBldnMuY29uY2F0KHtldmVudE5hbWU6ICdvbkNsaWNrJywgaWQ6ICdwcmVzc2FibGUtY2hpbGQnfSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRhcmdldFByZXNzYWJsZX0gLz5cbiAgICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8UHJlc3NhYmxlIG9uUHJlc3M9eygpID0+IHNldEV2ZW50c1NlZW4oW10pfT5cbiAgICAgICAgPFRleHQga2V5PXswfSBzdHlsZT17c3R5bGVzLnJlc2V0fT5cbiAgICAgICAgICBSZXNldCBldmVudHNcbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8U2Nyb2xsVmlldyBzdHlsZT17c3R5bGVzLmV2ZW50c0xvZ30+XG4gICAgICAgIHtldmVudHNTZWVuLm1hcCgob2NjdXJyZW5jZSwgaWkpID0+IChcbiAgICAgICAgICA8VGV4dCBrZXk9e2Ake2lpfS0ke29jY3VycmVuY2UuaWR9LSR7b2NjdXJyZW5jZS5ldmVudE5hbWV9YH0+XG4gICAgICAgICAgICB7b2NjdXJyZW5jZS5pZH0ge29jY3VycmVuY2UuZXZlbnROYW1lfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L1Njcm9sbFZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHRvcExldmVsOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICB9LFxuICB0YXJnZXRQYXJlbnQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiAxMjgsXG4gICAgd2lkdGg6IDEyOCxcbiAgfSxcbiAgZXZlbnRzTG9nOiB7XG4gICAgaGVpZ2h0OiAzMDAsXG4gIH0sXG4gIGNsaWNrYWJsZUNvbnRhaW5lcjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBnYXA6IDE2LFxuICB9LFxuICB0YXJnZXQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdibHVlJyxcbiAgICBoZWlnaHQ6IDY0LFxuICAgIHdpZHRoOiA2NCxcbiAgfSxcbiAgdGFyZ2V0UHJlc3NhYmxlOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAneWVsbG93JyxcbiAgICBoZWlnaHQ6IDY0LFxuICAgIHdpZHRoOiA2NCxcbiAgfSxcbiAgcmVzZXQ6IHtcbiAgICBtYXJnaW46IDEwLFxuICAgIGZvbnRTaXplOiAzMCxcbiAgICBib3JkZXJDb2xvcjogJ3JlZCcsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtVGVzdEhhcm5lc3N9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge1BvaW50ZXJFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG4vLyBUaGVzZSBwcm9wcyBhcmUgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIGJ1dCBhcmUgcHJlc2VudCBpbiB0aGUgV1BUIHNvIHdlIGtlZXAgdGhlbVxuLy8gYnV0IG1hcmtlZCBhcyBza2lwcGVkIHNvIHdlIGRvbid0IHByaW9yaXRpemUgdGhlbVxuY29uc3QgU0tJUFBFRF9QUk9QUyA9IFsnZnJvbUVsZW1lbnQnLCAndG9FbGVtZW50J107XG5cbi8vIENoZWNrIGZvciBjb25mb3JtYW5jZSB0byBQb2ludGVyRXZlbnQgaW50ZXJmYWNlXG4vLyBUQTogMS4xLCAxLjIsIDEuNiwgMS43LCAxLjgsIDEuOSwgMS4xMCwgMS4xMSwgMS4xMiwgMS4xM1xuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvNmMyNjM3MWVhMWMxNDRkZDYxMjg2NGEyNzhlODhiNmJhMmYzZDg4My9wb2ludGVyZXZlbnRzL3BvaW50ZXJldmVudF9zdXBwb3J0LmpzI0wxNVxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrX1BvaW50ZXJFdmVudChcbiAgaGFybmVzczogUGxhdGZvcm1UZXN0SGFybmVzcyxcbiAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gIHtcbiAgICBleHBlY3RlZFBvaW50ZXJUeXBlLFxuICAgIHRlc3ROYW1lUHJlZml4LFxuICB9OiB7ZXhwZWN0ZWRQb2ludGVyVHlwZT86IHN0cmluZywgdGVzdE5hbWVQcmVmaXg/OiBzdHJpbmd9LFxuKSB7XG4gIGNvbnN0IHtuYXRpdmVFdmVudH0gPSBldmVudDtcblxuICBpZiAodGVzdE5hbWVQcmVmaXggPT0gbnVsbCkge1xuICAgIHRlc3ROYW1lUHJlZml4ID0gJyc7XG4gIH1cblxuICAvLyBVc2UgZXhwZWN0ZWRQb2ludGVyVHlwZSBpZiBzZXQgb3RoZXJ3aXNlIGp1c3QgdXNlIHRoZSBpbmNvbWluZyBldmVudCBwb2ludGVyVHlwZSBpbiB0aGUgdGVzdCBuYW1lLlxuICB2YXIgcG9pbnRlclRlc3ROYW1lID1cbiAgICB0ZXN0TmFtZVByZWZpeCArXG4gICAgJyAnICtcbiAgICAoZXhwZWN0ZWRQb2ludGVyVHlwZSA9PSBudWxsXG4gICAgICA/IG5hdGl2ZUV2ZW50LnBvaW50ZXJUeXBlXG4gICAgICA6IGV4cGVjdGVkUG9pbnRlclR5cGUpICtcbiAgICAnICcgK1xuICAgIGV2ZW50VHlwZTtcblxuICBpZiAoZXhwZWN0ZWRQb2ludGVyVHlwZSAhPSBudWxsKSB7XG4gICAgaGFybmVzcy50ZXN0KCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgIG5hdGl2ZUV2ZW50LnBvaW50ZXJUeXBlLFxuICAgICAgICBleHBlY3RlZFBvaW50ZXJUeXBlLFxuICAgICAgICAncG9pbnRlclR5cGUgc2hvdWxkIGJlIHRoZSBvbmUgc3BlY2lmaWVkIGluIHRoZSB0ZXN0IHBhZ2UuJyxcbiAgICAgICk7XG4gICAgfSwgcG9pbnRlclRlc3ROYW1lICsgJyBldmVudCBwb2ludGVyVHlwZSBpcyBjb3JyZWN0LicpO1xuICB9XG5cbiAgLy8gVE9ETzogRW5zdXJlIGV2ZW50IGlzIGEgcG9pbnRlciBldmVudFxuXG4gIC8vIENoZWNrIGF0dHJpYnV0ZXMgZm9yIGNvbmZvcm1hbmNlIHRvIFdlYklETDpcbiAgLy8gKiBhdHRyaWJ1dGUgZXhpc3RzXG4gIC8vICogaGFzIHByb3BlciB0eXBlXG4gIC8vICogaWYgdGhlIGF0dHJpYnV0ZSBpcyBcInJlYWRvbmx5XCIsIGl0IGNhbm5vdCBiZSBjaGFuZ2VkXG4gIC8vIFRBOiAxLjEsIDEuMlxuICBjb25zdCBpZGxfdHlwZV9jaGVjayA9IHtcbiAgICBsb25nOiBmdW5jdGlvbiAodjogYW55KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIE1hdGgucm91bmQodikgPT09IHY7XG4gICAgfSxcbiAgICBmbG9hdDogZnVuY3Rpb24gKHY6IGFueSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJztcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gKHY6IGFueSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJztcbiAgICB9LFxuICAgIGJvb2xlYW46IGZ1bmN0aW9uICh2OiBhbnkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nO1xuICAgIH0sXG4gICAgb2JqZWN0OiBmdW5jdGlvbiAodjogYW55KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnO1xuICAgIH0sXG4gIH07XG5cbiAgW1xuICAgIFsncmVhZG9ubHknLCAnbG9uZycsICdwb2ludGVySWQnXSxcbiAgICBbJ3JlYWRvbmx5JywgJ2Zsb2F0JywgJ3dpZHRoJ10sXG4gICAgWydyZWFkb25seScsICdmbG9hdCcsICdoZWlnaHQnXSxcbiAgICBbJ3JlYWRvbmx5JywgJ2Zsb2F0JywgJ3ByZXNzdXJlJ10sXG4gICAgWydyZWFkb25seScsICdsb25nJywgJ3RpbHRYJ10sXG4gICAgWydyZWFkb25seScsICdsb25nJywgJ3RpbHRZJ10sXG4gICAgWydyZWFkb25seScsICdzdHJpbmcnLCAncG9pbnRlclR5cGUnXSxcbiAgICBbJ3JlYWRvbmx5JywgJ2Jvb2xlYW4nLCAnaXNQcmltYXJ5J10sXG4gICAgWydyZWFkb25seScsICdsb25nJywgJ2RldGFpbCcsIDBdLFxuICAgIFsncmVhZG9ubHknLCAnb2JqZWN0JywgJ2Zyb21FbGVtZW50JywgbnVsbF0sXG4gICAgWydyZWFkb25seScsICdvYmplY3QnLCAndG9FbGVtZW50JywgbnVsbF0sXG4gIF0uZm9yRWFjaChhdHRyID0+IHtcbiAgICAvLyBjb25zdCByZWFkb25seSA9IGF0dHJbMF07XG4gICAgY29uc3QgdHlwZSA9IGF0dHJbMV07XG4gICAgY29uc3QgbmFtZSA9IGF0dHJbMl07XG4gICAgY29uc3QgdmFsdWUgPSBhdHRyWzNdO1xuXG4gICAgY29uc3Qgc2tpcCA9IFNLSVBQRURfUFJPUFMuaW5jbHVkZXMobmFtZSk7XG5cbiAgICAvLyBleGlzdGVuY2UgY2hlY2tcbiAgICBoYXJuZXNzLnRlc3QoXG4gICAgICAoe2Fzc2VydF90cnVlfSkgPT4ge1xuICAgICAgICBhc3NlcnRfdHJ1ZShcbiAgICAgICAgICBuYW1lIGluIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hbWUgKyAnIGF0dHJpYnV0ZSBpbiAnICsgZXZlbnRUeXBlICsgJyBldmVudCcsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgcG9pbnRlclRlc3ROYW1lICsgJy4nICsgbmFtZSArICcgYXR0cmlidXRlIGV4aXN0cycsXG4gICAgICB7c2tpcH0sXG4gICAgKTtcblxuICAgIC8vIHJlYWRvbmx5IGNoZWNrXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gdHlwZSBjaGVja1xuICAgIGhhcm5lc3MudGVzdChcbiAgICAgICh7YXNzZXJ0X3RydWV9KSA9PiB7XG4gICAgICAgIGFzc2VydF90cnVlKFxuICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICBpZGxfdHlwZV9jaGVja1t0eXBlXShuYXRpdmVFdmVudFtuYW1lXSksXG4gICAgICAgICAgbmFtZSArICcgYXR0cmlidXRlIG9mIHR5cGUgJyArIHR5cGUsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgcG9pbnRlclRlc3ROYW1lICtcbiAgICAgICAgJy4nICtcbiAgICAgICAgbmFtZSArXG4gICAgICAgICcgSURMIHR5cGUgJyArXG4gICAgICAgIHR5cGUgK1xuICAgICAgICAnIChKUyB0eXBlIHdhcyAnICtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICB0eXBlb2YgbmF0aXZlRXZlbnRbbmFtZV0gK1xuICAgICAgICAnKScsXG4gICAgICB7c2tpcH0sXG4gICAgKTtcblxuICAgIC8vIHZhbHVlIGNoZWNrIGlmIGRlZmluZWRcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFybmVzcy50ZXN0KFxuICAgICAgICAoe2Fzc2VydF9lcXVhbHN9KSA9PiB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGFzc2VydF9lcXVhbHMobmF0aXZlRXZlbnRbbmFtZV0sIHZhbHVlLCBuYW1lICsgJyBhdHRyaWJ1dGUgdmFsdWUnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRlclRlc3ROYW1lICsgJy4nICsgbmFtZSArICcgdmFsdWUgaXMgJyArIFN0cmluZyh2YWx1ZSkgKyAnLicsXG4gICAgICAgIHtza2lwfSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDaGVjayB0aGUgcHJlc3N1cmUgdmFsdWVcbiAgLy8gVEE6IDEuNiwgMS43LCAxLjhcbiAgaGFybmVzcy50ZXN0KFxuICAgICh7YXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCwgYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbCwgYXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgIC8vIFRBOiAxLjZcbiAgICAgIGFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwoXG4gICAgICAgIG5hdGl2ZUV2ZW50LnByZXNzdXJlLFxuICAgICAgICAwLFxuICAgICAgICAncHJlc3N1cmUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAnLFxuICAgICAgKTtcbiAgICAgIGFzc2VydF9sZXNzX3RoYW5fZXF1YWwoXG4gICAgICAgIG5hdGl2ZUV2ZW50LnByZXNzdXJlLFxuICAgICAgICAxLFxuICAgICAgICAncHJlc3N1cmUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEnLFxuICAgICAgKTtcblxuICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbnMgPT09IDApIHtcbiAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICBuYXRpdmVFdmVudC5wcmVzc3VyZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgICdwcmVzc3VyZSBpcyAwIGZvciBtb3VzZSB3aXRoIG5vIGJ1dHRvbnMgcHJlc3NlZCcsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRBOiAxLjcsIDEuOFxuICAgICAgaWYgKG5hdGl2ZUV2ZW50LnBvaW50ZXJUeXBlID09PSAnbW91c2UnKSB7XG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b25zICE9PSAwKSB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LnByZXNzdXJlLFxuICAgICAgICAgICAgMC41LFxuICAgICAgICAgICAgJ3ByZXNzdXJlIGlzIDAuNSBmb3IgbW91c2Ugd2l0aCBhIGJ1dHRvbiBwcmVzc2VkJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwb2ludGVyVGVzdE5hbWUgKyAnLnByZXNzdXJlIHZhbHVlIGlzIHZhbGlkJyxcbiAgKTtcblxuICAvLyBDaGVjayBtb3VzZS1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIGlmIChuYXRpdmVFdmVudC5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJykge1xuICAgIC8vIFRBOiAxLjksIDEuMTAsIDEuMTNcbiAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzLCBhc3NlcnRfdHJ1ZX0pID0+IHtcbiAgICAgIGFzc2VydF9lcXVhbHMobmF0aXZlRXZlbnQud2lkdGgsIDEsICd3aWR0aCBvZiBtb3VzZSBzaG91bGQgYmUgMScpO1xuICAgICAgYXNzZXJ0X2VxdWFscyhuYXRpdmVFdmVudC5oZWlnaHQsIDEsICdoZWlnaHQgb2YgbW91c2Ugc2hvdWxkIGJlIDEnKTtcbiAgICAgIGFzc2VydF9lcXVhbHMobmF0aXZlRXZlbnQudGlsdFgsIDAsIGV2ZW50VHlwZSArICcudGlsdFggaXMgMCBmb3IgbW91c2UnKTtcbiAgICAgIGFzc2VydF9lcXVhbHMobmF0aXZlRXZlbnQudGlsdFksIDAsIGV2ZW50VHlwZSArICcudGlsdFkgaXMgMCBmb3IgbW91c2UnKTtcbiAgICAgIGFzc2VydF90cnVlKFxuICAgICAgICBuYXRpdmVFdmVudC5pc1ByaW1hcnksXG4gICAgICAgIGV2ZW50VHlwZSArICcuaXNQcmltYXJ5IGlzIHRydWUgZm9yIG1vdXNlJyxcbiAgICAgICk7XG4gICAgfSwgcG9pbnRlclRlc3ROYW1lICsgJyBwcm9wZXJ0aWVzIGZvciBwb2ludGVyVHlwZSA9IG1vdXNlJyk7XG4gICAgLy8gQ2hlY2sgcHJvcGVydGllcyBmb3IgcG9pbnRlcnMgb3RoZXIgdGhhbiBtb3VzZVxuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGhvb2sgdG8gYWxsb3cgeW91IHRvIGVhc2lseSBsaXN0ZW4gdG8gbXVsdGlwbGVcbiAqIHZpZXcgZXZlbnRzIHdpdGggdGhlIHNhbWUgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVGVzdEV2ZW50SGFuZGxlcihcbiAgZXZlbnROYW1lczogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPixcbiAgaGFuZGxlcjogKGV2ZW50OiBhbnksIGV2ZW50TmFtZTogc3RyaW5nKSA9PiB2b2lkLFxuKTogVmlld1Byb3BzIHtcbiAgY29uc3QgZXZlbnRQcm9wczogYW55ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlckZhY3RvcnkgPSAoZXZlbnROYW1lOiBzdHJpbmcpID0+IChldmVudDogYW55KSA9PlxuICAgICAgaGFuZGxlcihldmVudCwgZXZlbnROYW1lKTtcbiAgICBjb25zdCBwcm9wczoge1tzdHJpbmddOiAoZXZlbnQ6IGFueSkgPT4gdm9pZH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBvZiBldmVudE5hbWVzKSB7XG4gICAgICBjb25zdCBldmVudFByb3BOYW1lID1cbiAgICAgICAgJ29uJyArIGV2ZW50TmFtZVswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnROYW1lLnNsaWNlKDEpO1xuICAgICAgcHJvcHNbZXZlbnRQcm9wTmFtZV0gPSBoYW5kbGVyRmFjdG9yeShldmVudE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9wcztcbiAgfSwgW2V2ZW50TmFtZXMsIGhhbmRsZXJdKTtcbiAgcmV0dXJuIGV2ZW50UHJvcHM7XG59XG5cbnR5cGUgRXZlbnROYW1lID0gJ29uQ2xpY2snIHwgJ29uUG9pbnRlckRvd24nIHwgJ29uUG9pbnRlclVwJztcblxuZXhwb3J0IHR5cGUgRXZlbnRPY2N1cnJlbmNlID0ge1xuICBpZDogc3RyaW5nLFxuICBldmVudE5hbWU6IEV2ZW50TmFtZSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBta0V2ZW50KGlkOiBzdHJpbmcsIGV2ZW50TmFtZTogRXZlbnROYW1lKTogRXZlbnRPY2N1cnJlbmNlIHtcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBldmVudE5hbWUsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEV2ZW50VHJhY2tlclByb3BzID0gJFJlYWRPbmx5PHtcbiAgZXZlbnRzUmVmPzoge2N1cnJlbnQ6IEFycmF5PEV2ZW50T2NjdXJyZW5jZT59LFxuICBvbkFueUV2ZW50PzogKEV2ZW50T2NjdXJyZW5jZSwgUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICBldmVudHNUb1RyYWNrOiBBcnJheTxFdmVudE5hbWU+LFxuICBpZDogc3RyaW5nLFxuICAuLi5WaWV3UHJvcHMsXG59PjtcblxudHlwZSBIYW5kbGVyRnVuY3Rpb24gPSBQb2ludGVyRXZlbnQgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50VHJhY2tlcihwcm9wczogRXZlbnRUcmFja2VyUHJvcHMpOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICBjb25zdCB7ZXZlbnRzVG9UcmFjaywgZXZlbnRzUmVmLCBpZCwgc3R5bGUsIG9uQW55RXZlbnQsIC4uLnZpZXdQcm9wc30gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlclByb3BzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlcnM6IHtcbiAgICAgIG9uQ2xpY2s/OiBIYW5kbGVyRnVuY3Rpb24sXG4gICAgICBvblBvaW50ZXJEb3duPzogSGFuZGxlckZ1bmN0aW9uLFxuICAgICAgb25Qb2ludGVyVXA/OiBIYW5kbGVyRnVuY3Rpb24sXG4gICAgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgZXZlbnROYW1lIG9mIGV2ZW50c1RvVHJhY2spIHtcbiAgICAgIGhhbmRsZXJzW2V2ZW50TmFtZV0gPSAoZTogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2UgPSB7aWQsIGV2ZW50TmFtZX07XG4gICAgICAgIGV2ZW50c1JlZj8uY3VycmVudC5wdXNoKG9jY3VycmVuY2UpO1xuICAgICAgICBvbkFueUV2ZW50Py4ob2NjdXJyZW5jZSwgZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlcnM7XG4gIH0sIFtldmVudHNUb1RyYWNrLCBpZCwgZXZlbnRzUmVmLCBvbkFueUV2ZW50XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyB7Li4uaGFuZGxlclByb3BzfSB7Li4udmlld1Byb3BzfSBzdHlsZT17cHJvcHMuc3R5bGV9IGlkPXtwcm9wcy5pZH0+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9WaWV3PlxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHN9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIExheW91dCxcbiAgUG9pbnRlckV2ZW50LFxufSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IFJOVGVzdGVyUGxhdGZvcm1UZXN0IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdCc7XG5pbXBvcnQge2NoZWNrX1BvaW50ZXJFdmVudCwgdXNlVGVzdEV2ZW50SGFuZGxlcn0gZnJvbSAnLi9Qb2ludGVyRXZlbnRTdXBwb3J0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3QgZXZlbnRMaXN0ID0gW1xuICAncG9pbnRlck92ZXInLFxuICAncG9pbnRlckVudGVyJyxcbiAgJ3BvaW50ZXJNb3ZlJyxcbiAgJ3BvaW50ZXJEb3duJyxcbiAgJ3BvaW50ZXJVcCcsXG4gICdwb2ludGVyT3V0JyxcbiAgJ3BvaW50ZXJMZWF2ZScsXG5dO1xuXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRBdHRyaWJ1dGVzSG92ZXJhYmxlUG9pbnRlcnNUZXN0Q2FzZShcbiAgcHJvcHM6IFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcyxcbikge1xuICBjb25zdCB7aGFybmVzc30gPSBwcm9wcztcblxuICBjb25zdCBkZXRlY3RlZF9wb2ludGVydHlwZXNSZWYgPSB1c2VSZWYoKHt9OiB7W3N0cmluZ106IGJvb2xlYW59KSk7XG4gIGNvbnN0IGRldGVjdGVkX2V2ZW50VHlwZXNSZWYgPSB1c2VSZWYoKHt9OiB7W3N0cmluZ106IGJvb2xlYW59KSk7XG4gIGNvbnN0IGV4cGVjdGVkUG9pbnRlcklkUmVmID0gdXNlUmVmKE5hTik7XG5cbiAgY29uc3QgW3NxdWFyZTFWaXNpYmxlLCBzZXRTcXVhcmUxVmlzaWJsZV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3NxdWFyZTJWaXNpYmxlLCBzZXRTcXVhcmUyVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvNmMyNjM3MWVhMWMxNDRkZDYxMjg2NGEyNzhlODhiNmJhMmYzZDg4My9wb2ludGVyZXZlbnRzL3BvaW50ZXJldmVudF9hdHRyaWJ1dGVzX2hvdmVyYWJsZV9wb2ludGVycy5odG1sI0wyOVxuICBjb25zdCBjaGVja1BvaW50ZXJFdmVudEF0dHJpYnV0ZXMgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBldmVudDogUG9pbnRlckV2ZW50LFxuICAgICAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gICAgICB0YXJnZXRMYXlvdXQ6IExheW91dCxcbiAgICAgIHRlc3ROYW1lUHJlZml4OiBzdHJpbmcsXG4gICAgICBleHBlY3RlZFBvaW50ZXJUeXBlOiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3RlZF9wb2ludGVydHlwZXMgPSBkZXRlY3RlZF9wb2ludGVydHlwZXNSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGRldGVjdGVkX2V2ZW50VHlwZXMgPSBkZXRlY3RlZF9ldmVudFR5cGVzUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBleHBlY3RlZFBvaW50ZXJJZCA9IGV4cGVjdGVkUG9pbnRlcklkUmVmLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChkZXRlY3RlZF9ldmVudFR5cGVzW2V2ZW50VHlwZV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwZWN0ZWRFdmVudFR5cGUgPVxuICAgICAgICBldmVudExpc3RbT2JqZWN0LmtleXMoZGV0ZWN0ZWRfZXZlbnRUeXBlcykubGVuZ3RoXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgZGV0ZWN0ZWRfZXZlbnRUeXBlc1tldmVudFR5cGVdID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBvaW50ZXJUZXN0TmFtZSA9XG4gICAgICAgIHRlc3ROYW1lUHJlZml4ICsgJyAnICsgZXhwZWN0ZWRQb2ludGVyVHlwZSArICcgJyArIGV4cGVjdGVkRXZlbnRUeXBlO1xuXG4gICAgICBkZXRlY3RlZF9wb2ludGVydHlwZXNbZXZlbnQubmF0aXZlRXZlbnQucG9pbnRlclR5cGVdID0gdHJ1ZTtcbiAgICAgIGhhcm5lc3MudGVzdChcbiAgICAgICAgKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAgICBleHBlY3RlZEV2ZW50VHlwZSxcbiAgICAgICAgICAgICdFdmVudC50eXBlIHNob3VsZCBiZSAnICsgZXhwZWN0ZWRFdmVudFR5cGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRlclRlc3ROYW1lICsgXCIncyB0eXBlIHNob3VsZCBiZSBcIiArIGV4cGVjdGVkRXZlbnRUeXBlLFxuICAgICAgKTtcblxuICAgICAgLy8gVGVzdCBidXR0b24gYW5kIGJ1dHRvbnNcbiAgICAgIGlmIChldmVudFR5cGUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgaGFybmVzcy50ZXN0KCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50Lm5hdGl2ZUV2ZW50LmJ1dHRvbiwgMCwgJ0J1dHRvbiBhdHRyaWJ1dGUgaXMgMCcpO1xuICAgICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIGJ1dHRvbiBhdHRyaWJ1dGUgaXMgMCB3aGVuIGxlZnQgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQuXCIpO1xuICAgICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnQubmF0aXZlRXZlbnQuYnV0dG9ucywgMSwgJ0J1dHRvbnMgYXR0cmlidXRlIGlzIDEnKTtcbiAgICAgICAgfSwgcG9pbnRlclRlc3ROYW1lICsgXCIncyBidXR0b25zIGF0dHJpYnV0ZSBpcyAxIHdoZW4gbGVmdCBtb3VzZSBidXR0b24gaXMgcHJlc3NlZC5cIik7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ3BvaW50ZXJ1cCcpIHtcbiAgICAgICAgaGFybmVzcy50ZXN0KCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50Lm5hdGl2ZUV2ZW50LmJ1dHRvbiwgMCwgJ0J1dHRvbiBhdHRyaWJ1dGUgaXMgMCcpO1xuICAgICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIGJ1dHRvbiBhdHRyaWJ1dGUgaXMgMCB3aGVuIGxlZnQgbW91c2UgYnV0dG9uIGlzIGp1c3QgcmVsZWFzZWQuXCIpO1xuICAgICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnQubmF0aXZlRXZlbnQuYnV0dG9ucywgMCwgJ0J1dHRvbnMgYXR0cmlidXRlIGlzIDAnKTtcbiAgICAgICAgfSwgcG9pbnRlclRlc3ROYW1lICsgXCIncyBidXR0b25zIGF0dHJpYnV0ZSBpcyAwIHdoZW4gbGVmdCBtb3VzZSBidXR0b24gaXMganVzdCByZWxlYXNlZC5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnQubmF0aXZlRXZlbnQuYnV0dG9uLCAtMSwgJ0J1dHRvbiBhdHRyaWJ1dGUgaXMgLTEnKTtcbiAgICAgICAgfSwgcG9pbnRlclRlc3ROYW1lICsgXCIncyBidXR0b24gaXMgLTEgd2hlbiBtb3VzZSBidXR0b25zIGFyZSBpbiByZWxlYXNlZCBzdGF0ZS5cIik7XG4gICAgICAgIGhhcm5lc3MudGVzdCgoe2Fzc2VydF9lcXVhbHN9KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5uYXRpdmVFdmVudC5idXR0b25zLCAwLCAnQnV0dG9ucyBhdHRyaWJ1dGUgaXMgMCcpO1xuICAgICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIGJ1dHRvbnMgaXMgMCB3aGVuIG1vdXNlIGJ1dHRvbnMgYXJlIGluIHJlbGVhc2VkIHN0YXRlLlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGVmdCA9IHRhcmdldExheW91dC54O1xuICAgICAgY29uc3QgdG9wID0gdGFyZ2V0TGF5b3V0Lnk7XG4gICAgICBjb25zdCByaWdodCA9IHRhcmdldExheW91dC54ICsgdGFyZ2V0TGF5b3V0LndpZHRoO1xuICAgICAgY29uc3QgYm90dG9tID0gdGFyZ2V0TGF5b3V0LnkgKyB0YXJnZXRMYXlvdXQuaGVpZ2h0O1xuXG4gICAgICAvLyBUZXN0IGNsaWVudFggYW5kIGNsaWVudFlcbiAgICAgIGlmIChldmVudFR5cGUgIT09ICdwb2ludGVyb3V0JyAmJiBldmVudFR5cGUgIT09ICdwb2ludGVybGVhdmUnKSB7XG4gICAgICAgIGhhcm5lc3MudGVzdCgoe2Fzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwsIGFzc2VydF9sZXNzX3RoYW5fZXF1YWx9KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbChcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgJ2NsaWVudFggc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBsZWZ0IG9mIHRoZSBib3gnLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbChcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAnY2xpZW50WSBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRvcCBvZiB0aGUgYm94JyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGFzc2VydF9sZXNzX3RoYW5fZXF1YWwoXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5jbGllbnRYLFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAnY2xpZW50WCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0aGFuIHJpZ2h0IG9mIHRoZSBib3gnLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbChcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAnY2xpZW50WSBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0aGFuIGJvdHRvbSBvZiB0aGUgYm94JyxcbiAgICAgICAgICApO1xuICAgICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIENsaWVudFggYW5kIENsaWVudFkgYXR0cmlidXRlcyBhcmUgY29ycmVjdC5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfdHJ1ZX0pID0+IHtcbiAgICAgICAgICBhc3NlcnRfdHJ1ZShcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFggPCBsZWZ0IHx8XG4gICAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFggPj0gcmlnaHQgfHxcbiAgICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuY2xpZW50WSA8IHRvcCB8fFxuICAgICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5jbGllbnRZID49IGJvdHRvbSxcbiAgICAgICAgICAgICdDbGllbnRYL1kgc2hvdWxkIGJlIG91dCBvZiB0aGUgYm91bmRhcmllcyBvZiB0aGUgYm94JyxcbiAgICAgICAgICApO1xuICAgICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIENsaWVudFggYW5kIENsaWVudFkgYXR0cmlidXRlcyBhcmUgY29ycmVjdC5cIik7XG4gICAgICB9XG5cbiAgICAgIGNoZWNrX1BvaW50ZXJFdmVudChoYXJuZXNzLCBldmVudCwgZXZlbnRUeXBlLCB7XG4gICAgICAgIHRlc3ROYW1lUHJlZml4LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRlc3QgaXNQcmltYXJ5IHZhbHVlXG4gICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmlzUHJpbWFyeSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgICdpc1ByaW1hcnkgc2hvdWxkIGJlIHRydWUnLFxuICAgICAgICApO1xuICAgICAgfSwgcG9pbnRlclRlc3ROYW1lICsgJy5pc1ByaW1hcnkgYXR0cmlidXRlIGlzIGNvcnJlY3QuJyk7XG5cbiAgICAgIC8vIFRlc3QgcG9pbnRlcklkIHZhbHVlXG4gICAgICBpZiAoaXNOYU4oZXhwZWN0ZWRQb2ludGVySWQpKSB7XG4gICAgICAgIGV4cGVjdGVkUG9pbnRlcklkUmVmLmN1cnJlbnQgPSBldmVudC5uYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5wb2ludGVySWQsXG4gICAgICAgICAgICBleHBlY3RlZFBvaW50ZXJJZCxcbiAgICAgICAgICAgICdwb2ludGVySWQgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSBmb3IgdGhlIHNhbWUgYWN0aXZlIHBvaW50ZXInLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sIHBvaW50ZXJUZXN0TmFtZSArICcucG9pbnRlcklkIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBwcmV2aW91cyBwb2ludGVyIGV2ZW50cyBmb3IgdGhpcyBhY3RpdmUgcG9pbnRlci4nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYXJuZXNzXSxcbiAgKTtcblxuICBjb25zdCBzcXVhcmUxUmVmID1cbiAgICB1c2VSZWY8P1JlYWN0JEVsZW1lbnRSZWY8XG4gICAgICBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxcbiAgICAgICAgVmlld1Byb3BzLFxuICAgICAgICBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8Vmlld1Byb3BzPj4sXG4gICAgICA+LFxuICAgID4+KCk7XG4gIGNvbnN0IHNxdWFyZTFIYW5kbGVycyA9IHVzZVRlc3RFdmVudEhhbmRsZXIoZXZlbnRMaXN0LCAoZXZlbnQsIGV2ZW50VHlwZSkgPT4ge1xuICAgIGlmICghc3F1YXJlMVZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcXVhcmUxRWxlbSA9IHNxdWFyZTFSZWYuY3VycmVudDtcbiAgICBpZiAoc3F1YXJlMUVsZW0gIT0gbnVsbCkge1xuICAgICAgc3F1YXJlMUVsZW0ubWVhc3VyZSgoeCwgeSwgd2lkdGgsIGhlaWdodCwgcGFnZVgsIHBhZ2VZKSA9PiB7XG4gICAgICAgIGNoZWNrUG9pbnRlckV2ZW50QXR0cmlidXRlcyhcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAge3g6IHBhZ2VYLCB5OiBwYWdlWSwgd2lkdGgsIGhlaWdodH0sXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ21vdXNlJyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5rZXlzKGRldGVjdGVkX2V2ZW50VHlwZXNSZWYuY3VycmVudCkubGVuZ3RoID09PVxuICAgICAgICAgIGV2ZW50TGlzdC5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2V0U3F1YXJlMVZpc2libGUoZmFsc2UpO1xuICAgICAgICAgIGRldGVjdGVkX2V2ZW50VHlwZXNSZWYuY3VycmVudCA9ICh7fToge1tzdHJpbmddOiBib29sZWFufSk7XG4gICAgICAgICAgc2V0U3F1YXJlMlZpc2libGUodHJ1ZSk7XG4gICAgICAgICAgZXhwZWN0ZWRQb2ludGVySWRSZWYuY3VycmVudCA9IE5hTjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBzcXVhcmUyUmVmID1cbiAgICB1c2VSZWY8P1JlYWN0JEVsZW1lbnRSZWY8XG4gICAgICBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxcbiAgICAgICAgVmlld1Byb3BzLFxuICAgICAgICBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8Vmlld1Byb3BzPj4sXG4gICAgICA+LFxuICAgID4+KCk7XG4gIGNvbnN0IHNxdWFyZTJIYW5kbGVycyA9IHVzZVRlc3RFdmVudEhhbmRsZXIoZXZlbnRMaXN0LCAoZXZlbnQsIGV2ZW50VHlwZSkgPT4ge1xuICAgIGNvbnN0IHNxdWFyZTJFbGVtID0gc3F1YXJlMlJlZi5jdXJyZW50O1xuICAgIGlmIChzcXVhcmUyRWxlbSAhPSBudWxsKSB7XG4gICAgICBzcXVhcmUyRWxlbS5tZWFzdXJlKCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYWdlWCwgcGFnZVkpID0+IHtcbiAgICAgICAgY2hlY2tQb2ludGVyRXZlbnRBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICB7eDogcGFnZVgsIHk6IHBhZ2VZLCB3aWR0aCwgaGVpZ2h0fSxcbiAgICAgICAgICAnSW5uZXIgZnJhbWUgJyxcbiAgICAgICAgICAnbW91c2UnLFxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LmtleXMoZGV0ZWN0ZWRfZXZlbnRUeXBlc1JlZi5jdXJyZW50KS5sZW5ndGggPT09XG4gICAgICAgICAgZXZlbnRMaXN0Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRTcXVhcmUyVmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgLy8gVE9ETzogTWFyayB0ZXN0IGFzIGRvbmVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm9vdH0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNxdWFyZUNvbnRhaW5lcn0+XG4gICAgICAgIHtzcXVhcmUxVmlzaWJsZSAmJiAoXG4gICAgICAgICAgPFZpZXcgcmVmPXtzcXVhcmUxUmVmfSBzdHlsZT17c3R5bGVzLnNxdWFyZTF9IHsuLi5zcXVhcmUxSGFuZGxlcnN9IC8+XG4gICAgICAgICl9XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNxdWFyZUNvbnRhaW5lcn0+XG4gICAgICAgIHtzcXVhcmUyVmlzaWJsZSAmJiAoXG4gICAgICAgICAgPFZpZXcgcmVmPXtzcXVhcmUyUmVmfSBzdHlsZT17c3R5bGVzLnNxdWFyZTJ9IHsuLi5zcXVhcmUySGFuZGxlcnN9IC8+XG4gICAgICAgICl9XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvb3Q6IHtcbiAgICBoZWlnaHQ6IDE1MCxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgc3F1YXJlMToge1xuICAgIHdpZHRoOiA0MCxcbiAgICBoZWlnaHQ6IDQwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgfSxcbiAgc3F1YXJlMjoge1xuICAgIHdpZHRoOiA0MCxcbiAgICBoZWlnaHQ6IDQwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gIH0sXG4gIHNxdWFyZUNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e30+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50QXR0cmlidXRlc0hvdmVyYWJsZVBvaW50ZXJzKFxuICBwcm9wczogUHJvcHMsXG4pOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICByZXR1cm4gKFxuICAgIDxSTlRlc3RlclBsYXRmb3JtVGVzdFxuICAgICAgY29tcG9uZW50PXtQb2ludGVyRXZlbnRBdHRyaWJ1dGVzSG92ZXJhYmxlUG9pbnRlcnNUZXN0Q2FzZX1cbiAgICAgIGRlc2NyaXB0aW9uPVwiVGhpcyB0ZXN0IGNoZWNrcyB0aGUgcHJvcGVydGllcyBvZiBob3ZlcmFibGUgcG9pbnRlciBldmVudHMuIElmIHlvdSBhcmUgdXNpbmcgaG92ZXJhYmxlIHBlbiBkb24ndCBsZWF2ZSB0aGUgcmFuZ2Ugb2YgZGlnaXRpemVyIHdoaWxlIGRvaW5nIHRoZSBpbnN0cnVjdGlvbnMuXCJcbiAgICAgIGluc3RydWN0aW9ucz17W1xuICAgICAgICAnTW92ZSB5b3VyIHBvaW50ZXIgb3ZlciB0aGUgYmxhY2sgc3F1YXJlIGFuZCBjbGljayBvbiBpdC4nLFxuICAgICAgICAnVGhlbiBtb3ZlIGl0IG9mZiB0aGUgYmxhY2sgc3F1YXJlIHNvIHRoYXQgaXQgZGlzYXBwZWFycy4nLFxuICAgICAgICAnV2hlbiByZWQgc3F1YXJlIGFwcGVhcnMgbW92ZSB5b3VyIHBvaW50ZXIgb3ZlciB0aGUgcmVkIHNxdWFyZSBhbmQgY2xpY2sgb24gaXQuJyxcbiAgICAgICAgJ1RoZW4gbW92ZSBpdCBvZmYgdGhlIHJlZCBzcXVhcmUuJyxcbiAgICAgIF19XG4gICAgICB0aXRsZT1cIlBvaW50ZXIgRXZlbnRzIGhvdmVyYWJsZSBwb2ludGVyIGF0dHJpYnV0ZXMgdGVzdFwiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzfSBmcm9tICcuL1JOVGVzdGVyUGxhdGZvcm1UZXN0VHlwZXMnO1xuXG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3RJbnN0cnVjdGlvbnMgZnJvbSAnLi9STlRlc3RlclBsYXRmb3JtVGVzdEluc3RydWN0aW9ucyc7XG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRWaWV3IGZyb20gJy4vUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRWaWV3JztcbmltcG9ydCB1c2VQbGF0Zm9ybVRlc3RIYXJuZXNzIGZyb20gJy4vdXNlUGxhdGZvcm1UZXN0SGFybmVzcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e3xcbiAgdGl0bGU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgaW5zdHJ1Y3Rpb25zPzogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPixcbiAgY29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcz4sXG58fT47XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJOVGVzdGVyUGxhdGZvcm1UZXN0KHByb3BzOiBQcm9wcyk6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICB0aXRsZSxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpbnN0cnVjdGlvbnMsXG4gICAgY29tcG9uZW50OiBVbmRlclRlc3RDb21wb25lbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7aGFybmVzcywgbnVtUGVuZGluZywgcmVzZXQsIHJlc3VsdHMsIHRlc3RLZXl9ID1cbiAgICB1c2VQbGF0Zm9ybVRlc3RIYXJuZXNzKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50ZXN0Y2FzZUNvbnRhaW5lcn0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtbc3R5bGVzLnRleHRCbG9jaywgc3R5bGVzLnRpdGxlXX0+e3RpdGxlfTwvVGV4dD5cbiAgICAgICAge2Rlc2NyaXB0aW9uICE9PSAnJyA/IChcbiAgICAgICAgICA8VGV4dCBzdHlsZT17W3N0eWxlcy50ZXh0QmxvY2ssIHN0eWxlcy5kZXNjcmlwdGlvbl19PlxuICAgICAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxSTlRlc3RlclBsYXRmb3JtVGVzdEluc3RydWN0aW9uc1xuICAgICAgICAgIGluc3RydWN0aW9ucz17aW5zdHJ1Y3Rpb25zfVxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmluc3RydWN0aW9ucywgc3R5bGVzLmJsb2NrXX1cbiAgICAgICAgLz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMudGVzdENvbnRhaW5lciwgc3R5bGVzLmJsb2NrXX0+XG4gICAgICAgICAgPFVuZGVyVGVzdENvbXBvbmVudCBrZXk9e3Rlc3RLZXl9IGhhcm5lc3M9e2hhcm5lc3N9IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxSTlRlc3RlclBsYXRmb3JtVGVzdFJlc3VsdFZpZXdcbiAgICAgICAgbnVtUGVuZGluZz17bnVtUGVuZGluZ31cbiAgICAgICAgcmVzZXQ9e3Jlc2V0fVxuICAgICAgICByZXN1bHRzPXtyZXN1bHRzfVxuICAgICAgICBzdHlsZT17c3R5bGVzLnJlc3VsdHN9XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBibG9jazoge1xuICAgIG1hcmdpbkJvdHRvbTogOCxcbiAgfSxcbiAgZGVzY3JpcHRpb246IHtcbiAgICBmb250U2l6ZTogMTYsXG4gIH0sXG4gIGluc3RydWN0aW9uczoge1xuICAgIGZsZXhHcm93OiAwLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gIH0sXG4gIHRleHRCbG9jazoge1xuICAgIG1hcmdpbkJvdHRvbTogOCxcbiAgICBmbGV4R3JvdzogMCxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICB9LFxuICByZXN1bHRzOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgbGVmdDogMCxcbiAgICBib3R0b206IDAsXG4gICAgcmlnaHQ6IDAsXG4gIH0sXG4gIHJvb3Q6IHtcbiAgICBmbGV4OiAxLFxuICB9LFxuICB0ZXN0Y2FzZUNvbnRhaW5lcjoge1xuICAgIHBhZGRpbmc6IDgsXG4gIH0sXG4gIHRlc3RDb250YWluZXI6IHtcbiAgICBmbGV4R3JvdzogMCxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICB9LFxuICB0aXRsZToge1xuICAgIGZvbnRTaXplOiAzMixcbiAgICBmb250V2VpZ2h0OiAnNzAwJyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3U3R5bGVQcm9wfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVGV4dCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBpbnN0cnVjdGlvbnM/OiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICBzdHlsZT86ID9WaWV3U3R5bGVQcm9wLFxufH0+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUk5UZXN0ZXJQbGF0Zm9ybVRlc3RJbnN0cnVjdGlvbnMoe1xuICBpbnN0cnVjdGlvbnMsXG4gIHN0eWxlLFxufTogUHJvcHMpOiBSZWFjdC5NaXhlZEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKGluc3RydWN0aW9ucyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGV9PlxuICAgICAge2luc3RydWN0aW9ucy5tYXAoKGluc3RydWN0aW9uLCBpZHgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VGV4dCBrZXk9e2lkeH0gc3R5bGU9e3N0eWxlcy5pbnN0cnVjdGlvblRleHR9PlxuICAgICAgICAgICAge2lkeCArIDF9LiB7aW5zdHJ1Y3Rpb259XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApO1xuICAgICAgfSl9XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGluc3RydWN0aW9uVGV4dDoge1xuICAgIGZvbnRTaXplOiAxNixcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgUGxhdGZvcm1UZXN0UmVzdWx0LFxuICBQbGF0Zm9ybVRlc3RSZXN1bHRTdGF0dXMsXG59IGZyb20gJy4vUk5UZXN0ZXJQbGF0Zm9ybVRlc3RUeXBlcyc7XG5pbXBvcnQgdHlwZSB7UmVuZGVySXRlbVByb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0xpc3RzL1ZpcnR1YWxpemVkTGlzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIFRleHRTdHlsZSxcbiAgVmlld1N0eWxlUHJvcCxcbn0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9TdHlsZVNoZWV0L1N0eWxlU2hlZXQnO1xuXG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3RNaW5pbWl6ZWRSZXN1bHRWaWV3IGZyb20gJy4vUk5UZXN0ZXJQbGF0Zm9ybVRlc3RNaW5pbWl6ZWRSZXN1bHRWaWV3JztcbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdFJlc3VsdHNUZXh0IGZyb20gJy4vUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRzVGV4dCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBGbGF0TGlzdCxcbiAgS2V5Ym9hcmRBdm9pZGluZ1ZpZXcsXG4gIE1vZGFsLFxuICBQbGF0Zm9ybSxcbiAgU2FmZUFyZWFWaWV3LFxuICBTdHlsZVNoZWV0LFxuICBTd2l0Y2gsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgVmlldyxcbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3QgRElTUExBWV9TVEFUVVNfTUFQUElORzoge1tQbGF0Zm9ybVRlc3RSZXN1bHRTdGF0dXNdOiBzdHJpbmd9ID0ge1xuICBQQVNTOiAnUGFzcycsXG4gIEZBSUw6ICdGYWlsJyxcbiAgRVJST1I6ICdFcnJvcicsXG4gIFNLSVBQRUQ6ICdTa2lwcGVkJyxcbn07XG5cbnR5cGUgRmlsdGVyTW9kYWxQcm9wcyA9ICRSZWFkT25seTx7XG4gIGZpbHRlclRleHQ6IHN0cmluZyxcbiAgc2V0RmlsdGVyVGV4dDogKG5ld0ZpbHRlclRleHQ6IHN0cmluZykgPT4gdm9pZCxcbiAgZmlsdGVyRmFpbDogYm9vbGVhbixcbiAgc2V0RmlsdGVyRmFpbDogKG5ld0ZpbHRlckZhaWw6IGJvb2xlYW4pID0+IHZvaWQsXG59PjtcbmZ1bmN0aW9uIEZpbHRlck1vZGFsQnV0dG9uKHByb3BzOiBGaWx0ZXJNb2RhbFByb3BzKSB7XG4gIGNvbnN0IHtmaWx0ZXJUZXh0LCBzZXRGaWx0ZXJUZXh0LCBmaWx0ZXJGYWlsLCBzZXRGaWx0ZXJGYWlsfSA9IHByb3BzO1xuXG4gIGNvbnN0IFttb2RhbFZpc2libGUsIHNldE1vZGFsVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtwZW5kaW5nRmlsdGVyVGV4dCwgc2V0UGVuZGluZ0ZpbHRlclRleHRdID0gdXNlU3RhdGUoZmlsdGVyVGV4dCk7XG5cbiAgY29uc3Qgb25GaWx0ZXJCdXR0b25QcmVzcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRQZW5kaW5nRmlsdGVyVGV4dChmaWx0ZXJUZXh0KTtcbiAgICBzZXRNb2RhbFZpc2libGUodHJ1ZSk7XG4gIH0sIFtmaWx0ZXJUZXh0XSk7XG5cbiAgY29uc3Qgb25GaWx0ZXJTdWJtaXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RmlsdGVyVGV4dChwZW5kaW5nRmlsdGVyVGV4dCk7XG4gICAgc2V0TW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW3BlbmRpbmdGaWx0ZXJUZXh0LCBzZXRGaWx0ZXJUZXh0XSk7XG5cbiAgY29uc3Qgb25GaWx0ZXJDYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0TW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uRmlsdGVyRmFpbFN0YXR1cyA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgc2V0RmlsdGVyRmFpbCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0RmlsdGVyRmFpbF0sXG4gICk7XG5cbiAgY29uc3Qgb25QZW5kaW5nVGV4dENoYW5nZSA9IHVzZUNhbGxiYWNrKChuZXdUZXh0OiBzdHJpbmcpID0+IHtcbiAgICBzZXRQZW5kaW5nRmlsdGVyVGV4dChuZXdUZXh0KTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCdXR0b24gdGl0bGU9XCJGaWx0ZXJcIiBvblByZXNzPXtvbkZpbHRlckJ1dHRvblByZXNzfSAvPlxuICAgICAgPE1vZGFsXG4gICAgICAgIHZpc2libGU9e21vZGFsVmlzaWJsZX1cbiAgICAgICAgYW5pbWF0aW9uVHlwZT1cImZhZGVcIlxuICAgICAgICBwcmVzZW50YXRpb25TdHlsZT1cIm92ZXJGdWxsU2NyZWVuXCJcbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RydWV9PlxuICAgICAgICA8U2FmZUFyZWFWaWV3IHN0eWxlPXtzdHlsZXMuZmlsdGVyTW9kYWxSb290fT5cbiAgICAgICAgICA8S2V5Ym9hcmRBdm9pZGluZ1ZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZmlsdGVyTW9kYWxLZXlib2FyZEF2b2lkaW5nUm9vdH1cbiAgICAgICAgICAgIGJlaGF2aW9yPXtQbGF0Zm9ybS5PUyA9PT0gJ2lvcycgPyAncGFkZGluZycgOiAnaGVpZ2h0J30+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmZpbHRlck1vZGFsQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5maWx0ZXJNb2RhbENvbnRlbnRDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZmlsdGVyTW9kYWxQcm9tcHRDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5maWx0ZXJNb2RhbFByb21wdFRleHR9PlxuICAgICAgICAgICAgICAgICAgICBFbnRlciBhIHRlc3QgbmFtZSBmaWx0ZXJcbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgYXV0b0NhcGl0YWxpemU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIGF1dG9Db3JyZWN0PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZmlsdGVyTW9kYWxQZW5kaW5nVGV4dElucHV0fVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3BlbmRpbmdGaWx0ZXJUZXh0fVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXtvblBlbmRpbmdUZXh0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXtvbkZpbHRlclN1Ym1pdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuZmlsdGVyRmFpbH0+XG4gICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2ZpbHRlckZhaWwgPyAnRmlsdGVyIEFsbCBTdGF0dXMnIDogJ0ZpbHRlciBPbmx5IEZhaWxlZCd9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmaWx0ZXJGYWlsfVxuICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtvbkZpbHRlckZhaWxTdGF0dXN9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmZpbHRlck1vZGFsQWN0aW9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0aXRsZT1cIkNhbmNlbFwiIG9uUHJlc3M9e29uRmlsdGVyQ2FuY2VsfSAvPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdGl0bGU9XCJTdWJtaXRcIiBvblByZXNzPXtvbkZpbHRlclN1Ym1pdH0gLz5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvS2V5Ym9hcmRBdm9pZGluZ1ZpZXc+XG4gICAgICAgIDwvU2FmZUFyZWFWaWV3PlxuICAgICAgPC9Nb2RhbD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVGFibGVIZWFkZXIoKSB7XG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50YWJsZVJvd30+XG4gICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy50YWJsZUhlYWRlckNvbHVtbiwgc3R5bGVzLnRhYmxlUmVzdWx0Q29sdW1uXX0+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMudGFibGVIZWFkZXJ9PlJlc3VsdDwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtbc3R5bGVzLnRhYmxlSGVhZGVyQ29sdW1uLCBzdHlsZXMudGFibGVUZXN0TmFtZUNvbHVtbl19PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRhYmxlSGVhZGVyfT5UZXN0IE5hbWU8L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17W3N0eWxlcy50YWJsZUhlYWRlckNvbHVtbiwgc3R5bGVzLnRhYmxlTWVzc2FnZUNvbHVtbl19PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRhYmxlSGVhZGVyfT5NZXNzYWdlPC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxuY29uc3QgVGFibGVSb3cgPSBSZWFjdC5tZW1vKFxuICAoe3Rlc3RSZXN1bHR9OiB7dGVzdFJlc3VsdDogUGxhdGZvcm1UZXN0UmVzdWx0fSkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRhYmxlUm93fT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50YWJsZVJlc3VsdENvbHVtbn0+XG4gICAgICAgICAgPFRleHQgc3R5bGU9e1NUQVRVU19URVhUX1NUWUxFX01BUFBJTkdbdGVzdFJlc3VsdC5zdGF0dXNdfT5cbiAgICAgICAgICAgIHtESVNQTEFZX1NUQVRVU19NQVBQSU5HW3Rlc3RSZXN1bHQuc3RhdHVzXX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50YWJsZVRlc3ROYW1lQ29sdW1ufT5cbiAgICAgICAgICA8VGV4dD57dGVzdFJlc3VsdC5uYW1lfTwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRhYmxlTWVzc2FnZUNvbHVtbn0+XG4gICAgICAgICAge3Rlc3RSZXN1bHQuYXNzZXJ0aW9ucy5tYXAoKGFzc2VydGlvbiwgYXNzZXJ0aW9uSWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uLnBhc3NpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8VGV4dCBrZXk9e2Fzc2VydGlvbklkeH0+XG4gICAgICAgICAgICAgICAge2Fzc2VydGlvbi5uYW1lfToge2Fzc2VydGlvbi5kZXNjcmlwdGlvbn17JyAnfVxuICAgICAgICAgICAgICAgIHthc3NlcnRpb24uZmFpbHVyZU1lc3NhZ2V9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9LFxuKTtcblxuZnVuY3Rpb24gcmVuZGVyVGFibGVSb3coe2l0ZW19OiBSZW5kZXJJdGVtUHJvcHM8UGxhdGZvcm1UZXN0UmVzdWx0Pikge1xuICByZXR1cm4gPFRhYmxlUm93IHRlc3RSZXN1bHQ9e2l0ZW19IC8+O1xufVxuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt8XG4gIG51bVBlbmRpbmc6IG51bWJlcixcbiAgcmVzZXQ6ICgpID0+IHZvaWQsXG4gIHJlc3VsdHM6ICRSZWFkT25seUFycmF5PFBsYXRmb3JtVGVzdFJlc3VsdD4sXG4gIHN0eWxlPzogP1ZpZXdTdHlsZVByb3AsXG58fT47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSTlRlc3RlclBsYXRmb3JtVGVzdFJlc3VsdFZpZXcoXG4gIHByb3BzOiBQcm9wcyxcbik6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gIGNvbnN0IHtudW1QZW5kaW5nLCByZXNldCwgcmVzdWx0cywgc3R5bGV9ID0gcHJvcHM7XG5cbiAgY29uc3QgW2ZpbHRlclRleHQsIHNldEZpbHRlclRleHRdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbZmlsdGVyRmFpbFN0YXR1cywgc2V0RmlsdGVyRmFpbFN0YXR1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgZmlsdGVyZWRSZXN1bHRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzRmlsdGVyZWQgPSBmaWx0ZXJGYWlsU3RhdHVzXG4gICAgICA/IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQuc3RhdHVzID09PSAnRkFJTCcpXG4gICAgICA6IHJlc3VsdHM7XG5cbiAgICBpZiAoZmlsdGVyVGV4dCA9PT0gJycpIHtcbiAgICAgIHJldHVybiBzdGF0dXNGaWx0ZXJlZDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1c0ZpbHRlcmVkLmZpbHRlcihyZXN1bHQgPT5cbiAgICAgIHJlc3VsdC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKSxcbiAgICApO1xuICB9LCBbZmlsdGVyRmFpbFN0YXR1cywgZmlsdGVyVGV4dCwgcmVzdWx0c10pO1xuXG4gIGNvbnN0IHtudW1QYXNzLCBudW1GYWlsLCBudW1FcnJvciwgbnVtU2tpcHBlZH0gPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBmaWx0ZXJlZFJlc3VsdHMucmVkdWNlKFxuICAgICAgICAoYWNjLCByZXN1bHQpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5zdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgJ1BBU1MnOlxuICAgICAgICAgICAgICByZXR1cm4gey4uLmFjYywgbnVtUGFzczogYWNjLm51bVBhc3MgKyAxfTtcbiAgICAgICAgICAgIGNhc2UgJ0ZBSUwnOlxuICAgICAgICAgICAgICByZXR1cm4gey4uLmFjYywgbnVtRmFpbDogYWNjLm51bUZhaWwgKyAxfTtcbiAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzpcbiAgICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIG51bUVycm9yOiBhY2MubnVtRXJyb3IgKyAxfTtcbiAgICAgICAgICAgIGNhc2UgJ1NLSVBQRUQnOlxuICAgICAgICAgICAgICByZXR1cm4gey4uLmFjYywgbnVtU2tpcHBlZDogYWNjLm51bVNraXBwZWQgKyAxfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBudW1QYXNzOiAwLFxuICAgICAgICAgIG51bUZhaWw6IDAsXG4gICAgICAgICAgbnVtRXJyb3I6IDAsXG4gICAgICAgICAgbnVtU2tpcHBlZDogMCxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgW2ZpbHRlcmVkUmVzdWx0c10sXG4gICk7XG5cbiAgY29uc3QgW3Jlc3VsdHNFeHBhbmRlZCwgc2V0UmVzdWx0c0V4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRGaWx0ZXJGYWlsU3RhdHVzKGZhbHNlKTtcbiAgICBzZXRGaWx0ZXJUZXh0KCcnKTtcbiAgICByZXNldCgpO1xuICAgIHNldFJlc3VsdHNFeHBhbmRlZChmYWxzZSk7XG4gIH0sIFtyZXNldF0pO1xuXG4gIGNvbnN0IGhhbmRsZU1pbmltaXplZFByZXNzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFJlc3VsdHNFeHBhbmRlZCh0cnVlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZU1heGltaXplZFByZXNzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFJlc3VsdHNFeHBhbmRlZChmYWxzZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBmaWx0ZXJlZE5vdGljZSA9IGBGaWx0ZXJlZCR7ZmlsdGVyRmFpbFN0YXR1cyA/ICcgKEZhaWxlZCknIDogJyd9JHtcbiAgICBmaWx0ZXJUZXh0ICE9PSAnJyA/IGA6ICR7ZmlsdGVyVGV4dH1gIDogJydcbiAgfVxuICBgO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxSTlRlc3RlclBsYXRmb3JtVGVzdE1pbmltaXplZFJlc3VsdFZpZXdcbiAgICAgICAgbnVtRmFpbD17bnVtRmFpbH1cbiAgICAgICAgbnVtRXJyb3I9e251bUVycm9yfVxuICAgICAgICBudW1QYXNzPXtudW1QYXNzfVxuICAgICAgICBudW1QZW5kaW5nPXtudW1QZW5kaW5nfVxuICAgICAgICBudW1Ta2lwcGVkPXtudW1Ta2lwcGVkfVxuICAgICAgICBvblByZXNzPXtoYW5kbGVNaW5pbWl6ZWRQcmVzc31cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgLz5cbiAgICAgIDxNb2RhbFxuICAgICAgICBhbmltYXRpb25UeXBlPVwic2xpZGVcIlxuICAgICAgICBvblJlcXVlc3RDbG9zZT17aGFuZGxlTWF4aW1pemVkUHJlc3N9XG4gICAgICAgIHZpc2libGU9e3Jlc3VsdHNFeHBhbmRlZH0+XG4gICAgICAgIDxTYWZlQXJlYVZpZXdcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgfX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5yZXN1bHRzSGVhZGVyfT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudGl0bGVDb250YWluZXJ9PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnRpdGxlfT5SZXN1bHRzPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLmZpbHRlcmVkVGV4dH0+e2ZpbHRlcmVkTm90aWNlfTwvVGV4dD5cbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zdW1tYXJ5Q29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRzVGV4dFxuICAgICAgICAgICAgICAgICAgbnVtRXJyb3I9e251bUVycm9yfVxuICAgICAgICAgICAgICAgICAgbnVtRmFpbD17bnVtRmFpbH1cbiAgICAgICAgICAgICAgICAgIG51bVBhc3M9e251bVBhc3N9XG4gICAgICAgICAgICAgICAgICBudW1QZW5kaW5nPXtudW1QZW5kaW5nfVxuICAgICAgICAgICAgICAgICAgbnVtU2tpcHBlZD17bnVtU2tpcHBlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmFjdGlvbnNDb250YWluZXJ9PlxuICAgICAgICAgICAgICA8RmlsdGVyTW9kYWxCdXR0b25cbiAgICAgICAgICAgICAgICBmaWx0ZXJUZXh0PXtmaWx0ZXJUZXh0fVxuICAgICAgICAgICAgICAgIHNldEZpbHRlclRleHQ9e3NldEZpbHRlclRleHR9XG4gICAgICAgICAgICAgICAgZmlsdGVyRmFpbD17ZmlsdGVyRmFpbFN0YXR1c31cbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXJGYWlsPXtzZXRGaWx0ZXJGYWlsU3RhdHVzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmJ1dHRvblNwYWNlcn0gLz5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0aXRsZT1cIlJlc2V0XCIgb25QcmVzcz17aGFuZGxlUmVzZXR9IC8+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eVxuICAgICAgICAgICAgICBoaXRTbG9wPXt7Ym90dG9tOiAxMCwgbGVmdDogMTAsIHJpZ2h0OiAxMCwgdG9wOiAxMH19XG4gICAgICAgICAgICAgIG9uUHJlc3M9e2hhbmRsZU1heGltaXplZFByZXNzfVxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmNsb3NlQnV0dG9ufT5cbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5jbG9zZUJ1dHRvbkljb259PuKclTwvVGV4dD5cbiAgICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgICA8L1ZpZXc+XG5cbiAgICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRhYmxlfT5cbiAgICAgICAgICAgIDxUYWJsZUhlYWRlciAvPlxuICAgICAgICAgICAgPEZsYXRMaXN0IGRhdGE9e2ZpbHRlcmVkUmVzdWx0c30gcmVuZGVySXRlbT17cmVuZGVyVGFibGVSb3d9IC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1NhZmVBcmVhVmlldz5cbiAgICAgIDwvTW9kYWw+XG4gICAgPC8+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYWN0aW9uc0NvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICB9LFxuICBidXR0b25TcGFjZXI6IHtcbiAgICB3aWR0aDogOCxcbiAgfSxcbiAgY2xvc2VCdXR0b246IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDE2LFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0Z3JheScsXG4gICAgd2lkdGg6IDMwLFxuICAgIGhlaWdodDogMzAsXG4gICAgYm9yZGVyUmFkaXVzOiAxNSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIGNsb3NlQnV0dG9uSWNvbjoge1xuICAgIGZvbnRTaXplOiAxOCxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgb3BhY2l0eTogMC41LFxuICB9LFxuICBlcnJvclRleHQ6IHtcbiAgICBjb2xvcjogJ29yYW5nZScsXG4gIH0sXG4gIGZhaWxUZXh0OiB7XG4gICAgY29sb3I6ICdyZWQnLFxuICB9LFxuICBmaWx0ZXJlZFRleHQ6IHtcbiAgICBmb250U2l6ZTogMTgsXG4gICAgbGluZUhlaWdodDogMTgsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgb3BhY2l0eTogMC41LFxuICB9LFxuICBmaWx0ZXJNb2RhbEFjdGlvbkJ1dHRvbjoge1xuICAgIGZsZXg6IDEsXG4gIH0sXG4gIGZpbHRlck1vZGFsQWN0aW9uc0NvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJyxcbiAgICBtaW5IZWlnaHQ6IDUwLFxuICB9LFxuICBmaWx0ZXJNb2RhbENvbnRhaW5lcjoge1xuICAgIG1pbldpZHRoOiAyNTAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIGJvcmRlclJhZGl1czogMjAsXG4gICAgc2hhZG93Q29sb3I6ICcjMDAwJyxcbiAgICBzaGFkb3dPZmZzZXQ6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAyLFxuICAgIH0sXG4gICAgc2hhZG93T3BhY2l0eTogMC4yNSxcbiAgICBzaGFkb3dSYWRpdXM6IDQsXG4gICAgZWxldmF0aW9uOiA1LFxuICB9LFxuICBmaWx0ZXJNb2RhbENvbnRlbnRDb250YWluZXI6IHtcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTIsXG4gIH0sXG4gIGZpbHRlck1vZGFsUHJvbXB0Q29udGFpbmVyOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICBmaWx0ZXJNb2RhbFJvb3Q6IHtcbiAgICBmbGV4OiAxLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnc3RyZXRjaCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjIpJyxcbiAgfSxcbiAgZmlsdGVyTW9kYWxQcm9tcHRUZXh0OiB7XG4gICAgcGFkZGluZ1ZlcnRpY2FsOiAxMixcbiAgICBmb250U2l6ZTogMTYsXG4gIH0sXG4gIGZpbHRlck1vZGFsUGVuZGluZ1RleHRJbnB1dDoge1xuICAgIC8vIGhlaWdodDogNDAsXG4gICAgcGFkZGluZzogNixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgYm9yZGVyV2lkdGg6IFN0eWxlU2hlZXQuaGFpcmxpbmVXaWR0aCxcbiAgICBib3JkZXJDb2xvcjogJ3JnYigxNzEsIDE3MSwgMTcxKScsXG4gICAgYm9yZGVyUmFkaXVzOiA4LFxuICB9LFxuICBmaWx0ZXJNb2RhbEtleWJvYXJkQXZvaWRpbmdSb290OiB7XG4gICAgZmxleDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIGZpbHRlckZhaWw6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAxMCxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICB9LFxuICBwYXNzVGV4dDoge1xuICAgIGNvbG9yOiAnZ3JlZW4nLFxuICB9LFxuICBwZW5kaW5nVGV4dDoge1xuICAgIGNvbG9yOiAnZ3JheScsXG4gIH0sXG4gIHJlc3VsdHNIZWFkZXI6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDgsXG4gICAgcGFkZGluZ1RvcDogOCxcbiAgICBmbGV4OiAwLFxuICB9LFxuICBza2lwcGVkVGV4dDoge1xuICAgIGNvbG9yOiAnYmx1ZScsXG4gIH0sXG4gIHRhYmxlOiB7XG4gICAgZmxleDogMSxcbiAgfSxcbiAgdGFibGVIZWFkZXI6IHtcbiAgICBmb250U2l6ZTogMTYsXG4gICAgZm9udFdlaWdodDogJzcwMCcsXG4gIH0sXG4gIHRhYmxlSGVhZGVyQ29sdW1uOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIHRhYmxlTWVzc2FnZUNvbHVtbjoge1xuICAgIGZsZXg6IDIuNSxcbiAgICBwYWRkaW5nTGVmdDogOCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIHRhYmxlUm93OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IFN0eWxlU2hlZXQuaGFpcmxpbmVXaWR0aCxcbiAgICBwYWRkaW5nVmVydGljYWw6IDgsXG4gIH0sXG4gIHRhYmxlUmVzdWx0Q29sdW1uOiB7XG4gICAgZmxleDogMC41LFxuICAgIG1pbldpZHRoOiA0MCxcbiAgICBwYWRkaW5nTGVmdDogOCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIHRhYmxlVGVzdE5hbWVDb2x1bW46IHtcbiAgICBmbGV4OiAyLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcbiAgc3VtbWFyeUNvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHBhZGRpbmdCb3R0b206IDgsXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgZm9udFNpemU6IDMyLFxuICAgIGZvbnRXZWlnaHQ6ICc3MDAnLFxuICB9LFxuICB0aXRsZUNvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9LFxufSk7XG5cbmNvbnN0IFNUQVRVU19URVhUX1NUWUxFX01BUFBJTkc6IHtbUGxhdGZvcm1UZXN0UmVzdWx0U3RhdHVzXTogVGV4dFN0eWxlfSA9IHtcbiAgUEFTUzogc3R5bGVzLnBhc3NUZXh0LFxuICBGQUlMOiBzdHlsZXMuZmFpbFRleHQsXG4gIEVSUk9SOiBzdHlsZXMuZXJyb3JUZXh0LFxuICBTS0lQUEVEOiBzdHlsZXMuc2tpcHBlZFRleHQsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3U3R5bGVQcm9wfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1N0eWxlU2hlZXQvU3R5bGVTaGVldCc7XG5cbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdFJlc3VsdHNUZXh0IGZyb20gJy4vUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRzVGV4dCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFRvdWNoYWJsZUhpZ2hsaWdodCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fFxuICBudW1GYWlsOiBudW1iZXIsXG4gIG51bUVycm9yOiBudW1iZXIsXG4gIG51bVBhc3M6IG51bWJlcixcbiAgbnVtUGVuZGluZzogbnVtYmVyLFxuICBudW1Ta2lwcGVkOiBudW1iZXIsXG4gIG9uUHJlc3M/OiAoKSA9PiB2b2lkLFxuICBzdHlsZT86ID9WaWV3U3R5bGVQcm9wLFxufH0+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUk5UZXN0ZXJQbGF0Zm9ybVRlc3RNaW5pbWl6ZWRSZXN1bHRWaWV3KHtcbiAgbnVtRmFpbCxcbiAgbnVtRXJyb3IsXG4gIG51bVBhc3MsXG4gIG51bVBlbmRpbmcsXG4gIG51bVNraXBwZWQsXG4gIG9uUHJlc3MsXG4gIHN0eWxlLFxufTogUHJvcHMpOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICByZXR1cm4gKFxuICAgIDxUb3VjaGFibGVIaWdobGlnaHQgb25QcmVzcz17b25QcmVzc30gc3R5bGU9e1tzdHlsZXMucm9vdCwgc3R5bGVdfT5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaW5uZXJDb250YWluZXJ9PlxuICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnN0YXRzQ29udGFpbmVyfT5cbiAgICAgICAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRzVGV4dFxuICAgICAgICAgICAgbnVtRXJyb3I9e251bUVycm9yfVxuICAgICAgICAgICAgbnVtRmFpbD17bnVtRmFpbH1cbiAgICAgICAgICAgIG51bVBhc3M9e251bVBhc3N9XG4gICAgICAgICAgICBudW1QZW5kaW5nPXtudW1QZW5kaW5nfVxuICAgICAgICAgICAgbnVtU2tpcHBlZD17bnVtU2tpcHBlZH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxUZXh0IHN0eWxlPXtzdHlsZXMuY2FyZXR9PuKMgzwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjYXJldDoge1xuICAgIGZvbnRTaXplOiAyNCxcbiAgICB0cmFuc2Zvcm06IFt7dHJhbnNsYXRlWTogNH1dLFxuICAgIG1hcmdpbkVuZDogOCxcbiAgICBvcGFjaXR5OiAwLjUsXG4gIH0sXG4gIGlubmVyQ29udGFpbmVyOiB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiA4LFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgfSxcbiAgcm9vdDoge1xuICAgIGJvcmRlclRvcENvbG9yOiAncmdiKDE3MSwgMTcxLCAxNzEpJyxcbiAgICBib3JkZXJUb3BXaWR0aDogU3R5bGVTaGVldC5oYWlybGluZVdpZHRoLFxuICAgIG1pbkhlaWdodDogNjAsXG4gIH0sXG4gIHN0YXRzQ29udGFpbmVyOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgICBtYXJnaW5TdGFydDogOCxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVGV4dH0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7XG4gIG51bVBhc3M6IG51bWJlcixcbiAgbnVtRmFpbDogbnVtYmVyLFxuICBudW1FcnJvcjogbnVtYmVyLFxuICBudW1QZW5kaW5nOiBudW1iZXIsXG4gIG51bVNraXBwZWQ6IG51bWJlcixcbn0+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRzVGV4dChcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgY29uc3Qge251bVBhc3MsIG51bUZhaWwsIG51bUVycm9yLCBudW1QZW5kaW5nLCBudW1Ta2lwcGVkfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGV4dD5cbiAgICAgICAge251bVBhc3N9IDxUZXh0IHN0eWxlPXtzdHlsZXMucGFzc1RleHR9PlBhc3M8L1RleHQ+XG4gICAgICA8L1RleHQ+XG4gICAgICB7JyAgJ31cbiAgICAgIDxUZXh0PlxuICAgICAgICB7bnVtRmFpbH0gPFRleHQgc3R5bGU9e3N0eWxlcy5mYWlsVGV4dH0+RmFpbDwvVGV4dD5cbiAgICAgIDwvVGV4dD5cbiAgICAgIHtudW1Ta2lwcGVkID4gMCA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7JyAgJ31cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHtudW1Ta2lwcGVkfSA8VGV4dCBzdHlsZT17c3R5bGVzLnNraXBwZWRUZXh0fT5Ta2lwcGVkPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHtudW1FcnJvciA+IDAgPyAoXG4gICAgICAgIDw+XG4gICAgICAgICAgeycgICd9XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7bnVtRXJyb3J9IDxUZXh0IHN0eWxlPXtzdHlsZXMuZXJyb3JUZXh0fT5FcnJvcjwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7bnVtUGVuZGluZyA+IDAgPyAoXG4gICAgICAgIDw+XG4gICAgICAgICAgeycgJ31cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHtudW1QZW5kaW5nfSA8VGV4dCBzdHlsZT17c3R5bGVzLnBlbmRpbmdUZXh0fT5QZW5kaW5nPC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBlcnJvclRleHQ6IHtcbiAgICBjb2xvcjogJ29yYW5nZScsXG4gIH0sXG4gIGZhaWxUZXh0OiB7XG4gICAgY29sb3I6ICdyZWQnLFxuICB9LFxuICBwYXNzVGV4dDoge1xuICAgIGNvbG9yOiAnZ3JlZW4nLFxuICB9LFxuICBwZW5kaW5nVGV4dDoge1xuICAgIGNvbG9yOiAnZ3JheScsXG4gIH0sXG4gIHNraXBwZWRUZXh0OiB7XG4gICAgY29sb3I6ICdibHVlJyxcbiAgfSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBQbGF0Zm9ybVRlc3RBc3NlcnRpb25SZXN1bHQsXG4gIFBsYXRmb3JtVGVzdENhc2UsXG4gIFBsYXRmb3JtVGVzdENvbnRleHQsXG4gIFBsYXRmb3JtVGVzdEhhcm5lc3MsXG4gIFBsYXRmb3JtVGVzdFJlc3VsdCxcbiAgU3luY1Rlc3RPcHRpb25zLFxufSBmcm9tICcuL1JOVGVzdGVyUGxhdGZvcm1UZXN0VHlwZXMnO1xuXG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxudHlwZSBBc3luY1Rlc3RTdGF0dXMgPSAnTk9UX1JBTicgfCAnQ09NUExFVEVEJyB8ICdUSU1FRF9PVVQnO1xuXG5mdW5jdGlvbiBkaWRBbGxBc3NlcnRpb25zUGFzcyhcbiAgYXNzZXJ0aW9uczogQXJyYXk8UGxhdGZvcm1UZXN0QXNzZXJ0aW9uUmVzdWx0Pixcbik6IGJvb2xlYW4ge1xuICBjb25zdCBoYXNGYWlsaW5nQXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5zb21lKGFzc2VydGlvbiA9PiAhYXNzZXJ0aW9uLnBhc3NpbmcpO1xuICByZXR1cm4gIWhhc0ZhaWxpbmdBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdEFzeW5jVGVzdEhvb2soXG4gIGFkZFRlc3RSZXN1bHQ6IChuZXdSZXN1bHQ6IFBsYXRmb3JtVGVzdFJlc3VsdCkgPT4gdm9pZCxcbiAgdXBkYXRlQXN5bmNUZXN0U3RhdHVzZXM6IChcbiAgICAoXG4gICAgICAkUmVhZE9ubHk8e1tzdHJpbmddOiBBc3luY1Rlc3RTdGF0dXN9PixcbiAgICApID0+ICRSZWFkT25seTx7W3N0cmluZ106IEFzeW5jVGVzdFN0YXR1c30+LFxuICApID0+IHZvaWQsXG4gIHJ1blRlc3RDYXNlOiAoXG4gICAgdGVzdENhc2U6IFBsYXRmb3JtVGVzdENhc2UsXG4gICkgPT4gQXJyYXk8UGxhdGZvcm1UZXN0QXNzZXJ0aW9uUmVzdWx0Pixcbikge1xuICByZXR1cm4gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIHRpbWVvdXRNcz86IG51bWJlciA9IDEwMDAwKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0aW9uc1JlZiA9IHVzZVJlZjxBcnJheTxQbGF0Zm9ybVRlc3RBc3NlcnRpb25SZXN1bHQ+PihbXSk7XG5cbiAgICBjb25zdCB0aW1lb3V0SURSZWYgPSB1c2VSZWY8VGltZW91dElEIHwgbnVsbD4obnVsbCk7XG5cbiAgICBjb25zdCB0aW1lb3V0SGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRpbWVvdXRJRFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIGFkZFRlc3RSZXN1bHQoe1xuICAgICAgICBuYW1lOiBkZXNjcmlwdGlvbixcbiAgICAgICAgYXNzZXJ0aW9uczogW1xuICAgICAgICAgIC4uLmFzc2VydGlvbnNSZWYuY3VycmVudCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXNzaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIG5hbWU6ICdhc3luY190aW1lb3V0JyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgYXN5bmMgdGVzdCBzaG91bGQgYmUgY29tcGxldGVkIGluICR7dGltZW91dE1zfW1zYCxcbiAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlOiBgZXhwZWN0ZWQgdG8gY29tcGxldGUgYXN5bmMgdGVzdCBpbiAke3RpbWVvdXRNc31tc2AsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc3RhdHVzOiAnRkFJTCcsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSk7XG4gICAgICB1cGRhdGVBc3luY1Rlc3RTdGF0dXNlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtkZXNjcmlwdGlvbl06ICdUSU1FRF9PVVQnLFxuICAgICAgfSkpO1xuICAgIH0sIFtkZXNjcmlwdGlvbiwgdGltZW91dE1zXSk7XG5cbiAgICAvLyB0aW1lb3V0IG1hbmFnZW1lbnRcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgdGltZW91dElEUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KHRpbWVvdXRIYW5kbGVyLCB0aW1lb3V0TXMpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVvdXRJRFJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEUmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sIFt0aW1lb3V0SGFuZGxlciwgdGltZW91dE1zXSk7XG5cbiAgICBjb25zdCBjb21wbGV0aW9uSGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXRJRCA9IHRpbWVvdXRJRFJlZi5jdXJyZW50O1xuICAgICAgaWYgKHRpbWVvdXRJRCAhPSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpO1xuICAgICAgICB0aW1lb3V0SURSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZUFzeW5jVGVzdFN0YXR1c2VzKHByZXYgPT4ge1xuICAgICAgICBpZiAocHJldltkZXNjcmlwdGlvbl0gPT09ICdOT1RfUkFOJykge1xuICAgICAgICAgIGFkZFRlc3RSZXN1bHQoe1xuICAgICAgICAgICAgbmFtZTogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhc3NlcnRpb25zOiBbXG4gICAgICAgICAgICAgIC4uLmFzc2VydGlvbnNSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhc3Npbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2FzeW5jX3Rlc3QnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnYXN5bmMgdGVzdCBzaG91bGQgYmUgY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0dXM6IGRpZEFsbEFzc2VydGlvbnNQYXNzKGFzc2VydGlvbnNSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgPyAnUEFTUydcbiAgICAgICAgICAgICAgOiAnRkFJTCcsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gey4uLnByZXYsIFtkZXNjcmlwdGlvbl06ICdDT01QTEVURUQnfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0pO1xuICAgIH0sIFtkZXNjcmlwdGlvbl0pO1xuXG4gICAgY29uc3Qgc3RlcEhhbmRsZXIgPSB1c2VDYWxsYmFjaygodGVzdENhc2U6IFBsYXRmb3JtVGVzdENhc2UpID0+IHtcbiAgICAgIGNvbnN0IHN0ZXBBc3NlcnRpb25zID0gcnVuVGVzdENhc2UodGVzdENhc2UpO1xuICAgICAgYXNzZXJ0aW9uc1JlZi5jdXJyZW50LnB1c2goLi4uc3RlcEFzc2VydGlvbnMpO1xuICAgIH0sIFtdKTtcblxuICAgIC8vIHRlc3QgcmVnaXN0cmF0aW9uXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHVwZGF0ZUFzeW5jVGVzdFN0YXR1c2VzKHByZXYgPT4ge1xuICAgICAgICBpZiAoIXByZXYuaGFzT3duUHJvcGVydHkoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIHsuLi5wcmV2LCBbZGVzY3JpcHRpb25dOiAnTk9UX1JBTid9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSk7XG4gICAgfSwgW2Rlc2NyaXB0aW9uXSk7XG5cbiAgICByZXR1cm4gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGRvbmU6IGNvbXBsZXRpb25IYW5kbGVyLFxuICAgICAgICBzdGVwOiBzdGVwSGFuZGxlcixcbiAgICAgIH0pLFxuICAgICAgW2NvbXBsZXRpb25IYW5kbGVyLCBzdGVwSGFuZGxlcl0sXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGxhdGZvcm1UZXN0SGFybmVzc0hvb2tSZXN1bHQgPSAkUmVhZE9ubHk8e3xcbiAgdGVzdEtleTogbnVtYmVyLFxuICBoYXJuZXNzOiBQbGF0Zm9ybVRlc3RIYXJuZXNzLFxuICBudW1QZW5kaW5nOiBudW1iZXIsXG4gIHJlc2V0OiAoKSA9PiB2b2lkLFxuICByZXN1bHRzOiAkUmVhZE9ubHlBcnJheTxQbGF0Zm9ybVRlc3RSZXN1bHQ+LFxufH0+O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQbGF0Zm9ybVRlc3RIYXJuZXNzKCk6IFBsYXRmb3JtVGVzdEhhcm5lc3NIb29rUmVzdWx0IHtcbiAgY29uc3QgW3Rlc3RSZXN1bHRzLCB1cGRhdGVUZXN0UmVzdWx0c10gPSB1c2VTdGF0ZTxcbiAgICAkUmVhZE9ubHlBcnJheTxQbGF0Zm9ybVRlc3RSZXN1bHQ+LFxuICA+KFtdKTtcblxuICAvLyBTaW5jZSB1cGRhdGluZyB0aGUgdGVzdCByZXN1bHRzIGFycmF5IGNhbiBnZXQgZXhwZW5zaXZlIGF0IGxhcmdlciBzaXplc1xuICAvLyB3ZSB1c2UgYSBiYXNpYyBkZWJvdW5jaW5nIGxvZ2ljIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgcmUtcmVuZGVyc1xuICAvLyBjYXVzZWQgYnkgYWRkaW5nIHRlc3QgcmVzdWx0c1xuICBjb25zdCByZXN1bHRRdWV1ZVJlZiA9IHVzZVJlZjxBcnJheTxQbGF0Zm9ybVRlc3RSZXN1bHQ+PihbXSk7XG4gIGNvbnN0IHNjaGVkdWxlclRpbWVvdXRJZFJlZiA9IHVzZVJlZjxudWxsIHwgVGltZW91dElEPihudWxsKTtcblxuICBjb25zdCBjb21taXRSZXN1bHRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXVlZFJlc3VsdHMgPSByZXN1bHRRdWV1ZVJlZi5jdXJyZW50O1xuICAgIGlmIChxdWV1ZWRSZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHVwZGF0ZVRlc3RSZXN1bHRzKHByZXYgPT4gWy4uLnByZXYsIC4uLnF1ZXVlZFJlc3VsdHNdKTtcbiAgICAgIHJlc3VsdFF1ZXVlUmVmLmN1cnJlbnQgPSBbXTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCBzY2hlZHVsZVJlc3VsdHNDb21taXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgc2NoZWR1bGVyVGltZW91dElkID0gc2NoZWR1bGVyVGltZW91dElkUmVmLmN1cnJlbnQ7XG4gICAgaWYgKHNjaGVkdWxlclRpbWVvdXRJZCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2NoZWR1bGVyVGltZW91dElkKTtcbiAgICB9XG4gICAgc2NoZWR1bGVyVGltZW91dElkUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbW1pdFJlc3VsdHMoKSwgNTAwKTtcbiAgfSwgW2NvbW1pdFJlc3VsdHNdKTtcblxuICBjb25zdCBhZGRUZXN0UmVzdWx0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld1Jlc3VsdDogUGxhdGZvcm1UZXN0UmVzdWx0KSA9PiB7XG4gICAgICByZXN1bHRRdWV1ZVJlZi5jdXJyZW50LnB1c2gobmV3UmVzdWx0KTtcbiAgICAgIHNjaGVkdWxlUmVzdWx0c0NvbW1pdCgpO1xuICAgIH0sXG4gICAgW3NjaGVkdWxlUmVzdWx0c0NvbW1pdF0sXG4gICk7XG5cbiAgLy8gV2hlbiByZXNldHRpbmcgdGhlIHRlc3QgcmVzdWx0cyB3ZSBzaG91bGQgYWxzbyByZS1tb3VudCB0aGVcbiAgLy8gc28gd2UgYXBwbHkgYSBrZXkgdG8gdGhhdCBjb21wb25lbnQgd2hpY2ggd2UgY2FuIGluY3JlbWVudFxuICAvLyB0byBlbnN1cmUgaXQgcmUtbW91bnRzXG4gIGNvbnN0IFt0ZXN0RWxlbWVudEtleSwgc2V0VGVzdEVsZW1lbnRLZXldID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcblxuICBjb25zdCBbYXN5bmNUZXN0U3RhdHVzZXMsIHVwZGF0ZUFzeW5jVGVzdFN0YXR1c2VzXSA9IHVzZVN0YXRlPFxuICAgICRSZWFkT25seTx7W3N0cmluZ106IEFzeW5jVGVzdFN0YXR1c30+LFxuICA+KHt9KTtcblxuICBjb25zdCByZXNldCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVUZXN0UmVzdWx0cyhbXSk7XG4gICAgdXBkYXRlQXN5bmNUZXN0U3RhdHVzZXMoe30pO1xuICAgIHNldFRlc3RFbGVtZW50S2V5KGsgPT4gayArIDEpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgcnVuVGVzdENhc2UgPSB1c2VDYWxsYmFjaygodGVzdENhc2U6IFBsYXRmb3JtVGVzdENhc2UpID0+IHtcbiAgICBjb25zdCBhc3NlcnRpb25SZXN1bHRzOiBBcnJheTxQbGF0Zm9ybVRlc3RBc3NlcnRpb25SZXN1bHQ+ID0gW107XG5cbiAgICBjb25zdCBiYXNlQXNzZXJ0ID0gKFxuICAgICAgYXNzZXJ0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgdGVzdENvbmRpdGlvblJlc3VsdDogYm9vbGVhbixcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBmYWlsdXJlTWVzc2FnZTogc3RyaW5nLFxuICAgICkgPT4ge1xuICAgICAgaWYgKHRlc3RDb25kaXRpb25SZXN1bHQpIHtcbiAgICAgICAgYXNzZXJ0aW9uUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICBwYXNzaW5nOiB0cnVlLFxuICAgICAgICAgIG5hbWU6IGFzc2VydGlvbk5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0aW9uUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICBwYXNzaW5nOiBmYWxzZSxcbiAgICAgICAgICBuYW1lOiBhc3NlcnRpb25OYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgIGZhaWx1cmVNZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29udGV4dDogUGxhdGZvcm1UZXN0Q29udGV4dCA9IHtcbiAgICAgIGFzc2VydF90cnVlOiAoY29uZDogYm9vbGVhbiwgZGVzYzogc3RyaW5nKSA9PlxuICAgICAgICBiYXNlQXNzZXJ0KFxuICAgICAgICAgICdhc3NlcnRfdHJ1ZScsXG4gICAgICAgICAgY29uZCxcbiAgICAgICAgICBkZXNjLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgJ3RydWUnIGJ1dCByZWNlaXZlZCAnZmFsc2UnXCIsXG4gICAgICAgICksXG4gICAgICBhc3NlcnRfZXF1YWxzOiAoYTogYW55LCBiOiBhbnksIGRlc2M6IHN0cmluZykgPT5cbiAgICAgICAgYmFzZUFzc2VydChcbiAgICAgICAgICAnYXNzZXJ0X2VxdWFsJyxcbiAgICAgICAgICBhID09PSBiLFxuICAgICAgICAgIGRlc2MsXG4gICAgICAgICAgYGV4cGVjdGVkICR7YX0gdG8gZXF1YWwgJHtifWAsXG4gICAgICAgICksXG4gICAgICBhc3NlcnRfbm90X2VxdWFsczogKGE6IGFueSwgYjogYW55LCBkZXNjOiBzdHJpbmcpID0+XG4gICAgICAgIGJhc2VBc3NlcnQoXG4gICAgICAgICAgJ2Fzc2VydF9ub3RfZXF1YWxzJyxcbiAgICAgICAgICBhICE9PSBiLFxuICAgICAgICAgIGRlc2MsXG4gICAgICAgICAgYGV4cGVjdGVkICR7YX0gbm90IHRvIGVxdWFsICR7Yn1gLFxuICAgICAgICApLFxuICAgICAgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbDogKGE6IG51bWJlciwgYjogbnVtYmVyLCBkZXNjOiBzdHJpbmcpID0+XG4gICAgICAgIGJhc2VBc3NlcnQoXG4gICAgICAgICAgJ2Fzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwnLFxuICAgICAgICAgIGEgPj0gYixcbiAgICAgICAgICBkZXNjLFxuICAgICAgICAgIGBleHBlY3RlZCAke2F9IHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2J9YCxcbiAgICAgICAgKSxcbiAgICAgIGFzc2VydF9sZXNzX3RoYW5fZXF1YWw6IChhOiBudW1iZXIsIGI6IG51bWJlciwgZGVzYzogc3RyaW5nKSA9PlxuICAgICAgICBiYXNlQXNzZXJ0KFxuICAgICAgICAgICdhc3NlcnRfbGVzc190aGFuX2VxdWFsJyxcbiAgICAgICAgICBhIDw9IGIsXG4gICAgICAgICAgZGVzYyxcbiAgICAgICAgICBgZXhwZWN0ZWQgJHthfSB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHtifWAsXG4gICAgICAgICksXG4gICAgfTtcblxuICAgIHRlc3RDYXNlKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdHM7XG4gIH0sIFtdKTtcblxuICBjb25zdCB0ZXN0RnVuY3Rpb246IFBsYXRmb3JtVGVzdEhhcm5lc3NbJ3Rlc3QnXSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHRlc3RDYXNlOiBQbGF0Zm9ybVRlc3RDYXNlLFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgb3B0aW9ucz86IFN5bmNUZXN0T3B0aW9ucyxcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHtza2lwID0gZmFsc2V9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgYWRkVGVzdFJlc3VsdCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBzdGF0dXM6ICdTS0lQUEVEJyxcbiAgICAgICAgICBhc3NlcnRpb25zOiBbXSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uUmVzdWx0cyA9IHJ1blRlc3RDYXNlKHRlc3RDYXNlKTtcbiAgICAgICAgYWRkVGVzdFJlc3VsdCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBzdGF0dXM6IGRpZEFsbEFzc2VydGlvbnNQYXNzKGFzc2VydGlvblJlc3VsdHMpID8gJ1BBU1MnIDogJ0ZBSUwnLFxuICAgICAgICAgIGFzc2VydGlvbnM6IGFzc2VydGlvblJlc3VsdHMsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgYWRkVGVzdFJlc3VsdCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBzdGF0dXM6ICdFUlJPUicsXG4gICAgICAgICAgYXNzZXJ0aW9uczogW10sXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZFRlc3RSZXN1bHQsIHJ1blRlc3RDYXNlXSxcbiAgKTtcblxuICBjb25zdCBhc3luY1Rlc3RIb29rOiBQbGF0Zm9ybVRlc3RIYXJuZXNzWyd1c2VBc3luY1Rlc3QnXSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGNvbnN0cnVjdEFzeW5jVGVzdEhvb2soXG4gICAgICAgIGFkZFRlc3RSZXN1bHQsXG4gICAgICAgIHVwZGF0ZUFzeW5jVGVzdFN0YXR1c2VzLFxuICAgICAgICBydW5UZXN0Q2FzZSxcbiAgICAgICksXG4gICAgW2FkZFRlc3RSZXN1bHQsIHJ1blRlc3RDYXNlXSxcbiAgKTtcblxuICBjb25zdCBudW1QZW5kaW5nQXN5bmNUZXN0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBudW1QZW5kaW5nID0gMDtcbiAgICBmb3IgKGNvbnN0IGFzeW5jVGVzdE5hbWUgaW4gYXN5bmNUZXN0U3RhdHVzZXMpIHtcbiAgICAgIGNvbnN0IGFzeW5jVGVzdFN0YXR1cyA9IGFzeW5jVGVzdFN0YXR1c2VzW2FzeW5jVGVzdE5hbWVdO1xuICAgICAgaWYgKGFzeW5jVGVzdFN0YXR1cyA9PT0gJ05PVF9SQU4nKSB7XG4gICAgICAgIG51bVBlbmRpbmcrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bVBlbmRpbmc7XG4gIH0sIFthc3luY1Rlc3RTdGF0dXNlc10pO1xuXG4gIGNvbnN0IGhhcm5lc3M6IFBsYXRmb3JtVGVzdEhhcm5lc3MgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICB0ZXN0OiB0ZXN0RnVuY3Rpb24sXG4gICAgICB1c2VBc3luY1Rlc3Q6IGFzeW5jVGVzdEhvb2ssXG4gICAgfSksXG4gICAgW2FzeW5jVGVzdEhvb2ssIHRlc3RGdW5jdGlvbl0sXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBoYXJuZXNzLFxuICAgIG51bVBlbmRpbmc6IG51bVBlbmRpbmdBc3luY1Rlc3RzLFxuICAgIHJlc2V0LFxuICAgIHJlc3VsdHM6IHRlc3RSZXN1bHRzLFxuICAgIHRlc3RLZXk6IHRlc3RFbGVtZW50S2V5LFxuICB9O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHN9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuaW1wb3J0IHR5cGUge0hvc3RDb21wb25lbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvUmVuZGVyZXIvc2hpbXMvUmVhY3ROYXRpdmVUeXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIExheW91dCxcbiAgUG9pbnRlckV2ZW50LFxufSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IFJOVGVzdGVyUGxhdGZvcm1UZXN0IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdCc7XG5pbXBvcnQge2NoZWNrX1BvaW50ZXJFdmVudCwgdXNlVGVzdEV2ZW50SGFuZGxlcn0gZnJvbSAnLi9Qb2ludGVyRXZlbnRTdXBwb3J0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3QgZXZlbnRMaXN0ID0gW1xuICAncG9pbnRlck92ZXInLFxuICAncG9pbnRlckVudGVyJyxcbiAgJ3BvaW50ZXJEb3duJyxcbiAgJ3BvaW50ZXJVcCcsXG4gICdwb2ludGVyT3V0JyxcbiAgJ3BvaW50ZXJMZWF2ZScsXG5dO1xuXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRBdHRyaWJ1dGVzTm9Ib3ZlclBvaW50ZXJzVGVzdENhc2UoXG4gIHByb3BzOiBQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHMsXG4pIHtcbiAgY29uc3Qge2hhcm5lc3N9ID0gcHJvcHM7XG5cbiAgY29uc3QgZGV0ZWN0ZWRfcG9pbnRlcnR5cGVzUmVmID0gdXNlUmVmKCh7fToge1tzdHJpbmddOiBib29sZWFufSkpO1xuICBjb25zdCBkZXRlY3RlZF9ldmVudFR5cGVzUmVmID0gdXNlUmVmKCh7fToge1tzdHJpbmddOiBib29sZWFufSkpO1xuICBjb25zdCBleHBlY3RlZFBvaW50ZXJJZFJlZiA9IHVzZVJlZihOYU4pO1xuXG4gIGNvbnN0IFtzcXVhcmUxVmlzaWJsZSwgc2V0U3F1YXJlMVZpc2libGVdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtzcXVhcmUyVmlzaWJsZSwgc2V0U3F1YXJlMlZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzgyMjJjZWVlZWJkNGJlYWIzMmYxMDFlYmY2NTFhNWRkN2M1ZTgzNjUvcG9pbnRlcmV2ZW50cy9wb2ludGVyZXZlbnRfYXR0cmlidXRlc19ub2hvdmVyX3BvaW50ZXJzLmh0bWwjTDI1XG4gIGNvbnN0IGNoZWNrUG9pbnRlckV2ZW50QXR0cmlidXRlcyA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIGV2ZW50OiBQb2ludGVyRXZlbnQsXG4gICAgICBldmVudFR5cGU6IHN0cmluZyxcbiAgICAgIHRhcmdldExheW91dDogTGF5b3V0LFxuICAgICAgdGVzdE5hbWVQcmVmaXg6IHN0cmluZyxcbiAgICAgIGV4cGVjdGVkUG9pbnRlclR5cGU6IHN0cmluZyxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGRldGVjdGVkX3BvaW50ZXJ0eXBlcyA9IGRldGVjdGVkX3BvaW50ZXJ0eXBlc1JlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZGV0ZWN0ZWRfZXZlbnRUeXBlcyA9IGRldGVjdGVkX2V2ZW50VHlwZXNSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUG9pbnRlcklkID0gZXhwZWN0ZWRQb2ludGVySWRSZWYuY3VycmVudDtcblxuICAgICAgaWYgKGRldGVjdGVkX2V2ZW50VHlwZXNbZXZlbnRUeXBlXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBleHBlY3RlZEV2ZW50VHlwZSA9XG4gICAgICAgIGV2ZW50TGlzdFtPYmplY3Qua2V5cyhkZXRlY3RlZF9ldmVudFR5cGVzKS5sZW5ndGhdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBkZXRlY3RlZF9ldmVudFR5cGVzW2V2ZW50VHlwZV0gPSB0cnVlO1xuICAgICAgY29uc3QgcG9pbnRlclRlc3ROYW1lID1cbiAgICAgICAgdGVzdE5hbWVQcmVmaXggKyAnICcgKyBleHBlY3RlZFBvaW50ZXJUeXBlICsgJyAnICsgZXhwZWN0ZWRFdmVudFR5cGU7XG5cbiAgICAgIGRldGVjdGVkX3BvaW50ZXJ0eXBlc1tldmVudC5uYXRpdmVFdmVudC5wb2ludGVyVHlwZV0gPSB0cnVlO1xuICAgICAgaGFybmVzcy50ZXN0KFxuICAgICAgICAoe2Fzc2VydF9lcXVhbHN9KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkRXZlbnRUeXBlLFxuICAgICAgICAgICAgJ0V2ZW50LnR5cGUgc2hvdWxkIGJlICcgKyBleHBlY3RlZEV2ZW50VHlwZSxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBwb2ludGVyVGVzdE5hbWUgKyBcIidzIHR5cGUgc2hvdWxkIGJlIFwiICsgZXhwZWN0ZWRFdmVudFR5cGUsXG4gICAgICApO1xuXG4gICAgICAvLyBUZXN0IGJ1dHRvbiBhbmQgYnV0dG9uc1xuICAgICAgaGFybmVzcy50ZXN0KCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5uYXRpdmVFdmVudC5idXR0b24sIDAsICdCdXR0b24gYXR0cmlidXRlIGlzIDAnKTtcbiAgICAgIH0sIHBvaW50ZXJUZXN0TmFtZSArIFwiJ3MgYnV0dG9uIGF0dHJpYnV0ZSBpcyAwIHdoZW4gbGVmdCBtb3VzZSBidXR0b24gaXMgcHJlc3NlZC5cIik7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50VHlwZSA9PT0gJ3BvaW50ZXJkb3duJyB8fFxuICAgICAgICBldmVudFR5cGUgPT09ICdwb2ludGVyb3ZlcicgfHxcbiAgICAgICAgZXZlbnRUeXBlID09PSAncG9pbnRlcmVudGVyJ1xuICAgICAgKSB7XG4gICAgICAgIGhhcm5lc3MudGVzdCgoe2Fzc2VydF9lcXVhbHN9KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5uYXRpdmVFdmVudC5idXR0b25zLCAxLCAnQnV0dG9ucyBhdHRyaWJ1dGUgaXMgMScpO1xuICAgICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIGJ1dHRvbnMgYXR0cmlidXRlIGlzIDEgd2hlbiBsZWZ0IG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhcm5lc3MudGVzdCgoe2Fzc2VydF9lcXVhbHN9KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5uYXRpdmVFdmVudC5idXR0b25zLCAwLCAnQnV0dG9ucyBhdHRyaWJ1dGUgaXMgMCcpO1xuICAgICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIGJ1dHRvbnMgaXMgMCB3aGVuIG1vdXNlIGJ1dHRvbnMgYXJlIGluIHJlbGVhc2VkIHN0YXRlLlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGVmdCA9IHRhcmdldExheW91dC54O1xuICAgICAgY29uc3QgdG9wID0gdGFyZ2V0TGF5b3V0Lnk7XG4gICAgICBjb25zdCByaWdodCA9IHRhcmdldExheW91dC54ICsgdGFyZ2V0TGF5b3V0LndpZHRoO1xuICAgICAgY29uc3QgYm90dG9tID0gdGFyZ2V0TGF5b3V0LnkgKyB0YXJnZXRMYXlvdXQuaGVpZ2h0O1xuXG4gICAgICAvLyBUZXN0IGNsaWVudFggYW5kIGNsaWVudFlcbiAgICAgIGhhcm5lc3MudGVzdCgoe2Fzc2VydF90cnVlfSkgPT4ge1xuICAgICAgICBhc3NlcnRfdHJ1ZShcbiAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5jbGllbnRYID49IGxlZnQgJiZcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFggPCByaWdodCAmJlxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuY2xpZW50WSA+PSB0b3AgJiZcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFkgPCBib3R0b20sXG4gICAgICAgICAgJ0NsaWVudFgvWSBzaG91bGQgYmUgaW4gdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGJveCcsXG4gICAgICAgICk7XG4gICAgICB9LCBwb2ludGVyVGVzdE5hbWUgKyBcIidzIENsaWVudFggYW5kIENsaWVudFkgYXR0cmlidXRlcyBhcmUgY29ycmVjdC5cIik7XG5cbiAgICAgIGNoZWNrX1BvaW50ZXJFdmVudChoYXJuZXNzLCBldmVudCwgZXZlbnRUeXBlLCB7XG4gICAgICAgIHRlc3ROYW1lUHJlZml4LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRlc3QgaXNQcmltYXJ5IHZhbHVlXG4gICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmlzUHJpbWFyeSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgICdpc1ByaW1hcnkgc2hvdWxkIGJlIHRydWUnLFxuICAgICAgICApO1xuICAgICAgfSwgcG9pbnRlclRlc3ROYW1lICsgJy5pc1ByaW1hcnkgYXR0cmlidXRlIGlzIGNvcnJlY3QuJyk7XG5cbiAgICAgIC8vIFRlc3QgcG9pbnRlcklkIHZhbHVlXG4gICAgICBpZiAoaXNOYU4oZXhwZWN0ZWRQb2ludGVySWQpKSB7XG4gICAgICAgIGV4cGVjdGVkUG9pbnRlcklkUmVmLmN1cnJlbnQgPSBldmVudC5uYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5wb2ludGVySWQsXG4gICAgICAgICAgICBleHBlY3RlZFBvaW50ZXJJZCxcbiAgICAgICAgICAgICdwb2ludGVySWQgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSBmb3IgdGhlIHNhbWUgYWN0aXZlIHBvaW50ZXInLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sIHBvaW50ZXJUZXN0TmFtZSArICcucG9pbnRlcklkIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBwcmV2aW91cyBwb2ludGVyIGV2ZW50cyBmb3IgdGhpcyBhY3RpdmUgcG9pbnRlci4nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYXJuZXNzXSxcbiAgKTtcblxuICBjb25zdCBzcXVhcmUxUmVmID1cbiAgICB1c2VSZWY8P1JlYWN0JEVsZW1lbnRSZWY8XG4gICAgICBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxcbiAgICAgICAgVmlld1Byb3BzLFxuICAgICAgICBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8Vmlld1Byb3BzPj4sXG4gICAgICA+LFxuICAgID4+KCk7XG4gIGNvbnN0IHNxdWFyZTFIYW5kbGVycyA9IHVzZVRlc3RFdmVudEhhbmRsZXIoZXZlbnRMaXN0LCAoZXZlbnQsIGV2ZW50VHlwZSkgPT4ge1xuICAgIGlmICghc3F1YXJlMVZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcXVhcmUxRWxlbSA9IHNxdWFyZTFSZWYuY3VycmVudDtcbiAgICBpZiAoc3F1YXJlMUVsZW0gIT0gbnVsbCkge1xuICAgICAgc3F1YXJlMUVsZW0ubWVhc3VyZSgoeCwgeSwgd2lkdGgsIGhlaWdodCwgcGFnZVgsIHBhZ2VZKSA9PiB7XG4gICAgICAgIGNoZWNrUG9pbnRlckV2ZW50QXR0cmlidXRlcyhcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAge3g6IHBhZ2VYLCB5OiBwYWdlWSwgd2lkdGgsIGhlaWdodH0sXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ3RvdWNoJyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5rZXlzKGRldGVjdGVkX2V2ZW50VHlwZXNSZWYuY3VycmVudCkubGVuZ3RoID09PVxuICAgICAgICAgIGV2ZW50TGlzdC5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2V0U3F1YXJlMVZpc2libGUoZmFsc2UpO1xuICAgICAgICAgIGRldGVjdGVkX2V2ZW50VHlwZXNSZWYuY3VycmVudCA9ICh7fToge1tzdHJpbmddOiBib29sZWFufSk7XG4gICAgICAgICAgc2V0U3F1YXJlMlZpc2libGUodHJ1ZSk7XG4gICAgICAgICAgZXhwZWN0ZWRQb2ludGVySWRSZWYuY3VycmVudCA9IE5hTjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBzcXVhcmUyUmVmID1cbiAgICB1c2VSZWY8P1JlYWN0JEVsZW1lbnRSZWY8XG4gICAgICBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxcbiAgICAgICAgVmlld1Byb3BzLFxuICAgICAgICBSZWFjdC5FbGVtZW50UmVmPEhvc3RDb21wb25lbnQ8Vmlld1Byb3BzPj4sXG4gICAgICA+LFxuICAgID4+KCk7XG4gIGNvbnN0IHNxdWFyZTJIYW5kbGVycyA9IHVzZVRlc3RFdmVudEhhbmRsZXIoZXZlbnRMaXN0LCAoZXZlbnQsIGV2ZW50VHlwZSkgPT4ge1xuICAgIGNvbnN0IHNxdWFyZTJFbGVtID0gc3F1YXJlMlJlZi5jdXJyZW50O1xuICAgIGlmIChzcXVhcmUyRWxlbSAhPSBudWxsKSB7XG4gICAgICBzcXVhcmUyRWxlbS5tZWFzdXJlKCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYWdlWCwgcGFnZVkpID0+IHtcbiAgICAgICAgY2hlY2tQb2ludGVyRXZlbnRBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICB7eDogcGFnZVgsIHk6IHBhZ2VZLCB3aWR0aCwgaGVpZ2h0fSxcbiAgICAgICAgICAnSW5uZXIgZnJhbWUgJyxcbiAgICAgICAgICAndG91Y2gnLFxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LmtleXMoZGV0ZWN0ZWRfZXZlbnRUeXBlc1JlZi5jdXJyZW50KS5sZW5ndGggPT09XG4gICAgICAgICAgZXZlbnRMaXN0Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRTcXVhcmUyVmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgLy8gVE9ETzogTWFyayB0ZXN0IGFzIGRvbmVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucm9vdH0+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNxdWFyZUNvbnRhaW5lcn0+XG4gICAgICAgIHtzcXVhcmUxVmlzaWJsZSAmJiAoXG4gICAgICAgICAgPFZpZXcgcmVmPXtzcXVhcmUxUmVmfSBzdHlsZT17c3R5bGVzLnNxdWFyZTF9IHsuLi5zcXVhcmUxSGFuZGxlcnN9IC8+XG4gICAgICAgICl9XG4gICAgICA8L1ZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnNxdWFyZUNvbnRhaW5lcn0+XG4gICAgICAgIHtzcXVhcmUyVmlzaWJsZSAmJiAoXG4gICAgICAgICAgPFZpZXcgcmVmPXtzcXVhcmUyUmVmfSBzdHlsZT17c3R5bGVzLnNxdWFyZTJ9IHsuLi5zcXVhcmUySGFuZGxlcnN9IC8+XG4gICAgICAgICl9XG4gICAgICA8L1ZpZXc+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHJvb3Q6IHtcbiAgICBoZWlnaHQ6IDE1MCxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgc3F1YXJlMToge1xuICAgIHdpZHRoOiA0MCxcbiAgICBoZWlnaHQ6IDQwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgfSxcbiAgc3F1YXJlMjoge1xuICAgIHdpZHRoOiA0MCxcbiAgICBoZWlnaHQ6IDQwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gIH0sXG4gIHNxdWFyZUNvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxufSk7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e30+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50QXR0cmlidXRlc05vSG92ZXJQb2ludGVycyhcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RcbiAgICAgIGNvbXBvbmVudD17UG9pbnRlckV2ZW50QXR0cmlidXRlc05vSG92ZXJQb2ludGVyc1Rlc3RDYXNlfVxuICAgICAgZGVzY3JpcHRpb249XCJUaGlzIHRlc3QgY2hlY2tzIHRoZSBwcm9wZXJ0aWVzIG9mIHBvaW50ZXIgZXZlbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaG92ZXIuXCJcbiAgICAgIGluc3RydWN0aW9ucz17W1xuICAgICAgICAnVGFwIHRoZSBibGFjayBzcXVhcmUuJyxcbiAgICAgICAgJ1RoZW4gbW92ZSBpdCBvZmYgdGhlIGJsYWNrIHNxdWFyZSBzbyB0aGF0IGl0IGRpc2FwcGVhcnMuJyxcbiAgICAgICAgJ1doZW4gdGhlIHJlZCBzcXVhcmUgYXBwZWFycyB0YXAgb24gdGhhdCBhcyB3ZWxsLicsXG4gICAgICBdfVxuICAgICAgdGl0bGU9XCJQb2ludGVyIEV2ZW50cyBuby1ob3ZlciBwb2ludGVyIGF0dHJpYnV0ZXMgdGVzdFwiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzfSBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RUeXBlcyc7XG5pbXBvcnQgdHlwZSB7RWxlbWVudFJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1BvaW50ZXJFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdCBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFRleHQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbi8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iL21hc3Rlci9wb2ludGVyZXZlbnRzL3BvaW50ZXJldmVudF9jYXB0dXJlX21vdXNlLmh0bWxcbmZ1bmN0aW9uIFBvaW50ZXJFdmVudENhcHR1cmVNb3VzZVRlc3RDYXNlKFxuICBwcm9wczogUGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzLFxuKSB7XG4gIGNvbnN0IHtoYXJuZXNzfSA9IHByb3BzO1xuXG4gIGNvbnN0IHRhcmdldDBSZWYgPSB1c2VSZWY8RWxlbWVudFJlZjx0eXBlb2YgVmlldz4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgdGFyZ2V0MVJlZiA9IHVzZVJlZjxFbGVtZW50UmVmPHR5cGVvZiBWaWV3PiB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzUG9pbnRlckNhcHR1cmVSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBwb2ludGVybW92ZU5vQ2FwdHVyZUdvdDBSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBwb2ludGVybW92ZUNhcHR1cmVHb3QwUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgcG9pbnRlcm1vdmVOb0NhcHR1cmVHb3QxUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgb3duRXZlbnRGb3JUaGVDYXB0dXJlZFRhcmdldEdvdFJlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgY29uc3QgdGVzdEdvdFBvaW50ZXJDYXB0dXJlID0gaGFybmVzcy51c2VBc3luY1Rlc3QoXG4gICAgJ2dvdHBvaW50ZXJjYXB0dXJlIGV2ZW50IHJlY2VpdmVkXCInLFxuICApO1xuICBjb25zdCB0ZXN0TG9zdFBvaW50ZXJDYXB0dXJlID0gaGFybmVzcy51c2VBc3luY1Rlc3QoXG4gICAgJ2xvc3Rwb2ludGVyY2FwdHVyZSBldmVudCByZWNlaXZlZFwiJyxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDYXB0dXJlQnV0dG9uRG93biA9IHVzZUNhbGxiYWNrKChldnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldDAgPSB0YXJnZXQwUmVmLmN1cnJlbnQ7XG4gICAgaWYgKHRhcmdldDAgIT0gbnVsbCAmJiBpc1BvaW50ZXJDYXB0dXJlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBpc1BvaW50ZXJDYXB0dXJlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgIHRhcmdldDAuc2V0UG9pbnRlckNhcHR1cmUoZXZ0Lm5hdGl2ZUV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVRhcmdldDBHb3RQb2ludGVyQ2FwdHVyZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgdGVzdEdvdFBvaW50ZXJDYXB0dXJlLmRvbmUoKTtcbiAgICB9LFxuICAgIFt0ZXN0R290UG9pbnRlckNhcHR1cmVdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRhcmdldDBMb3N0UG9pbnRlckNhcHR1cmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZ0OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIHRlc3RMb3N0UG9pbnRlckNhcHR1cmUuZG9uZSgpO1xuICAgICAgaXNQb2ludGVyQ2FwdHVyZVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfSxcbiAgICBbdGVzdExvc3RQb2ludGVyQ2FwdHVyZV0sXG4gICk7XG5cbiAgY29uc3QgdGVzdFBvaW50ZXJNb3ZlMCA9IGhhcm5lc3MudXNlQXN5bmNUZXN0KFxuICAgICdwb2ludGVyb3ZlciBldmVudCBmb3IgYmxhY2sgcmVjdGFuZ2xlIHJlY2VpdmVkJyxcbiAgKTtcbiAgY29uc3QgdGVzdFBvaW50ZXJNb3ZlMSA9IGhhcm5lc3MudXNlQXN5bmNUZXN0KFxuICAgICdwb2ludGVyb3ZlciBldmVudCBmb3IgcHVycGxlIHJlY3RhbmdsZSByZWNlaXZlZCcsXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGFyZ2V0MFBvaW50ZXJNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2dDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQwID0gdGFyZ2V0MFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCFwb2ludGVybW92ZU5vQ2FwdHVyZUdvdDBSZWYuY3VycmVudCkge1xuICAgICAgICB0ZXN0UG9pbnRlck1vdmUwLmRvbmUoKTtcbiAgICAgICAgcG9pbnRlcm1vdmVOb0NhcHR1cmVHb3QwUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzUG9pbnRlckNhcHR1cmVSZWYuY3VycmVudCAmJiB0YXJnZXQwICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qge2NsaWVudFgsIGNsaWVudFl9ID0gZXZ0Lm5hdGl2ZUV2ZW50O1xuICAgICAgICBjb25zdCB7bGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tfSA9XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgICAgdGFyZ2V0MC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoIXBvaW50ZXJtb3ZlQ2FwdHVyZUdvdDBSZWYuY3VycmVudCkge1xuICAgICAgICAgIGhhcm5lc3MudGVzdChcbiAgICAgICAgICAgICh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgICAgICBldnQubmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICdyZWxhdGVkVGFyZ2V0IGlzIG51bGwgd2hlbiB0aGUgY2FwdHVyZSBpcyBzZXQnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyZWxhdGVkVGFyZ2V0IGlzIG51bGwgd2hlbiB0aGUgY2FwdHVyZSBpcyBzZXQuJyxcbiAgICAgICAgICAgIHtza2lwOiB0cnVlfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGhhcm5lc3MudGVzdCgoe2Fzc2VydF90cnVlfSkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0X3RydWUoXG4gICAgICAgICAgICAgIGNsaWVudFggPCBsZWZ0IHx8XG4gICAgICAgICAgICAgICAgY2xpZW50WCA+IHJpZ2h0IHx8XG4gICAgICAgICAgICAgICAgY2xpZW50WSA8IHRvcCB8fFxuICAgICAgICAgICAgICAgIGNsaWVudFkgPiBib3R0b20sXG4gICAgICAgICAgICAgICdwb2ludGVybW92ZSByZWNlaXZlZCBmb3IgY2FwdHVyZWQgZWxlbWVudCB3aGlsZSBvdXQgb2YgaXQnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LCAncG9pbnRlcm1vdmUgcmVjZWl2ZWQgZm9yIGNhcHR1cmVkIGVsZW1lbnQgd2hpbGUgb3V0IG9mIGl0Jyk7XG4gICAgICAgICAgcG9pbnRlcm1vdmVDYXB0dXJlR290MFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2xpZW50WCA+IGxlZnQgJiZcbiAgICAgICAgICBjbGllbnRYIDwgcmlnaHQgJiZcbiAgICAgICAgICBjbGllbnRZID4gdG9wICYmXG4gICAgICAgICAgY2xpZW50WSA8IGJvdHRvbSAmJlxuICAgICAgICAgICFvd25FdmVudEZvclRoZUNhcHR1cmVkVGFyZ2V0R290UmVmLmN1cnJlbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFybmVzcy50ZXN0KCh7YXNzZXJ0X3RydWV9KSA9PiB7XG4gICAgICAgICAgICBhc3NlcnRfdHJ1ZShcbiAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgJ3BvaW50ZXJtb3ZlIHJlY2VpdmVkIGZvciBjYXB0dXJlZCBlbGVtZW50IHdoaWxlIGluc2lkZSBvZiBpdCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sICdwb2ludGVybW92ZSByZWNlaXZlZCBmb3IgY2FwdHVyZWQgZWxlbWVudCB3aGlsZSBpbnNpZGUgb2YgaXQnKTtcbiAgICAgICAgICBvd25FdmVudEZvclRoZUNhcHR1cmVkVGFyZ2V0R290UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFybmVzcywgdGVzdFBvaW50ZXJNb3ZlMF0sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGFyZ2V0MVBvaW50ZXJNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2dDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBoYXJuZXNzLnRlc3QoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIGlzUG9pbnRlckNhcHR1cmVSZWYuY3VycmVudCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcInBvaW50ZXJtb3ZlIHNob3VsZG4ndCB0cmlnZ2VyIGZvciB0aGlzIHRhcmdldCB3aGVuIGNhcHR1cmUgaXMgZW5hYmxlZFwiLFxuICAgICAgICApO1xuICAgICAgfSwgXCJwb2ludGVybW92ZSBzaG91bGRuJ3QgdHJpZ2dlciBmb3IgdGhlIHB1cnBsZSByZWN0YW5nbGUgd2hpbGUgdGhlIGJsYWNrIHJlY3RhbmdsZSBoYXMgY2FwdHVyZVwiKTtcblxuICAgICAgaWYgKCFwb2ludGVybW92ZU5vQ2FwdHVyZUdvdDFSZWYuY3VycmVudCkge1xuICAgICAgICB0ZXN0UG9pbnRlck1vdmUxLmRvbmUoKTtcbiAgICAgICAgcG9pbnRlcm1vdmVOb0NhcHR1cmVHb3QxUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2hhcm5lc3MsIHRlc3RQb2ludGVyTW92ZTFdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPFZpZXdcbiAgICAgICAgcmVmPXt0YXJnZXQwUmVmfVxuICAgICAgICBvbkdvdFBvaW50ZXJDYXB0dXJlPXtoYW5kbGVUYXJnZXQwR290UG9pbnRlckNhcHR1cmV9XG4gICAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPXtoYW5kbGVUYXJnZXQwTG9zdFBvaW50ZXJDYXB0dXJlfVxuICAgICAgICBvblBvaW50ZXJNb3ZlPXtoYW5kbGVUYXJnZXQwUG9pbnRlck1vdmV9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMudGFyZ2V0MH1cbiAgICAgIC8+XG4gICAgICA8Vmlld1xuICAgICAgICByZWY9e3RhcmdldDFSZWZ9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMudGFyZ2V0MX1cbiAgICAgICAgb25Qb2ludGVyTW92ZT17aGFuZGxlVGFyZ2V0MVBvaW50ZXJNb3ZlfVxuICAgICAgLz5cbiAgICAgIDxWaWV3XG4gICAgICAgIG9uUG9pbnRlckRvd249e2hhbmRsZUNhcHR1cmVCdXR0b25Eb3dufVxuICAgICAgICBzdHlsZT17c3R5bGVzLmNhcHR1cmVCdXR0b259PlxuICAgICAgICA8VGV4dD5TZXQgQ2FwdHVyZTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY2FwdHVyZUJ1dHRvbjoge1xuICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2xpZ2h0Ymx1ZScsXG4gICAgcGFkZGluZ0hvcml6b250YWw6IDMyLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogMTYsXG4gICAgYm9yZGVyUmFkaXVzOiA4LFxuICB9LFxuICBjb250YWluZXI6IHt9LFxuICB0YXJnZXQwOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmxhY2snLFxuICAgIHBhZGRpbmc6IDMyLFxuICAgIG1hcmdpbkJvdHRvbTogMTYsXG4gIH0sXG4gIHRhcmdldDE6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdwdXJwbGUnLFxuICAgIHBhZGRpbmc6IDMyLFxuICAgIG1hcmdpbkJvdHRvbTogMTYsXG4gIH0sXG59KTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fT47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb2ludGVyRXZlbnRDYXB0dXJlTW91c2UoXG4gIHByb3BzOiBQcm9wcyxcbik6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPFJOVGVzdGVyUGxhdGZvcm1UZXN0XG4gICAgICBjb21wb25lbnQ9e1BvaW50ZXJFdmVudENhcHR1cmVNb3VzZVRlc3RDYXNlfVxuICAgICAgZGVzY3JpcHRpb249XCJUaGlzIHRlc3QgY2hlY2tzIGlmIHNldENhcHR1cmUvcmVsZWFzZUNhcHR1cmUgZnVuY3Rpb25zIHdvcmtzIHByb3Blcmx5LlwiXG4gICAgICBpbnN0cnVjdGlvbnM9e1tcbiAgICAgICAgJ01vdmUgeW91ciBtb3VzZSBvdmVyIHRoZSBibGFjayByZWN0YW5nbGUuIHBvaW50ZXJtb3ZlIGV2ZW50IHNob3VsZCBiZSBsb2dnZWQgaW4gdGhlIGJsYWNrIHJlY3RhbmdsZScsXG4gICAgICAgICdNb3ZlIHlvdXIgbW91c2Ugb3ZlciB0aGUgcHVycGxlIHJlY3RhbmdsZS4gcG9pbnRlcm92ZXIgZXZlbnQgc2hvdWxkIGJlIGxvZ2dlZCBpbiB0aGUgcHVycGxlIHJlY3RhbmdsZScsXG4gICAgICAgICdQcmVzcyBhbmQgaG9sZCBsZWZ0IG1vdXNlIGJ1dHRvbiBvdmVyIFwiU2V0IENhcHR1cmVcIiBidXR0b24uIFwiZ290cG9pbnRlcmNhcHR1cmVcIiBzaG91bGQgYmUgbG9nZ2VkIGluIHRoZSBibGFjayByZWN0YW5nbGUnLFxuICAgICAgICAnTW92ZSB5b3VyIG1vdXNlIGFueXdoZXJlLiBwb2ludGVybW92ZSBzaG91bGQgYmUgbG9nZ2VkIGluIHRoZSBibGFjayByZWN0YW5nbGUnLFxuICAgICAgICAnTW92ZSB5b3VyIG1vdXNlIG92ZXIgdGhlIHB1cnBsZSByZWN0YW5nbGUuIE5vdGhpZyBzaG91bGQgaGFwcGVuJyxcbiAgICAgICAgJ01vdmUgeW91ciBtb3VzZSBvdmVyIHRoZSBibGFjayByZWN0YW5nbGUuIHBvaW50ZXJtb3ZlIHNob3VsZCBiZSBsb2dnZWQgaW4gdGhlIGJsYWNrIHJlY3RhbmdsZScsXG4gICAgICAgICdSZWxlYXNlIGxlZnQgbW91c2UgYnV0dG9uLiBcImxvc3Rwb2ludGVyY2FwdHVyZVwiIHNob3VsZCBiZSBsb2dnZWQgaW4gdGhlIGJsYWNrIHJlY3RhbmdsZScsXG4gICAgICBdfVxuICAgICAgdGl0bGU9XCJQb2ludGVyIEV2ZW50cyBjYXB0dXJlIHRlc3RcIlxuICAgIC8+XG4gICk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wc30gZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0VHlwZXMnO1xuaW1wb3J0IHR5cGUge1BsYXRmb3JtVGVzdENvbnRleHR9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcbmltcG9ydCB0eXBlIHtQb2ludGVyRXZlbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3QgZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0JztcbmltcG9ydCB7Y2hlY2tfUG9pbnRlckV2ZW50fSBmcm9tICcuL1BvaW50ZXJFdmVudFN1cHBvcnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIGNoZWNrQ2xpY2tFdmVudFByb3BlcnRpZXMoXG4gIGFzc2VydF9lcXVhbHM6IFBsYXRmb3JtVGVzdENvbnRleHRbJ2Fzc2VydF9lcXVhbHMnXSxcbiAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbikge1xuICBhc3NlcnRfZXF1YWxzKGV2ZW50Lm5hdGl2ZUV2ZW50LndpZHRoLCAxLCAnZGVmYXVsdCB3aWR0aCBpcyAxJyk7XG4gIGFzc2VydF9lcXVhbHMoZXZlbnQubmF0aXZlRXZlbnQuaGVpZ2h0LCAxLCAnZGVmYXVsdCBoZWlnaHQgaXMgMScpO1xuICBhc3NlcnRfZXF1YWxzKGV2ZW50Lm5hdGl2ZUV2ZW50LnByZXNzdXJlLCAwLCAnZGVmYXVsdCBwcmVzc3VyZSBpcyAwJyk7XG4gIGFzc2VydF9lcXVhbHMoXG4gICAgZXZlbnQubmF0aXZlRXZlbnQudGFuZ2VudGlhbFByZXNzdXJlLFxuICAgIDAsXG4gICAgJ2RlZmF1bHQgdGFuZ2VudGlhbFByZXNzdXJlIGlzIDAnLFxuICApO1xuICBhc3NlcnRfZXF1YWxzKGV2ZW50Lm5hdGl2ZUV2ZW50LnRpbHRYLCAwLCAnZGVmYXVsdCB0aWx0WCBpcyAwJyk7XG4gIGFzc2VydF9lcXVhbHMoZXZlbnQubmF0aXZlRXZlbnQudGlsdFksIDAsICdkZWZhdWx0IHRpbHRZIGlzIDAnKTtcbiAgYXNzZXJ0X2VxdWFscyhldmVudC5uYXRpdmVFdmVudC50d2lzdCwgMCwgJ2RlZmF1bHQgdHdpc3QgaXMgMCcpO1xuICBhc3NlcnRfZXF1YWxzKFxuICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmlzUHJpbWFyeSxcbiAgICBmYWxzZSxcbiAgICAnZGVmYXVsdCBpc1ByaW1hcnkgaXMgZmFsc2UnLFxuICApO1xufVxuXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRDbGlja1RvdWNoVGVzdENhc2UocHJvcHM6IFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcykge1xuICBjb25zdCB7aGFybmVzc30gPSBwcm9wcztcblxuICBjb25zdCBoYXNTZWVuUG9pbnRlckRvd24gPSB1c2VSZWY8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBoYXNTZWVuUG9pbnRlclVwID0gdXNlUmVmPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgaGFzU2VlbkNsaWNrID0gdXNlUmVmPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdCB0ZXN0UG9pbnRlckNsaWNrID0gaGFybmVzcy51c2VBc3luY1Rlc3QoJ2NsaWNrIGV2ZW50IHJlY2VpdmVkJyk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBpZiAoaGFzU2VlbkNsaWNrLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaGFzU2VlbkNsaWNrLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgdGVzdFBvaW50ZXJDbGljay5zdGVwKCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICBoYXNTZWVuUG9pbnRlckRvd24uY3VycmVudCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgICdwb2ludGVyZG93biB3YXMgcmVjZWl2ZWQnLFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnRfZXF1YWxzKGhhc1NlZW5Qb2ludGVyVXAuY3VycmVudCwgdHJ1ZSwgJ3BvaW50ZXJ1cCB3YXMgcmVjZWl2ZWQnKTtcbiAgICAgICAgY2hlY2tDbGlja0V2ZW50UHJvcGVydGllcyhhc3NlcnRfZXF1YWxzLCBlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGVja19Qb2ludGVyRXZlbnQoaGFybmVzcywgZSwgJ2NsaWNrJywge30pO1xuICAgICAgdGVzdFBvaW50ZXJDbGljay5kb25lKCk7XG4gICAgfSxcbiAgICBbaGFybmVzcywgdGVzdFBvaW50ZXJDbGlja10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBpZiAoaGFzU2VlblBvaW50ZXJEb3duLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaGFzU2VlblBvaW50ZXJEb3duLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgdGVzdFBvaW50ZXJDbGljay5zdGVwKCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICBoYXNTZWVuUG9pbnRlclVwLmN1cnJlbnQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ3BvaW50ZXJ1cCB3YXMgbm90IHJlY2VpdmVkJyxcbiAgICAgICAgKTtcbiAgICAgICAgYXNzZXJ0X2VxdWFscyhoYXNTZWVuQ2xpY2suY3VycmVudCwgZmFsc2UsICdjbGljayB3YXMgbm90IHJlY2VpdmVkJyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFt0ZXN0UG9pbnRlckNsaWNrXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyVXAgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBpZiAoaGFzU2VlblBvaW50ZXJVcC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGhhc1NlZW5Qb2ludGVyVXAuY3VycmVudCA9IHRydWU7XG4gICAgICB0ZXN0UG9pbnRlckNsaWNrLnN0ZXAoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIGhhc1NlZW5Qb2ludGVyRG93bi5jdXJyZW50LFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgJ3BvaW50ZXJkb3duIHdhcyByZWNlaXZlZCcsXG4gICAgICAgICk7XG4gICAgICAgIGFzc2VydF9lcXVhbHMoaGFzU2VlbkNsaWNrLmN1cnJlbnQsIGZhbHNlLCAnY2xpY2sgd2FzIG5vdCByZWNlaXZlZCcpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdGVzdFBvaW50ZXJDbGlja10sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Vmlld1xuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtoYW5kbGVQb2ludGVyRG93bn1cbiAgICAgIG9uUG9pbnRlclVwPXtoYW5kbGVQb2ludGVyVXB9XG4gICAgICBzdHlsZT17c3R5bGVzLnRhcmdldH1cbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHRhcmdldDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgICBoZWlnaHQ6IDY0LFxuICAgIHdpZHRoOiAnMTAwJScsXG4gIH0sXG59KTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fT47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb2ludGVyRXZlbnRDbGlja1RvdWNoKFxuICBwcm9wczogUHJvcHMsXG4pOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICByZXR1cm4gKFxuICAgIDxSTlRlc3RlclBsYXRmb3JtVGVzdFxuICAgICAgY29tcG9uZW50PXtQb2ludGVyRXZlbnRDbGlja1RvdWNoVGVzdENhc2V9XG4gICAgICBkZXNjcmlwdGlvbj1cIlRoaXMgdGVzdCBjaGVja3MgaWYgdGhlIGNsaWNrIGV2ZW50IHRyaWdnZXJzLlwiXG4gICAgICBpbnN0cnVjdGlvbnM9e1snQ2xpY2sgb3IgdGFwIG9uIHRoZSBibGFjayByZWN0YW5nbGUuJ119XG4gICAgICB0aXRsZT1cIkNsaWNrIHRlc3RcIlxuICAgIC8+XG4gICk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wc30gZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0VHlwZXMnO1xuaW1wb3J0IHR5cGUge0V2ZW50T2NjdXJyZW5jZX0gZnJvbSAnLi9Qb2ludGVyRXZlbnRTdXBwb3J0JztcblxuaW1wb3J0IFJOVGVzdGVyUGxhdGZvcm1UZXN0IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdCc7XG5pbXBvcnQge0V2ZW50VHJhY2tlcn0gZnJvbSAnLi9Qb2ludGVyRXZlbnRTdXBwb3J0JztcbmltcG9ydCB7bWtFdmVudH0gZnJvbSAnLi9Qb2ludGVyRXZlbnRTdXBwb3J0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IGV2ZW50c1RvVHJhY2sgPSBbJ29uQ2xpY2snLCAnb25Qb2ludGVyRG93bicsICdvblBvaW50ZXJVcCddO1xuXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5VGVzdENhc2UoXG4gIHByb3BzOiBQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHMsXG4pIHtcbiAgY29uc3Qge2hhcm5lc3N9ID0gcHJvcHM7XG5cbiAgY29uc3QgZXZlbnRzSW5PcmRlciA9IHVzZVJlZjxBcnJheTxFdmVudE9jY3VycmVuY2U+PihbXSk7XG5cbiAgY29uc3QgdGVzdFBvaW50ZXJDbGljayA9IGhhcm5lc3MudXNlQXN5bmNUZXN0KFxuICAgICdjbGljayBldmVudCByZWNlaXZlZCBpbiBoaWVyYXJjaHknLFxuICApO1xuXG4gIGNvbnN0IGNoZWNrUmVzdWx0cyA9ICgpID0+IHtcbiAgICB0ZXN0UG9pbnRlckNsaWNrLnN0ZXAoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRzUmVjZWl2ZWQgPSBldmVudHNJbk9yZGVyLmN1cnJlbnQ7XG4gICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICBldmVudHNSZWNlaXZlZC5sZW5ndGgsXG4gICAgICAgIDE0LFxuICAgICAgICAncmVjZWl2ZWQgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBldmVudHMnLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNoaWxkVG9QYXJlbnRFdmVudHMgPSBldmVudHNSZWNlaXZlZC5zbGljZSgwLCA0KTtcbiAgICAgIGNvbnN0IHBhcmVudFRvQ2hpbGRFdmVudHMgPSBldmVudHNSZWNlaXZlZC5zbGljZSg0LCA4KTtcbiAgICAgIGNvbnN0IGNoaWxkT25seUV2ZW50cyA9IGV2ZW50c1JlY2VpdmVkLnNsaWNlKDgpO1xuICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hpbGRUb1BhcmVudEV2ZW50cyksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICBta0V2ZW50KCdjaGlsZCcsICdvblBvaW50ZXJEb3duJyksXG4gICAgICAgICAgbWtFdmVudCgncGFyZW50JywgJ29uUG9pbnRlckRvd24nKSxcbiAgICAgICAgICBta0V2ZW50KCdwYXJlbnQnLCAnb25Qb2ludGVyVXAnKSxcbiAgICAgICAgICBta0V2ZW50KCdwYXJlbnQnLCAnb25DbGljaycpLFxuICAgICAgICBdKSxcbiAgICAgICAgJ2NvcnJlY3QgZXZlbnRzIHdoZW4gbW92aW5nIGNoaWxkIC0+IHBhcmVudCcsXG4gICAgICApO1xuICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocGFyZW50VG9DaGlsZEV2ZW50cyksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICBta0V2ZW50KCdwYXJlbnQnLCAnb25Qb2ludGVyRG93bicpLFxuICAgICAgICAgIG1rRXZlbnQoJ2NoaWxkJywgJ29uUG9pbnRlclVwJyksXG4gICAgICAgICAgbWtFdmVudCgncGFyZW50JywgJ29uUG9pbnRlclVwJyksXG4gICAgICAgICAgbWtFdmVudCgncGFyZW50JywgJ29uQ2xpY2snKSxcbiAgICAgICAgXSksXG4gICAgICAgICdjb3JyZWN0IGV2ZW50cyB3aGVuIG1vdmluZyBwYXJlbnQgLT4gY2hpbGQnLFxuICAgICAgKTtcbiAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGNoaWxkT25seUV2ZW50cyksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICBta0V2ZW50KCdjaGlsZCcsICdvblBvaW50ZXJEb3duJyksXG4gICAgICAgICAgbWtFdmVudCgncGFyZW50JywgJ29uUG9pbnRlckRvd24nKSxcbiAgICAgICAgICBta0V2ZW50KCdjaGlsZCcsICdvblBvaW50ZXJVcCcpLFxuICAgICAgICAgIG1rRXZlbnQoJ3BhcmVudCcsICdvblBvaW50ZXJVcCcpLFxuICAgICAgICAgIG1rRXZlbnQoJ2NoaWxkJywgJ29uQ2xpY2snKSxcbiAgICAgICAgICBta0V2ZW50KCdwYXJlbnQnLCAnb25DbGljaycpLFxuICAgICAgICBdKSxcbiAgICAgICAgJ2NvcnJlY3QgZXZlbnRzIHdoZW4gY2xpY2tpbmcgb24gY2hpbGQnLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0ZXN0UG9pbnRlckNsaWNrLmRvbmUoKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3PlxuICAgICAgPEV2ZW50VHJhY2tlclxuICAgICAgICBpZD1cInBhcmVudFwiXG4gICAgICAgIGV2ZW50c1JlZj17ZXZlbnRzSW5PcmRlcn1cbiAgICAgICAgZXZlbnRzVG9UcmFjaz17ZXZlbnRzVG9UcmFja31cbiAgICAgICAgc3R5bGU9e3N0eWxlcy50YXJnZXRQYXJlbnR9PlxuICAgICAgICA8RXZlbnRUcmFja2VyXG4gICAgICAgICAgaWQ9XCJjaGlsZFwiXG4gICAgICAgICAgZXZlbnRzUmVmPXtldmVudHNJbk9yZGVyfVxuICAgICAgICAgIGV2ZW50c1RvVHJhY2s9e2V2ZW50c1RvVHJhY2t9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy50YXJnZXR9XG4gICAgICAgIC8+XG4gICAgICA8L0V2ZW50VHJhY2tlcj5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY2hlY2tSZXN1bHRzfSBvbkNsaWNrPXtjaGVja1Jlc3VsdHN9IC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHRhcmdldFBhcmVudDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgICBoZWlnaHQ6IDY0LFxuICAgIHdpZHRoOiAnMTAwJScsXG4gIH0sXG4gIHRhcmdldDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgIGhlaWdodDogNjQsXG4gICAgd2lkdGg6IDY0LFxuICB9LFxuICBjaGVja1Jlc3VsdHM6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gICAgaGVpZ2h0OiA2NCxcbiAgICB3aWR0aDogNjQsXG4gIH0sXG59KTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fT47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5KFxuICBwcm9wczogUHJvcHMsXG4pOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICByZXR1cm4gKFxuICAgIDxSTlRlc3RlclBsYXRmb3JtVGVzdFxuICAgICAgY29tcG9uZW50PXtQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5VGVzdENhc2V9XG4gICAgICBkZXNjcmlwdGlvbj1cIlRoaXMgdGVzdCBjaGVja3MgaWYgdGhlIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHByb3Blcmx5IGluIGEgaGllcmFyY2h5LlwiXG4gICAgICBpbnN0cnVjdGlvbnM9e1tcbiAgICAgICAgJ1N0YXJ0IGEgdG91Y2ggb24gdGhlIGJsdWUgcmVjdGFuZ2xlJyxcbiAgICAgICAgJ01vdmUgeW91ciBmaW5nZXIgb3ZlciB0aGUgYmxhY2sgcmVjdGFuZ2xlJyxcbiAgICAgICAgJ1JlbGVhc2UgdGhlIHRvdWNoJyxcbiAgICAgICAgJ1N0YXJ0IGEgbmV3IHRvdWNoIG9uIHRoZSBibGFjayByZWN0YW5nbGUnLFxuICAgICAgICAnTW92ZSB5b3VyIGZpbmdlciBvdmVyIHRoZSBibHVlIHJlY3RhbmdsZScsXG4gICAgICAgICdSZWxlYXNlIHRoZSB0b3VjaCcsXG4gICAgICAgICdTdGFydCBhIG5ldyB0b3VjaCBvbiB0aGUgYmx1ZSByZWN0YW5nbGUnLFxuICAgICAgICAnUmVsZWFzZSB0aGUgdG91Y2ggKHN0aWxsIG9uIGJsdWUgcmVjdGFuZ2xlKScsXG4gICAgICAgICdUYXAgdGhlIGdyZWVuIHJlY3RhbmdsZSB0byBjaGVjayByZXN1bHRzJyxcbiAgICAgIF19XG4gICAgICB0aXRsZT1cIkNsaWNrIGhpZXJhcmNoeSB0ZXN0XCJcbiAgICAvPlxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHN9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcbmltcG9ydCB0eXBlIHtFdmVudE9jY3VycmVuY2UsIEV2ZW50VHJhY2tlclByb3BzfSBmcm9tICcuL1BvaW50ZXJFdmVudFN1cHBvcnQnO1xuaW1wb3J0IHR5cGUge1ZpZXdQcm9wc30gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db21wb25lbnRzL1ZpZXcvVmlld1Byb3BUeXBlcyc7XG5cbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdCBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3QnO1xuaW1wb3J0IHtFdmVudFRyYWNrZXIsIG1rRXZlbnR9IGZyb20gJy4vUG9pbnRlckV2ZW50U3VwcG9ydCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRCb3hQYXJlbnRDaGlsZChwcm9wczoge1xuICBldmVudHNUb1RyYWNrOiBFdmVudFRyYWNrZXJQcm9wc1snZXZlbnRzVG9UcmFjayddLFxuICBldmVudHNSZWY6IEV2ZW50VHJhY2tlclByb3BzWydldmVudHNSZWYnXSxcbiAgcG9pbnRlckV2ZW50czogJE5vbk1heWJlVHlwZTxWaWV3UHJvcHNbJ3BvaW50ZXJFdmVudHMnXT4sXG4gIGNoaWxkU3R5bGU6IFZpZXdQcm9wc1snc3R5bGUnXSxcbiAgcGFyZW50U3R5bGVPdmVycmlkZT86IFZpZXdQcm9wc1snc3R5bGUnXSxcbn0pIHtcbiAgY29uc3QgcGFyZW50SWQgPSBgcGFyZW50XyR7cHJvcHMucG9pbnRlckV2ZW50c31gO1xuICBjb25zdCBjaGlsZElkID0gYGNoaWxkXyR7cHJvcHMucG9pbnRlckV2ZW50c31gO1xuICByZXR1cm4gKFxuICAgIDxFdmVudFRyYWNrZXJcbiAgICAgIGV2ZW50c1JlZj17cHJvcHMuZXZlbnRzUmVmfVxuICAgICAgZXZlbnRzVG9UcmFjaz17cHJvcHMuZXZlbnRzVG9UcmFja31cbiAgICAgIGlkPXtwYXJlbnRJZH1cbiAgICAgIHN0eWxlPXtTdHlsZVNoZWV0LmNvbXBvc2Uoc3R5bGVzLnBhcmVudCwgcHJvcHMucGFyZW50U3R5bGVPdmVycmlkZSl9XG4gICAgICBwb2ludGVyRXZlbnRzPXtwcm9wcy5wb2ludGVyRXZlbnRzfT5cbiAgICAgIDxFdmVudFRyYWNrZXJcbiAgICAgICAgZXZlbnRzUmVmPXtwcm9wcy5ldmVudHNSZWZ9XG4gICAgICAgIGV2ZW50c1RvVHJhY2s9e3Byb3BzLmV2ZW50c1RvVHJhY2t9XG4gICAgICAgIGlkPXtjaGlsZElkfVxuICAgICAgICBzdHlsZT17cHJvcHMuY2hpbGRTdHlsZX1cbiAgICAgIC8+XG4gICAgPC9FdmVudFRyYWNrZXI+XG4gICk7XG59XG5cbmNvbnN0IGV2ZW50c1RvVHJhY2sgPSBbJ29uQ2xpY2snXTtcblxuZnVuY3Rpb24gUG9pbnRlckV2ZW50Q2xpY2tUb3VjaEhpZXJhcmNoeVBvaW50ZXJFdmVudHNUZXN0Q2FzZShcbiAgcHJvcHM6IFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcyxcbikge1xuICBjb25zdCB7aGFybmVzc30gPSBwcm9wcztcblxuICBjb25zdCBldmVudHNJbk9yZGVyID0gdXNlUmVmPEFycmF5PEV2ZW50T2NjdXJyZW5jZT4+KFtdKTtcblxuICBjb25zdCB0ZXN0UG9pbnRlckNsaWNrID0gaGFybmVzcy51c2VBc3luY1Rlc3QoXG4gICAgJ2NsaWNrIGV2ZW50IHJlY2VpdmVkIGluIGhpZXJhcmNoeSB3aXRoIHBvaW50ZXJFdmVudHMnLFxuICApO1xuXG4gIGNvbnN0IGNoZWNrUmVzdWx0cyA9ICgpID0+IHtcbiAgICB0ZXN0UG9pbnRlckNsaWNrLnN0ZXAoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRzUmVjZWl2ZWQgPSBldmVudHNJbk9yZGVyLmN1cnJlbnQ7XG4gICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICBldmVudHNSZWNlaXZlZC5sZW5ndGgsXG4gICAgICAgIDUsXG4gICAgICAgICdyZWNlaXZlZCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGV2ZW50cycsXG4gICAgICApO1xuICAgICAgY29uc3QgYm94T25seUV2ZW50cyA9IGV2ZW50c1JlY2VpdmVkLnNsaWNlKDAsIDEpO1xuICAgICAgY29uc3QgYm94Tm9uZUV2ZW50cyA9IGV2ZW50c1JlY2VpdmVkLnNsaWNlKDEsIDMpO1xuICAgICAgY29uc3QgYXV0b0V2ZW50cyA9IGV2ZW50c1JlY2VpdmVkLnNsaWNlKDMpO1xuICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoYm94T25seUV2ZW50cyksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFtta0V2ZW50KCdwYXJlbnRfYm94LW9ubHknLCAnb25DbGljaycpXSksXG4gICAgICAgICdjb3JyZWN0IGV2ZW50cyBmb3IgYm94LW9ubHknLFxuICAgICAgKTtcbiAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGJveE5vbmVFdmVudHMpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgbWtFdmVudCgnY2hpbGRfYm94LW5vbmUnLCAnb25DbGljaycpLFxuICAgICAgICAgIG1rRXZlbnQoJ3BhcmVudF9ib3gtbm9uZScsICdvbkNsaWNrJyksXG4gICAgICAgIF0pLFxuICAgICAgICAnY29ycmVjdCBldmVudHMgZm9yIGJveC1ub25lJyxcbiAgICAgICk7XG4gICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShhdXRvRXZlbnRzKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgIG1rRXZlbnQoJ2NoaWxkX2F1dG8nLCAnb25DbGljaycpLFxuICAgICAgICAgIG1rRXZlbnQoJ3BhcmVudF9hdXRvJywgJ29uQ2xpY2snKSxcbiAgICAgICAgXSksXG4gICAgICAgICdjb3JyZWN0IGV2ZW50cyBmb3IgYXV0bycsXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRlc3RQb2ludGVyQ2xpY2suZG9uZSgpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPFZpZXc+XG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnBhcmVudENvbnRhaW5lcn0+XG4gICAgICAgIDxQb2ludGVyRXZlbnRCb3hQYXJlbnRDaGlsZFxuICAgICAgICAgIGV2ZW50c1RvVHJhY2s9e2V2ZW50c1RvVHJhY2t9XG4gICAgICAgICAgY2hpbGRTdHlsZT17c3R5bGVzLnRhcmdldEJveE9ubHl9XG4gICAgICAgICAgcG9pbnRlckV2ZW50cz1cImJveC1vbmx5XCJcbiAgICAgICAgICBldmVudHNSZWY9e2V2ZW50c0luT3JkZXJ9XG4gICAgICAgIC8+XG4gICAgICAgIDxQb2ludGVyRXZlbnRCb3hQYXJlbnRDaGlsZFxuICAgICAgICAgIGV2ZW50c1RvVHJhY2s9e2V2ZW50c1RvVHJhY2t9XG4gICAgICAgICAgY2hpbGRTdHlsZT17c3R5bGVzLnRhcmdldEJveE5vbmV9XG4gICAgICAgICAgcG9pbnRlckV2ZW50cz1cImJveC1ub25lXCJcbiAgICAgICAgICBldmVudHNSZWY9e2V2ZW50c0luT3JkZXJ9XG4gICAgICAgICAgcGFyZW50U3R5bGVPdmVycmlkZT17e1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnbWFyb29uJyxcbiAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8UG9pbnRlckV2ZW50Qm94UGFyZW50Q2hpbGRcbiAgICAgICAgICBldmVudHNUb1RyYWNrPXtldmVudHNUb1RyYWNrfVxuICAgICAgICAgIGNoaWxkU3R5bGU9e3N0eWxlcy50YXJnZXRBdXRvfVxuICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJhdXRvXCJcbiAgICAgICAgICBldmVudHNSZWY9e2V2ZW50c0luT3JkZXJ9XG4gICAgICAgIC8+XG4gICAgICAgIDxQb2ludGVyRXZlbnRCb3hQYXJlbnRDaGlsZFxuICAgICAgICAgIGV2ZW50c1RvVHJhY2s9e2V2ZW50c1RvVHJhY2t9XG4gICAgICAgICAgY2hpbGRTdHlsZT17c3R5bGVzLnRhcmdldE5vbmV9XG4gICAgICAgICAgcG9pbnRlckV2ZW50cz1cIm5vbmVcIlxuICAgICAgICAgIGV2ZW50c1JlZj17ZXZlbnRzSW5PcmRlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuY2hlY2tSZXN1bHRzfSBvbkNsaWNrPXtjaGVja1Jlc3VsdHN9IC8+XG4gICAgPC9WaWV3PlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHBhcmVudENvbnRhaW5lcjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBnYXA6IDEwLFxuICB9LFxuICBwYXJlbnQ6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmxhY2snLFxuICAgIGhlaWdodDogODAsXG4gICAgd2lkdGg6ICcyMCUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcbiAgdGFyZ2V0Qm94T25seToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgIGhlaWdodDogNTAsXG4gICAgd2lkdGg6IDUwLFxuICB9LFxuICB0YXJnZXRCb3hOb25lOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICBoZWlnaHQ6IDUwLFxuICAgIHdpZHRoOiA1MCxcbiAgfSxcbiAgdGFyZ2V0QXV0bzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3llbGxvdycsXG4gICAgaGVpZ2h0OiA1MCxcbiAgICB3aWR0aDogNTAsXG4gIH0sXG4gIHRhcmdldE5vbmU6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdwdXJwbGUnLFxuICAgIGhlaWdodDogNTAsXG4gICAgd2lkdGg6IDUwLFxuICB9LFxuICBjaGVja1Jlc3VsdHM6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gICAgaGVpZ2h0OiA1MCxcbiAgICB3aWR0aDogJzgwJScsXG4gIH0sXG59KTtcblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fT47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5UG9pbnRlckV2ZW50cyhcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RcbiAgICAgIGNvbXBvbmVudD17UG9pbnRlckV2ZW50Q2xpY2tUb3VjaEhpZXJhcmNoeVBvaW50ZXJFdmVudHNUZXN0Q2FzZX1cbiAgICAgIGRlc2NyaXB0aW9uPVwiVGhpcyB0ZXN0IGNoZWNrcyBpZiB0aGUgY2xpY2sgZXZlbnQgdHJpZ2dlcnMgcHJvcGVybHkgaW4gYSBoaWVyYXJjaHkgd2hlbiB0aGUgYHBvaW50ZXJFdmVudHNgIHByb3BlcnR5IGlzIHVzZWQuXCJcbiAgICAgIGluc3RydWN0aW9ucz17W1xuICAgICAgICAnQ2xpY2sgKHRhcC9yZWxlYXNlKSB0aGUgYmx1ZSBzcXVhcmUnLFxuICAgICAgICAnQ2xpY2sgKHRhcC9yZWxlYXNlKSB0aGUgZGFyayByZWQgcmVjdGFuZ2xlIChvdXRlciknLFxuICAgICAgICAnQ2xpY2sgKHRhcC9yZWxlYXNlKSB0aGUgcmVkIHNxdWFyZSAoaW5uZXIpJyxcbiAgICAgICAgJ0NsaWNrICh0YXAvcmVsZWFzZSkgdGhlIHllbGxvdyBzcXVhcmUnLFxuICAgICAgICAnQ2xpY2sgKHRhcC9yZWxlYXNlKSB0aGUgcHVycGxlIHNxdWFyZScsXG4gICAgICAgICdUYXAgdGhlIGdyZWVuIHJlY3RhbmdsZSB0byBjaGVjayByZXN1bHRzJyxcbiAgICAgIF19XG4gICAgICB0aXRsZT1cIkNsaWNrIGhpZXJhcmNoeSB0ZXN0IChwb2ludGVyRXZlbnRzKVwiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzfSBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RUeXBlcyc7XG5pbXBvcnQgdHlwZSB7UG9pbnRlckV2ZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IFJOVGVzdGVyUGxhdGZvcm1UZXN0IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgc3BhY2VyOiB7XG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgfSxcbiAgcmVkOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogMTAwLFxuICAgIGhlaWdodDogMTAwLFxuICAgIHpJbmRleDogMCxcbiAgfSxcbiAgYmx1ZToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiAxMDAsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgekluZGV4OiAxLFxuICB9LFxufSk7XG5cbi8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iL21hc3Rlci91aWV2ZW50cy9tb3VzZS9sYXlvdXRfY2hhbmdlX3Nob3VsZF9maXJlX21vdXNlb3Zlci5odG1sXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRMYXlvdXRTaG91bGRGaXJlUG9pbnRlck92ZXJUZXN0Q2FzZShcbiAgcHJvcHM6IFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcyxcbikge1xuICBjb25zdCB7aGFybmVzc30gPSBwcm9wcztcblxuICBjb25zdCB0ZXN0TW91c2VPdmVyID0gaGFybmVzcy51c2VBc3luY1Rlc3QoXG4gICAgJ1Rlc3RzIHRoYXQgdGhlIHBvaW50ZXJvdmVyIGV2ZW50IGlzIGZpcmVkIGFuZCB0aGUgZWxlbWVudCBoYXMgYSBob3ZlciBlZmZlY3Qgd2hlbiB0aGUgZWxlbWVudCB1bmRlcm5lYXRoIHRoZSBtb3VzZSBjdXJzb3IgaXMgY2hhbmdlZC4nLFxuICApO1xuXG4gIGNvbnN0IFtzaG93Qmx1ZSwgc2V0U2hvd0JsdWVdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGV2ZW50TGlzdFJlZiA9IHVzZVJlZjxBcnJheTxzdHJpbmc+PihbXSk7XG5cbiAgY29uc3QgY2hlY2tFdmVudFNlcXVlbmNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRlc3RNb3VzZU92ZXIuc3RlcCgoe2Fzc2VydF9lcXVhbHN9KSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBldmVudExpc3RSZWYuY3VycmVudC5qb2luKCcsJyk7XG4gICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICByZXN1bHQsXG4gICAgICAgICdwb2ludGVyb3Zlcixwb2ludGVyZW50ZXInLFxuICAgICAgICAnVGhlIG9ubHkgZXZlbnRzIHJlY29yZGVkIHNob3VsZCBiZSBwb2ludGVyb3ZlciBhbmQgcG9pbnRlcmVudGVyIChpbiB0aGF0IG9yZGVyKScsXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRlc3RNb3VzZU92ZXIuZG9uZSgpO1xuICB9LCBbdGVzdE1vdXNlT3Zlcl0pO1xuXG4gIGNvbnN0IHJlZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93Qmx1ZSh0cnVlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNoZWNrRXZlbnRTZXF1ZW5jZSgpO1xuICAgIH0sIDI1MDApO1xuICB9LCBbY2hlY2tFdmVudFNlcXVlbmNlXSk7XG5cbiAgY29uc3QgY3JlYXRlQmx1ZUhvdmVyRXZlbnRIYW5kbGVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50VHlwZTogc3RyaW5nKSA9PiAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgZXZlbnRMaXN0UmVmLmN1cnJlbnQucHVzaChldmVudFR5cGUpO1xuICAgICAgdGVzdE1vdXNlT3Zlci5zdGVwKCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3BvaW50ZXJlbnRlcicpIHtcbiAgICAgICAgICBjaGVja0V2ZW50U2VxdWVuY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbY2hlY2tFdmVudFNlcXVlbmNlLCB0ZXN0TW91c2VPdmVyXSxcbiAgKTtcblxuICBjb25zdCBibHVlRXZlbnRIYW5kbGVycyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIG9uUG9pbnRlck92ZXI6IGNyZWF0ZUJsdWVIb3ZlckV2ZW50SGFuZGxlcigncG9pbnRlcm92ZXInKSxcbiAgICAgIG9uUG9pbnRlck1vdmU6IGNyZWF0ZUJsdWVIb3ZlckV2ZW50SGFuZGxlcigncG9pbnRlcm1vdmUnKSxcbiAgICAgIG9uUG9pbnRlckVudGVyOiBjcmVhdGVCbHVlSG92ZXJFdmVudEhhbmRsZXIoJ3BvaW50ZXJlbnRlcicpLFxuICAgICAgb25Qb2ludGVyTGVhdmU6IGNyZWF0ZUJsdWVIb3ZlckV2ZW50SGFuZGxlcigncG9pbnRlcmxlYXZlJyksXG4gICAgfSksXG4gICAgW2NyZWF0ZUJsdWVIb3ZlckV2ZW50SGFuZGxlcl0sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5zcGFjZXJ9IC8+XG4gICAgICA8VmlldyBvblBvaW50ZXJVcD17cmVkQ2xpY2tIYW5kbGVyfSBzdHlsZT17c3R5bGVzLnJlZH0gLz5cbiAgICAgIHtzaG93Qmx1ZSAmJiA8VmlldyB7Li4uYmx1ZUV2ZW50SGFuZGxlcnN9IHN0eWxlPXtzdHlsZXMuYmx1ZX0gLz59XG4gICAgPC8+XG4gICk7XG59XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e30+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50TGF5b3V0U2hvdWxkRmlyZVBvaW50ZXJPdmVyKFxuICBwcm9wczogUHJvcHMsXG4pOiBSZWFjdC5NaXhlZEVsZW1lbnQge1xuICByZXR1cm4gKFxuICAgIDxSTlRlc3RlclBsYXRmb3JtVGVzdFxuICAgICAgY29tcG9uZW50PXtQb2ludGVyRXZlbnRMYXlvdXRTaG91bGRGaXJlUG9pbnRlck92ZXJUZXN0Q2FzZX1cbiAgICAgIGRlc2NyaXB0aW9uPVwiVGVzdHMgdGhhdCB0aGUgcG9pbnRlcm92ZXIgZXZlbnQgaXMgZmlyZWQgYW5kIHRoZSBlbGVtZW50IGhhcyBhIGhvdmVyIGVmZmVjdCB3aGVuIHRoZSBlbGVtZW50IHVuZGVybmVhdGggdGhlIG1vdXNlIGN1cnNvciBpcyBjaGFuZ2VkLlwiXG4gICAgICBpbnN0cnVjdGlvbnM9e1tcbiAgICAgICAgJ1B1dCB5b3VyIG1vdXNlIG92ZXIgdGhlIHJlZCByZWN0YW5nbGUnLFxuICAgICAgICAnQ2xpY2sgdGhlIHByaW1hcnkgbW91c2UgYnV0dG9uJyxcbiAgICAgIF19XG4gICAgICB0aXRsZT1cIlBvaW50ZXJvdmVyL2VudGVyIGlzIHNlbnQgb24gbGF5b3V0IGNoYW5nZVwiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzfSBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RUeXBlcyc7XG5pbXBvcnQgdHlwZSB7UG9pbnRlckV2ZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IFJOVGVzdGVyUGxhdGZvcm1UZXN0IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdCc7XG5pbXBvcnQge2NoZWNrX1BvaW50ZXJFdmVudH0gZnJvbSAnLi9Qb2ludGVyRXZlbnRTdXBwb3J0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JvbGxWaWV3LCBTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG4vLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvYmxvYi9tYXN0ZXIvcG9pbnRlcmV2ZW50cy9wb2ludGVyZXZlbnRfcG9pbnRlcmNhbmNlbF90b3VjaC5odG1sXG5mdW5jdGlvbiBQb2ludGVyRXZlbnRQb2ludGVyQ2FuY2VsVG91Y2hUZXN0Q2FzZShcbiAgcHJvcHM6IFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcyxcbikge1xuICBjb25zdCB7aGFybmVzc30gPSBwcm9wcztcblxuICBjb25zdCB0ZXN0UG9pbnRlckV2ZW50ID0gaGFybmVzcy51c2VBc3luY1Rlc3QoJ3BvaW50ZXJjYW5jZWwgZXZlbnQgcmVjaWV2ZWQnKTtcblxuICBjb25zdCBwb2ludGVyRG93bkV2ZW50UmVmID0gdXNlUmVmPFBvaW50ZXJFdmVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBwb2ludGVyQ2FuY2VsRXZlbnRSZWYgPSB1c2VSZWY8UG9pbnRlckV2ZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSB1c2VDYWxsYmFjaygoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICBwb2ludGVyRG93bkV2ZW50UmVmLmN1cnJlbnQgPSBldmVudDtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJDYW5jZWwgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgcG9pbnRlckNhbmNlbEV2ZW50UmVmLmN1cnJlbnQgPSBldmVudDtcblxuICAgICAgdGVzdFBvaW50ZXJFdmVudC5zdGVwKCh7YXNzZXJ0X2VxdWFscywgYXNzZXJ0X25vdF9lcXVhbHN9KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvaW50ZXJEb3duRXZlbnQgPSBwb2ludGVyRG93bkV2ZW50UmVmLmN1cnJlbnQ7XG4gICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKHBvaW50ZXJEb3duRXZlbnQsIG51bGwsICdwb2ludGVyZG93biB3YXMgcmVjaWV2ZWQ6ICcpO1xuICAgICAgICBpZiAocG9pbnRlckRvd25FdmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgICAgIHBvaW50ZXJEb3duRXZlbnQubmF0aXZlRXZlbnQucG9pbnRlcklkLFxuICAgICAgICAgICAgJ3BvaW50ZXJJZCBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIHBvaW50ZXJkb3duIGFuZCBwb2ludGVyY2FuY2VsJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5wb2ludGVyVHlwZSxcbiAgICAgICAgICAgIHBvaW50ZXJEb3duRXZlbnQubmF0aXZlRXZlbnQucG9pbnRlclR5cGUsXG4gICAgICAgICAgICAncG9pbnRlclR5cGUgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBwb2ludGVyZG93biBhbmQgcG9pbnRlcmNhbmNlbCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuaXNQcmltYXJ5LFxuICAgICAgICAgICAgcG9pbnRlckRvd25FdmVudC5uYXRpdmVFdmVudC5pc1ByaW1hcnksXG4gICAgICAgICAgICAnaXNQcmltYXJ5IHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgcG9pbnRlcmRvd24gYW5kIHBvaW50ZXJjYW5jZWwnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGVja19Qb2ludGVyRXZlbnQoaGFybmVzcywgZXZlbnQsICdwb2ludGVyQ2FuY2VsJywge30pO1xuXG4gICAgICB0ZXN0UG9pbnRlckV2ZW50LnN0ZXAoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50Lm5hdGl2ZUV2ZW50LngsIDAsICdwb2ludGVyY2FuY2VsLnggbXVzdCBiZSB6ZXJvJyk7XG4gICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnQubmF0aXZlRXZlbnQueSwgMCwgJ3BvaW50ZXJjYW5jZWwueSBtdXN0IGJlIHplcm8nKTtcbiAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5jbGllbnRYLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgJ3BvaW50ZXJjYW5jZWwuY2xpZW50WCBtdXN0IGJlIHplcm8nLFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmNsaWVudFksXG4gICAgICAgICAgMCxcbiAgICAgICAgICAncG9pbnRlcmNhbmNlbC5jbGllbnRZIG11c3QgYmUgemVybycsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtoYXJuZXNzLCB0ZXN0UG9pbnRlckV2ZW50XSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyT3V0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIHRlc3RQb2ludGVyRXZlbnQuc3RlcCgoe2Fzc2VydF9lcXVhbHMsIGFzc2VydF9ub3RfZXF1YWxzfSkgPT4ge1xuICAgICAgICBjb25zdCBwb2ludGVyQ2FuY2VsRXZlbnQgPSBwb2ludGVyQ2FuY2VsRXZlbnRSZWYuY3VycmVudDtcbiAgICAgICAgYXNzZXJ0X25vdF9lcXVhbHMoXG4gICAgICAgICAgcG9pbnRlckNhbmNlbEV2ZW50LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ3BvaW50ZXJjYW5jZWwgd2FzIHJlY2lldmVkOiAnLFxuICAgICAgICApO1xuICAgICAgICBpZiAocG9pbnRlckNhbmNlbEV2ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQucG9pbnRlcklkLFxuICAgICAgICAgICAgcG9pbnRlckNhbmNlbEV2ZW50Lm5hdGl2ZUV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgICAgICdwb2ludGVySWQgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBwb2ludGVyb3V0IGFuZCBwb2ludGVyY2FuY2VsJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5wb2ludGVyVHlwZSxcbiAgICAgICAgICAgIHBvaW50ZXJDYW5jZWxFdmVudC5uYXRpdmVFdmVudC5wb2ludGVyVHlwZSxcbiAgICAgICAgICAgICdwb2ludGVyVHlwZSBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIHBvaW50ZXJvdXQgYW5kIHBvaW50ZXJjYW5jZWwnLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmlzUHJpbWFyeSxcbiAgICAgICAgICAgIHBvaW50ZXJDYW5jZWxFdmVudC5uYXRpdmVFdmVudC5pc1ByaW1hcnksXG4gICAgICAgICAgICAnaXNQcmltYXJ5IHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgcG9pbnRlcm91dCBhbmQgcG9pbnRlcmNhbmNlbCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdGVzdFBvaW50ZXJFdmVudF0sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckxlYXZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIHRlc3RQb2ludGVyRXZlbnQuc3RlcCgoe2Fzc2VydF9lcXVhbHMsIGFzc2VydF9ub3RfZXF1YWxzfSkgPT4ge1xuICAgICAgICBjb25zdCBwb2ludGVyQ2FuY2VsRXZlbnQgPSBwb2ludGVyQ2FuY2VsRXZlbnRSZWYuY3VycmVudDtcbiAgICAgICAgYXNzZXJ0X25vdF9lcXVhbHMoXG4gICAgICAgICAgcG9pbnRlckNhbmNlbEV2ZW50LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ3BvaW50ZXJjYW5jZWwgd2FzIHJlY2lldmVkOiAnLFxuICAgICAgICApO1xuICAgICAgICBpZiAocG9pbnRlckNhbmNlbEV2ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQucG9pbnRlcklkLFxuICAgICAgICAgICAgcG9pbnRlckNhbmNlbEV2ZW50Lm5hdGl2ZUV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgICAgICdwb2ludGVySWQgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBwb2ludGVybGVhdmUgYW5kIHBvaW50ZXJjYW5jZWwnLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LnBvaW50ZXJUeXBlLFxuICAgICAgICAgICAgcG9pbnRlckNhbmNlbEV2ZW50Lm5hdGl2ZUV2ZW50LnBvaW50ZXJUeXBlLFxuICAgICAgICAgICAgJ3BvaW50ZXJUeXBlIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyY2FuY2VsJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5pc1ByaW1hcnksXG4gICAgICAgICAgICBwb2ludGVyQ2FuY2VsRXZlbnQubmF0aXZlRXZlbnQuaXNQcmltYXJ5LFxuICAgICAgICAgICAgJ2lzUHJpbWFyeSBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIHBvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcmNhbmNlbCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0ZXN0UG9pbnRlckV2ZW50LmRvbmUoKTtcbiAgICB9LFxuICAgIFt0ZXN0UG9pbnRlckV2ZW50XSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxWaWV3IHN0eWxlPXtzdHlsZXMuc2Nyb2xsQ29udGFpbmVyfT5cbiAgICAgIDxWaWV3XG4gICAgICAgIG9uUG9pbnRlckRvd249e2hhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBvblBvaW50ZXJDYW5jZWw9e2hhbmRsZVBvaW50ZXJDYW5jZWx9XG4gICAgICAgIG9uUG9pbnRlck91dD17aGFuZGxlUG9pbnRlck91dH1cbiAgICAgICAgb25Qb2ludGVyTGVhdmU9e2hhbmRsZVBvaW50ZXJMZWF2ZX1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy50YXJnZXR9XG4gICAgICAvPlxuICAgIDwvU2Nyb2xsVmlldz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBzY3JvbGxDb250YWluZXI6IHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6IDEwMH0sXG4gIHRhcmdldDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgICBwYWRkaW5nOiAzMixcbiAgICBoZWlnaHQ6IDIwMCxcbiAgfSxcbn0pO1xuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt9PjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBvaXRuZXJFdmVudFBvaW50ZXJDYW5jZWxUb3VjaChcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RcbiAgICAgIGNvbXBvbmVudD17UG9pbnRlckV2ZW50UG9pbnRlckNhbmNlbFRvdWNoVGVzdENhc2V9XG4gICAgICBkZXNjcmlwdGlvbj1cIlRoaXMgdGVzdCBjaGVja3MgaWYgcG9pbnRlcmNhbmNlbCBldmVudCB0cmlnZ2Vycy5cIlxuICAgICAgdGl0bGU9XCJQb2ludGVyIEV2ZW50cyBwb2ludGVyY2FuY2VsIFRlc3RzXCJcbiAgICAgIGluc3RydWN0aW9ucz17W1xuICAgICAgICAnU3RhcnQgdG91Y2ggb3ZlciB0aGUgYmxhY2sgcmVjdGFuZ2xlLicsXG4gICAgICAgICdUaGVuIG1vdmUgeW91ciBmaW5nZXIgdG8gc2Nyb2xsIHRoZSBwYWdlLicsXG4gICAgICBdfVxuICAgIC8+XG4gICk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvbWFzdGVyL3BvaW50ZXJldmVudHMvcG9pbnRlcmV2ZW50X3BvaW50ZXJtb3ZlLmh0bWxcblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wc30gZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0VHlwZXMnO1xuaW1wb3J0IHR5cGUge1BvaW50ZXJFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdCBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3QnO1xuaW1wb3J0IHt1c2VUZXN0RXZlbnRIYW5kbGVyfSBmcm9tICcuL1BvaW50ZXJFdmVudFN1cHBvcnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuZnVuY3Rpb24gUG9pbnRlckV2ZW50UG9pbnRlck1vdmVUZXN0Q2FzZShcbiAgcHJvcHM6IFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcyxcbikge1xuICBjb25zdCB7aGFybmVzc30gPSBwcm9wcztcblxuICBjb25zdCBkZXRlY3RlZFBvaW50ZXJUeXBlc1JlZiA9IHVzZVJlZigoe306IHtbc3RyaW5nXTogYm9vbGVhbn0pKTtcbiAgY29uc3QgdGVzdFBvaW50ZXJNb3ZlID0gaGFybmVzcy51c2VBc3luY1Rlc3QoJ3BvaW50ZXJtb3ZlIGV2ZW50IHJlY2VpdmVkJyk7XG5cbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VUZXN0RXZlbnRIYW5kbGVyKFxuICAgIFsncG9pbnRlck1vdmUnXSxcbiAgICAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgZGV0ZWN0ZWRQb2ludGVyVHlwZXNSZWYuY3VycmVudFtldmVudC5uYXRpdmVFdmVudC5wb2ludGVyVHlwZV0gPSB0cnVlO1xuICAgICAgdGVzdFBvaW50ZXJNb3ZlLmRvbmUoKTtcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiA8VmlldyB7Li4uaGFuZGxlcnN9IHN0eWxlPXtzdHlsZXMudGFyZ2V0fSAvPjtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICB0YXJnZXQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdibGFjaycsXG4gICAgaGVpZ2h0OiA2NCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICB9LFxufSk7XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e30+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50UG9pbnRlck1vdmUoXG4gIHByb3BzOiBQcm9wcyxcbik6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPFJOVGVzdGVyUGxhdGZvcm1UZXN0XG4gICAgICBjb21wb25lbnQ9e1BvaW50ZXJFdmVudFBvaW50ZXJNb3ZlVGVzdENhc2V9XG4gICAgICBkZXNjcmlwdGlvbj1cIlRoaXMgdGVzdCBjaGVja3MgaWYgcG9pbnRlcm1vdmUgZXZlbnQgdHJpZ2dlcnMuIE1vdmUgeW91ciBtb3VzZSBvdmVyIHRoZSBibGFjayByZWN0YW5nbGUgb3Igc2xpZGUgaXQgaWYgeW91IGFyZSB1c2luZyB0b3VjaHNjcmVlbi5cIlxuICAgICAgdGl0bGU9XCJQb2ludGVyTW92ZSB0ZXN0XCJcbiAgICAvPlxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHN9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcblxuaW1wb3J0IFJOVGVzdGVyUGxhdGZvcm1UZXN0IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdCc7XG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3RFdmVudFJlY29yZGVyIGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdEV2ZW50UmVjb3JkZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBhOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICBoZWlnaHQ6IDEyMCxcbiAgICB3aWR0aDogMjAwLFxuICB9LFxuICBiOiB7XG4gICAgbWFyZ2luTGVmdDogNTAsXG4gICAgaGVpZ2h0OiAxMjAsXG4gICAgd2lkdGg6IDIwMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gIH0sXG4gIGM6IHtcbiAgICBoZWlnaHQ6IDEyMCxcbiAgICB3aWR0aDogMjAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3llbGxvdycsXG4gICAgbWFyZ2luVmVydGljYWw6IDEwLFxuICAgIG1hcmdpbkxlZnQ6IDUwLFxuICB9LFxuICBhMToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgIGhlaWdodDogMTIwLFxuICAgIHdpZHRoOiAyMDAsXG4gIH0sXG4gIGIxOiB7XG4gICAgcGFkZGluZzogMSxcbiAgICBtYXJnaW5MZWZ0OiA1MCxcbiAgICBoZWlnaHQ6IDEyMCxcbiAgICB3aWR0aDogMjAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2dyZWVuJyxcbiAgfSxcbiAgYzE6IHtcbiAgICBoZWlnaHQ6IDEyMCxcbiAgICB3aWR0aDogMjAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgICBtYXJnaW5MZWZ0OiA1MCxcbiAgfSxcbn0pO1xuXG5jb25zdCByZWxldmFudEV2ZW50cyA9IFtcbiAgJ3BvaW50ZXJNb3ZlJyxcbiAgJ3BvaW50ZXJPdmVyJyxcbiAgJ3BvaW50ZXJFbnRlcicsXG4gICdwb2ludGVyT3V0JyxcbiAgJ3BvaW50ZXJMZWF2ZScsXG5dO1xuXG5jb25zdCBleHBlY3RlZCA9IFtcbiAge3R5cGU6ICdwb2ludGVyT3ZlcicsIHRhcmdldDogJ2EnfSxcbiAge3R5cGU6ICdwb2ludGVyRW50ZXInLCB0YXJnZXQ6ICdjJ30sXG4gIHt0eXBlOiAncG9pbnRlckVudGVyJywgdGFyZ2V0OiAnYid9LFxuICB7dHlwZTogJ3BvaW50ZXJFbnRlcicsIHRhcmdldDogJ2EnfSxcbiAge3R5cGU6ICdwb2ludGVyTW92ZScsIHRhcmdldDogJ2EnLCBvcHRpb25hbDogdHJ1ZX0sXG4gIHt0eXBlOiAncG9pbnRlck91dCcsIHRhcmdldDogJ2EnfSxcbiAge3R5cGU6ICdwb2ludGVyTGVhdmUnLCB0YXJnZXQ6ICdhJ30sXG4gIHt0eXBlOiAncG9pbnRlckxlYXZlJywgdGFyZ2V0OiAnYid9LFxuICB7dHlwZTogJ3BvaW50ZXJPdmVyJywgdGFyZ2V0OiAnYyd9LFxuICB7dHlwZTogJ3BvaW50ZXJNb3ZlJywgdGFyZ2V0OiAnYycsIG9wdGlvbmFsOiB0cnVlfSxcbiAge3R5cGU6ICdwb2ludGVyT3V0JywgdGFyZ2V0OiAnYyd9LFxuICB7dHlwZTogJ3BvaW50ZXJMZWF2ZScsIHRhcmdldDogJ2MnfSxcbiAge3R5cGU6ICdwb2ludGVyT3ZlcicsIHRhcmdldDogJ2ExJ30sXG4gIHt0eXBlOiAncG9pbnRlckVudGVyJywgdGFyZ2V0OiAnYzEnfSxcbiAge3R5cGU6ICdwb2ludGVyRW50ZXInLCB0YXJnZXQ6ICdiMSd9LFxuICB7dHlwZTogJ3BvaW50ZXJFbnRlcicsIHRhcmdldDogJ2ExJ30sXG4gIHt0eXBlOiAncG9pbnRlck1vdmUnLCB0YXJnZXQ6ICdhMScsIG9wdGlvbmFsOiB0cnVlfSxcbiAge3R5cGU6ICdwb2ludGVyT3V0JywgdGFyZ2V0OiAnYTEnfSxcbiAge3R5cGU6ICdwb2ludGVyTGVhdmUnLCB0YXJnZXQ6ICdhMSd9LFxuICB7dHlwZTogJ3BvaW50ZXJMZWF2ZScsIHRhcmdldDogJ2IxJ30sXG4gIHt0eXBlOiAncG9pbnRlck92ZXInLCB0YXJnZXQ6ICdjMSd9LFxuICB7dHlwZTogJ3BvaW50ZXJNb3ZlJywgdGFyZ2V0OiAnYzEnLCBvcHRpb25hbDogdHJ1ZX0sXG4gIHt0eXBlOiAncG9pbnRlck91dCcsIHRhcmdldDogJ2MxJ30sXG4gIHt0eXBlOiAncG9pbnRlckxlYXZlJywgdGFyZ2V0OiAnYzEnfSxcbl07XG5cbmNvbnN0IHRhcmdldE5hbWVzID0gWydhJywgJ2InLCAnYycsICdhMScsICdiMScsICdjMSddO1xuXG4vLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvYmxvYi9tYXN0ZXIvdWlldmVudHMvb3JkZXItb2YtZXZlbnRzL21vdXNlLWV2ZW50cy9tb3VzZW1vdmUtYWNyb3NzLmh0bWxcbmZ1bmN0aW9uIFBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlQWNyb3NzVGVzdENhc2UoXG4gIHByb3BzOiBQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHMsXG4pIHtcbiAgY29uc3Qge2hhcm5lc3N9ID0gcHJvcHM7XG5cbiAgY29uc3QgcG9pbnRlcm1vdmVfYWNyb3NzID0gaGFybmVzcy51c2VBc3luY1Rlc3QoXG4gICAgJ1BvaW50ZXJtb3ZlIGV2ZW50cyBhY3Jvc3MgZWxlbWVudHMgc2hvdWxkIGZpcmUgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuJyxcbiAgKTtcblxuICBjb25zdCBbZXZlbnRSZWNvcmRlcl0gPSB1c2VTdGF0ZShcbiAgICAoKSA9PlxuICAgICAgbmV3IFJOVGVzdGVyUGxhdGZvcm1UZXN0RXZlbnRSZWNvcmRlcih7XG4gICAgICAgIG1lcmdlRXZlbnRUeXBlczogWydwb2ludGVyTW92ZSddLFxuICAgICAgICByZWxldmFudEV2ZW50cyxcbiAgICAgIH0pLFxuICApO1xuXG4gIGNvbnN0IGV2ZW50SGFuZGxlciA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUG9pbnRlckV2ZW50LCBldmVudFR5cGU6IHN0cmluZywgZXZlbnRUYXJnZXQ6IHN0cmluZykgPT4ge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnRUYXJnZXQgPT09ICdjMScgJiYgZXZlbnRUeXBlID09PSAncG9pbnRlckxlYXZlJykge1xuICAgICAgICBwb2ludGVybW92ZV9hY3Jvc3Muc3RlcCgoe2Fzc2VydF90cnVlfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF90cnVlKFxuICAgICAgICAgICAgZXZlbnRSZWNvcmRlci5jaGVja1JlY29yZHMoZXhwZWN0ZWQpLFxuICAgICAgICAgICAgJ0V4cGVjdGVkIGV2ZW50cyB0byBvY2N1ciBpbiB0aGUgY29ycmVjdCBvcmRlcicsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBvaW50ZXJtb3ZlX2Fjcm9zcy5kb25lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZXZlbnRSZWNvcmRlciwgcG9pbnRlcm1vdmVfYWNyb3NzXSxcbiAgKTtcblxuICBjb25zdCBldmVudFByb3BzID0gZXZlbnRSZWNvcmRlci51c2VSZWNvcmRlclRlc3RFdmVudEhhbmRsZXJzKFxuICAgIHRhcmdldE5hbWVzLFxuICAgIGV2ZW50SGFuZGxlcixcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VmlldyB7Li4uZXZlbnRQcm9wcy5jfSBzdHlsZT17c3R5bGVzLmN9PlxuICAgICAgICA8VmlldyB7Li4uZXZlbnRQcm9wcy5ifSBzdHlsZT17c3R5bGVzLmJ9PlxuICAgICAgICAgIDxWaWV3IHsuLi5ldmVudFByb3BzLmF9IHN0eWxlPXtzdHlsZXMuYX0gLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgICAgPFZpZXcgey4uLmV2ZW50UHJvcHMuYzF9IHN0eWxlPXtzdHlsZXMuYzF9PlxuICAgICAgICA8VmlldyB7Li4uZXZlbnRQcm9wcy5iMX0gc3R5bGU9e3N0eWxlcy5iMX0+XG4gICAgICAgICAgPFZpZXcgey4uLmV2ZW50UHJvcHMuYTF9IHN0eWxlPXtzdHlsZXMuYTF9IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICA8Lz5cbiAgKTtcbn1cblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fT47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb2ludGVyRXZlbnRQb2ludGVyTW92ZUFjcm9zcyhcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RcbiAgICAgIGNvbXBvbmVudD17UG9pbnRlckV2ZW50UG9pbnRlck1vdmVBY3Jvc3NUZXN0Q2FzZX1cbiAgICAgIGRlc2NyaXB0aW9uPVwiXCJcbiAgICAgIGluc3RydWN0aW9ucz17W1xuICAgICAgICAnTW92ZSB5b3VyIG1vdXNlIGFjcm9zcyB0aGUgeWVsbG93L3JlZCA8ZGl2PiBlbGVtZW50IHF1aWNrbHkgZnJvbSByaWdodCB0byBsZWZ0JyxcbiAgICAgICAgJ01vdmUgeW91ciBtb3VzZSBhY3Jvc3MgdGhlIGJsYWNrL2JsdWUgPGRpdj4gZWxlbWVudCBxdWlja2x5IGZyb20gcmlnaHQgdG8gbGVmdCcsXG4gICAgICAgICdJZiB0aGUgdGVzdCBmYWlscywgcmVkbyBpdCBhZ2FpbiBhbmQgbW92ZSBmYXN0ZXIgb24gdGhlIGJsYWNrL2JsdWUgPGRpdj4gZWxlbWVudCBuZXh0IHRpbWUuJyxcbiAgICAgIF19XG4gICAgICB0aXRsZT1cIlBvaW50ZXJtb3ZlIGhhbmRsaW5nIGFjcm9zcyBlbGVtZW50c1wiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtWaWV3UHJvcHN9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1ZpZXdQcm9wVHlwZXMnO1xuXG5pbXBvcnQge3VzZU1lbW99IGZyb20gJ3JlYWN0JztcblxudHlwZSBFdmVudFJlY29yZGVyT3B0aW9ucyA9ICRSZWFkT25seTx7XG4gIG1lcmdlRXZlbnRUeXBlczogQXJyYXk8c3RyaW5nPixcbiAgcmVsZXZhbnRFdmVudHM6IEFycmF5PHN0cmluZz4sXG59PjtcblxudHlwZSBFdmVudFJlY29yZCA9IHtcbiAgY2hyb25vbG9naWNhbE9yZGVyOiBudW1iZXIsXG4gIHNlcXVlbnRpYWxPY2N1cnJlbmNlczogbnVtYmVyLFxuICBuZXN0ZWRFdmVudHM6ID9BcnJheTxFdmVudFJlY29yZD4sXG4gIHRhcmdldDogc3RyaW5nLFxuICB0eXBlOiBzdHJpbmcsXG4gIGV2ZW50OiBPYmplY3QsXG59O1xuXG5jbGFzcyBSTlRlc3RlclBsYXRmb3JtVGVzdEV2ZW50UmVjb3JkZXIge1xuICBhbGxSZWNvcmRzOiBBcnJheTxFdmVudFJlY29yZD4gPSBbXTtcbiAgcmVsZXZhbnRFdmVudHM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcmF3T3JkZXI6IG51bWJlciA9IDE7XG4gIGV2ZW50c0luU2NvcGU6IEFycmF5PEV2ZW50UmVjb3JkPiA9IFtdOyAvLyBUcmFja3Mgc3luY2hyb25vdXMgZXZlbnQgZGlzcGF0Y2hlc1xuICByZWNvcmRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIG1lcmdlVHlwZXNUcnV0aE1hcDoge1tzdHJpbmddOiBib29sZWFufSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEV2ZW50UmVjb3JkZXJPcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubWVyZ2VFdmVudFR5cGVzICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5tZXJnZUV2ZW50VHlwZXMpKSB7XG4gICAgICBvcHRpb25zLm1lcmdlRXZlbnRUeXBlcy5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIHRoaXMubWVyZ2VUeXBlc1RydXRoTWFwW2V2ZW50VHlwZV0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnJlbGV2YW50RXZlbnRzICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5yZWxldmFudEV2ZW50cykpIHtcbiAgICAgIHRoaXMucmVsZXZhbnRFdmVudHMgPSBvcHRpb25zLnJlbGV2YW50RXZlbnRzO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVFdmVudFJlY29yZChcbiAgICByYXdFdmVudDogT2JqZWN0LFxuICAgIHRhcmdldDogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgKTogRXZlbnRSZWNvcmQge1xuICAgIHJldHVybiB7XG4gICAgICBjaHJvbm9sb2dpY2FsT3JkZXI6IHRoaXMucmF3T3JkZXIrKyxcbiAgICAgIHNlcXVlbnRpYWxPY2N1cnJlbmNlczogMSxcbiAgICAgIG5lc3RlZEV2ZW50czogdW5kZWZpbmVkLFxuICAgICAgdGFyZ2V0LFxuICAgICAgdHlwZSxcbiAgICAgIGV2ZW50OiByYXdFdmVudCxcbiAgICB9O1xuICB9XG5cbiAgX3JlY29yZEV2ZW50KGU6IE9iamVjdCwgdGFyZ2V0TmFtZTogc3RyaW5nLCBldmVudFR5cGU6IHN0cmluZyk6ID9FdmVudFJlY29yZCB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5fY3JlYXRlRXZlbnRSZWNvcmQoZSwgdGFyZ2V0TmFtZSwgZXZlbnRUeXBlKTtcbiAgICBsZXQgcmVjb3JkTGlzdCA9IHRoaXMuYWxsUmVjb3JkcztcbiAgICAvLyBBZGp1c3Qgd2hpY2ggc2VxdWVudGlhbCBsaXN0IHRvIHVzZSBkZXBlbmRpbmcgb24gc2NvcGVcbiAgICBpZiAodGhpcy5ldmVudHNJblNjb3BlLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBuZXdSZWNvcmRMaXN0ID1cbiAgICAgICAgdGhpcy5ldmVudHNJblNjb3BlW3RoaXMuZXZlbnRzSW5TY29wZS5sZW5ndGggLSAxXS5uZXN0ZWRFdmVudHM7XG4gICAgICBpZiAobmV3UmVjb3JkTGlzdCA9PSBudWxsKSB7XG4gICAgICAgIG5ld1JlY29yZExpc3QgPSB0aGlzLmV2ZW50c0luU2NvcGVbXG4gICAgICAgICAgdGhpcy5ldmVudHNJblNjb3BlLmxlbmd0aCAtIDFcbiAgICAgICAgXS5uZXN0ZWRFdmVudHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIHJlY29yZExpc3QgPSBuZXdSZWNvcmRMaXN0O1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXJnZVR5cGVzVHJ1dGhNYXBbZXZlbnRUeXBlXSAmJiByZWNvcmRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhaWwgPSByZWNvcmRMaXN0W3JlY29yZExpc3QubGVuZ3RoIC0gMV07XG4gICAgICAvLyBTYW1lIHR5cGUgYW5kIHRhcmdldD9cbiAgICAgIGlmICh0YWlsLnR5cGUgPT09IGV2ZW50VHlwZSAmJiB0YWlsLnRhcmdldCA9PT0gdGFyZ2V0TmFtZSkge1xuICAgICAgICB0YWlsLnNlcXVlbnRpYWxPY2N1cnJlbmNlcysrO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZExpc3QucHVzaChyZWNvcmQpO1xuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cblxuICBfZ2VuZXJhdGVSZWNvcmRlZEV2ZW50SGFuZGxlcldpdGhDYWxsYmFjayhcbiAgICB0YXJnZXROYW1lOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s/OiAoZXZlbnQ6IE9iamVjdCwgZXZlbnRUeXBlOiBzdHJpbmcpID0+IHZvaWQsXG4gICk6IChPYmplY3QsIHN0cmluZykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIChlOiBPYmplY3QsIGV2ZW50VHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgdGhpcy5fcmVjb3JkRXZlbnQoZSwgdGFyZ2V0TmFtZSwgZXZlbnRUeXBlKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soZSwgZXZlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB1c2VSZWNvcmRlclRlc3RFdmVudEhhbmRsZXJzKFxuICAgIHRhcmdldE5hbWVzOiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICAgIGNhbGxiYWNrPzogKGV2ZW50OiBPYmplY3QsIGV2ZW50VHlwZTogc3RyaW5nLCB0YXJnZXROYW1lOiBzdHJpbmcpID0+IHZvaWQsXG4gICk6ICRSZWFkT25seTx7W3RhcmdldE5hbWU6IHN0cmluZ106IFZpZXdQcm9wc30+IHtcbiAgICAvLyBZZXMgdGhpcyBtZXRob2QgZXhpc3RzIGFzIGEgY2xhc3MncyBwcm90b3R5cGUgbWV0aG9kIGJ1dCBpdCB3aWxsIHN0aWxsIG9ubHkgYmUgdXNlZFxuICAgIC8vIGluIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDoge1t0YXJnZXROYW1lOiBzdHJpbmddOiBWaWV3UHJvcHN9ID0ge307XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldE5hbWUgb2YgdGFyZ2V0TmFtZXMpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkZWRFdmVudEhhbmRsZXIgPVxuICAgICAgICAgIHRoaXMuX2dlbmVyYXRlUmVjb3JkZWRFdmVudEhhbmRsZXJXaXRoQ2FsbGJhY2soXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgKGV2ZW50LCBldmVudFR5cGUpID0+XG4gICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGV2ZW50LCBldmVudFR5cGUsIHRhcmdldE5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJQcm9wcyA9IHRoaXMucmVsZXZhbnRFdmVudHMucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGV2ZW50TmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRQcm9wTmFtZSA9XG4gICAgICAgICAgICAgICdvbicgKyBldmVudE5hbWVbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50TmFtZS5zbGljZSgxKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2V2ZW50UHJvcE5hbWVdOiBlID0+IHtcbiAgICAgICAgICAgICAgICByZWNvcmRlZEV2ZW50SGFuZGxlcihlLCBldmVudE5hbWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuICAgICAgICByZXN1bHRbdGFyZ2V0TmFtZV0gPSBldmVudExpc3RlbmVyUHJvcHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtjYWxsYmFjaywgdGFyZ2V0TmFtZXNdKTtcbiAgfVxuXG4gIGdldFJlY29yZHMoKTogQXJyYXk8RXZlbnRSZWNvcmQ+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxSZWNvcmRzO1xuICB9XG5cbiAgY2hlY2tSZWNvcmRzKFxuICAgIGV4cGVjdGVkOiBBcnJheTx7XG4gICAgICB0eXBlOiBzdHJpbmcsXG4gICAgICB0YXJnZXQ6IHN0cmluZyxcbiAgICAgIG9wdGlvbmFsPzogYm9vbGVhbixcbiAgICB9PixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA8IHRoaXMuYWxsUmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IGogPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChqID49IHRoaXMuYWxsUmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGV4cGVjdGVkW2ldLm9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBleHBlY3RlZFtpXS50eXBlID09PSB0aGlzLmFsbFJlY29yZHNbal0udHlwZSAmJlxuICAgICAgICBleHBlY3RlZFtpXS50YXJnZXQgPT09IHRoaXMuYWxsUmVjb3Jkc1tqXS50YXJnZXRcbiAgICAgICkge1xuICAgICAgICBqKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGVjdGVkW2ldLm9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSTlRlc3RlclBsYXRmb3JtVGVzdEV2ZW50UmVjb3JkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3cgc3RyaWN0LWxvY2FsXG4gKi9cblxuaW1wb3J0IHR5cGUge1BsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wc30gZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0VHlwZXMnO1xuXG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3QgZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0JztcbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdEV2ZW50UmVjb3JkZXIgZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0RXZlbnRSZWNvcmRlcic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGE6IHtcbiAgICB3aWR0aDogMjAwLFxuICAgIGhlaWdodDogMTIwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgYjoge1xuICAgIGhlaWdodDogNjAsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gIH0sXG4gIGM6IHtcbiAgICBoZWlnaHQ6IDEyMCxcbiAgICB3aWR0aDogMjAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3llbGxvdycsXG4gIH0sXG59KTtcblxuY29uc3QgcmVsZXZhbnRFdmVudHMgPSBbXG4gICdwb2ludGVyTW92ZScsXG4gICdwb2ludGVyT3ZlcicsXG4gICdwb2ludGVyRW50ZXInLFxuICAncG9pbnRlck91dCcsXG4gICdwb2ludGVyTGVhdmUnLFxuXTtcblxuY29uc3QgZXhwZWN0ZWQgPSBbXG4gIHt0eXBlOiAncG9pbnRlck92ZXInLCB0YXJnZXQ6ICdhJ30sXG4gIHt0eXBlOiAncG9pbnRlckVudGVyJywgdGFyZ2V0OiAnYSd9LFxuICB7dHlwZTogJ3BvaW50ZXJNb3ZlJywgdGFyZ2V0OiAnYScsIG9wdGlvbmFsOiB0cnVlfSxcbiAge3R5cGU6ICdwb2ludGVyT3V0JywgdGFyZ2V0OiAnYSd9LFxuICB7dHlwZTogJ3BvaW50ZXJPdmVyJywgdGFyZ2V0OiAnYid9LFxuICB7dHlwZTogJ3BvaW50ZXJFbnRlcicsIHRhcmdldDogJ2InfSxcbiAge3R5cGU6ICdwb2ludGVyTW92ZScsIHRhcmdldDogJ2InLCBvcHRpb25hbDogdHJ1ZX0sXG4gIHt0eXBlOiAncG9pbnRlck91dCcsIHRhcmdldDogJ2InfSxcbiAge3R5cGU6ICdwb2ludGVyTGVhdmUnLCB0YXJnZXQ6ICdiJ30sXG4gIHt0eXBlOiAncG9pbnRlck92ZXInLCB0YXJnZXQ6ICdhJ30sXG4gIHt0eXBlOiAncG9pbnRlck1vdmUnLCB0YXJnZXQ6ICdhJywgb3B0aW9uYWw6IHRydWV9LFxuICB7dHlwZTogJ3BvaW50ZXJPdXQnLCB0YXJnZXQ6ICdhJ30sXG4gIHt0eXBlOiAncG9pbnRlckxlYXZlJywgdGFyZ2V0OiAnYSd9LFxuICB7dHlwZTogJ3BvaW50ZXJPdmVyJywgdGFyZ2V0OiAnYyd9LFxuICB7dHlwZTogJ3BvaW50ZXJFbnRlcicsIHRhcmdldDogJ2MnfSxcbiAge3R5cGU6ICdwb2ludGVyTW92ZScsIHRhcmdldDogJ2MnLCBvcHRpb25hbDogdHJ1ZX0sXG4gIHt0eXBlOiAncG9pbnRlck91dCcsIHRhcmdldDogJ2MnfSxcbiAge3R5cGU6ICdwb2ludGVyTGVhdmUnLCB0YXJnZXQ6ICdjJ30sXG5dO1xuXG5jb25zdCB0YXJnZXROYW1lcyA9IFsnYScsICdiJywgJ2MnXTtcblxuLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvbWFzdGVyL3VpZXZlbnRzL29yZGVyLW9mLWV2ZW50cy9tb3VzZS1ldmVudHMvbW91c2Vtb3ZlLWJldHdlZW4uaHRtbFxuZnVuY3Rpb24gUG9pbnRlckV2ZW50UG9pbnRlck1vdmVCZXR3ZWVuVGVzdENhc2UoXG4gIHByb3BzOiBQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHMsXG4pIHtcbiAgY29uc3Qge2hhcm5lc3N9ID0gcHJvcHM7XG5cbiAgY29uc3QgcG9pbnRlcm1vdmVfYmV0d2VlbiA9IGhhcm5lc3MudXNlQXN5bmNUZXN0KFxuICAgICdQb2ludGVybW92ZSBldmVudHMgYmV0d2VlbiBlbGVtZW50cyBzaG91bGQgZmlyZSBpbiB0aGUgY29ycmVjdCBvcmRlci4nLFxuICApO1xuXG4gIGNvbnN0IFtldmVudFJlY29yZGVyXSA9IHVzZVN0YXRlKFxuICAgICgpID0+XG4gICAgICBuZXcgUk5UZXN0ZXJQbGF0Zm9ybVRlc3RFdmVudFJlY29yZGVyKHtcbiAgICAgICAgbWVyZ2VFdmVudFR5cGVzOiBbJ3BvaW50ZXJNb3ZlJ10sXG4gICAgICAgIHJlbGV2YW50RXZlbnRzLFxuICAgICAgfSksXG4gICk7XG5cbiAgY29uc3QgZXZlbnRIYW5kbGVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBQb2ludGVyRXZlbnQsIGV2ZW50VHlwZTogc3RyaW5nLCBldmVudFRhcmdldDogc3RyaW5nKSA9PiB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChldmVudFRhcmdldCA9PT0gJ2MnICYmIGV2ZW50VHlwZSA9PT0gJ3BvaW50ZXJMZWF2ZScpIHtcbiAgICAgICAgcG9pbnRlcm1vdmVfYmV0d2Vlbi5zdGVwKCh7YXNzZXJ0X3RydWV9KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0X3RydWUoXG4gICAgICAgICAgICBldmVudFJlY29yZGVyLmNoZWNrUmVjb3JkcyhleHBlY3RlZCksXG4gICAgICAgICAgICAnRXhwZWN0ZWQgZXZlbnRzIHRvIG9jY3VyIGluIHRoZSBjb3JyZWN0IG9yZGVyJyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcG9pbnRlcm1vdmVfYmV0d2Vlbi5kb25lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZXZlbnRSZWNvcmRlciwgcG9pbnRlcm1vdmVfYmV0d2Vlbl0sXG4gICk7XG5cbiAgY29uc3QgZXZlbnRQcm9wcyA9IGV2ZW50UmVjb3JkZXIudXNlUmVjb3JkZXJUZXN0RXZlbnRIYW5kbGVycyhcbiAgICB0YXJnZXROYW1lcyxcbiAgICBldmVudEhhbmRsZXIsXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFZpZXcgey4uLmV2ZW50UHJvcHMuYX0gc3R5bGU9e3N0eWxlcy5hfT5cbiAgICAgICAgPFZpZXcgey4uLmV2ZW50UHJvcHMuYn0gc3R5bGU9e3N0eWxlcy5ifSAvPlxuICAgICAgPC9WaWV3PlxuICAgICAgPFZpZXcgey4uLmV2ZW50UHJvcHMuY30gc3R5bGU9e3N0eWxlcy5jfSAvPlxuICAgIDwvPlxuICApO1xufVxuXG50eXBlIFByb3BzID0gJFJlYWRPbmx5PHt9PjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlQmV0d2VlbihcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RcbiAgICAgIGNvbXBvbmVudD17UG9pbnRlckV2ZW50UG9pbnRlck1vdmVCZXR3ZWVuVGVzdENhc2V9XG4gICAgICBkZXNjcmlwdGlvbj1cIlwiXG4gICAgICBpbnN0cnVjdGlvbnM9e1tcbiAgICAgICAgJ01vdmUgeW91ciBjdXJzb3Igb3ZlciB0aGUgYmx1ZSBlbGVtZW50LCBsYXRlciBvdmVyIHRoZSBncmVlbiBvbmUsIGxhdGVyIGJhY2sgdG8gdGhlIGJsdWUgb25lLicsXG4gICAgICAgICdNb3ZlIHRoZSBtb3N1ZSBmcm9tIHRoZSBibHVlIGVsZW1lbnQgdG8gdGhlIHllbGxvdyBvbmUsIGxhdGVyIHRvIHRoZSB3aGl0ZSBiYWNrZ3JvdW5kLicsXG4gICAgICBdfVxuICAgICAgdGl0bGU9XCJQb2ludGVybW92ZSBoYW5kbGluZyBiZXR3ZWVuIGVsZW1lbnRzXCJcbiAgICAvPlxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHN9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcbmltcG9ydCB0eXBlIHtQb2ludGVyRXZlbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3QgZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0JztcbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdEV2ZW50UmVjb3JkZXIgZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0RXZlbnRSZWNvcmRlcic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGVuZDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmlnaHQ6ICcxNSUnLFxuICAgIGJvdHRvbTogJzE1JScsXG4gICAgd2lkdGg6ICc1MCUnLFxuICAgIGhlaWdodDogJzUwJScsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyQ29sb3I6ICdncmV5JyxcbiAgfSxcbiAgZ3JlZW46IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmVlbicsXG4gIH0sXG4gIHN0YXJ0OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAnMTUlJyxcbiAgICB0b3A6ICcxNSUnLFxuICAgIHdpZHRoOiAnNTAlJyxcbiAgICBoZWlnaHQ6ICc1MCUnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnZ3JleScsXG4gIH0sXG4gIHRlc3RhcmVhOiB7XG4gICAgd2lkdGg6ICc4MCUnLFxuICAgIGhlaWdodDogMjUwLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJvcmRlckNvbG9yOiAnZ3JleScsXG4gIH0sXG59KTtcblxuLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvbWFzdGVyL3VpZXZlbnRzL29yZGVyLW9mLWV2ZW50cy9tb3VzZS1ldmVudHMvbW91c2VldmVudHMtbW91c2Vtb3ZlLmh0bVxuZnVuY3Rpb24gUG9pbnRlckV2ZW50UG9pbnRlck1vdmVFdmVudE9yZGVyVGVzdENhc2UoXG4gIHByb3BzOiBQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHMsXG4pIHtcbiAgY29uc3Qge2hhcm5lc3N9ID0gcHJvcHM7XG4gIGNvbnN0IHBvaW50ZXJfdGVzdCA9IGhhcm5lc3MudXNlQXN5bmNUZXN0KCdQb2ludGVybW92ZSBldmVudHMnKTtcblxuICBjb25zdCBbZXZlbnRSZWNvcmRlcl0gPSB1c2VTdGF0ZShcbiAgICAoKSA9PlxuICAgICAgbmV3IFJOVGVzdGVyUGxhdGZvcm1UZXN0RXZlbnRSZWNvcmRlcih7XG4gICAgICAgIG1lcmdlRXZlbnRUeXBlczogWydwb2ludGVyTW92ZSddLFxuICAgICAgICByZWxldmFudEV2ZW50czogWydwb2ludGVyTW92ZSddLFxuICAgICAgfSksXG4gICk7XG5cbiAgY29uc3QgW3N0YXJ0TW92ZWQsIHNldFN0YXJ0TW92ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZW5kTW92ZWQsIHNldEVuZE1vdmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBldmVudEhhbmRsZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFBvaW50ZXJFdmVudCwgZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50VGFyZ2V0OiBzdHJpbmcpID0+IHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKFxuICAgICAgICAhc3RhcnRNb3ZlZCAmJlxuICAgICAgICBldmVudFR5cGUgPT09ICdwb2ludGVyTW92ZScgJiZcbiAgICAgICAgZXZlbnRUYXJnZXQgPT09ICdzdGFydCdcbiAgICAgICkge1xuICAgICAgICBzZXRTdGFydE1vdmVkKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFlbmRNb3ZlZCAmJiBldmVudFR5cGUgPT09ICdwb2ludGVyTW92ZScgJiYgZXZlbnRUYXJnZXQgPT09ICdlbmQnKSB7XG4gICAgICAgIHNldEVuZE1vdmVkKHRydWUpO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gZXZlbnRSZWNvcmRlci5nZXRSZWNvcmRzKCk7XG4gICAgICAgIHBvaW50ZXJfdGVzdC5zdGVwKCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdHMubGVuZ3RoLCAyLCAnVHdvIHBvaW50ZXJtb3ZlIGV2ZW50cycpO1xuICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgICAgcmVzdWx0c1swXS50eXBlLFxuICAgICAgICAgICAgICAncG9pbnRlck1vdmUnLFxuICAgICAgICAgICAgICAnRmlyc3QgZXZlbnQgaXMgYSBwb2ludGVybW92ZSBldmVudCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgICAgcmVzdWx0c1sxXS50eXBlLFxuICAgICAgICAgICAgICAncG9pbnRlck1vdmUnLFxuICAgICAgICAgICAgICAnU2Vjb25kIGV2ZW50IGlzIGEgcG9pbnRlcm1vdmUgZXZlbnQnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICAgIHJlc3VsdHNbMF0udGFyZ2V0LFxuICAgICAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICAgICAnRmlyc3QgZXZlbnQgdGFyZ2V0ZWQgI3N0YXJ0JyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgICByZXN1bHRzWzFdLnRhcmdldCxcbiAgICAgICAgICAgICAgJ2VuZCcsXG4gICAgICAgICAgICAgICdTZWNvbmQgZXZlbnQgdGFyZ2V0ZWQgI2VuZCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHBvaW50ZXJfdGVzdC5kb25lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZW5kTW92ZWQsIGV2ZW50UmVjb3JkZXIsIHBvaW50ZXJfdGVzdCwgc3RhcnRNb3ZlZF0sXG4gICk7XG5cbiAgY29uc3QgZXZlbnRQcm9wcyA9IGV2ZW50UmVjb3JkZXIudXNlUmVjb3JkZXJUZXN0RXZlbnRIYW5kbGVycyhcbiAgICBbJ3N0YXJ0JywgJ2VuZCddLFxuICAgIGV2ZW50SGFuZGxlcixcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudGVzdGFyZWF9PlxuICAgICAgPFZpZXdcbiAgICAgICAgey4uLmV2ZW50UHJvcHMuc3RhcnR9XG4gICAgICAgIHN0eWxlPXtbc3R5bGVzLnN0YXJ0LCBzdGFydE1vdmVkICYmIHN0eWxlcy5ncmVlbl19XG4gICAgICAvPlxuICAgICAgPFZpZXdcbiAgICAgICAgey4uLmV2ZW50UHJvcHMuZW5kfVxuICAgICAgICBzdHlsZT17W3N0eWxlcy5lbmQsIGVuZE1vdmVkICYmIHN0eWxlcy5ncmVlbl19XG4gICAgICAvPlxuICAgIDwvVmlldz5cbiAgKTtcbn1cblxudHlwZSBQcm9wcyA9ICRSZWFkT25seTx7fT47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb2ludGVyRXZlbnRQb2ludGVyTW92ZUV2ZW50T3JkZXIoXG4gIHByb3BzOiBQcm9wcyxcbik6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPFJOVGVzdGVyUGxhdGZvcm1UZXN0XG4gICAgICBjb21wb25lbnQ9e1BvaW50ZXJFdmVudFBvaW50ZXJNb3ZlRXZlbnRPcmRlclRlc3RDYXNlfVxuICAgICAgaW5zdHJ1Y3Rpb25zPXtbXG4gICAgICAgICdNb3ZlIHRoZSBwb2ludGVyIHRvIHRoZSB1cHBlci1sZWZ0IHJlZCBib3ggYW5kIHRoZW4gbW92ZSBpdCBkaXJlY3RseSB0b3dhcmQgYW5kIGludG8gdGhlIGxvd2VyLXJpZ2h0IHJlZCBib3guJyxcbiAgICAgIF19XG4gICAgICBkZXNjcmlwdGlvbj1cIlZlcmlmaWVzIHRoYXQgcG9pbnRlcm1vdmUgZXZlbnRzIHRyYWNrIHRoZSBwb2ludGVyIHBvc2l0aW9uIGFuZCB0cmFuc2l0aW9uIGZyb20gdG9wLW1vc3QgdmlzaWJsZSBlbGVtZW50IHRvIHRvcC1tb3N0IHZpc2libGUgZWxlbWVudCwgY2hhbmdpbmcgdGFyZ2V0cyBhbG9uZyB0aGUgd2F5LlwiXG4gICAgICB0aXRsZT1cIlBvaW50ZXJFdmVudCAtIHBvaW50ZXJtb3ZlIGV2ZW50IG9yZGVyXCJcbiAgICAvPlxuICApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHN9IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdFR5cGVzJztcbmltcG9ydCB0eXBlIHtQb2ludGVyRXZlbnR9IGZyb20gJ3JlYWN0LW5hdGl2ZS9MaWJyYXJpZXMvVHlwZXMvQ29yZUV2ZW50VHlwZXMnO1xuXG5pbXBvcnQgUk5UZXN0ZXJQbGF0Zm9ybVRlc3QgZnJvbSAnLi4vUGxhdGZvcm1UZXN0L1JOVGVzdGVyUGxhdGZvcm1UZXN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdHlsZVNoZWV0LCBWaWV3fSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIHRhcmdldDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgICBwYWRkaW5nOiAzMixcbiAgfSxcbn0pO1xuXG4vLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvYmxvYi9tYXN0ZXIvcG9pbnRlcmV2ZW50cy9wb2ludGVyZXZlbnRfcG9pbnRlcm1vdmVfb25fY2hvcmRlZF9tb3VzZV9idXR0b24uaHRtbFxuZnVuY3Rpb24gUG9pbnRlckV2ZW50UG9pbnRlck1vdmVPbkNob3JkZWRNb3VzZUJ1dHRvblRlc3RDYXNlKFxuICBwcm9wczogUGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzLFxuKSB7XG4gIGNvbnN0IHtoYXJuZXNzfSA9IHByb3BzO1xuXG4gIGNvbnN0IHRlc3RfcG9pbnRlcm1vdmUgPSBoYXJuZXNzLnVzZUFzeW5jVGVzdChcbiAgICAncG9pbnRlcm1vdmUgZXZlbnRzIHJlY2VpdmVkIGZvciBidXR0b24gc3RhdGUgY2hhbmdlcycsXG4gICk7XG5cbiAgY29uc3Qgc3RlcFJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3QgZmlyc3RCdXR0b25SZWYgPSB1c2VSZWYoMCk7XG5cbiAgLy8gV2hlbiBhIHBvaW50ZXIgY2hhbmdlcyBidXR0b24gc3RhdGUgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHByb2R1Y2Ugbm8gb3RoZXIgcG9pbnRlciBldmVudCwgdGhlIHBvaW50ZXJtb3ZlIGV2ZW50IG11c3QgYmUgZGlzcGF0Y2hlZC5cbiAgLy8gNS4yLjZcblxuICBjb25zdCBoYW5kbGVQb2ludGVyRG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICB0ZXN0X3BvaW50ZXJtb3ZlLnN0ZXAoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIHN0ZXBSZWYuY3VycmVudCxcbiAgICAgICAgICAwLFxuICAgICAgICAgICdUaGVyZSBtdXN0IG5vdCBiZSBtb3JlIHRoYW4gb25lIHBvaW50ZXIgZG93biBldmVudC4nLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpZiAoc3RlcFJlZi5jdXJyZW50ID09PSAwKSB7XG4gICAgICAgIHN0ZXBSZWYuY3VycmVudCA9IDE7XG4gICAgICAgIGZpcnN0QnV0dG9uUmVmLmN1cnJlbnQgPSBldmVudC5uYXRpdmVFdmVudC5idXR0b25zO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Rlc3RfcG9pbnRlcm1vdmVdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIGlmIChzdGVwUmVmLmN1cnJlbnQgPT09IDEgJiYgZXZlbnQubmF0aXZlRXZlbnQuYnV0dG9uICE9PSAtMSkge1xuICAgICAgICAvLyBzZWNvbmQgYnV0dG9uIHByZXNzZWRcbiAgICAgICAgdGVzdF9wb2ludGVybW92ZS5zdGVwKCh7YXNzZXJ0X25vdF9lcXVhbHMsIGFzc2VydF90cnVlfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKFxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuYnV0dG9ucyxcbiAgICAgICAgICAgIGZpcnN0QnV0dG9uUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAnVGhlIHBvaW50ZXJtb3ZlIGV2ZW50IG11c3QgYmUgdHJpZ2dlcmVkIGJ5IHByZXNzaW5nIGEgc2Vjb25kIGJ1dHRvbi4nLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0X3RydWUoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgKGV2ZW50Lm5hdGl2ZUV2ZW50LmJ1dHRvbnMgJiBmaXJzdEJ1dHRvblJlZi5jdXJyZW50KSAhPT0gMCxcbiAgICAgICAgICAgICdUaGUgZmlyc3QgYnV0dG9uIG11c3Qgc3RpbGwgYmUgcmVwb3J0ZWQgcHJlc3NlZC4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGVwUmVmLmN1cnJlbnQgPSAyO1xuICAgICAgfSBlbHNlIGlmIChzdGVwUmVmLmN1cnJlbnQgPT09IDIgJiYgZXZlbnQubmF0aXZlRXZlbnQuYnV0dG9uICE9PSAtMSkge1xuICAgICAgICAvLyBzZWNvbmQgYnV0dG9uIHJlbGVhc2VkXG4gICAgICAgIHRlc3RfcG9pbnRlcm1vdmUuc3RlcCgoe2Fzc2VydF9lcXVhbHN9KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmJ1dHRvbnMsXG4gICAgICAgICAgICBmaXJzdEJ1dHRvblJlZi5jdXJyZW50LFxuICAgICAgICAgICAgJ1RoZSBwb2ludGVybW92ZSBldmVudCBtdXN0IGJlIHRyaWdnZXJlZCBieSByZWxlYXNpbmcgdGhlIHNlY29uZCBidXR0b24uJyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RlcFJlZi5jdXJyZW50ID0gMztcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0ZXN0X3BvaW50ZXJtb3ZlXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyVXAgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgdGVzdF9wb2ludGVybW92ZS5zdGVwKCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICBzdGVwUmVmLmN1cnJlbnQsXG4gICAgICAgICAgMyxcbiAgICAgICAgICAnVGhlIHBvaW50ZXJ1cCBldmVudCBtdXN0IGJlIHRyaWdnZXJlZCBhZnRlciBwcmVzc2luZyBhbmQgcmVsZWFzaW5nIHRoZSBzZWNvbmQgYnV0dG9uLicsXG4gICAgICAgICk7XG4gICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuYnV0dG9ucyxcbiAgICAgICAgICAwLFxuICAgICAgICAgICdUaGUgcG9pbnRlcnVwIGV2ZW50IG11c3QgYmUgdHJpZ2dlcmVkIGJ5IHJlbGVhc2luZyB0aGUgbGFzdCBwcmVzc2VkIGJ1dHRvbi4nLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0ZXN0X3BvaW50ZXJtb3ZlLmRvbmUoKTtcbiAgICB9LFxuICAgIFt0ZXN0X3BvaW50ZXJtb3ZlXSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3XG4gICAgICBvblBvaW50ZXJEb3duPXtoYW5kbGVQb2ludGVyRG93bn1cbiAgICAgIG9uUG9pbnRlck1vdmU9e2hhbmRsZVBvaW50ZXJNb3ZlfVxuICAgICAgb25Qb2ludGVyVXA9e2hhbmRsZVBvaW50ZXJVcH1cbiAgICAgIHN0eWxlPXtzdHlsZXMudGFyZ2V0fVxuICAgIC8+XG4gICk7XG59XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e30+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50UG9pbnRlck1vdmVPbkNob3JkZWRNb3VzZUJ1dHRvbihcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RcbiAgICAgIGNvbXBvbmVudD17UG9pbnRlckV2ZW50UG9pbnRlck1vdmVPbkNob3JkZWRNb3VzZUJ1dHRvblRlc3RDYXNlfVxuICAgICAgZGVzY3JpcHRpb249XCJUaGlzIHRlc3QgY2hlY2tzIGlmIHBvaW50ZXJtb3ZlIGV2ZW50IGFyZSB0cmlnZ2VyZWQgYnkgYnV0dG9uIHN0YXRlIGNoYW5nZXNcIlxuICAgICAgaW5zdHJ1Y3Rpb25zPXtbXG4gICAgICAgICdQdXQgeW91ciBtb3VzZSBvdmVyIHRoZSBibGFjayByZWN0YW5nbGUnLFxuICAgICAgICAnUHJlc3MgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGFuZCBob2xkIGl0JyxcbiAgICAgICAgJ1ByZXNzIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uJyxcbiAgICAgICAgJ1JlbGVhc2UgdGhlIG1pZGRsZSBtb3VzZSBidXR0b24nLFxuICAgICAgICAnUmVsZWFzZSB0aGUgbGVmdCBtb3VzZSBidXR0b24gdG8gY29tcGxldGUgdGhlIHRlc3QnLFxuICAgICAgXX1cbiAgICAgIHRpdGxlPVwiUG9pbnRlckV2ZW50cyBwb2ludGVybW92ZSBvbiBidXR0b24gc3RhdGUgY2hhbmdlc1wiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzfSBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RUeXBlcyc7XG5pbXBvcnQgdHlwZSB7Vmlld1Byb3BzfSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvbXBvbmVudHMvVmlldy9WaWV3UHJvcFR5cGVzJztcbmltcG9ydCB0eXBlIHtIb3N0Q29tcG9uZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1JlbmRlcmVyL3NoaW1zL1JlYWN0TmF0aXZlVHlwZXMnO1xuaW1wb3J0IHR5cGUge1BvaW50ZXJFdmVudH0gZnJvbSAncmVhY3QtbmF0aXZlL0xpYnJhcmllcy9UeXBlcy9Db3JlRXZlbnRUeXBlcyc7XG5cbmltcG9ydCBSTlRlc3RlclBsYXRmb3JtVGVzdCBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1N0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZVRhZ0Zyb21Ib3N0RWxlbWVudChcbiAgZWxlbTogP1JlYWN0LkVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxtaXhlZD4+IHwgbnVtYmVyLFxuKTogP251bWJlciB7XG4gIGlmICh0eXBlb2YgZWxlbSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZWxlbTtcbiAgfVxuICBpZiAoZWxlbSAhPSBudWxsKSB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gYWNjZXNzaW5nIG5vbi1wdWJsaWMgcHJvcGVydHlcbiAgICByZXR1cm4gZWxlbS5fbmF0aXZlVGFnO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgb3V0ZXI6IHtcbiAgICBwYWRkaW5nOiA0MCxcbiAgICBoZWlnaHQ6IDYwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2JsdWUnLFxuICB9LFxuICBpbm5lcjoge1xuICAgIHBhZGRpbmc6IDQwLFxuICAgIGhlaWdodDogNjAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuICB9LFxuICByZWxlYXNlZDoge1xuICAgIHBhZGRpbmc6IDQwLFxuICAgIGhlaWdodDogNjAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAneWVsbG93JyxcbiAgfSxcbn0pO1xuXG4vLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvYmxvYi9tYXN0ZXIvdWlldmVudHMvb3JkZXItb2YtZXZlbnRzL21vdXNlLWV2ZW50cy9tb3VzZW92ZXItb3V0Lmh0bWxcbmZ1bmN0aW9uIFBvaW50ZXJFdmVudFBvaW50ZXJPdmVyT3V0VGVzdENhc2UoXG4gIHByb3BzOiBQbGF0Zm9ybVRlc3RDb21wb25lbnRCYXNlUHJvcHMsXG4pIHtcbiAgY29uc3Qge2hhcm5lc3N9ID0gcHJvcHM7XG5cbiAgY29uc3QgdCA9IGhhcm5lc3MudXNlQXN5bmNUZXN0KCdQb2ludGVyT3Zlci9PdXQgZXZlbnRzJyk7XG5cbiAgY29uc3QgaW5uZXJOYXRpdmVUYWdSZWYgPSB1c2VSZWYoLTEpO1xuICBjb25zdCBvdXRlck5hdGl2ZVRhZ1JlZiA9IHVzZVJlZigtMSk7XG5cbiAgY29uc3QgaGFuZGxlSW5uZXJSZWZDYWxsYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIGVsZW06IG51bGwgfCBSZWFjdCRFbGVtZW50UmVmPFxuICAgICAgICBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxcbiAgICAgICAgICBWaWV3UHJvcHMsXG4gICAgICAgICAgUmVhY3QuRWxlbWVudFJlZjxIb3N0Q29tcG9uZW50PFZpZXdQcm9wcz4+LFxuICAgICAgICA+LFxuICAgICAgPixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IG5hdGl2ZVRhZyA9IGdldE5hdGl2ZVRhZ0Zyb21Ib3N0RWxlbWVudChlbGVtKTtcbiAgICAgIGlubmVyTmF0aXZlVGFnUmVmLmN1cnJlbnQgPSBuYXRpdmVUYWcgIT0gbnVsbCA/IG5hdGl2ZVRhZyA6IC0xO1xuICAgIH0sXG4gICAgW10sXG4gICk7XG4gIGNvbnN0IGhhbmRsZU91dGVyUmVmQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBlbGVtOiBudWxsIHwgUmVhY3QkRWxlbWVudFJlZjxcbiAgICAgICAgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8XG4gICAgICAgICAgVmlld1Byb3BzLFxuICAgICAgICAgIFJlYWN0LkVsZW1lbnRSZWY8SG9zdENvbXBvbmVudDxWaWV3UHJvcHM+PixcbiAgICAgICAgPixcbiAgICAgID4sXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBuYXRpdmVUYWcgPSBnZXROYXRpdmVUYWdGcm9tSG9zdEVsZW1lbnQoZWxlbSk7XG4gICAgICBvdXRlck5hdGl2ZVRhZ1JlZi5jdXJyZW50ID0gbmF0aXZlVGFnICE9IG51bGwgPyBuYXRpdmVUYWcgOiAtMTtcbiAgICB9LFxuICAgIFtdLFxuICApO1xuXG4gIGNvbnN0IGlubmVyT3ZlclJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3QgaW5uZXJPdXRSZWYgPSB1c2VSZWYoMCk7XG5cbiAgY29uc3Qgb3V0ZXJPd25PdmVyUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBvdXRlck93bk91dFJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3Qgb3V0ZXJPdmVyUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBvdXRlck91dFJlZiA9IHVzZVJlZigwKTtcblxuICBjb25zdCBpbm5lclBvaW50ZXJPdmVySGFuZGxlciA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIHQuc3RlcCgoe2Fzc2VydF9lcXVhbHMsIGFzc2VydF90cnVlfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIGlubmVyT3ZlclJlZi5jdXJyZW50LFxuICAgICAgICAgIGlubmVyT3V0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgJ3BvaW50ZXJvdmVyIGlzIHJlY2lldmVkIGJlZm9yZSBwb2ludGVyb3V0JyxcbiAgICAgICAgKTtcbiAgICAgICAgc3dpdGNoIChpbm5lck92ZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgIGNhc2UgMDoge1xuICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgICAgb3V0ZXJPd25PdmVyUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICdzaG91bGQgaGF2ZSB0cmlnZ2VyZWQgYSBwb2ludGVyb3ZlciBpbiB0aGUgb3V0ZXIgYmVmb3JlJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgICBvdXRlck93bk92ZXJSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgJ3Nob3VsZCBoYXZlIG5vdCB0cmlnZ2VyZWQgYSBwb2ludGVyb3ZlciBpbiB0aGUgb3V0ZXIgYmVmb3JlJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICdzaG91bGQgbm90IGdldCBtb3JlIHRoYW4gdHdvIG1vdXNlb3ZlcnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaW5uZXJPdmVyUmVmLmN1cnJlbnQrKztcbiAgICB9LFxuICAgIFt0XSxcbiAgKTtcbiAgY29uc3QgaW5uZXJQb2ludGVyT3V0SGFuZGxlciA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIHQuc3RlcCgoe2Fzc2VydF9lcXVhbHMsIGFzc2VydF90cnVlfSkgPT4ge1xuICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgIGlubmVyT3ZlclJlZi5jdXJyZW50LFxuICAgICAgICAgIGlubmVyT3V0UmVmLmN1cnJlbnQgKyAxLFxuICAgICAgICAgICdwb2ludGVyb3V0IGlzIHJlY2VpdmVkIGFmdGVyIHBvaW50ZXJvdmVyJyxcbiAgICAgICAgKTtcbiAgICAgICAgc3dpdGNoIChpbm5lck91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY2FzZSAwOiB7XG4gICAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgICBvdXRlck93bk91dFJlZi5jdXJyZW50LFxuICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAncG9pbnRlcm91dCBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGluIHRoZSBwYXJlbnQgd2hlbiBob3ZlcmluZyBvdmVyIHRoaXMgZWxlbWVudCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGFzc2VydF90cnVlKGZhbHNlLCAnc2hvdWxkIG5vdCBnZXQgbW9yZSB0aGFuIHR3byBwb2ludGVyb3V0cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpbm5lck91dFJlZi5jdXJyZW50Kys7XG4gICAgfSxcbiAgICBbdF0sXG4gICk7XG5cbiAgY29uc3Qgb3V0ZXJQb2ludGVyT3ZlckhhbmRsZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBldmVudEVsZW1UYWcgPSBnZXROYXRpdmVUYWdGcm9tSG9zdEVsZW1lbnQoZS50YXJnZXQpO1xuICAgICAgdC5zdGVwKCh7YXNzZXJ0X2VxdWFsc30pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50RWxlbVRhZyA9PT0gb3V0ZXJOYXRpdmVUYWdSZWYuY3VycmVudCkge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBvdXRlck93bk92ZXJSZWYuY3VycmVudCxcbiAgICAgICAgICAgIG91dGVyT3duT3V0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAnb3V0ZXI6IHBvaW50ZXJvdmVyIGlzIHJlY2lldmVkIGJlZm9yZSBwb2ludGVyb3V0JyxcbiAgICAgICAgICApO1xuICAgICAgICAgIG91dGVyT3duT3ZlclJlZi5jdXJyZW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIG91dGVyT3ZlclJlZi5jdXJyZW50IC0gb3V0ZXJPd25PdmVyUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICBpbm5lck92ZXJSZWYuY3VycmVudCAtIDEsXG4gICAgICAgICAgICAncG9pbnRlcm92ZXI6IHNob3VsZCBvbmx5IHJlY2VpdmUgdGhpcyB2aWEgYnViYmxpbmcnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb3V0ZXJPdmVyUmVmLmN1cnJlbnQrKztcbiAgICB9LFxuICAgIFt0XSxcbiAgKTtcbiAgY29uc3Qgb3V0ZXJQb2ludGVyT3V0SGFuZGxlciA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50RWxlbVRhZyA9IGdldE5hdGl2ZVRhZ0Zyb21Ib3N0RWxlbWVudChlLnRhcmdldCk7XG4gICAgICB0LnN0ZXAoKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICBpZiAoZXZlbnRFbGVtVGFnID09PSBvdXRlck5hdGl2ZVRhZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgYXNzZXJ0X2VxdWFscyhcbiAgICAgICAgICAgIG91dGVyT3duT3ZlclJlZi5jdXJyZW50LFxuICAgICAgICAgICAgb3V0ZXJPd25PdXRSZWYuY3VycmVudCArIDEsXG4gICAgICAgICAgICAnb3V0ZXI6IHBvaW50ZXJvdXQgaXMgcmVjaWV2ZWQgYWZ0ZXIgcG9pbnRlcm92ZXInLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG91dGVyT3duT3V0UmVmLmN1cnJlbnQgPT09IDEpIHtcbiAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoaW5uZXJPdXRSZWYuY3VycmVudCwgMiwgJ2lubmVyIHNob3VsZCBiZSBkb25lIG5vdycpO1xuICAgICAgICAgICAgdC5kb25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dGVyT3duT3V0UmVmLmN1cnJlbnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgb3V0ZXJPdXRSZWYuY3VycmVudCAtIG91dGVyT3duT3V0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICBpbm5lck91dFJlZi5jdXJyZW50IC0gMSxcbiAgICAgICAgICAgICdwb2ludGVyb3V0OiBzaG91bGQgb25seSByZWNpZXZlIHRoaXMgdmlhIGJ1YmJsaW5nJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG91dGVyT3V0UmVmLmN1cnJlbnQrKztcbiAgICB9LFxuICAgIFt0XSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Vmlld1xuICAgICAgICByZWY9e2hhbmRsZU91dGVyUmVmQ2FsbGJhY2t9XG4gICAgICAgIG9uUG9pbnRlck92ZXI9e291dGVyUG9pbnRlck92ZXJIYW5kbGVyfVxuICAgICAgICBvblBvaW50ZXJPdXQ9e291dGVyUG9pbnRlck91dEhhbmRsZXJ9XG4gICAgICAgIHN0eWxlPXtzdHlsZXMub3V0ZXJ9PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHJlZj17aGFuZGxlSW5uZXJSZWZDYWxsYmFja31cbiAgICAgICAgICBvblBvaW50ZXJPdmVyPXtpbm5lclBvaW50ZXJPdmVySGFuZGxlcn1cbiAgICAgICAgICBvblBvaW50ZXJPdXQ9e2lubmVyUG9pbnRlck91dEhhbmRsZXJ9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5pbm5lcn1cbiAgICAgICAgLz5cbiAgICAgIDwvVmlldz5cbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMucmVsZWFzZWR9IC8+XG4gICAgPC8+XG4gICk7XG59XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e30+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50UG9pbnRlck92ZXJPdXQoXG4gIHByb3BzOiBQcm9wcyxcbik6IFJlYWN0Lk1peGVkRWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPFJOVGVzdGVyUGxhdGZvcm1UZXN0XG4gICAgICBjb21wb25lbnQ9e1BvaW50ZXJFdmVudFBvaW50ZXJPdmVyT3V0VGVzdENhc2V9XG4gICAgICBkZXNjcmlwdGlvbj1cIlwiXG4gICAgICBpbnN0cnVjdGlvbnM9e1tcbiAgICAgICAgJ01vdmUgeW91ciBtb3VzZSBvdmVyIHRoZSBibHVlIHZpZXcsIGxhdGVyIG92ZXIgdGhlIGdyZWVuIG9uZSwgbGF0ZXIgb3ZlciB0aGUgeWVsbG93IG9uZS4nLFxuICAgICAgICAnTW92ZSB0aGUgbW91c2UgZnJvbSB0aGUgeWVsbG93IHZpZXcgdG8gdGhlIGdyZWVuIG9uZSwgbGF0ZXIgdG8gdGhlIGJsdWUgb25lLCBhbmQgbGF0ZXIgb3ZlciB0aGlzIHBhcmFncmFwaC4nLFxuICAgICAgXX1cbiAgICAgIHRpdGxlPVwiUG9pbnRlck92ZXIvUG9pbnRlck91dCBoYW5kbGluZ1wiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7UGxhdGZvcm1UZXN0Q29tcG9uZW50QmFzZVByb3BzfSBmcm9tICcuLi9QbGF0Zm9ybVRlc3QvUk5UZXN0ZXJQbGF0Zm9ybVRlc3RUeXBlcyc7XG5pbXBvcnQgdHlwZSB7UG9pbnRlckV2ZW50fSBmcm9tICdyZWFjdC1uYXRpdmUvTGlicmFyaWVzL1R5cGVzL0NvcmVFdmVudFR5cGVzJztcblxuaW1wb3J0IFJOVGVzdGVyUGxhdGZvcm1UZXN0IGZyb20gJy4uL1BsYXRmb3JtVGVzdC9STlRlc3RlclBsYXRmb3JtVGVzdCc7XG5pbXBvcnQge3VzZVRlc3RFdmVudEhhbmRsZXJ9IGZyb20gJy4vUG9pbnRlckV2ZW50U3VwcG9ydCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U3R5bGVTaGVldCwgVmlld30gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICByb290OiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnLFxuICAgIHBhZGRpbmdUb3A6IDIwLFxuICB9LFxuICBib3g6IHtcbiAgICB3aWR0aDogODAsXG4gICAgaGVpZ2h0OiA4MCxcbiAgfSxcbn0pO1xuXG5jb25zdCBsaXN0ZW5lZEV2ZW50cyA9IFsncG9pbnRlckRvd24nLCAncG9pbnRlclVwJ107XG5cbmNvbnN0IGV4cGVjdGVkT3JkZXIgPSBbXG4gIFsncmVkJywgJ3BvaW50ZXJEb3duJywgdHJ1ZV0sXG4gIFsnZ3JlZW4nLCAncG9pbnRlckRvd24nLCBmYWxzZV0sXG4gIFsncmVkJywgJ3BvaW50ZXJVcCcsIHRydWVdLFxuICBbJ2JsdWUnLCAncG9pbnRlckRvd24nLCB0cnVlXSxcbiAgWydncmVlbicsICdwb2ludGVyVXAnLCBmYWxzZV0sXG4gIFsnYmx1ZScsICdwb2ludGVyVXAnLCB0cnVlXSxcbl07XG5cbmZ1bmN0aW9uIFBvaW50ZXJFdmVudFByaW1hcnlUb3VjaFBvaW50ZXJUZXN0Q2FzZShcbiAgcHJvcHM6IFBsYXRmb3JtVGVzdENvbXBvbmVudEJhc2VQcm9wcyxcbikge1xuICBjb25zdCB7aGFybmVzc30gPSBwcm9wcztcblxuICBjb25zdCBkZXRlY3RlZF9ldmVudHNSZWYgPSB1c2VSZWYoKHt9OiB7W3N0cmluZ106IGJvb2xlYW59KSk7XG5cbiAgY29uc3QgaGFuZGxlSW5jb21pbmdQb2ludGVyRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoYm94TGFiZWw6IHN0cmluZywgZXZlbnRUeXBlOiBzdHJpbmcsIGlzUHJpbWFyeTogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgZGV0ZWN0ZWRfZXZlbnRzID0gZGV0ZWN0ZWRfZXZlbnRzUmVmLmN1cnJlbnQ7XG5cbiAgICAgIGNvbnN0IHBvaW50ZXJFdmVudElkZW50aWZpZXIgPSBgJHtib3hMYWJlbH0tJHtldmVudFR5cGV9LSR7U3RyaW5nKFxuICAgICAgICBpc1ByaW1hcnksXG4gICAgICApfWA7XG4gICAgICBpZiAoZGV0ZWN0ZWRfZXZlbnRzW3BvaW50ZXJFdmVudElkZW50aWZpZXJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2V4cGVjdGVkQm94TGFiZWwsIGV4cGVjdGVkRXZlbnRUeXBlLCBleHBlY3RlZElzUHJpbWFyeV0gPVxuICAgICAgICBleHBlY3RlZE9yZGVyW09iamVjdC5rZXlzKGRldGVjdGVkX2V2ZW50cykubGVuZ3RoXTtcbiAgICAgIGRldGVjdGVkX2V2ZW50c1twb2ludGVyRXZlbnRJZGVudGlmaWVyXSA9IHRydWU7XG5cbiAgICAgIGhhcm5lc3MudGVzdChcbiAgICAgICAgKHthc3NlcnRfZXF1YWxzfSkgPT4ge1xuICAgICAgICAgIGFzc2VydF9lcXVhbHMoXG4gICAgICAgICAgICBib3hMYWJlbCxcbiAgICAgICAgICAgIGV4cGVjdGVkQm94TGFiZWwsXG4gICAgICAgICAgICAnZXZlbnQgc2hvdWxkIGJlIGNvbWluZyBmcm9tIHRoZSBjb3JyZWN0IGJveCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICAgICAgZXhwZWN0ZWRFdmVudFR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICdldmVudCBzaG91bGQgaGF2ZSB0aGUgcmlnaHQgdHlwZScsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnRfZXF1YWxzKFxuICAgICAgICAgICAgaXNQcmltYXJ5LFxuICAgICAgICAgICAgZXhwZWN0ZWRJc1ByaW1hcnksXG4gICAgICAgICAgICAnZXZlbnQgc2hvdWxkIGJlIGNvcnJlY3RseSBwcmltYXJ5JyxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBgJHtleHBlY3RlZEJveExhYmVsfSBib3gncyAke2V4cGVjdGVkRXZlbnRUeXBlfSBzaG91bGQke1xuICAgICAgICAgICFleHBlY3RlZElzUHJpbWFyeSA/ICcgbm90JyA6ICcnXG4gICAgICAgIH0gYmUgbWFya2VkIGFzIHRoZSBwcmltYXJ5IHBvaW50ZXJgLFxuICAgICAgKTtcbiAgICB9LFxuICAgIFtoYXJuZXNzXSxcbiAgKTtcblxuICBjb25zdCBjcmVhdGVCb3hIYW5kbGVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGJveExhYmVsOiBzdHJpbmcpID0+IChldmVudDogUG9pbnRlckV2ZW50LCBldmVudE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyhkZXRlY3RlZF9ldmVudHNSZWYuY3VycmVudCkubGVuZ3RoIDwgZXhwZWN0ZWRPcmRlci5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVJbmNvbWluZ1BvaW50ZXJFdmVudChcbiAgICAgICAgICBib3hMYWJlbCxcbiAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuaXNQcmltYXJ5LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUluY29taW5nUG9pbnRlckV2ZW50XSxcbiAgKTtcblxuICBjb25zdCB7aGFuZGxlQm94QUV2ZW50LCBoYW5kbGVCb3hCRXZlbnQsIGhhbmRsZUJveENFdmVudH0gPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBoYW5kbGVCb3hBRXZlbnQ6IGNyZWF0ZUJveEhhbmRsZXIoJ3JlZCcpLFxuICAgICAgaGFuZGxlQm94QkV2ZW50OiBjcmVhdGVCb3hIYW5kbGVyKCdncmVlbicpLFxuICAgICAgaGFuZGxlQm94Q0V2ZW50OiBjcmVhdGVCb3hIYW5kbGVyKCdibHVlJyksXG4gICAgfSksXG4gICAgW2NyZWF0ZUJveEhhbmRsZXJdLFxuICApO1xuXG4gIGNvbnN0IGJveEFIYW5kbGVycyA9IHVzZVRlc3RFdmVudEhhbmRsZXIobGlzdGVuZWRFdmVudHMsIGhhbmRsZUJveEFFdmVudCk7XG4gIGNvbnN0IGJveEJIYW5kbGVycyA9IHVzZVRlc3RFdmVudEhhbmRsZXIobGlzdGVuZWRFdmVudHMsIGhhbmRsZUJveEJFdmVudCk7XG4gIGNvbnN0IGJveENIYW5kbGVycyA9IHVzZVRlc3RFdmVudEhhbmRsZXIobGlzdGVuZWRFdmVudHMsIGhhbmRsZUJveENFdmVudCk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPFZpZXcgey4uLmJveEFIYW5kbGVyc30gc3R5bGU9e1tzdHlsZXMuYm94LCB7YmFja2dyb3VuZENvbG9yOiAncmVkJ31dfSAvPlxuICAgICAgPFZpZXdcbiAgICAgICAgey4uLmJveEJIYW5kbGVyc31cbiAgICAgICAgc3R5bGU9e1tzdHlsZXMuYm94LCB7YmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nfV19XG4gICAgICAvPlxuICAgICAgPFZpZXcgey4uLmJveENIYW5kbGVyc30gc3R5bGU9e1tzdHlsZXMuYm94LCB7YmFja2dyb3VuZENvbG9yOiAnYmx1ZSd9XX0gLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59XG5cbnR5cGUgUHJvcHMgPSAkUmVhZE9ubHk8e30+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9pbnRlckV2ZW50UHJpbWFyeVRvdWNoUG9pbnRlcihcbiAgcHJvcHM6IFByb3BzLFxuKTogUmVhY3QuTWl4ZWRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Uk5UZXN0ZXJQbGF0Zm9ybVRlc3RcbiAgICAgIGNvbXBvbmVudD17UG9pbnRlckV2ZW50UHJpbWFyeVRvdWNoUG9pbnRlclRlc3RDYXNlfVxuICAgICAgZGVzY3JpcHRpb249XCJUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgY29ycmVjdCBkaWZmZXJlbnRpYXRpb24gb2YgYSBwcmltYXJ5IHBvaW50ZXIgaW4gYSBtdWx0aXRvdWNoIHNjZW5hcmlvXCJcbiAgICAgIGluc3RydWN0aW9ucz17W1xuICAgICAgICAnVG91Y2ggYW5kIGhvbGQgeW91ciBmaW5nZXIgb24gdGhlIHJlZCBib3gnLFxuICAgICAgICAnVGFrZSBkaWZmZXJlbnQgZmluZ2VyIGFuZCB0b3VjaCBhbmQgaG9sZCB0aGUgZ3JlZW4gYm94JyxcbiAgICAgICAgJ0xpZnQgeW91ciBmaW5nZXIgZnJvbSB0aGUgcmVkIGJveCBhbmQgcGxhY2UgaXQgb24gdGhlIGJsdWUgYm94JyxcbiAgICAgICAgJ0xpZnQgeW91ciBmaW5nZXIgZnJvbSB0aGUgZ3JlZW4gYm94JyxcbiAgICAgICAgJ0xpZnQgeW91ciBmaW5nZXIgZnJvbSB0aGUgYmx1ZSBib3gnLFxuICAgICAgXX1cbiAgICAgIHRpdGxlPVwiUG9pbnRlciBFdmVudCBwcmltYXJ5IHRvdWNoIHBvaW50ZXIgdGVzdFwiXG4gICAgLz5cbiAgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50TGlzdCxcbiAgUk5UZXN0ZXJOYXZpZ2F0aW9uU3RhdGUsXG59IGZyb20gJy4uL3R5cGVzL1JOVGVzdGVyVHlwZXMnO1xuXG5leHBvcnQgY29uc3QgUk5UZXN0ZXJOYXZpZ2F0aW9uQWN0aW9uc1R5cGUgPSB7XG4gIE5BVkJBUl9QUkVTUzogJ05BVkJBUl9QUkVTUycsXG4gIEJBQ0tfQlVUVE9OX1BSRVNTOiAnQkFDS19CVVRUT05fUFJFU1MnLFxuICBNT0RVTEVfQ0FSRF9QUkVTUzogJ01PRFVMRV9DQVJEX1BSRVNTJyxcbiAgRVhBTVBMRV9DQVJEX1BSRVNTOiAnRVhBTVBMRV9DQVJEX1BSRVNTJyxcbiAgRVhBTVBMRV9PUEVOX1VSTF9SRVFVRVNUOiAnRVhBTVBMRV9PUEVOX1VSTF9SRVFVRVNUJyxcbn07XG5cbmNvbnN0IGdldFVwZGF0ZWRSZWNlbnRseVVzZWQgPSAoe1xuICBleGFtcGxlVHlwZSxcbiAga2V5LFxuICByZWNlbnRseVVzZWQsXG59OiB7XG4gIGV4YW1wbGVUeXBlOiAnYXBpcycgfCAnY29tcG9uZW50cycgfCBudWxsLFxuICBrZXk6IHN0cmluZyB8IG51bGwsXG4gIHJlY2VudGx5VXNlZDogQ29tcG9uZW50TGlzdCxcbn0pID0+IHtcbiAgY29uc3QgdXBkYXRlZFJlY2VudGx5VXNlZCA9IHJlY2VudGx5VXNlZFxuICAgID8gey4uLnJlY2VudGx5VXNlZH1cbiAgICA6IC8vICRGbG93Rml4TWVbbWlzc2luZy1lbXB0eS1hcnJheS1hbm5vdF1cbiAgICAgIHtjb21wb25lbnRzOiBbXSwgYXBpczogW119O1xuXG4gIGlmICghZXhhbXBsZVR5cGUgfHwgIWtleSkge1xuICAgIHJldHVybiB1cGRhdGVkUmVjZW50bHlVc2VkO1xuICB9XG5cbiAgbGV0IGV4aXN0aW5nS2V5cyA9IHVwZGF0ZWRSZWNlbnRseVVzZWRbZXhhbXBsZVR5cGVdO1xuXG4gIGlmIChleGlzdGluZ0tleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgIGV4aXN0aW5nS2V5cyA9IGV4aXN0aW5nS2V5cy5maWx0ZXIoayA9PiBrICE9PSBrZXkpO1xuICB9XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gIGV4aXN0aW5nS2V5cy51bnNoaWZ0KGtleSk7XG5cbiAgdXBkYXRlZFJlY2VudGx5VXNlZFtleGFtcGxlVHlwZV0gPSBleGlzdGluZ0tleXMuc2xpY2UoMCwgNSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRSZWNlbnRseVVzZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgUk5UZXN0ZXJOYXZpZ2F0aW9uUmVkdWNlciA9IChcbiAgc3RhdGU6IFJOVGVzdGVyTmF2aWdhdGlvblN0YXRlLFxuICBhY3Rpb246IHt0eXBlOiAkS2V5czx0eXBlb2YgUk5UZXN0ZXJOYXZpZ2F0aW9uQWN0aW9uc1R5cGU+LCBkYXRhPzogYW55fSxcbik6IFJOVGVzdGVyTmF2aWdhdGlvblN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRhdGE6IHtcbiAgICAgIGtleSA9IG51bGwsXG4gICAgICB0aXRsZSA9IG51bGwsXG4gICAgICBleGFtcGxlS2V5ID0gbnVsbCxcbiAgICAgIGV4YW1wbGVUeXBlID0gbnVsbCxcbiAgICAgIHNjcmVlbiA9IG51bGwsXG4gICAgfSA9IHt9LFxuICB9ID0gYWN0aW9uO1xuXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIFJOVGVzdGVyTmF2aWdhdGlvbkFjdGlvbnNUeXBlLk5BVkJBUl9QUkVTUzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhY3RpdmVNb2R1bGVLZXk6IG51bGwsXG4gICAgICAgIGFjdGl2ZU1vZHVsZVRpdGxlOiBudWxsLFxuICAgICAgICBhY3RpdmVNb2R1bGVFeGFtcGxlS2V5OiBudWxsLFxuICAgICAgICBzY3JlZW4sXG4gICAgICAgIGhhZERlZXBMaW5rOiBmYWxzZSxcbiAgICAgIH07XG5cbiAgICBjYXNlIFJOVGVzdGVyTmF2aWdhdGlvbkFjdGlvbnNUeXBlLk1PRFVMRV9DQVJEX1BSRVNTOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZU1vZHVsZUtleToga2V5LFxuICAgICAgICBhY3RpdmVNb2R1bGVUaXRsZTogdGl0bGUsXG4gICAgICAgIGFjdGl2ZU1vZHVsZUV4YW1wbGVLZXk6IG51bGwsXG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgICAgcmVjZW50bHlVc2VkOiBnZXRVcGRhdGVkUmVjZW50bHlVc2VkKHtcbiAgICAgICAgICBleGFtcGxlVHlwZTogZXhhbXBsZVR5cGUsXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgcmVjZW50bHlVc2VkOiBzdGF0ZS5yZWNlbnRseVVzZWQsXG4gICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgIGNhc2UgUk5UZXN0ZXJOYXZpZ2F0aW9uQWN0aW9uc1R5cGUuRVhBTVBMRV9DQVJEX1BSRVNTOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZU1vZHVsZUV4YW1wbGVLZXk6IGtleSxcbiAgICAgIH07XG5cbiAgICBjYXNlIFJOVGVzdGVyTmF2aWdhdGlvbkFjdGlvbnNUeXBlLkJBQ0tfQlVUVE9OX1BSRVNTOlxuICAgICAgLy8gR28gYmFjayB0byBtb2R1bGUgb3IgbGlzdC5cbiAgICAgIC8vIElmIHRoZXJlIHdhcyBhIGRlZXBsaW5rIG5hdmlnYXRpb24sIHByZXNzaW5nIEJhY2sgc2hvdWxkIGJyaW5nIHVzIGJhY2sgdG8gdGhlIHJvb3QuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlTW9kdWxlRXhhbXBsZUtleTogbnVsbCxcbiAgICAgICAgYWN0aXZlTW9kdWxlS2V5OlxuICAgICAgICAgICFzdGF0ZS5oYWREZWVwTGluayAmJiBzdGF0ZS5hY3RpdmVNb2R1bGVFeGFtcGxlS2V5ICE9IG51bGxcbiAgICAgICAgICAgID8gc3RhdGUuYWN0aXZlTW9kdWxlS2V5XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGFjdGl2ZU1vZHVsZVRpdGxlOlxuICAgICAgICAgICFzdGF0ZS5oYWREZWVwTGluayAmJiBzdGF0ZS5hY3RpdmVNb2R1bGVFeGFtcGxlS2V5ICE9IG51bGxcbiAgICAgICAgICAgID8gc3RhdGUuYWN0aXZlTW9kdWxlVGl0bGVcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgaGFkRGVlcExpbms6IGZhbHNlLFxuICAgICAgfTtcblxuICAgIGNhc2UgUk5UZXN0ZXJOYXZpZ2F0aW9uQWN0aW9uc1R5cGUuRVhBTVBMRV9PUEVOX1VSTF9SRVFVRVNUOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZU1vZHVsZUtleToga2V5LFxuICAgICAgICBhY3RpdmVNb2R1bGVUaXRsZTogdGl0bGUsXG4gICAgICAgIGFjdGl2ZU1vZHVsZUV4YW1wbGVLZXk6IGV4YW1wbGVLZXksXG4gICAgICAgIGhhZERlZXBMaW5rOiB0cnVlLFxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWN0aW9uIHR5cGUgJHthY3Rpb24udHlwZX1gKTtcbiAgfVxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50TGlzdCxcbiAgRXhhbXBsZXNMaXN0LFxuICBSTlRlc3Rlck1vZHVsZUluZm8sXG4gIFJOVGVzdGVyTmF2aWdhdGlvblN0YXRlLFxuICBTZWN0aW9uRGF0YSxcbn0gZnJvbSAnLi4vdHlwZXMvUk5UZXN0ZXJUeXBlcyc7XG5cbmltcG9ydCBSTlRlc3Rlckxpc3QgZnJvbSAnLi9STlRlc3Rlckxpc3QnO1xuXG5leHBvcnQgY29uc3QgU2NyZWVucyA9IHtcbiAgQ09NUE9ORU5UUzogJ2NvbXBvbmVudHMnLFxuICBBUElTOiAnYXBpcycsXG59O1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbE5hdmlnYXRpb25TdGF0ZTogUk5UZXN0ZXJOYXZpZ2F0aW9uU3RhdGUgPSB7XG4gIGFjdGl2ZU1vZHVsZUtleTogbnVsbCxcbiAgYWN0aXZlTW9kdWxlVGl0bGU6IG51bGwsXG4gIGFjdGl2ZU1vZHVsZUV4YW1wbGVLZXk6IG51bGwsXG4gIHNjcmVlbjogU2NyZWVucy5DT01QT05FTlRTLFxuICByZWNlbnRseVVzZWQ6IHtjb21wb25lbnRzOiBbXSwgYXBpczogW119LFxuICBoYWREZWVwTGluazogZmFsc2UsXG59O1xuXG5jb25zdCBmaWx0ZXJFbXB0eVNlY3Rpb25zID0gKGV4YW1wbGVzTGlzdDogRXhhbXBsZXNMaXN0KTogYW55ID0+IHtcbiAgY29uc3QgZmlsdGVyZWRTZWN0aW9uczoge1xuICAgIFsnYXBpcycgfCAnY29tcG9uZW50cyddOiBBcnJheTxTZWN0aW9uRGF0YTxSTlRlc3Rlck1vZHVsZUluZm8+PixcbiAgfSA9IHt9O1xuICBjb25zdCBzZWN0aW9uS2V5cyA9IE9iamVjdC5rZXlzKGV4YW1wbGVzTGlzdCk7XG5cbiAgc2VjdGlvbktleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGZpbHRlcmVkU2VjdGlvbnNba2V5XSA9IGV4YW1wbGVzTGlzdFtrZXldLmZpbHRlcihcbiAgICAgIHNlY3Rpb24gPT4gc2VjdGlvbi5kYXRhLmxlbmd0aCA+IDAsXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkU2VjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhhbXBsZXNMaXN0V2l0aFJlY2VudGx5VXNlZCA9ICh7XG4gIHJlY2VudGx5VXNlZCxcbiAgdGVzdExpc3QsXG59OiB7XG4gIHJlY2VudGx5VXNlZDogQ29tcG9uZW50TGlzdCxcbiAgdGVzdExpc3Q/OiB7XG4gICAgY29tcG9uZW50cz86IEFycmF5PFJOVGVzdGVyTW9kdWxlSW5mbz4sXG4gICAgYXBpcz86IEFycmF5PFJOVGVzdGVyTW9kdWxlSW5mbz4sXG4gIH0sXG59KTogRXhhbXBsZXNMaXN0IHwgbnVsbCA9PiB7XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGF0ZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBzdG9yYWdlXG4gIGlmICghcmVjZW50bHlVc2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb21wb25lbnRMaXN0ID0gdGVzdExpc3Q/LmNvbXBvbmVudHMgPz8gUk5UZXN0ZXJMaXN0LkNvbXBvbmVudHM7XG4gIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRMaXN0Lm1hcChcbiAgICAoY29tcG9uZW50RXhhbXBsZSk6IFJOVGVzdGVyTW9kdWxlSW5mbyA9PiAoe1xuICAgICAgLi4uY29tcG9uZW50RXhhbXBsZSxcbiAgICAgIGV4YW1wbGVUeXBlOiBTY3JlZW5zLkNPTVBPTkVOVFMsXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgcmVjZW50bHlVc2VkQ29tcG9uZW50cyA9IHJlY2VudGx5VXNlZC5jb21wb25lbnRzXG4gICAgLm1hcChyZWNlbnRDb21wb25lbnRLZXkgPT5cbiAgICAgIGNvbXBvbmVudHMuZmluZChjb21wb25lbnQgPT4gY29tcG9uZW50LmtleSA9PT0gcmVjZW50Q29tcG9uZW50S2V5KSxcbiAgICApXG4gICAgLmZpbHRlcihCb29sZWFuKTtcblxuICBjb25zdCBhcGlzTGlzdCA9IHRlc3RMaXN0Py5hcGlzID8/IFJOVGVzdGVyTGlzdC5BUElzO1xuICBjb25zdCBhcGlzID0gYXBpc0xpc3QubWFwKChhcGlFeGFtcGxlKTogUk5UZXN0ZXJNb2R1bGVJbmZvID0+ICh7XG4gICAgLi4uYXBpRXhhbXBsZSxcbiAgICBleGFtcGxlVHlwZTogU2NyZWVucy5BUElTLFxuICB9KSk7XG5cbiAgY29uc3QgcmVjZW50bHlVc2VkQVBJcyA9IHJlY2VudGx5VXNlZC5hcGlzXG4gICAgLm1hcChyZWNlbnRBUElLZXkgPT5cbiAgICAgIGFwaXMuZmluZChhcGlFeGFtcGxlID0+IGFwaUV4YW1wbGUua2V5ID09PSByZWNlbnRBUElLZXkpLFxuICAgIClcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGNvbnN0IGV4YW1wbGVzTGlzdDogRXhhbXBsZXNMaXN0ID0ge1xuICAgIFtTY3JlZW5zLkNPTVBPTkVOVFNdOiBbXG4gICAgICB7XG4gICAgICAgIGtleTogJ1JFQ0VOVF9DT01QT05FTlRTJyxcbiAgICAgICAgZGF0YTogcmVjZW50bHlVc2VkQ29tcG9uZW50cyxcbiAgICAgICAgdGl0bGU6ICdSZWNlbnRseSBWaWV3ZWQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnQ09NUE9ORU5UUycsXG4gICAgICAgIGRhdGE6IGNvbXBvbmVudHMsXG4gICAgICAgIHRpdGxlOiAnQ29tcG9uZW50cycsXG4gICAgICB9LFxuICAgIF0sXG4gICAgW1NjcmVlbnMuQVBJU106IFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnUkVDRU5UX0FQSVMnLFxuICAgICAgICBkYXRhOiByZWNlbnRseVVzZWRBUElzLFxuICAgICAgICB0aXRsZTogJ1JlY2VudGx5IHZpZXdlZCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdBUElTJyxcbiAgICAgICAgZGF0YTogYXBpcyxcbiAgICAgICAgdGl0bGU6ICdBUElzJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICByZXR1cm4gZmlsdGVyRW1wdHlTZWN0aW9ucyhleGFtcGxlc0xpc3QpO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZm9ybWF0XG4gKiBAZmxvdyBzdHJpY3QtbG9jYWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtUZXh0LCBWaWV3fSA9IHJlcXVpcmUoJ3JlYWN0LW5hdGl2ZScpO1xuXG5jbGFzcyBTZXRQcm9wZXJ0aWVzRXhhbXBsZUFwcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDwkRmxvd0ZpeE1lUHJvcHM+IHtcbiAgcmVuZGVyKCk6IFJlYWN0Lk5vZGUge1xuICAgIGNvbnN0IHdyYXBwZXJTdHlsZSA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5wcm9wcy5jb2xvcixcbiAgICAgIGZsZXg6IDEsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt3cmFwcGVyU3R5bGV9PlxuICAgICAgICA8VGV4dD5FbWJlZGRlZCBSZWFjdCBOYXRpdmUgdmlldzwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0UHJvcGVydGllc0V4YW1wbGVBcHA7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZvcm1hdFxuICogQGZsb3dcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtTdHlsZVNoZWV0LCBUZXh0LCBUb3VjaGFibGVIaWdobGlnaHQsIFZpZXd9ID0gcmVxdWlyZSgncmVhY3QtbmF0aXZlJyk7XG5cbmNsYXNzIFJvb3RWaWV3U2l6ZUZsZXhpYmlsaXR5RXhhbXBsZUFwcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAge3RvZ2dsZWQ6IGJvb2xlYW4sIC4uLn0sXG4gIGFueSxcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczoge3RvZ2dsZWQ6IGJvb2xlYW4sIC4uLn0pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHt0b2dnbGVkOiBmYWxzZX07XG4gIH1cblxuICBfb25QcmVzc0J1dHRvbigpIHtcbiAgICB0aGlzLnNldFN0YXRlKHt0b2dnbGVkOiAhdGhpcy5zdGF0ZS50b2dnbGVkfSk7XG4gIH1cblxuICByZW5kZXIoKTogUmVhY3QuTm9kZSB7XG4gICAgY29uc3Qgdmlld1N0eWxlID0gdGhpcy5zdGF0ZS50b2dnbGVkXG4gICAgICA/IHN0eWxlcy5iaWdDb250YWluZXJcbiAgICAgIDogc3R5bGVzLnNtYWxsQ29udGFpbmVyO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICAgIDxUb3VjaGFibGVIaWdobGlnaHQgb25QcmVzcz17dGhpcy5fb25QcmVzc0J1dHRvbi5iaW5kKHRoaXMpfT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3ZpZXdTdHlsZX0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5jZW50ZXJ9PlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy53aGl0ZVRleHR9PlJlYWN0IE5hdGl2ZSBCdXR0b248L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1RvdWNoYWJsZUhpZ2hsaWdodD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYmlnQ29udGFpbmVyOiB7XG4gICAgZmxleDogMSxcbiAgICBoZWlnaHQ6IDYwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2dyYXknLFxuICB9LFxuICBzbWFsbENvbnRhaW5lcjoge1xuICAgIGZsZXg6IDEsXG4gICAgaGVpZ2h0OiA0MCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdncmF5JyxcbiAgfSxcbiAgY2VudGVyOiB7XG4gICAgZmxleDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIHdoaXRlVGV4dDoge1xuICAgIGNvbG9yOiAnd2hpdGUnLFxuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUm9vdFZpZXdTaXplRmxleGliaWxpdHlFeGFtcGxlQXBwO1xuIl0sInhfZmFjZWJvb2tfc291cmNlcyI6W251bGwsW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnbG9iYWwuJFJlZnJlc2hSZWckIiwiZ2xvYmFsLiRSZWZyZXNoU2lnJCIsIjxhbm9ueW1vdXM+IiwiY2xlYXIiLCJkZWZpbmUiLCJtZXRyb1JlcXVpcmUiLCJpbml0aWFsaXppbmdNb2R1bGVJZHMuc2xpY2UubWFwJGFyZ3VtZW50XzAiLCJzaG91bGRQcmludFJlcXVpcmVDeWNsZSIsImlzSWdub3JlZCIsInJlZ0V4cHMuc29tZSRhcmd1bWVudF8wIiwibW9kdWxlcy5ldmVyeSRhcmd1bWVudF8wIiwibWV0cm9JbXBvcnREZWZhdWx0IiwibWV0cm9JbXBvcnRBbGwiLCJmYWxsYmFja1JlcXVpcmVDb250ZXh0IiwiZmFsbGJhY2tSZXF1aXJlUmVzb2x2ZVdlYWsiLCJndWFyZGVkTG9hZE1vZHVsZSIsInVucGFja01vZHVsZUlkIiwicGFja01vZHVsZUlkIiwicmVnaXN0ZXJTZWdtZW50IiwibW9kdWxlSWRzLmZvckVhY2gkYXJndW1lbnRfMCIsImxvYWRNb2R1bGVJbXBsZW1lbnRhdGlvbiIsInVua25vd25Nb2R1bGVFcnJvciIsIm1ldHJvUmVxdWlyZS5TeXN0cmFjZS5iZWdpbkV2ZW50IiwibWV0cm9SZXF1aXJlLlN5c3RyYWNlLmVuZEV2ZW50IiwibWV0cm9SZXF1aXJlLmdldE1vZHVsZXMiLCJjcmVhdGVIb3RSZWxvYWRpbmdPYmplY3QiLCJob3QuYWNjZXB0IiwiaG90LmRpc3Bvc2UiLCJtZXRyb0hvdFVwZGF0ZU1vZHVsZSIsInRvcG9sb2dpY2FsU29ydCRhcmd1bWVudF8xIiwidG9wb2xvZ2ljYWxTb3J0JGFyZ3VtZW50XzIiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJ0b3BvbG9naWNhbFNvcnQiLCJ0cmF2ZXJzZURlcGVuZGVudE5vZGVzIiwiZGVwZW5kZW50Tm9kZXMuZm9yRWFjaCRhcmd1bWVudF8wIiwicm9vdHMuZm9yRWFjaCRhcmd1bWVudF8wIiwicnVuVXBkYXRlZE1vZHVsZSIsInBlcmZvcm1GdWxsUmVmcmVzaCIsImlzUmVhY3RSZWZyZXNoQm91bmRhcnkiLCJzaG91bGRJbnZhbGlkYXRlUmVhY3RSZWZyZXNoQm91bmRhcnkiLCJnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmUiLCJyZWdpc3RlckV4cG9ydHNGb3JSZWFjdFJlZnJlc2giLCJyZXF1aXJlU3lzdHJhY2UiLCJyZXF1aXJlUmVmcmVzaCJdLCJtYXBwaW5ncyI6IkFBQTt3QkM4QixRRDt3QkVDLE1DLGNIO0FJRTtDSk87QUtLO0NMMkM7QU1DO2FDdUIsNkREO0NOZTtBUUk7b0JDTTttQ0NDLCtCRCxDRDt1QkdHLDhCSDtDUkM7QVlDO0Nab0I7QWFFO0Nia0M7dUJjTTtDZFM7MkJlRztDZk87QWdCRTtDaEJlO0FpQkc7Q2pCTztBa0JFO0NsQkU7QW1CSTtzQkNnQjtLREk7Q25CRTtBcUJDOzhCcEIrQztTb0JFO0NyQm1EO0FzQkM7Q3RCUTtnQnVCSSxRdkI7Y3dCQyxReEI7NEJ5Qkc7R3pCRTtpQzBCRztjQ0s7T0RHO2VFQztPRkU7RzFCRzsrQjZCRTtRQytDO1NENkM7UUVDLGdCRjt5Q0cwRztTSEk7RzdCRzswQmlDQztJQ0k7NkJDYztPREU7S0RHO2tCR0M7S0hFO0dqQ0U7MkJxQ0M7R3JDOEQ7NkJzQ0M7R3RDb0I7K0J1Q0c7R3ZDMEI7NkN3Q0M7R3hDZ0I7b0N5Q0c7R3pDcUI7dUMwQ0M7RzFDaUI7d0IyQ1U7RzNDSzt1QjRDQztHNUNLIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiPGFub255bW91cz4iLCJpbnNwZWN0Iiwic3R5bGl6ZU5vQ29sb3IiLCJhcnJheVRvSGFzaCIsImFycmF5LmZvckVhY2gkYXJndW1lbnRfMCIsImZvcm1hdFZhbHVlIiwia2V5cy5tYXAkYXJndW1lbnRfMCIsImZvcm1hdFByaW1pdGl2ZSIsImZvcm1hdEVycm9yIiwiZm9ybWF0QXJyYXkiLCJrZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsImZvcm1hdFByb3BlcnR5Iiwic3RyLnNwbGl0Lm1hcCRhcmd1bWVudF8wIiwicmVkdWNlVG9TaW5nbGVTdHJpbmciLCJvdXRwdXQucmVkdWNlJGFyZ3VtZW50XzAiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNOdWxsIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNTeW1ib2wiLCJpc1VuZGVmaW5lZCIsImlzUmVnRXhwIiwiaXNPYmplY3QiLCJpc0RhdGUiLCJpc0Vycm9yIiwiaXNGdW5jdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiaGFzT3duUHJvcGVydHkiLCJnZXROYXRpdmVMb2dGdW5jdGlvbiIsIkFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCRhcmd1bWVudF8xIiwicmVwZWF0IiwiQXJyYXkuYXBwbHkubWFwJGFyZ3VtZW50XzAiLCJjb25zb2xlVGFibGVQb2x5ZmlsbCIsImNvbHVtbnMuZm9yRWFjaCRhcmd1bWVudF8wIiwiam9pblJvdyIsInJvdy5tYXAkYXJndW1lbnRfMCIsImNvbHVtbldpZHRocy5tYXAkYXJndW1lbnRfMCIsImdyb3VwRm9ybWF0IiwiY29uc29sZUdyb3VwUG9seWZpbGwiLCJjb25zb2xlR3JvdXBDb2xsYXBzZWRQb2x5ZmlsbCIsImNvbnNvbGVHcm91cEVuZFBvbHlmaWxsIiwiY29uc29sZUFzc2VydFBvbHlmaWxsIiwiT2JqZWN0LmtleXMuZm9yRWFjaCRhcmd1bWVudF8wIiwibWV0aG9kTmFtZSIsImZvckVhY2gkYXJndW1lbnRfMCIsInN0dWIiLCJnbG9iYWwuY29uc29sZS5hc3NlcnQiXSwibWFwcGluZ3MiOiJBQUE7aUJDaUI7RUN3QjtHRE87RUVFO0dGRTtFR0U7a0JDRztLREU7R0hHO0VLRTt3QkMyRjtPRFM7R0xNO0VPRTtHUGdCO0VRRTtHUkU7RVNFO2lCQ2tCO0tETTtHVEU7RVdFO21CQzRCO2VERTtxQkNRO2lCREU7R1gwQjtFYUU7K0JDRTtLREk7R2JjO0VlSTtHZkU7RWdCRTtHaEJFO0VpQkU7R2pCRTtFa0JFO0dsQkU7RW1CRTtHbkJFO0VvQkU7R3BCRTtFcUJFO0dyQkU7RXNCRTtHdEJFO0V1QkU7R3ZCRTtFd0JFO0d4QkU7RXlCRTtHekJFO0UwQkU7RzFCSztFMkJFO0czQkU7RTRCRTtHNUJFO0U2QkU7RzdCRTtDREc7QStCbUI7UzlCQzt5QitCTTtTL0JFO0c4Qm1DO0MvQkM7QWlDRTt5Q0NDO0dERTtDakNDO0FtQ0U7a0JDd0I7R0RRO0VFSTt3QkNDO0tERztHRkc7b0NJRTtHSkU7Q25DYztBd0NRO0N4Q0c7QXlDRTtDekNHO0EwQ0U7QzFDRztBMkNFO0MzQ0c7QTRDRTtDNUNJO2lDNkNtQzs4QkNHO1NERztLN0NFO2dFK0NLOzhCREU7U0NFO0svQ0U7RWdERyxrQmhEO0lpRFU7S2pESSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm9uRXJyb3IiLCJFcnJvclV0aWxzLnNldEdsb2JhbEhhbmRsZXIiLCJFcnJvclV0aWxzLmdldEdsb2JhbEhhbmRsZXIiLCJFcnJvclV0aWxzLnJlcG9ydEVycm9yIiwiRXJyb3JVdGlscy5yZXBvcnRGYXRhbEVycm9yIiwiRXJyb3JVdGlscy5hcHBseVdpdGhHdWFyZCIsIkVycm9yVXRpbHMuYXBwbHlXaXRoR3VhcmRJZk5lZWRlZCIsIkVycm9yVXRpbHMuaW5HdWFyZCIsIkVycm9yVXRpbHMuZ3VhcmQiLCJndWFyZGVkIl0sIm1hcHBpbmdzIjoiQUFBO21DQ3FCO0NESztFRVc7R0ZFO0VHQztHSEU7RUlDO0dKRTtFS0M7R0xHO0VNQztHTnNCO0VPQztHUGU7RVFDO0dSRTtFU0M7SUNjO0tEUTtHVEcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBcHBSZWdpc3RyeS5yZWdpc3RlckNvbXBvbmVudCRhcmd1bWVudF8xIiwiUk5UZXN0ZXJMaXN0LkNvbXBvbmVudHMuY29uY2F0LmZvckVhY2gkYXJndW1lbnRfMCIsIlNuYXBzaG90dGVyIiwiU25hcHNob3R0ZXIjcmVuZGVyIiwiUk5UZXN0ZXJNb2R1bGVDb250YWluZXIucHJvcHMub25FeGFtcGxlQ2FyZFByZXNzIl0sIm1hcHBpbmdzIjoiQUFBO3lEQ29CO29FREM7bUVDRTt3RkRDOzZDQ0UsaUJEO0VFSTtNQ0c7UUNDO29DQ0ssUUQ7U0RJO09EQztRREksaUJDO0dGRyJ9XSxbeyJuYW1lcyI6WyJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUE7Q0NJIn1dLFt7Im5hbWVzIjpbIl9jbGFzc0NhbGxDaGVjayIsIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBO0NDSSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUNsYXNzIl0sIm1hcHBpbmdzIjoiQUFBO0FDQztDRFE7QUVDO0NGTyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl90b1Byb3BlcnR5S2V5Il0sIm1hcHBpbmdzIjoiQUFBO0FDRTtDREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJfdG9QcmltaXRpdmUiXSwibWFwcGluZ3MiOiJBQUE7QUNDO0NEUyJ9XSxbeyJuYW1lcyI6WyJfdHlwZW9mIiwiPGFub255bW91cz4iLCI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQTt5R0NHO0dERSxHQztHREU7Q0VDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX2luaGVyaXRzIl0sIm1hcHBpbmdzIjoiQUFBO0FDQztDRGUifV0sW3sibmFtZXMiOlsiX3NldFByb3RvdHlwZU9mIiwiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUE7Q0NNIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iXSwibWFwcGluZ3MiOiJBQUE7QUNFO0NETyJ9XSxbeyJuYW1lcyI6WyJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUE7Q0NLIn1dLFt7Im5hbWVzIjpbIl9nZXRQcm90b3R5cGVPZiIsIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBO0NDSyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldEV4YW1wbGVUaXRsZSIsIlJOVGVzdGVyTW9kdWxlQ29udGFpbmVyIiwicmVuZGVyRXhhbXBsZSIsIlJOVFByZXNzYWJsZVJvdy5wcm9wcy5vblByZXNzIiwiZmlsdGVyIiwiUk5UZXN0ZXJFeGFtcGxlRmlsdGVyLnByb3BzLnJlbmRlciIsIkhlYWRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQzhCO0NERTtlRUU7d0JDRztpQkNTLGtDRDtHRGdCO2lCR2M7NkJIQztrQklnQzthSk87Q0ZNO0FPRTtDUHNCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UUHJlc3NhYmxlUm93IiwiUHJlc3NhYmxlLnByb3BzLnN0eWxlIl0sIm1hcHBpbmdzIjoiQUFBO2VDNkI7YUNrQjtPRE07Q0RZIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UZXN0ZXJDb21wb25lbnRUaXRsZSIsImNvbnN0cnVjdG9yIiwicmVuZGVyIiwiUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXIucHJvcHMuY2hpbGRyZW4iXSwibWFwcGluZ3MiOiJBQUE7QUNtQjtFQ0M7R0RFO0VFRTtTQ0c7U0RJO0dGRztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJxIl0sIm1hcHBpbmdzIjoiQUFBO0FDVSw0VEQifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBIiwiQi5pc01vdW50ZWQiLCJCLmVucXVldWVGb3JjZVVwZGF0ZSIsIkIuZW5xdWV1ZVJlcGxhY2VTdGF0ZSIsIkIuZW5xdWV1ZVNldFN0YXRlIiwiRSIsIkUucHJvdG90eXBlLnNldFN0YXRlIiwiRS5wcm90b3R5cGUuZm9yY2VVcGRhdGUiLCJGIiwiRyIsIk0iLCJOIiwiTyIsImVzY2FwZSIsImEucmVwbGFjZSRhcmd1bWVudF8xIiwiUSIsIlIiLCJSJGFyZ3VtZW50XzQiLCJTIiwiVCIsImIudGhlbiRhcmd1bWVudF8wIiwiYi50aGVuJGFyZ3VtZW50XzEiLCJleHBvcnRzLkNoaWxkcmVuLmZvckVhY2giLCJTJGFyZ3VtZW50XzEiLCJleHBvcnRzLkNoaWxkcmVuLmNvdW50IiwiZXhwb3J0cy5DaGlsZHJlbi50b0FycmF5IiwiZXhwb3J0cy5DaGlsZHJlbi5vbmx5IiwiZXhwb3J0cy5jbG9uZUVsZW1lbnQiLCJleHBvcnRzLmNyZWF0ZUNvbnRleHQiLCJleHBvcnRzLmNyZWF0ZUZhY3RvcnkiLCJleHBvcnRzLmNyZWF0ZVJlZiIsImV4cG9ydHMuZm9yd2FyZFJlZiIsImV4cG9ydHMubGF6eSIsImV4cG9ydHMubWVtbyIsImV4cG9ydHMuc3RhcnRUcmFuc2l0aW9uIiwiZXhwb3J0cy51bnN0YWJsZV9hY3QiLCJleHBvcnRzLnVzZUNhbGxiYWNrIiwiZXhwb3J0cy51c2VDb250ZXh0IiwiZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlIiwiZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlIiwiZXhwb3J0cy51c2VFZmZlY3QiLCJleHBvcnRzLnVzZUlkIiwiZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlIiwiZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3QiLCJleHBvcnRzLnVzZUxheW91dEVmZmVjdCIsImV4cG9ydHMudXNlTWVtbyIsImV4cG9ydHMudXNlUmVkdWNlciIsImV4cG9ydHMudXNlUmVmIiwiZXhwb3J0cy51c2VTdGF0ZSIsImV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmUiLCJleHBvcnRzLnVzZVRyYW5zaXRpb24iXSwibWFwcGluZ3MiOiJBQUE7a1hDUyx5SEQ7aUJFQyxvQkYsb0JHLFlILHFCSSxZSixpQkssWUwsdUJNLDRFTjtxQk9DLDRQUCx5QlEsa0VSLENTLGNULHdCVSw0RVY7QVdFLDhhWDtBWUMsNkZDLGtFQyx5RUMsd0JELEVkLGFnQixpR2hCO0FpQkMsMFRDLHFCRDswWmpCQztBbUJDLCtERCxtQ0MsV0MsOERDLHFFRCxDRSxxRUYsdUdwQjtvSnVCQyxvQkMsbUNELEl2QixPeUIsd0JELGVDLFd6QixTMEIsdUJGLHFCRSxNMUIsTTJCLG1IM0I7cUI0QkU7aUg1QkMsdUI2QixrTTdCLCtDOEIsbUQ5QixtQitCLGdDL0I7bUJnQ0Msd0NoQyx1Q2lDLHVFakMsY2tDLGtFbEMseUJtQywrRW5DLHNCb0Msb0ZwQztvQnFDQyxnRHJDLG9Cc0MsMkN0Qyx1QnVDLFl2QywwQndDLGlEeEMsbUJ5Qyw4Q3pDLGUwQyxvQzFDLDZCMkMsNEQzQzsyQjRDQyx1RDVDLHlCNkMsb0Q3QyxpQjhDLDRDOUMsb0IrQyxtRC9DLGdCZ0QsdUNoRCxrQmlELHlDakQsOEJrRCw2RGxEO3NCbURDLDRDbkQifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCI8YW5vbnltb3VzPiIsImdldEl0ZXJhdG9yRm4iLCJzZXRFeHRyYVN0YWNrRnJhbWUiLCJSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZSIsIlJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSIsIndhcm4iLCJlcnJvciIsInByaW50V2FybmluZyIsImFyZ3MubWFwJGFyZ3VtZW50XzAiLCJ3YXJuTm9vcCIsIlJlYWN0Tm9vcFVwZGF0ZVF1ZXVlLmlzTW91bnRlZCIsIlJlYWN0Tm9vcFVwZGF0ZVF1ZXVlLmVucXVldWVGb3JjZVVwZGF0ZSIsIlJlYWN0Tm9vcFVwZGF0ZVF1ZXVlLmVucXVldWVSZXBsYWNlU3RhdGUiLCJSZWFjdE5vb3BVcGRhdGVRdWV1ZS5lbnF1ZXVlU2V0U3RhdGUiLCJDb21wb25lbnQiLCJDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlIiwiQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSIsImRlZmluZURlcHJlY2F0aW9uV2FybmluZyIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSRhcmd1bWVudF8yLmdldCIsIkNvbXBvbmVudER1bW15IiwiUHVyZUNvbXBvbmVudCIsImNyZWF0ZVJlZiIsImlzQXJyYXkiLCJ0eXBlTmFtZSIsIndpbGxDb2VyY2lvblRocm93IiwidGVzdFN0cmluZ0NvZXJjaW9uIiwiY2hlY2tLZXlTdHJpbmdDb2VyY2lvbiIsImdldFdyYXBwZWROYW1lIiwiZ2V0Q29udGV4dE5hbWUiLCJnZXRDb21wb25lbnROYW1lRnJvbVR5cGUiLCJoYXNWYWxpZFJlZiIsImhhc1ZhbGlkS2V5IiwiZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIiLCJ3YXJuQWJvdXRBY2Nlc3NpbmdLZXkiLCJkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlciIsIndhcm5BYm91dEFjY2Vzc2luZ1JlZiIsIndhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZCIsIlJlYWN0RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbG9uZUFuZFJlcGxhY2VLZXkiLCJjbG9uZUVsZW1lbnQiLCJpc1ZhbGlkRWxlbWVudCIsImVzY2FwZSIsImtleS5yZXBsYWNlJGFyZ3VtZW50XzEiLCJlc2NhcGVVc2VyUHJvdmlkZWRLZXkiLCJnZXRFbGVtZW50S2V5IiwibWFwSW50b0FycmF5IiwibWFwSW50b0FycmF5JGFyZ3VtZW50XzQiLCJtYXBDaGlsZHJlbiIsImNvdW50Q2hpbGRyZW4iLCJtYXBDaGlsZHJlbiRhcmd1bWVudF8xIiwiZm9yRWFjaENoaWxkcmVuIiwidG9BcnJheSIsIm9ubHlDaGlsZCIsImNyZWF0ZUNvbnRleHQiLCJPYmplY3QuZGVmaW5lUHJvcGVydGllcyRhcmd1bWVudF8xLlByb3ZpZGVyLmdldCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEuUHJvdmlkZXIuc2V0IiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5fY3VycmVudFZhbHVlLmdldCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEuX2N1cnJlbnRWYWx1ZS5zZXQiLCJPYmplY3QuZGVmaW5lUHJvcGVydGllcyRhcmd1bWVudF8xLl9jdXJyZW50VmFsdWUyLmdldCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEuX2N1cnJlbnRWYWx1ZTIuc2V0IiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5fdGhyZWFkQ291bnQuZ2V0IiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5fdGhyZWFkQ291bnQuc2V0IiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5Db25zdW1lci5nZXQiLCJPYmplY3QuZGVmaW5lUHJvcGVydGllcyRhcmd1bWVudF8xLmRpc3BsYXlOYW1lLmdldCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEuZGlzcGxheU5hbWUuc2V0IiwibGF6eUluaXRpYWxpemVyIiwidGhlbmFibGUudGhlbiRhcmd1bWVudF8wIiwidGhlbmFibGUudGhlbiRhcmd1bWVudF8xIiwibGF6eSIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEuZGVmYXVsdFByb3BzLmdldCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEuZGVmYXVsdFByb3BzLnNldCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEucHJvcFR5cGVzLmdldCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJGFyZ3VtZW50XzEucHJvcFR5cGVzLnNldCIsImZvcndhcmRSZWYiLCJPYmplY3QuZGVmaW5lUHJvcGVydHkkYXJndW1lbnRfMi5zZXQiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJtZW1vIiwicmVzb2x2ZURpc3BhdGNoZXIiLCJ1c2VDb250ZXh0IiwidXNlU3RhdGUiLCJ1c2VSZWR1Y2VyIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlSW5zZXJ0aW9uRWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlQ2FsbGJhY2siLCJ1c2VNZW1vIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZURlYnVnVmFsdWUiLCJ1c2VUcmFuc2l0aW9uIiwidXNlRGVmZXJyZWRWYWx1ZSIsInVzZUlkIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJkaXNhYmxlZExvZyIsImRpc2FibGVMb2dzIiwicmVlbmFibGVMb2dzIiwiZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUiLCJkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lIiwiRmFrZSIsImRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSIsInNob3VsZENvbnN0cnVjdCIsImRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFViIsInNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50IiwiY2hlY2tQcm9wVHlwZXMiLCJzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxIiwiZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtIiwiZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0iLCJnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzIiwiZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsInZhbGlkYXRlRXhwbGljaXRLZXkiLCJ2YWxpZGF0ZUNoaWxkS2V5cyIsInZhbGlkYXRlUHJvcFR5cGVzIiwidmFsaWRhdGVGcmFnbWVudFByb3BzIiwiY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uIiwiY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIiwiY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24iLCJzdGFydFRyYW5zaXRpb24iLCJlbnF1ZXVlVGFzayIsImVucXVldWVUYXNrSW1wbCIsImFjdCIsInRoZW5hYmxlLnRoZW4iLCJ0aGVuYWJsZVJlc3VsdC50aGVuJGFyZ3VtZW50XzAiLCJ0aGVuYWJsZVJlc3VsdC50aGVuJGFyZ3VtZW50XzEiLCJQcm9taXNlLnJlc29sdmUudGhlbiRhcmd1bWVudF8wIiwiUHJvbWlzZS5yZXNvbHZlLnRoZW4udGhlbiRhcmd1bWVudF8wIiwiX3RoZW5hYmxlLnRoZW4iLCJfdGhlbmFibGUyLnRoZW4iLCJwb3BBY3RTY29wZSIsInJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsiLCJlbnF1ZXVlVGFzayRhcmd1bWVudF8wIiwiZmx1c2hBY3RRdWV1ZSJdLCJtYXBwaW5ncyI6IkFBQTtHQ2E7QUNpQztDRFk7QUU0QztDRkk7OENHRztHSEk7NENJSztHSmU7QUsrQjtDTFU7QU1DO0NOVTtBT0U7a0NDYTtLREU7Q1BRO0FTSTtDVGM7YVVjO0dWRTtzQldpQjtHWEU7dUJZZTtHWkU7bUJhYztHYkU7QWNlO0NkUTsrQmU2QjtDZk07a0NnQmlCO0NoQkU7aUNpQmM7V0NFO09ESTtHakJFO0FtQlMsNEJuQjtBb0JPO0NwQk07QXFCUztDckJVO0FzQkk7Q3RCRTtBdUJZO0N2Qk87QXdCRztDeEJTO0F5QkU7Q3pCeUI7QTBCQztDMUJRO0EyQkU7QzNCUztBNEJHO0M1QkU7QTZCRztDN0JpRjtBOEJnQjtDOUJZO0ErQkU7Qy9CWTtBZ0NFOzhCQ0M7R0RRO0NoQ087QWtDRTs4QkNDO0dEUTtDbENPO0FvQ0U7Q3BDWTttQnFDdUI7Q3JDb0Q7QXNDTTtDdENvRjtBdUNDO0N2Q0c7QXdDTTtDeEN1RTtBeUNTO0N6Q0U7QTBDVzsrQ0NNO0dERTtDMUNFO0E0Q1U7QzVDRTtBNkNVO0M3Q2M7QThDRTs0REMyQztPREU7QzlDd0U7QWdEZTt5Q0RPO0dDRTtDaERFO0FpRFk7d0JDRTtHREU7Q2pERTtBbURjO3dCREM7R0NFO0NuREM7QW9EUzsrQkZDO0dFRTtDcERDO0FxRGlCO0NyRE07QXNERTthQ3lDO1NEUTthRUM7U0ZFO2FHRztTSEU7YUlDO1NKRTthS0c7U0xFO2FNQztTTkU7YU9HO1NQRTthUUM7U1JFO2FTRztTVFE7YVVHO1NWRTthV0M7U1hNO0N0RGE7QWtFTztrQkNTO0tETyxFRTtLRk87Q2xFZ0M7QXFFRTthQ29CO1NERTthRUM7U0ZTO2FHSTtTSEU7YUlDO1NKUztDckVNO0EwRUU7V3hENkI7T3dERTtXQ0M7T0RZO0MxRUs7QTRFUTtDNUVxQjtBNkVFO1czRGtCO08yREU7V0ZDO09FWTtDN0VLO0E4RUU7QzlFYTtBK0VDO0MvRWtCO0FnRkM7Q2hGRztBaUZDO0NqRkc7QWtGQztDbEZHO0FtRkM7Q25GRztBb0ZDO0NwRkc7QXFGQztDckZHO0FzRkM7Q3RGRztBdUZDO0N2Rkc7QXdGQztDeEZHO0F5RkM7Q3pGSztBMEZDO0MxRkc7QTJGQztDM0ZHO0E0RkM7QzVGRztBNkZDO0M3Rkc7QThGZSx5QjlGO0ErRkc7Qy9GaUM7QWdHQztDaEcwQztBaUdJO0NqR2U7QWtHUztpQkNpQztPREU7YXZCSTtTdUJJO0NsR21IO0FvR0M7Q3BHSTtBcUdFO0NyR0c7QXNHRTtDdEdnRDtBdUdLO0N2R1U7QXdHRTtDeEcrQztBeUdFO0N6R1U7QTBHUTtDMUdVO0EyR0U7QzNHUTtBNEdFO0M1R007QTZHVTtDN0dZO0E4R2M7QzlHOEI7QStHWTtDL0dvQztBZ0hTO0NoSG9DO0FpSE87Q2pIeUI7QWtIQztDbEg4RDtBbUhFO1dqR2M7T2lHTztDbkhLO0FvSEM7Q3BIUztBcUhFO0NySDBCO0FzSEk7d0JDYztPRGM7Q3RISztBd0hJO2NDK0M7OEJDRTtXRFUsRUU7V0ZJO1NEQztpQ0lNLGNKLE9LO1dMTTtnQk11QjtXTlc7Z0JPTztXUEU7Q3hITTtBZ0lFO0NoSVE7QWlJRTtvQkNPO1NEUztDaklRO0FtSUk7Q25JMEI7R0R5RCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIjxhbm9ueW1vdXM+IiwiZ2V0SXRlcmF0b3JGbiIsImVycm9yIiwicHJpbnRXYXJuaW5nIiwiYXJncy5tYXAkYXJndW1lbnRfMCIsImlzVmFsaWRFbGVtZW50VHlwZSIsImdldFdyYXBwZWROYW1lIiwiZ2V0Q29udGV4dE5hbWUiLCJnZXRDb21wb25lbnROYW1lRnJvbVR5cGUiLCJkaXNhYmxlZExvZyIsImRpc2FibGVMb2dzIiwicmVlbmFibGVMb2dzIiwiZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUiLCJkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lIiwiRmFrZSIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSRhcmd1bWVudF8yLnNldCIsImRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSIsInNob3VsZENvbnN0cnVjdCIsImRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFViIsInNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50IiwiY2hlY2tQcm9wVHlwZXMiLCJpc0FycmF5IiwidHlwZU5hbWUiLCJ3aWxsQ29lcmNpb25UaHJvdyIsInRlc3RTdHJpbmdDb2VyY2lvbiIsImNoZWNrS2V5U3RyaW5nQ29lcmNpb24iLCJoYXNWYWxpZFJlZiIsImhhc1ZhbGlkS2V5Iiwid2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkIiwiZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIiLCJ3YXJuQWJvdXRBY2Nlc3NpbmdLZXkiLCJkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlciIsIndhcm5BYm91dEFjY2Vzc2luZ1JlZiIsIlJlYWN0RWxlbWVudCIsImpzeERFViIsInNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEiLCJpc1ZhbGlkRWxlbWVudCIsImdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSIsImdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtIiwiZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsInZhbGlkYXRlRXhwbGljaXRLZXkiLCJ2YWxpZGF0ZUNoaWxkS2V5cyIsInZhbGlkYXRlUHJvcFR5cGVzIiwidmFsaWRhdGVGcmFnbWVudFByb3BzIiwianN4V2l0aFZhbGlkYXRpb24iLCJqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyIsImpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyJdLCJtYXBwaW5ncyI6IkFBQTtHQ2E7QUN3QjtDRFk7QUVJO0NGVTtBR0U7a0NDYTtLREU7Q0hRO0FLb0I7Q0xxQjtBTUU7Q05TO0FPRztDUEU7QVFHO0NSaUY7QVNpQix5QlQ7QVVHO0NWaUM7QVdDO0NYMEM7QVlJO0NaZTtBYVM7aUJDaUM7T0RFO2FFSTtTRkk7Q2JtSDtBZ0JDO0NoQkk7QWlCRTtDakJHO0FrQkU7Q2xCZ0Q7QW1CTztDbkJVO0FvQkU7Q3BCK0M7QXFCSTtDckJFO0FzQlk7Q3RCTztBdUJHO0N2QlM7QXdCRTtDeEJ5QjtBeUJDO0N6QlE7QTBCaUI7QzFCWTtBMkJFO0MzQlk7QTRCRTtDNUJZO0E2QkU7Z0NDRTtLRE07QzdCUTtBK0JFO2dDQ0U7S0RNO0MvQlE7bUJpQ3VCO0NqQ29EO0FrQ1E7Q2xDa0U7QW1DSztDbkNVO0FvQ2dCO0NwQ0k7QXFDRTtDckNZO0FzQ0U7Q3RDVTtBdUNVO0N2Q2M7QXdDYztDeEM4QjtBeUNZO0N6Q3NDO0EwQ1M7QzFDb0M7QTJDTztDM0N5QjtBNENFO0M1QzhFO0E2Q0s7QzdDSTtBOENDO0M5Q0k7R0RVIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwibW9kdWxlLmV4cG9ydHMuZ2V0X19yZWdpc3RlckNhbGxhYmxlTW9kdWxlIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19BY2Nlc3NpYmlsaXR5SW5mbyIsIm1vZHVsZS5leHBvcnRzLmdldF9fQWN0aXZpdHlJbmRpY2F0b3IiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0J1dHRvbiIsIm1vZHVsZS5leHBvcnRzLmdldF9fRHJhd2VyTGF5b3V0QW5kcm9pZCIsIm1vZHVsZS5leHBvcnRzLmdldF9fRmxhdExpc3QiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0ltYWdlIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19JbWFnZUJhY2tncm91bmQiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0lucHV0QWNjZXNzb3J5VmlldyIsIm1vZHVsZS5leHBvcnRzLmdldF9fS2V5Ym9hcmRBdm9pZGluZ1ZpZXciLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1BvcHVwTWVudUFuZHJvaWQiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX01vZGFsIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19QcmVzc2FibGUiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1Byb2dyZXNzQmFyQW5kcm9pZCIsIm1vZHVsZS5leHBvcnRzLmdldF9fUmVmcmVzaENvbnRyb2wiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1NhZmVBcmVhVmlldyIsIm1vZHVsZS5leHBvcnRzLmdldF9fU2Nyb2xsVmlldyIsIm1vZHVsZS5leHBvcnRzLmdldF9fU2VjdGlvbkxpc3QiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1N0YXR1c0JhciIsIm1vZHVsZS5leHBvcnRzLmdldF9fU3dpdGNoIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19UZXh0IiwibW9kdWxlLmV4cG9ydHMuZ2V0X19UZXh0SW5wdXQiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1RvdWNoYWJsZSIsIm1vZHVsZS5leHBvcnRzLmdldF9fVG91Y2hhYmxlSGlnaGxpZ2h0IiwibW9kdWxlLmV4cG9ydHMuZ2V0X19Ub3VjaGFibGVOYXRpdmVGZWVkYmFjayIsIm1vZHVsZS5leHBvcnRzLmdldF9fVG91Y2hhYmxlT3BhY2l0eSIsIm1vZHVsZS5leHBvcnRzLmdldF9fVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19WaWV3IiwibW9kdWxlLmV4cG9ydHMuZ2V0X19WaXJ0dWFsaXplZExpc3QiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1ZpcnR1YWxpemVkU2VjdGlvbkxpc3QiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0FjdGlvblNoZWV0SU9TIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19BbGVydCIsIm1vZHVsZS5leHBvcnRzLmdldF9fQW5pbWF0ZWQiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0FwcGVhcmFuY2UiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0FwcFJlZ2lzdHJ5IiwibW9kdWxlLmV4cG9ydHMuZ2V0X19BcHBTdGF0ZSIsIm1vZHVsZS5leHBvcnRzLmdldF9fQmFja0hhbmRsZXIiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0NsaXBib2FyZCIsIm1vZHVsZS5leHBvcnRzLmdldF9fRGV2aWNlSW5mbyIsIm1vZHVsZS5leHBvcnRzLmdldF9fRGV2U2V0dGluZ3MiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0RpbWVuc2lvbnMiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0Vhc2luZyIsIm1vZHVsZS5leHBvcnRzLmdldF9fZmluZE5vZGVIYW5kbGUiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0kxOG5NYW5hZ2VyIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19JbnRlcmFjdGlvbk1hbmFnZXIiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0tleWJvYXJkIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19MYXlvdXRBbmltYXRpb24iLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0xpbmtpbmciLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0xvZ0JveCIsIm1vZHVsZS5leHBvcnRzLmdldF9fTmF0aXZlRGlhbG9nTWFuYWdlckFuZHJvaWQiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX05hdGl2ZUV2ZW50RW1pdHRlciIsIm1vZHVsZS5leHBvcnRzLmdldF9fTmV0d29ya2luZyIsIm1vZHVsZS5leHBvcnRzLmdldF9fUGFuUmVzcG9uZGVyIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19QZXJtaXNzaW9uc0FuZHJvaWQiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1BpeGVsUmF0aW8iLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1B1c2hOb3RpZmljYXRpb25JT1MiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1NldHRpbmdzIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19TaGFyZSIsIm1vZHVsZS5leHBvcnRzLmdldF9fU3R5bGVTaGVldCIsIm1vZHVsZS5leHBvcnRzLmdldF9fU3lzdHJhY2UiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1RvYXN0QW5kcm9pZCIsIm1vZHVsZS5leHBvcnRzLmdldF9fVHVyYm9Nb2R1bGVSZWdpc3RyeSIsIm1vZHVsZS5leHBvcnRzLmdldF9fVUlNYW5hZ2VyIiwibW9kdWxlLmV4cG9ydHMuZ2V0X191bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsIm1vZHVsZS5leHBvcnRzLmdldF9fdXNlQW5pbWF0ZWRWYWx1ZSIsIm1vZHVsZS5leHBvcnRzLmdldF9fdXNlQ29sb3JTY2hlbWUiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX3VzZVdpbmRvd0RpbWVuc2lvbnMiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1VURlNlcXVlbmNlIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19WaWJyYXRpb24iLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1llbGxvd0JveCIsIm1vZHVsZS5leHBvcnRzLmdldF9fRGV2aWNlRXZlbnRFbWl0dGVyIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19EeW5hbWljQ29sb3JJT1MiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX05hdGl2ZUFwcEV2ZW50RW1pdHRlciIsIm1vZHVsZS5leHBvcnRzLmdldF9fTmF0aXZlTW9kdWxlcyIsIm1vZHVsZS5leHBvcnRzLmdldF9fUGxhdGZvcm0iLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1BsYXRmb3JtQ29sb3IiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX3Byb2Nlc3NDb2xvciIsIm1vZHVsZS5leHBvcnRzLmdldF9fcmVxdWlyZU5hdGl2ZUNvbXBvbmVudCIsIm1vZHVsZS5leHBvcnRzLmdldF9fUm9vdFRhZ0NvbnRleHQiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX3Vuc3RhYmxlX2VuYWJsZUxvZ0JveCIsIjxhbm9ueW1vdXM+IiwiT2JqZWN0LmRlZmluZVByb3BlcnR5JGFyZ3VtZW50XzIuZ2V0Il0sIm1hcHBpbmdzIjoiQUFBO0VDcUc7R0RFO0VFRTtHRkc7RUdDO0dIRztFSUM7R0pFO0VLRTtHTEU7RU1DO0dORTtFT0M7R1BFO0VRQztHUkU7RVNDO0dURztFVUM7R1ZHO0VXQztHWEc7RVlDO0daRTtFYUM7R2JFO0VjRTtHZFE7RWVDO0dmRTtFZ0JDO0doQkU7RWlCQztHakJFO0VrQkM7R2xCRTtFbUJDO0duQkU7RW9CQztHcEJFO0VxQkM7R3JCRTtFc0JDO0d0QkU7RXVCQztHdkJFO0V3QkM7R3hCRTtFeUJDO0d6QkU7RTBCQztHMUJFO0UyQkM7RzNCRTtFNEJDO0c1QkU7RTZCQztHN0JFO0U4QkM7RzlCRTtFK0JHO0cvQkU7RWdDQztHaENFO0VpQ0c7R2pDRztFa0NDO0dsQ0U7RW1DQztHbkNFO0VvQ0M7R3BDRTtFcUNDO0dyQ0U7RXNDQztHdENRO0V1Q0M7R3ZDRTtFd0NDO0d4Q0U7RXlDQztHekNFO0UwQ0M7RzFDRTtFMkNDO0czQ0U7RTRDQztHNUNFO0U2Q0M7RzdDRTtFOENDO0c5Q0U7RStDQztHL0NFO0VnREM7R2hERTtFaURDO0dqREU7RWtEQztHbERHO0VtREM7R25ERTtFb0RDO0dwREU7RXFEQztHckRFO0VzREM7R3RERTtFdURDO0d2REU7RXdEQztHeERRO0V5REM7R3pERTtFMERDO0cxREU7RTJEQztHM0RFO0U0REM7RzVERTtFNkRFO0c3REU7RThEQztHOURFO0UrREM7Ry9ERTtFZ0VDO0doRU07RWlFQztHakVFO0VrRUM7R2xFRTtFbUVDO0duRUU7RW9FQztHcEVFO0VxRUM7R3JFRTtFc0VDO0d0RUU7RXVFRztHdkVFO0V3RUM7R3hFRztFeUVDO0d6RUU7RTBFQztHMUVFO0UyRUM7RzNFRTtFNEVDO0c1RUc7RTZFQztHN0VFO0U4RUM7RzlFSTtFK0VDO0cvRUU7RWdGQztXQ0M7T0RHO0doRkM7SWtGVTtLbEZRO0lrRlM7S2xGTztJa0ZTO0tsRk87SWtGUztLbEZPO0lrRlM7S2xGTztJa0ZTO0tsRk87SWtGUztLbEZRO0lrRlM7S2xGTztJa0ZTO0tsRk87SWtGUztLbEZPO0lrRlM7S2xGTztJa0ZTO0tsRk87SWtGUztLbEZPO0lrRlM7S2xGTztJa0ZTO0tsRk87SWtGUztLbEZPO0lrRlE7S2xGTztJa0ZRO0tsRk87SWtGUTtLbEZPO0lrRlE7S2xGUTtJa0ZRO0tsRk87SWtGUTtLbEZPO0lrRlE7S2xGTyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIjxhbm9ueW1vdXM+IiwiZ2xvYmFsLlJOJHJlZ2lzdGVyQ2FsbGFibGVNb2R1bGUkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTt3RENrQjs2Q0NRLHFCRDtDRGEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJNZXNzYWdlUXVldWUiLCJjb25zdHJ1Y3RvciIsInNweSIsInByb3RvdHlwZS5fX3NweSIsImNhbGxGdW5jdGlvblJldHVybkZsdXNoZWRRdWV1ZSIsIl9fZ3VhcmQkYXJndW1lbnRfMCIsImludm9rZUNhbGxiYWNrQW5kUmV0dXJuRmx1c2hlZFF1ZXVlIiwiZmx1c2hlZFF1ZXVlIiwiZ2V0RXZlbnRMb29wUnVubmluZ1RpbWUiLCJyZWdpc3RlckNhbGxhYmxlTW9kdWxlIiwiX2xhenlDYWxsYWJsZU1vZHVsZXMubmFtZSIsInJlZ2lzdGVyTGF6eUNhbGxhYmxlTW9kdWxlIiwiZ2V0Q2FsbGFibGVNb2R1bGUiLCJjYWxsTmF0aXZlU3luY0hvb2siLCJwcm9jZXNzQ2FsbGJhY2tzIiwiX3N1Y2Nlc3NDYWxsYmFja3MuZm9yRWFjaCRhcmd1bWVudF8wIiwiZW5xdWV1ZU5hdGl2ZUNhbGwiLCJpc1ZhbGlkQXJndW1lbnQiLCJyZXBsYWNlciIsImNyZWF0ZURlYnVnTG9va3VwIiwic2V0UmVhY3ROYXRpdmVNaWNyb3Rhc2tzQ2FsbGJhY2siLCJfX2d1YXJkIiwiX19zaG91bGRQYXVzZU9uVGhyb3ciLCJfX2NhbGxSZWFjdE5hdGl2ZU1pY3JvdGFza3MiLCJfX2NhbGxGdW5jdGlvbiIsIl9faW52b2tlQ2FsbGJhY2siXSwibWFwcGluZ3MiOiJBQUE7QUN3QztFQ2dCO0dENEI7RUVNO3FDQ0U7T0RNO0dGTTtFSUU7aUJDSztLREU7R0pHO0VNRTtpQkRJO0tDRTtHTkc7RU9FO2lCRkM7S0VFO0dQSztFUUU7R1JFO0VTRTtzQ0NDLFlEO0dUQztFV0U7c0NERztLQ1E7R1hDO0VZRTtHWkc7RWFFO0dia0I7RWNFO3lDQ2U7V0RLO0dkNkI7RWdCRTs4QkNpQjtPRDZCO3VCRUs7T0ZTO0doQnlDO0VtQkU7R25CUztFb0JLO0dwQkU7RXFCTTtHckJVO0VzQk87R3RCTztFdUJFO0d2QlM7RXdCRTtHeEJxQztFeUJFO0d6QmlEO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl90b0NvbnN1bWFibGVBcnJheSJdLCJtYXBwaW5ncyI6IkFBQTtBQ0k7Q0RFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX2FycmF5V2l0aG91dEhvbGVzIl0sIm1hcHBpbmdzIjoiQUFBO0FDQztDREUifV0sW3sibmFtZXMiOlsiX2FycmF5TGlrZVRvQXJyYXkiLCI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQTtDQ00ifV0sW3sibmFtZXMiOlsiX2l0ZXJhYmxlVG9BcnJheSIsIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBO0NDRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSJdLCJtYXBwaW5ncyI6IkFBQTtBQ0M7Q0RPIn1dLFt7Im5hbWVzIjpbIl9ub25JdGVyYWJsZVNwcmVhZCIsIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBO0NDRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImludmFyaWFudCIsImZvcm1hdC5yZXBsYWNlJGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7Z0JDb0I7OEJDa0IsdUNEO0NEUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIndhcm5PbmNlIl0sIm1hcHBpbmdzIjoiQUFBO0FDcUI7Q0RRIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY3JlYXRlU3RyaW5naWZ5U2FmZVdpdGhMaW1pdHMiLCJyZXBsYWNlciIsInN0cmluZ2lmeVNhZmUiXSwibWFwcGluZ3MiOiJBQUE7T0NnQjtFQ2U7R0Q2QztTRUU7R0ZnQztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJkZWVwRnJlZXplQW5kVGhyb3dPbk11dGF0aW9uSW5EZXYiLCJ0aHJvd09uSW1tdXRhYmxlTXV0YXRpb24iLCJpZGVudGl0eSJdLCJtYXBwaW5ncyI6IkFBQTtBQzZCO0NEeUM7QUVJO0NGUztBR0U7Q0hFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiaXNFbmFibGVkIiwic2V0RW5hYmxlZCIsImJlZ2luRXZlbnQiLCJlbmRFdmVudCIsImJlZ2luQXN5bmNFdmVudCIsImVuZEFzeW5jRXZlbnQiLCJjb3VudGVyRXZlbnQiXSwibWFwcGluZ3MiOiJBQUE7T0NnQztDREk7T0VRLGdERjtPR007Q0hNO09JSztDSkk7T0tPO0NMaUI7T01NO0NOZTtPT0s7Q1BPIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiaXNCb2xkVGV4dEVuYWJsZWQiLCJQcm9taXNlJGFyZ3VtZW50XzAiLCJpc0dyYXlzY2FsZUVuYWJsZWQiLCJpc0ludmVydENvbG9yc0VuYWJsZWQiLCJpc1JlZHVjZU1vdGlvbkVuYWJsZWQiLCJwcmVmZXJzQ3Jvc3NGYWRlVHJhbnNpdGlvbnMiLCJpc1JlZHVjZVRyYW5zcGFyZW5jeUVuYWJsZWQiLCJpc1NjcmVlblJlYWRlckVuYWJsZWQiLCJpc0FjY2Vzc2liaWxpdHlTZXJ2aWNlRW5hYmxlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmUiLCJzZXRBY2Nlc3NpYmlsaXR5Rm9jdXMiLCJzZW5kQWNjZXNzaWJpbGl0eUV2ZW50IiwiYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5IiwiYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5V2l0aE9wdGlvbnMiLCJnZXRSZWNvbW1lbmRlZFRpbWVvdXRNaWxsaXMiXSwibWFwcGluZ3MiOiJBQUE7RUNxRjt5QkNJO09EUztHREU7RUdVO3lCREk7T0NTO0dIRTtFSVU7eUJGSTtPRVM7R0pFO0VLVTt1QkhDO0tHaUI7R0xDO0VNVTt1QkpDO0tJZ0I7R05DO0VPVTt5QkxJO09LUztHUEU7RVFVO3VCTkM7S01pQjtHUkM7RVNZO3VCUEM7S09hO0dUQztFVW9DO1NDTyxpQkQ7R1ZHO0VZTztHWkU7RWFLO0diVTtFY087R2RNO0VlUTtHZmdCO0VnQk87eUJkRTtPY1M7R2hCSSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJDVERldmljZUV2ZW50RW1pdHRlciIsImVtaXQiLCJiZWdpbkV2ZW50JGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUN3QjtFQ0U7ZUNJLCtDRDtHREc7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX2dldCJdLCJtYXBwaW5ncyI6IkFBQTtBQ0M7Q0RlIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX3N1cGVyUHJvcEJhc2UiXSwibWFwcGluZ3MiOiJBQUE7QUNDO0NETSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkV2ZW50RW1pdHRlciIsImFkZExpc3RlbmVyIiwicmVnaXN0cmF0aW9uLnJlbW92ZSIsImVtaXQiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50IiwiYWxsb2NhdGUiXSwibWFwcGluZ3MiOiJBQUE7ZUMrRDtFQ1M7TUNrQjtPREU7R0RJO0VHUztHSGE7RUlLO0dKUTtFS0s7R0xHO0NEQztBT0U7Q1BjIn1dLFt7Im5hbWVzIjpbIl9jbGFzc1ByaXZhdGVGaWVsZEJhc2UiLCI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQTtDQ0sifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJfY2xhc3NQcml2YXRlRmllbGRLZXkiXSwibWFwcGluZ3MiOiJBQUE7QUNDO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldF9fVmVyc2lvbiIsImdldF9fY29uc3RhbnRzIiwiZ2V0X19pc1BhZCIsImdldF9faXNUViIsImdldF9faXNWaXNpb24iLCJnZXRfX2lzVGVzdGluZyIsImdldF9faXNEaXNhYmxlQW5pbWF0aW9ucyIsImdldF9faXNNYWNDYXRhbHlzdCIsInNlbGVjdCJdLCJtYXBwaW5ncyI6IkFBQTtFQ3FCO0dERztFRUU7R0ZzQjtFR0U7R0hHO0VJRTtHSkc7RUtFO0dMRztFTUU7R05NO0VPRTtHUEc7RVFFO0dSRztVU0M7NEVURSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImlzQnJpZGdlbGVzcyIsImlzVHVyYm9Nb2R1bGVJbnRlcm9wRW5hYmxlZCIsInNob3VsZFJlcG9ydERlYnVnSW5mbyIsInJlcXVpcmVNb2R1bGUiLCJnZXQiLCJnZXRFbmZvcmNpbmciXSwibWFwcGluZ3MiOiJBQUE7QUN3QjtDREU7QUVFO0NGRTtBR0c7Q0hFO0FJSTtDSjBCO09LRTtDTEU7T01FO0NOaUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZW5Nb2R1bGUiLCJtZXRob2RzLmZvckVhY2gkYXJndW1lbnRfMCIsIm1vZHVsZS5nZXRDb25zdGFudHMiLCJsb2FkTW9kdWxlIiwiZ2VuTWV0aG9kIiwicHJvbWlzZU1ldGhvZFdyYXBwZXIiLCJQcm9taXNlJGFyZ3VtZW50XzAiLCJCYXRjaGVkQnJpZGdlLmVucXVldWVOYXRpdmVDYWxsJGFyZ3VtZW50XzMiLCJCYXRjaGVkQnJpZGdlLmVucXVldWVOYXRpdmVDYWxsJGFyZ3VtZW50XzQiLCJub25Qcm9taXNlTWV0aG9kV3JhcHBlciIsImFycmF5Q29udGFpbnMiLCJ1cGRhdGVFcnJvcldpdGhFcnJvckRhdGEiLCJmb3JFYWNoJGFyZ3VtZW50XzAiLCJkZWZpbmVMYXp5T2JqZWN0UHJvcGVydHkkYXJndW1lbnRfMi5nZXQiXSwibWFwcGluZ3MiOiJBQUE7QUMyQjtvQkMyQjtLRFc7MEJFSyxvQ0Y7Q0RZO0FJSztDSlE7QUtFO1NDRzt5QkNLO1VDSyxxQkQ7VUVDO2FGTTtPREU7S0RDO1NLRTtLTGtDO0NMSztBV0U7Q1hFO0FZRTtDWk87SWFjO2VDYyxxQ0Q7S2JHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX3NsaWNlZFRvQXJyYXkiXSwibWFwcGluZ3MiOiJBQUE7QUNJO0NERSJ9XSxbeyJuYW1lcyI6WyJfYXJyYXlXaXRoSG9sZXMiLCI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQTtDQ0UifV0sW3sibmFtZXMiOlsiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUE7Q0M0QiJ9XSxbeyJuYW1lcyI6WyJfbm9uSXRlcmFibGVSZXN0IiwiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUE7Q0NFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5IiwiZ2V0VmFsdWUiLCJzZXRWYWx1ZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ2U7RUNnQjtHRGM7RUVDO0dGUztDRFEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJsZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50Il0sIm1hcHBpbmdzIjoiQUFBO0FDZ0I7Q0RPIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyRWxlbWVudCIsImZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRCIsImZpbmROb2RlSGFuZGxlIiwiZGlzcGF0Y2hDb21tYW5kIiwic2VuZEFjY2Vzc2liaWxpdHlFdmVudCIsInVubW91bnRDb21wb25lbnRBdE5vZGVBbmRSZW1vdmVDb250YWluZXIiLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsImlzUHJvZmlsaW5nUmVuZGVyZXIiLCJpc0NoaWxkUHVibGljSW5zdGFuY2UiXSwibWFwcGluZ3MiOiJBQUE7T0NnQjtDRHFCO09FRTtDRk07T0dFO0NITTtPSUU7Q0pvQjtPS0U7Q0xRO09NTTtDTk07T09FO0NQUztPUUU7Q1JFO09TRTtDVFEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCI8YW5vbnltb3VzPiIsIndhcm4iLCJlcnJvciIsInByaW50V2FybmluZyIsImFyZ3MubWFwJGFyZ3VtZW50XzAiLCJpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsIiwicmVzdG9yZUFmdGVyRGlzcGF0Y2giLCJjYWxsQ2FsbGJhY2siLCJoYW5kbGVXaW5kb3dFcnJvciIsInJlcG9ydGVyLm9uRXJyb3IiLCJpbnZva2VHdWFyZGVkQ2FsbGJhY2siLCJpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IiLCJyZXRocm93Q2F1Z2h0RXJyb3IiLCJoYXNDYXVnaHRFcnJvciIsImNsZWFyQ2F1Z2h0RXJyb3IiLCJpc0FycmF5Iiwic2V0Q29tcG9uZW50VHJlZSIsInZhbGlkYXRlRXZlbnREaXNwYXRjaGVzIiwiZXhlY3V0ZURpc3BhdGNoIiwiZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyIiwiZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGwiLCJleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlIiwiZXhlY3V0ZURpcmVjdERpc3BhdGNoIiwiaGFzRGlzcGF0Y2hlcyIsIkV2ZW50SW50ZXJmYWNlLmN1cnJlbnRUYXJnZXQiLCJFdmVudEludGVyZmFjZS50aW1lU3RhbXAiLCJmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSIsImZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSIsIlN5bnRoZXRpY0V2ZW50IiwiYXNzaWduJGFyZ3VtZW50XzEucHJldmVudERlZmF1bHQiLCJhc3NpZ24kYXJndW1lbnRfMS5zdG9wUHJvcGFnYXRpb24iLCJhc3NpZ24kYXJndW1lbnRfMS5wZXJzaXN0IiwiYXNzaWduJGFyZ3VtZW50XzEuZGVzdHJ1Y3RvciIsImdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24kYXJndW1lbnRfMSIsIlN5bnRoZXRpY0V2ZW50LmV4dGVuZCIsIkUiLCJDbGFzcyIsImdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24iLCJzZXQiLCJnZXQiLCJjcmVhdGVPckdldFBvb2xlZEV2ZW50IiwicmVsZWFzZVBvb2xlZEV2ZW50IiwiYWRkRXZlbnRQb29saW5nVG8iLCJTeW50aGV0aWNFdmVudC5leHRlbmQkYXJndW1lbnRfMC50b3VjaEhpc3RvcnkiLCJpc1N0YXJ0aXNoIiwiaXNNb3ZlaXNoIiwiaXNFbmRpc2giLCJ0aW1lc3RhbXBGb3JUb3VjaCIsImNyZWF0ZVRvdWNoUmVjb3JkIiwicmVzZXRUb3VjaFJlY29yZCIsImdldFRvdWNoSWRlbnRpZmllciIsInJlY29yZFRvdWNoU3RhcnQiLCJyZWNvcmRUb3VjaE1vdmUiLCJyZWNvcmRUb3VjaEVuZCIsInByaW50VG91Y2giLCJwcmludFRvdWNoQmFuayIsIlJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLmluc3RydW1lbnQiLCJSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS5yZWNvcmRUb3VjaFRyYWNrIiwiYWNjdW11bGF0ZSIsImFjY3VtdWxhdGVJbnRvIiwiZm9yRWFjaEFjY3VtdWxhdGVkIiwiY2hhbmdlUmVzcG9uZGVyIiwiZ2V0UGFyZW50JDEiLCJnZXRMb3dlc3RDb21tb25BbmNlc3RvciIsImlzQW5jZXN0b3IiLCJ0cmF2ZXJzZVR3b1BoYXNlJDEiLCJnZXRMaXN0ZW5lciQxIiwibGlzdGVuZXJBdFBoYXNlJDEiLCJhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEiLCJhY2N1bXVsYXRlRGlzcGF0Y2hlcyQxIiwiYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMSIsImFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzJDEiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlU2tpcFRhcmdldCIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0IiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSQxIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyQxIiwic2V0UmVzcG9uZGVyQW5kRXh0cmFjdFRyYW5zZmVyIiwiY2FuVHJpZ2dlclRyYW5zZmVyIiwibm9SZXNwb25kZXJUb3VjaGVzIiwiUmVzcG9uZGVyRXZlbnRQbHVnaW4uX2dldFJlc3BvbmRlciIsIlJlc3BvbmRlckV2ZW50UGx1Z2luLmV4dHJhY3RFdmVudHMiLCJSZXNwb25kZXJFdmVudFBsdWdpbi5pbmplY3Rpb24uaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlciIsInJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nIiwicHVibGlzaEV2ZW50Rm9yUGx1Z2luIiwicHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUiLCJpbmplY3RFdmVudFBsdWdpbk9yZGVyIiwiaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lIiwiZ2V0TGlzdGVuZXIiLCJsaXN0ZW5lckF0UGhhc2UiLCJhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzIiwiZ2V0UGFyZW50IiwidHJhdmVyc2VUd29QaGFzZSIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzIiwiYWNjdW11bGF0ZUNhcHR1cmVQaGFzZURpc3BhdGNoZXMiLCJhY2N1bXVsYXRlRGlzcGF0Y2hlcyIsImFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlIiwiYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMiLCJSZWFjdE5hdGl2ZUJyaWRnZUV2ZW50UGx1Z2luLmV4dHJhY3RFdmVudHMiLCJkZWZhdWx0RGlmZmVyIiwicmVzdG9yZURlbGV0ZWRWYWx1ZXNJbk5lc3RlZEFycmF5IiwiZGlmZk5lc3RlZEFycmF5UHJvcGVydHkiLCJkaWZmTmVzdGVkUHJvcGVydHkiLCJhZGROZXN0ZWRQcm9wZXJ0eSIsImNsZWFyTmVzdGVkUHJvcGVydHkiLCJkaWZmUHJvcGVydGllcyIsImFkZFByb3BlcnRpZXMiLCJjbGVhclByb3BlcnRpZXMiLCJjcmVhdGUiLCJkaWZmIiwiYmF0Y2hlZFVwZGF0ZXNJbXBsIiwiYmF0Y2hlZFVwZGF0ZXMkMSIsInNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24iLCJleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2UiLCJleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2VUb3BMZXZlbCIsInJ1bkV2ZW50c0luQmF0Y2giLCJleHRyYWN0UGx1Z2luRXZlbnRzIiwicnVuRXh0cmFjdGVkUGx1Z2luRXZlbnRzSW5CYXRjaCIsImRpc3BhdGNoRXZlbnQiLCJiYXRjaGVkVXBkYXRlcyQxJGFyZ3VtZW50XzAiLCJkaXNhYmxlZExvZyIsImRpc2FibGVMb2dzIiwicmVlbmFibGVMb2dzIiwiaW5qZWN0SW50ZXJuYWxzIiwib25TY2hlZHVsZVJvb3QiLCJvbkNvbW1pdFJvb3QiLCJvblBvc3RDb21taXRSb290Iiwib25Db21taXRVbm1vdW50Iiwic2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMiLCJpbmplY3RQcm9maWxpbmdIb29rcyIsImdldExhbmVMYWJlbE1hcCIsImNsejMyRmFsbGJhY2siLCJnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyIsImdldE5leHRMYW5lcyIsImdldEVudGFuZ2xlZExhbmVzIiwiY29tcHV0ZUV4cGlyYXRpb25UaW1lIiwibWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZCIsImdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yIiwiaW5jbHVkZXNTeW5jTGFuZSIsImluY2x1ZGVzTm9uSWRsZVdvcmsiLCJpbmNsdWRlc09ubHlSZXRyaWVzIiwiaW5jbHVkZXNPbmx5Tm9uVXJnZW50TGFuZXMiLCJpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyIsImluY2x1ZGVzQmxvY2tpbmdMYW5lIiwiaW5jbHVkZXNFeHBpcmVkTGFuZSIsImlzVHJhbnNpdGlvbkxhbmUiLCJjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSIsImNsYWltTmV4dFJldHJ5TGFuZSIsImdldEhpZ2hlc3RQcmlvcml0eUxhbmUiLCJwaWNrQXJiaXRyYXJ5TGFuZSIsInBpY2tBcmJpdHJhcnlMYW5lSW5kZXgiLCJsYW5lVG9JbmRleCIsImluY2x1ZGVzU29tZUxhbmUiLCJpc1N1YnNldE9mTGFuZXMiLCJtZXJnZUxhbmVzIiwicmVtb3ZlTGFuZXMiLCJpbnRlcnNlY3RMYW5lcyIsImxhbmVUb0xhbmVzIiwiY3JlYXRlTGFuZU1hcCIsIm1hcmtSb290VXBkYXRlZCIsIm1hcmtSb290U3VzcGVuZGVkJDEiLCJtYXJrUm9vdFBpbmdlZCIsIm1hcmtSb290RmluaXNoZWQiLCJtYXJrU3Bhd25lZERlZmVycmVkTGFuZSIsIm1hcmtSb290RW50YW5nbGVkIiwidXBncmFkZVBlbmRpbmdMYW5lVG9TeW5jIiwibWFya0hpZGRlblVwZGF0ZSIsImdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb24iLCJhZGRGaWJlclRvTGFuZXNNYXAiLCJtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQiLCJ1cGRhdGVycy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJnZXRUcmFuc2l0aW9uc0ZvckxhbmVzIiwiZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5Iiwic2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5IiwiaGlnaGVyRXZlbnRQcmlvcml0eSIsImxvd2VyRXZlbnRQcmlvcml0eSIsImlzSGlnaGVyRXZlbnRQcmlvcml0eSIsImxhbmVzVG9FdmVudFByaW9yaXR5Iiwic2hpbSQyIiwic2hpbSQxIiwic2hpbSIsImFwcGVuZEluaXRpYWxDaGlsZCIsImNyZWF0ZUluc3RhbmNlIiwiY3JlYXRlVGV4dEluc3RhbmNlIiwiZ2V0Um9vdEhvc3RDb250ZXh0IiwiZ2V0Q2hpbGRIb3N0Q29udGV4dCIsImdldFB1YmxpY0luc3RhbmNlIiwiZ2V0UHVibGljVGV4dEluc3RhbmNlIiwiZ2V0UHVibGljSW5zdGFuY2VGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSIsInNob3VsZFNldFRleHRDb250ZW50IiwiZ2V0Q3VycmVudEV2ZW50UHJpb3JpdHkiLCJzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uIiwiY2xvbmVJbnN0YW5jZSIsImNsb25lSGlkZGVuSW5zdGFuY2UiLCJjbG9uZUhpZGRlblRleHRJbnN0YW5jZSIsImNyZWF0ZUNvbnRhaW5lckNoaWxkU2V0IiwiYXBwZW5kQ2hpbGRUb0NvbnRhaW5lckNoaWxkU2V0IiwiZmluYWxpemVDb250YWluZXJDaGlsZHJlbiIsInJlcGxhY2VDb250YWluZXJDaGlsZHJlbiIsInByZWxvYWRJbnN0YW5jZSIsIndhaXRGb3JDb21taXRUb0JlUmVhZHkiLCJnZXRJbnN0YW5jZUZyb21Ob2RlIiwiZ2V0Tm9kZUZyb21JbnN0YW5jZSIsImdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUiLCJSZWFjdEZhYnJpY0dsb2JhbFJlc3BvbmRlckhhbmRsZXIub25DaGFuZ2UiLCJnZXRJdGVyYXRvckZuIiwiZ2V0V3JhcHBlZE5hbWUkMSIsImdldENvbnRleHROYW1lJDEiLCJnZXRDb21wb25lbnROYW1lRnJvbVR5cGUiLCJnZXRXcmFwcGVkTmFtZSIsImdldENvbnRleHROYW1lIiwiZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlciIsImdldE5lYXJlc3RNb3VudGVkRmliZXIiLCJpc0ZpYmVyTW91bnRlZCIsImlzTW91bnRlZCIsImFzc2VydElzTW91bnRlZCIsImZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoIiwiZmluZEN1cnJlbnRIb3N0RmliZXIiLCJmaW5kQ3VycmVudEhvc3RGaWJlckltcGwiLCJkb2VzRmliZXJDb250YWluIiwiZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUiLCJkZXNjcmliZUNvbXBvbmVudEZyYW1lIiwiZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lIiwiZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lIiwiZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWIiwic2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQiLCJjaGVja1Byb3BUeXBlcyIsImNyZWF0ZUN1cnNvciIsInBvcCIsInB1c2giLCJnZXRVbm1hc2tlZENvbnRleHQiLCJjYWNoZUNvbnRleHQiLCJnZXRNYXNrZWRDb250ZXh0IiwiaGFzQ29udGV4dENoYW5nZWQiLCJpc0NvbnRleHRQcm92aWRlciIsInBvcENvbnRleHQiLCJwb3BUb3BMZXZlbENvbnRleHRPYmplY3QiLCJwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0IiwicHJvY2Vzc0NoaWxkQ29udGV4dCIsInB1c2hDb250ZXh0UHJvdmlkZXIiLCJpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyIiwiZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQiLCJpc09mZnNjcmVlbk1hbnVhbCIsImlzIiwiaXNSb290RGVoeWRyYXRlZCIsInJlcXVpcmVkQ29udGV4dCIsImdldFJvb3RIb3N0Q29udGFpbmVyIiwicHVzaEhvc3RDb250YWluZXIiLCJwb3BIb3N0Q29udGFpbmVyIiwiZ2V0SG9zdENvbnRleHQiLCJwdXNoSG9zdENvbnRleHQiLCJwb3BIb3N0Q29udGV4dCIsImRpZFN1c3BlbmRPckVycm9yV2hpbGVIeWRyYXRpbmdERVYiLCJwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlIiwicHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UiLCJwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UiLCJwb3BIeWRyYXRpb25TdGF0ZSIsInVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlIiwiZ2V0SXNIeWRyYXRpbmciLCJxdWV1ZUh5ZHJhdGlvbkVycm9yIiwiZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcyIsImdldENvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyIsImVucXVldWVVcGRhdGUkMSIsImVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZSIsImVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZUFuZEVhZ2VybHlCYWlsb3V0IiwiZW5xdWV1ZUNvbmN1cnJlbnRDbGFzc1VwZGF0ZSIsImVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZSIsInVuc2FmZV9tYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdCIsIm1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290IiwiZ2V0Um9vdEZvclVwZGF0ZWRGaWJlciIsImRldGVjdFVwZGF0ZU9uVW5tb3VudGVkRmliZXIiLCJlbnN1cmVSb290SXNTY2hlZHVsZWQiLCJmbHVzaFN5bmNXb3JrT25BbGxSb290cyIsImZsdXNoU3luY1dvcmtPbkxlZ2FjeVJvb3RzT25seSIsImZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsIiwidGhyb3dFcnJvciIsInByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayIsInNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2siLCJnZXRDb250aW51YXRpb25Gb3JSb290Iiwic2NoZWR1bGVDYWxsYmFjayQxIiwiY2FuY2VsQ2FsbGJhY2siLCJzY2hlZHVsZUltbWVkaWF0ZVRhc2siLCJSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmN1cnJlbnQucHVzaCRhcmd1bWVudF8wIiwicmVxdWVzdFRyYW5zaXRpb25MYW5lIiwiY2hhaW5UaGVuYWJsZVZhbHVlIiwidGhlbmFibGVXaXRoT3ZlcnJpZGUudGhlbiIsInRoZW5hYmxlLnRoZW4kYXJndW1lbnRfMCIsInRoZW5hYmxlLnRoZW4kYXJndW1lbnRfMSIsInBlZWtFbnRhbmdsZWRBY3Rpb25MYW5lIiwicGVla0VudGFuZ2xlZEFjdGlvblRoZW5hYmxlIiwiaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlIiwiY2xvbmVVcGRhdGVRdWV1ZSIsImNyZWF0ZVVwZGF0ZSIsImVucXVldWVVcGRhdGUiLCJlbnRhbmdsZVRyYW5zaXRpb25zIiwiZW5xdWV1ZUNhcHR1cmVkVXBkYXRlIiwiZ2V0U3RhdGVGcm9tVXBkYXRlIiwic3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiIsInByb2Nlc3NVcGRhdGVRdWV1ZSIsInJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nIiwiY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZyIsImRlZmVySGlkZGVuQ2FsbGJhY2tzIiwiY29tbWl0SGlkZGVuQ2FsbGJhY2tzIiwiY29tbWl0Q2FsbGJhY2tzIiwic2hhbGxvd0VxdWFsIiwiZGVzY3JpYmVGaWJlciIsImdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCIsImdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsIiwiZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldiIsInJlc2V0Q3VycmVudEZpYmVyIiwic2V0Q3VycmVudEZpYmVyIiwiZ2V0Q3VycmVudEZpYmVyIiwic2V0SXNSZW5kZXJpbmciLCJSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyIsIlJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzIiwiUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmciLCJSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nIiwiUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyIsImZpbmRTdHJpY3RSb290Iiwic2V0VG9Tb3J0ZWRTdHJpbmciLCJzZXQuZm9yRWFjaCRhcmd1bWVudF8wIiwicGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2gkYXJndW1lbnRfMCIsInBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaCRhcmd1bWVudF8wIiwicGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2gkYXJndW1lbnRfMCIsInBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2gkYXJndW1lbnRfMCIsInBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJmaWJlckFycmF5LmZvckVhY2gkYXJndW1lbnRfMCIsInR5cGVOYW1lIiwid2lsbENvZXJjaW9uVGhyb3ciLCJ0ZXN0U3RyaW5nQ29lcmNpb24iLCJjaGVja0tleVN0cmluZ0NvZXJjaW9uIiwiY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24iLCJnZXRUaGVuYWJsZXNGcm9tU3RhdGUiLCJub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUudGhlbiIsImNyZWF0ZVRoZW5hYmxlU3RhdGUiLCJpc1RoZW5hYmxlUmVzb2x2ZWQiLCJub29wIiwidHJhY2tVc2VkVGhlbmFibGUiLCJwZW5kaW5nVGhlbmFibGUudGhlbiRhcmd1bWVudF8wIiwicGVuZGluZ1RoZW5hYmxlLnRoZW4kYXJndW1lbnRfMSIsImdldFN1c3BlbmRlZFRoZW5hYmxlIiwiY2hlY2tJZlVzZVdyYXBwZWRJblRyeUNhdGNoIiwiY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2giLCJ3YXJuRm9yTWlzc2luZ0tleSIsImlzUmVhY3RDbGFzcyIsInVud3JhcFRoZW5hYmxlIiwiY29lcmNlUmVmIiwicmVmIiwidGhyb3dPbkludmFsaWRPYmplY3RUeXBlIiwid2Fybk9uRnVuY3Rpb25UeXBlIiwicmVzb2x2ZUxhenkiLCJjcmVhdGVDaGlsZFJlY29uY2lsZXIiLCJkZWxldGVDaGlsZCIsImRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuIiwibWFwUmVtYWluaW5nQ2hpbGRyZW4iLCJ1c2VGaWJlciIsInBsYWNlQ2hpbGQiLCJwbGFjZVNpbmdsZUNoaWxkIiwidXBkYXRlVGV4dE5vZGUiLCJ1cGRhdGVFbGVtZW50IiwidXBkYXRlUG9ydGFsIiwidXBkYXRlRnJhZ21lbnQiLCJjcmVhdGVDaGlsZCIsInVwZGF0ZVNsb3QiLCJ1cGRhdGVGcm9tTWFwIiwid2Fybk9uSW52YWxpZEtleSIsInJlY29uY2lsZUNoaWxkcmVuQXJyYXkiLCJleGlzdGluZ0NoaWxkcmVuLmZvckVhY2gkYXJndW1lbnRfMCIsInJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IiLCJyZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZSIsInJlY29uY2lsZVNpbmdsZUVsZW1lbnQiLCJyZWNvbmNpbGVTaW5nbGVQb3J0YWwiLCJyZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwiLCJyZWNvbmNpbGVDaGlsZEZpYmVycyIsInJlc2V0Q2hpbGRSZWNvbmNpbGVyT25VbndpbmQiLCJjbG9uZUNoaWxkRmliZXJzIiwicmVzZXRDaGlsZEZpYmVycyIsInB1c2hIaWRkZW5Db250ZXh0IiwicmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayIsInBvcEhpZGRlbkNvbnRleHQiLCJpc0N1cnJlbnRUcmVlSGlkZGVuIiwiZ2V0U2hlbGxCb3VuZGFyeSIsInB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlciIsInB1c2hGYWxsYmFja1RyZWVTdXNwZW5zZUhhbmRsZXIiLCJwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyIiwicmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrIiwiZ2V0U3VzcGVuc2VIYW5kbGVyIiwicG9wU3VzcGVuc2VIYW5kbGVyIiwiaGFzU3VzcGVuc2VMaXN0Q29udGV4dCIsInNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dCIsInNldFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0IiwicHVzaFN1c3BlbnNlTGlzdENvbnRleHQiLCJwb3BTdXNwZW5zZUxpc3RDb250ZXh0IiwiZmluZEZpcnN0U3VzcGVuZGVkIiwibW91bnRIb29rVHlwZXNEZXYiLCJ1cGRhdGVIb29rVHlwZXNEZXYiLCJjaGVja0RlcHNBcmVBcnJheURldiIsIndhcm5Pbkhvb2tNaXNtYXRjaEluRGV2Iiwid2FybklmQXN5bmNDbGllbnRDb21wb25lbnQiLCJ0aHJvd0ludmFsaWRIb29rRXJyb3IiLCJhcmVIb29rSW5wdXRzRXF1YWwiLCJyZW5kZXJXaXRoSG9va3MiLCJmaW5pc2hSZW5kZXJpbmdIb29rcyIsInJlcGxheVN1c3BlbmRlZENvbXBvbmVudFdpdGhIb29rcyIsInJlbmRlcldpdGhIb29rc0FnYWluIiwiYmFpbG91dEhvb2tzIiwicmVzZXRIb29rc0FmdGVyVGhyb3ciLCJyZXNldEhvb2tzT25VbndpbmQiLCJtb3VudFdvcmtJblByb2dyZXNzSG9vayIsInVwZGF0ZVdvcmtJblByb2dyZXNzSG9vayIsImNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUiLCJ1c2VUaGVuYWJsZSIsInVzZSIsImJhc2ljU3RhdGVSZWR1Y2VyIiwibW91bnRSZWR1Y2VyIiwidXBkYXRlUmVkdWNlciIsInVwZGF0ZVJlZHVjZXJJbXBsIiwicmVyZW5kZXJSZWR1Y2VyIiwibW91bnRTeW5jRXh0ZXJuYWxTdG9yZSIsInVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlIiwicHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayIsInVwZGF0ZVN0b3JlSW5zdGFuY2UiLCJzdWJzY3JpYmVUb1N0b3JlIiwiaGFuZGxlU3RvcmVDaGFuZ2UiLCJjaGVja0lmU25hcHNob3RDaGFuZ2VkIiwiZm9yY2VTdG9yZVJlcmVuZGVyIiwibW91bnRTdGF0ZUltcGwiLCJtb3VudFN0YXRlIiwidXBkYXRlU3RhdGUiLCJyZXJlbmRlclN0YXRlIiwicHVzaEVmZmVjdCIsImNyZWF0ZUVmZmVjdEluc3RhbmNlIiwibW91bnRSZWYiLCJ1cGRhdGVSZWYiLCJtb3VudEVmZmVjdEltcGwiLCJ1cGRhdGVFZmZlY3RJbXBsIiwibW91bnRFZmZlY3QiLCJ1cGRhdGVFZmZlY3QiLCJtb3VudEluc2VydGlvbkVmZmVjdCIsInVwZGF0ZUluc2VydGlvbkVmZmVjdCIsIm1vdW50TGF5b3V0RWZmZWN0IiwidXBkYXRlTGF5b3V0RWZmZWN0IiwiaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdCIsIm1vdW50SW1wZXJhdGl2ZUhhbmRsZSIsInVwZGF0ZUltcGVyYXRpdmVIYW5kbGUiLCJtb3VudERlYnVnVmFsdWUiLCJtb3VudENhbGxiYWNrIiwidXBkYXRlQ2FsbGJhY2siLCJtb3VudE1lbW8iLCJ1cGRhdGVNZW1vIiwibW91bnREZWZlcnJlZFZhbHVlIiwidXBkYXRlRGVmZXJyZWRWYWx1ZSIsInJlcmVuZGVyRGVmZXJyZWRWYWx1ZSIsIm1vdW50RGVmZXJyZWRWYWx1ZUltcGwiLCJ1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbCIsInN0YXJ0VHJhbnNpdGlvbiIsIm1vdW50VHJhbnNpdGlvbiIsInVwZGF0ZVRyYW5zaXRpb24iLCJyZXJlbmRlclRyYW5zaXRpb24iLCJtb3VudElkIiwidXBkYXRlSWQiLCJkaXNwYXRjaFJlZHVjZXJBY3Rpb24iLCJkaXNwYXRjaFNldFN0YXRlIiwiaXNSZW5kZXJQaGFzZVVwZGF0ZSIsImVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZSIsImVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZSIsIndhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyIsIndhcm5JbnZhbGlkSG9va0FjY2VzcyIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi5yZWFkQ29udGV4dCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VDYWxsYmFjayIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUluc2VydGlvbkVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VMYXlvdXRFZmZlY3QiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlTWVtbyIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VSZWR1Y2VyIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZVJlZiIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VTdGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VEZWJ1Z1ZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZURlZmVycmVkVmFsdWUiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlVHJhbnNpdGlvbiIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJZCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYucmVhZENvbnRleHQiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZUNhbGxiYWNrIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VFZmZlY3QiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZUltcGVyYXRpdmVIYW5kbGUiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZUluc2VydGlvbkVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlTGF5b3V0RWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VNZW1vIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VSZWR1Y2VyIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VSZWYiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZVN0YXRlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VEZWJ1Z1ZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VEZWZlcnJlZFZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VUcmFuc2l0aW9uIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlSWQiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnJlYWRDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VDYWxsYmFjayIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlQ29udGV4dCIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VJbnNlcnRpb25FZmZlY3QiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUxheW91dEVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlTWVtbyIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlUmVkdWNlciIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlUmVmIiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VTdGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRGVidWdWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRGVmZXJyZWRWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlVHJhbnNpdGlvbiIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlU3luY0V4dGVybmFsU3RvcmUiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUlkIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnJlYWRDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUNhbGxiYWNrIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUNvbnRleHQiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlRWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUltcGVyYXRpdmVIYW5kbGUiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlSW5zZXJ0aW9uRWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUxheW91dEVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VNZW1vIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVJlZHVjZXIiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlUmVmIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVN0YXRlIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZURlYnVnVmFsdWUiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlRGVmZXJyZWRWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VUcmFuc2l0aW9uIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVN5bmNFeHRlcm5hbFN0b3JlIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUlkIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi5yZWFkQ29udGV4dCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VDYWxsYmFjayIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlQ29udGV4dCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJbnNlcnRpb25FZmZlY3QiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUxheW91dEVmZmVjdCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlTWVtbyIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlUmVkdWNlciIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlUmVmIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VTdGF0ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRGVidWdWYWx1ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRGVmZXJyZWRWYWx1ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlVHJhbnNpdGlvbiIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlU3luY0V4dGVybmFsU3RvcmUiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUlkIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYucmVhZENvbnRleHQiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2UiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VDYWxsYmFjayIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUNvbnRleHQiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VFZmZlY3QiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlSW5zZXJ0aW9uRWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlTGF5b3V0RWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlTWVtbyIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZVJlZHVjZXIiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VSZWYiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VTdGF0ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZURlYnVnVmFsdWUiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VEZWZlcnJlZFZhbHVlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlVHJhbnNpdGlvbiIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZVN5bmNFeHRlcm5hbFN0b3JlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlSWQiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnJlYWRDb250ZXh0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2UiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUNhbGxiYWNrIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VDb250ZXh0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VFZmZlY3QiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUltcGVyYXRpdmVIYW5kbGUiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUluc2VydGlvbkVmZmVjdCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlTGF5b3V0RWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VNZW1vIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VSZWR1Y2VyIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VSZWYiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVN0YXRlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VEZWJ1Z1ZhbHVlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VEZWZlcnJlZFZhbHVlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VUcmFuc2l0aW9uIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlSWQiLCJpc0N1cnJlbnRVcGRhdGVOZXN0ZWQiLCJtYXJrTmVzdGVkVXBkYXRlU2NoZWR1bGVkIiwicmVzZXROZXN0ZWRVcGRhdGVGbGFnIiwic3luY05lc3RlZFVwZGF0ZUZsYWciLCJnZXRDb21taXRUaW1lIiwicmVjb3JkQ29tbWl0VGltZSIsInN0YXJ0UHJvZmlsZXJUaW1lciIsInN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nIiwic3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSIsInJlY29yZExheW91dEVmZmVjdER1cmF0aW9uIiwicmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uIiwic3RhcnRMYXlvdXRFZmZlY3RUaW1lciIsInN0YXJ0UGFzc2l2ZUVmZmVjdFRpbWVyIiwidHJhbnNmZXJBY3R1YWxEdXJhdGlvbiIsInJlc29sdmVEZWZhdWx0UHJvcHMiLCJPYmplY3QuZGVmaW5lUHJvcGVydHkkYXJndW1lbnRfMi52YWx1ZSIsIndhcm5PbkludmFsaWRDYWxsYmFjayIsIndhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSIsImFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVTZXRTdGF0ZSIsImNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSIsImNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiY2hlY2tDbGFzc0luc3RhbmNlIiwiYWRvcHRDbGFzc0luc3RhbmNlIiwiY29uc3RydWN0Q2xhc3NJbnN0YW5jZSIsImNhbGxDb21wb25lbnRXaWxsTW91bnQiLCJjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm1vdW50Q2xhc3NJbnN0YW5jZSIsInJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSIsInVwZGF0ZUNsYXNzSW5zdGFuY2UiLCJjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlciIsImNyZWF0ZUNhcHR1cmVkVmFsdWUiLCJzaG93RXJyb3JEaWFsb2ciLCJsb2dDYXB0dXJlZEVycm9yIiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwiY3JlYXRlUm9vdEVycm9yVXBkYXRlIiwidXBkYXRlLmNhbGxiYWNrIiwiY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSIsInVwZGF0ZS5wYXlsb2FkIiwiY2FsbGJhY2siLCJyZXNldFN1c3BlbmRlZENvbXBvbmVudCIsIm1hcmtTdXNwZW5zZUJvdW5kYXJ5U2hvdWxkQ2FwdHVyZSIsInRocm93RXhjZXB0aW9uIiwicmVjb25jaWxlQ2hpbGRyZW4iLCJmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlIiwidXBkYXRlRm9yd2FyZFJlZiIsInVwZGF0ZU1lbW9Db21wb25lbnQiLCJ1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50IiwidXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50IiwiZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQiLCJ1cGRhdGVNb2RlIiwidXBkYXRlUHJvZmlsZXIiLCJtYXJrUmVmJDEiLCJ1cGRhdGVGdW5jdGlvbkNvbXBvbmVudCIsInJlcGxheUZ1bmN0aW9uQ29tcG9uZW50IiwidXBkYXRlQ2xhc3NDb21wb25lbnQiLCJmaW5pc2hDbGFzc0NvbXBvbmVudCIsInB1c2hIb3N0Um9vdENvbnRleHQiLCJ1cGRhdGVIb3N0Um9vdCIsInVwZGF0ZUhvc3RDb21wb25lbnQkMSIsInVwZGF0ZUhvc3RUZXh0JDEiLCJtb3VudExhenlDb21wb25lbnQiLCJtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudCIsIm1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudCIsInZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldiIsIm1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZSIsInVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUiLCJzaG91bGRSZW1haW5PbkZhbGxiYWNrIiwiZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUiLCJ1cGRhdGVTdXNwZW5zZUNvbXBvbmVudCIsIm1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4iLCJtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbiIsIm1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlciIsInVwZGF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIiLCJ1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbiIsInVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbiIsInJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nIiwibW91bnRTdXNwZW5zZUZhbGxiYWNrQWZ0ZXJSZXRyeVdpdGhvdXRIeWRyYXRpbmciLCJ1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQiLCJzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIiLCJwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2UiLCJmaW5kTGFzdENvbnRlbnRSb3ciLCJ2YWxpZGF0ZVJldmVhbE9yZGVyIiwidmFsaWRhdGVUYWlsT3B0aW9ucyIsInZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQiLCJ2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuIiwiaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlIiwidXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50IiwidXBkYXRlUG9ydGFsQ29tcG9uZW50IiwidXBkYXRlQ29udGV4dFByb3ZpZGVyIiwidXBkYXRlQ29udGV4dENvbnN1bWVyIiwibWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUiLCJyZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlIiwiYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayIsInJlbW91bnRGaWJlciIsImNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0IiwiYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUiLCJiZWdpbldvcmskMSIsInJlc2V0Q29udGV4dERlcGVuZGVuY2llcyIsImVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYiLCJleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYiLCJwdXNoUHJvdmlkZXIiLCJwb3BQcm92aWRlciIsInNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgiLCJwcm9wYWdhdGVDb250ZXh0Q2hhbmdlIiwicHJvcGFnYXRlQ29udGV4dENoYW5nZV9lYWdlciIsInByZXBhcmVUb1JlYWRDb250ZXh0IiwicmVhZENvbnRleHQiLCJyZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24iLCJyZWFkQ29udGV4dEZvckNvbnN1bWVyIiwicmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uIiwiaGFuZGxlQXN5bmNBY3Rpb24iLCJub3RpZnlUcmFuc2l0aW9uQ2FsbGJhY2tzIiwiY2FsbGJhY2tzLmZvckVhY2gkYXJndW1lbnRfMCIsImdldFN1c3BlbmRlZENhY2hlIiwibWFya1VwZGF0ZSIsIm1hcmtSZWYiLCJkb2VzUmVxdWlyZUNsb25lIiwiYXBwZW5kQWxsQ2hpbGRyZW4iLCJhcHBlbmRBbGxDaGlsZHJlblRvQ29udGFpbmVyIiwidXBkYXRlSG9zdENvbnRhaW5lciIsInVwZGF0ZUhvc3RDb21wb25lbnQiLCJwcmVsb2FkSW5zdGFuY2VBbmRTdXNwZW5kSWZOZWVkZWQiLCJzY2hlZHVsZVJldHJ5RWZmZWN0IiwidXBkYXRlSG9zdFRleHQiLCJjdXRPZmZUYWlsSWZOZWVkZWQiLCJidWJibGVQcm9wZXJ0aWVzIiwiY29tcGxldGVEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeSIsImNvbXBsZXRlV29yayIsInVud2luZFdvcmsiLCJ1bndpbmRJbnRlcnJ1cHRlZFdvcmsiLCJzaG91bGRQcm9maWxlIiwicmVwb3J0VW5jYXVnaHRFcnJvckluREVWIiwiaW52b2tlR3VhcmRlZENhbGxiYWNrJGFyZ3VtZW50XzEiLCJjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIiLCJzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQiLCJzYWZlbHlBdHRhY2hSZWYiLCJzYWZlbHlEZXRhY2hSZWYiLCJzYWZlbHlDYWxsRGVzdHJveSIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19iZWdpbiIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19jb21wbGV0ZSIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c09uRmliZXIiLCJjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQiLCJjb21taXRIb29rRWZmZWN0TGlzdE1vdW50IiwiY29tbWl0UGFzc2l2ZUVmZmVjdER1cmF0aW9ucyIsImNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzIiwiY29tbWl0Q2xhc3NMYXlvdXRMaWZlY3ljbGVzIiwiY29tbWl0Q2xhc3NDYWxsYmFja3MiLCJjb21taXRIb3N0Q29tcG9uZW50TW91bnQiLCJjb21taXRQcm9maWxlclVwZGF0ZSIsImNvbW1pdExheW91dEVmZmVjdE9uRmliZXIiLCJjb21taXRBdHRhY2hSZWYiLCJkZXRhY2hGaWJlck11dGF0aW9uIiwiZGV0YWNoRmliZXJBZnRlckVmZmVjdHMiLCJlbXB0eVBvcnRhbENvbnRhaW5lciIsImNvbW1pdFBsYWNlbWVudCIsImNvbW1pdERlbGV0aW9uRWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMiLCJjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyIiwiY29tbWl0U3VzcGVuc2VDYWxsYmFjayIsImdldFJldHJ5Q2FjaGUiLCJkZXRhY2hPZmZzY3JlZW5JbnN0YW5jZSIsImF0dGFjaE9mZnNjcmVlbkluc3RhbmNlIiwiYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyIsIndha2VhYmxlcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJjb21taXRNdXRhdGlvbkVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzIiwiY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlciIsImNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyIsImNvbW1pdExheW91dEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyIsImRpc2FwcGVhckxheW91dEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyIsInJlYXBwZWFyTGF5b3V0RWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMiLCJjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyIsImNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyIsImNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIiLCJyZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMiLCJyZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyIsImNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0cyIsImFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQiLCJyZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQiLCJhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlciIsImRldGFjaEFsdGVybmF0ZVNpYmxpbmdzIiwiY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMiLCJjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIiLCJyZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzIiwiZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QiLCJjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luIiwiY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9jb21wbGV0ZSIsImNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyIiwiaW52b2tlTGF5b3V0RWZmZWN0TW91bnRJbkRFViIsImludm9rZVBhc3NpdmVFZmZlY3RNb3VudEluREVWIiwiaW52b2tlTGF5b3V0RWZmZWN0VW5tb3VudEluREVWIiwiaW52b2tlUGFzc2l2ZUVmZmVjdFVubW91bnRJbkRFViIsImlzTGVnYWN5QWN0RW52aXJvbm1lbnQiLCJpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCIsInJlc2V0UmVuZGVyVGltZXIiLCJnZXRSZW5kZXJUYXJnZXRUaW1lIiwiZ2V0V29ya0luUHJvZ3Jlc3NSb290IiwiZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMiLCJpc1dvcmtMb29wU3VzcGVuZGVkT25EYXRhIiwicmVxdWVzdFVwZGF0ZUxhbmUiLCJyZXF1ZXN0UmV0cnlMYW5lIiwicmVxdWVzdERlZmVycmVkTGFuZSIsInBlZWtEZWZlcnJlZExhbmUiLCJzY2hlZHVsZVVwZGF0ZU9uRmliZXIiLCJpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUiLCJwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QiLCJyZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvciIsInF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMiLCJmaW5pc2hDb25jdXJyZW50UmVuZGVyIiwiY29tbWl0Um9vdFdoZW5SZWFkeSIsImlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyIsIm1hcmtSb290U3VzcGVuZGVkIiwicGVyZm9ybVN5bmNXb3JrT25Sb290IiwiZ2V0RXhlY3V0aW9uQ29udGV4dCIsImJhdGNoZWRVcGRhdGVzIiwiZmx1c2hTeW5jIiwic2V0RW50YW5nbGVkUmVuZGVyTGFuZXMiLCJnZXRFbnRhbmdsZWRSZW5kZXJMYW5lcyIsInJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjayIsInByZXBhcmVGcmVzaFN0YWNrIiwicmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kIiwiaGFuZGxlVGhyb3ciLCJzaG91bGRSZW1haW5PblByZXZpb3VzU2NyZWVuIiwicHVzaERpc3BhdGNoZXIiLCJwb3BEaXNwYXRjaGVyIiwibWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrIiwibWFya1NraXBwZWRVcGRhdGVMYW5lcyIsInJlbmRlckRpZFN1c3BlbmQiLCJyZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlIiwicmVuZGVyRGlkRXJyb3IiLCJyZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQiLCJyZW5kZXJSb290U3luYyIsIndvcmtMb29wU3luYyIsInJlbmRlclJvb3RDb25jdXJyZW50Iiwib25SZXNvbHV0aW9uIiwid29ya0xvb3BDb25jdXJyZW50IiwicGVyZm9ybVVuaXRPZldvcmsiLCJyZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrIiwidGhyb3dBbmRVbndpbmRXb3JrTG9vcCIsInBhbmljT25Sb290RXJyb3IiLCJjb21wbGV0ZVVuaXRPZldvcmsiLCJ1bndpbmRVbml0T2ZXb3JrIiwiY29tbWl0Um9vdCIsImNvbW1pdFJvb3RJbXBsIiwic2NoZWR1bGVDYWxsYmFjayRhcmd1bWVudF8xIiwibWFrZUVycm9ySW5mbyIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSRhcmd1bWVudF8yLmdldCIsImZsdXNoUGFzc2l2ZUVmZmVjdHMiLCJlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdCIsImZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsIiwiaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeSIsIm1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQiLCJwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3IiLCJjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdCIsImNhcHR1cmVDb21taXRQaGFzZUVycm9yIiwiYXR0YWNoUGluZ0xpc3RlbmVyIiwicGluZ1N1c3BlbmRlZFJvb3QiLCJyZXRyeVRpbWVkT3V0Qm91bmRhcnkiLCJyZXRyeURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5IiwicmVzb2x2ZVJldHJ5V2FrZWFibGUiLCJ0aHJvd0lmSW5maW5pdGVVcGRhdGVMb29wRGV0ZWN0ZWQiLCJmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYiLCJjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYiLCJsZWdhY3lDb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYiLCJpbnZva2VFZmZlY3RzSW5EZXYiLCJ3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWIiwiYmVnaW5Xb3JrIiwid2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYiLCJyZXN0b3JlUGVuZGluZ1VwZGF0ZXJzIiwibWVtb2l6ZWRVcGRhdGVycy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJzY2hlZHVsZUNhbGxiYWNrIiwic2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWIiwid2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWIiwid2FybklmU3VzcGVuc2VSZXNvbHV0aW9uTm90V3JhcHBlZFdpdGhBY3RERVYiLCJzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QiLCJzZXRSZWZyZXNoSGFuZGxlciIsInJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyIsInJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyIsInJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nIiwiaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nIiwibWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmciLCJzY2hlZHVsZVJlZnJlc2giLCJmbHVzaFN5bmMkYXJndW1lbnRfMCIsInNjaGVkdWxlUm9vdCIsInNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkiLCJmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2giLCJmYW1pbGllcy5tYXAkYXJndW1lbnRfMCIsImZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseSIsImZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkiLCJmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkiLCJGaWJlck5vZGUiLCJjcmVhdGVGaWJlciIsInNob3VsZENvbnN0cnVjdCIsImlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQiLCJyZXNvbHZlTGF6eUNvbXBvbmVudFRhZyIsImNyZWF0ZVdvcmtJblByb2dyZXNzIiwicmVzZXRXb3JrSW5Qcm9ncmVzcyIsImNyZWF0ZUhvc3RSb290RmliZXIiLCJjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMiLCJjcmVhdGVGaWJlckZyb21FbGVtZW50IiwiY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQiLCJjcmVhdGVGaWJlckZyb21Qcm9maWxlciIsImNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlIiwiY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0IiwiY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuIiwicHJpbWFyeUNoaWxkSW5zdGFuY2UuZGV0YWNoIiwicHJpbWFyeUNoaWxkSW5zdGFuY2UuYXR0YWNoIiwiY3JlYXRlRmliZXJGcm9tVGV4dCIsImNyZWF0ZUZpYmVyRnJvbVBvcnRhbCIsImFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWIiwiRmliZXJSb290Tm9kZSIsImNyZWF0ZUZpYmVyUm9vdCIsImNyZWF0ZVBvcnRhbCQxIiwiZ2V0Q29udGV4dEZvclN1YnRyZWUiLCJmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmciLCJjcmVhdGVDb250YWluZXIiLCJ1cGRhdGVDb250YWluZXIiLCJnZXRQdWJsaWNSb290SW5zdGFuY2UiLCJzaG91bGRFcnJvckltcGwiLCJzaG91bGRFcnJvciIsInNob3VsZFN1c3BlbmRJbXBsIiwic2hvdWxkU3VzcGVuZCIsImNvcHlXaXRoRGVsZXRlSW1wbCIsImNvcHlXaXRoRGVsZXRlIiwiY29weVdpdGhSZW5hbWVJbXBsIiwiY29weVdpdGhSZW5hbWUiLCJjb3B5V2l0aFNldEltcGwiLCJjb3B5V2l0aFNldCIsImZpbmRIb29rIiwib3ZlcnJpZGVIb29rU3RhdGUiLCJvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGgiLCJvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgiLCJvdmVycmlkZVByb3BzIiwib3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgiLCJvdmVycmlkZVByb3BzUmVuYW1lUGF0aCIsInNjaGVkdWxlVXBkYXRlIiwic2V0RXJyb3JIYW5kbGVyIiwic2V0U3VzcGVuc2VIYW5kbGVyIiwiZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIiLCJlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIiwiZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMiLCJpbmplY3RJbnRvRGV2VG9vbHMiLCJnZXRJbnN0YW5jZUZyb21UYWciLCJmaW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQiLCJmaW5kTm9kZUhhbmRsZSIsImRpc3BhdGNoQ29tbWFuZCIsInNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQiLCJnZXROb2RlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUiLCJpc0NoaWxkUHVibGljSW5zdGFuY2UiLCJjcmVhdGVIaWVyYXJjaHkiLCJmaWJlckhpZXJhcmNoeS5tYXAkYXJndW1lbnRfMCIsImdldEluc3BlY3RvckRhdGEiLCJtZWFzdXJlIiwiZ2V0SG9zdE5vZGUiLCJnZXRIb3N0UHJvcHMiLCJnZXRJbnNwZWN0b3JEYXRhRm9ySW5zdGFuY2UiLCJnZXRPd25lckhpZXJhcmNoeSIsImxhc3ROb25Ib3N0SW5zdGFuY2UiLCJ0cmF2ZXJzZU93bmVyVHJlZVVwIiwiZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdUYWciLCJnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQiLCJuYXRpdmVGYWJyaWNVSU1hbmFnZXIuZmluZE5vZGVBdFBvaW50JGFyZ3VtZW50XzMiLCJuYXRpdmVGYWJyaWNVSU1hbmFnZXIubWVhc3VyZSRhcmd1bWVudF8xIiwiUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlVJTWFuYWdlci5maW5kU3Vidmlld0luJGFyZ3VtZW50XzIiLCJvblJlY292ZXJhYmxlRXJyb3IiLCJyZW5kZXIiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwic3RvcFN1cmZhY2UiLCJ1cGRhdGVDb250YWluZXIkYXJndW1lbnRfMyIsImNyZWF0ZVBvcnRhbCJdLCJtYXBwaW5ncyI6IkFBQTtHQ2dCO0lDd0I7S0RnQjtJRUM7S0ZnQjtJR0U7c0NDYTtTREU7S0hRO0lLZTtxQ0N5QztXRGdCOzZCRU87V0ZNO2tDR2lCO1dIb0I7S0xpRTtlU1E7T1RHO0lVZ0I7S1ZJO0lXWTtLWHFCO0lZTTtLWk87SWFDO0tiRTtJY0M7S2RZO0llSTtLZkU7SWdCSztLaEJpQjtJaUJFO0tqQndCO0lrQlE7S2xCSztJbUJLO0tuQnNCO0lvQlM7S3BCeUI7SXFCSztLckJLO0lzQlc7S3RCb0I7SXVCTTtLdkJFO3FCd0JjO094QkU7aUJ5Qkk7T3pCRTtJMEJLO0sxQkU7STJCRTtLM0JFO0k0Qm9CO0s1QnlEO3NCNkJHO083QmU7dUI4QkM7TzlCbUI7ZStCTztPL0JFO2tCZ0NZO2lFQzhDLGNEO2NDTyxjRDtPaENJOzRCa0NPO2NDRyxjRDtNRUs7T0ZFO0tsQ1M7SXFDVztNQ0M7T0RJO01FRTtPRlM7TXBDRTtPb0NZO0tyQ1E7SXdDRTtLeEMwQjtJeUNFO0t6Q2M7STBDRTtLMUNJO29CMkNTO08zQ0U7STRDUztLNUNFO0k2Q0M7SzdDRTtJOENDO0s5Q0k7SStDdUI7Sy9DSztJZ0RNO0toRGE7SWlERTtLakRXO0lrREU7S2xEbUI7SW1ERTtLbkRXO0lvREU7S3BEdUI7SXFERTtLckR1QjtJc0RFO0t0RE87SXVERTtLdkRRO2tCd0RPO094REU7d0J5REM7T3pEdUM7STBEWTtLMUR5QjtJMkRlO0szRGlDO0k0RFc7SzVETztJNkQ4QztLN0RXO0k4RGtHO0s5RGM7SStETTtLL0RtQztJZ0VLO0toRVU7SWlFSztLakVpQjtJa0VFO0tsRTRCO0ltRUU7S25FSTtJb0VFO0twRW1CO0lxRU87S3JFZ0I7SXNFTztLdEVJO0l1RUU7S3ZFRTtJd0VFO0t4RVU7SXlFRTtLekVFO0kwRUU7SzFFUTtJMkVFO0szRUU7STRFZ007SzVFd0c7STZFVTtLN0VVO0k4RVM7SzlFc0I7cUIrRUk7Ty9FRTtxQmdGUTtPaEZnRztzQ2lGUTtTakZFO0lrRm1CO0tsRmtEO0ltRlU7S25GMEI7SW9GUztLcEZpQjtJcUY4QjtLckZXO0lzRlc7S3RGNkI7SXVGRTtLdkY0QjtJd0ZZO0t4Rkk7SXlGRTtLekZtQjtJMEZFO0sxRmM7STJGSztLM0ZzQjtJNEZFO0s1RlM7STZGRTtLN0ZFO0k4RkU7SzlGUztJK0ZPO0svRmdCO0lnR087S2hHSTtJaUdFO0tqR0U7cUJrR0k7T2xHNkM7SW1HK0M7S25HWTtJb0dFO0twR2lFO0lxR0U7S3JHMEM7SXNHRTtLdEcyRDtJdUdPO0t2R29CO0l3R007S3hHb0I7SXlHUTtLekc4SztJMEdLO0sxR1E7STJHTTtLM0dRO0k0R0U7SzVHTTtJNkdDO0s3R087NkI4R1E7SzlHRTtJK0dHO0svR2M7SWdIQztLaEhLO0lpSGU7S2pIUTtJa0hFO0tsSEU7SW1IRTtLbkgwQjtJb0hVO0twSDRCO0lxSEU7S3JIYTtJc0hFO3VCQ2E7T0RxQztLdEhFO0l3SG1LLHlCeEg7SXlIRztLekhpQztJMEhDO0sxSDZDO0kySE87SzNIK0M7STRIQztLNUhpQjtJNkhDO0s3SGtEO0k4SEM7SzlIaUI7SStIQztLL0hpQjtJZ0lDO0toSVE7SWlJRSxnRGpJO0lrSUU7S2xJSTtJbUk4QjtLbklRO0lvSTRIO0twSThFO0lxSUU7S3JJdUU7SXNJQztLdEkrQztJdUlFO0t2SStEO0l3SUU7S3hJeUM7SXlJQztLeklvQjtJMElDO0sxSUU7STJJQztLM0lFO0k0SUM7SzVJRTtJNklDO0s3SUs7SThJQztLOUlFO0krSUM7Sy9JTztJZ0pDO0toSkk7SWlKQztLakpFO0lrSkM7S2xKWTtJbUpDO0tuSlM7SW9KQztLcEpFO0lxSkM7S3JKTTtJc0pFO0t0SkU7SXVKRTtLdkpFO0l3SkU7S3hKRTtJeUpDO0t6SkU7STBKQztLMUpFO0kySkM7SzNKRTtJNEpDO0s1SkU7STZKRztLN0pFO0k4SkM7SzlKVTtJK0pDO0svSmtCO0lnS0M7S2hLaUI7SWlLQztLaktFO0lrS0M7S2xLaUQ7SW1LRTtLbktlO0lvS0U7S3BLOEI7SXFLQztLcktRO0lzS0M7S3RLWTtJdUtDO0t2SzhEO0l3S0M7S3hLYztJeUtDOzJCQ2M7V0RNO0t6S007STJLQztLM0tJO0k0S087SzVLRTtJNktDO0s3S0U7SThLQztLOUtFO0krS0M7Sy9LRTtJZ0xDO0toTEU7SWlMQztLakxnQjtJa0xJO0tsTE07SW1MSztLbkxNO0lvTFM7S3BMTTtJcUxrQztLckxFO0lzTEM7S3RMNEM7SXVMQztLdkwwQjtJd0xDO0t4TEk7SXlMQztLekxpQjtJMExDO0sxTGdCO0kyTEU7SzNMUztJNExFO0s1TGlCO0k2TEM7SzdMUTtJOExDO0s5TGlCO0krTEM7Sy9MRTtJZ01NO0toTWlEO0lpTUM7S2pNZTtJa01DO0tsTUU7SW1NQztLbk1JO0lvTUM7S3BNSTtJcU1DO0tyTUU7SXNNQztLdE1FO0l1TUM7S3ZNRTtJd01DO0t4TUU7SXlNSztLek1XO0kwTUU7SzFNUTtJMk1FO0szTUU7Z0I0TUc7TzVNa0I7SXVDcUI7S3ZDRTtJc0NDO0t0Q0U7STZNMEI7SzdNYztJOE1FO0s5TVc7SStNRTtLL01FO0lnTkk7S2hOcUY7SWlORTtLak5RO0lrTkU7S2xORTtJbU5FO0tuTnlGO0lvTkc7S3BObUM7SXFOQztLck5FO0lzTkM7S3ROOEI7SXVORTtLdk5JO0l3TkU7S3hONko7SXlOQztLek5LO0kwTkU7SzFOMEI7STJOQztLM05hO0k0TkU7SzVOVTtJNk5PO0s3TlE7SThORTtLOU5JO0krTkM7Sy9OZTtJZ09FO0toT2lEO0lpT1E7S2pPYTtJa09FO0tsT3FGO0ltT1c7S25PSTtJb09FO0twT3VCO0lxT0U7S3JPUztJc09zQjtLdE9nQjtJdU9FO0t2T007SXdPRTtLeE91QztJeU9FO0t6T0k7STBPRTtLMU9LO0kyT0U7SzNPSztJNE9FO0s1T0s7STZPRTtLN09ZO0k4T0U7SzlPbUQ7SStPRTtLL09vQjtJZ1BFO0toUGlDO0lpUEU7S2pQcUM7SWtQZ0I7S2xQSztJbVBNO0tuUEk7SW9QTztLcFBHO0lxUE07S3JQVztJc1BFO0t0UEc7SXVQRTtLdlBpQjtJd1BFO0t4UEk7SXlQRTtLelBHO0kwUEU7SzFQVTtJMlBFO0szUE87STRQUTtLNVBJO0k2UEU7SzdQTztJOFBFO0s5UE87SStQRTtLL1BPO0lnUUU7S2hRSTtJaVFFO0tqUVE7SWtRRTtLbFFFO0ltUUU7S25RTTtJb1FTO0twUWtDO0lxUUM7S3JRRTtJc1FFO0t0UWlCO0l1UUU7S3ZRSztJd1FDO0t4UXdCO0l5UUM7S3pRSztJMFFDO0sxUUc7STJRRztLM1FTO0k0UUU7SzVReUQ7STZRRTtLN1F5QjtJOFFFO0s5UVc7SStRa0I7Sy9RZ0Q7SWdSQztLaFJJO0lpUkM7S2pSSTtJa1JFO0tsUjRFO0ltUkU7S25SRTtJb1JFO0twUmdFO0lxUkU7S3JSeUc7SXNSRTtLdFJrQjtJdVJHO0t2UlU7SXdSRTtLeFJLO0l5UkU7NENDTztTREc7S3pSUTtJMlJFO0szUmtCO0k0UlE7Y0NZO1NERTtRRUc7U0ZTO1FHQztTSGM7SzVSRztJZ1NDO0toU0U7SWlTQztLalNFO0lrU2tCO0tsU2E7SW1TQztLblNlO0lvU0M7S3BTUztJcVNDO0tyU21EO0lzU0M7S3RTMEI7SXVTQztLdlMrRTtJd1NFO0t4UzJGO0l5U087S3pTaUI7STBTQztLMVMyTTtJT0U7S1BTO0kyU0U7SzNTRTtJNFNDO0s1U0U7STZTQztLN1NnQjtJOFNDO0s5U2E7SStTQztLL1NXO0lnVFE7S2hUaUM7SWlURTtLalRnQztJa1RFO0tsVGU7SW1USztLblRjO0lvVEU7S3BUUztJcVRFO0tyVE07SXNUQztLdFRPO0l1VEM7S3ZUSTtJd1RDO0t4VEk7cUN5VEcsNkJ6VDsyQzBUQyxjMVQ7a0MyVEMsNkIzVDtpQzRUQyxjNVQ7OEI2VEMsYzdUOzJCOFRJO085VGE7OEIrVEU7b0JDRTtTREU7Ty9URTs4RHlUVztPelRtRDtRMFRHO3NET0s7YVBLOzZEUU87YVJLOzZEU087YVRLO2NVUTtlVks7dURXUTthWEs7OERZTzthWks7UzFUNEc7MkQyVE07TzNUaUM7MEQ0VEU7NENXQzs2QkNPO1dERztTWGlCO081VEM7dUQ2VEU7TzdUUTtJeVVhO0t6VVc7STBVRTtLMVVTO0kyVUU7SzNVeUI7STRVQztLNVVZO0k2VUM7SzdVYTtJOFVJO0s5VUs7WStVcUI7Ty9VTztJZ1ZFO0toVlM7SWlWQztLalZHO0lrVkUsa0JsVjtJbVZFO2NDd0c7ZURNO2NFQztlRk07S25WaUM7SXNWTTtLdFZvQjtJdVZDO0t2Vlk7SXdWQztLeFZlOzRCeVZVLGdDelY7MEJ5VmU7T3pWK0I7STBWRztLMVZFO0kyVkU7SzNWUztJNFZFO29CQ2lGO1dEUTtLNVYyQjtJOFZFO0s5Vlk7SStWRTtLL1ZpQjtJZ1dFO0toV0k7SWlXSztNQ0M7T0RjO01FRTtPRmU7TUdFO09Ia0I7TUlFO09KTztNS0U7T0w0QjtNTUU7T05RO01PRTtPUGdCO01RRTtPUjBDO01TRTtPVGlCO01VRTtPVmlCO01XRTtPWHVGO01ZRTtPWm1GO01hRTtPYm9HO01jSztPZCtDO01lRTttQ0NxSztXREU7T2ZJO01pQkU7bUNEdU07V0NFO09qQkk7TWtCRTtPbEJzQjtNbUJFO09uQm1GO01vQkU7T3BCb0M7TXFCSTtPckJ1STtNc0JFO090Qm1CO0tqV0c7SXdYSTtLeFhJO0l5WEM7S3pYMkI7STBYRTtLMVhPO0kyWE87SzNYVztJNFhDO0s1WFU7STZYQztLN1hLO0k4WEM7SzlYRTtJK1hrQjtLL1hFO0lnWUM7S2hZNEI7SWlZQztLallLO0lrWUM7S2xZMkI7SW1ZQztLbllHO0lvWUM7S3BZRTtJcVlDO0tyWVM7SXNZVTtLdFlFO0l1WUM7S3ZZRTtJd1lDO0t4WUU7SXlZQztLellFO0kwWUM7SzFZRTtJMllTO0szWW1EO0k0WXdGO0s1WVU7STZZRTtLN1lZO0k4WUU7SzlZYTtJK1lFO0svWTBDO0lnWkU7S2haNkI7SWlaRTtLalpTO0lrWkU7S2xaK0M7SW1aRTtLblpnSDtJb1pFO0twWjJFO0lxWkU7S3JaNkI7SXNaRTtLdFpzRDtJdVpDO0t2WmdCO0l3WkM7S3haVztJeVpDO0t6WnVDO0kwWkU7SzFaa0I7STJaRTtLM1p3RTsyQzRaTTtPNVpNO0k2Wkc7SzdaMkI7SThaRTtLOVpnQjtJK1pFO0svWkc7SWdhRTtLaGErQjtJaWFFO0tqYUc7SWthRTtLbGEwTDtJbWFFO0tuYWtEO0lvYUU7S3Bhb0U7SXFhRTtLcmFtRjtJc2FFO0t0YXFCO0l1YUU7S3ZhWTtJd2FFOzhCQ0M7T0RPO0t4YUc7STBhRTtLMWFVO0kyYUU7SzNhTTtJNGFFO0s1YTBCO0k2YUU7SzdhVTtJOGFFO0s5YUU7SSthRTtLL2FFO0lnYkU7S2hiNkI7SWliRTtLamJJO0lrYkU7S2xiVTtJbWJFO0tuYkc7SW9iRTtLcGJVO0lxYkU7S3JiMEI7SXNiRTtLdGJjO0l1YkU7S3ZiRTtJd2JFO0t4YkU7SXliRTtLemJFO0kwYkU7SzFiUTtJMmJFO0szYkU7STRiRTtlNWJLO1M0YkU7ZTViaUI7UzRiRTtLNWJFO0k2YkU7SzdieUI7SThiRTtLOWJtQjtJK2JFO0svYkk7SWdjSTtLaGNLO0lpY0U7S2pjZTtJa2NFO0tsY2E7SW1jRTtLbmN1QjtJb2NFO0twY0c7SXFjRTtLcmNLO0lzY0U7S3RjVztJdWNFO0t2Y3VCO0l3Y0U7S3hjNkM7SXljRTtLemM2RDtJMGNFO0sxY2E7STJjRTtLM2NXO0k0Y0U7SzVjVztJNmNFO0s3Y21CO0k4Y0U7SzljSTtJK2NFO0svYytCO0lnZEU7S2hkb0Y7SWlkRTtLamRNO0lrZEU7S2xkaUI7SW1kRTtLbmRpQjtxQ29kK0I7T3BkTztrQ3FkRTtPcmRPO3FCc2RHO1N0ZEU7cUJ1ZEU7U3ZkSztvQndkQztTeGRJO21CeWRDO1N6ZEs7NkIwZEM7UzFkSzs0QjJkQztTM2RLO3lCNGRDO1M1ZEs7aUI2ZEM7UzdkYTtvQjhkQztTOWRZO2dCK2RDO1MvZEk7a0JnZUM7U2hlWTt1QmllQztTamVJOzBCa2VDO1NsZUk7dUJtZUM7U25lSTs4Qm9lQztTcGVRO2VxZUM7U3JlSTtxQnNlSTtTdGVFO3FCdWVFO1N2ZUk7b0J3ZUM7U3hlSTttQnllQztTemVJOzZCMGVDO1MxZUk7NEIyZUM7UzNlSTt5QjRlQztTNWVJO2lCNmVDO1M3ZVk7b0I4ZUM7UzllWTtnQitlQztTL2VJO2tCZ2ZDO1NoZlk7dUJpZkM7U2pmSTswQmtmQztTbGZJO3VCbWZDO1NuZkk7OEJvZkM7U3BmUTtlcWZDO1NyZkk7cUJzZkk7U3RmRTtxQnVmRTtTdmZJO29Cd2ZDO1N4Zkk7bUJ5ZkM7U3pmSTs2QjBmQztTMWZJOzRCMmZDO1MzZkk7eUI0ZkM7UzVmSTtpQjZmQztTN2ZZO29COGZDO1M5Zlk7Z0IrZkM7Uy9mSTtrQmdnQkM7U2hnQlk7dUJpZ0JDO1NqZ0JJOzBCa2dCQztTbGdCSTt1Qm1nQkM7U25nQkk7OEJvZ0JDO1NwZ0JRO2VxZ0JDO1NyZ0JJO3FCc2dCSTtTdGdCRTtxQnVnQkU7U3ZnQkk7b0J3Z0JDO1N4Z0JJO21CeWdCQztTemdCSTs2QjBnQkM7UzFnQkk7NEIyZ0JDO1MzZ0JJO3lCNGdCQztTNWdCSTtpQjZnQkM7UzdnQlk7b0I4Z0JDO1M5Z0JZO2dCK2dCQztTL2dCSTtrQmdoQkM7U2hoQlk7dUJpaEJDO1NqaEJJOzBCa2hCQztTbGhCSTt1Qm1oQkM7U25oQkk7OEJvaEJDO1NwaEJRO2VxaEJDO1NyaEJJO3FCc2hCSTtTdGhCRzthdWhCQztTdmhCRztxQndoQkM7U3hoQks7b0J5aEJDO1N6aEJLO21CMGhCQztTMWhCSzs2QjJoQkM7UzNoQks7NEI0aEJDO1M1aEJLO3lCNmhCQztTN2hCSztpQjhoQkM7UzloQmE7b0IraEJDO1MvaEJhO2dCZ2lCQztTaGlCSztrQmlpQkM7U2ppQmE7dUJraUJDO1NsaUJLOzBCbWlCQztTbmlCSzt1Qm9pQkM7U3BpQks7OEJxaUJDO1NyaUJTO2VzaUJDO1N0aUJLO3FCdWlCSTtTdmlCRzthd2lCQztTeGlCRztxQnlpQkM7U3ppQks7b0IwaUJDO1MxaUJLO21CMmlCQztTM2lCSzs2QjRpQkM7UzVpQks7NEI2aUJDO1M3aUJLO3lCOGlCQztTOWlCSztpQitpQkM7Uy9pQmE7b0JnakJDO1NoakJhO2dCaWpCQztTampCSztrQmtqQkM7U2xqQmE7dUJtakJDO1NuakJLOzBCb2pCQztTcGpCSzt1QnFqQkM7U3JqQks7OEJzakJDO1N0akJTO2V1akJDO1N2akJLO3FCd2pCSTtTeGpCRztheWpCQztTempCRztxQjBqQkM7UzFqQks7b0IyakJDO1MzakJLO21CNGpCQztTNWpCSzs2QjZqQkM7UzdqQks7NEI4akJDO1M5akJLO3lCK2pCQztTL2pCSztpQmdrQkM7U2hrQmE7b0Jpa0JDO1Nqa0JhO2dCa2tCQztTbGtCSztrQm1rQkM7U25rQmE7dUJva0JDO1Nwa0JLOzBCcWtCQztTcmtCSzt1QnNrQkM7U3RrQks7OEJ1a0JDO1N2a0JTO2V3a0JDO1N4a0JLO0l5a0I2QjtLemtCRTtJMGtCRTtLMWtCSTtJMmtCRTtLM2tCSztJNGtCRTtLNWtCSztJNmtCRTtLN2tCRTtJOGtCRTtLOWtCRTtJK2tCRTtLL2tCTTtJZ2xCRTtLaGxCRTtJaWxCRTtLamxCVztJa2xCRTtLbGxCd0I7SW1sQkU7S25sQm1DO0lvbEJFO0twbEJFO0lxbEJFO0tybEJFO0lzbEJFO0t0bEJXO0l1bEJFO0t2bEJnQjtld2xCOEI7U3hsQlM7SXlsQks7S3psQm1CO0kwbEJFO0sxbEJnQjtJMmxCRTtLM2xCb0M7dUI0bEJLO081bEJvQjsyQjZsQkM7TzdsQnFCOzBCOGxCRTtPOWxCb0I7SStsQkc7Sy9sQnFEO0lnbUJFO0tobUI4TjtJaW1CRTtLam1CUztJa21CRTtLbG1CMkw7SW1tQkU7S25tQjJCO0lvbUJFO0twbUJ1QztJcW1CRTtLcm1CbUY7SXNtQkU7S3RtQmdKO0l1bUJFO0t2bUJvTDtJd21CRTtLeG1CUztJeW1CQztLem1CTztJMG1CVztLMW1CWTtJMm1CRTttQkN5RTtTREU7SzNtQkU7STZtQkU7d0JDVztPREc7SzdtQkc7SSttQkU7eUJDUTtTREU7MEJERTtTQ007MEJFTztTRm9DO0svbUJJO0lrbkJFO0tsbkJzQjtJbW5CRTtLbm5COEc7SW9uQkU7S3BuQnlQO0lxbkJpQztLcm5COEI7SXNuQkU7S3RuQjhCO0l1bkJFO0t2bkIyRDtJd25CRTtLeG5CbUk7SXluQkU7S3puQjRHO0kwbkJFO0sxbkJzSDtJMm5CRTtLM25Ca0I7STJXRTtLM1dJO0k0bkJFO0s1bkJJO0k2bkJFO0s3bkJpQjtJOG5CRTtLOW5CVztJK25CRTtLL25CZ0U7SWdvQkU7S2hvQmlDO0lpb0JFO0tqb0I2SDtJa29CRTtLbG9Cd0Y7SW1vQkU7S25vQmU7SW9vQkU7S3BvQmtDO0lxb0JFO0tyb0JlO0lzb0JFO0t0b0JJO0l1b0JFO0t2b0JvSDtJd29CRTtLeG9Ca0M7SXlvQkU7S3pvQmtLO0kwb0JFO0sxb0JtRjtJMm9CUTtLM29CSztJNG9CRTtLNW9CTztJNm9CRTtLN29Cb0I7SThvQkU7SzlvQm9CO0krb0JFO0svb0J5STtJZ3BCRTtLaHBCaUI7SWlwQkU7S2pwQjREO0lrcEJFO0tscEJRO0ltcEJFO0tucEJJO0lvcEJFO0twcEJxQztJcXBCRTtLcnBCb0Y7SXNwQkU7S3RwQjhCO0l1cEJFO0t2cEJxQztJd3BCRTtLeHBCdU47SXlwQkU7S3pwQmE7STBwQkU7SzFwQjhDO0kycEJFO0szcEJzQjtJNHBCRTtLNXBCd0Q7STZwQkU7SzdwQjBCO0k4cEJFO0s5cEJ5QjtJK3BCRTtLL3BCMkM7SWdxQkU7S2hxQjJCO0lpcUJRO0tqcUJrSTtJa3FCRTtLbHFCcUI7SW1xQkk7S25xQjJEO0lvcUJJO0twcUIwRDtJcXFCRTtLcnFCRTtJc3FCRTtLdHFCYTtJdXFCRTtLdnFCNkI7SXdxQkU7S3hxQnVEO0l5cUJFO0t6cUJVO0kwcUJFO0sxcUJpTTtJMnFCRTtLM3FCMlE7STRxQnFCO0s1cUJVO0k2cUJDO0s3cUJJO0k4cUJDO0s5cUJJO0krcUJDO0svcUJzQjtJZ3JCQztLaHJCYztJaXJCQztLanJCMEM7SWtyQkM7S2xyQkk7SW1yQkU7S25yQjRJO0lvckJDO0twckJvQjtJcXJCQztLcnJCZTtJc3JCQztLdHJCTTtJdXJCRTtLdnJCaUM7SXdyQkk7S3hyQlU7SXlyQkUsbUR6ckI7STByQkU7d0JDRTtPREU7SzFyQkM7STRyQkM7SzVyQkk7STZyQk87SzdyQkU7SThyQkU7SzlyQkU7SStyQks7Sy9yQjJCO0lnc0JFO0toc0J3RTtJaXNCRTtLanNCNkU7SWtzQkU7S2xzQnFCO0ltc0JFO0tuc0J3RTtJb3NCUztLcHNCZ0I7SXFzQkU7S3JzQjBCO0lzc0JFO0t0c0JtQjtJdXNCRTtLdnNCb0U7SXdzQkU7S3hzQjhHO0l5c0JFO0t6c0JnRjtJMHNCRTtLMXNCNGtCO0kyc0JFO0szc0IwSDtJNHNCRTtLNXNCZ0Q7STZzQmlCO0s3c0JLO0k4c0JFO29DQ087U0RFO0s5c0JHO0lndEJFO0todEJjO0lpdEJFO0tqdEJVO0lrdEJFO0tsdEJNO0ltdEJFO0tudEI0RDtJb3RCRTtLcHRCTTtJcXRCRTtLcnRCTztJc3RCRTtLdHRCZ0I7SXV0QkU7S3Z0QnNCO0l3dEJFO0t4dEJpSDtJeXRCRTtLenRCd0M7STB0QkU7SzF0QmdGO0kydEJFO0szdEJtRDtJNHRCRTtLNXRCcUI7STZ0QkU7Szd0Qm1IO0k4dEJFO0s5dEI2QztJK3RCRTtLL3RCVTtJZ3VCRTtLaHVCZ0U7SWl1QkU7S2p1QmtMO0lrdUJFO0tsdUIyQztJbXVCRTtLbnVCd0I7SW91QkU7S3B1QmlDO0lxdUJFO0tydUJFO0lzdUJFO0t0dUJJO0l1dUJFO0t2dUJPO0l3dUJFO0t4dUJnQjtJeXVCRTtLenVCNEw7STB1QkUsZ0QxdUI7STJ1QkU7SzN1Qm1DO0k0dUJFO0s1dUJxQjtJNnVCQztLN3VCb0I7STh1QkU7d0JDSztPRHNCO0s5dUJDO0lndkJDO0todkJRO0lpdkJFO0tqdkI4QjtJa3ZCRTtLbHZCK1Q7SW12QkU7S252QnNCO0lvdkJFO0twdkJPO0lxdkJFO0tydkJlO0lzdkJFO0t0dkIwRTtJdXZCRTtLdnZCUTtJd3ZCRTtLeHZCeUk7SXl2QkU7S3p2QjJCO0kwdkJFO0sxdkJrQjtJMnZCRTtLM3ZCUztJNHZCRTtLNXZCbUI7STZ2QkU7Szd2QjhGO0k4dkJFO0s5dkJnQjtJK3ZCRTtLL3ZCMkY7SWd3QkU7S2h3Qkk7SWl3Qlk7S2p3QkU7SWt3QkU7S2x3QlM7SW13QkU7S253QndEO0lvd0JFO0twd0I0QjtJcXdCRTtLcndCb0I7SXN3QkU7S3R3QmtDO0l1d0JFO0t2d0JnRDtJd3dCRTtLeHdCZ0M7SXl3QkU7S3p3QmlDO0kwd0JFO0sxd0J5QjtJMndCRTtLM3dCeUI7STR3QkU7SzV3QmdCO0k2d0JFO0s3d0JnQztJOHdCRTtLOXdCa0I7SSt3QkU7Sy93QmdDO0lneEJFO0toeEJvQjtJaXhCWTtLanhCWTtJa3hCQztLbHhCb0I7SW14QjhGO0tueEJFO0lveEJFO0tweEJFO0lxeEJrQjtLcnhCRTtJc3hCQztLdHhCRTtJdXhCQztLdnhCRTtJd3hCQztLeHhCNkQ7SXl4QkU7S3p4Qlk7STB4QkU7SzF4Qm9DO0kyeEJDO0szeEJFO0k0eEJDO0s1eEJpRztJNnhCQztLN3hCSTtJOHhCRztLOXhCdUg7SSt4QkU7Sy94QndFO0lneUJFO0toeUJVO0lpeUJFO0tqeUJ1RjtJa3lCRTtLbHlCcUM7SW15QkU7S255QjREO0lveUJFO0tweUJjO0lxeUJHO0tyeUI0RTtJc3lCQztLdHlCRTtJdXlCQztLdnlCa0I7SXd5Qk07S3h5QnVDO0l5eUJLO0t6eUJFO0kweUJDO0sxeUJFO0kyeUJFO0szeUJzQjtJNHlCRTtLNXlCbUQ7STZ5QkU7Szd5Qks7STh5QkU7Szl5QmlGO0kreUJFO0sveUJvRDtJZ3pCRTtLaHpCWTtJaXpCRTtLanpCRTtJa3pCRTtLbHpCRTtJbXpCQztLbnpCSztJb3pCQztLcHpCSTtJcXpCQztLcnpCd0I7SXN6QkM7S3R6QlU7SXV6Qkc7S3Z6Qkk7SXd6Qkk7S3h6QjZHO0l5ekJJO0t6ekJLO0kwekJFO21DQ21FO2lCRGE7SzF6QmdLO0k0ekJHO0s1ekJNO0k2ekJFO0s3ekIyQjtJOHpCRTtLOXpCNEg7SSt6QkU7Sy96QnFEO0lnMEJFO0toMEJjO0lpMEJFO0tqMEIwRDtJazBCRTtLbDBCaUU7SW0wQkU7S24wQnNCO0lvMEJFOzJDQ2tGO1dETTtLcDBCbUw7SXMwQkU7ZUNTO1dEUTtLdDBCSTtJdzBCRTtLeDBCd0I7SXkwQkM7MkNKTTtXSUc7S3owQkc7STAwQkU7SzEwQnVFO0kyMEJFO0szMEJLO0k0MEJDO0s1MEJNO0k2MEJFO0s3MEJLO0k4MEJJO0s5MEJTO0krMEJFO0svMEIwRDtJZzFCQztLaDFCNEM7SWkxQkU7S2oxQjZDO0lrMUJFO0tsMUJpQjtJbTFCRTtLbjFCUztJbzFCQztLcDFCd0M7SXExQkM7S3IxQjJCO0lzMUJFO0t0MUJLO0l1MUJFO0t2MUJNO0l3MUJFO0t4MUIwQjtJeTFCRTtLejFCeUI7STAxQkc7SzExQjZEO2tCMjFCTTtPMzFCbUU7STQxQlU7SzUxQmlEO0k2MUJFO21DQ0k7V0RFO0s3MUJLO0krMUJHO0svMUJhO0lnMkJFO0toMkJHO0lpMkJFO0tqMkIyRDtJazJCRTtLbDJCc0I7SW0yQkU7S24yQkk7NEJvMkJPO0twMkJJO0lxMkJDO0tyMkJlO0lzMkJDO0t0MkJHO0l1MkJDO0t2MkJ3QztJdzJCQztLeDJCb0Y7SXkyQkM7S3oyQmlCOzBCMDJCQztrQkNVO1NETTtLMTJCRTt1QjQyQkM7a0JEVTtTQ0U7SzUyQkU7STYyQkU7SzcyQnVGO3NDODJCRTt1QkNJO1dERTtLOTJCUztJZzNCRTtLaDNCd0Q7SWkzQkU7S2ozQm9DO0lrM0JFO0tsM0JzQztJbTNCb0I7S24zQm1FO0lvM0JjO0twM0JHO0lxM0JFO0tyM0JHO0lzM0JFO0t0M0JNO0l1M0JDO0t2M0JnQjtJdzNCRTtLeDNCb0c7SXkzQkU7S3ozQitEO0kwM0JDO0sxM0J5QjtJMjNCQztLMzNCMko7STQzQkM7SzUzQndCO0k2M0JDO0s3M0JJO0k4M0JFO0s5M0JzQjtJKzNCRTtLLzNCSztJZzRCQztLaDRCSztJaTRCQztnQkNXO1NERTtnQkVDO1NGRTtLajRCSTtJbzRCQztLcDRCSTtJcTRCQztLcjRCVztJczRCRTtLdDRCOEM7SXU0QkU7S3Y0QitEO0l3NEJFO0t4NEIwQztJeTRCSTtLejRCc0I7STA0Qlk7SzE0QmlCO0kyNEJFO0szNEJvRTtJNDRCRTtLNTRCeUI7STY0QkM7Szc0QjREO0k4NEJDO0s5NEJlOzBCKzRCRTtLLzRCRTtJZzVCRTtLaDVCRTs0Qmk1QkU7S2o1QkU7SWs1QkU7S2w1QkU7K0JtNUJZO09uNUJnQjsyQm81QkU7T3A1QkU7K0JxNUJFO09yNUIwQjsyQnM1QkU7T3Q1QmtCOzRCdTVCRTtPdjVCVTt3Qnc1QkU7T3g1QkU7cUJ5NUJFO096NUJXOzBCMDVCRTtPMTVCbUI7b0MyNUJFO08zNUJtQjtvQzQ1QkU7TzU1Qm1CO3NCNjVCRTtPNzVCWTtnQzg1QkU7Tzk1Qlk7Z0MrNUJFO08vNUJnQjt1Qmc2QkU7T2g2Qk07d0JpNkJFO09qNkJFOzJCazZCRTtPbDZCRTtJbTZCRztLbjZCUTtJbzZCRTtLcDZCRTtJcTZCRTtLcjZCRTtJczZCRTtLdDZCZ0M7SXU2Qkk7S3Y2QkU7SXc2Qkc7S3g2QmtEO0l5NkJDO0t6NkJ1RTtJMDZCQztLMTZCNEI7STI2QkM7SzM2QjJCO0k0NkJDO0s1NkJPO0k2NkJJO0s3NkJzQztJODZCUTtnQ0NDOzRCQ0c7dUJDRztlRGdCO1dERTtPREU7Szk2QkM7SWs3QkU7S2w3Qm1CO0ltN0JFO0tuN0JRO0lvN0JFO0twN0I0QjtJcTdCRTtLcjdCSTtJczdCRTtLdDdCVTtJdTdCRTtLdjdCTztJdzdCRTtLeDdCSztJeTdCRTtZQ2tCO2dCQ2dDO2lCRGU7YURFO1lHTzthSGdCO0t6N0JVO0k2N0JFO0s3N0JJO0k4N0JFO0s5N0JxQjtJKzdCRTtLLzdCRTtJZzhCRTswQ0NLO1NERTtLaDhCRTtJazhCRTtLbDhCTTtHRDBDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRE9NUmVjdCIsImdldF9feCIsInNldF9feCIsImdldF9feSIsInNldF9feSIsImdldF9fd2lkdGgiLCJzZXRfX3dpZHRoIiwiZ2V0X19oZWlnaHQiLCJzZXRfX2hlaWdodCIsImZyb21SZWN0Il0sIm1hcHBpbmdzIjoiQUFBO2VDMEI7RUNJO0dERTtFRUU7R0ZFO0VHSztHSEU7RUlFO0dKRTtFS0s7R0xFO0VNRTtHTkU7RU9LO0dQRTtFUUU7R1JFO0VTSztHVE07Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY2FzdFRvTnVtYmVyIiwiRE9NUmVjdFJlYWRPbmx5IiwiY29uc3RydWN0b3IiLCJnZXRfX3giLCJnZXRfX3kiLCJnZXRfX3dpZHRoIiwiZ2V0X19oZWlnaHQiLCJnZXRfX3RvcCIsImdldF9fcmlnaHQiLCJnZXRfX2JvdHRvbSIsImdldF9fbGVmdCIsInRvSlNPTiIsImZyb21SZWN0IiwiX19nZXRJbnRlcm5hbFgiLCJfX2dldEludGVybmFsWSIsIl9fZ2V0SW50ZXJuYWxXaWR0aCIsIl9fZ2V0SW50ZXJuYWxIZWlnaHQiLCJfX3NldEludGVybmFsWCIsIl9fc2V0SW50ZXJuYWxZIiwiX19zZXRJbnRlcm5hbFdpZHRoIiwiX19zZXRJbnRlcm5hbEhlaWdodCJdLCJtYXBwaW5ncyI6IkFBQTtBQ3lCO0NERTtlRU87RUNNO0dESztFRUs7R0ZFO0VHSztHSEU7RUlLO0dKRTtFS0s7R0xFO0VNSztHTlM7RU9LO0dQUztFUUs7R1JTO0VTSztHVFM7RVVFO0dWWTtFV0s7R1hNO0VZRTtHWkU7RWFFO0diRTtFY0U7R2RFO0VlRTtHZkU7RWdCRTtHaEJFO0VpQkU7R2pCRTtFa0JFO0dsQkU7RW1CRTtHbkJFO0NGQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdsb2JhbC5wZXJmb3JtYW5jZS5ub3ciXSwibWFwcGluZ3MiOiJBQUE7V0NzQjtPREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCI8YW5vbnltb3VzPiIsIlBlcmZvcm1hbmNlTWFyayIsIlBlcmZvcm1hbmNlTWFyayNjb25zdHJ1Y3RvciIsIlBlcmZvcm1hbmNlTWVhc3VyZSIsIlBlcmZvcm1hbmNlTWVhc3VyZSNjb25zdHJ1Y3RvciIsIndhcm5Ob05hdGl2ZVBlcmZvcm1hbmNlIiwiUGVyZm9ybWFuY2UiLCJnZXRfX21lbW9yeSIsImdldF9fcm5TdGFydHVwVGltaW5nIiwibWFyayIsImNsZWFyTWFya3MiLCJtZWFzdXJlIiwiY2xlYXJNZWFzdXJlcyIsIm5vdyIsImdldEVudHJpZXMiLCJnZXRFbnRyaWVzQnlUeXBlIiwiZ2V0RW50cmllc0J5TmFtZSJdLCJtYXBwaW5ncyI6IkFBQTtJQzJDLGdCRDtPRWE7RUNHO0dEVztDRkM7T0lXO0VDRztHRFc7Q0pDO0FNRTtDTks7ZU9PO0VDSTtHRHlCO0VFRztHRm9CO0VHRTtHSGE7RUlFO0dKVTtFS0U7R0xtRTtFTUU7R05VO0VPTTtHUEU7RVFPO0dSTTtFU0U7R1RpQjtFVUU7R1Z3QjtDUEMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRDYWNoZWRFdmVudENvdW50cyIsImdsb2JhbC5xdWV1ZU1pY3JvdGFzayRhcmd1bWVudF8wIiwiRXZlbnRDb3VudHMiLCJnZXRfX3NpemUiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImdldCIsImhhcyIsImtleXMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiJBQUE7QUNxQjt3QkNhO0dETTtDREU7ZUdNO0VDRTtHREU7RUVFO0dGRTtFR0U7R0hFO0VJRTtHSkU7RUtFO0dMRTtFTUU7R05FO0VPRTtHUEU7Q0hDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUGVyZm9ybWFuY2VPYnNlcnZlckVudHJ5TGlzdCIsIlBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3QjY29uc3RydWN0b3IiLCJQZXJmb3JtYW5jZU9ic2VydmVyRW50cnlMaXN0I2dldEVudHJpZXMiLCJQZXJmb3JtYW5jZU9ic2VydmVyRW50cnlMaXN0I2dldEVudHJpZXNCeVR5cGUiLCJfZW50cmllcy5maWx0ZXIkYXJndW1lbnRfMCIsIlBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3QjZ2V0RW50cmllc0J5TmFtZSIsIm9uUGVyZm9ybWFuY2VFbnRyeSIsImVudHJpZXMuZmlsdGVyJGFyZ3VtZW50XzAiLCJ3YXJuTm9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyIiwiYXBwbHlEdXJhdGlvblRocmVzaG9sZHMiLCJBcnJheS5mcm9tLm1hcCRhcmd1bWVudF8wIiwiQXJyYXkuZnJvbS5tYXAucmVkdWNlJGFyZ3VtZW50XzAiLCJnZXRTdXBwb3J0ZWRQZXJmb3JtYW5jZUVudHJ5VHlwZXMiLCJQZXJmb3JtYW5jZU9ic2VydmVyIiwiY29uc3RydWN0b3IiLCJvYnNlcnZlIiwib3B0aW9ucy5lbnRyeVR5cGVzLm1hcCRhcmd1bWVudF8wIiwiZGlzY29ubmVjdCIsIl92YWxpZGF0ZU9ic2VydmVPcHRpb25zIiwidW5pb24iLCJkaWZmZXJlbmNlIiwiZmlsdGVyJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7T0N3QjtFQ0c7R0RFO0VFRTtHRkU7RUdFO2dDQ0MsaUNEO0dIQztFS0U7a0NESyw0QkM7UURHLHdEQztHTEc7Q0RDOzJCTzhCO29FQ1k7S0RNO0NQTztPU0U7Q1RLO0FVRTtTQ0ksMkJEO01FRSwrREY7Q1ZVO0FhRTtDYmE7ZWNzQjtFQ0k7R0RFO0VFRTsrQkNhLG1CRDtHRm9EO0VJRTtHSmlDO0VLRTtHTGdDO0NkSTtBb0JHO0NwQmE7QXFCRTsrQkNDLGNEO0NyQkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQZXJmb3JtYW5jZUV2ZW50VGltaW5nIiwiY29uc3RydWN0b3IiLCJ0b0pTT04iXSwibWFwcGluZ3MiOiJBQUE7ZUNzQjtFQ0s7R0RpQjtFRUU7R0ZPO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBlcmZvcm1hbmNlRW50cnkiLCJjb25zdHJ1Y3RvciIsInRvSlNPTiJdLCJtYXBwaW5ncyI6IkFBQTtPQzBCO0VDTTtHRFU7RUVFO0dGTztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyYXdUb1BlcmZvcm1hbmNlRW50cnkiLCJyYXdUb1BlcmZvcm1hbmNlRW50cnlUeXBlIiwicGVyZm9ybWFuY2VFbnRyeVR5cGVUb1JhdyJdLCJtYXBwaW5ncyI6IkFBQTtPQzBCO0NEb0I7T0VFO0NGbUI7T0dFO0NIaUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJNZW1vcnlJbmZvIiwiY29uc3RydWN0b3IiLCJnZXRfX2pzSGVhcFNpemVMaW1pdCIsImdldF9fdG90YWxKU0hlYXBTaXplIiwiZ2V0X191c2VkSlNIZWFwU2l6ZSJdLCJtYXBwaW5ncyI6IkFBQTtlQ29CO0VDSztHRE07RUVLO0dGRTtFR0s7R0hFO0VJSztHSkU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUmVhY3ROYXRpdmVTdGFydHVwVGltaW5nIiwiY29uc3RydWN0b3IiLCJnZXRfX3N0YXJ0VGltZSIsImdldF9fZW5kVGltZSIsImdldF9faW5pdGlhbGl6ZVJ1bnRpbWVTdGFydCIsImdldF9faW5pdGlhbGl6ZVJ1bnRpbWVFbmQiLCJnZXRfX2V4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludFN0YXJ0IiwiZ2V0X19leGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRFbmQiXSwibWFwcGluZ3MiOiJBQUE7ZUN3QjtFQ1k7R0RXO0VFSztHRkU7RUdLO0dIRTtFSUs7R0pFO0VLSztHTEU7RU1LO0dORTtFT0s7R1BFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImhhbmRsZUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBO3NCQ3FCO0dETyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlN5bnRoZXRpY0Vycm9yIiwidW5zdGFibGVfc2V0RXhjZXB0aW9uRGVjb3JhdG9yIiwicHJlcHJvY2Vzc0V4Y2VwdGlvbiIsInJlcG9ydEV4Y2VwdGlvbiIsImhhbmRsZUV4Y2VwdGlvbiIsInJlYWN0Q29uc29sZUVycm9ySGFuZGxlciIsImFyZ3MubWFwJGFyZ3VtZW50XzAiLCJpbnN0YWxsQ29uc29sZUVycm9yUmVwb3J0ZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNlO0NERTtBRWlCO0NGSTtBR0U7Q0hZO0FJTTtDSm1FO0FLZ0I7Q0xtQjtBTUk7V0NxRCwyREQ7Q05jO0FRTTtDUmEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJfd3JhcE5hdGl2ZVN1cGVyIiwiV3JhcHBlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ0k7SUNXO0tERTtDRFkifV0sW3sibmFtZXMiOlsiX2lzTmF0aXZlRnVuY3Rpb24iLCI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQTtDQ0UifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJfY29uc3RydWN0Il0sIm1hcHBpbmdzIjoiQUFBO0FDRTtDRGMifV0sW3sibmFtZXMiOlsiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QuY29uc3RydWN0JGFyZ3VtZW50XzIiLCI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQTtrRUNLLGNEO0NFSyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNvbnZlcnRIZXJtZXNTdGFjayIsInBhcnNlRXJyb3JTdGFjayIsInN0YWNrdHJhY2VQYXJzZXIucGFyc2UubWFwJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUNpQjtDRHFCO0FFRTs2Q0NVO1FERztDRkcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJwYXJzZSIsImxpbmVzLnJlZHVjZSRhcmd1bWVudF8wIiwicGFyc2VDaHJvbWUiLCJwYXJzZVdpbmpzIiwicGFyc2VHZWNrbyIsInBhcnNlSlNDIiwicGFyc2VOb2RlIl0sIm1hcHBpbmdzIjoiQUFBO0FDVTtzQkNFO0dEUTtDREM7QUdJO0NINkI7QUlJO0NKYztBS0s7Q0x3QjtBTUk7Q05jO0FPSTtDUGMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJpc0ludGVybmFsQnl0ZWNvZGVTb3VyY2VVcmwiLCJwYXJzZUxpbmUiLCJwYXJzZUhlcm1lc1N0YWNrIl0sIm1hcHBpbmdzIjoiQUFBO0FDMkU7Q0RHO0FFRTtDRnNDO2lCR0U7Q0hvQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImluc3RhbGwiLCJjb25zb2xlLmVycm9yIiwiY29uc29sZS53YXJuIiwiUkNUTG9nLnNldFdhcm5pbmdIYW5kbGVyJGFyZ3VtZW50XzAiLCJ1bmluc3RhbGwiLCJpc0luc3RhbGxlZCIsImlnbm9yZUxvZ3MiLCJpZ25vcmVBbGxMb2dzIiwiY2xlYXJBbGxMb2dzIiwiYWRkTG9nIiwiYWRkRXhjZXB0aW9uIiwiaXNSQ1RMb2dBZHZpY2VXYXJuaW5nIiwiaXNXYXJuaW5nTW9kdWxlV2FybmluZyIsInJlZ2lzdGVyV2FybmluZyIsInJlZ2lzdGVyRXJyb3IiXSwibWFwcGluZ3MiOiJBQUE7SUM4Qzt3QkNtQjtTREU7dUJFRTtTRkU7K0JHVTtPSEU7S0RDO0lLRTtLTGE7SU1FO0tORTtJT0U7S1BFO0lRRTtLUkU7SVNFO0tURTtJVUU7S1ZJO0lXRTtLWEk7Z0NZRztHWkk7aUNhRTtHYkU7MEJjRTtHZDBCO3dCZUk7R2ZxRDtJQ0c7S0RFO0lLRTtLTEU7SU1FO0tORTtJT0U7S1BFO0lRRTtLUkU7SVNFO0tURTtJVUU7S1ZFO0lXRTtLWEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJsb2dJZk5vTmF0aXZlSG9vayIsImxvZ1RvQ29uc29sZSIsInNldFdhcm5pbmdIYW5kbGVyIl0sIm1hcHBpbmdzIjoiQUFBO0VDMEI7R0RVO0VFRztHRlE7RUdFO0dIRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIndhcm5pbmdGaWx0ZXIiLCJnZXROZXh0U3RhdGUiLCJyZXBvcnRMb2dCb3hFcnJvciIsImlzTG9nQm94RXJyb3JNZXNzYWdlIiwiaXNNZXNzYWdlSWdub3JlZCIsImhhbmRsZVVwZGF0ZSIsInNldEltbWVkaWF0ZSRhcmd1bWVudF8wIiwib2JzZXJ2ZXJzLmZvckVhY2gkYXJndW1lbnRfMCIsImFwcGVuZE5ld0xvZyIsImFkZFBlbmRpbmdMb2ciLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJuZXdMb2cuc3ltYm9saWNhdGUkYXJndW1lbnRfMCIsImFkZExvZyIsImFkZEV4Y2VwdGlvbiIsInN5bWJvbGljYXRlTG9nTm93IiwibG9nLnN5bWJvbGljYXRlJGFyZ3VtZW50XzAiLCJyZXRyeVN5bWJvbGljYXRlTG9nTm93IiwibG9nLnJldHJ5U3ltYm9saWNhdGUkYXJndW1lbnRfMCIsInN5bWJvbGljYXRlTG9nTGF6eSIsImNsZWFyIiwic2V0U2VsZWN0ZWRMb2ciLCJjbGVhcldhcm5pbmdzIiwiQXJyYXkuZnJvbS5maWx0ZXIkYXJndW1lbnRfMCIsImNsZWFyRXJyb3JzIiwiZGlzbWlzcyIsInNldFdhcm5pbmdGaWx0ZXIiLCJzZXRBcHBJbmZvIiwiZ2V0QXBwSW5mbyIsImNoZWNrV2FybmluZ0ZpbHRlciIsImdldElnbm9yZVBhdHRlcm5zIiwiYWRkSWdub3JlUGF0dGVybnMiLCJwYXR0ZXJucy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJzZXREaXNhYmxlZCIsImlzRGlzYWJsZWQiLCJvYnNlcnZlIiwidW5zdWJzY3JpYmUiLCJ3aXRoU3Vic2NyaXB0aW9uIiwiTG9nQm94U3RhdGVTdWJzY3JpcHRpb24iLCJMb2dCb3hTdGF0ZVN1YnNjcmlwdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJMb2dCb3hTdGF0ZVN1YnNjcmlwdGlvbiNjb21wb25lbnREaWRDYXRjaCIsIkxvZ0JveFN0YXRlU3Vic2NyaXB0aW9uI3JlbmRlciIsIkxvZ0JveFN0YXRlU3Vic2NyaXB0aW9uI2NvbXBvbmVudERpZE1vdW50Iiwib2JzZXJ2ZSRhcmd1bWVudF8wIiwiTG9nQm94U3RhdGVTdWJzY3JpcHRpb24jY29tcG9uZW50V2lsbFVubW91bnQiLCJMb2dCb3hTdGF0ZVN1YnNjcmlwdGlvbiNfaGFuZGxlRGlzbWlzcyIsIkxvZ0JveFN0YXRlU3Vic2NyaXB0aW9uI19oYW5kbGVNaW5pbWl6ZSIsIkxvZ0JveFN0YXRlU3Vic2NyaXB0aW9uI19oYW5kbGVTZXRTZWxlY3RlZExvZyJdLCJtYXBwaW5ncyI6IkFBQTttQ0MyRTtDRFU7QUVLO0NGTTtPR0U7Q0hXO09JRTtDSkU7T0tFO0NMVTtBTUU7aUNDRTt3QkNHLG1DRDtLREM7Q05FO0FTRTtxQ0N1QjtLRFE7eUNFRTtLRkk7dUJHRTtLSFE7Q1RRO09hRTtlTks7R01pQjtDYkM7T2NFO2VQRztHT007Q2RDO09lRTtrQkNDO0dERTtDZkM7T2lCRTt1QkNDO0dERTtDakJDO09tQkU7Q25CRTtPb0JFO0NwQks7T3FCRTtlVmlCO0tVTTtDckJFO09zQkU7MENDQywyQkQ7Q3RCTTtPd0JFO0lERSxxREM7Q3hCTTtPeUJFO0N6Qks7TzBCRTtDMUJFO08yQkU7QzNCRTtPNEJFO0M1QkU7TzZCRTtDN0JFO084QkU7QzlCRTtPK0JFO21CQ007R0RhOzRCUlMsNkNRO0MvQkc7T2lDRTtDakNNO09rQ0U7Q2xDRTtPbUNFO0lDTztLREU7Q25DRTtPcUNrQjtFQ0c7SUNDO0tERTtJRUU7S0ZJO0lHVztLSGM7SUlFO21DQ0M7T0RFO0tKQztJTUU7S05JO3FCT0U7S1BlO3NCUUU7S1JFOzRCU0U7S1RFO0dEQztDckNHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTG9nQm94TG9nIiwiY29uc3RydWN0b3IiLCJpbmNyZW1lbnRDb3VudCIsImdldEF2YWlsYWJsZVN0YWNrIiwicmV0cnlTeW1ib2xpY2F0ZSIsInN5bWJvbGljYXRlIiwiaGFuZGxlU3ltYm9saWNhdGUiLCJMb2dCb3hTeW1ib2xpY2F0aW9uLnN5bWJvbGljYXRlLnRoZW4kYXJndW1lbnRfMCIsIkxvZ0JveFN5bWJvbGljYXRpb24uc3ltYm9saWNhdGUudGhlbiRhcmd1bWVudF8xIiwidXBkYXRlU3RhdHVzIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0M7RUNxQjtHRFc7RUVFO0dGRTtFR0U7R0hJO0VJRTtHSks7RUtFO0dMSTtFTUU7UUNJO1NERTtRRUM7U0ZFO0dORztFU0U7R1RrQztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzYW5pdGl6ZSIsImRlbGV0ZVN0YWNrIiwic3ltYm9saWNhdGUiXSwibWFwcGluZ3MiOiJBQUE7aUJDc0I7Q0R5QjtPRUU7Q0ZFO09HRTtDSFcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzeW1ib2xpY2F0ZVN0YWNrVHJhY2UiXSwibWFwcGluZ3MiOiJBQUE7QUMrQjtDRGdCIn1dLFt7Im5hbWVzIjpbImFzeW5jR2VuZXJhdG9yU3RlcCIsIjxnbG9iYWw+IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCI8YW5vbnltb3VzPiIsIlByb21pc2UkYXJndW1lbnRfMCIsIl9uZXh0IiwiX3Rocm93Il0sIm1hcHBpbmdzIjoiQUFBO0NDYTtBQ0M7U0NDO3VCQ0c7TUNFO09ERTtNRUM7T0ZFO0tERTtHREM7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0RGV2U2VydmVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDMkI7Q0RhIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0Q29uc3RhbnRzIl0sIm1hcHBpbmdzIjoiQUFBO0VDMEI7R0RNIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiPGFub255bW91cz4iLCJpc0RhdGFWaWV3Iiwibm9ybWFsaXplTmFtZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVyYXRvci5uZXh0IiwiaXRlcmF0b3IuQEBpdGVyYXRvciIsIkhlYWRlcnMiLCJoZWFkZXJzLmZvckVhY2gkYXJndW1lbnRfMCIsIk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLmZvckVhY2gkYXJndW1lbnRfMCIsIkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCIsIkhlYWRlcnMucHJvdG90eXBlLl9kZWxldGUiLCJIZWFkZXJzLnByb3RvdHlwZS5nZXQiLCJIZWFkZXJzLnByb3RvdHlwZS5oYXMiLCJIZWFkZXJzLnByb3RvdHlwZS5zZXQiLCJIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoIiwiSGVhZGVycy5wcm90b3R5cGUua2V5cyIsImZvckVhY2gkYXJndW1lbnRfMCIsIkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyIsIkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMiLCJjb25zdW1lZCIsImZpbGVSZWFkZXJSZWFkeSIsIlByb21pc2UkYXJndW1lbnRfMCIsInJlYWRlci5vbmxvYWQiLCJyZWFkZXIub25lcnJvciIsInJlYWRCbG9iQXNBcnJheUJ1ZmZlciIsInJlYWRCbG9iQXNUZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiYnVmZmVyQ2xvbmUiLCJCb2R5IiwiX2luaXRCb2R5IiwiYmxvYiIsImFycmF5QnVmZmVyIiwidGV4dCIsImZvcm1EYXRhIiwianNvbiIsIm5vcm1hbGl6ZU1ldGhvZCIsIlJlcXVlc3QiLCJSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSIsImRlY29kZSIsImJvZHkudHJpbS5zcGxpdC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJwYXJzZUhlYWRlcnMiLCJwcmVQcm9jZXNzZWRIZWFkZXJzLnNwbGl0LmZvckVhY2gkYXJndW1lbnRfMCIsIlJlc3BvbnNlIiwiUmVzcG9uc2UucHJvdG90eXBlLmNsb25lIiwiUmVzcG9uc2UuZXJyb3IiLCJSZXNwb25zZS5yZWRpcmVjdCIsImV4cG9ydHMuRE9NRXhjZXB0aW9uIiwiZmV0Y2giLCJhYm9ydFhociIsInhoci5vbmxvYWQiLCJ4aHIub25lcnJvciIsInhoci5vbnRpbWVvdXQiLCJ4aHIub25hYm9ydCIsInJlcXVlc3QuaGVhZGVycy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJ4aHIub25yZWFkeXN0YXRlY2hhbmdlIl0sIm1hcHBpbmdzIjoiQUFBLENDO0NESSxRQztFQ29CO0dERTtFRXNCO0dGUTtFR0U7R0hLO0VJRztZQ0U7T0RHO2tDRUk7T0ZFO0dKSTtFT0U7c0JDSTtPREU7c0JDRTtPREU7a0RFRTtPRkU7R1BFOzZCVUU7R1ZLO2dDV0U7R1hFOzBCWUU7R1pHOzBCYUU7R2JFOzBCY0U7R2RFOzhCZUU7R2ZNOzJCZ0JFO2lCQ0U7S0RFO0doQkU7NkJrQkU7aUJERTtLQ0U7R2xCRTs4Qm1CRTtpQkZFO0tFRTtHbkJFO0VvQk07R3BCSztFcUJFO3VCQ0M7c0JDQztPREU7dUJFQztPRkU7S0RDO0dyQkM7RXlCRTtHekJLO0UwQkU7RzFCSztFMkJFO0czQlE7RTRCRTtHNUJRO0U2QkU7cUJDRztLRCtCO2tCRUc7T0ZlO3lCR0U7T0hNO2dCSUc7S0plO3NCS0c7T0xFO2dCTUc7S05FO0c3Qkc7RW9DSztHcENHO0VxQ0U7R3JDcUM7NEJzQ0U7R3RDRTtFdUNFO2VDSztPRE87R3ZDRTtFeUNFOytDQ0s7S0RPO0d6Q0U7RTJDSTtHM0NZOzZCNENJO0c1Q087bUI2Q0U7RzdDSTtzQjhDSTtHOUNNOzJCK0NNO0svQ0s7RWdESzt1QjFCQztNMkJTO08zQkU7bUI0QkU7TzVCUztvQjZCRTtPN0JFO3NCOEJFO085QkU7b0IrQkU7Ty9CRTs4QmdDYztPaENFO2lDaUNLO1NqQ0s7SzBCSTtHaERDO0NEa0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJwYXJzZUludGVycG9sYXRpb24iLCJyZW1haW5pbmcubWFwJGFyZ3VtZW50XzAiLCJpc0NvbXBvbmVudFN0YWNrIiwicGFyc2VDb21wb25lbnRTdGFjayIsInN0YWNrLm1hcCRhcmd1bWVudF8wIiwibWVzc2FnZS5zcGxpdC5tYXAkYXJndW1lbnRfMCIsInBhcnNlTG9nQm94RXhjZXB0aW9uIiwicGFyc2VMb2dCb3hMb2ciXSwibWFwcGluZ3MiOiJBQUE7T0NvRjtzQ0N5RDtHREs7Q0RXO0FHRTtDSFU7T0lFO3FCQ007TURRO1NFSztLRmU7Q0pFO09PRTtDUDJJO09RRTtDUmdEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwibW9kdWxlLmV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUE7aUJDRTtDRE8ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJFeGNlcHRpb25zTWFuYWdlci5yZXBvcnRGYXRhbEV4Y2VwdGlvbiIsIkV4Y2VwdGlvbnNNYW5hZ2VyLnJlcG9ydFNvZnRFeGNlcHRpb24iLCJFeGNlcHRpb25zTWFuYWdlci51cGRhdGVFeGNlcHRpb25NZXNzYWdlIiwiRXhjZXB0aW9uc01hbmFnZXIuZGlzbWlzc1JlZGJveCIsIkV4Y2VwdGlvbnNNYW5hZ2VyLnJlcG9ydEV4Y2VwdGlvbiJdLCJtYXBwaW5ncyI6IkFBQTtFQzhEO0dETTtFRUM7R0ZNO0VHQztHSE07RUlDO0dKSztFS0M7R0xVIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicG9seWZpbGxHbG9iYWwkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTs0QkNvQywyQkQifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZWplY3Rpb25UcmFja2luZ09wdGlvbnMub25VbmhhbmRsZWQiLCJyZWplY3Rpb25UcmFja2luZ09wdGlvbnMub25IYW5kbGVkIl0sIm1hcHBpbmdzIjoiQUFBO2VDZ0I7R0Q0QzthRUM7R0ZNIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImdldENvbnN0cnVjdG9yTmFtZSIsImlzV2luZG93IiwiUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IiLCJQcmV0dHlGb3JtYXRQbHVnaW5FcnJvciNjb25zdHJ1Y3RvciIsImlzVG9TdHJpbmdlZEFycmF5VHlwZSIsInByaW50TnVtYmVyIiwicHJpbnRCaWdJbnQiLCJwcmludEZ1bmN0aW9uIiwicHJpbnRTeW1ib2wiLCJwcmludEVycm9yIiwicHJpbnRCYXNpY1ZhbHVlIiwicHJpbnRDb21wbGV4VmFsdWUiLCJpc05ld1BsdWdpbiIsInByaW50UGx1Z2luIiwicGx1Z2luLnByaW50JGFyZ3VtZW50XzEiLCJwbHVnaW4ucHJpbnQkYXJndW1lbnRfMiIsImZpbmRQbHVnaW4iLCJwcmludGVyIiwidmFsaWRhdGVPcHRpb25zIiwiT2JqZWN0LmtleXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiZ2V0Q29sb3JzSGlnaGxpZ2h0IiwiREVGQVVMVF9USEVNRV9LRVlTLnJlZHVjZSRhcmd1bWVudF8wIiwiZ2V0Q29sb3JzRW1wdHkiLCJnZXRQcmludEZ1bmN0aW9uTmFtZSIsImdldEVzY2FwZVJlZ2V4IiwiZ2V0RXNjYXBlU3RyaW5nIiwiZ2V0Q29uZmlnIiwiY3JlYXRlSW5kZW50IiwicHJldHR5Rm9ybWF0Il0sIm1hcHBpbmdzIjoiQUFBO0FDd0I7Q0RFOzJCRW1COzZFRkM7aUJHSyxzREg7QUlLO0VDQztHREk7Q0pDO0FNRTtDTmU7QU9FO0NQRTtBUUU7Q1JFO0FTRTtDVE07QVVFO0NWRTtBV0U7Q1hFO0FZTTtDWmtGO0FhTTtDYjBHO0FjRTtDZEU7QWVFO1VDUSwrREQ7VUVDO1dGTTtDZm1CO0FrQkU7Q2xCWTtBbUJFO0NuQjBCO0FvQnVCOytCQ0M7R0RJO0NwQm1COzJCc0JFOzRCQ0M7R0RvQixzQnRCO3VCd0JFOzRCREM7R0NNLHNCeEI7NkJ5QkU7dUN6Qkc7dUIwQkU7aUMxQkc7d0IyQkU7a0MzQkc7a0I0QkU7RTVCK0I7QTZCRTtDN0JFO0E4Qk87QzlCeUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJ3cmFwQW5zaTE2IiwiPGFub255bW91cz4iLCJ3cmFwQW5zaTI1NiIsIndyYXBBbnNpMTZtIiwiYW5zaTJhbnNpIiwicmdiMnJnYiIsInNldExhenlQcm9wZXJ0eSIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSRhcmd1bWVudF8yLmdldCIsIm1ha2VEeW5hbWljU3R5bGVzIiwiYXNzZW1ibGVTdHlsZXMiLCJzZXRMYXp5UHJvcGVydHkkYXJndW1lbnRfMiJdLCJtYXBwaW5ncyI6IkFBQTttQkNFLGdCQztDRkc7b0JHRSxnQkQ7Q0ZHO29CSUUsZ0JGO0NGRztrQktFLE1MO2dCTUMsc0JOO3dCT0U7T0NFO0dEVTtDUEk7MEJTSTtDVGtCO0FVRTt1Q0N3RiwrREQ7MENDQyxpRUQ7MENDQywyREQ7eUNDQyw4REQ7NENDQyxnRUQ7NENDQywwREQ7Q1ZHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwid3JhcFJhdyIsIndyYXBwZWRGbiIsIndyYXBSb3VuZGVkIiwibW9kZWxzLmZvckVhY2gkYXJndW1lbnRfMCIsInJvdXRlTW9kZWxzLmZvckVhY2gkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQ087bUJDQztFRFc7Q0RRO0FHRTttQkRDO0VDdUI7Q0hRO2VJRTtxQkNTO0VESztDSkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjb252ZXJ0LnJnYi5oc2wiLCJjb252ZXJ0LnJnYi5oc3YiLCJkaWZmYyIsImNvbnZlcnQucmdiLmh3YiIsImNvbnZlcnQucmdiLmNteWsiLCJjb21wYXJhdGl2ZURpc3RhbmNlIiwiY29udmVydC5yZ2Iua2V5d29yZCIsImNvbnZlcnQua2V5d29yZC5yZ2IiLCJjb252ZXJ0LnJnYi54eXoiLCJjb252ZXJ0LnJnYi5sYWIiLCJjb252ZXJ0LmhzbC5yZ2IiLCJjb252ZXJ0LmhzbC5oc3YiLCJjb252ZXJ0Lmhzdi5yZ2IiLCJjb252ZXJ0Lmhzdi5oc2wiLCJjb252ZXJ0Lmh3Yi5yZ2IiLCJjb252ZXJ0LmNteWsucmdiIiwiY29udmVydC54eXoucmdiIiwiY29udmVydC54eXoubGFiIiwiY29udmVydC5sYWIueHl6IiwiY29udmVydC5sYWIubGNoIiwiY29udmVydC5sY2gubGFiIiwiY29udmVydC5yZ2IuYW5zaTE2IiwiY29udmVydC5oc3YuYW5zaTE2IiwiY29udmVydC5yZ2IuYW5zaTI1NiIsImNvbnZlcnQuYW5zaTE2LnJnYiIsImNvbnZlcnQuYW5zaTI1Ni5yZ2IiLCJjb252ZXJ0LnJnYi5oZXgiLCJjb252ZXJ0LmhleC5yZ2IiLCJjb2xvclN0cmluZy5zcGxpdC5tYXAkYXJndW1lbnRfMCIsImNvbnZlcnQucmdiLmhjZyIsImNvbnZlcnQuaHNsLmhjZyIsImNvbnZlcnQuaHN2LmhjZyIsImNvbnZlcnQuaGNnLnJnYiIsImNvbnZlcnQuaGNnLmhzdiIsImNvbnZlcnQuaGNnLmhzbCIsImNvbnZlcnQuaGNnLmh3YiIsImNvbnZlcnQuaHdiLmhjZyIsImNvbnZlcnQuYXBwbGUucmdiIiwiY29udmVydC5yZ2IuYXBwbGUiLCJjb252ZXJ0LmdyYXkucmdiIiwiY29udmVydC5ncmF5LmhzbCIsImNvbnZlcnQuZ3JheS5od2IiLCJjb252ZXJ0LmdyYXkuY215ayIsImNvbnZlcnQuZ3JheS5sYWIiLCJjb252ZXJ0LmdyYXkuaGV4IiwiY29udmVydC5yZ2IuZ3JheSJdLCJtYXBwaW5ncyI6IkFBQTtrQkNzRDtDRHFDO2tCRUU7ZUNZO0VERTtDRitCO2tCSUU7Q0pVO21CS0U7Q0xXO0FNRTtDTlM7c0JPRTtDUHVCO3NCUUU7Q1JFO2tCU0U7Q1RlO2tCVUU7Q1ZtQjtrQldFO0NYOEM7a0JZRTtDWmM7a0JhRTtDYjBCO2tCY0U7Q2RnQjtrQmVHO0Nmd0M7bUJnQkU7Q2hCVztrQmlCRTtDakI4QjtrQmtCRTtDbEJrQjtrQm1CRTtDbkJ3QjtrQm9CRTtDcEJnQjtrQnFCRTtDckJVO3FCc0JFO0N0Qm9CO3FCdUJFO0N2Qkk7c0J3QkU7Q3hCeUI7cUJ5QkU7Q3pCb0I7c0IwQkU7QzFCZTtrQjJCRTtDM0JPO2tCNEJFOzBDQ1M7R0RFO0M1QlM7a0I4QkU7QzlCZ0M7a0IrQkU7Qy9CWTtrQmdDRTtDaENZO2tCaUNFO0NqQ3VDO2tCa0NFO0NsQ1k7a0JtQ0U7Q25DZTtrQm9DRTtDcENLO2tCcUNFO0NyQ1k7b0JzQ0U7Q3RDRTtvQnVDRTtDdkNFO21Cd0NFO0N4Q0U7bUJ5Q0U7Q3pDRTttQjBDSTtDMUNFO29CMkNFO0MzQ0U7bUI0Q0U7QzVDRTttQjZDRTtDN0NNO21COENFO0M5Q0cifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJidWlsZEdyYXBoIiwiZGVyaXZlQkZTIiwibGluayIsIjxhbm9ueW1vdXM+Iiwid3JhcENvbnZlcnNpb24iLCJtb2R1bGUuZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQTtBQ2E7Q0RlO0FFRztDRnVCO0FHRTtRQ0M7RURFO0NIQztBS0U7Q0xhO2lCTUU7Q05rQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInNlcmlhbGl6ZSIsInRlc3QiXSwibWFwcGluZ3MiOiJBQUE7a0JDZ0I7Q0QwRTthRUksZ0RGIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0S2V5c09mRW51bWVyYWJsZVByb3BlcnRpZXMiLCJPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLmZvckVhY2gkYXJndW1lbnRfMCIsInByaW50SXRlcmF0b3JFbnRyaWVzIiwicHJpbnRJdGVyYXRvclZhbHVlcyIsInByaW50TGlzdEl0ZW1zIiwicHJpbnRPYmplY3RQcm9wZXJ0aWVzIl0sIm1hcHBpbmdzIjoiQUFBO3NDQ2lCO2lEQ0k7S0RJO0NESTtBR087Q0grQztBSU87Q0pnQztBS087Q0x1QjtBTU87Q055QiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJ0b0h1bWFuUmVhZGFibGVBbnNpIiwidGV4dC5yZXBsYWNlJGFyZ3VtZW50XzEiLCJ0ZXN0Iiwic2VyaWFsaXplIl0sIm1hcHBpbmdzIjoiQUFBO0FDVztDREU7NEJFUTswQ0NDO0dEeUQsQ0Y7YUlFO21FSkM7a0JLSTtxRUxDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwidGVzdE5hbWUiLCJ0ZXN0IiwiaXNOYW1lZE5vZGVNYXAiLCJzZXJpYWxpemUiLCJBcnJheS5mcm9tLnJlZHVjZSRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO2lCQ3FCOzhEREM7YUVFO2dDRkk7dUJHSTtnREhDO2tCSUU7NENDYTtlREc7Q0pvQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInRlc3ROb2RlIiwidGVzdCIsIm5vZGVJc1RleHQiLCJub2RlSXNDb21tZW50Iiwibm9kZUlzRnJhZ21lbnQiLCJzZXJpYWxpemUiLCJBcnJheS5mcm9tLm1hcCRhcmd1bWVudF8wIiwiQXJyYXkuZnJvbS5yZWR1Y2UkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtpQkNxQjtDRGtCO2FFRTtDRlc7QUdJO0NIRTtBSUU7Q0pFO0FLRTtDTEU7a0JNRTtpQkN1QixpQkQ7NkNFSTtXRkc7Q05rQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJwcmludFByb3BzIiwia2V5cy5tYXAkYXJndW1lbnRfMCIsInByaW50Q2hpbGRyZW4iLCJjaGlsZHJlbi5tYXAkYXJndW1lbnRfMCIsInByaW50VGV4dCIsInByaW50Q29tbWVudCIsInByaW50RWxlbWVudCIsInByaW50RWxlbWVudEFzTGVhZiJdLCJtYXBwaW5ncyI6IkFBQTtBQ1M7Q0RFO21CRVM7U0NJO0tENEI7Q0ZFO3NCSUk7TUNHOzZEREs7YUpFO2tCTUk7Q05LO3FCT0k7Q1BTO3FCUU87Q1IrQjsyQlNJO0NUWSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImVzY2FwZUhUTUwiXSwibWFwcGluZ3MiOiJBQUE7QUNhO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldEltbXV0YWJsZU5hbWUiLCJwcmludEFzTGVhZiIsInByaW50SW1tdXRhYmxlRW50cmllcyIsImdldFJlY29yZEVudHJpZXMiLCJuZXh0IiwicHJpbnRJbW11dGFibGVSZWNvcmQiLCJwcmludEltbXV0YWJsZVNlcSIsInByaW50SW1tdXRhYmxlVmFsdWVzIiwic2VyaWFsaXplIiwidGVzdCJdLCJtYXBwaW5ncyI6IkFBQTt5QkMyQiwyQkQ7b0JFRSx3QkY7OEJHSztTSHNCO0FJRztJQ0c7S0RhO0NKRTs2Qk1FO0NOeUI7MEJPRTtDUDZDOzZCUUU7U1JzQjtrQlNFO0NUc0Q7YVVLOzBFVkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImdldENoaWxkcmVuIiwiYXJnLmZvckVhY2gkYXJndW1lbnRfMCIsImdldFR5cGUiLCJnZXRQcm9wS2V5cyIsIk9iamVjdC5rZXlzLmZpbHRlciRhcmd1bWVudF8wIiwic2VyaWFsaXplIiwidGVzdCJdLCJtYXBwaW5ncyI6IkFBQTtBQ1c7Q0RPO0FFRTtDRitCO29CR1U7Z0JDRTtLREU7Q0hNO2dCS0U7Q0wrQztvQk1FO1lDRyxxREQ7Q05FO2tCUUU7T1J3QjthU0ksb0NUIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwieSIsImV4cG9ydHMuaXNBc3luY01vZGUiLCJleHBvcnRzLmlzQ29uY3VycmVudE1vZGUiLCJleHBvcnRzLmlzQ29udGV4dENvbnN1bWVyIiwiZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciIsImV4cG9ydHMuaXNFbGVtZW50IiwiZXhwb3J0cy5pc0ZvcndhcmRSZWYiLCJleHBvcnRzLmlzRnJhZ21lbnQiLCJleHBvcnRzLmlzTGF6eSIsImV4cG9ydHMuaXNNZW1vIiwiZXhwb3J0cy5pc1BvcnRhbCIsImV4cG9ydHMuaXNQcm9maWxlciIsImV4cG9ydHMuaXNTdHJpY3RNb2RlIiwiZXhwb3J0cy5pc1N1c3BlbnNlIiwiZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUiXSwibWFwcGluZ3MiOiJBQUE7QUNVLG1RRDt1Q0VDLG9CRiwwQkcsb0JILDJCSSw0QkosMkJLLDRCTCxtQk0sZ0VOLHNCTyw0QlAsb0JRLDRCUixnQlMsNEJULGdCVSw0QlY7aUJXQyw0Qlgsb0JZLDRCWixzQmEsNEJiLG9CYyw0QmQsNEJlLCtRZiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIjxhbm9ueW1vdXM+IiwiaXNWYWxpZEVsZW1lbnRUeXBlIiwidHlwZU9mIiwiaXNBc3luY01vZGUiLCJpc0NvbmN1cnJlbnRNb2RlIiwiaXNDb250ZXh0Q29uc3VtZXIiLCJpc0NvbnRleHRQcm92aWRlciIsImlzRWxlbWVudCIsImlzRm9yd2FyZFJlZiIsImlzRnJhZ21lbnQiLCJpc0xhenkiLCJpc01lbW8iLCJpc1BvcnRhbCIsImlzUHJvZmlsZXIiLCJpc1N0cmljdE1vZGUiLCJpc1N1c3BlbnNlIl0sIm1hcHBpbmdzIjoiQUFBO0dDWTtBQ3lEO0NEaUI7QUVFO0NGdUM7QUdlO0NIVTtBSUM7Q0pVO0FLQztDTEU7QU1DO0NORTtBT0M7Q1BFO0FRQztDUkU7QVNDO0NURTtBVUM7Q1ZFO0FXQztDWEU7QVlDO0NaRTtBYUM7Q2JFO0FjQztDZEU7QWVDO0NmRTtHRDRCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0UHJvcEtleXMiLCJPYmplY3Qua2V5cy5maWx0ZXIkYXJndW1lbnRfMCIsInNlcmlhbGl6ZSIsInRlc3QiXSwibWFwcGluZ3MiOiJBQUE7b0JDZTtnQkNJLCtCRDtDREc7a0JHRTtPSDRCO2FJSSx5Q0oifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJwb2x5ZmlsbE9iamVjdFByb3BlcnR5IiwicG9seWZpbGxHbG9iYWwiXSwibWFwcGluZ3MiOiJBQUE7QUMyQjtDRHNCO0FFRTtDRkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQcm9taXNlLnByb3RvdHlwZS5fZmluYWxseSIsInRoZW4kYXJndW1lbnRfMCIsIlByb21pc2UucmVzb2x2ZS50aGVuJGFyZ3VtZW50XzAiLCJ0aGVuJGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7NEJDSzttQkNDO3FDQ0M7S0RFO0dEQyxFRztxQ0RDO0tDRTtHSEM7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwibm9vcCIsImdldFRoZW4iLCJ0cnlDYWxsT25lIiwidHJ5Q2FsbFR3byIsIlByb21pc2UiLCJQcm9taXNlLnByb3RvdHlwZS50aGVuIiwic2FmZVRoZW4iLCJzZWxmLmNvbnN0cnVjdG9yJGFyZ3VtZW50XzAiLCJoYW5kbGUiLCJoYW5kbGVSZXNvbHZlZCIsInNldEltbWVkaWF0ZSRhcmd1bWVudF8wIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbmFsZSIsIkhhbmRsZXIiLCJkb1Jlc29sdmUiLCJ0cnlDYWxsVHdvJGFyZ3VtZW50XzEiLCJ0cnlDYWxsVHdvJGFyZ3VtZW50XzIiXSwibWFwcGluZ3MiOiJBQUE7QUNJLGtCRDtBRXFCO0NGTztBR0U7Q0hPO0FJQztDSk87QUtJO0NMYTt5Qk1LO0NOTztBT0U7OEJDQztHREk7Q1BDO0FTQztDVHNCO0FVRTtlQ0M7R0RnQjtDVkM7QVlDO0NaZ0M7QWFFO0NiTztBY0M7Q2RXO0FlRTtDZkk7QWdCUTsyQkNFO0dESSxFRTtHRkk7Q2hCSyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImRpc2FibGUiLCJlbmFibGUiLCJQcm9taXNlLl9CIiwiUHJvbWlzZS5fQyIsIm9uVW5oYW5kbGVkIiwib25IYW5kbGVkIiwibG9nRXJyb3IiLCJlcnJTdHIuc3BsaXQuZm9yRWFjaCRhcmd1bWVudF8wIiwibWF0Y2hXaGl0ZWxpc3QiLCJsaXN0LnNvbWUkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQ1k7Q0RJO0FFRztlQ087R0RZO2VFQztHRm1CO0VHQztHSHVCO0VJQztHSmM7Q0ZDO0FPRTs2QkNHO0dERTtDUEM7QVNFO21CQ0M7R0RFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwidmFsdWVQcm9taXNlIiwiUHJvbWlzZS5yZXNvbHZlIiwiUHJvbWlzZSRhcmd1bWVudF8wIiwiaXRlcmFibGVUb0FycmF5IiwiUHJvbWlzZS5hbGwiLCJyZXMiLCJ2YWwudGhlbiRhcmd1bWVudF8wIiwicC50aGVuJGFyZ3VtZW50XzAiLCJvblNldHRsZWRGdWxmaWxsIiwib25TZXR0bGVkUmVqZWN0IiwibWFwQWxsU2V0dGxlZCIsIlByb21pc2UuYWxsU2V0dGxlZCIsIlByb21pc2UucmVqZWN0IiwiUHJvbWlzZS5yYWNlIiwiaXRlcmFibGVUb0FycmF5LmZvckVhY2gkYXJndW1lbnRfMCIsIlByb21pc2UucHJvdG90eXBlLl9jYXRjaCIsImdldEFnZ3JlZ2F0ZUVycm9yIiwicHJvbWlzZUFueSIsInJlc29sdmVPbmNlIiwicmVqZWN0aW9uQ2hlY2siLCJwcm9taXNlcy5mb3JFYWNoJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUNpQjtDREs7a0JFQzt5QkNpQjtPREU7Q0ZJO3NCSUU7Q0pVO2NLRTtxQkZHO0lHRzttQkNRO1dERTttQkVNO2FGRTtLSFM7R0VJO0NMQztBU0U7Q1RFO0FVQztDVkU7QVdDO0NYWTtxQllDO0NaRTtpQmFFO3FCVkM7R1VFO0NiQztlY0U7cUJYQztvQ1lDO0taRTtHV0M7Q2RDOzZCZ0JJO0NoQkU7QWlCRTtDakJXO2NrQkU7cUJmQztJZ0JLO0toQks7SWlCRTtLakJNO3VCa0JLO09sQkU7R2VFO0NsQkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJoYXNOYXRpdmVDb25zdHJ1Y3RvciRhcmd1bWVudF8wIiwicG9seWZpbGxHbG9iYWwkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTtJQ3lCLGVEO3VDRVc7R0ZRIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiaXNOYXRpdmVGdW5jdGlvbiIsImhhc05hdGl2ZUNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFBO0FDaUI7Q0RFO0FFTTtDRkcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCI8YW5vbnltb3VzPiIsImRlZmluZSIsIndyYXAiLCJ0cnlDYXRjaCIsIkdlbmVyYXRvciIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJkZWZpbmUkYXJndW1lbnRfMiIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2gkYXJndW1lbnRfMCIsImV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiIsImV4cG9ydHMubWFyayIsImV4cG9ydHMuYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiUHJvbWlzZUltcGwucmVzb2x2ZS50aGVuJGFyZ3VtZW50XzAiLCJQcm9taXNlSW1wbC5yZXNvbHZlLnRoZW4kYXJndW1lbnRfMSIsImVucXVldWUiLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIlByb21pc2VJbXBsJGFyZ3VtZW50XzAiLCJleHBvcnRzLmFzeW5jIiwiaXRlci5uZXh0LnRoZW4kYXJndW1lbnRfMCIsIm1ha2VJbnZva2VNZXRob2QiLCJtYXliZUludm9rZURlbGVnYXRlIiwicHVzaFRyeUVudHJ5IiwicmVzZXRUcnlFbnRyeSIsIkNvbnRleHQiLCJleHBvcnRzLmtleXMiLCJuZXh0IiwidmFsdWVzIiwiZG9uZVJlc3VsdCIsIkNvbnRleHQucHJvdG90eXBlLnJlc2V0IiwiQ29udGV4dC5wcm90b3R5cGUuc3RvcCIsIkNvbnRleHQucHJvdG90eXBlLmRpc3BhdGNoRXhjZXB0aW9uIiwiaGFuZGxlIiwiQ29udGV4dC5wcm90b3R5cGUuYWJydXB0IiwiQ29udGV4dC5wcm90b3R5cGUuY29tcGxldGUiLCJDb250ZXh0LnByb3RvdHlwZS5maW5pc2giLCJDb250ZXh0LnByb3RvdHlwZS5fY2F0Y2giLCJDb250ZXh0LnByb3RvdHlwZS5kZWxlZ2F0ZVlpZWxkIl0sIm1hcHBpbmdzIjoiQUFBO2VDTztFQ1k7R0RRO2FDSztLREU7RUVHO0dGVztFR2E7R0hNO0VJZSx1Qko7RUtDLCtCTDtFTUMsd0NOOzRDT0s7R1BFO0VRNkI7d0NDQztnQ0ZDO09FRTtLREM7R1JDO2dDVUU7R1ZRO2lCV0U7R1hTO2tCWU07R1pFO0VhRTtJQ0M7eURDVTtXREUsRUU7V0ZFOytDQ0c7U0RNLEVFO1NGSTtLREU7SUlJO01DQzsrQkNDO1NERTtPREM7S0pxQjtHYks7dURPRztHUEU7a0JvQk07eUJDVTtTREU7R3BCQztFc0JFO1dSRztLUXdFO0d0QkM7RXVCTTtHdkI4RTs2Qk9hO0dQRTt5Qk9FO0dQRTtFd0JFO0d4QmE7RXlCRTtHekJLO0UwQkU7RzFCTztpQjJCRTtXQ1U7S0RlO0czQkM7RTZCRTsyQkRZO1NDYTtHN0JRO0U4Qkc7RzlCRTtXK0JLO0svQndCO1VnQ0U7S2hDVTt1QmlDRTtNQ007T0RhO0tqQ3VDO1ltQ0U7S25DZ0M7Y29DRTtLcENpQjtZcUNFO0tyQ1M7YXNDRTtLdENnQjttQnVDRTtLdkNjO0NEUyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImRlZmluZUxhenlUaW1lciIsInBvbHlmaWxsR2xvYmFsJGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7MEJDbUM7eUJDVyx3Q0Q7R0RDO0lFb0Isb0RGO0lFSSxzREY7TUVTLDRERjtNRUksNERGO21DRVcsdUNGO0lFSyxtREYifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJfZ2V0RnJlZUluZGV4IiwiX2FsbG9jYXRlQ2FsbGJhY2siLCJfY2FsbFRpbWVyIiwiY2FsbGJhY2skYXJndW1lbnRfMC50aW1lUmVtYWluaW5nIiwiX2NhbGxSZWFjdE5hdGl2ZU1pY3JvdGFza3NQYXNzIiwiX2NsZWFySW5kZXgiLCJfZnJlZUNhbGxiYWNrIiwic2V0VGltZW91dCIsIl9hbGxvY2F0ZUNhbGxiYWNrJGFyZ3VtZW50XzAiLCJzZXRJbnRlcnZhbCIsInF1ZXVlUmVhY3ROYXRpdmVNaWNyb3Rhc2siLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwiPGFub255bW91cz4iLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJjYW5jZWxJZGxlQ2FsbGJhY2siLCJjbGVhclRpbWVvdXQiLCJjbGVhckludGVydmFsIiwiY2xlYXJSZWFjdE5hdGl2ZU1pY3JvdGFzayIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiY2FsbFRpbWVycyIsImNhbGxJZGxlQ2FsbGJhY2tzIiwiZXJyb3JzLmZvckVhY2gkYXJndW1lbnRfMCIsImNhbGxSZWFjdE5hdGl2ZU1pY3JvdGFza3MiLCJlbWl0VGltZURyaWZ0V2FybmluZyIsImNyZWF0ZVRpbWVyIiwiZGVsZXRlVGltZXIiLCJzZXRTZW5kSWRsZUV2ZW50cyJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dEO0NETTtBRUU7Q0ZPO0FHTzt1QkM2QztTRFE7Q0hjO0FLTTtDTHdCO0FNRTtDTkk7QU9FO0NQbUI7Y1FZO01DTSxpQ0Q7R1JLO2VVTTtNRE0saUNDO0dWSzs2QldVO01GRSxpQ0U7R1hLO3lCWUs7R1pJO3VCYU87VUNXO1dETztvREVPO09GVTtHYkk7c0JnQkU7R2hCZ0I7Z0JpQkU7R2pCRTtpQmtCRTtHbEJFOzZCbUJFO0duQk07d0JvQkU7R3BCRTtjcUJNO2FQa0I7YU9FO0dyQk87cUJzQkU7bUJDc0I7MEJSQztPUUUsSUQ7R3RCRTtFd0JNO21CREc7MEJSQztPUUUsSUM7R3hCRTtFeUJLO0d6Qk07QTBCRztDMUJRO0EyQkU7QzNCRztBNEJFO0M1QkcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzZXRJbW1lZGlhdGUiLCJnbG9iYWwucXVldWVNaWNyb3Rhc2skYXJndW1lbnRfMCIsImNsZWFySW1tZWRpYXRlIl0sIm1hcHBpbmdzIjoiQUFBO0FDdUI7d0JDb0I7R0RPO0NERztBR0s7Q0hFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicXVldWVNaWNyb3Rhc2siLCJ0aGVuLl9jYXRjaCRhcmd1bWVudF8wIiwic2V0VGltZW91dCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO2VDcUI7V0NhO2lCQ0U7T0RFLElEO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInBvbHlmaWxsR2xvYmFsJGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7aUNDb0IsMENEOzJCQ0Msb0NEO3dCQ0UsdUNEOzBCQ0MseUNEOzBCQ0MseUNEOzJCQ0MsMENEOzRCQ0MsdUNEO3VCQ0MsNkJEO3VCQ0MsNkJEOzZCQ0MsbUNEO3NCQ0MsZ0NEO2tDQ0MsNENEO0VDRyx1RUQ7RUNJLG1FRCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJYTUxIdHRwUmVxdWVzdCIsInNldEludGVyY2VwdG9yIiwiY29uc3RydWN0b3IiLCJfcmVzZXQiLCJnZXRfX3Jlc3BvbnNlVHlwZSIsInNldF9fcmVzcG9uc2VUeXBlIiwiZ2V0X19yZXNwb25zZVRleHQiLCJnZXRfX3Jlc3BvbnNlIiwiX19kaWRDcmVhdGVSZXF1ZXN0IiwiX19kaWRVcGxvYWRQcm9ncmVzcyIsIl9fZGlkUmVjZWl2ZVJlc3BvbnNlIiwiX19kaWRSZWNlaXZlRGF0YSIsIl9fZGlkUmVjZWl2ZUluY3JlbWVudGFsRGF0YSIsIl9fZGlkUmVjZWl2ZURhdGFQcm9ncmVzcyIsIl9fZGlkQ29tcGxldGVSZXNwb25zZSIsIl9jbGVhclN1YnNjcmlwdGlvbnMiLCJmb3JFYWNoJGFyZ3VtZW50XzAiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzb3J0JGFyZ3VtZW50XzAiLCJzb3J0ZWRIZWFkZXJzLm1hcCRhcmd1bWVudF8wIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2V0VHJhY2tpbmdOYW1lIiwic2V0UGVyZm9ybWFuY2VMb2dnZXIiLCJvcGVuIiwic2VuZCIsIlJDVE5ldHdvcmtpbmcuYWRkTGlzdGVuZXIkYXJndW1lbnRfMSIsImRvU2VuZCIsImFib3J0Iiwic2V0UmVzcG9uc2VIZWFkZXJzIiwiT2JqZWN0LmtleXMucmVkdWNlJGFyZ3VtZW50XzAiLCJzZXRSZWFkeVN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dGO0NEUTtBRUs7RUNxRDtHREU7RUVFO0dGRztFR0U7R0hrQjtFSUU7R0pFO0VLRTtHTDJCO0VNRTtHTlc7RU9FO0dQOEM7RVFHO0dSVTtFU0c7R1RhO0VVRTtHVjBCO0VXRTtHWFU7RVlFO0dab0I7RWFFO0diYztFY0c7R2Q4QjtFZUU7d0NDQztLREk7R2ZFO0VpQkU7NkRDOEI7S0RRO2FFSztTRkU7R2pCRztFb0JFO0dwQkc7RXFCRTtHckJLO0VzQks7R3RCRztFdUJLO0d2Qkc7RXdCRTtHeEJnQjtFeUJFO3NEQ1k7eUNEQzs2RENJOzBDREM7eURDSTtzQ0RDO29FQ0k7aUREQztpRUNJOzhDREM7OERDSTsyQ0RDO21CRVk7S0Y4QjtHekJNO0U0QkU7RzVCbUI7RTZCRTtPQ0s7S0RHO0c3QkM7RStCRTtHL0JpQjtFZ0NHO0doQ1M7Q0ZDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicGQiLCJzZXRDYW5jZWxGbGFnIiwiRXZlbnQiLCJFdmVudC5wcm90b3R5cGUuZ2V0X190eXBlIiwiRXZlbnQucHJvdG90eXBlLmdldF9fdGFyZ2V0IiwiRXZlbnQucHJvdG90eXBlLmdldF9fY3VycmVudFRhcmdldCIsIkV2ZW50LnByb3RvdHlwZS5jb21wb3NlZFBhdGgiLCJFdmVudC5wcm90b3R5cGUuZ2V0X19OT05FIiwiRXZlbnQucHJvdG90eXBlLmdldF9fQ0FQVFVSSU5HX1BIQVNFIiwiRXZlbnQucHJvdG90eXBlLmdldF9fQVRfVEFSR0VUIiwiRXZlbnQucHJvdG90eXBlLmdldF9fQlVCQkxJTkdfUEhBU0UiLCJFdmVudC5wcm90b3R5cGUuZ2V0X19ldmVudFBoYXNlIiwiRXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbiIsIkV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJFdmVudC5wcm90b3R5cGUuZ2V0X19idWJibGVzIiwiRXZlbnQucHJvdG90eXBlLmdldF9fY2FuY2VsYWJsZSIsIkV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdCIsIkV2ZW50LnByb3RvdHlwZS5nZXRfX2RlZmF1bHRQcmV2ZW50ZWQiLCJFdmVudC5wcm90b3R5cGUuZ2V0X19jb21wb3NlZCIsIkV2ZW50LnByb3RvdHlwZS5nZXRfX3RpbWVTdGFtcCIsIkV2ZW50LnByb3RvdHlwZS5nZXRfX3NyY0VsZW1lbnQiLCJFdmVudC5wcm90b3R5cGUuZ2V0X19jYW5jZWxCdWJibGUiLCJFdmVudC5wcm90b3R5cGUuc2V0X19jYW5jZWxCdWJibGUiLCJFdmVudC5wcm90b3R5cGUuZ2V0X19yZXR1cm5WYWx1ZSIsIkV2ZW50LnByb3RvdHlwZS5zZXRfX3JldHVyblZhbHVlIiwiRXZlbnQucHJvdG90eXBlLmluaXRFdmVudCIsImRlZmluZVJlZGlyZWN0RGVzY3JpcHRvciIsImdldCIsInNldCIsImRlZmluZUNhbGxEZXNjcmlwdG9yIiwidmFsdWUiLCJkZWZpbmVXcmFwcGVyIiwiQ3VzdG9tRXZlbnQiLCJnZXRXcmFwcGVyIiwid3JhcEV2ZW50IiwiaXNTdG9wcGVkIiwic2V0RXZlbnRQaGFzZSIsInNldEN1cnJlbnRUYXJnZXQiLCJzZXRQYXNzaXZlTGlzdGVuZXIiLCJpc09iamVjdCIsImdldExpc3RlbmVycyIsImRlZmluZUV2ZW50QXR0cmlidXRlRGVzY3JpcHRvciIsImRlZmluZUV2ZW50QXR0cmlidXRlIiwiZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQiLCJDdXN0b21FdmVudFRhcmdldCIsIkV2ZW50VGFyZ2V0IiwiRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIiLCJFdmVudFRhcmdldC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50Il0sIm1hcHBpbmdzIjoiQUFBO0FDMkM7Q0RRO0FFTTtDRnFCO0FHWTtDSHdCO0lJUTtLSkU7SUtNO0tMRTtJTU07S05FO0lPSztLUE07SVFNO0tSRTtJU007S1RFO0lVTTtLVkU7SVdNO0tYRTtJWU07S1pFO0lhTTtLYk87SWNNO0tkUTtJZU07S2ZFO0lnQk07S2hCRTtJaUJNO0tqQkU7SWtCTTtLbEJFO0ltQk07S25CRTtJb0JNO0twQkU7SXFCTztLckJFO0lzQk87S3RCRTtJdUJDO0t2QlU7SXdCTztLeEJFO0l5QkM7S3pCSTtJMEJTO0sxQkU7QTJCd0I7UUNFO1NERTtRRUM7U0ZFO0MzQkk7QThCUTtRQ0U7U0RHO0M5Qkk7QWdDUztJQ087S0RFO0NoQ3VCO0FrQ1E7Q2xDVztBbUNTO0NuQ0c7QW9DUTtDcENFO0FxQ1M7Q3JDRTtBc0NTO0N0Q0U7QXVDUztDdkNFO0F3QzRCO0N4Q0U7QXlDUTtDekNRO0EwQ1E7UWRFO1NjVTtRYkU7U2F5QztDMUNJO0EyQ1E7QzNDTTtBNENRO0lDRTtLREU7QzVDZTtBOENlO0M5Q2tCO0krQ1c7Sy9DNkM7SWdEUztLaEQrQjtJaURPO0tqRG9FIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwidXVpZHY0IiwieHh4eHh4eHhYeHh4NHh4eFl4eHhYeHh4eHh4eHh4eHgucmVwbGFjZSRhcmd1bWVudF8xIiwiY3JlYXRlQmxvYkNvbGxlY3RvciIsIkJsb2JNYW5hZ2VyIiwiY3JlYXRlRnJvbVBhcnRzIiwicGFydHMubWFwJGFyZ3VtZW50XzAiLCJpdGVtcy5yZWR1Y2UkYXJndW1lbnRfMCIsImNyZWF0ZUZyb21PcHRpb25zIiwicmVsZWFzZSIsImFkZE5ldHdvcmtpbmdIYW5kbGVyIiwiYWRkV2ViU29ja2V0SGFuZGxlciIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJzZW5kT3ZlclNvY2tldCJdLCJtYXBwaW5ncyI6IkFBQTtBQ3lCO2lFQ0M7R0RJO0NEQztBR1M7Q0hNO0FJSztFQ1M7NEJDTztLRGlCOzhCRUM7S0ZNO0dEVztFSU07R0plO0VLSztHTFE7RU1NO0dOSTtFT007R1BJO0VRTTtHUkk7RVNLO0dUSTtDSkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRDb25zdGFudHMiLCJhZGROZXR3b3JraW5nSGFuZGxlciIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwic2VuZE92ZXJTb2NrZXQiLCJjcmVhdGVGcm9tUGFydHMiLCJyZWxlYXNlIl0sIm1hcHBpbmdzIjoiQUFBO0lDK0I7S0RLO0lFQztLRkU7SUdDO0tIRTtJSUM7S0pFO0lLQztLTEU7SU1DO0tORTtJT0M7S1BFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQmxvYiIsImNvbnN0cnVjdG9yIiwic2V0X19kYXRhIiwiZ2V0X19kYXRhIiwic2xpY2UiLCJjbG9zZSIsImdldF9fc2l6ZSIsImdldF9fdHlwZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ21EO0VDUTtHREc7RUVRO0dGRTtFR0c7R0hNO0VJRTtHSm9DO0VLYztHTEk7RU1NO0dORTtFT087R1BFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsImhhcyJdLCJtYXBwaW5ncyI6IkFBQTtpQkNZO0NEUTttQkVFO0NGVTtZR0U7Q0hFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiPGFub255bW91cz4iLCJQZXJmb3JtYW5jZUxvZ2dlciIsIlBlcmZvcm1hbmNlTG9nZ2VyI2FkZFRpbWVzcGFuIiwiUGVyZm9ybWFuY2VMb2dnZXIjYXBwZW5kIiwiUGVyZm9ybWFuY2VMb2dnZXIjY2xlYXIiLCJQZXJmb3JtYW5jZUxvZ2dlciNjbGVhckNvbXBsZXRlZCIsIlBlcmZvcm1hbmNlTG9nZ2VyI2Nsb3NlIiwiUGVyZm9ybWFuY2VMb2dnZXIjY3VycmVudFRpbWVzdGFtcCIsIlBlcmZvcm1hbmNlTG9nZ2VyI2dldEV4dHJhcyIsIlBlcmZvcm1hbmNlTG9nZ2VyI2dldFBvaW50cyIsIlBlcmZvcm1hbmNlTG9nZ2VyI2dldFBvaW50RXh0cmFzIiwiUGVyZm9ybWFuY2VMb2dnZXIjZ2V0VGltZXNwYW5zIiwiUGVyZm9ybWFuY2VMb2dnZXIjaGFzVGltZXNwYW4iLCJQZXJmb3JtYW5jZUxvZ2dlciNpc0Nsb3NlZCIsIlBlcmZvcm1hbmNlTG9nZ2VyI2xvZ0V2ZXJ5dGhpbmciLCJQZXJmb3JtYW5jZUxvZ2dlciNtYXJrUG9pbnQiLCJQZXJmb3JtYW5jZUxvZ2dlciNyZW1vdmVFeHRyYSIsIlBlcmZvcm1hbmNlTG9nZ2VyI3NldEV4dHJhIiwiUGVyZm9ybWFuY2VMb2dnZXIjc3RhcnRUaW1lc3BhbiIsIlBlcmZvcm1hbmNlTG9nZ2VyI3N0b3BUaW1lc3BhbiIsImNyZWF0ZVBlcmZvcm1hbmNlTG9nZ2VyIl0sIm1hcHBpbmdzIjoiQUFBO2dDQ3lCLDhCRDtBRUU7RUNPO0dEOEI7RUVFO0dGVztFR0U7R0hPO0VJRTtHSlc7RUtFO0dMRTtFTUU7R05FO0VPRTtHUEU7RVFFO0dSRTtFU0U7R1RFO0VVRTtHVkU7RVdFO0dYRTtFWUU7R1pFO0VhRTtHYm1CO0VjRTtHZHdCO0VlRTtHZkk7RWdCRTtHaEJrQjtFaUJFO0dqQmlDO0VrQkU7R2xCMkM7Q0ZDO2VxQlc7Q3JCRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImluZm9Mb2ciXSwibWFwcGluZ3MiOiJBQUE7QUNlO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldExlbnMiLCJieXRlTGVuZ3RoIiwiX2J5dGVMZW5ndGgiLCJ0b0J5dGVBcnJheSIsInRyaXBsZXRUb0Jhc2U2NCIsImVuY29kZUNodW5rIiwiZnJvbUJ5dGVBcnJheSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3FCO0NEaUI7QUVHO0NGSztBR0U7Q0hFO0FJRTtDSjRDO0FLRTtDTEs7QU1FO0NOVztBT0U7Q1ArQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImFkZExpc3RlbmVyIiwic2VuZFJlcXVlc3QiLCJhYm9ydFJlcXVlc3QiLCJjbGVhckNvb2tpZXMiXSwibWFwcGluZ3MiOiJBQUE7RUNpRTtHRE87RUVFO0dGMEI7RUdFO0dIRTtFSUU7R0pFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY29udmVydFJlcXVlc3RCb2R5Il0sIm1hcHBpbmdzIjoiQUFBO0FDd0I7Q0RnQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkZvcm1EYXRhIiwiY29uc3RydWN0b3IiLCJhcHBlbmQiLCJnZXRBbGwiLCJfcGFydHMuZmlsdGVyJGFyZ3VtZW50XzAiLCJfcGFydHMuZmlsdGVyLm1hcCRhcmd1bWVudF8wIiwiZ2V0UGFydHMiLCJfcGFydHMubWFwJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUNrRDtFQ0c7R0RFO0VFRTtHRk87RUdFO2NDRSx3QkQ7V0VDLG9CRjtHSEM7RU1FOzJCQ0M7S0RzQjtHTkM7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiYmluYXJ5VG9CYXNlNjQiXSwibWFwcGluZ3MiOiJBQUE7QUNjO0NEYyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIldlYlNvY2tldCIsImNvbnN0cnVjdG9yIiwiZ2V0X19iaW5hcnlUeXBlIiwic2V0X19iaW5hcnlUeXBlIiwiY2xvc2UiLCJzZW5kIiwicGluZyIsIl9jbG9zZSIsIl91bnJlZ2lzdGVyRXZlbnRzIiwiX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCRhcmd1bWVudF8wIiwiX3JlZ2lzdGVyRXZlbnRzIiwiX2V2ZW50RW1pdHRlci5hZGRMaXN0ZW5lciRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO0FDc0U7RUMyQjtHRG1EO0VFRTtHRkU7RUdFO0dIZ0I7RUlFO0dKTztFS0U7R0x5QjtFTUU7R05NO0VPRTtHUFM7RVFFO2dDQ0MsZUQ7R1JFO0VVRTt5RENFO09EYztzRENDO09ETzt3RENDO09EYzt3RENDO09EbUI7R1ZFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyJdLCJtYXBwaW5ncyI6IkFBQTtBQ0M7Q0RjIn1dLFt7Im5hbWVzIjpbIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUE7Q0NXIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTmF0aXZlRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJhZGRMaXN0ZW5lciIsInJlbW92ZSIsImVtaXQiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50Il0sIm1hcHBpbmdzIjoiQUFBO2VDc0M7RUNLO0dENkI7RUVFO2NDYTtPRE87R0ZFO0VJRTtHSk87RUtFO0dMUztFTUU7R05FO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIldlYlNvY2tldEV2ZW50IiwiY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUE7QUNtQjtFQ0M7R0RHO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkZpbGUiLCJjb25zdHJ1Y3RvciIsImdldF9fbmFtZSIsImdldF9fbGFzdE1vZGlmaWVkIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0I7RUNJO0dEWTtFRUs7R0ZHO0VHSztHSEU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRmlsZVJlYWRlciIsImNvbnN0cnVjdG9yIiwiX3Jlc2V0IiwiX3NldFJlYWR5U3RhdGUiLCJyZWFkQXNBcnJheUJ1ZmZlciIsIk5hdGl2ZUZpbGVSZWFkZXJNb2R1bGUucmVhZEFzRGF0YVVSTC50aGVuJGFyZ3VtZW50XzAiLCJOYXRpdmVGaWxlUmVhZGVyTW9kdWxlLnJlYWRBc0RhdGFVUkwudGhlbiRhcmd1bWVudF8xIiwicmVhZEFzRGF0YVVSTCIsInJlYWRBc1RleHQiLCJOYXRpdmVGaWxlUmVhZGVyTW9kdWxlLnJlYWRBc1RleHQudGhlbiRhcmd1bWVudF8wIiwiTmF0aXZlRmlsZVJlYWRlck1vZHVsZS5yZWFkQXNUZXh0LnRoZW4kYXJndW1lbnRfMSIsImFib3J0IiwiZ2V0X19yZWFkeVN0YXRlIiwiZ2V0X19lcnJvciIsImdldF9fcmVzdWx0Il0sIm1hcHBpbmdzIjoiQUFBO0FDb0M7RUNjO0dERztFRUU7R0ZJO0VHRTtHSGE7RUlFO01DVTtPRFU7TUVDO09GTTtHSkU7RU9FO01GVTtPRU07TURDO09DTTtHUEU7RVFFO01DVTtPRE07TUVDO09GTTtHUkU7RVdFO0dYUztFWUU7R1pFO0VhRTtHYkU7RWNFO0dkRTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJVUkxTZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMjY29uc3RydWN0b3IiLCJPYmplY3Qua2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJVUkxTZWFyY2hQYXJhbXMjYXBwZW5kIiwiVVJMU2VhcmNoUGFyYW1zI19kZWxldGUiLCJVUkxTZWFyY2hQYXJhbXMjZ2V0IiwiVVJMU2VhcmNoUGFyYW1zI2dldEFsbCIsIlVSTFNlYXJjaFBhcmFtcyNoYXMiLCJVUkxTZWFyY2hQYXJhbXMjc2V0IiwiVVJMU2VhcmNoUGFyYW1zI3NvcnQiLCJVUkxTZWFyY2hQYXJhbXMjQEBpdGVyYXRvciIsIlVSTFNlYXJjaFBhcmFtcyN0b1N0cmluZyIsIl9zZWFyY2hQYXJhbXMucmVkdWNlJGFyZ3VtZW50XzAiLCJ2YWxpZGF0ZUJhc2VVcmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJyZXZva2VPYmplY3RVUkwiLCJjb25zdHJ1Y3RvciIsImdldF9faGFzaCIsImdldF9faG9zdCIsImdldF9faG9zdG5hbWUiLCJnZXRfX2hyZWYiLCJnZXRfX29yaWdpbiIsImdldF9fcGFzc3dvcmQiLCJnZXRfX3BhdGhuYW1lIiwiZ2V0X19wb3J0IiwiZ2V0X19wcm90b2NvbCIsImdldF9fc2VhcmNoIiwiZ2V0X19zZWFyY2hQYXJhbXMiLCJ0b0pTT04iLCJ0b1N0cmluZyIsImdldF9fdXNlcm5hbWUiXSwibWFwcGluZ3MiOiJBQUE7T0N3RDtFQ0c7a0NDRSxvQ0Q7R0RFO0VHRTtHSEU7RUlFO0dKRTtFS0U7R0xFO0VNRTtHTkU7RU9FO0dQRTtFUUU7R1JFO0VTRTtHVEU7RVVJO0dWRTtFV0U7cUNDSztLRFE7R1hDO0NEQztBY0U7Q2RLO09lRTtFQ0k7R0RLO0VFRTtHRkU7RUdHO0dIMkI7RUlFO0dKRTtFS0U7R0xFO0VNRTtHTkU7RU9FO0dQRTtFUUU7R1JFO0VTRTtHVEU7RVVFO0dWRTtFV0U7R1hFO0VZRTtHWkU7RWFFO0diRTtFY0U7R2RLO0VlRTtHZkU7RWdCRTtHaEJRO0VpQkU7R2pCRTtDZkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBYm9ydFNpZ25hbCIsIkFib3J0U2lnbmFsI2NvbnN0cnVjdG9yIiwiQWJvcnRTaWduYWwjZ2V0X19hYm9ydGVkIiwiY3JlYXRlQWJvcnRTaWduYWwiLCJhYm9ydFNpZ25hbCIsIkFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciNjb25zdHJ1Y3RvciIsIkFib3J0Q29udHJvbGxlciNnZXRfX3NpZ25hbCIsIkFib3J0Q29udHJvbGxlciNhYm9ydCIsImdldFNpZ25hbCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2M7SUNJO0tERztJRUk7S0ZNO0NEQztBSUs7Q0pLO0FLSTtDTE07QU1xQjtJQ0k7S0RFO0lFSTtLRkU7SUdJO0tIRTtDTkM7QVVRO0NWTSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdsb2JhbC5hbGVydCJdLCJtYXBwaW5ncyI6IkFBQTtpQkNpQjtHREkifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbGVydCIsImFsZXJ0Iiwib25BY3Rpb24iLCJvbkVycm9yIiwicHJvbXB0IiwiY2FsbGJhY2tPckJ1dHRvbnMuZm9yRWFjaCRhcmd1bWVudF8wIiwiUkNUQWxlcnRNYW5hZ2VyLmFsZXJ0V2l0aEFyZ3MkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3lDO0VDQzt1QkN1RDtPRFk7c0JFQyxvREY7R0RHO0VJRTtrQ0NrQjtTRGU7UUVnQjtTRkc7R0pHO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm1vZHVsZS5leHBvcnRzLmFsZXJ0V2l0aEFyZ3MiXSwibWFwcGluZ3MiOiJBQUE7RUNlO0dEUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInBvbHlmaWxsT2JqZWN0UHJvcGVydHkkYXJndW1lbnRfMiJdLCJtYXBwaW5ncyI6IkFBQTsrQ0NvQixtQkQifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZWdpc3Rlck1vZHVsZSIsInJlZ2lzdGVyTW9kdWxlJGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7bUJDaUI7b0VEYzsyQkVHLHdDRjs2QkVFLGtDRjs4QkVFLDJDRjttQ0VDOzRDRkM7eUJFRSxvQ0Y7RUVHLDhERjsyQ0VFO3FERkM7MENFRTtpREZDOzhCRUksdUNGOzhCRUUsK0NGIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY2FwdHVyZUhlYXAiXSwibWFwcGluZ3MiOiJBQUE7ZUNhO0dEWSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInBva2UiXSwibWFwcGluZ3MiOiJBQUE7UUNhO0dEc0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJlbmFibGUiLCJkaXNhYmxlIiwicmVnaXN0ZXJCdW5kbGUiLCJsb2ciLCJkYXRhLm1hcCRhcmd1bWVudF8wIiwic2V0dXAiLCJjbGllbnQub24kYXJndW1lbnRfMSIsInNldEhNUlVuYXZhaWxhYmxlUmVhc29uIiwicmVnaXN0ZXJCdW5kbGVFbnRyeVBvaW50cyIsImZsdXNoRWFybHlMb2dzIiwicGVuZGluZ0xvZ3MuZm9yRWFjaCRhcmd1bWVudF8wIiwiZGlzbWlzc1JlZGJveCIsInNob3dDb21waWxlRXJyb3IiXSwibWFwcGluZ3MiOiJBQUE7RUM0RDtHRGtDO0VFRTtHRkc7RUdFO0dISTtFSUU7eUJDZ0I7a0JEUztHSlE7RU1JO2tDQ2lDO0tEdUI7OEJDRTtLRE87d0JDRTtLREs7NkJDRTtLREU7dUJDRTtLRG1CO3VCQ0U7S0R1QjtHTlU7QVFHO0NSZTtBU0U7Q1RlO0FVRTt3QkNFO0tERTtDVkk7QVlFO0NaYztBYUU7Q2JtQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm1vZHVsZS5leHBvcnRzLnNob3dNZXNzYWdlIiwibW9kdWxlLmV4cG9ydHMuaGlkZSJdLCJtYXBwaW5ncyI6IkFBQTtFQ2U7R0Q4QjtFRUM7R0ZFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicHJvY2Vzc0NvbG9yIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0I7Q0RvQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm5vcm1hbGl6ZUNvbG9yIl0sIm1hcHBpbmdzIjoiQUFBO0FDaUI7Q0RjIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwibm9ybWFsaXplQ29sb3IiLCJodWUycmdiIiwiaHNsVG9SZ2IiLCJod2JUb1JnYiIsImNhbGwiLCJjYWxsV2l0aFNsYXNoU2VwYXJhdG9yIiwiY29tbWFTZXBhcmF0ZWRDYWxsIiwiZ2V0TWF0Y2hlcnMiLCJwYXJzZTI1NSIsInBhcnNlMzYwIiwicGFyc2UxIiwicGFyc2VQZXJjZW50YWdlIiwibm9ybWFsaXplS2V5d29yZCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2M7Q0RnSjtBRUU7Q0ZpQjtBR0U7Q0hZO0FJRTtDSmdCO0FLSztDTEU7QU1FO0NOUTtBT0U7Q1BFO0FRSTtDUjJCO0FTRTtDVFM7QVVFO0NWRztBV0U7Q1hTO0FZRTtDWlU7QWFFO0NiNEoifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQbGF0Zm9ybUNvbG9yIiwiRHluYW1pY0NvbG9ySU9TUHJpdmF0ZSIsIl9ub3JtYWxpemVDb2xvck9iamVjdCIsIl9wcm9jZXNzQ29sb3JPYmplY3QiXSwibWFwcGluZ3MiOiJBQUE7NkJDd0I7Q0RHO3NDRVM7Q0ZhOzhCR0U7Q0gwQjs0QklRO0NKcUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJuYXRpdmVFdmVudEVtaXR0ZXIuYWRkTGlzdGVuZXIkYXJndW1lbnRfMSIsIm1vZHVsZS5leHBvcnRzLmdldENvbG9yU2NoZW1lIiwibW9kdWxlLmV4cG9ydHMuc2V0Q29sb3JTY2hlbWUiLCJtb2R1bGUuZXhwb3J0cy5hZGRDaGFuZ2VMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IkFBQTtJQ3dDO0tEUztFRWU7R0ZxQjtFR0U7R0hXO0VJSztHSkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJpbmplY3QiLCJpbmplY3RVcGRhdGUiLCJITVJDbGllbnQiLCJjb25zdHJ1Y3RvciIsIl93cy5vbm9wZW4iLCJfd3Mub25lcnJvciIsIl93cy5vbmNsb3NlIiwiX3dzLm9ubWVzc2FnZSIsIm9uJGFyZ3VtZW50XzEiLCJjbG9zZSIsInNlbmQiLCJfZmx1c2hRdWV1ZSIsIl9xdWV1ZS5mb3JFYWNoJGFyZ3VtZW50XzAiLCJlbmFibGUiLCJkaXNhYmxlIiwiaXNFbmFibGVkIiwiaGFzUGVuZGluZ1VwZGF0ZXMiLCJtZXJnZVVwZGF0ZXMiLCJhcHBseVVwZGF0ZUxvY2FsbHkiLCJ1cGRhdGUuZGVsZXRlZC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJ1cGRhdGUuYWRkZWQuZm9yRWFjaCRhcmd1bWVudF8wIiwidXBkYXRlLm1vZGlmaWVkLmZvckVhY2gkYXJndW1lbnRfMCIsImRlbGV0ZWRJRHMuZm9yRWFjaCRhcmd1bWVudF8wIiwibW9kdWxlTWFwLmZvckVhY2gkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtlQ2M7Q0RTO3FCRUM7Q0ZHO0FHQztFQ0s7c0JDTTtLREk7dUJFQztLRkU7dUJHQztLSEc7eUJJQztLSndCO3NCS0M7S0xRO0dEQztFT0M7R1BFO0VRQztHUmM7RVNDO3dCQ0MsK0JEO0dURTtFV0M7R1hPO0VZQztHWkU7RWFDO0diRTtFY0M7R2RFO0NIQztBa0JDO0VDUTsyQkNDO0tETzt5QkVDO0tGUTs0QkdDO0tIRztHREM7cUJLVztHTEU7b0JNQztHTlM7Q2xCRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkV2ZW50cyIsIkVFIiwiYWRkTGlzdGVuZXIiLCJjbGVhckV2ZW50IiwiRXZlbnRFbWl0dGVyIiwiZXZlbnROYW1lcyIsImxpc3RlbmVycyIsImxpc3RlbmVyQ291bnQiLCJlbWl0Iiwib24iLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiXSwibWFwcGluZ3MiOiJBQUE7QUMrQixvQkQ7QUU0QjtDRkk7QUdhO0NIVztBSVM7Q0pHO0FLUztDTEc7b0NNUztDTlk7bUNPUztDUFM7dUNRUztDUk07OEJTUztDVHlEOzRCVVc7Q1ZFOzhCV1c7Q1hFO3dDWVk7Q1p3Qzs0Q2FTO0NiVSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImFkZE1lbnVJdGVtIiwicmVsb2FkIiwib25GYXN0UmVmcmVzaCIsImVtaXR0ZXIuYWRkTGlzdGVuZXIkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTtFQ3FCLHlERDtFRUMsZ0NGO0VHQyx3Qkg7SUNnQjs2REdZO09ISTtLREU7SUVDO0tGTTtJR0M7S0hFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2V0dXAiLCJlbmFibGUiLCJkaXNhYmxlIiwicmVnaXN0ZXJCdW5kbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUE7RUNpQixVRDtFRUM7R0ZLO0VHQyxZSDtFSUMsbUJKO0VLQyxRTCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl9fZmV0Y2hTZWdtZW50IiwiU2VnbWVudEZldGNoZXIuZmV0Y2hTZWdtZW50JGFyZ3VtZW50XzIiXSwibWFwcGluZ3MiOiJBQUE7QUNtQjtJQ2M7S0RjO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNoZWNrVmVyc2lvbnMiLCJfZm9ybWF0VmVyc2lvbiJdLCJtYXBwaW5ncyI6IkFBQTtzQkN1QjtDRGdCO0FFRTtDRlEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJmb3JFYWNoJGFyZ3VtZW50XzAiLCJjb25zb2xlLmxldmVsIl0sIm1hcHBpbmdzIjoiQUFBO2dCQ3dEO3lCQ0U7U0RHO09EQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNvbm5lY3RUb0RldlRvb2xzIiwiaXNBcHBBY3RpdmUiLCJ3cy5hZGRFdmVudExpc3RlbmVyJGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7NEJDaUI7MEJDbUIsNENEO21DRW9CO09GRTtrQ0VDO09GRTtHRGUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIjxhbm9ueW1vdXM+IiwiX193ZWJwYWNrX21vZHVsZXNfXy5fIiwiX3R5cGVvZiIsIkEiLCJCLnVzZVJlZHVjZXIkYXJndW1lbnRfMCIsIkIudXNlTGF5b3V0RWZmZWN0JGFyZ3VtZW50XzAiLCJCLnVzZUluc2VydGlvbkVmZmVjdCRhcmd1bWVudF8wIiwiQi51c2VFZmZlY3QkYXJndW1lbnRfMCIsIkIudXNlSW1wZXJhdGl2ZUhhbmRsZSRhcmd1bWVudF8xIiwiQi51c2VDYWxsYmFjayRhcmd1bWVudF8wIiwiQi51c2VNZW1vJGFyZ3VtZW50XzAiLCJFIiwidXNlIiwicmVhZENvbnRleHQiLCJ1c2VDYWNoZVJlZnJlc2giLCJ1c2VDYWxsYmFjayIsInVzZUNvbnRleHQiLCJ1c2VFZmZlY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlRGVidWdWYWx1ZSIsInVzZUxheW91dEVmZmVjdCIsInVzZUluc2VydGlvbkVmZmVjdCIsInVzZU1lbW8iLCJ1c2VNZW1vQ2FjaGUiLCJ1c2VSZWR1Y2VyIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VUcmFuc2l0aW9uIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJ1c2VEZWZlcnJlZFZhbHVlIiwidXNlSWQiLCJnZXQiLCJJIiwiSiIsIksiLCJMIiwiZC5tYXAkYXJndW1lbnRfMCIsIk0iLCJOIiwiTyIsImEuZm9yRWFjaCRhcmd1bWVudF8wIiwiZXhwb3J0cy5pbnNwZWN0SG9va3NPZkZpYmVyIiwidyIsIl9fd2VicGFja191bnVzZWRfZXhwb3J0X18iLCJleHBvcnRzLmtLIiwiZWEiLCJpc01vdW50ZWQiLCJlbnF1ZXVlRm9yY2VVcGRhdGUiLCJlbnF1ZXVlUmVwbGFjZVN0YXRlIiwiZW5xdWV1ZVNldFN0YXRlIiwiRyIsIkcucHJvdG90eXBlLnNldFN0YXRlIiwiRy5wcm90b3R5cGUuZm9yY2VVcGRhdGUiLCJIIiwiZmEiLCJQIiwiZXNjYXBlIiwiYS5yZXBsYWNlJGFyZ3VtZW50XzEiLCJSIiwiUyIsIlMkYXJndW1lbnRfNCIsIlQiLCJoYSIsImIudGhlbiRhcmd1bWVudF8wIiwiYi50aGVuJGFyZ3VtZW50XzEiLCJpYSIsIlYiLCJYIiwiZm9yRWFjaCIsIlQkYXJndW1lbnRfMSIsImNvdW50IiwidG9BcnJheSIsIm9ubHkiLCJleHBvcnRzLmNhY2hlIiwiZXhwb3J0cy5jbG9uZUVsZW1lbnQiLCJleHBvcnRzLmNyZWF0ZUNvbnRleHQiLCJleHBvcnRzLmNyZWF0ZUZhY3RvcnkiLCJleHBvcnRzLmNyZWF0ZVJlZiIsImV4cG9ydHMuY3JlYXRlU2VydmVyQ29udGV4dCIsImV4cG9ydHMuZXhwZXJpbWVudGFsX3VzZUVmZmVjdEV2ZW50IiwiZXhwb3J0cy5leHBlcmltZW50YWxfdXNlT3B0aW1pc3RpYyIsImV4cG9ydHMuZm9yd2FyZFJlZiIsImV4cG9ydHMubGF6eSIsImV4cG9ydHMubWVtbyIsImV4cG9ydHMuc3RhcnRUcmFuc2l0aW9uIiwiZXhwb3J0cy51bnN0YWJsZV9hY3QiLCJleHBvcnRzLnVuc3RhYmxlX2dldENhY2hlRm9yVHlwZSIsImV4cG9ydHMudW5zdGFibGVfZ2V0Q2FjaGVTaWduYWwiLCJleHBvcnRzLnVuc3RhYmxlX3Bvc3Rwb25lIiwiZXhwb3J0cy51bnN0YWJsZV91c2VDYWNoZVJlZnJlc2giLCJleHBvcnRzLnVuc3RhYmxlX3VzZU1lbW9DYWNoZSIsImV4cG9ydHMudXNlIiwiZXhwb3J0cy51c2VDYWxsYmFjayIsImV4cG9ydHMudXNlQ29udGV4dCIsImV4cG9ydHMudXNlRGVidWdWYWx1ZSIsImV4cG9ydHMudXNlRGVmZXJyZWRWYWx1ZSIsImV4cG9ydHMudXNlRWZmZWN0IiwiZXhwb3J0cy51c2VJZCIsImV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSIsImV4cG9ydHMudXNlSW5zZXJ0aW9uRWZmZWN0IiwiZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QiLCJleHBvcnRzLnVzZU1lbW8iLCJleHBvcnRzLnVzZVJlZHVjZXIiLCJleHBvcnRzLnVzZVJlZiIsImV4cG9ydHMudXNlU3RhdGUiLCJleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlIiwiZXhwb3J0cy51c2VUcmFuc2l0aW9uIiwiRXJyb3JTdGFja1BhcnNlciIsIkVycm9yU3RhY2tQYXJzZXIkJHBhcnNlIiwiRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uIiwiRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUiLCJlcnJvci5zdGFjay5zcGxpdC5maWx0ZXIkYXJndW1lbnRfMCIsImZpbHRlcmVkLm1hcCRhcmd1bWVudF8wIiwiRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpIiwiRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYSIsIkVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5IiwiRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwIiwiRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTExIiwibm93IiwiZGVib3VuY2UiLCJpbnZva2VGdW5jIiwibGVhZGluZ0VkZ2UiLCJyZW1haW5pbmdXYWl0Iiwic2hvdWxkSW52b2tlIiwidGltZXJFeHBpcmVkIiwidHJhaWxpbmdFZGdlIiwiY2FuY2VsIiwiZmx1c2giLCJkZWJvdW5jZWQiLCJ0aHJvdHRsZSIsImlzT2JqZWN0IiwiaXNPYmplY3RMaWtlIiwiaXNTeW1ib2wiLCJ0b051bWJlciIsIm1ha2VTeW1ib2wiLCJuYWl2ZUxlbmd0aCIsIkxSVUNhY2hlIiwic2V0IiwiTFJVX0xJU1QuZm9yRWFjaCRhcmd1bWVudF8wIiwiTFJVQ2FjaGUucHJvdG90eXBlLnJmb3JFYWNoIiwiZm9yRWFjaFN0ZXAiLCJMUlVDYWNoZS5wcm90b3R5cGUuZm9yRWFjaCIsIkxSVUNhY2hlLnByb3RvdHlwZS5rZXlzIiwiTFJVX0xJU1QudG9BcnJheS5tYXAkYXJndW1lbnRfMCIsIkxSVUNhY2hlLnByb3RvdHlwZS52YWx1ZXMiLCJMUlVDYWNoZS5wcm90b3R5cGUucmVzZXQiLCJMUlVDYWNoZS5wcm90b3R5cGUuZHVtcCIsIkxSVV9MSVNULm1hcCRhcmd1bWVudF8wIiwiTFJVX0xJU1QubWFwLnRvQXJyYXkuZmlsdGVyJGFyZ3VtZW50XzAiLCJMUlVDYWNoZS5wcm90b3R5cGUuZHVtcExydSIsIkxSVUNhY2hlLnByb3RvdHlwZS5pbnNwZWN0IiwiTFJVQ2FjaGUucHJvdG90eXBlLnNldCIsIkxSVUNhY2hlLnByb3RvdHlwZS5oYXMiLCJMUlVDYWNoZS5wcm90b3R5cGUuZ2V0IiwiTFJVQ2FjaGUucHJvdG90eXBlLnBlZWsiLCJMUlVDYWNoZS5wcm90b3R5cGUucG9wIiwiTFJVQ2FjaGUucHJvdG90eXBlLmRlbCIsIkxSVUNhY2hlLnByb3RvdHlwZS5sb2FkIiwiTFJVQ2FjaGUucHJvdG90eXBlLnBydW5lIiwiQ0FDSEUuZm9yRWFjaCRhcmd1bWVudF8wIiwiaXNTdGFsZSIsInRyaW0iLCJkZWwiLCJFbnRyeSIsImRlZmF1bHRTZXRUaW1vdXQiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsInJ1bkNsZWFyVGltZW91dCIsImNsZWFuVXBOZXh0VGljayIsImRyYWluUXVldWUiLCJwcm9jZXNzLm5leHRUaWNrIiwiSXRlbSIsIkl0ZW0ucHJvdG90eXBlLnJ1biIsIm5vb3AiLCJwcm9jZXNzLmxpc3RlbmVycyIsInByb2Nlc3MuYmluZGluZyIsInByb2Nlc3MuY3dkIiwicHJvY2Vzcy5jaGRpciIsInByb2Nlc3MudW1hc2siLCJQc2V1ZG9NYXAiLCJzZXQuZm9yRWFjaCRhcmd1bWVudF8wIiwiUHNldWRvTWFwLnByb3RvdHlwZS5mb3JFYWNoIiwiT2JqZWN0LmtleXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiUHNldWRvTWFwLnByb3RvdHlwZS5oYXMiLCJQc2V1ZG9NYXAucHJvdG90eXBlLmdldCIsIlBzZXVkb01hcC5wcm90b3R5cGUuc2V0IiwiUHNldWRvTWFwLnByb3RvdHlwZS5fZGVsZXRlIiwiUHNldWRvTWFwLnByb3RvdHlwZS5jbGVhciIsIlBzZXVkb01hcC5wcm90b3R5cGUuZW50cmllcyIsInNhbWUiLCJmaW5kIiwiX2lzTnVtYmVyIiwiX2NhcGl0YWxpemUiLCJfZ2V0dGVyIiwiU3RhY2tGcmFtZSIsImdldEFyZ3MiLCJzZXRBcmdzIiwiZ2V0RXZhbE9yaWdpbiIsInNldEV2YWxPcmlnaW4iLCJ0b1N0cmluZyIsIlN0YWNrRnJhbWUkJGZyb21TdHJpbmciLCJpbmhlcml0cyIsIlRlbXBDdG9yIiwiaXNCdWZmZXIiLCJleHBvcnRzLmZvcm1hdCIsIlN0cmluZy5yZXBsYWNlJGFyZ3VtZW50XzEiLCJleHBvcnRzLmRlcHJlY2F0ZSIsImRlcHJlY2F0ZWQiLCJleHBvcnRzLmRlYnVnbG9nIiwiZGVidWdzLnNldCIsImluc3BlY3QiLCJzdHlsaXplV2l0aENvbG9yIiwic3R5bGl6ZU5vQ29sb3IiLCJhcnJheVRvSGFzaCIsImFycmF5LmZvckVhY2gkYXJndW1lbnRfMCIsImZvcm1hdFZhbHVlIiwia2V5cy5tYXAkYXJndW1lbnRfMCIsImZvcm1hdFByaW1pdGl2ZSIsImZvcm1hdEVycm9yIiwiZm9ybWF0QXJyYXkiLCJrZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsImZvcm1hdFByb3BlcnR5Iiwic3RyLnNwbGl0Lm1hcCRhcmd1bWVudF8wIiwicmVkdWNlVG9TaW5nbGVTdHJpbmciLCJvdXRwdXQucmVkdWNlJGFyZ3VtZW50XzAiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNOdWxsIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNVbmRlZmluZWQiLCJpc1JlZ0V4cCIsImlzRGF0ZSIsImlzRXJyb3IiLCJpc0Z1bmN0aW9uIiwiaXNQcmltaXRpdmUiLCJvYmplY3RUb1N0cmluZyIsInBhZCIsInRpbWVzdGFtcCIsImV4cG9ydHMubG9nIiwiZXhwb3J0cy5fZXh0ZW5kIiwiaGFzT3duUHJvcGVydHkiLCJZYWxsaXN0IiwibGlzdC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJZYWxsaXN0LnByb3RvdHlwZS5yZW1vdmVOb2RlIiwiWWFsbGlzdC5wcm90b3R5cGUudW5zaGlmdE5vZGUiLCJZYWxsaXN0LnByb3RvdHlwZS5wdXNoTm9kZSIsIllhbGxpc3QucHJvdG90eXBlLnB1c2giLCJZYWxsaXN0LnByb3RvdHlwZS51bnNoaWZ0IiwiWWFsbGlzdC5wcm90b3R5cGUucG9wIiwiWWFsbGlzdC5wcm90b3R5cGUuc2hpZnQiLCJZYWxsaXN0LnByb3RvdHlwZS5mb3JFYWNoIiwiWWFsbGlzdC5wcm90b3R5cGUuZm9yRWFjaFJldmVyc2UiLCJZYWxsaXN0LnByb3RvdHlwZS5nZXQiLCJZYWxsaXN0LnByb3RvdHlwZS5nZXRSZXZlcnNlIiwiWWFsbGlzdC5wcm90b3R5cGUubWFwIiwiWWFsbGlzdC5wcm90b3R5cGUubWFwUmV2ZXJzZSIsIllhbGxpc3QucHJvdG90eXBlLnJlZHVjZSIsIllhbGxpc3QucHJvdG90eXBlLnJlZHVjZVJldmVyc2UiLCJZYWxsaXN0LnByb3RvdHlwZS50b0FycmF5IiwiWWFsbGlzdC5wcm90b3R5cGUudG9BcnJheVJldmVyc2UiLCJZYWxsaXN0LnByb3RvdHlwZS5zbGljZSIsIllhbGxpc3QucHJvdG90eXBlLnNsaWNlUmV2ZXJzZSIsIllhbGxpc3QucHJvdG90eXBlLnJldmVyc2UiLCJwdXNoIiwidW5zaGlmdCIsIk5vZGUiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5kIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5yIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5kJGFyZ3VtZW50XzEuY29ubmVjdFRvRGV2VG9vbHMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsIl9jcmVhdGVDbGFzcyIsIl9kZWZpbmVQcm9wZXJ0eSIsIkV2ZW50RW1pdHRlciIsImFkZExpc3RlbmVyIiwiZW1pdCIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlbW92ZUxpc3RlbmVyIiwic3RvcmFnZV9sb2NhbFN0b3JhZ2VHZXRJdGVtIiwibG9jYWxTdG9yYWdlUmVtb3ZlSXRlbSIsInN0b3JhZ2VfbG9jYWxTdG9yYWdlU2V0SXRlbSIsInNlc3Npb25TdG9yYWdlR2V0SXRlbSIsInNlc3Npb25TdG9yYWdlUmVtb3ZlSXRlbSIsInNlc3Npb25TdG9yYWdlU2V0SXRlbSIsInNpbXBsZUlzRXF1YWwiLCJlc20iLCJpc05ld0FyZ0VxdWFsVG9MYXN0IiwicmVzdWx0IiwiX3NsaWNlZFRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfYXJyYXlXaXRoSG9sZXMiLCJjb21wYXJlVmVyc2lvbnMiLCJ2YWxpZGF0ZSIsImNvbXBhcmUiLCJzYXRpc2ZpZXMiLCJyLmZpbmRJbmRleCRhcmd1bWVudF8wIiwidmFsaWRhdGVBbmRQYXJzZSIsImlzV2lsZGNhcmQiLCJ0cnlQYXJzZSIsImZvcmNlVHlwZSIsImNvbXBhcmVTdHJpbmdzIiwiY29tcGFyZVNlZ21lbnRzIiwiYXNzZXJ0VmFsaWRPcGVyYXRvciIsIlJlYWN0U3ltYm9sc190eXBlb2YiLCJnZXRJdGVyYXRvckZuIiwib3duS2V5cyIsInN5bWJvbHMuZmlsdGVyJGFyZ3VtZW50XzAiLCJfb2JqZWN0U3ByZWFkIiwib3duS2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJ1dGlsc19kZWZpbmVQcm9wZXJ0eSIsInV0aWxzX3R5cGVvZiIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsInV0aWxzX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsInV0aWxzX2FycmF5TGlrZVRvQXJyYXkiLCJhbHBoYVNvcnRLZXlzIiwiZ2V0QWxsRW51bWVyYWJsZUtleXMiLCJfbG9vcCIsImN1cnJlbnRLZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsImdldFdyYXBwZWREaXNwbGF5TmFtZSIsImdldERpc3BsYXlOYW1lIiwiZ2V0VUlEIiwidXRmRGVjb2RlU3RyaW5nV2l0aFJhbmdlcyIsInN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCIsInV0ZkVuY29kZVN0cmluZyIsInByaW50T3BlcmF0aW9uc0FycmF5IiwiZ2V0RGVmYXVsdENvbXBvbmVudEZpbHRlcnMiLCJnZXRTYXZlZENvbXBvbmVudEZpbHRlcnMiLCJzZXRTYXZlZENvbXBvbmVudEZpbHRlcnMiLCJwYXJzZUJvb2wiLCJjYXN0Qm9vbCIsImNhc3RCcm93c2VyVGhlbWUiLCJnZXRBcHBlbmRDb21wb25lbnRTdGFjayIsImdldEJyZWFrT25Db25zb2xlRXJyb3JzIiwiZ2V0SGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlIiwiZ2V0U2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzIiwiZ2V0RGVmYXVsdE9wZW5JbkVkaXRvclVSTCIsImdldE9wZW5JbkVkaXRvclVSTCIsInBhcnNlRWxlbWVudERpc3BsYXlOYW1lRnJvbUJhY2tlbmQiLCJzaGFsbG93RGlmZmVycyIsInV0aWxzX2dldEluT2JqZWN0IiwicGF0aC5yZWR1Y2UkYXJndW1lbnRfMCIsImRlbGV0ZVBhdGhJbk9iamVjdCIsInJlbmFtZVBhdGhJbk9iamVjdCIsInV0aWxzX3NldEluT2JqZWN0IiwiZ2V0RGF0YVR5cGUiLCJnZXREaXNwbGF5TmFtZUZvclJlYWN0RWxlbWVudCIsInRydW5jYXRlRm9yRGlzcGxheSIsImZvcm1hdERhdGFGb3JQcmV2aWV3IiwiaXNQbGFpbk9iamVjdCIsImJhY2tlbmRUb0Zyb250ZW5kU2VyaWFsaXplZEVsZW1lbnRNYXBwZXIiLCJoeWRyYXRpb25fb3duS2V5cyIsImh5ZHJhdGlvbl9vYmplY3RTcHJlYWQiLCJoeWRyYXRpb25fb3duS2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJoeWRyYXRpb25fZGVmaW5lUHJvcGVydHkiLCJjcmVhdGVEZWh5ZHJhdGVkIiwiZGVoeWRyYXRlIiwiZGF0YS5tYXAkYXJndW1lbnRfMCIsIkFycmF5LmZyb20uZm9yRWFjaCRhcmd1bWVudF8wIiwiZ2V0QWxsRW51bWVyYWJsZUtleXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiZmlsbEluUGF0aCIsImh5ZHJhdGUiLCJjbGVhbmVkLmZvckVhY2gkYXJndW1lbnRfMCIsInVuc2VyaWFsaXphYmxlLmZvckVhY2gkYXJndW1lbnRfMCIsInVwZ3JhZGVVbnNlcmlhbGl6YWJsZSIsImlzQXJyYXlfaXNBcnJheSIsInV0aWxzX3RvQ29uc3VtYWJsZUFycmF5IiwidXRpbHNfbm9uSXRlcmFibGVTcHJlYWQiLCJiYWNrZW5kX3V0aWxzX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwidXRpbHNfaXRlcmFibGVUb0FycmF5IiwidXRpbHNfYXJyYXlXaXRob3V0SG9sZXMiLCJiYWNrZW5kX3V0aWxzX2FycmF5TGlrZVRvQXJyYXkiLCJiYWNrZW5kX3V0aWxzX3R5cGVvZiIsInV0aWxzX293bktleXMiLCJ1dGlsc19vYmplY3RTcHJlYWQiLCJ1dGlsc19vd25LZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsImJhY2tlbmRfdXRpbHNfZGVmaW5lUHJvcGVydHkiLCJoYXNBc3NpZ25lZEJhY2tlbmQiLCJjbGVhbkZvckJyaWRnZSIsImNvcHlXaXRoRGVsZXRlIiwiY29weVdpdGhSZW5hbWUiLCJjb3B5V2l0aFNldCIsImdldEVmZmVjdER1cmF0aW9ucyIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiSlNPTi5zdHJpbmdpZnkkYXJndW1lbnRfMSIsImZvcm1hdFdpdGhTdHlsZXMiLCJpbnB1dEFyZ3MucmVkdWNlJGFyZ3VtZW50XzAiLCJmb3JtYXQiLCJmb3JtYXR0ZWQucmVwbGFjZSRhcmd1bWVudF8xIiwiaXNTeW5jaHJvbm91c1hIUlN1cHBvcnRlZCIsImd0IiwiZ3RlIiwiaXNSZWFjdE5hdGl2ZUVudmlyb25tZW50IiwiZ2V0T3duZXJXaW5kb3ciLCJnZXRPd25lcklmcmFtZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdFdpdGhCb3JkZXJPZmZzZXQiLCJtZXJnZVJlY3RPZmZzZXRzIiwicmVjdHMucmVkdWNlJGFyZ3VtZW50XzAiLCJnZXROZXN0ZWRCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRFbGVtZW50RGltZW5zaW9ucyIsIk92ZXJsYXlfY2xhc3NDYWxsQ2hlY2siLCJPdmVybGF5X2RlZmluZVByb3BlcnRpZXMiLCJPdmVybGF5X2NyZWF0ZUNsYXNzIiwiT3ZlcmxheVJlY3QiLCJyZW1vdmUiLCJ1cGRhdGUiLCJPdmVybGF5VGlwIiwidXBkYXRlVGV4dCIsInVwZGF0ZVBvc2l0aW9uIiwiT3ZlcmxheSIsInJlY3RzLmZvckVhY2gkYXJndW1lbnRfMCIsIm5vZGVzLmZpbHRlciRhcmd1bWVudF8wIiwiZWxlbWVudHMuZm9yRWFjaCRhcmd1bWVudF8wIiwiZmluZFRpcFBvcyIsImJveFdyYXAiLCJoaWRlT3ZlcmxheU5hdGl2ZSIsImhpZGVPdmVybGF5V2ViIiwiaGlkZU92ZXJsYXkiLCJzaG93T3ZlcmxheU5hdGl2ZSIsInNob3dPdmVybGF5V2ViIiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwic2hvd092ZXJsYXkiLCJzZXR1cEhpZ2hsaWdodGVyIiwic3RhcnRJbnNwZWN0aW5nTmF0aXZlIiwicmVnaXN0ZXJMaXN0ZW5lcnNPbldpbmRvdyIsInN0b3BJbnNwZWN0aW5nTmF0aXZlIiwiaWZyYW1lc0xpc3RlbmluZ1RvLmZvckVhY2gkYXJndW1lbnRfMCIsInJlbW92ZUxpc3RlbmVyc09uV2luZG93IiwiY2xlYXJOYXRpdmVFbGVtZW50SGlnaGxpZ2h0IiwiaGlnaGxpZ2h0TmF0aXZlRWxlbWVudCIsIm9uQ2xpY2siLCJvbk1vdXNlRXZlbnQiLCJvblBvaW50ZXJEb3duIiwib25Qb2ludGVyTW92ZSIsIm9uUG9pbnRlclVwIiwiZXNtJGFyZ3VtZW50XzAiLCJnZXRFdmVudFRhcmdldCIsImRyYXdOYXRpdmUiLCJpdGVyYXRlTm9kZXMkYXJndW1lbnRfMSIsImRyYXdXZWIiLCJkcmF3IiwiaXRlcmF0ZU5vZGVzIiwibm9kZVRvRGF0YS5mb3JFYWNoJGFyZ3VtZW50XzAiLCJkcmF3Qm9yZGVyIiwiZGVzdHJveU5hdGl2ZSIsImRlc3Ryb3lXZWIiLCJkZXN0cm95IiwiaW5pdGlhbGl6ZSIsIlRyYWNlVXBkYXRlc190eXBlb2YiLCJUcmFjZVVwZGF0ZXNfaW5pdGlhbGl6ZSIsInRvZ2dsZUVuYWJsZWQiLCJ0cmFjZVVwZGF0ZXMiLCJub2Rlcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJwcmVwYXJlVG9EcmF3IiwibWVhc3VyZU5vZGUiLCJpcyIsImdldFN0eWxlWERhdGEiLCJjcmF3bERhdGEiLCJkYXRhLmZvckVhY2gkYXJndW1lbnRfMCIsImNyYXdsT2JqZWN0UHJvcGVydGllcyIsImdldFByb3BlcnR5VmFsdWVGb3JTdHlsZU5hbWUiLCJEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19vd25LZXlzIiwiRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb2JqZWN0U3ByZWFkIiwiRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb3duS2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJEZXZUb29sc0NvbnNvbGVQYXRjaGluZ19kZWZpbmVQcm9wZXJ0eSIsImRpc2FibGVkTG9nIiwiZGlzYWJsZUxvZ3MiLCJyZWVuYWJsZUxvZ3MiLCJEZXZUb29sc0NvbXBvbmVudFN0YWNrRnJhbWVfdHlwZW9mIiwiZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUiLCJkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lIiwiRmFrZSIsImRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZSIsImRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSIsInNob3VsZENvbnN0cnVjdCIsImRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFViIsImRlc2NyaWJlRmliZXIiLCJnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QiLCJwcm9maWxpbmdIb29rc19zbGljZWRUb0FycmF5IiwicHJvZmlsaW5nSG9va3Nfbm9uSXRlcmFibGVSZXN0IiwicHJvZmlsaW5nSG9va3NfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJwcm9maWxpbmdIb29rc19hcnJheUxpa2VUb0FycmF5IiwicHJvZmlsaW5nSG9va3NfaXRlcmFibGVUb0FycmF5TGltaXQiLCJwcm9maWxpbmdIb29rc19hcnJheVdpdGhIb2xlcyIsInByb2ZpbGluZ0hvb2tzX3R5cGVvZiIsInNldFBlcmZvcm1hbmNlTW9ja19PTkxZX0ZPUl9URVNUSU5HIiwiY3JlYXRlUHJvZmlsaW5nSG9va3MiLCJnZXRSZWxhdGl2ZVRpbWUiLCJnZXRJbnRlcm5hbE1vZHVsZVJhbmdlcyIsImdldFRpbWVsaW5lRGF0YSIsImxhbmVUb0xhbmVzQXJyYXkiLCJtYXJrTWV0YWRhdGEiLCJtYXJrQW5kQ2xlYXIiLCJyZWNvcmRSZWFjdE1lYXN1cmVTdGFydGVkIiwibGFuZXNBcnJheS5mb3JFYWNoJGFyZ3VtZW50XzAiLCJyZWNvcmRSZWFjdE1lYXN1cmVDb21wbGV0ZWQiLCJtYXJrQ29tbWl0U3RhcnRlZCIsIm1hcmtDb21taXRTdG9wcGVkIiwibWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQiLCJtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCIsIm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQiLCJtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdG9wcGVkIiwibWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkIiwibWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdG9wcGVkIiwibWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQiLCJtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCIsIm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQiLCJtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkIiwibWFya0NvbXBvbmVudEVycm9yZWQiLCJnZXRXYWtlYWJsZUlEIiwibWFya0NvbXBvbmVudFN1c3BlbmRlZCIsIndha2VhYmxlLnRoZW4kYXJndW1lbnRfMCIsIndha2VhYmxlLnRoZW4kYXJndW1lbnRfMSIsIm1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZCIsIm1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCIsIm1hcmtQYXNzaXZlRWZmZWN0c1N0YXJ0ZWQiLCJtYXJrUGFzc2l2ZUVmZmVjdHNTdG9wcGVkIiwibWFya1JlbmRlclN0YXJ0ZWQiLCJtYXJrUmVuZGVyWWllbGRlZCIsIm1hcmtSZW5kZXJTdG9wcGVkIiwibWFya1JlbmRlclNjaGVkdWxlZCIsIm1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZCIsImdldFBhcmVudEZpYmVycyIsIm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZCIsInRvZ2dsZVByb2ZpbGluZ1N0YXR1cyIsImN1cnJlbnRUaW1lbGluZURhdGEuc2NoZWR1bGluZ0V2ZW50cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJmaWJlclN0YWNrLnJlZHVjZSRhcmd1bWVudF8wIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJyZW5kZXJlcl9vd25LZXlzIiwicmVuZGVyZXJfb2JqZWN0U3ByZWFkIiwicmVuZGVyZXJfb3duS2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJyZW5kZXJlcl9kZWZpbmVQcm9wZXJ0eSIsInJlbmRlcmVyX3NsaWNlZFRvQXJyYXkiLCJyZW5kZXJlcl9ub25JdGVyYWJsZVJlc3QiLCJyZW5kZXJlcl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsInJlbmRlcmVyX2FycmF5V2l0aEhvbGVzIiwicmVuZGVyZXJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZW5kZXJlcl9ub25JdGVyYWJsZVNwcmVhZCIsInJlbmRlcmVyX2l0ZXJhYmxlVG9BcnJheSIsInJlbmRlcmVyX2FycmF5V2l0aG91dEhvbGVzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJGIiwibiIsImUiLCJzIiwiZiIsInJlbmRlcmVyX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwicmVuZGVyZXJfYXJyYXlMaWtlVG9BcnJheSIsInJlbmRlcmVyX3R5cGVvZiIsImdldEZpYmVyRmxhZ3MiLCJnZXRJbnRlcm5hbFJlYWN0Q29uc3RhbnRzIiwiZ2V0VHlwZVN5bWJvbCIsInJlc29sdmVGaWJlclR5cGUiLCJnZXREaXNwbGF5TmFtZUZvckZpYmVyIiwiYXR0YWNoIiwicmVuZGVyZXIuc2NoZWR1bGVSZWZyZXNoIiwiZ2V0SXNQcm9maWxpbmciLCJjbGVhckVycm9yc0FuZFdhcm5pbmdzIiwiY2xlYXJNZXNzYWdlQ291bnRIZWxwZXIiLCJjbGVhckVycm9yc0ZvckZpYmVySUQiLCJjbGVhcldhcm5pbmdzRm9yRmliZXJJRCIsInVwZGF0ZU1vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnRJZk5lY2Vzc2FyeSIsIm9uRXJyb3JPcldhcm5pbmciLCJkZWJ1ZyIsImFwcGx5Q29tcG9uZW50RmlsdGVycyIsImNvbXBvbmVudEZpbHRlcnMuZm9yRWFjaCRhcmd1bWVudF8wIiwidXBkYXRlQ29tcG9uZW50RmlsdGVycyIsImhvb2suZ2V0RmliZXJSb290cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJzaG91bGRGaWx0ZXJGaWJlciIsImdldEVsZW1lbnRUeXBlRm9yRmliZXIiLCJnZXRPckdlbmVyYXRlRmliZXJJRCIsImdldEZpYmVySURUaHJvd3MiLCJnZXRGaWJlcklEVW5zYWZlIiwidW50cmFja0ZpYmVySUQiLCJ1bnRyYWNrRmliZXJzIiwidW50cmFja0ZpYmVyc1NldC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJnZXRDaGFuZ2VEZXNjcmlwdGlvbiIsInVwZGF0ZUNvbnRleHRzRm9yRmliZXIiLCJnZXRDb250ZXh0c0ZvckZpYmVyIiwiY3Jhd2xUb0luaXRpYWxpemVDb250ZXh0c01hcCIsImdldENvbnRleHRDaGFuZ2VkS2V5cyIsImlzSG9va1RoYXRDYW5TY2hlZHVsZVVwZGF0ZSIsImRpZFN0YXRlZnVsSG9va0NoYW5nZSIsImdldENoYW5nZWRIb29rc0luZGljZXMiLCJnZXRDaGFuZ2VkS2V5cyIsImRpZEZpYmVyUmVuZGVyIiwicHVzaE9wZXJhdGlvbiIsInNob3VsZEJhaWxvdXRXaXRoUGVuZGluZ09wZXJhdGlvbnMiLCJmbHVzaE9yUXVldWVPcGVyYXRpb25zIiwiY2xlYXJQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5IiwiZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5IiwicmVldmFsdWF0ZUVycm9yc0FuZFdhcm5pbmdzIiwiZmliZXJJRFRvRXJyb3JzTWFwLmZvckVhY2gkYXJndW1lbnRfMCIsImZpYmVySURUb1dhcm5pbmdzTWFwLmZvckVhY2gkYXJndW1lbnRfMCIsIm1lcmdlTWFwc0FuZEdldENvdW50SGVscGVyIiwicGVuZGluZ01lc3NhZ2VDb3VudE1hcC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJtZXNzYWdlQ291bnRNYXAuZm9yRWFjaCRhcmd1bWVudF8wIiwicmVjb3JkUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzIiwiZmliZXJzV2l0aENoYW5nZWRFcnJvck9yV2FybmluZ0NvdW50cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJmbHVzaFBlbmRpbmdFdmVudHMiLCJwZW5kaW5nU3RyaW5nVGFibGUuZm9yRWFjaCRhcmd1bWVudF8wIiwiZ2V0U3RyaW5nSUQiLCJyZWNvcmRNb3VudCIsInJlY29yZFVubW91bnQiLCJtb3VudEZpYmVyUmVjdXJzaXZlbHkiLCJ1bm1vdW50RmliZXJDaGlsZHJlblJlY3Vyc2l2ZWx5IiwicmVjb3JkUHJvZmlsaW5nRHVyYXRpb25zIiwicmVjb3JkUmVzZXRDaGlsZHJlbiIsImZpbmRSZW9yZGVyZWRDaGlsZHJlblJlY3Vyc2l2ZWx5IiwidXBkYXRlRmliZXJSZWN1cnNpdmVseSIsImhvc3RGaWJlcnMuZm9yRWFjaCRhcmd1bWVudF8wIiwiY2xlYW51cCIsInJvb3RTdXBwb3J0c1Byb2ZpbGluZyIsImZsdXNoSW5pdGlhbE9wZXJhdGlvbnMiLCJsb2NhbFBlbmRpbmdPcGVyYXRpb25zUXVldWUuZm9yRWFjaCRhcmd1bWVudF8wIiwiZ2V0VXBkYXRlcnNMaXN0IiwiQXJyYXkuZnJvbS5maWx0ZXIkYXJndW1lbnRfMCIsImhhbmRsZUNvbW1pdEZpYmVyVW5tb3VudCIsImhhbmRsZVBvc3RDb21taXRGaWJlclJvb3QiLCJoYW5kbGVDb21taXRGaWJlclJvb3QiLCJmaW5kQWxsQ3VycmVudEhvc3RGaWJlcnMiLCJmaW5kTmF0aXZlTm9kZXNGb3JGaWJlcklEIiwiaG9zdEZpYmVycy5tYXAkYXJndW1lbnRfMCIsImdldERpc3BsYXlOYW1lRm9yRmliZXJJRCIsImdldEZpYmVyRm9yTmF0aXZlIiwiZ2V0RmliZXJJREZvck5hdGl2ZSIsImFzc2VydElzTW91bnRlZCIsImdldE5lYXJlc3RNb3VudGVkRmliZXIiLCJmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQiLCJwcmVwYXJlVmlld0F0dHJpYnV0ZVNvdXJjZSIsInByZXBhcmVWaWV3RWxlbWVudFNvdXJjZSIsImZpYmVyVG9TZXJpYWxpemVkRWxlbWVudCIsImdldE93bmVyc0xpc3QiLCJnZXRJbnN0YW5jZUFuZFN0eWxlIiwiaXNFcnJvckJvdW5kYXJ5IiwiZ2V0TmVhcmVzdEVycm9yQm91bmRhcnlJRCIsImluc3BlY3RFbGVtZW50UmF3IiwiY29uc29sZS5tZXRob2QiLCJpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnQiLCJpc01vc3RSZWNlbnRseUluc3BlY3RlZEVsZW1lbnRDdXJyZW50IiwibWVyZ2VJbnNwZWN0ZWRQYXRocyIsInBhdGguZm9yRWFjaCRhcmd1bWVudF8wIiwiY3JlYXRlSXNQYXRoQWxsb3dlZCIsImlzUGF0aEFsbG93ZWQiLCJ1cGRhdGVTZWxlY3RlZEVsZW1lbnQiLCJzdG9yZUFzR2xvYmFsIiwiZ2V0U2VyaWFsaXplZEVsZW1lbnRWYWx1ZUJ5UGF0aCIsImluc3BlY3RFbGVtZW50IiwibG9nRWxlbWVudFRvQ29uc29sZSIsImRlbGV0ZVBhdGgiLCJyZW5hbWVQYXRoIiwib3ZlcnJpZGVWYWx1ZUF0UGF0aCIsImdldFByb2ZpbGluZ0RhdGEiLCJyb290VG9Db21taXRQcm9maWxpbmdNZXRhZGF0YU1hcC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnNNYXAuZm9yRWFjaCRhcmd1bWVudF8wIiwiY29tbWl0UHJvZmlsaW5nTWV0YWRhdGEuZm9yRWFjaCRhcmd1bWVudF8wIiwic3RhcnRQcm9maWxpbmciLCJzdG9wUHJvZmlsaW5nIiwic2hvdWxkRXJyb3JGaWJlckFsd2F5c051bGwiLCJzaG91bGRFcnJvckZpYmVyQWNjb3JkaW5nVG9NYXAiLCJvdmVycmlkZUVycm9yIiwic2hvdWxkU3VzcGVuZEZpYmVyQWx3YXlzRmFsc2UiLCJzaG91bGRTdXNwZW5kRmliZXJBY2NvcmRpbmdUb1NldCIsIm92ZXJyaWRlU3VzcGVuc2UiLCJzZXRUcmFja2VkUGF0aCIsInVwZGF0ZVRyYWNrZWRQYXRoU3RhdGVCZWZvcmVNb3VudCIsInVwZGF0ZVRyYWNrZWRQYXRoU3RhdGVBZnRlck1vdW50Iiwic2V0Um9vdFBzZXVkb0tleSIsInJlbW92ZVJvb3RQc2V1ZG9LZXkiLCJnZXREaXNwbGF5TmFtZUZvclJvb3QiLCJnZXRQYXRoRnJhbWUiLCJnZXRQYXRoRm9yRWxlbWVudCIsImdldEJlc3RNYXRjaEZvclRyYWNrZWRQYXRoIiwiZm9ybWF0UHJpb3JpdHlMZXZlbCIsInNldFRyYWNlVXBkYXRlc0VuYWJsZWQiLCJoYXNGaWJlcldpdGhJZCIsImNvbnNvbGVfdG9Db25zdW1hYmxlQXJyYXkiLCJjb25zb2xlX25vbkl0ZXJhYmxlU3ByZWFkIiwiY29uc29sZV9pdGVyYWJsZVRvQXJyYXkiLCJjb25zb2xlX2FycmF5V2l0aG91dEhvbGVzIiwiY29uc29sZV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiY29uc29sZV91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImNvbnNvbGVfYXJyYXlMaWtlVG9BcnJheSIsImlzU3RyaW5nQ29tcG9uZW50U3RhY2siLCJpc1N0cmljdE1vZGVPdmVycmlkZSIsImdldENvbnNvbGVDb2xvciIsImRhbmdlcm91c19zZXRUYXJnZXRDb25zb2xlRm9yVGVzdGluZyIsInJlZ2lzdGVyUmVuZGVyZXIiLCJwYXRjaCIsInVucGF0Y2hGbiIsIk9WRVJSSURFX0NPTlNPTEVfTUVUSE9EUy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJvdmVycmlkZU1ldGhvZCIsInVucGF0Y2giLCJwYXRjaEZvclN0cmljdE1vZGUiLCJ1bnBhdGNoRm9yU3RyaWN0TW9kZUZuIiwib3ZlcnJpZGVDb25zb2xlTWV0aG9kcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJ1bnBhdGNoRm9yU3RyaWN0TW9kZSIsInBhdGNoQ29uc29sZVVzaW5nV2luZG93VmFsdWVzIiwid3JpdGVDb25zb2xlUGF0Y2hTZXR0aW5nc1RvV2luZG93IiwiaW5zdGFsbENvbnNvbGVGdW5jdGlvbnNUb1dpbmRvdyIsImJyaWRnZV90eXBlb2YiLCJicmlkZ2VfdG9Db25zdW1hYmxlQXJyYXkiLCJicmlkZ2Vfbm9uSXRlcmFibGVTcHJlYWQiLCJicmlkZ2VfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJicmlkZ2VfaXRlcmFibGVUb0FycmF5IiwiYnJpZGdlX2FycmF5V2l0aG91dEhvbGVzIiwiYnJpZGdlX2FycmF5TGlrZVRvQXJyYXkiLCJicmlkZ2VfY2xhc3NDYWxsQ2hlY2siLCJicmlkZ2VfZGVmaW5lUHJvcGVydGllcyIsImJyaWRnZV9jcmVhdGVDbGFzcyIsIl9pbmhlcml0cyIsIl9zZXRQcm90b3R5cGVPZiIsIl9jcmVhdGVTdXBlciIsIl9jcmVhdGVTdXBlckludGVybmFsIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QuY29uc3RydWN0JGFyZ3VtZW50XzIiLCJfZ2V0UHJvdG90eXBlT2YiLCJicmlkZ2VfZGVmaW5lUHJvcGVydHkiLCJCcmlkZ2UiLCJicmlkZ2VfZGVmaW5lUHJvcGVydHkkYXJndW1lbnRfMiIsIndhbGwubGlzdGVuJGFyZ3VtZW50XzAiLCJzZW5kIiwic2h1dGRvd24iLCJhZ2VudF90eXBlb2YiLCJhZ2VudF9jbGFzc0NhbGxDaGVjayIsImFnZW50X2RlZmluZVByb3BlcnRpZXMiLCJhZ2VudF9jcmVhdGVDbGFzcyIsImFnZW50X2luaGVyaXRzIiwiYWdlbnRfc2V0UHJvdG90eXBlT2YiLCJhZ2VudF9jcmVhdGVTdXBlciIsImFnZW50X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJhZ2VudF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJhZ2VudF9nZXRQcm90b3R5cGVPZiIsImFnZW50X2RlZmluZVByb3BlcnR5IiwiQWdlbnQiLCJhZ2VudF9kZWZpbmVQcm9wZXJ0eSRhcmd1bWVudF8yIiwibG9kYXNoX3Rocm90dGxlX2RlZmF1bHQkYXJndW1lbnRfMCIsImdldEJlc3RNYXRjaGluZ1JlbmRlcmVySW50ZXJmYWNlIiwiZ2V0SURGb3JOb2RlIiwic2VsZWN0Tm9kZSIsInNldFJlbmRlcmVySW50ZXJmYWNlIiwib25VbnN1cHBvcnRlZFJlbmRlcmVyIiwiaG9va190eXBlb2YiLCJob29rX3RvQ29uc3VtYWJsZUFycmF5IiwiaG9va19ub25JdGVyYWJsZVNwcmVhZCIsImhvb2tfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJob29rX2l0ZXJhYmxlVG9BcnJheSIsImhvb2tfYXJyYXlXaXRob3V0SG9sZXMiLCJob29rX2FycmF5TGlrZVRvQXJyYXkiLCJpbnN0YWxsSG9vayIsImRldGVjdFJlYWN0QnVpbGRUeXBlIiwiY2hlY2tEQ0UiLCJwYXRjaENvbnNvbGVGb3JJbml0aWFsUmVuZGVySW5TdHJpY3RNb2RlIiwidW5wYXRjaENvbnNvbGVGb3JJbml0aWFsUmVuZGVySW5TdHJpY3RNb2RlIiwiaW5qZWN0Iiwic3ViIiwib24iLCJvZmYiLCJsaXN0ZW5lcnMuZXZlbnQubWFwJGFyZ3VtZW50XzAiLCJnZXRGaWJlclJvb3RzIiwib25Db21taXRGaWJlclVubW91bnQiLCJvbkNvbW1pdEZpYmVyUm9vdCIsIm9uUG9zdENvbW1pdEZpYmVyUm9vdCIsInNldFN0cmljdE1vZGUiLCJnZXRUb3BTdGFja0ZyYW1lU3RyaW5nIiwicmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0IiwicmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AiLCJkZWNvcmF0ZSIsIm9iamVjdC5hdHRyIiwiZGVjb3JhdGVNYW55IiwicmVzdG9yZU1hbnkiLCJmb3JjZVVwZGF0ZSIsImluc3RhbmNlLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlJGFyZ3VtZW50XzEiLCJsZWdhY3lfcmVuZGVyZXJfb3duS2V5cyIsImxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQiLCJsZWdhY3lfcmVuZGVyZXJfb3duS2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJsZWdhY3lfcmVuZGVyZXJfZGVmaW5lUHJvcGVydHkiLCJsZWdhY3lfcmVuZGVyZXJfdHlwZW9mIiwiZ2V0RGF0YSIsImdldEVsZW1lbnRUeXBlIiwiZ2V0Q2hpbGRyZW4iLCJyZW5kZXJlcl9hdHRhY2giLCJnZXRJbnRlcm5hbElERm9yTmF0aXZlIiwiZmluZE5hdGl2ZU5vZGVGb3JJbnRlcm5hbElEIiwiZ2V0SUQiLCJhcmVFcXVhbEFycmF5cyIsIm1vdW50Q29tcG9uZW50IiwicGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5IiwicmVjZWl2ZUNvbXBvbmVudCIsInVubW91bnRDb21wb25lbnQiLCJyZWNvcmRSZW9yZGVyIiwiY3Jhd2xBbmRSZWNvcmRJbml0aWFsTW91bnRzIiwiZ2V0Q2hpbGRyZW4uZm9yRWFjaCRhcmd1bWVudF8wIiwicGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZSIsInVucGF0Y2hDb25zb2xlRm9yU3RyaWN0TW9kZSIsImlzTWF0Y2hpbmdSZW5kZXIiLCJpbml0QmFja2VuZCIsImhvb2suc3ViJGFyZ3VtZW50XzEiLCJhdHRhY2hSZW5kZXJlciIsImhvb2sucmVuZGVyZXJzLmZvckVhY2gkYXJndW1lbnRfMCIsIm9uQWdlbnRTaHV0ZG93biIsInN1YnMuZm9yRWFjaCRhcmd1bWVudF8wIiwiaG9vay5yZW5kZXJlckludGVyZmFjZXMuZm9yRWFjaCRhcmd1bWVudF8wIiwic3Vicy5wdXNoJGFyZ3VtZW50XzAiLCJyZXNvbHZlQm94U3R5bGUiLCJzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX3R5cGVvZiIsInNldHVwTmF0aXZlU3R5bGVFZGl0b3JfZGVmaW5lUHJvcGVydHkiLCJzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yIiwiYnJpZGdlLmFkZExpc3RlbmVyJGFyZ3VtZW50XzEiLCJtZWFzdXJlU3R5bGUiLCJpbnN0YW5jZS5tZWFzdXJlJGFyZ3VtZW50XzAiLCJzaGFsbG93Q2xvbmUiLCJyZW5hbWVTdHlsZSIsInNldFN0eWxlIiwiaW5pdGlhbGl6ZVVzaW5nQ2FjaGVkU2V0dGluZ3MiLCJpbml0aWFsaXplQ29uc29sZVBhdGNoU2V0dGluZ3MiLCJwYXJzZUNvbnNvbGVQYXRjaFNldHRpbmdzIiwiY2FjaGVDb25zb2xlUGF0Y2hTZXR0aW5ncyIsImJhY2tlbmRfZGVidWciLCJjb25uZWN0VG9EZXZUb29scyIsInNjaGVkdWxlUmV0cnkiLCJ3cy5vbm9wZW4iLCJsaXN0ZW4iLCJhZ2VudC5hZGRMaXN0ZW5lciRhcmd1bWVudF8xIiwiaW5pdEFmdGVyVGljayIsImhhbmRsZUNsb3NlIiwiaGFuZGxlRmFpbGVkIiwiaGFuZGxlTWVzc2FnZSIsIm1lc3NhZ2VMaXN0ZW5lcnMuZm9yRWFjaCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBLENDO0NEUyxRRTtPQ0s7QUNlLDBYRDtBRVU7eUNDTztPREUsMkdFLGNGLHdCRyxjSCxlSSxjSixpQ0s7T0xFLHdDTSxjTixhTztPUEU7Q0ZlO0FVSztDVkk7T1dHO0dYRTtlWUM7R1pFO21CYUM7NENkSyxjYztXZEUsY2M7R2JDO2VjQztHZFE7Y2VDO0dmTzthZ0JDO0doQk87dUJpQkM7R2pCUztpQmtCQztHbEJNO21CbUJDO0duQk87c0JvQkM7R3BCTztXcUJDO0dyQlM7Z0JzQkM7R3RCa0I7Y3VCQztleEJRLGN3QjtHdkJDO1V3QkM7R3hCVztZeUJDO2UxQlEsYzBCO0d6QkM7aUIwQkM7Z0IzQlEsYzJCO0cxQkM7d0IyQkM7RzNCVTtvQjRCQztHNUJRO1M2QkM7RzdCUztPOEJHO0c5Qks7QStCSztDL0JlO0FnQ0U7Q2hDSTtBaUNFO0NqQ3dGO0FrQ0U7MEZDTTtHREU7Q2xDQztBb0NFO0NwQ1E7QXFDRTtDckNtQjtBc0NFO1lDQztHREU7Q3RDQzs4QndDSTtDeEMwRDtPREU7T0NHO09EUztPQ0c7QUNlLDBYRDtBeUNtQjtDekNrQzs0QjBDZTtDMUNFOzRCMENFO0MxQ0U7NEIwQ0U7QzFDRTs0QjBDRTtDMUNFO2EyQ0U7QzNDRTs0QjBDRTtDMUNFOzRCMENFO0MxQ0U7NEIwQ0U7QzFDRTs0QjBDRTtDMUNFOzRCMENFO0MxQ0U7NEIwQ0U7QzFDRTs0QjBDRTtDMUNFOzRCMENFO0MxQ0U7NEIwQ0U7QzFDRTs0QjBDRTtDMUNFO09ESTtPQ0c7QUNjLDBYRDtBNENzQjtDNUNJO2E2Q0c7RzdDRTtzQjhDQyxnQzlDO3VCK0NDLGlDL0M7bUJnREMsNkJoRDtBaURLO0NqREs7dUJrREk7Q2xERzswQm1ERTtDbkRFO0FvREUsZXBEO0ErQkk7Qy9CSztBc0NrQjtDdEMyQjtBcURFO0NyRFM7QXNERTtDdERFO0F1REU7a0NDSztHREU7Q3ZEQztBeURJO0N6REU7QTBERTtnSkNtQjtHREU7QzFEVztBNERFO2tCREk7R0NFO0M1REU7QTZERTtXQ0k7S0RFLEVFO0tGRTtDN0RNO0FnRU07Q2hFRTtBaUVFO0NqRU87QWtFTTtDbEVFO1dtRWU7U0NDO0tERTtHbkVDO1NxRUM7U0RFO0tDRTtHckVFO1dzRUM7Z0JGQztLRUU7R3RFQztRdUVDO0d2RUc7Z0J3RVU7U3pFQztHeUU4QjtDeEVDO3VCeUVFO0N6RW1DO3dCMEVFO0MxRWdCO3dCMkVJO0MzRUk7b0I0RUU7QzVFSTs4QjZFRTtDN0V5QjtzQzhFRTtDOUVFO3FDK0VFO0MvRUU7cUJnRkU7Q2hGSztlaUZJO0NqRlM7ZWtGRTtDbEZNOzBCbUZFO0NuRlM7dUJvRk87Q3BGRTttQ3FGRTtDckZHO2tDc0ZFO0N0Rkc7NEJ1RkU7Q3ZGSTttQ3dGRTtDeEZFO2dDeUZFO0N6RkU7YzBGRTtDMUZFO3NCMkZFO0MzRkU7cUI0RkU7QzVGRTt3QjZGRSxjN0Y7MkI4RkU7QzlGRTtvQitGRTtDL0ZFO2dCZ0dFO0NoR0U7OEJpR0U7Q2pHRTs2QmtHRTtDbEdFOzBCbUdFO0NuR0U7a0JvR0U7Q3BHRTtxQnFHSTtDckdFO2lCc0dFO0N0R0U7bUJ1R0U7Q3ZHRTsrQndHRTtDeEdFO3dCeUdFO0N6R0U7T0RJO09DRztPRFM7T0NHO2dHQ0UsMFhEO0NERTtDQ1csUTBHO1dDYTtLRFU7cUJFRTtLRlM7aUJHQztvRENDO09ERTswQkVDO09Gd0I7S0hDO3FCTUM7b0RGQztPRUU7MEJEQztPQ3dCO0tOQztnQk9DO0tQUTtpQlFDO0tSa0I7a0JTQztLVG1CO2tCVUU7b0ROQztPTUU7MEJMQztPS29CO0tWQztDMUdFO09ERTtPQ0c7QUNFLDBYRDtVcUgwRTtDckhFO0FzSHlEO0VDeUI7R0RPO0VFRTtHRk87RUdFO0dISztFSUU7R0pPO0VLRTtHTFM7RU1FO0dOVTtFT0U7R1BPO0VRRTtHUkU7RVNFO0dUd0I7Q3RISztBZ0krQztDaElrQjtBaUk0QjtDaklJO0FrSTJCO0NsSUU7QW1Jb0I7Q25JRTtBb0kwQjtDcElxQjtPREk7T0NHO2VxSXFCO0dySUU7ZXFJRTtHcklFO0FzSWE7Q3RJRTtBdUlVO0N2SWlDO093SUk7R3hJTztPOEJDO0c5QkU7T3dJSTtHeElFO084QkM7RzlCRTtPd0lJO0d4SU87TzhCQztHOUJFO093SUs7NkJDUTtPREc7R3hJSTtPOEJDO0c5QkU7TzhCSTtHOUJFO084Qkk7RzlCRTs4QjBJSTtDMUlRO0EySUU7QzNJYzs2QjRJRTtDNUlROzBCNklFO3NDQ0M7R0RFO0M3SUM7NEIrSUU7c0NEQztHQ0U7Qy9JQzsyQmdKRTsyQlBFO0tPRTtDaEpROzBCaUpFOzRCQ0M7R0RRLHlCRTtHRkU7Q2pKQzs2Qm9KRTtDcEpFOzZCcUpJO3lCWjRDO0dZK0I7Q3JKUTt5QnNKRTtDdEo4Qzt5QnVKRTtDdkpTO3lCd0pFO0N4SkU7MEJ5SkU7Q3pKRTt5QjBKRTtDMUpLO3lCMkpFO0MzSkU7MEI0SkU7QzVKb0I7MkI2SkU7c0JDRTtHREU7QzdKQztBOEJFO0M5Qm1CO0ErSkU7Qy9KZTtBZ0tFO0NoS1c7QWlLRTtDaktZO0FrS0c7Q2xLTTtPREU7T0NHO0FtS1c7Q25LRTtBb0tFO0NwS0U7Q0RFO0NDb0I7QXFLRTtDckt3QjtBc0tFO0N0S3lCO0F1S087Q3ZLZ0I7QXdLRTtDeEswQjttQnlLRTtDektjO0EwS0c7QzFLRztxQjJLRTtDM0tFO0E0S1Usa0I1SztvQjZLWTtDN0tFO2tCOEtFO0M5S0U7YytLRTtDL0tFO2dCZ0xFO0NoTEU7Z0JpTEU7Q2pMRTtPREU7T0NHO09EVztPQ0c7QWtMSztpR0NNO0tERSxpREM7S0RFO0NsTEU7OEJvTEU7a0NDRTtHREU7Q3BMQzswQnNMRTtDdExFOzBCdUxFO0N2TEc7MEJ3TEU7Q3hMRTs2QnlMRTtDekxPOzRCMExFO0MxTFM7TzhCRztHOUJFO093SUMsa0J4STtzRjJMSztDM0xFO0E0TEc7QzVMRTtBa0tFO0NsS0k7QTZMRTtDN0xJO0F3SUU7Q3hJVTtPREU7T0NHO2dHQ0UsMFhEO0NERTtDQ1csUUQ7RStMRztHL0xFO0VnTUU7R2hNRTtFaU1FO1dqTUM7S2lNRTtHak1DO0VrTVE7R2xNUTthbU1HO0tuTUU7YW9NQztLcE1NO21CcU1DO0tyTUU7bUJzTUM7S3RNUTtjdU1DO0t2TW1COzBCd01HO0d4TXFCO0NDcUM7T0RFO09DRzttQndNSTtHeE1VO21Cd01HO21CQ0csc0JEO0d4TUs7T0RHO09DRztBQ0UsMFhEO2lCME1FO0MxTUU7T0RFO09DRztBQ0csMFhEO2lCMk13Qjs0Q0NjO0dEcUI7QzNNVztvQjZNSztXOU1HO0s4TUU7RUNTO0dEYztDN01HO21CK01LO29CQ1E7T0RHO29CQ0UsY0Q7Qy9NSztBaU5ZO0NqTnlCO0FrTmdDO0NsTlE7QW1ORTtDbk5FO0FvTkU7Z0JDRTtHREU7Q3BORTtBc05FO3NCQ3dHO0tERTtDdE5LO0F3TkU7Q3hOWTtBeU5FO0N6TkU7QTBORTtlQ1c7R0RJO0MxTkU7QTRORTtvQ0NnQztXREU7MkNDRTtXREU7QzVOeUI7QThORTs2QkNFO0dESTtDOU5PO0FnT0k7Q2hPRTtBaU9JO0NqT0U7QWtPSTtDbE9FO0FtT0k7Q25PRTtBb09JO0NwT0U7QXFPSTtDck9FO0FtSUk7Q25JRTtBc09JO0N0T0U7QXVPSTtDdk9FO0FpSUk7Q2pJRTtBd09JO0N4T0U7QXlPSTtDek9FO0EwT0k7QzFPRTtBMk9JO0MzT0c7QTRPSztDNU9FO0E2T0U7QzdPRTtBOE9JO0M5T0k7YytPRztDL09FO2tCZ1BrQjtDaFBXO0FpUEU7Q2pQRTtPREU7T0NHO0FrUE07aUJDWTtLREU7Q2xQUTsrQm9QRTtDcFA0QjtnQ3FQRTtDclB3Qjs2QnNQRTtDdFB3Qjt5QnVQRTtDdlBNOzRCd1BFO0N4UE07d0J5UEU7Q3pQZ0I7MEIwUEU7QzFQZ0I7NEIyUEU7QzNQTzttQzRQRTtDNVBPO3dCNlBFO0M3UFM7K0I4UEU7QzlQUzt3QitQRTtDL1BVOytCZ1FFO0NoUVU7MkJpUUU7Q2pRbUI7a0NrUUU7Q2xRbUI7NEJtUUU7Q25RUzttQ29RRTtDcFFTOzBCcVFFO0NyUW9DO2lDc1FFO0N0UW9DOzRCdVFFO0N2UWE7QXdRRTtDeFFRO0F5UUU7Q3pRUTtBMFFFO0MxUXFCO09ERTtVNFFRO1c1UWtCO21DNlFNO2E3UUUseUI2UTthN1FDLGM2UTtZN1FHO21DOFFNO1k5UU07bUMrUUssZ0UvUTttQ2dSTTtZaFJLO3VCaVJhLHVDalI7QWtSSSx5SmxSO0FtUkUsNlRuUjtBb1JFLHVOcFI7QXFSRSxpTnJSO0VzUlc7R3RSSTtXdVJJO0t2Ulk7V3dSRztLeFJtQztXeVJHO0t6UkU7VzBSRztLMVJVO0EyUjREO0MzUk07QTRSQztDNVJJO0E2UkM7QzdSSTtBOFJDO0M5Uk07QStSQztDL1JJO0FnU0M7Q2hTSTtvQmlTRTtDalNFOzZCa1NFOzRCQ087R0RFO2VFRTtHRmM7Q2xTRztBRUUsMFhGO0FxU0UsOEpyUztBc1NFLGlNdFM7QXVTRSxnYXZTO0F3U0UsdUx4UztBeVNFLHllelM7QTBTRSxxRTFTO3NCMlNTO0MzU2tCO2U0U2U7QzVTRTtjNlNtQjtDN1NPO2dCOFNlOzRCQytCO0dERTtDOVNRO3VCZ1RHO0NoVGE7aUJpVEU7Q2pURTtla1RFO0NsVEc7Z0JtVEU7Q25URTtxQm9URTtDcFRXO3NCcVRFO0NyVE87MEJzVFc7Q3RUUTtBdVRPLGdLclQsNENxVCxpQ3JULHVKcVQsc0N2VDtBd1RzQztDeFRZO0F5VGlFLGdOQyxrRkQsbUR6VDtBMlRFLHdMQyxrRUQsc0tDLG9HRCx1QjNUO0E2VEUsc043VDtBOFRFLGtKNVQsNEM0VCwwQjVULHVKNFQsK0I5VDtBK1RFLDhKL1Q7QWdVRSw4TGhVO0FpVUUsK2FqVTtBa1VFLGtJbFU7QW1VRSxnR25VO0FvVUUsNExwVTtBcVUyQjtDclVRO0FzVUM7Y0NJO3dCQ0c7S0RLO0dERTtDdFVPO0F5VUU7Q3pVRztBMFVDO0MxVW9CO0EyVUU7QzNVRTtBNFVDO0M1VVE7QTZVRTtDN1VFO0E4VUk7QzlVeUI7QStVQztDL1VvSDtBZ1ZDO0NoVk07QWlWQztDalZVO0FrVkM7Q2xWRTtBbVZFO0NuVlE7QW9WRTtDcFZJO0FxVkM7Q3JWSTtBc1ZDO0N0Vks7QXVWQztDdlZLO0F3VkM7Q3hWSztBeVZDO0N6Vks7QTBWQztDMVZFO0EyVkM7QzNWVTtBNFZDO0M1VmtEO0E2Vkc7QzdWYztBOFZDO3FCQ0M7R0RrQjtDOVZDO0FnV0M7Q2hXZTtBaVdDO0NqV2tCO0FrV0M7Q2xXVztBbVdLO0NuVzJGO0FvV0M7Q3BXc0Q7QXFXRztDcldRO0FzV3dCO0N0V2dMO29CdVdFO0N2V0s7QXdXQztDeFdXO0F5V0UsME4vQyxrRitDLG1Eelc7QTBXRSwyTUMsc0VELGdMQyxvR0QsdUIxVztBNFdFLDBONVc7QTZXaUM7QzdXcUI7QThXcUI7c0JDdUY7T0RFO2lDRXVCO1NGRTsyQ0cwQztTSEc7eUNHbUI7T0hHO0M5V2lCO0FrWEM7Q2xYaUM7QW1YQztrQkNDO0dEZ0M7eUJFQztHRmU7Q25YRTtBc1hFO0N0WDRDO0F1WFk7Q3ZYRTtBd1hJLDBMeFg7QXlYRSxtTXpYO0EwWEUsdWMxWDtBMlhFLHVJM1g7QTRYRSw2RzVYO0E2WEUsb003WDtBOFhFLGtLNVgsNEM0WCxrQzVYLHVKNFgsdUM5WDtBK1hFLHNOckUsa0ZxRSxtRC9YO0FnWUUsbU1DLDBFRCw0S0Msb0dELHVCaFk7QWtZRSw4TmxZO0FtWWdCO0NuWU07QW9ZQztDcFllO0FxWUM7Q3JZaUI7QXNZRztDdFlxQjtBdVlDO0N2WVk7QXdZQztDeFlvQjtBeVlDOzhCQ087R0RjO0N6WUM7QTJZaUI7b0NDWTtLRGtCO0MzWUc7QTZZSzs0Q0NXO09Ed0I7QzdZYztBK1lDO0MvWUU7QWdaQztDaFpJO0FpWkM7Q2paSTsrQmtaQztDbFpJO0FtWmE7Q25aTTtBb1pHO0NwWlE7QXFaRztDclphO0FzWkc7c0JDQztHRGE7Q3RaQztBd1pHO0N4WjZCO0F5WkM7Q3paZ0I7QTBaRSxnSzFaO0EyWkUsb1UzWjtBNFpFLDRPNVo7RTZaZ0I7Rzdab0I7VzhaSTtLOVpJO1crWkc7Sy9aWTtFZ2FPO0doYWdDO1c4Wkk7SzlaSTtXaWFHO0tqYUc7V2thRztLbGFPO0VtYU87R25hZ0I7VzhaSTt5Qk1FO09ORTtLOVpNO1drTkc7a0NtTks7T25ORTt1Qm9OcUI7T3BOUztLbE5pQztBdWFRO0N2YXdDO0F3YUU7Q3hhUTtBeWF1QjtDemFFO0EwYUU7QzFhTztBMmFFO0MzYUU7QTRhRTtDNWFFO0E2YUU7MkJDWTtLREU7QzdhRTtBK2FFO0MvYUU7QWdibUI7RUNPO0dERTtFRUU7R0ZhO0VHRTsrQkNHO0tESztHSEU7RUtFO0dMYTtFTUU7R05FO0VPRTtHUDRDO0VRRTtHUks7RVNFO0dURztFVUU7R1ZJO0VXSTtHWHdCO0VZRTtHWkc7eURhRTtHYk07RWNNO0dkTTtDaGJDO0ErYmdCOzJCQ0U7R0RLO0MvYkU7QWljRTsyQkRVO0dDSTtDamNDO0FrY0U7Q2xjRTtBbWNFO3FCQ0M7R0RNO0NuY0M7QXFjRTtDcmNtQjtBc2NFO0N0Y0U7QXVjRTtDdmNRO0F3Y0U7Q3hjRTtBeWNFO0N6Y0s7QTBjRSxnS3hjLDRDd2MsaUN4Yyx1SndjLHNDMWM7QTJjZ0M7QzNjRztBNGNDO0M1Y2tCO0E2Y0U7Z0JDSztHRGlCO0M3Y1U7QStjRTtxQlhNO0dXTTtDL2NNO0FnZEU7Q2hkTztBaWQwRjtDamRHO0FrZDRCO0NsZFE7QW1kQztpQkNNO0tEVTtDbmRNO0FxZEU7ZXpQRTtHeVBtQjtDcmRDO0FzZEU7Q3RkMkM7QXVkZ1Ysd083SixrRjZKLG1EdmQ7QXdkRSx1T0Msb0ZELDhMQyxvR0QsdUJ4ZDtBMGRFLHdPMWQ7QTJkMEIseUIzZDtBNGRHO0M1ZCtCO0E2ZEM7Qzdkd0M7QThkRSw4TDVkLDRDNGQsZ0Q1ZCx1SjRkLHFEOWQ7QStkbUI7Qy9kYTtBZ2VNO2lCQzBCO09ERTthdlZJO1N1Vkk7Q2hlaUc7QWtlQztDbGVFO0FtZUM7Q25lRTtBb2VFO0NwZUc7QXFlRTtDcmVzRDtBc2VlO0N0ZXVDO0F1ZUM7Q3ZlZTtBd2VFLG9PeGU7QXllRSwrTXplO0EwZUUsMGMxZTtBMmVFLHFNM2U7QTRlRSx1ZjVlO0E2ZUUsbUY3ZTtBOGVFLG9LNWUsNEM0ZSxtQzVlLHVKNGUsd0M5ZTtTK0IyQjtLL0JHO1N5SUMsaUJ6STtBK2V3QjtDL2VJO0FnZkM7RUNlO0dEWTtFRUU7R0ZnQjtFR0U7R0hFO0VJRTtHSmE7RUtJO0dMd0I7RU1FO0dOSTtFT0U7eUJDaUM7T0RNO0dQRTtFU0U7R1RxQjtFVUU7R1ZnQjtFV0U7R1hTO0VZRTtHWnFCO0VhRTtHYmlCO0VjRTtHZHFCO0VlRTtHZmlCO0VnQkU7R2hCcUI7RWlCRTtHakJpQjtFa0JFO0dsQnFCO0VtQkU7R25CaUI7RW9CRTtHcEJxQjtFcUJFO0dyQmlCO0VzQkU7R3RCNkI7RXVCTztHdkJNO0V3QkU7b0JDcUM7T0RTLEVFO09GUztHeEJFO0UyQkU7RzNCUTtFNEJFO0c1QlE7RTZCRTtHN0JRO0U4QkU7RzlCUTtFK0JFO0cvQm1CO0VnQ0U7R2hDUTtFaUNFO0dqQ1E7RWtDRTtHbENlO0VtQ0U7R25DcUI7RW9DRTtHcENVO0VxQ0U7R3JDMEI7RXNDRTt1RENpRTt5RENRO2lCREU7V0RHO0d0Q1E7Q2hmZ0M7QXloQkUsNGV6aEI7QTBoQkUsbVQxaEI7QTJoQkUseU5qTyxrRmlPLG1EM2hCO0E0aEJFLHlNQyxxRUQsK0tDLG9HRCx1QjVoQjtBOGhCRSx5TjloQjtBK2hCRSxzTS9oQjtBZ2lCRSx5TWhpQjtBaWlCRSxpZmppQjtBa2lCRSw2RWxpQjtBbWlCRSxpTW5pQjtBb2lCRSxzTXBpQjtBcWlCRSwwSXJpQjtBc2lCRSwyR3RpQjtBdWlCRSx1U0MsZUQsb0JFLGlHRixLRyw4QkgsME9JLDJDSixLRSxpRkYsS0csNkNILEtLLG9ITCxLdmlCO0E2aUJFLHdiN2lCO0E4aUJFLCtMOWlCO0EraUJFLHdKN2lCLDRDNmlCLDZCN2lCLHVKNmlCLGtDL2lCO0FnakIwQjtDaGpCRztBaWpCUztFQ3VSO0dESTtFRTJCO0dGZ0I7RUdHO0dIMEk7Q2pqQlM7QXFqQlU7K0JDZ0U7S0RNO3NCRVM7T0ZFO0VHeUI7R0g4QztFSUU7R0ppQjtFS0U7R0xFO0VNRTtHTkU7RU9FO0dQSTtFUUc7R1JtQztjU1c7R1RZO0VVVTs2QkNJO0tEZ0M7R1ZDO0VZb0I7MkNDUTtLRFE7MkNDSztLRE07R1pJO0VjRztHZGlHO0VlRztHZndFO0VnQmM7R2hCOEM7RWlCRztHakJRO0VrQkk7R2xCWTtFbUJJO0duQitCO0VvQks7NkJDTTtLRHdCO0dwQkU7RXNCRTtHdEJnQztFdUJFO0d2QnFCO0V3Qks7R3hCb0M7RXlCSztHekJjO0UwQkU7RzFCK0Q7RTJCRTtHM0JrQjtFNEJFO0c1QlM7RTZCRTtHN0JxQjtFOEJFO0c5QitCO0UrQkc7Ry9CdUI7RWdDVTtHaENJO0VpQ0U7R2pDUTtFa0NFO0dsQ1U7RW1DSTtHbkNLO0VvQ0U7a0UzS0U7SzJLOEI7R3BDQztFcUNFOytCQ0U7S0RNO2lDRUM7S0ZNO0dyQ0U7RXdDRTt1Q0NZO1NERztnQ0VNO1NGRTtHeENNO0UyQ0U7a0RDRTtLRGdCO0czQ0U7RTZDRTsrQkNvQztLRFk7RzdDOEM7RStDRTtHL0N3QjtFZ0RFO0doRHdFO0VpREU7R2pEdUQ7RWtERTtHbEQ0RTtFbURJO0duRDJCO0VvREU7R3BEeUQ7RXFERTtHckRnQztFc0RFO0d0RHlCO0V1REc7K0JDZ0o7YURFO0d2RHlDO0V5REU7R3pEQztFMERFO0cxRFc7RTJERTswQ0NPO09ERTs2QzlDUztPOENzQjtHM0RFO0U2REU7b0ZDQztLREU7RzdEQztFK0RFO0cvRFU7RWdFRTtHaEVhO0VpRUU7R2pFa0Y7RWtFRTtHbEV1QztFbUVFOzRCQ1M7T0RFO0duRUs7RXFFRTtHckVHO0VzRUU7R3RFRTtFdUVFO0d2RWU7RXdFSTtHeEVJO0V5RUk7R3pFMEM7RTBFTTtHMUVvSztFMkVHO0czRUk7RTRFRTtHNUVpQztFNkVFO0c3RU87RThFRTtHOUVvQjtFK0VLO0cvRWlCO0VnRkU7R2hGYTtFaUZFO0dqRlk7RWtGRTs0QkNtRyxjRDtHbEZ3RztFb0ZNO0dwRkU7RXFGRTtHckZFO0VzRkk7aUJDRTtLRE07R3RGQztFd0ZFO1dDRztLRDJDO0d4RkM7RTBGRTtHMUZvRDtFMkZFO0czRlE7RTRGRTtHNUZLO0U2RkU7RzdGOEg7RThGRTtHOUY0QztFK0ZFO0cvRndEO0VnR0U7R2hHeUQ7RWlHRTtHakdvRTtFa0dZOzZDQ087NENDTTtTRE07c0NFRztPRjZCO0tETztHbEcrQjtFc0dFOzJDekZjO0t5RlU7R3RHUTtFdUdFO0d2R087RXdHUztHeEdFO0V5R007R3pHb0M7RTBHRTtHMUdpQjtFMkdFO0czR0U7RTRHSTtHNUdHO0U2R0U7RzdHMEI7RThHUztHOUdRO0UrR0s7Ry9HK0M7RWdIRTtHaEhJO0VpSFM7R2pITTtFa0hFO0dsSHFCO0VtSEU7R25IaUM7RW9IRTtHcEhnQztFcUhNO0dySGtCO0VzSEU7R3RIMkI7NEJ1SEU7R3ZIeUI7RXdIRTtHeEhFO0V5SEU7R3pIRTtDcmpCeUM7QStxQkUsNEwvcUI7QWdyQkUscU1ockI7QWlyQkUseUlqckI7QWtyQkUseUdsckI7QW1yQkUsNlMzSSxlMkksb0IxSSxpRzBJLEt6SSw0QnlJLDBPeEksMkN3SSxLMUksaUYwSSxLekksNkN5SSxLdkksb0h1SSxLbnJCO0FvckJFLHFicHJCO0FxckJFLDhMcnJCO0FzckJ1QjtDdHJCRTtBdXJCTTtDdnJCRTtBd3JCRTtDeHJCWTtBeXJCa0I7Q3pyQk87QTByQkk7QzFyQnVCO0EyckJVO2dCQ3NCO0tETTtxQ0VFOzZCQ0k7NkJoUjBEO21CZ1JFO1NEc0I7S0ZNO0MzckJJO0ErckJFO0MvckJLO0Fnc0JHOzZCQ1c7S0RNO21DRUU7NkJKSTtTSW9CO0tGTTtDaHNCRTtBbXNCRTtDbnNCTztBb3NCQztDcHNCZTtBcXNCSTtDcnNCTTtBc3NCQztDdHNCSztBdXNCRSxvSnJzQiw0Q3FzQiwyQnJzQix1SnFzQixnQ3ZzQjtBd3NCRSx1THhzQjtBeXNCRSxvTXpzQjtBMHNCRSxrYjFzQjtBMnNCRSx3STNzQjtBNHNCRSx1RzVzQjtBNnNCRSw2TDdzQjtBOHNCRSwrSjlzQjtBK3NCRSxtVS9zQjtBZ3RCRSx5T2h0QjtBaXRCRSxpWWp0QjtBa3RCRSwwS2x0QjtBbXRCRSxxR0MsaVVELEdudEI7QXF0QkUsdUxydEI7QXN0QkUsc0t0dEI7QXV0QkUsc1FDLGNELGdEdnRCO0F5dEJFLDZNenRCO0EwdEJFLHVOMXRCO0UydEJxRDttRUNlO0tEc0I7Z0ZDRTtLRG9EO3NDRUc7S0ZJO0czdEJPO1c4dEJNO0s5dEJ1QjtXK3RCRzt5QnhjYSxjd2M7a0J2Y0csY3VjO0svdEJ1QjtTK0JHO0svQkU7QWd1QlEsa0o5dEIsNEM4dEIsMEI5dEIsdUo4dEIsK0JodUI7QWl1QkUsOEpqdUI7QWt1QkUsa1VsdUI7QW11QkUsc09udUI7QW91QkUsMllwdUI7QXF1QkUsc0ZuQiw2RG1CLHNDcnVCO0FzdUJFLCtHbEIsZ1ZrQixHdHVCO0F1dUJFLGdNdnVCO0F3dUJFLDJLeHVCO0F5dUJFLDJRakIsY2lCLGdEenVCO0EwdUJFLDBHakIsK0VpQixtQzF1QjtBMnVCRSxzTjN1QjtZOGpCb0I7QzlqQlU7RTR1Qk87dUZDbUI7S0RTO3NGQ0U7S0RVO3dGQ0U7S0RVO2dGQ0U7S0RpQjsyRUNFO0tEYTtrRkNFO0tETTtrRkNFO0tERTtpRkNFO0tEUzttRkNFO0tERTs4RUNFO0tEZTsrRUNFO0tENEI7b0ZDRTtLRFU7OEVDRTtLRFc7aUZDRTtLRFc7b0ZDRTtLRGM7Z0ZDRTtLRGtCO2tGQ0U7S0RtQjs4RUNFO0tEa0I7OEVDRTtLRGtCO2lGQ0U7S0RPOzJFQ0U7S0RjO3VGQ0U7S0RRO3FHQ0U7S0RRO3lFQ0U7S0RHOytFQ0U7S0RVOzhFQ0U7S0RVO3FGQ0U7S0RFOzhFQ0U7S0RZOzJGQ0U7S0RpQjt1RkNFO0tESztvRkNFO0tEVztrRkNFO0tEVTsrRUNFO0tERTt1RkNFO0tETTtpRkNFO0tENEQ7cUhFRTtLRmU7RzV1QitFO1dvb0JJO0twb0JXO1crdUJHO0svdUJtQjtXZ3ZCRztLaHZCWTtXaXZCRztLanZCTTtXa3ZCRztLbHZCZ0I7V212Qkc7S252QkU7UytCRztLL0JFO0FvdkJRLGdKbHZCLDRDa3ZCLHlCbHZCLHVKa3ZCLDhCcHZCO0FxdkJFLDZLcnZCO0FzdkJFLGtNdHZCO0F1dkJFLDRhdnZCO0F3dkJFLHNJeHZCO0F5dkJFLG1HenZCO0EwdkJFLDJMMXZCO0EydkJXO0VsRVk7R2tFTztFQ0U7R0RzRztFRUU7bUIvVWlCO1MrVUU7R0ZHO0VoWEc7c0NDWTtPRGtCO0dnWEc7RUdTO2dCbEVZO0trRU07bUM1REU7NkJKSTtTSStCO0s0RE07R0hDO0VJRztHSks7RUtJO0dMcUM7RU1JO1dqd0JFO0tpd0JFO0dOQztFT0U7R1BNO0VRRTtHUmM7RW5lRTsyQjRlRTtPNWVFO0dtZUU7RVVFO0dWUTtFV0U7R1hNO0VZRTtHWmlCO0VhRTtHYk07RWNFO0dkdUI7RWVLO0dmSTtFelFFO0d5UUU7RWdCRTtHaEJNO0VpQkU7R2pCUztTNXRCNEM7SzR0QkU7QzN2Qkc7QTZ3QlU7aUJDRztHREU7Qzd3Qkc7QSt3QkM7Qy93QlE7QWd4QkM7Q2h4Qkk7QWl4QkU7OENDSSxjRDtDanhCRTtBbXhCRSxnT3pkLGtGeWQsbURueEI7QW94QkUsdU5DLDRFRCxzTEMsb0dELHVCcHhCO0FzeEJFLGdPdHhCO0F1eEJFLHNLcnhCLDRDcXhCLG9DcnhCLHVKcXhCLHlDdnhCO0F3eEJpQjtDeHhCc0I7QXl4QkU7Q3p4Qm1CO0EweEJFO0MxeEI0QjtBMnhCRTswQmhLTztHZ0tHOzZCQ0c7S0RHO2tDRUU7S0ZHO3dCaEtFO0tnS0U7NkJDRTtLREc7a0NFRTtLRkc7RWpLRztHaUtHO0VHRTtHSGE7RUlFO0dKWTtzQktTO09MMEM7Z0NNQztPTnNDO3dCT0M7T1BzQzt3QlFDO09SZ0M7RTdLSTtHNktVO0V0TEU7R3NMc0M7RVNFO0dUUztFckxFO0dxTEc7RVVFOzRDQ1U7T0RFO0dWTTtFM0tFO0cyS1k7RXpMUTsrQkN3QjtLRFM7R3lMcUM7RXRNRTtHc01JO0V2TEU7R3VMa0I7RWhKTTtpQkNFO0tETTtHZ0pDO0U5SUU7V0NHO0tEZ0I7RzhJQztFdkpHO0d1SmtCO0U1SUU7RzRJK0I7RTNJRTtHMklVO0UxSUU7RzBJTztFeklFO0d5SWlDO0VwSkU7R29KNkY7RXhJRTtHd0l3QztFM0pFO0cySk07RTFKRTtHMEpnQjtFdklFO0d1SStCO0V0SUU7R3NJK0I7RXJJRTtHcUkrQjt5QnBJRztHb0lFOzhCcktFO0dxS0U7aUN2S0U7R3VLRTtrQ3RLRTtHc0tFO3NCNUhFO0c0SEU7eUJ6SEU7R3lIRTt1QmhJRTtHZ0lDO3NCL0hFO0crSEM7RWhIRTtHZ0hHO0VqSEU7R2lIRztFMU5FO0cwTkM7RTlHRTtHOEdDO0V4SEU7R3dIQztFeEpFO0d3Skc7RW5PRTtHbU9DO0VqT0U7R2lPQztFaE9FO0dnT0M7RVlFLHVDWjtFYUUseUNiO0U3R0U7RzZHRTsrQm5LZTtLbUtHO0MzeEIwQjtBeXlCZ0I7Q3p5QkU7QTB5QkU7VzF5QkcsYzB5Qjs0Q0NHO0dEUSw0Q0M7R0RFO3VCRUc7R0ZrQzt5QkdHO0dIRTtpQ0NFO0dESTt3QklJO2lCQ0M7S0RFO29DRUM7S0ZFO0dKRTtZT0c7R1BFO1MxeUJDO2lCK3lCQztLL3lCRTtHMHlCQztDMXlCQztBa3pCbUI7Q2x6QmlGO0FtekJFLG9ManpCLDRDaXpCLDJDanpCLHVKaXpCLGdEbnpCO0FvekJFLHVPcHpCO0FxekJhO2tEQ0M7R0RJOzBEQ0M7ZXhZTztLd1lFO0dEQzttRENDO2V4WU07S3dZRTtHREM7Q3J6Qks7QXV6QlM7bUJDa0M7R0Q0QjtDdnpCQztBeXpCRTtDenpCUTtBMHpCRTtDMXpCeUY7QTJ6QkU7QzN6QjhEO0E0ekJlO0M1ekJFO0E2ekJFO0M3ekJrQjtBOHpCRTtDOXpCZ0I7QSt6QkU7Qy96Qk07QWcwQjBCO0NoMEJVO0FpMEJFO2tEajBCb0I7R2kwQkU7RUNNO2tDcFpHO09vWkU7R0RFO2NFOEI7Y0NFO2VwMEJFO1NvMEJNO09EQztZckdDO09xR3FCO2lEYkU7S2FLO3VEYkc7T2FFO2tDRW1CO0tGSTswQkdhO09ISTtlcHlCSztXb3lCRTtlMXJCQztXMHJCRztlcHlCTztXb3lCRTtlMXJCQztXMHJCRztHRkk7RU1FO0dOVTtFT0U7R1BNO0VRRTs2QkNrQjtLRFc7R1JDO0NqMEJDO0NGTSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFwcFN0YXRlIiwiY29uc3RydWN0b3IiLCJlbWl0dGVyLmFkZExpc3RlbmVyJGFyZ3VtZW50XzEiLCJOYXRpdmVBcHBTdGF0ZS5nZXRDdXJyZW50QXBwU3RhdGUkYXJndW1lbnRfMCIsImFkZEV2ZW50TGlzdGVuZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNxQztFQ007K0NDc0I7T0RHO3dDRU07T0ZPO0dERTtFSVE7d0RGWTtTRUU7MERGUztTRU87R0pHO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImxvZ0Vycm9yIl0sIm1hcHBpbmdzIjoiQUFBO2lCQ2lCO0NETyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInByb2Nlc3NBc3BlY3RSYXRpbyIsImFzcGVjdFJhdGlvLnNwbGl0Lm1hcCRhcmd1bWVudF8wIiwibWF0Y2hlcy5zb21lJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUNjOzZDQ2UsYUQ7MkNFYSw0QkY7Q0RrQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInByb2Nlc3NGb250VmFyaWFudCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2M7Q0RhIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicHJvY2Vzc1RyYW5zZm9ybSIsIl9nZXRLZXlBbmRWYWx1ZUZyb21DU1NUcmFuc2Zvcm0iLCJfdmFsaWRhdGVUcmFuc2Zvcm1zIiwidHJhbnNmb3JtLmZvckVhY2gkYXJndW1lbnRfMCIsIl92YWxpZGF0ZVRyYW5zZm9ybSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3VCO0NEMEI7eURFcUI7Q0Y2RTtBR0U7b0JDQztHRFU7Q0hDO0FLRTtDTGlIIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX2RlZmluZVByb3BlcnR5Il0sIm1hcHBpbmdzIjoiQUFBO0FDQztDRGEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJwcm9jZXNzVHJhbnNmb3JtT3JpZ2luIiwiX3ZhbGlkYXRlVHJhbnNmb3JtT3JpZ2luIl0sIm1hcHBpbmdzIjoiQUFBO2VDaUI7Q0QrRjtBRUU7Q0ZxQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInNpemVzRGlmZmVyIl0sIm1hcHBpbmdzIjoiQUFBO29CQ2U7Q0RRIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2V0Q29uc29sZVBhdGNoU2V0dGluZ3MiLCJnZXRDb25zb2xlUGF0Y2hTZXR0aW5ncyIsInNldFByb2ZpbGluZ1NldHRpbmdzIiwiZ2V0UHJvZmlsaW5nU2V0dGluZ3MiLCJyZWxvYWQiXSwibWFwcGluZ3MiOiJBQUE7RUNpQjtHREk7RUVDO0dGTTtFR0U7R0hJO0VJQztHSk07RUtFO0dMRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldCIsInNldCIsIndhdGNoS2V5cyIsImNsZWFyV2F0Y2giLCJfc2VuZE9ic2VydmF0aW9ucyIsIk9iamVjdC5rZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsInN1YnNjcmlwdGlvbnMuZm9yRWFjaCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0VDd0I7R0RHO0VFRTtHRkk7RUdFO0dIYTtFSUU7R0pJO0VLRTs4QkNDOzhCQ1E7U0RJO0tERTtHTEMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJmbGF0dGVuU3R5bGUiXSwibWFwcGluZ3MiOiJBQUE7QUNlO0NEMkIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZWdpc3RlckFnZW50IiwiZ2V0VGltZXN0YW1wIl0sIm1hcHBpbmdzIjoiQUFBO0VDc0I7R0RJO0VFQztHRkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJJbnRlcmNlcHRvciIsIkludGVyY2VwdG9yI2NvbnN0cnVjdG9yIiwiSW50ZXJjZXB0b3IjZ2V0RGF0YSIsIkludGVyY2VwdG9yI3JlcXVlc3RTZW50IiwiSW50ZXJjZXB0b3IjcmVzcG9uc2VSZWNlaXZlZCIsIkludGVyY2VwdG9yI2RhdGFSZWNlaXZlZCIsIkludGVyY2VwdG9yI2xvYWRpbmdGaW5pc2hlZCIsIkludGVyY2VwdG9yI2xvYWRpbmdGYWlsZWQiLCJJbnRlcmNlcHRvciNfZ2V0TWltZVR5cGUiLCJOZXR3b3JrQWdlbnQiLCJlbmFibGUiLCJkaXNhYmxlIiwiZ2V0UmVzcG9uc2VCb2R5IiwiaW50ZXJjZXB0b3IiXSwibWFwcGluZ3MiOiJBQUE7QUNxSjtFQ0k7R0RHO0VFRTtHRkU7RUdFO0dIMEI7RUlFO0dKeUI7RUtFO0dMVztFTUU7R05PO0VPRTtHUFE7RVFFO0dSRztDREM7QVVRO0VDTTtHREc7RUVFO0dGRztFR0U7R0hNO0VJRTtHSk07Q1ZDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSW5zcGVjdG9yQWdlbnQiLCJjb25zdHJ1Y3RvciIsInNlbmRFdmVudCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2M7RUNHO0dERTtFRUU7R0ZFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJlZnJlc2gucGVyZm9ybUZ1bGxSZWZyZXNoIiwiUmVmcmVzaC5wZXJmb3JtUmVhY3RSZWZyZXNoIl0sIm1hcHBpbmdzIjoiQUFBO0lDd0I7S0RFO0lFVztLRk8ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCI8YW5vbnltb3VzPiIsImNvbXB1dGVGdWxsS2V5IiwiaGF2ZUVxdWFsU2lnbmF0dXJlcyIsImlzUmVhY3RDbGFzcyIsImNhblByZXNlcnZlU3RhdGVCZXR3ZWVuIiwicmVzb2x2ZUZhbWlseSIsImNsb25lTWFwIiwibWFwLmZvckVhY2gkYXJndW1lbnRfMCIsImNsb25lU2V0Iiwic2V0LmZvckVhY2gkYXJndW1lbnRfMCIsImdldFByb3BlcnR5IiwicGVyZm9ybVJlYWN0UmVmcmVzaCIsInVwZGF0ZXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiaGVscGVyc0J5UmVuZGVyZXJJRC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJmYWlsZWRSb290c1NuYXBzaG90LmZvckVhY2gkYXJndW1lbnRfMCIsIm1vdW50ZWRSb290c1NuYXBzaG90LmZvckVhY2gkYXJndW1lbnRfMCIsInJlZ2lzdGVyIiwic2V0U2lnbmF0dXJlIiwiY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlIiwiZ2V0RmFtaWx5QnlJRCIsImdldEZhbWlseUJ5VHlwZSIsImZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXMiLCJtb3VudGVkUm9vdHMuZm9yRWFjaCRhcmd1bWVudF8wIiwiaW5zdGFuY2VzRm9yUm9vdC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJpbmplY3RJbnRvR2xvYmFsSG9vayIsImhvb2suaW5qZWN0IiwiaG9vay5vblNjaGVkdWxlRmliZXJSb290IiwiaG9vay5vbkNvbW1pdEZpYmVyUm9vdCIsImhvb2sub25Db21taXRGaWJlclVubW91bnQiLCJob29rLnJlbmRlcmVycy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJoYXNVbnJlY292ZXJhYmxlRXJyb3JzIiwiX2dldE1vdW50ZWRSb290Q291bnQiLCJjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSIsImlzTGlrZWx5Q29tcG9uZW50VHlwZSJdLCJtYXBwaW5ncyI6IkFBQTtHQ2E7QUNtQztDRGdEO0FFRTtDRnFCO0FHRTtDSEU7QUlFO0NKVTtBS0U7Q0xHO0FNRztjQ0U7R0RFO0NORTtBUUU7Y0NFO0dERTtDUkU7QVVHO0NWTztBV0U7b0JDaUI7S0RlO2dDRVE7S0ZJO2dDR1U7S0g2QjtpQ0lDO0tKbUI7Q1hVO0FnQkM7Q2hCNkM7QWlCQzswQ2pCVTtTaUJFO0NqQmlCO0FrQkc7Q2xCUTtBbUJDO0NuQkk7QW9CQztDcEJJO0FxQkM7eUJDRzsrQkNRO09ERTtLREM7Q3JCRztBd0JDO2dCQ2dCO1NERTs2QkVDLGdDRjsyQkdDLG9ESDs4QklDLGNKO2tCQ2U7S0RTOzJCS0s7S0xLOzZEeEJJLGN3QjsrQkVFO0tGWTs2QkdFO0tIMEM7Q3hCRTtBOEJDO0M5Qkc7QStCRTtDL0JJO0FnQ3VCO1doQ0s7S2dDNEI7Q2hDRTtBaUNDO0NqQ3dEO0dEYyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImFzeW5jUmVxdWVzdCIsIlByb21pc2UkYXJndW1lbnRfMCIsIk5ldHdvcmtpbmcuYWRkTGlzdGVuZXIkYXJndW1lbnRfMSIsIk5ldHdvcmtpbmcuc2VuZFJlcXVlc3QkYXJndW1lbnRfOCIsIlByb21pc2UuX2ZpbmFsbHkkYXJndW1lbnRfMCIsImJ1aWxkVXJsRm9yQnVuZGxlIiwibW9kdWxlLmV4cG9ydHMiLCJhc3luY1JlcXVlc3QudGhlbiRhcmd1bWVudF8wIiwiYXN5bmNSZXF1ZXN0LnRoZW4uX2NhdGNoJGFyZ3VtZW50XzAiLCJhc3luY1JlcXVlc3QudGhlbi5fY2F0Y2guX2ZpbmFsbHkkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQ3NCO0lDVztRQ0c7U0RJO1FDSTtTRFE7UUNJO1NESTtRQ0k7U0RTO1FFVztTRkU7S0RHO1lJQztHSks7Q0RDO0FNRTtDTks7aUJPRTtnQkNXO0tEc0I7aUJFQztLRkc7YUdDO0tISTtDUEkifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjb21wb25lbnRQcm92aWRlckluc3RydW1lbnRhdGlvbkhvb2siLCJzZXRXcmFwcGVyQ29tcG9uZW50UHJvdmlkZXIiLCJlbmFibGVBcmNoaXRlY3R1cmVJbmRpY2F0b3IiLCJyZWdpc3RlckNvbmZpZyIsImNvbmZpZy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJyZWdpc3RlckNvbXBvbmVudCIsInJ1bm5hYmxlcy5hcHBLZXkiLCJyZWdpc3RlclJ1bm5hYmxlIiwicmVnaXN0ZXJTZWN0aW9uIiwiZ2V0QXBwS2V5cyIsImdldFNlY3Rpb25LZXlzIiwiZ2V0U2VjdGlvbnMiLCJnZXRSdW5uYWJsZSIsImdldFJlZ2lzdHJ5Iiwic2V0Q29tcG9uZW50UHJvdmlkZXJJbnN0cnVtZW50YXRpb25Ib29rIiwicnVuQXBwbGljYXRpb24iLCJCdWdSZXBvcnRpbmcuYWRkU291cmNlJGFyZ3VtZW50XzEiLCJzZXRTdXJmYWNlUHJvcHMiLCJ1bm1vdW50QXBwbGljYXRpb25Db21wb25lbnRBdFJvb3RUYWciLCJyZWdpc3RlckhlYWRsZXNzVGFzayIsInJlZ2lzdGVyQ2FuY2VsbGFibGVIZWFkbGVzc1Rhc2skYXJndW1lbnRfMiIsIjxhbm9ueW1vdXM+IiwicmVnaXN0ZXJDYW5jZWxsYWJsZUhlYWRsZXNzVGFzayIsInN0YXJ0SGVhZGxlc3NUYXNrIiwidGFza1Byb3ZpZGVyLnRoZW4kYXJndW1lbnRfMCIsInRhc2tQcm92aWRlci50aGVuLl9jYXRjaCRhcmd1bWVudF8wIiwiTmF0aXZlSGVhZGxlc3NKc1Rhc2tTdXBwb3J0Lm5vdGlmeVRhc2tSZXRyeS50aGVuJGFyZ3VtZW50XzAiLCJjYW5jZWxIZWFkbGVzc1Rhc2siLCJyZWdpc3RlckNvbXBvbmVudCRhcmd1bWVudF8xIiwiTm9PcCJdLCJtYXBwaW5ncyI6IkFBQTtFQ3FFLDZDRDtFRVc7R0ZFO0VHRTtHSEU7RUlFO21CQ0M7S0RnQjtHSkM7RU1PO3dCQ007S0RxQjtHTks7RVFFO0dSRztFU0U7R1RFO0VVRTtHVkU7RVdFO0dYRTtFWUU7R1pJO0VhRTtHYkU7RWNFO0dkSztFZUU7R2ZJO0VnQk87UUNhLFNEO0doQmE7RWtCSztRRGMsU0M7R2xCWTtFbUJPO0duQkU7RW9CTztnRUNFLE1DO0tGRTtHcEJDO0V1Qk87R3ZCWTtFd0JPO1lDVTtPREk7YUVDO1lDUzthREk7T0ZHO0d4QkM7RTRCTztHNUJNO3dDNkJJO1dDSTtLREU7QzdCRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImRlZmF1bHRFeHRyYXMiLCJhZGRGaWxlU291cmNlJGFyZ3VtZW50XzEiLCJCdWdSZXBvcnRpbmciLCJfbWF5YmVJbml0IiwiYWRkU291cmNlIiwiYWRkRmlsZVNvdXJjZSIsIl9hZGRTb3VyY2UiLCJyZW1vdmUiLCJjb2xsZWN0RXh0cmFEYXRhIl0sIm1hcHBpbmdzIjoiQUFBO0FDdUI7b0RDQztnQ0RDO0NERTtBR1E7RUNNO0dEbUI7RUVVO0dGSztFR1U7R0hLO0VJRTtjQ2E7T0RFO0dKRTtFTVE7R05tQjtDSEMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJkdW1wUmVhY3RUcmVlIiwiZ2V0UmVhY3RUcmVlIl0sIm1hcHBpbmdzIjoiQUFBO0FDeUI7Q0RNO0FFRTtDRmlCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2V0QWN0aXZlU2NlbmUiLCJfbGlzdGVuZXJzLmZvckVhY2gkYXJndW1lbnRfMCIsImdldEFjdGl2ZVNjZW5lIiwiYWRkQWN0aXZlU2NlbmVDaGFuZ2VkTGlzdGVuZXIiLCJyZW1vdmUiLCJfbGlzdGVuZXJzLmZpbHRlciRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0VDbUI7dUJDRSxrQ0Q7R0RDO0VHRTtHSEU7RUlFO2NDTTt1Q0NDLGlDRDtPREM7R0pFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSGVhZGxlc3NKc1Rhc2tFcnJvciJdLCJtYXBwaW5ncyI6IkFBQTtlQ1UsMENEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyQXBwbGljYXRpb24iXSwibWFwcGluZ3MiOiJBQUE7ZUM2QjtDRDRFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwidXNlUGVyZm9ybWFuY2VMb2dnZXIiXSwibWFwcGluZ3MiOiJBQUE7T0M0QjtDREUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJJbnNwZWN0b3JEZWZlcnJlZCIsIkFwcENvbnRhaW5lciIsInVzZUVmZmVjdCRhcmd1bWVudF8wIiwiUkNURGV2aWNlRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyJGFyZ3VtZW50XzEiLCJzZXRTaG91bGRSZW5kZXJJbnNwZWN0b3IkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+Iiwib25JbnNwZWN0ZWRWaWV3UmVyZW5kZXJSZXF1ZXN0Iiwic2V0S2V5JGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7MEJDZ0Q7Q0RnQjtxQkVFO1lDd0I7UUNLLCtCQyxlRCxDRDtXR1c7S0hTO0dERTtJS3lCLGFDLFVELENMO0NGaUMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSZWFjdC5mb3J3YXJkUmVmJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7RUM4QjtHRDRHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkuZ2V0JGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7Z0RDNEcsNEJEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2V0UnVudGltZUNvbmZpZ1Byb3ZpZGVyIiwiZ2V0IiwiUmVhY3ROYXRpdmVWaWV3Q29uZmlnUmVnaXN0cnkucmVnaXN0ZXIkYXJndW1lbnRfMSIsImdldFdpdGhGYWxsYmFja19ERVBSRUNBVEVEIiwiRmFsbGJhY2tOYXRpdmVDb21wb25lbnQiLCJoYXNOYXRpdmVWaWV3Q29uZmlnIiwidW5zdGFibGVfaGFzU3RhdGljVmlld0NvbmZpZyJdLCJtYXBwaW5ncyI6IkFBQTtPQ2lDO0NEVTtPRVE7K0NDSTtHRDhDO0NGSTtPSVc7a0NDaUI7R0RFO0NKRztBTUU7Q05HO09PUTtDUEsifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXROYXRpdmVDb21wb25lbnRBdHRyaWJ1dGVzIiwiYXR0YWNoRGVmYXVsdEV2ZW50VHlwZXMiLCJtZXJnZSIsImdldERpZmZlckZvclR5cGUiLCJnZXRQcm9jZXNzb3JGb3JUeXBlIl0sIm1hcHBpbmdzIjoiQUFBO0FDd0I7Q0QyRTtBRUU7Q0ZxQjtBR0c7Q0gwQjtBSUU7Q0pvQjtBS0U7Q0xzQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImlzRmFicmljUmVhY3RUYWciLCJtZWFzdXJlIiwibWVhc3VyZUluV2luZG93IiwibWVhc3VyZUxheW91dCIsIm1lYXN1cmVMYXlvdXRSZWxhdGl2ZVRvUGFyZW50IiwiRmFicmljVUlNYW5hZ2VyLm1lYXN1cmUkYXJndW1lbnRfMSIsImRpc3BhdGNoVmlld01hbmFnZXJDb21tYW5kIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTtDREc7RUVVO0dGMEI7RUdFO0dId0I7RUlFO0dKcUM7RUtFO1VDb0I7V0RFO0dMVztFT0U7R1BpQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm51bGx0aHJvd3MiXSwibWFwcGluZ3MiOiJBQUE7QUNFO0NETyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJhaXNlU29mdEVycm9yIiwiPGFub255bW91cz4iLCJVSU1hbmFnZXJKU092ZXJyaWRlbkFQSXMubWVhc3VyZSIsIlVJTWFuYWdlckpTT3ZlcnJpZGVuQVBJcy5tZWFzdXJlSW5XaW5kb3ciLCJVSU1hbmFnZXJKU092ZXJyaWRlbkFQSXMubWVhc3VyZUxheW91dCIsIlVJTWFuYWdlckpTT3ZlcnJpZGVuQVBJcy5tZWFzdXJlTGF5b3V0UmVsYXRpdmVUb1BhcmVudCIsIlVJTWFuYWdlckpTT3ZlcnJpZGVuQVBJcy5kaXNwYXRjaFZpZXdNYW5hZ2VyQ29tbWFuZCIsIlVJTWFuYWdlckpTVW51c2VkSW5OZXdBcmNoQVBJcy5jcmVhdGVWaWV3IiwiVUlNYW5hZ2VySlNVbnVzZWRJbk5ld0FyY2hBUElzLnVwZGF0ZVZpZXciLCJVSU1hbmFnZXJKU1VudXNlZEluTmV3QXJjaEFQSXMuc2V0Q2hpbGRyZW4iLCJVSU1hbmFnZXJKU1VudXNlZEluTmV3QXJjaEFQSXMubWFuYWdlQ2hpbGRyZW4iLCJVSU1hbmFnZXJKU1VudXNlZEluTmV3QXJjaEFQSXMuc2V0SlNSZXNwb25kZXIiLCJVSU1hbmFnZXJKU1VudXNlZEluTmV3QXJjaEFQSXMuY2xlYXJKU1Jlc3BvbmRlciIsIlBsYXRmb3JtLnNlbGVjdCRhcmd1bWVudF8wLmFuZHJvaWQuc2hvd1BvcHVwTWVudSIsIlBsYXRmb3JtLnNlbGVjdCRhcmd1bWVudF8wLmFuZHJvaWQuZGlzbWlzc1BvcHVwTWVudSIsIlBsYXRmb3JtLnNlbGVjdCRhcmd1bWVudF8wLmFuZHJvaWQuZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXIiLCJQbGF0Zm9ybS5zZWxlY3QkYXJndW1lbnRfMC5hbmRyb2lkLmdldERlZmF1bHRFdmVudFR5cGVzIiwiUGxhdGZvcm0uc2VsZWN0JGFyZ3VtZW50XzAuYW5kcm9pZC5zZXRMYXlvdXRBbmltYXRpb25FbmFibGVkRXhwZXJpbWVudGFsIiwiUGxhdGZvcm0uc2VsZWN0JGFyZ3VtZW50XzAuYW5kcm9pZC5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50IiwiUGxhdGZvcm0uc2VsZWN0JGFyZ3VtZW50XzAuaW9zLmxhemlseUxvYWRWaWV3IiwiUGxhdGZvcm0uc2VsZWN0JGFyZ3VtZW50XzAuaW9zLmZvY3VzIiwiUGxhdGZvcm0uc2VsZWN0JGFyZ3VtZW50XzAuaW9zLmJsdXIiLCJVSU1hbmFnZXJKUy5nZXRWaWV3TWFuYWdlckNvbmZpZyIsIlVJTWFuYWdlckpTLmhhc1ZpZXdNYW5hZ2VyQ29uZmlnIiwiVUlNYW5hZ2VySlMuZ2V0Q29uc3RhbnRzIiwiVUlNYW5hZ2VySlMuZmluZFN1YnZpZXdJbiIsIkZhYnJpY1VJTWFuYWdlci5maW5kTm9kZUF0UG9pbnQkYXJndW1lbnRfMyIsIkZhYnJpY1VJTWFuYWdlci5tZWFzdXJlJGFyZ3VtZW50XzEiLCJVSU1hbmFnZXJKUy52aWV3SXNEZXNjZW5kYW50T2YiLCJVSU1hbmFnZXJKUy5jb25maWd1cmVOZXh0TGF5b3V0QW5pbWF0aW9uIiwiT2JqZWN0LmtleXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiVUlNYW5hZ2VySlMuZ2V0Q29uc3RhbnRzLlZpZXdNYW5hZ2VyTmFtZXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5JGFyZ3VtZW50XzIuZ2V0Il0sIm1hcHBpbmdzIjoiQUFBO0FDcUI7Q0RLO3FDRUs7Q0ZVO29DRVE7Q0ZVO1dHTztHSFk7bUJJQztHSks7aUJLQztHTFk7aUNNQztHTlc7OEJPQztHUE07Y1FTO0dSTztjU0M7R1RFO2VVQztHVkU7a0JXQztHWFM7a0JZQztHWkU7b0JhQztHYkU7bUJjVTtLZFU7c0JlRTtLZks7Z0NnQk07S2hCTzswQmlCQztLakJPOzJDa0JDO0tsQlc7NEJtQkM7S25CcUM7b0JvQlE7S3BCRztXcUJDO0tyQlM7VXNCQztLdEJTO3dCdUJTO0d2QmtCO3dCd0JDO0d4QkU7Z0J5QkM7R3pCTztpQjBCQztNQ3lCO1VDbUI7V0RFO09ERTtHMUJFO3NCNkJDO0c3QmtDO2dDOEJDO0c5Qlc7cUQrQkk7Ry9CRTt3RGdDRzthQ0U7NkVEQztLaENFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0RmFicmljVUlNYW5hZ2VyIiwiY3JlYXRlUHJveHlXaXRoQ2FjaGVkUHJvcGVydGllcyIsImRlZmluZUxhenlPYmplY3RQcm9wZXJ0eSRhcmd1bWVudF8yLmdldCJdLCJtYXBwaW5ncyI6IkFBQTtPQ3FLO0NEVztBRU87V0NRLGtDRDtDRkkifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJ1bnN0YWJsZV9oYXNDb21wb25lbnQiXSwibWFwcGluZ3MiOiJBQUE7T0NrQjtDRFcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRDb25zdGFudHMiLCJnZXRWaWV3TWFuYWdlckNvbmZpZyIsIlVJTWFuYWdlckpTLmNyZWF0ZVZpZXciLCJVSU1hbmFnZXJKUy5nZXRDb25zdGFudHMiLCJVSU1hbmFnZXJKUy5nZXRWaWV3TWFuYWdlckNvbmZpZyIsIlVJTWFuYWdlckpTLmhhc1ZpZXdNYW5hZ2VyQ29uZmlnIiwibGF6aWZ5Vmlld01hbmFnZXJDb25maWciLCJkZWZpbmVMYXp5T2JqZWN0UHJvcGVydHkkYXJndW1lbnRfMi5nZXQiLCJPYmplY3Qua2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJOYXRpdmVVSU1hbmFnZXIuZ2V0Q29uc3RhbnRzLlZpZXdNYW5hZ2VyTmFtZXMuZm9yRWFjaCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDMkI7Q0RNO0FFRTtDRjRDO0VHSztHSGE7RUlDO0dKRTtFS0M7R0xFO0VNQztHTkU7QU9VO1dDSzsyQ0NJO1dESztPREU7V0NHOzJDQ0s7V0RLO09ERTtDUEc7c0NTUTtHVEU7MERVRTtXRkU7K0VFQztHVkU7c0NTSTthRE07U0NPO0dURyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm1hdHJpY2VzRGlmZmVyIl0sIm1hcHBpbmdzIjoiQUFBO3VCQ3FCO0NEMkIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJwb2ludHNEaWZmZXIiXSwibWFwcGluZ3MiOiJBQUE7cUJDb0I7Q0RJIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiaW5zZXRzRGlmZmVyIl0sIm1hcHBpbmdzIjoiQUFBO3FCQzJCO0NEVSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInByb2Nlc3NDb2xvckFycmF5IiwicHJvY2Vzc0NvbG9yRWxlbWVudCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2tCO0NESTtBRUU7Q0ZRIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0U291cmNlQ29kZVNjcmlwdFVSTCIsImdldERldlNlcnZlclVSTCIsIl9jb2VyY2VMb2NhbFNjcmlwdFVSTCIsImdldFNjcmlwdFVSTCIsInNldEN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyIiwiYWRkQ3VzdG9tU291cmNlVHJhbnNmb3JtZXIiLCJyZXNvbHZlQXNzZXRTb3VyY2UiXSwibWFwcGluZ3MiOiJBQUE7QUM4QjtDRE87QUVFO0NGYTtBR0U7Q0hvQjtBSUU7Q0pLO0FLTztDTEk7QU1NO0NOSTtBT007Q1A2QiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJlZ2lzdGVyQXNzZXQiLCJnZXRBc3NldEJ5SUQiXSwibWFwcGluZ3MiOiJBQUE7QUMyQjtDREk7QUVFO0NGRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldFNjYWxlZEFzc2V0UGF0aCIsImdldEFzc2V0UGF0aEluRHJhd2FibGVGb2xkZXIiLCJBc3NldFNvdXJjZVJlc29sdmVyIiwiY29uc3RydWN0b3IiLCJpc0xvYWRlZEZyb21TZXJ2ZXIiLCJpc0xvYWRlZEZyb21GaWxlU3lzdGVtIiwiZGVmYXVsdEFzc2V0IiwiYXNzZXRTZXJ2ZXJVUkwiLCJzY2FsZWRBc3NldFBhdGgiLCJzY2FsZWRBc3NldFVSTE5lYXJCdW5kbGUiLCJyZXNvdXJjZUlkZW50aWZpZXJXaXRob3V0U2NhbGUiLCJkcmF3YWJsZUZvbGRlckluQnVuZGxlIiwiZnJvbVNvdXJjZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ21DO0NESztBRUs7Q0ZLO0FHRTtFQ087R0RJO0VFRTtHRkU7RUdFO0dIRTtFSUU7R0pZO0VLTTtHTFU7RU1NO0dORTtFT007R1BRO0VRUTtHUk07RVNPO0dURztFVUU7R1ZRO0NISSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInBpY2tTY2FsZSIsInNldFVybENhY2hlQnJlYWtlciIsImdldFVybENhY2hlQnJlYWtlciJdLCJtYXBwaW5ncyI6IkFBQTtPQ2U7Q0RjO09FRTtDRkU7T0dFO0NIVyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBpeGVsUmF0aW8iLCJnZXQiLCJnZXRGb250U2NhbGUiLCJnZXRQaXhlbFNpemVGb3JMYXlvdXRTaXplIiwicm91bmRUb05lYXJlc3RQaXhlbCIsInN0YXJ0RGV0ZWN0aW5nIl0sIm1hcHBpbmdzIjoiQUFBO0FDMEQ7RUN5QjtHREU7RUVhO0dGRTtFR087R0hFO0VJUTtHSkc7RUtHLDBCTDtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJEaW1lbnNpb25zIiwiZ2V0Iiwic2V0IiwiYWRkRXZlbnRMaXN0ZW5lciIsIlJDVERldmljZUV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lciRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO0FDMkI7RUNrQjtHREc7RUVRO0dGaUM7RUdVO0dIVTtDREM7RUtLO0dMRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldENvbnN0YW50cyJdLCJtYXBwaW5ncyI6IkFBQTtFQ2lEO0dESyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldEFuZHJvaWRBc3NldFN1ZmZpeCIsImdldEFuZHJvaWRSZXNvdXJjZUZvbGRlck5hbWUiLCJnZXRBbmRyb2lkUmVzb3VyY2VJZGVudGlmaWVyIiwiZ2V0QmFzZVBhdGgiXSwibWFwcGluZ3MiOiJBQUE7QUM2QjtDRFU7QUVjO0NGbUI7QUdFO0NITTtBSUU7Q0pHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicHJvY2Vzc0V2ZW50VHlwZXMiLCJyZWdpc3RlciIsImdldCJdLCJtYXBwaW5ncyI6IkFBQTtBQ29DO0NEK0I7T0VPO0NGYztPR087Q0g0QiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInZlcmlmeUNvbXBvbmVudEF0dHJpYnV0ZUVxdWl2YWxlbmNlIiwibGVmdGhhbmRPYmplY3REaWZmIiwiY29tcGFyZSIsImdldENvbmZpZ1dpdGhvdXRWaWV3UHJvcHMiLCJPYmplY3Qua2V5cy5maWx0ZXIkYXJndW1lbnRfMCIsIk9iamVjdC5rZXlzLmZpbHRlci5yZWR1Y2UkYXJndW1lbnRfMCIsInN0cmluZ2lmeVZpZXdDb25maWciLCJKU09OLnN0cmluZ2lmeSRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO2VDc0M7Q0RzQjtBRUk7RUNHO0dEa0I7Q0ZlO09JRTtZQ1MsK0NEOzZCRUM7S0ZHO0NKQztPT0U7SUNHO0tESztDUEcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJEeW5hbWljYWxseUluamVjdGVkQnlHZXN0dXJlSGFuZGxlciIsIkNvbmRpdGlvbmFsbHlJZ25vcmVkRXZlbnRIYW5kbGVycyIsImlzSWdub3JlZCJdLCJtYXBwaW5ncyI6IkFBQTtPQ2tCO0NERztPRWU7Q0ZPO09HRTtDSEsifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJ2YWxpZGF0ZSIsInN0cmluZ2lmeVZhbGlkYXRpb25SZXN1bHQiLCJkaWZmZXJlbmNlcy5tYXAkYXJndW1lbnRfMCIsImFjY3VtdWxhdGVEaWZmZXJlbmNlcyIsImlmT2JqZWN0Il0sIm1hcHBpbmdzIjoiQUFBO09DNEM7Q0QrQjtPRUU7dUJDUTtLRFU7Q0ZHO0FJRTtDSjBEO0FLRTtDTEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjcmVhdGVWaWV3Q29uZmlnIiwiY29tcG9zZUluZGV4ZXJzIl0sIm1hcHBpbmdzIjoiQUFBO09Db0I7Q0RzQjtBRUU7Q0ZPIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY29kZWdlbk5hdGl2ZUNvbW1hbmRzIiwib3B0aW9ucy5zdXBwb3J0ZWRDb21tYW5kcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJjb21tYW5kT2JqLmNvbW1hbmQiXSwibWFwcGluZ3MiOiJBQUE7QUNnQjtvQ0NHOzBCQ0U7S0RHO0dEQztDREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJEZWJ1Z2dpbmdPdmVybGF5IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSRhcmd1bWVudF8xIiwiaGlnaGxpZ2h0VHJhY2VVcGRhdGVzIiwidXBkYXRlcy5maWx0ZXIkYXJndW1lbnRfMCIsImhpZ2hsaWdodEVsZW1lbnRzIiwiY2xlYXJFbGVtZW50c0hpZ2hsaWdodCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2lDO0lDTTtNQ0M7VUNNLHFFRDtPRFM7TUdDO09IUTtNSUM7T0pRO01EQztDRGtCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwibW9kdWxlLmV4cG9ydHMuY29tcG9zZSIsIm1vZHVsZS5leHBvcnRzLnNldFN0eWxlQXR0cmlidXRlUHJlcHJvY2Vzc29yIiwibW9kdWxlLmV4cG9ydHMuY3JlYXRlIl0sIm1hcHBpbmdzIjoiQUFBO0VDOFE7R0RTO0VFaUM7R0Z5QjtFR007R0hZIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY29kZWdlbk5hdGl2ZUNvbXBvbmVudCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2lDO0NEdUMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZXF1aXJlTmF0aXZlQ29tcG9uZW50IiwiY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcyRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBOytCQzBCO3FEQ0M7aUREQzs0QkRDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcyJdLCJtYXBwaW5ncyI6IkFBQTt3Q0MyQjtDREsifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0JhdGNoZWRCcmlkZ2UiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0V4Y2VwdGlvbnNNYW5hZ2VyIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19QbGF0Zm9ybSIsIm1vZHVsZS5leHBvcnRzLmdldF9fUkNURXZlbnRFbWl0dGVyIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19SZWFjdE5hdGl2ZVZpZXdDb25maWdSZWdpc3RyeSIsIm1vZHVsZS5leHBvcnRzLmdldF9fVGV4dElucHV0U3RhdGUiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1VJTWFuYWdlciIsIm1vZHVsZS5leHBvcnRzLmdldF9fZGVlcERpZmZlciIsIm1vZHVsZS5leHBvcnRzLmdldF9fZGVlcEZyZWV6ZUFuZFRocm93T25NdXRhdGlvbkluRGV2IiwibW9kdWxlLmV4cG9ydHMuZ2V0X19mbGF0dGVuU3R5bGUiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1JlYWN0RmliZXJFcnJvckRpYWxvZyIsIm1vZHVsZS5leHBvcnRzLmdldF9fbGVnYWN5U2VuZEFjY2Vzc2liaWxpdHlFdmVudCIsIm1vZHVsZS5leHBvcnRzLmdldF9fUmF3RXZlbnRFbWl0dGVyIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19DdXN0b21FdmVudCIsIm1vZHVsZS5leHBvcnRzLmdldF9fY3JlYXRlQXR0cmlidXRlUGF5bG9hZCIsIm1vZHVsZS5leHBvcnRzLmdldF9fZGlmZkF0dHJpYnV0ZVBheWxvYWRzIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19jcmVhdGVQdWJsaWNJbnN0YW5jZSIsIm1vZHVsZS5leHBvcnRzLmdldF9fY3JlYXRlUHVibGljVGV4dEluc3RhbmNlIiwibW9kdWxlLmV4cG9ydHMuZ2V0X19nZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX2dldE5vZGVGcm9tUHVibGljSW5zdGFuY2UiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX2dldEludGVybmFsSW5zdGFuY2VIYW5kbGVGcm9tUHVibGljSW5zdGFuY2UiXSwibWFwcGluZ3MiOiJBQUE7RUN1QztHREU7RUVDO0dGRTtFR0M7R0hFO0VJQztHSkU7RUtDO0dMRTtFTUM7R05FO0VPQztHUEU7RVFFO0dSRTtFU0M7R1RJO0VVRTtHVkk7RVdDO0dYRTtFWUM7R1pFO0VhQztHYkU7RWNDO0dkRTtFZUM7R2ZHO0VnQkM7R2hCRztFaUJDO0dqQkc7RWtCQztHbEJHO0VtQkM7R25CRztFb0JDO0dwQkc7RXFCQztHckJHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVnaXN0ZXIiLCJnbG9iYWwuUk4kcmVnaXN0ZXJDYWxsYWJsZU1vZHVsZSRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO0VDZTswRENFLGtCRDtHREkifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjdXJyZW50bHlGb2N1c2VkSW5wdXQiLCJjdXJyZW50bHlGb2N1c2VkRmllbGQiLCJmb2N1c0lucHV0IiwiYmx1cklucHV0IiwiZm9jdXNGaWVsZCIsImJsdXJGaWVsZCIsImZvY3VzVGV4dElucHV0IiwiYmx1clRleHRJbnB1dCIsInJlZ2lzdGVySW5wdXQiLCJ1bnJlZ2lzdGVySW5wdXQiLCJpc1RleHRJbnB1dCJdLCJtYXBwaW5ncyI6IkFBQTtBQzJDO0NERTtBRU07Q0ZRO0FHRTtDSEk7QUlFO0NKSTtBS0U7Q0xNO0FNRTtDTk07QU9PO0NQZ0M7QVFPO0NSd0I7QVNFO0NUWTtBVUU7Q1ZXO0FXRTtDWFkifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJOYXRpdmVDb21wb25lbnRSZWdpc3RyeS5nZXQkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTtJQ29DLDRCRCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIk5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldCRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO0VDeXZCLDRCRCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVuc3RhYmxlX3NldExvZ0xpc3RlbmVycyIsImRlZXBEaWZmZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNvQjtDREU7bUJFSztDRnNFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2hvd0Vycm9yRGlhbG9nIl0sIm1hcHBpbmdzIjoiQUFBO0VDMEI7R0RnQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkN1c3RvbUV2ZW50IiwiY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUE7QUNvQjtFQ0c7R0RLO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkV2ZW50UG9seWZpbGwiLCJjb25zdHJ1Y3RvciIsImNvbXBvc2VkUGF0aCIsInByZXZlbnREZWZhdWx0IiwiaW5pdEV2ZW50Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwic2V0U3ludGhldGljRXZlbnQiXSwibWFwcGluZ3MiOiJBQUE7QUNrSTtFQytCO0dEOEI7RUVFO0dGRTtFR0U7R0hPO0VJRTtHSkk7RUtFO0dMRTtFTUU7R05LO0VPRTtHUEU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZGVmYXVsdERpZmZlciIsInJlc3RvcmVEZWxldGVkVmFsdWVzSW5OZXN0ZWRBcnJheSIsImRpZmZOZXN0ZWRBcnJheVByb3BlcnR5IiwiZGlmZk5lc3RlZFByb3BlcnR5IiwiYWRkTmVzdGVkUHJvcGVydHkiLCJjbGVhck5lc3RlZFByb3BlcnR5IiwiZGlmZlByb3BlcnRpZXMiLCJhZGRQcm9wZXJ0aWVzIiwiY2xlYXJQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiZGlmZiJdLCJtYXBwaW5ncyI6IkFBQTtBQ29DO0NEUTtBRUU7Q0YyRDtBR0U7Q0hvQztBSUU7Q0p1RDtBS087Q0x3QjtBTU07Q051QjtBT1E7Q1A4SztBUUs7Q1JPO0FTTTtDVE87T1VFO0NWUztPV0U7Q1hXIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY3JlYXRlUHVibGljSW5zdGFuY2UiLCJjcmVhdGVQdWJsaWNUZXh0SW5zdGFuY2UiLCJnZXROYXRpdmVUYWdGcm9tUHVibGljSW5zdGFuY2UiLCJnZXROb2RlRnJvbVB1YmxpY0luc3RhbmNlIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZUhhbmRsZUZyb21QdWJsaWNJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQTtPQ29DO0NEaUI7T0VFO0NGUztPR0U7Q0hJO09JRTtDSmM7T0tFO0NMVyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNyZWF0ZUdldHRlciIsIjxhbm9ueW1vdXM+IiwiY3JlYXRlSmF2YVNjcmlwdEZsYWdHZXR0ZXIiLCJjcmVhdGVHZXR0ZXIkYXJndW1lbnRfMSIsImNyZWF0ZU5hdGl2ZUZsYWdHZXR0ZXIiLCJnZXRPdmVycmlkZXMiLCJzZXRPdmVycmlkZXMiXSwibWFwcGluZ3MiOiJBQUE7QUNzQjtTQ087R0RNO0NEQztPR0U7SUNRLGlDRDtDSEc7T0tJO0lETSxxREM7Q0xHO09NRTtDTkU7T09FO0NQZSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm5vb3AiLCJSZWFjdE5hdGl2ZUVsZW1lbnQiLCJjb25zdHJ1Y3RvciIsImdldF9fb2Zmc2V0SGVpZ2h0IiwiZ2V0X19vZmZzZXRMZWZ0IiwiZ2V0X19vZmZzZXRQYXJlbnQiLCJnZXRfX29mZnNldFRvcCIsImdldF9fb2Zmc2V0V2lkdGgiLCJibHVyIiwiZm9jdXMiLCJtZWFzdXJlIiwibWVhc3VyZUluV2luZG93IiwibWVhc3VyZUxheW91dCIsInNldE5hdGl2ZVByb3BzIl0sIm1hcHBpbmdzIjoiQUFBO2FDbUMsUUQ7ZUVFO0VDVTtHRFU7RUVFO0dGSTtFR0U7R0hXO0VJRTtHSm9CO0VLRTtHTFc7RU1FO0dOSTtFT007R1BHO0VRRTtHUkc7RVNFO0dUSztFVUU7R1ZLO0VXRTtHWDBCO0VZRTtHWmU7Q0ZDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwid2FybkZvclN0eWxlUHJvcHMiXSwibWFwcGluZ3MiOiJBQUE7ZUNZO0NEbUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSZWFkT25seUVsZW1lbnQiLCJnZXRfX2NoaWxkRWxlbWVudENvdW50IiwiZ2V0X19jaGlsZHJlbiIsImdldF9fY2xpZW50SGVpZ2h0IiwiZ2V0X19jbGllbnRMZWZ0IiwiZ2V0X19jbGllbnRUb3AiLCJnZXRfX2NsaWVudFdpZHRoIiwiZ2V0X19maXJzdEVsZW1lbnRDaGlsZCIsImdldF9faWQiLCJnZXRfX2xhc3RFbGVtZW50Q2hpbGQiLCJnZXRfX25leHRFbGVtZW50U2libGluZyIsImdldF9fbm9kZU5hbWUiLCJnZXRfX25vZGVUeXBlIiwiZ2V0X19ub2RlVmFsdWUiLCJzZXRfX25vZGVWYWx1ZSIsImdldF9fcHJldmlvdXNFbGVtZW50U2libGluZyIsImdldF9fc2Nyb2xsSGVpZ2h0IiwiZ2V0X19zY3JvbGxMZWZ0IiwiZ2V0X19zY3JvbGxUb3AiLCJnZXRfX3Njcm9sbFdpZHRoIiwiZ2V0X190YWdOYW1lIiwiZ2V0X190ZXh0Q29udGVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhhc1BvaW50ZXJDYXB0dXJlIiwic2V0UG9pbnRlckNhcHR1cmUiLCJyZWxlYXNlUG9pbnRlckNhcHR1cmUiLCJnZXRDaGlsZEVsZW1lbnRzIiwiZ2V0Q2hpbGROb2Rlcy5maWx0ZXIkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtlQ3lCO0VDQztHREU7RUVFO0dGRTtFR0U7R0hXO0VJRTtHSlc7RUtFO0dMVztFTUU7R05XO0VPRTtHUFE7RVFFO0dSTTtFU0U7R1RRO0VVRTtHVkU7RVdFO0dYRTtFWUU7R1pFO0VhRTtHYkU7RWNFLHFDZDtFZUU7R2ZFO0VnQkU7R2hCVztFaUJFO0dqQmE7RWtCRTtHbEJhO0VtQkU7R25CVztFb0JFO0dwQlE7RXFCRTtHckJRO0VzQkU7R3RCRTtFdUJLO0d2QlM7RXdCRTtHeEJLO0V5QkU7R3pCSztDREM7QTJCRTtJQ0csaUREO0MzQkU7T3VCTztDdkJtQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJlYWRPbmx5Tm9kZSIsImNvbnN0cnVjdG9yIiwiZ2V0X19jaGlsZE5vZGVzIiwiZ2V0X19maXJzdENoaWxkIiwiZ2V0X19pc0Nvbm5lY3RlZCIsImdldF9fbGFzdENoaWxkIiwiZ2V0X19uZXh0U2libGluZyIsImdldF9fbm9kZU5hbWUiLCJnZXRfX25vZGVUeXBlIiwiZ2V0X19ub2RlVmFsdWUiLCJnZXRfX3BhcmVudEVsZW1lbnQiLCJnZXRfX3BhcmVudE5vZGUiLCJnZXRfX3ByZXZpb3VzU2libGluZyIsImdldF9fdGV4dENvbnRlbnQiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImNvbnRhaW5zIiwiZ2V0Um9vdE5vZGUiLCJoYXNDaGlsZE5vZGVzIiwiZ2V0SW5zdGFuY2VIYW5kbGUiLCJzZXRJbnN0YW5jZUhhbmRsZSIsImdldFNoYWRvd05vZGUiLCJnZXRDaGlsZE5vZGVzIiwiY2hpbGROb2RlSW5zdGFuY2VIYW5kbGVzLm1hcCRhcmd1bWVudF8wIiwiZ2V0Tm9kZVNpYmxpbmdzQW5kUG9zaXRpb24iLCJnZXRQdWJsaWNJbnN0YW5jZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlIl0sIm1hcHBpbmdzIjoiQUFBO2VDMkI7RUNDO0dERTtFRUU7R0ZHO0VHRTtHSFE7RUlFO0dKUTtFS0U7R0xRO0VNRTtHTlM7RU9LO0dQSTtFUUs7R1JJO0VTSztHVEk7RVVFO0dWYTtFV0U7R1hrQjtFWUU7R1pTO0VhSztHYkk7RWNFO0dkaUI7RWVFO0dmUTtFZ0JFO0doQlc7RWlCRTtHakJFO0NEd0Y7T21CSTtDbkJHO0FvQkU7Q3BCTTtPcUJFO0NyQks7T3NCRTtTQ2E7aUVEQztDdEJHO0F3QkU7Q3hCaUI7T3lCRTtDekJVIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTm9kZUxpc3QiLCJjb25zdHJ1Y3RvciIsImdldF9fbGVuZ3RoIiwiaXRlbSIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5cyIsInZhbHVlcyIsIkBAaXRlcmF0b3IiLCJjcmVhdGVOb2RlTGlzdCJdLCJtYXBwaW5ncyI6IkFBQTtlQ3dCO0VDUztHRFE7RUVFO0dGRTtFR0U7R0hVO0VJRTtHSkU7RUtFO0dMZ0I7RU1FO0dORTtFT0U7R1BFO0VRRztHUkU7Q0RDO09VUTtDVkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjcmVhdGVWYWx1ZUl0ZXJhdG9yIiwiY3JlYXRlS2V5SXRlcmF0b3IiLCJjcmVhdGVFbnRyaWVzSXRlcmF0b3IiXSwibWFwcGluZ3MiOiJBQUE7T0N5QjtDREk7T0VFO0NGTTtPR0U7Q0hNIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSFRNTENvbGxlY3Rpb24iLCJjb25zdHJ1Y3RvciIsImdldF9fbGVuZ3RoIiwiaXRlbSIsIm5hbWVkSXRlbSIsIkBAaXRlcmF0b3IiLCJjcmVhdGVIVE1MQ29sbGVjdGlvbiJdLCJtYXBwaW5ncyI6IkFBQTtlQ29CO0VDUztHRFc7RUVFO0dGRTtFR0U7R0hVO0VJSztHSkU7RUtHO0dMRTtDREM7T09RO0NQSSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldEVsZW1lbnRTaWJsaW5nIl0sIm1hcHBpbmdzIjoiQUFBO09DbUI7Q0RrQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm5vb3AiLCJSZWFjdEZhYnJpY0hvc3RDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsImJsdXIiLCJmb2N1cyIsIm1lYXN1cmUiLCJtZWFzdXJlSW5XaW5kb3ciLCJtZWFzdXJlTGF5b3V0IiwidW5zdGFibGVfZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2V0TmF0aXZlUHJvcHMiXSwibWFwcGluZ3MiOiJBQUE7YUNvQyxRRDtlRUs7RUNPO0dEUTtFRUU7R0ZHO0VHRTtHSEc7RUlFO0dKTztFS0U7R0xPO0VNRTtHTmlDO0VPRTtHUGM7RVFFO0dSWTtDRkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSZWFkT25seVRleHQiLCJnZXRfX25vZGVOYW1lIiwiZ2V0X19ub2RlVHlwZSJdLCJtYXBwaW5ncyI6IkFBQTtlQ2U7RUNJO0dERTtFRUs7R0ZFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJlYWRPbmx5Q2hhcmFjdGVyRGF0YSIsImdldF9fbmV4dEVsZW1lbnRTaWJsaW5nIiwiZ2V0X19wcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwiZ2V0X19kYXRhIiwiZ2V0X19sZW5ndGgiLCJnZXRfX3RleHRDb250ZW50IiwiZ2V0X19ub2RlVmFsdWUiLCJzdWJzdHJpbmdEYXRhIl0sIm1hcHBpbmdzIjoiQUFBO2VDbUI7RUNDO0dERTtFRUU7R0ZFO0VHRTtHSFE7RUlFO0dKRTtFS0s7R0xFO0VNSztHTkU7RU9FO0dQYztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJ1c2VTdWJzY3JpYmVUb0RlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeSIsInVzZUVmZmVjdCRhcmd1bWVudF8wIiwiPGFub255bW91cz4iXSwibWFwcGluZ3MiOiJBQUE7K0NDbUI7WUNJO1dDSSxzREQ7R0RDO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkRlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeSIsImNvbnN0cnVjdG9yIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiLCI8YW5vbnltb3VzPiIsIlByb21pc2UkYXJndW1lbnRfMCIsImluc3RhbmNlLm1lYXN1cmUkYXJndW1lbnRfMCIsIlByb21pc2UuYWxsLnRoZW4kYXJndW1lbnRfMCIsIlByb21pc2UuYWxsLnRoZW4uX2NhdGNoJGFyZ3VtZW50XzAiLCJlbGVtZW50c1RvSGlnaGxpZ2h0Lm1hcCRhcmd1bWVudF8wIiwiZWxlbWVudC5tZWFzdXJlJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUN5RDtFQ0k7R0RVO0VFRTtHRkU7RUdFO0dIUTtrQ0lFO0dKTTttQ0lFO0dKcUI7RUlFO0dKZTtFSUU7R0o0RTtjSUk7R0p3QztFSUU7R0owQztFSUc7MERDd0I7eUJDQztTRFc7T0RDO2NHVTtXSEc7ZUlFO1NKSztHSkU7Y0lJO0dKaUM7RUlFO3lES2tDO09MRztHSkk7RUlHO1FLd0I7d0NKQzs0QktDO2FMWTtXSUMsQ0w7Y0dJO1dIRztlSUU7U0pLO0dKRTtjSUk7R0pJO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJlYWN0RGV2VG9vbHNPdmVybGF5IiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJjbGVhbnVwIiwib25TdGFydEluc3BlY3RpbmdOYXRpdmUiLCJvblN0b3BJbnNwZWN0aW5nTmF0aXZlIiwiZmluZFZpZXdGb3JMb2NhdGlvbiIsImdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludCRhcmd1bWVudF8zIiwic3RvcEluc3BlY3RpbmciLCJvblBvaW50ZXJNb3ZlIiwib25SZXNwb25kZXJNb3ZlIiwic2hvdWxkU2V0UmVzcG9uZGVyIl0sIm1hcHBpbmdzIjoiQUFBO2VDZ0M7WUNPO0lDQztLRFU7SUVFO0tGRTtJR0U7S0hFO0dEYTtJS0c7UUNLO1NEZTtLTEU7cUNPSTtHUEk7SVFHO0tSRTtJU0s7S1RLO0lVSztLVkc7Q0RnQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInNob3VsZEVtaXRXM0NQb2ludGVyRXZlbnRzIiwic2hvdWxkUHJlc3NpYmlsaXR5VXNlVzNDUG9pbnRlckV2ZW50c0ZvckhvdmVyIl0sIm1hcHBpbmdzIjoiQUFBOzhCQzBCLFdEO2lERUMsV0YifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJFbGVtZW50Qm94IiwicmVuZGVyIiwicmVzb2x2ZVJlbGF0aXZlU2l6ZXMiLCJyZXNvbHZlU2l6ZUluUGxhY2UiXSwibWFwcGluZ3MiOiJBQUE7QUNvQjtFQ0M7R0RrRDtDREM7QUcrQjtDSE87QUlTO0NKa0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZXNvbHZlQm94U3R5bGUiXSwibWFwcGluZ3MiOiJBQUE7QUN3QjtDRHVGIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0STE4bk1hbmFnZXJDb25zdGFudHMiLCJtb2R1bGUuZXhwb3J0cy5nZXRDb25zdGFudHMiLCJtb2R1bGUuZXhwb3J0cy5hbGxvd1JUTCIsIm1vZHVsZS5leHBvcnRzLmZvcmNlUlRMIiwibW9kdWxlLmV4cG9ydHMuc3dhcExlZnRBbmRSaWdodEluUlRMIl0sIm1hcHBpbmdzIjoiQUFBO0FDZ0I7Q0RXO2dCRUc7R0ZFO1lHRTtHSE07WUlFO0dKTTt5QktFO0dMTSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkJvcmRlckJveCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2U7RUNDO0dEWTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJhcHBlbmRSZW5kZXJlciIsInZhbGlkYXRlUmVuZGVyZXJzIiwiZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdBdFBvaW50IiwicmVuZGVyZXIucmVuZGVyZXJDb25maWcuZ2V0SW5zcGVjdG9yRGF0YUZvclZpZXdBdFBvaW50JGFyZ3VtZW50XzMiXSwibWFwcGluZ3MiOiJBQUE7dUJDMEM7MEJEQztBRUc7Q0ZLO2lCR0U7UUNvQjtTREs7Q0hJIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiX0xvZ0JveE5vdGlmaWNhdGlvbkNvbnRhaW5lciIsIm9uRGlzbWlzc1dhcm5zIiwib25EaXNtaXNzRXJyb3JzIiwic2V0U2VsZWN0ZWRMb2ciLCJvcGVuTG9nIiwibG9ncy5maWx0ZXIkYXJndW1lbnRfMCIsIkxvZ0JveExvZ05vdGlmaWNhdGlvbi5wcm9wcy5vblByZXNzT3BlbiJdLCJtYXBwaW5ncyI6IkFBQTtPQ3VCO3lCQ0c7R0RFOzBCRUM7R0ZFO3lCR0U7R0hFO0VJRTtHSlE7K0JLTSwyQkw7SUtFLHFETDt5Qk1VLDRDTjt5Qk1XLHdDTjtDRE8ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJMb2dCb3hMb2dOb3RpZmljYXRpb24iLCJSZWFjdC51c2VFZmZlY3QkYXJndW1lbnRfMCIsIkNvdW50QmFkZ2UiLCJNZXNzYWdlIiwiRGlzbWlzc0J1dHRvbiJdLCJtYXBwaW5ncyI6IkFBQTtBQytCO2tCQ0k7R0RFO0NEbUI7QUdFO0NIYTtBSUU7Q0pjO0FLRTtDTHVCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0U2l6ZSIsIk5hdGl2ZUltYWdlTG9hZGVySU9TLmdldFNpemUudGhlbiRhcmd1bWVudF8wIiwiPGFub255bW91cz4iLCJnZXRTaXplV2l0aEhlYWRlcnMiLCJOYXRpdmVJbWFnZUxvYWRlcklPUy5nZXRTaXplV2l0aEhlYWRlcnMudGhlbiRhcmd1bWVudF8wIiwicHJlZmV0Y2hXaXRoTWV0YWRhdGEiLCJwcmVmZXRjaCIsInF1ZXJ5Q2FjaGUiLCJSZWFjdC5mb3J3YXJkUmVmJGFyZ3VtZW50XzAiLCJJbWFnZUFuYWx5dGljc1RhZ0NvbnRleHQuQ29uc3VtZXIucHJvcHMuY2hpbGRyZW4iXSwibWFwcGluZ3MiOiJBQUE7QUM2QjtVQ00sMkNEO1FFRztTRkU7Q0RFO0FJRTtVQ087S0RFO1FERztTQ0U7Q0pFO0FNRTtDTmdCO0FPRTtDUEU7QVFFO0NSSTttRFNTO09Dc0U7T0RlO0NURyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIk5hdGl2ZUNvbXBvbmVudFJlZ2lzdHJ5LmdldCRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO0lDc0ssNEJEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY3JlYXRlUm9vdFRhZyJdLCJtYXBwaW5ncyI6IkFBQTtPQ3dCO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldEltYWdlU291cmNlc0Zyb21JbWFnZVByb3BzIiwic3JjU2V0TGlzdC5mb3JFYWNoJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7T0NxQjt1QkNxQjtLRGU7Q0RzQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNvbnZlcnRPYmplY3RGaXRUb1Jlc2l6ZU1vZGUiXSwibWFwcGluZ3MiOiJBQUE7T0NZO0NEUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVuc3RhYmxlX3NldEltYWdlQ29tcG9uZW50RGVjb3JhdG9yIiwidW5zdGFibGVfZ2V0SW1hZ2VDb21wb25lbnREZWNvcmF0b3IiLCJ1bnN0YWJsZV9yZWdpc3RlckltYWdlQXR0YWNoZWRDYWxsYmFjayIsInVuc3RhYmxlX3VucmVnaXN0ZXJJbWFnZUF0dGFjaGVkQ2FsbGJhY2siLCJ1c2VXcmFwUmVmV2l0aEltYWdlQXR0YWNoZWRDYWxsYmFja3MiLCJpbWFnZUF0dGFjaGVkQ2FsbGJhY2tzUmVmLmN1cnJlbnQiLCJwZW5kaW5nQ2xlYW51cENhbGxiYWNrcy5jdXJyZW50LmZvckVhY2gkYXJndW1lbnRfMCIsImltYWdlQXR0YWNoZWRDYWxsYmFja3MuZm9yRWFjaCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO09DeUI7Q0RJO09FRTtDRkU7T0dVO0NISTtPSUU7Q0pJO09LRTt3Q0NTO2tEQ0csVUQ7dUNFSTtTRks7S0RFO0NMUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVzZU1lcmdlUmVmcyIsIjxhbm9ueW1vdXM+Il0sIm1hcHBpbmdzIjoiQUFBO2VDc0I7SUNJO0tEVTtDREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSZWFjdC5mb3J3YXJkUmVmJGFyZ3VtZW50XzAiLCJ1c2VNZW1vJGFyZ3VtZW50XzAiLCJvblByZXNzSW4iLCJvblByZXNzT3V0Iiwib25SZXNwb25kZXJHcmFudCIsIm9uUmVzcG9uZGVyTW92ZSIsIm9uUmVzcG9uZGVyUmVsZWFzZSIsIm9uUmVzcG9uZGVyVGVybWluYXRlIiwidXNlTGF6eUluaXRpYWxpemF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBO3FCQytCO0lDb0U7WUNPO2FEUztZRUM7YUZHO2NESztJQ2lCO1lHSTthSEs7WUlDO2FKSztZS0M7YUxLO1lNQzthTks7V0RLO0NEK0c7QVNTO0NUTSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlByZXNzYWJpbGl0eURlYnVnVmlldyIsImlzRW5hYmxlZCIsInNldEVuYWJsZWQiXSwibWFwcGluZ3MiOiJBQUE7T0NxQztDRGdDO09FSTtDRks7T0dFO0NISSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNyZWF0ZVNxdWFyZSIsIm5vcm1hbGl6ZVJlY3QiXSwibWFwcGluZ3MiOiJBQUE7T0NtQjtDREU7T0VFO0NGRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVzZVByZXNzYWJpbGl0eSIsInVzZUVmZmVjdCRhcmd1bWVudF8wIiwiPGFub255bW91cz4iXSwibWFwcGluZ3MiOiJBQUE7ZUM0QjtZQ1c7R0RJO1lDSTthQ0U7T0RFO0dERTtDREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJpc0FjdGl2ZVNpZ25hbCIsImlzQWN0aXZhdGlvblNpZ25hbCIsImlzUHJlc3NJblNpZ25hbCIsImlzVGVybWluYWxTaWduYWwiLCJQcmVzc2FiaWxpdHkiLCJjb25zdHJ1Y3RvciIsImNvbmZpZ3VyZSIsInJlc2V0IiwiZ2V0RXZlbnRIYW5kbGVycyIsInNldExvbmdQcmVzc0RlYWN0aXZhdGlvbkRpc3RhbmNlIiwiX2NyZWF0ZUV2ZW50SGFuZGxlcnMiLCJmb2N1c0V2ZW50SGFuZGxlcnMub25CbHVyIiwiZm9jdXNFdmVudEhhbmRsZXJzLm9uRm9jdXMiLCJyZXNwb25kZXJFdmVudEhhbmRsZXJzLm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXIiLCJyZXNwb25kZXJFdmVudEhhbmRsZXJzLm9uUmVzcG9uZGVyR3JhbnQiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJyZXNwb25kZXJFdmVudEhhbmRsZXJzLm9uUmVzcG9uZGVyTW92ZSIsInJlc3BvbmRlckV2ZW50SGFuZGxlcnMub25SZXNwb25kZXJSZWxlYXNlIiwicmVzcG9uZGVyRXZlbnRIYW5kbGVycy5vblJlc3BvbmRlclRlcm1pbmF0ZSIsInJlc3BvbmRlckV2ZW50SGFuZGxlcnMub25SZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3QiLCJyZXNwb25kZXJFdmVudEhhbmRsZXJzLm9uQ2xpY2siLCJyZXNwb25kZXJFdmVudEhhbmRsZXJzLm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXIudGVzdE9ubHlfcHJlc3NhYmlsaXR5Q29uZmlnIiwiaG92ZXJQb2ludGVyRXZlbnRzLm9uUG9pbnRlckVudGVyIiwiaG92ZXJQb2ludGVyRXZlbnRzLm9uUG9pbnRlckxlYXZlIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwiX3JlY2VpdmVTaWduYWwiLCJQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlci5lbWl0RXZlbnQkYXJndW1lbnRfMCIsIl9wZXJmb3JtVHJhbnNpdGlvblNpZGVFZmZlY3RzIiwiX2FjdGl2YXRlIiwiX2RlYWN0aXZhdGUiLCJfbWVhc3VyZVJlc3BvbmRlclJlZ2lvbiIsIl9tZWFzdXJlQ2FsbGJhY2siLCJfaXNUb3VjaFdpdGhpblJlc3BvbmRlclJlZ2lvbiIsIl9oYW5kbGVMb25nUHJlc3MiLCJfc2hvdWxkTG9uZ1ByZXNzQ2FuY2VsUHJlc3MiLCJfY2FuY2VsSG92ZXJJbkRlbGF5VGltZW91dCIsIl9jYW5jZWxIb3Zlck91dERlbGF5VGltZW91dCIsIl9jYW5jZWxMb25nUHJlc3NEZWxheVRpbWVvdXQiLCJfY2FuY2VsUHJlc3NEZWxheVRpbWVvdXQiLCJfY2FuY2VsUHJlc3NPdXREZWxheVRpbWVvdXQiLCJub3JtYWxpemVEZWxheSIsImdldFRvdWNoRnJvbVByZXNzRXZlbnQiLCJjb252ZXJ0UG9pbnRlckV2ZW50VG9Nb3VzZUV2ZW50Il0sIm1hcHBpbmdzIjoiQUFBO3VCQzRROzZDREU7MkJFRTt3Q0ZFO3dCR0U7NkNIRzt5QklFO3FFSkM7ZUtvSDtFQ3VCO0dERTtFRUU7R0ZFO0VHSztHSFU7RUlLO0dKSztFS0U7R0xFO0VNRTtjQ0U7T0RLO2VFQztPRks7aUNHSTtPSFM7d0JJRTsrQ0NXO1dERTtpRENVO1NERTtPSkc7dUJNRTtPTmlDOzBCT0U7T1BFOzRCUUU7T1JFO3FDU0U7T1RTO2VVRTtPVmtCO1FXTyxrQlg7NENZWTtxRFBPO2VPRTtTWks7NENhRzt3RFJRO2lCUUU7U2JNOzRCY1k7NkRUVzt1QlNFO2VkTTs0QmVFOzZEVlc7dUJVRTtlZk07R05RO0VzQk07b0RDTTtPREs7R3RCcUI7RXdCTTtHeEI0RDtFeUJFO0d6QlE7RTBCRTtnRGZlO1NlRTtHMUJNO0UyQkU7RzNCVTtxQjRCRTtHNUJpQjtFNkJFO0c3QjRDO0U4QkU7RzlCTztFK0JFO0cvQks7RWdDRTtHaENLO0VpQ0U7R2pDSztFa0NFO0dsQ0s7RW1DRTtHbkNLO0VvQ0U7R3BDSztDTEM7QTBDRTtDMUNNOytCMkNFO0MzQ1U7QTRDRTtDNUNZIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicGxheVRvdWNoU291bmQiXSwibWFwcGluZ3MiOiJBQUE7a0JDYTtHREkifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsImVtaXRFdmVudCIsIl9saXN0ZW5lcnMuZm9yRWFjaCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDbUI7RUNHLGdCRDtFRUU7R0ZFO0VHRTtHSEs7RUlFOzRCQ00sMkJEO0dKQztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJlbmFibGVIb3ZlciIsImRpc2FibGVIb3ZlciIsImlzSG92ZXJFbmFibGVkIl0sIm1hcHBpbmdzIjoiQUFBO3dCQ2lDO0tESzt5QkVFO0tGSztPR1E7Q0hFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY3JlYXRlUmVhY3ROYXRpdmVDb21wb25lbnRDbGFzcyRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBOzhDQ3VFO29DREM7eURDTTsrQ0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTG9nQm94QnV0dG9uIiwiVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrLnByb3BzLm9uUHJlc3NJbiIsIlRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjay5wcm9wcy5vblByZXNzT3V0Il0sIm1hcHBpbmdzIjoiQUFBO0FDK0I7aUJDK0Isc0JEO2tCRUMsdUJGO0NESSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjayIsInJlbmRlciIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjcmVhdGVQcmVzc2FiaWxpdHlDb25maWciXSwibWFwcGluZ3MiOiJBQUE7QUNxSDtFQ0s7R0QrRDtFRUU7R0ZFO0VHRTtHSEU7RUlFO0dKRTtDREM7QU1FO0NOd0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRCYWNrZ3JvdW5kQ29sb3IiLCJnZXRCYWNrZ3JvdW5kTGlnaHRDb2xvciIsImdldEJhY2tncm91bmREYXJrQ29sb3IiLCJnZXRXYXJuaW5nQ29sb3IiLCJnZXRXYXJuaW5nRGFya0NvbG9yIiwiZ2V0RmF0YWxDb2xvciIsImdldEZhdGFsRGFya0NvbG9yIiwiZ2V0RXJyb3JDb2xvciIsImdldEVycm9yRGFya0NvbG9yIiwiZ2V0TG9nQ29sb3IiLCJnZXRXYXJuaW5nSGlnaGxpZ2h0Q29sb3IiLCJnZXREaXZpZGVyQ29sb3IiLCJnZXRIaWdobGlnaHRDb2xvciIsImdldFRleHRDb2xvciJdLCJtYXBwaW5ncyI6IkFBQTtPQ1U7Q0RFO09FRTtDRkU7T0dFO0NIRTtPSUU7Q0pFO09LRTtDTEU7T01FO0NORTtPT0U7Q1BFO09RRTtDUkU7T1NFO0NURTtPVUU7Q1ZFO09XRTtDWEU7T1lFO0NaRTtPYUU7Q2JFO09jRTtDZEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRMaW5rUmFuZ2VzIiwiVGFwcGFibGVMaW5rcyIsIlRleHQucHJvcHMub25QcmVzcyIsImNsZWFuQ29udGVudCIsIkxvZ0JveE1lc3NhZ2UiLCJjcmVhdGVVbmRlckxlbmd0aCIsInN1YnN0aXR1dGlvbnMucmVkdWNlJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUMrQjtDRGU7QUVFO2lCQzZCO1NERztDRm9CO3FCSUU7MEVKQztBS0U7NEJDVztHRGtCOzBDRUU7R0ZnQjtDTFEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJMaW5raW5nIiwiY29uc3RydWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwib3BlblVSTCIsImNhbk9wZW5VUkwiLCJvcGVuU2V0dGluZ3MiLCJnZXRJbml0aWFsVVJMIiwic2VuZEludGVudCIsIlByb21pc2UkYXJndW1lbnRfMCIsIl92YWxpZGF0ZVVSTCJdLCJtYXBwaW5ncyI6IkFBQTtBQzZCO0VDQztHREU7RUVRO0dGTTtFR087R0hPO0VJTztHSk87RUtPO0dMTTtFTVE7R05JO0VPUzt5QkNXLHFERDtHUEU7RVNFO0dUTTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sbnVsbCxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkluc3BlY3RvciIsInNldFNlbGVjdGlvbiIsIm1lYXN1cmUkYXJndW1lbnRfMCIsIm9uVG91Y2hQb2ludCIsInNldFRvdWNoZWRWaWV3RGF0YSIsImdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludCRhcmd1bWVudF8zIiwic2V0SW5zcGVjdGluZyIsInNldFBlcmZpbmciLCJzZXROZXR3b3JraW5nIiwic2V0VG91Y2hUYXJnZXRpbmciXSwibWFwcGluZ3MiOiJBQUE7QUNvRDt1QkNlO1lDUztLRFE7R0RDO3VCR0U7K0JDQztLRCtCO01FTTtPRkc7R0hFO3dCTUU7R05HO3FCT0U7R1BHO3dCUUU7R1JHOzRCU0U7R1RHO0NEbUMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJJbnNwZWN0b3JPdmVybGF5IiwiZmluZFZpZXdGb3JUb3VjaEV2ZW50IiwiaGFuZGxlU3RhcnRTaG91bGRTZXRSZXNwb25kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUN5QjtnQ0NDO0dESTt3Q0VFO0dGRztDRGdCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSW5zcGVjdG9yUGFuZWwiLCJyZW5kZXJXYWl0aW5nIiwicmVuZGVyIiwiSW5zcGVjdG9yUGFuZWxCdXR0b24iLCJJbnNwZWN0b3JQYW5lbEJ1dHRvbiNyZW5kZXIiLCJUb3VjaGFibGVIaWdobGlnaHQucHJvcHMub25QcmVzcyJdLCJtYXBwaW5ncyI6IkFBQTtBQzBDO0VDQztHRE87RUVFO0dGZ0Q7Q0RDO0FJUTtFQ0M7aUJDRyw2Q0Q7R0RLO0NKQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNjcm9sbFZpZXciLCJjb25zdHJ1Y3RvciIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJnZXRTY3JvbGxSZXNwb25kZXIiLCJnZXRTY3JvbGxhYmxlTm9kZSIsImdldElubmVyVmlld05vZGUiLCJnZXRJbm5lclZpZXdSZWYiLCJnZXROYXRpdmVTY3JvbGxSZWYiLCJzY3JvbGxUbyIsInNjcm9sbFRvRW5kIiwiZmxhc2hTY3JvbGxJbmRpY2F0b3JzIiwic2Nyb2xsUmVzcG9uZGVyU2Nyb2xsTmF0aXZlSGFuZGxlVG9LZXlib2FyZCIsInNjcm9sbFJlc3BvbmRlclpvb21UbyIsIl90ZXh0SW5wdXRGb2N1c0Vycm9yIiwiX2lucHV0TWVhc3VyZUFuZFNjcm9sbFRvS2V5Ym9hcmQiLCJzY3JvbGxUZXh0SW5wdXRJbnRvVmlzaWJsZVJlY3QiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJfZ2V0S2V5Rm9ySW5kZXgiLCJfdXBkYXRlQW5pbWF0ZWROb2RlQXR0YWNobWVudCIsIl9zZXRTdGlja3lIZWFkZXJSZWYiLCJfb25TdGlja3lIZWFkZXJMYXlvdXQiLCJfaGFuZGxlU2Nyb2xsIiwiX2hhbmRsZUxheW91dCIsIl9oYW5kbGVDb250ZW50T25MYXlvdXQiLCJjcmVhdGVSZWZGb3J3YXJkZXIkYXJndW1lbnRfMCIsInNjcm9sbFJlc3BvbmRlcktleWJvYXJkV2lsbFNob3ciLCJzY3JvbGxSZXNwb25kZXJLZXlib2FyZFdpbGxIaWRlIiwic2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmREaWRTaG93Iiwic2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmREaWRIaWRlIiwiX2hhbmRsZU1vbWVudHVtU2Nyb2xsQmVnaW4iLCJfaGFuZGxlTW9tZW50dW1TY3JvbGxFbmQiLCJfaGFuZGxlU2Nyb2xsQmVnaW5EcmFnIiwiX2hhbmRsZVNjcm9sbEVuZERyYWciLCJfaXNBbmltYXRpbmciLCJfaGFuZGxlUmVzcG9uZGVyR3JhbnQiLCJfaGFuZGxlUmVzcG9uZGVyUmVqZWN0IiwiX2hhbmRsZVJlc3BvbmRlclJlbGVhc2UiLCJfaGFuZGxlUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0IiwiX2hhbmRsZVNjcm9sbFNob3VsZFNldFJlc3BvbmRlciIsIl9oYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlciIsIl9oYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlckNhcHR1cmUiLCJfa2V5Ym9hcmRJc0Rpc21pc3NpYmxlIiwiX3NvZnRLZXlib2FyZElzRGV0YWNoZWQiLCJfa2V5Ym9hcmRFdmVudHNBcmVVbnJlbGlhYmxlIiwiX2hhbmRsZVRvdWNoRW5kIiwiX2hhbmRsZVRvdWNoQ2FuY2VsIiwiX2hhbmRsZVRvdWNoU3RhcnQiLCJfaGFuZGxlVG91Y2hNb3ZlIiwicmVuZGVyIiwiZmlsdGVyJGFyZ3VtZW50XzAiLCJjaGlsZHJlbi5tYXAkYXJndW1lbnRfMCIsIlN0aWNreUhlYWRlckNvbXBvbmVudC5wcm9wcy5yZWYiLCJTdGlja3lIZWFkZXJDb21wb25lbnQucHJvcHMub25MYXlvdXQiLCJjcmVhdGVSZWZGb3J3YXJkZXIiLCJtZW1vaXplJGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsIldyYXBwZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNtc0I7RUNHO0dETztFRWtDO0dGaUM7RUdFO0dIWTtFSUU7R0ppQjtrREtRO0dMRztxQ01FO0dORTtvQ09FO0dQRTtvRFFFO0dSRTs4RFNFO0dURTtjVXdCO0dWbUM7Z0VXVTtHWFM7c0NZTztHWks7Y2FnQjtHYjRCO2NjaUI7R2Q0QjtFZUU7R2ZFO2NnQmlCOzJDQ0c7S0RrQjtpQkVPO09GRTtHaEJJO0VtQkU7R25CRztFb0JFO0dwQmU7RXFCRTtHckJTO0VzQkU7R3RCd0I7a0J1QkU7R3ZCRztrQndCRTtHeEJPOzJCeUJFO0d6Qkk7TTBCSSw0RDFCO0kwQk87SzFCNEI7Z0UyQmdDO0czQks7Z0U0QkU7RzVCSzsrRDZCRTtHN0JLOytEOEJFO0c5Qks7eUQrQks7Ry9CRzt1RGdDSztHaENJO3FEaUNTO0dqQ1c7bURrQ0s7R2xDYztnQ21DTztHbkNRO21Eb0NLO0dwQ0k7dUNxQ1ksUXJDO3FEc0NLO0d0QzRCO3NEdUNpQjtHdkNFO21Ed0NLO0d4Q007K0R5QzJCO0d6Q2lCO3NFMENhO0cxQ2dEOzBDMkNLO0czQ21COzJDNENPO0c1Q0U7Z0Q2Q0U7RzdDSTs2QzhDTztHOUN1QjtnRCtDTztHL0NHOytDZ0RhO0doREc7OENpRGE7R2pERTtFa0RFO1FDZSwwQ0Q7OEJFMEI7bUJDVSx5Q0Q7d0JFSSxzREY7T0ZXO0dsRDRJO0NEQztBd0RrQzs4QkNJO2FDQztPRGM7S0RDO0N4RE07QTJESTtDM0RFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiYWRkIiwic3VidHJhY3QiLCJkaXZpZGUiLCJtdWx0aXBseSIsIm1vZHVsbyIsImRpZmZDbGFtcCIsIl9jb21iaW5lQ2FsbGJhY2tzIiwiPGFub255bW91cz4iLCJtYXliZVZlY3RvckFuaW0iLCJzcHJpbmciLCJzdGFydCIsInN0b3AiLCJyZXNldCIsIl9zdGFydE5hdGl2ZUxvb3AiLCJfaXNVc2luZ05hdGl2ZURyaXZlciIsInRpbWluZyIsImRlY2F5Iiwic2VxdWVuY2UiLCJvbkNvbXBsZXRlIiwiYW5pbWF0aW9ucy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJwYXJhbGxlbCIsInJlc3VsdC5zdGFydCIsImNiIiwicmVzdWx0LnN0b3AiLCJyZXN1bHQucmVzZXQiLCJyZXN1bHQuX3N0YXJ0TmF0aXZlTG9vcCIsInJlc3VsdC5faXNVc2luZ05hdGl2ZURyaXZlciIsImRlbGF5Iiwic3RhZ2dlciIsImFuaW1hdGlvbnMubWFwJGFyZ3VtZW50XzAiLCJsb29wIiwicmVzdGFydCIsImZvcmtFdmVudCIsInVuZm9ya0V2ZW50IiwiZXZlbnQiXSwibWFwcGluZ3MiOiJBQUE7WUNpRDtDREs7aUJFRTtDRks7ZUdFO0NISztpQklFO0NKSztlS0U7Q0xFO2tCTUU7Q05NOzBCT0U7V0NLO0tERztDUEk7d0JTRTtDVGdEO2VVRTtnQkNJO0dEc0I7YUNHO09ERTtZRUU7T0ZFO2FHRTtPSEU7d0JJRTtPSkc7NEJLRTtPTEU7Q1ZHO2VnQkU7Z0JMSTtHS3NCO2FMSTtPS0U7WUpFO09JRTthSEU7T0dFO3dCRkU7T0VHOzRCREU7T0NFO0NoQkc7Y2lCRTtnQk5JO0dNVTthTkk7T01FO1lMRTtPS0U7YUpFO09JRTt3QkhFO09HRzs0QkZFO09FRTtDakJHO2lCa0JFO1dQSzt5QlFDO09SYztLT087VU5FO0tNSTtXTEU7eUJPQztPUEk7S0tFO3NCSkU7S0lJOzBCSEU7S0dFO0NsQkU7aUJxQk87V0NVO3lCRk07bUJHQztTSFk7T0VPO0tEQztVR0U7eUJKQztPSUc7S0hDO1dJRTt5QkxDO09LSTtLSkM7c0JLRTtLTEk7MEJNRTtLTkU7Q3JCSTtjNEJFO0M1QlE7Z0I2QkU7bUJDSztLREU7QzdCRTthK0JRO1dwQlE7c0JxQkM7T3JCWTtLb0JVO1VuQkU7S21CRztXbEJFO0trQkk7c0JqQkU7S2lCSTswQmhCRTtLZ0JFO0MvQkU7QWlDRTtXekJVO0t5Qkc7Q2pDRTtBa0NFO0NsQ087Y21DRTtDbkNVIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRGVjYXlBbmltYXRpb24iLCJjb25zdHJ1Y3RvciIsIl9fZ2V0TmF0aXZlQW5pbWF0aW9uQ29uZmlnIiwic3RhcnQiLCJvblVwZGF0ZSIsInN0b3AiXSwibWFwcGluZ3MiOiJBQUE7ZUNxQztFQ1c7R0RRO0VFRTtHRmM7RUdFO0dINEI7RUlFO0dKb0I7RUtFO0dMSztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCI8YW5vbnltb3VzPiIsImFwaXMucmVkdWNlJGFyZ3VtZW50XzAiLCJBUEkuZ2V0VmFsdWUiLCJBUEkuc2V0V2FpdGluZ0ZvcklkZW50aWZpZXIiLCJBUEkudW5zZXRXYWl0aW5nRm9ySWRlbnRpZmllciIsIkFQSS5kaXNhYmxlUXVldWUiLCJBUEkuZmx1c2hRdWV1ZSIsIkFQSS5xdWV1ZU9wZXJhdGlvbiIsInF1ZXVlLnB1c2gkYXJndW1lbnRfMCIsIkFQSS5jcmVhdGVBbmltYXRlZE5vZGUiLCJBUEkudXBkYXRlQW5pbWF0ZWROb2RlQ29uZmlnIiwiQVBJLnN0YXJ0TGlzdGVuaW5nVG9BbmltYXRlZE5vZGVWYWx1ZSIsIkFQSS5zdG9wTGlzdGVuaW5nVG9BbmltYXRlZE5vZGVWYWx1ZSIsIkFQSS5jb25uZWN0QW5pbWF0ZWROb2RlcyIsIkFQSS5kaXNjb25uZWN0QW5pbWF0ZWROb2RlcyIsIkFQSS5zdGFydEFuaW1hdGluZ05vZGUiLCJBUEkuc3RvcEFuaW1hdGlvbiIsIkFQSS5zZXRBbmltYXRlZE5vZGVWYWx1ZSIsIkFQSS5zZXRBbmltYXRlZE5vZGVPZmZzZXQiLCJBUEkuZmxhdHRlbkFuaW1hdGVkTm9kZU9mZnNldCIsIkFQSS5leHRyYWN0QW5pbWF0ZWROb2RlT2Zmc2V0IiwiQVBJLmNvbm5lY3RBbmltYXRlZE5vZGVUb1ZpZXciLCJBUEkuZGlzY29ubmVjdEFuaW1hdGVkTm9kZUZyb21WaWV3IiwiQVBJLnJlc3RvcmVEZWZhdWx0VmFsdWVzIiwiQVBJLmRyb3BBbmltYXRlZE5vZGUiLCJBUEkuYWRkQW5pbWF0ZWRFdmVudFRvVmlldyIsIkFQSS5yZW1vdmVBbmltYXRlZEV2ZW50RnJvbVZpZXciLCJzZXR1cEdsb2JhbEV2ZW50RW1pdHRlckxpc3RlbmVycyIsIlJDVERldmljZUV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lciRhcmd1bWVudF8xIiwiYWRkV2hpdGVsaXN0ZWRTdHlsZVByb3AiLCJhZGRXaGl0ZWxpc3RlZFRyYW5zZm9ybVByb3AiLCJhZGRXaGl0ZWxpc3RlZEludGVycG9sYXRpb25QYXJhbSIsImlzU3VwcG9ydGVkQ29sb3JTdHlsZVByb3AiLCJpc1N1cHBvcnRlZFN0eWxlUHJvcCIsImlzU3VwcG9ydGVkVHJhbnNmb3JtUHJvcCIsImlzU3VwcG9ydGVkSW50ZXJwb2xhdGlvblBhcmFtIiwidmFsaWRhdGVUcmFuc2Zvcm0iLCJjb25maWdzLmZvckVhY2gkYXJndW1lbnRfMCIsInZhbGlkYXRlU3R5bGVzIiwidmFsaWRhdGVJbnRlcnBvbGF0aW9uIiwiZ2VuZXJhdGVOZXdOb2RlVGFnIiwiZ2VuZXJhdGVOZXdBbmltYXRpb25JZCIsImFzc2VydE5hdGl2ZUFuaW1hdGVkTW9kdWxlIiwic2hvdWxkVXNlTmF0aXZlRHJpdmVyIiwidHJhbnNmb3JtRGF0YVR5cGUiLCJkZWZhdWx0LmdldF9fbmF0aXZlRXZlbnRFbWl0dGVyIl0sIm1hcHBpbmdzIjoiQUFBO01DMkQ7NkNDd0I7T0RLO0tEQztZR1E7R0hjOzJCSUM7R0pTOzZCS0M7R0xPO2dCTUM7R05VO2NPQztHUHlDO2tCUUM7aUJDZSxpQkQ7R1JJO3NCVUM7R1ZHOzRCV0M7R1hRO3FDWUM7R1pHO29DYUM7R2JHO3dCY0M7R2RHOzJCZUM7R2ZNO3NCZ0JDO0doQjRCO2lCaUJDO0dqQkc7d0JrQkM7R2xCRzt5Qm1CQztHbkJHOzZCb0JDO0dwQkc7NkJxQkM7R3JCRzs2QnNCQztHdEJHO2tDdUJDO0d2QlU7d0J3QkM7R3hCTTtvQnlCQztHekJHOzBCMEJDO0cxQlk7RTJCQztHM0JZO0E0Qkc7SUNHO0tEUTtNQ0s7T0RXO0M1QkU7QThCMEU7QzlCRztBK0JFO0MvQkc7QWdDRTtDaENHO0FpQ0U7Q2pDRTtBa0NFO0NsQ0U7QW1DRTtDbkNFO0FvQ0U7Q3BDRTtBcUNFO2tCQ2dCO0dETTtDckNDO0F1Q0U7Q3ZDUTtBd0NFO0N4Q1U7QXlDRTtDekNFO0EwQ0U7QzFDRTtBMkNFO0MzQ0U7QTRDSTtDNUMyQjtBNkNFO0M3Q2dCO0U4Q3FCO0c5Q1UifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzaG91bGRVc2VUdXJib0FuaW1hdGVkTW9kdWxlIl0sIm1hcHBpbmdzIjoiQUFBO0FDWTtDREUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRpb24iLCJzdGFydCIsInN0b3AiLCJfX2dldE5hdGl2ZUFuaW1hdGlvbkNvbmZpZyIsIl9fZGVib3VuY2VkT25FbmQiLCJfX2ZpbmRBbmltYXRlZFByb3BzTm9kZXMiLCJfX3N0YXJ0TmF0aXZlQW5pbWF0aW9uIiwiTmF0aXZlQW5pbWF0ZWRIZWxwZXIuQVBJLnN0YXJ0QW5pbWF0aW5nTm9kZSRhcmd1bWVudF8zIiwiX19maW5kQW5pbWF0ZWRQcm9wc05vZGVzLmZvckVhY2gkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtlQ21DO0VDUTtZRE07RUVFO0dGSTtFR0U7R0hJO0VJRztHSkk7RUtFO0dMYTtFTUU7UUNjO2lFQ1k7MkJEQztTREc7R05TO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNyZWF0ZUFuaW1hdGVkUHJvcHMiLCJBbmltYXRlZFByb3BzIiwiY29uc3RydWN0b3IiLCJfX2dldFZhbHVlIiwiX19nZXRBbmltYXRlZFZhbHVlIiwiX19hdHRhY2giLCJfX2RldGFjaCIsInVwZGF0ZSIsIl9fbWFrZU5hdGl2ZSIsInNldE5hdGl2ZVZpZXciLCJfX2Nvbm5lY3RBbmltYXRlZFZpZXciLCJfX2Rpc2Nvbm5lY3RBbmltYXRlZFZpZXciLCJfX3Jlc3RvcmVEZWZhdWx0VmFsdWVzIiwiX19nZXROYXRpdmVDb25maWciXSwibWFwcGluZ3MiOiJBQUE7QUNzQjtDRGU7ZUVFO0VDSztHREk7RUVFO0dGYztFR0U7R0hTO0VJRTtHSk87RUtFO0dMVztFTUU7R05FO0VPRTtHUG9CO0VRRTtHUlE7RVNFO0dUVztFVUU7R1ZXO0VXRTtHWFE7RVlFO0daYTtDRkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRlZE5vZGUiLCJfX2F0dGFjaCIsIl9fZGV0YWNoIiwiX19nZXRWYWx1ZSIsIl9fZ2V0QW5pbWF0ZWRWYWx1ZSIsIl9fYWRkQ2hpbGQiLCJfX3JlbW92ZUNoaWxkIiwiX19nZXRDaGlsZHJlbiIsImNvbnN0cnVjdG9yIiwiX19tYWtlTmF0aXZlIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsImhhc0xpc3RlbmVycyIsIl9zdGFydExpc3RlbmluZ1RvTmF0aXZlVmFsdWVVcGRhdGVzIiwiTmF0aXZlQW5pbWF0ZWRIZWxwZXIubmF0aXZlRXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyJGFyZ3VtZW50XzEiLCJfX29uQW5pbWF0ZWRWYWx1ZVVwZGF0ZVJlY2VpdmVkIiwiX19jYWxsTGlzdGVuZXJzIiwiX3N0b3BMaXN0ZW5pbmdGb3JOYXRpdmVWYWx1ZVVwZGF0ZXMiLCJfX2dldE5hdGl2ZVRhZyIsIl9fZ2V0TmF0aXZlQ29uZmlnIiwidG9KU09OIiwiX19nZXRQbGF0Zm9ybUNvbmZpZyIsIl9fc2V0UGxhdGZvcm1Db25maWciXSwibWFwcGluZ3MiOiJBQUE7ZUN5QjtFQ0ksbUJEO0VFQztHRk07RUdDLG9CSDtFSUM7R0pFO0VLQyxrQ0w7RU1DLHFDTjtFT0M7R1BFO0VRTztHUkU7RVNFO0dUUztFVVM7R1ZPO0VXUTtHWEs7RVlPO0daSztFYUU7R2JFO0VjRTtRQ2lCO1NESztHZEU7RWdCRTtHaEJFO0VpQkU7R2pCSTtFa0JFO0dsQlE7RW1CRTtHbkJxQjtFb0JDO0dwQkk7RXFCRTtHckJFO0VzQkU7R3RCRTtFdUJDO0d2QkU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiaXNQbGFpbk9iamVjdCIsInZpc2l0IiwidmFsdWUuZm9yRWFjaCRhcmd1bWVudF8wIiwiT2JqZWN0LnZhbHVlcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJtYXBBbmltYXRlZE5vZGVzIiwidmFsdWUubWFwJGFyZ3VtZW50XzAiLCJoYXNBbmltYXRlZE5vZGUiLCJBbmltYXRlZE9iamVjdCIsImNvbnN0cnVjdG9yIiwiX19nZXRWYWx1ZSIsIm1hcEFuaW1hdGVkTm9kZXMkYXJndW1lbnRfMSIsIl9fZ2V0QW5pbWF0ZWRWYWx1ZSIsIl9fYXR0YWNoIiwidmlzaXQkYXJndW1lbnRfMSIsIl9fZGV0YWNoIiwiX19tYWtlTmF0aXZlIiwiX19nZXROYXRpdmVDb25maWciXSwibWFwcGluZ3MiOiJBQUE7QUNxQjtDRE07QUVHO2tCQ1E7S0RFO2lDRUU7S0ZFO0NGRTtBS0c7cUJDUSxtREQ7Q0xVO09PRTtDUHlCO2VRRTtFQ0c7R0RHO0VFRTt5Q0NDO0tERTtHRkM7RUlFO3lDREM7S0NFO0dKQztFS0U7dUJDRTtLREU7R0xDO0VPRTt1QkRDO0tDRTtHUEU7RVFFO3VCRkM7S0VFO0dSRTtFU0U7MkNORztPTUU7R1RFO0NSQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFuaW1hdGVkV2l0aENoaWxkcmVuIiwiY29uc3RydWN0b3IiLCJfX21ha2VOYXRpdmUiLCJfX2FkZENoaWxkIiwiX19yZW1vdmVDaGlsZCIsIl9fZ2V0Q2hpbGRyZW4iLCJfX2NhbGxMaXN0ZW5lcnMiXSwibWFwcGluZ3MiOiJBQUE7ZUNpQjtFQ0c7R0RHO0VFRTtHRlk7RUdFO0dIYTtFSUU7R0pnQjtFS0U7R0xFO0VNRTtHTlU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY3JlYXRlQW5pbWF0ZWRTdHlsZSIsIkFuaW1hdGVkU3R5bGUiLCJjb25zdHJ1Y3RvciIsIl9fZ2V0VmFsdWUiLCJfX2dldEFuaW1hdGVkVmFsdWUiLCJfX2F0dGFjaCIsIl9fZGV0YWNoIiwiX19tYWtlTmF0aXZlIiwiX19nZXROYXRpdmVDb25maWciXSwibWFwcGluZ3MiOiJBQUE7QUN1QjtDRHVCO2VFRTtFQ0k7R0RJO0VFRTtHRlk7RUdFO0dIUztFSUU7R0pPO0VLRTtHTFE7RU1FO0dOUTtFT0U7R1BnQjtDRkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRlZFRyYW5zZm9ybSIsImNvbnN0cnVjdG9yIiwiX19tYWtlTmF0aXZlIiwiX3RyYW5zZm9ybXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiX19nZXRWYWx1ZSIsIl9nZXQkYXJndW1lbnRfMCIsIl9fZ2V0QW5pbWF0ZWRWYWx1ZSIsIl9fYXR0YWNoIiwiX19kZXRhY2giLCJfX2dldE5hdGl2ZUNvbmZpZyIsIl9nZXQiLCJfdHJhbnNmb3Jtcy5tYXAkYXJndW1lbnRfMCIsInZhbHVlLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO2VDa0I7RUNHO0dERztFRUU7NkJDQztLRE87R0ZFO0VJRTtxQkNDLHlDRDtHSkM7RU1FO3FCREMsaURDO0dOQztFT0U7NkJKQztLSU87R1BDO0VRRTs2QkxDO0tLTztHUkU7RVNFOzZCTkc7S01pQjtHVE87RVVFO2dDQ0M7a0NDTztXRE07S0RlO0dWQztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJhdHRhY2hOYXRpdmVFdmVudCIsInRyYXZlcnNlIiwiZXZlbnRNYXBwaW5ncy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJkZXRhY2giLCJ2YWxpZGF0ZU1hcHBpbmciLCJ2YWxpZGF0ZSIsImFyZ01hcHBpbmcuZm9yRWFjaCRhcmd1bWVudF8wIiwiQW5pbWF0ZWRFdmVudCIsImNvbnN0cnVjdG9yIiwiX19hZGRMaXN0ZW5lciIsIl9fcmVtb3ZlTGlzdGVuZXIiLCJfbGlzdGVuZXJzLmZpbHRlciRhcmd1bWVudF8wIiwiX19hdHRhY2giLCJfX2RldGFjaCIsIl9fZ2V0SGFuZGxlciIsIjxhbm9ueW1vdXM+IiwiX2FyZ01hcHBpbmcuZm9yRWFjaCRhcmd1bWVudF8wIiwiX2NhbGxMaXN0ZW5lcnMiLCJfbGlzdGVuZXJzLmZvckVhY2gkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtPQzhCO21CQ1U7R0RnQjswQkVZO0tGTTtJR0k7OEJERTtTQ087S0hFO0NERTtBS0U7bUJDQztHRHdDO3FCRU07R0ZFO0NMQztPUUU7RUNPO0dEYztFRUU7R0ZFO0VHRTs2Q0NDLGlDRDtHSEM7RUtFO0dMWTtFTUU7R05PO0VPRTtlQ0k7U0RNO1dDTzt1QmRNO09jcUI7K0JDQztPREU7S0RHO0dQQzttQlVFOzRCQ0MsNkJEO0dWQztDUkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJmbHVzaFZhbHVlIiwiZmluZEFuaW1hdGVkU3R5bGVzIiwibGVhdmVzLmZvckVhY2gkYXJndW1lbnRfMCIsIl9leGVjdXRlQXNBbmltYXRlZEJhdGNoIiwiQW5pbWF0ZWRWYWx1ZSIsImNvbnN0cnVjdG9yIiwiX19kZXRhY2giLCJOYXRpdmVBbmltYXRlZEFQSS5nZXRWYWx1ZSRhcmd1bWVudF8xIiwiX19nZXRWYWx1ZSIsInNldFZhbHVlIiwiX2V4ZWN1dGVBc0FuaW1hdGVkQmF0Y2gkYXJndW1lbnRfMSIsInNldE9mZnNldCIsImZsYXR0ZW5PZmZzZXQiLCJleHRyYWN0T2Zmc2V0Iiwic3RvcEFuaW1hdGlvbiIsInJlc2V0QW5pbWF0aW9uIiwiX19vbkFuaW1hdGVkVmFsdWVVcGRhdGVSZWNlaXZlZCIsImludGVycG9sYXRlIiwiYW5pbWF0ZSIsImFuaW1hdGlvbi5zdGFydCRhcmd1bWVudF8xIiwiYW5pbWF0aW9uLnN0YXJ0JGFyZ3VtZW50XzIiLCJzdG9wVHJhY2tpbmciLCJ0cmFjayIsIl91cGRhdGVWYWx1ZSIsIl9fZ2V0TmF0aXZlQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBO09Da0Q7RUNFO0dETztpQkVFLHFCRjtDREM7QUlPO0NKSTtlS1U7RUNPO0dEVztFRUU7d0RDRTtPREU7R0ZJO0VJRTtHSkU7RUtRO2dFQ1U7NEVEQztHTEc7RU9TO0dQSztFUVE7R1JNO0VTUTtHVE07RVVTO0dWVztFV087R1hTO0VZRTtHWkU7RWFNO0diSTtFY1E7TUNVO09ESTtNRUM7T0ZNO0dkSTtFaUJLO0dqQkc7RWtCSztHbEJLO0VtQkU7R25CVTtFb0JFO0dwQk07Q0xDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicnVuQWZ0ZXJJbnRlcmFjdGlvbnMiLCJQcm9taXNlJGFyZ3VtZW50XzAiLCJjYW5jZWwiLCJjcmVhdGVJbnRlcmFjdGlvbkhhbmRsZSIsImNsZWFySW50ZXJhY3Rpb25IYW5kbGUiLCJzZXREZWFkbGluZSIsIl9zY2hlZHVsZVVwZGF0ZSIsIl9wcm9jZXNzVXBkYXRlIiwiX2FkZEludGVyYWN0aW9uU2V0LmZvckVhY2gkYXJndW1lbnRfMCIsIl9kZWxldGVJbnRlcmFjdGlvblNldC5mb3JFYWNoJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7RUN3RjtnQ0NTO0tEVTtjRUk7T0ZFO0dERTtFSUs7R0pNO0VLSztHTE07RU1VO0dORTtBT2M7Q1BRO0FRSzs2QkNJLHFDRDtnQ0VDLHdDRjtDUjJCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVGFza1F1ZXVlIiwiY29uc3RydWN0b3IiLCJlbnF1ZXVlIiwiZW5xdWV1ZVRhc2tzIiwidGFza3MuZm9yRWFjaCRhcmd1bWVudF8wIiwiY2FuY2VsVGFza3MiLCJfcXVldWVTdGFjay5tYXAkYXJndW1lbnRfMCIsInF1ZXVlLnRhc2tzLmZpbHRlciRhcmd1bWVudF8wIiwiX3F1ZXVlU3RhY2subWFwLmZpbHRlciRhcmd1bWVudF8wIiwiaGFzVGFza3NUb1Byb2Nlc3MiLCJwcm9jZXNzTmV4dCIsIl9nZXRDdXJyZW50UXVldWUiLCJfZ2VuUHJvbWlzZSIsInRhc2suZ2VuLnRoZW4kYXJndW1lbnRfMCIsInRhc2suZ2VuLnRoZW4uX2NhdGNoJGFyZ3VtZW50XzAiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUMyQztFQ1E7R0RHO0VFTztHRkU7RUdFO2tCQ0MsMEJEO0dIQztFS0U7V0NHO2tDQ0UsMENEO1FEQztjR0MsbURIO0dMQztFU1k7R1RFO0VVSztHVjBCO0VXUztHWGtCO0VZRTtZQ1k7T0RRO2FFQzttQkNDO1NERztPRkM7R1pDO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNyZWF0ZU51bWVyaWNJbnRlcnBvbGF0aW9uIiwiPGFub255bW91cz4iLCJpbnRlcnBvbGF0ZSIsIm1hcFN0cmluZ1RvTnVtZXJpY0NvbXBvbmVudHMiLCJjcmVhdGVTdHJpbmdJbnRlcnBvbGF0aW9uIiwib3V0cHV0UmFuZ2UuZXZlcnkkYXJndW1lbnRfMCIsIm91dHB1dC5jb21wb25lbnRzLmV2ZXJ5JGFyZ3VtZW50XzAiLCJvdXRwdXRSYW5nZS5tYXAkYXJndW1lbnRfMCIsIm91dHB1dC5jb21wb25lbnRzLmZpbHRlciRhcmd1bWVudF8wIiwibnVtZXJpY0NvbXBvbmVudHMuXy5tYXAkYXJndW1lbnRfMCIsIm51bWVyaWNDb21wb25lbnRzLm1hcCRhcmd1bWVudF8wIiwiaW50ZXJwb2xhdGlvbnMubWFwJGFyZ3VtZW50XzAiLCJvdXRwdXRSYW5nZS5fLmNvbXBvbmVudHMubWFwJGFyZ3VtZW50XzAiLCJmaW5kUmFuZ2UiLCJjaGVja1ZhbGlkUmFuZ2VzIiwiY2hlY2tWYWxpZElucHV0UmFuZ2UiLCJjaGVja0luZmluaXRlUmFuZ2UiLCJBbmltYXRlZEludGVycG9sYXRpb24iLCJjb25zdHJ1Y3RvciIsIl9nZXRJbnRlcnBvbGF0aW9uIiwiX19tYWtlTmF0aXZlIiwiX19nZXRWYWx1ZSIsIl9fYXR0YWNoIiwiX19kZXRhY2giLCJfX2dldE5hdGl2ZUNvbmZpZyJdLCJtYXBwaW5ncyI6IkFBQTtBQ3VDO1NDc0I7R0RpQjtDREM7QUdFO0NIa0U7QUlLO0NKc0M7QUtVO3dCQ1Msb0NEO1FDTSx5REQ7d0JDSztVQ0U7eUVERTtTREM7b0JHTzttQ0NLLDBCRCxDSDtrREtFO3lDQ0csMkJEO01MQztXSEc7d0NVQyxxQ1Y7YVdHLDhDWDtLR0U7V0hFO3dDVUM7T1ZLO0tHRTtDTEU7QWNFO0NkUTtBZUU7Q2ZnQjtBZ0JFO0NoQk87QWlCRTtDakJlO2VrQkU7RUNPO0dEWTtFRUU7R0ZVO0VHRTtHSEc7RUlFO0dKTztFZkU7R2VJO0VLRTtHTEU7RU1FO0dORztFT0U7K0RqQlU7T2lCUTtHUGE7Q2xCQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInN0ZXAwIiwic3RlcDEiLCJsaW5lYXIiLCJlYXNlIiwicXVhZCIsImN1YmljIiwicG9seSIsIjxhbm9ueW1vdXM+Iiwic2luIiwiY2lyY2xlIiwiZXhwIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJiZXppZXIiLCJfaW4iLCJvdXQiLCJpbk91dCJdLCJtYXBwaW5ncyI6IkFBQTtFQytEO0dERTtFRUs7R0ZFO0VHUTtHSEU7RUlRO0dKSztFS1E7R0xFO0VNUTtHTkU7RU9RO1dDQyw2QkQ7R1BDO0VTTztHVEU7RVVPO0dWRTtFV087R1hFO0VZWTtXSkUsbUVJO0daQztFYVE7V0xDLDhCSztHYkM7RWNPO0dkaUI7RWVTO0dmUTtFZ0JLO0doQkU7RWlCSztXVEMsc0JTO0dqQkM7RWtCTztXVkM7S1VLO0dsQkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBIiwiQiIsIkMiLCJjYWxjQmV6aWVyIiwiZ2V0U2xvcGUiLCJiaW5hcnlTdWJkaXZpZGUiLCJuZXd0b25SYXBoc29uSXRlcmF0ZSIsImJlemllciIsImdldFRGb3JYIiwiQmV6aWVyRWFzaW5nIl0sIm1hcHBpbmdzIjoiQUFBO0FDNkI7Q0RFO0FFQztDRkU7QUdDO0NIRTtBSUc7Q0pFO0FLRztDTEU7QU1FO0NOeUI7QU9FO0NQZ0I7ZVFFO0VDb0I7R0RrQztTRUU7R0ZZO0NSQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFuaW1hdGVkVmFsdWVYWSIsImNvbnN0cnVjdG9yIiwic2V0VmFsdWUiLCJzZXRPZmZzZXQiLCJmbGF0dGVuT2Zmc2V0IiwiZXh0cmFjdE9mZnNldCIsIl9fZ2V0VmFsdWUiLCJyZXNldEFuaW1hdGlvbiIsInN0b3BBbmltYXRpb24iLCJhZGRMaXN0ZW5lciIsImpvaW50Q2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsImdldExheW91dCIsImdldFRyYW5zbGF0ZVRyYW5zZm9ybSIsIl9fYXR0YWNoIiwiX19kZXRhY2giLCJfX21ha2VOYXRpdmUiXSwibWFwcGluZ3MiOiJBQUE7ZUMrQjtFQ1k7R0QwQjtFRVE7R0ZHO0VHUztHSEc7RUlRO0dKRztFS1E7R0xHO0VNRTtHTlM7RU9PO0dQTTtFUVM7R1JJO0VTVzswQkNFO0tERTtHVE07RVdRO0dYSTtFWU87R1pJO0VhTztHYks7RWNPO0dkRTtFZUU7R2ZJO0VnQkU7R2hCSTtFaUJFO0dqQkk7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiU3ByaW5nQW5pbWF0aW9uIiwiY29uc3RydWN0b3IiLCJfX2dldE5hdGl2ZUFuaW1hdGlvbkNvbmZpZyIsInN0YXJ0IiwiZ2V0SW50ZXJuYWxTdGF0ZSIsIm9uVXBkYXRlIiwic3RvcCJdLCJtYXBwaW5ncyI6IkFBQTtlQ2lGO0VDdUI7R0QrRDtFRUU7R0YwQjtFR0U7R0grQztFSUU7R0pNO0VLdUI7R0w2RjtFTUU7R05NO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInByb2Nlc3NDb2xvciIsImlzUmdiYVZhbHVlIiwiaXNSZ2JhQW5pbWF0ZWRWYWx1ZSIsIkFuaW1hdGVkQ29sb3IiLCJjb25zdHJ1Y3RvciIsInNldFZhbHVlIiwiX3dpdGhTdXNwZW5kZWRDYWxsYmFja3MkYXJndW1lbnRfMCIsInNldE9mZnNldCIsImZsYXR0ZW5PZmZzZXQiLCJleHRyYWN0T2Zmc2V0Iiwic3RvcEFuaW1hdGlvbiIsInJlc2V0QW5pbWF0aW9uIiwiX19nZXRWYWx1ZSIsIl9fYXR0YWNoIiwiX19kZXRhY2giLCJfd2l0aFN1c3BlbmRlZENhbGxiYWNrcyIsIl9fY2FsbExpc3RlbmVycyIsIl9fbWFrZU5hdGl2ZSIsIl9fZ2V0TmF0aXZlQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0Q7Q0RvQztBRUU7Q0ZRO0FHRTtDSFE7ZUlFO0VDUztHRGtDO0VFTTtpQ0NTO0tEb0I7R0ZpQjtFSU87R0pLO0VLTTtHTEs7RU1NO0dOSztFT087R1BNO0VRSztHUk07RVNFO0dUTTtFVUU7R1ZNO0VXRTtHWE07RVlFO0daSTtFYUU7R2JJO0VjRTtHZE07RWVFO0dmUztDSkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzdGlmZm5lc3NGcm9tT3JpZ2FtaVZhbHVlIiwiZGFtcGluZ0Zyb21PcmlnYW1pVmFsdWUiLCJmcm9tT3JpZ2FtaVRlbnNpb25BbmRGcmljdGlvbiIsImZyb21Cb3VuY2luZXNzQW5kU3BlZWQiLCJub3JtYWxpemUiLCJwcm9qZWN0Tm9ybWFsIiwibGluZWFySW50ZXJwb2xhdGlvbiIsInF1YWRyYXRpY091dEludGVycG9sYXRpb24iLCJiM0ZyaWN0aW9uMSIsImIzRnJpY3Rpb24yIiwiYjNGcmljdGlvbjMiLCJiM05vYm91bmNlIl0sIm1hcHBpbmdzIjoiQUFBO0FDa0I7Q0RFO0FFRTtDRkU7T0dFO0NIUTtPSUU7RUNJO0dERTtFRUU7R0ZFO0VHRTtHSEU7RUlFO0dKRTtFS0U7R0xFO0VNRTtHTkU7RU9FO0dQTztFUUU7R1JRO0NKZ0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJlYXNlSW5PdXQiLCJUaW1pbmdBbmltYXRpb24iLCJjb25zdHJ1Y3RvciIsIl9fZ2V0TmF0aXZlQW5pbWF0aW9uQ29uZmlnIiwic3RhcnQiLCJvblVwZGF0ZSIsInN0b3AiXSwibWFwcGluZ3MiOiJBQUE7QUNtRDtDRE07ZUVFO0VDYTtHRFU7RUVFO0dGZTtFR0U7R0g0QztFSUU7R0p1QjtFS0U7R0xNO0NGQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNyZWF0ZUFuaW1hdGVkQ29tcG9uZW50IiwiUmVhY3QuZm9yd2FyZFJlZiRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO2VDNkI7SUNJO0tEeUI7Q0RRIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwidXNlQW5pbWF0ZWRQcm9wcyIsInVzZVJlZHVjZXIkYXJndW1lbnRfMCIsInVzZU1lbW8kYXJndW1lbnRfMCIsIkFuaW1hdGVkUHJvcHMkYXJndW1lbnRfMSIsInJlZkVmZmVjdCIsIm9uVXBkYXRlUmVmLmN1cnJlbnQiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsInJlZHVjZUFuaW1hdGVkUHJvcHMiLCJ1c2VBbmltYXRlZFByb3BzTGlmZWN5Y2xlIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJ1c2VMYXlvdXRFZmZlY3QkYXJndW1lbnRfMCIsImdldEV2ZW50VGFyZ2V0IiwiaXNGYWJyaWNJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQTtlQ2tDO3NEQ0csa0JEO0lFUywrQkMsNkJELENGO0lJcUI7NEJDUTswQ0M2QjthREc7T0RHO2FHYTtPSE07S0pDO0NETTtBU0U7Q1RTO0FVUztZQ0k7R0RLO2tCRUU7V0pFO0tJRTtHRkM7a0JFRTtXSlM7S0lPO0dGQztDVkM7QWFFO0NiTTtBY0c7Q2RnQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVzZVJlZkVmZmVjdCIsIjxhbm9ueW1vdXM+Il0sIm1hcHBpbmdzIjoiQUFBO2VDNEI7SUNLO0tEUTtDREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJpc1B1YmxpY0luc3RhbmNlIiwiaXNMZWdhY3lGYWJyaWNJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQTtPQ2tCO0NEUTtBRUU7Q0ZTIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQW5pbWF0ZWRBZGRpdGlvbiIsImNvbnN0cnVjdG9yIiwiX19tYWtlTmF0aXZlIiwiX19nZXRWYWx1ZSIsImludGVycG9sYXRlIiwiX19hdHRhY2giLCJfX2RldGFjaCIsIl9fZ2V0TmF0aXZlQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBO2VDb0I7RUNJO0dESTtFRUU7R0ZJO0VHRTtHSEU7RUlFO0dKSTtFS0U7R0xHO0VNRTtHTkk7RU9FO0dQSztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRlZERpZmZDbGFtcCIsImNvbnN0cnVjdG9yIiwiX19tYWtlTmF0aXZlIiwiaW50ZXJwb2xhdGUiLCJfX2dldFZhbHVlIiwiX19hdHRhY2giLCJfX2RldGFjaCIsIl9fZ2V0TmF0aXZlQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBO2VDbUI7RUNPO0dETztFRUU7R0ZHO0VHRTtHSEk7RUlFO0dKTTtFS0U7R0xFO0VNRTtHTkc7RU9FO0dQTztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRlZERpdmlzaW9uIiwiY29uc3RydWN0b3IiLCJfX21ha2VOYXRpdmUiLCJfX2dldFZhbHVlIiwiaW50ZXJwb2xhdGUiLCJfX2F0dGFjaCIsIl9fZGV0YWNoIiwiX19nZXROYXRpdmVDb25maWciXSwibWFwcGluZ3MiOiJBQUE7ZUNvQjtFQ0s7R0RPO0VFRTtHRkk7RUdFO0dIYztFSUU7R0pJO0VLRTtHTEc7RU1FO0dOSTtFT0U7R1BLO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFuaW1hdGVkTW9kdWxvIiwiY29uc3RydWN0b3IiLCJfX21ha2VOYXRpdmUiLCJfX2dldFZhbHVlIiwiaW50ZXJwb2xhdGUiLCJfX2F0dGFjaCIsIl9fZGV0YWNoIiwiX19nZXROYXRpdmVDb25maWciXSwibWFwcGluZ3MiOiJBQUE7ZUNtQjtFQ0k7R0RJO0VFRTtHRkc7RUdFO0dISTtFSUU7R0pJO0VLRTtHTEU7RU1FO0dORztFT0U7R1BNO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFuaW1hdGVkTXVsdGlwbGljYXRpb24iLCJjb25zdHJ1Y3RvciIsIl9fbWFrZU5hdGl2ZSIsIl9fZ2V0VmFsdWUiLCJpbnRlcnBvbGF0ZSIsIl9fYXR0YWNoIiwiX19kZXRhY2giLCJfX2dldE5hdGl2ZUNvbmZpZyJdLCJtYXBwaW5ncyI6IkFBQTtlQ29CO0VDSTtHREk7RUVFO0dGSTtFR0U7R0hFO0VJRTtHSkk7RUtDO0dMRztFTUU7R05JO0VPRTtHUEs7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQW5pbWF0ZWRTdWJ0cmFjdGlvbiIsImNvbnN0cnVjdG9yIiwiX19tYWtlTmF0aXZlIiwiX19nZXRWYWx1ZSIsImludGVycG9sYXRlIiwiX19hdHRhY2giLCJfX2RldGFjaCIsIl9fZ2V0TmF0aXZlQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBO2VDb0I7RUNJO0dESTtFRUU7R0ZJO0VHRTtHSEU7RUlFO0dKSTtFS0U7R0xHO0VNRTtHTkk7RU9FO0dQSztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRlZFRyYWNraW5nIiwiY29uc3RydWN0b3IiLCJfX21ha2VOYXRpdmUiLCJfX2dldFZhbHVlIiwiX19hdHRhY2giLCJfX2RldGFjaCIsInVwZGF0ZSIsIl9fZ2V0TmF0aXZlQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBO2VDbUI7RUNRO0dEZ0I7RUVFO0dGSztFR0U7R0hFO0VJRTtHSlc7RUtFO0dMRztFTUU7R05RO0VPRTtHUGM7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2V0R2xvYmFsT3B0aW9ucyIsInNldENvbnRleHQiLCJiZWdpblNjcm9sbCIsImVuZFNjcm9sbCJdLCJtYXBwaW5ncyI6IkFBQTtvQkNrQztHRFU7Y0VNO0dGRTtFR007R0hFO0VJTTtHSkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzcGxpdExheW91dFByb3BzIl0sIm1hcHBpbmdzIjoiQUFBO2VDWTtDRDJEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZGlzbWlzc0tleWJvYXJkIl0sIm1hcHBpbmdzIjoiQUFBO0FDZ0I7Q0RFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiS2V5Ym9hcmQiLCJjb25zdHJ1Y3RvciIsImFkZExpc3RlbmVyJGFyZ3VtZW50XzEiLCJhZGRMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsImRpc21pc3MiLCJpc1Zpc2libGUiLCJtZXRyaWNzIiwic2NoZWR1bGVMYXlvdXRBbmltYXRpb24iXSwibWFwcGluZ3MiOiJBQUE7QUN5RztFQ1U7d0NDQztLREU7d0NDQztLREU7R0RDO0VHMEI7R0hNO0VJTztHSkU7RUtLO0dMRTtFTUs7R05FO0VPSztHUEU7RVFNO0dSVztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzZXRFbmFibGVkIiwiY29uZmlndXJlTmV4dCIsIm9uQW5pbWF0aW9uQ29tcGxldGUiLCI8YW5vbnltb3VzPiIsImNyZWF0ZSIsImNoZWNrQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBO0FDaUM7Q0RFO0FFVTs4QkNtQjtHRE87UUVjLGNGOzZCRVcsY0Y7UUVFLGNGO0NGRztBS0U7Q0xXO0VNcUU7R05FIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkuZ2V0JGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7SUNrRSw0QkQifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJwcm9jZXNzRGVjZWxlcmF0aW9uUmF0ZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ1k7Q0RlIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkuZ2V0JGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7SUM0Qiw0QkQifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJOYXRpdmVDb21wb25lbnRSZWdpc3RyeS5nZXQkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTtJQzJLLDRCRCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNjcm9sbFZpZXdTdGlja3lIZWFkZXIiLCJjYWxsYmFja1JlZiIsInVzZU1lbW8kYXJndW1lbnRfMCIsInVzZVN0YXRlJGFyZ3VtZW50XzAiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsImFuaW1hdGVkVmFsdWVMaXN0ZW5lciIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwiX29uTGF5b3V0Il0sIm1hcHBpbmdzIjoiQUFBO3FCQzJDO2tDQ2lCO0dETTtJRU07Y0ZnQjtJR0s7S0hZO1lJTTtHSkk7NENLZ0I7TUNZLDBCRDtHTEc7WUlFO1dHc0Y7S0hPO0dKQztvQlFhO0dSVTtDRHFCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZGVmYXVsdC5nZXRfX0ZsYXRMaXN0IiwiZGVmYXVsdC5nZXRfX0ltYWdlIiwiZGVmYXVsdC5nZXRfX1Njcm9sbFZpZXciLCJkZWZhdWx0LmdldF9fU2VjdGlvbkxpc3QiLCJkZWZhdWx0LmdldF9fVGV4dCIsImRlZmF1bHQuZ2V0X19WaWV3Il0sIm1hcHBpbmdzIjoiQUFBO0VDNEI7R0RFO0VFQztHRkU7RUdDO0dIRTtFSUM7R0pFO0VLQztHTEU7RU1DO0dORSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm1vY2tBbmltYXRpb25TdGFydCIsIjxhbm9ueW1vdXM+IiwiZW1wdHlBbmltYXRpb24uc3RhcnQiLCJlbXB0eUFuaW1hdGlvbi5zdG9wIiwiZW1wdHlBbmltYXRpb24ucmVzZXQiLCJlbXB0eUFuaW1hdGlvbi5fc3RhcnROYXRpdmVMb29wIiwiZW1wdHlBbmltYXRpb24uX2lzVXNpbmdOYXRpdmVEcml2ZXIiLCJtb2NrQ29tcG9zaXRlQW5pbWF0aW9uIiwibW9ja0FuaW1hdGlvblN0YXJ0JGFyZ3VtZW50XzAiLCJhbmltYXRpb25zLmZvckVhY2gkYXJndW1lbnRfMCIsInNwcmluZyIsInRpbWluZyIsImRlY2F5Iiwic2VxdWVuY2UiLCJwYXJhbGxlbCIsImRlbGF5Iiwic3RhZ2dlciIsImxvb3AiXSwibWFwcGluZ3MiOiJBQUE7QUNzQztTQ0c7R0RtQjtDREM7U0dZLFFIO1FJQyxRSjtTS0MsUUw7b0JNQyxRTjt3Qk9DO0dQRTsrQlFHOzRCQ0k7dUJDQyw4QkQ7R0RFO0VSQztlV0U7OEJGTztLRUc7Q1hFO2VZRTs4QkhPO0tHRztDWkU7Y2FFO0NiSztpQmNFO0NkSTtpQmVHO0NmSztjZ0JFO0NoQkU7Z0JpQkU7Q2pCSztha0JRO0NsQk0ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZW1vdmVDbGlwcGVkU3Vidmlld3NPckRlZmF1bHQiLCJudW1Db2x1bW5zT3JEZWZhdWx0IiwiaXNBcnJheUxpa2UiLCJGbGF0TGlzdCIsInNjcm9sbFRvRW5kIiwic2Nyb2xsVG9JbmRleCIsInNjcm9sbFRvSXRlbSIsInNjcm9sbFRvT2Zmc2V0IiwicmVjb3JkSW50ZXJhY3Rpb24iLCJmbGFzaFNjcm9sbEluZGljYXRvcnMiLCJnZXRTY3JvbGxSZXNwb25kZXIiLCJnZXROYXRpdmVTY3JvbGxSZWYiLCJnZXRTY3JvbGxhYmxlTm9kZSIsInNldE5hdGl2ZVByb3BzIiwiY29uc3RydWN0b3IiLCJwcm9wcy52aWV3YWJpbGl0eUNvbmZpZ0NhbGxiYWNrUGFpcnMubWFwJGFyZ3VtZW50XzAiLCJfY3JlYXRlT25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCRhcmd1bWVudF8wIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX2NhcHR1cmVSZWYiLCJfY2hlY2tQcm9wcyIsIl9nZXRJdGVtIiwiX2dldEl0ZW1Db3VudCIsIl9rZXlFeHRyYWN0b3IiLCJpdGVtcy5tYXAkYXJndW1lbnRfMCIsIl9wdXNoTXVsdGlDb2x1bW5WaWV3YWJsZSIsInYuaXRlbS5mb3JFYWNoJGFyZ3VtZW50XzAiLCJfY3JlYXRlT25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCIsIjxhbm9ueW1vdXM+IiwiaW5mby52aWV3YWJsZUl0ZW1zLmZvckVhY2gkYXJndW1lbnRfMCIsImluZm8uY2hhbmdlZC5mb3JFYWNoJGFyZ3VtZW50XzAiLCJfcmVuZGVyZXIiLCJyZW5kZXIiLCJyZW5kZXJQcm9wIiwiaXRlbS5tYXAkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dLO0NETTtBRUc7Q0ZFO0FHRTtDSEc7QUlxSTtFQ0s7R0RJO0VFVTtHRlU7RUdRO0dIVTtFSU87R0pJO0VLTztHTEk7RU1PO0dOSTtFT0s7R1BJO0VRSztHUlE7RVNFO0dUSTtFVUU7R1ZJO0VXRTtzRENLO1VESztVRVU7V0ZPO0dYSTtFY0c7R2RzQjtnQmVLO0dmRTtFZ0JHO0doQjZCO2FpQkU7R2pCa0I7a0JrQkU7R2xCYTtrQm1CRTthQ1k7NEVEQztHbkJPO0VxQkU7bUJDRztLREk7R3JCQztFdUJFO1dDUTtxQ0NVOzJEREM7K0JFRSw4Q0Y7S0RNO0d2QkM7YzJCRTttQkNVO0tEWTt1QkVFO3NCQ1M7YURVO0tGTTtHM0JLO0U0Qks7RzVCZ0M7Q0pDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicG9ueWZpbGwiLCJpc0VxdWFsIiwiYXJlSW5wdXRzRXF1YWwiLCJtZW1vaXplT25lIiwibWVtb2l6ZWQiXSwibWFwcGluZ3MiOiJBQUE7SUNHO0tERTtBRUM7Q0ZRO0FHQztDSFU7QUlFO0lDTTtLRGE7Q0pFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwibW9kdWxlLmV4cG9ydHMuZ2V0X19WaXJ0dWFsaXplZExpc3QiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1ZpcnR1YWxpemVkU2VjdGlvbkxpc3QiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX1ZpcnR1YWxpemVkTGlzdENvbnRleHRSZXNldHRlciIsIm1vZHVsZS5leHBvcnRzLmdldF9fVmlld2FiaWxpdHlIZWxwZXIiLCJtb2R1bGUuZXhwb3J0cy5nZXRfX0ZpbGxSYXRlSGVscGVyIl0sIm1hcHBpbmdzIjoiQUFBO0VDeUM7R0RFO0VFQztHRkU7RUdDO0dIRztFSUM7R0pFO0VLQztHTEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJlbGVtZW50c1RoYXRPdmVybGFwT2Zmc2V0cyIsIm5ld1JhbmdlQ291bnQiLCJjb21wdXRlV2luZG93ZWRSZW5kZXJMaW1pdHMiLCJrZXlFeHRyYWN0b3IiXSwibWFwcGluZ3MiOiJBQUE7T0NxQjtDRG9DO09FUTtDRnFCO09HUTtDSDRJO09JRTtDSlEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRTY3JvbGxpbmdUaHJlc2hvbGQiLCJWaXJ0dWFsaXplZExpc3QiLCJzY3JvbGxUb0VuZCIsInNjcm9sbFRvSW5kZXgiLCJzY3JvbGxUb0l0ZW0iLCJzY3JvbGxUb09mZnNldCIsIl9zY3JvbGxUb1BhcmFtc0Zyb21PZmZzZXQiLCJyZWNvcmRJbnRlcmFjdGlvbiIsIl9uZXN0ZWRDaGlsZExpc3RzLmZvckVhY2gkYXJndW1lbnRfMCIsIl92aWV3YWJpbGl0eVR1cGxlcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJmbGFzaFNjcm9sbEluZGljYXRvcnMiLCJnZXRTY3JvbGxSZXNwb25kZXIiLCJnZXRTY3JvbGxhYmxlTm9kZSIsImdldFNjcm9sbFJlZiIsInNldE5hdGl2ZVByb3BzIiwiX2dldENlbGxLZXkiLCJfZ2V0U2Nyb2xsTWV0cmljcyIsImhhc01vcmUiLCJfZ2V0T3V0ZXJtb3N0UGFyZW50TGlzdFJlZiIsIl9yZWdpc3RlckFzTmVzdGVkQ2hpbGQiLCJfdW5yZWdpc3RlckFzTmVzdGVkQ2hpbGQiLCJjb25zdHJ1Y3RvciIsInByb3BzLnZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlycy5tYXAkYXJndW1lbnRfMCIsIl9jaGVja1Byb3BzIiwiX2ZpbmRJdGVtSW5kZXhXaXRoS2V5IiwiX2dldEl0ZW1LZXkiLCJfY3JlYXRlUmVuZGVyTWFzayIsIl9pbml0aWFsUmVuZGVyUmVnaW9uIiwiX2Vuc3VyZUNsb3Nlc3RTdGlja3lIZWFkZXIiLCJfYWRqdXN0Q2VsbHNBcm91bmRWaWV3cG9ydCIsIl9maW5kRmlyc3RDaGlsZFdpdGhNb3JlIiwiX25lc3RlZENoaWxkTGlzdHMuYW55SW5DZWxsJGFyZ3VtZW50XzEiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiX3B1c2hDZWxscyIsIkNlbGxSZW5kZXJlci5wcm9wcy5yZWYiLCJfY29uc3RyYWluVG9JdGVtQ291bnQiLCJfb25VcGRhdGVTZXBhcmF0b3JzIiwia2V5cy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJfaXNOZXN0ZWRXaXRoU2FtZU9yaWVudGF0aW9uIiwiX2dldFNwYWNlcktleSIsIl9rZXlFeHRyYWN0b3IiLCJyZW5kZXIiLCJSZWFjdC5jbG9uZUVsZW1lbnQkYXJndW1lbnRfMS5vbkxheW91dCIsIlNjcm9sbFZpZXcuQ29udGV4dC5Db25zdW1lci5wcm9wcy5jaGlsZHJlbiIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl9jYXB0dXJlU2Nyb2xsUmVmIiwiX2NvbXB1dGVCbGFua25lc3MiLCJfZGVmYXVsdFJlbmRlclNjcm9sbENvbXBvbmVudCIsIl9vbkNlbGxMYXlvdXQiLCJfb25DZWxsRm9jdXNDYXB0dXJlIiwiX29uQ2VsbFVubW91bnQiLCJfdHJpZ2dlclJlbWVhc3VyZUZvckNoaWxkTGlzdHNJbkNlbGwiLCJfbmVzdGVkQ2hpbGRMaXN0cy5mb3JFYWNoSW5DZWxsJGFyZ3VtZW50XzEiLCJtZWFzdXJlTGF5b3V0UmVsYXRpdmVUb0NvbnRhaW5pbmdMaXN0IiwiX3Njcm9sbFJlZi5tZWFzdXJlTGF5b3V0JGFyZ3VtZW50XzEiLCJfc2Nyb2xsUmVmLm1lYXN1cmVMYXlvdXQkYXJndW1lbnRfMiIsIl9vbkxheW91dCIsIl9vbkxheW91dEVtcHR5IiwiX2dldEZvb3RlckNlbGxLZXkiLCJfb25MYXlvdXRGb290ZXIiLCJfb25MYXlvdXRIZWFkZXIiLCJfcmVuZGVyRGVidWdPdmVybGF5IiwiZnJhbWVzSW5MYXlvdXQubWFwJGFyZ3VtZW50XzAiLCJfc2VsZWN0TGVuZ3RoIiwiX3NlbGVjdE9mZnNldCIsIl9vcmllbnRhdGlvbiIsIl9tYXliZUNhbGxPbkVkZ2VSZWFjaGVkIiwiX29uQ29udGVudFNpemVDaGFuZ2UiLCJfbWF5YmVTY3JvbGxUb0luaXRpYWxTY3JvbGxJbmRleCIsIl9jb252ZXJ0UGFyZW50U2Nyb2xsTWV0cmljcyIsIl9vblNjcm9sbCIsInNldFN0YXRlJGFyZ3VtZW50XzAiLCJfb2Zmc2V0RnJvbVNjcm9sbEV2ZW50IiwiX3NjaGVkdWxlQ2VsbHNUb1JlbmRlclVwZGF0ZSIsIl9zaG91bGRSZW5kZXJXaXRoUHJpb3JpdHkiLCJfb25TY3JvbGxCZWdpbkRyYWciLCJfb25TY3JvbGxFbmREcmFnIiwiX29uTW9tZW50dW1TY3JvbGxCZWdpbiIsIl9vbk1vbWVudHVtU2Nyb2xsRW5kIiwiX3VwZGF0ZUNlbGxzVG9SZW5kZXIiLCJfY3JlYXRlVmlld1Rva2VuIiwiX19nZXRMaXN0TWV0cmljcyIsIl9nZXROb25WaWV3cG9ydFJlbmRlclJlZ2lvbnMiLCJfdXBkYXRlVmlld2FibGVJdGVtcyJdLCJtYXBwaW5ncyI6IkFBQTtBQzRGO0NERTtBRStCO0VDSTtHRGlCO0VFRztHRndEO0VHSTtHSGdCO0VJWTtHSjZCO0VLRTtHTFc7RU1FO21DQ0M7S0RFO29DRUM7S0ZFO0dORTtFU0U7R1RNO0VVTztHVkk7RVdFO0dYTTtFWUU7R1pRO0VhRTtHYkk7RWNFO0dkRTtzQmVHO0dmRTtFZ0JFO0doQkU7K0JpQkc7R2pCTTsyQmtCRTtHbEJROzZCbUJFO0duQkk7RW9CSTtRQ1k7VURHO0dwQmlDO0VzQkU7R3RCOEM7RXVCRTtHdkJtQjtFd0JFO0d4Qlc7RXlCRTtHekIwQztFMEJFO0cxQmtCO0UyQkU7RzNCYztFNEJFO0c1QjBFO0U2QkU7MERDSzs2QkRDO0c3QlE7RStCRTtHL0JPO0VnQ0U7b0N4Qks7S3dCRTtHaENFO0VpQ0U7R2pDOEQ7RWtDRTtlQ3FEO1dERTtHbENTO0VvQ0U7R3BDbUI7d0JxQ0U7aUJDQztLREc7R3JDQztFdUNFO0d2Q007a0J3Q0U7bUN4Q0M7RXlDRTtHekNvQjtFMENFO3NCQ2tFO2FETTtXRXVLO1dGaUI7RzFDYztFNkNFO3NDckNLO09xQ0U7RzdDZTtzQjhDNkM7RzlDRTtFK0NFO0cvQ007a0NnREk7R2hEc0M7a0JpREU7R2pEbUI7d0JrREU7R2xERzttQm1ERTtHbkRHO0VvREU7a0RDQztLREU7R3BEQztFc0RFO1FDVzsyQ2hEb0I7YWdERTtTREU7UUVDO1NGSztHdERRO2N5REU7R3pEYTttQjBERTtHMURFO0UyREU7RzNERTtvQjRERTtHNURHO29CNkRFO0c3REU7RThERzs0QkMwQjtTRFk7RzlEdUI7RWdFRTtHaEVVO0VpRUU7R2pFRTtFa0VFO0dsRUs7RW1FRTtHbkUrRTt5Qm9FRTtHcEVhO0VxRU87R3JFMEI7Z0NzRUs7R3RFa0I7Y3VFRTttQ2hFQztLZ0VFO29CQ3VEO1FERTtHdkVZO0V5RUU7R3pFWTtFMEVFO0cxRXVCO0UyRUU7RzNFcUM7dUI0RUU7bUNyRUM7S3FFRTtvQ3BFQztLb0VFO0c1RUc7cUI2RUU7bUN0RUM7S3NFRTtHN0VPOzJCOEVFO21DdkVDO0t1RUU7RzlFRTt5QitFRTttQ3hFQztLd0VFO0cvRUk7eUJnRkU7a0JSRztLUXFCO0doRkM7cUJpRkU7R2pGYztFa0ZFO0dsRkU7aUNtRkU7R25GMkQ7RW9GRTtvQzVFUztLNEVVO0dwRkM7Q0ZDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQmF0Y2hpbmF0b3IiLCJjb25zdHJ1Y3RvciIsImRpc3Bvc2UiLCJzY2hlZHVsZSIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsIkludGVyYWN0aW9uTWFuYWdlci5ydW5BZnRlckludGVyYWN0aW9ucyRhcmd1bWVudF8wIiwiX3Rhc2tIYW5kbGUuY2FuY2VsIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0M7RUNJO0dERztFRU87R0ZRO0VHQztxQ0NJO2lFQ0M7T0RLO0tEQztnQ0dDLGlDSDtHSEM7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY2xhbXAiXSwibWFwcGluZ3MiOiJBQUE7QUNZO0NEUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImluZm9Mb2ciXSwibWFwcGluZ3MiOiJBQUE7QUNlO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkNoaWxkTGlzdENvbGxlY3Rpb24iLCJhZGQiLCJyZW1vdmUiLCJmb3JFYWNoIiwiZm9yRWFjaEluQ2VsbCIsImFueUluQ2VsbCIsInNpemUiXSwibWFwcGluZ3MiOiJBQUE7ZUNZO0VDSTtHRFc7RUVFO0dGWTtFR0U7R0hNO0VJRTtHSks7RUtFO0dMUTtFTUU7R05FO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkluZm8iLCJGaWxsUmF0ZUhlbHBlciIsImFkZExpc3RlbmVyIiwicmVtb3ZlIiwiX2xpc3RlbmVycy5maWx0ZXIkYXJndW1lbnRfMCIsInNldFNhbXBsZVJhdGUiLCJzZXRNaW5TYW1wbGVDb3VudCIsImNvbnN0cnVjdG9yIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlQW5kRmx1c2giLCJfbGlzdGVuZXJzLmZvckVhY2gkYXJndW1lbnRfMCIsImNvbXB1dGVCbGFua25lc3MiLCJlbmFibGVkIiwiX3Jlc2V0RGF0YSJdLCJtYXBwaW5ncyI6IkFBQTtBQ2tCO0NEVztBRWdCO0VDUTtjQ1M7dUNDQyxpQ0Q7T0RDO0dERTtFSUU7R0pFO0VLRTtHTEU7RU1FO0dOSTtFT0U7R1BLO0VRRTt1QkN1QywwQkQ7R1JFO0VVRTtHVm1HO0VXRTtHWEU7RVlFO0daSztDRkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJMaXN0TWV0cmljc0FnZ3JlZ2F0b3IiLCJub3RpZnlDZWxsTGF5b3V0Iiwibm90aWZ5Q2VsbFVubW91bnRlZCIsIm5vdGlmeUxpc3RDb250ZW50TGF5b3V0IiwiZ2V0QXZlcmFnZUNlbGxMZW5ndGgiLCJnZXRIaWdoZXN0TWVhc3VyZWRDZWxsSW5kZXgiLCJnZXRDZWxsTWV0cmljc0FwcHJveCIsImdldENlbGxNZXRyaWNzIiwiZ2V0Q2VsbE9mZnNldEFwcHJveCIsImdldENvbnRlbnRMZW5ndGgiLCJoYXNDb250ZW50TGVuZ3RoIiwiZmxvd1JlbGF0aXZlT2Zmc2V0IiwiY2FydGVzaWFuT2Zmc2V0IiwiX2ludmFsaWRhdGVJZk9yaWVudGF0aW9uQ2hhbmdlZCIsIl9zZWxlY3RMZW5ndGgiLCJfc2VsZWN0T2Zmc2V0Il0sIm1hcHBpbmdzIjoiQUFBO2VDMEQ7RUNpQjtHRDBDO0VFSztHRks7RUdLO0dIUztFSUs7R0pFO0VLTTtHTEU7RU1PO0dOa0I7RU9LO0dQc0I7RVFNO0dSUTtFU0s7R1RFO0VVSztHVkU7RVdNO0dYZ0I7RVlLO0daWTtFYUU7R2JhO0VjRTtHZEs7RWVFO0dmRTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJTdGF0ZVNhZmVQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJzZXRTdGF0ZSIsInNldFN0YXRlJGFyZ3VtZW50XzAiLCJfaW5zdGFsbFNldFN0YXRlSG9va3MiLCJPYmplY3QuZGVmaW5lUHJvcGVydHkkYXJndW1lbnRfMi5nZXQiLCJPYmplY3QuZGVmaW5lUHJvcGVydHkkYXJndW1lbnRfMi5zZXQiXSwibWFwcGluZ3MiOiJBQUE7ZUNzQjtFQ007R0RHO0VFRTtxQkNLO09EVztHRkk7RUlFO01DSztPRE07TUVDO09GRTtNQ0c7T0RNO01FQztPRkU7R0pFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlZpZXdhYmlsaXR5SGVscGVyIiwiY29uc3RydWN0b3IiLCJkaXNwb3NlIiwiY29tcHV0ZVZpZXdhYmxlSXRlbXMiLCJvblVwZGF0ZSIsIl92aWV3YWJsZUluZGljZXMuZXZlcnkkYXJndW1lbnRfMCIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsInJlc2V0Vmlld2FibGVJbmRpY2VzIiwicmVjb3JkSW50ZXJhY3Rpb24iLCJfb25VcGRhdGVTeW5jIiwidmlld2FibGVJbmRpY2VzVG9DaGVjay5maWx0ZXIkYXJndW1lbnRfMCIsInZpZXdhYmxlSW5kaWNlc1RvQ2hlY2subWFwJGFyZ3VtZW50XzAiLCJfaXNWaWV3YWJsZSIsIl9nZXRQaXhlbHNWaXNpYmxlIiwiX2lzRW50aXJlbHlWaXNpYmxlIl0sIm1hcHBpbmdzIjoiQUFBO0FDOEU7RUNPO0dESTtFRUs7R0ZLO0VHSztHSGlFO0VJTTtrQ0MwQyxvQ0Q7MkNFUTtPRlc7R0phO0VPSztHUEU7RVFLO0dSRTtFU0U7MkRDZTt3Q0RDO2lDRUk7T0ZHO0dUc0I7Q0RDO0FhRTtDYmdCO0FjRTtDZE87QWVFO0NmTSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkNlbGxSZW5kZXJlciIsIkNlbGxSZW5kZXJlci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJDZWxsUmVuZGVyZXIjX3NlcGFyYXRvcnMuaGlnaGxpZ2h0IiwiQ2VsbFJlbmRlcmVyI19zZXBhcmF0b3JzLnVuaGlnaGxpZ2h0IiwiQ2VsbFJlbmRlcmVyI19zZXBhcmF0b3JzLnVwZGF0ZVByb3BzIiwiQ2VsbFJlbmRlcmVyI3VwZGF0ZVNlcGFyYXRvclByb3BzIiwic2V0U3RhdGUkYXJndW1lbnRfMCIsIkNlbGxSZW5kZXJlciNjb21wb25lbnRXaWxsVW5tb3VudCIsIkNlbGxSZW5kZXJlciNfb25MYXlvdXQiLCJDZWxsUmVuZGVyZXIjX29uQ2VsbEZvY3VzQ2FwdHVyZSIsIkNlbGxSZW5kZXJlciNfcmVuZGVyRWxlbWVudCIsIkNlbGxSZW5kZXJlciNyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7ZUN1RDtFQ1c7R0RVO2VFTTtLRks7aUJHQztLSEs7aUJJQztLSlM7RUtHO2tCQ0M7TURFO0dMQztFT0U7R1BFO2NRRTtHUk07d0JTRTtHVEU7RVVFO0dWdUM7RVdFO0dYZ0U7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVmlydHVhbGl6ZWRMaXN0Q29udGV4dFJlc2V0dGVyIiwiVmlydHVhbGl6ZWRMaXN0Q29udGV4dFByb3ZpZGVyIiwidXNlTWVtbyRhcmd1bWVudF8wIiwiVmlydHVhbGl6ZWRMaXN0Q2VsbENvbnRleHRQcm92aWRlciJdLCJtYXBwaW5ncyI6IkFBQTtPQzZDO0NEVTtPRUs7SUNTO01ETztDRmM7T0lLO0lEVSw4REM7Q0pRIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiaG9yaXpvbnRhbE9yRGVmYXVsdCIsImluaXRpYWxOdW1Ub1JlbmRlck9yRGVmYXVsdCIsIm1heFRvUmVuZGVyUGVyQmF0Y2hPckRlZmF1bHQiLCJvblN0YXJ0UmVhY2hlZFRocmVzaG9sZE9yRGVmYXVsdCIsIm9uRW5kUmVhY2hlZFRocmVzaG9sZE9yRGVmYXVsdCIsIndpbmRvd1NpemVPckRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUE7T0M2UztDREU7T0VHO0NGSTtPR0c7Q0hJO09JRztDSkk7T0tHO0NMSTtPTUc7Q05FIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQ2VsbFJlbmRlck1hc2siLCJjb25zdHJ1Y3RvciIsImVudW1lcmF0ZVJlZ2lvbnMiLCJhZGRDZWxscyIsIm51bUNlbGxzIiwiZXF1YWxzIiwiX3JlZ2lvbnMuZXZlcnkkYXJndW1lbnRfMCIsIl9maW5kUmVnaW9uIl0sIm1hcHBpbmdzIjoiQUFBO09Da0I7RUNJO0dEbUI7RUVFO0dGRTtFR0U7R0hxRTtFSUU7R0pFO0VLRTtRQ0s7d0RERztHTEc7RU9FO0dQa0I7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVmlydHVhbGl6ZWRTZWN0aW9uTGlzdCIsInNjcm9sbFRvTG9jYXRpb24iLCJnZXRMaXN0UmVmIiwicmVuZGVyIiwiVmlydHVhbGl6ZWRMaXN0LnByb3BzLmdldEl0ZW0iLCJWaXJ0dWFsaXplZExpc3QucHJvcHMuZ2V0SXRlbUNvdW50IiwiX2dldEl0ZW0iLCJfa2V5RXh0cmFjdG9yIiwiX3N1YkV4dHJhY3RvciIsIl9jb252ZXJ0Vmlld2FibGUiLCJfb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCIsIl9yZW5kZXJJdGVtIiwiPGFub255bW91cz4iLCJfdXBkYXRlUHJvcHNGb3IiLCJfdXBkYXRlSGlnaGxpZ2h0Rm9yIiwiX3NldFVwZGF0ZUhpZ2hsaWdodEZvciIsIl9zZXRVcGRhdGVQcm9wc0ZvciIsIl9nZXRTZXBhcmF0b3JDb21wb25lbnQiLCJfY2FwdHVyZVJlZiIsIkl0ZW1XaXRoU2VwYXJhdG9yIiwiUmVhY3QudXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJzZXBhcmF0b3JzLmhpZ2hsaWdodCIsInNlcGFyYXRvcnMudW5oaWdobGlnaHQiLCJzZXBhcmF0b3JzLnVwZGF0ZVByb3BzIl0sIm1hcHBpbmdzIjoiQUFBO0FDZ0k7RUNHO0dEdUI7RUVFO0dGRTtFR0U7aUJDc0M7b0REQztzQkVFLGVGO0dIUztFTUU7R04wQjtrQk9HO0dQRztFUUU7R1JzRDtxQlNFO0dUb0I7NEJVRTtHVmlCO0lXRztJQ0U7S1ppRDtvQmFFO0diSzt3QmNFO0dkSzsyQmVFO0dmVTt1QmdCRTtHaEJNO0VpQkU7R2pCc0I7Z0JrQks7R2xCRTtDREM7QW9CZ0M7a0JDcUM7V1JLO0tRRztHREM7ZUVRO0tGTTtpQkdDO0tITTtpQklDO0tKYztDcEI2QiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFuaW1hdGVkU2Nyb2xsVmlld1dpdGhPcldpdGhvdXRJbnZlcnRlZFJlZnJlc2hDb250cm9sIiwiQW5pbWF0ZWRTY3JvbGxWaWV3V2l0aEludmVydGVkUmVmcmVzaENvbnRyb2wiLCJ1c2VNZW1vJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7SUNpQztLRCtCO0VFSztjQ2E7T0RRO0dGdUMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSZWZyZXNoQ29udHJvbCIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVuZGVyIiwiX29uUmVmcmVzaCIsIl9zZXROYXRpdmVSZWYiXSwibWFwcGluZ3MiOiJBQUE7QUMySDtFQ087R0RFO0VFRTtHRnVCO0VHRTtHSHFCO2VJRTtHSlM7a0JLRTtHTE87Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiU2VjdGlvbkxpc3QiLCJzY3JvbGxUb0xvY2F0aW9uIiwicmVjb3JkSW50ZXJhY3Rpb24iLCJmbGFzaFNjcm9sbEluZGljYXRvcnMiLCJnZXRTY3JvbGxSZXNwb25kZXIiLCJnZXRTY3JvbGxhYmxlTm9kZSIsInNldE5hdGl2ZVByb3BzIiwicmVuZGVyIiwiVmlydHVhbGl6ZWRTZWN0aW9uTGlzdC5wcm9wcy5nZXRJdGVtQ291bnQiLCJWaXJ0dWFsaXplZFNlY3Rpb25MaXN0LnByb3BzLmdldEl0ZW0iLCJfY2FwdHVyZVJlZiJdLCJtYXBwaW5ncyI6IkFBQTtlQzZLO0VDZTtHREk7RUVPO0dGRztFR087R0hHO0VJSztHSks7RUtFO0dMSztFTUU7R05LO0VPRTtzQkNpQixxQkQ7aUJFRSw4QkY7R1BHO2dCVUs7R1ZFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIjxhbm9ueW1vdXM+Iiwid2FybiIsImVycm9yIiwicHJpbnRXYXJuaW5nIiwiYXJncy5tYXAkYXJndW1lbnRfMCIsImludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwiLCJyZXN0b3JlQWZ0ZXJEaXNwYXRjaCIsImNhbGxDYWxsYmFjayIsImhhbmRsZVdpbmRvd0Vycm9yIiwicmVwb3J0ZXIub25FcnJvciIsImludm9rZUd1YXJkZWRDYWxsYmFjayIsImludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvciIsInJldGhyb3dDYXVnaHRFcnJvciIsImhhc0NhdWdodEVycm9yIiwiY2xlYXJDYXVnaHRFcnJvciIsImlzQXJyYXkiLCJzZXRDb21wb25lbnRUcmVlIiwidmFsaWRhdGVFdmVudERpc3BhdGNoZXMiLCJleGVjdXRlRGlzcGF0Y2giLCJleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIiLCJleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbCIsImV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUiLCJleGVjdXRlRGlyZWN0RGlzcGF0Y2giLCJoYXNEaXNwYXRjaGVzIiwiRXZlbnRJbnRlcmZhY2UuY3VycmVudFRhcmdldCIsIkV2ZW50SW50ZXJmYWNlLnRpbWVTdGFtcCIsImZ1bmN0aW9uVGhhdFJldHVybnNUcnVlIiwiZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlIiwiU3ludGhldGljRXZlbnQiLCJhc3NpZ24kYXJndW1lbnRfMS5wcmV2ZW50RGVmYXVsdCIsImFzc2lnbiRhcmd1bWVudF8xLnN0b3BQcm9wYWdhdGlvbiIsImFzc2lnbiRhcmd1bWVudF8xLnBlcnNpc3QiLCJhc3NpZ24kYXJndW1lbnRfMS5kZXN0cnVjdG9yIiwiZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbiRhcmd1bWVudF8xIiwiU3ludGhldGljRXZlbnQuZXh0ZW5kIiwiRSIsIkNsYXNzIiwiZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbiIsInNldCIsImdldCIsImNyZWF0ZU9yR2V0UG9vbGVkRXZlbnQiLCJyZWxlYXNlUG9vbGVkRXZlbnQiLCJhZGRFdmVudFBvb2xpbmdUbyIsIlN5bnRoZXRpY0V2ZW50LmV4dGVuZCRhcmd1bWVudF8wLnRvdWNoSGlzdG9yeSIsImlzU3RhcnRpc2giLCJpc01vdmVpc2giLCJpc0VuZGlzaCIsInRpbWVzdGFtcEZvclRvdWNoIiwiY3JlYXRlVG91Y2hSZWNvcmQiLCJyZXNldFRvdWNoUmVjb3JkIiwiZ2V0VG91Y2hJZGVudGlmaWVyIiwicmVjb3JkVG91Y2hTdGFydCIsInJlY29yZFRvdWNoTW92ZSIsInJlY29yZFRvdWNoRW5kIiwicHJpbnRUb3VjaCIsInByaW50VG91Y2hCYW5rIiwiUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUuaW5zdHJ1bWVudCIsIlJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnJlY29yZFRvdWNoVHJhY2siLCJhY2N1bXVsYXRlIiwiYWNjdW11bGF0ZUludG8iLCJmb3JFYWNoQWNjdW11bGF0ZWQiLCJjaGFuZ2VSZXNwb25kZXIiLCJnZXRQYXJlbnQkMSIsImdldExvd2VzdENvbW1vbkFuY2VzdG9yIiwiaXNBbmNlc3RvciIsInRyYXZlcnNlVHdvUGhhc2UkMSIsImdldExpc3RlbmVyJDEiLCJsaXN0ZW5lckF0UGhhc2UkMSIsImFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMkMSIsImFjY3VtdWxhdGVEaXNwYXRjaGVzJDEiLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxIiwiYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMkMSIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0IiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlJDEiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzJDEiLCJzZXRSZXNwb25kZXJBbmRFeHRyYWN0VHJhbnNmZXIiLCJjYW5UcmlnZ2VyVHJhbnNmZXIiLCJub1Jlc3BvbmRlclRvdWNoZXMiLCJSZXNwb25kZXJFdmVudFBsdWdpbi5fZ2V0UmVzcG9uZGVyIiwiUmVzcG9uZGVyRXZlbnRQbHVnaW4uZXh0cmFjdEV2ZW50cyIsIlJlc3BvbmRlckV2ZW50UGx1Z2luLmluamVjdGlvbi5pbmplY3RHbG9iYWxSZXNwb25kZXJIYW5kbGVyIiwicmVjb21wdXRlUGx1Z2luT3JkZXJpbmciLCJwdWJsaXNoRXZlbnRGb3JQbHVnaW4iLCJwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZSIsImluamVjdEV2ZW50UGx1Z2luT3JkZXIiLCJpbmplY3RFdmVudFBsdWdpbnNCeU5hbWUiLCJnZXRMaXN0ZW5lciIsImxpc3RlbmVyQXRQaGFzZSIsImFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMiLCJnZXRQYXJlbnQiLCJ0cmF2ZXJzZVR3b1BoYXNlIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMiLCJhY2N1bXVsYXRlQ2FwdHVyZVBoYXNlRGlzcGF0Y2hlcyIsImFjY3VtdWxhdGVEaXNwYXRjaGVzIiwiYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUiLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyIsIlJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW4uZXh0cmFjdEV2ZW50cyIsInByZWNhY2hlRmliZXJOb2RlIiwidW5jYWNoZUZpYmVyTm9kZSIsImdldEluc3RhbmNlRnJvbVRhZyIsImdldFRhZ0Zyb21JbnN0YW5jZSIsImdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUiLCJ1cGRhdGVGaWJlclByb3BzIiwiYmF0Y2hlZFVwZGF0ZXNJbXBsIiwiYmF0Y2hlZFVwZGF0ZXMkMSIsInNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24iLCJleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2UiLCJleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2VUb3BMZXZlbCIsInJ1bkV2ZW50c0luQmF0Y2giLCJ0b3VjaFN1YnNlcXVlbmNlIiwicmVtb3ZlVG91Y2hlc0F0SW5kaWNlcyIsIl9yZWNlaXZlUm9vdE5vZGVJREV2ZW50IiwiYmF0Y2hlZFVwZGF0ZXMkMSRhcmd1bWVudF8wIiwiZXh0cmFjdFBsdWdpbkV2ZW50cyIsInJ1bkV4dHJhY3RlZFBsdWdpbkV2ZW50c0luQmF0Y2giLCJyZWNlaXZlRXZlbnQiLCJyZWNlaXZlVG91Y2hlcyIsIlJlYWN0TmF0aXZlR2xvYmFsUmVzcG9uZGVySGFuZGxlci5vbkNoYW5nZSIsImdldEl0ZXJhdG9yRm4iLCJnZXRXcmFwcGVkTmFtZSQxIiwiZ2V0Q29udGV4dE5hbWUkMSIsImdldENvbXBvbmVudE5hbWVGcm9tVHlwZSIsImdldFdyYXBwZWROYW1lIiwiZ2V0Q29udGV4dE5hbWUiLCJnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyIiwiZ2V0TmVhcmVzdE1vdW50ZWRGaWJlciIsImlzRmliZXJNb3VudGVkIiwiaXNNb3VudGVkIiwiYXNzZXJ0SXNNb3VudGVkIiwiZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgiLCJmaW5kQ3VycmVudEhvc3RGaWJlciIsImZpbmRDdXJyZW50SG9zdEZpYmVySW1wbCIsImRvZXNGaWJlckNvbnRhaW4iLCJkZWZhdWx0RGlmZmVyIiwicmVzdG9yZURlbGV0ZWRWYWx1ZXNJbk5lc3RlZEFycmF5IiwiZGlmZk5lc3RlZEFycmF5UHJvcGVydHkiLCJkaWZmTmVzdGVkUHJvcGVydHkiLCJhZGROZXN0ZWRQcm9wZXJ0eSIsImNsZWFyTmVzdGVkUHJvcGVydHkiLCJkaWZmUHJvcGVydGllcyIsImFkZFByb3BlcnRpZXMiLCJjbGVhclByb3BlcnRpZXMiLCJjcmVhdGUiLCJkaWZmIiwibW91bnRTYWZlQ2FsbGJhY2tfTk9UX1JFQUxMWV9TQUZFIiwid2FybkZvclN0eWxlUHJvcHMiLCJSZWFjdE5hdGl2ZUZpYmVySG9zdENvbXBvbmVudCIsImJsdXIiLCJmb2N1cyIsIm1lYXN1cmUiLCJtZWFzdXJlSW5XaW5kb3ciLCJtZWFzdXJlTGF5b3V0Iiwic2V0TmF0aXZlUHJvcHMiLCJkaXNhYmxlZExvZyIsImRpc2FibGVMb2dzIiwicmVlbmFibGVMb2dzIiwiaW5qZWN0SW50ZXJuYWxzIiwib25TY2hlZHVsZVJvb3QiLCJvbkNvbW1pdFJvb3QiLCJvblBvc3RDb21taXRSb290Iiwib25Db21taXRVbm1vdW50Iiwic2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMiLCJpbmplY3RQcm9maWxpbmdIb29rcyIsImdldExhbmVMYWJlbE1hcCIsImNsejMyRmFsbGJhY2siLCJnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyIsImdldE5leHRMYW5lcyIsImdldEVudGFuZ2xlZExhbmVzIiwiY29tcHV0ZUV4cGlyYXRpb25UaW1lIiwibWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZCIsImdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yIiwiaW5jbHVkZXNTeW5jTGFuZSIsImluY2x1ZGVzTm9uSWRsZVdvcmsiLCJpbmNsdWRlc09ubHlSZXRyaWVzIiwiaW5jbHVkZXNPbmx5Tm9uVXJnZW50TGFuZXMiLCJpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyIsImluY2x1ZGVzQmxvY2tpbmdMYW5lIiwiaW5jbHVkZXNFeHBpcmVkTGFuZSIsImlzVHJhbnNpdGlvbkxhbmUiLCJjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSIsImNsYWltTmV4dFJldHJ5TGFuZSIsImdldEhpZ2hlc3RQcmlvcml0eUxhbmUiLCJwaWNrQXJiaXRyYXJ5TGFuZSIsInBpY2tBcmJpdHJhcnlMYW5lSW5kZXgiLCJsYW5lVG9JbmRleCIsImluY2x1ZGVzU29tZUxhbmUiLCJpc1N1YnNldE9mTGFuZXMiLCJtZXJnZUxhbmVzIiwicmVtb3ZlTGFuZXMiLCJpbnRlcnNlY3RMYW5lcyIsImxhbmVUb0xhbmVzIiwiY3JlYXRlTGFuZU1hcCIsIm1hcmtSb290VXBkYXRlZCIsIm1hcmtSb290U3VzcGVuZGVkJDEiLCJtYXJrUm9vdFBpbmdlZCIsIm1hcmtSb290RmluaXNoZWQiLCJtYXJrU3Bhd25lZERlZmVycmVkTGFuZSIsIm1hcmtSb290RW50YW5nbGVkIiwidXBncmFkZVBlbmRpbmdMYW5lVG9TeW5jIiwibWFya0hpZGRlblVwZGF0ZSIsImdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb24iLCJhZGRGaWJlclRvTGFuZXNNYXAiLCJtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQiLCJ1cGRhdGVycy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJnZXRUcmFuc2l0aW9uc0ZvckxhbmVzIiwiZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5Iiwic2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5IiwiaGlnaGVyRXZlbnRQcmlvcml0eSIsImxvd2VyRXZlbnRQcmlvcml0eSIsImlzSGlnaGVyRXZlbnRQcmlvcml0eSIsImxhbmVzVG9FdmVudFByaW9yaXR5Iiwic2hpbSQxIiwic2hpbSIsImFsbG9jYXRlVGFnIiwicmVjdXJzaXZlbHlVbmNhY2hlRmliZXJOb2RlIiwiYXBwZW5kSW5pdGlhbENoaWxkIiwiY3JlYXRlSW5zdGFuY2UiLCJjcmVhdGVUZXh0SW5zdGFuY2UiLCJmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbiIsInBhcmVudEluc3RhbmNlLl9jaGlsZHJlbi5tYXAkYXJndW1lbnRfMCIsImdldFJvb3RIb3N0Q29udGV4dCIsImdldENoaWxkSG9zdENvbnRleHQiLCJnZXRQdWJsaWNJbnN0YW5jZSIsInNob3VsZFNldFRleHRDb250ZW50IiwiZ2V0Q3VycmVudEV2ZW50UHJpb3JpdHkiLCJzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uIiwiYXBwZW5kQ2hpbGQiLCJhcHBlbmRDaGlsZFRvQ29udGFpbmVyIiwiY29tbWl0VGV4dFVwZGF0ZSIsImNvbW1pdE1vdW50IiwiY29tbWl0VXBkYXRlIiwiaW5zZXJ0QmVmb3JlIiwiaW5zZXJ0SW5Db250YWluZXJCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lciIsInJlc2V0VGV4dENvbnRlbnQiLCJoaWRlSW5zdGFuY2UiLCJoaWRlVGV4dEluc3RhbmNlIiwidW5oaWRlSW5zdGFuY2UiLCJ1bmhpZGVUZXh0SW5zdGFuY2UiLCJwcmVsb2FkSW5zdGFuY2UiLCJ3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5IiwiZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUiLCJkZXNjcmliZUNvbXBvbmVudEZyYW1lIiwiZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lIiwiZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lIiwiZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWIiwic2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQiLCJjaGVja1Byb3BUeXBlcyIsImNyZWF0ZUN1cnNvciIsInBvcCIsInB1c2giLCJnZXRVbm1hc2tlZENvbnRleHQiLCJjYWNoZUNvbnRleHQiLCJnZXRNYXNrZWRDb250ZXh0IiwiaGFzQ29udGV4dENoYW5nZWQiLCJpc0NvbnRleHRQcm92aWRlciIsInBvcENvbnRleHQiLCJwb3BUb3BMZXZlbENvbnRleHRPYmplY3QiLCJwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0IiwicHJvY2Vzc0NoaWxkQ29udGV4dCIsInB1c2hDb250ZXh0UHJvdmlkZXIiLCJpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyIiwiZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQiLCJpc09mZnNjcmVlbk1hbnVhbCIsImlzIiwiaXNSb290RGVoeWRyYXRlZCIsInJlcXVpcmVkQ29udGV4dCIsImdldFJvb3RIb3N0Q29udGFpbmVyIiwicHVzaEhvc3RDb250YWluZXIiLCJwb3BIb3N0Q29udGFpbmVyIiwiZ2V0SG9zdENvbnRleHQiLCJwdXNoSG9zdENvbnRleHQiLCJwb3BIb3N0Q29udGV4dCIsImRpZFN1c3BlbmRPckVycm9yV2hpbGVIeWRyYXRpbmdERVYiLCJwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlIiwicHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UiLCJwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UiLCJwb3BIeWRyYXRpb25TdGF0ZSIsInVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlIiwiZ2V0SXNIeWRyYXRpbmciLCJxdWV1ZUh5ZHJhdGlvbkVycm9yIiwiZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcyIsImdldENvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyIsImVucXVldWVVcGRhdGUkMSIsImVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZSIsImVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZUFuZEVhZ2VybHlCYWlsb3V0IiwiZW5xdWV1ZUNvbmN1cnJlbnRDbGFzc1VwZGF0ZSIsImVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZSIsInVuc2FmZV9tYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdCIsIm1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290IiwiZ2V0Um9vdEZvclVwZGF0ZWRGaWJlciIsImRldGVjdFVwZGF0ZU9uVW5tb3VudGVkRmliZXIiLCJlbnN1cmVSb290SXNTY2hlZHVsZWQiLCJmbHVzaFN5bmNXb3JrT25BbGxSb290cyIsImZsdXNoU3luY1dvcmtPbkxlZ2FjeVJvb3RzT25seSIsImZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsIiwidGhyb3dFcnJvciIsInByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayIsInNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2siLCJnZXRDb250aW51YXRpb25Gb3JSb290Iiwic2NoZWR1bGVDYWxsYmFjayQxIiwiY2FuY2VsQ2FsbGJhY2siLCJzY2hlZHVsZUltbWVkaWF0ZVRhc2siLCJSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmN1cnJlbnQucHVzaCRhcmd1bWVudF8wIiwicmVxdWVzdFRyYW5zaXRpb25MYW5lIiwiY2hhaW5UaGVuYWJsZVZhbHVlIiwidGhlbmFibGVXaXRoT3ZlcnJpZGUudGhlbiIsInRoZW5hYmxlLnRoZW4kYXJndW1lbnRfMCIsInRoZW5hYmxlLnRoZW4kYXJndW1lbnRfMSIsInBlZWtFbnRhbmdsZWRBY3Rpb25MYW5lIiwicGVla0VudGFuZ2xlZEFjdGlvblRoZW5hYmxlIiwiaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlIiwiY2xvbmVVcGRhdGVRdWV1ZSIsImNyZWF0ZVVwZGF0ZSIsImVucXVldWVVcGRhdGUiLCJlbnRhbmdsZVRyYW5zaXRpb25zIiwiZW5xdWV1ZUNhcHR1cmVkVXBkYXRlIiwiZ2V0U3RhdGVGcm9tVXBkYXRlIiwic3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiIsInByb2Nlc3NVcGRhdGVRdWV1ZSIsInJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nIiwiY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZyIsImRlZmVySGlkZGVuQ2FsbGJhY2tzIiwiY29tbWl0SGlkZGVuQ2FsbGJhY2tzIiwiY29tbWl0Q2FsbGJhY2tzIiwic2hhbGxvd0VxdWFsIiwiZGVzY3JpYmVGaWJlciIsImdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCIsImdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsIiwiZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldiIsInJlc2V0Q3VycmVudEZpYmVyIiwic2V0Q3VycmVudEZpYmVyIiwiZ2V0Q3VycmVudEZpYmVyIiwic2V0SXNSZW5kZXJpbmciLCJSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyIsIlJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzIiwiUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmciLCJSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nIiwiUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyIsImZpbmRTdHJpY3RSb290Iiwic2V0VG9Tb3J0ZWRTdHJpbmciLCJzZXQuZm9yRWFjaCRhcmd1bWVudF8wIiwicGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2gkYXJndW1lbnRfMCIsInBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaCRhcmd1bWVudF8wIiwicGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2gkYXJndW1lbnRfMCIsInBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2gkYXJndW1lbnRfMCIsInBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJmaWJlckFycmF5LmZvckVhY2gkYXJndW1lbnRfMCIsInR5cGVOYW1lIiwid2lsbENvZXJjaW9uVGhyb3ciLCJ0ZXN0U3RyaW5nQ29lcmNpb24iLCJjaGVja0tleVN0cmluZ0NvZXJjaW9uIiwiY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24iLCJnZXRUaGVuYWJsZXNGcm9tU3RhdGUiLCJub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUudGhlbiIsImNyZWF0ZVRoZW5hYmxlU3RhdGUiLCJpc1RoZW5hYmxlUmVzb2x2ZWQiLCJub29wIiwidHJhY2tVc2VkVGhlbmFibGUiLCJwZW5kaW5nVGhlbmFibGUudGhlbiRhcmd1bWVudF8wIiwicGVuZGluZ1RoZW5hYmxlLnRoZW4kYXJndW1lbnRfMSIsImdldFN1c3BlbmRlZFRoZW5hYmxlIiwiY2hlY2tJZlVzZVdyYXBwZWRJblRyeUNhdGNoIiwiY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2giLCJ3YXJuRm9yTWlzc2luZ0tleSIsImlzUmVhY3RDbGFzcyIsInVud3JhcFRoZW5hYmxlIiwiY29lcmNlUmVmIiwicmVmIiwidGhyb3dPbkludmFsaWRPYmplY3RUeXBlIiwid2Fybk9uRnVuY3Rpb25UeXBlIiwicmVzb2x2ZUxhenkiLCJjcmVhdGVDaGlsZFJlY29uY2lsZXIiLCJkZWxldGVDaGlsZCIsImRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuIiwibWFwUmVtYWluaW5nQ2hpbGRyZW4iLCJ1c2VGaWJlciIsInBsYWNlQ2hpbGQiLCJwbGFjZVNpbmdsZUNoaWxkIiwidXBkYXRlVGV4dE5vZGUiLCJ1cGRhdGVFbGVtZW50IiwidXBkYXRlUG9ydGFsIiwidXBkYXRlRnJhZ21lbnQiLCJjcmVhdGVDaGlsZCIsInVwZGF0ZVNsb3QiLCJ1cGRhdGVGcm9tTWFwIiwid2Fybk9uSW52YWxpZEtleSIsInJlY29uY2lsZUNoaWxkcmVuQXJyYXkiLCJleGlzdGluZ0NoaWxkcmVuLmZvckVhY2gkYXJndW1lbnRfMCIsInJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IiLCJyZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZSIsInJlY29uY2lsZVNpbmdsZUVsZW1lbnQiLCJyZWNvbmNpbGVTaW5nbGVQb3J0YWwiLCJyZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwiLCJyZWNvbmNpbGVDaGlsZEZpYmVycyIsInJlc2V0Q2hpbGRSZWNvbmNpbGVyT25VbndpbmQiLCJjbG9uZUNoaWxkRmliZXJzIiwicmVzZXRDaGlsZEZpYmVycyIsInB1c2hIaWRkZW5Db250ZXh0IiwicmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayIsInBvcEhpZGRlbkNvbnRleHQiLCJpc0N1cnJlbnRUcmVlSGlkZGVuIiwiZ2V0U2hlbGxCb3VuZGFyeSIsInB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlciIsInB1c2hGYWxsYmFja1RyZWVTdXNwZW5zZUhhbmRsZXIiLCJwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyIiwicmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrIiwiZ2V0U3VzcGVuc2VIYW5kbGVyIiwicG9wU3VzcGVuc2VIYW5kbGVyIiwiaGFzU3VzcGVuc2VMaXN0Q29udGV4dCIsInNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dCIsInNldFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0IiwicHVzaFN1c3BlbnNlTGlzdENvbnRleHQiLCJwb3BTdXNwZW5zZUxpc3RDb250ZXh0IiwiZmluZEZpcnN0U3VzcGVuZGVkIiwibW91bnRIb29rVHlwZXNEZXYiLCJ1cGRhdGVIb29rVHlwZXNEZXYiLCJjaGVja0RlcHNBcmVBcnJheURldiIsIndhcm5Pbkhvb2tNaXNtYXRjaEluRGV2Iiwid2FybklmQXN5bmNDbGllbnRDb21wb25lbnQiLCJ0aHJvd0ludmFsaWRIb29rRXJyb3IiLCJhcmVIb29rSW5wdXRzRXF1YWwiLCJyZW5kZXJXaXRoSG9va3MiLCJmaW5pc2hSZW5kZXJpbmdIb29rcyIsInJlcGxheVN1c3BlbmRlZENvbXBvbmVudFdpdGhIb29rcyIsInJlbmRlcldpdGhIb29rc0FnYWluIiwiYmFpbG91dEhvb2tzIiwicmVzZXRIb29rc0FmdGVyVGhyb3ciLCJyZXNldEhvb2tzT25VbndpbmQiLCJtb3VudFdvcmtJblByb2dyZXNzSG9vayIsInVwZGF0ZVdvcmtJblByb2dyZXNzSG9vayIsImNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUiLCJ1c2VUaGVuYWJsZSIsInVzZSIsImJhc2ljU3RhdGVSZWR1Y2VyIiwibW91bnRSZWR1Y2VyIiwidXBkYXRlUmVkdWNlciIsInVwZGF0ZVJlZHVjZXJJbXBsIiwicmVyZW5kZXJSZWR1Y2VyIiwibW91bnRTeW5jRXh0ZXJuYWxTdG9yZSIsInVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlIiwicHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayIsInVwZGF0ZVN0b3JlSW5zdGFuY2UiLCJzdWJzY3JpYmVUb1N0b3JlIiwiaGFuZGxlU3RvcmVDaGFuZ2UiLCJjaGVja0lmU25hcHNob3RDaGFuZ2VkIiwiZm9yY2VTdG9yZVJlcmVuZGVyIiwibW91bnRTdGF0ZUltcGwiLCJtb3VudFN0YXRlIiwidXBkYXRlU3RhdGUiLCJyZXJlbmRlclN0YXRlIiwicHVzaEVmZmVjdCIsImNyZWF0ZUVmZmVjdEluc3RhbmNlIiwibW91bnRSZWYiLCJ1cGRhdGVSZWYiLCJtb3VudEVmZmVjdEltcGwiLCJ1cGRhdGVFZmZlY3RJbXBsIiwibW91bnRFZmZlY3QiLCJ1cGRhdGVFZmZlY3QiLCJtb3VudEluc2VydGlvbkVmZmVjdCIsInVwZGF0ZUluc2VydGlvbkVmZmVjdCIsIm1vdW50TGF5b3V0RWZmZWN0IiwidXBkYXRlTGF5b3V0RWZmZWN0IiwiaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdCIsIm1vdW50SW1wZXJhdGl2ZUhhbmRsZSIsInVwZGF0ZUltcGVyYXRpdmVIYW5kbGUiLCJtb3VudERlYnVnVmFsdWUiLCJtb3VudENhbGxiYWNrIiwidXBkYXRlQ2FsbGJhY2siLCJtb3VudE1lbW8iLCJ1cGRhdGVNZW1vIiwibW91bnREZWZlcnJlZFZhbHVlIiwidXBkYXRlRGVmZXJyZWRWYWx1ZSIsInJlcmVuZGVyRGVmZXJyZWRWYWx1ZSIsIm1vdW50RGVmZXJyZWRWYWx1ZUltcGwiLCJ1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbCIsInN0YXJ0VHJhbnNpdGlvbiIsIm1vdW50VHJhbnNpdGlvbiIsInVwZGF0ZVRyYW5zaXRpb24iLCJyZXJlbmRlclRyYW5zaXRpb24iLCJtb3VudElkIiwidXBkYXRlSWQiLCJkaXNwYXRjaFJlZHVjZXJBY3Rpb24iLCJkaXNwYXRjaFNldFN0YXRlIiwiaXNSZW5kZXJQaGFzZVVwZGF0ZSIsImVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZSIsImVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZSIsIndhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyIsIndhcm5JbnZhbGlkSG9va0FjY2VzcyIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi5yZWFkQ29udGV4dCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VDYWxsYmFjayIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUluc2VydGlvbkVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VMYXlvdXRFZmZlY3QiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlTWVtbyIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VSZWR1Y2VyIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZVJlZiIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VTdGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VEZWJ1Z1ZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZURlZmVycmVkVmFsdWUiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlVHJhbnNpdGlvbiIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJZCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYucmVhZENvbnRleHQiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZUNhbGxiYWNrIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VFZmZlY3QiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZUltcGVyYXRpdmVIYW5kbGUiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZUluc2VydGlvbkVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlTGF5b3V0RWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VNZW1vIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VSZWR1Y2VyIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VSZWYiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZVN0YXRlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VEZWJ1Z1ZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VEZWZlcnJlZFZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VUcmFuc2l0aW9uIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlSWQiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnJlYWRDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VDYWxsYmFjayIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlQ29udGV4dCIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VJbnNlcnRpb25FZmZlY3QiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUxheW91dEVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlTWVtbyIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlUmVkdWNlciIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlUmVmIiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VTdGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRGVidWdWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRGVmZXJyZWRWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlVHJhbnNpdGlvbiIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlU3luY0V4dGVybmFsU3RvcmUiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUlkIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnJlYWRDb250ZXh0IiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUNhbGxiYWNrIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUNvbnRleHQiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlRWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUltcGVyYXRpdmVIYW5kbGUiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlSW5zZXJ0aW9uRWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUxheW91dEVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VNZW1vIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVJlZHVjZXIiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlUmVmIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVN0YXRlIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZURlYnVnVmFsdWUiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlRGVmZXJyZWRWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VUcmFuc2l0aW9uIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVN5bmNFeHRlcm5hbFN0b3JlIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUlkIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi5yZWFkQ29udGV4dCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VDYWxsYmFjayIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlQ29udGV4dCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VJbnNlcnRpb25FZmZlY3QiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUxheW91dEVmZmVjdCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlTWVtbyIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlUmVkdWNlciIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlUmVmIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VTdGF0ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRGVidWdWYWx1ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRGVmZXJyZWRWYWx1ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlVHJhbnNpdGlvbiIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlU3luY0V4dGVybmFsU3RvcmUiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUlkIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYucmVhZENvbnRleHQiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2UiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VDYWxsYmFjayIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUNvbnRleHQiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VFZmZlY3QiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlSW5zZXJ0aW9uRWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlTGF5b3V0RWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlTWVtbyIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZVJlZHVjZXIiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VSZWYiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VTdGF0ZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZURlYnVnVmFsdWUiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VEZWZlcnJlZFZhbHVlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlVHJhbnNpdGlvbiIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZVN5bmNFeHRlcm5hbFN0b3JlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlSWQiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnJlYWRDb250ZXh0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2UiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUNhbGxiYWNrIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VDb250ZXh0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VFZmZlY3QiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUltcGVyYXRpdmVIYW5kbGUiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUluc2VydGlvbkVmZmVjdCIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlTGF5b3V0RWZmZWN0IiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VNZW1vIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VSZWR1Y2VyIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VSZWYiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZVN0YXRlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VEZWJ1Z1ZhbHVlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VEZWZlcnJlZFZhbHVlIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VUcmFuc2l0aW9uIiwiSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlSWQiLCJpc0N1cnJlbnRVcGRhdGVOZXN0ZWQiLCJtYXJrTmVzdGVkVXBkYXRlU2NoZWR1bGVkIiwicmVzZXROZXN0ZWRVcGRhdGVGbGFnIiwic3luY05lc3RlZFVwZGF0ZUZsYWciLCJnZXRDb21taXRUaW1lIiwicmVjb3JkQ29tbWl0VGltZSIsInN0YXJ0UHJvZmlsZXJUaW1lciIsInN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nIiwic3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSIsInJlY29yZExheW91dEVmZmVjdER1cmF0aW9uIiwicmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uIiwic3RhcnRMYXlvdXRFZmZlY3RUaW1lciIsInN0YXJ0UGFzc2l2ZUVmZmVjdFRpbWVyIiwidHJhbnNmZXJBY3R1YWxEdXJhdGlvbiIsInJlc29sdmVEZWZhdWx0UHJvcHMiLCJPYmplY3QuZGVmaW5lUHJvcGVydHkkYXJndW1lbnRfMi52YWx1ZSIsIndhcm5PbkludmFsaWRDYWxsYmFjayIsIndhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSIsImFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVTZXRTdGF0ZSIsImNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSIsImNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiY2hlY2tDbGFzc0luc3RhbmNlIiwiYWRvcHRDbGFzc0luc3RhbmNlIiwiY29uc3RydWN0Q2xhc3NJbnN0YW5jZSIsImNhbGxDb21wb25lbnRXaWxsTW91bnQiLCJjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm1vdW50Q2xhc3NJbnN0YW5jZSIsInJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSIsInVwZGF0ZUNsYXNzSW5zdGFuY2UiLCJjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlciIsImNyZWF0ZUNhcHR1cmVkVmFsdWUiLCJzaG93RXJyb3JEaWFsb2ciLCJsb2dDYXB0dXJlZEVycm9yIiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwiY3JlYXRlUm9vdEVycm9yVXBkYXRlIiwidXBkYXRlLmNhbGxiYWNrIiwiY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSIsInVwZGF0ZS5wYXlsb2FkIiwiY2FsbGJhY2siLCJyZXNldFN1c3BlbmRlZENvbXBvbmVudCIsIm1hcmtTdXNwZW5zZUJvdW5kYXJ5U2hvdWxkQ2FwdHVyZSIsInRocm93RXhjZXB0aW9uIiwicmVjb25jaWxlQ2hpbGRyZW4iLCJmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlIiwidXBkYXRlRm9yd2FyZFJlZiIsInVwZGF0ZU1lbW9Db21wb25lbnQiLCJ1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50IiwidXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50IiwiZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQiLCJ1cGRhdGVNb2RlIiwidXBkYXRlUHJvZmlsZXIiLCJtYXJrUmVmJDEiLCJ1cGRhdGVGdW5jdGlvbkNvbXBvbmVudCIsInJlcGxheUZ1bmN0aW9uQ29tcG9uZW50IiwidXBkYXRlQ2xhc3NDb21wb25lbnQiLCJmaW5pc2hDbGFzc0NvbXBvbmVudCIsInB1c2hIb3N0Um9vdENvbnRleHQiLCJ1cGRhdGVIb3N0Um9vdCIsInVwZGF0ZUhvc3RDb21wb25lbnQkMSIsInVwZGF0ZUhvc3RUZXh0JDEiLCJtb3VudExhenlDb21wb25lbnQiLCJtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudCIsIm1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudCIsInZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldiIsIm1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZSIsInVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUiLCJzaG91bGRSZW1haW5PbkZhbGxiYWNrIiwiZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUiLCJ1cGRhdGVTdXNwZW5zZUNvbXBvbmVudCIsIm1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4iLCJtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbiIsIm1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlciIsInVwZGF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIiLCJ1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbiIsInVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbiIsInJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nIiwibW91bnRTdXNwZW5zZUZhbGxiYWNrQWZ0ZXJSZXRyeVdpdGhvdXRIeWRyYXRpbmciLCJ1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQiLCJzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIiLCJwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2UiLCJmaW5kTGFzdENvbnRlbnRSb3ciLCJ2YWxpZGF0ZVJldmVhbE9yZGVyIiwidmFsaWRhdGVUYWlsT3B0aW9ucyIsInZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQiLCJ2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuIiwiaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlIiwidXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50IiwidXBkYXRlUG9ydGFsQ29tcG9uZW50IiwidXBkYXRlQ29udGV4dFByb3ZpZGVyIiwidXBkYXRlQ29udGV4dENvbnN1bWVyIiwibWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUiLCJyZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlIiwiYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayIsInJlbW91bnRGaWJlciIsImNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0IiwiYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUiLCJiZWdpbldvcmskMSIsInJlc2V0Q29udGV4dERlcGVuZGVuY2llcyIsImVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYiLCJleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYiLCJwdXNoUHJvdmlkZXIiLCJwb3BQcm92aWRlciIsInNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgiLCJwcm9wYWdhdGVDb250ZXh0Q2hhbmdlIiwicHJvcGFnYXRlQ29udGV4dENoYW5nZV9lYWdlciIsInByZXBhcmVUb1JlYWRDb250ZXh0IiwicmVhZENvbnRleHQiLCJyZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24iLCJyZWFkQ29udGV4dEZvckNvbnN1bWVyIiwicmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uIiwiaGFuZGxlQXN5bmNBY3Rpb24iLCJub3RpZnlUcmFuc2l0aW9uQ2FsbGJhY2tzIiwiY2FsbGJhY2tzLmZvckVhY2gkYXJndW1lbnRfMCIsImdldFN1c3BlbmRlZENhY2hlIiwibWFya1VwZGF0ZSIsIm1hcmtSZWYiLCJhcHBlbmRBbGxDaGlsZHJlbiIsInVwZGF0ZUhvc3RDb21wb25lbnQiLCJwcmVsb2FkSW5zdGFuY2VBbmRTdXNwZW5kSWZOZWVkZWQiLCJzY2hlZHVsZVJldHJ5RWZmZWN0IiwidXBkYXRlSG9zdFRleHQiLCJjdXRPZmZUYWlsSWZOZWVkZWQiLCJidWJibGVQcm9wZXJ0aWVzIiwiY29tcGxldGVEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeSIsImNvbXBsZXRlV29yayIsInVud2luZFdvcmsiLCJ1bndpbmRJbnRlcnJ1cHRlZFdvcmsiLCJzaG91bGRQcm9maWxlIiwicmVwb3J0VW5jYXVnaHRFcnJvckluREVWIiwiaW52b2tlR3VhcmRlZENhbGxiYWNrJGFyZ3VtZW50XzEiLCJjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIiLCJzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQiLCJzYWZlbHlBdHRhY2hSZWYiLCJzYWZlbHlEZXRhY2hSZWYiLCJzYWZlbHlDYWxsRGVzdHJveSIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19iZWdpbiIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19jb21wbGV0ZSIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c09uRmliZXIiLCJjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQiLCJjb21taXRIb29rRWZmZWN0TGlzdE1vdW50IiwiY29tbWl0UGFzc2l2ZUVmZmVjdER1cmF0aW9ucyIsImNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzIiwiY29tbWl0Q2xhc3NMYXlvdXRMaWZlY3ljbGVzIiwiY29tbWl0Q2xhc3NDYWxsYmFja3MiLCJjb21taXRIb3N0Q29tcG9uZW50TW91bnQiLCJjb21taXRQcm9maWxlclVwZGF0ZSIsImNvbW1pdExheW91dEVmZmVjdE9uRmliZXIiLCJoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbiIsImNvbW1pdEF0dGFjaFJlZiIsImRldGFjaEZpYmVyTXV0YXRpb24iLCJkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyIsImdldEhvc3RQYXJlbnRGaWJlciIsImlzSG9zdFBhcmVudCIsImdldEhvc3RTaWJsaW5nIiwiY29tbWl0UGxhY2VtZW50IiwiaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lciIsImluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZSIsImNvbW1pdERlbGV0aW9uRWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMiLCJjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyIiwiY29tbWl0U3VzcGVuc2VDYWxsYmFjayIsImdldFJldHJ5Q2FjaGUiLCJkZXRhY2hPZmZzY3JlZW5JbnN0YW5jZSIsImF0dGFjaE9mZnNjcmVlbkluc3RhbmNlIiwiYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyIsIndha2VhYmxlcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJjb21taXRNdXRhdGlvbkVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzIiwiY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlciIsImNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyIsImNvbW1pdExheW91dEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyIsImRpc2FwcGVhckxheW91dEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyIsInJlYXBwZWFyTGF5b3V0RWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMiLCJjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyIsImNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyIsImNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIiLCJyZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMiLCJyZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyIsImNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0cyIsImFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQiLCJyZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQiLCJhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlciIsImRldGFjaEFsdGVybmF0ZVNpYmxpbmdzIiwiY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMiLCJjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIiLCJyZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzIiwiZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QiLCJjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luIiwiY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9jb21wbGV0ZSIsImNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyIiwiaW52b2tlTGF5b3V0RWZmZWN0TW91bnRJbkRFViIsImludm9rZVBhc3NpdmVFZmZlY3RNb3VudEluREVWIiwiaW52b2tlTGF5b3V0RWZmZWN0VW5tb3VudEluREVWIiwiaW52b2tlUGFzc2l2ZUVmZmVjdFVubW91bnRJbkRFViIsImlzTGVnYWN5QWN0RW52aXJvbm1lbnQiLCJpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCIsInJlc2V0UmVuZGVyVGltZXIiLCJnZXRSZW5kZXJUYXJnZXRUaW1lIiwiZ2V0V29ya0luUHJvZ3Jlc3NSb290IiwiZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMiLCJpc1dvcmtMb29wU3VzcGVuZGVkT25EYXRhIiwicmVxdWVzdFVwZGF0ZUxhbmUiLCJyZXF1ZXN0UmV0cnlMYW5lIiwicmVxdWVzdERlZmVycmVkTGFuZSIsInBlZWtEZWZlcnJlZExhbmUiLCJzY2hlZHVsZVVwZGF0ZU9uRmliZXIiLCJpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUiLCJwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QiLCJyZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvciIsInF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMiLCJmaW5pc2hDb25jdXJyZW50UmVuZGVyIiwiY29tbWl0Um9vdFdoZW5SZWFkeSIsImlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyIsIm1hcmtSb290U3VzcGVuZGVkIiwicGVyZm9ybVN5bmNXb3JrT25Sb290IiwiZ2V0RXhlY3V0aW9uQ29udGV4dCIsImJhdGNoZWRVcGRhdGVzIiwiZmx1c2hTeW5jIiwic2V0RW50YW5nbGVkUmVuZGVyTGFuZXMiLCJnZXRFbnRhbmdsZWRSZW5kZXJMYW5lcyIsInJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjayIsInByZXBhcmVGcmVzaFN0YWNrIiwicmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kIiwiaGFuZGxlVGhyb3ciLCJzaG91bGRSZW1haW5PblByZXZpb3VzU2NyZWVuIiwicHVzaERpc3BhdGNoZXIiLCJwb3BEaXNwYXRjaGVyIiwibWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrIiwibWFya1NraXBwZWRVcGRhdGVMYW5lcyIsInJlbmRlckRpZFN1c3BlbmQiLCJyZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlIiwicmVuZGVyRGlkRXJyb3IiLCJyZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQiLCJyZW5kZXJSb290U3luYyIsIndvcmtMb29wU3luYyIsInJlbmRlclJvb3RDb25jdXJyZW50Iiwib25SZXNvbHV0aW9uIiwid29ya0xvb3BDb25jdXJyZW50IiwicGVyZm9ybVVuaXRPZldvcmsiLCJyZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrIiwidGhyb3dBbmRVbndpbmRXb3JrTG9vcCIsInBhbmljT25Sb290RXJyb3IiLCJjb21wbGV0ZVVuaXRPZldvcmsiLCJ1bndpbmRVbml0T2ZXb3JrIiwiY29tbWl0Um9vdCIsImNvbW1pdFJvb3RJbXBsIiwic2NoZWR1bGVDYWxsYmFjayRhcmd1bWVudF8xIiwibWFrZUVycm9ySW5mbyIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSRhcmd1bWVudF8yLmdldCIsImZsdXNoUGFzc2l2ZUVmZmVjdHMiLCJlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdCIsImZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsIiwiaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeSIsIm1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQiLCJwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3IiLCJjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdCIsImNhcHR1cmVDb21taXRQaGFzZUVycm9yIiwiYXR0YWNoUGluZ0xpc3RlbmVyIiwicGluZ1N1c3BlbmRlZFJvb3QiLCJyZXRyeVRpbWVkT3V0Qm91bmRhcnkiLCJyZXRyeURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5IiwicmVzb2x2ZVJldHJ5V2FrZWFibGUiLCJ0aHJvd0lmSW5maW5pdGVVcGRhdGVMb29wRGV0ZWN0ZWQiLCJmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYiLCJjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYiLCJsZWdhY3lDb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYiLCJpbnZva2VFZmZlY3RzSW5EZXYiLCJ3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWIiwiYmVnaW5Xb3JrIiwid2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYiLCJyZXN0b3JlUGVuZGluZ1VwZGF0ZXJzIiwibWVtb2l6ZWRVcGRhdGVycy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJzY2hlZHVsZUNhbGxiYWNrIiwic2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWIiwid2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWIiwid2FybklmU3VzcGVuc2VSZXNvbHV0aW9uTm90V3JhcHBlZFdpdGhBY3RERVYiLCJzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QiLCJzZXRSZWZyZXNoSGFuZGxlciIsInJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyIsInJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyIsInJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nIiwiaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nIiwibWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmciLCJzY2hlZHVsZVJlZnJlc2giLCJmbHVzaFN5bmMkYXJndW1lbnRfMCIsInNjaGVkdWxlUm9vdCIsInNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkiLCJmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2giLCJmYW1pbGllcy5tYXAkYXJndW1lbnRfMCIsImZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseSIsImZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkiLCJmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkiLCJGaWJlck5vZGUiLCJjcmVhdGVGaWJlciIsInNob3VsZENvbnN0cnVjdCIsImlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQiLCJyZXNvbHZlTGF6eUNvbXBvbmVudFRhZyIsImNyZWF0ZVdvcmtJblByb2dyZXNzIiwicmVzZXRXb3JrSW5Qcm9ncmVzcyIsImNyZWF0ZUhvc3RSb290RmliZXIiLCJjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMiLCJjcmVhdGVGaWJlckZyb21FbGVtZW50IiwiY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQiLCJjcmVhdGVGaWJlckZyb21Qcm9maWxlciIsImNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlIiwiY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0IiwiY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuIiwicHJpbWFyeUNoaWxkSW5zdGFuY2UuZGV0YWNoIiwicHJpbWFyeUNoaWxkSW5zdGFuY2UuYXR0YWNoIiwiY3JlYXRlRmliZXJGcm9tVGV4dCIsImNyZWF0ZUZpYmVyRnJvbVBvcnRhbCIsImFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWIiwiRmliZXJSb290Tm9kZSIsImNyZWF0ZUZpYmVyUm9vdCIsImNyZWF0ZVBvcnRhbCQxIiwiZ2V0Q29udGV4dEZvclN1YnRyZWUiLCJmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmciLCJjcmVhdGVDb250YWluZXIiLCJ1cGRhdGVDb250YWluZXIiLCJnZXRQdWJsaWNSb290SW5zdGFuY2UiLCJzaG91bGRFcnJvckltcGwiLCJzaG91bGRFcnJvciIsInNob3VsZFN1c3BlbmRJbXBsIiwic2hvdWxkU3VzcGVuZCIsImNvcHlXaXRoRGVsZXRlSW1wbCIsImNvcHlXaXRoRGVsZXRlIiwiY29weVdpdGhSZW5hbWVJbXBsIiwiY29weVdpdGhSZW5hbWUiLCJjb3B5V2l0aFNldEltcGwiLCJjb3B5V2l0aFNldCIsImZpbmRIb29rIiwib3ZlcnJpZGVIb29rU3RhdGUiLCJvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGgiLCJvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgiLCJvdmVycmlkZVByb3BzIiwib3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgiLCJvdmVycmlkZVByb3BzUmVuYW1lUGF0aCIsInNjaGVkdWxlVXBkYXRlIiwic2V0RXJyb3JIYW5kbGVyIiwic2V0U3VzcGVuc2VIYW5kbGVyIiwiZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIiLCJlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIiwiZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMiLCJpbmplY3RJbnRvRGV2VG9vbHMiLCJmaW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQiLCJmaW5kTm9kZUhhbmRsZSIsImRpc3BhdGNoQ29tbWFuZCIsInNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQiLCJnZXROb2RlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUiLCJpc0NoaWxkUHVibGljSW5zdGFuY2UiLCJjcmVhdGVIaWVyYXJjaHkiLCJmaWJlckhpZXJhcmNoeS5tYXAkYXJndW1lbnRfMCIsImdldEluc3BlY3RvckRhdGEiLCJnZXRIb3N0Tm9kZSIsImdldEhvc3RQcm9wcyIsImdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZSIsImdldE93bmVySGllcmFyY2h5IiwibGFzdE5vbkhvc3RJbnN0YW5jZSIsInRyYXZlcnNlT3duZXJUcmVlVXAiLCJnZXRJbnNwZWN0b3JEYXRhRm9yVmlld1RhZyIsImdldEluc3BlY3RvckRhdGFGb3JWaWV3QXRQb2ludCIsIm5hdGl2ZUZhYnJpY1VJTWFuYWdlci5maW5kTm9kZUF0UG9pbnQkYXJndW1lbnRfMyIsIm5hdGl2ZUZhYnJpY1VJTWFuYWdlci5tZWFzdXJlJGFyZ3VtZW50XzEiLCJSZWFjdE5hdGl2ZVByaXZhdGVJbnRlcmZhY2UuVUlNYW5hZ2VyLmZpbmRTdWJ2aWV3SW4kYXJndW1lbnRfMiIsIm9uUmVjb3ZlcmFibGVFcnJvciIsInJlbmRlciIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJ1cGRhdGVDb250YWluZXIkYXJndW1lbnRfMyIsInVubW91bnRDb21wb25lbnRBdE5vZGVBbmRSZW1vdmVDb250YWluZXIiLCJjcmVhdGVQb3J0YWwiLCJjb21wdXRlQ29tcG9uZW50U3RhY2tGb3JFcnJvclJlcG9ydGluZyJdLCJtYXBwaW5ncyI6IkFBQTtHQ2dCO0lDd0I7S0RnQjtJRUM7S0ZnQjtJR0U7c0NDYTtTREU7S0hRO0lLZTtxQ0N5QztXRGdCOzZCRU87V0ZNO2tDR2lCO1dIb0I7S0xpRTtlU1E7T1RHO0lVZ0I7S1ZJO0lXWTtLWHFCO0lZTTtLWk87SWFDO0tiRTtJY0M7S2RZO0llSTtLZkU7SWdCSztLaEJpQjtJaUJFO0tqQndCO0lrQlE7S2xCSztJbUJLO0tuQnNCO0lvQlM7S3BCeUI7SXFCSztLckJLO0lzQlc7S3RCb0I7SXVCTTtLdkJFO3FCd0JjO094QkU7aUJ5Qkk7T3pCRTtJMEJLO0sxQkU7STJCRTtLM0JFO0k0Qm9CO0s1QnlEO3NCNkJHO083QmU7dUI4QkM7TzlCbUI7ZStCTztPL0JFO2tCZ0NZO2lFQzhDLGNEO2NDTyxjRDtPaENJOzRCa0NPO2NDRyxjRDtNRUs7T0ZFO0tsQ1M7SXFDVztNQ0M7T0RJO01FRTtPRlM7TXBDRTtPb0NZO0tyQ1E7SXdDRTtLeEMwQjtJeUNFO0t6Q2M7STBDRTtLMUNJO29CMkNTO08zQ0U7STRDUztLNUNFO0k2Q0M7SzdDRTtJOENDO0s5Q0k7SStDdUI7Sy9DSztJZ0RNO0toRGE7SWlERTtLakRXO0lrREU7S2xEbUI7SW1ERTtLbkRXO0lvREU7S3BEdUI7SXFERTtLckR1QjtJc0RFO0t0RE87SXVERTtLdkRRO2tCd0RPO094REU7d0J5REM7T3pEdUM7STBEWTtLMUR5QjtJMkRlO0szRGlDO0k0RFc7SzVETztJNkQ4QztLN0RXO0k4RGtHO0s5RGM7SStETTtLL0RtQztJZ0VLO0toRVU7SWlFSztLakVpQjtJa0VFO0tsRTRCO0ltRUU7S25FSTtJb0VFO0twRW1CO0lxRU87S3JFZ0I7SXNFTztLdEVJO0l1RUU7S3ZFRTtJd0VFO0t4RVU7SXlFRTtLekVFO0kwRUU7SzFFUTtJMkVFO0szRUU7STRFZ007SzVFd0c7STZFVTtLN0VVO0k4RVM7SzlFc0I7cUIrRUk7Ty9FRTtxQmdGUTtPaEZnRztzQ2lGUTtTakZFO0lrRm1CO0tsRmtEO0ltRlU7S25GMEI7SW9GUztLcEZpQjtJcUY4QjtLckZXO0lzRlc7S3RGNkI7SXVGRTtLdkY0QjtJd0ZZO0t4Rkk7SXlGRTtLekZtQjtJMEZFO0sxRmM7STJGSztLM0ZzQjtJNEZFO0s1RlM7STZGRTtLN0ZFO0k4RkU7SzlGUztJK0ZPO0svRmdCO0lnR087S2hHSTtJaUdFO0tqR0U7cUJrR0k7T2xHNkM7SW1HK0I7S25HRTtJb0dDO0twR0c7SXFHRTtLckdFO0lzR0U7S3RHZTtJdUdDO0t2R0U7SXdHQztLeEdFOzZCeUdRO0t6R0U7STBHRztLMUdjO0kyR0M7SzNHSztJNEdlO0s1R1E7STZHRTtLN0dFO0k4R0U7SzlHMEI7SStHa0I7Sy9HUTtJZ0hhO0toSHdCO0lpSFk7dUJDYTtPRE87S2pIRTtJbUhTO0tuSDRCO0lvSEU7S3BIYTtJcUhTO0tySEU7SXNIMEI7S3RINkI7Z0J1SEk7T3ZIVTtJdUM2QjtLdkNFO0lzQ0M7S3RDRTtJd0hvQztLeEhjO0l5SEU7S3pIVztJMEhFO0sxSEU7STJISTtLM0hxRjtJNEhFO0s1SFE7STZIRTtLN0hFO0k4SEU7SzlIeUY7SStIaUk7Sy9IbUM7SWdJQztLaElFO0lpSUM7S2pJOEI7SWtJRTtLbElJO0ltSUU7S25JNko7SW9JQztLcElLO0lxSUU7S3JJMEI7SXNJQztLdElhO0l1SW9CO0t2SVk7SXdJRTtLeElpRTtJeUlFO0t6STBDO0kwSUU7SzFJMkQ7STJJTztLM0lvQjtJNElNO0s1SW9CO0k2SVE7SzdJOEs7SThJSztLOUlRO0krSU07Sy9JUTtJZ0pFO0toSk07SWlKQztLakpPO0lrSk07YWxKQztPa0p1QjtLbEpDO0ltSkM7S25KZ0I7TW9KRztPcEpnQjtvQnFKSTtPckpFO3FCc0pFO090SkU7dUJ1SkU7T3ZKSzsrQndKRTtPeEpLOzZCeUpFO096Sm1DOzhCMEpFO08xSm1CO0kySjZCLHlCM0o7STRKRztLNUppQztJNkpDO0s3SjZDO0k4Sk87SzlKK0M7SStKQztLL0ppQjtJZ0tDO0toS2tEO0lpS0M7S2pLaUI7SWtLQztLbEtpQjtJbUtDO0tuS1E7SW9LRSxnRHBLO0lxS0U7S3JLSTtJc0s4QjtLdEtRO0l1SzRIO0t2SzhFO0l3S0U7S3hLdUU7SXlLQztLeksrQztJMEtFO0sxSytEO0kyS0U7SzNLeUM7STRLQztLNUtvQjtJNktDO0s3S0U7SThLQztLOUtFO0krS0M7Sy9LRTtJZ0xDO0toTEs7SWlMQztLakxFO0lrTEM7S2xMTztJbUxDO0tuTEk7SW9MQztLcExFO0lxTEM7S3JMWTtJc0xDO0t0TFM7SXVMQztLdkxFO0l3TEM7S3hMTTtJeUxFO0t6TEU7STBMRTtLMUxFO0kyTEU7SzNMRTtJNExDO0s1TEU7STZMQztLN0xFO0k4TEM7SzlMRTtJK0xDO0svTEU7SWdNRztLaE1FO0lpTUM7S2pNVTtJa01DO0tsTWtCO0ltTUM7S25NaUI7SW9NQztLcE1FO0lxTUM7S3JNaUQ7SXNNRTtLdE1lO0l1TUU7S3ZNOEI7SXdNQztLeE1RO0l5TUM7S3pNWTtJME1DO0sxTThEO0kyTUM7SzNNYztJNE1DOzJCQ2M7V0RNO0s1TU07SThNQztLOU1JO0krTU87Sy9NRTtJZ05DO0toTkU7SWlOQztLak5FO0lrTkM7S2xORTtJbU5DO0tuTkU7SW9OQztLcE5nQjtJcU5JO0tyTk07SXNOVztLdE5NO0l1Tlk7S3ZOUztJd05FO0t4TlM7SXlOQztLek5FO0kwTkM7SzFOcUM7STJOQztLM051QjtJNE5DO29EQ087T0RJO0s1Tk87SThOQztLOU5JO0krTkM7Sy9OZ0I7SWdPQztLaE9XO0lpT0k7S2pPUTtJa09DO0tsT0U7SW1PQztLbk9FO0lvT0M7S3BPMkI7SXFPQztLck9NO0lzT0M7S3RPUTtJdU9DO0t2T0U7SXdPQztLeE9xQjtJeU9DO0t6TzhCO0kwT0M7SzFPUTtJMk9DO0szT2E7STRPQztLNU9VO0k2T0M7SzdPRTtJOE9DO0s5T2U7SStPQztLL09FO0lnUEM7S2hQbUI7SWlQQztLalBFO0lrUEM7S2xQRztJbVBDO0tuUEU7SW9QRTtLcFBVO0lxUE87S3JQUTtJc1BFO0t0UEk7SXVQQztLdlBlO0l3UEU7S3hQaUQ7SXlQUTtLelBhO0kwUEU7SzFQcUY7STJQVztLM1BJO0k0UEU7SzVQdUI7STZQRTtLN1BTO0k4UHNCO0s5UGdCO0krUEU7Sy9QTTtJZ1FFO0toUXVDO0lpUUU7S2pRSTtJa1FFO0tsUUs7SW1RRTtLblFLO0lvUUU7S3BRSztJcVFFO0tyUVk7SXNRRTtLdFFtRDtJdVFFO0t2UW9CO0l3UUU7S3hRaUM7SXlRRTtLelFxQztJMFFnQjtLMVFLO0kyUU07SzNRSTtJNFFPO0s1UUc7STZRTTtLN1FXO0k4UUU7SzlRRztJK1FFO0svUWlCO0lnUkU7S2hSSTtJaVJFO0tqUkc7SWtSRTtLbFJVO0ltUkU7S25STztJb1JRO0twUkk7SXFSRTtLclJPO0lzUkU7S3RSTztJdVJFO0t2Uk87SXdSRTtLeFJJO0l5UkU7S3pSUTtJMFJFO0sxUkU7STJSRTtLM1JNO0k0UlM7SzVSa0M7STZSQztLN1JFO0k4UkU7SzlSaUI7SStSRTtLL1JLO0lnU0M7S2hTd0I7SWlTQztLalNLO0lrU0M7S2xTRztJbVNHO0tuU1M7SW9TRTtLcFN5RDtJcVNFO0tyU3lCO0lzU0U7S3RTVztJdVNrQjtLdlNnRDtJd1NDO0t4U0k7SXlTQztLelNJO0kwU0U7SzFTNEU7STJTRTtLM1NFO0k0U0U7SzVTZ0U7STZTRTtLN1N5RztJOFNFO0s5U2tCO0krU0c7Sy9TVTtJZ1RFO0toVEs7SWlURTs0Q0NPO1NERztLalRRO0ltVEU7S25Ua0I7SW9UUTtjQ1k7U0RFO1FFRztTRlM7UUdDO1NIYztLcFRHO0l3VEM7S3hURTtJeVRDO0t6VEU7STBUa0I7SzFUYTtJMlRDO0szVGU7STRUQztLNVRTO0k2VEM7SzdUbUQ7SThUQztLOVQwQjtJK1RDO0svVCtFO0lnVUU7S2hVMkY7SWlVTztLalVpQjtJa1VDO0tsVTJNO0lPRTtLUFM7SW1VRTtLblVFO0lvVUM7S3BVRTtJcVVDO0tyVWdCO0lzVUM7S3RVYTtJdVVDO0t2VVc7SXdVUTtLeFVpQztJeVVFO0t6VWdDO0kwVUU7SzFVZTtJMlVLO0szVWM7STRVRTtLNVVTO0k2VUU7SzdVTTtJOFVDO0s5VU87SStVQztLL1VJO0lnVkM7S2hWSTtxQ2lWRyw2QmpWOzJDa1ZDLGNsVjtrQ21WQyw2Qm5WO2lDb1ZDLGNwVjs4QnFWQyxjclY7MkJzVkk7T3RWYTs4QnVWRTtvQkNFO1NERTtPdlZFOzhEaVZXO09qVm1EO1FrVkc7c0RPSzthUEs7NkRRTzthUks7NkRTTzthVEs7Y1VRO2VWSzt1RFdRO2FYSzs4RFlPO2FaSztTbFY0RzsyRG1WTTtPblZpQzswRG9WRTs0Q1dDOzZCQ087V0RHO1NYaUI7T3BWQzt1RHFWRTtPclZRO0lpV2E7S2pXVztJa1dFO0tsV1M7SW1XRTtLbld5QjtJb1dDO0twV1k7SXFXQztLcldhO0lzV0k7S3RXSztZdVdxQjtPdldPO0l3V0U7S3hXUztJeVdDO0t6V0c7STBXRSxrQjFXO0kyV0U7Y0N3RztlRE07Y0VDO2VGTTtLM1dpQztJOFdNO0s5V29CO0krV0M7Sy9XWTtJZ1hDO0toWGU7NEJpWFUsZ0NqWDswQmlYZTtPalgrQjtJa1hHO0tsWEU7SW1YRTtLblhTO0lvWEU7b0JDaUY7V0RRO0twWDJCO0lzWEU7S3RYWTtJdVhFO0t2WGlCO0l3WEU7S3hYSTtJeVhLO01DQztPRGM7TUVFO09GZTtNR0U7T0hrQjtNSUU7T0pPO01LRTtPTDRCO01NRTtPTlE7TU9FO09QZ0I7TVFFO09SMEM7TVNFO09UaUI7TVVFO09WaUI7TVdFO09YdUY7TVlFO09abUY7TWFFO09ib0c7TWNLO09kK0M7TWVFO21DQ3FLO1dERTtPZkk7TWlCRTttQ0R1TTtXQ0U7T2pCSTtNa0JFO09sQnNCO01tQkU7T25CbUY7TW9CRTtPcEJvQztNcUJJO09yQnVJO01zQkU7T3RCbUI7S3pYRztJZ1pJO0toWkk7SWlaQztLaloyQjtJa1pFO0tsWk87SW1aTztLblpXO0lvWkM7S3BaVTtJcVpDO0tyWks7SXNaQztLdFpFO0l1WmtCO0t2WkU7SXdaQztLeFo0QjtJeVpDO0t6Wks7STBaQztLMVoyQjtJMlpDO0szWkc7STRaQztLNVpFO0k2WkM7SzdaUztJOFpVO0s5WkU7SStaQztLL1pFO0lnYUM7S2hhRTtJaWFDO0tqYUU7SWthQztLbGFFO0ltYVM7S25hbUQ7SW9hd0Y7S3BhVTtJcWFFO0tyYVk7SXNhRTtLdGFhO0l1YUU7S3ZhMEM7SXdhRTtLeGE2QjtJeWFFO0t6YVM7STBhRTtLMWErQztJMmFFO0szYWdIO0k0YUU7SzVhMkU7STZhRTtLN2E2QjtJOGFFO0s5YXNEO0krYUM7Sy9hZ0I7SWdiQztLaGJXO0lpYkM7S2pidUM7SWtiRTtLbGJrQjtJbWJFO0tuYndFOzJDb2JNO09wYk07SXFiRztLcmIyQjtJc2JFO0t0YmdCO0l1YkU7S3ZiRztJd2JFO0t4YitCO0l5YkU7S3piRztJMGJFO0sxYjBMO0kyYkU7SzNia0Q7STRiRTtLNWJvRTtJNmJFO0s3Ym1GO0k4YkU7SzlicUI7SStiRTtLL2JZO0lnY0U7OEJDQztPRE87S2hjRztJa2NFO0tsY1U7SW1jRTtLbmNNO0lvY0U7S3BjMEI7SXFjRTtLcmNVO0lzY0U7S3RjRTtJdWNFO0t2Y0U7SXdjRTtLeGM2QjtJeWNFO0t6Y0k7STBjRTtLMWNVO0kyY0U7SzNjRztJNGNFO0s1Y1U7STZjRTtLN2MwQjtJOGNFO0s5Y2M7SStjRTtLL2NFO0lnZEU7S2hkRTtJaWRFO0tqZEU7SWtkRTtLbGRRO0ltZEU7S25kRTtJb2RFO2VwZEs7U29kRTtlcGRpQjtTb2RFO0twZEU7SXFkRTtLcmR5QjtJc2RFO0t0ZG1CO0l1ZEU7S3ZkSTtJd2RJO0t4ZEs7SXlkRTtLemRlO0kwZEU7SzFkYTtJMmRFO0szZHVCO0k0ZEU7SzVkRztJNmRFO0s3ZEs7SThkRTtLOWRXO0krZEU7Sy9kdUI7SWdlRTtLaGU2QztJaWVFO0tqZTZEO0lrZUU7S2xlYTtJbWVFO0tuZVc7SW9lRTtLcGVXO0lxZUU7S3JlbUI7SXNlRTtLdGVJO0l1ZUU7S3ZlK0I7SXdlRTtLeGVvRjtJeWVFO0t6ZU07STBlRTtLMWVpQjtJMmVFO0szZWlCO3FDNGUrQjtPNWVPO2tDNmVFO083ZU87cUI4ZUc7UzllRTtxQitlRTtTL2VLO29CZ2ZDO1NoZkk7bUJpZkM7U2pmSzs2QmtmQztTbGZLOzRCbWZDO1NuZks7eUJvZkM7U3BmSztpQnFmQztTcmZhO29Cc2ZDO1N0Zlk7Z0J1ZkM7U3ZmSTtrQndmQztTeGZZO3VCeWZDO1N6Zkk7MEIwZkM7UzFmSTt1QjJmQztTM2ZJOzhCNGZDO1M1ZlE7ZTZmQztTN2ZJO3FCOGZJO1M5ZkU7cUIrZkU7Uy9mSTtvQmdnQkM7U2hnQkk7bUJpZ0JDO1NqZ0JJOzZCa2dCQztTbGdCSTs0Qm1nQkM7U25nQkk7eUJvZ0JDO1NwZ0JJO2lCcWdCQztTcmdCWTtvQnNnQkM7U3RnQlk7Z0J1Z0JDO1N2Z0JJO2tCd2dCQztTeGdCWTt1QnlnQkM7U3pnQkk7MEIwZ0JDO1MxZ0JJO3VCMmdCQztTM2dCSTs4QjRnQkM7UzVnQlE7ZTZnQkM7UzdnQkk7cUI4Z0JJO1M5Z0JFO3FCK2dCRTtTL2dCSTtvQmdoQkM7U2hoQkk7bUJpaEJDO1NqaEJJOzZCa2hCQztTbGhCSTs0Qm1oQkM7U25oQkk7eUJvaEJDO1NwaEJJO2lCcWhCQztTcmhCWTtvQnNoQkM7U3RoQlk7Z0J1aEJDO1N2aEJJO2tCd2hCQztTeGhCWTt1QnloQkM7U3poQkk7MEIwaEJDO1MxaEJJO3VCMmhCQztTM2hCSTs4QjRoQkM7UzVoQlE7ZTZoQkM7UzdoQkk7cUI4aEJJO1M5aEJFO3FCK2hCRTtTL2hCSTtvQmdpQkM7U2hpQkk7bUJpaUJDO1NqaUJJOzZCa2lCQztTbGlCSTs0Qm1pQkM7U25pQkk7eUJvaUJDO1NwaUJJO2lCcWlCQztTcmlCWTtvQnNpQkM7U3RpQlk7Z0J1aUJDO1N2aUJJO2tCd2lCQztTeGlCWTt1QnlpQkM7U3ppQkk7MEIwaUJDO1MxaUJJO3VCMmlCQztTM2lCSTs4QjRpQkM7UzVpQlE7ZTZpQkM7UzdpQkk7cUI4aUJJO1M5aUJHO2EraUJDO1MvaUJHO3FCZ2pCQztTaGpCSztvQmlqQkM7U2pqQks7bUJrakJDO1NsakJLOzZCbWpCQztTbmpCSzs0Qm9qQkM7U3BqQks7eUJxakJDO1NyakJLO2lCc2pCQztTdGpCYTtvQnVqQkM7U3ZqQmE7Z0J3akJDO1N4akJLO2tCeWpCQztTempCYTt1QjBqQkM7UzFqQks7MEIyakJDO1MzakJLO3VCNGpCQztTNWpCSzs4QjZqQkM7UzdqQlM7ZThqQkM7UzlqQks7cUIrakJJO1MvakJHO2Fna0JDO1Noa0JHO3FCaWtCQztTamtCSztvQmtrQkM7U2xrQks7bUJta0JDO1Nua0JLOzZCb2tCQztTcGtCSzs0QnFrQkM7U3JrQks7eUJza0JDO1N0a0JLO2lCdWtCQztTdmtCYTtvQndrQkM7U3hrQmE7Z0J5a0JDO1N6a0JLO2tCMGtCQztTMWtCYTt1QjJrQkM7UzNrQks7MEI0a0JDO1M1a0JLO3VCNmtCQztTN2tCSzs4QjhrQkM7UzlrQlM7ZStrQkM7Uy9rQks7cUJnbEJJO1NobEJHO2FpbEJDO1NqbEJHO3FCa2xCQztTbGxCSztvQm1sQkM7U25sQks7bUJvbEJDO1NwbEJLOzZCcWxCQztTcmxCSzs0QnNsQkM7U3RsQks7eUJ1bEJDO1N2bEJLO2lCd2xCQztTeGxCYTtvQnlsQkM7U3psQmE7Z0IwbEJDO1MxbEJLO2tCMmxCQztTM2xCYTt1QjRsQkM7UzVsQks7MEI2bEJDO1M3bEJLO3VCOGxCQztTOWxCSzs4QitsQkM7Uy9sQlM7ZWdtQkM7U2htQks7SWltQjZCO0tqbUJFO0lrbUJFO0tsbUJJO0ltbUJFO0tubUJLO0lvbUJFO0twbUJLO0lxbUJFO0tybUJFO0lzbUJFO0t0bUJFO0l1bUJFO0t2bUJNO0l3bUJFO0t4bUJFO0l5bUJFO0t6bUJXO0kwbUJFO0sxbUJ3QjtJMm1CRTtLM21CbUM7STRtQkU7SzVtQkU7STZtQkU7SzdtQkU7SThtQkU7SzltQlc7SSttQkU7Sy9tQmdCO2VnbkI4QjtTaG5CUztJaW5CSztLam5CbUI7SWtuQkU7S2xuQmdCO0ltbkJFO0tubkJvQzt1Qm9uQks7T3BuQm9COzJCcW5CQztPcm5CcUI7MEJzbkJFO090bkJvQjtJdW5CRztLdm5CcUQ7SXduQkU7S3huQjhOO0l5bkJFO0t6bkJTO0kwbkJFO0sxbkIyTDtJMm5CRTtLM25CMkI7STRuQkU7SzVuQnVDO0k2bkJFO0s3bkJtRjtJOG5CRTtLOW5CZ0o7SStuQkU7Sy9uQm9MO0lnb0JFO0tob0JTO0lpb0JDO0tqb0JPO0lrb0JXO0tsb0JZO0ltb0JFO21CQ3lFO1NERTtLbm9CRTtJcW9CRTt3QkNXO09ERztLcm9CRztJdW9CRTt5QkNRO1NERTswQkRFO1NDTTswQkVPO1NGb0M7S3ZvQkk7STBvQkU7SzFvQnNCO0kyb0JFO0szb0I4RztJNG9CRTtLNW9CeVA7STZvQmlDO0s3b0I4QjtJOG9CRTtLOW9COEI7SStvQkU7Sy9vQjJEO0lncEJFO0tocEJtSTtJaXBCRTtLanBCNEc7SWtwQkU7S2xwQnNIO0ltcEJFO0tucEJrQjtJbVlFO0tuWUk7SW9wQkU7S3BwQkk7SXFwQkU7S3JwQmlCO0lzcEJFO0t0cEJXO0l1cEJFO0t2cEJnRTtJd3BCRTtLeHBCaUM7SXlwQkU7S3pwQjZIO0kwcEJFO0sxcEJ3RjtJMnBCRTtLM3BCZTtJNHBCRTtLNXBCa0M7STZwQkU7SzdwQmU7SThwQkU7SzlwQkk7SStwQkU7Sy9wQm9IO0lncUJFO0tocUJrQztJaXFCRTtLanFCa0s7SWtxQkU7S2xxQm1GO0ltcUJRO0tucUJLO0lvcUJFO0twcUJPO0lxcUJFO0tycUJvQjtJc3FCRTtLdHFCb0I7SXVxQkU7S3ZxQnlJO0l3cUJFO0t4cUJpQjtJeXFCRTtLenFCNEQ7STBxQkU7SzFxQlE7STJxQkU7SzNxQkk7STRxQkU7SzVxQnFDO0k2cUJFO0s3cUJvRjtJOHFCRTtLOXFCOEI7SStxQkU7Sy9xQnFDO0lnckJFO0tockJ1TjtJaXJCRTtLanJCYTtJa3JCRTtLbHJCOEM7SW1yQkU7S25yQnNCO0lvckJFO0twckJ3RDtJcXJCRTtLcnJCMEI7SXNyQkU7S3RyQnlCO0l1ckJFO0t2ckIyQztJd3JCRTtLeHJCMkI7SXlyQlE7S3pyQmtJO0kwckJFO0sxckJxQjtJMnJCSTtLM3JCMkQ7STRyQkk7SzVyQjBEO0k2ckJFO0s3ckJFO0k4ckJFO0s5ckJhO0krckJFO0svckI2QjtJZ3NCRTtLaHNCdUQ7SWlzQkU7S2pzQlU7SWtzQkU7S2xzQmlNO0ltc0JFO0tuc0IyUTtJb3NCb0I7S3BzQlU7SXFzQkM7S3JzQkk7SXNzQkM7S3RzQkk7SXVzQkM7S3ZzQnNCO0l3c0JDO0t4c0JjO0l5c0JDO0t6c0IwQztJMHNCQztLMXNCSTtJMnNCRTtLM3NCNEk7STRzQkM7SzVzQm9CO0k2c0JDO0s3c0JlO0k4c0JDO0s5c0JNO0krc0JFO0svc0JpQztJZ3RCSTtLaHRCVTtJaXRCRSxtRGp0QjtJa3RCRTt3QkNFO09ERTtLbHRCQztJb3RCQztLcHRCSTtJcXRCTztLcnRCRTtJc3RCRTtLdHRCRTtJdXRCRTtLdnRCc0M7SXd0QkU7S3h0Qm9CO0l5dEJTO0t6dEJnQjtJMHRCRTtLMXRCMEI7STJ0QkU7SzN0Qk87STR0QkU7SzV0Qm9FO0k2dEJFO0s3dEI4RztJOHRCRTtLOXRCZ0Y7SSt0QkU7Sy90QitrQjtJZ3VCRTtLaHVCMEg7SWl1QkU7S2p1QmdEO0lrdUJpQjtLbHVCSztJbXVCRTtvQ0NPO1NERTtLbnVCRztJcXVCRTtLcnVCYztJc3VCRTtLdHVCVTtJdXVCRTtLdnVCTTtJd3VCRTtLeHVCNEQ7SXl1QkU7S3p1Qk07STB1QkU7SzF1Qk87STJ1QkU7SzN1QmdCO0k0dUJFO0s1dUJzQjtJNnVCRTtLN3VCaUg7STh1QkU7Szl1QndDO0krdUJFO0svdUJnRjtJZ3ZCRTtLaHZCbUQ7SWl2QkU7S2p2QnFCO0lrdkJFO0tsdkJtSDtJbXZCRTtLbnZCNkM7SW92QkU7S3B2QlU7SXF2QkU7S3J2QmdFO0lzdkJFO0t0dkJrTDtJdXZCRTtLdnZCb0Y7SXd2QkU7S3h2QjJDO0l5dkJFO0t6dkJ3QjtJMHZCRTtLMXZCaUM7STJ2QkU7SzN2QmU7STR2QkU7SzV2QlE7STZ2QkU7Szd2QmlEO0k4dkJFO0s5dkJ3QztJK3ZCRTtLL3ZCMEI7SWd3QkU7S2h3QjBCO0lpd0JRO0tqd0J5RDtJa3dCRTtLbHdCZ0I7SW13QkU7S253QjZOO0lvd0JFLGdEcHdCO0lxd0JFO0tyd0JtQztJc3dCRTtLdHdCcUI7SXV3QkM7S3Z3Qm9CO0l3d0JFO3dCQ0s7T0RzQjtLeHdCQztJMHdCQztLMXdCUTtJMndCRTtLM3dCOEI7STR3QkU7SzV3QnVYO0k2d0JFO0s3d0JzQjtJOHdCRTtLOXdCTztJK3dCRTtLL3dCZTtJZ3hCRTtLaHhCMEU7SWl4QkU7S2p4QlE7SWt4QkU7S2x4QnlJO0lteEJFO0tueEIyQjtJb3hCRTtLcHhCa0I7SXF4QkU7S3J4QlM7SXN4QkU7S3R4Qm1CO0l1eEJFO0t2eEI4RjtJd3hCRTtLeHhCZ0I7SXl4QkU7S3p4QjJGO0kweEJFO0sxeEJJO0kyeEJZO0szeEJFO0k0eEJFO0s1eEJTO0k2eEJFO0s3eEJ3RDtJOHhCRTtLOXhCNEI7SSt4QkU7Sy94Qm9CO0lneUJFO0toeUJrQztJaXlCRTtLanlCZ0Q7SWt5QkU7S2x5QmdDO0lteUJFO0tueUJpQztJb3lCRTtLcHlCeUI7SXF5QkU7S3J5QnlCO0lzeUJFO0t0eUJnQjtJdXlCRTtLdnlCZ0M7SXd5QkU7S3h5QmtCO0l5eUJFO0t6eUJnQztJMHlCRTtLMXlCb0I7STJ5Qlk7SzN5QmM7STR5QkM7SzV5Qm9CO0k2eUI4RjtLN3lCRTtJOHlCRTtLOXlCRTtJK3lCa0I7Sy95QkU7SWd6QkM7S2h6QkU7SWl6QkM7S2p6QkU7SWt6QkM7S2x6QjZEO0ltekJFO0tuekJZO0lvekJFO0twekJvQztJcXpCQztLcnpCRTtJc3pCQztLdHpCaUc7SXV6QkM7S3Z6Qkk7SXd6Qkc7S3h6QnVIO0l5ekJFO0t6ekJ3RTtJMHpCRTtLMXpCVTtJMnpCRTtLM3pCdUY7STR6QkU7SzV6QnFDO0k2ekJFO0s3ekI0RDtJOHpCRTtLOXpCYztJK3pCRztLL3pCNEU7SWcwQkM7S2gwQkU7SWkwQkM7S2owQmtCO0lrMEJNO0tsMEJ1QztJbTBCSztLbjBCRTtJbzBCQztLcDBCRTtJcTBCRTtLcjBCc0I7SXMwQkU7S3QwQm1EO0l1MEJFO0t2MEJLO0l3MEJFO0t4MEJpRjtJeTBCRTtLejBCb0Q7STAwQkU7SzEwQlk7STIwQkU7SzMwQkU7STQwQkU7SzUwQkU7STYwQkM7SzcwQks7STgwQkM7SzkwQkk7SSswQkM7Sy8wQndCO0lnMUJDO0toMUJVO0lpMUJHO0tqMUJJO0lrMUJJO0tsMUI2RztJbTFCSTtLbjFCSztJbzFCRTttQ0NtRTtpQkRhO0twMUJnSztJczFCRztLdDFCTTtJdTFCRTtLdjFCMkI7SXcxQkU7S3gxQjRIO0l5MUJFO0t6MUJxRDtJMDFCRTtLMTFCYztJMjFCRTtLMzFCMEQ7STQxQkU7SzUxQmlFO0k2MUJFO0s3MUJzQjtJODFCRTsyQ0NrRjtXRE07SzkxQm1MO0lnMkJFO2VDUztXRFE7S2gyQkk7SWsyQkU7S2wyQndCO0ltMkJDOzJDSk07V0lHO0tuMkJHO0lvMkJFO0twMkJ1RTtJcTJCRTtLcjJCSztJczJCQztLdDJCTTtJdTJCRTtLdjJCSztJdzJCSTtLeDJCUztJeTJCRTtLejJCMEQ7STAyQkM7SzEyQjRDO0kyMkJFO0szMkI2QztJNDJCRTtLNTJCaUI7STYyQkU7SzcyQlM7STgyQkM7SzkyQndDO0krMkJDO0svMkIyQjtJZzNCRTtLaDNCSztJaTNCRTtLajNCTTtJazNCRTtLbDNCMEI7SW0zQkU7S24zQnlCO0lvM0JHO0twM0I2RDtrQnEzQk07T3IzQm1FO0lzM0JVO0t0M0JpRDtJdTNCRTttQ0NJO1dERTtLdjNCSztJeTNCRztLejNCYTtJMDNCRTtLMTNCRztJMjNCRTtLMzNCMkQ7STQzQkU7SzUzQnNCO0k2M0JFO0s3M0JJOzRCODNCTztLOTNCSTtJKzNCQztLLzNCZTtJZzRCQztLaDRCRztJaTRCQztLajRCd0M7SWs0QkM7S2w0Qm9GO0ltNEJDO0tuNEJpQjswQm80QkM7a0JDVTtTRE07S3A0QkU7dUJzNEJDO2tCRFU7U0NFO0t0NEJFO0l1NEJFO0t2NEJ1RjtzQ3c0QkU7dUJDSTtXREU7S3g0QlM7STA0QkU7SzE0QndEO0kyNEJFO0szNEJvQztJNDRCRTtLNTRCc0M7STY0Qm9CO0s3NEJtRTtJODRCYztLOTRCRztJKzRCRTtLLzRCRztJZzVCRTtLaDVCTTtJaTVCQztLajVCZ0I7SWs1QkU7S2w1Qm9HO0ltNUJFO0tuNUIrRDtJbzVCQztLcDVCeUI7SXE1QkM7S3I1QjJKO0lzNUJDO0t0NUJ3QjtJdTVCQztLdjVCSTtJdzVCRTtLeDVCc0I7SXk1QkU7S3o1Qks7STA1QkM7SzE1Qks7STI1QkM7Z0JDVztTREU7Z0JFQztTRkU7SzM1Qkk7STg1QkM7Szk1Qkk7SSs1QkM7Sy81Qlc7SWc2QkU7S2g2QjhDO0lpNkJFO0tqNkIrRDtJazZCRTtLbDZCMEM7SW02Qkk7S242QnNCO0lvNkJZO0twNkJpQjtJcTZCRTtLcjZCb0U7SXM2QkU7S3Q2QnlCO0l1NkJDO0t2NkI0RDtJdzZCQztLeDZCZTswQnk2QkU7S3o2QkU7STA2QkU7SzE2QkU7NEIyNkJFO0szNkJFO0k0NkJFO0s1NkJFOytCNjZCWTtPNzZCZ0I7MkI4NkJFO085NkJFOytCKzZCRTtPLzZCMEI7MkJnN0JFO09oN0JrQjs0Qmk3QkU7T2o3QlU7d0JrN0JFO09sN0JFO3FCbTdCRTtPbjdCVzswQm83QkU7T3A3Qm1CO29DcTdCRTtPcjdCbUI7b0NzN0JFO090N0JtQjtzQnU3QkU7T3Y3Qlk7Z0N3N0JFO094N0JZO2dDeTdCRTtPejdCZ0I7dUIwN0JFO08xN0JNO3dCMjdCRTtPMzdCRTsyQjQ3QkU7TzU3QkU7STY3Qkc7Szc3QlE7STg3QkU7Szk3QkU7SSs3QkU7Sy83QkU7SWc4QkU7S2g4QmdDO0lpOEJHO0tqOEJrRDtJazhCQztLbDhCdUU7SW04QkM7S244QjRCO0lvOEJDO0twOEIyQjtJcThCQztLcjhCTztJczhCSTtLdDhCc0M7SXU4QlE7Z0NDQzs0QkNHO3VCbHpCRztla3pCZ0I7V0RFO09ERTtLdjhCQztJMDhCRTtLMThCbUI7STI4QkU7SzM4QlE7STQ4QkU7SzU4QjRCO0k2OEJFO0s3OEJJO0k4OEJFO0s5OEJVO0krOEJFO0svOEJPO0lnOUJFO0toOUJLO0lpOUJFO1lDa0I7Z0JDZ0M7aUJEZTthREU7WUdPO2FIZ0I7S2o5QlU7SXE5QkU7S3I5Qkk7SXM5QkU7S3Q5QnFCO0l1OUJFOzBDQ0s7U0RFO0t2OUJFO0l5OUJFO0t6OUJJO0kwOUJFO0sxOUJNO0kyOUJJO0szOUJRO0dEMkMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJmIiwiaCIsImsiLCJnIiwibCIsIkgiLCJJIiwiSyIsIlEiLCJSIiwiUyIsIlAiLCJVIiwiViIsIk0iLCJOIiwiRCRhcmd1bWVudF8wIiwiWiJdLCJtYXBwaW5ncyI6IkFBQTthQ1MsdUhDLDRDQyw0Ukg7QUlDLHVFSixpR0ssMEJMLDZCSyw0Qkw7Z0xNQyxxSkMsa0hQO0FRQyx1YlI7QVNDLDhiQyw4QkMsc0JYOzBCWUMsa0NDLGNDLHNHZCxpQ2UsZ0JmLHVHZSwrQmYsUWUsa0JmLENnQixvQkMsa0JELEloQjtBa0JHLDhDbEIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCI8YW5vbnltb3VzPiIsInB1c2giLCJwZWVrIiwicG9wIiwic2lmdFVwIiwic2lmdERvd24iLCJjb21wYXJlIiwibWFya1Rhc2tFcnJvcmVkIiwiZ2V0Q3VycmVudFRpbWUiLCJhZHZhbmNlVGltZXJzIiwiaGFuZGxlVGltZW91dCIsImZsdXNoV29yayIsIndvcmtMb29wIiwidW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayQxIiwidW5zdGFibGVfY2FuY2VsQ2FsbGJhY2skMSIsInVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsJDEiLCJzaG91bGRZaWVsZFRvSG9zdCIsInJlcXVlc3RQYWludCIsInBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSIsInNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lIiwicmVxdWVzdEhvc3RDYWxsYmFjayIsInJlcXVlc3RIb3N0VGltZW91dCIsImxvY2FsU2V0VGltZW91dCRhcmd1bWVudF8wIiwiY2FuY2VsSG9zdFRpbWVvdXQiLCJ0aHJvd05vdEltcGxlbWVudGVkIl0sIm1hcHBpbmdzIjoiQUFBO0dDYTtBQ087Q0RJO0FFQztDRkU7QUdDO0NIYztBSUU7Q0ppQjtBS0U7Q0w4QjtBTUU7Q05JO0FPUztDUEM7bUJRVTtHUkU7bUJRSztHUkU7QVNtQztDVG9CO0FVRTtDVmdCO0FXRTtDWHdCO0FZRTtDWjREO0FhRTtDYmlGO0FjRTtDZE07QWVFO0NmRTtBZ0JZO0NoQlc7QWlCRTtDakJFOytCa0JFO0NsQitCO3FDbUJnQjtHbkJFO3FDbUJRO0duQkU7cUNtQkc7R25CRztBb0JHO0NwQk87QXFCRTtrQ0NFO0dERTtDckJDO0F1QkU7Q3ZCSTtBd0IwQjtDeEJFO0dEcUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsIiwicmVwb3J0ZXIub25FcnJvciIsImludm9rZUd1YXJkZWRDYWxsYmFjayIsImludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvciIsImV4ZWN1dGVEaXNwYXRjaCIsImV4ZWN1dGVEaXJlY3REaXNwYXRjaCIsImZ1bmN0aW9uVGhhdFJldHVybnNUcnVlIiwiZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlIiwiU3ludGhldGljRXZlbnQiLCJhc3NpZ24kYXJndW1lbnRfMS5wcmV2ZW50RGVmYXVsdCIsImFzc2lnbiRhcmd1bWVudF8xLnN0b3BQcm9wYWdhdGlvbiIsImFzc2lnbiRhcmd1bWVudF8xLnBlcnNpc3QiLCJhc3NpZ24kYXJndW1lbnRfMS5kZXN0cnVjdG9yIiwiU3ludGhldGljRXZlbnQuSW50ZXJmYWNlLmN1cnJlbnRUYXJnZXQiLCJTeW50aGV0aWNFdmVudC5JbnRlcmZhY2UudGltZVN0YW1wIiwiU3ludGhldGljRXZlbnQuZXh0ZW5kIiwiRSIsIkNsYXNzIiwiY3JlYXRlT3JHZXRQb29sZWRFdmVudCIsInJlbGVhc2VQb29sZWRFdmVudCIsImFkZEV2ZW50UG9vbGluZ1RvIiwiU3ludGhldGljRXZlbnQuZXh0ZW5kJGFyZ3VtZW50XzAudG91Y2hIaXN0b3J5IiwiaXNTdGFydGlzaCIsImlzTW92ZWlzaCIsInRpbWVzdGFtcEZvclRvdWNoIiwiZ2V0VG91Y2hJZGVudGlmaWVyIiwicmVjb3JkVG91Y2hTdGFydCIsInJlY29yZFRvdWNoTW92ZSIsInJlY29yZFRvdWNoRW5kIiwiUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUuaW5zdHJ1bWVudCIsIlJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLnJlY29yZFRvdWNoVHJhY2siLCJhY2N1bXVsYXRlIiwiYWNjdW11bGF0ZUludG8iLCJmb3JFYWNoQWNjdW11bGF0ZWQiLCJjaGFuZ2VSZXNwb25kZXIiLCJnZXRQYXJlbnQkMSIsInRyYXZlcnNlVHdvUGhhc2UkMSIsImdldExpc3RlbmVyJDEiLCJhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzJDEiLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSQxIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlJDEiLCJSZXNwb25kZXJFdmVudFBsdWdpbi5fZ2V0UmVzcG9uZGVyIiwiUmVzcG9uZGVyRXZlbnRQbHVnaW4uZXh0cmFjdEV2ZW50cyIsIlJlc3BvbmRlckV2ZW50UGx1Z2luLmluamVjdGlvbi5pbmplY3RHbG9iYWxSZXNwb25kZXJIYW5kbGVyIiwicmVjb21wdXRlUGx1Z2luT3JkZXJpbmciLCJwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZSIsImdldExpc3RlbmVyIiwiYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyIsInRyYXZlcnNlVHdvUGhhc2UiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlIiwiYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUiLCJpbmplY3RlZE5hbWVzVG9QbHVnaW5zJGpzY29tcCRpbmxpbmVfMjM4LlJlYWN0TmF0aXZlQnJpZGdlRXZlbnRQbHVnaW4uZXh0cmFjdEV2ZW50cyIsImdldEluc3RhbmNlRnJvbVRhZyIsImJhdGNoZWRVcGRhdGVzSW1wbCIsImJhdGNoZWRVcGRhdGVzJDEiLCJleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2VUb3BMZXZlbCIsIl9yZWNlaXZlUm9vdE5vZGVJREV2ZW50IiwiYmF0Y2hlZFVwZGF0ZXMkMSRhcmd1bWVudF8wIiwiUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlLlJDVEV2ZW50RW1pdHRlci5yZWdpc3RlciRhcmd1bWVudF8wLnJlY2VpdmVFdmVudCIsIlJlYWN0TmF0aXZlUHJpdmF0ZUludGVyZmFjZS5SQ1RFdmVudEVtaXR0ZXIucmVnaXN0ZXIkYXJndW1lbnRfMC5yZWNlaXZlVG91Y2hlcyIsImdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMSIsImdldE5vZGVGcm9tSW5zdGFuY2UiLCJSZXNwb25kZXJFdmVudFBsdWdpbi5pbmplY3Rpb24uaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlciRhcmd1bWVudF8wLm9uQ2hhbmdlIiwiZ2V0SXRlcmF0b3JGbiIsImdldENvbXBvbmVudE5hbWVGcm9tVHlwZSIsImdldENvbXBvbmVudE5hbWVGcm9tRmliZXIiLCJnZXROZWFyZXN0TW91bnRlZEZpYmVyIiwiYXNzZXJ0SXNNb3VudGVkIiwiZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgiLCJmaW5kQ3VycmVudEhvc3RGaWJlciIsImZpbmRDdXJyZW50SG9zdEZpYmVySW1wbCIsImRlZmF1bHREaWZmZXIiLCJyZXN0b3JlRGVsZXRlZFZhbHVlc0luTmVzdGVkQXJyYXkiLCJkaWZmTmVzdGVkUHJvcGVydHkiLCJhZGROZXN0ZWRQcm9wZXJ0eSIsImNsZWFyTmVzdGVkUHJvcGVydHkiLCJkaWZmUHJvcGVydGllcyIsIm1vdW50U2FmZUNhbGxiYWNrX05PVF9SRUFMTFlfU0FGRSIsIjxhbm9ueW1vdXM+IiwiUmVhY3ROYXRpdmVGaWJlckhvc3RDb21wb25lbnQiLCJfcHJvdG8uYmx1ciIsIl9wcm90by5mb2N1cyIsIl9wcm90by5tZWFzdXJlIiwiX3Byb3RvLm1lYXN1cmVJbldpbmRvdyIsIl9wcm90by5tZWFzdXJlTGF5b3V0IiwiX3Byb3RvLnNldE5hdGl2ZVByb3BzIiwib25Db21taXRSb290IiwiY2x6MzJGYWxsYmFjayIsImdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIiwiZ2V0TmV4dExhbmVzIiwiY29tcHV0ZUV4cGlyYXRpb25UaW1lIiwiZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3IiLCJjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSIsImNsYWltTmV4dFJldHJ5TGFuZSIsImNyZWF0ZUxhbmVNYXAiLCJtYXJrUm9vdFVwZGF0ZWQiLCJtYXJrUm9vdEZpbmlzaGVkIiwibWFya1NwYXduZWREZWZlcnJlZExhbmUiLCJtYXJrUm9vdEVudGFuZ2xlZCIsImxhbmVzVG9FdmVudFByaW9yaXR5Iiwic2hpbSQxIiwiYWxsb2NhdGVUYWciLCJyZWN1cnNpdmVseVVuY2FjaGVGaWJlck5vZGUiLCJmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbiIsInBhcmVudEluc3RhbmNlLl9jaGlsZHJlbi5tYXAkYXJndW1lbnRfMCIsImdldFB1YmxpY0luc3RhbmNlIiwiZGVzY3JpYmVDb21wb25lbnRGcmFtZSIsImRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSIsImNyZWF0ZUN1cnNvciIsInBvcCIsInB1c2giLCJnZXRNYXNrZWRDb250ZXh0IiwiaXNDb250ZXh0UHJvdmlkZXIiLCJwb3BDb250ZXh0IiwicHVzaFRvcExldmVsQ29udGV4dE9iamVjdCIsInByb2Nlc3NDaGlsZENvbnRleHQiLCJwdXNoQ29udGV4dFByb3ZpZGVyIiwiaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlciIsImlzIiwicHVzaEhvc3RDb250YWluZXIiLCJwb3BIb3N0Q29udGFpbmVyIiwicHVzaEhvc3RDb250ZXh0IiwicG9wSG9zdENvbnRleHQiLCJmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzIiwiZW5xdWV1ZVVwZGF0ZSQxIiwiZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lIiwibWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QiLCJnZXRSb290Rm9yVXBkYXRlZEZpYmVyIiwiZW5zdXJlUm9vdElzU2NoZWR1bGVkIiwiZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwiLCJ0aHJvd0Vycm9yIiwicHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrIiwic2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayIsImluaXRpYWxpemVVcGRhdGVRdWV1ZSIsImNsb25lVXBkYXRlUXVldWUiLCJjcmVhdGVVcGRhdGUiLCJlbnF1ZXVlVXBkYXRlIiwiZW50YW5nbGVUcmFuc2l0aW9ucyIsImVucXVldWVDYXB0dXJlZFVwZGF0ZSIsInByb2Nlc3NVcGRhdGVRdWV1ZSIsImNhbGxDYWxsYmFjayIsImNvbW1pdENhbGxiYWNrcyIsInNoYWxsb3dFcXVhbCIsImRlc2NyaWJlRmliZXIiLCJnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QiLCJub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUudGhlbiIsImlzVGhlbmFibGVSZXNvbHZlZCIsIm5vb3AiLCJ0cmFja1VzZWRUaGVuYWJsZSIsInRoZW5hYmxlU3RhdGUudGhlbiRhcmd1bWVudF8wIiwidGhlbmFibGVTdGF0ZS50aGVuJGFyZ3VtZW50XzEiLCJnZXRTdXNwZW5kZWRUaGVuYWJsZSIsImNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoIiwidW53cmFwVGhlbmFibGUiLCJjb2VyY2VSZWYiLCJjdXJyZW50IiwidGhyb3dPbkludmFsaWRPYmplY3RUeXBlIiwicmVzb2x2ZUxhenkiLCJjcmVhdGVDaGlsZFJlY29uY2lsZXIiLCJkZWxldGVDaGlsZCIsImRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuIiwibWFwUmVtYWluaW5nQ2hpbGRyZW4iLCJ1c2VGaWJlciIsInBsYWNlQ2hpbGQiLCJwbGFjZVNpbmdsZUNoaWxkIiwidXBkYXRlVGV4dE5vZGUiLCJ1cGRhdGVFbGVtZW50IiwidXBkYXRlUG9ydGFsIiwidXBkYXRlRnJhZ21lbnQiLCJjcmVhdGVDaGlsZCIsInVwZGF0ZVNsb3QiLCJ1cGRhdGVGcm9tTWFwIiwicmVjb25jaWxlQ2hpbGRyZW5BcnJheSIsIm9sZEZpYmVyLmZvckVhY2gkYXJndW1lbnRfMCIsInJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IiLCJyZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwiLCJyZWNvbmNpbGVDaGlsZEZpYmVycyIsInB1c2hIaWRkZW5Db250ZXh0IiwicmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayIsInBvcEhpZGRlbkNvbnRleHQiLCJwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIiLCJwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyIiwicmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrIiwicG9wU3VzcGVuc2VIYW5kbGVyIiwiZmluZEZpcnN0U3VzcGVuZGVkIiwidGhyb3dJbnZhbGlkSG9va0Vycm9yIiwiYXJlSG9va0lucHV0c0VxdWFsIiwicmVuZGVyV2l0aEhvb2tzIiwiZmluaXNoUmVuZGVyaW5nSG9va3MiLCJyZW5kZXJXaXRoSG9va3NBZ2FpbiIsImJhaWxvdXRIb29rcyIsInJlc2V0SG9va3NPblVud2luZCIsIm1vdW50V29ya0luUHJvZ3Jlc3NIb29rIiwidXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rIiwiY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSIsInVzZVRoZW5hYmxlIiwidXNlIiwiYmFzaWNTdGF0ZVJlZHVjZXIiLCJ1cGRhdGVSZWR1Y2VyIiwicmVyZW5kZXJSZWR1Y2VyIiwidXBkYXRlU3luY0V4dGVybmFsU3RvcmUiLCJwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrIiwidXBkYXRlU3RvcmVJbnN0YW5jZSIsInN1YnNjcmliZVRvU3RvcmUiLCJzdWJzY3JpYmUkYXJndW1lbnRfMCIsImNoZWNrSWZTbmFwc2hvdENoYW5nZWQiLCJmb3JjZVN0b3JlUmVyZW5kZXIiLCJtb3VudFN0YXRlSW1wbCIsInB1c2hFZmZlY3QiLCJ1cGRhdGVSZWYiLCJtb3VudEVmZmVjdEltcGwiLCJ1cGRhdGVFZmZlY3RJbXBsIiwibW91bnRFZmZlY3QiLCJ1cGRhdGVFZmZlY3QiLCJ1cGRhdGVJbnNlcnRpb25FZmZlY3QiLCJ1cGRhdGVMYXlvdXRFZmZlY3QiLCJpbXBlcmF0aXZlSGFuZGxlRWZmZWN0IiwidXBkYXRlSW1wZXJhdGl2ZUhhbmRsZSIsIm1vdW50RGVidWdWYWx1ZSIsInVwZGF0ZUNhbGxiYWNrIiwidXBkYXRlTWVtbyIsIm1vdW50RGVmZXJyZWRWYWx1ZUltcGwiLCJ1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbCIsInN0YXJ0VHJhbnNpdGlvbiIsInVwZGF0ZUlkIiwiZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uIiwiZGlzcGF0Y2hTZXRTdGF0ZSIsImlzUmVuZGVyUGhhc2VVcGRhdGUiLCJlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUiLCJlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50LnVzZUNhbGxiYWNrIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VJbXBlcmF0aXZlSGFuZGxlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VMYXlvdXRFZmZlY3QiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50LnVzZUluc2VydGlvbkVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlTWVtbyIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlUmVkdWNlciIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlUmVmIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VTdGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlRGVmZXJyZWRWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlVHJhbnNpdGlvbiIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlU3luY0V4dGVybmFsU3RvcmUiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50LnVzZUlkIiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGUudXNlU3RhdGUiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZS51c2VEZWZlcnJlZFZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25VcGRhdGUudXNlVHJhbnNpdGlvbiIsIkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIudXNlU3RhdGUiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVyLnVzZURlZmVycmVkVmFsdWUiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVyLnVzZVRyYW5zaXRpb24iLCJyZXNvbHZlRGVmYXVsdFByb3BzIiwiYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJjbGFzc0NvbXBvbmVudFVwZGF0ZXIuaXNNb3VudGVkIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVTZXRTdGF0ZSIsImNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSIsImNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiY29uc3RydWN0Q2xhc3NJbnN0YW5jZSIsImNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwibW91bnRDbGFzc0luc3RhbmNlIiwiY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIiLCJsb2dDYXB0dXJlZEVycm9yIiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwiY3JlYXRlUm9vdEVycm9yVXBkYXRlIiwibGFuZS5jYWxsYmFjayIsImNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUiLCJsYW5lLnBheWxvYWQiLCJ0aHJvd0V4Y2VwdGlvbiIsInJlY29uY2lsZUNoaWxkcmVuIiwidXBkYXRlRm9yd2FyZFJlZiIsInVwZGF0ZU1lbW9Db21wb25lbnQiLCJ1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50IiwidXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50IiwiZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQiLCJtYXJrUmVmJDEiLCJ1cGRhdGVGdW5jdGlvbkNvbXBvbmVudCIsInJlcGxheUZ1bmN0aW9uQ29tcG9uZW50IiwidXBkYXRlQ2xhc3NDb21wb25lbnQiLCJmaW5pc2hDbGFzc0NvbXBvbmVudCIsInB1c2hIb3N0Um9vdENvbnRleHQiLCJtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUiLCJnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZSIsInVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50IiwibW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbiIsInJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nIiwidXBkYXRlRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50Iiwic2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyIiwiaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlIiwidXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50IiwicmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZSIsImJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsiLCJhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZSIsInJlc2V0Q29udGV4dERlcGVuZGVuY2llcyIsInBvcFByb3ZpZGVyIiwic2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aCIsInByZXBhcmVUb1JlYWRDb250ZXh0IiwicmVhZENvbnRleHQiLCJyZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24iLCJyZWFkQ29udGV4dEZvckNvbnN1bWVyIiwiaGFuZGxlQXN5bmNBY3Rpb24iLCJzY2hlZHVsZVJldHJ5RWZmZWN0IiwiY3V0T2ZmVGFpbElmTmVlZGVkIiwiYnViYmxlUHJvcGVydGllcyIsImNvbXBsZXRlV29yayIsInVud2luZFdvcmsiLCJ1bndpbmRJbnRlcnJ1cHRlZFdvcmsiLCJzYWZlbHlBdHRhY2hSZWYiLCJzYWZlbHlEZXRhY2hSZWYiLCJzYWZlbHlDYWxsRGVzdHJveSIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyIsImNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCIsImNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQiLCJjb21taXRIb29rTGF5b3V0RWZmZWN0cyIsImNvbW1pdENsYXNzQ2FsbGJhY2tzIiwiY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlciIsImRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzIiwiaXNIb3N0UGFyZW50IiwiZ2V0SG9zdFNpYmxpbmciLCJpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyIiwiaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlIiwicmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyIsImNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIiLCJnZXRSZXRyeUNhY2hlIiwiYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyIsIndha2VhYmxlcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJyZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzIiwiY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlciIsImNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzIiwicmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzIiwiY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyIsImNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIiLCJyZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMiLCJyZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQiLCJhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlciIsImRldGFjaEFsdGVybmF0ZVNpYmxpbmdzIiwicmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyIsImNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlciIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMiLCJjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luIiwicmVxdWVzdFVwZGF0ZUxhbmUiLCJyZXF1ZXN0RGVmZXJyZWRMYW5lIiwic2NoZWR1bGVVcGRhdGVPbkZpYmVyIiwicGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290IiwicmVjb3ZlckZyb21Db25jdXJyZW50RXJyb3IiLCJxdWV1ZVJlY292ZXJhYmxlRXJyb3JzIiwiY29tbWl0Um9vdFdoZW5SZWFkeSIsImlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyIsIm1hcmtSb290U3VzcGVuZGVkIiwicmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrIiwicHJlcGFyZUZyZXNoU3RhY2siLCJoYW5kbGVUaHJvdyIsInB1c2hEaXNwYXRjaGVyIiwicmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSIsInJlbmRlclJvb3RTeW5jIiwid29ya0xvb3BTeW5jIiwicmVuZGVyUm9vdENvbmN1cnJlbnQiLCJsYW5lcyIsIndvcmtMb29wQ29uY3VycmVudCIsInBlcmZvcm1Vbml0T2ZXb3JrIiwicmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayIsInRocm93QW5kVW53aW5kV29ya0xvb3AiLCJjb21wbGV0ZVVuaXRPZldvcmsiLCJjb21taXRSb290IiwiY29tbWl0Um9vdEltcGwiLCJzY2hlZHVsZUNhbGxiYWNrJGFyZ3VtZW50XzEiLCJmbHVzaFBhc3NpdmVFZmZlY3RzIiwiY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QiLCJjYXB0dXJlQ29tbWl0UGhhc2VFcnJvciIsImF0dGFjaFBpbmdMaXN0ZW5lciIsInBpbmdTdXNwZW5kZWRSb290IiwicmV0cnlUaW1lZE91dEJvdW5kYXJ5IiwicmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeSIsInJlc29sdmVSZXRyeVdha2VhYmxlIiwiYmVnaW5Xb3JrIiwic2NoZWR1bGVDYWxsYmFjayIsIkZpYmVyTm9kZSIsImNyZWF0ZUZpYmVyIiwic2hvdWxkQ29uc3RydWN0IiwicmVzb2x2ZUxhenlDb21wb25lbnRUYWciLCJjcmVhdGVXb3JrSW5Qcm9ncmVzcyIsInJlc2V0V29ya0luUHJvZ3Jlc3MiLCJjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMiLCJjcmVhdGVGaWJlckZyb21GcmFnbWVudCIsImNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbiIsInByaW1hcnlDaGlsZEluc3RhbmNlLmRldGFjaCIsInByaW1hcnlDaGlsZEluc3RhbmNlLmF0dGFjaCIsImNyZWF0ZUZpYmVyRnJvbVRleHQiLCJjcmVhdGVGaWJlckZyb21Qb3J0YWwiLCJGaWJlclJvb3ROb2RlIiwiY3JlYXRlUG9ydGFsJDEiLCJmaW5kSG9zdEluc3RhbmNlIiwidXBkYXRlQ29udGFpbmVyIiwiZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZSIsImZpbmROb2RlSGFuZGxlIiwiZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlIiwib25SZWNvdmVyYWJsZUVycm9yIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsInVwZGF0ZUNvbnRhaW5lciRhcmd1bWVudF8zIiwiZGV2VG9vbHNDb25maWckanNjb21wJGlubGluZV8xMTE0LnJlbmRlcmVyQ29uZmlnLmdldEluc3BlY3RvckRhdGFGb3JWaWV3VGFnIiwiaW50ZXJuYWxzJGpzY29tcCRpbmxpbmVfMTM1My5maW5kSG9zdEluc3RhbmNlQnlGaWJlciIsImV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuY29tcHV0ZUNvbXBvbmVudFN0YWNrRm9yRXJyb3JSZXBvcnRpbmciLCJleHBvcnRzLmNyZWF0ZVBvcnRhbCIsImV4cG9ydHMuZGlzcGF0Y2hDb21tYW5kIiwiZXhwb3J0cy5maW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQiLCJleHBvcnRzLmlzQ2hpbGRQdWJsaWNJbnN0YW5jZSIsImV4cG9ydHMucmVuZGVyIiwiZXhwb3J0cy5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50IiwiZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlQW5kUmVtb3ZlQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDa0I7Q0RPO2FFTTtLRkc7QUdFO0NISTtBSUM7Q0p1QjtBS0s7Q0xLO0FNQztDTmE7QU9FO0NQRTtBUUM7Q1JFO0FTQztDVDJCO2tCVUU7R1ZRO21CV0M7R1hPO1dZQztHWkU7Y2FFO0diUTtpQmNLO0dkRTthZUk7R2ZFO3dCZ0JJO0VDQyxlRDtFRUM7R0ZFO0NoQlc7QW1CRTtDbkJZO0FvQkM7Q3BCTztBcUJDO0NyQkk7Z0JzQkU7R3RCRTtBdUJFO0N2QkU7QXdCQztDeEJFO0F5Qlc7Q3pCRTtBMEJDO0MxQkk7QTJCQztDM0I0QjtBNEJDO0M1Qlc7QTZCQztDN0JXO2dCOEJHO0s5QkU7c0IrQkM7Sy9CZ0M7QWdDRztDaENZO0FpQ0M7Q2pDWTtBa0NDO0NsQ0U7QW1DRztDbkNTO0FvQ3lEO0NwQ0k7QXFDQztDckNJO0FzQ0M7Q3RDYztBdUNDO0N2Q2U7QXdDQztDeENnQjtBeUNDO0N6Q007QTBDQztDMUNRO21CMkNFO0szQ0U7bUI0Q0U7SzVDMFE7b0M2Q0c7TzdDRTtBOENLO0M5Q3lEO0ErQ0M7Qy9DTztBZ0RJO0NoRGM7QWlETztDakRlO0FrREM7Q2xEVztBbURDO0NuRFM7QW9EQztDcERnQjtxQnFEYztPckR1QztBc0QrQjtDdERFO0F1REM7Q3ZERTtBd0RFO0N4RFE7QXlERTtDekRrQjtBMERFO21CQ0s7R0R1QztDMURDO2dCNERFO0c1REU7a0I2REM7RzdEK0I7aUM4REU7QzlERTtzQitERTtDL0RRO1lnRUU7R2hFTztBaUV1QjtDakVNO0FrRUU7Q2xFaUQ7QW1FQztDbkV5RDtBb0VDO0NwRWE7QXFFQztDckVHO0FzRUM7Q3RFMkU7QXVFQztDdkVHO0F3RUM7Q3hFUztBeUVLO0N6RVE7QTBFQztDMUVxQztBMkVDO0MzRXFEO0E0RUM7QzVFZ0I7QTZFQztDN0VnQjtBOEVDO0M5RW1GO0ErRUM7U0NDO0dETTtDL0VDO3FDZ0ZDO0lDQztLREs7a0JFRTtLRkU7bUJHQztLSEU7cUJJQztLSks7NkJLQztLTEs7MkJNQztLTmE7NEJPQztLUGE7R2hGRTtBd0ZZO0N4RlU7QXlGSTtDekZHO0EwRkc7QzFGb0Q7QTJGQztDM0Y0QjtBNEZDO0M1RndDO0E2RkM7QzdGSTtBOEZDO0M5Rks7QStGQztDL0ZLO0FnR0M7Q2hHRztBaUdDO0NqR0k7QWtHQztDbEdpQztBbUdDO0NuR1M7QW9HQztDcEdTO0FxR0U7Q3JHUztBc0dDO0N0R0k7QXVHSTtDdkdLO0F3R0M7Q3hHUztBeUdDO2dEQ0U7R0RFO0N6R007QTJHQztDM0dJO0E0R0c7QzVHSTtBNkdDO0M3R0k7QThHSTtDOUdFO0ErR0M7Qy9HRztBZ0hDO0NoSEk7QWlISztDakhrQjtBa0hDO0NsSEc7QW1IQztDbkhHO0FvSEM7Q3BITztBcUhDO0NySGM7QXNIQztDdEhTO0F1SEM7Q3ZIa0I7QXdIQztDeEhFO0F5SEs7Q3pITTtBMEhDO0MxSEk7QTJIQztDM0hnQjtBNEhDO0M1SEc7QTZISztDN0h3QjtBOEhDO0M5SFM7QStIQztDL0hHO0FnSUM7Q2hJd0I7QWlJQztDaklZO0FrSU87Q2xJVztBbUlDO0NuSTBGO0FvSUM7Q3BJRTtBcUlDO0NySW1CO0FzSUM7Q3RJc0U7QXVJRTtDdklRO0F3SUM7Q3hJVTtBeUlDO0N6SUU7QTBJQztDMUlnQjtBMklDO0MzSVM7QTRJQztDNUkyQztBNklDO0M3STBIO0E4SUM7QzlJTztBK0lDO0MvSVM7QWdKQztDaEpxQjtBaUpDO0NqSnVCO0FrSkM7Q2xKVzt3Q21KTyxjbko7QW9KQztDcEpHO0FxSkMsa0JySjtBc0pDO1VDeUI7V0RNO1VFQztXRk07Q3RKZ0I7QXlKRTtDekpRO0EwSkM7QzFKSztBMkpHO0MzSks7QTRKQztnQkMrQjtPREc7QzVKZ0I7QThKQztDOUpTO0ErSkM7Qy9KRztBZ0tDO0VDQztHRE87RUVDO0dGTTtFR0M7R0hPO0VJQztHSks7RUtDO0dMYztFTUM7R05LO0VPQztHUFU7RVFDO0dSbUM7RVNDO0dUZTtFVUM7R1ZlO0VXQztHWGtFO0VZQztHWjhDO0VhQztHYm1FO0VjQzt1QkNzRjtPREU7R2RFO0VnQkM7dUJEdUU7T0NFO0doQkU7RWlCQztHakJtTDtFa0JDO0dsQmU7Q2hLRTtBbUxLO0NuTEs7QW9MQztDcExHO0FxTEM7Q3JMSTtBc0xHO0N0TFE7QXVMQztDdkxhO0F3TEM7Q3hMRztBeUxDO0N6TEk7QTBMRTtDMUxzQjtBMkxhO0MzTEk7QTRMQztDNUxLO0E2TEM7QzdMNkI7QThMQztDOUxZO0ErTEM7Qy9Ma0I7QWdNQztDaE1JO0FpTUM7Q2pNa0I7QWtNQztDbE1ZO0FtTUM7Q25NbUM7cUNvTUU7Q3BNRTtBcU1DO0NyTVc7QXNNQztDdE1NO0F1TUM7Q3ZNRTtBd01DO0N4TStFO0F5TUM7Q3pNc0I7QTBNQztDMU1rQztBMk1DO0MzTVk7QTRNQztDNU1JO0E2TUM7bUJDQztHREU7QzdNQztBK01DO0MvTVM7QWdOQztDaE5HO0FpTkM7Q2pOZ0I7QWtOQztDbE5lO0FtTkM7Q25ORTtBb05DO0NwTlM7QXFOQztDck5VO0FzTkM7Q3RORTtBdU5DO0N2TkU7QXdOQztDeE5FO0F5TkM7Q3pORTtBME5DO00xSUs7TzBJRTtNMUlNO08wSUU7QzFORTtBMk5DO0MzTkc7QTROQyw2QjVOO0E2TkM7QzdOUTtBOE5DO0M5TlU7QStOQztDL05RO0FnT0M7Q2hPYztBaU9DO0NqT2lCO0FrT0M7Q2xPRTtBbU9DO0NuT2lCO0FvT0M7Q3BPcUM7QXFPQztDck9NO0FzT0M7Q3RPUTtBdU9DO0N2T1E7aUJ3T3VCO0t4T007eUJ5T0c7S3pPUTtxQjBPQztLMU9FO3dCMk9DO0szT0U7YTRPQztLNU9PO2dCNk9DO0s3T3FCO1k4T0M7SzlPSTtjK09DO0svT1U7c0JnUEU7S2hQRzttQmlQQztLalBXOzBCa1BDO0tsUHdCO1dtUEM7S25QTztjb1BjO0twUEU7c0JxUEU7S3JQUTttQnNQQztLdFBTO2N1UGdCO0t2UEU7c0J3UEU7S3hQVTttQnlQQztLelBTO0EwUEk7QzFQVTtBMlBDO0MzUGU7YTRQRTtHNVBJO21CNlBDO0c3UFU7dUI4UEM7RzlQVztzQitQQztHL1BVO0FnUUU7Q2hRZTtBaVFDO0NqUTBCO0FrUUM7Q2xRYTtBbVFDO0NuUWlDO0FvUUM7Q3BRTztBcVFRO2VDVTtLREU7Q3JRRTtBdVFDO2tCQ0s7R0RHO0N2UUU7QXlRQzttQkNNO0tERTtvQkRDO0tDRTtxQkRLO0tDVTtDelFFO0EyUUM7QzNRa0o7QTRRTTtDNVFVO0E2UUM7QzdRMEI7QThRQztDOVFvRDtBK1FDO0MvUWdDO0FnUkM7Q2hSb0Q7QWlSQztDalJLO0FrUkM7Q2xSTztBbVJDO0NuUjRCO0FvUkM7Q3BSd0I7QXFSQztDclJzTTtBc1JDO0N0UnVDO0F1UkM7Q3ZSVztBd1JFO0N4UkU7QXlSQztDelJRO0EwUkM7QzFScUk7QTJSQztDM1JTO0E0UkM7QzVSa0I7QTZSQztDN1I0SztBOFJDO0M5Uks7QStSQztDL1J1QjtBZ1NDO0NoU3NGO0FpU0M7Q2pTTTtBa1NDO0NsU2tCO0FtU0M7Q25TMEU7QW9TSztDcFNLO0FxU0M7Q3JTRztBc1NDO0N0U1k7QXVTQztDdlNRO0F3U0M7Q3hTRTtBeVNDO0N6U0k7QTBTQztDMVNlO0EyU0UsK0IzUztBNFNDO0M1U087QTZTQztDN1N1QjtBOFNDO0M5U3VCO0ErU0M7Qy9TZ1Q7QWdUQztDaFQ4RDtBaVRDO0NqVGdDO0FrVEs7Q2xUcUI7QW1UQztDblRxQjtBb1RDO0NwVE07QXFURTtDclQrRDtBc1RDO0N0VG9CO0F1VEM7Q3ZUZTtBd1RDO0N4VE07QXlUQztDelRVO0EwVEM7QzFUMEc7QTJUQztDM1RlO0E0VEM7QzVURTtBNlRDO0M3VGtCO0E4VEM7QzlUbUI7QStUQztDL1QyRDtBZ1VHO0NoVVE7QWlVQztDalVtSztBa1VDO0NsVXVCO0FtVUM7b0JDRTtHREk7Q25VQztBcVVDO0NyVTZDO0FzVUM7Q3RVMFA7QXVVQztDdlU4QztBd1VDO0N4VUs7QXlVQztDelU0QztBMFVDO0MxVTZGO0EyVUM7QzNVTTtBNFVDO0M1VUs7QTZVQztDN1VvQztBOFVDO0M5VTRDO0ErVUU7Qy9VSztBZ1ZDO0NoVjhCO0FpVkM7Q2pWYTtBa1ZDO0NsVmtCO0FtVkM7Q25WcUI7QW9WQztDcFZrQztBcVZDO0NyVmdDO0FzVmdDO0N0VmM7QXVWQztDdlZTO0F3VkM7Q3hWNEI7QXlWQztDelYwSDtBMFZDO0MxVnNCO0EyVkM7QzNWTztBNFZDO0M1VlU7QTZWQztDN1ZpQztBOFZDO0M5VmlCO0ErVkM7Qy9WZ0I7QWdXQztDaFd5QztBaVdDO0NqV21DO0FrV0M7Q2xXSTtBbVdDO0NuV1U7QW9XQztDcFc4QztBcVdDO0NyV0U7QXNXQztvQkMwQjthREs7Q3RXb0U7QXdXQztDeFdHO0F5V0M7Q3pXSztBMFdDO0MxV3VEO0EyV0M7QzNXaUQ7QTRXQztDNVdxQjtBNldDO0M3V2tCO0E4V0M7cUNDaUM7S0RHO0M5V3lEO0FnWEM7Q2hYc0M7QWlYQztDalhNO0FrWEM7Q2xYd0M7QW1YQztDblhlO0FvWEM7Q3BYYztBcVhDO0NyWE87QXNYQztDdFhLO0F1WEM7Q3ZYcUI7WXdYRTtDeFhzYjtBeVhDO0N6WEU7QTBYQztDMVh1QjtBMlhDO0MzWEU7QTRYQztDNVhHO0E2WEM7QzdYUztBOFhDO0M5WG9DO0ErWEM7Qy9YK0I7QWdZQztDaFkwRTtBaVlDO0NqWUk7QWtZQztZQ1c7S0RZO1lFQztLRlk7Q2xZSTtBcVlDO0NyWUk7QXNZQztDdFljO0F1WUM7Q3ZZdUM7QXdZQztDeFlVO0F5WUM7Q3pZWTtBMFlDO0MxWTJEO0EyWUM7QzNZRTtBNFlDO0M1WXNCO0E2WUM7QzdZRTtBOFlDO0M5WUU7QStZQztzQ0NHO0tERTtDL1lDO3FCdURDO0N2RFc7a0NpWlM7T2paSTtzQ2dGQztPaEZJOzJCa1prQjtHbFpHOzBDbVp5QjtHblpJO3VCb1pFO0NwWk87MEJxWkM7Q3JaYztzQ3NaQztDdFpRO2dDdVpHO0N2WkU7aUJ3WkM7Q3haMkI7aUN5WkM7Q3paYTttRDBaRTtDMVpHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRWxlbWVudFByb3BlcnRpZXMiLCJyZW5kZXIiLCJtYXBXaXRoU2VwYXJhdG9yJGFyZ3VtZW50XzEiLCJUb3VjaGFibGVIaWdobGlnaHQucHJvcHMub25QcmVzcyIsIm1hcFdpdGhTZXBhcmF0b3IkYXJndW1lbnRfMiJdLCJtYXBwaW5ncyI6IkFBQTtBQ2tDO0VDQztnQkNhOzZCQ1EsZ0NEO2lCREs7Z0JHQztpQkhJO0dEWTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJtYXBXaXRoU2VwYXJhdG9yIl0sIm1hcHBpbmdzIjoiQUFBO0FDWTtDRGEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUb3VjaGFibGVIaWdobGlnaHQiLCJfY3JlYXRlUHJlc3NhYmlsaXR5Q29uZmlnIiwib25CbHVyIiwib25Gb2N1cyIsIm9uUHJlc3MiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJvblByZXNzSW4iLCJvblByZXNzT3V0IiwiX2NyZWF0ZUV4dHJhU3R5bGVzIiwiX3Nob3dVbmRlcmxheSIsIl9oaWRlVW5kZXJsYXkiLCJfaGFzUHJlc3NIYW5kbGVyIiwicmVuZGVyIiwiY29tcG9uZW50RGlkTW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIlJlYWN0LmZvcndhcmRSZWYkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQzJKO0VDVTtjQ2M7T0RPO2VFQztPRk87ZUdFO3lDQ007V0RFO09ISztpQktDO09MUztrQk1DO09OTztHREU7RVFFO0dSVTtFU0U7R1RRO0VVRTtHVmM7RVdFO0dYTztFWUU7R1ptRjtFYUU7R2JHO0VjRTtHZEU7RWVFO0dmTTtDREM7cUJpQks7Q2pCRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlN0eWxlSW5zcGVjdG9yIiwicmVuZGVyIiwibmFtZXMubWFwJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7QUNpQjtFQ0M7cUJDUTtXREk7cUJDSTtXRFM7R0RJO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkJveEluc3BlY3RvciIsInJlbmRlciIsIkJveENvbnRhaW5lciIsIkJveENvbnRhaW5lciNyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUN5QjtFQ0M7R0RvQjtDREM7QUdFO0VDQztHRG1CO0NIQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBlcmZvcm1hbmNlT3ZlcmxheSIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2tCO0VDQztHRG1CO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldFN0cmluZ0J5VmFsdWUiLCJnZXRUeXBlU2hvcnROYW1lIiwia2V5RXh0cmFjdG9yIiwiTmV0d29ya092ZXJsYXkiLCJfZW5hYmxlWEhSSW50ZXJjZXB0aW9uIiwiWEhSSW50ZXJjZXB0b3Iuc2V0T3BlbkNhbGxiYWNrJGFyZ3VtZW50XzAiLCJYSFJJbnRlcmNlcHRvci5zZXRSZXF1ZXN0SGVhZGVyQ2FsbGJhY2skYXJndW1lbnRfMCIsInNldFN0YXRlJGFyZ3VtZW50XzAiLCJYSFJJbnRlcmNlcHRvci5zZXRTZW5kQ2FsbGJhY2skYXJndW1lbnRfMCIsIlhIUkludGVyY2VwdG9yLnNldEhlYWRlclJlY2VpdmVkQ2FsbGJhY2skYXJndW1lbnRfMCIsIlhIUkludGVyY2VwdG9yLnNldFJlc3BvbnNlQ2FsbGJhY2skYXJndW1lbnRfMCIsIl9lbmFibGVXZWJTb2NrZXRJbnRlcmNlcHRpb24iLCJXZWJTb2NrZXRJbnRlcmNlcHRvci5zZXRDb25uZWN0Q2FsbGJhY2skYXJndW1lbnRfMCIsIldlYlNvY2tldEludGVyY2VwdG9yLnNldENsb3NlQ2FsbGJhY2skYXJndW1lbnRfMCIsIldlYlNvY2tldEludGVyY2VwdG9yLnNldFNlbmRDYWxsYmFjayRhcmd1bWVudF8wIiwiV2ViU29ja2V0SW50ZXJjZXB0b3Iuc2V0T25NZXNzYWdlQ2FsbGJhY2skYXJndW1lbnRfMCIsIldlYlNvY2tldEludGVyY2VwdG9yLnNldE9uQ2xvc2VDYWxsYmFjayRhcmd1bWVudF8wIiwiV2ViU29ja2V0SW50ZXJjZXB0b3Iuc2V0T25FcnJvckNhbGxiYWNrJGFyZ3VtZW50XzAiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiX3JlbmRlckl0ZW0iLCJUb3VjaGFibGVIaWdobGlnaHQucHJvcHMub25QcmVzcyIsIl9yZW5kZXJJdGVtRGV0YWlsIiwiT2JqZWN0LmtleXMubWFwJGFyZ3VtZW50XzAiLCJTY3JvbGxWaWV3LnByb3BzLnJlZiIsIl9pbmRpY2F0ZUFkZGl0aW9uYWxSZXF1ZXN0cyIsIl9jYXB0dXJlUmVxdWVzdHNMaXN0VmlldyIsIl9yZXF1ZXN0c0xpc3RWaWV3T25TY3JvbGwiLCJfcHJlc3NSb3ciLCJfc2Nyb2xsRGV0YWlsVG9Ub3AiLCJfY2xvc2VCdXR0b25DbGlja2VkIiwiX2dldFJlcXVlc3RJbmRleEJ5WEhSSUQiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUN5RDtDRGE7QUVFO0NGUTtBR0U7Q0hFO0FJSztFQzRCO21DQ0s7S0RvQjs0Q0VFO29CQ007T0RPO0tGQzttQ0lFO29CRE07T0NJO0tKQztNS0c7c0JGTTtTRU07T0xDO01NSTtzQkhNO1NHUztPTkM7R0RLO0VRRTtNQ007T0RlO01FSTt3Qk5NO1dNSztPRkU7eUNHRztvQlBNO09PUztLSEM7OENJRTtvQlJNO09RVTtLSkM7NENLRTtvQlRNO09TSztLTEM7NENNRTtvQlZNO09VSztLTkM7R1JJO0VlRTtHZkc7RWdCRTtHaEJHO2dCaUJFO2lCQ2M7U0RFO0dqQmlCO0VtQkU7aURDRTtLRGM7ZUVhLGlERjtHbkJLO2dDc0JFO0d0QmE7NkJ1QkU7R3ZCRTs4QndCRTtHeEJNO0V5Qk07R3pCRTt1QjBCRTtHMUJPO3dCMkJFO0czQkU7RTRCRTtHNUJVO0U2QkU7RzdCa0M7Q0pDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2V0T3BlbkNhbGxiYWNrIiwic2V0U2VuZENhbGxiYWNrIiwic2V0SGVhZGVyUmVjZWl2ZWRDYWxsYmFjayIsInNldFJlc3BvbnNlQ2FsbGJhY2siLCJzZXRSZXF1ZXN0SGVhZGVyQ2FsbGJhY2siLCJpc0ludGVyY2VwdG9yRW5hYmxlZCIsImVuYWJsZUludGVyY2VwdGlvbiIsIlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuIiwiWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnNldFJlcXVlc3RIZWFkZXIiLCJYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2VuZCIsImFkZEV2ZW50TGlzdGVuZXIkYXJndW1lbnRfMSIsImRpc2FibGVJbnRlcmNlcHRpb24iXSwibWFwcGluZ3MiOiJBQUE7RUNtQztHREU7RUVLO0dGRTtFR0s7R0hFO0VJSztHSkU7RUtLO0dMRTtFTUU7R05FO0VPRTtvQ0NNO0tESztnREVJO0tGSztvQ0dJO1VDTztXRG9DO0tISztHUEU7RVlHO0daYSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInNldENsb3NlQ2FsbGJhY2siLCJzZXRTZW5kQ2FsbGJhY2siLCJzZXRDb25uZWN0Q2FsbGJhY2siLCJzZXRPbk9wZW5DYWxsYmFjayIsInNldE9uTWVzc2FnZUNhbGxiYWNrIiwic2V0T25FcnJvckNhbGxiYWNrIiwic2V0T25DbG9zZUNhbGxiYWNrIiwiaXNJbnRlcmNlcHRvckVuYWJsZWQiLCJfdW5yZWdpc3RlckV2ZW50cyIsInN1YnNjcmlwdGlvbnMuZm9yRWFjaCRhcmd1bWVudF8wIiwiX3JlZ2lzdGVyRXZlbnRzIiwiZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyJGFyZ3VtZW50XzEiLCJlbmFibGVJbnRlcmNlcHRpb24iLCJOYXRpdmVXZWJTb2NrZXRNb2R1bGUuY29ubmVjdCIsIk5hdGl2ZVdlYlNvY2tldE1vZHVsZS5zZW5kIiwiTmF0aXZlV2ViU29ja2V0TW9kdWxlLnNlbmRCaW5hcnkiLCJOYXRpdmVXZWJTb2NrZXRNb2R1bGUuY2xvc2UiLCJfYXJyYXlCdWZmZXJUb1N0cmluZyIsImRpc2FibGVJbnRlcmNlcHRpb24iXSwibWFwcGluZ3MiOiJBQUE7RUMwQztHREU7RUVLO0dGRTtFR0s7R0hFO0VJSztHSkU7RUtLO0dMRTtFTUs7R05FO0VPSztHUEU7RVFFO0dSRTtFU0U7MEJDQyxlRDtHVEU7RVdLO21EQ0U7T0RTO2dEQ0M7T0RJO2tEQ0M7T0RJO2tEQ0M7T0RJO0dYRTtFYUU7b0NDYztLRFU7aUNFSTtLRks7dUNHSTtLSEs7a0NJSTtLSlM7R2JHO0VrQkU7R2xCYTtFbUJHO0duQm1CIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQXBwQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiQUFBO3FCQ2tCO0NENEIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjb2VyY2VEaXNwbGF5TW9kZSJdLCJtYXBwaW5ncyI6IkFBQTtPQ29CO0NEUyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldENhY2hlZENvbXBvbmVudFdpdGhEaXNwbGF5TmFtZSIsIkNvbXBvbmVudFdpdGhEaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6IkFBQTtlQ3FCOytCQ00sZ0REO0NETyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImVtcHR5RnVuY3Rpb24iLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dCLGlDRDtFRWdCO0dGSTtFR0MsMEVIIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVW5pbXBsZW1lbnRlZFZpZXciLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNrQjtFQ0M7R0RRO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl9Mb2dCb3hJbnNwZWN0b3JDb250YWluZXIiLCJfTG9nQm94SW5zcGVjdG9yQ29udGFpbmVyI3JlbmRlciIsIl9Mb2dCb3hJbnNwZWN0b3JDb250YWluZXIjX2hhbmRsZURpc21pc3MiLCJfTG9nQm94SW5zcGVjdG9yQ29udGFpbmVyI19oYW5kbGVNaW5pbWl6ZSIsIl9Mb2dCb3hJbnNwZWN0b3JDb250YWluZXIjX2hhbmRsZVNldFNlbGVjdGVkTG9nIl0sIm1hcHBpbmdzIjoiQUFBO09Dd0I7RUNDO0dEWTttQkVFO0dGZTtvQkdFO0dIRTswQklFO0dKRTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJMb2dCb3hJbnNwZWN0b3IiLCJSZWFjdC51c2VFZmZlY3QkYXJndW1lbnRfMCIsIl9oYW5kbGVSZXRyeSIsIkxvZ0JveEluc3BlY3RvckJvZHkiLCJMb2dCb3hJbnNwZWN0b3JNZXNzYWdlSGVhZGVyLnByb3BzLm9uUHJlc3MiXSwibWFwcGluZ3MiOiJBQUE7QUNrQztrQkNJO0dESTtrQkNFO0dEVTtrQkNFO0dERTtFRUU7R0ZFO0NEc0I7QUlVO2tCRkc7R0VFO21CQ1csOEJEO2lCQ2lCLDhCRDtDSlUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJMb2dCb3hJbnNwZWN0b3JDb2RlRnJhbWUiLCJnZXRGaWxlTmFtZSIsImdldExvY2F0aW9uIiwiTG9nQm94QnV0dG9uLnByb3BzLm9uUHJlc3MiLCJBcHBJbmZvIl0sIm1hcHBpbmdzIjoiQUFBO0FDNEI7RUNNO0dEUztFRUU7R0ZVO21CR2dCO1dIRTtDRFM7QUtFO0NMcUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJvcGVuRmlsZUluRWRpdG9yIl0sIm1hcHBpbmdzIjoiQUFBO0FDYztDRFMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbnNpIiwidGV4dC5zcGxpdC5tYXAkYXJndW1lbnRfMCIsInBhcnNlZExpbmVzLm1hcCRhcmd1bWVudF8wIiwiZ2V0VGV4dCIsIml0ZW1zLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO2VDdUM7MkNDUztNREs7a0JFRztHRlM7a0JHSTtHSFU7dUJFSTtxQkVFO1dGZTtPRkU7Q0RHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiPGFub255bW91cz4iLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NsYXNzQ2FsbENoZWNrIiwiZXNjYXBlRm9ySHRtbCIsImxpbmtpZnkiLCJhbnNpVG9IdG1sIiwiYW5zaVRvSnNvbiIsImFuc2lUb1RleHQiLCJBbnNlciIsInNldHVwUGFsZXR0ZSIsImZvcm1hdCIsInR4dC5yZXBsYWNlJGFyZ3VtZW50XzEiLCJwcm9jZXNzIiwicmF3X3RleHRfY2h1bmtzLm1hcCRhcmd1bWVudF8wIiwiY29sb3JfY2h1bmtzLmZpbHRlciRhcmd1bWVudF8wIiwicHJvY2Vzc0NodW5rSnNvbiIsImlzRW1wdHkiLCJwcm9jZXNzQ2h1bmsiLCJyZW5kZXJfZGF0YSJdLCJtYXBwaW5ncyI6IkFBQTttQkNJLGNDLDRURCxvTkQ7QUdFLHlKSDtZQ0k7ZUdrQjtTSEU7ZUltQjtTSkU7ZUs2QjtTTEU7ZU1lO1NORTtlT2M7U1BFO0lRYTtLUks7ZVNhO3lCQ2E7YURFO1NUaUI7ZUdjOzBDUUM7YVJFO1NIQztlSWM7d0RPQzthUEU7U0pDO2VLZTtTTEU7ZU1lO1NOSztlT2M7U1BFO2VZbUI7bURDVzthREU7dURFUTtxQkZFO1NaUTtlZThCO3lCQ2dCO2lCREU7U2ZvSjtlaUJvQjs4QkNzQjthRFM7U2pCb0Q7Q0RJIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTG9nQm94SW5zcGVjdG9yU2VjdGlvbiJdLCJtYXBwaW5ncyI6IkFBQTtBQ3NCO0NEVSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkxvZ0JveEluc3BlY3RvckZvb3RlciIsIkZvb3RlckJ1dHRvbiJdLCJtYXBwaW5ncyI6IkFBQTtBQzBCO0NEbUI7QUVPO0NGZSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkxvZ0JveEluc3BlY3RvckhlYWRlciIsIkxvZ0JveEluc3BlY3RvckhlYWRlckJ1dHRvbi5wcm9wcy5vblByZXNzIiwiYmFja2dyb3VuZEZvckxldmVsIiwiTG9nQm94SW5zcGVjdG9ySGVhZGVyQnV0dG9uIl0sIm1hcHBpbmdzIjoiQUFBO0FDNkI7bUJDMkIsb0NEO21CQ1Msb0NEO0NESzsyQkdFO1dIa0I7QUlFO0NKa0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJtZXJnZVByb3BzU3RhY2siLCJwcm9wc1N0YWNrLnJlZHVjZSRhcmd1bWVudF8wIiwiY3JlYXRlU3RhY2tFbnRyeSIsIlN0YXR1c0JhciIsInNldEhpZGRlbiIsInNldEJhclN0eWxlIiwic2V0TmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZSIsInNldEJhY2tncm91bmRDb2xvciIsInNldFRyYW5zbHVjZW50IiwicHVzaFN0YWNrRW50cnkiLCJwb3BTdGFja0VudHJ5IiwicmVwbGFjZVN0YWNrRW50cnkiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX3VwZGF0ZVByb3BzU3RhY2siLCJzZXRJbW1lZGlhdGUkYXJndW1lbnRfMCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQzhHO0lDSztLRE87Q0RHO0FHTTtDSDZCO0FJZ0U7RUM0QztHRFE7RUVPO0dGUTtFR007R0hTO0VJTztHSnFCO0VLTTtHTE87RU1RO0dOSztFT087R1BNO0VRUTtHUlE7RVNLO0dUTTtFVUU7R1ZJO0VXRTtHWEs7NkJZSzs4Q0NHO0tEcUU7R1pDO0VjRTtHZEU7Q0pDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTmF0aXZlU3RhdHVzQmFyTWFuYWdlci5nZXRDb25zdGFudHMiLCJOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyLnNldENvbG9yIiwiTmF0aXZlU3RhdHVzQmFyTWFuYWdlci5zZXRUcmFuc2x1Y2VudCIsIk5hdGl2ZVN0YXR1c0Jhck1hbmFnZXIuc2V0U3R5bGUiLCJOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyLnNldEhpZGRlbiJdLCJtYXBwaW5ncyI6IkFBQTtFQ21DO0dEUTtFRUU7R0ZFO0VHRTtHSEU7RUlPO0dKRTtFS0U7R0xFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTmF0aXZlU3RhdHVzQmFyTWFuYWdlci5nZXRDb25zdGFudHMiLCJOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyLmdldEhlaWdodCIsIk5hdGl2ZVN0YXR1c0Jhck1hbmFnZXIuc2V0TmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZSIsIk5hdGl2ZVN0YXR1c0Jhck1hbmFnZXIuYWRkTGlzdGVuZXIiLCJOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyLnJlbW92ZUxpc3RlbmVycyIsIk5hdGl2ZVN0YXR1c0Jhck1hbmFnZXIuc2V0U3R5bGUiLCJOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyLnNldEhpZGRlbiJdLCJtYXBwaW5ncyI6IkFBQTtFQzJDO0dEUTtFRUc7R0ZFO0VHRTtHSEU7RUlFO0dKRTtFS0U7R0xFO0VNUTtHTkU7RU9LO0dQRSJ9XSxudWxsLG51bGwsW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJMb2dCb3hJbnNwZWN0b3JNZXNzYWdlSGVhZGVyIiwicmVuZGVyU2hvd01vcmUiLCJUZXh0LnByb3BzLm9uUHJlc3MiXSwibWFwcGluZ3MiOiJBQUE7QUM4QjtFQ0M7b0RDUSxxQkQ7R0RJO0NEbUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRQcmV0dHlGaWxlTmFtZSIsIkxvZ0JveEluc3BlY3RvclJlYWN0RnJhbWVzIiwiZ2V0U3RhY2tMaXN0IiwiZ2V0Q29sbGFwc2VNZXNzYWdlIiwiZ2V0U3RhY2tMaXN0Lm1hcCRhcmd1bWVudF8wIiwiPGFub255bW91cz4iLCJMb2dCb3hCdXR0b24ucHJvcHMub25QcmVzcyJdLCJtYXBwaW5ncyI6IkFBQTtBQzZCO0NEb0I7QUVDO0VDTTtHRE07RUVFO0dGVzswQkdJO2tCQ2U7OEVEQztPSGlCO21CS08sOEJMO0NGTyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldENvbGxhcHNlTWVzc2FnZSIsInN0YWNrRnJhbWVzLnJlZHVjZSRhcmd1bWVudF8wIiwiTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZXMiLCJSZWFjdC51c2VTdGF0ZSRhcmd1bWVudF8wIiwicHJvcHMubG9nLmdldEF2YWlsYWJsZVN0YWNrLnNvbWUkYXJndW1lbnRfMCIsImdldFN0YWNrTGlzdCIsInByb3BzLmxvZy5nZXRBdmFpbGFibGVTdGFjay5maWx0ZXIkYXJndW1lbnRfMCIsIlN0YWNrRnJhbWVGb290ZXIucHJvcHMub25QcmVzcyIsIlN0YWNrRnJhbWVMaXN0IiwicHJvcHMubGlzdC5tYXAkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwiU3RhY2tGcmFtZUZvb3RlciJdLCJtYXBwaW5ncyI6IkFBQTtPQzhCOzRDQ1E7R0RNO0NEb0I7QUdFO21EQ0M7OENDRSx5QkQ7R0RDO0VHRTtrRENFLHlCRDtHSEk7aUJLOEIsOEJMO0NISztBU0U7c0JDTTtrQkNRLHdDRDtPREs7Q1RHO0FZRTtDWmdCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTG9nQm94SW5zcGVjdG9yU291cmNlTWFwU3RhdHVzIiwiUmVhY3QudXNlRWZmZWN0JGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiJdLCJtYXBwaW5ncyI6IkFBQTtBQ3lCO2tCQ007V0NnQztLREk7R0RDO0NEeUMifV0sbnVsbCxudWxsLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZSIsImdldEZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiQUFBO0FDMEI7Q0QrQjtBRUU7Q0ZTIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCIsInJlcG9ydGVyLm9uRXJyb3IiLCJpbnZva2VHdWFyZGVkQ2FsbGJhY2siLCJpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IiLCJleGVjdXRlRGlzcGF0Y2giLCJleGVjdXRlRGlyZWN0RGlzcGF0Y2giLCJmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSIsImZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSIsIlN5bnRoZXRpY0V2ZW50IiwiYXNzaWduJGFyZ3VtZW50XzEucHJldmVudERlZmF1bHQiLCJhc3NpZ24kYXJndW1lbnRfMS5zdG9wUHJvcGFnYXRpb24iLCJhc3NpZ24kYXJndW1lbnRfMS5wZXJzaXN0IiwiYXNzaWduJGFyZ3VtZW50XzEuZGVzdHJ1Y3RvciIsIlN5bnRoZXRpY0V2ZW50LkludGVyZmFjZS5jdXJyZW50VGFyZ2V0IiwiU3ludGhldGljRXZlbnQuSW50ZXJmYWNlLnRpbWVTdGFtcCIsIlN5bnRoZXRpY0V2ZW50LmV4dGVuZCIsIkUiLCJDbGFzcyIsImNyZWF0ZU9yR2V0UG9vbGVkRXZlbnQiLCJyZWxlYXNlUG9vbGVkRXZlbnQiLCJhZGRFdmVudFBvb2xpbmdUbyIsIlN5bnRoZXRpY0V2ZW50LmV4dGVuZCRhcmd1bWVudF8wLnRvdWNoSGlzdG9yeSIsImlzU3RhcnRpc2giLCJpc01vdmVpc2giLCJ0aW1lc3RhbXBGb3JUb3VjaCIsImdldFRvdWNoSWRlbnRpZmllciIsInJlY29yZFRvdWNoU3RhcnQiLCJyZWNvcmRUb3VjaE1vdmUiLCJyZWNvcmRUb3VjaEVuZCIsIlJlc3BvbmRlclRvdWNoSGlzdG9yeVN0b3JlLmluc3RydW1lbnQiLCJSZXNwb25kZXJUb3VjaEhpc3RvcnlTdG9yZS5yZWNvcmRUb3VjaFRyYWNrIiwiYWNjdW11bGF0ZSIsImFjY3VtdWxhdGVJbnRvIiwiZm9yRWFjaEFjY3VtdWxhdGVkIiwiY2hhbmdlUmVzcG9uZGVyIiwiZ2V0UGFyZW50JDEiLCJ0cmF2ZXJzZVR3b1BoYXNlJDEiLCJnZXRMaXN0ZW5lciQxIiwiYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyQxIiwiYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUkMSIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0IiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSQxIiwiUmVzcG9uZGVyRXZlbnRQbHVnaW4uX2dldFJlc3BvbmRlciIsIlJlc3BvbmRlckV2ZW50UGx1Z2luLmV4dHJhY3RFdmVudHMiLCJSZXNwb25kZXJFdmVudFBsdWdpbi5pbmplY3Rpb24uaW5qZWN0R2xvYmFsUmVzcG9uZGVySGFuZGxlciIsInJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nIiwicHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUiLCJnZXRMaXN0ZW5lciIsImFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMiLCJ0cmF2ZXJzZVR3b1BoYXNlIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSIsImFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlIiwiaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyRqc2NvbXAkaW5saW5lXzIzMi5SZWFjdE5hdGl2ZUJyaWRnZUV2ZW50UGx1Z2luLmV4dHJhY3RFdmVudHMiLCJkZWZhdWx0RGlmZmVyIiwicmVzdG9yZURlbGV0ZWRWYWx1ZXNJbk5lc3RlZEFycmF5IiwiZGlmZk5lc3RlZFByb3BlcnR5IiwiYWRkTmVzdGVkUHJvcGVydHkiLCJjbGVhck5lc3RlZFByb3BlcnR5IiwiZGlmZlByb3BlcnRpZXMiLCJiYXRjaGVkVXBkYXRlc0ltcGwiLCJiYXRjaGVkVXBkYXRlcyQxIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwiLCJkaXNwYXRjaEV2ZW50IiwiYmF0Y2hlZFVwZGF0ZXMkMSRhcmd1bWVudF8wIiwib25Db21taXRSb290IiwiY2x6MzJGYWxsYmFjayIsImdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIiwiZ2V0TmV4dExhbmVzIiwiY29tcHV0ZUV4cGlyYXRpb25UaW1lIiwiZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3IiLCJjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSIsImNsYWltTmV4dFJldHJ5TGFuZSIsImNyZWF0ZUxhbmVNYXAiLCJtYXJrUm9vdFVwZGF0ZWQiLCJtYXJrUm9vdEZpbmlzaGVkIiwibWFya1NwYXduZWREZWZlcnJlZExhbmUiLCJtYXJrUm9vdEVudGFuZ2xlZCIsImxhbmVzVG9FdmVudFByaW9yaXR5Iiwic2hpbSQxIiwiY3JlYXRlVGV4dEluc3RhbmNlIiwiZ2V0UHVibGljSW5zdGFuY2UiLCJjbG9uZUhpZGRlbkluc3RhbmNlIiwiZ2V0SW5zdGFuY2VGcm9tTm9kZSIsImdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMSIsImdldE5vZGVGcm9tSW5zdGFuY2UkMSIsIlJlc3BvbmRlckV2ZW50UGx1Z2luLmluamVjdGlvbi5pbmplY3RHbG9iYWxSZXNwb25kZXJIYW5kbGVyJGFyZ3VtZW50XzAub25DaGFuZ2UiLCJnZXRJdGVyYXRvckZuIiwiZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlIiwiZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlciIsImdldE5lYXJlc3RNb3VudGVkRmliZXIiLCJhc3NlcnRJc01vdW50ZWQiLCJmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aCIsImZpbmRDdXJyZW50SG9zdEZpYmVyIiwiZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsIiwiZGVzY3JpYmVDb21wb25lbnRGcmFtZSIsImRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSIsImNyZWF0ZUN1cnNvciIsInBvcCIsInB1c2giLCJnZXRNYXNrZWRDb250ZXh0IiwiaXNDb250ZXh0UHJvdmlkZXIiLCJwb3BDb250ZXh0IiwicHVzaFRvcExldmVsQ29udGV4dE9iamVjdCIsInByb2Nlc3NDaGlsZENvbnRleHQiLCJwdXNoQ29udGV4dFByb3ZpZGVyIiwiaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlciIsImlzIiwicHVzaEhvc3RDb250YWluZXIiLCJwb3BIb3N0Q29udGFpbmVyIiwicHVzaEhvc3RDb250ZXh0IiwicG9wSG9zdENvbnRleHQiLCJmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzIiwiZW5xdWV1ZVVwZGF0ZSQxIiwiZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lIiwibWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QiLCJnZXRSb290Rm9yVXBkYXRlZEZpYmVyIiwiZW5zdXJlUm9vdElzU2NoZWR1bGVkIiwiZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwiLCJ0aHJvd0Vycm9yIiwicHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrIiwic2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayIsImluaXRpYWxpemVVcGRhdGVRdWV1ZSIsImNsb25lVXBkYXRlUXVldWUiLCJjcmVhdGVVcGRhdGUiLCJlbnF1ZXVlVXBkYXRlIiwiZW50YW5nbGVUcmFuc2l0aW9ucyIsImVucXVldWVDYXB0dXJlZFVwZGF0ZSIsInByb2Nlc3NVcGRhdGVRdWV1ZSIsImNhbGxDYWxsYmFjayIsImNvbW1pdENhbGxiYWNrcyIsInNoYWxsb3dFcXVhbCIsImRlc2NyaWJlRmliZXIiLCJub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUudGhlbiIsImlzVGhlbmFibGVSZXNvbHZlZCIsIm5vb3AiLCJ0cmFja1VzZWRUaGVuYWJsZSIsInRoZW5hYmxlU3RhdGUudGhlbiRhcmd1bWVudF8wIiwidGhlbmFibGVTdGF0ZS50aGVuJGFyZ3VtZW50XzEiLCJnZXRTdXNwZW5kZWRUaGVuYWJsZSIsImNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoIiwidW53cmFwVGhlbmFibGUiLCJjb2VyY2VSZWYiLCJjdXJyZW50IiwidGhyb3dPbkludmFsaWRPYmplY3RUeXBlIiwicmVzb2x2ZUxhenkiLCJjcmVhdGVDaGlsZFJlY29uY2lsZXIiLCJkZWxldGVDaGlsZCIsImRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuIiwibWFwUmVtYWluaW5nQ2hpbGRyZW4iLCJ1c2VGaWJlciIsInBsYWNlQ2hpbGQiLCJwbGFjZVNpbmdsZUNoaWxkIiwidXBkYXRlVGV4dE5vZGUiLCJ1cGRhdGVFbGVtZW50IiwidXBkYXRlUG9ydGFsIiwidXBkYXRlRnJhZ21lbnQiLCJjcmVhdGVDaGlsZCIsInVwZGF0ZVNsb3QiLCJ1cGRhdGVGcm9tTWFwIiwicmVjb25jaWxlQ2hpbGRyZW5BcnJheSIsIm9sZEZpYmVyLmZvckVhY2gkYXJndW1lbnRfMCIsInJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IiLCJyZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwiLCJyZWNvbmNpbGVDaGlsZEZpYmVycyIsInB1c2hIaWRkZW5Db250ZXh0IiwicmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayIsInBvcEhpZGRlbkNvbnRleHQiLCJwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIiLCJwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyIiwicmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrIiwicG9wU3VzcGVuc2VIYW5kbGVyIiwiZmluZEZpcnN0U3VzcGVuZGVkIiwidGhyb3dJbnZhbGlkSG9va0Vycm9yIiwiYXJlSG9va0lucHV0c0VxdWFsIiwicmVuZGVyV2l0aEhvb2tzIiwiZmluaXNoUmVuZGVyaW5nSG9va3MiLCJyZW5kZXJXaXRoSG9va3NBZ2FpbiIsImJhaWxvdXRIb29rcyIsInJlc2V0SG9va3NPblVud2luZCIsIm1vdW50V29ya0luUHJvZ3Jlc3NIb29rIiwidXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rIiwiY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSIsInVzZVRoZW5hYmxlIiwidXNlIiwiYmFzaWNTdGF0ZVJlZHVjZXIiLCJ1cGRhdGVSZWR1Y2VyIiwicmVyZW5kZXJSZWR1Y2VyIiwidXBkYXRlU3luY0V4dGVybmFsU3RvcmUiLCJwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrIiwidXBkYXRlU3RvcmVJbnN0YW5jZSIsInN1YnNjcmliZVRvU3RvcmUiLCJzdWJzY3JpYmUkYXJndW1lbnRfMCIsImNoZWNrSWZTbmFwc2hvdENoYW5nZWQiLCJmb3JjZVN0b3JlUmVyZW5kZXIiLCJtb3VudFN0YXRlSW1wbCIsInB1c2hFZmZlY3QiLCJ1cGRhdGVSZWYiLCJtb3VudEVmZmVjdEltcGwiLCJ1cGRhdGVFZmZlY3RJbXBsIiwibW91bnRFZmZlY3QiLCJ1cGRhdGVFZmZlY3QiLCJ1cGRhdGVJbnNlcnRpb25FZmZlY3QiLCJ1cGRhdGVMYXlvdXRFZmZlY3QiLCJpbXBlcmF0aXZlSGFuZGxlRWZmZWN0IiwiPGFub255bW91cz4iLCJ1cGRhdGVJbXBlcmF0aXZlSGFuZGxlIiwibW91bnREZWJ1Z1ZhbHVlIiwidXBkYXRlQ2FsbGJhY2siLCJ1cGRhdGVNZW1vIiwibW91bnREZWZlcnJlZFZhbHVlSW1wbCIsInVwZGF0ZURlZmVycmVkVmFsdWVJbXBsIiwic3RhcnRUcmFuc2l0aW9uIiwidXBkYXRlSWQiLCJkaXNwYXRjaFJlZHVjZXJBY3Rpb24iLCJkaXNwYXRjaFNldFN0YXRlIiwiaXNSZW5kZXJQaGFzZVVwZGF0ZSIsImVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZSIsImVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlQ2FsbGJhY2siLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50LnVzZUltcGVyYXRpdmVIYW5kbGUiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50LnVzZUxheW91dEVmZmVjdCIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlSW5zZXJ0aW9uRWZmZWN0IiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VNZW1vIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VSZWR1Y2VyIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VSZWYiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50LnVzZVN0YXRlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VEZWZlcnJlZFZhbHVlIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VUcmFuc2l0aW9uIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlSWQiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZS51c2VTdGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlLnVzZURlZmVycmVkVmFsdWUiLCJIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZS51c2VUcmFuc2l0aW9uIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlci51c2VTdGF0ZSIsIkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIudXNlRGVmZXJyZWRWYWx1ZSIsIkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIudXNlVHJhbnNpdGlvbiIsInJlc29sdmVEZWZhdWx0UHJvcHMiLCJhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsImNsYXNzQ29tcG9uZW50VXBkYXRlci5pc01vdW50ZWQiLCJjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUiLCJjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlIiwiY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUiLCJjb25zdHJ1Y3RDbGFzc0luc3RhbmNlIiwiY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJtb3VudENsYXNzSW5zdGFuY2UiLCJjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlciIsImxvZ0NhcHR1cmVkRXJyb3IiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJjcmVhdGVSb290RXJyb3JVcGRhdGUiLCJsYW5lLmNhbGxiYWNrIiwiY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSIsImxhbmUucGF5bG9hZCIsInRocm93RXhjZXB0aW9uIiwicmVjb25jaWxlQ2hpbGRyZW4iLCJ1cGRhdGVGb3J3YXJkUmVmIiwidXBkYXRlTWVtb0NvbXBvbmVudCIsInVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQiLCJ1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQiLCJkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudCIsIm1hcmtSZWYkMSIsInVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50IiwicmVwbGF5RnVuY3Rpb25Db21wb25lbnQiLCJ1cGRhdGVDbGFzc0NvbXBvbmVudCIsImZpbmlzaENsYXNzQ29tcG9uZW50IiwicHVzaEhvc3RSb290Q29udGV4dCIsIm1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZSIsImdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlIiwidXBkYXRlU3VzcGVuc2VDb21wb25lbnQiLCJtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuIiwicmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmciLCJ1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQiLCJzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIiLCJpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUiLCJ1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQiLCJyZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlIiwiYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayIsImF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlIiwicmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzIiwicG9wUHJvdmlkZXIiLCJzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoIiwicHJlcGFyZVRvUmVhZENvbnRleHQiLCJyZWFkQ29udGV4dCIsInJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbiIsInJlYWRDb250ZXh0Rm9yQ29uc3VtZXIiLCJoYW5kbGVBc3luY0FjdGlvbiIsImRvZXNSZXF1aXJlQ2xvbmUiLCJhcHBlbmRBbGxDaGlsZHJlbiIsImFwcGVuZEFsbENoaWxkcmVuVG9Db250YWluZXIiLCJ1cGRhdGVIb3N0Q29udGFpbmVyIiwic2NoZWR1bGVSZXRyeUVmZmVjdCIsImN1dE9mZlRhaWxJZk5lZWRlZCIsImJ1YmJsZVByb3BlcnRpZXMiLCJjb21wbGV0ZVdvcmsiLCJ1bndpbmRXb3JrIiwidW53aW5kSW50ZXJydXB0ZWRXb3JrIiwic2FmZWx5QXR0YWNoUmVmIiwic2FmZWx5RGV0YWNoUmVmIiwic2FmZWx5Q2FsbERlc3Ryb3kiLCJjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMiLCJjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQiLCJjb21taXRIb29rRWZmZWN0TGlzdE1vdW50IiwiY29tbWl0SG9va0xheW91dEVmZmVjdHMiLCJjb21taXRDbGFzc0NhbGxiYWNrcyIsImNvbW1pdEhvc3RDb21wb25lbnRNb3VudCIsImNvbW1pdExheW91dEVmZmVjdE9uRmliZXIiLCJkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMiLCJjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyIiwiZ2V0UmV0cnlDYWNoZSIsImF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMiLCJ3YWtlYWJsZXMuZm9yRWFjaCRhcmd1bWVudF8wIiwicmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyIsImNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIiLCJjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzIiwicmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyIsImNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzIiwicmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMiLCJjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyIiwicmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzIiwicmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0IiwiYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIiLCJkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMiLCJjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIiLCJyZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzIiwiY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbiIsInJlcXVlc3RVcGRhdGVMYW5lIiwicmVxdWVzdERlZmVycmVkTGFuZSIsInNjaGVkdWxlVXBkYXRlT25GaWJlciIsInBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdCIsInJlY292ZXJGcm9tQ29uY3VycmVudEVycm9yIiwicXVldWVSZWNvdmVyYWJsZUVycm9ycyIsImNvbW1pdFJvb3RXaGVuUmVhZHkiLCJpc1JlbmRlckNvbnNpc3RlbnRXaXRoRXh0ZXJuYWxTdG9yZXMiLCJtYXJrUm9vdFN1c3BlbmRlZCIsInJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjayIsInByZXBhcmVGcmVzaFN0YWNrIiwiaGFuZGxlVGhyb3ciLCJwdXNoRGlzcGF0Y2hlciIsInJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUiLCJyZW5kZXJSb290U3luYyIsIndvcmtMb29wU3luYyIsInJlbmRlclJvb3RDb25jdXJyZW50IiwibGFuZXMiLCJ3b3JrTG9vcENvbmN1cnJlbnQiLCJwZXJmb3JtVW5pdE9mV29yayIsInJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsiLCJ0aHJvd0FuZFVud2luZFdvcmtMb29wIiwiY29tcGxldGVVbml0T2ZXb3JrIiwiY29tbWl0Um9vdCIsImNvbW1pdFJvb3RJbXBsIiwic2NoZWR1bGVDYWxsYmFjayRhcmd1bWVudF8xIiwiZmx1c2hQYXNzaXZlRWZmZWN0cyIsImNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290IiwiY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IiLCJhdHRhY2hQaW5nTGlzdGVuZXIiLCJwaW5nU3VzcGVuZGVkUm9vdCIsInJldHJ5VGltZWRPdXRCb3VuZGFyeSIsInJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkiLCJyZXNvbHZlUmV0cnlXYWtlYWJsZSIsImJlZ2luV29yayIsInNjaGVkdWxlQ2FsbGJhY2siLCJGaWJlck5vZGUiLCJjcmVhdGVGaWJlciIsInNob3VsZENvbnN0cnVjdCIsInJlc29sdmVMYXp5Q29tcG9uZW50VGFnIiwiY3JlYXRlV29ya0luUHJvZ3Jlc3MiLCJyZXNldFdvcmtJblByb2dyZXNzIiwiY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzIiwiY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQiLCJjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4iLCJwcmltYXJ5Q2hpbGRJbnN0YW5jZS5kZXRhY2giLCJwcmltYXJ5Q2hpbGRJbnN0YW5jZS5hdHRhY2giLCJjcmVhdGVGaWJlckZyb21UZXh0IiwiY3JlYXRlRmliZXJGcm9tUG9ydGFsIiwiRmliZXJSb290Tm9kZSIsImNyZWF0ZVBvcnRhbCQxIiwiZmluZEhvc3RJbnN0YW5jZSIsInVwZGF0ZUNvbnRhaW5lciIsImVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UiLCJmaW5kTm9kZUhhbmRsZSIsImdldEluc3BlY3RvckRhdGFGb3JJbnN0YW5jZSIsIm9uUmVjb3ZlcmFibGVFcnJvciIsImRldlRvb2xzQ29uZmlnJGpzY29tcCRpbmxpbmVfMTA1NS5yZW5kZXJlckNvbmZpZy5nZXRJbnNwZWN0b3JEYXRhRm9yVmlld1RhZyIsImludGVybmFscyRqc2NvbXAkaW5saW5lXzEyODAuZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIiLCJleHBvcnRzLmNyZWF0ZVBvcnRhbCIsImV4cG9ydHMuZGlzcGF0Y2hDb21tYW5kIiwiZXhwb3J0cy5maW5kSG9zdEluc3RhbmNlX0RFUFJFQ0FURUQiLCJleHBvcnRzLmdldE5vZGVGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSIsImV4cG9ydHMuZ2V0UHVibGljSW5zdGFuY2VGcm9tSW50ZXJuYWxJbnN0YW5jZUhhbmRsZSIsImV4cG9ydHMuaXNDaGlsZFB1YmxpY0luc3RhbmNlIiwiZXhwb3J0cy5yZW5kZXIiLCJleHBvcnRzLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQiLCJleHBvcnRzLnN0b3BTdXJmYWNlIiwidXBkYXRlQ29udGFpbmVyJGFyZ3VtZW50XzMiLCJleHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGUiXSwibWFwcGluZ3MiOiJBQUE7QUNrQjtDRE87YUVNO0tGRztBR0U7Q0hJO0FJQztDSnVCO0FLSztDTEs7QU1DO0NOYTtBT0U7Q1BFO0FRQztDUkU7QVNDO0NUMkI7a0JVRTtHVlE7bUJXQztHWE87V1lDO0daRTtjYUU7R2JRO2lCY0s7R2RFO2FlSTtHZkU7d0JnQkk7RUNDLGVEO0VFQztHRkU7Q2hCVztBbUJFO0NuQlk7QW9CQztDcEJPO0FxQkM7Q3JCSTtnQnNCRTtHdEJFO0F1QkU7Q3ZCRTtBd0JDO0N4QkU7QXlCVztDekJFO0EwQkM7QzFCSTtBMkJDO0MzQjRCO0E0QkM7QzVCVztBNkJDO0M3Qlc7Z0I4Qkc7SzlCRTtzQitCQztLL0JnQztBZ0NHO0NoQ1k7QWlDQztDakNZO0FrQ0M7Q2xDRTtBbUNHO0NuQ1M7QW9DeUQ7Q3BDSTtBcUNDO0NyQ0k7QXNDQztDdENjO0F1Q0M7Q3ZDZTtBd0NDO0N4Q2dCO0F5Q0M7Q3pDTTtBMENDO0MxQ1E7bUIyQ0U7SzNDRTttQjRDRTtLNUMwUTtvQzZDRztPN0NFO0E4Q0s7QzlDeUQ7QStDQztDL0NPO0FnREk7Q2hEYztBaURPO0NqRGU7QWtEQztDbERXO0FtREM7Q25EUztBb0RDO0NwRGdCO3FCcURjO09yRHVDO0FzRGlDO0N0RFE7QXVEQztDdkRxQztBd0RDO0N4RHFEO0F5REM7Q3pEZ0I7QTBEQztDMURnQjtBMkRDO0MzRG1GO0E0REM7QzVERTtBNkRFO0M3RFE7QThERTtDOURrQjtBK0RDO21CQ007R0RzQztDL0RDO0FpRWM7Q2pFVTtBa0VJO0NsRUc7QW1FRztDbkVvRDtBb0VDO0NwRTRCO0FxRUM7Q3JFd0M7QXNFQztDdEVJO0F1RUM7Q3ZFSztBd0VDO0N4RUs7QXlFQztDekVHO0EwRUM7QzFFSTtBMkVDO0MzRWlDO0E0RUM7QzVFUztBNkVDO0M3RVM7QThFRTtDOUVTO0ErRUM7Qy9FSTtBZ0ZtQjtDaEZpQjtBaUZDO0NqRk07QWtGRztDbEZZO0FtRkM7Q25GSTtpQ29GQztDcEZFO3dCcUZFO0NyRkk7WXNGRTtHdEZlO0F1RnFCO0N2Rk07QXdGRTtDeEZpRDtBeUZDO0N6RnlEO0EwRkM7QzFGYTtBMkZDO0MzRkc7QTRGQztDNUYyRTtBNkZDO0M3Rkc7QThGQztDOUZTO0ErRkM7Qy9GSTtBZ0dDO0NoR0k7QWlHSTtDakdFO0FrR0M7Q2xHRztBbUdDO0NuR0k7QW9HSztDcEdrQjtBcUdDO0NyR0c7QXNHQztDdEdHO0F1R0M7Q3ZHTztBd0dDO0N4R2M7QXlHQztDekdTO0EwR0M7QzFHa0I7QTJHQztDM0dFO0E0R0s7QzVHTTtBNkdDO0M3R0k7QThHQztDOUdnQjtBK0dDO0MvR0c7QWdISztDaEh3QjtBaUhDO0NqSFM7QWtIQztDbEhHO0FtSEM7Q25Id0I7QW9IQztDcEhZO0FxSE87Q3JIVztBc0hDO0N0SHlGO0F1SEM7Q3ZIRTtBd0hDO0N4SG1CO0F5SEM7Q3pIc0U7QTBIRTtDMUhRO0EySEM7QzNIVTtBNEhDO0M1SEU7QTZIQztDN0hnQjtBOEhDO0M5SFM7QStIQztDL0gyQztBZ0lDO0NoSTBIO0FpSUM7Q2pJTztBa0lDO0NsSVM7QW1JQztDbklxQjtBb0lDO0NwSXVCO3dDcUlPLGNySTtBc0lDO0N0SUc7QXVJQyxrQnZJO0F3SUM7VUN5QjtXRE07VUVDO1dGTTtDeElnQjtBMklFO0MzSVE7QTRJQztDNUlLO0E2SUc7QzdJSztBOElDO2dCQytCO09ERztDOUlnQjtBZ0pDO0NoSlM7QWlKQztDakpHO0FrSkM7RUNDO0dETztFRUM7R0ZNO0VHQztHSE87RUlDO0dKSztFS0M7R0xjO0VNQztHTks7RU9DO0dQVTtFUUM7R1JtQztFU0M7R1RlO0VVQztHVmU7RVdDO0dYa0U7RVlDO0daOEM7RWFDO0dibUU7RWNDO3VCQ3NGO09ERTtHZEU7RWdCQzt1QkR1RTtPQ0U7R2hCRTtFaUJDO0dqQm1MO0VrQkM7R2xCZTtDbEpFO0FxS0s7Q3JLSztBc0tDO0N0S0c7QXVLQztDdktJO0F3S0c7Q3hLUTtBeUtDO0N6S2E7QTBLQztDMUtHO0EyS0M7QzNLSTtBNEtFO0M1S3NCO0E2S2E7QzdLSTtBOEtDO0M5S0s7QStLQztDL0s2QjtBZ0xDO0NoTFk7QWlMQztDakxrQjtBa0xDO0NsTEk7QW1MQztDbkxrQjtBb0xDO0NwTFk7QXFMQztDckxtQztxQ3NMRTtDdExFO0F1TEM7Q3ZMVztBd0xDO0N4TE07QXlMQztDekxFO0EwTEM7QzFMK0U7QTJMQztDM0xzQjtBNExDO0M1TGtDO0E2TEM7QzdMWTtBOExDO0M5TEk7QStMQzttQkNDO0dERTtDL0xDO0FpTUM7Q2pNUztBa01DO0NsTUc7QW1NQztDbk1nQjtBb01DO0NwTWU7QXFNQztDck1FO0FzTUM7Q3RNUztBdU1DO0N2TVU7QXdNQztDeE1FO0F5TUM7Q3pNRTtBME1DO0MxTUU7QTJNQztDM01FO0E0TUM7TUNLO09ERTtNQ007T0RFO0M1TUU7QThNQztDOU1HO0ErTUMsNkIvTTtBZ05DO0NoTlE7QWlOQztDak5VO0FrTkM7Q2xOUTtBbU5DO0NuTmM7QW9OQztDcE5pQjtBcU5DO0NyTkU7QXNOQztDdE5pQjtBdU5DO0N2TnFDO0F3TkM7Q3hOTTtBeU5DO0N6TlE7QTBOQztDMU5RO2lCMk51QjtLM05NO3lCNE5HO0s1TlE7cUI2TkM7SzdORTt3QjhOQztLOU5FO2ErTkM7Sy9OTztnQmdPQztLaE9xQjtZaU9DO0tqT0k7Y2tPQztLbE9VO3NCbU9FO0tuT0c7bUJvT0M7S3BPVzswQnFPQztLck93QjtXc09DO0t0T087Y3VPYztLdk9FO3NCd09FO0t4T1E7bUJ5T0M7S3pPUztjME9nQjtLMU9FO3NCMk9FO0szT1U7bUI0T0M7SzVPUztBNk9JO0M3T1U7QThPQztDOU9lO2ErT0U7Ry9PSTttQmdQQztHaFBVO3VCaVBDO0dqUFc7c0JrUEM7R2xQVTtBbVBFO0NuUGU7QW9QQztDcFAwQjtBcVBDO0NyUGE7QXNQQztDdFBpQztBdVBDO0N2UGlCO0F3UFE7ZUNVO0tERTtDeFBFO0EwUEM7a0JDSztHREc7QzFQRTtBNFBDO21CQ007S0RFO29CREM7S0NFO3FCREs7S0NVO0M1UEU7QThQQztDOVBrSjtBK1BNO0MvUFU7QWdRQztDaFEwQjtBaVFDO0NqUW9EO0FrUUM7Q2xRZ0M7QW1RQztDblFvRDtBb1FDO0NwUUs7QXFRQztDclFPO0FzUUM7Q3RRNEI7QXVRQztDdlF3QjtBd1FDO0N4UXNNO0F5UUM7Q3pRdUM7QTBRQztDMVFXO0EyUUU7QzNRRTtBNFFDO0M1UVE7QTZRQztDN1FxSTtBOFFDO0M5UVM7QStRQztDL1FrQjtBZ1JDO0NoUjRLO0FpUkM7Q2pSSztBa1JDO0NsUnVCO0FtUkM7Q25Sc0Y7QW9SQztDcFJNO0FxUkM7Q3JSa0I7QXNSQztDdFIwRTtBdVJLO0N2Uks7QXdSQztDeFJHO0F5UkM7Q3pSWTtBMFJDO0MxUlE7QTJSQztDM1JFO0E0UkM7QzVSSTtBNlJDO0M3UmU7QThSRSwrQjlSO0ErUkM7Qy9SUztBZ1NDO0NoU29DO0FpU0M7Q2pTNEM7QWtTQztDbFNVO0FtU0M7Q25TTztBb1NDO0NwU3VCO0FxU0M7Q3JTdUI7QXNTQztDdFN3VTtBdVNDO0N2UzhEO0F3U0M7Q3hTZ0M7QXlTSztDelNxQjtBMFNDO0MxU3FCO0EyU0M7QzNTTTtBNFNFO0M1UytEO0E2U0M7QzdTb0I7QThTQztDOVNlO0ErU0M7Qy9TTTtBZ1RDO0NoVFU7QWlUQztDalRRO0FrVEM7Q2xUMkc7QW1UQztDblRlO0FvVEM7Q3BUUTtBcVRDO0NyVDRIO0FzVEM7Q3RUdUI7QXVUQztvQkNFO0dESTtDdlRDO0F5VEM7Q3pUa0I7QTBUQztDMVRpSTtBMlRDO0MzVEk7QTRUQztDNVRLO0E2VEM7QzdUNEM7QThUQztDOVRrRztBK1RDO0MvVE07QWdVQztDaFVLO0FpVUM7Q2pVb0M7QWtVQztDbFU0QztBbVVFO0NuVUs7QW9VQztDcFU4QjtBcVVDO0NyVWE7QXNVQztDdFVrQjtBdVVDO0N2VXFCO0F3VUM7Q3hVa0M7QXlVQztDelVnQztBMFVnQztDMVUyQjtBMlVDO0MzVVM7QTRVQztDNVU0QjtBNlVDO0M3VTBIO0E4VUM7QzlVc0I7QStVQztDL1VPO0FnVkM7Q2hWVTtBaVZDO0NqVmlDO0FrVkM7Q2xWaUI7QW1WQztDblZnQjtBb1ZDO0NwVnlDO0FxVkM7Q3JWbUM7QXNWQztDdFZJO0F1VkM7Q3ZWVTtBd1ZDO0N4VjhDO0F5VkM7Q3pWRTtBMFZDO29CQzBCO2FESztDMVZvRTtBNFZDO0M1Vkc7QTZWQztDN1ZLO0E4VkM7QzlWdUQ7QStWQztDL1ZpRDtBZ1dDO0NoV3FCO0FpV0M7Q2pXa0I7QWtXQztxQ0NpQztLREc7Q2xXeUQ7QW9XQztDcFdzQztBcVdDO0NyV007QXNXQztDdFd3QztBdVdDO0N2V2U7QXdXQztDeFdjO0F5V0M7Q3pXTztBMFdDO0MxV0s7QTJXQztDM1dxQjtZNFdFO0M1V3NiO0E2V0M7QzdXRTtBOFdDO0M5V3VCO0ErV0M7Qy9XRTtBZ1hDO0NoWEc7QWlYQztDalhTO0FrWEM7Q2xYb0M7QW1YQztDblgrQjtBb1hDO0NwWDBFO0FxWEM7Q3JYSTtBc1hDO1lDVztLRFk7WUVDO0tGWTtDdFhJO0F5WEM7Q3pYSTtBMFhDO0MxWGM7QTJYQztDM1h1QztBNFhDO0M1WFU7QTZYQztDN1hZO0E4WEM7QzlYMkQ7QStYQztDL1hFO0FnWUM7Q2hZc0I7QWlZQztDallFO0FrWUM7Q2xZRTtxQjREQztDNURXO2tDbVlTO09uWUk7c0M2TUM7TzdNSTsyQm9Za0I7R3BZRzt1QnFZd0I7Q3JZTzswQnNZQztDdFljO3NDdVlDO0N2WVE7NEN3WUc7Q3hZTTtzRHlZQztDelljO2dDMFlDO0MxWUU7aUIyWUM7QzNZK0I7aUM0WUM7QzVZYTtzQjZZQztzQ0NHO0tERTtDN1lDO2lDK1lDO0MvWUUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBY3Rpdml0eUluZGljYXRvciJdLCJtYXBwaW5ncyI6IkFBQTswQkM4RDtDRDJEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQnV0dG9uIl0sIm1hcHBpbmdzIjoiQUFBO3FEQzBSO0NEc0cifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUb3VjaGFibGVOYXRpdmVGZWVkYmFjayIsIlNlbGVjdGFibGVCYWNrZ3JvdW5kIiwiU2VsZWN0YWJsZUJhY2tncm91bmRCb3JkZXJsZXNzIiwiUmlwcGxlIiwiY2FuVXNlTmF0aXZlRm9yZWdyb3VuZCIsIl9jcmVhdGVQcmVzc2FiaWxpdHlDb25maWciLCJvblByZXNzSW4iLCJvblByZXNzTW92ZSIsIm9uUHJlc3NPdXQiLCJfZGlzcGF0Y2hQcmVzc2VkU3RhdGVDaGFuZ2UiLCJfZGlzcGF0Y2hIb3RzcG90VXBkYXRlIiwicmVuZGVyIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIjxhbm9ueW1vdXM+Il0sIm1hcHBpbmdzIjoiQUFBO0FDaUc7UUNTO0lESTtRRVU7SUZJO1FHZ0I7R0hhO2lESUs7NkJKQztFS007aUJDa0I7T0RRO21CRUM7T0ZJO2tCR0M7T0hPO0dMRTtFU0U7R1RZO0VVRTtHVmlCO0VXRTtHWCtGO0VZRTtHWkU7RWFFO0diRTtFY0U7R2RFO0NEQztNZ0JNO2lEaEJHO01nQkcsNENoQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlRvdWNoYWJsZU9wYWNpdHkiLCJfY3JlYXRlUHJlc3NhYmlsaXR5Q29uZmlnIiwib25CbHVyIiwib25Gb2N1cyIsIm9uUHJlc3NJbiIsIm9uUHJlc3NPdXQiLCJfc2V0T3BhY2l0eVRvIiwiX29wYWNpdHlBY3RpdmUiLCJfb3BhY2l0eUluYWN0aXZlIiwiX2dldENoaWxkU3R5bGVPcGFjaXR5V2l0aERlZmF1bHQiLCJyZW5kZXIiLCJjb21wb25lbnREaWRVcGRhdGUiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiUmVhY3QuZm9yd2FyZFJlZiRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDbUk7RUNNO2NDYTtPRE87ZUVDO09GTztpQkdHO09IUztrQklDO09KSztHREU7RU1LO0dOTztFT0U7R1BFO0VRRTtHUkU7RVNFO0dUSztFVUU7R1ZxRjtFV0U7R1hhO0VZRTtHWkU7RWFFO0diRTtDREM7cUJlSztDZkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJJbWFnZUJhY2tncm91bmQiLCJzZXROYXRpdmVQcm9wcyIsIl9jYXB0dXJlUmVmIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDOEM7RUNDO0dETTtnQkVJO0dGUztFR0U7R0g0QztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJJbnB1dEFjY2Vzc29yeVZpZXciXSwibWFwcGluZ3MiOiJBQUE7MkRDdUY7Q0RrQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIktleWJvYXJkQXZvaWRpbmdWaWV3IiwiY29uc3RydWN0b3IiLCJfcmVsYXRpdmVLZXlib2FyZEhlaWdodCIsIl9vbktleWJvYXJkQ2hhbmdlIiwiX29uTGF5b3V0IiwiX3NldEJvdHRvbSIsIl91cGRhdGVCb3R0b21JZk5lY2Vzc2FyeSIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJfc3Vic2NyaXB0aW9ucy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUM2RDtFQ1E7R0RJO0VFRTtHRitCO3NCR0U7R0hJO2NJRTtHSmdCO2VLRztHTE07NkJNRTtHTjBCO0VPRTtHUEs7RVFFO0dSVztFU0U7Z0NDQztLREU7R1RDO0VXRTtHWDBFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBvcHVwTWVudUFuZHJvaWQiXSwibWFwcGluZ3MiOiJBQUE7QUM0QjtDREUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjb25maXJtUHJvcHMiLCJNb2RhbCIsImNvbnN0cnVjdG9yIiwiY29tcG9uZW50RGlkTW91bnQiLCJNb2RhbEV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lciRhcmd1bWVudF8xIiwic2V0U3RhdGUkYXJndW1lbnRfMSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX3Nob3VsZFNob3dNb2RhbCIsInJlbmRlciIsIm9uRGlzbWlzcyIsIl9zaG91bGRTZXRSZXNwb25kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNpSztDRFk7QUVRO0VDVztHRFM7RUVFO1FDSzs2Q0NDO1dESTtTREM7R0ZHO0VLRTtHTEs7RU1FO0dOUTtFT0c7R1BNO0VRRTtzQkMwQjsyQ0xHO1NLSTtLREU7R1IrQjtFVUc7R1ZFO0NGQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlByZXNzYWJsZSIsInVzZU1lbW8kYXJndW1lbnRfMCIsIm9uUHJlc3NJbiIsIm9uUHJlc3NPdXQiLCJ1c2VQcmVzc1N0YXRlIl0sIm1hcHBpbmdzIjoiQUFBO0FDMk07SUM4RTtNQ2M7T0RRO01FRTtPRlE7TURDO0NEa0M7QUtFO0NMRyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVzZUFuZHJvaWRSaXBwbGVGb3JWaWV3IiwidXNlTWVtbyRhcmd1bWVudF8wIiwib25QcmVzc0luIiwib25QcmVzc01vdmUiLCJvblByZXNzT3V0Il0sIm1hcHBpbmdzIjoiQUFBO2VDdUM7aUJDYTtRQ3lCO1NEVTtRRUM7U0ZTO1FHQztTSEs7R0RJO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJldHVybnNGYWxzZSIsInJldHVybnNUcnVlIiwiU3dpdGNoIiwiaGFuZGxlQ2hhbmdlIiwiUmVhY3QudXNlTGF5b3V0RWZmZWN0JGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7cUJDdUYsV0Q7b0JFQyxVRjtxQkdpRDt1QkN1QjtHRE07d0JFRTtHRmlCO0NIbUUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNUcnVlIiwiSW50ZXJuYWxUZXh0SW5wdXQiLCJ1c2VMYXlvdXRFZmZlY3QkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+Iiwic2V0TG9jYWxSZWYiLCJPYmplY3QuYXNzaWduJGFyZ3VtZW50XzEuY2xlYXIiLCJPYmplY3QuYXNzaWduJGFyZ3VtZW50XzEuaXNGb2N1c2VkIiwiT2JqZWN0LmFzc2lnbiRhcmd1bWVudF8xLmdldE5hdGl2ZVJlZiIsIk9iamVjdC5hc3NpZ24kYXJndW1lbnRfMS5zZXRTZWxlY3Rpb24iLCJfb25DaGFuZ2UiLCJfb25DaGFuZ2VTeW5jIiwiX29uU2VsZWN0aW9uQ2hhbmdlIiwiX29uRm9jdXMiLCJfb25CbHVyIiwiX29uU2Nyb2xsIiwiUmVhY3QudXNlTWVtbyRhcmd1bWVudF8wIiwib25QcmVzcyIsIlRleHRJbnB1dCJdLCJtYXBwaW5ncyI6IkFBQTtxQ0NtK0IsVUQ7QUVpSDtrQkMwRDtHRCtCO2tCQ1k7YUNNO09ETTtHREU7SUdHO1VDNEI7V0RVO1VFRTtXRkU7VUdDO1dIRTtVSUM7V0pVO0tIRztvQlFNO0dSaUI7d0JTRTtHVGtCOzZCVUU7R1ZhO21CV0U7R1hLO2tCWUU7R1pLO29CYUU7R2JFO0ljMkM7ZUNFO09ETztNZEk7Q0ZpSztxQmtCcUc7Q2xCdUUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJOYXRpdmVDb21wb25lbnRSZWdpc3RyeS5nZXQkYXJndW1lbnRfMSJdLCJtYXBwaW5ncyI6IkFBQTtJQ3dDLDRCRCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImV4dHJhY3RTaW5nbGVUb3VjaCIsIlRvdWNoYWJsZU1peGluLmNvbXBvbmVudERpZE1vdW50IiwiVG91Y2hhYmxlTWl4aW4uY29tcG9uZW50V2lsbFVubW91bnQiLCJUb3VjaGFibGVNaXhpbi50b3VjaGFibGVHZXRJbml0aWFsU3RhdGUiLCJUb3VjaGFibGVNaXhpbi50b3VjaGFibGVIYW5kbGVSZXNwb25kZXJUZXJtaW5hdGlvblJlcXVlc3QiLCJUb3VjaGFibGVNaXhpbi50b3VjaGFibGVIYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlciIsIlRvdWNoYWJsZU1peGluLnRvdWNoYWJsZUxvbmdQcmVzc0NhbmNlbHNQcmVzcyIsIlRvdWNoYWJsZU1peGluLnRvdWNoYWJsZUhhbmRsZVJlc3BvbmRlckdyYW50IiwiVG91Y2hhYmxlTWl4aW4udG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyUmVsZWFzZSIsIlRvdWNoYWJsZU1peGluLnRvdWNoYWJsZUhhbmRsZVJlc3BvbmRlclRlcm1pbmF0ZSIsIlRvdWNoYWJsZU1peGluLnRvdWNoYWJsZUhhbmRsZVJlc3BvbmRlck1vdmUiLCJUb3VjaGFibGVNaXhpbi50b3VjaGFibGVIYW5kbGVGb2N1cyIsIlRvdWNoYWJsZU1peGluLnRvdWNoYWJsZUhhbmRsZUJsdXIiLCJUb3VjaGFibGVNaXhpbi5fcmVtZWFzdXJlTWV0cmljc09uQWN0aXZhdGlvbiIsIlRvdWNoYWJsZU1peGluLl9oYW5kbGVRdWVyeUxheW91dCIsIlRvdWNoYWJsZU1peGluLl9oYW5kbGVEZWxheSIsIlRvdWNoYWJsZU1peGluLl9oYW5kbGVMb25nRGVsYXkiLCJUb3VjaGFibGVNaXhpbi5fcmVjZWl2ZVNpZ25hbCIsIlRvdWNoYWJsZU1peGluLl9jYW5jZWxMb25nUHJlc3NEZWxheVRpbWVvdXQiLCJUb3VjaGFibGVNaXhpbi5faXNIaWdobGlnaHQiLCJUb3VjaGFibGVNaXhpbi5fc2F2ZVByZXNzSW5Mb2NhdGlvbiIsIlRvdWNoYWJsZU1peGluLl9nZXREaXN0YW5jZUJldHdlZW5Qb2ludHMiLCJUb3VjaGFibGVNaXhpbi5fcGVyZm9ybVNpZGVFZmZlY3RzRm9yVHJhbnNpdGlvbiIsIlRvdWNoYWJsZU1peGluLl9zdGFydEhpZ2hsaWdodCIsIlRvdWNoYWJsZU1peGluLl9lbmRIaWdobGlnaHQiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJyZW5kZXJEZWJ1Z1ZpZXciXSwibWFwcGluZ3MiOiJBQUE7MkJDdUI7Q0RzQjtxQkV5VTtHRkk7d0JHTztHSEk7NEJJUztHSlM7OENLUTtHTEU7MENNTztHTkU7a0NPSztHUEU7aUNRUztHUm9DO21DU087R1RHO3FDVU87R1ZHO2dDV087R1gyRTt3QllZO0daRTt1QmFZO0diRTtpQ2NnRjtHZFc7c0JlSTtHZndCO2dCZ0JJO0doQkc7b0JpQkk7R2pCUztrQmtCWTtHbEJxQztnQ21CSTtHbkJHO2dCb0JFO0dwQks7d0JxQkk7R3JCTzs2QnNCRTtHdEJTO29DdUJlO0d2QjJEO21Cd0JJO0d4Qkc7aUJ5Qkk7K0NDTTtTREU7R3pCSzttQjJCd0I7RzNCWSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkJvdW5kaW5nRGltZW5zaW9ucyIsInByb3RvdHlwZS5kZXN0cnVjdG9yIiwiZ2V0UG9vbGVkRnJvbUVsZW1lbnQiXSwibWFwcGluZ3MiOiJBQUE7QUNxQjtDREc7MENFRTtDRkc7MENHTTtDSEsifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJvbmVBcmd1bWVudFBvb2xlciIsInR3b0FyZ3VtZW50UG9vbGVyIiwidGhyZWVBcmd1bWVudFBvb2xlciIsImZvdXJBcmd1bWVudFBvb2xlciIsInN0YW5kYXJkUmVsZWFzZXIiLCJhZGRQb29saW5nVG8iXSwibWFwcGluZ3MiOiJBQUE7MEJDc0I7Q0RTOzBCRUk7Q0ZTOzRCR0k7Q0hTOzJCSUk7Q0pTO3lCS007Q0xVO3FCTWdCO0NOb0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQb3NpdGlvbiIsInByb3RvdHlwZS5kZXN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFBO0FDc0I7Q0RHO2dDRUU7Q0ZHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2hvd0FjdGlvblNoZWV0V2l0aE9wdGlvbnMiLCJzaG93U2hhcmVBY3Rpb25TaGVldFdpdGhPcHRpb25zIiwiZGlzbWlzc0FjdGlvblNoZWV0Il0sIm1hcHBpbmdzIjoiQUFBO0VDeUM7R0QwRDtFRXlCO0dGdUI7c0JHTTtHSEsifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJtb2R1bGUuZXhwb3J0cy5nZXRTdHJpbmciLCJtb2R1bGUuZXhwb3J0cy5zZXRTdHJpbmciXSwibWFwcGluZ3MiOiJBQUE7RUN3QjtHREU7RUVVO0dGRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIl9pbml0aWFsaXplR2VzdHVyZVN0YXRlIiwiX3VwZGF0ZUdlc3R1cmVTdGF0ZU9uTW92ZSIsImNyZWF0ZSIsInBhbkhhbmRsZXJzLm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXIiLCJwYW5IYW5kbGVycy5vbk1vdmVTaG91bGRTZXRSZXNwb25kZXIiLCJwYW5IYW5kbGVycy5vblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZSIsInBhbkhhbmRsZXJzLm9uTW92ZVNob3VsZFNldFJlc3BvbmRlckNhcHR1cmUiLCJwYW5IYW5kbGVycy5vblJlc3BvbmRlckdyYW50IiwicGFuSGFuZGxlcnMub25SZXNwb25kZXJSZWplY3QiLCJwYW5IYW5kbGVycy5vblJlc3BvbmRlclJlbGVhc2UiLCJwYW5IYW5kbGVycy5vblJlc3BvbmRlclN0YXJ0IiwicGFuSGFuZGxlcnMub25SZXNwb25kZXJNb3ZlIiwicGFuSGFuZGxlcnMub25SZXNwb25kZXJFbmQiLCJwYW5IYW5kbGVycy5vblJlc3BvbmRlclRlcm1pbmF0ZSIsInBhbkhhbmRsZXJzLm9uUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0IiwiZ2V0SW50ZXJhY3Rpb25IYW5kbGUiLCJjbGVhckludGVyYWN0aW9uSGFuZGxlIl0sIm1hcHBpbmdzIjoiQUFBO0VDb1M7R0RZO0VFMEI7R0ZvQztFR2tDO01Dc0I7T0RJO01FQztPRkk7TUdDO09IVztNSUU7T0plO01LRTtPTGdCO01NRTtPTk87TU9FO09QUTtNUUU7T1JNO01TRTtPVGdCO01VRTtPVlM7TVdFO09YUTtNWUU7T1pJO01hSTtPYkU7R0hFO0FpQkc7Q2pCYSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImNlbnRyb2lkRGltZW5zaW9uIiwiY3VycmVudENlbnRyb2lkWE9mVG91Y2hlc0NoYW5nZWRBZnRlciIsImN1cnJlbnRDZW50cm9pZFlPZlRvdWNoZXNDaGFuZ2VkQWZ0ZXIiLCJwcmV2aW91c0NlbnRyb2lkWE9mVG91Y2hlc0NoYW5nZWRBZnRlciIsInByZXZpb3VzQ2VudHJvaWRZT2ZUb3VjaGVzQ2hhbmdlZEFmdGVyIiwiY3VycmVudENlbnRyb2lkWCIsImN1cnJlbnRDZW50cm9pZFkiXSwibWFwcGluZ3MiOiJBQUE7cUJDMEI7R0R1RDt5Q0VFO0dGVTt5Q0dFO0dIVTswQ0lFO0dKVTswQ0tFO0dMVTtvQk1FO0dOTztvQk9FO0dQTyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBlcm1pc3Npb25zQW5kcm9pZCIsImNoZWNrUGVybWlzc2lvbiIsImNoZWNrIiwicmVxdWVzdFBlcm1pc3Npb24iLCJyZXF1ZXN0IiwiUHJvbWlzZSRhcmd1bWVudF8wIiwiTmF0aXZlRGlhbG9nTWFuYWdlckFuZHJvaWQuc2hvd0FsZXJ0JGFyZ3VtZW50XzEiLCJOYXRpdmVEaWFsb2dNYW5hZ2VyQW5kcm9pZC5zaG93QWxlcnQkYXJndW1lbnRfMiIsInJlcXVlc3RNdWx0aXBsZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3lGO0VDNEQ7R0RpQjtFRVE7R0ZjO0VHZ0I7R0hnQjtFSVE7MkJDdUI7WUNVLGtERDtZRUM7NkVGQztTREU7R0pJO0VRUztHUmU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUHVzaE5vdGlmaWNhdGlvbklPUyIsInByZXNlbnRMb2NhbE5vdGlmaWNhdGlvbiIsInNjaGVkdWxlTG9jYWxOb3RpZmljYXRpb24iLCJjYW5jZWxBbGxMb2NhbE5vdGlmaWNhdGlvbnMiLCJyZW1vdmVBbGxEZWxpdmVyZWROb3RpZmljYXRpb25zIiwiZ2V0RGVsaXZlcmVkTm90aWZpY2F0aW9ucyIsInJlbW92ZURlbGl2ZXJlZE5vdGlmaWNhdGlvbnMiLCJzZXRBcHBsaWNhdGlvbkljb25CYWRnZU51bWJlciIsImdldEFwcGxpY2F0aW9uSWNvbkJhZGdlTnVtYmVyIiwiY2FuY2VsTG9jYWxOb3RpZmljYXRpb25zIiwiZ2V0U2NoZWR1bGVkTG9jYWxOb3RpZmljYXRpb25zIiwiYWRkRXZlbnRMaXN0ZW5lciIsIlB1c2hOb3RpZmljYXRpb25FbWl0dGVyLmFkZExpc3RlbmVyJGFyZ3VtZW50XzEiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVxdWVzdFBlcm1pc3Npb25zIiwiYWJhbmRvblBlcm1pc3Npb25zIiwiY2hlY2tQZXJtaXNzaW9ucyIsImdldEluaXRpYWxOb3RpZmljYXRpb24iLCJOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUy5nZXRJbml0aWFsTm90aWZpY2F0aW9uLnRoZW4kYXJndW1lbnRfMCIsImdldEF1dGhvcml6YXRpb25TdGF0dXMiLCJjb25zdHJ1Y3RvciIsIk9iamVjdC5rZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsImZpbmlzaCIsImdldE1lc3NhZ2UiLCJnZXRTb3VuZCIsImdldENhdGVnb3J5IiwiZ2V0QWxlcnQiLCJnZXRDb250ZW50QXZhaWxhYmxlIiwiZ2V0QmFkZ2VDb3VudCIsImdldERhdGEiLCJnZXRUaHJlYWRJRCJdLCJtYXBwaW5ncyI6IkFBQTtBQ3NHO0VDdUI7R0RNO0VFTztHRk07RUdPO0dITTtFSU87R0pNO0VLUTtHTFE7RU1PO0dOTTtFT087R1BNO0VRTztHUk07RVNRO0dUTTtFVU87R1ZNO0VXUTtRQ2U7U0RFO1FDSztTREU7UUNLO1NERTtRQ0s7U0RFO0dYSTtFYVE7R2JjO0VjUztHZDhCO0VlUTtHZk07RWdCUTtHaEJPO0VpQlE7TUNNO09ERTtHakJFO0VtQk07R25CUztFb0JRO3VDQ1c7T0RZO0dwQlM7RXNCUztHdEJrQjtFdUJLO0d2Qkc7RXdCUTtHeEJFO0V5Qk87R3pCRTtFMEJRO0cxQkU7RTJCTztHM0JFO0U0Qk87RzVCRTtFNkJPO0c3QkU7RThCTztHOUJFO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNoYXJlIiwic2hhcmUiLCJOYXRpdmVTaGFyZU1vZHVsZS5zaGFyZS50aGVuJGFyZ3VtZW50XzAiLCJQcm9taXNlJGFyZ3VtZW50XzAiLCJOYXRpdmVBY3Rpb25TaGVldE1hbmFnZXIuc2hvd1NoYXJlQWN0aW9uU2hlZXRXaXRoT3B0aW9ucyRhcmd1bWVudF8xIiwiTmF0aXZlQWN0aW9uU2hlZXRNYW5hZ2VyLnNob3dTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMkYXJndW1lbnRfMiJdLCJtYXBwaW5ncyI6IkFBQTtBQ3FDO0VDcUM7UUNrQztVREc7eUJFRztVQ3dCLHNCRDtVRUM7V0ZZO09GRTtHREk7Q0RZIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwic2hvdyIsInNob3dXaXRoR3Jhdml0eSIsInNob3dXaXRoR3Jhdml0eUFuZE9mZnNldCJdLCJtYXBwaW5ncyI6IkFBQTtRQ3FCO0dERTttQkVFO0dGTTs0QkdFO0dIUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVzZUFuaW1hdGVkVmFsdWUiXSwibWFwcGluZ3MiOiJBQUE7ZUNlO0NEUyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInN1YnNjcmliZSIsIjxhbm9ueW1vdXM+IiwidXNlQ29sb3JTY2hlbWUiXSwibWFwcGluZ3MiOiJBQUE7a0JDaUI7U0NFLHFDRDtDREM7ZUdFO0NIRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVzZVdpbmRvd0RpbWVuc2lvbnMiLCJ1c2VTdGF0ZSRhcmd1bWVudF8wIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJoYW5kbGVDaGFuZ2UiLCI8YW5vbnltb3VzPiJdLCJtYXBwaW5ncyI6IkFBQTtlQ2lCOytDQ0csOEJEO1lFQztJQ0M7S0RhO1dFTTtLRkU7R0ZDO0NERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInZpYnJhdGVCeVBhdHRlcm4iLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJ2aWJyYXRlU2NoZWR1bGVyIiwidmlicmF0ZSIsImNhbmNlbCJdLCJtYXBwaW5ncyI6IkFBQTtBQ3lCO2FDYyxpREQ7Q0RDO0FHRTtJRG9CLDBEQztDSEc7V0lRO0dKd0I7VUtNO0dMTSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlllbGxvd0JveCIsIlllbGxvd0JveC5pZ25vcmVXYXJuaW5ncyIsIlllbGxvd0JveC5pbnN0YWxsIiwiWWVsbG93Qm94LnVuaW5zdGFsbCIsIlllbGxvd0JveCNyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7Y0NxQjtJQ0M7S0RNO0lFRTtLRks7SUdFO0tISztJSUU7S0pFO0dEQztjQ0U7SUNDO0tERTtJRUU7S0ZFO0lHRTtLSEU7SUlFO0tKRTtHREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJEeW5hbWljQ29sb3JJT1MiXSwibWFwcGluZ3MiOiJBQUE7K0JDcUI7Q0RPIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UVGVzdERldGFpbHMiLCJCdXR0b24ucHJvcHMub25QcmVzcyJdLCJtYXBwaW5ncyI6IkFBQTtBQ2M7cUJDbUQsOEJEO0NEUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJOVGVzdGVyQmxvY2siXSwibWFwcGluZ3MiOiJBQUE7c0JDb0I7Q0Q4QiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJOVGVzdGVyRXhhbXBsZUZpbHRlciIsInJlbmRlciIsImZpbHRlciIsInByb3BzLnNlY3Rpb25zLm1hcCRhcmd1bWVudF8wIiwiZmlsdGVyZWRTZWN0aW9ucy5maWx0ZXIkYXJndW1lbnRfMCIsIl9yZW5kZXJGaWx0ZXJlZFNlY3Rpb25zIiwiX3JlbmRlclRleHRJbnB1dCIsIlJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyLnByb3BzLmNoaWxkcmVuIiwiVGV4dElucHV0LnByb3BzLm9uQ2hhbmdlVGV4dCIsInNldFN0YXRlJGFyZ3VtZW50XzAiLCJSTlRlc3Rlckxpc3RGaWx0ZXJzLnByb3BzLm9uRmlsdGVyQnV0dG9uUHJlc3MiXSwibWFwcGluZ3MiOiJBQUE7QUNzQztFQ0c7bUJDYztLRE07bURFRTtNRkc7UUdJLDhDSDtHRFU7RUtFO0dMa0I7RU1FO1NDTTtnQ0NxQjtrQ0NDLHNCRDttQkRDO3VDR2tCOzBESEM7U0RNO0dORztDREMifV0sbnVsbCxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJOVGVzdGVyTGlzdEZpbHRlcnMiLCJjb25zdHJ1Y3RvciIsImZpbHRlclByZXNzZWQiLCJyZW5kZXIiLCJmaWx0ZXJzLm1hcCRhcmd1bWVudF8wIiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzIl0sIm1hcHBpbmdzIjoiQUFBO0FDc0I7RUNJO0dESzt1QkVFO0dGTztFR0U7cUJDRzt1QkNhLHFDRDtTRFk7R0hHO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNuYXBzaG90Vmlld0lPUyIsIm9uRGVmYXVsdEFjdGlvbiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ3FDO3lEQ0M7R0RJO0VFRTtHRlk7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UZXN0ZXJBcHAiLCJSZWFjdC51c2VNZW1vJGFyZ3VtZW50XzAiLCJoYW5kbGVCYWNrUHJlc3MiLCJSZWFjdC51c2VFZmZlY3QkYXJndW1lbnRfMCIsImhhbmRsZUhhcmR3YXJlQmFja1ByZXNzIiwiPGFub255bW91cz4iLCJoYW5kbGVNb2R1bGVDYXJkUHJlc3MiLCJoYW5kbGVNb2R1bGVFeGFtcGxlQ2FyZFByZXNzIiwiaGFuZGxlTmF2QmFyUHJlc3MiLCJoYW5kbGVPcGVuVXJsUmVxdWVzdCIsImZpbHRlciRhcmd1bWVudF8wIiwiZXhhbXBsZU1vZHVsZS5leGFtcGxlcy5maWx0ZXIkYXJndW1lbnRfMCIsImFjdGl2ZU1vZHVsZS5leGFtcGxlcy5maW5kJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7b0JDc0M7SUN1QiwrREQ7NENFSTtHRkk7a0JHRztvQ0NDO0tETTtXRUk7S0ZLO0dIQztJTUc7S05LO0lPSztLUEs7SVFLO0tSSztJU007ZUN1QixvQ0Q7VUVtQiwwQkY7S1Q4QjtrQkdHO1dFRSwyQkY7R0hDO29DWVksc0NaO0NEOEMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJFeGFtcGxlTW9kdWxlUm93IiwiUk5UUHJlc3NhYmxlUm93LnByb3BzLm9uUHJlc3MiLCJyZW5kZXJTZWN0aW9uSGVhZGVyIiwiUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXIucHJvcHMuY2hpbGRyZW4iLCJSZWFjdC5tZW1vJGFyZ3VtZW50XzAiLCJmaWx0ZXIiLCJyZW5kZXJMaXN0SXRlbSIsIlJOVGVzdGVyRXhhbXBsZUZpbHRlci5wcm9wcy5yZW5kZXIiLCJTZWN0aW9uTGlzdC5wcm9wcy5MaXN0Rm9vdGVyQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiQUFBO3lCQ21CO2VDeUM7VURLO0NESTs0QkdFO0tDRTtLRGE7Q0hFO0VLRzttQkNDO2tEREU7MkJFSTtLRlU7a0JHVTttQ0NVLG1DRDtXSEU7R0xJIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTmF2YmFyQnV0dG9uIiwiQ29tcG9uZW50VGFiIiwiTmF2YmFyQnV0dG9uLnByb3BzLmhhbmRsZVByZXNzIiwiQVBJVGFiIiwiUk5UZXN0ZXJOYXZiYXIiXSwibWFwcGluZ3MiOiJBQUE7cUJDa0I7Q0QwQjtxQkVFO2lCQ1ksK0NEO0NGTztlSUU7aUJEWSx5Q0M7Q0pPO3VCS1E7Q0wwQiJ9XSxudWxsLG51bGwsbnVsbCxudWxsLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSGVhZGVySU9TIiwiSGVhZGVyQW5kcm9pZCIsIlJOVFRpdGxlQmFyIl0sIm1hcHBpbmdzIjoiQUFBO2tCQ3NCO0NEc0M7c0JFRTtDRnFCO2VHRTtDSDBCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UZXN0ZXJEb2N1bWVudGF0aW9uVVJMIiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzIl0sIm1hcHBpbmdzIjoiQUFBO2lDQ2tCO2FDRyx3Q0Q7Q0RNIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwib3BlblVSTEluQnJvd3NlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2M7Q0RNIn1dLG51bGwsW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBUElzLmNvbmNhdC5mb3JFYWNoJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7Z0NDcVU7Q0RHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVG9nZ2xlQW5pbWF0aW5nQWN0aXZpdHlJbmRpY2F0b3IiLCJzZXRUb2dnbGVUaW1lb3V0Iiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwic2V0QW5pbWF0aW5nJGFyZ3VtZW50XzAiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTttRENLOytCQ0M7bUJDQyw2QkQ7S0RFO0dEQztZSUU7V0NHO0tERTtHSkM7Q0RTO0lPNEI7S1BTO0lPSTtLUE87SU9JO0tQUztJT0k7S1BRO0lPSTtLUFM7SU9JO0tQRTtJT0k7S1BPO0lPSztLUEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJvbkJ1dHRvblByZXNzIiwicmVuZGVyIiwiQnV0dG9uLnByb3BzLm9uUHJlc3MiLCJSTlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lci5wcm9wcy5jaGlsZHJlbiJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dCO0NERTtZRVk7bUJDRyxnQ0Q7S0ZNO1lFTztXRUc7eUJERyxnQ0M7V0ZPO0tGRztZRU87V0VHOzJCREksZ0NDOzJCRE8sZ0NDO1dGUTtLRkc7WUVJO1dFRzsyQkRJLGdDQzsyQkRPLDRCQzsyQkRPLGdDQztXRlE7S0ZHO1lFTTtXRUc7eUJESSxnQ0M7V0ZPO0tGRztZRU07V0VHO3lCREcsZ0NDO1dGTztLRkc7WUVNO1dFRzt5QkRHLGdDQztXRk87S0ZHO1lFTztXRUc7eUJESSxnQ0M7V0ZPO0tGRyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkZsYXRMaXN0RXhhbXBsZSIsIkZsYXRMaXN0RXhhbXBsZSNfb25DaGFuZ2VGaWx0ZXJUZXh0IiwiRmxhdExpc3RFeGFtcGxlI19vbkNoYW5nZVNjcm9sbFRvSW5kZXgiLCJGbGF0TGlzdEV4YW1wbGUjY29tcG9uZW50RGlkVXBkYXRlIiwiRmxhdExpc3RFeGFtcGxlI19zZXRCb29sZWFuVmFsdWUiLCI8YW5vbnltb3VzPiIsIkZsYXRMaXN0RXhhbXBsZSNfc2V0SXNSVEwiLCJGbGF0TGlzdEV4YW1wbGUjcmVuZGVyIiwiZmlsdGVyIiwiVGV4dElucHV0LnByb3BzLm9uQ2hhbmdlIiwiRmxhdExpc3RFeGFtcGxlI19jYXB0dXJlUmVmIiwiRmxhdExpc3RFeGFtcGxlI19nZXRJdGVtTGF5b3V0IiwiRmxhdExpc3RFeGFtcGxlI19vblN0YXJ0UmVhY2hlZCIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsInNldFN0YXRlJGFyZ3VtZW50XzAiLCJGbGF0TGlzdEV4YW1wbGUjX29uRW5kUmVhY2hlZCIsIkZsYXRMaXN0RXhhbXBsZSNfb25QcmVzc0NhbGxiYWNrIiwid2FybmluZyIsIkZsYXRMaXN0RXhhbXBsZSNfb25SZWZyZXNoIiwiRmxhdExpc3RFeGFtcGxlI19yZW5kZXJJdGVtQ29tcG9uZW50IiwicmVuZGVyUHJvcCIsIkZsYXRMaXN0RXhhbXBsZSNfb25TY3JvbGxUb0luZGV4RmFpbGVkIiwiRmxhdExpc3RFeGFtcGxlI19vblZpZXdhYmxlSXRlbXNDaGFuZ2VkIiwiaW5mby5jaGFuZ2VkLm1hcCRhcmd1bWVudF8wIiwiRmxhdExpc3RFeGFtcGxlI19wcmVzc0l0ZW0iLCJzdGF0ZS5kYXRhLmZpbmRJbmRleCRhcmd1bWVudF8wIiwiZGVmYXVsdC5yZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNtRjt3QkN5QjtHREU7MkJFRTtHRkU7RUdlO0dIRTtnRElFLE9DO2lDTEM7K0JNRTtHTlM7RU9FO21CQ0U7aUVEQzs4QkVzRjt3QkZHO0dQNkQ7Z0JVQztHVlM7bUJXRTtHWEU7b0JZQztlQ007b0JDQztRREk7S0RDO0daQztrQmVDO2VGTTtvQkNDO1FESTtLRUM7R2ZDO3FCZ0JFO29CQ0UscUNEO0doQkc7ZWtCRSxxRGxCO3lCbUJFO3VCQ0M7S0RZO0duQk87MkJxQkU7R3JCVTs0QnNCSTt5QkNlLDBCRDtHdEJHO2V3QkU7NENDRSx3QkQ7a0JWRTtNVU87R3hCQztDREc7VTJCeUIseUIzQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJOVGVzdGVyUGFnZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3VCO0NEd0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSTlRlc3RlclRpdGxlIiwicmVuZGVyIiwiUk5UZXN0ZXJUaGVtZUNvbnRleHQuQ29uc3VtZXIucHJvcHMuY2hpbGRyZW4iXSwibWFwcGluZ3MiOiJBQUE7QUNlO0VDQztTQ0c7U0RlO0dERztDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZW5JdGVtRGF0YSIsImdlbk5ld2VySXRlbXMiLCJnZW5PbGRlckl0ZW1zIiwiSXRlbUNvbXBvbmVudCIsIkl0ZW1Db21wb25lbnQjX29uUHJlc3MiLCJJdGVtQ29tcG9uZW50I3JlbmRlciIsInJlbmRlclN0YWNrZWRJdGVtIiwiRm9vdGVyQ29tcG9uZW50IiwiRm9vdGVyQ29tcG9uZW50I3JlbmRlciIsIkhlYWRlckNvbXBvbmVudCIsIkhlYWRlckNvbXBvbmVudCNyZW5kZXIiLCJMaXN0RW1wdHlDb21wb25lbnQiLCJMaXN0RW1wdHlDb21wb25lbnQjcmVuZGVyIiwiU2VwYXJhdG9yQ29tcG9uZW50IiwiU2VwYXJhdG9yQ29tcG9uZW50I3JlbmRlciIsIlJlYWN0Lm1lbW8kYXJndW1lbnRfMCIsIkl0ZW1TZXBhcmF0b3JDb21wb25lbnQiLCJJdGVtU2VwYXJhdG9yQ29tcG9uZW50I3JlbmRlciIsIlNwaW5kaWNhdG9yIiwiU3BpbmRpY2F0b3IjcmVuZGVyIiwiaGFzaENvZGUiLCJnZXRJdGVtTGF5b3V0IiwicHJlc3NJdGVtIiwicmVuZGVyU21hbGxTd2l0Y2hPcHRpb24iLCJQbGFpbklucHV0Il0sIm1hcHBpbmdzIjoiQUFBO0FDbUM7Q0RRO0FFRTtDRk07QUdFO0NITTtBSUs7YUNVO0dERTtFRUM7R0YwQjtDSkM7MEJPRTtDUFc7QVFFO0VDQztHRFM7Q1JDO0FVRTtFQ0M7R0RTO0NWQztBWUU7RUNDO0dETTtDWkM7QWNFO0VDQztHREU7Q2RDOzZEZ0JFO0NoQkk7QWlCRTtFQ0M7R0RRO0NqQkM7QW1CRTtFQ0M7R0RtQjtDbkJDO0FxQnlCO0NyQk07QXNCSztDdEJTO0F1QkU7Q3ZCRztBd0JFO0N4QmtCO0F5QkU7Q3pCVyJ9XSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkZsYXRMaXN0X2NvbnRlbnRJbnNldCIsIm9uVGVzdCIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09DZ0I7aUJDWTtHRFc7Q0RtQjtVR3lCLCtCSCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkl0ZW0iLCJQcmVzc2FibGUucHJvcHMub25QcmVzc0luIiwiUHJlc3NhYmxlLnByb3BzLm9uUHJlc3MiLCJQcmVzc2FibGUucHJvcHMub25QcmVzc091dCIsIlByZXNzYWJsZS5wcm9wcy5zdHlsZSIsIlJlYWN0LmZvcndhcmRSZWYkYXJndW1lbnRfMCIsIkZsYXRMaXN0LnByb3BzLmtleUV4dHJhY3RvciJdLCJtYXBwaW5ncyI6IkFBQTthQ29DO2lCQ0c7T0RFO2VFQztPRkc7a0JHQztPSEU7YUlDO09KSztDREs7RU1ZO3dCQzhCLDZCRDtHTk8ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJGbGF0TGlzdF9pbnZlcnRlZCIsIm9uVGVzdCIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09DZTtpQkNNO0dESztDRFU7VUdNLDJCSCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIk11bHRpQ29sdW1uRXhhbXBsZSIsIk11bHRpQ29sdW1uRXhhbXBsZSNfb25DaGFuZ2VGaWx0ZXJUZXh0Iiwic2V0U3RhdGUkYXJndW1lbnRfMCIsIk11bHRpQ29sdW1uRXhhbXBsZSNfb25DaGFuZ2VOdW1Db2x1bW5zIiwiTXVsdGlDb2x1bW5FeGFtcGxlI19zZXRCb29sZWFuVmFsdWUiLCI8YW5vbnltb3VzPiIsIk11bHRpQ29sdW1uRXhhbXBsZSNyZW5kZXIiLCJmaWx0ZXIiLCJGbGF0TGlzdC5wcm9wcy5vblJlZnJlc2giLCJNdWx0aUNvbHVtbkV4YW1wbGUjX2dldEl0ZW1MYXlvdXQiLCJNdWx0aUNvbHVtbkV4YW1wbGUjX3JlbmRlckl0ZW1Db21wb25lbnQiLCJNdWx0aUNvbHVtbkV4YW1wbGUjX29uVmlld2FibGVJdGVtc0NoYW5nZWQiLCJpbmZvLmNoYW5nZWQubWFwJGFyZ3VtZW50XzAiLCJNdWx0aUNvbHVtbkV4YW1wbGUjX3ByZXNzSXRlbSIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZ0M7d0JDdUI7a0JDQyxvQkQ7R0RDO3dCR0M7a0JEQyx3Q0M7R0hDO2dESUUsT0M7aUNMQztFTUU7bUJDRTtpRURDO3FCRWlEO29FRkM7R05TO0VTQztHVFk7eUJVQztHVlU7NEJXRTt5QkNlLDBCRDtHWEc7ZWFFO2tCWEc7TVdPO0diQztDREM7VWUyQiw0QmYifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZWR1Y2VyIiwic3RhdGUucmVuZGVyZWRJdGVtcy5maWx0ZXIkYXJndW1lbnRfMCIsInN0YXRlLnZpZXdhYmxlSXRlbXMuZmlsdGVyJGFyZ3VtZW50XzAiLCJOZXN0ZWRMaXN0RXhhbXBsZSIsIm9uVmlld2FibGVJdGVtc0NoYW5nZWQiLCJvdXRlckl0ZW1zLm1hcCRhcmd1bWVudF8wIiwib3V0ZXJJdGVtcy5tYXAuZmlsdGVyJGFyZ3VtZW50XzAiLCJvdXRlckl0ZW1zLm1hcC5maWx0ZXIubWFwJGFyZ3VtZW50XzAiLCJpbm5lci52aWV3YWJsZUl0ZW1zLnNvcnQkYXJndW1lbnRfMCIsImlubmVyLnJlbmRlcmVkSXRlbXMuc29ydCRhcmd1bWVudF8wIiwiRmxhdExpc3QucHJvcHMucmVuZGVySXRlbSIsIk91dGVySXRlbVJlbmRlcmVyIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsIml0ZW1zLm1hcCRhcmd1bWVudF8wIiwiSW5uZXJJdGVtUmVuZGVyZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNnRDtnRENnQixzQkQ7Z0RFSyxzQkY7Q0RLO0FJRTtJQ0s7S0RhO2VFUyx3QkY7a0JHQyxzQ0g7ZUlDLCtCSjtlRU0sd0JGO2tCR0Msc0NIO2VJQywrQko7a0NLSyxlTDtrQ01JLGVOO29CT0s7U1BPO0NKUTtBWUU7WUNZO1dDTTtLREs7R0RDO0lQRztLT2E7OEJHaUIsaUNIOzBCREM7ZUNLOzhCR1MsZ0RIOzBCREM7ZUNLO2NHZ0Isb0RIO3dCREU7YUNFO0NaVTtBZ0JFO1lIUTtXQ007S0RLO0dHQztDaEJTIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRmxhdExpc3Rfb25FbmRSZWFjaGVkIiwiZXhhbXBsZVByb3BzLm9uRW5kUmVhY2hlZCIsIm9uVGVzdCIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09DZ0I7a0JDRzsrQkRDO2lCRUs7R0ZLO0NEVTtVSU87R0pFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRmxhdExpc3Rfb25TdGFydFJlYWNoZWQiLCJleGFtcGxlUHJvcHMub25TdGFydFJlYWNoZWQiLCJleGFtcGxlUHJvcHMuZ2V0SXRlbUxheW91dCIsIm9uVGVzdCIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09DaUI7b0JDRztpQ0RDO21CRUc7TUZJO2lCR0k7R0hFO0NEVTtVS087R0xFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRmxhdExpc3Rfb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCIsIm9uVmlld2FibGVJdGVtc0NoYW5nZWQiLCJpbmZvLnZpZXdhYmxlSXRlbXMuZmlsdGVyJGFyZ3VtZW50XzAiLCJpbmZvLnZpZXdhYmxlSXRlbXMuZmlsdGVyLm1hcCRhcmd1bWVudF8wIiwiPGFub255bW91cz4iLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtPQzRCO0lDUztrQkNHLDRERDtlRUMsMkJGO09ERTtRSVk7U0pFO0NEWTtVTWE7R05FIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSXRlbSIsIkZsYXRMaXN0X3N0aWNreUhlYWRlcnMiLCJGbGF0TGlzdC5wcm9wcy5rZXlFeHRyYWN0b3IiLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTthQ2dDO0NETTtPRUU7b0JDSSw2QkQ7Q0ZNO1VJb0IsZ0NKIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiU2VwYXJhdG9yIiwiPGFub255bW91cz4iLCJGbGF0TGlzdF93aXRoU2VwYXJhdG9ycyIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0VDa0I7RUNDO0dGcUI7T0dFO0NITztVSWUsaUNKIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQmxvYkltYWdlIiwiQmxvYkltYWdlI1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQiLCI8YW5vbnltb3VzPiIsIkJsb2JJbWFnZSNyZW5kZXIiLCJCbG9iSW1hZ2VFeGFtcGxlIiwiQmxvYkltYWdlRXhhbXBsZSNyZW5kZXIiLCJwcm9wcy51cmxzLm1hcCRhcmd1bWVudF8wIiwiTmV0d29ya0ltYWdlQ2FsbGJhY2tFeGFtcGxlIiwiTmV0d29ya0ltYWdlQ2FsbGJhY2tFeGFtcGxlI1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQiLCJOZXR3b3JrSW1hZ2VDYWxsYmFja0V4YW1wbGUjX2xvYWRFdmVudEZpcmVkIiwic2V0U3RhdGUkYXJndW1lbnRfMCIsIk5ldHdvcmtJbWFnZUNhbGxiYWNrRXhhbXBsZSN1cGRhdGVMb2FkaW5nSW1hZ2VIYXNoIiwiTmV0d29ya0ltYWdlQ2FsbGJhY2tFeGFtcGxlI3JlbmRlciIsIkltYWdlLnByb3BzLm9uTG9hZFN0YXJ0IiwiSW1hZ2UucHJvcHMub25Qcm9ncmVzcyIsIkltYWdlLnByb3BzLm9uTG9hZCIsIkltYWdlLnByb3BzLm9uTG9hZEVuZCIsInNldFN0YXRlJGFyZ3VtZW50XzEiLCJwcmVmZXRjaFRhc2sudGhlbiRhcmd1bWVudF8wIiwiSW1hZ2UucXVlcnlDYWNoZS50aGVuJGFyZ3VtZW50XzAiLCJwcmVmZXRjaFRhc2sudGhlbiRhcmd1bWVudF8xIiwiTmV0d29ya0ltYWdlRXhhbXBsZSIsIk5ldHdvcmtJbWFnZUV4YW1wbGUjcmVuZGVyIiwiSW1hZ2UucHJvcHMub25FcnJvciIsInN0YXRlLnByb2dyZXNzLm1hcCRhcmd1bWVudF8wIiwiSW1hZ2VTaXplRXhhbXBsZSIsIkltYWdlU2l6ZUV4YW1wbGUjY29tcG9uZW50RGlkTW91bnQiLCJJbWFnZS5nZXRTaXplJGFyZ3VtZW50XzEiLCJJbWFnZVNpemVFeGFtcGxlI3JlbmRlciIsIk11bHRpcGxlU291cmNlc0V4YW1wbGUiLCJNdWx0aXBsZVNvdXJjZXNFeGFtcGxlI2luY3JlYXNlSW1hZ2VTaXplIiwiTXVsdGlwbGVTb3VyY2VzRXhhbXBsZSNkZWNyZWFzZUltYWdlU2l6ZSIsIk11bHRpcGxlU291cmNlc0V4YW1wbGUjcmVuZGVyIiwiTG9hZGluZ0luZGljYXRvclNvdXJjZUV4YW1wbGUiLCJMb2FkaW5nSW5kaWNhdG9yU291cmNlRXhhbXBsZSNyZWxvYWRJbWFnZSIsIkxvYWRpbmdJbmRpY2F0b3JTb3VyY2VFeGFtcGxlI3JlbmRlciIsIk9uTGF5b3V0RXhhbXBsZSIsIk9uTGF5b3V0RXhhbXBsZSNvbkxheW91dEhhbmRsZXIiLCJPbkxheW91dEV4YW1wbGUjaW5jcmVhc2VJbWFnZVNpemUiLCJPbkxheW91dEV4YW1wbGUjZGVjcmVhc2VJbWFnZVNpemUiLCJPbkxheW91dEV4YW1wbGUjcmVuZGVyIiwiT25QYXJ0aWFsTG9hZEV4YW1wbGUiLCJPblBhcnRpYWxMb2FkRXhhbXBsZSNwYXJ0aWFsTG9hZEhhbmRsZXIiLCJPblBhcnRpYWxMb2FkRXhhbXBsZSNyZW5kZXIiLCJyZW5kZXIiLCJtYXAkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQzBDO0VDSztLQ0U7S0RLO0dEQztFR0U7R0hNO0NEQztBS1E7RUNJOzZCQ0c7U0RFO0dERztDTEM7QVFjO0VDVztHREU7b0JFRTtrQkNDO01ERTtHRkM7MkJJRTtHSkU7RUtFO3VCQ087Z0ZEQztzQkVFO1dGTTtrQkdDO1dIUztxQklDO3VEQ0U7Z0JDRTs4RENLO21CRGE7aUJEQztnQkdDO2lCSEk7YURFO1dKQzt5QkNNO2VERztvQkdFO2FIYzt1QklDO2VKRztHTFM7Q1JDO0FzQlk7RUNVO3VCVFEsbUNTO21CQ0M7dUVEQztzQlJFOzBCSkU7Y0lLO1dRQztrQlBDLGtETzttQ0VHLDBCRjtHREk7Q3RCQztBMEJXO0VDUzt5Q0NDO0tERTtHREM7RUdFO0dIVTtDMUJDO0E4QlM7c0JDUztHRFE7c0JFRTtHRlE7RUdFO0dIaUM7QzlCQztBa0NRO2dCQ1E7R0RJO0VFTTtHRnFCO0NsQ0M7QXFDVTtvQkNVO0dETztzQkVFO0dGUTtzQkdFO0dIUTtFSUU7R0p5QztDckNDO0EwQ1E7dUJDUTtHREk7RUVFO0dGZTtDMUNDO1k2Q3lOO0s3Q0U7WTZDTTtLN0NFO1k2Q087SzdDVztZNkNNO0s3Q1M7WTZDTztLN0NxQjtZNkNJO0s3Q1M7WTZDSTtLN0NRO1k2Q0k7SzdDUTtZNkNLO0s3Q1k7WTZDUztLN0NxQjtZNkNLO0s3Q1M7WTZDSTtLN0NpQztZNkNJO0s3Q2tCO1k2Q0k7SzdDVztZNkNJO0s3Q1U7WTZDSTtLN0NRO1k2Q007SzdDa0o7WTZDTTt1Q0NHO1dEcUM7SzdDRztZNkNNO3VDQ0c7V0RpRDtLN0NHO1k2Q0k7SzdDTztZNkNLO0s3Q0k7WTZDVTtLN0NFO1k2Q0s7SzdDRTtZNkNPO0s3Q0U7WTZDTTtLN0NFO1k2Q0s7SzdDdUI7WTZDSztLN0NXO1k2Q007SzdDRTtZNkNNO0s3Q1M7WTZDTTtLN0NRO1k2Q007SzdDTztZNkNPO0s3Q0U7WTZDTTtLN0NFO1k2Q007SzdDRSJ9XSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkltYWdlQ2FwSW5zZXRzRXhhbXBsZSIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2tCO0VDQztHRCtCO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm5hdGl2ZUltYWdlU291cmNlIl0sIm1hcHBpbmdzIjoiQUFBO0FDeUM7Q0RvQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBhblJlc3BvbmRlci5jcmVhdGUkYXJndW1lbnRfMC5vbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXIiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7K0JDc0I7R0RFO1lFWTtLRnFCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTWVzc2FnZSIsIk1lc3NhZ2UjcmVuZGVyIiwiVGV4dElucHV0QmFyIiwiVGV4dElucHV0QmFyI3JlbmRlciIsIlRleHRJbnB1dC5wcm9wcy5vbkNoYW5nZVRleHQiLCJCdXR0b24ucHJvcHMub25QcmVzcyIsIklucHV0QWNjZXNzb3J5Vmlld0V4YW1wbGUiLCJyZW5kZXIiLCJBcnJheS5maWxsLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDeUI7RUNDO0dETTtDREM7QUdJO0VDRzt3QkNLO1dERTttQkVLO1dGRTtHREs7Q0hDO0FPSTtFQ0M7aUJDTTthREU7R0RPO0NQQztZUW1DO0tSRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIm9uQnV0dG9uUHJlc3MiLCJUZXh0SW5wdXRGb3JtIiwiQ2xvc2VCdXR0b24iLCJQcmVzc2FibGUucHJvcHMub25QcmVzcyIsIktleWJvYXJkQXZvaWRpbmdWaWV3QmVoYXZpb3VyIiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzIiwiS2V5Ym9hcmRBdm9pZGluZ0Rpc2FibGVkIiwiS2V5Ym9hcmRBdm9pZGluZ1ZlcnRpY2FsT2Zmc2V0IiwiS2V5Ym9hcmRBdm9pZGluZ0NvbnRlbnRDb250YWluZXJTdHlsZSIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtzQkMyQjtDREU7c0JFRTtDRmM7b0JHRTtpQkNZLCtCRDtDSE07c0NLRTt1QkNhLDRCRDt1QkNVLDZCRDt1QkNVLDJCRDs0QkRrQix3QkM7Q0xRO2lDT0U7NEJIYyx3Qkc7Q1BNO3VDUUU7NEJKYyx3Qkk7Q1JNOzhDU0U7NEJMZSx3Qks7Q1RNO0lVcUQ7S1ZFO0lVTztLVkU7SVVJO0tWRTtJVUk7S1ZFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTGF5b3V0RXZlbnRFeGFtcGxlIiwiTGF5b3V0RXZlbnRFeGFtcGxlI2FuaW1hdGVWaWV3TGF5b3V0IiwiTGF5b3V0QW5pbWF0aW9uLmNvbmZpZ3VyZU5leHQkYXJndW1lbnRfMSIsIkxheW91dEV2ZW50RXhhbXBsZSNhZGRXcmFwVGV4dCIsIkxheW91dEV2ZW50RXhhbXBsZSNjaGFuZ2VDb250YWluZXIiLCJMYXlvdXRFdmVudEV4YW1wbGUjb25WaWV3TGF5b3V0IiwiTGF5b3V0RXZlbnRFeGFtcGxlI29uVGV4dExheW91dCIsIkxheW91dEV2ZW50RXhhbXBsZSNvbkltYWdlTGF5b3V0IiwiTGF5b3V0RXZlbnRFeGFtcGxlI3JlbmRlciIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ3FDO3NCQ087a0VDQztLREc7R0RNO2dCR0U7R0hLO29CSUU7R0pFO2lCS0U7R0xHO2lCTUU7R05HO2tCT0U7R1BHO0VRRTtHUjZDO0NEQztZVW1DO0tWRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIk1vZGFsT25TaG93T25EaXNtaXNzIiwiTW9kYWwucHJvcHMub25TaG93IiwiTW9kYWwucHJvcHMub25EaXNtaXNzIiwiTW9kYWwucHJvcHMub25SZXF1ZXN0Q2xvc2UiLCJQcmVzc2FibGUucHJvcHMub25QcmVzcyIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTtrQkNhO1dERTtxQkVDO1dGRTswQkdDO1dIRTt5QklXLDRCSjt5QklPLGtDSjtpQklpQjtTSkc7Q0RPO1VNdUQsMENOIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTW9kYWxQcmVzZW50YXRpb24iLCJvbkRpc21pc3MiLCJvblNob3ciLCJvblJlcXVlc3RDbG9zZSIsIm9uT3JpZW50YXRpb25DaGFuZ2UiLCJTd2l0Y2gucHJvcHMub25WYWx1ZUNoYW5nZSIsInNldFByb3BzJGFyZ3VtZW50XzAiLCJwcmVzZW50YXRpb25TdHlsZXMubWFwJGFyZ3VtZW50XzAiLCJSTlRPcHRpb24ucHJvcHMub25QcmVzcyIsInN1cHBvcnRlZE9yaWVudGF0aW9ucy5tYXAkYXJndW1lbnRfMCIsInByZXYuc3VwcG9ydGVkT3JpZW50YXRpb25zLmZpbHRlciRhcmd1bWVudF8wIiwiUk5UZXN0ZXJCdXR0b24ucHJvcHMub25QcmVzcyIsImFuaW1hdGlvblR5cGVzLm1hcCRhcmd1bWVudF8wIiwiZGVmYXVsdC5yZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNvQztzQ0NDO0dERTttQ0VFO0dGRTsyQ0dFO0dIRTs4QkkyQjt3REpDO3lCS1E7cUJDQyxrREQsQ0w7eUJLUTtxQkNDO2NERyxDTDtrQ09PO3VCQ087eUJGQztpQkVhLENEO1dQSTsyQktRO3VCQ0MseUNELENMO3FDU2M7dUJETzt5QkZDO3dCSUssc0JKO2lCRVcsQ0M7V1RJO3FCUVc7dUJGQztnQkVHLENSO3FCUVM7dUJGQztnQkVHLENSO2lCV1ksZUwsa0NLLENYO3VCV21CLGVMLG1DSyxDWDs4QllVO3VCSkssZUYsd0NFLENJO1daRztDRE07VWNxRCx1Q2QifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSTlRPcHRpb24iLCJQcmVzc2FibGUucHJvcHMub25QcmVzc0luIiwiUHJlc3NhYmxlLnByb3BzLm9uUHJlc3NPdXQiXSwibWFwcGluZ3MiOiJBQUE7ZUNnQztpQkNjLHNCRDtrQkVDLHVCRjtDRG1CIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UZXN0ZXJCdXR0b24iLCJyZW5kZXIiLCJQcmVzc2FibGUucHJvcHMuc3R5bGUiXSwibWFwcGluZ3MiOiJBQUE7QUN3QjtFQ0M7ZUNLLHlERDtHREk7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyIiwiT2JqZWN0LmtleXMubWFwJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7SUM0QjtLRE07SUNNO0tERTtJQ0s7bUNDRztXREs7S0RHO0lDTTtLREU7SUNNO0tERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBsYXRmb3JtLnNlbGVjdCRhcmd1bWVudF8wLmlvcyIsIlBsYXRmb3JtLnNlbGVjdCRhcmd1bWVudF8wLl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBO09Dd0I7R0RNO1dFQztHRk0ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJIZWFkZXIiXSwibWFwcGluZ3MiOiJBQUE7ZUNvQjtDRDRCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSGVybWVzQmFkZ2UiXSwibWFwcGluZ3MiOiJBQUE7b0JDbUI7Q0RrQiJ9XSxudWxsLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTGlua0xpc3QiLCJsaW5rcy5tYXAkYXJndW1lbnRfMCIsIlRvdWNoYWJsZU9wYWNpdHkucHJvcHMub25QcmVzcyJdLCJtYXBwaW5ncyI6IkFBQTtpQkNtRjtpQkNJO3FCQ1ksNEJEO09EYztDREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQbGF0Zm9ybS5zZWxlY3QkYXJndW1lbnRfMC5pb3MiLCJQbGF0Zm9ybS5zZWxlY3QkYXJndW1lbnRfMC5fZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQTtPQ3dCO0dESztXRUM7R0ZLIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Iiwib25QcmVzc2FibGVQcmVzcyIsIkNvbnRlbnRQcmVzcyIsIlByZXNzYWJsZS5wcm9wcy5vblByZXNzIiwic2V0VGltZXNQcmVzc2VkJGFyZ3VtZW50XzAiLCJQcmVzc2FibGUucHJvcHMuY2hpbGRyZW4iLCJUZXh0T25QcmVzc0JveCIsIlRleHQucHJvcHMub25QcmVzcyIsIlByZXNzYWJsZUFyaWFMYWJlbCIsIlByZXNzYWJsZUZlZWRiYWNrRXZlbnRzIiwiYXBwZW5kRXZlbnQiLCJzZXRFdmVudExvZyRhcmd1bWVudF8wIiwiUHJlc3NhYmxlLnByb3BzLm9uUHJlc3NJbiIsIlByZXNzYWJsZS5wcm9wcy5vblByZXNzT3V0IiwiUHJlc3NhYmxlLnByb3BzLm9uTG9uZ1ByZXNzIiwiZXZlbnRMb2cubWFwJGFyZ3VtZW50XzAiLCJQcmVzc2FibGVEZWxheUV2ZW50cyIsIkZvcmNlVG91Y2hFeGFtcGxlIiwiVmlldy5wcm9wcy5vblN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyIiwiVmlldy5wcm9wcy5vblJlc3BvbmRlck1vdmUiLCJWaWV3LnByb3BzLm9uUmVzcG9uZGVyUmVsZWFzZSIsIlByZXNzYWJsZUhpdFNsb3AiLCJQcmVzc2FibGVOYXRpdmVNZXRob2RzIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJQcmVzc2FibGVEaXNhYmxlZCIsIlByZXNzYWJsZS5wcm9wcy5zdHlsZSIsIlByZXNzYWJsZUhvdmVyU3R5bGUiLCJQcmVzc2FibGUucHJvcHMub25Ib3ZlckluIiwiUHJlc3NhYmxlLnByb3BzLm9uSG92ZXJPdXQiLCJyZW5kZXIiLCJleGFtcGxlcy5wdXNoJGFyZ3VtZW50XzAucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDeUI7Q0RFO0FFSzttQkNjOzRCQ0Msc0JEO1dEQztXR0M7V0hJO0NGUTtBTUU7aUJDZTswQkhDLGdCRztTREM7Q05RO0FRRTtpQkxRLGlDSztDUks7QVNDO0VDRztnQkNFO0tERTtHREM7bUJOVSwwQk07cUJHQyw0Qkg7c0JJQyw2Qko7dUJLQyw4Qkw7c0JNTztTTkU7Q1RJO0FnQkU7RU5HO0dNSzttQmJRLDBCYTtxQkpDLDRCSTtzQkhDLDZCRzt1QkZFLDRDRTtzQkRLO1NDRTtDaEJJO0FpQkU7cUNDZ0IsVUQ7MkJFRSxnREY7OEJHQyxvQkg7Q2pCTTtBcUJFO21CbEJjLHNCQyxjRCxDa0I7Q3JCWTtBc0JFO1lDSTtHREU7Q3RCa0I7QXdCRTtlQ1M7U0RJO0N4Qks7QTBCRTttQkNXLHNCRDtvQkVDLHVCRjtDMUJLO0k2QitFO0s3QkU7STZCSTttQkpJO2FJSztLN0JLO1k2Qk07SzdCRTtZNkJPO0s3Qm9CO1k2Qk87SzdCK0Q7WTZCSTtLN0JFO1k2Qk87SzdCRTtZNkJNO0s3QkU7WTZCUTtLN0JFO1k2Qk07SzdCRTtZNkJPO0s3QkU7WTZCTTtLN0JFO0k4Qk87SzlCRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJvdyIsIlJvdyNfb25DbGljayIsIlJvdyNyZW5kZXIiLCJSZWZyZXNoQ29udHJvbEV4YW1wbGUiLCJBcnJheS5mcm9tLm1hcCRhcmd1bWVudF8wIiwiX29uQ2xpY2siLCJyZW5kZXIiLCJzdGF0ZS5yb3dEYXRhLm1hcCRhcmd1bWVudF8wIiwiX29uUmVmcmVzaCIsInNldFRpbWVvdXQkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQ3NDO2FDQztHREU7RUVFO0dGVTtDREM7QUlFOzJDQ0k7TURHO2FFRztHRks7RUdFO3dDQ0M7S0RFO0dIa0I7ZUtFO2VDRTthTEc7VUtHO0tEUTtHTEM7Q0pDO1lPUztLUEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJTY3JvbGxWaWV3U2ltcGxlRXhhbXBsZSIsIm1ha2VJdGVtcyIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ3NCOzJEQ0M7R0RhO0VFRTtHRnFFO0NEQztZRytCO0tIRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNhZmVBcmVhVmlld0V4YW1wbGUiLCJfc2V0TW9kYWxWaXNpYmxlIiwicmVuZGVyIiwiTW9kYWwucHJvcHMub25SZXF1ZXN0Q2xvc2UiLCJJc0lQaG9uZVhFeGFtcGxlIiwiSXNJUGhvbmVYRXhhbXBsZSNyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUN1QjtxQkNVO0dERTtFRUU7MEJDSyxrQ0Q7R0ZvQjtDREM7QUtFO0VDQztHRGM7Q0xDO1lHOEIseUNIO1lHUyxzQ0gifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJFbmFibGVEaXNhYmxlTGlzdCIsIkVuYWJsZURpc2FibGVMaXN0I3JlbmRlciIsIkJ1dHRvbi5wcm9wcy5vblByZXNzIiwiQXBwZW5kaW5nTGlzdCIsIm1hcCRhcmd1bWVudF8wIiwiQXBwZW5kaW5nTGlzdCNyZW5kZXIiLCJzdGF0ZS5pdGVtcy5tYXAkYXJndW1lbnRfMCIsInNldFN0YXRlJGFyZ3VtZW50XzAiLCJDZW50ZXJDb250ZW50TGlzdCIsIkNvbnRlbnRPZmZzZXRMaXN0IiwiU2Nyb2xsVmlld1Njcm9sbFRvRXhhbXBsZSIsIlNjcm9sbFZpZXcucHJvcHMucmVmIiwiU2Nyb2xsVmlldy5wcm9wcy5vblNjcm9sbCIsIlNjcm9sbFZpZXcucHJvcHMub25TY3JvbGxUb1RvcCIsInJlbmRlciIsImV4YW1wbGVzLnB1c2gkYXJndW1lbnRfMC5yZW5kZXIiLCJBbmRyb2lkU2Nyb2xsQmFyT3B0aW9ucyIsIkhvcml6b250YWxTY3JvbGxWaWV3IiwiRW5kRmlsbENvbG9yRmFkaW5nRWRnZUxlbiIsIlNuYXBUb09wdGlvbnMiLCJzbmFwVG9BbGlnbm1lbnRNb2Rlcy5tYXAkYXJndW1lbnRfMCIsIlNjcm9sbFRvT3B0aW9ucyIsIlNjcm9sbEluZGljYXRvckV4YW1wbGUiLCJSZW1vdmVDbGlwcGVkU3Vidmlld3MiLCJSZWZyZXNoQ29udHJvbEV4YW1wbGUiLCJvblJlZnJlc2giLCJ3YWl0LnRoZW4kYXJndW1lbnRfMCIsIndhaXQiLCJQcm9taXNlJGFyZ3VtZW50XzAiLCJPblNjcm9sbE9wdGlvbnMiLCJTY3JvbGxWaWV3LnByb3BzLm9uU2Nyb2xsQmVnaW5EcmFnIiwiU2Nyb2xsVmlldy5wcm9wcy5vblNjcm9sbEVuZERyYWciLCJvdmVyU2Nyb2xsTW9kZU9wdGlvbnMubWFwJGFyZ3VtZW50XzAiLCJPbk1vbWVudHVtU2Nyb2xsIiwiU2Nyb2xsVmlldy5wcm9wcy5vbk1vbWVudHVtU2Nyb2xsQmVnaW4iLCJTY3JvbGxWaWV3LnByb3BzLm9uTW9tZW50dW1TY3JvbGxFbmQiLCJPbkNvbnRlbnRTaXplQ2hhbmdlIiwiU2Nyb2xsVmlldy5wcm9wcy5vbkNvbnRlbnRTaXplQ2hhbmdlIiwiTWF4TWluWm9vbVNjYWxlIiwiVGV4dElucHV0LnByb3BzLm9uQ2hhbmdlVGV4dCIsIktleWJvYXJkRXhhbXBsZSIsImRpc21pc3NPcHRpb25zLm1hcCRhcmd1bWVudF8wIiwicGVyc2lzdE9wdGlvbnMubWFwJGFyZ3VtZW50XzAiLCJJbnZlcnRTdGlja3lIZWFkZXJzIiwiTXVsdGlwbGVTdGlja3lIZWFkZXJzIiwiSW5kaWNhdG9yU3R5bGUiLCJEaXNhYmxlRW5hYmxlIiwiRGVjZWxlcmF0aW9uUmF0ZUV4YW1wbGUiLCJDb250ZW50RXhhbXBsZSIsIkJvdW5jZXNFeGFtcGxlIiwiQm91bmNlc0V4YW1wbGVIb3Jpem9udGFsIiwiQm91bmNlc0V4YW1wbGVWZXJ0aWNhbCIsIkl0ZW0iLCJJdGVtI3JlbmRlciIsImNyZWF0ZUl0ZW1Sb3ciLCJCdXR0b24iXSwibWFwcGluZ3MiOiJBQUE7QUM0QjtFQ0k7bUJDZTtXREU7bUJDSTtXREU7R0RJO0NEQztBSUc7a0RDSztLREU7RUVFO2dDQ1c7MkRERTtnQ0NXO3dFREU7cUJITTs0QktDO2VMTzthR0M7cUJISTs0QktDO2dCTEU7YUdDO3FCSEk7NEJLQztnQkxNO2FHQztxQkhNOzRCS0M7Z0JMSTthR0M7cUJISTs0QktDO2dCTEU7YUdDO3FCSEk7NEJLQztnQkxNO2FHQztHRks7Q0pDO0FTRTtDVFM7QVVFO0NWUztBV0U7YUNXO1NERTtrQkVHO1NGRzt1QkdDO1NIRTtpQlJRO1NRRTtpQlJLO1NRRTtpQlJLO1NRRTtDWEs7WWVxQjtLZk07WWVPO0tmTTtZZUs7S2ZFO1llSztLZkU7WWVNO0tmRTtZZU07S2ZFO1llTztLZkU7WWVPO0tmRTtZZU87S2ZNO1llTztLZkU7WWVNO0tmRTtZZU07S2ZFO1llTTtLZkU7WWVLO0tmRTtZZU07S2ZFO1llSztLZkU7WWVLO0tmRTtZZUs7S2ZFO1llTztLZkU7WWdCUztLaEJFO1lnQks7S2hCUztZZ0JLO0toQkU7WWdCSztLaEJFO1lnQks7S2hCRTtZZ0JLO0toQkU7WWdCTTtLaEJFO1lnQk07S2hCRTtZZ0JLO0toQkU7Z0NpQks7aUJkWSxrRGM7Q2pCSTs2QmtCRTtpQmZrQjtTZUU7aUJmSztTZUk7Q2xCSztrQ21CRTtpQmhCYztnRmdCQztpQmhCSzsyRWdCQztDbkJLO3NCb0JFO3NDQ3dCO3lCbEJLLCtCa0I7YURFO2lCakJNLDhCaUI7aUJqQkksa0NpQjtpQmpCTTs0RWlCQztpQmpCTztrQ2lCRztDcEJLO3dCc0JFO2lCbkJjLDBEbUI7aUJuQkksb0NtQjtDdEJJOytCdUJFO2lCcEI0Qjs0Q29CUTtpQnBCUTtvRW9CQztpQnBCTyw0RG9CO0N2Qkk7OEJ3QkU7aUJyQlksc0RxQjtDeEJJOzhCeUJFO2dDQ0U7b0JDRywwQkQ7R0RDO2VHRTt1QkNDO0tERTtHSEM7Q3pCYzt3QjhCRTsyQkNTLDBDRDt5QkVDLHdDRjt1QmhCQyxzQ2dCO3VDR1M7eUI5QkssOEI4QjthSEU7QzlCTTt5QmtDRTsrQkNPLHdDRDs2QkVDLHNDRjtDbENNOzRCcUNFOzZCQ1E7K0NERztpQmxDTzs2QmtDRztDckNLO3dCdUNFO3NCQ2tCLDJCRDtzQkNPLDJCRDswQkNTLHdCRDtDdkNPO3dCeUNFO3NCRGUsNkJDO21CdENRLG9Dc0M7NEJDTztxQnZDSyxtQ3VDO1NERTs0QkVJO3FCeENLLHlDd0M7U0ZFO0N6Q0k7NEI0Q0U7bUJ6Q2tCLGtEeUM7bUJ6Q0s7V3lDRTttQnpDSztXeUNJO0M1Q007OEI2Q0U7bUIxQ3NCO1cwQ0U7bUIxQ0s7VzBDSTtDN0NNO3VCOENFO21CM0NZOzRDMkNHO0M5Q087c0IrQ0U7cUI1Q29CLHdENEM7bUI1Q08sMEQ0QzttQjVDTTs0RTRDQztDL0NVO2dDZ0RFO21CN0NZO3NDNkNHO0NoRE87dUJpREU7dUI5QzZCO29FOENDO3VCOUNPOzhEOENHO21COUNXOzhDOENHO21COUNTO3FDOENHO0NqRFM7dUJrREU7bUIvQ2MsMEIrQzttQi9DSSxrQytDO0NsRE07aUNtREU7bUJoRGEsd0JnRDtDbkRNOytCb0RFO21CakRhLHdCaUQ7Q3BETTtBcURFO0VDSTtHRE07Q3JEQzsrQktFLHFCTDtzQnVERTtDdkRFO2V3REU7Q3hEZSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlN0aWNreUhlYWRlciIsIlByZXNzYWJsZS5wcm9wcy5vblByZXNzIiwicmVuZGVyQ29tcG9uZW50MSIsIlNjcm9sbFZpZXdQcmVzc2FibGVTdGlja3lIZWFkZXJFeGFtcGxlIiwiQnV0dG9uLnByb3BzLm9uUHJlc3MiXSwibWFwcGluZ3MiOiJBQUE7QUNvQjtpQkNhO1NERTtDRE07QUdFO0NITztlSUU7bUJDcUI7V0RFO21CQ0s7V0RFO0NKTSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNjcm9sbFZpZXdBbmltYXRlZEV4YW1wbGUiLCJzdGFydEFuaW1hdGlvbiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ29COytCQ0c7R0RRO0VFRTtHRmtDO0NEQztZRzBCO0tIRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNjcm9sbFZpZXdJbmRpY2F0b3JJbnNldHNFeGFtcGxlIiwiTW9kYWwucHJvcHMub25SZXF1ZXN0Q2xvc2UiLCJTd2l0Y2gucHJvcHMub25WYWx1ZUNoYW5nZSIsIkJ1dHRvbi5wcm9wcy5vblByZXNzIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09DcUI7MEJDVSw0QkQ7K0JFc0Isb0RGO3lCR0ssNEJIO21CR08sMkJIO0dESTtZS3VDLHFETCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNjcm9sbFZpZXdLZXlib2FyZEluc2V0c0V4YW1wbGUiLCJyZW5kZXJJdGVtIiwiU3dpdGNoLnByb3BzLm9uVmFsdWVDaGFuZ2UiLCJkYXRhLm1hcCRhcmd1bWVudF8wIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09Db0I7cUJDYztHRFM7eUJFTyw0Q0Y7eUJFTyxtQkY7MkJFUSxtQkY7eUJFUSwyQkY7c0JHaUIsNENIO0NETTtZS2lFLG9ETCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNlY3Rpb25MaXN0X2NvbnRlbnRJbnNldCIsIm9uVGVzdCIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09DZTtpQkNZO0dEVztDRG1CO1VHdUI7R0hFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSXRlbSIsIlByZXNzYWJsZS5wcm9wcy5vblByZXNzSW4iLCJQcmVzc2FibGUucHJvcHMub25QcmVzcyIsIlByZXNzYWJsZS5wcm9wcy5vblByZXNzT3V0IiwiUHJlc3NhYmxlLnByb3BzLnN0eWxlIiwiUmVhY3QuZm9yd2FyZFJlZiRhcmd1bWVudF8wIiwiU2VjdGlvbkxpc3QucHJvcHMua2V5RXh0cmFjdG9yIiwiU2VjdGlvbkxpc3QucHJvcHMucmVuZGVyU2VjdGlvbkhlYWRlciJdLCJtYXBwaW5ncyI6IkFBQTthQ3lDO2lCQ0c7T0RFO2VFQztPRkc7a0JHQztPSEU7YUlDO09KSztDREs7cUJNYTtzQkN3Qiw2QkQ7NkJFSztTRkU7Q05LIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiU2VjdGlvbkxpc3RfaW52ZXJ0ZWQiLCJvblRlc3QiLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtPQ2M7aUJDTTtHREs7Q0RVO1VHSztHSEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJTZWN0aW9uTGlzdF9vbkVuZFJlYWNoZWQiLCJleGFtcGxlUHJvcHMub25FbmRSZWFjaGVkIiwib25UZXN0IiwiZGVmYXVsdC5yZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7T0NhO2tCQ0c7K0JEQztpQkVLO0dGSztDRFU7VUlNO0dKRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNlY3Rpb25MaXN0X29uVmlld2FibGVJdGVtc0NoYW5nZWQiLCJleGFtcGxlUHJvcHMub25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCIsImluZm8udmlld2FibGVJdGVtcy5maWx0ZXIkYXJndW1lbnRfMCIsImluZm8udmlld2FibGVJdGVtcy5maWx0ZXIubWFwJGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO09DeUI7NEJDUztrQkNPLDRERDtlRUMsMkJGO09ERTtRSU87U0pFO0NEWTtVTVU7R05NIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyU2VjdGlvbkhlYWRlciIsInJlbmRlclNlY3Rpb25Gb290ZXIiLCJDdXN0b21TZXBhcmF0b3JDb21wb25lbnQiLCJFbXB0eVNlY3Rpb25MaXN0IiwicmVuZGVySXRlbUNvbXBvbmVudCIsIjxhbm9ueW1vdXM+Iiwib25QcmVzcyIsIm9uU2Nyb2xsVG9JbmRleEZhaWxlZCIsIkl0ZW1TZXBhcmF0b3JDb21wb25lbnQiLCJTZWN0aW9uU2VwYXJhdG9yQ29tcG9uZW50IiwiU2VjdGlvbkxpc3Rfc2Nyb2xsYWJsZSIsImZpbHRlciIsInNldEl0ZW1QcmVzcyIsInNjcm9sbFRvTG9jYXRpb24iLCJvblZpZXdhYmxlSXRlbXNDaGFuZ2VkIiwiaW5mby5jaGFuZ2VkLm1hcCRhcmd1bWVudF8wIiwiUGxhaW5JbnB1dC5wcm9wcy5vbkNoYW5nZVRleHQiLCJCdXR0b24ucHJvcHMub25QcmVzcyIsIkFuaW1hdGVkLlNlY3Rpb25MaXN0LnByb3BzLm9uUmVmcmVzaCIsIkFuaW1hdGVkLlNlY3Rpb25MaXN0LnByb3BzLm9uRW5kUmVhY2hlZCIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBOzRCQ2lGO0NESzs0QkVJO0NGSztpQ0dJO0NIUTt5QklFO0NKSTtFS0c7RUNHO29CQ0k7S0RHO0dOVTs4QlFFO0NSa0I7K0JTRztDVEU7a0NVRztDVkU7T1dFO2lCQ2dCOytEREM7dUJFaUI7R0ZNOzJCR0c7R0hLO2lDSUU7eUJDZTtVREk7R0pHO3dCTU0sMkJOO3VCT2dCLHlDUDt1Qk9NLHlDUDt1Qk9NLHlDUDt1Qk9NO21FUEM7bUJRaUIscURSO3NCU1c7V1RJO0NYUztVcUJ5QztHckJFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiU2VjdGlvbkxpc3Rfc3RpY2t5U2VjdGlvbkhlYWRlcnNFbmFibGVkIiwib25UZXN0IiwiZGVmYXVsdC5yZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7T0NjO2lCQ1E7R0RPO0NEWTtVR007R0hFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiU2VwYXJhdG9yIiwiPGFub255bW91cz4iLCJTZWN0aW9uTGlzdF93aXRoU2VwYXJhdG9ycyIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0VDZTtFQ0M7R0ZnQjtPR0U7Q0hRO1VJYztHSkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRWYWx1ZSIsIlN0YXR1c0JhckhpZGRlbkV4YW1wbGUiLCJTdGF0dXNCYXJIaWRkZW5FeGFtcGxlI19vbkNoYW5nZUFuaW1hdGVkIiwiU3RhdHVzQmFySGlkZGVuRXhhbXBsZSNfb25DaGFuZ2VIaWRkZW4iLCJTdGF0dXNCYXJIaWRkZW5FeGFtcGxlI19vbkNoYW5nZVRyYW5zaXRpb24iLCJTdGF0dXNCYXJIaWRkZW5FeGFtcGxlI3JlbmRlciIsIlN0YXR1c0JhclN0eWxlRXhhbXBsZSIsIlN0YXR1c0JhclN0eWxlRXhhbXBsZSNfb25DaGFuZ2VCYXJTdHlsZSIsIlN0YXR1c0JhclN0eWxlRXhhbXBsZSNfb25DaGFuZ2VBbmltYXRlZCIsIlN0YXR1c0JhclN0eWxlRXhhbXBsZSNyZW5kZXIiLCJTdGF0dXNCYXJOZXR3b3JrQWN0aXZpdHlFeGFtcGxlIiwiU3RhdHVzQmFyTmV0d29ya0FjdGl2aXR5RXhhbXBsZSNfb25DaGFuZ2VOZXR3b3JrSW5kaWNhdG9yVmlzaWJsZSIsIlN0YXR1c0Jhck5ldHdvcmtBY3Rpdml0eUV4YW1wbGUjcmVuZGVyIiwiU3RhdHVzQmFyQmFja2dyb3VuZENvbG9yRXhhbXBsZSIsIlN0YXR1c0JhckJhY2tncm91bmRDb2xvckV4YW1wbGUjX29uQ2hhbmdlQmFja2dyb3VuZENvbG9yIiwiU3RhdHVzQmFyQmFja2dyb3VuZENvbG9yRXhhbXBsZSNfb25DaGFuZ2VBbmltYXRlZCIsIlN0YXR1c0JhckJhY2tncm91bmRDb2xvckV4YW1wbGUjcmVuZGVyIiwiU3RhdHVzQmFyVHJhbnNsdWNlbnRFeGFtcGxlIiwiU3RhdHVzQmFyVHJhbnNsdWNlbnRFeGFtcGxlI19vbkNoYW5nZVRyYW5zbHVjZW50IiwiU3RhdHVzQmFyVHJhbnNsdWNlbnRFeGFtcGxlI3JlbmRlciIsIlN0YXR1c0JhclN0YXRpY0lPU0V4YW1wbGUiLCJTdGF0dXNCYXJTdGF0aWNJT1NFeGFtcGxlI3JlbmRlciIsIlRvdWNoYWJsZUhpZ2hsaWdodC5wcm9wcy5vblByZXNzIiwiU3RhdHVzQmFyU3RhdGljQW5kcm9pZEV4YW1wbGUiLCJTdGF0dXNCYXJTdGF0aWNBbmRyb2lkRXhhbXBsZSNyZW5kZXIiLCJNb2RhbEV4YW1wbGUiLCJNb2RhbEV4YW1wbGUjX29uQ2hhbmdlTW9kYWxWaXNpYmxlIiwiTW9kYWxFeGFtcGxlI3JlbmRlciIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQzRCO0NERTtBRUU7c0JDVztHREU7b0JFRTtHRkU7d0JHRTtHSFE7RUlFO0dKc0M7Q0ZDO0FPRTtzQkNHO0dERztzQkVFO0dGRTtFR087R0g2QjtDUEM7QVdFO3FDQ1E7R0RLO0VFRTtHRm9CO0NYQztBY0U7NkJDVztHREc7c0JFRTtHRkU7RUdFO0dIdUI7Q2RDO0FrQkU7eUJDUTtHREk7RUVFO0dGZTtDbEJDO0FxQkU7RUNDO21CQ0s7V0RFO21CQ087V0RFO21CQ087V0RFO21CQ1U7V0RFO21CQ087V0RFO21CQ087V0RFO0dETztDckJDO0F3QkU7RUNDO21CRks7V0VFO21CRk87V0VFO21CRk87V0VFO21CRk87V0VFO21CRk87V0VFO21CRlU7V0VFO21CRk87V0VFO21CRk87V0VHO21CRlU7V0VHO0dEUztDeEJDO0EwQkU7MEJDSztHREU7RUVFO0dGNkI7QzFCQztJNkJVO0s3QkU7STZCSTtLN0JFO0k2Qkk7SzdCRTtJNkJLO0s3QkU7STZCSztLN0JFO0k2Qks7SzdCRTtJNkJLO0s3QkU7STZCSztLN0JNIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyIiwiU3dpcGVhYmxlQ2FyZEV4YW1wbGUiLCJpbmNyZW1lbnRDdXJyZW50IiwiZ2V0Q2FyZENvbG9yIiwiU3dpcGVhYmxlQ2FyZCIsIlJlYWN0LnVzZU1lbW8kYXJndW1lbnRfMCIsIlBhblJlc3BvbmRlci5jcmVhdGUkYXJndW1lbnRfMC5vbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXJDYXB0dXJlIiwiUGFuUmVzcG9uZGVyLmNyZWF0ZSRhcmd1bWVudF8wLm9uUGFuUmVzcG9uZGVyRW5kIiwiQ2FyZCIsInJlbmRlckl0ZW0iLCJzZXBhcmF0b3JDb21wb25lbnQiLCJSZWFjdC51c2VFZmZlY3QkYXJndW1lbnRfMCIsIkNhcmRTZWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFBO2NDb0M7T0RFO0FFSzsyQkNRLHVDRDt1QkVFLHdERjtDRjZCO0FLRTtrQ0NNLDJCRDtJQ0c7NENDRTtTREc7MkJFSTtTRmE7UURDO0NMdUI7QVNJO3FCQ0M7R0RFOzZCRUUsdUNGO2tCR0k7R0hFO0NUYTtBYUU7Q2JTIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiT25PZmZJbmRpY2F0b3IiLCJFeGFtcGxlUm93IiwiQmFzaWNTd2l0Y2hFeGFtcGxlIiwiQmFzaWNTd2l0Y2hFeGFtcGxlI3JlbmRlciIsIlN3aXRjaC5wcm9wcy5vblZhbHVlQ2hhbmdlIiwiRGlzYWJsZWRTd2l0Y2hFeGFtcGxlIiwiRGlzYWJsZWRTd2l0Y2hFeGFtcGxlI3JlbmRlciIsIkNvbG9yU3dpdGNoRXhhbXBsZSIsIkNvbG9yU3dpdGNoRXhhbXBsZSNyZW5kZXIiLCJFdmVudFN3aXRjaEV4YW1wbGUiLCJFdmVudFN3aXRjaEV4YW1wbGUjcmVuZGVyIiwiSU9TQmFja2dyb3VuZENvbEV4IiwiSU9TQmFja2dyb3VuZENvbEV4I3JlbmRlciIsIk9uQ2hhbmdlRXhhbXBsZSIsIk9uQ2hhbmdlRXhhbXBsZSNyZW5kZXIiLCJTd2l0Y2gucHJvcHMub25DaGFuZ2UiLCJDb250YWluZXJCYWNrZ3JvdW5kQ29sb3JTdHlsZUV4YW1wbGUiLCJDb250YWluZXJCYWNrZ3JvdW5kQ29sb3JTdHlsZUV4YW1wbGUjcmVuZGVyIiwicmVuZGVyIiwiZXhwb3J0cy5leGFtcGxlcy5wdXNoJGFyZ3VtZW50XzAucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZ0I7Q0RFO0FFRztDRlk7QUdPO0VDUzsyQkNNLGdERDsyQkNlLCtDRDtHRFU7Q0hDO0FNRTtFQ1M7MkJGTyxnREU7MkJGYywrQ0U7R0RXO0NOQztBUUU7RUNNO3lCSksscURJO3lCSlcsb0RJO0dEVTtDUkM7QVVFO0VDTzsyQk5NLGdETTsyQk5NLGdETTsyQk5XOytETUM7MkJOTzsrRE1DO0dEVztDVkM7QVlFO0VDSztHRGM7Q1pDO0FjRTtFQ0M7b0JDSTtXREc7R0RJO0NkQztBaUJFO0VDSTtHRFU7Q2pCQztJbUJXO0tuQkU7SW1CSztLbkJFO0ltQks7S25CRTtJbUJLO0tuQkU7SW1CSztLbkJFO0ltQkk7S25CRTtJbUJJO0tuQkU7SW9CTztLcEJFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSW5saW5lVmlldyIsIlRleHRBbGlnblJUTEV4YW1wbGUiLCJUZXh0QWxpZ25SVExFeGFtcGxlI2NvbnN0cnVjdG9yIiwiVGV4dEFsaWduUlRMRXhhbXBsZSNyZW5kZXIiLCJ0b2dnbGVSVEwiLCJFbnRpdHkiLCJFbnRpdHkjcmVuZGVyIiwiQXR0cmlidXRlVG9nZ2xlciIsIkF0dHJpYnV0ZVRvZ2dsZXIjdG9nZ2xlV2VpZ2h0IiwiQXR0cmlidXRlVG9nZ2xlciNpbmNyZWFzZVNpemUiLCJBdHRyaWJ1dGVUb2dnbGVyI3JlbmRlciIsIkFkanVzdGluZ0ZvbnRTaXplIiwiQWRqdXN0aW5nRm9udFNpemUjcmVzZXQiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJBZGp1c3RpbmdGb250U2l6ZSNhZGRUZXh0IiwiQWRqdXN0aW5nRm9udFNpemUjcmVtb3ZlVGV4dCIsIkFkanVzdGluZ0ZvbnRTaXplI3JlbmRlciIsIlRleHRCYXNlTGluZUxheW91dEV4YW1wbGUiLCJUZXh0QmFzZUxpbmVMYXlvdXRFeGFtcGxlI3JlbmRlciIsIlRleHRSZW5kZXJJbmZvRXhhbXBsZSIsIlRleHRSZW5kZXJJbmZvRXhhbXBsZSNyZW5kZXIiLCJUZXh0LnByb3BzLm9uVGV4dExheW91dCIsIlRleHQucHJvcHMub25QcmVzcyIsIlRleHRXaXRoQ2FwQmFzZUJveCIsIlRleHRXaXRoQ2FwQmFzZUJveCNyZW5kZXIiLCJyZW5kZXIiLCJsaW5lQnJlYWtTdHJhdGVneS5tYXAkYXJndW1lbnRfMCIsIk9iamVjdC5rZXlzLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDaUM7Q0RNO0FFTTtFQ0k7R0RNO0VFRTtzQkNFLG9DRDtHRitCO0NGQztBTUU7RUNDO0dETTtDTkM7QVFFO2lCQ007R0RJO2lCRUU7R0ZJO0VHRTtHSDZCO0NSQztBWVM7VUNTO2VDSztLRE07R0RDO1lHRTtHSE07ZUlFO0dKTztFS0U7R0wwRTtDWkM7QWtCRTtFQ0M7R0R1RjtDbEJDO0FvQkU7RUMrQzswQkNvQzthREs7bUJFTztjRkc7bUJFSyx3REY7bUJFSSx3REY7R0RLO0NwQkM7QXdCRTtFQ3dDO3NCSEc7U0dLO0dEZ0I7Q3hCQztZMEJLO0sxQk87WTBCSTtLMUJFO1kwQkk7SzFCUztZMEJJO0sxQkU7WTBCSSxnQzFCO1kwQkk7SzFCSTtZMEJJO0sxQk07WTBCSTtLMUJnQztZMEJJO0sxQk87WTBCSTtLMUJPO1kwQkk7SzFCeUI7WTBCSTtLMUJPO1kwQkk7SzFCUztZMEJJO0sxQnVFO1kwQk87SzFCa0M7WTBCSTtLMUI0QjtZMEJJO0sxQndDO1kwQkk7SzFCTTtZMEJJO0sxQlM7WTBCSztLMUJFO1kwQkk7SzFCRTtZMEJLO0sxQnNCO1kwQkk7SzFCaUI7WTBCSTt1QkhZLFVHO0sxQlU7WTBCSTtLMUJ3QjtZMEJJLDBDMUI7WTBCSSxrRDFCO1kwQkksb0QxQjtZMEJJLG1EMUI7WTBCSSx3RDFCO1kwQkk7SzFCYztZMEJJO0sxQmlCO1kwQkk7SzFCOEI7WTBCSTtLMUJ3QjtZMEJJO0sxQkU7WTBCSTtLMUJFO1kwQkk7SzFCRTtZMEJJO0sxQjZDO1kwQkk7SzFCTTtZMEJJO2lDQ1c7NkNDTztpQkRTO1dERztLMUJHO1kwQkk7SzFCeUMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUZXh0TGVnZW5kIiwiVGV4dC5wcm9wcy5vblByZXNzIiwiT2JqZWN0LmtleXMubWFwJGFyZ3VtZW50XzAiLCJSTlRPcHRpb24ucHJvcHMub25QcmVzcyIsInRleHRNZXRyaWNzLm1hcCRhcmd1bWVudF8wIiwiVGV4dC5wcm9wcy5vblRleHRMYXlvdXQiXSwibWFwcGluZ3MiOiJBQUE7ZUN1QztxQkNRLCtCRDtxQkNDLCtCRDtxQ0VJO3VCQ0ksdUJEO1dGSTtVSUs7V0ppSTt3QktHO1dMRTttQkdhLDBCSDttQkdPLDRCSDttQkdPLDJCSDtDRE8ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJCYXNpYyIsIk5lc3RlZFRleHRzIiwiQ2xpcHBlZEJ5VGV4dCIsIkNoYW5nZUltYWdlU2l6ZSIsIkNoYW5nZUltYWdlU2l6ZSNyZW5kZXIiLCJUb3VjaGFibGVIaWdobGlnaHQucHJvcHMub25QcmVzcyIsIkNoYW5nZVZpZXdTaXplIiwiQ2hhbmdlVmlld1NpemUjcmVuZGVyIiwiQ2hhbmdlSW5uZXJWaWV3U2l6ZSIsIkNoYW5nZUlubmVyVmlld1NpemUjcmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTtDRFM7QUVFO0NGYTtBR0U7Q0g2RDtBSU07RUNLO21CQ0k7V0RFO0dEc0I7Q0pDO0FPRTtFQ0s7bUJGSTtXRUU7R0RrQjtDUEM7QVNFO0VDSzttQkpJO1dJRTtHRHdCO0NUQyJ9XSxudWxsLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiV2l0aExhYmVsIiwiV2l0aExhYmVsI3JlbmRlciIsIlRleHRJbnB1dEFjY2Vzc29yeVZpZXdDaGFuZ2VUZXh0RXhhbXBsZSIsIlRleHRJbnB1dEFjY2Vzc29yeVZpZXdDaGFuZ2VUZXh0RXhhbXBsZSNjb25zdHJ1Y3RvciIsIlRleHRJbnB1dEFjY2Vzc29yeVZpZXdDaGFuZ2VUZXh0RXhhbXBsZSNyZW5kZXIiLCJUZXh0SW5wdXQucHJvcHMub25DaGFuZ2VUZXh0IiwiQnV0dG9uLnByb3BzLm9uUHJlc3MiLCJUZXh0SW5wdXRBY2Nlc3NvcnlWaWV3Q2hhbmdlS2V5Ym9hcmRFeGFtcGxlIiwiVGV4dElucHV0QWNjZXNzb3J5Vmlld0NoYW5nZUtleWJvYXJkRXhhbXBsZSNjb25zdHJ1Y3RvciIsIlRleHRJbnB1dEFjY2Vzc29yeVZpZXdDaGFuZ2VLZXlib2FyZEV4YW1wbGUjX3N3aXRjaEtleWJvYXJkIiwiVGV4dElucHV0QWNjZXNzb3J5Vmlld0NoYW5nZUtleWJvYXJkRXhhbXBsZSNyZW5kZXIiLCJUZXh0SW5wdXRBY2Nlc3NvcnlWaWV3RGVmYXVsdERvbmVCdXR0b25FeGFtcGxlIiwiVGV4dElucHV0QWNjZXNzb3J5Vmlld0RlZmF1bHREb25lQnV0dG9uRXhhbXBsZSNjb25zdHJ1Y3RvciIsIlRleHRJbnB1dEFjY2Vzc29yeVZpZXdEZWZhdWx0RG9uZUJ1dHRvbkV4YW1wbGUjcmVuZGVyIiwiUmV3cml0ZUV4YW1wbGVLYW5hIiwiUmV3cml0ZUV4YW1wbGVLYW5hI2NvbnN0cnVjdG9yIiwiUmV3cml0ZUV4YW1wbGVLYW5hI3JlbmRlciIsIlNlY3VyZUVudHJ5RXhhbXBsZSIsIlNlY3VyZUVudHJ5RXhhbXBsZSNjb25zdHJ1Y3RvciIsIlNlY3VyZUVudHJ5RXhhbXBsZSNyZW5kZXIiLCJTd2l0Y2gucHJvcHMub25WYWx1ZUNoYW5nZSIsIkF1dG9ncm93aW5nVGV4dElucHV0RXhhbXBsZSIsIkF1dG9ncm93aW5nVGV4dElucHV0RXhhbXBsZSNjb25zdHJ1Y3RvciIsIkF1dG9ncm93aW5nVGV4dElucHV0RXhhbXBsZSNVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIkF1dG9ncm93aW5nVGV4dElucHV0RXhhbXBsZSNyZW5kZXIiLCJUZXh0SW5wdXQucHJvcHMub25Db250ZW50U2l6ZUNoYW5nZSIsInJlbmRlciIsImtleWJvYXJkVHlwZXNXaXRoRG9uZUJ1dHRvbi5tYXAkYXJndW1lbnRfMCIsImtleWJvYXJkQXBwZWFyYW5jZS5tYXAkYXJndW1lbnRfMCIsInJldHVybktleVR5cGVzLm1hcCRhcmd1bWVudF8wIiwiY2xlYXJCdXR0b25Nb2Rlcy5tYXAkYXJndW1lbnRfMCIsIlRleHRJbnB1dC5wcm9wcy5vblN1Ym1pdEVkaXRpbmciLCJsaW5lQnJlYWtTdHJhdGVneS5tYXAkYXJndW1lbnRfMCIsIk9iamVjdC5rZXlzLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDK0I7RUNDO0dEUztDREM7QUdFO0VDSTtHREc7RUVFO3dCQ1EsNkJEO3VCRU0sK0NGO0dGTztDSEM7QVFFO0VDSTtHREc7b0JFRTtHRks7RUdFO3dCTFMsNkJLO0dIYTtDUkM7QVlFO0VDTTtHREc7RUVFO3NCUkksNkJRO0dGTTtDWkM7QWVFO0VDQztHREc7RUVDO3dCWEs7V1dFO0dGTTtDZkM7QWtCRTtFQ0M7R0RPO0VFQzt3QmRPLDZCYzswQmRZLHVDYzsyQkNLO2FERTtHRk87Q2xCQztBc0JFO0VDSTtHRFk7RUVFO0dGSTtFR0U7eUJKTywwQ0k7eUJKTSwwQ0k7d0JuQlEscUNtQjsrQkNDO3VFREM7R0hTO0N0QkM7WTJCZ0U7SzNCRTtZMkJJO0szQk87WTJCSTt1RENPO09EUztLM0JFO1kyQkk7SzNCc0I7WTJCSTs4Q0VFO09GTTtLM0JFO1kyQkk7MENHYztPSE07SzNCRTtZMkJJO0szQlc7WTJCSTtLM0JFO1kyQkk7SzNCYTtZMkJJO0szQmU7WTJCSTs0Q0lPO09KVTtLM0JFO1kyQkk7SzNCdUM7WTJCSTs2QktTOzBETEM7SzNCSztZMkJJO0szQnVDO1kyQkk7SzNCeUI7WTJCSTtLM0IrRDtZMkJJO0szQmE7WTJCSTtLM0IyQjtZMkJJO0szQjZCO1kyQkk7SzNCaUI7WTJCSTtLM0IyQjtZMkJJO0szQmtCO1kyQkk7SzNCUTtZMkJJO2lDTVU7NkNDTztpQkRZO1dORztLM0JHO1kyQkk7SzNCZSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIldpdGhMYWJlbCIsIldpdGhMYWJlbCNyZW5kZXIiLCJSZXdyaXRlRXhhbXBsZSIsIlJld3JpdGVFeGFtcGxlI2NvbnN0cnVjdG9yIiwiUmV3cml0ZUV4YW1wbGUjcmVuZGVyIiwiVGV4dElucHV0LnByb3BzLm9uQ2hhbmdlVGV4dCIsIlJld3JpdGVFeGFtcGxlSW52YWxpZENoYXJhY3RlcnMiLCJSZXdyaXRlRXhhbXBsZUludmFsaWRDaGFyYWN0ZXJzI2NvbnN0cnVjdG9yIiwiUmV3cml0ZUV4YW1wbGVJbnZhbGlkQ2hhcmFjdGVycyNyZW5kZXIiLCJSZXdyaXRlSW52YWxpZENoYXJhY3RlcnNBbmRDbGVhckV4YW1wbGUiLCJSZXdyaXRlSW52YWxpZENoYXJhY3RlcnNBbmRDbGVhckV4YW1wbGUjY29uc3RydWN0b3IiLCJSZXdyaXRlSW52YWxpZENoYXJhY3RlcnNBbmRDbGVhckV4YW1wbGUjcmVuZGVyIiwiVGV4dElucHV0LnByb3BzLnJlZiIsIkJ1dHRvbi5wcm9wcy5vblByZXNzIiwiQmx1ck9uU3VibWl0RXhhbXBsZSIsIkJsdXJPblN1Ym1pdEV4YW1wbGUjcmVuZGVyIiwiVGV4dElucHV0LnByb3BzLm9uU3VibWl0RWRpdGluZyIsIlN1Ym1pdEJlaGF2aW9yRXhhbXBsZSIsIlN1Ym1pdEJlaGF2aW9yRXhhbXBsZSNyZW5kZXIiLCJUZXh0RXZlbnRzRXhhbXBsZSIsIlRleHRFdmVudHNFeGFtcGxlI3VwZGF0ZVRleHQiLCJzZXRTdGF0ZSRhcmd1bWVudF8wIiwiVGV4dEV2ZW50c0V4YW1wbGUjcmVuZGVyIiwiVGV4dElucHV0LnByb3BzLm9uRm9jdXMiLCJUZXh0SW5wdXQucHJvcHMub25CbHVyIiwiVGV4dElucHV0LnByb3BzLm9uQ2hhbmdlIiwiVGV4dElucHV0LnByb3BzLm9uQ29udGVudFNpemVDaGFuZ2UiLCJUZXh0SW5wdXQucHJvcHMub25FbmRFZGl0aW5nIiwiVGV4dElucHV0LnByb3BzLm9uS2V5UHJlc3MiLCJUb2tlbml6ZWRUZXh0RXhhbXBsZSIsIlRva2VuaXplZFRleHRFeGFtcGxlI2NvbnN0cnVjdG9yIiwiVG9rZW5pemVkVGV4dEV4YW1wbGUjcmVuZGVyIiwicGFydHMubWFwJGFyZ3VtZW50XzAiLCJTZWxlY3Rpb25FeGFtcGxlIiwiU2VsZWN0aW9uRXhhbXBsZSNjb25zdHJ1Y3RvciIsIlNlbGVjdGlvbkV4YW1wbGUjb25TZWxlY3Rpb25DaGFuZ2UiLCJTZWxlY3Rpb25FeGFtcGxlI2dldFJhbmRvbVBvc2l0aW9uIiwiU2VsZWN0aW9uRXhhbXBsZSNzZWxlY3QiLCJTZWxlY3Rpb25FeGFtcGxlI3NlbGVjdFJhbmRvbSIsIlNlbGVjdGlvbkV4YW1wbGUjcGxhY2VBdCIsIlNlbGVjdGlvbkV4YW1wbGUjcGxhY2VBdFJhbmRvbSIsIlNlbGVjdGlvbkV4YW1wbGUjcmVuZGVyIiwiVW5jb250cm9sbGVkRXhhbXBsZSIsIlJlYWN0Lm1lbW8kYXJndW1lbnRfMCIsIlRleHRTdHlsZXNDb250YWluZXIiLCJSTlRlc3RlckJ1dHRvbi5wcm9wcy5vblByZXNzIiwiZXhhbXBsZXMubWFwJGFyZ3VtZW50XzAiLCJTdHlsZWRUZXh0SW5wdXQiLCJNdWx0aWxpbmVTdHlsZWRUZXh0SW5wdXQiLCJyZW5kZXIiLCJrZXlib2FyZFR5cGVzLm1hcCRhcmd1bWVudF8wIiwiaW5wdXRNb2RlLm1hcCRhcmd1bWVudF8wIiwiZW50ZXJLZXlIaW50VHlwZXNIaW50cy5tYXAkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQytGO0VDQztHRE87Q0RDO0FHRTtFQ0M7R0RHO0VFQzt3QkNXO1dERztHRlM7Q0hDO0FPRTtFQ0k7R0RHO0VFQzt3QkhPO1dHRTtHRk07Q1BDO0FVRTtFQ007R0RHO0VFQztlQ007V0RFO3dCTkU7V01FO21CRU07V0ZJO0dGSztDVkM7QWVJO0VDTzsyQkNTLGdDRDsyQkNTLGdDRDsyQkNTLGdDRDsyQkNRLGdDRDtHRFc7Q2ZDO0FrQkU7RUNhOzJCRk8sZ0NFOzJCRk0sZ0NFOzJCRkssZ0NFOzJCRk0sZ0NFOzJCRk0sZ0NFOzJCRk8sZ0NFOzJCRk8sZ0NFOzJCRk8sZ0NFO0dEaUI7Q2xCQztBb0JFO2VDZTtrQkNDO0tETztHREM7RUdFO21CQ1EsZ0NEO2tCRUMsK0JGO29CR0M7dUVIQzsrQklFO2FKSTt3QktFOzJFTEM7MkJORTs4RU1DO3NCTUU7dUVOQztHSGE7Q3BCQztBOEJFO0VDSTtHREc7RUVDO3NCQzJCO0tEVTt3QjFCUTtXMEJFO0dGSztDOUJDO0FrQ1c7RUNRO0dETTtFRUk7R0ZFO0VHRTtHSEc7RUlFO0dKTTtFS0U7R0xNO0VNRTtHTkU7RU9FO0dQRTtFUUU7MEJwQ1MsK0JvQztpQjdCRywwQzZCO0dSc0M7Q2xDQztBMkNFO2VuQlEsd0JtQjtjbEJDLHlCa0I7QzNDRztxQzRDRTtDNUNrSTtBNkNVO2lCQ1UsMENEO3NCRUs7U0ZnQjtDN0NJO0FnRFE7Q2hEdUI7QWlERTtDakR1QjtZa0RLO0tsRFE7WWtESztLbERFO1lrREk7S2xERTtZa0RLO0tsREU7WWtESztLbERpQztZa0RJO0tsRFc7WWtESzt5Q0NnQjtPRE07S2xERTtZa0RLO3FDRVc7T0ZNO0tsREU7WWtESTtLbERFO1lrREs7a0RHVTtPSE07S2xERTtZa0RJO0tsREU7WWtESTtLbERFO1lrREk7S2xEcUM7WWtESztLbERFO1lrREs7S2xEZ0I7WWtESztLbERrQjtZa0RLLDZCbEQ7WWtESywyQmxEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVG91Y2hhYmxlSGlnaGxpZ2h0Qm94IiwiVG91Y2hhYmxlSGlnaGxpZ2h0Qm94I3RvdWNoYWJsZU9uUHJlc3MiLCJUb3VjaGFibGVIaWdobGlnaHRCb3gjcmVuZGVyIiwiVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrQm94IiwiVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrQm94I3RleHRPblByZXNzIiwiVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrQm94I3JlbmRlciIsIlRleHRPblByZXNzQm94IiwiVGV4dE9uUHJlc3NCb3gjdGV4dE9uUHJlc3MiLCJUZXh0T25QcmVzc0JveCNyZW5kZXIiLCJUb3VjaGFibGVGZWVkYmFja0V2ZW50cyIsIlRvdWNoYWJsZUZlZWRiYWNrRXZlbnRzI3JlbmRlciIsIlRvdWNoYWJsZU9wYWNpdHkucHJvcHMub25QcmVzcyIsIlRvdWNoYWJsZU9wYWNpdHkucHJvcHMub25QcmVzc0luIiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzT3V0IiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vbkxvbmdQcmVzcyIsInN0YXRlLmV2ZW50TG9nLm1hcCRhcmd1bWVudF8wIiwiVG91Y2hhYmxlRmVlZGJhY2tFdmVudHMjX2FwcGVuZEV2ZW50IiwiVG91Y2hhYmxlRGVsYXlFdmVudHMiLCJUb3VjaGFibGVEZWxheUV2ZW50cyNyZW5kZXIiLCJUb3VjaGFibGVEZWxheUV2ZW50cyNfYXBwZW5kRXZlbnQiLCJGb3JjZVRvdWNoRXhhbXBsZSIsIkZvcmNlVG91Y2hFeGFtcGxlI19yZW5kZXJDb25zb2xlVGV4dCIsIkZvcmNlVG91Y2hFeGFtcGxlI3JlbmRlciIsIlZpZXcucHJvcHMub25TdGFydFNob3VsZFNldFJlc3BvbmRlciIsIlZpZXcucHJvcHMub25SZXNwb25kZXJNb3ZlIiwiVmlldy5wcm9wcy5vblJlc3BvbmRlclJlbGVhc2UiLCJUb3VjaGFibGVIaXRTbG9wIiwiVG91Y2hhYmxlSGl0U2xvcCNvblByZXNzIiwiVG91Y2hhYmxlSGl0U2xvcCNyZW5kZXIiLCJUb3VjaGFibGVOYXRpdmVNZXRob2RDaGVja2VyIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJUb3VjaGFibGVOYXRpdmVNZXRob2RzIiwiVG91Y2hhYmxlRGlzYWJsZWQiLCJUb3VjaGFibGVEaXNhYmxlZCNyZW5kZXIiLCJUb3VjaGFibGVIaWdobGlnaHQucHJvcHMub25QcmVzcyIsIlRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjay5wcm9wcy5vblByZXNzIiwiVG91Y2hhYmxlTmF0aXZlRmVlZGJhY2sucHJvcHMub25QcmVzcyIsIkN1c3RvbVJpcHBsZVJhZGl1cyIsIlRvdWNoYWJsZUhpZ2hsaWdodFVuZGVybGF5TWV0aG9kcyIsImhpZGRlblVuZGVybGF5Iiwic2hvd25VbmRlcmxheSIsIlRvdWNoYWJsZVRvdWNoU291bmREaXNhYmxlZCIsInRvZ2dsZVRvdWNoYWJsZVNvdW5kIiwiVG91Y2hhYmxlT25Gb2N1cyIsInRvZ2dsZUZvY3VzIiwiZm9jdXNUb3VjaGFibGUiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUM2QjtxQkNLO0dESTtFRUU7R0ZpQztDREM7QUlFO2dCQ1E7R0RJO0VFRTtHRnNCO0NKQztBT0U7Z0JDSztHREk7RUVFO0dGcUI7Q1BDO0FVRTtFQ0s7cUJDUyxnQ0Q7dUJFQyxrQ0Y7d0JHQyxtQ0g7eUJJQyxvQ0o7bUNLTztXTEU7R0RJO2lCT0U7R1BLO0NWQztBa0JFO0VDSztxQlBPLGdDTzt1Qk5FLGdETTt3QkxFLGtESzt5QkpFLGtESTttQ0hPO1dHRTtHREk7aUJFRTtHRks7Q2xCQztBcUJFO3VCQ0s7R0RJO0VFRTt1Q0NVLFVEOzZCRUM7NkRGQztnQ0dFLGtDSDtHRk07Q3JCQztBMkJFO1lDSztHREk7RUVFO0dGd0I7QzNCQztBOEJFO1lDTTtHREU7QzlCaUI7QWdDRTtDaENhO0FpQ0U7RUNDO21CQ2dCLGdERDttQkNRLGdERDttQkVLLDBDRjttQkVlLDBDRjt1QkdZLGdESDt1QkdXLGdESDtHRGE7Q2pDQztBc0NFO2lCRFcsZ0RDO2lCRFUsZ0RDO2lCRFksZ0RDO0N0Q1U7MEN1Q007eUJDSztHREU7d0JFRTtHRkU7ZUpPO09JRTtDdkNJO29DMENFOytCQ0U7R0RFO3FCTk8sZ0RNO0MxQ3dCO0E0Q0c7c0JDVTtHREs7eUJFQztHRkk7QzVDYztZK0N1RjtLL0NFO1krQ0k7Sy9DRTtZK0NPO0svQ3NCO1krQ0k7Sy9DRTtZK0NJO0svQ0U7WStDSTtLL0NFO1krQ0k7Sy9DRTtZK0NNO0svQ0U7WStDTztLL0NFO1krQ007Sy9DRTtZK0NRO0svQ0U7WStDTTtLL0NFO1krQ007Sy9DRTtZK0NPO0svQ0UifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUcmFuc3BhcmVudEhpdFRlc3RFeGFtcGxlIiwicmVuZGVyIiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTtFQ0M7bUNDRyxpQ0Q7R0RpQjtDREM7SUVTO0tGRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlZpZXdCb3JkZXJTdHlsZUV4YW1wbGUiLCJWaWV3Qm9yZGVyU3R5bGVFeGFtcGxlI3JlbmRlciIsIlZpZXdCb3JkZXJTdHlsZUV4YW1wbGUjX2hhbmRsZVByZXNzIiwiT2Zmc2NyZWVuQWxwaGFDb21wb3NpdGluZyIsIk9mZnNjcmVlbkFscGhhQ29tcG9zaXRpbmcjcmVuZGVyIiwiT2Zmc2NyZWVuQWxwaGFDb21wb3NpdGluZyNfaGFuZGxlUHJlc3MiLCJaSW5kZXhFeGFtcGxlIiwiWkluZGV4RXhhbXBsZSNyZW5kZXIiLCJaSW5kZXhFeGFtcGxlI19oYW5kbGVQcmVzcyIsIlBvc2l0aW9uU3RhdGljWkluZGV4RXhhbXBsZSIsIkRpc3BsYXlOb25lU3R5bGUiLCJEaXNwbGF5Tm9uZVN0eWxlI3JlbmRlciIsIkRpc3BsYXlOb25lU3R5bGUjX2hhbmRsZVByZXNzIiwiRmxleEdhcEV4YW1wbGUiLCJGbGV4R2FwRXhhbXBsZSNyZW5kZXIiLCJMYXlvdXRDb25mb3JtYW5jZUV4YW1wbGUiLCJMYXlvdXRDb25mb3JtYW5jZUJveCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2lCO0VDUTtHRHFDO2lCRUU7R0ZFO0NEQztBSVc7RUNVO0dEeUQ7aUJFRTtHRkU7Q0pDO0FPWTtFQ1U7R0RxRDtpQkVFO0dGRTtDUEM7QVVFO0NWc0U7QVdFO0VDVTtHRGtEO2lCRUU7R0ZFO0NYQztBY0U7RUNDO0dEOEI7Q2RDO0FnQkU7Q2hCcUI7QWlCRTtDakJ3QjtNa0JhO09sQlE7TWtCSztPbEJRO01rQks7T2xCNEI7TWtCSztPbEIwQjtNa0JLO09sQkU7TWtCSztPbEJxRjtNa0JLO09sQm9DO01rQks7T2xCMEI7TWtCSztPbEJJO01rQks7T2xCRTtNa0JVO09sQkU7TWtCSztPbEJnRTtNa0JLO09sQlM7TWtCSztPbEJFO01rQks7T2xCa0Y7TWtCSztPbEJtQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtJQ3NCO0tETSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkhTQkEiLCJIU0JBI2NvbnN0cnVjdG9yIiwiSFNCQSN0b1N0cmluZyIsImJlYXV0aWZ5IiwiZ2V0VGV4dEZvciIsIk15TmF0aXZlVmlldyIsIlJOVE15TmF0aXZlVmlldy5wcm9wcy5vbkludEFycmF5Q2hhbmdlZCIsIlJOVE15TmF0aXZlVmlldy5wcm9wcy5vbkxlZ2FjeVN0eWxlRXZlbnQiLCJSTlRNeUxlZ2FjeU5hdGl2ZVZpZXcucHJvcHMub25Db2xvckNoYW5nZWQiLCJCdXR0b24ucHJvcHMub25QcmVzcyIsInJlZi5jdXJyZW50Lm1lYXN1cmUkYXJndW1lbnRfMCIsImxlZ2FjeVJlZi5jdXJyZW50Lm1lYXN1cmUkYXJndW1lbnRfMCIsImxlZ2FjeVJlZi5jdXJyZW50Lm1lYXN1cmVJbldpbmRvdyRhcmd1bWVudF8wIiwibGVnYWN5UmVmLmN1cnJlbnQubWVhc3VyZUxheW91dCRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0M7RUNNO0dEVTtFRUU7R0ZFO0NEQztBSUU7Q0pLO0FLZ0I7Q0xNO2VNRzsyQkNzQjtTRFM7NEJFQztTRkU7d0JHTztXSFE7aUJJWTtTSlM7aUJJSTtTSlk7aUJJSTtTSk07aUJJSTtTSk87aUJJSTsrQkNDO1dERTtxQ0VFO1dGRTs2Q0dDO1dIRTtjSU07ZUpFO1NKRztpQklJO1NKSztpQklnQjtTSlM7Q05JIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY2FsbE5hdGl2ZU1ldGhvZFRvQ2hhbmdlQmFja2dyb3VuZENvbG9yIiwiY2FsbE5hdGl2ZU1ldGhvZFRvQWRkT3ZlcmxheXMiLCJjYWxsTmF0aXZlTWV0aG9kVG9SZW1vdmVPdmVybGF5cyJdLCJtYXBwaW5ncyI6IkFBQTtPQ3FDO0NEbUI7T0VFO0NGb0I7T0dFO0NIbUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQZXJmRXhhbXBsZVdyYXBwZXIiLCJ0b2dnbGVHb29kRXhhbXBsZSIsInRvZ2dsZUJhZEV4YW1wbGUiLCJ1c2VNZW1vJGFyZ3VtZW50XzAiLCJPYmplY3Qua2V5cy5tYXAkYXJndW1lbnRfMCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQzBCO0lDUztPREc7SUVJO09GRztxQ0dJO0dIUztzQ0dFO0dIUztDRHVCO01LNEI7WUNLO0tESztDTEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSZVJlbmRlcldpdGhOb25QdXJlQ2hpbGRCYWRFeGFtcGxlIiwib25TY3JvbGwiLCJSZVJlbmRlcldpdGhOb25QdXJlQ2hpbGRHb29kRXhhbXBsZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3VCO0lDRztLREU7Q0RVO0FHRTtJREc7S0NFO0NIVSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkl0ZW0iLCJyZW5kZXJJdGVtIiwiSXRlbUxpc3QiLCJkYXRhLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDbUI7Q0RVO0FFUTtDRkU7QUdFO29CQ2M7V0RFO0NISyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdlbmVyYXRlUmFuZG9tU3RyaW5nIiwiZ2VuZXJhdGVSYW5kb21BZ2UiLCJnZW5lcmF0ZVJhbmRvbU5hbWUiLCJnZW5lcmF0ZVJhbmRvbUFkZHJlc3MiLCJnZW5lcmF0ZVJhbmRvbUl0ZW1zIiwiQXJyYXkuZnJvbSRhcmd1bWVudF8xIl0sIm1hcHBpbmdzIjoiQUFBO0FDYztDRE07QUVFO0NGRTtBR0U7Q0hFO0FJRTtDSks7T0tTO2tDQ0M7SURLO0NMQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJlUmVuZGVyV2l0aE9iamVjdFByb3BCYWRFeGFtcGxlIiwiSXRlbUxpc3RNZW1vLnByb3BzLm9uU2Nyb2xsIiwiUmVSZW5kZXJXaXRoT2JqZWN0UHJvcEdvb2RFeGFtcGxlIiwib25TY3JvbGwiXSwibWFwcGluZ3MiOiJBQUE7QUN1QjtrQkNPO1NERTtDREk7QUdFO0lDRztLREU7Q0hVIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQmFkRXhhbXBsZSIsInVzZUVmZmVjdCRhcmd1bWVudF8wIiwibGlzdERhdGEuZmlsdGVyJGFyZ3VtZW50XzAiLCJHb29kRXhhbXBsZSIsIlNldFN0YXRlSW5Xcm9uZ0VmZmVjdEJhZEV4YW1wbGUiLCJTZXRTdGF0ZUluV3JvbmdFZmZlY3RHb29kRXhhbXBsZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3NCO1lDSztzQkNFO29FREM7R0RHO0NERztBSUU7MENERTtnRUNDO0NKSTtBS0U7Q0xFO0FNRTtDTkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSZW5kZXJPZmZzY3JlZW5Db250ZW50QmFkRXhhbXBsZSIsIlJlbmRlck9mZnNjcmVlbkNvbnRlbnRHb29kRXhhbXBsZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ21CO0NERTtBRUU7Q0ZJIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTm90TWVtb2l6ZUV4cGVuc2l2ZVRhc2tFeGFtcGxlQmFkRXhhbXBsZSIsIlJOVGVzdGVyQnV0dG9uLnByb3BzLm9uUHJlc3MiLCJOb3RNZW1vaXplRXhwZW5zaXZlVGFza0V4YW1wbGVHb29kRXhhbXBsZSIsInVzZU1lbW8kYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtBQ21COytCQ1cseUJEO0NESztBR0U7a0NDRztHRE07K0JESyx5QkM7Q0hLIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiSXRlbUZldGNoZXJCYWRFeGFtcGxlIiwiZmV0Y2hNb3JlSXRlbXMiLCJQcm9taXNlJGFyZ3VtZW50XzAiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJmZXRjaE1vcmVJdGVtcy50aGVuJGFyZ3VtZW50XzAiLCJJdGVtRmV0Y2hlckdvb2RFeGFtcGxlIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJFZmZlY3RJblJlbmRlckJhZEV4YW1wbGUiLCJvbk1vcmVJdGVtRmV0Y2hlZCIsIkVmZmVjdEluUmVuZGVyR29vZEV4YW1wbGUiXSwibWFwcGluZ3MiOiJBQUE7QUN5Qjt5QkNLO3VCQ0c7aUJDQztPREU7S0RDO0dEQzs2QklFO0dKRTtDREM7QU1FO1lDSzsyQkxDO3lCQ0c7bUJDQztTREU7T0RDO0tLQzsrQkZFO0tFRTtHREM7Q05DO0FRSTtJQ0k7S0RFO0NSbUI7QVVFO0lESTtLQ0U7Q1ZtQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFjY2Vzc2liaWxpdHlFeGFtcGxlIiwicmVuZGVyIiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzIiwiQXV0b21hdGljQ29udGVudEdyb3VwaW5nIiwiQXV0b21hdGljQ29udGVudEdyb3VwaW5nI3JlbmRlciIsIlRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrLnByb3BzLm9uQWNjZXNzaWJpbGl0eUFjdGlvbiIsIlRvdWNoYWJsZU5hdGl2ZUZlZWRiYWNrLnByb3BzLm9uUHJlc3MiLCJDaGVja2JveEV4YW1wbGUiLCJDaGVja2JveEV4YW1wbGUjX29uQ2hlY2tib3hQcmVzcyIsIkNoZWNrYm94RXhhbXBsZSNyZW5kZXIiLCJTd2l0Y2hFeGFtcGxlIiwiU3dpdGNoRXhhbXBsZSNfb25Td2l0Y2hUb2dnbGUiLCJTd2l0Y2hFeGFtcGxlI3JlbmRlciIsIlNlbGVjdGlvbkV4YW1wbGUiLCJTZWxlY3Rpb25FeGFtcGxlI2NvbnN0cnVjdG9yIiwiU2VsZWN0aW9uRXhhbXBsZSNyZW5kZXIiLCJCdXR0b24ucHJvcHMub25QcmVzcyIsIkV4cGFuZGFibGVFbGVtZW50RXhhbXBsZSIsIkV4cGFuZGFibGVFbGVtZW50RXhhbXBsZSNfb25FbGVtZW50UHJlc3MiLCJFeHBhbmRhYmxlRWxlbWVudEV4YW1wbGUjcmVuZGVyIiwiTmVzdGVkQ2hlY2tCb3giLCJOZXN0ZWRDaGVja0JveCNfb25QcmVzczEiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJOZXN0ZWRDaGVja0JveCNfb25QcmVzczIiLCJOZXN0ZWRDaGVja0JveCNfb25QcmVzczMiLCJOZXN0ZWRDaGVja0JveCNyZW5kZXIiLCJBY2Nlc3NpYmlsaXR5Um9sZUFuZFN0YXRlRXhhbXBsZSIsIkFjY2Vzc2liaWxpdHlSb2xlQW5kU3RhdGVFeGFtcGxlI3JlbmRlciIsIkFjY2Vzc2liaWxpdHlBY3Rpb25zRXhhbXBsZSIsIkFjY2Vzc2liaWxpdHlBY3Rpb25zRXhhbXBsZSNyZW5kZXIiLCJWaWV3LnByb3BzLm9uQWNjZXNzaWJpbGl0eUFjdGlvbiIsIlRvdWNoYWJsZVdpdGhvdXRGZWVkYmFjay5wcm9wcy5vbkFjY2Vzc2liaWxpdHlBY3Rpb24iLCJUb3VjaGFibGVXaXRob3V0RmVlZGJhY2sucHJvcHMub25QcmVzcyIsIkJ1dHRvbi5wcm9wcy5vbkFjY2Vzc2liaWxpdHlBY3Rpb24iLCJUZXh0LnByb3BzLm9uQWNjZXNzaWJpbGl0eUFjdGlvbiIsIkZha2VTbGlkZXJFeGFtcGxlIiwiRmFrZVNsaWRlckV4YW1wbGUjaW5jcmVtZW50IiwiRmFrZVNsaWRlckV4YW1wbGUjZGVjcmVtZW50IiwiRmFrZVNsaWRlckV4YW1wbGUjcmVuZGVyIiwiRmFrZVNsaWRlckV4YW1wbGVGb3JBY2Nlc3NpYmlsaXR5VmFsdWUiLCJGYWtlU2xpZGVyRXhhbXBsZUZvckFjY2Vzc2liaWxpdHlWYWx1ZSNpbmNyZW1lbnQiLCJGYWtlU2xpZGVyRXhhbXBsZUZvckFjY2Vzc2liaWxpdHlWYWx1ZSNkZWNyZW1lbnQiLCJGYWtlU2xpZGVyRXhhbXBsZUZvckFjY2Vzc2liaWxpdHlWYWx1ZSNyZW5kZXIiLCJBbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkiLCJBbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkjX2hhbmRsZU9uUHJlc3MiLCJBbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkjX2hhbmRsZU9uUHJlc3NRdWV1ZWQiLCJBbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkjX2hhbmRsZU9uUHJlc3NRdWV1ZU11bHRpcGxlIiwiQW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5I3JlbmRlciIsIlNldEFjY2Vzc2liaWxpdHlGb2N1c0V4YW1wbGUiLCJvblByZXNzIiwiRW5hYmxlZEV4YW1wbGVzIiwiRW5hYmxlZEV4YW1wbGVzI3JlbmRlciIsIkltcG9ydGFudEZvckFjY2Vzc2liaWxpdHlFeGFtcGxlcyIsIkltcG9ydGFudEZvckFjY2Vzc2liaWxpdHlFeGFtcGxlcyNyZW5kZXIiLCJFbmFibGVkRXhhbXBsZSIsIkVuYWJsZWRFeGFtcGxlI2NvbXBvbmVudERpZE1vdW50IiwiQWNjZXNzaWJpbGl0eUluZm8uaXNSZWR1Y2VNb3Rpb25FbmFibGVkLnRoZW4kYXJndW1lbnRfMCIsIkFjY2Vzc2liaWxpdHlJbmZvLmlzQWNjZXNzaWJpbGl0eVNlcnZpY2VFbmFibGVkLnRoZW4kYXJndW1lbnRfMCIsIkVuYWJsZWRFeGFtcGxlI2NvbXBvbmVudFdpbGxVbm1vdW50IiwiRW5hYmxlZEV4YW1wbGUjX2hhbmRsZVRvZ2dsZWQiLCJFbmFibGVkRXhhbXBsZSNyZW5kZXIiLCJEaXNwbGF5T3B0aW9uc1N0YXR1c0V4YW1wbGUiLCJEaXNwbGF5T3B0aW9uc1N0YXR1c0V4YW1wbGUjcmVuZGVyIiwiRGlzcGxheU9wdGlvblN0YXR1c0V4YW1wbGUiLCJSZWFjdC51c2VFZmZlY3QkYXJndW1lbnRfMCIsIm9wdGlvbkNoZWNrZXIudGhlbiRhcmd1bWVudF8wIiwiY2xlYW51cCIsIkFjY2Vzc2liaWxpdHlFeHBhbmRlZEV4YW1wbGUiXSwibWFwcGluZ3MiOiJBQUE7QUN1RztFQ0M7cUJDNEUsMkNEO3FCQ1UsNkNEO3FCQ1EsNkNEO3FCQ2Msc0REO0dEcUU7Q0RDO0FJRTtFQ0M7bUNDc0I7YURZO3lCRXFDLG1DRjtxQkVvQyxtQ0Y7R0R3QjtDSkM7QVFFO3FCQ1U7R0RhO0VFRTtHRlc7Q1JDO0FXRTtvQkNVO0dETTtFRUU7R0ZXO0NYQztBY0U7RUNPO0dERztFRVU7bUJia0I7V2FRO21CQ3VCO1dESTtHRks7Q2RDO0FrQkU7b0JDVTtHRE07RUVFO0dGVTtDbEJDO0FxQkU7Y0NrQjtlQ1M7S0RNO0dEQztjR0U7R0hZO2NJRTtHSlk7RUtFO0dMb0Q7Q3JCQztBMkJFO0VDQztHRG1LO0MzQkM7QTZCRTtFQ0M7bUNDTzthRE07bUNDYTthRFk7bUNDVTthRFM7bUNFYTthRlk7cUJHQyw2Q0g7bUNJZTthSlM7cUJiQyw2Q2E7bUNLWTthTFM7R0RNO0M3QkM7QW9DTTswQkNNO0dEUTswQkVFO0dGUTtFR0U7aUNSUTtXUVM7aUNQYTtXT2lCO0dIUTtDcENDO0F3Q0U7MEJDUztHRFE7MEJFRTtHRlE7RUdFO2lDWlE7V1lTO2lDWFk7V1dpQjtHSFE7Q3hDQztBNENFO21CQ0M7TXRCRSxxRXNCO0tERTt5QkVFO012QkU7U3VCSTtLRkU7Z0NHRTtNeEJFO1N3Qkk7TXhCSTtTd0JJO014Qkk7U3dCSTtHSEc7RUlFO0dKd0I7QzVDQztBaURFO2tCQ0c7R0RJO0NqRFc7QW1ERTtFQ0M7R0Q0RDtDbkRDO0FxREU7RUNDO3FCckM2Qiw0QnFDO0dESztDckRDO0F1REU7RUNxQjs4RENRO1NERTtzRUVFO1NGRTtHREk7RUlFO0dKRTttQktFO0dMTTtFTUU7R05hO0N2REM7QThERTtFQ0M7R0Q2QztDOURDO0FnRUU7a0JDVTt5QkNPO0tERTtXRUM7S0ZFO0dEQztDaEVVO0FvRUU7bUJuRFcsMEJtRDtpQ2xDRztXa0NTO21CakVTLDBCaUU7Q3BFaUI7SUVRO0tGRTtJRUk7S0ZFO0lFSTtLRkU7SUVJO0tGRTtJRUk7S0ZFO0lFSTtLRkU7SUVJO0tGRTtJRUk7S0ZFO0lFSTtLRkU7SUVJO0tGRTtJRUk7S0ZFO0lFSTtLRkU7SUVLO0tGVTtJRUk7S0ZVIn1dLG51bGwsbnVsbCxudWxsLG51bGwsW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBY2Nlc3NpYmlsaXR5SU9TRXhhbXBsZSIsInJlbmRlciIsIlZpZXcucHJvcHMub25BY2Nlc3NpYmlsaXR5QWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFBO0FDZ0I7RUNDO2lDQ0k7V0RJO2lDQ007V0RJO2lDQ007V0RJO0dEZTtDREM7SUVPO0tGRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFjdGlvblNoZWV0RXhhbXBsZSIsIkFjdGlvblNoZWV0RXhhbXBsZSNyZW5kZXIiLCJBY3Rpb25TaGVldEV4YW1wbGUjc2hvd0FjdGlvblNoZWV0IiwiQWN0aW9uU2hlZXRJT1Muc2hvd0FjdGlvblNoZWV0V2l0aE9wdGlvbnMkYXJndW1lbnRfMSIsIkFjdGlvblNoZWV0VGludEV4YW1wbGUiLCJBY3Rpb25TaGVldFRpbnRFeGFtcGxlI3JlbmRlciIsIkFjdGlvblNoZWV0VGludEV4YW1wbGUjc2hvd0FjdGlvblNoZWV0IiwiQWN0aW9uU2hlZXRDYW5jZWxCdXR0b25UaW50RXhhbXBsZSIsIkFjdGlvblNoZWV0Q2FuY2VsQnV0dG9uVGludEV4YW1wbGUjcmVuZGVyIiwiQWN0aW9uU2hlZXRDYW5jZWxCdXR0b25UaW50RXhhbXBsZSNzaG93QWN0aW9uU2hlZXQiLCJBY3Rpb25TaGVldEFuY2hvckV4YW1wbGUiLCJBY3Rpb25TaGVldEFuY2hvckV4YW1wbGUjcmVuZGVyIiwiQWN0aW9uU2hlZXRBbmNob3JFeGFtcGxlI3Nob3dBY3Rpb25TaGVldCIsIkFjdGlvblNoZWV0RGlzYWJsZWRFeGFtcGxlIiwiQWN0aW9uU2hlZXREaXNhYmxlZEV4YW1wbGUjcmVuZGVyIiwiQWN0aW9uU2hlZXREaXNhYmxlZEV4YW1wbGUjc2hvd0FjdGlvblNoZWV0IiwiQWN0aW9uU2hlZXREaXNtaXNzRXhhbXBsZSIsIkFjdGlvblNoZWV0RGlzbWlzc0V4YW1wbGUjcmVuZGVyIiwiQWN0aW9uU2hlZXREaXNtaXNzRXhhbXBsZSNzaG93QW5kRGlzbWlzc0FjdGlvblNoZWV0Iiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwiU2hhcmVBY3Rpb25TaGVldEV4YW1wbGUiLCJTaGFyZUFjdGlvblNoZWV0RXhhbXBsZSNyZW5kZXIiLCJTaGFyZUFjdGlvblNoZWV0RXhhbXBsZSNzaG93U2hhcmVBY3Rpb25TaGVldCIsIkFjdGlvblNoZWV0SU9TLnNob3dTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMkYXJndW1lbnRfMSIsIkFjdGlvblNoZWV0SU9TLnNob3dTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMkYXJndW1lbnRfMiIsIlNoYXJlU2NyZWVuc2hvdEV4YW1wbGUiLCJTaGFyZVNjcmVlbnNob3RFeGFtcGxlI3JlbmRlciIsIlNoYXJlU2NyZWVuc2hvdEV4YW1wbGUjc2hvd1NoYXJlQWN0aW9uU2hlZXQiLCJTY3JlZW5zaG90TWFuYWdlci50YWtlU2NyZWVuc2hvdC50aGVuJGFyZ3VtZW50XzAiLCJTY3JlZW5zaG90TWFuYWdlci50YWtlU2NyZWVuc2hvdC50aGVuLl9jYXRjaCRhcmd1bWVudF8wIiwiU2hhcmVTY3JlZW5zaG90QW5jaG9yRXhhbXBsZSIsIlNoYXJlU2NyZWVuc2hvdEFuY2hvckV4YW1wbGUjcmVuZGVyIiwiU2hhcmVTY3JlZW5zaG90QW5jaG9yRXhhbXBsZSNzaG93U2hhcmVBY3Rpb25TaGVldCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dDO0VDSztHRFM7b0JFRTtNQ087T0RFO0dGRTtDREM7QUtFO0VDUTtHRFM7b0JFRTtNSFE7T0dFO0dGRTtDTEM7QVFFO0VDUTtHRFM7b0JFRTtNTlM7T01FO0dGRTtDUkM7QVdFO0VDVTtHRGlCO29CRUU7TVRVO09TRTtHRkU7Q1hDO0FjRTtFQ0s7R0RTO29CRUU7TVpRO09ZRTtHRkU7Q2RDO0FpQkU7RUNDO0dEUzs4QkVFO01mTyxRZTtlQ0c7S0RFO0dGQztDakJDO0FxQkU7RUNRO0dEUzt5QkVFO01DUSxvQ0Q7TUVDO09GUTtHRkU7Q3JCQztBMEJFO0VDUTtHRFM7eUJFRTtZQ0c7VUxPLG9DSztVSkM7V0lRO09ERTthRUMsb0NGO0dGQztDMUJDO0ErQkU7RUNVO0dEaUI7eUJFRTtZSkc7VUxVLG9DSztVSkM7V0lRO09JRTthSEMsb0NHO0dGQztDL0JDO0lrQ29CO0tsQ0U7SWtDSTtLbENFO0lrQ0k7S2xDRTtJa0NJO0tsQ0U7SWtDSTtLbENFO0lrQ0k7S2xDRTtJa0NJO0tsQ0U7SWtDSTtLbENFO0lrQ0k7S2xDRTtJa0NJO0tsQ0UifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJ0YWtlU2NyZWVuc2hvdCJdLCJtYXBwaW5ncyI6IkFBQTtPQzBCO0NEUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkxvZyIsIkFsZXJ0V2l0aERlZmF1bHRCdXR0b24iLCJQcmVzc2FibGUucHJvcHMub25QcmVzcyIsIkFsZXJ0V2l0aFR3b0J1dHRvbnMiLCJvblByZXNzIiwiQWxlcnRXaXRoVGhyZWVCdXR0b25zIiwiQWxlcnRXaXRoTWFueUJ1dHRvbnMiLCJfLnNwbGl0Lm1hcCRhcmd1bWVudF8wIiwiQWxlcnRXaXRoQ2FuY2VsYWJsZVRydWUiLCJBbGVydC5hbGVydCRhcmd1bWVudF8zLm9uRGlzbWlzcyIsIkFsZXJ0V2l0aFN0eWxlcyIsIkFsZXJ0V2l0aFN0eWxlc1ByZWZlcnJlZCIsIlByb21wdE9wdGlvbnMiLCJQcm9tcHRUeXBlcyIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtZQ2dCO1VETzsrQkVNO2lCQ1Esd0NEO0NGTzs0QklFO2lCRFM7c0NFRSxtQ0Y7cUNFQyxrQ0Y7WUNDO0NKUzs4Qk1FO2lCSFU7c0NFRSxtQ0Y7a0NFQywrQkY7bUNFQyxnQ0Y7WUdDO0NOUzs2Qk9FO2lCSlc7MkNLSTt1QkhFLDRDRztjTEM7V0lDO0NQUztnQ1NFO2lCTlM7bUNFSSwrQkY7eUJPRztpQlBHO1dNRTtDVFM7d0JXRTtpQlJTO3VCRUksb0NGO3VCRUssbUNGO3VCRUssd0NGO1lRRztDWFM7aUNZRTtpQlRVO3VCRUssc0NGO3VCRUssbUNGO1lTRTtDWlM7c0JhRTtpQlZzQix3RFU7aUJWUSx1RFU7aUJWUTtXVVE7aUJWUztXVU87aUJWUztXVU87Q2JVO29CY0U7aUJYSyxzQ1c7aUJYTyw0RFc7aUJYTzt3RVdDO0NkUTtJZTRCO0tmRTtJZUs7S2ZFO0llSztLZkU7SWVNO0tmRTtJZU87S2ZFO0llTztLZkU7SWVPO0tmRTtJZUs7S2ZFO0llSztLZkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRlZFZpZXciLCJSTlRlc3RlckJ1dHRvbi5wcm9wcy5vblByZXNzIiwiQW5pbWF0ZWRDb2xvclN0eWxlRXhhbXBsZSIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDa0I7aUJDK0U7U0RHO0NEc0I7QUdFO0NIaUI7VUkwQixtQ0oifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSTlRDb25maWd1cmF0aW9uQmxvY2siXSwibWFwcGluZ3MiOiJBQUE7ZUN3QjtDRFcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUb2dnbGVOYXRpdmVEcml2ZXIiXSwibWFwcGluZ3MiOiJBQUE7ZUN3QjtDRGUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJDb21wb3NpdGVBbmltYXRpb25zV2l0aEVhc2luZ0V4YW1wbGUiLCJtYXAkYXJndW1lbnRfMCIsIlJOVGVzdGVyQnV0dG9uLnByb3BzLm9uUHJlc3MiLCJhbmltcy5tYXAkYXJndW1lbnRfMCIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDNkI7OEJDQywyQkQ7aUJFUTtxQkNxQjtvQkRJOzRCQ0c7c0JESTtvQkRVO2tCQ007d0JDTTtrQkRTO1NGSTtrRENHO09EVztDREc7VUtTLDhDTCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImxlZnRUb1JpZ2h0VGltaW5nQ29uZmlnIiwicmlnaHRUb0xlZnRUaW1pbmdDb25maWciLCJjb21wb3NpdGVBbmltYXRpb24iLCJ2YWx1ZXMubWFwJGFyZ3VtZW50XzAiLCJDb21wb3NpbmdFeGFtcGxlSXRlbSIsIlJlYWN0LnVzZU1lbW8kYXJndW1lbnRfMCIsImJveEluZGV4ZXMubWFwJGFyZ3VtZW50XzAiLCJSTlRlc3RlckJ1dHRvbi5wcm9wcy5vblByZXNzIiwiQ29tcG9zaW5nRXhhbXBsZSIsIkZsYXRMaXN0LnByb3BzLnJlbmRlckl0ZW0iLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtnQ0M4QjtFREc7Z0NFQztFRkc7d0JHTTtxQkNNOzRFREM7cUJDSTs0RURDO1FIRzt3QkdNO3FCQ007NEVEQztxQkNJOzRFREM7UUhHO3dCR007cUJDTzs0RURDO3FCQ0s7NEVEQztRSEc7d0JHSztxQkNPOzRFREM7cUJDSzs0RURDO1FIRztBS0k7bUNDbUIscUJEO21CRUUsMkJGO3dCRVc7U0ZpQjttQkdJO1dIRzttQkdJO1dIRTttQkdJO1dIRztDTE07QVNFO29CQ2E7U0RRO0NUSTtVV2lDLDBCWCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO1VDcUIscUVEIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRWFzaW5nSXRlbSIsIlJOVGVzdGVyQnV0dG9uLnByb3BzLm9uUHJlc3MiLCJFYXNpbmdFeGFtcGxlIiwiU2VjdGlvbkxpc3QucHJvcHMucmVuZGVySXRlbSIsIlNlY3Rpb25MaXN0LnByb3BzLnJlbmRlclNlY3Rpb25IZWFkZXIiLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dGO21CQzhCO1dERztDRFM7QUdFO29CQ2E7U0RVOzZCRUM7U0ZFO0NISTtVTTJDLHVCTiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkZhZGVJblZpZXciLCJSZWFjdC51c2VTdGF0ZSRhcmd1bWVudF8wIiwiUmVhY3QudXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJGYWRlSW5FeGFtcGxlIiwiUk5UZXN0ZXJCdXR0b24ucHJvcHMub25QcmVzcyIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDOEI7b0NDUSwyQkQ7a0JFQztHRmM7Q0RVO0FJRTtzRENXLG9CRDtDSlk7VU1VLG1DTiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImRlZmF1bHQucmVuZGVyIiwiTG9vcGluZ1ZpZXciLCJSZWFjdC51c2VNZW1vJGFyZ3VtZW50XzAiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwiTG9vcGluZ0V4YW1wbGUiLCJUb2dnbGVOYXRpdmVEcml2ZXIucHJvcHMub25WYWx1ZUNoYW5nZSIsIlJOVGVzdGVyQnV0dG9uLnByb3BzLm9uUHJlc3MiXSwibWFwcGluZ3MiOiJBQUE7VUN1Qix3QkQ7QUVHO2dDQ08sMkJEOzhCQ0MsMkJEO1lFRTtXQ2tCO0tERTtHRkM7Q0ZPO0FNRTt5QkNTO1dERzsrQkVHLDBCRjtDTlUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJNb3ZpbmdCb3hWaWV3IiwibW92ZVRvIiwidG9nZ2xlVmlzaWJpbGl0eSIsIm9uUmVzZXQiLCJSTlRlc3RlckJ1dHRvbi5wcm9wcy5vblByZXNzIiwiTW92aW5nQm94RXhhbXBsZSIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDMEQ7aUJDSztHRE07MkJFRTtHRkU7a0JHRTtHSEc7MkRJa0IsZUo7bUJJTyxzQ0o7Q0RNO0FNRTtDTmlCO1VPUyxzQ1AifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSb3RhdGluZ0ltYWdlc1ZpZXciLCJSTlRlc3RlckJ1dHRvbi5wcm9wcy5vblByZXNzIiwiUm90YXRpbmdJbWFnZXNFeGFtcGxlIl0sIm1hcHBpbmdzIjoiQUFBO0FDeUI7aUJDb0I7U0RFO0NEb0M7QUdFO0NIaUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUcmFuc2Zvcm1Cb3VuY2VWaWV3IiwiUk5UZXN0ZXJCdXR0b24ucHJvcHMub25QcmVzcyIsIlRyYW5zZm9ybUJvdW5jZUV4YW1wbGUiLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQzhCO2lCQ3FCO1NERTtDRHFDO0FHRTtDSG1CO1VJVyxnQ0oifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbmltYXRlZFZpZXciLCJwcm9wZXJ0aWVzLm1hcCRhcmd1bWVudF8wIiwiUk5UZXN0ZXJCdXR0b24ucHJvcHMub25QcmVzcyIsIkFuaW1hdGVkVHJhbnNmb3JtU3R5bGVFeGFtcGxlIiwib25Ub2dnbGUiLCJPYmplY3Qua2V5cy5tYXAkYXJndW1lbnRfMCIsIlJOVE9wdGlvbi5wcm9wcy5vblByZXNzIiwiT2JqZWN0LmtleXMuZmlsdGVyJGFyZ3VtZW50XzAiLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ21DO3lDQ1E7SURLO2lCRWdCO1NGRztDRFE7QUlFO21CQ0c7TURPO3VDRWU7eUJDTztpQkRFO1dGSTtVSVEseUNKO0NKUztVU2lDLHVDVCJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkNpcmNsZSIsIkNpcmNsZSNjb25zdHJ1Y3RvciIsIkNpcmNsZSNfb25Mb25nUHJlc3MiLCJzdGF0ZS5wYW4uYWRkTGlzdGVuZXIkYXJndW1lbnRfMCIsIlBhblJlc3BvbmRlci5jcmVhdGUkYXJndW1lbnRfMC5vblBhblJlc3BvbmRlclJlbGVhc2UiLCJzZXRTdGF0ZSRhcmd1bWVudF8xIiwiQ2lyY2xlI3JlbmRlciIsImhhbmRsZXJzLm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXIiLCJoYW5kbGVycy5vblJlc3BvbmRlckdyYW50IiwiaGFuZGxlcnMub25SZXNwb25kZXJSZWxlYXNlIiwiQ2lyY2xlI190b2dnbGVJc0FjdGl2ZSIsIkFuaW1hdGVkLnNwcmluZy5zdGFydCRhcmd1bWVudF8wIiwiQW5FeEFwcCIsImNvbnN0cnVjdG9yIiwicmVuZGVyIiwic3RhdGUua2V5cy5tYXAkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+Iiwic2V0U3RhdGUkYXJndW1lbnRfMCIsIkNpcmNsZS5wcm9wcy5vbkRlYWN0aXZhdGUiLCJWaWV3LnByb3BzLm9uTGF5b3V0IiwiX29uTW92ZSIsImRpc3RhbmNlIiwibW92ZVRvQ2xvc2VzdCIsImtleXMuZm9yRWFjaCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDMEI7RUNHO0dETztpQkVFOytCQ0U7S0RHO2lDRW9CO1dGaUI7TUdHO09IRTtHRkU7RU1FO21DQ1ksMEJEOzBCRUM7U0ZPOzRCR0M7U0hRO0dOdUU7b0JVQztlQ087T0RHOytETEc7T0tPO0dWRTtDREM7QWFFO0VDQztHRFc7RUVFO3dDQ0M7cUJDVTswQkNFO2FERztXREM7S0RpQjt3QklnQjtXSkU7b0JLUSxrREw7R0ZLO1lRRTtHUk07Q2JDO0FzQk87Q3RCSTtBdUJFO2VDSztHRFc7Q3ZCTztJZXVEO0tmRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFuRXhTZXQiLCJjb25zdHJ1Y3RvciIsInJhbmRDb2xvciIsIm1hcCRhcmd1bWVudF8wIiwicmVuZGVyIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCIsIlBhblJlc3BvbmRlci5jcmVhdGUkYXJndW1lbnRfMC5vblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyIiwiUGFuUmVzcG9uZGVyLmNyZWF0ZSRhcmd1bWVudF8wLm9uUGFuUmVzcG9uZGVyR3JhbnQiLCJQYW5SZXNwb25kZXIuY3JlYXRlJGFyZ3VtZW50XzAub25QYW5SZXNwb25kZXJSZWxlYXNlIl0sIm1hcHBpbmdzIjoiQUFBO0FDeUI7RUNDO0lDRTttQ0NDLDJDRDtLREU7R0RLO0VJQztHSmdDO0VLRTtvQ0NHLHlCRDsyQkVDO09GVzs2QkdLO09IVztHTEU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQW5FeFRpbHQiLCJjb25zdHJ1Y3RvciIsIlBhblJlc3BvbmRlci5jcmVhdGUkYXJndW1lbnRfMC5vblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyIiwiUGFuUmVzcG9uZGVyLmNyZWF0ZSRhcmd1bWVudF8wLm9uUGFuUmVzcG9uZGVyR3JhbnQiLCJQYW5SZXNwb25kZXIuY3JlYXRlJGFyZ3VtZW50XzAub25QYW5SZXNwb25kZXJSZWxlYXNlIiwic3RhdGUucGFuWC5hZGRMaXN0ZW5lciRhcmd1bWVudF8wIiwiX3N0YXJ0QnVybnNab29tIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2U7RUNDO29DQ1MsVUQ7MkJFQztPRlk7NkJHSztvRENtQjtTRGE7T0hDO0dERTtFTUU7R05XO0VPRTtHUEU7RVFFO0dSMEM7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwibWFwJGFyZ3VtZW50XzAiLCJBbkV4Qm9iYmxlIiwiY29uc3RydWN0b3IiLCJCT0JCTEVfU1BPVFMubWFwJGFyZ3VtZW50XzAiLCJib2JibGVQYW5MaXN0ZW5lciIsInJlbGVhc2VCb2JibGUiLCJzdGF0ZS5ib2JibGVzLmZvckVhY2gkYXJndW1lbnRfMCIsIlBhblJlc3BvbmRlci5jcmVhdGUkYXJndW1lbnRfMC5vblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyIiwiUGFuUmVzcG9uZGVyLmNyZWF0ZSRhcmd1bWVudF8wLm9uUGFuUmVzcG9uZGVyR3JhbnQiLCJCT0JCTEVfU1BPVFMuZm9yRWFjaCRhcmd1bWVudF8wIiwicmVuZGVyIiwic3RhdGUuYm9iYmxlcy5tYXAkYXJndW1lbnRfMCIsImNvbXB1dGVOZXdTZWxlY3RlZCIsInJhbmRDb2xvciJdLCJtYXBwaW5ncyI6IkFBQTtpRENrQjtDRFM7QUVFO0VDQzswQ0NJO0tERTs4QkVFO0tGdUI7MEJHQztpQ0NDO09ETztLSEM7b0NLRSxVTDsyQk1DOzZCQ0M7U0RVO09OQztHRFE7RVNFO2dDQ0c7U0RpQjtHVEc7Q0ZDO0Fhb0I7eUJITTtLR087Q2JHO0FjRTsrQmJDLDJDYTtDZEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBbkV4U2Nyb2xsIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDc0I7RUNHO0dENkQ7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQW5FeENoYWluZWQiLCJjb25zdHJ1Y3RvciIsInJlbGVhc2VDaGFpbiIsIlBhblJlc3BvbmRlci5jcmVhdGUkYXJndW1lbnRfMC5vblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyIiwiUGFuUmVzcG9uZGVyLmNyZWF0ZSRhcmd1bWVudF8wLm9uUGFuUmVzcG9uZGVyR3JhbnQiLCJzdGF0ZS5zdGlja2Vycy5fLnN0b3BBbmltYXRpb24kYXJndW1lbnRfMCIsInJlbmRlciIsInN0YXRlLnN0aWNrZXJzLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDa0I7RUNDO3lCQ21CO0tEa0I7b0NFRSxVRjsyQkdDOzZDQ0M7U0RHO09IQztHRFE7RU1FO2lDQ0c7U0RnQjtHTkc7Q0RDIn1dLG51bGwsbnVsbCxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkNvbG9yU2NoZW1lU3Vic2NyaXB0aW9uIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJBcHBlYXJhbmNlLmFkZENoYW5nZUxpc3RlbmVyJGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsIlJOVGVzdGVyVGhlbWVDb250ZXh0LkNvbnN1bWVyLnByb3BzLmNoaWxkcmVuIiwiVGhlbWVkQ29udGFpbmVyIiwiVGhlbWVkVGV4dCIsIkFwcGVhcmFuY2VWaWFIb29rIiwiQ29sb3JTaG93Y2FzZSIsIk9iamVjdC5rZXlzLm1hcCRhcmd1bWVudF8wIiwiVG9nZ2xlTmF0aXZlQXBwZWFyYW5jZSIsIkJ1dHRvbi5wcm9wcy5vblByZXNzIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0I7WUNLO01DRTtPREc7V0VHLDRCRjtHREM7T0lJO09KTTtDREc7d0JNRTtLREU7S0NXO0NORTttQk9FO0tGRTtLRUU7Q1BFOzBCUUU7Q1JVO3NCU0U7S0pFO2tDS1U7V0xpQztLSUc7Q1RFOytCV0U7WVRLO0dTRTtpQkNRLG1DRDtpQkNJLGtDRDtxQ0NFLGdDRDtDWEc7SWFTO0tiRTtJYUk7S2JFO0lhSTtXUkc7V1FRO0tiRztJYUk7S2JVO0lhSTtLYlU7SWFLO0tiVztJYUs7S2JFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQXBwU3RhdGVTdWJzY3JpcHRpb24iLCJBcHBTdGF0ZVN1YnNjcmlwdGlvbiNjb21wb25lbnREaWRNb3VudCIsIkFwcFN0YXRlU3Vic2NyaXB0aW9uI2NvbXBvbmVudFdpbGxVbm1vdW50IiwiQXBwU3RhdGVTdWJzY3JpcHRpb24jX2hhbmRsZU1lbW9yeVdhcm5pbmciLCJBcHBTdGF0ZVN1YnNjcmlwdGlvbiNfaGFuZGxlQmx1ciIsIkFwcFN0YXRlU3Vic2NyaXB0aW9uI19oYW5kbGVGb2N1cyIsIkFwcFN0YXRlU3Vic2NyaXB0aW9uI19oYW5kbGVBcHBTdGF0ZUNoYW5nZSIsIkFwcFN0YXRlU3Vic2NyaXB0aW9uI3JlbmRlciIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ21CO0VDa0I7R0RXO0VFRTtHRk07eUJHRTtHSEU7Z0JJRTtHSkk7aUJLRTtHTEk7MEJNRTtHTk87RU9FO0dQMkI7Q0RDO0lTVTtLVEU7SVNNO0tURTtJU0k7S1RFO0lTTztLVEU7SVNPO0tURSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtjQ3FOO09ETztjQ007T0RPO2NDTTtPRE87Y0NNO09ETztjQ007T0RPO2NDTztPRE87Y0NPO09ETztjQ087T0RRO2NDTTtPRFM7Y0NNO09ETztjQ087T0RPO2NDTTtPRE87Y0NNO09ETztjQ007T0RPO2NDTTtPRE87Y0NNO09ETztjQ087T0RPIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0lDaUY7S0RFO0lDSztLREU7SUNLO0tERTtJQ0s7S0RPO0lDTTtLRE07SUNPO0tEUTtJQ007S0RRO0lDTTtLRFE7SUNNO0tEUTtJQ007S0RRIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyIiwiQnV0dG9uLnByb3BzLm9uUHJlc3MiXSwibWFwcGluZ3MiOiJBQUE7SUN3QjttQkNJO1dETTtLREcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZW5kZXIiLCJCdXR0b24ucHJvcHMub25QcmVzcyIsIkRldlNldHRpbmdzLmFkZE1lbnVJdGVtJGFyZ3VtZW50XzEiXSwibWFwcGluZ3MiOiJBQUE7SUNvQjttQkNJOzhEQ0M7YURFO1dEQztLREc7SUNJO21CQ0k7V0RFO0tERyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkRpbWVuc2lvbnNTdWJzY3JpcHRpb24iLCJ1c2VTdGF0ZSRhcmd1bWVudF8wIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJEaW1lbnNpb25zLmFkZEV2ZW50TGlzdGVuZXIkYXJndW1lbnRfMSIsIjxhbm9ueW1vdXM+IiwiRGltZW5zaW9uc1ZpYUhvb2siLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNnQjttQ0NDLCtCRDtZRUU7K0RDQztLREU7V0VFLDJCRjtHRkM7Q0RHOzBCTUU7Q05HO0lPUztLUEU7SU9JO0tQRTtJT0k7S1BFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJCZW5jaGFyayIsIkJ1dHRvbi5wcm9wcy5vblByZXNzIiwic2V0T2JzZXJ2aW5nJGFyZ3VtZW50XzAiLCJBcnJheS5maWxsLm1hcCRhcmd1bWVudF8wIiwiSXRlbSIsInVzZUxheW91dEVmZmVjdCRhcmd1bWVudF8wIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+Il0sIm1hcHBpbmdzIjoiQUFBO09DMEI7Q0RFO0FFSzttQkNRLG1CQyx1QkQsQ0Q7ZUdNO1dIWTtDRkk7QU1FO2tCQ0k7TUNRO09ESTtXRVM7S0ZFO0dEQztDTmMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZW5kZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlck1ETkV4YW1wbGUiLCJMaXN0SXRlbSIsInVzZUxheW91dEVmZmVjdCRhcmd1bWVudF8wIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIkYXJndW1lbnRfMCIsImVudHJpZXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiPGFub255bW91cz4iLCJJbnRlcnNlY3Rpb25SYXRpb0luZGljYXRvciIsImJ1aWxkVGhyZXNob2xkTGlzdCJdLCJtYXBwaW5ncyI6IkFBQTtPQzBCO0NERTtBRUs7Q0ZjO0FHRTtrQkNTO01DTzt3QkNDO1NERTtPREM7V0dPO0tIRTtHREM7Q0hzQjtBUUU7Q1JTO0FTRTtDVFUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZW5kZXIiLCJDb21wYXJpc29uLnByb3BzLmNoaWxkcmVuIiwiQ29tcGFyaXNvbiJdLCJtYXBwaW5ncyI6IkFBQTtJQ3VCO1dDRztXRGE7S0RHO0lDSTtXQ0c7V0RPO0tERztJQ0k7V0NLO1dEUTtLREc7SUNJO1dDRztXRFM7S0RHO0lDSTtXQ0c7V0RTO0tERztJQ0k7V0NLO1dEUztLREc7QUdJO0NIaUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJLZXlib2FyZEV2ZW50Vmlld2VyIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCJLZXlib2FyZC5hZGRMaXN0ZW5lciRhcmd1bWVudF8xIiwiPGFub255bW91cz4iLCJrZXlib2FyZFdpbGxTaG93SGlkZUV4YW1wbGUucmVuZGVyIiwia2V5Ym9hcmREaWRTaG93SGlkZUV4YW1wbGUucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBOzRCQzJCO1lDSzt5RENDO0tERztXRUMsMkJGO0dEQztZQ0U7eURDQztLREc7V0VDLDJCRjtHREM7Q0RxQjtVS0s7R0xLO1VNSztHTksifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJzaHVmZmxlQXJyYXkiLCJBZGRSZW1vdmVFeGFtcGxlIiwiQWRkUmVtb3ZlRXhhbXBsZSNjb25maWd1cmVOZXh0QW5pbWF0aW9uIiwiTGF5b3V0QW5pbWF0aW9uLmNvbmZpZ3VyZU5leHQkYXJndW1lbnRfMSIsIkFkZFJlbW92ZUV4YW1wbGUjX29uUHJlc3NBZGRWaWV3QW5pbWF0ZWQiLCJBZGRSZW1vdmVFeGFtcGxlI19vblByZXNzUmVtb3ZlVmlld0FuaW1hdGVkIiwiQWRkUmVtb3ZlRXhhbXBsZSNfb25QcmVzc1Jlb3JkZXJWaWV3c0FuaW1hdGVkIiwiQWRkUmVtb3ZlRXhhbXBsZSNfb25QcmVzc0FkZFZpZXciLCJzZXRTdGF0ZSRhcmd1bWVudF8wIiwiQWRkUmVtb3ZlRXhhbXBsZSNfb25QcmVzc1JlbW92ZVZpZXciLCJBZGRSZW1vdmVFeGFtcGxlI19vblByZXNzUmVvcmRlclZpZXdzIiwiQWRkUmVtb3ZlRXhhbXBsZSNyZW5kZXIiLCJzdGF0ZS52aWV3cy5tYXAkYXJndW1lbnRfMCIsIlZpZXcucHJvcHMub25MYXlvdXQiLCJSZXBhcmVudGluZ0V4YW1wbGUiLCJSZXBhcmVudGluZ0V4YW1wbGUjX29uUHJlc3NUb2dnbGVBbmltYXRlZCIsIlJlcGFyZW50aW5nRXhhbXBsZSNfb25QcmVzc1RvZ2dsZSIsIlJlcGFyZW50aW5nRXhhbXBsZSNyZW5kZXIiLCJHcmVlblNxdWFyZSIsIkJsdWVTcXVhcmUiLCJDcm9zc0ZhZGVFeGFtcGxlIiwiQ3Jvc3NGYWRlRXhhbXBsZSNfb25QcmVzc1RvZ2dsZSIsIkxheW91dEFuaW1hdGlvbi5lYXNlSW5FYXNlT3V0JGFyZ3VtZW50XzAiLCJDcm9zc0ZhZGVFeGFtcGxlI3JlbmRlciIsIkxheW91dFVwZGF0ZUV4YW1wbGUiLCJMYXlvdXRVcGRhdGVFeGFtcGxlI2NvbXBvbmVudFdpbGxVbm1vdW50IiwiTGF5b3V0VXBkYXRlRXhhbXBsZSNfY2xlYXJUaW1lb3V0IiwiTGF5b3V0VXBkYXRlRXhhbXBsZSNfb25QcmVzc1RvZ2dsZSIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsIkxheW91dFVwZGF0ZUV4YW1wbGUjcmVuZGVyIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDOEI7Q0RrQjtBRUU7RUNNO01DUSx1REQ7R0RFOzRCR0U7R0hHOytCSUU7R0pHO2lDS0U7R0xHO29CTUU7a0JDQztNREc7R05DO3VCUUU7a0JEQyw0Q0M7R1JDO3lCU0U7a0JGQyw2Q0U7R1RDO0VVRTt1Q0NDO2tCQ0ksa0NEO0tERztHVm9DO0NGQztBZU07MkJDUTtNWlEseURZO0dERzttQkVFO2tCUkMsd0NRO0dGQztFR0U7R0hzQjtDZkM7b0JtQkU7Q25CSTttQm9CRTtDcEJJO0FxQk07bUJDSztrQ0NDO3FEREM7a0JiRSxvQ2E7R0RDO0VHRTtHSGE7Q3JCQztBeUJPO0VDVztHREU7a0JFRTtHRks7bUJHRTtNeEJXLDBEd0I7OEJDRyxpQ0Q7R0hDO0VLRTtHTGlCO0N6QkM7SStCZ0Q7Sy9CRTtJK0JJO0svQkU7SStCSTtLL0JFO0krQkk7Sy9CRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkNpcmNsZSIsIkNpcmNsZSNyZW5kZXIiLCJDaXJjbGVCbG9jayIsIkNpcmNsZUJsb2NrI3JlbmRlciIsIkxheW91dEV4YW1wbGUiLCJyZW5kZXIiLCJvb29vb29vb29vb29vb29vLnNwbGl0Lm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO0FDaUI7RUNDO0dEYztDREM7QUdFO0VDQztHRFc7Q0hDO0FLRTtFQ0M7OENDMkg7YURFO0dESztDTEM7WU1tQjtLTkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJPcGVuVVJMQnV0dG9uIiwiT3BlblVSTEJ1dHRvbiNoYW5kbGVDbGljayIsIkxpbmtpbmcuY2FuT3BlblVSTC50aGVuJGFyZ3VtZW50XzAiLCJPcGVuVVJMQnV0dG9uI3JlbmRlciIsIk9wZW5TZXR0aW5nc0V4YW1wbGUiLCJPcGVuU2V0dGluZ3NFeGFtcGxlI29wZW5TZXR0aW5ncyIsIk9wZW5TZXR0aW5nc0V4YW1wbGUjcmVuZGVyIiwiU2VuZEludGVudEJ1dHRvbiIsIlNlbmRJbnRlbnRCdXR0b24jaGFuZGxlSW50ZW50IiwiU2VuZEludGVudEJ1dHRvbiNyZW5kZXIiLCJJbnRlbnRBbmRyb2lkRXhhbXBsZSIsIkludGVudEFuZHJvaWRFeGFtcGxlI3JlbmRlciIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQzRCO2dCQ0M7NENDQztLRFk7R0RDO0VHRTtHSFE7Q0RDO0FLRTtFQ0M7R0RFO0VFRTtHRkU7Q0xDO0FRRTtpQkNDO0dETTtFRUU7R0ZRO0NSQztBV0U7RUNDO0dEMkI7Q1hDO1lhNEI7S2JFO1lhSTtLYkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZW5kZXIiLCJnZW5lcmF0ZUlkIiwidXNlVGVtcG9yYXJ5VmFsdWUiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwiTXV0YXRpb25PYnNlcnZlckV4YW1wbGUiLCJNdXRhdGlvbk9ic2VydmVyJGFyZ3VtZW50XzAiLCJyZWNvcmRzLmZvckVhY2gkYXJndW1lbnRfMCIsIkV4YW1wbGVJdGVtLnByb3BzLm9uUmVtb3ZlIiwiRXhhbXBsZUl0ZW0iLCJQcmVzc2FibGUucHJvcHMub25Mb25nUHJlc3MiLCJQcmVzc2FibGUucHJvcHMub25QcmVzcyIsInNldENoaWxkcmVuJGFyZ3VtZW50XzAiLCJwcmV2Q2hpbGRyZW4yLmZpbHRlciRhcmd1bWVudF8wIiwiY2hpbGRyZW4ubWFwJGFyZ3VtZW50XzAiLCJub2RlTGlzdFRvU3RyaW5nIiwibWFwJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7T0N5QjtDREU7QUVHO0NGTztBR0k7WUNHO2lDQ0M7S0RFO1dFQyw2QkY7R0RFO0NIRztBT0U7WUhNO2tESU07c0JDRTtPRGlCO0tKRTtXRVE7S0ZJO0dHQzt3QkdZLDJCSDtDUFU7QVdFO3FCQ2U7U0RFO2lCRUM7c0JDRTswQkpROzhCSUM7eUNDQyxzQkQsQ0o7aUJJRTtXREc7U0ZDO3NCS1Esc0JMO0NYSTtBaUJFO01DRyx3RUQ7Q2pCRyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsIm9ic2VydmUiLCJfdW5vYnNlcnZlIiwiZGlzY29ubmVjdCIsIl9nZXRPckNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXJJZCIsIl9fZ2V0T2JzZXJ2ZXJJRCJdLCJtYXBwaW5ncyI6IkFBQTtlQzBDO0VDSztHRGM7RUVVO0dGMkQ7RUdFO0dIdUI7RUlNO0dKSTtFS0U7R0xVO0VNRztHTkU7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVnaXN0ZXJPYnNlcnZlciIsInVucmVnaXN0ZXJPYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJub3RpZnlNdXRhdGlvbk9ic2VydmVycyIsImRvTm90aWZ5TXV0YXRpb25PYnNlcnZlcnMiLCJ3YXJuTm9OYXRpdmVNdXRhdGlvbk9ic2VydmVyIl0sIm1hcHBpbmdzIjoiQUFBO09DaUQ7Q0RXO09FTztDRlU7T0dFO0NIaUQ7T0lFO0NKMkI7QUtNO0NMTztBTUU7Q05zQztBT0U7Q1BLIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTXV0YXRpb25SZWNvcmQiLCJjb25zdHJ1Y3RvciIsImdldF9fYWRkZWROb2RlcyIsImdldF9fYXR0cmlidXRlTmFtZSIsImdldF9fbmV4dFNpYmxpbmciLCJnZXRfX29sZFZhbHVlIiwiZ2V0X19wcmV2aW91c1NpYmxpbmciLCJnZXRfX3JlbW92ZWROb2RlcyIsImdldF9fdGFyZ2V0IiwiZ2V0X190eXBlIiwiY3JlYXRlTXV0YXRpb25SZWNvcmQiXSwibWFwcGluZ3MiOiJBQUE7ZUM0QjtFQ0s7R0RXO0VFRTtHRkU7RUdFO0dIRTtFSUU7R0pFO0VLRTtHTEU7RU1FO0dORTtFT0U7R1BFO0VRRTtHUkU7RVNFO0dURTtDREM7T1dFO0NYSSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJlbmRlciIsIlZpc3VhbENvbXBsZXRpb25FeGFtcGxlIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsIlZpc3VhbENvbXBsZXRpb25FeGFtcGxlU2NyZWVuIiwiVmlldy5wcm9wcy5yZWYiLCJGb3JjZVN1c3BlbnNlIiwiZ2VuZXJhdGVRdWVyeUlEIiwidXNlRm9yY2VTdXNwZW5zZSIsIlByb21pc2UkYXJndW1lbnRfMCIsInNldFRpbWVvdXQkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtPQzhCO0NETTtBRU07WUNDO1dDQyxrQ0Q7R0RDO0NGUTtBS0U7V0NTO09ETTtDTDJDO0FPRTtDUE87QVFHO0NSRztBU29DOzJCQ0s7bUJDQztTREc7T0RDO0NUUSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlZDT3ZlcmxheUV4YW1wbGUiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsInByb3BzLnZjVHJhY2tlci5vblVwZGF0ZVZpc3VhbEVsZW1lbnRzJGFyZ3VtZW50XzAiLCJ2aXN1YWxFbGVtZW50cy5tYXAkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtlQ2tCO1lDTzsyQ0NFO0tERTtHREM7MEJHSTtPSGE7Q0RHIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZGVidWciLCJWQ1RyYWNrZXIiLCJWQ1RyYWNrZXIjY29uc3RydWN0b3IiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciRhcmd1bWVudF8wIiwiTXV0YXRpb25PYnNlcnZlciRhcmd1bWVudF8wIiwiVkNUcmFja2VyI19yZWdpc3RlclZpc3VhbEVsZW1lbnQiLCJWQ1RyYWNrZXIjX3VucmVnaXN0ZXJWaXN1YWxFbGVtZW50IiwiVkNUcmFja2VyI29uVXBkYXRlVmlzdWFsRWxlbWVudHMiLCJWQ1RyYWNrZXIjYWRkTXV0YXRpb25Sb290IiwiVkNUcmFja2VyI2dldFZpc3VhbEVsZW1lbnRzIiwiVkNUcmFja2VyI2Rpc2Nvbm5lY3QiXSwibWFwcGluZ3MiOiJBQUE7QUNzQjtDREU7ZUVFO0VDUTtNQ0s7T0RZO2tERUc7S0ZvQjtHREM7RUlFO0dKa0I7RUtFO0dMRztFTUU7R05JO0VPRTtHUFc7RVFFO0dSRTtFU0U7R1RHO0NGQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiY29uc3RydWN0b3IiLCJnZXRfX3Jvb3QiLCJnZXRfX3Jvb3RNYXJnaW4iLCJnZXRfX3RocmVzaG9sZHMiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiZGlzY29ubmVjdCIsIl9nZXRPckNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVySWQiLCJfX2dldE9ic2VydmVySUQiLCJub3JtYWxpemVUaHJlc2hvbGRzIiwibm9ybWFsaXplVGhyZXNob2xkVmFsdWUiXSwibWFwcGluZ3MiOiJBQUE7ZUNnRDtFQ007R0RnQztFRVU7R0ZFO0VHVztHSEU7RUlVO0dKRTtFS1M7R0xpQjtFTU07R04yQjtFT0s7R1BJO0VRRTtHUlU7RVNHO0dURTtDREM7QVdXO0NYVTtBWUU7Q1ptQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldFRhcmdldEZyb21JbnN0YW5jZUhhbmRsZSIsInNldFRhcmdldEZvckluc3RhbmNlSGFuZGxlIiwidW5zZXRUYXJnZXRGb3JJbnN0YW5jZUhhbmRsZSIsInJlZ2lzdGVyT2JzZXJ2ZXIiLCJ1bnJlZ2lzdGVyT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwibm90aWZ5SW50ZXJzZWN0aW9uT2JzZXJ2ZXJzIiwiZG9Ob3RpZnlJbnRlcnNlY3Rpb25PYnNlcnZlcnMiLCJ3YXJuTm9OYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ29EO0NETTtBRUU7Q0ZPO0FHRTtDSEk7T0llO0NKVztPS087Q0xVO09NTztDTjJEO09PRTtDUHVDO0FRTTtDUlM7QVNFO0NUbUQ7QVVFO0NWSyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiJdLCJtYXBwaW5ncyI6IkFBQSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkiLCJjb25zdHJ1Y3RvciIsImdldF9fYm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0X19pbnRlcnNlY3Rpb25SYXRpbyIsImdldF9faW50ZXJzZWN0aW9uUmVjdCIsImdldF9faXNJbnRlcnNlY3RpbmciLCJnZXRfX3Jvb3RCb3VuZHMiLCJnZXRfX3RhcmdldCIsImdldF9fdGltZSIsImNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyRW50cnkiXSwibWFwcGluZ3MiOiJBQUE7ZUN5QjtFQ1M7R0RNO0VFTztHRlE7RUdLO0dIYztFSUs7R0phO0VLVTtHTEU7RU1LO0dOUTtFT0s7R1BFO0VRTTtHUkU7Q0RDO09VRTtDVksifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUZXN0ZXIiLCJUZXN0ZXIjb25QcmVzcyIsIlRlc3RlciNyZW5kZXIiLCJWYWx1ZUxpc3RlbmVyRXhhbXBsZSIsIlZhbHVlTGlzdGVuZXJFeGFtcGxlI2NvbXBvbmVudERpZE1vdW50Iiwic3RhdGUuYW5pbS5hZGRMaXN0ZW5lciRhcmd1bWVudF8wIiwiVmFsdWVMaXN0ZW5lckV4YW1wbGUjY29tcG9uZW50V2lsbFVubW91bnQiLCJWYWx1ZUxpc3RlbmVyRXhhbXBsZSNfb25QcmVzcyIsIlZhbHVlTGlzdGVuZXJFeGFtcGxlI3JlbmRlciIsIkxvb3BFeGFtcGxlIiwiTG9vcEV4YW1wbGUjY29tcG9uZW50RGlkTW91bnQiLCJMb29wRXhhbXBsZSNyZW5kZXIiLCJJbnRlcm5hbFNldHRpbmdzIiwiRXZlbnRFeGFtcGxlIiwiRXZlbnRFeGFtcGxlI3JlbmRlciIsIlRyYWNraW5nRXhhbXBsZSIsIlRyYWNraW5nRXhhbXBsZSNjb21wb25lbnREaWRNb3VudCIsIlRyYWNraW5nRXhhbXBsZSNvblByZXNzIiwiVHJhY2tpbmdFeGFtcGxlI3JlbmRlckJsb2NrIiwiVHJhY2tpbmdFeGFtcGxlI3JlbmRlciIsInJlbmRlciIsIlRlc3Rlci5wcm9wcy5jaGlsZHJlbiJdLCJtYXBwaW5ncyI6IkFBQTtBQzBCO1lDUTtHRG1CO0VFRTtHRmlCO0NEQztBSUU7RUNPO2dDQ0MsdUNEO0dEQztFR0U7R0hFO2FJRTtHSlc7RUtFO0dMa0I7Q0pDO0FVRTtFQ0s7R0RRO0VFRTtHRmdCO0NWQzt5QmFFO0NibUM7QWNFO0VDSztHRHFDO0NkQztBZ0JFO0VDa0I7R0RpQjtZRUU7R0ZLO2dCR0U7R0hZO0VJRTtHSm1CO0NoQkM7WXFCOEI7V0NHO1dEc0M7S3JCRztZcUJJO1dDRztXRGdDO0tyQkc7WXFCSTtXQ0c7V0RnQztLckJHO1lxQkk7V0NHO1dEaUI7S3JCRztZcUJJO1dDRztXRFM7S3JCRztZcUJJO1dDRztXRGdCO0tyQkc7WXFCSTtXQ0c7V0RnQjtLckJHO1lxQkk7V0NHO1dEZ0I7S3JCRztZcUJJO1dDTTtXRGE7S3JCRztZcUJJO0tyQkU7WXFCSTtLckJFO1lxQkk7S3JCRTtZcUJJO0tyQkU7WXFCSTtLckJFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UZXN0ZXJTZXR0aW5nU3dpdGNoUm93Il0sIm1hcHBpbmdzIjoiQUFBO2lDQzRCO0NEWSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInVzZUpzU3RhbGxzIiwiUmVhY3QudXNlRWZmZWN0JGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsIm9uRGlzYWJsZUZvcmNlSnNTdGFsbHMiLCJzZXRTdGFsbHNTdGF0ZSRhcmd1bWVudF8wIiwib25FbmFibGVGb3JjZUpzU3RhbGxzIiwic2V0SW50ZXJ2YWwkYXJndW1lbnRfMCIsIm9uRW5hYmxlSnNTdGFsbHNUcmFja2luZyIsIkpTRXZlbnRMb29wV2F0Y2hkb2cuYWRkSGFuZGxlciRhcmd1bWVudF8wLm9uU3RhbGwiLCJvbkRpc2FibGVKc1N0YWxsc1RyYWNraW5nIl0sIm1hcHBpbmdzIjoiQUFBO29CQ3dCO2tCQ1k7V0NDLG9DRDtHREM7SUdHLHFCQyw0Q0QsQ0g7a0RLSTttQ0NDO0tETTttQkRFLGtEQztHTEM7cURPRTttQkhLLHFDRztlQ0c7dUJKQztTSWEsQ0Q7R1BFO3NEU0U7R1RFO0NEUyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldFN0YXRzIiwicmVzZXQiLCJhZGRIYW5kbGVyIiwiaW5zdGFsbCIsIml0ZXJhdGlvbiIsImhhbmRsZXJzLmZvckVhY2gkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtZQ2lDO0dERTtTRUM7R0ZNO2NHQztHSEU7V0lDO0lDTzt5QkNXO1NERTt1QkNHO09ERTtLREc7R0pFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiT3JpZW50YXRpb25DaGFuZ2VFeGFtcGxlIiwiY29tcG9uZW50RGlkTW91bnQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIl9vbk9yaWVudGF0aW9uQ2hhbmdlIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTtFQ2U7R0RLO0VFRTtHRkU7eUJHRTtHSE07RUlFO0dKTTtDREM7SUtTO0tMRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBhblJlc3BvbmRlckV4YW1wbGUiLCJfaGFuZGxlU3RhcnRTaG91bGRTZXRQYW5SZXNwb25kZXIiLCJfaGFuZGxlTW92ZVNob3VsZFNldFBhblJlc3BvbmRlciIsIl9oYW5kbGVQYW5SZXNwb25kZXJHcmFudCIsIl9oYW5kbGVQYW5SZXNwb25kZXJNb3ZlIiwiX2hhbmRsZVBhblJlc3BvbmRlckVuZCIsInJlbmRlciIsIlZpZXcucHJvcHMucmVmIl0sIm1hcHBpbmdzIjoiQUFBO0FDc0M7c0NDWTtHRE07cUNFRTtHRk07NkJHRTtHSE87NEJJRTtHSks7MkJLRTtHTE07RU1XO2lCQ0s7YURFO0dOZ0I7Q0RDO1lPMEI7S1BFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUGxhdGZvcm1Db2xvcnNFeGFtcGxlIiwiY3JlYXRlVGFibGUiLCJGYWxsYmFja0NvbG9yc0V4YW1wbGUiLCJEeW5hbWljQ29sb3JzRXhhbXBsZSIsIlZhcmlhbnRDb2xvcnNFeGFtcGxlIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZ0I7RUNDO0dEMks7Q0RHO0FHRTtDSGlDO0FJRTtDSm1EO0FLRTtDTHlCO0lNd0I7S05FO0lNSTtLTkU7SU1JO0tORTtJTUk7S05FIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiRXhhbXBsZUJveCIsIkV4YW1wbGVCb3gjaGFuZGxlTG9nIiwiRXhhbXBsZUJveCNmbHVzaFJlYWN0Q2hhbmdlcyIsIkV4YW1wbGVCb3gjaGFuZGxlVG91Y2hDYXB0dXJlIiwiRXhhbXBsZUJveCNyZW5kZXIiLCJOb25lRXhhbXBsZSIsIk5vbmVFeGFtcGxlI3JlbmRlciIsIlZpZXcucHJvcHMub25Ub3VjaFN0YXJ0IiwiTm9uZVN0eWxlRXhhbXBsZSIsIk5vbmVTdHlsZUV4YW1wbGUjcmVuZGVyIiwiRGVtb1RleHQiLCJEZW1vVGV4dCNyZW5kZXIiLCJCb3hOb25lRXhhbXBsZSIsIkJveE5vbmVFeGFtcGxlI3JlbmRlciIsIkJveE5vbmVTdHlsZUV4YW1wbGUiLCJCb3hOb25lU3R5bGVFeGFtcGxlI3JlbmRlciIsIkJveE9ubHlFeGFtcGxlIiwiQm94T25seUV4YW1wbGUjcmVuZGVyIiwiQm94T25seVN0eWxlRXhhbXBsZSIsIkJveE9ubHlTdHlsZUV4YW1wbGUjcmVuZGVyIiwiT3ZlcmZsb3dFeGFtcGxlIiwiT3ZlcmZsb3dFeGFtcGxlI3JlbmRlciIsIk92ZXJmbG93VmlzaWJsZUV4YW1wbGUiLCJPdmVyZmxvd1Zpc2libGVFeGFtcGxlI3JlbmRlciIsIk92ZXJmbG93SGlkZGVuRXhhbXBsZSIsIk92ZXJmbG93SGlkZGVuRXhhbXBsZSNyZW5kZXIiLCJpbmZvVG9FeGFtcGxlIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDMkI7Y0NLO0dERztzQkVFO0dGRTt1QkdNO0dIRztFSUU7R0pnQjtDREM7QU1FO0VDQztzQkNHLCtDRDt3QkNLLHdDRDswQkNNLCtDRDtHRFM7Q05DO0FTRTtFQ0M7c0JGRywrQ0U7d0JGSSx3Q0U7MEJGVSwrQ0U7R0RTO0NUQztBV007RUNDO0dETTtDWEM7QWFFO0VDQztzQk5HLCtDTTt3Qk5LLDRDTTswQk5NLCtDTTswQk5NO2tFTUM7R0RRO0NiQztBZUU7RUNDO3NCUkcsK0NRO3dCUkksNENROzBCUlUsK0NROzBCUks7a0VRQztHRFE7Q2ZDO0FpQkU7RUNDO3NCVkcsK0NVO3dCVkssNENVOzBCVkksK0NVOzBCVlE7a0VVQztHRFU7Q2pCQztBbUJFO0VDQztzQlpHLCtDWTt3QlpJLDRDWTswQlpJLCtDWTswQlpPO2tFWUM7R0RjO0NuQkM7QXFCTztFQ0M7c0JkSSx3RGM7d0JkUSwrQ2M7d0JkSyxpRGM7MEJkSTsrRGNDO0dEUTtDckJDO0F1QkU7RUNDO0dERTtDdkJDO0F5QkU7RUNDO0dERTtDekJDO3NCMkI0RDtZQ0k7S0RFO0MzQkUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJBcHBQcm9wZXJ0aWVzVXBkYXRlRXhhbXBsZSIsIkFwcFByb3BlcnRpZXNVcGRhdGVFeGFtcGxlI3JlbmRlciIsIlJvb3RWaWV3U2l6ZUZsZXhpYmlsaXR5RXhhbXBsZSIsIlJvb3RWaWV3U2l6ZUZsZXhpYmlsaXR5RXhhbXBsZSNyZW5kZXIiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNvQjtFQ0M7R0RtQjtDREM7QUdFO0VDQztHRG1CO0NIQztJS3VCO0tMRTtJS0k7S0xFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiTGlzdEl0ZW0iLCJ3aXRoUlRMU3RhdGUkYXJndW1lbnRfMCIsIkFuaW1hdGlvbkJsb2NrIiwid2l0aFJUTFN0YXRlIiwiPGFub255bW91cz4iLCJjb25zdHJ1Y3RvciIsInJlbmRlciIsInNldFJUTCIsIlJUTFRvZ2dsZXIiLCJ0b2dnbGVSVEwiLCJSVExUb2dnbGVFeGFtcGxlIiwiUlRMVG9nZ2xlRXhhbXBsZSNjb25zdHJ1Y3RvciIsIlJUTFRvZ2dsZUV4YW1wbGUjcmVuZGVyIiwiUlRMVG9nZ2xlRXhhbXBsZSNfb25EaXJlY3Rpb25DaGFuZ2UiLCJBbmltYXRpb25FeGFtcGxlIiwiQW5pbWF0aW9uRXhhbXBsZSNjb25zdHJ1Y3RvciIsIkFuaW1hdGlvbkV4YW1wbGUjcmVuZGVyIiwiQW5pbWF0aW9uRXhhbXBsZSNfb25MYXlvdXQiLCJBbmltYXRpb25FeGFtcGxlI19saW5lYXJUYXAiLCJkaXJlY3Rpb25TdHlsZSJdLCJtYXBwaW5ncyI6IkFBQTtBQzRDO0NEa0I7MENFRTtDRnNCO3NDRUU7Q0ZVO2tDRUU7Q0YwQjtBR0U7Q0hjO0FJTTtTQ087SUNNO0tESztJRUc7cUJDQyxpREQ7S0ZJO0dEQztDSkM7bUJTRTtvQkNVLG9CRDtDVFM7QVdFO0VDQztHRE07RUVFO0dGb0I7dUJHRTtHSFM7Q1hDOzJDRUU7Q0ZVO3dDRUU7Q0ZFO0FlRTtFQ0M7R0RRO0VFRTtHRmlCO2NHRTtHSEk7ZUlFO0dKZTtDZkM7b0NFRTtDRmtDO21DRUU7Q0ZnQztxQ0VFO0NGZ0Q7d0NFRTtDRnFCO3dDRUU7Q0Z3Qjt3Q0VFO0NGMkI7K0NFRTtDRjJCO21DRUU7Q0ZrQzt1Qm9CRTt1RXBCQztZTytIO0tQRTtZT0k7S1BFO1lPTTtLUEU7WU9NO0tQTTtZT007S1BNO1lPSztLUEU7WU9JO0tQRTtZT0s7S1BFO1lPSTtLUEU7WU9JO0tQRTtZT0k7S1BFO1lPSTtLUEU7WU9JO0tQRTtZT0k7S1BFO1lPSTtLUEU7WU9JO0tQRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInNoYXJlTWVzc2FnZSIsInNoYXJlVGV4dCIsIlNoYXJlTWVzc2FnZVdpdGhvdXRUaXRsZSIsIlNoYXJlTWVzc2FnZVdpdGhUaXRsZSIsIlNoYXJlZEFjdGlvbiIsInNoYXJlZEFjdGlvbiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtxQkNlO0NETztrQkVFO0NGaUI7aUNHRTtDSGlCOzhCSUU7Q0ppQjtxQktFO3VCQ0c7R0R3QjtDTFk7SU9vQjtLUEU7SU9JO0tQRTtJT0k7S1BFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiU2NyZWVuc2hvdEV4YW1wbGUiLCJTY3JlZW5zaG90RXhhbXBsZSNyZW5kZXIiLCJSTlRlc3RlclRoZW1lQ29udGV4dC5Db25zdW1lci5wcm9wcy5jaGlsZHJlbiIsIlNjcmVlbnNob3RFeGFtcGxlI3Rha2VTY3JlZW5zaG90IiwiU2NyZWVuc2hvdE1hbmFnZXIudGFrZVNjcmVlbnNob3QudGhlbiRhcmd1bWVudF8wIiwiU2NyZWVuc2hvdE1hbmFnZXIudGFrZVNjcmVlbnNob3QudGhlbi5fY2F0Y2gkYXJndW1lbnRfMCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2lCO0VDSztTQ0c7U0RZO0dERzttQkdFO1lDRSwyQkQ7YUVDLDJCRjtHSEM7Q0RDO0lPc0I7S1BFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiYnVybkNQVSIsIlJlcXVlc3RJZGxlQ2FsbGJhY2tUZXN0ZXIiLCJSZXF1ZXN0SWRsZUNhbGxiYWNrVGVzdGVyI2NvbXBvbmVudFdpbGxVbm1vdW50IiwiUmVxdWVzdElkbGVDYWxsYmFja1Rlc3RlciNyZW5kZXIiLCJSZXF1ZXN0SWRsZUNhbGxiYWNrVGVzdGVyI19ydW4iLCJyZXF1ZXN0SWRsZUNhbGxiYWNrJGFyZ3VtZW50XzAiLCJSZXF1ZXN0SWRsZUNhbGxiYWNrVGVzdGVyI19ydW5XaXRoVGltZW91dCIsIlJlcXVlc3RJZGxlQ2FsbGJhY2tUZXN0ZXIjX3J1bkJhY2tncm91bmQiLCJoYW5kbGVyIiwiUmVxdWVzdElkbGVDYWxsYmFja1Rlc3RlciNfc3RvcEJhY2tncm91bmQiLCJUaW1lclRlc3RlciIsIlRpbWVyVGVzdGVyI3JlbmRlciIsIlRpbWVyVGVzdGVyI2NvbXBvbmVudFdpbGxVbm1vdW50IiwiVGltZXJUZXN0ZXIjX3J1biIsIl90aW1lckZuIiwiZm9yY2VVcGRhdGUkYXJndW1lbnRfMCIsIlRpbWVyVGVzdGVyI2NsZWFyIiwiSW50ZXJ2YWxFeGFtcGxlIiwiSW50ZXJ2YWxFeGFtcGxlI3JlbmRlciIsIkludGVydmFsRXhhbXBsZSNfcmVuZGVyVGltZXIiLCJUaW1lclRlc3Rlci5wcm9wcy5yZWYiLCJSTlRlc3RlckJ1dHRvbi5wcm9wcy5vblByZXNzIiwiSW50ZXJ2YWxFeGFtcGxlI190b2dnbGVUaW1lciIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2dCO0NERztBRUs7RUNXO0dESztFRUU7R0Y4QjtFR0U7MENDTTtLRFU7R0hDO29CS0U7TURPO09DTTtHTEk7bUJNRTtvQkNNO0tEYztHTkU7b0JRRTtHUk07Q0ZDO0FXTztFQ1U7R0RRO0VFRTtHRm9CO1NHRTt3QkNZO1NERTt3QkNFO1NERTt3QkNHO1NERTt1QkU0QjtPRkU7R0hXO1VNRTtHTlE7Q1hDO0FrQkU7RUNZO0dEUztpQkVFO2VDSSxnQ0Q7bUJFSyxvREY7R0ZLO2lCS0U7R0xFO0NsQkM7WXdCYTtLeEJRO1l3Qks7S3hCTTtZd0JLO0t4Qk07WXdCSztLeEJNO1l3Qk07S3hCRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFuaW1hdGVUcmFuc2Zvcm1TaW5nbGVQcm9wIiwiYW5pbWF0ZSIsInVzZUVmZmVjdCRhcmd1bWVudF8wIiwiVHJhbnNmb3JtT3JpZ2luRXhhbXBsZSIsIkZsaXAiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNlO2tCQ0U7R0RPO1lFRTtHRkU7Q0RzQjtBSUU7WURHO0dDUztDSm1CO0FLRTtrQkhFO0dHTztZRkU7R0VFO0NMeUM7SU1zSjtLTkU7SU1NO0tOTTtJTU07S05NO0lNSztLTk07SU1LO0tOTTtJTU07S05NO0lNSztLTk07SU1LO0tOTTtJTUs7S05FO0lNSztLTk07SU1LO0tORSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtZQ3NCO0tERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlNhbXBsZVR1cmJvTW9kdWxlRXhhbXBsZSIsIl90ZXN0cy5jYWxsYmFjayIsIk5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmdldFZhbHVlV2l0aENhbGxiYWNrJGFyZ3VtZW50XzAiLCJfdGVzdHMucHJvbWlzZSIsIk5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLmdldFZhbHVlV2l0aFByb21pc2UudGhlbiRhcmd1bWVudF8wIiwiX3Rlc3RzLnJlamVjdFByb21pc2UiLCJOYXRpdmVTYW1wbGVUdXJib01vZHVsZS5nZXRWYWx1ZVdpdGhQcm9taXNlLnRoZW4uX2NhdGNoJGFyZ3VtZW50XzAiLCJfdGVzdHMuZ2V0Q29uc3RhbnRzIiwiX3Rlc3RzLnZvaWRGdW5jIiwiX3Rlc3RzLmdldEJvb2wiLCJfdGVzdHMuZ2V0RW51bSIsIl90ZXN0cy5nZXROdW1iZXIiLCJfdGVzdHMuZ2V0U3RyaW5nIiwiX3Rlc3RzLmdldEFycmF5IiwiX3Rlc3RzLmdldE9iamVjdCIsIl90ZXN0cy5nZXRVbnNhZmVPYmplY3QiLCJfdGVzdHMuZ2V0Um9vdFRhZyIsIl90ZXN0cy5nZXRWYWx1ZSIsIl90ZXN0cy52b2lkRnVuY1Rocm93cyIsIl90ZXN0cy5nZXRPYmplY3RUaHJvd3MiLCJfdGVzdHMucHJvbWlzZVRocm93cyIsIk5hdGl2ZVNhbXBsZVR1cmJvTW9kdWxlLnByb21pc2VUaHJvd3MudGhlbiRhcmd1bWVudF8wIiwiTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUucHJvbWlzZVRocm93cy50aGVuLl9jYXRjaCRhcmd1bWVudF8wIiwiX3Rlc3RzLnZvaWRGdW5jQXNzZXJ0IiwiX3Rlc3RzLmdldE9iamVjdEFzc2VydCIsIl90ZXN0cy5wcm9taXNlQXNzZXJ0IiwiTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUucHJvbWlzZUFzc2VydC50aGVuJGFyZ3VtZW50XzAiLCJOYXRpdmVTYW1wbGVUdXJib01vZHVsZS5wcm9taXNlQXNzZXJ0LnRoZW4uX2NhdGNoJGFyZ3VtZW50XzAiLCJfc2V0UmVzdWx0Iiwic2V0U3RhdGUkYXJndW1lbnRfMCIsIl9yZW5kZXJSZXN1bHQiLCJjb21wb25lbnREaWRNb3VudCIsInJlbmRlciIsIlRvdWNoYWJsZU9wYWNpdHkucHJvcHMub25QcmVzcyIsIk9iamVjdC5rZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsIkZsYXRMaXN0LnByb3BzLmtleUV4dHJhY3RvciIsIkZsYXRMaXN0LnByb3BzLnJlbmRlckl0ZW0iXSwibWFwcGluZ3MiOiJBQUE7QUNtQztjQ1U7bURDQztrRERDO09EQzthR0M7OERDQztnRERDO09IQzttQktDO2NERSxRQztlQ0M7U0RHLENMO2tCT0MsNENQO2NRQyx3Q1I7YVNDLDJDVDthVUM7Y1ZHO2VXQyw4Q1g7ZVlDLGdEWjtjYUM7UWJLO2VjQztrRWRDO3FCZUM7a0VmQztnQmdCQyxzRGhCO2NpQkM7bUVqQkM7b0JrQkM7S2xCTztxQm1CQztLbkJPO21Cb0JDO2NDRSxRRDtlRUM7U0ZHO0twQkM7b0J1QkM7S3ZCTztxQndCQztLeEJPO21CeUJDO2NDRSxRRDtlRUM7U0ZHO0t6QkM7RTRCRztrQkNrQztNRFc7RzVCQztFOEJFO0c5QlE7RStCRTtHL0JNO0VnQ0U7cUJDTTsrQ0NDOzBEREM7ZURDO3FCQ0ssc0NEO3dCR08sWUg7c0JJQzt5QkhJLCtDRztXSks7R2hDSTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iXSwibWFwcGluZ3MiOiJBQUEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRSZXZlcnNlTWFwIiwiT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5pc1ZhbGlkLnZhbHVlIiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5jYXN0LnZhbHVlIiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5tZW1iZXJzLnZhbHVlIiwiT2JqZWN0LmRlZmluZVByb3BlcnRpZXMkYXJndW1lbnRfMS5nZXROYW1lLnZhbHVlIiwiRW51bSIsIkVudW1NaXJyb3JlZCJdLCJtYXBwaW5ncyI6IkFBQTtBQ21CO2lEQ1E7R0RFO0NERzthR0s7T0hFO2FJRztPSkU7YUtHO09MRTthTUc7T05FO0FPTTtDUFM7YUdRO09ISzthS007T0xJO2FNRztPTkU7Z0JRTTtDUk8ifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7WUN3QjtLREUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRTYW1wbGVMZWdhY3lNb2R1bGUiLCJzdHJpbmdpZnkiLCJyZXBsYWNlciIsIk9iamVjdC5rZXlzLnNvcnQucmVkdWNlJGFyZ3VtZW50XzAiLCJTYW1wbGVMZWdhY3lNb2R1bGVFeGFtcGxlIiwidm9pZEZ1bmMiLCJnZXRCb29sIiwiZ2V0RW51bSIsImdldE51bWJlciIsImdldEZsb2F0IiwiZ2V0SW50IiwiZ2V0TG9uZ0xvbmciLCJnZXRVbnNpZ25lZExvbmdMb25nIiwiZ2V0TlNJbnRlZ2VyIiwiZ2V0TlNVSW50ZWdlciIsImdldEFycmF5IiwiZ2V0T2JqZWN0IiwiZ2V0U3RyaW5nIiwiZ2V0TnVsbFN0cmluZyIsImdldE5TTnVtYmVyIiwiZ2V0VW5zYWZlT2JqZWN0IiwiZ2V0Um9vdFRhZyIsImdldFZhbHVlIiwiY2FsbGJhY2siLCJnZXRTYW1wbGVMZWdhY3lNb2R1bGUuZ2V0VmFsdWVXaXRoQ2FsbGJhY2skYXJndW1lbnRfMCIsInByb21pc2UiLCJnZXRTYW1wbGVMZWdhY3lNb2R1bGUuZ2V0VmFsdWVXaXRoUHJvbWlzZS50aGVuJGFyZ3VtZW50XzAiLCJyZWplY3RQcm9taXNlIiwiZ2V0U2FtcGxlTGVnYWN5TW9kdWxlLmdldFZhbHVlV2l0aFByb21pc2UudGhlbi5fY2F0Y2gkYXJndW1lbnRfMCIsImdldENvbnN0YW50cyIsImdldENvbnN0MSIsImdldENvbnN0MiIsImdldENvbnN0MyIsImdldERvdWJsZSIsImdldE9iamVjdERvdWJsZSIsImdldE9iamVjdEludGVnZXIiLCJnZXRPYmplY3RGbG9hdCIsIl9zZXRSZXN1bHQiLCJzZXRTdGF0ZSRhcmd1bWVudF8wIiwiX3JlbmRlclJlc3VsdCIsIl9nZXRDb250ZW50IiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzIiwiT2JqZWN0LmtleXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiRmxhdExpc3QucHJvcHMua2V5RXh0cmFjdG9yIiwiRmxhdExpc3QucHJvcHMucmVuZGVySXRlbSIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ3NDO0NEVztBRUU7RUNDO2dCQ0k7U0RHO0dERztDRkc7QUtFO29CQ1kseUNEO21CRUMsNENGO21CR0MsMkNIO3FCSUMsK0NKO29CS0MsK0NMO2tCTUMseUNOO3VCT0MsOENQOytCUUM7NERSQzt3QlNDLCtDVDt5QlVDLGdEVjtvQldDO2NYSztxQllDO3lFWkM7cUJhQyxpRGI7eUJjQyw4Q2Q7dUJlQyxnRGY7MkJnQkM7eUVoQkM7c0JpQkMsNkNqQjtvQmtCQzswRWxCQztvQm1CQzswRENDO3dEREM7YW5CQzttQnFCQztvQkNHLHdERCxDckI7eUJ1QkM7b0JERyxRQztxQkNDLGdERCxDdkI7d0J5QkMsNkN6QjtxQjBCQyxxQzFCO3FCMkJDLHFDM0I7cUI0QkMscUM1QjtvQkNHLHlDRDttQkVDLDRDRjttQkdDLDJDSDtxQjZCQywrQzdCO2tCTUMseUNOO29CS0MsOENMOzJCOEJDOzJEOUJDOzRCK0JDLG1EL0I7MEJnQ0Msb0RoQztxQmFDLGlEYjtzQmlCQyw2Q2pCO3FCWUM7eUVaQzsyQmdCQzt5RWhCQztvQmtCQzswRWxCQztvQm1CQzswRENDO3dEREM7YW5CQztvQldDO2NYSzttQnFCQztvQkNHLHdERCxDckI7eUJ1QkM7b0JERyxRQztxQkNDLGdERCxDdkI7d0J5QkMsNkN6QjtxQjBCQyxxQzFCO3FCMkJDLHFDM0I7cUI0QkMscUM1QjtFaUNHO2tCQ0M7TURXO0dqQ0M7RW1DRTtHbkNVO0VvQ0U7cUJDVzsrQ0NDO2VETSxDRDtxQkNLLHNDRDt3QkdPLFlIO3NCSUM7eUJISSwrQ0c7V0pLO0dwQ0k7RXlDRTtHekNFO0NMQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtZQ3NCO0tERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIk5hdGl2ZUN4eE1vZHVsZUV4YW1wbGVFeGFtcGxlIiwiX3Rlc3RzLmNhbGxiYWNrIiwiTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZS5nZXRWYWx1ZVdpdGhDYWxsYmFjayRhcmd1bWVudF8wIiwiX3Rlc3RzLmNhbGxiYWNrV2l0aFN1YnNjcmlwdGlvbiIsIk5hdGl2ZUN4eE1vZHVsZUV4YW1wbGUuc2V0VmFsdWVDYWxsYmFja1dpdGhTdWJzY3JpcHRpb24kYXJndW1lbnRfMCIsIl90ZXN0cy5nZXRBcnJheSIsIl90ZXN0cy5nZXRCb29sIiwiX3Rlc3RzLmdldENvbnN0YW50cyIsIl90ZXN0cy5nZXRDdXN0b21FbnVtIiwiX3Rlc3RzLmdldEN1c3RvbUhvc3RPYmplY3QiLCJfdGVzdHMuZ2V0QmluYXJ5VHJlZU5vZGUiLCJfdGVzdHMuZ2V0R3JhcGhOb2RlIiwiX3Rlc3RzLmdldE51bUVudW0iLCJfdGVzdHMuZ2V0U3RyRW51bSIsIl90ZXN0cy5nZXROdW1iZXIiLCJfdGVzdHMuZ2V0T2JqZWN0IiwiX3Rlc3RzLmdldFNldCIsIl90ZXN0cy5nZXRTdHJpbmciLCJfdGVzdHMuZ2V0VW5pb24iLCJfdGVzdHMuZ2V0VmFsdWUiLCJfdGVzdHMucHJvbWlzZSIsIk5hdGl2ZUN4eE1vZHVsZUV4YW1wbGUuZ2V0VmFsdWVXaXRoUHJvbWlzZS50aGVuJGFyZ3VtZW50XzAiLCJfdGVzdHMucmVqZWN0UHJvbWlzZSIsIk5hdGl2ZUN4eE1vZHVsZUV4YW1wbGUuZ2V0VmFsdWVXaXRoUHJvbWlzZS50aGVuLl9jYXRjaCRhcmd1bWVudF8wIiwiX3Rlc3RzLnZvaWRGdW5jIiwiX3Rlc3RzLnNldE1lbnVJdGVtIiwiTmF0aXZlQ3h4TW9kdWxlRXhhbXBsZS5zZXRNZW51JGFyZ3VtZW50XzAub25QcmVzcyIsIm9uUHJlc3MiLCJfdGVzdHMub3B0aW9uYWxBcmdzIiwiX3Rlc3RzLmVtaXREZXZpY2VFdmVudCIsIkRldmljZUV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lciRhcmd1bWVudF8xIiwiYXJncy5tYXAkYXJndW1lbnRfMCIsIl9lcnJvclRlc3RzLnZvaWRGdW5jVGhyb3dzIiwiX2Vycm9yVGVzdHMuZ2V0T2JqZWN0VGhyb3dzIiwiX2Vycm9yVGVzdHMucHJvbWlzZVRocm93cyIsIl9lcnJvclRlc3RzLnZvaWRGdW5jQXNzZXJ0IiwiX2Vycm9yVGVzdHMuZ2V0T2JqZWN0QXNzZXJ0IiwiX2Vycm9yVGVzdHMucHJvbWlzZUFzc2VydCIsIl9zZXRSZXN1bHQiLCJzZXRTdGF0ZSRhcmd1bWVudF8wIiwiX3JlbmRlclJlc3VsdCIsImNvbXBvbmVudERpZE1vdW50IiwicmVuZGVyIiwiVG91Y2hhYmxlT3BhY2l0eS5wcm9wcy5vblByZXNzIiwiT2JqZWN0LmtleXMuZm9yRWFjaCRhcmd1bWVudF8wIiwiRmxhdExpc3QucHJvcHMua2V5RXh0cmFjdG9yIiwiRmxhdExpc3QucHJvcHMucmVuZGVySXRlbSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3VFO2NDVTttRENDO2tEREM7T0RDOzhCR0M7VUNHO3NFREM7S0hLO2NLQztRTEs7YU1DLDJDTjtrQk9DLDRDUDttQlFDLHVEUjt5QlNDO09URzt1QlVDO1FWSztrQldDO1FYSTtnQllDLG9EWjtnQmFDLHFEYjtlY0MsOENkO2VlQztrRWZDO1lnQkMsMkRoQjtlaUJDLGdEakI7Y2tCQyxnRWxCO2NtQkM7bUVuQkM7YW9CQzs4RENDO2dEREM7T3BCQzttQnNCQztjREUsUUM7ZUNDLGdERCxDdEI7Y3dCQyx3Q3hCO2lCeUJDO2lCQ0k7U0RHO3FCRUk7YUZLO0t6Qks7a0I0QkMsdUQ1QjtxQjZCQzt3RENHOzJDQ0csV0Q7T0RFO0s3QkU7b0JnQ0s7S2hDTTtxQmlDQztLakNNO21Ca0NDO0tsQ087b0JtQ0M7S25DTTtxQm9DQztLcENNO21CcUNDO0tyQ087RXNDRztrQkNjO01EUTtHdENDO0V3Q0U7R3hDUTtFeUNFO0d6Q007RTBDRTtxQkNNOytDQ0M7MEREQztlREM7cUJDSyxzQ0Q7d0JHUSxZSDtzQklDO3lCSEksK0NHO1dKSzt3QkdRLFlIO3NCSUM7eUJISSxvREc7V0pLO0cxQ0k7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+Il0sIm1hcHBpbmdzIjoiQUFBIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyIiwiVG91Y2hhYmxlSGlnaGxpZ2h0LnByb3BzLm9uUHJlc3MiXSwibWFwcGluZ3MiOiJBQUE7SUNvRDtLRE07SUNJO21CQ0kseUJEO0tETTtJQ0k7bUJDSSxnQ0Q7S0RNO0lDSTttQkNJLHNDRDtLRE07SUNJO21CQ0ksd0JEO0tETSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkJ1dHRvbiIsIkJ1dHRvbiNyZW5kZXIiLCJSb3ciLCJSb3cjcmVuZGVyIiwiV2ViU29ja2V0SW1hZ2UiLCJXZWJTb2NrZXRJbWFnZSNjb21wb25lbnREaWRNb3VudCIsIndzLm9ubWVzc2FnZSIsIndzLm9ub3BlbiIsIldlYlNvY2tldEltYWdlI2NvbXBvbmVudFVubW91bnQiLCJXZWJTb2NrZXRJbWFnZSNyZW5kZXIiLCJzaG93VmFsdWUiLCJXZWJTb2NrZXRFeGFtcGxlIiwiX2Nvbm5lY3QiLCJXU19FVkVOVFMuZm9yRWFjaCRhcmd1bWVudF8wIiwiX2Rpc2Nvbm5lY3QiLCJfb25Tb2NrZXRFdmVudCIsIl9zZW5kVGV4dCIsIl9zZW5kSHR0cCIsImZldGNoLnRoZW4kYXJndW1lbnRfMCIsIl9zZW5kQmluYXJ5IiwicmVuZGVyIiwiVGV4dElucHV0LnByb3BzLm9uQ2hhbmdlVGV4dCJdLCJtYXBwaW5ncyI6IkFBQTtBQ21DO0VDQztHRFk7Q0RDO0FHRTtFQ0M7R0RRO0NIQztBS0U7RUNHO21CQ0c7S0RRO2dCRUM7S0ZFO0dEQztFSUM7R0pLO0VLQztHTFU7Q0xDO0FXRTtDWFk7QVlhO2FDWTtzQkNFLHNERDtHREs7Z0JHRTtHSEs7bUJJRTtHSlM7Y0tFO0dMTTtjTUU7bUNDSTtLRE07R05DO2dCUUU7R1JlO0VTRTt3QkM2QiwyQkQ7d0JDbUIsbUREO3dCQ3lCLG1DRDtHVG1CO0NaQztJcUJ3RDtLckJFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0lDNEI7S0RFO0lDSTtLREU7SUNJO0tERTtJQ0k7S0RFO0lDSTtLREU7SUNJO0tERSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsInJvdW5kS2lsbyIsIlhIUkV4YW1wbGVEb3dubG9hZCIsIl9kb3dubG9hZCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIm9ucHJvZ3Jlc3MiLCJ4aHIub25sb2FkIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiLCJTd2l0Y2gucHJvcHMub25WYWx1ZUNoYW5nZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ3lCO0NERTtBRUU7Y0NrQjsrQkNTO0tEZTt1QkVDO0tGSztpQkdXO0tIb0I7R0RVO0VLRTtHTEc7RU1FOzJCQzhDO2dEREM7MkJDUSxtREQ7MkJDTywyQ0Q7R05RO0NGQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlhIUkV4YW1wbGVCaW5hcnlVcGxvYWQiLCJoYW5kbGVQb3N0VGVzdFNlcnZlclVwbG9hZCIsIl91cGxvYWQiLCJ4aHIub25sb2FkIiwicmVuZGVyIiwiT2JqZWN0LmtleXMubWFwJGFyZ3VtZW50XzAiLCJSTlRPcHRpb24ucHJvcHMub25QcmVzcyJdLCJtYXBwaW5ncyI6IkFBQTtBQ21EO0VDQztHRHVCO1lFTTtpQkNHLDRERDtHRndCO0VJRTsyQ0NNO3lCQ0ssMkJEO2FERztHSlk7Q0RDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiWEhSRXhhbXBsZUZldGNoIiwiY29uc3RydWN0b3IiLCJzdWJtaXQiLCJmZXRjaC50aGVuJGFyZ3VtZW50XzAiLCJmZXRjaC50aGVuLnRoZW4kYXJndW1lbnRfMCIsIl9yZW5kZXJIZWFkZXJzIiwicmVuZGVyIiwiVGV4dElucHV0LnByb3BzLm9uU3VibWl0RWRpdGluZyJdLCJtYXBwaW5ncyI6IkFBQTtBQ2U7RUNJO0dETztFRUU7WUNHO09ESTtZRUM7T0ZFO0dGQztFS0U7R0xrQjtFTUU7MkJDaUM7V0RFO0dOUTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJYSFJFeGFtcGxlSGVhZGVycyIsImNvbnN0cnVjdG9yIiwiZG93bmxvYWQiLCJ4aHIub25yZWFkeXN0YXRlY2hhbmdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNlO0VDSTtHRFM7RUVFOzZCQ0k7S0R5QjtHRlM7RUlFO0dKRztFS0U7R0x3QjtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJYSFJFeGFtcGxlT25UaW1lT3V0IiwiY29uc3RydWN0b3IiLCJsb2FkVGltZU91dFJlcXVlc3QiLCJ4aHIub25lcnJvciIsInhoci5vbnRpbWVvdXQiLCJ4aHIub25sb2FkIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNlO0VDRztHRE07RUVFO2tCQ0s7S0RHO29CRUU7S0ZLO2lCR0U7S0hHO0dGUTtFTUU7R05FO0VPRTtHUHdCO0NEQyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlhIUkV4YW1wbGVBYm9ydENvbnRyb2xsZXIiLCJfc3VibWl0IiwiZmV0Y2gudGhlbiRhcmd1bWVudF8wIiwiZmV0Y2gudGhlbi50aGVuJGFyZ3VtZW50XzAiLCJmZXRjaC50aGVuLnRoZW4uX2NhdGNoJGFyZ3VtZW50XzAiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbmRlciIsIkJ1dHRvbi5wcm9wcy5vblByZXNzIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTtFQ0c7WUNNLGlCRDtZRUMsdUJGO2FHQywrQkg7K0JJQztLSkU7R0RDO0VNRTtHTkU7RU9FO21CQ0s7V0RFO21CQ0k7V0RFO0dQSTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJNZW1vcnlFeGFtcGxlIiwib25HZXRNZW1vcnlJbmZvIiwiU3RhcnR1cFRpbWluZ0V4YW1wbGUiLCJvbkdldFN0YXJ0dXBUaW1pbmciLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUN1QjtzQ0NHO0dESTtDRG1CO0FHRTt5Q0NJO0dESTtDSDZCO1lLYztLTEU7WUtJO0tMRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkFic29sdXRlQ2hpbGRFeGFtcGxlIiwiUmVsYXRpdmVDaGlsZEV4YW1wbGUiLCJQb2ludGVyRXZlbnRTY2FmZm9sZGluZyIsImNsZWFyIiwibG9nIiwic2V0RXZlbnRzTG9nJGFyZ3VtZW50XzAiLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNpQztDRHdCO0FFRTtDRnlDO0FHRTtnQkNNLHNCRDtjRUM7aUJDQyxzREQ7R0ZDO0NIYTtNT3VDO09QRTtNT0s7T1BFO01PSztPUEU7TU9NO09QRTtNT007T1BFO01PTztPUEU7TU9LO09QRTtNT0s7T1BFO01PSztPUEU7TU9NO09QRTtNT0s7T1BFO01PSztPUEU7TU9LO09QRTtNT0s7T1BFO01PSztPUEU7TU9LO09QRTtNT007T1BFO01PTTtPUEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJDb21wYXRpYmlsaXR5QW5pbWF0ZWRQb2ludGVyTW92ZSIsImRlZmF1bHQucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDdUM7Q0R3RDtFRU87R0ZFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiQ29tcGF0aWJpbGl0eU5hdGl2ZUdlc3R1cmVIYW5kbGluZyIsIkFycmF5LmZpbGwubWFwJGFyZ3VtZW50XzAiLCJkZWZhdWx0LnJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2lDO2VDTTtXRFc7Q0RJO0VHTztHSEUifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJFdmVudGZ1bFZpZXciLCJSZWFjdC51c2VFZmZlY3QkYXJndW1lbnRfMCIsImV2ZW50TG9nIiwiPGFub255bW91cz4iLCJPYmplY3Qua2V5cy5maWx0ZXIkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtlQ2dCO2tCQ3VCO0dERztJRTRCO0lDQztLSEk7WUlzQiwrQ0o7Q0RhIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZ2V0TW9kaWZpZXJzVGV4dCIsIk1hbnlQb2ludGVyc1Byb3BlcnRpZXNFeGFtcGxlIiwib25Qb2ludGVyTW92ZSIsIk9iamVjdC5lbnRyaWVzLm1hcCRhcmd1bWVudF8wIiwiZGVmYXVsdC5yZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNzQjtDRG9CO0FFRTt3QkNFO0dESTtVRVE7V0ZtQjtDRks7RUtNO0dMRSJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBvaW50ZXJFdmVudEFjY2Vzc2liaWxpdHkiLCJvbkFueUV2ZW50Iiwic2V0RXZlbnRzU2VlbiRhcmd1bWVudF8wIiwiUHJlc3NhYmxlLnByb3BzLm9uUHJlc3MiLCJldmVudHNTZWVuLm1hcCRhcmd1bWVudF8wIl0sIm1hcHBpbmdzIjoiQUFBO2VDb0I7cUJDRztrQkNDLCtCRCxDRDttQkdvQjswQkRDO3dFQ0M7YUhDO3VCR0s7OEJEQzsyRUNDO2lCSEM7MEJHTyx1Qkg7d0JJTTtTSkk7Q0RJIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiY2hlY2tfUG9pbnRlckV2ZW50IiwiaGFybmVzcy50ZXN0JGFyZ3VtZW50XzAiLCJpZGxfdHlwZV9jaGVjay5sb25nIiwiaWRsX3R5cGVfY2hlY2suZmxvYXQiLCJpZGxfdHlwZV9jaGVjay5zdHJpbmciLCJpZGxfdHlwZV9jaGVjay5ib29sZWFuIiwiaWRsX3R5cGVfY2hlY2sub2JqZWN0IiwiZm9yRWFjaCRhcmd1bWVudF8wIiwidXNlVGVzdEV2ZW50SGFuZGxlciIsInVzZU1lbW8kYXJndW1lbnRfMCIsImhhbmRsZXJGYWN0b3J5IiwiPGFub255bW91cz4iLCJta0V2ZW50IiwiRXZlbnRUcmFja2VyIiwiaGFuZGxlcnMuZXZlbnROYW1lIl0sIm1hcHBpbmdzIjoiQUFBO09DeUI7aUJDMEI7S0RNO1VFVztLRkU7V0dDO0tIRTtZSUM7S0pFO2FLQztLTEU7WU1DO0tORTtZT2U7TU5VO09NSztNTlU7T01NO1FOZ0I7U01HO0dQSztJQ0s7S0QrQjtpQkNPO0tEUztDREc7T1NNO2tDQ0k7MkJDQyx1QkM7K0JGQztHRFE7Q1RFO09hUztDYks7T2NZOytCSkU7NEJLTztPTEk7R0lHO0NkTyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBvaW50ZXJFdmVudEF0dHJpYnV0ZXNIb3ZlcmFibGVQb2ludGVyc1Rlc3RDYXNlIiwiY2hlY2tQb2ludGVyRXZlbnRBdHRyaWJ1dGVzIiwiaGFybmVzcy50ZXN0JGFyZ3VtZW50XzAiLCJ1c2VUZXN0RXZlbnRIYW5kbGVyJGFyZ3VtZW50XzEiLCJzcXVhcmUxRWxlbS5tZWFzdXJlJGFyZ3VtZW50XzAiLCJzcXVhcmUyRWxlbS5tZWFzdXJlJGFyZ3VtZW50XzAiLCJQb2ludGVyRXZlbnRBdHRyaWJ1dGVzSG92ZXJhYmxlUG9pbnRlcnMiXSwibWFwcGluZ3MiOiJBQUE7QUNrQztJQ2M7UUNzQjtTRE07cUJDTTtTREU7cUJDQztTREU7cUJDRTtTREU7cUJDQztTREU7cUJDRTtTREU7cUJDQztTREU7cUJDVTtTRHFCO3FCQ0U7U0RRO21CQ1E7T0RNO3FCQ007U0RNO0tERTt5REdXOzBCQ087T0RpQjtHSEU7eURHUzswQkVHO09GZTtHSEU7Q0RnQjtlTzBCO0NQZ0IifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSTlRlc3RlclBsYXRmb3JtVGVzdCJdLCJtYXBwaW5ncyI6IkFBQTtlQ3lCO0NEb0MifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSTlRlc3RlclBsYXRmb3JtVGVzdEluc3RydWN0aW9ucyIsImluc3RydWN0aW9ucy5tYXAkYXJndW1lbnRfMCJdLCJtYXBwaW5ncyI6IkFBQTtlQ21CO3dCQ1M7T0RNO0NERyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIkZpbHRlck1vZGFsQnV0dG9uIiwib25GaWx0ZXJCdXR0b25QcmVzcyIsIm9uRmlsdGVyU3VibWl0Iiwib25GaWx0ZXJDYW5jZWwiLCJvbkZpbHRlckZhaWxTdGF0dXMiLCJvblBlbmRpbmdUZXh0Q2hhbmdlIiwiVGFibGVIZWFkZXIiLCJSZWFjdC5tZW1vJGFyZ3VtZW50XzAiLCJ0ZXN0UmVzdWx0LmFzc2VydGlvbnMubWFwJGFyZ3VtZW50XzAiLCJyZW5kZXJUYWJsZVJvdyIsIlJOVGVzdGVyUGxhdGZvcm1UZXN0UmVzdWx0VmlldyIsInVzZU1lbW8kYXJndW1lbnRfMCIsInJlc3VsdHMuZmlsdGVyJGFyZ3VtZW50XzAiLCJzdGF0dXNGaWx0ZXJlZC5maWx0ZXIkYXJndW1lbnRfMCIsImZpbHRlcmVkUmVzdWx0cy5yZWR1Y2UkYXJndW1lbnRfMCIsImhhbmRsZVJlc2V0IiwiaGFuZGxlTWluaW1pemVkUHJlc3MiLCJoYW5kbGVNYXhpbWl6ZWRQcmVzcyJdLCJtYXBwaW5ncyI6IkFBQTtBQ29EOzBDQ007R0RHO3FDRUU7R0ZHO3FDR0U7R0hFO0lJRztLSkU7MENLSTtHTEU7Q0RrRDtBT0U7Q1BjO0VRRztxQ0NZO1dEVTtHUkk7QVVHO0NWRTtlV1E7a0NDUTt1QkNFLGtDRDtpQ0VNO2tFRkM7R0RFO0lDRztRR0U7U0hXO09ETztrQ0tNO0dMSzsyQ01FO0dORTsyQ09FO0dQRTtDWG9FIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UZXN0ZXJQbGF0Zm9ybVRlc3RNaW5pbWl6ZWRSZXN1bHRWaWV3Il0sIm1hcHBpbmdzIjoiQUFBO2VDeUI7Q0R5QiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlJOVGVzdGVyUGxhdGZvcm1UZXN0UmVzdWx0c1RleHQiXSwibWFwcGluZ3MiOiJBQUE7ZUNvQjtDRHVDIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZGlkQWxsQXNzZXJ0aW9uc1Bhc3MiLCJhc3NlcnRpb25zLnNvbWUkYXJndW1lbnRfMCIsImNvbnN0cnVjdEFzeW5jVGVzdEhvb2siLCI8YW5vbnltb3VzPiIsInRpbWVvdXRIYW5kbGVyIiwidXBkYXRlQXN5bmNUZXN0U3RhdHVzZXMkYXJndW1lbnRfMCIsInVzZUVmZmVjdCRhcmd1bWVudF8wIiwiY29tcGxldGlvbkhhbmRsZXIiLCJzdGVwSGFuZGxlciIsInVzZU1lbW8kYXJndW1lbnRfMCIsInVzZVBsYXRmb3JtVGVzdEhhcm5lc3MiLCJjb21taXRSZXN1bHRzIiwidXBkYXRlVGVzdFJlc3VsdHMkYXJndW1lbnRfMCIsInNjaGVkdWxlUmVzdWx0c0NvbW1pdCIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsImFkZFRlc3RSZXN1bHQiLCJyZXNldCIsInNldFRlc3RFbGVtZW50S2V5JGFyZ3VtZW50XzAiLCJydW5UZXN0Q2FzZSIsImJhc2VBc3NlcnQiLCJjb250ZXh0LmFzc2VydF90cnVlIiwiY29udGV4dC5hc3NlcnRfZXF1YWxzIiwiY29udGV4dC5hc3NlcnRfbm90X2VxdWFscyIsImNvbnRleHQuYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCIsImNvbnRleHQuYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbCIsInRlc3RGdW5jdGlvbiJdLCJtYXBwaW5ncyI6IkFBQTtBQ3VCOzhDQ0csK0JEO0NERTtBR0U7U0NXO3VDQ0s7OEJDZ0I7UURHO0tEQztjR0c7YUhFO09HSTtLSEM7MENJRTs4QkZPO09Fb0I7S0pDO29DS0U7S0xHO2NHRzs4QkRDO09DSztLSEM7TU1HO1FORztHREc7Q0hDO2VXVTtvQ0NXO3dCQ0csbUNEO0dERzs0Q0dFOytDQ0sscUJEO0dIQztJS0c7S0xHOzRCTWE7c0JDRyxVRDtHTkM7a0NRRTt1QkNHO0tEb0I7bUJFRztTRk07cUJHQztTSE07eUJJQztTSk07aUNLQztTTE07OEJNQztTTk07R1JNO0llRztLZmlDO0lESztPQ0s7dUNESTtHQ1M7SURHO01DRztDWFcifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQb2ludGVyRXZlbnRBdHRyaWJ1dGVzTm9Ib3ZlclBvaW50ZXJzVGVzdENhc2UiLCJjaGVja1BvaW50ZXJFdmVudEF0dHJpYnV0ZXMiLCJoYXJuZXNzLnRlc3QkYXJndW1lbnRfMCIsInVzZVRlc3RFdmVudEhhbmRsZXIkYXJndW1lbnRfMSIsInNxdWFyZTFFbGVtLm1lYXN1cmUkYXJndW1lbnRfMCIsInNxdWFyZTJFbGVtLm1lYXN1cmUkYXJndW1lbnRfMCIsIlBvaW50ZXJFdmVudEF0dHJpYnV0ZXNOb0hvdmVyUG9pbnRlcnMiXSwibWFwcGluZ3MiOiJBQUE7QUNpQztJQ2M7UUNzQjtTRE07bUJDSztPREU7cUJDTTtTREU7cUJDRTtTREU7bUJDUztPRFE7bUJDTztPRE07cUJDTTtTRE07S0RFO3lER1c7MEJDTztPRGlCO0dIRTt5REdTOzBCRUc7T0ZlO0dIRTtDRGdCO2VPMEI7Q1BlIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUG9pbnRlckV2ZW50Q2FwdHVyZU1vdXNlVGVzdENhc2UiLCJoYW5kbGVDYXB0dXJlQnV0dG9uRG93biIsImhhbmRsZVRhcmdldDBHb3RQb2ludGVyQ2FwdHVyZSIsImhhbmRsZVRhcmdldDBMb3N0UG9pbnRlckNhcHR1cmUiLCJoYW5kbGVUYXJnZXQwUG9pbnRlck1vdmUiLCJoYXJuZXNzLnRlc3QkYXJndW1lbnRfMCIsImhhbmRsZVRhcmdldDFQb2ludGVyTW92ZSIsIlBvaW50ZXJFdmVudENhcHR1cmVNb3VzZSJdLCJtYXBwaW5ncyI6IkFBQTtBQ29COzhDQ3FCO0dEUztJRUc7S0ZFO0lHSztLSEc7SUlZO1lDYzthRE07dUJDSTtXRFE7dUJDVTtXREs7S0pJO0lNSzttQkRDO09DTTtLTk07Q0R5QjtlUXdCO0NSbUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJjaGVja0NsaWNrRXZlbnRQcm9wZXJ0aWVzIiwiUG9pbnRlckV2ZW50Q2xpY2tUb3VjaFRlc3RDYXNlIiwiaGFuZGxlQ2xpY2siLCJ0ZXN0UG9pbnRlckNsaWNrLnN0ZXAkYXJndW1lbnRfMCIsImhhbmRsZVBvaW50ZXJEb3duIiwiaGFuZGxlUG9pbnRlclVwIiwiUG9pbnRlckV2ZW50Q2xpY2tUb3VjaCJdLCJtYXBwaW5ncyI6IkFBQTtBQ29CO0NEb0I7QUVFO0lDVTs0QkNLO09EUTtLREk7SUdLOzRCREs7T0NPO0tIQztJSUs7NEJGSztPRU87S0pDO0NGWTtlT1c7Q1BXIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUG9pbnRlckV2ZW50Q2xpY2tUb3VjaEhpZXJhcmNoeVRlc3RDYXNlIiwiY2hlY2tSZXN1bHRzIiwidGVzdFBvaW50ZXJDbGljay5zdGVwJGFyZ3VtZW50XzAiLCJQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5Il0sIm1hcHBpbmdzIjoiQUFBO0FDc0I7dUJDVzswQkNDO0tEMEM7R0RFO0NEbUI7ZUlxQjtDSnFCIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUG9pbnRlckV2ZW50Qm94UGFyZW50Q2hpbGQiLCJQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5UG9pbnRlckV2ZW50c1Rlc3RDYXNlIiwiY2hlY2tSZXN1bHRzIiwidGVzdFBvaW50ZXJDbGljay5zdGVwJGFyZ3VtZW50XzAiLCJQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5UG9pbnRlckV2ZW50cyJdLCJtYXBwaW5ncyI6IkFBQTtBQ29CO0NEd0I7QUVJO3VCQ1c7MEJDQztLRCtCO0dERTtDRnNDO2VLNEM7Q0xrQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBvaW50ZXJFdmVudExheW91dFNob3VsZEZpcmVQb2ludGVyT3ZlclRlc3RDYXNlIiwiY2hlY2tFdmVudFNlcXVlbmNlIiwidGVzdE1vdXNlT3Zlci5zdGVwJGFyZ3VtZW50XzAiLCJyZWRDbGlja0hhbmRsZXIiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJjcmVhdGVCbHVlSG92ZXJFdmVudEhhbmRsZXIiLCI8YW5vbnltb3VzPiIsInVzZU1lbW8kYXJndW1lbnRfMCIsIlBvaW50ZXJFdmVudExheW91dFNob3VsZEZpcmVQb2ludGVyT3ZlciJdLCJtYXBwaW5ncyI6IkFBQTtBQzRDO3lDQ2E7dUJDQztLRE87R0RFO3NDR0U7ZUNFO0tERTtHSEM7SUtHLHVCQzt5QkpFO09JSTtLTkM7SU9LO01QSztDRFc7ZVNHO0NUYyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBvaW50ZXJFdmVudFBvaW50ZXJDYW5jZWxUb3VjaFRlc3RDYXNlIiwiaGFuZGxlUG9pbnRlckRvd24iLCJoYW5kbGVQb2ludGVyQ2FuY2VsIiwidGVzdFBvaW50ZXJFdmVudC5zdGVwJGFyZ3VtZW50XzAiLCJoYW5kbGVQb2ludGVyT3V0IiwiaGFuZGxlUG9pbnRlckxlYXZlIiwiUG9pdG5lckV2ZW50UG9pbnRlckNhbmNlbFRvdWNoIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0I7d0NDVTtHREc7SUVHOzRCQ0k7T0RvQjs0QkNJO09EYTtLRkM7SUlLOzRCREM7T0N3QjtLSkM7SUtLOzRCRkM7T0V3QjtLTEU7Q0RlO2VPWTtDUGMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZVRlc3RDYXNlIiwidXNlVGVzdEV2ZW50SGFuZGxlciRhcmd1bWVudF8xIiwiUG9pbnRlckV2ZW50UG9pbnRlck1vdmUiXSwibWFwcGluZ3MiOiJBQUE7QUNxQjtJQ1U7S0RHO0NESTtlR1c7Q0hVIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUG9pbnRlckV2ZW50UG9pbnRlck1vdmVBY3Jvc3NUZXN0Q2FzZSIsInVzZVN0YXRlJGFyZ3VtZW50XzAiLCJldmVudEhhbmRsZXIiLCJwb2ludGVybW92ZV9hY3Jvc3Muc3RlcCRhcmd1bWVudF8wIiwiUG9pbnRlckV2ZW50UG9pbnRlck1vdmVBY3Jvc3MiXSwibWFwcGluZ3MiOiJBQUE7QUMrRjtJQ1U7UURJO0lFSTtnQ0NHO1NESztLRkc7Q0R1QjtlS0c7Q0xlIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiUk5UZXN0ZXJQbGF0Zm9ybVRlc3RFdmVudFJlY29yZGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zLm1lcmdlRXZlbnRUeXBlcy5mb3JFYWNoJGFyZ3VtZW50XzAiLCJfY3JlYXRlRXZlbnRSZWNvcmQiLCJfcmVjb3JkRXZlbnQiLCJfZ2VuZXJhdGVSZWNvcmRlZEV2ZW50SGFuZGxlcldpdGhDYWxsYmFjayIsIjxhbm9ueW1vdXM+IiwidXNlUmVjb3JkZXJUZXN0RXZlbnRIYW5kbGVycyIsInVzZU1lbW8kYXJndW1lbnRfMCIsIl9nZW5lcmF0ZVJlY29yZGVkRXZlbnRIYW5kbGVyV2l0aENhbGxiYWNrJGFyZ3VtZW50XzEiLCJyZWxldmFudEV2ZW50cy5yZWR1Y2UkYXJndW1lbnRfMCIsImV2ZW50UHJvcE5hbWUiLCJnZXRSZWNvcmRzIiwiY2hlY2tSZWNvcmRzIl0sIm1hcHBpbmdzIjoiQUFBO0FDNEI7RUNTO3NDQ0U7T0RFO0dESztFR0U7R0hhO0VJRTtHSndCO0VLRTtXQ0k7S0RPO0dMQztFT0U7bUJDTztZQ007Z0VEQztVRUc7K0JDSztlREU7V0ZFO0tETTtHUEM7RVlFO0daRTtFYUU7R2IrQjtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZUJldHdlZW5UZXN0Q2FzZSIsInVzZVN0YXRlJGFyZ3VtZW50XzAiLCJldmVudEhhbmRsZXIiLCJwb2ludGVybW92ZV9iZXR3ZWVuLnN0ZXAkYXJndW1lbnRfMCIsIlBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlQmV0d2VlbiJdLCJtYXBwaW5ncyI6IkFBQTtBQ3VFO0lDVTtRREk7SUVJO2lDQ0c7U0RLO0tGRztDRGlCO2VLRztDTGMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZUV2ZW50T3JkZXJUZXN0Q2FzZSIsInVzZVN0YXRlJGFyZ3VtZW50XzAiLCJldmVudEhhbmRsZXIiLCJwb2ludGVyX3Rlc3Quc3RlcCRhcmd1bWVudF8wIiwiUG9pbnRlckV2ZW50UG9pbnRlck1vdmVFdmVudE9yZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDb0Q7SUNPO1FESTtJRU87MEJDWTtTRHdCO0tGRztDRHFCO2VLRztDTGEifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZU9uQ2hvcmRlZE1vdXNlQnV0dG9uVGVzdENhc2UiLCJoYW5kbGVQb2ludGVyRG93biIsInRlc3RfcG9pbnRlcm1vdmUuc3RlcCRhcmd1bWVudF8wIiwiaGFuZGxlUG9pbnRlck1vdmUiLCJoYW5kbGVQb2ludGVyVXAiLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZU9uQ2hvcmRlZE1vdXNlQnV0dG9uIl0sIm1hcHBpbmdzIjoiQUFBO0FDMEI7SUNnQjs0QkNDO09ETTtLREs7SUdLOzhCREc7U0NXOzhCREk7U0NNO0tIRztJSUs7NEJGQztPRVc7S0pFO0NEWTtlTUc7Q05pQiJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsImdldE5hdGl2ZVRhZ0Zyb21Ib3N0RWxlbWVudCIsIlBvaW50ZXJFdmVudFBvaW50ZXJPdmVyT3V0VGVzdENhc2UiLCJoYW5kbGVJbm5lclJlZkNhbGxiYWNrIiwiaGFuZGxlT3V0ZXJSZWZDYWxsYmFjayIsImlubmVyUG9pbnRlck92ZXJIYW5kbGVyIiwidC5zdGVwJGFyZ3VtZW50XzAiLCJpbm5lclBvaW50ZXJPdXRIYW5kbGVyIiwib3V0ZXJQb2ludGVyT3ZlckhhbmRsZXIiLCJvdXRlclBvaW50ZXJPdXRIYW5kbGVyIiwiUG9pbnRlckV2ZW50UG9pbnRlck92ZXJPdXQiXSwibWFwcGluZ3MiOiJBQUE7QUNvQjtDRFc7QUVxQjtJQ1c7S0RVO0lFSTtLRlU7SUdhO2FDQztPRDJCO0tIRTtJS0k7YURDO09Dc0I7S0xFO0lNSzthRkU7T0VlO0tORTtJT0k7YUhFO09HbUI7S1BFO0NGcUI7ZVVHO0NWYyJ9XSxbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlBvaW50ZXJFdmVudFByaW1hcnlUb3VjaFBvaW50ZXJUZXN0Q2FzZSIsImhhbmRsZUluY29taW5nUG9pbnRlckV2ZW50IiwiaGFybmVzcy50ZXN0JGFyZ3VtZW50XzAiLCJjcmVhdGVCb3hIYW5kbGVyIiwiPGFub255bW91cz4iLCJ1c2VNZW1vJGFyZ3VtZW50XzAiLCJQb2ludGVyRXZlbnRQcmltYXJ5VG91Y2hQb2ludGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDMEM7SUNRO1FDZTtTRGdCO0tESztJR0ssc0JDO0tKVTtJS0s7TUxJO0NEa0I7ZU9HO0NQaUIifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJnZXRVcGRhdGVkUmVjZW50bHlVc2VkIiwiZXhpc3RpbmdLZXlzLmZpbHRlciRhcmd1bWVudF8wIiwiUk5UZXN0ZXJOYXZpZ2F0aW9uUmVkdWNlciJdLCJtYXBwaW5ncyI6IkFBQTsrQkN1Qjt1Q0NxQixjRDtDRFE7eUNHRTtDSDBFIn1dLFt7Im5hbWVzIjpbIjxnbG9iYWw+IiwiZmlsdGVyRW1wdHlTZWN0aW9ucyIsInNlY3Rpb25LZXlzLmZvckVhY2gkYXJndW1lbnRfMCIsImV4YW1wbGVzTGlzdC5rZXkuZmlsdGVyJGFyZ3VtZW50XzAiLCJnZXRFeGFtcGxlc0xpc3RXaXRoUmVjZW50bHlVc2VkIiwiY29tcG9uZW50TGlzdC5tYXAkYXJndW1lbnRfMCIsInJlY2VudGx5VXNlZC5jb21wb25lbnRzLm1hcCRhcmd1bWVudF8wIiwiY29tcG9uZW50cy5maW5kJGFyZ3VtZW50XzAiLCJhcGlzTGlzdC5tYXAkYXJndW1lbnRfMCIsInJlY2VudGx5VXNlZC5hcGlzLm1hcCRhcmd1bWVudF8wIiwiYXBpcy5maW5kJGFyZ3VtZW50XzAiXSwibWFwcGluZ3MiOiJBQUE7NEJDa0M7c0JDTTtNQ0Usa0NEO0dERTtDREc7K0NJRTtJQ2lCO01ERztTRUk7c0JDQyxpREQsQ0Y7NEJJSztJSkc7U0tHO2dCQ0MsNkNELENMO0NKZ0MifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJTZXRQcm9wZXJ0aWVzRXhhbXBsZUFwcCIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2U7RUNDO0dEYTtDREMifV0sW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJSb290Vmlld1NpemVGbGV4aWJpbGl0eUV4YW1wbGVBcHAiLCJjb25zdHJ1Y3RvciIsIl9vblByZXNzQnV0dG9uIiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTtFQ0k7R0RHO0VFRTtHRkU7RUdFO0dIZTtDREMifV1dLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxOSwyMCwyMSwyMiwyMywyNCwyOSwzMCwzMSwzMiwzMywzNCwzNSw0Myw0NCw0Niw0Nyw1Myw1NCw1NSw1Niw4Niw4Nyw4OCw4OSw5MSwxMDEsMTA2LDEwOSwxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3LDEyOCwxMjksMTMwLDEzMSwxMzIsMTM1LDEzNiwxMzcsMTM4LDE0MSwxNTAsMTU5LDE2NywxNjgsMTc4LDIwOSwyMTAsMjIzLDIzMiwyNDQsMjQ1LDI0NiwyNjcsNDQyLDQ3Miw0NzMsNDc0LDQ5NSw3NzZdLCJuYW1lcyI6WyJnbG9iYWwiLCJfX3IiLCJtZXRyb1JlcXVpcmUiLCJfX01FVFJPX0dMT0JBTF9QUkVGSVhfXyIsImRlZmluZSIsIl9fYyIsImNsZWFyIiwiX19yZWdpc3RlclNlZ21lbnQiLCJyZWdpc3RlclNlZ21lbnQiLCJtb2R1bGVzIiwiRU1QVFkiLCJDWUNMRV9ERVRFQ1RFRCIsIl9yZWYiLCJoYXNPd25Qcm9wZXJ0eSIsIl9fREVWX18iLCIkUmVmcmVzaFJlZyQiLCIkUmVmcmVzaFNpZyQiLCJ0eXBlIiwiT2JqZWN0IiwiY3JlYXRlIiwidmVyYm9zZU5hbWVzVG9Nb2R1bGVJZHMiLCJpbml0aWFsaXppbmdNb2R1bGVJZHMiLCJmYWN0b3J5IiwibW9kdWxlSWQiLCJkZXBlbmRlbmN5TWFwIiwiaW52ZXJzZURlcGVuZGVuY2llcyIsImFyZ3VtZW50cyIsIl9fYWNjZXB0IiwibW9kIiwiaGFzRXJyb3IiLCJpbXBvcnRlZEFsbCIsImltcG9ydGVkRGVmYXVsdCIsImlzSW5pdGlhbGl6ZWQiLCJwdWJsaWNNb2R1bGUiLCJleHBvcnRzIiwiaG90IiwiY3JlYXRlSG90UmVsb2FkaW5nT2JqZWN0IiwidmVyYm9zZU5hbWUiLCJFcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwibW9kdWxlSWRSZWFsbHlJc051bWJlciIsImluaXRpYWxpemluZ0luZGV4IiwiaW5kZXhPZiIsImN5Y2xlIiwic2xpY2UiLCJtYXAiLCJpZCIsInNob3VsZFByaW50UmVxdWlyZUN5Y2xlIiwicHVzaCIsImpvaW4iLCJtb2R1bGUiLCJndWFyZGVkTG9hZE1vZHVsZSIsInJlZ0V4cHMiLCJBcnJheSIsImlzQXJyYXkiLCJpc0lnbm9yZWQiLCJzb21lIiwicmVnRXhwIiwidGVzdCIsImV2ZXJ5IiwibWV0cm9JbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJpbXBvcnREZWZhdWx0IiwibWV0cm9JbXBvcnRBbGwiLCJrZXkiLCJjYWxsIiwiaW1wb3J0QWxsIiwiY29udGV4dCIsImZhbGxiYWNrUmVxdWlyZUNvbnRleHQiLCJyZXNvbHZlV2VhayIsImZhbGxiYWNrUmVxdWlyZVJlc29sdmVXZWFrIiwiaW5HdWFyZCIsIkVycm9yVXRpbHMiLCJyZXR1cm5WYWx1ZSIsImxvYWRNb2R1bGVJbXBsZW1lbnRhdGlvbiIsImUiLCJyZXBvcnRGYXRhbEVycm9yIiwiSURfTUFTS19TSElGVCIsIkxPQ0FMX0lEX01BU0siLCJ1bnBhY2tNb2R1bGVJZCIsInNlZ21lbnRJZCIsImxvY2FsSWQiLCJwYWNrTW9kdWxlSWQiLCJ2YWx1ZSIsIm1vZHVsZURlZmluZXJzQnlTZWdtZW50SUQiLCJkZWZpbmluZ1NlZ21lbnRCeU1vZHVsZUlEIiwiTWFwIiwibW9kdWxlRGVmaW5lciIsIm1vZHVsZUlkcyIsImZvckVhY2giLCJoYXMiLCJzZXQiLCJsZW5ndGgiLCJfZGVmaW5pbmdTZWdtZW50QnlNb2QiLCJnZXQiLCJkZWZpbmVyIiwiZGVsZXRlIiwibmF0aXZlUmVxdWlyZSIsIl91bnBhY2tNb2R1bGVJZCIsInVua25vd25Nb2R1bGVFcnJvciIsImVycm9yIiwiU3lzdHJhY2UiLCJyZXF1aXJlU3lzdHJhY2UiLCJSZWZyZXNoIiwicmVxdWlyZVJlZnJlc2giLCJfbW9kdWxlIiwiYmVnaW5FdmVudCIsIm1vZHVsZU9iamVjdCIsInByZXZSZWZyZXNoUmVnIiwicHJldlJlZnJlc2hTaWciLCJSZWZyZXNoUnVudGltZSIsInJlZ2lzdGVyIiwiY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0iLCJ1bmRlZmluZWQiLCJlbmRFdmVudCIsInJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaCIsInBvcCIsIm1lc3NhZ2UiLCJnZXRNb2R1bGVzIiwiX2FjY2VwdENhbGxiYWNrIiwiX2Rpc3Bvc2VDYWxsYmFjayIsIl9kaWRBY2NlcHQiLCJhY2NlcHQiLCJjYWxsYmFjayIsImRpc3Bvc2UiLCJyZWFjdFJlZnJlc2hUaW1lb3V0IiwibWV0cm9Ib3RVcGRhdGVNb2R1bGUiLCJyZWZyZXNoQm91bmRhcnlJRHMiLCJTZXQiLCJkaWRCYWlsT3V0IiwidXBkYXRlZE1vZHVsZUlEcyIsInRvcG9sb2dpY2FsU29ydCIsInBlbmRpbmdJRCIsInBlbmRpbmdNb2R1bGUiLCJwZW5kaW5nSG90IiwiY2FuQWNjZXB0IiwiaXNCb3VuZGFyeSIsImlzUmVhY3RSZWZyZXNoQm91bmRhcnkiLCJhZGQiLCJwYXJlbnRJRHMiLCJwZXJmb3JtRnVsbFJlZnJlc2giLCJzb3VyY2UiLCJmYWlsZWQiLCJyZXZlcnNlIiwic2Vlbk1vZHVsZUlEcyIsImkiLCJ1cGRhdGVkSUQiLCJ1cGRhdGVkTW9kIiwicHJldkV4cG9ydHMiLCJkaWRFcnJvciIsInJ1blVwZGF0ZWRNb2R1bGUiLCJuZXh0RXhwb3J0cyIsImlzTm9Mb25nZXJBQm91bmRhcnkiLCJkaWRJbnZhbGlkYXRlIiwic2hvdWxkSW52YWxpZGF0ZVJlYWN0UmVmcmVzaEJvdW5kYXJ5IiwiaiIsInBhcmVudElEIiwicGFyZW50TW9kIiwiY2FuQWNjZXB0UGFyZW50Iiwic2V0VGltZW91dCIsInBlcmZvcm1SZWFjdFJlZnJlc2giLCJyb290cyIsImdldEVkZ2VzIiwiZWFybHlTdG9wIiwicmVzdWx0IiwidmlzaXRlZCIsInN0YWNrIiwidHJhdmVyc2VEZXBlbmRlbnROb2RlcyIsIm5vZGUiLCJkZXBlbmRlbnROb2RlcyIsImRlcGVuZGVudCIsInJvb3QiLCJyZWFzb24iLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInJlbG9hZCIsIl9tb2R1bGVzJHNvdXJjZSR2ZXJibyIsIl9tb2R1bGVzJHNvdXJjZSIsIl9tb2R1bGVzJGZhaWxlZCR2ZXJibyIsIl9tb2R1bGVzJGZhaWxlZCIsInNvdXJjZU5hbWUiLCJmYWlsZWROYW1lIiwibW9kdWxlRXhwb3J0cyIsImlzTGlrZWx5Q29tcG9uZW50VHlwZSIsImhhc0V4cG9ydHMiLCJhcmVBbGxFeHBvcnRzQ29tcG9uZW50cyIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJleHBvcnRWYWx1ZSIsInByZXZTaWduYXR1cmUiLCJnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmUiLCJuZXh0U2lnbmF0dXJlIiwic2lnbmF0dXJlIiwiZ2V0RmFtaWx5QnlUeXBlIiwibW9kdWxlSUQiLCJ0eXBlSUQiLCJnbG9iYWxUaGlzIiwiaW5zcGVjdCIsIm9iaiIsIm9wdHMiLCJjdHgiLCJzZWVuIiwiZm9ybWF0VmFsdWVDYWxscyIsInN0eWxpemUiLCJzdHlsaXplTm9Db2xvciIsImZvcm1hdFZhbHVlIiwiZGVwdGgiLCJzdHIiLCJzdHlsZVR5cGUiLCJhcnJheVRvSGFzaCIsImFycmF5IiwiaGFzaCIsInZhbCIsImlkeCIsInJlY3Vyc2VUaW1lcyIsInByaW1pdGl2ZSIsImZvcm1hdFByaW1pdGl2ZSIsImtleXMiLCJ2aXNpYmxlS2V5cyIsImlzRXJyb3IiLCJmb3JtYXRFcnJvciIsImlzRnVuY3Rpb24iLCJuYW1lIiwiaXNSZWdFeHAiLCJSZWdFeHAiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImlzRGF0ZSIsIkRhdGUiLCJiYXNlIiwiYnJhY2VzIiwibiIsInRvVVRDU3RyaW5nIiwib3V0cHV0IiwiZm9ybWF0QXJyYXkiLCJmb3JtYXRQcm9wZXJ0eSIsInJlZHVjZVRvU2luZ2xlU3RyaW5nIiwiaXNVbmRlZmluZWQiLCJpc1N0cmluZyIsInNpbXBsZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXBsYWNlIiwiaXNOdW1iZXIiLCJpc0Jvb2xlYW4iLCJpc051bGwiLCJsIiwiU3RyaW5nIiwibWF0Y2giLCJzcGxpdCIsImxpbmUiLCJudW1MaW5lc0VzdCIsInJlZHVjZSIsInByZXYiLCJjdXIiLCJhciIsImFyZyIsImlzTnVsbE9yVW5kZWZpbmVkIiwiaXNTeW1ib2wiLCJyZSIsImlzT2JqZWN0Iiwib2JqZWN0VG9TdHJpbmciLCJkIiwibyIsInByb3AiLCJPQkpFQ1RfQ09MVU1OX05BTUUiLCJMT0dfTEVWRUxTIiwidHJhY2UiLCJpbmZvIiwiSU5TUEVDVE9SX0xFVkVMUyIsIklOU1BFQ1RPUl9GUkFNRVNfVE9fU0tJUCIsImdldE5hdGl2ZUxvZ0Z1bmN0aW9uIiwibGV2ZWwiLCJmaXJzdEFyZyIsImxvZ0xldmVsIiwiX19pbnNwZWN0b3JMb2ciLCJncm91cFN0YWNrIiwiZ3JvdXBGb3JtYXQiLCJuYXRpdmVMb2dnaW5nSG9vayIsInJlcGVhdCIsImVsZW1lbnQiLCJhcHBseSIsImNvbnNvbGVUYWJsZVBvbHlmaWxsIiwicm93cyIsImRhdGEiLCJyb3ciLCJjb2x1bW5zIiwic29ydCIsInN0cmluZ1Jvd3MiLCJjb2x1bW5XaWR0aHMiLCJrIiwiY2VsbFN0ciIsIk1hdGgiLCJtYXgiLCJqb2luUm93Iiwic3BhY2UiLCJjZWxscyIsImNlbGwiLCJleHRyYVNwYWNlcyIsInNlcGFyYXRvcnMiLCJjb2x1bW5XaWR0aCIsInNlcGFyYXRvclJvdyIsImhlYWRlciIsInRhYmxlIiwiR1JPVVBfUEFEIiwiR1JPVVBfT1BFTiIsIkdST1VQX0NMT1NFIiwicHJlZml4IiwibXNnIiwiY29uc29sZUdyb3VwUG9seWZpbGwiLCJsYWJlbCIsImNvbnNvbGVHcm91cENvbGxhcHNlZFBvbHlmaWxsIiwiY29uc29sZUdyb3VwRW5kUG9seWZpbGwiLCJjb25zb2xlQXNzZXJ0UG9seWZpbGwiLCJleHByZXNzaW9uIiwib3JpZ2luYWxDb25zb2xlIiwiZGVzY3JpcHRvciIsImRlZmluZVByb3BlcnR5IiwibG9nIiwiZGVidWciLCJncm91cCIsImdyb3VwRW5kIiwiZ3JvdXBDb2xsYXBzZWQiLCJhc3NlcnQiLCJlbnVtZXJhYmxlIiwibWV0aG9kTmFtZSIsInJlYWN0TmF0aXZlTWV0aG9kIiwic3R1YiIsInByaW50IiwiZGlyIiwiZGlyeG1sIiwicHJvZmlsZSIsInByb2ZpbGVFbmQiLCJfaW5HdWFyZCIsIl9nbG9iYWxIYW5kbGVyIiwib25FcnJvciIsImlzRmF0YWwiLCJzZXRHbG9iYWxIYW5kbGVyIiwiZnVuIiwiZ2V0R2xvYmFsSGFuZGxlciIsInJlcG9ydEVycm9yIiwiYXBwbHlXaXRoR3VhcmQiLCJhcmdzIiwidW51c2VkX29uRXJyb3IiLCJ1bnVzZWRfbmFtZSIsImFwcGx5V2l0aEd1YXJkSWZOZWVkZWQiLCJndWFyZCIsImd1YXJkTmFtZSIsImd1YXJkZWQiLCJfbGVuIiwiX2tleSIsIl9STlRlc3Rlck1vZHVsZUNvbnRhaW5lciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfJCRfUkVRVUlSRSIsIl9kZXBlbmRlbmN5TWFwIiwiX1NuYXBzaG90Vmlld0lPUyIsIl9STlRlc3RlckFwcFNoYXJlZCIsIl9STlRlc3Rlckxpc3QiLCJfcmVhY3QiLCJfcmVhY3ROYXRpdmUiLCJfanN4UnVudGltZSIsIl9qc3hGaWxlTmFtZSIsIl9jcmVhdGVTdXBlciIsIkRlcml2ZWQiLCJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9jcmVhdGVTdXBlckludGVybmFsIiwiU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiTmV3VGFyZ2V0IiwiY29uc3RydWN0b3IiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwic2hhbSIsIlByb3h5IiwiQm9vbGVhbiIsInZhbHVlT2YiLCJBcHBSZWdpc3RyeSIsInJlZ2lzdGVyQ29tcG9uZW50IiwicmVxdWlyZSIsIlJOVGVzdGVyQXBwIiwiUk5UZXN0ZXJMaXN0IiwiQ29tcG9uZW50cyIsImNvbmNhdCIsIkFQSXMiLCJFeGFtcGxlIiwiRXhhbXBsZU1vZHVsZSIsImRpc3BsYXlOYW1lIiwiU25hcHNob3R0ZXIiLCJfUmVhY3QkQ29tcG9uZW50IiwiX2luaGVyaXRzMiIsIl9zdXBlciIsIl9jbGFzc0NhbGxDaGVjazIiLCJfY3JlYXRlQ2xhc3MyIiwicmVuZGVyIiwianN4IiwiY2hpbGRyZW4iLCJvbkV4YW1wbGVDYXJkUHJlc3MiLCJSZWFjdCIsIkNvbXBvbmVudCIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJfZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsImlucHV0IiwiaGludCIsInByaW0iLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsInJlcyIsIk51bWJlciIsIl90eXBlb2YiLCJpdGVyYXRvciIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIl9zZXRQcm90b3R5cGVPZiIsInAiLCJzZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJfZ2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsIl9STlRQcmVzc2FibGVSb3ciLCJfUk5UVGVzdERldGFpbHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9zIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwiY2FjaGUiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXRFeGFtcGxlVGl0bGUiLCJ0aXRsZSIsInBsYXRmb3JtIiwiUk5UZXN0ZXJNb2R1bGVDb250YWluZXIiLCJfdGhpcyIsImV4YW1wbGUiLCJ0aGVtZSIsInVzZUNvbnRleHQiLCJSTlRlc3RlclRoZW1lQ29udGV4dCIsInJlbmRlckV4YW1wbGUiLCJkZXNjcmlwdGlvbiIsIkV4YW1wbGVDb21wb25lbnQiLCJQbGF0Zm9ybSIsIk9TIiwic2hvd0luZGl2aWR1YWxFeGFtcGxlcyIsIm9uUHJlc3MiLCJhY2Nlc3NpYmlsaXR5TGFiZWwiLCJzdHlsZSIsIlN0eWxlU2hlZXQiLCJjb21wb3NlIiwic3R5bGVzIiwic2VwYXJhdG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJTZXBhcmF0b3JDb2xvciIsImV4YW1wbGVzIiwiX21vZHVsZSRleGFtcGxlcyQwJGRlIiwiTW9kdWxlU2luZ2xlRXhhbXBsZSIsImpzeHMiLCJGcmFnbWVudCIsIkhlYWRlciIsImZpbHRlciIsImZpbHRlclJlZ2V4Iiwic2VjdGlvbnMiLCJleHBlY3QiLCJWaWV3IiwiZXhhbXBsZXNDb250YWluZXIiLCJ0ZXN0SUQiLCJub0JvdHRvbVBhZGRpbmciLCJwYWdlIiwiaGlkZUZpbHRlclBpbGxzIiwiX3JlZjIiLCJmaWx0ZXJlZFNlY3Rpb25zIiwic2VjdGlvbkNvbnRhaW5lciIsIl9jIiwiaGVhZGVyQ29udGFpbmVyIiwiaGVhZGVyTm9Cb3R0b21QYWRkaW5nIiwiYmFja2dyb3VuZENvbG9yIiwiU3lzdGVtQmFja2dyb3VuZENvbG9yIiwiQmFja2dyb3VuZENvbG9yIiwiVGV4dCIsImhlYWRlckRlc2NyaXB0aW9uIiwiY29sb3IiLCJMYWJlbENvbG9yIiwiX2MyIiwicGFkZGluZ0hvcml6b250YWwiLCJwYWRkaW5nVmVydGljYWwiLCJhbGlnbkl0ZW1zIiwiZm9udFNpemUiLCJwYWRkaW5nQm90dG9tIiwiZmxleEdyb3ciLCJmbGV4IiwiYm9yZGVyQm90dG9tV2lkdGgiLCJzZWxlY3QiLCJpb3MiLCJoYWlybGluZVdpZHRoIiwiYW5kcm9pZCIsIm1hcmdpbkhvcml6b250YWwiLCJyb3dHYXAiLCJfUk5UZXN0ZXJDb21wb25lbnRUaXRsZSIsIlJOVFByZXNzYWJsZVJvdyIsIm9uUHJlc3NJbiIsIm9uUHJlc3NPdXQiLCJib3R0b21BZGRPbiIsIlByZXNzYWJsZSIsInByZXNzZWQiLCJTZWNvbmRhcnlTeXN0ZW1GaWxsQ29sb3IiLCJTZWNvbmRhcnlHcm91cGVkQmFja2dyb3VuZENvbG9yIiwidG9wUm93U3R5bGUiLCJkZXNjcmlwdGlvblRleHQiLCJTZWNvbmRhcnlMYWJlbENvbG9yIiwianVzdGlmeUNvbnRlbnQiLCJtYXJnaW5WZXJ0aWNhbCIsIm92ZXJmbG93IiwiZWxldmF0aW9uIiwibGluZUhlaWdodCIsIm1hcmdpbkJvdHRvbSIsImZsZXhEaXJlY3Rpb24iLCJfcmVxdWlyZSIsIlJOVGVzdGVyQ29tcG9uZW50VGl0bGUiLCJDb25zdW1lciIsInRpdGxlVGV4dCIsImZvbnRXZWlnaHQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJmIiwiZm9yIiwibSIsIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwiUmVhY3RDdXJyZW50T3duZXIiLCJyZWYiLCJfX3NlbGYiLCJfX3NvdXJjZSIsInEiLCJjIiwiYSIsImciLCJiIiwiaCIsImRlZmF1bHRQcm9wcyIsIiQkdHlwZW9mIiwiX293bmVyIiwiY3VycmVudCIsInIiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiQSIsIkIiLCJpc01vdW50ZWQiLCJlbnF1ZXVlRm9yY2VVcGRhdGUiLCJlbnF1ZXVlUmVwbGFjZVN0YXRlIiwiZW5xdWV1ZVNldFN0YXRlIiwiQyIsImFzc2lnbiIsIkQiLCJFIiwicmVmcyIsInVwZGF0ZXIiLCJpc1JlYWN0Q29tcG9uZW50Iiwic2V0U3RhdGUiLCJmb3JjZVVwZGF0ZSIsIkYiLCJHIiwiSCIsImlzUHVyZVJlYWN0Q29tcG9uZW50IiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsImVzY2FwZSIsIlAiLCJRIiwiUiIsIm5leHQiLCJkb25lIiwiUyIsIlQiLCJfc3RhdHVzIiwiX3Jlc3VsdCIsInRoZW4iLCJVIiwiViIsInRyYW5zaXRpb24iLCJXIiwiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsIlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnIiwiQ2hpbGRyZW4iLCJjb3VudCIsInRvQXJyYXkiLCJvbmx5IiwiUHJvZmlsZXIiLCJQdXJlQ29tcG9uZW50IiwiU3RyaWN0TW9kZSIsIlN1c3BlbnNlIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlQ29udGV4dCIsIl9jdXJyZW50VmFsdWUiLCJfY3VycmVudFZhbHVlMiIsIl90aHJlYWRDb3VudCIsIlByb3ZpZGVyIiwiX2RlZmF1bHRWYWx1ZSIsIl9nbG9iYWxOYW1lIiwiX2NvbnRleHQiLCJjcmVhdGVFbGVtZW50IiwiY3JlYXRlRmFjdG9yeSIsImNyZWF0ZVJlZiIsImZvcndhcmRSZWYiLCJpc1ZhbGlkRWxlbWVudCIsImxhenkiLCJfcGF5bG9hZCIsIl9pbml0IiwibWVtbyIsImNvbXBhcmUiLCJzdGFydFRyYW5zaXRpb24iLCJ1bnN0YWJsZV9hY3QiLCJ1c2VDYWxsYmFjayIsInVzZURlYnVnVmFsdWUiLCJ1c2VEZWZlcnJlZFZhbHVlIiwidXNlRWZmZWN0IiwidXNlSWQiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlSW5zZXJ0aW9uRWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZHVjZXIiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwidXNlVHJhbnNpdGlvbiIsInZlcnNpb24iLCJfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJyZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQiLCJSZWFjdFZlcnNpb24iLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJSRUFDVF9QT1JUQUxfVFlQRSIsIlJFQUNUX0ZSQUdNRU5UX1RZUEUiLCJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwiUkVBQ1RfUFJPRklMRVJfVFlQRSIsIlJFQUNUX1BST1ZJREVSX1RZUEUiLCJSRUFDVF9DT05URVhUX1RZUEUiLCJSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsIlJFQUNUX01FTU9fVFlQRSIsIlJFQUNUX0xBWllfVFlQRSIsIlJFQUNUX09GRlNDUkVFTl9UWVBFIiwiTUFZQkVfSVRFUkFUT1JfU1lNQk9MIiwiRkFVWF9JVEVSQVRPUl9TWU1CT0wiLCJnZXRJdGVyYXRvckZuIiwibWF5YmVJdGVyYWJsZSIsIm1heWJlSXRlcmF0b3IiLCJSZWFjdEN1cnJlbnRBY3RRdWV1ZSIsImlzQmF0Y2hpbmdMZWdhY3kiLCJkaWRTY2hlZHVsZUxlZ2FjeVVwZGF0ZSIsIlJlYWN0RGVidWdDdXJyZW50RnJhbWUiLCJjdXJyZW50RXh0cmFTdGFja0ZyYW1lIiwic2V0RXh0cmFTdGFja0ZyYW1lIiwiZ2V0Q3VycmVudFN0YWNrIiwiZ2V0U3RhY2tBZGRlbmR1bSIsImltcGwiLCJlbmFibGVTY29wZUFQSSIsImVuYWJsZUNhY2hlRWxlbWVudCIsImVuYWJsZVRyYW5zaXRpb25UcmFjaW5nIiwiZW5hYmxlTGVnYWN5SGlkZGVuIiwiZW5hYmxlRGVidWdUcmFjaW5nIiwiUmVhY3RTaGFyZWRJbnRlcm5hbHMiLCJmb3JtYXQiLCJwcmludFdhcm5pbmciLCJfbGVuMiIsIl9rZXkyIiwiYXJnc1dpdGhGb3JtYXQiLCJpdGVtIiwidW5zaGlmdCIsIkZ1bmN0aW9uIiwiZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50Iiwid2Fybk5vb3AiLCJwdWJsaWNJbnN0YW5jZSIsImNhbGxlck5hbWUiLCJfY29uc3RydWN0b3IiLCJjb21wb25lbnROYW1lIiwid2FybmluZ0tleSIsIlJlYWN0Tm9vcFVwZGF0ZVF1ZXVlIiwiY29tcGxldGVTdGF0ZSIsInBhcnRpYWxTdGF0ZSIsImVtcHR5T2JqZWN0IiwiZnJlZXplIiwiZGVwcmVjYXRlZEFQSXMiLCJyZXBsYWNlU3RhdGUiLCJkZWZpbmVEZXByZWNhdGlvbldhcm5pbmciLCJmbk5hbWUiLCJDb21wb25lbnREdW1teSIsInB1cmVDb21wb25lbnRQcm90b3R5cGUiLCJyZWZPYmplY3QiLCJzZWFsIiwiaXNBcnJheUltcGwiLCJ0eXBlTmFtZSIsImhhc1RvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJ3aWxsQ29lcmNpb25UaHJvdyIsInRlc3RTdHJpbmdDb2VyY2lvbiIsImNoZWNrS2V5U3RyaW5nQ29lcmNpb24iLCJnZXRXcmFwcGVkTmFtZSIsIm91dGVyVHlwZSIsImlubmVyVHlwZSIsIndyYXBwZXJOYW1lIiwiZnVuY3Rpb25OYW1lIiwiZ2V0Q29udGV4dE5hbWUiLCJnZXRDb21wb25lbnROYW1lRnJvbVR5cGUiLCJ0YWciLCJwcm92aWRlciIsIm91dGVyTmFtZSIsImxhenlDb21wb25lbnQiLCJwYXlsb2FkIiwiaW5pdCIsIlJFU0VSVkVEX1BST1BTIiwic3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24iLCJzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biIsImRpZFdhcm5BYm91dFN0cmluZ1JlZnMiLCJoYXNWYWxpZFJlZiIsImNvbmZpZyIsImdldHRlciIsImlzUmVhY3RXYXJuaW5nIiwiaGFzVmFsaWRLZXkiLCJkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlciIsIndhcm5BYm91dEFjY2Vzc2luZ0tleSIsImRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyIiwid2FybkFib3V0QWNjZXNzaW5nUmVmIiwid2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkIiwic3RhdGVOb2RlIiwiUmVhY3RFbGVtZW50Iiwib3duZXIiLCJfc3RvcmUiLCJwcm9wTmFtZSIsImNoaWxkcmVuTGVuZ3RoIiwiY2hpbGRBcnJheSIsImNsb25lQW5kUmVwbGFjZUtleSIsIm9sZEVsZW1lbnQiLCJuZXdLZXkiLCJuZXdFbGVtZW50IiwiX3NlbGYiLCJfc291cmNlIiwib2JqZWN0IiwiU0VQQVJBVE9SIiwiU1VCU0VQQVJBVE9SIiwiZXNjYXBlUmVnZXgiLCJlc2NhcGVyTG9va3VwIiwiZXNjYXBlZFN0cmluZyIsImRpZFdhcm5BYm91dE1hcHMiLCJ1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCIsImVzY2FwZVVzZXJQcm92aWRlZEtleSIsInRleHQiLCJnZXRFbGVtZW50S2V5IiwiaW5kZXgiLCJtYXBJbnRvQXJyYXkiLCJlc2NhcGVkUHJlZml4IiwibmFtZVNvRmFyIiwiaW52b2tlQ2FsbGJhY2siLCJfY2hpbGQiLCJtYXBwZWRDaGlsZCIsImNoaWxkS2V5IiwiZXNjYXBlZENoaWxkS2V5IiwiY2hpbGQiLCJuZXh0TmFtZSIsInN1YnRyZWVDb3VudCIsIm5leHROYW1lUHJlZml4IiwiaXRlcmF0b3JGbiIsIml0ZXJhYmxlQ2hpbGRyZW4iLCJlbnRyaWVzIiwic3RlcCIsImlpIiwiY2hpbGRyZW5TdHJpbmciLCJtYXBDaGlsZHJlbiIsImZ1bmMiLCJjb3VudENoaWxkcmVuIiwiZm9yRWFjaENoaWxkcmVuIiwiZm9yRWFjaEZ1bmMiLCJmb3JFYWNoQ29udGV4dCIsIm9ubHlDaGlsZCIsImRlZmF1bHRWYWx1ZSIsImhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzIiwiaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIiLCJoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciIsImRlZmluZVByb3BlcnRpZXMiLCJfUHJvdmlkZXIiLCJfY3VycmVudFJlbmRlcmVyIiwiX2N1cnJlbnRSZW5kZXJlcjIiLCJVbmluaXRpYWxpemVkIiwiUGVuZGluZyIsIlJlc29sdmVkIiwiUmVqZWN0ZWQiLCJsYXp5SW5pdGlhbGl6ZXIiLCJjdG9yIiwidGhlbmFibGUiLCJyZXNvbHZlZCIsInJlamVjdGVkIiwicGVuZGluZyIsImxhenlUeXBlIiwicHJvcFR5cGVzIiwibmV3RGVmYXVsdFByb3BzIiwibmV3UHJvcFR5cGVzIiwiZWxlbWVudFR5cGUiLCJvd25OYW1lIiwiUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSIsImlzVmFsaWRFbGVtZW50VHlwZSIsImdldE1vZHVsZUlkIiwicmVzb2x2ZURpc3BhdGNoZXIiLCJkaXNwYXRjaGVyIiwiQ29udGV4dCIsInJlYWxDb250ZXh0IiwiaW5pdGlhbFN0YXRlIiwicmVkdWNlciIsImluaXRpYWxBcmciLCJpbml0aWFsVmFsdWUiLCJkZXBzIiwiZm9ybWF0dGVyRm4iLCJzdWJzY3JpYmUiLCJnZXRTbmFwc2hvdCIsImdldFNlcnZlclNuYXBzaG90IiwiZGlzYWJsZWREZXB0aCIsInByZXZMb2ciLCJwcmV2SW5mbyIsInByZXZXYXJuIiwicHJldkVycm9yIiwicHJldkdyb3VwIiwicHJldkdyb3VwQ29sbGFwc2VkIiwicHJldkdyb3VwRW5kIiwiZGlzYWJsZWRMb2ciLCJfX3JlYWN0RGlzYWJsZWRMb2ciLCJkaXNhYmxlTG9ncyIsInJlZW5hYmxlTG9ncyIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSIsImRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lIiwib3duZXJGbiIsInRyaW0iLCJyZWVudHJ5IiwiY29tcG9uZW50RnJhbWVDYWNoZSIsIlBvc3NpYmx5V2Vha01hcCIsImRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUiLCJmbiIsImZyYW1lIiwiY29udHJvbCIsInByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UiLCJwcmVwYXJlU3RhY2tUcmFjZSIsInByZXZpb3VzRGlzcGF0Y2hlciIsIkZha2UiLCJzYW1wbGUiLCJzYW1wbGVMaW5lcyIsImNvbnRyb2xMaW5lcyIsInMiLCJfZnJhbWUiLCJpbmNsdWRlcyIsInN5bnRoZXRpY0ZyYW1lIiwiZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lIiwic2hvdWxkQ29uc3RydWN0IiwiZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWIiwibG9nZ2VkVHlwZUZhaWx1cmVzIiwiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxIiwic2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQiLCJjaGVja1Byb3BUeXBlcyIsInR5cGVTcGVjcyIsInZhbHVlcyIsInR5cGVTcGVjTmFtZSIsImVycm9yJDEiLCJlcnIiLCJleCIsInNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEiLCJwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biIsImdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSIsImdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyIsImVsZW1lbnRQcm9wcyIsIm93bmVySGFzS2V5VXNlV2FybmluZyIsImdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8iLCJwYXJlbnRUeXBlIiwicGFyZW50TmFtZSIsInZhbGlkYXRlRXhwbGljaXRLZXkiLCJ2YWxpZGF0ZWQiLCJjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvIiwiY2hpbGRPd25lciIsInZhbGlkYXRlQ2hpbGRLZXlzIiwidmFsaWRhdGVQcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJfbmFtZSIsImdldERlZmF1bHRQcm9wcyIsImlzUmVhY3RDbGFzc0FwcHJvdmVkIiwidmFsaWRhdGVGcmFnbWVudFByb3BzIiwiZnJhZ21lbnQiLCJjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24iLCJ2YWxpZFR5cGUiLCJzb3VyY2VJbmZvIiwidHlwZVN0cmluZyIsImRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5IiwiY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIiwidmFsaWRhdGVkRmFjdG9yeSIsImNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIiwic2NvcGUiLCJvcHRpb25zIiwicHJldlRyYW5zaXRpb24iLCJjdXJyZW50VHJhbnNpdGlvbiIsIl91cGRhdGVkRmliZXJzIiwidXBkYXRlZEZpYmVyc0NvdW50Iiwic2l6ZSIsImRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsIiwiZW5xdWV1ZVRhc2tJbXBsIiwiZW5xdWV1ZVRhc2siLCJ0YXNrIiwicmVxdWlyZVN0cmluZyIsInJhbmRvbSIsIm5vZGVSZXF1aXJlIiwic2V0SW1tZWRpYXRlIiwiX2VyciIsIk1lc3NhZ2VDaGFubmVsIiwiY2hhbm5lbCIsInBvcnQxIiwib25tZXNzYWdlIiwicG9ydDIiLCJwb3N0TWVzc2FnZSIsImFjdFNjb3BlRGVwdGgiLCJkaWRXYXJuTm9Bd2FpdEFjdCIsImFjdCIsInByZXZBY3RTY29wZURlcHRoIiwicHJldklzQmF0Y2hpbmdMZWdhY3kiLCJxdWV1ZSIsImZsdXNoQWN0UXVldWUiLCJwb3BBY3RTY29wZSIsInRoZW5hYmxlUmVzdWx0Iiwid2FzQXdhaXRlZCIsInJlc29sdmUiLCJyZWplY3QiLCJyZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrIiwiUHJvbWlzZSIsIl9xdWV1ZSIsIl90aGVuYWJsZSIsIl90aGVuYWJsZTIiLCJpc0ZsdXNoaW5nIiwiY3JlYXRlRWxlbWVudCQxIiwiY2xvbmVFbGVtZW50JDEiLCJyZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCIsImpzeERFViIsIm1heWJlS2V5IiwiUmVhY3RDdXJyZW50T3duZXIkMSIsImpzeFdpdGhWYWxpZGF0aW9uIiwiaXNTdGF0aWNDaGlsZHJlbiIsImpzeFdpdGhWYWxpZGF0aW9uU3RhdGljIiwianN4V2l0aFZhbGlkYXRpb25EeW5hbWljIiwicmVnaXN0ZXJDYWxsYWJsZU1vZHVsZSIsIkFjY2Vzc2liaWxpdHlJbmZvIiwiQWN0aXZpdHlJbmRpY2F0b3IiLCJCdXR0b24iLCJEcmF3ZXJMYXlvdXRBbmRyb2lkIiwiRmxhdExpc3QiLCJJbWFnZSIsIkltYWdlQmFja2dyb3VuZCIsIklucHV0QWNjZXNzb3J5VmlldyIsIktleWJvYXJkQXZvaWRpbmdWaWV3IiwiUG9wdXBNZW51QW5kcm9pZCIsIk1vZGFsIiwiUHJvZ3Jlc3NCYXJBbmRyb2lkIiwiUmVmcmVzaENvbnRyb2wiLCJTYWZlQXJlYVZpZXciLCJTY3JvbGxWaWV3IiwiU2VjdGlvbkxpc3QiLCJTdGF0dXNCYXIiLCJTd2l0Y2giLCJUZXh0SW5wdXQiLCJUb3VjaGFibGUiLCJUb3VjaGFibGVIaWdobGlnaHQiLCJUb3VjaGFibGVOYXRpdmVGZWVkYmFjayIsIlRvdWNoYWJsZU9wYWNpdHkiLCJUb3VjaGFibGVXaXRob3V0RmVlZGJhY2siLCJWaXJ0dWFsaXplZExpc3QiLCJWaXJ0dWFsaXplZFNlY3Rpb25MaXN0IiwiQWN0aW9uU2hlZXRJT1MiLCJBbGVydCIsIkFuaW1hdGVkIiwiQXBwZWFyYW5jZSIsIkFwcFN0YXRlIiwiQmFja0hhbmRsZXIiLCJDbGlwYm9hcmQiLCJEZXZpY2VJbmZvIiwiRGV2U2V0dGluZ3MiLCJEaW1lbnNpb25zIiwiRWFzaW5nIiwiZmluZE5vZGVIYW5kbGUiLCJJMThuTWFuYWdlciIsIkludGVyYWN0aW9uTWFuYWdlciIsIktleWJvYXJkIiwiTGF5b3V0QW5pbWF0aW9uIiwiTGlua2luZyIsIkxvZ0JveCIsIk5hdGl2ZURpYWxvZ01hbmFnZXJBbmRyb2lkIiwiTmF0aXZlRXZlbnRFbWl0dGVyIiwiTmV0d29ya2luZyIsIlBhblJlc3BvbmRlciIsIlBlcm1pc3Npb25zQW5kcm9pZCIsIlBpeGVsUmF0aW8iLCJQdXNoTm90aWZpY2F0aW9uSU9TIiwiU2V0dGluZ3MiLCJTaGFyZSIsIlRvYXN0QW5kcm9pZCIsIlR1cmJvTW9kdWxlUmVnaXN0cnkiLCJVSU1hbmFnZXIiLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsInVzZUFuaW1hdGVkVmFsdWUiLCJ1c2VDb2xvclNjaGVtZSIsInVzZVdpbmRvd0RpbWVuc2lvbnMiLCJVVEZTZXF1ZW5jZSIsIlZpYnJhdGlvbiIsIlllbGxvd0JveCIsIkRldmljZUV2ZW50RW1pdHRlciIsIkR5bmFtaWNDb2xvcklPUyIsIk5hdGl2ZUFwcEV2ZW50RW1pdHRlciIsIk5hdGl2ZU1vZHVsZXMiLCJQbGF0Zm9ybUNvbG9yIiwicHJvY2Vzc0NvbG9yIiwicmVxdWlyZU5hdGl2ZUNvbXBvbmVudCIsIlJvb3RUYWdDb250ZXh0IiwidW5zdGFibGVfZW5hYmxlTG9nQm94IiwiUk4kQnJpZGdlbGVzcyIsIm1vZHVsZU9yRmFjdG9yeSIsIlJOJHJlZ2lzdGVyQ2FsbGFibGVNb2R1bGUiLCJCYXRjaGVkQnJpZGdlIiwicmVnaXN0ZXJMYXp5Q2FsbGFibGVNb2R1bGUiLCJfZGVmYXVsdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIlRPX0pTIiwiVE9fTkFUSVZFIiwiTU9EVUxFX0lEUyIsIk1FVEhPRF9JRFMiLCJQQVJBTVMiLCJNSU5fVElNRV9CRVRXRUVOX0ZMVVNIRVNfTVMiLCJUUkFDRV9UQUdfUkVBQ1RfQVBQUyIsIkRFQlVHX0lORk9fTElNSVQiLCJNZXNzYWdlUXVldWUiLCJfbGF6eUNhbGxhYmxlTW9kdWxlcyIsIl9zdWNjZXNzQ2FsbGJhY2tzIiwiX2ZhaWx1cmVDYWxsYmFja3MiLCJfY2FsbElEIiwiX2xhc3RGbHVzaCIsIl9ldmVudExvb3BTdGFydFRpbWUiLCJub3ciLCJfcmVhY3ROYXRpdmVNaWNyb3Rhc2tzQ2FsbGJhY2siLCJfZGVidWdJbmZvIiwiX3JlbW90ZU1vZHVsZVRhYmxlIiwiX3JlbW90ZU1ldGhvZFRhYmxlIiwiY2FsbEZ1bmN0aW9uUmV0dXJuRmx1c2hlZFF1ZXVlIiwiZmx1c2hlZFF1ZXVlIiwiaW52b2tlQ2FsbGJhY2tBbmRSZXR1cm5GbHVzaGVkUXVldWUiLCJtZXRob2QiLCJfX2d1YXJkIiwiX19jYWxsRnVuY3Rpb24iLCJjYklEIiwiX3RoaXMyIiwiX19pbnZva2VDYWxsYmFjayIsIl90aGlzMyIsIl9fY2FsbFJlYWN0TmF0aXZlTWljcm90YXNrcyIsImdldEV2ZW50TG9vcFJ1bm5pbmdUaW1lIiwiZ2V0VmFsdWUiLCJnZXRDYWxsYWJsZU1vZHVsZSIsImNhbGxOYXRpdmVTeW5jSG9vayIsIm1ldGhvZElEIiwicGFyYW1zIiwib25GYWlsIiwib25TdWNjIiwibmF0aXZlQ2FsbFN5bmNIb29rIiwicHJvY2Vzc0NhbGxiYWNrcyIsIl90aGlzNCIsIl8iLCJjYWxsSUQiLCJuYXRpdmVUcmFjZUJlZ2luQXN5bmNGbG93IiwiZW5xdWV1ZU5hdGl2ZUNhbGwiLCJpc1ZhbGlkQXJndW1lbnQiLCJpc0Zpbml0ZSIsInJlcGxhY2VyIiwibmF0aXZlRmx1c2hRdWV1ZUltbWVkaWF0ZSIsImNvdW50ZXJFdmVudCIsIl9fc3B5IiwiY3JlYXRlRGVidWdMb29rdXAiLCJtZXRob2RzIiwic2V0UmVhY3ROYXRpdmVNaWNyb3Rhc2tzQ2FsbGJhY2siLCJfX3Nob3VsZFBhdXNlT25UaHJvdyIsIkRlYnVnZ2VySW50ZXJuYWwiLCJzaG91bGRQYXVzZU9uVGhyb3ciLCJtb2R1bGVNZXRob2RzIiwiY2FsbGFibGVNb2R1bGVOYW1lcyIsImNhbGxhYmxlTW9kdWxlTmFtZUxpc3QiLCJpc0JyaWRnZWxlc3NNb2RlIiwiaXNTdWNjZXNzIiwicHJvZmlsZU5hbWUiLCJzcHkiLCJzcHlPclRvZ2dsZSIsImFyciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9hcnJheUxpa2VUb0FycmF5IiwibGVuIiwiYXJyMiIsIl9pdGVyYWJsZVRvQXJyYXkiLCJpdGVyIiwiZnJvbSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIm1pbkxlbiIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImludmFyaWFudCIsImNvbmRpdGlvbiIsImFyZ0luZGV4IiwiZnJhbWVzVG9Qb3AiLCJ3YXJuZWRLZXlzIiwid2Fybk9uY2UiLCJfaW52YXJpYW50IiwiY3JlYXRlU3RyaW5naWZ5U2FmZVdpdGhMaW1pdHMiLCJsaW1pdHMiLCJfbGltaXRzJG1heERlcHRoIiwibWF4RGVwdGgiLCJQT1NJVElWRV9JTkZJTklUWSIsIl9saW1pdHMkbWF4U3RyaW5nTGltaSIsIm1heFN0cmluZ0xpbWl0IiwiX2xpbWl0cyRtYXhBcnJheUxpbWl0IiwibWF4QXJyYXlMaW1pdCIsIl9saW1pdHMkbWF4T2JqZWN0S2V5cyIsIm1heE9iamVjdEtleXNMaW1pdCIsInNoaWZ0IiwidHJ1bmNhdGVkU3RyaW5nIiwic3Vic3RyaW5nIiwicmV0dmFsIiwidHJ1bmNhdGVkS2V5Iiwic3RyaW5naWZ5U2FmZSIsInJldCIsImRlZXBGcmVlemVBbmRUaHJvd09uTXV0YXRpb25JbkRldiIsImlzRnJvemVuIiwiaXNTZWFsZWQiLCJpZGVudGl0eSIsInRocm93T25JbW11dGFibGVNdXRhdGlvbiIsIl9hc3luY0Nvb2tpZSIsImlzRW5hYmxlZCIsIm5hdGl2ZVRyYWNlSXNUcmFjaW5nIiwiX19SQ1RQcm9maWxlSXNQcm9maWxpbmciLCJzZXRFbmFibGVkIiwiX2RvRW5hYmxlIiwiZXZlbnROYW1lIiwiZXZlbnROYW1lU3RyaW5nIiwibmF0aXZlVHJhY2VCZWdpblNlY3Rpb24iLCJuYXRpdmVUcmFjZUVuZFNlY3Rpb24iLCJiZWdpbkFzeW5jRXZlbnQiLCJjb29raWUiLCJuYXRpdmVUcmFjZUJlZ2luQXN5bmNTZWN0aW9uIiwiZW5kQXN5bmNFdmVudCIsIm5hdGl2ZVRyYWNlRW5kQXN5bmNTZWN0aW9uIiwibmF0aXZlVHJhY2VDb3VudGVyIiwiX1JDVERldmljZUV2ZW50RW1pdHRlciIsIl9QbGF0Zm9ybSIsIl9sZWdhY3lTZW5kQWNjZXNzaWJpbGl0eUV2ZW50IiwiX05hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvIiwiX05hdGl2ZUFjY2Vzc2liaWxpdHlNYW5hZ2VyIiwiRXZlbnROYW1lcyIsImlzQm9sZFRleHRFbmFibGVkIiwiTmF0aXZlQWNjZXNzaWJpbGl0eU1hbmFnZXJJT1MiLCJnZXRDdXJyZW50Qm9sZFRleHRTdGF0ZSIsImlzR3JheXNjYWxlRW5hYmxlZCIsImdldEN1cnJlbnRHcmF5c2NhbGVTdGF0ZSIsImlzSW52ZXJ0Q29sb3JzRW5hYmxlZCIsImdldEN1cnJlbnRJbnZlcnRDb2xvcnNTdGF0ZSIsImlzUmVkdWNlTW90aW9uRW5hYmxlZCIsIk5hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvQW5kcm9pZCIsImdldEN1cnJlbnRSZWR1Y2VNb3Rpb25TdGF0ZSIsInByZWZlcnNDcm9zc0ZhZGVUcmFuc2l0aW9ucyIsImdldEN1cnJlbnRQcmVmZXJzQ3Jvc3NGYWRlVHJhbnNpdGlvbnNTdGF0ZSIsImlzUmVkdWNlVHJhbnNwYXJlbmN5RW5hYmxlZCIsImdldEN1cnJlbnRSZWR1Y2VUcmFuc3BhcmVuY3lTdGF0ZSIsImlzU2NyZWVuUmVhZGVyRW5hYmxlZCIsImlzVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQiLCJnZXRDdXJyZW50Vm9pY2VPdmVyU3RhdGUiLCJpc0FjY2Vzc2liaWxpdHlTZXJ2aWNlRW5hYmxlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVyIiwiZGV2aWNlRXZlbnROYW1lIiwicmVtb3ZlIiwiUkNURGV2aWNlRXZlbnRFbWl0dGVyIiwiYWRkTGlzdGVuZXIiLCJzZXRBY2Nlc3NpYmlsaXR5Rm9jdXMiLCJyZWFjdFRhZyIsImxlZ2FjeVNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQiLCJzZW5kQWNjZXNzaWJpbGl0eUV2ZW50IiwiaGFuZGxlIiwiZXZlbnRUeXBlIiwiYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5IiwiYW5ub3VuY2VtZW50IiwiYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5V2l0aE9wdGlvbnMiLCJnZXRSZWNvbW1lbmRlZFRpbWVvdXRNaWxsaXMiLCJvcmlnaW5hbFRpbWVvdXQiLCJfRXZlbnRFbWl0dGVyMiIsIl9FdmVudEVtaXR0ZXIiLCJlbWl0IiwiX2dldDIiLCJfZ2V0MyIsIkV2ZW50RW1pdHRlciIsIl9nZXQiLCJwcm9wZXJ0eSIsInJlY2VpdmVyIiwiX3N1cGVyUHJvcEJhc2UiLCJfcmVnaXN0cnkiLCJsaXN0ZW5lciIsInJlZ2lzdHJhdGlvbnMiLCJhbGxvY2F0ZSIsIl9jbGFzc1ByaXZhdGVGaWVsZExvb3NlQmFzZTIiLCJyZWdpc3RyYXRpb24iLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50IiwicmVnaXN0cnkiLCJfY2xhc3NQcml2YXRlRmllbGRCYXNlIiwicHJpdmF0ZUtleSIsIl9jbGFzc1ByaXZhdGVGaWVsZEtleSIsIl9OYXRpdmVQbGF0Zm9ybUNvbnN0YW50c0lPUyIsIl9fY29uc3RhbnRzIiwiVmVyc2lvbiIsImNvbnN0YW50cyIsIm9zVmVyc2lvbiIsIk5hdGl2ZVBsYXRmb3JtQ29uc3RhbnRzSU9TIiwiZ2V0Q29uc3RhbnRzIiwiaXNQYWQiLCJpbnRlcmZhY2VJZGlvbSIsImlzVFYiLCJpc1Zpc2lvbiIsImlzVGVzdGluZyIsImlzRGlzYWJsZUFuaW1hdGlvbnMiLCJfdGhpcyRjb25zdGFudHMkaXNEaXMiLCJpc01hY0NhdGFseXN0IiwiX3RoaXMkY29uc3RhbnRzJGlzTWFjIiwic3BlYyIsIm5hdGl2ZSIsIl9leHBvcnROYW1lcyIsImdldEVuZm9yY2luZyIsInR1cmJvTW9kdWxlUHJveHkiLCJfX3R1cmJvTW9kdWxlUHJveHkiLCJtb2R1bGVMb2FkSGlzdG9yeSIsIlR1cmJvTW9kdWxlcyIsIk5vdEZvdW5kIiwiaXNCcmlkZ2VsZXNzIiwiaXNUdXJib01vZHVsZUludGVyb3BFbmFibGVkIiwiUk4kVHVyYm9JbnRlcm9wIiwic2hvdWxkUmVwb3J0RGVidWdJbmZvIiwicmVxdWlyZU1vZHVsZSIsImxlZ2FjeU1vZHVsZSIsIl9zbGljZWRUb0FycmF5IiwiZ2VuTW9kdWxlIiwiX2NvbmZpZyIsIm1vZHVsZU5hbWUiLCJwcm9taXNlTWV0aG9kcyIsInN5bmNNZXRob2RzIiwic3RhcnRzV2l0aCIsImlzUHJvbWlzZSIsImFycmF5Q29udGFpbnMiLCJpc1N5bmMiLCJtZXRob2RUeXBlIiwiZ2VuTWV0aG9kIiwiX19mYkdlbk5hdGl2ZU1vZHVsZSIsImxvYWRNb2R1bGUiLCJuYXRpdmVSZXF1aXJlTW9kdWxlQ29uZmlnIiwicHJvbWlzZU1ldGhvZFdyYXBwZXIiLCJlbnF1ZXVlaW5nRnJhbWVFcnJvciIsImVycm9yRGF0YSIsInVwZGF0ZUVycm9yV2l0aEVycm9yRGF0YSIsIm5vblByb21pc2VNZXRob2RXcmFwcGVyIiwibGFzdEFyZyIsInNlY29uZExhc3RBcmciLCJoYXNTdWNjZXNzQ2FsbGJhY2siLCJoYXNFcnJvckNhbGxiYWNrIiwib25TdWNjZXNzIiwiY2FsbGJhY2tDb3VudCIsIm5ld0FyZ3MiLCJuYXRpdmVNb2R1bGVQcm94eSIsImJyaWRnZUNvbmZpZyIsIl9fZmJCYXRjaGVkQnJpZGdlQ29uZmlnIiwiZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5IiwicmVtb3RlTW9kdWxlQ29uZmlnIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX2kiLCJfZSIsIl94IiwiX3IiLCJfYXJyIiwiX24iLCJfZCIsIl9ub25JdGVyYWJsZVJlc3QiLCJ2YWx1ZVNldCIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJOYXRpdmVBY2Nlc3NpYmlsaXR5TWFuYWdlciIsIk5hdGl2ZUFjY2Vzc2liaWxpdHlJbmZvIiwicmVuZGVyRWxlbWVudCIsInJvb3RUYWciLCJ1c2VGYWJyaWMiLCJ1c2VDb25jdXJyZW50Um9vdCIsImZpbmRIb3N0SW5zdGFuY2VfREVQUkVDQVRFRCIsImNvbXBvbmVudE9ySGFuZGxlIiwiZGlzcGF0Y2hDb21tYW5kIiwiY29tbWFuZCIsInVubW91bnRDb21wb25lbnRBdE5vZGVBbmRSZW1vdmVDb250YWluZXIiLCJyb290VGFnQXNOdW1iZXIiLCJib29ra2VlcGluZyIsImlzUHJvZmlsaW5nUmVuZGVyZXIiLCJpc0NoaWxkUHVibGljSW5zdGFuY2UiLCJwYXJlbnRJbnN0YW5jZSIsImNoaWxkSW5zdGFuY2UiLCJSZWFjdEZhYnJpYyIsIlJOJHN0b3BTdXJmYWNlIiwic3RvcFN1cmZhY2UiLCJfczgiLCJfczkiLCJfczEwIiwiUmVhY3ROYXRpdmVQcml2YXRlSW50ZXJmYWNlIiwiU2NoZWR1bGVyIiwiZmFrZU5vZGUiLCJkaXNwYXRjaEV2ZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFdmVudCIsImludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwiLCJldnQiLCJkaWRDYWxsIiwid2luZG93RXZlbnQiLCJldmVudCIsIndpbmRvd0V2ZW50RGVzY3JpcHRvciIsInJlc3RvcmVBZnRlckRpc3BhdGNoIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2dFR5cGUiLCJjYWxsQ2FsbGJhY2siLCJfZnVuY0FyZ3MiLCJkaWRTZXRFcnJvciIsImlzQ3Jvc3NPcmlnaW5FcnJvciIsImhhbmRsZVdpbmRvd0Vycm9yIiwiY29sbm8iLCJsaW5lbm8iLCJkZWZhdWx0UHJldmVudGVkIiwiX3N1cHByZXNzTG9nZ2luZyIsImlubmVyIiwiaW5pdEV2ZW50IiwiZnVuY0FyZ3MiLCJjYXVnaHRFcnJvciIsImhhc1JldGhyb3dFcnJvciIsInJldGhyb3dFcnJvciIsInJlcG9ydGVyIiwiaW52b2tlR3VhcmRlZENhbGxiYWNrIiwiaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yIiwiY2xlYXJDYXVnaHRFcnJvciIsInJldGhyb3dDYXVnaHRFcnJvciIsImhhc0NhdWdodEVycm9yIiwiZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSQxIiwiZ2V0SW5zdGFuY2VGcm9tTm9kZSQxIiwiZ2V0Tm9kZUZyb21JbnN0YW5jZSQxIiwic2V0Q29tcG9uZW50VHJlZSIsImdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGVJbXBsIiwiZ2V0SW5zdGFuY2VGcm9tTm9kZUltcGwiLCJnZXROb2RlRnJvbUluc3RhbmNlSW1wbCIsInZhbGlkYXRlRXZlbnREaXNwYXRjaGVzIiwiZGlzcGF0Y2hMaXN0ZW5lcnMiLCJfZGlzcGF0Y2hMaXN0ZW5lcnMiLCJkaXNwYXRjaEluc3RhbmNlcyIsIl9kaXNwYXRjaEluc3RhbmNlcyIsImxpc3RlbmVyc0lzQXJyIiwibGlzdGVuZXJzTGVuIiwiaW5zdGFuY2VzSXNBcnIiLCJpbnN0YW5jZXNMZW4iLCJleGVjdXRlRGlzcGF0Y2giLCJpbnN0IiwiY3VycmVudFRhcmdldCIsImV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlciIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGwiLCJleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlIiwiZXhlY3V0ZURpcmVjdERpc3BhdGNoIiwiZGlzcGF0Y2hMaXN0ZW5lciIsImRpc3BhdGNoSW5zdGFuY2UiLCJoYXNEaXNwYXRjaGVzIiwiRVZFTlRfUE9PTF9TSVpFIiwiRXZlbnRJbnRlcmZhY2UiLCJldmVudFBoYXNlIiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJ0aW1lU3RhbXAiLCJpc1RydXN0ZWQiLCJmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSIsImZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSIsIlN5bnRoZXRpY0V2ZW50IiwiZGlzcGF0Y2hDb25maWciLCJ0YXJnZXRJbnN0IiwibmF0aXZlRXZlbnQiLCJuYXRpdmVFdmVudFRhcmdldCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiX3RhcmdldEluc3QiLCJJbnRlcmZhY2UiLCJub3JtYWxpemUiLCJjYW5jZWxCdWJibGUiLCJwZXJzaXN0IiwiaXNQZXJzaXN0ZW50IiwiZGVzdHJ1Y3RvciIsImdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24iLCJleHRlbmQiLCJDbGFzcyIsImFkZEV2ZW50UG9vbGluZ1RvIiwiZ2V0VmFsIiwiYWN0aW9uIiwiY3JlYXRlT3JHZXRQb29sZWRFdmVudCIsIm5hdGl2ZUluc3QiLCJFdmVudENvbnN0cnVjdG9yIiwiZXZlbnRQb29sIiwicmVsZWFzZVBvb2xlZEV2ZW50IiwiZ2V0UG9vbGVkIiwicmVsZWFzZSIsIlJlc3BvbmRlclN5bnRoZXRpY0V2ZW50IiwidG91Y2hIaXN0b3J5IiwiVE9QX1RPVUNIX1NUQVJUIiwiVE9QX1RPVUNIX01PVkUiLCJUT1BfVE9VQ0hfRU5EIiwiVE9QX1RPVUNIX0NBTkNFTCIsIlRPUF9TQ1JPTEwiLCJUT1BfU0VMRUNUSU9OX0NIQU5HRSIsImlzU3RhcnRpc2giLCJ0b3BMZXZlbFR5cGUiLCJpc01vdmVpc2giLCJpc0VuZGlzaCIsInN0YXJ0RGVwZW5kZW5jaWVzIiwibW92ZURlcGVuZGVuY2llcyIsImVuZERlcGVuZGVuY2llcyIsIk1BWF9UT1VDSF9CQU5LIiwidG91Y2hCYW5rIiwibnVtYmVyQWN0aXZlVG91Y2hlcyIsImluZGV4T2ZTaW5nbGVBY3RpdmVUb3VjaCIsIm1vc3RSZWNlbnRUaW1lU3RhbXAiLCJ0aW1lc3RhbXBGb3JUb3VjaCIsInRvdWNoIiwidGltZXN0YW1wIiwiY3JlYXRlVG91Y2hSZWNvcmQiLCJ0b3VjaEFjdGl2ZSIsInN0YXJ0UGFnZVgiLCJwYWdlWCIsInN0YXJ0UGFnZVkiLCJwYWdlWSIsInN0YXJ0VGltZVN0YW1wIiwiY3VycmVudFBhZ2VYIiwiY3VycmVudFBhZ2VZIiwiY3VycmVudFRpbWVTdGFtcCIsInByZXZpb3VzUGFnZVgiLCJwcmV2aW91c1BhZ2VZIiwicHJldmlvdXNUaW1lU3RhbXAiLCJyZXNldFRvdWNoUmVjb3JkIiwidG91Y2hSZWNvcmQiLCJnZXRUb3VjaElkZW50aWZpZXIiLCJpZGVudGlmaWVyIiwicmVjb3JkVG91Y2hTdGFydCIsInJlY29yZFRvdWNoTW92ZSIsInByaW50VG91Y2giLCJwcmludFRvdWNoQmFuayIsInJlY29yZFRvdWNoRW5kIiwicHJpbnRlZCIsImluc3RydW1lbnRhdGlvbkNhbGxiYWNrIiwiUmVzcG9uZGVyVG91Y2hIaXN0b3J5U3RvcmUiLCJpbnN0cnVtZW50IiwicmVjb3JkVG91Y2hUcmFjayIsImNoYW5nZWRUb3VjaGVzIiwidG91Y2hlcyIsInRvdWNoVHJhY2tUb0NoZWNrIiwiYWN0aXZlUmVjb3JkIiwiYWNjdW11bGF0ZSIsImFjY3VtdWxhdGVJbnRvIiwiZm9yRWFjaEFjY3VtdWxhdGVkIiwiY2IiLCJGdW5jdGlvbkNvbXBvbmVudCIsIkNsYXNzQ29tcG9uZW50IiwiSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCIsIkhvc3RSb290IiwiSG9zdFBvcnRhbCIsIkhvc3RDb21wb25lbnQiLCJIb3N0VGV4dCIsIk1vZGUiLCJDb250ZXh0Q29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJGb3J3YXJkUmVmIiwiU3VzcGVuc2VDb21wb25lbnQiLCJNZW1vQ29tcG9uZW50IiwiU2ltcGxlTWVtb0NvbXBvbmVudCIsIkxhenlDb21wb25lbnQiLCJJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQiLCJEZWh5ZHJhdGVkRnJhZ21lbnQiLCJTdXNwZW5zZUxpc3RDb21wb25lbnQiLCJTY29wZUNvbXBvbmVudCIsIk9mZnNjcmVlbkNvbXBvbmVudCIsIkxlZ2FjeUhpZGRlbkNvbXBvbmVudCIsIkNhY2hlQ29tcG9uZW50IiwiVHJhY2luZ01hcmtlckNvbXBvbmVudCIsIkhvc3RIb2lzdGFibGUiLCJIb3N0U2luZ2xldG9uIiwicmVzcG9uZGVySW5zdCIsInRyYWNrZWRUb3VjaENvdW50IiwiY2hhbmdlUmVzcG9uZGVyIiwibmV4dFJlc3BvbmRlckluc3QiLCJibG9ja0hvc3RSZXNwb25kZXIiLCJvbGRSZXNwb25kZXJJbnN0IiwiUmVzcG9uZGVyRXZlbnRQbHVnaW4iLCJHbG9iYWxSZXNwb25kZXJIYW5kbGVyIiwib25DaGFuZ2UiLCJldmVudFR5cGVzIiwic3RhcnRTaG91bGRTZXRSZXNwb25kZXIiLCJwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyIsImJ1YmJsZWQiLCJjYXB0dXJlZCIsImRlcGVuZGVuY2llcyIsInNjcm9sbFNob3VsZFNldFJlc3BvbmRlciIsInNlbGVjdGlvbkNoYW5nZVNob3VsZFNldFJlc3BvbmRlciIsIm1vdmVTaG91bGRTZXRSZXNwb25kZXIiLCJyZXNwb25kZXJTdGFydCIsInJlZ2lzdHJhdGlvbk5hbWUiLCJyZXNwb25kZXJNb3ZlIiwicmVzcG9uZGVyRW5kIiwicmVzcG9uZGVyUmVsZWFzZSIsInJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdCIsInJlc3BvbmRlckdyYW50IiwicmVzcG9uZGVyUmVqZWN0IiwicmVzcG9uZGVyVGVybWluYXRlIiwiZ2V0UGFyZW50JDEiLCJyZXR1cm4iLCJnZXRMb3dlc3RDb21tb25BbmNlc3RvciIsImluc3RBIiwiaW5zdEIiLCJkZXB0aEEiLCJ0ZW1wQSIsImRlcHRoQiIsInRlbXBCIiwiYWx0ZXJuYXRlIiwiaXNBbmNlc3RvciIsInRyYXZlcnNlVHdvUGhhc2UkMSIsInBhdGgiLCJnZXRMaXN0ZW5lciQxIiwibGlzdGVuZXJBdFBoYXNlJDEiLCJwcm9wYWdhdGlvblBoYXNlIiwiYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyQxIiwicGhhc2UiLCJhY2N1bXVsYXRlRGlzcGF0Y2hlcyQxIiwiaWdub3JlZERpcmVjdGlvbiIsImFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlJDEiLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyQxIiwiZXZlbnRzIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQiLCJwYXJlbnRJbnN0IiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlJDEiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzJDEiLCJzZXRSZXNwb25kZXJBbmRFeHRyYWN0VHJhbnNmZXIiLCJzaG91bGRTZXRFdmVudFR5cGUiLCJidWJibGVTaG91bGRTZXRGcm9tIiwic2tpcE92ZXJCdWJibGVTaG91bGRTZXRGcm9tIiwic2hvdWxkU2V0RXZlbnQiLCJ3YW50c1Jlc3BvbmRlckluc3QiLCJleHRyYWN0ZWQiLCJncmFudEV2ZW50IiwidGVybWluYXRpb25SZXF1ZXN0RXZlbnQiLCJzaG91bGRTd2l0Y2giLCJ0ZXJtaW5hdGVFdmVudCIsInJlamVjdEV2ZW50IiwiY2FuVHJpZ2dlclRyYW5zZmVyIiwidG9wTGV2ZWxJbnN0IiwicmVzcG9uZGVySWdub3JlU2Nyb2xsIiwibm9SZXNwb25kZXJUb3VjaGVzIiwiYWN0aXZlVG91Y2giLCJfZ2V0UmVzcG9uZGVyIiwiZXh0cmFjdEV2ZW50cyIsImV2ZW50U3lzdGVtRmxhZ3MiLCJpc1Jlc3BvbmRlclRvdWNoU3RhcnQiLCJpc1Jlc3BvbmRlclRvdWNoTW92ZSIsImlzUmVzcG9uZGVyVG91Y2hFbmQiLCJpbmNyZW1lbnRhbFRvdWNoIiwiZ2VzdHVyZSIsImlzUmVzcG9uZGVyVGVybWluYXRlIiwiaXNSZXNwb25kZXJSZWxlYXNlIiwiZmluYWxUb3VjaCIsImZpbmFsRXZlbnQiLCJpbmplY3Rpb24iLCJpbmplY3RHbG9iYWxSZXNwb25kZXJIYW5kbGVyIiwiZXZlbnRQbHVnaW5PcmRlciIsIm5hbWVzVG9QbHVnaW5zIiwicmVjb21wdXRlUGx1Z2luT3JkZXJpbmciLCJwbHVnaW5OYW1lIiwicGx1Z2luTW9kdWxlIiwicGx1Z2luSW5kZXgiLCJwbHVnaW5zIiwicHVibGlzaGVkRXZlbnRzIiwicHVibGlzaEV2ZW50Rm9yUGx1Z2luIiwiZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzIiwicGhhc2VOYW1lIiwicGhhc2VkUmVnaXN0cmF0aW9uTmFtZSIsInB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lIiwicmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMiLCJ0b0xvd2VyQ2FzZSIsImluamVjdEV2ZW50UGx1Z2luT3JkZXIiLCJpbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIiLCJpbmplY3RFdmVudFBsdWdpbnNCeU5hbWUiLCJpbmplY3RlZE5hbWVzVG9QbHVnaW5zIiwiaXNPcmRlcmluZ0RpcnR5IiwiZ2V0TGlzdGVuZXIiLCJjdXN0b21CdWJibGluZ0V2ZW50VHlwZXMiLCJSZWFjdE5hdGl2ZVZpZXdDb25maWdSZWdpc3RyeSIsImN1c3RvbURpcmVjdEV2ZW50VHlwZXMiLCJsaXN0ZW5lckF0UGhhc2UiLCJhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzIiwiZ2V0UGFyZW50IiwidHJhdmVyc2VUd29QaGFzZSIsInNraXBCdWJibGluZyIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzIiwiYWNjdW11bGF0ZUNhcHR1cmVQaGFzZURpc3BhdGNoZXMiLCJhY2N1bXVsYXRlRGlzcGF0Y2hlcyIsImFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlIiwiYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMiLCJSZWFjdE5hdGl2ZUJyaWRnZUV2ZW50UGx1Z2luIiwiYnViYmxlRGlzcGF0Y2hDb25maWciLCJkaXJlY3REaXNwYXRjaENvbmZpZyIsIlJlYWN0TmF0aXZlRXZlbnRQbHVnaW5PcmRlciIsImVtcHR5T2JqZWN0JDEiLCJyZW1vdmVkS2V5cyIsInJlbW92ZWRLZXlDb3VudCIsImRlZXBEaWZmZXJPcHRpb25zIiwidW5zYWZlbHlJZ25vcmVGdW5jdGlvbnMiLCJkZWZhdWx0RGlmZmVyIiwicHJldlByb3AiLCJuZXh0UHJvcCIsImRlZXBEaWZmZXIiLCJyZXN0b3JlRGVsZXRlZFZhbHVlc0luTmVzdGVkQXJyYXkiLCJ1cGRhdGVQYXlsb2FkIiwidmFsaWRBdHRyaWJ1dGVzIiwicHJvcEtleSIsImF0dHJpYnV0ZUNvbmZpZyIsImRpZmYiLCJuZXh0VmFsdWUiLCJkaWZmTmVzdGVkQXJyYXlQcm9wZXJ0eSIsInByZXZBcnJheSIsIm5leHRBcnJheSIsIm1pbkxlbmd0aCIsImRpZmZOZXN0ZWRQcm9wZXJ0eSIsImNsZWFyTmVzdGVkUHJvcGVydHkiLCJhZGROZXN0ZWRQcm9wZXJ0eSIsImRpZmZQcm9wZXJ0aWVzIiwiZmxhdHRlblN0eWxlIiwiYWRkUHJvcGVydGllcyIsImNsZWFyUHJvcGVydGllcyIsInByZXZQcm9wcyIsIm5leHRQcm9wcyIsInNob3VsZFVwZGF0ZSIsIl9uZXh0VmFsdWUiLCJfcHJvcEtleSIsImJhdGNoZWRVcGRhdGVzSW1wbCIsImlzSW5zaWRlRXZlbnRIYW5kbGVyIiwiYmF0Y2hlZFVwZGF0ZXMkMSIsInNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24iLCJfYmF0Y2hlZFVwZGF0ZXNJbXBsIiwiX2Rpc2NyZXRlVXBkYXRlc0ltcGwiLCJldmVudFF1ZXVlIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwiLCJydW5FdmVudHNJbkJhdGNoIiwicHJvY2Vzc2luZ0V2ZW50UXVldWUiLCJleHRyYWN0UGx1Z2luRXZlbnRzIiwibGVnYWN5UGx1Z2lucyIsInBvc3NpYmxlUGx1Z2luIiwiZXh0cmFjdGVkRXZlbnRzIiwicnVuRXh0cmFjdGVkUGx1Z2luRXZlbnRzSW5CYXRjaCIsInRhcmdldEZpYmVyIiwiZXZlbnRUYXJnZXQiLCJnZXRQdWJsaWNJbnN0YW5jZSIsIlJhd0V2ZW50RW1pdHRlciIsImVuYWJsZVNjaGVkdWxpbmdQcm9maWxlciIsImVuYWJsZVByb2ZpbGVyVGltZXIiLCJlbmFibGVQcm9maWxlckNvbW1pdEhvb2tzIiwiZW5hYmxlUHJvZmlsZXJOZXN0ZWRVcGRhdGVQaGFzZSIsInN5bmNMYW5lRXhwaXJhdGlvbk1zIiwidHJhbnNpdGlvbkxhbmVFeHBpcmF0aW9uTXMiLCJlbmFibGVMYXp5Q29udGV4dFByb3BhZ2F0aW9uIiwiZW5hYmxlQXN5bmNBY3Rpb25zIiwicGFzc0NoaWxkcmVuV2hlbkNsb25pbmdQZXJzaXN0ZWROb2RlcyIsIk5vRmxhZ3MkMSIsIlBlcmZvcm1lZFdvcmsiLCJQbGFjZW1lbnQiLCJEaWRDYXB0dXJlIiwiSHlkcmF0aW5nIiwiVXBkYXRlIiwiQ2hpbGREZWxldGlvbiIsIkNvbnRlbnRSZXNldCIsIkNhbGxiYWNrIiwiRm9yY2VDbGllbnRSZW5kZXIiLCJSZWYiLCJTbmFwc2hvdCIsIlBhc3NpdmUkMSIsIlZpc2liaWxpdHkiLCJTdG9yZUNvbnNpc3RlbmN5IiwiU2NoZWR1bGVSZXRyeSIsIlNob3VsZFN1c3BlbmRDb21taXQiLCJEaWREZWZlciIsIkxpZmVjeWNsZUVmZmVjdE1hc2siLCJIb3N0RWZmZWN0TWFzayIsIkluY29tcGxldGUiLCJTaG91bGRDYXB0dXJlIiwiRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSIsIkZvcmtlZCIsIlJlZlN0YXRpYyIsIkxheW91dFN0YXRpYyIsIlBhc3NpdmVTdGF0aWMiLCJNYXlTdXNwZW5kQ29tbWl0IiwiUGxhY2VtZW50REVWIiwiTW91bnRMYXlvdXREZXYiLCJNb3VudFBhc3NpdmVEZXYiLCJCZWZvcmVNdXRhdGlvbk1hc2siLCJNdXRhdGlvbk1hc2siLCJMYXlvdXRNYXNrIiwiUGFzc2l2ZU1hc2siLCJTdGF0aWNNYXNrIiwic2NoZWR1bGVDYWxsYmFjayQyIiwidW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayIsImNhbmNlbENhbGxiYWNrJDEiLCJ1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayIsInNob3VsZFlpZWxkIiwidW5zdGFibGVfc2hvdWxkWWllbGQiLCJyZXF1ZXN0UGFpbnQiLCJ1bnN0YWJsZV9yZXF1ZXN0UGFpbnQiLCJub3ckMSIsInVuc3RhYmxlX25vdyIsIkltbWVkaWF0ZVByaW9yaXR5IiwidW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkiLCJVc2VyQmxvY2tpbmdQcmlvcml0eSIsInVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5IiwiTm9ybWFsUHJpb3JpdHkiLCJ1bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSIsIklkbGVQcmlvcml0eSIsInVuc3RhYmxlX0lkbGVQcmlvcml0eSIsInJlbmRlcmVySUQiLCJpbmplY3RlZEhvb2siLCJoYXNMb2dnZWRFcnJvciIsImlzRGV2VG9vbHNQcmVzZW50IiwiaW5qZWN0SW50ZXJuYWxzIiwiaW50ZXJuYWxzIiwiaG9vayIsImlzRGlzYWJsZWQiLCJzdXBwb3J0c0ZpYmVyIiwiaW5qZWN0IiwiY2hlY2tEQ0UiLCJvblNjaGVkdWxlUm9vdCIsIm9uU2NoZWR1bGVGaWJlclJvb3QiLCJvbkNvbW1pdFJvb3QiLCJldmVudFByaW9yaXR5Iiwib25Db21taXRGaWJlclJvb3QiLCJmbGFncyIsInNjaGVkdWxlclByaW9yaXR5IiwiRGlzY3JldGVFdmVudFByaW9yaXR5IiwiQ29udGludW91c0V2ZW50UHJpb3JpdHkiLCJEZWZhdWx0RXZlbnRQcmlvcml0eSIsIklkbGVFdmVudFByaW9yaXR5Iiwib25Qb3N0Q29tbWl0Um9vdCIsIm9uUG9zdENvbW1pdEZpYmVyUm9vdCIsIm9uQ29tbWl0VW5tb3VudCIsImZpYmVyIiwib25Db21taXRGaWJlclVubW91bnQiLCJzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyIsIm5ld0lzU3RyaWN0TW9kZSIsImluamVjdFByb2ZpbGluZ0hvb2tzIiwicHJvZmlsaW5nSG9va3MiLCJnZXRMYW5lTGFiZWxNYXAiLCJOb01vZGUiLCJDb25jdXJyZW50TW9kZSIsIlByb2ZpbGVNb2RlIiwiU3RyaWN0TGVnYWN5TW9kZSIsIlN0cmljdEVmZmVjdHNNb2RlIiwiTm9TdHJpY3RQYXNzaXZlRWZmZWN0c01vZGUiLCJjbHozMiIsImNsejMyRmFsbGJhY2siLCJMTjIiLCJhc1VpbnQiLCJUb3RhbExhbmVzIiwiTm9MYW5lcyIsIk5vTGFuZSIsIlN5bmNIeWRyYXRpb25MYW5lIiwiU3luY0xhbmUiLCJTeW5jTGFuZUluZGV4IiwiSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSIsIklucHV0Q29udGludW91c0xhbmUiLCJEZWZhdWx0SHlkcmF0aW9uTGFuZSIsIkRlZmF1bHRMYW5lIiwiU3luY1VwZGF0ZUxhbmVzIiwiVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUiLCJUcmFuc2l0aW9uTGFuZXMiLCJUcmFuc2l0aW9uTGFuZTEiLCJUcmFuc2l0aW9uTGFuZTIiLCJUcmFuc2l0aW9uTGFuZTMiLCJUcmFuc2l0aW9uTGFuZTQiLCJUcmFuc2l0aW9uTGFuZTUiLCJUcmFuc2l0aW9uTGFuZTYiLCJUcmFuc2l0aW9uTGFuZTciLCJUcmFuc2l0aW9uTGFuZTgiLCJUcmFuc2l0aW9uTGFuZTkiLCJUcmFuc2l0aW9uTGFuZTEwIiwiVHJhbnNpdGlvbkxhbmUxMSIsIlRyYW5zaXRpb25MYW5lMTIiLCJUcmFuc2l0aW9uTGFuZTEzIiwiVHJhbnNpdGlvbkxhbmUxNCIsIlRyYW5zaXRpb25MYW5lMTUiLCJSZXRyeUxhbmVzIiwiUmV0cnlMYW5lMSIsIlJldHJ5TGFuZTIiLCJSZXRyeUxhbmUzIiwiUmV0cnlMYW5lNCIsIlNvbWVSZXRyeUxhbmUiLCJTZWxlY3RpdmVIeWRyYXRpb25MYW5lIiwiTm9uSWRsZUxhbmVzIiwiSWRsZUh5ZHJhdGlvbkxhbmUiLCJJZGxlTGFuZSIsIk9mZnNjcmVlbkxhbmUiLCJEZWZlcnJlZExhbmUiLCJVcGRhdGVMYW5lcyIsIk5vVGltZXN0YW1wIiwibmV4dFRyYW5zaXRpb25MYW5lIiwibmV4dFJldHJ5TGFuZSIsImdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIiwibGFuZXMiLCJwZW5kaW5nU3luY0xhbmVzIiwiZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSIsImdldE5leHRMYW5lcyIsIndpcExhbmVzIiwicGVuZGluZ0xhbmVzIiwibmV4dExhbmVzIiwic3VzcGVuZGVkTGFuZXMiLCJwaW5nZWRMYW5lcyIsIm5vbklkbGVQZW5kaW5nTGFuZXMiLCJub25JZGxlVW5ibG9ja2VkTGFuZXMiLCJub25JZGxlUGluZ2VkTGFuZXMiLCJ1bmJsb2NrZWRMYW5lcyIsIm5leHRMYW5lIiwid2lwTGFuZSIsImdldEVudGFuZ2xlZExhbmVzIiwicmVuZGVyTGFuZXMiLCJlbnRhbmdsZWRMYW5lcyIsImFsbEVudGFuZ2xlZExhbmVzIiwiZW50YW5nbGVtZW50cyIsInBpY2tBcmJpdHJhcnlMYW5lSW5kZXgiLCJsYW5lIiwiY29tcHV0ZUV4cGlyYXRpb25UaW1lIiwiY3VycmVudFRpbWUiLCJtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkIiwiZXhwaXJhdGlvblRpbWVzIiwiZXhwaXJhdGlvblRpbWUiLCJleHBpcmVkTGFuZXMiLCJnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvciIsIm9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyIsImVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzIiwiZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiIsImluY2x1ZGVzU3luY0xhbmUiLCJpbmNsdWRlc05vbklkbGVXb3JrIiwiaW5jbHVkZXNPbmx5UmV0cmllcyIsImluY2x1ZGVzT25seU5vblVyZ2VudExhbmVzIiwiVXJnZW50TGFuZXMiLCJpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyIsImluY2x1ZGVzQmxvY2tpbmdMYW5lIiwiU3luY0RlZmF1bHRMYW5lcyIsImluY2x1ZGVzRXhwaXJlZExhbmUiLCJpc1RyYW5zaXRpb25MYW5lIiwiY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUiLCJjbGFpbU5leHRSZXRyeUxhbmUiLCJwaWNrQXJiaXRyYXJ5TGFuZSIsImxhbmVUb0luZGV4IiwiaW5jbHVkZXNTb21lTGFuZSIsImlzU3Vic2V0T2ZMYW5lcyIsInN1YnNldCIsIm1lcmdlTGFuZXMiLCJyZW1vdmVMYW5lcyIsImludGVyc2VjdExhbmVzIiwibGFuZVRvTGFuZXMiLCJjcmVhdGVMYW5lTWFwIiwiaW5pdGlhbCIsImxhbmVNYXAiLCJtYXJrUm9vdFVwZGF0ZWQiLCJ1cGRhdGVMYW5lIiwibWFya1Jvb3RTdXNwZW5kZWQkMSIsInNwYXduZWRMYW5lIiwibWFya1NwYXduZWREZWZlcnJlZExhbmUiLCJtYXJrUm9vdFBpbmdlZCIsIm1hcmtSb290RmluaXNoZWQiLCJyZW1haW5pbmdMYW5lcyIsIm5vTG9uZ2VyUGVuZGluZ0xhbmVzIiwic2hlbGxTdXNwZW5kQ291bnRlciIsImhpZGRlblVwZGF0ZXMiLCJoaWRkZW5VcGRhdGVzRm9yTGFuZSIsInVwZGF0ZSIsInNwYXduZWRMYW5lSW5kZXgiLCJtYXJrUm9vdEVudGFuZ2xlZCIsInJvb3RFbnRhbmdsZWRMYW5lcyIsInVwZ3JhZGVQZW5kaW5nTGFuZVRvU3luYyIsIm1hcmtIaWRkZW5VcGRhdGUiLCJnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uIiwicmVuZGVyTGFuZSIsImFkZEZpYmVyVG9MYW5lc01hcCIsInBlbmRpbmdVcGRhdGVyc0xhbmVNYXAiLCJ1cGRhdGVycyIsIm1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZCIsIm1lbW9pemVkVXBkYXRlcnMiLCJnZXRUcmFuc2l0aW9uc0ZvckxhbmVzIiwiY3VycmVudFVwZGF0ZVByaW9yaXR5IiwiZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5Iiwic2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5IiwibmV3UHJpb3JpdHkiLCJoaWdoZXJFdmVudFByaW9yaXR5IiwibG93ZXJFdmVudFByaW9yaXR5IiwiaXNIaWdoZXJFdmVudFByaW9yaXR5IiwibGFuZXNUb0V2ZW50UHJpb3JpdHkiLCJzaGltJDIiLCJjb21taXRNb3VudCIsInNoaW0kMSIsImlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmciLCJpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayIsImdldFN1c3BlbnNlSW5zdGFuY2VGYWxsYmFja0Vycm9yRGV0YWlscyIsInJlZ2lzdGVyU3VzcGVuc2VJbnN0YW5jZVJldHJ5IiwiZXJyb3JIeWRyYXRpbmdDb250YWluZXIiLCJzaGltIiwic3VzcGVuZFJlc291cmNlIiwiX25hdGl2ZUZhYnJpY1VJTWFuYWdlIiwibmF0aXZlRmFicmljVUlNYW5hZ2VyIiwiY3JlYXRlTm9kZSIsImNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbiIsImNsb25lTm9kZVdpdGhOZXdDaGlsZHJlbkFuZFByb3BzIiwiY2xvbmVOb2RlV2l0aE5ld1Byb3BzIiwiY3JlYXRlQ2hpbGROb2RlU2V0IiwiY3JlYXRlQ2hpbGRTZXQiLCJhcHBlbmRDaGlsZE5vZGUiLCJhcHBlbmRDaGlsZCIsImFwcGVuZENoaWxkTm9kZVRvU2V0IiwiYXBwZW5kQ2hpbGRUb1NldCIsImNvbXBsZXRlUm9vdCIsInJlZ2lzdGVyRXZlbnRIYW5kbGVyIiwiRmFicmljRGVmYXVsdFByaW9yaXR5IiwidW5zdGFibGVfRGVmYXVsdEV2ZW50UHJpb3JpdHkiLCJGYWJyaWNEaXNjcmV0ZVByaW9yaXR5IiwidW5zdGFibGVfRGlzY3JldGVFdmVudFByaW9yaXR5IiwiZmFicmljR2V0Q3VycmVudEV2ZW50UHJpb3JpdHkiLCJ1bnN0YWJsZV9nZXRDdXJyZW50RXZlbnRQcmlvcml0eSIsImdldFZpZXdDb25maWdGb3JUeXBlIiwibmV4dFJlYWN0VGFnIiwiYXBwZW5kSW5pdGlhbENoaWxkIiwiY3JlYXRlSW5zdGFuY2UiLCJyb290Q29udGFpbmVySW5zdGFuY2UiLCJob3N0Q29udGV4dCIsImludGVybmFsSW5zdGFuY2VIYW5kbGUiLCJ2aWV3Q29uZmlnIiwidWlWaWV3Q2xhc3NOYW1lIiwiY29tcG9uZW50IiwiY3JlYXRlUHVibGljSW5zdGFuY2UiLCJjYW5vbmljYWwiLCJuYXRpdmVUYWciLCJjdXJyZW50UHJvcHMiLCJjcmVhdGVUZXh0SW5zdGFuY2UiLCJpc0luQVBhcmVudFRleHQiLCJnZXRSb290SG9zdENvbnRleHQiLCJnZXRDaGlsZEhvc3RDb250ZXh0IiwicGFyZW50SG9zdENvbnRleHQiLCJwcmV2SXNJbkFQYXJlbnRUZXh0IiwiX25hdGl2ZVRhZyIsImdldFB1YmxpY1RleHRJbnN0YW5jZSIsInRleHRJbnN0YW5jZSIsImNyZWF0ZVB1YmxpY1RleHRJbnN0YW5jZSIsImdldFB1YmxpY0luc3RhbmNlRnJvbUludGVybmFsSW5zdGFuY2VIYW5kbGUiLCJlbGVtZW50SW5zdGFuY2UiLCJzaG91bGRTZXRUZXh0Q29udGVudCIsImdldEN1cnJlbnRFdmVudFByaW9yaXR5IiwiY3VycmVudEV2ZW50UHJpb3JpdHkiLCJzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uIiwid2FybnNJZk5vdEFjdGluZyIsInNjaGVkdWxlVGltZW91dCIsImNhbmNlbFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJub1RpbWVvdXQiLCJjbG9uZUluc3RhbmNlIiwib2xkUHJvcHMiLCJuZXdQcm9wcyIsImtlZXBDaGlsZHJlbiIsIm5ld0NoaWxkU2V0IiwiY2xvbmUiLCJjbG9uZUhpZGRlbkluc3RhbmNlIiwiZGlzcGxheSIsImNsb25lSGlkZGVuVGV4dEluc3RhbmNlIiwiY3JlYXRlQ29udGFpbmVyQ2hpbGRTZXQiLCJhcHBlbmRDaGlsZFRvQ29udGFpbmVyQ2hpbGRTZXQiLCJjaGlsZFNldCIsImZpbmFsaXplQ29udGFpbmVyQ2hpbGRyZW4iLCJjb250YWluZXIiLCJuZXdDaGlsZHJlbiIsInJlcGxhY2VDb250YWluZXJDaGlsZHJlbiIsInByZWxvYWRJbnN0YW5jZSIsIndhaXRGb3JDb21taXRUb0JlUmVhZHkiLCJnZXRJbnN0YW5jZUZyb21Ob2RlIiwiZ2V0Tm9kZUZyb21JbnN0YW5jZSIsImdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUiLCJSZWFjdEZhYnJpY0dsb2JhbFJlc3BvbmRlckhhbmRsZXIiLCJ0byIsImJsb2NrTmF0aXZlUmVzcG9uZGVyIiwic2V0SXNKU1Jlc3BvbmRlciIsIl9yZWFjdEludGVybmFscyIsIlJFQUNUX1NDT1BFX1RZUEUiLCJSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSIsIlJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSIsIlJFQUNUX0NBQ0hFX1RZUEUiLCJSRUFDVF9UUkFDSU5HX01BUktFUl9UWVBFIiwiZ2V0V3JhcHBlZE5hbWUkMSIsImdldENvbnRleHROYW1lJDEiLCJSRUFDVF9DTElFTlRfUkVGRVJFTkNFIiwiZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlciIsIlJlYWN0Q3VycmVudE93bmVyJDMiLCJnZXROZWFyZXN0TW91bnRlZEZpYmVyIiwibmVhcmVzdE1vdW50ZWQiLCJuZXh0Tm9kZSIsImlzRmliZXJNb3VudGVkIiwib3duZXJGaWJlciIsIl93YXJuZWRBYm91dFJlZnNJblJlbmRlciIsImFzc2VydElzTW91bnRlZCIsImZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoIiwicGFyZW50QSIsInBhcmVudEIiLCJuZXh0UGFyZW50Iiwic2libGluZyIsImRpZEZpbmRDaGlsZCIsImZpbmRDdXJyZW50SG9zdEZpYmVyIiwicGFyZW50IiwiY3VycmVudFBhcmVudCIsImZpbmRDdXJyZW50SG9zdEZpYmVySW1wbCIsImRvZXNGaWJlckNvbnRhaW4iLCJwYXJlbnRGaWJlciIsImNoaWxkRmliZXIiLCJwYXJlbnRGaWJlckFsdGVybmF0ZSIsIm93bmVyTmFtZSIsImRlc2NyaWJlQ29tcG9uZW50RnJhbWUiLCJQb3NzaWJseVdlYWtNYXAkMSIsImRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZSIsInZhbHVlU3RhY2siLCJmaWJlclN0YWNrIiwiY3JlYXRlQ3Vyc29yIiwiY3Vyc29yIiwid2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0IiwiZW1wdHlDb250ZXh0T2JqZWN0IiwiY29udGV4dFN0YWNrQ3Vyc29yJDEiLCJkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yIiwicHJldmlvdXNDb250ZXh0IiwiZ2V0VW5tYXNrZWRDb250ZXh0Iiwid29ya0luUHJvZ3Jlc3MiLCJkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIiLCJpc0NvbnRleHRQcm92aWRlciIsImNhY2hlQ29udGV4dCIsInVubWFza2VkQ29udGV4dCIsIm1hc2tlZENvbnRleHQiLCJfX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0IiwiX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQiLCJnZXRNYXNrZWRDb250ZXh0IiwiY29udGV4dFR5cGVzIiwiaGFzQ29udGV4dENoYW5nZWQiLCJjaGlsZENvbnRleHRUeXBlcyIsInBvcENvbnRleHQiLCJwb3BUb3BMZXZlbENvbnRleHRPYmplY3QiLCJwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0IiwiZGlkQ2hhbmdlIiwicHJvY2Vzc0NoaWxkQ29udGV4dCIsInBhcmVudENvbnRleHQiLCJnZXRDaGlsZENvbnRleHQiLCJjaGlsZENvbnRleHQiLCJjb250ZXh0S2V5IiwicHVzaENvbnRleHRQcm92aWRlciIsIm1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IiwiX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQiLCJpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyIiwibWVyZ2VkQ29udGV4dCIsImZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0IiwiTGVnYWN5Um9vdCIsIkNvbmN1cnJlbnRSb290IiwiT2Zmc2NyZWVuVmlzaWJsZSIsIk9mZnNjcmVlbkRldGFjaGVkIiwiT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQiLCJpc09mZnNjcmVlbk1hbnVhbCIsIm9mZnNjcmVlbkZpYmVyIiwibWVtb2l6ZWRQcm9wcyIsIm1vZGUiLCJpcyIsIm9iamVjdElzIiwiaXNSb290RGVoeWRyYXRlZCIsImN1cnJlbnRTdGF0ZSIsIm1lbW9pemVkU3RhdGUiLCJpc0RlaHlkcmF0ZWQiLCJjb250ZXh0U3RhY2tDdXJzb3IiLCJjb250ZXh0RmliZXJTdGFja0N1cnNvciIsInJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yIiwicmVxdWlyZWRDb250ZXh0IiwiZ2V0Um9vdEhvc3RDb250YWluZXIiLCJyb290SW5zdGFuY2UiLCJwdXNoSG9zdENvbnRhaW5lciIsIm5leHRSb290SW5zdGFuY2UiLCJuZXh0Um9vdENvbnRleHQiLCJwb3BIb3N0Q29udGFpbmVyIiwiZ2V0SG9zdENvbnRleHQiLCJwdXNoSG9zdENvbnRleHQiLCJuZXh0Q29udGV4dCIsInBvcEhvc3RDb250ZXh0IiwiaXNIeWRyYXRpbmciLCJkaWRTdXNwZW5kT3JFcnJvckRFViIsImh5ZHJhdGlvbkVycm9ycyIsImRpZFN1c3BlbmRPckVycm9yV2hpbGVIeWRyYXRpbmdERVYiLCJwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlIiwicHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UiLCJwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UiLCJwb3BIeWRyYXRpb25TdGF0ZSIsInVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlIiwicXVldWVSZWNvdmVyYWJsZUVycm9ycyIsImdldElzSHlkcmF0aW5nIiwicXVldWVIeWRyYXRpb25FcnJvciIsImNvbmN1cnJlbnRRdWV1ZXMiLCJjb25jdXJyZW50UXVldWVzSW5kZXgiLCJjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMiLCJmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzIiwiZW5kSW5kZXgiLCJtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdCIsImdldENvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyIsImVucXVldWVVcGRhdGUkMSIsImVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZSIsImNvbmN1cnJlbnRRdWV1ZSIsImNvbmN1cnJlbnRVcGRhdGUiLCJnZXRSb290Rm9yVXBkYXRlZEZpYmVyIiwiZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlQW5kRWFnZXJseUJhaWxvdXQiLCJpc0NvbmN1cnJlbnRseVJlbmRlcmluZyIsImdldFdvcmtJblByb2dyZXNzUm9vdCIsImVucXVldWVDb25jdXJyZW50Q2xhc3NVcGRhdGUiLCJlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUiLCJ1bnNhZmVfbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QiLCJzb3VyY2VGaWJlciIsImlzSGlkZGVuIiwiY2hpbGRMYW5lcyIsIm9mZnNjcmVlbkluc3RhbmNlIiwiX3Zpc2liaWxpdHkiLCJ0aHJvd0lmSW5maW5pdGVVcGRhdGVMb29wRGV0ZWN0ZWQiLCJkZXRlY3RVcGRhdGVPblVubW91bnRlZEZpYmVyIiwid2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFViIsIlJlYWN0Q3VycmVudEFjdFF1ZXVlJDMiLCJmaXJzdFNjaGVkdWxlZFJvb3QiLCJsYXN0U2NoZWR1bGVkUm9vdCIsImRpZFNjaGVkdWxlTWljcm90YXNrIiwiZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0IiwibWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrIiwiaXNGbHVzaGluZ1dvcmsiLCJjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSIsImVuc3VyZVJvb3RJc1NjaGVkdWxlZCIsInNjaGVkdWxlSW1tZWRpYXRlVGFzayIsInByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayIsInNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2siLCJmbHVzaFN5bmNXb3JrT25BbGxSb290cyIsImZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsIiwiZmx1c2hTeW5jV29ya09uTGVnYWN5Um9vdHNPbmx5Iiwib25seUxlZ2FjeSIsImRpZFBlcmZvcm1Tb21lV29yayIsImVycm9ycyIsIndvcmtJblByb2dyZXNzUm9vdCIsIndvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIiwiZ2V0V29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMiLCJwZXJmb3JtU3luY1dvcmtPblJvb3QiLCJBZ2dyZWdhdGVFcnJvciIsInRocm93RXJyb3IiLCJmaXJzdEVycm9yIiwiZXhpc3RpbmdDYWxsYmFja05vZGUiLCJjYWxsYmFja05vZGUiLCJpc1dvcmtMb29wU3VzcGVuZGVkT25EYXRhIiwiY2FuY2VsUGVuZGluZ0NvbW1pdCIsImNhbmNlbENhbGxiYWNrIiwiY2FsbGJhY2tQcmlvcml0eSIsImV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSIsIm5ld0NhbGxiYWNrUHJpb3JpdHkiLCJmYWtlQWN0Q2FsbGJhY2tOb2RlJDEiLCJzY2hlZHVsZXJQcmlvcml0eUxldmVsIiwibmV3Q2FsbGJhY2tOb2RlIiwic2NoZWR1bGVDYWxsYmFjayQxIiwicGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290IiwiZ2V0Q29udGludWF0aW9uRm9yUm9vdCIsIm9yaWdpbmFsQ2FsbGJhY2tOb2RlIiwicHJpb3JpdHlMZXZlbCIsInJlcXVlc3RUcmFuc2l0aW9uTGFuZSIsImN1cnJlbnRFbnRhbmdsZWRMYW5lIiwiY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlIiwiY2hhaW5UaGVuYWJsZVZhbHVlIiwibGlzdGVuZXJzIiwidGhlbmFibGVXaXRoT3ZlcnJpZGUiLCJzdGF0dXMiLCJmdWxmaWxsZWRUaGVuYWJsZSIsInJlamVjdGVkVGhlbmFibGUiLCJwZWVrRW50YW5nbGVkQWN0aW9uTGFuZSIsInBlZWtFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSIsIlVwZGF0ZVN0YXRlIiwiUmVwbGFjZVN0YXRlIiwiRm9yY2VVcGRhdGUiLCJDYXB0dXJlVXBkYXRlIiwiaGFzRm9yY2VVcGRhdGUiLCJkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlIiwiY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlIiwiaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlIiwiYmFzZVN0YXRlIiwiZmlyc3RCYXNlVXBkYXRlIiwibGFzdEJhc2VVcGRhdGUiLCJzaGFyZWQiLCJoaWRkZW5DYWxsYmFja3MiLCJjYWxsYmFja3MiLCJ1cGRhdGVRdWV1ZSIsImNsb25lVXBkYXRlUXVldWUiLCJjdXJyZW50UXVldWUiLCJjcmVhdGVVcGRhdGUiLCJlbnF1ZXVlVXBkYXRlIiwic2hhcmVkUXVldWUiLCJpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUiLCJlbnRhbmdsZVRyYW5zaXRpb25zIiwicXVldWVMYW5lcyIsIm5ld1F1ZXVlTGFuZXMiLCJlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUiLCJjYXB0dXJlZFVwZGF0ZSIsIm5ld0ZpcnN0IiwibmV3TGFzdCIsImdldFN0YXRlRnJvbVVwZGF0ZSIsInByZXZTdGF0ZSIsImVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYiLCJuZXh0U3RhdGUiLCJleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYiLCJkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uIiwic3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiIsImVudGFuZ2xlZEFjdGlvblRoZW5hYmxlIiwicHJvY2Vzc1VwZGF0ZVF1ZXVlIiwicGVuZGluZ1F1ZXVlIiwibGFzdFBlbmRpbmdVcGRhdGUiLCJmaXJzdFBlbmRpbmdVcGRhdGUiLCJjdXJyZW50TGFzdEJhc2VVcGRhdGUiLCJuZXdTdGF0ZSIsIm5ld0xhbmVzIiwibmV3QmFzZVN0YXRlIiwibmV3Rmlyc3RCYXNlVXBkYXRlIiwibmV3TGFzdEJhc2VVcGRhdGUiLCJpc0hpZGRlblVwZGF0ZSIsInNob3VsZFNraXBVcGRhdGUiLCJfY2xvbmUiLCJfbGFzdFBlbmRpbmdVcGRhdGUiLCJfZmlyc3RQZW5kaW5nVXBkYXRlIiwibWFya1NraXBwZWRVcGRhdGVMYW5lcyIsInJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nIiwiY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZyIsImRlZmVySGlkZGVuQ2FsbGJhY2tzIiwibmV3SGlkZGVuQ2FsbGJhY2tzIiwiZXhpc3RpbmdIaWRkZW5DYWxsYmFja3MiLCJjb21taXRIaWRkZW5DYWxsYmFja3MiLCJjb21taXRDYWxsYmFja3MiLCJzaGFsbG93RXF1YWwiLCJvYmpBIiwib2JqQiIsImtleXNBIiwia2V5c0IiLCJjdXJyZW50S2V5IiwiZGVzY3JpYmVGaWJlciIsIl9kZWJ1Z093bmVyIiwiZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kIiwiaXNSZW5kZXJpbmciLCJnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCIsImdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYiLCJyZXNldEN1cnJlbnRGaWJlciIsInNldEN1cnJlbnRGaWJlciIsImdldEN1cnJlbnRGaWJlciIsInNldElzUmVuZGVyaW5nIiwicmVuZGVyaW5nIiwiUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MiLCJyZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyIsImZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzIiwicmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmciLCJmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nIiwiZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyIsImZpbmRTdHJpY3RSb290IiwibWF5YmVTdHJpY3RSb290Iiwic2V0VG9Tb3J0ZWRTdHJpbmciLCJwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MiLCJwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzIiwicGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyIsInBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzIiwicGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyIsInBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzIiwiZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyIsImNvbXBvbmVudFdpbGxNb3VudCIsIl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmciLCJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSIsIlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIiwiY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMiLCJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzIiwiY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyIsInNvcnRlZE5hbWVzIiwiX3NvcnRlZE5hbWVzIiwiX3NvcnRlZE5hbWVzMiIsIl9zb3J0ZWROYW1lczMiLCJfc29ydGVkTmFtZXM0IiwiX3NvcnRlZE5hbWVzNSIsInBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyIsImRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQiLCJzdHJpY3RSb290Iiwid2FybmluZ3NGb3JSb290IiwiZmliZXJBcnJheSIsImZpcnN0RmliZXIiLCJ1bmlxdWVOYW1lcyIsImNoZWNrUHJvcFN0cmluZ0NvZXJjaW9uIiwiUmVhY3RDdXJyZW50QWN0UXVldWUkMiIsImdldFRoZW5hYmxlc0Zyb21TdGF0ZSIsInN0YXRlIiwiZGV2U3RhdGUiLCJ0aGVuYWJsZXMiLCJTdXNwZW5zZUV4Y2VwdGlvbiIsIlN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbiIsIm5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZSIsImNyZWF0ZVRoZW5hYmxlU3RhdGUiLCJkaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UiLCJpc1RoZW5hYmxlUmVzb2x2ZWQiLCJub29wIiwidHJhY2tVc2VkVGhlbmFibGUiLCJ0aGVuYWJsZVN0YXRlIiwiZGlkVXNlUHJvbWlzZSIsInRyYWNrZWRUaGVuYWJsZXMiLCJwcmV2aW91cyIsInRoZW5hYmxlU3RhdGVEZXYiLCJmdWxmaWxsZWRWYWx1ZSIsInJlamVjdGVkRXJyb3IiLCJjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaCIsInBlbmRpbmdUaGVuYWJsZSIsIl9yZWplY3RlZEVycm9yIiwic3VzcGVuZGVkVGhlbmFibGUiLCJuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViIsImdldFN1c3BlbmRlZFRoZW5hYmxlIiwiY2hlY2tJZlVzZVdyYXBwZWRJblRyeUNhdGNoIiwicmVqZWN0ZWRSZWFzb24iLCJ0aGVuYWJsZVN0YXRlJDEiLCJ0aGVuYWJsZUluZGV4Q291bnRlciQxIiwiZGlkV2FybkFib3V0R2VuZXJhdG9ycyIsIm93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyIsIndhcm5Gb3JNaXNzaW5nS2V5IiwicmV0dXJuRmliZXIiLCJpc1JlYWN0Q2xhc3MiLCJ1bndyYXBUaGVuYWJsZSIsImNvZXJjZVJlZiIsIm1peGVkUmVmIiwicmVzb2x2ZWRJbnN0Iiwic3RyaW5nUmVmIiwiX3N0cmluZ1JlZiIsInRocm93T25JbnZhbGlkT2JqZWN0VHlwZSIsIm5ld0NoaWxkIiwiY2hpbGRTdHJpbmciLCJ3YXJuT25GdW5jdGlvblR5cGUiLCJyZXNvbHZlTGF6eSIsImNyZWF0ZUNoaWxkUmVjb25jaWxlciIsInNob3VsZFRyYWNrU2lkZUVmZmVjdHMiLCJfczIiLCJfczMiLCJfczQiLCJfczUiLCJfczYiLCJfczciLCJkZWxldGVDaGlsZCIsImNoaWxkVG9EZWxldGUiLCJkZWxldGlvbnMiLCJkZWxldGVSZW1haW5pbmdDaGlsZHJlbiIsImN1cnJlbnRGaXJzdENoaWxkIiwibWFwUmVtYWluaW5nQ2hpbGRyZW4iLCJleGlzdGluZ0NoaWxkcmVuIiwiZXhpc3RpbmdDaGlsZCIsInVzZUZpYmVyIiwicGVuZGluZ1Byb3BzIiwiY3JlYXRlV29ya0luUHJvZ3Jlc3MiLCJwbGFjZUNoaWxkIiwibmV3RmliZXIiLCJsYXN0UGxhY2VkSW5kZXgiLCJuZXdJbmRleCIsIm9sZEluZGV4IiwicGxhY2VTaW5nbGVDaGlsZCIsInVwZGF0ZVRleHROb2RlIiwidGV4dENvbnRlbnQiLCJjcmVhdGVkIiwiY3JlYXRlRmliZXJGcm9tVGV4dCIsImV4aXN0aW5nIiwidXBkYXRlRWxlbWVudCIsInVwZGF0ZUZyYWdtZW50IiwiaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nIiwiY3JlYXRlRmliZXJGcm9tRWxlbWVudCIsInVwZGF0ZVBvcnRhbCIsInBvcnRhbCIsImNvbnRhaW5lckluZm8iLCJpbXBsZW1lbnRhdGlvbiIsImNyZWF0ZUZpYmVyRnJvbVBvcnRhbCIsImNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50IiwiY3JlYXRlQ2hpbGQiLCJfY3JlYXRlZCIsIl9jcmVhdGVkMiIsIl9jcmVhdGVkMyIsInJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbiIsInVwZGF0ZVNsb3QiLCJvbGRGaWJlciIsInVwZGF0ZUZyb21NYXAiLCJuZXdJZHgiLCJtYXRjaGVkRmliZXIiLCJfbWF0Y2hlZEZpYmVyIiwiX21hdGNoZWRGaWJlcjIiLCJfbWF0Y2hlZEZpYmVyMyIsIndhcm5PbkludmFsaWRLZXkiLCJrbm93bktleXMiLCJyZWNvbmNpbGVDaGlsZHJlbkFycmF5IiwicmVzdWx0aW5nRmlyc3RDaGlsZCIsInByZXZpb3VzTmV3RmliZXIiLCJuZXh0T2xkRmliZXIiLCJfbmV3RmliZXIiLCJfbmV3RmliZXIyIiwicmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvciIsIm5ld0NoaWxkcmVuSXRlcmFibGUiLCJfbmV3Q2hpbGRyZW4iLCJfc3RlcCIsIl9uZXdGaWJlcjMiLCJfbmV3RmliZXI0IiwicmVjb25jaWxlU2luZ2xlVGV4dE5vZGUiLCJyZWNvbmNpbGVTaW5nbGVFbGVtZW50IiwiX2V4aXN0aW5nIiwiX2NyZWF0ZWQ0IiwicmVjb25jaWxlU2luZ2xlUG9ydGFsIiwicmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsIiwiaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCIsInJlY29uY2lsZUNoaWxkRmliZXJzIiwiZmlyc3RDaGlsZEZpYmVyIiwibW91bnRDaGlsZEZpYmVycyIsInJlc2V0Q2hpbGRSZWNvbmNpbGVyT25VbndpbmQiLCJjbG9uZUNoaWxkRmliZXJzIiwiY3VycmVudENoaWxkIiwicmVzZXRDaGlsZEZpYmVycyIsInJlc2V0V29ya0luUHJvZ3Jlc3MiLCJjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yIiwicHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yIiwicHVzaEhpZGRlbkNvbnRleHQiLCJwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMiLCJnZXRFbnRhbmdsZWRSZW5kZXJMYW5lcyIsInNldEVudGFuZ2xlZFJlbmRlckxhbmVzIiwiYmFzZUxhbmVzIiwicmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayIsInBvcEhpZGRlbkNvbnRleHQiLCJpc0N1cnJlbnRUcmVlSGlkZGVuIiwic3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IiLCJzaGVsbEJvdW5kYXJ5IiwiZ2V0U2hlbGxCb3VuZGFyeSIsInB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlciIsInB1c2hTdXNwZW5zZUxpc3RDb250ZXh0Iiwic2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0Iiwic3VzcGVuc2VTdGFja0N1cnNvciIsInB1c2hGYWxsYmFja1RyZWVTdXNwZW5zZUhhbmRsZXIiLCJyZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2siLCJwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyIiwiZ2V0U3VzcGVuc2VIYW5kbGVyIiwicG9wU3VzcGVuc2VIYW5kbGVyIiwicG9wU3VzcGVuc2VMaXN0Q29udGV4dCIsIkRlZmF1bHRTdXNwZW5zZUNvbnRleHQiLCJTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayIsIkZvcmNlU3VzcGVuc2VGYWxsYmFjayIsImhhc1N1c3BlbnNlTGlzdENvbnRleHQiLCJmbGFnIiwic2V0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQiLCJzaGFsbG93Q29udGV4dCIsIm5ld0NvbnRleHQiLCJmaW5kRmlyc3RTdXNwZW5kZWQiLCJkZWh5ZHJhdGVkIiwicmV2ZWFsT3JkZXIiLCJkaWRTdXNwZW5kIiwiTm9GbGFncyIsIkhhc0VmZmVjdCIsIkluc2VydGlvbiIsIkxheW91dCIsIlBhc3NpdmUiLCJSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyIiwiZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50IiwiZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QiLCJkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaCIsImRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50IiwiY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSIsImN1cnJlbnRIb29rIiwid29ya0luUHJvZ3Jlc3NIb29rIiwiZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSIsImRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyIsInNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWIiwidGhlbmFibGVJbmRleENvdW50ZXIiLCJnbG9iYWxDbGllbnRJZENvdW50ZXIiLCJSRV9SRU5ERVJfTElNSVQiLCJjdXJyZW50SG9va05hbWVJbkRldiIsImhvb2tUeXBlc0RldiIsImhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2IiwiaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMiLCJtb3VudEhvb2tUeXBlc0RldiIsImhvb2tOYW1lIiwidXBkYXRlSG9va1R5cGVzRGV2Iiwid2Fybk9uSG9va01pc21hdGNoSW5EZXYiLCJjaGVja0RlcHNBcmVBcnJheURldiIsImN1cnJlbnRIb29rTmFtZSIsInNlY29uZENvbHVtblN0YXJ0Iiwib2xkSG9va05hbWUiLCJuZXdIb29rTmFtZSIsIndhcm5JZkFzeW5jQ2xpZW50Q29tcG9uZW50IiwiaXNBc3luY0Z1bmN0aW9uIiwidGhyb3dJbnZhbGlkSG9va0Vycm9yIiwiYXJlSG9va0lucHV0c0VxdWFsIiwibmV4dERlcHMiLCJwcmV2RGVwcyIsInJlbmRlcldpdGhIb29rcyIsInNlY29uZEFyZyIsIm5leHRSZW5kZXJMYW5lcyIsIl9kZWJ1Z0hvb2tUeXBlcyIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYiLCJIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWIiwic2hvdWxkRG91YmxlUmVuZGVyREVWIiwicmVuZGVyV2l0aEhvb2tzQWdhaW4iLCJmaW5pc2hSZW5kZXJpbmdIb29rcyIsIkNvbnRleHRPbmx5RGlzcGF0Y2hlciIsImRpZFJlbmRlclRvb0Zld0hvb2tzIiwicmVwbGF5U3VzcGVuZGVkQ29tcG9uZW50V2l0aEhvb2tzIiwibnVtYmVyT2ZSZVJlbmRlcnMiLCJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYiLCJiYWlsb3V0SG9va3MiLCJyZXNldEhvb2tzQWZ0ZXJUaHJvdyIsInJlc2V0SG9va3NPblVud2luZCIsIm1vdW50V29ya0luUHJvZ3Jlc3NIb29rIiwiYmFzZVF1ZXVlIiwidXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rIiwibmV4dEN1cnJlbnRIb29rIiwibmV4dFdvcmtJblByb2dyZXNzSG9vayIsImN1cnJlbnRGaWJlciIsIm5ld0hvb2siLCJjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlIiwibGFzdEVmZmVjdCIsInN0b3JlcyIsInVzZVRoZW5hYmxlIiwidXNlIiwidXNhYmxlIiwicmVhZENvbnRleHQiLCJiYXNpY1N0YXRlUmVkdWNlciIsIm1vdW50UmVkdWNlciIsImRpc3BhdGNoIiwibGFzdFJlbmRlcmVkUmVkdWNlciIsImxhc3RSZW5kZXJlZFN0YXRlIiwiZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uIiwidXBkYXRlUmVkdWNlciIsInVwZGF0ZVJlZHVjZXJJbXBsIiwiYmFzZUZpcnN0IiwicGVuZGluZ0ZpcnN0IiwiZmlyc3QiLCJuZXdCYXNlUXVldWVGaXJzdCIsIm5ld0Jhc2VRdWV1ZUxhc3QiLCJyZXZlcnRMYW5lIiwiaGFzRWFnZXJTdGF0ZSIsImVhZ2VyU3RhdGUiLCJtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSIsInJlcmVuZGVyUmVkdWNlciIsImxhc3RSZW5kZXJQaGFzZVVwZGF0ZSIsImZpcnN0UmVuZGVyUGhhc2VVcGRhdGUiLCJtb3VudFN5bmNFeHRlcm5hbFN0b3JlIiwibmV4dFNuYXBzaG90IiwiY2FjaGVkU25hcHNob3QiLCJyb290UmVuZGVyTGFuZXMiLCJwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrIiwibW91bnRFZmZlY3QiLCJzdWJzY3JpYmVUb1N0b3JlIiwicHVzaEVmZmVjdCIsInVwZGF0ZVN0b3JlSW5zdGFuY2UiLCJjcmVhdGVFZmZlY3RJbnN0YW5jZSIsInVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlIiwicHJldlNuYXBzaG90Iiwic25hcHNob3RDaGFuZ2VkIiwidXBkYXRlRWZmZWN0IiwicmVuZGVyZWRTbmFwc2hvdCIsImNoZWNrIiwiY29tcG9uZW50VXBkYXRlUXVldWUiLCJjaGVja0lmU25hcHNob3RDaGFuZ2VkIiwiZm9yY2VTdG9yZVJlcmVuZGVyIiwiaGFuZGxlU3RvcmVDaGFuZ2UiLCJsYXRlc3RHZXRTbmFwc2hvdCIsInByZXZWYWx1ZSIsInNjaGVkdWxlVXBkYXRlT25GaWJlciIsIm1vdW50U3RhdGVJbXBsIiwiaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIiLCJtb3VudFN0YXRlIiwiZGlzcGF0Y2hTZXRTdGF0ZSIsInVwZGF0ZVN0YXRlIiwicmVyZW5kZXJTdGF0ZSIsImVmZmVjdCIsImZpcnN0RWZmZWN0IiwiZGVzdHJveSIsIm1vdW50UmVmIiwidXBkYXRlUmVmIiwibW91bnRFZmZlY3RJbXBsIiwiZmliZXJGbGFncyIsImhvb2tGbGFncyIsInVwZGF0ZUVmZmVjdEltcGwiLCJwcmV2RWZmZWN0IiwibW91bnRJbnNlcnRpb25FZmZlY3QiLCJ1cGRhdGVJbnNlcnRpb25FZmZlY3QiLCJtb3VudExheW91dEVmZmVjdCIsInVwZGF0ZUxheW91dEVmZmVjdCIsImltcGVyYXRpdmVIYW5kbGVFZmZlY3QiLCJyZWZDYWxsYmFjayIsIl9pbnN0IiwibW91bnRJbXBlcmF0aXZlSGFuZGxlIiwiZWZmZWN0RGVwcyIsInVwZGF0ZUltcGVyYXRpdmVIYW5kbGUiLCJtb3VudERlYnVnVmFsdWUiLCJ1cGRhdGVEZWJ1Z1ZhbHVlIiwibW91bnRDYWxsYmFjayIsInVwZGF0ZUNhbGxiYWNrIiwibW91bnRNZW1vIiwibmV4dENyZWF0ZSIsInVwZGF0ZU1lbW8iLCJtb3VudERlZmVycmVkVmFsdWUiLCJtb3VudERlZmVycmVkVmFsdWVJbXBsIiwidXBkYXRlRGVmZXJyZWRWYWx1ZSIsInJlc29sdmVkQ3VycmVudEhvb2siLCJ1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbCIsInJlcmVuZGVyRGVmZXJyZWRWYWx1ZSIsImRlZmVycmVkTGFuZSIsInJlcXVlc3REZWZlcnJlZExhbmUiLCJyZXN1bHRWYWx1ZSIsInNob3VsZERlZmVyVmFsdWUiLCJwZW5kaW5nU3RhdGUiLCJmaW5pc2hlZFN0YXRlIiwicHJldmlvdXNQcmlvcml0eSIsIl9jYWxsYmFja3MiLCJ0aGVuYWJsZUZvckZpbmlzaGVkU3RhdGUiLCJtb3VudFRyYW5zaXRpb24iLCJzdGF0ZUhvb2siLCJzdGFydCIsInVwZGF0ZVRyYW5zaXRpb24iLCJfdXBkYXRlU3RhdGUiLCJib29sZWFuT3JUaGVuYWJsZSIsImlzUGVuZGluZyIsInJlcmVuZGVyVHJhbnNpdGlvbiIsIl9yZXJlbmRlclN0YXRlIiwibW91bnRJZCIsImlkZW50aWZpZXJQcmVmaXgiLCJnbG9iYWxDbGllbnRJZCIsInVwZGF0ZUlkIiwicmVxdWVzdFVwZGF0ZUxhbmUiLCJpc1JlbmRlclBoYXNlVXBkYXRlIiwiZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlIiwiZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlIiwicHJldkRpc3BhdGNoZXIiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViIsIkludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYiLCJJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWIiwid2FybkludmFsaWRDb250ZXh0QWNjZXNzIiwid2FybkludmFsaWRIb29rQWNjZXNzIiwiY29tbWl0VGltZSIsImxheW91dEVmZmVjdFN0YXJ0VGltZSIsInByb2ZpbGVyU3RhcnRUaW1lIiwicGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSIsImN1cnJlbnRVcGRhdGVJc05lc3RlZCIsIm5lc3RlZFVwZGF0ZVNjaGVkdWxlZCIsImlzQ3VycmVudFVwZGF0ZU5lc3RlZCIsIm1hcmtOZXN0ZWRVcGRhdGVTY2hlZHVsZWQiLCJyZXNldE5lc3RlZFVwZGF0ZUZsYWciLCJzeW5jTmVzdGVkVXBkYXRlRmxhZyIsImdldENvbW1pdFRpbWUiLCJyZWNvcmRDb21taXRUaW1lIiwic3RhcnRQcm9maWxlclRpbWVyIiwiYWN0dWFsU3RhcnRUaW1lIiwic3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmciLCJzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhIiwib3ZlcnJpZGVCYXNlVGltZSIsImVsYXBzZWRUaW1lIiwiYWN0dWFsRHVyYXRpb24iLCJzZWxmQmFzZUR1cmF0aW9uIiwicmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24iLCJlZmZlY3REdXJhdGlvbiIsInBhcmVudFN0YXRlTm9kZSIsInJlY29yZFBhc3NpdmVFZmZlY3REdXJhdGlvbiIsInBhc3NpdmVFZmZlY3REdXJhdGlvbiIsInN0YXJ0TGF5b3V0RWZmZWN0VGltZXIiLCJzdGFydFBhc3NpdmVFZmZlY3RUaW1lciIsInRyYW5zZmVyQWN0dWFsRHVyYXRpb24iLCJyZXNvbHZlRGVmYXVsdFByb3BzIiwiYmFzZVByb3BzIiwiZmFrZUludGVybmFsSW5zdGFuY2UiLCJkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQiLCJkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUiLCJkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUiLCJkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlIiwiZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlIiwiZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUiLCJkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyIsImRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSIsImRpZFdhcm5PbkludmFsaWRDYWxsYmFjayIsIndhcm5PbkludmFsaWRDYWxsYmFjayIsIndhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSIsImFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiY2xhc3NDb21wb25lbnRVcGRhdGVyIiwiY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUiLCJvbGRTdGF0ZSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsImNoZWNrQ2xhc3NJbnN0YW5jZSIsInJlbmRlclByZXNlbnQiLCJnZXRJbml0aWFsU3RhdGUiLCJjb250ZXh0VHlwZSIsImNvbXBvbmVudFNob3VsZFVwZGF0ZSIsImNvbXBvbmVudERpZFVubW91bnQiLCJjb21wb25lbnREaWRSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMiLCJoYXNNdXRhdGVkUHJvcHMiLCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImFkb3B0Q2xhc3NJbnN0YW5jZSIsIl9yZWFjdEludGVybmFsSW5zdGFuY2UiLCJjb25zdHJ1Y3RDbGFzc0luc3RhbmNlIiwiaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIiLCJpc1ZhbGlkIiwiYWRkZW5kdW0iLCJmb3VuZFdpbGxNb3VudE5hbWUiLCJmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lIiwiZm91bmRXaWxsVXBkYXRlTmFtZSIsIl9jb21wb25lbnROYW1lIiwibmV3QXBpTmFtZSIsImNhbGxDb21wb25lbnRXaWxsTW91bnQiLCJjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm1vdW50Q2xhc3NJbnN0YW5jZSIsImNvbXBvbmVudERpZE1vdW50IiwicmVzdW1lTW91bnRDbGFzc0luc3RhbmNlIiwib2xkQ29udGV4dCIsIm5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQiLCJoYXNOZXdMaWZlY3ljbGVzIiwidXBkYXRlQ2xhc3NJbnN0YW5jZSIsInVucmVzb2x2ZWRPbGRQcm9wcyIsInVucmVzb2x2ZWROZXdQcm9wcyIsIm5leHRVbm1hc2tlZENvbnRleHQiLCJjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlciIsImRpZ2VzdCIsImNyZWF0ZUNhcHR1cmVkVmFsdWUiLCJSZWFjdEZpYmVyRXJyb3JEaWFsb2ciLCJzaG93RXJyb3JEaWFsb2ciLCJib3VuZGFyeSIsImVycm9ySW5mbyIsImNhcHR1cmVkRXJyb3IiLCJjb21wb25lbnRTdGFjayIsImVycm9yQm91bmRhcnkiLCJsb2dDYXB0dXJlZEVycm9yIiwibG9nRXJyb3IiLCJjb21wb25lbnROYW1lTWVzc2FnZSIsImVycm9yQm91bmRhcnlNZXNzYWdlIiwiZXJyb3JCb3VuZGFyeU5hbWUiLCJjb21iaW5lZE1lc3NhZ2UiLCJjcmVhdGVSb290RXJyb3JVcGRhdGUiLCJvblVuY2F1Z2h0RXJyb3IiLCJjcmVhdGVDbGFzc0Vycm9yVXBkYXRlIiwibWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmciLCJjb21wb25lbnREaWRDYXRjaCIsIm1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQiLCJyZXNldFN1c3BlbmRlZENvbXBvbmVudCIsImN1cnJlbnRTb3VyY2UiLCJtYXJrU3VzcGVuc2VCb3VuZGFyeVNob3VsZENhcHR1cmUiLCJzdXNwZW5zZUJvdW5kYXJ5IiwiY3VycmVudFNvdXJjZUZpYmVyIiwidGhyb3dFeGNlcHRpb24iLCJyZXN0b3JlUGVuZGluZ1VwZGF0ZXJzIiwid2FrZWFibGUiLCJyZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlIiwicmVuZGVyRGlkU3VzcGVuZCIsImlzU3VzcGVuc2V5UmVzb3VyY2UiLCJyZXRyeVF1ZXVlIiwiYXR0YWNoUGluZ0xpc3RlbmVyIiwiX2lzU3VzcGVuc2V5UmVzb3VyY2UiLCJvZmZzY3JlZW5RdWV1ZSIsIm5ld09mZnNjcmVlblF1ZXVlIiwidHJhbnNpdGlvbnMiLCJtYXJrZXJJbnN0YW5jZXMiLCJfcmV0cnlRdWV1ZSIsInVuY2F1Z2h0U3VzcGVuc2VFcnJvciIsInJlbmRlckRpZEVycm9yIiwiX2Vycm9ySW5mbyIsImlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkiLCJfbGFuZSIsIl91cGRhdGUiLCJSZWFjdEN1cnJlbnRPd25lciQyIiwiU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uIiwiZGlkUmVjZWl2ZVVwZGF0ZSIsImRpZFdhcm5BYm91dEJhZENsYXNzIiwiZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudCIsImRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCIsImRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQiLCJkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnMiLCJkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIiwiZGlkV2FybkFib3V0UmV2ZWFsT3JkZXIiLCJkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyIsImRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnQiLCJyZWNvbmNpbGVDaGlsZHJlbiIsIm5leHRDaGlsZHJlbiIsImZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUiLCJ1cGRhdGVGb3J3YXJkUmVmIiwiaW5uZXJQcm9wVHlwZXMiLCJwcmVwYXJlVG9SZWFkQ29udGV4dCIsImJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsiLCJ1cGRhdGVNZW1vQ29tcG9uZW50IiwiaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCIsInJlc29sdmVkVHlwZSIsInJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyIsInZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldiIsInVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQiLCJjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMiLCJfdHlwZSIsIl9pbm5lclByb3BUeXBlcyIsImhhc1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dCIsImNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0Iiwib3V0ZXJNZW1vVHlwZSIsIm91dGVyUHJvcFR5cGVzIiwidXBkYXRlRnVuY3Rpb25Db21wb25lbnQiLCJ1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQiLCJuZXh0SXNEZXRhY2hlZCIsIl9wZW5kaW5nVmlzaWJpbGl0eSIsIm1hcmtSZWYkMSIsIm5leHRCYXNlTGFuZXMiLCJjdXJyZW50Q2hpbGRMYW5lcyIsImxhbmVzV2VKdXN0QXR0ZW1wdGVkIiwicmVtYWluaW5nQ2hpbGRMYW5lcyIsImRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50IiwiY2FjaGVQb29sIiwiX25leHRCYXNlTGFuZXMiLCJfbmV4dFN0YXRlIiwidXBkYXRlTW9kZSIsInVwZGF0ZVByb2ZpbGVyIiwicmVwbGF5RnVuY3Rpb25Db21wb25lbnQiLCJ1cGRhdGVDbGFzc0NvbXBvbmVudCIsInNob3VsZEVycm9yIiwiX2luc3RhbmNlIiwidGVtcEluc3RhbmNlIiwiaGFzQ29udGV4dCIsInJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUiLCJuZXh0VW5pdE9mV29yayIsImZpbmlzaENsYXNzQ29tcG9uZW50IiwiZGlkQ2FwdHVyZUVycm9yIiwicHVzaEhvc3RSb290Q29udGV4dCIsInBlbmRpbmdDb250ZXh0IiwidXBkYXRlSG9zdFJvb3QiLCJwcmV2Q2hpbGRyZW4iLCJ1cGRhdGVIb3N0Q29tcG9uZW50JDEiLCJ1cGRhdGVIb3N0VGV4dCQxIiwibW91bnRMYXp5Q29tcG9uZW50IiwiX2N1cnJlbnQiLCJyZXNvbHZlZFRhZyIsInJlc29sdmVMYXp5Q29tcG9uZW50VGFnIiwicmVzb2x2ZWRQcm9wcyIsInJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyIsInJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nIiwibW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQiLCJtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQiLCJfY29tcG9uZW50TmFtZTIiLCJfY29tcG9uZW50TmFtZTMiLCJfY29tcG9uZW50TmFtZTQiLCJfY29tcG9uZW50TmFtZTUiLCJTVVNQRU5ERURfTUFSS0VSIiwidHJlZUNvbnRleHQiLCJyZXRyeUxhbmUiLCJtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUiLCJnZXRTdXNwZW5kZWRDYWNoZSIsInVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUiLCJwcmV2T2Zmc2NyZWVuU3RhdGUiLCJzaG91bGRSZW1haW5PbkZhbGxiYWNrIiwic3VzcGVuc2VTdGF0ZSIsInN1c3BlbnNlQ29udGV4dCIsImdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlIiwicHJpbWFyeVRyZWVEaWREZWZlciIsInBlZWtEZWZlcnJlZExhbmUiLCJ1cGRhdGVTdXNwZW5zZUNvbXBvbmVudCIsInNob3VsZFN1c3BlbmQiLCJzaG93RmFsbGJhY2siLCJkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciIsIm5leHRQcmltYXJ5Q2hpbGRyZW4iLCJuZXh0RmFsbGJhY2tDaGlsZHJlbiIsImZhbGxiYWNrIiwiZmFsbGJhY2tGcmFnbWVudCIsIm1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuIiwicHJpbWFyeUNoaWxkRnJhZ21lbnQiLCJtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuIiwiX2RlaHlkcmF0ZWQiLCJ1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQiLCJfbmV4dEZhbGxiYWNrQ2hpbGRyZW4iLCJfbmV4dFByaW1hcnlDaGlsZHJlbiIsImZhbGxiYWNrQ2hpbGRGcmFnbWVudCIsInVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbiIsIl9wcmltYXJ5Q2hpbGRGcmFnbWVudDIiLCJfbmV4dFByaW1hcnlDaGlsZHJlbjIiLCJfcHJpbWFyeUNoaWxkRnJhZ21lbnQzIiwidXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4iLCJwcmltYXJ5Q2hpbGRyZW4iLCJwcmltYXJ5Q2hpbGRQcm9wcyIsIm1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlciIsImZhbGxiYWNrQ2hpbGRyZW4iLCJwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50IiwidHJlZUJhc2VEdXJhdGlvbiIsIm9mZnNjcmVlblByb3BzIiwiY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuIiwidXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlciIsImN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCIsImN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQiLCJzdWJ0cmVlRmxhZ3MiLCJyZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyIsInJlY292ZXJhYmxlRXJyb3IiLCJtb3VudFN1c3BlbnNlRmFsbGJhY2tBZnRlclJldHJ5V2l0aG91dEh5ZHJhdGluZyIsImZpYmVyTW9kZSIsInN1c3BlbnNlSW5zdGFuY2UiLCJfZ2V0U3VzcGVuc2VJbnN0YW5jZUYiLCJjYXB0dXJlZFZhbHVlIiwiYXR0ZW1wdEh5ZHJhdGlvbkF0TGFuZSIsInJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkiLCJfY2FwdHVyZWRWYWx1ZSIsIl9wcmltYXJ5Q2hpbGRGcmFnbWVudDQiLCJzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIiLCJwcm9wYWdhdGlvblJvb3QiLCJzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoIiwicHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlIiwiZmlyc3RDaGlsZCIsImZpbmRMYXN0Q29udGVudFJvdyIsImxhc3RDb250ZW50Um93IiwiY3VycmVudFJvdyIsInZhbGlkYXRlUmV2ZWFsT3JkZXIiLCJ2YWxpZGF0ZVRhaWxPcHRpb25zIiwidGFpbE1vZGUiLCJ2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkIiwiY2hpbGRTbG90IiwiaXNBbkFycmF5IiwiaXNJdGVyYWJsZSIsInZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4iLCJjaGlsZHJlbkl0ZXJhdG9yIiwiaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlIiwiaXNCYWNrd2FyZHMiLCJ0YWlsIiwicmVuZGVyU3RhdGUiLCJyZW5kZXJpbmdTdGFydFRpbWUiLCJsYXN0IiwidXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50Iiwic2hvdWxkRm9yY2VGYWxsYmFjayIsImRpZFN1c3BlbmRCZWZvcmUiLCJfdGFpbCIsIm5leHRSb3ciLCJ1cGRhdGVQb3J0YWxDb21wb25lbnQiLCJoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciIsInVwZGF0ZUNvbnRleHRQcm92aWRlciIsInByb3ZpZGVyVHlwZSIsInByb3ZpZGVyUHJvcFR5cGVzIiwicHVzaFByb3ZpZGVyIiwib2xkVmFsdWUiLCJwcm9wYWdhdGVDb250ZXh0Q2hhbmdlIiwiaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyIiwidXBkYXRlQ29udGV4dENvbnN1bWVyIiwicmVtb3VudEZpYmVyIiwib2xkV29ya0luUHJvZ3Jlc3MiLCJuZXdXb3JrSW5Qcm9ncmVzcyIsInByZXZTaWJsaW5nIiwidXBkYXRlTGFuZXMiLCJhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZSIsImhhc0NoaWxkV29yayIsInByaW1hcnlDaGlsZExhbmVzIiwiX2hhc0NoaWxkV29yayIsImJlZ2luV29yayQxIiwiX2RlYnVnTmVlZHNSZW1vdW50IiwidW5yZXNvbHZlZFByb3BzIiwiX0NvbXBvbmVudCIsIl91bnJlc29sdmVkUHJvcHMiLCJfcmVzb2x2ZWRQcm9wcyIsIl91bnJlc29sdmVkUHJvcHMyIiwiX3Jlc29sdmVkUHJvcHMyIiwiX3R5cGUyIiwiX3VucmVzb2x2ZWRQcm9wczMiLCJfcmVzb2x2ZWRQcm9wczMiLCJfQ29tcG9uZW50MiIsIl91bnJlc29sdmVkUHJvcHM0IiwiX3Jlc29sdmVkUHJvcHM0IiwidmFsdWVDdXJzb3IiLCJyZW5kZXJlcjJDdXJzb3JERVYiLCJyZW5kZXJlclNpZ2lsIiwiY3VycmVudGx5UmVuZGVyaW5nRmliZXIiLCJsYXN0Q29udGV4dERlcGVuZGVuY3kiLCJsYXN0RnVsbHlPYnNlcnZlZENvbnRleHQiLCJpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWIiwicmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzIiwicHJvdmlkZXJGaWJlciIsInBvcFByb3ZpZGVyIiwiY3VycmVudFZhbHVlIiwiY3VycmVudFJlbmRlcmVyMiIsInByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VfZWFnZXIiLCJuZXh0RmliZXIiLCJsaXN0IiwiZGVwZW5kZW5jeSIsImZpcnN0Q29udGV4dCIsInBhcmVudFN1c3BlbnNlIiwiX2FsdGVybmF0ZSIsInJlYWRDb250ZXh0Rm9yQ29uc3VtZXIiLCJjb25zdW1lciIsImNvbnRleHRJdGVtIiwibWVtb2l6ZWRWYWx1ZSIsIlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEiLCJyZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24iLCJoYW5kbGVBc3luY0FjdGlvbiIsIm5vdGlmeVRyYW5zaXRpb25DYWxsYmFja3MiLCJtYXJrVXBkYXRlIiwibWFya1JlZiIsImRvZXNSZXF1aXJlQ2xvbmUiLCJjb21wbGV0ZWRXb3JrIiwiZGlkQmFpbG91dCIsImFwcGVuZEFsbENoaWxkcmVuIiwibmVlZHNWaXNpYmlsaXR5VG9nZ2xlIiwiX25vZGUiLCJhcHBlbmRBbGxDaGlsZHJlblRvQ29udGFpbmVyIiwiY29udGFpbmVyQ2hpbGRTZXQiLCJfaW5zdGFuY2UyIiwiX25lZWRzVmlzaWJpbGl0eVRvZ2dsZSIsInVwZGF0ZUhvc3RDb250YWluZXIiLCJwb3J0YWxPclJvb3QiLCJwZW5kaW5nQ2hpbGRyZW4iLCJ1cGRhdGVIb3N0Q29tcG9uZW50IiwiY3VycmVudEluc3RhbmNlIiwiX29sZFByb3BzIiwicmVxdWlyZXNDbG9uZSIsIm5ld0luc3RhbmNlIiwicHJlbG9hZEluc3RhbmNlQW5kU3VzcGVuZElmTmVlZGVkIiwic2NoZWR1bGVSZXRyeUVmZmVjdCIsIndha2VhYmxlcyIsInVwZGF0ZUhvc3RUZXh0Iiwib2xkVGV4dCIsIm5ld1RleHQiLCJjdXJyZW50SG9zdENvbnRleHQiLCJjdXRPZmZUYWlsSWZOZWVkZWQiLCJoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2siLCJ0YWlsTm9kZSIsImxhc3RUYWlsTm9kZSIsIl90YWlsTm9kZSIsIl9sYXN0VGFpbE5vZGUiLCJidWJibGVQcm9wZXJ0aWVzIiwibmV3Q2hpbGRMYW5lcyIsIl90cmVlQmFzZUR1cmF0aW9uIiwiX2NoaWxkMiIsIl9jaGlsZDMiLCJjb21wbGV0ZURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5Iiwid2FzSHlkcmF0ZWQiLCJpc1RpbWVkT3V0U3VzcGVuc2UiLCJfaXNUaW1lZE91dFN1c3BlbnNlIiwiX3ByaW1hcnlDaGlsZEZyYWdtZW50IiwiY29tcGxldGVXb3JrIiwiZmliZXJSb290IiwiX2N1cnJlbnRIb3N0Q29udGV4dCIsIl93YXNIeWRyYXRlZDIiLCJfcm9vdENvbnRhaW5lckluc3RhbmNlIiwiX2luc3RhbmNlMyIsIl9yb290Q29udGFpbmVySW5zdGFuY2UyIiwiX2N1cnJlbnRIb3N0Q29udGV4dDIiLCJfd2FzSHlkcmF0ZWQzIiwiZmFsbHRocm91Z2hUb05vcm1hbFN1c3BlbnNlUGF0aCIsIm5leHREaWRUaW1lb3V0IiwicHJldkRpZFRpbWVvdXQiLCJfb2Zmc2NyZWVuRmliZXIyIiwiZGlkU3VzcGVuZEFscmVhZHkiLCJyZW5kZXJlZFRhaWwiLCJjYW5ub3RCZVN1c3BlbmRlZCIsInJlbmRlckhhc05vdFN1c3BlbmRlZFlldCIsInN1c3BlbmRlZCIsImdldFJlbmRlclRhcmdldFRpbWUiLCJfc3VzcGVuZGVkIiwiX3JldHJ5UXVldWUyIiwicHJldmlvdXNTaWJsaW5nIiwibmV4dElzSGlkZGVuIiwiX3ByZXZTdGF0ZSIsInByZXZJc0hpZGRlbiIsIl9yZXRyeVF1ZXVlMyIsInVud2luZFdvcmsiLCJfZmxhZ3MiLCJfZmxhZ3MyIiwiX2ZsYWdzMyIsInVud2luZEludGVycnVwdGVkV29yayIsImludGVycnVwdGVkV29yayIsImRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlIiwib2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuIiwib2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiIsIlBvc3NpYmx5V2Vha1NldCIsIldlYWtTZXQiLCJuZXh0RWZmZWN0IiwiaW5Qcm9ncmVzc0xhbmVzIiwiaW5Qcm9ncmVzc1Jvb3QiLCJzaG91bGRQcm9maWxlIiwiZ2V0RXhlY3V0aW9uQ29udGV4dCIsIkNvbW1pdENvbnRleHQiLCJOb0NvbnRleHQiLCJyZXBvcnRVbmNhdWdodEVycm9ySW5ERVYiLCJjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudCIsIm5lYXJlc3RNb3VudGVkQW5jZXN0b3IiLCJjYXB0dXJlQ29tbWl0UGhhc2VFcnJvciIsInNhZmVseUF0dGFjaFJlZiIsImNvbW1pdEF0dGFjaFJlZiIsInNhZmVseURldGFjaFJlZiIsInJlZkNsZWFudXAiLCJmaW5pc2hlZFdvcmsiLCJyZXRWYWwiLCJzYWZlbHlDYWxsRGVzdHJveSIsInNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyIsImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19iZWdpbiIsInNob3VsZEZpcmUiLCJjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNfY29tcGxldGUiLCJjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNPbkZpYmVyIiwic25hcHNob3QiLCJkaWRXYXJuU2V0IiwiX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUiLCJjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQiLCJzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QiLCJjb21taXRIb29rRWZmZWN0TGlzdE1vdW50IiwiY29tbWl0UGFzc2l2ZUVmZmVjdER1cmF0aW9ucyIsImZpbmlzaGVkUm9vdCIsIl9maW5pc2hlZFdvcmskbWVtb2l6ZSIsIm9uUG9zdENvbW1pdCIsIm91dGVyIiwiY29tbWl0SG9va0xheW91dEVmZmVjdHMiLCJjb21taXRDbGFzc0xheW91dExpZmVjeWNsZXMiLCJjb21taXRDbGFzc0NhbGxiYWNrcyIsImNvbW1pdEhvc3RDb21wb25lbnRNb3VudCIsImNvbW1pdFByb2ZpbGVyVXBkYXRlIiwiX2ZpbmlzaGVkV29yayRtZW1vaXplMiIsIm9uQ29tbWl0Iiwib25SZW5kZXIiLCJlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdCIsImNvbW1pdExheW91dEVmZmVjdE9uRmliZXIiLCJjb21taXR0ZWRMYW5lcyIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzIiwiaXNNb2Rlcm5Sb290IiwibmV3T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuIiwid2FzSGlkZGVuIiwibmV3T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiIsInByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4iLCJwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiIsImluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMiLCJyZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzIiwiaW5zdGFuY2VUb1VzZSIsImRldGFjaEZpYmVyTXV0YXRpb24iLCJkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyIsImVtcHR5UG9ydGFsQ29udGFpbmVyIiwiY29tbWl0UGxhY2VtZW50IiwiY29tbWl0RGVsZXRpb25FZmZlY3RzIiwiZGVsZXRlZEZpYmVyIiwiY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlciIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMiLCJjb21taXRTdXNwZW5zZUNhbGxiYWNrIiwiZ2V0UmV0cnlDYWNoZSIsInJldHJ5Q2FjaGUiLCJfcmV0cnlDYWNoZSIsImRldGFjaE9mZnNjcmVlbkluc3RhbmNlIiwiYXR0YWNoT2Zmc2NyZWVuSW5zdGFuY2UiLCJhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzIiwicmV0cnkiLCJyZXNvbHZlUmV0cnlXYWtlYWJsZSIsImNvbW1pdE11dGF0aW9uRWZmZWN0cyIsImNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIiLCJyZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzIiwicHJldkRlYnVnRmliZXIiLCJjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMiLCJfY29udGFpbmVySW5mbyIsIl9wZW5kaW5nQ2hpbGRyZW4iLCJpc1Nob3dpbmdGYWxsYmFjayIsIndhc1Nob3dpbmdGYWxsYmFjayIsIm1hcmtDb21taXRUaW1lT2ZGYWxsYmFjayIsImlzVXBkYXRlIiwid2FzSGlkZGVuQnlBbmNlc3Rvck9mZnNjcmVlbiIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzIiwiY29tbWl0TGF5b3V0RWZmZWN0cyIsImRpc2FwcGVhckxheW91dEVmZmVjdHMiLCJyZWFwcGVhckxheW91dEVmZmVjdHMiLCJvZmZzY3JlZW5TdGF0ZSIsImNoaWxkU2hvdWxkSW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyIsImNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzIiwiY29tbWl0UGFzc2l2ZU1vdW50RWZmZWN0cyIsImNvbW1pdHRlZFRyYW5zaXRpb25zIiwiY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlciIsInJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzIiwicmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzIiwicmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMiLCJfaW5zdGFuY2U0IiwiY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzIiwiY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyIiwic3VzcGVuc2V5Q29tbWl0RmxhZyIsImFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQiLCJhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlciIsInJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdCIsInByZXZGbGFncyIsImRldGFjaEFsdGVybmF0ZVNpYmxpbmdzIiwicHJldmlvdXNGaWJlciIsImRldGFjaGVkQ2hpbGQiLCJkZXRhY2hlZFNpYmxpbmciLCJjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzIiwicmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyIsImNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4iLCJyZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzIiwiZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QiLCJkZWxldGVkU3VidHJlZVJvb3QiLCJjb21taXRQYXNzaXZlVW5tb3VudEluc2lkZURlbGV0ZWRUcmVlT25GaWJlciIsImNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfY29tcGxldGUiLCJpbnZva2VMYXlvdXRFZmZlY3RNb3VudEluREVWIiwiaW52b2tlUGFzc2l2ZUVmZmVjdE1vdW50SW5ERVYiLCJpbnZva2VMYXlvdXRFZmZlY3RVbm1vdW50SW5ERVYiLCJpbnZva2VQYXNzaXZlRWZmZWN0VW5tb3VudEluREVWIiwic3ltYm9sRm9yIiwiUmVhY3RDdXJyZW50QWN0UXVldWUkMSIsImlzTGVnYWN5QWN0RW52aXJvbm1lbnQiLCJJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQiLCJpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCIsImlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCIsIkJhdGNoZWRDb250ZXh0IiwiUmVuZGVyQ29udGV4dCIsIlJvb3RJblByb2dyZXNzIiwiUm9vdEZhdGFsRXJyb3JlZCIsIlJvb3RFcnJvcmVkIiwiUm9vdFN1c3BlbmRlZCIsIlJvb3RTdXNwZW5kZWRXaXRoRGVsYXkiLCJSb290Q29tcGxldGVkIiwiUm9vdERpZE5vdENvbXBsZXRlIiwiZXhlY3V0aW9uQ29udGV4dCIsIk5vdFN1c3BlbmRlZCIsIlN1c3BlbmRlZE9uRXJyb3IiLCJTdXNwZW5kZWRPbkRhdGEiLCJTdXNwZW5kZWRPbkltbWVkaWF0ZSIsIlN1c3BlbmRlZE9uSW5zdGFuY2UiLCJTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlIiwiU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlIiwiU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlIiwiU3VzcGVuZGVkT25IeWRyYXRpb24iLCJ3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiIsIndvcmtJblByb2dyZXNzVGhyb3duVmFsdWUiLCJ3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIiLCJlbnRhbmdsZWRSZW5kZXJMYW5lcyIsIndvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMiLCJ3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yIiwid29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIiwid29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMiLCJ3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyIsIndvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lIiwid29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyIsIndvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzIiwiZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSIsIkZBTExCQUNLX1RIUk9UVExFX01TIiwid29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSIsIkluZmluaXR5IiwiUkVOREVSX1RJTUVPVVRfTVMiLCJ3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zIiwicmVzZXRSZW5kZXJUaW1lciIsImhhc1VuY2F1Z2h0RXJyb3IiLCJmaXJzdFVuY2F1Z2h0RXJyb3IiLCJsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCIsInJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzIiwicm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMiLCJwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyIsInBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3RzIiwiTkVTVEVEX1VQREFURV9MSU1JVCIsIm5lc3RlZFVwZGF0ZUNvdW50Iiwicm9vdFdpdGhOZXN0ZWRVcGRhdGVzIiwiaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzIiwiZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyIsIk5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCIsIm5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCIsInJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMiLCJpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QiLCJiYXRjaENvbmZpZ1RyYW5zaXRpb24iLCJhY3Rpb25TY29wZUxhbmUiLCJldmVudExhbmUiLCJyZXF1ZXN0UmV0cnlMYW5lIiwiaXNQcmVyZW5kZXJpbmciLCJzdXNwZW5zZUhhbmRsZXIiLCJwcmVwYXJlRnJlc2hTdGFjayIsIm1hcmtSb290U3VzcGVuZGVkIiwid2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYiLCJ3YXJuSWZVcGRhdGVzTm90V3JhcHBlZFdpdGhBY3RERVYiLCJkaWRUaW1lb3V0IiwiZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyIsImZsdXNoUGFzc2l2ZUVmZmVjdHMiLCJzaG91bGRUaW1lU2xpY2UiLCJleGl0U3RhdHVzIiwicmVuZGVyUm9vdENvbmN1cnJlbnQiLCJyZW5kZXJSb290U3luYyIsInJlbmRlcldhc0NvbmN1cnJlbnQiLCJpc1JlbmRlckNvbnNpc3RlbnRXaXRoRXh0ZXJuYWxTdG9yZXMiLCJlcnJvclJldHJ5TGFuZXMiLCJyZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvciIsImZhdGFsRXJyb3IiLCJmaW5pc2hlZExhbmVzIiwiZmluaXNoQ29uY3VycmVudFJlbmRlciIsImVycm9yc0Zyb21GaXJzdEF0dGVtcHQiLCJ3YXNSb290RGVoeWRyYXRlZCIsInJvb3RXb3JrSW5Qcm9ncmVzcyIsImVycm9yc0Zyb21TZWNvbmRBdHRlbXB0Iiwic2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWIiwiY29tbWl0Um9vdCIsIm1zVW50aWxUaW1lb3V0IiwidGltZW91dEhhbmRsZSIsImNvbW1pdFJvb3RXaGVuUmVhZHkiLCJyZWNvdmVyYWJsZUVycm9ycyIsInNjaGVkdWxlUGVuZGluZ0NvbW1pdCIsImNoZWNrcyIsInJlbmRlcmVkVmFsdWUiLCJiYXRjaGVkVXBkYXRlcyIsInByZXZFeGVjdXRpb25Db250ZXh0IiwiZmx1c2hTeW5jIiwibmV3RW50YW5nbGVkUmVuZGVyTGFuZXMiLCJyZXNldFdvcmtJblByb2dyZXNzU3RhY2siLCJyZXNldFN1c3BlbmRlZFdvcmtMb29wT25VbndpbmQiLCJoYW5kbGVUaHJvdyIsInRocm93blZhbHVlIiwic2hvdWxkUmVtYWluT25QcmV2aW91c1NjcmVlbiIsImlzV2FrZWFibGUiLCJlcnJvcmVkV29yayIsInB1c2hEaXNwYXRjaGVyIiwicG9wRGlzcGF0Y2hlciIsImRpZFN1c3BlbmRJblNoZWxsIiwidW5pdE9mV29yayIsInRocm93QW5kVW53aW5kV29ya0xvb3AiLCJ3b3JrTG9vcFN5bmMiLCJwZXJmb3JtVW5pdE9mV29yayIsInJlc3VtZU9yVW53aW5kIiwicmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayIsIm9uUmVzb2x1dGlvbiIsImhvc3RGaWJlciIsImlzUmVhZHkiLCJjb21wbGV0ZVVuaXRPZldvcmsiLCJ3b3JrTG9vcENvbmN1cnJlbnQiLCJiZWdpbldvcmsiLCJpc1Byb2ZpbGluZ01vZGUiLCJkaWRGYXRhbCIsInBhbmljT25Sb290RXJyb3IiLCJ1bndpbmRVbml0T2ZXb3JrIiwic2libGluZ0ZpYmVyIiwiaW5jb21wbGV0ZVdvcmsiLCJwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSIsImNvbW1pdFJvb3RJbXBsIiwicmVuZGVyUHJpb3JpdHlMZXZlbCIsImZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFViIsInNjaGVkdWxlQ2FsbGJhY2siLCJzdWJ0cmVlSGFzRWZmZWN0cyIsInJvb3RIYXNFZmZlY3QiLCJyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzIiwiY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWIiwib25SZWNvdmVyYWJsZUVycm9yIiwibWFrZUVycm9ySW5mbyIsInJlbmRlclByaW9yaXR5IiwicHJpb3JpdHkiLCJmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCIsInByb2ZpbGVyRWZmZWN0cyIsInByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvciIsImNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290Iiwicm9vdEZpYmVyIiwicGluZ0NhY2hlIiwidGhyZWFkSURzIiwicGluZyIsInBpbmdTdXNwZW5kZWRSb290Iiwid2FybklmU3VzcGVuc2VSZXNvbHV0aW9uTm90V3JhcHBlZFdpdGhBY3RERVYiLCJyZXRyeVRpbWVkT3V0Qm91bmRhcnkiLCJib3VuZGFyeUZpYmVyIiwiaGFzUGFzc2l2ZUVmZmVjdHMiLCJsZWdhY3lDb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYiLCJpbnZva2VFZmZlY3RzSW5EZXYiLCJpbnZva2VFZmZlY3RGbiIsInN1YnRyZWVSb290IiwicHJpbWFyeVN1YnRyZWVGbGFnIiwiZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCIsImR1bW15RmliZXIiLCJvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSIsImFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWIiwib3JpZ2luYWxFcnJvciIsInJlcGxheUVycm9yIiwiZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIiLCJkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQiLCJyZW5kZXJpbmdDb21wb25lbnROYW1lIiwiZGVkdXBlS2V5Iiwic2V0U3RhdGVDb21wb25lbnROYW1lIiwic2NoZWR1bGluZ0ZpYmVyIiwiZmFrZUFjdENhbGxiYWNrTm9kZSIsImFjdFF1ZXVlIiwiaXNSdW5uaW5nIiwicmVzb2x2ZUZhbWlseSIsImZhaWxlZEJvdW5kYXJpZXMiLCJzZXRSZWZyZXNoSGFuZGxlciIsImZhbWlseSIsImN1cnJlbnRSZW5kZXIiLCJzeW50aGV0aWNUeXBlIiwicHJldlR5cGUiLCJuZXh0VHlwZSIsIm5lZWRzQ29tcGFyZUZhbWlsaWVzIiwiJCR0eXBlb2ZOZXh0VHlwZSIsInByZXZGYW1pbHkiLCJzY2hlZHVsZVJlZnJlc2giLCJzdGFsZUZhbWlsaWVzIiwidXBkYXRlZEZhbWlsaWVzIiwic2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseSIsInNjaGVkdWxlUm9vdCIsInVwZGF0ZUNvbnRhaW5lciIsImNhbmRpZGF0ZVR5cGUiLCJuZWVkc1JlbmRlciIsIm5lZWRzUmVtb3VudCIsImZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCIsImZhbWlsaWVzIiwiaG9zdEluc3RhbmNlcyIsInR5cGVzIiwiZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5IiwiZGlkTWF0Y2giLCJmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5IiwiZm91bmRIb3N0SW5zdGFuY2VzIiwiZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5IiwiaGFzQmFkTWFwUG9seWZpbGwiLCJub25FeHRlbnNpYmxlT2JqZWN0IiwicHJldmVudEV4dGVuc2lvbnMiLCJGaWJlck5vZGUiLCJOYU4iLCJjcmVhdGVGaWJlciIsImN1cnJlbnREZXBlbmRlbmNpZXMiLCJjcmVhdGVIb3N0Um9vdEZpYmVyIiwiaXNTdHJpY3RNb2RlIiwiY29uY3VycmVudFVwZGF0ZXNCeURlZmF1bHRPdmVycmlkZSIsImZpYmVyVGFnIiwiZ2V0VGFnIiwiY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIiLCJjcmVhdGVGaWJlckZyb21TdXNwZW5zZSIsImNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdCIsImVsZW1lbnRzIiwicHJpbWFyeUNoaWxkSW5zdGFuY2UiLCJfcGVuZGluZ01hcmtlcnMiLCJfdHJhbnNpdGlvbnMiLCJkZXRhY2giLCJhdHRhY2giLCJjb250ZW50IiwiRmliZXJSb290Tm9kZSIsImh5ZHJhdGUiLCJmb3JtU3RhdGUiLCJpbmNvbXBsZXRlVHJhbnNpdGlvbnMiLCJfZGVidWdSb290VHlwZSIsImNyZWF0ZUZpYmVyUm9vdCIsImluaXRpYWxDaGlsZHJlbiIsImh5ZHJhdGlvbkNhbGxiYWNrcyIsInRyYW5zaXRpb25DYWxsYmFja3MiLCJ1bmluaXRpYWxpemVkRmliZXIiLCJfaW5pdGlhbFN0YXRlIiwiY3JlYXRlUG9ydGFsJDEiLCJkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzIiwiZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGUiLCJnZXRDb250ZXh0Rm9yU3VidHJlZSIsInBhcmVudENvbXBvbmVudCIsImZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyIsImNyZWF0ZUNvbnRhaW5lciIsImN1cnJlbnQkMSIsImdldFB1YmxpY1Jvb3RJbnN0YW5jZSIsImNvbnRhaW5lckZpYmVyIiwic2hvdWxkRXJyb3JJbXBsIiwic2hvdWxkU3VzcGVuZEltcGwiLCJvdmVycmlkZUhvb2tTdGF0ZSIsIm92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCIsIm92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCIsIm92ZXJyaWRlUHJvcHMiLCJvdmVycmlkZVByb3BzRGVsZXRlUGF0aCIsIm92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoIiwic2NoZWR1bGVVcGRhdGUiLCJzZXRFcnJvckhhbmRsZXIiLCJzZXRTdXNwZW5zZUhhbmRsZXIiLCJjb3B5V2l0aERlbGV0ZUltcGwiLCJ1cGRhdGVkIiwic3BsaWNlIiwiY29weVdpdGhEZWxldGUiLCJjb3B5V2l0aFJlbmFtZUltcGwiLCJvbGRQYXRoIiwibmV3UGF0aCIsIm9sZEtleSIsImNvcHlXaXRoUmVuYW1lIiwiY29weVdpdGhTZXRJbXBsIiwiY29weVdpdGhTZXQiLCJmaW5kSG9vayIsIm5ld1Nob3VsZEVycm9ySW1wbCIsIm5ld1Nob3VsZFN1c3BlbmRJbXBsIiwiZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIiLCJlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIiwiZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMiLCJpbmplY3RJbnRvRGV2VG9vbHMiLCJkZXZUb29sc0NvbmZpZyIsImZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIiwiYnVuZGxlVHlwZSIsInJlbmRlcmVyUGFja2FnZU5hbWUiLCJyZW5kZXJlckNvbmZpZyIsImN1cnJlbnREaXNwYXRjaGVyUmVmIiwicmVjb25jaWxlclZlcnNpb24iLCJpbnN0YW5jZUNhY2hlIiwiZ2V0SW5zdGFuY2VGcm9tVGFnIiwiaG9zdEluc3RhbmNlIiwiZ2V0TmF0aXZlVGFnRnJvbVB1YmxpY0luc3RhbmNlIiwiZ2V0Tm9kZUZyb21QdWJsaWNJbnN0YW5jZSIsImRpc3BhdGNoVmlld01hbmFnZXJDb21tYW5kIiwiZ2V0Tm9kZUZyb21JbnRlcm5hbEluc3RhbmNlSGFuZGxlIiwiX2ludGVybmFsRmliZXJJbnN0YW5jZUhhbmRsZURFViIsInBhcmVudEludGVybmFsSW5zdGFuY2VIYW5kbGUiLCJnZXRJbnRlcm5hbEluc3RhbmNlSGFuZGxlRnJvbVB1YmxpY0luc3RhbmNlIiwiY2hpbGRJbnRlcm5hbEluc3RhbmNlSGFuZGxlIiwiY3JlYXRlSGllcmFyY2h5IiwiZmliZXJIaWVyYXJjaHkiLCJnZXRJbnNwZWN0b3JEYXRhIiwiZ2V0SG9zdFByb3BzIiwibWVhc3VyZSIsImdldEhvc3ROb2RlIiwiaG9zdE5vZGUiLCJob3N0IiwiZ2V0SW5zcGVjdG9yRGF0YUZvckluc3RhbmNlIiwiY2xvc2VzdEluc3RhbmNlIiwiaGllcmFyY2h5Iiwic2VsZWN0ZWRJbmRleCIsImdldE93bmVySGllcmFyY2h5IiwibGFzdE5vbkhvc3RJbnN0YW5jZSIsInRyYXZlcnNlT3duZXJUcmVlVXAiLCJnZXRJbnNwZWN0b3JEYXRhRm9yVmlld1RhZyIsInZpZXdUYWciLCJnZXRJbnNwZWN0b3JEYXRhRm9yVmlld0F0UG9pbnQiLCJpbnNwZWN0ZWRWaWV3IiwibG9jYXRpb25YIiwibG9jYXRpb25ZIiwiZmFicmljTm9kZSIsImZpbmROb2RlQXRQb2ludCIsInBvaW50ZXJZIiwibGVmdCIsInRvcCIsIndpZHRoIiwiaGVpZ2h0IiwibmF0aXZlVmlld1RhZyIsImluc3BlY3RvckRhdGEiLCJ0b3VjaGVkVmlld1RhZyIsImZpbmRTdWJ2aWV3SW4iLCJjb250YWluZXJUYWciLCJjb25jdXJyZW50Um9vdCIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJjcmVhdGVQb3J0YWwiLCJpbnN0YWxsIiwibWFya1BvaW50IiwiY3VycmVudFRpbWVzdGFtcCIsIl9ET01SZWN0IiwiX0RPTVJlY3RSZWFkT25seSIsIkRPTVJlY3QiLCJET01SZWN0UmVhZE9ubHkiLCJfRE9NUmVjdFJlYWRPbmx5MiIsIl9fZ2V0SW50ZXJuYWxYIiwiX19zZXRJbnRlcm5hbFgiLCJfX2dldEludGVybmFsWSIsIl9fc2V0SW50ZXJuYWxZIiwiX19nZXRJbnRlcm5hbFdpZHRoIiwiX19zZXRJbnRlcm5hbFdpZHRoIiwiX19nZXRJbnRlcm5hbEhlaWdodCIsIl9fc2V0SW50ZXJuYWxIZWlnaHQiLCJmcm9tUmVjdCIsInJlY3QiLCJjYXN0VG9OdW1iZXIiLCJfeSIsIl93aWR0aCIsIl9oZWlnaHQiLCJ0b0pTT04iLCJib3R0b20iLCJyaWdodCIsIl9OYXRpdmVQZXJmb3JtYW5jZSIsIl9QZXJmb3JtYW5jZSIsIk5hdGl2ZVBlcmZvcm1hbmNlIiwicGVyZm9ybWFuY2UiLCJQZXJmb3JtYW5jZSIsInBlcmZvcm1hbmNlTm93IiwibmF0aXZlUGVyZm9ybWFuY2VOb3ciLCJfd2Fybk9uY2UiLCJfRXZlbnRDb3VudHMiLCJfTWVtb3J5SW5mbyIsIl9OYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyIiwiX1JlYWN0TmF0aXZlU3RhcnR1cFRpbWluZyIsImdldEN1cnJlbnRUaW1lU3RhbXAiLCJOYXRpdmVQZXJmb3JtYW5jZU9ic2VydmVyIiwic2V0SXNCdWZmZXJlZCIsIkFMV0FZU19MT0dHRURfRU5UUllfVFlQRVMiLCJwZXJmb3JtYW5jZUVudHJ5VHlwZVRvUmF3IiwiUGVyZm9ybWFuY2VNYXJrIiwiX1BlcmZvcm1hbmNlRW50cnkiLCJtYXJrTmFtZSIsIm1hcmtPcHRpb25zIiwiX21hcmtPcHRpb25zJHN0YXJ0VGltIiwiZW50cnlUeXBlIiwic3RhcnRUaW1lIiwiZHVyYXRpb24iLCJkZXRhaWwiLCJQZXJmb3JtYW5jZUVudHJ5IiwiUGVyZm9ybWFuY2VNZWFzdXJlIiwiX1BlcmZvcm1hbmNlRW50cnkyIiwiX3N1cGVyMiIsIm1lYXN1cmVOYW1lIiwibWVhc3VyZU9wdGlvbnMiLCJfbWVhc3VyZU9wdGlvbnMkZHVyYXQiLCJ3YXJuTm9OYXRpdmVQZXJmb3JtYW5jZSIsImV2ZW50Q291bnRzIiwiRXZlbnRDb3VudHMiLCJnZXRTaW1wbGVNZW1vcnlJbmZvIiwibWVtb3J5SW5mbyIsInRvdGFsSlNIZWFwU2l6ZSIsImhlcm1lc19oZWFwU2l6ZSIsInVzZWRKU0hlYXBTaXplIiwiaGVybWVzX2FsbG9jYXRlZEJ5dGVzIiwiTWVtb3J5SW5mbyIsImpzSGVhcFNpemVMaW1pdCIsImdldFJlYWN0TmF0aXZlU3RhcnR1cFRpbWluZyIsIl9OYXRpdmVQZXJmb3JtYW5jZSRnZSIsImVuZFRpbWUiLCJpbml0aWFsaXplUnVudGltZVN0YXJ0IiwiaW5pdGlhbGl6ZVJ1bnRpbWVFbmQiLCJleGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydCIsImV4ZWN1dGVKYXZhU2NyaXB0QnVuZGxlRW50cnlQb2ludEVuZCIsIlJlYWN0TmF0aXZlU3RhcnR1cFRpbWluZyIsIm1hcmsiLCJjbGVhck1hcmtzIiwiY2xlYXJFbnRyaWVzIiwid2Fybk5vTmF0aXZlUGVyZm9ybWFuY2VPYnNlcnZlciIsIlJhd1BlcmZvcm1hbmNlRW50cnlUeXBlVmFsdWVzIiwiTUFSSyIsInN0YXJ0TWFya09yT3B0aW9ucyIsImVuZE1hcmsiLCJzdGFydE1hcmtOYW1lIiwiZW5kTWFya05hbWUiLCJfb3B0aW9ucyRkdXJhdGlvbiIsImVuZCIsImNsZWFyTWVhc3VyZXMiLCJNRUFTVVJFIiwiZ2V0RW50cmllcyIsInJhd1RvUGVyZm9ybWFuY2VFbnRyeSIsImdldEVudHJpZXNCeVR5cGUiLCJnZXRFbnRyaWVzQnlOYW1lIiwiZW50cnlOYW1lIiwiY2FjaGVkRXZlbnRDb3VudHMiLCJnZXRDYWNoZWRFdmVudENvdW50cyIsIl9jYWNoZWRFdmVudENvdW50cyIsImdldEV2ZW50Q291bnRzIiwicXVldWVNaWNyb3Rhc2siLCJfUGVyZm9ybWFuY2VFdmVudFRpbWluZyIsIlBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3QiLCJfZW50cmllcyIsImVudHJ5Iiwib2JzZXJ2ZXJDb3VudFBlckVudHJ5VHlwZSIsInJlZ2lzdGVyZWRPYnNlcnZlcnMiLCJpc09uUGVyZm9ybWFuY2VFbnRyeUNhbGxiYWNrU2V0Iiwib25QZXJmb3JtYW5jZUVudHJ5IiwiX2VudHJ5UmVzdWx0JGVudHJpZXMiLCJlbnRyeVJlc3VsdCIsInBvcFBlbmRpbmdFbnRyaWVzIiwicmF3RW50cmllcyIsImRyb3BwZWRFbnRyaWVzQ291bnQiLCJfbG9vcCIsIm9ic2VydmVyQ29uZmlnIiwib2JzZXJ2ZXIiLCJlbnRyaWVzRm9yT2JzZXJ2ZXIiLCJlbnRyeVR5cGVzIiwiZHVyYXRpb25UaHJlc2hvbGQiLCJfc2xpY2VkVG9BcnJheTIiLCJhcHBseUR1cmF0aW9uVGhyZXNob2xkcyIsImR1cmF0aW9uVGhyZXNob2xkcyIsImFjY3VtdWxhdG9yIiwidW5pb24iLCJfcmVmMyIsIl9yZWY0Iiwic2V0RHVyYXRpb25UaHJlc2hvbGQiLCJnZXRTdXBwb3J0ZWRQZXJmb3JtYW5jZUVudHJ5VHlwZXMiLCJyYXdUb1BlcmZvcm1hbmNlRW50cnlUeXBlIiwiUGVyZm9ybWFuY2VPYnNlcnZlciIsIl9jYWxsYmFjayIsIm9ic2VydmUiLCJfcmVnaXN0ZXJlZE9ic2VydmVycyQiLCJfdmFsaWRhdGVPYnNlcnZlT3B0aW9ucyIsInJlcXVlc3RlZEVudHJ5VHlwZXMiLCJjdXJyZW50RW50cnlUeXBlcyIsIm5leHRFbnRyeVR5cGVzIiwic2V0T25QZXJmb3JtYW5jZUVudHJ5Q2FsbGJhY2siLCJuZXdFbnRyeVR5cGVzIiwiZGlmZmVyZW5jZSIsIl9vYnNlcnZlckNvdW50UGVyRW50ciIsInJhd1R5cGUiLCJzdGFydFJlcG9ydGluZyIsImRpc2Nvbm5lY3QiLCJfb2JzZXJ2ZXJDb3VudFBlckVudHIyIiwibnVtYmVyT2ZPYnNlcnZlcnNGb3JUaGlzVHlwZSIsInN0b3BSZXBvcnRpbmciLCJzdXBwb3J0ZWRFbnRyeVR5cGVzIiwiX3JlZjUiLCJfcmVmNiIsIl9iJGdldCIsIm1pbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJQZXJmb3JtYW5jZUV2ZW50VGltaW5nIiwiX2luaXQkc3RhcnRUaW1lIiwiX2luaXQkZHVyYXRpb24iLCJfaW5pdCRwcm9jZXNzaW5nU3RhcnQiLCJfaW5pdCRwcm9jZXNzaW5nRW5kIiwiX2luaXQkaW50ZXJhY3Rpb25JZCIsInByb2Nlc3NpbmdTdGFydCIsInByb2Nlc3NpbmdFbmQiLCJpbnRlcmFjdGlvbklkIiwiVU5ERUZJTkVEIiwiRVZFTlQiLCJfanNIZWFwU2l6ZUxpbWl0IiwiX3RvdGFsSlNIZWFwU2l6ZSIsIl91c2VkSlNIZWFwU2l6ZSIsInN0YXJ0VXBUaW1pbmciLCJfc3RhcnRUaW1lIiwiX2VuZFRpbWUiLCJfaW5pdGlhbGl6ZVJ1bnRpbWVTdGFydCIsIl9pbml0aWFsaXplUnVudGltZUVuZCIsIl9leGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRTdGFydCIsIl9leGVjdXRlSmF2YVNjcmlwdEJ1bmRsZUVudHJ5UG9pbnRFbmQiLCJpbnN0YWxsQ29uc29sZUVycm9yUmVwb3J0ZXIiLCJfX2ZiRGlzYWJsZUV4Y2VwdGlvbnNNYW5hZ2VyIiwiaGFuZGxlRXJyb3IiLCJoYW5kbGVFeGNlcHRpb24iLCJlZSIsIl93cmFwTmF0aXZlU3VwZXIiLCJTeW50aGV0aWNFcnJvciIsIl9FcnJvciIsInVzZXJFeGNlcHRpb25EZWNvcmF0b3IiLCJpblVzZXJFeGNlcHRpb25EZWNvcmF0b3IiLCJkZWNvcmF0ZWRFeHRyYURhdGFLZXkiLCJ1bnN0YWJsZV9zZXRFeGNlcHRpb25EZWNvcmF0b3IiLCJleGNlcHRpb25EZWNvcmF0b3IiLCJwcmVwcm9jZXNzRXhjZXB0aW9uIiwiX3VudXNlZCIsImV4Y2VwdGlvbklEIiwicmVwb3J0RXhjZXB0aW9uIiwicmVwb3J0VG9Db25zb2xlIiwicGFyc2VFcnJvclN0YWNrIiwiY3VycmVudEV4Y2VwdGlvbklEIiwib3JpZ2luYWxNZXNzYWdlIiwibmFtZVByZWZpeCIsImpzRW5naW5lIiwiZXh0cmFEYXRhIiwicmF3U3RhY2siLCJjYXVzZSIsInN0YWNrU3ltYm9scyIsInN0YWNrUmV0dXJuQWRkcmVzc2VzIiwic3RhY2tFbGVtZW50cyIsImFkZEV4Y2VwdGlvbiIsImlzQ29tcG9uZW50RXJyb3IiLCJOYXRpdmVFeGNlcHRpb25zTWFuYWdlciIsImluRXhjZXB0aW9uSGFuZGxlciIsInJlYWN0Q29uc29sZUVycm9ySGFuZGxlciIsIl9jb25zb2xlIiwiX2Vycm9yT3JpZ2luYWwiLCJyZXBvcnRFcnJvcnNBc0V4Y2VwdGlvbnMiLCJfY2FjaGUiLCJXcmFwcGVyIiwiX2lzTmF0aXZlRnVuY3Rpb24iLCJfY29uc3RydWN0IiwiUGFyZW50IiwiY29udmVydEhlcm1lc1N0YWNrIiwiZnJhbWVzIiwiZmlsZSIsInNvdXJjZVVybCIsImxpbmUxQmFzZWQiLCJjb2x1bW4iLCJjb2x1bW4xQmFzZWQiLCJ2aXJ0dWFsT2Zmc2V0MEJhc2VkIiwiZXJyb3JTdGFjayIsInN0YWNrdHJhY2VQYXJzZXIiLCJwYXJzZWRTdGFjayIsIkhlcm1lc0ludGVybmFsIiwicGFyc2UiLCJVTktOT1dOX0ZVTkNUSU9OIiwic3RhY2tTdHJpbmciLCJsaW5lcyIsInBhcnNlUmVzdWx0IiwicGFyc2VDaHJvbWUiLCJwYXJzZVdpbmpzIiwicGFyc2VHZWNrbyIsInBhcnNlTm9kZSIsInBhcnNlSlNDIiwiY2hyb21lUmUiLCJjaHJvbWVFdmFsUmUiLCJwYXJ0cyIsImV4ZWMiLCJpc05hdGl2ZSIsImlzRXZhbCIsInN1Ym1hdGNoIiwid2luanNSZSIsImdlY2tvUmUiLCJnZWNrb0V2YWxSZSIsImphdmFTY3JpcHRDb3JlUmUiLCJub2RlUmUiLCJSRV9GUkFNRSIsIlJFX1NLSVBQRUQiLCJpc0ludGVybmFsQnl0ZWNvZGVTb3VyY2VVcmwiLCJwYXJzZUxpbmUiLCJhc0ZyYW1lIiwicGFyc2VJbnQiLCJhc1NraXBwZWQiLCJwYXJzZUhlcm1lc1N0YWNrIiwibGFzdE1lc3NhZ2VMaW5lIiwiX1JDVExvZyIsIkxvZ0JveERhdGEiLCJwYXJzZUxvZ0JveExvZyIsInBhcnNlSW50ZXJwb2xhdGlvbiIsIm9yaWdpbmFsQ29uc29sZUVycm9yIiwib3JpZ2luYWxDb25zb2xlV2FybiIsImNvbnNvbGVFcnJvckltcGwiLCJjb25zb2xlV2FybkltcGwiLCJpc0xvZ0JveEluc3RhbGxlZCIsImlzRmlyc3RJbnN0YWxsIiwicmVnaXN0ZXJFcnJvciIsInJlZ2lzdGVyV2FybmluZyIsInNldERpc2FibGVkIiwiUkNUTG9nIiwic2V0V2FybmluZ0hhbmRsZXIiLCJ1bmluc3RhbGwiLCJpc0luc3RhbGxlZCIsImlnbm9yZUxvZ3MiLCJwYXR0ZXJucyIsImFkZElnbm9yZVBhdHRlcm5zIiwiaWdub3JlQWxsTG9ncyIsImNsZWFyQWxsTG9ncyIsImFkZExvZyIsImlzUkNUTG9nQWR2aWNlV2FybmluZyIsImlzV2FybmluZ01vZHVsZVdhcm5pbmciLCJfbGVuMyIsIl9rZXkzIiwiaXNMb2dCb3hFcnJvck1lc3NhZ2UiLCJfcGFyc2VMb2dCb3hMb2ciLCJjYXRlZ29yeSIsImlzTWVzc2FnZUlnbm9yZWQiLCJyZXBvcnRMb2dCb3hFcnJvciIsIl9sZW40IiwiX2tleTQiLCJmaWx0ZXJSZXN1bHQiLCJjaGVja1dhcm5pbmdGaWx0ZXIiLCJzdXBwcmVzc0NvbXBsZXRlbHkiLCJzdXBwcmVzc0RpYWxvZ19MRUdBQ1kiLCJmb3JjZURpYWxvZ0ltbWVkaWF0ZWx5IiwiZmluYWxGb3JtYXQiLCJfcGFyc2VMb2dCb3hMb2cyIiwiaW50ZXJwb2xhdGVkIiwibGV2ZWxzTWFwIiwiZmF0YWwiLCJ3YXJuaW5nSGFuZGxlciIsImxvZ0lmTm9OYXRpdmVIb29rIiwibG9nVG9Db25zb2xlIiwibG9nRm4iLCJfcGFyc2VFcnJvclN0YWNrIiwiX05hdGl2ZUxvZ0JveCIsIl9Mb2dCb3hMb2ciLCJvYnNlcnZlcnMiLCJpZ25vcmVQYXR0ZXJucyIsImFwcEluZm8iLCJsb2dzIiwidXBkYXRlVGltZW91dCIsIl9pc0Rpc2FibGVkIiwiX3NlbGVjdGVkSW5kZXgiLCJ3YXJuaW5nRmlsdGVyIiwibW9uaXRvckV2ZW50IiwibW9uaXRvckxpc3RWZXJzaW9uIiwibW9uaXRvclNhbXBsZVJhdGUiLCJMT0dCT1hfRVJST1JfTUVTU0FHRSIsImdldE5leHRTdGF0ZSIsInNlbGVjdGVkTG9nSW5kZXgiLCJFeGNlcHRpb25zTWFuYWdlciIsInBhdHRlcm4iLCJoYW5kbGVVcGRhdGUiLCJhcHBlbmROZXdMb2ciLCJuZXdMb2ciLCJsYXN0TG9nIiwiaW5jcmVtZW50Q291bnQiLCJPUFRJTUlTVElDX1dBSVRfVElNRSIsImFkZFBlbmRpbmdMb2ciLCJzZXRTZWxlY3RlZExvZyIsIm9wdGltaXN0aWNUaW1lb3V0Iiwic3ltYm9saWNhdGUiLCJlcnJvckZvclN0YWNrVHJhY2UiLCJfbG9nJHN0YWNrIiwiTG9nQm94TG9nIiwicGFyc2VMb2dCb3hFeGNlcHRpb24iLCJsb2dnaW5nRXJyb3IiLCJzeW1ib2xpY2F0ZUxvZ05vdyIsInJldHJ5U3ltYm9saWNhdGVMb2dOb3ciLCJyZXRyeVN5bWJvbGljYXRlIiwic3ltYm9saWNhdGVMb2dMYXp5IiwicHJvcG9zZWROZXdJbmRleCIsImxvZ0FycmF5IiwiTmF0aXZlTG9nQm94Iiwic2hvdyIsImhpZGUiLCJjbGVhcldhcm5pbmdzIiwibmV3TG9ncyIsImNsZWFyRXJyb3JzIiwiZGlzbWlzcyIsInNldFdhcm5pbmdGaWx0ZXIiLCJzZXRBcHBJbmZvIiwiZ2V0QXBwSW5mbyIsImdldElnbm9yZVBhdHRlcm5zIiwiZXhpc3RpbmdTaXplIiwiZXhpc3RpbmdQYXR0ZXJuIiwic3Vic2NyaXB0aW9uIiwidW5zdWJzY3JpYmUiLCJ3aXRoU3Vic2NyaXB0aW9uIiwiV3JhcHBlZENvbXBvbmVudCIsIkxvZ0JveFN0YXRlU3Vic2NyaXB0aW9uIiwiX2hhbmRsZURpc21pc3MiLCJfdGhpcyRzdGF0ZSIsInN0YXRlTG9ncyIsImxvZ3NBcnJheSIsIl9oYW5kbGVNaW5pbWl6ZSIsIl9oYW5kbGVTZXRTZWxlY3RlZExvZyIsIl9zdWJzY3JpcHRpb24iLCJMb2dCb3hTeW1ib2xpY2F0aW9uIiwic3ltYm9saWNhdGVkIiwiY29kZUZyYW1lIiwiZ2V0QXZhaWxhYmxlU3RhY2siLCJkZWxldGVTdGFjayIsImhhbmRsZVN5bWJvbGljYXRlIiwidXBkYXRlU3RhdHVzIiwibGFzdFN0YXR1cyIsIl9zeW1ib2xpY2F0ZVN0YWNrVHJhY2UiLCJzYW5pdGl6ZSIsIm1heWJlU3RhY2siLCJtYXliZUZyYW1lIiwiY29sbGFwc2UiLCJwcm9taXNlIiwic3ltYm9saWNhdGVTdGFja1RyYWNlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfeDIiLCJfZ2xvYmFsJGZldGNoIiwiZGV2U2VydmVyIiwiYnVuZGxlTG9hZGVkRnJvbVNlcnZlciIsImZldGNoIiwicmVzcG9uc2UiLCJ1cmwiLCJib2R5IiwianNvbiIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsIl9uZXh0IiwiX3Rocm93IiwiX05hdGl2ZVNvdXJjZUNvZGUiLCJfY2FjaGVkRGV2U2VydmVyVVJMIiwiX2NhY2hlZEZ1bGxCdW5kbGVVUkwiLCJGQUxMQkFDSyIsImdldERldlNlcnZlciIsIl9jYWNoZWREZXZTZXJ2ZXJVUkwyIiwic2NyaXB0VXJsIiwiTmF0aXZlU291cmNlQ29kZSIsInNjcmlwdFVSTCIsImZ1bGxCdW5kbGVVcmwiLCJOYXRpdmVNb2R1bGUiLCJIZWFkZXJzIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiYW1kIiwiV0hBVFdHRmV0Y2giLCJzdXBwb3J0Iiwic2VhcmNoUGFyYW1zIiwiaXRlcmFibGUiLCJibG9iIiwiQmxvYiIsImZvcm1EYXRhIiwiYXJyYXlCdWZmZXIiLCJpc0RhdGFWaWV3IiwiRGF0YVZpZXciLCJpc1Byb3RvdHlwZU9mIiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3Iiwibm9ybWFsaXplTmFtZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsImhlYWRlcnMiLCJhcHBlbmQiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwidGhpc0FyZyIsImNvbnN1bWVkIiwiYm9keVVzZWQiLCJmaWxlUmVhZGVyUmVhZHkiLCJyZWFkZXIiLCJvbmxvYWQiLCJvbmVycm9yIiwicmVhZEJsb2JBc0FycmF5QnVmZmVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwicmVhZEJsb2JBc1RleHQiLCJyZWFkQXNUZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiYnVmIiwidmlldyIsIlVpbnQ4QXJyYXkiLCJjaGFycyIsImZyb21DaGFyQ29kZSIsImJ1ZmZlckNsb25lIiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIkJvZHkiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJfYm9keUFycmF5QnVmZmVyIiwiZGVjb2RlIiwibm9ybWFsaXplTWV0aG9kIiwidXBjYXNlZCIsInRvVXBwZXJDYXNlIiwiY3JlZGVudGlhbHMiLCJzaWduYWwiLCJyZWZlcnJlciIsImZvcm0iLCJieXRlcyIsImRlY29kZVVSSUNvbXBvbmVudCIsInBhcnNlSGVhZGVycyIsInJhd0hlYWRlcnMiLCJwcmVQcm9jZXNzZWRIZWFkZXJzIiwiYm9keUluaXQiLCJvayIsInN0YXR1c1RleHQiLCJyZWRpcmVjdFN0YXR1c2VzIiwicmVkaXJlY3QiLCJSYW5nZUVycm9yIiwiRE9NRXhjZXB0aW9uIiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9udGltZW91dCIsIm9uYWJvcnQiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJzZW5kIiwicG9seWZpbGwiLCJfVVRGU2VxdWVuY2UiLCJfc3RyaW5naWZ5U2FmZSIsIl9hbnNpUmVnZXgiLCJBTlNJX1JFR0VYIiwiYW5zaVJlZ2V4IiwiQkFCRUxfVFJBTlNGT1JNX0VSUk9SX0ZPUk1BVCIsIkJBQkVMX0NPREVfRlJBTUVfTUFSS0VSX1BBVFRFUk4iLCJCQUJFTF9DT0RFX0ZSQU1FX0VSUk9SX0ZPUk1BVCIsIk1FVFJPX0VSUk9SX0ZPUk1BVCIsIlNVQlNUSVRVVElPTiIsIkJPTSIsImNhdGVnb3J5UGFydHMiLCJjb250ZW50UGFydHMiLCJzdWJzdGl0dXRpb25PZmZzZXRzIiwicmVtYWluaW5nIiwiZm9ybWF0U3RyaW5nIiwiZm9ybWF0U3RyaW5nUGFydHMiLCJzdWJzdGl0dXRpb25Db3VudCIsInN1YnN0aXR1dGlvbnMiLCJjYXRlZ29yeVN0cmluZyIsImNvbnRlbnRTdHJpbmciLCJzdWJzdGl0dXRpb25JbmRleCIsImZvcm1hdFN0cmluZ1BhcnQiLCJzdWJzdGl0dXRpb24iLCJvZmZzZXQiLCJyZW1haW5pbmdBcmdzIiwiaXNDb21wb25lbnRTdGFjayIsImNvbnNvbGVBcmd1bWVudCIsImlzT2xkQ29tcG9uZW50U3RhY2tGb3JtYXQiLCJpc05ld0NvbXBvbmVudFN0YWNrRm9ybWF0IiwiaXNOZXdKU0NDb21wb25lbnRTdGFja0Zvcm1hdCIsInBhcnNlQ29tcG9uZW50U3RhY2siLCJfbWF0Y2gkc2xpY2UiLCJfbWF0Y2gkc2xpY2UyIiwibWV0cm9JbnRlcm5hbEVycm9yIiwiX21ldHJvSW50ZXJuYWxFcnJvciRzIiwiX21ldHJvSW50ZXJuYWxFcnJvciRzMiIsImJhYmVsVHJhbnNmb3JtRXJyb3IiLCJfYmFiZWxUcmFuc2Zvcm1FcnJvciQiLCJfYmFiZWxUcmFuc2Zvcm1FcnJvciQyIiwiYmFiZWxDb2RlRnJhbWVFcnJvciIsIl9iYWJlbENvZGVGcmFtZUVycm9yJCIsIl9iYWJlbENvZGVGcmFtZUVycm9yJDIiLCJhcmdzV2l0aG91dENvbXBvbmVudFN0YWNrIiwibWVzc2FnZUVuZEluZGV4Iiwic2VhcmNoIiwiQlVMTEVUIiwiQlVMTEVUX1NQIiwiTUlERE9UIiwiTUlERE9UX1NQIiwiTUlERE9UX0tBVEFLQU5BIiwiTURBU0giLCJNREFTSF9TUCIsIk5EQVNIIiwiTkRBU0hfU1AiLCJORVdMSU5FIiwiTkJTUCIsIlBJWlpBIiwiVFJJQU5HTEVfTEVGVCIsIlRSSUFOR0xFX1JJR0hUIiwiX3JlZiRvbmx5Rmlyc3QiLCJvbmx5Rmlyc3QiLCJfTmF0aXZlRXhjZXB0aW9uc01hbmFnZXIiLCJyZXBvcnRGYXRhbEV4Y2VwdGlvbiIsImV4Y2VwdGlvbklkIiwicmVwb3J0U29mdEV4Y2VwdGlvbiIsInVwZGF0ZUV4Y2VwdGlvbk1lc3NhZ2UiLCJkaXNtaXNzUmVkYm94IiwiX2dsb2JhbCIsIl9nbG9iYWwkSGVybWVzSW50ZXJuYSIsImhhc1Byb21pc2UiLCJIZXJtZXNQcm9taXNlIiwiX2dsb2JhbCRIZXJtZXNJbnRlcm5hMiIsImVuYWJsZVByb21pc2VSZWplY3Rpb25UcmFja2VyIiwicG9seWZpbGxHbG9iYWwiLCJfTG9nQm94IiwicmVqZWN0aW9uVHJhY2tpbmdPcHRpb25zIiwiYWxsUmVqZWN0aW9ucyIsIm9uVW5oYW5kbGVkIiwiX21lc3NhZ2UiLCJyZWplY3Rpb24iLCJzdHJpbmdWYWx1ZSIsIndhcm5pbmciLCJvbkhhbmRsZWQiLCJfYW5zaVN0eWxlcyIsIl9Bc3ltbWV0cmljTWF0Y2hlciIsIl9Db252ZXJ0QW5zaSIsIl9ET01Db2xsZWN0aW9uIiwiX0RPTUVsZW1lbnQiLCJfSW1tdXRhYmxlIiwiX1JlYWN0RWxlbWVudCIsIl9SZWFjdFRlc3RDb21wb25lbnQiLCJ0b0lTT1N0cmluZyIsImVycm9yVG9TdHJpbmciLCJyZWdFeHBUb1N0cmluZyIsImdldENvbnN0cnVjdG9yTmFtZSIsImlzV2luZG93IiwiU1lNQk9MX1JFR0VYUCIsIk5FV0xJTkVfUkVHRVhQIiwiUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IiLCJpc1RvU3RyaW5nZWRBcnJheVR5cGUiLCJ0b1N0cmluZ2VkIiwicHJpbnROdW1iZXIiLCJwcmludEJpZ0ludCIsInByaW50RnVuY3Rpb24iLCJwcmludEZ1bmN0aW9uTmFtZSIsInByaW50U3ltYm9sIiwicHJpbnRFcnJvciIsInByaW50QmFzaWNWYWx1ZSIsImVzY2FwZVN0cmluZyIsInR5cGVPZiIsImlzTmFOIiwicHJpbnRDb21wbGV4VmFsdWUiLCJpbmRlbnRhdGlvbiIsImhhc0NhbGxlZFRvSlNPTiIsImhpdE1heERlcHRoIiwiY2FsbFRvSlNPTiIsInByaW50ZXIiLCJwcmludExpc3RJdGVtcyIsInByaW50SXRlcmF0b3JFbnRyaWVzIiwicHJpbnRJdGVyYXRvclZhbHVlcyIsInByaW50T2JqZWN0UHJvcGVydGllcyIsImlzTmV3UGx1Z2luIiwicGx1Z2luIiwic2VyaWFsaXplIiwicHJpbnRQbHVnaW4iLCJ2YWxDaGlsZCIsImluZGVudGF0aW9uTmV4dCIsImluZGVudCIsImVkZ2VTcGFjaW5nIiwic3BhY2luZ091dGVyIiwic3BhY2luZyIsInNwYWNpbmdJbm5lciIsImNvbG9ycyIsImZpbmRQbHVnaW4iLCJiYXNpY1Jlc3VsdCIsIkRFRkFVTFRfVEhFTUUiLCJjb21tZW50IiwiREVGQVVMVF9USEVNRV9LRVlTIiwiREVGQVVMVF9PUFRJT05TIiwiaGlnaGxpZ2h0IiwidmFsaWRhdGVPcHRpb25zIiwiZ2V0Q29sb3JzSGlnaGxpZ2h0IiwiY2xvc2UiLCJnZXRDb2xvcnNFbXB0eSIsImdldFByaW50RnVuY3Rpb25OYW1lIiwiZ2V0RXNjYXBlUmVnZXgiLCJnZXRFc2NhcGVTdHJpbmciLCJnZXRDb25maWciLCJjcmVhdGVJbmRlbnQiLCJwcmV0dHlGb3JtYXQiLCJBc3ltbWV0cmljTWF0Y2hlciIsIkNvbnZlcnRBbnNpIiwiRE9NQ29sbGVjdGlvbiIsIkRPTUVsZW1lbnQiLCJJbW11dGFibGUiLCJSZWFjdFRlc3RDb21wb25lbnQiLCJ3cmFwQW5zaTE2IiwiY29kZSIsIndyYXBBbnNpMjU2Iiwid3JhcEFuc2kxNm0iLCJyZ2IiLCJhbnNpMmFuc2kiLCJyZ2IycmdiIiwic2V0TGF6eVByb3BlcnR5IiwiY29sb3JDb252ZXJ0IiwibWFrZUR5bmFtaWNTdHlsZXMiLCJ3cmFwIiwidGFyZ2V0U3BhY2UiLCJpc0JhY2tncm91bmQiLCJzb3VyY2VTcGFjZSIsInN1aXRlIiwiYXNzZW1ibGVTdHlsZXMiLCJjb2RlcyIsIm1vZGlmaWVyIiwicmVzZXQiLCJib2xkIiwiZGltIiwiaXRhbGljIiwidW5kZXJsaW5lIiwiaW52ZXJzZSIsImhpZGRlbiIsInN0cmlrZXRocm91Z2giLCJibGFjayIsInJlZCIsImdyZWVuIiwieWVsbG93IiwiYmx1ZSIsIm1hZ2VudGEiLCJjeWFuIiwid2hpdGUiLCJibGFja0JyaWdodCIsInJlZEJyaWdodCIsImdyZWVuQnJpZ2h0IiwieWVsbG93QnJpZ2h0IiwiYmx1ZUJyaWdodCIsIm1hZ2VudGFCcmlnaHQiLCJjeWFuQnJpZ2h0Iiwid2hpdGVCcmlnaHQiLCJiZ0NvbG9yIiwiYmdCbGFjayIsImJnUmVkIiwiYmdHcmVlbiIsImJnWWVsbG93IiwiYmdCbHVlIiwiYmdNYWdlbnRhIiwiYmdDeWFuIiwiYmdXaGl0ZSIsImJnQmxhY2tCcmlnaHQiLCJiZ1JlZEJyaWdodCIsImJnR3JlZW5CcmlnaHQiLCJiZ1llbGxvd0JyaWdodCIsImJnQmx1ZUJyaWdodCIsImJnTWFnZW50YUJyaWdodCIsImJnQ3lhbkJyaWdodCIsImJnV2hpdGVCcmlnaHQiLCJncmF5IiwiYmdHcmF5IiwiZ3JleSIsImJnR3JleSIsImdyb3VwTmFtZSIsInN0eWxlTmFtZSIsImNvbnZlcnQiLCJtb2RlbHMiLCJ3cmFwUmF3Iiwid3JhcHBlZEZuIiwiYXJnMCIsImNvbnZlcnNpb24iLCJ3cmFwUm91bmRlZCIsInJvdW5kIiwiZnJvbU1vZGVsIiwiY2hhbm5lbHMiLCJsYWJlbHMiLCJyb3V0ZXMiLCJyb3V0ZU1vZGVscyIsInRvTW9kZWwiLCJyYXciLCJyZXZlcnNlS2V5d29yZHMiLCJoc2wiLCJoc3YiLCJod2IiLCJjbXlrIiwieHl6IiwibGFiIiwibGNoIiwiaGV4Iiwia2V5d29yZCIsImFuc2kxNiIsImFuc2kyNTYiLCJoY2ciLCJhcHBsZSIsIm1vZGVsIiwiX2NvbnZlcnQkbW9kZWwiLCJkZWx0YSIsInJkaWYiLCJnZGlmIiwiYmRpZiIsImRpZmZjIiwiY29tcGFyYXRpdmVEaXN0YW5jZSIsInJldmVyc2VkIiwiY3VycmVudENsb3Nlc3REaXN0YW5jZSIsImN1cnJlbnRDbG9zZXN0S2V5d29yZCIsImRpc3RhbmNlIiwidDIiLCJ0MyIsInQxIiwic21pbiIsImxtaW4iLCJzdiIsImhpIiwiZmxvb3IiLCJ2bWluIiwic2wiLCJ3aCIsImJsIiwicmF0aW8iLCJ5MiIsIngyIiwiejIiLCJociIsImF0YW4yIiwiUEkiLCJzcXJ0IiwiY29zIiwic2luIiwic2F0dXJhdGlvbiIsIl9hcmdzIiwiYW5zaSIsIm11bHQiLCJyZW0iLCJpbnRlZ2VyIiwic3RyaW5nIiwiY29sb3JTdHJpbmciLCJjaGFyIiwiY2hyb21hIiwiZ3JheXNjYWxlIiwiaHVlIiwicHVyZSIsIm1nIiwiYnVpbGRHcmFwaCIsImdyYXBoIiwiZGVyaXZlQkZTIiwiYWRqYWNlbnRzIiwiYWRqYWNlbnQiLCJsaW5rIiwid3JhcENvbnZlcnNpb24iLCJhc3ltbWV0cmljTWF0Y2hlciIsIlNQQUNFIiwic3RyaW5nZWRWYWx1ZSIsInRvQXN5bW1ldHJpY01hdGNoZXIiLCJnZXRLZXlzT2ZFbnVtZXJhYmxlUHJvcGVydGllcyIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbCIsInRvSHVtYW5SZWFkYWJsZUFuc2kiLCJPQkpFQ1RfTkFNRVMiLCJBUlJBWV9SRUdFWFAiLCJ0ZXN0TmFtZSIsImlzTmFtZWROb2RlTWFwIiwiY29sbGVjdGlvbiIsImF0dHJpYnV0ZSIsIkVMRU1FTlRfTk9ERSIsIlRFWFRfTk9ERSIsIkNPTU1FTlRfTk9ERSIsIkZSQUdNRU5UX05PREUiLCJFTEVNRU5UX1JFR0VYUCIsInRlc3ROb2RlIiwiX3ZhbCRoYXNBdHRyaWJ1dGUiLCJjb25zdHJ1Y3Rvck5hbWUiLCJub2RlVHlwZSIsInRhZ05hbWUiLCJpc0N1c3RvbUVsZW1lbnQiLCJoYXNBdHRyaWJ1dGUiLCJfdmFsJGNvbnN0cnVjdG9yIiwibm9kZUlzVGV4dCIsIm5vZGVJc0NvbW1lbnQiLCJub2RlSXNGcmFnbWVudCIsInByaW50VGV4dCIsInByaW50Q29tbWVudCIsInByaW50RWxlbWVudEFzTGVhZiIsInByaW50RWxlbWVudCIsInByaW50UHJvcHMiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsInByaW50Q2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwiX2VzY2FwZUhUTUwiLCJjb250ZW50Q29sb3IiLCJjb21tZW50Q29sb3IiLCJwcmludGVkUHJvcHMiLCJwcmludGVkQ2hpbGRyZW4iLCJ0YWdDb2xvciIsImVzY2FwZUhUTUwiLCJJU19JVEVSQUJMRV9TRU5USU5FTCIsIklTX0xJU1RfU0VOVElORUwiLCJJU19LRVlFRF9TRU5USU5FTCIsIklTX01BUF9TRU5USU5FTCIsIklTX09SREVSRURfU0VOVElORUwiLCJJU19SRUNPUkRfU0VOVElORUwiLCJJU19TRVFfU0VOVElORUwiLCJJU19TRVRfU0VOVElORUwiLCJJU19TVEFDS19TRU5USU5FTCIsImdldEltbXV0YWJsZU5hbWUiLCJwcmludEFzTGVhZiIsIkxBWlkiLCJwcmludEltbXV0YWJsZUVudHJpZXMiLCJnZXRSZWNvcmRFbnRyaWVzIiwiX2tleXMiLCJwcmludEltbXV0YWJsZVJlY29yZCIsInByaW50SW1tdXRhYmxlU2VxIiwiX2l0ZXIiLCJfb2JqZWN0IiwiX2FycmF5IiwiX2NvbGxlY3Rpb24iLCJfaXRlcmFibGUiLCJwcmludEltbXV0YWJsZVZhbHVlcyIsIlJlYWN0SXMiLCJnZXRDaGlsZHJlbiIsImdldFR5cGUiLCJpc0ZyYWdtZW50IiwiaXNTdXNwZW5zZSIsImlzQ29udGV4dENvbnN1bWVyIiwiaXNGb3J3YXJkUmVmIiwiaXNNZW1vIiwiZ2V0UHJvcEtleXMiLCJpc0VsZW1lbnQiLCJFbGVtZW50IiwiTGF6eSIsIk1lbW8iLCJQb3J0YWwiLCJpc0FzeW5jTW9kZSIsImlzQ29uY3VycmVudE1vZGUiLCJpc0xhenkiLCJpc1BvcnRhbCIsImlzUHJvZmlsZXIiLCJSRUFDVF9CTE9DS19UWVBFIiwiUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUiLCJSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIiwiUkVBQ1RfT1BBUVVFX0lEX1RZUEUiLCIkJHR5cGVvZlR5cGUiLCJoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSIsImhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUiLCJ0ZXN0U3ltYm9sIiwicG9seWZpbGxPYmplY3RQcm9wZXJ0eSIsImJhY2t1cE5hbWUiLCJfcmVmJGNvbmZpZ3VyYWJsZSIsImVuYWJsZSIsImZpbmFsbHkiLCJMQVNUX0VSUk9SIiwiSVNfRVJST1IiLCJnZXRUaGVuIiwidHJ5Q2FsbE9uZSIsInRyeUNhbGxUd28iLCJfeiIsIl9BIiwiZG9SZXNvbHZlIiwiX0IiLCJfQyIsIl9EIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwic2FmZVRoZW4iLCJIYW5kbGVyIiwiZGVmZXJyZWQiLCJoYW5kbGVSZXNvbHZlZCIsImZpbmFsZSIsIkRFRkFVTFRfV0hJVEVMSVNUIiwiZW5hYmxlZCIsImRpc2FibGUiLCJkaXNwbGF5SWQiLCJyZWplY3Rpb25zIiwiX0UiLCJsb2dnZWQiLCJ0aW1lb3V0IiwibWF0Y2hXaGl0ZWxpc3QiLCJ3aGl0ZWxpc3QiLCJlcnJTdHIiLCJjbHMiLCJUUlVFIiwidmFsdWVQcm9taXNlIiwiRkFMU0UiLCJOVUxMIiwiWkVSTyIsIkVNUFRZU1RSSU5HIiwiaXRlcmFibGVUb0FycmF5IiwiYWxsIiwib25TZXR0bGVkRnVsZmlsbCIsIm9uU2V0dGxlZFJlamVjdCIsIm1hcEFsbFNldHRsZWQiLCJhbGxTZXR0bGVkIiwicmFjZSIsImdldEFnZ3JlZ2F0ZUVycm9yIiwiYW55IiwicHJvbWlzZUFueSIsInByb21pc2VzIiwiaGFzUmVzb2x2ZWQiLCJyZWplY3Rpb25SZWFzb25zIiwicmVzb2x2ZU9uY2UiLCJyZWplY3Rpb25DaGVjayIsImhhc05hdGl2ZUdlbmVyYXRvciIsImhhc05hdGl2ZUNvbnN0cnVjdG9yIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiaXNOYXRpdmVGdW5jdGlvbiIsImV4cGVjdGVkTmFtZSIsImNvbiIsInJ1bnRpbWUiLCJPcCIsImhhc093biIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJpbm5lckZuIiwib3V0ZXJGbiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0IiwiR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCIsIkdlblN0YXRlRXhlY3V0aW5nIiwiR2VuU3RhdGVDb21wbGV0ZWQiLCJDb250aW51ZVNlbnRpbmVsIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0UHJvdG8iLCJOYXRpdmVJdGVyYXRvclByb3RvdHlwZSIsIkdwIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiX2ludm9rZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJnZW5GdW4iLCJhd3JhcCIsIl9fYXdhaXQiLCJBc3luY0l0ZXJhdG9yIiwiUHJvbWlzZUltcGwiLCJpbnZva2UiLCJyZWNvcmQiLCJ1bndyYXBwZWQiLCJwcmV2aW91c1Byb21pc2UiLCJlbnF1ZXVlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJhc3luYyIsImRvbmVSZXN1bHQiLCJkZWxlZ2F0ZSIsImRlbGVnYXRlUmVzdWx0IiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJpdGVyYXRvck1ldGhvZCIsInNraXBUZW1wUmVzZXQiLCJjaGFyQXQiLCJzdG9wIiwicm9vdEVudHJ5Iiwicm9vdFJlY29yZCIsInJ2YWwiLCJleGNlcHRpb24iLCJsb2MiLCJjYXVnaHQiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsInRocm93biIsImRlbGVnYXRlWWllbGQiLCJhY2NpZGVudGFsU3RyaWN0TW9kZSIsImhhc0hlcm1lc1Byb21pc2VRdWV1ZWRUb0pTVk0iLCJ1c2VFbmdpbmVRdWV1ZSIsImhhc05hdGl2ZVByb21pc2UiLCJoYXNQcm9taXNlUXVldWVkVG9KU1ZNIiwiZGVmaW5lTGF6eVRpbWVyIiwiY2xlYXJJbW1lZGlhdGUiLCJxdWV1ZVJlYWN0TmF0aXZlTWljcm90YXNrIiwiY2xlYXJSZWFjdE5hdGl2ZU1pY3JvdGFzayIsIl9nbG9iYWwkSGVybWVzSW50ZXJuYTMiLCJlbnF1ZXVlSm9iIiwiX05hdGl2ZVRpbWluZyIsIkZSQU1FX0RVUkFUSU9OIiwiSURMRV9DQUxMQkFDS19GUkFNRV9ERUFETElORSIsInRpbWVySURzIiwicmVhY3ROYXRpdmVNaWNyb3Rhc2tzIiwicmVxdWVzdElkbGVDYWxsYmFja3MiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrVGltZW91dHMiLCJHVUlEIiwiaGFzRW1pdHRlZFRpbWVEcmlmdFdhcm5pbmciLCJfZ2V0RnJlZUluZGV4IiwiZnJlZUluZGV4IiwiX2FsbG9jYXRlQ2FsbGJhY2siLCJfY2FsbFRpbWVyIiwidGltZXJJRCIsImZyYW1lVGltZSIsInRpbWVySW5kZXgiLCJfY2xlYXJJbmRleCIsInRpbWVSZW1haW5pbmciLCJfY2FsbFJlYWN0TmF0aXZlTWljcm90YXNrc1Bhc3MiLCJwYXNzUmVhY3ROYXRpdmVNaWNyb3Rhc2tzIiwiX2ZyZWVDYWxsYmFjayIsImRlbGV0ZVRpbWVyIiwiSlNUaW1lcnMiLCJjcmVhdGVUaW1lciIsInNldEludGVydmFsIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicmVxdWVzdElkbGVDYWxsYmFjayIsInNldFNlbmRJZGxlRXZlbnRzIiwiZGVhZGxpbmUiLCJ0aW1lb3V0SWQiLCJjYW5jZWxJZGxlQ2FsbGJhY2siLCJjbGVhckludGVydmFsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjYWxsVGltZXJzIiwidGltZXJzVG9DYWxsIiwiZXJyb3JDb3VudCIsImNhbGxJZGxlQ2FsbGJhY2tzIiwicGFzc0lkbGVDYWxsYmFja3MiLCJjYWxsUmVhY3ROYXRpdmVNaWNyb3Rhc2tzIiwiZW1pdFRpbWVEcmlmdFdhcm5pbmciLCJ3YXJuaW5nTWVzc2FnZSIsImNhbGxiYWNrSUQiLCJqc1NjaGVkdWxpbmdUaW1lIiwicmVwZWF0cyIsIk5hdGl2ZVRpbWluZyIsInNlbmRJZGxlRXZlbnRzIiwiRXhwb3J0ZWRKU1RpbWVycyIsIkdVSUlEIiwiY2xlYXJlZEltbWVkaWF0ZXMiLCJpbW1lZGlhdGVJRCIsImltbWVkaWF0ZVNoaW0iLCJyZXNvbHZlZFByb21pc2UiLCJjYXRjaCIsIlVSTCIsIkFib3J0Q29udHJvbGxlciIsIkFib3J0U2lnbmFsIiwiX2V2ZW50VGFyZ2V0U2hpbSIsIkRFQlVHX05FVFdPUktfU0VORF9ERUxBWSIsImlzQXZhaWxhYmxlIiwiYWRkTmV0d29ya2luZ0hhbmRsZXIiLCJVTlNFTlQiLCJPUEVORUQiLCJIRUFERVJTX1JFQ0VJVkVEIiwiTE9BRElORyIsIkRPTkUiLCJTVVBQT1JURURfUkVTUE9OU0VfVFlQRVMiLCJhcnJheWJ1ZmZlciIsIlJFUVVFU1RfRVZFTlRTIiwiWEhSX0VWRU5UUyIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJFdmVudFRhcmdldCIsInVwbG9hZCIsIl9hYm9ydGVkIiwiX2hhc0Vycm9yIiwiX21ldGhvZCIsIl9wZXJmS2V5IiwiX3Jlc3BvbnNlIiwiX3VybCIsIl90aW1lZE91dCIsIl90cmFja2luZ05hbWUiLCJfaW5jcmVtZW50YWxFdmVudHMiLCJfcGVyZm9ybWFuY2VMb2dnZXIiLCJfcmVzZXQiLCJyZXNwb25zZUhlYWRlcnMiLCJfcmVxdWVzdElkIiwiX2NhY2hlZFJlc3BvbnNlIiwiX2hlYWRlcnMiLCJfcmVzcG9uc2VUeXBlIiwiX2xvd2VyQ2FzZVJlc3BvbnNlSGVhZGVycyIsIl9jbGVhclN1YnNjcmlwdGlvbnMiLCJ0b0J5dGVBcnJheSIsImNyZWF0ZUZyb21PcHRpb25zIiwiY3JlYXRlRnJvbVBhcnRzIiwiX19kaWRDcmVhdGVSZXF1ZXN0IiwicmVxdWVzdElkIiwiX2ludGVyY2VwdG9yIiwicmVxdWVzdFNlbnQiLCJfX2RpZFVwbG9hZFByb2dyZXNzIiwicHJvZ3Jlc3MiLCJ0b3RhbCIsImxlbmd0aENvbXB1dGFibGUiLCJsb2FkZWQiLCJfX2RpZFJlY2VpdmVSZXNwb25zZSIsInN0b3BUaW1lc3BhbiIsInNldFJlc3BvbnNlSGVhZGVycyIsInNldFJlYWR5U3RhdGUiLCJyZXNwb25zZVJlY2VpdmVkIiwiX19kaWRSZWNlaXZlRGF0YSIsImRhdGFSZWNlaXZlZCIsIl9fZGlkUmVjZWl2ZUluY3JlbWVudGFsRGF0YSIsIl9fZGlkUmVjZWl2ZURhdGFQcm9ncmVzcyIsIl9fZGlkQ29tcGxldGVSZXNwb25zZSIsInRpbWVPdXRFcnJvciIsImxvYWRpbmdGYWlsZWQiLCJsb2FkaW5nRmluaXNoZWQiLCJfc3Vic2NyaXB0aW9ucyIsInN1YiIsInVuc29ydGVkSGVhZGVycyIsInJhd0hlYWRlck5hbWUiLCJoZWFkZXJWYWx1ZSIsImxvd2VySGVhZGVyTmFtZSIsInVwcGVySGVhZGVyTmFtZSIsInNvcnRlZEhlYWRlcnMiLCJnZXRSZXNwb25zZUhlYWRlciIsInNldFRyYWNraW5nTmFtZSIsInRyYWNraW5nTmFtZSIsInNldFBlcmZvcm1hbmNlTG9nZ2VyIiwicGVyZm9ybWFuY2VMb2dnZXIiLCJpbmNyZW1lbnRhbEV2ZW50cyIsIm9ucHJvZ3Jlc3MiLCJuYXRpdmVSZXNwb25zZVR5cGUiLCJkb1NlbmQiLCJmcmllbmRseU5hbWUiLCJzdGFydFRpbWVzcGFuIiwic2VuZFJlcXVlc3QiLCJhYm9ydFJlcXVlc3QiLCJsY2FzZUhlYWRlcnMiLCJoZWFkZXJOYW1lIiwic2V0SW50ZXJjZXB0b3IiLCJpbnRlcmNlcHRvciIsInByaXZhdGVEYXRhIiwid3JhcHBlcnMiLCJwZCIsInJldHYiLCJzZXRDYW5jZWxGbGFnIiwicGFzc2l2ZUxpc3RlbmVyIiwiY2FuY2VsZWQiLCJFdmVudCIsInN0b3BwZWQiLCJpbW1lZGlhdGVTdG9wcGVkIiwiZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yIiwiY29tcG9zZWRQYXRoIiwiTk9ORSIsIkNBUFRVUklOR19QSEFTRSIsIkFUX1RBUkdFVCIsIkJVQkJMSU5HX1BIQVNFIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwiY29tcG9zZWQiLCJzcmNFbGVtZW50IiwiZGVmaW5lQ2FsbERlc2NyaXB0b3IiLCJkZWZpbmVXcmFwcGVyIiwiQmFzZUV2ZW50IiwicHJvdG8iLCJDdXN0b21FdmVudCIsImlzRnVuYyIsImdldFdyYXBwZXIiLCJ3cmFwcGVyIiwid3JhcEV2ZW50IiwiaXNTdG9wcGVkIiwic2V0RXZlbnRQaGFzZSIsInNldEN1cnJlbnRUYXJnZXQiLCJzZXRQYXNzaXZlTGlzdGVuZXIiLCJsaXN0ZW5lcnNNYXAiLCJDQVBUVVJFIiwiQlVCQkxFIiwiQVRUUklCVVRFIiwiZ2V0TGlzdGVuZXJzIiwiZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yIiwibGlzdGVuZXJUeXBlIiwibmV3Tm9kZSIsInBhc3NpdmUiLCJvbmNlIiwiZGVmaW5lRXZlbnRBdHRyaWJ1dGUiLCJldmVudFRhcmdldFByb3RvdHlwZSIsImRlZmluZUN1c3RvbUV2ZW50VGFyZ2V0IiwiZXZlbnROYW1lcyIsIkN1c3RvbUV2ZW50VGFyZ2V0Iiwib3B0aW9uc0lzT2JqIiwiY2FwdHVyZSIsIndyYXBwZWRFdmVudCIsImhhbmRsZUV2ZW50IiwiX05hdGl2ZUJsb2JNb2R1bGUiLCJ1dWlkdjQiLCJjcmVhdGVCbG9iQ29sbGVjdG9yIiwiYmxvYklkIiwiX19ibG9iQ29sbGVjdG9yUHJvdmlkZXIiLCJCbG9iTWFuYWdlciIsIk5hdGl2ZUJsb2JNb2R1bGUiLCJwYXJ0IiwiYWNjIiwiY3VyciIsInVuZXNjYXBlIiwiZW5jb2RlVVJJIiwibGFzdE1vZGlmaWVkIiwiX19jb2xsZWN0b3IiLCJ1bnJlZ2lzdGVyIiwiYWRkV2ViU29ja2V0SGFuZGxlciIsInNvY2tldElkIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInNlbmRPdmVyU29ja2V0Iiwic29ja2V0SUQiLCJ3aXRoSWQiLCJfZGF0YSIsImNvbnRlbnRUeXBlIiwiX3RoaXMkZGF0YSIsInVzZWQiLCJfY3JlYXRlUGVyZm9ybWFuY2VMb2dnZXIiLCJHbG9iYWxQZXJmb3JtYW5jZUxvZ2dlciIsImNyZWF0ZVBlcmZvcm1hbmNlTG9nZ2VyIiwiX2luZm9Mb2ciLCJfZ2xvYmFsJG5hdGl2ZVFQTFRpbWUiLCJfY29va2llcyIsIlBSSU5UX1RPX0NPTlNPTEUiLCJnZXRDdXJyZW50VGltZXN0YW1wIiwibmF0aXZlUVBMVGltZXN0YW1wIiwiUGVyZm9ybWFuY2VMb2dnZXIiLCJfdGltZXNwYW5zIiwiX2V4dHJhcyIsIl9wb2ludHMiLCJfcG9pbnRFeHRyYXMiLCJfY2xvc2VkIiwiYWRkVGltZXNwYW4iLCJzdGFydEV4dHJhcyIsImVuZEV4dHJhcyIsImluZm9Mb2ciLCJ0b3RhbFRpbWUiLCJnZXRUaW1lc3BhbnMiLCJnZXRFeHRyYXMiLCJnZXRQb2ludHMiLCJnZXRQb2ludEV4dHJhcyIsImNsZWFyQ29tcGxldGVkIiwiX3RoaXMkX3RpbWVzcGFucyRfa2V5IiwiaGFzVGltZXNwYW4iLCJpc0Nsb3NlZCIsImxvZ0V2ZXJ5dGhpbmciLCJfdGhpcyRfdGltZXNwYW5zJF9rZXkyIiwiZXh0cmFzIiwicmVtb3ZlRXh0cmEiLCJzZXRFeHRyYSIsImF0dGVtcHRlZFZhbHVlIiwidGltZXNwYW4iLCJmcm9tQnl0ZUFycmF5IiwibG9va3VwIiwicmV2TG9va3VwIiwiQXJyIiwiY2hhckNvZGVBdCIsImdldExlbnMiLCJiNjQiLCJ2YWxpZExlbiIsInBsYWNlSG9sZGVyc0xlbiIsImxlbnMiLCJfYnl0ZUxlbmd0aCIsInRtcCIsImN1ckJ5dGUiLCJ0cmlwbGV0VG9CYXNlNjQiLCJudW0iLCJlbmNvZGVDaHVuayIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsIm1heENodW5rTGVuZ3RoIiwibGVuMiIsIl9jb252ZXJ0UmVxdWVzdEJvZHkiLCJfTmF0aXZlTmV0d29ya2luZ0lPUyIsIlJDVE5ldHdvcmtpbmciLCJpbmNyZW1lbnRhbFVwZGF0ZXMiLCJjb252ZXJ0UmVxdWVzdEJvZHkiLCJOYXRpdmVOZXR3b3JraW5nSU9TIiwiY2xlYXJDb29raWVzIiwiZ2V0UGFydHMiLCJiYXNlNjQiLCJfcGFydHMiLCJnZXRBbGwiLCJjb250ZW50RGlzcG9zaXRpb24iLCJmaWVsZE5hbWUiLCJiaW5hcnlUb0Jhc2U2NCIsImJ5dGVPZmZzZXQiLCJfQmxvYiIsIl9CbG9iTWFuYWdlciIsIl9OYXRpdmVFdmVudEVtaXR0ZXIiLCJfYmluYXJ5VG9CYXNlIiwiX05hdGl2ZVdlYlNvY2tldE1vZHVsZSIsIl9XZWJTb2NrZXRFdmVudCIsIl9iYXNlNjRKcyIsIl9leGNsdWRlZCIsIkNPTk5FQ1RJTkciLCJPUEVOIiwiQ0xPU0lORyIsIkNMT1NFRCIsIkNMT1NFX05PUk1BTCIsIkNMT1NFX0FCTk9STUFMIiwiV0VCU09DS0VUX0VWRU5UUyIsIm5leHRXZWJTb2NrZXRJZCIsIldlYlNvY2tldCIsInByb3RvY29scyIsIl9yZWYyJGhlYWRlcnMiLCJ1bnJlY29nbml6ZWQiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwib3JpZ2luIiwiX2V2ZW50RW1pdHRlciIsIk5hdGl2ZVdlYlNvY2tldE1vZHVsZSIsIl9zb2NrZXRJZCIsIl9yZWdpc3RlckV2ZW50cyIsImNvbm5lY3QiLCJfYmluYXJ5VHlwZSIsImJpbmFyeVR5cGUiLCJfY2xvc2UiLCJzZW5kQmluYXJ5Iiwic3RhdHVzQ29kZSIsImNsb3NlUmVhc29uIiwiX3VucmVnaXN0ZXJFdmVudHMiLCJldiIsIldlYlNvY2tldEV2ZW50IiwicHJvdG9jb2wiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJleGNsdWRlZCIsInNvdXJjZVN5bWJvbEtleXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwic291cmNlS2V5cyIsIm5hdGl2ZU1vZHVsZSIsImhhc0FkZExpc3RlbmVyIiwiaGFzUmVtb3ZlTGlzdGVuZXJzIiwicmVtb3ZlTGlzdGVuZXJzIiwiX25hdGl2ZU1vZHVsZSIsIl90aGlzJF9uYXRpdmVNb2R1bGUiLCJfdGhpcyRfbmF0aXZlTW9kdWxlMiIsIl90aGlzJF9uYXRpdmVNb2R1bGUzIiwiZXZlbnRJbml0RGljdCIsIkZpbGUiLCJfTmF0aXZlRmlsZVJlYWRlck1vZHVsZSIsIlJFQURFUl9FVkVOVFMiLCJfcmVhZHlTdGF0ZSIsIl9lcnJvciIsIl9zZXRSZWFkeVN0YXRlIiwiTmF0aXZlRmlsZVJlYWRlck1vZHVsZSIsInJlYWRBc0RhdGFVUkwiLCJ0eXBlZEFycmF5IiwiZW5jb2RpbmciLCJfU3ltYm9sJGl0ZXJhdG9yIiwiQkxPQl9VUkxfUFJFRklYIiwiQkxPQl9VUklfU0NIRU1FIiwiQkxPQl9VUklfSE9TVCIsIl9zZWFyY2hQYXJhbXMiLCJfZGVsZXRlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidmFsaWRhdGVCYXNlVXJsIiwiX3NlYXJjaFBhcmFtc0luc3RhbmNlIiwiYmFzZVVybCIsImVuZHNXaXRoIiwiaW5zdGFuY2VTdHJpbmciLCJjcmVhdGVPYmplY3RVUkwiLCJyZXZva2VPYmplY3RVUkwiLCJfZXZlbnRUYXJnZXRTaGltJEV2ZW4iLCJhYm9ydGVkRmxhZ3MiLCJjcmVhdGVBYm9ydFNpZ25hbCIsImFib3J0U2lnbmFsIiwic2lnbmFscyIsImdldFNpZ25hbCIsImNvbnRyb2xsZXIiLCJhbGVydCIsIl9SQ1RBbGVydE1hbmFnZXIiLCJidXR0b25zIiwicHJvbXB0IiwiZGVmYXVsdFBvc2l0aXZlVGV4dCIsInZhbGlkQnV0dG9ucyIsImJ1dHRvblBvc2l0aXZlIiwiYnV0dG9uTmVnYXRpdmUiLCJidXR0b25OZXV0cmFsIiwib25BY3Rpb24iLCJidXR0b25LZXkiLCJidXR0b25DbGlja2VkIiwiZGlzbWlzc2VkIiwib25EaXNtaXNzIiwiZXJyb3JNZXNzYWdlIiwic2hvd0FsZXJ0IiwiY2FsbGJhY2tPckJ1dHRvbnMiLCJrZXlib2FyZFR5cGUiLCJjYW5jZWxCdXR0b25LZXkiLCJkZXN0cnVjdGl2ZUJ1dHRvbktleSIsInByZWZlcnJlZEJ1dHRvbktleSIsImJ0biIsImlzUHJlZmVycmVkIiwiYnRuRGVmIiwiUkNUQWxlcnRNYW5hZ2VyIiwiYWxlcnRXaXRoQXJncyIsInVzZXJJbnRlcmZhY2VTdHlsZSIsIl9OYXRpdmVBbGVydE1hbmFnZXIiLCJOYXRpdmVBbGVydE1hbmFnZXIiLCJfTmF0aXZlRGlhbG9nTWFuYWdlckFuZHJvaWQiLCJuYXZpZ2F0b3IiLCJwcm9kdWN0IiwicmVnaXN0ZXJNb2R1bGUiLCJfTmF0aXZlSlNDSGVhcENhcHR1cmUiLCJIZWFwQ2FwdHVyZSIsImNhcHR1cmVIZWFwIiwibmF0aXZlQ2FwdHVyZUhlYXAiLCJOYXRpdmVKU0NIZWFwQ2FwdHVyZSIsImNhcHR1cmVDb21wbGV0ZSIsIlNhbXBsaW5nUHJvZmlsZXIiLCJwb2tlIiwidG9rZW4iLCJwb2tlU2FtcGxpbmdQcm9maWxlciIsIk5hdGl2ZUpTQ1NhbXBsaW5nUHJvZmlsZXIiLCJvcGVyYXRpb25Db21wbGV0ZSIsIl9OYXRpdmVKU0NTYW1wbGluZ1Byb2ZpbGVyIiwiUkNUTmF0aXZlQXBwRXZlbnRFbWl0dGVyIiwiX2dldERldlNlcnZlcjIiLCJfTmF0aXZlUmVkQm94IiwicGVuZGluZ0VudHJ5UG9pbnRzIiwiaG1yQ2xpZW50IiwiaG1yVW5hdmFpbGFibGVSZWFzb24iLCJjdXJyZW50Q29tcGlsZUVycm9yTWVzc2FnZSIsImRpZENvbm5lY3QiLCJwZW5kaW5nTG9ncyIsIkhNUkNsaWVudCIsIkxvYWRpbmdWaWV3IiwiaGFzVXBkYXRlcyIsImhhc1BlbmRpbmdVcGRhdGVzIiwic2hvd01lc3NhZ2UiLCJzaG93Q29tcGlsZUVycm9yIiwicmVnaXN0ZXJCdW5kbGUiLCJyZXF1ZXN0VXJsIiwicmVnaXN0ZXJCdW5kbGVFbnRyeVBvaW50cyIsInNldHVwIiwiYnVuZGxlRW50cnkiLCJwb3J0Iiwic2NoZW1lIiwic2VydmVySG9zdCIsInNlcnZlclNjaGVtZSIsImNsaWVudCIsIl9nZXREZXZTZXJ2ZXIiLCJvbiIsInNldEhNUlVuYXZhaWxhYmxlUmVhc29uIiwiaXNJbml0aWFsVXBkYXRlIiwiY2xvc2VFdmVudCIsImlzTm9ybWFsT3JVbnNldENsb3NlUmVhc29uIiwiZmx1c2hFYXJseUxvZ3MiLCJlbnRyeVBvaW50cyIsIk5hdGl2ZVJlZEJveCIsInByZXZlbnRTeW1ib2xpY2F0aW9uIiwiX3Byb2Nlc3NDb2xvciIsIl9BcHBlYXJhbmNlIiwiX05hdGl2ZURldkxvYWRpbmdWaWV3IiwiTmF0aXZlRGV2TG9hZGluZ1ZpZXciLCJ0ZXh0Q29sb3IiLCJnZXRDb2xvclNjaGVtZSIsIm5vcm1hbGl6ZWRDb2xvciIsInByb2Nlc3NDb2xvck9iamVjdCIsInByb2Nlc3NlZENvbG9yT2JqIiwiX25vcm1hbGl6ZUNvbG9ycyIsIm5vcm1hbGl6ZUNvbG9yIiwibm9ybWFsaXplQ29sb3JPYmplY3QiLCJfbm9ybWFsaXplQ29sb3IiLCJtYXRjaGVycyIsImdldE1hdGNoZXJzIiwiaGV4NiIsImNvbG9yRnJvbUtleXdvcmQiLCJub3JtYWxpemVLZXl3b3JkIiwicGFyc2UyNTUiLCJyZ2JhIiwicGFyc2UxIiwiaGV4MyIsImhleDgiLCJoZXg0IiwiaHNsVG9SZ2IiLCJwYXJzZTM2MCIsInBhcnNlUGVyY2VudGFnZSIsImhzbGEiLCJod2JUb1JnYiIsImh1ZTJyZ2IiLCJOVU1CRVIiLCJQRVJDRU5UQUdFIiwiY2FsbFdpdGhTbGFzaFNlcGFyYXRvciIsImNvbW1hU2VwYXJhdGVkQ2FsbCIsImNhY2hlZE1hdGNoZXJzIiwiaW50IiwicGFyc2VGbG9hdCIsIm5hbWVzIiwic2VtYW50aWMiLCJEeW5hbWljQ29sb3JJT1NQcml2YXRlIiwidHVwbGUiLCJkeW5hbWljIiwibGlnaHQiLCJkYXJrIiwiaGlnaENvbnRyYXN0TGlnaHQiLCJoaWdoQ29udHJhc3REYXJrIiwiX25vcm1hbGl6ZUNvbG9yT2JqZWN0IiwiZHluYW1pY0NvbG9yIiwiX3Byb2Nlc3NDb2xvck9iamVjdCIsIl9OYXRpdmVBcHBlYXJhbmNlIiwiZXZlbnRFbWl0dGVyIiwiTmF0aXZlQXBwZWFyYW5jZSIsIm5hdGl2ZUV2ZW50RW1pdHRlciIsIm5ld0FwcGVhcmFuY2UiLCJjb2xvclNjaGVtZSIsImlzQXN5bmNEZWJ1Z2dpbmciLCJuYXRpdmVDb2xvclNjaGVtZSIsInNldENvbG9yU2NoZW1lIiwiYWRkQ2hhbmdlTGlzdGVuZXIiLCJfcmVmJG1vZHVsZSIsInNvdXJjZVVSTCIsImdsb2JhbEV2YWxXaXRoU291cmNlVXJsIiwiZXZhbCIsImluamVjdFVwZGF0ZSIsImFkZGVkIiwibW9kaWZpZWQiLCJfaXNFbmFibGVkIiwiX3BlbmRpbmdVcGRhdGUiLCJfc3RhdGUiLCJfd3MiLCJvbm9wZW4iLCJfZmx1c2hRdWV1ZSIsIm9uY2xvc2UiLCJtZXJnZVVwZGF0ZXMiLCJhZGRlZElEcyIsImRlbGV0ZWRJRHMiLCJtb2R1bGVNYXAiLCJhcHBseVVwZGF0ZUxvY2FsbHkiLCJkZWxldGVkIiwicmV2aXNpb25JZCIsIkV2ZW50cyIsIkVFIiwiZW1pdHRlciIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJjbGVhckV2ZW50IiwiaGFuZGxlcnMiLCJhMSIsImEyIiwiYTMiLCJhNCIsImE1IiwicmVtb3ZlTGlzdGVuZXIiLCJvZmYiLCJwcmVmaXhlZCIsIl9OYXRpdmVEZXZTZXR0aW5ncyIsImFkZE1lbnVJdGVtIiwib25GYXN0UmVmcmVzaCIsIk5hdGl2ZURldlNldHRpbmdzIiwic3Vic2NyaXB0aW9ucyIsInJlbG9hZFdpdGhSZWFzb24iLCJITVJDbGllbnRQcm9kU2hpbSIsIl9fZmV0Y2hTZWdtZW50IiwiU2VnbWVudEZldGNoZXIiLCJmZXRjaFNlZ21lbnQiLCJlcnJvck9iamVjdCIsIl9OYXRpdmVTZWdtZW50RmV0Y2hlciIsIk5hdGl2ZVNlZ21lbnRGZXRjaGVyIiwiY2hlY2tWZXJzaW9ucyIsIm5hdGl2ZVZlcnNpb24iLCJyZWFjdE5hdGl2ZVZlcnNpb24iLCJtYWpvciIsIm1pbm9yIiwiX2Zvcm1hdFZlcnNpb24iLCJwYXRjaCIsInByZXJlbGVhc2UiLCJfZ2xvYmFsJF9fTUVUUk9fR0xPQkEiLCJKU0luc3BlY3RvciIsInJlZ2lzdGVyQWdlbnQiLCJpc0xpa2VseUFSZWFsQnJvd3NlciIsImFwcE5hbWUiLCJfaXNQb2x5ZmlsbGVkIiwib3JpZ2luYWxGdW5jdGlvbiIsImlzV2ViU29ja2V0T3BlbiIsIndzIiwicmVhY3REZXZUb29scyIsImNvbm5lY3RUb0RldlRvb2xzIiwiaXNBcHBBY3RpdmUiLCJfX1JFQUNUX0RFVlRPT0xTX1BPUlRfXyIsIlJlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzIiwiZGV2VG9vbHNTZXR0aW5nc01hbmFnZXIiLCJyZXNvbHZlUk5TdHlsZSIsIm5hdGl2ZVN0eWxlRWRpdG9yVmFsaWRBdHRyaWJ1dGVzIiwid2Vic29ja2V0Iiwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiX191bnVzZWRfd2VicGFja19tb2R1bGUiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyIsInVzZUNhY2hlUmVmcmVzaCIsInVzZU1lbW9DYWNoZSIsInN0YWNrRXJyb3IiLCJtZW1vQ2FjaGUiLCJsYXN0SW5kZXhPZiIsImlzU3RhdGVFZGl0YWJsZSIsInN1Ykhvb2tzIiwiaG9va1NvdXJjZSIsImNvbHVtbk51bWJlciIsImluc3BlY3RIb29rc09mRmliZXIiLCJfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMiLCJBSSIsIkhRIiwiQTQiLCJIWSIsIm9NIiwiX1kiLCJoXyIsIlExIiwibkYiLCJuNCIsImtLIiwia00iLCJhYSIsImJhIiwiY2EiLCJkYSIsImVhIiwiZmEiLCJoYSIsImlhIiwiWCIsInVzZU9wdGltaXN0aWMiLCJZIiwiWiIsImphIiwiUmVhY3RDdXJyZW50Q2FjaGUiLCJDb250ZXh0UmVnaXN0cnkiLCJnZXRDYWNoZUZvclR5cGUiLCJjcmVhdGVTZXJ2ZXJDb250ZXh0IiwiZXhwZXJpbWVudGFsX3VzZUVmZmVjdEV2ZW50IiwidXNlRWZmZWN0RXZlbnQiLCJleHBlcmltZW50YWxfdXNlT3B0aW1pc3RpYyIsInVuc3RhYmxlX0FjdGl2aXR5IiwidW5zdGFibGVfQ2FjaGUiLCJ1bnN0YWJsZV9EZWJ1Z1RyYWNpbmdNb2RlIiwidW5zdGFibGVfU3VzcGVuc2VMaXN0IiwidW5zdGFibGVfZ2V0Q2FjaGVGb3JUeXBlIiwidW5zdGFibGVfZ2V0Q2FjaGVTaWduYWwiLCJnZXRDYWNoZVNpZ25hbCIsInVuc3RhYmxlX3Bvc3Rwb25lIiwidW5zdGFibGVfdXNlQ2FjaGVSZWZyZXNoIiwidW5zdGFibGVfdXNlTWVtb0NhY2hlIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwiRXJyb3JTdGFja1BhcnNlciIsIlN0YWNrRnJhbWUiLCJGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAiLCJDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQIiwiU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCIsIkVycm9yU3RhY2tQYXJzZXIkJHBhcnNlIiwic3RhY2t0cmFjZSIsInBhcnNlT3BlcmEiLCJwYXJzZVY4T3JJRSIsInBhcnNlRkZPclNhZmFyaSIsImV4dHJhY3RMb2NhdGlvbiIsIkVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbiIsInVybExpa2UiLCJFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRSIsImZpbHRlcmVkIiwic2FuaXRpemVkTGluZSIsInRva2VucyIsImxvY2F0aW9uUGFydHMiLCJFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkiLCJmdW5jdGlvbk5hbWVSZWdleCIsIm1hdGNoZXMiLCJFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhIiwicGFyc2VPcGVyYTkiLCJwYXJzZU9wZXJhMTAiLCJwYXJzZU9wZXJhMTEiLCJFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhOSIsImxpbmVSRSIsIkVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMCIsIkVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMSIsImZ1bmN0aW9uQ2FsbCIsImFyZ3NSYXciLCJGVU5DX0VSUk9SX1RFWFQiLCJOQU4iLCJzeW1ib2xUYWciLCJyZVRyaW0iLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNPY3RhbCIsImZyZWVQYXJzZUludCIsImZyZWVHbG9iYWwiLCJmcmVlU2VsZiIsIm9iamVjdFByb3RvIiwibmF0aXZlTWF4IiwibmF0aXZlTWluIiwiZGVib3VuY2UiLCJ3YWl0IiwibGFzdEFyZ3MiLCJsYXN0VGhpcyIsIm1heFdhaXQiLCJ0aW1lcklkIiwibGFzdENhbGxUaW1lIiwibGFzdEludm9rZVRpbWUiLCJsZWFkaW5nIiwibWF4aW5nIiwidHJhaWxpbmciLCJ0b051bWJlciIsImludm9rZUZ1bmMiLCJ0aW1lIiwibGVhZGluZ0VkZ2UiLCJ0aW1lckV4cGlyZWQiLCJyZW1haW5pbmdXYWl0IiwidGltZVNpbmNlTGFzdENhbGwiLCJ0aW1lU2luY2VMYXN0SW52b2tlIiwic2hvdWxkSW52b2tlIiwidHJhaWxpbmdFZGdlIiwiY2FuY2VsIiwiZmx1c2giLCJkZWJvdW5jZWQiLCJpc0ludm9raW5nIiwidGhyb3R0bGUiLCJpc09iamVjdExpa2UiLCJvdGhlciIsImlzQmluYXJ5IiwiTFJVQ2FjaGUiLCJ1dGlsIiwiWWFsbGlzdCIsImhhc1N5bWJvbCIsIl9ub2RlTFJVQ2FjaGVGb3JjZU5vU3ltYm9sIiwibWFrZVN5bWJvbCIsIk1BWCIsIkxFTkdUSCIsIkxFTkdUSF9DQUxDVUxBVE9SIiwiQUxMT1dfU1RBTEUiLCJNQVhfQUdFIiwiRElTUE9TRSIsIk5PX0RJU1BPU0VfT05fU0VUIiwiTFJVX0xJU1QiLCJDQUNIRSIsIm5haXZlTGVuZ3RoIiwibGMiLCJzdGFsZSIsIm1heEFnZSIsIm5vRGlzcG9zZU9uU2V0IiwibUwiLCJhbGxvd1N0YWxlIiwibUEiLCJsQyIsImhpdCIsInJmb3JFYWNoIiwidGhpc3AiLCJ3YWxrZXIiLCJmb3JFYWNoU3RlcCIsImlzU3RhbGUiLCJkZWwiLCJoZWFkIiwiZHVtcCIsImR1bXBMcnUiLCJhcyIsImRpZEZpcnN0IiwiRW50cnkiLCJwZWVrIiwibG9hZCIsImV4cGlyZXNBdCIsInBydW5lIiwiZG9Vc2UiLCJ1bnNoaWZ0Tm9kZSIsInJlbW92ZU5vZGUiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwiZGVmYXVsdFNldFRpbW91dCIsImRlZmF1bHRDbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwicnVuQ2xlYXJUaW1lb3V0IiwibWFya2VyIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsInJ1biIsIm5leHRUaWNrIiwiSXRlbSIsImJyb3dzZXIiLCJhcmd2IiwidmVyc2lvbnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJucG1fcGFja2FnZV9uYW1lIiwibnBtX2xpZmVjeWNsZV9zY3JpcHQiLCJURVNUX1BTRVVET01BUCIsIlBzZXVkb01hcCIsImt2IiwiZmluZCIsIl9pbmRleCIsInNhbWUiLCJfaXNOdW1iZXIiLCJfY2FwaXRhbGl6ZSIsIl9nZXR0ZXIiLCJib29sZWFuUHJvcHMiLCJudW1lcmljUHJvcHMiLCJzdHJpbmdQcm9wcyIsImFycmF5UHJvcHMiLCJnZXRBcmdzIiwic2V0QXJncyIsImdldEV2YWxPcmlnaW4iLCJldmFsT3JpZ2luIiwic2V0RXZhbE9yaWdpbiIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsImdldEZ1bmN0aW9uTmFtZSIsImdldElzRXZhbCIsImZyb21TdHJpbmciLCJTdGFja0ZyYW1lJCRmcm9tU3RyaW5nIiwiYXJnc1N0YXJ0SW5kZXgiLCJhcmdzRW5kSW5kZXgiLCJsb2NhdGlvblN0cmluZyIsImluaGVyaXRzIiwic3VwZXJDdG9yIiwic3VwZXJfIiwiVGVtcEN0b3IiLCJpc0J1ZmZlciIsImNvcHkiLCJmaWxsIiwicmVhZFVJbnQ4IiwiZm9ybWF0UmVnRXhwIiwib2JqZWN0cyIsImRlcHJlY2F0ZSIsIm5vRGVwcmVjYXRpb24iLCJ3YXJuZWQiLCJkZXByZWNhdGVkIiwidGhyb3dEZXByZWNhdGlvbiIsInRyYWNlRGVwcmVjYXRpb24iLCJkZWJ1Z3MiLCJkZWJ1Z0Vudmlyb24iLCJkZWJ1Z2xvZyIsIk5PREVfREVCVUciLCJwaWQiLCJzaG93SGlkZGVuIiwiX2V4dGVuZCIsImN1c3RvbUluc3BlY3QiLCJzdHlsaXplV2l0aENvbG9yIiwic3Vic3RyIiwiaXNQcmltaXRpdmUiLCJwYWQiLCJtb250aHMiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiTm9kZSIsInB1c2hOb2RlIiwiZm9yRWFjaFJldmVyc2UiLCJnZXRSZXZlcnNlIiwibWFwUmV2ZXJzZSIsInJlZHVjZVJldmVyc2UiLCJ0b0FycmF5UmV2ZXJzZSIsInNsaWNlUmV2ZXJzZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsImNhY2hlZE1vZHVsZSIsImRlZmluaXRpb24iLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiX2RlZmluZVByb3BlcnR5IiwiZGlkVGhyb3ciLCJjbG9uZWRMaXN0ZW5lcnMiLCJfbGlzdGVuZXIiLCJsb2Rhc2hfdGhyb3R0bGUiLCJsb2Rhc2hfdGhyb3R0bGVfZGVmYXVsdCIsIkNIUk9NRV9XRUJTVE9SRV9FWFRFTlNJT05fSUQiLCJJTlRFUk5BTF9FWFRFTlNJT05fSUQiLCJMT0NBTF9FWFRFTlNJT05fSUQiLCJfX0RFQlVHX18iLCJfX1BFUkZPUk1BTkNFX1BST0ZJTEVfXyIsIlRSRUVfT1BFUkFUSU9OX0FERCIsIlRSRUVfT1BFUkFUSU9OX1JFTU9WRSIsIlRSRUVfT1BFUkFUSU9OX1JFT1JERVJfQ0hJTERSRU4iLCJUUkVFX09QRVJBVElPTl9VUERBVEVfVFJFRV9CQVNFX0RVUkFUSU9OIiwiVFJFRV9PUEVSQVRJT05fVVBEQVRFX0VSUk9SU19PUl9XQVJOSU5HUyIsIlRSRUVfT1BFUkFUSU9OX1JFTU9WRV9ST09UIiwiVFJFRV9PUEVSQVRJT05fU0VUX1NVQlRSRUVfTU9ERSIsIlBST0ZJTElOR19GTEFHX0JBU0lDX1NVUFBPUlQiLCJQUk9GSUxJTkdfRkxBR19USU1FTElORV9TVVBQT1JUIiwiTE9DQUxfU1RPUkFHRV9ERUZBVUxUX1RBQl9LRVkiLCJjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9DT01QT05FTlRfRklMVEVSX1BSRUZFUkVOQ0VTX0tFWSIsIlNFU1NJT05fU1RPUkFHRV9MQVNUX1NFTEVDVElPTl9LRVkiLCJjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9PUEVOX0lOX0VESVRPUl9VUkwiLCJMT0NBTF9TVE9SQUdFX09QRU5fSU5fRURJVE9SX1VSTF9QUkVTRVQiLCJMT0NBTF9TVE9SQUdFX1BBUlNFX0hPT0tfTkFNRVNfS0VZIiwiU0VTU0lPTl9TVE9SQUdFX1JFQ09SRF9DSEFOR0VfREVTQ1JJUFRJT05TX0tFWSIsIlNFU1NJT05fU1RPUkFHRV9SRUxPQURfQU5EX1BST0ZJTEVfS0VZIiwiY29uc3RhbnRzX0xPQ0FMX1NUT1JBR0VfU0hPVUxEX0JSRUFLX09OX0NPTlNPTEVfRVJST1JTIiwiTE9DQUxfU1RPUkFHRV9CUk9XU0VSX1RIRU1FIiwiY29uc3RhbnRzX0xPQ0FMX1NUT1JBR0VfU0hPVUxEX0FQUEVORF9DT01QT05FTlRfU1RBQ0tfS0VZIiwiY29uc3RhbnRzX0xPQ0FMX1NUT1JBR0VfU0hPV19JTkxJTkVfV0FSTklOR1NfQU5EX0VSUk9SU19LRVkiLCJMT0NBTF9TVE9SQUdFX1RSQUNFX1VQREFURVNfRU5BQkxFRF9LRVkiLCJjb25zdGFudHNfTE9DQUxfU1RPUkFHRV9ISURFX0NPTlNPTEVfTE9HU19JTl9TVFJJQ1RfTU9ERSIsIkxPQ0FMX1NUT1JBR0VfU1VQUE9SVFNfUFJPRklMSU5HX0tFWSIsIlBST0ZJTEVSX0VYUE9SVF9WRVJTSU9OIiwic3RvcmFnZV9sb2NhbFN0b3JhZ2VHZXRJdGVtIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImxvY2FsU3RvcmFnZVJlbW92ZUl0ZW0iLCJyZW1vdmVJdGVtIiwic3RvcmFnZV9sb2NhbFN0b3JhZ2VTZXRJdGVtIiwic2V0SXRlbSIsInNlc3Npb25TdG9yYWdlR2V0SXRlbSIsInNlc3Npb25TdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2VSZW1vdmVJdGVtIiwic2Vzc2lvblN0b3JhZ2VTZXRJdGVtIiwic2ltcGxlSXNFcXVhbCIsImVzbSIsInJlc3VsdEZuIiwiaXNFcXVhbCIsImxhc3RSZXN1bHQiLCJjYWxsZWRPbmNlIiwiaXNOZXdBcmdFcXVhbFRvTGFzdCIsIm5ld0FyZyIsImNvbXBhcmVWZXJzaW9ucyIsInYxIiwidjIiLCJuMSIsInZhbGlkYXRlQW5kUGFyc2UiLCJuMiIsInAxIiwicDIiLCJjb21wYXJlU2VnbWVudHMiLCJ2YWxpZGF0ZSIsInNlbXZlciIsIm9wZXJhdG9yIiwiYXNzZXJ0VmFsaWRPcGVyYXRvciIsIm9wZXJhdG9yUmVzTWFwIiwic2F0aXNmaWVzIiwicmFuZ2UiLCJvcCIsIl92YWxpZGF0ZUFuZFBhcnNlIiwiX3ZhbGlkYXRlQW5kUGFyc2UyIiwidjMiLCJ2cCIsIl92YWxpZGF0ZUFuZFBhcnNlMyIsIl92YWxpZGF0ZUFuZFBhcnNlNCIsInIxIiwicjIiLCJyMyIsInJwIiwibm9uWmVybyIsImZpbmRJbmRleCIsImlzV2lsZGNhcmQiLCJ0cnlQYXJzZSIsImZvcmNlVHlwZSIsImNvbXBhcmVTdHJpbmdzIiwiX2ZvcmNlVHlwZSIsIl9mb3JjZVR5cGUyIiwiYXAiLCJicCIsImFsbG93ZWRPcGVyYXRvcnMiLCJscnVfY2FjaGUiLCJscnVfY2FjaGVfZGVmYXVsdCIsInJlYWN0X2lzX3Byb2R1Y3Rpb25fbWluIiwiUmVhY3RTeW1ib2xzX3R5cGVvZiIsIlJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEUiLCJSRUFDVF9TRVJWRVJfQ09OVEVYVF9ERUZBVUxUX1ZBTFVFX05PVF9MT0FERUQiLCJSRUFDVF9NRU1PX0NBQ0hFX1NFTlRJTkVMIiwiUkVBQ1RfUE9TVFBPTkVfVFlQRSIsInR5cGVzX0VsZW1lbnRUeXBlQ2xhc3MiLCJFbGVtZW50VHlwZUNvbnRleHQiLCJ0eXBlc19FbGVtZW50VHlwZUZ1bmN0aW9uIiwidHlwZXNfRWxlbWVudFR5cGVGb3J3YXJkUmVmIiwiRWxlbWVudFR5cGVIb3N0Q29tcG9uZW50IiwidHlwZXNfRWxlbWVudFR5cGVNZW1vIiwiRWxlbWVudFR5cGVPdGhlck9yVW5rbm93biIsIkVsZW1lbnRUeXBlUHJvZmlsZXIiLCJFbGVtZW50VHlwZVJvb3QiLCJFbGVtZW50VHlwZVN1c3BlbnNlIiwiRWxlbWVudFR5cGVTdXNwZW5zZUxpc3QiLCJFbGVtZW50VHlwZVRyYWNpbmdNYXJrZXIiLCJDb21wb25lbnRGaWx0ZXJFbGVtZW50VHlwZSIsIkNvbXBvbmVudEZpbHRlckRpc3BsYXlOYW1lIiwiQ29tcG9uZW50RmlsdGVyTG9jYXRpb24iLCJDb21wb25lbnRGaWx0ZXJIT0MiLCJzcmNfaXNBcnJheSIsIm93bktleXMiLCJlbnVtZXJhYmxlT25seSIsInN5bWJvbHMiLCJzeW0iLCJfb2JqZWN0U3ByZWFkIiwidXRpbHNfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwidXRpbHNfdHlwZW9mIiwidXRpbHNfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJ1dGlsc19hcnJheUxpa2VUb0FycmF5IiwidXRpbHNfaGFzT3duUHJvcGVydHkiLCJjYWNoZWREaXNwbGF5TmFtZXMiLCJlbmNvZGVkU3RyaW5nQ2FjaGUiLCJhbHBoYVNvcnRLZXlzIiwiZ2V0QWxsRW51bWVyYWJsZUtleXMiLCJjdXJyZW50S2V5cyIsImRlc2NyaXB0b3JzIiwiZ2V0V3JhcHBlZERpc3BsYXlOYW1lIiwiZmFsbGJhY2tOYW1lIiwiZ2V0RGlzcGxheU5hbWUiLCJuYW1lRnJvbUNhY2hlIiwidWlkQ291bnRlciIsImdldFVJRCIsInV0ZkRlY29kZVN0cmluZ1dpdGhSYW5nZXMiLCJmcm9tQ29kZVBvaW50Iiwic3Vycm9nYXRlUGFpclRvQ29kZVBvaW50IiwiY2hhckNvZGUxIiwiY2hhckNvZGUyIiwidXRmRW5jb2RlU3RyaW5nIiwiY2FjaGVkIiwiZW5jb2RlZCIsImNoYXJDb2RlIiwicHJpbnRPcGVyYXRpb25zQXJyYXkiLCJvcGVyYXRpb25zIiwicm9vdElEIiwic3RyaW5nVGFibGUiLCJzdHJpbmdUYWJsZVNpemUiLCJzdHJpbmdUYWJsZUVuZCIsIm5leHRMZW5ndGgiLCJuZXh0U3RyaW5nIiwib3BlcmF0aW9uIiwiX2lkIiwiZGlzcGxheU5hbWVTdHJpbmdJRCIsInJlbW92ZUxlbmd0aCIsInJlbW92ZUluZGV4IiwiX2lkMiIsIl9pZDMiLCJfaWQ0IiwibnVtQ2hpbGRyZW4iLCJudW1FcnJvcnMiLCJudW1XYXJuaW5ncyIsImdldERlZmF1bHRDb21wb25lbnRGaWx0ZXJzIiwiZ2V0U2F2ZWRDb21wb25lbnRGaWx0ZXJzIiwibG9jYWxTdG9yYWdlR2V0SXRlbSIsIkxPQ0FMX1NUT1JBR0VfQ09NUE9ORU5UX0ZJTFRFUl9QUkVGRVJFTkNFU19LRVkiLCJzZXRTYXZlZENvbXBvbmVudEZpbHRlcnMiLCJjb21wb25lbnRGaWx0ZXJzIiwibG9jYWxTdG9yYWdlU2V0SXRlbSIsInBhcnNlQm9vbCIsImNhc3RCb29sIiwiY2FzdEJyb3dzZXJUaGVtZSIsImdldEFwcGVuZENvbXBvbmVudFN0YWNrIiwiX3BhcnNlQm9vbCIsIkxPQ0FMX1NUT1JBR0VfU0hPVUxEX0FQUEVORF9DT01QT05FTlRfU1RBQ0tfS0VZIiwiZ2V0QnJlYWtPbkNvbnNvbGVFcnJvcnMiLCJfcGFyc2VCb29sMiIsIkxPQ0FMX1NUT1JBR0VfU0hPVUxEX0JSRUFLX09OX0NPTlNPTEVfRVJST1JTIiwiZ2V0SGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlIiwiX3BhcnNlQm9vbDMiLCJMT0NBTF9TVE9SQUdFX0hJREVfQ09OU09MRV9MT0dTX0lOX1NUUklDVF9NT0RFIiwiZ2V0U2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzIiwiX3BhcnNlQm9vbDQiLCJMT0NBTF9TVE9SQUdFX1NIT1dfSU5MSU5FX1dBUk5JTkdTX0FORF9FUlJPUlNfS0VZIiwiZ2V0RGVmYXVsdE9wZW5JbkVkaXRvclVSTCIsIkVESVRPUl9VUkwiLCJnZXRPcGVuSW5FZGl0b3JVUkwiLCJMT0NBTF9TVE9SQUdFX09QRU5fSU5fRURJVE9SX1VSTCIsInBhcnNlRWxlbWVudERpc3BsYXlOYW1lRnJvbUJhY2tlbmQiLCJmb3JtYXR0ZWREaXNwbGF5TmFtZSIsImhvY0Rpc3BsYXlOYW1lcyIsImNvbXBpbGVkV2l0aEZvcmdldCIsImRpc3BsYXlOYW1lV2l0aG91dEZvcmdldFdyYXBwZXIiLCJfcGFyc2VFbGVtZW50RGlzcGxheU4iLCJfaG9jRGlzcGxheU5hbWVzIiwiRWxlbWVudFR5cGVDbGFzcyIsIkVsZW1lbnRUeXBlRm9yd2FyZFJlZiIsIkVsZW1lbnRUeXBlRnVuY3Rpb24iLCJFbGVtZW50VHlwZU1lbW8iLCJzaGFsbG93RGlmZmVycyIsIl9hdHRyaWJ1dGUiLCJ1dGlsc19nZXRJbk9iamVjdCIsInJlZHVjZWQiLCJkZWxldGVQYXRoSW5PYmplY3QiLCJyZW5hbWVQYXRoSW5PYmplY3QiLCJsYXN0T2xkIiwibGFzdE5ldyIsInV0aWxzX3NldEluT2JqZWN0IiwiZ2V0RGF0YVR5cGUiLCJIVE1MRWxlbWVudCIsInRvU3RyaW5nVmFsdWUiLCJpc1BsYWluT2JqZWN0IiwiZ2V0RGlzcGxheU5hbWVGb3JSZWFjdEVsZW1lbnQiLCJNQVhfUFJFVklFV19TVFJJTkdfTEVOR1RIIiwidHJ1bmNhdGVGb3JEaXNwbGF5IiwiZm9ybWF0RGF0YUZvclByZXZpZXciLCJzaG93Rm9ybWF0dGVkVmFsdWUiLCJtZXRhIiwicHJldmlld19sb25nIiwicHJldmlld19zaG9ydCIsImZvcm1hdHRlZCIsInNob3J0TmFtZSIsIl9mb3JtYXR0ZWQiLCJfZm9ybWF0dGVkMiIsIl9pMiIsImVudHJ5T3JFbnRyaWVzIiwiX2Zvcm1hdHRlZDMiLCJfaTMiLCJvYmplY3RQcm90b3R5cGUiLCJvYmplY3RQYXJlbnRQcm90b3R5cGUiLCJiYWNrZW5kVG9Gcm9udGVuZFNlcmlhbGl6ZWRFbGVtZW50TWFwcGVyIiwiX3BhcnNlRWxlbWVudERpc3BsYXlOMiIsImh5ZHJhdGlvbl9vd25LZXlzIiwiaHlkcmF0aW9uX29iamVjdFNwcmVhZCIsImh5ZHJhdGlvbl9kZWZpbmVQcm9wZXJ0eSIsImluc3BlY3RhYmxlIiwiaW5zcGVjdGVkIiwicmVhZG9ubHkiLCJ1bnNlcmlhbGl6YWJsZSIsIkxFVkVMX1RIUkVTSE9MRCIsImNyZWF0ZURlaHlkcmF0ZWQiLCJjbGVhbmVkIiwiZGVoeWRyYXRlIiwiaXNQYXRoQWxsb3dlZCIsImlzUGF0aEFsbG93ZWRDaGVjayIsInVuc2VyaWFsaXphYmxlVmFsdWUiLCJrZXlBc1N0cmluZyIsImZpbGxJblBhdGgiLCJnZXRJbk9iamVjdCIsInVuc2VyaWFsaXphYmxlUGF0aCIsImlzTWF0Y2giLCJ1cGdyYWRlVW5zZXJpYWxpemFibGUiLCJzZXRJbk9iamVjdCIsInJlcGxhY2VkIiwicmVwbGFjZW1lbnQiLCJkZXN0aW5hdGlvbiIsIl9PYmplY3QkZGVmaW5lUHJvcGVydCIsImlzQXJyYXlfaXNBcnJheSIsInNoYXJlZF9pc0FycmF5IiwidXRpbHNfdG9Db25zdW1hYmxlQXJyYXkiLCJ1dGlsc19hcnJheVdpdGhvdXRIb2xlcyIsInV0aWxzX2l0ZXJhYmxlVG9BcnJheSIsImJhY2tlbmRfdXRpbHNfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJ1dGlsc19ub25JdGVyYWJsZVNwcmVhZCIsImJhY2tlbmRfdXRpbHNfYXJyYXlMaWtlVG9BcnJheSIsImJhY2tlbmRfdXRpbHNfdHlwZW9mIiwidXRpbHNfb3duS2V5cyIsInV0aWxzX29iamVjdFNwcmVhZCIsImJhY2tlbmRfdXRpbHNfZGVmaW5lUHJvcGVydHkiLCJGSVJTVF9ERVZUT09MU19CQUNLRU5EX0xPQ0tTVEVQX1ZFUiIsImhhc0Fzc2lnbmVkQmFja2VuZCIsImd0ZSIsImNsZWFuRm9yQnJpZGdlIiwiY2xlYW5lZFBhdGhzIiwidW5zZXJpYWxpemFibGVQYXRocyIsImNsZWFuZWREYXRhIiwiZ2V0RWZmZWN0RHVyYXRpb25zIiwiaG9zdFJvb3QiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdFdpdGhTdHlsZXMiLCJpbnB1dEFyZ3MiLCJSRUdFWFAiLCJmb3JtYXRTdHIiLCJlbGVtIiwiZm9ybWF0dGluZyIsImlzSW50ZWdlciIsIm1heWJlTWVzc2FnZSIsImVzY2FwZWQiLCJwdG4iLCJpc1N5bmNocm9ub3VzWEhSU3VwcG9ydGVkIiwiZmVhdHVyZVBvbGljeSIsImFsbG93c0ZlYXR1cmUiLCJndCIsImlzUmVhY3ROYXRpdmVFbnZpcm9ubWVudCIsImdldE93bmVyV2luZG93Iiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwiZ2V0T3duZXJJZnJhbWUiLCJub2RlV2luZG93IiwiZnJhbWVFbGVtZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0V2l0aEJvcmRlck9mZnNldCIsImRpbWVuc2lvbnMiLCJnZXRFbGVtZW50RGltZW5zaW9ucyIsIm1lcmdlUmVjdE9mZnNldHMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3JkZXJUb3AiLCJib3JkZXJMZWZ0IiwiYm9yZGVyQm90dG9tIiwiYm9yZGVyUmlnaHQiLCJyZWN0cyIsInByZXZpb3VzUmVjdCIsImdldE5lc3RlZEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdW5kYXJ5V2luZG93Iiwib3duZXJJZnJhbWUiLCJjdXJyZW50SWZyYW1lIiwib25seU9uZU1vcmUiLCJkb21FbGVtZW50IiwiY2FsY3VsYXRlZFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsIm1hcmdpblRvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsIk92ZXJsYXlfY2xhc3NDYWxsQ2hlY2siLCJPdmVybGF5X2RlZmluZVByb3BlcnRpZXMiLCJPdmVybGF5X2NyZWF0ZUNsYXNzIiwiT3ZlcmxheV9hc3NpZ24iLCJPdmVybGF5UmVjdCIsImRvYyIsImJvcmRlciIsInBhZGRpbmciLCJib3JkZXJDb2xvciIsIm92ZXJsYXlTdHlsZXMiLCJiYWNrZ3JvdW5kIiwibWFyZ2luIiwicG9pbnRlckV2ZW50cyIsInBvc2l0aW9uIiwiekluZGV4IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwiYm94IiwiZGltcyIsImJveFdyYXAiLCJPdmVybGF5VGlwIiwidGlwIiwiZmxleEZsb3ciLCJib3JkZXJSYWRpdXMiLCJmb250RmFtaWx5Iiwid2hpdGVTcGFjZSIsIm5hbWVTcGFuIiwiZGltU3BhbiIsInVwZGF0ZVRleHQiLCJ1cGRhdGVQb3NpdGlvbiIsImJvdW5kcyIsInRpcFJlY3QiLCJ0aXBQb3MiLCJmaW5kVGlwUG9zIiwiT3ZlcmxheSIsImFnZW50IiwiY3VycmVudFdpbmRvdyIsIl9fUkVBQ1RfREVWVE9PTFNfVEFSR0VUX1dJTkRPV19fIiwidGlwQm91bmRzV2luZG93Iiwibm9kZXMiLCJvdXRlckJveCIsIk5FR0FUSVZFX0lORklOSVRZIiwibm9kZU5hbWUiLCJyZW5kZXJlckludGVyZmFjZSIsImdldEJlc3RNYXRjaGluZ1JlbmRlcmVySW50ZXJmYWNlIiwiZ2V0RmliZXJJREZvck5hdGl2ZSIsImdldERpc3BsYXlOYW1lRm9yRmliZXJJRCIsInRpcEJvdW5kcyIsImRvY3VtZW50RWxlbWVudCIsInNjcm9sbFkiLCJzY3JvbGxYIiwiaW5uZXJIZWlnaHQiLCJpbm5lcldpZHRoIiwidGlwU2l6ZSIsInRpcEhlaWdodCIsInRpcFdpZHRoIiwid2hhdCIsImJvcmRlclN0eWxlIiwiU0hPV19EVVJBVElPTiIsInRpbWVvdXRJRCIsIm92ZXJsYXkiLCJoaWRlT3ZlcmxheU5hdGl2ZSIsImhpZGVPdmVybGF5V2ViIiwiaGlkZU92ZXJsYXkiLCJzaG93T3ZlcmxheU5hdGl2ZSIsInNob3dPdmVybGF5V2ViIiwiaGlkZUFmdGVyVGltZW91dCIsInNob3dPdmVybGF5IiwiaWZyYW1lc0xpc3RlbmluZ1RvIiwic2V0dXBIaWdobGlnaHRlciIsImJyaWRnZSIsImNsZWFyTmF0aXZlRWxlbWVudEhpZ2hsaWdodCIsImhpZ2hsaWdodE5hdGl2ZUVsZW1lbnQiLCJzdG9wSW5zcGVjdGluZ05hdGl2ZSIsInN0YXJ0SW5zcGVjdGluZ05hdGl2ZSIsInJlZ2lzdGVyTGlzdGVuZXJzT25XaW5kb3ciLCJvbkNsaWNrIiwib25Nb3VzZUV2ZW50Iiwib25Qb2ludGVyRG93biIsIm9uUG9pbnRlck1vdmUiLCJvblBvaW50ZXJVcCIsInJlbW92ZUxpc3RlbmVyc09uV2luZG93IiwiY29udGVudFdpbmRvdyIsIm9wZW5OYXRpdmVFbGVtZW50c1BhbmVsIiwic2Nyb2xsSW50b1ZpZXciLCJyZW5kZXJlciIsInJlbmRlcmVySW50ZXJmYWNlcyIsImhhc0ZpYmVyV2l0aElkIiwiZmluZE5hdGl2ZU5vZGVzRm9yRmliZXJJRCIsImJsb2NrIiwiaW5saW5lIiwiJDAiLCJzZWxlY3RGaWJlckZvck5vZGUiLCJnZXRFdmVudFRhcmdldCIsImxhc3RIb3ZlcmVkTm9kZSIsImlmcmFtZSIsIl93aW5kb3ciLCJnZXRJREZvck5vZGUiLCJPVVRMSU5FX0NPTE9SIiwiQ09MT1JTIiwiY2FudmFzIiwiZHJhd05hdGl2ZSIsIm5vZGVUb0RhdGEiLCJub2Rlc1RvRHJhdyIsIml0ZXJhdGVOb2RlcyIsImRyYXdXZWIiLCJpbml0aWFsaXplIiwiY2FudmFzRmxvdyIsImdldENvbnRleHQiLCJjbGVhclJlY3QiLCJkcmF3Qm9yZGVyIiwiZHJhdyIsImV4ZWN1dGUiLCJjb2xvckluZGV4IiwibGluZVdpZHRoIiwic3Ryb2tlU3R5bGUiLCJzdHJva2VSZWN0Iiwic2V0TGluZURhc2giLCJkZXN0cm95TmF0aXZlIiwiZGVzdHJveVdlYiIsImNzc1RleHQiLCJpbnNlcnRCZWZvcmUiLCJUcmFjZVVwZGF0ZXNfdHlwZW9mIiwiRElTUExBWV9EVVJBVElPTiIsIk1BWF9ESVNQTEFZX0RVUkFUSU9OIiwiUkVNRUFTVVJFTUVOVF9BRlRFUl9EVVJBVElPTiIsImdldEN1cnJlbnRUaW1lIiwiZHJhd0FuaW1hdGlvbkZyYW1lSUQiLCJyZWRyYXdUaW1lb3V0SUQiLCJUcmFjZVVwZGF0ZXNfaW5pdGlhbGl6ZSIsImluamVjdGVkQWdlbnQiLCJ0cmFjZVVwZGF0ZXMiLCJ0b2dnbGVFbmFibGVkIiwibGFzdE1lYXN1cmVkQXQiLCJtZWFzdXJlTm9kZSIsInByZXBhcmVUb0RyYXciLCJlYXJsaWVzdEV4cGlyYXRpb24iLCJNQVhfVkFMVUUiLCJyZWFjdF9kZWJ1Z190b29scyIsIkNPTkNVUlJFTlRfTU9ERV9OVU1CRVIiLCJDT05DVVJSRU5UX01PREVfU1lNQk9MX1NUUklORyIsIkNPTlRFWFRfTlVNQkVSIiwiQ09OVEVYVF9TWU1CT0xfU1RSSU5HIiwiU0VSVkVSX0NPTlRFWFRfU1lNQk9MX1NUUklORyIsIkRFUFJFQ0FURURfQVNZTkNfTU9ERV9TWU1CT0xfU1RSSU5HIiwiRUxFTUVOVF9OVU1CRVIiLCJFTEVNRU5UX1NZTUJPTF9TVFJJTkciLCJERUJVR19UUkFDSU5HX01PREVfTlVNQkVSIiwiREVCVUdfVFJBQ0lOR19NT0RFX1NZTUJPTF9TVFJJTkciLCJSZWFjdFN5bWJvbHNfRk9SV0FSRF9SRUZfTlVNQkVSIiwiUmVhY3RTeW1ib2xzX0ZPUldBUkRfUkVGX1NZTUJPTF9TVFJJTkciLCJGUkFHTUVOVF9OVU1CRVIiLCJGUkFHTUVOVF9TWU1CT0xfU1RSSU5HIiwiUmVhY3RTeW1ib2xzX0xBWllfTlVNQkVSIiwiUmVhY3RTeW1ib2xzX0xBWllfU1lNQk9MX1NUUklORyIsIlJlYWN0U3ltYm9sc19NRU1PX05VTUJFUiIsIlJlYWN0U3ltYm9sc19NRU1PX1NZTUJPTF9TVFJJTkciLCJQT1JUQUxfTlVNQkVSIiwiUE9SVEFMX1NZTUJPTF9TVFJJTkciLCJQUk9GSUxFUl9OVU1CRVIiLCJQUk9GSUxFUl9TWU1CT0xfU1RSSU5HIiwiUFJPVklERVJfTlVNQkVSIiwiUFJPVklERVJfU1lNQk9MX1NUUklORyIsIlNDT1BFX05VTUJFUiIsIlNDT1BFX1NZTUJPTF9TVFJJTkciLCJTVFJJQ1RfTU9ERV9OVU1CRVIiLCJTVFJJQ1RfTU9ERV9TWU1CT0xfU1RSSU5HIiwiUmVhY3RTeW1ib2xzX1NVU1BFTlNFX05VTUJFUiIsIlJlYWN0U3ltYm9sc19TVVNQRU5TRV9TWU1CT0xfU1RSSU5HIiwiUmVhY3RTeW1ib2xzX1NVU1BFTlNFX0xJU1RfTlVNQkVSIiwiUmVhY3RTeW1ib2xzX1NVU1BFTlNFX0xJU1RfU1lNQk9MX1NUUklORyIsIlNFUlZFUl9DT05URVhUX0RFRkFVTFRfVkFMVUVfTk9UX0xPQURFRF9TWU1CT0xfU1RSSU5HIiwiY29uc29sZU1hbmFnZWRCeURldlRvb2xzRHVyaW5nU3RyaWN0TW9kZSIsImVuYWJsZUxvZ2dlciIsImVuYWJsZVN0eWxlWEZlYXR1cmVzIiwiaXNJbnRlcm5hbEZhY2Vib29rQnVpbGQiLCJzaGFyZWRfb2JqZWN0SXMiLCJoYXNPd25Qcm9wZXJ0eV9oYXNPd25Qcm9wZXJ0eSIsInNoYXJlZF9oYXNPd25Qcm9wZXJ0eSIsImNhY2hlZFN0eWxlTmFtZVRvVmFsdWVNYXAiLCJnZXRTdHlsZVhEYXRhIiwic291cmNlcyIsInJlc29sdmVkU3R5bGVzIiwiY3Jhd2xEYXRhIiwiY3Jhd2xPYmplY3RQcm9wZXJ0aWVzIiwiZnJvbUVudHJpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiZ2V0UHJvcGVydHlWYWx1ZUZvclN0eWxlTmFtZSIsIm5lc3RlZFN0eWxlIiwic3R5bGVTaGVldEluZGV4Iiwic3R5bGVTaGVldHMiLCJzdHlsZVNoZWV0IiwicnVsZXMiLCJjc3NSdWxlcyIsInJ1bGVJbmRleCIsIkNTU1N0eWxlUnVsZSIsInJ1bGUiLCJzZWxlY3RvclRleHQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiQ0hBTkdFX0xPR19VUkwiLCJVTlNVUFBPUlRFRF9WRVJTSU9OX1VSTCIsIlJFQUNUX0RFVlRPT0xTX1dPUktQTEFDRV9VUkwiLCJUSEVNRV9TVFlMRVMiLCJjb21wYWN0IiwiY29tZm9ydGFibGUiLCJDT01GT1JUQUJMRV9MSU5FX0hFSUdIVCIsIkNPTVBBQ1RfTElORV9IRUlHSFQiLCJSRUFDVF9UT1RBTF9OVU1fTEFORVMiLCJTQ0hFRFVMSU5HX1BST0ZJTEVSX1ZFUlNJT04iLCJTTkFQU0hPVF9NQVhfSEVJR0hUIiwiRGV2VG9vbHNDb25zb2xlUGF0Y2hpbmdfb3duS2V5cyIsIkRldlRvb2xzQ29uc29sZVBhdGNoaW5nX29iamVjdFNwcmVhZCIsIkRldlRvb2xzQ29uc29sZVBhdGNoaW5nX2RlZmluZVByb3BlcnR5IiwiRGV2VG9vbHNDb21wb25lbnRTdGFja0ZyYW1lX3R5cGVvZiIsIlNVU1BFTlNFX05VTUJFUiIsIlNVU1BFTlNFX1NZTUJPTF9TVFJJTkciLCJTVVNQRU5TRV9MSVNUX05VTUJFUiIsIlNVU1BFTlNFX0xJU1RfU1lNQk9MX1NUUklORyIsIkZPUldBUkRfUkVGX05VTUJFUiIsIkZPUldBUkRfUkVGX1NZTUJPTF9TVFJJTkciLCJNRU1PX05VTUJFUiIsIk1FTU9fU1lNQk9MX1NUUklORyIsIkxBWllfTlVNQkVSIiwiTEFaWV9TWU1CT0xfU1RSSU5HIiwid29ya1RhZ01hcCIsInByb2ZpbGluZ0hvb2tzX3NsaWNlZFRvQXJyYXkiLCJwcm9maWxpbmdIb29rc19hcnJheVdpdGhIb2xlcyIsInByb2ZpbGluZ0hvb2tzX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwicHJvZmlsaW5nSG9va3NfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJwcm9maWxpbmdIb29rc19ub25JdGVyYWJsZVJlc3QiLCJwcm9maWxpbmdIb29rc19hcnJheUxpa2VUb0FycmF5IiwicHJvZmlsaW5nSG9va3NfdHlwZW9mIiwiVElNRV9PRkZTRVQiLCJwZXJmb3JtYW5jZVRhcmdldCIsInN1cHBvcnRzVXNlclRpbWluZyIsInN1cHBvcnRzVXNlclRpbWluZ1YzIiwiQ0hFQ0tfVjNfTUFSSyIsInByb2ZpbGluZ0hvb2tzX2dldEN1cnJlbnRUaW1lIiwic2V0UGVyZm9ybWFuY2VNb2NrX09OTFlfRk9SX1RFU1RJTkciLCJwZXJmb3JtYW5jZU1vY2siLCJjcmVhdGVQcm9maWxpbmdIb29rcyIsImdldERpc3BsYXlOYW1lRm9yRmliZXIiLCJnZXRJc1Byb2ZpbGluZyIsInJlYWN0VmVyc2lvbiIsImN1cnJlbnRCYXRjaFVJRCIsImN1cnJlbnRSZWFjdENvbXBvbmVudE1lYXN1cmUiLCJjdXJyZW50UmVhY3RNZWFzdXJlc1N0YWNrIiwiY3VycmVudFRpbWVsaW5lRGF0YSIsImN1cnJlbnRGaWJlclN0YWNrcyIsImlzUHJvZmlsaW5nIiwibmV4dFJlbmRlclNob3VsZFN0YXJ0TmV3QmF0Y2giLCJnZXRSZWxhdGl2ZVRpbWUiLCJnZXRJbnRlcm5hbE1vZHVsZVJhbmdlcyIsInJhbmdlcyIsImdldFRpbWVsaW5lRGF0YSIsImxhbmVUb0xhbmVzQXJyYXkiLCJsYW5lc0FycmF5IiwibGFuZVRvTGFiZWxNYXAiLCJtYXJrTWV0YWRhdGEiLCJtYXJrQW5kQ2xlYXIiLCJfcmFuZ2VzJGkiLCJzdGFydFN0YWNrRnJhbWUiLCJzdG9wU3RhY2tGcmFtZSIsInJlY29yZFJlYWN0TWVhc3VyZVN0YXJ0ZWQiLCJyZWFjdE1lYXN1cmUiLCJiYXRjaFVJRCIsIl9jdXJyZW50VGltZWxpbmVEYXRhIiwiYmF0Y2hVSURUb01lYXN1cmVzTWFwIiwibGFuZVRvUmVhY3RNZWFzdXJlTWFwIiwicmVhY3RNZWFzdXJlcyIsInJlY29yZFJlYWN0TWVhc3VyZUNvbXBsZXRlZCIsIm1hcmtDb21taXRTdGFydGVkIiwibWFya0NvbW1pdFN0b3BwZWQiLCJtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCIsIm1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkIiwiY29tcG9uZW50TWVhc3VyZXMiLCJtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkIiwibWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCIsIm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZCIsIm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCIsIm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkIiwibWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQiLCJtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdGFydGVkIiwibWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RvcHBlZCIsIm1hcmtDb21wb25lbnRFcnJvcmVkIiwidGhyb3duRXJyb3JzIiwid2FrZWFibGVJRHMiLCJ3YWtlYWJsZUlEIiwiZ2V0V2FrZWFibGVJRCIsIm1hcmtDb21wb25lbnRTdXNwZW5kZWQiLCJzdXNwZW5zZUV2ZW50IiwicHJvbWlzZU5hbWUiLCJyZXNvbHV0aW9uIiwic3VzcGVuc2VFdmVudHMiLCJtYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQiLCJtYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQiLCJtYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkIiwibWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCIsIm1hcmtSZW5kZXJTdGFydGVkIiwibWFya1JlbmRlcllpZWxkZWQiLCJtYXJrUmVuZGVyU3RvcHBlZCIsIm1hcmtSZW5kZXJTY2hlZHVsZWQiLCJzY2hlZHVsaW5nRXZlbnRzIiwibWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkIiwiZ2V0UGFyZW50RmliZXJzIiwicGFyZW50cyIsIm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZCIsInRvZ2dsZVByb2ZpbGluZ1N0YXR1cyIsImludGVybmFsTW9kdWxlU291cmNlVG9SYW5nZXMiLCJfcmFuZ2VzJGkyIiwiZmxhbWVjaGFydCIsIm5hdGl2ZUV2ZW50cyIsIm5ldHdvcmtNZWFzdXJlcyIsIm90aGVyVXNlclRpbWluZ01hcmtzIiwic25hcHNob3RzIiwic25hcHNob3RIZWlnaHQiLCJyZW5kZXJlcl9vd25LZXlzIiwicmVuZGVyZXJfb2JqZWN0U3ByZWFkIiwicmVuZGVyZXJfZGVmaW5lUHJvcGVydHkiLCJyZW5kZXJlcl9zbGljZWRUb0FycmF5IiwicmVuZGVyZXJfYXJyYXlXaXRoSG9sZXMiLCJyZW5kZXJlcl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsInJlbmRlcmVyX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwicmVuZGVyZXJfbm9uSXRlcmFibGVSZXN0IiwicmVuZGVyZXJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZW5kZXJlcl9hcnJheVdpdGhvdXRIb2xlcyIsInJlbmRlcmVyX2l0ZXJhYmxlVG9BcnJheSIsInJlbmRlcmVyX25vbkl0ZXJhYmxlU3ByZWFkIiwicmVuZGVyZXJfYXJyYXlMaWtlVG9BcnJheSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIl9lMiIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJfZTMiLCJyZW5kZXJlcl90eXBlb2YiLCJnZXRGaWJlckZsYWdzIiwiZWZmZWN0VGFnIiwicmVuZGVyZXJfZ2V0Q3VycmVudFRpbWUiLCJnZXRJbnRlcm5hbFJlYWN0Q29uc3RhbnRzIiwiUmVhY3RQcmlvcml0eUxldmVscyIsIkxvd1ByaW9yaXR5IiwiTm9Qcmlvcml0eSIsIlN0cmljdE1vZGVCaXRzIiwiUmVhY3RUeXBlT2ZXb3JrIiwiQ29yb3V0aW5lQ29tcG9uZW50IiwiQ29yb3V0aW5lSGFuZGxlclBoYXNlIiwiRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50IiwiWWllbGRDb21wb25lbnQiLCJnZXRUeXBlU3ltYm9sIiwic3ltYm9sT3JOdW1iZXIiLCJfUmVhY3RUeXBlT2ZXb3JrIiwicmVzb2x2ZUZpYmVyVHlwZSIsInR5cGVTeW1ib2wiLCJfZmliZXIkdXBkYXRlUXVldWUiLCJzaG91bGRTa2lwRm9yZ2V0Q2hlY2siLCJyZXNvbHZlZENvbnRleHQiLCJmaWJlclRvSURNYXAiLCJpZFRvQXJiaXRyYXJ5RmliZXJNYXAiLCJfZ2V0SW50ZXJuYWxSZWFjdENvbnMiLCJzdXBwb3J0c1RvZ2dsaW5nRXJyb3IiLCJzdXBwb3J0c1RvZ2dsaW5nU3VzcGVuc2UiLCJmaWJlcnNXaXRoQ2hhbmdlZEVycm9yT3JXYXJuaW5nQ291bnRzIiwicGVuZGluZ0ZpYmVyVG9FcnJvcnNNYXAiLCJwZW5kaW5nRmliZXJUb1dhcm5pbmdzTWFwIiwiZmliZXJJRFRvRXJyb3JzTWFwIiwiZmliZXJJRFRvV2FybmluZ3NNYXAiLCJjbGVhckVycm9yc0FuZFdhcm5pbmdzIiwiX2l0ZXJhdG9yIiwiX2ZpYmVyIiwidXBkYXRlTW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudElmTmVjZXNzYXJ5IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9maWJlcjIiLCJmbHVzaFBlbmRpbmdFdmVudHMiLCJjbGVhck1lc3NhZ2VDb3VudEhlbHBlciIsImZpYmVySUQiLCJwZW5kaW5nRmliZXJUb01lc3NhZ2VDb3VudE1hcCIsImZpYmVySURUb01lc3NhZ2VDb3VudE1hcCIsImNsZWFyRXJyb3JzRm9yRmliZXJJRCIsImNsZWFyV2FybmluZ3NGb3JGaWJlcklEIiwibW9zdFJlY2VudGx5SW5zcGVjdGVkRWxlbWVudCIsImhhc0VsZW1lbnRVcGRhdGVkU2luY2VMYXN0SW5zcGVjdGVkIiwib25FcnJvck9yV2FybmluZyIsIm1heWJlSUQiLCJnZXRGaWJlcklEVW5zYWZlIiwiZm9yY2VFcnJvckZvckZpYmVySURzIiwiZmliZXJNYXAiLCJtZXNzYWdlTWFwIiwiZmx1c2hQZW5kaW5nRXJyb3JzQW5kV2FybmluZ3NBZnRlckRlbGF5IiwicmVnaXN0ZXJSZW5kZXJlciIsInBhdGNoQ29uc29sZVVzaW5nV2luZG93VmFsdWVzIiwiZXh0cmFTdHJpbmciLCJwYXJlbnREaXNwbGF5TmFtZSIsIm1heWJlUGFyZW50SUQiLCJoaWRlRWxlbWVudHNXaXRoRGlzcGxheU5hbWVzIiwiaGlkZUVsZW1lbnRzV2l0aFBhdGhzIiwiaGlkZUVsZW1lbnRzV2l0aFR5cGVzIiwidHJhY2VVcGRhdGVzRW5hYmxlZCIsInRyYWNlVXBkYXRlc0Zvck5vZGVzIiwiYXBwbHlDb21wb25lbnRGaWx0ZXJzIiwiY29tcG9uZW50RmlsdGVyIiwiX19SRUFDVF9ERVZUT09MU19DT01QT05FTlRfRklMVEVSU19fIiwidXBkYXRlQ29tcG9uZW50RmlsdGVycyIsImdldEZpYmVyUm9vdHMiLCJjdXJyZW50Um9vdElEIiwiZ2V0T3JHZW5lcmF0ZUZpYmVySUQiLCJwdXNoT3BlcmF0aW9uIiwicm9vdERpc3BsYXlOYW1lQ291bnRlciIsInNldFJvb3RQc2V1ZG9LZXkiLCJtb3VudEZpYmVyUmVjdXJzaXZlbHkiLCJyZWV2YWx1YXRlRXJyb3JzQW5kV2FybmluZ3MiLCJzaG91bGRGaWx0ZXJGaWJlciIsIl9kZWJ1Z1NvdXJjZSIsImdldEVsZW1lbnRUeXBlRm9yRmliZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZGlzcGxheU5hbWVSZWdFeHAiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwicGF0aFJlZ0V4cCIsImlkVG9UcmVlQmFzZUR1cmF0aW9uTWFwIiwiaWRUb1Jvb3RNYXAiLCJkaWRHZW5lcmF0ZUlEIiwicmVmaW5lZElEIiwiZ2V0RmliZXJJRFRocm93cyIsInVudHJhY2tGaWJlcklEIiwidW50cmFja0ZpYmVyc1NldCIsInVudHJhY2tGaWJlcnNUaW1lb3V0SUQiLCJ1bnRyYWNrRmliZXJzIiwic2hvdWxkRXJyb3JGaWJlckFsd2F5c051bGwiLCJnZXRDaGFuZ2VEZXNjcmlwdGlvbiIsInByZXZGaWJlciIsImRpZEhvb2tzQ2hhbmdlIiwiaXNGaXJzdE1vdW50IiwiZ2V0Q29udGV4dENoYW5nZWRLZXlzIiwiZ2V0Q2hhbmdlZEtleXMiLCJpbmRpY2VzIiwiZ2V0Q2hhbmdlZEhvb2tzSW5kaWNlcyIsImhvb2tzIiwidXBkYXRlQ29udGV4dHNGb3JGaWJlciIsImlkVG9Db250ZXh0c01hcCIsImNvbnRleHRzIiwiZ2V0Q29udGV4dHNGb3JGaWJlciIsIk5PX0NPTlRFWFQiLCJsZWdhY3lDb250ZXh0IiwibW9kZXJuQ29udGV4dCIsImNyYXdsVG9Jbml0aWFsaXplQ29udGV4dHNNYXAiLCJwcmV2Q29udGV4dHMiLCJuZXh0Q29udGV4dHMiLCJfcHJldkNvbnRleHRzIiwicHJldkxlZ2FjeUNvbnRleHQiLCJwcmV2TW9kZXJuQ29udGV4dCIsIl9uZXh0Q29udGV4dHMiLCJuZXh0TGVnYWN5Q29udGV4dCIsIm5leHRNb2Rlcm5Db250ZXh0IiwicHJldkNvbnRleHQiLCJpc0hvb2tUaGF0Q2FuU2NoZWR1bGVVcGRhdGUiLCJob29rT2JqZWN0IiwiYm91bmRIYXNPd25Qcm9wZXJ0eSIsImRpZFN0YXRlZnVsSG9va0NoYW5nZSIsInByZXZNZW1vaXplZFN0YXRlIiwibmV4dE1lbW9pemVkU3RhdGUiLCJjaGFuZ2VkS2V5cyIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJkaWRGaWJlclJlbmRlciIsInBlbmRpbmdPcGVyYXRpb25zIiwicGVuZGluZ1JlYWxVbm1vdW50ZWRJRHMiLCJwZW5kaW5nU2ltdWxhdGVkVW5tb3VudGVkSURzIiwicGVuZGluZ09wZXJhdGlvbnNRdWV1ZSIsInBlbmRpbmdTdHJpbmdUYWJsZSIsInBlbmRpbmdTdHJpbmdUYWJsZUxlbmd0aCIsInBlbmRpbmdVbm1vdW50ZWRSb290SUQiLCJzaG91bGRCYWlsb3V0V2l0aFBlbmRpbmdPcGVyYXRpb25zIiwiY3VycmVudENvbW1pdFByb2ZpbGluZ01ldGFkYXRhIiwiZHVyYXRpb25zIiwiZmx1c2hPclF1ZXVlT3BlcmF0aW9ucyIsImZsdXNoUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheVRpbWVvdXRJRCIsImNsZWFyUGVuZGluZ0Vycm9yc0FuZFdhcm5pbmdzQWZ0ZXJEZWxheSIsInJlY29yZFBlbmRpbmdFcnJvcnNBbmRXYXJuaW5ncyIsImNvdW50TWFwIiwibWVyZ2VNYXBzQW5kR2V0Q291bnRIZWxwZXIiLCJuZXdDb3VudCIsIm1lc3NhZ2VDb3VudE1hcCIsInBlbmRpbmdNZXNzYWdlQ291bnRNYXAiLCJyZWZpbmVkTWVzc2FnZUNvdW50TWFwIiwicGVuZGluZ0NvdW50IiwicHJldmlvdXNDb3VudCIsIndhcm5pbmdDb3VudCIsIm51bVVubW91bnRJRHMiLCJzdHJpbmdLZXkiLCJlbmNvZGVkU3RyaW5nIiwiX2oiLCJfajIiLCJnZXRTdHJpbmdJRCIsImV4aXN0aW5nRW50cnkiLCJyZWNvcmRNb3VudCIsImlzUm9vdCIsImhhc093bmVyTWV0YWRhdGEiLCJpc1Byb2ZpbGluZ1N1cHBvcnRlZCIsInByb2ZpbGluZ0ZsYWdzIiwiZGlzcGxheU5hbWVzQnlSb290SUQiLCJnZXREaXNwbGF5TmFtZUZvclJvb3QiLCJvd25lcklEIiwia2V5U3RyaW5nIiwia2V5U3RyaW5nSUQiLCJyZWNvcmRQcm9maWxpbmdEdXJhdGlvbnMiLCJyZWNvcmRVbm1vdW50IiwiaXNTaW11bGF0ZWQiLCJ0cmFja2VkUGF0aE1hdGNoRmliZXIiLCJzZXRUcmFja2VkUGF0aCIsInVuc2FmZUlEIiwidHJhdmVyc2VTaWJsaW5ncyIsInRyYWNlTmVhcmVzdEhvc3RDb21wb25lbnRVcGRhdGUiLCJtaWdodFNpYmxpbmdzQmVPblRyYWNrZWRQYXRoIiwidXBkYXRlVHJhY2tlZFBhdGhTdGF0ZUJlZm9yZU1vdW50Iiwic2hvdWxkSW5jbHVkZUluVHJlZSIsImlzVGltZWRPdXQiLCJmYWxsYmFja0NoaWxkIiwicHJpbWFyeUNoaWxkIiwiYXJlU3VzcGVuc2VDaGlsZHJlbkNvbmRpdGlvbmFsbHlXcmFwcGVkIiwidXBkYXRlVHJhY2tlZFBhdGhTdGF0ZUFmdGVyTW91bnQiLCJ1bm1vdW50RmliZXJDaGlsZHJlblJlY3Vyc2l2ZWx5IiwiY29udmVydGVkVHJlZUJhc2VEdXJhdGlvbiIsInNlbGZEdXJhdGlvbiIsIm1ldGFkYXRhIiwibWF4QWN0dWFsRHVyYXRpb24iLCJyZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMiLCJjaGFuZ2VEZXNjcmlwdGlvbiIsImNoYW5nZURlc2NyaXB0aW9ucyIsInJlY29yZFJlc2V0Q2hpbGRyZW4iLCJmaW5kUmVvcmRlcmVkQ2hpbGRyZW5SZWN1cnNpdmVseSIsInVwZGF0ZUZpYmVyUmVjdXJzaXZlbHkiLCJzaG91bGRSZXNldENoaWxkcmVuIiwibmV4dERpZFRpbWVPdXQiLCJuZXh0RmliZXJDaGlsZCIsIm5leHRGYWxsYmFja0NoaWxkU2V0IiwicHJldkZpYmVyQ2hpbGQiLCJwcmV2RmFsbGJhY2tDaGlsZFNldCIsIm5leHRQcmltYXJ5Q2hpbGRTZXQiLCJfbmV4dEZpYmVyQ2hpbGQiLCJfbmV4dEZhbGxiYWNrQ2hpbGRTZXQiLCJuZXh0Q2hpbGQiLCJwcmV2Q2hpbGRBdFNhbWVJbmRleCIsInByZXZDaGlsZCIsImhvc3RGaWJlcnMiLCJmaW5kQWxsQ3VycmVudEhvc3RGaWJlcnMiLCJuZXh0Q2hpbGRTZXQiLCJfbmV4dEZpYmVyQ2hpbGQyIiwiY2xlYW51cCIsInJvb3RTdXBwb3J0c1Byb2ZpbGluZyIsIm1lbW9pemVkSW50ZXJhY3Rpb25zIiwiZmx1c2hJbml0aWFsT3BlcmF0aW9ucyIsImxvY2FsUGVuZGluZ09wZXJhdGlvbnNRdWV1ZSIsInRyYWNrZWRQYXRoIiwibWlnaHRCZU9uVHJhY2tlZFBhdGgiLCJwcm9maWxpbmdTdGFydFRpbWUiLCJnZXRVcGRhdGVyc0xpc3QiLCJmaWJlclRvU2VyaWFsaXplZEVsZW1lbnQiLCJoYW5kbGVDb21taXRGaWJlclVubW91bnQiLCJoYW5kbGVQb3N0Q29tbWl0RmliZXJSb290IiwiX2dldEVmZmVjdER1cmF0aW9ucyIsImhhbmRsZUNvbW1pdEZpYmVyUm9vdCIsImZvcm1hdFByaW9yaXR5TGV2ZWwiLCJ3YXNNb3VudGVkIiwicmVtb3ZlUm9vdFBzZXVkb0tleSIsImNvbW1pdFByb2ZpbGluZ01ldGFkYXRhIiwicm9vdFRvQ29tbWl0UHJvZmlsaW5nTWV0YWRhdGFNYXAiLCJmaWJlcnMiLCJmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aEJ5SWQiLCJfZmliZXIzIiwiZ2V0RmliZXJGb3JOYXRpdmUiLCJmaW5kTmVhcmVzdFVuZmlsdGVyZWRBbmNlc3RvciIsInByZXBhcmVWaWV3QXR0cmlidXRlU291cmNlIiwiaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50IiwiJGF0dHJpYnV0ZSIsInByZXBhcmVWaWV3RWxlbWVudFNvdXJjZSIsIiR0eXBlIiwiZ2V0T3duZXJzTGlzdCIsIm93bmVycyIsImdldEluc3RhbmNlQW5kU3R5bGUiLCJpc0Vycm9yQm91bmRhcnkiLCJnZXROZWFyZXN0RXJyb3JCb3VuZGFyeUlEIiwiaW5zcGVjdEVsZW1lbnRSYXciLCJ1c2VzSG9va3MiLCJzaG93U3RhdGUiLCJjYW5WaWV3U291cmNlIiwic2hvdWxkSGlkZUNvbnRleHQiLCJjb25zdW1lclJlc29sdmVkQ29udGV4dCIsImN1cnJlbnRUeXBlIiwiY3VycmVudFR5cGVTeW1ib2wiLCJwcm92aWRlclJlc29sdmVkQ29udGV4dCIsImhhc0xlZ2FjeUNvbnRleHQiLCJvcmlnaW5hbENvbnNvbGVNZXRob2RzIiwicm9vdFR5cGUiLCJ3YXJuaW5ncyIsImlzRXJyb3JlZCIsInRhcmdldEVycm9yQm91bmRhcnlJRCIsInN0eWxleCIsInhzdHlsZSIsImNhbkVkaXRIb29rcyIsImNhbkVkaXRGdW5jdGlvblByb3BzIiwiY2FuRWRpdEhvb2tzQW5kRGVsZXRlUGF0aHMiLCJjYW5FZGl0SG9va3NBbmRSZW5hbWVQYXRocyIsImNhbkVkaXRGdW5jdGlvblByb3BzRGVsZXRlUGF0aHMiLCJjYW5FZGl0RnVuY3Rpb25Qcm9wc1JlbmFtZVBhdGhzIiwiY2FuVG9nZ2xlRXJyb3IiLCJjYW5Ub2dnbGVTdXNwZW5zZSIsImZvcmNlRmFsbGJhY2tGb3JTdXNwZW5zZUlEcyIsInJlbmRlcmVyVmVyc2lvbiIsImN1cnJlbnRseUluc3BlY3RlZFBhdGhzIiwiaXNNb3N0UmVjZW50bHlJbnNwZWN0ZWRFbGVtZW50Q3VycmVudCIsIm1lcmdlSW5zcGVjdGVkUGF0aHMiLCJjcmVhdGVJc1BhdGhBbGxvd2VkIiwic2Vjb25kYXJ5Q2F0ZWdvcnkiLCJ1cGRhdGVTZWxlY3RlZEVsZW1lbnQiLCJpbnNwZWN0ZWRFbGVtZW50IiwiJHIiLCJzdG9yZUFzR2xvYmFsIiwiZ2V0U2VyaWFsaXplZEVsZW1lbnRWYWx1ZUJ5UGF0aCIsInZhbHVlVG9Db3B5IiwiaW5zcGVjdEVsZW1lbnQiLCJyZXF1ZXN0SUQiLCJmb3JjZUZ1bGxEYXRhIiwicmVzcG9uc2VJRCIsIl9maWJlcjQiLCJlcnJvclR5cGUiLCJjbGVhbmVkSW5zcGVjdGVkRWxlbWVudCIsImxvZ0VsZW1lbnRUb0NvbnNvbGUiLCJzdXBwb3J0c0dyb3VwIiwibmF0aXZlTm9kZXMiLCJjaHJvbWUiLCJ1c2VyQWdlbnQiLCJkZWxldGVQYXRoIiwiaG9va0lEIiwicmVuYW1lUGF0aCIsIm92ZXJyaWRlVmFsdWVBdFBhdGgiLCJpbml0aWFsVHJlZUJhc2VEdXJhdGlvbnNNYXAiLCJpbml0aWFsSURUb1Jvb3RNYXAiLCJnZXRQcm9maWxpbmdEYXRhIiwiZGF0YUZvclJvb3RzIiwiY29tbWl0RGF0YSIsImluaXRpYWxUcmVlQmFzZUR1cmF0aW9ucyIsImNvbW1pdFByb2ZpbGluZ0RhdGEiLCJjb21taXRJbmRleCIsImZpYmVyQWN0dWFsRHVyYXRpb25zIiwiZmliZXJTZWxmRHVyYXRpb25zIiwidGltZWxpbmVEYXRhIiwicmVzdCIsImJhdGNoVUlEVG9NZWFzdXJlc0tleVZhbHVlQXJyYXkiLCJsYW5lVG9MYWJlbEtleVZhbHVlQXJyYXkiLCJsYW5lVG9SZWFjdE1lYXN1cmVLZXlWYWx1ZUFycmF5Iiwic3RhcnRQcm9maWxpbmciLCJzaG91bGRSZWNvcmRDaGFuZ2VEZXNjcmlwdGlvbnMiLCJzdG9wUHJvZmlsaW5nIiwic2hvdWxkRXJyb3JGaWJlckFjY29yZGluZ1RvTWFwIiwib3ZlcnJpZGVFcnJvciIsImZvcmNlRXJyb3IiLCJzaG91bGRTdXNwZW5kRmliZXJBbHdheXNGYWxzZSIsInNob3VsZFN1c3BlbmRGaWJlckFjY29yZGluZ1RvU2V0Iiwib3ZlcnJpZGVTdXNwZW5zZSIsImZvcmNlRmFsbGJhY2siLCJ0cmFja2VkUGF0aE1hdGNoRGVwdGgiLCJyZXR1cm5BbHRlcm5hdGUiLCJhY3R1YWxGcmFtZSIsImdldFBhdGhGcmFtZSIsImV4cGVjdGVkRnJhbWUiLCJyb290UHNldWRvS2V5cyIsImNvdW50ZXIiLCJwc2V1ZG9LZXkiLCJwcmVmZXJyZWREaXNwbGF5TmFtZSIsImZhbGxiYWNrRGlzcGxheU5hbWUiLCJnZXRQYXRoRm9yRWxlbWVudCIsImtleVBhdGgiLCJnZXRCZXN0TWF0Y2hGb3JUcmFja2VkUGF0aCIsImlzRnVsbE1hdGNoIiwic2V0VHJhY2VVcGRhdGVzRW5hYmxlZCIsInBhdGNoQ29uc29sZUZvclN0cmljdE1vZGUiLCJwYXRjaEZvclN0cmljdE1vZGUiLCJ1bnBhdGNoQ29uc29sZUZvclN0cmljdE1vZGUiLCJ1bnBhdGNoRm9yU3RyaWN0TW9kZSIsImNvbnNvbGVfdG9Db25zdW1hYmxlQXJyYXkiLCJjb25zb2xlX2FycmF5V2l0aG91dEhvbGVzIiwiY29uc29sZV9pdGVyYWJsZVRvQXJyYXkiLCJjb25zb2xlX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiY29uc29sZV9ub25JdGVyYWJsZVNwcmVhZCIsImNvbnNvbGVfYXJyYXlMaWtlVG9BcnJheSIsImNvbnNvbGVfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIk9WRVJSSURFX0NPTlNPTEVfTUVUSE9EUyIsIkRJTU1FRF9OT0RFX0NPTlNPTEVfQ09MT1IiLCJQUkVGSVhfUkVHRVgiLCJST1dfQ09MVU1OX05VTUJFUl9SRUdFWCIsImlzU3RyaW5nQ29tcG9uZW50U3RhY2siLCJTVFlMRV9ESVJFQ1RJVkVfUkVHRVgiLCJpc1N0cmljdE1vZGVPdmVycmlkZSIsImdldENvbnNvbGVDb2xvciIsImNvbnNvbGVTZXR0aW5nc1JlZiIsImJyb3dzZXJUaGVtZSIsImluamVjdGVkUmVuZGVyZXJzIiwidGFyZ2V0Q29uc29sZSIsInRhcmdldENvbnNvbGVNZXRob2RzIiwidW5wYXRjaEZuIiwiaXNOb2RlIiwiZGFuZ2Vyb3VzX3NldFRhcmdldENvbnNvbGVGb3JUZXN0aW5nIiwidGFyZ2V0Q29uc29sZUZvclRlc3RpbmciLCJhcHBlbmRDb21wb25lbnRTdGFjayIsImJyZWFrT25Db25zb2xlRXJyb3JzIiwic2hvd0lubGluZVdhcm5pbmdzQW5kRXJyb3JzIiwiaGlkZUNvbnNvbGVMb2dzSW5TdHJpY3RNb2RlIiwiX21ldGhvZDIiLCJvcmlnaW5hbE1ldGhvZCIsIl9fUkVBQ1RfREVWVE9PTFNfT1JJR0lOQUxfTUVUSE9EX18iLCJvdmVycmlkZU1ldGhvZCIsInNob3VsZEFwcGVuZFdhcm5pbmdTdGFjayIsImFscmVhZHlIYXNDb21wb25lbnRTdGFjayIsInNob3VsZFNob3dJbmxpbmVXYXJuaW5nc0FuZEVycm9ycyIsIl9zdGVwJHZhbHVlIiwiX19SRUFDVF9ERVZUT09MU19PVkVSUklERV9NRVRIT0RfXyIsInVucGF0Y2giLCJ1bnBhdGNoRm9yU3RyaWN0TW9kZUZuIiwib3ZlcnJpZGVDb25zb2xlTWV0aG9kcyIsIl9tZXRob2QzIiwiX19SRUFDVF9ERVZUT09MU19TVFJJQ1RfTU9ERV9PUklHSU5BTF9NRVRIT0RfXyIsIl9fUkVBQ1RfREVWVE9PTFNfU1RSSUNUX01PREVfT1ZFUlJJREVfTUVUSE9EX18iLCJfY2FzdEJvb2wiLCJfY2FzdEJvb2wyIiwiX2Nhc3RCb29sMyIsIl9jYXN0Qm9vbDQiLCJfY2FzdEJyb3dzZXJUaGVtZSIsIl9fUkVBQ1RfREVWVE9PTFNfQVBQRU5EX0NPTVBPTkVOVF9TVEFDS19fIiwiX19SRUFDVF9ERVZUT09MU19CUkVBS19PTl9DT05TT0xFX0VSUk9SU19fIiwiX19SRUFDVF9ERVZUT09MU19TSE9XX0lOTElORV9XQVJOSU5HU19BTkRfRVJST1JTX18iLCJfX1JFQUNUX0RFVlRPT0xTX0hJREVfQ09OU09MRV9MT0dTX0lOX1NUUklDVF9NT0RFX18iLCJfX1JFQUNUX0RFVlRPT0xTX0JST1dTRVJfVEhFTUVfXyIsIndyaXRlQ29uc29sZVBhdGNoU2V0dGluZ3NUb1dpbmRvdyIsInNldHRpbmdzIiwiaW5zdGFsbENvbnNvbGVGdW5jdGlvbnNUb1dpbmRvdyIsIl9fUkVBQ1RfREVWVE9PTFNfQ09OU09MRV9GVU5DVElPTlNfXyIsInJlZ2lzdGVyUmVuZGVyZXJXaXRoQ29uc29sZSIsImJyaWRnZV90eXBlb2YiLCJicmlkZ2VfdG9Db25zdW1hYmxlQXJyYXkiLCJicmlkZ2VfYXJyYXlXaXRob3V0SG9sZXMiLCJicmlkZ2VfaXRlcmFibGVUb0FycmF5IiwiYnJpZGdlX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiYnJpZGdlX25vbkl0ZXJhYmxlU3ByZWFkIiwiYnJpZGdlX2FycmF5TGlrZVRvQXJyYXkiLCJicmlkZ2VfY2xhc3NDYWxsQ2hlY2siLCJicmlkZ2VfZGVmaW5lUHJvcGVydGllcyIsImJyaWRnZV9jcmVhdGVDbGFzcyIsImJyaWRnZV9kZWZpbmVQcm9wZXJ0eSIsIkJBVENIX0RVUkFUSU9OIiwiQlJJREdFX1BST1RPQ09MIiwibWluTnBtVmVyc2lvbiIsIm1heE5wbVZlcnNpb24iLCJjdXJyZW50QnJpZGdlUHJvdG9jb2wiLCJCcmlkZ2UiLCJ3YWxsIiwiX3RpbWVvdXRJRCIsIl9tZXNzYWdlUXVldWUiLCJfdGhpcyRfd2FsbCIsIl93YWxsIiwiX2ZsdXNoIiwid2FzRm9yd2FyZGVkIiwiX3dhbGxVbmxpc3RlbiIsImxpc3RlbiIsIl9pc1NodXRkb3duIiwic2h1dGRvd24iLCJ3YWxsVW5saXN0ZW4iLCJzcmNfYnJpZGdlIiwiYWdlbnRfdHlwZW9mIiwiYWdlbnRfY2xhc3NDYWxsQ2hlY2siLCJhZ2VudF9kZWZpbmVQcm9wZXJ0aWVzIiwiYWdlbnRfY3JlYXRlQ2xhc3MiLCJhZ2VudF9pbmhlcml0cyIsImFnZW50X3NldFByb3RvdHlwZU9mIiwiYWdlbnRfY3JlYXRlU3VwZXIiLCJhZ2VudF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJhZ2VudF9nZXRQcm90b3R5cGVPZiIsImFnZW50X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJhZ2VudF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJhZ2VudF9kZWZpbmVQcm9wZXJ0eSIsIkFnZW50IiwiX3JlbmRlcmVySW50ZXJmYWNlcyIsIl9icmlkZ2UiLCJfaXNQcm9maWxpbmciLCJfcmVmNyIsIl9yZWY4IiwiX3BlcnNpc3RlZFNlbGVjdGlvbk1hdGNoIiwiX3BlcnNpc3RlZFNlbGVjdGlvbiIsIl90aHJvdHRsZWRQZXJzaXN0U2VsZWN0aW9uIiwiX3JlZjkiLCJfcmVmMTAiLCJfcmVmMTEiLCJfcmVmMTIiLCJfcmVmMTMiLCJfcmVmMTQiLCJfcmVmMTUiLCJfcmVmMTYiLCJfcmVmMTciLCJfdHJhY2VVcGRhdGVzRW5hYmxlZCIsInNlbGVjdE5vZGUiLCJfcmVjb3JkQ2hhbmdlRGVzY3JpcHRpb25zIiwic2VsZWN0ZWQiLCJfcmVmMTgiLCJfcmVmMTkiLCJfcmVmMjAiLCJfcmVmMjEiLCJwcmV2TWF0Y2giLCJuZXh0TWF0Y2giLCJwcmV2TWF0Y2hJRCIsIm5leHRNYXRjaElEIiwicGVyc2lzdGVkU2VsZWN0aW9uU3RyaW5nIiwiY29weUVsZW1lbnRQYXRoIiwiZ2V0QmFja2VuZFZlcnNpb24iLCJnZXRCcmlkZ2VQcm90b2NvbCIsImdldFByb2ZpbGluZ1N0YXR1cyIsInJlbG9hZEFuZFByb2ZpbGUiLCJzeW5jU2VsZWN0aW9uRnJvbU5hdGl2ZUVsZW1lbnRzUGFuZWwiLCJ1cGRhdGVDb25zb2xlUGF0Y2hTZXR0aW5ncyIsInZpZXdBdHRyaWJ1dGVTb3VyY2UiLCJ2aWV3RWxlbWVudFNvdXJjZSIsIm92ZXJyaWRlQ29udGV4dCIsIm92ZXJyaWRlU3RhdGUiLCJfdmVyc2lvbiIsImlzQmFja2VuZFN0b3JhZ2VBUElTdXBwb3J0ZWQiLCJfcmVmMjIiLCJiZXN0TWF0Y2giLCJzZXRSZW5kZXJlckludGVyZmFjZSIsInNlbGVjdGlvbiIsIm9uVW5zdXBwb3J0ZWRSZW5kZXJlciIsImhvb2tfdHlwZW9mIiwiaG9va190b0NvbnN1bWFibGVBcnJheSIsImhvb2tfYXJyYXlXaXRob3V0SG9sZXMiLCJob29rX2l0ZXJhYmxlVG9BcnJheSIsImhvb2tfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJob29rX25vbkl0ZXJhYmxlU3ByZWFkIiwiaG9va19hcnJheUxpa2VUb0FycmF5IiwiaW5zdGFsbEhvb2siLCJkZXRlY3RSZWFjdEJ1aWxkVHlwZSIsIl90b1N0cmluZyIsIk1vdW50IiwiX3JlbmRlck5ld1Jvb3RDb21wb25lbnQiLCJyZW5kZXJSb290Q29kZSIsIl90b1N0cmluZzIiLCJoYXNEZXRlY3RlZEJhZERDRSIsInBhdGNoQ29uc29sZUZvckluaXRpYWxSZW5kZXJJblN0cmljdE1vZGUiLCJ1bnBhdGNoQ29uc29sZUZvckluaXRpYWxSZW5kZXJJblN0cmljdE1vZGUiLCJyZW5kZXJlcnMiLCJyZWFjdEJ1aWxkVHlwZSIsIl90YXJnZXQkX19SRUFDVF9ERVZUTyIsIl9fUkVBQ1RfREVWVE9PTFNfQVRUQUNIX18iLCJmaWJlclJvb3RzIiwibW91bnRlZFJvb3RzIiwiaXNLbm93blJvb3QiLCJpc1VubW91bnRpbmciLCJzZXRTdHJpY3RNb2RlIiwib3Blbk1vZHVsZVJhbmdlc1N0YWNrIiwibW9kdWxlUmFuZ2VzIiwiZ2V0VG9wU3RhY2tGcmFtZVN0cmluZyIsImJhY2tlbmRzIiwiZGVjb3JhdGUiLCJvbGQiLCJkZWNvcmF0ZU1hbnkiLCJmbnMiLCJvbGRzIiwicmVzdG9yZU1hbnkiLCJsZWdhY3lfcmVuZGVyZXJfb3duS2V5cyIsImxlZ2FjeV9yZW5kZXJlcl9vYmplY3RTcHJlYWQiLCJsZWdhY3lfcmVuZGVyZXJfZGVmaW5lUHJvcGVydHkiLCJsZWdhY3lfcmVuZGVyZXJfdHlwZW9mIiwiZ2V0RGF0YSIsImludGVybmFsSW5zdGFuY2UiLCJfY3VycmVudEVsZW1lbnQiLCJnZXRFbGVtZW50VHlwZSIsIl9yZW5kZXJlZENvbXBvbmVudCIsIl9yZW5kZXJlZENoaWxkcmVuIiwicmVuZGVyZWRDaGlsZHJlbiIsInJlbmRlcmVyX2F0dGFjaCIsImlkVG9JbnRlcm5hbEluc3RhbmNlTWFwIiwiaW50ZXJuYWxJbnN0YW5jZVRvSURNYXAiLCJpbnRlcm5hbEluc3RhbmNlVG9Sb290SURNYXAiLCJnZXRJbnRlcm5hbElERm9yTmF0aXZlIiwiZmluZE5hdGl2ZU5vZGVGb3JJbnRlcm5hbElEIiwiQ29tcG9uZW50VHJlZSIsImdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlIiwiZ2V0SUQiLCJnZXROb2RlIiwiYXJlRXF1YWxBcnJheXMiLCJwYXJlbnRJRFN0YWNrIiwib2xkUmVjb25jaWxlck1ldGhvZHMiLCJSZWNvbmNpbGVyIiwibW91bnRDb21wb25lbnQiLCJob3N0Q29udGFpbmVySW5mbyIsIl90b3BMZXZlbFdyYXBwZXIiLCJwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkiLCJyZWNvcmRSZW9yZGVyIiwicmVjZWl2ZUNvbXBvbmVudCIsInVubW91bnRDb21wb25lbnQiLCJNaXhpbiIsIl9nZXREYXRhIiwibmV4dENoaWxkSURzIiwicGVuZGluZ1VubW91bnRlZElEcyIsImNyYXdsQW5kUmVjb3JkSW5pdGlhbE1vdW50cyIsIl9pbnN0YW5jZXNCeVJlYWN0Um9vdElEIiwiX2luc3RhbmNlc0J5Q29udGFpbmVySUQiLCJlbmNvZGVkS2V5IiwiZXhpc3RpbmdJRCIsInN0cmluZ0lEIiwiY3VycmVudGx5SW5zcGVjdGVkRWxlbWVudElEIiwiX2dldERhdGEyIiwibmF0aXZlTm9kZSIsImlzTWF0Y2hpbmdSZW5kZXIiLCJpbml0QmFja2VuZCIsInN1YnMiLCJvbkZhc3RSZWZyZXNoU2NoZWR1bGVkIiwib25Ib29rT3BlcmF0aW9ucyIsIm9uVHJhY2VVcGRhdGVzIiwiYXR0YWNoUmVuZGVyZXIiLCJyZWFjdERldnRvb2xzQWdlbnQiLCJvbkFnZW50U2h1dGRvd24iLCJyZXNvbHZlQm94U3R5bGUiLCJoYXNQYXJ0cyIsInN0eWxlRm9yQWxsIiwiX09iamVjdCRrZXlzIiwic3R5bGVGb3JIb3Jpem9udGFsIiwic3R5bGVGb3JMZWZ0Iiwic3R5bGVGb3JSaWdodCIsInN0eWxlRm9yRW5kIiwic3R5bGVGb3JTdGFydCIsInN0eWxlRm9yVmVydGljYWwiLCJzdHlsZUZvckJvdHRvbSIsInN0eWxlRm9yVG9wIiwic2V0dXBOYXRpdmVTdHlsZUVkaXRvcl90eXBlb2YiLCJzZXR1cE5hdGl2ZVN0eWxlRWRpdG9yX2RlZmluZVByb3BlcnR5Iiwic2V0dXBOYXRpdmVTdHlsZUVkaXRvciIsInJlc29sdmVOYXRpdmVTdHlsZSIsIm1lYXN1cmVTdHlsZSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwicmVuYW1lU3R5bGUiLCJzZXRTdHlsZSIsImlzU3VwcG9ydGVkIiwiRU1QVFlfQk9YX1NUWUxFIiwiY29tcG9uZW50SURUb1N0eWxlT3ZlcnJpZGVzIiwibGF5b3V0IiwicmVzb2x2ZWRTdHlsZSIsInN0eWxlT3ZlcnJpZGVzIiwic2hhbGxvd0Nsb25lIiwiY2xvbmVkIiwibmV3U3R5bGUiLCJjdXN0b21TdHlsZSIsInNldE5hdGl2ZVByb3BzIiwibGFzdEluZGV4IiwibGFzdExlbmd0aCIsImluaXRpYWxpemVVc2luZ0NhY2hlZFNldHRpbmdzIiwiaW5pdGlhbGl6ZUNvbnNvbGVQYXRjaFNldHRpbmdzIiwiZ2V0Q29uc29sZVBhdGNoU2V0dGluZ3MiLCJjb25zb2xlUGF0Y2hTZXR0aW5nc1N0cmluZyIsInBhcnNlZENvbnNvbGVQYXRjaFNldHRpbmdzIiwicGFyc2VDb25zb2xlUGF0Y2hTZXR0aW5ncyIsInBhcnNlZFZhbHVlIiwiY2FjaGVDb25zb2xlUGF0Y2hTZXR0aW5ncyIsInNldENvbnNvbGVQYXRjaFNldHRpbmdzIiwic2F2ZWRDb21wb25lbnRGaWx0ZXJzIiwiYmFja2VuZF9kZWJ1ZyIsIl9yZWYkaG9zdCIsIl9yZWYkdXNlSHR0cHMiLCJ1c2VIdHRwcyIsIl9yZWYkcG9ydCIsIl9yZWYkcmVzb2x2ZVJOU3R5bGUiLCJfcmVmJHJldHJ5Q29ubmVjdGlvbkQiLCJyZXRyeUNvbm5lY3Rpb25EZWxheSIsIl9yZWYkaXNBcHBBY3RpdmUiLCJyZXRyeVRpbWVvdXRJRCIsInNjaGVkdWxlUmV0cnkiLCJtZXNzYWdlTGlzdGVuZXJzIiwidXJpIiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVGYWlsZWQiLCJoYW5kbGVNZXNzYWdlIiwidHJhbnNmZXJhYmxlIiwiY29uc29sZVBhdGNoU2V0dGluZ3MiLCJsYXp5UmVzb2x2ZVJOU3R5bGUiLCJsYXp5TmF0aXZlU3R5bGVFZGl0b3JWYWxpZEF0dHJpYnV0ZXMiLCJpbml0QWZ0ZXJUaWNrIiwiX2xvZ0Vycm9yIiwiX05hdGl2ZUFwcFN0YXRlIiwiTmF0aXZlQXBwU3RhdGUiLCJfZW1pdHRlciIsImluaXRpYWxBcHBTdGF0ZSIsImV2ZW50VXBkYXRlZCIsImFwcFN0YXRlRGF0YSIsImFwcF9zdGF0ZSIsImdldEN1cnJlbnRBcHBTdGF0ZSIsImNoYW5nZUhhbmRsZXIiLCJtZW1vcnlXYXJuaW5nSGFuZGxlciIsImZvY3VzT3JCbHVySGFuZGxlciIsImhhc0ZvY3VzIiwiX3Byb2Nlc3NBc3BlY3RSYXRpbyIsIl9wcm9jZXNzRm9udFZhcmlhbnQiLCJfcHJvY2Vzc1RyYW5zZm9ybSIsIl9wcm9jZXNzVHJhbnNmb3JtT3JpZ2luIiwiX3NpemVzRGlmZmVyIiwiY29sb3JBdHRyaWJ1dGVzIiwiYWxpZ25Db250ZW50IiwiYWxpZ25TZWxmIiwiYXNwZWN0UmF0aW8iLCJwcm9jZXNzQXNwZWN0UmF0aW8iLCJib3JkZXJFbmRXaWR0aCIsImJvcmRlclN0YXJ0V2lkdGgiLCJjb2x1bW5HYXAiLCJib3JkZXJXaWR0aCIsImRpcmVjdGlvbiIsImZsZXhCYXNpcyIsImZsZXhTaHJpbmsiLCJmbGV4V3JhcCIsImdhcCIsImluc2V0IiwiaW5zZXRCbG9jayIsImluc2V0QmxvY2tFbmQiLCJpbnNldEJsb2NrU3RhcnQiLCJpbnNldElubGluZSIsImluc2V0SW5saW5lRW5kIiwiaW5zZXRJbmxpbmVTdGFydCIsIm1hcmdpbkJsb2NrIiwibWFyZ2luQmxvY2tFbmQiLCJtYXJnaW5CbG9ja1N0YXJ0IiwibWFyZ2luRW5kIiwibWFyZ2luSW5saW5lIiwibWFyZ2luSW5saW5lRW5kIiwibWFyZ2luSW5saW5lU3RhcnQiLCJtYXJnaW5TdGFydCIsIm1heEhlaWdodCIsIm1heFdpZHRoIiwibWluSGVpZ2h0IiwibWluV2lkdGgiLCJwYWRkaW5nQmxvY2siLCJwYWRkaW5nQmxvY2tFbmQiLCJwYWRkaW5nQmxvY2tTdGFydCIsInBhZGRpbmdFbmQiLCJwYWRkaW5nSW5saW5lIiwicGFkZGluZ0lubGluZUVuZCIsInBhZGRpbmdJbmxpbmVTdGFydCIsInBhZGRpbmdTdGFydCIsInNoYWRvd0NvbG9yIiwic2hhZG93T2Zmc2V0Iiwic2l6ZXNEaWZmZXIiLCJzaGFkb3dPcGFjaXR5Iiwic2hhZG93UmFkaXVzIiwidHJhbnNmb3JtIiwicHJvY2Vzc1RyYW5zZm9ybSIsInRyYW5zZm9ybU9yaWdpbiIsInByb2Nlc3NUcmFuc2Zvcm1PcmlnaW4iLCJiYWNrZmFjZVZpc2liaWxpdHkiLCJib3JkZXJCbG9ja0NvbG9yIiwiYm9yZGVyQmxvY2tFbmRDb2xvciIsImJvcmRlckJsb2NrU3RhcnRDb2xvciIsImJvcmRlckJvdHRvbUVuZFJhZGl1cyIsImJvcmRlckJvdHRvbUxlZnRSYWRpdXMiLCJib3JkZXJCb3R0b21SaWdodFJhZGl1cyIsImJvcmRlckJvdHRvbVN0YXJ0UmFkaXVzIiwiYm9yZGVyQ3VydmUiLCJib3JkZXJFbmRDb2xvciIsImJvcmRlckVuZEVuZFJhZGl1cyIsImJvcmRlckVuZFN0YXJ0UmFkaXVzIiwiYm9yZGVyTGVmdENvbG9yIiwiYm9yZGVyUmlnaHRDb2xvciIsImJvcmRlclN0YXJ0Q29sb3IiLCJib3JkZXJTdGFydEVuZFJhZGl1cyIsImJvcmRlclN0YXJ0U3RhcnRSYWRpdXMiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclRvcEVuZFJhZGl1cyIsImJvcmRlclRvcExlZnRSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsImJvcmRlclRvcFN0YXJ0UmFkaXVzIiwib3BhY2l0eSIsImZvbnRTdHlsZSIsImZvbnRWYXJpYW50IiwicHJvY2Vzc0ZvbnRWYXJpYW50IiwiaW5jbHVkZUZvbnRQYWRkaW5nIiwibGV0dGVyU3BhY2luZyIsInRleHRBbGlnbiIsInRleHRBbGlnblZlcnRpY2FsIiwidGV4dERlY29yYXRpb25Db2xvciIsInRleHREZWNvcmF0aW9uTGluZSIsInRleHREZWNvcmF0aW9uU3R5bGUiLCJ0ZXh0U2hhZG93Q29sb3IiLCJ0ZXh0U2hhZG93T2Zmc2V0IiwidGV4dFNoYWRvd1JhZGl1cyIsInRleHRUcmFuc2Zvcm0iLCJ1c2VyU2VsZWN0IiwidmVydGljYWxBbGlnbiIsIndyaXRpbmdEaXJlY3Rpb24iLCJvdmVybGF5Q29sb3IiLCJyZXNpemVNb2RlIiwidGludENvbG9yIiwib2JqZWN0Rml0IiwiaGFzTm9uTnVtZXJpY1ZhbHVlcyIsInJlZ2V4IiwidHJhbnNmb3JtQXJyYXkiLCJfZ2V0S2V5QW5kVmFsdWVGcm9tQ1MiLCJfZ2V0S2V5QW5kVmFsdWVGcm9tQ1NTVHJhbnNmb3JtIiwiX3ZhbGlkYXRlVHJhbnNmb3JtcyIsIl9hcmdzJG1hdGNoIiwiYXJnc1dpdGhVbml0c1JlZ2V4IiwicGFyc2VkQXJncyIsIm1pc3NpbmdVbml0T2ZNZWFzdXJlbWVudCIsInVuaXRPZk1lYXN1cmVtZW50IiwiYXJnTWF0Y2hlcyIsInRyYW5zZm9ybWF0aW9uIiwiX3ZhbGlkYXRlVHJhbnNmb3JtIiwibXVsdGl2YWx1ZVRyYW5zZm9ybXMiLCJJTkRFWF9YIiwiSU5ERVhfWSIsIklOREVYX1oiLCJ0cmFuc2Zvcm1PcmlnaW5TdHJpbmciLCJ0cmFuc2Zvcm1PcmlnaW5BcnJheSIsIm5leHRJbmRleCIsInZhbHVlTG93ZXIiLCJob3Jpem9udGFsIiwiX3ZhbGlkYXRlVHJhbnNmb3JtT3JpZ2luIiwiX3RyYW5zZm9ybU9yaWdpbiIsImR1bW15U2l6ZSIsIm9uZSIsInR3byIsImRlZmF1bHRlZE9uZSIsImRlZmF1bHRlZFR3byIsIl9TZXR0aW5ncyIsIl9EZXZTZXR0aW5ncyIsIkNPTlNPTEVfUEFUQ0hfU0VUVElOR1NfS0VZIiwiUFJPRklMSU5HX1NFVFRJTkdTX0tFWSIsIkRldlRvb2xzU2V0dGluZ3NNYW5hZ2VyIiwibmV3Q29uc29sZVBhdGNoU2V0dGluZ3MiLCJfZGVmaW5lUHJvcGVydHkyIiwic2V0UHJvZmlsaW5nU2V0dGluZ3MiLCJuZXdQcm9maWxpbmdTZXR0aW5ncyIsImdldFByb2ZpbGluZ1NldHRpbmdzIiwiX05hdGl2ZVNldHRpbmdzTWFuYWdlciIsIl9zZXR0aW5ncyIsIk5hdGl2ZVNldHRpbmdzTWFuYWdlciIsInNldFZhbHVlcyIsIndhdGNoS2V5cyIsInNpZCIsImNsZWFyV2F0Y2giLCJ3YXRjaElkIiwiX3NlbmRPYnNlcnZhdGlvbnMiLCJzdHlsZUxlbmd0aCIsImNvbXB1dGVkU3R5bGUiLCJfX3JlZ2lzdGVySW5zcGVjdG9yQWdlbnQiLCJnZXRUaW1lc3RhbXAiLCJfX2luc3BlY3RvclRpbWVzdGFtcCIsIkludGVyY2VwdG9yIiwiX2FnZW50IiwiX3JlcXVlc3RzIiwiaW5pdGlhbFByaW9yaXR5IiwiZG9jdW1lbnRVUkwiLCJmcmFtZUlkIiwibG9hZGVySWQiLCJpbml0aWF0b3IiLCJzZW5kRXZlbnQiLCJyZXF1ZXN0SGVhZGVycyIsIm1pbWVUeXBlIiwiX2dldE1pbWVUeXBlIiwiY29ubmVjdGlvblJldXNlZCIsImNvbm5lY3Rpb25JZCIsImVuY29kZWREYXRhTGVuZ3RoIiwic2VjdXJpdHlTdGF0ZSIsImV4aXN0aW5nRGF0YSIsImRhdGFMZW5ndGgiLCJlcnJvclRleHQiLCJOZXR3b3JrQWdlbnQiLCJfSW5zcGVjdG9yQWdlbnQiLCJtYXhSZXNvdXJjZUJ1ZmZlclNpemUiLCJtYXhUb3RhbEJ1ZmZlclNpemUiLCJnZXRSZXNwb25zZUJvZHkiLCJiYXNlNjRFbmNvZGVkIiwiRE9NQUlOIiwiSW5zcGVjdG9yQWdlbnQiLCJldmVudFNlbmRlciIsIl9ldmVudFNlbmRlciIsIlJlYWN0UmVmcmVzaFJ1bnRpbWUiLCJpbmplY3RJbnRvR2xvYmFsSG9vayIsImhhc1VucmVjb3ZlcmFibGVFcnJvcnMiLCJhbGxGYW1pbGllc0J5SUQiLCJhbGxGYW1pbGllc0J5VHlwZSIsImFsbFNpZ25hdHVyZXNCeVR5cGUiLCJ1cGRhdGVkRmFtaWxpZXNCeVR5cGUiLCJwZW5kaW5nVXBkYXRlcyIsImhlbHBlcnNCeVJlbmRlcmVySUQiLCJoZWxwZXJzQnlSb290IiwiZmFpbGVkUm9vdHMiLCJyb290RWxlbWVudHMiLCJpc1BlcmZvcm1pbmdSZWZyZXNoIiwiY29tcHV0ZUZ1bGxLZXkiLCJmdWxsS2V5Iiwib3duS2V5IiwiZ2V0Q3VzdG9tSG9va3MiLCJmb3JjZVJlc2V0IiwibmVzdGVkSG9va1NpZ25hdHVyZSIsIm5lc3RlZEhvb2tLZXkiLCJoYXZlRXF1YWxTaWduYXR1cmVzIiwiY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4iLCJjbG9uZU1hcCIsImNsb25lU2V0IiwiZ2V0UHJvcGVydHkiLCJ1cGRhdGVzIiwiaGVscGVycyIsImZhaWxlZFJvb3RzU25hcHNob3QiLCJtb3VudGVkUm9vdHNTbmFwc2hvdCIsImhlbHBlcnNCeVJvb3RTbmFwc2hvdCIsInNldFNpZ25hdHVyZSIsImNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSIsImdldEZhbWlseUJ5SUQiLCJmaW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzIiwiYWZmZWN0ZWRJbnN0YW5jZXMiLCJpbnN0YW5jZXNGb3JSb290IiwiZ2xvYmFsT2JqZWN0IiwibmV4dElEIiwiaW5qZWN0ZWQiLCJtYXliZVByaW9yaXR5TGV2ZWwiLCJvbGRJbmplY3QiLCJvbGRPbkNvbW1pdEZpYmVyUm9vdCIsIm9sZE9uU2NoZWR1bGVGaWJlclJvb3QiLCJfZ2V0TW91bnRlZFJvb3RDb3VudCIsInNhdmVkVHlwZSIsImhhc0N1c3RvbUhvb2tzIiwiZGlkQ29sbGVjdEhvb2tzIiwib3duTmFtZXMiLCJfUkNUTmV0d29ya2luZyIsIl9ITVJDbGllbnQiLCJfTG9hZGluZ1ZpZXciLCJwZW5kaW5nUmVxdWVzdHMiLCJjYWNoZWRQcm9taXNlc0J5VXJsIiwiYXN5bmNSZXF1ZXN0IiwiZGF0YUxpc3RlbmVyIiwiY29tcGxldGVMaXN0ZW5lciIsInJlc3BvbnNlTGlzdGVuZXIiLCJpbmNyZW1lbnRhbERhdGFMaXN0ZW5lciIsIl9kYXRhTGlzdGVuZXIiLCJfY29tcGxldGVMaXN0ZW5lciIsIl9yZXNwb25zZUxpc3RlbmVyIiwiX2luY3JlbWVudGFsRGF0YUxpc3RlIiwiYnVpbGRVcmxGb3JCdW5kbGUiLCJidW5kbGVQYXRoQW5kUXVlcnkiLCJzZXJ2ZXJVcmwiLCJsb2FkUHJvbWlzZSIsIl9CYXRjaGVkQnJpZGdlIiwiX0J1Z1JlcG9ydGluZyIsIl9TY2VuZVRyYWNrZXIiLCJfSGVhZGxlc3NKc1Rhc2tFcnJvciIsIl9OYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQiLCJfcmVuZGVyQXBwbGljYXRpb24iLCJydW5uYWJsZXMiLCJydW5Db3VudCIsInRhc2tQcm92aWRlcnMiLCJ0YXNrQ2FuY2VsUHJvdmlkZXJzIiwiY29tcG9uZW50UHJvdmlkZXJJbnN0cnVtZW50YXRpb25Ib29rIiwid3JhcHBlckNvbXBvbmVudFByb3ZpZGVyIiwic2hvd0FyY2hpdGVjdHVyZUluZGljYXRvciIsInNldFdyYXBwZXJDb21wb25lbnRQcm92aWRlciIsImVuYWJsZUFyY2hpdGVjdHVyZUluZGljYXRvciIsInJlZ2lzdGVyQ29uZmlnIiwiYXBwQ29uZmlnIiwicmVnaXN0ZXJSdW5uYWJsZSIsImFwcEtleSIsInNlY3Rpb24iLCJjb21wb25lbnRQcm92aWRlciIsInNjb3BlZFBlcmZvcm1hbmNlTG9nZ2VyIiwiYXBwUGFyYW1ldGVycyIsImRpc3BsYXlNb2RlIiwiX2FwcFBhcmFtZXRlcnMkaW5pdGlhIiwiY29uY3VycmVudFJvb3RFbmFibGVkIiwiaW5pdGlhbFByb3BzIiwicmVuZGVyQXBwbGljYXRpb24iLCJmYWJyaWMiLCJyZWdpc3RlclNlY3Rpb24iLCJnZXRBcHBLZXlzIiwiZ2V0U2VjdGlvbktleXMiLCJnZXRTZWN0aW9ucyIsImdldFJ1bm5hYmxlIiwiZ2V0UmVnaXN0cnkiLCJzZXRDb21wb25lbnRQcm92aWRlckluc3RydW1lbnRhdGlvbkhvb2siLCJydW5BcHBsaWNhdGlvbiIsImxvZ1BhcmFtcyIsIkJ1Z1JlcG9ydGluZyIsImFkZFNvdXJjZSIsIlNjZW5lVHJhY2tlciIsInNldEFjdGl2ZVNjZW5lIiwiY29lcmNlRGlzcGxheU1vZGUiLCJzZXRTdXJmYWNlUHJvcHMiLCJ1bm1vdW50QXBwbGljYXRpb25Db21wb25lbnRBdFJvb3RUYWciLCJyZWdpc3RlckhlYWRsZXNzVGFzayIsInRhc2tLZXkiLCJ0YXNrUHJvdmlkZXIiLCJyZWdpc3RlckNhbmNlbGxhYmxlSGVhZGxlc3NUYXNrIiwidGFza0NhbmNlbFByb3ZpZGVyIiwic3RhcnRIZWFkbGVzc1Rhc2siLCJ0YXNrSWQiLCJOYXRpdmVIZWFkbGVzc0pzVGFza1N1cHBvcnQiLCJub3RpZnlUYXNrRmluaXNoZWQiLCJIZWFkbGVzc0pzVGFza0Vycm9yIiwibm90aWZ5VGFza1JldHJ5IiwicmV0cnlQb3N0ZWQiLCJjYW5jZWxIZWFkbGVzc1Rhc2siLCJqZXN0IiwiTm9PcCIsIlJOJEFwcFJlZ2lzdHJ5IiwiUk4kU3VyZmFjZVJlZ2lzdHJ5IiwicmVuZGVyU3VyZmFjZSIsIl9OYXRpdmVCdWdSZXBvcnRpbmciLCJkZWZhdWx0RXh0cmFzIiwiYWRkRmlsZVNvdXJjZSIsIl9tYXliZUluaXQiLCJjb2xsZWN0RXh0cmFEYXRhIiwiX3JlZGJveFN1YnNjcmlwdGlvbiIsIl9hZGRTb3VyY2UiLCJfZXh0cmFTb3VyY2VzIiwiX2ZpbGVTb3VyY2VzIiwiZmlsZURhdGEiLCJOYXRpdmVCdWdSZXBvcnRpbmciLCJzZXRFeHRyYURhdGEiLCJmaWxlcyIsImR1bXBSZWFjdFRyZWUiLCJnZXRSZWFjdFRyZWUiLCJfbGlzdGVuZXJzIiwiX2FjdGl2ZVNjZW5lIiwic2NlbmUiLCJnZXRBY3RpdmVTY2VuZSIsImFkZEFjdGl2ZVNjZW5lQ2hhbmdlZExpc3RlbmVyIiwiX3dyYXBOYXRpdmVTdXBlcjIiLCJfR2xvYmFsUGVyZm9ybWFuY2VMb2dnZXIiLCJfUGVyZm9ybWFuY2VMb2dnZXJDb250ZXh0IiwiX0FwcENvbnRhaW5lciIsIl9EaXNwbGF5TW9kZSIsIl9nZXRDYWNoZWRDb21wb25lbnRXaXRoRGVidWdOYW1lIiwiUmVuZGVyZXIiLCJSb290Q29tcG9uZW50IiwiV3JhcHBlckNvbXBvbmVudCIsImlzTG9nQm94IiwiZGVidWdOYW1lIiwidXNlT2Zmc2NyZWVuIiwicmVuZGVyYWJsZSIsImludGVybmFsX2V4Y2x1ZGVMb2dCb3giLCJSb290Q29tcG9uZW50V2l0aE1lYW5pbmdmdWxOYW1lIiwiZ2V0Q2FjaGVkQ29tcG9uZW50V2l0aERlYnVnTmFtZSIsIkFjdGl2aXR5IiwiRGlzcGxheU1vZGUiLCJWSVNJQkxFIiwidXNlQ29uY3VycmVudFJvb3RPdmVycmlkZSIsIlBlcmZvcm1hbmNlTG9nZ2VyQ29udGV4dCIsInVzZVBlcmZvcm1hbmNlTG9nZ2VyIiwiQXBwQ29udGFpbmVyIiwiX1JlYWN0TmF0aXZlU3R5bGVBdHRyaWJ1dGVzIiwiX1ZpZXciLCJfRGVidWdnaW5nT3ZlcmxheSIsIl91c2VTdWJzY3JpYmVUb0RlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeSIsIl9SZWFjdERldlRvb2xzT3ZlcmxheSIsIl9Mb2dCb3hOb3RpZmljYXRpb25Db250YWluZXIiLCJfU3R5bGVTaGVldCIsInJlYWN0RGV2VG9vbHNIb29rIiwiSW5zcGVjdG9yRGVmZXJyZWQiLCJpbnNwZWN0ZWRWaWV3UmVmIiwib25JbnNwZWN0ZWRWaWV3UmVyZW5kZXJSZXF1ZXN0IiwicmVhY3REZXZUb29sc0FnZW50IiwiSW5zcGVjdG9yIiwib25SZXF1ZXN0UmVyZW5kZXJBcHAiLCJfcmVmMiRpbnRlcm5hbF9leGNsdWQiLCJpbnRlcm5hbF9leGNsdWRlSW5zcGVjdG9yIiwiX3JlZjIkaW50ZXJuYWxfZXhjbHVkMiIsImFwcENvbnRhaW5lclJvb3RWaWV3UmVmIiwiaW5uZXJWaWV3UmVmIiwiZGVidWdnaW5nT3ZlcmxheVJlZiIsInVzZVN1YnNjcmliZVRvRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsInNldEtleSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2hvdWxkUmVuZGVySW5zcGVjdG9yIiwic2V0U2hvdWxkUmVuZGVySW5zcGVjdG9yIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzZXRSZWFjdERldlRvb2xzQWdlbnQiLCJpbnNwZWN0b3JTdWJzY3JpcHRpb24iLCJyZWFjdERldlRvb2xzQWdlbnRMaXN0ZW5lciIsIl9pbnNwZWN0b3JTdWJzY3JpcHRpbyIsImlubmVyVmlldyIsImNvbGxhcHNhYmxlIiwiY3JlYXRlUm9vdFRhZyIsIl9mbGF0dGVuU3R5bGUiLCJfVGV4dEFuY2VzdG9yIiwiX1ZpZXdOYXRpdmVDb21wb25lbnQiLCJmb3J3YXJkZWRSZWYiLCJfYXJpYUxhYmVsbGVkQnkkc3BsaXQiLCJhY2Nlc3NpYmlsaXR5RWxlbWVudHNIaWRkZW4iLCJhY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeSIsImFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uIiwiYWNjZXNzaWJpbGl0eVN0YXRlIiwiYWNjZXNzaWJpbGl0eVZhbHVlIiwiYXJpYUJ1c3kiLCJhcmlhQ2hlY2tlZCIsImFyaWFEaXNhYmxlZCIsImFyaWFFeHBhbmRlZCIsImFyaWFIaWRkZW4iLCJhcmlhTGFiZWwiLCJhcmlhTGFiZWxsZWRCeSIsImFyaWFMaXZlIiwiYXJpYVNlbGVjdGVkIiwiYXJpYVZhbHVlTWF4IiwiYXJpYVZhbHVlTWluIiwiYXJpYVZhbHVlTm93IiwiYXJpYVZhbHVlVGV4dCIsImZvY3VzYWJsZSIsImltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkiLCJuYXRpdmVJRCIsInRhYkluZGV4Iiwib3RoZXJQcm9wcyIsImhhc1RleHRBbmNlc3RvciIsIlRleHRBbmNlc3RvciIsIl9hY2Nlc3NpYmlsaXR5TGFiZWxsZWRCeSIsIl9hY2Nlc3NpYmlsaXR5U3RhdGUiLCJidXN5IiwiY2hlY2tlZCIsImRpc2FibGVkIiwiZXhwYW5kZWQiLCJfYWNjZXNzaWJpbGl0eVZhbHVlIiwibmV3UG9pbnRlckV2ZW50cyIsImFjdHVhbFZpZXciLCJUZXh0QW5jZXN0b3JDb250ZXh0IiwiTmF0aXZlQ29tcG9uZW50UmVnaXN0cnkiLCJfY29kZWdlbk5hdGl2ZUNvbW1hbmRzIiwiX19JTlRFUk5BTF9WSUVXX0NPTkZJRyIsInJlbW92ZUNsaXBwZWRTdWJ2aWV3cyIsImFjY2Vzc2libGUiLCJoYXNUVlByZWZlcnJlZEZvY3VzIiwibmV4dEZvY3VzRG93biIsIm5leHRGb2N1c0ZvcndhcmQiLCJuZXh0Rm9jdXNMZWZ0IiwibmV4dEZvY3VzUmlnaHQiLCJuZXh0Rm9jdXNVcCIsImhpdFNsb3AiLCJuYXRpdmVCYWNrZ3JvdW5kQW5kcm9pZCIsIm5hdGl2ZUZvcmVncm91bmRBbmRyb2lkIiwibmVlZHNPZmZzY3JlZW5BbHBoYUNvbXBvc2l0aW5nIiwiZXhwZXJpbWVudGFsX2xheW91dENvbmZvcm1hbmNlIiwiVmlld05hdGl2ZUNvbXBvbmVudCIsIkNvbW1hbmRzIiwiY29kZWdlbk5hdGl2ZUNvbW1hbmRzIiwic3VwcG9ydGVkQ29tbWFuZHMiLCJfZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcyIsIl9VSU1hbmFnZXIiLCJfdmVyaWZ5Q29tcG9uZW50QXR0cmlidXRlRXF1aXZhbGVuY2UiLCJTdGF0aWNWaWV3Q29uZmlnVmFsaWRhdG9yIiwiZ2V0UnVudGltZUNvbmZpZyIsInNldFJ1bnRpbWVDb25maWdQcm92aWRlciIsInJ1bnRpbWVDb25maWdQcm92aWRlciIsInZpZXdDb25maWdQcm92aWRlciIsIl9nZXRSdW50aW1lQ29uZmlnIiwic3RyaWN0IiwidmVyaWZ5IiwiZ2V0TmF0aXZlQ29tcG9uZW50QXR0cmlidXRlcyIsImNyZWF0ZVZpZXdDb25maWciLCJuYXRpdmVWaWV3Q29uZmlnIiwic3RhdGljVmlld0NvbmZpZyIsInZhbGlkYXRpb25PdXRwdXQiLCJzdHJpbmdpZnlWYWxpZGF0aW9uUmVzdWx0IiwidmVyaWZ5Q29tcG9uZW50QXR0cmlidXRlRXF1aXZhbGVuY2UiLCJnZXRXaXRoRmFsbGJhY2tfREVQUkVDQVRFRCIsImhhc05hdGl2ZVZpZXdDb25maWciLCJGYWxsYmFja05hdGl2ZUNvbXBvbmVudCIsImdldFZpZXdNYW5hZ2VyQ29uZmlnIiwidW5zdGFibGVfaGFzU3RhdGljVmlld0NvbmZpZyIsIl9nZXRSdW50aW1lQ29uZmlnMiIsIl9idWJibGluZ0V2ZW50VHlwZXMiLCJfZGlyZWN0RXZlbnRUeXBlcyIsIk5hdGl2ZVByb3BzIiwiYmFzZU1vZHVsZU5hbWUiLCJidWJibGluZ0V2ZW50VHlwZXMiLCJkaXJlY3RFdmVudFR5cGVzIiwibmF0aXZlUHJvcHMiLCJiYXNlTW9kdWxlIiwiZ2V0RGlmZmVyRm9yVHlwZSIsImdldFByb2Nlc3NvckZvclR5cGUiLCJhdHRhY2hEZWZhdWx0RXZlbnRUeXBlcyIsIlZpZXdNYW5hZ2VyTmFtZXMiLCJMYXp5Vmlld01hbmFnZXJzRW5hYmxlZCIsIm1lcmdlIiwiZ2V0RGVmYXVsdEV2ZW50VHlwZXMiLCJnZW5lcmljQnViYmxpbmdFdmVudFR5cGVzIiwiZ2VuZXJpY0RpcmVjdEV2ZW50VHlwZXMiLCJzb3VyY2VWYWx1ZSIsImRlc3RpbmF0aW9uVmFsdWUiLCJfbnVsbHRocm93cyIsImlzRmFicmljUmVhY3RUYWciLCJVSU1hbmFnZXJJbXBsIiwiRmFicmljVUlNYW5hZ2VyIiwibnVsbHRocm93cyIsImdldEZhYnJpY1VJTWFuYWdlciIsInNoYWRvd05vZGUiLCJmaW5kU2hhZG93Tm9kZUJ5VGFnX0RFUFJFQ0FURUQiLCJtZWFzdXJlSW5XaW5kb3ciLCJtZWFzdXJlTGF5b3V0IiwiYW5jZXN0b3JSZWFjdFRhZyIsImVycm9yQ2FsbGJhY2siLCJhbmNlc3RvclNoYWRvd05vZGUiLCJtZWFzdXJlTGF5b3V0UmVsYXRpdmVUb1BhcmVudCIsImNvbW1hbmROYW1lIiwiY29tbWFuZEFyZ3MiLCJfZGVmaW5lTGF6eU9iamVjdFByb3BlcnR5IiwicmFpc2VTb2Z0RXJyb3IiLCJkZXRhaWxzIiwiZ2V0VUlNYW5hZ2VyQ29uc3RhbnRzIiwiUk4kTGVnYWN5SW50ZXJvcF9VSU1hbmFnZXJfZ2V0Q29uc3RhbnRzIiwiZ2V0VUlNYW5hZ2VyQ29uc3RhbnRzQ2FjaGVkIiwid2FzQ2FsbGVkT25jZSIsImdldENvbnN0YW50c0ZvclZpZXdNYW5hZ2VyIiwiUk4kTGVnYWN5SW50ZXJvcF9VSU1hbmFnZXJfZ2V0Q29uc3RhbnRzRm9yVmlld01hbmFnZXIiLCJSTiRMZWdhY3lJbnRlcm9wX1VJTWFuYWdlcl9nZXREZWZhdWx0RXZlbnRUeXBlcyIsImdldERlZmF1bHRFdmVudFR5cGVzQ2FjaGVkIiwiVUlNYW5hZ2VySlNPdmVycmlkZW5BUElzIiwiY29tbWFuZElEIiwiVUlNYW5hZ2VySlNVbnVzZWRJbk5ld0FyY2hBUElzIiwiY3JlYXRlVmlldyIsInZpZXdOYW1lIiwidXBkYXRlVmlldyIsInNldENoaWxkcmVuIiwicmVhY3RUYWdzIiwibWFuYWdlQ2hpbGRyZW4iLCJtb3ZlRnJvbUluZGljZXMiLCJtb3ZlVG9JbmRpY2VzIiwiYWRkQ2hpbGRSZWFjdFRhZ3MiLCJhZGRBdEluZGljZXMiLCJyZW1vdmVBdEluZGljZXMiLCJzZXRKU1Jlc3BvbmRlciIsImNsZWFySlNSZXNwb25kZXIiLCJVSU1hbmFnZXJKU0RlcHJlY2F0ZWRQbGF0Zm9ybUFQSXMiLCJzaG93UG9wdXBNZW51Iiwic3VjY2VzcyIsImRpc21pc3NQb3B1cE1lbnUiLCJVSU1hbmFnZXJKU1BsYXRmb3JtQVBJcyIsInZpZXdNYW5hZ2VyTmFtZSIsInNldExheW91dEFuaW1hdGlvbkVuYWJsZWRFeHBlcmltZW50YWwiLCJBY2Nlc3NpYmlsaXR5RXZlbnQiLCJUWVBFX1ZJRVdfRk9DVVNFRCIsIlRZUEVfV0lORE9XX1NUQVRFX0NIQU5HRUQiLCJUWVBFX1ZJRVdfQ0xJQ0tFRCIsIlRZUEVfVklFV19IT1ZFUl9FTlRFUiIsImxhemlseUxvYWRWaWV3IiwiZm9jdXMiLCJibHVyIiwiVUlNYW5hZ2VySlMiLCJoYXNWaWV3TWFuYWdlckNvbmZpZyIsInVuc3RhYmxlX2hhc0NvbXBvbmVudCIsInBvaW50IiwiaW5zdGFuY2VIYW5kbGUiLCJ2aWV3SXNEZXNjZW5kYW50T2YiLCJET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImNvbmZpZ3VyZU5leHRMYXlvdXRBbmltYXRpb24iLCJ2aWV3Q29uZmlnTmFtZSIsIm5hdGl2ZUZhYnJpY1VJTWFuYWdlclByb3h5IiwiQ0FDSEVEX1BST1BFUlRJRVMiLCJjcmVhdGVQcm94eVdpdGhDYWNoZWRQcm9wZXJ0aWVzIiwicHJvcGVydGllc1RvQ2FjaGUiLCJwcm94eSIsInByb3BlcnR5TmFtZSIsImNvbXBvbmVudE5hbWVUb0V4aXN0cyIsImhhc05hdGl2ZUNvbXBvbmVudCIsIl9fbmF0aXZlQ29tcG9uZW50UmVnaXN0cnlfX2hhc0NvbXBvbmVudCIsIl9OYXRpdmVVSU1hbmFnZXIiLCJ2aWV3TWFuYWdlckNvbmZpZ3MiLCJ0cmllZExvYWRpbmdDb25maWciLCJOYXRpdmVVSU1hbmFnZXJDb25zdGFudHMiLCJpc05hdGl2ZVVJTWFuYWdlckNvbnN0YW50c1NldCIsIk5hdGl2ZVVJTWFuYWdlciIsImxhemlmeVZpZXdNYW5hZ2VyQ29uZmlnIiwiTWFuYWdlciIsInZpZXdNYW5hZ2VyIiwiY29tbWFuZHMiLCJtYXRyaWNlc0RpZmZlciIsImR1bW15UG9pbnQiLCJwb2ludHNEaWZmZXIiLCJkdW1teUluc2V0cyIsImluc2V0c0RpZmZlciIsIlRSQU5TUEFSRU5UIiwicHJvY2Vzc0NvbG9yQXJyYXkiLCJwcm9jZXNzQ29sb3JFbGVtZW50IiwiX2N1c3RvbVNvdXJjZVRyYW5zZm9ybWVycyIsIl9zZXJ2ZXJVUkwiLCJfc2NyaXB0VVJMIiwiX3NvdXJjZUNvZGVTY3JpcHRVUkwiLCJnZXRTb3VyY2VDb2RlU2NyaXB0VVJMIiwiU291cmNlQ29kZSIsImdldERldlNlcnZlclVSTCIsInNvdXJjZUNvZGVTY3JpcHRVUkwiLCJfY29lcmNlTG9jYWxTY3JpcHRVUkwiLCJub3JtYWxpemVkU2NyaXB0VVJMIiwiZ2V0U2NyaXB0VVJMIiwic2V0Q3VzdG9tU291cmNlVHJhbnNmb3JtZXIiLCJ0cmFuc2Zvcm1lciIsImFkZEN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyIiwicmVzb2x2ZUFzc2V0U291cmNlIiwiYXNzZXQiLCJnZXRBc3NldEJ5SUQiLCJyZXNvbHZlciIsImN1c3RvbVNvdXJjZVRyYW5zZm9ybWVyIiwidHJhbnNmb3JtZWRTb3VyY2UiLCJkZWZhdWx0QXNzZXQiLCJwaWNrU2NhbGUiLCJhc3NldHMiLCJyZWdpc3RlckFzc2V0IiwiYXNzZXRJZCIsImdldFNjYWxlZEFzc2V0UGF0aCIsInNjYWxlIiwic2NhbGVzIiwic2NhbGVTdWZmaXgiLCJhc3NldERpciIsImdldEJhc2VQYXRoIiwiZ2V0QXNzZXRQYXRoSW5EcmF3YWJsZUZvbGRlciIsImRyYXdhYmxlRm9sZGVyIiwiZ2V0QW5kcm9pZFJlc291cmNlRm9sZGVyTmFtZSIsImdldEFuZHJvaWRSZXNvdXJjZUlkZW50aWZpZXIiLCJBc3NldFNvdXJjZVJlc29sdmVyIiwianNidW5kbGVVcmwiLCJpc0xvYWRlZEZyb21TZXJ2ZXIiLCJpc0xvYWRlZEZyb21GaWxlU3lzdGVtIiwiX3RoaXMkanNidW5kbGVVcmwiLCJhc3NldFNlcnZlclVSTCIsImRyYXdhYmxlRm9sZGVySW5CdW5kbGUiLCJyZXNvdXJjZUlkZW50aWZpZXJXaXRob3V0U2NhbGUiLCJzY2FsZWRBc3NldFVSTE5lYXJCdW5kbGUiLCJmcm9tU291cmNlIiwic2NhbGVkQXNzZXRQYXRoIiwiX3RoaXMkanNidW5kbGVVcmwyIiwiX3RoaXMkanNidW5kbGVVcmwzIiwiX19wYWNrYWdlcl9hc3NldCIsIl9QaXhlbFJhdGlvIiwiY2FjaGVCcmVha2VyIiwid2FybklmQ2FjaGVCcmVha2VyVW5zZXQiLCJkZXZpY2VTY2FsZSIsInJlcXVpcmVkRGV2aWNlU2NhbGUiLCJzZXRVcmxDYWNoZUJyZWFrZXIiLCJhcHBlbmRhZ2UiLCJnZXRVcmxDYWNoZUJyZWFrZXIiLCJnZXRGb250U2NhbGUiLCJmb250U2NhbGUiLCJnZXRQaXhlbFNpemVGb3JMYXlvdXRTaXplIiwibGF5b3V0U2l6ZSIsInJvdW5kVG9OZWFyZXN0UGl4ZWwiLCJzdGFydERldGVjdGluZyIsIl9OYXRpdmVEZXZpY2VJbmZvIiwiZGltZW5zaW9uc0luaXRpYWxpemVkIiwic2NyZWVuIiwid2luZG93UGh5c2ljYWxQaXhlbHMiLCJzY3JlZW5QaHlzaWNhbFBpeGVscyIsIk5hdGl2ZURldmljZUluZm8iLCJhbmRyb2lkU2NhbGVTdWZmaXgiLCJBTkRST0lEX0JBU0VfREVOU0lUWSIsImdldEFuZHJvaWRBc3NldFN1ZmZpeCIsImRyYXdhYmxlRmlsZVR5cGVzIiwic3VmZml4IiwiYmFzZVBhdGgiLCJodHRwU2VydmVyTG9jYXRpb24iLCJ2aWV3Q29uZmlnQ2FsbGJhY2tzIiwidmlld0NvbmZpZ3MiLCJwcm9jZXNzRXZlbnRUeXBlcyIsIl9QbGF0Zm9ybUJhc2VWaWV3Q29uZmlnIiwiSUdOT1JFRF9LRVlTIiwibGVmdGhhbmRPYmplY3REaWZmIiwiX3N0YXRpY1ZpZXdDb25maWckdWlWIiwibGVmdE9iaiIsInJpZ2h0T2JqIiwiZGlmZmVyZW50S2V5cyIsImxlZnRJdGVtIiwicmlnaHRJdGVtIiwib2JqRGlmZiIsImdldENvbmZpZ1dpdGhvdXRWaWV3UHJvcHMiLCJQbGF0Zm9ybUJhc2VWaWV3Q29uZmlnIiwic3RyaW5naWZ5Vmlld0NvbmZpZyIsIl9CYXNlVmlld0NvbmZpZyIsIkJhc2VWaWV3Q29uZmlnIiwidG9wUHJlc3MiLCJ0b3BDaGFuZ2UiLCJ0b3BGb2N1cyIsInRvcEJsdXIiLCJ0b3BTdWJtaXRFZGl0aW5nIiwidG9wRW5kRWRpdGluZyIsInRvcEtleVByZXNzIiwidG9wVG91Y2hTdGFydCIsInRvcFRvdWNoTW92ZSIsInRvcFRvdWNoQ2FuY2VsIiwidG9wVG91Y2hFbmQiLCJ0b3BDbGljayIsInRvcFBvaW50ZXJDYW5jZWwiLCJ0b3BQb2ludGVyRG93biIsInRvcFBvaW50ZXJNb3ZlIiwidG9wUG9pbnRlclVwIiwidG9wUG9pbnRlckVudGVyIiwidG9wUG9pbnRlckxlYXZlIiwidG9wUG9pbnRlck92ZXIiLCJ0b3BQb2ludGVyT3V0IiwidG9wR290UG9pbnRlckNhcHR1cmUiLCJ0b3BMb3N0UG9pbnRlckNhcHR1cmUiLCJ0b3BBY2Nlc3NpYmlsaXR5QWN0aW9uIiwidG9wQWNjZXNzaWJpbGl0eVRhcCIsInRvcE1hZ2ljVGFwIiwidG9wQWNjZXNzaWJpbGl0eUVzY2FwZSIsInRvcExheW91dCIsIm9uR2VzdHVyZUhhbmRsZXJFdmVudCIsIkR5bmFtaWNhbGx5SW5qZWN0ZWRCeUdlc3R1cmVIYW5kbGVyIiwib25HZXN0dXJlSGFuZGxlclN0YXRlQ2hhbmdlIiwidmFsaWRBdHRyaWJ1dGVzRm9yTm9uRXZlbnRQcm9wcyIsImFjY2Vzc2liaWxpdHlBY3Rpb25zIiwiYWNjZXNzaWJpbGl0eUhpbnQiLCJhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2UiLCJhY2Nlc3NpYmlsaXR5Vmlld0lzTW9kYWwiLCJhY2Nlc3NpYmlsaXR5SWdub3Jlc0ludmVydENvbG9ycyIsInNob3VsZFJhc3Rlcml6ZUlPUyIsImFjY2Vzc2liaWxpdHlSb2xlIiwicm9sZSIsInZhbGlkQXR0cmlidXRlc0ZvckV2ZW50UHJvcHMiLCJDb25kaXRpb25hbGx5SWdub3JlZEV2ZW50SGFuZGxlcnMiLCJvbkxheW91dCIsIm9uTWFnaWNUYXAiLCJvbkFjY2Vzc2liaWxpdHlBY3Rpb24iLCJvbkFjY2Vzc2liaWxpdHlFc2NhcGUiLCJvbkFjY2Vzc2liaWxpdHlUYXAiLCJvbk1vdmVTaG91bGRTZXRSZXNwb25kZXIiLCJvbk1vdmVTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlIiwib25TdGFydFNob3VsZFNldFJlc3BvbmRlciIsIm9uU3RhcnRTaG91bGRTZXRSZXNwb25kZXJDYXB0dXJlIiwib25SZXNwb25kZXJHcmFudCIsIm9uUmVzcG9uZGVyUmVqZWN0Iiwib25SZXNwb25kZXJTdGFydCIsIm9uUmVzcG9uZGVyRW5kIiwib25SZXNwb25kZXJSZWxlYXNlIiwib25SZXNwb25kZXJNb3ZlIiwib25SZXNwb25kZXJUZXJtaW5hdGUiLCJvblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdCIsIm9uU2hvdWxkQmxvY2tOYXRpdmVSZXNwb25kZXIiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hFbmQiLCJvblRvdWNoQ2FuY2VsIiwib25Qb2ludGVyQ2FuY2VsIiwib25Qb2ludGVyRW50ZXIiLCJvblBvaW50ZXJMZWF2ZSIsIm9uUG9pbnRlck92ZXIiLCJvblBvaW50ZXJPdXQiLCJvbkdvdFBvaW50ZXJDYXB0dXJlIiwib25Mb3N0UG9pbnRlckNhcHR1cmUiLCJQbGF0Zm9ybUJhc2VWaWV3Q29uZmlnSW9zIiwiaWdub3JlZFZpZXdDb25maWdQcm9wcyIsImRpZmZlcmVuY2VzIiwiYWNjdW11bGF0ZURpZmZlcmVuY2VzIiwidmFsaWRhdGlvblJlc3VsdCIsIm5hdGl2ZU9iamVjdCIsInN0YXRpY09iamVjdCIsIm5hdGl2ZUtleSIsIm5hdGl2ZVZhbHVlIiwic3RhdGljVmFsdWUiLCJuYXRpdmVWYWx1ZUlmT2JqZWN0IiwiaWZPYmplY3QiLCJzdGF0aWNWYWx1ZUlmT2JqZWN0Iiwic3RhdGljS2V5IiwicGFydGlhbFZpZXdDb25maWciLCJjb21wb3NlSW5kZXhlcnMiLCJtYXliZUEiLCJtYXliZUIiLCJjb21tYW5kT2JqIiwiX0RlYnVnZ2luZ092ZXJsYXlOYXRpdmVDb21wb25lbnQiLCJpc05hdGl2ZUNvbXBvbmVudFJlYWR5IiwiRGVidWdnaW5nT3ZlcmxheSIsIl9wcm9wcyIsImhpZ2hsaWdodFRyYWNlVXBkYXRlcyIsIm5vbkVtcHR5UmVjdGFuZ2xlcyIsInJlY3RhbmdsZSIsIm5hdGl2ZUNvbXBvbmVudFJlZiIsImhpZ2hsaWdodEVsZW1lbnRzIiwiY2xlYXJFbGVtZW50c0hpZ2hsaWdodCIsImNsZWFyRWxlbWVudHNIaWdobGlnaHRzIiwiRGVidWdnaW5nT3ZlcmxheVdpdGhGb3J3YXJkZWRSZWYiLCJhYnNvbHV0ZUZpbGwiLCJhYnNvbHV0ZUZpbGxPYmplY3QiLCJzdHlsZTEiLCJzdHlsZTIiLCJmbGF0dGVuIiwic2V0U3R5bGVBdHRyaWJ1dGVQcmVwcm9jZXNzb3IiLCJfUmVhY3ROYXRpdmVTdHlsZUF0dHIiLCJfUmVhY3ROYXRpdmVTdHlsZUF0dHIyIiwiRGVidWdnaW5nT3ZlcmxheU5hdGl2ZUNvbXBvbmVudCIsIl9jb2RlZ2VuTmF0aXZlQ29tcG9uZW50IiwibmF0aXZlQ29tcG9uZW50TmFtZSIsIl9yZXF1aXJlTmF0aXZlQ29tcG9uZW50IiwiY29kZWdlbk5hdGl2ZUNvbXBvbmVudCIsImNvbXBvbmVudE5hbWVJblVzZSIsInBhcGVyQ29tcG9uZW50TmFtZSIsInBhcGVyQ29tcG9uZW50TmFtZURlcHJlY2F0ZWQiLCJfb3B0aW9ucyRwYXBlckNvbXBvbmUiLCJjcmVhdGVSZWFjdE5hdGl2ZUNvbXBvbmVudENsYXNzIiwiUkNURXZlbnRFbWl0dGVyIiwiVGV4dElucHV0U3RhdGUiLCJjcmVhdGVBdHRyaWJ1dGVQYXlsb2FkIiwiZGlmZkF0dHJpYnV0ZVBheWxvYWRzIiwiY3VycmVudGx5Rm9jdXNlZElucHV0UmVmIiwiaW5wdXRzIiwiY3VycmVudGx5Rm9jdXNlZElucHV0IiwiY3VycmVudGx5Rm9jdXNlZEZpZWxkIiwiZm9jdXNJbnB1dCIsInRleHRGaWVsZCIsImJsdXJJbnB1dCIsImZvY3VzRmllbGQiLCJ0ZXh0RmllbGRJRCIsImJsdXJGaWVsZCIsImZvY3VzVGV4dElucHV0IiwiX3RleHRGaWVsZCRjdXJyZW50UHJvIiwiZmllbGRDYW5CZUZvY3VzZWQiLCJlZGl0YWJsZSIsImlPU1RleHRJbnB1dENvbW1hbmRzIiwiQW5kcm9pZFRleHRJbnB1dENvbW1hbmRzIiwiYmx1clRleHRJbnB1dCIsInJlZ2lzdGVySW5wdXQiLCJ1bnJlZ2lzdGVySW5wdXQiLCJpc1RleHRJbnB1dCIsIl9SQ1RUZXh0SW5wdXRWaWV3Q29uZmlnIiwiUkNUVGV4dElucHV0Vmlld0NvbmZpZyIsIlNpbmdsZWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQiLCJ0b3BUZXh0SW5wdXQiLCJ0b3BLZXlQcmVzc1N5bmMiLCJ0b3BTY3JvbGwiLCJ0b3BTZWxlY3Rpb25DaGFuZ2UiLCJ0b3BDaGFuZ2VTeW5jIiwidG9wQ29udGVudFNpemVDaGFuZ2UiLCJhbGxvd0ZvbnRTY2FsaW5nIiwiaXNIaWdobGlnaHRlZCIsIm1heEZvbnRTaXplTXVsdGlwbGllciIsImlucHV0QWNjZXNzb3J5Vmlld0lEIiwiY2FyZXRIaWRkZW4iLCJlbmFibGVzUmV0dXJuS2V5QXV0b21hdGljYWxseSIsInBsYWNlaG9sZGVyVGV4dENvbG9yIiwiY2xlYXJCdXR0b25Nb2RlIiwicmV0dXJuS2V5VHlwZSIsInN1Ym1pdEJlaGF2aW9yIiwibW9zdFJlY2VudEV2ZW50Q291bnQiLCJzY3JvbGxFbmFibGVkIiwic2VsZWN0aW9uQ29sb3IiLCJjb250ZXh0TWVudUhpZGRlbiIsInNlY3VyZVRleHRFbnRyeSIsInBsYWNlaG9sZGVyIiwiYXV0b0NvcnJlY3QiLCJtdWx0aWxpbmUiLCJ0ZXh0Q29udGVudFR5cGUiLCJtYXhMZW5ndGgiLCJhdXRvQ2FwaXRhbGl6ZSIsImtleWJvYXJkQXBwZWFyYW5jZSIsInBhc3N3b3JkUnVsZXMiLCJzcGVsbENoZWNrIiwic2VsZWN0VGV4dE9uRm9jdXMiLCJjbGVhclRleHRPbkZvY3VzIiwic2hvd1NvZnRJbnB1dE9uRm9jdXMiLCJhdXRvRm9jdXMiLCJsaW5lQnJlYWtTdHJhdGVneUlPUyIsInNtYXJ0SW5zZXJ0RGVsZXRlIiwib25TZWxlY3Rpb25DaGFuZ2UiLCJvbkNvbnRlbnRTaXplQ2hhbmdlIiwib25TY3JvbGwiLCJvbkNoYW5nZVN5bmMiLCJvbktleVByZXNzU3luYyIsIm9uVGV4dElucHV0IiwiYWRqdXN0c0ZvbnRTaXplVG9GaXQiLCJtaW5pbXVtRm9udFNjYWxlIiwiaW5saW5lSW1hZ2VQYWRkaW5nIiwidW5kZXJsaW5lQ29sb3JBbmRyb2lkIiwic2VsZWN0aW9uSGFuZGxlQ29sb3IiLCJpbXBvcnRhbnRGb3JBdXRvZmlsbCIsImF1dG9Db21wbGV0ZSIsIm51bWJlck9mTGluZXMiLCJyZXR1cm5LZXlMYWJlbCIsIm9uS2V5UHJlc3MiLCJjdXJzb3JDb2xvciIsInRleHRCcmVha1N0cmF0ZWd5IiwiZGlzYWJsZUZ1bGxzY3JlZW5VSSIsImlubGluZUltYWdlTGVmdCIsIkFuZHJvaWRUZXh0SW5wdXROYXRpdmVDb21wb25lbnQiLCJsb2dMaXN0ZW5lcnMiLCJ1bnN0YWJsZV9zZXRMb2dMaXN0ZW5lcnMiLCJtYXhEZXB0aE9yT3B0aW9ucyIsIm1heWJlT3B0aW9ucyIsIm9uRGlmZmVyZW50RnVuY3Rpb25zSWdub3JlZCIsInR3b0tleSIsImVycm9yVmFsdWUiLCJfRXZlbnRQb2x5ZmlsbDIiLCJfRXZlbnRQb2x5ZmlsbCIsInR5cGVBcmciLCJFdmVudFBvbHlmaWxsIiwic2NvcGVkIiwiX3N5bnRoZXRpY0V2ZW50Iiwic2V0U3ludGhldGljRXZlbnQiLCJfZGVlcERpZmZlciIsIlJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzIiwiUHVibGljSW5zdGFuY2VDbGFzcyIsIlJlYWRPbmx5VGV4dENsYXNzIiwiZW5hYmxlQWNjZXNzVG9Ib3N0VHJlZUluRmFicmljIiwiX19uYXRpdmVUYWciLCJfX2ludGVybmFsSW5zdGFuY2VIYW5kbGUiLCJfaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSIsImpzT25seVRlc3RGbGFnIiwiY3JlYXRlSmF2YVNjcmlwdEZsYWdHZXR0ZXIiLCJpc0xheW91dEFuaW1hdGlvbkVuYWJsZWQiLCJhbmltYXRlZFNob3VsZERlYm91bmNlUXVldWVGbHVzaCIsImFuaW1hdGVkU2hvdWxkVXNlU2luZ2xlT3AiLCJzaG91bGRVc2VBbmltYXRlZE9iamVjdEZvclRyYW5zZm9ybSIsInNob3VsZFVzZVNldE5hdGl2ZVByb3BzSW5GYWJyaWMiLCJzaG91bGRVc2VSZW1vdmVDbGlwcGVkU3Vidmlld3NBc0RlZmF1bHRPbklPUyIsImNvbW1vblRlc3RGbGFnIiwiY3JlYXRlTmF0aXZlRmxhZ0dldHRlciIsImVuYWJsZUJhY2tncm91bmRFeGVjdXRvciIsInVzZU1vZGVyblJ1bnRpbWVTY2hlZHVsZXIiLCJlbmFibGVNaWNyb3Rhc2tzIiwiYmF0Y2hSZW5kZXJpbmdVcGRhdGVzSW5FdmVudExvb3AiLCJlbmFibGVTcGFubmFibGVCdWlsZGluZ1VuaWZpY2F0aW9uIiwiZW5hYmxlQ3VzdG9tRHJhd09yZGVyRmFicmljIiwiZW5hYmxlRml4Rm9yQ2xpcHBlZFN1YnZpZXdzQ3Jhc2giLCJpbnNwZWN0b3JFbmFibGVDeHhJbnNwZWN0b3JQYWNrYWdlckNvbm5lY3Rpb24iLCJpbnNwZWN0b3JFbmFibGVNb2Rlcm5DRFBSZWdpc3RyeSIsIm92ZXJyaWRlIiwic2V0T3ZlcnJpZGVzIiwiX05hdGl2ZVJlYWN0TmF0aXZlRmVhdHVyZUZsYWdzIiwiYWNjZXNzZWRGZWF0dXJlRmxhZ3MiLCJvdmVycmlkZXMiLCJjcmVhdGVHZXR0ZXIiLCJjb25maWdOYW1lIiwiY3VzdG9tVmFsdWVHZXR0ZXIiLCJjYWNoZWRWYWx1ZSIsIl9jdXN0b21WYWx1ZUdldHRlciIsIl9vdmVycmlkZXMiLCJfb3ZlcnJpZGVzJGNvbmZpZ05hbWUiLCJfTmF0aXZlUmVhY3ROYXRpdmVGZWEiLCJOYXRpdmVSZWFjdE5hdGl2ZUZlYXR1cmVGbGFncyIsImdldE92ZXJyaWRlcyIsIm5ld092ZXJyaWRlcyIsImFjY2Vzc2VkRmVhdHVyZUZsYWdzU3RyIiwiX1RleHRJbnB1dFN0YXRlIiwiX3dhcm5Gb3JTdHlsZVByb3BzIiwiX1JlYWRPbmx5RWxlbWVudDIiLCJfUmVhZE9ubHlOb2RlIiwiUmVhY3ROYXRpdmVFbGVtZW50IiwiX1JlYWRPbmx5RWxlbWVudCIsIl92aWV3Q29uZmlnIiwiaW5jbHVkZVRyYW5zZm9ybSIsImdldFNoYWRvd05vZGUiLCJnZXRPZmZzZXQiLCJvZmZzZXRQYXJlbnRJbnN0YW5jZUhhbmRsZSIsIm9mZnNldFBhcmVudCIsIm9mZnNldFBhcmVudEVsZW1lbnQiLCJyZWxhdGl2ZVRvTmF0aXZlTm9kZSIsIlJlYWRPbmx5Tm9kZSIsInRvU3RhdGVOb2RlIiwiZnJvbVN0YXRlTm9kZSIsIndhcm5Gb3JTdHlsZVByb3BzIiwiUmVhZE9ubHlFbGVtZW50IiwiX1JlYWRPbmx5Tm9kZTIiLCJnZXRDaGlsZEVsZW1lbnRzIiwiY3JlYXRlSFRNTENvbGxlY3Rpb24iLCJpbm5lclNpemUiLCJnZXRJbm5lclNpemUiLCJib3JkZXJTaXplIiwiZ2V0Qm9yZGVyU2l6ZSIsImNoaWxkRWxlbWVudHMiLCJfaW5zdGFuY2VIYW5kbGUkc3RhdGUiLCJfaW5zdGFuY2VIYW5kbGUkc3RhdGUyIiwiX3Byb3BzJGlkIiwiZ2V0SW5zdGFuY2VIYW5kbGUiLCJnZXRFbGVtZW50U2libGluZyIsInNjcm9sbFNpemUiLCJnZXRTY3JvbGxTaXplIiwic2Nyb2xsUG9zaXRpb24iLCJnZXRTY3JvbGxQb3NpdGlvbiIsImdldFRhZ05hbWUiLCJnZXRUZXh0Q29udGVudCIsImhhc1BvaW50ZXJDYXB0dXJlIiwicG9pbnRlcklkIiwic2V0UG9pbnRlckNhcHR1cmUiLCJyZWxlYXNlUG9pbnRlckNhcHR1cmUiLCJnZXRDaGlsZE5vZGVzIiwiY2hpbGROb2RlIiwiUmVhZE9ubHlFbGVtZW50Q2xhc3MiLCJzZXRJbnN0YW5jZUhhbmRsZSIsImNyZWF0ZU5vZGVMaXN0IiwiaXNDb25uZWN0ZWQiLCJfZ2V0Tm9kZVNpYmxpbmdzQW5kUG8iLCJnZXROb2RlU2libGluZ3NBbmRQb3NpdGlvbiIsIl9nZXROb2RlU2libGluZ3NBbmRQbzIiLCJzaWJsaW5ncyIsIl9nZXRQdWJsaWNJbnN0YW5jZUZybyIsInBhcmVudEluc3RhbmNlSGFuZGxlIiwiZ2V0UGFyZW50Tm9kZSIsIl9nZXROb2RlU2libGluZ3NBbmRQbzMiLCJfZ2V0Tm9kZVNpYmxpbmdzQW5kUG80Iiwib3RoZXJOb2RlIiwib3RoZXJTaGFkb3dOb2RlIiwiRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIiwiY29udGFpbnMiLCJnZXRSb290Tm9kZSIsImxhc3RLbm93blBhcmVudCIsIm5leHRQb3NzaWJsZVBhcmVudCIsImhhc0NoaWxkTm9kZXMiLCJBVFRSSUJVVEVfTk9ERSIsIkNEQVRBX1NFQ1RJT05fTk9ERSIsIkVOVElUWV9SRUZFUkVOQ0VfTk9ERSIsIkVOVElUWV9OT0RFIiwiUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFIiwiRE9DVU1FTlRfTk9ERSIsIkRPQ1VNRU5UX1RZUEVfTk9ERSIsIkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUiLCJOT1RBVElPTl9OT0RFIiwiRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HIiwiRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HIiwiRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMiLCJET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQyIsIklOU1RBTkNFX0hBTkRMRV9LRVkiLCJjaGlsZE5vZGVJbnN0YW5jZUhhbmRsZXMiLCJtaXhlZFB1YmxpY0luc3RhbmNlIiwiTm9kZUxpc3QiLCJfbGVuZ3RoIiwiYXJyYXlMaWtlIiwiY3JlYXRlRW50cmllc0l0ZXJhdG9yIiwiY2FsbGJhY2tGbiIsImNyZWF0ZUtleUl0ZXJhdG9yIiwiY3JlYXRlVmFsdWVJdGVyYXRvciIsIkhUTUxDb2xsZWN0aW9uIiwibmFtZWRJdGVtIiwiX2NoaWxkTm9kZXMkcG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiaW5jcmVtZW50IiwiX251bGx0aHJvd3MyIiwiZmFicmljTWVhc3VyZSIsImZhYnJpY01lYXN1cmVJbldpbmRvdyIsImZhYnJpY01lYXN1cmVMYXlvdXQiLCJmYWJyaWNHZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJSZWFjdEZhYnJpY0hvc3RDb21wb25lbnQiLCJ1bnN0YWJsZV9nZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJfUmVhZE9ubHlDaGFyYWN0ZXJEYXRhIiwiUmVhZE9ubHlUZXh0IiwiX1JlYWRPbmx5Q2hhcmFjdGVyRGF0IiwiUmVhZE9ubHlDaGFyYWN0ZXJEYXRhIiwic3Vic3RyaW5nRGF0YSIsImFkanVzdGVkQ291bnQiLCJfRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5Iiwicm9vdFZpZXdSZWYiLCJzdWJzY3JpYmVyIiwiRGVidWdnaW5nT3ZlcmxheVJlZ2lzdHJ5IiwiX2NsYXNzUHJpdmF0ZUZpZWxkTG9vc2VLZXkyIiwiX3JlYWN0RGV2VG9vbHNBZ2VudCIsIl9vblJlYWN0RGV2VG9vbHNBZ2VudEF0dGFjaGVkIiwiX2dldFB1YmxpY0luc3RhbmNlRnJvbUluc3RhbmNlIiwiX2ZpbmRMb3dlc3RQYXJlbnRGcm9tUmVnaXN0cnlGb3JJbnN0YW5jZSIsIl9maW5kTG93ZXN0UGFyZW50RnJvbVJlZ2lzdHJ5Rm9ySW5zdGFuY2VMZWdhY3kiLCJfb25EcmF3VHJhY2VVcGRhdGVzIiwiX2RyYXdUcmFjZVVwZGF0ZXNNb2Rlcm4iLCJfZHJhd1RyYWNlVXBkYXRlc0xlZ2FjeSIsIl9vbkhpZ2hsaWdodEVsZW1lbnRzIiwiX29uSGlnaGxpZ2h0RWxlbWVudHNNb2Rlcm4iLCJfb25IaWdobGlnaHRFbGVtZW50c0xlZ2FjeSIsIl9vbkNsZWFyRWxlbWVudHNIaWdobGlnaHRzIiwiX29uSGlnaGxpZ2h0RWxlbWVudHNMZWdhY3kyIiwiX29uSGlnaGxpZ2h0RWxlbWVudHNNb2Rlcm4yIiwiX2RyYXdUcmFjZVVwZGF0ZXNMZWdhY3kyIiwiX2RyYXdUcmFjZVVwZGF0ZXNNb2Rlcm4yIiwiX2ZpbmRMb3dlc3RQYXJlbnRGcm9tUmVnaXN0cnlGb3JJbnN0YW5jZUxlZ2FjeTIiLCJfZmluZExvd2VzdFBhcmVudEZyb21SZWdpc3RyeUZvckluc3RhbmNlMiIsIl9pbnN0YW5jZUhhbmRsZSRjYW5vbiIsIl9pbnN0YW5jZUhhbmRsZSRjYW5vbjIiLCJtb2Rlcm5Ob2Rlc1VwZGF0ZXMiLCJsZWdhY3lOb2Rlc1VwZGF0ZXMiLCJpbnN0YW5jZVJlYWN0VGFnIiwiUmVhY3ROYXRpdmVFbGVtZW50Q2xhc3MiLCJfc3Vic2NyaWJlciRkZWJ1Z2dpbmciLCJyZWFjdE5hdGl2ZUVsZW1lbnRzIiwibGVnYWN5UHVibGljSW5zdGFuY2VzIiwiX3N1YnNjcmliZXIkZGVidWdnaW5nMiIsIndhc1ByZXNlbnQiLCJwYXJlbnRFbGVtZW50IiwiY2FuZGlkYXRlcyIsImNhbmRpZGF0ZXNXaXRoTm9DaGlsZHJlbiIsInBvdGVudGlhbFBhcmVudCIsInNob3VsZFNraXBUaGlzUGFyZW50IiwicG90ZW50aWFsQ2hpbGQiLCJwYXJlbnRUb1RyYWNlVXBkYXRlc01hcCIsInRyYWNlVXBkYXRlc0ZvclBhcmVudCIsIl9pbnN0YW5jZSRnZXRCb3VuZGluZyIsInJvb3RWaWV3SW5zdGFuY2UiLCJfcm9vdFZpZXdJbnN0YW5jZSRnZXQiLCJwYXJlbnRYIiwicGFyZW50WSIsIl9kZWJ1Z2dpbmdPdmVybGF5UmVmJCIsInBhcmVudFRvVHJhY2VVcGRhdGVzUHJvbWlzZXNNYXAiLCJ0cmFjZVVwZGF0ZXNQcm9taXNlc0ZvclBhcmVudCIsImZyYW1lVG9EcmF3UHJvbWlzZSIsIl9yZXQiLCJfbG9vcDIiLCJ0cmFjZVVwZGF0ZXNQcm9taXNlcyIsInJlc29sdmVkVHJhY2VVcGRhdGVzIiwiX3BhcmVudCRkZWJ1Z2dpbmdPdmVyIiwicGFyZW50VG9FbGVtZW50c01hcCIsImNoaWxkRWxlbWVudE9mQVBhcmVudCIsIl9sb29wMyIsImVsZW1lbnRzVG9IaWdobGlnaHQiLCJfcGFyZW50MiRkZWJ1Z2dpbmdPdmUiLCJfcm9vdFZpZXdJbnN0YW5jZSRnZXQyIiwiZWxlbWVudHNSZWN0YW5nbGVzIiwiX2VsZW1lbnQkZ2V0Qm91bmRpbmdDIiwiX3JldDIiLCJfbG9vcDQiLCJyZXNvbHZlZEVsZW1lbnRzUmVjdGFuZ2xlcyIsIl9wYXJlbnQzJGRlYnVnZ2luZ092ZSIsImRlYnVnZ2luZ092ZXJsYXlSZWdpc3RyeUluc3RhbmNlIiwiX1JlYWN0TmF0aXZlRmVhdHVyZUZsYWdzIiwiX0VsZW1lbnRCb3giLCJSZWFjdERldlRvb2xzT3ZlcmxheSIsInNldEluc3BlY3RlZCIsImlzSW5zcGVjdGluZyIsInNldElzSW5zcGVjdGluZyIsIm9uU3RhcnRJbnNwZWN0aW5nTmF0aXZlIiwib25TdG9wSW5zcGVjdGluZ05hdGl2ZSIsImZpbmRWaWV3Rm9yTG9jYXRpb24iLCJ2aWV3RGF0YSIsInN0b3BJbnNwZWN0aW5nIiwic2hvdWxkU2V0UmVzcG9uZGVyIiwic2hvdWxkRW1pdFczQ1BvaW50ZXJFdmVudHMiLCJpbnNwZWN0b3IiLCJzaG91bGRQcmVzc2liaWxpdHlVc2VXM0NQb2ludGVyRXZlbnRzRm9ySG92ZXIiLCJfcmVhY3RKc3hSdW50aW1lIiwiRWxlbWVudEJveCIsImZyYW1lU3R5bGUiLCJjb250ZW50U3R5bGUiLCJyZXNvbHZlUmVsYXRpdmVTaXplcyIsInJlc29sdmVTaXplSW5QbGFjZSIsImRpbWVuc2lvbiIsImlzUlRMIiwiZG9MZWZ0QW5kUmlnaHRTd2FwSW5SVEwiLCJfTmF0aXZlSTE4bk1hbmFnZXIiLCJpMThuQ29uc3RhbnRzIiwiZ2V0STE4bk1hbmFnZXJDb25zdGFudHMiLCJOYXRpdmVJMThuTWFuYWdlciIsIl9OYXRpdmVJMThuTWFuYWdlciRnZSIsImxvY2FsZUlkZW50aWZpZXIiLCJhbGxvd1JUTCIsInNob3VsZEFsbG93IiwiZm9yY2VSVEwiLCJzaG91bGRGb3JjZSIsInN3YXBMZWZ0QW5kUmlnaHRJblJUTCIsImZsaXBTdHlsZXMiLCJCb3JkZXJCb3giLCJhcHBlbmRSZW5kZXJlciIsInZhbGlkYXRlUmVuZGVyZXJzIiwic2hvdWxkQnJlYWsiLCJfcmVuZGVyZXIkcmVuZGVyZXJDb24iLCJfTG9nQm94Tm90aWZpY2F0aW9uIiwib25EaXNtaXNzV2FybnMiLCJvbkRpc21pc3NFcnJvcnMiLCJvcGVuTG9nIiwidG9hc3QiLCJ0b3RhbExvZ0NvdW50Iiwib25QcmVzc09wZW4iLCJvblByZXNzRGlzbWlzcyIsIl9JbWFnZSIsIl9UZXh0IiwiX0xvZ0JveEJ1dHRvbiIsIl9Mb2dCb3hNZXNzYWdlIiwiTG9nQm94U3R5bGUiLCJMb2dCb3hMb2dOb3RpZmljYXRpb24iLCJ0b2FzdFN0eWxlcyIsInByZXNzIiwiZ2V0QmFja2dyb3VuZENvbG9yIiwiQ291bnRCYWRnZSIsIk1lc3NhZ2UiLCJEaXNtaXNzQnV0dG9uIiwiY291bnRTdHlsZXMiLCJvdXRzaWRlIiwiaW5zaWRlIiwibWVzc2FnZVN0eWxlcyIsInBsYWludGV4dCIsInN1YnN0aXR1dGlvblRleHQiLCJfYzMiLCJkaXNtaXNzU3R5bGVzIiwiZ2V0VGV4dENvbG9yIiwiaW1hZ2UiLCJfYzQiLCJnZXRXYXJuaW5nQ29sb3IiLCJnZXRFcnJvckNvbG9yIiwiZ2V0TG9nQ29sb3IiLCJfSW1hZ2VBbmFseXRpY3NUYWdDb250ZXh0IiwiX0ltYWdlVmlld05hdGl2ZUNvbXBvbmVudCIsIl9OYXRpdmVJbWFnZUxvYWRlcklPUyIsIl9yZXNvbHZlQXNzZXRTb3VyY2UiLCJnZXRTaXplIiwiZmFpbHVyZSIsIk5hdGl2ZUltYWdlTG9hZGVySU9TIiwiZ2V0U2l6ZVdpdGhIZWFkZXJzIiwic2l6ZXMiLCJwcmVmZXRjaFdpdGhNZXRhZGF0YSIsInF1ZXJ5Um9vdE5hbWUiLCJwcmVmZXRjaEltYWdlV2l0aE1ldGFkYXRhIiwicHJlZmV0Y2hJbWFnZSIsInByZWZldGNoIiwicXVlcnlDYWNoZSIsIl9xdWVyeUNhY2hlIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwidXJscyIsIkJhc2VJbWFnZSIsIl9wcm9wcyR0aW50Q29sb3IiLCJfcHJvcHMkYWNjZXNzaWJpbGl0eVMiLCJfcHJvcHMkYWNjZXNzaWJpbGl0eVMyIiwiX3Byb3BzJGFjY2Vzc2liaWxpdHlTMyIsIl9wcm9wcyRhY2Nlc3NpYmlsaXR5UzQiLCJfcHJvcHMkYWNjZXNzaWJpbGl0eVM1IiwiX3Byb3BzJGFyaWFMYWJlbCIsImdldEltYWdlU291cmNlc0Zyb21JbWFnZVByb3BzIiwiX3NvdXJjZSR3aWR0aCIsIl9zb3VyY2UkaGVpZ2h0IiwiY29udmVydE9iamVjdEZpdFRvUmVzaXplTW9kZSIsInNyYyIsInJlc3RQcm9wcyIsImFjdHVhbFJlZiIsInVzZVdyYXBSZWZXaXRoSW1hZ2VBdHRhY2hlZENhbGxiYWNrcyIsImFuYWx5dGljVGFnIiwiYWx0IiwiaW50ZXJuYWxfYW5hbHl0aWNUYWciLCJpbWFnZUNvbXBvbmVudERlY29yYXRvciIsInVuc3RhYmxlX2dldEltYWdlQ29tcG9uZW50RGVjb3JhdG9yIiwidG9wTG9hZFN0YXJ0IiwidG9wUHJvZ3Jlc3MiLCJ0b3BFcnJvciIsInRvcExvYWQiLCJ0b3BMb2FkRW5kIiwiYmx1clJhZGl1cyIsInJlc2l6ZU1ldGhvZCIsInNob3VsZE5vdGlmeUxvYWRFdmVudHMiLCJkZWZhdWx0U3JjIiwicHJvZ3Jlc3NpdmVSZW5kZXJpbmdFbmFibGVkIiwiZmFkZUR1cmF0aW9uIiwibG9hZGluZ0luZGljYXRvclNyYyIsInRvcFBhcnRpYWxMb2FkIiwiY2FwSW5zZXRzIiwiZGVmYXVsdFNvdXJjZSIsIm9uTG9hZFN0YXJ0Iiwib25Mb2FkIiwib25Mb2FkRW5kIiwib25Qcm9ncmVzcyIsIm9uUGFydGlhbExvYWQiLCJJbWFnZVZpZXdOYXRpdmVDb21wb25lbnQiLCJpbWFnZVByb3BzIiwiY3Jvc3NPcmlnaW4iLCJyZWZlcnJlclBvbGljeSIsInNyY1NldCIsInNvdXJjZUxpc3QiLCJzcmNTZXRMaXN0Iiwic2hvdWxkVXNlU3JjRm9yRGVmYXVsdFNjYWxlIiwiaW1hZ2VTcmMiLCJfaW1hZ2VTcmMkc3BsaXQiLCJfaW1hZ2VTcmMkc3BsaXQyIiwiX2ltYWdlU3JjJHNwbGl0MiQiLCJ4U2NhbGUiLCJvYmplY3RGaXRNYXAiLCJjb250YWluIiwiY292ZXIiLCJfdXNlTWVyZ2VSZWZzIiwiaW5qZWN0ZWRJbWFnZUNvbXBvbmVudERlY29yYXRvciIsInVuc3RhYmxlX3NldEltYWdlQ29tcG9uZW50RGVjb3JhdG9yIiwiaW1hZ2VBdHRhY2hlZENhbGxiYWNrcyIsInVuc3RhYmxlX3JlZ2lzdGVySW1hZ2VBdHRhY2hlZENhbGxiYWNrIiwidW5zdGFibGVfdW5yZWdpc3RlckltYWdlQXR0YWNoZWRDYWxsYmFjayIsInBlbmRpbmdDbGVhbnVwQ2FsbGJhY2tzIiwiaW1hZ2VBdHRhY2hlZENhbGxiYWNrc1JlZiIsImltYWdlQXR0YWNoZWRDYWxsYmFjayIsIm1heWJlQ2xlYW51cENhbGxiYWNrIiwidXNlTWVyZ2VSZWZzIiwiUHJlc3NhYmlsaXR5RGVidWciLCJfdXNlUHJlc3NhYmlsaXR5IiwiX2FjY2Vzc2liaWxpdHlTdGF0ZTIiLCJfYWNjZXNzaWJpbGl0eVN0YXRlMyIsIl9zdHlsZSIsIl9zdHlsZTMiLCJfc3R5bGU0IiwiZWxsaXBzaXplTW9kZSIsIm9uTG9uZ1ByZXNzIiwicHJlc3NSZXRlbnRpb25PZmZzZXQiLCJzdXBwcmVzc0hpZ2hsaWdodGluZyIsInNldEhpZ2hsaWdodGVkIiwiX2Rpc2FibGVkIiwibmF0aXZlVGV4dEFjY2Vzc2liaWxpdHlTdGF0ZSIsImlzUHJlc3NhYmxlIiwiaW5pdGlhbGl6ZWQiLCJ1c2VMYXp5SW5pdGlhbGl6YXRpb24iLCJwcmVzc1JlY3RPZmZzZXQiLCJvblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdF9ERVBSRUNBVEVEIiwib25TdGFydFNob3VsZFNldFJlc3BvbmRlcl9ERVBSRUNBVEVEIiwiZXZlbnRIYW5kbGVycyIsInVzZVByZXNzYWJpbGl0eSIsImV2ZW50SGFuZGxlcnNGb3JUZXh0IiwiX2FjY2Vzc2libGUiLCJfc3R5bGUyIiwiX3NlbGVjdGFibGUiLCJzZWxlY3RhYmxlIiwidXNlclNlbGVjdFRvU2VsZWN0YWJsZU1hcCIsInZlcnRpY2FsQWxpZ25Ub1RleHRBbGlnblZlcnRpY2FsTWFwIiwiX2hhc09uUHJlc3NPck9uTG9uZ1ByZXNzIiwiTmF0aXZlVmlydHVhbFRleHQiLCJOYXRpdmVUZXh0IiwiYXV0byIsIm5vbmUiLCJtaWRkbGUiLCJQcmVzc2FiaWxpdHlEZWJ1Z1ZpZXciLCJfaGl0U2xvcCRib3R0b20iLCJfaGl0U2xvcCRsZWZ0IiwiX2hpdFNsb3AkcmlnaHQiLCJfaGl0U2xvcCR0b3AiLCJiYXNlQ29sb3IiLCJwYWRTdGFydCIsIm5vcm1hbGl6ZVJlY3QiLCJpc0RlYnVnRW5hYmxlZCIsImNyZWF0ZVNxdWFyZSIsInJlY3RPclNpemUiLCJfUHJlc3NhYmlsaXR5IiwicHJlc3NhYmlsaXR5UmVmIiwiUHJlc3NhYmlsaXR5IiwicHJlc3NhYmlsaXR5IiwiY29uZmlndXJlIiwiZ2V0RXZlbnRIYW5kbGVycyIsIl9Tb3VuZE1hbmFnZXIiLCJfUHJlc3NhYmlsaXR5UGVyZm9ybWFuY2VFdmVudEVtaXR0ZXIiLCJUcmFuc2l0aW9ucyIsIk5PVF9SRVNQT05ERVIiLCJERUxBWSIsIlJFU1BPTkRFUl9HUkFOVCIsIlJFU1BPTkRFUl9SRUxFQVNFIiwiUkVTUE9OREVSX1RFUk1JTkFURUQiLCJFTlRFUl9QUkVTU19SRUNUIiwiTEVBVkVfUFJFU1NfUkVDVCIsIkxPTkdfUFJFU1NfREVURUNURUQiLCJSRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfSU4iLCJSRVNQT05ERVJfSU5BQ1RJVkVfUFJFU1NfT1VUIiwiUkVTUE9OREVSX0FDVElWRV9QUkVTU19JTiIsIlJFU1BPTkRFUl9BQ1RJVkVfUFJFU1NfT1VUIiwiUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX0lOIiwiUkVTUE9OREVSX0FDVElWRV9MT05HX1BSRVNTX09VVCIsIkVSUk9SIiwiaXNBY3RpdmVTaWduYWwiLCJpc0FjdGl2YXRpb25TaWduYWwiLCJpc1ByZXNzSW5TaWduYWwiLCJpc1Rlcm1pbmFsU2lnbmFsIiwiREVGQVVMVF9MT05HX1BSRVNTX0RFTEFZX01TIiwiREVGQVVMVF9QUkVTU19SRUNUX09GRlNFVFMiLCJERUZBVUxUX01JTl9QUkVTU19EVVJBVElPTiIsIkRFRkFVTFRfTE9OR19QUkVTU19ERUFDVElWQVRJT05fRElTVEFOQ0UiLCJsb25nUHJlc3NEZWFjdGl2YXRpb25EaXN0YW5jZSIsIl9ldmVudEhhbmRsZXJzIiwiX2hvdmVySW5EZWxheVRpbWVvdXQiLCJfaG92ZXJPdXREZWxheVRpbWVvdXQiLCJfaXNIb3ZlcmVkIiwiX2xvbmdQcmVzc0RlbGF5VGltZW91dCIsIl9wcmVzc0RlbGF5VGltZW91dCIsIl9wcmVzc091dERlbGF5VGltZW91dCIsIl9yZXNwb25kZXJJRCIsIl9yZXNwb25kZXJSZWdpb24iLCJfdG91Y2hTdGF0ZSIsIl9tZWFzdXJlQ2FsbGJhY2siLCJfY2FuY2VsSG92ZXJJbkRlbGF5VGltZW91dCIsIl9jYW5jZWxIb3Zlck91dERlbGF5VGltZW91dCIsIl9jYW5jZWxMb25nUHJlc3NEZWxheVRpbWVvdXQiLCJfY2FuY2VsUHJlc3NEZWxheVRpbWVvdXQiLCJfY2FuY2VsUHJlc3NPdXREZWxheVRpbWVvdXQiLCJfY3JlYXRlRXZlbnRIYW5kbGVycyIsImZvY3VzRXZlbnRIYW5kbGVycyIsIm9uQmx1ciIsIm9uRm9jdXMiLCJyZXNwb25kZXJFdmVudEhhbmRsZXJzIiwiX3JlY2VpdmVTaWduYWwiLCJkZWxheVByZXNzSW4iLCJub3JtYWxpemVEZWxheSIsImRlbGF5TG9uZ1ByZXNzIiwiX2hhbmRsZUxvbmdQcmVzcyIsIm9uUHJlc3NNb3ZlIiwicmVzcG9uZGVyUmVnaW9uIiwiZ2V0VG91Y2hGcm9tUHJlc3NFdmVudCIsIl90b3VjaEFjdGl2YXRlUG9zaXRpb24iLCJkZWx0YVgiLCJkZWx0YVkiLCJoeXBvdCIsIl9pc1RvdWNoV2l0aGluUmVzcG9uZGVyUmVnaW9uIiwiX2V2ZW50JG5hdGl2ZUV2ZW50IiwiX3RoaXMyJF9jb25maWciLCJ0ZXN0T25seV9wcmVzc2FiaWxpdHlDb25maWciLCJob3ZlclBvaW50ZXJFdmVudHMiLCJfdGhpcyRfY29uZmlnIiwib25Ib3ZlckluIiwib25Ib3Zlck91dCIsImRlbGF5SG92ZXJJbiIsImNvbnZlcnRQb2ludGVyRXZlbnRUb01vdXNlRXZlbnQiLCJkZWxheUhvdmVyT3V0IiwibW91c2VFdmVudEhhbmRsZXJzIiwib25Nb3VzZUVudGVyIiwiaXNIb3ZlckVuYWJsZWQiLCJvbk1vdXNlTGVhdmUiLCJfVHJhbnNpdGlvbnMkcHJldlN0YXQiLCJQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlciIsImVtaXRFdmVudCIsIm5hdGl2ZVRpbWVzdGFtcCIsIl9wZXJmb3JtVHJhbnNpdGlvblNpZGVFZmZlY3RzIiwiaXNJbml0aWFsVHJhbnNpdGlvbiIsImlzQWN0aXZhdGlvblRyYW5zaXRpb24iLCJfbWVhc3VyZVJlc3BvbmRlclJlZ2lvbiIsImlzUHJldkFjdGl2ZSIsImlzTmV4dEFjdGl2ZSIsIl9hY3RpdmF0ZSIsIl9kZWFjdGl2YXRlIiwiX3RoaXMkX2NvbmZpZzIiLCJhbmRyb2lkX2Rpc2FibGVTb3VuZCIsImlzUHJlc3NDYW5jZWxlZEJ5TG9uZ1ByZXNzIiwiX3Nob3VsZExvbmdQcmVzc0NhbmNlbFByZXNzIiwiU291bmRNYW5hZ2VyIiwicGxheVRvdWNoU291bmQiLCJfZ2V0VG91Y2hGcm9tUHJlc3NFdmUiLCJfdG91Y2hBY3RpdmF0ZVRpbWUiLCJfdGhpcyRfdG91Y2hBY3RpdmF0ZVQiLCJtaW5QcmVzc0R1cmF0aW9uIiwicHJlc3NEdXJhdGlvbiIsImRlbGF5UHJlc3NPdXQiLCJfcHJlc3NSZWN0T2Zmc2V0JGJvdHQiLCJfcHJlc3NSZWN0T2Zmc2V0JGxlZnQiLCJfcHJlc3NSZWN0T2Zmc2V0JHJpZ2giLCJfcHJlc3NSZWN0T2Zmc2V0JHRvcCIsInJlZ2lvbkJvdHRvbSIsInJlZ2lvbkxlZnQiLCJyZWdpb25SaWdodCIsInJlZ2lvblRvcCIsIm9uTG9uZ1ByZXNzU2hvdWxkQ2FuY2VsUHJlc3NfREVQUkVDQVRFRCIsInNldExvbmdQcmVzc0RlYWN0aXZhdGlvbkRpc3RhbmNlIiwiZGVsYXkiLCJfZXZlbnQkbmF0aXZlRXZlbnQyIiwiX2lucHV0JG5hdGl2ZUV2ZW50IiwiY2xpZW50WCIsImNsaWVudFkiLCJfTmF0aXZlU291bmRNYW5hZ2VyIiwiTmF0aXZlU291bmRNYW5hZ2VyIiwiY29uc3RydWN0RXZlbnQiLCJQcmVzc2FiaWxpdHlQZXJmb3JtYW5jZUV2ZW50RW1pdHRlclNpbmdsZXRvbiIsImNhblVzZURPTSIsIkhPVkVSX1RIUkVTSE9MRF9NUyIsImxhc3RUb3VjaFRpbWVzdGFtcCIsImVuYWJsZUhvdmVyIiwiZGlzYWJsZUhvdmVyIiwiX2NyZWF0ZVJlYWN0TmF0aXZlQ29tcG9uZW50Q2xhc3MiLCJ0ZXh0Vmlld0NvbmZpZyIsImR5bmFtaWNUeXBlUmFtcCIsIm9uVGV4dExheW91dCIsIm9uSW5saW5lVmlld0xheW91dCIsImRhdGFEZXRlY3RvclR5cGUiLCJhbmRyb2lkX2h5cGhlbmF0aW9uRnJlcXVlbmN5IiwidG9wVGV4dExheW91dCIsInRvcElubGluZVZpZXdMYXlvdXQiLCJ2aXJ0dWFsVGV4dFZpZXdDb25maWciLCJfVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrIiwiTG9nQm94QnV0dG9uIiwiX1JlYWN0JHVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsInNldFByZXNzZWQiLCJfZXhjbHVkZWQyIiwiUEFTU1RIUk9VR0hfUFJPUFMiLCJjcmVhdGVQcmVzc2FiaWxpdHlDb25maWciLCJfdGhpcyRwcm9wcyRhcmlhQnVzeSIsIl90aGlzJHByb3BzJGFjY2Vzc2liaSIsIl90aGlzJHByb3BzJGFyaWFDaGVjIiwiX3RoaXMkcHJvcHMkYWNjZXNzaWJpMiIsIl90aGlzJHByb3BzJGFyaWFEaXNhIiwiX3RoaXMkcHJvcHMkYWNjZXNzaWJpMyIsIl90aGlzJHByb3BzJGFyaWFFeHBhIiwiX3RoaXMkcHJvcHMkYWNjZXNzaWJpNCIsIl90aGlzJHByb3BzJGFyaWFTZWxlIiwiX3RoaXMkcHJvcHMkYWNjZXNzaWJpNSIsIl90aGlzJHByb3BzJGFyaWFIaWRkIiwiX3RoaXMkcHJvcHMkaWQiLCJfdGhpcyRzdGF0ZSRwcmVzc2FiaWwiLCJldmVudEhhbmRsZXJzV2l0aG91dEJsdXJBbmRGb2N1cyIsImFjY2Vzc2liaWxpdHlTdGF0ZURpc2FibGVkIiwicmVqZWN0UmVzcG9uZGVyVGVybWluYXRpb24iLCJ0b3VjaFNvdW5kRGlzYWJsZWQiLCJnZXRCYWNrZ3JvdW5kTGlnaHRDb2xvciIsImdldEJhY2tncm91bmREYXJrQ29sb3IiLCJnZXRXYXJuaW5nRGFya0NvbG9yIiwiZ2V0RmF0YWxDb2xvciIsImdldEZhdGFsRGFya0NvbG9yIiwiZ2V0RXJyb3JEYXJrQ29sb3IiLCJnZXRXYXJuaW5nSGlnaGxpZ2h0Q29sb3IiLCJnZXREaXZpZGVyQ29sb3IiLCJnZXRIaWdobGlnaHRDb2xvciIsIl9MaW5raW5nIiwiZ2V0TGlua1JhbmdlcyIsInJlZ2V4UmVzdWx0IiwibG93ZXJCb3VuZCIsInVwcGVyQm91bmQiLCJUYXBwYWJsZUxpbmtzIiwiZnJhZ21lbnRzIiwiaW5kZXhDb3VudGVyIiwic3RhcnRJbmRleCIsImxpbmtSYW5nZSIsIm9wZW5VUkwiLCJsaW5rVGV4dCIsImNsZWFuQ29udGVudCIsIkxvZ0JveE1lc3NhZ2UiLCJfcHJvcHMkbWVzc2FnZSIsInN1YnN0aXR1dGlvblN0eWxlIiwiY3JlYXRlVW5kZXJMZW5ndGgiLCJjbGVhbk1lc3NhZ2UiLCJsYXN0T2Zmc2V0IiwicHJldk9mZnNldCIsInByZXZQYXJ0Iiwic3Vic3RpdHV0aW9uUGFydCIsImxhc3RQYXJ0IiwiX05hdGl2ZUV2ZW50RW1pdHRlcjIiLCJfTmF0aXZlSW50ZW50QW5kcm9pZCIsIl9OYXRpdmVMaW5raW5nTWFuYWdlciIsIk5hdGl2ZUxpbmtpbmdNYW5hZ2VyIiwiX3ZhbGlkYXRlVVJMIiwiTmF0aXZlSW50ZW50QW5kcm9pZCIsImNhbk9wZW5VUkwiLCJvcGVuU2V0dGluZ3MiLCJnZXRJbml0aWFsVVJMIiwic2VuZEludGVudCIsInNlbGVjdGVkVGFiIiwic2V0U2VsZWN0ZWRUYWIiLCJwYW5lbFBvc2l0aW9uIiwic2V0UGFuZWxQb3NpdGlvbiIsInNldEluc3BlY3RlZEVsZW1lbnQiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGlvbkluZGV4Iiwic2V0U2VsZWN0aW9uSW5kZXgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMTAiLCJlbGVtZW50c0hpZXJhcmNoeSIsInNldEVsZW1lbnRzSGllcmFyY2h5Iiwic2V0U2VsZWN0aW9uIiwiaGllcmFyY2h5SXRlbSIsIl9oaWVyYXJjaHlJdGVtJGdldElucyIsIm9uVG91Y2hQb2ludCIsInNldFRvdWNoZWRWaWV3RGF0YSIsInNldEluc3BlY3RpbmciLCJzZXRQZXJmaW5nIiwic2V0TmV0d29ya2luZyIsInNldFRvdWNoVGFyZ2V0aW5nIiwicGFuZWxDb250YWluZXJTdHlsZSIsInBhbmVsQ29udGFpbmVyIiwiZGV2dG9vbHNJc09wZW4iLCJpbnNwZWN0aW5nIiwicGVyZmluZyIsInRvdWNoVGFyZ2V0aW5nIiwibmV0d29ya2luZyIsIkluc3BlY3Rvck92ZXJsYXkiLCJmaW5kVmlld0ZvclRvdWNoRXZlbnQiLCJfZSRuYXRpdmVFdmVudCR0b3VjaGUiLCJoYW5kbGVTdGFydFNob3VsZFNldFJlc3BvbmRlciIsIl9TYWZlQXJlYVZpZXciLCJJbnNwZWN0b3JQYW5lbCIsInJlbmRlcldhaXRpbmciLCJ3YWl0aW5nVGV4dCIsImNvbnRlbnRzIiwicHJvcGVydGllcyIsIndhaXRpbmciLCJidXR0b25Sb3ciLCJJbnNwZWN0b3JQYW5lbEJ1dHRvbiIsIl9SZWFjdCRDb21wb25lbnQyIiwiYnV0dG9uIiwiYnV0dG9uUHJlc3NlZCIsImJ1dHRvblRleHQiLCJleHBvcnRlZCIsIl9SQ1RTYWZlQXJlYVZpZXdOYXRpdmVDb21wb25lbnQiLCJSQ1RTYWZlQXJlYVZpZXdOYXRpdmVDb21wb25lbnQiLCJfQW5pbWF0ZWRJbXBsZW1lbnRhdGlvbiIsIl9GcmFtZVJhdGVMb2dnZXIiLCJfc3BsaXRMYXlvdXRQcm9wczIiLCJfRGltZW5zaW9ucyIsIl9kaXNtaXNzS2V5Ym9hcmQiLCJfS2V5Ym9hcmQiLCJfQW5kcm9pZEhvcml6b250YWxTY3JvbGxDb250ZW50Vmlld05hdGl2ZUNvbXBvbmVudCIsIl9BbmRyb2lkSG9yaXpvbnRhbFNjcm9sbFZpZXdOYXRpdmVDb21wb25lbnQiLCJfcHJvY2Vzc0RlY2VsZXJhdGlvblJhdGUiLCJfU2Nyb2xsQ29udGVudFZpZXdOYXRpdmVDb21wb25lbnQiLCJfU2Nyb2xsVmlld0NvbW1hbmRzIiwiX1Njcm9sbFZpZXdDb250ZXh0IiwiX1Njcm9sbFZpZXdOYXRpdmVDb21wb25lbnQiLCJfU2Nyb2xsVmlld1N0aWNreUhlYWRlciIsIl9tZW1vaXplT25lIiwiTmF0aXZlSG9yaXpvbnRhbFNjcm9sbFZpZXdUdXBsZSIsIkFuZHJvaWRIb3Jpem9udGFsU2Nyb2xsVmlld05hdGl2ZUNvbXBvbmVudCIsIkFuZHJvaWRIb3Jpem9udGFsU2Nyb2xsQ29udGVudFZpZXdOYXRpdmVDb21wb25lbnQiLCJOYXRpdmVWZXJ0aWNhbFNjcm9sbFZpZXdUdXBsZSIsIlNjcm9sbFZpZXdOYXRpdmVDb21wb25lbnQiLCJTY3JvbGxDb250ZW50Vmlld05hdGl2ZUNvbXBvbmVudCIsIklTX0FOSU1BVElOR19UT1VDSF9TVEFSVF9USFJFU0hPTERfTVMiLCJfdGhpcyRwcm9wcyRjb250ZW50T2YiLCJfdGhpcyRwcm9wcyRjb250ZW50T2YyIiwiX3RoaXMkcHJvcHMkY29udGVudEluIiwiX3RoaXMkcHJvcHMkY29udGVudEluMiIsIl9zY3JvbGxBbmltYXRlZFZhbHVlQXR0YWNobWVudCIsIl9zdGlja3lIZWFkZXJSZWZzIiwiX2hlYWRlckxheW91dFlzIiwiX2tleWJvYXJkTWV0cmljcyIsIl9hZGRpdGlvbmFsU2Nyb2xsT2Zmc2V0IiwiX2lzVG91Y2hpbmciLCJfbGFzdE1vbWVudHVtU2Nyb2xsQmVnaW5UaW1lIiwiX2xhc3RNb21lbnR1bVNjcm9sbEVuZFRpbWUiLCJfb2JzZXJ2ZWRTY3JvbGxTaW5jZUJlY29taW5nUmVzcG9uZGVyIiwiX2JlY2FtZVJlc3BvbmRlcldoaWxlQW5pbWF0aW5nIiwiX3ByZXZlbnROZWdhdGl2ZVNjcm9sbE9mZnNldCIsIl9hbmltYXRlZCIsIl9zdWJzY3JpcHRpb25LZXlib2FyZFdpbGxTaG93IiwiX3N1YnNjcmlwdGlvbktleWJvYXJkV2lsbEhpZGUiLCJfc3Vic2NyaXB0aW9uS2V5Ym9hcmREaWRTaG93IiwiX3N1YnNjcmlwdGlvbktleWJvYXJkRGlkSGlkZSIsImxheW91dEhlaWdodCIsImdldFNjcm9sbFJlc3BvbmRlciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQyIiwiZ2V0U2Nyb2xsYWJsZU5vZGUiLCJfc2Nyb2xsVmlldyIsIm5hdGl2ZUluc3RhbmNlIiwiZ2V0SW5uZXJWaWV3Tm9kZSIsIl9pbm5lclZpZXciLCJnZXRJbm5lclZpZXdSZWYiLCJnZXROYXRpdmVTY3JvbGxSZWYiLCJzY3JvbGxUbyIsImRlcHJlY2F0ZWRYIiwiZGVwcmVjYXRlZEFuaW1hdGVkIiwiYW5pbWF0ZWQiLCJzY3JvbGxUb0VuZCIsImZsYXNoU2Nyb2xsSW5kaWNhdG9ycyIsInNjcm9sbFJlc3BvbmRlclNjcm9sbE5hdGl2ZUhhbmRsZVRvS2V5Ym9hcmQiLCJub2RlSGFuZGxlIiwiYWRkaXRpb25hbE9mZnNldCIsInByZXZlbnROZWdhdGl2ZVNjcm9sbE9mZnNldCIsIl90ZXh0SW5wdXRGb2N1c0Vycm9yIiwiX2lucHV0TWVhc3VyZUFuZFNjcm9sbFRvS2V5Ym9hcmQiLCJzY3JvbGxSZXNwb25kZXJab29tVG8iLCJ6b29tVG9SZWN0Iiwia2V5Ym9hcmRTY3JlZW5ZIiwic2Nyb2xsVGV4dElucHV0SW50b1Zpc2libGVSZWN0Iiwic2NyZWVuWSIsInNjcm9sbE9mZnNldFkiLCJfaGFuZGxlU2Nyb2xsIiwiX2hhbmRsZUxheW91dCIsImludmVydFN0aWNreUhlYWRlcnMiLCJfaGFuZGxlQ29udGVudE9uTGF5b3V0IiwiX2UkbmF0aXZlRXZlbnQkbGF5b3V0IiwiY3JlYXRlUmVmRm9yd2FyZGVyIiwic2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmRXaWxsU2hvdyIsImVuZENvb3JkaW5hdGVzIiwib25LZXlib2FyZFdpbGxTaG93Iiwic2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmRXaWxsSGlkZSIsIm9uS2V5Ym9hcmRXaWxsSGlkZSIsInNjcm9sbFJlc3BvbmRlcktleWJvYXJkRGlkU2hvdyIsIm9uS2V5Ym9hcmREaWRTaG93Iiwic2Nyb2xsUmVzcG9uZGVyS2V5Ym9hcmREaWRIaWRlIiwib25LZXlib2FyZERpZEhpZGUiLCJfaGFuZGxlTW9tZW50dW1TY3JvbGxCZWdpbiIsIm9uTW9tZW50dW1TY3JvbGxCZWdpbiIsIl9oYW5kbGVNb21lbnR1bVNjcm9sbEVuZCIsIkZyYW1lUmF0ZUxvZ2dlciIsImVuZFNjcm9sbCIsIm9uTW9tZW50dW1TY3JvbGxFbmQiLCJfaGFuZGxlU2Nyb2xsQmVnaW5EcmFnIiwiYmVnaW5TY3JvbGwiLCJrZXlib2FyZERpc21pc3NNb2RlIiwiZGlzbWlzc0tleWJvYXJkIiwib25TY3JvbGxCZWdpbkRyYWciLCJfaGFuZGxlU2Nyb2xsRW5kRHJhZyIsInZlbG9jaXR5IiwiX2lzQW5pbWF0aW5nIiwib25TY3JvbGxFbmREcmFnIiwidGltZVNpbmNlTGFzdE1vbWVudHVtU2Nyb2xsRW5kIiwiaXNBbmltYXRpbmciLCJfaGFuZGxlUmVzcG9uZGVyR3JhbnQiLCJfaGFuZGxlUmVzcG9uZGVyUmVqZWN0IiwiX2hhbmRsZVJlc3BvbmRlclJlbGVhc2UiLCJjdXJyZW50bHlGb2N1c2VkVGV4dElucHV0Iiwia2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcyIsIl9rZXlib2FyZElzRGlzbWlzc2libGUiLCJfaGFuZGxlUmVzcG9uZGVyVGVybWluYXRpb25SZXF1ZXN0IiwiX2hhbmRsZVNjcm9sbFNob3VsZFNldFJlc3BvbmRlciIsImRpc2FibGVTY3JvbGxWaWV3UGFuUmVzcG9uZGVyIiwiX2hhbmRsZVN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyIiwiX2hhbmRsZVN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyQ2FwdHVyZSIsImtleWJvYXJkTmV2ZXJQZXJzaXN0VGFwcyIsIl9zb2Z0S2V5Ym9hcmRJc0RldGFjaGVkIiwiaGFzRm9jdXNlZFRleHRJbnB1dCIsInNvZnRLZXlib2FyZE1heUJlT3BlbiIsIl9rZXlib2FyZEV2ZW50c0FyZVVucmVsaWFibGUiLCJfaGFuZGxlVG91Y2hFbmQiLCJrZXlib2FyZE5ldmVyUGVyc2lzdHNUYXBzIiwiX2hhbmRsZVRvdWNoQ2FuY2VsIiwiX2hhbmRsZVRvdWNoU3RhcnQiLCJfaGFuZGxlVG91Y2hNb3ZlIiwiX3Njcm9sbEFuaW1hdGVkVmFsdWUiLCJBbmltYXRlZEltcGxlbWVudGF0aW9uIiwiVmFsdWUiLCJjb250ZW50T2Zmc2V0Iiwic2V0T2Zmc2V0IiwiY29udGVudEluc2V0IiwibWV0cmljcyIsIl91cGRhdGVBbmltYXRlZE5vZGVBdHRhY2htZW50IiwicHJldkNvbnRlbnRJbnNldFRvcCIsIm5ld0NvbnRlbnRJbnNldFRvcCIsIl9nZXRLZXlGb3JJbmRleCIsInN0aWNreUhlYWRlckluZGljZXMiLCJhdHRhY2hOYXRpdmVFdmVudCIsIl9zZXRTdGlja3lIZWFkZXJSZWYiLCJfb25TdGlja3lIZWFkZXJMYXlvdXQiLCJsYXlvdXRZIiwiaW5kZXhPZkluZGV4IiwicHJldmlvdXNIZWFkZXJJbmRleCIsInByZXZpb3VzSGVhZGVyIiwic2V0TmV4dEhlYWRlclkiLCJOYXRpdmVEaXJlY3Rpb25hbFNjcm9sbFZpZXciLCJOYXRpdmVEaXJlY3Rpb25hbFNjcm9sbENvbnRlbnRWaWV3IiwiY29udGVudENvbnRhaW5lclN0eWxlIiwiY29udGVudENvbnRhaW5lckhvcml6b250YWwiLCJjaGlsZExheW91dFByb3BzIiwiY29udGVudFNpemVDaGFuZ2VQcm9wcyIsIlN0aWNreUhlYWRlckNvbXBvbmVudCIsIlNjcm9sbFZpZXdTdGlja3lIZWFkZXIiLCJuZXh0SGVhZGVyTGF5b3V0WSIsInNjcm9sbEFuaW1hdGVkVmFsdWUiLCJpbnZlcnRlZCIsImhpZGRlbk9uU2Nyb2xsIiwic3RpY2t5SGVhZGVySGlkZGVuT25TY3JvbGwiLCJzY3JvbGxWaWV3SGVpZ2h0IiwiSE9SSVpPTlRBTCIsIlZFUlRJQ0FMIiwiaGFzU3RpY2t5SGVhZGVycyIsImNvbnRlbnRDb250YWluZXIiLCJnZXRGb3J3YXJkaW5nUmVmIiwiYWx3YXlzQm91bmNlSG9yaXpvbnRhbCIsImFsd2F5c0JvdW5jZVZlcnRpY2FsIiwiYmFzZVN0eWxlIiwiYmFzZUhvcml6b250YWwiLCJiYXNlVmVydGljYWwiLCJvblNjcm9sbFNob3VsZFNldFJlc3BvbmRlciIsInNjcm9sbEV2ZW50VGhyb3R0bGUiLCJzZW5kTW9tZW50dW1FdmVudHMiLCJzbmFwVG9TdGFydCIsInNuYXBUb0VuZCIsInBhZ2luZ0VuYWJsZWQiLCJzbmFwVG9JbnRlcnZhbCIsInNuYXBUb09mZnNldHMiLCJkZWNlbGVyYXRpb25SYXRlIiwicHJvY2Vzc0RlY2VsZXJhdGlvblJhdGUiLCJyZWZyZXNoQ29udHJvbCIsInNjcm9sbFZpZXdSZWYiLCJfc3BsaXRMYXlvdXRQcm9wcyIsInNwbGl0TGF5b3V0UHJvcHMiLCJTY3JvbGxWaWV3Q29udGV4dCIsIm11dGF0b3IiLCJtZW1vaXplIiwiRm9yd2FyZGVkU2Nyb2xsVmlldyIsIl9EZWNheUFuaW1hdGlvbiIsIl9TcHJpbmdBbmltYXRpb24iLCJfVGltaW5nQW5pbWF0aW9uIiwiX2NyZWF0ZUFuaW1hdGVkQ29tcG9uZW50IiwiX0FuaW1hdGVkQWRkaXRpb24iLCJfQW5pbWF0ZWRDb2xvciIsIl9BbmltYXRlZERpZmZDbGFtcCIsIl9BbmltYXRlZERpdmlzaW9uIiwiX0FuaW1hdGVkSW50ZXJwb2xhdGlvbiIsIl9BbmltYXRlZE1vZHVsbyIsIl9BbmltYXRlZE11bHRpcGxpY2F0aW9uIiwiX0FuaW1hdGVkTm9kZSIsIl9BbmltYXRlZFN1YnRyYWN0aW9uIiwiX0FuaW1hdGVkVHJhY2tpbmciLCJfQW5pbWF0ZWRWYWx1ZSIsIl9BbmltYXRlZFZhbHVlWFkiLCJBbmltYXRlZEFkZGl0aW9uIiwic3VidHJhY3QiLCJBbmltYXRlZFN1YnRyYWN0aW9uIiwiZGl2aWRlIiwiQW5pbWF0ZWREaXZpc2lvbiIsIm11bHRpcGx5IiwiQW5pbWF0ZWRNdWx0aXBsaWNhdGlvbiIsIm1vZHVsbyIsIm1vZHVsdXMiLCJBbmltYXRlZE1vZHVsbyIsImRpZmZDbGFtcCIsIkFuaW1hdGVkRGlmZkNsYW1wIiwiX2NvbWJpbmVDYWxsYmFja3MiLCJvbkNvbXBsZXRlIiwibWF5YmVWZWN0b3JBbmltIiwiYW5pbSIsIkFuaW1hdGVkVmFsdWVYWSIsImNvbmZpZ1giLCJjb25maWdZIiwiX2NvbmZpZyRrZXkiLCJhWCIsImFZIiwicGFyYWxsZWwiLCJzdG9wVG9nZXRoZXIiLCJBbmltYXRlZENvbG9yIiwiY29uZmlnUiIsImNvbmZpZ0ciLCJjb25maWdCIiwiY29uZmlnQSIsIl9jb25maWckX2tleSIsImFSIiwiYUciLCJhQiIsImFBIiwic3ByaW5nIiwiYW5pbWF0ZWRWYWx1ZSIsImNvbmZpZ3VyYXRpb24iLCJzaW5nbGVWYWx1ZSIsInNpbmdsZUNvbmZpZyIsInN0b3BUcmFja2luZyIsInRvVmFsdWUiLCJBbmltYXRlZE5vZGUiLCJ0cmFjayIsIkFuaW1hdGVkVHJhY2tpbmciLCJTcHJpbmdBbmltYXRpb24iLCJhbmltYXRlIiwic3RvcEFuaW1hdGlvbiIsInJlc2V0QW5pbWF0aW9uIiwiX3N0YXJ0TmF0aXZlTG9vcCIsIml0ZXJhdGlvbnMiLCJfaXNVc2luZ05hdGl2ZURyaXZlciIsInVzZU5hdGl2ZURyaXZlciIsInRpbWluZyIsIlRpbWluZ0FuaW1hdGlvbiIsImRlY2F5IiwiRGVjYXlBbmltYXRpb24iLCJzZXF1ZW5jZSIsImFuaW1hdGlvbnMiLCJmaW5pc2hlZCIsImFuaW1hdGlvbiIsImRvbmVDb3VudCIsImhhc0VuZGVkIiwiZW5kUmVzdWx0IiwiQW5pbWF0ZWRWYWx1ZSIsInN0YWdnZXIiLCJsb29wIiwiX3JlZiRpdGVyYXRpb25zIiwiX3JlZiRyZXNldEJlZm9yZUl0ZXJhIiwicmVzZXRCZWZvcmVJdGVyYXRpb24iLCJpc0ZpbmlzaGVkIiwiaXRlcmF0aW9uc1NvRmFyIiwicmVzdGFydCIsImZvcmtFdmVudCIsIkFuaW1hdGVkRXZlbnQiLCJfX2FkZExpc3RlbmVyIiwidW5mb3JrRXZlbnQiLCJfX3JlbW92ZUxpc3RlbmVyIiwiYXJnTWFwcGluZyIsImFuaW1hdGVkRXZlbnQiLCJfX2lzTmF0aXZlIiwiX19nZXRIYW5kbGVyIiwiVmFsdWVYWSIsIkNvbG9yIiwiSW50ZXJwb2xhdGlvbiIsIkFuaW1hdGVkSW50ZXJwb2xhdGlvbiIsImNyZWF0ZUFuaW1hdGVkQ29tcG9uZW50IiwiX05hdGl2ZUFuaW1hdGVkSGVscGVyIiwiX0FuaW1hdGlvbjIiLCJfQW5pbWF0aW9uIiwiX2NvbmZpZyRkZWNlbGVyYXRpb24iLCJfY29uZmlnJGlzSW50ZXJhY3Rpb24iLCJfY29uZmlnJGl0ZXJhdGlvbnMiLCJfZGVjZWxlcmF0aW9uIiwiZGVjZWxlcmF0aW9uIiwiX3ZlbG9jaXR5IiwiX3VzZU5hdGl2ZURyaXZlciIsIk5hdGl2ZUFuaW1hdGVkSGVscGVyIiwic2hvdWxkVXNlTmF0aXZlRHJpdmVyIiwiX3BsYXRmb3JtQ29uZmlnIiwicGxhdGZvcm1Db25maWciLCJfX2lzSW50ZXJhY3Rpb24iLCJpc0ludGVyYWN0aW9uIiwiX19pdGVyYXRpb25zIiwiX19nZXROYXRpdmVBbmltYXRpb25Db25maWciLCJmcm9tVmFsdWUiLCJvblVwZGF0ZSIsIm9uRW5kIiwicHJldmlvdXNBbmltYXRpb24iLCJfX2FjdGl2ZSIsIl9sYXN0VmFsdWUiLCJfZnJvbVZhbHVlIiwiX29uVXBkYXRlIiwiX19vbkVuZCIsIl9fc3RhcnROYXRpdmVBbmltYXRpb24iLCJfYW5pbWF0aW9uRnJhbWUiLCJleHAiLCJhYnMiLCJfX2RlYm91bmNlZE9uRW5kIiwiQW5pbWF0aW9uIiwiX05hdGl2ZUFuaW1hdGVkTW9kdWxlIiwiX05hdGl2ZUFuaW1hdGVkVHVyYm9Nb2R1bGUiLCJOYXRpdmVBbmltYXRlZE1vZHVsZSIsIk5hdGl2ZUFuaW1hdGVkTm9uVHVyYm9Nb2R1bGUiLCJOYXRpdmVBbmltYXRlZFR1cmJvTW9kdWxlIiwiX19uYXRpdmVBbmltYXRlZE5vZGVUYWdDb3VudCIsIl9fbmF0aXZlQW5pbWF0aW9uSWRDb3VudCIsIndhaXRpbmdGb3JRdWV1ZWRPcGVyYXRpb25zIiwicXVldWVPcGVyYXRpb25zIiwic2luZ2xlT3BRdWV1ZSIsInVzZVNpbmdsZU9wQmF0Y2hpbmciLCJxdWV1ZUFuZEV4ZWN1dGVCYXRjaGVkT3BlcmF0aW9ucyIsImZsdXNoUXVldWVUaW1lb3V0IiwiZXZlbnRMaXN0ZW5lckdldFZhbHVlQ2FsbGJhY2tzIiwiZXZlbnRMaXN0ZW5lckFuaW1hdGlvbkZpbmlzaGVkQ2FsbGJhY2tzIiwiZ2xvYmFsRXZlbnRFbWl0dGVyR2V0VmFsdWVMaXN0ZW5lciIsImdsb2JhbEV2ZW50RW1pdHRlckFuaW1hdGlvbkZpbmlzaGVkTGlzdGVuZXIiLCJuYXRpdmVPcHMiLCJhcGlzIiwiQVBJIiwic2F2ZVZhbHVlQ2FsbGJhY2siLCJxdWV1ZU9wZXJhdGlvbiIsInNldFdhaXRpbmdGb3JJZGVudGlmaWVyIiwidW5zZXRXYWl0aW5nRm9ySWRlbnRpZmllciIsImRpc2FibGVRdWV1ZSIsInByZXZUaW1lb3V0IiwiZmx1c2hRdWV1ZSIsInNldHVwR2xvYmFsRXZlbnRFbWl0dGVyTGlzdGVuZXJzIiwic3RhcnRPcGVyYXRpb25CYXRjaCIsImZpbmlzaE9wZXJhdGlvbkJhdGNoIiwiY3JlYXRlQW5pbWF0ZWROb2RlIiwidXBkYXRlQW5pbWF0ZWROb2RlQ29uZmlnIiwic3RhcnRMaXN0ZW5pbmdUb0FuaW1hdGVkTm9kZVZhbHVlIiwic3RvcExpc3RlbmluZ1RvQW5pbWF0ZWROb2RlVmFsdWUiLCJjb25uZWN0QW5pbWF0ZWROb2RlcyIsInBhcmVudFRhZyIsImNoaWxkVGFnIiwiZGlzY29ubmVjdEFuaW1hdGVkTm9kZXMiLCJzdGFydEFuaW1hdGluZ05vZGUiLCJhbmltYXRpb25JZCIsIm5vZGVUYWciLCJlbmRDYWxsYmFjayIsInNldEFuaW1hdGVkTm9kZVZhbHVlIiwic2V0QW5pbWF0ZWROb2RlT2Zmc2V0IiwiZmxhdHRlbkFuaW1hdGVkTm9kZU9mZnNldCIsImV4dHJhY3RBbmltYXRlZE5vZGVPZmZzZXQiLCJjb25uZWN0QW5pbWF0ZWROb2RlVG9WaWV3IiwiZGlzY29ubmVjdEFuaW1hdGVkTm9kZUZyb21WaWV3IiwicmVzdG9yZURlZmF1bHRWYWx1ZXMiLCJkcm9wQW5pbWF0ZWROb2RlIiwiYWRkQW5pbWF0ZWRFdmVudFRvVmlldyIsImV2ZW50TWFwcGluZyIsInJlbW92ZUFuaW1hdGVkRXZlbnRGcm9tVmlldyIsImFuaW1hdGVkTm9kZVRhZyIsIlNVUFBPUlRFRF9DT0xPUl9TVFlMRVMiLCJTVVBQT1JURURfU1RZTEVTIiwic2NhbGVYIiwic2NhbGVZIiwidHJhbnNsYXRlWCIsInRyYW5zbGF0ZVkiLCJTVVBQT1JURURfVFJBTlNGT1JNUyIsInJvdGF0ZSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInBlcnNwZWN0aXZlIiwic2tld1giLCJza2V3WSIsIm1hdHJpeCIsIlNVUFBPUlRFRF9JTlRFUlBPTEFUSU9OX1BBUkFNUyIsImlucHV0UmFuZ2UiLCJvdXRwdXRSYW5nZSIsImV4dHJhcG9sYXRlIiwiZXh0cmFwb2xhdGVSaWdodCIsImV4dHJhcG9sYXRlTGVmdCIsImFkZFdoaXRlbGlzdGVkU3R5bGVQcm9wIiwiYWRkV2hpdGVsaXN0ZWRUcmFuc2Zvcm1Qcm9wIiwiYWRkV2hpdGVsaXN0ZWRJbnRlcnBvbGF0aW9uUGFyYW0iLCJwYXJhbSIsImlzU3VwcG9ydGVkQ29sb3JTdHlsZVByb3AiLCJpc1N1cHBvcnRlZFN0eWxlUHJvcCIsImlzU3VwcG9ydGVkVHJhbnNmb3JtUHJvcCIsImlzU3VwcG9ydGVkSW50ZXJwb2xhdGlvblBhcmFtIiwidmFsaWRhdGVUcmFuc2Zvcm0iLCJjb25maWdzIiwidmFsaWRhdGVTdHlsZXMiLCJ2YWxpZGF0ZUludGVycG9sYXRpb24iLCJnZW5lcmF0ZU5ld05vZGVUYWciLCJnZW5lcmF0ZU5ld0FuaW1hdGlvbklkIiwiYXNzZXJ0TmF0aXZlQW5pbWF0ZWRNb2R1bGUiLCJfd2FybmVkTWlzc2luZ05hdGl2ZUFuaW1hdGVkIiwidHJhbnNmb3JtRGF0YVR5cGUiLCJkZWdyZWVzIiwiX3Nob3VsZFVzZVR1cmJvQW5pbWF0ZWRNb2R1bGUiLCJzaG91bGRVc2VUdXJib0FuaW1hdGVkTW9kdWxlIiwiX0FuaW1hdGVkUHJvcHMiLCJzdGFydE5hdGl2ZUFuaW1hdGlvbk5leHRJZCIsIl9uYXRpdmVJZCIsIl9fZmluZEFuaW1hdGVkUHJvcHNOb2RlcyIsIkFuaW1hdGVkUHJvcHMiLCJfX2dldENoaWxkcmVuIiwic3RhcnROYXRpdmVBbmltYXRpb25XYWl0SWQiLCJfX21ha2VOYXRpdmUiLCJfX2dldE5hdGl2ZVRhZyIsIl9fb25BbmltYXRlZFZhbHVlVXBkYXRlUmVjZWl2ZWQiLCJfQW5pbWF0ZWROb2RlMiIsIl9BbmltYXRlZE9iamVjdCIsIl9BbmltYXRlZFN0eWxlIiwiY3JlYXRlQW5pbWF0ZWRQcm9wcyIsImlucHV0UHJvcHMiLCJBbmltYXRlZFN0eWxlIiwiaGFzQW5pbWF0ZWROb2RlIiwiQW5pbWF0ZWRPYmplY3QiLCJfX2dldFZhbHVlIiwiX19nZXRBbmltYXRlZFZhbHVlIiwiX19hdHRhY2giLCJfX2FkZENoaWxkIiwiX19kZXRhY2giLCJfYW5pbWF0ZWRWaWV3IiwiX19kaXNjb25uZWN0QW5pbWF0ZWRWaWV3IiwiX19yZW1vdmVDaGlsZCIsIl9fY29ubmVjdEFuaW1hdGVkVmlldyIsInNldE5hdGl2ZVZpZXciLCJhbmltYXRlZFZpZXciLCJfX3Jlc3RvcmVEZWZhdWx0VmFsdWVzIiwiX19nZXROYXRpdmVDb25maWciLCJwcm9wc0NvbmZpZyIsIl9fZ2V0UGxhdGZvcm1Db25maWciLCJOYXRpdmVBbmltYXRlZEFQSSIsIl91bmlxdWVJZCIsImhhc0xpc3RlbmVycyIsIl9zdGFydExpc3RlbmluZ1RvTmF0aXZlVmFsdWVVcGRhdGVzIiwiX3N0b3BMaXN0ZW5pbmdGb3JOYXRpdmVWYWx1ZVVwZGF0ZXMiLCJfX25hdGl2ZUFuaW1hdGVkVmFsdWVMaXN0ZW5lciIsIl9fc2hvdWxkVXBkYXRlTGlzdGVuZXJzRm9yTmV3TmF0aXZlVGFnIiwiX19jYWxsTGlzdGVuZXJzIiwiX3RoaXMkX19uYXRpdmVUYWciLCJfX3NldFBsYXRmb3JtQ29uZmlnIiwiX0FuaW1hdGVkV2l0aENoaWxkcmVuMiIsIk1BWF9ERVBUSCIsInZpc2l0IiwibWFwQW5pbWF0ZWROb2RlcyIsIl9BbmltYXRlZFdpdGhDaGlsZHJlbiIsIl92YWx1ZSIsIkFuaW1hdGVkV2l0aENoaWxkcmVuIiwiX2NoaWxkcmVuIiwiX0FuaW1hdGVkVHJhbnNmb3JtIiwiY3JlYXRlQW5pbWF0ZWRTdHlsZSIsImlucHV0U3R5bGUiLCJrZWVwVW5hbmltYXRlZFZhbHVlcyIsImFuaW1hdGVkU3R5bGVzIiwiQW5pbWF0ZWRUcmFuc2Zvcm0iLCJfaW5wdXRTdHlsZSIsInN0eWxlQ29uZmlnIiwic3R5bGVLZXkiLCJ0cmFuc2Zvcm1zIiwiX3RyYW5zZm9ybXMiLCJhbmltYXRlZE5vZGUiLCJ0cmFuc0NvbmZpZ3MiLCJuZXN0ZWRLZXkiLCJuZXN0ZWRWYWx1ZSIsInZpZXdSZWYiLCJldmVudE1hcHBpbmdzIiwidHJhdmVyc2UiLCJuYXRpdmVFdmVudFBhdGgiLCJhbmltYXRlZFZhbHVlVGFnIiwibWFwcGluZyIsInZhbGlkYXRlTWFwcGluZyIsInJlY01hcHBpbmciLCJyZWNFdnQiLCJtYXBwaW5nS2V5IiwiX2NhbGxMaXN0ZW5lcnMiLCJfYXJnTWFwcGluZyIsIl9hdHRhY2hlZEV2ZW50IiwiX19wbGF0Zm9ybUNvbmZpZyIsInZhbGlkYXRlZE1hcHBpbmciLCJmbHVzaFZhbHVlIiwiX0ludGVyYWN0aW9uTWFuYWdlciIsInJvb3ROb2RlIiwibGVhdmVzIiwiZmluZEFuaW1hdGVkU3R5bGVzIiwibGVhZiIsIl9leGVjdXRlQXNBbmltYXRlZEJhdGNoIiwiX3N0YXJ0aW5nVmFsdWUiLCJfb2Zmc2V0IiwiX2FuaW1hdGlvbiIsIl91cGRhdGVWYWx1ZSIsImZsYXR0ZW5PZmZzZXQiLCJleHRyYWN0T2Zmc2V0IiwiaW50ZXJwb2xhdGUiLCJjcmVhdGVJbnRlcmFjdGlvbkhhbmRsZSIsImNsZWFySW50ZXJhY3Rpb25IYW5kbGUiLCJfdHJhY2tpbmciLCJ0cmFja2luZyIsIkRFQlVHX0RFTEFZIiwiREVCVUciLCJpbnRlcmFjdGlvblN0YXJ0IiwiaW50ZXJhY3Rpb25Db21wbGV0ZSIsInJ1bkFmdGVySW50ZXJhY3Rpb25zIiwidGFza3MiLCJfc2NoZWR1bGVVcGRhdGUiLCJfdGFza1F1ZXVlIiwiZW5xdWV1ZVRhc2tzIiwiY2FuY2VsVGFza3MiLCJfaW5jIiwiX2FkZEludGVyYWN0aW9uU2V0IiwiX2RlbGV0ZUludGVyYWN0aW9uU2V0Iiwic2V0RGVhZGxpbmUiLCJfZGVhZGxpbmUiLCJfaW50ZXJhY3Rpb25TZXQiLCJvbk1vcmVUYXNrcyIsIl9uZXh0VXBkYXRlSGFuZGxlIiwiX3Byb2Nlc3NVcGRhdGUiLCJpbnRlcmFjdGlvbkNvdW50IiwibmV4dEludGVyYWN0aW9uQ291bnQiLCJoYXNUYXNrc1RvUHJvY2VzcyIsInByb2Nlc3NOZXh0IiwiVGFza1F1ZXVlIiwiX29uTW9yZVRhc2tzIiwiX3F1ZXVlU3RhY2siLCJwb3BhYmxlIiwiX2dldEN1cnJlbnRRdWV1ZSIsInRhc2tzVG9DYW5jZWwiLCJfZ2VuUHJvbWlzZSIsInN0YWNrSWR4IiwicXVldWVTdGFja1NpemUiLCJzdGFja0l0ZW0iLCJfRWFzaW5nIiwiY3JlYXRlTnVtZXJpY0ludGVycG9sYXRpb24iLCJlYXNpbmciLCJsaW5lYXIiLCJmaW5kUmFuZ2UiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4IiwibnVtZXJpY0NvbXBvbmVudFJlZ2V4IiwibWFwU3RyaW5nVG9OdW1lcmljQ29tcG9uZW50cyIsImlzQ29sb3IiLCJjb21wb25lbnRzIiwibGFzdE1hdGNoRW5kIiwiY3JlYXRlU3RyaW5nSW50ZXJwb2xhdGlvbiIsImZpcnN0T3V0cHV0IiwibnVtZXJpY0NvbXBvbmVudHMiLCJpbnRlcnBvbGF0aW9ucyIsImludGVycG9sYXRpb24iLCJjaGVja1ZhbGlkUmFuZ2VzIiwiY2hlY2tJbmZpbml0ZVJhbmdlIiwiY2hlY2tWYWxpZElucHV0UmFuZ2UiLCJfcGFyZW50IiwiX2dldEludGVycG9sYXRpb24iLCJfaW50ZXJwb2xhdGlvbiIsInBhcmVudFZhbHVlIiwib3V0cHV0VHlwZSIsInByb2Nlc3NlZENvbG9yIiwiZWFzZSIsInN0ZXAwIiwic3RlcDEiLCJiZXppZXIiLCJxdWFkIiwiY3ViaWMiLCJwb2x5IiwicG93IiwiY2lyY2xlIiwiZWxhc3RpYyIsImJvdW5jaW5lc3MiLCJiYWNrIiwiYm91bmNlIiwieDEiLCJ5MSIsIl9iZXppZXIiLCJpbiIsIl9pbiIsIm91dCIsImluT3V0IiwiTkVXVE9OX0lURVJBVElPTlMiLCJORVdUT05fTUlOX1NMT1BFIiwiU1VCRElWSVNJT05fUFJFQ0lTSU9OIiwiU1VCRElWSVNJT05fTUFYX0lURVJBVElPTlMiLCJrU3BsaW5lVGFibGVTaXplIiwia1NhbXBsZVN0ZXBTaXplIiwiZmxvYXQzMkFycmF5U3VwcG9ydGVkIiwiRmxvYXQzMkFycmF5IiwiYUExIiwiYUEyIiwiY2FsY0JlemllciIsImFUIiwiZ2V0U2xvcGUiLCJiaW5hcnlTdWJkaXZpZGUiLCJfYUEiLCJfYUIiLCJtWDEiLCJtWDIiLCJjdXJyZW50WCIsImN1cnJlbnRUIiwibmV3dG9uUmFwaHNvbkl0ZXJhdGUiLCJfYUd1ZXNzVCIsImFHdWVzc1QiLCJjdXJyZW50U2xvcGUiLCJtWTEiLCJtWTIiLCJzYW1wbGVWYWx1ZXMiLCJnZXRURm9yWCIsImludGVydmFsU3RhcnQiLCJjdXJyZW50U2FtcGxlIiwibGFzdFNhbXBsZSIsImRpc3QiLCJndWVzc0ZvclQiLCJpbml0aWFsU2xvcGUiLCJCZXppZXJFYXNpbmciLCJ2YWx1ZUluIiwiam9pbnRDYWxsYmFjayIsIm51bWJlciIsImdldExheW91dCIsImdldFRyYW5zbGF0ZVRyYW5zZm9ybSIsIlNwcmluZ0NvbmZpZyIsIl9jb25maWckb3ZlcnNob290Q2xhbSIsIl9jb25maWckcmVzdERpc3BsYWNlbSIsIl9jb25maWckcmVzdFNwZWVkVGhyZSIsIl9jb25maWckdmVsb2NpdHkiLCJfY29uZmlnJHZlbG9jaXR5MiIsIl9jb25maWckZGVsYXkiLCJfb3ZlcnNob290Q2xhbXBpbmciLCJvdmVyc2hvb3RDbGFtcGluZyIsIl9yZXN0RGlzcGxhY2VtZW50VGhyZXNob2xkIiwicmVzdERpc3BsYWNlbWVudFRocmVzaG9sZCIsIl9yZXN0U3BlZWRUaHJlc2hvbGQiLCJyZXN0U3BlZWRUaHJlc2hvbGQiLCJfaW5pdGlhbFZlbG9jaXR5IiwiX2xhc3RWZWxvY2l0eSIsIl90b1ZhbHVlIiwiX2RlbGF5Iiwic3RpZmZuZXNzIiwiZGFtcGluZyIsIm1hc3MiLCJfY29uZmlnJHN0aWZmbmVzcyIsIl9jb25maWckZGFtcGluZyIsIl9jb25maWckbWFzcyIsInNwZWVkIiwidGVuc2lvbiIsImZyaWN0aW9uIiwiX3N0aWZmbmVzcyIsIl9kYW1waW5nIiwiX21hc3MiLCJfY29uZmlnJGJvdW5jaW5lc3MiLCJfY29uZmlnJHNwZWVkIiwic3ByaW5nQ29uZmlnIiwiZnJvbUJvdW5jaW5lc3NBbmRTcGVlZCIsIl9jb25maWckdGVuc2lvbiIsIl9jb25maWckZnJpY3Rpb24iLCJmcm9tT3JpZ2FtaVRlbnNpb25BbmRGcmljdGlvbiIsIl90aGlzJF9pbml0aWFsVmVsb2NpdCIsImluaXRpYWxWZWxvY2l0eSIsIl9zdGFydFBvc2l0aW9uIiwiX2xhc3RQb3NpdGlvbiIsIl9sYXN0VGltZSIsIl9mcmFtZVRpbWUiLCJpbnRlcm5hbFN0YXRlIiwiZ2V0SW50ZXJuYWxTdGF0ZSIsImxhc3RQb3NpdGlvbiIsImxhc3RWZWxvY2l0eSIsImxhc3RUaW1lIiwiX3RpbWVvdXQiLCJNQVhfU1RFUFMiLCJkZWx0YVRpbWUiLCJ2MCIsInpldGEiLCJvbWVnYTAiLCJvbWVnYTEiLCJ4MCIsImVudmVsb3BlIiwiaXNPdmVyc2hvb3RpbmciLCJpc1ZlbG9jaXR5IiwiaXNEaXNwbGFjZW1lbnQiLCJkZWZhdWx0Q29sb3IiLCJpc1JnYmFWYWx1ZSIsImlzUmdiYUFuaW1hdGVkVmFsdWUiLCJfc3VzcGVuZENhbGxiYWNrcyIsInJnYmFBbmltYXRlZFZhbHVlIiwiaW5pdENvbG9yIiwibmF0aXZlQ29sb3IiLCJfcHJvY2Vzc0NvbG9yMiIsInNob3VsZFVwZGF0ZU5vZGVDb25maWciLCJfd2l0aFN1c3BlbmRlZENhbGxiYWNrcyIsInJnYmFWYWx1ZSIsInN0aWZmbmVzc0Zyb21PcmlnYW1pVmFsdWUiLCJvVmFsdWUiLCJkYW1waW5nRnJvbU9yaWdhbWlWYWx1ZSIsInN0YXJ0VmFsdWUiLCJlbmRWYWx1ZSIsInByb2plY3ROb3JtYWwiLCJsaW5lYXJJbnRlcnBvbGF0aW9uIiwicXVhZHJhdGljT3V0SW50ZXJwb2xhdGlvbiIsImIzRnJpY3Rpb24xIiwiYjNGcmljdGlvbjIiLCJiM0ZyaWN0aW9uMyIsImIzTm9ib3VuY2UiLCJib3VuY3lUZW5zaW9uIiwiYm91bmN5RnJpY3Rpb24iLCJfZWFzZUluT3V0IiwiZWFzZUluT3V0IiwiX2NvbmZpZyRlYXNpbmciLCJfY29uZmlnJGR1cmF0aW9uIiwiX2Vhc2luZyIsIl9kdXJhdGlvbiIsImZyYW1lRHVyYXRpb24iLCJudW1GcmFtZXMiLCJfdXNlQW5pbWF0ZWRQcm9wczMiLCJBbmltYXRlZENvbXBvbmVudCIsIl91c2VBbmltYXRlZFByb3BzIiwidXNlQW5pbWF0ZWRQcm9wcyIsIl91c2VBbmltYXRlZFByb3BzMiIsInJlZHVjZWRQcm9wcyIsImNhbGxiYWNrUmVmIiwicGFzc3Rocm91Z2hBbmltYXRlZFByb3BFeHBsaWNpdFZhbHVlcyIsInBhc3N0aHJvdWdoU3R5bGUiLCJwYXNzdGhyb3VnaFByb3BzIiwibWVyZ2VkU3R5bGUiLCJfdXNlUmVmRWZmZWN0IiwiX3VzZVJlZHVjZXIiLCJfdXNlUmVkdWNlcjIiLCJvblVwZGF0ZVJlZiIsInRpbWVyUmVmIiwidXNlTmF0aXZlUHJvcHNJbkZhYnJpYyIsInVzZUFuaW1hdGVkUHJvcHNMaWZlY3ljbGUiLCJyZWZFZmZlY3QiLCJpc0ZhYnJpY0luc3RhbmNlIiwicHJvcFZhbHVlIiwidXNlUmVmRWZmZWN0IiwicmVkdWNlQW5pbWF0ZWRQcm9wcyIsInByZXZOb2RlUmVmIiwiaXNVbm1vdW50aW5nUmVmIiwicHJldk5vZGUiLCJfaW5zdGFuY2UkZ2V0U2Nyb2xsUmUiLCJpc0ZhYnJpY1B1YmxpY0luc3RhbmNlIiwiY2xlYW51cFJlZiIsImlzUHVibGljSW5zdGFuY2UiLCJtYXliZUluc3RhbmNlIiwiaXNMZWdhY3lGYWJyaWNJbnN0YW5jZSIsIl9hIiwiX2IiLCJfbWluIiwiX21heCIsIl93YXJuZWRBYm91dERpdmlkZUJ5WmVybyIsIl9tb2R1bHVzIiwiYW5pbWF0aW9uQ2xhc3MiLCJhbmltYXRpb25Db25maWciLCJfYW5pbWF0aW9uQ2xhc3MiLCJfYW5pbWF0aW9uQ29uZmlnIiwiX05hdGl2ZUZyYW1lUmF0ZUxvZ2dlciIsInNldEdsb2JhbE9wdGlvbnMiLCJOYXRpdmVGcmFtZVJhdGVMb2dnZXIiLCJzZXRDb250ZXh0IiwiX0xheW91dEFuaW1hdGlvbiIsIl9OYXRpdmVLZXlib2FyZE9ic2VydmVyIiwiTmF0aXZlS2V5Ym9hcmRPYnNlcnZlciIsIl9jdXJyZW50bHlTaG93aW5nIiwiX2V2IiwiaXNWaXNpYmxlIiwiX3RoaXMkX2N1cnJlbnRseVNob3dpIiwic2NoZWR1bGVMYXlvdXRBbmltYXRpb24iLCJjb25maWd1cmVOZXh0IiwiVHlwZXMiLCJvbkFuaW1hdGlvbkRpZEVuZCIsIm9uQW5pbWF0aW9uRGlkRmFpbCIsImFuaW1hdGlvbkNvbXBsZXRpb25IYXNSdW4iLCJvbkFuaW1hdGlvbkNvbXBsZXRlIiwicmFjZVdpdGhBbmltYXRpb25JZCIsIl9nbG9iYWwkbmF0aXZlRmFicmljVSIsIlByZXNldHMiLCJlYXNlSW5FYXNlT3V0Iiwic3ByaW5nRGFtcGluZyIsImVhc2VJbiIsImVhc2VPdXQiLCJrZXlib2FyZCIsIlByb3BlcnRpZXMiLCJzY2FsZVhZIiwiY2hlY2tDb25maWciLCJkaXNhYmxlSW50ZXJ2YWxNb21lbnR1bSIsImVuZEZpbGxDb2xvciIsImZhZGluZ0VkZ2VMZW5ndGgiLCJuZXN0ZWRTY3JvbGxFbmFibGVkIiwib3ZlclNjcm9sbE1vZGUiLCJwZXJzaXN0ZW50U2Nyb2xsYmFyIiwic2Nyb2xsUGVyZlRhZyIsInNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvciIsInNuYXBUb0FsaWdubWVudCIsInRvcE1vbWVudHVtU2Nyb2xsQmVnaW4iLCJ0b3BNb21lbnR1bVNjcm9sbEVuZCIsInRvcFNjcm9sbEJlZ2luRHJhZyIsInRvcFNjcm9sbEVuZERyYWciLCJzaG93c1ZlcnRpY2FsU2Nyb2xsSW5kaWNhdG9yIiwiaXNJbnZlcnRlZFZpcnR1YWxpemVkTGlzdCIsInRvcFNjcm9sbFRvVG9wIiwiYXV0b21hdGljYWxseUFkanVzdENvbnRlbnRJbnNldHMiLCJhdXRvbWF0aWNhbGx5QWRqdXN0S2V5Ym9hcmRJbnNldHMiLCJhdXRvbWF0aWNhbGx5QWRqdXN0c1Njcm9sbEluZGljYXRvckluc2V0cyIsImJvdW5jZXMiLCJib3VuY2VzWm9vbSIsImNhbkNhbmNlbENvbnRlbnRUb3VjaGVzIiwiY2VudGVyQ29udGVudCIsImNvbnRlbnRJbnNldEFkanVzdG1lbnRCZWhhdmlvciIsImRpcmVjdGlvbmFsTG9ja0VuYWJsZWQiLCJpbmRpY2F0b3JTdHlsZSIsIm1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbiIsIm1heGltdW1ab29tU2NhbGUiLCJtaW5pbXVtWm9vbVNjYWxlIiwicGluY2hHZXN0dXJlRW5hYmxlZCIsInNjcm9sbEluZGljYXRvckluc2V0cyIsInNjcm9sbFRvT3ZlcmZsb3dFbmFibGVkIiwic2Nyb2xsc1RvVG9wIiwiem9vbVNjYWxlIiwib25TY3JvbGxUb1RvcCIsIl9BbmltYXRlZCIsIlNjcm9sbFZpZXdTdGlja3lIZWFkZXJXaXRoRm9yd2FyZGVkUmVmIiwiX25leHRIZWFkZXJMYXlvdXRZIiwibWVhc3VyZWQiLCJzZXRNZWFzdXJlZCIsInNldExheW91dFkiLCJzZXRMYXlvdXRIZWlnaHQiLCJzZXRUcmFuc2xhdGVZIiwic2V0TmV4dEhlYWRlckxheW91dFkiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiaXNGYWJyaWMiLCJzZXRJc0ZhYnJpYyIsIl91c2VTdGF0ZTEzIiwiaW5pdGlhbFRyYW5zbGF0ZVkiLCJfdXNlU3RhdGUxNCIsImFuaW1hdGVkVHJhbnNsYXRlWSIsInNldEFuaW1hdGVkVHJhbnNsYXRlWSIsImhhdmVSZWNlaXZlZEluaXRpYWxaZXJvVHJhbnNsYXRlWSIsInRyYW5zbGF0ZVlEZWJvdW5jZVRpbWVyIiwiYW5pbWF0ZWRWYWx1ZUxpc3RlbmVyIiwiZGVib3VuY2VUaW1lb3V0Iiwic3RpY2tTdGFydFBvaW50IiwiY29sbGlzaW9uUG9pbnQiLCJuZXdBbmltYXRlZFRyYW5zbGF0ZVkiLCJhbmltYXRlZExpc3RlbmVySWQiLCJfb25MYXlvdXQiLCJfQW5pbWF0ZWRNb2NrIiwiQW5pbWF0ZWRNb2NrIiwiaW5BbmltYXRpb25DYWxsYmFjayIsIm1vY2tBbmltYXRpb25TdGFydCIsImd1YXJkZWRDYWxsYmFjayIsImVtcHR5QW5pbWF0aW9uIiwibW9ja0NvbXBvc2l0ZUFuaW1hdGlvbiIsImFueVZhbHVlIiwiX0ZsYXRMaXN0IiwicmVtb3ZlQ2xpcHBlZFN1YnZpZXdzT3JEZWZhdWx0IiwibnVtQ29sdW1uc09yRGVmYXVsdCIsIm51bUNvbHVtbnMiLCJpc0FycmF5TGlrZSIsIl9SZWFjdCRQdXJlQ29tcG9uZW50IiwiX3ZpcnR1YWxpemVkTGlzdFBhaXJzIiwiX2NhcHR1cmVSZWYiLCJfbGlzdFJlZiIsIl9nZXRJdGVtIiwia2siLCJpdGVtSW5kZXgiLCJfZ2V0SXRlbUNvdW50IiwiY2VpbCIsIl9rZXlFeHRyYWN0b3IiLCJfdGhpcyRwcm9wcyRrZXlFeHRyYWMiLCJrZXlFeHRyYWN0b3IiLCJkZWZhdWx0S2V5RXh0cmFjdG9yIiwiX3JlbmRlcmVyIiwiTGlzdEl0ZW1Db21wb25lbnQiLCJyZW5kZXJJdGVtIiwiY29sdW1uV3JhcHBlclN0eWxlIiwiY29scyIsInJlbmRlclByb3AiLCJfbWVtb2l6ZWRSZW5kZXJlciIsIm1lbW9pemVPbmUiLCJfY2hlY2tQcm9wcyIsInZpZXdhYmlsaXR5Q29uZmlnQ2FsbGJhY2tQYWlycyIsInBhaXIiLCJ2aWV3YWJpbGl0eUNvbmZpZyIsIm9uVmlld2FibGVJdGVtc0NoYW5nZWQiLCJfY3JlYXRlT25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCIsIl90aGlzJHByb3BzIiwic2Nyb2xsVG9JbmRleCIsInNjcm9sbFRvSXRlbSIsInNjcm9sbFRvT2Zmc2V0IiwicmVjb3JkSW50ZXJhY3Rpb24iLCJnZXRTY3JvbGxSZWYiLCJnZXRJdGVtQ291bnQiLCJfcHVzaE11bHRpQ29sdW1uVmlld2FibGUiLCJfdGhpcyRwcm9wcyRrZXlFeHRyYWMyIiwiY2hhbmdlZCIsInZpZXdhYmxlSXRlbXMiLCJfdGhpcyRwcm9wczIiLCJfcmVtb3ZlQ2xpcHBlZFN1YnZpZXdzIiwiX3RoaXMkcHJvcHMyJHN0cmljdE1vIiwic3RyaWN0TW9kZSIsInNhZmVJc05hTiIsInBvbnlmaWxsIiwic2Vjb25kIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwibWVtb2l6ZWQiLCJWaXJ0dWFsaXplZExpc3RDb250ZXh0UmVzZXR0ZXIiLCJWaXJ0dWFsaXplZExpc3RDb250ZXh0IiwiVmlld2FiaWxpdHlIZWxwZXIiLCJGaWxsUmF0ZUhlbHBlciIsImNvbXB1dGVXaW5kb3dlZFJlbmRlckxpbWl0cyIsImVsZW1lbnRzVGhhdE92ZXJsYXBPZmZzZXRzIiwibmV3UmFuZ2VDb3VudCIsIm9mZnNldHMiLCJsaXN0TWV0cmljcyIsIml0ZW1Db3VudCIsIm9mZnNldEluZGV4IiwiY3VycmVudE9mZnNldCIsIm1pZCIsImdldENlbGxNZXRyaWNzQXBwcm94Iiwic2NhbGVkT2Zmc2V0U3RhcnQiLCJzY2FsZWRPZmZzZXRFbmQiLCJtYXhUb1JlbmRlclBlckJhdGNoIiwid2luZG93U2l6ZSIsInNjcm9sbE1ldHJpY3MiLCJ2aXNpYmxlTGVuZ3RoIiwiX3Njcm9sbE1ldHJpY3Mkem9vbVNjIiwidmlzaWJsZUJlZ2luIiwidmlzaWJsZUVuZCIsIm92ZXJzY2FuTGVuZ3RoIiwibGVhZEZhY3RvciIsImZpbGxQcmVmZXJlbmNlIiwib3ZlcnNjYW5CZWdpbiIsIm92ZXJzY2FuRW5kIiwibGFzdEl0ZW1PZmZzZXQiLCJfZWxlbWVudHNUaGF0T3ZlcmxhcE8iLCJfZWxlbWVudHNUaGF0T3ZlcmxhcE8yIiwib3ZlcnNjYW5GaXJzdCIsIm92ZXJzY2FuTGFzdCIsInZpc2libGUiLCJuZXdDZWxsQ291bnQiLCJtYXhOZXdDZWxscyIsImZpcnN0V2lsbEFkZE1vcmUiLCJmaXJzdFNob3VsZEluY3JlbWVudCIsImxhc3RXaWxsQWRkTW9yZSIsImxhc3RTaG91bGRJbmNyZW1lbnQiLCJfQmF0Y2hpbmF0b3IiLCJfY2xhbXAiLCJfQ2hpbGRMaXN0Q29sbGVjdGlvbiIsIl9GaWxsUmF0ZUhlbHBlciIsIl9MaXN0TWV0cmljc0FnZ3JlZ2F0b3IiLCJfU3RhdGVTYWZlUHVyZUNvbXBvbmVudCIsIl9WaWV3YWJpbGl0eUhlbHBlciIsIl9WaXJ0dWFsaXplZExpc3RDZWxsUmVuZGVyZXIiLCJPTl9FREdFX1JFQUNIRURfRVBTSUxPTiIsIl91c2VkSW5kZXhGb3JLZXkiLCJfa2V5bGVzc0l0ZW1Db21wb25lbnROYW1lIiwiZ2V0U2Nyb2xsaW5nVGhyZXNob2xkIiwidGhyZXNob2xkIiwiX1N0YXRlU2FmZVB1cmVDb21wb25lIiwiX3RoaXMkcHJvcHMkdXBkYXRlQ2VsIiwiX3RoaXMkcHJvcHMkbWFpbnRhaW5WIiwiX3RoaXMkcHJvcHMkbWFpbnRhaW5WMiIsIl9nZXRTY3JvbGxNZXRyaWNzIiwiX3Njcm9sbE1ldHJpY3MiLCJfZ2V0T3V0ZXJtb3N0UGFyZW50TGlzdFJlZiIsIl9pc05lc3RlZFdpdGhTYW1lT3JpZW50YXRpb24iLCJnZXRPdXRlcm1vc3RQYXJlbnRMaXN0UmVmIiwiX3JlZ2lzdGVyQXNOZXN0ZWRDaGlsZCIsImNoaWxkTGlzdCIsIl9uZXN0ZWRDaGlsZExpc3RzIiwiY2VsbEtleSIsIl9oYXNJbnRlcmFjdGVkIiwiX3VucmVnaXN0ZXJBc05lc3RlZENoaWxkIiwiX29uVXBkYXRlU2VwYXJhdG9ycyIsIl9jZWxsUmVmcyIsInVwZGF0ZVNlcGFyYXRvclByb3BzIiwiX2dldFNwYWNlcktleSIsImlzVmVydGljYWwiLCJfbGlzdE1ldHJpY3MiLCJMaXN0TWV0cmljc0FnZ3JlZ2F0b3IiLCJfZm9vdGVyTGVuZ3RoIiwiX2hhc1RyaWdnZXJlZEluaXRpYWxTY3JvbGxUb0luZGV4IiwiX2hhc01vcmUiLCJfaGFzV2FybmVkIiwiX2hlYWRlckxlbmd0aCIsIl9oaVByaUluUHJvZ3Jlc3MiLCJfaW5kaWNlc1RvS2V5cyIsIl9sYXN0Rm9jdXNlZENlbGxLZXkiLCJDaGlsZExpc3RDb2xsZWN0aW9uIiwiX29mZnNldEZyb21QYXJlbnRWaXJ0dWFsaXplZExpc3QiLCJfcGVuZGluZ1ZpZXdhYmlsaXR5VXBkYXRlIiwiX3ByZXZQYXJlbnRPZmZzZXQiLCJkT2Zmc2V0IiwiZHQiLCJfc2Nyb2xsUmVmIiwiX3NlbnRTdGFydEZvckNvbnRlbnRMZW5ndGgiLCJfc2VudEVuZEZvckNvbnRlbnRMZW5ndGgiLCJfdmlld2FiaWxpdHlUdXBsZXMiLCJfY2FwdHVyZVNjcm9sbFJlZiIsIl9kZWZhdWx0UmVuZGVyU2Nyb2xsQ29tcG9uZW50Iiwib25SZWZyZXNoIiwiX3Byb3BzJHJlZnJlc2hpbmciLCJyZWZyZXNoaW5nIiwicHJvZ3Jlc3NWaWV3T2Zmc2V0IiwiX29uQ2VsbExheW91dCIsImNlbGxJbmRleCIsImxheW91dEhhc0NoYW5nZWQiLCJub3RpZnlDZWxsTGF5b3V0Iiwib3JpZW50YXRpb24iLCJfb3JpZW50YXRpb24iLCJfc2NoZWR1bGVDZWxsc1RvUmVuZGVyVXBkYXRlIiwiX3RyaWdnZXJSZW1lYXN1cmVGb3JDaGlsZExpc3RzSW5DZWxsIiwiX2NvbXB1dGVCbGFua25lc3MiLCJfdXBkYXRlVmlld2FibGVJdGVtcyIsImNlbGxzQXJvdW5kVmlld3BvcnQiLCJfb25DZWxsRm9jdXNDYXB0dXJlIiwiX3VwZGF0ZUNlbGxzVG9SZW5kZXIiLCJfb25DZWxsVW5tb3VudCIsIm5vdGlmeUNlbGxVbm1vdW50ZWQiLCJtZWFzdXJlTGF5b3V0UmVsYXRpdmVUb0NvbnRhaW5pbmdMaXN0IiwiX3NlbGVjdExlbmd0aCIsIl9tYXliZUNhbGxPbkVkZ2VSZWFjaGVkIiwiX29uTGF5b3V0RW1wdHkiLCJfb25MYXlvdXRGb290ZXIiLCJfZ2V0Rm9vdGVyQ2VsbEtleSIsIl9vbkxheW91dEhlYWRlciIsIl9vbkNvbnRlbnRTaXplQ2hhbmdlIiwibm90aWZ5TGlzdENvbnRlbnRMYXlvdXQiLCJfbWF5YmVTY3JvbGxUb0luaXRpYWxTY3JvbGxJbmRleCIsIl9jb252ZXJ0UGFyZW50U2Nyb2xsTWV0cmljcyIsImNvbnRlbnRMZW5ndGgiLCJnZXRDb250ZW50TGVuZ3RoIiwiX29uU2Nyb2xsIiwibGF5b3V0TWVhc3VyZW1lbnQiLCJjb250ZW50U2l6ZSIsIl9vZmZzZXRGcm9tU2Nyb2xsRXZlbnQiLCJfdGhpcyRfY29udmVydFBhcmVudFMiLCJwZXJmIiwicHJldkR0IiwicGVuZGluZ1Njcm9sbFVwZGF0ZUNvdW50IiwiX2ZpbGxSYXRlSGVscGVyIiwiYWN0aXZhdGUiLCJfb25TY3JvbGxCZWdpbkRyYWciLCJ2aWV3YWJpbGl0eUhlbHBlciIsIl9vblNjcm9sbEVuZERyYWciLCJfc2VsZWN0T2Zmc2V0IiwiX29uTW9tZW50dW1TY3JvbGxCZWdpbiIsIl9vbk1vbWVudHVtU2Nyb2xsRW5kIiwiX2FkanVzdENlbGxzQXJvdW5kVmlld3BvcnQiLCJyZW5kZXJNYXNrIiwiX2NyZWF0ZVJlbmRlck1hc2siLCJfZ2V0Tm9uVmlld3BvcnRSZW5kZXJSZWdpb25zIiwiZXF1YWxzIiwiX2NyZWF0ZVZpZXdUb2tlbiIsImlzVmlld2FibGUiLCJsYXN0Rm9jdXNlZENlbGxSZW5kZXJlciIsImZvY3VzZWRDZWxsSW5kZXgiLCJfZ2V0SXRlbUtleSIsImhlaWdodE9mQ2VsbHNCZWZvcmVGb2N1c2VkIiwiaGVpZ2h0T2ZDZWxsc0FmdGVyRm9jdXNlZCIsIl91cGRhdGVDZWxsc1RvUmVuZGVyQmF0Y2hlciIsIkJhdGNoaW5hdG9yIiwidXBkYXRlQ2VsbHNCYXRjaGluZ1BlcmlvZCIsImluaXRpYWxSZW5kZXJSZWdpb24iLCJfaW5pdGlhbFJlbmRlclJlZ2lvbiIsIm1pbkluZGV4Rm9yVmlzaWJsZSIsImZpcnN0VmlzaWJsZUl0ZW1LZXkiLCJpbml0aWFsU2Nyb2xsSW5kZXgiLCJ2ZXJ5TGFzdCIsImdldEl0ZW1MYXlvdXQiLCJvblNjcm9sbFRvSW5kZXhGYWlsZWQiLCJ2aWV3T2Zmc2V0Iiwidmlld1Bvc2l0aW9uIiwiZ2V0SGlnaGVzdE1lYXN1cmVkQ2VsbEluZGV4IiwiYXZlcmFnZUl0ZW1MZW5ndGgiLCJnZXRBdmVyYWdlQ2VsbExlbmd0aCIsImhpZ2hlc3RNZWFzdXJlZEZyYW1lSW5kZXgiLCJnZXRDZWxsT2Zmc2V0QXBwcm94IiwiX3RoaXMkcHJvcHMzIiwic2Nyb2xsUmVmIiwiX3RoaXMkX29yaWVudGF0aW9uIiwicnRsIiwiaGFzQ29udGVudExlbmd0aCIsIl9zY3JvbGxUb1BhcmFtc0Zyb21PZmZzZXQiLCJfdGhpcyRfb3JpZW50YXRpb24yIiwiY2FydE9mZnNldCIsImNhcnRlc2lhbk9mZnNldCIsIl9nZXRDZWxsS2V5IiwiX3RoaXMkY29udGV4dCIsImhhc01vcmUiLCJ3aW5kb3dTaXplT3JEZWZhdWx0IiwiZmxhdFN0eWxlcyIsIm9uRW5kUmVhY2hlZFRocmVzaG9sZCIsIm9uRW5kUmVhY2hlZFRocmVzaG9sZE9yRGVmYXVsdCIsIl90aGlzJF9zY3JvbGxNZXRyaWNzIiwiZGlzdGFuY2VGcm9tRW5kIiwiX2NvbnN0cmFpblRvSXRlbUNvdW50IiwibmV3Q2VsbHNBcm91bmRWaWV3cG9ydCIsImRpc2FibGVWaXJ0dWFsaXphdGlvbiIsInJlbmRlckFoZWFkIiwibWF4VG9SZW5kZXJQZXJCYXRjaE9yRGVmYXVsdCIsImNoaWxkSWR4IiwiX2ZpbmRGaXJzdENoaWxkV2l0aE1vcmUiLCJjZWxsS2V5Rm9ySW5kZXgiLCJhbnlJbkNlbGwiLCJyZWdpc3RlckFzTmVzdGVkQ2hpbGQiLCJ1bnJlZ2lzdGVyQXNOZXN0ZWRDaGlsZCIsImRlYWN0aXZhdGVBbmRGbHVzaCIsIl9wdXNoQ2VsbHMiLCJzdGlja3lJbmRpY2VzRnJvbVByb3BzIiwiaW52ZXJzaW9uU3R5bGUiLCJfdGhpcyRwcm9wczQiLCJDZWxsUmVuZGVyZXJDb21wb25lbnQiLCJJdGVtU2VwYXJhdG9yQ29tcG9uZW50IiwiTGlzdEhlYWRlckNvbXBvbmVudCIsInN0aWNreU9mZnNldCIsInByZXZDZWxsS2V5Iiwic2hvdWxkTGlzdGVuRm9yTGF5b3V0Iiwib25VcGRhdGVTZXBhcmF0b3JzIiwib25DZWxsRm9jdXNDYXB0dXJlIiwib25Vbm1vdW50Iiwib25DZWxsTGF5b3V0IiwibmVzdGVkQ29udGV4dCIsImhvcml6b250YWxPckRlZmF1bHQiLCJfdGhpcyRwcm9wcyRzY3JvbGxFdmUiLCJfdGhpcyRwcm9wczUiLCJMaXN0RW1wdHlDb21wb25lbnQiLCJMaXN0Rm9vdGVyQ29tcG9uZW50IiwiX3RoaXMkcHJvcHM2IiwiaG9yaXpvbnRhbGx5SW52ZXJ0ZWQiLCJ2ZXJ0aWNhbGx5SW52ZXJ0ZWQiLCJWaXJ0dWFsaXplZExpc3RDZWxsQ29udGV4dFByb3ZpZGVyIiwiTGlzdEhlYWRlckNvbXBvbmVudFN0eWxlIiwic3BhY2VyS2V5IiwicmVuZGVyUmVnaW9ucyIsImVudW1lcmF0ZVJlZ2lvbnMiLCJsYXN0UmVnaW9uIiwibGFzdFNwYWNlciIsImlzU3BhY2VyIiwiaXNMYXN0U3BhY2VyIiwiY29uc3RyYWluVG9NZWFzdXJlZCIsImNsYW1wIiwiZmlyc3RNZXRyaWNzIiwibGFzdE1ldHJpY3MiLCJzcGFjZXJTaXplIiwiTGlzdEZvb3RlckNvbXBvbmVudFN0eWxlIiwic2Nyb2xsUHJvcHMiLCJpbm5lclJldCIsIlZpcnR1YWxpemVkTGlzdENvbnRleHRQcm92aWRlciIsImdldFNjcm9sbE1ldHJpY3MiLCJyZW5kZXJTY3JvbGxDb21wb25lbnQiLCJzY3JvbGxDb250ZXh0IiwibmVzdGluZyIsIl9yZW5kZXJEZWJ1Z092ZXJsYXkiLCJfdGhpcyRwcm9wczciLCJyZXNldFZpZXdhYmxlSW5kaWNlcyIsImhpUHJpSW5Qcm9ncmVzcyIsImNvbXB1dGVCbGFua25lc3MiLCJmb3JFYWNoSW5DZWxsIiwibWV0cmljc0NoYW5nZWQiLCJfdGhpczUiLCJmcmFtZXNJbkxheW91dCIsIndpbmRvd1RvcCIsImZyYW1lTGFzdCIsIndpbmRvd0xlbiIsInZpc1RvcCIsInZpc0xlbiIsImRlYnVnT3ZlcmxheUJhc2UiLCJkZWJ1Z092ZXJsYXkiLCJkZWJ1Z092ZXJsYXlGcmFtZSIsImRlYnVnT3ZlcmxheUZyYW1lTGFzdCIsImRlYnVnT3ZlcmxheUZyYW1lVmlzIiwiX3RoaXMkcHJvcHM4Iiwib25TdGFydFJlYWNoZWQiLCJvblN0YXJ0UmVhY2hlZFRocmVzaG9sZCIsIm9uRW5kUmVhY2hlZCIsIl90aGlzJF9zY3JvbGxNZXRyaWNzMiIsImRpc3RhbmNlRnJvbVN0YXJ0IiwiREVGQVVMVF9USFJFU0hPTERfUFgiLCJzdGFydFRocmVzaG9sZCIsImVuZFRocmVzaG9sZCIsImlzV2l0aGluU3RhcnRUaHJlc2hvbGQiLCJpc1dpdGhpbkVuZFRocmVzaG9sZCIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRIZWlnaHQiLCJfZSRuYXRpdmVFdmVudCIsIl90aGlzJF9vcmllbnRhdGlvbjMiLCJfc2hvdWxkUmVuZGVyV2l0aFByaW9yaXR5Iiwic2NoZWR1bGUiLCJfdGhpcyRzdGF0ZSRjZWxsc0Fyb3UiLCJfdGhpcyRfc2Nyb2xsTWV0cmljczMiLCJoaVByaSIsIm9uU3RhcnRSZWFjaGVkVGhyZXNob2xkT3JEZWZhdWx0IiwiZGlzdFRvcCIsImRpc3RCb3R0b20iLCJfX2dldExpc3RNZXRyaWNzIiwiX3RoaXM2IiwiX2ZpbmRJdGVtSW5kZXhXaXRoS2V5IiwiY3VyS2V5IiwiYWRkaXRpb25hbFJlZ2lvbnMiLCJDZWxsUmVuZGVyTWFzayIsImFsbFJlZ2lvbnMiLCJyZWdpb24iLCJhZGRDZWxscyIsImluaXRpYWxSZWdpb24iLCJzdGlja3lJbmRpY2VzU2V0IiwiX2Vuc3VyZUNsb3Nlc3RTdGlja3lIZWFkZXIiLCJfcHJvcHMkaW5pdGlhbFNjcm9sbEkiLCJmaXJzdENlbGxJbmRleCIsImxhc3RDZWxsSW5kZXgiLCJpbml0aWFsTnVtVG9SZW5kZXJPckRlZmF1bHQiLCJpbml0aWFsTnVtVG9SZW5kZXIiLCJjZWxsSWR4IiwiaXRlbUlkeCIsIl9uZXdQcm9wcyRtYWludGFpblZpcyIsIl9uZXdQcm9wcyRtYWludGFpblZpczIiLCJudW1DZWxscyIsIm1haW50YWluVmlzaWJsZUNvbnRlbnRQb3NpdGlvbkFkanVzdG1lbnQiLCJwcmV2Rmlyc3RWaXNpYmxlSXRlbUtleSIsIm5ld0ZpcnN0VmlzaWJsZUl0ZW1LZXkiLCJmaXJzdFZpc2libGVJdGVtSW5kZXgiLCJjb25zdHJhaW5lZENlbGxzIiwibGFzdFBvc3NpYmxlQ2VsbEluZGV4IiwibWF4Rmlyc3QiLCJTdGF0ZVNhZmVQdXJlQ29tcG9uZW50IiwiZGVsYXlNUyIsIl90YXNrSGFuZGxlIiwiX2NlbGxLZXlUb0NoaWxkcmVuIiwiX2NoaWxkcmVuVG9DZWxsS2V5IiwiX3RoaXMkX2NlbGxLZXlUb0NoaWxkIiwiY2VsbExpc3RzIiwibGlzdFNldCIsIl90aGlzJF9jZWxsS2V5VG9DaGlsZDIiLCJfdGhpcyRfY2VsbEtleVRvQ2hpbGQzIiwiSW5mbyIsImFueV9ibGFua19jb3VudCIsImFueV9ibGFua19tcyIsImFueV9ibGFua19zcGVlZF9zdW0iLCJtb3N0bHlfYmxhbmtfY291bnQiLCJtb3N0bHlfYmxhbmtfbXMiLCJwaXhlbHNfYmxhbmsiLCJwaXhlbHNfc2FtcGxlZCIsInBpeGVsc19zY3JvbGxlZCIsInRvdGFsX3RpbWVfc3BlbnQiLCJzYW1wbGVfY291bnQiLCJfbWluU2FtcGxlQ291bnQiLCJfc2FtcGxlUmF0ZSIsIl9hbnlCbGFua1N0YXJ0VGltZSIsIl9lbmFibGVkIiwiX2luZm8iLCJfbW9zdGx5QmxhbmtTdGFydFRpbWUiLCJfc2FtcGxlc1N0YXJ0VGltZSIsIl9yZXNldERhdGEiLCJkZXJpdmVkIiwiYXZnX2JsYW5rbmVzcyIsImF2Z19zcGVlZCIsImF2Z19zcGVlZF93aGVuX2FueV9ibGFuayIsImFueV9ibGFua19wZXJfbWluIiwiYW55X2JsYW5rX3RpbWVfZnJhYyIsIm1vc3RseV9ibGFua19wZXJfbWluIiwibW9zdGx5X2JsYW5rX3RpbWVfZnJhYyIsInNjcm9sbFNwZWVkIiwiYmxhbmtUb3AiLCJmaXJzdEZyYW1lIiwiZ2V0Q2VsbE1ldHJpY3MiLCJibGFua0JvdHRvbSIsImxhc3RGcmFtZSIsImJvdHRvbUVkZ2UiLCJibGFua25lc3MiLCJzZXRTYW1wbGVSYXRlIiwic2FtcGxlUmF0ZSIsInNldE1pblNhbXBsZUNvdW50IiwibWluU2FtcGxlQ291bnQiLCJfYXZlcmFnZUNlbGxMZW5ndGgiLCJfY2VsbE1ldHJpY3MiLCJfaGlnaGVzdE1lYXN1cmVkQ2VsbEluZGV4IiwiX21lYXN1cmVkQ2VsbHNMZW5ndGgiLCJfbWVhc3VyZWRDZWxsc0NvdW50IiwiX2ludmFsaWRhdGVJZk9yaWVudGF0aW9uQ2hhbmdlZCIsImZsb3dSZWxhdGl2ZU9mZnNldCIsImRMZW5ndGgiLCJfY29udGVudExlbmd0aCIsIl9wcm9wcyRrZXlFeHRyYWN0b3IiLCJfZ2V0SXRlbUxheW91dCIsImZyYW1lTWV0cmljcyIsInJlbWFpbmRlciIsIl90aGlzJF9jb250ZW50TGVuZ3RoIiwicmVmZXJlbmNlQ29udGVudExlbmd0aCIsIl9pbkFzeW5jU3RhdGVVcGRhdGUiLCJfaW5zdGFsbFNldFN0YXRlSG9va3MiLCJ0aGF0Iiwidmlld0FyZWFDb3ZlcmFnZVBlcmNlbnRUaHJlc2hvbGQiLCJfdGltZXJzIiwiX3ZpZXdhYmxlSW5kaWNlcyIsIl92aWV3YWJsZUl0ZW1zIiwiY29tcHV0ZVZpZXdhYmxlSXRlbXMiLCJzY3JvbGxPZmZzZXQiLCJ2aWV3cG9ydEhlaWdodCIsInJlbmRlclJhbmdlIiwiaXRlbVZpc2libGVQZXJjZW50VGhyZXNob2xkIiwidmlld0FyZWFNb2RlIiwidmlld2FibGVQZXJjZW50VGhyZXNob2xkIiwidmlld2FibGVJbmRpY2VzIiwiZmlyc3RWaXNpYmxlIiwiX2lzVmlld2FibGUiLCJjcmVhdGVWaWV3VG9rZW4iLCJ3YWl0Rm9ySW50ZXJhY3Rpb24iLCJtaW5pbXVtVmlld1RpbWUiLCJfb25VcGRhdGVTeW5jIiwidmlld2FibGVJbmRpY2VzVG9DaGVjayIsInByZXZJdGVtcyIsIm5leHRJdGVtcyIsInZpZXdhYmxlIiwiaXRlbUxlbmd0aCIsIl9pc0VudGlyZWx5VmlzaWJsZSIsInBpeGVscyIsIl9nZXRQaXhlbHNWaXNpYmxlIiwicGVyY2VudCIsInZpc2libGVIZWlnaHQiLCJDZWxsUmVuZGVyZXIiLCJzZXBhcmF0b3JQcm9wcyIsImhpZ2hsaWdodGVkIiwibGVhZGluZ0l0ZW0iLCJfc2VwYXJhdG9ycyIsInVuaGlnaGxpZ2h0IiwidXBkYXRlUHJvcHMiLCJfcmVuZGVyRWxlbWVudCIsIml0ZW1TZXBhcmF0b3IiLCJjZWxsU3R5bGUiLCJyb3dSZXZlcnNlIiwiY29sdW1uUmV2ZXJzZSIsIm9uRm9jdXNDYXB0dXJlIiwiY3VyckNvbnRleHQiLCJfbnVtQ2VsbHMiLCJfcmVnaW9ucyIsIl90aGlzJF9yZWdpb25zIiwiX3RoaXMkX2ZpbmRSZWdpb24iLCJfZmluZFJlZ2lvbiIsIl90aGlzJF9maW5kUmVnaW9uMiIsImZpcnN0SW50ZXJzZWN0IiwiZmlyc3RJbnRlcnNlY3RJZHgiLCJfdGhpcyRfZmluZFJlZ2lvbjMiLCJfdGhpcyRfZmluZFJlZ2lvbjQiLCJsYXN0SW50ZXJzZWN0IiwibGFzdEludGVyc2VjdElkeCIsIm5ld0xlYWRSZWdpb24iLCJuZXdUYWlsUmVnaW9uIiwibmV3TWFpblJlZ2lvbiIsInJlcGxhY2VtZW50UmVnaW9ucyIsIm51bVJlZ2lvbnNUb0RlbGV0ZSIsImZpcnN0SWR4IiwibGFzdElkeCIsIm1pZGRsZUlkeCIsIm1pZGRsZVJlZ2lvbiIsIl9WaXJ0dWFsaXplZExpc3QiLCJfc3ViRXh0cmFjdG9yIiwiX2NvbnZlcnRWaWV3YWJsZSIsIl9pbmZvJGluZGV4Iiwia2V5RXh0cmFjdG9yV2l0aE51bGxhYmxlSW5kZXgiLCJrZXlFeHRyYWN0b3JXaXRoTm9uTnVsbGFibGVJbmRleCIsIl9vblZpZXdhYmxlSXRlbXNDaGFuZ2VkIiwiX3JlbmRlckl0ZW0iLCJsaXN0SXRlbUNvdW50IiwiaW5mb0luZGV4IiwicmVuZGVyU2VjdGlvbkhlYWRlciIsInJlbmRlclNlY3Rpb25Gb290ZXIiLCJTZXBhcmF0b3JDb21wb25lbnQiLCJfZ2V0U2VwYXJhdG9yQ29tcG9uZW50IiwiSXRlbVdpdGhTZXBhcmF0b3IiLCJMZWFkaW5nU2VwYXJhdG9yQ29tcG9uZW50IiwiU2VjdGlvblNlcGFyYXRvckNvbXBvbmVudCIsImxlYWRpbmdTZWN0aW9uIiwic2V0U2VsZkhpZ2hsaWdodENhbGxiYWNrIiwiX3NldFVwZGF0ZUhpZ2hsaWdodEZvciIsInNldFNlbGZVcGRhdGVQcm9wc0NhbGxiYWNrIiwiX3NldFVwZGF0ZVByb3BzRm9yIiwidXBkYXRlSGlnaGxpZ2h0Rm9yIiwiX3VwZGF0ZUhpZ2hsaWdodEZvciIsInVwZGF0ZVByb3BzRm9yIiwiX3VwZGF0ZVByb3BzRm9yIiwidHJhaWxpbmdJdGVtIiwidHJhaWxpbmdTZWN0aW9uIiwiX3VwZGF0ZVByb3BzTWFwIiwidXBkYXRlSGlnaGxpZ2h0IiwiX3VwZGF0ZUhpZ2hsaWdodE1hcCIsInVwZGF0ZUhpZ2hsaWdodEZuIiwidXBkYXRlUHJvcHNGbiIsInNjcm9sbFRvTG9jYXRpb24iLCJzZWN0aW9uSW5kZXgiLCJsaXN0UmVmIiwic3RpY2t5U2VjdGlvbkhlYWRlcnNFbmFibGVkIiwidG9JbmRleFBhcmFtcyIsImdldExpc3RSZWYiLCJfc2VjdGlvbnMiLCJwYXNzVGhyb3VnaFByb3BzIiwibGlzdEhlYWRlck9mZnNldCIsInNlY3Rpb25EYXRhIiwiZXh0cmFjdG9yIiwiaXNMYXN0SXRlbUluTGlzdCIsImlzTGFzdEl0ZW1JblNlY3Rpb24iLCJsZWFkaW5nU2VwYXJhdG9ySGlnbGlnaHRlZCIsInNldExlYWRpbmdTZXBhcmF0b3JIaWdobGlnaHRlZCIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0Iiwic2VwYXJhdG9ySGlnaGxpZ2h0ZWQiLCJzZXRTZXBhcmF0b3JIaWdobGlnaHRlZCIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2IiwibGVhZGluZ1NlcGFyYXRvclByb3BzIiwic2V0TGVhZGluZ1NlcGFyYXRvclByb3BzIiwiX1JlYWN0JHVzZVN0YXRlNyIsIl9SZWFjdCR1c2VTdGF0ZTgiLCJzZXRTZXBhcmF0b3JQcm9wcyIsImxlYWRpbmdTZXBhcmF0b3IiLCJfUmVmcmVzaENvbnRyb2wiLCJfU2Nyb2xsVmlldyIsIl91c2VBbmltYXRlZFByb3BzNSIsIkFuaW1hdGVkU2Nyb2xsVmlldyIsIkFuaW1hdGVkU2Nyb2xsVmlld1dpdGhPcldpdGhvdXRJbnZlcnRlZFJlZnJlc2hDb250cm9sIiwiQW5pbWF0ZWRTY3JvbGxWaWV3V2l0aEludmVydGVkUmVmcmVzaENvbnRyb2wiLCJBbmltYXRlZFNjcm9sbFZpZXdXaXRob3V0SW52ZXJ0ZWRSZWZyZXNoQ29udHJvbCIsIl91c2VNZW1vIiwiaW50ZXJtZWRpYXRlUHJvcHNGb3JSZWZyZXNoQ29udHJvbCIsImludGVybWVkaWF0ZVByb3BzRm9yU2Nyb2xsVmlldyIsInJlZnJlc2hDb250cm9sQW5pbWF0ZWRQcm9wcyIsInJlZnJlc2hDb250cm9sUmVmIiwiX3VzZUFuaW1hdGVkUHJvcHM0Iiwic2Nyb2xsVmlld0FuaW1hdGVkUHJvcHMiLCJfYzUiLCJfQW5kcm9pZFN3aXBlUmVmcmVzaExheW91dE5hdGl2ZUNvbXBvbmVudCIsIl9QdWxsVG9SZWZyZXNoVmlld05hdGl2ZUNvbXBvbmVudCIsIl9sYXN0TmF0aXZlUmVmcmVzaGluZyIsIl9vblJlZnJlc2giLCJfc2V0TmF0aXZlUmVmIiwiX25hdGl2ZVJlZiIsIkFuZHJvaWRTd2lwZVJlZnJlc2hMYXlvdXRDb21tYW5kcyIsInNldE5hdGl2ZVJlZnJlc2hpbmciLCJQdWxsVG9SZWZyZXNoQ29tbWFuZHMiLCJwcm9ncmVzc0JhY2tncm91bmRDb2xvciIsInRpdGxlQ29sb3IiLCJBbmRyb2lkU3dpcGVSZWZyZXNoTGF5b3V0TmF0aXZlQ29tcG9uZW50IiwidG9wUmVmcmVzaCIsIlB1bGxUb1JlZnJlc2hWaWV3TmF0aXZlQ29tcG9uZW50IiwiX1NlY3Rpb25MaXN0IiwiX3dyYXBwZXJMaXN0UmVmIiwiX3N0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZCIsIlJlYWN0TmF0aXZlIiwiaW5zdGFuY2VQcm9wcyIsInByZWNhY2hlRmliZXJOb2RlIiwiaG9zdEluc3QiLCJ1bmNhY2hlRmliZXJOb2RlIiwiZ2V0VGFnRnJvbUluc3RhbmNlIiwidXBkYXRlRmliZXJQcm9wcyIsIkVNUFRZX05BVElWRV9FVkVOVCIsInRvdWNoU3Vic2VxdWVuY2UiLCJyZW1vdmVUb3VjaGVzQXRJbmRpY2VzIiwicmlwcGVkT3V0IiwidGVtcCIsImZpbGxBdCIsIl9yZWNlaXZlUm9vdE5vZGVJREV2ZW50Iiwicm9vdE5vZGVJRCIsIm5hdGl2ZUV2ZW50UGFyYW0iLCJyZWNlaXZlRXZlbnQiLCJyZWNlaXZlVG91Y2hlcyIsImV2ZW50VG9wTGV2ZWxUeXBlIiwiY2hhbmdlZEluZGljZXMiLCJqaiIsIlJlYWN0TmF0aXZlR2xvYmFsUmVzcG9uZGVySGFuZGxlciIsIm1vdW50U2FmZUNhbGxiYWNrX05PVF9SRUFMTFlfU0FGRSIsIl9faXNNb3VudGVkIiwiUmVhY3ROYXRpdmVGaWJlckhvc3RDb21wb25lbnQiLCJpbnRlcm5hbEluc3RhbmNlSGFuZGxlREVWIiwiX3Byb3RvIiwicmVsYXRpdmVOb2RlIiwiY2xlYXJTdXNwZW5zZUJvdW5kYXJ5IiwiY2xlYXJTdXNwZW5zZUJvdW5kYXJ5RnJvbUNvbnRhaW5lciIsImFsbG9jYXRlVGFnIiwicmVjdXJzaXZlbHlVbmNhY2hlRmliZXJOb2RlIiwiZmluYWxpemVJbml0aWFsQ2hpbGRyZW4iLCJuYXRpdmVUYWdzIiwiYXBwZW5kQ2hpbGRUb0NvbnRhaW5lciIsImNvbW1pdFRleHRVcGRhdGUiLCJjb21taXRVcGRhdGUiLCJ1cGRhdGVQYXlsb2FkVE9ETyIsImJlZm9yZUNoaWxkIiwiYmVmb3JlQ2hpbGRJbmRleCIsIl9iZWZvcmVDaGlsZEluZGV4IiwiaW5zZXJ0SW5Db250YWluZXJCZWZvcmUiLCJyZW1vdmVDaGlsZEZyb21Db250YWluZXIiLCJyZXNldFRleHRDb250ZW50IiwiaGlkZUluc3RhbmNlIiwiaGlkZVRleHRJbnN0YW5jZSIsInVuaGlkZUluc3RhbmNlIiwidW5oaWRlVGV4dEluc3RhbmNlIiwicmVuZGVyZXJDdXJzb3JERVYiLCJjdXJyZW50UmVuZGVyZXIiLCJoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbiIsImhvc3RTdWJ0cmVlUm9vdCIsImdldEhvc3RQYXJlbnRGaWJlciIsImlzSG9zdFBhcmVudCIsImdldEhvc3RTaWJsaW5nIiwiX2JlZm9yZSIsImluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZSIsIl9wYXJlbnQyIiwiX2JlZm9yZTIiLCJpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyIiwiYmVmb3JlIiwiaXNIb3N0IiwiaG9zdFBhcmVudCIsImhvc3RQYXJlbnRJc0NvbnRhaW5lciIsImZpbmRQYXJlbnQiLCJfcHJldkhvc3RQYXJlbnQiLCJfcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciIsIl9wcmV2SG9zdFBhcmVudDIiLCJfcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjIiLCJfdXBkYXRlUGF5bG9hZCIsImplc3RJc0RlZmluZWQiLCJyZW1vdmVSb290VmlldyIsImNvbXB1dGVDb21wb25lbnRTdGFja0ZvckVycm9yUmVwb3J0aW5nIiwiSW50ZXJuYWxzIiwic29ydEluZGV4Iiwic2NoZWR1bGluZyIsImlzSW5wdXRQZW5kaW5nIiwibmF0aXZlUnVudGltZVNjaGVkdWxlciIsInVuc3RhYmxlX0xvd1ByaW9yaXR5IiwidW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwiLCJ1bnN0YWJsZV9Qcm9maWxpbmciLCJ1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbiIsInVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlIiwidW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUiLCJ1bnN0YWJsZV9uZXh0IiwidW5zdGFibGVfcGF1c2VFeGVjdXRpb24iLCJ1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkiLCJ1bnN0YWJsZV93cmFwQ2FsbGJhY2siLCJlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmciLCJlbmFibGVQcm9maWxpbmciLCJmcmFtZVlpZWxkTXMiLCJoZWFwIiwic2lmdFVwIiwic2lmdERvd24iLCJwYXJlbnRJbmRleCIsImhhbGZMZW5ndGgiLCJsZWZ0SW5kZXgiLCJyaWdodEluZGV4IiwibWFya1Rhc2tFcnJvcmVkIiwibXMiLCJoYXNQZXJmb3JtYW5jZU5vdyIsImxvY2FsUGVyZm9ybWFuY2UiLCJsb2NhbERhdGUiLCJpbml0aWFsVGltZSIsIm1heFNpZ25lZDMxQml0SW50IiwiSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQiLCJVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQiLCJOT1JNQUxfUFJJT1JJVFlfVElNRU9VVCIsIkxPV19QUklPUklUWV9USU1FT1VUIiwiSURMRV9QUklPUklUWV9USU1FT1VUIiwidGFza1F1ZXVlIiwidGltZXJRdWV1ZSIsInRhc2tJZENvdW50ZXIiLCJjdXJyZW50VGFzayIsImN1cnJlbnRQcmlvcml0eUxldmVsIiwiaXNQZXJmb3JtaW5nV29yayIsImlzSG9zdENhbGxiYWNrU2NoZWR1bGVkIiwiaXNIb3N0VGltZW91dFNjaGVkdWxlZCIsImxvY2FsU2V0VGltZW91dCIsImxvY2FsQ2xlYXJUaW1lb3V0IiwibG9jYWxTZXRJbW1lZGlhdGUiLCJhZHZhbmNlVGltZXJzIiwidGltZXIiLCJoYW5kbGVUaW1lb3V0IiwicmVxdWVzdEhvc3RDYWxsYmFjayIsImZsdXNoV29yayIsImZpcnN0VGltZXIiLCJyZXF1ZXN0SG9zdFRpbWVvdXQiLCJoYXNUaW1lUmVtYWluaW5nIiwiY2FuY2VsSG9zdFRpbWVvdXQiLCJwcmV2aW91c1ByaW9yaXR5TGV2ZWwiLCJ3b3JrTG9vcCIsInNob3VsZFlpZWxkVG9Ib3N0IiwiZGlkVXNlckNhbGxiYWNrVGltZW91dCIsImNvbnRpbnVhdGlvbkNhbGxiYWNrIiwidW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayQxIiwibmV3VGFzayIsInVuc3RhYmxlX2NhbmNlbENhbGxiYWNrJDEiLCJ1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCQxIiwiaXNNZXNzYWdlTG9vcFJ1bm5pbmciLCJzY2hlZHVsZWRIb3N0Q2FsbGJhY2siLCJ0YXNrVGltZW91dElEIiwiZnJhbWVJbnRlcnZhbCIsInRpbWVFbGFwc2VkIiwicGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lIiwiaGFzTW9yZVdvcmsiLCJzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSIsInRocm93Tm90SW1wbGVtZW50ZWQiLCJKU0NvbXBpbGVyX3RlbXAiLCJKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAiLCJKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQiLCJpbmplY3RlZE5hbWVzVG9QbHVnaW5zJGpzY29tcCRpbmxpbmVfMjM4IiwiaXNPcmRlcmluZ0RpcnR5JGpzY29tcCRpbmxpbmVfMjM5IiwicGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzI0MCIsInBsdWdpbk1vZHVsZSRqc2NvbXAkaW5saW5lXzI0MSIsImluZGV4JDAiLCJjaGlsZCQxIiwicHJvcEtleSQzIiwiaW5kZXgkNyIsImluZGV4JDgiLCJ3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQxMSIsImluZGV4JDUiLCJ3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMCIsImluc3RhbmNlJGpzY29tcCQwIiwiSG9va3NEaXNwYXRjaGVyT25Nb3VudCIsIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlIiwiSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlciIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyRqc2NvbXAkMCIsImxhc3RUYWlsTm9kZSQ2MSIsImNoaWxkJDYyIiwiZXJyb3IkNzciLCJjcmVhdGUkNzgiLCJlcnJvciQ3OSIsInByZXZIb3N0UGFyZW50IiwicHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciIsInJvb3QkanNjb21wJDAiLCJlcnJvciQ4NyIsImVycm9yJDkwIiwiZXJyb3IkOTEiLCJ2aWV3Q29uZmlnJGpzY29tcCQwIiwidXBkYXRlUGF5bG9hZCRqc2NvbXAkMCIsInZpZXdDb25maWckanNjb21wJDEiLCJ1cGRhdGVQYXlsb2FkJGpzY29tcCQxIiwiZXJyb3IkODEiLCJwYXJlbnQkanNjb21wJDAiLCJwYXJlbnQkODIiLCJiZWZvcmUkODMiLCJjdXJyZW50JGpzY29tcCQwIiwiZmluaXNoZWRSb290JGpzY29tcCQwIiwiaW5kZXgkNiIsImluZGV4JDQiLCJ0aHJvd25WYWx1ZSQ5NSIsInRocm93blZhbHVlJDk3IiwiZmluZEhvc3RJbnN0YW5jZSIsImRldlRvb2xzQ29uZmlnJGpzY29tcCRpbmxpbmVfMTExNCIsImludGVybmFscyRqc2NvbXAkaW5saW5lXzEzNTMiLCJob29rJGpzY29tcCRpbmxpbmVfMTM1NCIsIkVsZW1lbnRQcm9wZXJ0aWVzIiwiYnJlYWRjcnVtYiIsImJyZWFkSXRlbSIsImJyZWFkSXRlbVRleHQiLCJicmVhZFNlcCIsImNvbCIsIm1hcFdpdGhTZXBhcmF0b3IiLCJpdGVtUmVuZGVyZXIiLCJzcGFjZXJSZW5kZXJlciIsIm1hcHBlZCIsIl9pc01vdW50ZWQiLCJfY3JlYXRlUHJlc3NhYmlsaXR5Q29uZmlnIiwiZXh0cmFTdHlsZXMiLCJ0ZXN0T25seV9wcmVzc2VkIiwiX2NyZWF0ZUV4dHJhU3R5bGVzIiwiX2hpZGVVbmRlcmxheSIsIl9zaG93VW5kZXJsYXkiLCJfaGlkZVRpbWVvdXQiLCJfdGhpczIkcHJvcHMkZGVsYXlQcmUiLCJfdGhpcyRwcm9wcyRhY3RpdmVPcGEiLCJhY3RpdmVPcGFjaXR5IiwidW5kZXJsYXkiLCJ1bmRlcmxheUNvbG9yIiwiX2hhc1ByZXNzSGFuZGxlciIsIm9uU2hvd1VuZGVybGF5Iiwib25IaWRlVW5kZXJsYXkiLCJfdGhpcyRwcm9wcyRhcmlhVmFsdSIsIl90aGlzJHByb3BzJGFyaWFWYWx1MiIsIl90aGlzJHByb3BzJGFyaWFWYWx1MyIsIl90aGlzJHByb3BzJGFyaWFWYWx1NCIsIl90aGlzJHByb3BzJGFyaWFMaXZlIiwiX3RoaXMkcHJvcHMkYXJpYUxhYmUiLCJfdGhpcyRwcm9wcyRhcmlhTW9kYSIsIl90aGlzJHN0YXRlJGV4dHJhU3R5bCIsIl90aGlzJHN0YXRlJGV4dHJhU3R5bDIiLCJob3N0UmVmIiwiU3R5bGVJbnNwZWN0b3IiLCJub1N0eWxlIiwiYmxhbmsiLCJCb3hJbnNwZWN0b3IiLCJCb3hDb250YWluZXIiLCJ0aXRsZVN0eWxlIiwibWFyZ2luTGFiZWwiLCJpbm5lclRleHQiLCJ0b0ZpeGVkIiwiYm94VGV4dCIsIlBlcmZvcm1hbmNlT3ZlcmxheSIsInBlcmZMb2dzIiwiX3BlcmZMb2dzJGtleSIsInVuaXQiLCJMSVNUVklFV19DRUxMX0hFSUdIVCIsIm5leHRYSFJJZCIsImdldFN0cmluZ0J5VmFsdWUiLCJnZXRUeXBlU2hvcnROYW1lIiwiTmV0d29ya092ZXJsYXkiLCJfcmVxdWVzdHNMaXN0Vmlld1Njcm9sbE1ldHJpY3MiLCJfc29ja2V0SWRNYXAiLCJfeGhySWRNYXAiLCJkZXRhaWxSb3dJZCIsInJlcXVlc3RzIiwidGFibGVSb3dWaWV3U3R5bGUiLCJ0YWJsZVJvdyIsInRhYmxlUm93T2RkIiwidGFibGVSb3dFdmVuIiwidGFibGVSb3dQcmVzc2VkIiwidXJsQ2VsbFZpZXdTdHlsZSIsInVybENlbGxWaWV3IiwibWV0aG9kQ2VsbFZpZXdTdHlsZSIsIm1ldGhvZENlbGxWaWV3IiwiX3ByZXNzUm93IiwiY2VsbFRleHQiLCJfaW5kaWNhdGVBZGRpdGlvbmFsUmVxdWVzdHMiLCJfcmVxdWVzdHNMaXN0VmlldyIsImRpc3RhbmNlRnJvbUVuZFRocmVzaG9sZCIsIl90aGlzJF9yZXF1ZXN0c0xpc3RWaSIsImlzQ2xvc2VUb0VuZCIsIl9jYXB0dXJlUmVxdWVzdHNMaXN0VmlldyIsIl9yZXF1ZXN0c0xpc3RWaWV3T25TY3JvbGwiLCJfc2Nyb2xsRGV0YWlsVG9Ub3AiLCJfZGV0YWlsU2Nyb2xsVmlldyIsIl9jbG9zZUJ1dHRvbkNsaWNrZWQiLCJfZW5hYmxlWEhSSW50ZXJjZXB0aW9uIiwiaXNJbnRlcmNlcHRvckVuYWJsZWQiLCJzZXRPcGVuQ2FsbGJhY2siLCJ4aHJJbmRleCIsIl94aHIiLCJzZXRSZXF1ZXN0SGVhZGVyQ2FsbGJhY2siLCJfZ2V0UmVxdWVzdEluZGV4QnlYSFJJRCIsIm5ldHdvcmtSZXF1ZXN0SW5mbyIsInNldFNlbmRDYWxsYmFjayIsImRhdGFTZW50Iiwic2V0SGVhZGVyUmVjZWl2ZWRDYWxsYmFjayIsInJlc3BvbnNlQ29udGVudFR5cGUiLCJyZXNwb25zZVNpemUiLCJzZXRSZXNwb25zZUNhbGxiYWNrIiwiZW5hYmxlSW50ZXJjZXB0aW9uIiwiX2VuYWJsZVdlYlNvY2tldEludGVyY2VwdGlvbiIsInNldENvbm5lY3RDYWxsYmFjayIsInNvY2tldEluZGV4IiwiX3dlYlNvY2tldCIsInNldENsb3NlQ2FsbGJhY2siLCJtZXNzYWdlcyIsInNldE9uTWVzc2FnZUNhbGxiYWNrIiwic2V0T25DbG9zZUNhbGxiYWNrIiwic2VydmVyQ2xvc2UiLCJzZXRPbkVycm9yQ2FsbGJhY2siLCJzZXJ2ZXJFcnJvciIsImRpc2FibGVJbnRlcmNlcHRpb24iLCJfcmVuZGVySXRlbURldGFpbCIsInJlcXVlc3RJdGVtIiwiZGV0YWlsVmlld1JvdyIsImRldGFpbFZpZXdUZXh0IiwiZGV0YWlsS2V5Q2VsbFZpZXciLCJkZXRhaWxWYWx1ZUNlbGxWaWV3IiwiY2xvc2VCdXR0b24iLCJjbG9zZUJ1dHRvblRleHQiLCJkZXRhaWxTY3JvbGxWaWV3Iiwicm93SWQiLCJsaXN0Vmlld1RpdGxlIiwidXJsVGl0bGVDZWxsVmlldyIsIm1ldGhvZFRpdGxlQ2VsbFZpZXciLCJsaXN0VmlldyIsIm9yaWdpbmFsWEhST3BlbiIsIm9yaWdpbmFsWEhSU2VuZCIsIm9yaWdpbmFsWEhSU2V0UmVxdWVzdEhlYWRlciIsIm9wZW5DYWxsYmFjayIsInNlbmRDYWxsYmFjayIsInJlcXVlc3RIZWFkZXJDYWxsYmFjayIsImhlYWRlclJlY2VpdmVkQ2FsbGJhY2siLCJyZXNwb25zZUNhbGxiYWNrIiwiWEhSSW50ZXJjZXB0b3IiLCJjb250ZW50VHlwZVN0cmluZyIsImNvbnRlbnRMZW5ndGhTdHJpbmciLCJvcmlnaW5hbFJDVFdlYlNvY2tldENvbm5lY3QiLCJvcmlnaW5hbFJDVFdlYlNvY2tldFNlbmQiLCJvcmlnaW5hbFJDVFdlYlNvY2tldFNlbmRCaW5hcnkiLCJvcmlnaW5hbFJDVFdlYlNvY2tldENsb3NlIiwiY2xvc2VDYWxsYmFjayIsImNvbm5lY3RDYWxsYmFjayIsIm9uT3BlbkNhbGxiYWNrIiwib25NZXNzYWdlQ2FsbGJhY2siLCJvbkVycm9yQ2FsbGJhY2siLCJvbkNsb3NlQ2FsbGJhY2siLCJXZWJTb2NrZXRJbnRlcmNlcHRvciIsInNldE9uT3BlbkNhbGxiYWNrIiwiX2FycmF5QnVmZmVyVG9TdHJpbmciLCJTVVNQRU5ERUQiLCJISURERU4iLCJnZXRDYWNoZWRDb21wb25lbnRXaXRoRGlzcGxheU5hbWUiLCJDb21wb25lbnRXaXRoRGlzcGxheU5hbWUiLCJlbXB0eUZ1bmN0aW9uIiwiZXhpdEFwcCIsIl9ldmVudE5hbWUiLCJfaGFuZGxlciIsIlVuaW1wbGVtZW50ZWRWaWV3IiwidW5pbXBsZW1lbnRlZFZpZXciLCJfTG9nQm94SW5zcGVjdG9yIiwiX0xvZ0JveEluc3BlY3RvckNvbnRhaW5lciIsIm9uTWluaW1pemUiLCJvbkNoYW5nZVNlbGVjdGVkSW5kZXgiLCJfTG9nQm94SW5zcGVjdG9yQ29kZUZyYW1lIiwiX0xvZ0JveEluc3BlY3RvckZvb3RlciIsIl9Mb2dCb3hJbnNwZWN0b3JIZWFkZXIiLCJfTG9nQm94SW5zcGVjdG9yTWVzc2FnZUhlYWRlciIsIl9Mb2dCb3hJbnNwZWN0b3JSZWFjdEZyYW1lcyIsIl9Mb2dCb3hJbnNwZWN0b3JTdGFja0ZyYW1lcyIsIkxvZ0JveEluc3BlY3RvciIsInByZXZJbmRleCIsIl9oYW5kbGVSZXRyeSIsIm9uU2VsZWN0SW5kZXgiLCJMb2dCb3hJbnNwZWN0b3JCb2R5Iiwib25SZXRyeSIsImhlYWRlclRpdGxlTWFwIiwic3ludGF4IiwiX3Byb3BzJGxvZyR0eXBlIiwiY29sbGFwc2VkIiwic2V0Q29sbGFwc2VkIiwiaGVhZGVyVGl0bGUiLCJzY3JvbGxCb2R5IiwiX29wZW5GaWxlSW5FZGl0b3IiLCJfQW5zaUhpZ2hsaWdodCIsIl9Mb2dCb3hJbnNwZWN0b3JTZWN0aW9uIiwiTG9nQm94SW5zcGVjdG9yQ29kZUZyYW1lIiwiZ2V0TG9jYXRpb24iLCJoZWFkaW5nIiwiQXBwSW5mbyIsIl9jb2RlRnJhbWUkbG9jYXRpb24kciIsIl9jb2RlRnJhbWUkbG9jYXRpb24iLCJvcGVuRmlsZUluRWRpdG9yIiwiZmlsZVRleHQiLCJhcHBJbmZvU3R5bGVzIiwiYnVpbGRCdXR0b24iLCJhcHBWZXJzaW9uIiwiZW5naW5lIiwiQW5zaSIsImNvbW1vbldoaXRlc3BhY2VMZW5ndGgiLCJwYXJzZWRMaW5lcyIsImFuc2lUb0pzb24iLCJyZW1vdmVfZW1wdHkiLCJ1c2VfY2xhc3NlcyIsIl9saW5lcyQiLCJfbGluZXMkJGNvbnRlbnQiLCJfbWF0Y2gkIiwid2hpdGVzcGFjZUxlbmd0aCIsImdldFRleHQiLCJidW5kbGUiLCJ0ZXh0U3R5bGUiLCJmZyIsImJnIiwiQU5TSV9DT0xPUlMiLCJBbnNlciIsImVzY2FwZUZvckh0bWwiLCJ0eHQiLCJsaW5raWZ5IiwiYW5zaVRvSHRtbCIsImFuc2lUb1RleHQiLCJmZ190cnVlY29sb3IiLCJiZ190cnVlY29sb3IiLCJicmlnaHQiLCJzZXR1cFBhbGV0dGUiLCJQQUxFVFRFX0NPTE9SUyIsImxldmVscyIsIl9nIiwiY2xlYXJMaW5lIiwibWFya3VwIiwicmF3X3RleHRfY2h1bmtzIiwiZmlyc3RfY2h1bmsiLCJjb2xvcl9jaHVua3MiLCJjaHVuayIsInByb2Nlc3NDaHVuayIsInByb2Nlc3NDaHVua0pzb24iLCJpc0VtcHR5IiwiZGVjb3JhdGlvbiIsIndhc19wcm9jZXNzZWQiLCJvcmlnX3R4dCIsIm51bXMiLCJudW1fc3RyIiwiaXNfZm9yZWdyb3VuZCIsInBhbGV0dGVfaW5kZXgiLCJrbGFzcyIsImNsYXNzZXMiLCJqc29uQ2h1bmsiLCJyZW5kZXJfZGF0YSIsIkxvZ0JveEluc3BlY3RvclNlY3Rpb24iLCJoZWFkaW5nVGV4dCIsIkxvZ0JveEluc3BlY3RvckZvb3RlciIsInN5bnRheEVycm9yVGV4dCIsIkZvb3RlckJ1dHRvbiIsImJ1dHRvbkNvbnRlbnQiLCJidXR0b25MYWJlbCIsIl9TdGF0dXNCYXIiLCJMb2dCb3hJbnNwZWN0b3JIZWFkZXIiLCJzYWZlQXJlYSIsIkxvZ0JveEluc3BlY3RvckhlYWRlckJ1dHRvbiIsImJhY2tncm91bmRGb3JMZXZlbCIsImhlYWRlclN0eWxlcyIsImJ1dHRvbkltYWdlIiwiY3VycmVudEhlaWdodCIsIl9OYXRpdmVTdGF0dXNCYXJNYW5hZ2VyQW5kcm9pZCIsIl9OYXRpdmVTdGF0dXNCYXJNYW5hZ2VySU9TIiwiX2NsYXNzIiwiX05hdGl2ZVN0YXR1c0Jhck1hbmFnIiwibWVyZ2VQcm9wc1N0YWNrIiwicHJvcHNTdGFjayIsImRlZmF1bHRWYWx1ZXMiLCJjcmVhdGVTdGFja0VudHJ5IiwiX3Byb3BzJGFuaW1hdGVkIiwiX3Byb3BzJHNob3dIaWRlVHJhbnNpIiwic2hvd0hpZGVUcmFuc2l0aW9uIiwiYmFyU3R5bGUiLCJ0cmFuc2x1Y2VudCIsIm5ldHdvcmtBY3Rpdml0eUluZGljYXRvclZpc2libGUiLCJfc3RhY2tFbnRyeSIsInB1c2hTdGFja0VudHJ5IiwicG9wU3RhY2tFbnRyeSIsInJlcGxhY2VTdGFja0VudHJ5Iiwic2V0SGlkZGVuIiwiX2RlZmF1bHRQcm9wcyIsIk5hdGl2ZVN0YXR1c0Jhck1hbmFnZXJJT1MiLCJOYXRpdmVTdGF0dXNCYXJNYW5hZ2VyQW5kcm9pZCIsInNldEJhclN0eWxlIiwic2V0TmV0d29ya0FjdGl2aXR5SW5kaWNhdG9yVmlzaWJsZSIsInNldEJhY2tncm91bmRDb2xvciIsInNldENvbG9yIiwic2V0VHJhbnNsdWNlbnQiLCJfcHJvcHNTdGFjayIsIl91cGRhdGVQcm9wc1N0YWNrIiwibmV3RW50cnkiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJfdXBkYXRlSW1tZWRpYXRlIiwiX2N1cnJlbnRWYWx1ZXMiLCJIRUlHSFQiLCJtZXJnZWRQcm9wcyIsIk5hdGl2ZVN0YXR1c0Jhck1hbmFnZXIiLCJzdGF0dXNCYXJTdHlsZSIsImdldEhlaWdodCIsIndpdGhBbmltYXRpb24iLCJTSE9XX01PUkVfTUVTU0FHRV9MRU5HVEgiLCJMb2dCb3hJbnNwZWN0b3JNZXNzYWdlSGVhZGVyIiwicmVuZGVyU2hvd01vcmUiLCJib2R5VGV4dCIsIm1lc3NhZ2VUZXh0IiwiQkVGT1JFX1NMQVNIX1JFIiwiZ2V0UHJldHR5RmlsZU5hbWUiLCJwYXRoQmVmb3JlU2xhc2giLCJmb2xkZXJOYW1lIiwiTG9nQm94SW5zcGVjdG9yUmVhY3RGcmFtZXMiLCJnZXRTdGFja0xpc3QiLCJnZXRDb2xsYXBzZU1lc3NhZ2UiLCJjb21wb25lbnRTdHlsZXMiLCJmcmFtZUNvbnRhaW5lciIsIl9mcmFtZSRsb2NhdGlvbiRyb3ciLCJfZnJhbWUkbG9jYXRpb24iLCJmcmFtZU5hbWUiLCJicmFja2V0IiwiZnJhbWVMb2NhdGlvbiIsImNvbGxhcHNlQ29udGFpbmVyIiwiY29sbGFwc2VCdXR0b24iLCJfTG9nQm94SW5zcGVjdG9yU291cmNlTWFwU3RhdHVzIiwiX0xvZ0JveEluc3BlY3RvclN0YWNrRnJhbWUiLCJzdGFja0ZyYW1lcyIsImNvbGxhcHNlZENvdW50IiwiZnJhbWVQbHVyYWwiLCJMb2dCb3hJbnNwZWN0b3JTdGFja0ZyYW1lcyIsInN0YWNrU3R5bGVzIiwiaGludEJveCIsImhpbnRUZXh0IiwiU3RhY2tGcmFtZUxpc3QiLCJTdGFja0ZyYW1lRm9vdGVyIiwiTG9nQm94SW5zcGVjdG9yU291cmNlTWFwU3RhdHVzIiwiTG9nQm94SW5zcGVjdG9yU3RhY2tGcmFtZSIsInF1ZXJ5SW5kZXgiLCJsaW5lTG9jYXRpb24iLCJpbmplY3RlZE5hbWVzVG9QbHVnaW5zJGpzY29tcCRpbmxpbmVfMjMyIiwiaXNPcmRlcmluZ0RpcnR5JGpzY29tcCRpbmxpbmVfMjMzIiwicGx1Z2luTmFtZSRqc2NvbXAkaW5saW5lXzIzNCIsInBsdWdpbk1vZHVsZSRqc2NvbXAkaW5saW5lXzIzNSIsInByb3BLZXkkMSIsImNoaWxkJDciLCJ3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyQ5IiwiaW5kZXgkMyIsImluZGV4JDIiLCJ0aHJvd25WYWx1ZSQ4OSIsInRocm93blZhbHVlJDkxIiwiZGV2VG9vbHNDb25maWckanNjb21wJGlubGluZV8xMDU1IiwiaW50ZXJuYWxzJGpzY29tcCRpbmxpbmVfMTI4MCIsImhvb2skanNjb21wJGlubGluZV8xMjgxIiwiUGxhdGZvcm1BY3Rpdml0eUluZGljYXRvciIsIkdSQVkiLCJfcmVmJGFuaW1hdGluZyIsImFuaW1hdGluZyIsIl9yZWYkY29sb3IiLCJfcmVmJGhpZGVzV2hlblN0b3BwZWQiLCJoaWRlc1doZW5TdG9wcGVkIiwiX3JlZiRzaXplIiwic2l6ZVN0eWxlIiwic2l6ZVByb3AiLCJzaXplU21hbGwiLCJzaXplTGFyZ2UiLCJhbmRyb2lkUHJvcHMiLCJzdHlsZUF0dHIiLCJpbmRldGVybWluYXRlIiwiQWN0aXZpdHlJbmRpY2F0b3JXaXRoUmVmIiwiX0FjdGl2aXR5SW5kaWNhdG9yVmlld05hdGl2ZUNvbXBvbmVudCIsIkFjdGl2aXR5SW5kaWNhdG9yVmlld05hdGl2ZUNvbXBvbmVudCIsIl9Ub3VjaGFibGVOYXRpdmVGZWVkYmFjayIsIl9Ub3VjaGFibGVPcGFjaXR5IiwiYnV0dG9uU3R5bGVzIiwidGV4dFN0eWxlcyIsImJ1dHRvbkRpc2FibGVkIiwidGV4dERpc2FibGVkIiwiZm9ybWF0dGVkVGl0bGUiLCJfaW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSIsIl9kaXNwYXRjaEhvdHNwb3RVcGRhdGUiLCJfZGlzcGF0Y2hQcmVzc2VkU3RhdGVDaGFuZ2UiLCJob3N0Q29tcG9uZW50UmVmIiwiaG90c3BvdFVwZGF0ZSIsIl90aGlzJHByb3BzJGFyaWFEaXNhMiIsIl90aGlzJHByb3BzJGFjY2Vzc2liaTYiLCJfdGhpcyRwcm9wcyRhY2Nlc3NpYmk3IiwiX3RoaXMkcHJvcHMkYWNjZXNzaWJpOCIsIl90aGlzJHByb3BzJGFjY2Vzc2liaTkiLCJfdGhpcyRwcm9wcyRhY2Nlc3NpYmkxMCIsImdldEJhY2tncm91bmRQcm9wIiwiU2VsZWN0YWJsZUJhY2tncm91bmQiLCJ1c2VGb3JlZ3JvdW5kIiwicmlwcGxlUmFkaXVzIiwiU2VsZWN0YWJsZUJhY2tncm91bmRCb3JkZXJsZXNzIiwiUmlwcGxlIiwiYm9yZGVybGVzcyIsImNhblVzZU5hdGl2ZUZvcmVncm91bmQiLCJfZmxhdHRlblN0eWxlNCIsIl9nZXRDaGlsZFN0eWxlT3BhY2l0eVdpdGhEZWZhdWx0IiwiX3RoaXMkcHJvcHMkZGlzYWJsZWQiLCJfb3BhY2l0eUluYWN0aXZlIiwiX29wYWNpdHlBY3RpdmUiLCJfc2V0T3BhY2l0eVRvIiwiX2ZsYXR0ZW5TdHlsZTIiLCJfZmxhdHRlblN0eWxlMyIsIl92aWV3UmVmIiwiaW1hZ2VTdHlsZSIsImltYWdlUmVmIiwiZmxhdHRlbmVkU3R5bGUiLCJfUkNUSW5wdXRBY2Nlc3NvcnlWaWV3TmF0aXZlQ29tcG9uZW50IiwiUkNUSW5wdXRBY2Nlc3NvcnlWaWV3TmF0aXZlQ29tcG9uZW50IiwiX0FjY2Vzc2liaWxpdHlJbmZvIiwiX2tleWJvYXJkRXZlbnQiLCJfaW5pdGlhbEZyYW1lSGVpZ2h0IiwiX2JvdHRvbSIsIl9vbktleWJvYXJkQ2hhbmdlIiwiX3VwZGF0ZUJvdHRvbUlmTmVjZXNzYXJ5Iiwib2xkRnJhbWUiLCJfc2V0Qm90dG9tIiwiX3RoaXMkcHJvcHMkZW5hYmxlZCIsIl90aGlzJHByb3BzJGVuYWJsZWQyIiwiX3RoaXMkX2tleWJvYXJkRXZlbnQiLCJfcmVsYXRpdmVLZXlib2FyZEhlaWdodCIsIl9yZWxhdGl2ZUtleWJvYXJkSGVpZ2h0MiIsImtleWJvYXJkRnJhbWUiLCJfdGhpcyRwcm9wcyRrZXlib2FyZFYiLCJrZXlib2FyZFkiLCJrZXlib2FyZFZlcnRpY2FsT2Zmc2V0IiwiYmVoYXZpb3IiLCJfdGhpcyRwcm9wcyRlbmFibGVkMyIsIl90aGlzJHByb3BzJGVuYWJsZWQ0IiwiX3RoaXMkcHJvcHMka2V5Ym9hcmRWMiIsImJvdHRvbUhlaWdodCIsImhlaWdodFN0eWxlIiwiX01vZGFsSW5qZWN0aW9uIiwiX05hdGl2ZU1vZGFsTWFuYWdlciIsIl9SQ1RNb2RhbEhvc3RWaWV3TmF0aXZlQ29tcG9uZW50IiwiX2NvbnRhaW5lciIsIl9Nb2RhbEluamVjdGlvbiR1bnN0YSIsIk1vZGFsRXZlbnRFbWl0dGVyIiwiTmF0aXZlTW9kYWxNYW5hZ2VyIiwidW5pcXVlTW9kYWxJZGVudGlmaWVyIiwiY29uZmlybVByb3BzIiwicHJlc2VudGF0aW9uU3R5bGUiLCJ0cmFuc3BhcmVudCIsIl9pZGVudGlmaWVyIiwiaXNSZW5kZXJlZCIsIl9ldmVudFN1YnNjcmlwdGlvbiIsIm1vZGFsSUQiLCJfc2hvdWxkU2hvd01vZGFsIiwiY29udGFpbmVyU3R5bGVzIiwiYW5pbWF0aW9uVHlwZSIsImlubmVyQ2hpbGRyZW4iLCJoYXJkd2FyZUFjY2VsZXJhdGVkIiwib25SZXF1ZXN0Q2xvc2UiLCJvblNob3ciLCJzdGF0dXNCYXJUcmFuc2x1Y2VudCIsIm1vZGFsIiwiX3Nob3VsZFNldFJlc3BvbmRlciIsInN1cHBvcnRlZE9yaWVudGF0aW9ucyIsIm9uT3JpZW50YXRpb25DaGFuZ2UiLCJzaWRlIiwiRXhwb3J0ZWRNb2RhbCIsIk1vZGFsSW5qZWN0aW9uIiwidW5zdGFibGVfTW9kYWwiLCJSQ1RNb2RhbEhvc3RWaWV3TmF0aXZlQ29tcG9uZW50IiwidG9wUmVxdWVzdENsb3NlIiwidG9wU2hvdyIsInRvcERpc21pc3MiLCJ0b3BPcmllbnRhdGlvbkNoYW5nZSIsIl91c2VBbmRyb2lkUmlwcGxlRm9yVmlldyIsIl9wcm9wcyRhcmlhVmFsdWVtYXgiLCJfcHJvcHMkYWNjZXNzaWJpbGl0eVYiLCJfcHJvcHMkYXJpYVZhbHVlbWluIiwiX3Byb3BzJGFjY2Vzc2liaWxpdHlWMiIsIl9wcm9wcyRhcmlhVmFsdWVub3ciLCJfcHJvcHMkYWNjZXNzaWJpbGl0eVYzIiwiX3Byb3BzJGFyaWFWYWx1ZXRleHQiLCJfcHJvcHMkYWNjZXNzaWJpbGl0eVY0IiwiX3Jlc3RQcm9wcyRhcmlhTW9kYWwiLCJhbmRyb2lkX3JpcHBsZSIsInVuc3RhYmxlX3ByZXNzRGVsYXkiLCJtZXJnZWRSZWYiLCJhbmRyb2lkX3JpcHBsZUNvbmZpZyIsInVzZUFuZHJvaWRSaXBwbGVGb3JWaWV3IiwiX3VzZVByZXNzU3RhdGUiLCJ1c2VQcmVzc1N0YXRlIiwiX3VzZVByZXNzU3RhdGUyIiwicmVzdFByb3BzV2l0aERlZmF1bHRzIiwidmlld1Byb3BzIiwiZm9yY2VQcmVzc2VkIiwiTWVtb2VkUHJlc3NhYmxlIiwicmlwcGxlQ29uZmlnIiwicmFkaXVzIiwiZm9yZWdyb3VuZCIsIm5hdGl2ZVJpcHBsZVZhbHVlIiwiX2V2ZW50JG5hdGl2ZUV2ZW50JGxvIiwiX2V2ZW50JG5hdGl2ZUV2ZW50JGxvMiIsIl9ldmVudCRuYXRpdmVFdmVudCRsbzMiLCJfZXZlbnQkbmF0aXZlRXZlbnQkbG80IiwiX0FuZHJvaWRTd2l0Y2hOYXRpdmVDb21wb25lbnQiLCJfU3dpdGNoTmF0aXZlQ29tcG9uZW50IiwicmV0dXJuc0ZhbHNlIiwicmV0dXJuc1RydWUiLCJTd2l0Y2hXaXRoRm9yd2FyZGVkUmVmIiwiaW9zX2JhY2tncm91bmRDb2xvciIsIm9uVmFsdWVDaGFuZ2UiLCJ0aHVtYkNvbG9yIiwidHJhY2tDb2xvciIsInRyYWNrQ29sb3JGb3JGYWxzZSIsImZhbHNlIiwidHJhY2tDb2xvckZvclRydWUiLCJ0cnVlIiwibmF0aXZlU3dpdGNoUmVmIiwic2V0TmF0aXZlIiwiaGFuZGxlQ2hhbmdlIiwiX25hdGl2ZVN3aXRjaFJlZiRjdXJyIiwianNWYWx1ZSIsInNob3VsZFVwZGF0ZU5hdGl2ZVN3aXRjaCIsIkFuZHJvaWRTd2l0Y2hDb21tYW5kcyIsInNldE5hdGl2ZVZhbHVlIiwiU3dpdGNoQ29tbWFuZHMiLCJfcHJvcHMkYWNjZXNzaWJpbGl0eVIiLCJwbGF0Zm9ybVByb3BzIiwidGh1bWJUaW50Q29sb3IiLCJ0cmFja1RpbnRDb2xvciIsIl9wcm9wcyRhY2Nlc3NpYmlsaXR5UjIiLCJvblRpbnRDb2xvciIsIkFuZHJvaWRTd2l0Y2hOYXRpdmVDb21wb25lbnQiLCJTd2l0Y2hOYXRpdmVDb21wb25lbnQiLCJfZXhjbHVkZWQzIiwiQW5kcm9pZFRleHRJbnB1dCIsIlJDVFNpbmdsZWxpbmVUZXh0SW5wdXRWaWV3IiwiUkNUU2luZ2xlbGluZVRleHRJbnB1dE5hdGl2ZUNvbW1hbmRzIiwiUkNUTXVsdGlsaW5lVGV4dElucHV0VmlldyIsIlJDVE11bHRpbGluZVRleHRJbnB1dE5hdGl2ZUNvbW1hbmRzIiwiZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSIsIkludGVybmFsVGV4dElucHV0IiwiX3Byb3BzU2VsZWN0aW9uJGVuZCIsIl9wcm9wcyRtdWx0aWxpbmUiLCJwcm9wc1NlbGVjdGlvbiIsImlucHV0UmVmIiwic2V0TW9zdFJlY2VudEV2ZW50Q291bnQiLCJsYXN0TmF0aXZlVGV4dCIsInNldExhc3ROYXRpdmVUZXh0IiwibGFzdE5hdGl2ZVNlbGVjdGlvblN0YXRlIiwic2V0TGFzdE5hdGl2ZVNlbGVjdGlvbiIsImxhc3ROYXRpdmVTZWxlY3Rpb24iLCJ2aWV3Q29tbWFuZHMiLCJuYXRpdmVVcGRhdGUiLCJfc2VsZWN0aW9uJHN0YXJ0IiwiX3NlbGVjdGlvbiRlbmQiLCJzZXRUZXh0QW5kU2VsZWN0aW9uIiwiaW5wdXRSZWZWYWx1ZSIsInNldExvY2FsUmVmIiwiaXNGb2N1c2VkIiwiZ2V0TmF0aXZlUmVmIiwiX29uQ2hhbmdlIiwiY3VycmVudFRleHQiLCJvbkNoYW5nZVRleHQiLCJldmVudENvdW50IiwiX29uQ2hhbmdlU3luYyIsInVuc3RhYmxlX29uQ2hhbmdlU3luYyIsInVuc3RhYmxlX29uQ2hhbmdlVGV4dFN5bmMiLCJfb25TZWxlY3Rpb25DaGFuZ2UiLCJfb25Gb2N1cyIsIl9vbkJsdXIiLCJ0ZXh0SW5wdXQiLCJibHVyT25TdWJtaXQiLCJSQ1RUZXh0SW5wdXRWaWV3IiwidXNlTXVsdGlsaW5lRGVmYXVsdFN0eWxlIiwidXNlT25DaGFuZ2VTeW5jIiwiZGF0YURldGVjdG9yVHlwZXMiLCJ1bnN0YWJsZV9vbktleVByZXNzU3luYyIsIm9uU2VsZWN0aW9uQ2hhbmdlU2hvdWxkU2V0UmVzcG9uZGVyIiwibXVsdGlsaW5lRGVmYXVsdCIsIl9wcm9wcyRhcmlhTGFiZWxsZWRiIiwiX3Byb3BzJHBsYWNlaG9sZGVyIiwiX3Byb3BzJHJvd3MiLCJjaGlsZENvdW50IiwiY29sb3JQcm9wcyIsImVudGVyS2V5SGludFRvUmV0dXJuVHlwZU1hcCIsImVudGVyIiwiZ28iLCJpbnB1dE1vZGVUb0tleWJvYXJkVHlwZU1hcCIsImRlY2ltYWwiLCJudW1lcmljIiwidGVsIiwiZW1haWwiLCJhdXRvQ29tcGxldGVXZWJUb0F1dG9Db21wbGV0ZUFuZHJvaWRNYXAiLCJiZGF5IiwiY291bnRyeSIsInNleCIsInVzZXJuYW1lIiwiYXV0b0NvbXBsZXRlV2ViVG9UZXh0Q29udGVudFR5cGVNYXAiLCJuaWNrbmFtZSIsIm9yZ2FuaXphdGlvbiIsIkV4cG9ydGVkRm9yd2FyZFJlZiIsIl9hdXRvQ29tcGxldGVXZWJUb0F1dCIsIl9yZWYyJGFsbG93Rm9udFNjYWxpbiIsIl9yZWYyJHJlamVjdFJlc3BvbmRlciIsIl9yZWYyJHVuZGVybGluZUNvbG9yQSIsInJlYWRPbmx5IiwiZW50ZXJLZXlIaW50IiwiaW5wdXRNb2RlIiwiU3RhdGUiLCJNdWx0aWxpbmVUZXh0SW5wdXROYXRpdmVDb21wb25lbnQiLCJfQm91bmRpbmdEaW1lbnNpb25zIiwiX1Bvc2l0aW9uIiwiZXh0cmFjdFNpbmdsZVRvdWNoIiwiaGFzVG91Y2hlcyIsImhhc0NoYW5nZWRUb3VjaGVzIiwiU3RhdGVzIiwiYmFzZVN0YXRlc0NvbmRpdGlvbnMiLCJJc0FjdGl2ZSIsIklzUHJlc3NpbmdJbiIsIklzTG9uZ1ByZXNzaW5nSW4iLCJTaWduYWxzIiwiSElHSExJR0hUX0RFTEFZX01TIiwiUFJFU1NfRVhQQU5EX1BYIiwiTE9OR19QUkVTU19USFJFU0hPTEQiLCJMT05HX1BSRVNTX0RFTEFZX01TIiwiTE9OR19QUkVTU19BTExPV0VEX01PVkVNRU5UIiwiVG91Y2hhYmxlTWl4aW4iLCJ0b3VjaGFibGVEZWxheVRpbWVvdXQiLCJsb25nUHJlc3NEZWxheVRpbWVvdXQiLCJwcmVzc091dERlbGF5VGltZW91dCIsInRvdWNoYWJsZUdldEluaXRpYWxTdGF0ZSIsInRvdWNoYWJsZSIsInRvdWNoU3RhdGUiLCJyZXNwb25kZXJJRCIsInRvdWNoYWJsZUhhbmRsZVJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdCIsInRvdWNoYWJsZUhhbmRsZVN0YXJ0U2hvdWxkU2V0UmVzcG9uZGVyIiwidG91Y2hhYmxlTG9uZ1ByZXNzQ2FuY2Vsc1ByZXNzIiwidG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyR3JhbnQiLCJkaXNwYXRjaElEIiwidG91Y2hhYmxlR2V0SGlnaGxpZ2h0RGVsYXlNUyIsIl9oYW5kbGVEZWxheSIsImxvbmdEZWxheU1TIiwidG91Y2hhYmxlR2V0TG9uZ1ByZXNzRGVsYXlNUyIsIl9oYW5kbGVMb25nRGVsYXkiLCJ0b3VjaGFibGVIYW5kbGVSZXNwb25kZXJSZWxlYXNlIiwicHJlc3NJbkxvY2F0aW9uIiwidG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyVGVybWluYXRlIiwidG91Y2hhYmxlSGFuZGxlUmVzcG9uZGVyTW92ZSIsInBvc2l0aW9uT25BY3RpdmF0ZSIsImRpbWVuc2lvbnNPbkFjdGl2YXRlIiwidG91Y2hhYmxlR2V0UHJlc3NSZWN0T2Zmc2V0IiwicHJlc3NFeHBhbmRMZWZ0IiwicHJlc3NFeHBhbmRUb3AiLCJwcmVzc0V4cGFuZFJpZ2h0IiwicHJlc3NFeHBhbmRCb3R0b20iLCJ0b3VjaGFibGVHZXRIaXRTbG9wIiwibW92ZWREaXN0YW5jZSIsIl9nZXREaXN0YW5jZUJldHdlZW5Qb2ludHMiLCJpc1RvdWNoV2l0aGluQWN0aXZlIiwiY3VyU3RhdGUiLCJ0b3VjaGFibGVIYW5kbGVGb2N1cyIsInRvdWNoYWJsZUhhbmRsZUJsdXIiLCJfcmVtZWFzdXJlTWV0cmljc09uQWN0aXZhdGlvbiIsIl9oYW5kbGVRdWVyeUxheW91dCIsImdsb2JhbFgiLCJnbG9iYWxZIiwiUG9zaXRpb24iLCJCb3VuZGluZ0RpbWVuc2lvbnMiLCJfcGVyZm9ybVNpZGVFZmZlY3RzRm9yVHJhbnNpdGlvbiIsIl9pc0hpZ2hsaWdodCIsIl9zYXZlUHJlc3NJbkxvY2F0aW9uIiwiYlgiLCJiWSIsImN1cklzSGlnaGxpZ2h0IiwibmV3SXNIaWdobGlnaHQiLCJpc0ZpbmFsU2lnbmFsIiwiaXNBY3RpdmVUcmFuc2l0aW9uIiwidG91Y2hhYmxlSGFuZGxlTG9uZ1ByZXNzIiwiX3N0YXJ0SGlnaGxpZ2h0IiwiX2VuZEhpZ2hsaWdodCIsImhhc0xvbmdQcmVzc0hhbmRsZXIiLCJwcmVzc0lzTG9uZ0J1dFN0aWxsQ2FsbE9uUHJlc3MiLCJzaG91bGRJbnZva2VQcmVzcyIsInRvdWNoYWJsZUhhbmRsZVByZXNzIiwidG91Y2hhYmxlSGFuZGxlQWN0aXZlUHJlc3NJbiIsInRvdWNoYWJsZUhhbmRsZUFjdGl2ZVByZXNzT3V0IiwidG91Y2hhYmxlR2V0UHJlc3NPdXREZWxheU1TIiwid2l0aG91dERlZmF1bHRGb2N1c0FuZEJsdXIiLCJUb3VjaGFibGVNaXhpbldpdGhvdXREZWZhdWx0Rm9jdXNBbmRCbHVyIiwicmVuZGVyRGVidWdWaWV3IiwiX1Bvb2xlZENsYXNzIiwidHdvQXJndW1lbnRQb29sZXIiLCJQb29sZWRDbGFzcyIsImdldFBvb2xlZEZyb21FbGVtZW50Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJhZGRQb29saW5nVG8iLCJvbmVBcmd1bWVudFBvb2xlciIsImNvcHlGaWVsZHNGcm9tIiwiS2xhc3MiLCJpbnN0YW5jZVBvb2wiLCJ0aHJlZUFyZ3VtZW50UG9vbGVyIiwiZm91ckFyZ3VtZW50UG9vbGVyIiwic3RhbmRhcmRSZWxlYXNlciIsInBvb2xTaXplIiwiREVGQVVMVF9QT09MX1NJWkUiLCJERUZBVUxUX1BPT0xFUiIsIkNvcHlDb25zdHJ1Y3RvciIsInBvb2xlciIsIk5ld0tsYXNzIiwiX05hdGl2ZUFjdGlvblNoZWV0TWFuYWdlciIsInNob3dBY3Rpb25TaGVldFdpdGhPcHRpb25zIiwiUkNUQWN0aW9uU2hlZXRNYW5hZ2VyIiwiY2FuY2VsQnV0dG9uVGludENvbG9yIiwiZGVzdHJ1Y3RpdmVCdXR0b25JbmRleCIsInJlbWFpbmluZ09wdGlvbnMiLCJkZXN0cnVjdGl2ZUJ1dHRvbkluZGljZXMiLCJwcm9jZXNzZWRUaW50Q29sb3IiLCJwcm9jZXNzZWRDYW5jZWxCdXR0b25UaW50Q29sb3IiLCJzaG93U2hhcmVBY3Rpb25TaGVldFdpdGhPcHRpb25zIiwiZmFpbHVyZUNhbGxiYWNrIiwic3VjY2Vzc0NhbGxiYWNrIiwiZGlzbWlzc0FjdGlvblNoZWV0IiwiTmF0aXZlQWN0aW9uU2hlZXRNYW5hZ2VyIiwiX05hdGl2ZUNsaXBib2FyZCIsImdldFN0cmluZyIsIk5hdGl2ZUNsaXBib2FyZCIsInNldFN0cmluZyIsIl9pbml0aWFsaXplR2VzdHVyZVN0YXRlIiwiZ2VzdHVyZVN0YXRlIiwibW92ZVgiLCJtb3ZlWSIsInkwIiwiZHgiLCJkeSIsInZ4IiwidnkiLCJfYWNjb3VudHNGb3JNb3Zlc1VwVG8iLCJfdXBkYXRlR2VzdHVyZVN0YXRlT25Nb3ZlIiwiY3VycmVudENlbnRyb2lkWE9mVG91Y2hlc0NoYW5nZWRBZnRlciIsImN1cnJlbnRDZW50cm9pZFlPZlRvdWNoZXNDaGFuZ2VkQWZ0ZXIiLCJtb3ZlZEFmdGVyIiwicHJldlgiLCJwcmV2aW91c0NlbnRyb2lkWE9mVG91Y2hlc0NoYW5nZWRBZnRlciIsInByZXZZIiwicHJldmlvdXNDZW50cm9pZFlPZlRvdWNoZXNDaGFuZ2VkQWZ0ZXIiLCJuZXh0RFgiLCJuZXh0RFkiLCJpbnRlcmFjdGlvblN0YXRlIiwic3RhdGVJRCIsInBhbkhhbmRsZXJzIiwib25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlciIsIm9uTW92ZVNob3VsZFNldFBhblJlc3BvbmRlciIsIm9uU3RhcnRTaG91bGRTZXRQYW5SZXNwb25kZXJDYXB0dXJlIiwib25Nb3ZlU2hvdWxkU2V0UGFuUmVzcG9uZGVyQ2FwdHVyZSIsImN1cnJlbnRDZW50cm9pZFgiLCJjdXJyZW50Q2VudHJvaWRZIiwib25QYW5SZXNwb25kZXJHcmFudCIsIm9uUGFuUmVzcG9uZGVyUmVqZWN0Iiwib25QYW5SZXNwb25kZXJSZWxlYXNlIiwib25QYW5SZXNwb25kZXJTdGFydCIsIm9uUGFuUmVzcG9uZGVyTW92ZSIsIm9uUGFuUmVzcG9uZGVyRW5kIiwib25QYW5SZXNwb25kZXJUZXJtaW5hdGUiLCJvblBhblJlc3BvbmRlclRlcm1pbmF0aW9uUmVxdWVzdCIsImdldEludGVyYWN0aW9uSGFuZGxlIiwiVG91Y2hIaXN0b3J5TWF0aCIsImNlbnRyb2lkRGltZW5zaW9uIiwidG91Y2hlc0NoYW5nZWRBZnRlciIsImlzWEF4aXMiLCJvZkN1cnJlbnQiLCJvbmVUb3VjaERhdGEiLCJ0b3VjaFRyYWNrIiwidG9BZGQiLCJub0NlbnRyb2lkIiwiX05hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZCIsIlBFUk1JU1NJT05fUkVRVUVTVF9SRVNVTFQiLCJHUkFOVEVEIiwiREVOSUVEIiwiTkVWRVJfQVNLX0FHQUlOIiwiUEVSTUlTU0lPTlMiLCJSRUFEX0NBTEVOREFSIiwiV1JJVEVfQ0FMRU5EQVIiLCJDQU1FUkEiLCJSRUFEX0NPTlRBQ1RTIiwiV1JJVEVfQ09OVEFDVFMiLCJHRVRfQUNDT1VOVFMiLCJBQ0NFU1NfRklORV9MT0NBVElPTiIsIkFDQ0VTU19DT0FSU0VfTE9DQVRJT04iLCJBQ0NFU1NfQkFDS0dST1VORF9MT0NBVElPTiIsIlJFQ09SRF9BVURJTyIsIlJFQURfUEhPTkVfU1RBVEUiLCJDQUxMX1BIT05FIiwiUkVBRF9DQUxMX0xPRyIsIldSSVRFX0NBTExfTE9HIiwiQUREX1ZPSUNFTUFJTCIsIlJFQURfVk9JQ0VNQUlMIiwiV1JJVEVfVk9JQ0VNQUlMIiwiVVNFX1NJUCIsIlBST0NFU1NfT1VUR09JTkdfQ0FMTFMiLCJCT0RZX1NFTlNPUlMiLCJCT0RZX1NFTlNPUlNfQkFDS0dST1VORCIsIlNFTkRfU01TIiwiUkVDRUlWRV9TTVMiLCJSRUFEX1NNUyIsIlJFQ0VJVkVfV0FQX1BVU0giLCJSRUNFSVZFX01NUyIsIlJFQURfRVhURVJOQUxfU1RPUkFHRSIsIlJFQURfTUVESUFfSU1BR0VTIiwiUkVBRF9NRURJQV9WSURFTyIsIlJFQURfTUVESUFfQVVESU8iLCJSRUFEX01FRElBX1ZJU1VBTF9VU0VSX1NFTEVDVEVEIiwiV1JJVEVfRVhURVJOQUxfU1RPUkFHRSIsIkJMVUVUT09USF9DT05ORUNUIiwiQkxVRVRPT1RIX1NDQU4iLCJCTFVFVE9PVEhfQURWRVJUSVNFIiwiQUNDRVNTX01FRElBX0xPQ0FUSU9OIiwiQUNDRVBUX0hBTkRPVkVSIiwiQUNUSVZJVFlfUkVDT0dOSVRJT04iLCJBTlNXRVJfUEhPTkVfQ0FMTFMiLCJSRUFEX1BIT05FX05VTUJFUlMiLCJVV0JfUkFOR0lORyIsIlBPU1RfTk9USUZJQ0FUSU9OUyIsIk5FQVJCWV9XSUZJX0RFVklDRVMiLCJSRVNVTFRTIiwiY2hlY2tQZXJtaXNzaW9uIiwicGVybWlzc2lvbiIsIk5hdGl2ZVBlcm1pc3Npb25zQW5kcm9pZCIsIl9yZXF1ZXN0UGVybWlzc2lvbiIsInJhdGlvbmFsZSIsInJlcXVlc3RQZXJtaXNzaW9uIiwiX3JlcXVlc3QiLCJzaG91bGRTaG93UmF0aW9uYWxlIiwic2hvdWxkU2hvd1JlcXVlc3RQZXJtaXNzaW9uUmF0aW9uYWxlIiwiX3gzIiwiX3g0IiwicmVxdWVzdE11bHRpcGxlIiwicGVybWlzc2lvbnMiLCJyZXF1ZXN0TXVsdGlwbGVQZXJtaXNzaW9ucyIsIlBlcm1pc3Npb25zQW5kcm9pZEluc3RhbmNlIiwiX05hdGl2ZVB1c2hOb3RpZmljYXRpb25NYW5hZ2VySU9TIiwiUHVzaE5vdGlmaWNhdGlvbkVtaXR0ZXIiLCJOYXRpdmVQdXNoTm90aWZpY2F0aW9uTWFuYWdlcklPUyIsIl9ub3RpZkhhbmRsZXJzIiwiREVWSUNFX05PVElGX0VWRU5UIiwiTk9USUZfUkVHSVNURVJfRVZFTlQiLCJOT1RJRl9SRUdJU1RSQVRJT05fRVJST1JfRVZFTlQiLCJERVZJQ0VfTE9DQUxfTk9USUZfRVZFTlQiLCJuYXRpdmVOb3RpZiIsIl9yZW1vdGVOb3RpZmljYXRpb25Db21wbGV0ZUNhbGxiYWNrQ2FsbGVkIiwiX2lzUmVtb3RlIiwicmVtb3RlIiwiX25vdGlmaWNhdGlvbklkIiwibm90aWZpY2F0aW9uSWQiLCJub3RpZktleSIsIm5vdGlmVmFsIiwiX2FsZXJ0IiwiX3NvdW5kIiwic291bmQiLCJfYmFkZ2VDb3VudCIsImJhZGdlIiwiX2NhdGVnb3J5IiwiX2NvbnRlbnRBdmFpbGFibGUiLCJfdGhyZWFkSUQiLCJhcHBsaWNhdGlvbkljb25CYWRnZU51bWJlciIsInNvdW5kTmFtZSIsImFsZXJ0Qm9keSIsInVzZXJJbmZvIiwiZmV0Y2hSZXN1bHQiLCJvbkZpbmlzaFJlbW90ZU5vdGlmaWNhdGlvbiIsImdldE1lc3NhZ2UiLCJnZXRTb3VuZCIsImdldENhdGVnb3J5IiwiZ2V0QWxlcnQiLCJnZXRDb250ZW50QXZhaWxhYmxlIiwiZ2V0QmFkZ2VDb3VudCIsImdldFRocmVhZElEIiwicHJlc2VudExvY2FsTm90aWZpY2F0aW9uIiwic2NoZWR1bGVMb2NhbE5vdGlmaWNhdGlvbiIsImNhbmNlbEFsbExvY2FsTm90aWZpY2F0aW9ucyIsInJlbW92ZUFsbERlbGl2ZXJlZE5vdGlmaWNhdGlvbnMiLCJnZXREZWxpdmVyZWROb3RpZmljYXRpb25zIiwicmVtb3ZlRGVsaXZlcmVkTm90aWZpY2F0aW9ucyIsImlkZW50aWZpZXJzIiwic2V0QXBwbGljYXRpb25JY29uQmFkZ2VOdW1iZXIiLCJnZXRBcHBsaWNhdGlvbkljb25CYWRnZU51bWJlciIsImNhbmNlbExvY2FsTm90aWZpY2F0aW9ucyIsImdldFNjaGVkdWxlZExvY2FsTm90aWZpY2F0aW9ucyIsIm5vdGlmRGF0YSIsInJlZ2lzdHJhdGlvbkluZm8iLCJkZXZpY2VUb2tlbiIsInJlcXVlc3RQZXJtaXNzaW9ucyIsInJlcXVlc3RlZFBlcm1pc3Npb25zIiwiYWJhbmRvblBlcm1pc3Npb25zIiwiY2hlY2tQZXJtaXNzaW9ucyIsImdldEluaXRpYWxOb3RpZmljYXRpb24iLCJub3RpZmljYXRpb24iLCJnZXRBdXRob3JpemF0aW9uU3RhdHVzIiwiRmV0Y2hSZXN1bHQiLCJOZXdEYXRhIiwiTm9EYXRhIiwiUmVzdWx0RmFpbGVkIiwiX05hdGl2ZVNoYXJlTW9kdWxlIiwic2hhcmUiLCJOYXRpdmVTaGFyZU1vZHVsZSIsIm5ld0NvbnRlbnQiLCJkaWFsb2dUaXRsZSIsImFjdGl2aXR5VHlwZSIsInN1YmplY3QiLCJhbmNob3IiLCJleGNsdWRlZEFjdGl2aXR5VHlwZXMiLCJzaGFyZWRBY3Rpb24iLCJkaXNtaXNzZWRBY3Rpb24iLCJTSE9SVCIsIkxPTkciLCJUT1AiLCJCT1RUT00iLCJDRU5URVIiLCJzaG93V2l0aEdyYXZpdHkiLCJncmF2aXR5Iiwic2hvd1dpdGhHcmF2aXR5QW5kT2Zmc2V0IiwieE9mZnNldCIsInlPZmZzZXQiLCJvblN0b3JlQ2hhbmdlIiwiYXBwZWFyYW5jZVN1YnNjcmlwdGlvbiIsInNldERpbWVuc2lvbnMiLCJfTmF0aXZlVmlicmF0aW9uIiwiX3ZpYnJhdGluZyIsIl9kZWZhdWx0X3ZpYnJhdGlvbl9sZW5ndGgiLCJ2aWJyYXRlQnlQYXR0ZXJuIiwiTmF0aXZlVmlicmF0aW9uIiwidmlicmF0ZSIsInZpYnJhdGVTY2hlZHVsZXIiLCJpZ25vcmVXYXJuaW5ncyIsIlJOVGVzdGVyTGlnaHRUaGVtZSIsIlRlcnRpYXJ5TGFiZWxDb2xvciIsIlF1YXRlcm5hcnlMYWJlbENvbG9yIiwiUGxhY2Vob2xkZXJUZXh0Q29sb3IiLCJTZWNvbmRhcnlTeXN0ZW1CYWNrZ3JvdW5kQ29sb3IiLCJUZXJ0aWFyeVN5c3RlbUJhY2tncm91bmRDb2xvciIsIkdyb3VwZWRCYWNrZ3JvdW5kQ29sb3IiLCJUZXJ0aWFyeUdyb3VwZWRCYWNrZ3JvdW5kQ29sb3IiLCJTeXN0ZW1GaWxsQ29sb3IiLCJUZXJ0aWFyeVN5c3RlbUZpbGxDb2xvciIsIlF1YXRlcm5hcnlTeXN0ZW1GaWxsQ29sb3IiLCJPcGFxdWVTZXBhcmF0b3JDb2xvciIsIkxpbmtDb2xvciIsIlN5c3RlbVJlZENvbG9yIiwiU3lzdGVtR3JlZW5Db2xvciIsIlRvb2xiYXJDb2xvciIsIkJvcmRlckNvbG9yIiwiUk5UZXN0ZXJEYXJrVGhlbWUiLCJ0aGVtZXMiLCJSTlRUZXN0RGV0YWlscyIsInBhcmFncmFwaCIsInRpdGxlUm93IiwiUk5UZXN0ZXJCbG9jayIsInRpdGxlQ29udGFpbmVyIiwiUk5UZXN0ZXJFeGFtcGxlRmlsdGVyIiwiZmlsdGVyVGV4dCIsImRpc2FibGVTZWFyY2giLCJfcmVuZGVyVGV4dElucHV0IiwiX3JlbmRlckZpbHRlcmVkU2VjdGlvbnMiLCJzZWFyY2hSb3ciLCJ0ZXh0SW5wdXRTdHlsZSIsInNlYXJjaEljb24iLCJzZWFyY2hUZXh0SW5wdXQiLCJvbkZpbHRlckJ1dHRvblByZXNzIiwiZmlsdGVyTGFiZWwiLCJmaWx0ZXJzIiwiUk5UZXN0ZXJMaXN0RmlsdGVycyIsImZpbHRlclByZXNzZWQiLCJuZXdGaWx0ZXIiLCJjdXJyZW50RmlsdGVyIiwicGlsbFN0eWxlIiwiVGVzdE1vZHVsZSIsIlJDVFNuYXBzaG90IiwiU25hcHNob3RWaWV3SU9TIiwib25EZWZhdWx0QWN0aW9uIiwidmVyaWZ5U25hcHNob3QiLCJtYXJrVGVzdFBhc3NlZCIsInRlc3RJZGVudGlmaWVyIiwib25TbmFwc2hvdFJlYWR5IiwiUkNUU25hcHNob3ROYXRpdmVDb21wb25lbnQiLCJfUk5UZXN0ZXJNb2R1bGVMaXN0IiwiX1JOVGVzdGVyTmF2YmFyIiwiX1JOVFRpdGxlQmFyIiwidGVzdExpc3QiLCJfUmVhY3QkdXNlUmVkdWNlciIsIlJOVGVzdGVyTmF2aWdhdGlvblJlZHVjZXIiLCJpbml0aWFsTmF2aWdhdGlvblN0YXRlIiwiX1JlYWN0JHVzZVJlZHVjZXIyIiwiYWN0aXZlTW9kdWxlS2V5IiwiYWN0aXZlTW9kdWxlVGl0bGUiLCJhY3RpdmVNb2R1bGVFeGFtcGxlS2V5IiwicmVjZW50bHlVc2VkIiwiZXhhbXBsZXNMaXN0IiwiZ2V0RXhhbXBsZXNMaXN0V2l0aFJlY2VudGx5VXNlZCIsImhhbmRsZUJhY2tQcmVzcyIsIlJOVGVzdGVyTmF2aWdhdGlvbkFjdGlvbnNUeXBlIiwiQkFDS19CVVRUT05fUFJFU1MiLCJoYW5kbGVIYXJkd2FyZUJhY2tQcmVzcyIsImhhbmRsZU1vZHVsZUNhcmRQcmVzcyIsImV4YW1wbGVUeXBlIiwiTU9EVUxFX0NBUkRfUFJFU1MiLCJoYW5kbGVNb2R1bGVFeGFtcGxlQ2FyZFByZXNzIiwiZXhhbXBsZU5hbWUiLCJFWEFNUExFX0NBUkRfUFJFU1MiLCJoYW5kbGVOYXZCYXJQcmVzcyIsIk5BVkJBUl9QUkVTUyIsImhhbmRsZU9wZW5VcmxSZXF1ZXN0IiwicmF3TW9kdWxlS2V5IiwiZXhhbXBsZUtleSIsInZhbGlkTW9kdWxlS2V5cyIsIk1vZHVsZXMiLCJyZXNvbHZlZE1vZHVsZUtleSIsImV4YW1wbGVNb2R1bGUiLCJ2YWxpZEV4YW1wbGVLZXlzIiwiRVhBTVBMRV9PUEVOX1VSTF9SRVFVRVNUIiwiYWN0aXZlTW9kdWxlIiwiYWN0aXZlTW9kdWxlRXhhbXBsZSIsIlNjcmVlbnMiLCJDT01QT05FTlRTIiwiYWN0aXZlRXhhbXBsZUxpc3QiLCJvbkJhY2siLCJkb2N1bWVudGF0aW9uVVJMIiwiYm90dG9tTmF2YmFyIiwiaXNFeGFtcGxlUGFnZU9wZW4iLCJuYXZCYXJIZWlnaHQiLCJFeGFtcGxlTW9kdWxlUm93IiwiaGFuZGxlUHJlc3MiLCJvbklvcyIsIm9uQW5kcm9pZCIsImJvdHRvbVJvd1N0eWxlIiwicGxhdGZvcm1MYWJlbFN0eWxlIiwic2VjdGlvbkhlYWRlciIsIlJOVGVzdGVyTW9kdWxlTGlzdCIsInJlbmRlckxpc3RJdGVtIiwibGlzdENvbnRhaW5lciIsImltYWdlVmlld1N0eWxlIiwiTmF2YmFyQnV0dG9uIiwiaXNBY3RpdmUiLCJhY3RpdmVJbWFnZSIsImluYWN0aXZlSW1hZ2UiLCJpY29uU3R5bGUiLCJuYXZCdXR0b24iLCJwcmVzc2FibGVDb250ZW50IiwiYWN0aXZlQmFyIiwiYWN0aXZlVGV4dCIsImluYWN0aXZlVGV4dCIsIkNvbXBvbmVudFRhYiIsImlzQ29tcG9uZW50QWN0aXZlIiwiY29tcG9uZW50SWNvbiIsIkFQSVRhYiIsImlzQVBJQWN0aXZlIiwiYXBpSWNvbiIsIlJOVGVzdGVyTmF2YmFyIiwiYnV0dG9uQ29udGFpbmVyIiwiZmxvYXRDb250YWluZXIiLCJmbG9hdGluZ0J1dHRvbiIsImNlbnRyYWxCb3hDdXRvdXQiLCJjZW50ZXJCb3giLCJfUk5UZXN0ZXJEb2N1bWVudGF0aW9uVVJMIiwiSGVhZGVySU9TIiwiaGVhZGVyQ2VudGVyIiwiSGVhZGVyQW5kcm9pZCIsInRvb2xiYXIiLCJ0b29sYmFyQ2VudGVyIiwiUk5UVGl0bGVCYXIiLCJfb3BlblVSTEluQnJvd3NlciIsIlJOVGVzdGVyRG9jdW1lbnRhdGlvblVSTCIsIm9wZW5VUkxJbkJyb3dzZXIiLCJpY29uIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwiVG9nZ2xlQW5pbWF0aW5nQWN0aXZpdHlJbmRpY2F0b3IiLCJzZXRBbmltYXRpbmciLCJzZXRUb2dnbGVUaW1lb3V0IiwiY2VudGVyaW5nIiwiZnJhbWV3b3JrIiwiX3JlcXVpcmUyIiwib25CdXR0b25QcmVzcyIsImJ1dHRvbk5hbWUiLCJfdGhpczciLCJfRmxhdExpc3RCYXNpYyIsIl9GbGF0TGlzdENvbnRlbnRJbnNldCIsIl9GbGF0TGlzdEludmVydGVkIiwiX0ZsYXRMaXN0TXVsdGlDb2x1bW4iLCJfRmxhdExpc3ROZXN0ZWQiLCJfRmxhdExpc3RPbkVuZFJlYWNoZWQiLCJfRmxhdExpc3RPblN0YXJ0UmVhY2hlZCIsIl9GbGF0TGlzdE9uVmlld2FibGVJdGVtc0NoYW5nZWQiLCJfRmxhdExpc3RTdGlja3lIZWFkZXJzIiwiX0ZsYXRMaXN0V2l0aFNlcGFyYXRvcnMiLCJCYXNpY0V4YW1wbGUiLCJPblN0YXJ0UmVhY2hlZEV4YW1wbGUiLCJPbkVuZFJlYWNoZWRFeGFtcGxlIiwiQ29udGVudEluc2V0RXhhbXBsZSIsIkludmVydGVkRXhhbXBsZSIsIm9uVmlld2FibGVJdGVtc0NoYW5nZWRFeGFtcGxlIiwiV2l0aFNlcGFyYXRvcnNFeGFtcGxlIiwiTXVsdGlDb2x1bW5FeGFtcGxlIiwiU3RpY2t5SGVhZGVyc0V4YW1wbGUiLCJOZXN0ZWRFeGFtcGxlIiwiX1JOVGVzdGVyUGFnZSIsIlBBR0VfU0laRSIsIk5VTV9QQUdFUyIsIklOSVRJQUxfUEFHRV9PRkZTRVQiLCJMT0FEX1RJTUUiLCJWSUVXQUJJTElUWV9DT05GSUciLCJJU19SVEwiLCJGbGF0TGlzdEV4YW1wbGUiLCJnZW5OZXdlckl0ZW1zIiwiZml4ZWRIZWlnaHQiLCJsb2dWaWV3YWJsZSIsInZpcnR1YWxpemVkIiwiZW1wdHkiLCJ1c2VGbGF0TGlzdEl0ZW1Db21wb25lbnQiLCJvblByZXNzRGlzYWJsZWQiLCJ0ZXh0U2VsZWN0YWJsZSIsInByZXZpb3VzTG9hZGluZyIsIm5leHRMb2FkaW5nIiwiX29uQ2hhbmdlRmlsdGVyVGV4dCIsIl9vbkNoYW5nZVNjcm9sbFRvSW5kZXgiLCJfdGhpcyRfbGlzdFJlZiIsIl9zY3JvbGxQb3MiLCJfc2Nyb2xsU2lua1giLCJfc2Nyb2xsU2lua1kiLCJfc2V0Qm9vbGVhblZhbHVlIiwiX3NldElzUlRMIiwiX29uU3RhcnRSZWFjaGVkIiwiZ2VuT2xkZXJJdGVtcyIsIl9vbkVuZFJlYWNoZWQiLCJfb25QcmVzc0NhbGxiYWNrIiwib25QcmVzc0FjdGlvbiIsIl9wcmVzc0l0ZW0iLCJfcmVuZGVySXRlbUNvbXBvbmVudCIsIkl0ZW1Db21wb25lbnQiLCJfb25TY3JvbGxUb0luZGV4RmFpbGVkIiwiX3RoaXMkX2xpc3RSZWYyIiwiaXRlbVN0YXRlIiwicHJlc3NJdGVtIiwiX3RoaXMkX2xpc3RSZWYzIiwiZmlsdGVyZWREYXRhIiwiZmxhdExpc3RJdGVtUmVuZGVyZXJQcm9wcyIsIm5vU2Nyb2xsIiwiUGxhaW5JbnB1dCIsInJlbmRlclNtYWxsU3dpdGNoT3B0aW9uIiwiU3BpbmRpY2F0b3IiLCJMb2FkaW5nQ29tcG9uZW50IiwiSGVhZGVyQ29tcG9uZW50IiwiRm9vdGVyQ29tcG9uZW50IiwiUk5UZXN0ZXJQYWdlIiwibm9zY3JvbGxXcmFwcGVyIiwic2Nyb2xsV3JhcHBlckNvbnRlbnRDb250YWluZXIiLCJzY3JvbGxXcmFwcGVyIiwiUk5UZXN0ZXJUaXRsZSIsImdlbkl0ZW1EYXRhIiwiaXRlbUhhc2giLCJoYXNoQ29kZSIsIkxPUkVNX0lQU1VNIiwiZGF0YUJsb2IiLCJIT1JJWl9XSURUSCIsIklURU1fSEVJR0hUIiwiX29uUHJlc3MiLCJpbWdTb3VyY2UiLCJUSFVNQl9VUkxTIiwiaG9yaXpJdGVtIiwibm9JbWFnZSIsInRodW1iIiwicmVuZGVyU3RhY2tlZEl0ZW0iLCJzdGFja2VkIiwic3RhY2tlZFRleHQiLCJfUmVhY3QkUHVyZUNvbXBvbmVudDIiLCJoZWFkZXJGb290ZXJDb250YWluZXIiLCJoZWFkZXJGb290ZXIiLCJfUmVhY3QkUHVyZUNvbXBvbmVudDMiLCJfc3VwZXIzIiwiX1JlYWN0JFB1cmVDb21wb25lbnQ0IiwiX3N1cGVyNCIsImxpc3RFbXB0eSIsIl9SZWFjdCRQdXJlQ29tcG9uZW50NSIsIl9zdXBlcjUiLCJsb2FkaW5nQ29udGFpbmVyIiwiX1JlYWN0JFB1cmVDb21wb25lbnQ2IiwiX3N1cGVyNiIsIl9SZWFjdCRQdXJlQ29tcG9uZW50NyIsIl9zdXBlcjciLCJzcGluZGljYXRvciIsIkhFQURFUiIsIlNFUEFSQVRPUl9IRUlHSFQiLCJvcHRpb24iLCJzbWFsbFN3aXRjaCIsIl9CYXNlRmxhdExpc3RFeGFtcGxlIiwiRmxhdExpc3RfY29udGVudEluc2V0IiwiaW5pdGlhbENvbnRlbnRJbnNldCIsInRvZ2dsZWRDb250ZW50SW5zZXQiLCJzZXRPdXRwdXQiLCJleGFtcGxlUHJvcHMiLCJzZXRFeGFtcGxlUHJvcHMiLCJvblRlc3QiLCJuZXdDb250ZW50SW5zZXQiLCJ0ZXN0T3V0cHV0IiwidGVzdExhYmVsIiwiREFUQSIsImhhc0JlZW5IaWdobGlnaHRlZCIsIkJhc2VGbGF0TGlzdEV4YW1wbGUiLCJfcHJvcHMkdGVzdExhYmVsIiwidGVzdENvbnRhaW5lciIsIklURU1fSU5ORVJfSEVJR0hUIiwiSVRFTV9NQVJHSU4iLCJzZXBhcmF0b3JUZXh0Iiwib2ZmU2NyZWVuIiwiRmxhdExpc3RfaW52ZXJ0ZWQiLCJfb25DaGFuZ2VOdW1Db2x1bW5zIiwiY2FyZCIsIkNBUkRfTUFSR0lOIiwiQk9SREVSX1dJRFRIIiwib3V0ZXJJdGVtcyIsImluaXRpYWxJdGVtc1N0YXRlIiwicmVuZGVyZWRJdGVtcyIsIk5lc3RlZExpc3RFeGFtcGxlIiwiZGlzcGF0Y2hPdXRlciIsIl91c2VSZWR1Y2VyMyIsIl91c2VSZWR1Y2VyNCIsImRpc3BhdGNoSW5uZXIiLCJfdG9rZW4kaW5kZXgiLCJkZWJ1Z1RleHQiLCJkZWJ1Z1RleHRIZWFkZXIiLCJPdXRlckl0ZW1SZW5kZXJlciIsIklubmVySXRlbVJlbmRlcmVyIiwiZmlsbGVyIiwiRmxhdExpc3Rfb25FbmRSZWFjaGVkIiwiX3JlZiRjdXJyZW50Iiwic2Nyb2xsUmVzcG9uZGVyIiwiRmxhdExpc3Rfb25TdGFydFJlYWNoZWQiLCJGbGF0TGlzdF9vblZpZXdhYmxlSXRlbXNDaGFuZ2VkIiwidXNlU2Nyb2xsUmVmU2Nyb2xsIiwidmlld1Rva2VuIiwiX3JlZiRjdXJyZW50JGdldFNjcm9sIiwiU1RJQ0tZX0hFQURFUl9JTkRJQ0VTIiwiRmxhdExpc3Rfc3RpY2t5SGVhZGVycyIsIkZsYXRMaXN0X3dpdGhTZXBhcmF0b3JzIiwiU2VwYXJhdG9yIiwiaGlnaGxpZ2h0Q29sb3IiLCJiYXNlNjRJY29uIiwiSU1BR0VfUFJFRkVUQ0hfVVJMIiwicHJlZmV0Y2hUYXNrIiwiQmxvYkltYWdlIiwib2JqZWN0VVJMIiwiQmxvYkltYWdlRXhhbXBsZSIsIk5ldHdvcmtJbWFnZUNhbGxiYWNrRXhhbXBsZSIsIl9SZWFjdCRDb21wb25lbnQzIiwic3RhcnRMb2FkUHJlZmV0Y2hlZCIsIm1vdW50VGltZSIsImltYWdlSGFzaCIsIl9sb2FkRXZlbnRGaXJlZCIsInVwZGF0ZUxvYWRpbmdJbWFnZUhhc2giLCJ2aXNpYmxlT3ZlcmZsb3ciLCJwcmVmZXRjaGVkU291cmNlIiwibmV0d29ya0ltYWdlVGV4dCIsIk5ldHdvcmtJbWFnZUV4YW1wbGUiLCJfUmVhY3QkQ29tcG9uZW50NCIsImxvYWRpbmciLCJJbWFnZVNpemVFeGFtcGxlIiwiX1JlYWN0JENvbXBvbmVudDUiLCJfdGhpczgiLCJfdGhpczkiLCJmbGV4Um93IiwiaW1hZ2VTaXplRXhhbXBsZSIsIk11bHRpcGxlU291cmNlc0V4YW1wbGUiLCJfUmVhY3QkQ29tcG9uZW50NiIsIl90aGlzMTAiLCJfbGVuNSIsIl9rZXk1IiwiaW5jcmVhc2VJbWFnZVNpemUiLCJkZWNyZWFzZUltYWdlU2l6ZSIsInNwYWNlQmV0d2VlblZpZXciLCJ0b3VjaGFibGVUZXh0IiwiTG9hZGluZ0luZGljYXRvclNvdXJjZUV4YW1wbGUiLCJfUmVhY3QkQ29tcG9uZW50NyIsIl90aGlzMTEiLCJfbGVuNiIsIl9rZXk2IiwicmVsb2FkSW1hZ2UiLCJsb2FkZXJHaWYiLCJsb2FkaW5nSW1hZ2UiLCJsb2FkaW5nSW5kaWNhdG9yU291cmNlIiwiT25MYXlvdXRFeGFtcGxlIiwiX1JlYWN0JENvbXBvbmVudDgiLCJfc3VwZXI4IiwiX3RoaXMxMiIsIl9sZW43IiwiX2tleTciLCJsYXlvdXRIYW5kbGVyTWVzc2FnZSIsIm9uTGF5b3V0SGFuZGxlciIsIk9uUGFydGlhbExvYWRFeGFtcGxlIiwiX1JlYWN0JENvbXBvbmVudDkiLCJfc3VwZXI5IiwiX3RoaXMxMyIsIl9sZW44IiwiX2tleTgiLCJoYXNMb2FkZWQiLCJwYXJ0aWFsTG9hZEhhbmRsZXIiLCJmdWxsSW1hZ2UiLCJzbWFsbEltYWdlIiwibGVmdE1hcmdpbiIsInNlY3Rpb25UZXh0IiwibmVzdGVkVGV4dCIsInJlc2l6ZU1vZGVUZXh0IiwiZ2lmIiwiaW1hZ2VXaXRoQm9yZGVyUmFkaXVzIiwiY3VzdG9tQm9yZGVyQ29sb3IiLCJvcGFjaXR5MSIsIm9wYWNpdHkyIiwib3BhY2l0eTMiLCJvcGFjaXR5NCIsIm9wYWNpdHk1Iiwib3BhY2l0eTYiLCJ0cmFuc3BhcmVudEltYWdlQmFja2dyb3VuZCIsInRpbnRDb2xvcjEiLCJ0aW50Q29sb3IyIiwidGludENvbG9yMyIsInRpbnRDb2xvcjQiLCJvYmplY3RGaXRDb250YWluIiwib2JqZWN0Rml0Q292ZXIiLCJvYmplY3RGaXRGaWxsIiwib2JqZWN0Rml0U2NhbGVEb3duIiwiaW1hZ2VJbkJ1bmRsZSIsImltYWdlSW5Bc3NldENhdGFsb2ciLCJiYWNrZ3JvdW5kQ29sb3IxIiwiYmFja2dyb3VuZENvbG9yMiIsImJhY2tncm91bmRDb2xvcjMiLCJib3JkZXJSYWRpdXMxIiwiYm9yZGVyUmFkaXVzMiIsImJvcmRlclJhZGl1czMiLCJib3JkZXJSYWRpdXM0IiwiYm9yZGVyUmFkaXVzNSIsIl90aGlzMTQiLCJfdGhpczE1IiwiSW1hZ2VDYXBJbnNldHNFeGFtcGxlIiwic3RvcnlCYWNrZ3JvdW5kIiwibmF0aXZlSW1hZ2VTb3VyY2UiLCJfZ2VzdHVyZSIsInZpZXdzIiwidG91Y2hhYmxlX2FyZWEiLCJzY3JvbGx2aWV3IiwidGV4dEJ1YmJsZUJhY2tncm91bmQiLCJUZXh0SW5wdXRCYXIiLCJ0ZXh0SW5wdXRDb250YWluZXIiLCJCQVJfSEVJR0hUIiwiSW5wdXRBY2Nlc3NvcnlWaWV3RXhhbXBsZSIsIlRleHRJbnB1dEZvcm0iLCJDbG9zZUJ1dHRvbiIsImNsb3NlVmlldyIsInNldE1vZGFsT3BlbiIsIktleWJvYXJkQXZvaWRpbmdWaWV3QmVoYXZpb3VyIiwibW9kYWxPcGVuIiwic2V0QmVoYXZpb3IiLCJvdXRlckNvbnRhaW5lciIsIktleWJvYXJkQXZvaWRpbmdEaXNhYmxlZCIsIktleWJvYXJkQXZvaWRpbmdWZXJ0aWNhbE9mZnNldCIsIktleWJvYXJkQXZvaWRpbmdDb250ZW50Q29udGFpbmVyU3R5bGUiLCJfYzYiLCJMYXlvdXRFdmVudEV4YW1wbGUiLCJ2aWV3U3R5bGUiLCJhbmltYXRlVmlld0xheW91dCIsImFkZFdyYXBUZXh0IiwiZXh0cmFUZXh0IiwiY2hhbmdlQ29udGFpbmVyIiwiY29udGFpbmVyU3R5bGUiLCJvblZpZXdMYXlvdXQiLCJ2aWV3TGF5b3V0IiwidGV4dExheW91dCIsIm9uSW1hZ2VMYXlvdXQiLCJpbWFnZUxheW91dCIsIml0YWxpY1RleHQiLCJwcmVzc1RleHQiLCJfTW9kYWxPblNob3ciLCJfTW9kYWxQcmVzZW50YXRpb24iLCJNb2RhbFByZXNlbnRhdGlvbiIsIk1vZGFsT25TaG93IiwiTW9kYWxPblNob3dPbkRpc21pc3MiLCJtb2RhbFNob3dDb21wb25lbnQiLCJzZXRNb2RhbFNob3dDb21wb25lbnQiLCJtb2RhbFZpc2libGUiLCJzZXRNb2RhbFZpc2libGUiLCJvblNob3dDb3VudCIsInNldE9uU2hvd0NvdW50Iiwib25EaXNtaXNzQ291bnQiLCJzZXRPbkRpc21pc3NDb3VudCIsImNlbnRlcmVkVmlldyIsIm1vZGFsQmFja2Ryb3AiLCJtb2RhbFZpZXciLCJidXR0b25DbG9zZSIsImJ1dHRvbk9wZW4iLCJfUk5UT3B0aW9uIiwiYW5pbWF0aW9uVHlwZXMiLCJwcmVzZW50YXRpb25TdHlsZXMiLCJzZXRQcm9wcyIsImN1cnJlbnRPcmllbnRhdGlvbiIsInNldEN1cnJlbnRPcmllbnRhdGlvbiIsImNvbnRyb2xzIiwiaW5saW5lQmxvY2siLCJtdWx0aVNlbGVjdCIsInJvd1dpdGhTcGFjZUJldHdlZW4iLCJfcHJvcHMkc3VwcG9ydGVkT3JpZW4iLCJfcHJldiRzdXBwb3J0ZWRPcmllbnQiLCJfcHJldiRzdXBwb3J0ZWRPcmllbnQzIiwiX3ByZXYkc3VwcG9ydGVkT3JpZW50MiIsIm1vZGFsQ29udGFpbmVyIiwibW9kYWxJbm5lckNvbnRhaW5lciIsIlJOVE9wdGlvbiIsIlJOVGVzdGVyQnV0dG9uIiwidGV4dFRlc3RJRCIsIkxlYXJuTW9yZUxpbmtzIiwiQ29sb3JzIiwiRGVidWdJbnN0cnVjdGlvbnMiLCJSZWxvYWRJbnN0cnVjdGlvbnMiLCJfQ29sb3JzIiwiX0RlYnVnSW5zdHJ1Y3Rpb25zIiwiX0hlYWRlciIsIl9IZXJtZXNCYWRnZSIsIl9MZWFybk1vcmVMaW5rcyIsIl9SZWxvYWRJbnN0cnVjdGlvbnMiLCJwcmltYXJ5IiwibGlnaHRlciIsImRhcmtlciIsIl9kZWZhdWx0MiIsIl9JbWFnZUJhY2tncm91bmQiLCJfdXNlQ29sb3JTY2hlbWUiLCJpc0RhcmtNb2RlIiwibG9nbyIsIkhlcm1lc0JhZGdlIiwiZ2V0UnVudGltZVByb3BlcnRpZXMiLCJiYWRnZVRleHQiLCJsaW5rcyIsIkxpbmtMaXN0IiwibGlua0NvbnRhaW5lciIsIm9uUHJlc3NhYmxlUHJlc3MiLCJwcmVzc2FibGVOYW1lIiwiZm9yY2VUb3VjaEF2YWlsYWJsZSIsIkNvbnRlbnRQcmVzcyIsInRpbWVzUHJlc3NlZCIsInNldFRpbWVzUHJlc3NlZCIsInRleHRMb2ciLCJsb2dCb3giLCJUZXh0T25QcmVzc0JveCIsInRleHRCbG9jayIsIlByZXNzYWJsZUFyaWFMYWJlbCIsImNlbnRlcmVkIiwiUHJlc3NhYmxlRmVlZGJhY2tFdmVudHMiLCJldmVudExvZyIsInNldEV2ZW50TG9nIiwiYXBwZW5kRXZlbnQiLCJsaW1pdCIsImV2ZW50TG9nQm94IiwiUHJlc3NhYmxlRGVsYXlFdmVudHMiLCJuZXdFdmVudExvZyIsIkZvcmNlVG91Y2hFeGFtcGxlIiwiZm9yY2UiLCJzZXRGb3JjZSIsImNvbnNvbGVUZXh0IiwiZm9yY2VUb3VjaEJveCIsIlByZXNzYWJsZUhpdFNsb3AiLCJoaXRTbG9wV3JhcHBlciIsImhpdFNsb3BCdXR0b24iLCJfYzciLCJQcmVzc2FibGVOYXRpdmVNZXRob2RzIiwic2V0U3RhdHVzIiwiX2M4IiwiUHJlc3NhYmxlRGlzYWJsZWQiLCJkaXNhYmxlZEJ1dHRvbiIsIl9jOSIsIlByZXNzYWJsZUhvdmVyU3R5bGUiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaG92ZXJlZCIsInNldEhvdmVyZWQiLCJ3cmFwcGVyQ3VzdG9tIiwiX2MxMCIsIm1TY2FsZSIsIm5hdGl2ZUZlZWRiYWNrQnV0dG9uIiwiUm93IiwiX29uQ2xpY2siLCJjbGlja3MiLCJSZWZyZXNoQ29udHJvbEV4YW1wbGUiLCJpc1JlZnJlc2hpbmciLCJyb3dEYXRhIiwiTlVNX0lURU1TIiwiU2Nyb2xsVmlld1NpbXBsZUV4YW1wbGUiLCJtYWtlSXRlbXMiLCJuSXRlbXMiLCJpdGVtV3JhcHBlciIsImhvcml6b250YWxJdGVtV3JhcHBlciIsImhvcml6b250YWxQYWdpbmdJdGVtV3JhcHBlciIsInZlcnRpY2FsU2Nyb2xsVmlldyIsIlNhZmVBcmVhVmlld0V4YW1wbGUiLCJfc2V0TW9kYWxWaXNpYmxlIiwic2FmZUFyZWFDb250ZW50IiwiSXNJUGhvbmVYRXhhbXBsZSIsImlzSVBob25lWF9kZXByZWNhdGVkIiwiX1Njcm9sbFZpZXdQcmVzc2FibGVTdGlja3lIZWFkZXJFeGFtcGxlIiwiX3MxMSIsIl9zMTIiLCJfczEzIiwiX3MxNCIsIl9zMTUiLCJfczE2IiwiX3MxNyIsIl9zMTgiLCJfczE5IiwiX3MyMCIsIl9zMjEiLCJfczIyIiwiX3MyMyIsIkVuYWJsZURpc2FibGVMaXN0Iiwic2Nyb2xsVmlldyIsIklURU1TIiwiY3JlYXRlSXRlbVJvdyIsIkFwcGVuZGluZ0xpc3RJdGVtQ291bnQiLCJBcHBlbmRpbmdMaXN0IiwiYXV0b3Njcm9sbFRvVG9wVGhyZXNob2xkIiwiaG9yaXpvbnRhbFNjcm9sbFZpZXciLCJDZW50ZXJDb250ZW50TGlzdCIsIkNvbnRlbnRPZmZzZXRMaXN0IiwiU2Nyb2xsVmlld1Njcm9sbFRvRXhhbXBsZSIsInNjcm9sbGVkVG9Ub3AiLCJzZXRTY3JvbGxlZFRvVG9wIiwiSG9yaXpvbnRhbFNjcm9sbFZpZXciLCJDb250ZW50RXhhbXBsZSIsIkRlY2VsZXJhdGlvblJhdGVFeGFtcGxlIiwiRGlzYWJsZUVuYWJsZSIsIkludmVydFN0aWNreUhlYWRlcnMiLCJNdWx0aXBsZVN0aWNreUhlYWRlcnMiLCJLZXlib2FyZEV4YW1wbGUiLCJPbkNvbnRlbnRTaXplQ2hhbmdlIiwiT25Nb21lbnR1bVNjcm9sbCIsIk9uU2Nyb2xsT3B0aW9ucyIsIlJlbW92ZUNsaXBwZWRTdWJ2aWV3cyIsIlNjcm9sbEluZGljYXRvckV4YW1wbGUiLCJTbmFwVG9PcHRpb25zIiwiQm91bmNlc0V4YW1wbGVWZXJ0aWNhbCIsIkJvdW5jZXNFeGFtcGxlSG9yaXpvbnRhbCIsIkJvdW5jZXNFeGFtcGxlIiwiSW5kaWNhdG9yU3R5bGUiLCJNYXhNaW5ab29tU2NhbGUiLCJTY3JvbGxUb09wdGlvbnMiLCJFbmRGaWxsQ29sb3JGYWRpbmdFZGdlTGVuIiwiQW5kcm9pZFNjcm9sbEJhck9wdGlvbnMiLCJwZXJzaXN0ZW50U2Nyb2xsQmFyIiwic2V0UGVyc2lzdGVudFNjcm9sbEJhciIsInNldEVuZEZpbGxDb2xvciIsImZhZGluZ0VkZ2VMZW4iLCJzZXRGYWRpbmdFZGdlTGVuIiwic2V0U25hcFRvQWxpZ25tZW50Iiwic25hcFRvQWxpZ25tZW50TW9kZXMiLCJzZXRTbmFwVG9FbmQiLCJzZXRTbmFwVG9JbnRlcnZhbCIsInNldFNuYXBUb09mZnNldHMiLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4Iiwic2V0U25hcFRvU3RhcnQiLCJyb3dUaXRsZSIsImFjdGl2ZSIsIl91c2VTdGF0ZTE5IiwiX3VzZVN0YXRlMjAiLCJzZXRTY3JvbGxUb092ZXJmbG93RW5hYmxlZCIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJzZXRTY3JvbGxzVG9Ub3AiLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0Iiwic2V0U2Nyb2xsSW5kaWNhdG9ySW5zZXRzIiwiX3VzZVN0YXRlMjUiLCJfdXNlU3RhdGUyNiIsInNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljIiwic2V0U2hvd3NIb3Jpem9udGFsU2Nyb2xsSW5kaWMiLCJfdXNlU3RhdGUyNyIsIl91c2VTdGF0ZTI4Iiwic2hvd3NWZXJ0aWNhbFNjcm9sbEluZGljIiwic2V0U2hvd3NWZXJ0aWNhbFNjcm9sbEluZGljIiwiX3VzZVN0YXRlMjkiLCJfdXNlU3RhdGUzMCIsInNldFJlbW92ZUNsaXBwZWRTdWJ2aWV3cyIsIl91c2VTdGF0ZTMxIiwiX3VzZVN0YXRlMzIiLCJzZXRSZWZyZXNoaW5nIiwiX2MxMSIsIl91c2VTdGF0ZTMzIiwiX3VzZVN0YXRlMzQiLCJvblNjcm9sbERyYWciLCJzZXRPblNjcm9sbERyYWciLCJfdXNlU3RhdGUzNSIsIl91c2VTdGF0ZTM2Iiwic2V0T3ZlclNjcm9sbE1vZGUiLCJvdmVyU2Nyb2xsTW9kZU9wdGlvbnMiLCJfYzEyIiwiX3VzZVN0YXRlMzciLCJfdXNlU3RhdGUzOCIsInNjcm9sbCIsInNldFNjcm9sbCIsIl9jMTMiLCJfdXNlU3RhdGUzOSIsIl91c2VTdGF0ZTQwIiwic2V0SXRlbXMiLCJfdXNlU3RhdGU0MSIsIl91c2VTdGF0ZTQyIiwiY29udGVudFNpemVDaGFuZ2VkIiwic2V0Q29udGVudFNpemVDaGFuZ2VkIiwiX2MxNCIsIl91c2VTdGF0ZTQzIiwiX3VzZVN0YXRlNDQiLCJtYXhab29tU2NhbGUiLCJzZXRNYXhab29tU2NhbGUiLCJfdXNlU3RhdGU0NSIsIl91c2VTdGF0ZTQ2IiwibWluWm9vbVNjYWxlIiwic2V0TWluWm9vbVNjYWxlIiwiX3VzZVN0YXRlNDciLCJfdXNlU3RhdGU0OCIsInNldFpvb21TY2FsZSIsIl9jMTUiLCJfdXNlU3RhdGU0OSIsIl91c2VTdGF0ZTUwIiwic2V0S2V5Ym9hcmREaXNtaXNzTW9kZSIsIl91c2VTdGF0ZTUxIiwiX3VzZVN0YXRlNTIiLCJzZXRLZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzIiwiX3VzZVN0YXRlNTMiLCJfdXNlU3RhdGU1NCIsInRleHRJbnB1dFZhbHVlIiwic2V0VGV4dElucHV0VmFsdWUiLCJkaXNtaXNzT3B0aW9ucyIsInBlcnNpc3RPcHRpb25zIiwiX2MxNiIsIl91c2VTdGF0ZTU1IiwiX3VzZVN0YXRlNTYiLCJzZXRJbnZlcnRTdGlja3lIZWFkZXJzIiwiX2MxNyIsInN0aWNreUhlYWRlclN0eWxlIiwiX2MxOCIsIl91c2VTdGF0ZTU3IiwiX3VzZVN0YXRlNTgiLCJzZXRJbmRpY2F0b3JTdHlsZSIsIl9jMTkiLCJfdXNlU3RhdGU1OSIsIl91c2VTdGF0ZTYwIiwic2V0RGlyZWN0aW9uYWxMb2NrRW5hYmxlZCIsIl91c2VTdGF0ZTYxIiwiX3VzZVN0YXRlNjIiLCJzZXREaXNhYmxlSW50ZXJ2YWxNb21lbnR1bSIsIl91c2VTdGF0ZTYzIiwiX3VzZVN0YXRlNjQiLCJzZXREaXNhYmxlU2Nyb2xsVmlld1BhblJlc3BvbmRlciIsIl9jMjAiLCJfdXNlU3RhdGU2NSIsIl91c2VTdGF0ZTY2IiwiZGVjZWxSYXRlIiwic2V0RGVjZWxSYXRlIiwiX2MyMSIsIl91c2VTdGF0ZTY3IiwiX3VzZVN0YXRlNjgiLCJzZXRDYW5DYW5jZWxDb250ZW50VG91Y2hlcyIsIl91c2VTdGF0ZTY5IiwiX3VzZVN0YXRlNzAiLCJzZXRDb250ZW50SW5zZXQiLCJfdXNlU3RhdGU3MSIsIl91c2VTdGF0ZTcyIiwic2V0Q29udGVudENvbnRhaW5lclN0eWxlIiwiX3VzZVN0YXRlNzMiLCJfdXNlU3RhdGU3NCIsInNldENvbnRlbnRJbnNldEFkanVzdG1lbnRCZWhhdmlvciIsIl9jMjIiLCJfdXNlU3RhdGU3NSIsIl91c2VTdGF0ZTc2Iiwic2V0Qm91bmNlcyIsIl91c2VTdGF0ZTc3IiwiX3VzZVN0YXRlNzgiLCJzZXRCb3VuY2VzWm9vbSIsIl9jMjMiLCJfdXNlU3RhdGU3OSIsIl91c2VTdGF0ZTgwIiwic2V0Qm91bmNlIiwiX2MyNCIsIl91c2VTdGF0ZTgxIiwiX3VzZVN0YXRlODIiLCJfYzI1IiwiX2MyNiIsIl9jMjciLCJhY3RpdmVCdXR0b24iLCJfYzI4IiwiU3RpY2t5SGVhZGVyIiwicmVuZGVyQ29tcG9uZW50MSIsIlNjcm9sbFZpZXdQcmVzc2FibGVTdGlja3lIZWFkZXJFeGFtcGxlIiwiX3Njcm9sbFJlZiRjdXJyZW50IiwiX3Njcm9sbFJlZiRjdXJyZW50MiIsIlNjcm9sbFZpZXdBbmltYXRlZEV4YW1wbGUiLCJfc2Nyb2xsVmlld1BvcyIsInN0YXJ0QW5pbWF0aW9uIiwiaW50ZXJwb2xhdGVkMiIsIl9EaW1lbnNpb25zJGdldCIsIlNjcm9sbFZpZXdJbmRpY2F0b3JJbnNldHNFeGFtcGxlIiwic2V0QXV0b21hdGljYWxseUFkanVzdHNTY3JvbGxJbmRpY2F0b3JJbnNldHMiLCJfdXNlV2luZG93RGltZW5zaW9ucyIsInNjcm9sbFZpZXdDb250ZW50IiwidG9nZ2xlIiwic3dpdGNoIiwiU2Nyb2xsVmlld0tleWJvYXJkSW5zZXRzRXhhbXBsZSIsInNldEF1dG9tYXRpY2FsbHlBZGp1c3RLZXlib2FyZEluc2V0cyIsImZsYXRMaXN0Iiwic2V0RmxhdExpc3QiLCJzZXRJbnZlcnRlZCIsImhlaWdodFJlc3RyaWN0ZWQiLCJzZXRIZWlnaHRSZXN0cmljdGVkIiwic2Nyb2xsVmlld1Byb3BzIiwic2Nyb2xsVmlld0hlaWdodFJlc3RyaWN0ZWQiLCJsYXJnZUlucHV0IiwidGV4dElucHV0Um93IiwidGV4dElucHV0TGFyZ2VyIiwiY29udHJvbFJvdyIsImNvbnRyb2xTd2l0Y2giLCJjb250cm9sVGV4dElucHV0IiwiX1NlY3Rpb25MaXN0Q29udGVudEluc2V0IiwiX1NlY3Rpb25MaXN0SW52ZXJ0ZWQiLCJfU2VjdGlvbkxpc3RPbkVuZFJlYWNoZWQiLCJfU2VjdGlvbkxpc3RPblZpZXdhYmxlSXRlbXNDaGFuZ2VkIiwiX1NlY3Rpb25MaXN0U2Nyb2xsYWJsZSIsIl9TZWN0aW9uTGlzdFN0aWNreUhlYWRlcnNFbmFibGVkIiwiX1NlY3Rpb25MaXN0V2l0aFNlcGFyYXRvcnMiLCJDb250ZW50SW5zZXQiLCJ3aXRoU2VwYXJhdG9ycyIsInN0aWNreUhlYWRlcnNFbmFibGVkIiwiU2Nyb2xsYWJsZSIsIlNlY3Rpb25MaXN0X2NvbnRlbnRJbnNldCIsIl9TZWN0aW9uTGlzdEJhc2VFeGFtcGxlIiwiU2VjdGlvbkxpc3RCYXNlRXhhbXBsZSIsIlNlY3Rpb25MaXN0X2ludmVydGVkIiwiU2VjdGlvbkxpc3Rfb25FbmRSZWFjaGVkIiwiU2VjdGlvbkxpc3Rfb25WaWV3YWJsZUl0ZW1zQ2hhbmdlZCIsIlNlY3Rpb25MaXN0X3Njcm9sbGFibGUiLCJDT05TVEFOVF9TRUNUSU9OX0VYQU1QTEVTIiwiaGVhZGVyVGV4dCIsIkN1c3RvbVNlcGFyYXRvckNvbXBvbmVudCIsImN1c3RvbVNlcGFyYXRvciIsIkVtcHR5U2VjdGlvbkxpc3QiLCJyZW5kZXJJdGVtQ29tcG9uZW50Iiwic2V0SXRlbVN0YXRlIiwidXBkYXRlZEl0ZW0iLCJQcm9wcyIsInNjcm9sbFBvcyIsInNjcm9sbFNpbmtZIiwic2V0RmlsdGVyVGV4dCIsInNldFZpcnR1YWxpemVkIiwic2V0TG9nVmlld2FibGUiLCJzZXREZWJ1ZyIsIl9SZWFjdCR1c2VTdGF0ZTkiLCJfUmVhY3QkdXNlU3RhdGUxMCIsIl9SZWFjdCR1c2VTdGF0ZTExIiwiX1JlYWN0JHVzZVN0YXRlMTIiLCJzZXREYXRhIiwiZmlsdGVyZWRTZWN0aW9uRGF0YSIsInNldEl0ZW1QcmVzcyIsIm9wdGlvblNlY3Rpb24iLCJzY3JvbGxUb0NvbHVtbiIsIlNlY3Rpb25MaXN0X3N0aWNreVNlY3Rpb25IZWFkZXJzRW5hYmxlZCIsImlzU2VjdGlvblNlcGFyYXRvciIsIlNlY3Rpb25MaXN0X3dpdGhTZXBhcmF0b3JzIiwiYmFyU3R5bGVzIiwic2hvd0hpZGVUcmFuc2l0aW9ucyIsIlN0YXR1c0JhckhpZGRlbkV4YW1wbGUiLCJfc2hvd0hpZGVUcmFuc2l0aW9uSW5kZXgiLCJfb25DaGFuZ2VBbmltYXRlZCIsIl9vbkNoYW5nZUhpZGRlbiIsIl9vbkNoYW5nZVRyYW5zaXRpb24iLCJNb2RhbEV4YW1wbGUiLCJTdGF0dXNCYXJTdHlsZUV4YW1wbGUiLCJfYmFyU3R5bGVJbmRleCIsIl9vbkNoYW5nZUJhclN0eWxlIiwiU3RhdHVzQmFyTmV0d29ya0FjdGl2aXR5RXhhbXBsZSIsIl9vbkNoYW5nZU5ldHdvcmtJbmRpY2F0b3JWaXNpYmxlIiwiU3RhdHVzQmFyQmFja2dyb3VuZENvbG9yRXhhbXBsZSIsIl9jb2xvckluZGV4IiwiX29uQ2hhbmdlQmFja2dyb3VuZENvbG9yIiwiU3RhdHVzQmFyVHJhbnNsdWNlbnRFeGFtcGxlIiwiX29uQ2hhbmdlVHJhbnNsdWNlbnQiLCJTdGF0dXNCYXJTdGF0aWNJT1NFeGFtcGxlIiwiU3RhdHVzQmFyU3RhdGljQW5kcm9pZEV4YW1wbGUiLCJfb25DaGFuZ2VNb2RhbFZpc2libGUiLCJpbm5lckNvbnRhaW5lciIsIm1vZGFsQnV0dG9uIiwiU3dpcGVhYmxlQ2FyZEV4YW1wbGUiLCJjYXJkQ29sb3JzIiwiY3VycmVudEluZGV4Iiwic2V0Q3VycmVudEluZGV4IiwiaXNGaXJzdENhcmRPblRvcCIsImluY3JlbWVudEN1cnJlbnQiLCJnZXRDYXJkQ29sb3IiLCJTd2lwZWFibGVDYXJkIiwib25Td2lwZWRPdXQiLCJtb3ZlbWVudFgiLCJwYW5SZXNwb25kZXIiLCJyb3RhdGlvbiIsIkNhcmQiLCJjYXJkRGF0YSIsIkNhcmRTZWN0aW9uIiwic2VwYXJhdG9yQ29tcG9uZW50IiwiX2xpc3RSZWYkY3VycmVudCIsInNlY3Rpb25CZyIsIk9uT2ZmSW5kaWNhdG9yIiwiRXhhbXBsZVJvdyIsIkJhc2ljU3dpdGNoRXhhbXBsZSIsInRydWVTd2l0Y2hJc09uIiwiZmFsc2VTd2l0Y2hJc09uIiwiRGlzYWJsZWRTd2l0Y2hFeGFtcGxlIiwiQ29sb3JTd2l0Y2hFeGFtcGxlIiwiY29sb3JUcnVlU3dpdGNoSXNPbiIsImNvbG9yRmFsc2VTd2l0Y2hJc09uIiwiRXZlbnRTd2l0Y2hFeGFtcGxlIiwiZXZlbnRTd2l0Y2hJc09uIiwiZXZlbnRTd2l0Y2hSZWdyZXNzaW9uSXNPbiIsIklPU0JhY2tncm91bmRDb2xFeCIsImlvc0JhY2tncm91bmRDb2xvciIsIk9uQ2hhbmdlRXhhbXBsZSIsIkNvbnRhaW5lckJhY2tncm91bmRDb2xvclN0eWxlRXhhbXBsZSIsIl9UZXh0TGVnZW5kIiwiSW5saW5lVmlldyIsIlRleHRBbGlnblJUTEV4YW1wbGUiLCJ0b2dnbGVSVEwiLCJFbnRpdHkiLCJBdHRyaWJ1dGVUb2dnbGVyIiwidG9nZ2xlV2VpZ2h0IiwiaW5jcmVhc2VTaXplIiwiY3VyU3R5bGUiLCJBZGp1c3RpbmdGb250U2l6ZSIsImR5bmFtaWNUZXh0Iiwic2hvdWxkUmVuZGVyIiwiYWRkVGV4dCIsInJlbW92ZVRleHQiLCJUZXh0QmFzZUxpbmVMYXlvdXRFeGFtcGxlIiwidGV4dHMiLCJzdWJ0aXRsZVN0eWxlIiwiVGV4dFJlbmRlckluZm9FeGFtcGxlIiwidGV4dE1ldHJpY3MiLCJjYXBIZWlnaHQiLCJkZXNjZW5kZXIiLCJhc2NlbmRlciIsInhIZWlnaHQiLCJudW1iZXJPZlRleHRCbG9ja3MiLCJ0b3BPZkJveCIsIlRleHRXaXRoQ2FwQmFzZUJveCIsIkJhc2ljIiwiQ2xpcHBlZEJ5VGV4dCIsIkNoYW5nZUltYWdlU2l6ZSIsIkNoYW5nZVZpZXdTaXplIiwiQ2hhbmdlSW5uZXJWaWV3U2l6ZSIsImxpbmVCcmVha1N0cmF0ZWd5IiwidGV4dEJ5Q29kZSIsImVuIiwia28iLCJjbiIsInN0cmF0ZWd5IiwiYm9sZFN0eWxlIiwiYm94U3R5bGUiLCJQQU5HUkFNUyIsImFyYWJpYyIsImNoaW5lc2UiLCJlbmdsaXNoIiwiZW1vamkiLCJnZXJtYW4iLCJncmVlayIsImhlYnJldyIsImhpbmRpIiwiaWdibyIsImlyaXNoIiwiamFwYW5lc2UiLCJrb3JlYW4iLCJub3J3ZWdpYW4iLCJwb2xpc2giLCJyb21hbmlhbiIsInJ1c3NpYW4iLCJzd2VkaXNoIiwidGhhaSIsIlRleHRMZWdlbmQiLCJsYW5ndWFnZSIsInNldExhbmd1YWdlIiwiYWxpZ25tZW50Iiwic2V0QWxpZ25tZW50Iiwic2V0VGV4dE1ldHJpY3MiLCJzZXRGb250U2l6ZSIsImxhbmciLCJOZXN0ZWRUZXh0cyIsIldpdGhMYWJlbCIsImxhYmVsQ29udGFpbmVyIiwiVGV4dElucHV0QWNjZXNzb3J5Vmlld0NoYW5nZVRleHRFeGFtcGxlIiwiVGV4dElucHV0QWNjZXNzb3J5Vmlld0NoYW5nZUtleWJvYXJkRXhhbXBsZSIsIl9zd2l0Y2hLZXlib2FyZCIsIlRleHRJbnB1dEFjY2Vzc29yeVZpZXdEZWZhdWx0RG9uZUJ1dHRvbkV4YW1wbGUiLCJSZXdyaXRlRXhhbXBsZUthbmEiLCJyZXdyaXRlQ29udGFpbmVyIiwiU2VjdXJlRW50cnlFeGFtcGxlIiwicGFzc3dvcmQiLCJpc1NlY3VyZVRleHRFbnRyeSIsIkF1dG9ncm93aW5nVGV4dElucHV0RXhhbXBsZSIsImZ1bGxXaWR0aCIsIm11bHRpbGluZVBsYWNlaG9sZGVyU3R5bGVzIiwibXVsdGlsaW5lRXhwYW5kYWJsZSIsIm11bHRpbGluZVdpdGhGb250U3R5bGVzIiwic2luZ2xlbGluZVBsYWNlaG9sZGVyU3R5bGVzIiwidGV4dElucHV0RXhhbXBsZXMiLCJrZXlib2FyZFR5cGVzV2l0aERvbmVCdXR0b24iLCJyZXR1cm5LZXlUeXBlcyIsIl90aGlzMTYiLCJjbGVhckJ1dHRvbk1vZGVzIiwib25TdWJtaXRFZGl0aW5nIiwiX3RoaXMxNyIsIl9STlRlc3RlckJ1dHRvbiIsInNpbmdsZUxpbmUiLCJpbnB1dENvbnRhaW5lciIsImhhc2h0YWciLCJldmVudExhYmVsIiwiZm9jdXNlZFVuY29udHJvbGxlZCIsInNjcmVlbnNob3RBcmVhIiwiUmV3cml0ZUV4YW1wbGUiLCJyZW1haW5kZXJDb2xvciIsIlJld3JpdGVFeGFtcGxlSW52YWxpZENoYXJhY3RlcnMiLCJSZXdyaXRlSW52YWxpZENoYXJhY3RlcnNBbmRDbGVhckV4YW1wbGUiLCJCbHVyT25TdWJtaXRFeGFtcGxlIiwicmVmMSIsInJlZjIiLCJyZWYzIiwicmVmNCIsInJlZjUiLCJfdGhpczgkcmVmMiRjdXJyZW50IiwiX3RoaXM4JHJlZjMkY3VycmVudCIsIl90aGlzOCRyZWY0JGN1cnJlbnQiLCJfdGhpczgkcmVmNSRjdXJyZW50IiwiU3VibWl0QmVoYXZpb3JFeGFtcGxlIiwicmVmNiIsInJlZjciLCJyZWY4IiwicmVmOSIsInJlZjEwIiwicmVmMTEiLCJfdGhpczEwJHJlZjIkY3VycmVudCIsIl90aGlzMTAkcmVmMyRjdXJyZW50IiwiX3RoaXMxMCRyZWY0JGN1cnJlbnQiLCJfdGhpczEwJHJlZjUkY3VycmVudCIsIl90aGlzMTAkcmVmNiRjdXJyZW50IiwiX3RoaXMxMCRyZWY3JGN1cnJlbnQiLCJfdGhpczEwJHJlZjgkY3VycmVudCIsIl90aGlzMTAkcmVmOSRjdXJyZW50IiwiVGV4dEV2ZW50c0V4YW1wbGUiLCJjdXJUZXh0IiwicHJldlRleHQiLCJwcmV2MlRleHQiLCJwcmV2M1RleHQiLCJvbkVuZEVkaXRpbmciLCJUb2tlbml6ZWRUZXh0RXhhbXBsZSIsImRlbGltaXRlciIsIl90ZXh0IiwiU2VsZWN0aW9uRXhhbXBsZSIsIl90ZXh0SW5wdXQiLCJnZXRSYW5kb21Qb3NpdGlvbiIsIl90aGlzJF90ZXh0SW5wdXQiLCJpbXBlcmF0aXZlIiwiX3RoaXMkX3RleHRJbnB1dDIiLCJzZWxlY3RSYW5kb20iLCJwb3NpdGlvbnMiLCJwbGFjZUF0IiwicGxhY2VBdFJhbmRvbSIsIlVuY29udHJvbGxlZEV4YW1wbGUiLCJzZXRJc0ZvY3VzZWQiLCJUZXh0U3R5bGVzRXhhbXBsZSIsIlRleHRTdHlsZXNDb250YWluZXIiLCJfdGhpczE4IiwiTUFYX0NZQ0xFUyIsIk11bHRpbGluZVN0eWxlZFRleHRJbnB1dCIsInN0eWxlT2Zmc2V0IiwiU3R5bGVkVGV4dElucHV0IiwiX3RoaXMxOSIsImtleWJvYXJkVHlwZXMiLCJfdGhpczIwIiwiX3RoaXMyMSIsImVudGVyS2V5SGludFR5cGVzSGludHMiLCJmb250RmFtaWx5QSIsImZvbnRGYW1pbHlCIiwiVG91Y2hhYmxlSGlnaGxpZ2h0Qm94IiwidG91Y2hhYmxlT25QcmVzcyIsInJlbW90ZUltYWdlIiwiVG91Y2hhYmxlV2l0aG91dEZlZWRiYWNrQm94IiwidGV4dE9uUHJlc3MiLCJUb3VjaGFibGVGZWVkYmFja0V2ZW50cyIsIl9hcHBlbmRFdmVudCIsIlRvdWNoYWJsZURlbGF5RXZlbnRzIiwiX3JlbmRlckNvbnNvbGVUZXh0IiwiVG91Y2hhYmxlSGl0U2xvcCIsIlRvdWNoYWJsZU5hdGl2ZU1ldGhvZENoZWNrZXIiLCJUb3VjaGFibGVOYXRpdmVNZXRob2RzIiwiVG91Y2hhYmxlRGlzYWJsZWQiLCJDdXN0b21SaXBwbGVSYWRpdXMiLCJUb3VjaGFibGVIaWdobGlnaHRVbmRlcmxheU1ldGhvZHMiLCJ1bmRlcmxheVZpc2libGUiLCJzZXRVbmRlcmxheVZpc2libGUiLCJoaWRkZW5VbmRlcmxheSIsInNob3duVW5kZXJsYXkiLCJUb3VjaGFibGVUb3VjaFNvdW5kRGlzYWJsZWQiLCJzb3VuZEVuYWJsZWQiLCJzZXRTb3VuZEVuYWJsZWQiLCJ0b2dnbGVUb3VjaGFibGVTb3VuZCIsIlRvdWNoYWJsZU9uRm9jdXMiLCJmb2N1c1N0YXR1cyIsInNldEZvY3VzU3RhdHVzIiwiaXNCbHVycmVkIiwic2V0SXNCbHVycmVkIiwidG9nZ2xlRm9jdXMiLCJmb2N1c1RvdWNoYWJsZSIsIlRyYW5zcGFyZW50SGl0VGVzdEV4YW1wbGUiLCJWaWV3Qm9yZGVyU3R5bGVFeGFtcGxlIiwic2hvd0JvcmRlciIsIl9oYW5kbGVQcmVzcyIsIm9mZnNjcmVlbkFscGhhQ29tcG9zaXRpbmdTdHlsZXMiLCJhbHBoYUNvbXBvc2l0aW5nIiwiT2Zmc2NyZWVuQWxwaGFDb21wb3NpdGluZyIsIlpJbmRleEV4YW1wbGVTdHlsZXMiLCJaSW5kZXhFeGFtcGxlIiwiZmxpcHBlZCIsIlBvc2l0aW9uU3RhdGljWkluZGV4RXhhbXBsZSIsIkRpc3BsYXlOb25lU3R5bGUiLCJGbGV4R2FwRXhhbXBsZSIsIkxheW91dENvbmZvcm1hbmNlRXhhbXBsZSIsIkxheW91dENvbmZvcm1hbmNlQm94IiwiX015TmF0aXZlVmlldyIsIl9NeUxlZ2FjeVZpZXdOYXRpdmVDb21wb25lbnQiLCJfTXlOYXRpdmVWaWV3TmF0aXZlQ29tcG9uZW50IiwiY29ybmVyUmFkaXVzZXMiLCJIU0JBIiwiYnJpZ2h0bmVzcyIsImFscGhhIiwiYmVhdXRpZnkiLCJNZWFzdXJlU3RydWN0WmVybyIsImdldFRleHRGb3IiLCJtZWFzdXJlU3RydWN0IiwiTXlOYXRpdmVWaWV3IiwiY29udGFpbmVyUmVmIiwibGVnYWN5UmVmIiwic2V0T3BhY2l0eSIsImFycmF5VmFsdWVzIiwic2V0QXJyYXlWYWx1ZXMiLCJoc2JhIiwic2V0SHNiYSIsImNvcm5lclJhZGl1c0luZGV4Iiwic2V0Q29ybmVyUmFkaXVzSW5kZXgiLCJsZWdhY3lNZWFzdXJlIiwic2V0TGVnYWN5TWVhc3VyZSIsImxlZ2FjeU1lYXN1cmVJbldpbmRvdyIsInNldExlZ2FjeU1lYXN1cmVJbldpbmRvdyIsImxlZ2FjeU1lYXN1cmVMYXlvdXQiLCJzZXRMZWdhY3lNZWFzdXJlTGF5b3V0Iiwib25JbnRBcnJheUNoYW5nZWQiLCJib29sVmFsdWVzIiwiZmxvYXRzIiwiZG91YmxlcyIsInllc05vcyIsInN0cmluZ3MiLCJsYXRMb25zIiwibXVsdGlBcnJheXMiLCJvbkxlZ2FjeVN0eWxlRXZlbnQiLCJvbkNvbG9yQ2hhbmdlZCIsIkNvbnN0YW50cyIsIm5ld0NvbG9yIiwiUk5UTXlOYXRpdmVWaWV3Q29tbWFuZHMiLCJjYWxsTmF0aXZlTWV0aG9kVG9DaGFuZ2VCYWNrZ3JvdW5kQ29sb3IiLCJyYW5kb21Db2xvcklkIiwib3ZlcmxheUNvbG9ycyIsImNhbGxOYXRpdmVNZXRob2RUb0FkZE92ZXJsYXlzIiwiY2FsbE5hdGl2ZU1ldGhvZFRvUmVtb3ZlT3ZlcmxheXMiLCJfbGVnYWN5UmVmJGN1cnJlbnQiLCJfbGVnYWN5UmVmJGN1cnJlbnQyIiwiX2xlZ2FjeVJlZiRjdXJyZW50MyIsImZpcmVMYWdhY3lTdHlsZUV2ZW50IiwiX2xlZ2FjeVJlZiRjdXJyZW50NCIsIm5ld0NSSW5kZXgiLCJjb3JuZXJSYWRpdXMiLCJfUmVhY3ROYXRpdmUiLCJjaGFuZ2VCYWNrZ3JvdW5kQ29sb3IiLCJhZGRPdmVybGF5cyIsInJlbW92ZU92ZXJsYXlzIiwidG9wSW50QXJyYXlDaGFuZ2VkIiwidG9wQWx0ZXJuYXRpdmVMZWdhY3lOYW1lIiwicGVyZm9ybWFuY2VDb21wYXJpc29uRXhhbXBsZXMiLCJTSE9XX05PVEhJTkciLCJTSE9XX0dPT0RfRVhBTVBMRSIsIlNIT1dfQkFEX0VYQU1QTEUiLCJQZXJmRXhhbXBsZVdyYXBwZXIiLCJiYWRFeGFtcGxlIiwiZ29vZEV4YW1wbGUiLCJiYWRFeGFtcGxlU2NyaXB0IiwiZ29vZEV4YW1wbGVTY3JpcHQiLCJsb2FkRXhhbXBsZSIsInNldExvYWRFeGFtcGxlIiwidG9nZ2xlR29vZEV4YW1wbGUiLCJ0b2dnbGVCYWRFeGFtcGxlIiwiYmFkRXhhbXBsZUNvbnRlbnRzIiwiZ29vZEV4YW1wbGVDb250ZW50cyIsImV4YW1wbGVDb250YWluZXIiLCJwZXJmRXhhbXBsZUNvbnRhaW5lciIsIkJhZCIsIkdvb2QiLCJfUmVSZW5kZXJXaXRoTm9uUHVyZUNoaWxkRXhhbXBsZSIsIl9SZVJlbmRlcldpdGhPYmplY3RQcm9wRXhhbXBsZSIsIl9TZXRTdGF0ZUluV3JvbmdFZmZlY3RFeGFtcGxlIiwiX1JlbmRlck9mZnNjcmVlbkNvbnRlbnRFeGFtcGxlIiwiX05vdE1lbW9pemVFeHBlbnNpdmVUYXNrRXhhbXBsZSIsIl9FZmZlY3RJblJlbmRlckV4YW1wbGUiLCJfSXRlbUxpc3QiLCJJdGVtTGlzdE1lbW8iLCJJdGVtTGlzdCIsIlJlUmVuZGVyV2l0aE5vblB1cmVDaGlsZEJhZEV4YW1wbGUiLCJzZXRTY3JvbGxPZmZzZXQiLCJMSVNUXzEwMF9JVEVNUyIsIlJlUmVuZGVyV2l0aE5vblB1cmVDaGlsZEdvb2RFeGFtcGxlIiwiaXRlbUNvbnRhaW5lciIsIml0ZW1OYW1lIiwiYWdlIiwiYWRkcmVzcyIsIl9wcm9wcyR1c2VGbGF0TGlzdCIsInVzZUZsYXRMaXN0IiwiaXRlbURlc2NyaXB0aW9uIiwiQUxMX0NIQVJTIiwiZ2VuZXJhdGVSYW5kb21TdHJpbmciLCJnZW5lcmF0ZVJhbmRvbUFnZSIsImdlbmVyYXRlUmFuZG9tTmFtZSIsImdlbmVyYXRlUmFuZG9tQWRkcmVzcyIsImNpdHkiLCJnZW5lcmF0ZVJhbmRvbUl0ZW1zIiwiTElTVF8xMF9JVEVNUyIsIkxJU1RfMTAwMF9JVEVNUyIsIlJlUmVuZGVyV2l0aE9iamVjdFByb3BCYWRFeGFtcGxlIiwiUmVSZW5kZXJXaXRoT2JqZWN0UHJvcEdvb2RFeGFtcGxlIiwiQmFkRXhhbXBsZSIsImxpc3REYXRhIiwiZmlsdGVyZWRUZXh0IiwidmlzaWJsZUxpc3REYXRhIiwic2V0VmlzaWJsZUxpc3REYXRhIiwiR29vZEV4YW1wbGUiLCJTZXRTdGF0ZUluV3JvbmdFZmZlY3RCYWRFeGFtcGxlIiwiU2V0U3RhdGVJbldyb25nRWZmZWN0R29vZEV4YW1wbGUiLCJSZW5kZXJPZmZzY3JlZW5Db250ZW50QmFkRXhhbXBsZSIsIlJlbmRlck9mZnNjcmVlbkNvbnRlbnRHb29kRXhhbXBsZSIsIk5vdE1lbW9pemVFeHBlbnNpdmVUYXNrRXhhbXBsZUJhZEV4YW1wbGUiLCJzZXRDb3VudCIsImV4cGVuc2l2ZVJlc3VsdCIsIk5vdE1lbW9pemVFeHBlbnNpdmVUYXNrRXhhbXBsZUdvb2RFeGFtcGxlIiwic3VtIiwiVElNRU9VVCIsIkZFVENIX0NPVU5UIiwiSXRlbUZldGNoZXJCYWRFeGFtcGxlIiwib25GZXRjaGVkIiwiZmV0Y2hNb3JlSXRlbXMiLCJpdGVtc0NvdW50IiwiSXRlbUZldGNoZXJHb29kRXhhbXBsZSIsIkl0ZW1GZXRjaGVyQmFkRXhhbXBsZU1lbW8iLCJJdGVtRmV0Y2hlckdvb2RFeGFtcGxlTWVtbyIsIkVmZmVjdEluUmVuZGVyQmFkRXhhbXBsZSIsInZpc2libGVJdGVtcyIsInNldFZpc2libGVJdGVtcyIsImZldGNoZWRJdGVtcyIsInNldEZldGNoZWRJdGVtcyIsIm9uTW9yZUl0ZW1GZXRjaGVkIiwiRWZmZWN0SW5SZW5kZXJHb29kRXhhbXBsZSIsImRpc2FibGVkSW1hZ2UiLCJjb250YWluZXJBbGlnbkNlbnRlciIsInNtYWxsUmVkU3F1YXJlIiwiQWNjZXNzaWJpbGl0eUV4YW1wbGUiLCJBdXRvbWF0aWNDb250ZW50R3JvdXBpbmciLCJhY3Rpb25OYW1lIiwiQ2hlY2tib3hFeGFtcGxlIiwiY2hlY2tib3hTdGF0ZSIsIl9vbkNoZWNrYm94UHJlc3MiLCJTd2l0Y2hFeGFtcGxlIiwic3dpdGNoU3RhdGUiLCJfb25Td2l0Y2hUb2dnbGUiLCJpc1NlbGVjdGVkIiwic2VsZWN0YWJsZUVsZW1lbnQiLCJidXR0b25UaXRsZSIsInRvdWNoYWJsZUhpbnQiLCJFeHBhbmRhYmxlRWxlbWVudEV4YW1wbGUiLCJleHBhbmRTdGF0ZSIsIl9vbkVsZW1lbnRQcmVzcyIsIk5lc3RlZENoZWNrQm94IiwiY2hlY2tib3gxIiwiY2hlY2tib3gyIiwiY2hlY2tib3gzIiwiX29uUHJlc3MxIiwiX29uUHJlc3MyIiwiX29uUHJlc3MzIiwiQWNjZXNzaWJpbGl0eVJvbGVBbmRTdGF0ZUV4YW1wbGUiLCJBY2Nlc3NpYmlsaXR5QWN0aW9uc0V4YW1wbGUiLCJGYWtlU2xpZGVyRXhhbXBsZSIsIl9SZWFjdCRDb21wb25lbnQxMCIsIl9zdXBlcjEwIiwidGV4dHVhbFZhbHVlIiwiZGVjcmVtZW50IiwiRmFrZVNsaWRlckV4YW1wbGVGb3JBY2Nlc3NpYmlsaXR5VmFsdWUiLCJfUmVhY3QkQ29tcG9uZW50MTEiLCJfc3VwZXIxMSIsIkFubm91bmNlRm9yQWNjZXNzaWJpbGl0eSIsIl9SZWFjdCRDb21wb25lbnQxMiIsIl9zdXBlcjEyIiwiX2hhbmRsZU9uUHJlc3MiLCJfaGFuZGxlT25QcmVzc1F1ZXVlZCIsIl9oYW5kbGVPblByZXNzUXVldWVNdWx0aXBsZSIsIlNldEFjY2Vzc2liaWxpdHlGb2N1c0V4YW1wbGUiLCJteVJlZiIsIkVuYWJsZWRFeGFtcGxlcyIsIl9SZWFjdCRDb21wb25lbnQxMyIsIl9zdXBlcjEzIiwiRW5hYmxlZEV4YW1wbGUiLCJldmVudExpc3RlbmVyIiwiSW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eUV4YW1wbGVzIiwiX1JlYWN0JENvbXBvbmVudDE0IiwiX3N1cGVyMTQiLCJfUmVhY3QkQ29tcG9uZW50MTUiLCJfc3VwZXIxNSIsIl9oYW5kbGVUb2dnbGVkIiwiX3RoaXMkX3N1YnNjcmlwdGlvbiIsIkRpc3BsYXlPcHRpb25zU3RhdHVzRXhhbXBsZSIsIl9SZWFjdCRDb21wb25lbnQxNiIsIl9zdXBlcjE2IiwiaXNBbmRyb2lkIiwiRGlzcGxheU9wdGlvblN0YXR1c0V4YW1wbGUiLCJvcHRpb25OYW1lIiwib3B0aW9uQ2hlY2tlciIsInN0YXR1c0VuYWJsZWQiLCJzZXRTdGF0dXNFbmFibGVkIiwiQWNjZXNzaWJpbGl0eUV4cGFuZGVkRXhhbXBsZSIsImV4cGFuZCIsInNldEV4cGFuZGVkIiwiZXhwYW5kQWN0aW9uIiwiY29sbGFwc2VBY3Rpb24iLCJBY2Nlc3NpYmlsaXR5SU9TRXhhbXBsZSIsIkJVVFRPTlMiLCJERVNUUlVDVElWRV9JTkRFWCIsIkNBTkNFTF9JTkRFWCIsIkRJU0FCTEVEX0JVVFRPTl9JTkRJQ0VTIiwiQWN0aW9uU2hlZXRFeGFtcGxlIiwiY2xpY2tlZCIsInNob3dBY3Rpb25TaGVldCIsImNhbmNlbEJ1dHRvbkluZGV4IiwiYnV0dG9uSW5kZXgiLCJBY3Rpb25TaGVldFRpbnRFeGFtcGxlIiwiQWN0aW9uU2hlZXRDYW5jZWxCdXR0b25UaW50RXhhbXBsZSIsIkFjdGlvblNoZWV0QW5jaG9yRXhhbXBsZSIsImFuY2hvclJlZiIsImFuY2hvclJvdyIsIkFjdGlvblNoZWV0RGlzYWJsZWRFeGFtcGxlIiwiZGlzYWJsZWRCdXR0b25JbmRpY2VzIiwiQWN0aW9uU2hlZXREaXNtaXNzRXhhbXBsZSIsInNob3dBbmREaXNtaXNzQWN0aW9uU2hlZXQiLCJTaGFyZUFjdGlvblNoZWV0RXhhbXBsZSIsInNob3dTaGFyZUFjdGlvblNoZWV0IiwiY29tcGxldGVkIiwiU2hhcmVTY3JlZW5zaG90RXhhbXBsZSIsInRha2VTY3JlZW5zaG90IiwiU2hhcmVTY3JlZW5zaG90QW5jaG9yRXhhbXBsZSIsIl9sZW45IiwiX2tleTkiLCJMb2ciLCJsb2dDb250YWluZXIiLCJBbGVydFdpdGhEZWZhdWx0QnV0dG9uIiwiYWxlcnRNZXNzYWdlIiwiQWxlcnRXaXRoVHdvQnV0dG9ucyIsInNldE1lc3NhZ2UiLCJBbGVydFdpdGhUaHJlZUJ1dHRvbnMiLCJBbGVydFdpdGhNYW55QnV0dG9ucyIsImRvdCIsIkFsZXJ0V2l0aENhbmNlbGFibGVUcnVlIiwiQWxlcnRXaXRoU3R5bGVzIiwiQWxlcnRXaXRoU3R5bGVzUHJlZmVycmVkIiwiUHJvbXB0T3B0aW9ucyIsIl9SZWFjdCR1c2VTdGF0ZTEzIiwiX1JlYWN0JHVzZVN0YXRlMTQiLCJwcm9tcHRWYWx1ZSIsInNldFByb21wdFZhbHVlIiwiY3VzdG9tQnV0dG9ucyIsIlByb21wdFR5cGVzIiwiX0NvbG9yU3R5bGVzRXhhbXBsZSIsIl9Db21wb3NlQW5pbWF0aW9uc1dpdGhFYXNpbmdFeGFtcGxlIiwiX0NvbXBvc2luZ0V4YW1wbGUiLCJfQ29udGludW91c0ludGVyYWN0aW9uc0V4YW1wbGUiLCJfRWFzaW5nRXhhbXBsZSIsIl9GYWRlSW5WaWV3RXhhbXBsZSIsIl9Mb29waW5nRXhhbXBsZSIsIl9Nb3ZpbmdCb3hFeGFtcGxlIiwiX1JvdGF0aW5nSW1hZ2VzRXhhbXBsZSIsIl9UcmFuc2Zvcm1Cb3VuY2VFeGFtcGxlIiwiX1RyYW5zZm9ybVN0eWxlc0V4YW1wbGUiLCJUcmFuc2Zvcm1TdHlsZXNFeGFtcGxlIiwiQ29sb3JTdHlsZXNFeGFtcGxlIiwiRmFkZUluVmlld0V4YW1wbGUiLCJDb21wb3NpbmdFeGFtcGxlIiwiRWFzaW5nRXhhbXBsZSIsIkNvbXBvc2VBbmltYXRpb25zV2l0aEVhc2luZ0V4YW1wbGUiLCJSb3RhdGluZ0ltYWdlc0V4YW1wbGUiLCJNb3ZpbmdCb3hFeGFtcGxlIiwiVHJhbnNmb3JtQm91bmNlRXhhbXBsZSIsIkxvb3BpbmdFeGFtcGxlIiwiQ29udGludW91c0ludGVyYWN0aW9uc0V4YW1wbGUiLCJfUk5UQ29uZmlndXJhdGlvbkJsb2NrIiwiX1RvZ2dsZU5hdGl2ZURyaXZlciIsIkFuaW1hdGVkVmlldyIsImFuaW1hdGVkVmlld1N0eWxlIiwiYW5pbWF0ZWRCYXNlVmFsdWUiLCJpbnRlcnBvbGF0aW9uQW5pbWF0ZWRTdHlsZSIsImFuaW1hdGVkRmlyc3RTcGFuVGV4dFN0eWxlIiwiYW5pbWF0ZWRTZWNvbmRTcGFuVGV4dFN0eWxlIiwiYW5pbWF0ZWRJbWFnZVN0eWxlIiwiYm94ZXMiLCJhbmltYXRlZFRleHQiLCJhbmltYXRlZEltYWdlIiwiQW5pbWF0ZWRDb2xvclN0eWxlRXhhbXBsZSIsInNldFVzZU5hdGl2ZURyaXZlciIsIlJOVENvbmZpZ3VyYXRpb25CbG9jayIsIlRvZ2dsZU5hdGl2ZURyaXZlciIsIkNvbXBvc2l0ZUFuaW1hdGlvbnNXaXRoRWFzaW5nRXhhbXBsZSIsImFuaW1zIiwiYm94U2l6ZSIsImxlZnRUb1JpZ2h0VGltaW5nQ29uZmlnIiwicmlnaHRUb0xlZnRUaW1pbmdDb25maWciLCJjb21wb3NpdGVBbmltYXRpb24iLCJDb21wb3NpbmdFeGFtcGxlSXRlbSIsIndpbmRvd1dpZHRoIiwibWF4WFRyYW5zbGF0aW9uIiwiYm94SW5kZXhlcyIsInhUcmFuc2xhdGlvbnMiLCJpdGVtVGl0bGUiLCJib3hlc0NvbnRhaW5lciIsImJveEluZGV4IiwiYnV0dG9uc0NvbnRhaW5lciIsImVhc2luZ1NlY3Rpb25zIiwiRWFzaW5nSXRlbSIsIm9wYWNpdHlBbmRTY2FsZSIsIml0ZW1NZXRhIiwiYm94Q29udGFpbmVyIiwiRmFkZUluVmlldyIsImZhZGVBbmltIiwiRmFkZUluRXhhbXBsZSIsInNldFNob3ciLCJMb29waW5nVmlldyIsInJ1bm5pbmciLCJzZXRSdW5uaW5nIiwiY29udGFpbmVyV2lkdGgiLCJNb3ZpbmdCb3hWaWV3Iiwic2V0VXBkYXRlIiwiYm94VmlzaWJsZSIsInNldEJveFZpc2libGUiLCJtb3ZlVG8iLCJwb3MiLCJ0b2dnbGVWaXNpYmlsaXR5IiwidG9nZ2xlVGV4dCIsIm9uUmVzZXQiLCJyb3RhdGluZ0ltYWdlIiwiUm90YXRpbmdJbWFnZXNWaWV3Iiwicm90YXRpbmdBbmltYXRpb24iLCJUcmFuc2Zvcm1Cb3VuY2VWaWV3IiwiYm91bmNlQW5pbWF0aW9uIiwidHJhbnNmb3JtUHJvcGVydGllcyIsInRyYW5zZm9ybVN0eWxlcyIsIkFuaW1hdGVkVHJhbnNmb3JtU3R5bGVFeGFtcGxlIiwic2V0UHJvcGVydGllcyIsIm9uVG9nZ2xlIiwiYm90dG9tU2VwYXJhdGlvbiIsIm9wdGlvbnNUaXRsZSIsIkNJUkNMRV9TSVpFIiwiQ0lSQ0xFX01BUkdJTiIsIk5VTV9DSVJDTEVTIiwiQ2lyY2xlIiwiX29uTG9uZ1ByZXNzIiwicGFuIiwib25Nb3ZlIiwicmVzdExheW91dCIsIm9uRGVhY3RpdmF0ZSIsIm9uQWN0aXZhdGUiLCJfdG9nZ2xlSXNBY3RpdmUiLCJvcGVuVmFsIiwiZHJhZ1N0eWxlIiwibG9uZ1RpbWVyIiwiYW5pbWF0ZWRTdHlsZSIsImlubmVyT3BlblN0eWxlIiwiZHVtbXkiLCJjb250YWluZXJMYXlvdXQiLCJkcmFnVmlldyIsIkFuRXhBcHAiLCJfb25Nb3ZlIiwibmV3S2V5cyIsIm1vdmVUb0Nsb3Nlc3QiLCJyZXN0TGF5b3V0cyIsImNpcmNsZXMiLCJhY3RpdmVLZXkiLCJhY3RpdmVJbml0aWFsTGF5b3V0IiwiZGFya2VuaW5nIiwiZ3JpZCIsImFjdGl2ZUlkeCIsImNsb3Nlc3RJZHgiLCJtaW5EaXN0IiwiQW5FeFNldCIsInJhbmRDb2xvciIsImNsb3NlQ29sb3IiLCJvcGVuQ29sb3IiLCJwYW5lbFdpZHRoIiwiZGlzbWlzc1Jlc3BvbmRlciIsInN0cmVhbSIsImRpc21pc3NZIiwiQW5FeFRpbHQiLCJwYW5YIiwiYnVybnMiLCJ0aWx0UGFuUmVzcG9uZGVyIiwiX3N0YXJ0QnVybnNab29tIiwidGlsdCIsIk5VTV9CT0JCTEVTIiwiUkFEX0VBQ0giLCJSQURJVVMiLCJCT0JCTEVfU1BPVFMiLCJBbkV4Qm9iYmxlIiwiYm9iYmxlcyIsInNlbGVjdGVkQm9iYmxlIiwiYm9iYmxlUGFuTGlzdGVuZXIiLCJuZXdTZWxlY3RlZCIsImNvbXB1dGVOZXdTZWxlY3RlZCIsInJlc3RTcG90IiwicmVsZWFzZUJvYmJsZSIsImJvYmJsZSIsImJvYmJsZVJlc3BvbmRlciIsInNwb3QiLCJib2JibGVDb250YWluZXIiLCJCT0JCTEVfSU1HUyIsInBvaW50UmFkaXVzIiwiQW5FeFNjcm9sbCIsIkhBV0tfUElDIiwiYnVubnkiLCJCVU5OWV9QSUMiLCJBbkV4Q2hhaW5lZCIsInN0aWNrZXJzIiwic3RpY2tlckNvbmZpZyIsInN0aWNrZXIiLCJyZWxlYXNlQ2hhaW4iLCJjaGFpblJlc3BvbmRlciIsImNoYWluZWQiLCJDSEFJTl9JTUdTIiwiQ29sb3JTY2hlbWVTdWJzY3JpcHRpb24iLCJzZXRTY2hlbWUiLCJwcmVmZXJlbmNlcyIsIlRoZW1lZENvbnRhaW5lciIsIlRoZW1lZFRleHQiLCJBcHBlYXJhbmNlVmlhSG9vayIsIkNvbG9yU2hvd2Nhc2UiLCJ0aGVtZU5hbWUiLCJUb2dnbGVOYXRpdmVBcHBlYXJhbmNlIiwic2V0TmF0aXZlQ29sb3JTY2hlbWUiLCJBcHBTdGF0ZVN1YnNjcmlwdGlvbiIsImFwcFN0YXRlIiwicHJldmlvdXNBcHBTdGF0ZXMiLCJtZW1vcnlXYXJuaW5ncyIsImV2ZW50c0RldGVjdGVkIiwiX2hhbmRsZU1lbW9yeVdhcm5pbmciLCJfaGFuZGxlQmx1ciIsIl9oYW5kbGVGb2N1cyIsIl9oYW5kbGVBcHBTdGF0ZUNoYW5nZSIsInNob3dNZW1vcnlXYXJuaW5ncyIsInNob3dDdXJyZW50T25seSIsImRldGVjdEV2ZW50cyIsImJvcmRlcjEiLCJib3JkZXIyIiwiYm9yZGVyMyIsImJvcmRlcjQiLCJib3JkZXI1IiwiYm9yZGVyNiIsImJvcmRlcjciLCJib3JkZXI3X2lubmVyIiwiYm9yZGVyOCIsImJvcmRlcjhUb3AiLCJib3JkZXI4TGVmdCIsImJvcmRlcjhCb3R0b20iLCJib3JkZXI4UmlnaHQiLCJib3JkZXI5IiwiYm9yZGVyMTAiLCJib3JkZXIxMSIsImJvcmRlcjEyIiwiYm9yZGVyMTMiLCJib3JkZXIxNCIsImJvcmRlcjE1Iiwid2luZG93cyIsImJvcmRlcjE2Iiwic2hhZG93MSIsInNoYWRvdzIiLCJzaGFkb3dTaGFwZWQiLCJzaGFkb3dJbWFnZSIsInNoYWRvd0NoaWxkIiwic2hhZG93Q2hpbGRCb3giLCJlbGV2YXRpb24xIiwiZWxldmF0aW9uMiIsImVsZXZhdGlvbjMiLCJzaGFkb3dDb2xvcjEiLCJzaGFkb3dDb2xvcjIiLCJzaGFkb3dDb2xvcjMiLCJEaW1lbnNpb25zU3Vic2NyaXB0aW9uIiwic2V0RGltcyIsIkRpbWVuc2lvbnNWaWFIb29rIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJCZW5jaG1hcmsiLCJJbnRlcnNlY3Rpb25PYnNlcnZlck1ETkV4YW1wbGUiLCJJbnRlcnNlY3Rpb25PYnNlcnZlckJlbmNoYXJrIiwiUk9XUyIsIkNPTFVNTlMiLCJpc09ic2VydmluZyIsInNldE9ic2VydmluZyIsIm9ic2VydmluZyIsIl8yIiwiaXRlbVRleHQiLCJzY3JvbGxEb3duVGV4dCIsIkxpc3RJdGVtIiwidGhyZXNob2xkcyIsImJ1aWxkVGhyZXNob2xkTGlzdCIsIl9wcm9wcyRpbml0aWFsVmFsdWUiLCJpdGVtUmVmIiwiaW50ZXJzZWN0aW9uUmF0aW8iLCJzZXRJbnRlcnNlY3Rpb25SYXRpbyIsIml0ZW1Ob2RlIiwiaW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25SYXRpb0luZGljYXRvciIsImludGVyc2VjdGlvblJhdGlvSW5kaWNhdG9yIiwibnVtU3RlcHMiLCJDb21wYXJpc29uIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJyZXNvdXJjZV9wYXRocyIsIktleWJvYXJkRXZlbnRWaWV3ZXIiLCJzaG93RXZlbnQiLCJoaWRlRXZlbnQiLCJpc1Nob3duIiwic2V0SXNTaG93biIsImxhc3RFdmVudCIsInNldExhc3RFdmVudCIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiZXZlbnRCb3giLCJrZXlib2FyZFdpbGxTaG93SGlkZUV4YW1wbGUiLCJrZXlib2FyZERpZFNob3dIaWRlRXhhbXBsZSIsInNodWZmbGVBcnJheSIsInRlbXBvcmFyeVZhbHVlIiwicmFuZG9tSW5kZXgiLCJBZGRSZW1vdmVFeGFtcGxlIiwibmV4dEtleSIsIl9vblByZXNzQWRkVmlld0FuaW1hdGVkIiwiY29uZmlndXJlTmV4dEFuaW1hdGlvbiIsIl9vblByZXNzQWRkVmlldyIsIl9vblByZXNzUmVtb3ZlVmlld0FuaW1hdGVkIiwiX29uUHJlc3NSZW1vdmVWaWV3IiwiX29uUHJlc3NSZW9yZGVyVmlld3NBbmltYXRlZCIsIl9vblByZXNzUmVvcmRlclZpZXdzIiwidmlld0NvbnRhaW5lciIsIlJlcGFyZW50aW5nRXhhbXBsZSIsImhhc0JvcmRlciIsIl9vblByZXNzVG9nZ2xlQW5pbWF0ZWQiLCJfb25QcmVzc1RvZ2dsZSIsInBhcmVudFN0eWxlIiwiR3JlZW5TcXVhcmUiLCJncmVlblNxdWFyZSIsIkJsdWVTcXVhcmUiLCJibHVlU3F1YXJlIiwiQ3Jvc3NGYWRlRXhhbXBsZSIsIl9hcmdzMiIsInRvZ2dsZWQiLCJMYXlvdXRVcGRhdGVFeGFtcGxlIiwiX2FyZ3MzIiwiX2NsZWFyVGltZW91dCIsIkNpcmNsZUJsb2NrIiwiY2lyY2xlU3R5bGUiLCJMYXlvdXRFeGFtcGxlIiwiZml2ZUNvbG9yZWRDaXJjbGVzIiwiT3BlblVSTEJ1dHRvbiIsImhhbmRsZUNsaWNrIiwic3VwcG9ydGVkIiwiX3RoaXMkcHJvcHMkdXJsJHNwbGl0IiwiT3BlblNldHRpbmdzRXhhbXBsZSIsIlNlbmRJbnRlbnRCdXR0b24iLCJoYW5kbGVJbnRlbnQiLCJidXR0b25JbnRlbnQiLCJJbnRlbnRBbmRyb2lkRXhhbXBsZSIsInRleHRTZXBhcmF0b3IiLCJNdXRhdGlvbk9ic2VydmVyRXhhbXBsZSIsIlZpc3VhbENvbXBsZXRpb25FeGFtcGxlIiwiX011dGF0aW9uT2JzZXJ2ZXIiLCJuZXh0SWRCeVByZWZpeCIsImdlbmVyYXRlSWQiLCJuZXh0SWQiLCJyb290SWQiLCJ1c2VUZW1wb3JhcnlWYWx1ZSIsInBhcmVudFZpZXdSZWYiLCJzaG93RXhhbXBsZSIsInNldFNob3dFeGFtcGxlIiwiX3VzZVRlbXBvcmFyeVZhbHVlIiwiX3VzZVRlbXBvcmFyeVZhbHVlMiIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJyZWNvcmRzIiwiYWRkZWROb2RlcyIsIm5vZGVMaXN0VG9TdHJpbmciLCJyZW1vdmVkTm9kZXMiLCJzdWJ0cmVlIiwiZXhhbXBsZUlkIiwiRXhhbXBsZUl0ZW0iLCJvblJlbW92ZSIsInByZXZDaGlsZHJlbjIiLCJub2RlTGlzdCIsIl9SZWFjdE5hdGl2ZUVsZW1lbnQiLCJNdXRhdGlvbk9ic2VydmVyTWFuYWdlciIsIl9vYnNlcnZhdGlvblRhcmdldHMiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJhdHRyaWJ1dGVPbGRWYWx1ZSIsImNoYXJhY3RlckRhdGEiLCJjaGFyYWN0ZXJEYXRhT2xkVmFsdWUiLCJtdXRhdGlvbk9ic2VydmVySWQiLCJfZ2V0T3JDcmVhdGVNdXRhdGlvbk9ic2VydmVySWQiLCJ1bm9ic2VydmUiLCJfdW5vYnNlcnZlIiwiX211dGF0aW9uT2JzZXJ2ZXJJZCIsInVucmVnaXN0ZXJPYnNlcnZlciIsInJlZ2lzdGVyT2JzZXJ2ZXIiLCJfX2dldE9ic2VydmVySUQiLCJfTmF0aXZlTXV0YXRpb25PYnNlcnZlciIsIm5leHRNdXRhdGlvbk9ic2VydmVySWQiLCJyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnMiLCJOYXRpdmVNdXRhdGlvbk9ic2VydmVyIiwid2Fybk5vTmF0aXZlTXV0YXRpb25PYnNlcnZlciIsInJlZ2lzdGVyZWRPYnNlcnZlciIsInRhcmdldFNoYWRvd05vZGUiLCJub3RpZnlNdXRhdGlvbk9ic2VydmVycyIsImRvTm90aWZ5TXV0YXRpb25PYnNlcnZlcnMiLCJuYXRpdmVSZWNvcmRzIiwidGFrZVJlY29yZHMiLCJlbnRyaWVzQnlPYnNlcnZlciIsIm5hdGl2ZVJlY29yZCIsImNyZWF0ZU11dGF0aW9uUmVjb3JkIiwiX3JlZ2lzdGVyZWRPYnNlcnZlciIsIl9Ob2RlTGlzdCIsIk11dGF0aW9uUmVjb3JkIiwiX3RhcmdldCIsIl9hZGRlZE5vZGVzIiwiX3JlbW92ZWROb2RlcyIsIl9WQ092ZXJsYXlFeGFtcGxlIiwiX1ZDVHJhY2tlckV4YW1wbGUiLCJuYXZpZ2F0aW9uU3RhcnRUaW1lIiwidmNUcmFja2VyIiwiVkNUcmFja2VyIiwiVmlzdWFsQ29tcGxldGlvbkV4YW1wbGVTY3JlZW4iLCJhZGRNdXRhdGlvblJvb3QiLCJGb3JjZVN1c3BlbnNlIiwicXVlcnlJRCIsImdlbmVyYXRlUXVlcnlJRCIsImJvZHlDb250ZW50IiwiTE9OR19URVhUIiwiZm9vdGVyIiwidXNlRm9yY2VTdXNwZW5zZSIsImxhc3RRdWVyeUlEIiwic3RvcmUiLCJPVkVSTEFZX1NDQUxFIiwiVkNPdmVybGF5RXhhbXBsZSIsInZpc3VhbEVsZW1lbnRzIiwic2V0VmlzdWFsRWxlbWVudHMiLCJnZXRWaXN1YWxFbGVtZW50cyIsIm9uVXBkYXRlVmlzdWFsRWxlbWVudHMiLCJ2aXN1YWxFbGVtZW50Iiwib3ZlcmxheUVsZW1lbnQiLCJfSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfdmlzdWFsRWxlbWVudHMiLCJfcGVuZGluZ011dGF0aW9ucyIsIl9uYXZpZ2F0aW9uU3RhcnRUaW1lIiwiX2ludGVyc2VjdGlvbk9ic2VydmVyIiwiX3JlZ2lzdGVyVmlzdWFsRWxlbWVudCIsImJvdW5kaW5nQ2xpZW50UmVjdCIsIl9tdXRhdGlvbk9ic2VydmVyIiwiYWRkZWROb2RlIiwicmVtb3ZlZE5vZGUiLCJfdW5yZWdpc3RlclZpc3VhbEVsZW1lbnQiLCJfdGhpcyRfcmVnaXN0ZXJlZENhbGwiLCJfcmVnaXN0ZXJlZENhbGxiYWNrIiwiX3RoaXMkX3JlZ2lzdGVyZWRDYWxsMiIsIkludGVyc2VjdGlvbk9ic2VydmVyTWFuYWdlciIsInJvb3RNYXJnaW4iLCJfdGhyZXNob2xkcyIsIm5vcm1hbGl6ZVRocmVzaG9sZHMiLCJpbnRlcnNlY3Rpb25PYnNlcnZlcklkIiwiX2dldE9yQ3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJZCIsIl9pbnRlcnNlY3Rpb25PYnNlcnZlcklkIiwibm9ybWFsaXplVGhyZXNob2xkVmFsdWUiLCJ0aHJlc2hvbGRBc051bWJlciIsIl9OYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm5leHRJbnRlcnNlY3Rpb25PYnNlcnZlcklkIiwicmVnaXN0ZXJlZEludGVyc2VjdGlvbk9ic2VydmVycyIsImluc3RhbmNlSGFuZGxlVG9UYXJnZXRNYXAiLCJnZXRUYXJnZXRGcm9tSW5zdGFuY2VIYW5kbGUiLCJzZXRUYXJnZXRGb3JJbnN0YW5jZUhhbmRsZSIsInVuc2V0VGFyZ2V0Rm9ySW5zdGFuY2VIYW5kbGUiLCJ0YXJnZXRUb1NoYWRvd05vZGVBbmRJbnN0YW5jZUhhbmRsZU1hcCIsIk5hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyIiwid2Fybk5vTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJub3RpZnlJbnRlcnNlY3Rpb25PYnNlcnZlcnMiLCJ0YXJnZXRTaGFkb3dOb2RlQW5kSW5zdGFuY2VIYW5kbGUiLCJfdGFyZ2V0U2hhZG93Tm9kZUFuZEkiLCJkb05vdGlmeUludGVyc2VjdGlvbk9ic2VydmVycyIsIm5hdGl2ZUVudHJpZXMiLCJuYXRpdmVFbnRyeSIsInRhcmdldEluc3RhbmNlSGFuZGxlIiwiY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSIsIkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkiLCJfbmF0aXZlRW50cnkiLCJ0YXJnZXRSZWN0IiwiaW50ZXJzZWN0aW9uUmVjdCIsImlzSW50ZXJzZWN0aW5nQWJvdmVUaHJlc2hvbGRzIiwicm9vdFJlY3QiLCJfUk5UZXN0ZXJTZXR0aW5nU3dpdGNoUm93IiwiX3VzZUpzU3RhbGxzMiIsIlRlc3RlciIsImpzIiwiYW5pbUNvbmZpZyIsInJldmVyc2VDb25maWciLCJWYWx1ZUxpc3RlbmVyRXhhbXBsZSIsIkxvb3BFeGFtcGxlIiwiSW50ZXJuYWxTZXR0aW5ncyIsIl91c2VKc1N0YWxscyIsInVzZUpzU3RhbGxzIiwib25EaXNhYmxlRm9yY2VKc1N0YWxscyIsIm9uRW5hYmxlRm9yY2VKc1N0YWxscyIsIm9uRW5hYmxlSnNTdGFsbHNUcmFja2luZyIsIm9uRGlzYWJsZUpzU3RhbGxzVHJhY2tpbmciLCJzdGFsbEludGVydmFsSWQiLCJmaWx0ZXJlZFN0YWxsIiwiYnVzeVRpbWUiLCJvbkVuYWJsZSIsIm9uRGlzYWJsZSIsIkV2ZW50RXhhbXBsZSIsIlRyYWNraW5nRXhhbXBsZSIsInRvTmF0aXZlIiwidG9KUyIsInJlbmRlckJsb2NrIiwiZGVzdCIsImxvbmdTZXR0bGluZ1NwcmluZyIsIlJOVGVzdGVyU2V0dGluZ1N3aXRjaFJvdyIsIklOSVRJQUxfU1RBVEUiLCJGSUxURVJFRF9TVEFMTF9NVUxUSVBMSUVSIiwiQlVTWV9USU1FX01VTFRJUExJRVIiLCJzdGFsbHNTdGF0ZSIsInNldFN0YWxsc1N0YXRlIiwiaW50ZXJ2YWxJZCIsIkpTRXZlbnRMb29wV2F0Y2hkb2ciLCJ0aHJlc2hvbGRNUyIsImFkZEhhbmRsZXIiLCJvblN0YWxsIiwiZ2V0U3RhdHMiLCJzdGFsbENvdW50IiwidG90YWxTdGFsbFRpbWUiLCJsb25nZXN0U3RhbGwiLCJhY2NlcHRhYmxlQnVzeVRpbWUiLCJsYXN0SW50ZXJ2YWwiLCJpbnN0YWxsZWQiLCJpdGVyYXRpb24iLCJzdGFsbFRpbWUiLCJvbkl0ZXJhdGUiLCJPcmllbnRhdGlvbkNoYW5nZUV4YW1wbGUiLCJvcmllbnRhdGlvbkRlZ3JlZXMiLCJpc0xhbmRzY2FwZSIsIl9vbk9yaWVudGF0aW9uQ2hhbmdlIiwicm90YXRpb25EZWdyZWVzIiwiX29yaWVudGF0aW9uU3Vic2NyaXB0aW9uIiwiUGFuUmVzcG9uZGVyRXhhbXBsZSIsIl9wcmV2aW91c0xlZnQiLCJfcHJldmlvdXNUb3AiLCJfY2lyY2xlU3R5bGVzIiwiX2hhbmRsZVN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyIiwiX2hhbmRsZU1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXIiLCJfaGFuZGxlUGFuUmVzcG9uZGVyR3JhbnQiLCJfaGFuZGxlUGFuUmVzcG9uZGVyTW92ZSIsIl9oYW5kbGVQYW5SZXNwb25kZXJFbmQiLCJfcGFuUmVzcG9uZGVyIiwiUGxhdGZvcm1Db2xvcnNFeGFtcGxlIiwiY3JlYXRlVGFibGUiLCJsYWJlbENlbGwiLCJjb2xvckNlbGwiLCJGYWxsYmFja0NvbG9yc0V4YW1wbGUiLCJEeW5hbWljQ29sb3JzRXhhbXBsZSIsIlZhcmlhbnRDb2xvcnNFeGFtcGxlIiwiRXhhbXBsZUJveCIsImhhbmRsZUxvZyIsImZsdXNoUmVhY3RDaGFuZ2VzIiwiaGFuZGxlVG91Y2hDYXB0dXJlIiwib25Ub3VjaEVuZENhcHR1cmUiLCJvbkxvZyIsIkRlbW9UZXh0IiwibG9nVGV4dCIsIk5vbmVFeGFtcGxlIiwiYm94UGFzc2VkVGhyb3VnaCIsInRleHRQYXNzZWRUaHJvdWdoIiwiTm9uZVN0eWxlRXhhbXBsZSIsInBvaW50ZXJFdmVudE5vbmUiLCJCb3hOb25lRXhhbXBsZSIsIkJveE5vbmVTdHlsZUV4YW1wbGUiLCJwb2ludGVyRXZlbnRCb3hOb25lIiwicG9pbnRlckV2ZW50QXV0byIsIkJveE9ubHlFeGFtcGxlIiwiQm94T25seVN0eWxlRXhhbXBsZSIsInBvaW50ZXJFdmVudEJveE9ubHkiLCJPdmVyZmxvd0V4YW1wbGUiLCJib3hXaXRoT3ZlcmZsb3dTZXQiLCJib3hPdmVyZmxvd2luZyIsImJveEZ1bGx5T3V0c2lkZSIsImJveEZ1bGx5T3V0c2lkZUNoaWxkIiwiT3ZlcmZsb3dWaXNpYmxlRXhhbXBsZSIsIk92ZXJmbG93SGlkZGVuRXhhbXBsZSIsImV4YW1wbGVDbGFzc2VzIiwiaW5mb1RvRXhhbXBsZSIsIkFwcFByb3BlcnRpZXNVcGRhdGVFeGFtcGxlIiwiVXBkYXRlUHJvcGVydGllc0V4YW1wbGVWaWV3IiwibmF0aXZlVmlldyIsIlJvb3RWaWV3U2l6ZUZsZXhpYmlsaXR5RXhhbXBsZSIsIkZsZXhpYmxlU2l6ZUV4YW1wbGVWaWV3IiwiU0NBTEUiLCJJTUFHRV9ESU1FTlNJT04iLCJJTUFHRV9TSVpFIiwiY29sdW1uMSIsImltYWdlU291cmNlIiwiY29sdW1uMiIsInRleHRCb3giLCJjb2x1bW4zIiwic21hbGxCdXR0b24iLCJmb250U2l6ZVNtYWxsIiwiVGV4dEFsaWdubWVudEV4YW1wbGUiLCJ3aXRoUlRMU3RhdGUiLCJzZXRSVEwiLCJSVExUb2dnbGVyIiwiZGlyZWN0aW9uU3R5bGUiLCJUZXh0SW5wdXRFeGFtcGxlIiwiSWNvbnNFeGFtcGxlIiwiZmxleERpcmVjdGlvblJvdyIsImZvbnRTaXplRXh0cmFTbWFsbCIsInJpZ2h0QWxpZ25TdHlsZSIsIndpdGhSVExTdHlsZSIsIkFuaW1hdGlvbkJsb2NrIiwiaW1nIiwiaW1nU3R5bGUiLCJydGxUb2dnbGVyIiwiUlRMVG9nZ2xlRXhhbXBsZSIsIl9vbkRpcmVjdGlvbkNoYW5nZSIsImRpcmVjdGlvbkJveCIsImRpcmVjdGlvblRleHQiLCJzd2l0Y2hSb3dUZXh0VmlldyIsInN3aXRjaFJvd1N3aXRjaFZpZXciLCJTaW1wbGVMaXN0SXRlbUV4YW1wbGUiLCJBbmltYXRpb25Db250YWluZXIiLCJBbmltYXRpb25FeGFtcGxlIiwiX2xpbmVhclRhcCIsInRvZ2dsZVN0YXR1cyIsInRvTWF4RGlzdGFuY2UiLCJQYWRkaW5nRXhhbXBsZSIsIk1hcmdpbkV4YW1wbGUiLCJQb3NpdGlvbkV4YW1wbGUiLCJCb3JkZXJXaWR0aEV4YW1wbGUiLCJCb3JkZXJDb2xvckV4YW1wbGUiLCJCb3JkZXJSYWRpaUV4YW1wbGUiLCJMb2dpY2FsQm9yZGVyUmFkaWlFeGFtcGxlIiwiQm9yZGVyRXhhbXBsZSIsIl9jMjkiLCJ0ZXh0QWxpZ25MZWZ0IiwidGV4dEFsaWduUmlnaHQiLCJzaGFyZU1lc3NhZ2UiLCJzaGFyZVRleHQiLCJTaGFyZU1lc3NhZ2VXaXRob3V0VGl0bGUiLCJTaGFyZU1lc3NhZ2VXaXRoVGl0bGUiLCJTaGFyZWRBY3Rpb24iLCJzZXRTaGFyZWQiLCJTY3JlZW5zaG90RXhhbXBsZSIsInF1YWxpdHkiLCJidXJuQ1BVIiwibWlsbGlzZWNvbmRzIiwiUmVxdWVzdElkbGVDYWxsYmFja1Rlc3RlciIsIl9pZGxlVGltZXIiLCJfaXRlcnMiLCJfcnVuV2l0aFRpbWVvdXQiLCJfcnVuQmFja2dyb3VuZCIsIl9zdG9wQmFja2dyb3VuZCIsIl9ydW4iLCJzaG91bGRCdXJuQ1BVIiwiVGltZXJUZXN0ZXIiLCJfaWkiLCJfc3RhcnQiLCJfdGltZXJJZCIsIl9yYWZJZCIsIl9pbnRlcnZhbElkIiwiX2ltbWVkaWF0ZUlkIiwiX3RpbWVyRm4iLCJnZXRUaW1lIiwiSW50ZXJ2YWxFeGFtcGxlIiwic2hvd1RpbWVyIiwiX3JlbmRlclRpbWVyIiwiX3RpbWVyVGVzdGVyIiwiX3RvZ2dsZVRpbWVyIiwiQW5pbWF0ZVRyYW5zZm9ybVNpbmdsZVByb3AiLCJ0aGV0YSIsImZsaXBDYXJkQ29udGFpbmVyIiwiYm94NiIsImZsaXBUZXh0IiwiVHJhbnNmb3JtT3JpZ2luRXhhbXBsZSIsInJvdGF0ZUFuaW0iLCJzcGluIiwidHJhbnNmb3JtT3JpZ2luV3JhcHBlciIsInRyYW5zZm9ybU9yaWdpblZpZXciLCJGbGlwIiwiZmxpcENhcmQiLCJmbGlwQ2FyZDEiLCJib3gxIiwiYm94MiIsImJveDNzdGVwMSIsImJveDNzdGVwMiIsImJveDNzdGVwMyIsImJveDQiLCJ0cmFuc2xhdGUiLCJib3g1IiwiYm94NVRyYW5zZm9ybSIsImJveDciLCJib3g3VHJhbnNmb3JtIiwiX1R1cmJvTW9kdWxlRXhhbXBsZUNvbW1vbiIsIl9OYXRpdmVTYW1wbGVUdXJib01vZHVsZSIsIlNhbXBsZVR1cmJvTW9kdWxlRXhhbXBsZSIsInRlc3RSZXN1bHRzIiwiX3Rlc3RzIiwiTmF0aXZlU2FtcGxlVHVyYm9Nb2R1bGUiLCJnZXRWYWx1ZVdpdGhDYWxsYmFjayIsImNhbGxiYWNrVmFsdWUiLCJfc2V0UmVzdWx0IiwiZ2V0VmFsdWVXaXRoUHJvbWlzZSIsInJlamVjdFByb21pc2UiLCJ2b2lkRnVuYyIsImdldEJvb2wiLCJnZXRFbnVtIiwiRW51bUludCIsImdldE51bWJlciIsImdldEFycmF5IiwiZ2V0T2JqZWN0IiwiZ2V0VW5zYWZlT2JqZWN0IiwiZ2V0Um9vdFRhZyIsInZvaWRGdW5jVGhyb3dzIiwiZ2V0T2JqZWN0VGhyb3dzIiwicHJvbWlzZVRocm93cyIsInZvaWRGdW5jQXNzZXJ0IiwiZ2V0T2JqZWN0QXNzZXJ0IiwicHJvbWlzZUFzc2VydCIsIl9yZW5kZXJSZXN1bHQiLCJidXR0b25UZXh0TGFyZ2UiLCJyZXZlcnNlTWFwQ2FjaGUiLCJnZXRSZXZlcnNlTWFwIiwiZW51bU9iamVjdCIsInJldmVyc2VNYXAiLCJuZXdSZXZlcnNlTWFwIiwiRW51bVByb3RvdHlwZSIsImNhc3QiLCJtZW1iZXJzIiwiZ2V0TmFtZSIsIkVudW0iLCJFbnVtTWlycm9yZWRQcm90b3R5cGUiLCJNaXJyb3JlZCIsIkVudW1NaXJyb3JlZCIsInRyaWVkTG9hZGluZ01vZHVsZU9uY2UiLCJnZXRTYW1wbGVMZWdhY3lNb2R1bGUiLCJTYW1wbGVMZWdhY3lNb2R1bGUiLCJzb3J0ZWQiLCJyZXBsYWNlQWxsIiwiU2FtcGxlTGVnYWN5TW9kdWxlRXhhbXBsZSIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bCIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDIiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwzIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsNCIsImdldEZsb2F0IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsNSIsImdldEludCIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDYiLCJnZXRMb25nTG9uZyIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDciLCJnZXRVbnNpZ25lZExvbmdMb25nIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsOCIsImdldE5TSW50ZWdlciIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDkiLCJnZXROU1VJbnRlZ2VyIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMTAiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwxMSIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDEyIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMTMiLCJnZXROdWxsU3RyaW5nIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMTQiLCJnZXROU051bWJlciIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDE1IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMTYiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwxNyIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDE4IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMTkiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwyMCIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDIxIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMjIiLCJnZXRDb25zdDEiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwyMyIsImNvbnN0MSIsImdldENvbnN0MiIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDI0IiwiY29uc3QyIiwiZ2V0Q29uc3QzIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMjUiLCJjb25zdDMiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwyNiIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDI3IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMjgiLCJnZXREb3VibGUiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwyOSIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDMwIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMzEiLCJnZXRPYmplY3REb3VibGUiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwzMiIsImdldE9iamVjdEludGVnZXIiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwzMyIsImdldE9iamVjdEZsb2F0IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMzQiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwzNSIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDM2IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsMzciLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWwzOCIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDM5IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsNDAiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWw0MSIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDQyIiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsNDMiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWw0NCIsIl9nZXRTYW1wbGVMZWdhY3lNb2R1bDQ1IiwiX2dldFNhbXBsZUxlZ2FjeU1vZHVsNDYiLCJfZ2V0U2FtcGxlTGVnYWN5TW9kdWw0NyIsIl9nZXRDb250ZW50IiwiX05hdGl2ZUN4eE1vZHVsZUV4YW1wbGUiLCJOYXRpdmVDeHhNb2R1bGVFeGFtcGxlRXhhbXBsZSIsIk5hdGl2ZUN4eE1vZHVsZUV4YW1wbGUiLCJjYWxsYmFja1dpdGhTdWJzY3JpcHRpb24iLCJzZXRWYWx1ZUNhbGxiYWNrV2l0aFN1YnNjcmlwdGlvbiIsImdldEN1c3RvbUVudW0iLCJJQiIsImdldEN1c3RvbUhvc3RPYmplY3QiLCJjb25zdW1lQ3VzdG9tSG9zdE9iamVjdCIsImdldEJpbmFyeVRyZWVOb2RlIiwiZ2V0R3JhcGhOb2RlIiwibmVpZ2hib3JzIiwiZ2V0TnVtRW51bSIsImdldFN0ckVudW0iLCJFbnVtTm9uZSIsIk5CIiwiZ2V0U2V0IiwiZ2V0VW5pb24iLCJsb3ciLCJzZXRNZW51SXRlbSIsImN1clZhbHVlIiwic2V0TWVudSIsInNob3J0Y3V0Iiwib3B0aW9uYWxBcmdzIiwiZ2V0V2l0aFdpdGhPcHRpb25hbEFyZ3MiLCJlbWl0RGV2aWNlRXZlbnQiLCJDVVNUT01fRVZFTlRfVFlQRSIsImVtaXRDdXN0b21EZXZpY2VFdmVudCIsIl9lcnJvclRlc3RzIiwiSUEiLCJFbnVtRmxvYXQiLCJGQSIsIkZCIiwiRW51bVN0ciIsIlNBIiwiU0IiLCJwYXR0ZXJuTGl0ZXJhbCIsInBhdHRlcm5EZXNjcmlwdGlvbiIsIkRFRkFVTFRfV1NfVVJMIiwiREVGQVVMVF9IVFRQX1VSTCIsIldTX0VWRU5UUyIsIldTX1NUQVRFUyIsIldlYlNvY2tldEltYWdlIiwiY29tcG9uZW50VW5tb3VudCIsInNob3dWYWx1ZSIsIldlYlNvY2tldEV4YW1wbGUiLCJodHRwVXJsIiwiZmV0Y2hTdGF0dXMiLCJzb2NrZXQiLCJzb2NrZXRTdGF0ZSIsImxhc3RTb2NrZXRFdmVudCIsImxhc3RNZXNzYWdlIiwib3V0Z29pbmdNZXNzYWdlIiwiX2Nvbm5lY3QiLCJfb25Tb2NrZXRFdmVudCIsIl9kaXNjb25uZWN0IiwiX3NlbmRUZXh0IiwiX3NlbmRIdHRwIiwiX3NlbmRCaW5hcnkiLCJjYW5Db25uZWN0IiwiY2FuU2VuZCIsIm5vdGUiLCJtb25vc3BhY2UiLCJyb3VuZEtpbG8iLCJYSFJFeGFtcGxlRG93bmxvYWQiLCJkb3dubG9hZGluZyIsInJlc3BvbnNlTGVuZ3RoIiwicHJvZ3Jlc3NUb3RhbCIsInByb2dyZXNzTG9hZGVkIiwicmVhZHlzdGF0ZUhhbmRsZXIiLCJwcm9ncmVzc0hhbmRsZXIiLCJjYW5jZWxsZWQiLCJfZG93bmxvYWQiLCJyZWFkeXN0YXRlIiwicHJvZ3Jlc3NCYXJMYWJlbCIsIl90aGlzJHN0YXRlMiIsImNvbmZpZ1JvdyIsIkJJTkFSWV9UWVBFUyIsIkludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiU0FNUExFX1RFWFQiLCJYSFJFeGFtcGxlQmluYXJ5VXBsb2FkIiwiX3VwbG9hZCIsImhhbmRsZVBvc3RUZXN0U2VydmVyVXBsb2FkIiwiYXNCeXRlcyIsIlR5cGVkQXJyYXlDbGFzcyIsInVwbG9hZEJ1dHRvbiIsInVwbG9hZEJ1dHRvbkJveCIsInVwbG9hZEJ1dHRvbkxhYmVsIiwiWEhSRXhhbXBsZUZldGNoIiwic3VibWl0IiwiX3JlbmRlckhlYWRlcnMiLCJ0ZXh0T3V0cHV0IiwiWEhSRXhhbXBsZUhlYWRlcnMiLCJkb3dubG9hZGVkIiwiZG93bmxvYWQiLCJYSFJFeGFtcGxlT25UaW1lT3V0IiwibG9hZFRpbWVPdXRSZXF1ZXN0IiwiWEhSRXhhbXBsZUFib3J0Q29udHJvbGxlciIsIl9zdWJtaXQiLCJhYm9ydERlbGF5IiwiYWJvcnRDb250cm9sbGVyIiwiTWVtb3J5RXhhbXBsZSIsInNldE1lbW9yeUluZm8iLCJvbkdldE1lbW9yeUluZm8iLCJtZW1vcnkiLCJTdGFydHVwVGltaW5nRXhhbXBsZSIsInNldFN0YXJ0VXBUaW1pbmciLCJvbkdldFN0YXJ0dXBUaW1pbmciLCJyblN0YXJ0dXBUaW1pbmciLCJfQ29tcGF0aWJpbGl0eUFuaW1hdGVkUG9pbnRlck1vdmUiLCJfQ29tcGF0aWJpbGl0eU5hdGl2ZUdlc3R1cmVIYW5kbGluZyIsIl9NYW55UG9pbnRlcnNQcm9wZXJ0aWVzRXhhbXBsZSIsIl9Qb2ludGVyRXZlbnRBY2Nlc3NpYmlsaXR5IiwiX1BvaW50ZXJFdmVudEF0dHJpYnV0ZXNIb3ZlcmFibGVQb2ludGVycyIsIl9Qb2ludGVyRXZlbnRBdHRyaWJ1dGVzTm9Ib3ZlclBvaW50ZXJzIiwiX1BvaW50ZXJFdmVudENhcHR1cmVNb3VzZSIsIl9Qb2ludGVyRXZlbnRDbGlja1RvdWNoIiwiX1BvaW50ZXJFdmVudENsaWNrVG91Y2hIaWVyYXJjaHkiLCJfUG9pbnRlckV2ZW50Q2xpY2tUb3VjaEhpZXJhcmNoeVBvaW50ZXJFdmVudHMiLCJfUG9pbnRlckV2ZW50TGF5b3V0Q2hhbmdlU2hvdWxkRmlyZVBvaW50ZXJPdmVyIiwiX1BvaW50ZXJFdmVudFBvaW50ZXJDYW5jZWxUb3VjaCIsIl9Qb2ludGVyRXZlbnRQb2ludGVyTW92ZSIsIl9Qb2ludGVyRXZlbnRQb2ludGVyTW92ZUFjcm9zcyIsIl9Qb2ludGVyRXZlbnRQb2ludGVyTW92ZUJldHdlZW4iLCJfUG9pbnRlckV2ZW50UG9pbnRlck1vdmVFdmVudE9yZGVyIiwiX1BvaW50ZXJFdmVudFBvaW50ZXJNb3ZlT25DaG9yZGVkTW91c2VCdXR0b24iLCJfUG9pbnRlckV2ZW50UG9pbnRlck92ZXJPdXQiLCJfUG9pbnRlckV2ZW50UHJpbWFyeVRvdWNoUG9pbnRlciIsIl9XM0NQb2ludGVyRXZlbnRzRXZlbnRmdWxWaWV3IiwiQWJzb2x1dGVDaGlsZEV4YW1wbGUiLCJhYnNvbHV0ZUV4YW1wbGVDb250YWluZXIiLCJvblVwIiwib25Eb3duIiwib25FbnRlciIsIm9uTGVhdmUiLCJldmVudGZ1bFZpZXciLCJlbWl0QnlEZWZhdWx0IiwiYWJzb2x1dGVDaGlsZCIsIlJlbGF0aXZlQ2hpbGRFeGFtcGxlIiwib25PdmVyIiwib25PdXQiLCJyZWxhdGl2ZUNoaWxkIiwiUG9pbnRlckV2ZW50U2NhZmZvbGRpbmciLCJldmVudHNMb2ciLCJzZXRFdmVudHNMb2ciLCJldmVudFN0ciIsImN1cnJlbnRFdmVudHNMb2ciLCJDb21wYXRpYmlsaXR5QW5pbWF0ZWRQb2ludGVyTW92ZSIsIkNvbXBhdGliaWxpdHlOYXRpdmVHZXN0dXJlSGFuZGxpbmciLCJNYW55UG9pbnRlcnNQcm9wZXJ0aWVzRXhhbXBsZSIsIldJRFRIIiwiYW5pbWF0aW5nQm94IiwieENvb3JkIiwieUNvb3JkIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJsaWdoYmx1ZSIsIm9uQ2FuY2VsIiwiRXZlbnRmdWxWaWV3Iiwic2V0VGFnIiwib25MZWF2ZUNhcHR1cmUiLCJvbkVudGVyQ2FwdHVyZSIsIm9uRG93bkNhcHR1cmUiLCJvblVwQ2FwdHVyZSIsIm9uTW92ZUNhcHR1cmUiLCJvbk91dENhcHR1cmUiLCJvbk92ZXJDYXB0dXJlIiwib25DYW5jZWxDYXB0dXJlIiwib25Qb2ludGVyVXBDYXB0dXJlIiwib25Qb2ludGVyRG93bkNhcHR1cmUiLCJvblBvaW50ZXJMZWF2ZUNhcHR1cmUiLCJvblBvaW50ZXJFbnRlckNhcHR1cmUiLCJvblBvaW50ZXJNb3ZlQ2FwdHVyZSIsIm9uUG9pbnRlck91dENhcHR1cmUiLCJvblBvaW50ZXJPdmVyQ2FwdHVyZSIsIm9uUG9pbnRlckNhbmNlbENhcHR1cmUiLCJsaXN0ZW5pbmdUbyIsImxpc3RlbmVyTmFtZSIsImdldE1vZGlmaWVyc1RleHQiLCJtb2RpZmllcnMiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiX2V2dCRzY3JlZW5YIiwiX2V2dCRzY3JlZW5ZIiwidG9QcmVjaXNpb24iLCJzY3JlZW5YIiwicHJlc3N1cmUiLCJldmVudHNUb1RyYWNrIiwiUG9pbnRlckV2ZW50QWNjZXNzaWJpbGl0eSIsImV2ZW50c1NlZW4iLCJzZXRFdmVudHNTZWVuIiwib25BbnlFdmVudCIsIm9jY3VycmVuY2UiLCJldnMiLCJ0b3BMZXZlbCIsImNsaWNrYWJsZUNvbnRhaW5lciIsIkV2ZW50VHJhY2tlciIsInRhcmdldFBhcmVudCIsInRhcmdldFByZXNzYWJsZSIsIlNLSVBQRURfUFJPUFMiLCJjaGVja19Qb2ludGVyRXZlbnQiLCJoYXJuZXNzIiwiZXhwZWN0ZWRQb2ludGVyVHlwZSIsInRlc3ROYW1lUHJlZml4IiwicG9pbnRlclRlc3ROYW1lIiwicG9pbnRlclR5cGUiLCJhc3NlcnRfZXF1YWxzIiwiaWRsX3R5cGVfY2hlY2siLCJsb25nIiwiZmxvYXQiLCJib29sZWFuIiwic2tpcCIsImFzc2VydF90cnVlIiwiYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCIsImFzc2VydF9sZXNzX3RoYW5fZXF1YWwiLCJ0aWx0WCIsInRpbHRZIiwiaXNQcmltYXJ5IiwidXNlVGVzdEV2ZW50SGFuZGxlciIsImV2ZW50UHJvcHMiLCJoYW5kbGVyRmFjdG9yeSIsImV2ZW50UHJvcE5hbWUiLCJta0V2ZW50IiwiZXZlbnRzUmVmIiwiaGFuZGxlclByb3BzIiwiX1JOVGVzdGVyUGxhdGZvcm1UZXN0IiwiZXZlbnRMaXN0IiwiUG9pbnRlckV2ZW50QXR0cmlidXRlc0hvdmVyYWJsZVBvaW50ZXJzVGVzdENhc2UiLCJkZXRlY3RlZF9wb2ludGVydHlwZXNSZWYiLCJkZXRlY3RlZF9ldmVudFR5cGVzUmVmIiwiZXhwZWN0ZWRQb2ludGVySWRSZWYiLCJzcXVhcmUxVmlzaWJsZSIsInNldFNxdWFyZTFWaXNpYmxlIiwic3F1YXJlMlZpc2libGUiLCJzZXRTcXVhcmUyVmlzaWJsZSIsImNoZWNrUG9pbnRlckV2ZW50QXR0cmlidXRlcyIsInRhcmdldExheW91dCIsImRldGVjdGVkX3BvaW50ZXJ0eXBlcyIsImRldGVjdGVkX2V2ZW50VHlwZXMiLCJleHBlY3RlZFBvaW50ZXJJZCIsImV4cGVjdGVkRXZlbnRUeXBlIiwic3F1YXJlMVJlZiIsInNxdWFyZTFIYW5kbGVycyIsInNxdWFyZTFFbGVtIiwic3F1YXJlMlJlZiIsInNxdWFyZTJIYW5kbGVycyIsInNxdWFyZTJFbGVtIiwic3F1YXJlQ29udGFpbmVyIiwic3F1YXJlMSIsInNxdWFyZTIiLCJQb2ludGVyRXZlbnRBdHRyaWJ1dGVzSG92ZXJhYmxlUG9pbnRlcnMiLCJpbnN0cnVjdGlvbnMiLCJfUk5UZXN0ZXJQbGF0Zm9ybVRlc3RJbnN0cnVjdGlvbnMiLCJfUk5UZXN0ZXJQbGF0Zm9ybVRlc3RSZXN1bHRWaWV3IiwiX3VzZVBsYXRmb3JtVGVzdEhhcm5lc3MiLCJSTlRlc3RlclBsYXRmb3JtVGVzdCIsIlVuZGVyVGVzdENvbXBvbmVudCIsIl91c2VQbGF0Zm9ybVRlc3RIYXJuZSIsInVzZVBsYXRmb3JtVGVzdEhhcm5lc3MiLCJudW1QZW5kaW5nIiwicmVzdWx0cyIsInRlc3RLZXkiLCJ0ZXN0Y2FzZUNvbnRhaW5lciIsIlJOVGVzdGVyUGxhdGZvcm1UZXN0SW5zdHJ1Y3Rpb25zIiwiaW5zdHJ1Y3Rpb24iLCJpbnN0cnVjdGlvblRleHQiLCJfUk5UZXN0ZXJQbGF0Zm9ybVRlc3RNaW5pbWl6ZWRSZXN1bHRWaWV3IiwiX1JOVGVzdGVyUGxhdGZvcm1UZXN0UmVzdWx0c1RleHQiLCJESVNQTEFZX1NUQVRVU19NQVBQSU5HIiwiUEFTUyIsIkZBSUwiLCJTS0lQUEVEIiwiRmlsdGVyTW9kYWxCdXR0b24iLCJmaWx0ZXJGYWlsIiwic2V0RmlsdGVyRmFpbCIsInBlbmRpbmdGaWx0ZXJUZXh0Iiwic2V0UGVuZGluZ0ZpbHRlclRleHQiLCJvbkZpbHRlclN1Ym1pdCIsIm9uRmlsdGVyQ2FuY2VsIiwib25GaWx0ZXJGYWlsU3RhdHVzIiwib25QZW5kaW5nVGV4dENoYW5nZSIsImZpbHRlck1vZGFsUm9vdCIsImZpbHRlck1vZGFsS2V5Ym9hcmRBdm9pZGluZ1Jvb3QiLCJmaWx0ZXJNb2RhbENvbnRhaW5lciIsImZpbHRlck1vZGFsQ29udGVudENvbnRhaW5lciIsImZpbHRlck1vZGFsUHJvbXB0Q29udGFpbmVyIiwiZmlsdGVyTW9kYWxQcm9tcHRUZXh0IiwiZmlsdGVyTW9kYWxQZW5kaW5nVGV4dElucHV0IiwiZmlsdGVyTW9kYWxBY3Rpb25zQ29udGFpbmVyIiwiVGFibGVIZWFkZXIiLCJ0YWJsZUhlYWRlckNvbHVtbiIsInRhYmxlUmVzdWx0Q29sdW1uIiwidGFibGVIZWFkZXIiLCJ0YWJsZVRlc3ROYW1lQ29sdW1uIiwidGFibGVNZXNzYWdlQ29sdW1uIiwiVGFibGVSb3ciLCJ0ZXN0UmVzdWx0IiwiU1RBVFVTX1RFWFRfU1RZTEVfTUFQUElORyIsImFzc2VydGlvbnMiLCJhc3NlcnRpb24iLCJhc3NlcnRpb25JZHgiLCJwYXNzaW5nIiwiZmFpbHVyZU1lc3NhZ2UiLCJyZW5kZXJUYWJsZVJvdyIsIlJOVGVzdGVyUGxhdGZvcm1UZXN0UmVzdWx0VmlldyIsImZpbHRlckZhaWxTdGF0dXMiLCJzZXRGaWx0ZXJGYWlsU3RhdHVzIiwiZmlsdGVyZWRSZXN1bHRzIiwic3RhdHVzRmlsdGVyZWQiLCJudW1QYXNzIiwibnVtRmFpbCIsIm51bUVycm9yIiwibnVtU2tpcHBlZCIsInJlc3VsdHNFeHBhbmRlZCIsInNldFJlc3VsdHNFeHBhbmRlZCIsImhhbmRsZVJlc2V0IiwiaGFuZGxlTWluaW1pemVkUHJlc3MiLCJoYW5kbGVNYXhpbWl6ZWRQcmVzcyIsImZpbHRlcmVkTm90aWNlIiwicmVzdWx0c0hlYWRlciIsInN1bW1hcnlDb250YWluZXIiLCJhY3Rpb25zQ29udGFpbmVyIiwiYnV0dG9uU3BhY2VyIiwiY2xvc2VCdXR0b25JY29uIiwiZmFpbFRleHQiLCJmaWx0ZXJNb2RhbEFjdGlvbkJ1dHRvbiIsInBhc3NUZXh0IiwicGVuZGluZ1RleHQiLCJza2lwcGVkVGV4dCIsIlJOVGVzdGVyUGxhdGZvcm1UZXN0TWluaW1pemVkUmVzdWx0VmlldyIsInN0YXRzQ29udGFpbmVyIiwiY2FyZXQiLCJSTlRlc3RlclBsYXRmb3JtVGVzdFJlc3VsdHNUZXh0IiwiZGlkQWxsQXNzZXJ0aW9uc1Bhc3MiLCJoYXNGYWlsaW5nQXNzZXJ0aW9uIiwiY29uc3RydWN0QXN5bmNUZXN0SG9vayIsImFkZFRlc3RSZXN1bHQiLCJ1cGRhdGVBc3luY1Rlc3RTdGF0dXNlcyIsInJ1blRlc3RDYXNlIiwidGltZW91dE1zIiwiYXNzZXJ0aW9uc1JlZiIsInRpbWVvdXRJRFJlZiIsInRpbWVvdXRIYW5kbGVyIiwiY29tcGxldGlvbkhhbmRsZXIiLCJzdGVwSGFuZGxlciIsInRlc3RDYXNlIiwiX2Fzc2VydGlvbnNSZWYkY3VycmVuIiwic3RlcEFzc2VydGlvbnMiLCJ1cGRhdGVUZXN0UmVzdWx0cyIsInJlc3VsdFF1ZXVlUmVmIiwic2NoZWR1bGVyVGltZW91dElkUmVmIiwiY29tbWl0UmVzdWx0cyIsInF1ZXVlZFJlc3VsdHMiLCJzY2hlZHVsZVJlc3VsdHNDb21taXQiLCJzY2hlZHVsZXJUaW1lb3V0SWQiLCJuZXdSZXN1bHQiLCJ0ZXN0RWxlbWVudEtleSIsInNldFRlc3RFbGVtZW50S2V5IiwiYXN5bmNUZXN0U3RhdHVzZXMiLCJhc3NlcnRpb25SZXN1bHRzIiwiYmFzZUFzc2VydCIsImFzc2VydGlvbk5hbWUiLCJ0ZXN0Q29uZGl0aW9uUmVzdWx0IiwiY29uZCIsImFzc2VydF9ub3RfZXF1YWxzIiwidGVzdEZ1bmN0aW9uIiwiX3JlZiRza2lwIiwiYXN5bmNUZXN0SG9vayIsIm51bVBlbmRpbmdBc3luY1Rlc3RzIiwiYXN5bmNUZXN0TmFtZSIsImFzeW5jVGVzdFN0YXR1cyIsInVzZUFzeW5jVGVzdCIsIlBvaW50ZXJFdmVudEF0dHJpYnV0ZXNOb0hvdmVyUG9pbnRlcnNUZXN0Q2FzZSIsIlBvaW50ZXJFdmVudEF0dHJpYnV0ZXNOb0hvdmVyUG9pbnRlcnMiLCJQb2ludGVyRXZlbnRDYXB0dXJlTW91c2VUZXN0Q2FzZSIsInRhcmdldDBSZWYiLCJ0YXJnZXQxUmVmIiwiaXNQb2ludGVyQ2FwdHVyZVJlZiIsInBvaW50ZXJtb3ZlTm9DYXB0dXJlR290MFJlZiIsInBvaW50ZXJtb3ZlQ2FwdHVyZUdvdDBSZWYiLCJwb2ludGVybW92ZU5vQ2FwdHVyZUdvdDFSZWYiLCJvd25FdmVudEZvclRoZUNhcHR1cmVkVGFyZ2V0R290UmVmIiwidGVzdEdvdFBvaW50ZXJDYXB0dXJlIiwidGVzdExvc3RQb2ludGVyQ2FwdHVyZSIsImhhbmRsZUNhcHR1cmVCdXR0b25Eb3duIiwidGFyZ2V0MCIsImhhbmRsZVRhcmdldDBHb3RQb2ludGVyQ2FwdHVyZSIsImhhbmRsZVRhcmdldDBMb3N0UG9pbnRlckNhcHR1cmUiLCJ0ZXN0UG9pbnRlck1vdmUwIiwidGVzdFBvaW50ZXJNb3ZlMSIsImhhbmRsZVRhcmdldDBQb2ludGVyTW92ZSIsIl9ldnQkbmF0aXZlRXZlbnQiLCJfdGFyZ2V0MCRnZXRCb3VuZGluZ0MiLCJyZWxhdGVkVGFyZ2V0IiwiaGFuZGxlVGFyZ2V0MVBvaW50ZXJNb3ZlIiwidGFyZ2V0MSIsImNhcHR1cmVCdXR0b24iLCJQb2ludGVyRXZlbnRDYXB0dXJlTW91c2UiLCJjaGVja0NsaWNrRXZlbnRQcm9wZXJ0aWVzIiwidGFuZ2VudGlhbFByZXNzdXJlIiwidHdpc3QiLCJQb2ludGVyRXZlbnRDbGlja1RvdWNoVGVzdENhc2UiLCJoYXNTZWVuUG9pbnRlckRvd24iLCJoYXNTZWVuUG9pbnRlclVwIiwiaGFzU2VlbkNsaWNrIiwidGVzdFBvaW50ZXJDbGljayIsImhhbmRsZVBvaW50ZXJEb3duIiwiaGFuZGxlUG9pbnRlclVwIiwiUG9pbnRlckV2ZW50Q2xpY2tUb3VjaCIsIlBvaW50ZXJFdmVudENsaWNrVG91Y2hIaWVyYXJjaHlUZXN0Q2FzZSIsImV2ZW50c0luT3JkZXIiLCJjaGVja1Jlc3VsdHMiLCJldmVudHNSZWNlaXZlZCIsImNoaWxkVG9QYXJlbnRFdmVudHMiLCJwYXJlbnRUb0NoaWxkRXZlbnRzIiwiY2hpbGRPbmx5RXZlbnRzIiwiUG9pbnRlckV2ZW50Q2xpY2tUb3VjaEhpZXJhcmNoeSIsIlBvaW50ZXJFdmVudEJveFBhcmVudENoaWxkIiwicGFyZW50SWQiLCJjaGlsZElkIiwicGFyZW50U3R5bGVPdmVycmlkZSIsImNoaWxkU3R5bGUiLCJQb2ludGVyRXZlbnRDbGlja1RvdWNoSGllcmFyY2h5UG9pbnRlckV2ZW50c1Rlc3RDYXNlIiwiYm94T25seUV2ZW50cyIsImJveE5vbmVFdmVudHMiLCJhdXRvRXZlbnRzIiwicGFyZW50Q29udGFpbmVyIiwidGFyZ2V0Qm94T25seSIsInRhcmdldEJveE5vbmUiLCJ0YXJnZXRBdXRvIiwidGFyZ2V0Tm9uZSIsIlBvaW50ZXJFdmVudENsaWNrVG91Y2hIaWVyYXJjaHlQb2ludGVyRXZlbnRzIiwic3BhY2VyIiwiUG9pbnRlckV2ZW50TGF5b3V0U2hvdWxkRmlyZVBvaW50ZXJPdmVyVGVzdENhc2UiLCJ0ZXN0TW91c2VPdmVyIiwic2hvd0JsdWUiLCJzZXRTaG93Qmx1ZSIsImV2ZW50TGlzdFJlZiIsImNoZWNrRXZlbnRTZXF1ZW5jZSIsInJlZENsaWNrSGFuZGxlciIsImNyZWF0ZUJsdWVIb3ZlckV2ZW50SGFuZGxlciIsImJsdWVFdmVudEhhbmRsZXJzIiwiUG9pbnRlckV2ZW50TGF5b3V0U2hvdWxkRmlyZVBvaW50ZXJPdmVyIiwiUG9pbnRlckV2ZW50UG9pbnRlckNhbmNlbFRvdWNoVGVzdENhc2UiLCJ0ZXN0UG9pbnRlckV2ZW50IiwicG9pbnRlckRvd25FdmVudFJlZiIsInBvaW50ZXJDYW5jZWxFdmVudFJlZiIsImhhbmRsZVBvaW50ZXJDYW5jZWwiLCJwb2ludGVyRG93bkV2ZW50IiwiaGFuZGxlUG9pbnRlck91dCIsInBvaW50ZXJDYW5jZWxFdmVudCIsImhhbmRsZVBvaW50ZXJMZWF2ZSIsInNjcm9sbENvbnRhaW5lciIsIlBvaXRuZXJFdmVudFBvaW50ZXJDYW5jZWxUb3VjaCIsIlBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlVGVzdENhc2UiLCJkZXRlY3RlZFBvaW50ZXJUeXBlc1JlZiIsInRlc3RQb2ludGVyTW92ZSIsIlBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlIiwiX1JOVGVzdGVyUGxhdGZvcm1UZXN0RXZlbnRSZWNvcmRlciIsImIxIiwiYzEiLCJyZWxldmFudEV2ZW50cyIsIm9wdGlvbmFsIiwidGFyZ2V0TmFtZXMiLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZUFjcm9zc1Rlc3RDYXNlIiwicG9pbnRlcm1vdmVfYWNyb3NzIiwiUk5UZXN0ZXJQbGF0Zm9ybVRlc3RFdmVudFJlY29yZGVyIiwibWVyZ2VFdmVudFR5cGVzIiwiZXZlbnRSZWNvcmRlciIsImV2ZW50SGFuZGxlciIsImNoZWNrUmVjb3JkcyIsInVzZVJlY29yZGVyVGVzdEV2ZW50SGFuZGxlcnMiLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZUFjcm9zcyIsImFsbFJlY29yZHMiLCJyYXdPcmRlciIsImV2ZW50c0luU2NvcGUiLCJyZWNvcmRpbmciLCJtZXJnZVR5cGVzVHJ1dGhNYXAiLCJfY3JlYXRlRXZlbnRSZWNvcmQiLCJyYXdFdmVudCIsImNocm9ub2xvZ2ljYWxPcmRlciIsInNlcXVlbnRpYWxPY2N1cnJlbmNlcyIsIm5lc3RlZEV2ZW50cyIsIl9yZWNvcmRFdmVudCIsInRhcmdldE5hbWUiLCJyZWNvcmRMaXN0IiwibmV3UmVjb3JkTGlzdCIsIl9nZW5lcmF0ZVJlY29yZGVkRXZlbnRIYW5kbGVyV2l0aENhbGxiYWNrIiwicmVjb3JkZWRFdmVudEhhbmRsZXIiLCJldmVudExpc3RlbmVyUHJvcHMiLCJnZXRSZWNvcmRzIiwiUG9pbnRlckV2ZW50UG9pbnRlck1vdmVCZXR3ZWVuVGVzdENhc2UiLCJwb2ludGVybW92ZV9iZXR3ZWVuIiwiUG9pbnRlckV2ZW50UG9pbnRlck1vdmVCZXR3ZWVuIiwidGVzdGFyZWEiLCJQb2ludGVyRXZlbnRQb2ludGVyTW92ZUV2ZW50T3JkZXJUZXN0Q2FzZSIsInBvaW50ZXJfdGVzdCIsInN0YXJ0TW92ZWQiLCJzZXRTdGFydE1vdmVkIiwiZW5kTW92ZWQiLCJzZXRFbmRNb3ZlZCIsIlBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlRXZlbnRPcmRlciIsIlBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlT25DaG9yZGVkTW91c2VCdXR0b25UZXN0Q2FzZSIsInRlc3RfcG9pbnRlcm1vdmUiLCJzdGVwUmVmIiwiZmlyc3RCdXR0b25SZWYiLCJoYW5kbGVQb2ludGVyTW92ZSIsIlBvaW50ZXJFdmVudFBvaW50ZXJNb3ZlT25DaG9yZGVkTW91c2VCdXR0b24iLCJnZXROYXRpdmVUYWdGcm9tSG9zdEVsZW1lbnQiLCJyZWxlYXNlZCIsIlBvaW50ZXJFdmVudFBvaW50ZXJPdmVyT3V0VGVzdENhc2UiLCJpbm5lck5hdGl2ZVRhZ1JlZiIsIm91dGVyTmF0aXZlVGFnUmVmIiwiaGFuZGxlSW5uZXJSZWZDYWxsYmFjayIsImhhbmRsZU91dGVyUmVmQ2FsbGJhY2siLCJpbm5lck92ZXJSZWYiLCJpbm5lck91dFJlZiIsIm91dGVyT3duT3ZlclJlZiIsIm91dGVyT3duT3V0UmVmIiwib3V0ZXJPdmVyUmVmIiwib3V0ZXJPdXRSZWYiLCJpbm5lclBvaW50ZXJPdmVySGFuZGxlciIsImlubmVyUG9pbnRlck91dEhhbmRsZXIiLCJvdXRlclBvaW50ZXJPdmVySGFuZGxlciIsImV2ZW50RWxlbVRhZyIsIm91dGVyUG9pbnRlck91dEhhbmRsZXIiLCJQb2ludGVyRXZlbnRQb2ludGVyT3Zlck91dCIsImxpc3RlbmVkRXZlbnRzIiwiZXhwZWN0ZWRPcmRlciIsIlBvaW50ZXJFdmVudFByaW1hcnlUb3VjaFBvaW50ZXJUZXN0Q2FzZSIsImRldGVjdGVkX2V2ZW50c1JlZiIsImhhbmRsZUluY29taW5nUG9pbnRlckV2ZW50IiwiYm94TGFiZWwiLCJkZXRlY3RlZF9ldmVudHMiLCJwb2ludGVyRXZlbnRJZGVudGlmaWVyIiwiX2V4cGVjdGVkT3JkZXIkT2JqZWN0IiwiZXhwZWN0ZWRCb3hMYWJlbCIsImV4cGVjdGVkSXNQcmltYXJ5IiwiY3JlYXRlQm94SGFuZGxlciIsImhhbmRsZUJveEFFdmVudCIsImhhbmRsZUJveEJFdmVudCIsImhhbmRsZUJveENFdmVudCIsImJveEFIYW5kbGVycyIsImJveEJIYW5kbGVycyIsImJveENIYW5kbGVycyIsIlBvaW50ZXJFdmVudFByaW1hcnlUb3VjaFBvaW50ZXIiLCJnZXRVcGRhdGVkUmVjZW50bHlVc2VkIiwidXBkYXRlZFJlY2VudGx5VXNlZCIsImV4aXN0aW5nS2V5cyIsIl9hY3Rpb24kZGF0YSIsIl9hY3Rpb24kZGF0YSRrZXkiLCJfYWN0aW9uJGRhdGEkdGl0bGUiLCJfYWN0aW9uJGRhdGEkZXhhbXBsZUsiLCJfYWN0aW9uJGRhdGEkZXhhbXBsZVQiLCJfYWN0aW9uJGRhdGEkc2NyZWVuIiwiaGFkRGVlcExpbmsiLCJBUElTIiwiZmlsdGVyRW1wdHlTZWN0aW9ucyIsInNlY3Rpb25LZXlzIiwiX3Rlc3RMaXN0JGNvbXBvbmVudHMiLCJfdGVzdExpc3QkYXBpcyIsIl9leGFtcGxlc0xpc3QiLCJjb21wb25lbnRMaXN0IiwiY29tcG9uZW50RXhhbXBsZSIsInJlY2VudGx5VXNlZENvbXBvbmVudHMiLCJyZWNlbnRDb21wb25lbnRLZXkiLCJhcGlzTGlzdCIsImFwaUV4YW1wbGUiLCJyZWNlbnRseVVzZWRBUElzIiwicmVjZW50QVBJS2V5IiwiU2V0UHJvcGVydGllc0V4YW1wbGVBcHAiLCJ3cmFwcGVyU3R5bGUiLCJSb290Vmlld1NpemVGbGV4aWJpbGl0eUV4YW1wbGVBcHAiLCJfb25QcmVzc0J1dHRvbiIsImJpZ0NvbnRhaW5lciIsInNtYWxsQ29udGFpbmVyIiwiY2VudGVyIiwid2hpdGVUZXh0Il0sIm1hcHBpbmdzIjoiOztFQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUEsWUFBWTs7RUFFWjtFQUNBO0VBQ0E7RUFDQTtFQUNBQSxNQUFNLENBQUNDLEdBQUcsR0FBR0MsWUFBWTtFQUN6QkYsTUFBTSxDQUFFLEdBQUVHLHVCQUF3QixLQUFJLENBQUMsR0FBR0MsTUFBTTtFQUNoREosTUFBTSxDQUFDSyxHQUFHLEdBQUdDLEtBQUs7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QUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQzNCLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQzNCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQzVCLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQzVCLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDL0IsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0IsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDNUIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDN0IsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDL0IsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDOUIsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0IsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0IsZUFBZSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDOUIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDM0IsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDMUIsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDNUIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDMUIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDMUIsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDNUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUIsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDOUIsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDNUIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDeEIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDNUIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDN0IsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdkIsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEIsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDN0IsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdkIsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDM0IsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDMUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUs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QUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM3QixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUN0QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN2QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN2QixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM3QixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUN2QixlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMvQixLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1QixXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMzQixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1QixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN6QixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUM1QixVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUN6QixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMzQixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2QixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN6QixTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMxQixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMzQixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1QixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN2QixhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1QixXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMzQixLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN0QixNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyQixTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMxQixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2QixXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMzQixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN6QixPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN4QixPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN4QixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM3QixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2QixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVB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","startColumn":0,"startLine":0,"url":"http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment"}} +(node:32770) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead. +(Use `node-darwin-arm64 --trace-deprecation ...` to show where the warning was created) +Tue, 20 Feb 2024 12:31:14 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:14 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:15 GMT Metro:InspectorProxy (Debugger) -> (Proxy) (Device): {"id":30,"method":"Debugger.setBlackboxedRanges","params":{"scriptId":"3","positions":[{"lineNumber":0,"columnNumber":0},{"lineNumber":782,"columnNumber":2},{"lineNumber":1463,"columnNumber":2},{"lineNumber":1594,"columnNumber":2},{"lineNumber":1883,"columnNumber":2},{"lineNumber":5853,"columnNumber":2},{"lineNumber":6854,"columnNumber":2},{"lineNumber":6943,"columnNumber":2},{"lineNumber":7689,"columnNumber":2},{"lineNumber":7728,"columnNumber":2},{"lineNumber":7848,"columnNumber":2},{"lineNumber":7865,"columnNumber":2},{"lineNumber":8207,"columnNumber":2},{"lineNumber":8257,"columnNumber":2},{"lineNumber":31122,"columnNumber":2},{"lineNumber":31189,"columnNumber":2},{"lineNumber":31236,"columnNumber":2},{"lineNumber":31355,"columnNumber":2},{"lineNumber":32423,"columnNumber":2},{"lineNumber":32457,"columnNumber":2},{"lineNumber":32580,"columnNumber":2},{"lineNumber":33044,"columnNumber":2},{"lineNumber":33422,"columnNumber":2},{"lineNumber":33438,"columnNumber":2},{"lineNumber":33612,"columnNumber":2},{"lineNumber":36293,"columnNumber":2},{"lineNumber":36367,"columnNumber":2},{"lineNumber":36836,"columnNumber":2},{"lineNumber":36913,"columnNumber":2},{"lineNumber":37584,"columnNumber":2},{"lineNumber":38797,"columnNumber":2},{"lineNumber":39596,"columnNumber":2},{"lineNumber":40375,"columnNumber":2},{"lineNumber":40481,"columnNumber":2},{"lineNumber":40996,"columnNumber":2},{"lineNumber":41029,"columnNumber":2},{"lineNumber":41743,"columnNumber":2},{"lineNumber":41899,"columnNumber":2},{"lineNumber":43738,"columnNumber":2},{"lineNumber":44291,"columnNumber":2},{"lineNumber":44713,"columnNumber":2},{"lineNumber":60399,"columnNumber":2},{"lineNumber":61009,"columnNumber":2},{"lineNumber":61032,"columnNumber":2},{"lineNumber":61639,"columnNumber":2},{"lineNumber":62243,"columnNumber":2},{"lineNumber":63976,"columnNumber":2},{"lineNumber":63993,"columnNumber":2},{"lineNumber":83323,"columnNumber":2},{"lineNumber":83375,"columnNumber":2},{"lineNumber":109053,"columnNumber":2},{"lineNumber":109771,"columnNumber":2},{"lineNumber":118114,"columnNumber":2},{"lineNumber":118766,"columnNumber":2},{"lineNumber":169366,"columnNumber":2},{"lineNumber":169480,"columnNumber":2}]}} +Tue, 20 Feb 2024 12:31:15 GMT Metro:InspectorProxy (Debugger) (Proxy) -> (Device): {"event":"wrappedEvent","payload":{"pageId":"5","wrappedEvent":"{\"id\":30,\"method\":\"Debugger.setBlackboxedRanges\",\"params\":{\"scriptId\":\"3\",\"positions\":[{\"lineNumber\":0,\"columnNumber\":0},{\"lineNumber\":782,\"columnNumber\":2},{\"lineNumber\":1463,\"columnNumber\":2},{\"lineNumber\":1594,\"columnNumber\":2},{\"lineNumber\":1883,\"columnNumber\":2},{\"lineNumber\":5853,\"columnNumber\":2},{\"lineNumber\":6854,\"columnNumber\":2},{\"lineNumber\":6943,\"columnNumber\":2},{\"lineNumber\":7689,\"columnNumber\":2},{\"lineNumber\":7728,\"columnNumber\":2},{\"lineNumber\":7848,\"columnNumber\":2},{\"lineNumber\":7865,\"columnNumber\":2},{\"lineNumber\":8207,\"columnNumber\":2},{\"lineNumber\":8257,\"columnNumber\":2},{\"lineNumber\":31122,\"columnNumber\":2},{\"lineNumber\":31189,\"columnNumber\":2},{\"lineNumber\":31236,\"columnNumber\":2},{\"lineNumber\":31355,\"columnNumber\":2},{\"lineNumber\":32423,\"columnNumber\":2},{\"lineNumber\":32457,\"columnNumber\":2},{\"lineNumber\":32580,\"columnNumber\":2},{\"lineNumber\":33044,\"columnNumber\":2},{\"lineNumber\":33422,\"columnNumber\":2},{\"lineNumber\":33438,\"columnNumber\":2},{\"lineNumber\":33612,\"columnNumber\":2},{\"lineNumber\":36293,\"columnNumber\":2},{\"lineNumber\":36367,\"columnNumber\":2},{\"lineNumber\":36836,\"columnNumber\":2},{\"lineNumber\":36913,\"columnNumber\":2},{\"lineNumber\":37584,\"columnNumber\":2},{\"lineNumber\":38797,\"columnNumber\":2},{\"lineNumber\":39596,\"columnNumber\":2},{\"lineNumber\":40375,\"columnNumber\":2},{\"lineNumber\":40481,\"columnNumber\":2},{\"lineNumber\":40996,\"columnNumber\":2},{\"lineNumber\":41029,\"columnNumber\":2},{\"lineNumber\":41743,\"columnNumber\":2},{\"lineNumber\":41899,\"columnNumber\":2},{\"lineNumber\":43738,\"columnNumber\":2},{\"lineNumber\":44291,\"columnNumber\":2},{\"lineNumber\":44713,\"columnNumber\":2},{\"lineNumber\":60399,\"columnNumber\":2},{\"lineNumber\":61009,\"columnNumber\":2},{\"lineNumber\":61032,\"columnNumber\":2},{\"lineNumber\":61639,\"columnNumber\":2},{\"lineNumber\":62243,\"columnNumber\":2},{\"lineNumber\":63976,\"columnNumber\":2},{\"lineNumber\":63993,\"columnNumber\":2},{\"lineNumber\":83323,\"columnNumber\":2},{\"lineNumber\":83375,\"columnNumber\":2},{\"lineNumber\":109053,\"columnNumber\":2},{\"lineNumber\":109771,\"columnNumber\":2},{\"lineNumber\":118114,\"columnNumber\":2},{\"lineNumber\":118766,\"columnNumber\":2},{\"lineNumber\":169366,\"columnNumber\":2},{\"lineNumber\":169480,\"columnNumber\":2}]}}"}} +Tue, 20 Feb 2024 12:31:15 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"error\":{\"code\":-32601,\"message\":\"Debugger.setBlackboxedRanges wasn't found\"},\"id\":30}","pageId":"5"}} +Tue, 20 Feb 2024 12:31:15 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"error":{"code":-32601,"message":"Debugger.setBlackboxedRanges wasn't found"},"id":30} +Tue, 20 Feb 2024 12:31:15 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:15 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:17 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:17 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:22 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:22 GMT Metro:WatchmanWatcher Handling change to: stdout (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:24 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:24 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:25 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:26 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:26 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:26 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:26 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:31:40 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:31:40 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:10 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:10 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:32 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:32 GMT Metro:WatchmanWatcher Handling change to: js/examples/ActivityIndicator/ActivityIndicatorExample.js (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:32 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:32 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:32 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:32:36 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:36 GMT Metro:WatchmanWatcher Handling change to: js/examples/ActivityIndicator/ActivityIndicatorExample.js (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:36 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:37 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:32:37 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:37 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:32:37 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endColumn\":0,\"endLine\":0,\"executionContextId\":1,\"hash\":\"\",\"scriptId\":\"4\",\"sourceMapURL\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\",\"startColumn\":0,\"startLine\":0,\"url\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.bundle\\\/\\\/&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:32:37 GMT Metro:Server Handling request: http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true +Tue, 20 Feb 2024 12:32:37 GMT Metro:DeltaCalculator Calculating delta (reset: true, shallow: true) +Tue, 20 Feb 2024 12:32:37 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:32:37 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endColumn\":0,\"endLine\":0,\"executionContextId\":1,\"hash\":\"\",\"scriptId\":\"5\",\"sourceMapURL\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\",\"startColumn\":0,\"startLine\":0,\"url\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.bundle\\\/\\\/&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:32:37 GMT Metro:Server Handling request: http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true +Tue, 20 Feb 2024 12:32:37 GMT Metro:DeltaCalculator Calculating delta (reset: true, shallow: false) +Tue, 20 Feb 2024 12:32:37 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:37 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Debugger.scriptParsed","params":{"endColumn":0,"endLine":0,"executionContextId":1,"hash":"","scriptId":"4","sourceMapURL":"data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BY3Rpdml0eUluZGljYXRvci9BY3Rpdml0eUluZGljYXRvckV4YW1wbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFN0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yKCkge1xuICBjb25zdCB0aW1lciA9IHVzZVJlZjx2b2lkIHwgVGltZW91dElEPigpO1xuXG4gIFxuXG4gIGNvbnN0IFthbmltYXRpbmcsIHNldEFuaW1hdGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCBzZXRUb2dnbGVUaW1lb3V0OiAoKSA9PiB2b2lkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldEFuaW1hdGluZyhjdXJyZW50U3RhdGUgPT4gIWN1cnJlbnRTdGF0ZSk7XG4gICAgICBzZXRUb2dnbGVUaW1lb3V0KCk7XG4gICAgfSwgMjAwMCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFRvZ2dsZVRpbWVvdXQoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW3RpbWVyLCBzZXRUb2dnbGVUaW1lb3V0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QWN0aXZpdHlJbmRpY2F0b3JcbiAgICAgIGFuaW1hdGluZz17YW5pbWF0aW5nfVxuICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7aGVpZ2h0OiA4MH1dfVxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNlbnRlcmluZzoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiA4LFxuICB9LFxuICBncmF5OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2NjY2NjYycsXG4gIH0sXG4gIGhvcml6b250YWw6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gICAgcGFkZGluZzogOCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmRpc3BsYXlOYW1lID0gKHVuZGVmaW5lZDogP3N0cmluZyk7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZnJhbWV3b3JrID0gJ1JlYWN0JztcbmV4cG9ydHMudGl0bGUgPSAnQWN0aXZpdHlJbmRpY2F0b3InO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWN0aXZpdHlpbmRpY2F0b3InO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdBbmltYXRlZCBsb2FkaW5nIGluZGljYXRvcnMuJztcblxuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnRGVmYXVsdCAoc21hbGwsIHdoaXRlKScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgY29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgICAgdGVzdElEPVwiZGVmYXVsdF9hY3Rpdml0eV9pbmRpY2F0b3JcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIldhaXQgZm9yIGNvbnRlbnQgdG8gbG9hZCFcIlxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdHcmF5JyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nXX0gLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ3VzdG9tIGNvbG9ycycsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDAwMGZmXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEwMGFhXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEzMzAwXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDBhYTAwXCIgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMYXJnZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cIndoaXRlXCJcbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTGFyZ2UsIGN1c3RvbSBjb2xvcnMnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwMDBmZlwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMDBhYVwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMzMwMFwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwYWEwMFwiIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhcnQvc3RvcCcsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxUb2dnbGVBbmltYXRpbmdBY3Rpdml0eUluZGljYXRvciAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXN0b20gc2l6ZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7dHJhbnNmb3JtOiBbe3NjYWxlOiAxLjV9XX1dfVxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHRpdGxlOiAnQ3VzdG9tIHNpemUgKHNpemU6IDc1KScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxBY3Rpdml0eUluZGljYXRvciBzdHlsZT17c3R5bGVzLmNlbnRlcmluZ30gc2l6ZT17NzV9IC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIl0sInhfZmFjZWJvb2tfc291cmNlcyI6W1t7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVG9nZ2xlQW5pbWF0aW5nQWN0aXZpdHlJbmRpY2F0b3IiLCJzZXRUb2dnbGVUaW1lb3V0Iiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwic2V0QW5pbWF0aW5nJGFyZ3VtZW50XzAiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTttRENPOytCQ0M7bUJDQyw2QkQ7S0RFO0dEQztZSUU7V0NHO0tERTtHSkM7Q0RTO0lPNEI7S1BTO0lPSTtLUE87SU9JO0tQUztJT0k7S1BRO0lPSTtLUFM7SU9JO0tQRTtJT0k7S1BPO0lPSztLUEUifV1dLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl8kJF9SRVFVSVJFIiwiX2RlcGVuZGVuY3lNYXAiLCJfcmVhY3ROYXRpdmUiLCJfanN4UnVudGltZSIsIl9qc3hGaWxlTmFtZSIsIl9zIiwiJFJlZnJlc2hTaWckIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIlRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yIiwidGltZXIiLCJ1c2VSZWYiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJhbmltYXRpbmciLCJzZXRBbmltYXRpbmciLCJzZXRUb2dnbGVUaW1lb3V0IiwidXNlQ2FsbGJhY2siLCJjdXJyZW50Iiwic2V0VGltZW91dCIsImN1cnJlbnRTdGF0ZSIsInVzZUVmZmVjdCIsImNsZWFyVGltZW91dCIsImpzeCIsIkFjdGl2aXR5SW5kaWNhdG9yIiwic3R5bGUiLCJzdHlsZXMiLCJjZW50ZXJpbmciLCJoZWlnaHQiLCJzaXplIiwiX2MiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwicGFkZGluZyIsImdyYXkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJob3Jpem9udGFsIiwiZmxleERpcmVjdGlvbiIsImV4cG9ydHMiLCJkaXNwbGF5TmFtZSIsInVuZGVmaW5lZCIsImNhdGVnb3J5IiwiZnJhbWV3b3JrIiwidGl0bGUiLCJkb2N1bWVudGF0aW9uVVJMIiwiZGVzY3JpcHRpb24iLCJleGFtcGxlcyIsInJlbmRlciIsImNvbG9yIiwidGVzdElEIiwiYWNjZXNzaWJpbGl0eUxhYmVsIiwianN4cyIsIlZpZXciLCJjaGlsZHJlbiIsInRyYW5zZm9ybSIsInNjYWxlIiwicGxhdGZvcm0iLCIkUmVmcmVzaFJlZyQiXSwibWFwcGluZ3MiOiI7OztFQVlB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","startColumn":0,"startLine":0,"url":"http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.bundle//&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true"}} +Tue, 20 Feb 2024 12:32:37 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Debugger.scriptParsed","params":{"endColumn":0,"endLine":0,"executionContextId":1,"hash":"","scriptId":"5","sourceMapURL":"data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BY3Rpdml0eUluZGljYXRvci9BY3Rpdml0eUluZGljYXRvckV4YW1wbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFN0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yKCkge1xuICBjb25zdCB0aW1lciA9IHVzZVJlZjx2b2lkIHwgVGltZW91dElEPigpO1xuXG4gIFxuXG4gIGNvbnN0IFthbmltYXRpbmcsIHNldEFuaW1hdGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCBzZXRUb2dnbGVUaW1lb3V0OiAoKSA9PiB2b2lkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldEFuaW1hdGluZyhjdXJyZW50U3RhdGUgPT4gIWN1cnJlbnRTdGF0ZSk7XG4gICAgICBzZXRUb2dnbGVUaW1lb3V0KCk7XG4gICAgfSwgMjAwMCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFRvZ2dsZVRpbWVvdXQoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW3RpbWVyLCBzZXRUb2dnbGVUaW1lb3V0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QWN0aXZpdHlJbmRpY2F0b3JcbiAgICAgIGFuaW1hdGluZz17YW5pbWF0aW5nfVxuICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7aGVpZ2h0OiA4MH1dfVxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNlbnRlcmluZzoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiA4LFxuICB9LFxuICBncmF5OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2NjY2NjYycsXG4gIH0sXG4gIGhvcml6b250YWw6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gICAgcGFkZGluZzogOCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmRpc3BsYXlOYW1lID0gKHVuZGVmaW5lZDogP3N0cmluZyk7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZnJhbWV3b3JrID0gJ1JlYWN0JztcbmV4cG9ydHMudGl0bGUgPSAnQWN0aXZpdHlJbmRpY2F0b3InO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWN0aXZpdHlpbmRpY2F0b3InO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdBbmltYXRlZCBsb2FkaW5nIGluZGljYXRvcnMuJztcblxuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnRGVmYXVsdCAoc21hbGwsIHdoaXRlKScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgY29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgICAgdGVzdElEPVwiZGVmYXVsdF9hY3Rpdml0eV9pbmRpY2F0b3JcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIldhaXQgZm9yIGNvbnRlbnQgdG8gbG9hZCFcIlxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdHcmF5JyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nXX0gLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ3VzdG9tIGNvbG9ycycsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDAwMGZmXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEwMGFhXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEzMzAwXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDBhYTAwXCIgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMYXJnZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cIndoaXRlXCJcbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTGFyZ2UsIGN1c3RvbSBjb2xvcnMnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwMDBmZlwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMDBhYVwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMzMwMFwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwYWEwMFwiIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhcnQvc3RvcCcsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxUb2dnbGVBbmltYXRpbmdBY3Rpdml0eUluZGljYXRvciAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXN0b20gc2l6ZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7dHJhbnNmb3JtOiBbe3NjYWxlOiAxLjV9XX1dfVxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHRpdGxlOiAnQ3VzdG9tIHNpemUgKHNpemU6IDc1KScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxBY3Rpdml0eUluZGljYXRvciBzdHlsZT17c3R5bGVzLmNlbnRlcmluZ30gc2l6ZT17NzV9IC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIl0sInhfZmFjZWJvb2tfc291cmNlcyI6W1t7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVG9nZ2xlQW5pbWF0aW5nQWN0aXZpdHlJbmRpY2F0b3IiLCJzZXRUb2dnbGVUaW1lb3V0Iiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwic2V0QW5pbWF0aW5nJGFyZ3VtZW50XzAiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTttRENPOytCQ0M7bUJDQyw2QkQ7S0RFO0dEQztZSUU7V0NHO0tERTtHSkM7Q0RTO0lPNEI7S1BTO0lPSTtLUE87SU9JO0tQUztJT0k7S1BRO0lPSTtLUFM7SU9JO0tQRTtJT0k7S1BPO0lPSztLUEUifV1dLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl8kJF9SRVFVSVJFIiwiX2RlcGVuZGVuY3lNYXAiLCJfcmVhY3ROYXRpdmUiLCJfanN4UnVudGltZSIsIl9qc3hGaWxlTmFtZSIsIl9zIiwiJFJlZnJlc2hTaWckIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIlRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yIiwidGltZXIiLCJ1c2VSZWYiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJhbmltYXRpbmciLCJzZXRBbmltYXRpbmciLCJzZXRUb2dnbGVUaW1lb3V0IiwidXNlQ2FsbGJhY2siLCJjdXJyZW50Iiwic2V0VGltZW91dCIsImN1cnJlbnRTdGF0ZSIsInVzZUVmZmVjdCIsImNsZWFyVGltZW91dCIsImpzeCIsIkFjdGl2aXR5SW5kaWNhdG9yIiwic3R5bGUiLCJzdHlsZXMiLCJjZW50ZXJpbmciLCJoZWlnaHQiLCJzaXplIiwiX2MiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwicGFkZGluZyIsImdyYXkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJob3Jpem9udGFsIiwiZmxleERpcmVjdGlvbiIsImV4cG9ydHMiLCJkaXNwbGF5TmFtZSIsInVuZGVmaW5lZCIsImNhdGVnb3J5IiwiZnJhbWV3b3JrIiwidGl0bGUiLCJkb2N1bWVudGF0aW9uVVJMIiwiZGVzY3JpcHRpb24iLCJleGFtcGxlcyIsInJlbmRlciIsImNvbG9yIiwidGVzdElEIiwiYWNjZXNzaWJpbGl0eUxhYmVsIiwianN4cyIsIlZpZXciLCJjaGlsZHJlbiIsInRyYW5zZm9ybSIsInNjYWxlIiwicGxhdGZvcm0iLCIkUmVmcmVzaFJlZyQiXSwibWFwcGluZ3MiOiI7OztFQVlB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","startColumn":0,"startLine":0,"url":"http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.bundle//&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true"}} +Tue, 20 Feb 2024 12:32:37 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:37 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:38 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:38 GMT Metro:WatchmanWatcher Handling change to: js/examples/ActivityIndicator/ActivityIndicatorExample.js (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:38 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:38 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:38 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:38 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:32:38 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Runtime.consoleAPICalled\",\"params\":{\"args\":[{\"className\":\"Object\",\"description\":\"Object\",\"objectId\":\"1\",\"type\":\"object\"}],\"executionContextId\":1,\"timestamp\":1708432358719.424,\"type\":\"error\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:32:38 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Runtime.consoleAPICalled","params":{"args":[{"className":"Object","description":"Object","objectId":"1","type":"object"}],"executionContextId":1,"timestamp":1708432358719.424,"type":"error"}} +Tue, 20 Feb 2024 12:32:38 GMT Metro:Server Handling request: http://localhost:8081/symbolicate +Tue, 20 Feb 2024 12:32:38 GMT Metro:Server Start symbolication +Tue, 20 Feb 2024 12:32:38 GMT Metro:Server Getting source maps for symbolication +Tue, 20 Feb 2024 12:32:38 GMT Metro:Server Performing fast symbolication +Tue, 20 Feb 2024 12:32:38 GMT Metro:Server Symbolication done +Tue, 20 Feb 2024 12:32:40 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 2, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:40 GMT Metro:WatchmanWatcher Handling change to: stdout (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:40 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:50 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:50 GMT Metro:WatchmanWatcher Handling change to: js/examples/ActivityIndicator/ActivityIndicatorExample.js (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:32:50 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endColumn\":0,\"endLine\":0,\"executionContextId\":1,\"hash\":\"\",\"scriptId\":\"6\",\"sourceMapURL\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\",\"startColumn\":0,\"startLine\":0,\"url\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.bundle\\\/\\\/&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:32:50 GMT Metro:Server Handling request: http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:32:50 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:32:50 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Debugger.scriptParsed","params":{"endColumn":0,"endLine":0,"executionContextId":1,"hash":"","scriptId":"6","sourceMapURL":"data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BY3Rpdml0eUluZGljYXRvci9BY3Rpdml0eUluZGljYXRvckV4YW1wbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFN0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yKCkge1xuICBjb25zdCB0aW1lciA9IHVzZVJlZjx2b2lkIHwgVGltZW91dElEPigpO1xuXG4gICdicmVhayc7XG5cbiAgY29uc3QgW2FuaW1hdGluZywgc2V0QW5pbWF0aW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIGNvbnN0IHNldFRvZ2dsZVRpbWVvdXQ6ICgpID0+IHZvaWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0aW5nKGN1cnJlbnRTdGF0ZSA9PiAhY3VycmVudFN0YXRlKTtcbiAgICAgIHNldFRvZ2dsZVRpbWVvdXQoKTtcbiAgICB9LCAyMDAwKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VG9nZ2xlVGltZW91dCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lci5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbdGltZXIsIHNldFRvZ2dsZVRpbWVvdXRdKTtcblxuICByZXR1cm4gKFxuICAgIDxBY3Rpdml0eUluZGljYXRvclxuICAgICAgYW5pbWF0aW5nPXthbmltYXRpbmd9XG4gICAgICBzdHlsZT17W3N0eWxlcy5jZW50ZXJpbmcsIHtoZWlnaHQ6IDgwfV19XG4gICAgICBzaXplPVwibGFyZ2VcIlxuICAgIC8+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgY2VudGVyaW5nOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6IDgsXG4gIH0sXG4gIGdyYXk6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjY2NjY2NjJyxcbiAgfSxcbiAgaG9yaXpvbnRhbDoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJyxcbiAgICBwYWRkaW5nOiA4LFxuICB9LFxufSk7XG5cbmV4cG9ydHMuZGlzcGxheU5hbWUgPSAodW5kZWZpbmVkOiA/c3RyaW5nKTtcbmV4cG9ydHMuY2F0ZWdvcnkgPSAnVUknO1xuZXhwb3J0cy5mcmFtZXdvcmsgPSAnUmVhY3QnO1xuZXhwb3J0cy50aXRsZSA9ICdBY3Rpdml0eUluZGljYXRvcic7XG5leHBvcnRzLmRvY3VtZW50YXRpb25VUkwgPSAnaHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvZG9jcy9hY3Rpdml0eWluZGljYXRvcic7XG5leHBvcnRzLmRlc2NyaXB0aW9uID0gJ0FuaW1hdGVkIGxvYWRpbmcgaW5kaWNhdG9ycy4nO1xuXG5leHBvcnRzLmV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdEZWZhdWx0IChzbWFsbCwgd2hpdGUpJyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5jZW50ZXJpbmcsIHN0eWxlcy5ncmF5XX1cbiAgICAgICAgICBjb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICB0ZXN0SUQ9XCJkZWZhdWx0X2FjdGl2aXR5X2luZGljYXRvclwiXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eUxhYmVsPVwiV2FpdCBmb3IgY29udGVudCB0byBsb2FkIVwiXG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0dyYXknLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBzdHlsZT17W3N0eWxlcy5jZW50ZXJpbmddfSAvPlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBzdHlsZT17W3N0eWxlcy5jZW50ZXJpbmcsIHN0eWxlcy5ncmF5XX0gLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXN0b20gY29sb3JzJyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBjb2xvcj1cIiMwMDAwZmZcIiAvPlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBjb2xvcj1cIiNhYTAwYWFcIiAvPlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBjb2xvcj1cIiNhYTMzMDBcIiAvPlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBjb2xvcj1cIiMwMGFhMDBcIiAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xhcmdlJyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5jZW50ZXJpbmcsIHN0eWxlcy5ncmF5XX1cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIGNvbG9yPVwid2hpdGVcIlxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMYXJnZSwgY3VzdG9tIGNvbG9ycycsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc2l6ZT1cImxhcmdlXCIgY29sb3I9XCIjMDAwMGZmXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc2l6ZT1cImxhcmdlXCIgY29sb3I9XCIjYWEwMGFhXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc2l6ZT1cImxhcmdlXCIgY29sb3I9XCIjYWEzMzAwXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc2l6ZT1cImxhcmdlXCIgY29sb3I9XCIjMDBhYTAwXCIgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTdGFydC9zdG9wJyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gPFRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yIC8+O1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0N1c3RvbSBzaXplJyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5jZW50ZXJpbmcsIHt0cmFuc2Zvcm06IFt7c2NhbGU6IDEuNX1dfV19XG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgdGl0bGU6ICdDdXN0b20gc2l6ZSAoc2l6ZTogNzUpJyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gPEFjdGl2aXR5SW5kaWNhdG9yIHN0eWxlPXtzdHlsZXMuY2VudGVyaW5nfSBzaXplPXs3NX0gLz47XG4gICAgfSxcbiAgfSxcbl07XG4iXSwieF9mYWNlYm9va19zb3VyY2VzIjpbW3sibmFtZXMiOlsiPGdsb2JhbD4iLCJUb2dnbGVBbmltYXRpbmdBY3Rpdml0eUluZGljYXRvciIsInNldFRvZ2dsZVRpbWVvdXQiLCJzZXRUaW1lb3V0JGFyZ3VtZW50XzAiLCJzZXRBbmltYXRpbmckYXJndW1lbnRfMCIsInVzZUVmZmVjdCRhcmd1bWVudF8wIiwiPGFub255bW91cz4iLCJyZW5kZXIiXSwibWFwcGluZ3MiOiJBQUE7QUNlO21EQ087K0JDQzttQkNDLDZCRDtLREU7R0RDO1lJRTtXQ0c7S0RFO0dKQztDRFM7SU80QjtLUFM7SU9JO0tQTztJT0k7S1BTO0lPSTtLUFE7SU9JO0tQUztJT0k7S1BFO0lPSTtLUE87SU9LO0tQRSJ9XV0sIm5hbWVzIjpbIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiXyQkX1JFUVVJUkUiLCJfZGVwZW5kZW5jeU1hcCIsIl9yZWFjdE5hdGl2ZSIsIl9qc3hSdW50aW1lIiwiX2pzeEZpbGVOYW1lIiwiX3MiLCIkUmVmcmVzaFNpZyQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiVG9nZ2xlQW5pbWF0aW5nQWN0aXZpdHlJbmRpY2F0b3IiLCJ0aW1lciIsInVzZVJlZiIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImFuaW1hdGluZyIsInNldEFuaW1hdGluZyIsInNldFRvZ2dsZVRpbWVvdXQiLCJ1c2VDYWxsYmFjayIsImN1cnJlbnQiLCJzZXRUaW1lb3V0IiwiY3VycmVudFN0YXRlIiwidXNlRWZmZWN0IiwiY2xlYXJUaW1lb3V0IiwianN4IiwiQWN0aXZpdHlJbmRpY2F0b3IiLCJzdHlsZSIsInN0eWxlcyIsImNlbnRlcmluZyIsImhlaWdodCIsInNpemUiLCJfYyIsIlN0eWxlU2hlZXQiLCJjcmVhdGUiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJwYWRkaW5nIiwiZ3JheSIsImJhY2tncm91bmRDb2xvciIsImhvcml6b250YWwiLCJmbGV4RGlyZWN0aW9uIiwiZXhwb3J0cyIsImRpc3BsYXlOYW1lIiwidW5kZWZpbmVkIiwiY2F0ZWdvcnkiLCJmcmFtZXdvcmsiLCJ0aXRsZSIsImRvY3VtZW50YXRpb25VUkwiLCJkZXNjcmlwdGlvbiIsImV4YW1wbGVzIiwicmVuZGVyIiwiY29sb3IiLCJ0ZXN0SUQiLCJhY2Nlc3NpYmlsaXR5TGFiZWwiLCJqc3hzIiwiVmlldyIsImNoaWxkcmVuIiwidHJhbnNmb3JtIiwic2NhbGUiLCJwbGF0Zm9ybSIsIiRSZWZyZXNoUmVnJCJdLCJtYXBwaW5ncyI6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","startColumn":0,"startLine":0,"url":"http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.bundle//&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true"}} +Tue, 20 Feb 2024 12:32:50 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:50 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:53 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:53 GMT Metro:WatchmanWatcher Handling change to: js/examples/ActivityIndicator/ActivityIndicatorExample.js (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:32:53 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endColumn\":0,\"endLine\":0,\"executionContextId\":1,\"hash\":\"\",\"scriptId\":\"7\",\"sourceMapURL\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\",\"startColumn\":0,\"startLine\":0,\"url\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.bundle\\\/\\\/&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:32:53 GMT Metro:Server Handling request: http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:32:53 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:32:53 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Debugger.scriptParsed","params":{"endColumn":0,"endLine":0,"executionContextId":1,"hash":"","scriptId":"7","sourceMapURL":"data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BY3Rpdml0eUluZGljYXRvci9BY3Rpdml0eUluZGljYXRvckV4YW1wbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFN0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yKCkge1xuICBjb25zdCB0aW1lciA9IHVzZVJlZjx2b2lkIHwgVGltZW91dElEPigpO1xuXG4gICgnZGVidWcnKTtcblxuICBjb25zdCBbYW5pbWF0aW5nLCBzZXRBbmltYXRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgY29uc3Qgc2V0VG9nZ2xlVGltZW91dDogKCkgPT4gdm9pZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0aW1lci5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRBbmltYXRpbmcoY3VycmVudFN0YXRlID0+ICFjdXJyZW50U3RhdGUpO1xuICAgICAgc2V0VG9nZ2xlVGltZW91dCgpO1xuICAgIH0sIDIwMDApO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRUb2dnbGVUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFt0aW1lciwgc2V0VG9nZ2xlVGltZW91dF0pO1xuXG4gIHJldHVybiAoXG4gICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICBhbmltYXRpbmc9e2FuaW1hdGluZ31cbiAgICAgIHN0eWxlPXtbc3R5bGVzLmNlbnRlcmluZywge2hlaWdodDogODB9XX1cbiAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgLz5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBjZW50ZXJpbmc6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgcGFkZGluZzogOCxcbiAgfSxcbiAgZ3JheToge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNjY2NjY2MnLFxuICB9LFxuICBob3Jpem9udGFsOiB7XG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnLFxuICAgIHBhZGRpbmc6IDgsXG4gIH0sXG59KTtcblxuZXhwb3J0cy5kaXNwbGF5TmFtZSA9ICh1bmRlZmluZWQ6ID9zdHJpbmcpO1xuZXhwb3J0cy5jYXRlZ29yeSA9ICdVSSc7XG5leHBvcnRzLmZyYW1ld29yayA9ICdSZWFjdCc7XG5leHBvcnRzLnRpdGxlID0gJ0FjdGl2aXR5SW5kaWNhdG9yJztcbmV4cG9ydHMuZG9jdW1lbnRhdGlvblVSTCA9ICdodHRwczovL3JlYWN0bmF0aXZlLmRldi9kb2NzL2FjdGl2aXR5aW5kaWNhdG9yJztcbmV4cG9ydHMuZGVzY3JpcHRpb24gPSAnQW5pbWF0ZWQgbG9hZGluZyBpbmRpY2F0b3JzLic7XG5cbmV4cG9ydHMuZXhhbXBsZXMgPSBbXG4gIHtcbiAgICB0aXRsZTogJ0RlZmF1bHQgKHNtYWxsLCB3aGl0ZSknLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxBY3Rpdml0eUluZGljYXRvclxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmNlbnRlcmluZywgc3R5bGVzLmdyYXldfVxuICAgICAgICAgIGNvbG9yPVwid2hpdGVcIlxuICAgICAgICAgIHRlc3RJRD1cImRlZmF1bHRfYWN0aXZpdHlfaW5kaWNhdG9yXCJcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJXYWl0IGZvciBjb250ZW50IHRvIGxvYWQhXCJcbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnR3JheScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHN0eWxlPXtbc3R5bGVzLmNlbnRlcmluZ119IC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHN0eWxlPXtbc3R5bGVzLmNlbnRlcmluZywgc3R5bGVzLmdyYXldfSAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0N1c3RvbSBjb2xvcnMnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIGNvbG9yPVwiIzAwMDBmZlwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIGNvbG9yPVwiI2FhMDBhYVwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIGNvbG9yPVwiI2FhMzMwMFwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIGNvbG9yPVwiIzAwYWEwMFwiIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTGFyZ2UnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxBY3Rpdml0eUluZGljYXRvclxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmNlbnRlcmluZywgc3R5bGVzLmdyYXldfVxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgY29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xhcmdlLCBjdXN0b20gY29sb3JzJyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VmlldyBzdHlsZT17c3R5bGVzLmhvcml6b250YWx9PlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBzaXplPVwibGFyZ2VcIiBjb2xvcj1cIiMwMDAwZmZcIiAvPlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBzaXplPVwibGFyZ2VcIiBjb2xvcj1cIiNhYTAwYWFcIiAvPlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBzaXplPVwibGFyZ2VcIiBjb2xvcj1cIiNhYTMzMDBcIiAvPlxuICAgICAgICAgIDxBY3Rpdml0eUluZGljYXRvciBzaXplPVwibGFyZ2VcIiBjb2xvcj1cIiMwMGFhMDBcIiAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1N0YXJ0L3N0b3AnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiA8VG9nZ2xlQW5pbWF0aW5nQWN0aXZpdHlJbmRpY2F0b3IgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ3VzdG9tIHNpemUnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxBY3Rpdml0eUluZGljYXRvclxuICAgICAgICAgIHN0eWxlPXtbc3R5bGVzLmNlbnRlcmluZywge3RyYW5zZm9ybTogW3tzY2FsZTogMS41fV19XX1cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICB0aXRsZTogJ0N1c3RvbSBzaXplIChzaXplOiA3NSknLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e3N0eWxlcy5jZW50ZXJpbmd9IHNpemU9ezc1fSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiJdLCJ4X2ZhY2Vib29rX3NvdXJjZXMiOltbeyJuYW1lcyI6WyI8Z2xvYmFsPiIsIlRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yIiwic2V0VG9nZ2xlVGltZW91dCIsInNldFRpbWVvdXQkYXJndW1lbnRfMCIsInNldEFuaW1hdGluZyRhcmd1bWVudF8wIiwidXNlRWZmZWN0JGFyZ3VtZW50XzAiLCI8YW5vbnltb3VzPiIsInJlbmRlciJdLCJtYXBwaW5ncyI6IkFBQTtBQ2U7bURDTzsrQkNDO21CQ0MsNkJEO0tERTtHREM7WUlFO1dDRztLREU7R0pDO0NEUztJTzRCO0tQUztJT0k7S1BPO0lPSTtLUFM7SU9JO0tQUTtJT0k7S1BTO0lPSTtLUEU7SU9JO0tQTztJT0s7S1BFIn1dXSwibmFtZXMiOlsiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfJCRfUkVRVUlSRSIsIl9kZXBlbmRlbmN5TWFwIiwiX3JlYWN0TmF0aXZlIiwiX2pzeFJ1bnRpbWUiLCJfanN4RmlsZU5hbWUiLCJfcyIsIiRSZWZyZXNoU2lnJCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJUb2dnbGVBbmltYXRpbmdBY3Rpdml0eUluZGljYXRvciIsInRpbWVyIiwidXNlUmVmIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiYW5pbWF0aW5nIiwic2V0QW5pbWF0aW5nIiwic2V0VG9nZ2xlVGltZW91dCIsInVzZUNhbGxiYWNrIiwiY3VycmVudCIsInNldFRpbWVvdXQiLCJjdXJyZW50U3RhdGUiLCJ1c2VFZmZlY3QiLCJjbGVhclRpbWVvdXQiLCJqc3giLCJBY3Rpdml0eUluZGljYXRvciIsInN0eWxlIiwic3R5bGVzIiwiY2VudGVyaW5nIiwiaGVpZ2h0Iiwic2l6ZSIsIl9jIiwiU3R5bGVTaGVldCIsImNyZWF0ZSIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsInBhZGRpbmciLCJncmF5IiwiYmFja2dyb3VuZENvbG9yIiwiaG9yaXpvbnRhbCIsImZsZXhEaXJlY3Rpb24iLCJleHBvcnRzIiwiZGlzcGxheU5hbWUiLCJ1bmRlZmluZWQiLCJjYXRlZ29yeSIsImZyYW1ld29yayIsInRpdGxlIiwiZG9jdW1lbnRhdGlvblVSTCIsImRlc2NyaXB0aW9uIiwiZXhhbXBsZXMiLCJyZW5kZXIiLCJjb2xvciIsInRlc3RJRCIsImFjY2Vzc2liaWxpdHlMYWJlbCIsImpzeHMiLCJWaWV3IiwiY2hpbGRyZW4iLCJ0cmFuc2Zvcm0iLCJzY2FsZSIsInBsYXRmb3JtIiwiJFJlZnJlc2hSZWckIl0sIm1hcHBpbmdz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","startColumn":0,"startLine":0,"url":"http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.bundle//&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true"}} +Tue, 20 Feb 2024 12:32:53 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:53 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:59 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 2, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:32:59 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:32:59 GMT Metro:WatchmanWatcher Handling change to: stdout (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:33:10 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:33:10 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:33:17 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:33:17 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:33:19 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:33:19 GMT Metro:WatchmanWatcher Handling change to: js/examples/ActivityIndicator/ActivityIndicatorExample.js (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:33:19 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:33:19 GMT Metro:DeltaCalculator Handling change: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js (type: f) +Tue, 20 Feb 2024 12:33:19 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:33:19 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:33:20 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:33:20 GMT Metro:InspectorProxy (Debugger) (Proxy) <- (Device): {"event":"wrappedEvent","payload":{"wrappedEvent":"{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endColumn\":0,\"endLine\":0,\"executionContextId\":1,\"hash\":\"\",\"scriptId\":\"8\",\"sourceMapURL\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\",\"startColumn\":0,\"startLine\":0,\"url\":\"http:\\\/\\\/localhost:8081\\\/js\\\/examples\\\/ActivityIndicator\\\/ActivityIndicatorExample.bundle\\\/\\\/&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true\"}}","pageId":"5"}} +Tue, 20 Feb 2024 12:33:20 GMT Metro:Server Handling request: http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.map?platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true +Tue, 20 Feb 2024 12:33:20 GMT Metro:DeltaCalculator Calculating delta (reset: false, shallow: false) +Tue, 20 Feb 2024 12:33:20 GMT Metro:DeltaCalculator Traversing dependencies for 1 paths +Tue, 20 Feb 2024 12:33:20 GMT Metro:DeltaCalculator Calculated graph delta {added: 0, modified: 1, deleted: 0} +Tue, 20 Feb 2024 12:33:20 GMT Metro:InspectorProxy (Debugger) <- (Proxy) (Device): {"method":"Debugger.scriptParsed","params":{"endColumn":0,"endLine":0,"executionContextId":1,"hash":"","scriptId":"8","sourceMapURL":"data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9yb2Job2dhbi9mYnNvdXJjZS94cGxhdC9qcy9yZWFjdC1uYXRpdmUtZ2l0aHViL3BhY2thZ2VzL3JuLXRlc3Rlci9qcy9leGFtcGxlcy9BY3Rpdml0eUluZGljYXRvci9BY3Rpdml0eUluZGljYXRvckV4YW1wbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmb3JtYXRcbiAqIEBmbG93IHN0cmljdC1sb2NhbFxuICovXG5cbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFN0eWxlU2hlZXQsIFZpZXd9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbmZ1bmN0aW9uIFRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yKCkge1xuICBjb25zdCB0aW1lciA9IHVzZVJlZjx2b2lkIHwgVGltZW91dElEPigpO1xuXG4gIGRlYnVnZ2VyO1xuXG4gIGNvbnN0IFthbmltYXRpbmcsIHNldEFuaW1hdGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCBzZXRUb2dnbGVUaW1lb3V0OiAoKSA9PiB2b2lkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldEFuaW1hdGluZyhjdXJyZW50U3RhdGUgPT4gIWN1cnJlbnRTdGF0ZSk7XG4gICAgICBzZXRUb2dnbGVUaW1lb3V0KCk7XG4gICAgfSwgMjAwMCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFRvZ2dsZVRpbWVvdXQoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW3RpbWVyLCBzZXRUb2dnbGVUaW1lb3V0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QWN0aXZpdHlJbmRpY2F0b3JcbiAgICAgIGFuaW1hdGluZz17YW5pbWF0aW5nfVxuICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7aGVpZ2h0OiA4MH1dfVxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNlbnRlcmluZzoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiA4LFxuICB9LFxuICBncmF5OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2NjY2NjYycsXG4gIH0sXG4gIGhvcml6b250YWw6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gICAgcGFkZGluZzogOCxcbiAgfSxcbn0pO1xuXG5leHBvcnRzLmRpc3BsYXlOYW1lID0gKHVuZGVmaW5lZDogP3N0cmluZyk7XG5leHBvcnRzLmNhdGVnb3J5ID0gJ1VJJztcbmV4cG9ydHMuZnJhbWV3b3JrID0gJ1JlYWN0JztcbmV4cG9ydHMudGl0bGUgPSAnQWN0aXZpdHlJbmRpY2F0b3InO1xuZXhwb3J0cy5kb2N1bWVudGF0aW9uVVJMID0gJ2h0dHBzOi8vcmVhY3RuYXRpdmUuZGV2L2RvY3MvYWN0aXZpdHlpbmRpY2F0b3InO1xuZXhwb3J0cy5kZXNjcmlwdGlvbiA9ICdBbmltYXRlZCBsb2FkaW5nIGluZGljYXRvcnMuJztcblxuZXhwb3J0cy5leGFtcGxlcyA9IFtcbiAge1xuICAgIHRpdGxlOiAnRGVmYXVsdCAoc21hbGwsIHdoaXRlKScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgY29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgICAgdGVzdElEPVwiZGVmYXVsdF9hY3Rpdml0eV9pbmRpY2F0b3JcIlxuICAgICAgICAgIGFjY2Vzc2liaWxpdHlMYWJlbD1cIldhaXQgZm9yIGNvbnRlbnQgdG8gbG9hZCFcIlxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdHcmF5JyxcbiAgICByZW5kZXIoKTogTm9kZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nXX0gLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19IC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ3VzdG9tIGNvbG9ycycsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy5ob3Jpem9udGFsfT5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDAwMGZmXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEwMGFhXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjYWEzMzAwXCIgLz5cbiAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3IgY29sb3I9XCIjMDBhYTAwXCIgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdMYXJnZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCBzdHlsZXMuZ3JheV19XG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cIndoaXRlXCJcbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTGFyZ2UsIGN1c3RvbSBjb2xvcnMnLFxuICAgIHJlbmRlcigpOiBOb2RlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMuaG9yaXpvbnRhbH0+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwMDBmZlwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMDBhYVwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiI2FhMzMwMFwiIC8+XG4gICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIGNvbG9yPVwiIzAwYWEwMFwiIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhcnQvc3RvcCcsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxUb2dnbGVBbmltYXRpbmdBY3Rpdml0eUluZGljYXRvciAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXN0b20gc2l6ZScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e1tzdHlsZXMuY2VudGVyaW5nLCB7dHJhbnNmb3JtOiBbe3NjYWxlOiAxLjV9XX1dfVxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnLFxuICAgIHRpdGxlOiAnQ3VzdG9tIHNpemUgKHNpemU6IDc1KScsXG4gICAgcmVuZGVyKCk6IE5vZGUge1xuICAgICAgcmV0dXJuIDxBY3Rpdml0eUluZGljYXRvciBzdHlsZT17c3R5bGVzLmNlbnRlcmluZ30gc2l6ZT17NzV9IC8+O1xuICAgIH0sXG4gIH0sXG5dO1xuIl0sInhfZmFjZWJvb2tfc291cmNlcyI6W1t7Im5hbWVzIjpbIjxnbG9iYWw+IiwiVG9nZ2xlQW5pbWF0aW5nQWN0aXZpdHlJbmRpY2F0b3IiLCJzZXRUb2dnbGVUaW1lb3V0Iiwic2V0VGltZW91dCRhcmd1bWVudF8wIiwic2V0QW5pbWF0aW5nJGFyZ3VtZW50XzAiLCJ1c2VFZmZlY3QkYXJndW1lbnRfMCIsIjxhbm9ueW1vdXM+IiwicmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBO0FDZTttRENPOytCQ0M7bUJDQyw2QkQ7S0RFO0dEQztZSUU7V0NHO0tERTtHSkM7Q0RTO0lPNEI7S1BTO0lPSTtLUE87SU9JO0tQUztJT0k7S1BRO0lPSTtLUFM7SU9JO0tQRTtJT0k7S1BPO0lPSztLUEUifV1dLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl8kJF9SRVFVSVJFIiwiX2RlcGVuZGVuY3lNYXAiLCJfcmVhY3ROYXRpdmUiLCJfanN4UnVudGltZSIsIl9qc3hGaWxlTmFtZSIsIl9zIiwiJFJlZnJlc2hTaWckIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIlRvZ2dsZUFuaW1hdGluZ0FjdGl2aXR5SW5kaWNhdG9yIiwidGltZXIiLCJ1c2VSZWYiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJhbmltYXRpbmciLCJzZXRBbmltYXRpbmciLCJzZXRUb2dnbGVUaW1lb3V0IiwidXNlQ2FsbGJhY2siLCJjdXJyZW50Iiwic2V0VGltZW91dCIsImN1cnJlbnRTdGF0ZSIsInVzZUVmZmVjdCIsImNsZWFyVGltZW91dCIsImpzeCIsIkFjdGl2aXR5SW5kaWNhdG9yIiwic3R5bGUiLCJzdHlsZXMiLCJjZW50ZXJpbmciLCJoZWlnaHQiLCJzaXplIiwiX2MiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwicGFkZGluZyIsImdyYXkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJob3Jpem9udGFsIiwiZmxleERpcmVjdGlvbiIsImV4cG9ydHMiLCJkaXNwbGF5TmFtZSIsInVuZGVmaW5lZCIsImNhdGVnb3J5IiwiZnJhbWV3b3JrIiwidGl0bGUiLCJkb2N1bWVudGF0aW9uVVJMIiwiZGVzY3JpcHRpb24iLCJleGFtcGxlcyIsInJlbmRlciIsImNvbG9yIiwidGVzdElEIiwiYWNjZXNzaWJpbGl0eUxhYmVsIiwianN4cyIsIlZpZXciLCJjaGlsZHJlbiIsInRyYW5zZm9ybSIsInNjYWxlIiwicGxhdGZvcm0iLCIkUmVmcmVzaFJlZyQiXSwibWFwcGluZ3Mi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","startColumn":0,"startLine":0,"url":"http://localhost:8081/js/examples/ActivityIndicator/ActivityIndicatorExample.bundle//&platform=ios&lazy=true&inlineSourceMap=false&modulesOnly=true&app=com.meta.RNTester.localDevelopment&dev=true&minify=false&runModule=true&shallow=true"}} +Tue, 20 Feb 2024 12:33:20 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:33:20 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +Tue, 20 Feb 2024 12:33:28 GMT Metro:WatchmanWatcher Received subscription response: metro-file-map-32770--Users-robhogan-fbsource-xplat-js-react-native-github-packages-rn-tester-bf271a2e7dd067f884d06e0d89309bd4 (fresh: false, files: 1, enter: undefined, leave: undefined) +Tue, 20 Feb 2024 12:33:28 GMT Metro:WatchmanWatcher Handling change to: stderr (new: false, exists: true, type: f) +error Command failed with exit code 130. diff --git a/packages/rn-tester/stdout b/packages/rn-tester/stdout new file mode 100644 index 00000000000000..b9a42d56238b5e --- /dev/null +++ b/packages/rn-tester/stdout @@ -0,0 +1,70 @@ +yarn run v1.18.0 +$ react-native start --experimental-debugger +info Welcome to React Native v1000.0 +info Starting dev server on port 8081... + + ▒▒▓▓▓▓▒▒ + ▒▓▓▓▒▒░░▒▒▓▓▓▒ + ▒▓▓▓▓░░░▒▒▒▒░░░▓▓▓▓▒ + ▓▓▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▓▓ + ▓▓░░░░░▒▓▓▓▓▓▓▒░░░░░▓▓ + ▓▓░░▓▓▒░░░▒▒░░░▒▓▒░░▓▓ + ▓▓░░▓▓▓▓▓▒▒▒▒▓▓▓▓▒░░▓▓ + ▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░▓▓ + ▓▓▒░░▒▒▓▓▓▓▓▓▓▓▒░░░▒▓▓ + ▒▓▓▓▒░░░▒▓▓▒░░░▒▓▓▓▒ + ▒▓▓▓▒░░░░▒▓▓▓▒ + ▒▒▓▓▓▓▒▒ + + + Welcome to Metro v0.80.3 + Fast - Scalable - Integrated + + +info Dev server ready + +i - run on iOS +a - run on Android +d - open Dev Menu +j - open debugger (experimental, Hermes only) +r - reload app + + BUNDLE js/RNTesterApp.ios.js + + LOG Running "RNTesterApp" with {"rootTag":21,"initialProps":{}} +info Launching JS debugger for first available target... + MAP js/RNTesterApp.ios.js + +transform[stderr]: `isModuleDeclaration` has been deprecated, please migrate to `isImportOrExportDeclaration` +transform[stderr]: at isModuleDeclaration (/Users/robhogan/fbsource/xplat/js/react-native-github/node_modules/@babel/types/lib/validators/generated/index.js:3940:35) +transform[stderr]: at NodePath. [as isModuleDeclaration] (/Users/robhogan/fbsource/xplat/js/react-native-github/node_modules/@babel/traverse/lib/path/index.js:181:12) + MAP js/examples/ActivityIndicator/ActivityIndicatorExample.js + + MAP js/examples/ActivityIndicator/ActivityIndicatorExample.js + +error: SyntaxError: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js: Unsyntactic break. (19:2) + + 17 | const timer = useRef(); + 18 | +> 19 | break + | ^ + 20 | + 21 | const [animating, setAnimating] = useState(true); + 22 | + ERROR [Error: TransformError SyntaxError: /Users/robhogan/fbsource/xplat/js/react-native-github/packages/rn-tester/js/examples/ActivityIndicator/ActivityIndicatorExample.js: Unsyntactic break. (19:2) + +  17 | const timer = useRef<void | TimeoutID>(); +  18 | +> 19 | break +  | ^ +  20 | +  21 | const [animating, setAnimating] = useState(true); +  22 |] + MAP js/examples/ActivityIndicator/ActivityIndicatorExample.js + + MAP js/examples/ActivityIndicator/ActivityIndicatorExample.js + + MAP js/examples/ActivityIndicator/ActivityIndicatorExample.js + +info Stopping server +info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.